diff --git a/float-no-zero/apidoc/global.html b/float-no-zero/apidoc/global.html new file mode 100644 index 0000000000..dd6a19ca9e --- /dev/null +++ b/float-no-zero/apidoc/global.html @@ -0,0 +1,452 @@ + + + + + OpenLayers 3 API Documentation - Global + + + + + + + + + + + + + + + + +
+ + + + +
+ +
+

+ grid +

+ +
+ +
+
+ + + + + + +
+ + + + + + + + + + + + + + + + + + + +
Source:
+
  • tilejsonsource.js, line 33
+ + + + + + + +
+ + + + +
+ + + + + + + + + + + + + + + + + + + + +
+ +
+ + + + + + +
+ +
+

+ number +

+ +
+ +
+
+ + + + + + +
+ + + + + + + + + + + + + + + + + + + +
Source:
+
  • gpxformat.js, line 274
+ + + + + + + +
+ + + + +
+ + + + + + + + + + + + + + + + + + + + +
+ +
+ + + + + + +
+ +
+

+ number +

+ +
+ +
+
+ + + + + + +
+ + + + + + + + + + + + + + + + + + + +
Source:
+
  • gpxformat.js, line 305
+ + + + + + + +
+ + + + +
+ + + + + + + + + + + + + + + + + + + + +
+ +
+ + + + + + +
+ +
+

+ number +

+ +
+ +
+
+ + + + + + +
+ + + + + + + + + + + + + + + + + + + +
Source:
+
  • gpxformat.js, line 611
+ + + + + + + +
+ + + + +
+ + + + + + + + + + + + + + + + + + + + +
+ +
+ + + + + + +
+ +
+

+ number +

+ +
+ +
+
+ + + + + + +
+ + + + + + + + + + + + + + + + + + + +
Source:
+
  • gpxformat.js, line 642
+ + + + + + + +
+ + + + +
+ + + + + + + + + + + + + + + + + + + + +
+ +
+ + + + +
+ + + +
+ + + + + + \ No newline at end of file diff --git a/float-no-zero/apidoc/index.html b/float-no-zero/apidoc/index.html new file mode 100644 index 0000000000..165af0487a --- /dev/null +++ b/float-no-zero/apidoc/index.html @@ -0,0 +1,169 @@ + + + + + OpenLayers 3 API Documentation - Index + + + + + + + + + + + + + + + + +
+ + + + + + +

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

Finding your way around

+

See the class list to the right and especially take a look at ol.Map and ol.layer.Layer because those are the central objects.

+

In general every use of OpenLayers starts by initializing a map, then adding the required layers. Controls and interactions can be added to change the behavior of the map.

+

Projections

+

A ol.proj.Projection defines which point on earth is represented by a pair of coordinates. +Coordinates within OpenLayers can be used in various projections where some common projections are always supported, +others can be used via Proj4js.

+

Maps and Layers

+

A map in OpenLayers is essentially a staple of layers that is viewed from the top. Layers are responsible for retrieving data and displaying it.

+

Contributing

+

See CONTRIBUTING.md for instructions +on building and testing OpenLayers. The file does also describe how to commit your changes to OpenLayers.

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

+ src/googx/dom/fullscreen.js +

+ +
+ +
+
+ + + + +

Functions for managing full screen status of the DOM.

+ + + +
+ + + + + + + + + + + + + + + + + + + +
Source:
+
  • fullscreen.js, line 15
+ + + + + + + +
+ + + + +
+ + + + + + + + + + + + + + + + + + + + +
+ +
+ + + + +
+ + + +
+ + + + + + \ No newline at end of file diff --git a/float-no-zero/apidoc/ol.Attribution.html b/float-no-zero/apidoc/ol.Attribution.html new file mode 100644 index 0000000000..3052080674 --- /dev/null +++ b/float-no-zero/apidoc/ol.Attribution.html @@ -0,0 +1,219 @@ + + + + + OpenLayers 3 API Documentation - Class: ol.Attribution + + + + + + + + + + + + + + + + +
+ + + + +
+ +
+

+ ol. + + ol.Attribution +

+ +
+ +
+
+ + + + +
+

new Attribution

+ + +
Stability: experimental
+ + + + +
+
+ + +
+

Create a new attribution to be associated with a layer source.

+

Example:

+
source: new ol.source.OSM({
+  attributions: [
+  new ol.Attribution({
+    html: 'All maps © ' +
+        '<a href="http://www.opencyclemap.org/">OpenCycleMap</a>'
+  }),
+  ol.source.OSM.DATA_ATTRIBUTION
+],
+..
+
+ + + + + + + +
Parameters:
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
NameTypeDescription
options + + +olx.AttributionOptions + + + +

Attribution options.

+ + + +
+ + + + + + + + + + + + + + + + + + + +
Source:
+
  • attribution.js, line 27
+ + + + + + + +
+ + + + + + + + + +
+ + +
+ + + + + + + + + + + + + + + + + + + + +
+ +
+ + + + +
+ + + +
+ + + + + + \ No newline at end of file diff --git a/float-no-zero/apidoc/ol.BrowserFeature.html b/float-no-zero/apidoc/ol.BrowserFeature.html new file mode 100644 index 0000000000..76a89cf816 --- /dev/null +++ b/float-no-zero/apidoc/ol.BrowserFeature.html @@ -0,0 +1,465 @@ + + + + + OpenLayers 3 API Documentation - Namespace: ol.BrowserFeature + + + + + + + + + + + + + + + + +
+ + + + +
+ +
+

+ ol. + + ol.BrowserFeature +

+ +
+ +
+
+ + + + + + +
+ + + + + + + + + + + + + + + + + + + +
Source:
+
  • browserfeature.jsdoc, line 1
+ + + + + + + +
+ + + + +
+ + + + + + + + + + + + + + +

Members

+ +
+ +
+

<static, constant> DEVICE_PIXEL_RATIO :number

+ + +
Stability: experimental
+ + + + +
+
+ +
+

The ratio between physical pixels and device-independent pixels +(dips) on the device (window.devicePixelRatio).

+
+ + + +
+ + + + + + + + + + + + + + + + + + + +
Source:
+
  • browserfeature.js, line 73
+ + + + + + + +
+ + + +
+ + + +
+

<static, constant> HAS_CANVAS :boolean

+ + +
Stability: experimental
+ + + + +
+
+ +
+

True if browser supports Canvas.

+
+ + + +
+ + + + + + + + + + + + + + + + + + + +
Source:
+
  • browserfeature.js, line 98
+ + + + + + + +
+ + + +
+ + + +
+

<static, constant> HAS_DEVICE_ORIENTATION :boolean

+ + +
Stability: experimental
+ + + + +
+
+ +
+

Indicates if DeviceOrientation is supported in the user's browser.

+
+ + + +
+ + + + + + + + + + + + + + + + + + + +
Source:
+
  • browserfeature.js, line 131
+ + + + + + + +
+ + + +
+ + + +
+

<static, constant> HAS_GEOLOCATION :boolean

+ + +
Stability: experimental
+ + + + +
+
+ +
+

Is HTML5 geolocation supported in the current browser?

+
+ + + +
+ + + + + + + + + + + + + + + + + + + +
Source:
+
  • browserfeature.js, line 150
+ + + + + + + +
+ + + +
+ + + +
+

<static, constant> HAS_TOUCH :boolean

+ + +
Stability: experimental
+ + + + +
+
+ +
+

True if browser supports touch events.

+
+ + + +
+ + + + + + + + + + + + + + + + + + + +
Source:
+
  • browserfeature.js, line 159
+ + + + + + + +
+ + + +
+ + + +
+

<static, constant> HAS_WEBGL :boolean

+ + +
Stability: experimental
+ + + + +
+
+ +
+

True if browser supports WebGL.

+
+ + + +
+ + + + + + + + + + + + + + + + + + + +
Source:
+
  • browserfeature.js, line 171
+ + + + + + + +
+ + + +
+ +
+ + + + + + + +
+ +
+ + + + +
+ + + +
+ + + + + + \ No newline at end of file diff --git a/float-no-zero/apidoc/ol.Collection.html b/float-no-zero/apidoc/ol.Collection.html new file mode 100644 index 0000000000..b085451ddf --- /dev/null +++ b/float-no-zero/apidoc/ol.Collection.html @@ -0,0 +1,3584 @@ + + + + + OpenLayers 3 API Documentation - Class: ol.Collection + + + + + + + + + + + + + + + + +
+ + + + +
+ +
+

+ ol. + + ol.Collection +

+ +
+ +
+
+ + + + +
+

new Collection

+ + +
Stability: experimental
+ + + + +
+
+ + +
+

A mutable MVC Array.

+
+ + + + + + + +
Parameters:
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
NameTypeArgumentDescription
array + + +Array + + + + + + <optional>
+ + + +

Array.

+ + + +
+ + + + + + + + + + + + + + + + + + + +
Source:
+
  • collection.js, line 64
+ + + + + + + +
+ + + + + + + + + +
+ + +
+ + +

Extends

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

Observable Properties

+
+ + + + + + + + + + + + + + + + + + + + + + + + +
NameTypeSettableEventDescription
length + + +number + + + + nochange:lengththe length of the array
+
+ + + + + + +

Methods

+ +
+ +
+

bindTo

+ + +
Stability: experimental
+ + + + +
+
+ + +
+

The bindTo method allows you to set up a two-way binding between a +source and target object. The method returns an +ol.ObjectAccessor with a transform method that lets you transform +values on the way from the source to the target and on the way back.

+

For example, if you had two map views (sourceView and targetView) +and you wanted the target view to have double the resolution of the +source view, you could transform the resolution on the way to and +from the target with the following:

+
sourceView.bindTo('resolution', targetView)
+  .transform(
+    function(sourceResolution) {
+      // from sourceView.resolution to targetView.resolution
+      return 2 * sourceResolution;
+    },
+    function(targetResolution) {
+      // from targetView.resolution to sourceView.resolution
+      return targetResolution / 2;
+    }
+  );
+
+ + + + + + + +
Parameters:
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
NameTypeArgumentDescription
key + + +string + + + + + + + +

Key name.

target + + +ol.Object + + + + + + + +

Target.

targetKey + + +string + + + + + + <optional>
+ + + +

Target key.

+ + + +
+ + + + + + + +
Inherited From:
+
+ + + + + + + + + + + + + +
Source:
+
  • object.js, line 232
+ + + + + + + +
+ + + + + + + +
Returns:
+ + + + +
+
+ Type +
+
+ +ol.ObjectAccessor + + +
+
+ + + + +
+ + + +
+

clear

+ + +
Stability: experimental
+ + + + +
+
+ + +
+

Remove all elements from the collection.

+
+ + + + + + + + + +
+ + + + + + + + + + + + + + + + + + + +
Source:
+
  • collection.js, line 84
+ + + + + + + +
+ + + + + + + + + +
+ + + +
+

dispatchChangeEvent

+ + +
Stability: experimental
+ + + + +
+
+ + + + + + + + + + +
+ + + + + + + +
Inherited From:
+
+ + + + + + + + + + + + + +
Source:
+
  • observable.js, line 35
+ + + + + + + +
+ + + + + + + + + +
+ + + +
+

extend

+ + +
Stability: experimental
+ + + + +
+
+ + + + + + + + +
Parameters:
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
NameTypeDescription
arr + + +Array + + + +

Array.

+ + + +
+ + + + + + + + + + + + + + + + + + + +
Source:
+
  • collection.js, line 96
+ + + + + + + +
+ + + + + + + +
Returns:
+ + +
+

This collection.

+
+ + + +
+
+ Type +
+
+ +ol.Collection + + +
+
+ + + + +
+ + + +
+

forEach

+ + +
Stability: experimental
+ + + + +
+
+ + +
+

Iterate over each element, calling the provided callback.

+
+ + + + + + + +
Parameters:
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
NameTypeArgumentDescription
f + + +function + + + + + + + +

The function to call + for every element. This function takes 3 arguments (the element, the + index and the array). The return value is ignored.

this + + +S + + + + + + <optional>
+ + + +

The object to use as this in f.

+ + + +
+ + + + + + + + + + + + + + + + + + + +
Source:
+
  • collection.js, line 114
+ + + + + + + +
+ + + + + + + + + +
+ + + +
+

get

+ + +
Stability: experimental
+ + + + +
+
+ + +
+

Gets a value.

+
+ + + + + + + +
Parameters:
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
NameTypeDescription
key + + +string + + + +

Key name.

+ + + +
+ + + + + + + +
Inherited From:
+
+ + + + + + + + + + + + + +
Source:
+
  • object.js, line 289
+ + + + + + + +
+ + + + + + + +
Returns:
+ + +
+

Value.

+
+ + + +
+
+ Type +
+
+ +* + + +
+
+ + + + +
+ + + +
+

getArray

+ + +
Stability: experimental
+ + + + +
+
+ + +
+

Get a reference to the underlying Array object. Warning: if the array +is mutated, no events will be dispatched by the collection, and the +collection's "length" property won't be in sync with the actual length +of the array.

+
+ + + + + + + + + +
+ + + + + + + + + + + + + + + + + + + +
Source:
+
  • collection.js, line 127
+ + + + + + + +
+ + + + + + + +
Returns:
+ + +
+

Array.

+
+ + + +
+
+ Type +
+
+ +Array + + +
+
+ + + + +
+ + + +
+

getAt

+ + +
Stability: experimental
+ + + + +
+
+ + +
+

Get the element at the provided index.

+
+ + + + + + + +
Parameters:
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
NameTypeDescription
index + + +number + + + +

Index.

+ + + +
+ + + + + + + + + + + + + + + + + + + +
Source:
+
  • collection.js, line 138
+ + + + + + + +
+ + + + + + + +
Returns:
+ + +
+

Element.

+
+ + + +
+
+ Type +
+
+ +* + + +
+
+ + + + +
+ + + +
+

getLength

+ + +
Stability: experimental
+ + + + +
+
+ + +
+

Get the length of this collection.

+
+ + + + + + + + + +
+ + + + + + + + + + + + + + + + + + + +
Source:
+
  • collection.js, line 148
+ + + + + + + +
+ + + + + + + +
Returns:
+ + +
+

Length.

+
+ + + +
+
+ Type +
+
+ +number + + +
+
+ + + + +
+ + + +
+

getProperties

+ + +
Stability: experimental
+ + + + +
+
+ + +
+

Get an object of all property names and values.

+
+ + + + + + + + + +
+ + + + + + + +
Inherited From:
+
+ + + + + + + + + + + + + +
Source:
+
  • object.js, line 348
+ + + + + + + +
+ + + + + + + +
Returns:
+ + +
+

Object.

+
+ + + +
+
+ Type +
+
+ +Object.<string, *> + + +
+
+ + + + +
+ + + +
+

insertAt

+ + +
Stability: experimental
+ + + + +
+
+ + +
+

Insert an element at the provided index.

+
+ + + + + + + +
Parameters:
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
NameTypeDescription
index + + +number + + + +

Index.

elem + + +* + + + +

Element.

+ + + +
+ + + + + + + + + + + + + + + + + + + +
Source:
+
  • collection.js, line 159
+ + + + + + + +
+ + + + + + + + + +
+ + + +
+

notify

+ + +
Stability: experimental
+ + + + +
+
+ + +
+

Notify all observers of a change on this property. This notifies both +objects that are bound to the object's property as well as the object +that it is bound to.

+
+ + + + + + + +
Parameters:
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
NameTypeDescription
key + + +string + + + +

Key name.

+ + + +
+ + + + + + + +
Inherited From:
+
+ + + + + + + + + + + + + +
Source:
+
  • object.js, line 368
+ + + + + + + +
+ + + + + + + + + +
+ + + +
+

on

+ + +
Stability: experimental
+ + + + +
+
+ + +
+

Listen for a certain type of event.

+
+ + + + + + + +
Parameters:
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
NameTypeArgumentDescription
type + + +string +| + +Array.<string> + + + + + + + +

The event type or array of event types.

listener + + +function + + + + + + + +

The listener function.

this + + +Object + + + + + + <optional>
+ + + +

The object to use as this in listener.

+ + + +
+ + + + + + + +
Inherited From:
+
+ + + + + + + + + + + + + +
Source:
+
  • observable.js, line 58
+ + + + + + + +
+ + + + + + + +
Returns:
+ + +
+

Unique key for the listener.

+
+ + + +
+
+ Type +
+
+ +goog.events.Key + + +
+
+ + + + +
+ + + +
+

once

+ + +
Stability: experimental
+ + + + +
+
+ + +
+

Listen once for a certain type of event.

+
+ + + + + + + +
Parameters:
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
NameTypeArgumentDescription
type + + +string +| + +Array.<string> + + + + + + + +

The event type or array of event types.

listener + + +function + + + + + + + +

The listener function.

this + + +Object + + + + + + <optional>
+ + + +

The object to use as this in listener.

+ + + +
+ + + + + + + +
Inherited From:
+
+ + + + + + + + + + + + + +
Source:
+
  • observable.js, line 71
+ + + + + + + +
+ + + + + + + +
Returns:
+ + +
+

Unique key for the listener.

+
+ + + +
+
+ Type +
+
+ +goog.events.Key + + +
+
+ + + + +
+ + + +
+

pop

+ + +
Stability: experimental
+ + + + +
+
+ + +
+

Remove the last element of the collection.

+
+ + + + + + + + + +
+ + + + + + + + + + + + + + + + + + + +
Source:
+
  • collection.js, line 172
+ + + + + + + +
+ + + + + + + +
Returns:
+ + +
+

Element.

+
+ + + +
+
+ Type +
+
+ +* + + +
+
+ + + + +
+ + + +
+

push

+ + +
Stability: experimental
+ + + + +
+
+ + +
+

Insert the provided element at the end of the collection.

+
+ + + + + + + +
Parameters:
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
NameTypeDescription
elem + + +* + + + +

Element.

+ + + +
+ + + + + + + + + + + + + + + + + + + +
Source:
+
  • collection.js, line 183
+ + + + + + + +
+ + + + + + + +
Returns:
+ + +
+

Length.

+
+ + + +
+
+ Type +
+
+ +number + + +
+
+ + + + +
+ + + +
+

remove

+ + +
Stability: experimental
+ + + + +
+
+ + +
+

Removes the first occurence of elem from the collection.

+
+ + + + + + + +
Parameters:
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
NameTypeDescription
elem + + +* + + + +

Element.

+ + + +
+ + + + + + + + + + + + + + + + + + + +
Source:
+
  • collection.js, line 196
+ + + + + + + +
+ + + + + + + +
Returns:
+ + +
+

The removed element or undefined if elem was not found.

+
+ + + +
+
+ Type +
+
+ +* + + +
+
+ + + + +
+ + + +
+

removeAt

+ + +
Stability: experimental
+ + + + +
+
+ + +
+

Remove the element at the provided index.

+
+ + + + + + + +
Parameters:
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
NameTypeDescription
index + + +number + + + +

Index.

+ + + +
+ + + + + + + + + + + + + + + + + + + +
Source:
+
  • collection.js, line 214
+ + + + + + + +
+ + + + + + + +
Returns:
+ + +
+

Value.

+
+ + + +
+
+ Type +
+
+ +* + + +
+
+ + + + +
+ + + +
+

set

+ + +
Stability: experimental
+ + + + +
+
+ + +
+

Sets a value.

+
+ + + + + + + +
Parameters:
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
NameTypeDescription
key + + +string + + + +

Key name.

value + + +* + + + +

Value.

+ + + +
+ + + + + + + +
Inherited From:
+
+ + + + + + + + + + + + + +
Source:
+
  • object.js, line 399
+ + + + + + + +
+ + + + + + + + + +
+ + + +
+

setAt

+ + +
Stability: experimental
+ + + + +
+
+ + +
+

Set the element at the provided index.

+
+ + + + + + + +
Parameters:
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
NameTypeDescription
index + + +number + + + +

Index.

elem + + +* + + + +

Element.

+ + + +
+ + + + + + + + + + + + + + + + + + + +
Source:
+
  • collection.js, line 230
+ + + + + + + +
+ + + + + + + + + +
+ + + +
+

setValues

+ + +
Stability: experimental
+ + + + +
+
+ + +
+

Sets a collection of key-value pairs.

+
+ + + + + + + +
Parameters:
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
NameTypeDescription
values + + +Object.<string, *> + + + +

Values.

+ + + +
+ + + + + + + +
Inherited From:
+
+ + + + + + + + + + + + + +
Source:
+
  • object.js, line 428
+ + + + + + + +
+ + + + + + + + + +
+ + + +
+

un

+ + +
Stability: experimental
+ + + + +
+
+ + +
+

Unlisten for a certain type of event.

+
+ + + + + + + +
Parameters:
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
NameTypeArgumentDescription
type + + +string +| + +Array.<string> + + + + + + + +

The event type or array of event types.

listener + + +function + + + + + + + +

The listener function.

this + + +Object + + + + + + <optional>
+ + + +

The object to use as this in listener.

+ + + +
+ + + + + + + +
Inherited From:
+
+ + + + + + + + + + + + + +
Source:
+
  • observable.js, line 83
+ + + + + + + +
+ + + + + + + + + +
+ + + +
+

unbind

+ + +
Stability: experimental
+ + + + +
+
+ + +
+

Removes a binding. Unbinding will set the unbound property to the current + value. The object will not be notified, as the value has not changed.

+
+ + + + + + + +
Parameters:
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
NameTypeDescription
key + + +string + + + +

Key name.

+ + + +
+ + + + + + + +
Inherited From:
+
+ + + + + + + + + + + + + +
Source:
+
  • object.js, line 442
+ + + + + + + +
+ + + + + + + + + +
+ + + +
+

unbindAll

+ + +
Stability: experimental
+ + + + +
+
+ + +
+

Removes all bindings.

+
+ + + + + + + + + +
+ + + + + + + +
Inherited From:
+
+ + + + + + + + + + + + + +
Source:
+
  • object.js, line 466
+ + + + + + + +
+ + + + + + + + + +
+ + + +
+

unByKey

+ + +
Stability: experimental
+ + + + +
+
+ + +
+

Removes an event listener using the key returned by on() or once().

+
+ + + + + + + +
Parameters:
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
NameTypeDescription
key + + +goog.events.Key + + + +

Key.

+ + + +
+ + + + + + + +
Inherited From:
+
+ + + + + + + + + + + + + +
Source:
+
  • observable.js, line 93
+ + + + + + + +
+ + + + + + + + + +
+ +
+ + + + + +
+ +
+ + + + +
+ + + +
+ + + + + + \ No newline at end of file diff --git a/float-no-zero/apidoc/ol.DeviceOrientation.html b/float-no-zero/apidoc/ol.DeviceOrientation.html new file mode 100644 index 0000000000..3541376c4b --- /dev/null +++ b/float-no-zero/apidoc/ol.DeviceOrientation.html @@ -0,0 +1,2798 @@ + + + + + OpenLayers 3 API Documentation - Class: ol.DeviceOrientation + + + + + + + + + + + + + + + + +
+ + + + +
+ +
+

+ ol. + + ol.DeviceOrientation +

+ +
+ +
+
+ + + + +
+

new DeviceOrientation

+ + +
Stability: experimental
+ + + + +
+
+ + +
+

The ol.DeviceOrientation class provides access to DeviceOrientation +information and events, see the HTML 5 DeviceOrientation Specification for more details.

+

Many new computers, and especially mobile phones +and tablets, provide hardware support for device orientation. Web +developers targetting mobile devices will be especially interested in this +class.

+

Device orientation data are relative to a common starting point. For mobile +devices, the starting point is to lay your phone face up on a table with the +top of the phone pointing north. This represents the zero state. All +angles are then relative to this state. For computers, it is the same except +the screen is open at 90 degrees.

+

Device orientation is reported as three angles - alpha, beta, and +gamma - relative to the starting position along the three planar axes X, Y +and Z. The X axis runs from the left edge to the right edge through the +middle of the device. Similarly, the Y axis runs from the bottom to the top +of the device through the middle. The Z axis runs from the back to the front +through the middle. In the starting position, the X axis points to the +right, the Y axis points away from you and the Z axis points straight up +from the device lying flat.

+

The three angles representing the device orientation are relative to the +three axes. alpha indicates how much the device has been rotated around the +Z axis, which is commonly interpreted as the compass heading (see note +below). beta indicates how much the device has been rotated around the X +axis, or how much it is tilted from front to back. gamma indicates how +much the device has been rotated around the Y axis, or how much it is tilted +from left to right.

+

For most browsers, the alpha value returns the compass heading so if the +device points north, it will be 0. With Safari on iOS, the 0 value of +alpha is calculated from when device orientation was first requested. +ol.DeviceOrientation provides the heading property which normalizes this +behavior across all browsers for you.

+

It is important to note that the HTML 5 DeviceOrientation specification +indicates that alpha, beta and gamma are in degrees while the +equivalent properties in ol.DeviceOrientation are in radians for consistency +with all other uses of angles throughout OpenLayers.

+
+ + + + + + + +
Parameters:
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
NameTypeArgumentDescription
options + + +olx.DeviceOrientationOptions + + + + + + <optional>
+ + + +

Options.

+ + + +
+ + + + + + + + + + + + + + + + + + + +
Source:
+
  • deviceorientation.js, line 84
+ + + + + +
See:
+
+ +
+ + + +
+ + + + + + + + + +
+ + +
+ + +

Extends

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

Observable Properties

+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
NameTypeSettableEventDescription
alpha + + +number + + + + nochange:alphathe euler angle in radians of the + device from the standard X axis
beta + + +number + + + + nochange:betathe euler angle in radians of the + device from the planar Z axis
gamma + + +number + + + + nochange:gammathe euler angle in radians of the + device from the planar X axis
heading + + +number + + + + nochange:headingthe euler angle in radians of the + device from the planar Y axis
tracking + + +boolean + + + + yeschange:trackingthe status of tracking changes to alpha, + beta and gamma. If true, changes are tracked and reported immediately.
+
+ + + + + + +

Methods

+ +
+ +
+

bindTo

+ + +
Stability: experimental
+ + + + +
+
+ + +
+

The bindTo method allows you to set up a two-way binding between a +source and target object. The method returns an +ol.ObjectAccessor with a transform method that lets you transform +values on the way from the source to the target and on the way back.

+

For example, if you had two map views (sourceView and targetView) +and you wanted the target view to have double the resolution of the +source view, you could transform the resolution on the way to and +from the target with the following:

+
sourceView.bindTo('resolution', targetView)
+  .transform(
+    function(sourceResolution) {
+      // from sourceView.resolution to targetView.resolution
+      return 2 * sourceResolution;
+    },
+    function(targetResolution) {
+      // from targetView.resolution to sourceView.resolution
+      return targetResolution / 2;
+    }
+  );
+
+ + + + + + + +
Parameters:
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
NameTypeArgumentDescription
key + + +string + + + + + + + +

Key name.

target + + +ol.Object + + + + + + + +

Target.

targetKey + + +string + + + + + + <optional>
+ + + +

Target key.

+ + + +
+ + + + + + + +
Inherited From:
+
+ + + + + + + + + + + + + +
Source:
+
  • object.js, line 232
+ + + + + + + +
+ + + + + + + +
Returns:
+ + + + +
+
+ Type +
+
+ +ol.ObjectAccessor + + +
+
+ + + + +
+ + + +
+

dispatchChangeEvent

+ + +
Stability: experimental
+ + + + +
+
+ + + + + + + + + + +
+ + + + + + + +
Inherited From:
+
+ + + + + + + + + + + + + +
Source:
+
  • observable.js, line 35
+ + + + + + + +
+ + + + + + + + + +
+ + + +
+

get

+ + +
Stability: experimental
+ + + + +
+
+ + +
+

Gets a value.

+
+ + + + + + + +
Parameters:
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
NameTypeDescription
key + + +string + + + +

Key name.

+ + + +
+ + + + + + + +
Inherited From:
+
+ + + + + + + + + + + + + +
Source:
+
  • object.js, line 289
+ + + + + + + +
+ + + + + + + +
Returns:
+ + +
+

Value.

+
+ + + +
+
+ Type +
+
+ +* + + +
+
+ + + + +
+ + + +
+

getAlpha

+ + +
Stability: experimental
+ + + + +
+
+ + + + + + + + + + +
+ + + + + + + + + + + + + + + + + + + +
Source:
+
  • deviceorientation.js, line 151
+ + + + + + + +
+ + + + + + + +
Returns:
+ + +
+

The alpha value of the DeviceOrientation, +in radians.

+
+ + + +
+
+ Type +
+
+ +number +| + +undefined + + +
+
+ + + + +
+ + + +
+

getBeta

+ + +
Stability: experimental
+ + + + +
+
+ + + + + + + + + + +
+ + + + + + + + + + + + + + + + + + + +
Source:
+
  • deviceorientation.js, line 166
+ + + + + + + +
+ + + + + + + +
Returns:
+ + +
+

The beta value of the DeviceOrientation, +in radians.

+
+ + + +
+
+ Type +
+
+ +number +| + +undefined + + +
+
+ + + + +
+ + + +
+

getGamma

+ + +
Stability: experimental
+ + + + +
+
+ + + + + + + + + + +
+ + + + + + + + + + + + + + + + + + + +
Source:
+
  • deviceorientation.js, line 181
+ + + + + + + +
+ + + + + + + +
Returns:
+ + +
+

The gamma value of the DeviceOrientation, +in radians.

+
+ + + +
+
+ Type +
+
+ +number +| + +undefined + + +
+
+ + + + +
+ + + +
+

getHeading

+ + +
Stability: experimental
+ + + + +
+
+ + + + + + + + + + +
+ + + + + + + + + + + + + + + + + + + +
Source:
+
  • deviceorientation.js, line 196
+ + + + + + + +
+ + + + + + + +
Returns:
+ + +
+

The heading of the device relative to +north, in radians, normalizing for different browser behavior.

+
+ + + +
+
+ Type +
+
+ +number +| + +undefined + + +
+
+ + + + +
+ + + +
+

getProperties

+ + +
Stability: experimental
+ + + + +
+
+ + +
+

Get an object of all property names and values.

+
+ + + + + + + + + +
+ + + + + + + +
Inherited From:
+
+ + + + + + + + + + + + + +
Source:
+
  • object.js, line 348
+ + + + + + + +
+ + + + + + + +
Returns:
+ + +
+

Object.

+
+ + + +
+
+ Type +
+
+ +Object.<string, *> + + +
+
+ + + + +
+ + + +
+

getTracking

+ + +
Stability: experimental
+ + + + +
+
+ + +
+

Are we tracking the device's orientation?

+
+ + + + + + + + + +
+ + + + + + + + + + + + + + + + + + + +
Source:
+
  • deviceorientation.js, line 211
+ + + + + + + +
+ + + + + + + +
Returns:
+ + +
+

The current tracking state, true if tracking is on.

+
+ + + +
+
+ Type +
+
+ +boolean + + +
+
+ + + + +
+ + + +
+

notify

+ + +
Stability: experimental
+ + + + +
+
+ + +
+

Notify all observers of a change on this property. This notifies both +objects that are bound to the object's property as well as the object +that it is bound to.

+
+ + + + + + + +
Parameters:
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
NameTypeDescription
key + + +string + + + +

Key name.

+ + + +
+ + + + + + + +
Inherited From:
+
+ + + + + + + + + + + + + +
Source:
+
  • object.js, line 368
+ + + + + + + +
+ + + + + + + + + +
+ + + +
+

on

+ + +
Stability: experimental
+ + + + +
+
+ + +
+

Listen for a certain type of event.

+
+ + + + + + + +
Parameters:
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
NameTypeArgumentDescription
type + + +string +| + +Array.<string> + + + + + + + +

The event type or array of event types.

listener + + +function + + + + + + + +

The listener function.

this + + +Object + + + + + + <optional>
+ + + +

The object to use as this in listener.

+ + + +
+ + + + + + + +
Inherited From:
+
+ + + + + + + + + + + + + +
Source:
+
  • observable.js, line 58
+ + + + + + + +
+ + + + + + + +
Returns:
+ + +
+

Unique key for the listener.

+
+ + + +
+
+ Type +
+
+ +goog.events.Key + + +
+
+ + + + +
+ + + +
+

once

+ + +
Stability: experimental
+ + + + +
+
+ + +
+

Listen once for a certain type of event.

+
+ + + + + + + +
Parameters:
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
NameTypeArgumentDescription
type + + +string +| + +Array.<string> + + + + + + + +

The event type or array of event types.

listener + + +function + + + + + + + +

The listener function.

this + + +Object + + + + + + <optional>
+ + + +

The object to use as this in listener.

+ + + +
+ + + + + + + +
Inherited From:
+
+ + + + + + + + + + + + + +
Source:
+
  • observable.js, line 71
+ + + + + + + +
+ + + + + + + +
Returns:
+ + +
+

Unique key for the listener.

+
+ + + +
+
+ Type +
+
+ +goog.events.Key + + +
+
+ + + + +
+ + + +
+

set

+ + +
Stability: experimental
+ + + + +
+
+ + +
+

Sets a value.

+
+ + + + + + + +
Parameters:
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
NameTypeDescription
key + + +string + + + +

Key name.

value + + +* + + + +

Value.

+ + + +
+ + + + + + + +
Inherited From:
+
+ + + + + + + + + + + + + +
Source:
+
  • object.js, line 399
+ + + + + + + +
+ + + + + + + + + +
+ + + +
+

setTracking

+ + +
Stability: experimental
+ + + + +
+
+ + +
+

Enable or disable tracking of DeviceOrientation events.

+
+ + + + + + + +
Parameters:
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
NameTypeDescription
tracking + + +boolean + + + +

True to enable and false to disable tracking.

+ + + +
+ + + + + + + + + + + + + + + + + + + +
Source:
+
  • deviceorientation.js, line 243
+ + + + + + + +
+ + + + + + + + + +
+ + + +
+

setValues

+ + +
Stability: experimental
+ + + + +
+
+ + +
+

Sets a collection of key-value pairs.

+
+ + + + + + + +
Parameters:
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
NameTypeDescription
values + + +Object.<string, *> + + + +

Values.

+ + + +
+ + + + + + + +
Inherited From:
+
+ + + + + + + + + + + + + +
Source:
+
  • object.js, line 428
+ + + + + + + +
+ + + + + + + + + +
+ + + +
+

un

+ + +
Stability: experimental
+ + + + +
+
+ + +
+

Unlisten for a certain type of event.

+
+ + + + + + + +
Parameters:
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
NameTypeArgumentDescription
type + + +string +| + +Array.<string> + + + + + + + +

The event type or array of event types.

listener + + +function + + + + + + + +

The listener function.

this + + +Object + + + + + + <optional>
+ + + +

The object to use as this in listener.

+ + + +
+ + + + + + + +
Inherited From:
+
+ + + + + + + + + + + + + +
Source:
+
  • observable.js, line 83
+ + + + + + + +
+ + + + + + + + + +
+ + + +
+

unbind

+ + +
Stability: experimental
+ + + + +
+
+ + +
+

Removes a binding. Unbinding will set the unbound property to the current + value. The object will not be notified, as the value has not changed.

+
+ + + + + + + +
Parameters:
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
NameTypeDescription
key + + +string + + + +

Key name.

+ + + +
+ + + + + + + +
Inherited From:
+
+ + + + + + + + + + + + + +
Source:
+
  • object.js, line 442
+ + + + + + + +
+ + + + + + + + + +
+ + + +
+

unbindAll

+ + +
Stability: experimental
+ + + + +
+
+ + +
+

Removes all bindings.

+
+ + + + + + + + + +
+ + + + + + + +
Inherited From:
+
+ + + + + + + + + + + + + +
Source:
+
  • object.js, line 466
+ + + + + + + +
+ + + + + + + + + +
+ + + +
+

unByKey

+ + +
Stability: experimental
+ + + + +
+
+ + +
+

Removes an event listener using the key returned by on() or once().

+
+ + + + + + + +
Parameters:
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
NameTypeDescription
key + + +goog.events.Key + + + +

Key.

+ + + +
+ + + + + + + +
Inherited From:
+
+ + + + + + + + + + + + + +
Source:
+
  • observable.js, line 93
+ + + + + + + +
+ + + + + + + + + +
+ +
+ + + + + +
+ +
+ + + + +
+ + + +
+ + + + + + \ No newline at end of file diff --git a/float-no-zero/apidoc/ol.Feature.html b/float-no-zero/apidoc/ol.Feature.html new file mode 100644 index 0000000000..639b71e62e --- /dev/null +++ b/float-no-zero/apidoc/ol.Feature.html @@ -0,0 +1,2985 @@ + + + + + OpenLayers 3 API Documentation - Class: ol.Feature + + + + + + + + + + + + + + + + +
+ + + + +
+ +
+

+ ol. + + ol.Feature +

+ +
+ +
+
+ + + + +
+

new Feature

+ + +
Stability: experimental
+ + + + +
+
+ + + + + + + + +
Parameters:
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
NameTypeDescription
geometryOrValues + + +ol.geom.Geometry +| + +Object.<string, *>= + + + +

Values or geometry.

+ + + +
+ + + + + + + + + + + + + + + + + + + +
Source:
+
  • feature.js, line 24
+ + + + + + + +
+ + + + + + + + + +
+ + +
+ + +

Extends

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

Methods

+ +
+ +
+

bindTo

+ + +
Stability: experimental
+ + + + +
+
+ + +
+

The bindTo method allows you to set up a two-way binding between a +source and target object. The method returns an +ol.ObjectAccessor with a transform method that lets you transform +values on the way from the source to the target and on the way back.

+

For example, if you had two map views (sourceView and targetView) +and you wanted the target view to have double the resolution of the +source view, you could transform the resolution on the way to and +from the target with the following:

+
sourceView.bindTo('resolution', targetView)
+  .transform(
+    function(sourceResolution) {
+      // from sourceView.resolution to targetView.resolution
+      return 2 * sourceResolution;
+    },
+    function(targetResolution) {
+      // from targetView.resolution to sourceView.resolution
+      return targetResolution / 2;
+    }
+  );
+
+ + + + + + + +
Parameters:
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
NameTypeArgumentDescription
key + + +string + + + + + + + +

Key name.

target + + +ol.Object + + + + + + + +

Target.

targetKey + + +string + + + + + + <optional>
+ + + +

Target key.

+ + + +
+ + + + + + + +
Inherited From:
+
+ + + + + + + + + + + + + +
Source:
+
  • object.js, line 232
+ + + + + + + +
+ + + + + + + +
Returns:
+ + + + +
+
+ Type +
+
+ +ol.ObjectAccessor + + +
+
+ + + + +
+ + + +
+

dispatchChangeEvent

+ + +
Stability: experimental
+ + + + +
+
+ + + + + + + + + + +
+ + + + + + + +
Inherited From:
+
+ + + + + + + + + + + + + +
Source:
+
  • observable.js, line 35
+ + + + + + + +
+ + + + + + + + + +
+ + + +
+

get

+ + +
Stability: experimental
+ + + + +
+
+ + +
+

Gets a value.

+
+ + + + + + + +
Parameters:
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
NameTypeDescription
key + + +string + + + +

Key name.

+ + + +
+ + + + + + + +
Inherited From:
+
+ + + + + + + + + + + + + +
Source:
+
  • object.js, line 289
+ + + + + + + +
+ + + + + + + +
Returns:
+ + +
+

Value.

+
+ + + +
+
+ Type +
+
+ +* + + +
+
+ + + + +
+ + + +
+

getGeometry

+ + +
Stability: experimental
+ + + + +
+
+ + + + + + + + + + +
+ + + + + + + + + + + + + + + + + + + +
Source:
+
  • feature.js, line 84
+ + + + + + + +
+ + + + + + + +
Returns:
+ + +
+

Geometry.

+
+ + + +
+
+ Type +
+
+ +ol.geom.Geometry +| + +undefined + + +
+
+ + + + +
+ + + +
+

getGeometryName

+ + +
Stability: experimental
+ + + + +
+
+ + + + + + + + + + +
+ + + + + + + + + + + + + + + + + + + +
Source:
+
  • feature.js, line 107
+ + + + + + + +
+ + + + + + + +
Returns:
+ + +
+

Geometry property name.

+
+ + + +
+
+ Type +
+
+ +string + + +
+
+ + + + +
+ + + +
+

getId

+ + +
Stability: experimental
+ + + + +
+
+ + + + + + + + + + +
+ + + + + + + + + + + + + + + + + + + +
Source:
+
  • feature.js, line 98
+ + + + + + + +
+ + + + + + + +
Returns:
+ + +
+

Id.

+
+ + + +
+
+ Type +
+
+ +number +| + +string +| + +undefined + + +
+
+ + + + +
+ + + +
+

getProperties

+ + +
Stability: experimental
+ + + + +
+
+ + +
+

Get an object of all property names and values.

+
+ + + + + + + + + +
+ + + + + + + +
Inherited From:
+
+ + + + + + + + + + + + + +
Source:
+
  • object.js, line 348
+ + + + + + + +
+ + + + + + + +
Returns:
+ + +
+

Object.

+
+ + + +
+
+ Type +
+
+ +Object.<string, *> + + +
+
+ + + + +
+ + + +
+

getStyle

+ + +
Stability: experimental
+ + + + +
+
+ + + + + + + + + + +
+ + + + + + + + + + + + + + + + + + + +
Source:
+
  • feature.js, line 117
+ + + + + + + +
+ + + + + + + +
Returns:
+ + +
+

User provided style.

+
+ + + +
+
+ Type +
+
+ +ol.style.Style +| + +Array.<ol.style.Style> +| + +ol.feature.FeatureStyleFunction + + +
+
+ + + + +
+ + + +
+

getStyleFunction

+ + +
Stability: experimental
+ + + + +
+
+ + + + + + + + + + +
+ + + + + + + + + + + + + + + + + + + +
Source:
+
  • feature.js, line 126
+ + + + + + + +
+ + + + + + + +
Returns:
+ + +
+

Style function.

+
+ + + +
+
+ Type +
+
+ +ol.feature.FeatureStyleFunction +| + +undefined + + +
+
+ + + + +
+ + + +
+

notify

+ + +
Stability: experimental
+ + + + +
+
+ + +
+

Notify all observers of a change on this property. This notifies both +objects that are bound to the object's property as well as the object +that it is bound to.

+
+ + + + + + + +
Parameters:
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
NameTypeDescription
key + + +string + + + +

Key name.

+ + + +
+ + + + + + + +
Inherited From:
+
+ + + + + + + + + + + + + +
Source:
+
  • object.js, line 368
+ + + + + + + +
+ + + + + + + + + +
+ + + +
+

on

+ + +
Stability: experimental
+ + + + +
+
+ + +
+

Listen for a certain type of event.

+
+ + + + + + + +
Parameters:
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
NameTypeArgumentDescription
type + + +string +| + +Array.<string> + + + + + + + +

The event type or array of event types.

listener + + +function + + + + + + + +

The listener function.

this + + +Object + + + + + + <optional>
+ + + +

The object to use as this in listener.

+ + + +
+ + + + + + + +
Inherited From:
+
+ + + + + + + + + + + + + +
Source:
+
  • observable.js, line 58
+ + + + + + + +
+ + + + + + + +
Returns:
+ + +
+

Unique key for the listener.

+
+ + + +
+
+ Type +
+
+ +goog.events.Key + + +
+
+ + + + +
+ + + +
+

once

+ + +
Stability: experimental
+ + + + +
+
+ + +
+

Listen once for a certain type of event.

+
+ + + + + + + +
Parameters:
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
NameTypeArgumentDescription
type + + +string +| + +Array.<string> + + + + + + + +

The event type or array of event types.

listener + + +function + + + + + + + +

The listener function.

this + + +Object + + + + + + <optional>
+ + + +

The object to use as this in listener.

+ + + +
+ + + + + + + +
Inherited From:
+
+ + + + + + + + + + + + + +
Source:
+
  • observable.js, line 71
+ + + + + + + +
+ + + + + + + +
Returns:
+ + +
+

Unique key for the listener.

+
+ + + +
+
+ Type +
+
+ +goog.events.Key + + +
+
+ + + + +
+ + + +
+

set

+ + +
Stability: experimental
+ + + + +
+
+ + +
+

Sets a value.

+
+ + + + + + + +
Parameters:
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
NameTypeDescription
key + + +string + + + +

Key name.

value + + +* + + + +

Value.

+ + + +
+ + + + + + + +
Inherited From:
+
+ + + + + + + + + + + + + +
Source:
+
  • object.js, line 399
+ + + + + + + +
+ + + + + + + + + +
+ + + +
+

setGeometry

+ + +
Stability: experimental
+ + + + +
+
+ + + + + + + + +
Parameters:
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
NameTypeDescription
geometry + + +ol.geom.Geometry +| + +undefined + + + +

Geometry.

+ + + +
+ + + + + + + + + + + + + + + + + + + +
Source:
+
  • feature.js, line 160
+ + + + + + + +
+ + + + + + + + + +
+ + + +
+

setGeometryName

+ + +
Stability: experimental
+ + + + +
+
+ + + + + + + + +
Parameters:
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
NameTypeDescription
name + + +string + + + +

Geometry property name.

+ + + +
+ + + + + + + + + + + + + + + + + + + +
Source:
+
  • feature.js, line 194
+ + + + + + + +
+ + + + + + + + + +
+ + + +
+

setId

+ + +
Stability: experimental
+ + + + +
+
+ + + + + + + + +
Parameters:
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
NameTypeDescription
id + + +number +| + +string +| + +undefined + + + +

Id.

+ + + +
+ + + + + + + + + + + + + + + + + + + +
Source:
+
  • feature.js, line 185
+ + + + + + + +
+ + + + + + + + + +
+ + + +
+

setStyle

+ + +
Stability: experimental
+ + + + +
+
+ + + + + + + + +
Parameters:
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
NameTypeDescription
style + + +ol.style.Style +| + +Array.<ol.style.Style> +| + +ol.feature.FeatureStyleFunction + + + +

Feature style.

+ + + +
+ + + + + + + + + + + + + + + + + + + +
Source:
+
  • feature.js, line 174
+ + + + + + + +
+ + + + + + + + + +
+ + + +
+

setValues

+ + +
Stability: experimental
+ + + + +
+
+ + +
+

Sets a collection of key-value pairs.

+
+ + + + + + + +
Parameters:
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
NameTypeDescription
values + + +Object.<string, *> + + + +

Values.

+ + + +
+ + + + + + + +
Inherited From:
+
+ + + + + + + + + + + + + +
Source:
+
  • object.js, line 428
+ + + + + + + +
+ + + + + + + + + +
+ + + +
+

un

+ + +
Stability: experimental
+ + + + +
+
+ + +
+

Unlisten for a certain type of event.

+
+ + + + + + + +
Parameters:
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
NameTypeArgumentDescription
type + + +string +| + +Array.<string> + + + + + + + +

The event type or array of event types.

listener + + +function + + + + + + + +

The listener function.

this + + +Object + + + + + + <optional>
+ + + +

The object to use as this in listener.

+ + + +
+ + + + + + + +
Inherited From:
+
+ + + + + + + + + + + + + +
Source:
+
  • observable.js, line 83
+ + + + + + + +
+ + + + + + + + + +
+ + + +
+

unbind

+ + +
Stability: experimental
+ + + + +
+
+ + +
+

Removes a binding. Unbinding will set the unbound property to the current + value. The object will not be notified, as the value has not changed.

+
+ + + + + + + +
Parameters:
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
NameTypeDescription
key + + +string + + + +

Key name.

+ + + +
+ + + + + + + +
Inherited From:
+
+ + + + + + + + + + + + + +
Source:
+
  • object.js, line 442
+ + + + + + + +
+ + + + + + + + + +
+ + + +
+

unbindAll

+ + +
Stability: experimental
+ + + + +
+
+ + +
+

Removes all bindings.

+
+ + + + + + + + + +
+ + + + + + + +
Inherited From:
+
+ + + + + + + + + + + + + +
Source:
+
  • object.js, line 466
+ + + + + + + +
+ + + + + + + + + +
+ + + +
+

unByKey

+ + +
Stability: experimental
+ + + + +
+
+ + +
+

Removes an event listener using the key returned by on() or once().

+
+ + + + + + + +
Parameters:
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
NameTypeDescription
key + + +goog.events.Key + + + +

Key.

+ + + +
+ + + + + + + +
Inherited From:
+
+ + + + + + + + + + + + + +
Source:
+
  • observable.js, line 93
+ + + + + + + +
+ + + + + + + + + +
+ +
+ + + + + +
+ +
+ + + + +
+ + + +
+ + + + + + \ No newline at end of file diff --git a/float-no-zero/apidoc/ol.FeatureOverlay.html b/float-no-zero/apidoc/ol.FeatureOverlay.html new file mode 100644 index 0000000000..3d6050c7dd --- /dev/null +++ b/float-no-zero/apidoc/ol.FeatureOverlay.html @@ -0,0 +1,1067 @@ + + + + + OpenLayers 3 API Documentation - Class: ol.FeatureOverlay + + + + + + + + + + + + + + + + +
+ + + + +
+ +
+

+ ol. + + ol.FeatureOverlay +

+ +
+ +
+
+ + + + +
+

new FeatureOverlay

+ + +
Stability: experimental
+ + + + +
+
+ + + + + + + + +
Parameters:
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
NameTypeArgumentDescription
options + + +olx.FeatureOverlayOptions + + + + + + <optional>
+ + + +

Options.

+ + + +
+ + + + + + + + + + + + + + + + + + + +
Source:
+
  • featureoverlay.js, line 21
+ + + + + + + +
+ + + + + + + + + +
+ + +
+ + + + + + + + + + + + + + + + +

Methods

+ +
+ +
+

addFeature

+ + +
Stability: experimental
+ + + + +
+
+ + + + + + + + +
Parameters:
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
NameTypeDescription
feature + + +ol.Feature + + + +

Feature.

+ + + +
+ + + + + + + + + + + + + + + + + + + +
Source:
+
  • featureoverlay.js, line 90
+ + + + + + + +
+ + + + + + + + + +
+ + + +
+

getFeatures

+ + +
Stability: experimental
+ + + + +
+
+ + + + + + + + + + +
+ + + + + + + + + + + + + + + + + + + +
Source:
+
  • featureoverlay.js, line 99
+ + + + + + + +
+ + + + + + + +
Returns:
+ + +
+

Features collection.

+
+ + + +
+
+ Type +
+
+ +ol.Collection + + +
+
+ + + + +
+ + + +
+

getStyle

+ + +
Stability: not documented
+ + + + +
+
+ + +
+

Get the style for features. This returns whatever was passed to the style +option at construction or to the setStyle method.

+
+ + + + + + + + + +
+ + + + + + + + + + + + + + + + + + + +
Source:
+
  • featureoverlay.js, line 264
+ + + + + + + +
+ + + + + + + +
Returns:
+ + +
+

Overlay style.

+
+ + + +
+
+ Type +
+
+ +ol.style.Style +| + +Array.<ol.style.Style> +| + +ol.feature.StyleFunction + + +
+
+ + + + +
+ + + +
+

getStyleFunction

+ + +
Stability: not documented
+ + + + +
+
+ + +
+

Get the style function.

+
+ + + + + + + + + +
+ + + + + + + + + + + + + + + + + + + +
Source:
+
  • featureoverlay.js, line 273
+ + + + + + + +
+ + + + + + + +
Returns:
+ + +
+

Style function.

+
+ + + +
+
+ Type +
+
+ +ol.feature.StyleFunction +| + +undefined + + +
+
+ + + + +
+ + + +
+

removeFeature

+ + +
Stability: experimental
+ + + + +
+
+ + + + + + + + +
Parameters:
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
NameTypeDescription
feature + + +ol.Feature + + + +

Feature.

+ + + +
+ + + + + + + + + + + + + + + + + + + +
Source:
+
  • featureoverlay.js, line 170
+ + + + + + + +
+ + + + + + + + + +
+ + + +
+

setFeatures

+ + +
Stability: experimental
+ + + + +
+
+ + + + + + + + +
Parameters:
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
NameTypeDescription
features + + +ol.Collection + + + +

Features collection.

+ + + +
+ + + + + + + + + + + + + + + + + + + +
Source:
+
  • featureoverlay.js, line 189
+ + + + + + + +
+ + + + + + + + + +
+ + + +
+

setMap

+ + +
Stability: experimental
+ + + + +
+
+ + + + + + + + +
Parameters:
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
NameTypeDescription
map + + +ol.Map + + + +

Map.

+ + + +
+ + + + + + + + + + + + + + + + + + + +
Source:
+
  • featureoverlay.js, line 227
+ + + + + + + +
+ + + + + + + + + +
+ + + +
+

setStyle

+ + +
Stability: experimental
+ + + + +
+
+ + +
+

Set the style for features. This can be a single style object, an array +of styles, or a function that takes a feature and resolution and returns +an array of styles.

+
+ + + + + + + +
Parameters:
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
NameTypeDescription
style + + +ol.style.Style +| + +Array.<ol.style.Style> +| + +ol.feature.StyleFunction + + + +

Overlay style.

+ + + +
+ + + + + + + + + + + + + + + + + + + +
Source:
+
  • featureoverlay.js, line 251
+ + + + + + + +
+ + + + + + + + + +
+ +
+ + + + + +
+ +
+ + + + +
+ + + +
+ + + + + + \ No newline at end of file diff --git a/float-no-zero/apidoc/ol.Geolocation.html b/float-no-zero/apidoc/ol.Geolocation.html new file mode 100644 index 0000000000..db579a75b2 --- /dev/null +++ b/float-no-zero/apidoc/ol.Geolocation.html @@ -0,0 +1,3467 @@ + + + + + OpenLayers 3 API Documentation - Class: ol.Geolocation + + + + + + + + + + + + + + + + +
+ + + + +
+ +
+

+ ol. + + ol.Geolocation +

+ +
+ +
+
+ + + + +
+

new Geolocation

+ + +
Stability: experimental
+ + + + +
+
+ + +
+

Helper class for providing HTML5 Geolocation capabilities. +The Geolocation API +is used to locate a user's position.

+

Example:

+
var geolocation = new ol.Geolocation();
+// take the projection to use from the map's view
+geolocation.bindTo('projection', map.getView());
+// listen to changes in position
+geolocation.on('change:position', function(evt) {
+  window.console.log(geolocation.getPosition());
+});
+
+ + + + + + + +
Parameters:
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
NameTypeArgumentDescription
options + + +olx.GeolocationOptions + + + + + + <optional>
+ + + +

Options.

+ + + +
+ + + + + + + + + + + + + + + + + + + +
Source:
+
  • geolocation.js, line 70
+ + + + + + + +
+ + + + + + + + + +
+ + +
+ + +

Extends

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

Observable Properties

+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
NameTypeSettableEventDescription
accuracy + + +number + + + + nochange:accuracythe accuracy of the position + measurement in meters
altitude + + +number + + + + nochange:altitudethe altitude of the position in + meters above mean sea level
altitudeAccuracy + + +number + + + + nochange:altitudeaccuracythe accuracy of the + altitude measurement in meters
heading + + +number + + + + nochange:headingthe heading of the device in + radians from north
position + + +ol.Coordinate + + + + nochange:positionthe current position of + the device reported in the current projection
projection + + +ol.proj.Projection + + + + nochange:projectionthe projection to + report the position in
speed + + +number + + + + nochange:speedthe instantaneous speed of the + device in meters per second
tracking + + +number + + + + yeschange:trackingtrack the device's position.
trackingOptions + + +GeolocationPositionOptions + + + + yeschange:trackingoptionsPositionOptions + as defined by the HTML5 Geolocation spec at + http://dev.w3.org/geo/api/spec-source.html
+
+ + + + + + +

Methods

+ +
+ +
+

bindTo

+ + +
Stability: experimental
+ + + + +
+
+ + +
+

The bindTo method allows you to set up a two-way binding between a +source and target object. The method returns an +ol.ObjectAccessor with a transform method that lets you transform +values on the way from the source to the target and on the way back.

+

For example, if you had two map views (sourceView and targetView) +and you wanted the target view to have double the resolution of the +source view, you could transform the resolution on the way to and +from the target with the following:

+
sourceView.bindTo('resolution', targetView)
+  .transform(
+    function(sourceResolution) {
+      // from sourceView.resolution to targetView.resolution
+      return 2 * sourceResolution;
+    },
+    function(targetResolution) {
+      // from targetView.resolution to sourceView.resolution
+      return targetResolution / 2;
+    }
+  );
+
+ + + + + + + +
Parameters:
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
NameTypeArgumentDescription
key + + +string + + + + + + + +

Key name.

target + + +ol.Object + + + + + + + +

Target.

targetKey + + +string + + + + + + <optional>
+ + + +

Target key.

+ + + +
+ + + + + + + +
Inherited From:
+
+ + + + + + + + + + + + + +
Source:
+
  • object.js, line 232
+ + + + + + + +
+ + + + + + + +
Returns:
+ + + + +
+
+ Type +
+
+ +ol.ObjectAccessor + + +
+
+ + + + +
+ + + +
+

dispatchChangeEvent

+ + +
Stability: experimental
+ + + + +
+
+ + + + + + + + + + +
+ + + + + + + +
Inherited From:
+
+ + + + + + + + + + + + + +
Source:
+
  • observable.js, line 35
+ + + + + + + +
+ + + + + + + + + +
+ + + +
+

get

+ + +
Stability: experimental
+ + + + +
+
+ + +
+

Gets a value.

+
+ + + + + + + +
Parameters:
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
NameTypeDescription
key + + +string + + + +

Key name.

+ + + +
+ + + + + + + +
Inherited From:
+
+ + + + + + + + + + + + + +
Source:
+
  • object.js, line 289
+ + + + + + + +
+ + + + + + + +
Returns:
+ + +
+

Value.

+
+ + + +
+
+ Type +
+
+ +* + + +
+
+ + + + +
+ + + +
+

getAccuracy

+ + +
Stability: experimental
+ + + + +
+
+ + +
+

Get the accuracy of the position in meters.

+
+ + + + + + + + + +
+ + + + + + + + + + + + + + + + + + + +
Source:
+
  • geolocation.js, line 200
+ + + + + + + +
+ + + + + + + +
Returns:
+ + +
+

Position accuracy in meters.

+
+ + + +
+
+ Type +
+
+ +number +| + +undefined + + +
+
+ + + + +
+ + + +
+

getAltitude

+ + +
Stability: experimental
+ + + + +
+
+ + +
+

Get the altitude associated with the position.

+
+ + + + + + + + + +
+ + + + + + + + + + + + + + + + + + + +
Source:
+
  • geolocation.js, line 215
+ + + + + + + +
+ + + + + + + +
Returns:
+ + +
+

The altitude in meters above the mean sea level.

+
+ + + +
+
+ Type +
+
+ +number +| + +undefined + + +
+
+ + + + +
+ + + +
+

getAltitudeAccuracy

+ + +
Stability: experimental
+ + + + +
+
+ + +
+

Get the altitude accuracy of the position.

+
+ + + + + + + + + +
+ + + + + + + + + + + + + + + + + + + +
Source:
+
  • geolocation.js, line 230
+ + + + + + + +
+ + + + + + + +
Returns:
+ + +
+

Altitude accuracy in meters.

+
+ + + +
+
+ Type +
+
+ +number +| + +undefined + + +
+
+ + + + +
+ + + +
+

getHeading

+ + +
Stability: experimental
+ + + + +
+
+ + +
+

Get the heading as radians clockwise from North.

+
+ + + + + + + + + +
+ + + + + + + + + + + + + + + + + + + +
Source:
+
  • geolocation.js, line 245
+ + + + + + + +
+ + + + + + + +
Returns:
+ + +
+

Heading.

+
+ + + +
+
+ Type +
+
+ +number +| + +undefined + + +
+
+ + + + +
+ + + +
+

getPosition

+ + +
Stability: experimental
+ + + + +
+
+ + +
+

Get the position of the device.

+
+ + + + + + + + + +
+ + + + + + + + + + + + + + + + + + + +
Source:
+
  • geolocation.js, line 260
+ + + + + + + +
+ + + + + + + +
Returns:
+ + +
+

position.

+
+ + + +
+
+ Type +
+
+ +ol.Coordinate +| + +undefined + + +
+
+ + + + +
+ + + +
+

getProjection

+ + +
Stability: experimental
+ + + + +
+
+ + +
+

Get the projection associated with the position.

+
+ + + + + + + + + +
+ + + + + + + + + + + + + + + + + + + +
Source:
+
  • geolocation.js, line 275
+ + + + + + + +
+ + + + + + + +
Returns:
+ + +
+

projection.

+
+ + + +
+
+ Type +
+
+ +ol.proj.Projection +| + +undefined + + +
+
+ + + + +
+ + + +
+

getProperties

+ + +
Stability: experimental
+ + + + +
+
+ + +
+

Get an object of all property names and values.

+
+ + + + + + + + + +
+ + + + + + + +
Inherited From:
+
+ + + + + + + + + + + + + +
Source:
+
  • object.js, line 348
+ + + + + + + +
+ + + + + + + +
Returns:
+ + +
+

Object.

+
+ + + +
+
+ Type +
+
+ +Object.<string, *> + + +
+
+ + + + +
+ + + +
+

getSpeed

+ + +
Stability: experimental
+ + + + +
+
+ + +
+

Get the speed in meters per second.

+
+ + + + + + + + + +
+ + + + + + + + + + + + + + + + + + + +
Source:
+
  • geolocation.js, line 290
+ + + + + + + +
+ + + + + + + +
Returns:
+ + +
+

Speed.

+
+ + + +
+
+ Type +
+
+ +number +| + +undefined + + +
+
+ + + + +
+ + + +
+

getTracking

+ + +
Stability: experimental
+ + + + +
+
+ + +
+

Are we tracking the user's position?

+
+ + + + + + + + + +
+ + + + + + + + + + + + + + + + + + + +
Source:
+
  • geolocation.js, line 305
+ + + + + + + +
+ + + + + + + +
Returns:
+ + +
+

tracking.

+
+ + + +
+
+ Type +
+
+ +boolean + + +
+
+ + + + +
+ + + +
+

getTrackingOptions

+ + +
Stability: experimental
+ + + + +
+
+ + +
+

Get the tracking options.

+
+ + + + + + + + + +
+ + + + + + + + + + + + + + + + + + + +
Source:
+
  • geolocation.js, line 322
+ + + + + +
See:
+
+ +
+ + + +
+ + + + + + + +
Returns:
+ + +
+

HTML 5 Gelocation +tracking options.

+
+ + + +
+
+ Type +
+
+ +GeolocationPositionOptions +| + +undefined + + +
+
+ + + + +
+ + + +
+

notify

+ + +
Stability: experimental
+ + + + +
+
+ + +
+

Notify all observers of a change on this property. This notifies both +objects that are bound to the object's property as well as the object +that it is bound to.

+
+ + + + + + + +
Parameters:
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
NameTypeDescription
key + + +string + + + +

Key name.

+ + + +
+ + + + + + + +
Inherited From:
+
+ + + + + + + + + + + + + +
Source:
+
  • object.js, line 368
+ + + + + + + +
+ + + + + + + + + +
+ + + +
+

on

+ + +
Stability: experimental
+ + + + +
+
+ + +
+

Listen for a certain type of event.

+
+ + + + + + + +
Parameters:
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
NameTypeArgumentDescription
type + + +string +| + +Array.<string> + + + + + + + +

The event type or array of event types.

listener + + +function + + + + + + + +

The listener function.

this + + +Object + + + + + + <optional>
+ + + +

The object to use as this in listener.

+ + + +
+ + + + + + + +
Inherited From:
+
+ + + + + + + + + + + + + +
Source:
+
  • observable.js, line 58
+ + + + + + + +
+ + + + + + + +
Returns:
+ + +
+

Unique key for the listener.

+
+ + + +
+
+ Type +
+
+ +goog.events.Key + + +
+
+ + + + +
+ + + +
+

once

+ + +
Stability: experimental
+ + + + +
+
+ + +
+

Listen once for a certain type of event.

+
+ + + + + + + +
Parameters:
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
NameTypeArgumentDescription
type + + +string +| + +Array.<string> + + + + + + + +

The event type or array of event types.

listener + + +function + + + + + + + +

The listener function.

this + + +Object + + + + + + <optional>
+ + + +

The object to use as this in listener.

+ + + +
+ + + + + + + +
Inherited From:
+
+ + + + + + + + + + + + + +
Source:
+
  • observable.js, line 71
+ + + + + + + +
+ + + + + + + +
Returns:
+ + +
+

Unique key for the listener.

+
+ + + +
+
+ Type +
+
+ +goog.events.Key + + +
+
+ + + + +
+ + + +
+

set

+ + +
Stability: experimental
+ + + + +
+
+ + +
+

Sets a value.

+
+ + + + + + + +
Parameters:
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
NameTypeDescription
key + + +string + + + +

Key name.

value + + +* + + + +

Value.

+ + + +
+ + + + + + + +
Inherited From:
+
+ + + + + + + + + + + + + +
Source:
+
  • object.js, line 399
+ + + + + + + +
+ + + + + + + + + +
+ + + +
+

setProjection

+ + +
Stability: experimental
+ + + + +
+
+ + +
+

Set the projection to use for transforming the coordinates.

+
+ + + + + + + +
Parameters:
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
NameTypeDescription
projection + + +ol.proj.Projection + + + +

Projection.

+ + + +
+ + + + + + + + + + + + + + + + + + + +
Source:
+
  • geolocation.js, line 337
+ + + + + + + +
+ + + + + + + + + +
+ + + +
+

setTracking

+ + +
Stability: experimental
+ + + + +
+
+ + +
+

Enable/disable tracking.

+
+ + + + + + + +
Parameters:
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
NameTypeDescription
tracking + + +boolean + + + +

Enable or disable tracking.

+ + + +
+ + + + + + + + + + + + + + + + + + + +
Source:
+
  • geolocation.js, line 351
+ + + + + + + +
+ + + + + + + + + +
+ + + +
+

setTrackingOptions

+ + +
Stability: experimental
+ + + + +
+
+ + +
+

Set the tracking options.

+
+ + + + + + + +
Parameters:
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
NameTypeDescription
options + + +GeolocationPositionOptions + + + +

HTML 5 Geolocation +tracking options.

+ + + +
+ + + + + + + + + + + + + + + + + + + +
Source:
+
  • geolocation.js, line 367
+ + + + + +
See:
+
+ +
+ + + +
+ + + + + + + + + +
+ + + +
+

setValues

+ + +
Stability: experimental
+ + + + +
+
+ + +
+

Sets a collection of key-value pairs.

+
+ + + + + + + +
Parameters:
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
NameTypeDescription
values + + +Object.<string, *> + + + +

Values.

+ + + +
+ + + + + + + +
Inherited From:
+
+ + + + + + + + + + + + + +
Source:
+
  • object.js, line 428
+ + + + + + + +
+ + + + + + + + + +
+ + + +
+

un

+ + +
Stability: experimental
+ + + + +
+
+ + +
+

Unlisten for a certain type of event.

+
+ + + + + + + +
Parameters:
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
NameTypeArgumentDescription
type + + +string +| + +Array.<string> + + + + + + + +

The event type or array of event types.

listener + + +function + + + + + + + +

The listener function.

this + + +Object + + + + + + <optional>
+ + + +

The object to use as this in listener.

+ + + +
+ + + + + + + +
Inherited From:
+
+ + + + + + + + + + + + + +
Source:
+
  • observable.js, line 83
+ + + + + + + +
+ + + + + + + + + +
+ + + +
+

unbind

+ + +
Stability: experimental
+ + + + +
+
+ + +
+

Removes a binding. Unbinding will set the unbound property to the current + value. The object will not be notified, as the value has not changed.

+
+ + + + + + + +
Parameters:
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
NameTypeDescription
key + + +string + + + +

Key name.

+ + + +
+ + + + + + + +
Inherited From:
+
+ + + + + + + + + + + + + +
Source:
+
  • object.js, line 442
+ + + + + + + +
+ + + + + + + + + +
+ + + +
+

unbindAll

+ + +
Stability: experimental
+ + + + +
+
+ + +
+

Removes all bindings.

+
+ + + + + + + + + +
+ + + + + + + +
Inherited From:
+
+ + + + + + + + + + + + + +
Source:
+
  • object.js, line 466
+ + + + + + + +
+ + + + + + + + + +
+ + + +
+

unByKey

+ + +
Stability: experimental
+ + + + +
+
+ + +
+

Removes an event listener using the key returned by on() or once().

+
+ + + + + + + +
Parameters:
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
NameTypeDescription
key + + +goog.events.Key + + + +

Key.

+ + + +
+ + + + + + + +
Inherited From:
+
+ + + + + + + + + + + + + +
Source:
+
  • observable.js, line 93
+ + + + + + + +
+ + + + + + + + + +
+ +
+ + + + + +
+ +
+ + + + +
+ + + +
+ + + + + + \ No newline at end of file diff --git a/float-no-zero/apidoc/ol.Kinetic.html b/float-no-zero/apidoc/ol.Kinetic.html new file mode 100644 index 0000000000..019cc74f5c --- /dev/null +++ b/float-no-zero/apidoc/ol.Kinetic.html @@ -0,0 +1,252 @@ + + + + + OpenLayers 3 API Documentation - Class: ol.Kinetic + + + + + + + + + + + + + + + + +
+ + + + +
+ +
+

+ ol. + + ol.Kinetic +

+ +
+ +
+
+ + + + +
+

new Kinetic

+ + +
Stability: experimental
+ + + + +
+
+ + + + + + + + +
Parameters:
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
NameTypeDescription
decay + + +number + + + +

Rate of decay (must be negative).

minVelocity + + +number + + + +

Minimum velocity (pixels/millisecond).

delay + + +number + + + +

Delay to consider to calculate the kinetic + initial values (milliseconds).

+ + + +
+ + + + + + + + + + + + + + + + + + + +
Source:
+
  • kinetic.js, line 19
+ + + + + + + +
+ + + + + + + + + +
+ + +
+ + + + + + + + + + + + + + + + + + + + +
+ +
+ + + + +
+ + + +
+ + + + + + \ No newline at end of file diff --git a/float-no-zero/apidoc/ol.Map.html b/float-no-zero/apidoc/ol.Map.html new file mode 100644 index 0000000000..ca683cff12 --- /dev/null +++ b/float-no-zero/apidoc/ol.Map.html @@ -0,0 +1,5639 @@ + + + + + OpenLayers 3 API Documentation - Class: ol.Map + + + + + + + + + + + + + + + + +
+ + + + +
+ +
+

+ ol. + + ol.Map +

+ +

The map is the core component of OpenLayers. In its minimal configuration it +needs a view, one or more layers, and a target container:

+
var map = new ol.Map({
+  view: new ol.View2D({
+    center: [0, 0],
+    zoom: 1
+  }),
+  layers: [
+    new ol.layer.Tile({
+      source: new ol.source.MapQuestOSM()
+    })
+  ],
+  target: 'map'
+});
+

The above snippet creates a map with a MapQuest OSM layer on a 2D view and +renders it to a DOM element with the id map.

+ +
+ +
+
+ + + + +
+

new Map

+ + +
Stability: experimental
+ + + + +
+
+ + + + + + + + +
Parameters:
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
NameTypeDescription
options + + +olx.MapOptions + + + +

Map options.

+ + + +
+ + + + + + + + + + + + + + + + + + + +
Source:
+
  • map.js, line 168
+ + + + + + + +
+ + + + + + + + + +
+ + +
+ + +

Extends

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

Observable Properties

+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
NameTypeSettableEventDescription
layergroup + + +ol.layer.LayerGroup + + + + yeschange:layergroupa layer group containing + the layers in this map.
size + + +ol.Size + + + + yeschange:sizethe size in pixels of the map in the DOM
target + + +string +| + +Element + + + + yeschange:targetthe Element or id of the Element + that the map is rendered in.
view + + +ol.IView + + + + yeschange:viewthe view that controls this map
+
+ + + + + + +

Methods

+ +
+ +
+

addControl

+ + +
Stability: experimental
+ + + + +
+
+ + +
+

Add the given control to the map.

+
+ + + + + + + +
Parameters:
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
NameTypeDescription
control + + +ol.control.Control + + + +

Control.

+ + + +
+ + + + + + + + + + + + + + + + + + + +
Source:
+
  • map.js, line 460
+ + + + + + + +
+ + + + + + + + + +
+ + + +
+

addInteraction

+ + +
Stability: not documented
+ + + + +
+
+ + +
+

Add the given interaction to the map.

+
+ + + + + + + +
Parameters:
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
NameTypeDescription
interaction + + +ol.interaction.Interaction + + + +

Interaction to add.

+ + + +
+ + + + + + + + + + + + + + + + + + + +
Source:
+
  • map.js, line 471
+ + + + + + + +
+ + + + + + + + + +
+ + + +
+

addLayer

+ + +
Stability: experimental
+ + + + +
+
+ + +
+

Adds the given layer to the top of this map.

+
+ + + + + + + +
Parameters:
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
NameTypeDescription
layer + + +ol.layer.Base + + + +

Layer.

+ + + +
+ + + + + + + + + + + + + + + + + + + +
Source:
+
  • map.js, line 483
+ + + + + + + +
+ + + + + + + + + +
+ + + +
+

addOverlay

+ + +
Stability: experimental
+ + + + +
+
+ + +
+

Add the given overlay to the map.

+
+ + + + + + + +
Parameters:
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
NameTypeDescription
overlay + + +ol.Overlay + + + +

Overlay.

+ + + +
+ + + + + + + + + + + + + + + + + + + +
Source:
+
  • map.js, line 495
+ + + + + + + +
+ + + + + + + + + +
+ + + +
+

beforeRender

+ + +
Stability: experimental
+ + + + +
+
+ + +
+

Add functions to be called before rendering. This can be used for attaching +animations before updating the map's view. The ol.animation +namespace provides several static methods for creating prerender functions.

+
+ + + + + + + +
Parameters:
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
NameTypeDescription
var_args + + +ol.PreRenderFunction + + + +

Any number of pre-render functions.

+ + + +
+ + + + + + + + + + + + + + + + + + + +
Source:
+
  • map.js, line 509
+ + + + + + + +
+ + + + + + + + + +
+ + + +
+

bindTo

+ + +
Stability: experimental
+ + + + +
+
+ + +
+

The bindTo method allows you to set up a two-way binding between a +source and target object. The method returns an +ol.ObjectAccessor with a transform method that lets you transform +values on the way from the source to the target and on the way back.

+

For example, if you had two map views (sourceView and targetView) +and you wanted the target view to have double the resolution of the +source view, you could transform the resolution on the way to and +from the target with the following:

+
sourceView.bindTo('resolution', targetView)
+  .transform(
+    function(sourceResolution) {
+      // from sourceView.resolution to targetView.resolution
+      return 2 * sourceResolution;
+    },
+    function(targetResolution) {
+      // from targetView.resolution to sourceView.resolution
+      return targetResolution / 2;
+    }
+  );
+
+ + + + + + + +
Parameters:
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
NameTypeArgumentDescription
key + + +string + + + + + + + +

Key name.

target + + +ol.Object + + + + + + + +

Target.

targetKey + + +string + + + + + + <optional>
+ + + +

Target key.

+ + + +
+ + + + + + + +
Inherited From:
+
+ + + + + + + + + + + + + +
Source:
+
  • object.js, line 232
+ + + + + + + +
+ + + + + + + +
Returns:
+ + + + +
+
+ Type +
+
+ +ol.ObjectAccessor + + +
+
+ + + + +
+ + + +
+

dispatchChangeEvent

+ + +
Stability: experimental
+ + + + +
+
+ + + + + + + + + + +
+ + + + + + + +
Inherited From:
+
+ + + + + + + + + + + + + +
Source:
+
  • observable.js, line 35
+ + + + + + + +
+ + + + + + + + + +
+ + + +
+

forEachFeatureAtPixel

+ + +
Stability: not documented
+ + + + +
+
+ + + + + + + + +
Parameters:
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
NameTypeArgumentDescription
pixel + + +ol.Pixel + + + + + + + +

Pixel.

callback + + +function + + + + + + + +

Feature + callback.

this + + +S + + + + + + <optional>
+ + + +

Value to use as this when executing callback.

layerFilter + + +function + + + + + + + +

Layer + filter function, only layers which are visible and for which this + function returns true will be tested for features. By default, all + visible layers will be tested.

this2 + + +U + + + + + + <optional>
+ + + +

Value to use as this when executing layerFilter.

+ + + +
+ + + + + + + + + + + + + + + + + + + +
Source:
+
  • map.js, line 547
+ + + + + + + +
+ + + + + + + +
Returns:
+ + +
+

Callback result.

+
+ + + +
+
+ Type +
+
+ +T +| + +undefined + + +
+
+ + + + +
+ + + +
+

get

+ + +
Stability: experimental
+ + + + +
+
+ + +
+

Gets a value.

+
+ + + + + + + +
Parameters:
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
NameTypeDescription
key + + +string + + + +

Key name.

+ + + +
+ + + + + + + +
Inherited From:
+
+ + + + + + + + + + + + + +
Source:
+
  • object.js, line 289
+ + + + + + + +
+ + + + + + + +
Returns:
+ + +
+

Value.

+
+ + + +
+
+ Type +
+
+ +* + + +
+
+ + + + +
+ + + +
+

getControls

+ + +
Stability: experimental
+ + + + +
+
+ + + + + + + + + + +
+ + + + + + + + + + + + + + + + + + + +
Source:
+
  • map.js, line 636
+ + + + + + + +
+ + + + + + + +
Returns:
+ + +
+

Controls.

+
+ + + +
+
+ Type +
+
+ +ol.Collection + + +
+
+ + + + +
+ + + +
+

getCoordinateFromPixel

+ + +
Stability: not documented
+ + + + +
+
+ + + + + + + + +
Parameters:
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
NameTypeDescription
pixel + + +ol.Pixel + + + +

Pixel.

+ + + +
+ + + + + + + + + + + + + + + + + + + +
Source:
+
  • map.js, line 621
+ + + + + + + +
+ + + + + + + +
Returns:
+ + +
+

Coordinate.

+
+ + + +
+
+ Type +
+
+ +ol.Coordinate + + +
+
+ + + + +
+ + + +
+

getEventCoordinate

+ + +
Stability: experimental
+ + + + +
+
+ + +
+

Returns the geographical coordinate for a browser event.

+
+ + + + + + + +
Parameters:
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
NameTypeDescription
event + + +Event + + + +

Event.

+ + + +
+ + + + + + + + + + + + + + + + + + + +
Source:
+
  • map.js, line 569
+ + + + + + + +
+ + + + + + + +
Returns:
+ + +
+

Coordinate.

+
+ + + +
+
+ Type +
+
+ +ol.Coordinate + + +
+
+ + + + +
+ + + +
+

getEventPixel

+ + +
Stability: experimental
+ + + + +
+
+ + +
+

Returns the map pixel position for a browser event.

+
+ + + + + + + +
Parameters:
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
NameTypeDescription
event + + +Event + + + +

Event.

+ + + +
+ + + + + + + + + + + + + + + + + + + +
Source:
+
  • map.js, line 580
+ + + + + + + +
+ + + + + + + +
Returns:
+ + +
+

Pixel.

+
+ + + +
+
+ Type +
+
+ +ol.Pixel + + +
+
+ + + + +
+ + + +
+

getInteractions

+ + +
Stability: experimental
+ + + + +
+
+ + +
+

Gets the collection of +ol.interaction.Interaction instances +associated with this map. Modifying this collection +changes the interactions associated with the map.

+

Interactions are used for e.g. pan, zoom and rotate.

+
+ + + + + + + + + +
+ + + + + + + + + + + + + + + + + + + +
Source:
+
  • map.js, line 660
+ + + + + + + +
+ + + + + + + +
Returns:
+ + +
+

Interactions.

+
+ + + +
+
+ Type +
+
+ +ol.Collection + + +
+
+ + + + +
+ + + +
+

getLayerGroup

+ + +
Stability: experimental
+ + + + +
+
+ + +
+

Get the layergroup associated with this map.

+
+ + + + + + + + + +
+ + + + + + + + + + + + + + + + + + + +
Source:
+
  • map.js, line 670
+ + + + + + + +
+ + + + + + + +
Returns:
+ + +
+

LayerGroup.

+
+ + + +
+
+ Type +
+
+ +ol.layer.Group + + +
+
+ + + + +
+ + + +
+

getLayers

+ + +
Stability: experimental
+ + + + +
+
+ + +
+

Get the collection of layers associated with this map.

+
+ + + + + + + + + +
+ + + + + + + + + + + + + + + + + + + +
Source:
+
  • map.js, line 685
+ + + + + + + +
+ + + + + + + +
Returns:
+ + +
+

Layers.

+
+ + + +
+
+ Type +
+
+ +ol.Collection +| + +undefined + + +
+
+ + + + +
+ + + +
+

getOverlays

+ + +
Stability: experimental
+ + + + +
+
+ + + + + + + + + + +
+ + + + + + + + + + + + + + + + + + + +
Source:
+
  • map.js, line 645
+ + + + + + + +
+ + + + + + + +
Returns:
+ + +
+

Overlays.

+
+ + + +
+
+ Type +
+
+ +ol.Collection + + +
+
+ + + + +
+ + + +
+

getPixelFromCoordinate

+ + +
Stability: not documented
+ + + + +
+
+ + + + + + + + +
Parameters:
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
NameTypeDescription
coordinate + + +ol.Coordinate + + + +

Coordinate.

+ + + +
+ + + + + + + + + + + + + + + + + + + +
Source:
+
  • map.js, line 699
+ + + + + + + +
+ + + + + + + +
Returns:
+ + +
+

Pixel.

+
+ + + +
+
+ Type +
+
+ +ol.Pixel + + +
+
+ + + + +
+ + + +
+

getProperties

+ + +
Stability: experimental
+ + + + +
+
+ + +
+

Get an object of all property names and values.

+
+ + + + + + + + + +
+ + + + + + + +
Inherited From:
+
+ + + + + + + + + + + + + +
Source:
+
  • object.js, line 348
+ + + + + + + +
+ + + + + + + +
Returns:
+ + +
+

Object.

+
+ + + +
+
+ Type +
+
+ +Object.<string, *> + + +
+
+ + + + +
+ + + +
+

getSize

+ + +
Stability: experimental
+ + + + +
+
+ + +
+

Get the size of this map.

+
+ + + + + + + + + +
+ + + + + + + + + + + + + + + + + + + +
Source:
+
  • map.js, line 715
+ + + + + + + +
+ + + + + + + +
Returns:
+ + +
+

Size.

+
+ + + +
+
+ Type +
+
+ +ol.Size +| + +undefined + + +
+
+ + + + +
+ + + +
+

getTarget

+ + +
Stability: experimental
+ + + + +
+
+ + +
+

Get the target in which this map is rendered. +Note that this returns what is entered as an option or in setTarget: +if that was an element, it returns an element; if a string, it returns that.

+
+ + + + + + + + + +
+ + + + + + + + + + + + + + + + + + + +
Source:
+
  • map.js, line 607
+ + + + + + + +
+ + + + + + + +
Returns:
+ + +
+

Target.

+
+ + + +
+
+ Type +
+
+ +Element +| + +string +| + +undefined + + +
+
+ + + + +
+ + + +
+

getView

+ + +
Stability: experimental
+ + + + +
+
+ + +
+

Get the view associated with this map. This can be a 2D or 3D view. A 2D +view manages properties such as center and resolution.

+
+ + + + + + + + + +
+ + + + + + + + + + + + + + + + + + + +
Source:
+
  • map.js, line 730
+ + + + + + + +
+ + + + + + + +
Returns:
+ + +
+

View.

+
+ + + +
+
+ Type +
+
+ +ol.View +| + +undefined + + +
+
+ + + + +
+ + + +
+

getViewport

+ + +
Stability: experimental
+ + + + +
+
+ + + + + + + + + + +
+ + + + + + + + + + + + + + + + + + + +
Source:
+
  • map.js, line 743
+ + + + + + + +
+ + + + + + + +
Returns:
+ + +
+

Viewport.

+
+ + + +
+
+ Type +
+
+ +Element + + +
+
+ + + + +
+ + + +
+

notify

+ + +
Stability: experimental
+ + + + +
+
+ + +
+

Notify all observers of a change on this property. This notifies both +objects that are bound to the object's property as well as the object +that it is bound to.

+
+ + + + + + + +
Parameters:
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
NameTypeDescription
key + + +string + + + +

Key name.

+ + + +
+ + + + + + + +
Inherited From:
+
+ + + + + + + + + + + + + +
Source:
+
  • object.js, line 368
+ + + + + + + +
+ + + + + + + + + +
+ + + +
+

on

+ + +
Stability: experimental
+ + + + +
+
+ + +
+

Listen for a certain type of event.

+
+ + + + + + + +
Parameters:
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
NameTypeArgumentDescription
type + + +string +| + +Array.<string> + + + + + + + +

The event type or array of event types.

listener + + +function + + + + + + + +

The listener function.

this + + +Object + + + + + + <optional>
+ + + +

The object to use as this in listener.

+ + + +
+ + + + + + + +
Inherited From:
+
+ + + + + + + + + + + + + +
Source:
+
  • observable.js, line 58
+ + + + + + + +
+ + + + + + + +
Returns:
+ + +
+

Unique key for the listener.

+
+ + + +
+
+ Type +
+
+ +goog.events.Key + + +
+
+ + + + +
+ + + +
+

once

+ + +
Stability: experimental
+ + + + +
+
+ + +
+

Listen once for a certain type of event.

+
+ + + + + + + +
Parameters:
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
NameTypeArgumentDescription
type + + +string +| + +Array.<string> + + + + + + + +

The event type or array of event types.

listener + + +function + + + + + + + +

The listener function.

this + + +Object + + + + + + <optional>
+ + + +

The object to use as this in listener.

+ + + +
+ + + + + + + +
Inherited From:
+
+ + + + + + + + + + + + + +
Source:
+
  • observable.js, line 71
+ + + + + + + +
+ + + + + + + +
Returns:
+ + +
+

Unique key for the listener.

+
+ + + +
+
+ Type +
+
+ +goog.events.Key + + +
+
+ + + + +
+ + + +
+

removeControl

+ + +
Stability: experimental
+ + + + +
+
+ + +
+

Remove the given control from the map.

+
+ + + + + + + +
Parameters:
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
NameTypeDescription
control + + +ol.control.Control + + + +

Control.

+ + + +
+ + + + + + + + + + + + + + + + + + + +
Source:
+
  • map.js, line 1072
+ + + + + + + +
+ + + + + + + +
Returns:
+ + +
+

The removed control of undefined + if the control was not found.

+
+ + + +
+
+ Type +
+
+ +ol.control.Control +| + +undefined + + +
+
+ + + + +
+ + + +
+

removeInteraction

+ + +
Stability: not documented
+ + + + +
+
+ + +
+

Remove the given interaction from the map.

+
+ + + + + + + +
Parameters:
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
NameTypeDescription
interaction + + +ol.interaction.Interaction + + + +

Interaction to remove.

+ + + +
+ + + + + + + + + + + + + + + + + + + +
Source:
+
  • map.js, line 1088
+ + + + + + + +
+ + + + + + + +
Returns:
+ + +
+

The removed interaction (or + undefined if the interaction was not found).

+
+ + + +
+
+ Type +
+
+ +ol.interaction.Interaction +| + +undefined + + +
+
+ + + + +
+ + + +
+

removeLayer

+ + +
Stability: experimental
+ + + + +
+
+ + +
+

Removes the given layer from the map.

+
+ + + + + + + +
Parameters:
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
NameTypeDescription
layer + + +ol.layer.Base + + + +

Layer.

+ + + +
+ + + + + + + + + + + + + + + + + + + +
Source:
+
  • map.js, line 1106
+ + + + + + + +
+ + + + + + + +
Returns:
+ + +
+

The removed layer or undefined if the + layer was not found.

+
+ + + +
+
+ Type +
+
+ +ol.layer.Base +| + +undefined + + +
+
+ + + + +
+ + + +
+

removeOverlay

+ + +
Stability: experimental
+ + + + +
+
+ + +
+

Remove the given overlay from the map.

+
+ + + + + + + +
Parameters:
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
NameTypeDescription
overlay + + +ol.Overlay + + + +

Overlay.

+ + + +
+ + + + + + + + + + + + + + + + + + + +
Source:
+
  • map.js, line 1120
+ + + + + + + +
+ + + + + + + +
Returns:
+ + +
+

The removed overlay of undefined + if the overlay was not found.

+
+ + + +
+
+ Type +
+
+ +ol.Overlay +| + +undefined + + +
+
+ + + + +
+ + + +
+

render

+ + +
Stability: not documented
+ + + + +
+
+ + +
+

Request that renderFrame_ be called some time in the future.

+
+ + + + + + + + + +
+ + + + + + + + + + + + + + + + + + + +
Source:
+
  • map.js, line 1058
+ + + + + + + +
+ + + + + + + + + +
+ + + +
+

renderSync

+ + +
Stability: not documented
+ + + + +
+
+ + +
+

Render.

+
+ + + + + + + + + +
+ + + + + + + + + + + + + + + + + + + +
Source:
+
  • map.js, line 1050
+ + + + + + + +
+ + + + + + + + + +
+ + + +
+

set

+ + +
Stability: experimental
+ + + + +
+
+ + +
+

Sets a value.

+
+ + + + + + + +
Parameters:
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
NameTypeDescription
key + + +string + + + +

Key name.

value + + +* + + + +

Value.

+ + + +
+ + + + + + + +
Inherited From:
+
+ + + + + + + + + + + + + +
Source:
+
  • object.js, line 399
+ + + + + + + +
+ + + + + + + + + +
+ + + +
+

setLayerGroup

+ + +
Stability: experimental
+ + + + +
+
+ + +
+

Sets the layergroup of this map.

+
+ + + + + + + +
Parameters:
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
NameTypeDescription
layerGroup + + +ol.layer.Group + + + +

Layergroup.

+ + + +
+ + + + + + + + + + + + + + + + + + + +
Source:
+
  • map.js, line 1245
+ + + + + + + +
+ + + + + + + + + +
+ + + +
+

setSize

+ + +
Stability: experimental
+ + + + +
+
+ + +
+

Set the size of this map.

+
+ + + + + + + +
Parameters:
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
NameTypeDescription
size + + +ol.Size +| + +undefined + + + +

Size.

+ + + +
+ + + + + + + + + + + + + + + + + + + +
Source:
+
  • map.js, line 1259
+ + + + + + + +
+ + + + + + + + + +
+ + + +
+

setTarget

+ + +
Stability: experimental
+ + + + +
+
+ + +
+

Set the target element to render this map into.

+
+ + + + + + + +
Parameters:
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
NameTypeDescription
target + + +Element +| + +string +| + +undefined + + + +

Target.

+ + + +
+ + + + + + + + + + + + + + + + + + + +
Source:
+
  • map.js, line 1273
+ + + + + + + +
+ + + + + + + + + +
+ + + +
+

setValues

+ + +
Stability: experimental
+ + + + +
+
+ + +
+

Sets a collection of key-value pairs.

+
+ + + + + + + +
Parameters:
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
NameTypeDescription
values + + +Object.<string, *> + + + +

Values.

+ + + +
+ + + + + + + +
Inherited From:
+
+ + + + + + + + + + + + + +
Source:
+
  • object.js, line 428
+ + + + + + + +
+ + + + + + + + + +
+ + + +
+

setView

+ + +
Stability: experimental
+ + + + +
+
+ + +
+

Set the view for this map.

+
+ + + + + + + +
Parameters:
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
NameTypeDescription
view + + +ol.IView + + + +

View.

+ + + +
+ + + + + + + + + + + + + + + + + + + +
Source:
+
  • map.js, line 1287
+ + + + + + + +
+ + + + + + + + + +
+ + + +
+

un

+ + +
Stability: experimental
+ + + + +
+
+ + +
+

Unlisten for a certain type of event.

+
+ + + + + + + +
Parameters:
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
NameTypeArgumentDescription
type + + +string +| + +Array.<string> + + + + + + + +

The event type or array of event types.

listener + + +function + + + + + + + +

The listener function.

this + + +Object + + + + + + <optional>
+ + + +

The object to use as this in listener.

+ + + +
+ + + + + + + +
Inherited From:
+
+ + + + + + + + + + + + + +
Source:
+
  • observable.js, line 83
+ + + + + + + +
+ + + + + + + + + +
+ + + +
+

unbind

+ + +
Stability: experimental
+ + + + +
+
+ + +
+

Removes a binding. Unbinding will set the unbound property to the current + value. The object will not be notified, as the value has not changed.

+
+ + + + + + + +
Parameters:
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
NameTypeDescription
key + + +string + + + +

Key name.

+ + + +
+ + + + + + + +
Inherited From:
+
+ + + + + + + + + + + + + +
Source:
+
  • object.js, line 442
+ + + + + + + +
+ + + + + + + + + +
+ + + +
+

unbindAll

+ + +
Stability: experimental
+ + + + +
+
+ + +
+

Removes all bindings.

+
+ + + + + + + + + +
+ + + + + + + +
Inherited From:
+
+ + + + + + + + + + + + + +
Source:
+
  • object.js, line 466
+ + + + + + + +
+ + + + + + + + + +
+ + + +
+

unByKey

+ + +
Stability: experimental
+ + + + +
+
+ + +
+

Removes an event listener using the key returned by on() or once().

+
+ + + + + + + +
Parameters:
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
NameTypeDescription
key + + +goog.events.Key + + + +

Key.

+ + + +
+ + + + + + + +
Inherited From:
+
+ + + + + + + + + + + + + +
Source:
+
  • observable.js, line 93
+ + + + + + + +
+ + + + + + + + + +
+ + + +
+

updateSize

+ + +
Stability: experimental
+ + + + +
+
+ + +
+

Force a recalculation of the map viewport size. This should be called when +third-party code changes the size of the map viewport.

+
+ + + + + + + + + +
+ + + + + + + + + + + + + + + + + + + +
Source:
+
  • map.js, line 1301
+ + + + + + + +
+ + + + + + + + + +
+ +
+ + + + + +
+ +
+ + + + +
+ + + +
+ + + + + + \ No newline at end of file diff --git a/float-no-zero/apidoc/ol.MapBrowserEvent.html b/float-no-zero/apidoc/ol.MapBrowserEvent.html new file mode 100644 index 0000000000..0b2d06210f --- /dev/null +++ b/float-no-zero/apidoc/ol.MapBrowserEvent.html @@ -0,0 +1,304 @@ + + + + + OpenLayers 3 API Documentation - Class: ol.MapBrowserEvent + + + + + + + + + + + + + + + + +
+ + + + +
+ +
+

+ ol. + + ol.MapBrowserEvent +

+ +
+ +
+
+ + + + +
+

new MapBrowserEvent

+ + +
Stability: experimental
+ + + + +
+
+ + + + + + + + +
Parameters:
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
NameTypeArgumentDescription
type + + +string + + + + + + + +

Event type.

map + + +ol.Map + + + + + + + +

Map.

browserEvent + + +goog.events.BrowserEvent + + + + + + + +

Browser event.

frameState + + +ol.FrameState + + + + + + <optional>
+ + + + <nullable>
+ +

Frame state.

+ + + +
+ + + + + + + + + + + + + + + + + + + +
Source:
+
  • mapbrowserevent.js, line 29
+ + + + + + + +
+ + + + + + + + + +
+ + +
+ + + + + + + + + + + + + + + + + + + + +
+ +
+ + + + +
+ + + +
+ + + + + + \ No newline at end of file diff --git a/float-no-zero/apidoc/ol.Object.html b/float-no-zero/apidoc/ol.Object.html new file mode 100644 index 0000000000..aefc286885 --- /dev/null +++ b/float-no-zero/apidoc/ol.Object.html @@ -0,0 +1,2045 @@ + + + + + OpenLayers 3 API Documentation - Class: ol.Object + + + + + + + + + + + + + + + + +
+ + + + +
+ +
+

+ ol. + + ol.Object +

+ +
+ +
+
+ + + + +
+

new Object

+ + +
Stability: experimental
+ + + + +
+
+ + +
+

Base class implementing KVO (Key Value Observing).

+
+ + + + + + + +
Parameters:
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
NameTypeArgumentDescription
values + + +Object.<string, *>= + + + + + + <optional>
+ + + +

Values.

+ + + +
+ + + + + + + + + + + + + + + + + + + +
Source:
+
  • object.js, line 105
+ + + + + + + +
+ + + + + + + + + +
+ + +
+ + +

Extends

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

Methods

+ +
+ +
+

bindTo

+ + +
Stability: experimental
+ + + + +
+
+ + +
+

The bindTo method allows you to set up a two-way binding between a +source and target object. The method returns an +ol.ObjectAccessor with a transform method that lets you transform +values on the way from the source to the target and on the way back.

+

For example, if you had two map views (sourceView and targetView) +and you wanted the target view to have double the resolution of the +source view, you could transform the resolution on the way to and +from the target with the following:

+
sourceView.bindTo('resolution', targetView)
+  .transform(
+    function(sourceResolution) {
+      // from sourceView.resolution to targetView.resolution
+      return 2 * sourceResolution;
+    },
+    function(targetResolution) {
+      // from targetView.resolution to sourceView.resolution
+      return targetResolution / 2;
+    }
+  );
+
+ + + + + + + +
Parameters:
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
NameTypeArgumentDescription
key + + +string + + + + + + + +

Key name.

target + + +ol.Object + + + + + + + +

Target.

targetKey + + +string + + + + + + <optional>
+ + + +

Target key.

+ + + +
+ + + + + + + + + + + + + + + + + + + +
Source:
+
  • object.js, line 232
+ + + + + + + +
+ + + + + + + +
Returns:
+ + + + +
+
+ Type +
+
+ +ol.ObjectAccessor + + +
+
+ + + + +
+ + + +
+

dispatchChangeEvent

+ + +
Stability: experimental
+ + + + +
+
+ + + + + + + + + + +
+ + + + + + + +
Inherited From:
+
+ + + + + + + + + + + + + +
Source:
+
  • observable.js, line 35
+ + + + + + + +
+ + + + + + + + + +
+ + + +
+

get

+ + +
Stability: experimental
+ + + + +
+
+ + +
+

Gets a value.

+
+ + + + + + + +
Parameters:
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
NameTypeDescription
key + + +string + + + +

Key name.

+ + + +
+ + + + + + + + + + + + + + + + + + + +
Source:
+
  • object.js, line 289
+ + + + + + + +
+ + + + + + + +
Returns:
+ + +
+

Value.

+
+ + + +
+
+ Type +
+
+ +* + + +
+
+ + + + +
+ + + +
+

getProperties

+ + +
Stability: experimental
+ + + + +
+
+ + +
+

Get an object of all property names and values.

+
+ + + + + + + + + +
+ + + + + + + + + + + + + + + + + + + +
Source:
+
  • object.js, line 348
+ + + + + + + +
+ + + + + + + +
Returns:
+ + +
+

Object.

+
+ + + +
+
+ Type +
+
+ +Object.<string, *> + + +
+
+ + + + +
+ + + +
+

notify

+ + +
Stability: experimental
+ + + + +
+
+ + +
+

Notify all observers of a change on this property. This notifies both +objects that are bound to the object's property as well as the object +that it is bound to.

+
+ + + + + + + +
Parameters:
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
NameTypeDescription
key + + +string + + + +

Key name.

+ + + +
+ + + + + + + + + + + + + + + + + + + +
Source:
+
  • object.js, line 368
+ + + + + + + +
+ + + + + + + + + +
+ + + +
+

on

+ + +
Stability: experimental
+ + + + +
+
+ + +
+

Listen for a certain type of event.

+
+ + + + + + + +
Parameters:
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
NameTypeArgumentDescription
type + + +string +| + +Array.<string> + + + + + + + +

The event type or array of event types.

listener + + +function + + + + + + + +

The listener function.

this + + +Object + + + + + + <optional>
+ + + +

The object to use as this in listener.

+ + + +
+ + + + + + + +
Inherited From:
+
+ + + + + + + + + + + + + +
Source:
+
  • observable.js, line 58
+ + + + + + + +
+ + + + + + + +
Returns:
+ + +
+

Unique key for the listener.

+
+ + + +
+
+ Type +
+
+ +goog.events.Key + + +
+
+ + + + +
+ + + +
+

once

+ + +
Stability: experimental
+ + + + +
+
+ + +
+

Listen once for a certain type of event.

+
+ + + + + + + +
Parameters:
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
NameTypeArgumentDescription
type + + +string +| + +Array.<string> + + + + + + + +

The event type or array of event types.

listener + + +function + + + + + + + +

The listener function.

this + + +Object + + + + + + <optional>
+ + + +

The object to use as this in listener.

+ + + +
+ + + + + + + +
Inherited From:
+
+ + + + + + + + + + + + + +
Source:
+
  • observable.js, line 71
+ + + + + + + +
+ + + + + + + +
Returns:
+ + +
+

Unique key for the listener.

+
+ + + +
+
+ Type +
+
+ +goog.events.Key + + +
+
+ + + + +
+ + + +
+

set

+ + +
Stability: experimental
+ + + + +
+
+ + +
+

Sets a value.

+
+ + + + + + + +
Parameters:
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
NameTypeDescription
key + + +string + + + +

Key name.

value + + +* + + + +

Value.

+ + + +
+ + + + + + + + + + + + + + + + + + + +
Source:
+
  • object.js, line 399
+ + + + + + + +
+ + + + + + + + + +
+ + + +
+

setValues

+ + +
Stability: experimental
+ + + + +
+
+ + +
+

Sets a collection of key-value pairs.

+
+ + + + + + + +
Parameters:
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
NameTypeDescription
values + + +Object.<string, *> + + + +

Values.

+ + + +
+ + + + + + + + + + + + + + + + + + + +
Source:
+
  • object.js, line 428
+ + + + + + + +
+ + + + + + + + + +
+ + + +
+

un

+ + +
Stability: experimental
+ + + + +
+
+ + +
+

Unlisten for a certain type of event.

+
+ + + + + + + +
Parameters:
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
NameTypeArgumentDescription
type + + +string +| + +Array.<string> + + + + + + + +

The event type or array of event types.

listener + + +function + + + + + + + +

The listener function.

this + + +Object + + + + + + <optional>
+ + + +

The object to use as this in listener.

+ + + +
+ + + + + + + +
Inherited From:
+
+ + + + + + + + + + + + + +
Source:
+
  • observable.js, line 83
+ + + + + + + +
+ + + + + + + + + +
+ + + +
+

unbind

+ + +
Stability: experimental
+ + + + +
+
+ + +
+

Removes a binding. Unbinding will set the unbound property to the current + value. The object will not be notified, as the value has not changed.

+
+ + + + + + + +
Parameters:
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
NameTypeDescription
key + + +string + + + +

Key name.

+ + + +
+ + + + + + + + + + + + + + + + + + + +
Source:
+
  • object.js, line 442
+ + + + + + + +
+ + + + + + + + + +
+ + + +
+

unbindAll

+ + +
Stability: experimental
+ + + + +
+
+ + +
+

Removes all bindings.

+
+ + + + + + + + + +
+ + + + + + + + + + + + + + + + + + + +
Source:
+
  • object.js, line 466
+ + + + + + + +
+ + + + + + + + + +
+ + + +
+

unByKey

+ + +
Stability: experimental
+ + + + +
+
+ + +
+

Removes an event listener using the key returned by on() or once().

+
+ + + + + + + +
Parameters:
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
NameTypeDescription
key + + +goog.events.Key + + + +

Key.

+ + + +
+ + + + + + + +
Inherited From:
+
+ + + + + + + + + + + + + +
Source:
+
  • observable.js, line 93
+ + + + + + + +
+ + + + + + + + + +
+ +
+ + + + + +
+ +
+ + + + +
+ + + +
+ + + + + + \ No newline at end of file diff --git a/float-no-zero/apidoc/ol.Observable.html b/float-no-zero/apidoc/ol.Observable.html new file mode 100644 index 0000000000..5cbec43594 --- /dev/null +++ b/float-no-zero/apidoc/ol.Observable.html @@ -0,0 +1,951 @@ + + + + + OpenLayers 3 API Documentation - Class: ol.Observable + + + + + + + + + + + + + + + + +
+ + + + +
+ +
+

+ ol. + + ol.Observable +

+ +
+ +
+
+ + + + +
+

new Observable

+ + +
Stability: experimental
+ + + + +
+
+ + +
+

An event target providing convenient methods for listener registration +and unregistration.

+
+ + + + + + + + + +
+ + + + + + + + + + + + + + + + + + + +
Source:
+
  • observable.js, line 18
+ + + + + + + +
+ + + + + + + + + +
+ + +
+ + + + + + + + + + + + + + + + +

Methods

+ +
+ +
+

dispatchChangeEvent

+ + +
Stability: experimental
+ + + + +
+
+ + + + + + + + + + +
+ + + + + + + + + + + + + + + + + + + +
Source:
+
  • observable.js, line 35
+ + + + + + + +
+ + + + + + + + + +
+ + + +
+

on

+ + +
Stability: experimental
+ + + + +
+
+ + +
+

Listen for a certain type of event.

+
+ + + + + + + +
Parameters:
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
NameTypeArgumentDescription
type + + +string +| + +Array.<string> + + + + + + + +

The event type or array of event types.

listener + + +function + + + + + + + +

The listener function.

this + + +Object + + + + + + <optional>
+ + + +

The object to use as this in listener.

+ + + +
+ + + + + + + + + + + + + + + + + + + +
Source:
+
  • observable.js, line 58
+ + + + + + + +
+ + + + + + + +
Returns:
+ + +
+

Unique key for the listener.

+
+ + + +
+
+ Type +
+
+ +goog.events.Key + + +
+
+ + + + +
+ + + +
+

once

+ + +
Stability: experimental
+ + + + +
+
+ + +
+

Listen once for a certain type of event.

+
+ + + + + + + +
Parameters:
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
NameTypeArgumentDescription
type + + +string +| + +Array.<string> + + + + + + + +

The event type or array of event types.

listener + + +function + + + + + + + +

The listener function.

this + + +Object + + + + + + <optional>
+ + + +

The object to use as this in listener.

+ + + +
+ + + + + + + + + + + + + + + + + + + +
Source:
+
  • observable.js, line 71
+ + + + + + + +
+ + + + + + + +
Returns:
+ + +
+

Unique key for the listener.

+
+ + + +
+
+ Type +
+
+ +goog.events.Key + + +
+
+ + + + +
+ + + +
+

un

+ + +
Stability: experimental
+ + + + +
+
+ + +
+

Unlisten for a certain type of event.

+
+ + + + + + + +
Parameters:
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
NameTypeArgumentDescription
type + + +string +| + +Array.<string> + + + + + + + +

The event type or array of event types.

listener + + +function + + + + + + + +

The listener function.

this + + +Object + + + + + + <optional>
+ + + +

The object to use as this in listener.

+ + + +
+ + + + + + + + + + + + + + + + + + + +
Source:
+
  • observable.js, line 83
+ + + + + + + +
+ + + + + + + + + +
+ + + +
+

unByKey

+ + +
Stability: experimental
+ + + + +
+
+ + +
+

Removes an event listener using the key returned by on() or once().

+
+ + + + + + + +
Parameters:
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
NameTypeDescription
key + + +goog.events.Key + + + +

Key.

+ + + +
+ + + + + + + + + + + + + + + + + + + +
Source:
+
  • observable.js, line 93
+ + + + + + + +
+ + + + + + + + + +
+ +
+ + + + + +
+ +
+ + + + +
+ + + +
+ + + + + + \ No newline at end of file diff --git a/float-no-zero/apidoc/ol.Overlay.html b/float-no-zero/apidoc/ol.Overlay.html new file mode 100644 index 0000000000..b5d5e0dbd9 --- /dev/null +++ b/float-no-zero/apidoc/ol.Overlay.html @@ -0,0 +1,3016 @@ + + + + + OpenLayers 3 API Documentation - Class: ol.Overlay + + + + + + + + + + + + + + + + +
+ + + + +
+ +
+

+ ol. + + ol.Overlay +

+ +
+ +
+
+ + + + +
+

new Overlay

+ + +
Stability: experimental
+ + + + +
+
+ + +
+

An element to show on top of the map, such as for a popup.

+

Example:

+
var popup = new ol.Overlay({
+  element: document.getElementById('popup')
+});
+popup.setPosition(coordinate);
+map.addOverlay(popup);
+
+ + + + + + + +
Parameters:
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
NameTypeDescription
options + + +olx.OverlayOptions + + + +

Overlay options.

+ + + +
+ + + + + + + + + + + + + + + + + + + +
Source:
+
  • overlay.js, line 67
+ + + + + + + +
+ + + + + + + + + +
+ + +
+ + +

Extends

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

Observable Properties

+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
NameTypeSettableEventDescription
element + + +Element + + + + yeschange:elementthe Element containing the overlay
map + + +ol.Map + + + + yeschange:mapthe map that the overlay is part of
position + + +ol.Coordinate + + + + yeschange:positionthe spatial point that the overlay + is anchored at
positioning + + +ol.OverlayPositioning + + + + yeschange:positioninghow the overlay is + positioned relative to its point on the map
+
+ + + + + + +

Methods

+ +
+ +
+

bindTo

+ + +
Stability: experimental
+ + + + +
+
+ + +
+

The bindTo method allows you to set up a two-way binding between a +source and target object. The method returns an +ol.ObjectAccessor with a transform method that lets you transform +values on the way from the source to the target and on the way back.

+

For example, if you had two map views (sourceView and targetView) +and you wanted the target view to have double the resolution of the +source view, you could transform the resolution on the way to and +from the target with the following:

+
sourceView.bindTo('resolution', targetView)
+  .transform(
+    function(sourceResolution) {
+      // from sourceView.resolution to targetView.resolution
+      return 2 * sourceResolution;
+    },
+    function(targetResolution) {
+      // from targetView.resolution to sourceView.resolution
+      return targetResolution / 2;
+    }
+  );
+
+ + + + + + + +
Parameters:
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
NameTypeArgumentDescription
key + + +string + + + + + + + +

Key name.

target + + +ol.Object + + + + + + + +

Target.

targetKey + + +string + + + + + + <optional>
+ + + +

Target key.

+ + + +
+ + + + + + + +
Inherited From:
+
+ + + + + + + + + + + + + +
Source:
+
  • object.js, line 232
+ + + + + + + +
+ + + + + + + +
Returns:
+ + + + +
+
+ Type +
+
+ +ol.ObjectAccessor + + +
+
+ + + + +
+ + + +
+

dispatchChangeEvent

+ + +
Stability: experimental
+ + + + +
+
+ + + + + + + + + + +
+ + + + + + + +
Inherited From:
+
+ + + + + + + + + + + + + +
Source:
+
  • observable.js, line 35
+ + + + + + + +
+ + + + + + + + + +
+ + + +
+

get

+ + +
Stability: experimental
+ + + + +
+
+ + +
+

Gets a value.

+
+ + + + + + + +
Parameters:
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
NameTypeDescription
key + + +string + + + +

Key name.

+ + + +
+ + + + + + + +
Inherited From:
+
+ + + + + + + + + + + + + +
Source:
+
  • object.js, line 289
+ + + + + + + +
+ + + + + + + +
Returns:
+ + +
+

Value.

+
+ + + +
+
+ Type +
+
+ +* + + +
+
+ + + + +
+ + + +
+

getElement

+ + +
Stability: experimental
+ + + + +
+
+ + +
+

Get the DOM element of this overlay.

+
+ + + + + + + + + +
+ + + + + + + + + + + + + + + + + + + +
Source:
+
  • overlay.js, line 150
+ + + + + + + +
+ + + + + + + +
Returns:
+ + +
+

Element.

+
+ + + +
+
+ Type +
+
+ +Element +| + +undefined + + +
+
+ + + + +
+ + + +
+

getMap

+ + +
Stability: experimental
+ + + + +
+
+ + +
+

Get the map associated with this overlay.

+
+ + + + + + + + + +
+ + + + + + + + + + + + + + + + + + + +
Source:
+
  • overlay.js, line 165
+ + + + + + + +
+ + + + + + + +
Returns:
+ + +
+

Map.

+
+ + + +
+
+ Type +
+
+ +ol.Map +| + +undefined + + +
+
+ + + + +
+ + + +
+

getPosition

+ + +
Stability: experimental
+ + + + +
+
+ + +
+

Get the current position of this overlay.

+
+ + + + + + + + + +
+ + + + + + + + + + + + + + + + + + + +
Source:
+
  • overlay.js, line 180
+ + + + + + + +
+ + + + + + + +
Returns:
+ + +
+

Position.

+
+ + + +
+
+ Type +
+
+ +ol.Coordinate +| + +undefined + + +
+
+ + + + +
+ + + +
+

getPositioning

+ + +
Stability: experimental
+ + + + +
+
+ + +
+

Get the current positioning of this overlay.

+
+ + + + + + + + + +
+ + + + + + + + + + + + + + + + + + + +
Source:
+
  • overlay.js, line 195
+ + + + + + + +
+ + + + + + + +
Returns:
+ + +
+

Positioning.

+
+ + + +
+
+ Type +
+
+ +ol.OverlayPositioning +| + +undefined + + +
+
+ + + + +
+ + + +
+

getProperties

+ + +
Stability: experimental
+ + + + +
+
+ + +
+

Get an object of all property names and values.

+
+ + + + + + + + + +
+ + + + + + + +
Inherited From:
+
+ + + + + + + + + + + + + +
Source:
+
  • object.js, line 348
+ + + + + + + +
+ + + + + + + +
Returns:
+ + +
+

Object.

+
+ + + +
+
+ Type +
+
+ +Object.<string, *> + + +
+
+ + + + +
+ + + +
+

notify

+ + +
Stability: experimental
+ + + + +
+
+ + +
+

Notify all observers of a change on this property. This notifies both +objects that are bound to the object's property as well as the object +that it is bound to.

+
+ + + + + + + +
Parameters:
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
NameTypeDescription
key + + +string + + + +

Key name.

+ + + +
+ + + + + + + +
Inherited From:
+
+ + + + + + + + + + + + + +
Source:
+
  • object.js, line 368
+ + + + + + + +
+ + + + + + + + + +
+ + + +
+

on

+ + +
Stability: experimental
+ + + + +
+
+ + +
+

Listen for a certain type of event.

+
+ + + + + + + +
Parameters:
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
NameTypeArgumentDescription
type + + +string +| + +Array.<string> + + + + + + + +

The event type or array of event types.

listener + + +function + + + + + + + +

The listener function.

this + + +Object + + + + + + <optional>
+ + + +

The object to use as this in listener.

+ + + +
+ + + + + + + +
Inherited From:
+
+ + + + + + + + + + + + + +
Source:
+
  • observable.js, line 58
+ + + + + + + +
+ + + + + + + +
Returns:
+ + +
+

Unique key for the listener.

+
+ + + +
+
+ Type +
+
+ +goog.events.Key + + +
+
+ + + + +
+ + + +
+

once

+ + +
Stability: experimental
+ + + + +
+
+ + +
+

Listen once for a certain type of event.

+
+ + + + + + + +
Parameters:
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
NameTypeArgumentDescription
type + + +string +| + +Array.<string> + + + + + + + +

The event type or array of event types.

listener + + +function + + + + + + + +

The listener function.

this + + +Object + + + + + + <optional>
+ + + +

The object to use as this in listener.

+ + + +
+ + + + + + + +
Inherited From:
+
+ + + + + + + + + + + + + +
Source:
+
  • observable.js, line 71
+ + + + + + + +
+ + + + + + + +
Returns:
+ + +
+

Unique key for the listener.

+
+ + + +
+
+ Type +
+
+ +goog.events.Key + + +
+
+ + + + +
+ + + +
+

set

+ + +
Stability: experimental
+ + + + +
+
+ + +
+

Sets a value.

+
+ + + + + + + +
Parameters:
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
NameTypeDescription
key + + +string + + + +

Key name.

value + + +* + + + +

Value.

+ + + +
+ + + + + + + +
Inherited From:
+
+ + + + + + + + + + + + + +
Source:
+
  • object.js, line 399
+ + + + + + + +
+ + + + + + + + + +
+ + + +
+

setElement

+ + +
Stability: experimental
+ + + + +
+
+ + +
+

Set the DOM element to be associated with this overlay.

+
+ + + + + + + +
Parameters:
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
NameTypeDescription
element + + +Element +| + +undefined + + + +

Element.

+ + + +
+ + + + + + + + + + + + + + + + + + + +
Source:
+
  • overlay.js, line 272
+ + + + + + + +
+ + + + + + + + + +
+ + + +
+

setMap

+ + +
Stability: experimental
+ + + + +
+
+ + +
+

Set the map to be associated with this overlay.

+
+ + + + + + + +
Parameters:
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
NameTypeDescription
map + + +ol.Map +| + +undefined + + + +

Map.

+ + + +
+ + + + + + + + + + + + + + + + + + + +
Source:
+
  • overlay.js, line 286
+ + + + + + + +
+ + + + + + + + + +
+ + + +
+

setPosition

+ + +
Stability: experimental
+ + + + +
+
+ + +
+

Set the position for this overlay.

+
+ + + + + + + +
Parameters:
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
NameTypeDescription
position + + +ol.Coordinate +| + +undefined + + + +

Position.

+ + + +
+ + + + + + + + + + + + + + + + + + + +
Source:
+
  • overlay.js, line 300
+ + + + + + + +
+ + + + + + + + + +
+ + + +
+

setPositioning

+ + +
Stability: experimental
+ + + + +
+
+ + +
+

Set the positioning for this overlay.

+
+ + + + + + + +
Parameters:
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
NameTypeDescription
positioning + + +ol.OverlayPositioning +| + +undefined + + + +

Positioning.

+ + + +
+ + + + + + + + + + + + + + + + + + + +
Source:
+
  • overlay.js, line 314
+ + + + + + + +
+ + + + + + + + + +
+ + + +
+

setValues

+ + +
Stability: experimental
+ + + + +
+
+ + +
+

Sets a collection of key-value pairs.

+
+ + + + + + + +
Parameters:
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
NameTypeDescription
values + + +Object.<string, *> + + + +

Values.

+ + + +
+ + + + + + + +
Inherited From:
+
+ + + + + + + + + + + + + +
Source:
+
  • object.js, line 428
+ + + + + + + +
+ + + + + + + + + +
+ + + +
+

un

+ + +
Stability: experimental
+ + + + +
+
+ + +
+

Unlisten for a certain type of event.

+
+ + + + + + + +
Parameters:
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
NameTypeArgumentDescription
type + + +string +| + +Array.<string> + + + + + + + +

The event type or array of event types.

listener + + +function + + + + + + + +

The listener function.

this + + +Object + + + + + + <optional>
+ + + +

The object to use as this in listener.

+ + + +
+ + + + + + + +
Inherited From:
+
+ + + + + + + + + + + + + +
Source:
+
  • observable.js, line 83
+ + + + + + + +
+ + + + + + + + + +
+ + + +
+

unbind

+ + +
Stability: experimental
+ + + + +
+
+ + +
+

Removes a binding. Unbinding will set the unbound property to the current + value. The object will not be notified, as the value has not changed.

+
+ + + + + + + +
Parameters:
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
NameTypeDescription
key + + +string + + + +

Key name.

+ + + +
+ + + + + + + +
Inherited From:
+
+ + + + + + + + + + + + + +
Source:
+
  • object.js, line 442
+ + + + + + + +
+ + + + + + + + + +
+ + + +
+

unbindAll

+ + +
Stability: experimental
+ + + + +
+
+ + +
+

Removes all bindings.

+
+ + + + + + + + + +
+ + + + + + + +
Inherited From:
+
+ + + + + + + + + + + + + +
Source:
+
  • object.js, line 466
+ + + + + + + +
+ + + + + + + + + +
+ + + +
+

unByKey

+ + +
Stability: experimental
+ + + + +
+
+ + +
+

Removes an event listener using the key returned by on() or once().

+
+ + + + + + + +
Parameters:
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
NameTypeDescription
key + + +goog.events.Key + + + +

Key.

+ + + +
+ + + + + + + +
Inherited From:
+
+ + + + + + + + + + + + + +
Source:
+
  • observable.js, line 93
+ + + + + + + +
+ + + + + + + + + +
+ +
+ + + + + +
+ +
+ + + + +
+ + + +
+ + + + + + \ No newline at end of file diff --git a/float-no-zero/apidoc/ol.View2D.html b/float-no-zero/apidoc/ol.View2D.html new file mode 100644 index 0000000000..e5a31d67e5 --- /dev/null +++ b/float-no-zero/apidoc/ol.View2D.html @@ -0,0 +1,1700 @@ + + + + + OpenLayers 3 API Documentation - Class: ol.View2D + + + + + + + + + + + + + + + + +
+ + + + +
+ +
+

+ ol. + + ol.View2D +

+ +

An ol.View2D object represents a simple 2D view of the map.

+

This is the object to act upon to change the center, resolution, +and rotation of the map.

+

The view states

+

An ol.View2D is determined by three states: center, resolution, +and rotation. To each state corresponds a getter and a setter. E.g. +getCenter and setCenter for the center state.

+

An ol.View2D has a projection. The projection determines the +coordinate system of the center, and its units determine the units of the +resolution (projection units per pixel). The default projection is +Spherical Mercator (EPSG:3857).

+

The constraints

+

setCenter, setResolution and setRotation can be used to change the +states of the view. Any value can be passed to the setters. And the value +that is passed to a setter will effectively be the value set in the view, +and returned by the corresponding getter.

+

But an ol.View2D object also has a resolution constraint and a +rotation constraint. There's currently no center constraint, but +this may change in the future.

+

As said above no constraints are applied when the setters are used to set +new states for the view. Applying constraints is done explicitly through +the use of the constrain* functions (constrainResolution and +constrainRotation).

+

The main users of the constraints are the interactions and the +controls. For example, double-clicking on the map changes the view to +the "next" resolution. And releasing the fingers after pinch-zooming +snaps to the closest resolution (with an animation).

+

So the resolution constraint snaps to specific resolutions. It is +determined by the following options: resolutions, maxResolution, +maxZoom, and zoomFactor. If resolutions is set, the other three +options are ignored. See ol.View2DOptions for more information.

+

The rotation constaint is currently not configurable. It snaps the +rotation value to zero when approaching the horizontal.

+ +
+ +
+
+ + + + +
+

new View2D

+ + +
Stability: experimental
+ + + + +
+
+ + + + + + + + +
Parameters:
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
NameTypeArgumentDescription
options + + +olx.View2DOptions + + + + + + <optional>
+ + + +

View2D options.

+ + + +
+ + + + + + + + + + + + + + + + + + + +
Source:
+
  • view2d.js, line 95
+ + + + + + + +
+ + + + + + + + + +
+ + +
+ + + + + + + + + + + + +

Observable Properties

+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
NameTypeSettableEventDescription
center + + +ol.Coordinate + + + + yeschange:centerthe center of the view
projection + + +ol.proj.Projection + + + + yeschange:projectionthe projection of the view
resolution + + +number + + + + yeschange:resolutionthe resolution of the view
rotation + + +number + + + + yeschange:rotationthe rotation of the view
+
+ + + + + + +

Methods

+ +
+ +
+

calculateExtent

+ + +
Stability: experimental
+ + + + +
+
+ + +
+

Calculate the extent for the given size in pixels, based on the current +resolution and the current center.

+
+ + + + + + + +
Parameters:
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
NameTypeDescription
size + + +ol.Size + + + +

Box pixel size.

+ + + +
+ + + + + + + + + + + + + + + + + + + +
Source:
+
  • view2d.js, line 242
+ + + + + + + +
+ + + + + + + +
Returns:
+ + +
+

Extent.

+
+ + + +
+
+ Type +
+
+ +ol.Extent + + +
+
+ + + + +
+ + + +
+

constrainResolution

+ + +
Stability: experimental
+ + + + +
+
+ + +
+

Get the constrained the resolution of this view.

+
+ + + + + + + +
Parameters:
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
NameTypeArgumentDescription
resolution + + +number +| + +undefined + + + + + + + +

Resolution.

delta + + +number + + + + + + <optional>
+ + + +

Delta. Default is 0.

direction + + +number + + + + + + <optional>
+ + + +

Direction. Default is 0.

+ + + +
+ + + + + + + + + + + + + + + + + + + +
Source:
+
  • view2d.js, line 201
+ + + + + + + +
+ + + + + + + +
Returns:
+ + +
+

Constrained resolution.

+
+ + + +
+
+ Type +
+
+ +number +| + +undefined + + +
+
+ + + + +
+ + + +
+

constrainRotation

+ + +
Stability: experimental
+ + + + +
+
+ + +
+

Get the constrained rotation of this view.

+
+ + + + + + + +
Parameters:
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
NameTypeArgumentDescription
rotation + + +number +| + +undefined + + + + + + + +

Rotation.

delta + + +number + + + + + + <optional>
+ + + +

Delta. Default is 0.

+ + + +
+ + + + + + + + + + + + + + + + + + + +
Source:
+
  • view2d.js, line 216
+ + + + + + + +
+ + + + + + + +
Returns:
+ + +
+

Constrained rotation.

+
+ + + +
+
+ Type +
+
+ +number +| + +undefined + + +
+
+ + + + +
+ + + +
+

fitExtent

+ + +
Stability: experimental
+ + + + +
+
+ + +
+

Fit the given extent based on the given map size.

+
+ + + + + + + +
Parameters:
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
NameTypeDescription
extent + + +ol.Extent + + + +

Extent.

size + + +ol.Size + + + +

Box pixel size.

+ + + +
+ + + + + + + + + + + + + + + + + + + +
Source:
+
  • view2d.js, line 419
+ + + + + + + +
+ + + + + + + + + +
+ + + +
+

getZoom

+ + +
Stability: experimental
+ + + + +
+
+ + +
+

Get the current zoom level. Return undefined if the current +resolution is undefined or not a "constrained resolution".

+
+ + + + + + + + + +
+ + + + + + + + + + + + + + + + + + + +
Source:
+
  • view2d.js, line 393
+ + + + + + + +
+ + + + + + + +
Returns:
+ + +
+

Zoom.

+
+ + + +
+
+ Type +
+
+ +number +| + +undefined + + +
+
+ + + + +
+ + + +
+

setCenter

+ + +
Stability: experimental
+ + + + +
+
+ + +
+

Set the center of the current view.

+
+ + + + + + + +
Parameters:
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
NameTypeDescription
center + + +ol.Coordinate +| + +undefined + + + +

Center.

+ + + +
+ + + + + + + + + + + + + + + + + + + +
Source:
+
  • view2d.js, line 447
+ + + + + + + +
+ + + + + + + + + +
+ + + +
+

setProjection

+ + +
Stability: experimental
+ + + + +
+
+ + +
+

Set the projection of this view. +Warning! This code is not yet implemented. Function should not be used.

+
+ + + + + + + +
Parameters:
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
NameTypeDescription
projection + + +ol.proj.Projection +| + +undefined + + + +

Projection.

+ + + +
+ + + + + + + + + + + + + + + + + + + +
Source:
+
  • view2d.js, line 462
+ + + + + + + +
+ + + + + + + + + +
+ + + +
+

setResolution

+ + +
Stability: experimental
+ + + + +
+
+ + +
+

Set the resolution for this view.

+
+ + + + + + + +
Parameters:
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
NameTypeDescription
resolution + + +number +| + +undefined + + + +

Resolution.

+ + + +
+ + + + + + + + + + + + + + + + + + + +
Source:
+
  • view2d.js, line 476
+ + + + + + + +
+ + + + + + + + + +
+ + + +
+

setRotation

+ + +
Stability: experimental
+ + + + +
+
+ + +
+

Set the rotation for this view.

+
+ + + + + + + +
Parameters:
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
NameTypeDescription
rotation + + +number +| + +undefined + + + +

Rotation.

+ + + +
+ + + + + + + + + + + + + + + + + + + +
Source:
+
  • view2d.js, line 490
+ + + + + + + +
+ + + + + + + + + +
+ + + +
+

setZoom

+ + +
Stability: experimental
+ + + + +
+
+ + +
+

Zoom to a specific zoom level.

+
+ + + + + + + +
Parameters:
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
NameTypeDescription
zoom + + +number + + + +

Zoom level.

+ + + +
+ + + + + + + + + + + + + + + + + + + +
Source:
+
  • view2d.js, line 504
+ + + + + + + +
+ + + + + + + + + +
+ +
+ + + + + +
+ +
+ + + + +
+ + + +
+ + + + + + \ No newline at end of file diff --git a/float-no-zero/apidoc/ol.animation.html b/float-no-zero/apidoc/ol.animation.html new file mode 100644 index 0000000000..cb6bf377e5 --- /dev/null +++ b/float-no-zero/apidoc/ol.animation.html @@ -0,0 +1,678 @@ + + + + + OpenLayers 3 API Documentation - Namespace: ol.animation + + + + + + + + + + + + + + + + +
+ + + + +
+ +
+

+ ol. + + ol.animation +

+ +
+ +
+
+ + + + +

The {ol.animation} static methods are designed to be used with the ol.Map#beforeRender method. For example:

+
var map = new ol.Map({ ... });
+var zoom = ol.animation.zoom({
+  resolution: map.getView().getResolution()
+});
+map.beforeRender(zoom);
+map.getView().setResolution(map.getView().getResolution() * 2);
+ + + +
+ + + + + + + + + + + + + + + + + + + +
Source:
+
  • animation.jsdoc, line 1
+ + + + + + + +
+ + + + +
+ + + + + + + + + + + + + + + + +

Methods

+ +
+ +
+

<static> bounce

+ + +
Stability: experimental
+ + + + +
+
+ + + + + + + + +
Parameters:
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
NameTypeDescription
options + + +olx.animation.BounceOptions + + + +

Bounce options.

+ + + +
+ + + + + + + + + + + + + + + + + + + +
Source:
+
  • animation.js, line 15
+ + + + + + + +
+ + + + + + + +
Returns:
+ + +
+

Pre-render function.

+
+ + + +
+
+ Type +
+
+ +ol.PreRenderFunction + + +
+
+ + + + +
+ + + +
+

<static> pan

+ + +
Stability: experimental
+ + + + +
+
+ + + + + + + + +
Parameters:
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
NameTypeDescription
options + + +olx.animation.PanOptions + + + +

Pan options.

+ + + +
+ + + + + + + + + + + + + + + + + + + +
Source:
+
  • animation.js, line 50
+ + + + + + + +
+ + + + + + + +
Returns:
+ + +
+

Pre-render function.

+
+ + + +
+
+ Type +
+
+ +ol.PreRenderFunction + + +
+
+ + + + +
+ + + +
+

<static> rotate

+ + +
Stability: experimental
+ + + + +
+
+ + + + + + + + +
Parameters:
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
NameTypeDescription
options + + +olx.animation.RotateOptions + + + +

Rotate options.

+ + + +
+ + + + + + + + + + + + + + + + + + + +
Source:
+
  • animation.js, line 89
+ + + + + + + +
+ + + + + + + +
Returns:
+ + +
+

Pre-render function.

+
+ + + +
+
+ Type +
+
+ +ol.PreRenderFunction + + +
+
+ + + + +
+ + + +
+

<static> zoom

+ + +
Stability: experimental
+ + + + +
+
+ + + + + + + + +
Parameters:
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
NameTypeDescription
options + + +olx.animation.ZoomOptions + + + +

Zoom options.

+ + + +
+ + + + + + + + + + + + + + + + + + + +
Source:
+
  • animation.js, line 126
+ + + + + + + +
+ + + + + + + +
Returns:
+ + +
+

Pre-render function.

+
+ + + +
+
+ Type +
+
+ +ol.PreRenderFunction + + +
+
+ + + + +
+ +
+ + + + + +
+ +
+ + + + +
+ + + +
+ + + + + + \ No newline at end of file diff --git a/float-no-zero/apidoc/ol.control.Attribution.html b/float-no-zero/apidoc/ol.control.Attribution.html new file mode 100644 index 0000000000..b114cf99dc --- /dev/null +++ b/float-no-zero/apidoc/ol.control.Attribution.html @@ -0,0 +1,2306 @@ + + + + + OpenLayers 3 API Documentation - Class: ol.control.Attribution + + + + + + + + + + + + + + + + +
+ + + + +
+ +
+

+ ol.control. + + ol.control.Attribution +

+ +
+ +
+
+ + + + +
+

new Attribution

+ + +
Stability: experimental
+ + + + +
+
+ + +
+

Create a new attribution control to show all the attributions associated +with the layer sources in the map. A default map has this control included. +By default it will show in the bottom right portion of the map, but it can +be changed by using a css selector for .ol-attribution.

+
+ + + + + + + +
Parameters:
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
NameTypeArgumentDescription
options + + +olx.control.AttributionOptions + + + + + + <optional>
+ + + +

Attribution options.

+ + + +
+ + + + + + + + + + + + + + + + + + + +
Source:
+
  • attributioncontrol.js, line 27
+ + + + + + + +
+ + + + + + + + + +
+ + +
+ + +

Extends

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

Methods

+ +
+ +
+

bindTo

+ + +
Stability: experimental
+ + + + +
+
+ + +
+

The bindTo method allows you to set up a two-way binding between a +source and target object. The method returns an +ol.ObjectAccessor with a transform method that lets you transform +values on the way from the source to the target and on the way back.

+

For example, if you had two map views (sourceView and targetView) +and you wanted the target view to have double the resolution of the +source view, you could transform the resolution on the way to and +from the target with the following:

+
sourceView.bindTo('resolution', targetView)
+  .transform(
+    function(sourceResolution) {
+      // from sourceView.resolution to targetView.resolution
+      return 2 * sourceResolution;
+    },
+    function(targetResolution) {
+      // from targetView.resolution to sourceView.resolution
+      return targetResolution / 2;
+    }
+  );
+
+ + + + + + + +
Parameters:
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
NameTypeArgumentDescription
key + + +string + + + + + + + +

Key name.

target + + +ol.Object + + + + + + + +

Target.

targetKey + + +string + + + + + + <optional>
+ + + +

Target key.

+ + + +
+ + + + + + + +
Inherited From:
+
+ + + + + + + + + + + + + +
Source:
+
  • object.js, line 232
+ + + + + + + +
+ + + + + + + +
Returns:
+ + + + +
+
+ Type +
+
+ +ol.ObjectAccessor + + +
+
+ + + + +
+ + + +
+

dispatchChangeEvent

+ + +
Stability: experimental
+ + + + +
+
+ + + + + + + + + + +
+ + + + + + + +
Inherited From:
+
+ + + + + + + + + + + + + +
Source:
+
  • observable.js, line 35
+ + + + + + + +
+ + + + + + + + + +
+ + + +
+

get

+ + +
Stability: experimental
+ + + + +
+
+ + +
+

Gets a value.

+
+ + + + + + + +
Parameters:
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
NameTypeDescription
key + + +string + + + +

Key name.

+ + + +
+ + + + + + + +
Inherited From:
+
+ + + + + + + + + + + + + +
Source:
+
  • object.js, line 289
+ + + + + + + +
+ + + + + + + +
Returns:
+ + +
+

Value.

+
+ + + +
+
+ Type +
+
+ +* + + +
+
+ + + + +
+ + + +
+

getMap

+ + +
Stability: experimental
+ + + + +
+
+ + +
+

Get the map associated with this control.

+
+ + + + + + + + + +
+ + + + + + + +
Inherited From:
+
+ + + + + + + + + + + + + +
Source:
+
  • control.js, line 68
+ + + + + + + +
+ + + + + + + +
Returns:
+ + +
+

Map.

+
+ + + +
+
+ Type +
+
+ +ol.Map + + +
+
+ + + + +
+ + + +
+

getProperties

+ + +
Stability: experimental
+ + + + +
+
+ + +
+

Get an object of all property names and values.

+
+ + + + + + + + + +
+ + + + + + + +
Inherited From:
+
+ + + + + + + + + + + + + +
Source:
+
  • object.js, line 348
+ + + + + + + +
+ + + + + + + +
Returns:
+ + +
+

Object.

+
+ + + +
+
+ Type +
+
+ +Object.<string, *> + + +
+
+ + + + +
+ + + +
+

notify

+ + +
Stability: experimental
+ + + + +
+
+ + +
+

Notify all observers of a change on this property. This notifies both +objects that are bound to the object's property as well as the object +that it is bound to.

+
+ + + + + + + +
Parameters:
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
NameTypeDescription
key + + +string + + + +

Key name.

+ + + +
+ + + + + + + +
Inherited From:
+
+ + + + + + + + + + + + + +
Source:
+
  • object.js, line 368
+ + + + + + + +
+ + + + + + + + + +
+ + + +
+

on

+ + +
Stability: experimental
+ + + + +
+
+ + +
+

Listen for a certain type of event.

+
+ + + + + + + +
Parameters:
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
NameTypeArgumentDescription
type + + +string +| + +Array.<string> + + + + + + + +

The event type or array of event types.

listener + + +function + + + + + + + +

The listener function.

this + + +Object + + + + + + <optional>
+ + + +

The object to use as this in listener.

+ + + +
+ + + + + + + +
Inherited From:
+
+ + + + + + + + + + + + + +
Source:
+
  • observable.js, line 58
+ + + + + + + +
+ + + + + + + +
Returns:
+ + +
+

Unique key for the listener.

+
+ + + +
+
+ Type +
+
+ +goog.events.Key + + +
+
+ + + + +
+ + + +
+

once

+ + +
Stability: experimental
+ + + + +
+
+ + +
+

Listen once for a certain type of event.

+
+ + + + + + + +
Parameters:
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
NameTypeArgumentDescription
type + + +string +| + +Array.<string> + + + + + + + +

The event type or array of event types.

listener + + +function + + + + + + + +

The listener function.

this + + +Object + + + + + + <optional>
+ + + +

The object to use as this in listener.

+ + + +
+ + + + + + + +
Inherited From:
+
+ + + + + + + + + + + + + +
Source:
+
  • observable.js, line 71
+ + + + + + + +
+ + + + + + + +
Returns:
+ + +
+

Unique key for the listener.

+
+ + + +
+
+ Type +
+
+ +goog.events.Key + + +
+
+ + + + +
+ + + +
+

set

+ + +
Stability: experimental
+ + + + +
+
+ + +
+

Sets a value.

+
+ + + + + + + +
Parameters:
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
NameTypeDescription
key + + +string + + + +

Key name.

value + + +* + + + +

Value.

+ + + +
+ + + + + + + +
Inherited From:
+
+ + + + + + + + + + + + + +
Source:
+
  • object.js, line 399
+ + + + + + + +
+ + + + + + + + + +
+ + + +
+

setMap

+ + +
Stability: experimental
+ + + + +
+
+ + +
+

Remove the control from its current map and attach it to the new map. +Subclasses may set up event handlers to get notified about changes to +the map here.

+
+ + + + + + + +
Parameters:
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
NameTypeDescription
map + + +ol.Map + + + +

Map.

+ + + +
+ + + + + + + +
Inherited From:
+
+ + + + + + + + + + + + + +
Source:
+
  • control.js, line 89
+ + + + + + + +
+ + + + + + + + + +
+ + + +
+

setValues

+ + +
Stability: experimental
+ + + + +
+
+ + +
+

Sets a collection of key-value pairs.

+
+ + + + + + + +
Parameters:
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
NameTypeDescription
values + + +Object.<string, *> + + + +

Values.

+ + + +
+ + + + + + + +
Inherited From:
+
+ + + + + + + + + + + + + +
Source:
+
  • object.js, line 428
+ + + + + + + +
+ + + + + + + + + +
+ + + +
+

un

+ + +
Stability: experimental
+ + + + +
+
+ + +
+

Unlisten for a certain type of event.

+
+ + + + + + + +
Parameters:
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
NameTypeArgumentDescription
type + + +string +| + +Array.<string> + + + + + + + +

The event type or array of event types.

listener + + +function + + + + + + + +

The listener function.

this + + +Object + + + + + + <optional>
+ + + +

The object to use as this in listener.

+ + + +
+ + + + + + + +
Inherited From:
+
+ + + + + + + + + + + + + +
Source:
+
  • observable.js, line 83
+ + + + + + + +
+ + + + + + + + + +
+ + + +
+

unbind

+ + +
Stability: experimental
+ + + + +
+
+ + +
+

Removes a binding. Unbinding will set the unbound property to the current + value. The object will not be notified, as the value has not changed.

+
+ + + + + + + +
Parameters:
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
NameTypeDescription
key + + +string + + + +

Key name.

+ + + +
+ + + + + + + +
Inherited From:
+
+ + + + + + + + + + + + + +
Source:
+
  • object.js, line 442
+ + + + + + + +
+ + + + + + + + + +
+ + + +
+

unbindAll

+ + +
Stability: experimental
+ + + + +
+
+ + +
+

Removes all bindings.

+
+ + + + + + + + + +
+ + + + + + + +
Inherited From:
+
+ + + + + + + + + + + + + +
Source:
+
  • object.js, line 466
+ + + + + + + +
+ + + + + + + + + +
+ + + +
+

unByKey

+ + +
Stability: experimental
+ + + + +
+
+ + +
+

Removes an event listener using the key returned by on() or once().

+
+ + + + + + + +
Parameters:
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
NameTypeDescription
key + + +goog.events.Key + + + +

Key.

+ + + +
+ + + + + + + +
Inherited From:
+
+ + + + + + + + + + + + + +
Source:
+
  • observable.js, line 93
+ + + + + + + +
+ + + + + + + + + +
+ +
+ + + + + +
+ +
+ + + + +
+ + + +
+ + + + + + \ No newline at end of file diff --git a/float-no-zero/apidoc/ol.control.Control.html b/float-no-zero/apidoc/ol.control.Control.html new file mode 100644 index 0000000000..13af3e770d --- /dev/null +++ b/float-no-zero/apidoc/ol.control.Control.html @@ -0,0 +1,2284 @@ + + + + + OpenLayers 3 API Documentation - Class: ol.control.Control + + + + + + + + + + + + + + + + +
+ + + + +
+ +
+

+ ol.control. + + ol.control.Control +

+ +
+ +
+
+ + + + +
+

new Control

+ + +
Stability: experimental
+ + + + +
+
+ + +
+

Something to be painted over the map to provide a means for interaction +(buttons) or to show annotations (status bars).

+
+ + + + + + + +
Parameters:
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
NameTypeDescription
options + + +olx.control.ControlOptions + + + +

Control options.

+ + + +
+ + + + + + + + + + + + + + + + + + + +
Source:
+
  • control.js, line 21
+ + + + + + + +
+ + + + + + + + + +
+ + +
+ + +

Extends

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

Methods

+ +
+ +
+

bindTo

+ + +
Stability: experimental
+ + + + +
+
+ + +
+

The bindTo method allows you to set up a two-way binding between a +source and target object. The method returns an +ol.ObjectAccessor with a transform method that lets you transform +values on the way from the source to the target and on the way back.

+

For example, if you had two map views (sourceView and targetView) +and you wanted the target view to have double the resolution of the +source view, you could transform the resolution on the way to and +from the target with the following:

+
sourceView.bindTo('resolution', targetView)
+  .transform(
+    function(sourceResolution) {
+      // from sourceView.resolution to targetView.resolution
+      return 2 * sourceResolution;
+    },
+    function(targetResolution) {
+      // from targetView.resolution to sourceView.resolution
+      return targetResolution / 2;
+    }
+  );
+
+ + + + + + + +
Parameters:
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
NameTypeArgumentDescription
key + + +string + + + + + + + +

Key name.

target + + +ol.Object + + + + + + + +

Target.

targetKey + + +string + + + + + + <optional>
+ + + +

Target key.

+ + + +
+ + + + + + + +
Inherited From:
+
+ + + + + + + + + + + + + +
Source:
+
  • object.js, line 232
+ + + + + + + +
+ + + + + + + +
Returns:
+ + + + +
+
+ Type +
+
+ +ol.ObjectAccessor + + +
+
+ + + + +
+ + + +
+

dispatchChangeEvent

+ + +
Stability: experimental
+ + + + +
+
+ + + + + + + + + + +
+ + + + + + + +
Inherited From:
+
+ + + + + + + + + + + + + +
Source:
+
  • observable.js, line 35
+ + + + + + + +
+ + + + + + + + + +
+ + + +
+

get

+ + +
Stability: experimental
+ + + + +
+
+ + +
+

Gets a value.

+
+ + + + + + + +
Parameters:
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
NameTypeDescription
key + + +string + + + +

Key name.

+ + + +
+ + + + + + + +
Inherited From:
+
+ + + + + + + + + + + + + +
Source:
+
  • object.js, line 289
+ + + + + + + +
+ + + + + + + +
Returns:
+ + +
+

Value.

+
+ + + +
+
+ Type +
+
+ +* + + +
+
+ + + + +
+ + + +
+

getMap

+ + +
Stability: experimental
+ + + + +
+
+ + +
+

Get the map associated with this control.

+
+ + + + + + + + + +
+ + + + + + + + + + + + + + + + + + + +
Source:
+
  • control.js, line 68
+ + + + + + + +
+ + + + + + + +
Returns:
+ + +
+

Map.

+
+ + + +
+
+ Type +
+
+ +ol.Map + + +
+
+ + + + +
+ + + +
+

getProperties

+ + +
Stability: experimental
+ + + + +
+
+ + +
+

Get an object of all property names and values.

+
+ + + + + + + + + +
+ + + + + + + +
Inherited From:
+
+ + + + + + + + + + + + + +
Source:
+
  • object.js, line 348
+ + + + + + + +
+ + + + + + + +
Returns:
+ + +
+

Object.

+
+ + + +
+
+ Type +
+
+ +Object.<string, *> + + +
+
+ + + + +
+ + + +
+

notify

+ + +
Stability: experimental
+ + + + +
+
+ + +
+

Notify all observers of a change on this property. This notifies both +objects that are bound to the object's property as well as the object +that it is bound to.

+
+ + + + + + + +
Parameters:
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
NameTypeDescription
key + + +string + + + +

Key name.

+ + + +
+ + + + + + + +
Inherited From:
+
+ + + + + + + + + + + + + +
Source:
+
  • object.js, line 368
+ + + + + + + +
+ + + + + + + + + +
+ + + +
+

on

+ + +
Stability: experimental
+ + + + +
+
+ + +
+

Listen for a certain type of event.

+
+ + + + + + + +
Parameters:
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
NameTypeArgumentDescription
type + + +string +| + +Array.<string> + + + + + + + +

The event type or array of event types.

listener + + +function + + + + + + + +

The listener function.

this + + +Object + + + + + + <optional>
+ + + +

The object to use as this in listener.

+ + + +
+ + + + + + + +
Inherited From:
+
+ + + + + + + + + + + + + +
Source:
+
  • observable.js, line 58
+ + + + + + + +
+ + + + + + + +
Returns:
+ + +
+

Unique key for the listener.

+
+ + + +
+
+ Type +
+
+ +goog.events.Key + + +
+
+ + + + +
+ + + +
+

once

+ + +
Stability: experimental
+ + + + +
+
+ + +
+

Listen once for a certain type of event.

+
+ + + + + + + +
Parameters:
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
NameTypeArgumentDescription
type + + +string +| + +Array.<string> + + + + + + + +

The event type or array of event types.

listener + + +function + + + + + + + +

The listener function.

this + + +Object + + + + + + <optional>
+ + + +

The object to use as this in listener.

+ + + +
+ + + + + + + +
Inherited From:
+
+ + + + + + + + + + + + + +
Source:
+
  • observable.js, line 71
+ + + + + + + +
+ + + + + + + +
Returns:
+ + +
+

Unique key for the listener.

+
+ + + +
+
+ Type +
+
+ +goog.events.Key + + +
+
+ + + + +
+ + + +
+

set

+ + +
Stability: experimental
+ + + + +
+
+ + +
+

Sets a value.

+
+ + + + + + + +
Parameters:
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
NameTypeDescription
key + + +string + + + +

Key name.

value + + +* + + + +

Value.

+ + + +
+ + + + + + + +
Inherited From:
+
+ + + + + + + + + + + + + +
Source:
+
  • object.js, line 399
+ + + + + + + +
+ + + + + + + + + +
+ + + +
+

setMap

+ + +
Stability: experimental
+ + + + +
+
+ + +
+

Remove the control from its current map and attach it to the new map. +Subclasses may set up event handlers to get notified about changes to +the map here.

+
+ + + + + + + +
Parameters:
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
NameTypeDescription
map + + +ol.Map + + + +

Map.

+ + + +
+ + + + + + + + + + + + + + + + + + + +
Source:
+
  • control.js, line 89
+ + + + + + + +
+ + + + + + + + + +
+ + + +
+

setValues

+ + +
Stability: experimental
+ + + + +
+
+ + +
+

Sets a collection of key-value pairs.

+
+ + + + + + + +
Parameters:
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
NameTypeDescription
values + + +Object.<string, *> + + + +

Values.

+ + + +
+ + + + + + + +
Inherited From:
+
+ + + + + + + + + + + + + +
Source:
+
  • object.js, line 428
+ + + + + + + +
+ + + + + + + + + +
+ + + +
+

un

+ + +
Stability: experimental
+ + + + +
+
+ + +
+

Unlisten for a certain type of event.

+
+ + + + + + + +
Parameters:
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
NameTypeArgumentDescription
type + + +string +| + +Array.<string> + + + + + + + +

The event type or array of event types.

listener + + +function + + + + + + + +

The listener function.

this + + +Object + + + + + + <optional>
+ + + +

The object to use as this in listener.

+ + + +
+ + + + + + + +
Inherited From:
+
+ + + + + + + + + + + + + +
Source:
+
  • observable.js, line 83
+ + + + + + + +
+ + + + + + + + + +
+ + + +
+

unbind

+ + +
Stability: experimental
+ + + + +
+
+ + +
+

Removes a binding. Unbinding will set the unbound property to the current + value. The object will not be notified, as the value has not changed.

+
+ + + + + + + +
Parameters:
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
NameTypeDescription
key + + +string + + + +

Key name.

+ + + +
+ + + + + + + +
Inherited From:
+
+ + + + + + + + + + + + + +
Source:
+
  • object.js, line 442
+ + + + + + + +
+ + + + + + + + + +
+ + + +
+

unbindAll

+ + +
Stability: experimental
+ + + + +
+
+ + +
+

Removes all bindings.

+
+ + + + + + + + + +
+ + + + + + + +
Inherited From:
+
+ + + + + + + + + + + + + +
Source:
+
  • object.js, line 466
+ + + + + + + +
+ + + + + + + + + +
+ + + +
+

unByKey

+ + +
Stability: experimental
+ + + + +
+
+ + +
+

Removes an event listener using the key returned by on() or once().

+
+ + + + + + + +
Parameters:
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
NameTypeDescription
key + + +goog.events.Key + + + +

Key.

+ + + +
+ + + + + + + +
Inherited From:
+
+ + + + + + + + + + + + + +
Source:
+
  • observable.js, line 93
+ + + + + + + +
+ + + + + + + + + +
+ +
+ + + + + +
+ +
+ + + + +
+ + + +
+ + + + + + \ No newline at end of file diff --git a/float-no-zero/apidoc/ol.control.FullScreen.html b/float-no-zero/apidoc/ol.control.FullScreen.html new file mode 100644 index 0000000000..0c78b0e0f9 --- /dev/null +++ b/float-no-zero/apidoc/ol.control.FullScreen.html @@ -0,0 +1,2306 @@ + + + + + OpenLayers 3 API Documentation - Class: ol.control.FullScreen + + + + + + + + + + + + + + + + +
+ + + + +
+ +
+

+ ol.control. + + ol.control.FullScreen +

+ +
+ +
+
+ + + + +
+

new FullScreen

+ + +
Stability: experimental
+ + + + +
+
+ + +
+

Provides a button that when clicked fills up the full screen with the map. +When in full screen mode, a close button is shown to exit full screen mode. +The Fullscreen API is used to +toggle the map in full screen mode.

+
+ + + + + + + +
Parameters:
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
NameTypeArgumentDescription
options + + +olx.control.FullScreenOptions + + + + + + <optional>
+ + + +

Options.

+ + + +
+ + + + + + + + + + + + + + + + + + + +
Source:
+
  • fullscreencontrol.js, line 28
+ + + + + + + +
+ + + + + + + + + +
+ + +
+ + +

Extends

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

Methods

+ +
+ +
+

bindTo

+ + +
Stability: experimental
+ + + + +
+
+ + +
+

The bindTo method allows you to set up a two-way binding between a +source and target object. The method returns an +ol.ObjectAccessor with a transform method that lets you transform +values on the way from the source to the target and on the way back.

+

For example, if you had two map views (sourceView and targetView) +and you wanted the target view to have double the resolution of the +source view, you could transform the resolution on the way to and +from the target with the following:

+
sourceView.bindTo('resolution', targetView)
+  .transform(
+    function(sourceResolution) {
+      // from sourceView.resolution to targetView.resolution
+      return 2 * sourceResolution;
+    },
+    function(targetResolution) {
+      // from targetView.resolution to sourceView.resolution
+      return targetResolution / 2;
+    }
+  );
+
+ + + + + + + +
Parameters:
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
NameTypeArgumentDescription
key + + +string + + + + + + + +

Key name.

target + + +ol.Object + + + + + + + +

Target.

targetKey + + +string + + + + + + <optional>
+ + + +

Target key.

+ + + +
+ + + + + + + +
Inherited From:
+
+ + + + + + + + + + + + + +
Source:
+
  • object.js, line 232
+ + + + + + + +
+ + + + + + + +
Returns:
+ + + + +
+
+ Type +
+
+ +ol.ObjectAccessor + + +
+
+ + + + +
+ + + +
+

dispatchChangeEvent

+ + +
Stability: experimental
+ + + + +
+
+ + + + + + + + + + +
+ + + + + + + +
Inherited From:
+
+ + + + + + + + + + + + + +
Source:
+
  • observable.js, line 35
+ + + + + + + +
+ + + + + + + + + +
+ + + +
+

get

+ + +
Stability: experimental
+ + + + +
+
+ + +
+

Gets a value.

+
+ + + + + + + +
Parameters:
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
NameTypeDescription
key + + +string + + + +

Key name.

+ + + +
+ + + + + + + +
Inherited From:
+
+ + + + + + + + + + + + + +
Source:
+
  • object.js, line 289
+ + + + + + + +
+ + + + + + + +
Returns:
+ + +
+

Value.

+
+ + + +
+
+ Type +
+
+ +* + + +
+
+ + + + +
+ + + +
+

getMap

+ + +
Stability: experimental
+ + + + +
+
+ + +
+

Get the map associated with this control.

+
+ + + + + + + + + +
+ + + + + + + +
Inherited From:
+
+ + + + + + + + + + + + + +
Source:
+
  • control.js, line 68
+ + + + + + + +
+ + + + + + + +
Returns:
+ + +
+

Map.

+
+ + + +
+
+ Type +
+
+ +ol.Map + + +
+
+ + + + +
+ + + +
+

getProperties

+ + +
Stability: experimental
+ + + + +
+
+ + +
+

Get an object of all property names and values.

+
+ + + + + + + + + +
+ + + + + + + +
Inherited From:
+
+ + + + + + + + + + + + + +
Source:
+
  • object.js, line 348
+ + + + + + + +
+ + + + + + + +
Returns:
+ + +
+

Object.

+
+ + + +
+
+ Type +
+
+ +Object.<string, *> + + +
+
+ + + + +
+ + + +
+

notify

+ + +
Stability: experimental
+ + + + +
+
+ + +
+

Notify all observers of a change on this property. This notifies both +objects that are bound to the object's property as well as the object +that it is bound to.

+
+ + + + + + + +
Parameters:
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
NameTypeDescription
key + + +string + + + +

Key name.

+ + + +
+ + + + + + + +
Inherited From:
+
+ + + + + + + + + + + + + +
Source:
+
  • object.js, line 368
+ + + + + + + +
+ + + + + + + + + +
+ + + +
+

on

+ + +
Stability: experimental
+ + + + +
+
+ + +
+

Listen for a certain type of event.

+
+ + + + + + + +
Parameters:
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
NameTypeArgumentDescription
type + + +string +| + +Array.<string> + + + + + + + +

The event type or array of event types.

listener + + +function + + + + + + + +

The listener function.

this + + +Object + + + + + + <optional>
+ + + +

The object to use as this in listener.

+ + + +
+ + + + + + + +
Inherited From:
+
+ + + + + + + + + + + + + +
Source:
+
  • observable.js, line 58
+ + + + + + + +
+ + + + + + + +
Returns:
+ + +
+

Unique key for the listener.

+
+ + + +
+
+ Type +
+
+ +goog.events.Key + + +
+
+ + + + +
+ + + +
+

once

+ + +
Stability: experimental
+ + + + +
+
+ + +
+

Listen once for a certain type of event.

+
+ + + + + + + +
Parameters:
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
NameTypeArgumentDescription
type + + +string +| + +Array.<string> + + + + + + + +

The event type or array of event types.

listener + + +function + + + + + + + +

The listener function.

this + + +Object + + + + + + <optional>
+ + + +

The object to use as this in listener.

+ + + +
+ + + + + + + +
Inherited From:
+
+ + + + + + + + + + + + + +
Source:
+
  • observable.js, line 71
+ + + + + + + +
+ + + + + + + +
Returns:
+ + +
+

Unique key for the listener.

+
+ + + +
+
+ Type +
+
+ +goog.events.Key + + +
+
+ + + + +
+ + + +
+

set

+ + +
Stability: experimental
+ + + + +
+
+ + +
+

Sets a value.

+
+ + + + + + + +
Parameters:
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
NameTypeDescription
key + + +string + + + +

Key name.

value + + +* + + + +

Value.

+ + + +
+ + + + + + + +
Inherited From:
+
+ + + + + + + + + + + + + +
Source:
+
  • object.js, line 399
+ + + + + + + +
+ + + + + + + + + +
+ + + +
+

setMap

+ + +
Stability: experimental
+ + + + +
+
+ + +
+

Remove the control from its current map and attach it to the new map. +Subclasses may set up event handlers to get notified about changes to +the map here.

+
+ + + + + + + +
Parameters:
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
NameTypeDescription
map + + +ol.Map + + + +

Map.

+ + + +
+ + + + + + + +
Inherited From:
+
+ + + + + + + + + + + + + +
Source:
+
  • control.js, line 89
+ + + + + + + +
+ + + + + + + + + +
+ + + +
+

setValues

+ + +
Stability: experimental
+ + + + +
+
+ + +
+

Sets a collection of key-value pairs.

+
+ + + + + + + +
Parameters:
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
NameTypeDescription
values + + +Object.<string, *> + + + +

Values.

+ + + +
+ + + + + + + +
Inherited From:
+
+ + + + + + + + + + + + + +
Source:
+
  • object.js, line 428
+ + + + + + + +
+ + + + + + + + + +
+ + + +
+

un

+ + +
Stability: experimental
+ + + + +
+
+ + +
+

Unlisten for a certain type of event.

+
+ + + + + + + +
Parameters:
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
NameTypeArgumentDescription
type + + +string +| + +Array.<string> + + + + + + + +

The event type or array of event types.

listener + + +function + + + + + + + +

The listener function.

this + + +Object + + + + + + <optional>
+ + + +

The object to use as this in listener.

+ + + +
+ + + + + + + +
Inherited From:
+
+ + + + + + + + + + + + + +
Source:
+
  • observable.js, line 83
+ + + + + + + +
+ + + + + + + + + +
+ + + +
+

unbind

+ + +
Stability: experimental
+ + + + +
+
+ + +
+

Removes a binding. Unbinding will set the unbound property to the current + value. The object will not be notified, as the value has not changed.

+
+ + + + + + + +
Parameters:
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
NameTypeDescription
key + + +string + + + +

Key name.

+ + + +
+ + + + + + + +
Inherited From:
+
+ + + + + + + + + + + + + +
Source:
+
  • object.js, line 442
+ + + + + + + +
+ + + + + + + + + +
+ + + +
+

unbindAll

+ + +
Stability: experimental
+ + + + +
+
+ + +
+

Removes all bindings.

+
+ + + + + + + + + +
+ + + + + + + +
Inherited From:
+
+ + + + + + + + + + + + + +
Source:
+
  • object.js, line 466
+ + + + + + + +
+ + + + + + + + + +
+ + + +
+

unByKey

+ + +
Stability: experimental
+ + + + +
+
+ + +
+

Removes an event listener using the key returned by on() or once().

+
+ + + + + + + +
Parameters:
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
NameTypeDescription
key + + +goog.events.Key + + + +

Key.

+ + + +
+ + + + + + + +
Inherited From:
+
+ + + + + + + + + + + + + +
Source:
+
  • observable.js, line 93
+ + + + + + + +
+ + + + + + + + + +
+ +
+ + + + + +
+ +
+ + + + +
+ + + +
+ + + + + + \ No newline at end of file diff --git a/float-no-zero/apidoc/ol.control.Logo.html b/float-no-zero/apidoc/ol.control.Logo.html new file mode 100644 index 0000000000..cbab325540 --- /dev/null +++ b/float-no-zero/apidoc/ol.control.Logo.html @@ -0,0 +1,2306 @@ + + + + + OpenLayers 3 API Documentation - Class: ol.control.Logo + + + + + + + + + + + + + + + + +
+ + + + +
+ +
+

+ ol.control. + + ol.control.Logo +

+ +
+ +
+
+ + + + +
+ + + +
Stability: experimental
+ + + + +
+
+ + +
+

Shows a logo for all the layer sources in the map that have a logo +associated with them, such as Bing. This control is part of a default map. +By default it will show in the bottom-left portion of the map, but it can +be styled by using a css selector for .ol-logo.

+
+ + + + + + + +
Parameters:
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
NameTypeArgumentDescription
options + + +olx.control.LogoOptions + + + + + + <optional>
+ + + +

Logo options.

+ + + +
+ + + + + + + + + + + + + + + + + + + +
Source:
+
  • logocontrol.js, line 23
+ + + + + + + +
+ + + + + + + + + +
+ + +
+ + +

Extends

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

Methods

+ +
+ +
+

bindTo

+ + +
Stability: experimental
+ + + + +
+
+ + +
+

The bindTo method allows you to set up a two-way binding between a +source and target object. The method returns an +ol.ObjectAccessor with a transform method that lets you transform +values on the way from the source to the target and on the way back.

+

For example, if you had two map views (sourceView and targetView) +and you wanted the target view to have double the resolution of the +source view, you could transform the resolution on the way to and +from the target with the following:

+
sourceView.bindTo('resolution', targetView)
+  .transform(
+    function(sourceResolution) {
+      // from sourceView.resolution to targetView.resolution
+      return 2 * sourceResolution;
+    },
+    function(targetResolution) {
+      // from targetView.resolution to sourceView.resolution
+      return targetResolution / 2;
+    }
+  );
+
+ + + + + + + +
Parameters:
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
NameTypeArgumentDescription
key + + +string + + + + + + + +

Key name.

target + + +ol.Object + + + + + + + +

Target.

targetKey + + +string + + + + + + <optional>
+ + + +

Target key.

+ + + +
+ + + + + + + +
Inherited From:
+
+ + + + + + + + + + + + + +
Source:
+
  • object.js, line 232
+ + + + + + + +
+ + + + + + + +
Returns:
+ + + + +
+
+ Type +
+
+ +ol.ObjectAccessor + + +
+
+ + + + +
+ + + +
+

dispatchChangeEvent

+ + +
Stability: experimental
+ + + + +
+
+ + + + + + + + + + +
+ + + + + + + +
Inherited From:
+
+ + + + + + + + + + + + + +
Source:
+
  • observable.js, line 35
+ + + + + + + +
+ + + + + + + + + +
+ + + +
+

get

+ + +
Stability: experimental
+ + + + +
+
+ + +
+

Gets a value.

+
+ + + + + + + +
Parameters:
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
NameTypeDescription
key + + +string + + + +

Key name.

+ + + +
+ + + + + + + +
Inherited From:
+
+ + + + + + + + + + + + + +
Source:
+
  • object.js, line 289
+ + + + + + + +
+ + + + + + + +
Returns:
+ + +
+

Value.

+
+ + + +
+
+ Type +
+
+ +* + + +
+
+ + + + +
+ + + +
+

getMap

+ + +
Stability: experimental
+ + + + +
+
+ + +
+

Get the map associated with this control.

+
+ + + + + + + + + +
+ + + + + + + +
Inherited From:
+
+ + + + + + + + + + + + + +
Source:
+
  • control.js, line 68
+ + + + + + + +
+ + + + + + + +
Returns:
+ + +
+

Map.

+
+ + + +
+
+ Type +
+
+ +ol.Map + + +
+
+ + + + +
+ + + +
+

getProperties

+ + +
Stability: experimental
+ + + + +
+
+ + +
+

Get an object of all property names and values.

+
+ + + + + + + + + +
+ + + + + + + +
Inherited From:
+
+ + + + + + + + + + + + + +
Source:
+
  • object.js, line 348
+ + + + + + + +
+ + + + + + + +
Returns:
+ + +
+

Object.

+
+ + + +
+
+ Type +
+
+ +Object.<string, *> + + +
+
+ + + + +
+ + + +
+

notify

+ + +
Stability: experimental
+ + + + +
+
+ + +
+

Notify all observers of a change on this property. This notifies both +objects that are bound to the object's property as well as the object +that it is bound to.

+
+ + + + + + + +
Parameters:
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
NameTypeDescription
key + + +string + + + +

Key name.

+ + + +
+ + + + + + + +
Inherited From:
+
+ + + + + + + + + + + + + +
Source:
+
  • object.js, line 368
+ + + + + + + +
+ + + + + + + + + +
+ + + +
+

on

+ + +
Stability: experimental
+ + + + +
+
+ + +
+

Listen for a certain type of event.

+
+ + + + + + + +
Parameters:
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
NameTypeArgumentDescription
type + + +string +| + +Array.<string> + + + + + + + +

The event type or array of event types.

listener + + +function + + + + + + + +

The listener function.

this + + +Object + + + + + + <optional>
+ + + +

The object to use as this in listener.

+ + + +
+ + + + + + + +
Inherited From:
+
+ + + + + + + + + + + + + +
Source:
+
  • observable.js, line 58
+ + + + + + + +
+ + + + + + + +
Returns:
+ + +
+

Unique key for the listener.

+
+ + + +
+
+ Type +
+
+ +goog.events.Key + + +
+
+ + + + +
+ + + +
+

once

+ + +
Stability: experimental
+ + + + +
+
+ + +
+

Listen once for a certain type of event.

+
+ + + + + + + +
Parameters:
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
NameTypeArgumentDescription
type + + +string +| + +Array.<string> + + + + + + + +

The event type or array of event types.

listener + + +function + + + + + + + +

The listener function.

this + + +Object + + + + + + <optional>
+ + + +

The object to use as this in listener.

+ + + +
+ + + + + + + +
Inherited From:
+
+ + + + + + + + + + + + + +
Source:
+
  • observable.js, line 71
+ + + + + + + +
+ + + + + + + +
Returns:
+ + +
+

Unique key for the listener.

+
+ + + +
+
+ Type +
+
+ +goog.events.Key + + +
+
+ + + + +
+ + + +
+

set

+ + +
Stability: experimental
+ + + + +
+
+ + +
+

Sets a value.

+
+ + + + + + + +
Parameters:
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
NameTypeDescription
key + + +string + + + +

Key name.

value + + +* + + + +

Value.

+ + + +
+ + + + + + + +
Inherited From:
+
+ + + + + + + + + + + + + +
Source:
+
  • object.js, line 399
+ + + + + + + +
+ + + + + + + + + +
+ + + +
+

setMap

+ + +
Stability: experimental
+ + + + +
+
+ + +
+

Remove the control from its current map and attach it to the new map. +Subclasses may set up event handlers to get notified about changes to +the map here.

+
+ + + + + + + +
Parameters:
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
NameTypeDescription
map + + +ol.Map + + + +

Map.

+ + + +
+ + + + + + + +
Inherited From:
+
+ + + + + + + + + + + + + +
Source:
+
  • control.js, line 89
+ + + + + + + +
+ + + + + + + + + +
+ + + +
+

setValues

+ + +
Stability: experimental
+ + + + +
+
+ + +
+

Sets a collection of key-value pairs.

+
+ + + + + + + +
Parameters:
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
NameTypeDescription
values + + +Object.<string, *> + + + +

Values.

+ + + +
+ + + + + + + +
Inherited From:
+
+ + + + + + + + + + + + + +
Source:
+
  • object.js, line 428
+ + + + + + + +
+ + + + + + + + + +
+ + + +
+

un

+ + +
Stability: experimental
+ + + + +
+
+ + +
+

Unlisten for a certain type of event.

+
+ + + + + + + +
Parameters:
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
NameTypeArgumentDescription
type + + +string +| + +Array.<string> + + + + + + + +

The event type or array of event types.

listener + + +function + + + + + + + +

The listener function.

this + + +Object + + + + + + <optional>
+ + + +

The object to use as this in listener.

+ + + +
+ + + + + + + +
Inherited From:
+
+ + + + + + + + + + + + + +
Source:
+
  • observable.js, line 83
+ + + + + + + +
+ + + + + + + + + +
+ + + +
+

unbind

+ + +
Stability: experimental
+ + + + +
+
+ + +
+

Removes a binding. Unbinding will set the unbound property to the current + value. The object will not be notified, as the value has not changed.

+
+ + + + + + + +
Parameters:
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
NameTypeDescription
key + + +string + + + +

Key name.

+ + + +
+ + + + + + + +
Inherited From:
+
+ + + + + + + + + + + + + +
Source:
+
  • object.js, line 442
+ + + + + + + +
+ + + + + + + + + +
+ + + +
+

unbindAll

+ + +
Stability: experimental
+ + + + +
+
+ + +
+

Removes all bindings.

+
+ + + + + + + + + +
+ + + + + + + +
Inherited From:
+
+ + + + + + + + + + + + + +
Source:
+
  • object.js, line 466
+ + + + + + + +
+ + + + + + + + + +
+ + + +
+

unByKey

+ + +
Stability: experimental
+ + + + +
+
+ + +
+

Removes an event listener using the key returned by on() or once().

+
+ + + + + + + +
Parameters:
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
NameTypeDescription
key + + +goog.events.Key + + + +

Key.

+ + + +
+ + + + + + + +
Inherited From:
+
+ + + + + + + + + + + + + +
Source:
+
  • observable.js, line 93
+ + + + + + + +
+ + + + + + + + + +
+ +
+ + + + + +
+ +
+ + + + +
+ + + +
+ + + + + + \ No newline at end of file diff --git a/float-no-zero/apidoc/ol.control.MousePosition.html b/float-no-zero/apidoc/ol.control.MousePosition.html new file mode 100644 index 0000000000..deb6cbf75f --- /dev/null +++ b/float-no-zero/apidoc/ol.control.MousePosition.html @@ -0,0 +1,2764 @@ + + + + + OpenLayers 3 API Documentation - Class: ol.control.MousePosition + + + + + + + + + + + + + + + + +
+ + + + +
+ +
+

+ ol.control. + + ol.control.MousePosition +

+ +
+ +
+
+ + + + +
+

new MousePosition

+ + +
Stability: experimental
+ + + + +
+
+ + +
+

Create a new control to show the position of the mouse in the map's +projection (or any other supplied projection). By default the control is +shown in the top right corner of the map but this can be changed by using +a css selector .ol-mouse-position.

+
+ + + + + + + +
Parameters:
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
NameTypeArgumentDescription
options + + +olx.control.MousePositionOptions + + + + + + <optional>
+ + + +

Mouse position + options.

+ + + +
+ + + + + + + + + + + + + + + + + + + +
Source:
+
  • mousepositioncontrol.js, line 47
+ + + + + + + +
+ + + + + + + + + +
+ + +
+ + +

Extends

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

Observable Properties

+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
NameTypeSettableEventDescription
projection + + +ol.proj.Projection + + + + yeschange:projectionthe projection to report + mouse position in
coordinateFormat + + +ol.CoordinateFormatType + + + + yeschange:coordinateformatthe format to + render the current position in
+
+ + + + + + +

Methods

+ +
+ +
+

bindTo

+ + +
Stability: experimental
+ + + + +
+
+ + +
+

The bindTo method allows you to set up a two-way binding between a +source and target object. The method returns an +ol.ObjectAccessor with a transform method that lets you transform +values on the way from the source to the target and on the way back.

+

For example, if you had two map views (sourceView and targetView) +and you wanted the target view to have double the resolution of the +source view, you could transform the resolution on the way to and +from the target with the following:

+
sourceView.bindTo('resolution', targetView)
+  .transform(
+    function(sourceResolution) {
+      // from sourceView.resolution to targetView.resolution
+      return 2 * sourceResolution;
+    },
+    function(targetResolution) {
+      // from targetView.resolution to sourceView.resolution
+      return targetResolution / 2;
+    }
+  );
+
+ + + + + + + +
Parameters:
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
NameTypeArgumentDescription
key + + +string + + + + + + + +

Key name.

target + + +ol.Object + + + + + + + +

Target.

targetKey + + +string + + + + + + <optional>
+ + + +

Target key.

+ + + +
+ + + + + + + +
Inherited From:
+
+ + + + + + + + + + + + + +
Source:
+
  • object.js, line 232
+ + + + + + + +
+ + + + + + + +
Returns:
+ + + + +
+
+ Type +
+
+ +ol.ObjectAccessor + + +
+
+ + + + +
+ + + +
+

dispatchChangeEvent

+ + +
Stability: experimental
+ + + + +
+
+ + + + + + + + + + +
+ + + + + + + +
Inherited From:
+
+ + + + + + + + + + + + + +
Source:
+
  • observable.js, line 35
+ + + + + + + +
+ + + + + + + + + +
+ + + +
+

get

+ + +
Stability: experimental
+ + + + +
+
+ + +
+

Gets a value.

+
+ + + + + + + +
Parameters:
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
NameTypeDescription
key + + +string + + + +

Key name.

+ + + +
+ + + + + + + +
Inherited From:
+
+ + + + + + + + + + + + + +
Source:
+
  • object.js, line 289
+ + + + + + + +
+ + + + + + + +
Returns:
+ + +
+

Value.

+
+ + + +
+
+ Type +
+
+ +* + + +
+
+ + + + +
+ + + +
+

getCoordinateFormat

+ + +
Stability: experimental
+ + + + +
+
+ + + + + + + + + + +
+ + + + + + + + + + + + + + + + + + + +
Source:
+
  • mousepositioncontrol.js, line 138
+ + + + + + + +
+ + + + + + + +
Returns:
+ + +
+

projection.

+
+ + + +
+
+ Type +
+
+ +ol.CoordinateFormatType +| + +undefined + + +
+
+ + + + +
+ + + +
+

getMap

+ + +
Stability: experimental
+ + + + +
+
+ + +
+

Get the map associated with this control.

+
+ + + + + + + + + +
+ + + + + + + +
Inherited From:
+
+ + + + + + + + + + + + + +
Source:
+
  • control.js, line 68
+ + + + + + + +
+ + + + + + + +
Returns:
+ + +
+

Map.

+
+ + + +
+
+ Type +
+
+ +ol.Map + + +
+
+ + + + +
+ + + +
+

getProjection

+ + +
Stability: experimental
+ + + + +
+
+ + + + + + + + + + +
+ + + + + + + + + + + + + + + + + + + +
Source:
+
  • mousepositioncontrol.js, line 152
+ + + + + + + +
+ + + + + + + +
Returns:
+ + +
+

projection.

+
+ + + +
+
+ Type +
+
+ +ol.proj.Projection +| + +undefined + + +
+
+ + + + +
+ + + +
+

getProperties

+ + +
Stability: experimental
+ + + + +
+
+ + +
+

Get an object of all property names and values.

+
+ + + + + + + + + +
+ + + + + + + +
Inherited From:
+
+ + + + + + + + + + + + + +
Source:
+
  • object.js, line 348
+ + + + + + + +
+ + + + + + + +
Returns:
+ + +
+

Object.

+
+ + + +
+
+ Type +
+
+ +Object.<string, *> + + +
+
+ + + + +
+ + + +
+

notify

+ + +
Stability: experimental
+ + + + +
+
+ + +
+

Notify all observers of a change on this property. This notifies both +objects that are bound to the object's property as well as the object +that it is bound to.

+
+ + + + + + + +
Parameters:
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
NameTypeDescription
key + + +string + + + +

Key name.

+ + + +
+ + + + + + + +
Inherited From:
+
+ + + + + + + + + + + + + +
Source:
+
  • object.js, line 368
+ + + + + + + +
+ + + + + + + + + +
+ + + +
+

on

+ + +
Stability: experimental
+ + + + +
+
+ + +
+

Listen for a certain type of event.

+
+ + + + + + + +
Parameters:
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
NameTypeArgumentDescription
type + + +string +| + +Array.<string> + + + + + + + +

The event type or array of event types.

listener + + +function + + + + + + + +

The listener function.

this + + +Object + + + + + + <optional>
+ + + +

The object to use as this in listener.

+ + + +
+ + + + + + + +
Inherited From:
+
+ + + + + + + + + + + + + +
Source:
+
  • observable.js, line 58
+ + + + + + + +
+ + + + + + + +
Returns:
+ + +
+

Unique key for the listener.

+
+ + + +
+
+ Type +
+
+ +goog.events.Key + + +
+
+ + + + +
+ + + +
+

once

+ + +
Stability: experimental
+ + + + +
+
+ + +
+

Listen once for a certain type of event.

+
+ + + + + + + +
Parameters:
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
NameTypeArgumentDescription
type + + +string +| + +Array.<string> + + + + + + + +

The event type or array of event types.

listener + + +function + + + + + + + +

The listener function.

this + + +Object + + + + + + <optional>
+ + + +

The object to use as this in listener.

+ + + +
+ + + + + + + +
Inherited From:
+
+ + + + + + + + + + + + + +
Source:
+
  • observable.js, line 71
+ + + + + + + +
+ + + + + + + +
Returns:
+ + +
+

Unique key for the listener.

+
+ + + +
+
+ Type +
+
+ +goog.events.Key + + +
+
+ + + + +
+ + + +
+

set

+ + +
Stability: experimental
+ + + + +
+
+ + +
+

Sets a value.

+
+ + + + + + + +
Parameters:
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
NameTypeDescription
key + + +string + + + +

Key name.

value + + +* + + + +

Value.

+ + + +
+ + + + + + + +
Inherited From:
+
+ + + + + + + + + + + + + +
Source:
+
  • object.js, line 399
+ + + + + + + +
+ + + + + + + + + +
+ + + +
+

setCoordinateFormat

+ + +
Stability: experimental
+ + + + +
+
+ + + + + + + + +
Parameters:
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
NameTypeDescription
format + + +ol.CoordinateFormatType + + + +

Coordinate format.

+ + + +
+ + + + + + + + + + + + + + + + + + + +
Source:
+
  • mousepositioncontrol.js, line 206
+ + + + + + + +
+ + + + + + + + + +
+ + + +
+

setMap

+ + +
Stability: experimental
+ + + + +
+
+ + +
+

Remove the control from its current map and attach it to the new map. +Subclasses may set up event handlers to get notified about changes to +the map here.

+
+ + + + + + + +
Parameters:
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
NameTypeDescription
map + + +ol.Map + + + +

Map.

+ + + +
+ + + + + + + +
Inherited From:
+
+ + + + + + + + + + + + + +
Source:
+
  • control.js, line 89
+ + + + + + + +
+ + + + + + + + + +
+ + + +
+

setProjection

+ + +
Stability: experimental
+ + + + +
+
+ + + + + + + + +
Parameters:
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
NameTypeDescription
projection + + +ol.proj.Projection + + + +

Projection.

+ + + +
+ + + + + + + + + + + + + + + + + + + +
Source:
+
  • mousepositioncontrol.js, line 219
+ + + + + + + +
+ + + + + + + + + +
+ + + +
+

setValues

+ + +
Stability: experimental
+ + + + +
+
+ + +
+

Sets a collection of key-value pairs.

+
+ + + + + + + +
Parameters:
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
NameTypeDescription
values + + +Object.<string, *> + + + +

Values.

+ + + +
+ + + + + + + +
Inherited From:
+
+ + + + + + + + + + + + + +
Source:
+
  • object.js, line 428
+ + + + + + + +
+ + + + + + + + + +
+ + + +
+

un

+ + +
Stability: experimental
+ + + + +
+
+ + +
+

Unlisten for a certain type of event.

+
+ + + + + + + +
Parameters:
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
NameTypeArgumentDescription
type + + +string +| + +Array.<string> + + + + + + + +

The event type or array of event types.

listener + + +function + + + + + + + +

The listener function.

this + + +Object + + + + + + <optional>
+ + + +

The object to use as this in listener.

+ + + +
+ + + + + + + +
Inherited From:
+
+ + + + + + + + + + + + + +
Source:
+
  • observable.js, line 83
+ + + + + + + +
+ + + + + + + + + +
+ + + +
+

unbind

+ + +
Stability: experimental
+ + + + +
+
+ + +
+

Removes a binding. Unbinding will set the unbound property to the current + value. The object will not be notified, as the value has not changed.

+
+ + + + + + + +
Parameters:
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
NameTypeDescription
key + + +string + + + +

Key name.

+ + + +
+ + + + + + + +
Inherited From:
+
+ + + + + + + + + + + + + +
Source:
+
  • object.js, line 442
+ + + + + + + +
+ + + + + + + + + +
+ + + +
+

unbindAll

+ + +
Stability: experimental
+ + + + +
+
+ + +
+

Removes all bindings.

+
+ + + + + + + + + +
+ + + + + + + +
Inherited From:
+
+ + + + + + + + + + + + + +
Source:
+
  • object.js, line 466
+ + + + + + + +
+ + + + + + + + + +
+ + + +
+

unByKey

+ + +
Stability: experimental
+ + + + +
+
+ + +
+

Removes an event listener using the key returned by on() or once().

+
+ + + + + + + +
Parameters:
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
NameTypeDescription
key + + +goog.events.Key + + + +

Key.

+ + + +
+ + + + + + + +
Inherited From:
+
+ + + + + + + + + + + + + +
Source:
+
  • observable.js, line 93
+ + + + + + + +
+ + + + + + + + + +
+ +
+ + + + + +
+ +
+ + + + +
+ + + +
+ + + + + + \ No newline at end of file diff --git a/float-no-zero/apidoc/ol.control.ScaleLine.html b/float-no-zero/apidoc/ol.control.ScaleLine.html new file mode 100644 index 0000000000..5cbcdbdd6f --- /dev/null +++ b/float-no-zero/apidoc/ol.control.ScaleLine.html @@ -0,0 +1,2544 @@ + + + + + OpenLayers 3 API Documentation - Class: ol.control.ScaleLine + + + + + + + + + + + + + + + + +
+ + + + +
+ +
+

+ ol.control. + + ol.control.ScaleLine +

+ +
+ +
+
+ + + + +
+

new ScaleLine

+ + +
Stability: experimental
+ + + + +
+
+ + +
+

Create a control to help users estimate distances on a map. +By default it will show in the bottom left portion of the map, but it can +be changed by using a css selector for .ol-scale-line.

+
+ + + + + + + +
Parameters:
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
NameTypeArgumentDescription
options + + +olx.control.ScaleLineOptions + + + + + + <optional>
+ + + +

Scale line options.

+ + + +
+ + + + + + + + + + + + + + + + + + + +
Source:
+
  • scalelinecontrol.js, line 57
+ + + + + + + +
+ + + + + + + + + +
+ + +
+ + +

Extends

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

Observable Properties

+
+ + + + + + + + + + + + + + + + + + + + + + + + +
NameTypeSettableEventDescription
units + + +ol.control.ScaleLineUnits + + + + yeschange:unitsthe units to use in the + scale line
+
+ + + + + + +

Methods

+ +
+ +
+

bindTo

+ + +
Stability: experimental
+ + + + +
+
+ + +
+

The bindTo method allows you to set up a two-way binding between a +source and target object. The method returns an +ol.ObjectAccessor with a transform method that lets you transform +values on the way from the source to the target and on the way back.

+

For example, if you had two map views (sourceView and targetView) +and you wanted the target view to have double the resolution of the +source view, you could transform the resolution on the way to and +from the target with the following:

+
sourceView.bindTo('resolution', targetView)
+  .transform(
+    function(sourceResolution) {
+      // from sourceView.resolution to targetView.resolution
+      return 2 * sourceResolution;
+    },
+    function(targetResolution) {
+      // from targetView.resolution to sourceView.resolution
+      return targetResolution / 2;
+    }
+  );
+
+ + + + + + + +
Parameters:
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
NameTypeArgumentDescription
key + + +string + + + + + + + +

Key name.

target + + +ol.Object + + + + + + + +

Target.

targetKey + + +string + + + + + + <optional>
+ + + +

Target key.

+ + + +
+ + + + + + + +
Inherited From:
+
+ + + + + + + + + + + + + +
Source:
+
  • object.js, line 232
+ + + + + + + +
+ + + + + + + +
Returns:
+ + + + +
+
+ Type +
+
+ +ol.ObjectAccessor + + +
+
+ + + + +
+ + + +
+

dispatchChangeEvent

+ + +
Stability: experimental
+ + + + +
+
+ + + + + + + + + + +
+ + + + + + + +
Inherited From:
+
+ + + + + + + + + + + + + +
Source:
+
  • observable.js, line 35
+ + + + + + + +
+ + + + + + + + + +
+ + + +
+

get

+ + +
Stability: experimental
+ + + + +
+
+ + +
+

Gets a value.

+
+ + + + + + + +
Parameters:
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
NameTypeDescription
key + + +string + + + +

Key name.

+ + + +
+ + + + + + + +
Inherited From:
+
+ + + + + + + + + + + + + +
Source:
+
  • object.js, line 289
+ + + + + + + +
+ + + + + + + +
Returns:
+ + +
+

Value.

+
+ + + +
+
+ Type +
+
+ +* + + +
+
+ + + + +
+ + + +
+

getMap

+ + +
Stability: experimental
+ + + + +
+
+ + +
+

Get the map associated with this control.

+
+ + + + + + + + + +
+ + + + + + + +
Inherited From:
+
+ + + + + + + + + + + + + +
Source:
+
  • control.js, line 68
+ + + + + + + +
+ + + + + + + +
Returns:
+ + +
+

Map.

+
+ + + +
+
+ Type +
+
+ +ol.Map + + +
+
+ + + + +
+ + + +
+

getProperties

+ + +
Stability: experimental
+ + + + +
+
+ + +
+

Get an object of all property names and values.

+
+ + + + + + + + + +
+ + + + + + + +
Inherited From:
+
+ + + + + + + + + + + + + +
Source:
+
  • object.js, line 348
+ + + + + + + +
+ + + + + + + +
Returns:
+ + +
+

Object.

+
+ + + +
+
+ Type +
+
+ +Object.<string, *> + + +
+
+ + + + +
+ + + +
+

getUnits

+ + +
Stability: experimental
+ + + + +
+
+ + + + + + + + + + +
+ + + + + + + + + + + + + + + + + + + +
Source:
+
  • scalelinecontrol.js, line 144
+ + + + + + + +
+ + + + + + + +
Returns:
+ + +
+

units.

+
+ + + +
+
+ Type +
+
+ +ol.control.ScaleLineUnits +| + +undefined + + +
+
+ + + + +
+ + + +
+

notify

+ + +
Stability: experimental
+ + + + +
+
+ + +
+

Notify all observers of a change on this property. This notifies both +objects that are bound to the object's property as well as the object +that it is bound to.

+
+ + + + + + + +
Parameters:
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
NameTypeDescription
key + + +string + + + +

Key name.

+ + + +
+ + + + + + + +
Inherited From:
+
+ + + + + + + + + + + + + +
Source:
+
  • object.js, line 368
+ + + + + + + +
+ + + + + + + + + +
+ + + +
+

on

+ + +
Stability: experimental
+ + + + +
+
+ + +
+

Listen for a certain type of event.

+
+ + + + + + + +
Parameters:
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
NameTypeArgumentDescription
type + + +string +| + +Array.<string> + + + + + + + +

The event type or array of event types.

listener + + +function + + + + + + + +

The listener function.

this + + +Object + + + + + + <optional>
+ + + +

The object to use as this in listener.

+ + + +
+ + + + + + + +
Inherited From:
+
+ + + + + + + + + + + + + +
Source:
+
  • observable.js, line 58
+ + + + + + + +
+ + + + + + + +
Returns:
+ + +
+

Unique key for the listener.

+
+ + + +
+
+ Type +
+
+ +goog.events.Key + + +
+
+ + + + +
+ + + +
+

once

+ + +
Stability: experimental
+ + + + +
+
+ + +
+

Listen once for a certain type of event.

+
+ + + + + + + +
Parameters:
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
NameTypeArgumentDescription
type + + +string +| + +Array.<string> + + + + + + + +

The event type or array of event types.

listener + + +function + + + + + + + +

The listener function.

this + + +Object + + + + + + <optional>
+ + + +

The object to use as this in listener.

+ + + +
+ + + + + + + +
Inherited From:
+
+ + + + + + + + + + + + + +
Source:
+
  • observable.js, line 71
+ + + + + + + +
+ + + + + + + +
Returns:
+ + +
+

Unique key for the listener.

+
+ + + +
+
+ Type +
+
+ +goog.events.Key + + +
+
+ + + + +
+ + + +
+

set

+ + +
Stability: experimental
+ + + + +
+
+ + +
+

Sets a value.

+
+ + + + + + + +
Parameters:
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
NameTypeDescription
key + + +string + + + +

Key name.

value + + +* + + + +

Value.

+ + + +
+ + + + + + + +
Inherited From:
+
+ + + + + + + + + + + + + +
Source:
+
  • object.js, line 399
+ + + + + + + +
+ + + + + + + + + +
+ + + +
+

setMap

+ + +
Stability: experimental
+ + + + +
+
+ + +
+

Remove the control from its current map and attach it to the new map. +Subclasses may set up event handlers to get notified about changes to +the map here.

+
+ + + + + + + +
Parameters:
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
NameTypeDescription
map + + +ol.Map + + + +

Map.

+ + + +
+ + + + + + + +
Inherited From:
+
+ + + + + + + + + + + + + +
Source:
+
  • control.js, line 89
+ + + + + + + +
+ + + + + + + + + +
+ + + +
+

setUnits

+ + +
Stability: experimental
+ + + + +
+
+ + + + + + + + +
Parameters:
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
NameTypeDescription
units + + +ol.control.ScaleLineUnits + + + +

Units.

+ + + +
+ + + + + + + + + + + + + + + + + + + +
Source:
+
  • scalelinecontrol.js, line 180
+ + + + + + + +
+ + + + + + + + + +
+ + + +
+

setValues

+ + +
Stability: experimental
+ + + + +
+
+ + +
+

Sets a collection of key-value pairs.

+
+ + + + + + + +
Parameters:
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
NameTypeDescription
values + + +Object.<string, *> + + + +

Values.

+ + + +
+ + + + + + + +
Inherited From:
+
+ + + + + + + + + + + + + +
Source:
+
  • object.js, line 428
+ + + + + + + +
+ + + + + + + + + +
+ + + +
+

un

+ + +
Stability: experimental
+ + + + +
+
+ + +
+

Unlisten for a certain type of event.

+
+ + + + + + + +
Parameters:
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
NameTypeArgumentDescription
type + + +string +| + +Array.<string> + + + + + + + +

The event type or array of event types.

listener + + +function + + + + + + + +

The listener function.

this + + +Object + + + + + + <optional>
+ + + +

The object to use as this in listener.

+ + + +
+ + + + + + + +
Inherited From:
+
+ + + + + + + + + + + + + +
Source:
+
  • observable.js, line 83
+ + + + + + + +
+ + + + + + + + + +
+ + + +
+

unbind

+ + +
Stability: experimental
+ + + + +
+
+ + +
+

Removes a binding. Unbinding will set the unbound property to the current + value. The object will not be notified, as the value has not changed.

+
+ + + + + + + +
Parameters:
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
NameTypeDescription
key + + +string + + + +

Key name.

+ + + +
+ + + + + + + +
Inherited From:
+
+ + + + + + + + + + + + + +
Source:
+
  • object.js, line 442
+ + + + + + + +
+ + + + + + + + + +
+ + + +
+

unbindAll

+ + +
Stability: experimental
+ + + + +
+
+ + +
+

Removes all bindings.

+
+ + + + + + + + + +
+ + + + + + + +
Inherited From:
+
+ + + + + + + + + + + + + +
Source:
+
  • object.js, line 466
+ + + + + + + +
+ + + + + + + + + +
+ + + +
+

unByKey

+ + +
Stability: experimental
+ + + + +
+
+ + +
+

Removes an event listener using the key returned by on() or once().

+
+ + + + + + + +
Parameters:
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
NameTypeDescription
key + + +goog.events.Key + + + +

Key.

+ + + +
+ + + + + + + +
Inherited From:
+
+ + + + + + + + + + + + + +
Source:
+
  • observable.js, line 93
+ + + + + + + +
+ + + + + + + + + +
+ +
+ + + + + +
+ +
+ + + + +
+ + + +
+ + + + + + \ No newline at end of file diff --git a/float-no-zero/apidoc/ol.control.Zoom.html b/float-no-zero/apidoc/ol.control.Zoom.html new file mode 100644 index 0000000000..d9bb54b2a6 --- /dev/null +++ b/float-no-zero/apidoc/ol.control.Zoom.html @@ -0,0 +1,2305 @@ + + + + + OpenLayers 3 API Documentation - Class: ol.control.Zoom + + + + + + + + + + + + + + + + +
+ + + + +
+ +
+

+ ol.control. + + ol.control.Zoom +

+ +
+ +
+
+ + + + +
+

new Zoom

+ + +
Stability: experimental
+ + + + +
+
+ + +
+

Create a new control with 2 buttons, one for zoom in and one for zoom out. +This control is part of the default controls of a map. To style this control +use css selectors .ol-zoom-in and .ol-zoom-out.

+
+ + + + + + + +
Parameters:
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
NameTypeArgumentDescription
options + + +olx.control.ZoomOptions + + + + + + <optional>
+ + + +

Zoom options.

+ + + +
+ + + + + + + + + + + + + + + + + + + +
Source:
+
  • zoomcontrol.js, line 27
+ + + + + + + +
+ + + + + + + + + +
+ + +
+ + +

Extends

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

Methods

+ +
+ +
+

bindTo

+ + +
Stability: experimental
+ + + + +
+
+ + +
+

The bindTo method allows you to set up a two-way binding between a +source and target object. The method returns an +ol.ObjectAccessor with a transform method that lets you transform +values on the way from the source to the target and on the way back.

+

For example, if you had two map views (sourceView and targetView) +and you wanted the target view to have double the resolution of the +source view, you could transform the resolution on the way to and +from the target with the following:

+
sourceView.bindTo('resolution', targetView)
+  .transform(
+    function(sourceResolution) {
+      // from sourceView.resolution to targetView.resolution
+      return 2 * sourceResolution;
+    },
+    function(targetResolution) {
+      // from targetView.resolution to sourceView.resolution
+      return targetResolution / 2;
+    }
+  );
+
+ + + + + + + +
Parameters:
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
NameTypeArgumentDescription
key + + +string + + + + + + + +

Key name.

target + + +ol.Object + + + + + + + +

Target.

targetKey + + +string + + + + + + <optional>
+ + + +

Target key.

+ + + +
+ + + + + + + +
Inherited From:
+
+ + + + + + + + + + + + + +
Source:
+
  • object.js, line 232
+ + + + + + + +
+ + + + + + + +
Returns:
+ + + + +
+
+ Type +
+
+ +ol.ObjectAccessor + + +
+
+ + + + +
+ + + +
+

dispatchChangeEvent

+ + +
Stability: experimental
+ + + + +
+
+ + + + + + + + + + +
+ + + + + + + +
Inherited From:
+
+ + + + + + + + + + + + + +
Source:
+
  • observable.js, line 35
+ + + + + + + +
+ + + + + + + + + +
+ + + +
+

get

+ + +
Stability: experimental
+ + + + +
+
+ + +
+

Gets a value.

+
+ + + + + + + +
Parameters:
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
NameTypeDescription
key + + +string + + + +

Key name.

+ + + +
+ + + + + + + +
Inherited From:
+
+ + + + + + + + + + + + + +
Source:
+
  • object.js, line 289
+ + + + + + + +
+ + + + + + + +
Returns:
+ + +
+

Value.

+
+ + + +
+
+ Type +
+
+ +* + + +
+
+ + + + +
+ + + +
+

getMap

+ + +
Stability: experimental
+ + + + +
+
+ + +
+

Get the map associated with this control.

+
+ + + + + + + + + +
+ + + + + + + +
Inherited From:
+
+ + + + + + + + + + + + + +
Source:
+
  • control.js, line 68
+ + + + + + + +
+ + + + + + + +
Returns:
+ + +
+

Map.

+
+ + + +
+
+ Type +
+
+ +ol.Map + + +
+
+ + + + +
+ + + +
+

getProperties

+ + +
Stability: experimental
+ + + + +
+
+ + +
+

Get an object of all property names and values.

+
+ + + + + + + + + +
+ + + + + + + +
Inherited From:
+
+ + + + + + + + + + + + + +
Source:
+
  • object.js, line 348
+ + + + + + + +
+ + + + + + + +
Returns:
+ + +
+

Object.

+
+ + + +
+
+ Type +
+
+ +Object.<string, *> + + +
+
+ + + + +
+ + + +
+

notify

+ + +
Stability: experimental
+ + + + +
+
+ + +
+

Notify all observers of a change on this property. This notifies both +objects that are bound to the object's property as well as the object +that it is bound to.

+
+ + + + + + + +
Parameters:
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
NameTypeDescription
key + + +string + + + +

Key name.

+ + + +
+ + + + + + + +
Inherited From:
+
+ + + + + + + + + + + + + +
Source:
+
  • object.js, line 368
+ + + + + + + +
+ + + + + + + + + +
+ + + +
+

on

+ + +
Stability: experimental
+ + + + +
+
+ + +
+

Listen for a certain type of event.

+
+ + + + + + + +
Parameters:
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
NameTypeArgumentDescription
type + + +string +| + +Array.<string> + + + + + + + +

The event type or array of event types.

listener + + +function + + + + + + + +

The listener function.

this + + +Object + + + + + + <optional>
+ + + +

The object to use as this in listener.

+ + + +
+ + + + + + + +
Inherited From:
+
+ + + + + + + + + + + + + +
Source:
+
  • observable.js, line 58
+ + + + + + + +
+ + + + + + + +
Returns:
+ + +
+

Unique key for the listener.

+
+ + + +
+
+ Type +
+
+ +goog.events.Key + + +
+
+ + + + +
+ + + +
+

once

+ + +
Stability: experimental
+ + + + +
+
+ + +
+

Listen once for a certain type of event.

+
+ + + + + + + +
Parameters:
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
NameTypeArgumentDescription
type + + +string +| + +Array.<string> + + + + + + + +

The event type or array of event types.

listener + + +function + + + + + + + +

The listener function.

this + + +Object + + + + + + <optional>
+ + + +

The object to use as this in listener.

+ + + +
+ + + + + + + +
Inherited From:
+
+ + + + + + + + + + + + + +
Source:
+
  • observable.js, line 71
+ + + + + + + +
+ + + + + + + +
Returns:
+ + +
+

Unique key for the listener.

+
+ + + +
+
+ Type +
+
+ +goog.events.Key + + +
+
+ + + + +
+ + + +
+

set

+ + +
Stability: experimental
+ + + + +
+
+ + +
+

Sets a value.

+
+ + + + + + + +
Parameters:
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
NameTypeDescription
key + + +string + + + +

Key name.

value + + +* + + + +

Value.

+ + + +
+ + + + + + + +
Inherited From:
+
+ + + + + + + + + + + + + +
Source:
+
  • object.js, line 399
+ + + + + + + +
+ + + + + + + + + +
+ + + +
+

setMap

+ + +
Stability: experimental
+ + + + +
+
+ + +
+

Remove the control from its current map and attach it to the new map. +Subclasses may set up event handlers to get notified about changes to +the map here.

+
+ + + + + + + +
Parameters:
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
NameTypeDescription
map + + +ol.Map + + + +

Map.

+ + + +
+ + + + + + + +
Inherited From:
+
+ + + + + + + + + + + + + +
Source:
+
  • control.js, line 89
+ + + + + + + +
+ + + + + + + + + +
+ + + +
+

setValues

+ + +
Stability: experimental
+ + + + +
+
+ + +
+

Sets a collection of key-value pairs.

+
+ + + + + + + +
Parameters:
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
NameTypeDescription
values + + +Object.<string, *> + + + +

Values.

+ + + +
+ + + + + + + +
Inherited From:
+
+ + + + + + + + + + + + + +
Source:
+
  • object.js, line 428
+ + + + + + + +
+ + + + + + + + + +
+ + + +
+

un

+ + +
Stability: experimental
+ + + + +
+
+ + +
+

Unlisten for a certain type of event.

+
+ + + + + + + +
Parameters:
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
NameTypeArgumentDescription
type + + +string +| + +Array.<string> + + + + + + + +

The event type or array of event types.

listener + + +function + + + + + + + +

The listener function.

this + + +Object + + + + + + <optional>
+ + + +

The object to use as this in listener.

+ + + +
+ + + + + + + +
Inherited From:
+
+ + + + + + + + + + + + + +
Source:
+
  • observable.js, line 83
+ + + + + + + +
+ + + + + + + + + +
+ + + +
+

unbind

+ + +
Stability: experimental
+ + + + +
+
+ + +
+

Removes a binding. Unbinding will set the unbound property to the current + value. The object will not be notified, as the value has not changed.

+
+ + + + + + + +
Parameters:
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
NameTypeDescription
key + + +string + + + +

Key name.

+ + + +
+ + + + + + + +
Inherited From:
+
+ + + + + + + + + + + + + +
Source:
+
  • object.js, line 442
+ + + + + + + +
+ + + + + + + + + +
+ + + +
+

unbindAll

+ + +
Stability: experimental
+ + + + +
+
+ + +
+

Removes all bindings.

+
+ + + + + + + + + +
+ + + + + + + +
Inherited From:
+
+ + + + + + + + + + + + + +
Source:
+
  • object.js, line 466
+ + + + + + + +
+ + + + + + + + + +
+ + + +
+

unByKey

+ + +
Stability: experimental
+ + + + +
+
+ + +
+

Removes an event listener using the key returned by on() or once().

+
+ + + + + + + +
Parameters:
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
NameTypeDescription
key + + +goog.events.Key + + + +

Key.

+ + + +
+ + + + + + + +
Inherited From:
+
+ + + + + + + + + + + + + +
Source:
+
  • observable.js, line 93
+ + + + + + + +
+ + + + + + + + + +
+ +
+ + + + + +
+ +
+ + + + +
+ + + +
+ + + + + + \ No newline at end of file diff --git a/float-no-zero/apidoc/ol.control.ZoomSlider.html b/float-no-zero/apidoc/ol.control.ZoomSlider.html new file mode 100644 index 0000000000..12f2a7f21c --- /dev/null +++ b/float-no-zero/apidoc/ol.control.ZoomSlider.html @@ -0,0 +1,2305 @@ + + + + + OpenLayers 3 API Documentation - Class: ol.control.ZoomSlider + + + + + + + + + + + + + + + + +
+ + + + +
+ +
+

+ ol.control. + + ol.control.ZoomSlider +

+ +
+ +
+
+ + + + +
+

new ZoomSlider

+ + +
Stability: experimental
+ + + + +
+
+ + +
+

A slider type of control for zooming.

+

Example:

+
map.addControl(new ol.control.ZoomSlider());
+
+ + + + + + + +
Parameters:
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
NameTypeArgumentDescription
options + + +olx.control.ZoomSliderOptions + + + + + + <optional>
+ + + +

Zoom slider options.

+ + + +
+ + + + + + + + + + + + + + + + + + + +
Source:
+
  • zoomslidercontrol.js, line 43
+ + + + + + + +
+ + + + + + + + + +
+ + +
+ + +

Extends

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

Methods

+ +
+ +
+

bindTo

+ + +
Stability: experimental
+ + + + +
+
+ + +
+

The bindTo method allows you to set up a two-way binding between a +source and target object. The method returns an +ol.ObjectAccessor with a transform method that lets you transform +values on the way from the source to the target and on the way back.

+

For example, if you had two map views (sourceView and targetView) +and you wanted the target view to have double the resolution of the +source view, you could transform the resolution on the way to and +from the target with the following:

+
sourceView.bindTo('resolution', targetView)
+  .transform(
+    function(sourceResolution) {
+      // from sourceView.resolution to targetView.resolution
+      return 2 * sourceResolution;
+    },
+    function(targetResolution) {
+      // from targetView.resolution to sourceView.resolution
+      return targetResolution / 2;
+    }
+  );
+
+ + + + + + + +
Parameters:
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
NameTypeArgumentDescription
key + + +string + + + + + + + +

Key name.

target + + +ol.Object + + + + + + + +

Target.

targetKey + + +string + + + + + + <optional>
+ + + +

Target key.

+ + + +
+ + + + + + + +
Inherited From:
+
+ + + + + + + + + + + + + +
Source:
+
  • object.js, line 232
+ + + + + + + +
+ + + + + + + +
Returns:
+ + + + +
+
+ Type +
+
+ +ol.ObjectAccessor + + +
+
+ + + + +
+ + + +
+

dispatchChangeEvent

+ + +
Stability: experimental
+ + + + +
+
+ + + + + + + + + + +
+ + + + + + + +
Inherited From:
+
+ + + + + + + + + + + + + +
Source:
+
  • observable.js, line 35
+ + + + + + + +
+ + + + + + + + + +
+ + + +
+

get

+ + +
Stability: experimental
+ + + + +
+
+ + +
+

Gets a value.

+
+ + + + + + + +
Parameters:
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
NameTypeDescription
key + + +string + + + +

Key name.

+ + + +
+ + + + + + + +
Inherited From:
+
+ + + + + + + + + + + + + +
Source:
+
  • object.js, line 289
+ + + + + + + +
+ + + + + + + +
Returns:
+ + +
+

Value.

+
+ + + +
+
+ Type +
+
+ +* + + +
+
+ + + + +
+ + + +
+

getMap

+ + +
Stability: experimental
+ + + + +
+
+ + +
+

Get the map associated with this control.

+
+ + + + + + + + + +
+ + + + + + + +
Inherited From:
+
+ + + + + + + + + + + + + +
Source:
+
  • control.js, line 68
+ + + + + + + +
+ + + + + + + +
Returns:
+ + +
+

Map.

+
+ + + +
+
+ Type +
+
+ +ol.Map + + +
+
+ + + + +
+ + + +
+

getProperties

+ + +
Stability: experimental
+ + + + +
+
+ + +
+

Get an object of all property names and values.

+
+ + + + + + + + + +
+ + + + + + + +
Inherited From:
+
+ + + + + + + + + + + + + +
Source:
+
  • object.js, line 348
+ + + + + + + +
+ + + + + + + +
Returns:
+ + +
+

Object.

+
+ + + +
+
+ Type +
+
+ +Object.<string, *> + + +
+
+ + + + +
+ + + +
+

notify

+ + +
Stability: experimental
+ + + + +
+
+ + +
+

Notify all observers of a change on this property. This notifies both +objects that are bound to the object's property as well as the object +that it is bound to.

+
+ + + + + + + +
Parameters:
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
NameTypeDescription
key + + +string + + + +

Key name.

+ + + +
+ + + + + + + +
Inherited From:
+
+ + + + + + + + + + + + + +
Source:
+
  • object.js, line 368
+ + + + + + + +
+ + + + + + + + + +
+ + + +
+

on

+ + +
Stability: experimental
+ + + + +
+
+ + +
+

Listen for a certain type of event.

+
+ + + + + + + +
Parameters:
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
NameTypeArgumentDescription
type + + +string +| + +Array.<string> + + + + + + + +

The event type or array of event types.

listener + + +function + + + + + + + +

The listener function.

this + + +Object + + + + + + <optional>
+ + + +

The object to use as this in listener.

+ + + +
+ + + + + + + +
Inherited From:
+
+ + + + + + + + + + + + + +
Source:
+
  • observable.js, line 58
+ + + + + + + +
+ + + + + + + +
Returns:
+ + +
+

Unique key for the listener.

+
+ + + +
+
+ Type +
+
+ +goog.events.Key + + +
+
+ + + + +
+ + + +
+

once

+ + +
Stability: experimental
+ + + + +
+
+ + +
+

Listen once for a certain type of event.

+
+ + + + + + + +
Parameters:
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
NameTypeArgumentDescription
type + + +string +| + +Array.<string> + + + + + + + +

The event type or array of event types.

listener + + +function + + + + + + + +

The listener function.

this + + +Object + + + + + + <optional>
+ + + +

The object to use as this in listener.

+ + + +
+ + + + + + + +
Inherited From:
+
+ + + + + + + + + + + + + +
Source:
+
  • observable.js, line 71
+ + + + + + + +
+ + + + + + + +
Returns:
+ + +
+

Unique key for the listener.

+
+ + + +
+
+ Type +
+
+ +goog.events.Key + + +
+
+ + + + +
+ + + +
+

set

+ + +
Stability: experimental
+ + + + +
+
+ + +
+

Sets a value.

+
+ + + + + + + +
Parameters:
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
NameTypeDescription
key + + +string + + + +

Key name.

value + + +* + + + +

Value.

+ + + +
+ + + + + + + +
Inherited From:
+
+ + + + + + + + + + + + + +
Source:
+
  • object.js, line 399
+ + + + + + + +
+ + + + + + + + + +
+ + + +
+

setMap

+ + +
Stability: experimental
+ + + + +
+
+ + +
+

Remove the control from its current map and attach it to the new map. +Subclasses may set up event handlers to get notified about changes to +the map here.

+
+ + + + + + + +
Parameters:
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
NameTypeDescription
map + + +ol.Map + + + +

Map.

+ + + +
+ + + + + + + +
Inherited From:
+
+ + + + + + + + + + + + + +
Source:
+
  • control.js, line 89
+ + + + + + + +
+ + + + + + + + + +
+ + + +
+

setValues

+ + +
Stability: experimental
+ + + + +
+
+ + +
+

Sets a collection of key-value pairs.

+
+ + + + + + + +
Parameters:
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
NameTypeDescription
values + + +Object.<string, *> + + + +

Values.

+ + + +
+ + + + + + + +
Inherited From:
+
+ + + + + + + + + + + + + +
Source:
+
  • object.js, line 428
+ + + + + + + +
+ + + + + + + + + +
+ + + +
+

un

+ + +
Stability: experimental
+ + + + +
+
+ + +
+

Unlisten for a certain type of event.

+
+ + + + + + + +
Parameters:
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
NameTypeArgumentDescription
type + + +string +| + +Array.<string> + + + + + + + +

The event type or array of event types.

listener + + +function + + + + + + + +

The listener function.

this + + +Object + + + + + + <optional>
+ + + +

The object to use as this in listener.

+ + + +
+ + + + + + + +
Inherited From:
+
+ + + + + + + + + + + + + +
Source:
+
  • observable.js, line 83
+ + + + + + + +
+ + + + + + + + + +
+ + + +
+

unbind

+ + +
Stability: experimental
+ + + + +
+
+ + +
+

Removes a binding. Unbinding will set the unbound property to the current + value. The object will not be notified, as the value has not changed.

+
+ + + + + + + +
Parameters:
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
NameTypeDescription
key + + +string + + + +

Key name.

+ + + +
+ + + + + + + +
Inherited From:
+
+ + + + + + + + + + + + + +
Source:
+
  • object.js, line 442
+ + + + + + + +
+ + + + + + + + + +
+ + + +
+

unbindAll

+ + +
Stability: experimental
+ + + + +
+
+ + +
+

Removes all bindings.

+
+ + + + + + + + + +
+ + + + + + + +
Inherited From:
+
+ + + + + + + + + + + + + +
Source:
+
  • object.js, line 466
+ + + + + + + +
+ + + + + + + + + +
+ + + +
+

unByKey

+ + +
Stability: experimental
+ + + + +
+
+ + +
+

Removes an event listener using the key returned by on() or once().

+
+ + + + + + + +
Parameters:
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
NameTypeDescription
key + + +goog.events.Key + + + +

Key.

+ + + +
+ + + + + + + +
Inherited From:
+
+ + + + + + + + + + + + + +
Source:
+
  • observable.js, line 93
+ + + + + + + +
+ + + + + + + + + +
+ +
+ + + + + +
+ +
+ + + + +
+ + + +
+ + + + + + \ No newline at end of file diff --git a/float-no-zero/apidoc/ol.control.ZoomToExtent.html b/float-no-zero/apidoc/ol.control.ZoomToExtent.html new file mode 100644 index 0000000000..26b8da4331 --- /dev/null +++ b/float-no-zero/apidoc/ol.control.ZoomToExtent.html @@ -0,0 +1,2305 @@ + + + + + OpenLayers 3 API Documentation - Class: ol.control.ZoomToExtent + + + + + + + + + + + + + + + + +
+ + + + +
+ +
+

+ ol.control. + + ol.control.ZoomToExtent +

+ +
+ +
+
+ + + + +
+

new ZoomToExtent

+ + +
Stability: experimental
+ + + + +
+
+ + +
+

Create a control that adds a button, which, when pressed, changes +the map view to a specific extent. To style this control use the +css selector .ol-zoom-extent.

+
+ + + + + + + +
Parameters:
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
NameTypeArgumentDescription
options + + +olx.control.ZoomToExtentOptions + + + + + + <optional>
+ + + +

Options.

+ + + +
+ + + + + + + + + + + + + + + + + + + +
Source:
+
  • zoomtoextentcontrol.js, line 24
+ + + + + + + +
+ + + + + + + + + +
+ + +
+ + +

Extends

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

Methods

+ +
+ +
+

bindTo

+ + +
Stability: experimental
+ + + + +
+
+ + +
+

The bindTo method allows you to set up a two-way binding between a +source and target object. The method returns an +ol.ObjectAccessor with a transform method that lets you transform +values on the way from the source to the target and on the way back.

+

For example, if you had two map views (sourceView and targetView) +and you wanted the target view to have double the resolution of the +source view, you could transform the resolution on the way to and +from the target with the following:

+
sourceView.bindTo('resolution', targetView)
+  .transform(
+    function(sourceResolution) {
+      // from sourceView.resolution to targetView.resolution
+      return 2 * sourceResolution;
+    },
+    function(targetResolution) {
+      // from targetView.resolution to sourceView.resolution
+      return targetResolution / 2;
+    }
+  );
+
+ + + + + + + +
Parameters:
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
NameTypeArgumentDescription
key + + +string + + + + + + + +

Key name.

target + + +ol.Object + + + + + + + +

Target.

targetKey + + +string + + + + + + <optional>
+ + + +

Target key.

+ + + +
+ + + + + + + +
Inherited From:
+
+ + + + + + + + + + + + + +
Source:
+
  • object.js, line 232
+ + + + + + + +
+ + + + + + + +
Returns:
+ + + + +
+
+ Type +
+
+ +ol.ObjectAccessor + + +
+
+ + + + +
+ + + +
+

dispatchChangeEvent

+ + +
Stability: experimental
+ + + + +
+
+ + + + + + + + + + +
+ + + + + + + +
Inherited From:
+
+ + + + + + + + + + + + + +
Source:
+
  • observable.js, line 35
+ + + + + + + +
+ + + + + + + + + +
+ + + +
+

get

+ + +
Stability: experimental
+ + + + +
+
+ + +
+

Gets a value.

+
+ + + + + + + +
Parameters:
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
NameTypeDescription
key + + +string + + + +

Key name.

+ + + +
+ + + + + + + +
Inherited From:
+
+ + + + + + + + + + + + + +
Source:
+
  • object.js, line 289
+ + + + + + + +
+ + + + + + + +
Returns:
+ + +
+

Value.

+
+ + + +
+
+ Type +
+
+ +* + + +
+
+ + + + +
+ + + +
+

getMap

+ + +
Stability: experimental
+ + + + +
+
+ + +
+

Get the map associated with this control.

+
+ + + + + + + + + +
+ + + + + + + +
Inherited From:
+
+ + + + + + + + + + + + + +
Source:
+
  • control.js, line 68
+ + + + + + + +
+ + + + + + + +
Returns:
+ + +
+

Map.

+
+ + + +
+
+ Type +
+
+ +ol.Map + + +
+
+ + + + +
+ + + +
+

getProperties

+ + +
Stability: experimental
+ + + + +
+
+ + +
+

Get an object of all property names and values.

+
+ + + + + + + + + +
+ + + + + + + +
Inherited From:
+
+ + + + + + + + + + + + + +
Source:
+
  • object.js, line 348
+ + + + + + + +
+ + + + + + + +
Returns:
+ + +
+

Object.

+
+ + + +
+
+ Type +
+
+ +Object.<string, *> + + +
+
+ + + + +
+ + + +
+

notify

+ + +
Stability: experimental
+ + + + +
+
+ + +
+

Notify all observers of a change on this property. This notifies both +objects that are bound to the object's property as well as the object +that it is bound to.

+
+ + + + + + + +
Parameters:
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
NameTypeDescription
key + + +string + + + +

Key name.

+ + + +
+ + + + + + + +
Inherited From:
+
+ + + + + + + + + + + + + +
Source:
+
  • object.js, line 368
+ + + + + + + +
+ + + + + + + + + +
+ + + +
+

on

+ + +
Stability: experimental
+ + + + +
+
+ + +
+

Listen for a certain type of event.

+
+ + + + + + + +
Parameters:
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
NameTypeArgumentDescription
type + + +string +| + +Array.<string> + + + + + + + +

The event type or array of event types.

listener + + +function + + + + + + + +

The listener function.

this + + +Object + + + + + + <optional>
+ + + +

The object to use as this in listener.

+ + + +
+ + + + + + + +
Inherited From:
+
+ + + + + + + + + + + + + +
Source:
+
  • observable.js, line 58
+ + + + + + + +
+ + + + + + + +
Returns:
+ + +
+

Unique key for the listener.

+
+ + + +
+
+ Type +
+
+ +goog.events.Key + + +
+
+ + + + +
+ + + +
+

once

+ + +
Stability: experimental
+ + + + +
+
+ + +
+

Listen once for a certain type of event.

+
+ + + + + + + +
Parameters:
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
NameTypeArgumentDescription
type + + +string +| + +Array.<string> + + + + + + + +

The event type or array of event types.

listener + + +function + + + + + + + +

The listener function.

this + + +Object + + + + + + <optional>
+ + + +

The object to use as this in listener.

+ + + +
+ + + + + + + +
Inherited From:
+
+ + + + + + + + + + + + + +
Source:
+
  • observable.js, line 71
+ + + + + + + +
+ + + + + + + +
Returns:
+ + +
+

Unique key for the listener.

+
+ + + +
+
+ Type +
+
+ +goog.events.Key + + +
+
+ + + + +
+ + + +
+

set

+ + +
Stability: experimental
+ + + + +
+
+ + +
+

Sets a value.

+
+ + + + + + + +
Parameters:
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
NameTypeDescription
key + + +string + + + +

Key name.

value + + +* + + + +

Value.

+ + + +
+ + + + + + + +
Inherited From:
+
+ + + + + + + + + + + + + +
Source:
+
  • object.js, line 399
+ + + + + + + +
+ + + + + + + + + +
+ + + +
+

setMap

+ + +
Stability: experimental
+ + + + +
+
+ + +
+

Remove the control from its current map and attach it to the new map. +Subclasses may set up event handlers to get notified about changes to +the map here.

+
+ + + + + + + +
Parameters:
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
NameTypeDescription
map + + +ol.Map + + + +

Map.

+ + + +
+ + + + + + + +
Inherited From:
+
+ + + + + + + + + + + + + +
Source:
+
  • control.js, line 89
+ + + + + + + +
+ + + + + + + + + +
+ + + +
+

setValues

+ + +
Stability: experimental
+ + + + +
+
+ + +
+

Sets a collection of key-value pairs.

+
+ + + + + + + +
Parameters:
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
NameTypeDescription
values + + +Object.<string, *> + + + +

Values.

+ + + +
+ + + + + + + +
Inherited From:
+
+ + + + + + + + + + + + + +
Source:
+
  • object.js, line 428
+ + + + + + + +
+ + + + + + + + + +
+ + + +
+

un

+ + +
Stability: experimental
+ + + + +
+
+ + +
+

Unlisten for a certain type of event.

+
+ + + + + + + +
Parameters:
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
NameTypeArgumentDescription
type + + +string +| + +Array.<string> + + + + + + + +

The event type or array of event types.

listener + + +function + + + + + + + +

The listener function.

this + + +Object + + + + + + <optional>
+ + + +

The object to use as this in listener.

+ + + +
+ + + + + + + +
Inherited From:
+
+ + + + + + + + + + + + + +
Source:
+
  • observable.js, line 83
+ + + + + + + +
+ + + + + + + + + +
+ + + +
+

unbind

+ + +
Stability: experimental
+ + + + +
+
+ + +
+

Removes a binding. Unbinding will set the unbound property to the current + value. The object will not be notified, as the value has not changed.

+
+ + + + + + + +
Parameters:
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
NameTypeDescription
key + + +string + + + +

Key name.

+ + + +
+ + + + + + + +
Inherited From:
+
+ + + + + + + + + + + + + +
Source:
+
  • object.js, line 442
+ + + + + + + +
+ + + + + + + + + +
+ + + +
+

unbindAll

+ + +
Stability: experimental
+ + + + +
+
+ + +
+

Removes all bindings.

+
+ + + + + + + + + +
+ + + + + + + +
Inherited From:
+
+ + + + + + + + + + + + + +
Source:
+
  • object.js, line 466
+ + + + + + + +
+ + + + + + + + + +
+ + + +
+

unByKey

+ + +
Stability: experimental
+ + + + +
+
+ + +
+

Removes an event listener using the key returned by on() or once().

+
+ + + + + + + +
Parameters:
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
NameTypeDescription
key + + +goog.events.Key + + + +

Key.

+ + + +
+ + + + + + + +
Inherited From:
+
+ + + + + + + + + + + + + +
Source:
+
  • observable.js, line 93
+ + + + + + + +
+ + + + + + + + + +
+ +
+ + + + + +
+ +
+ + + + +
+ + + +
+ + + + + + \ No newline at end of file diff --git a/float-no-zero/apidoc/ol.control.html b/float-no-zero/apidoc/ol.control.html new file mode 100644 index 0000000000..ea88e15fa8 --- /dev/null +++ b/float-no-zero/apidoc/ol.control.html @@ -0,0 +1,539 @@ + + + + + OpenLayers 3 API Documentation - Namespace: ol.control + + + + + + + + + + + + + + + + +
+ + + + +
+ +
+

+ ol. + + ol.control +

+ +
+ +
+
+ + + + + + +
+ + + + + + + + + + + + + + + + + + + +
Source:
+
  • control.jsdoc, line 1
+ + + + + + + +
+ + + + +
+ + + + + + + + +

Classes

+ +
+
ol.control.Attribution
+
+ +
ol.control.Control
+
+ +
ol.control.FullScreen
+
+ +
ol.control.Logo
+
+ +
ol.control.MousePosition
+
+ +
ol.control.ScaleLine
+
+ +
ol.control.Zoom
+
+ +
ol.control.ZoomSlider
+
+ +
ol.control.ZoomToExtent
+
+
+ + + + + + + +

Members

+ +
+ +
+

<static> ScaleLineUnits :string

+ + +
Stability: experimental
+ + + + +
+
+ + + +
+ + +
Properties:
+ +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
NameTypeDefaultDescription
DEGREES + + +string + + + + + + degrees + +
IMPERIAL + + +string + + + + + + imperial + +
NAUTICAL + + +string + + + + + + nautical + +
METRIC + + +string + + + + + + metric + +
US + + +string + + + + + + us + +
+ + + + + + + + + + + + + + + + + + + + +
Source:
+
  • scalelinecontrol.js, line 35
+ + + + + + + +
+ + + +
+ +
+ + + +

Methods

+ +
+ +
+

<static> defaults

+ + +
Stability: experimental
+ + + + +
+
+ + + + + + + + +
Parameters:
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
NameTypeArgumentDescription
options + + +olx.control.DefaultsOptions + + + + + + <optional>
+ + + +

Defaults options.

+ + + +
+ + + + + + + + + + + + + + + + + + + +
Source:
+
  • controldefaults.js, line 14
+ + + + + + + +
+ + + + + + + +
Returns:
+ + +
+

Controls.

+
+ + + +
+
+ Type +
+
+ +ol.Collection + + +
+
+ + + + +
+ +
+ + + + + +
+ +
+ + + + +
+ + + +
+ + + + + + \ No newline at end of file diff --git a/float-no-zero/apidoc/ol.dom.Input.html b/float-no-zero/apidoc/ol.dom.Input.html new file mode 100644 index 0000000000..b71ff0110d --- /dev/null +++ b/float-no-zero/apidoc/ol.dom.Input.html @@ -0,0 +1,2548 @@ + + + + + OpenLayers 3 API Documentation - Class: ol.dom.Input + + + + + + + + + + + + + + + + +
+ + + + +
+ +
+

+ ol.dom.Input +

+ +
+ +
+
+ + + + +
+

new Input

+ + +
Stability: experimental
+ + + + +
+
+ + +
+

Helper class for binding HTML input to an ol.Object.

+

Example:

+
// bind a checkbox with id 'visible' to a layer's visibility
+var visible = new ol.dom.Input(document.getElementById('visible'));
+visible.bindTo('checked', layer, 'visible');
+
+ + + + + + + +
Parameters:
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
NameTypeDescription
target + + +Element + + + +

Target element.

+ + + +
+ + + + + + + + + + + + + + + + + + + +
Source:
+
  • input.js, line 36
+ + + + + + + +
+ + + + + + + + + +
+ + +
+ + +

Extends

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

Observable Properties

+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
NameTypeSettableEventDescription
value + + +string + + + + yeschange:valuethe value of the Input
checked + + +boolean + + + + yeschange:checkedthe checked state of the Input
+
+ + + + + + +

Methods

+ +
+ +
+

bindTo

+ + +
Stability: experimental
+ + + + +
+
+ + +
+

The bindTo method allows you to set up a two-way binding between a +source and target object. The method returns an +ol.ObjectAccessor with a transform method that lets you transform +values on the way from the source to the target and on the way back.

+

For example, if you had two map views (sourceView and targetView) +and you wanted the target view to have double the resolution of the +source view, you could transform the resolution on the way to and +from the target with the following:

+
sourceView.bindTo('resolution', targetView)
+  .transform(
+    function(sourceResolution) {
+      // from sourceView.resolution to targetView.resolution
+      return 2 * sourceResolution;
+    },
+    function(targetResolution) {
+      // from targetView.resolution to sourceView.resolution
+      return targetResolution / 2;
+    }
+  );
+
+ + + + + + + +
Parameters:
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
NameTypeArgumentDescription
key + + +string + + + + + + + +

Key name.

target + + +ol.Object + + + + + + + +

Target.

targetKey + + +string + + + + + + <optional>
+ + + +

Target key.

+ + + +
+ + + + + + + +
Inherited From:
+
+ + + + + + + + + + + + + +
Source:
+
  • object.js, line 232
+ + + + + + + +
+ + + + + + + +
Returns:
+ + + + +
+
+ Type +
+
+ +ol.ObjectAccessor + + +
+
+ + + + +
+ + + +
+

dispatchChangeEvent

+ + +
Stability: experimental
+ + + + +
+
+ + + + + + + + + + +
+ + + + + + + +
Inherited From:
+
+ + + + + + + + + + + + + +
Source:
+
  • observable.js, line 35
+ + + + + + + +
+ + + + + + + + + +
+ + + +
+

get

+ + +
Stability: experimental
+ + + + +
+
+ + +
+

Gets a value.

+
+ + + + + + + +
Parameters:
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
NameTypeDescription
key + + +string + + + +

Key name.

+ + + +
+ + + + + + + +
Inherited From:
+
+ + + + + + + + + + + + + +
Source:
+
  • object.js, line 289
+ + + + + + + +
+ + + + + + + +
Returns:
+ + +
+

Value.

+
+ + + +
+
+ Type +
+
+ +* + + +
+
+ + + + +
+ + + +
+

getChecked

+ + +
Stability: experimental
+ + + + +
+
+ + +
+

If the input is a checkbox, return whether or not the checbox is checked.

+
+ + + + + + + + + +
+ + + + + + + + + + + + + + + + + + + +
Source:
+
  • input.js, line 64
+ + + + + + + +
+ + + + + + + +
Returns:
+ + +
+

checked.

+
+ + + +
+
+ Type +
+
+ +boolean +| + +undefined + + +
+
+ + + + +
+ + + +
+

getProperties

+ + +
Stability: experimental
+ + + + +
+
+ + +
+

Get an object of all property names and values.

+
+ + + + + + + + + +
+ + + + + + + +
Inherited From:
+
+ + + + + + + + + + + + + +
Source:
+
  • object.js, line 348
+ + + + + + + +
+ + + + + + + +
Returns:
+ + +
+

Object.

+
+ + + +
+
+ Type +
+
+ +Object.<string, *> + + +
+
+ + + + +
+ + + +
+

getValue

+ + +
Stability: experimental
+ + + + +
+
+ + +
+

Get the value of the input.

+
+ + + + + + + + + +
+ + + + + + + + + + + + + + + + + + + +
Source:
+
  • input.js, line 78
+ + + + + + + +
+ + + + + + + +
Returns:
+ + +
+

input value.

+
+ + + +
+
+ Type +
+
+ +string +| + +undefined + + +
+
+ + + + +
+ + + +
+

notify

+ + +
Stability: experimental
+ + + + +
+
+ + +
+

Notify all observers of a change on this property. This notifies both +objects that are bound to the object's property as well as the object +that it is bound to.

+
+ + + + + + + +
Parameters:
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
NameTypeDescription
key + + +string + + + +

Key name.

+ + + +
+ + + + + + + +
Inherited From:
+
+ + + + + + + + + + + + + +
Source:
+
  • object.js, line 368
+ + + + + + + +
+ + + + + + + + + +
+ + + +
+

on

+ + +
Stability: experimental
+ + + + +
+
+ + +
+

Listen for a certain type of event.

+
+ + + + + + + +
Parameters:
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
NameTypeArgumentDescription
type + + +string +| + +Array.<string> + + + + + + + +

The event type or array of event types.

listener + + +function + + + + + + + +

The listener function.

this + + +Object + + + + + + <optional>
+ + + +

The object to use as this in listener.

+ + + +
+ + + + + + + +
Inherited From:
+
+ + + + + + + + + + + + + +
Source:
+
  • observable.js, line 58
+ + + + + + + +
+ + + + + + + +
Returns:
+ + +
+

Unique key for the listener.

+
+ + + +
+
+ Type +
+
+ +goog.events.Key + + +
+
+ + + + +
+ + + +
+

once

+ + +
Stability: experimental
+ + + + +
+
+ + +
+

Listen once for a certain type of event.

+
+ + + + + + + +
Parameters:
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
NameTypeArgumentDescription
type + + +string +| + +Array.<string> + + + + + + + +

The event type or array of event types.

listener + + +function + + + + + + + +

The listener function.

this + + +Object + + + + + + <optional>
+ + + +

The object to use as this in listener.

+ + + +
+ + + + + + + +
Inherited From:
+
+ + + + + + + + + + + + + +
Source:
+
  • observable.js, line 71
+ + + + + + + +
+ + + + + + + +
Returns:
+ + +
+

Unique key for the listener.

+
+ + + +
+
+ Type +
+
+ +goog.events.Key + + +
+
+ + + + +
+ + + +
+

set

+ + +
Stability: experimental
+ + + + +
+
+ + +
+

Sets a value.

+
+ + + + + + + +
Parameters:
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
NameTypeDescription
key + + +string + + + +

Key name.

value + + +* + + + +

Value.

+ + + +
+ + + + + + + +
Inherited From:
+
+ + + + + + + + + + + + + +
Source:
+
  • object.js, line 399
+ + + + + + + +
+ + + + + + + + + +
+ + + +
+

setChecked

+ + +
Stability: experimental
+ + + + +
+
+ + +
+

Set whether or not a checkbox is checked.

+
+ + + + + + + +
Parameters:
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
NameTypeDescription
checked + + +boolean + + + +

Checked.

+ + + +
+ + + + + + + + + + + + + + + + + + + +
Source:
+
  • input.js, line 106
+ + + + + + + +
+ + + + + + + + + +
+ + + +
+

setValue

+ + +
Stability: experimental
+ + + + +
+
+ + +
+

Sets the value of the input.

+
+ + + + + + + +
Parameters:
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
NameTypeDescription
value + + +string + + + +

Value.

+ + + +
+ + + + + + + + + + + + + + + + + + + +
Source:
+
  • input.js, line 92
+ + + + + + + +
+ + + + + + + + + +
+ + + +
+

setValues

+ + +
Stability: experimental
+ + + + +
+
+ + +
+

Sets a collection of key-value pairs.

+
+ + + + + + + +
Parameters:
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
NameTypeDescription
values + + +Object.<string, *> + + + +

Values.

+ + + +
+ + + + + + + +
Inherited From:
+
+ + + + + + + + + + + + + +
Source:
+
  • object.js, line 428
+ + + + + + + +
+ + + + + + + + + +
+ + + +
+

un

+ + +
Stability: experimental
+ + + + +
+
+ + +
+

Unlisten for a certain type of event.

+
+ + + + + + + +
Parameters:
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
NameTypeArgumentDescription
type + + +string +| + +Array.<string> + + + + + + + +

The event type or array of event types.

listener + + +function + + + + + + + +

The listener function.

this + + +Object + + + + + + <optional>
+ + + +

The object to use as this in listener.

+ + + +
+ + + + + + + +
Inherited From:
+
+ + + + + + + + + + + + + +
Source:
+
  • observable.js, line 83
+ + + + + + + +
+ + + + + + + + + +
+ + + +
+

unbind

+ + +
Stability: experimental
+ + + + +
+
+ + +
+

Removes a binding. Unbinding will set the unbound property to the current + value. The object will not be notified, as the value has not changed.

+
+ + + + + + + +
Parameters:
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
NameTypeDescription
key + + +string + + + +

Key name.

+ + + +
+ + + + + + + +
Inherited From:
+
+ + + + + + + + + + + + + +
Source:
+
  • object.js, line 442
+ + + + + + + +
+ + + + + + + + + +
+ + + +
+

unbindAll

+ + +
Stability: experimental
+ + + + +
+
+ + +
+

Removes all bindings.

+
+ + + + + + + + + +
+ + + + + + + +
Inherited From:
+
+ + + + + + + + + + + + + +
Source:
+
  • object.js, line 466
+ + + + + + + +
+ + + + + + + + + +
+ + + +
+

unByKey

+ + +
Stability: experimental
+ + + + +
+
+ + +
+

Removes an event listener using the key returned by on() or once().

+
+ + + + + + + +
Parameters:
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
NameTypeDescription
key + + +goog.events.Key + + + +

Key.

+ + + +
+ + + + + + + +
Inherited From:
+
+ + + + + + + + + + + + + +
Source:
+
  • observable.js, line 93
+ + + + + + + +
+ + + + + + + + + +
+ +
+ + + + + +
+ +
+ + + + +
+ + + +
+ + + + + + \ No newline at end of file diff --git a/float-no-zero/apidoc/ol.events.condition.html b/float-no-zero/apidoc/ol.events.condition.html new file mode 100644 index 0000000000..585f04d96e --- /dev/null +++ b/float-no-zero/apidoc/ol.events.condition.html @@ -0,0 +1,995 @@ + + + + + OpenLayers 3 API Documentation - Namespace: ol.events.condition + + + + + + + + + + + + + + + + +
+ + + + +
+ +
+

+ ol.events.condition +

+ +
+ +
+
+ + + + + + +
+ + + + + + + + + + + + + + + + + + + +
Source:
+
  • condition.jsdoc, line 1
+ + + + + + + +
+ + + + +
+ + + + + + + + + + + + + + +

Members

+ +
+ +
+

<static> always

+ + +
Stability: experimental
+ + + + +
+
+ +
+

Always true.

+
+ + + +
+ + + + + + + + + + + + + + + + + + + +
Source:
+
  • condition.js, line 54
+ + + + + + + +
+ + + +
+ +
+ + + +

Methods

+ +
+ +
+

<static> altKeyOnly

+ + +
Stability: experimental
+ + + + +
+
+ + + + + + + + +
Parameters:
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
NameTypeDescription
mapBrowserEvent + + +ol.MapBrowserEvent + + + +

Map browser event.

+ + + +
+ + + + + + + + + + + + + + + + + + + +
Source:
+
  • condition.js, line 25
+ + + + + + + +
+ + + + + + + +
Returns:
+ + +
+

True if only the alt key is pressed.

+
+ + + +
+
+ Type +
+
+ +boolean + + +
+
+ + + + +
+ + + +
+

<static> altShiftKeysOnly

+ + +
Stability: experimental
+ + + + +
+
+ + + + + + + + +
Parameters:
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
NameTypeDescription
mapBrowserEvent + + +ol.MapBrowserEvent + + + +

Map browser event.

+ + + +
+ + + + + + + + + + + + + + + + + + + +
Source:
+
  • condition.js, line 39
+ + + + + + + +
+ + + + + + + +
Returns:
+ + +
+

True if only the alt and shift keys are pressed.

+
+ + + +
+
+ Type +
+
+ +boolean + + +
+
+ + + + +
+ + + +
+

<static> noModifierKeys

+ + +
Stability: experimental
+ + + + +
+
+ + + + + + + + +
Parameters:
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
NameTypeDescription
mapBrowserEvent + + +ol.MapBrowserEvent + + + +

Map browser event.

+ + + +
+ + + + + + + + + + + + + + + + + + + +
Source:
+
  • condition.js, line 72
+ + + + + + + +
+ + + + + + + +
Returns:
+ + +
+

True only if there no modifier keys are pressed.

+
+ + + +
+
+ Type +
+
+ +boolean + + +
+
+ + + + +
+ + + +
+

<static> platformModifierKeyOnly

+ + +
Stability: experimental
+ + + + +
+
+ + + + + + + + +
Parameters:
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
NameTypeDescription
mapBrowserEvent + + +ol.MapBrowserEvent + + + +

Map browser event.

+ + + +
+ + + + + + + + + + + + + + + + + + + +
Source:
+
  • condition.js, line 86
+ + + + + + + +
+ + + + + + + +
Returns:
+ + +
+

True if only the platform modifier key is pressed.

+
+ + + +
+
+ Type +
+
+ +boolean + + +
+
+ + + + +
+ + + +
+

<static> shiftKeyOnly

+ + +
Stability: experimental
+ + + + +
+
+ + + + + + + + +
Parameters:
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
NameTypeDescription
mapBrowserEvent + + +ol.MapBrowserEvent + + + +

Map browser event.

+ + + +
+ + + + + + + + + + + + + + + + + + + +
Source:
+
  • condition.js, line 100
+ + + + + + + +
+ + + + + + + +
Returns:
+ + +
+

True if only the shift key is pressed.

+
+ + + +
+
+ Type +
+
+ +boolean + + +
+
+ + + + +
+ + + +
+

<static> targetNotEditable

+ + +
Stability: experimental
+ + + + +
+
+ + + + + + + + +
Parameters:
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
NameTypeDescription
mapBrowserEvent + + +ol.MapBrowserEvent + + + +

Map browser event.

+ + + +
+ + + + + + + + + + + + + + + + + + + +
Source:
+
  • condition.js, line 114
+ + + + + + + +
+ + + + + + + +
Returns:
+ + +
+

True only if the target element is not editable.

+
+ + + +
+
+ Type +
+
+ +boolean + + +
+
+ + + + +
+ +
+ + + + + +
+ +
+ + + + +
+ + + +
+ + + + + + \ No newline at end of file diff --git a/float-no-zero/apidoc/ol.feature_.html b/float-no-zero/apidoc/ol.feature_.html new file mode 100644 index 0000000000..96cf5291f1 --- /dev/null +++ b/float-no-zero/apidoc/ol.feature_.html @@ -0,0 +1,249 @@ + + + + + OpenLayers 3 API Documentation - Namespace: ol.feature + + + + + + + + + + + + + + + + +
+ + + + +
+ +
+

+ ol. + + ol.feature +

+ +
+ +
+
+ + + + + + +
+ + + + + + + + + + + + + + + + + + + +
Source:
+
  • feature.jsdoc, line 1
+ + + + + + + +
+ + + + +
+ + + + + + + + + + + + + + + + + + +

TypeDefs

+ +
+ +
+

FeatureStyleFunction

+ + +
Stability: experimental
+ + + + +
+
+ +
+

A function that takes a {number} representing the view's resolution. It +returns an Array of ol.style.Style. This way individual features +can be styled. The this keyword inside the function references the +ol.Feature to be styled.

+
+ + + +
+ + + + + + + + + + + + + + + + + + + +
Source:
+
  • feature.js, line 215
+ + + + + + + +
+ + + +
+ + + +
+

StyleFunction

+ + +
Stability: experimental
+ + + + +
+
+ +
+

A function that takes an ol.Feature and a {number} representing +the view's resolution. The function should return an array of +ol.style.Style. This way e.g. a vector layer can be styled.

+
+ + + +
+ + + + + + + + + + + + + + + + + + + +
Source:
+
  • feature.js, line 258
+ + + + + + + +
+ + + +
+ +
+ + + +
+ +
+ + + + +
+ + + +
+ + + + + + \ No newline at end of file diff --git a/float-no-zero/apidoc/ol.format.Feature.html b/float-no-zero/apidoc/ol.format.Feature.html new file mode 100644 index 0000000000..a075b52dcd --- /dev/null +++ b/float-no-zero/apidoc/ol.format.Feature.html @@ -0,0 +1,155 @@ + + + + + OpenLayers 3 API Documentation - Class: ol.format.Feature + + + + + + + + + + + + + + + + +
+ + + + +
+ +
+

+ ol.format.Feature +

+ +
+ +
+
+ + + + +
+

new Feature

+ + +
Stability: not documented
+ + + + +
+
+ + + + + + + + + + +
+ + + + + + + + + + + + + + + + + + + +
Source:
+
  • featureformat.js, line 10
+ + + + + + + +
+ + + + + + + + + +
+ + +
+ + + + + + + + + + + + + + + + + + + + +
+ +
+ + + + +
+ + + +
+ + + + + + \ No newline at end of file diff --git a/float-no-zero/apidoc/ol.format.GPX.html b/float-no-zero/apidoc/ol.format.GPX.html new file mode 100644 index 0000000000..1fccbcf426 --- /dev/null +++ b/float-no-zero/apidoc/ol.format.GPX.html @@ -0,0 +1,155 @@ + + + + + OpenLayers 3 API Documentation - Class: ol.format.GPX + + + + + + + + + + + + + + + + +
+ + + + +
+ +
+

+ ol.format.GPX +

+ +
+ +
+
+ + + + +
+

new GPX

+ + +
Stability: experimental
+ + + + +
+
+ + + + + + + + + + +
+ + + + + + + + + + + + + + + + + + + +
Source:
+
  • gpxformat.js, line 24
+ + + + + + + +
+ + + + + + + + + +
+ + +
+ + + + + + + + + + + + + + + + + + + + +
+ +
+ + + + +
+ + + +
+ + + + + + \ No newline at end of file diff --git a/float-no-zero/apidoc/ol.format.GeoJSON.html b/float-no-zero/apidoc/ol.format.GeoJSON.html new file mode 100644 index 0000000000..77c130606c --- /dev/null +++ b/float-no-zero/apidoc/ol.format.GeoJSON.html @@ -0,0 +1,213 @@ + + + + + OpenLayers 3 API Documentation - Class: ol.format.GeoJSON + + + + + + + + + + + + + + + + +
+ + + + +
+ +
+

+ ol.format.GeoJSON +

+ +
+ +
+
+ + + + +
+

new GeoJSON

+ + +
Stability: experimental
+ + + + +
+
+ + + + + + + + +
Parameters:
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
NameTypeArgumentDescription
options + + +olx.format.GeoJSONOptions + + + + + + <optional>
+ + + +

Options.

+ + + +
+ + + + + + + + + + + + + + + + + + + +
Source:
+
  • geojsonformat.js, line 29
+ + + + + + + +
+ + + + + + + + + +
+ + +
+ + + + + + + + + + + + + + + + + + + + +
+ +
+ + + + +
+ + + +
+ + + + + + \ No newline at end of file diff --git a/float-no-zero/apidoc/ol.format.IGC.html b/float-no-zero/apidoc/ol.format.IGC.html new file mode 100644 index 0000000000..d13bc87809 --- /dev/null +++ b/float-no-zero/apidoc/ol.format.IGC.html @@ -0,0 +1,213 @@ + + + + + OpenLayers 3 API Documentation - Class: ol.format.IGC + + + + + + + + + + + + + + + + +
+ + + + +
+ +
+

+ ol.format.IGC +

+ +
+ +
+
+ + + + +
+

new IGC

+ + +
Stability: experimental
+ + + + +
+
+ + + + + + + + +
Parameters:
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
NameTypeArgumentDescription
options + + +olx.format.IGCOptions + + + + + + <optional>
+ + + +

Options.

+ + + +
+ + + + + + + + + + + + + + + + + + + +
Source:
+
  • igcformat.js, line 30
+ + + + + + + +
+ + + + + + + + + +
+ + +
+ + + + + + + + + + + + + + + + + + + + +
+ +
+ + + + +
+ + + +
+ + + + + + \ No newline at end of file diff --git a/float-no-zero/apidoc/ol.format.KML.html b/float-no-zero/apidoc/ol.format.KML.html new file mode 100644 index 0000000000..258bfc7b47 --- /dev/null +++ b/float-no-zero/apidoc/ol.format.KML.html @@ -0,0 +1,360 @@ + + + + + OpenLayers 3 API Documentation - Class: ol.format.KML + + + + + + + + + + + + + + + + +
+ + + + +
+ +
+

+ ol.format.KML +

+ +
+ +
+
+ + + + +
+

new KML

+ + +
Stability: experimental
+ + + + +
+
+ + + + + + + + +
Parameters:
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
NameTypeArgumentDescription
options + + +olx.format.KMLOptions + + + + + + <optional>
+ + + +

Options.

+ + + +
+ + + + + + + + + + + + + + + + + + + +
Source:
+
  • kmlformat.js, line 58
+ + + + + + + +
+ + + + + + + + + +
+ + +
+ + + + + + + + + + + + + + + + +

Methods

+ +
+ +
+

readName

+ + +
Stability: experimental
+ + + + +
+
+ + + + + + + + +
Parameters:
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
NameTypeDescription
source + + +Document +| + +Node +| + +string + + + +

Souce.

+ + + +
+ + + + + + + + + + + + + + + + + + + +
Source:
+
  • kmlformat.js, line 1512
+ + + + + + + +
+ + + + + + + +
Returns:
+ + +
+

Name.

+
+ + + +
+
+ Type +
+
+ +string +| + +undefined + + +
+
+ + + + +
+ +
+ + + + + +
+ +
+ + + + +
+ + + +
+ + + + + + \ No newline at end of file diff --git a/float-no-zero/apidoc/ol.format.TopoJSON.html b/float-no-zero/apidoc/ol.format.TopoJSON.html new file mode 100644 index 0000000000..11309747bd --- /dev/null +++ b/float-no-zero/apidoc/ol.format.TopoJSON.html @@ -0,0 +1,213 @@ + + + + + OpenLayers 3 API Documentation - Class: ol.format.TopoJSON + + + + + + + + + + + + + + + + +
+ + + + +
+ +
+

+ ol.format.TopoJSON +

+ +
+ +
+
+ + + + +
+

new TopoJSON

+ + +
Stability: experimental
+ + + + +
+
+ + + + + + + + +
Parameters:
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
NameTypeArgumentDescription
options + + +olx.format.TopoJSONOptions + + + + + + <optional>
+ + + +

Options.

+ + + +
+ + + + + + + + + + + + + + + + + + + +
Source:
+
  • topojsonformat.js, line 24
+ + + + + + + +
+ + + + + + + + + +
+ + +
+ + + + + + + + + + + + + + + + + + + + +
+ +
+ + + + +
+ + + +
+ + + + + + \ No newline at end of file diff --git a/float-no-zero/apidoc/ol.geom.Circle.html b/float-no-zero/apidoc/ol.geom.Circle.html new file mode 100644 index 0000000000..a73f2f549d --- /dev/null +++ b/float-no-zero/apidoc/ol.geom.Circle.html @@ -0,0 +1,2182 @@ + + + + + OpenLayers 3 API Documentation - Class: ol.geom.Circle + + + + + + + + + + + + + + + + +
+ + + + +
+ +
+

+ ol.geom. + + ol.geom.Circle +

+ +
+ +
+
+ + + + +
+

new Circle

+ + +
Stability: experimental
+ + + + +
+
+ + + + + + + + +
Parameters:
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
NameTypeArgumentDescription
center + + +ol.geom.RawPoint + + + + + + + +

Center.

radius + + +number + + + + + + <optional>
+ + + +

Radius.

layout + + +ol.geom.GeometryLayout + + + + + + <optional>
+ + + +

Layout.

+ + + +
+ + + + + + + + + + + + + + + + + + + +
Source:
+
  • circle.js, line 19
+ + + + + + + +
+ + + + + + + + + +
+ + +
+ + +

Extends

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

Members

+ +
+ +
+

getType

+ + +
Stability: experimental
+ + + + +
+
+ + + +
+ + + + + + + +
Inherited From:
+
+ + + + + + + + + + + + + +
Source:
+
  • geometry.js, line 148
+ + + + + + + +
+ + + +
+ +
+ + + +

Methods

+ +
+ +
+

dispatchChangeEvent

+ + +
Stability: experimental
+ + + + +
+
+ + + + + + + + + + +
+ + + + + + + +
Inherited From:
+
+ + + + + + + + + + + + + +
Source:
+
  • observable.js, line 35
+ + + + + + + +
+ + + + + + + + + +
+ + + +
+

getCenter

+ + +
Stability: experimental
+ + + + +
+
+ + + + + + + + + + +
+ + + + + + + + + + + + + + + + + + + +
Source:
+
  • circle.js, line 83
+ + + + + + + +
+ + + + + + + +
Returns:
+ + +
+

Center.

+
+ + + +
+
+ Type +
+
+ +ol.geom.RawPoint + + +
+
+ + + + +
+ + + +
+

getClosestPoint

+ + +
Stability: experimental
+ + + + +
+
+ + + + + + + + +
Parameters:
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
NameTypeArgumentDescription
point + + +ol.Coordinate + + + + + + + +

Point.

closestPoint + + +ol.Coordinate + + + + + + <optional>
+ + + +

Closest point.

+ + + +
+ + + + + + + +
Inherited From:
+
+ + + + + + + + + + + + + +
Source:
+
  • geometry.js, line 103
+ + + + + + + +
+ + + + + + + +
Returns:
+ + +
+

Closest point.

+
+ + + +
+
+ Type +
+
+ +ol.Coordinate + + +
+
+ + + + +
+ + + +
+

getFirstCoordinate

+ + +
Stability: not documented
+ + + + +
+
+ + + + + + + + + + +
+ + + + + + + +
Inherited From:
+
+ + + + + + + + + + + + + +
Source:
+
  • simplegeometry.js, line 105
+ + + + + + + +
+ + + + + + + +
Returns:
+ + +
+

First coordinate.

+
+ + + +
+
+ Type +
+
+ +ol.Coordinate + + +
+
+ + + + +
+ + + +
+

getLastCoordinate

+ + +
Stability: not documented
+ + + + +
+
+ + + + + + + + + + +
+ + + + + + + +
Inherited From:
+
+ + + + + + + + + + + + + +
Source:
+
  • simplegeometry.js, line 121
+ + + + + + + +
+ + + + + + + +
Returns:
+ + +
+

Last point.

+
+ + + +
+
+ Type +
+
+ +ol.Coordinate + + +
+
+ + + + +
+ + + +
+

getLayout

+ + +
Stability: experimental
+ + + + +
+
+ + + + + + + + + + +
+ + + + + + + +
Inherited From:
+
+ + + + + + + + + + + + + +
Source:
+
  • simplegeometry.js, line 130
+ + + + + + + +
+ + + + + + + +
Returns:
+ + +
+

Layout.

+
+ + + +
+
+ Type +
+
+ +ol.geom.GeometryLayout + + +
+
+ + + + +
+ + + +
+

getRadius

+ + +
Stability: experimental
+ + + + +
+
+ + + + + + + + + + +
+ + + + + + + + + + + + + + + + + + + +
Source:
+
  • circle.js, line 110
+ + + + + + + +
+ + + + + + + +
Returns:
+ + +
+

Radius.

+
+ + + +
+
+ Type +
+
+ +number + + +
+
+ + + + +
+ + + +
+

on

+ + +
Stability: experimental
+ + + + +
+
+ + +
+

Listen for a certain type of event.

+
+ + + + + + + +
Parameters:
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
NameTypeArgumentDescription
type + + +string +| + +Array.<string> + + + + + + + +

The event type or array of event types.

listener + + +function + + + + + + + +

The listener function.

this + + +Object + + + + + + <optional>
+ + + +

The object to use as this in listener.

+ + + +
+ + + + + + + +
Inherited From:
+
+ + + + + + + + + + + + + +
Source:
+
  • observable.js, line 58
+ + + + + + + +
+ + + + + + + +
Returns:
+ + +
+

Unique key for the listener.

+
+ + + +
+
+ Type +
+
+ +goog.events.Key + + +
+
+ + + + +
+ + + +
+

once

+ + +
Stability: experimental
+ + + + +
+
+ + +
+

Listen once for a certain type of event.

+
+ + + + + + + +
Parameters:
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
NameTypeArgumentDescription
type + + +string +| + +Array.<string> + + + + + + + +

The event type or array of event types.

listener + + +function + + + + + + + +

The listener function.

this + + +Object + + + + + + <optional>
+ + + +

The object to use as this in listener.

+ + + +
+ + + + + + + +
Inherited From:
+
+ + + + + + + + + + + + + +
Source:
+
  • observable.js, line 71
+ + + + + + + +
+ + + + + + + +
Returns:
+ + +
+

Unique key for the listener.

+
+ + + +
+
+ Type +
+
+ +goog.events.Key + + +
+
+ + + + +
+ + + +
+

setCenter

+ + +
Stability: experimental
+ + + + +
+
+ + + + + + + + +
Parameters:
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
NameTypeDescription
center + + +ol.geom.RawPoint + + + +

Center.

+ + + +
+ + + + + + + + + + + + + + + + + + + +
Source:
+
  • circle.js, line 146
+ + + + + + + +
+ + + + + + + + + +
+ + + +
+

setCenterAndRadius

+ + +
Stability: experimental
+ + + + +
+
+ + + + + + + + +
Parameters:
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
NameTypeArgumentDescription
center + + +ol.geom.RawPoint + + + + + + + +

Center.

radius + + +number + + + + + + + +

Radius.

layout + + +ol.geom.GeometryLayout + + + + + + <optional>
+ + + +

Layout.

+ + + +
+ + + + + + + + + + + + + + + + + + + +
Source:
+
  • circle.js, line 166
+ + + + + + + +
+ + + + + + + + + +
+ + + +
+

setRadius

+ + +
Stability: experimental
+ + + + +
+
+ + + + + + + + +
Parameters:
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
NameTypeDescription
radius + + +number + + + +

Radius.

+ + + +
+ + + + + + + + + + + + + + + + + + + +
Source:
+
  • circle.js, line 205
+ + + + + + + +
+ + + + + + + + + +
+ + + +
+

un

+ + +
Stability: experimental
+ + + + +
+
+ + +
+

Unlisten for a certain type of event.

+
+ + + + + + + +
Parameters:
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
NameTypeArgumentDescription
type + + +string +| + +Array.<string> + + + + + + + +

The event type or array of event types.

listener + + +function + + + + + + + +

The listener function.

this + + +Object + + + + + + <optional>
+ + + +

The object to use as this in listener.

+ + + +
+ + + + + + + +
Inherited From:
+
+ + + + + + + + + + + + + +
Source:
+
  • observable.js, line 83
+ + + + + + + +
+ + + + + + + + + +
+ + + +
+

unByKey

+ + +
Stability: experimental
+ + + + +
+
+ + +
+

Removes an event listener using the key returned by on() or once().

+
+ + + + + + + +
Parameters:
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
NameTypeDescription
key + + +goog.events.Key + + + +

Key.

+ + + +
+ + + + + + + +
Inherited From:
+
+ + + + + + + + + + + + + +
Source:
+
  • observable.js, line 93
+ + + + + + + +
+ + + + + + + + + +
+ +
+ + + + + +
+ +
+ + + + +
+ + + +
+ + + + + + \ No newline at end of file diff --git a/float-no-zero/apidoc/ol.geom.Geometry.html b/float-no-zero/apidoc/ol.geom.Geometry.html new file mode 100644 index 0000000000..156c45dbaf --- /dev/null +++ b/float-no-zero/apidoc/ol.geom.Geometry.html @@ -0,0 +1,1205 @@ + + + + + OpenLayers 3 API Documentation - Class: ol.geom.Geometry + + + + + + + + + + + + + + + + +
+ + + + +
+ +
+

+ ol.geom. + + ol.geom.Geometry +

+ +
+ +
+
+ + + + +
+

new Geometry

+ + +
Stability: experimental
+ + + + +
+
+ + + + + + + + + + +
+ + + + + + + + + + + + + + + + + + + +
Source:
+
  • geometry.js, line 42
+ + + + + + + +
+ + + + + + + + + +
+ + +
+ + +

Extends

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

Members

+ +
+ +
+

getType

+ + +
Stability: experimental
+ + + + +
+
+ + + +
+ + + + + + + + + + + + + + + + + + + +
Source:
+
  • geometry.js, line 148
+ + + + + + + +
+ + + +
+ +
+ + + +

Methods

+ +
+ +
+

dispatchChangeEvent

+ + +
Stability: experimental
+ + + + +
+
+ + + + + + + + + + +
+ + + + + + + +
Inherited From:
+
+ + + + + + + + + + + + + +
Source:
+
  • observable.js, line 35
+ + + + + + + +
+ + + + + + + + + +
+ + + +
+

getClosestPoint

+ + +
Stability: experimental
+ + + + +
+
+ + + + + + + + +
Parameters:
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
NameTypeArgumentDescription
point + + +ol.Coordinate + + + + + + + +

Point.

closestPoint + + +ol.Coordinate + + + + + + <optional>
+ + + +

Closest point.

+ + + +
+ + + + + + + + + + + + + + + + + + + +
Source:
+
  • geometry.js, line 103
+ + + + + + + +
+ + + + + + + +
Returns:
+ + +
+

Closest point.

+
+ + + +
+
+ Type +
+
+ +ol.Coordinate + + +
+
+ + + + +
+ + + +
+

on

+ + +
Stability: experimental
+ + + + +
+
+ + +
+

Listen for a certain type of event.

+
+ + + + + + + +
Parameters:
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
NameTypeArgumentDescription
type + + +string +| + +Array.<string> + + + + + + + +

The event type or array of event types.

listener + + +function + + + + + + + +

The listener function.

this + + +Object + + + + + + <optional>
+ + + +

The object to use as this in listener.

+ + + +
+ + + + + + + +
Inherited From:
+
+ + + + + + + + + + + + + +
Source:
+
  • observable.js, line 58
+ + + + + + + +
+ + + + + + + +
Returns:
+ + +
+

Unique key for the listener.

+
+ + + +
+
+ Type +
+
+ +goog.events.Key + + +
+
+ + + + +
+ + + +
+

once

+ + +
Stability: experimental
+ + + + +
+
+ + +
+

Listen once for a certain type of event.

+
+ + + + + + + +
Parameters:
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
NameTypeArgumentDescription
type + + +string +| + +Array.<string> + + + + + + + +

The event type or array of event types.

listener + + +function + + + + + + + +

The listener function.

this + + +Object + + + + + + <optional>
+ + + +

The object to use as this in listener.

+ + + +
+ + + + + + + +
Inherited From:
+
+ + + + + + + + + + + + + +
Source:
+
  • observable.js, line 71
+ + + + + + + +
+ + + + + + + +
Returns:
+ + +
+

Unique key for the listener.

+
+ + + +
+
+ Type +
+
+ +goog.events.Key + + +
+
+ + + + +
+ + + +
+

un

+ + +
Stability: experimental
+ + + + +
+
+ + +
+

Unlisten for a certain type of event.

+
+ + + + + + + +
Parameters:
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
NameTypeArgumentDescription
type + + +string +| + +Array.<string> + + + + + + + +

The event type or array of event types.

listener + + +function + + + + + + + +

The listener function.

this + + +Object + + + + + + <optional>
+ + + +

The object to use as this in listener.

+ + + +
+ + + + + + + +
Inherited From:
+
+ + + + + + + + + + + + + +
Source:
+
  • observable.js, line 83
+ + + + + + + +
+ + + + + + + + + +
+ + + +
+

unByKey

+ + +
Stability: experimental
+ + + + +
+
+ + +
+

Removes an event listener using the key returned by on() or once().

+
+ + + + + + + +
Parameters:
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
NameTypeDescription
key + + +goog.events.Key + + + +

Key.

+ + + +
+ + + + + + + +
Inherited From:
+
+ + + + + + + + + + + + + +
Source:
+
  • observable.js, line 93
+ + + + + + + +
+ + + + + + + + + +
+ +
+ + + + + +
+ +
+ + + + +
+ + + +
+ + + + + + \ No newline at end of file diff --git a/float-no-zero/apidoc/ol.geom.GeometryCollection.html b/float-no-zero/apidoc/ol.geom.GeometryCollection.html new file mode 100644 index 0000000000..a6a3b4b433 --- /dev/null +++ b/float-no-zero/apidoc/ol.geom.GeometryCollection.html @@ -0,0 +1,1471 @@ + + + + + OpenLayers 3 API Documentation - Class: ol.geom.GeometryCollection + + + + + + + + + + + + + + + + +
+ + + + +
+ +
+

+ ol.geom. + + ol.geom.GeometryCollection +

+ +
+ +
+
+ + + + +
+

new GeometryCollection

+ + +
Stability: experimental
+ + + + +
+
+ + + + + + + + +
Parameters:
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
NameTypeArgumentDescription
geometries + + +Array.<ol.geom.Geometry>= + + + + + + <optional>
+ + + +

Geometries.

+ + + +
+ + + + + + + + + + + + + + + + + + + +
Source:
+
  • geometrycollection.js, line 20
+ + + + + + + +
+ + + + + + + + + +
+ + +
+ + +

Extends

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

Members

+ +
+ +
+

getType

+ + +
Stability: experimental
+ + + + +
+
+ + + +
+ + + + + + + +
Inherited From:
+
+ + + + + + + + + + + + + +
Source:
+
  • geometry.js, line 148
+ + + + + + + +
+ + + +
+ +
+ + + +

Methods

+ +
+ +
+

dispatchChangeEvent

+ + +
Stability: experimental
+ + + + +
+
+ + + + + + + + + + +
+ + + + + + + +
Inherited From:
+
+ + + + + + + + + + + + + +
Source:
+
  • observable.js, line 35
+ + + + + + + +
+ + + + + + + + + +
+ + + +
+

getClosestPoint

+ + +
Stability: experimental
+ + + + +
+
+ + + + + + + + +
Parameters:
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
NameTypeArgumentDescription
point + + +ol.Coordinate + + + + + + + +

Point.

closestPoint + + +ol.Coordinate + + + + + + <optional>
+ + + +

Closest point.

+ + + +
+ + + + + + + +
Inherited From:
+
+ + + + + + + + + + + + + +
Source:
+
  • geometry.js, line 103
+ + + + + + + +
+ + + + + + + +
Returns:
+ + +
+

Closest point.

+
+ + + +
+
+ Type +
+
+ +ol.Coordinate + + +
+
+ + + + +
+ + + +
+

getGeometries

+ + +
Stability: experimental
+ + + + +
+
+ + + + + + + + + + +
+ + + + + + + + + + + + + + + + + + + +
Source:
+
  • geometrycollection.js, line 149
+ + + + + + + +
+ + + + + + + +
Returns:
+ + +
+

Geometries.

+
+ + + +
+
+ Type +
+
+ +Array.<ol.geom.Geometry> + + +
+
+ + + + +
+ + + +
+

on

+ + +
Stability: experimental
+ + + + +
+
+ + +
+

Listen for a certain type of event.

+
+ + + + + + + +
Parameters:
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
NameTypeArgumentDescription
type + + +string +| + +Array.<string> + + + + + + + +

The event type or array of event types.

listener + + +function + + + + + + + +

The listener function.

this + + +Object + + + + + + <optional>
+ + + +

The object to use as this in listener.

+ + + +
+ + + + + + + +
Inherited From:
+
+ + + + + + + + + + + + + +
Source:
+
  • observable.js, line 58
+ + + + + + + +
+ + + + + + + +
Returns:
+ + +
+

Unique key for the listener.

+
+ + + +
+
+ Type +
+
+ +goog.events.Key + + +
+
+ + + + +
+ + + +
+

once

+ + +
Stability: experimental
+ + + + +
+
+ + +
+

Listen once for a certain type of event.

+
+ + + + + + + +
Parameters:
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
NameTypeArgumentDescription
type + + +string +| + +Array.<string> + + + + + + + +

The event type or array of event types.

listener + + +function + + + + + + + +

The listener function.

this + + +Object + + + + + + <optional>
+ + + +

The object to use as this in listener.

+ + + +
+ + + + + + + +
Inherited From:
+
+ + + + + + + + + + + + + +
Source:
+
  • observable.js, line 71
+ + + + + + + +
+ + + + + + + +
Returns:
+ + +
+

Unique key for the listener.

+
+ + + +
+
+ Type +
+
+ +goog.events.Key + + +
+
+ + + + +
+ + + +
+

setGeometries

+ + +
Stability: experimental
+ + + + +
+
+ + + + + + + + +
Parameters:
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
NameTypeDescription
geometries + + +Array.<ol.geom.Geometry> + + + +

Geometries.

+ + + +
+ + + + + + + + + + + + + + + + + + + +
Source:
+
  • geometrycollection.js, line 227
+ + + + + + + +
+ + + + + + + + + +
+ + + +
+

un

+ + +
Stability: experimental
+ + + + +
+
+ + +
+

Unlisten for a certain type of event.

+
+ + + + + + + +
Parameters:
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
NameTypeArgumentDescription
type + + +string +| + +Array.<string> + + + + + + + +

The event type or array of event types.

listener + + +function + + + + + + + +

The listener function.

this + + +Object + + + + + + <optional>
+ + + +

The object to use as this in listener.

+ + + +
+ + + + + + + +
Inherited From:
+
+ + + + + + + + + + + + + +
Source:
+
  • observable.js, line 83
+ + + + + + + +
+ + + + + + + + + +
+ + + +
+

unByKey

+ + +
Stability: experimental
+ + + + +
+
+ + +
+

Removes an event listener using the key returned by on() or once().

+
+ + + + + + + +
Parameters:
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
NameTypeDescription
key + + +goog.events.Key + + + +

Key.

+ + + +
+ + + + + + + +
Inherited From:
+
+ + + + + + + + + + + + + +
Source:
+
  • observable.js, line 93
+ + + + + + + +
+ + + + + + + + + +
+ +
+ + + + + +
+ +
+ + + + +
+ + + +
+ + + + + + \ No newline at end of file diff --git a/float-no-zero/apidoc/ol.geom.LineString.html b/float-no-zero/apidoc/ol.geom.LineString.html new file mode 100644 index 0000000000..15adb54e8a --- /dev/null +++ b/float-no-zero/apidoc/ol.geom.LineString.html @@ -0,0 +1,2080 @@ + + + + + OpenLayers 3 API Documentation - Class: ol.geom.LineString + + + + + + + + + + + + + + + + +
+ + + + +
+ +
+

+ ol.geom. + + ol.geom.LineString +

+ +
+ +
+
+ + + + +
+

new LineString

+ + +
Stability: experimental
+ + + + +
+
+ + + + + + + + +
Parameters:
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
NameTypeArgumentDescription
coordinates + + +ol.geom.RawLineString + + + + + + + +

Coordinates.

layout + + +ol.geom.GeometryLayout + + + + + + <optional>
+ + + +

Layout.

+ + + +
+ + + + + + + + + + + + + + + + + + + +
Source:
+
  • linestring.js, line 19
+ + + + + + + +
+ + + + + + + + + +
+ + +
+ + +

Extends

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

Members

+ +
+ +
+

getType

+ + +
Stability: experimental
+ + + + +
+
+ + + +
+ + + + + + + +
Inherited From:
+
+ + + + + + + + + + + + + +
Source:
+
  • geometry.js, line 148
+ + + + + + + +
+ + + +
+ +
+ + + +

Methods

+ +
+ +
+

dispatchChangeEvent

+ + +
Stability: experimental
+ + + + +
+
+ + + + + + + + + + +
+ + + + + + + +
Inherited From:
+
+ + + + + + + + + + + + + +
Source:
+
  • observable.js, line 35
+ + + + + + + +
+ + + + + + + + + +
+ + + +
+

getClosestPoint

+ + +
Stability: experimental
+ + + + +
+
+ + + + + + + + +
Parameters:
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
NameTypeArgumentDescription
point + + +ol.Coordinate + + + + + + + +

Point.

closestPoint + + +ol.Coordinate + + + + + + <optional>
+ + + +

Closest point.

+ + + +
+ + + + + + + +
Inherited From:
+
+ + + + + + + + + + + + + +
Source:
+
  • geometry.js, line 103
+ + + + + + + +
+ + + + + + + +
Returns:
+ + +
+

Closest point.

+
+ + + +
+
+ Type +
+
+ +ol.Coordinate + + +
+
+ + + + +
+ + + +
+

getCoordinateAtM

+ + +
Stability: not documented
+ + + + +
+
+ + +
+

Returns the coordinate at m using linear interpolation, or null if no +such coordinate exists.

+

opt_extrapolate controls extrapolation beyond the range of Ms in the +MultiLineString. If opt_extrapolate is true then Ms less than the first +M will return the first coordinate and Ms greater than the last M will +return the last coordinate.

+
+ + + + + + + +
Parameters:
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
NameTypeArgumentDescription
m + + +number + + + + + + + +

M.

extrapolate + + +boolean + + + + + + <optional>
+ + + +

Extrapolate.

+ + + +
+ + + + + + + + + + + + + + + + + + + +
Source:
+
  • linestring.js, line 96
+ + + + + + + +
+ + + + + + + +
Returns:
+ + +
+

Coordinate.

+
+ + + +
+
+ Type +
+
+ +ol.Coordinate + + +
+
+ + + + +
+ + + +
+

getCoordinates

+ + +
Stability: experimental
+ + + + +
+
+ + + + + + + + + + +
+ + + + + + + + + + + + + + + + + + + +
Source:
+
  • linestring.js, line 111
+ + + + + + + +
+ + + + + + + +
Returns:
+ + +
+

Coordinates.

+
+ + + +
+
+ Type +
+
+ +ol.geom.RawLineString + + +
+
+ + + + +
+ + + +
+

getFirstCoordinate

+ + +
Stability: not documented
+ + + + +
+
+ + + + + + + + + + +
+ + + + + + + +
Inherited From:
+
+ + + + + + + + + + + + + +
Source:
+
  • simplegeometry.js, line 105
+ + + + + + + +
+ + + + + + + +
Returns:
+ + +
+

First coordinate.

+
+ + + +
+
+ Type +
+
+ +ol.Coordinate + + +
+
+ + + + +
+ + + +
+

getLastCoordinate

+ + +
Stability: not documented
+ + + + +
+
+ + + + + + + + + + +
+ + + + + + + +
Inherited From:
+
+ + + + + + + + + + + + + +
Source:
+
  • simplegeometry.js, line 121
+ + + + + + + +
+ + + + + + + +
Returns:
+ + +
+

Last point.

+
+ + + +
+
+ Type +
+
+ +ol.Coordinate + + +
+
+ + + + +
+ + + +
+

getLayout

+ + +
Stability: experimental
+ + + + +
+
+ + + + + + + + + + +
+ + + + + + + +
Inherited From:
+
+ + + + + + + + + + + + + +
Source:
+
  • simplegeometry.js, line 130
+ + + + + + + +
+ + + + + + + +
Returns:
+ + +
+

Layout.

+
+ + + +
+
+ Type +
+
+ +ol.geom.GeometryLayout + + +
+
+ + + + +
+ + + +
+

getLength

+ + +
Stability: experimental
+ + + + +
+
+ + + + + + + + + + +
+ + + + + + + + + + + + + + + + + + + +
Source:
+
  • linestring.js, line 121
+ + + + + + + +
+ + + + + + + +
Returns:
+ + +
+

Length.

+
+ + + +
+
+ Type +
+
+ +number + + +
+
+ + + + +
+ + + +
+

on

+ + +
Stability: experimental
+ + + + +
+
+ + +
+

Listen for a certain type of event.

+
+ + + + + + + +
Parameters:
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
NameTypeArgumentDescription
type + + +string +| + +Array.<string> + + + + + + + +

The event type or array of event types.

listener + + +function + + + + + + + +

The listener function.

this + + +Object + + + + + + <optional>
+ + + +

The object to use as this in listener.

+ + + +
+ + + + + + + +
Inherited From:
+
+ + + + + + + + + + + + + +
Source:
+
  • observable.js, line 58
+ + + + + + + +
+ + + + + + + +
Returns:
+ + +
+

Unique key for the listener.

+
+ + + +
+
+ Type +
+
+ +goog.events.Key + + +
+
+ + + + +
+ + + +
+

once

+ + +
Stability: experimental
+ + + + +
+
+ + +
+

Listen once for a certain type of event.

+
+ + + + + + + +
Parameters:
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
NameTypeArgumentDescription
type + + +string +| + +Array.<string> + + + + + + + +

The event type or array of event types.

listener + + +function + + + + + + + +

The listener function.

this + + +Object + + + + + + <optional>
+ + + +

The object to use as this in listener.

+ + + +
+ + + + + + + +
Inherited From:
+
+ + + + + + + + + + + + + +
Source:
+
  • observable.js, line 71
+ + + + + + + +
+ + + + + + + +
Returns:
+ + +
+

Unique key for the listener.

+
+ + + +
+
+ Type +
+
+ +goog.events.Key + + +
+
+ + + + +
+ + + +
+

setCoordinates

+ + +
Stability: experimental
+ + + + +
+
+ + + + + + + + +
Parameters:
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
NameTypeArgumentDescription
coordinates + + +ol.geom.RawLineString + + + + + + + +

Coordinates.

layout + + +ol.geom.GeometryLayout + + + + + + <optional>
+ + + +

Layout.

+ + + +
+ + + + + + + + + + + + + + + + + + + +
Source:
+
  • linestring.js, line 170
+ + + + + + + +
+ + + + + + + + + +
+ + + +
+

un

+ + +
Stability: experimental
+ + + + +
+
+ + +
+

Unlisten for a certain type of event.

+
+ + + + + + + +
Parameters:
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
NameTypeArgumentDescription
type + + +string +| + +Array.<string> + + + + + + + +

The event type or array of event types.

listener + + +function + + + + + + + +

The listener function.

this + + +Object + + + + + + <optional>
+ + + +

The object to use as this in listener.

+ + + +
+ + + + + + + +
Inherited From:
+
+ + + + + + + + + + + + + +
Source:
+
  • observable.js, line 83
+ + + + + + + +
+ + + + + + + + + +
+ + + +
+

unByKey

+ + +
Stability: experimental
+ + + + +
+
+ + +
+

Removes an event listener using the key returned by on() or once().

+
+ + + + + + + +
Parameters:
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
NameTypeDescription
key + + +goog.events.Key + + + +

Key.

+ + + +
+ + + + + + + +
Inherited From:
+
+ + + + + + + + + + + + + +
Source:
+
  • observable.js, line 93
+ + + + + + + +
+ + + + + + + + + +
+ +
+ + + + + +
+ +
+ + + + +
+ + + +
+ + + + + + \ No newline at end of file diff --git a/float-no-zero/apidoc/ol.geom.LinearRing.html b/float-no-zero/apidoc/ol.geom.LinearRing.html new file mode 100644 index 0000000000..0d62cc26fc --- /dev/null +++ b/float-no-zero/apidoc/ol.geom.LinearRing.html @@ -0,0 +1,1898 @@ + + + + + OpenLayers 3 API Documentation - Class: ol.geom.LinearRing + + + + + + + + + + + + + + + + +
+ + + + +
+ +
+

+ ol.geom. + + ol.geom.LinearRing +

+ +
+ +
+
+ + + + +
+

new LinearRing

+ + +
Stability: experimental
+ + + + +
+
+ + + + + + + + +
Parameters:
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
NameTypeArgumentDescription
coordinates + + +ol.geom.RawLinearRing + + + + + + + +

Coordinates.

layout + + +ol.geom.GeometryLayout + + + + + + <optional>
+ + + +

Layout.

+ + + +
+ + + + + + + + + + + + + + + + + + + +
Source:
+
  • linearring.js, line 19
+ + + + + + + +
+ + + + + + + + + +
+ + +
+ + +

Extends

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

Members

+ +
+ +
+

getType

+ + +
Stability: experimental
+ + + + +
+
+ + + +
+ + + + + + + +
Inherited From:
+
+ + + + + + + + + + + + + +
Source:
+
  • geometry.js, line 148
+ + + + + + + +
+ + + +
+ +
+ + + +

Methods

+ +
+ +
+

dispatchChangeEvent

+ + +
Stability: experimental
+ + + + +
+
+ + + + + + + + + + +
+ + + + + + + +
Inherited From:
+
+ + + + + + + + + + + + + +
Source:
+
  • observable.js, line 35
+ + + + + + + +
+ + + + + + + + + +
+ + + +
+

getArea

+ + +
Stability: experimental
+ + + + +
+
+ + + + + + + + + + +
+ + + + + + + + + + + + + + + + + + + +
Source:
+
  • linearring.js, line 75
+ + + + + + + +
+ + + + + + + +
Returns:
+ + +
+

Area.

+
+ + + +
+
+ Type +
+
+ +number + + +
+
+ + + + +
+ + + +
+

getClosestPoint

+ + +
Stability: experimental
+ + + + +
+
+ + + + + + + + +
Parameters:
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
NameTypeArgumentDescription
point + + +ol.Coordinate + + + + + + + +

Point.

closestPoint + + +ol.Coordinate + + + + + + <optional>
+ + + +

Closest point.

+ + + +
+ + + + + + + +
Inherited From:
+
+ + + + + + + + + + + + + +
Source:
+
  • geometry.js, line 103
+ + + + + + + +
+ + + + + + + +
Returns:
+ + +
+

Closest point.

+
+ + + +
+
+ Type +
+
+ +ol.Coordinate + + +
+
+ + + + +
+ + + +
+

getCoordinates

+ + +
Stability: experimental
+ + + + +
+
+ + + + + + + + + + +
+ + + + + + + + + + + + + + + + + + + +
Source:
+
  • linearring.js, line 85
+ + + + + + + +
+ + + + + + + +
Returns:
+ + +
+

Coordinates.

+
+ + + +
+
+ Type +
+
+ +ol.geom.RawLinearRing + + +
+
+ + + + +
+ + + +
+

getFirstCoordinate

+ + +
Stability: not documented
+ + + + +
+
+ + + + + + + + + + +
+ + + + + + + +
Inherited From:
+
+ + + + + + + + + + + + + +
Source:
+
  • simplegeometry.js, line 105
+ + + + + + + +
+ + + + + + + +
Returns:
+ + +
+

First coordinate.

+
+ + + +
+
+ Type +
+
+ +ol.Coordinate + + +
+
+ + + + +
+ + + +
+

getLastCoordinate

+ + +
Stability: not documented
+ + + + +
+
+ + + + + + + + + + +
+ + + + + + + +
Inherited From:
+
+ + + + + + + + + + + + + +
Source:
+
  • simplegeometry.js, line 121
+ + + + + + + +
+ + + + + + + +
Returns:
+ + +
+

Last point.

+
+ + + +
+
+ Type +
+
+ +ol.Coordinate + + +
+
+ + + + +
+ + + +
+

getLayout

+ + +
Stability: experimental
+ + + + +
+
+ + + + + + + + + + +
+ + + + + + + +
Inherited From:
+
+ + + + + + + + + + + + + +
Source:
+
  • simplegeometry.js, line 130
+ + + + + + + +
+ + + + + + + +
Returns:
+ + +
+

Layout.

+
+ + + +
+
+ Type +
+
+ +ol.geom.GeometryLayout + + +
+
+ + + + +
+ + + +
+

on

+ + +
Stability: experimental
+ + + + +
+
+ + +
+

Listen for a certain type of event.

+
+ + + + + + + +
Parameters:
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
NameTypeArgumentDescription
type + + +string +| + +Array.<string> + + + + + + + +

The event type or array of event types.

listener + + +function + + + + + + + +

The listener function.

this + + +Object + + + + + + <optional>
+ + + +

The object to use as this in listener.

+ + + +
+ + + + + + + +
Inherited From:
+
+ + + + + + + + + + + + + +
Source:
+
  • observable.js, line 58
+ + + + + + + +
+ + + + + + + +
Returns:
+ + +
+

Unique key for the listener.

+
+ + + +
+
+ Type +
+
+ +goog.events.Key + + +
+
+ + + + +
+ + + +
+

once

+ + +
Stability: experimental
+ + + + +
+
+ + +
+

Listen once for a certain type of event.

+
+ + + + + + + +
Parameters:
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
NameTypeArgumentDescription
type + + +string +| + +Array.<string> + + + + + + + +

The event type or array of event types.

listener + + +function + + + + + + + +

The listener function.

this + + +Object + + + + + + <optional>
+ + + +

The object to use as this in listener.

+ + + +
+ + + + + + + +
Inherited From:
+
+ + + + + + + + + + + + + +
Source:
+
  • observable.js, line 71
+ + + + + + + +
+ + + + + + + +
Returns:
+ + +
+

Unique key for the listener.

+
+ + + +
+
+ Type +
+
+ +goog.events.Key + + +
+
+ + + + +
+ + + +
+

setCoordinates

+ + +
Stability: experimental
+ + + + +
+
+ + + + + + + + +
Parameters:
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
NameTypeArgumentDescription
coordinates + + +ol.geom.RawLinearRing + + + + + + + +

Coordinates.

layout + + +ol.geom.GeometryLayout + + + + + + <optional>
+ + + +

Layout.

+ + + +
+ + + + + + + + + + + + + + + + + + + +
Source:
+
  • linearring.js, line 120
+ + + + + + + +
+ + + + + + + + + +
+ + + +
+

un

+ + +
Stability: experimental
+ + + + +
+
+ + +
+

Unlisten for a certain type of event.

+
+ + + + + + + +
Parameters:
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
NameTypeArgumentDescription
type + + +string +| + +Array.<string> + + + + + + + +

The event type or array of event types.

listener + + +function + + + + + + + +

The listener function.

this + + +Object + + + + + + <optional>
+ + + +

The object to use as this in listener.

+ + + +
+ + + + + + + +
Inherited From:
+
+ + + + + + + + + + + + + +
Source:
+
  • observable.js, line 83
+ + + + + + + +
+ + + + + + + + + +
+ + + +
+

unByKey

+ + +
Stability: experimental
+ + + + +
+
+ + +
+

Removes an event listener using the key returned by on() or once().

+
+ + + + + + + +
Parameters:
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
NameTypeDescription
key + + +goog.events.Key + + + +

Key.

+ + + +
+ + + + + + + +
Inherited From:
+
+ + + + + + + + + + + + + +
Source:
+
  • observable.js, line 93
+ + + + + + + +
+ + + + + + + + + +
+ +
+ + + + + +
+ +
+ + + + +
+ + + +
+ + + + + + \ No newline at end of file diff --git a/float-no-zero/apidoc/ol.geom.MultiLineString.html b/float-no-zero/apidoc/ol.geom.MultiLineString.html new file mode 100644 index 0000000000..aadd0e799a --- /dev/null +++ b/float-no-zero/apidoc/ol.geom.MultiLineString.html @@ -0,0 +1,2117 @@ + + + + + OpenLayers 3 API Documentation - Class: ol.geom.MultiLineString + + + + + + + + + + + + + + + + +
+ + + + +
+ +
+

+ ol.geom. + + ol.geom.MultiLineString +

+ +
+ +
+
+ + + + +
+

new MultiLineString

+ + +
Stability: experimental
+ + + + +
+
+ + + + + + + + +
Parameters:
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
NameTypeArgumentDescription
coordinates + + +ol.geom.RawMultiLineString + + + + + + + +

Coordinates.

layout + + +ol.geom.GeometryLayout + + + + + + <optional>
+ + + +

Layout.

+ + + +
+ + + + + + + + + + + + + + + + + + + +
Source:
+
  • multilinestring.js, line 22
+ + + + + + + +
+ + + + + + + + + +
+ + +
+ + +

Extends

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

Members

+ +
+ +
+

getType

+ + +
Stability: experimental
+ + + + +
+
+ + + +
+ + + + + + + +
Inherited From:
+
+ + + + + + + + + + + + + +
Source:
+
  • geometry.js, line 148
+ + + + + + + +
+ + + +
+ +
+ + + +

Methods

+ +
+ +
+

dispatchChangeEvent

+ + +
Stability: experimental
+ + + + +
+
+ + + + + + + + + + +
+ + + + + + + +
Inherited From:
+
+ + + + + + + + + + + + + +
Source:
+
  • observable.js, line 35
+ + + + + + + +
+ + + + + + + + + +
+ + + +
+

getClosestPoint

+ + +
Stability: experimental
+ + + + +
+
+ + + + + + + + +
Parameters:
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
NameTypeArgumentDescription
point + + +ol.Coordinate + + + + + + + +

Point.

closestPoint + + +ol.Coordinate + + + + + + <optional>
+ + + +

Closest point.

+ + + +
+ + + + + + + +
Inherited From:
+
+ + + + + + + + + + + + + +
Source:
+
  • geometry.js, line 103
+ + + + + + + +
+ + + + + + + +
Returns:
+ + +
+

Closest point.

+
+ + + +
+
+ Type +
+
+ +ol.Coordinate + + +
+
+ + + + +
+ + + +
+

getCoordinateAtM

+ + +
Stability: not documented
+ + + + +
+
+ + +
+

Returns the coordinate at m using linear interpolation, or null if no +such coordinate exists.

+

opt_extrapolate controls extrapolation beyond the range of Ms in the +MultiLineString. If opt_extrapolate is true then Ms less than the first +M will return the first coordinate and Ms greater than the last M will +return the last coordinate.

+

opt_interpolate controls interpolation between consecutive LineStrings +within the MultiLineString. If opt_interpolate is true the coordinates +will be linearly interpolated between the last coordinate of one LineString +and the first coordinate of the next LineString. If opt_interpolate is +false then the function will return null for Ms falling between +LineStrings.

+
+ + + + + + + +
Parameters:
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
NameTypeArgumentDescription
m + + +number + + + + + + + +

M.

extrapolate + + +boolean + + + + + + <optional>
+ + + +

Extrapolate.

interpolate + + +boolean + + + + + + <optional>
+ + + +

Interpolate.

+ + + +
+ + + + + + + + + + + + + + + + + + + +
Source:
+
  • multilinestring.js, line 102
+ + + + + + + +
+ + + + + + + +
Returns:
+ + +
+

Coordinate.

+
+ + + +
+
+ Type +
+
+ +ol.Coordinate + + +
+
+ + + + +
+ + + +
+

getCoordinates

+ + +
Stability: experimental
+ + + + +
+
+ + + + + + + + + + +
+ + + + + + + + + + + + + + + + + + + +
Source:
+
  • multilinestring.js, line 120
+ + + + + + + +
+ + + + + + + +
Returns:
+ + +
+

Coordinates.

+
+ + + +
+
+ Type +
+
+ +ol.geom.RawMultiLineString + + +
+
+ + + + +
+ + + +
+

getFirstCoordinate

+ + +
Stability: not documented
+ + + + +
+
+ + + + + + + + + + +
+ + + + + + + +
Inherited From:
+
+ + + + + + + + + + + + + +
Source:
+
  • simplegeometry.js, line 105
+ + + + + + + +
+ + + + + + + +
Returns:
+ + +
+

First coordinate.

+
+ + + +
+
+ Type +
+
+ +ol.Coordinate + + +
+
+ + + + +
+ + + +
+

getLastCoordinate

+ + +
Stability: not documented
+ + + + +
+
+ + + + + + + + + + +
+ + + + + + + +
Inherited From:
+
+ + + + + + + + + + + + + +
Source:
+
  • simplegeometry.js, line 121
+ + + + + + + +
+ + + + + + + +
Returns:
+ + +
+

Last point.

+
+ + + +
+
+ Type +
+
+ +ol.Coordinate + + +
+
+ + + + +
+ + + +
+

getLayout

+ + +
Stability: experimental
+ + + + +
+
+ + + + + + + + + + +
+ + + + + + + +
Inherited From:
+
+ + + + + + + + + + + + + +
Source:
+
  • simplegeometry.js, line 130
+ + + + + + + +
+ + + + + + + +
Returns:
+ + +
+

Layout.

+
+ + + +
+
+ Type +
+
+ +ol.geom.GeometryLayout + + +
+
+ + + + +
+ + + +
+

getLineStrings

+ + +
Stability: experimental
+ + + + +
+
+ + + + + + + + + + +
+ + + + + + + + + + + + + + + + + + + +
Source:
+
  • multilinestring.js, line 138
+ + + + + + + +
+ + + + + + + +
Returns:
+ + +
+

LineStrings.

+
+ + + +
+
+ Type +
+
+ +Array.<ol.geom.LineString> + + +
+
+ + + + +
+ + + +
+

on

+ + +
Stability: experimental
+ + + + +
+
+ + +
+

Listen for a certain type of event.

+
+ + + + + + + +
Parameters:
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
NameTypeArgumentDescription
type + + +string +| + +Array.<string> + + + + + + + +

The event type or array of event types.

listener + + +function + + + + + + + +

The listener function.

this + + +Object + + + + + + <optional>
+ + + +

The object to use as this in listener.

+ + + +
+ + + + + + + +
Inherited From:
+
+ + + + + + + + + + + + + +
Source:
+
  • observable.js, line 58
+ + + + + + + +
+ + + + + + + +
Returns:
+ + +
+

Unique key for the listener.

+
+ + + +
+
+ Type +
+
+ +goog.events.Key + + +
+
+ + + + +
+ + + +
+

once

+ + +
Stability: experimental
+ + + + +
+
+ + +
+

Listen once for a certain type of event.

+
+ + + + + + + +
Parameters:
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
NameTypeArgumentDescription
type + + +string +| + +Array.<string> + + + + + + + +

The event type or array of event types.

listener + + +function + + + + + + + +

The listener function.

this + + +Object + + + + + + <optional>
+ + + +

The object to use as this in listener.

+ + + +
+ + + + + + + +
Inherited From:
+
+ + + + + + + + + + + + + +
Source:
+
  • observable.js, line 71
+ + + + + + + +
+ + + + + + + +
Returns:
+ + +
+

Unique key for the listener.

+
+ + + +
+
+ Type +
+
+ +goog.events.Key + + +
+
+ + + + +
+ + + +
+

setCoordinates

+ + +
Stability: experimental
+ + + + +
+
+ + + + + + + + +
Parameters:
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
NameTypeArgumentDescription
coordinates + + +ol.geom.RawMultiLineString + + + + + + + +

Coordinates.

layout + + +ol.geom.GeometryLayout + + + + + + <optional>
+ + + +

Layout.

+ + + +
+ + + + + + + + + + + + + + + + + + + +
Source:
+
  • multilinestring.js, line 201
+ + + + + + + +
+ + + + + + + + + +
+ + + +
+

un

+ + +
Stability: experimental
+ + + + +
+
+ + +
+

Unlisten for a certain type of event.

+
+ + + + + + + +
Parameters:
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
NameTypeArgumentDescription
type + + +string +| + +Array.<string> + + + + + + + +

The event type or array of event types.

listener + + +function + + + + + + + +

The listener function.

this + + +Object + + + + + + <optional>
+ + + +

The object to use as this in listener.

+ + + +
+ + + + + + + +
Inherited From:
+
+ + + + + + + + + + + + + +
Source:
+
  • observable.js, line 83
+ + + + + + + +
+ + + + + + + + + +
+ + + +
+

unByKey

+ + +
Stability: experimental
+ + + + +
+
+ + +
+

Removes an event listener using the key returned by on() or once().

+
+ + + + + + + +
Parameters:
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
NameTypeDescription
key + + +goog.events.Key + + + +

Key.

+ + + +
+ + + + + + + +
Inherited From:
+
+ + + + + + + + + + + + + +
Source:
+
  • observable.js, line 93
+ + + + + + + +
+ + + + + + + + + +
+ +
+ + + + + +
+ +
+ + + + +
+ + + +
+ + + + + + \ No newline at end of file diff --git a/float-no-zero/apidoc/ol.geom.MultiPoint.html b/float-no-zero/apidoc/ol.geom.MultiPoint.html new file mode 100644 index 0000000000..905174518d --- /dev/null +++ b/float-no-zero/apidoc/ol.geom.MultiPoint.html @@ -0,0 +1,1898 @@ + + + + + OpenLayers 3 API Documentation - Class: ol.geom.MultiPoint + + + + + + + + + + + + + + + + +
+ + + + +
+ +
+

+ ol.geom. + + ol.geom.MultiPoint +

+ +
+ +
+
+ + + + +
+

new MultiPoint

+ + +
Stability: experimental
+ + + + +
+
+ + + + + + + + +
Parameters:
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
NameTypeArgumentDescription
coordinates + + +ol.geom.RawMultiPoint + + + + + + + +

Coordinates.

layout + + +ol.geom.GeometryLayout + + + + + + <optional>
+ + + +

Layout.

+ + + +
+ + + + + + + + + + + + + + + + + + + +
Source:
+
  • multipoint.js, line 18
+ + + + + + + +
+ + + + + + + + + +
+ + +
+ + +

Extends

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

Members

+ +
+ +
+

getType

+ + +
Stability: experimental
+ + + + +
+
+ + + +
+ + + + + + + +
Inherited From:
+
+ + + + + + + + + + + + + +
Source:
+
  • geometry.js, line 148
+ + + + + + + +
+ + + +
+ +
+ + + +

Methods

+ +
+ +
+

dispatchChangeEvent

+ + +
Stability: experimental
+ + + + +
+
+ + + + + + + + + + +
+ + + + + + + +
Inherited From:
+
+ + + + + + + + + + + + + +
Source:
+
  • observable.js, line 35
+ + + + + + + +
+ + + + + + + + + +
+ + + +
+

getClosestPoint

+ + +
Stability: experimental
+ + + + +
+
+ + + + + + + + +
Parameters:
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
NameTypeArgumentDescription
point + + +ol.Coordinate + + + + + + + +

Point.

closestPoint + + +ol.Coordinate + + + + + + <optional>
+ + + +

Closest point.

+ + + +
+ + + + + + + +
Inherited From:
+
+ + + + + + + + + + + + + +
Source:
+
  • geometry.js, line 103
+ + + + + + + +
+ + + + + + + +
Returns:
+ + +
+

Closest point.

+
+ + + +
+
+ Type +
+
+ +ol.Coordinate + + +
+
+ + + + +
+ + + +
+

getCoordinates

+ + +
Stability: experimental
+ + + + +
+
+ + + + + + + + + + +
+ + + + + + + + + + + + + + + + + + + +
Source:
+
  • multipoint.js, line 66
+ + + + + + + +
+ + + + + + + +
Returns:
+ + +
+

Coordinates.

+
+ + + +
+
+ Type +
+
+ +ol.geom.RawMultiPoint + + +
+
+ + + + +
+ + + +
+

getFirstCoordinate

+ + +
Stability: not documented
+ + + + +
+
+ + + + + + + + + + +
+ + + + + + + +
Inherited From:
+
+ + + + + + + + + + + + + +
Source:
+
  • simplegeometry.js, line 105
+ + + + + + + +
+ + + + + + + +
Returns:
+ + +
+

First coordinate.

+
+ + + +
+
+ Type +
+
+ +ol.Coordinate + + +
+
+ + + + +
+ + + +
+

getLastCoordinate

+ + +
Stability: not documented
+ + + + +
+
+ + + + + + + + + + +
+ + + + + + + +
Inherited From:
+
+ + + + + + + + + + + + + +
Source:
+
  • simplegeometry.js, line 121
+ + + + + + + +
+ + + + + + + +
Returns:
+ + +
+

Last point.

+
+ + + +
+
+ Type +
+
+ +ol.Coordinate + + +
+
+ + + + +
+ + + +
+

getLayout

+ + +
Stability: experimental
+ + + + +
+
+ + + + + + + + + + +
+ + + + + + + +
Inherited From:
+
+ + + + + + + + + + + + + +
Source:
+
  • simplegeometry.js, line 130
+ + + + + + + +
+ + + + + + + +
Returns:
+ + +
+

Layout.

+
+ + + +
+
+ Type +
+
+ +ol.geom.GeometryLayout + + +
+
+ + + + +
+ + + +
+

getPoints

+ + +
Stability: experimental
+ + + + +
+
+ + + + + + + + + + +
+ + + + + + + + + + + + + + + + + + + +
Source:
+
  • multipoint.js, line 76
+ + + + + + + +
+ + + + + + + +
Returns:
+ + +
+

Points.

+
+ + + +
+
+ Type +
+
+ +Array.<ol.geom.Point> + + +
+
+ + + + +
+ + + +
+

on

+ + +
Stability: experimental
+ + + + +
+
+ + +
+

Listen for a certain type of event.

+
+ + + + + + + +
Parameters:
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
NameTypeArgumentDescription
type + + +string +| + +Array.<string> + + + + + + + +

The event type or array of event types.

listener + + +function + + + + + + + +

The listener function.

this + + +Object + + + + + + <optional>
+ + + +

The object to use as this in listener.

+ + + +
+ + + + + + + +
Inherited From:
+
+ + + + + + + + + + + + + +
Source:
+
  • observable.js, line 58
+ + + + + + + +
+ + + + + + + +
Returns:
+ + +
+

Unique key for the listener.

+
+ + + +
+
+ Type +
+
+ +goog.events.Key + + +
+
+ + + + +
+ + + +
+

once

+ + +
Stability: experimental
+ + + + +
+
+ + +
+

Listen once for a certain type of event.

+
+ + + + + + + +
Parameters:
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
NameTypeArgumentDescription
type + + +string +| + +Array.<string> + + + + + + + +

The event type or array of event types.

listener + + +function + + + + + + + +

The listener function.

this + + +Object + + + + + + <optional>
+ + + +

The object to use as this in listener.

+ + + +
+ + + + + + + +
Inherited From:
+
+ + + + + + + + + + + + + +
Source:
+
  • observable.js, line 71
+ + + + + + + +
+ + + + + + + +
Returns:
+ + +
+

Unique key for the listener.

+
+ + + +
+
+ Type +
+
+ +goog.events.Key + + +
+
+ + + + +
+ + + +
+

setCoordinates

+ + +
Stability: experimental
+ + + + +
+
+ + + + + + + + +
Parameters:
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
NameTypeArgumentDescription
coordinates + + +ol.geom.RawMultiPoint + + + + + + + +

Coordinates.

layout + + +ol.geom.GeometryLayout + + + + + + <optional>
+ + + +

Layout.

+ + + +
+ + + + + + + + + + + + + + + + + + + +
Source:
+
  • multipoint.js, line 101
+ + + + + + + +
+ + + + + + + + + +
+ + + +
+

un

+ + +
Stability: experimental
+ + + + +
+
+ + +
+

Unlisten for a certain type of event.

+
+ + + + + + + +
Parameters:
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
NameTypeArgumentDescription
type + + +string +| + +Array.<string> + + + + + + + +

The event type or array of event types.

listener + + +function + + + + + + + +

The listener function.

this + + +Object + + + + + + <optional>
+ + + +

The object to use as this in listener.

+ + + +
+ + + + + + + +
Inherited From:
+
+ + + + + + + + + + + + + +
Source:
+
  • observable.js, line 83
+ + + + + + + +
+ + + + + + + + + +
+ + + +
+

unByKey

+ + +
Stability: experimental
+ + + + +
+
+ + +
+

Removes an event listener using the key returned by on() or once().

+
+ + + + + + + +
Parameters:
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
NameTypeDescription
key + + +goog.events.Key + + + +

Key.

+ + + +
+ + + + + + + +
Inherited From:
+
+ + + + + + + + + + + + + +
Source:
+
  • observable.js, line 93
+ + + + + + + +
+ + + + + + + + + +
+ +
+ + + + + +
+ +
+ + + + +
+ + + +
+ + + + + + \ No newline at end of file diff --git a/float-no-zero/apidoc/ol.geom.MultiPolygon.html b/float-no-zero/apidoc/ol.geom.MultiPolygon.html new file mode 100644 index 0000000000..129a92b007 --- /dev/null +++ b/float-no-zero/apidoc/ol.geom.MultiPolygon.html @@ -0,0 +1,2070 @@ + + + + + OpenLayers 3 API Documentation - Class: ol.geom.MultiPolygon + + + + + + + + + + + + + + + + +
+ + + + +
+ +
+

+ ol.geom. + + ol.geom.MultiPolygon +

+ +
+ +
+
+ + + + +
+

new MultiPolygon

+ + +
Stability: experimental
+ + + + +
+
+ + + + + + + + +
Parameters:
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
NameTypeArgumentDescription
coordinates + + +ol.geom.RawMultiPolygon + + + + + + + +

Coordinates.

layout + + +ol.geom.GeometryLayout + + + + + + <optional>
+ + + +

Layout.

+ + + +
+ + + + + + + + + + + + + + + + + + + +
Source:
+
  • multipolygon.js, line 23
+ + + + + + + +
+ + + + + + + + + +
+ + +
+ + +

Extends

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

Members

+ +
+ +
+

getType

+ + +
Stability: experimental
+ + + + +
+
+ + + +
+ + + + + + + +
Inherited From:
+
+ + + + + + + + + + + + + +
Source:
+
  • geometry.js, line 148
+ + + + + + + +
+ + + +
+ +
+ + + +

Methods

+ +
+ +
+

dispatchChangeEvent

+ + +
Stability: experimental
+ + + + +
+
+ + + + + + + + + + +
+ + + + + + + +
Inherited From:
+
+ + + + + + + + + + + + + +
Source:
+
  • observable.js, line 35
+ + + + + + + +
+ + + + + + + + + +
+ + + +
+

getArea

+ + +
Stability: experimental
+ + + + +
+
+ + + + + + + + + + +
+ + + + + + + + + + + + + + + + + + + +
Source:
+
  • multipolygon.js, line 119
+ + + + + + + +
+ + + + + + + +
Returns:
+ + +
+

Area.

+
+ + + +
+
+ Type +
+
+ +number + + +
+
+ + + + +
+ + + +
+

getClosestPoint

+ + +
Stability: experimental
+ + + + +
+
+ + + + + + + + +
Parameters:
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
NameTypeArgumentDescription
point + + +ol.Coordinate + + + + + + + +

Point.

closestPoint + + +ol.Coordinate + + + + + + <optional>
+ + + +

Closest point.

+ + + +
+ + + + + + + +
Inherited From:
+
+ + + + + + + + + + + + + +
Source:
+
  • geometry.js, line 103
+ + + + + + + +
+ + + + + + + +
Returns:
+ + +
+

Closest point.

+
+ + + +
+
+ Type +
+
+ +ol.Coordinate + + +
+
+ + + + +
+ + + +
+

getCoordinates

+ + +
Stability: experimental
+ + + + +
+
+ + + + + + + + + + +
+ + + + + + + + + + + + + + + + + + + +
Source:
+
  • multipolygon.js, line 129
+ + + + + + + +
+ + + + + + + +
Returns:
+ + +
+

Coordinates.

+
+ + + +
+
+ Type +
+
+ +ol.geom.RawMultiPolygon + + +
+
+ + + + +
+ + + +
+

getFirstCoordinate

+ + +
Stability: not documented
+ + + + +
+
+ + + + + + + + + + +
+ + + + + + + +
Inherited From:
+
+ + + + + + + + + + + + + +
Source:
+
  • simplegeometry.js, line 105
+ + + + + + + +
+ + + + + + + +
Returns:
+ + +
+

First coordinate.

+
+ + + +
+
+ Type +
+
+ +ol.Coordinate + + +
+
+ + + + +
+ + + +
+

getInteriorPoints

+ + +
Stability: not documented
+ + + + +
+
+ + + + + + + + + + +
+ + + + + + + + + + + + + + + + + + + +
Source:
+
  • multipolygon.js, line 162
+ + + + + + + +
+ + + + + + + +
Returns:
+ + +
+

Interior points.

+
+ + + +
+
+ Type +
+
+ +ol.geom.MultiPoint + + +
+
+ + + + +
+ + + +
+

getLastCoordinate

+ + +
Stability: not documented
+ + + + +
+
+ + + + + + + + + + +
+ + + + + + + +
Inherited From:
+
+ + + + + + + + + + + + + +
Source:
+
  • simplegeometry.js, line 121
+ + + + + + + +
+ + + + + + + +
Returns:
+ + +
+

Last point.

+
+ + + +
+
+ Type +
+
+ +ol.Coordinate + + +
+
+ + + + +
+ + + +
+

getLayout

+ + +
Stability: experimental
+ + + + +
+
+ + + + + + + + + + +
+ + + + + + + +
Inherited From:
+
+ + + + + + + + + + + + + +
Source:
+
  • simplegeometry.js, line 130
+ + + + + + + +
+ + + + + + + +
Returns:
+ + +
+

Layout.

+
+ + + +
+
+ Type +
+
+ +ol.geom.GeometryLayout + + +
+
+ + + + +
+ + + +
+

getPolygons

+ + +
Stability: experimental
+ + + + +
+
+ + + + + + + + + + +
+ + + + + + + + + + + + + + + + + + + +
Source:
+
  • multipolygon.js, line 212
+ + + + + + + +
+ + + + + + + +
Returns:
+ + +
+

Polygons.

+
+ + + +
+
+ Type +
+
+ +Array.<ol.geom.Polygon> + + +
+
+ + + + +
+ + + +
+

on

+ + +
Stability: experimental
+ + + + +
+
+ + +
+

Listen for a certain type of event.

+
+ + + + + + + +
Parameters:
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
NameTypeArgumentDescription
type + + +string +| + +Array.<string> + + + + + + + +

The event type or array of event types.

listener + + +function + + + + + + + +

The listener function.

this + + +Object + + + + + + <optional>
+ + + +

The object to use as this in listener.

+ + + +
+ + + + + + + +
Inherited From:
+
+ + + + + + + + + + + + + +
Source:
+
  • observable.js, line 58
+ + + + + + + +
+ + + + + + + +
Returns:
+ + +
+

Unique key for the listener.

+
+ + + +
+
+ Type +
+
+ +goog.events.Key + + +
+
+ + + + +
+ + + +
+

once

+ + +
Stability: experimental
+ + + + +
+
+ + +
+

Listen once for a certain type of event.

+
+ + + + + + + +
Parameters:
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
NameTypeArgumentDescription
type + + +string +| + +Array.<string> + + + + + + + +

The event type or array of event types.

listener + + +function + + + + + + + +

The listener function.

this + + +Object + + + + + + <optional>
+ + + +

The object to use as this in listener.

+ + + +
+ + + + + + + +
Inherited From:
+
+ + + + + + + + + + + + + +
Source:
+
  • observable.js, line 71
+ + + + + + + +
+ + + + + + + +
Returns:
+ + +
+

Unique key for the listener.

+
+ + + +
+
+ Type +
+
+ +goog.events.Key + + +
+
+ + + + +
+ + + +
+

setCoordinates

+ + +
Stability: experimental
+ + + + +
+
+ + + + + + + + +
Parameters:
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
NameTypeArgumentDescription
coordinates + + +ol.geom.RawMultiPolygon + + + + + + + +

Coordinates.

layout + + +ol.geom.GeometryLayout + + + + + + <optional>
+ + + +

Layout.

+ + + +
+ + + + + + + + + + + + + + + + + + + +
Source:
+
  • multipolygon.js, line 245
+ + + + + + + +
+ + + + + + + + + +
+ + + +
+

un

+ + +
Stability: experimental
+ + + + +
+
+ + +
+

Unlisten for a certain type of event.

+
+ + + + + + + +
Parameters:
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
NameTypeArgumentDescription
type + + +string +| + +Array.<string> + + + + + + + +

The event type or array of event types.

listener + + +function + + + + + + + +

The listener function.

this + + +Object + + + + + + <optional>
+ + + +

The object to use as this in listener.

+ + + +
+ + + + + + + +
Inherited From:
+
+ + + + + + + + + + + + + +
Source:
+
  • observable.js, line 83
+ + + + + + + +
+ + + + + + + + + +
+ + + +
+

unByKey

+ + +
Stability: experimental
+ + + + +
+
+ + +
+

Removes an event listener using the key returned by on() or once().

+
+ + + + + + + +
Parameters:
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
NameTypeDescription
key + + +goog.events.Key + + + +

Key.

+ + + +
+ + + + + + + +
Inherited From:
+
+ + + + + + + + + + + + + +
Source:
+
  • observable.js, line 93
+ + + + + + + +
+ + + + + + + + + +
+ +
+ + + + + +
+ +
+ + + + +
+ + + +
+ + + + + + \ No newline at end of file diff --git a/float-no-zero/apidoc/ol.geom.Point.html b/float-no-zero/apidoc/ol.geom.Point.html new file mode 100644 index 0000000000..16f32834f4 --- /dev/null +++ b/float-no-zero/apidoc/ol.geom.Point.html @@ -0,0 +1,1812 @@ + + + + + OpenLayers 3 API Documentation - Class: ol.geom.Point + + + + + + + + + + + + + + + + +
+ + + + +
+ +
+

+ ol.geom. + + ol.geom.Point +

+ +
+ +
+
+ + + + +
+

new Point

+ + +
Stability: experimental
+ + + + +
+
+ + + + + + + + +
Parameters:
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
NameTypeArgumentDescription
coordinates + + +ol.geom.RawPoint + + + + + + + +

Coordinates.

layout + + +ol.geom.GeometryLayout + + + + + + <optional>
+ + + +

Layout.

+ + + +
+ + + + + + + + + + + + + + + + + + + +
Source:
+
  • point.js, line 18
+ + + + + + + +
+ + + + + + + + + +
+ + +
+ + +

Extends

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

Members

+ +
+ +
+

getType

+ + +
Stability: experimental
+ + + + +
+
+ + + +
+ + + + + + + +
Inherited From:
+
+ + + + + + + + + + + + + +
Source:
+
  • geometry.js, line 148
+ + + + + + + +
+ + + +
+ +
+ + + +

Methods

+ +
+ +
+

dispatchChangeEvent

+ + +
Stability: experimental
+ + + + +
+
+ + + + + + + + + + +
+ + + + + + + +
Inherited From:
+
+ + + + + + + + + + + + + +
Source:
+
  • observable.js, line 35
+ + + + + + + +
+ + + + + + + + + +
+ + + +
+

getClosestPoint

+ + +
Stability: experimental
+ + + + +
+
+ + + + + + + + +
Parameters:
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
NameTypeArgumentDescription
point + + +ol.Coordinate + + + + + + + +

Point.

closestPoint + + +ol.Coordinate + + + + + + <optional>
+ + + +

Closest point.

+ + + +
+ + + + + + + +
Inherited From:
+
+ + + + + + + + + + + + + +
Source:
+
  • geometry.js, line 103
+ + + + + + + +
+ + + + + + + +
Returns:
+ + +
+

Closest point.

+
+ + + +
+
+ Type +
+
+ +ol.Coordinate + + +
+
+ + + + +
+ + + +
+

getCoordinates

+ + +
Stability: experimental
+ + + + +
+
+ + + + + + + + + + +
+ + + + + + + + + + + + + + + + + + + +
Source:
+
  • point.js, line 61
+ + + + + + + +
+ + + + + + + +
Returns:
+ + +
+

Coordinates.

+
+ + + +
+
+ Type +
+
+ +ol.geom.RawPoint + + +
+
+ + + + +
+ + + +
+

getFirstCoordinate

+ + +
Stability: not documented
+ + + + +
+
+ + + + + + + + + + +
+ + + + + + + +
Inherited From:
+
+ + + + + + + + + + + + + +
Source:
+
  • simplegeometry.js, line 105
+ + + + + + + +
+ + + + + + + +
Returns:
+ + +
+

First coordinate.

+
+ + + +
+
+ Type +
+
+ +ol.Coordinate + + +
+
+ + + + +
+ + + +
+

getLastCoordinate

+ + +
Stability: not documented
+ + + + +
+
+ + + + + + + + + + +
+ + + + + + + +
Inherited From:
+
+ + + + + + + + + + + + + +
Source:
+
  • simplegeometry.js, line 121
+ + + + + + + +
+ + + + + + + +
Returns:
+ + +
+

Last point.

+
+ + + +
+
+ Type +
+
+ +ol.Coordinate + + +
+
+ + + + +
+ + + +
+

getLayout

+ + +
Stability: experimental
+ + + + +
+
+ + + + + + + + + + +
+ + + + + + + +
Inherited From:
+
+ + + + + + + + + + + + + +
Source:
+
  • simplegeometry.js, line 130
+ + + + + + + +
+ + + + + + + +
Returns:
+ + +
+

Layout.

+
+ + + +
+
+ Type +
+
+ +ol.geom.GeometryLayout + + +
+
+ + + + +
+ + + +
+

on

+ + +
Stability: experimental
+ + + + +
+
+ + +
+

Listen for a certain type of event.

+
+ + + + + + + +
Parameters:
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
NameTypeArgumentDescription
type + + +string +| + +Array.<string> + + + + + + + +

The event type or array of event types.

listener + + +function + + + + + + + +

The listener function.

this + + +Object + + + + + + <optional>
+ + + +

The object to use as this in listener.

+ + + +
+ + + + + + + +
Inherited From:
+
+ + + + + + + + + + + + + +
Source:
+
  • observable.js, line 58
+ + + + + + + +
+ + + + + + + +
Returns:
+ + +
+

Unique key for the listener.

+
+ + + +
+
+ Type +
+
+ +goog.events.Key + + +
+
+ + + + +
+ + + +
+

once

+ + +
Stability: experimental
+ + + + +
+
+ + +
+

Listen once for a certain type of event.

+
+ + + + + + + +
Parameters:
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
NameTypeArgumentDescription
type + + +string +| + +Array.<string> + + + + + + + +

The event type or array of event types.

listener + + +function + + + + + + + +

The listener function.

this + + +Object + + + + + + <optional>
+ + + +

The object to use as this in listener.

+ + + +
+ + + + + + + +
Inherited From:
+
+ + + + + + + + + + + + + +
Source:
+
  • observable.js, line 71
+ + + + + + + +
+ + + + + + + +
Returns:
+ + +
+

Unique key for the listener.

+
+ + + +
+
+ Type +
+
+ +goog.events.Key + + +
+
+ + + + +
+ + + +
+

setCoordinates

+ + +
Stability: experimental
+ + + + +
+
+ + + + + + + + +
Parameters:
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
NameTypeArgumentDescription
coordinates + + +ol.geom.RawPoint + + + + + + + +

Coordinates.

layout + + +ol.geom.GeometryLayout + + + + + + <optional>
+ + + +

Layout.

+ + + +
+ + + + + + + + + + + + + + + + + + + +
Source:
+
  • point.js, line 93
+ + + + + + + +
+ + + + + + + + + +
+ + + +
+

un

+ + +
Stability: experimental
+ + + + +
+
+ + +
+

Unlisten for a certain type of event.

+
+ + + + + + + +
Parameters:
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
NameTypeArgumentDescription
type + + +string +| + +Array.<string> + + + + + + + +

The event type or array of event types.

listener + + +function + + + + + + + +

The listener function.

this + + +Object + + + + + + <optional>
+ + + +

The object to use as this in listener.

+ + + +
+ + + + + + + +
Inherited From:
+
+ + + + + + + + + + + + + +
Source:
+
  • observable.js, line 83
+ + + + + + + +
+ + + + + + + + + +
+ + + +
+

unByKey

+ + +
Stability: experimental
+ + + + +
+
+ + +
+

Removes an event listener using the key returned by on() or once().

+
+ + + + + + + +
Parameters:
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
NameTypeDescription
key + + +goog.events.Key + + + +

Key.

+ + + +
+ + + + + + + +
Inherited From:
+
+ + + + + + + + + + + + + +
Source:
+
  • observable.js, line 93
+ + + + + + + +
+ + + + + + + + + +
+ +
+ + + + + +
+ +
+ + + + +
+ + + +
+ + + + + + \ No newline at end of file diff --git a/float-no-zero/apidoc/ol.geom.Polygon.html b/float-no-zero/apidoc/ol.geom.Polygon.html new file mode 100644 index 0000000000..2be92f600a --- /dev/null +++ b/float-no-zero/apidoc/ol.geom.Polygon.html @@ -0,0 +1,2070 @@ + + + + + OpenLayers 3 API Documentation - Class: ol.geom.Polygon + + + + + + + + + + + + + + + + +
+ + + + +
+ +
+

+ ol.geom. + + ol.geom.Polygon +

+ +
+ +
+
+ + + + +
+

new Polygon

+ + +
Stability: experimental
+ + + + +
+
+ + + + + + + + +
Parameters:
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
NameTypeArgumentDescription
coordinates + + +ol.geom.RawPolygon + + + + + + + +

Coordinates.

layout + + +ol.geom.GeometryLayout + + + + + + <optional>
+ + + +

Layout.

+ + + +
+ + + + + + + + + + + + + + + + + + + +
Source:
+
  • polygon.js, line 21
+ + + + + + + +
+ + + + + + + + + +
+ + +
+ + +

Extends

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

Members

+ +
+ +
+

getType

+ + +
Stability: experimental
+ + + + +
+
+ + + +
+ + + + + + + +
Inherited From:
+
+ + + + + + + + + + + + + +
Source:
+
  • geometry.js, line 148
+ + + + + + + +
+ + + +
+ +
+ + + +

Methods

+ +
+ +
+

dispatchChangeEvent

+ + +
Stability: experimental
+ + + + +
+
+ + + + + + + + + + +
+ + + + + + + +
Inherited From:
+
+ + + + + + + + + + + + + +
Source:
+
  • observable.js, line 35
+ + + + + + + +
+ + + + + + + + + +
+ + + +
+

getArea

+ + +
Stability: experimental
+ + + + +
+
+ + + + + + + + + + +
+ + + + + + + + + + + + + + + + + + + +
Source:
+
  • polygon.js, line 117
+ + + + + + + +
+ + + + + + + +
Returns:
+ + +
+

Area.

+
+ + + +
+
+ Type +
+
+ +number + + +
+
+ + + + +
+ + + +
+

getClosestPoint

+ + +
Stability: experimental
+ + + + +
+
+ + + + + + + + +
Parameters:
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
NameTypeArgumentDescription
point + + +ol.Coordinate + + + + + + + +

Point.

closestPoint + + +ol.Coordinate + + + + + + <optional>
+ + + +

Closest point.

+ + + +
+ + + + + + + +
Inherited From:
+
+ + + + + + + + + + + + + +
Source:
+
  • geometry.js, line 103
+ + + + + + + +
+ + + + + + + +
Returns:
+ + +
+

Closest point.

+
+ + + +
+
+ Type +
+
+ +ol.Coordinate + + +
+
+ + + + +
+ + + +
+

getCoordinates

+ + +
Stability: experimental
+ + + + +
+
+ + + + + + + + + + +
+ + + + + + + + + + + + + + + + + + + +
Source:
+
  • polygon.js, line 127
+ + + + + + + +
+ + + + + + + +
Returns:
+ + +
+

Coordinates.

+
+ + + +
+
+ Type +
+
+ +ol.geom.RawPolygon + + +
+
+ + + + +
+ + + +
+

getFirstCoordinate

+ + +
Stability: not documented
+ + + + +
+
+ + + + + + + + + + +
+ + + + + + + +
Inherited From:
+
+ + + + + + + + + + + + + +
Source:
+
  • simplegeometry.js, line 105
+ + + + + + + +
+ + + + + + + +
Returns:
+ + +
+

First coordinate.

+
+ + + +
+
+ Type +
+
+ +ol.Coordinate + + +
+
+ + + + +
+ + + +
+

getInteriorPoint

+ + +
Stability: not documented
+ + + + +
+
+ + + + + + + + + + +
+ + + + + + + + + + + + + + + + + + + +
Source:
+
  • polygon.js, line 159
+ + + + + + + +
+ + + + + + + +
Returns:
+ + +
+

Interior point.

+
+ + + +
+
+ Type +
+
+ +ol.geom.Point + + +
+
+ + + + +
+ + + +
+

getLastCoordinate

+ + +
Stability: not documented
+ + + + +
+
+ + + + + + + + + + +
+ + + + + + + +
Inherited From:
+
+ + + + + + + + + + + + + +
Source:
+
  • simplegeometry.js, line 121
+ + + + + + + +
+ + + + + + + +
Returns:
+ + +
+

Last point.

+
+ + + +
+
+ Type +
+
+ +ol.Coordinate + + +
+
+ + + + +
+ + + +
+

getLayout

+ + +
Stability: experimental
+ + + + +
+
+ + + + + + + + + + +
+ + + + + + + +
Inherited From:
+
+ + + + + + + + + + + + + +
Source:
+
  • simplegeometry.js, line 130
+ + + + + + + +
+ + + + + + + +
Returns:
+ + +
+

Layout.

+
+ + + +
+
+ Type +
+
+ +ol.geom.GeometryLayout + + +
+
+ + + + +
+ + + +
+

getLinearRings

+ + +
Stability: experimental
+ + + + +
+
+ + + + + + + + + + +
+ + + + + + + + + + + + + + + + + + + +
Source:
+
  • polygon.js, line 168
+ + + + + + + +
+ + + + + + + +
Returns:
+ + +
+

Linear rings.

+
+ + + +
+
+ Type +
+
+ +Array.<ol.geom.LinearRing> + + +
+
+ + + + +
+ + + +
+

on

+ + +
Stability: experimental
+ + + + +
+
+ + +
+

Listen for a certain type of event.

+
+ + + + + + + +
Parameters:
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
NameTypeArgumentDescription
type + + +string +| + +Array.<string> + + + + + + + +

The event type or array of event types.

listener + + +function + + + + + + + +

The listener function.

this + + +Object + + + + + + <optional>
+ + + +

The object to use as this in listener.

+ + + +
+ + + + + + + +
Inherited From:
+
+ + + + + + + + + + + + + +
Source:
+
  • observable.js, line 58
+ + + + + + + +
+ + + + + + + +
Returns:
+ + +
+

Unique key for the listener.

+
+ + + +
+
+ Type +
+
+ +goog.events.Key + + +
+
+ + + + +
+ + + +
+

once

+ + +
Stability: experimental
+ + + + +
+
+ + +
+

Listen once for a certain type of event.

+
+ + + + + + + +
Parameters:
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
NameTypeArgumentDescription
type + + +string +| + +Array.<string> + + + + + + + +

The event type or array of event types.

listener + + +function + + + + + + + +

The listener function.

this + + +Object + + + + + + <optional>
+ + + +

The object to use as this in listener.

+ + + +
+ + + + + + + +
Inherited From:
+
+ + + + + + + + + + + + + +
Source:
+
  • observable.js, line 71
+ + + + + + + +
+ + + + + + + +
Returns:
+ + +
+

Unique key for the listener.

+
+ + + +
+
+ Type +
+
+ +goog.events.Key + + +
+
+ + + + +
+ + + +
+

setCoordinates

+ + +
Stability: experimental
+ + + + +
+
+ + + + + + + + +
Parameters:
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
NameTypeArgumentDescription
coordinates + + +ol.geom.RawPolygon + + + + + + + +

Coordinates.

layout + + +ol.geom.GeometryLayout + + + + + + <optional>
+ + + +

Layout.

+ + + +
+ + + + + + + + + + + + + + + + + + + +
Source:
+
  • polygon.js, line 237
+ + + + + + + +
+ + + + + + + + + +
+ + + +
+

un

+ + +
Stability: experimental
+ + + + +
+
+ + +
+

Unlisten for a certain type of event.

+
+ + + + + + + +
Parameters:
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
NameTypeArgumentDescription
type + + +string +| + +Array.<string> + + + + + + + +

The event type or array of event types.

listener + + +function + + + + + + + +

The listener function.

this + + +Object + + + + + + <optional>
+ + + +

The object to use as this in listener.

+ + + +
+ + + + + + + +
Inherited From:
+
+ + + + + + + + + + + + + +
Source:
+
  • observable.js, line 83
+ + + + + + + +
+ + + + + + + + + +
+ + + +
+

unByKey

+ + +
Stability: experimental
+ + + + +
+
+ + +
+

Removes an event listener using the key returned by on() or once().

+
+ + + + + + + +
Parameters:
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
NameTypeDescription
key + + +goog.events.Key + + + +

Key.

+ + + +
+ + + + + + + +
Inherited From:
+
+ + + + + + + + + + + + + +
Source:
+
  • observable.js, line 93
+ + + + + + + +
+ + + + + + + + + +
+ +
+ + + + + +
+ +
+ + + + +
+ + + +
+ + + + + + \ No newline at end of file diff --git a/float-no-zero/apidoc/ol.geom.SimpleGeometry.html b/float-no-zero/apidoc/ol.geom.SimpleGeometry.html new file mode 100644 index 0000000000..67252ae139 --- /dev/null +++ b/float-no-zero/apidoc/ol.geom.SimpleGeometry.html @@ -0,0 +1,1473 @@ + + + + + OpenLayers 3 API Documentation - Class: ol.geom.SimpleGeometry + + + + + + + + + + + + + + + + +
+ + + + +
+ +
+

+ ol.geom. + + ol.geom.SimpleGeometry +

+ +
+ +
+
+ + + + +
+

new SimpleGeometry

+ + +
Stability: experimental
+ + + + +
+
+ + + + + + + + + + +
+ + + + + + + + + + + + + + + + + + + +
Source:
+
  • simplegeometry.js, line 17
+ + + + + + + +
+ + + + + + + + + +
+ + +
+ + +

Extends

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

Members

+ +
+ +
+

getType

+ + +
Stability: experimental
+ + + + +
+
+ + + +
+ + + + + + + +
Inherited From:
+
+ + + + + + + + + + + + + +
Source:
+
  • geometry.js, line 148
+ + + + + + + +
+ + + +
+ +
+ + + +

Methods

+ +
+ +
+

dispatchChangeEvent

+ + +
Stability: experimental
+ + + + +
+
+ + + + + + + + + + +
+ + + + + + + +
Inherited From:
+
+ + + + + + + + + + + + + +
Source:
+
  • observable.js, line 35
+ + + + + + + +
+ + + + + + + + + +
+ + + +
+

getClosestPoint

+ + +
Stability: experimental
+ + + + +
+
+ + + + + + + + +
Parameters:
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
NameTypeArgumentDescription
point + + +ol.Coordinate + + + + + + + +

Point.

closestPoint + + +ol.Coordinate + + + + + + <optional>
+ + + +

Closest point.

+ + + +
+ + + + + + + +
Inherited From:
+
+ + + + + + + + + + + + + +
Source:
+
  • geometry.js, line 103
+ + + + + + + +
+ + + + + + + +
Returns:
+ + +
+

Closest point.

+
+ + + +
+
+ Type +
+
+ +ol.Coordinate + + +
+
+ + + + +
+ + + +
+

getFirstCoordinate

+ + +
Stability: not documented
+ + + + +
+
+ + + + + + + + + + +
+ + + + + + + + + + + + + + + + + + + +
Source:
+
  • simplegeometry.js, line 105
+ + + + + + + +
+ + + + + + + +
Returns:
+ + +
+

First coordinate.

+
+ + + +
+
+ Type +
+
+ +ol.Coordinate + + +
+
+ + + + +
+ + + +
+

getLastCoordinate

+ + +
Stability: not documented
+ + + + +
+
+ + + + + + + + + + +
+ + + + + + + + + + + + + + + + + + + +
Source:
+
  • simplegeometry.js, line 121
+ + + + + + + +
+ + + + + + + +
Returns:
+ + +
+

Last point.

+
+ + + +
+
+ Type +
+
+ +ol.Coordinate + + +
+
+ + + + +
+ + + +
+

getLayout

+ + +
Stability: experimental
+ + + + +
+
+ + + + + + + + + + +
+ + + + + + + + + + + + + + + + + + + +
Source:
+
  • simplegeometry.js, line 130
+ + + + + + + +
+ + + + + + + +
Returns:
+ + +
+

Layout.

+
+ + + +
+
+ Type +
+
+ +ol.geom.GeometryLayout + + +
+
+ + + + +
+ + + +
+

on

+ + +
Stability: experimental
+ + + + +
+
+ + +
+

Listen for a certain type of event.

+
+ + + + + + + +
Parameters:
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
NameTypeArgumentDescription
type + + +string +| + +Array.<string> + + + + + + + +

The event type or array of event types.

listener + + +function + + + + + + + +

The listener function.

this + + +Object + + + + + + <optional>
+ + + +

The object to use as this in listener.

+ + + +
+ + + + + + + +
Inherited From:
+
+ + + + + + + + + + + + + +
Source:
+
  • observable.js, line 58
+ + + + + + + +
+ + + + + + + +
Returns:
+ + +
+

Unique key for the listener.

+
+ + + +
+
+ Type +
+
+ +goog.events.Key + + +
+
+ + + + +
+ + + +
+

once

+ + +
Stability: experimental
+ + + + +
+
+ + +
+

Listen once for a certain type of event.

+
+ + + + + + + +
Parameters:
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
NameTypeArgumentDescription
type + + +string +| + +Array.<string> + + + + + + + +

The event type or array of event types.

listener + + +function + + + + + + + +

The listener function.

this + + +Object + + + + + + <optional>
+ + + +

The object to use as this in listener.

+ + + +
+ + + + + + + +
Inherited From:
+
+ + + + + + + + + + + + + +
Source:
+
  • observable.js, line 71
+ + + + + + + +
+ + + + + + + +
Returns:
+ + +
+

Unique key for the listener.

+
+ + + +
+
+ Type +
+
+ +goog.events.Key + + +
+
+ + + + +
+ + + +
+

un

+ + +
Stability: experimental
+ + + + +
+
+ + +
+

Unlisten for a certain type of event.

+
+ + + + + + + +
Parameters:
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
NameTypeArgumentDescription
type + + +string +| + +Array.<string> + + + + + + + +

The event type or array of event types.

listener + + +function + + + + + + + +

The listener function.

this + + +Object + + + + + + <optional>
+ + + +

The object to use as this in listener.

+ + + +
+ + + + + + + +
Inherited From:
+
+ + + + + + + + + + + + + +
Source:
+
  • observable.js, line 83
+ + + + + + + +
+ + + + + + + + + +
+ + + +
+

unByKey

+ + +
Stability: experimental
+ + + + +
+
+ + +
+

Removes an event listener using the key returned by on() or once().

+
+ + + + + + + +
Parameters:
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
NameTypeDescription
key + + +goog.events.Key + + + +

Key.

+ + + +
+ + + + + + + +
Inherited From:
+
+ + + + + + + + + + + + + +
Source:
+
  • observable.js, line 93
+ + + + + + + +
+ + + + + + + + + +
+ +
+ + + + + +
+ +
+ + + + +
+ + + +
+ + + + + + \ No newline at end of file diff --git a/float-no-zero/apidoc/ol.geom.html b/float-no-zero/apidoc/ol.geom.html new file mode 100644 index 0000000000..ff7fbae6e5 --- /dev/null +++ b/float-no-zero/apidoc/ol.geom.html @@ -0,0 +1,765 @@ + + + + + OpenLayers 3 API Documentation - Namespace: ol.geom + + + + + + + + + + + + + + + + +
+ + + + +
+ +
+

+ ol. + + ol.geom +

+ +
+ +
+
+ + + + + + +
+ + + + + + + + + + + + + + + + + + + +
Source:
+
  • geom.jsdoc, line 1
+ + + + + + + +
+ + + + +
+ + + + + + + + +

Classes

+ +
+
ol.geom.Circle
+
+ +
ol.geom.Geometry
+
+ +
ol.geom.GeometryCollection
+
+ +
ol.geom.LinearRing
+
+ +
ol.geom.LineString
+
+ +
ol.geom.MultiLineString
+
+ +
ol.geom.MultiPoint
+
+ +
ol.geom.MultiPolygon
+
+ +
ol.geom.Point
+
+ +
ol.geom.Polygon
+
+ +
ol.geom.SimpleGeometry
+
+
+ + + + + + + +

Members

+ +
+ +
+

<static> GeometryLayout :string

+ + +
Stability: not documented
+ + + + +
+
+ + + +
+ + +
Properties:
+ +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
NameTypeDefaultDescription
XY + + +string + + + + + + XY + +
XYZ + + +string + + + + + + XYZ + +
XYM + + +string + + + + + + XYM + +
XYZM + + +string + + + + + + XYZM + +
+ + + + + + + + + + + + + + + + + + + + +
Source:
+
  • geometry.js, line 28
+ + + + + + + +
+ + + +
+ + + +
+

<static> GeometryType :string

+ + +
Stability: not documented
+ + + + +
+
+ + + +
+ + +
Properties:
+ +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
NameTypeDefaultDescription
POINT + + +string + + + + + + Point + +
LINE_STRING + + +string + + + + + + LineString + +
LINEAR_RING + + +string + + + + + + LinearRing + +
POLYGON + + +string + + + + + + Polygon + +
MULTI_POINT + + +string + + + + + + MultiPoint + +
MULTI_LINE_STRING + + +string + + + + + + MultiLineString + +
MULTI_POLYGON + + +string + + + + + + MultiPolygon + +
GEOMETRY_COLLECTION + + +string + + + + + + GeometryCollection + +
CIRCLE + + +string + + + + + + Circle + +
+ + + + + + + + + + + + + + + + + + + + +
Source:
+
  • geometry.js, line 12
+ + + + + + + +
+ + + +
+ +
+ + + + + +

TypeDefs

+ +
+ +
+

RawPoint

+ + +
Stability: not documented
+ + + + +
+
+ + + +
+ + + + + + + + + + + + + + + + + + + +
Source:
+
  • geometry.js, line 161
+ + + + + + + +
+ + + +
+ +
+ + + +
+ +
+ + + + +
+ + + +
+ + + + + + \ No newline at end of file diff --git a/float-no-zero/apidoc/ol.html b/float-no-zero/apidoc/ol.html new file mode 100644 index 0000000000..4cc9ee0849 --- /dev/null +++ b/float-no-zero/apidoc/ol.html @@ -0,0 +1,1519 @@ + + + + + OpenLayers 3 API Documentation - Namespace: ol + + + + + + + + + + + + + + + + +
+ + + + +
+ +
+

+ ol +

+ +
+ +
+
+ + + + + + +
+ + + + + + + + + + + + + + + + + + + +
Source:
+
  • ol.jsdoc, line 1
+ + + + + + + +
+ + + + +
+ + + + + + + + +

Classes

+ +
+
ol.Attribution
+
+ +
ol.Collection
+
+ +
ol.DeviceOrientation
+
+ +
ol.Feature
+
+ +
ol.FeatureOverlay
+
+ +
ol.Geolocation
+
+ +
ol.Kinetic
+
+ +
ol.Map
+
+ +
ol.MapBrowserEvent
+
+ +
ol.Object
+
+ +
ol.Observable
+
+ +
ol.Overlay
+
+ +
ol.View2D
+
+
+ + + +

Namespaces

+ +
+
ol.animation
+
+ +
ol.BrowserFeature
+
+ +
ol.control
+
+ +
ol.feature
+
+ +
ol.geom
+
+ +
ol.interaction
+
+ +
ol.layer
+
+ +
ol.proj
+
+ +
ol.source
+
+ +
ol.tilegrid
+
+
+ + + + + +

Members

+ +
+ +
+

<static> Coordinate

+ + +
Stability: not documented
+ + + + +
+
+ + + +
+ + + + + + + + + + + + + + + + + + + +
Source:
+
  • coordinate.js, line 24
+ + + + + + + +
+ + + +
+ + + +
+

<static> inherits

+ + +
Stability: experimental
+ + + + +
+
+ +
+

ol.inherits is an alias to the goog.inherits function. It is exported +for use in non-compiled application code. See ol.exports.

+

FIXME: We use a new line to fake the linter. Without the new line the +linter complains with:

+

"Missing newline between constructor and goog.inherits"

+
+ + + +
+ + + + + + + + + + + + + + + + + + + +
Source:
+
  • ol.js, line 14
+ + + + + + + +
+ + + +
+ + + +
+

<static> OverlayPositioning :string

+ + +
Stability: experimental
+ + + + +
+
+ + + +
+ + +
Properties:
+ +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
NameTypeDefaultDescription
BOTTOM_LEFT + + +string + + + + + + bottom-left + +
BOTTOM_CENTER + + +string + + + + + + bottom-center + +
BOTTOM_RIGHT + + +string + + + + + + bottom-right + +
CENTER_LEFT + + +string + + + + + + center-left + +
CENTER_CENTER + + +string + + + + + + center-center + +
CENTER_RIGHT + + +string + + + + + + center-right + +
TOP_LEFT + + +string + + + + + + top-left + +
TOP_CENTER + + +string + + + + + + top-center + +
TOP_RIGHT + + +string + + + + + + top-right + +
+ + + + + + + + + + + + + + + + + + + + +
Source:
+
  • overlay.js, line 31
+ + + + + + + +
+ + + +
+ + + +
+

<static> RendererHint :string

+ + +
Stability: experimental
+ + + + +
+
+ + + +
+ + +
Properties:
+ +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
NameTypeDefaultDescription
CANVAS + + +string + + + + + + canvas + +
DOM + + +string + + + + + + dom + +
WEBGL + + +string + + + + + + webgl + +
+ + + + + + + + + + + + + + + + + + + + +
Source:
+
  • map.js, line 107
+ + + + + + + +
+ + + +
+ + + +
+

<static> Size

+ + +
Stability: not documented
+ + + + +
+
+ + + +
+ + + + + + + + + + + + + + + + + + + +
Source:
+
  • size.js, line 10
+ + + + + + + +
+ + + +
+ +
+ + + +

Methods

+ +
+ +
+

<static> IView

+ + +
Stability: not documented
+ + + + +
+
+ + +
+

Interface for views.

+
+ + + + + + + + + +
+ + + + + + + + + + + + + + + + + + + +
Source:
+
  • iview.js, line 12
+ + + + + + + +
+ + + + + + + + + +
+ +
+ + + +

TypeDefs

+ +
+ +
+

CanvasFunctionType

+ + +
Stability: experimental
+ + + + +
+
+ +
+

A function returning the canvas element ({HTMLCanvasElement}) +used by the source as an image. The arguments passed to the function are: +ol.Extent the image extent, {number} the image resolution, +{number} the device pixel ratio, ol.Size the image size, and +ol.proj.Projection the image projection. The canvas returned by +this function is cached by the source. The this keyword inside the function +references the ol.source.ImageCanvas.

+
+ + + +
+ + + + + + + + + + + + + + + + + + + +
Source:
+
  • canvasfunction.js, line 17
+ + + + + + + +
+ + + +
+ + + +
+

Color

+ + +
Stability: not documented
+ + + + +
+
+ +
+

A color represented as a short array [red, green, blue, alpha]. +red, green, and blue should be integers in the range 0..255 inclusive. +alpha should be a float in the range 0..1 inclusive.

+
+ + + +
+ + + + + + + + + + + + + + + + + + + +
Source:
+
  • color.js, line 30
+ + + + + + + +
+ + + +
+ + + +
+

Coordinate

+ + +
Stability: experimental
+ + + + +
+
+ +
+

An array of numbers representing a coordinate.

+
+ + + +
+ + + + + + + + + + + + + + + + + + + +
Source:
+
  • coordinate.js, line 19
+ + + + + + + +
+ + + +
+ + + +
+

CoordinateFormatType

+ + +
Stability: experimental
+ + + + +
+
+ +
+

A function that takes a ol.Coordinate and transforms it into a +{string}.

+
+ + + +
+ + + + + + + + + + + + + + + + + + + +
Source:
+
  • coordinate.js, line 16
+ + + + + + + +
+ + + +
+ + + +
+

Extent

+ + +
Stability: experimental
+ + + + +
+
+ +
+

An array of numbers representing an extent: [minx, miny, maxx, maxy].

+
+ + + +
+ + + + + + + + + + + + + + + + + + + +
Source:
+
  • extent.js, line 15
+ + + + + + + +
+ + + +
+ + + +
+

Pixel

+ + +
Stability: not documented
+ + + + +
+
+ + + +
+ + + + + + + + + + + + + + + + + + + +
Source:
+
  • pixel.js, line 7
+ + + + + + + +
+ + + +
+ + + +
+

Size

+ + +
Stability: experimental
+ + + + +
+
+ +
+

An array of numbers representing a size: [width, height].

+
+ + + +
+ + + + + + + + + + + + + + + + + + + +
Source:
+
  • size.js, line 5
+ + + + + + + +
+ + + +
+ + + +
+

TileLoadFunctionType

+ + +
Stability: experimental
+ + + + +
+
+ +
+

A function that takes an ol.ImageTile for the image tile and a +{string} for the src as arguments.

+
+ + + +
+ + + + + + + + + + + + + + + + + + + +
Source:
+
  • tileloadfunction.js, line 11
+ + + + + + + +
+ + + +
+ + + +
+

TileUrlFunctionType

+ + +
Stability: experimental
+ + + + +
+
+ +
+

A function that takes an ol.TileCoord for the tile coordinate, +a {number} representing the pixel ratio and an ol.proj.Projection +for the projection as arguments and returns a {string} or +undefined representing the tile URL. The this keyword inside the function +references the ol.source.TileImage.

+
+ + + +
+ + + + + + + + + + + + + + + + + + + +
Source:
+
  • tileurlfunction.js, line 20
+ + + + + + + +
+ + + +
+ + + +
+

TransformFunction

+ + +
Stability: experimental
+ + + + +
+
+ +
+

A transform function accepts an array of input coordinate values, an optional +output array, and an optional dimension (default should be 2). The function +transforms the input coordinate values, populates the output array, and +returns the output array.

+
+ + + +
+ + + + + + + + + + + + + + + + + + + +
Source:
+
  • transformfunction.js, line 13
+ + + + + + + +
+ + + +
+ +
+ + + +
+ +
+ + + + +
+ + + +
+ + + + + + \ No newline at end of file diff --git a/float-no-zero/apidoc/ol.interaction.DoubleClickZoom.html b/float-no-zero/apidoc/ol.interaction.DoubleClickZoom.html new file mode 100644 index 0000000000..00b3f30b99 --- /dev/null +++ b/float-no-zero/apidoc/ol.interaction.DoubleClickZoom.html @@ -0,0 +1,219 @@ + + + + + OpenLayers 3 API Documentation - Class: ol.interaction.DoubleClickZoom + + + + + + + + + + + + + + + + +
+ + + + +
+ +
+

+ ol.interaction. + + ol.interaction.DoubleClickZoom +

+ +
+ +
+
+ + + + +
+

new DoubleClickZoom

+ + +
Stability: experimental
+ + + + +
+
+ + +
+

Allows the user to zoom by double-clicking on the map.

+
+ + + + + + + +
Parameters:
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
NameTypeArgumentDescription
options + + +olx.interaction.DoubleClickZoomOptions + + + + + + <optional>
+ + + +

Options.

+ + + +
+ + + + + + + + + + + + + + + + + + + +
Source:
+
  • doubleclickzoominteraction.js, line 20
+ + + + + + + +
+ + + + + + + + + +
+ + +
+ + + + + + + + + + + + + + + + + + + + +
+ +
+ + + + +
+ + + +
+ + + + + + \ No newline at end of file diff --git a/float-no-zero/apidoc/ol.interaction.DragAndDrop.html b/float-no-zero/apidoc/ol.interaction.DragAndDrop.html new file mode 100644 index 0000000000..e3b7fbffaa --- /dev/null +++ b/float-no-zero/apidoc/ol.interaction.DragAndDrop.html @@ -0,0 +1,215 @@ + + + + + OpenLayers 3 API Documentation - Class: ol.interaction.DragAndDrop + + + + + + + + + + + + + + + + +
+ + + + +
+ +
+

+ ol.interaction. + + ol.interaction.DragAndDrop +

+ +
+ +
+
+ + + + +
+

new DragAndDrop

+ + +
Stability: not documented
+ + + + +
+
+ + + + + + + + +
Parameters:
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
NameTypeArgumentDescription
options + + +olx.interaction.DragAndDropOptions + + + + + + <optional>
+ + + +

Options.

+ + + +
+ + + + + + + + + + + + + + + + + + + +
Source:
+
  • draganddropinteraction.js, line 24
+ + + + + + + +
+ + + + + + + + + +
+ + +
+ + + + + + + + + + + + + + + + + + + + +
+ +
+ + + + +
+ + + +
+ + + + + + \ No newline at end of file diff --git a/float-no-zero/apidoc/ol.interaction.DragBox.html b/float-no-zero/apidoc/ol.interaction.DragBox.html new file mode 100644 index 0000000000..3b3f496c3c --- /dev/null +++ b/float-no-zero/apidoc/ol.interaction.DragBox.html @@ -0,0 +1,309 @@ + + + + + OpenLayers 3 API Documentation - Class: ol.interaction.DragBox + + + + + + + + + + + + + + + + +
+ + + + +
+ +
+

+ ol.interaction. + + ol.interaction.DragBox +

+ +
+ +
+
+ + + + +
+

new DragBox

+ + +
Stability: experimental
+ + + + +
+
+ + + + + + + + +
Parameters:
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
NameTypeArgumentDescription
options + + +olx.interaction.DragBoxOptions + + + + + + <optional>
+ + + +

Options.

+ + + +
+ + + + + + + + + + + + + + + + + + + +
Source:
+
  • dragboxinteraction.js, line 70
+ + + + + + + +
+ + + + + + + + + +
+ + +
+ + + + + + + + + + + + + + + + +

Methods

+ +
+ +
+

getGeometry

+ + +
Stability: not documented
+ + + + +
+
+ + +
+

Returns geometry of last drawn box.

+
+ + + + + + + + + +
+ + + + + + + + + + + + + + + + + + + +
Source:
+
  • dragboxinteraction.js, line 117
+ + + + + + + +
+ + + + + + + +
Returns:
+ + +
+

Geometry.

+
+ + + +
+
+ Type +
+
+ +ol.geom.Geometry + + +
+
+ + + + +
+ +
+ + + + + +
+ +
+ + + + +
+ + + +
+ + + + + + \ No newline at end of file diff --git a/float-no-zero/apidoc/ol.interaction.DragPan.html b/float-no-zero/apidoc/ol.interaction.DragPan.html new file mode 100644 index 0000000000..80ac2aa53b --- /dev/null +++ b/float-no-zero/apidoc/ol.interaction.DragPan.html @@ -0,0 +1,219 @@ + + + + + OpenLayers 3 API Documentation - Class: ol.interaction.DragPan + + + + + + + + + + + + + + + + +
+ + + + +
+ +
+

+ ol.interaction. + + ol.interaction.DragPan +

+ +
+ +
+
+ + + + +
+

new DragPan

+ + +
Stability: experimental
+ + + + +
+
+ + +
+

Allows the user to pan the map by clickng and dragging.

+
+ + + + + + + +
Parameters:
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
NameTypeArgumentDescription
options + + +olx.interaction.DragPanOptions + + + + + + <optional>
+ + + +

Options.

+ + + +
+ + + + + + + + + + + + + + + + + + + +
Source:
+
  • dragpaninteraction.js, line 24
+ + + + + + + +
+ + + + + + + + + +
+ + +
+ + + + + + + + + + + + + + + + + + + + +
+ +
+ + + + +
+ + + +
+ + + + + + \ No newline at end of file diff --git a/float-no-zero/apidoc/ol.interaction.DragRotate.html b/float-no-zero/apidoc/ol.interaction.DragRotate.html new file mode 100644 index 0000000000..25c5ee85ce --- /dev/null +++ b/float-no-zero/apidoc/ol.interaction.DragRotate.html @@ -0,0 +1,221 @@ + + + + + OpenLayers 3 API Documentation - Class: ol.interaction.DragRotate + + + + + + + + + + + + + + + + +
+ + + + +
+ +
+

+ ol.interaction. + + ol.interaction.DragRotate +

+ +
+ +
+
+ + + + +
+

new DragRotate

+ + +
Stability: not documented
+ + + + +
+
+ + +
+

Allows the user to rotate the map by clicking and dragging on the map, +normally combined with an ol.events.condition that limits +it to when the alt and shift keys are held down.

+
+ + + + + + + +
Parameters:
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
NameTypeArgumentDescription
options + + +olx.interaction.DragRotateOptions + + + + + + <optional>
+ + + +

Options.

+ + + +
+ + + + + + + + + + + + + + + + + + + +
Source:
+
  • dragrotateinteraction.js, line 26
+ + + + + + + +
+ + + + + + + + + +
+ + +
+ + + + + + + + + + + + + + + + + + + + +
+ +
+ + + + +
+ + + +
+ + + + + + \ No newline at end of file diff --git a/float-no-zero/apidoc/ol.interaction.DragRotateAndZoom.html b/float-no-zero/apidoc/ol.interaction.DragRotateAndZoom.html new file mode 100644 index 0000000000..384a2724fb --- /dev/null +++ b/float-no-zero/apidoc/ol.interaction.DragRotateAndZoom.html @@ -0,0 +1,222 @@ + + + + + OpenLayers 3 API Documentation - Class: ol.interaction.DragRotateAndZoom + + + + + + + + + + + + + + + + +
+ + + + +
+ +
+

+ ol.interaction. + + ol.interaction.DragRotateAndZoom +

+ +
+ +
+
+ + + + +
+

new DragRotateAndZoom

+ + +
Stability: experimental
+ + + + +
+
+ + +
+

Allows the user to zoom and rotate the map by clicking and dragging +on the map. By default, this interaction is limited to when the shift +key is held down.

+

This interaction is not included in the default interactions.

+
+ + + + + + + +
Parameters:
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
NameTypeArgumentDescription
options + + +olx.interaction.DragRotateAndZoomOptions + + + + + + <optional>
+ + + +

Options.

+ + + +
+ + + + + + + + + + + + + + + + + + + +
Source:
+
  • dragrotateandzoominteraction.js, line 32
+ + + + + + + +
+ + + + + + + + + +
+ + +
+ + + + + + + + + + + + + + + + + + + + +
+ +
+ + + + +
+ + + +
+ + + + + + \ No newline at end of file diff --git a/float-no-zero/apidoc/ol.interaction.DragZoom.html b/float-no-zero/apidoc/ol.interaction.DragZoom.html new file mode 100644 index 0000000000..9e1155342e --- /dev/null +++ b/float-no-zero/apidoc/ol.interaction.DragZoom.html @@ -0,0 +1,326 @@ + + + + + OpenLayers 3 API Documentation - Class: ol.interaction.DragZoom + + + + + + + + + + + + + + + + +
+ + + + +
+ +
+

+ ol.interaction. + + ol.interaction.DragZoom +

+ +
+ +
+
+ + + + +
+

new DragZoom

+ + +
Stability: experimental
+ + + + +
+
+ + +
+

Allows the user to zoom the map by clicking and dragging on the map, +normally combined with an ol.events.condition that limits +it to when the shift key is held down.

+
+ + + + + + + +
Parameters:
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
NameTypeArgumentDescription
options + + +olx.interaction.DragZoomOptions + + + + + + <optional>
+ + + +

Options.

+ + + +
+ + + + + + + + + + + + + + + + + + + +
Source:
+
  • dragzoominteraction.js, line 28
+ + + + + + + +
+ + + + + + + + + +
+ + +
+ + +

Extends

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

Methods

+ +
+ +
+

getGeometry

+ + +
Stability: not documented
+ + + + +
+
+ + +
+

Returns geometry of last drawn box.

+
+ + + + + + + + + +
+ + + + + + + +
Inherited From:
+
+ + + + + + + + + + + + + +
Source:
+
  • dragboxinteraction.js, line 117
+ + + + + + + +
+ + + + + + + +
Returns:
+ + +
+

Geometry.

+
+ + + +
+
+ Type +
+
+ +ol.geom.Geometry + + +
+
+ + + + +
+ +
+ + + + + +
+ +
+ + + + +
+ + + +
+ + + + + + \ No newline at end of file diff --git a/float-no-zero/apidoc/ol.interaction.Draw.html b/float-no-zero/apidoc/ol.interaction.Draw.html new file mode 100644 index 0000000000..105b67016b --- /dev/null +++ b/float-no-zero/apidoc/ol.interaction.Draw.html @@ -0,0 +1,209 @@ + + + + + OpenLayers 3 API Documentation - Class: ol.interaction.Draw + + + + + + + + + + + + + + + + +
+ + + + +
+ +
+

+ ol.interaction. + + ol.interaction.Draw +

+ +
+ +
+
+ + + + +
+

new Draw

+ + +
Stability: experimental
+ + + + +
+
+ + +
+

Interaction that allows drawing geometries

+
+ + + + + + + +
Parameters:
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
NameTypeDescription
options + + +olx.interaction.DrawOptions + + + +

Options.

+ + + +
+ + + + + + + + + + + + + + + + + + + +
Source:
+
  • drawinteraction.js, line 66
+ + + + + + + +
+ + + + + + + + + +
+ + +
+ + + + + + + + + + + + + + + + + + + + +
+ +
+ + + + +
+ + + +
+ + + + + + \ No newline at end of file diff --git a/float-no-zero/apidoc/ol.interaction.KeyboardPan.html b/float-no-zero/apidoc/ol.interaction.KeyboardPan.html new file mode 100644 index 0000000000..c868caa861 --- /dev/null +++ b/float-no-zero/apidoc/ol.interaction.KeyboardPan.html @@ -0,0 +1,227 @@ + + + + + OpenLayers 3 API Documentation - Class: ol.interaction.KeyboardPan + + + + + + + + + + + + + + + + +
+ + + + +
+ +
+

+ ol.interaction. + + ol.interaction.KeyboardPan +

+ +
+ +
+
+ + + + +
+

new KeyboardPan

+ + +
Stability: experimental
+ + + + +
+
+ + +
+

Allows the user to pan the map using keyboard arrows. +Note that, although this interaction is by default included in maps, +the keys can only be used when browser focus is on the element to which +the keyboard events are attached. By default, this is the map div, +though you can change this with the keyboardTargetElement in +ol.Map. document never loses focus but, for any other element, +focus will have to be on, and returned to, this element if the keys are to +function. +See also ol.interaction.KeyboardZoom.

+
+ + + + + + + +
Parameters:
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
NameTypeArgumentDescription
options + + +olx.interaction.KeyboardPanOptions + + + + + + <optional>
+ + + +

Options.

+ + + +
+ + + + + + + + + + + + + + + + + + + +
Source:
+
  • keyboardpaninteraction.js, line 38
+ + + + + + + +
+ + + + + + + + + +
+ + +
+ + + + + + + + + + + + + + + + + + + + +
+ +
+ + + + +
+ + + +
+ + + + + + \ No newline at end of file diff --git a/float-no-zero/apidoc/ol.interaction.KeyboardZoom.html b/float-no-zero/apidoc/ol.interaction.KeyboardZoom.html new file mode 100644 index 0000000000..bf32e84daa --- /dev/null +++ b/float-no-zero/apidoc/ol.interaction.KeyboardZoom.html @@ -0,0 +1,227 @@ + + + + + OpenLayers 3 API Documentation - Class: ol.interaction.KeyboardZoom + + + + + + + + + + + + + + + + +
+ + + + +
+ +
+

+ ol.interaction. + + ol.interaction.KeyboardZoom +

+ +
+ +
+
+ + + + +
+

new KeyboardZoom

+ + +
Stability: experimental
+ + + + +
+
+ + +
+

Allows the user to zoom the map using keyboard + and -. +Note that, although this interaction is by default included in maps, +the keys can only be used when browser focus is on the element to which +the keyboard events are attached. By default, this is the map div, +though you can change this with the keyboardTargetElement in +ol.Map. document never loses focus but, for any other element, +focus will have to be on, and returned to, this element if the keys are to +function. +See also ol.interaction.KeyboardPan.

+
+ + + + + + + +
Parameters:
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
NameTypeArgumentDescription
options + + +olx.interaction.KeyboardZoomOptions + + + + + + <optional>
+ + + +

Options.

+ + + +
+ + + + + + + + + + + + + + + + + + + +
Source:
+
  • keyboardzoominteraction.js, line 28
+ + + + + + + +
+ + + + + + + + + +
+ + +
+ + + + + + + + + + + + + + + + + + + + +
+ +
+ + + + +
+ + + +
+ + + + + + \ No newline at end of file diff --git a/float-no-zero/apidoc/ol.interaction.Modify.html b/float-no-zero/apidoc/ol.interaction.Modify.html new file mode 100644 index 0000000000..920316a441 --- /dev/null +++ b/float-no-zero/apidoc/ol.interaction.Modify.html @@ -0,0 +1,205 @@ + + + + + OpenLayers 3 API Documentation - Class: ol.interaction.Modify + + + + + + + + + + + + + + + + +
+ + + + +
+ +
+

+ ol.interaction. + + ol.interaction.Modify +

+ +
+ +
+
+ + + + +
+

new Modify

+ + +
Stability: not documented
+ + + + +
+
+ + + + + + + + +
Parameters:
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
NameTypeDescription
options + + +olx.interaction.ModifyOptions + + + +

Options.

+ + + +
+ + + + + + + + + + + + + + + + + + + +
Source:
+
  • modifyinteraction.js, line 40
+ + + + + + + +
+ + + + + + + + + +
+ + +
+ + + + + + + + + + + + + + + + + + + + +
+ +
+ + + + +
+ + + +
+ + + + + + \ No newline at end of file diff --git a/float-no-zero/apidoc/ol.interaction.MouseWheelZoom.html b/float-no-zero/apidoc/ol.interaction.MouseWheelZoom.html new file mode 100644 index 0000000000..2d2b8a6c18 --- /dev/null +++ b/float-no-zero/apidoc/ol.interaction.MouseWheelZoom.html @@ -0,0 +1,219 @@ + + + + + OpenLayers 3 API Documentation - Class: ol.interaction.MouseWheelZoom + + + + + + + + + + + + + + + + +
+ + + + +
+ +
+

+ ol.interaction. + + ol.interaction.MouseWheelZoom +

+ +
+ +
+
+ + + + +
+

new MouseWheelZoom

+ + +
Stability: experimental
+ + + + +
+
+ + +
+

Allows the user to zoom the map by scrolling the mouse wheel.

+
+ + + + + + + +
Parameters:
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
NameTypeArgumentDescription
options + + +olx.interaction.MouseWheelZoomOptions + + + + + + <optional>
+ + + +

Options.

+ + + +
+ + + + + + + + + + + + + + + + + + + +
Source:
+
  • mousewheelzoominteraction.js, line 33
+ + + + + + + +
+ + + + + + + + + +
+ + +
+ + + + + + + + + + + + + + + + + + + + +
+ +
+ + + + +
+ + + +
+ + + + + + \ No newline at end of file diff --git a/float-no-zero/apidoc/ol.interaction.Select.html b/float-no-zero/apidoc/ol.interaction.Select.html new file mode 100644 index 0000000000..a240256159 --- /dev/null +++ b/float-no-zero/apidoc/ol.interaction.Select.html @@ -0,0 +1,295 @@ + + + + + OpenLayers 3 API Documentation - Class: ol.interaction.Select + + + + + + + + + + + + + + + + +
+ + + + +
+ +
+

+ ol.interaction. + + ol.interaction.Select +

+ +
+ +
+
+ + + + +
+

new Select

+ + +
Stability: experimental
+ + + + +
+
+ + + + + + + + +
Parameters:
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
NameTypeDescription
options + + +olx.interaction.SelectOptions + + + +

Options.

+ + + +
+ + + + + + + + + + + + + + + + + + + +
Source:
+
  • selectinteraction.js, line 17
+ + + + + + + +
+ + + + + + + + + +
+ + +
+ + + + + + + + + + + + + + + + +

Methods

+ +
+ +
+

getFeatures

+ + +
Stability: experimental
+ + + + +
+
+ + + + + + + + + + +
+ + + + + + + + + + + + + + + + + + + +
Source:
+
  • selectinteraction.js, line 84
+ + + + + + + +
+ + + + + + + +
Returns:
+ + +
+

Features collection.

+
+ + + +
+
+ Type +
+
+ +ol.Collection + + +
+
+ + + + +
+ +
+ + + + + +
+ +
+ + + + +
+ + + +
+ + + + + + \ No newline at end of file diff --git a/float-no-zero/apidoc/ol.interaction.TouchPan.html b/float-no-zero/apidoc/ol.interaction.TouchPan.html new file mode 100644 index 0000000000..3edbd2e1f9 --- /dev/null +++ b/float-no-zero/apidoc/ol.interaction.TouchPan.html @@ -0,0 +1,220 @@ + + + + + OpenLayers 3 API Documentation - Class: ol.interaction.TouchPan + + + + + + + + + + + + + + + + +
+ + + + +
+ +
+

+ ol.interaction. + + ol.interaction.TouchPan +

+ +
+ +
+
+ + + + +
+

new TouchPan

+ + +
Stability: experimental
+ + + + +
+
+ + +
+

Allows the user to pan the map by touching and dragging +on a touch screen.

+
+ + + + + + + +
Parameters:
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
NameTypeArgumentDescription
options + + +olx.interaction.TouchPanOptions + + + + + + <optional>
+ + + +

Options.

+ + + +
+ + + + + + + + + + + + + + + + + + + +
Source:
+
  • touchpaninteraction.js, line 22
+ + + + + + + +
+ + + + + + + + + +
+ + +
+ + + + + + + + + + + + + + + + + + + + +
+ +
+ + + + +
+ + + +
+ + + + + + \ No newline at end of file diff --git a/float-no-zero/apidoc/ol.interaction.TouchRotate.html b/float-no-zero/apidoc/ol.interaction.TouchRotate.html new file mode 100644 index 0000000000..44887c1ddc --- /dev/null +++ b/float-no-zero/apidoc/ol.interaction.TouchRotate.html @@ -0,0 +1,220 @@ + + + + + OpenLayers 3 API Documentation - Class: ol.interaction.TouchRotate + + + + + + + + + + + + + + + + +
+ + + + +
+ +
+

+ ol.interaction. + + ol.interaction.TouchRotate +

+ +
+ +
+
+ + + + +
+

new TouchRotate

+ + +
Stability: experimental
+ + + + +
+
+ + +
+

Allows the user to rotate the map by twisting with two fingers +on a touch screen.

+
+ + + + + + + +
Parameters:
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
NameTypeArgumentDescription
options + + +olx.interaction.TouchRotateOptions + + + + + + <optional>
+ + + +

Options.

+ + + +
+ + + + + + + + + + + + + + + + + + + +
Source:
+
  • touchrotateinteraction.js, line 27
+ + + + + + + +
+ + + + + + + + + +
+ + +
+ + + + + + + + + + + + + + + + + + + + +
+ +
+ + + + +
+ + + +
+ + + + + + \ No newline at end of file diff --git a/float-no-zero/apidoc/ol.interaction.TouchZoom.html b/float-no-zero/apidoc/ol.interaction.TouchZoom.html new file mode 100644 index 0000000000..a49745e3fd --- /dev/null +++ b/float-no-zero/apidoc/ol.interaction.TouchZoom.html @@ -0,0 +1,220 @@ + + + + + OpenLayers 3 API Documentation - Class: ol.interaction.TouchZoom + + + + + + + + + + + + + + + + +
+ + + + +
+ +
+

+ ol.interaction. + + ol.interaction.TouchZoom +

+ +
+ +
+
+ + + + +
+

new TouchZoom

+ + +
Stability: experimental
+ + + + +
+
+ + +
+

Allows the user to zoom the map by pinching with two fingers +on a touch screen.

+
+ + + + + + + +
Parameters:
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
NameTypeArgumentDescription
options + + +olx.interaction.TouchZoomOptions + + + + + + <optional>
+ + + +

Options.

+ + + +
+ + + + + + + + + + + + + + + + + + + +
Source:
+
  • touchzoominteraction.js, line 21
+ + + + + + + +
+ + + + + + + + + +
+ + +
+ + + + + + + + + + + + + + + + + + + + +
+ +
+ + + + +
+ + + +
+ + + + + + \ No newline at end of file diff --git a/float-no-zero/apidoc/ol.interaction.html b/float-no-zero/apidoc/ol.interaction.html new file mode 100644 index 0000000000..cecda9cbc0 --- /dev/null +++ b/float-no-zero/apidoc/ol.interaction.html @@ -0,0 +1,342 @@ + + + + + OpenLayers 3 API Documentation - Namespace: ol.interaction + + + + + + + + + + + + + + + + +
+ + + + +
+ +
+

+ ol. + + ol.interaction +

+ +
+ +
+
+ + + + + + +
+ + + + + + + + + + + + + + + + + + + +
Source:
+
  • interaction.jsdoc, line 1
+ + + + + + + +
+ + + + +
+ + + + + + + + +

Classes

+ +
+
ol.interaction.DoubleClickZoom
+
+ +
ol.interaction.DragAndDrop
+
+ +
ol.interaction.DragBox
+
+ +
ol.interaction.DragPan
+
+ +
ol.interaction.DragRotate
+
+ +
ol.interaction.DragRotateAndZoom
+
+ +
ol.interaction.DragZoom
+
+ +
ol.interaction.Draw
+
+ +
ol.interaction.KeyboardPan
+
+ +
ol.interaction.KeyboardZoom
+
+ +
ol.interaction.Modify
+
+ +
ol.interaction.MouseWheelZoom
+
+ +
ol.interaction.Select
+
+ +
ol.interaction.TouchPan
+
+ +
ol.interaction.TouchRotate
+
+ +
ol.interaction.TouchZoom
+
+
+ + + + + + + + + +

Methods

+ +
+ +
+

<static> defaults

+ + +
Stability: experimental
+ + + + +
+
+ + +
+

This method is a convenience method to create a set of interactions +to be used with an ol.Map. Specific interactions can be excluded by +setting the appropriate option to false in the constructor options, +but the order of the interactions is fixed. If you want to specify a +different order for interactions, you will need to create your own +ol.interaction instances and insert them into an +ol.Collection in the order you want before creating your ol.Map +instance.

+
+ + + + + + + +
Parameters:
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
NameTypeArgumentDescription
options + + +olx.interaction.DefaultsOptions + + + + + + <optional>
+ + + +

Defaults options.

+ + + +
+ + + + + + + + + + + + + + + + + + + +
Source:
+
  • interactiondefaults.js, line 31
+ + + + + + + +
+ + + + + + + +
Returns:
+ + +
+

A collection of interactions to be used with +the ol.Map constructor's interactions option.

+
+ + + +
+
+ Type +
+
+ +ol.Collection + + +
+
+ + + + +
+ +
+ + + + + +
+ +
+ + + + +
+ + + +
+ + + + + + \ No newline at end of file diff --git a/float-no-zero/apidoc/ol.layer.Group.html b/float-no-zero/apidoc/ol.layer.Group.html new file mode 100644 index 0000000000..59b4dbf763 --- /dev/null +++ b/float-no-zero/apidoc/ol.layer.Group.html @@ -0,0 +1,461 @@ + + + + + OpenLayers 3 API Documentation - Class: ol.layer.Group + + + + + + + + + + + + + + + + +
+ + + + +
+ +
+

+ ol.layer. + + ol.layer.Group +

+ +
+ +
+
+ + + + +
+

new Group

+ + +
Stability: experimental
+ + + + +
+
+ + + + + + + + +
Parameters:
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
NameTypeArgumentDescription
options + + +olx.layer.GroupOptions + + + + + + <optional>
+ + + +

Layer options.

+ + + +
+ + + + + + + + + + + + + + + + + + + +
Source:
+
  • layergroup.js, line 35
+ + + + + + + +
+ + + + + + + + + +
+ + +
+ + + + + + + + + + + + +

Observable Properties

+
+ + + + + + + + + + + + + + + + + + + + + + + + +
NameTypeSettableEventDescription
layers + + +ol.Collection + + + + yeschange:layerscollection of layers that are part + of this group
+
+ + + + + + +

Methods

+ +
+ +
+

getLayers

+ + +
Stability: experimental
+ + + + +
+
+ + + + + + + + + + +
+ + + + + + + + + + + + + + + + + + + +
Source:
+
  • layergroup.js, line 148
+ + + + + + + +
+ + + + + + + +
Returns:
+ + +
+

Collection of layers.

+
+ + + +
+
+ Type +
+
+ +ol.Collection +| + +undefined + + +
+
+ + + + +
+ + + +
+

setLayers

+ + +
Stability: experimental
+ + + + +
+
+ + + + + + + + +
Parameters:
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
NameTypeDescription
layers + + +ol.Collection +| + +undefined + + + +

Collection of layers.

+ + + +
+ + + + + + + + + + + + + + + + + + + +
Source:
+
  • layergroup.js, line 162
+ + + + + + + +
+ + + + + + + + + +
+ +
+ + + + + +
+ +
+ + + + +
+ + + +
+ + + + + + \ No newline at end of file diff --git a/float-no-zero/apidoc/ol.layer.Image.html b/float-no-zero/apidoc/ol.layer.Image.html new file mode 100644 index 0000000000..7c0af42ddd --- /dev/null +++ b/float-no-zero/apidoc/ol.layer.Image.html @@ -0,0 +1,306 @@ + + + + + OpenLayers 3 API Documentation - Class: ol.layer.Image + + + + + + + + + + + + + + + + +
+ + + + +
+ +
+

+ ol.layer. + + ol.layer.Image +

+ +
+ +
+
+ + + + +
+

new Image

+ + +
Stability: experimental
+ + + + +
+
+ + + + + + + + +
Parameters:
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
NameTypeDescription
options + + +olx.layer.LayerOptions + + + +

Layer options.

+ + + +
+ + + + + + + + + + + + + + + + + + + +
Source:
+
  • imagelayer.js, line 13
+ + + + + + + +
+ + + + + + + + + +
+ + +
+ + +

Extends

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

Methods

+ +
+ +
+

getSource

+ + +
Stability: experimental
+ + + + +
+
+ + + + + + + + + + +
+ + + + + + + +
Inherited From:
+
+ + + + + + + + + + + + + +
Source:
+
  • layer.js, line 75
+ + + + + + + +
+ + + + + + + +
Returns:
+ + +
+

Source.

+
+ + + +
+
+ Type +
+
+ +ol.source.Source + + +
+
+ + + + +
+ +
+ + + + + +
+ +
+ + + + +
+ + + +
+ + + + + + \ No newline at end of file diff --git a/float-no-zero/apidoc/ol.layer.Layer.html b/float-no-zero/apidoc/ol.layer.Layer.html new file mode 100644 index 0000000000..37ab0f42d2 --- /dev/null +++ b/float-no-zero/apidoc/ol.layer.Layer.html @@ -0,0 +1,444 @@ + + + + + OpenLayers 3 API Documentation - Class: ol.layer.Layer + + + + + + + + + + + + + + + + +
+ + + + +
+ +
+

+ ol.layer. + + ol.layer.Layer +

+ +
+ +
+
+ + + + +
+

new Layer

+ + +
Stability: experimental
+ + + + +
+
+ + + + + + + + +
Parameters:
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
NameTypeDescription
options + + +olx.layer.LayerOptions + + + +

Layer options.

+ + + +
+ + + + + + + + + + + + + + + + + + + +
Source:
+
  • layer.js, line 26
+ + + + + + + +
+ + + + + + + + + +
+ + +
+ + + + + + + + + + + + +

Observable Properties

+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
NameTypeSettableEventDescription
brightness + + +number + + + + yeschange:brightnessthe brightness of the layer
contrast + + +number + + + + yeschange:contrastthe contrast of the layer
hue + + +number + + + + yeschange:huethe hue of the layer
opacity + + +number + + + + yeschange:opacitythe opacity of the layer
saturation + + +number + + + + yeschange:saturationthe saturation of the layer
visible + + +boolean + + + + yeschange:visiblethe visiblity of the layer
maxResolution + + +number + + + + yeschange:maxresolutionthe maximum resolution of the layer
minResolution + + +number + + + + yeschange:minresolutionthe minimum resolution of the layer
+
+ + + + + + +

Methods

+ +
+ +
+

getSource

+ + +
Stability: experimental
+ + + + +
+
+ + + + + + + + + + +
+ + + + + + + + + + + + + + + + + + + +
Source:
+
  • layer.js, line 75
+ + + + + + + +
+ + + + + + + +
Returns:
+ + +
+

Source.

+
+ + + +
+
+ Type +
+
+ +ol.source.Source + + +
+
+ + + + +
+ +
+ + + + + +
+ +
+ + + + +
+ + + +
+ + + + + + \ No newline at end of file diff --git a/float-no-zero/apidoc/ol.layer.Tile.html b/float-no-zero/apidoc/ol.layer.Tile.html new file mode 100644 index 0000000000..66ed86b194 --- /dev/null +++ b/float-no-zero/apidoc/ol.layer.Tile.html @@ -0,0 +1,748 @@ + + + + + OpenLayers 3 API Documentation - Class: ol.layer.Tile + + + + + + + + + + + + + + + + +
+ + + + +
+ +
+

+ ol.layer. + + ol.layer.Tile +

+ +
+ +
+
+ + + + +
+

new Tile

+ + +
Stability: experimental
+ + + + +
+
+ + + + + + + + +
Parameters:
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
NameTypeDescription
options + + +olx.layer.TileOptions + + + +

Tile layer options.

+ + + +
+ + + + + + + + + + + + + + + + + + + +
Source:
+
  • tilelayer.js, line 23
+ + + + + + + +
+ + + + + + + + + +
+ + +
+ + +

Extends

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

Observable Properties

+
+ + + + + + + + + + + + + + + + + + + + + + + + +
NameTypeSettableEventDescription
preload + + +number + + + + yeschange:preloadthe level to preload tiles up to
+
+ + + + + + +

Methods

+ +
+ +
+

getPreload

+ + +
Stability: experimental
+ + + + +
+
+ + + + + + + + + + +
+ + + + + + + + + + + + + + + + + + + +
Source:
+
  • tilelayer.js, line 34
+ + + + + + + +
+ + + + + + + +
Returns:
+ + +
+

Preload.

+
+ + + +
+
+ Type +
+
+ +number +| + +undefined + + +
+
+ + + + +
+ + + +
+

getSource

+ + +
Stability: experimental
+ + + + +
+
+ + + + + + + + + + +
+ + + + + + + +
Inherited From:
+
+ + + + + + + + + + + + + +
Source:
+
  • layer.js, line 75
+ + + + + + + +
+ + + + + + + +
Returns:
+ + +
+

Source.

+
+ + + +
+
+ Type +
+
+ +ol.source.Source + + +
+
+ + + + +
+ + + +
+

getUseInterimTilesOnError

+ + +
Stability: experimental
+ + + + +
+
+ + + + + + + + + + +
+ + + + + + + + + + + + + + + + + + + +
Source:
+
  • tilelayer.js, line 61
+ + + + + + + +
+ + + + + + + +
Returns:
+ + +
+

Use interim tiles on error.

+
+ + + +
+
+ Type +
+
+ +boolean +| + +undefined + + +
+
+ + + + +
+ + + +
+

setPreload

+ + +
Stability: experimental
+ + + + +
+
+ + + + + + + + +
Parameters:
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
NameTypeDescription
preload + + +number + + + +

Preload.

+ + + +
+ + + + + + + + + + + + + + + + + + + +
Source:
+
  • tilelayer.js, line 48
+ + + + + + + +
+ + + + + + + + + +
+ + + +
+

setUseInterimTilesOnError

+ + +
Stability: experimental
+ + + + +
+
+ + + + + + + + +
Parameters:
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
NameTypeDescription
useInterimTilesOnError + + +boolean +| + +undefined + + + +

Use interim tiles on error.

+ + + +
+ + + + + + + + + + + + + + + + + + + +
Source:
+
  • tilelayer.js, line 75
+ + + + + + + +
+ + + + + + + + + +
+ +
+ + + + + +
+ +
+ + + + +
+ + + +
+ + + + + + \ No newline at end of file diff --git a/float-no-zero/apidoc/ol.layer.Vector.html b/float-no-zero/apidoc/ol.layer.Vector.html new file mode 100644 index 0000000000..d5edf327d5 --- /dev/null +++ b/float-no-zero/apidoc/ol.layer.Vector.html @@ -0,0 +1,835 @@ + + + + + OpenLayers 3 API Documentation - Class: ol.layer.Vector + + + + + + + + + + + + + + + + +
+ + + + +
+ +
+

+ ol.layer. + + ol.layer.Vector +

+ +
+ +
+
+ + + + +
+

new Vector

+ + +
Stability: experimental
+ + + + +
+
+ + + + + + + + +
Parameters:
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
NameTypeArgumentDescription
options + + +olx.layer.VectorOptions + + + + + + <optional>
+ + + +

Options.

+ + + +
+ + + + + + + + + + + + + + + + + + + +
Source:
+
  • vectorlayer.js, line 23
+ + + + + + + +
+ + + + + + + + + +
+ + +
+ + +

Extends

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

Methods

+ +
+ +
+

getRenderGeometryFunctions

+ + +
Stability: experimental
+ + + + +
+
+ + + + + + + + + + +
+ + + + + + + + + + + + + + + + + + + +
Source:
+
  • vectorlayer.js, line 59
+ + + + + + + +
+ + + + + + + +
Returns:
+ + +
+

Render geometry functions.

+
+ + + +
+
+ Type +
+
+ +ol.Collection +| + +undefined + + +
+
+ + + + +
+ + + +
+

getSource

+ + +
Stability: experimental
+ + + + +
+
+ + + + + + + + + + +
+ + + + + + + +
Inherited From:
+
+ + + + + + + + + + + + + +
Source:
+
  • layer.js, line 75
+ + + + + + + +
+ + + + + + + +
Returns:
+ + +
+

Source.

+
+ + + +
+
+ Type +
+
+ +ol.source.Source + + +
+
+ + + + +
+ + + +
+

getStyle

+ + +
Stability: not documented
+ + + + +
+
+ + +
+

Get the style for features. This returns whatever was passed to the style +option at construction or to the setStyle method.

+
+ + + + + + + + + +
+ + + + + + + + + + + + + + + + + + + +
Source:
+
  • vectorlayer.js, line 75
+ + + + + + + +
+ + + + + + + +
Returns:
+ + +
+

Layer style.

+
+ + + +
+
+ Type +
+
+ +ol.style.Style +| + +Array.<ol.style.Style> +| + +ol.feature.StyleFunction + + +
+
+ + + + +
+ + + +
+

getStyleFunction

+ + +
Stability: experimental
+ + + + +
+
+ + +
+

Get the style function.

+
+ + + + + + + + + +
+ + + + + + + + + + + + + + + + + + + +
Source:
+
  • vectorlayer.js, line 85
+ + + + + + + +
+ + + + + + + +
Returns:
+ + +
+

Layer style function.

+
+ + + +
+
+ Type +
+
+ +ol.feature.StyleFunction +| + +undefined + + +
+
+ + + + +
+ + + +
+

setRenderGeometryFunctions

+ + +
Stability: experimental
+ + + + +
+
+ + + + + + + + +
Parameters:
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
NameTypeDescription
renderGeometryFunctions + + +ol.Collection +| + +undefined + + + +

Render geometry + functions.

+ + + +
+ + + + + + + + + + + + + + + + + + + +
Source:
+
  • vectorlayer.js, line 95
+ + + + + + + +
+ + + + + + + + + +
+ + + +
+

setStyle

+ + +
Stability: experimental
+ + + + +
+
+ + +
+

Set the style for features. This can be a single style object, an array +of styles, or a function that takes a feature and resolution and returns +an array of styles.

+
+ + + + + + + +
Parameters:
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
NameTypeDescription
style + + +ol.style.Style +| + +Array.<ol.style.Style> +| + +ol.feature.StyleFunction + + + +

Layer style.

+ + + +
+ + + + + + + + + + + + + + + + + + + +
Source:
+
  • vectorlayer.js, line 114
+ + + + + + + +
+ + + + + + + + + +
+ +
+ + + + + +
+ +
+ + + + +
+ + + +
+ + + + + + \ No newline at end of file diff --git a/float-no-zero/apidoc/ol.layer.html b/float-no-zero/apidoc/ol.layer.html new file mode 100644 index 0000000000..e918385273 --- /dev/null +++ b/float-no-zero/apidoc/ol.layer.html @@ -0,0 +1,149 @@ + + + + + OpenLayers 3 API Documentation - Namespace: ol.layer + + + + + + + + + + + + + + + + +
+ + + + +
+ +
+

+ ol. + + ol.layer +

+ +
+ + + +
+ + + + +
+ + + +
+ + + + + + \ No newline at end of file diff --git a/float-no-zero/apidoc/ol.parser.ogc.WMSCapabilities.html b/float-no-zero/apidoc/ol.parser.ogc.WMSCapabilities.html new file mode 100644 index 0000000000..bb331ceabe --- /dev/null +++ b/float-no-zero/apidoc/ol.parser.ogc.WMSCapabilities.html @@ -0,0 +1,213 @@ + + + + + OpenLayers 3 API Documentation - Class: ol.parser.ogc.WMSCapabilities + + + + + + + + + + + + + + + + +
+ + + + +
+ +
+

+ ol.parser.ogc.WMSCapabilities +

+ +
+ +
+
+ + + + +
+

new WMSCapabilities

+ + +
Stability: experimental
+ + + + +
+
+ + + + + + + + +
Parameters:
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
NameTypeArgumentDescription
options + + +Object + + + + + + <optional>
+ + + +

Options which will be set on this object.

+ + + +
+ + + + + + + + + + + + + + + + + + + +
Source:
+
  • wmscapabilitiesparser.js, line 48
+ + + + + + + +
+ + + + + + + + + +
+ + +
+ + + + + + + + + + + + + + + + + + + + +
+ +
+ + + + +
+ + + +
+ + + + + + \ No newline at end of file diff --git a/float-no-zero/apidoc/ol.proj.Projection.html b/float-no-zero/apidoc/ol.proj.Projection.html new file mode 100644 index 0000000000..bcd29944fd --- /dev/null +++ b/float-no-zero/apidoc/ol.proj.Projection.html @@ -0,0 +1,479 @@ + + + + + OpenLayers 3 API Documentation - Class: ol.proj.Projection + + + + + + + + + + + + + + + + +
+ + + + +
+ +
+

+ ol.proj. + + ol.proj.Projection +

+ +
+ +
+
+ + + + +
+

new Projection

+ + +
Stability: experimental
+ + + + +
+
+ + + + + + + + +
Parameters:
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
NameTypeDescription
options + + +olx.ProjectionOptions + + + +

Projection options.

+ + + +
+ + + + + + + + + + + + + + + + + + + +
Source:
+
  • proj.js, line 68
+ + + + + + + +
+ + + + + + + + + +
+ + +
+ + + + + + + + + + + + + + + + +

Methods

+ +
+ +
+

getCode

+ + +
Stability: not documented
+ + + + +
+
+ + +
+

Get the code for this projection, e.g. 'EPSG:4326'.

+
+ + + + + + + + + +
+ + + + + + + + + + + + + + + + + + + +
Source:
+
  • proj.js, line 114
+ + + + + + + +
+ + + + + + + +
Returns:
+ + +
+

Code.

+
+ + + +
+
+ Type +
+
+ +string + + +
+
+ + + + +
+ + + +
+

getExtent

+ + +
Stability: not documented
+ + + + +
+
+ + +
+

Get the validity extent for this projection.

+
+ + + + + + + + + +
+ + + + + + + + + + + + + + + + + + + +
Source:
+
  • proj.js, line 123
+ + + + + + + +
+ + + + + + + +
Returns:
+ + +
+

Extent.

+
+ + + +
+
+ Type +
+
+ +ol.Extent + + +
+
+ + + + +
+ + + +
+

getUnits

+ + +
Stability: not documented
+ + + + +
+
+ + +
+

Get the units of this projection.

+
+ + + + + + + + + +
+ + + + + + + + + + + + + + + + + + + +
Source:
+
  • proj.js, line 145
+ + + + + + + +
+ + + + + + + +
Returns:
+ + +
+

Units.

+
+ + + +
+
+ Type +
+
+ +ol.proj.Units + + +
+
+ + + + +
+ +
+ + + + + +
+ +
+ + + + +
+ + + +
+ + + + + + \ No newline at end of file diff --git a/float-no-zero/apidoc/ol.proj.html b/float-no-zero/apidoc/ol.proj.html new file mode 100644 index 0000000000..0113e27c18 --- /dev/null +++ b/float-no-zero/apidoc/ol.proj.html @@ -0,0 +1,1524 @@ + + + + + OpenLayers 3 API Documentation - Namespace: ol.proj + + + + + + + + + + + + + + + + +
+ + + + +
+ +
+

+ ol. + + ol.proj +

+ +
+ +
+
+ + + + + + +
+ + + + + + + + + + + + + + + + + + + +
Source:
+
  • proj.jsdoc, line 1
+ + + + + + + +
+ + + + +
+ + + + + + + + +

Classes

+ +
+
ol.proj.Projection
+
+
+ + + + + + + +

Members

+ +
+ +
+

<static> ProjectionLike

+ + +
Stability: not documented
+ + + + +
+
+ + + +
+ + + + + + + + + + + + + + + + + + + +
Source:
+
  • proj.js, line 35
+ + + + + + + +
+ + + +
+ + + +
+

<static> Units :string

+ + +
Stability: experimental
+ + + + +
+
+ + + +
+ + +
Properties:
+ +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
NameTypeDefaultDescription
DEGREES + + +string + + + + + + degrees + +
FEET + + +string + + + + + + ft + +
METERS + + +string + + + + + + m + +
PIXELS + + +string + + + + + + pixels + +
+ + + + + + + + + + + + + + + + + + + + +
Source:
+
  • proj.js, line 42
+ + + + + + + +
+ + + +
+ +
+ + + +

Methods

+ +
+ +
+

<static> addProjection

+ + +
Stability: experimental
+ + + + +
+
+ + + + + + + + +
Parameters:
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
NameTypeDescription
projection + + +ol.proj.Projection + + + +

Projection.

+ + + +
+ + + + + + + + + + + + + + + + + + + +
Source:
+
  • proj.js, line 376
+ + + + + + + +
+ + + + + + + + + +
+ + + +
+

<static> configureProj4jsProjection

+ + +
Stability: experimental
+ + + + +
+
+ + + + + + + + +
Parameters:
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
NameTypeDescription
options + + +olx.Proj4jsProjectionOptions + + + +

Proj4js projection options.

+ + + +
+ + + + + + + + + + + + + + + + + + + +
Source:
+
  • proj.js, line 721
+ + + + + + + +
+ + + + + + + +
Returns:
+ + +
+

Proj4js projection.

+
+ + + +
+
+ Type +
+
+ +ol.proj.Projection + + +
+
+ + + + +
+ + + +
+

<static> get

+ + +
Stability: experimental
+ + + + +
+
+ + + + + + + + +
Parameters:
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
NameTypeDescription
projectionLike + + +ol.proj.ProjectionLike + + + +

Either a code string which is + a combination of authority and identifier such as "EPSG:4326", or an + existing projection object, or undefined.

+ + + +
+ + + + + + + + + + + + + + + + + + + +
Source:
+
  • proj.js, line 474
+ + + + + + + +
+ + + + + + + +
Returns:
+ + +
+

Projection.

+
+ + + +
+
+ Type +
+
+ +ol.proj.Projection + + +
+
+ + + + +
+ + + +
+

<static> getTransform

+ + +
Stability: experimental
+ + + + +
+
+ + +
+

Given the projection-like objects this method searches for a transformation +function to convert a coordinates array from the source projection to the +destination projection.

+
+ + + + + + + +
Parameters:
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
NameTypeDescription
source + + +ol.proj.ProjectionLike + + + +

Source.

destination + + +ol.proj.ProjectionLike + + + +

Destination.

+ + + +
+ + + + + + + + + + + + + + + + + + + +
Source:
+
  • proj.js, line 556
+ + + + + + + +
+ + + + + + + +
Returns:
+ + +
+

Transform.

+
+ + + +
+
+ Type +
+
+ +ol.TransformFunction + + +
+
+ + + + +
+ + + +
+

<static> getTransformFromProjections

+ + +
Stability: experimental
+ + + + +
+
+ + +
+

Searches a function that can be used to convert coordinates from the source +projection to the destination projection.

+
+ + + + + + + +
Parameters:
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
NameTypeDescription
sourceProjection + + +ol.proj.Projection + + + +

Source projection.

destinationProjection + + +ol.proj.Projection + + + +

Destination projection.

+ + + +
+ + + + + + + + + + + + + + + + + + + +
Source:
+
  • proj.js, line 573
+ + + + + + + +
+ + + + + + + +
Returns:
+ + +
+

Transform.

+
+ + + +
+
+ Type +
+
+ +ol.TransformFunction + + +
+
+ + + + +
+ + + +
+

<static> transform

+ + +
Stability: experimental
+ + + + +
+
+ + + + + + + + +
Parameters:
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
NameTypeDescription
point + + +ol.Coordinate + + + +

Point.

source + + +ol.proj.ProjectionLike + + + +

Source.

destination + + +ol.proj.ProjectionLike + + + +

Destination.

+ + + +
+ + + + + + + + + + + + + + + + + + + +
Source:
+
  • proj.js, line 693
+ + + + + + + +
+ + + + + + + +
Returns:
+ + +
+

Point.

+
+ + + +
+
+ Type +
+
+ +ol.Coordinate + + +
+
+ + + + +
+ + + +
+

<static> transformWithProjections

+ + +
Stability: experimental
+ + + + +
+
+ + +
+

Transforms the given point to the destination projection.

+
+ + + + + + + +
Parameters:
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
NameTypeDescription
point + + +ol.Coordinate + + + +

Point.

sourceProjection + + +ol.proj.Projection + + + +

Source projection.

destinationProjection + + +ol.proj.Projection + + + +

Destination projection.

+ + + +
+ + + + + + + + + + + + + + + + + + + +
Source:
+
  • proj.js, line 708
+ + + + + + + +
+ + + + + + + +
Returns:
+ + +
+

Point.

+
+ + + +
+
+ Type +
+
+ +ol.Coordinate + + +
+
+ + + + +
+ +
+ + + +

TypeDefs

+ +
+ +
+

ProjectionLike

+ + +
Stability: experimental
+ + + + +
+
+ +
+

A projection as ol.proj.Projection, SRS identifier string or +undefined.

+
+ + + +
+ + + + + + + + + + + + + + + + + + + +
Source:
+
  • proj.js, line 29
+ + + + + + + +
+ + + +
+ +
+ + + +
+ +
+ + + + +
+ + + +
+ + + + + + \ No newline at end of file diff --git a/float-no-zero/apidoc/ol.source.BingMaps.html b/float-no-zero/apidoc/ol.source.BingMaps.html new file mode 100644 index 0000000000..87b85178ff --- /dev/null +++ b/float-no-zero/apidoc/ol.source.BingMaps.html @@ -0,0 +1,260 @@ + + + + + OpenLayers 3 API Documentation - Class: ol.source.BingMaps + + + + + + + + + + + + + + + + +
+ + + + +
+ +
+

+ ol.source. + + ol.source.BingMaps +

+ +
+ +
+
+ + + + +
+

new BingMaps

+ + +
Stability: experimental
+ + + + +
+
+ + + + + + + + +
Parameters:
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
NameTypeDescription
options + + +olx.source.BingMapsOptions + + + +

Bing Maps options.

+ + + +
+ + + + + + + + + + + + + + + + + + + +
Source:
+
  • bingmapssource.js, line 24
+ + + + + + + +
+ + + + + + + + + +
+ + +
+ + + + + + + + + + + + + + +

Members

+ +
+ +
+

<static, constant> TOS_ATTRIBUTION :ol.Attribution

+ + +
Stability: not documented
+ + + + +
+
+ + + +
+ + + + + + + + + + + + + + + + + + + +
Source:
+
  • bingmapssource.js, line 56
+ + + + + + + +
+ + + +
+ +
+ + + + + + + +
+ +
+ + + + +
+ + + +
+ + + + + + \ No newline at end of file diff --git a/float-no-zero/apidoc/ol.source.GPX.html b/float-no-zero/apidoc/ol.source.GPX.html new file mode 100644 index 0000000000..bcb97c1837 --- /dev/null +++ b/float-no-zero/apidoc/ol.source.GPX.html @@ -0,0 +1,2320 @@ + + + + + OpenLayers 3 API Documentation - Class: ol.source.GPX + + + + + + + + + + + + + + + + +
+ + + + +
+ +
+

+ ol.source. + + ol.source.GPX +

+ +
+ +
+
+ + + + +
+

new GPX

+ + +
Stability: experimental
+ + + + +
+
+ + + + + + + + +
Parameters:
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
NameTypeArgumentDescription
options + + +olx.source.GPXOptions + + + + + + <optional>
+ + + +

Options.

+ + + +
+ + + + + + + + + + + + + + + + + + + +
Source:
+
  • gpxsource.js, line 14
+ + + + + + + +
+ + + + + + + + + +
+ + +
+ + +

Extends

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

Methods

+ +
+ +
+

addFeature

+ + +
Stability: experimental
+ + + + +
+
+ + + + + + + + +
Parameters:
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
NameTypeDescription
feature + + +ol.Feature + + + +

Feature.

+ + + +
+ + + + + + + +
Inherited From:
+
+ + + + + + + + + + + + + +
Source:
+
  • vectorsource.js, line 77
+ + + + + + + +
+ + + + + + + + + +
+ + + +
+

addFeatures

+ + +
Stability: experimental
+ + + + +
+
+ + + + + + + + +
Parameters:
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
NameTypeDescription
features + + +Array.<ol.Feature> + + + +

Features.

+ + + +
+ + + + + + + +
Inherited From:
+
+ + + + + + + + + + + + + +
Source:
+
  • vectorsource.js, line 109
+ + + + + + + +
+ + + + + + + + + +
+ + + +
+

dispatchChangeEvent

+ + +
Stability: experimental
+ + + + +
+
+ + + + + + + + + + +
+ + + + + + + +
Inherited From:
+
+ + + + + + + + + + + + + +
Source:
+
  • observable.js, line 35
+ + + + + + + +
+ + + + + + + + + +
+ + + +
+

forEachFeature

+ + +
Stability: experimental
+ + + + +
+
+ + + + + + + + +
Parameters:
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
NameTypeArgumentDescription
f + + +function + + + + + + + +

Callback.

this + + +T + + + + + + <optional>
+ + + +

The object to use as this in f.

+ + + +
+ + + + + + + +
Inherited From:
+
+ + + + + + + + + + + + + +
Source:
+
  • vectorsource.js, line 150
+ + + + + + + +
+ + + + + + + +
Returns:
+ + + + +
+
+ Type +
+
+ +S +| + +undefined + + +
+
+ + + + +
+ + + +
+

forEachFeatureInExtent

+ + +
Stability: experimental
+ + + + +
+
+ + + + + + + + +
Parameters:
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
NameTypeArgumentDescription
extent + + +ol.Extent + + + + + + + +

Extent.

f + + +function + + + + + + + +

Callback.

this + + +T + + + + + + <optional>
+ + + +

The object to use as this in f.

+ + + +
+ + + + + + + +
Inherited From:
+
+ + + + + + + + + + + + + +
Source:
+
  • vectorsource.js, line 186
+ + + + + + + +
+ + + + + + + +
Returns:
+ + + + +
+
+ Type +
+
+ +S +| + +undefined + + +
+
+ + + + +
+ + + +
+

getClosestFeatureToCoordinate

+ + +
Stability: experimental
+ + + + +
+
+ + + + + + + + +
Parameters:
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
NameTypeDescription
coordinate + + +ol.Coordinate + + + +

Coordinate.

+ + + +
+ + + + + + + +
Inherited From:
+
+ + + + + + + + + + + + + +
Source:
+
  • vectorsource.js, line 235
+ + + + + + + +
+ + + + + + + +
Returns:
+ + +
+

Closest feature.

+
+ + + +
+
+ Type +
+
+ +ol.Feature + + +
+
+ + + + +
+ + + +
+

getExtent

+ + +
Stability: experimental
+ + + + +
+
+ + + + + + + + + + +
+ + + + + + + +
Inherited From:
+
+ + + + + + + + + + + + + +
Source:
+
  • vectorsource.js, line 281
+ + + + + + + +
+ + + + + + + +
Returns:
+ + +
+

Extent.

+
+ + + +
+
+ Type +
+
+ +ol.Extent + + +
+
+ + + + +
+ + + +
+

getFeatures

+ + +
Stability: experimental
+ + + + +
+
+ + + + + + + + + + +
+ + + + + + + +
Inherited From:
+
+ + + + + + + + + + + + + +
Source:
+
  • vectorsource.js, line 196
+ + + + + + + +
+ + + + + + + +
Returns:
+ + +
+

Features.

+
+ + + +
+
+ Type +
+
+ +Array.<ol.Feature> + + +
+
+ + + + +
+ + + +
+

getFeaturesAtCoordinate

+ + +
Stability: experimental
+ + + + +
+
+ + + + + + + + +
Parameters:
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
NameTypeDescription
coordinate + + +ol.Coordinate + + + +

Coordinate.

+ + + +
+ + + + + + + +
Inherited From:
+
+ + + + + + + + + + + + + +
Source:
+
  • vectorsource.js, line 211
+ + + + + + + +
+ + + + + + + +
Returns:
+ + +
+

Features.

+
+ + + +
+
+ Type +
+
+ +Array.<ol.Feature> + + +
+
+ + + + +
+ + + +
+

getState

+ + +
Stability: not documented
+ + + + +
+
+ + + + + + + + + + +
+ + + + + + + +
Inherited From:
+
+ + + + + + + + + + + + + +
Source:
+
  • source.js, line 135
+ + + + + + + +
+ + + + + + + +
Returns:
+ + +
+

State.

+
+ + + +
+
+ Type +
+
+ +ol.source.State + + +
+
+ + + + +
+ + + +
+

on

+ + +
Stability: experimental
+ + + + +
+
+ + +
+

Listen for a certain type of event.

+
+ + + + + + + +
Parameters:
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
NameTypeArgumentDescription
type + + +string +| + +Array.<string> + + + + + + + +

The event type or array of event types.

listener + + +function + + + + + + + +

The listener function.

this + + +Object + + + + + + <optional>
+ + + +

The object to use as this in listener.

+ + + +
+ + + + + + + +
Inherited From:
+
+ + + + + + + + + + + + + +
Source:
+
  • observable.js, line 58
+ + + + + + + +
+ + + + + + + +
Returns:
+ + +
+

Unique key for the listener.

+
+ + + +
+
+ Type +
+
+ +goog.events.Key + + +
+
+ + + + +
+ + + +
+

once

+ + +
Stability: experimental
+ + + + +
+
+ + +
+

Listen once for a certain type of event.

+
+ + + + + + + +
Parameters:
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
NameTypeArgumentDescription
type + + +string +| + +Array.<string> + + + + + + + +

The event type or array of event types.

listener + + +function + + + + + + + +

The listener function.

this + + +Object + + + + + + <optional>
+ + + +

The object to use as this in listener.

+ + + +
+ + + + + + + +
Inherited From:
+
+ + + + + + + + + + + + + +
Source:
+
  • observable.js, line 71
+ + + + + + + +
+ + + + + + + +
Returns:
+ + +
+

Unique key for the listener.

+
+ + + +
+
+ Type +
+
+ +goog.events.Key + + +
+
+ + + + +
+ + + +
+

removeFeature

+ + +
Stability: experimental
+ + + + +
+
+ + + + + + + + +
Parameters:
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
NameTypeDescription
feature + + +ol.Feature + + + +

Feature.

+ + + +
+ + + + + + + +
Inherited From:
+
+ + + + + + + + + + + + + +
Source:
+
  • vectorsource.js, line 326
+ + + + + + + +
+ + + + + + + + + +
+ + + +
+

un

+ + +
Stability: experimental
+ + + + +
+
+ + +
+

Unlisten for a certain type of event.

+
+ + + + + + + +
Parameters:
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
NameTypeArgumentDescription
type + + +string +| + +Array.<string> + + + + + + + +

The event type or array of event types.

listener + + +function + + + + + + + +

The listener function.

this + + +Object + + + + + + <optional>
+ + + +

The object to use as this in listener.

+ + + +
+ + + + + + + +
Inherited From:
+
+ + + + + + + + + + + + + +
Source:
+
  • observable.js, line 83
+ + + + + + + +
+ + + + + + + + + +
+ + + +
+

unByKey

+ + +
Stability: experimental
+ + + + +
+
+ + +
+

Removes an event listener using the key returned by on() or once().

+
+ + + + + + + +
Parameters:
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
NameTypeDescription
key + + +goog.events.Key + + + +

Key.

+ + + +
+ + + + + + + +
Inherited From:
+
+ + + + + + + + + + + + + +
Source:
+
  • observable.js, line 93
+ + + + + + + +
+ + + + + + + + + +
+ +
+ + + + + +
+ +
+ + + + +
+ + + +
+ + + + + + \ No newline at end of file diff --git a/float-no-zero/apidoc/ol.source.GeoJSON.html b/float-no-zero/apidoc/ol.source.GeoJSON.html new file mode 100644 index 0000000000..79809f7ee6 --- /dev/null +++ b/float-no-zero/apidoc/ol.source.GeoJSON.html @@ -0,0 +1,2320 @@ + + + + + OpenLayers 3 API Documentation - Class: ol.source.GeoJSON + + + + + + + + + + + + + + + + +
+ + + + +
+ +
+

+ ol.source. + + ol.source.GeoJSON +

+ +
+ +
+
+ + + + +
+

new GeoJSON

+ + +
Stability: experimental
+ + + + +
+
+ + + + + + + + +
Parameters:
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
NameTypeArgumentDescription
options + + +olx.source.GeoJSONOptions + + + + + + <optional>
+ + + +

Options.

+ + + +
+ + + + + + + + + + + + + + + + + + + +
Source:
+
  • geojsonsource.js, line 14
+ + + + + + + +
+ + + + + + + + + +
+ + +
+ + +

Extends

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

Methods

+ +
+ +
+

addFeature

+ + +
Stability: experimental
+ + + + +
+
+ + + + + + + + +
Parameters:
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
NameTypeDescription
feature + + +ol.Feature + + + +

Feature.

+ + + +
+ + + + + + + +
Inherited From:
+
+ + + + + + + + + + + + + +
Source:
+
  • vectorsource.js, line 77
+ + + + + + + +
+ + + + + + + + + +
+ + + +
+

addFeatures

+ + +
Stability: experimental
+ + + + +
+
+ + + + + + + + +
Parameters:
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
NameTypeDescription
features + + +Array.<ol.Feature> + + + +

Features.

+ + + +
+ + + + + + + +
Inherited From:
+
+ + + + + + + + + + + + + +
Source:
+
  • vectorsource.js, line 109
+ + + + + + + +
+ + + + + + + + + +
+ + + +
+

dispatchChangeEvent

+ + +
Stability: experimental
+ + + + +
+
+ + + + + + + + + + +
+ + + + + + + +
Inherited From:
+
+ + + + + + + + + + + + + +
Source:
+
  • observable.js, line 35
+ + + + + + + +
+ + + + + + + + + +
+ + + +
+

forEachFeature

+ + +
Stability: experimental
+ + + + +
+
+ + + + + + + + +
Parameters:
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
NameTypeArgumentDescription
f + + +function + + + + + + + +

Callback.

this + + +T + + + + + + <optional>
+ + + +

The object to use as this in f.

+ + + +
+ + + + + + + +
Inherited From:
+
+ + + + + + + + + + + + + +
Source:
+
  • vectorsource.js, line 150
+ + + + + + + +
+ + + + + + + +
Returns:
+ + + + +
+
+ Type +
+
+ +S +| + +undefined + + +
+
+ + + + +
+ + + +
+

forEachFeatureInExtent

+ + +
Stability: experimental
+ + + + +
+
+ + + + + + + + +
Parameters:
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
NameTypeArgumentDescription
extent + + +ol.Extent + + + + + + + +

Extent.

f + + +function + + + + + + + +

Callback.

this + + +T + + + + + + <optional>
+ + + +

The object to use as this in f.

+ + + +
+ + + + + + + +
Inherited From:
+
+ + + + + + + + + + + + + +
Source:
+
  • vectorsource.js, line 186
+ + + + + + + +
+ + + + + + + +
Returns:
+ + + + +
+
+ Type +
+
+ +S +| + +undefined + + +
+
+ + + + +
+ + + +
+

getClosestFeatureToCoordinate

+ + +
Stability: experimental
+ + + + +
+
+ + + + + + + + +
Parameters:
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
NameTypeDescription
coordinate + + +ol.Coordinate + + + +

Coordinate.

+ + + +
+ + + + + + + +
Inherited From:
+
+ + + + + + + + + + + + + +
Source:
+
  • vectorsource.js, line 235
+ + + + + + + +
+ + + + + + + +
Returns:
+ + +
+

Closest feature.

+
+ + + +
+
+ Type +
+
+ +ol.Feature + + +
+
+ + + + +
+ + + +
+

getExtent

+ + +
Stability: experimental
+ + + + +
+
+ + + + + + + + + + +
+ + + + + + + +
Inherited From:
+
+ + + + + + + + + + + + + +
Source:
+
  • vectorsource.js, line 281
+ + + + + + + +
+ + + + + + + +
Returns:
+ + +
+

Extent.

+
+ + + +
+
+ Type +
+
+ +ol.Extent + + +
+
+ + + + +
+ + + +
+

getFeatures

+ + +
Stability: experimental
+ + + + +
+
+ + + + + + + + + + +
+ + + + + + + +
Inherited From:
+
+ + + + + + + + + + + + + +
Source:
+
  • vectorsource.js, line 196
+ + + + + + + +
+ + + + + + + +
Returns:
+ + +
+

Features.

+
+ + + +
+
+ Type +
+
+ +Array.<ol.Feature> + + +
+
+ + + + +
+ + + +
+

getFeaturesAtCoordinate

+ + +
Stability: experimental
+ + + + +
+
+ + + + + + + + +
Parameters:
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
NameTypeDescription
coordinate + + +ol.Coordinate + + + +

Coordinate.

+ + + +
+ + + + + + + +
Inherited From:
+
+ + + + + + + + + + + + + +
Source:
+
  • vectorsource.js, line 211
+ + + + + + + +
+ + + + + + + +
Returns:
+ + +
+

Features.

+
+ + + +
+
+ Type +
+
+ +Array.<ol.Feature> + + +
+
+ + + + +
+ + + +
+

getState

+ + +
Stability: not documented
+ + + + +
+
+ + + + + + + + + + +
+ + + + + + + +
Inherited From:
+
+ + + + + + + + + + + + + +
Source:
+
  • source.js, line 135
+ + + + + + + +
+ + + + + + + +
Returns:
+ + +
+

State.

+
+ + + +
+
+ Type +
+
+ +ol.source.State + + +
+
+ + + + +
+ + + +
+

on

+ + +
Stability: experimental
+ + + + +
+
+ + +
+

Listen for a certain type of event.

+
+ + + + + + + +
Parameters:
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
NameTypeArgumentDescription
type + + +string +| + +Array.<string> + + + + + + + +

The event type or array of event types.

listener + + +function + + + + + + + +

The listener function.

this + + +Object + + + + + + <optional>
+ + + +

The object to use as this in listener.

+ + + +
+ + + + + + + +
Inherited From:
+
+ + + + + + + + + + + + + +
Source:
+
  • observable.js, line 58
+ + + + + + + +
+ + + + + + + +
Returns:
+ + +
+

Unique key for the listener.

+
+ + + +
+
+ Type +
+
+ +goog.events.Key + + +
+
+ + + + +
+ + + +
+

once

+ + +
Stability: experimental
+ + + + +
+
+ + +
+

Listen once for a certain type of event.

+
+ + + + + + + +
Parameters:
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
NameTypeArgumentDescription
type + + +string +| + +Array.<string> + + + + + + + +

The event type or array of event types.

listener + + +function + + + + + + + +

The listener function.

this + + +Object + + + + + + <optional>
+ + + +

The object to use as this in listener.

+ + + +
+ + + + + + + +
Inherited From:
+
+ + + + + + + + + + + + + +
Source:
+
  • observable.js, line 71
+ + + + + + + +
+ + + + + + + +
Returns:
+ + +
+

Unique key for the listener.

+
+ + + +
+
+ Type +
+
+ +goog.events.Key + + +
+
+ + + + +
+ + + +
+

removeFeature

+ + +
Stability: experimental
+ + + + +
+
+ + + + + + + + +
Parameters:
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
NameTypeDescription
feature + + +ol.Feature + + + +

Feature.

+ + + +
+ + + + + + + +
Inherited From:
+
+ + + + + + + + + + + + + +
Source:
+
  • vectorsource.js, line 326
+ + + + + + + +
+ + + + + + + + + +
+ + + +
+

un

+ + +
Stability: experimental
+ + + + +
+
+ + +
+

Unlisten for a certain type of event.

+
+ + + + + + + +
Parameters:
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
NameTypeArgumentDescription
type + + +string +| + +Array.<string> + + + + + + + +

The event type or array of event types.

listener + + +function + + + + + + + +

The listener function.

this + + +Object + + + + + + <optional>
+ + + +

The object to use as this in listener.

+ + + +
+ + + + + + + +
Inherited From:
+
+ + + + + + + + + + + + + +
Source:
+
  • observable.js, line 83
+ + + + + + + +
+ + + + + + + + + +
+ + + +
+

unByKey

+ + +
Stability: experimental
+ + + + +
+
+ + +
+

Removes an event listener using the key returned by on() or once().

+
+ + + + + + + +
Parameters:
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
NameTypeDescription
key + + +goog.events.Key + + + +

Key.

+ + + +
+ + + + + + + +
Inherited From:
+
+ + + + + + + + + + + + + +
Source:
+
  • observable.js, line 93
+ + + + + + + +
+ + + + + + + + + +
+ +
+ + + + + +
+ +
+ + + + +
+ + + +
+ + + + + + \ No newline at end of file diff --git a/float-no-zero/apidoc/ol.source.IGC.html b/float-no-zero/apidoc/ol.source.IGC.html new file mode 100644 index 0000000000..0490a781f1 --- /dev/null +++ b/float-no-zero/apidoc/ol.source.IGC.html @@ -0,0 +1,2320 @@ + + + + + OpenLayers 3 API Documentation - Class: ol.source.IGC + + + + + + + + + + + + + + + + +
+ + + + +
+ +
+

+ ol.source. + + ol.source.IGC +

+ +
+ +
+
+ + + + +
+

new IGC

+ + +
Stability: experimental
+ + + + +
+
+ + + + + + + + +
Parameters:
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
NameTypeArgumentDescription
options + + +olx.source.IGCOptions + + + + + + <optional>
+ + + +

Options.

+ + + +
+ + + + + + + + + + + + + + + + + + + +
Source:
+
  • igcsource.js, line 14
+ + + + + + + +
+ + + + + + + + + +
+ + +
+ + +

Extends

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

Methods

+ +
+ +
+

addFeature

+ + +
Stability: experimental
+ + + + +
+
+ + + + + + + + +
Parameters:
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
NameTypeDescription
feature + + +ol.Feature + + + +

Feature.

+ + + +
+ + + + + + + +
Inherited From:
+
+ + + + + + + + + + + + + +
Source:
+
  • vectorsource.js, line 77
+ + + + + + + +
+ + + + + + + + + +
+ + + +
+

addFeatures

+ + +
Stability: experimental
+ + + + +
+
+ + + + + + + + +
Parameters:
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
NameTypeDescription
features + + +Array.<ol.Feature> + + + +

Features.

+ + + +
+ + + + + + + +
Inherited From:
+
+ + + + + + + + + + + + + +
Source:
+
  • vectorsource.js, line 109
+ + + + + + + +
+ + + + + + + + + +
+ + + +
+

dispatchChangeEvent

+ + +
Stability: experimental
+ + + + +
+
+ + + + + + + + + + +
+ + + + + + + +
Inherited From:
+
+ + + + + + + + + + + + + +
Source:
+
  • observable.js, line 35
+ + + + + + + +
+ + + + + + + + + +
+ + + +
+

forEachFeature

+ + +
Stability: experimental
+ + + + +
+
+ + + + + + + + +
Parameters:
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
NameTypeArgumentDescription
f + + +function + + + + + + + +

Callback.

this + + +T + + + + + + <optional>
+ + + +

The object to use as this in f.

+ + + +
+ + + + + + + +
Inherited From:
+
+ + + + + + + + + + + + + +
Source:
+
  • vectorsource.js, line 150
+ + + + + + + +
+ + + + + + + +
Returns:
+ + + + +
+
+ Type +
+
+ +S +| + +undefined + + +
+
+ + + + +
+ + + +
+

forEachFeatureInExtent

+ + +
Stability: experimental
+ + + + +
+
+ + + + + + + + +
Parameters:
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
NameTypeArgumentDescription
extent + + +ol.Extent + + + + + + + +

Extent.

f + + +function + + + + + + + +

Callback.

this + + +T + + + + + + <optional>
+ + + +

The object to use as this in f.

+ + + +
+ + + + + + + +
Inherited From:
+
+ + + + + + + + + + + + + +
Source:
+
  • vectorsource.js, line 186
+ + + + + + + +
+ + + + + + + +
Returns:
+ + + + +
+
+ Type +
+
+ +S +| + +undefined + + +
+
+ + + + +
+ + + +
+

getClosestFeatureToCoordinate

+ + +
Stability: experimental
+ + + + +
+
+ + + + + + + + +
Parameters:
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
NameTypeDescription
coordinate + + +ol.Coordinate + + + +

Coordinate.

+ + + +
+ + + + + + + +
Inherited From:
+
+ + + + + + + + + + + + + +
Source:
+
  • vectorsource.js, line 235
+ + + + + + + +
+ + + + + + + +
Returns:
+ + +
+

Closest feature.

+
+ + + +
+
+ Type +
+
+ +ol.Feature + + +
+
+ + + + +
+ + + +
+

getExtent

+ + +
Stability: experimental
+ + + + +
+
+ + + + + + + + + + +
+ + + + + + + +
Inherited From:
+
+ + + + + + + + + + + + + +
Source:
+
  • vectorsource.js, line 281
+ + + + + + + +
+ + + + + + + +
Returns:
+ + +
+

Extent.

+
+ + + +
+
+ Type +
+
+ +ol.Extent + + +
+
+ + + + +
+ + + +
+

getFeatures

+ + +
Stability: experimental
+ + + + +
+
+ + + + + + + + + + +
+ + + + + + + +
Inherited From:
+
+ + + + + + + + + + + + + +
Source:
+
  • vectorsource.js, line 196
+ + + + + + + +
+ + + + + + + +
Returns:
+ + +
+

Features.

+
+ + + +
+
+ Type +
+
+ +Array.<ol.Feature> + + +
+
+ + + + +
+ + + +
+

getFeaturesAtCoordinate

+ + +
Stability: experimental
+ + + + +
+
+ + + + + + + + +
Parameters:
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
NameTypeDescription
coordinate + + +ol.Coordinate + + + +

Coordinate.

+ + + +
+ + + + + + + +
Inherited From:
+
+ + + + + + + + + + + + + +
Source:
+
  • vectorsource.js, line 211
+ + + + + + + +
+ + + + + + + +
Returns:
+ + +
+

Features.

+
+ + + +
+
+ Type +
+
+ +Array.<ol.Feature> + + +
+
+ + + + +
+ + + +
+

getState

+ + +
Stability: not documented
+ + + + +
+
+ + + + + + + + + + +
+ + + + + + + +
Inherited From:
+
+ + + + + + + + + + + + + +
Source:
+
  • source.js, line 135
+ + + + + + + +
+ + + + + + + +
Returns:
+ + +
+

State.

+
+ + + +
+
+ Type +
+
+ +ol.source.State + + +
+
+ + + + +
+ + + +
+

on

+ + +
Stability: experimental
+ + + + +
+
+ + +
+

Listen for a certain type of event.

+
+ + + + + + + +
Parameters:
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
NameTypeArgumentDescription
type + + +string +| + +Array.<string> + + + + + + + +

The event type or array of event types.

listener + + +function + + + + + + + +

The listener function.

this + + +Object + + + + + + <optional>
+ + + +

The object to use as this in listener.

+ + + +
+ + + + + + + +
Inherited From:
+
+ + + + + + + + + + + + + +
Source:
+
  • observable.js, line 58
+ + + + + + + +
+ + + + + + + +
Returns:
+ + +
+

Unique key for the listener.

+
+ + + +
+
+ Type +
+
+ +goog.events.Key + + +
+
+ + + + +
+ + + +
+

once

+ + +
Stability: experimental
+ + + + +
+
+ + +
+

Listen once for a certain type of event.

+
+ + + + + + + +
Parameters:
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
NameTypeArgumentDescription
type + + +string +| + +Array.<string> + + + + + + + +

The event type or array of event types.

listener + + +function + + + + + + + +

The listener function.

this + + +Object + + + + + + <optional>
+ + + +

The object to use as this in listener.

+ + + +
+ + + + + + + +
Inherited From:
+
+ + + + + + + + + + + + + +
Source:
+
  • observable.js, line 71
+ + + + + + + +
+ + + + + + + +
Returns:
+ + +
+

Unique key for the listener.

+
+ + + +
+
+ Type +
+
+ +goog.events.Key + + +
+
+ + + + +
+ + + +
+

removeFeature

+ + +
Stability: experimental
+ + + + +
+
+ + + + + + + + +
Parameters:
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
NameTypeDescription
feature + + +ol.Feature + + + +

Feature.

+ + + +
+ + + + + + + +
Inherited From:
+
+ + + + + + + + + + + + + +
Source:
+
  • vectorsource.js, line 326
+ + + + + + + +
+ + + + + + + + + +
+ + + +
+

un

+ + +
Stability: experimental
+ + + + +
+
+ + +
+

Unlisten for a certain type of event.

+
+ + + + + + + +
Parameters:
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
NameTypeArgumentDescription
type + + +string +| + +Array.<string> + + + + + + + +

The event type or array of event types.

listener + + +function + + + + + + + +

The listener function.

this + + +Object + + + + + + <optional>
+ + + +

The object to use as this in listener.

+ + + +
+ + + + + + + +
Inherited From:
+
+ + + + + + + + + + + + + +
Source:
+
  • observable.js, line 83
+ + + + + + + +
+ + + + + + + + + +
+ + + +
+

unByKey

+ + +
Stability: experimental
+ + + + +
+
+ + +
+

Removes an event listener using the key returned by on() or once().

+
+ + + + + + + +
Parameters:
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
NameTypeDescription
key + + +goog.events.Key + + + +

Key.

+ + + +
+ + + + + + + +
Inherited From:
+
+ + + + + + + + + + + + + +
Source:
+
  • observable.js, line 93
+ + + + + + + +
+ + + + + + + + + +
+ +
+ + + + + +
+ +
+ + + + +
+ + + +
+ + + + + + \ No newline at end of file diff --git a/float-no-zero/apidoc/ol.source.ImageCanvas.html b/float-no-zero/apidoc/ol.source.ImageCanvas.html new file mode 100644 index 0000000000..111629902c --- /dev/null +++ b/float-no-zero/apidoc/ol.source.ImageCanvas.html @@ -0,0 +1,205 @@ + + + + + OpenLayers 3 API Documentation - Class: ol.source.ImageCanvas + + + + + + + + + + + + + + + + +
+ + + + +
+ +
+

+ ol.source. + + ol.source.ImageCanvas +

+ +
+ +
+
+ + + + +
+

new ImageCanvas

+ + +
Stability: experimental
+ + + + +
+
+ + + + + + + + +
Parameters:
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
NameTypeDescription
options + + +olx.source.ImageCanvasOptions + + + +
+ + + +
+ + + + + + + + + + + + + + + + + + + +
Source:
+
  • imagecanvassource.js, line 16
+ + + + + + + +
+ + + + + + + + + +
+ + +
+ + + + + + + + + + + + + + + + + + + + +
+ +
+ + + + +
+ + + +
+ + + + + + \ No newline at end of file diff --git a/float-no-zero/apidoc/ol.source.ImageStatic.html b/float-no-zero/apidoc/ol.source.ImageStatic.html new file mode 100644 index 0000000000..f4e617d846 --- /dev/null +++ b/float-no-zero/apidoc/ol.source.ImageStatic.html @@ -0,0 +1,205 @@ + + + + + OpenLayers 3 API Documentation - Class: ol.source.ImageStatic + + + + + + + + + + + + + + + + +
+ + + + +
+ +
+

+ ol.source. + + ol.source.ImageStatic +

+ +
+ +
+
+ + + + +
+

new ImageStatic

+ + +
Stability: experimental
+ + + + +
+
+ + + + + + + + +
Parameters:
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
NameTypeDescription
options + + +olx.source.ImageStaticOptions + + + +

Options.

+ + + +
+ + + + + + + + + + + + + + + + + + + +
Source:
+
  • imagestaticsource.js, line 16
+ + + + + + + +
+ + + + + + + + + +
+ + +
+ + + + + + + + + + + + + + + + + + + + +
+ +
+ + + + +
+ + + +
+ + + + + + \ No newline at end of file diff --git a/float-no-zero/apidoc/ol.source.ImageVector.html b/float-no-zero/apidoc/ol.source.ImageVector.html new file mode 100644 index 0000000000..f9510b9271 --- /dev/null +++ b/float-no-zero/apidoc/ol.source.ImageVector.html @@ -0,0 +1,223 @@ + + + + + OpenLayers 3 API Documentation - Class: ol.source.ImageVector + + + + + + + + + + + + + + + + +
+ + + + +
+ +
+

+ ol.source. + + ol.source.ImageVector +

+ +
+ +
+
+ + + + +
+

new ImageVector

+ + +
Stability: experimental
+ + + + +
+
+ + +
+

An image source whose images are canvas elements into which vector features +read from a vector source (ol.source.Vector) are drawn. An +ol.source.ImageVector object is to be used as the source of an image +layer (ol.layer.Image). Image layers are rotated, scaled, and translated, +as opposed to being re-rendered, during animations and interactions. So, like +any other image layer, an image layer configured with an +ol.source.ImageVector will exhibit this behaviour. This is in contrast to a +vector layer, where vector features are re-drawn during animations and +interactions.

+
+ + + + + + + +
Parameters:
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
NameTypeDescription
options + + +olx.source.ImageVectorOptions + + + +

Options.

+ + + +
+ + + + + + + + + + + + + + + + + + + +
Source:
+
  • imagevectorsource.js, line 35
+ + + + + + + +
+ + + + + + + + + +
+ + +
+ + +

Extends

+ + + + + + + + + + + + + + + + + + + + + +
+ +
+ + + + +
+ + + +
+ + + + + + \ No newline at end of file diff --git a/float-no-zero/apidoc/ol.source.ImageWMS.html b/float-no-zero/apidoc/ol.source.ImageWMS.html new file mode 100644 index 0000000000..69c5634b64 --- /dev/null +++ b/float-no-zero/apidoc/ol.source.ImageWMS.html @@ -0,0 +1,756 @@ + + + + + OpenLayers 3 API Documentation - Class: ol.source.ImageWMS + + + + + + + + + + + + + + + + +
+ + + + +
+ +
+

+ ol.source. + + ol.source.ImageWMS +

+ +
+ +
+
+ + + + +
+

new ImageWMS

+ + +
Stability: experimental
+ + + + +
+
+ + + + + + + + +
Parameters:
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
NameTypeArgumentDescription
options + + +olx.source.ImageWMSOptions + + + + + + <optional>
+ + + +

Options.

+ + + +
+ + + + + + + + + + + + + + + + + + + +
Source:
+
  • imagewmssource.js, line 24
+ + + + + + + +
+ + + + + + + + + +
+ + +
+ + + + + + + + + + + + + + + + +

Methods

+ +
+ +
+

getGetFeatureInfoUrl

+ + +
Stability: not documented
+ + + + +
+
+ + +
+

Return the GetFeatureInfo URL for the passed coordinate, resolution, and +projection. Return undefined if the GetFeatureInfo URL cannot be +constructed.

+
+ + + + + + + +
Parameters:
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
NameTypeDescription
coordinate + + +ol.Coordinate + + + +

Coordinate.

resolution + + +number + + + +

Resolution.

projection + + +ol.proj.Projection + + + +

Projection.

params + + +Object + + + +

GetFeatureInfo params. INFO_FORMAT at least should + be provided. If QUERY_LAYERS is not provided then the layers specified + in the LAYERS parameter will be used. VERSION should not be + specified here.

+ + + +
+ + + + + + + + + + + + + + + + + + + +
Source:
+
  • imagewmssource.js, line 128
+ + + + + + + +
+ + + + + + + +
Returns:
+ + +
+

GetFeatureInfo URL.

+
+ + + +
+
+ Type +
+
+ +string +| + +undefined + + +
+
+ + + + +
+ + + +
+

getParams

+ + +
Stability: not documented
+ + + + +
+
+ + +
+

Get the user-provided params, i.e. those passed to the constructor through +the "params" option, and possibly updated using the updateParams method.

+
+ + + + + + + + + +
+ + + + + + + + + + + + + + + + + + + +
Source:
+
  • imagewmssource.js, line 177
+ + + + + + + +
+ + + + + + + +
Returns:
+ + +
+

Params.

+
+ + + +
+
+ Type +
+
+ +Object + + +
+
+ + + + +
+ + + +
+

setUrl

+ + +
Stability: not documented
+ + + + +
+
+ + + + + + + + +
Parameters:
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
NameTypeDescription
url + + +string +| + +undefined + + + +

URL.

+ + + +
+ + + + + + + + + + + + + + + + + + + +
Source:
+
  • imagewmssource.js, line 316
+ + + + + + + +
+ + + + + + + + + +
+ + + +
+

updateParams

+ + +
Stability: not documented
+ + + + +
+
+ + +
+

Update the user-provided params.

+
+ + + + + + + +
Parameters:
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
NameTypeDescription
params + + +Object + + + +

Params.

+ + + +
+ + + + + + + + + + + + + + + + + + + +
Source:
+
  • imagewmssource.js, line 329
+ + + + + + + +
+ + + + + + + + + +
+ +
+ + + + + +
+ +
+ + + + +
+ + + +
+ + + + + + \ No newline at end of file diff --git a/float-no-zero/apidoc/ol.source.KML.html b/float-no-zero/apidoc/ol.source.KML.html new file mode 100644 index 0000000000..9af5de8634 --- /dev/null +++ b/float-no-zero/apidoc/ol.source.KML.html @@ -0,0 +1,2320 @@ + + + + + OpenLayers 3 API Documentation - Class: ol.source.KML + + + + + + + + + + + + + + + + +
+ + + + +
+ +
+

+ ol.source. + + ol.source.KML +

+ +
+ +
+
+ + + + +
+

new KML

+ + +
Stability: experimental
+ + + + +
+
+ + + + + + + + +
Parameters:
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
NameTypeArgumentDescription
options + + +olx.source.KMLOptions + + + + + + <optional>
+ + + +

Options.

+ + + +
+ + + + + + + + + + + + + + + + + + + +
Source:
+
  • kmlsource.js, line 14
+ + + + + + + +
+ + + + + + + + + +
+ + +
+ + +

Extends

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

Methods

+ +
+ +
+

addFeature

+ + +
Stability: experimental
+ + + + +
+
+ + + + + + + + +
Parameters:
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
NameTypeDescription
feature + + +ol.Feature + + + +

Feature.

+ + + +
+ + + + + + + +
Inherited From:
+
+ + + + + + + + + + + + + +
Source:
+
  • vectorsource.js, line 77
+ + + + + + + +
+ + + + + + + + + +
+ + + +
+

addFeatures

+ + +
Stability: experimental
+ + + + +
+
+ + + + + + + + +
Parameters:
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
NameTypeDescription
features + + +Array.<ol.Feature> + + + +

Features.

+ + + +
+ + + + + + + +
Inherited From:
+
+ + + + + + + + + + + + + +
Source:
+
  • vectorsource.js, line 109
+ + + + + + + +
+ + + + + + + + + +
+ + + +
+

dispatchChangeEvent

+ + +
Stability: experimental
+ + + + +
+
+ + + + + + + + + + +
+ + + + + + + +
Inherited From:
+
+ + + + + + + + + + + + + +
Source:
+
  • observable.js, line 35
+ + + + + + + +
+ + + + + + + + + +
+ + + +
+

forEachFeature

+ + +
Stability: experimental
+ + + + +
+
+ + + + + + + + +
Parameters:
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
NameTypeArgumentDescription
f + + +function + + + + + + + +

Callback.

this + + +T + + + + + + <optional>
+ + + +

The object to use as this in f.

+ + + +
+ + + + + + + +
Inherited From:
+
+ + + + + + + + + + + + + +
Source:
+
  • vectorsource.js, line 150
+ + + + + + + +
+ + + + + + + +
Returns:
+ + + + +
+
+ Type +
+
+ +S +| + +undefined + + +
+
+ + + + +
+ + + +
+

forEachFeatureInExtent

+ + +
Stability: experimental
+ + + + +
+
+ + + + + + + + +
Parameters:
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
NameTypeArgumentDescription
extent + + +ol.Extent + + + + + + + +

Extent.

f + + +function + + + + + + + +

Callback.

this + + +T + + + + + + <optional>
+ + + +

The object to use as this in f.

+ + + +
+ + + + + + + +
Inherited From:
+
+ + + + + + + + + + + + + +
Source:
+
  • vectorsource.js, line 186
+ + + + + + + +
+ + + + + + + +
Returns:
+ + + + +
+
+ Type +
+
+ +S +| + +undefined + + +
+
+ + + + +
+ + + +
+

getClosestFeatureToCoordinate

+ + +
Stability: experimental
+ + + + +
+
+ + + + + + + + +
Parameters:
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
NameTypeDescription
coordinate + + +ol.Coordinate + + + +

Coordinate.

+ + + +
+ + + + + + + +
Inherited From:
+
+ + + + + + + + + + + + + +
Source:
+
  • vectorsource.js, line 235
+ + + + + + + +
+ + + + + + + +
Returns:
+ + +
+

Closest feature.

+
+ + + +
+
+ Type +
+
+ +ol.Feature + + +
+
+ + + + +
+ + + +
+

getExtent

+ + +
Stability: experimental
+ + + + +
+
+ + + + + + + + + + +
+ + + + + + + +
Inherited From:
+
+ + + + + + + + + + + + + +
Source:
+
  • vectorsource.js, line 281
+ + + + + + + +
+ + + + + + + +
Returns:
+ + +
+

Extent.

+
+ + + +
+
+ Type +
+
+ +ol.Extent + + +
+
+ + + + +
+ + + +
+

getFeatures

+ + +
Stability: experimental
+ + + + +
+
+ + + + + + + + + + +
+ + + + + + + +
Inherited From:
+
+ + + + + + + + + + + + + +
Source:
+
  • vectorsource.js, line 196
+ + + + + + + +
+ + + + + + + +
Returns:
+ + +
+

Features.

+
+ + + +
+
+ Type +
+
+ +Array.<ol.Feature> + + +
+
+ + + + +
+ + + +
+

getFeaturesAtCoordinate

+ + +
Stability: experimental
+ + + + +
+
+ + + + + + + + +
Parameters:
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
NameTypeDescription
coordinate + + +ol.Coordinate + + + +

Coordinate.

+ + + +
+ + + + + + + +
Inherited From:
+
+ + + + + + + + + + + + + +
Source:
+
  • vectorsource.js, line 211
+ + + + + + + +
+ + + + + + + +
Returns:
+ + +
+

Features.

+
+ + + +
+
+ Type +
+
+ +Array.<ol.Feature> + + +
+
+ + + + +
+ + + +
+

getState

+ + +
Stability: not documented
+ + + + +
+
+ + + + + + + + + + +
+ + + + + + + +
Inherited From:
+
+ + + + + + + + + + + + + +
Source:
+
  • source.js, line 135
+ + + + + + + +
+ + + + + + + +
Returns:
+ + +
+

State.

+
+ + + +
+
+ Type +
+
+ +ol.source.State + + +
+
+ + + + +
+ + + +
+

on

+ + +
Stability: experimental
+ + + + +
+
+ + +
+

Listen for a certain type of event.

+
+ + + + + + + +
Parameters:
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
NameTypeArgumentDescription
type + + +string +| + +Array.<string> + + + + + + + +

The event type or array of event types.

listener + + +function + + + + + + + +

The listener function.

this + + +Object + + + + + + <optional>
+ + + +

The object to use as this in listener.

+ + + +
+ + + + + + + +
Inherited From:
+
+ + + + + + + + + + + + + +
Source:
+
  • observable.js, line 58
+ + + + + + + +
+ + + + + + + +
Returns:
+ + +
+

Unique key for the listener.

+
+ + + +
+
+ Type +
+
+ +goog.events.Key + + +
+
+ + + + +
+ + + +
+

once

+ + +
Stability: experimental
+ + + + +
+
+ + +
+

Listen once for a certain type of event.

+
+ + + + + + + +
Parameters:
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
NameTypeArgumentDescription
type + + +string +| + +Array.<string> + + + + + + + +

The event type or array of event types.

listener + + +function + + + + + + + +

The listener function.

this + + +Object + + + + + + <optional>
+ + + +

The object to use as this in listener.

+ + + +
+ + + + + + + +
Inherited From:
+
+ + + + + + + + + + + + + +
Source:
+
  • observable.js, line 71
+ + + + + + + +
+ + + + + + + +
Returns:
+ + +
+

Unique key for the listener.

+
+ + + +
+
+ Type +
+
+ +goog.events.Key + + +
+
+ + + + +
+ + + +
+

removeFeature

+ + +
Stability: experimental
+ + + + +
+
+ + + + + + + + +
Parameters:
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
NameTypeDescription
feature + + +ol.Feature + + + +

Feature.

+ + + +
+ + + + + + + +
Inherited From:
+
+ + + + + + + + + + + + + +
Source:
+
  • vectorsource.js, line 326
+ + + + + + + +
+ + + + + + + + + +
+ + + +
+

un

+ + +
Stability: experimental
+ + + + +
+
+ + +
+

Unlisten for a certain type of event.

+
+ + + + + + + +
Parameters:
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
NameTypeArgumentDescription
type + + +string +| + +Array.<string> + + + + + + + +

The event type or array of event types.

listener + + +function + + + + + + + +

The listener function.

this + + +Object + + + + + + <optional>
+ + + +

The object to use as this in listener.

+ + + +
+ + + + + + + +
Inherited From:
+
+ + + + + + + + + + + + + +
Source:
+
  • observable.js, line 83
+ + + + + + + +
+ + + + + + + + + +
+ + + +
+

unByKey

+ + +
Stability: experimental
+ + + + +
+
+ + +
+

Removes an event listener using the key returned by on() or once().

+
+ + + + + + + +
Parameters:
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
NameTypeDescription
key + + +goog.events.Key + + + +

Key.

+ + + +
+ + + + + + + +
Inherited From:
+
+ + + + + + + + + + + + + +
Source:
+
  • observable.js, line 93
+ + + + + + + +
+ + + + + + + + + +
+ +
+ + + + + +
+ +
+ + + + +
+ + + +
+ + + + + + \ No newline at end of file diff --git a/float-no-zero/apidoc/ol.source.MapGuide.html b/float-no-zero/apidoc/ol.source.MapGuide.html new file mode 100644 index 0000000000..997072d598 --- /dev/null +++ b/float-no-zero/apidoc/ol.source.MapGuide.html @@ -0,0 +1,205 @@ + + + + + OpenLayers 3 API Documentation - Class: ol.source.MapGuide + + + + + + + + + + + + + + + + +
+ + + + +
+ +
+

+ ol.source. + + ol.source.MapGuide +

+ +
+ +
+
+ + + + +
+

new MapGuide

+ + +
Stability: not documented
+ + + + +
+
+ + + + + + + + +
Parameters:
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
NameTypeDescription
options + + +olx.source.MapGuideOptions + + + +

Options.

+ + + +
+ + + + + + + + + + + + + + + + + + + +
Source:
+
  • mapguidesource.js, line 17
+ + + + + + + +
+ + + + + + + + + +
+ + +
+ + + + + + + + + + + + + + + + + + + + +
+ +
+ + + + +
+ + + +
+ + + + + + \ No newline at end of file diff --git a/float-no-zero/apidoc/ol.source.MapQuest.html b/float-no-zero/apidoc/ol.source.MapQuest.html new file mode 100644 index 0000000000..0845a38392 --- /dev/null +++ b/float-no-zero/apidoc/ol.source.MapQuest.html @@ -0,0 +1,342 @@ + + + + + OpenLayers 3 API Documentation - Class: ol.source.MapQuest + + + + + + + + + + + + + + + + +
+ + + + +
+ +
+

+ ol.source. + + ol.source.MapQuest +

+ +
+ +
+
+ + + + +
+

new MapQuest

+ + +
Stability: experimental
+ + + + +
+
+ + + + + + + + +
Parameters:
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
NameTypeArgumentDescription
options + + +olx.source.MapQuestOptions + + + + + + <optional>
+ + + +

MapQuest options.

+ + + +
+ + + + + + + + + + + + + + + + + + + +
Source:
+
  • mapquestsource.js, line 16
+ + + + + + + +
+ + + + + + + + + +
+ + +
+ + +

Extends

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

Methods

+ +
+ +
+

setUrl

+ + +
Stability: experimental
+ + + + +
+
+ + + + + + + + +
Parameters:
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
NameTypeDescription
url + + +string + + + +

URL.

+ + + +
+ + + + + + + +
Inherited From:
+
+ + + + + + + + + + + + + +
Source:
+
  • xyzsource.js, line 73
+ + + + + + + +
+ + + + + + + + + +
+ +
+ + + + + +
+ +
+ + + + +
+ + + +
+ + + + + + \ No newline at end of file diff --git a/float-no-zero/apidoc/ol.source.OSM.html b/float-no-zero/apidoc/ol.source.OSM.html new file mode 100644 index 0000000000..4f74cc99a5 --- /dev/null +++ b/float-no-zero/apidoc/ol.source.OSM.html @@ -0,0 +1,448 @@ + + + + + OpenLayers 3 API Documentation - Class: ol.source.OSM + + + + + + + + + + + + + + + + +
+ + + + +
+ +
+

+ ol.source. + + ol.source.OSM +

+ +
+ +
+
+ + + + +
+

new OSM

+ + +
Stability: experimental
+ + + + +
+
+ + + + + + + + +
Parameters:
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
NameTypeArgumentDescription
options + + +olx.source.OSMOptions + + + + + + <optional>
+ + + +

Open Street Map options.

+ + + +
+ + + + + + + + + + + + + + + + + + + +
Source:
+
  • osmsource.js, line 14
+ + + + + + + +
+ + + + + + + + + +
+ + +
+ + +

Extends

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

Members

+ +
+ +
+

<static, constant> DATA_ATTRIBUTION :ol.Attribution

+ + +
Stability: not documented
+ + + + +
+
+ + + +
+ + + + + + + + + + + + + + + + + + + +
Source:
+
  • osmsource.js, line 48
+ + + + + + + +
+ + + +
+ + + +
+

<static, constant> TILE_ATTRIBUTION :ol.Attribution

+ + +
Stability: not documented
+ + + + +
+
+ + + +
+ + + + + + + + + + + + + + + + + + + +
Source:
+
  • osmsource.js, line 60
+ + + + + + + +
+ + + +
+ +
+ + + +

Methods

+ +
+ +
+

setUrl

+ + +
Stability: experimental
+ + + + +
+
+ + + + + + + + +
Parameters:
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
NameTypeDescription
url + + +string + + + +

URL.

+ + + +
+ + + + + + + +
Inherited From:
+
+ + + + + + + + + + + + + +
Source:
+
  • xyzsource.js, line 73
+ + + + + + + +
+ + + + + + + + + +
+ +
+ + + + + +
+ +
+ + + + +
+ + + +
+ + + + + + \ No newline at end of file diff --git a/float-no-zero/apidoc/ol.source.OSMXML.html b/float-no-zero/apidoc/ol.source.OSMXML.html new file mode 100644 index 0000000000..0613ca17a5 --- /dev/null +++ b/float-no-zero/apidoc/ol.source.OSMXML.html @@ -0,0 +1,2320 @@ + + + + + OpenLayers 3 API Documentation - Class: ol.source.OSMXML + + + + + + + + + + + + + + + + +
+ + + + +
+ +
+

+ ol.source. + + ol.source.OSMXML +

+ +
+ +
+
+ + + + +
+

new OSMXML

+ + +
Stability: not documented
+ + + + +
+
+ + + + + + + + +
Parameters:
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
NameTypeArgumentDescription
options + + +olx.source.OSMXMLOptions + + + + + + <optional>
+ + + +

Options.

+ + + +
+ + + + + + + + + + + + + + + + + + + +
Source:
+
  • osmxmlsource.js, line 13
+ + + + + + + +
+ + + + + + + + + +
+ + +
+ + +

Extends

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

Methods

+ +
+ +
+

addFeature

+ + +
Stability: experimental
+ + + + +
+
+ + + + + + + + +
Parameters:
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
NameTypeDescription
feature + + +ol.Feature + + + +

Feature.

+ + + +
+ + + + + + + +
Inherited From:
+
+ + + + + + + + + + + + + +
Source:
+
  • vectorsource.js, line 77
+ + + + + + + +
+ + + + + + + + + +
+ + + +
+

addFeatures

+ + +
Stability: experimental
+ + + + +
+
+ + + + + + + + +
Parameters:
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
NameTypeDescription
features + + +Array.<ol.Feature> + + + +

Features.

+ + + +
+ + + + + + + +
Inherited From:
+
+ + + + + + + + + + + + + +
Source:
+
  • vectorsource.js, line 109
+ + + + + + + +
+ + + + + + + + + +
+ + + +
+

dispatchChangeEvent

+ + +
Stability: experimental
+ + + + +
+
+ + + + + + + + + + +
+ + + + + + + +
Inherited From:
+
+ + + + + + + + + + + + + +
Source:
+
  • observable.js, line 35
+ + + + + + + +
+ + + + + + + + + +
+ + + +
+

forEachFeature

+ + +
Stability: experimental
+ + + + +
+
+ + + + + + + + +
Parameters:
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
NameTypeArgumentDescription
f + + +function + + + + + + + +

Callback.

this + + +T + + + + + + <optional>
+ + + +

The object to use as this in f.

+ + + +
+ + + + + + + +
Inherited From:
+
+ + + + + + + + + + + + + +
Source:
+
  • vectorsource.js, line 150
+ + + + + + + +
+ + + + + + + +
Returns:
+ + + + +
+
+ Type +
+
+ +S +| + +undefined + + +
+
+ + + + +
+ + + +
+

forEachFeatureInExtent

+ + +
Stability: experimental
+ + + + +
+
+ + + + + + + + +
Parameters:
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
NameTypeArgumentDescription
extent + + +ol.Extent + + + + + + + +

Extent.

f + + +function + + + + + + + +

Callback.

this + + +T + + + + + + <optional>
+ + + +

The object to use as this in f.

+ + + +
+ + + + + + + +
Inherited From:
+
+ + + + + + + + + + + + + +
Source:
+
  • vectorsource.js, line 186
+ + + + + + + +
+ + + + + + + +
Returns:
+ + + + +
+
+ Type +
+
+ +S +| + +undefined + + +
+
+ + + + +
+ + + +
+

getClosestFeatureToCoordinate

+ + +
Stability: experimental
+ + + + +
+
+ + + + + + + + +
Parameters:
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
NameTypeDescription
coordinate + + +ol.Coordinate + + + +

Coordinate.

+ + + +
+ + + + + + + +
Inherited From:
+
+ + + + + + + + + + + + + +
Source:
+
  • vectorsource.js, line 235
+ + + + + + + +
+ + + + + + + +
Returns:
+ + +
+

Closest feature.

+
+ + + +
+
+ Type +
+
+ +ol.Feature + + +
+
+ + + + +
+ + + +
+

getExtent

+ + +
Stability: experimental
+ + + + +
+
+ + + + + + + + + + +
+ + + + + + + +
Inherited From:
+
+ + + + + + + + + + + + + +
Source:
+
  • vectorsource.js, line 281
+ + + + + + + +
+ + + + + + + +
Returns:
+ + +
+

Extent.

+
+ + + +
+
+ Type +
+
+ +ol.Extent + + +
+
+ + + + +
+ + + +
+

getFeatures

+ + +
Stability: experimental
+ + + + +
+
+ + + + + + + + + + +
+ + + + + + + +
Inherited From:
+
+ + + + + + + + + + + + + +
Source:
+
  • vectorsource.js, line 196
+ + + + + + + +
+ + + + + + + +
Returns:
+ + +
+

Features.

+
+ + + +
+
+ Type +
+
+ +Array.<ol.Feature> + + +
+
+ + + + +
+ + + +
+

getFeaturesAtCoordinate

+ + +
Stability: experimental
+ + + + +
+
+ + + + + + + + +
Parameters:
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
NameTypeDescription
coordinate + + +ol.Coordinate + + + +

Coordinate.

+ + + +
+ + + + + + + +
Inherited From:
+
+ + + + + + + + + + + + + +
Source:
+
  • vectorsource.js, line 211
+ + + + + + + +
+ + + + + + + +
Returns:
+ + +
+

Features.

+
+ + + +
+
+ Type +
+
+ +Array.<ol.Feature> + + +
+
+ + + + +
+ + + +
+

getState

+ + +
Stability: not documented
+ + + + +
+
+ + + + + + + + + + +
+ + + + + + + +
Inherited From:
+
+ + + + + + + + + + + + + +
Source:
+
  • source.js, line 135
+ + + + + + + +
+ + + + + + + +
Returns:
+ + +
+

State.

+
+ + + +
+
+ Type +
+
+ +ol.source.State + + +
+
+ + + + +
+ + + +
+

on

+ + +
Stability: experimental
+ + + + +
+
+ + +
+

Listen for a certain type of event.

+
+ + + + + + + +
Parameters:
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
NameTypeArgumentDescription
type + + +string +| + +Array.<string> + + + + + + + +

The event type or array of event types.

listener + + +function + + + + + + + +

The listener function.

this + + +Object + + + + + + <optional>
+ + + +

The object to use as this in listener.

+ + + +
+ + + + + + + +
Inherited From:
+
+ + + + + + + + + + + + + +
Source:
+
  • observable.js, line 58
+ + + + + + + +
+ + + + + + + +
Returns:
+ + +
+

Unique key for the listener.

+
+ + + +
+
+ Type +
+
+ +goog.events.Key + + +
+
+ + + + +
+ + + +
+

once

+ + +
Stability: experimental
+ + + + +
+
+ + +
+

Listen once for a certain type of event.

+
+ + + + + + + +
Parameters:
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
NameTypeArgumentDescription
type + + +string +| + +Array.<string> + + + + + + + +

The event type or array of event types.

listener + + +function + + + + + + + +

The listener function.

this + + +Object + + + + + + <optional>
+ + + +

The object to use as this in listener.

+ + + +
+ + + + + + + +
Inherited From:
+
+ + + + + + + + + + + + + +
Source:
+
  • observable.js, line 71
+ + + + + + + +
+ + + + + + + +
Returns:
+ + +
+

Unique key for the listener.

+
+ + + +
+
+ Type +
+
+ +goog.events.Key + + +
+
+ + + + +
+ + + +
+

removeFeature

+ + +
Stability: experimental
+ + + + +
+
+ + + + + + + + +
Parameters:
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
NameTypeDescription
feature + + +ol.Feature + + + +

Feature.

+ + + +
+ + + + + + + +
Inherited From:
+
+ + + + + + + + + + + + + +
Source:
+
  • vectorsource.js, line 326
+ + + + + + + +
+ + + + + + + + + +
+ + + +
+

un

+ + +
Stability: experimental
+ + + + +
+
+ + +
+

Unlisten for a certain type of event.

+
+ + + + + + + +
Parameters:
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
NameTypeArgumentDescription
type + + +string +| + +Array.<string> + + + + + + + +

The event type or array of event types.

listener + + +function + + + + + + + +

The listener function.

this + + +Object + + + + + + <optional>
+ + + +

The object to use as this in listener.

+ + + +
+ + + + + + + +
Inherited From:
+
+ + + + + + + + + + + + + +
Source:
+
  • observable.js, line 83
+ + + + + + + +
+ + + + + + + + + +
+ + + +
+

unByKey

+ + +
Stability: experimental
+ + + + +
+
+ + +
+

Removes an event listener using the key returned by on() or once().

+
+ + + + + + + +
Parameters:
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
NameTypeDescription
key + + +goog.events.Key + + + +

Key.

+ + + +
+ + + + + + + +
Inherited From:
+
+ + + + + + + + + + + + + +
Source:
+
  • observable.js, line 93
+ + + + + + + +
+ + + + + + + + + +
+ +
+ + + + + +
+ +
+ + + + +
+ + + +
+ + + + + + \ No newline at end of file diff --git a/float-no-zero/apidoc/ol.source.Source.html b/float-no-zero/apidoc/ol.source.Source.html new file mode 100644 index 0000000000..47a8835e17 --- /dev/null +++ b/float-no-zero/apidoc/ol.source.Source.html @@ -0,0 +1,1197 @@ + + + + + OpenLayers 3 API Documentation - Class: ol.source.Source + + + + + + + + + + + + + + + + +
+ + + + +
+ +
+

+ ol.source. + + ol.source.Source +

+ +
+ +
+
+ + + + +
+

new Source

+ + +
Stability: experimental
+ + + + +
+
+ + + + + + + + +
Parameters:
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
NameTypeDescription
options + + +ol.source.SourceOptions + + + +

Source options.

+ + + +
+ + + + + + + + + + + + + + + + + + + +
Source:
+
  • source.js, line 39
+ + + + + + + +
+ + + + + + + + + +
+ + +
+ + +

Extends

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

Methods

+ +
+ +
+

dispatchChangeEvent

+ + +
Stability: experimental
+ + + + +
+
+ + + + + + + + + + +
+ + + + + + + +
Inherited From:
+
+ + + + + + + + + + + + + +
Source:
+
  • observable.js, line 35
+ + + + + + + +
+ + + + + + + + + +
+ + + +
+

getExtent

+ + +
Stability: not documented
+ + + + +
+
+ + + + + + + + + + +
+ + + + + + + + + + + + + + + + + + + +
Source:
+
  • source.js, line 105
+ + + + + + + +
+ + + + + + + +
Returns:
+ + +
+

Extent.

+
+ + + +
+
+ Type +
+
+ +ol.Extent + + +
+
+ + + + +
+ + + +
+

getState

+ + +
Stability: not documented
+ + + + +
+
+ + + + + + + + + + +
+ + + + + + + + + + + + + + + + + + + +
Source:
+
  • source.js, line 135
+ + + + + + + +
+ + + + + + + +
Returns:
+ + +
+

State.

+
+ + + +
+
+ Type +
+
+ +ol.source.State + + +
+
+ + + + +
+ + + +
+

on

+ + +
Stability: experimental
+ + + + +
+
+ + +
+

Listen for a certain type of event.

+
+ + + + + + + +
Parameters:
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
NameTypeArgumentDescription
type + + +string +| + +Array.<string> + + + + + + + +

The event type or array of event types.

listener + + +function + + + + + + + +

The listener function.

this + + +Object + + + + + + <optional>
+ + + +

The object to use as this in listener.

+ + + +
+ + + + + + + +
Inherited From:
+
+ + + + + + + + + + + + + +
Source:
+
  • observable.js, line 58
+ + + + + + + +
+ + + + + + + +
Returns:
+ + +
+

Unique key for the listener.

+
+ + + +
+
+ Type +
+
+ +goog.events.Key + + +
+
+ + + + +
+ + + +
+

once

+ + +
Stability: experimental
+ + + + +
+
+ + +
+

Listen once for a certain type of event.

+
+ + + + + + + +
Parameters:
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
NameTypeArgumentDescription
type + + +string +| + +Array.<string> + + + + + + + +

The event type or array of event types.

listener + + +function + + + + + + + +

The listener function.

this + + +Object + + + + + + <optional>
+ + + +

The object to use as this in listener.

+ + + +
+ + + + + + + +
Inherited From:
+
+ + + + + + + + + + + + + +
Source:
+
  • observable.js, line 71
+ + + + + + + +
+ + + + + + + +
Returns:
+ + +
+

Unique key for the listener.

+
+ + + +
+
+ Type +
+
+ +goog.events.Key + + +
+
+ + + + +
+ + + +
+

un

+ + +
Stability: experimental
+ + + + +
+
+ + +
+

Unlisten for a certain type of event.

+
+ + + + + + + +
Parameters:
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
NameTypeArgumentDescription
type + + +string +| + +Array.<string> + + + + + + + +

The event type or array of event types.

listener + + +function + + + + + + + +

The listener function.

this + + +Object + + + + + + <optional>
+ + + +

The object to use as this in listener.

+ + + +
+ + + + + + + +
Inherited From:
+
+ + + + + + + + + + + + + +
Source:
+
  • observable.js, line 83
+ + + + + + + +
+ + + + + + + + + +
+ + + +
+

unByKey

+ + +
Stability: experimental
+ + + + +
+
+ + +
+

Removes an event listener using the key returned by on() or once().

+
+ + + + + + + +
Parameters:
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
NameTypeDescription
key + + +goog.events.Key + + + +

Key.

+ + + +
+ + + + + + + +
Inherited From:
+
+ + + + + + + + + + + + + +
Source:
+
  • observable.js, line 93
+ + + + + + + +
+ + + + + + + + + +
+ +
+ + + + + +
+ +
+ + + + +
+ + + +
+ + + + + + \ No newline at end of file diff --git a/float-no-zero/apidoc/ol.source.Stamen.html b/float-no-zero/apidoc/ol.source.Stamen.html new file mode 100644 index 0000000000..9b96b43a21 --- /dev/null +++ b/float-no-zero/apidoc/ol.source.Stamen.html @@ -0,0 +1,332 @@ + + + + + OpenLayers 3 API Documentation - Class: ol.source.Stamen + + + + + + + + + + + + + + + + +
+ + + + +
+ +
+

+ ol.source. + + ol.source.Stamen +

+ +
+ +
+
+ + + + +
+

new Stamen

+ + +
Stability: experimental
+ + + + +
+
+ + + + + + + + +
Parameters:
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
NameTypeDescription
options + + +olx.source.StamenOptions + + + +

Stamen options.

+ + + +
+ + + + + + + + + + + + + + + + + + + +
Source:
+
  • stamensource.js, line 86
+ + + + + + + +
+ + + + + + + + + +
+ + +
+ + +

Extends

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

Methods

+ +
+ +
+

setUrl

+ + +
Stability: experimental
+ + + + +
+
+ + + + + + + + +
Parameters:
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
NameTypeDescription
url + + +string + + + +

URL.

+ + + +
+ + + + + + + +
Inherited From:
+
+ + + + + + + + + + + + + +
Source:
+
  • xyzsource.js, line 73
+ + + + + + + +
+ + + + + + + + + +
+ +
+ + + + + +
+ +
+ + + + +
+ + + +
+ + + + + + \ No newline at end of file diff --git a/float-no-zero/apidoc/ol.source.Tile.html b/float-no-zero/apidoc/ol.source.Tile.html new file mode 100644 index 0000000000..a506d7dcc2 --- /dev/null +++ b/float-no-zero/apidoc/ol.source.Tile.html @@ -0,0 +1,1293 @@ + + + + + OpenLayers 3 API Documentation - Class: ol.source.Tile + + + + + + + + + + + + + + + + +
+ + + + +
+ +
+

+ ol.source. + + ol.source.Tile +

+ +
+ +
+
+ + + + +
+

new Tile

+ + +
Stability: experimental
+ + + + +
+
+ + + + + + + + +
Parameters:
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
NameTypeDescription
options + + +ol.source.TileOptions + + + +

Tile source options.

+ + + +
+ + + + + + + + + + + + + + + + + + + +
Source:
+
  • tilesource.js, line 33
+ + + + + + + +
+ + + + + + + + + +
+ + +
+ + +

Extends

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

Methods

+ +
+ +
+

dispatchChangeEvent

+ + +
Stability: experimental
+ + + + +
+
+ + + + + + + + + + +
+ + + + + + + +
Inherited From:
+
+ + + + + + + + + + + + + +
Source:
+
  • observable.js, line 35
+ + + + + + + +
+ + + + + + + + + +
+ + + +
+

getExtent

+ + +
Stability: not documented
+ + + + +
+
+ + + + + + + + + + +
+ + + + + + + +
Inherited From:
+
+ + + + + + + + + + + + + +
Source:
+
  • source.js, line 105
+ + + + + + + +
+ + + + + + + +
Returns:
+ + +
+

Extent.

+
+ + + +
+
+ Type +
+
+ +ol.Extent + + +
+
+ + + + +
+ + + +
+

getState

+ + +
Stability: not documented
+ + + + +
+
+ + + + + + + + + + +
+ + + + + + + +
Inherited From:
+
+ + + + + + + + + + + + + +
Source:
+
  • source.js, line 135
+ + + + + + + +
+ + + + + + + +
Returns:
+ + +
+

State.

+
+ + + +
+
+ Type +
+
+ +ol.source.State + + +
+
+ + + + +
+ + + +
+

getTileGrid

+ + +
Stability: not documented
+ + + + +
+
+ + + + + + + + + + +
+ + + + + + + + + + + + + + + + + + + +
Source:
+
  • tilesource.js, line 157
+ + + + + + + +
+ + + + + + + +
Returns:
+ + +
+

Tile grid.

+
+ + + +
+
+ Type +
+
+ +ol.tilegrid.TileGrid + + +
+
+ + + + +
+ + + +
+

on

+ + +
Stability: experimental
+ + + + +
+
+ + +
+

Listen for a certain type of event.

+
+ + + + + + + +
Parameters:
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
NameTypeArgumentDescription
type + + +string +| + +Array.<string> + + + + + + + +

The event type or array of event types.

listener + + +function + + + + + + + +

The listener function.

this + + +Object + + + + + + <optional>
+ + + +

The object to use as this in listener.

+ + + +
+ + + + + + + +
Inherited From:
+
+ + + + + + + + + + + + + +
Source:
+
  • observable.js, line 58
+ + + + + + + +
+ + + + + + + +
Returns:
+ + +
+

Unique key for the listener.

+
+ + + +
+
+ Type +
+
+ +goog.events.Key + + +
+
+ + + + +
+ + + +
+

once

+ + +
Stability: experimental
+ + + + +
+
+ + +
+

Listen once for a certain type of event.

+
+ + + + + + + +
Parameters:
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
NameTypeArgumentDescription
type + + +string +| + +Array.<string> + + + + + + + +

The event type or array of event types.

listener + + +function + + + + + + + +

The listener function.

this + + +Object + + + + + + <optional>
+ + + +

The object to use as this in listener.

+ + + +
+ + + + + + + +
Inherited From:
+
+ + + + + + + + + + + + + +
Source:
+
  • observable.js, line 71
+ + + + + + + +
+ + + + + + + +
Returns:
+ + +
+

Unique key for the listener.

+
+ + + +
+
+ Type +
+
+ +goog.events.Key + + +
+
+ + + + +
+ + + +
+

un

+ + +
Stability: experimental
+ + + + +
+
+ + +
+

Unlisten for a certain type of event.

+
+ + + + + + + +
Parameters:
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
NameTypeArgumentDescription
type + + +string +| + +Array.<string> + + + + + + + +

The event type or array of event types.

listener + + +function + + + + + + + +

The listener function.

this + + +Object + + + + + + <optional>
+ + + +

The object to use as this in listener.

+ + + +
+ + + + + + + +
Inherited From:
+
+ + + + + + + + + + + + + +
Source:
+
  • observable.js, line 83
+ + + + + + + +
+ + + + + + + + + +
+ + + +
+

unByKey

+ + +
Stability: experimental
+ + + + +
+
+ + +
+

Removes an event listener using the key returned by on() or once().

+
+ + + + + + + +
Parameters:
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
NameTypeDescription
key + + +goog.events.Key + + + +

Key.

+ + + +
+ + + + + + + +
Inherited From:
+
+ + + + + + + + + + + + + +
Source:
+
  • observable.js, line 93
+ + + + + + + +
+ + + + + + + + + +
+ +
+ + + + + +
+ +
+ + + + +
+ + + +
+ + + + + + \ No newline at end of file diff --git a/float-no-zero/apidoc/ol.source.TileDebug.html b/float-no-zero/apidoc/ol.source.TileDebug.html new file mode 100644 index 0000000000..1fcd65df18 --- /dev/null +++ b/float-no-zero/apidoc/ol.source.TileDebug.html @@ -0,0 +1,1298 @@ + + + + + OpenLayers 3 API Documentation - Class: ol.source.TileDebug + + + + + + + + + + + + + + + + +
+ + + + +
+ +
+

+ ol.source. + + ol.source.TileDebug +

+ +
+ +
+
+ + + + +
+

new TileDebug

+ + +
Stability: experimental
+ + + + +
+
+ + + + + + + + +
Parameters:
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
NameTypeDescription
options + + +olx.source.TileDebugOptions + + + +

Debug tile options.

+ + + +
+ + + + + + + + + + + + + + + + + + + +
Source:
+
  • debugtilesource.js, line 90
+ + + + + + + +
+ + + + + + + + + +
+ + +
+ + +

Extends

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

Methods

+ +
+ +
+

dispatchChangeEvent

+ + +
Stability: experimental
+ + + + +
+
+ + + + + + + + + + +
+ + + + + + + +
Inherited From:
+
+ + + + + + + + + + + + + +
Source:
+
  • observable.js, line 35
+ + + + + + + +
+ + + + + + + + + +
+ + + +
+

getExtent

+ + +
Stability: not documented
+ + + + +
+
+ + + + + + + + + + +
+ + + + + + + +
Inherited From:
+
+ + + + + + + + + + + + + +
Source:
+
  • source.js, line 105
+ + + + + + + +
+ + + + + + + +
Returns:
+ + +
+

Extent.

+
+ + + +
+
+ Type +
+
+ +ol.Extent + + +
+
+ + + + +
+ + + +
+

getState

+ + +
Stability: not documented
+ + + + +
+
+ + + + + + + + + + +
+ + + + + + + +
Inherited From:
+
+ + + + + + + + + + + + + +
Source:
+
  • source.js, line 135
+ + + + + + + +
+ + + + + + + +
Returns:
+ + +
+

State.

+
+ + + +
+
+ Type +
+
+ +ol.source.State + + +
+
+ + + + +
+ + + +
+

getTileGrid

+ + +
Stability: not documented
+ + + + +
+
+ + + + + + + + + + +
+ + + + + + + +
Inherited From:
+
+ + + + + + + + + + + + + +
Source:
+
  • tilesource.js, line 157
+ + + + + + + +
+ + + + + + + +
Returns:
+ + +
+

Tile grid.

+
+ + + +
+
+ Type +
+
+ +ol.tilegrid.TileGrid + + +
+
+ + + + +
+ + + +
+

on

+ + +
Stability: experimental
+ + + + +
+
+ + +
+

Listen for a certain type of event.

+
+ + + + + + + +
Parameters:
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
NameTypeArgumentDescription
type + + +string +| + +Array.<string> + + + + + + + +

The event type or array of event types.

listener + + +function + + + + + + + +

The listener function.

this + + +Object + + + + + + <optional>
+ + + +

The object to use as this in listener.

+ + + +
+ + + + + + + +
Inherited From:
+
+ + + + + + + + + + + + + +
Source:
+
  • observable.js, line 58
+ + + + + + + +
+ + + + + + + +
Returns:
+ + +
+

Unique key for the listener.

+
+ + + +
+
+ Type +
+
+ +goog.events.Key + + +
+
+ + + + +
+ + + +
+

once

+ + +
Stability: experimental
+ + + + +
+
+ + +
+

Listen once for a certain type of event.

+
+ + + + + + + +
Parameters:
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
NameTypeArgumentDescription
type + + +string +| + +Array.<string> + + + + + + + +

The event type or array of event types.

listener + + +function + + + + + + + +

The listener function.

this + + +Object + + + + + + <optional>
+ + + +

The object to use as this in listener.

+ + + +
+ + + + + + + +
Inherited From:
+
+ + + + + + + + + + + + + +
Source:
+
  • observable.js, line 71
+ + + + + + + +
+ + + + + + + +
Returns:
+ + +
+

Unique key for the listener.

+
+ + + +
+
+ Type +
+
+ +goog.events.Key + + +
+
+ + + + +
+ + + +
+

un

+ + +
Stability: experimental
+ + + + +
+
+ + +
+

Unlisten for a certain type of event.

+
+ + + + + + + +
Parameters:
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
NameTypeArgumentDescription
type + + +string +| + +Array.<string> + + + + + + + +

The event type or array of event types.

listener + + +function + + + + + + + +

The listener function.

this + + +Object + + + + + + <optional>
+ + + +

The object to use as this in listener.

+ + + +
+ + + + + + + +
Inherited From:
+
+ + + + + + + + + + + + + +
Source:
+
  • observable.js, line 83
+ + + + + + + +
+ + + + + + + + + +
+ + + +
+

unByKey

+ + +
Stability: experimental
+ + + + +
+
+ + +
+

Removes an event listener using the key returned by on() or once().

+
+ + + + + + + +
Parameters:
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
NameTypeDescription
key + + +goog.events.Key + + + +

Key.

+ + + +
+ + + + + + + +
Inherited From:
+
+ + + + + + + + + + + + + +
Source:
+
  • observable.js, line 93
+ + + + + + + +
+ + + + + + + + + +
+ +
+ + + + + +
+ +
+ + + + +
+ + + +
+ + + + + + \ No newline at end of file diff --git a/float-no-zero/apidoc/ol.source.TileJSON.html b/float-no-zero/apidoc/ol.source.TileJSON.html new file mode 100644 index 0000000000..5e46832a13 --- /dev/null +++ b/float-no-zero/apidoc/ol.source.TileJSON.html @@ -0,0 +1,205 @@ + + + + + OpenLayers 3 API Documentation - Class: ol.source.TileJSON + + + + + + + + + + + + + + + + +
+ + + + +
+ +
+

+ ol.source. + + ol.source.TileJSON +

+ +
+ +
+
+ + + + +
+

new TileJSON

+ + +
Stability: experimental
+ + + + +
+
+ + + + + + + + +
Parameters:
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
NameTypeDescription
options + + +olx.source.TileJSONOptions + + + +

TileJSON options.

+ + + +
+ + + + + + + + + + + + + + + + + + + +
Source:
+
  • tilejsonsource.js, line 46
+ + + + + + + +
+ + + + + + + + + +
+ + +
+ + + + + + + + + + + + + + + + + + + + +
+ +
+ + + + +
+ + + +
+ + + + + + \ No newline at end of file diff --git a/float-no-zero/apidoc/ol.source.TileWMS.html b/float-no-zero/apidoc/ol.source.TileWMS.html new file mode 100644 index 0000000000..b0b9f4b48c --- /dev/null +++ b/float-no-zero/apidoc/ol.source.TileWMS.html @@ -0,0 +1,641 @@ + + + + + OpenLayers 3 API Documentation - Class: ol.source.TileWMS + + + + + + + + + + + + + + + + +
+ + + + +
+ +
+

+ ol.source. + + ol.source.TileWMS +

+ +
+ +
+
+ + + + +
+

new TileWMS

+ + +
Stability: experimental
+ + + + +
+
+ + + + + + + + +
Parameters:
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
NameTypeArgumentDescription
options + + +olx.source.TileWMSOptions + + + + + + <optional>
+ + + +

Tile WMS options.

+ + + +
+ + + + + + + + + + + + + + + + + + + +
Source:
+
  • tilewmssource.js, line 28
+ + + + + + + +
+ + + + + + + + + +
+ + +
+ + + + + + + + + + + + + + + + +

Methods

+ +
+ +
+

getGetFeatureInfoUrl

+ + +
Stability: not documented
+ + + + +
+
+ + +
+

Return the GetFeatureInfo URL for the passed coordinate, resolution, and +projection. Return undefined if the GetFeatureInfo URL cannot be +constructed.

+
+ + + + + + + +
Parameters:
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
NameTypeDescription
coordinate + + +ol.Coordinate + + + +

Coordinate.

resolution + + +number + + + +

Resolution.

projection + + +ol.proj.Projection + + + +

Projection.

params + + +Object + + + +

GetFeatureInfo params. INFO_FORMAT at least should + be provided. If QUERY_LAYERS is not provided then the layers specified + in the LAYERS parameter will be used. VERSION should not be + specified here.

+ + + +
+ + + + + + + + + + + + + + + + + + + +
Source:
+
  • tilewmssource.js, line 128
+ + + + + + + +
+ + + + + + + +
Returns:
+ + +
+

GetFeatureInfo URL.

+
+ + + +
+
+ Type +
+
+ +string +| + +undefined + + +
+
+ + + + +
+ + + +
+

getParams

+ + +
Stability: experimental
+ + + + +
+
+ + +
+

Get the user-provided params, i.e. those passed to the constructor through +the "params" option, and possibly updated using the updateParams method.

+
+ + + + + + + + + +
+ + + + + + + + + + + + + + + + + + + +
Source:
+
  • tilewmssource.js, line 210
+ + + + + + + +
+ + + + + + + +
Returns:
+ + +
+

Params.

+
+ + + +
+
+ Type +
+
+ +Object + + +
+
+ + + + +
+ + + +
+

updateParams

+ + +
Stability: experimental
+ + + + +
+
+ + +
+

Update the user-provided params.

+
+ + + + + + + +
Parameters:
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
NameTypeDescription
params + + +Object + + + +

Params.

+ + + +
+ + + + + + + + + + + + + + + + + + + +
Source:
+
  • tilewmssource.js, line 382
+ + + + + + + +
+ + + + + + + + + +
+ +
+ + + + + +
+ +
+ + + + +
+ + + +
+ + + + + + \ No newline at end of file diff --git a/float-no-zero/apidoc/ol.source.TopoJSON.html b/float-no-zero/apidoc/ol.source.TopoJSON.html new file mode 100644 index 0000000000..a59b5972e6 --- /dev/null +++ b/float-no-zero/apidoc/ol.source.TopoJSON.html @@ -0,0 +1,2320 @@ + + + + + OpenLayers 3 API Documentation - Class: ol.source.TopoJSON + + + + + + + + + + + + + + + + +
+ + + + +
+ +
+

+ ol.source. + + ol.source.TopoJSON +

+ +
+ +
+
+ + + + +
+

new TopoJSON

+ + +
Stability: experimental
+ + + + +
+
+ + + + + + + + +
Parameters:
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
NameTypeArgumentDescription
options + + +olx.source.TopoJSONOptions + + + + + + <optional>
+ + + +

Options.

+ + + +
+ + + + + + + + + + + + + + + + + + + +
Source:
+
  • topojsonsource.js, line 14
+ + + + + + + +
+ + + + + + + + + +
+ + +
+ + +

Extends

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

Methods

+ +
+ +
+

addFeature

+ + +
Stability: experimental
+ + + + +
+
+ + + + + + + + +
Parameters:
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
NameTypeDescription
feature + + +ol.Feature + + + +

Feature.

+ + + +
+ + + + + + + +
Inherited From:
+
+ + + + + + + + + + + + + +
Source:
+
  • vectorsource.js, line 77
+ + + + + + + +
+ + + + + + + + + +
+ + + +
+

addFeatures

+ + +
Stability: experimental
+ + + + +
+
+ + + + + + + + +
Parameters:
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
NameTypeDescription
features + + +Array.<ol.Feature> + + + +

Features.

+ + + +
+ + + + + + + +
Inherited From:
+
+ + + + + + + + + + + + + +
Source:
+
  • vectorsource.js, line 109
+ + + + + + + +
+ + + + + + + + + +
+ + + +
+

dispatchChangeEvent

+ + +
Stability: experimental
+ + + + +
+
+ + + + + + + + + + +
+ + + + + + + +
Inherited From:
+
+ + + + + + + + + + + + + +
Source:
+
  • observable.js, line 35
+ + + + + + + +
+ + + + + + + + + +
+ + + +
+

forEachFeature

+ + +
Stability: experimental
+ + + + +
+
+ + + + + + + + +
Parameters:
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
NameTypeArgumentDescription
f + + +function + + + + + + + +

Callback.

this + + +T + + + + + + <optional>
+ + + +

The object to use as this in f.

+ + + +
+ + + + + + + +
Inherited From:
+
+ + + + + + + + + + + + + +
Source:
+
  • vectorsource.js, line 150
+ + + + + + + +
+ + + + + + + +
Returns:
+ + + + +
+
+ Type +
+
+ +S +| + +undefined + + +
+
+ + + + +
+ + + +
+

forEachFeatureInExtent

+ + +
Stability: experimental
+ + + + +
+
+ + + + + + + + +
Parameters:
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
NameTypeArgumentDescription
extent + + +ol.Extent + + + + + + + +

Extent.

f + + +function + + + + + + + +

Callback.

this + + +T + + + + + + <optional>
+ + + +

The object to use as this in f.

+ + + +
+ + + + + + + +
Inherited From:
+
+ + + + + + + + + + + + + +
Source:
+
  • vectorsource.js, line 186
+ + + + + + + +
+ + + + + + + +
Returns:
+ + + + +
+
+ Type +
+
+ +S +| + +undefined + + +
+
+ + + + +
+ + + +
+

getClosestFeatureToCoordinate

+ + +
Stability: experimental
+ + + + +
+
+ + + + + + + + +
Parameters:
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
NameTypeDescription
coordinate + + +ol.Coordinate + + + +

Coordinate.

+ + + +
+ + + + + + + +
Inherited From:
+
+ + + + + + + + + + + + + +
Source:
+
  • vectorsource.js, line 235
+ + + + + + + +
+ + + + + + + +
Returns:
+ + +
+

Closest feature.

+
+ + + +
+
+ Type +
+
+ +ol.Feature + + +
+
+ + + + +
+ + + +
+

getExtent

+ + +
Stability: experimental
+ + + + +
+
+ + + + + + + + + + +
+ + + + + + + +
Inherited From:
+
+ + + + + + + + + + + + + +
Source:
+
  • vectorsource.js, line 281
+ + + + + + + +
+ + + + + + + +
Returns:
+ + +
+

Extent.

+
+ + + +
+
+ Type +
+
+ +ol.Extent + + +
+
+ + + + +
+ + + +
+

getFeatures

+ + +
Stability: experimental
+ + + + +
+
+ + + + + + + + + + +
+ + + + + + + +
Inherited From:
+
+ + + + + + + + + + + + + +
Source:
+
  • vectorsource.js, line 196
+ + + + + + + +
+ + + + + + + +
Returns:
+ + +
+

Features.

+
+ + + +
+
+ Type +
+
+ +Array.<ol.Feature> + + +
+
+ + + + +
+ + + +
+

getFeaturesAtCoordinate

+ + +
Stability: experimental
+ + + + +
+
+ + + + + + + + +
Parameters:
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
NameTypeDescription
coordinate + + +ol.Coordinate + + + +

Coordinate.

+ + + +
+ + + + + + + +
Inherited From:
+
+ + + + + + + + + + + + + +
Source:
+
  • vectorsource.js, line 211
+ + + + + + + +
+ + + + + + + +
Returns:
+ + +
+

Features.

+
+ + + +
+
+ Type +
+
+ +Array.<ol.Feature> + + +
+
+ + + + +
+ + + +
+

getState

+ + +
Stability: not documented
+ + + + +
+
+ + + + + + + + + + +
+ + + + + + + +
Inherited From:
+
+ + + + + + + + + + + + + +
Source:
+
  • source.js, line 135
+ + + + + + + +
+ + + + + + + +
Returns:
+ + +
+

State.

+
+ + + +
+
+ Type +
+
+ +ol.source.State + + +
+
+ + + + +
+ + + +
+

on

+ + +
Stability: experimental
+ + + + +
+
+ + +
+

Listen for a certain type of event.

+
+ + + + + + + +
Parameters:
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
NameTypeArgumentDescription
type + + +string +| + +Array.<string> + + + + + + + +

The event type or array of event types.

listener + + +function + + + + + + + +

The listener function.

this + + +Object + + + + + + <optional>
+ + + +

The object to use as this in listener.

+ + + +
+ + + + + + + +
Inherited From:
+
+ + + + + + + + + + + + + +
Source:
+
  • observable.js, line 58
+ + + + + + + +
+ + + + + + + +
Returns:
+ + +
+

Unique key for the listener.

+
+ + + +
+
+ Type +
+
+ +goog.events.Key + + +
+
+ + + + +
+ + + +
+

once

+ + +
Stability: experimental
+ + + + +
+
+ + +
+

Listen once for a certain type of event.

+
+ + + + + + + +
Parameters:
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
NameTypeArgumentDescription
type + + +string +| + +Array.<string> + + + + + + + +

The event type or array of event types.

listener + + +function + + + + + + + +

The listener function.

this + + +Object + + + + + + <optional>
+ + + +

The object to use as this in listener.

+ + + +
+ + + + + + + +
Inherited From:
+
+ + + + + + + + + + + + + +
Source:
+
  • observable.js, line 71
+ + + + + + + +
+ + + + + + + +
Returns:
+ + +
+

Unique key for the listener.

+
+ + + +
+
+ Type +
+
+ +goog.events.Key + + +
+
+ + + + +
+ + + +
+

removeFeature

+ + +
Stability: experimental
+ + + + +
+
+ + + + + + + + +
Parameters:
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
NameTypeDescription
feature + + +ol.Feature + + + +

Feature.

+ + + +
+ + + + + + + +
Inherited From:
+
+ + + + + + + + + + + + + +
Source:
+
  • vectorsource.js, line 326
+ + + + + + + +
+ + + + + + + + + +
+ + + +
+

un

+ + +
Stability: experimental
+ + + + +
+
+ + +
+

Unlisten for a certain type of event.

+
+ + + + + + + +
Parameters:
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
NameTypeArgumentDescription
type + + +string +| + +Array.<string> + + + + + + + +

The event type or array of event types.

listener + + +function + + + + + + + +

The listener function.

this + + +Object + + + + + + <optional>
+ + + +

The object to use as this in listener.

+ + + +
+ + + + + + + +
Inherited From:
+
+ + + + + + + + + + + + + +
Source:
+
  • observable.js, line 83
+ + + + + + + +
+ + + + + + + + + +
+ + + +
+

unByKey

+ + +
Stability: experimental
+ + + + +
+
+ + +
+

Removes an event listener using the key returned by on() or once().

+
+ + + + + + + +
Parameters:
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
NameTypeDescription
key + + +goog.events.Key + + + +

Key.

+ + + +
+ + + + + + + +
Inherited From:
+
+ + + + + + + + + + + + + +
Source:
+
  • observable.js, line 93
+ + + + + + + +
+ + + + + + + + + +
+ +
+ + + + + +
+ +
+ + + + +
+ + + +
+ + + + + + \ No newline at end of file diff --git a/float-no-zero/apidoc/ol.source.Vector.html b/float-no-zero/apidoc/ol.source.Vector.html new file mode 100644 index 0000000000..2936c61585 --- /dev/null +++ b/float-no-zero/apidoc/ol.source.Vector.html @@ -0,0 +1,2275 @@ + + + + + OpenLayers 3 API Documentation - Class: ol.source.Vector + + + + + + + + + + + + + + + + +
+ + + + +
+ +
+

+ ol.source. + + ol.source.Vector +

+ +
+ +
+
+ + + + +
+

new Vector

+ + +
Stability: experimental
+ + + + +
+
+ + + + + + + + +
Parameters:
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
NameTypeArgumentDescription
options + + +olx.source.VectorOptions + + + + + + <optional>
+ + + +

Vector source options.

+ + + +
+ + + + + + + + + + + + + + + + + + + +
Source:
+
  • vectorsource.js, line 35
+ + + + + + + +
+ + + + + + + + + +
+ + +
+ + +

Extends

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

Methods

+ +
+ +
+

addFeature

+ + +
Stability: experimental
+ + + + +
+
+ + + + + + + + +
Parameters:
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
NameTypeDescription
feature + + +ol.Feature + + + +

Feature.

+ + + +
+ + + + + + + + + + + + + + + + + + + +
Source:
+
  • vectorsource.js, line 77
+ + + + + + + +
+ + + + + + + + + +
+ + + +
+

addFeatures

+ + +
Stability: experimental
+ + + + +
+
+ + + + + + + + +
Parameters:
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
NameTypeDescription
features + + +Array.<ol.Feature> + + + +

Features.

+ + + +
+ + + + + + + + + + + + + + + + + + + +
Source:
+
  • vectorsource.js, line 109
+ + + + + + + +
+ + + + + + + + + +
+ + + +
+

dispatchChangeEvent

+ + +
Stability: experimental
+ + + + +
+
+ + + + + + + + + + +
+ + + + + + + +
Inherited From:
+
+ + + + + + + + + + + + + +
Source:
+
  • observable.js, line 35
+ + + + + + + +
+ + + + + + + + + +
+ + + +
+

forEachFeature

+ + +
Stability: experimental
+ + + + +
+
+ + + + + + + + +
Parameters:
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
NameTypeArgumentDescription
f + + +function + + + + + + + +

Callback.

this + + +T + + + + + + <optional>
+ + + +

The object to use as this in f.

+ + + +
+ + + + + + + + + + + + + + + + + + + +
Source:
+
  • vectorsource.js, line 150
+ + + + + + + +
+ + + + + + + +
Returns:
+ + + + +
+
+ Type +
+
+ +S +| + +undefined + + +
+
+ + + + +
+ + + +
+

forEachFeatureInExtent

+ + +
Stability: experimental
+ + + + +
+
+ + + + + + + + +
Parameters:
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
NameTypeArgumentDescription
extent + + +ol.Extent + + + + + + + +

Extent.

f + + +function + + + + + + + +

Callback.

this + + +T + + + + + + <optional>
+ + + +

The object to use as this in f.

+ + + +
+ + + + + + + + + + + + + + + + + + + +
Source:
+
  • vectorsource.js, line 186
+ + + + + + + +
+ + + + + + + +
Returns:
+ + + + +
+
+ Type +
+
+ +S +| + +undefined + + +
+
+ + + + +
+ + + +
+

getClosestFeatureToCoordinate

+ + +
Stability: experimental
+ + + + +
+
+ + + + + + + + +
Parameters:
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
NameTypeDescription
coordinate + + +ol.Coordinate + + + +

Coordinate.

+ + + +
+ + + + + + + + + + + + + + + + + + + +
Source:
+
  • vectorsource.js, line 235
+ + + + + + + +
+ + + + + + + +
Returns:
+ + +
+

Closest feature.

+
+ + + +
+
+ Type +
+
+ +ol.Feature + + +
+
+ + + + +
+ + + +
+

getExtent

+ + +
Stability: experimental
+ + + + +
+
+ + + + + + + + + + +
+ + + + + + + + + + + + + + + + + + + +
Source:
+
  • vectorsource.js, line 281
+ + + + + + + +
+ + + + + + + +
Returns:
+ + +
+

Extent.

+
+ + + +
+
+ Type +
+
+ +ol.Extent + + +
+
+ + + + +
+ + + +
+

getFeatures

+ + +
Stability: experimental
+ + + + +
+
+ + + + + + + + + + +
+ + + + + + + + + + + + + + + + + + + +
Source:
+
  • vectorsource.js, line 196
+ + + + + + + +
+ + + + + + + +
Returns:
+ + +
+

Features.

+
+ + + +
+
+ Type +
+
+ +Array.<ol.Feature> + + +
+
+ + + + +
+ + + +
+

getFeaturesAtCoordinate

+ + +
Stability: experimental
+ + + + +
+
+ + + + + + + + +
Parameters:
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
NameTypeDescription
coordinate + + +ol.Coordinate + + + +

Coordinate.

+ + + +
+ + + + + + + + + + + + + + + + + + + +
Source:
+
  • vectorsource.js, line 211
+ + + + + + + +
+ + + + + + + +
Returns:
+ + +
+

Features.

+
+ + + +
+
+ Type +
+
+ +Array.<ol.Feature> + + +
+
+ + + + +
+ + + +
+

getState

+ + +
Stability: not documented
+ + + + +
+
+ + + + + + + + + + +
+ + + + + + + +
Inherited From:
+
+ + + + + + + + + + + + + +
Source:
+
  • source.js, line 135
+ + + + + + + +
+ + + + + + + +
Returns:
+ + +
+

State.

+
+ + + +
+
+ Type +
+
+ +ol.source.State + + +
+
+ + + + +
+ + + +
+

on

+ + +
Stability: experimental
+ + + + +
+
+ + +
+

Listen for a certain type of event.

+
+ + + + + + + +
Parameters:
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
NameTypeArgumentDescription
type + + +string +| + +Array.<string> + + + + + + + +

The event type or array of event types.

listener + + +function + + + + + + + +

The listener function.

this + + +Object + + + + + + <optional>
+ + + +

The object to use as this in listener.

+ + + +
+ + + + + + + +
Inherited From:
+
+ + + + + + + + + + + + + +
Source:
+
  • observable.js, line 58
+ + + + + + + +
+ + + + + + + +
Returns:
+ + +
+

Unique key for the listener.

+
+ + + +
+
+ Type +
+
+ +goog.events.Key + + +
+
+ + + + +
+ + + +
+

once

+ + +
Stability: experimental
+ + + + +
+
+ + +
+

Listen once for a certain type of event.

+
+ + + + + + + +
Parameters:
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
NameTypeArgumentDescription
type + + +string +| + +Array.<string> + + + + + + + +

The event type or array of event types.

listener + + +function + + + + + + + +

The listener function.

this + + +Object + + + + + + <optional>
+ + + +

The object to use as this in listener.

+ + + +
+ + + + + + + +
Inherited From:
+
+ + + + + + + + + + + + + +
Source:
+
  • observable.js, line 71
+ + + + + + + +
+ + + + + + + +
Returns:
+ + +
+

Unique key for the listener.

+
+ + + +
+
+ Type +
+
+ +goog.events.Key + + +
+
+ + + + +
+ + + +
+

removeFeature

+ + +
Stability: experimental
+ + + + +
+
+ + + + + + + + +
Parameters:
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
NameTypeDescription
feature + + +ol.Feature + + + +

Feature.

+ + + +
+ + + + + + + + + + + + + + + + + + + +
Source:
+
  • vectorsource.js, line 326
+ + + + + + + +
+ + + + + + + + + +
+ + + +
+

un

+ + +
Stability: experimental
+ + + + +
+
+ + +
+

Unlisten for a certain type of event.

+
+ + + + + + + +
Parameters:
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
NameTypeArgumentDescription
type + + +string +| + +Array.<string> + + + + + + + +

The event type or array of event types.

listener + + +function + + + + + + + +

The listener function.

this + + +Object + + + + + + <optional>
+ + + +

The object to use as this in listener.

+ + + +
+ + + + + + + +
Inherited From:
+
+ + + + + + + + + + + + + +
Source:
+
  • observable.js, line 83
+ + + + + + + +
+ + + + + + + + + +
+ + + +
+

unByKey

+ + +
Stability: experimental
+ + + + +
+
+ + +
+

Removes an event listener using the key returned by on() or once().

+
+ + + + + + + +
Parameters:
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
NameTypeDescription
key + + +goog.events.Key + + + +

Key.

+ + + +
+ + + + + + + +
Inherited From:
+
+ + + + + + + + + + + + + +
Source:
+
  • observable.js, line 93
+ + + + + + + +
+ + + + + + + + + +
+ +
+ + + + + +
+ +
+ + + + +
+ + + +
+ + + + + + \ No newline at end of file diff --git a/float-no-zero/apidoc/ol.source.VectorFile.html b/float-no-zero/apidoc/ol.source.VectorFile.html new file mode 100644 index 0000000000..3afac7421c --- /dev/null +++ b/float-no-zero/apidoc/ol.source.VectorFile.html @@ -0,0 +1,2320 @@ + + + + + OpenLayers 3 API Documentation - Class: ol.source.VectorFile + + + + + + + + + + + + + + + + +
+ + + + +
+ +
+

+ ol.source. + + ol.source.VectorFile +

+ +
+ +
+
+ + + + +
+

new VectorFile

+ + +
Stability: experimental
+ + + + +
+
+ + + + + + + + +
Parameters:
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
NameTypeArgumentDescription
options + + +olx.source.VectorFileOptions + + + + + + <optional>
+ + + +

Options.

+ + + +
+ + + + + + + + + + + + + + + + + + + +
Source:
+
  • vectorfilesource.js, line 28
+ + + + + + + +
+ + + + + + + + + +
+ + +
+ + +

Extends

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

Methods

+ +
+ +
+

addFeature

+ + +
Stability: experimental
+ + + + +
+
+ + + + + + + + +
Parameters:
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
NameTypeDescription
feature + + +ol.Feature + + + +

Feature.

+ + + +
+ + + + + + + +
Inherited From:
+
+ + + + + + + + + + + + + +
Source:
+
  • vectorsource.js, line 77
+ + + + + + + +
+ + + + + + + + + +
+ + + +
+

addFeatures

+ + +
Stability: experimental
+ + + + +
+
+ + + + + + + + +
Parameters:
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
NameTypeDescription
features + + +Array.<ol.Feature> + + + +

Features.

+ + + +
+ + + + + + + +
Inherited From:
+
+ + + + + + + + + + + + + +
Source:
+
  • vectorsource.js, line 109
+ + + + + + + +
+ + + + + + + + + +
+ + + +
+

dispatchChangeEvent

+ + +
Stability: experimental
+ + + + +
+
+ + + + + + + + + + +
+ + + + + + + +
Inherited From:
+
+ + + + + + + + + + + + + +
Source:
+
  • observable.js, line 35
+ + + + + + + +
+ + + + + + + + + +
+ + + +
+

forEachFeature

+ + +
Stability: experimental
+ + + + +
+
+ + + + + + + + +
Parameters:
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
NameTypeArgumentDescription
f + + +function + + + + + + + +

Callback.

this + + +T + + + + + + <optional>
+ + + +

The object to use as this in f.

+ + + +
+ + + + + + + +
Inherited From:
+
+ + + + + + + + + + + + + +
Source:
+
  • vectorsource.js, line 150
+ + + + + + + +
+ + + + + + + +
Returns:
+ + + + +
+
+ Type +
+
+ +S +| + +undefined + + +
+
+ + + + +
+ + + +
+

forEachFeatureInExtent

+ + +
Stability: experimental
+ + + + +
+
+ + + + + + + + +
Parameters:
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
NameTypeArgumentDescription
extent + + +ol.Extent + + + + + + + +

Extent.

f + + +function + + + + + + + +

Callback.

this + + +T + + + + + + <optional>
+ + + +

The object to use as this in f.

+ + + +
+ + + + + + + +
Inherited From:
+
+ + + + + + + + + + + + + +
Source:
+
  • vectorsource.js, line 186
+ + + + + + + +
+ + + + + + + +
Returns:
+ + + + +
+
+ Type +
+
+ +S +| + +undefined + + +
+
+ + + + +
+ + + +
+

getClosestFeatureToCoordinate

+ + +
Stability: experimental
+ + + + +
+
+ + + + + + + + +
Parameters:
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
NameTypeDescription
coordinate + + +ol.Coordinate + + + +

Coordinate.

+ + + +
+ + + + + + + +
Inherited From:
+
+ + + + + + + + + + + + + +
Source:
+
  • vectorsource.js, line 235
+ + + + + + + +
+ + + + + + + +
Returns:
+ + +
+

Closest feature.

+
+ + + +
+
+ Type +
+
+ +ol.Feature + + +
+
+ + + + +
+ + + +
+

getExtent

+ + +
Stability: experimental
+ + + + +
+
+ + + + + + + + + + +
+ + + + + + + +
Inherited From:
+
+ + + + + + + + + + + + + +
Source:
+
  • vectorsource.js, line 281
+ + + + + + + +
+ + + + + + + +
Returns:
+ + +
+

Extent.

+
+ + + +
+
+ Type +
+
+ +ol.Extent + + +
+
+ + + + +
+ + + +
+

getFeatures

+ + +
Stability: experimental
+ + + + +
+
+ + + + + + + + + + +
+ + + + + + + +
Inherited From:
+
+ + + + + + + + + + + + + +
Source:
+
  • vectorsource.js, line 196
+ + + + + + + +
+ + + + + + + +
Returns:
+ + +
+

Features.

+
+ + + +
+
+ Type +
+
+ +Array.<ol.Feature> + + +
+
+ + + + +
+ + + +
+

getFeaturesAtCoordinate

+ + +
Stability: experimental
+ + + + +
+
+ + + + + + + + +
Parameters:
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
NameTypeDescription
coordinate + + +ol.Coordinate + + + +

Coordinate.

+ + + +
+ + + + + + + +
Inherited From:
+
+ + + + + + + + + + + + + +
Source:
+
  • vectorsource.js, line 211
+ + + + + + + +
+ + + + + + + +
Returns:
+ + +
+

Features.

+
+ + + +
+
+ Type +
+
+ +Array.<ol.Feature> + + +
+
+ + + + +
+ + + +
+

getState

+ + +
Stability: not documented
+ + + + +
+
+ + + + + + + + + + +
+ + + + + + + +
Inherited From:
+
+ + + + + + + + + + + + + +
Source:
+
  • source.js, line 135
+ + + + + + + +
+ + + + + + + +
Returns:
+ + +
+

State.

+
+ + + +
+
+ Type +
+
+ +ol.source.State + + +
+
+ + + + +
+ + + +
+

on

+ + +
Stability: experimental
+ + + + +
+
+ + +
+

Listen for a certain type of event.

+
+ + + + + + + +
Parameters:
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
NameTypeArgumentDescription
type + + +string +| + +Array.<string> + + + + + + + +

The event type or array of event types.

listener + + +function + + + + + + + +

The listener function.

this + + +Object + + + + + + <optional>
+ + + +

The object to use as this in listener.

+ + + +
+ + + + + + + +
Inherited From:
+
+ + + + + + + + + + + + + +
Source:
+
  • observable.js, line 58
+ + + + + + + +
+ + + + + + + +
Returns:
+ + +
+

Unique key for the listener.

+
+ + + +
+
+ Type +
+
+ +goog.events.Key + + +
+
+ + + + +
+ + + +
+

once

+ + +
Stability: experimental
+ + + + +
+
+ + +
+

Listen once for a certain type of event.

+
+ + + + + + + +
Parameters:
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
NameTypeArgumentDescription
type + + +string +| + +Array.<string> + + + + + + + +

The event type or array of event types.

listener + + +function + + + + + + + +

The listener function.

this + + +Object + + + + + + <optional>
+ + + +

The object to use as this in listener.

+ + + +
+ + + + + + + +
Inherited From:
+
+ + + + + + + + + + + + + +
Source:
+
  • observable.js, line 71
+ + + + + + + +
+ + + + + + + +
Returns:
+ + +
+

Unique key for the listener.

+
+ + + +
+
+ Type +
+
+ +goog.events.Key + + +
+
+ + + + +
+ + + +
+

removeFeature

+ + +
Stability: experimental
+ + + + +
+
+ + + + + + + + +
Parameters:
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
NameTypeDescription
feature + + +ol.Feature + + + +

Feature.

+ + + +
+ + + + + + + +
Inherited From:
+
+ + + + + + + + + + + + + +
Source:
+
  • vectorsource.js, line 326
+ + + + + + + +
+ + + + + + + + + +
+ + + +
+

un

+ + +
Stability: experimental
+ + + + +
+
+ + +
+

Unlisten for a certain type of event.

+
+ + + + + + + +
Parameters:
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
NameTypeArgumentDescription
type + + +string +| + +Array.<string> + + + + + + + +

The event type or array of event types.

listener + + +function + + + + + + + +

The listener function.

this + + +Object + + + + + + <optional>
+ + + +

The object to use as this in listener.

+ + + +
+ + + + + + + +
Inherited From:
+
+ + + + + + + + + + + + + +
Source:
+
  • observable.js, line 83
+ + + + + + + +
+ + + + + + + + + +
+ + + +
+

unByKey

+ + +
Stability: experimental
+ + + + +
+
+ + +
+

Removes an event listener using the key returned by on() or once().

+
+ + + + + + + +
Parameters:
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
NameTypeDescription
key + + +goog.events.Key + + + +

Key.

+ + + +
+ + + + + + + +
Inherited From:
+
+ + + + + + + + + + + + + +
Source:
+
  • observable.js, line 93
+ + + + + + + +
+ + + + + + + + + +
+ +
+ + + + + +
+ +
+ + + + +
+ + + +
+ + + + + + \ No newline at end of file diff --git a/float-no-zero/apidoc/ol.source.WMTS.html b/float-no-zero/apidoc/ol.source.WMTS.html new file mode 100644 index 0000000000..7b53849233 --- /dev/null +++ b/float-no-zero/apidoc/ol.source.WMTS.html @@ -0,0 +1,574 @@ + + + + + OpenLayers 3 API Documentation - Class: ol.source.WMTS + + + + + + + + + + + + + + + + +
+ + + + +
+ +
+

+ ol.source. + + ol.source.WMTS +

+ +
+ +
+
+ + + + +
+

new WMTS

+ + +
Stability: experimental
+ + + + +
+
+ + + + + + + + +
Parameters:
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
NameTypeDescription
options + + +olx.source.WMTSOptions + + + +

WMTS options.

+ + + +
+ + + + + + + + + + + + + + + + + + + +
Source:
+
  • wmtssource.js, line 34
+ + + + + + + +
+ + + + + + + + + +
+ + +
+ + + + + + + + + + + + + + + + +

Methods

+ +
+ +
+

<static> optionsFromCapabilities

+ + +
Stability: experimental
+ + + + +
+
+ + + + + + + + +
Parameters:
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
NameTypeDescription
wmtsCap + + +Object + + + +

An object representing the capabilities document.

layer + + +string + + + +

The layer identifier.

+ + + +
+ + + + + + + + + + + + + + + + + + + +
Source:
+
  • wmtssource.js, line 244
+ + + + + + + +
+ + + + + + + +
Returns:
+ + +
+

WMTS source options object.

+
+ + + +
+
+ Type +
+
+ +olx.source.WMTSOptions + + +
+
+ + + + +
+ + + +
+

getDimensions

+ + +
Stability: experimental
+ + + + +
+
+ + +
+

Get the dimensions, i.e. those passed to the constructor through the +"dimensions" option, and possibly updated using the updateDimensions +method.

+
+ + + + + + + + + +
+ + + + + + + + + + + + + + + + + + + +
Source:
+
  • wmtssource.js, line 200
+ + + + + + + +
+ + + + + + + +
Returns:
+ + +
+

Dimensions.

+
+ + + +
+
+ Type +
+
+ +Object + + +
+
+ + + + +
+ + + +
+

updateDimensions

+ + +
Stability: experimental
+ + + + +
+
+ + +
+

Update the dimensions.

+
+ + + + + + + +
Parameters:
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
NameTypeDescription
dimensions + + +Object + + + +

Dimensions.

+ + + +
+ + + + + + + + + + + + + + + + + + + +
Source:
+
  • wmtssource.js, line 231
+ + + + + + + +
+ + + + + + + + + +
+ +
+ + + + + +
+ +
+ + + + +
+ + + +
+ + + + + + \ No newline at end of file diff --git a/float-no-zero/apidoc/ol.source.XYZ.html b/float-no-zero/apidoc/ol.source.XYZ.html new file mode 100644 index 0000000000..58a6d2d208 --- /dev/null +++ b/float-no-zero/apidoc/ol.source.XYZ.html @@ -0,0 +1,321 @@ + + + + + OpenLayers 3 API Documentation - Class: ol.source.XYZ + + + + + + + + + + + + + + + + +
+ + + + +
+ +
+

+ ol.source. + + ol.source.XYZ +

+ +
+ +
+
+ + + + +
+

new XYZ

+ + +
Stability: experimental
+ + + + +
+
+ + + + + + + + +
Parameters:
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
NameTypeDescription
options + + +olx.source.XYZOptions + + + +

XYZ options.

+ + + +
+ + + + + + + + + + + + + + + + + + + +
Source:
+
  • xyzsource.js, line 18
+ + + + + + + +
+ + + + + + + + + +
+ + +
+ + + + + + + + + + + + + + + + +

Methods

+ +
+ +
+

setUrl

+ + +
Stability: experimental
+ + + + +
+
+ + + + + + + + +
Parameters:
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
NameTypeDescription
url + + +string + + + +

URL.

+ + + +
+ + + + + + + + + + + + + + + + + + + +
Source:
+
  • xyzsource.js, line 73
+ + + + + + + +
+ + + + + + + + + +
+ +
+ + + + + +
+ +
+ + + + +
+ + + +
+ + + + + + \ No newline at end of file diff --git a/float-no-zero/apidoc/ol.source.Zoomify.html b/float-no-zero/apidoc/ol.source.Zoomify.html new file mode 100644 index 0000000000..d4768e6b46 --- /dev/null +++ b/float-no-zero/apidoc/ol.source.Zoomify.html @@ -0,0 +1,215 @@ + + + + + OpenLayers 3 API Documentation - Class: ol.source.Zoomify + + + + + + + + + + + + + + + + +
+ + + + +
+ +
+

+ ol.source. + + ol.source.Zoomify +

+ +
+ +
+
+ + + + +
+

new Zoomify

+ + +
Stability: experimental
+ + + + +
+
+ + + + + + + + +
Parameters:
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
NameTypeArgumentDescription
options + + +olx.source.ZoomifyOptions + + + + + + <optional>
+ + + +

Options.

+ + + +
+ + + + + + + + + + + + + + + + + + + +
Source:
+
  • zoomifysource.js, line 32
+ + + + + + + +
+ + + + + + + + + +
+ + +
+ + + + + + + + + + + + + + + + + + + + +
+ +
+ + + + +
+ + + +
+ + + + + + \ No newline at end of file diff --git a/float-no-zero/apidoc/ol.source.html b/float-no-zero/apidoc/ol.source.html new file mode 100644 index 0000000000..6481dee1a4 --- /dev/null +++ b/float-no-zero/apidoc/ol.source.html @@ -0,0 +1,520 @@ + + + + + OpenLayers 3 API Documentation - Namespace: ol.source + + + + + + + + + + + + + + + + +
+ + + + +
+ +
+

+ ol. + + ol.source +

+ +
+ +
+
+ + + + + + +
+ + + + + + + + + + + + + + + + + + + +
Source:
+
  • source.jsdoc, line 1
+ + + + + + + +
+ + + + +
+ + + + + + + + +

Classes

+ +
+
ol.source.BingMaps
+
+ +
ol.source.GeoJSON
+
+ +
ol.source.GPX
+
+ +
ol.source.IGC
+
+ +
ol.source.ImageCanvas
+
+ +
ol.source.ImageStatic
+
+ +
ol.source.ImageVector
+
+ +
ol.source.ImageWMS
+
+ +
ol.source.KML
+
+ +
ol.source.MapGuide
+
+ +
ol.source.MapQuest
+
+ +
ol.source.OSM
+
+ +
ol.source.OSMXML
+
+ +
ol.source.Source
+
+ +
ol.source.Stamen
+
+ +
ol.source.Tile
+
+ +
ol.source.TileDebug
+
+ +
ol.source.TileJSON
+
+ +
ol.source.TileWMS
+
+ +
ol.source.TopoJSON
+
+ +
ol.source.Vector
+
+ +
ol.source.VectorFile
+
+ +
ol.source.WMTS
+
+ +
ol.source.XYZ
+
+ +
ol.source.Zoomify
+
+
+ + + + + + + +

Members

+ +
+ +
+

<static> State :number

+ + +
Stability: not documented
+ + + + +
+
+ + + +
+ + +
Properties:
+ +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
NameTypeDefaultDescription
LOADING + + +number + + + + + + 0 + +
READY + + +number + + + + + + 1 + +
ERROR + + +number + + + + + + 2 + +
+ + + + + + + + + + + + + + + + + + + + +
Source:
+
  • source.js, line 14
+ + + + + + + +
+ + + +
+ + + +
+

<static> WMTSRequestEncoding :string

+ + +
Stability: not documented
+ + + + +
+
+ + + +
+ + +
Properties:
+ +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
NameTypeDefaultDescription
KVP + + +string + + + + + + KVP + +
REST + + +string + + + + + + REST + +
+ + + + + + + + + + + + + + + + + + + + +
Source:
+
  • wmtssource.js, line 21
+ + + + + + + +
+ + + +
+ +
+ + + + + + + +
+ +
+ + + + +
+ + + +
+ + + + + + \ No newline at end of file diff --git a/float-no-zero/apidoc/ol.style.Circle.html b/float-no-zero/apidoc/ol.style.Circle.html new file mode 100644 index 0000000000..17d855ed79 --- /dev/null +++ b/float-no-zero/apidoc/ol.style.Circle.html @@ -0,0 +1,663 @@ + + + + + OpenLayers 3 API Documentation - Class: ol.style.Circle + + + + + + + + + + + + + + + + +
+ + + + +
+ +
+

+ ol.style.Circle +

+ +
+ +
+
+ + + + +
+

new Circle

+ + +
Stability: experimental
+ + + + +
+
+ + + + + + + + +
Parameters:
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
NameTypeArgumentDescription
options + + +olx.style.CircleOptions + + + + + + <optional>
+ + + +

Options.

+ + + +
+ + + + + + + + + + + + + + + + + + + +
Source:
+
  • circlestyle.js, line 22
+ + + + + + + +
+ + + + + + + + + +
+ + +
+ + +

Extends

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

Methods

+ +
+ +
+

getFill

+ + +
Stability: not documented
+ + + + +
+
+ + + + + + + + + + +
+ + + + + + + + + + + + + + + + + + + +
Source:
+
  • circlestyle.js, line 94
+ + + + + + + +
+ + + + + + + +
Returns:
+ + +
+

Fill style.

+
+ + + +
+
+ Type +
+
+ +ol.style.Fill + + +
+
+ + + + +
+ + + +
+

getRadius

+ + +
Stability: not documented
+ + + + +
+
+ + + + + + + + + + +
+ + + + + + + + + + + + + + + + + + + +
Source:
+
  • circlestyle.js, line 126
+ + + + + + + +
+ + + + + + + +
Returns:
+ + +
+

Radius.

+
+ + + +
+
+ Type +
+
+ +number + + +
+
+ + + + +
+ + + +
+

getRotation

+ + +
Stability: not documented
+ + + + +
+
+ + + + + + + + + + +
+ + + + + + + +
Inherited From:
+
+ + + + + + + + + + + + + +
Source:
+
  • imagestyle.js, line 87
+ + + + + + + +
+ + + + + + + +
Returns:
+ + +
+

Rotation.

+
+ + + +
+
+ Type +
+
+ +number + + +
+
+ + + + +
+ + + +
+

getScale

+ + +
Stability: not documented
+ + + + +
+
+ + + + + + + + + + +
+ + + + + + + +
Inherited From:
+
+ + + + + + + + + + + + + +
Source:
+
  • imagestyle.js, line 95
+ + + + + + + +
+ + + + + + + +
Returns:
+ + +
+

Scale.

+
+ + + +
+
+ Type +
+
+ +number + + +
+
+ + + + +
+ + + +
+

getStroke

+ + +
Stability: not documented
+ + + + +
+
+ + + + + + + + + + +
+ + + + + + + + + + + + + + + + + + + +
Source:
+
  • circlestyle.js, line 142
+ + + + + + + +
+ + + + + + + +
Returns:
+ + +
+

Stroke style.

+
+ + + +
+
+ Type +
+
+ +ol.style.Stroke + + +
+
+ + + + +
+ +
+ + + + + +
+ +
+ + + + +
+ + + +
+ + + + + + \ No newline at end of file diff --git a/float-no-zero/apidoc/ol.style.Fill.html b/float-no-zero/apidoc/ol.style.Fill.html new file mode 100644 index 0000000000..cef912c8c6 --- /dev/null +++ b/float-no-zero/apidoc/ol.style.Fill.html @@ -0,0 +1,306 @@ + + + + + OpenLayers 3 API Documentation - Class: ol.style.Fill + + + + + + + + + + + + + + + + +
+ + + + +
+ +
+

+ ol.style.Fill +

+ +
+ +
+
+ + + + +
+

new Fill

+ + +
Stability: not documented
+ + + + +
+
+ + + + + + + + +
Parameters:
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
NameTypeArgumentDescription
options + + +olx.style.FillOptions + + + + + + <optional>
+ + + +

Options.

+ + + +
+ + + + + + + + + + + + + + + + + + + +
Source:
+
  • fillstyle.js, line 11
+ + + + + + + +
+ + + + + + + + + +
+ + +
+ + + + + + + + + + + + + + + + +

Methods

+ +
+ +
+

getColor

+ + +
Stability: not documented
+ + + + +
+
+ + + + + + + + + + +
+ + + + + + + + + + + + + + + + + + + +
Source:
+
  • fillstyle.js, line 26
+ + + + + + + +
+ + + + + + + +
Returns:
+ + +
+

Color.

+
+ + + +
+
+ Type +
+
+ +ol.Color +| + +string + + +
+
+ + + + +
+ +
+ + + + + +
+ +
+ + + + +
+ + + +
+ + + + + + \ No newline at end of file diff --git a/float-no-zero/apidoc/ol.style.Icon.html b/float-no-zero/apidoc/ol.style.Icon.html new file mode 100644 index 0000000000..9cbd496725 --- /dev/null +++ b/float-no-zero/apidoc/ol.style.Icon.html @@ -0,0 +1,494 @@ + + + + + OpenLayers 3 API Documentation - Class: ol.style.Icon + + + + + + + + + + + + + + + + +
+ + + + +
+ +
+

+ ol.style.Icon +

+ +
+ +
+
+ + + + +
+

new Icon

+ + +
Stability: not documented
+ + + + +
+
+ + + + + + + + +
Parameters:
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
NameTypeArgumentDescription
options + + +olx.style.IconOptions + + + + + + <optional>
+ + + +

Options.

+ + + +
+ + + + + + + + + + + + + + + + + + + +
Source:
+
  • iconstyle.js, line 45
+ + + + + + + +
+ + + + + + + + + +
+ + +
+ + +

Extends

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

Methods

+ +
+ +
+

getRotation

+ + +
Stability: not documented
+ + + + +
+
+ + + + + + + + + + +
+ + + + + + + +
Inherited From:
+
+ + + + + + + + + + + + + +
Source:
+
  • imagestyle.js, line 87
+ + + + + + + +
+ + + + + + + +
Returns:
+ + +
+

Rotation.

+
+ + + +
+
+ Type +
+
+ +number + + +
+
+ + + + +
+ + + +
+

getScale

+ + +
Stability: not documented
+ + + + +
+
+ + + + + + + + + + +
+ + + + + + + +
Inherited From:
+
+ + + + + + + + + + + + + +
Source:
+
  • imagestyle.js, line 95
+ + + + + + + +
+ + + + + + + +
Returns:
+ + +
+

Scale.

+
+ + + +
+
+ Type +
+
+ +number + + +
+
+ + + + +
+ + + +
+

getSrc

+ + +
Stability: not documented
+ + + + +
+
+ + + + + + + + + + +
+ + + + + + + + + + + + + + + + + + + +
Source:
+
  • iconstyle.js, line 194
+ + + + + + + +
+ + + + + + + +
Returns:
+ + +
+

Image src.

+
+ + + +
+
+ Type +
+
+ +string +| + +undefined + + +
+
+ + + + +
+ +
+ + + + + +
+ +
+ + + + +
+ + + +
+ + + + + + \ No newline at end of file diff --git a/float-no-zero/apidoc/ol.style.Image.html b/float-no-zero/apidoc/ol.style.Image.html new file mode 100644 index 0000000000..a0736626eb --- /dev/null +++ b/float-no-zero/apidoc/ol.style.Image.html @@ -0,0 +1,379 @@ + + + + + OpenLayers 3 API Documentation - Class: ol.style.Image + + + + + + + + + + + + + + + + +
+ + + + +
+ +
+

+ ol.style.Image +

+ +
+ +
+
+ + + + +
+

new Image

+ + +
Stability: not documented
+ + + + +
+
+ + + + + + + + +
Parameters:
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
NameTypeDescription
options + + +ol.style.ImageOptions + + + +

Options.

+ + + +
+ + + + + + + + + + + + + + + + + + + +
Source:
+
  • imagestyle.js, line 33
+ + + + + + + +
+ + + + + + + + + +
+ + +
+ + + + + + + + + + + + + + + + +

Methods

+ +
+ +
+

getRotation

+ + +
Stability: not documented
+ + + + +
+
+ + + + + + + + + + +
+ + + + + + + + + + + + + + + + + + + +
Source:
+
  • imagestyle.js, line 87
+ + + + + + + +
+ + + + + + + +
Returns:
+ + +
+

Rotation.

+
+ + + +
+
+ Type +
+
+ +number + + +
+
+ + + + +
+ + + +
+

getScale

+ + +
Stability: not documented
+ + + + +
+
+ + + + + + + + + + +
+ + + + + + + + + + + + + + + + + + + +
Source:
+
  • imagestyle.js, line 95
+ + + + + + + +
+ + + + + + + +
Returns:
+ + +
+

Scale.

+
+ + + +
+
+ Type +
+
+ +number + + +
+
+ + + + +
+ +
+ + + + + +
+ +
+ + + + +
+ + + +
+ + + + + + \ No newline at end of file diff --git a/float-no-zero/apidoc/ol.style.Stroke.html b/float-no-zero/apidoc/ol.style.Stroke.html new file mode 100644 index 0000000000..f1c41e62b0 --- /dev/null +++ b/float-no-zero/apidoc/ol.style.Stroke.html @@ -0,0 +1,748 @@ + + + + + OpenLayers 3 API Documentation - Class: ol.style.Stroke + + + + + + + + + + + + + + + + +
+ + + + +
+ +
+

+ ol.style.Stroke +

+ +
+ +
+
+ + + + +
+

new Stroke

+ + +
Stability: not documented
+ + + + +
+
+ + + + + + + + +
Parameters:
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
NameTypeArgumentDescription
options + + +olx.style.StrokeOptions + + + + + + <optional>
+ + + +

Options.

+ + + +
+ + + + + + + + + + + + + + + + + + + +
Source:
+
  • strokestyle.js, line 11
+ + + + + + + +
+ + + + + + + + + +
+ + +
+ + + + + + + + + + + + + + + + +

Methods

+ +
+ +
+

getColor

+ + +
Stability: not documented
+ + + + +
+
+ + + + + + + + + + +
+ + + + + + + + + + + + + + + + + + + +
Source:
+
  • strokestyle.js, line 56
+ + + + + + + +
+ + + + + + + +
Returns:
+ + +
+

Color.

+
+ + + +
+
+ Type +
+
+ +ol.Color +| + +string + + +
+
+ + + + +
+ + + +
+

getLineCap

+ + +
Stability: not documented
+ + + + +
+
+ + + + + + + + + + +
+ + + + + + + + + + + + + + + + + + + +
Source:
+
  • strokestyle.js, line 64
+ + + + + + + +
+ + + + + + + +
Returns:
+ + +
+

Line cap.

+
+ + + +
+
+ Type +
+
+ +string +| + +undefined + + +
+
+ + + + +
+ + + +
+

getLineDash

+ + +
Stability: not documented
+ + + + +
+
+ + + + + + + + + + +
+ + + + + + + + + + + + + + + + + + + +
Source:
+
  • strokestyle.js, line 72
+ + + + + + + +
+ + + + + + + +
Returns:
+ + +
+

Line dash.

+
+ + + +
+
+ Type +
+
+ +Array.<number> + + +
+
+ + + + +
+ + + +
+

getLineJoin

+ + +
Stability: not documented
+ + + + +
+
+ + + + + + + + + + +
+ + + + + + + + + + + + + + + + + + + +
Source:
+
  • strokestyle.js, line 80
+ + + + + + + +
+ + + + + + + +
Returns:
+ + +
+

Line join.

+
+ + + +
+
+ Type +
+
+ +string +| + +undefined + + +
+
+ + + + +
+ + + +
+

getMiterLimit

+ + +
Stability: not documented
+ + + + +
+
+ + + + + + + + + + +
+ + + + + + + + + + + + + + + + + + + +
Source:
+
  • strokestyle.js, line 88
+ + + + + + + +
+ + + + + + + +
Returns:
+ + +
+

Miter limit.

+
+ + + +
+
+ Type +
+
+ +number +| + +undefined + + +
+
+ + + + +
+ + + +
+

getWidth

+ + +
Stability: not documented
+ + + + +
+
+ + + + + + + + + + +
+ + + + + + + + + + + + + + + + + + + +
Source:
+
  • strokestyle.js, line 96
+ + + + + + + +
+ + + + + + + +
Returns:
+ + +
+

Width.

+
+ + + +
+
+ Type +
+
+ +number +| + +undefined + + +
+
+ + + + +
+ +
+ + + + + +
+ +
+ + + + +
+ + + +
+ + + + + + \ No newline at end of file diff --git a/float-no-zero/apidoc/ol.style.Style.html b/float-no-zero/apidoc/ol.style.Style.html new file mode 100644 index 0000000000..a3a536ab65 --- /dev/null +++ b/float-no-zero/apidoc/ol.style.Style.html @@ -0,0 +1,650 @@ + + + + + OpenLayers 3 API Documentation - Class: ol.style.Style + + + + + + + + + + + + + + + + +
+ + + + +
+ +
+

+ ol.style.Style +

+ +
+ +
+
+ + + + +
+

new Style

+ + +
Stability: experimental
+ + + + +
+
+ + + + + + + + +
Parameters:
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
NameTypeArgumentDescription
options + + +olx.style.StyleOptions + + + + + + <optional>
+ + + +

Style options.

+ + + +
+ + + + + + + + + + + + + + + + + + + +
Source:
+
  • style.js, line 13
+ + + + + + + +
+ + + + + + + + + +
+ + +
+ + + + + + + + + + + + + + + + +

Methods

+ +
+ +
+

getFill

+ + +
Stability: not documented
+ + + + +
+
+ + + + + + + + + + +
+ + + + + + + + + + + + + + + + + + + +
Source:
+
  • style.js, line 53
+ + + + + + + +
+ + + + + + + +
Returns:
+ + +
+

Fill style.

+
+ + + +
+
+ Type +
+
+ +ol.style.Fill + + +
+
+ + + + +
+ + + +
+

getImage

+ + +
Stability: not documented
+ + + + +
+
+ + + + + + + + + + +
+ + + + + + + + + + + + + + + + + + + +
Source:
+
  • style.js, line 61
+ + + + + + + +
+ + + + + + + +
Returns:
+ + +
+

Image style.

+
+ + + +
+
+ Type +
+
+ +ol.style.Image + + +
+
+ + + + +
+ + + +
+

getStroke

+ + +
Stability: not documented
+ + + + +
+
+ + + + + + + + + + +
+ + + + + + + + + + + + + + + + + + + +
Source:
+
  • style.js, line 69
+ + + + + + + +
+ + + + + + + +
Returns:
+ + +
+

Stroke style.

+
+ + + +
+
+ Type +
+
+ +ol.style.Stroke + + +
+
+ + + + +
+ + + +
+

getText

+ + +
Stability: not documented
+ + + + +
+
+ + + + + + + + + + +
+ + + + + + + + + + + + + + + + + + + +
Source:
+
  • style.js, line 77
+ + + + + + + +
+ + + + + + + +
Returns:
+ + +
+

Text style.

+
+ + + +
+
+ Type +
+
+ +ol.style.Text + + +
+
+ + + + +
+ + + +
+

getZIndex

+ + +
Stability: not documented
+ + + + +
+
+ + + + + + + + + + +
+ + + + + + + + + + + + + + + + + + + +
Source:
+
  • style.js, line 85
+ + + + + + + +
+ + + + + + + +
Returns:
+ + +
+

ZIndex.

+
+ + + +
+
+ Type +
+
+ +number +| + +undefined + + +
+
+ + + + +
+ +
+ + + + + +
+ +
+ + + + +
+ + + +
+ + + + + + \ No newline at end of file diff --git a/float-no-zero/apidoc/ol.style.Text.html b/float-no-zero/apidoc/ol.style.Text.html new file mode 100644 index 0000000000..aeb3a5edfd --- /dev/null +++ b/float-no-zero/apidoc/ol.style.Text.html @@ -0,0 +1,923 @@ + + + + + OpenLayers 3 API Documentation - Class: ol.style.Text + + + + + + + + + + + + + + + + +
+ + + + +
+ +
+

+ ol.style.Text +

+ +
+ +
+
+ + + + +
+

new Text

+ + +
Stability: not documented
+ + + + +
+
+ + + + + + + + +
Parameters:
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
NameTypeArgumentDescription
options + + +olx.style.TextOptions + + + + + + <optional>
+ + + +

Options.

+ + + +
+ + + + + + + + + + + + + + + + + + + +
Source:
+
  • textstyle.js, line 9
+ + + + + + + +
+ + + + + + + + + +
+ + +
+ + + + + + + + + + + + + + + + +

Methods

+ +
+ +
+

getFill

+ + +
Stability: not documented
+ + + + +
+
+ + + + + + + + + + +
+ + + + + + + + + + + + + + + + + + + +
Source:
+
  • textstyle.js, line 74
+ + + + + + + +
+ + + + + + + +
Returns:
+ + +
+

Fill style.

+
+ + + +
+
+ Type +
+
+ +ol.style.Fill + + +
+
+ + + + +
+ + + +
+

getFont

+ + +
Stability: not documented
+ + + + +
+
+ + + + + + + + + + +
+ + + + + + + + + + + + + + + + + + + +
Source:
+
  • textstyle.js, line 66
+ + + + + + + +
+ + + + + + + +
Returns:
+ + +
+

Font.

+
+ + + +
+
+ Type +
+
+ +string +| + +undefined + + +
+
+ + + + +
+ + + +
+

getRotation

+ + +
Stability: not documented
+ + + + +
+
+ + + + + + + + + + +
+ + + + + + + + + + + + + + + + + + + +
Source:
+
  • textstyle.js, line 82
+ + + + + + + +
+ + + + + + + +
Returns:
+ + +
+

Rotation.

+
+ + + +
+
+ Type +
+
+ +number +| + +undefined + + +
+
+ + + + +
+ + + +
+

getScale

+ + +
Stability: not documented
+ + + + +
+
+ + + + + + + + + + +
+ + + + + + + + + + + + + + + + + + + +
Source:
+
  • textstyle.js, line 90
+ + + + + + + +
+ + + + + + + +
Returns:
+ + +
+

Scale.

+
+ + + +
+
+ Type +
+
+ +number +| + +undefined + + +
+
+ + + + +
+ + + +
+

getStroke

+ + +
Stability: not documented
+ + + + +
+
+ + + + + + + + + + +
+ + + + + + + + + + + + + + + + + + + +
Source:
+
  • textstyle.js, line 98
+ + + + + + + +
+ + + + + + + +
Returns:
+ + +
+

Stroke style.

+
+ + + +
+
+ Type +
+
+ +ol.style.Stroke + + +
+
+ + + + +
+ + + +
+

getText

+ + +
Stability: not documented
+ + + + +
+
+ + + + + + + + + + +
+ + + + + + + + + + + + + + + + + + + +
Source:
+
  • textstyle.js, line 106
+ + + + + + + +
+ + + + + + + +
Returns:
+ + +
+

Text.

+
+ + + +
+
+ Type +
+
+ +string +| + +undefined + + +
+
+ + + + +
+ + + +
+

getTextAlign

+ + +
Stability: not documented
+ + + + +
+
+ + + + + + + + + + +
+ + + + + + + + + + + + + + + + + + + +
Source:
+
  • textstyle.js, line 114
+ + + + + + + +
+ + + + + + + +
Returns:
+ + +
+

Text align.

+
+ + + +
+
+ Type +
+
+ +string +| + +undefined + + +
+
+ + + + +
+ + + +
+

getTextBaseline

+ + +
Stability: not documented
+ + + + +
+
+ + + + + + + + + + +
+ + + + + + + + + + + + + + + + + + + +
Source:
+
  • textstyle.js, line 122
+ + + + + + + +
+ + + + + + + +
Returns:
+ + +
+

Text baseline.

+
+ + + +
+
+ Type +
+
+ +string +| + +undefined + + +
+
+ + + + +
+ +
+ + + + + +
+ +
+ + + + +
+ + + +
+ + + + + + \ No newline at end of file diff --git a/float-no-zero/apidoc/ol.tilegrid.TileGrid.html b/float-no-zero/apidoc/ol.tilegrid.TileGrid.html new file mode 100644 index 0000000000..032c250da1 --- /dev/null +++ b/float-no-zero/apidoc/ol.tilegrid.TileGrid.html @@ -0,0 +1,649 @@ + + + + + OpenLayers 3 API Documentation - Class: ol.tilegrid.TileGrid + + + + + + + + + + + + + + + + +
+ + + + +
+ +
+

+ ol.tilegrid. + + ol.tilegrid.TileGrid +

+ +
+ +
+
+ + + + +
+

new TileGrid

+ + +
Stability: experimental
+ + + + +
+
+ + + + + + + + +
Parameters:
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
NameTypeDescription
options + + +olx.tilegrid.TileGridOptions + + + +

Tile grid options.

+ + + +
+ + + + + + + + + + + + + + + + + + + +
Source:
+
  • tilegrid.js, line 34
+ + + + + + + +
+ + + + + + + + + +
+ + +
+ + + + + + + + + + + + + + + + +

Methods

+ +
+ +
+

getMinZoom

+ + +
Stability: experimental
+ + + + +
+
+ + + + + + + + + + +
+ + + + + + + + + + + + + + + + + + + +
Source:
+
  • tilegrid.js, line 153
+ + + + + + + +
+ + + + + + + +
Returns:
+ + +
+

Min zoom.

+
+ + + +
+
+ Type +
+
+ +number + + +
+
+ + + + +
+ + + +
+

getOrigin

+ + +
Stability: experimental
+ + + + +
+
+ + + + + + + + +
Parameters:
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
NameTypeDescription
z + + +number + + + +

Z.

+ + + +
+ + + + + + + + + + + + + + + + + + + +
Source:
+
  • tilegrid.js, line 163
+ + + + + + + +
+ + + + + + + +
Returns:
+ + +
+

Origin.

+
+ + + +
+
+ Type +
+
+ +ol.Coordinate + + +
+
+ + + + +
+ + + +
+

getResolutions

+ + +
Stability: experimental
+ + + + +
+
+ + + + + + + + + + +
+ + + + + + + + + + + + + + + + + + + +
Source:
+
  • tilegrid.js, line 188
+ + + + + + + +
+ + + + + + + +
Returns:
+ + +
+

Resolutions.

+
+ + + +
+
+ Type +
+
+ +Array.<number> + + +
+
+ + + + +
+ + + +
+

getTileSize

+ + +
Stability: experimental
+ + + + +
+
+ + + + + + + + +
Parameters:
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
NameTypeDescription
z + + +number + + + +

Z.

+ + + +
+ + + + + + + + + + + + + + + + + + + +
Source:
+
  • tilegrid.js, line 377
+ + + + + + + +
+ + + + + + + +
Returns:
+ + +
+

Tile size.

+
+ + + +
+
+ Type +
+
+ +number + + +
+
+ + + + +
+ +
+ + + + + +
+ +
+ + + + +
+ + + +
+ + + + + + \ No newline at end of file diff --git a/float-no-zero/apidoc/ol.tilegrid.WMTS.html b/float-no-zero/apidoc/ol.tilegrid.WMTS.html new file mode 100644 index 0000000000..0beb5e2d80 --- /dev/null +++ b/float-no-zero/apidoc/ol.tilegrid.WMTS.html @@ -0,0 +1,761 @@ + + + + + OpenLayers 3 API Documentation - Class: ol.tilegrid.WMTS + + + + + + + + + + + + + + + + +
+ + + + +
+ +
+

+ ol.tilegrid. + + ol.tilegrid.WMTS +

+ +
+ +
+
+ + + + +
+

new WMTS

+ + +
Stability: experimental
+ + + + +
+
+ + + + + + + + +
Parameters:
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
NameTypeDescription
options + + +olx.tilegrid.WMTSOptions + + + +

WMTS options.

+ + + +
+ + + + + + + + + + + + + + + + + + + +
Source:
+
  • wmtstilegrid.js, line 17
+ + + + + + + +
+ + + + + + + + + +
+ + +
+ + +

Extends

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

Methods

+ +
+ +
+

getMatrixIds

+ + +
Stability: experimental
+ + + + +
+
+ + + + + + + + + + +
+ + + + + + + + + + + + + + + + + + + +
Source:
+
  • wmtstilegrid.js, line 55
+ + + + + + + +
+ + + + + + + +
Returns:
+ + +
+

MatrixIds.

+
+ + + +
+
+ Type +
+
+ +Array.<string> + + +
+
+ + + + +
+ + + +
+

getMinZoom

+ + +
Stability: experimental
+ + + + +
+
+ + + + + + + + + + +
+ + + + + + + +
Inherited From:
+
+ + + + + + + + + + + + + +
Source:
+
  • tilegrid.js, line 153
+ + + + + + + +
+ + + + + + + +
Returns:
+ + +
+

Min zoom.

+
+ + + +
+
+ Type +
+
+ +number + + +
+
+ + + + +
+ + + +
+

getOrigin

+ + +
Stability: experimental
+ + + + +
+
+ + + + + + + + +
Parameters:
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
NameTypeDescription
z + + +number + + + +

Z.

+ + + +
+ + + + + + + +
Inherited From:
+
+ + + + + + + + + + + + + +
Source:
+
  • tilegrid.js, line 163
+ + + + + + + +
+ + + + + + + +
Returns:
+ + +
+

Origin.

+
+ + + +
+
+ Type +
+
+ +ol.Coordinate + + +
+
+ + + + +
+ + + +
+

getResolutions

+ + +
Stability: experimental
+ + + + +
+
+ + + + + + + + + + +
+ + + + + + + +
Inherited From:
+
+ + + + + + + + + + + + + +
Source:
+
  • tilegrid.js, line 188
+ + + + + + + +
+ + + + + + + +
Returns:
+ + +
+

Resolutions.

+
+ + + +
+
+ Type +
+
+ +Array.<number> + + +
+
+ + + + +
+ + + +
+

getTileSize

+ + +
Stability: experimental
+ + + + +
+
+ + + + + + + + +
Parameters:
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
NameTypeDescription
z + + +number + + + +

Z.

+ + + +
+ + + + + + + +
Inherited From:
+
+ + + + + + + + + + + + + +
Source:
+
  • tilegrid.js, line 377
+ + + + + + + +
+ + + + + + + +
Returns:
+ + +
+

Tile size.

+
+ + + +
+
+ Type +
+
+ +number + + +
+
+ + + + +
+ +
+ + + + + +
+ +
+ + + + +
+ + + +
+ + + + + + \ No newline at end of file diff --git a/float-no-zero/apidoc/ol.tilegrid.XYZ.html b/float-no-zero/apidoc/ol.tilegrid.XYZ.html new file mode 100644 index 0000000000..90171dc3a0 --- /dev/null +++ b/float-no-zero/apidoc/ol.tilegrid.XYZ.html @@ -0,0 +1,675 @@ + + + + + OpenLayers 3 API Documentation - Class: ol.tilegrid.XYZ + + + + + + + + + + + + + + + + +
+ + + + +
+ +
+

+ ol.tilegrid. + + ol.tilegrid.XYZ +

+ +
+ +
+
+ + + + +
+

new XYZ

+ + +
Stability: experimental
+ + + + +
+
+ + + + + + + + +
Parameters:
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
NameTypeDescription
options + + +olx.tilegrid.XYZOptions + + + +

XYZ options.

+ + + +
+ + + + + + + + + + + + + + + + + + + +
Source:
+
  • xyztilegrid.js, line 19
+ + + + + + + +
+ + + + + + + + + +
+ + +
+ + +

Extends

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

Methods

+ +
+ +
+

getMinZoom

+ + +
Stability: experimental
+ + + + +
+
+ + + + + + + + + + +
+ + + + + + + +
Inherited From:
+
+ + + + + + + + + + + + + +
Source:
+
  • tilegrid.js, line 153
+ + + + + + + +
+ + + + + + + +
Returns:
+ + +
+

Min zoom.

+
+ + + +
+
+ Type +
+
+ +number + + +
+
+ + + + +
+ + + +
+

getOrigin

+ + +
Stability: experimental
+ + + + +
+
+ + + + + + + + +
Parameters:
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
NameTypeDescription
z + + +number + + + +

Z.

+ + + +
+ + + + + + + +
Inherited From:
+
+ + + + + + + + + + + + + +
Source:
+
  • tilegrid.js, line 163
+ + + + + + + +
+ + + + + + + +
Returns:
+ + +
+

Origin.

+
+ + + +
+
+ Type +
+
+ +ol.Coordinate + + +
+
+ + + + +
+ + + +
+

getResolutions

+ + +
Stability: experimental
+ + + + +
+
+ + + + + + + + + + +
+ + + + + + + +
Inherited From:
+
+ + + + + + + + + + + + + +
Source:
+
  • tilegrid.js, line 188
+ + + + + + + +
+ + + + + + + +
Returns:
+ + +
+

Resolutions.

+
+ + + +
+
+ Type +
+
+ +Array.<number> + + +
+
+ + + + +
+ + + +
+

getTileSize

+ + +
Stability: experimental
+ + + + +
+
+ + + + + + + + +
Parameters:
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
NameTypeDescription
z + + +number + + + +

Z.

+ + + +
+ + + + + + + +
Inherited From:
+
+ + + + + + + + + + + + + +
Source:
+
  • tilegrid.js, line 377
+ + + + + + + +
+ + + + + + + +
Returns:
+ + +
+

Tile size.

+
+ + + +
+
+ Type +
+
+ +number + + +
+
+ + + + +
+ +
+ + + + + +
+ +
+ + + + +
+ + + +
+ + + + + + \ No newline at end of file diff --git a/float-no-zero/apidoc/ol.tilegrid.Zoomify.html b/float-no-zero/apidoc/ol.tilegrid.Zoomify.html new file mode 100644 index 0000000000..43359b41dc --- /dev/null +++ b/float-no-zero/apidoc/ol.tilegrid.Zoomify.html @@ -0,0 +1,685 @@ + + + + + OpenLayers 3 API Documentation - Class: ol.tilegrid.Zoomify + + + + + + + + + + + + + + + + +
+ + + + +
+ +
+

+ ol.tilegrid. + + ol.tilegrid.Zoomify +

+ +
+ +
+
+ + + + +
+

new Zoomify

+ + +
Stability: experimental
+ + + + +
+
+ + + + + + + + +
Parameters:
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
NameTypeArgumentDescription
options + + +olx.tilegrid.ZoomifyOptions + + + + + + <optional>
+ + + +

Options.

+ + + +
+ + + + + + + + + + + + + + + + + + + +
Source:
+
  • zoomifytilegrid.js, line 16
+ + + + + + + +
+ + + + + + + + + +
+ + +
+ + +

Extends

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

Methods

+ +
+ +
+

getMinZoom

+ + +
Stability: experimental
+ + + + +
+
+ + + + + + + + + + +
+ + + + + + + +
Inherited From:
+
+ + + + + + + + + + + + + +
Source:
+
  • tilegrid.js, line 153
+ + + + + + + +
+ + + + + + + +
Returns:
+ + +
+

Min zoom.

+
+ + + +
+
+ Type +
+
+ +number + + +
+
+ + + + +
+ + + +
+

getOrigin

+ + +
Stability: experimental
+ + + + +
+
+ + + + + + + + +
Parameters:
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
NameTypeDescription
z + + +number + + + +

Z.

+ + + +
+ + + + + + + +
Inherited From:
+
+ + + + + + + + + + + + + +
Source:
+
  • tilegrid.js, line 163
+ + + + + + + +
+ + + + + + + +
Returns:
+ + +
+

Origin.

+
+ + + +
+
+ Type +
+
+ +ol.Coordinate + + +
+
+ + + + +
+ + + +
+

getResolutions

+ + +
Stability: experimental
+ + + + +
+
+ + + + + + + + + + +
+ + + + + + + +
Inherited From:
+
+ + + + + + + + + + + + + +
Source:
+
  • tilegrid.js, line 188
+ + + + + + + +
+ + + + + + + +
Returns:
+ + +
+

Resolutions.

+
+ + + +
+
+ Type +
+
+ +Array.<number> + + +
+
+ + + + +
+ + + +
+

getTileSize

+ + +
Stability: experimental
+ + + + +
+
+ + + + + + + + +
Parameters:
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
NameTypeDescription
z + + +number + + + +

Z.

+ + + +
+ + + + + + + +
Inherited From:
+
+ + + + + + + + + + + + + +
Source:
+
  • tilegrid.js, line 377
+ + + + + + + +
+ + + + + + + +
Returns:
+ + +
+

Tile size.

+
+ + + +
+
+ Type +
+
+ +number + + +
+
+ + + + +
+ +
+ + + + + +
+ +
+ + + + +
+ + + +
+ + + + + + \ No newline at end of file diff --git a/float-no-zero/apidoc/ol.tilegrid.html b/float-no-zero/apidoc/ol.tilegrid.html new file mode 100644 index 0000000000..5f7911c2dd --- /dev/null +++ b/float-no-zero/apidoc/ol.tilegrid.html @@ -0,0 +1,146 @@ + + + + + OpenLayers 3 API Documentation - Namespace: ol.tilegrid + + + + + + + + + + + + + + + + +
+ + + + +
+ +
+

+ ol. + + ol.tilegrid +

+ +
+ + + +
+ + + + +
+ + + +
+ + + + + + \ No newline at end of file diff --git a/float-no-zero/apidoc/ol.webgl.Context.html b/float-no-zero/apidoc/ol.webgl.Context.html new file mode 100644 index 0000000000..704c90a513 --- /dev/null +++ b/float-no-zero/apidoc/ol.webgl.Context.html @@ -0,0 +1,450 @@ + + + + + OpenLayers 3 API Documentation - Class: ol.webgl.Context + + + + + + + + + + + + + + + + +
+ + + + +
+ +
+

+ ol.webgl.Context +

+ +
+ +
+
+ + + + +
+

new Context

+ + +
Stability: not documented
+ + + + +
+
+ + + + + + + + +
Parameters:
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
NameTypeDescription
canvas + + +HTMLCanvasElement + + + +

Canvas.

gl + + +WebGLRenderingContext + + + +

GL.

+ + + +
+ + + + + + + + + + + + + + + + + + + +
Source:
+
  • context.js, line 27
+ + + + + + + +
+ + + + + + + + + +
+ + +
+ + + + + + + + + + + + + + + + +

Methods

+ +
+ +
+

getGL

+ + +
Stability: not documented
+ + + + +
+
+ + + + + + + + + + +
+ + + + + + + + + + + + + + + + + + + +
Source:
+
  • context.js, line 163
+ + + + + + + +
+ + + + + + + +
Returns:
+ + +
+

GL.

+
+ + + +
+
+ Type +
+
+ +WebGLRenderingContext + + +
+
+ + + + +
+ + + +
+

useProgram

+ + +
Stability: not documented
+ + + + +
+
+ + + + + + + + +
Parameters:
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
NameTypeDescription
program + + +WebGLProgram + + + +

Program.

+ + + +
+ + + + + + + + + + + + + + + + + + + +
Source:
+
  • context.js, line 250
+ + + + + + + +
+ + + + + + + +
Returns:
+ + +
+

Changed.

+
+ + + +
+
+ Type +
+
+ +boolean + + +
+
+ + + + +
+ +
+ + + + + +
+ +
+ + + + +
+ + + +
+ + + + + + \ No newline at end of file diff --git a/float-no-zero/apidoc/olx.animation.html b/float-no-zero/apidoc/olx.animation.html new file mode 100644 index 0000000000..387f252e14 --- /dev/null +++ b/float-no-zero/apidoc/olx.animation.html @@ -0,0 +1,842 @@ + + + + + OpenLayers 3 API Documentation - Namespace: olx.animation + + + + + + + + + + + + + + + + +
+ + + + +
+ +
+

+ olx. + + olx.animation +

+ +
+ +
+
+ + + + + + +
+ + + + + + + + + + + + + + + + + + + +
Source:
+
  • olx.jsdoc, line 3
+ + + + + + + +
+ + + + +
+ + + + + + + + + + + + + + + + + + +

TypeDefs

+ +
+ +
+

BounceOptions

+ + +
Stability: experimental
+ + + + +
+
+ + + +
+ + +
Properties:
+ +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
NameTypeDescription
resolution + + +number + + + +

The resolution to start the bounce from, typically map.getView().getResolution().

start + + +number +| + +undefined + + + +

The start time of the animation. Default is immediately.

duration + + +number +| + +undefined + + + +

The duration of the animation in milliseconds. Default is 1000.

easing + + +function + + + +

The easing function to use. Default is ol.easing.upAndDown

+ + + + + + + + + + + + + + + + + + + + +
Source:
+
  • objectliterals.jsdoc, line 19
+ + + + + + + +
+ + + +
+ + + +
+

PanOptions

+ + +
Stability: experimental
+ + + + +
+
+ + + +
+ + +
Properties:
+ +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
NameTypeDescription
source + + +ol.Coordinate + + + +

The location to start panning from, typically map.getView().getCenter().

start + + +number +| + +undefined + + + +

The start time of the animation. Default is immediately.

duration + + +number +| + +undefined + + + +

The duration of the animation in milliseconds. Default is 1000.

easing + + +function + + + +

The easing function to use. Default is ol.easing.inAndOut

+ + + + + + + + + + + + + + + + + + + + +
Source:
+
  • objectliterals.jsdoc, line 21
+ + + + + + + +
+ + + +
+ + + +
+

RotateOptions

+ + +
Stability: experimental
+ + + + +
+
+ + + +
+ + +
Properties:
+ +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
NameTypeDescription
rotation + + +number + + + +

The rotation to apply, in radians.

start + + +number +| + +undefined + + + +

The start time of the animation. Default is immediately.

duration + + +number +| + +undefined + + + +

The duration of the animation in milliseconds. Default is 1000.

easing + + +function + + + +

The easing function to use. Default is ol.easing.inAndOut

+ + + + + + + + + + + + + + + + + + + + +
Source:
+
  • objectliterals.jsdoc, line 23
+ + + + + + + +
+ + + +
+ + + +
+

ZoomOptions

+ + +
Stability: experimental
+ + + + +
+
+ + + +
+ + +
Properties:
+ +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
NameTypeDescription
resolution + + +number + + + +

number The resolution to begin zooming from, typically map.getView().getResolution().

start + + +number +| + +undefined + + + +

The start time of the animation. Default is immediately.

duration + + +number +| + +undefined + + + +

The duration of the animation in milliseconds. Default is 1000.

easing + + +function + + + +

Easing function.

+ + + + + + + + + + + + + + + + + + + + +
Source:
+
  • objectliterals.jsdoc, line 25
+ + + + + + + +
+ + + +
+ +
+ + + +
+ +
+ + + + +
+ + + +
+ + + + + + \ No newline at end of file diff --git a/float-no-zero/apidoc/olx.control.html b/float-no-zero/apidoc/olx.control.html new file mode 100644 index 0000000000..f5ffc690dd --- /dev/null +++ b/float-no-zero/apidoc/olx.control.html @@ -0,0 +1,1974 @@ + + + + + OpenLayers 3 API Documentation - Namespace: olx.control + + + + + + + + + + + + + + + + +
+ + + + +
+ +
+

+ olx. + + olx.control +

+ +
+ +
+
+ + + + + + +
+ + + + + + + + + + + + + + + + + + + +
Source:
+
  • olx.jsdoc, line 5
+ + + + + + + +
+ + + + +
+ + + + + + + + + + + + + + + + + + +

TypeDefs

+ +
+ +
+

AttributionOptions

+ + +
Stability: experimental
+ + + + +
+
+ + + +
+ + +
Properties:
+ +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
NameTypeDescription
className + + +string +| + +undefined + + + +

CSS class name. Default is ol-attribution.

target + + +Element +| + +undefined + + + +

Target.

+ + + + + + + + + + + + + + + + + + + + +
Source:
+
  • objectliterals.jsdoc, line 27
+ + + + + + + +
+ + + +
+ + + +
+

ControlOptions

+ + +
Stability: experimental
+ + + + +
+
+ + + +
+ + +
Properties:
+ +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
NameTypeDescription
element + + +Element +| + +undefined + + + +

The element is the control's container + element. This only needs to be specified if you're developing a custom + control.

target + + +Element +| + +string +| + +undefined + + + +

Specify a target if you want the + control to be rendered outside of the map's viewport.

+ + + + + + + + + + + + + + + + + + + + +
Source:
+
  • objectliterals.jsdoc, line 29
+ + + + + + + +
+ + + +
+ + + +
+

DefaultsOptions

+ + +
Stability: experimental
+ + + + +
+
+ + + +
+ + +
Properties:
+ +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
NameTypeDescription
attribution + + +boolean +| + +undefined + + + +

Attribution. Default is true.

attributionOptions + + +olx.control.AttributionOptions +| + +undefined + + + +

Attribution options.

logo + + +boolean +| + +undefined + + + +

Logo. Default is true.

logoOptions + + +olx.control.LogoOptions +| + +undefined + + + +

Logo options.

zoom + + +boolean +| + +undefined + + + +

Zoom. Default is true.

zoomOptions + + +olx.control.ZoomOptions +| + +undefined + + + +

Zoom options.

+ + + + + + + + + + + + + + + + + + + + +
Source:
+
  • objectliterals.jsdoc, line 31
+ + + + + + + +
+ + + +
+ + + +
+

FullScreenOptions

+ + +
Stability: experimental
+ + + + +
+
+ + + +
+ + +
Properties:
+ +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
NameTypeDescription
className + + +string +| + +undefined + + + +

CSS class name. Default is ol-full-screen.

tipLabel + + +string +| + +undefined + + + +

Text label to use for the button tip. Default is Toggle full-screen

keys + + +boolean +| + +undefined + + + +

Full keyboard access.

target + + +Element +| + +undefined + + + +

Target.

+ + + + + + + + + + + + + + + + + + + + +
Source:
+
  • objectliterals.jsdoc, line 33
+ + + + + + + +
+ + + +
+ + + +
+

LogoOptions

+ + +
Stability: experimental
+ + + + +
+
+ + + +
+ + +
Properties:
+ +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
NameTypeDescription
className + + +string +| + +undefined + + + +

CSS class name. Default is ol-logo.

target + + +Element +| + +undefined + + + +

Target.

+ + + + + + + + + + + + + + + + + + + + +
Source:
+
  • objectliterals.jsdoc, line 35
+ + + + + + + +
+ + + +
+ + + +
+

MousePositionOptions

+ + +
Stability: experimental
+ + + + +
+
+ + + +
+ + +
Properties:
+ +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
NameTypeDescription
className + + +string +| + +undefined + + + +

CSS class name. Default is ol-mouse-position.

coordinateFormat + + +ol.CoordinateFormatType +| + +undefined + + + +

Coordinate + format.

projection + + +ol.proj.ProjectionLike + + + +

Projection.

target + + +Element +| + +undefined + + + +

Target.

undefinedHTML + + +string +| + +undefined + + + +

Markup for undefined coordinates. + Default is `` (empty string).

+ + + + + + + + + + + + + + + + + + + + +
Source:
+
  • objectliterals.jsdoc, line 37
+ + + + + + + +
+ + + +
+ + + +
+

ScaleLineOptions

+ + +
Stability: experimental
+ + + + +
+
+ + + +
+ + +
Properties:
+ +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
NameTypeDescription
className + + +string +| + +undefined + + + +

CSS Class name. Default is ol-scale-line.

minWidth + + +number +| + +undefined + + + +

Minimum width in pixels. Default is 64.

target + + +Element +| + +undefined + + + +

Target.

units + + +ol.control.ScaleLineUnits +| + +string +| + +undefined + + + +

Units. + Default is metric.

+ + + + + + + + + + + + + + + + + + + + +
Source:
+
  • objectliterals.jsdoc, line 39
+ + + + + + + +
+ + + +
+ + + +
+

ZoomOptions

+ + +
Stability: experimental
+ + + + +
+
+ + + +
+ + +
Properties:
+ +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
NameTypeDescription
duration + + +number +| + +undefined + + + +

Animation duration in milliseconds. Default is 250.

className + + +string +| + +undefined + + + +

CSS class name. Default is ol-zoom.

zoomInLabel + + +string +| + +undefined + + + +

Text label to use for the zoom-in button. Default is +

zoomOutLabel + + +string +| + +undefined + + + +

Text label to use for the zoom-out button. Default is -

zoomInTipLabel + + +string +| + +undefined + + + +

Text label to use for the button tip. Default is Zoom in

zoomOutTipLabel + + +string +| + +undefined + + + +

Text label to use for the button tip. Default is Zoom out

delta + + +number +| + +undefined + + + +

The zoom delta applied on each click.

target + + +Element +| + +undefined + + + +

Target.

+ + + + + + + + + + + + + + + + + + + + +
Source:
+
  • objectliterals.jsdoc, line 41
+ + + + + + + +
+ + + +
+ + + +
+

ZoomSliderOptions

+ + +
Stability: experimental
+ + + + +
+
+ + + +
+ + +
Properties:
+ +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
NameTypeDescription
className + + +string +| + +undefined + + + +

CSS class name.

maxResolution + + +number +| + +undefined + + + +

Maximum resolution.

minResolution + + +number +| + +undefined + + + +

Minimum resolution.

+ + + + + + + + + + + + + + + + + + + + +
Source:
+
  • objectliterals.jsdoc, line 43
+ + + + + + + +
+ + + +
+ + + +
+

ZoomToExtentOptions

+ + +
Stability: experimental
+ + + + +
+
+ + + +
+ + +
Properties:
+ +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
NameTypeDescription
className + + +string +| + +undefined + + + +

Class name. Default is ol-zoom-extent.

target + + +Element +| + +undefined + + + +

Target.

tipLabel + + +string +| + +undefined + + + +

Text label to use for the button tip. Default is Zoom to extent

extent + + +ol.Extent +| + +undefined + + + +

The extent to zoom to. If + undefined the validity extent of the view projection is used.

+ + + + + + + + + + + + + + + + + + + + +
Source:
+
  • objectliterals.jsdoc, line 45
+ + + + + + + +
+ + + +
+ +
+ + + +
+ +
+ + + + +
+ + + +
+ + + + + + \ No newline at end of file diff --git a/float-no-zero/apidoc/olx.format.html b/float-no-zero/apidoc/olx.format.html new file mode 100644 index 0000000000..1ab1c89ec4 --- /dev/null +++ b/float-no-zero/apidoc/olx.format.html @@ -0,0 +1,837 @@ + + + + + OpenLayers 3 API Documentation - Namespace: olx.format + + + + + + + + + + + + + + + + +
+ + + + +
+ +
+

+ olx. + + olx.format +

+ +
+ +
+
+ + + + + + +
+ + + + + + + + + + + + + + + + + + + +
Source:
+
  • olx.jsdoc, line 7
+ + + + + + + +
+ + + + +
+ + + + + + + + + + + + + + + + + + +

TypeDefs

+ +
+ +
+

GeoJSONOptions

+ + +
Stability: not documented
+ + + + +
+
+ + + +
+ + +
Properties:
+ +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
NameTypeDescription
defaultProjection + + +ol.proj.ProjectionLike + + + +

Default projection.

+ + + + + + + + + + + + + + + + + + + + +
Source:
+
  • objectliterals.jsdoc, line 47
+ + + + + + + +
+ + + +
+ + + +
+

GMLOptions

+ + +
Stability: not documented
+ + + + +
+
+ + + +
+ + +
Properties:
+ +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
NameTypeDescription
featureNS + + +string + + + +

Feature namespace.

featureType + + +string + + + +

Feature type to parse.

srsName + + +string + + + +

srsName to use when writing geometries.

surface + + +boolean +| + +undefined + + + +

Write gml:Surface instead of + gml:Polygon elements. This also affects the elements in multi-part + geometries. Default is `false´.

curve + + +boolean +| + +undefined + + + +

Write gml:Curve instead of + gml:LineString elements. This also affects the elements in multi-part + geometries. Default is `false´.

multiCurve + + +boolean +| + +undefined + + + +

Write gml:MultiCurve instead of + gml:MultiLineString. Since the latter is deprecated in GML 3, the + default is `true´.

multiSurface + + +boolean +| + +undefined + + + +

Write gml:multiSurface instead + of gml:MultiPolygon. Since the latter is deprecated in GML 3, the + default is `true´.

schemaLocation + + +string +| + +undefined + + + +

Optional schemaLocation to use + when writing out the GML, this will override the default provided.

+ + + + + + + + + + + + + + + + + + + + +
Source:
+
  • objectliterals.jsdoc, line 55
+ + + + + + + +
+ + + +
+ + + +
+

IGCOptions

+ + +
Stability: not documented
+ + + + +
+
+ + + +
+ + +
Properties:
+ +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
NameTypeDescription
altitudeMode + + +ol.format.IGCZ +| + +undefined + + + +

Altitude mode. + Possible values are barometric, gps, and none. Default is none.

+ + + + + + + + + + + + + + + + + + + + +
Source:
+
  • objectliterals.jsdoc, line 51
+ + + + + + + +
+ + + +
+ + + +
+

KMLOptions

+ + +
Stability: not documented
+ + + + +
+
+ + + +
+ + +
Properties:
+ +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
NameTypeDescription
defaultStyle + + +Array.<ol.style.Style> +| + +undefined + + + +

Default style. The default + default style is the same as Google Earth.

+ + + + + + + + + + + + + + + + + + + + +
Source:
+
  • objectliterals.jsdoc, line 53
+ + + + + + + +
+ + + +
+ + + +
+

TopoJSONOptions

+ + +
Stability: not documented
+ + + + +
+
+ + + +
+ + +
Properties:
+ +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
NameTypeDescription
defaultProjection + + +ol.proj.ProjectionLike + + + +

Default projection.

+ + + + + + + + + + + + + + + + + + + + +
Source:
+
  • objectliterals.jsdoc, line 49
+ + + + + + + +
+ + + +
+ +
+ + + +
+ +
+ + + + +
+ + + +
+ + + + + + \ No newline at end of file diff --git a/float-no-zero/apidoc/olx.html b/float-no-zero/apidoc/olx.html new file mode 100644 index 0000000000..9178050663 --- /dev/null +++ b/float-no-zero/apidoc/olx.html @@ -0,0 +1,2275 @@ + + + + + OpenLayers 3 API Documentation - Namespace: olx + + + + + + + + + + + + + + + + +
+ + + + +
+ +
+

+ olx +

+ +
+ +
+
+ + + + + + +
+ + + + + + + + + + + + + + + + + + + +
Source:
+
  • olx.jsdoc, line 1
+ + + + + + + +
+ + + + +
+ + + + + + + + + + +

Namespaces

+ +
+
olx.animation
+
+ +
olx.control
+
+ +
olx.format
+
+ +
olx.interaction
+
+ +
olx.layer
+
+ +
olx.parser
+
+ +
olx.render
+
+ +
olx.source
+
+ +
olx.style
+
+ +
olx.tilegrid
+
+
+ + + + + + + + + +

TypeDefs

+ +
+ +
+

AttributionOptions

+ + +
Stability: experimental
+ + + + +
+
+ + + +
+ + +
Properties:
+ +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
NameTypeDescription
html + + +string + + + +

HTML markup for this attribution.

tileRanges + + +Object.<string, Array.<ol.TileRange>> +| + +undefined + + + +

Tile ranges (FOR INTERNAL USE ONLY).

+ + + + + + + + + + + + + + + + + + + + +
Source:
+
  • objectliterals.jsdoc, line 1
+ + + + + + + +
+ + + +
+ + + +
+

DeviceOptions

+ + +
Stability: experimental
+ + + + +
+
+ + + +
+ + +
Properties:
+ +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
NameTypeDescription
loadTilesWhileAnimating + + +boolean +| + +undefined + + + +

When set to false, no tiles will be loaded while animating, which improves responsiveness on devices with slow memory. Default is true.

loadTilesWhileInteracting + + +boolean +| + +undefined + + + +

When set to false, no tiles will be loaded while interacting, which improves responsiveness on devices with slow memory. Default is true.

+ + + + + + + + + + + + + + + + + + + + +
Source:
+
  • objectliterals.jsdoc, line 3
+ + + + + + + +
+ + + +
+ + + +
+

DeviceOrientationOptions

+ + +
Stability: experimental
+ + + + +
+
+ + + +
+ + +
Properties:
+ +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
NameTypeDescription
tracking + + +boolean +| + +undefined + + + +

Start tracking. Default is false.

+ + + + + + + + + + + + + + + + + + + + +
Source:
+
  • objectliterals.jsdoc, line 5
+ + + + + + + +
+ + + +
+ + + +
+

FeatureOverlayOptions

+ + +
Stability: not documented
+ + + + +
+
+ + + +
+ + +
Properties:
+ +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
NameTypeDescription
features + + +Array.<ol.Feature> +| + +ol.Collection +| + +undefined + + + +

Features.

map + + +ol.Map +| + +undefined + + + +

Map.

style + + +ol.style.Style +| + +Array.<ol.style.Style> +| + +ol.feature.StyleFunction +| + +undefined + + + +

Feature style.

+ + + + + + + + + + + + + + + + + + + + +
Source:
+
  • objectliterals.jsdoc, line 101
+ + + + + + + +
+ + + +
+ + + +
+

GeolocationOptions

+ + +
Stability: experimental
+ + + + +
+
+ + + +
+ + +
Properties:
+ +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
NameTypeDescription
tracking + + +boolean +| + +undefined + + + +

Start Tracking. Default is false.

trackingOptions + + +GeolocationPositionOptions +| + +undefined + + + +

Tracking options.

projection + + +ol.proj.ProjectionLike + + + +

Projection.

+ + + + + + + + + + + + + + + + + + + + +
Source:
+
  • objectliterals.jsdoc, line 7
+ + + + + + + +
+ + + +
+ + + +
+

MapOptions

+ + +
Stability: experimental
+ + + + +
+
+ +
+

Object literal with config options for the map.

+
+ + + +
+ + +
Properties:
+ +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
NameTypeDescription
controls + + +ol.Collection +| + +Array.<ol.control.Control> +| + +undefined + + + +

Controls initially added to the map.

deviceOptions + + +olx.DeviceOptions +| + +undefined + + + +

Device options for the map.

pixelRatio + + +number +| + +undefined + + + +

The ratio between physical + pixels and device-independent pixels (dips) on the device. If undefined + then it gets set by using window.devicePixelRatio.

interactions + + +ol.Collection +| + +Array.<ol.interaction.Interaction> +| + +undefined + + + +

Interactions that are initially added to the map.

keyboardEventTarget + + +Element +| + +Document +| + +string +| + +undefined + + + +

The element to listen to keyboard events on. + This determines when the KeyboardPan and KeyboardZoom interactions trigger. For example, if + this option is set to document the keyboard interactions will always trigger. If this option + is not specified, the element the library listens to keyboard events on is the map target (i.e. + the user-provided div for the map). If this is not document the target element needs to be + focused for key events to be emitted, requiring that the target element has a tabindex + attribute.

layers + + +Array.<ol.layer.Base> +| + +ol.Collection +| + +undefined + + + +

Layers.

ol3Logo + + +boolean +| + +undefined + + + +

Show ol3 logo. Default is true.

overlays + + +ol.Collection +| + +Array.<ol.Overlay> +| + +undefined + + + +

Overlays initially added to the map.

renderer + + +ol.RendererHint +| + +Array.<(ol.RendererHint|string)> +| + +string +| + +undefined + + + +

Renderer.

target + + +Element +| + +string +| + +undefined + + + +

The container for the map.

view + + +ol.IView +| + +undefined + + + +

The map's view. Currently + ol.View2D is available as view.

+ + + + + + + + + + + + + + + + + + + + +
Source:
+
  • objectliterals.jsdoc, line 9
+ + + + + + + +
+ + + +
+ + + +
+

OverlayOptions

+ + +
Stability: experimental
+ + + + +
+
+ +
+

Object literal with config options for the overlay.

+
+ + + +
+ + +
Properties:
+ +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
NameTypeDescription
element + + +Element +| + +undefined + + + +

The overlay element.

position + + +ol.Coordinate +| + +undefined + + + +

The overlay position in map + projection.

positioning + + +ol.OverlayPositioning +| + +string +| + +undefined + + + +

Positioning.

stopEvent + + +boolean +| + +undefined + + + +

Whether event propagation to the map + viewport should be stopped. Default is true. If true the overlay is + placed in the same container as that of the controls + (ol-overlaycontainer-stopevent).

insertFirst + + +boolean +| + +undefined + + + +

Whether the overlay is inserted + first in the overlay container, or appended. Default is true. If the + overlay is placed in the same container as that of the controls (see + the stopEvent option) you will probably set insertFirst to true + so the overlay is displayed below the controls.

+ + + + + + + + + + + + + + + + + + + + +
Source:
+
  • objectliterals.jsdoc, line 11
+ + + + + + + +
+ + + +
+ + + +
+

Proj4jsProjectionOptions

+ + +
Stability: experimental
+ + + + +
+
+ +
+

Object literal with config options for the Proj4js projection.

+
+ + + +
+ + +
Properties:
+ +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
NameTypeDescription
code + + +string + + + +

The SRS identifier code, e.g. EPSG:31256.

extent + + +ol.Extent +| + +undefined + + + +

The validity extent for the SRS.

global + + +boolean +| + +undefined + + + +

Whether the projection is valid for the + whole globe. Default is false.

+ + + + + + + + + + + + + + + + + + + + +
Source:
+
  • objectliterals.jsdoc, line 13
+ + + + + + + +
+ + + +
+ + + +
+

ProjectionOptions

+ + +
Stability: experimental
+ + + + +
+
+ +
+

Object literal with config options for the projection.

+
+ + + +
+ + +
Properties:
+ +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
NameTypeDescription
code + + +string + + + +

The SRS identifier code, e.g. EPSG:4326.

units + + +ol.proj.Units +| + +string + + + +

Units.

extent + + +ol.Extent +| + +undefined + + + +

The validity extent for the SRS.

axisOrientation + + +string +| + +undefined + + + +

The axis orientation as + specified in Proj4. The default is enu.

global + + +boolean +| + +undefined + + + +

Whether the projection is valid for the + whole globe. Default is false.

+ + + + + + + + + + + + + + + + + + + + +
Source:
+
  • objectliterals.jsdoc, line 15
+ + + + + + + +
+ + + +
+ + + +
+

View2DOptions

+ + +
Stability: experimental
+ + + + +
+
+ +
+

Object literal with config options for the view.

+
+ + + +
+ + +
Properties:
+ +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
NameTypeDescription
center + + +ol.Coordinate +| + +undefined + + + +

The initial center for the view. + The coordinate system for the center is specified with the projection + option. Default is undefined, and layer sources will not be fetched if + this is not set.

constrainRotation + + +boolean +| + +number +| + +undefined + + + +

Rotation constraint. + false means no constraint. true means no constraint, but snap to + zero near zero. A number constraints the rotation to that number of + values. For example, 4 will constrain the rotation to 0, 90, 180, and + 270 degrees. The default is true.

enableRotation + + +boolean +| + +undefined + + + +

Enable rotation. Default is + true.

extent + + +ol.Extent +| + +undefined + + + +

The extent that constrains the center, + in other words, center cannot be set outside this extent. + Default is undefined.

maxResolution + + +number +| + +undefined + + + +

The maximum resolution used to + determine the resolution constraint. It is used together with maxZoom + and zoomFactor. If unspecified it is calculated in such a way that the + projection's validity extent fits in a 256x256 px tile. If the projection + is Spherical Mercator (the default) then maxResolution defaults to + 40075016.68557849 / 256 = 156543.03392804097.

maxZoom + + +number +| + +undefined + + + +

The maximum zoom level used to determine + the resolution constraint. It is used together with maxResolution and + zoomFactor. Default is 28.

projection + + +ol.proj.ProjectionLike + + + +

The projection. Default is + EPSG:3857 (Spherical Mercator).

resolution + + +number +| + +undefined + + + +

The initial resolution for the view. + The units are projection units per pixel (e.g. meters per pixel). + An alternative to setting this is to set zoom. Default is undefined, + and layer sources will not be fetched if neither this nor zoom are + defined.

resolutions + + +Array.<number> +| + +undefined + + + +

Resolutions to determine the + resolution constraint. If set the maxResolution, maxZoom and + zoomFactor options are ignored.

rotation + + +number +| + +undefined + + + +

The initial rotation for the view + in radians (positive rotation clockwise). Default is 0.

zoom + + +number +| + +undefined + + + +

Only used if resolution is not defined. + Zoom level used to calculate the initial resolution for the view. + The initial resolution is determined using the + ol.View2D#constrainResolution method.

zoomFactor + + +number +| + +undefined + + + +

The zoom factor used to determine the + resolution constraint. Used together with maxResolution and maxZoom. + Default is 2.

+ + + + + + + + + + + + + + + + + + + + +
Source:
+
  • objectliterals.jsdoc, line 17
+ + + + + + + +
+ + + +
+ +
+ + + +
+ +
+ + + + +
+ + + +
+ + + + + + \ No newline at end of file diff --git a/float-no-zero/apidoc/olx.interaction.html b/float-no-zero/apidoc/olx.interaction.html new file mode 100644 index 0000000000..c003564295 --- /dev/null +++ b/float-no-zero/apidoc/olx.interaction.html @@ -0,0 +1,2714 @@ + + + + + OpenLayers 3 API Documentation - Namespace: olx.interaction + + + + + + + + + + + + + + + + +
+ + + + +
+ +
+

+ olx. + + olx.interaction +

+ +
+ +
+
+ + + + + + +
+ + + + + + + + + + + + + + + + + + + +
Source:
+
  • olx.jsdoc, line 9
+ + + + + + + +
+ + + + +
+ + + + + + + + + + + + + + + + + + +

TypeDefs

+ +
+ +
+

DefaultsOptions

+ + +
Stability: experimental
+ + + + +
+
+ +
+

Interactions for the map. Default is true for all options.

+
+ + + +
+ + +
Properties:
+ +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
NameTypeDescription
altShiftDragRotate + + +boolean +| + +undefined + + + +

Whether Alt-Shift-drag + rotate is desired. Default is true.

doubleClickZoom + + +boolean +| + +undefined + + + +

Whether double click zoom is + desired. Default is true.

dragPan + + +boolean +| + +undefined + + + +

Whether drag-pan is desired. Default is true.

keyboard + + +boolean +| + +undefined + + + +

Whether keyboard interaction is + desired. Default is true.

mouseWheelZoom + + +boolean +| + +undefined + + + +

Whether mousewheel zoom is + desired. Default is true.

shiftDragZoom + + +boolean +| + +undefined + + + +

Whether Shift-drag zoom is + desired. Default is true.

touchPan + + +boolean +| + +undefined + + + +

Whether touch pan is + desired. Default is true.

touchRotate + + +boolean +| + +undefined + + + +

Whether touch rotate is desired. Default is true.

touchZoom + + +boolean +| + +undefined + + + +

Whether touch zoom is desired. Default is true.

zoomDelta + + +number +| + +undefined + + + +

Zoom delta.

zoomDuration + + +number +| + +undefined + + + +

Zoom duration.

+ + + + + + + + + + + + + + + + + + + + +
Source:
+
  • objectliterals.jsdoc, line 71
+ + + + + + + +
+ + + +
+ + + +
+

DoubleClickZoomOptions

+ + +
Stability: experimental
+ + + + +
+
+ + + +
+ + +
Properties:
+ +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
NameTypeDescription
duration + + +number +| + +undefined + + + +

Animation duration in milliseconds. Default is 250.

delta + + +number +| + +undefined + + + +

The zoom delta applied on each double + click, default is 1.

+ + + + + + + + + + + + + + + + + + + + +
Source:
+
  • objectliterals.jsdoc, line 57
+ + + + + + + +
+ + + +
+ + + +
+

DragAndDropOptions

+ + +
Stability: not documented
+ + + + +
+
+ + + +
+ + +
Properties:
+ +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
NameTypeDescription
formatConstructors + + +Array.<function(new:ol.format.Feature)> +| + +undefined + + + +

Format constructors.

reprojectTo + + +ol.proj.ProjectionLike + + + +

Target projection. By + default, the map's view's projection is used.

+ + + + + + + + + + + + + + + + + + + + +
Source:
+
  • objectliterals.jsdoc, line 59
+ + + + + + + +
+ + + +
+ + + +
+

DragBoxOptions

+ + +
Stability: experimental
+ + + + +
+
+ + + +
+ + +
Properties:
+ +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
NameTypeDescription
condition + + +ol.events.ConditionType +| + +undefined + + + +

A conditional + modifier (i.e. Shift key) that determines if the interaction is active + or not, default is always.

style + + +ol.style.Style + + + +

Style for the box.

+ + + + + + + + + + + + + + + + + + + + +
Source:
+
  • objectliterals.jsdoc, line 67
+ + + + + + + +
+ + + +
+ + + +
+

DragPanOptions

+ + +
Stability: experimental
+ + + + +
+
+ + + +
+ + +
Properties:
+ +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
NameTypeDescription
kinetic + + +ol.Kinetic +| + +undefined + + + +

Kinetic inertia to apply to the pan.

condition + + +ol.events.ConditionType +| + +undefined + + + +

A conditional + modifier (i.e. Shift key) that determines if the interaction is active + or not, default is no modifiers.

+ + + + + + + + + + + + + + + + + + + + +
Source:
+
  • objectliterals.jsdoc, line 61
+ + + + + + + +
+ + + +
+ + + +
+

DragRotateAndZoomOptions

+ + +
Stability: experimental
+ + + + +
+
+ + + +
+ + +
Properties:
+ +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
NameTypeDescription
condition + + +ol.events.ConditionType +| + +undefined + + + +

A conditional + modifier (i.e. Shift key) that determines if the interaction is active + or not, default is shify key.

+ + + + + + + + + + + + + + + + + + + + +
Source:
+
  • objectliterals.jsdoc, line 65
+ + + + + + + +
+ + + +
+ + + +
+

DragRotateOptions

+ + +
Stability: experimental
+ + + + +
+
+ + + +
+ + +
Properties:
+ +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
NameTypeDescription
condition + + +ol.events.ConditionType +| + +undefined + + + +

A conditional + modifier (i.e. Shift key) that determines if the interaction is active + or not, default is both shift and alt keys.

+ + + + + + + + + + + + + + + + + + + + +
Source:
+
  • objectliterals.jsdoc, line 63
+ + + + + + + +
+ + + +
+ + + +
+

DragZoomOptions

+ + +
Stability: experimental
+ + + + +
+
+ + + +
+ + +
Properties:
+ +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
NameTypeDescription
condition + + +ol.events.ConditionType +| + +undefined + + + +

A conditional + modifier (i.e. Shift key) that determines if the interaction is active + or not, default is shift key.

style + + +ol.style.Style + + + +

Style for the box.

+ + + + + + + + + + + + + + + + + + + + +
Source:
+
  • objectliterals.jsdoc, line 69
+ + + + + + + +
+ + + +
+ + + +
+

DrawOptions

+ + +
Stability: experimental
+ + + + +
+
+ + + +
+ + +
Properties:
+ +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
NameTypeDescription
features + + +ol.Collection +| + +undefined + + + +

Destination collection for the drawn features.

source + + +ol.source.Vector +| + +undefined + + + +

Destination source for the drawn features.

snapTolerance + + +number +| + +undefined + + + +

Pixel distance for snapping to the + drawing finish (default is 12).

type + + +ol.geom.GeometryType + + + +

Drawing type ('Point', 'LineString', + 'Polygon', 'MultiPoint', 'MultiLineString', or 'MultiPolygon').

style + + +ol.style.Style +| + +Array.<ol.style.Style> +| + +ol.feature.StyleFunction +| + +undefined + + + +

Style for sketch features.

+ + + + + + + + + + + + + + + + + + + + +
Source:
+
  • objectliterals.jsdoc, line 73
+ + + + + + + +
+ + + +
+ + + +
+

KeyboardPanOptions

+ + +
Stability: experimental
+ + + + +
+
+ + + +
+ + +
Properties:
+ +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
NameTypeDescription
condition + + +ol.events.ConditionType +| + +undefined + + + +

A conditional + modifier (i.e. Shift key) that determines if the interaction is active + or not, default is no modifiers.

pixelDelta + + +number +| + +undefined + + + +

Pixel The amount to pan on each key + press. Default is 128 pixels.

+ + + + + + + + + + + + + + + + + + + + +
Source:
+
  • objectliterals.jsdoc, line 75
+ + + + + + + +
+ + + +
+ + + +
+

KeyboardZoomOptions

+ + +
Stability: experimental
+ + + + +
+
+ + + +
+ + +
Properties:
+ +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
NameTypeDescription
duration + + +number +| + +undefined + + + +

Animation duration in milliseconds. Default is 100.

condition + + +ol.events.ConditionType +| + +undefined + + + +

A conditional + modifier (i.e. Shift key) that determines if the interaction is active + or not, default is no modifiers.

delta + + +number +| + +undefined + + + +

The amount to zoom on each key press. Default is 1.

+ + + + + + + + + + + + + + + + + + + + +
Source:
+
  • objectliterals.jsdoc, line 77
+ + + + + + + +
+ + + +
+ + + +
+

ModifyOptions

+ + +
Stability: not documented
+ + + + +
+
+ + + +
+ + +
Properties:
+ +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
NameTypeDescription
pixelTolerance + + +number +| + +undefined + + + +

Pixel tolerance for considering + the pointer close enough to a vertex for editing. Default is 20 pixels.

style + + +ol.style.Style +| + +Array.<ol.style.Style> +| + +ol.feature.StyleFunction +| + +undefined + + + +

FeatureOverlay style.

features + + +ol.Collection + + + +

The features the interaction works on.

+ + + + + + + + + + + + + + + + + + + + +
Source:
+
  • objectliterals.jsdoc, line 85
+ + + + + + + +
+ + + +
+ + + +
+

MouseWheelZoomOptions

+ + +
Stability: experimental
+ + + + +
+
+ + + +
+ + +
Properties:
+ +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
NameTypeDescription
duration + + +number +| + +undefined + + + +

Animation duration in milliseconds. Default is 250.

+ + + + + + + + + + + + + + + + + + + + +
Source:
+
  • objectliterals.jsdoc, line 79
+ + + + + + + +
+ + + +
+ + + +
+

SelectOptions

+ + +
Stability: not documented
+ + + + +
+
+ + + +
+ + +
Properties:
+ +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
NameTypeDescription
addCondition + + +ol.events.ConditionType +| + +undefined + + + +

A conditional + modifier (e.g. shift key) that determines if the selection is added to + the current selection. By default, a shift-click adds to the current + selection.

condition + + +ol.events.ConditionType +| + +undefined + + + +

A conditional + modifier (e.g. shift key) that determines if the interaction is active + (i.e. selection occurs) or not. By default, a click with no modifier keys + toggles the selection.

layerFilter + + +function + + + +

Filter + function to restrict selection to a subset of layers.

layer + + +ol.layer.Layer +| + +undefined + + + +

Layer. The single layer from which + features should be selected.

layers + + +Array.<ol.layer.Layer> +| + +undefined + + + +

Layers. Zero or more + layers from which features should be selected.

style + + +ol.style.Style +| + +Array.<ol.style.Style> +| + +ol.feature.StyleFunction +| + +undefined + + + +

FeatureOverlay style.

+ + + + + + + + + + + + + + + + + + + + +
Source:
+
  • objectliterals.jsdoc, line 81
+ + + + + + + +
+ + + +
+ + + +
+

TouchPanOptions

+ + +
Stability: experimental
+ + + + +
+
+ + + +
+ + +
Properties:
+ +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
NameTypeDescription
kinetic + + +ol.Kinetic +| + +undefined + + + +

Kinetic inertia to apply to the + pan.

+ + + + + + + + + + + + + + + + + + + + +
Source:
+
  • objectliterals.jsdoc, line 83
+ + + + + + + +
+ + + +
+ + + +
+

TouchRotateOptions

+ + +
Stability: experimental
+ + + + +
+
+ + + +
+ + +
Properties:
+ +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
NameTypeDescription
threshold + + +number +| + +undefined + + + +

Minimal angle in radians to start a rotation. + Default is 0.3.

+ + + + + + + + + + + + + + + + + + + + +
Source:
+
  • objectliterals.jsdoc, line 87
+ + + + + + + +
+ + + +
+ + + +
+

TouchZoomOptions

+ + +
Stability: experimental
+ + + + +
+
+ + + +
+ + +
Properties:
+ +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
NameTypeDescription
duration + + +number +| + +undefined + + + +

Animation duration in milliseconds. Default is 400.

+ + + + + + + + + + + + + + + + + + + + +
Source:
+
  • objectliterals.jsdoc, line 89
+ + + + + + + +
+ + + +
+ +
+ + + +
+ +
+ + + + +
+ + + +
+ + + + + + \ No newline at end of file diff --git a/float-no-zero/apidoc/olx.layer.html b/float-no-zero/apidoc/olx.layer.html new file mode 100644 index 0000000000..033b4251ab --- /dev/null +++ b/float-no-zero/apidoc/olx.layer.html @@ -0,0 +1,1762 @@ + + + + + OpenLayers 3 API Documentation - Namespace: olx.layer + + + + + + + + + + + + + + + + +
+ + + + +
+ +
+

+ olx. + + olx.layer +

+ +
+ +
+
+ + + + + + +
+ + + + + + + + + + + + + + + + + + + +
Source:
+
  • olx.jsdoc, line 11
+ + + + + + + +
+ + + + +
+ + + + + + + + + + + + + + + + + + +

TypeDefs

+ +
+ +
+

BaseOptions

+ + +
Stability: experimental
+ + + + +
+
+ + + +
+ + +
Properties:
+ +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
NameTypeDescription
brightness + + +number +| + +undefined + + + +

Brightness. Default is 0.

contrast + + +number +| + +undefined + + + +

Contrast. Default is 1.

hue + + +number +| + +undefined + + + +

Hue. Default is 0.

opacity + + +number +| + +undefined + + + +

Opacity (0, 1). Default is 1.

saturation + + +number +| + +undefined + + + +

Saturation. Default is 1.

visible + + +boolean +| + +undefined + + + +

Visibility. Default is true.

minResolution + + +number +| + +undefined + + + +

The minimum resolution + (inclusive) at which this layer will be visible.

maxResolution + + +number +| + +undefined + + + +

The maximum resolution + (exclusive) below which this layer will be visible.

+ + + + + + + + + + + + + + + + + + + + +
Source:
+
  • objectliterals.jsdoc, line 91
+ + + + + + + +
+ + + +
+ + + +
+

GroupOptions

+ + +
Stability: experimental
+ + + + +
+
+ + + +
+ + +
Properties:
+ +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
NameTypeDescription
brightness + + +number +| + +undefined + + + +

Brightness. Default is 0.

contrast + + +number +| + +undefined + + + +

Contrast. Default is 1.

hue + + +number +| + +undefined + + + +

Hue. Default is 0.

opacity + + +number +| + +undefined + + + +

Opacity (0, 1). Default is 1.

saturation + + +number +| + +undefined + + + +

Saturation. Default is 1.

visible + + +boolean +| + +undefined + + + +

Visibility. Default is true.

minResolution + + +number +| + +undefined + + + +

The minimum resolution + (inclusive) at which this layer will be visible.

maxResolution + + +number +| + +undefined + + + +

The maximum resolution + (exclusive) below which this layer will be visible.

layers + + +Array.<ol.layer.Base> +| + +ol.Collection +| + +undefined + + + +

Child layers.

+ + + + + + + + + + + + + + + + + + + + +
Source:
+
  • objectliterals.jsdoc, line 95
+ + + + + + + +
+ + + +
+ + + +
+

LayerOptions

+ + +
Stability: experimental
+ + + + +
+
+ + + +
+ + +
Properties:
+ +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
NameTypeDescription
brightness + + +number +| + +undefined + + + +

Brightness. Default is 0.

contrast + + +number +| + +undefined + + + +

Contrast. Default is 1.

hue + + +number +| + +undefined + + + +

Hue. Default is 0.

opacity + + +number +| + +undefined + + + +

Opacity (0, 1). Default is 1.

saturation + + +number +| + +undefined + + + +

Saturation. Default is 1.

source + + +ol.source.Source + + + +

Source for this layer.

visible + + +boolean +| + +undefined + + + +

Visibility. Default is true (visible).

minResolution + + +number +| + +undefined + + + +

The minimum resolution + (inclusive) at which this layer will be visible.

maxResolution + + +number +| + +undefined + + + +

The maximum resolution + (exclusive) below which this layer will be visible.

+ + + + + + + + + + + + + + + + + + + + +
Source:
+
  • objectliterals.jsdoc, line 93
+ + + + + + + +
+ + + +
+ + + +
+

TileOptions

+ + +
Stability: experimental
+ + + + +
+
+ + + +
+ + +
Properties:
+ +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
NameTypeDescription
brightness + + +number +| + +undefined + + + +

Brightness. Default is 0.

contrast + + +number +| + +undefined + + + +

Contrast. Default is 1.

hue + + +number +| + +undefined + + + +

Hue. Default is 0.

opacity + + +number +| + +undefined + + + +

Opacity (0, 1). Default is 1.

preload + + +number +| + +undefined + + + +

Preload.

saturation + + +number +| + +undefined + + + +

Saturation. Default is 1.

source + + +ol.source.Source + + + +

Source for this layer.

visible + + +boolean +| + +undefined + + + +

Visibility. Default is true (visible).

minResolution + + +number +| + +undefined + + + +

The minimum resolution + (inclusive) at which this layer will be visible.

maxResolution + + +number +| + +undefined + + + +

The maximum resolution + (exclusive) below which this layer will be visible.

useInterimTilesOnError + + +boolean +| + +undefined + + + +

Use interim tiles on + error. Default is true.

+ + + + + + + + + + + + + + + + + + + + +
Source:
+
  • objectliterals.jsdoc, line 97
+ + + + + + + +
+ + + +
+ + + +
+

VectorOptions

+ + +
Stability: experimental
+ + + + +
+
+ + + +
+ + +
Properties:
+ +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
NameTypeDescription
brightness + + +number +| + +undefined + + + +

Brightness.

contrast + + +number +| + +undefined + + + +

Contrast.

hue + + +number +| + +undefined + + + +

Hue.

minResolution + + +number +| + +undefined + + + +

The minimum resolution + (inclusive) at which this layer will be visible.

maxResolution + + +number +| + +undefined + + + +

The maximum resolution + (exclusive) below which this layer will be visible.

opacity + + +number +| + +undefined + + + +

Opacity. 0-1. Default is 1.

saturation + + +number +| + +undefined + + + +

Saturation.

source + + +ol.source.Vector + + + +

Source.

style + + +ol.style.Style +| + +Array.<ol.style.Style> +| + +ol.feature.StyleFunction +| + +undefined + + + +

Layer style.

visible + + +boolean +| + +undefined + + + +

Visibility. Default is true (visible).

+ + + + + + + + + + + + + + + + + + + + +
Source:
+
  • objectliterals.jsdoc, line 99
+ + + + + + + +
+ + + +
+ +
+ + + +
+ +
+ + + + +
+ + + +
+ + + + + + \ No newline at end of file diff --git a/float-no-zero/apidoc/olx.parser.html b/float-no-zero/apidoc/olx.parser.html new file mode 100644 index 0000000000..572b1b43e4 --- /dev/null +++ b/float-no-zero/apidoc/olx.parser.html @@ -0,0 +1,130 @@ + + + + + OpenLayers 3 API Documentation - Namespace: olx.parser + + + + + + + + + + + + + + + + +
+ + + + +
+ +
+

+ olx. + + olx.parser +

+ +
+ +
+
+ + + + + + +
+ + + + + + + + + + + + + + + + + + + +
Source:
+
  • olx.jsdoc, line 13
+ + + + + + + +
+ + + + +
+ + + + + + + + + + + + + + + + + + + + +
+ +
+ + + + +
+ + + +
+ + + + + + \ No newline at end of file diff --git a/float-no-zero/apidoc/olx.render.html b/float-no-zero/apidoc/olx.render.html new file mode 100644 index 0000000000..3b08279f35 --- /dev/null +++ b/float-no-zero/apidoc/olx.render.html @@ -0,0 +1,130 @@ + + + + + OpenLayers 3 API Documentation - Namespace: olx.render + + + + + + + + + + + + + + + + +
+ + + + +
+ +
+

+ olx. + + olx.render +

+ +
+ +
+
+ + + + + + +
+ + + + + + + + + + + + + + + + + + + +
Source:
+
  • olx.jsdoc, line 15
+ + + + + + + +
+ + + + +
+ + + + + + + + + + + + + + + + + + + + +
+ +
+ + + + +
+ + + +
+ + + + + + \ No newline at end of file diff --git a/float-no-zero/apidoc/olx.source.html b/float-no-zero/apidoc/olx.source.html new file mode 100644 index 0000000000..3a283c5222 --- /dev/null +++ b/float-no-zero/apidoc/olx.source.html @@ -0,0 +1,6786 @@ + + + + + OpenLayers 3 API Documentation - Namespace: olx.source + + + + + + + + + + + + + + + + +
+ + + + +
+ +
+

+ olx. + + olx.source +

+ +
+ +
+
+ + + + + + +
+ + + + + + + + + + + + + + + + + + + +
Source:
+
  • olx.jsdoc, line 17
+ + + + + + + +
+ + + + +
+ + + + + + + + + + + + + + + + + + +

TypeDefs

+ +
+ +
+

BingMapsOptions

+ + +
Stability: experimental
+ + + + +
+
+ + + +
+ + +
Properties:
+ +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
NameTypeDescription
culture + + +string +| + +undefined + + + +

Culture code. Default is en-us.

key + + +string + + + +

Bing Maps API key. Get yours at + http://bingmapsportal.com/.

imagerySet + + +string + + + +

Type of imagery.

tileLoadFunction + + +ol.TileLoadFunctionType +| + +undefined + + + +

Optional + function to load a tile given a URL.

+ + + + + + + + + + + + + + + + + + + + +
Source:
+
  • objectliterals.jsdoc, line 103
+ + + + + + + +
+ + + +
+ + + +
+

GeoJSONOptions

+ + +
Stability: not documented
+ + + + +
+
+ + + +
+ + +
Properties:
+ +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
NameTypeDescription
attributions + + +Array.<ol.Attribution> +| + +undefined + + + +

Attributions.

defaultProjection + + +ol.proj.ProjectionLike + + + +

Default projection.

extent + + +ol.Extent +| + +undefined + + + +

Extent.

logo + + +string +| + +undefined + + + +

Logo.

object + + +GeoJSONObject +| + +undefined + + + +

Object.

projection + + +ol.proj.ProjectionLike + + + +

Destination projection. If + provided, features will be transformed to this projection. If not + provided, features will not be transformed.

text + + +string +| + +undefined + + + +

Text.

url + + +string +| + +undefined + + + +

URL.

urls + + +Array.<string> +| + +undefined + + + +

URLs.

+ + + + + + + + + + + + + + + + + + + + +
Source:
+
  • objectliterals.jsdoc, line 105
+ + + + + + + +
+ + + +
+ + + +
+

GPXOptions

+ + +
Stability: not documented
+ + + + +
+
+ + + +
+ + +
Properties:
+ +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
NameTypeDescription
attributions + + +Array.<ol.Attribution> +| + +undefined + + + +

Attributions.

doc + + +Document +| + +undefined + + + +

Document.

extent + + +ol.Extent +| + +undefined + + + +

Extent.

logo + + +string +| + +undefined + + + +

Logo.

node + + +Node +| + +undefined + + + +

Node.

projection + + +ol.proj.ProjectionLike + + + +

Destination projection. If + provided, features will be transformed to this projection. If not + provided, features will not be transformed.

text + + +string +| + +undefined + + + +

Text.

url + + +string +| + +undefined + + + +

URL.

urls + + +Array.<string> +| + +undefined + + + +

URLs.

+ + + + + + + + + + + + + + + + + + + + +
Source:
+
  • objectliterals.jsdoc, line 107
+ + + + + + + +
+ + + +
+ + + +
+

IGCOptions

+ + +
Stability: not documented
+ + + + +
+
+ + + +
+ + +
Properties:
+ +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
NameTypeDescription
altitudeMode + + +ol.format.IGCZ +| + +undefined + + + +

Altitude mode. + Possible values are barometric, gps, and none. Default is none.

projection + + +ol.proj.ProjectionLike + + + +

Destination projection. If + provided, features will be transformed to this projection. If not + provided, features will not be transformed.

text + + +string +| + +undefined + + + +

Text.

url + + +string +| + +undefined + + + +

URL.

urls + + +Array.<string> +| + +undefined + + + +

URLs.

+ + + + + + + + + + + + + + + + + + + + +
Source:
+
  • objectliterals.jsdoc, line 111
+ + + + + + + +
+ + + +
+ + + +
+

ImageCanvasOptions

+ + +
Stability: not documented
+ + + + +
+
+ + + +
+ + +
Properties:
+ +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
NameTypeDescription
attributions + + +Array.<ol.Attribution> +| + +undefined + + + +

Attributions.

canvasFunction + + +ol.CanvasFunctionType + + + +

Canvas function. The function + returning the canvas element used by the source as an image. The arguments + passed to the function are: {ol.Extent} the image extent, {number} the + image resolution, {number} the device pixel ratio, {ol.Size} the image + size, and {ol.proj.Projection} the image projection. The canvas returned + by this function is cached by the source. If the value returned by the + function is later changed then dispatchChangeEvent should be called on + the source for the source to invalidate the current cached image.

extent + + +ol.Extent +| + +undefined + + + +

Extent.

logo + + +string +| + +undefined + + + +

Logo.

projection + + +ol.proj.ProjectionLike + + + +

Projection.

ratio + + +number +| + +undefined + + + +

Ratio. 1 means canvases are the size + of the map viewport, 2 means twice the size of the map viewport, and so + on. Default is 1.5.

resolutions + + +Array.<number> +| + +undefined + + + +

Resolutions. If specified, + new canvases will be created for these resolutions only.

state + + +ol.source.State +| + +string +| + +undefined + + + +

Source state.

+ + + + + + + + + + + + + + + + + + + + +
Source:
+
  • objectliterals.jsdoc, line 125
+ + + + + + + +
+ + + +
+ + + +
+

ImageStaticOptions

+ + +
Stability: not documented
+ + + + +
+
+ + + +
+ + +
Properties:
+ +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
NameTypeDescription
attributions + + +Array.<ol.Attribution> +| + +undefined + + + +

Attributions.

crossOrigin + + +null +| + +string +| + +undefined + + + +

crossOrigin setting for image + requests.

extent + + +ol.Extent +| + +undefined + + + +

Extent.

imageExtent + + +ol.Extent +| + +undefined + + + +

Extent of the image.

imageSize + + +ol.Size +| + +undefined + + + +

Size of the image.

logo + + +string +| + +undefined + + + +

Logo.

projection + + +ol.proj.ProjectionLike + + + +

Projection.

url + + +string + + + +

Url.

+ + + + + + + + + + + + + + + + + + + + +
Source:
+
  • objectliterals.jsdoc, line 133
+ + + + + + + +
+ + + +
+ + + +
+

ImageVectorOptions

+ + +
Stability: not documented
+ + + + +
+
+ + + +
+ + +
Properties:
+ +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
NameTypeDescription
attributions + + +Array.<ol.Attribution> +| + +undefined + + + +

Attributions.

extent + + +ol.Extent +| + +undefined + + + +

Extent.

logo + + +string +| + +undefined + + + +

Logo.

projection + + +ol.proj.ProjectionLike + + + +

Projection.

ratio + + +number +| + +undefined + + + +

Ratio. 1 means canvases are the size + of the map viewport, 2 means twice the size of the map viewport, and so + on. Default is 1.5.

resolutions + + +Array.<number> +| + +undefined + + + +

Resolutions. If specified, + new canvases will be created for these resolutions only.

source + + +ol.source.Vector + + + +

The vector source from which the vector + features drawn in canvas elements are read.

style + + +ol.style.Style +| + +Array.<ol.style.Style> +| + +ol.feature.StyleFunction +| + +undefined + + + +

Style to use when rendering features to the canvas.

+ + + + + + + + + + + + + + + + + + + + +
Source:
+
  • objectliterals.jsdoc, line 127
+ + + + + + + +
+ + + +
+ + + +
+

ImageWMSOptions

+ + +
Stability: experimental
+ + + + +
+
+ + + +
+ + +
Properties:
+ +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
NameTypeDescription
attributions + + +Array.<ol.Attribution> +| + +undefined + + + +

Attributions.

crossOrigin + + +null +| + +string +| + +undefined + + + +

crossOrigin setting for image + requests.

extent + + +ol.Extent +| + +undefined + + + +

Extent.

hidpi + + +boolean +| + +undefined + + + +

Use the ol.Map#pixelRatio value when + requesting the image from the remote server. Default is true.

serverType + + +ol.source.wms.ServerType +| + +string +| + +undefined + + + +

The type of the remote WMS + server: mapserver, geoserver or qgis. Only needed if hidpi is true. + Default is undefined.

logo + + +string +| + +undefined + + + +

Logo.

params + + +Object.<string, *> + + + +

WMS request parameters. At least a + LAYERS param is required. STYLES is ` by default.VERSIONis1.3.0by default.WIDTH,HEIGHT,BBOXandCRS(SRS` for WMS + version < 1.3.0) will be set dynamically.

projection + + +ol.proj.ProjectionLike + + + +

Projection.

ratio + + +number +| + +undefined + + + +

Ratio. 1 means image requests are the size + of the map viewport, 2 means twice the size of the map viewport, and so + on. Default is 1.5.

resolutions + + +Array.<number> +| + +undefined + + + +

Resolutions. If specified, + requests will be made for these resolutions only.

url + + +string +| + +undefined + + + +

WMS service URL.

+ + + + + + + + + + + + + + + + + + + + +
Source:
+
  • objectliterals.jsdoc, line 129
+ + + + + + + +
+ + + +
+ + + +
+

KMLOptions

+ + +
Stability: not documented
+ + + + +
+
+ + + +
+ + +
Properties:
+ +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
NameTypeDescription
attributions + + +Array.<ol.Attribution> +| + +undefined + + + +

Attributions.

defaultStyle + + +Array.<ol.style.Style> +| + +undefined + + + +

Default style.

doc + + +Document +| + +undefined + + + +

Document.

extent + + +ol.Extent +| + +undefined + + + +

Extent.

logo + + +string +| + +undefined + + + +

Logo.

node + + +Node +| + +undefined + + + +

Node.

projection + + +ol.proj.ProjectionLike + + + +

Destination projection. If + provided, features will be transformed to this projection. If not + provided, features will not be transformed.

text + + +string +| + +undefined + + + +

Text.

url + + +string +| + +undefined + + + +

URL.

urls + + +Array.<string> +| + +undefined + + + +

URLs.

+ + + + + + + + + + + + + + + + + + + + +
Source:
+
  • objectliterals.jsdoc, line 115
+ + + + + + + +
+ + + +
+ + + +
+

MapGuideOptions

+ + +
Stability: not documented
+ + + + +
+
+ + + +
+ + +
Properties:
+ +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
NameTypeDescription
url + + +string +| + +undefined + + + +

The mapagent url.

displayDpi + + +number +| + +undefined + + + +

The display resolution. Default is 96.

metersPerUnit + + +number +| + +undefined + + + +

The meters-per-unit value. Default is 1.

extent + + +ol.Extent +| + +undefined + + + +

Extent.

hidpi + + +boolean +| + +undefined + + + +

Use the ol.Map#pixelRatio value when + requesting the image from the remote server. Default is true.

useOverlay + + +boolean +| + +undefined + + + +

If true, will use + GETDYNAMICMAPOVERLAYIMAGE.

projection + + +ol.proj.ProjectionLike + + + +

Projection.

ratio + + +number +| + +undefined + + + +

Ratio. 1 means image requests are the size + of the map viewport, 2 means twice the size of the map viewport, and so + on. Default is 1.

resolutions + + +Array.<number> +| + +undefined + + + +

Resolutions. If specified, + requests will be made for these resolutions only.

params + + +Object +| + +undefined + + + +

Additional parameters.

+ + + + + + + + + + + + + + + + + + + + +
Source:
+
  • objectliterals.jsdoc, line 113
+ + + + + + + +
+ + + +
+ + + +
+

MapQuestOptions

+ + +
Stability: experimental
+ + + + +
+
+ + + +
+ + +
Properties:
+ +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
NameTypeDescription
layer + + +string + + + +

Layer.

tileLoadFunction + + +ol.TileLoadFunctionType +| + +undefined + + + +

Optional + function to load a tile given a URL.

+ + + + + + + + + + + + + + + + + + + + +
Source:
+
  • objectliterals.jsdoc, line 117
+ + + + + + + +
+ + + +
+ + + +
+

OSMOptions

+ + +
Stability: experimental
+ + + + +
+
+ + + +
+ + +
Properties:
+ +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
NameTypeDescription
attributions + + +Array.<ol.Attribution> +| + +undefined + + + +

Attributions.

crossOrigin + + +null +| + +string +| + +undefined + + + +

crossOrigin setting for image + requests. Default is anonymous.

maxZoom + + +number +| + +undefined + + + +

Max zoom.

tileLoadFunction + + +ol.TileLoadFunctionType +| + +undefined + + + +

Optional + function to load a tile given a URL.

url + + +string +| + +undefined + + + +

URL template. Must include {x}, {y}, + and {z} placeholders. Default is + //{a-c}.tile.openstreetmap.org/{z}/{x}/{y}.png.

+ + + + + + + + + + + + + + + + + + + + +
Source:
+
  • objectliterals.jsdoc, line 121
+ + + + + + + +
+ + + +
+ + + +
+

OSMXMLOptions

+ + +
Stability: not documented
+ + + + +
+
+ + + +
+ + +
Properties:
+ +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
NameTypeDescription
attributions + + +Array.<ol.Attribution> +| + +undefined + + + +

Attributions.

defaultStyle + + +Array.<ol.style.Style> +| + +undefined + + + +

Default style.

doc + + +Document +| + +undefined + + + +

Document.

extent + + +ol.Extent +| + +undefined + + + +

Extent.

logo + + +string +| + +undefined + + + +

Logo.

{Node|undefined| + +

node Node.

projection + + +ol.proj.ProjectionLike + + + +

Projection.

reprojectTo + + +ol.proj.ProjectionLike + + + +

Re-project to.

text + + +string +| + +undefined + + + +

Text.

url + + +string +| + +undefined + + + +

URL.

urls + + +Array.<string> +| + +undefined + + + +

URLs.

+ + + + + + + + + + + + + + + + + + + + +
Source:
+
  • objectliterals.jsdoc, line 123
+ + + + + + + +
+ + + +
+ + + +
+

StamenOptions

+ + +
Stability: experimental
+ + + + +
+
+ + + +
+ + +
Properties:
+ +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
NameTypeDescription
layer + + +string + + + +

Layer.

minZoom + + +number +| + +undefined + + + +

Minimum zoom.

maxZoom + + +number +| + +undefined + + + +

Maximum zoom.

opaque + + +boolean +| + +undefined + + + +

Whether the layer is opaque.

tileLoadFunction + + +ol.TileLoadFunctionType +| + +undefined + + + +

Optional + function to load a tile given a URL.

url + + +string +| + +undefined + + + +

URL template. Must include {x}, {y}, + and {z} placeholders.

+ + + + + + + + + + + + + + + + + + + + +
Source:
+
  • objectliterals.jsdoc, line 131
+ + + + + + + +
+ + + +
+ + + +
+

TileDebugOptions

+ + +
Stability: experimental
+ + + + +
+
+ + + +
+ + +
Properties:
+ +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
NameTypeDescription
extent + + +ol.Extent +| + +undefined + + + +

Extent.

projection + + +ol.proj.ProjectionLike + + + +

Projection.

tileGrid + + +ol.tilegrid.TileGrid +| + +undefined + + + +

Tile grid.

+ + + + + + + + + + + + + + + + + + + + +
Source:
+
  • objectliterals.jsdoc, line 119
+ + + + + + + +
+ + + +
+ + + +
+

TileJSONOptions

+ + +
Stability: experimental
+ + + + +
+
+ + + +
+ + +
Properties:
+ +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
NameTypeDescription
crossOrigin + + +null +| + +string +| + +undefined + + + +

crossOrigin setting for image + requests.

tileLoadFunction + + +ol.TileLoadFunctionType +| + +undefined + + + +

Optional + function to load a tile given a URL.

url + + +string + + + +

URL to the TileJSON file.

+ + + + + + + + + + + + + + + + + + + + +
Source:
+
  • objectliterals.jsdoc, line 135
+ + + + + + + +
+ + + +
+ + + +
+

TileWMSOptions

+ + +
Stability: experimental
+ + + + +
+
+ + + +
+ + +
Properties:
+ +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
NameTypeDescription
attributions + + +Array.<ol.Attribution> +| + +undefined + + + +

Attributions.

params + + +Object.<string, *> + + + +

WMS request parameters. At least a + LAYERS param is required. STYLES is ` by default.VERSIONis1.3.0by default.WIDTH,HEIGHT,BBOXandCRS(SRS` for WMS + version < 1.3.0) will be set dynamically.

crossOrigin + + +null +| + +string +| + +undefined + + + +

crossOrigin setting for image + requests.

extent + + +ol.Extent +| + +undefined + + + +

Extent.

gutter + + +number +| + +undefined + + + +

The size in pixels of the + gutter around image tiles to ignore. By setting this property to a + non-zero value, images will be requested that are wider and taller than + the tile size by a value of 2 x gutter. Defaults to zero. Using a + non-zero value allows artifacts of rendering at tile edges to be ignored. If + you control the WMS service it is recommended to address "artifacts at tile + edges" issues by properly configuring the WMS service. For example, MapServer + has a tile_map_edge_buffer configuration parameter for this. See + http://mapserver.org/output/tile_mode.html.

hidpi + + +boolean +| + +undefined + + + +

Use the ol.Map#pixelRatio value when + requesting the image from the remote server. Default is true.

logo + + +string +| + +undefined + + + +

Logo.

tileGrid + + +ol.tilegrid.TileGrid +| + +undefined + + + +

Tile grid.

maxZoom + + +number +| + +undefined + + + +

Maximum zoom.

projection + + +ol.proj.ProjectionLike + + + +

Projection.

serverType + + +ol.source.wms.ServerType +| + +string +| + +undefined + + + +

The type of the remote WMS + server: mapserver, geoserver or qgis. Only needed if hidpi is true. + Default is undefined.

tileLoadFunction + + +ol.TileLoadFunctionType +| + +undefined + + + +

Optional + function to load a tile given a URL.

url + + +string +| + +undefined + + + +

WMS service URL.

urls + + +Array.<string> +| + +undefined + + + +

WMS service urls. Use this instead + of url when the WMS supports multiple urls for GetMap requests.

+ + + + + + + + + + + + + + + + + + + + +
Source:
+
  • objectliterals.jsdoc, line 137
+ + + + + + + +
+ + + +
+ + + +
+

TopoJSONOptions

+ + +
Stability: not documented
+ + + + +
+
+ + + +
+ + +
Properties:
+ +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
NameTypeDescription
attributions + + +Array.<ol.Attribution> +| + +undefined + + + +

Attributions.

defaultProjection + + +ol.proj.ProjectionLike + + + +

Default projection.

extent + + +ol.Extent +| + +undefined + + + +

Extent.

logo + + +string +| + +undefined + + + +

Logo.

object + + +GeoJSONObject +| + +undefined + + + +

Object.

projection + + +ol.proj.ProjectionLike + + + +

Destination projection. If + provided, features will be transformed to this projection. If not + provided, features will not be transformed.

text + + +string +| + +undefined + + + +

Text.

url + + +string +| + +undefined + + + +

URL.

+ + + + + + + + + + + + + + + + + + + + +
Source:
+
  • objectliterals.jsdoc, line 109
+ + + + + + + +
+ + + +
+ + + +
+

VectorFileOptions

+ + +
Stability: not documented
+ + + + +
+
+ + + +
+ + +
Properties:
+ +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
NameTypeDescription
arrayBuffer + + +ArrayBuffer +| + +undefined + + + +

Array buffer.

attributions + + +Array.<ol.Attribution> +| + +undefined + + + +

Attributions.

doc + + +Document +| + +undefined + + + +

Document.

extent + + +ol.Extent +| + +undefined + + + +

Extent.

format + + +ol.format.Feature + + + +

Format.

logo + + +string +| + +undefined + + + +

Logo.

node + + +Node +| + +undefined + + + +

Node.

object + + +Object +| + +undefined + + + +

Object.

projection + + +ol.proj.ProjectionLike + + + +

Projection.

text + + +string +| + +undefined + + + +

Text.

url + + +string +| + +undefined + + + +

URL.

urls + + +Array.<string> +| + +undefined + + + +

URLs.

+ + + + + + + + + + + + + + + + + + + + +
Source:
+
  • objectliterals.jsdoc, line 141
+ + + + + + + +
+ + + +
+ + + +
+

VectorOptions

+ + +
Stability: not documented
+ + + + +
+
+ + + +
+ + +
Properties:
+ +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
NameTypeDescription
attributions + + +Array.<ol.Attribution> +| + +undefined + + + +

Attributions.

extent + + +ol.Extent +| + +undefined + + + +

Extent.

features + + +Array.<ol.Feature> +| + +undefined + + + +

Features.

logo + + +string +| + +undefined + + + +

Logo.

projection + + +ol.proj.ProjectionLike + + + +

Projection.

state + + +ol.source.State +| + +string +| + +undefined + + + +

State.

+ + + + + + + + + + + + + + + + + + + + +
Source:
+
  • objectliterals.jsdoc, line 139
+ + + + + + + +
+ + + +
+ + + +
+

WMTSOptions

+ + +
Stability: experimental
+ + + + +
+
+ + + +
+ + +
Properties:
+ +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
NameTypeDescription
attributions + + +Array.<ol.Attribution> +| + +undefined + + + +

Attributions.

crossOrigin + + +string +| + +null +| + +undefined + + + +

crossOrigin setting for image + requests.

extent + + +ol.Extent +| + +undefined + + + +

Extent.

logo + + +string +| + +undefined + + + +

Logo.

tileGrid + + +ol.tilegrid.WMTS + + + +

Tile grid.

projection + + +ol.proj.ProjectionLike + + + +

Projection.

requestEncoding + + +ol.source.WMTSRequestEncoding +| + +undefined + + + +

Request + encoding.

layer + + +string + + + +

Layer.

style + + +string + + + +

Style.

version + + +string +| + +undefined + + + +

WMTS version. Default to 1.0.0.

format + + +string +| + +undefined + + + +

Format.

matrixSet + + +string + + + +

Matrix set.

dimensions + + +Object +| + +undefined + + + +

Dimensions.

url + + +string +| + +undefined + + + +

URL.

maxZoom + + +number +| + +undefined + + + +

Maximum zoom.

tileLoadFunction + + +ol.TileLoadFunctionType +| + +undefined + + + +

Optional + function to load a tile given a URL.

urls + + +Array.<string> +| + +undefined + + + +

Urls.

+ + + + + + + + + + + + + + + + + + + + +
Source:
+
  • objectliterals.jsdoc, line 143
+ + + + + + + +
+ + + +
+ + + +
+

XYZOptions

+ + +
Stability: experimental
+ + + + +
+
+ + + +
+ + +
Properties:
+ +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
NameTypeDescription
attributions + + +Array.<ol.Attribution> +| + +undefined + + + +

Attributions.

crossOrigin + + +null +| + +string +| + +undefined + + + +

Cross origin setting for image + requests.

extent + + +ol.Extent +| + +undefined + + + +

Extent.

logo + + +string +| + +undefined + + + +

Logo.

projection + + +ol.proj.ProjectionLike + + + +

Projection. Default is EPSG:3857.

maxZoom + + +number +| + +undefined + + + +

Optional max zoom level. Default is 18.

minZoom + + +number +| + +undefined + + + +

Unsupported (TODO: remove this).

tileLoadFunction + + +ol.TileLoadFunctionType +| + +undefined + + + +

Optional + function to load a tile given a URL.

tileUrlFunction + + +ol.TileUrlFunctionType +| + +undefined + + + +

Optional + function to get tile URL given a tile coordinate and the projection. + Required if url or urls are not provided.

url + + +string +| + +undefined + + + +

URL template. Must include {x}, {y}, + and {z} placeholders.

urls + + +Array.<string> +| + +undefined + + + +

An array of URL templates.

+ + + + + + + + + + + + + + + + + + + + +
Source:
+
  • objectliterals.jsdoc, line 145
+ + + + + + + +
+ + + +
+ + + +
+

ZoomifyOptions

+ + +
Stability: experimental
+ + + + +
+
+ + + +
+ + +
Properties:
+ +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
NameTypeDescription
attributions + + +Array.<ol.Attribution> +| + +undefined + + + +

Attributions.

crossOrigin + + +null +| + +string +| + +undefined + + + +

Cross origin setting for image + requests.

logo + + +string +| + +undefined + + + +

Logo.

url + + +string + + + +

Prefix of URL template.

tierSizeCalculation + + +string +| + +undefined + + + +

Tier size calculation method: default or truncated.

size + + +ol.Size + + + +

Size of the image.

+ + + + + + + + + + + + + + + + + + + + +
Source:
+
  • objectliterals.jsdoc, line 147
+ + + + + + + +
+ + + +
+ +
+ + + +
+ +
+ + + + +
+ + + +
+ + + + + + \ No newline at end of file diff --git a/float-no-zero/apidoc/olx.style.html b/float-no-zero/apidoc/olx.style.html new file mode 100644 index 0000000000..c1adfe7583 --- /dev/null +++ b/float-no-zero/apidoc/olx.style.html @@ -0,0 +1,1476 @@ + + + + + OpenLayers 3 API Documentation - Namespace: olx.style + + + + + + + + + + + + + + + + +
+ + + + +
+ +
+

+ olx. + + olx.style +

+ +
+ +
+
+ + + + + + +
+ + + + + + + + + + + + + + + + + + + +
Source:
+
  • olx.jsdoc, line 19
+ + + + + + + +
+ + + + +
+ + + + + + + + + + + + + + + + + + +

TypeDefs

+ +
+ +
+

CircleOptions

+ + +
Stability: not documented
+ + + + +
+
+ + + +
+ + +
Properties:
+ +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
NameTypeDescription
fill + + +ol.style.Fill +| + +undefined + + + +

Fill style.

radius + + +number + + + +

Circle radius.

stroke + + +ol.style.Stroke +| + +undefined + + + +

Stroke style.

+ + + + + + + + + + + + + + + + + + + + +
Source:
+
  • objectliterals.jsdoc, line 149
+ + + + + + + +
+ + + +
+ + + +
+

FillOptions

+ + +
Stability: experimental
+ + + + +
+
+ + + +
+ + +
Properties:
+ +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
NameTypeDescription
color + + +ol.Color +| + +string +| + +undefined + + + +

Color.

+ + + + + + + + + + + + + + + + + + + + +
Source:
+
  • objectliterals.jsdoc, line 151
+ + + + + + + +
+ + + +
+ + + +
+

IconOptions

+ + +
Stability: not documented
+ + + + +
+
+ + + +
+ + +
Properties:
+ +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
NameTypeDescription
anchor + + +Array.<number> +| + +undefined + + + +

Anchor. Default value is [0.5, 0.5] + (icon center).

anchorOrigin + + +ol.style.IconAnchorOrigin +| + +undefined + + + +

Origin of the anchor: bottom-left, bottom-right, top-left or top-right. Default is top-left.

anchorXUnits + + +ol.style.IconAnchorUnits +| + +undefined + + + +

Units in which the anchor x value is specified. + A value of 'fraction' indicates the x value is a fraction of the icon. + A value of 'pixels' indicates the x value in pixels. Default is + 'fraction'.

anchorYUnits + + +ol.style.IconAnchorUnits +| + +undefined + + + +

Units in which the anchor y value is specified. + A value of 'fraction' indicates the y value is a fraction of the icon. + A value of 'pixels' indicates the y value in pixels. Default is + 'fraction'.

crossOrigin + + +null +| + +string +| + +undefined + + + +

crossOrigin setting for image.

scale + + +number +| + +undefined + + + +

Scale.

rotateWithView + + +boolean +| + +undefined + + + +

Whether to rotate the icon with the view. Default is false.

rotation + + +number +| + +undefined + + + +

Rotation.

size + + +ol.Size +| + +undefined + + + +

Icon size in pixel.

src + + +string + + + +

Image source URI.

+ + + + + + + + + + + + + + + + + + + + +
Source:
+
  • objectliterals.jsdoc, line 153
+ + + + + + + +
+ + + +
+ + + +
+

StrokeOptions

+ + +
Stability: experimental
+ + + + +
+
+ + + +
+ + +
Properties:
+ +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
NameTypeDescription
color + + +ol.Color +| + +string +| + +undefined + + + +

Color.

lineCap + + +string +| + +undefined + + + +

Line cap style: butt, round, or square. Default is round.

lineJoin + + +string +| + +undefined + + + +

Line join style: bevel, round, or miter. Default is round.

lineDash + + +Array.<number> +| + +undefined + + + +

Line dash pattern. Default is undefined (no dash).

miterLimit + + +number +| + +undefined + + + +

Miter limit. Default is 10.

width + + +number +| + +undefined + + + +

Width.

+ + + + + + + + + + + + + + + + + + + + +
Source:
+
  • objectliterals.jsdoc, line 155
+ + + + + + + +
+ + + +
+ + + +
+

StyleOptions

+ + +
Stability: experimental
+ + + + +
+
+ + + +
+ + +
Properties:
+ +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
NameTypeDescription
fill + + +ol.style.Fill +| + +undefined + + + +

Fill style.

image + + +ol.style.Image +| + +undefined + + + +

Image style.

stroke + + +ol.style.Stroke +| + +undefined + + + +

Stroke style.

text + + +ol.style.Text +| + +undefined + + + +

Text style.

zIndex + + +number +| + +undefined + + + +

Z index.

+ + + + + + + + + + + + + + + + + + + + +
Source:
+
  • objectliterals.jsdoc, line 159
+ + + + + + + +
+ + + +
+ + + +
+

TextOptions

+ + +
Stability: experimental
+ + + + +
+
+ + + +
+ + +
Properties:
+ +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
NameTypeDescription
font + + +string +| + +undefined + + + +

Font.

scale + + +number +| + +undefined + + + +

Scale.

rotation + + +number +| + +undefined + + + +

Rotation.

text + + +string +| + +undefined + + + +

Text.

textAlign + + +string +| + +undefined + + + +

Text alignment.

textBaseline + + +string +| + +undefined + + + +

Text base line.

fill + + +ol.style.Fill +| + +undefined + + + +

Fill style.

stroke + + +ol.style.Stroke +| + +undefined + + + +

Stroke style.

+ + + + + + + + + + + + + + + + + + + + +
Source:
+
  • objectliterals.jsdoc, line 157
+ + + + + + + +
+ + + +
+ +
+ + + +
+ +
+ + + + +
+ + + +
+ + + + + + \ No newline at end of file diff --git a/float-no-zero/apidoc/olx.tilegrid.html b/float-no-zero/apidoc/olx.tilegrid.html new file mode 100644 index 0000000000..d1db9bcaba --- /dev/null +++ b/float-no-zero/apidoc/olx.tilegrid.html @@ -0,0 +1,799 @@ + + + + + OpenLayers 3 API Documentation - Namespace: olx.tilegrid + + + + + + + + + + + + + + + + +
+ + + + +
+ +
+

+ olx. + + olx.tilegrid +

+ +
+ +
+
+ + + + + + +
+ + + + + + + + + + + + + + + + + + + +
Source:
+
  • olx.jsdoc, line 21
+ + + + + + + +
+ + + + +
+ + + + + + + + + + + + + + + + + + +

TypeDefs

+ +
+ +
+

TileGridOptions

+ + +
Stability: experimental
+ + + + +
+
+ + + +
+ + +
Properties:
+ +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
NameTypeDescription
minZoom + + +number +| + +undefined + + + +

Minimum zoom.

origin + + +ol.Coordinate +| + +undefined + + + +

Origin.

origins + + +Array.<ol.Coordinate> +| + +undefined + + + +

Origins.

resolutions + + +!Array.<number> + + + +

Resolutions.

tileSize + + +number +| + +undefined + + + +

Tile size.

tileSizes + + +Array.<number> +| + +undefined + + + +

Tile sizes.

+ + + + + + + + + + + + + + + + + + + + +
Source:
+
  • objectliterals.jsdoc, line 161
+ + + + + + + +
+ + + +
+ + + +
+

WMTSOptions

+ + +
Stability: experimental
+ + + + +
+
+ + + +
+ + +
Properties:
+ +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
NameTypeDescription
origin + + +ol.Coordinate +| + +undefined + + + +

Origin.

origins + + +Array.<ol.Coordinate> +| + +undefined + + + +

Origins.

resolutions + + +!Array.<number> + + + +

Resolutions.

matrixIds + + +!Array.<string> + + + +

matrix IDs.

tileSize + + +number +| + +undefined + + + +

Tile size.

tileSizes + + +Array.<number> +| + +undefined + + + +

Tile sizes.

+ + + + + + + + + + + + + + + + + + + + +
Source:
+
  • objectliterals.jsdoc, line 163
+ + + + + + + +
+ + + +
+ + + +
+

XYZOptions

+ + +
Stability: experimental
+ + + + +
+
+ + + +
+ + +
Properties:
+ +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
NameTypeDescription
maxZoom + + +number + + + +

Maximum zoom.

+ + + + + + + + + + + + + + + + + + + + +
Source:
+
  • objectliterals.jsdoc, line 165
+ + + + + + + +
+ + + +
+ + + +
+

ZoomifyOptions

+ + +
Stability: experimental
+ + + + +
+
+ + + +
+ + +
Properties:
+ +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
NameTypeDescription
resolutions + + +!Array.<number> + + + +

Resolutions.

+ + + + + + + + + + + + + + + + + + + + +
Source:
+
  • objectliterals.jsdoc, line 167
+ + + + + + + +
+ + + +
+ +
+ + + +
+ +
+ + + + +
+ + + +
+ + + + + + \ No newline at end of file diff --git a/float-no-zero/apidoc/scripts/prettify/Apache-License-2.0.txt b/float-no-zero/apidoc/scripts/prettify/Apache-License-2.0.txt new file mode 100644 index 0000000000..d645695673 --- /dev/null +++ b/float-no-zero/apidoc/scripts/prettify/Apache-License-2.0.txt @@ -0,0 +1,202 @@ + + Apache License + Version 2.0, January 2004 + http://www.apache.org/licenses/ + + TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION + + 1. Definitions. + + "License" shall mean the terms and conditions for use, reproduction, + and distribution as defined by Sections 1 through 9 of this document. + + "Licensor" shall mean the copyright owner or entity authorized by + the copyright owner that is granting the License. + + "Legal Entity" shall mean the union of the acting entity and all + other entities that control, are controlled by, or are under common + control with that entity. For the purposes of this definition, + "control" means (i) the power, direct or indirect, to cause the + direction or management of such entity, whether by contract or + otherwise, or (ii) ownership of fifty percent (50%) or more of the + outstanding shares, or (iii) beneficial ownership of such entity. + + "You" (or "Your") shall mean an individual or Legal Entity + exercising permissions granted by this License. + + "Source" form shall mean the preferred form for making modifications, + including but not limited to software source code, documentation + source, and configuration files. + + "Object" form shall mean any form resulting from mechanical + transformation or translation of a Source form, including but + not limited to compiled object code, generated documentation, + and conversions to other media types. + + "Work" shall mean the work of authorship, whether in Source or + Object form, made available under the License, as indicated by a + copyright notice that is included in or attached to the work + (an example is provided in the Appendix below). + + "Derivative Works" shall mean any work, whether in Source or Object + form, that is based on (or derived from) the Work and for which the + editorial revisions, annotations, elaborations, or other modifications + represent, as a whole, an original work of authorship. For the purposes + of this License, Derivative Works shall not include works that remain + separable from, or merely link (or bind by name) to the interfaces of, + the Work and Derivative Works thereof. + + "Contribution" shall mean any work of authorship, including + the original version of the Work and any modifications or additions + to that Work or Derivative Works thereof, that is intentionally + submitted to Licensor for inclusion in the Work by the copyright owner + or by an individual or Legal Entity authorized to submit on behalf of + the copyright owner. For the purposes of this definition, "submitted" + means any form of electronic, verbal, or written communication sent + to the Licensor or its representatives, including but not limited to + communication on electronic mailing lists, source code control systems, + and issue tracking systems that are managed by, or on behalf of, the + Licensor for the purpose of discussing and improving the Work, but + excluding communication that is conspicuously marked or otherwise + designated in writing by the copyright owner as "Not a Contribution." + + "Contributor" shall mean Licensor and any individual or Legal Entity + on behalf of whom a Contribution has been received by Licensor and + subsequently incorporated within the Work. + + 2. Grant of Copyright License. Subject to the terms and conditions of + this License, each Contributor hereby grants to You a perpetual, + worldwide, non-exclusive, no-charge, royalty-free, irrevocable + copyright license to reproduce, prepare Derivative Works of, + publicly display, publicly perform, sublicense, and distribute the + Work and such Derivative Works in Source or Object form. + + 3. Grant of Patent License. Subject to the terms and conditions of + this License, each Contributor hereby grants to You a perpetual, + worldwide, non-exclusive, no-charge, royalty-free, irrevocable + (except as stated in this section) patent license to make, have made, + use, offer to sell, sell, import, and otherwise transfer the Work, + where such license applies only to those patent claims licensable + by such Contributor that are necessarily infringed by their + Contribution(s) alone or by combination of their Contribution(s) + with the Work to which such Contribution(s) was submitted. If You + institute patent litigation against any entity (including a + cross-claim or counterclaim in a lawsuit) alleging that the Work + or a Contribution incorporated within the Work constitutes direct + or contributory patent infringement, then any patent licenses + granted to You under this License for that Work shall terminate + as of the date such litigation is filed. + + 4. Redistribution. You may reproduce and distribute copies of the + Work or Derivative Works thereof in any medium, with or without + modifications, and in Source or Object form, provided that You + meet the following conditions: + + (a) You must give any other recipients of the Work or + Derivative Works a copy of this License; and + + (b) You must cause any modified files to carry prominent notices + stating that You changed the files; and + + (c) You must retain, in the Source form of any Derivative Works + that You distribute, all copyright, patent, trademark, and + attribution notices from the Source form of the Work, + excluding those notices that do not pertain to any part of + the Derivative Works; and + + (d) If the Work includes a "NOTICE" text file as part of its + distribution, then any Derivative Works that You distribute must + include a readable copy of the attribution notices contained + within such NOTICE file, excluding those notices that do not + pertain to any part of the Derivative Works, in at least one + of the following places: within a NOTICE text file distributed + as part of the Derivative Works; within the Source form or + documentation, if provided along with the Derivative Works; or, + within a display generated by the Derivative Works, if and + wherever such third-party notices normally appear. The contents + of the NOTICE file are for informational purposes only and + do not modify the License. You may add Your own attribution + notices within Derivative Works that You distribute, alongside + or as an addendum to the NOTICE text from the Work, provided + that such additional attribution notices cannot be construed + as modifying the License. + + You may add Your own copyright statement to Your modifications and + may provide additional or different license terms and conditions + for use, reproduction, or distribution of Your modifications, or + for any such Derivative Works as a whole, provided Your use, + reproduction, and distribution of the Work otherwise complies with + the conditions stated in this License. + + 5. Submission of Contributions. Unless You explicitly state otherwise, + any Contribution intentionally submitted for inclusion in the Work + by You to the Licensor shall be under the terms and conditions of + this License, without any additional terms or conditions. + Notwithstanding the above, nothing herein shall supersede or modify + the terms of any separate license agreement you may have executed + with Licensor regarding such Contributions. + + 6. Trademarks. This License does not grant permission to use the trade + names, trademarks, service marks, or product names of the Licensor, + except as required for reasonable and customary use in describing the + origin of the Work and reproducing the content of the NOTICE file. + + 7. Disclaimer of Warranty. Unless required by applicable law or + agreed to in writing, Licensor provides the Work (and each + Contributor provides its Contributions) on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or + implied, including, without limitation, any warranties or conditions + of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A + PARTICULAR PURPOSE. You are solely responsible for determining the + appropriateness of using or redistributing the Work and assume any + risks associated with Your exercise of permissions under this License. + + 8. Limitation of Liability. In no event and under no legal theory, + whether in tort (including negligence), contract, or otherwise, + unless required by applicable law (such as deliberate and grossly + negligent acts) or agreed to in writing, shall any Contributor be + liable to You for damages, including any direct, indirect, special, + incidental, or consequential damages of any character arising as a + result of this License or out of the use or inability to use the + Work (including but not limited to damages for loss of goodwill, + work stoppage, computer failure or malfunction, or any and all + other commercial damages or losses), even if such Contributor + has been advised of the possibility of such damages. + + 9. Accepting Warranty or Additional Liability. While redistributing + the Work or Derivative Works thereof, You may choose to offer, + and charge a fee for, acceptance of support, warranty, indemnity, + or other liability obligations and/or rights consistent with this + License. However, in accepting such obligations, You may act only + on Your own behalf and on Your sole responsibility, not on behalf + of any other Contributor, and only if You agree to indemnify, + defend, and hold each Contributor harmless for any liability + incurred by, or claims asserted against, such Contributor by reason + of your accepting any such warranty or additional liability. + + END OF TERMS AND CONDITIONS + + APPENDIX: How to apply the Apache License to your work. + + To apply the Apache License to your work, attach the following + boilerplate notice, with the fields enclosed by brackets "[]" + replaced with your own identifying information. (Don't include + the brackets!) The text should be enclosed in the appropriate + comment syntax for the file format. We also recommend that a + file or class name and description of purpose be included on the + same "printed page" as the copyright notice for easier + identification within third-party archives. + + Copyright [yyyy] [name of copyright owner] + + Licensed under the Apache License, Version 2.0 (the "License"); + you may not use this file except in compliance with the License. + You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License. diff --git a/float-no-zero/apidoc/scripts/prettify/lang-css.js b/float-no-zero/apidoc/scripts/prettify/lang-css.js new file mode 100644 index 0000000000..041e1f5906 --- /dev/null +++ b/float-no-zero/apidoc/scripts/prettify/lang-css.js @@ -0,0 +1,2 @@ +PR.registerLangHandler(PR.createSimpleLexer([["pln",/^[\t\n\f\r ]+/,null," \t\r\n "]],[["str",/^"(?:[^\n\f\r"\\]|\\(?:\r\n?|\n|\f)|\\[\S\s])*"/,null],["str",/^'(?:[^\n\f\r'\\]|\\(?:\r\n?|\n|\f)|\\[\S\s])*'/,null],["lang-css-str",/^url\(([^"')]*)\)/i],["kwd",/^(?:url|rgb|!important|@import|@page|@media|@charset|inherit)(?=[^\w-]|$)/i,null],["lang-css-kw",/^(-?(?:[_a-z]|\\[\da-f]+ ?)(?:[\w-]|\\\\[\da-f]+ ?)*)\s*:/i],["com",/^\/\*[^*]*\*+(?:[^*/][^*]*\*+)*\//],["com", +/^(?:<\!--|--\>)/],["lit",/^(?:\d+|\d*\.\d+)(?:%|[a-z]+)?/i],["lit",/^#[\da-f]{3,6}/i],["pln",/^-?(?:[_a-z]|\\[\da-f]+ ?)(?:[\w-]|\\\\[\da-f]+ ?)*/i],["pun",/^[^\s\w"']+/]]),["css"]);PR.registerLangHandler(PR.createSimpleLexer([],[["kwd",/^-?(?:[_a-z]|\\[\da-f]+ ?)(?:[\w-]|\\\\[\da-f]+ ?)*/i]]),["css-kw"]);PR.registerLangHandler(PR.createSimpleLexer([],[["str",/^[^"')]+/]]),["css-str"]); diff --git a/float-no-zero/apidoc/scripts/prettify/prettify.js b/float-no-zero/apidoc/scripts/prettify/prettify.js new file mode 100644 index 0000000000..eef5ad7e6a --- /dev/null +++ b/float-no-zero/apidoc/scripts/prettify/prettify.js @@ -0,0 +1,28 @@ +var q=null;window.PR_SHOULD_USE_CONTINUATION=!0; +(function(){function L(a){function m(a){var f=a.charCodeAt(0);if(f!==92)return f;var b=a.charAt(1);return(f=r[b])?f:"0"<=b&&b<="7"?parseInt(a.substring(1),8):b==="u"||b==="x"?parseInt(a.substring(2),16):a.charCodeAt(1)}function e(a){if(a<32)return(a<16?"\\x0":"\\x")+a.toString(16);a=String.fromCharCode(a);if(a==="\\"||a==="-"||a==="["||a==="]")a="\\"+a;return a}function h(a){for(var f=a.substring(1,a.length-1).match(/\\u[\dA-Fa-f]{4}|\\x[\dA-Fa-f]{2}|\\[0-3][0-7]{0,2}|\\[0-7]{1,2}|\\[\S\s]|[^\\]/g),a= +[],b=[],o=f[0]==="^",c=o?1:0,i=f.length;c122||(d<65||j>90||b.push([Math.max(65,j)|32,Math.min(d,90)|32]),d<97||j>122||b.push([Math.max(97,j)&-33,Math.min(d,122)&-33]))}}b.sort(function(a,f){return a[0]-f[0]||f[1]-a[1]});f=[];j=[NaN,NaN];for(c=0;ci[0]&&(i[1]+1>i[0]&&b.push("-"),b.push(e(i[1])));b.push("]");return b.join("")}function y(a){for(var f=a.source.match(/\[(?:[^\\\]]|\\[\S\s])*]|\\u[\dA-Fa-f]{4}|\\x[\dA-Fa-f]{2}|\\\d+|\\[^\dux]|\(\?[!:=]|[()^]|[^()[\\^]+/g),b=f.length,d=[],c=0,i=0;c=2&&a==="["?f[c]=h(j):a!=="\\"&&(f[c]=j.replace(/[A-Za-z]/g,function(a){a=a.charCodeAt(0);return"["+String.fromCharCode(a&-33,a|32)+"]"}));return f.join("")}for(var t=0,s=!1,l=!1,p=0,d=a.length;p=5&&"lang-"===b.substring(0,5))&&!(o&&typeof o[1]==="string"))c=!1,b="src";c||(r[f]=b)}i=d;d+=f.length;if(c){c=o[1];var j=f.indexOf(c),k=j+c.length;o[2]&&(k=f.length-o[2].length,j=k-c.length);b=b.substring(5);B(l+i,f.substring(0,j),e,p);B(l+i+j,c,C(b,c),p);B(l+i+k,f.substring(k),e,p)}else p.push(l+i,b)}a.e=p}var h={},y;(function(){for(var e=a.concat(m), +l=[],p={},d=0,g=e.length;d=0;)h[n.charAt(k)]=r;r=r[1];n=""+r;p.hasOwnProperty(n)||(l.push(r),p[n]=q)}l.push(/[\S\s]/);y=L(l)})();var t=m.length;return e}function u(a){var m=[],e=[];a.tripleQuotedStrings?m.push(["str",/^(?:'''(?:[^'\\]|\\[\S\s]|''?(?=[^']))*(?:'''|$)|"""(?:[^"\\]|\\[\S\s]|""?(?=[^"]))*(?:"""|$)|'(?:[^'\\]|\\[\S\s])*(?:'|$)|"(?:[^"\\]|\\[\S\s])*(?:"|$))/,q,"'\""]):a.multiLineStrings?m.push(["str",/^(?:'(?:[^'\\]|\\[\S\s])*(?:'|$)|"(?:[^"\\]|\\[\S\s])*(?:"|$)|`(?:[^\\`]|\\[\S\s])*(?:`|$))/, +q,"'\"`"]):m.push(["str",/^(?:'(?:[^\n\r'\\]|\\.)*(?:'|$)|"(?:[^\n\r"\\]|\\.)*(?:"|$))/,q,"\"'"]);a.verbatimStrings&&e.push(["str",/^@"(?:[^"]|"")*(?:"|$)/,q]);var h=a.hashComments;h&&(a.cStyleComments?(h>1?m.push(["com",/^#(?:##(?:[^#]|#(?!##))*(?:###|$)|.*)/,q,"#"]):m.push(["com",/^#(?:(?:define|elif|else|endif|error|ifdef|include|ifndef|line|pragma|undef|warning)\b|[^\n\r]*)/,q,"#"]),e.push(["str",/^<(?:(?:(?:\.\.\/)*|\/?)(?:[\w-]+(?:\/[\w-]+)+)?[\w-]+\.h|[a-z]\w*)>/,q])):m.push(["com",/^#[^\n\r]*/, +q,"#"]));a.cStyleComments&&(e.push(["com",/^\/\/[^\n\r]*/,q]),e.push(["com",/^\/\*[\S\s]*?(?:\*\/|$)/,q]));a.regexLiterals&&e.push(["lang-regex",/^(?:^^\.?|[!+-]|!=|!==|#|%|%=|&|&&|&&=|&=|\(|\*|\*=|\+=|,|-=|->|\/|\/=|:|::|;|<|<<|<<=|<=|=|==|===|>|>=|>>|>>=|>>>|>>>=|[?@[^]|\^=|\^\^|\^\^=|{|\||\|=|\|\||\|\|=|~|break|case|continue|delete|do|else|finally|instanceof|return|throw|try|typeof)\s*(\/(?=[^*/])(?:[^/[\\]|\\[\S\s]|\[(?:[^\\\]]|\\[\S\s])*(?:]|$))+\/)/]);(h=a.types)&&e.push(["typ",h]);a=(""+a.keywords).replace(/^ | $/g, +"");a.length&&e.push(["kwd",RegExp("^(?:"+a.replace(/[\s,]+/g,"|")+")\\b"),q]);m.push(["pln",/^\s+/,q," \r\n\t\xa0"]);e.push(["lit",/^@[$_a-z][\w$@]*/i,q],["typ",/^(?:[@_]?[A-Z]+[a-z][\w$@]*|\w+_t\b)/,q],["pln",/^[$_a-z][\w$@]*/i,q],["lit",/^(?:0x[\da-f]+|(?:\d(?:_\d+)*\d*(?:\.\d*)?|\.\d\+)(?:e[+-]?\d+)?)[a-z]*/i,q,"0123456789"],["pln",/^\\[\S\s]?/,q],["pun",/^.[^\s\w"-$'./@\\`]*/,q]);return x(m,e)}function D(a,m){function e(a){switch(a.nodeType){case 1:if(k.test(a.className))break;if("BR"===a.nodeName)h(a), +a.parentNode&&a.parentNode.removeChild(a);else for(a=a.firstChild;a;a=a.nextSibling)e(a);break;case 3:case 4:if(p){var b=a.nodeValue,d=b.match(t);if(d){var c=b.substring(0,d.index);a.nodeValue=c;(b=b.substring(d.index+d[0].length))&&a.parentNode.insertBefore(s.createTextNode(b),a.nextSibling);h(a);c||a.parentNode.removeChild(a)}}}}function h(a){function b(a,d){var e=d?a.cloneNode(!1):a,f=a.parentNode;if(f){var f=b(f,1),g=a.nextSibling;f.appendChild(e);for(var h=g;h;h=g)g=h.nextSibling,f.appendChild(h)}return e} +for(;!a.nextSibling;)if(a=a.parentNode,!a)return;for(var a=b(a.nextSibling,0),e;(e=a.parentNode)&&e.nodeType===1;)a=e;d.push(a)}var k=/(?:^|\s)nocode(?:\s|$)/,t=/\r\n?|\n/,s=a.ownerDocument,l;a.currentStyle?l=a.currentStyle.whiteSpace:window.getComputedStyle&&(l=s.defaultView.getComputedStyle(a,q).getPropertyValue("white-space"));var p=l&&"pre"===l.substring(0,3);for(l=s.createElement("LI");a.firstChild;)l.appendChild(a.firstChild);for(var d=[l],g=0;g=0;){var h=m[e];A.hasOwnProperty(h)?window.console&&console.warn("cannot override language handler %s",h):A[h]=a}}function C(a,m){if(!a||!A.hasOwnProperty(a))a=/^\s*=o&&(h+=2);e>=c&&(a+=2)}}catch(w){"console"in window&&console.log(w&&w.stack?w.stack:w)}}var v=["break,continue,do,else,for,if,return,while"],w=[[v,"auto,case,char,const,default,double,enum,extern,float,goto,int,long,register,short,signed,sizeof,static,struct,switch,typedef,union,unsigned,void,volatile"], +"catch,class,delete,false,import,new,operator,private,protected,public,this,throw,true,try,typeof"],F=[w,"alignof,align_union,asm,axiom,bool,concept,concept_map,const_cast,constexpr,decltype,dynamic_cast,explicit,export,friend,inline,late_check,mutable,namespace,nullptr,reinterpret_cast,static_assert,static_cast,template,typeid,typename,using,virtual,where"],G=[w,"abstract,boolean,byte,extends,final,finally,implements,import,instanceof,null,native,package,strictfp,super,synchronized,throws,transient"], +H=[G,"as,base,by,checked,decimal,delegate,descending,dynamic,event,fixed,foreach,from,group,implicit,in,interface,internal,into,is,lock,object,out,override,orderby,params,partial,readonly,ref,sbyte,sealed,stackalloc,string,select,uint,ulong,unchecked,unsafe,ushort,var"],w=[w,"debugger,eval,export,function,get,null,set,undefined,var,with,Infinity,NaN"],I=[v,"and,as,assert,class,def,del,elif,except,exec,finally,from,global,import,in,is,lambda,nonlocal,not,or,pass,print,raise,try,with,yield,False,True,None"], +J=[v,"alias,and,begin,case,class,def,defined,elsif,end,ensure,false,in,module,next,nil,not,or,redo,rescue,retry,self,super,then,true,undef,unless,until,when,yield,BEGIN,END"],v=[v,"case,done,elif,esac,eval,fi,function,in,local,set,then,until"],K=/^(DIR|FILE|vector|(de|priority_)?queue|list|stack|(const_)?iterator|(multi)?(set|map)|bitset|u?(int|float)\d*)/,N=/\S/,O=u({keywords:[F,H,w,"caller,delete,die,do,dump,elsif,eval,exit,foreach,for,goto,if,import,last,local,my,next,no,our,print,package,redo,require,sub,undef,unless,until,use,wantarray,while,BEGIN,END"+ +I,J,v],hashComments:!0,cStyleComments:!0,multiLineStrings:!0,regexLiterals:!0}),A={};k(O,["default-code"]);k(x([],[["pln",/^[^]*(?:>|$)/],["com",/^<\!--[\S\s]*?(?:--\>|$)/],["lang-",/^<\?([\S\s]+?)(?:\?>|$)/],["lang-",/^<%([\S\s]+?)(?:%>|$)/],["pun",/^(?:<[%?]|[%?]>)/],["lang-",/^]*>([\S\s]+?)<\/xmp\b[^>]*>/i],["lang-js",/^]*>([\S\s]*?)(<\/script\b[^>]*>)/i],["lang-css",/^]*>([\S\s]*?)(<\/style\b[^>]*>)/i],["lang-in.tag",/^(<\/?[a-z][^<>]*>)/i]]), +["default-markup","htm","html","mxml","xhtml","xml","xsl"]);k(x([["pln",/^\s+/,q," \t\r\n"],["atv",/^(?:"[^"]*"?|'[^']*'?)/,q,"\"'"]],[["tag",/^^<\/?[a-z](?:[\w-.:]*\w)?|\/?>$/i],["atn",/^(?!style[\s=]|on)[a-z](?:[\w:-]*\w)?/i],["lang-uq.val",/^=\s*([^\s"'>]*(?:[^\s"'/>]|\/(?=\s)))/],["pun",/^[/<->]+/],["lang-js",/^on\w+\s*=\s*"([^"]+)"/i],["lang-js",/^on\w+\s*=\s*'([^']+)'/i],["lang-js",/^on\w+\s*=\s*([^\s"'>]+)/i],["lang-css",/^style\s*=\s*"([^"]+)"/i],["lang-css",/^style\s*=\s*'([^']+)'/i],["lang-css", +/^style\s*=\s*([^\s"'>]+)/i]]),["in.tag"]);k(x([],[["atv",/^[\S\s]+/]]),["uq.val"]);k(u({keywords:F,hashComments:!0,cStyleComments:!0,types:K}),["c","cc","cpp","cxx","cyc","m"]);k(u({keywords:"null,true,false"}),["json"]);k(u({keywords:H,hashComments:!0,cStyleComments:!0,verbatimStrings:!0,types:K}),["cs"]);k(u({keywords:G,cStyleComments:!0}),["java"]);k(u({keywords:v,hashComments:!0,multiLineStrings:!0}),["bsh","csh","sh"]);k(u({keywords:I,hashComments:!0,multiLineStrings:!0,tripleQuotedStrings:!0}), +["cv","py"]);k(u({keywords:"caller,delete,die,do,dump,elsif,eval,exit,foreach,for,goto,if,import,last,local,my,next,no,our,print,package,redo,require,sub,undef,unless,until,use,wantarray,while,BEGIN,END",hashComments:!0,multiLineStrings:!0,regexLiterals:!0}),["perl","pl","pm"]);k(u({keywords:J,hashComments:!0,multiLineStrings:!0,regexLiterals:!0}),["rb"]);k(u({keywords:w,cStyleComments:!0,regexLiterals:!0}),["js"]);k(u({keywords:"all,and,by,catch,class,else,extends,false,finally,for,if,in,is,isnt,loop,new,no,not,null,of,off,on,or,return,super,then,true,try,unless,until,when,while,yes", +hashComments:3,cStyleComments:!0,multilineStrings:!0,tripleQuotedStrings:!0,regexLiterals:!0}),["coffee"]);k(x([],[["str",/^[\S\s]+/]]),["regex"]);window.prettyPrintOne=function(a,m,e){var h=document.createElement("PRE");h.innerHTML=a;e&&D(h,e);E({g:m,i:e,h:h});return h.innerHTML};window.prettyPrint=function(a){function m(){for(var e=window.PR_SHOULD_USE_CONTINUATION?l.now()+250:Infinity;p=0){var k=k.match(g),f,b;if(b= +!k){b=n;for(var o=void 0,c=b.firstChild;c;c=c.nextSibling)var i=c.nodeType,o=i===1?o?b:c:i===3?N.test(c.nodeValue)?b:o:o;b=(f=o===b?void 0:o)&&"CODE"===f.tagName}b&&(k=f.className.match(g));k&&(k=k[1]);b=!1;for(o=n.parentNode;o;o=o.parentNode)if((o.tagName==="pre"||o.tagName==="code"||o.tagName==="xmp")&&o.className&&o.className.indexOf("prettyprint")>=0){b=!0;break}b||((b=(b=n.className.match(/\blinenums\b(?::(\d+))?/))?b[1]&&b[1].length?+b[1]:!0:!1)&&D(n,b),d={g:k,h:n,i:b},E(d))}}p>>0);goog.uidCounter_=0;goog.getHashCode=goog.getUid;goog.removeHashCode=goog.removeUid;goog.cloneObject=function(a){var b=goog.typeOf(a);if("object"==b||"array"==b){if(a.clone)return a.clone();var b="array"==b?[]:{},c;for(c in a)b[c]=goog.cloneObject(a[c]);return b}return a};goog.bindNative_=function(a,b,c){return a.call.apply(a.bind,arguments)}; +goog.bindJs_=function(a,b,c){if(!a)throw Error();if(2Math.abs(a[0])&&(b=1);Math.abs(a[2])>Math.abs(a[b])&&(b=2);return b}; +libtess.normal.computeNormal_=function(a,b){var c=[0,0,0],d=[0,0,0],e=[0,0,0],f=[0,0,0],g=[0,0,0];c[0]=c[1]=c[2]=-2*libtess.GLU_TESS_MAX_COORD;d[0]=d[1]=d[2]=2*libtess.GLU_TESS_MAX_COORD;var h=Array(3),k=Array(3),l,m,n=a.mesh.vHead;for(m=n.next;m!==n;m=m.next)for(l=0;3>l;++l){var p=m.coords[l];pc[l]&&(c[l]=p,h[l]=m)}l=0;c[1]-d[1]>c[0]-d[0]&&(l=1);c[2]-d[2]>c[l]-d[l]&&(l=2);if(d[l]>=c[l])b[0]=0,b[1]=0,b[2]=1;else{c=0;m=k[l];h=h[l];e[0]=m.coords[0]-h.coords[0];e[1]=m.coords[1]- +h.coords[1];e[2]=m.coords[2]-h.coords[2];for(m=n.next;m!==n;m=m.next)f[0]=m.coords[0]-h.coords[0],f[1]=m.coords[1]-h.coords[1],f[2]=m.coords[2]-h.coords[2],g[0]=e[1]*f[2]-e[2]*f[1],g[1]=e[2]*f[0]-e[0]*f[2],g[2]=e[0]*f[1]-e[1]*f[0],l=g[0]*g[0]+g[1]*g[1]+g[2]*g[2],l>c&&(c=l,b[0]=g[0],b[1]=g[1],b[2]=g[2]);0>=c&&(b[0]=b[1]=b[2]=0,b[libtess.normal.longAxis_(e)]=1)}}; +libtess.normal.checkOrientation_=function(a){for(var b=0,c=a.mesh.fHead,d=c.next;d!==c;d=d.next){var e=d.anEdge;if(!(0>=e.winding)){do b+=(e.org.s-e.dst().s)*(e.org.t+e.dst().t),e=e.lNext;while(e!==d.anEdge)}}if(0>b){b=a.mesh.vHead;for(c=b.next;c!==b;c=c.next)c.t=-c.t;a.tUnit[0]=-a.tUnit[0];a.tUnit[1]=-a.tUnit[1];a.tUnit[2]=-a.tUnit[2]}};libtess.render={};libtess.render.SIGN_INCONSISTENT_=2;libtess.render.renderMesh=function(a,b){a.lonelyTriList=null;var c;for(c=b.fHead.next;c!==b.fHead;c=c.next)c.marked=!1;for(c=b.fHead.next;c!==b.fHead;c=c.next)c.inside&&!c.marked&&(libtess.render.renderMaximumFaceGroup_(a,c),libtess.assert(c.marked));null!==a.lonelyTriList&&(libtess.render.renderLonelyTriangles_(a,a.lonelyTriList),a.lonelyTriList=null)}; +libtess.render.renderBoundary=function(a,b){for(var c=b.fHead.next;c!==b.fHead;c=c.next)if(c.inside){a.callBeginOrBeginData(libtess.primitiveType.GL_LINE_LOOP);var d=c.anEdge;do a.callVertexOrVertexData(d.org.data),d=d.lNext;while(d!==c.anEdge);a.callEndOrEndData()}}; +libtess.render.renderCache=function(a){if(3>a.cacheCount)return!0;var b=[0,0,0];b[0]=a.normal[0];b[1]=a.normal[1];b[2]=a.normal[2];0===b[0]&&(0===b[1]&&0===b[2])&&libtess.render.computeNormal_(a,b,!1);var c=libtess.render.computeNormal_(a,b,!0);if(c===libtess.render.SIGN_INCONSISTENT_)return!1;if(0===c)return!0;switch(a.windingRule){case libtess.windingRule.GLU_TESS_WINDING_POSITIVE:if(0>c)return!0;break;case libtess.windingRule.GLU_TESS_WINDING_NEGATIVE:if(0d.size&&(d=e),e=libtess.render.maximumFan_(c.lNext),e.size>d.size&&(d=e),e=libtess.render.maximumFan_(c.lPrev()),e.size>d.size&&(d=e),e=libtess.render.maximumStrip_(c),e.size>d.size&&(d=e),e=libtess.render.maximumStrip_(c.lNext),e.size>d.size&&(d=e),e=libtess.render.maximumStrip_(c.lPrev()),e.size>d.size&&(d=e));d.render(a, +d.eStart,d.size)};libtess.render.renderLonelyTriangles_=function(a,b){var c=-1,d=b;for(a.callBeginOrBeginData(libtess.primitiveType.GL_TRIANGLES);null!==d;d=d.trail){var e=d.anEdge;do{if(a.flagBoundary){var f=e.rFace().inside?0:1;c!==f&&(c=f,a.callEdgeFlagOrEdgeFlagData(!!c))}a.callVertexOrVertexData(e.org.data);e=e.lNext}while(e!==d.anEdge)}a.callEndOrEndData()}; +libtess.render.computeNormal_=function(a,b,c){c||(b[0]=b[1]=b[2]=0);for(var d=0+a.cacheCount,e=1,f=a.cache[0],g=a.cache[e],h=g.coords[0]-f.coords[0],k=g.coords[1]-f.coords[1],l=g.coords[2]-f.coords[2],m=0;++em)return libtess.render.SIGN_INCONSISTENT_;m=1}else{if(0this.max_&&(this.max_*=2,this.nodes_=libtess.PQNode.realloc(this.nodes_,this.max_+1),this.handles_=libtess.PQHandleElem.realloc(this.handles_,this.max_+1));var c;0===this.freeList_?c=b:(c=this.freeList_,this.freeList_=this.handles_[c].node);this.nodes_[b].handle=c;this.handles_[c].node=b;this.handles_[c].key=a;this.initialized_&&this.floatUp_(b);return c};libtess.PriorityQHeap.prototype.isEmpty=function(){return 0===this.size_}; +libtess.PriorityQHeap.prototype.minimum=function(){return this.handles_[this.nodes_[1].handle].key};libtess.PriorityQHeap.prototype.extractMin=function(){var a=this.nodes_,b=this.handles_,c=a[1].handle,d=b[c].key;0=d||this.leq_(c[b[d>>1].handle].key,c[b[d].handle].key)?this.floatDown_(d):this.floatUp_(d));c[a].key=null;c[a].node=this.freeList_;this.freeList_=a}; +libtess.PriorityQHeap.prototype.floatDown_=function(a){for(var b=this.nodes_,c=this.handles_,d=b[a].handle;;){var e=a<<1;ethis.size_||this.leq_(c[d].key,c[f].key)){b[a].handle=d;c[d].node=a;break}b[a].handle=f;c[f].node=a;a=e}}; +libtess.PriorityQHeap.prototype.floatUp_=function(a){for(var b=this.nodes_,c=this.handles_,d=b[a].handle;;){var e=a>>1,f=b[e].handle;if(0===e||this.leq_(c[f].key,c[d].key)){b[a].handle=d;c[d].node=a;break}b[a].handle=f;c[f].node=a;a=e}};libtess.PriorityQ=function(a){this.keys_=libtess.PriorityQ.prototype.PQKeyRealloc_(null,libtess.PriorityQ.INIT_SIZE_);this.order_=null;this.size_=0;this.max_=libtess.PriorityQ.INIT_SIZE_;this.initialized_=!1;this.leq_=a;this.heap_=new libtess.PriorityQHeap(this.leq_)};libtess.PriorityQ.INIT_SIZE_=32;libtess.PriorityQ.prototype.deleteQ=function(){this.heap_.deleteHeap();this.keys_=this.order_=this.heap_=null}; +libtess.PriorityQ.prototype.init=function(){this.order_=[];for(var a=0;a=this.max_&&(this.max_*=2,this.keys_=libtess.PriorityQ.prototype.PQKeyRealloc_(this.keys_,this.max_));this.keys_[b]=a;return-(b+1)};libtess.PriorityQ.prototype.PQKeyRealloc_=function(a,b){var c=Array(b),d=0;if(null!==a)for(;da?0:a;c=0>c?0:c;return a<=c?0===c?(b+d)/2:b+(d-b)*(a/(a+c)):d+(b-d)*(c/(a+c))}; +libtess.geom.edgeIntersect=function(a,b,c,d,e){var f,g;libtess.geom.vertLeq(a,b)||(f=a,a=b,b=f);libtess.geom.vertLeq(c,d)||(f=c,c=d,d=f);libtess.geom.vertLeq(a,c)||(f=a,a=c,c=f,f=b,b=d,d=f);libtess.geom.vertLeq(c,b)?libtess.geom.vertLeq(b,d)?(f=libtess.geom.edgeEval(a,c,b),g=libtess.geom.edgeEval(c,b,d),0>f+g&&(f=-f,g=-g),e.s=libtess.geom.interpolate_(f,c.s,g,b.s)):(f=libtess.geom.edgeSign(a,c,b),g=-libtess.geom.edgeSign(a,d,b),0>f+g&&(f=-f,g=-g),e.s=libtess.geom.interpolate_(f,c.s,g,d.s)):e.s=(c.s+ +b.s)/2;libtess.geom.transLeq(a,b)||(f=a,a=b,b=f);libtess.geom.transLeq(c,d)||(f=c,c=d,d=f);libtess.geom.transLeq(a,c)||(f=a,a=c,c=f,f=b,b=d,d=f);libtess.geom.transLeq(c,b)?libtess.geom.transLeq(b,d)?(f=libtess.geom.transEval(a,c,b),g=libtess.geom.transEval(c,b,d),0>f+g&&(f=-f,g=-g),e.t=libtess.geom.interpolate_(f,c.t,g,b.t)):(f=libtess.geom.transSign(a,c,b),g=-libtess.geom.transSign(a,d,b),0>f+g&&(f=-f,g=-g),e.t=libtess.geom.interpolate_(f,c.t,g,d.t)):e.t=(c.t+b.t)/2};libtess.sweep={};libtess.sweep.SENTINEL_COORD_=4*libtess.GLU_TESS_MAX_COORD;libtess.sweep.TOLERANCE_NONZERO_=!1; +libtess.sweep.computeInterior=function(a){a.fatalError=!1;libtess.sweep.removeDegenerateEdges_(a);libtess.sweep.initPriorityQ_(a);libtess.sweep.initEdgeDict_(a);for(var b;null!==(b=a.pq.extractMin());){for(;;){var c=a.pq.minimum();if(null===c||!libtess.geom.vertEq(c,b))break;c=a.pq.extractMin();libtess.sweep.spliceMergeVertices_(a,b.anEdge,c.anEdge)}libtess.sweep.sweepEvent_(a,b)}b=a.dict.getMin().getKey();a.event=b.eUp.org;libtess.sweepDebugEvent(a);libtess.sweep.doneEdgeDict_(a);libtess.sweep.donePriorityQ_(a); +libtess.sweep.removeDegenerateFaces_(a.mesh);a.mesh.checkMesh()};libtess.sweep.addWinding_=function(a,b){a.winding+=b.winding;a.sym.winding+=b.sym.winding}; +libtess.sweep.edgeLeq_=function(a,b,c){a=a.event;b=b.eUp;c=c.eUp;if(b.dst()===a)return c.dst()===a?libtess.geom.vertLeq(b.org,c.org)?0>=libtess.geom.edgeSign(c.dst(),b.org,c.org):0<=libtess.geom.edgeSign(b.dst(),c.org,b.org):0>=libtess.geom.edgeSign(c.dst(),a,c.org);if(c.dst()===a)return 0<=libtess.geom.edgeSign(b.dst(),a,b.org);b=libtess.geom.edgeEval(b.dst(),a,b.org);a=libtess.geom.edgeEval(c.dst(),a,c.org);return b>=a}; +libtess.sweep.deleteRegion_=function(a,b){b.fixUpperEdge&&libtess.assert(0===b.eUp.winding);b.eUp.activeRegion=null;a.dict.deleteNode(b.nodeUp);b.nodeUp=null};libtess.sweep.fixUpperEdge_=function(a,b){libtess.assert(a.fixUpperEdge);libtess.mesh.deleteEdge(a.eUp);a.fixUpperEdge=!1;a.eUp=b;b.activeRegion=a}; +libtess.sweep.topLeftRegion_=function(a){var b=a.eUp.org;do a=a.regionAbove();while(a.eUp.org===b);a.fixUpperEdge&&(b=libtess.mesh.connect(a.regionBelow().eUp.sym,a.eUp.lNext),libtess.sweep.fixUpperEdge_(a,b),a=a.regionAbove());return a};libtess.sweep.topRightRegion_=function(a){var b=a.eUp.dst();do a=a.regionAbove();while(a.eUp.dst()===b);return a};libtess.sweep.addRegionBelow_=function(a,b,c){var d=new libtess.ActiveRegion;d.eUp=c;d.nodeUp=a.dict.insertBefore(b.nodeUp,d);return c.activeRegion=d}; +libtess.sweep.isWindingInside_=function(a,b){switch(a.windingRule){case libtess.windingRule.GLU_TESS_WINDING_ODD:return 0!==(b&1);case libtess.windingRule.GLU_TESS_WINDING_NONZERO:return 0!==b;case libtess.windingRule.GLU_TESS_WINDING_POSITIVE:return 0b;case libtess.windingRule.GLU_TESS_WINDING_ABS_GEQ_TWO:return 2<=b||-2>=b}libtess.assert(!1);return!1}; +libtess.sweep.computeWinding_=function(a,b){b.windingNumber=b.regionAbove().windingNumber+b.eUp.winding;b.inside=libtess.sweep.isWindingInside_(a,b.windingNumber)};libtess.sweep.finishRegion_=function(a,b){var c=b.eUp,d=c.lFace;d.inside=b.inside;d.anEdge=c;libtess.sweep.deleteRegion_(a,b)}; +libtess.sweep.finishLeftRegions_=function(a,b,c){var d=b;for(b=b.eUp;d!==c;){d.fixUpperEdge=!1;var e=d.regionBelow(),f=e.eUp;if(f.org!==b.org){if(!e.fixUpperEdge){libtess.sweep.finishRegion_(a,d);break}f=libtess.mesh.connect(b.lPrev(),f.sym);libtess.sweep.fixUpperEdge_(e,f)}b.oNext!==f&&(libtess.mesh.meshSplice(f.oPrev(),f),libtess.mesh.meshSplice(b,f));libtess.sweep.finishRegion_(a,d);b=e.eUp;d=e}return b}; +libtess.sweep.addRightEdges_=function(a,b,c,d,e,f){var g=!0;do libtess.assert(libtess.geom.vertLeq(c.org,c.dst())),libtess.sweep.addRegionBelow_(a,b,c.sym),c=c.oNext;while(c!==d);null===e&&(e=b.regionBelow().eUp.rPrev());for(var h;;){h=b.regionBelow();c=h.eUp.sym;if(c.org!==e.org)break;c.oNext!==e&&(libtess.mesh.meshSplice(c.oPrev(),c),libtess.mesh.meshSplice(e.oPrev(),c));h.windingNumber=b.windingNumber-c.winding;h.inside=libtess.sweep.isWindingInside_(a,h.windingNumber);b.dirty=!0;!g&&libtess.sweep.checkForRightSplice_(a, +b)&&(libtess.sweep.addWinding_(c,e),libtess.sweep.deleteRegion_(a,b),libtess.mesh.deleteEdge(e));g=!1;b=h;e=c}b.dirty=!0;libtess.assert(b.windingNumber-c.winding===h.windingNumber);f&&libtess.sweep.walkDirtyRegions_(a,b)};libtess.sweep.callCombine_=function(a,b,c,d,e){var f=[b.coords[0],b.coords[1],b.coords[2]];b.data=null;b.data=a.callCombineOrCombineData(f,c,d);null===b.data&&(e?a.fatalError||(a.callErrorOrErrorData(libtess.errorType.GLU_TESS_NEED_COMBINE_CALLBACK),a.fatalError=!0):b.data=c[0])}; +libtess.sweep.spliceMergeVertices_=function(a,b,c){var d=[null,null,null,null];d[0]=b.org.data;d[1]=c.org.data;libtess.sweep.callCombine_(a,b.org,d,[0.5,0.5,0,0],!1);libtess.mesh.meshSplice(b,c)};libtess.sweep.vertexWeights_=function(a,b,c,d,e){var f=libtess.geom.vertL1dist(b,a),g=libtess.geom.vertL1dist(c,a),h=e+1;d[e]=0.5*g/(f+g);d[h]=0.5*f/(f+g);a.coords[0]+=d[e]*b.coords[0]+d[h]*c.coords[0];a.coords[1]+=d[e]*b.coords[1]+d[h]*c.coords[1];a.coords[2]+=d[e]*b.coords[2]+d[h]*c.coords[2]}; +libtess.sweep.getIntersectData_=function(a,b,c,d,e,f){var g=[0,0,0,0],h=[c.data,d.data,e.data,f.data];b.coords[0]=b.coords[1]=b.coords[2]=0;libtess.sweep.vertexWeights_(b,c,d,g,0);libtess.sweep.vertexWeights_(b,e,f,g,2);libtess.sweep.callCombine_(a,b,h,g,!0)}; +libtess.sweep.checkForRightSplice_=function(a,b){var c=b.regionBelow(),d=b.eUp,e=c.eUp;if(libtess.geom.vertLeq(d.org,e.org)){if(0libtess.geom.edgeSign(d.dst(),e.org,d.org))return!1;b.regionAbove().dirty=b.dirty=!0;libtess.mesh.splitEdge(d.sym); +libtess.mesh.meshSplice(e.oPrev(),d)}return!0}; +libtess.sweep.checkForLeftSplice_=function(a,b){var c=b.regionBelow(),d=b.eUp,e=c.eUp;libtess.assert(!libtess.geom.vertEq(d.dst(),e.dst()));if(libtess.geom.vertLeq(d.dst(),e.dst())){if(0>libtess.geom.edgeSign(d.dst(),e.dst(),d.org))return!1;b.regionAbove().dirty=b.dirty=!0;c=libtess.mesh.splitEdge(d);libtess.mesh.meshSplice(e.sym,c);c.lFace.inside=b.inside}else{if(0=libtess.geom.edgeSign(h,a.event,f));libtess.assert(0<=libtess.geom.edgeSign(k,a.event,g));libtess.assert(f!==a.event&&g!==a.event);libtess.assert(!b.fixUpperEdge&&!c.fixUpperEdge);if(f===g)return!1;var m=Math.min(f.t,h.t),n=Math.max(g.t,k.t);if(m>n)return!1;if(libtess.geom.vertLeq(f,g)){if(0libtess.geom.edgeSign(h,g,f))return!1;libtess.sweepDebugEvent(a);libtess.geom.edgeIntersect(h,f,k,g,l);libtess.assert(Math.min(f.t,h.t)<=l.t);libtess.assert(l.t<=Math.max(g.t,k.t));libtess.assert(Math.min(k.s,h.s)<=l.s);libtess.assert(l.s<=Math.max(g.s,f.s));libtess.geom.vertLeq(l,a.event)&&(l.s=a.event.s,l.t=a.event.t);m=libtess.geom.vertLeq(f,g)?f:g;libtess.geom.vertLeq(m,l)&&(l.s=m.s,l.t=m.t);if(libtess.geom.vertEq(l,f)||libtess.geom.vertEq(l,g))return libtess.sweep.checkForRightSplice_(a, +b),!1;if(!libtess.geom.vertEq(h,a.event)&&0<=libtess.geom.edgeSign(h,a.event,l)||!libtess.geom.vertEq(k,a.event)&&0>=libtess.geom.edgeSign(k,a.event,l)){if(k===a.event)return libtess.mesh.splitEdge(d.sym),libtess.mesh.meshSplice(e.sym,d),b=libtess.sweep.topLeftRegion_(b),d=b.regionBelow().eUp,libtess.sweep.finishLeftRegions_(a,b.regionBelow(),c),libtess.sweep.addRightEdges_(a,b,d.oPrev(),d,d,!0),!0;if(h===a.event)return libtess.mesh.splitEdge(e.sym),libtess.mesh.meshSplice(d.lNext,e.oPrev()),c=b, +b=libtess.sweep.topRightRegion_(b),f=b.regionBelow().eUp.rPrev(),c.eUp=e.oPrev(),e=libtess.sweep.finishLeftRegions_(a,c,null),libtess.sweep.addRightEdges_(a,b,e.oNext,d.rPrev(),f,!0),!0;0<=libtess.geom.edgeSign(h,a.event,l)&&(b.regionAbove().dirty=b.dirty=!0,libtess.mesh.splitEdge(d.sym),d.org.s=a.event.s,d.org.t=a.event.t);0>=libtess.geom.edgeSign(k,a.event,l)&&(b.dirty=c.dirty=!0,libtess.mesh.splitEdge(e.sym),e.org.s=a.event.s,e.org.t=a.event.t);return!1}libtess.mesh.splitEdge(d.sym);libtess.mesh.splitEdge(e.sym); +libtess.mesh.meshSplice(e.oPrev(),d);d.org.s=l.s;d.org.t=l.t;d.org.pqHandle=a.pq.insert(d.org);libtess.sweep.getIntersectData_(a,d.org,f,h,g,k);b.regionAbove().dirty=b.dirty=c.dirty=!0;return!1}; +libtess.sweep.walkDirtyRegions_=function(a,b){for(var c=b.regionBelow();;){for(;c.dirty;)b=c,c=c.regionBelow();if(!b.dirty&&(c=b,b=b.regionAbove(),null===b||!b.dirty))break;b.dirty=!1;var d=b.eUp,e=c.eUp;d.dst()!==e.dst()&&libtess.sweep.checkForLeftSplice_(a,b)&&(c.fixUpperEdge?(libtess.sweep.deleteRegion_(a,c),libtess.mesh.deleteEdge(e),c=b.regionBelow(),e=c.eUp):b.fixUpperEdge&&(libtess.sweep.deleteRegion_(a,b),libtess.mesh.deleteEdge(d),b=c.regionAbove(),d=b.eUp));if(d.org!==e.org)if(d.dst()=== +e.dst()||b.fixUpperEdge||c.fixUpperEdge||d.dst()!==a.event&&e.dst()!==a.event)libtess.sweep.checkForRightSplice_(a,b);else if(libtess.sweep.checkForIntersect_(a,b))break;d.org===e.org&&d.dst()===e.dst()&&(libtess.sweep.addWinding_(e,d),libtess.sweep.deleteRegion_(a,b),libtess.mesh.deleteEdge(d),b=c.regionAbove())}}; +libtess.sweep.connectRightVertex_=function(a,b,c){var d=c.oNext,e=b.regionBelow(),f=b.eUp,g=e.eUp,h=!1;f.dst()!==g.dst()&&libtess.sweep.checkForIntersect_(a,b);libtess.geom.vertEq(f.org,a.event)&&(libtess.mesh.meshSplice(d.oPrev(),f),b=libtess.sweep.topLeftRegion_(b),d=b.regionBelow().eUp,libtess.sweep.finishLeftRegions_(a,b.regionBelow(),e),h=!0);libtess.geom.vertEq(g.org,a.event)&&(libtess.mesh.meshSplice(c,g.oPrev()),c=libtess.sweep.finishLeftRegions_(a,e,null),h=!0);h?libtess.sweep.addRightEdges_(a, +b,c.oNext,d,d,!0):(d=libtess.geom.vertLeq(g.org,f.org)?g.oPrev():f,d=libtess.mesh.connect(c.lPrev(),d),libtess.sweep.addRightEdges_(a,b,d,d.oNext,d.oNext,!1),d.sym.activeRegion.fixUpperEdge=!0,libtess.sweep.walkDirtyRegions_(a,b))}; +libtess.sweep.connectLeftDegenerate_=function(a,b,c){var d=b.eUp;if(libtess.geom.vertEq(d.org,c))libtess.assert(libtess.sweep.TOLERANCE_NONZERO_),libtess.sweep.spliceMergeVertices_(a,d,c.anEdge);else if(libtess.geom.vertEq(d.dst(),c)){libtess.assert(libtess.sweep.TOLERANCE_NONZERO_);b=libtess.sweep.topRightRegion_(b);var d=b.regionBelow(),e=d.eUp.sym,f=e.oNext,g=f;d.fixUpperEdge&&(libtess.assert(f!==e),libtess.sweep.deleteRegion_(a,d),libtess.mesh.deleteEdge(e),e=f.oPrev());libtess.mesh.meshSplice(c.anEdge, +e);libtess.geom.edgeGoesLeft(f)||(f=null);libtess.sweep.addRightEdges_(a,b,e.oNext,g,f,!0)}else libtess.mesh.splitEdge(d.sym),b.fixUpperEdge&&(libtess.mesh.deleteEdge(d.oNext),b.fixUpperEdge=!1),libtess.mesh.meshSplice(c.anEdge,d),libtess.sweep.sweepEvent_(a,c)}; +libtess.sweep.connectLeftVertex_=function(a,b){var c=new libtess.ActiveRegion;c.eUp=b.anEdge.sym;var c=a.dict.search(c).getKey(),d=c.regionBelow(),e=c.eUp,f=d.eUp;0===libtess.geom.edgeSign(e.dst(),b,e.org)?libtess.sweep.connectLeftDegenerate_(a,c,b):(d=libtess.geom.vertLeq(f.dst(),e.dst())?c:d,c.inside||d.fixUpperEdge?(e=d===c?libtess.mesh.connect(b.anEdge.sym,e.lNext):libtess.mesh.connect(f.dNext(),b.anEdge).sym,d.fixUpperEdge?libtess.sweep.fixUpperEdge_(d,e):libtess.sweep.computeWinding_(a,libtess.sweep.addRegionBelow_(a, +c,e)),libtess.sweep.sweepEvent_(a,b)):libtess.sweep.addRightEdges_(a,c,b.anEdge,b.anEdge,null,!0))}; +libtess.sweep.sweepEvent_=function(a,b){a.event=b;libtess.sweepDebugEvent(a);for(var c=b.anEdge;null===c.activeRegion;)if(c=c.oNext,c===b.anEdge){libtess.sweep.connectLeftVertex_(a,b);return}var c=libtess.sweep.topLeftRegion_(c.activeRegion),d=c.regionBelow(),e=d.eUp,d=libtess.sweep.finishLeftRegions_(a,d,null);d.oNext===e?libtess.sweep.connectRightVertex_(a,c,d):libtess.sweep.addRightEdges_(a,c,d.oNext,e,e,!0)}; +libtess.sweep.addSentinel_=function(a,b){var c=new libtess.ActiveRegion,d=libtess.mesh.makeEdge(a.mesh);d.org.s=libtess.sweep.SENTINEL_COORD_;d.org.t=b;d.dst().s=-libtess.sweep.SENTINEL_COORD_;d.dst().t=b;a.event=d.dst();c.eUp=d;c.windingNumber=0;c.inside=!1;c.fixUpperEdge=!1;c.sentinel=!0;c.dirty=!1;c.nodeUp=a.dict.insert(c)}; +libtess.sweep.initEdgeDict_=function(a){a.dict=new libtess.Dict(a,libtess.sweep.edgeLeq_);libtess.sweep.addSentinel_(a,-libtess.sweep.SENTINEL_COORD_);libtess.sweep.addSentinel_(a,libtess.sweep.SENTINEL_COORD_)};libtess.sweep.doneEdgeDict_=function(a){for(var b=0,c;null!==(c=a.dict.getMin().getKey());)c.sentinel||(libtess.assert(c.fixUpperEdge),libtess.assert(1===++b)),libtess.assert(0===c.windingNumber),libtess.sweep.deleteRegion_(a,c);a.dict.deleteDict();a.dict=null}; +libtess.sweep.removeDegenerateEdges_=function(a){for(var b=a.mesh.eHead,c,d=b.next;d!==b;d=c){c=d.next;var e=d.lNext;libtess.geom.vertEq(d.org,d.dst())&&d.lNext.lNext!==d&&(libtess.sweep.spliceMergeVertices_(a,e,d),libtess.mesh.deleteEdge(d),d=e,e=d.lNext);if(e.lNext===d){if(e!==d){if(e===c||e===c.sym)c=c.next;libtess.mesh.deleteEdge(e)}if(d===c||d===c.sym)c=c.next;libtess.mesh.deleteEdge(d)}}}; +libtess.sweep.initPriorityQ_=function(a){var b=new libtess.PriorityQ(libtess.geom.vertLeq);a.pq=b;a=a.mesh.vHead;var c;for(c=a.next;c!==a;c=c.next)c.pqHandle=b.insert(c);b.init()};libtess.sweep.donePriorityQ_=function(a){a.pq.deleteQ();a.pq=null};libtess.sweep.removeDegenerateFaces_=function(a){for(var b,c=a.fHead.next;c!==a.fHead;c=b)b=c.next,c=c.anEdge,libtess.assert(c.lNext!==c),c.lNext.lNext===c&&(libtess.sweep.addWinding_(c.oNext,c),libtess.mesh.deleteEdge(c))};libtess.tessmono={}; +libtess.tessmono.tessellateMonoRegion_=function(a){a=a.anEdge;for(libtess.assert(a.lNext!==a&&a.lNext.lNext!==a);libtess.geom.vertLeq(a.dst(),a.org);a=a.lPrev());for(;libtess.geom.vertLeq(a.org,a.dst());a=a.lNext);for(var b=a.lPrev(),c;a.lNext!==b;)if(libtess.geom.vertLeq(a.dst(),b.org)){for(;b.lNext!==a&&(libtess.geom.edgeGoesLeft(b.lNext)||0>=libtess.geom.edgeSign(b.org,b.dst(),b.lNext.dst()));)c=libtess.mesh.connect(b.lNext,b),b=c.sym;b=b.lPrev()}else{for(;b.lNext!==a&&(libtess.geom.edgeGoesRight(a.lPrev())||0<= +libtess.geom.edgeSign(a.dst(),a.org,a.lPrev().org));)c=libtess.mesh.connect(a,a.lPrev()),a=c.sym;a=a.lNext}for(libtess.assert(b.lNext!==a);b.lNext.lNext!==a;)c=libtess.mesh.connect(b.lNext,b),b=c.sym};libtess.tessmono.tessellateInterior=function(a){for(var b,c=a.fHead.next;c!==a.fHead;c=b)b=c.next,c.inside&&libtess.tessmono.tessellateMonoRegion_(c)};libtess.tessmono.discardExterior=function(a){for(var b,c=a.fHead.next;c!==a.fHead;c=b)b=c.next,c.inside||libtess.mesh.zapFace(c)}; +libtess.tessmono.setWindingNumber=function(a,b,c){for(var d,e=a.eHead.next;e!==a.eHead;e=d)d=e.next,e.rFace().inside!==e.lFace.inside?e.winding=e.lFace.inside?b:-b:c?libtess.mesh.deleteEdge(e):e.winding=0};libtess.GluTesselator=function(){this.state=libtess.tessState.T_DORMANT;this.callError_=this.mesh=this.lastEdge_=null;this.normal=[0,0,0];this.sUnit=[0,0,0];this.tUnit=[0,0,0];this.relTolerance=libtess.GLU_TESS_DEFAULT_TOLERANCE;this.windingRule=libtess.windingRule.GLU_TESS_WINDING_ODD;this.fatalError=!1;this.callCombine_=this.event=this.pq=this.dict=null;this.boundaryOnly=this.flagBoundary=!1;this.polygonData_=this.callCombineData_=this.callErrorData_=this.callEndData_=this.callVertexData_=this.callEdgeFlagData_= +this.callBeginData_=this.callMesh_=this.callEnd_=this.callVertex_=this.callEdgeFlag_=this.callBegin_=this.lonelyTriList=null;this.emptyCache=!1;this.cacheCount=0;this.cache=Array(libtess.TESS_MAX_CACHE);for(var a=0;ab||1=this.relTolerance),this.relTolerance;case libtess.gluEnum.GLU_TESS_WINDING_RULE:return a=this.windingRule,libtess.assert(a===libtess.windingRule.GLU_TESS_WINDING_ODD||a===libtess.windingRule.GLU_TESS_WINDING_NONZERO||a===libtess.windingRule.GLU_TESS_WINDING_POSITIVE||a===libtess.windingRule.GLU_TESS_WINDING_NEGATIVE||a===libtess.windingRule.GLU_TESS_WINDING_ABS_GEQ_TWO), +a;case libtess.gluEnum.GLU_TESS_BOUNDARY_ONLY:return libtess.assert(!0===this.boundaryOnly||!1===this.boundaryOnly),this.boundaryOnly;default:this.callErrorOrErrorData(libtess.gluEnum.GLU_INVALID_ENUM)}return!1};libtess.GluTesselator.prototype.gluTessNormal=function(a,b,c){this.normal[0]=a;this.normal[1]=b;this.normal[2]=c}; +libtess.GluTesselator.prototype.gluTessCallback=function(a,b){var c=b?b:null;switch(a){case libtess.gluEnum.GLU_TESS_BEGIN:this.callBegin_=c;break;case libtess.gluEnum.GLU_TESS_BEGIN_DATA:this.callBeginData_=c;break;case libtess.gluEnum.GLU_TESS_EDGE_FLAG:this.callEdgeFlag_=c;this.flagBoundary=!!c;break;case libtess.gluEnum.GLU_TESS_EDGE_FLAG_DATA:this.callEdgeFlagData_=c;this.flagBoundary=!!c;break;case libtess.gluEnum.GLU_TESS_VERTEX:this.callVertex_=c;break;case libtess.gluEnum.GLU_TESS_VERTEX_DATA:this.callVertexData_= +c;break;case libtess.gluEnum.GLU_TESS_END:this.callEnd_=c;break;case libtess.gluEnum.GLU_TESS_END_DATA:this.callEndData_=c;break;case libtess.gluEnum.GLU_TESS_ERROR:this.callError_=c;break;case libtess.gluEnum.GLU_TESS_ERROR_DATA:this.callErrorData_=c;break;case libtess.gluEnum.GLU_TESS_COMBINE:this.callCombine_=c;break;case libtess.gluEnum.GLU_TESS_COMBINE_DATA:this.callCombineData_=c;break;case libtess.gluEnum.GLU_TESS_MESH:this.callMesh_=c;break;default:this.callErrorOrErrorData(libtess.gluEnum.GLU_INVALID_ENUM)}}; +libtess.GluTesselator.prototype.gluTessVertex=function(a,b){var c=!1,d=[0,0,0];this.requireState_(libtess.tessState.T_IN_CONTOUR);this.emptyCache&&(this.emptyCache_(),this.lastEdge_=null);for(var e=0;3>e;++e){var f=a[e];f<-libtess.GLU_TESS_MAX_COORD&&(f=-libtess.GLU_TESS_MAX_COORD,c=!0);f>libtess.GLU_TESS_MAX_COORD&&(f=libtess.GLU_TESS_MAX_COORD,c=!0);d[e]=f}c&&this.callErrorOrErrorData(libtess.errorType.GLU_TESS_COORD_TOO_LARGE);if(null===this.mesh){if(this.cacheCount=a||"\u0080"<=a&&"\ufffd">=a};goog.string.stripNewlines=function(a){return a.replace(/(\r\n|\r|\n)+/g," ")}; +goog.string.canonicalizeNewlines=function(a){return a.replace(/(\r\n|\r|\n)/g,"\n")};goog.string.normalizeWhitespace=function(a){return a.replace(/\xa0|\s/g," ")};goog.string.normalizeSpaces=function(a){return a.replace(/\xa0|[ \t]+/g," ")};goog.string.collapseBreakingSpaces=function(a){return a.replace(/[\t\r\n ]+/g," ").replace(/^[\t\r\n ]+|[\t\r\n ]+$/g,"")};goog.string.trim=function(a){return a.replace(/^[\s\xa0]+|[\s\xa0]+$/g,"")}; +goog.string.trimLeft=function(a){return a.replace(/^[\s\xa0]+/,"")};goog.string.trimRight=function(a){return a.replace(/[\s\xa0]+$/,"")};goog.string.caseInsensitiveCompare=function(a,b){var c=String(a).toLowerCase(),d=String(b).toLowerCase();return c/g;goog.string.quotRe_=/\"/g;goog.string.allRe_=/[&<>\"]/;goog.string.unescapeEntities=function(a){return goog.string.contains(a,"\x26")?"document"in goog.global?goog.string.unescapeEntitiesUsingDom_(a):goog.string.unescapePureXmlEntities_(a):a}; +goog.string.unescapeEntitiesUsingDom_=function(a){var b={"\x26amp;":"\x26","\x26lt;":"\x3c","\x26gt;":"\x3e","\x26quot;":'"'},c=document.createElement("div");return a.replace(goog.string.HTML_ENTITY_PATTERN_,function(a,e){var f=b[a];if(f)return f;if("#"==e.charAt(0)){var g=Number("0"+e.substr(1));isNaN(g)||(f=String.fromCharCode(g))}f||(c.innerHTML=a+" ",f=c.firstChild.nodeValue.slice(0,-1));return b[a]=f})}; +goog.string.unescapePureXmlEntities_=function(a){return a.replace(/&([^;]+);/g,function(a,c){switch(c){case "amp":return"\x26";case "lt":return"\x3c";case "gt":return"\x3e";case "quot":return'"';default:if("#"==c.charAt(0)){var d=Number("0"+c.substr(1));if(!isNaN(d))return String.fromCharCode(d)}return a}})};goog.string.HTML_ENTITY_PATTERN_=/&([^;\s<&]+);?/g;goog.string.whitespaceEscape=function(a,b){return goog.string.newLineToBr(a.replace(/ /g," \x26#160;"),b)}; +goog.string.stripQuotes=function(a,b){for(var c=b.length,d=0;db&&(a=a.substring(0,b-3)+"...");c&&(a=goog.string.htmlEscape(a));return a}; +goog.string.truncateMiddle=function(a,b,c,d){c&&(a=goog.string.unescapeEntities(a));if(d&&a.length>b){d>b&&(d=b);var e=a.length-d;a=a.substring(0,b-d)+"..."+a.substring(e)}else a.length>b&&(d=Math.floor(b/2),e=a.length-d,a=a.substring(0,d+b%2)+"..."+a.substring(e));c&&(a=goog.string.htmlEscape(a));return a};goog.string.specialEscapeChars_={"\x00":"\\0","\b":"\\b","\f":"\\f","\n":"\\n","\r":"\\r","\t":"\\t","\x0B":"\\x0B",'"':'\\"',"\\":"\\\\"};goog.string.jsEscapeCache_={"'":"\\'"}; +goog.string.quote=function(a){a=String(a);if(a.quote)return a.quote();for(var b=['"'],c=0;ce?d:goog.string.escapeChar(d))}b.push('"');return b.join("")};goog.string.escapeString=function(a){for(var b=[],c=0;cc)b=a;else{if(256>c){if(b="\\x",16>c||256c&&(b+="0");b+=c.toString(16).toUpperCase()}return goog.string.jsEscapeCache_[a]=b};goog.string.toMap=function(a){for(var b={},c=0;cb?1:0};goog.string.HASHCODE_MAX_=4294967296;goog.string.hashCode=function(a){for(var b=0,c=0;cc?Math.max(0,a.length+c):c;if(goog.isString(a))return goog.isString(b)&&1==b.length?a.indexOf(b,c):-1;for(;cc&&(c=Math.max(0,a.length+c));if(goog.isString(a))return goog.isString(b)&&1==b.length?a.lastIndexOf(b,c):-1;for(;0<=c;c--)if(c in a&&a[c]===b)return c;return-1}; +goog.array.forEach=goog.NATIVE_ARRAY_PROTOTYPES&&goog.array.ARRAY_PROTOTYPE_.forEach?function(a,b,c){goog.array.ARRAY_PROTOTYPE_.forEach.call(a,b,c)}:function(a,b,c){for(var d=a.length,e=goog.isString(a)?a.split(""):a,f=0;fb?null:goog.isString(a)?a.charAt(b):a[b]};goog.array.findIndex=function(a,b,c){for(var d=a.length,e=goog.isString(a)?a.split(""):a,f=0;fb?null:goog.isString(a)?a.charAt(b):a[b]}; +goog.array.findIndexRight=function(a,b,c){for(var d=a.length,e=goog.isString(a)?a.split(""):a,d=d-1;0<=d;d--)if(d in e&&b.call(c,e[d],d,a))return d;return-1};goog.array.contains=function(a,b){return 0<=goog.array.indexOf(a,b)};goog.array.isEmpty=function(a){return 0==a.length};goog.array.clear=function(a){if(!goog.isArray(a))for(var b=a.length-1;0<=b;b--)delete a[b];a.length=0};goog.array.insert=function(a,b){goog.array.contains(a,b)||a.push(b)}; +goog.array.insertAt=function(a,b,c){goog.array.splice(a,c,0,b)};goog.array.insertArrayAt=function(a,b,c){goog.partial(goog.array.splice,a,c,0).apply(null,b)};goog.array.insertBefore=function(a,b,c){var d;2==arguments.length||0>(d=goog.array.indexOf(a,c))?a.push(b):goog.array.insertAt(a,b,d)};goog.array.remove=function(a,b){var c=goog.array.indexOf(a,b),d;(d=0<=c)&&goog.array.removeAt(a,c);return d};goog.array.removeAt=function(a,b){return 1==goog.array.ARRAY_PROTOTYPE_.splice.call(a,b,1).length}; +goog.array.removeIf=function(a,b,c){b=goog.array.findIndex(a,b,c);return 0<=b?(goog.array.removeAt(a,b),!0):!1};goog.array.concat=function(a){return goog.array.ARRAY_PROTOTYPE_.concat.apply(goog.array.ARRAY_PROTOTYPE_,arguments)};goog.array.toArray=function(a){var b=a.length;if(0=arguments.length?goog.array.ARRAY_PROTOTYPE_.slice.call(a,b):goog.array.ARRAY_PROTOTYPE_.slice.call(a,b,c)};goog.array.removeDuplicates=function(a,b){for(var c=b||a,d={},e=0,f=0;f>1,l;l=c?b.call(e,a[k],k,a):b(d,a[k]);0b?1:ac?(goog.array.insertAt(a,b,-(c+1)),!0):!1}; +goog.array.binaryRemove=function(a,b,c){b=goog.array.binarySearch(a,b,c);return 0<=b?goog.array.removeAt(a,b):!1};goog.array.bucket=function(a,b,c){for(var d={},e=0;ec*(f-e))return[];if(0f;a+=c)d.push(a);return d};goog.array.repeat=function(a,b){for(var c=[],d=0;db&&goog.array.ARRAY_PROTOTYPE_.push.apply(a,a.splice(0,-b)));return a};goog.array.moveItem=function(a,b,c){b=goog.array.ARRAY_PROTOTYPE_.splice.call(a,b,1);goog.array.ARRAY_PROTOTYPE_.splice.call(a,c,0,b[0])};goog.array.zip=function(a){if(!arguments.length)return[];for(var b=[],c=0;;c++){for(var d=[],e=0;e=f.length)return b;d.push(f[c])}b.push(d)}}; +goog.array.shuffle=function(a,b){for(var c=b||Math.random,d=a.length-1;0>=1}return new ol.TileCoord(b,c,d)}; +ol.TileCoord.createFromString=function(a){a=a.split("/");a=goog.array.map(a,function(a,c,d){return parseInt(a,10)});return new ol.TileCoord(a[0],a[1],a[2])};ol.TileCoord.createOrUpdate=function(a,b,c,d){return goog.isDef(d)?(d.z=a,d.x=b,d.y=c,d):new ol.TileCoord(a,b,c)};ol.TileCoord.getKeyZXY=function(a,b,c){return a+"/"+b+"/"+c};ol.TileCoord.prototype.getZXY=function(a){return goog.isDef(a)?(a[0]=this.z,a[1]=this.x,a[2]=this.y,a):[this.z,this.x,this.y]}; +ol.TileCoord.prototype.hash=function(){return(this.x<>=1;return a.join("")};ol.TileCoord.prototype.toString=function(){return ol.TileCoord.getKeyZXY(this.z,this.x,this.y)};ol.TileRange=function(a,b,c,d){this.minX=a;this.maxX=b;this.minY=c;this.maxY=d};ol.TileRange.boundingTileRange=function(a){var b=arguments[0],b=new ol.TileRange(b.x,b.x,b.y,b.y),c,d,e;c=1;for(d=arguments.length;cthis.maxX&&(this.maxX=a.maxX);a.minYthis.maxY&&(this.maxY=a.maxY)};ol.TileRange.prototype.getHeight=function(){return this.maxY-this.minY+1};ol.TileRange.prototype.getSize=function(){return[this.getWidth(),this.getHeight()]};ol.TileRange.prototype.getWidth=function(){return this.maxX-this.minX+1}; +ol.TileRange.prototype.intersects=function(a){return this.minX<=a.maxX&&this.maxX>=a.minX&&this.minY<=a.maxY&&this.maxY>=a.minY};ol.Attribution=function(a){this.html_=a.html;this.tileRanges_=goog.isDef(a.tileRanges)?a.tileRanges:null};ol.Attribution.prototype.getHTML=function(){return this.html_};ol.Attribution.prototype.intersectsAnyTileRange=function(a){if(goog.isNull(this.tileRanges_))return!0;var b,c,d,e;for(e in a)if(e in this.tileRanges_)for(d=a[e],b=0,c=this.tileRanges_[e].length;bparseFloat(a))?String(b):a}; +goog.userAgent.getDocumentMode_=function(){var a=goog.global.document;return a?a.documentMode:void 0};goog.userAgent.VERSION=goog.userAgent.determineVersion_();goog.userAgent.compare=function(a,b){return goog.string.compareVersions(a,b)};goog.userAgent.isVersionOrHigherCache_={}; +goog.userAgent.isVersionOrHigher=function(a){return goog.userAgent.ASSUME_ANY_VERSION||goog.userAgent.isVersionOrHigherCache_[a]||(goog.userAgent.isVersionOrHigherCache_[a]=0<=goog.string.compareVersions(goog.userAgent.VERSION,a))};goog.userAgent.isVersion=goog.userAgent.isVersionOrHigher;goog.userAgent.isDocumentModeOrHigher=function(a){return goog.userAgent.IE&&goog.userAgent.DOCUMENT_MODE>=a};goog.userAgent.isDocumentMode=goog.userAgent.isDocumentModeOrHigher; +goog.userAgent.DOCUMENT_MODE=function(){var a=goog.global.document;return a&&goog.userAgent.IE?goog.userAgent.getDocumentMode_()||("CSS1Compat"==a.compatMode?parseInt(goog.userAgent.VERSION,10):5):void 0}();goog.dom={};goog.dom.BrowserFeature={CAN_ADD_NAME_OR_TYPE_ATTRIBUTES:!goog.userAgent.IE||goog.userAgent.isDocumentModeOrHigher(9),CAN_USE_CHILDREN_ATTRIBUTE:!goog.userAgent.GECKO&&!goog.userAgent.IE||goog.userAgent.IE&&goog.userAgent.isDocumentModeOrHigher(9)||goog.userAgent.GECKO&&goog.userAgent.isVersionOrHigher("1.9.1"),CAN_USE_INNER_TEXT:goog.userAgent.IE&&!goog.userAgent.isVersionOrHigher("9"),CAN_USE_PARENT_ELEMENT_PROPERTY:goog.userAgent.IE||goog.userAgent.OPERA||goog.userAgent.WEBKIT,INNER_HTML_NEEDS_SCOPED_ELEMENT:goog.userAgent.IE};goog.dom.TagName={A:"A",ABBR:"ABBR",ACRONYM:"ACRONYM",ADDRESS:"ADDRESS",APPLET:"APPLET",AREA:"AREA",ARTICLE:"ARTICLE",ASIDE:"ASIDE",AUDIO:"AUDIO",B:"B",BASE:"BASE",BASEFONT:"BASEFONT",BDI:"BDI",BDO:"BDO",BIG:"BIG",BLOCKQUOTE:"BLOCKQUOTE",BODY:"BODY",BR:"BR",BUTTON:"BUTTON",CANVAS:"CANVAS",CAPTION:"CAPTION",CENTER:"CENTER",CITE:"CITE",CODE:"CODE",COL:"COL",COLGROUP:"COLGROUP",COMMAND:"COMMAND",DATA:"DATA",DATALIST:"DATALIST",DD:"DD",DEL:"DEL",DETAILS:"DETAILS",DFN:"DFN",DIALOG:"DIALOG",DIR:"DIR",DIV:"DIV", +DL:"DL",DT:"DT",EM:"EM",EMBED:"EMBED",FIELDSET:"FIELDSET",FIGCAPTION:"FIGCAPTION",FIGURE:"FIGURE",FONT:"FONT",FOOTER:"FOOTER",FORM:"FORM",FRAME:"FRAME",FRAMESET:"FRAMESET",H1:"H1",H2:"H2",H3:"H3",H4:"H4",H5:"H5",H6:"H6",HEAD:"HEAD",HEADER:"HEADER",HGROUP:"HGROUP",HR:"HR",HTML:"HTML",I:"I",IFRAME:"IFRAME",IMG:"IMG",INPUT:"INPUT",INS:"INS",ISINDEX:"ISINDEX",KBD:"KBD",KEYGEN:"KEYGEN",LABEL:"LABEL",LEGEND:"LEGEND",LI:"LI",LINK:"LINK",MAP:"MAP",MARK:"MARK",MATH:"MATH",MENU:"MENU",META:"META",METER:"METER", +NAV:"NAV",NOFRAMES:"NOFRAMES",NOSCRIPT:"NOSCRIPT",OBJECT:"OBJECT",OL:"OL",OPTGROUP:"OPTGROUP",OPTION:"OPTION",OUTPUT:"OUTPUT",P:"P",PARAM:"PARAM",PRE:"PRE",PROGRESS:"PROGRESS",Q:"Q",RP:"RP",RT:"RT",RUBY:"RUBY",S:"S",SAMP:"SAMP",SCRIPT:"SCRIPT",SECTION:"SECTION",SELECT:"SELECT",SMALL:"SMALL",SOURCE:"SOURCE",SPAN:"SPAN",STRIKE:"STRIKE",STRONG:"STRONG",STYLE:"STYLE",SUB:"SUB",SUMMARY:"SUMMARY",SUP:"SUP",SVG:"SVG",TABLE:"TABLE",TBODY:"TBODY",TD:"TD",TEXTAREA:"TEXTAREA",TFOOT:"TFOOT",TH:"TH",THEAD:"THEAD", +TIME:"TIME",TITLE:"TITLE",TR:"TR",TRACK:"TRACK",TT:"TT",U:"U",UL:"UL",VAR:"VAR",VIDEO:"VIDEO",WBR:"WBR"};goog.dom.classes={};goog.dom.classes.set=function(a,b){a.className=b};goog.dom.classes.get=function(a){a=a.className;return goog.isString(a)&&a.match(/\S+/g)||[]};goog.dom.classes.add=function(a,b){var c=goog.dom.classes.get(a),d=goog.array.slice(arguments,1),e=c.length+d.length;goog.dom.classes.add_(c,d);goog.dom.classes.set(a,c.join(" "));return c.length==e}; +goog.dom.classes.remove=function(a,b){var c=goog.dom.classes.get(a),d=goog.array.slice(arguments,1),e=goog.dom.classes.getDifference_(c,d);goog.dom.classes.set(a,e.join(" "));return e.length==c.length-d.length};goog.dom.classes.add_=function(a,b){for(var c=0;cc*b?c+b:c};goog.math.lerp=function(a,b,c){return a+c*(b-a)};goog.math.nearlyEquals=function(a,b,c){return Math.abs(a-b)<=(c||1E-6)};goog.math.standardAngle=function(a){return goog.math.modulo(a,360)}; +goog.math.toRadians=function(a){return a*Math.PI/180};goog.math.toDegrees=function(a){return 180*a/Math.PI};goog.math.angleDx=function(a,b){return b*Math.cos(goog.math.toRadians(a))};goog.math.angleDy=function(a,b){return b*Math.sin(goog.math.toRadians(a))};goog.math.angle=function(a,b,c,d){return goog.math.standardAngle(goog.math.toDegrees(Math.atan2(d-b,c-a)))};goog.math.angleDifference=function(a,b){var c=goog.math.standardAngle(b)-goog.math.standardAngle(a);180=c&&(c=360+c);return c}; +goog.math.sign=function(a){return 0==a?0:0>a?-1:1};goog.math.longestCommonSubsequence=function(a,b,c,d){c=c||function(a,b){return a==b};d=d||function(b,c){return a[b]};for(var e=a.length,f=b.length,g=[],h=0;hg[h][k-1]?h--:k--;return l}; +goog.math.sum=function(a){return goog.array.reduce(arguments,function(a,c){return a+c},0)};goog.math.average=function(a){return goog.math.sum.apply(null,arguments)/arguments.length};goog.math.standardDeviation=function(a){var b=arguments.length;if(2>b)return 0;var c=goog.math.average.apply(null,arguments),b=goog.math.sum.apply(null,goog.array.map(arguments,function(a){return Math.pow(a-c,2)}))/(b-1);return Math.sqrt(b)};goog.math.isInt=function(a){return isFinite(a)&&0==a%1}; +goog.math.isFiniteNumber=function(a){return isFinite(a)&&!isNaN(a)};goog.math.safeFloor=function(a,b){return Math.floor(a+(b||2E-15))};goog.math.safeCeil=function(a,b){return Math.ceil(a-(b||2E-15))};goog.math.Coordinate=function(a,b){this.x=goog.isDef(a)?a:0;this.y=goog.isDef(b)?b:0};goog.math.Coordinate.prototype.clone=function(){return new goog.math.Coordinate(this.x,this.y)};goog.DEBUG&&(goog.math.Coordinate.prototype.toString=function(){return"("+this.x+", "+this.y+")"});goog.math.Coordinate.equals=function(a,b){return a==b?!0:a&&b?a.x==b.x&&a.y==b.y:!1};goog.math.Coordinate.distance=function(a,b){var c=a.x-b.x,d=a.y-b.y;return Math.sqrt(c*c+d*d)}; +goog.math.Coordinate.magnitude=function(a){return Math.sqrt(a.x*a.x+a.y*a.y)};goog.math.Coordinate.azimuth=function(a){return goog.math.angle(0,0,a.x,a.y)};goog.math.Coordinate.squaredDistance=function(a,b){var c=a.x-b.x,d=a.y-b.y;return c*c+d*d};goog.math.Coordinate.difference=function(a,b){return new goog.math.Coordinate(a.x-b.x,a.y-b.y)};goog.math.Coordinate.sum=function(a,b){return new goog.math.Coordinate(a.x+b.x,a.y+b.y)}; +goog.math.Coordinate.prototype.ceil=function(){this.x=Math.ceil(this.x);this.y=Math.ceil(this.y);return this};goog.math.Coordinate.prototype.floor=function(){this.x=Math.floor(this.x);this.y=Math.floor(this.y);return this};goog.math.Coordinate.prototype.round=function(){this.x=Math.round(this.x);this.y=Math.round(this.y);return this};goog.math.Coordinate.prototype.translate=function(a,b){a instanceof goog.math.Coordinate?(this.x+=a.x,this.y+=a.y):(this.x+=a,goog.isNumber(b)&&(this.y+=b));return this}; +goog.math.Coordinate.prototype.scale=function(a,b){var c=goog.isNumber(b)?b:a;this.x*=a;this.y*=c;return this};goog.math.Size=function(a,b){this.width=a;this.height=b};goog.math.Size.equals=function(a,b){return a==b?!0:a&&b?a.width==b.width&&a.height==b.height:!1};goog.math.Size.prototype.clone=function(){return new goog.math.Size(this.width,this.height)};goog.DEBUG&&(goog.math.Size.prototype.toString=function(){return"("+this.width+" x "+this.height+")"});goog.math.Size.prototype.getLongest=function(){return Math.max(this.width,this.height)}; +goog.math.Size.prototype.getShortest=function(){return Math.min(this.width,this.height)};goog.math.Size.prototype.area=function(){return this.width*this.height};goog.math.Size.prototype.perimeter=function(){return 2*(this.width+this.height)};goog.math.Size.prototype.aspectRatio=function(){return this.width/this.height};goog.math.Size.prototype.isEmpty=function(){return!this.area()};goog.math.Size.prototype.ceil=function(){this.width=Math.ceil(this.width);this.height=Math.ceil(this.height);return this}; +goog.math.Size.prototype.fitsInside=function(a){return this.width<=a.width&&this.height<=a.height};goog.math.Size.prototype.floor=function(){this.width=Math.floor(this.width);this.height=Math.floor(this.height);return this};goog.math.Size.prototype.round=function(){this.width=Math.round(this.width);this.height=Math.round(this.height);return this};goog.math.Size.prototype.scale=function(a,b){var c=goog.isNumber(b)?b:a;this.width*=a;this.height*=c;return this}; +goog.math.Size.prototype.scaleToFit=function(a){a=this.aspectRatio()>a.aspectRatio()?a.width/this.width:a.height/this.height;return this.scale(a)};goog.object={};goog.object.forEach=function(a,b,c){for(var d in a)b.call(c,a[d],d,a)};goog.object.filter=function(a,b,c){var d={},e;for(e in a)b.call(c,a[e],e,a)&&(d[e]=a[e]);return d};goog.object.map=function(a,b,c){var d={},e;for(e in a)d[e]=b.call(c,a[e],e,a);return d};goog.object.some=function(a,b,c){for(var d in a)if(b.call(c,a[d],d,a))return!0;return!1};goog.object.every=function(a,b,c){for(var d in a)if(!b.call(c,a[d],d,a))return!1;return!0}; +goog.object.getCount=function(a){var b=0,c;for(c in a)b++;return b};goog.object.getAnyKey=function(a){for(var b in a)return b};goog.object.getAnyValue=function(a){for(var b in a)return a[b]};goog.object.contains=function(a,b){return goog.object.containsValue(a,b)};goog.object.getValues=function(a){var b=[],c=0,d;for(d in a)b[c++]=a[d];return b};goog.object.getKeys=function(a){var b=[],c=0,d;for(d in a)b[c++]=d;return b}; +goog.object.getValueByKeys=function(a,b){for(var c=goog.isArrayLike(b),d=c?b:arguments,c=c?0:1;ca?b>e?b:e:ba):!1};goog.dom.setFocusableTabIndex=function(a,b){b?a.tabIndex=0:(a.tabIndex=-1,a.removeAttribute("tabIndex"))}; +goog.dom.getTextContent=function(a){if(goog.dom.BrowserFeature.CAN_USE_INNER_TEXT&&"innerText"in a)a=goog.string.canonicalizeNewlines(a.innerText);else{var b=[];goog.dom.getTextContent_(a,b,!0);a=b.join("")}a=a.replace(/ \xAD /g," ").replace(/\xAD/g,"");a=a.replace(/\u200B/g,"");goog.dom.BrowserFeature.CAN_USE_INNER_TEXT||(a=a.replace(/ +/g," "));" "!=a&&(a=a.replace(/^\s*/,""));return a};goog.dom.getRawTextContent=function(a){var b=[];goog.dom.getTextContent_(a,b,!1);return b.join("")}; +goog.dom.getTextContent_=function(a,b,c){if(!(a.nodeName in goog.dom.TAGS_TO_IGNORE_))if(a.nodeType==goog.dom.NodeType.TEXT)c?b.push(String(a.nodeValue).replace(/(\r\n|\r|\n)/g,"")):b.push(a.nodeValue);else if(a.nodeName in goog.dom.PREDEFINED_TAG_VALUES_)b.push(goog.dom.PREDEFINED_TAG_VALUES_[a.nodeName]);else for(a=a.firstChild;a;)goog.dom.getTextContent_(a,b,c),a=a.nextSibling};goog.dom.getNodeTextLength=function(a){return goog.dom.getTextContent(a).length}; +goog.dom.getNodeTextOffset=function(a,b){for(var c=b||goog.dom.getOwnerDocument(a).body,d=[];a&&a!=c;){for(var e=a;e=e.previousSibling;)d.unshift(goog.dom.getTextContent(e));a=a.parentNode}return goog.string.trimLeft(d.join("")).replace(/ +/g," ").length}; +goog.dom.getNodeAtOffset=function(a,b,c){a=[a];for(var d=0,e=null;0=a.keyCode)a.keyCode=-1}catch(b){}};goog.events.BrowserEvent.prototype.getBrowserEvent=function(){return this.event_};goog.events.BrowserEvent.prototype.disposeInternal=function(){};goog.events.Listenable=function(){};goog.events.Listenable.IMPLEMENTED_BY_PROP="closure_listenable_"+(1E6*Math.random()|0);goog.events.Listenable.addImplementation=function(a){a.prototype[goog.events.Listenable.IMPLEMENTED_BY_PROP]=!0};goog.events.Listenable.isImplementedBy=function(a){return!(!a||!a[goog.events.Listenable.IMPLEMENTED_BY_PROP])};goog.events.ListenableKey=function(){};goog.events.ListenableKey.counter_=0;goog.events.ListenableKey.reserveKey=function(){return++goog.events.ListenableKey.counter_};goog.events.Listener=function(a,b,c,d,e,f){goog.events.Listener.ENABLE_MONITORING&&(this.creationStack=Error().stack);this.listener=a;this.proxy=b;this.src=c;this.type=d;this.capture=!!e;this.handler=f;this.key=goog.events.ListenableKey.reserveKey();this.removed=this.callOnce=!1};goog.events.Listener.ENABLE_MONITORING=!1;goog.events.Listener.prototype.markAsRemoved=function(){this.removed=!0;this.handler=this.src=this.proxy=this.listener=null};goog.events.listeners_={};goog.events.listenerTree_={};goog.events.sources_={};goog.events.onString_="on";goog.events.onStringMap_={};goog.events.keySeparator_="_";goog.events.listen=function(a,b,c,d,e){if(goog.isArray(b)){for(var f=0;fa.keyCode||void 0!=a.returnValue};goog.events.uniqueIdCounter_=0;goog.events.getUniqueId=function(a){return a+"_"+goog.events.uniqueIdCounter_++};goog.events.LISTENER_WRAPPER_PROP_="__closure_events_fn_"+(1E9*Math.random()>>>0);goog.events.wrapListener_=function(a){return goog.isFunction(a)?a:a[goog.events.LISTENER_WRAPPER_PROP_]||(a[goog.events.LISTENER_WRAPPER_PROP_]=function(b){return a.handleEvent(b)})};goog.functions={};goog.functions.constant=function(a){return function(){return a}};goog.functions.FALSE=goog.functions.constant(!1);goog.functions.TRUE=goog.functions.constant(!0);goog.functions.NULL=goog.functions.constant(null);goog.functions.identity=function(a,b){return a};goog.functions.error=function(a){return function(){throw Error(a);}};goog.functions.fail=function(a){return function(){throw a;}}; +goog.functions.lock=function(a,b){b=b||0;return function(){return a.apply(this,Array.prototype.slice.call(arguments,0,b))}};goog.functions.withReturnValue=function(a,b){return goog.functions.sequence(a,goog.functions.constant(b))};goog.functions.compose=function(a,b){var c=arguments,d=c.length;return function(){var a;d&&(a=c[d-1].apply(this,arguments));for(var b=d-2;0<=b;b--)a=c[b].call(this,a);return a}}; +goog.functions.sequence=function(a){var b=arguments,c=b.length;return function(){for(var a,e=0;ec)for(c=1;cf?1:0.5,d=Math.floor(Math.log(b/d)/Math.log(a)+f),e=Math.max(d+e,0),goog.isDef(c)&&(e=Math.min(e,c)),b/Math.pow(a,e)}};ol.RotationConstraint={};ol.RotationConstraint.disable=function(a,b){if(goog.isDef(a))return 0};ol.RotationConstraint.none=function(a,b){if(goog.isDef(a))return a+b};ol.RotationConstraint.createSnapToN=function(a){var b=2*Math.PI/a;return function(a,d){if(goog.isDef(a))return a=Math.floor((a+d)/b+0.5)*b}};ol.RotationConstraint.createSnapToZero=function(a){var b=a||goog.math.toRadians(5);return function(a,d){if(goog.isDef(a))return Math.abs(a+d)<=b?0:a+d}};ol.Constraints=function(a,b,c){this.center=a;this.resolution=b;this.rotation=c};ol.coordinate={};ol.coordinate.add=function(a,b){a[0]+=b[0];a[1]+=b[1];return a};ol.coordinate.closestOnSegment=function(a,b){var c=a[0],d=a[1],e=b[0],f=b[1],g=e[0],e=e[1],h=f[0],f=f[1],k=h-g,l=f-e,c=0==k&&0==l?0:(k*(c-g)+l*(d-e))/(k*k+l*l||0);0>=c||(1<=c?(g=h,e=f):(g+=c*k,e+=c*l));return[g,e]};ol.coordinate.createStringXY=function(a){return function(b){return ol.coordinate.toStringXY(b,a)}}; +ol.coordinate.degreesToStringHDMS_=function(a,b){var c=goog.math.modulo(a+180,360)-180,d=Math.abs(Math.round(3600*c));return Math.floor(d/3600)+"\u00b0 "+Math.floor(d/60%60)+"\u2032 "+Math.floor(d%60)+"\u2033 "+b.charAt(0>c?1:0)};ol.coordinate.format=function(a,b,c){return goog.isDef(a)?b.replace("{x}",a[0].toFixed(c)).replace("{y}",a[1].toFixed(c)):""};ol.coordinate.equals=function(a,b){for(var c=!0,d=a.length-1;0<=d;--d)if(a[d]!=b[d]){c=!1;break}return c}; +ol.coordinate.rotate=function(a,b){var c=Math.cos(b),d=Math.sin(b),e=a[1]*c+a[0]*d;a[0]=a[0]*c-a[1]*d;a[1]=e;return a};ol.coordinate.scale=function(a,b){a[0]*=b;a[1]*=b;return a};ol.coordinate.squaredDistance=function(a,b){var c=a[0]-b[0],d=a[1]-b[1];return c*c+d*d};ol.coordinate.squaredDistanceToSegment=function(a,b){return ol.coordinate.squaredDistance(a,ol.coordinate.closestOnSegment(a,b))}; +ol.coordinate.toStringHDMS=function(a){return goog.isDef(a)?ol.coordinate.degreesToStringHDMS_(a[1],"NS")+" "+ol.coordinate.degreesToStringHDMS_(a[0],"EW"):""};ol.coordinate.toStringXY=function(a,b){return ol.coordinate.format(a,"{x}, {y}",b)};ol.coordinate.fromProjectedArray=function(a,b){var c=b.charAt(0);return"n"===c||"s"===c?[a[1],a[0]]:a};ol.DeviceOrientationProperty={ALPHA:"alpha",BETA:"beta",GAMMA:"gamma",HEADING:"heading",TRACKING:"tracking"};ol.DeviceOrientation=function(a){ol.Object.call(this);a=goog.isDef(a)?a:{};this.listenerKey_=null;goog.events.listen(this,ol.Object.getChangeEventType(ol.DeviceOrientationProperty.TRACKING),this.handleTrackingChanged_,!1,this);this.setTracking(goog.isDef(a.tracking)?a.tracking:!1)};goog.inherits(ol.DeviceOrientation,ol.Object); +ol.DeviceOrientation.prototype.disposeInternal=function(){this.setTracking(!1);ol.DeviceOrientation.superClass_.disposeInternal.call(this)}; +ol.DeviceOrientation.prototype.orientationChange_=function(a){a=a.getBrowserEvent();if(goog.isDefAndNotNull(a.alpha)){var b=goog.math.toRadians(a.alpha);this.set(ol.DeviceOrientationProperty.ALPHA,b);goog.isBoolean(a.absolute)&&a.absolute?this.set(ol.DeviceOrientationProperty.HEADING,b):goog.isDefAndNotNull(a.webkitCompassHeading)&&(goog.isDefAndNotNull(a.webkitCompassAccuracy)&&-1!=a.webkitCompassAccuracy)&&(b=goog.math.toRadians(a.webkitCompassHeading),this.set(ol.DeviceOrientationProperty.HEADING, +b))}goog.isDefAndNotNull(a.beta)&&this.set(ol.DeviceOrientationProperty.BETA,goog.math.toRadians(a.beta));goog.isDefAndNotNull(a.gamma)&&this.set(ol.DeviceOrientationProperty.GAMMA,goog.math.toRadians(a.gamma))};ol.DeviceOrientation.prototype.getAlpha=function(){return this.get(ol.DeviceOrientationProperty.ALPHA)};goog.exportProperty(ol.DeviceOrientation.prototype,"getAlpha",ol.DeviceOrientation.prototype.getAlpha);ol.DeviceOrientation.prototype.getBeta=function(){return this.get(ol.DeviceOrientationProperty.BETA)}; +goog.exportProperty(ol.DeviceOrientation.prototype,"getBeta",ol.DeviceOrientation.prototype.getBeta);ol.DeviceOrientation.prototype.getGamma=function(){return this.get(ol.DeviceOrientationProperty.GAMMA)};goog.exportProperty(ol.DeviceOrientation.prototype,"getGamma",ol.DeviceOrientation.prototype.getGamma);ol.DeviceOrientation.prototype.getHeading=function(){return this.get(ol.DeviceOrientationProperty.HEADING)};goog.exportProperty(ol.DeviceOrientation.prototype,"getHeading",ol.DeviceOrientation.prototype.getHeading); +ol.DeviceOrientation.prototype.getTracking=function(){return this.get(ol.DeviceOrientationProperty.TRACKING)};goog.exportProperty(ol.DeviceOrientation.prototype,"getTracking",ol.DeviceOrientation.prototype.getTracking); +ol.DeviceOrientation.prototype.handleTrackingChanged_=function(){if(ol.BrowserFeature.HAS_DEVICE_ORIENTATION){var a=this.getTracking();a&&goog.isNull(this.listenerKey_)?this.listenerKey_=goog.events.listen(goog.global,"deviceorientation",this.orientationChange_,!1,this):a||goog.isNull(this.listenerKey_)||(goog.events.unlistenByKey(this.listenerKey_),this.listenerKey_=null)}};ol.DeviceOrientation.prototype.setTracking=function(a){this.set(ol.DeviceOrientationProperty.TRACKING,a)}; +goog.exportProperty(ol.DeviceOrientation.prototype,"setTracking",ol.DeviceOrientation.prototype.setTracking);goog.vec={};goog.vec.Float32Array=function(a){this.length=a.length||a;for(var b=0;bgoog.vec.EPSILON?(b[2]=Math.atan2(a[2]*c,a[6]*c),b[1]=Math.atan2(d*c,a[10]),b[0]=Math.atan2(a[8]*c,-a[9]*c)):(b[0]=0,b[1]=Math.atan2(d*c,a[10]),b[2]=Math.atan2(a[1],a[0]));b[0]=(b[0]+2*Math.PI)%(2*Math.PI);b[2]=(b[2]+2*Math.PI)%(2*Math.PI);b[1]=(b[1]*c+2*Math.PI)%(2*Math.PI)*c;return b}; +goog.vec.Mat4.translate=function(a,b,c,d){return goog.vec.Mat4.setColumnValues(a,3,a[0]*b+a[4]*c+a[8]*d+a[12],a[1]*b+a[5]*c+a[9]*d+a[13],a[2]*b+a[6]*c+a[10]*d+a[14],a[3]*b+a[7]*c+a[11]*d+a[15])};goog.vec.Mat4.scale=function(a,b,c,d){return goog.vec.Mat4.setFromValues(a,a[0]*b,a[1]*b,a[2]*b,a[3]*b,a[4]*c,a[5]*c,a[6]*c,a[7]*c,a[8]*d,a[9]*d,a[10]*d,a[11]*d,a[12],a[13],a[14],a[15])}; +goog.vec.Mat4.rotate=function(a,b,c,d,e){var f=a[0],g=a[1],h=a[2],k=a[3],l=a[4],m=a[5],n=a[6],p=a[7],r=a[8],q=a[9],u=a[10],s=a[11],v=a[12],t=a[13],B=a[14],w=a[15],z=Math.cos(b),x=Math.sin(b),A=1-z;b=c*c*A+z;var C=c*d*A+e*x,G=c*e*A-d*x,H=c*d*A-e*x,E=d*d*A+z,y=d*e*A+c*x,D=c*e*A+d*x;c=d*e*A-c*x;e=e*e*A+z;return goog.vec.Mat4.setFromValues(a,f*b+l*C+r*G,g*b+m*C+q*G,h*b+n*C+u*G,k*b+p*C+s*G,f*H+l*E+r*y,g*H+m*E+q*y,h*H+n*E+u*y,k*H+p*E+s*y,f*D+l*c+r*e,g*D+m*c+q*e,h*D+n*c+u*e,k*D+p*c+s*e,v,t,B,w)}; +goog.vec.Mat4.rotateX=function(a,b){var c=a[4],d=a[5],e=a[6],f=a[7],g=a[8],h=a[9],k=a[10],l=a[11],m=Math.cos(b),n=Math.sin(b);a[4]=c*m+g*n;a[5]=d*m+h*n;a[6]=e*m+k*n;a[7]=f*m+l*n;a[8]=c*-n+g*m;a[9]=d*-n+h*m;a[10]=e*-n+k*m;a[11]=f*-n+l*m;return a};goog.vec.Mat4.rotateY=function(a,b){var c=a[0],d=a[1],e=a[2],f=a[3],g=a[8],h=a[9],k=a[10],l=a[11],m=Math.cos(b),n=Math.sin(b);a[0]=c*m+g*-n;a[1]=d*m+h*-n;a[2]=e*m+k*-n;a[3]=f*m+l*-n;a[8]=c*n+g*m;a[9]=d*n+h*m;a[10]=e*n+k*m;a[11]=f*n+l*m;return a}; +goog.vec.Mat4.rotateZ=function(a,b){var c=a[0],d=a[1],e=a[2],f=a[3],g=a[4],h=a[5],k=a[6],l=a[7],m=Math.cos(b),n=Math.sin(b);a[0]=c*m+g*n;a[1]=d*m+h*n;a[2]=e*m+k*n;a[3]=f*m+l*n;a[4]=c*-n+g*m;a[5]=d*-n+h*m;a[6]=e*-n+k*m;a[7]=f*-n+l*m;return a};goog.vec.Mat4.getTranslation=function(a,b){b[0]=a[12];b[1]=a[13];b[2]=a[14];return b};goog.vec.Mat4.tmpVec3_=[goog.vec.Vec3.createFloat64(),goog.vec.Vec3.createFloat64()];goog.vec.Mat4.tmpVec4_=[goog.vec.Vec4.createFloat64(),goog.vec.Vec4.createFloat64(),goog.vec.Vec4.createFloat64()]; +goog.vec.Mat4.tmpMat4_=[goog.vec.Mat4.createFloat64()];ol.extent={};ol.extent.Relationship={UNKNOWN:0,INTERSECTING:1,ABOVE:2,RIGHT:4,BELOW:8,LEFT:16};ol.extent.boundingExtent=function(a){for(var b=ol.extent.createEmpty(),c=0,d=a.length;cd&&(h|=ol.extent.Relationship.RIGHT);ge&&(h|=ol.extent.Relationship.ABOVE);h===ol.extent.Relationship.UNKNOWN&&(h=ol.extent.Relationship.INTERSECTING);return h}; +ol.extent.createEmpty=function(){return[Infinity,Infinity,-Infinity,-Infinity]};ol.extent.createOrUpdate=function(a,b,c,d,e){return goog.isDef(e)?(e[0]=a,e[1]=b,e[2]=c,e[3]=d,e):[a,b,c,d]};ol.extent.createOrUpdateEmpty=function(a){return ol.extent.createOrUpdate(Infinity,Infinity,-Infinity,-Infinity,a)};ol.extent.createOrUpdateFromCoordinate=function(a,b){var c=a[0],d=a[1];return ol.extent.createOrUpdate(c,d,c,d,b)}; +ol.extent.createOrUpdateFromCoordinates=function(a,b){var c=ol.extent.createOrUpdateEmpty(b);return ol.extent.extendCoordinates(c,a)};ol.extent.createOrUpdateFromFlatCoordinates=function(a,b,c,d,e){e=ol.extent.createOrUpdateEmpty(e);return ol.extent.extendFlatCoordinates(e,a,b,c,d)};ol.extent.createOrUpdateFromRings=function(a,b){var c=ol.extent.createOrUpdateEmpty(b);return ol.extent.extendRings(c,a)};ol.extent.empty=function(a){a[0]=a[1]=Infinity;a[2]=a[3]=-Infinity;return a}; +ol.extent.equals=function(a,b){return a[0]==b[0]&&a[2]==b[2]&&a[1]==b[1]&&a[3]==b[3]};ol.extent.extend=function(a,b){b[0]a[2]&&(a[2]=b[2]);b[1]a[3]&&(a[3]=b[3]);return a};ol.extent.extendCoordinate=function(a,b){b[0]a[2]&&(a[2]=b[0]);b[1]a[3]&&(a[3]=b[1])};ol.extent.extendCoordinates=function(a,b){var c,d;c=0;for(d=b.length;cg;++g)h=f[g],k=d[g],f[g]=a[0]+h*b-k*c,d[g]=a[1]+h*c+k*b;return ol.extent.boundingExtentXYs_(f,d,e)};ol.extent.getHeight=function(a){return a[3]-a[1]};ol.extent.getIntersectionArea=function(a,b){var c=Math.max(a[0],b[0]),d=Math.max(a[1],b[1]),e=Math.min(a[2],b[2]),f=Math.min(a[3],b[3]);return Math.max(0,e-c)*Math.max(0,f-d)}; +ol.extent.getMargin=function(a){return ol.extent.getWidth(a)+ol.extent.getHeight(a)};ol.extent.getSize=function(a){return[a[2]-a[0],a[3]-a[1]]};ol.extent.getTopLeft=function(a){return[a[0],a[3]]};ol.extent.getTopRight=function(a){return[a[2],a[3]]};ol.extent.getWidth=function(a){return a[2]-a[0]};ol.extent.intersects=function(a,b){return a[0]<=b[2]&&a[2]>=b[0]&&a[1]<=b[3]&&a[3]>=b[1]};ol.extent.isEmpty=function(a){return a[2]=g&&h<=k):f&ol.extent.Relationship.RIGHT&&!(e&ol.extent.Relationship.RIGHT)?(g=c-(l-k)*b,d=g>=h&&g<=a):f&ol.extent.Relationship.BELOW&& +!(e&ol.extent.Relationship.BELOW)?(h=l-(c-h)/b,d=h>=g&&h<=k):f&ol.extent.Relationship.LEFT&&!(e&ol.extent.Relationship.LEFT)&&(g=c-(l-g)*b,d=g>=h&&g<=a)}return d};ol.extent.touches=function(a,b){return ol.extent.intersects(a,b)&&(a[0]==b[2]||a[2]==b[0]||a[1]==b[3]||a[3]==b[1])};ol.extent.transform=function(a,b,c){a=[a[0],a[1],a[0],a[3],a[2],a[1],a[2],a[3]];b(a,a,2);return ol.extent.boundingExtentXYs_([a[0],a[2],a[4],a[6]],[a[1],a[3],a[5],a[7]],c)}; +ol.extent.transform2D=function(a,b,c){c=goog.isDef(c)?c:[];var d=goog.vec.Mat4.getElement(b,0,0),e=goog.vec.Mat4.getElement(b,1,0),f=goog.vec.Mat4.getElement(b,0,1),g=goog.vec.Mat4.getElement(b,1,1),h=goog.vec.Mat4.getElement(b,0,3);b=goog.vec.Mat4.getElement(b,1,3);var k=[0,2,0,2],l=[1,1,3,3],m=[],n=[],p,r,q;for(p=0;4>p;++p)r=a[k[p]],q=a[l[p]],m[p]=d*r+f*q+h,n[p]=e*r+g*q+b;c[0]=Math.min.apply(null,m);c[1]=Math.min.apply(null,n);c[2]=Math.max.apply(null,m);c[3]=Math.max.apply(null,n);return c};ol.TileState={IDLE:0,LOADING:1,LOADED:2,ERROR:3,EMPTY:4};ol.Tile=function(a,b){goog.events.EventTarget.call(this);this.tileCoord=a;this.state=b};goog.inherits(ol.Tile,goog.events.EventTarget);ol.Tile.prototype.dispatchChangeEvent=function(){this.dispatchEvent(goog.events.EventType.CHANGE)};ol.Tile.prototype.getKey=function(){return goog.getUid(this).toString()};ol.Tile.prototype.getTileCoord=function(){return this.tileCoord};ol.Tile.prototype.getState=function(){return this.state};ol.structs={};ol.structs.PriorityQueue=function(a,b){this.priorityFunction_=a;this.keyFunction_=b;this.elements_=[];this.priorities_=[];this.queuedElements_={}};ol.structs.PriorityQueue.DROP=Infinity;ol.structs.PriorityQueue.prototype.assertValid=function(){var a=this.elements_.length,b;for(b=0;b<(a>>1)-1;++b);};ol.structs.PriorityQueue.prototype.clear=function(){this.elements_.length=0;this.priorities_.length=0;goog.object.clear(this.queuedElements_)}; +ol.structs.PriorityQueue.prototype.dequeue=function(){var a=this.elements_,b=this.priorities_,c=a[0];1==a.length?(a.length=0,b.length=0):(a[0]=a.pop(),b[0]=b.pop(),this.siftUp_(0));a=this.keyFunction_(c);delete this.queuedElements_[a];return c};ol.structs.PriorityQueue.prototype.enqueue=function(a){var b=this.priorityFunction_(a);b!=ol.structs.PriorityQueue.DROP&&(this.elements_.push(a),this.priorities_.push(b),this.queuedElements_[this.keyFunction_(a)]=!0,this.siftDown_(0,this.elements_.length-1))}; +ol.structs.PriorityQueue.prototype.getCount=function(){return this.elements_.length};ol.structs.PriorityQueue.prototype.getLeftChildIndex_=function(a){return 2*a+1};ol.structs.PriorityQueue.prototype.getRightChildIndex_=function(a){return 2*a+2};ol.structs.PriorityQueue.prototype.getParentIndex_=function(a){return a-1>>1};ol.structs.PriorityQueue.prototype.heapify_=function(){var a;for(a=(this.elements_.length>>1)-1;0<=a;a--)this.siftUp_(a)}; +ol.structs.PriorityQueue.prototype.isEmpty=function(){return 0===this.elements_.length};ol.structs.PriorityQueue.prototype.isKeyQueued=function(a){return a in this.queuedElements_};ol.structs.PriorityQueue.prototype.isQueued=function(a){return this.isKeyQueued(this.keyFunction_(a))}; +ol.structs.PriorityQueue.prototype.siftUp_=function(a){for(var b=this.elements_,c=this.priorities_,d=b.length,e=b[a],f=c[a],g=a;a>1;){var h=this.getLeftChildIndex_(a),k=this.getRightChildIndex_(a),h=ka;){var g=this.getParentIndex_(b);if(d[g]>f)c[b]=c[g],d[b]=d[g],b=g;else break}c[b]=e;d[b]=f}; +ol.structs.PriorityQueue.prototype.reprioritize=function(){var a=this.priorityFunction_,b=this.elements_,c=this.priorities_,d=0,e=b.length,f,g,h;for(g=0;gthis.minResolution_)}return a}; +ol.View2D.prototype.fitExtent=function(a,b){if(!ol.extent.isEmpty(a)){this.setCenter(ol.extent.getCenter(a));var c=this.getResolutionForExtent(a,b),d=this.constrainResolution(c,0,0);da?ol.easing.inAndOut(2*a):1-ol.easing.inAndOut(2*(a-0.5))};ol.animation={};ol.animation.bounce=function(a){var b=a.resolution,c=goog.isDef(a.start)?a.start:goog.now(),d=goog.isDef(a.duration)?a.duration:1E3,e=goog.isDef(a.easing)?a.easing:ol.easing.upAndDown;return function(a,g){if(g.timec?(e=(e-g[-c-2])/(g[-c-1]-g[-c-2]),b+=(-c-2)*d,g=(1-e)*a[b]+e*a[b+d],h=(1-e)*a[b+1]+e*a[b+d+1]):(g=a[b+c*d],h=a[b+c*d+1])}return goog.isDefAndNotNull(f)? +(f.push(g,h),f):[g,h]};ol.geom.flat.lineStringCoordinateAtM=function(a,b,c,d,e,f){if(c==b)return null;if(e>1,ef!=m>f&&e<(l-h)*(f-k)/(m-k)+h&&(g=!g);h=l;k=m}return g}; +ol.geom.flat.linearRingIsClockwise=function(a,b,c,d){for(var e=0,f=a[c-d],g=a[c-d+1];bn&&(l=(l+m)/2,ol.geom.flat.linearRingsContainsXY(a,b,c,d,l,p)&&(q=l,n=u));l=m}isNaN(q)&&(q=e[f]);return goog.isDef(g)?(g.push(q,p),g):[q,p]}; +ol.geom.flat.linearRingsAreOriented=function(a,b,c,d){var e,f;e=0;for(f=c.length;ea||0!==this.simplifiedGeometryMaxMinSquaredTolerance&&a<=this.simplifiedGeometryMaxMinSquaredTolerance)return this;var b=a.toString();if(this.simplifiedGeometryCache.hasOwnProperty(b))return this.simplifiedGeometryCache[b];var c= +this.getSimplifiedGeometryInternal(a);if(c.getFlatCoordinates().lengthe&&(e=f);f=h;g=k}return e};ol.geom.closest.getsMaxSquaredDelta=function(a,b,c,d,e){var f,g;f=0;for(g=c.length;fh){for(;br&&(l=m,r=t)}r>e&&(k[(l-b)/d]=1,p+de&&(f[g++]=l,f[g++]=m,h=l,k=m);if(l!=h||m!=k)f[g++]=l,f[g++]=m;return g};ol.geom.simplify.snap=function(a,b){return b*Math.round(a/b)}; +ol.geom.simplify.quantize=function(a,b,c,d,e,f,g){if(b==c)return g;var h=ol.geom.simplify.snap(a[b],e),k=ol.geom.simplify.snap(a[b+1],e);b+=d;f[g++]=h;f[g++]=k;var l,m;do if(l=ol.geom.simplify.snap(a[b],e),m=ol.geom.simplify.snap(a[b+1],e),b+=d,b==c)return f[g++]=l,f[g++]=m,g;while(l==h&&m==k);for(;br&&ur)&&(0>q&&sq)||(f[g++]= +l,f[g++]=m,h=l,k=m);l=n;m=p}}f[g++]=l;f[g++]=m;return g};ol.geom.simplify.quantizes=function(a,b,c,d,e,f,g,h){var k,l;k=0;for(l=c.length;k=ol.DRAG_BOX_HYSTERESIS_PIXELS_SQUARED&&(this.onBoxEnd(a),this.dispatchEvent(new ol.DragBoxEvent(ol.DragBoxEventType.BOXEND,a.coordinate)))}; +ol.interaction.DragBox.prototype.handleDragStart=function(a){return a.browserEvent.isMouseActionButton()&&this.condition_(a)?(this.startPixel_=a.pixel,this.box_.setMap(a.map),this.box_.setPixels(this.startPixel_,this.startPixel_),this.dispatchEvent(new ol.DragBoxEvent(ol.DragBoxEventType.BOXSTART,a.coordinate)),!0):!1};goog.color={}; +goog.color.names={aliceblue:"#f0f8ff",antiquewhite:"#faebd7",aqua:"#00ffff",aquamarine:"#7fffd4",azure:"#f0ffff",beige:"#f5f5dc",bisque:"#ffe4c4",black:"#000000",blanchedalmond:"#ffebcd",blue:"#0000ff",blueviolet:"#8a2be2",brown:"#a52a2a",burlywood:"#deb887",cadetblue:"#5f9ea0",chartreuse:"#7fff00",chocolate:"#d2691e",coral:"#ff7f50",cornflowerblue:"#6495ed",cornsilk:"#fff8dc",crimson:"#dc143c",cyan:"#00ffff",darkblue:"#00008b",darkcyan:"#008b8b",darkgoldenrod:"#b8860b",darkgray:"#a9a9a9",darkgreen:"#006400", +darkgrey:"#a9a9a9",darkkhaki:"#bdb76b",darkmagenta:"#8b008b",darkolivegreen:"#556b2f",darkorange:"#ff8c00",darkorchid:"#9932cc",darkred:"#8b0000",darksalmon:"#e9967a",darkseagreen:"#8fbc8f",darkslateblue:"#483d8b",darkslategray:"#2f4f4f",darkslategrey:"#2f4f4f",darkturquoise:"#00ced1",darkviolet:"#9400d3",deeppink:"#ff1493",deepskyblue:"#00bfff",dimgray:"#696969",dimgrey:"#696969",dodgerblue:"#1e90ff",firebrick:"#b22222",floralwhite:"#fffaf0",forestgreen:"#228b22",fuchsia:"#ff00ff",gainsboro:"#dcdcdc", +ghostwhite:"#f8f8ff",gold:"#ffd700",goldenrod:"#daa520",gray:"#808080",green:"#008000",greenyellow:"#adff2f",grey:"#808080",honeydew:"#f0fff0",hotpink:"#ff69b4",indianred:"#cd5c5c",indigo:"#4b0082",ivory:"#fffff0",khaki:"#f0e68c",lavender:"#e6e6fa",lavenderblush:"#fff0f5",lawngreen:"#7cfc00",lemonchiffon:"#fffacd",lightblue:"#add8e6",lightcoral:"#f08080",lightcyan:"#e0ffff",lightgoldenrodyellow:"#fafad2",lightgray:"#d3d3d3",lightgreen:"#90ee90",lightgrey:"#d3d3d3",lightpink:"#ffb6c1",lightsalmon:"#ffa07a", +lightseagreen:"#20b2aa",lightskyblue:"#87cefa",lightslategray:"#778899",lightslategrey:"#778899",lightsteelblue:"#b0c4de",lightyellow:"#ffffe0",lime:"#00ff00",limegreen:"#32cd32",linen:"#faf0e6",magenta:"#ff00ff",maroon:"#800000",mediumaquamarine:"#66cdaa",mediumblue:"#0000cd",mediumorchid:"#ba55d3",mediumpurple:"#9370db",mediumseagreen:"#3cb371",mediumslateblue:"#7b68ee",mediumspringgreen:"#00fa9a",mediumturquoise:"#48d1cc",mediumvioletred:"#c71585",midnightblue:"#191970",mintcream:"#f5fffa",mistyrose:"#ffe4e1", +moccasin:"#ffe4b5",navajowhite:"#ffdead",navy:"#000080",oldlace:"#fdf5e6",olive:"#808000",olivedrab:"#6b8e23",orange:"#ffa500",orangered:"#ff4500",orchid:"#da70d6",palegoldenrod:"#eee8aa",palegreen:"#98fb98",paleturquoise:"#afeeee",palevioletred:"#db7093",papayawhip:"#ffefd5",peachpuff:"#ffdab9",peru:"#cd853f",pink:"#ffc0cb",plum:"#dda0dd",powderblue:"#b0e0e6",purple:"#800080",red:"#ff0000",rosybrown:"#bc8f8f",royalblue:"#4169e1",saddlebrown:"#8b4513",salmon:"#fa8072",sandybrown:"#f4a460",seagreen:"#2e8b57", +seashell:"#fff5ee",sienna:"#a0522d",silver:"#c0c0c0",skyblue:"#87ceeb",slateblue:"#6a5acd",slategray:"#708090",slategrey:"#708090",snow:"#fffafa",springgreen:"#00ff7f",steelblue:"#4682b4",tan:"#d2b48c",teal:"#008080",thistle:"#d8bfd8",tomato:"#ff6347",turquoise:"#40e0d0",violet:"#ee82ee",wheat:"#f5deb3",white:"#ffffff",whitesmoke:"#f5f5f5",yellow:"#ffff00",yellowgreen:"#9acd32"};goog.color.parse=function(a){var b={};a=String(a);var c=goog.color.prependHashIfNecessaryHelper(a);if(goog.color.isValidHexColor_(c))return b.hex=goog.color.normalizeHex(c),b.type="hex",b;c=goog.color.isValidRgbColor_(a);if(c.length)return b.hex=goog.color.rgbArrayToHex(c),b.type="rgb",b;if(goog.color.names&&(c=goog.color.names[a.toLowerCase()]))return b.hex=c,b.type="named",b;throw Error(a+" is not a valid color string");}; +goog.color.isValidColor=function(a){var b=goog.color.prependHashIfNecessaryHelper(a);return!!(goog.color.isValidHexColor_(b)||goog.color.isValidRgbColor_(a).length||goog.color.names&&goog.color.names[a.toLowerCase()])};goog.color.parseRgb=function(a){var b=goog.color.isValidRgbColor_(a);if(!b.length)throw Error(a+" is not a valid RGB color");return b};goog.color.hexToRgbStyle=function(a){return goog.color.rgbStyle_(goog.color.hexToRgb(a))};goog.color.hexTripletRe_=/#(.)(.)(.)/; +goog.color.normalizeHex=function(a){if(!goog.color.isValidHexColor_(a))throw Error("'"+a+"' is not a valid hex color");4==a.length&&(a=a.replace(goog.color.hexTripletRe_,"#$1$1$2$2$3$3"));return a.toLowerCase()};goog.color.hexToRgb=function(a){a=goog.color.normalizeHex(a);var b=parseInt(a.substr(1,2),16),c=parseInt(a.substr(3,2),16);a=parseInt(a.substr(5,2),16);return[b,c,a]}; +goog.color.rgbToHex=function(a,b,c){a=Number(a);b=Number(b);c=Number(c);if(isNaN(a)||0>a||255b||255c||255=h?(d-e)/(2*h):(d-e)/(2-2*h));return[Math.round(f+360)%360,g,h]};goog.color.rgbArrayToHsl=function(a){return goog.color.rgbToHsl(a[0],a[1],a[2])};goog.color.hueToRgb_=function(a,b,c){0>c?c+=1:16*c?a+6*(b-a)*c:1>2*c?b:2>3*c?a+6*(b-a)*(2/3-c):a}; +goog.color.hslToRgb=function(a,b,c){var d=0,e=0,f=0;a/=360;if(0==b)d=e=f=255*c;else var g=f=0,g=0.5>c?c*(1+b):c+b-b*c,f=2*c-g,d=255*goog.color.hueToRgb_(f,g,a+1/3),e=255*goog.color.hueToRgb_(f,g,a),f=255*goog.color.hueToRgb_(f,g,a-1/3);return[Math.round(d),Math.round(e),Math.round(f)]};goog.color.hslArrayToRgb=function(a){return goog.color.hslToRgb(a[0],a[1],a[2])};goog.color.validHexColorRe_=/^#(?:[0-9a-f]{3}){1,2}$/i;goog.color.isValidHexColor_=function(a){return goog.color.validHexColorRe_.test(a)}; +goog.color.normalizedHexColorRe_=/^#[0-9a-f]{6}$/;goog.color.isNormalizedHexColor_=function(a){return goog.color.normalizedHexColorRe_.test(a)};goog.color.rgbColorRe_=/^(?:rgb)?\((0|[1-9]\d{0,2}),\s?(0|[1-9]\d{0,2}),\s?(0|[1-9]\d{0,2})\)$/i;goog.color.isValidRgbColor_=function(a){var b=a.match(goog.color.rgbColorRe_);if(b){a=Number(b[1]);var c=Number(b[2]),b=Number(b[3]);if(0<=a&&255>=a&&0<=c&&255>=c&&0<=b&&255>=b)return[a,c,b]}return[]}; +goog.color.prependZeroIfNecessaryHelper=function(a){return 1==a.length?"0"+a:a};goog.color.prependHashIfNecessaryHelper=function(a){return"#"==a.charAt(0)?a:"#"+a};goog.color.rgbStyle_=function(a){return"rgb("+a.join(",")+")"}; +goog.color.hsvToRgb=function(a,b,c){var d=0,e=0,f=0;if(0==b)f=e=d=c;else{var g=Math.floor(a/60),h=a/60-g;a=c*(1-b);var k=c*(1-b*h);b=c*(1-b*(1-h));switch(g){case 1:d=k;e=c;f=a;break;case 2:d=a;e=c;f=b;break;case 3:d=a;e=k;f=c;break;case 4:d=b;e=a;f=c;break;case 5:d=c;e=a;f=k;break;case 6:case 0:d=c,e=b,f=a}}return[Math.floor(d),Math.floor(e),Math.floor(f)]}; +goog.color.rgbToHsv=function(a,b,c){var d=Math.max(Math.max(a,b),c),e=Math.min(Math.min(a,b),c);if(e==d)e=a=0;else{var f=d-e,e=f/d;a=60*(a==d?(b-c)/f:b==d?2+(c-a)/f:4+(a-b)/f);0>a&&(a+=360);360=a[2]?a[1]*a[2]:a[1]*(1-a[2]);d=0.5>=b[2]?b[1]*b[2]:b[1]*(1-b[2]);return(a[2]-b[2])*(a[2]-b[2])+c*c+d*d-2*c*d*Math.cos(2*(a[0]/360-b[0]/360)*Math.PI)};goog.color.blend=function(a,b,c){c=goog.math.clamp(c,0,1);return[Math.round(c*a[0]+(1-c)*b[0]),Math.round(c*a[1]+(1-c)*b[1]),Math.round(c*a[2]+(1-c)*b[2])]};goog.color.darken=function(a,b){return goog.color.blend([0,0,0],a,b)}; +goog.color.lighten=function(a,b){return goog.color.blend([255,255,255],a,b)};goog.color.highContrast=function(a,b){for(var c=[],d=0;da[0]&&0<=a[1]&&256>a[1]&&0<=a[2]&&256>a[2]&&0<=a[3]&&1>=a[3]};ol.color.normalize=function(a,b){var c=goog.isDef(b)?b:[];c[0]=goog.math.clamp(a[0]+0.5|0,0,255);c[1]=goog.math.clamp(a[1]+0.5|0,0,255);c[2]=goog.math.clamp(a[2]+0.5|0,0,255);c[3]=goog.math.clamp(a[3],0,1);return c}; +ol.color.returnOrUpdate=function(a,b){return goog.isDef(b)?(b[0]=a[0],b[1]=a[1],b[2]=a[2],b[3]=a[3],b):a};ol.color.toString=function(a){var b=a[0];b!=(b|0)&&(b=b+0.5|0);var c=a[1];c!=(c|0)&&(c=c+0.5|0);var d=a[2];d!=(d|0)&&(d=d+0.5|0);return"rgba("+b+","+c+","+d+","+a[3]+")"};ol.color.transform=function(a,b,c){c=goog.isDef(c)?c:[];c=goog.vec.Mat4.multVec3(b,a,c);c[3]=a[3];return ol.color.normalize(c,c)}; +ol.color.stringOrColorEquals=function(a,b){if(a===b||a==b)return!0;goog.isString(a)&&(a=ol.color.fromString(a));goog.isString(b)&&(b=ol.color.fromString(b));return ol.color.equals(a,b)};ol.render.canvas={};ol.render.canvas.defaultFont="10px sans-serif";ol.render.canvas.defaultFillStyle=ol.color.fromString("black");ol.render.canvas.defaultLineCap="round";ol.render.canvas.defaultLineDash=[];ol.render.canvas.defaultLineJoin="round";ol.render.canvas.defaultMiterLimit=10;ol.render.canvas.defaultStrokeStyle=[0,0,0,1];ol.render.canvas.defaultTextAlign="center";ol.render.canvas.defaultTextBaseline="middle";ol.render.canvas.defaultLineWidth=1;ol.style={};ol.style.Fill=function(a){a=goog.isDef(a)?a:{};this.color_=goog.isDef(a.color)?a.color:null};ol.style.Fill.prototype.getColor=function(){return this.color_};ol.style.ImageState={IDLE:0,LOADING:1,LOADED:2,ERROR:3};ol.style.Image=function(a){this.opacity_=a.opacity;this.rotateWithView_=a.rotateWithView;this.rotation_=a.rotation;this.scale_=a.scale;this.snapToPixel_=a.snapToPixel};ol.style.Image.prototype.getOpacity=function(){return this.opacity_};ol.style.Image.prototype.getRotateWithView=function(){return this.rotateWithView_};ol.style.Image.prototype.getRotation=function(){return this.rotation_};ol.style.Image.prototype.getScale=function(){return this.scale_}; +ol.style.Image.prototype.getSnapToPixel=function(){return this.snapToPixel_};ol.style.Stroke=function(a){a=goog.isDef(a)?a:{};this.color_=goog.isDef(a.color)?a.color:null;this.lineCap_=a.lineCap;this.lineDash_=goog.isDef(a.lineDash)?a.lineDash:null;this.lineJoin_=a.lineJoin;this.miterLimit_=a.miterLimit;this.width_=a.width};ol.style.Stroke.prototype.getColor=function(){return this.color_};ol.style.Stroke.prototype.getLineCap=function(){return this.lineCap_};ol.style.Stroke.prototype.getLineDash=function(){return this.lineDash_};ol.style.Stroke.prototype.getLineJoin=function(){return this.lineJoin_}; +ol.style.Stroke.prototype.getMiterLimit=function(){return this.miterLimit_};ol.style.Stroke.prototype.getWidth=function(){return this.width_};ol.style.Circle=function(a){a=goog.isDef(a)?a:{};this.canvas_=goog.dom.createElement(goog.dom.TagName.CANVAS);this.hitDetectionCanvas_=null;this.fill_=goog.isDef(a.fill)?a.fill:null;this.radius_=a.radius;this.stroke_=goog.isDef(a.stroke)?a.stroke:null;a=this.render_();this.anchor_=[a/2,a/2];this.size_=[a,a];ol.style.Image.call(this,{opacity:1,rotateWithView:!1,rotation:0,scale:1,snapToPixel:void 0})};goog.inherits(ol.style.Circle,ol.style.Image);ol.style.Circle.prototype.getAnchor=function(){return this.anchor_}; +ol.style.Circle.prototype.getFill=function(){return this.fill_};ol.style.Circle.prototype.getHitDetectionImage=function(a){return this.hitDetectionCanvas_};ol.style.Circle.prototype.getImage=function(a){return this.canvas_};ol.style.Circle.prototype.getImageState=function(){return ol.style.ImageState.LOADED};ol.style.Circle.prototype.getRadius=function(){return this.radius_};ol.style.Circle.prototype.getSize=function(){return this.size_};ol.style.Circle.prototype.getStroke=function(){return this.stroke_}; +ol.style.Circle.prototype.listenImageChange=goog.nullFunction;ol.style.Circle.prototype.load=goog.nullFunction;ol.style.Circle.prototype.unlistenImageChange=goog.nullFunction; +ol.style.Circle.prototype.render_=function(){var a=this.canvas_,b,c;goog.isNull(this.stroke_)?c=0:(b=ol.color.asString(this.stroke_.getColor()),c=this.stroke_.getWidth(),goog.isDef(c)||(c=ol.render.canvas.defaultLineWidth));var d=2*(this.radius_+c)+1;a.height=d;a.width=d;var e=a.getContext("2d");e.arc(d/2,d/2,this.radius_,0,2*Math.PI,!0);goog.isNull(this.fill_)||(e.fillStyle=ol.color.asString(this.fill_.getColor()),e.fill());goog.isNull(this.stroke_)||(e.strokeStyle=b,e.lineWidth=c,e.stroke());goog.isNull(this.fill_)? +(a=this.hitDetectionCanvas_=goog.dom.createElement(goog.dom.TagName.CANVAS),a.height=d,a.width=d,e=a.getContext("2d"),e.arc(d/2,d/2,this.radius_,0,2*Math.PI,!0),e.fillStyle=ol.render.canvas.defaultFillStyle,e.fill(),goog.isNull(this.stroke_)||(e.strokeStyle=b,e.lineWidth=c,e.stroke())):this.hitDetectionCanvas_=a;return d};ol.style.Style=function(a){a=goog.isDef(a)?a:{};this.fill_=goog.isDef(a.fill)?a.fill:null;this.image_=goog.isDef(a.image)?a.image:null;this.stroke_=goog.isDef(a.stroke)?a.stroke:null;this.text_=goog.isDef(a.text)?a.text:null;this.zIndex_=a.zIndex};ol.style.Style.prototype.getFill=function(){return this.fill_};ol.style.Style.prototype.getImage=function(){return this.image_};ol.style.Style.prototype.getStroke=function(){return this.stroke_};ol.style.Style.prototype.getText=function(){return this.text_}; +ol.style.Style.prototype.getZIndex=function(){return this.zIndex_};ol.feature={};ol.Feature=function(a){ol.Object.call(this);this.id_=void 0;this.geometryName_="geometry";this.style_=null;this.styleFunction_=void 0;this.geometryChangeKey_=null;goog.events.listen(this,ol.Object.getChangeEventType(this.geometryName_),this.handleGeometryChanged_,!1,this);goog.isDefAndNotNull(a)?a instanceof ol.geom.Geometry?this.setGeometry(a):this.setValues(a):this.setGeometry(null)};goog.inherits(ol.Feature,ol.Object);ol.Feature.prototype.getGeometry=function(){return this.get(this.geometryName_)}; +goog.exportProperty(ol.Feature.prototype,"getGeometry",ol.Feature.prototype.getGeometry);ol.Feature.prototype.getId=function(){return this.id_};ol.Feature.prototype.getGeometryName=function(){return this.geometryName_};ol.Feature.prototype.getStyle=function(){return this.style_};ol.Feature.prototype.getStyleFunction=function(){return this.styleFunction_};ol.Feature.prototype.handleGeometryChange_=function(){this.dispatchChangeEvent()}; +ol.Feature.prototype.handleGeometryChanged_=function(){goog.isNull(this.geometryChangeKey_)||(goog.events.unlistenByKey(this.geometryChangeKey_),this.geometryChangeKey_=null);var a=this.getGeometry();goog.isDefAndNotNull(a)&&(this.geometryChangeKey_=goog.events.listen(a,goog.events.EventType.CHANGE,this.handleGeometryChange_,!1,this));this.dispatchChangeEvent()};ol.Feature.prototype.setGeometry=function(a){this.set(this.geometryName_,a)};goog.exportProperty(ol.Feature.prototype,"setGeometry",ol.Feature.prototype.setGeometry); +ol.Feature.prototype.setStyle=function(a){this.style_=a;this.styleFunction_=ol.feature.createFeatureStyleFunction(a);this.dispatchChangeEvent()};ol.Feature.prototype.setId=function(a){this.id_=a};ol.Feature.prototype.setGeometryName=function(a){goog.events.unlisten(this,ol.Object.getChangeEventType(this.geometryName_),this.handleGeometryChanged_,!1,this);this.geometryName_=a;goog.events.listen(this,ol.Object.getChangeEventType(this.geometryName_),this.handleGeometryChanged_,!1,this);this.handleGeometryChanged_()}; +ol.feature.defaultFeatureStyleFunction=function(){var a=new ol.style.Fill({color:"rgba(255,255,255,0.4)"}),b=new ol.style.Stroke({color:"#3399CC",width:1.25}),c=[new ol.style.Style({image:new ol.style.Circle({fill:a,stroke:b,radius:5}),fill:a,stroke:b})];return function(a){return c}}();ol.feature.defaultStyleFunction=function(a,b){var c=a.getStyleFunction();goog.isDef(c)||(c=ol.feature.defaultFeatureStyleFunction);return c.call(a,b)}; +ol.feature.createFeatureStyleFunction=function(a){goog.isFunction(a)||(a=goog.isArray(a)?a:[a],a=goog.functions.constant(a));return a};ol.feature.createStyleFunction=function(a){goog.isFunction(a)||(a=goog.isArray(a)?a:[a],a=goog.functions.constant(a));return a};ol.FeatureOverlay=function(a){a=goog.isDef(a)?a:{};this.style_=this.postComposeListenerKey_=this.map_=this.featureChangeListenerKeys_=this.featuresListenerKeys_=this.features_=null;this.styleFunction_=goog.isDef(a.style)?ol.feature.createStyleFunction(a.style):void 0;goog.isDef(a.features)?goog.isArray(a.features)?this.setFeatures(new ol.Collection(goog.array.clone(a.features))):this.setFeatures(a.features):this.setFeatures(new ol.Collection);goog.isDef(a.map)&&this.setMap(a.map)}; +ol.FeatureOverlay.prototype.addFeature=function(a){this.features_.push(a)};ol.FeatureOverlay.prototype.getFeatures=function(){return this.features_};ol.FeatureOverlay.prototype.handleFeatureChange_=function(){this.render_()};ol.FeatureOverlay.prototype.handleFeaturesAdd_=function(a){a=a.element;this.featureChangeListenerKeys_[goog.getUid(a).toString()]=goog.events.listen(a,goog.events.EventType.CHANGE,this.handleFeatureChange_,!1,this);this.render_()}; +ol.FeatureOverlay.prototype.handleFeaturesRemove_=function(a){a=goog.getUid(a.element).toString();goog.events.unlistenByKey(this.featureChangeListenerKeys_[a]);delete this.featureChangeListenerKeys_[a];this.render_()}; +ol.FeatureOverlay.prototype.handleMapPostCompose_=function(a){if(!goog.isNull(this.features_)&&goog.isDef(this.styleFunction_)){var b=a.frameState.view2DState.resolution,c=a.vectorContext,d,e,f;this.features_.forEach(function(a){f=this.styleFunction_(a,b);if(goog.isDefAndNotNull(f))for(e=f.length,d=0;d=a.length)throw goog.iter.StopIteration;if(b in a)return a[b++];b++}};return c}throw Error("Not implemented");}; +goog.iter.forEach=function(a,b,c){if(goog.isArrayLike(a))try{goog.array.forEach(a,b,c)}catch(d){if(d!==goog.iter.StopIteration)throw d;}else{a=goog.iter.toIterator(a);try{for(;;)b.call(c,a.next(),void 0,a)}catch(e){if(e!==goog.iter.StopIteration)throw e;}}};goog.iter.filter=function(a,b,c){var d=goog.iter.toIterator(a);a=new goog.iter.Iterator;a.next=function(){for(;;){var a=d.next();if(b.call(c,a,void 0,d))return a}};return a}; +goog.iter.range=function(a,b,c){var d=0,e=a,f=c||1;1=e||0>f&&d<=e)throw goog.iter.StopIteration;var a=d;d+=f;return a};return g};goog.iter.join=function(a,b){return goog.iter.toArray(a).join(b)};goog.iter.map=function(a,b,c){var d=goog.iter.toIterator(a);a=new goog.iter.Iterator;a.next=function(){for(;;){var a=d.next();return b.call(c,a,void 0,d)}};return a}; +goog.iter.reduce=function(a,b,c,d){var e=c;goog.iter.forEach(a,function(a){e=b.call(d,e,a)});return e};goog.iter.some=function(a,b,c){a=goog.iter.toIterator(a);try{for(;;)if(b.call(c,a.next(),void 0,a))return!0}catch(d){if(d!==goog.iter.StopIteration)throw d;}return!1};goog.iter.every=function(a,b,c){a=goog.iter.toIterator(a);try{for(;;)if(!b.call(c,a.next(),void 0,a))return!1}catch(d){if(d!==goog.iter.StopIteration)throw d;}return!0}; +goog.iter.chain=function(a){var b=arguments,c=b.length,d=0,e=new goog.iter.Iterator;e.next=function(){try{if(d>=c)throw goog.iter.StopIteration;return goog.iter.toIterator(b[d]).next()}catch(a){if(a!==goog.iter.StopIteration||d>=c)throw a;d++;return this.next()}};return e};goog.iter.dropWhile=function(a,b,c){var d=goog.iter.toIterator(a);a=new goog.iter.Iterator;var e=!0;a.next=function(){for(;;){var a=d.next();if(!e||!b.call(c,a,void 0,d))return e=!1,a}};return a}; +goog.iter.takeWhile=function(a,b,c){var d=goog.iter.toIterator(a);a=new goog.iter.Iterator;var e=!0;a.next=function(){for(;;)if(e){var a=d.next();if(b.call(c,a,void 0,d))return a;e=!1}else throw goog.iter.StopIteration;};return a};goog.iter.toArray=function(a){if(goog.isArrayLike(a))return goog.array.toArray(a);a=goog.iter.toIterator(a);var b=[];goog.iter.forEach(a,function(a){b.push(a)});return b}; +goog.iter.equals=function(a,b){a=goog.iter.toIterator(a);b=goog.iter.toIterator(b);var c,d;try{for(;;){c=d=!1;var e=a.next();c=!0;var f=b.next();d=!0;if(e!=f)break}}catch(g){if(g!==goog.iter.StopIteration)throw g;if(c&&!d)return!1;if(!d)try{b.next()}catch(h){if(h!==goog.iter.StopIteration)throw h;return!0}}return!1};goog.iter.nextOrValue=function(a,b){try{return goog.iter.toIterator(a).next()}catch(c){if(c!=goog.iter.StopIteration)throw c;return b}}; +goog.iter.product=function(a){if(goog.array.some(arguments,function(a){return!a.length})||!arguments.length)return new goog.iter.Iterator;var b=new goog.iter.Iterator,c=arguments,d=goog.array.repeat(0,c.length);b.next=function(){if(d){for(var a=goog.array.map(d,function(a,b){return c[b][a]}),b=d.length-1;0<=b;b--){if(d[b]2*this.count_&&this.cleanupKeysArray_(),!0):!1}; +goog.structs.Map.prototype.cleanupKeysArray_=function(){if(this.count_!=this.keys_.length){for(var a=0,b=0;a=c.length)throw goog.iter.StopIteration;var g=c[b++];return a?g:d[g]}};return g}; +goog.structs.Map.hasKey_=function(a,b){return Object.prototype.hasOwnProperty.call(a,b)};goog.uri={};goog.uri.utils={};goog.uri.utils.CharCode_={AMPERSAND:38,EQUAL:61,HASH:35,QUESTION:63};goog.uri.utils.buildFromEncodedParts=function(a,b,c,d,e,f,g){var h="";a&&(h+=a+":");c&&(h+="//",b&&(h+=b+"@"),h+=c,d&&(h+=":"+d));e&&(h+=e);f&&(h+="?"+f);g&&(h+="#"+g);return h};goog.uri.utils.splitRe_=RegExp("^(?:([^:/?#.]+):)?(?://(?:([^/?#]*)@)?([^/#?]*?)(?::([0-9]+))?(?\x3d[/#?]|$))?([^?#]+)?(?:\\?([^#]*))?(?:#(.*))?$"); +goog.uri.utils.ComponentIndex={SCHEME:1,USER_INFO:2,DOMAIN:3,PORT:4,PATH:5,QUERY_DATA:6,FRAGMENT:7};goog.uri.utils.split=function(a){goog.uri.utils.phishingProtection_();return a.match(goog.uri.utils.splitRe_)};goog.uri.utils.needsPhishingProtection_=goog.userAgent.WEBKIT; +goog.uri.utils.phishingProtection_=function(){if(goog.uri.utils.needsPhishingProtection_){goog.uri.utils.needsPhishingProtection_=!1;var a=goog.global.location;if(a){var b=a.href;if(b&&(b=goog.uri.utils.getDomain(b))&&b!=a.hostname)throw goog.uri.utils.needsPhishingProtection_=!0,Error();}}};goog.uri.utils.decodeIfPossible_=function(a){return a&&decodeURIComponent(a)};goog.uri.utils.getComponentByIndex_=function(a,b){return goog.uri.utils.split(b)[a]||null}; +goog.uri.utils.getScheme=function(a){return goog.uri.utils.getComponentByIndex_(goog.uri.utils.ComponentIndex.SCHEME,a)};goog.uri.utils.getEffectiveScheme=function(a){a=goog.uri.utils.getScheme(a);!a&&self.location&&(a=self.location.protocol,a=a.substr(0,a.length-1));return a?a.toLowerCase():""};goog.uri.utils.getUserInfoEncoded=function(a){return goog.uri.utils.getComponentByIndex_(goog.uri.utils.ComponentIndex.USER_INFO,a)};goog.uri.utils.getUserInfo=function(a){return goog.uri.utils.decodeIfPossible_(goog.uri.utils.getUserInfoEncoded(a))}; +goog.uri.utils.getDomainEncoded=function(a){return goog.uri.utils.getComponentByIndex_(goog.uri.utils.ComponentIndex.DOMAIN,a)};goog.uri.utils.getDomain=function(a){return goog.uri.utils.decodeIfPossible_(goog.uri.utils.getDomainEncoded(a))};goog.uri.utils.getPort=function(a){return Number(goog.uri.utils.getComponentByIndex_(goog.uri.utils.ComponentIndex.PORT,a))||null};goog.uri.utils.getPathEncoded=function(a){return goog.uri.utils.getComponentByIndex_(goog.uri.utils.ComponentIndex.PATH,a)}; +goog.uri.utils.getPath=function(a){return goog.uri.utils.decodeIfPossible_(goog.uri.utils.getPathEncoded(a))};goog.uri.utils.getQueryData=function(a){return goog.uri.utils.getComponentByIndex_(goog.uri.utils.ComponentIndex.QUERY_DATA,a)};goog.uri.utils.getFragmentEncoded=function(a){var b=a.indexOf("#");return 0>b?null:a.substr(b+1)};goog.uri.utils.setFragmentEncoded=function(a,b){return goog.uri.utils.removeFragment(a)+(b?"#"+b:"")};goog.uri.utils.getFragment=function(a){return goog.uri.utils.decodeIfPossible_(goog.uri.utils.getFragmentEncoded(a))}; +goog.uri.utils.getHost=function(a){a=goog.uri.utils.split(a);return goog.uri.utils.buildFromEncodedParts(a[goog.uri.utils.ComponentIndex.SCHEME],a[goog.uri.utils.ComponentIndex.USER_INFO],a[goog.uri.utils.ComponentIndex.DOMAIN],a[goog.uri.utils.ComponentIndex.PORT])};goog.uri.utils.getPathAndAfter=function(a){a=goog.uri.utils.split(a);return goog.uri.utils.buildFromEncodedParts(null,null,null,null,a[goog.uri.utils.ComponentIndex.PATH],a[goog.uri.utils.ComponentIndex.QUERY_DATA],a[goog.uri.utils.ComponentIndex.FRAGMENT])}; +goog.uri.utils.removeFragment=function(a){var b=a.indexOf("#");return 0>b?a:a.substr(0,b)};goog.uri.utils.haveSameDomain=function(a,b){var c=goog.uri.utils.split(a),d=goog.uri.utils.split(b);return c[goog.uri.utils.ComponentIndex.DOMAIN]==d[goog.uri.utils.ComponentIndex.DOMAIN]&&c[goog.uri.utils.ComponentIndex.SCHEME]==d[goog.uri.utils.ComponentIndex.SCHEME]&&c[goog.uri.utils.ComponentIndex.PORT]==d[goog.uri.utils.ComponentIndex.PORT]}; +goog.uri.utils.assertNoFragmentsOrQueries_=function(a){if(goog.DEBUG&&(0<=a.indexOf("#")||0<=a.indexOf("?")))throw Error("goog.uri.utils: Fragment or query identifiers are not supported: ["+a+"]");};goog.uri.utils.appendQueryData_=function(a){if(a[1]){var b=a[0],c=b.indexOf("#");0<=c&&(a.push(b.substr(c)),a[0]=b=b.substr(0,c));c=b.indexOf("?");0>c?a[1]="?":c==b.length-1&&(a[1]=void 0)}return a.join("")}; +goog.uri.utils.appendKeyValuePairs_=function(a,b,c){if(goog.isArray(b))for(var d=0;dd)return null;var e=a.indexOf("\x26",d);if(0>e||e>c)e=c;d+=b.length+1;return goog.string.urlDecode(a.substr(d,e-d))};goog.uri.utils.getParamValues=function(a,b){for(var c=a.search(goog.uri.utils.hashOrEndRe_),d=0,e,f=[];0<=(e=goog.uri.utils.findParam_(a,d,b,c));){d=a.indexOf("\x26",e);if(0>d||d>c)d=c;e+=b.length+1;f.push(goog.string.urlDecode(a.substr(e,d-e)))}return f}; +goog.uri.utils.trailingQueryPunctuationRe_=/[?&]($|#)/;goog.uri.utils.removeParam=function(a,b){for(var c=a.search(goog.uri.utils.hashOrEndRe_),d=0,e,f=[];0<=(e=goog.uri.utils.findParam_(a,d,b,c));)f.push(a.substring(d,e)),d=Math.min(a.indexOf("\x26",e)+1||c,c);f.push(a.substr(d));return f.join("").replace(goog.uri.utils.trailingQueryPunctuationRe_,"$1")};goog.uri.utils.setParam=function(a,b,c){return goog.uri.utils.appendParam(goog.uri.utils.removeParam(a,b),b,c)}; +goog.uri.utils.appendPath=function(a,b){goog.uri.utils.assertNoFragmentsOrQueries_(a);goog.string.endsWith(a,"/")&&(a=a.substr(0,a.length-1));goog.string.startsWith(b,"/")&&(b=b.substr(1));return goog.string.buildString(a,"/",b)};goog.uri.utils.StandardQueryParam={RANDOM:"zx"};goog.uri.utils.makeUnique=function(a){return goog.uri.utils.setParam(a,goog.uri.utils.StandardQueryParam.RANDOM,goog.string.getRandomString())};goog.Uri=function(a,b){var c;a instanceof goog.Uri?(this.ignoreCase_=goog.isDef(b)?b:a.getIgnoreCase(),this.setScheme(a.getScheme()),this.setUserInfo(a.getUserInfo()),this.setDomain(a.getDomain()),this.setPort(a.getPort()),this.setPath(a.getPath()),this.setQueryData(a.getQueryData().clone()),this.setFragment(a.getFragment())):a&&(c=goog.uri.utils.split(String(a)))?(this.ignoreCase_=!!b,this.setScheme(c[goog.uri.utils.ComponentIndex.SCHEME]||"",!0),this.setUserInfo(c[goog.uri.utils.ComponentIndex.USER_INFO]|| +"",!0),this.setDomain(c[goog.uri.utils.ComponentIndex.DOMAIN]||"",!0),this.setPort(c[goog.uri.utils.ComponentIndex.PORT]),this.setPath(c[goog.uri.utils.ComponentIndex.PATH]||"",!0),this.setQueryData(c[goog.uri.utils.ComponentIndex.QUERY_DATA]||"",!0),this.setFragment(c[goog.uri.utils.ComponentIndex.FRAGMENT]||"",!0)):(this.ignoreCase_=!!b,this.queryData_=new goog.Uri.QueryData(null,null,this.ignoreCase_))};goog.Uri.preserveParameterTypesCompatibilityFlag=!1;goog.Uri.RANDOM_PARAM=goog.uri.utils.StandardQueryParam.RANDOM; +goog.Uri.prototype.scheme_="";goog.Uri.prototype.userInfo_="";goog.Uri.prototype.domain_="";goog.Uri.prototype.port_=null;goog.Uri.prototype.path_="";goog.Uri.prototype.fragment_="";goog.Uri.prototype.isReadOnly_=!1;goog.Uri.prototype.ignoreCase_=!1; +goog.Uri.prototype.toString=function(){var a=[],b=this.getScheme();b&&a.push(goog.Uri.encodeSpecialChars_(b,goog.Uri.reDisallowedInSchemeOrUserInfo_),":");if(b=this.getDomain()){a.push("//");var c=this.getUserInfo();c&&a.push(goog.Uri.encodeSpecialChars_(c,goog.Uri.reDisallowedInSchemeOrUserInfo_),"@");a.push(goog.string.urlEncode(b));b=this.getPort();null!=b&&a.push(":",String(b))}if(b=this.getPath())this.hasDomain()&&"/"!=b.charAt(0)&&a.push("/"),a.push(goog.Uri.encodeSpecialChars_(b,"/"==b.charAt(0)? +goog.Uri.reDisallowedInAbsolutePath_:goog.Uri.reDisallowedInRelativePath_));(b=this.getEncodedQuery())&&a.push("?",b);(b=this.getFragment())&&a.push("#",goog.Uri.encodeSpecialChars_(b,goog.Uri.reDisallowedInFragment_));return a.join("")}; +goog.Uri.prototype.resolve=function(a){var b=this.clone(),c=a.hasScheme();c?b.setScheme(a.getScheme()):c=a.hasUserInfo();c?b.setUserInfo(a.getUserInfo()):c=a.hasDomain();c?b.setDomain(a.getDomain()):c=a.hasPort();var d=a.getPath();if(c)b.setPort(a.getPort());else if(c=a.hasPath()){if("/"!=d.charAt(0))if(this.hasDomain()&&!this.hasPath())d="/"+d;else{var e=b.getPath().lastIndexOf("/");-1!=e&&(d=b.getPath().substr(0,e+1)+d)}d=goog.Uri.removeDotSegments(d)}c?b.setPath(d):c=a.hasQuery();c?b.setQueryData(a.getDecodedQuery()): +c=a.hasFragment();c&&b.setFragment(a.getFragment());return b};goog.Uri.prototype.clone=function(){return new goog.Uri(this)};goog.Uri.prototype.getScheme=function(){return this.scheme_};goog.Uri.prototype.setScheme=function(a,b){this.enforceReadOnly();if(this.scheme_=b?goog.Uri.decodeOrEmpty_(a):a)this.scheme_=this.scheme_.replace(/:$/,"");return this};goog.Uri.prototype.hasScheme=function(){return!!this.scheme_};goog.Uri.prototype.getUserInfo=function(){return this.userInfo_}; +goog.Uri.prototype.setUserInfo=function(a,b){this.enforceReadOnly();this.userInfo_=b?goog.Uri.decodeOrEmpty_(a):a;return this};goog.Uri.prototype.hasUserInfo=function(){return!!this.userInfo_};goog.Uri.prototype.getDomain=function(){return this.domain_};goog.Uri.prototype.setDomain=function(a,b){this.enforceReadOnly();this.domain_=b?goog.Uri.decodeOrEmpty_(a):a;return this};goog.Uri.prototype.hasDomain=function(){return!!this.domain_};goog.Uri.prototype.getPort=function(){return this.port_}; +goog.Uri.prototype.setPort=function(a){this.enforceReadOnly();if(a){a=Number(a);if(isNaN(a)||0>a)throw Error("Bad port number "+a);this.port_=a}else this.port_=null;return this};goog.Uri.prototype.hasPort=function(){return null!=this.port_};goog.Uri.prototype.getPath=function(){return this.path_};goog.Uri.prototype.setPath=function(a,b){this.enforceReadOnly();this.path_=b?goog.Uri.decodeOrEmpty_(a):a;return this};goog.Uri.prototype.hasPath=function(){return!!this.path_}; +goog.Uri.prototype.hasQuery=function(){return""!==this.queryData_.toString()};goog.Uri.prototype.setQueryData=function(a,b){this.enforceReadOnly();a instanceof goog.Uri.QueryData?(this.queryData_=a,this.queryData_.setIgnoreCase(this.ignoreCase_)):(b||(a=goog.Uri.encodeSpecialChars_(a,goog.Uri.reDisallowedInQuery_)),this.queryData_=new goog.Uri.QueryData(a,null,this.ignoreCase_));return this};goog.Uri.prototype.setQuery=function(a,b){return this.setQueryData(a,b)}; +goog.Uri.prototype.getEncodedQuery=function(){return this.queryData_.toString()};goog.Uri.prototype.getDecodedQuery=function(){return this.queryData_.toDecodedString()};goog.Uri.prototype.getQueryData=function(){return this.queryData_};goog.Uri.prototype.getQuery=function(){return this.getEncodedQuery()};goog.Uri.prototype.setParameterValue=function(a,b){this.enforceReadOnly();this.queryData_.set(a,b);return this}; +goog.Uri.prototype.setParameterValues=function(a,b){this.enforceReadOnly();goog.isArray(b)||(b=[String(b)]);this.queryData_.setValues(a,b);return this};goog.Uri.prototype.getParameterValues=function(a){return this.queryData_.getValues(a)};goog.Uri.prototype.getParameterValue=function(a){return this.queryData_.get(a)};goog.Uri.prototype.getFragment=function(){return this.fragment_};goog.Uri.prototype.setFragment=function(a,b){this.enforceReadOnly();this.fragment_=b?goog.Uri.decodeOrEmpty_(a):a;return this}; +goog.Uri.prototype.hasFragment=function(){return!!this.fragment_};goog.Uri.prototype.hasSameDomainAs=function(a){return(!this.hasDomain()&&!a.hasDomain()||this.getDomain()==a.getDomain())&&(!this.hasPort()&&!a.hasPort()||this.getPort()==a.getPort())};goog.Uri.prototype.makeUnique=function(){this.enforceReadOnly();this.setParameterValue(goog.Uri.RANDOM_PARAM,goog.string.getRandomString());return this};goog.Uri.prototype.removeParameter=function(a){this.enforceReadOnly();this.queryData_.remove(a);return this}; +goog.Uri.prototype.setReadOnly=function(a){this.isReadOnly_=a;return this};goog.Uri.prototype.isReadOnly=function(){return this.isReadOnly_};goog.Uri.prototype.enforceReadOnly=function(){if(this.isReadOnly_)throw Error("Tried to modify a read-only Uri");};goog.Uri.prototype.setIgnoreCase=function(a){this.ignoreCase_=a;this.queryData_&&this.queryData_.setIgnoreCase(a);return this};goog.Uri.prototype.getIgnoreCase=function(){return this.ignoreCase_}; +goog.Uri.parse=function(a,b){return a instanceof goog.Uri?a.clone():new goog.Uri(a,b)};goog.Uri.create=function(a,b,c,d,e,f,g,h){h=new goog.Uri(null,h);a&&h.setScheme(a);b&&h.setUserInfo(b);c&&h.setDomain(c);d&&h.setPort(d);e&&h.setPath(e);f&&h.setQueryData(f);g&&h.setFragment(g);return h};goog.Uri.resolve=function(a,b){a instanceof goog.Uri||(a=goog.Uri.parse(a));b instanceof goog.Uri||(b=goog.Uri.parse(b));return a.resolve(b)}; +goog.Uri.removeDotSegments=function(a){if(".."==a||"."==a)return"";if(goog.string.contains(a,"./")||goog.string.contains(a,"/.")){var b=goog.string.startsWith(a,"/");a=a.split("/");for(var c=[],d=0;d>4&15).toString(16)+(a&15).toString(16)};goog.Uri.reDisallowedInSchemeOrUserInfo_=/[#\/\?@]/g;goog.Uri.reDisallowedInRelativePath_=/[\#\?:]/g;goog.Uri.reDisallowedInAbsolutePath_=/[\#\?]/g;goog.Uri.reDisallowedInQuery_=/[\#\?@]/g;goog.Uri.reDisallowedInFragment_=/#/g; +goog.Uri.haveSameDomain=function(a,b){var c=goog.uri.utils.split(a),d=goog.uri.utils.split(b);return c[goog.uri.utils.ComponentIndex.DOMAIN]==d[goog.uri.utils.ComponentIndex.DOMAIN]&&c[goog.uri.utils.ComponentIndex.PORT]==d[goog.uri.utils.ComponentIndex.PORT]};goog.Uri.QueryData=function(a,b,c){this.encodedQuery_=a||null;this.ignoreCase_=!!c}; +goog.Uri.QueryData.prototype.ensureKeyMapInitialized_=function(){if(!this.keyMap_&&(this.keyMap_=new goog.structs.Map,this.count_=0,this.encodedQuery_))for(var a=this.encodedQuery_.split("\x26"),b=0;bb)return!1;!(a instanceof goog.structs.Set)&&5=goog.events.KeyCodes.F1&&a.keyCode<=goog.events.KeyCodes.F12)return!1;switch(a.keyCode){case goog.events.KeyCodes.ALT:case goog.events.KeyCodes.CAPS_LOCK:case goog.events.KeyCodes.CONTEXT_MENU:case goog.events.KeyCodes.CTRL:case goog.events.KeyCodes.DOWN:case goog.events.KeyCodes.END:case goog.events.KeyCodes.ESC:case goog.events.KeyCodes.HOME:case goog.events.KeyCodes.INSERT:case goog.events.KeyCodes.LEFT:case goog.events.KeyCodes.MAC_FF_META:case goog.events.KeyCodes.META:case goog.events.KeyCodes.NUMLOCK:case goog.events.KeyCodes.NUM_CENTER:case goog.events.KeyCodes.PAGE_DOWN:case goog.events.KeyCodes.PAGE_UP:case goog.events.KeyCodes.PAUSE:case goog.events.KeyCodes.PHANTOM:case goog.events.KeyCodes.PRINT_SCREEN:case goog.events.KeyCodes.RIGHT:case goog.events.KeyCodes.SCROLL_LOCK:case goog.events.KeyCodes.SHIFT:case goog.events.KeyCodes.UP:case goog.events.KeyCodes.WIN_KEY:case goog.events.KeyCodes.WIN_KEY_RIGHT:return!1;case goog.events.KeyCodes.WIN_KEY_FF_LINUX:return!goog.userAgent.GECKO; +default:return a.keyCodegoog.events.KeyCodes.LAST_MEDIA_KEY}}; +goog.events.KeyCodes.firesKeyPressEvent=function(a,b,c,d,e){if(!(goog.userAgent.IE||goog.userAgent.WEBKIT&&goog.userAgent.isVersionOrHigher("525")))return!0;if(goog.userAgent.MAC&&e)return goog.events.KeyCodes.isCharacterKey(a);if(e&&!d||!c&&(b==goog.events.KeyCodes.CTRL||b==goog.events.KeyCodes.ALT||goog.userAgent.MAC&&b==goog.events.KeyCodes.META))return!1;if(goog.userAgent.WEBKIT&&d&&c)switch(a){case goog.events.KeyCodes.BACKSLASH:case goog.events.KeyCodes.OPEN_SQUARE_BRACKET:case goog.events.KeyCodes.CLOSE_SQUARE_BRACKET:case goog.events.KeyCodes.TILDE:case goog.events.KeyCodes.SEMICOLON:case goog.events.KeyCodes.DASH:case goog.events.KeyCodes.EQUALS:case goog.events.KeyCodes.COMMA:case goog.events.KeyCodes.PERIOD:case goog.events.KeyCodes.SLASH:case goog.events.KeyCodes.APOSTROPHE:case goog.events.KeyCodes.SINGLE_QUOTE:return!1}if(goog.userAgent.IE&& +d&&b==a)return!1;switch(a){case goog.events.KeyCodes.ENTER:return!(goog.userAgent.IE&&goog.userAgent.isDocumentModeOrHigher(9));case goog.events.KeyCodes.ESC:return!goog.userAgent.WEBKIT}return goog.events.KeyCodes.isCharacterKey(a)}; +goog.events.KeyCodes.isCharacterKey=function(a){if(a>=goog.events.KeyCodes.ZERO&&a<=goog.events.KeyCodes.NINE||a>=goog.events.KeyCodes.NUM_ZERO&&a<=goog.events.KeyCodes.NUM_MULTIPLY||a>=goog.events.KeyCodes.A&&a<=goog.events.KeyCodes.Z||goog.userAgent.WEBKIT&&0==a)return!0;switch(a){case goog.events.KeyCodes.SPACE:case goog.events.KeyCodes.QUESTION_MARK:case goog.events.KeyCodes.NUM_PLUS:case goog.events.KeyCodes.NUM_MINUS:case goog.events.KeyCodes.NUM_PERIOD:case goog.events.KeyCodes.NUM_DIVISION:case goog.events.KeyCodes.SEMICOLON:case goog.events.KeyCodes.FF_SEMICOLON:case goog.events.KeyCodes.DASH:case goog.events.KeyCodes.EQUALS:case goog.events.KeyCodes.FF_EQUALS:case goog.events.KeyCodes.COMMA:case goog.events.KeyCodes.PERIOD:case goog.events.KeyCodes.SLASH:case goog.events.KeyCodes.APOSTROPHE:case goog.events.KeyCodes.SINGLE_QUOTE:case goog.events.KeyCodes.OPEN_SQUARE_BRACKET:case goog.events.KeyCodes.BACKSLASH:case goog.events.KeyCodes.CLOSE_SQUARE_BRACKET:return!0; +default:return!1}};goog.events.KeyCodes.normalizeGeckoKeyCode=function(a){switch(a){case goog.events.KeyCodes.FF_EQUALS:return goog.events.KeyCodes.EQUALS;case goog.events.KeyCodes.FF_SEMICOLON:return goog.events.KeyCodes.SEMICOLON;case goog.events.KeyCodes.MAC_FF_META:return goog.events.KeyCodes.META;case goog.events.KeyCodes.WIN_KEY_FF_LINUX:return goog.events.KeyCodes.WIN_KEY;default:return a}};goog.events.KeyHandler=function(a,b){goog.events.EventTarget.call(this);a&&this.attach(a,b)};goog.inherits(goog.events.KeyHandler,goog.events.EventTarget);goog.events.KeyHandler.prototype.element_=null;goog.events.KeyHandler.prototype.keyPressKey_=null;goog.events.KeyHandler.prototype.keyDownKey_=null;goog.events.KeyHandler.prototype.keyUpKey_=null;goog.events.KeyHandler.prototype.lastKey_=-1;goog.events.KeyHandler.prototype.keyCode_=-1;goog.events.KeyHandler.prototype.altKey_=!1; +goog.events.KeyHandler.EventType={KEY:"key"}; +goog.events.KeyHandler.safariKey_={3:goog.events.KeyCodes.ENTER,12:goog.events.KeyCodes.NUMLOCK,63232:goog.events.KeyCodes.UP,63233:goog.events.KeyCodes.DOWN,63234:goog.events.KeyCodes.LEFT,63235:goog.events.KeyCodes.RIGHT,63236:goog.events.KeyCodes.F1,63237:goog.events.KeyCodes.F2,63238:goog.events.KeyCodes.F3,63239:goog.events.KeyCodes.F4,63240:goog.events.KeyCodes.F5,63241:goog.events.KeyCodes.F6,63242:goog.events.KeyCodes.F7,63243:goog.events.KeyCodes.F8,63244:goog.events.KeyCodes.F9,63245:goog.events.KeyCodes.F10, +63246:goog.events.KeyCodes.F11,63247:goog.events.KeyCodes.F12,63248:goog.events.KeyCodes.PRINT_SCREEN,63272:goog.events.KeyCodes.DELETE,63273:goog.events.KeyCodes.HOME,63275:goog.events.KeyCodes.END,63276:goog.events.KeyCodes.PAGE_UP,63277:goog.events.KeyCodes.PAGE_DOWN,63289:goog.events.KeyCodes.NUMLOCK,63302:goog.events.KeyCodes.INSERT}; +goog.events.KeyHandler.keyIdentifier_={Up:goog.events.KeyCodes.UP,Down:goog.events.KeyCodes.DOWN,Left:goog.events.KeyCodes.LEFT,Right:goog.events.KeyCodes.RIGHT,Enter:goog.events.KeyCodes.ENTER,F1:goog.events.KeyCodes.F1,F2:goog.events.KeyCodes.F2,F3:goog.events.KeyCodes.F3,F4:goog.events.KeyCodes.F4,F5:goog.events.KeyCodes.F5,F6:goog.events.KeyCodes.F6,F7:goog.events.KeyCodes.F7,F8:goog.events.KeyCodes.F8,F9:goog.events.KeyCodes.F9,F10:goog.events.KeyCodes.F10,F11:goog.events.KeyCodes.F11,F12:goog.events.KeyCodes.F12, +"U+007F":goog.events.KeyCodes.DELETE,Home:goog.events.KeyCodes.HOME,End:goog.events.KeyCodes.END,PageUp:goog.events.KeyCodes.PAGE_UP,PageDown:goog.events.KeyCodes.PAGE_DOWN,Insert:goog.events.KeyCodes.INSERT};goog.events.KeyHandler.USES_KEYDOWN_=goog.userAgent.IE||goog.userAgent.WEBKIT&&goog.userAgent.isVersionOrHigher("525");goog.events.KeyHandler.SAVE_ALT_FOR_KEYPRESS_=goog.userAgent.MAC&&goog.userAgent.GECKO; +goog.events.KeyHandler.prototype.handleKeyDown_=function(a){goog.userAgent.WEBKIT&&(this.lastKey_==goog.events.KeyCodes.CTRL&&!a.ctrlKey||this.lastKey_==goog.events.KeyCodes.ALT&&!a.altKey||goog.userAgent.MAC&&this.lastKey_==goog.events.KeyCodes.META&&!a.metaKey)&&(this.keyCode_=this.lastKey_=-1);-1==this.lastKey_&&(a.ctrlKey&&a.keyCode!=goog.events.KeyCodes.CTRL?this.lastKey_=goog.events.KeyCodes.CTRL:a.altKey&&a.keyCode!=goog.events.KeyCodes.ALT?this.lastKey_=goog.events.KeyCodes.ALT:a.metaKey&& +a.keyCode!=goog.events.KeyCodes.META&&(this.lastKey_=goog.events.KeyCodes.META));goog.events.KeyHandler.USES_KEYDOWN_&&!goog.events.KeyCodes.firesKeyPressEvent(a.keyCode,this.lastKey_,a.shiftKey,a.ctrlKey,a.altKey)?this.handleEvent(a):(this.keyCode_=goog.userAgent.GECKO?goog.events.KeyCodes.normalizeGeckoKeyCode(a.keyCode):a.keyCode,goog.events.KeyHandler.SAVE_ALT_FOR_KEYPRESS_&&(this.altKey_=a.altKey))};goog.events.KeyHandler.prototype.resetState=function(){this.keyCode_=this.lastKey_=-1}; +goog.events.KeyHandler.prototype.handleKeyup_=function(a){this.resetState();this.altKey_=a.altKey}; +goog.events.KeyHandler.prototype.handleEvent=function(a){var b=a.getBrowserEvent(),c,d,e=b.altKey;goog.userAgent.IE&&a.type==goog.events.EventType.KEYPRESS?(c=this.keyCode_,d=c!=goog.events.KeyCodes.ENTER&&c!=goog.events.KeyCodes.ESC?b.keyCode:0):goog.userAgent.WEBKIT&&a.type==goog.events.EventType.KEYPRESS?(c=this.keyCode_,d=0<=b.charCode&&63232>b.charCode&&goog.events.KeyCodes.isCharacterKey(c)?b.charCode:0):goog.userAgent.OPERA?(c=this.keyCode_,d=goog.events.KeyCodes.isCharacterKey(c)?b.keyCode: +0):(c=b.keyCode||this.keyCode_,d=b.charCode||0,goog.events.KeyHandler.SAVE_ALT_FOR_KEYPRESS_&&(e=this.altKey_),goog.userAgent.MAC&&(d==goog.events.KeyCodes.QUESTION_MARK&&c==goog.events.KeyCodes.WIN_KEY)&&(c=goog.events.KeyCodes.SLASH));var f=c,g=b.keyIdentifier;c?63232<=c&&c in goog.events.KeyHandler.safariKey_?f=goog.events.KeyHandler.safariKey_[c]:25==c&&a.shiftKey&&(f=9):g&&g in goog.events.KeyHandler.keyIdentifier_&&(f=goog.events.KeyHandler.keyIdentifier_[g]);a=f==this.lastKey_;this.lastKey_= +f;b=new goog.events.KeyEvent(f,d,a,b);b.altKey=e;this.dispatchEvent(b)};goog.events.KeyHandler.prototype.getElement=function(){return this.element_}; +goog.events.KeyHandler.prototype.attach=function(a,b){this.keyUpKey_&&this.detach();this.element_=a;this.keyPressKey_=goog.events.listen(this.element_,goog.events.EventType.KEYPRESS,this,b);this.keyDownKey_=goog.events.listen(this.element_,goog.events.EventType.KEYDOWN,this.handleKeyDown_,b,this);this.keyUpKey_=goog.events.listen(this.element_,goog.events.EventType.KEYUP,this.handleKeyup_,b,this)}; +goog.events.KeyHandler.prototype.detach=function(){this.keyPressKey_&&(goog.events.unlistenByKey(this.keyPressKey_),goog.events.unlistenByKey(this.keyDownKey_),goog.events.unlistenByKey(this.keyUpKey_),this.keyUpKey_=this.keyDownKey_=this.keyPressKey_=null);this.element_=null;this.keyCode_=this.lastKey_=-1};goog.events.KeyHandler.prototype.disposeInternal=function(){goog.events.KeyHandler.superClass_.disposeInternal.call(this);this.detach()}; +goog.events.KeyEvent=function(a,b,c,d){goog.events.BrowserEvent.call(this,d);this.type=goog.events.KeyHandler.EventType.KEY;this.keyCode=a;this.charCode=b;this.repeat=c};goog.inherits(goog.events.KeyEvent,goog.events.BrowserEvent);goog.dom.vendor={};goog.dom.vendor.getVendorJsPrefix=function(){return goog.userAgent.WEBKIT?"Webkit":goog.userAgent.GECKO?"Moz":goog.userAgent.IE?"ms":goog.userAgent.OPERA?"O":null};goog.dom.vendor.getVendorPrefix=function(){return goog.userAgent.WEBKIT?"-webkit":goog.userAgent.GECKO?"-moz":goog.userAgent.IE?"-ms":goog.userAgent.OPERA?"-o":null};goog.math.Box=function(a,b,c,d){this.top=a;this.right=b;this.bottom=c;this.left=d};goog.math.Box.boundingBox=function(a){for(var b=new goog.math.Box(arguments[0].y,arguments[0].x,arguments[0].y,arguments[0].x),c=1;c=a.left&&b.right<=a.right&&b.top>=a.top&&b.bottom<=a.bottom:b.x>=a.left&&b.x<=a.right&&b.y>=a.top&&b.y<=a.bottom:!1};goog.math.Box.relativePositionX=function(a,b){return b.xa.right?b.x-a.right:0};goog.math.Box.relativePositionY=function(a,b){return b.ya.bottom?b.y-a.bottom:0}; +goog.math.Box.distance=function(a,b){var c=goog.math.Box.relativePositionX(a,b),d=goog.math.Box.relativePositionY(a,b);return Math.sqrt(c*c+d*d)};goog.math.Box.intersects=function(a,b){return a.left<=b.right&&b.left<=a.right&&a.top<=b.bottom&&b.top<=a.bottom};goog.math.Box.intersectsWithPadding=function(a,b,c){return a.left<=b.right+c&&b.left<=a.right+c&&a.top<=b.bottom+c&&b.top<=a.bottom+c}; +goog.math.Box.prototype.ceil=function(){this.top=Math.ceil(this.top);this.right=Math.ceil(this.right);this.bottom=Math.ceil(this.bottom);this.left=Math.ceil(this.left);return this};goog.math.Box.prototype.floor=function(){this.top=Math.floor(this.top);this.right=Math.floor(this.right);this.bottom=Math.floor(this.bottom);this.left=Math.floor(this.left);return this}; +goog.math.Box.prototype.round=function(){this.top=Math.round(this.top);this.right=Math.round(this.right);this.bottom=Math.round(this.bottom);this.left=Math.round(this.left);return this};goog.math.Box.prototype.translate=function(a,b){a instanceof goog.math.Coordinate?(this.left+=a.x,this.right+=a.x,this.top+=a.y,this.bottom+=a.y):(this.left+=a,this.right+=a,goog.isNumber(b)&&(this.top+=b,this.bottom+=b));return this}; +goog.math.Box.prototype.scale=function(a,b){var c=goog.isNumber(b)?b:a;this.left*=a;this.right*=a;this.top*=c;this.bottom*=c;return this};goog.math.Rect=function(a,b,c,d){this.left=a;this.top=b;this.width=c;this.height=d};goog.math.Rect.prototype.clone=function(){return new goog.math.Rect(this.left,this.top,this.width,this.height)};goog.math.Rect.prototype.toBox=function(){return new goog.math.Box(this.top,this.left+this.width,this.top+this.height,this.left)};goog.math.Rect.createFromBox=function(a){return new goog.math.Rect(a.left,a.top,a.right-a.left,a.bottom-a.top)}; +goog.DEBUG&&(goog.math.Rect.prototype.toString=function(){return"("+this.left+", "+this.top+" - "+this.width+"w x "+this.height+"h)"});goog.math.Rect.equals=function(a,b){return a==b?!0:a&&b?a.left==b.left&&a.width==b.width&&a.top==b.top&&a.height==b.height:!1}; +goog.math.Rect.prototype.intersection=function(a){var b=Math.max(this.left,a.left),c=Math.min(this.left+this.width,a.left+a.width);if(b<=c){var d=Math.max(this.top,a.top);a=Math.min(this.top+this.height,a.top+a.height);if(d<=a)return this.left=b,this.top=d,this.width=c-b,this.height=a-d,!0}return!1}; +goog.math.Rect.intersection=function(a,b){var c=Math.max(a.left,b.left),d=Math.min(a.left+a.width,b.left+b.width);if(c<=d){var e=Math.max(a.top,b.top),f=Math.min(a.top+a.height,b.top+b.height);if(e<=f)return new goog.math.Rect(c,e,d-c,f-e)}return null};goog.math.Rect.intersects=function(a,b){return a.left<=b.left+b.width&&b.left<=a.left+a.width&&a.top<=b.top+b.height&&b.top<=a.top+a.height};goog.math.Rect.prototype.intersects=function(a){return goog.math.Rect.intersects(this,a)}; +goog.math.Rect.difference=function(a,b){var c=goog.math.Rect.intersection(a,b);if(!c||!c.height||!c.width)return[a.clone()];var c=[],d=a.top,e=a.height,f=a.left+a.width,g=a.top+a.height,h=b.left+b.width,k=b.top+b.height;b.top>a.top&&(c.push(new goog.math.Rect(a.left,a.top,a.width,b.top-a.top)),d=b.top,e-=b.top-a.top);ka.left&&c.push(new goog.math.Rect(a.left,d,b.left-a.left,e));h=a.left+a.width&&this.top<=a.top&&this.top+this.height>=a.top+a.height:a.x>=this.left&&a.x<=this.left+this.width&&a.y>=this.top&&a.y<=this.top+this.height};goog.math.Rect.prototype.squaredDistance=function(a){var b=a.xa.clientWidth||a.scrollHeight>a.clientHeight||"fixed"==c||"absolute"==c||"relative"==c))return a;return null}; +goog.style.getVisibleRectForElement=function(a){for(var b=new goog.math.Box(0,Infinity,Infinity,0),c=goog.dom.getDomHelper(a),d=c.getDocument().body,e=c.getDocument().documentElement,f=c.getDocumentScrollElement();a=goog.style.getOffsetParent(a);)if(!(goog.userAgent.IE&&0==a.clientWidth||goog.userAgent.WEBKIT&&0==a.clientHeight&&a==d||a==d||a==e||"visible"==goog.style.getStyle_(a,"overflow"))){var g=goog.style.getPageOffset(a),h=goog.style.getClientLeftTop(a);g.x+=h.x;g.y+=h.y;b.top=Math.max(b.top, +g.y);b.right=Math.min(b.right,g.x+a.clientWidth);b.bottom=Math.min(b.bottom,g.y+a.clientHeight);b.left=Math.max(b.left,g.x)}d=f.scrollLeft;f=f.scrollTop;b.left=Math.max(b.left,d);b.top=Math.max(b.top,f);c=c.getViewportSize();b.right=Math.min(b.right,d+c.width);b.bottom=Math.min(b.bottom,f+c.height);return 0<=b.top&&0<=b.left&&b.bottom>b.top&&b.right>b.left?b:null}; +goog.style.getContainerOffsetToScrollInto=function(a,b,c){var d=goog.style.getPageOffset(a),e=goog.style.getPageOffset(b),f=goog.style.getBorderBox(b),g=d.x-e.x-f.left,d=d.y-e.y-f.top,e=b.clientWidth-a.offsetWidth;a=b.clientHeight-a.offsetHeight;f=b.scrollLeft;b=b.scrollTop;c?(f+=g-e/2,b+=d-a/2):(f+=Math.min(g,Math.max(g-e,0)),b+=Math.min(d,Math.max(d-a,0)));return new goog.math.Coordinate(f,b)}; +goog.style.scrollIntoContainerView=function(a,b,c){a=goog.style.getContainerOffsetToScrollInto(a,b,c);b.scrollLeft=a.x;b.scrollTop=a.y}; +goog.style.getClientLeftTop=function(a){if(goog.userAgent.GECKO&&!goog.userAgent.isVersionOrHigher("1.9")){var b=parseFloat(goog.style.getComputedStyle(a,"borderLeftWidth"));if(goog.style.isRightToLeft(a))var c=a.offsetWidth-a.clientWidth-b-parseFloat(goog.style.getComputedStyle(a,"borderRightWidth")),b=b+c;return new goog.math.Coordinate(b,parseFloat(goog.style.getComputedStyle(a,"borderTopWidth")))}return new goog.math.Coordinate(a.clientLeft,a.clientTop)}; +goog.style.getPageOffset=function(a){var b,c=goog.dom.getOwnerDocument(a),d=goog.style.getStyle_(a,"position"),e=!goog.style.GET_BOUNDING_CLIENT_RECT_ALWAYS_EXISTS&&goog.userAgent.GECKO&&c.getBoxObjectFor&&!a.getBoundingClientRect&&"absolute"==d&&(b=c.getBoxObjectFor(a))&&(0>b.screenX||0>b.screenY),f=new goog.math.Coordinate(0,0),g=goog.style.getClientViewportElement(c);if(a==g)return f;if(goog.style.GET_BOUNDING_CLIENT_RECT_ALWAYS_EXISTS||a.getBoundingClientRect)b=goog.style.getBoundingClientRect_(a), +a=goog.dom.getDomHelper(c).getDocumentScroll(),f.x=b.left+a.x,f.y=b.top+a.y;else if(c.getBoxObjectFor&&!e)b=c.getBoxObjectFor(a),a=c.getBoxObjectFor(g),f.x=b.screenX-a.screenX,f.y=b.screenY-a.screenY;else{b=a;do{f.x+=b.offsetLeft;f.y+=b.offsetTop;b!=a&&(f.x+=b.clientLeft||0,f.y+=b.clientTop||0);if(goog.userAgent.WEBKIT&&"fixed"==goog.style.getComputedPosition(b)){f.x+=c.body.scrollLeft;f.y+=c.body.scrollTop;break}b=b.offsetParent}while(b&&b!=a);if(goog.userAgent.OPERA||goog.userAgent.WEBKIT&&"absolute"== +d)f.y-=c.body.offsetTop;for(b=a;(b=goog.style.getOffsetParent(b))&&b!=c.body&&b!=g;)f.x-=b.scrollLeft,goog.userAgent.OPERA&&"TR"==b.tagName||(f.y-=b.scrollTop)}return f};goog.style.getPageOffsetLeft=function(a){return goog.style.getPageOffset(a).x};goog.style.getPageOffsetTop=function(a){return goog.style.getPageOffset(a).y}; +goog.style.getFramedPageOffset=function(a,b){var c=new goog.math.Coordinate(0,0),d=goog.dom.getWindow(goog.dom.getOwnerDocument(a)),e=a;do{var f=d==b?goog.style.getPageOffset(e):goog.style.getClientPositionForElement_(null);c.x+=f.x;c.y+=f.y}while(d&&d!=b&&(e=d.frameElement)&&(d=d.parent));return c}; +goog.style.translateRectForAnotherFrame=function(a,b,c){if(b.getDocument()!=c.getDocument()){var d=b.getDocument().body;c=goog.style.getFramedPageOffset(d,c.getWindow());c=goog.math.Coordinate.difference(c,goog.style.getPageOffset(d));goog.userAgent.IE&&!b.isCss1CompatMode()&&(c=goog.math.Coordinate.difference(c,b.getDocumentScroll()));a.left+=c.x;a.top+=c.y}}; +goog.style.getRelativePosition=function(a,b){var c=goog.style.getClientPosition(a),d=goog.style.getClientPosition(b);return new goog.math.Coordinate(c.x-d.x,c.y-d.y)}; +goog.style.getClientPositionForElement_=function(a){var b;if(goog.style.GET_BOUNDING_CLIENT_RECT_ALWAYS_EXISTS||a.getBoundingClientRect)b=goog.style.getBoundingClientRect_(a),b=new goog.math.Coordinate(b.left,b.top);else{b=goog.dom.getDomHelper(a).getDocumentScroll();var c=goog.style.getPageOffset(a);b=new goog.math.Coordinate(c.x-b.x,c.y-b.y)}return goog.userAgent.GECKO&&!goog.userAgent.isVersionOrHigher(12)?goog.math.Coordinate.sum(b,goog.style.getCssTranslation(a)):b}; +goog.style.getClientPosition=function(a){if(a.nodeType==goog.dom.NodeType.ELEMENT)return goog.style.getClientPositionForElement_(a);var b=goog.isFunction(a.getBrowserEvent),c=a;a.targetTouches?c=a.targetTouches[0]:b&&a.getBrowserEvent().targetTouches&&(c=a.getBrowserEvent().targetTouches[0]);return new goog.math.Coordinate(c.clientX,c.clientY)}; +goog.style.setPageOffset=function(a,b,c){var d=goog.style.getPageOffset(a);b instanceof goog.math.Coordinate&&(c=b.y,b=b.x);goog.style.setPosition(a,a.offsetLeft+(b-d.x),a.offsetTop+(c-d.y))};goog.style.setSize=function(a,b,c){if(b instanceof goog.math.Size)c=b.height,b=b.width;else if(void 0==c)throw Error("missing height argument");goog.style.setWidth(a,b);goog.style.setHeight(a,c)};goog.style.getPixelStyleValue_=function(a,b){"number"==typeof a&&(a=(b?Math.round(a):a)+"px");return a}; +goog.style.setHeight=function(a,b){a.style.height=goog.style.getPixelStyleValue_(b,!0)};goog.style.setWidth=function(a,b){a.style.width=goog.style.getPixelStyleValue_(b,!0)};goog.style.getSize=function(a){return goog.style.evaluateWithTemporaryDisplay_(goog.style.getSizeWithDisplay_,a)}; +goog.style.evaluateWithTemporaryDisplay_=function(a,b){if("none"!=goog.style.getStyle_(b,"display"))return a(b);var c=b.style,d=c.display,e=c.visibility,f=c.position;c.visibility="hidden";c.position="absolute";c.display="inline";var g=a(b);c.display=d;c.position=f;c.visibility=e;return g}; +goog.style.getSizeWithDisplay_=function(a){var b=a.offsetWidth,c=a.offsetHeight,d=goog.userAgent.WEBKIT&&!b&&!c;return goog.isDef(b)&&!d||!a.getBoundingClientRect?new goog.math.Size(b,c):(a=goog.style.getBoundingClientRect_(a),new goog.math.Size(a.right-a.left,a.bottom-a.top))};goog.style.getTransformedSize=function(a){if(!a.getBoundingClientRect)return null;a=goog.style.evaluateWithTemporaryDisplay_(goog.style.getBoundingClientRect_,a);return new goog.math.Size(a.right-a.left,a.bottom-a.top)}; +goog.style.getBounds=function(a){var b=goog.style.getPageOffset(a);a=goog.style.getSize(a);return new goog.math.Rect(b.x,b.y,a.width,a.height)};goog.style.toCamelCase=function(a){return goog.string.toCamelCase(String(a))};goog.style.toSelectorCase=function(a){return goog.string.toSelectorCase(a)}; +goog.style.getOpacity=function(a){var b=a.style;a="";"opacity"in b?a=b.opacity:"MozOpacity"in b?a=b.MozOpacity:"filter"in b&&(b=b.filter.match(/alpha\(opacity=([\d.]+)\)/))&&(a=String(b[1]/100));return""==a?a:Number(a)};goog.style.setOpacity=function(a,b){var c=a.style;"opacity"in c?c.opacity=b:"MozOpacity"in c?c.MozOpacity=b:"filter"in c&&(c.filter=""===b?"":"alpha(opacity\x3d"+100*b+")")}; +goog.style.setTransparentBackgroundImage=function(a,b){var c=a.style;goog.userAgent.IE&&!goog.userAgent.isVersionOrHigher("8")?c.filter='progid:DXImageTransform.Microsoft.AlphaImageLoader(src\x3d"'+b+'", sizingMethod\x3d"crop")':(c.backgroundImage="url("+b+")",c.backgroundPosition="top left",c.backgroundRepeat="no-repeat")};goog.style.clearTransparentBackgroundImage=function(a){a=a.style;"filter"in a?a.filter="":a.backgroundImage="none"}; +goog.style.showElement=function(a,b){goog.style.setElementShown(a,b)};goog.style.setElementShown=function(a,b){a.style.display=b?"":"none"};goog.style.isElementShown=function(a){return"none"!=a.style.display}; +goog.style.installStyles=function(a,b){var c=goog.dom.getDomHelper(b),d=null;if(goog.userAgent.IE)d=c.getDocument().createStyleSheet(),goog.style.setStyles(d,a);else{var e=c.getElementsByTagNameAndClass("head")[0];e||(d=c.getElementsByTagNameAndClass("body")[0],e=c.createDom("head"),d.parentNode.insertBefore(e,d));d=c.createDom("style");goog.style.setStyles(d,a);c.appendChild(e,d)}return d};goog.style.uninstallStyles=function(a){goog.dom.removeNode(a.ownerNode||a.owningElement||a)}; +goog.style.setStyles=function(a,b){goog.userAgent.IE?a.cssText=b:a.innerHTML=b};goog.style.setPreWrap=function(a){a=a.style;goog.userAgent.IE&&!goog.userAgent.isVersionOrHigher("8")?(a.whiteSpace="pre",a.wordWrap="break-word"):a.whiteSpace=goog.userAgent.GECKO?"-moz-pre-wrap":"pre-wrap"}; +goog.style.setInlineBlock=function(a){a=a.style;a.position="relative";goog.userAgent.IE&&!goog.userAgent.isVersionOrHigher("8")?(a.zoom="1",a.display="inline"):a.display=goog.userAgent.GECKO?goog.userAgent.isVersionOrHigher("1.9a")?"inline-block":"-moz-inline-box":"inline-block"};goog.style.isRightToLeft=function(a){return"rtl"==goog.style.getStyle_(a,"direction")};goog.style.unselectableStyle_=goog.userAgent.GECKO?"MozUserSelect":goog.userAgent.WEBKIT?"WebkitUserSelect":null; +goog.style.isUnselectable=function(a){return goog.style.unselectableStyle_?"none"==a.style[goog.style.unselectableStyle_].toLowerCase():goog.userAgent.IE||goog.userAgent.OPERA?"on"==a.getAttribute("unselectable"):!1}; +goog.style.setUnselectable=function(a,b,c){c=c?null:a.getElementsByTagName("*");var d=goog.style.unselectableStyle_;if(d){if(b=b?"none":"",a.style[d]=b,c){a=0;for(var e;e=c[a];a++)e.style[d]=b}}else if(goog.userAgent.IE||goog.userAgent.OPERA)if(b=b?"on":"",a.setAttribute("unselectable",b),c)for(a=0;e=c[a];a++)e.setAttribute("unselectable",b)};goog.style.getBorderBoxSize=function(a){return new goog.math.Size(a.offsetWidth,a.offsetHeight)}; +goog.style.setBorderBoxSize=function(a,b){var c=goog.dom.getOwnerDocument(a),d=goog.dom.getDomHelper(c).isCss1CompatMode();if(!goog.userAgent.IE||d&&goog.userAgent.isVersionOrHigher("8"))goog.style.setBoxSizingSize_(a,b,"border-box");else if(c=a.style,d){var d=goog.style.getPaddingBox(a),e=goog.style.getBorderBox(a);c.pixelWidth=b.width-e.left-d.left-d.right-e.right;c.pixelHeight=b.height-e.top-d.top-d.bottom-e.bottom}else c.pixelWidth=b.width,c.pixelHeight=b.height}; +goog.style.getContentBoxSize=function(a){var b=goog.dom.getOwnerDocument(a),c=goog.userAgent.IE&&a.currentStyle;if(c&&goog.dom.getDomHelper(b).isCss1CompatMode()&&"auto"!=c.width&&"auto"!=c.height&&!c.boxSizing)return b=goog.style.getIePixelValue_(a,c.width,"width","pixelWidth"),a=goog.style.getIePixelValue_(a,c.height,"height","pixelHeight"),new goog.math.Size(b,a);c=goog.style.getBorderBoxSize(a);b=goog.style.getPaddingBox(a);a=goog.style.getBorderBox(a);return new goog.math.Size(c.width-a.left- +b.left-b.right-a.right,c.height-a.top-b.top-b.bottom-a.bottom)}; +goog.style.setContentBoxSize=function(a,b){var c=goog.dom.getOwnerDocument(a),d=goog.dom.getDomHelper(c).isCss1CompatMode();if(!goog.userAgent.IE||d&&goog.userAgent.isVersionOrHigher("8"))goog.style.setBoxSizingSize_(a,b,"content-box");else if(c=a.style,d)c.pixelWidth=b.width,c.pixelHeight=b.height;else{var d=goog.style.getPaddingBox(a),e=goog.style.getBorderBox(a);c.pixelWidth=b.width+e.left+d.left+d.right+e.right;c.pixelHeight=b.height+e.top+d.top+d.bottom+e.bottom}}; +goog.style.setBoxSizingSize_=function(a,b,c){a=a.style;goog.userAgent.GECKO?a.MozBoxSizing=c:goog.userAgent.WEBKIT?a.WebkitBoxSizing=c:a.boxSizing=c;a.width=Math.max(b.width,0)+"px";a.height=Math.max(b.height,0)+"px"};goog.style.getIePixelValue_=function(a,b,c,d){if(/^\d+px?$/.test(b))return parseInt(b,10);var e=a.style[c],f=a.runtimeStyle[c];a.runtimeStyle[c]=a.currentStyle[c];a.style[c]=b;b=a.style[d];a.style[c]=e;a.runtimeStyle[c]=f;return b}; +goog.style.getIePixelDistance_=function(a,b){var c=goog.style.getCascadedStyle(a,b);return c?goog.style.getIePixelValue_(a,c,"left","pixelLeft"):0}; +goog.style.getBox_=function(a,b){if(goog.userAgent.IE){var c=goog.style.getIePixelDistance_(a,b+"Left"),d=goog.style.getIePixelDistance_(a,b+"Right"),e=goog.style.getIePixelDistance_(a,b+"Top"),f=goog.style.getIePixelDistance_(a,b+"Bottom");return new goog.math.Box(e,d,f,c)}c=goog.style.getComputedStyle(a,b+"Left");d=goog.style.getComputedStyle(a,b+"Right");e=goog.style.getComputedStyle(a,b+"Top");f=goog.style.getComputedStyle(a,b+"Bottom");return new goog.math.Box(parseFloat(e),parseFloat(d),parseFloat(f), +parseFloat(c))};goog.style.getPaddingBox=function(a){return goog.style.getBox_(a,"padding")};goog.style.getMarginBox=function(a){return goog.style.getBox_(a,"margin")};goog.style.ieBorderWidthKeywords_={thin:2,medium:4,thick:6}; +goog.style.getIePixelBorder_=function(a,b){if("none"==goog.style.getCascadedStyle(a,b+"Style"))return 0;var c=goog.style.getCascadedStyle(a,b+"Width");return c in goog.style.ieBorderWidthKeywords_?goog.style.ieBorderWidthKeywords_[c]:goog.style.getIePixelValue_(a,c,"left","pixelLeft")}; +goog.style.getBorderBox=function(a){if(goog.userAgent.IE){var b=goog.style.getIePixelBorder_(a,"borderLeft"),c=goog.style.getIePixelBorder_(a,"borderRight"),d=goog.style.getIePixelBorder_(a,"borderTop");a=goog.style.getIePixelBorder_(a,"borderBottom");return new goog.math.Box(d,c,a,b)}b=goog.style.getComputedStyle(a,"borderLeftWidth");c=goog.style.getComputedStyle(a,"borderRightWidth");d=goog.style.getComputedStyle(a,"borderTopWidth");a=goog.style.getComputedStyle(a,"borderBottomWidth");return new goog.math.Box(parseFloat(d), +parseFloat(c),parseFloat(a),parseFloat(b))};goog.style.getFontFamily=function(a){var b=goog.dom.getOwnerDocument(a),c="";if(b.body.createTextRange){b=b.body.createTextRange();b.moveToElementText(a);try{c=b.queryCommandValue("FontName")}catch(d){c=""}}c||(c=goog.style.getStyle_(a,"fontFamily"));a=c.split(",");1d&&(d= +-3),goog.isDef(a.axis)&&a.axis===a.HORIZONTAL_AXIS?b=d:c=d;goog.isNumber(this.maxDeltaX_)&&(b=goog.math.clamp(b,-this.maxDeltaX_,this.maxDeltaX_));goog.isNumber(this.maxDeltaY_)&&(c=goog.math.clamp(c,-this.maxDeltaY_,this.maxDeltaY_));this.isRtl_&&(b=-b);b=new goog.events.MouseWheelEvent(d,a,b,c);this.dispatchEvent(b)};goog.events.MouseWheelHandler.smartScale_=function(a,b){return goog.userAgent.WEBKIT&&(goog.userAgent.MAC||goog.userAgent.LINUX)&&0!=a%b?a:a/b}; +goog.events.MouseWheelHandler.prototype.disposeInternal=function(){goog.events.MouseWheelHandler.superClass_.disposeInternal.call(this);goog.events.unlistenByKey(this.listenKey_);this.listenKey_=null};goog.events.MouseWheelEvent=function(a,b,c,d){goog.events.BrowserEvent.call(this,b);this.type=goog.events.MouseWheelHandler.EventType.MOUSEWHEEL;this.detail=a;this.deltaX=c;this.deltaY=d};goog.inherits(goog.events.MouseWheelEvent,goog.events.BrowserEvent);ol.control={};ol.control.Control=function(a){ol.Object.call(this);this.element=goog.isDef(a.element)?a.element:null;this.target_=goog.isDef(a.target)?goog.dom.getElement(a.target):null;this.map_=null;this.listenerKeys=[]};goog.inherits(ol.control.Control,ol.Object);ol.control.Control.prototype.disposeInternal=function(){goog.dom.removeNode(this.element);ol.control.Control.superClass_.disposeInternal.call(this)};ol.control.Control.prototype.getMap=function(){return this.map_}; +ol.control.Control.prototype.handleMapPostrender=goog.nullFunction; +ol.control.Control.prototype.setMap=function(a){goog.isNull(this.map_)||goog.dom.removeNode(this.element);goog.array.isEmpty(this.listenerKeys)||(goog.array.forEach(this.listenerKeys,goog.events.unlistenByKey),this.listenerKeys.length=0);this.map_=a;if(!goog.isNull(this.map_)){var b=goog.isNull(this.target_)?a.getOverlayContainerStopEvent():this.target_;goog.dom.appendChild(b,this.element);this.handleMapPostrender!==goog.nullFunction&&this.listenerKeys.push(goog.events.listen(a,ol.MapEventType.POSTRENDER, +this.handleMapPostrender,!1,this));a.render()}};ol.css={};ol.css.CLASS_UNSELECTABLE="ol-unselectable";ol.css.CLASS_UNSUPPORTED="ol-unsupported";ol.control.Attribution=function(a){a=goog.isDef(a)?a:{};this.ulElement_=goog.dom.createElement(goog.dom.TagName.UL);var b=goog.isDef(a.className)?a.className:"ol-attribution",b=goog.dom.createDom(goog.dom.TagName.DIV,{"class":b+" "+ol.css.CLASS_UNSELECTABLE},this.ulElement_);ol.control.Control.call(this,{element:b,target:a.target});this.renderedVisible_=!0;this.attributionElements_={};this.attributionElementRenderedVisible_={}};goog.inherits(ol.control.Attribution,ol.control.Control); +ol.control.Attribution.prototype.getSourceAttributions=function(a){var b,c,d,e,f,g,h,k,l,m=a.layersArray,n=goog.object.clone(a.attributions),p={};b=0;for(c=m.length;ba;)c-=3;if(0<=c){var a=this.points_[b+2]-this.points_[c+2],d=this.points_[b]-this.points_[c],b=this.points_[b+1]-this.points_[c+1];this.angle_=Math.atan2(b,d);this.initialVelocity_=Math.sqrt(d*d+b*b)/a;return this.initialVelocity_>this.minVelocity_}return!1}; +ol.Kinetic.prototype.pan=function(a){var b=this.decay_,c=this.initialVelocity_,d=this.minVelocity_,e=this.getDuration_();return ol.animation.pan({source:a,duration:e,easing:function(a){return c*(Math.exp(b*a*e)-1)/(d-c)}})};ol.Kinetic.prototype.getDuration_=function(){return Math.log(this.minVelocity_/this.initialVelocity_)/this.decay_};ol.Kinetic.prototype.getDistance=function(){return(this.minVelocity_-this.initialVelocity_)/this.decay_};ol.Kinetic.prototype.getAngle=function(){return this.angle_};ol.interaction.DoubleClickZoom=function(a){a=goog.isDef(a)?a:{};this.delta_=goog.isDef(a.delta)?a.delta:1;ol.interaction.Interaction.call(this);this.duration_=goog.isDef(a.duration)?a.duration:250};goog.inherits(ol.interaction.DoubleClickZoom,ol.interaction.Interaction); +ol.interaction.DoubleClickZoom.prototype.handleMapBrowserEvent=function(a){var b=!1,c=a.browserEvent;if(a.type==ol.MapBrowserEvent.EventType.DBLCLICK){var b=a.map,d=a.coordinate,c=c.shiftKey?-this.delta_:this.delta_,e=b.getView().getView2D();ol.interaction.Interaction.zoomByDelta(b,e,c,d,this.duration_);a.preventDefault();b=!0}return!b};ol.interaction.DragPan=function(a){ol.interaction.Drag.call(this);a=goog.isDef(a)?a:{};this.condition_=goog.isDef(a.condition)?a.condition:ol.events.condition.noModifierKeys;this.kinetic_=a.kinetic;this.kineticPreRenderFn_=null};goog.inherits(ol.interaction.DragPan,ol.interaction.Drag); +ol.interaction.DragPan.prototype.handleDrag=function(a){this.kinetic_&&this.kinetic_.update(a.browserEvent.clientX,a.browserEvent.clientY);a=a.map;var b=a.getView(),c=b.getView2DState(),d=[-c.resolution*this.deltaX,c.resolution*this.deltaY];ol.coordinate.rotate(d,c.rotation);ol.coordinate.add(d,this.startCenter);d=b.constrainCenter(d);a.render();b.setCenter(d)}; +ol.interaction.DragPan.prototype.handleDragEnd=function(a){a=a.map;var b=a.getView();b.setHint(ol.ViewHint.INTERACTING,-1);if(this.kinetic_&&this.kinetic_.end()){var b=b.getView2D(),c=b.getView2DState(),d=this.kinetic_.getDistance(),e=this.kinetic_.getAngle();this.kineticPreRenderFn_=this.kinetic_.pan(c.center);a.beforeRender(this.kineticPreRenderFn_);c=a.getPixelFromCoordinate(c.center);d=a.getCoordinateFromPixel([c[0]-d*Math.cos(e),c[1]-d*Math.sin(e)]);d=b.constrainCenter(d);b.setCenter(d)}a.render()}; +ol.interaction.DragPan.prototype.handleDragStart=function(a){var b=a.browserEvent;return b.isMouseActionButton()&&this.condition_(a)?(this.kinetic_&&(this.kinetic_.begin(),this.kinetic_.update(b.clientX,b.clientY)),a=a.map,a.getView().setHint(ol.ViewHint.INTERACTING,1),a.render(),!0):!1}; +ol.interaction.DragPan.prototype.handleDown=function(a){var b=a.map,c=b.getView();!goog.isNull(this.kineticPreRenderFn_)&&b.removePreRenderFunction(this.kineticPreRenderFn_)&&(b.render(),c.setCenter(a.frameState.view2DState.center),this.kineticPreRenderFn_=null)};ol.interaction.DRAGROTATE_ANIMATION_DURATION=250;ol.interaction.DragRotate=function(a){a=goog.isDef(a)?a:{};ol.interaction.Drag.call(this);this.condition_=goog.isDef(a.condition)?a.condition:ol.events.condition.altShiftKeysOnly;this.lastAngle_=void 0};goog.inherits(ol.interaction.DragRotate,ol.interaction.Drag); +ol.interaction.DragRotate.prototype.handleDrag=function(a){var b=a.map,c=b.getSize();a=a.pixel;c=Math.atan2(c[1]/2-a[1],a[0]-c[0]/2);if(goog.isDef(this.lastAngle_)){a=c-this.lastAngle_;var d=b.getView().getView2D(),e=d.getView2DState();b.render();ol.interaction.Interaction.rotateWithoutConstraints(b,d,e.rotation-a)}this.lastAngle_=c}; +ol.interaction.DragRotate.prototype.handleDragEnd=function(a){a=a.map;var b=a.getView();b.setHint(ol.ViewHint.INTERACTING,-1);var b=b.getView2D(),c=b.getView2DState();ol.interaction.Interaction.rotate(a,b,c.rotation,void 0,ol.interaction.DRAGROTATE_ANIMATION_DURATION)};ol.interaction.DragRotate.prototype.handleDragStart=function(a){return a.browserEvent.isMouseActionButton()&&this.condition_(a)?(a=a.map,a.getView().setHint(ol.ViewHint.INTERACTING,1),a.render(),this.lastAngle_=void 0,!0):!1};ol.interaction.DRAGZOOM_ANIMATION_DURATION=200;ol.interaction.DragZoom=function(a){var b=goog.isDef(a)?a:{};a=goog.isDef(b.condition)?b.condition:ol.events.condition.shiftKeyOnly;b=goog.isDef(b.style)?b.style:new ol.style.Style({stroke:new ol.style.Stroke({color:[0,0,255,1]})});ol.interaction.DragBox.call(this,{condition:a,style:b})};goog.inherits(ol.interaction.DragZoom,ol.interaction.DragBox); +ol.interaction.DragZoom.prototype.onBoxEnd=function(){var a=this.getMap(),b=a.getView().getView2D(),c=this.getGeometry().getExtent(),d=ol.extent.getCenter(c);ol.interaction.Interaction.zoom(a,b,b.getResolutionForExtent(c,a.getSize()),d,ol.interaction.DRAGZOOM_ANIMATION_DURATION)};ol.interaction.KEYBOARD_PAN_DURATION=100;ol.interaction.KeyboardPan=function(a){ol.interaction.Interaction.call(this);a=goog.isDef(a)?a:{};this.condition_=goog.isDef(a.condition)?a.condition:goog.functions.and(ol.events.condition.noModifierKeys,ol.events.condition.targetNotEditable);this.pixelDelta_=goog.isDef(a.pixelDelta)?a.pixelDelta:128};goog.inherits(ol.interaction.KeyboardPan,ol.interaction.Interaction); +ol.interaction.KeyboardPan.prototype.handleMapBrowserEvent=function(a){var b=!1;if(a.type==goog.events.KeyHandler.EventType.KEY){var c=a.browserEvent.keyCode;if(this.condition_(a)&&(c==goog.events.KeyCodes.DOWN||c==goog.events.KeyCodes.LEFT||c==goog.events.KeyCodes.RIGHT||c==goog.events.KeyCodes.UP)){var b=a.map,d=b.getView(),e=d.getView2DState(),f=e.resolution*this.pixelDelta_,g=0,h=0;c==goog.events.KeyCodes.DOWN?h=-f:c==goog.events.KeyCodes.LEFT?g=-f:c==goog.events.KeyCodes.RIGHT?g=f:h=f;c=[g,h]; +ol.coordinate.rotate(c,e.rotation);ol.interaction.Interaction.pan(b,d,c,ol.interaction.KEYBOARD_PAN_DURATION);a.preventDefault();b=!0}}return!b};ol.interaction.KeyboardZoom=function(a){ol.interaction.Interaction.call(this);a=goog.isDef(a)?a:{};this.condition_=goog.isDef(a.condition)?a.condition:ol.events.condition.targetNotEditable;this.delta_=goog.isDef(a.delta)?a.delta:1;this.duration_=goog.isDef(a.duration)?a.duration:100};goog.inherits(ol.interaction.KeyboardZoom,ol.interaction.Interaction); +ol.interaction.KeyboardZoom.prototype.handleMapBrowserEvent=function(a){var b=!1;if(a.type==goog.events.KeyHandler.EventType.KEY){var c=a.browserEvent.charCode;if(this.condition_(a)&&(43==c||45==c)){b=a.map;c=43==c?this.delta_:-this.delta_;b.render();var d=b.getView().getView2D();ol.interaction.Interaction.zoomByDelta(b,d,c,void 0,this.duration_);a.preventDefault();b=!0}}return!b};ol.interaction.MOUSEWHEELZOOM_MAXDELTA=1;ol.interaction.MOUSEWHEELZOOM_TIMEOUT_DURATION=80;ol.interaction.MouseWheelZoom=function(a){a=goog.isDef(a)?a:{};ol.interaction.Interaction.call(this);this.delta_=0;this.duration_=goog.isDef(a.duration)?a.duration:250;this.lastAnchor_=null;this.timeoutId_=this.startTime_=void 0};goog.inherits(ol.interaction.MouseWheelZoom,ol.interaction.Interaction); +ol.interaction.MouseWheelZoom.prototype.handleMapBrowserEvent=function(a){var b=!1;if(a.type==goog.events.MouseWheelHandler.EventType.MOUSEWHEEL){var b=a.map,c=a.browserEvent;this.lastAnchor_=a.coordinate;this.delta_+=c.deltaY/3;goog.isDef(this.startTime_)||(this.startTime_=goog.now());c=Math.max(ol.interaction.MOUSEWHEELZOOM_TIMEOUT_DURATION-(goog.now()-this.startTime_),0);goog.global.clearTimeout(this.timeoutId_);this.timeoutId_=goog.global.setTimeout(goog.bind(this.doZoom_,this,b),c);a.preventDefault(); +b=!0}return!b};ol.interaction.MouseWheelZoom.prototype.doZoom_=function(a){var b=ol.interaction.MOUSEWHEELZOOM_MAXDELTA,b=goog.math.clamp(this.delta_,-b,b),c=a.getView().getView2D();a.render();ol.interaction.Interaction.zoomByDelta(a,c,-b,this.lastAnchor_,this.duration_);this.delta_=0;this.lastAnchor_=null;this.timeoutId_=this.startTime_=void 0};ol.interaction.Touch=function(){ol.interaction.Interaction.call(this);this.handled_=!1;this.trackedTouches_={};this.targetTouches=[]};goog.inherits(ol.interaction.Touch,ol.interaction.Interaction);ol.interaction.Touch.centroid=function(a){for(var b=a.length,c=0,d=0,e=0;ethis.threshold_&&(this.rotating_=!0));this.lastAngle_=c;a=a.map;c=goog.style.getClientPosition(a.getViewport());d=ol.interaction.Touch.centroid(this.targetTouches);d[0]-=c.x;d[1]-=c.y;this.anchor_=a.getCoordinateFromPixel(d); +this.rotating_&&(c=a.getView().getView2D(),d=c.getView2DState(),a.render(),ol.interaction.Interaction.rotateWithoutConstraints(a,c,d.rotation+b,this.anchor_))};ol.interaction.TouchRotate.prototype.handleTouchEnd=function(a){if(2>this.targetTouches.length){a=a.map;var b=a.getView().getView2D(),c=b.getView2DState();this.rotating_&&ol.interaction.Interaction.rotate(a,b,c.rotation,this.anchor_,ol.interaction.TOUCHROTATE_ANIMATION_DURATION);return!1}return!0}; +ol.interaction.TouchRotate.prototype.handleTouchStart=function(a){return 2<=this.targetTouches.length?(a=a.map,this.anchor_=null,this.lastAngle_=void 0,this.rotating_=!1,this.rotationDelta_=0,a.render(),!0):!1};ol.interaction.TouchZoom=function(a){a=goog.isDef(a)?a:{};ol.interaction.Touch.call(this);this.anchor_=null;this.duration_=goog.isDef(a.duration)?a.duration:400;this.lastDistance_=void 0;this.lastScaleDelta_=1};goog.inherits(ol.interaction.TouchZoom,ol.interaction.Touch); +ol.interaction.TouchZoom.prototype.handleTouchMove=function(a){var b=1,c=this.targetTouches[0],d=this.targetTouches[1],e=c.clientX-d.clientX,c=c.clientY-d.clientY,e=Math.sqrt(e*e+c*c);goog.isDef(this.lastDistance_)&&(b=this.lastDistance_/e);this.lastDistance_=e;1!=b&&(this.lastScaleDelta_=b);a=a.map;var e=a.getView().getView2D(),c=e.getView2DState(),d=goog.style.getClientPosition(a.getViewport()),f=ol.interaction.Touch.centroid(this.targetTouches);f[0]-=d.x;f[1]-=d.y;this.anchor_=a.getCoordinateFromPixel(f); +a.render();ol.interaction.Interaction.zoomWithoutConstraints(a,e,c.resolution*b,this.anchor_)};ol.interaction.TouchZoom.prototype.handleTouchEnd=function(a){if(2>this.targetTouches.length){a=a.map;var b=a.getView().getView2D(),c=b.getView2DState();ol.interaction.Interaction.zoom(a,b,c.resolution,this.anchor_,this.duration_,this.lastScaleDelta_-1);return!1}return!0}; +ol.interaction.TouchZoom.prototype.handleTouchStart=function(a){return 2<=this.targetTouches.length?(a=a.map,this.anchor_=null,this.lastDistance_=void 0,this.lastScaleDelta_=1,a.render(),!0):!1};ol.interaction.defaults=function(a){a=goog.isDef(a)?a:{};var b=new ol.Collection,c=new ol.Kinetic(-0.005,0.05,100);(goog.isDef(a.altShiftDragRotate)?a.altShiftDragRotate:1)&&b.push(new ol.interaction.DragRotate);(goog.isDef(a.doubleClickZoom)?a.doubleClickZoom:1)&&b.push(new ol.interaction.DoubleClickZoom({delta:a.zoomDelta,duration:a.zoomDuration}));(goog.isDef(a.touchPan)?a.touchPan:1)&&b.push(new ol.interaction.TouchPan({kinetic:c}));(goog.isDef(a.touchRotate)?a.touchRotate:1)&&b.push(new ol.interaction.TouchRotate); +(goog.isDef(a.touchZoom)?a.touchZoom:1)&&b.push(new ol.interaction.TouchZoom({duration:a.zoomDuration}));(goog.isDef(a.dragPan)?a.dragPan:1)&&b.push(new ol.interaction.DragPan({kinetic:c}));if(goog.isDef(a.keyboard)?a.keyboard:1)b.push(new ol.interaction.KeyboardPan),b.push(new ol.interaction.KeyboardZoom({delta:a.zoomDelta,duration:a.zoomDuration}));(goog.isDef(a.mouseWheelZoom)?a.mouseWheelZoom:1)&&b.push(new ol.interaction.MouseWheelZoom({duration:a.zoomDuration}));(goog.isDef(a.shiftDragZoom)? +a.shiftDragZoom:1)&&b.push(new ol.interaction.DragZoom);return b};ol.layer.GroupProperty={LAYERS:"layers"};ol.layer.Group=function(a){var b=goog.isDef(a)?a:{};a=goog.object.clone(b);delete a.layers;b=b.layers;ol.layer.Base.call(this,a);this.listenerKeys_=null;goog.events.listen(this,ol.Object.getChangeEventType(ol.layer.GroupProperty.LAYERS),this.handleLayersChanged_,!1,this);goog.isDef(b)?goog.isArray(b)&&(b=new ol.Collection(goog.array.clone(b))):b=new ol.Collection;this.setLayers(b)};goog.inherits(ol.layer.Group,ol.layer.Base); +ol.layer.Group.prototype.handleLayerChange_=function(){this.getVisible()&&this.dispatchChangeEvent()}; +ol.layer.Group.prototype.handleLayersChanged_=function(a){goog.isNull(this.listenerKeys_)||(goog.array.forEach(goog.object.getValues(this.listenerKeys_),goog.events.unlistenByKey),this.listenerKeys_=null);a=this.getLayers();if(goog.isDefAndNotNull(a)){this.listenerKeys_={add:goog.events.listen(a,ol.CollectionEventType.ADD,this.handleLayersAdd_,!1,this),remove:goog.events.listen(a,ol.CollectionEventType.REMOVE,this.handleLayersRemove_,!1,this)};a=a.getArray();var b,c,d;b=0;for(c=a.length;b=this.minZoom;){if(b.call(c,a,this.getTileRangeForExtentAndZ(e,a,d)))return!0;--a}return!1};ol.tilegrid.TileGrid.prototype.getMaxZoom=function(){return this.maxZoom};ol.tilegrid.TileGrid.prototype.getMinZoom=function(){return this.minZoom}; +ol.tilegrid.TileGrid.prototype.getOrigin=function(a){return goog.isNull(this.origin_)?this.origins_[a]:this.origin_};ol.tilegrid.TileGrid.prototype.getResolution=function(a){return this.resolutions_[a]};ol.tilegrid.TileGrid.prototype.getResolutions=function(){return this.resolutions_};ol.tilegrid.TileGrid.prototype.getTileCoordChildTileRange=function(a,b,c){return a.z=p;--t)for(q=c.getTileRangeForExtentAndZ(f,t),u=c.getResolution(t),s=q.minX;s<=q.maxX;++s)for(v=q.minY;v<=q.maxY;++v)g-t<=h?(r=b.getTile(t,s,v,d,e),r.getState()==ol.TileState.IDLE&&(n[r.tileCoord.toString()]=!0,a.isKeyQueued(r.getKey())||a.enqueue([r, +m,c.getTileCoordCenter(r.tileCoord),u])),goog.isDef(k)&&k.call(l,r)):b.useTile(t,s,v)};ol.style.IconAnchorOrigin={BOTTOM_LEFT:"bottom-left",BOTTOM_RIGHT:"bottom-right",TOP_LEFT:"top-left",TOP_RIGHT:"top-right"};ol.style.IconAnchorUnits={FRACTION:"fraction",PIXELS:"pixels"}; +ol.style.Icon=function(a){a=goog.isDef(a)?a:{};this.anchor_=goog.isDef(a.anchor)?a.anchor:[0.5,0.5];this.anchorOrigin_=goog.isDef(a.anchorOrigin)?a.anchorOrigin:ol.style.IconAnchorOrigin.TOP_LEFT;this.anchorXUnits_=goog.isDef(a.anchorXUnits)?a.anchorXUnits:ol.style.IconAnchorUnits.FRACTION;this.anchorYUnits_=goog.isDef(a.anchorYUnits)?a.anchorYUnits:ol.style.IconAnchorUnits.FRACTION;var b=goog.isDef(a.crossOrigin)?a.crossOrigin:null;this.iconImage_=ol.style.IconImage_.get(a.src,b);this.size_=goog.isDef(a.size)? +a.size:null;var b=goog.isDef(a.opacity)?a.opacity:1,c=goog.isDef(a.rotateWithView)?a.rotateWithView:!1,d=goog.isDef(a.rotation)?a.rotation:0;a=goog.isDef(a.scale)?a.scale:1;ol.style.Image.call(this,{opacity:b,rotation:d,scale:a,snapToPixel:void 0,rotateWithView:c})};goog.inherits(ol.style.Icon,ol.style.Image); +ol.style.Icon.prototype.getAnchor=function(){var a=this.anchor_,b=this.getSize();if(this.anchorXUnits_==ol.style.IconAnchorUnits.FRACTION||this.anchorYUnits_==ol.style.IconAnchorUnits.FRACTION){if(goog.isNull(b))return null;a=this.anchor_.slice();this.anchorXUnits_==ol.style.IconAnchorUnits.FRACTION&&(a[0]*=b[0]);this.anchorYUnits_==ol.style.IconAnchorUnits.FRACTION&&(a[1]*=b[1])}if(this.anchorOrigin_!=ol.style.IconAnchorOrigin.TOP_LEFT){if(goog.isNull(b))return null;a===this.anchor_&&(a=this.anchor_.slice()); +if(this.anchorOrigin_==ol.style.IconAnchorOrigin.TOP_RIGHT||this.anchorOrigin_==ol.style.IconAnchorOrigin.BOTTOM_RIGHT)a[0]=-a[0]+b[0];if(this.anchorOrigin_==ol.style.IconAnchorOrigin.BOTTOM_LEFT||this.anchorOrigin_==ol.style.IconAnchorOrigin.BOTTOM_RIGHT)a[1]+=b[1]}return a};ol.style.Icon.prototype.getImage=function(a){return this.iconImage_.getImage(a)};ol.style.Icon.prototype.getImageState=function(){return this.iconImage_.getImageState()};ol.style.Icon.prototype.getHitDetectionImage=function(a){return this.iconImage_.getHitDetectionImage(a)}; +ol.style.Icon.prototype.getSrc=function(){return this.iconImage_.getSrc()};ol.style.Icon.prototype.getSize=function(){return goog.isNull(this.size_)?this.iconImage_.getSize():this.size_};ol.style.Icon.prototype.listenImageChange=function(a,b){return goog.events.listen(this.iconImage_,goog.events.EventType.CHANGE,a,!1,b)};ol.style.Icon.prototype.load=function(){this.iconImage_.load()}; +ol.style.Icon.prototype.unlistenImageChange=function(a,b){goog.events.unlisten(this.iconImage_,goog.events.EventType.CHANGE,a,!1,b)};ol.style.IconImage_=function(a,b){goog.events.EventTarget.call(this);this.hitDetectionImage_=null;this.image_=new Image;goog.isNull(b)||(this.image_.crossOrigin=b);this.imageListenerKeys_=null;this.imageState_=ol.style.ImageState.IDLE;this.size_=null;this.src_=a;this.tainting_=!1};goog.inherits(ol.style.IconImage_,goog.events.EventTarget); +ol.style.IconImage_.get=function(a,b){var c=ol.style.IconImageCache.getInstance(),d=c.get(a,b);goog.isNull(d)&&(d=new ol.style.IconImage_(a,b),c.set(a,b,d));return d};ol.style.IconImage_.prototype.determineTainting_=function(){var a=goog.dom.createElement(goog.dom.TagName.CANVAS);a.width=1;a.height=1;a=a.getContext("2d");a.drawImage(this.image_,0,0);try{a.getImageData(0,0,1,1)}catch(b){this.tainting_=!0}};ol.style.IconImage_.prototype.dispatchChangeEvent_=function(){this.dispatchEvent(goog.events.EventType.CHANGE)}; +ol.style.IconImage_.prototype.handleImageError_=function(){this.imageState_=ol.style.ImageState.ERROR;this.unlistenImage_();this.dispatchChangeEvent_()};ol.style.IconImage_.prototype.handleImageLoad_=function(){this.imageState_=ol.style.ImageState.LOADED;this.size_=[this.image_.width,this.image_.height];this.unlistenImage_();this.determineTainting_();this.dispatchChangeEvent_()};ol.style.IconImage_.prototype.getImage=function(a){return this.image_};ol.style.IconImage_.prototype.getImageState=function(){return this.imageState_}; +ol.style.IconImage_.prototype.getHitDetectionImage=function(a){if(goog.isNull(this.hitDetectionImage_))if(this.tainting_){a=goog.dom.createElement(goog.dom.TagName.CANVAS);var b=this.size_[0],c=this.size_[1];a.width=b;a.height=c;a.getContext("2d").fillRect(0,0,b,c);this.hitDetectionImage_=a}else this.hitDetectionImage_=this.image_;return this.hitDetectionImage_};ol.style.IconImage_.prototype.getSize=function(){return this.size_};ol.style.IconImage_.prototype.getSrc=function(){return this.src_}; +ol.style.IconImage_.prototype.load=function(){if(this.imageState_==ol.style.ImageState.IDLE){this.imageState_=ol.style.ImageState.LOADING;this.imageListenerKeys_=[goog.events.listenOnce(this.image_,goog.events.EventType.ERROR,this.handleImageError_,!1,this),goog.events.listenOnce(this.image_,goog.events.EventType.LOAD,this.handleImageLoad_,!1,this)];try{this.image_.src=this.src_}catch(a){this.handleImageError_()}}}; +ol.style.IconImage_.prototype.unlistenImage_=function(){goog.array.forEach(this.imageListenerKeys_,goog.events.unlistenByKey);this.imageListenerKeys_=null};ol.style.IconImageCache=function(){this.cache_={};this.cacheSize_=0;this.maxCacheSize_=32};goog.addSingletonGetter(ol.style.IconImageCache);ol.style.IconImageCache.getKey=function(a,b){return b+":"+a};ol.style.IconImageCache.prototype.clear=function(){this.cache_={};this.cacheSize_=0}; +ol.style.IconImageCache.prototype.expire=function(){if(this.cacheSize_>this.maxCacheSize_){var a=0,b,c;for(b in this.cache_)c=this.cache_[b],0!==(a++&3)||goog.events.hasListener(c)||(delete this.cache_[b],--this.cacheSize_)}};ol.style.IconImageCache.prototype.get=function(a,b){var c=ol.style.IconImageCache.getKey(a,b);return c in this.cache_?this.cache_[c]:null};ol.style.IconImageCache.prototype.set=function(a,b,c){a=ol.style.IconImageCache.getKey(a,b);this.cache_[a]=c;++this.cacheSize_};ol.vec={};ol.vec.Mat4={};ol.vec.Mat4.makeTransform2D=function(a,b,c,d,e,f,g,h){goog.vec.Mat4.makeIdentity(a);0===b&&0===c||goog.vec.Mat4.translate(a,b,c,0);1==d&&1==e||goog.vec.Mat4.scale(a,d,e,1);0!==f&&goog.vec.Mat4.rotateZ(a,f);0===g&&0===h||goog.vec.Mat4.translate(a,g,h,0);return a}; +ol.vec.Mat4.equals2D=function(a,b){return goog.vec.Mat4.getElement(a,0,0)==goog.vec.Mat4.getElement(b,0,0)&&goog.vec.Mat4.getElement(a,1,0)==goog.vec.Mat4.getElement(b,1,0)&&goog.vec.Mat4.getElement(a,0,1)==goog.vec.Mat4.getElement(b,0,1)&&goog.vec.Mat4.getElement(a,1,1)==goog.vec.Mat4.getElement(b,1,1)&&goog.vec.Mat4.getElement(a,0,3)==goog.vec.Mat4.getElement(b,0,3)&&goog.vec.Mat4.getElement(a,1,3)==goog.vec.Mat4.getElement(b,1,3)}; +ol.vec.Mat4.multVec2=function(a,b,c){var d=goog.vec.Mat4.getElement(a,0,0),e=goog.vec.Mat4.getElement(a,1,0),f=goog.vec.Mat4.getElement(a,0,1),g=goog.vec.Mat4.getElement(a,1,1),h=goog.vec.Mat4.getElement(a,0,3);a=goog.vec.Mat4.getElement(a,1,3);var k=b[0];b=b[1];c[0]=d*k+f*b+h;c[1]=e*k+g*b+a;return c};ol.renderer.Map=function(a,b){goog.Disposable.call(this);this.map_=b;this.layerRenderers_={}};goog.inherits(ol.renderer.Map,goog.Disposable);ol.renderer.Map.prototype.calculateMatrices2D=function(a){var b=a.view2DState,c=a.coordinateToPixelMatrix;ol.vec.Mat4.makeTransform2D(c,a.size[0]/2,a.size[1]/2,1/b.resolution,-1/b.resolution,-b.rotation,-b.center[0],-b.center[1]);goog.vec.Mat4.invert(c,a.pixelToCoordinateMatrix)}; +ol.renderer.Map.prototype.createLayerRenderer=function(a){return new ol.renderer.Layer(this,a)};ol.renderer.Map.prototype.disposeInternal=function(){goog.object.forEach(this.layerRenderers_,function(a){goog.dispose(a)});ol.renderer.Map.superClass_.disposeInternal.call(this)}; +ol.renderer.Map.prototype.forEachFeatureAtPixel=function(a,b,c,d,e,f){var g=this.map_.getLayerGroup().getLayersArray(),h;for(h=g.length-1;0<=h;--h){var k=g[h];if(k.getVisible()&&e.call(f,k)&&(k=this.getLayerRenderer(k).forEachFeatureAtPixel(a,b,c,d)))return k}};ol.renderer.Map.prototype.getLayerRenderer=function(a){var b=goog.getUid(a).toString();if(b in this.layerRenderers_)return this.layerRenderers_[b];a=this.createLayerRenderer(a);return this.layerRenderers_[b]=a}; +ol.renderer.Map.prototype.getLayerRendererByKey=function(a){return this.layerRenderers_[a]};ol.renderer.Map.prototype.getLayerRenderers=function(){return this.layerRenderers_};ol.renderer.Map.prototype.getMap=function(){return this.map_};ol.renderer.Map.prototype.removeLayerRendererByKey_=function(a){var b=this.layerRenderers_[a];delete this.layerRenderers_[a];return b};ol.renderer.Map.prototype.renderFrame=goog.nullFunction; +ol.renderer.Map.prototype.removeUnusedLayerRenderers_=function(a,b){for(var c in this.layerRenderers_)!goog.isNull(b)&&c in b.layerStates||goog.dispose(this.removeLayerRendererByKey_(c))};ol.renderer.Map.prototype.scheduleExpireIconCache=function(a){a.postRenderFunctions.push(function(a,c){ol.style.IconImageCache.getInstance().expire()})}; +ol.renderer.Map.prototype.scheduleRemoveUnusedLayerRenderers=function(a){for(var b in this.layerRenderers_)if(!(b in a.layerStates)){a.postRenderFunctions.push(goog.bind(this.removeUnusedLayerRenderers_,this));break}};ol.layer.Image=function(a){ol.layer.Layer.call(this,a)};goog.inherits(ol.layer.Image,ol.layer.Layer);ol.layer.TileProperty={PRELOAD:"preload",USE_INTERIM_TILES_ON_ERROR:"useInterimTilesOnError"};ol.layer.Tile=function(a){ol.layer.Layer.call(this,a)};goog.inherits(ol.layer.Tile,ol.layer.Layer);ol.layer.Tile.prototype.getPreload=function(){return this.get(ol.layer.TileProperty.PRELOAD)};goog.exportProperty(ol.layer.Tile.prototype,"getPreload",ol.layer.Tile.prototype.getPreload);ol.layer.Tile.prototype.setPreload=function(a){this.set(ol.layer.TileProperty.PRELOAD,a)}; +goog.exportProperty(ol.layer.Tile.prototype,"setPreload",ol.layer.Tile.prototype.setPreload);ol.layer.Tile.prototype.getUseInterimTilesOnError=function(){return this.get(ol.layer.TileProperty.USE_INTERIM_TILES_ON_ERROR)};goog.exportProperty(ol.layer.Tile.prototype,"getUseInterimTilesOnError",ol.layer.Tile.prototype.getUseInterimTilesOnError);ol.layer.Tile.prototype.setUseInterimTilesOnError=function(a){this.set(ol.layer.TileProperty.USE_INTERIM_TILES_ON_ERROR,a)}; +goog.exportProperty(ol.layer.Tile.prototype,"setUseInterimTilesOnError",ol.layer.Tile.prototype.setUseInterimTilesOnError);ol.layer.VectorProperty={RENDER_GEOMETRY_FUNCTIONS:"renderGeometryFunctions"};ol.layer.Vector=function(a){a=goog.isDef(a)?a:{};var b=goog.object.clone(a);delete b.style;ol.layer.Layer.call(this,b);this.style_=null;this.styleFunction_=void 0;goog.isDef(a.style)&&this.setStyle(a.style)};goog.inherits(ol.layer.Vector,ol.layer.Layer);ol.layer.Vector.prototype.getRenderGeometryFunctions=function(){return this.get(ol.layer.VectorProperty.RENDER_GEOMETRY_FUNCTIONS)}; +goog.exportProperty(ol.layer.Vector.prototype,"getRenderGeometryFunctions",ol.layer.Vector.prototype.getRenderGeometryFunctions);ol.layer.Vector.prototype.getStyle=function(){return this.style_};ol.layer.Vector.prototype.getStyleFunction=function(){return this.styleFunction_};ol.layer.Vector.prototype.setRenderGeometryFunctions=function(a){this.set(ol.layer.VectorProperty.RENDER_GEOMETRY_FUNCTIONS,a)};goog.exportProperty(ol.layer.Vector.prototype,"setRenderGeometryFunctions",ol.layer.Vector.prototype.setRenderGeometryFunctions); +ol.layer.Vector.prototype.setStyle=function(a){this.style_=a;this.styleFunction_=ol.feature.createStyleFunction(a);this.dispatchChangeEvent()};ol.render.canvas.Immediate=function(a,b,c,d,e){this.callbacksByZIndex_={};this.context_=a;this.pixelRatio_=b;this.extent_=c;this.transform_=d;this.viewRotation_=e;this.image_=this.strokeState_=this.fillState_=this.contextTextState_=this.contextStrokeState_=this.contextFillState_=null;this.imageOpacity_=this.imageHeight_=this.imageAnchorY_=this.imageAnchorX_=0;this.imageRotateWithView_=!1;this.imageScale_=this.imageRotation_=0;this.imageSnapToPixel_=!1;this.imageWidth_=0;this.text_="";this.textScale_= +this.textRotation_=0;this.textState_=this.textStrokeState_=this.textFillState_=null;this.pixelCoordinates_=[];this.tmpLocalTransform_=goog.vec.Mat4.createNumber()}; +ol.render.canvas.Immediate.prototype.drawImages_=function(a,b,c,d){if(!goog.isNull(this.image_)){a=ol.geom.flat.transform2D(a,2,this.transform_,this.pixelCoordinates_);b=this.context_;c=this.tmpLocalTransform_;d=b.globalAlpha;1!=this.imageOpacity_&&(b.globalAlpha=d*this.imageOpacity_);var e=this.imageRotation_;this.imageRotateWithView_&&(e+=this.viewRotation_);var f,g;f=0;for(g=a.length;fa||0!==this.simplifiedGeometryMaxMinSquaredTolerance&&a=d;--f)ol.extent.extend(h,c[f].extent),k+=ol.extent.getMargin(h);return k};ol.structs.RBush.prototype.assertValid=function(){this.root_.assertValid(this.maxEntries_)}; +ol.structs.RBush.prototype.chooseSplitAxis_=function(a){var b=this.allDistMargin_(a,ol.structs.RBushNode.compareMinX),c=this.allDistMargin_(a,ol.structs.RBushNode.compareMinY);bthis.maxEntries_)this.split_(d,b);else break;for(;0<=b;--b)ol.extent.extend(d[b].extent,a);return c};ol.structs.RBush.prototype.isEmpty=function(){return 0===this.root_.children.length}; +ol.structs.RBush.prototype.remove=function(a){if(goog.DEBUG&&this.readers_)throw Error("cannot remove value while reading");var b=this.getKey_(a),c=this.valueExtent_[b];delete this.valueExtent_[b];return this.remove_(c,a)};ol.structs.RBush.prototype.remove_=function(a,b){var c=this.root_,d=[c];(c=c.remove(a,b,d))&&this.condense_(d);return c}; +ol.structs.RBush.prototype.split_=function(a,b){var c=a[b];this.chooseSplitAxis_(c);var d=this.chooseSplitIndex_(c),d=c.children.splice(d),d=new ol.structs.RBushNode(ol.extent.createEmpty(),c.height,d,null);c.updateExtent();d.updateExtent();b?a[b-1].children.push(d):this.splitRoot_(c,d)};ol.structs.RBush.prototype.splitRoot_=function(a,b){var c=a.height+1,d=ol.extent.extend(a.extent.slice(),b.extent);this.root_=new ol.structs.RBushNode(d,c,[a,b],null)}; +ol.structs.RBush.prototype.update=function(a,b){if(goog.DEBUG&&this.readers_)throw Error("cannot update value while reading");var c=this.getKey_(b),d=this.valueExtent_[c];ol.extent.equals(d,a)||(this.remove_(d,b),this.insert_(a,b,this.root_.height-1),this.valueExtent_[c]=ol.extent.clone(a,d))};ol.source.VectorEventType={ADDFEATURE:"addfeature",REMOVEFEATURE:"removefeature"};ol.source.Vector=function(a){a=goog.isDef(a)?a:{};ol.source.Source.call(this,{attributions:a.attributions,extent:a.extent,logo:a.logo,projection:a.projection,state:a.state});this.rBush_=new ol.structs.RBush;this.nullGeometryFeatures_={};this.featureChangeKeys_={};goog.isDef(a.features)&&this.addFeaturesInternal(a.features)};goog.inherits(ol.source.Vector,ol.source.Source); +ol.source.Vector.prototype.addFeature=function(a){this.addFeatureInternal(a);this.dispatchChangeEvent()}; +ol.source.Vector.prototype.addFeatureInternal=function(a){var b=goog.getUid(a).toString();this.featureChangeKeys_[b]=goog.events.listen(a,goog.events.EventType.CHANGE,this.handleFeatureChange_,!1,this);b=a.getGeometry();goog.isNull(b)?this.nullGeometryFeatures_[goog.getUid(a).toString()]=a:(b=b.getExtent(),this.rBush_.insert(b,a));this.dispatchEvent(new ol.source.VectorEvent(ol.source.VectorEventType.ADDFEATURE,a))};ol.source.Vector.prototype.addFeatures=function(a){this.addFeaturesInternal(a);this.dispatchChangeEvent()}; +ol.source.Vector.prototype.addFeaturesInternal=function(a){var b,c;b=0;for(c=a.length;b=h.maxResolution||ed;++d)e[d]=b[d].toFixed(c);c=e.join(",")}else c=b.join(",");ol.dom.setTransform(a,"matrix3d("+c+")")}else if(ol.dom.canUseCssTransform()){b=[goog.vec.Mat4.getElement(b,0,0),goog.vec.Mat4.getElement(b,1,0),goog.vec.Mat4.getElement(b,0,1),goog.vec.Mat4.getElement(b,1,1),goog.vec.Mat4.getElement(b,0,3),goog.vec.Mat4.getElement(b,1,3)];if(goog.isDef(c)){e=Array(6);for(d=0;6>d;++d)e[d]= +b[d].toFixed(c);c=e.join(",")}else c=b.join(",");ol.dom.setTransform(a,"matrix("+c+")")}else if(ol.dom.BrowserFeature.USE_MS_MATRIX_TRANSFORM){var e=goog.vec.Mat4.getElement(b,0,0),f=goog.vec.Mat4.getElement(b,0,1),g=goog.vec.Mat4.getElement(b,1,0),h=goog.vec.Mat4.getElement(b,1,1),k=goog.vec.Mat4.getElement(b,0,3);b=goog.vec.Mat4.getElement(b,1,3);var l;l='progid:DXImageTransform.Microsoft.Matrix(sizingMethod\x3d"auto expand",M11\x3d'+e.toFixed(c||20);l+=",M12\x3d"+f.toFixed(c||20);l+=",M21\x3d"+ +g.toFixed(c||20);l+=",M22\x3d"+h.toFixed(c||20);l+=")";ol.dom.setIEMatrix_(a,l);b/=h;d.style.left=Math.round(k/e)+"px";d.style.top=Math.round(b)+"px"}else a.style.left=Math.round(goog.vec.Mat4.getElement(b,0,3))+"px",a.style.top=Math.round(goog.vec.Mat4.getElement(b,1,3))+"px"};ol.renderer.dom={};ol.renderer.dom.Layer=function(a,b,c){ol.renderer.Layer.call(this,a,b);this.target=c};goog.inherits(ol.renderer.dom.Layer,ol.renderer.Layer);ol.renderer.dom.Layer.prototype.getTarget=function(){return this.target};ol.renderer.dom.ImageLayer=function(a,b){var c=goog.dom.createElement(goog.dom.TagName.DIV);c.style.position="absolute";ol.renderer.dom.Layer.call(this,a,b,c);this.image_=null;this.transform_=goog.vec.Mat4.createNumberIdentity()};goog.inherits(ol.renderer.dom.ImageLayer,ol.renderer.dom.Layer); +ol.renderer.dom.ImageLayer.prototype.forEachFeatureAtPixel=function(a,b,c,d){var e=this.getLayer();return e.getSource().forEachFeatureAtPixel(b.extent,b.view2DState.resolution,b.view2DState.rotation,a,function(a){return c.call(d,a,e)})}; +ol.renderer.dom.ImageLayer.prototype.prepareFrame=function(a,b){var c=a.view2DState,d=c.center,e=c.resolution,f=c.rotation,g=this.image_,h=this.getLayer().getSource(),k=a.viewHints;k[ol.ViewHint.ANIMATING]||k[ol.ViewHint.INTERACTING]||(c=h.getImage(a.extent,e,a.pixelRatio,c.projection),goog.isNull(c)||(k=c.getState(),k==ol.ImageState.IDLE?(goog.events.listenOnce(c,goog.events.EventType.CHANGE,this.handleImageChange,!1,this),c.load()):k==ol.ImageState.LOADED&&(g=c)));if(!goog.isNull(g)){var k=g.getExtent(), +l=g.getResolution(),c=goog.vec.Mat4.createNumber();ol.vec.Mat4.makeTransform2D(c,a.size[0]/2,a.size[1]/2,l/e,l/e,f,(k[0]-d[0])/l,(d[1]-k[3])/l);g!=this.image_&&(d=g.getImageElement(this),d.style.maxWidth="none",d.style.position="absolute",goog.dom.removeChildren(this.target),goog.dom.appendChild(this.target,d),this.image_=g);this.setTransform_(c);this.updateAttributions(a.attributions,g.getAttributions());this.updateLogos(a,h)}}; +ol.renderer.dom.ImageLayer.prototype.setTransform_=function(a){ol.vec.Mat4.equals2D(a,this.transform_)||(ol.dom.transformElement2D(this.target,a,6),goog.vec.Mat4.setFromArray(this.transform_,a))};ol.renderer.dom.TileLayer=function(a,b){var c=goog.dom.createElement(goog.dom.TagName.DIV);c.style.position="absolute";ol.dom.BrowserFeature.USE_MS_MATRIX_TRANSFORM&&(c.style.width="100%",c.style.height="100%");ol.renderer.dom.Layer.call(this,a,b,c);this.renderedVisible_=!0;this.renderedOpacity_=1;this.renderedRevision_=0;this.tileLayerZs_={}};goog.inherits(ol.renderer.dom.TileLayer,ol.renderer.dom.Layer); +ol.renderer.dom.TileLayer.prototype.prepareFrame=function(a,b){if(b.visible){var c=a.pixelRatio,d=a.view2DState,e=d.projection,f=this.getLayer(),g=f.getSource(),h=g.getTileGridForProjection(e),k=g.getGutter(),l=h.getZForResolution(d.resolution),m=h.getResolution(l),n=d.center,p;m==d.resolution?(n=this.snapCenterToPixel(n,m,a.size),p=ol.extent.getForView2DAndSize(n,m,d.rotation,a.size)):p=a.extent;var m=h.getTileRangeForExtentAndResolution(p,m),r={};r[l]={};var q=this.createGetTileIfLoadedFunction(function(a){return!goog.isNull(a)&& +a.getState()==ol.TileState.LOADED},g,c,e),u=goog.bind(g.findLoadedTiles,g,r,q),s=f.getUseInterimTilesOnError();goog.isDef(s)||(s=!0);var v=ol.extent.createEmpty(),q=new ol.TileRange(0,0,0,0),t,B,w,z;for(w=m.minX;w<=m.maxX;++w)for(z=m.minY;z<=m.maxY;++z)t=g.getTile(l,w,z,c,e),B=t.getState(),B==ol.TileState.LOADED?r[l][t.tileCoord.toString()]=t:B==ol.TileState.EMPTY||B==ol.TileState.ERROR&&!s||(B=h.forEachTileCoordParentTileRange(t.tileCoord,u,null,q,v),B||(t=h.getTileCoordChildTileRange(t.tileCoord, +q,v),goog.isNull(t)||u(l+1,t)));var x;if(this.renderedRevision_!=g.getRevision()){for(x in this.tileLayerZs_)s=this.tileLayerZs_[+x],goog.dom.removeNode(s.target);this.tileLayerZs_={};this.renderedRevision_=g.getRevision()}v=goog.array.map(goog.object.getKeys(r),Number);goog.array.sort(v);var u={},A;w=0;for(z=v.length;wx&&goog.dom.insertChildAt(this.target,s.target,0)}else a.viewHints[ol.ViewHint.ANIMATING]||a.viewHints[ol.ViewHint.INTERACTING]||s.removeTilesOutsideExtent(p,q);else goog.dom.removeNode(s.target),delete this.tileLayerZs_[x];b.opacity!=this.renderedOpacity_&&(ol.dom.setOpacity(this.target,b.opacity),this.renderedOpacity_=b.opacity);b.visible&&!this.renderedVisible_&&(goog.style.setElementShown(this.target,!0),this.renderedVisible_=!0);this.updateUsedTiles(a.usedTiles,g,l,m);this.manageTilePyramid(a, +g,h,c,e,p,l,f.getPreload());this.scheduleExpireCache(a,g);this.updateLogos(a,g)}else this.renderedVisible_&&(goog.style.setElementShown(this.target,!1),this.renderedVisible_=!1)}; +ol.renderer.dom.TileLayerZ_=function(a,b){this.target=goog.dom.createElement(goog.dom.TagName.DIV);this.target.style.position="absolute";this.target.style.width="100%";this.target.style.height="100%";ol.LEGACY_IE_SUPPORT&&ol.IS_LEGACY_IE&&(this.translateTarget_=goog.dom.createElement(goog.dom.TagName.DIV),this.translateTarget_.style.position="absolute",this.translateTarget_.style.width="100%",this.translateTarget_.style.height="100%",goog.dom.appendChild(this.target,this.translateTarget_));this.tileGrid_= +a;this.tileCoordOrigin_=b;this.origin_=ol.extent.getTopLeft(a.getTileCoordExtent(b));this.resolution_=a.getResolution(b.z);this.tiles_={};this.documentFragment_=null;this.transform_=goog.vec.Mat4.createNumberIdentity()}; +ol.renderer.dom.TileLayerZ_.prototype.addTile=function(a,b){var c=a.tileCoord,d=c.toString();if(!(d in this.tiles_)){var e=this.tileGrid_.getTileSize(c.z),f=a.getImage(this),g=f.style;g.maxWidth="none";var h,k;0a&&(-1==d||gb)break;if(ak?(f=65536*Math.floor(-k/65536),c[h]=-f,c[h+1]=k+f):(f=65536*Math.floor(k/65536),c[h]=f,c[h+1]=k-f)});this.split32DirtySet_.clear(); +return this.split32_};ol.structs.Buffer.prototype.getUsage=function(){return this.usage_};ol.structs.Buffer.prototype.markDirty=function(a,b){var c,d;c=0;for(d=this.dirtySets_.length;col.WEBGL_TEXTURE_CACHE_HIGH_WATER_MARK;){d=this.textureCache_.peekLast();if(goog.isNull(d))if(+this.textureCache_.peekLastKey()==b.index)break;else--this.textureCacheFrameMarkerCount_;else c.deleteTexture(d.texture);this.textureCache_.pop()}};ol.renderer.webgl.Map.prototype.getContext=function(){return this.context_}; +ol.renderer.webgl.Map.prototype.getGL=function(){return this.gl_};ol.renderer.webgl.Map.prototype.getTileTextureQueue=function(){return this.tileTextureQueue_};ol.renderer.webgl.Map.prototype.handleWebGLContextLost=function(a){a.preventDefault();this.textureCache_.clear();this.textureCacheFrameMarkerCount_=0;goog.object.forEach(this.getLayerRenderers(),function(a,c,d){a.handleWebGLContextLost()})};ol.renderer.webgl.Map.prototype.handleWebGLContextRestored=function(){this.initializeGL_();this.getMap().render()}; +ol.renderer.webgl.Map.prototype.initializeGL_=function(){var a=this.gl_;a.activeTexture(goog.webgl.TEXTURE0);a.blendFuncSeparate(goog.webgl.SRC_ALPHA,goog.webgl.ONE_MINUS_SRC_ALPHA,goog.webgl.ONE,goog.webgl.ONE_MINUS_SRC_ALPHA);a.disable(goog.webgl.CULL_FACE);a.disable(goog.webgl.DEPTH_TEST);a.disable(goog.webgl.SCISSOR_TEST);a.disable(goog.webgl.STENCIL_TEST)};ol.renderer.webgl.Map.prototype.isTileTextureLoaded=function(a){return this.textureCache_.containsKey(a.getKey())}; +ol.renderer.webgl.Map.prototype.renderFrame=function(a){var b=this.getContext(),c=this.getGL();if(c.isContextLost())return!1;if(goog.isNull(a))return this.renderedVisible_&&(goog.style.setElementShown(this.canvas_,!1),this.renderedVisible_=!1),!1;this.focus_=a.focus;this.textureCache_.set((-a.index).toString(),null);++this.textureCacheFrameMarkerCount_;var d=[],e=a.layersArray,f=a.view2DState.resolution,g,h,k,l;g=0;for(h=e.length;g=l.minResolution)&&d.push(k);g=0;for(h=d.length;gol.WEBGL_TEXTURE_CACHE_HIGH_WATER_MARK&&a.postRenderFunctions.push(goog.bind(this.expireCache_,this));this.tileTextureQueue_.isEmpty()||(a.postRenderFunctions.push(this.loadNextTileTexture_), +a.animate=!0);this.dispatchComposeEvent_(ol.render.EventType.POSTCOMPOSE,a);this.scheduleRemoveUnusedLayerRenderers(a);this.scheduleExpireIconCache(a)};ol.OL3_URL="http://ol3js.org/";ol.OL3_LOGO_URL="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACAAAAAgCAMAAABEpIrGAAAAA3NCSVQICAjb4U/gAAAACXBIWXMAAAHGAAABxgEXwfpGAAAAGXRFWHRTb2Z0d2FyZQB3d3cuaW5rc2NhcGUub3Jnm+48GgAAAhNQTFRF////AP//AICAgP//AFVVQECA////K1VVSbbbYL/fJ05idsTYJFtbbcjbJllmZszWWMTOIFhoHlNiZszTa9DdUcHNHlNlV8XRIVdiasrUHlZjIVZjaMnVH1RlIFRkH1RkH1ZlasvYasvXVsPQH1VkacnVa8vWIVZjIFRjVMPQa8rXIVVkXsXRsNveIFVkIFZlIVVj3eDeh6GmbMvXH1ZkIFRka8rWbMvXIFVkIFVjIFVkbMvWH1VjbMvWIFVlbcvWIFVla8vVIFVkbMvWbMvVH1VkbMvWIFVlbcvWIFVkbcvVbMvWjNPbIFVkU8LPwMzNIFVkbczWIFVkbsvWbMvXIFVkRnB8bcvW2+TkW8XRIFVkIlZlJVloJlpoKlxrLl9tMmJwOWd0Omh1RXF8TneCT3iDUHiDU8LPVMLPVcLPVcPQVsPPVsPQV8PQWMTQWsTQW8TQXMXSXsXRX4SNX8bSYMfTYcfTYsfTY8jUZcfSZsnUaIqTacrVasrVa8jTa8rWbI2VbMvWbcvWdJObdcvUdszUd8vVeJaee87Yfc3WgJyjhqGnitDYjaarldPZnrK2oNbborW5o9bbo9fbpLa6q9ndrL3ArtndscDDutzfu8fJwN7gwt7gxc/QyuHhy+HizeHi0NfX0+Pj19zb1+Tj2uXk29/e3uLg3+Lh3+bl4uXj4ufl4+fl5Ofl5ufl5ujm5+jmySDnBAAAAFp0Uk5TAAECAgMEBAYHCA0NDg4UGRogIiMmKSssLzU7PkJJT1JTVFliY2hrdHZ3foSFhYeJjY2QkpugqbG1tre5w8zQ09XY3uXn6+zx8vT09vf4+Pj5+fr6/P39/f3+gz7SsAAAAVVJREFUOMtjYKA7EBDnwCPLrObS1BRiLoJLnte6CQy8FLHLCzs2QUG4FjZ5GbcmBDDjxJBXDWxCBrb8aM4zbkIDzpLYnAcE9VXlJSWlZRU13koIeW57mGx5XjoMZEUqwxWYQaQbSzLSkYGfKFSe0QMsX5WbjgY0YS4MBplemI4BdGBW+DQ11eZiymfqQuXZIjqwyadPNoSZ4L+0FVM6e+oGI6g8a9iKNT3o8kVzNkzRg5lgl7p4wyRUL9Yt2jAxVh6mQCogae6GmflI8p0r13VFWTHBQ0rWPW7ahgWVcPm+9cuLoyy4kCJDzCm6d8PSFoh0zvQNC5OjDJhQopPPJqph1doJBUD5tnkbZiUEqaCnB3bTqLTFG1bPn71kw4b+GFdpLElKIzRxxgYgWNYc5SCENVHKeUaltHdXx0dZ8uBI1hJ2UUDgq82CM2MwKeibqAvSO7MCABq0wXEPiqWEAAAAAElFTkSuQmCC"; +ol.RendererHint={CANVAS:"canvas",DOM:"dom",WEBGL:"webgl"};ol.DEFAULT_RENDERER_HINTS=[ol.RendererHint.WEBGL,ol.RendererHint.CANVAS,ol.RendererHint.DOM];ol.MapProperty={LAYERGROUP:"layergroup",SIZE:"size",TARGET:"target",VIEW:"view"}; +ol.Map=function(a){ol.Object.call(this);var b=ol.Map.createOptionsInternal(a);this.pixelRatio_=goog.isDef(a.pixelRatio)?a.pixelRatio:ol.BrowserFeature.DEVICE_PIXEL_RATIO;this.ol3Logo_=b.ol3Logo;this.animationDelay_=new goog.async.AnimationDelay(this.renderFrame_,void 0,this);this.registerDisposable(this.animationDelay_);this.coordinateToPixelMatrix_=goog.vec.Mat4.createNumber();this.pixelToCoordinateMatrix_=goog.vec.Mat4.createNumber();this.frameIndex_=0;this.layerGroupPropertyListenerKeys_=this.viewPropertyListenerKey_= +this.frameState_=null;this.viewport_=goog.dom.createDom(goog.dom.TagName.DIV,"ol-viewport");this.viewport_.style.position="relative";this.viewport_.style.overflow="hidden";this.viewport_.style.width="100%";this.viewport_.style.height="100%";this.viewport_.style.msTouchAction="none";ol.BrowserFeature.HAS_TOUCH&&(this.viewport_.className="ol-touch");this.overlayContainer_=goog.dom.createDom(goog.dom.TagName.DIV,"ol-overlaycontainer");goog.dom.appendChild(this.viewport_,this.overlayContainer_);this.overlayContainerStopEvent_= +goog.dom.createDom(goog.dom.TagName.DIV,"ol-overlaycontainer-stopevent");goog.events.listen(this.overlayContainerStopEvent_,[goog.events.EventType.CLICK,goog.events.EventType.DBLCLICK,goog.events.EventType.MOUSEDOWN,goog.events.EventType.TOUCHSTART,goog.events.EventType.MSPOINTERDOWN],goog.events.Event.stopPropagation);goog.dom.appendChild(this.viewport_,this.overlayContainerStopEvent_);a=new ol.MapBrowserEventHandler(this);goog.events.listen(a,goog.object.getValues(ol.MapBrowserEvent.EventType), +this.handleMapBrowserEvent,!1,this);this.registerDisposable(a);this.keyboardEventTarget_=b.keyboardEventTarget;this.keyHandler_=new goog.events.KeyHandler;goog.events.listen(this.keyHandler_,goog.events.KeyHandler.EventType.KEY,this.handleBrowserEvent,!1,this);this.registerDisposable(this.keyHandler_);a=new goog.events.MouseWheelHandler(this.viewport_);goog.events.listen(a,goog.events.MouseWheelHandler.EventType.MOUSEWHEEL,this.handleBrowserEvent,!1,this);this.registerDisposable(a);this.controls_= +b.controls;this.deviceOptions_=b.deviceOptions;this.interactions_=b.interactions;this.overlays_=b.overlays;this.renderer_=new b.rendererConstructor(this.viewport_,this);this.registerDisposable(this.renderer_);this.viewportSizeMonitor_=new goog.dom.ViewportSizeMonitor;goog.events.listen(this.viewportSizeMonitor_,goog.events.EventType.RESIZE,this.updateSize,!1,this);this.focus_=null;this.preRenderFunctions_=[];this.postRenderFunctions_=[];this.tileQueue_=new ol.TileQueue(goog.bind(this.getTilePriority, +this),goog.bind(this.handleTileChange_,this));goog.events.listen(this,ol.Object.getChangeEventType(ol.MapProperty.LAYERGROUP),this.handleLayerGroupChanged_,!1,this);goog.events.listen(this,ol.Object.getChangeEventType(ol.MapProperty.VIEW),this.handleViewChanged_,!1,this);goog.events.listen(this,ol.Object.getChangeEventType(ol.MapProperty.SIZE),this.handleSizeChanged_,!1,this);goog.events.listen(this,ol.Object.getChangeEventType(ol.MapProperty.TARGET),this.handleTargetChanged_,!1,this);this.setValues(b.values); +this.controls_.forEach(function(a){a.setMap(this)},this);goog.events.listen(this.controls_,ol.CollectionEventType.ADD,function(a){a.element.setMap(this)},!1,this);goog.events.listen(this.controls_,ol.CollectionEventType.REMOVE,function(a){a.element.setMap(null)},!1,this);this.interactions_.forEach(function(a){a.setMap(this)},this);goog.events.listen(this.interactions_,ol.CollectionEventType.ADD,function(a){a.element.setMap(this)},!1,this);goog.events.listen(this.interactions_,ol.CollectionEventType.REMOVE, +function(a){a.element.setMap(null)},!1,this);this.overlays_.forEach(function(a){a.setMap(this)},this);goog.events.listen(this.overlays_,ol.CollectionEventType.ADD,function(a){a.element.setMap(this)},!1,this);goog.events.listen(this.overlays_,ol.CollectionEventType.REMOVE,function(a){a.element.setMap(null)},!1,this)};goog.inherits(ol.Map,ol.Object);ol.Map.prototype.addControl=function(a){this.getControls().push(a)};ol.Map.prototype.addInteraction=function(a){this.getInteractions().push(a)}; +ol.Map.prototype.addLayer=function(a){this.getLayerGroup().getLayers().push(a)};ol.Map.prototype.addOverlay=function(a){this.getOverlays().push(a)};ol.Map.prototype.beforeRender=function(a){this.render();Array.prototype.push.apply(this.preRenderFunctions_,arguments)};ol.Map.prototype.removePreRenderFunction=function(a){return goog.array.remove(this.preRenderFunctions_,a)};ol.Map.prototype.disposeInternal=function(){goog.dom.removeNode(this.viewport_);ol.Map.superClass_.disposeInternal.call(this)}; +ol.Map.prototype.forEachFeatureAtPixel=function(a,b,c,d,e){if(!goog.isNull(this.frameState_))return a=this.getCoordinateFromPixel(a),c=goog.isDef(c)?c:null,d=goog.isDef(d)?d:goog.functions.TRUE,e=goog.isDef(e)?e:null,this.renderer_.forEachFeatureAtPixel(a,this.frameState_,b,c,d,e)};ol.Map.prototype.getEventCoordinate=function(a){return this.getCoordinateFromPixel(this.getEventPixel(a))}; +ol.Map.prototype.getEventPixel=function(a){if(goog.isDef(a.changedTouches)){a=a.changedTouches.item(0);var b=goog.style.getClientPosition(this.viewport_);return[a.clientX-b.x,a.clientY-b.y]}a=goog.style.getRelativePosition(a,this.viewport_);return[a.x,a.y]};ol.Map.prototype.getTarget=function(){return this.get(ol.MapProperty.TARGET)};goog.exportProperty(ol.Map.prototype,"getTarget",ol.Map.prototype.getTarget); +ol.Map.prototype.getCoordinateFromPixel=function(a){var b=this.frameState_;if(goog.isNull(b))return null;a=a.slice();return ol.vec.Mat4.multVec2(b.pixelToCoordinateMatrix,a,a)};ol.Map.prototype.getControls=function(){return this.controls_};ol.Map.prototype.getOverlays=function(){return this.overlays_};ol.Map.prototype.getInteractions=function(){return this.interactions_};ol.Map.prototype.getLayerGroup=function(){return this.get(ol.MapProperty.LAYERGROUP)}; +goog.exportProperty(ol.Map.prototype,"getLayerGroup",ol.Map.prototype.getLayerGroup);ol.Map.prototype.getLayers=function(){var a=this.getLayerGroup();if(goog.isDef(a))return a.getLayers()};ol.Map.prototype.getPixelFromCoordinate=function(a){var b=this.frameState_;if(goog.isNull(b))return null;a=a.slice(0,2);return ol.vec.Mat4.multVec2(b.coordinateToPixelMatrix,a,a)};ol.Map.prototype.getSize=function(){return this.get(ol.MapProperty.SIZE)};goog.exportProperty(ol.Map.prototype,"getSize",ol.Map.prototype.getSize); +ol.Map.prototype.getView=function(){return this.get(ol.MapProperty.VIEW)};goog.exportProperty(ol.Map.prototype,"getView",ol.Map.prototype.getView);ol.Map.prototype.getViewport=function(){return this.viewport_};ol.Map.prototype.getOverlayContainer=function(){return this.overlayContainer_};ol.Map.prototype.getOverlayContainerStopEvent=function(){return this.overlayContainerStopEvent_}; +ol.Map.prototype.getTilePriority=function(a,b,c,d){var e=this.frameState_;if(goog.isNull(e)||!(b in e.wantedTiles)||!e.wantedTiles[b][a.tileCoord.toString()])return ol.structs.PriorityQueue.DROP;a=c[0]-e.focus[0];c=c[1]-e.focus[1];return 65536*Math.log(d)+Math.sqrt(a*a+c*c)/d};ol.Map.prototype.handleBrowserEvent=function(a,b){var c=new ol.MapBrowserEvent(b||a.type,this,a);this.handleMapBrowserEvent(c)}; +ol.Map.prototype.handleMapBrowserEvent=function(a){if(!goog.isNull(this.frameState_)){this.focus_=a.coordinate;a.frameState=this.frameState_;var b=this.getInteractions().getArray(),c;if(!1!==this.dispatchEvent(a))for(c=b.length-1;0<=c&&b[c].handleMapBrowserEvent(a);c--);}}; +ol.Map.prototype.handlePostRender=function(){var a=this.frameState_,b=this.tileQueue_;if(!b.isEmpty()){var c=16,d=c,e=0;if(!goog.isNull(a)){var e=a.viewHints,f=this.deviceOptions_;e[ol.ViewHint.ANIMATING]&&(c=!1===f.loadTilesWhileAnimating?0:8,d=2);e[ol.ViewHint.INTERACTING]&&(c=!1===f.loadTilesWhileInteracting?0:8,d=2);e=goog.object.getCount(a.wantedTiles)}c*=e;d*=e;b.getTilesLoading()=a[0]||0>=a[1])return!1;a=this.getView();return goog.isDef(a)&&a.isDef()?!0:!1};ol.Map.prototype.isRendered=function(){return!goog.isNull(this.frameState_)};ol.Map.prototype.renderSync=function(){this.animationDelay_.fire()}; +ol.Map.prototype.render=function(){this.animationDelay_.isActive()||this.animationDelay_.start()};ol.Map.prototype.removeControl=function(a){var b=this.getControls();if(goog.isDef(b.remove(a)))return a};ol.Map.prototype.removeInteraction=function(a){var b,c=this.getInteractions();goog.isDef(c.remove(a))&&(b=a);return b};ol.Map.prototype.removeLayer=function(a){return this.getLayerGroup().getLayers().remove(a)};ol.Map.prototype.removeOverlay=function(a){var b=this.getOverlays();if(goog.isDef(b.remove(a)))return a}; +ol.Map.prototype.renderFrame_=function(a){var b,c,d,e=this.getSize();b=this.getView();var f=goog.isDef(b)?this.getView().getView2D():void 0,g=null;if(goog.isDef(e)&&0this.minPointsPerRing_,e=[this.sketchRawPolygon_[0][0],this.sketchRawPolygon_[0][this.sketchRawPolygon_[0].length-2]]);if(d)for(var c=a.map,d=0,f=e.length;dthis.highWaterMark_};ol.TileCache.prototype.expireCache=function(a){for(var b,c;this.canExpireCache()&&!(b=this.peekLast(),c=b.tileCoord.z.toString(),c in a&&a[c].contains(b.tileCoord));)this.pop()}; +ol.TileCache.prototype.pruneTileRange=function(a){for(var b=this.getCount(),c;b--;)c=this.peekLastKey(),a.contains(ol.TileCoord.createFromString(c))?this.pop():this.get(c)};ol.TileUrlFunction={};ol.TileUrlFunction.createFromTemplate=function(a){return function(b,c,d){return goog.isNull(b)?void 0:a.replace("{z}",b.z.toString()).replace("{x}",b.x.toString()).replace("{y}",b.y.toString())}};ol.TileUrlFunction.createFromTemplates=function(a){return ol.TileUrlFunction.createFromTileUrlFunctions(goog.array.map(a,ol.TileUrlFunction.createFromTemplate))}; +ol.TileUrlFunction.createFromTileUrlFunctions=function(a){return 1===a.length?a[0]:function(b,c,d){if(!goog.isNull(b)){var e=goog.math.modulo(b.hash(),a.length);return a[e].call(this,b,c,d)}}};ol.TileUrlFunction.nullTileUrlFunction=function(a,b,c){};ol.TileUrlFunction.withTileCoordTransform=function(a,b){var c=new ol.TileCoord(0,0,0);return function(d,e,f){return goog.isNull(d)?void 0:b.call(this,a.call(this,d,f,c),e,f)}}; +ol.TileUrlFunction.expandUrl=function(a){var b=[],c=/\{(\d)-(\d)\}/.exec(a)||/\{([a-z])-([a-z])\}/.exec(a);if(c)for(var d=c[1].charCodeAt(0),e=c[2].charCodeAt(0);d<=e;++d)b.push(a.replace(c[0],String.fromCharCode(d)));else b.push(a);return b};ol.binary={};ol.binary.Buffer=function(a){this.data_=a};ol.binary.Buffer.prototype.getReader=function(){var a=this.data_;if(ol.BrowserFeature.HAS_ARRAY_BUFFER){var b;if(a instanceof ArrayBuffer)b=a;else if(goog.isString(a)){b=new ArrayBuffer(a.length);var c=new Uint8Array(b),d,e;d=0;for(e=a.length;db?(d="\u2032",a*=60):d="\u00b0":e==ol.control.ScaleLineUnits.IMPERIAL? +0.9144>b?(d="in",a/=0.0254):1609.344>b?(d="ft",a/=0.3048):(d="mi",a/=1609.344):e==ol.control.ScaleLineUnits.NAUTICAL?(a/=1852,d="nm"):e==ol.control.ScaleLineUnits.METRIC?1>b?(d="mm",a*=1E3):1E3>b?d="m":(d="km",a/=1E3):e==ol.control.ScaleLineUnits.US&&(0.9144>b?(d="in",a*=39.37):1609.344>b?(d="ft",a/=0.30480061):(d="mi",a/=1609.3472));for(var e=3*Math.floor(Math.log(this.minWidth_*a)/Math.log(10)),f,g;;){f=ol.control.ScaleLine.LEADING_DIGITS[e%3]*Math.pow(10,Math.floor(e/3));g=Math.round(f/a);if(g>= +this.minWidth_)break;++e}f+=d;this.renderedHTML_!=f&&(this.renderedHTML_=this.innerElement_.innerHTML=f);this.renderedWidth_!=g&&(this.innerElement_.style.width=g+"px",this.renderedWidth_=g);this.renderedVisible_||(goog.style.setElementShown(this.element_,!0),this.renderedVisible_=!0)}};goog.events.EventHandler=function(a){goog.Disposable.call(this);this.handler_=a;this.keys_={}};goog.inherits(goog.events.EventHandler,goog.Disposable);goog.events.EventHandler.typeArray_=[];goog.events.EventHandler.prototype.listen=function(a,b,c,d,e){goog.isArray(b)||(goog.events.EventHandler.typeArray_[0]=b,b=goog.events.EventHandler.typeArray_);for(var f=0;fthis.hysteresisDistanceSquared_)if(this.fireDragStart_(a))this.dragging_=!0;else{this.isDisposed()||this.endDrag(a); +return}}c=this.calculatePosition_(b,c);b=c.x;c=c.y;this.dragging_&&this.dispatchEvent(new goog.fx.DragEvent(goog.fx.Dragger.EventType.BEFOREDRAG,this,a.clientX,a.clientY,a,b,c))&&(this.doDrag(a,b,c,!1),a.preventDefault())}}; +goog.fx.Dragger.prototype.calculatePosition_=function(a,b){var c=goog.dom.getDomHelper(this.document_).getDocumentScroll();a+=c.x-this.pageScroll.x;b+=c.y-this.pageScroll.y;this.pageScroll=c;this.deltaX+=a;this.deltaY+=b;var c=this.limitX(this.deltaX),d=this.limitY(this.deltaY);return new goog.math.Coordinate(c,d)};goog.fx.Dragger.prototype.onScroll_=function(a){var b=this.calculatePosition_(0,0);a.clientX=this.clientX;a.clientY=this.clientY;this.doDrag(a,b.x,b.y,!0)}; +goog.fx.Dragger.prototype.doDrag=function(a,b,c,d){this.defaultAction(b,c);this.dispatchEvent(new goog.fx.DragEvent(goog.fx.Dragger.EventType.DRAG,this,a.clientX,a.clientY,a,b,c))};goog.fx.Dragger.prototype.limitX=function(a){var b=this.limits,c=isNaN(b.left)?null:b.left,b=isNaN(b.width)?0:b.width;return Math.min(null!=c?c+b:Infinity,Math.max(null!=c?c:-Infinity,a))}; +goog.fx.Dragger.prototype.limitY=function(a){var b=this.limits,c=isNaN(b.top)?null:b.top,b=isNaN(b.height)?0:b.height;return Math.min(null!=c?c+b:Infinity,Math.max(null!=c?c:-Infinity,a))};goog.fx.Dragger.prototype.defaultAction=function(a,b){this.useRightPositioningForRtl_&&this.isRightToLeft_()?this.target.style.right=a+"px":this.target.style.left=a+"px";this.target.style.top=b+"px"};goog.fx.Dragger.prototype.isDragging=function(){return this.dragging_}; +goog.fx.DragEvent=function(a,b,c,d,e,f,g,h){goog.events.Event.call(this,a);this.clientX=c;this.clientY=d;this.browserEvent=e;this.left=goog.isDef(f)?f:b.deltaX;this.top=goog.isDef(g)?g:b.deltaY;this.dragger=b;this.dragCanceled=!!h};goog.inherits(goog.fx.DragEvent,goog.events.Event);ol.control.ZOOMSLIDER_ANIMATION_DURATION=200; +ol.control.ZoomSlider=function(a){a=goog.isDef(a)?a:{};this.currentResolution_=void 0;this.direction_=ol.control.ZoomSlider.direction.VERTICAL;this.sliderInitialized_=!1;var b=goog.isDef(a.className)?a.className:"ol-zoomslider";a=goog.dom.createDom(goog.dom.TagName.DIV,[b+"-thumb",ol.css.CLASS_UNSELECTABLE]);b=goog.dom.createDom(goog.dom.TagName.DIV,[b,ol.css.CLASS_UNSELECTABLE],a);this.dragger_=new goog.fx.Dragger(a);this.registerDisposable(this.dragger_);goog.events.listen(this.dragger_,[goog.fx.Dragger.EventType.DRAG, +goog.fx.Dragger.EventType.END],this.handleSliderChange_,void 0,this);goog.events.listen(b,goog.events.EventType.CLICK,this.handleContainerClick_,!1,this);goog.events.listen(a,goog.events.EventType.CLICK,goog.events.Event.stopPropagation);ol.control.Control.call(this,{element:b})};goog.inherits(ol.control.ZoomSlider,ol.control.Control);ol.control.ZoomSlider.direction={VERTICAL:0,HORIZONTAL:1}; +ol.control.ZoomSlider.prototype.setMap=function(a){ol.control.ZoomSlider.superClass_.setMap.call(this,a);goog.isNull(a)||a.render()}; +ol.control.ZoomSlider.prototype.initSlider_=function(){var a=this.element,b=goog.dom.getFirstElementChild(a),a=goog.style.getContentBoxSize(a),c=goog.style.getBounds(b),d=goog.style.getMarginBox(b),e=goog.style.getBorderBox(b),b=a.width-d.left-d.right-e.left-e.right-c.width,c=a.height-d.top-d.bottom-e.top-e.bottom-c.height;a.width>a.height?(this.direction_=ol.control.ZoomSlider.direction.HORIZONTAL,a=new goog.math.Rect(0,0,b,0)):(this.direction_=ol.control.ZoomSlider.direction.VERTICAL,a=new goog.math.Rect(0, +0,0,c));this.dragger_.setLimits(a);this.sliderInitialized_=!0};ol.control.ZoomSlider.prototype.handleMapPostrender=function(a){goog.isNull(a.frameState)||(this.sliderInitialized_||this.initSlider_(),a=a.frameState.view2DState.resolution,a!==this.currentResolution_&&(this.currentResolution_=a,this.positionThumbForResolution_(a)))}; +ol.control.ZoomSlider.prototype.handleContainerClick_=function(a){var b=this.getMap(),c=b.getView().getView2D();a=this.amountDragged_(a.offsetX,a.offsetY);a=this.resolutionForAmount_(a);b.beforeRender(ol.animation.zoom({resolution:a,duration:ol.control.ZOOMSLIDER_ANIMATION_DURATION,easing:ol.easing.easeOut}));a=c.constrainResolution(a);c.setResolution(a)}; +ol.control.ZoomSlider.prototype.positionThumbForResolution_=function(a){a=this.amountForResolution_(a);var b=this.dragger_,c=goog.dom.getFirstElementChild(this.element);this.direction_==ol.control.ZoomSlider.direction.HORIZONTAL?goog.style.setPosition(c,b.limits.left+b.limits.width*a):goog.style.setPosition(c,b.limits.left,b.limits.top+b.limits.height*a)}; +ol.control.ZoomSlider.prototype.amountDragged_=function(a,b){var c=this.dragger_.limits,d=0;return d=this.direction_===ol.control.ZoomSlider.direction.HORIZONTAL?(a-c.left)/c.width:(b-c.top)/c.height};ol.control.ZoomSlider.prototype.resolutionForAmount_=function(a){a=-1*(goog.math.clamp(a,0,1)-1);return this.getMap().getView().getView2D().getResolutionForValueFunction()(a)}; +ol.control.ZoomSlider.prototype.amountForResolution_=function(a){return-1*(this.getMap().getView().getView2D().getValueForResolutionFunction()(a)-1)}; +ol.control.ZoomSlider.prototype.handleSliderChange_=function(a){var b=this.getMap(),c=b.getView().getView2D();a.type===goog.fx.Dragger.EventType.DRAG?(a=this.amountDragged_(a.left,a.top),a=this.resolutionForAmount_(a),a!==this.currentResolution_&&(this.currentResolution_=a,c.setResolution(a))):(b.beforeRender(ol.animation.zoom({resolution:this.currentResolution_,duration:ol.control.ZOOMSLIDER_ANIMATION_DURATION,easing:ol.easing.easeOut})),a=c.constrainResolution(this.currentResolution_),c.setResolution(a))};ol.control.ZoomToExtent=function(a){a=goog.isDef(a)?a:{};this.extent_=goog.isDef(a.extent)?a.extent:null;var b=goog.isDef(a.className)?a.className:"ol-zoom-extent",c=goog.isDef(a.tipLabel)?a.tipLabel:"Fit to extent",c=goog.dom.createDom(goog.dom.TagName.SPAN,{role:"tooltip"},c),b=goog.dom.createDom(goog.dom.TagName.DIV,{"class":b+" "+ol.css.CLASS_UNSELECTABLE}),d=goog.dom.createDom(goog.dom.TagName.BUTTON,{"class":"ol-has-tooltip"});goog.dom.appendChild(d,c);goog.dom.appendChild(b,d);goog.events.listen(d, +[goog.events.EventType.TOUCHEND,goog.events.EventType.CLICK],this.handleZoomToExtent_,!1,this);goog.events.listen(d,[goog.events.EventType.MOUSEOUT,goog.events.EventType.FOCUSOUT],function(){this.blur()},!1);ol.control.Control.call(this,{element:b,target:a.target})};goog.inherits(ol.control.ZoomToExtent,ol.control.Control); +ol.control.ZoomToExtent.prototype.handleZoomToExtent_=function(a){a.preventDefault();a=this.getMap();var b=a.getView().getView2D(),c=goog.isNull(this.extent_)?b.getProjection().getExtent():this.extent_;b.fitExtent(c,a.getSize())};ol.dom.InputProperty={VALUE:"value",CHECKED:"checked"};ol.dom.Input=function(a){ol.Object.call(this);this.target_=a;goog.events.listen(this.target_,[goog.events.EventType.CHANGE,goog.events.EventType.INPUT],this.handleInputChanged_,!1,this);goog.events.listen(this,ol.Object.getChangeEventType(ol.dom.InputProperty.VALUE),this.handleValueChanged_,!1,this);goog.events.listen(this,ol.Object.getChangeEventType(ol.dom.InputProperty.CHECKED),this.handleCheckedChanged_,!1,this)}; +goog.inherits(ol.dom.Input,ol.Object);ol.dom.Input.prototype.getChecked=function(){return this.get(ol.dom.InputProperty.CHECKED)};goog.exportProperty(ol.dom.Input.prototype,"getChecked",ol.dom.Input.prototype.getChecked);ol.dom.Input.prototype.getValue=function(){return this.get(ol.dom.InputProperty.VALUE)};goog.exportProperty(ol.dom.Input.prototype,"getValue",ol.dom.Input.prototype.getValue);ol.dom.Input.prototype.setValue=function(a){this.set(ol.dom.InputProperty.VALUE,a)}; +goog.exportProperty(ol.dom.Input.prototype,"setValue",ol.dom.Input.prototype.setValue);ol.dom.Input.prototype.setChecked=function(a){this.set(ol.dom.InputProperty.CHECKED,a)};goog.exportProperty(ol.dom.Input.prototype,"setChecked",ol.dom.Input.prototype.setChecked);ol.dom.Input.prototype.handleInputChanged_=function(a){a=this.target_;"checkbox"===a.type||"radio"===a.type?this.setChecked(a.checked):this.setValue(a.value)}; +ol.dom.Input.prototype.handleCheckedChanged_=function(a){this.target_.checked=this.getChecked()};ol.dom.Input.prototype.handleValueChanged_=function(a){this.target_.value=this.getValue()};ol.ellipsoid={};ol.ellipsoid.BESSEL1841=new ol.Ellipsoid(6377397.155,1/299.15281285);ol.ellipsoid.WGS84=new ol.Ellipsoid(6378137,1/298.257223563);ol.format={};ol.format.Feature=function(){};ol.format.FormatType={BINARY:"binary",JSON:"json",TEXT:"text",XML:"xml"};ol.format.BinaryFeature=function(){ol.format.Feature.call(this)};goog.inherits(ol.format.BinaryFeature,ol.format.Feature);ol.format.BinaryFeature.getBuffer_=function(a){return ol.BrowserFeature.HAS_ARRAY_BUFFER&&a instanceof ArrayBuffer?new ol.binary.Buffer(a):goog.isString(a)?new ol.binary.Buffer(a):null};ol.format.BinaryFeature.prototype.getType=function(){return ol.format.FormatType.BINARY};ol.format.BinaryFeature.prototype.readFeature=function(a){return this.readFeatureFromBuffer(ol.format.BinaryFeature.getBuffer_(a))}; +ol.format.BinaryFeature.prototype.readFeatures=function(a){return this.readFeaturesFromBuffer(ol.format.BinaryFeature.getBuffer_(a))};ol.format.BinaryFeature.prototype.readGeometry=function(a){return this.readGeometryFromBuffer(ol.format.BinaryFeature.getBuffer_(a))};ol.format.BinaryFeature.prototype.readProjection=function(a){return this.readProjectionFromBuffer(ol.format.BinaryFeature.getBuffer_(a))};goog.dom.xml={};goog.dom.xml.MAX_XML_SIZE_KB=2048;goog.dom.xml.MAX_ELEMENT_DEPTH=256; +goog.dom.xml.createDocument=function(a,b){if(b&&!a)throw Error("Can't create document with namespace and no root tag");if(document.implementation&&document.implementation.createDocument)return document.implementation.createDocument(b||"",a||"",null);if("undefined"!=typeof ActiveXObject){var c=goog.dom.xml.createMsXmlDocument_();if(c)return a&&c.appendChild(c.createNode(goog.dom.NodeType.ELEMENT,a,b||"")),c}throw Error("Your browser does not support creating new documents");}; +goog.dom.xml.loadXml=function(a){if("undefined"!=typeof DOMParser)return(new DOMParser).parseFromString(a,"application/xml");if("undefined"!=typeof ActiveXObject){var b=goog.dom.xml.createMsXmlDocument_();b.loadXML(a);return b}throw Error("Your browser does not support loading xml documents");}; +goog.dom.xml.serialize=function(a){if("undefined"!=typeof XMLSerializer)return(new XMLSerializer).serializeToString(a);if(a=a.xml)return a;throw Error("Your browser does not support serializing XML documents");}; +goog.dom.xml.selectSingleNode=function(a,b){if("undefined"!=typeof a.selectSingleNode){var c=goog.dom.getOwnerDocument(a);"undefined"!=typeof c.setProperty&&c.setProperty("SelectionLanguage","XPath");return a.selectSingleNode(b)}if(document.implementation.hasFeature("XPath","3.0")){var c=goog.dom.getOwnerDocument(a),d=c.createNSResolver(c.documentElement);return c.evaluate(b,a,d,XPathResult.FIRST_ORDERED_NODE_TYPE,null).singleNodeValue}return null}; +goog.dom.xml.selectNodes=function(a,b){if("undefined"!=typeof a.selectNodes){var c=goog.dom.getOwnerDocument(a);"undefined"!=typeof c.setProperty&&c.setProperty("SelectionLanguage","XPath");return a.selectNodes(b)}if(document.implementation.hasFeature("XPath","3.0")){for(var c=goog.dom.getOwnerDocument(a),d=c.createNSResolver(c.documentElement),c=c.evaluate(b,a,d,XPathResult.ORDERED_NODE_SNAPSHOT_TYPE,null),d=[],e=c.snapshotLength,f=0;fb?e+="000":256>b?e+="00":4096>b&&(e+="0");return goog.json.Serializer.charToJsonCharCache_[a]=e+b.toString(16)}),'"')};goog.json.Serializer.prototype.serializeNumber_=function(a,b){b.push(isFinite(a)&&!isNaN(a)?a:"null")}; +goog.json.Serializer.prototype.serializeArray=function(a,b){var c=a.length;b.push("[");for(var d="",e=0;ed?~(d<<1):d<<1}return ol.format.Polyline.encodeUnsignedIntegers(a)}; +ol.format.Polyline.decodeSignedIntegers=function(a){a=ol.format.Polyline.decodeUnsignedIntegers(a);var b,c;b=0;for(c=a.length;b>1):d>>1}return a};ol.format.Polyline.encodeUnsignedIntegers=function(a){var b="",c,d;c=0;for(d=a.length;cg?(b.push(c),d=c=0):d+=5}return b}; +ol.format.Polyline.encodeUnsignedInteger=function(a){for(var b,c="";32<=a;)b=(32|a&31)+63,c+=String.fromCharCode(b),a>>=5;return c+=String.fromCharCode(a+63)};ol.format.Polyline.prototype.readFeatureFromText=function(a){a=this.readGeometryFromText(a);return new ol.Feature(a)};ol.format.Polyline.prototype.readFeaturesFromText=function(a){return[this.readFeatureFromText(a)]}; +ol.format.Polyline.prototype.readGeometryFromText=function(a){a=ol.format.Polyline.decodeFlatCoordinates(a,2);a=ol.geom.flat.inflateCoordinates(a,0,a.length,2);return new ol.geom.LineString(a)};ol.format.Polyline.prototype.readProjectionFromText=function(a){return ol.proj.get("EPSG:4326")};ol.format.Polyline.prototype.writeFeatureText=function(a){a=a.getGeometry();return goog.isDefAndNotNull(a)?this.writeGeometryText(a):""};ol.format.Polyline.prototype.writeFeaturesText=function(a){return this.writeFeatureText(a[0])}; +ol.format.Polyline.prototype.writeGeometryText=function(a){var b=a.getFlatCoordinates();a=a.getStride();return ol.format.Polyline.encodeFlatCoordinates(b,a)};ol.format.TopoJSON=function(a){a=goog.isDef(a)?a:{};ol.format.JSONFeature.call(this);this.defaultProjection_=ol.proj.get(a.defaultProjection||"EPSG:4326")};goog.inherits(ol.format.TopoJSON,ol.format.JSONFeature);ol.format.TopoJSON.EXTENSIONS_=[".topojson"];ol.format.TopoJSON.concatenateArcs_=function(a,b){var c=[],d,e,f;e=0;for(f=a.length;e=this.branches_&&this.cancel()}; +goog.async.Deferred.prototype.continue_=function(a,b){this.blocked_=!1;this.updateResult_(a,b)};goog.async.Deferred.prototype.updateResult_=function(a,b){this.fired_=!0;this.result_=b;this.hadError_=!a;this.fire_()};goog.async.Deferred.prototype.check_=function(){if(this.hasFired()){if(!this.silentlyCanceled_)throw new goog.async.Deferred.AlreadyCalledError(this);this.silentlyCanceled_=!1}}; +goog.async.Deferred.prototype.callback=function(a){this.check_();this.assertNotDeferred_(a);this.updateResult_(!0,a)};goog.async.Deferred.prototype.errback=function(a){this.check_();this.assertNotDeferred_(a);this.makeStackTraceLong_(a);this.updateResult_(!1,a)};goog.async.Deferred.prototype.makeStackTraceLong_=function(a){goog.async.Deferred.LONG_STACK_TRACES&&(this.constructorStack_&&goog.isObject(a)&&a.stack&&/^[^\n]+(\n [^\n]+)+/.test(a.stack))&&(a.stack=a.stack+"\nDEFERRED OPERATION:\n"+this.constructorStack_)}; +goog.async.Deferred.prototype.assertNotDeferred_=function(a){};goog.async.Deferred.prototype.addCallback=function(a,b){return this.addCallbacks(a,null,b)};goog.async.Deferred.prototype.addErrback=function(a,b){return this.addCallbacks(null,a,b)};goog.async.Deferred.prototype.addBoth=function(a,b){return this.addCallbacks(a,a,b)};goog.async.Deferred.prototype.addCallbacks=function(a,b,c){this.sequence_.push([a,b,c]);this.hasFired()&&this.fire_();return this}; +goog.async.Deferred.prototype.chainDeferred=function(a){this.addCallbacks(a.callback,a.errback,a);return this};goog.async.Deferred.prototype.awaitDeferred=function(a){return this.addCallback(goog.bind(a.branch,a))};goog.async.Deferred.prototype.branch=function(a){var b=new goog.async.Deferred;this.chainDeferred(b);a&&(b.parent_=this,this.branches_++);return b};goog.async.Deferred.prototype.hasFired=function(){return this.fired_}; +goog.async.Deferred.prototype.isError=function(a){return a instanceof Error};goog.async.Deferred.prototype.hasErrback_=function(){return goog.array.some(this.sequence_,function(a){return goog.isFunction(a[1])})}; +goog.async.Deferred.prototype.fire_=function(){this.unhandledExceptionTimeoutId_&&(this.hasFired()&&this.hasErrback_())&&(goog.global.clearTimeout(this.unhandledExceptionTimeoutId_),delete this.unhandledExceptionTimeoutId_);this.parent_&&(this.parent_.branches_--,delete this.parent_);for(var a=this.result_,b=!1,c=!1;this.sequence_.length&&!this.blocked_;){var d=this.sequence_.shift(),e=d[0],f=d[1],d=d[2];if(e=this.hadError_?f:e)try{var g=e.call(d||this.defaultScope_,a);goog.isDef(g)&&(this.hadError_= +this.hadError_&&(g==a||this.isError(g)),this.result_=a=g);a instanceof goog.async.Deferred&&(this.blocked_=c=!0)}catch(h){a=h,this.hadError_=!0,this.makeStackTraceLong_(a),this.hasErrback_()||(b=!0)}}this.result_=a;c?(a.addCallbacks(goog.bind(this.continue_,this,!0),goog.bind(this.continue_,this,!1)),a.blocking_=!0):!goog.async.Deferred.STRICT_ERRORS||(!this.isError(a)||a instanceof goog.async.Deferred.CanceledError)||(b=this.hadError_=!0);b&&(this.unhandledExceptionTimeoutId_=goog.global.setTimeout(goog.functions.fail(a), +0))};goog.async.Deferred.succeed=function(a){var b=new goog.async.Deferred;b.callback(a);return b};goog.async.Deferred.fail=function(a){var b=new goog.async.Deferred;b.errback(a);return b};goog.async.Deferred.canceled=function(){var a=new goog.async.Deferred;a.cancel();return a};goog.async.Deferred.when=function(a,b,c){return a instanceof goog.async.Deferred?a.branch(!0).addCallback(b,c):goog.async.Deferred.succeed(a).addCallback(b,c)}; +goog.async.Deferred.AlreadyCalledError=function(a){goog.debug.Error.call(this);this.deferred=a};goog.inherits(goog.async.Deferred.AlreadyCalledError,goog.debug.Error);goog.async.Deferred.AlreadyCalledError.prototype.message="Deferred has already fired";goog.async.Deferred.AlreadyCalledError.prototype.name="AlreadyCalledError";goog.async.Deferred.CanceledError=function(a){goog.debug.Error.call(this);this.deferred=a};goog.inherits(goog.async.Deferred.CanceledError,goog.debug.Error); +goog.async.Deferred.CanceledError.prototype.message="Deferred was canceled";goog.async.Deferred.CanceledError.prototype.name="CanceledError";goog.fs={};goog.fs.Error=function(a,b){goog.debug.Error.call(this,goog.string.subs("Error %s: %s",b,goog.fs.Error.getDebugMessage(a)));this.code=a};goog.inherits(goog.fs.Error,goog.debug.Error);goog.fs.Error.ErrorCode={NOT_FOUND:1,SECURITY:2,ABORT:3,NOT_READABLE:4,ENCODING:5,NO_MODIFICATION_ALLOWED:6,INVALID_STATE:7,SYNTAX:8,INVALID_MODIFICATION:9,QUOTA_EXCEEDED:10,TYPE_MISMATCH:11,PATH_EXISTS:12}; +goog.fs.Error.getDebugMessage=function(a){switch(a){case goog.fs.Error.ErrorCode.NOT_FOUND:return"File or directory not found";case goog.fs.Error.ErrorCode.SECURITY:return"Insecure or disallowed operation";case goog.fs.Error.ErrorCode.ABORT:return"Operation aborted";case goog.fs.Error.ErrorCode.NOT_READABLE:return"File or directory not readable";case goog.fs.Error.ErrorCode.ENCODING:return"Invalid encoding";case goog.fs.Error.ErrorCode.NO_MODIFICATION_ALLOWED:return"Cannot modify file or directory"; +case goog.fs.Error.ErrorCode.INVALID_STATE:return"Invalid state";case goog.fs.Error.ErrorCode.SYNTAX:return"Invalid line-ending specifier";case goog.fs.Error.ErrorCode.INVALID_MODIFICATION:return"Invalid modification";case goog.fs.Error.ErrorCode.QUOTA_EXCEEDED:return"Quota exceeded";case goog.fs.Error.ErrorCode.TYPE_MISMATCH:return"Invalid filetype";case goog.fs.Error.ErrorCode.PATH_EXISTS:return"File or directory already exists at specified path";default:return"Unrecognized error"}};goog.fs.ProgressEvent=function(a,b){goog.events.Event.call(this,a.type,b);this.event_=a};goog.inherits(goog.fs.ProgressEvent,goog.events.Event);goog.fs.ProgressEvent.prototype.isLengthComputable=function(){return this.event_.lengthComputable};goog.fs.ProgressEvent.prototype.getLoaded=function(){return this.event_.loaded};goog.fs.ProgressEvent.prototype.getTotal=function(){return this.event_.total};goog.fs.FileReader=function(){goog.events.EventTarget.call(this);this.reader_=new FileReader;this.reader_.onloadstart=goog.bind(this.dispatchProgressEvent_,this);this.reader_.onprogress=goog.bind(this.dispatchProgressEvent_,this);this.reader_.onload=goog.bind(this.dispatchProgressEvent_,this);this.reader_.onabort=goog.bind(this.dispatchProgressEvent_,this);this.reader_.onerror=goog.bind(this.dispatchProgressEvent_,this);this.reader_.onloadend=goog.bind(this.dispatchProgressEvent_,this)}; +goog.inherits(goog.fs.FileReader,goog.events.EventTarget);goog.fs.FileReader.ReadyState={INIT:0,LOADING:1,DONE:2};goog.fs.FileReader.EventType={LOAD_START:"loadstart",PROGRESS:"progress",LOAD:"load",ABORT:"abort",ERROR:"error",LOAD_END:"loadend"};goog.fs.FileReader.prototype.abort=function(){try{this.reader_.abort()}catch(a){throw new goog.fs.Error(a.code,"aborting read");}};goog.fs.FileReader.prototype.getReadyState=function(){return this.reader_.readyState}; +goog.fs.FileReader.prototype.getResult=function(){return this.reader_.result};goog.fs.FileReader.prototype.getError=function(){return this.reader_.error&&new goog.fs.Error(this.reader_.error.code,"reading file")};goog.fs.FileReader.prototype.dispatchProgressEvent_=function(a){this.dispatchEvent(new goog.fs.ProgressEvent(a,this))};goog.fs.FileReader.prototype.disposeInternal=function(){goog.fs.FileReader.superClass_.disposeInternal.call(this);delete this.reader_}; +goog.fs.FileReader.prototype.readAsBinaryString=function(a){this.reader_.readAsBinaryString(a)};goog.fs.FileReader.readAsBinaryString=function(a){var b=new goog.fs.FileReader,c=goog.fs.FileReader.createDeferred_(b);b.readAsBinaryString(a);return c};goog.fs.FileReader.prototype.readAsArrayBuffer=function(a){this.reader_.readAsArrayBuffer(a)};goog.fs.FileReader.readAsArrayBuffer=function(a){var b=new goog.fs.FileReader,c=goog.fs.FileReader.createDeferred_(b);b.readAsArrayBuffer(a);return c}; +goog.fs.FileReader.prototype.readAsText=function(a,b){this.reader_.readAsText(a,b)};goog.fs.FileReader.readAsText=function(a,b){var c=new goog.fs.FileReader,d=goog.fs.FileReader.createDeferred_(c);c.readAsText(a,b);return d};goog.fs.FileReader.prototype.readAsDataUrl=function(a){this.reader_.readAsDataURL(a)};goog.fs.FileReader.readAsDataUrl=function(a){var b=new goog.fs.FileReader,c=goog.fs.FileReader.createDeferred_(b);b.readAsDataUrl(a);return c}; +goog.fs.FileReader.createDeferred_=function(a){var b=new goog.async.Deferred;a.addEventListener(goog.fs.FileReader.EventType.LOAD_END,goog.partial(function(a,b,e){e=b.getResult();var f=b.getError();null==e||f?a.errback(f):a.callback(e);b.dispose()},b,a));return b};ol.interaction.DragAndDrop=function(a){a=goog.isDef(a)?a:{};ol.interaction.Interaction.call(this);this.formatConstructors_=goog.isDef(a.formatConstructors)?a.formatConstructors:[];this.reprojectTo_=goog.isDef(a.reprojectTo)?ol.proj.get(a.reprojectTo):null;this.fileDropHandler_=null;this.dropListenKey_=void 0};goog.inherits(ol.interaction.DragAndDrop,ol.interaction.Interaction); +ol.interaction.DragAndDrop.prototype.disposeInternal=function(){goog.isDef(this.dropListenKey_)&&goog.events.unlistenByKey(this.dropListenKey_);ol.interaction.DragAndDrop.superClass_.disposeInternal.call(this)};ol.interaction.DragAndDrop.prototype.handleDrop_=function(a){a=a.getBrowserEvent().dataTransfer.files;var b,c;b=0;for(c=a.length;b=Math.sqrt(Math.min(h,g))&&(f=h>g?d[1]:d[0]);this.createOrUpdateVertexFeature_(f);f={};f[goog.getUid(d)]=!0;k=1;for(h=e.length;kg&&++p.index}m={segment:[c[0],b],feature:d,geometry:e,depth:f,index:g};h.insert(ol.extent.boundingExtent(m.segment),m);this.dragSegments_.push([m,1]);c={segment:[b,c[1]],feature:d,geometry:e,depth:f,index:g+1};h.insert(ol.extent.boundingExtent(c.segment),c);this.dragSegments_.push([c,0])};ol.interaction.Select=function(a){ol.interaction.Interaction.call(this);this.condition_=goog.isDef(a.condition)?a.condition:ol.events.condition.singleClick;this.addCondition_=goog.isDef(a.addCondition)?a.addCondition:ol.events.condition.shiftKeyOnly;var b;if(goog.isDef(a.layerFilter))b=a.layerFilter;else if(goog.isDef(a.layer)){var c=a.layer;b=function(a){return a===c}}else if(goog.isDef(a.layers)){var d=a.layers;b=function(a){return-1!=goog.array.indexOf(d,a)}}else b=goog.functions.TRUE;this.layerFilter_= +b;this.featureOverlay_=new ol.FeatureOverlay({style:a.style})};goog.inherits(ol.interaction.Select,ol.interaction.Interaction);ol.interaction.Select.prototype.getFeatures=function(){return this.featureOverlay_.getFeatures()}; +ol.interaction.Select.prototype.handleMapBrowserEvent=function(a){if(!this.condition_(a))return!0;var b=this.addCondition_(a),c=a.map,d=this.featureOverlay_.getFeatures();b?c.forEachFeatureAtPixel(a.pixel,function(a,b){-1==goog.array.indexOf(d.getArray(),a)&&d.push(a)},void 0,this.layerFilter_):(a=c.forEachFeatureAtPixel(a.pixel,function(a,b){return a},void 0,this.layerFilter_),goog.isDef(a)?1==d.getLength()?d.getAt(0)!==a&&d.setAt(0,a):(1!=d.getLength()&&d.clear(),d.push(a)):0!==d.getLength()&&d.clear()); +return!1};ol.interaction.Select.prototype.setMap=function(a){ol.interaction.Select.superClass_.setMap.call(this,a);this.featureOverlay_.setMap(a)};ol.layer.HeatmapLayerProperty={GRADIENT:"gradient"}; +ol.layer.Heatmap=function(a){var b=goog.isDef(a)?a:{};ol.layer.Vector.call(this,b);this.gradient_=null;goog.events.listen(this,ol.Object.getChangeEventType(ol.layer.HeatmapLayerProperty.GRADIENT),this.handleGradientChanged_,!1,this);this.setGradient(goog.isDef(b.gradient)?b.gradient:ol.layer.Heatmap.DEFAULT_GRADIENT);a=goog.isDef(b.radius)?b.radius:8;var c=goog.isDef(b.blur)?b.blur:15,b=goog.isDef(b.shadow)?b.shadow:250;a=new ol.style.Style({image:ol.layer.Heatmap.createIcon_(a,c,b)});this.setStyle(a); +goog.events.listen(this,ol.render.EventType.RENDER,this.handleRender_,!1,this)};goog.inherits(ol.layer.Heatmap,ol.layer.Vector);ol.layer.Heatmap.DEFAULT_GRADIENT=["#00f","#0ff","#0f0","#ff0","#f00"]; +ol.layer.Heatmap.createGradient_=function(a){var b=goog.dom.createElement(goog.dom.TagName.CANVAS),c=b.getContext("2d");b.width=1;b.height=256;for(var b=c.createLinearGradient(0,0,1,256),d=1/a.length,e=0,f=a.length;eMath.abs(n-m))break;m=n}d[k]=goog.math.toDegrees(h);d[k+1]=goog.math.toDegrees(n)}return d};ol.proj.CH.translate_=function(a,b,c,d,e){var f=c.length;e=goog.isDef(e)?e:2;d=goog.isDef(d)?d:2n||m<=n)return null;a=a.y;return a<-m||-1=this.minZoom;--a)if(d.minX=d.maxX>>=1,d.minY=d.maxY>>=1,b.call(c,a,d))return!0;return!1};ol.source.BingMaps=function(a){ol.source.TileImage.call(this,{crossOrigin:"anonymous",opaque:!0,projection:ol.proj.get("EPSG:3857"),state:ol.source.State.LOADING,tileLoadFunction:a.tileLoadFunction});this.culture_=goog.isDef(a.culture)?a.culture:"en-us";var b=new goog.Uri("//dev.virtualearth.net/REST/v1/Imagery/Metadata/"+a.imagerySet);(new goog.net.Jsonp(b,"jsonp")).send({include:"ImageryProviders",key:a.key},goog.bind(this.handleImageryMetadataResponse,this))};goog.inherits(ol.source.BingMaps,ol.source.TileImage); +ol.source.BingMaps.TOS_ATTRIBUTION=new ol.Attribution({html:'\x3ca class\x3d"ol-attribution-bing-tos" target\x3d"_blank" href\x3d"http://www.microsoft.com/maps/product/terms.html"\x3eTerms of Use\x3c/a\x3e'}); +ol.source.BingMaps.prototype.handleImageryMetadataResponse=function(a){if(200!=a.statusCode||"OK"!=a.statusDescription||"ValidCredentials"!=a.authenticationResultCode||1!=a.resourceSets.length||1!=a.resourceSets[0].resources.length)this.setState(ol.source.State.ERROR);else{var b=a.brandLogoUri,c=a.resourceSets[0].resources[0],d=new ol.tilegrid.XYZ({minZoom:c.zoomMin,maxZoom:c.zoomMax,tileSize:c.imageWidth});this.tileGrid=d;var e=this.culture_;this.tileUrlFunction=ol.TileUrlFunction.withTileCoordTransform(d.createTileCoordTransform(), +ol.TileUrlFunction.createFromTileUrlFunctions(goog.array.map(c.imageUrlSubdomains,function(a){var b=c.imageUrl.replace("{subdomain}",a).replace("{culture}",e);return function(a,c,d){return goog.isNull(a)?void 0:b.replace("{quadkey}",a.quadKey())}})));if(c.imageryProviders){var f=ol.proj.getTransformFromProjections(ol.proj.get("EPSG:4326"),this.getProjection());a=goog.array.map(c.imageryProviders,function(a){var b=a.attribution,c={};goog.array.forEach(a.coverageAreas,function(a){var b=a.zoomMin,e= +a.zoomMax;a=a.bbox;a=ol.extent.transform([a[1],a[0],a[3],a[2]],f);var g,h;for(g=b;g<=e;++g)h=g.toString(),b=d.getTileRangeForExtentAndZ(a,g),h in c?c[h].push(b):c[h]=[b]});return new ol.Attribution({html:b,tileRanges:c})});a.push(ol.source.BingMaps.TOS_ATTRIBUTION);this.setAttributions(a)}this.setLogo(b);this.setState(ol.source.State.READY)}};goog.net.EventType={COMPLETE:"complete",SUCCESS:"success",ERROR:"error",ABORT:"abort",READY:"ready",READY_STATE_CHANGE:"readystatechange",TIMEOUT:"timeout",INCREMENTAL_DATA:"incrementaldata",PROGRESS:"progress"};goog.Timer=function(a,b){goog.events.EventTarget.call(this);this.interval_=a||1;this.timerObject_=b||goog.Timer.defaultTimerObject;this.boundTick_=goog.bind(this.tick_,this);this.last_=goog.now()};goog.inherits(goog.Timer,goog.events.EventTarget);goog.Timer.MAX_TIMEOUT_=2147483647;goog.Timer.prototype.enabled=!1;goog.Timer.defaultTimerObject=goog.global;goog.Timer.intervalScale=0.8;goog.Timer.prototype.timer_=null;goog.Timer.prototype.getInterval=function(){return this.interval_}; +goog.Timer.prototype.setInterval=function(a){this.interval_=a;this.timer_&&this.enabled?(this.stop(),this.start()):this.timer_&&this.stop()}; +goog.Timer.prototype.tick_=function(){if(this.enabled){var a=goog.now()-this.last_;0goog.Timer.MAX_TIMEOUT_?-1:goog.Timer.defaultTimerObject.setTimeout(a,b||0)};goog.Timer.clear=function(a){goog.Timer.defaultTimerObject.clearTimeout(a)};goog.net.ErrorCode={NO_ERROR:0,ACCESS_DENIED:1,FILE_NOT_FOUND:2,FF_SILENT_ERROR:3,CUSTOM_ERROR:4,EXCEPTION:5,HTTP_ERROR:6,ABORT:7,TIMEOUT:8,OFFLINE:9}; +goog.net.ErrorCode.getDebugMessage=function(a){switch(a){case goog.net.ErrorCode.NO_ERROR:return"No Error";case goog.net.ErrorCode.ACCESS_DENIED:return"Access denied to content document";case goog.net.ErrorCode.FILE_NOT_FOUND:return"File not found";case goog.net.ErrorCode.FF_SILENT_ERROR:return"Firefox silently errored";case goog.net.ErrorCode.CUSTOM_ERROR:return"Application custom error";case goog.net.ErrorCode.EXCEPTION:return"An exception occurred";case goog.net.ErrorCode.HTTP_ERROR:return"Http response at 400 or 500 level"; +case goog.net.ErrorCode.ABORT:return"Request was aborted";case goog.net.ErrorCode.TIMEOUT:return"Request timed out";case goog.net.ErrorCode.OFFLINE:return"The resource is not available offline";default:return"Unrecognized error code"}};goog.net.HttpStatus={CONTINUE:100,SWITCHING_PROTOCOLS:101,OK:200,CREATED:201,ACCEPTED:202,NON_AUTHORITATIVE_INFORMATION:203,NO_CONTENT:204,RESET_CONTENT:205,PARTIAL_CONTENT:206,MULTIPLE_CHOICES:300,MOVED_PERMANENTLY:301,FOUND:302,SEE_OTHER:303,NOT_MODIFIED:304,USE_PROXY:305,TEMPORARY_REDIRECT:307,BAD_REQUEST:400,UNAUTHORIZED:401,PAYMENT_REQUIRED:402,FORBIDDEN:403,NOT_FOUND:404,METHOD_NOT_ALLOWED:405,NOT_ACCEPTABLE:406,PROXY_AUTHENTICATION_REQUIRED:407,REQUEST_TIMEOUT:408,CONFLICT:409,GONE:410,LENGTH_REQUIRED:411, +PRECONDITION_FAILED:412,REQUEST_ENTITY_TOO_LARGE:413,REQUEST_URI_TOO_LONG:414,UNSUPPORTED_MEDIA_TYPE:415,REQUEST_RANGE_NOT_SATISFIABLE:416,EXPECTATION_FAILED:417,INTERNAL_SERVER_ERROR:500,NOT_IMPLEMENTED:501,BAD_GATEWAY:502,SERVICE_UNAVAILABLE:503,GATEWAY_TIMEOUT:504,HTTP_VERSION_NOT_SUPPORTED:505,QUIRK_IE_NO_CONTENT:1223}; +goog.net.HttpStatus.isSuccess=function(a){switch(a){case goog.net.HttpStatus.OK:case goog.net.HttpStatus.CREATED:case goog.net.HttpStatus.ACCEPTED:case goog.net.HttpStatus.NO_CONTENT:case goog.net.HttpStatus.PARTIAL_CONTENT:case goog.net.HttpStatus.NOT_MODIFIED:case goog.net.HttpStatus.QUIRK_IE_NO_CONTENT:return!0;default:return!1}};goog.net.XmlHttpFactory=function(){};goog.net.XmlHttpFactory.prototype.cachedOptions_=null;goog.net.XmlHttpFactory.prototype.getOptions=function(){return this.cachedOptions_||(this.cachedOptions_=this.internalGetOptions())};goog.net.WrapperXmlHttpFactory=function(a,b){goog.net.XmlHttpFactory.call(this);this.xhrFactory_=a;this.optionsFactory_=b};goog.inherits(goog.net.WrapperXmlHttpFactory,goog.net.XmlHttpFactory);goog.net.WrapperXmlHttpFactory.prototype.createInstance=function(){return this.xhrFactory_()};goog.net.WrapperXmlHttpFactory.prototype.getOptions=function(){return this.optionsFactory_()};goog.net.XmlHttp=function(){return goog.net.XmlHttp.factory_.createInstance()};goog.net.XmlHttp.ASSUME_NATIVE_XHR=!1;goog.net.XmlHttp.getOptions=function(){return goog.net.XmlHttp.factory_.getOptions()};goog.net.XmlHttp.OptionType={USE_NULL_FUNCTION:0,LOCAL_REQUEST_ERROR:1};goog.net.XmlHttp.ReadyState={UNINITIALIZED:0,LOADING:1,LOADED:2,INTERACTIVE:3,COMPLETE:4};goog.net.XmlHttp.setFactory=function(a,b){goog.net.XmlHttp.setGlobalFactory(new goog.net.WrapperXmlHttpFactory(a,b))}; +goog.net.XmlHttp.setGlobalFactory=function(a){goog.net.XmlHttp.factory_=a};goog.net.DefaultXmlHttpFactory=function(){goog.net.XmlHttpFactory.call(this)};goog.inherits(goog.net.DefaultXmlHttpFactory,goog.net.XmlHttpFactory);goog.net.DefaultXmlHttpFactory.prototype.createInstance=function(){var a=this.getProgId_();return a?new ActiveXObject(a):new XMLHttpRequest}; +goog.net.DefaultXmlHttpFactory.prototype.internalGetOptions=function(){var a={};this.getProgId_()&&(a[goog.net.XmlHttp.OptionType.USE_NULL_FUNCTION]=!0,a[goog.net.XmlHttp.OptionType.LOCAL_REQUEST_ERROR]=!0);return a}; +goog.net.DefaultXmlHttpFactory.prototype.getProgId_=function(){if(goog.net.XmlHttp.ASSUME_NATIVE_XHR)return"";if(!this.ieProgId_&&"undefined"==typeof XMLHttpRequest&&"undefined"!=typeof ActiveXObject){for(var a=["MSXML2.XMLHTTP.6.0","MSXML2.XMLHTTP.3.0","MSXML2.XMLHTTP","Microsoft.XMLHTTP"],b=0;bgoog.net.XmlHttp.ReadyState.LOADED?this.xhr_.status:-1}catch(a){return-1}};goog.net.XhrIo.prototype.getStatusText=function(){try{return this.getReadyState()>goog.net.XmlHttp.ReadyState.LOADED?this.xhr_.statusText:""}catch(a){return""}};goog.net.XhrIo.prototype.getLastUri=function(){return String(this.lastUri_)};goog.net.XhrIo.prototype.getResponseText=function(){try{return this.xhr_?this.xhr_.responseText:""}catch(a){return""}}; +goog.net.XhrIo.prototype.getResponseBody=function(){try{if(this.xhr_&&"responseBody"in this.xhr_)return this.xhr_.responseBody}catch(a){}return null};goog.net.XhrIo.prototype.getResponseXml=function(){try{return this.xhr_?this.xhr_.responseXML:null}catch(a){return null}};goog.net.XhrIo.prototype.getResponseJson=function(a){if(this.xhr_){var b=this.xhr_.responseText;a&&0==b.indexOf(a)&&(b=b.substring(a.length));return goog.json.parse(b)}}; +goog.net.XhrIo.prototype.getResponse=function(){try{if(!this.xhr_)return null;if("response"in this.xhr_)return this.xhr_.response;switch(this.responseType_){case goog.net.XhrIo.ResponseType.DEFAULT:case goog.net.XhrIo.ResponseType.TEXT:return this.xhr_.responseText;case goog.net.XhrIo.ResponseType.ARRAY_BUFFER:if("mozResponseArrayBuffer"in this.xhr_)return this.xhr_.mozResponseArrayBuffer}return null}catch(a){return null}}; +goog.net.XhrIo.prototype.getResponseHeader=function(a){return this.xhr_&&this.isComplete()?this.xhr_.getResponseHeader(a):void 0};goog.net.XhrIo.prototype.getAllResponseHeaders=function(){return this.xhr_&&this.isComplete()?this.xhr_.getAllResponseHeaders():""};goog.net.XhrIo.prototype.getLastErrorCode=function(){return this.lastErrorCode_};goog.net.XhrIo.prototype.getLastError=function(){return goog.isString(this.lastError_)?this.lastError_:String(this.lastError_)}; +goog.net.XhrIo.prototype.formatMsg_=function(a){return a+" ["+this.lastMethod_+" "+this.lastUri_+" "+this.getStatus()+"]"};ol.source.VectorFile=function(a){var b=goog.isDef(a)?a:{};ol.source.Vector.call(this,{attributions:b.attributions,extent:b.extent,logo:b.logo,projection:b.projection});this.format=b.format;goog.isDef(b.doc)&&this.readFeatures_(b.doc);goog.isDef(b.node)&&this.readFeatures_(b.node);goog.isDef(b.object)&&this.readFeatures_(b.object);goog.isDef(b.text)&&this.readFeatures_(b.text);goog.isDef(b.arrayBuffer)&&this.readFeatures_(b.arrayBuffer);if(goog.isDef(b.url)||goog.isDef(b.urls)){this.setState(ol.source.State.LOADING); +a=this.format.getType()==ol.format.FormatType.BINARY&&ol.BrowserFeature.HAS_ARRAY_BUFFER?goog.net.XhrIo.ResponseType.ARRAY_BUFFER:goog.net.XhrIo.ResponseType.TEXT;var c;goog.isDef(b.url)&&(c=new goog.net.XhrIo,c.setResponseType(a),goog.events.listen(c,goog.net.EventType.COMPLETE,goog.bind(this.handleXhrIo_,this)),c.send(b.url));if(goog.isDef(b.urls)){var b=b.urls,d,e;d=0;for(e=b.length;df*a?e*c/(f*d):a*c/(b*d)}; +ol.source.MapGuide.prototype.getUrl=function(a,b,c,d,e){e=ol.source.MapGuide.getScale(c,d,this.metersPerUnit_,this.displayDpi_);c=ol.extent.getCenter(c);d={OPERATION:this.useOverlay_?"GETDYNAMICMAPOVERLAYIMAGE":"GETMAPIMAGE",VERSION:"2.0.0",LOCALE:"en",CLIENTAGENT:"ol.source.MapGuide source",CLIP:"1",SETDISPLAYDPI:this.displayDpi_,SETDISPLAYWIDTH:Math.round(d[0]),SETDISPLAYHEIGHT:Math.round(d[1]),SETVIEWSCALE:e,SETVIEWCENTERX:c[0],SETVIEWCENTERY:c[1]};goog.object.extend(d,b);return goog.uri.utils.appendParamsFromMap(a, +d)};ol.source.XYZ=function(a){var b=a.projection||ol.proj.get("EPSG:3857"),c=goog.isDef(a.maxZoom)?a.maxZoom:18,c=new ol.tilegrid.XYZ({maxZoom:c});ol.source.TileImage.call(this,{attributions:a.attributions,crossOrigin:a.crossOrigin,extent:a.extent,logo:a.logo,projection:b,tileGrid:c,tileLoadFunction:a.tileLoadFunction,tileUrlFunction:ol.TileUrlFunction.nullTileUrlFunction});this.tileCoordTransform_=c.createTileCoordTransform({extent:a.extent});goog.isDef(a.tileUrlFunction)?this.setTileUrlFunction(a.tileUrlFunction): +goog.isDef(a.urls)?this.setUrls(a.urls):goog.isDef(a.url)&&this.setUrl(a.url)};goog.inherits(ol.source.XYZ,ol.source.TileImage);ol.source.XYZ.prototype.setTileUrlFunction=function(a){ol.source.XYZ.superClass_.setTileUrlFunction.call(this,ol.TileUrlFunction.withTileCoordTransform(this.tileCoordTransform_,a))};ol.source.XYZ.prototype.setUrl=function(a){this.setTileUrlFunction(ol.TileUrlFunction.createFromTemplates(ol.TileUrlFunction.expandUrl(a)))};ol.source.XYZ.prototype.setUrls=function(a){this.setTileUrlFunction(ol.TileUrlFunction.createFromTemplates(a))};ol.source.OSM=function(a){a=goog.isDef(a)?a:{};var b;b=goog.isDef(a.attributions)?a.attributions:ol.source.OSM.ATTRIBUTIONS;var c=goog.isDef(a.crossOrigin)?a.crossOrigin:"anonymous",d=goog.isDef(a.url)?a.url:"//{a-c}.tile.openstreetmap.org/{z}/{x}/{y}.png";ol.source.XYZ.call(this,{attributions:b,crossOrigin:c,opaque:!0,maxZoom:a.maxZoom,tileLoadFunction:a.tileLoadFunction,url:d})};goog.inherits(ol.source.OSM,ol.source.XYZ);ol.source.OSM.DATA_ATTRIBUTION=new ol.Attribution({html:'Data \x26copy; \x3ca href\x3d"http://www.openstreetmap.org/"\x3eOpenStreetMap\x3c/a\x3e contributors, \x3ca href\x3d"http://www.openstreetmap.org/copyright"\x3eODbL\x3c/a\x3e'}); +ol.source.OSM.TILE_ATTRIBUTION=new ol.Attribution({html:'Tiles \x26copy; \x3ca href\x3d"http://www.openstreetmap.org/"\x3eOpenStreetMap\x3c/a\x3e contributors, \x3ca href\x3d"http://creativecommons.org/licenses/by-sa/2.0/"\x3eCC BY-SA\x3c/a\x3e'});ol.source.OSM.ATTRIBUTIONS=[ol.source.OSM.TILE_ATTRIBUTION,ol.source.OSM.DATA_ATTRIBUTION];ol.source.MapQuest=function(a){a=goog.isDef(a)?a:{};var b=ol.source.MapQuestConfig[a.layer];ol.source.XYZ.call(this,{attributions:b.attributions,crossOrigin:"anonymous",logo:"//developer.mapquest.com/content/osm/mq_logo.png",maxZoom:b.maxZoom,opaque:!0,tileLoadFunction:a.tileLoadFunction,url:"//otile{1-4}.mqcdn.com/tiles/1.0.0/"+a.layer+"/{z}/{x}/{y}.jpg"})};goog.inherits(ol.source.MapQuest,ol.source.XYZ);ol.source.MapQuest.TILE_ATTRIBUTION=new ol.Attribution({html:'Tiles Courtesy of \x3ca href\x3d"http://www.mapquest.com/" target\x3d"_blank"\x3eMapQuest\x3c/a\x3e'}); +ol.source.MapQuestConfig={osm:{maxZoom:28,attributions:[ol.source.MapQuest.TILE_ATTRIBUTION,ol.source.OSM.DATA_ATTRIBUTION]},sat:{maxZoom:18,attributions:[ol.source.MapQuest.TILE_ATTRIBUTION,new ol.Attribution({html:"Portions Courtesy NASA/JPL-Caltech and U.S. Depart. of Agriculture, Farm Service Agency"})]},hyb:{maxZoom:18,attributions:[ol.source.MapQuest.TILE_ATTRIBUTION,ol.source.OSM.DATA_ATTRIBUTION]}};ol.source.OSMXML=function(a){a=goog.isDef(a)?a:{};ol.source.VectorFile.call(this,{attributions:a.attributions,doc:a.doc,extent:a.extent,format:new ol.format.OSMXML,logo:a.logo,node:a.node,projection:a.projection,reprojectTo:a.reprojectTo,text:a.text,url:a.url})};goog.inherits(ol.source.OSMXML,ol.source.VectorFile);ol.source.StamenLayerConfig={terrain:{extension:"jpg",opaque:!0},"terrain-background":{extension:"jpg",opaque:!0},"terrain-labels":{extension:"png",opaque:!1},"terrain-lines":{extension:"png",opaque:!1},"toner-background":{extension:"png",opaque:!0},toner:{extension:"png",opaque:!0},"toner-hybrid":{extension:"png",opaque:!1},"toner-labels":{extension:"png",opaque:!1},"toner-lines":{extension:"png",opaque:!1},"toner-lite":{extension:"png",opaque:!0},watercolor:{extension:"jpg",opaque:!0}}; +ol.source.StamenProviderConfig={terrain:{minZoom:4,maxZoom:18},toner:{minZoom:0,maxZoom:20},watercolor:{minZoom:3,maxZoom:16}}; +ol.source.Stamen=function(a){var b=a.layer.indexOf("-"),b=-1==b?a.layer:a.layer.slice(0,b),b=ol.source.StamenProviderConfig[b],c=ol.source.StamenLayerConfig[a.layer],d=goog.isDef(a.url)?a.url:"//{a-d}.tile.stamen.com/"+a.layer+"/{z}/{x}/{y}."+c.extension;ol.source.XYZ.call(this,{attributions:ol.source.Stamen.ATTRIBUTIONS,crossOrigin:"anonymous",maxZoom:b.maxZoom,opaque:c.opaque,tileLoadFunction:a.tileLoadFunction,url:d})};goog.inherits(ol.source.Stamen,ol.source.XYZ); +ol.source.Stamen.ATTRIBUTIONS=[new ol.Attribution({html:'Map tiles by \x3ca href\x3d"http://stamen.com/"\x3eStamen Design\x3c/a\x3e, under \x3ca href\x3d"http://creativecommons.org/licenses/by/3.0/"\x3eCC BY 3.0\x3c/a\x3e.'}),ol.source.OSM.DATA_ATTRIBUTION];ol.DebugTile_=function(a,b){ol.Tile.call(this,a,ol.TileState.LOADED);this.tileCoord_=a;this.tileSize_=b.getTileSize(a.z);this.canvasByContext_={}};goog.inherits(ol.DebugTile_,ol.Tile); +ol.DebugTile_.prototype.getImage=function(a){a=goog.isDef(a)?goog.getUid(a):-1;if(a in this.canvasByContext_)return this.canvasByContext_[a];var b=this.tileSize_,c=goog.dom.createElement(goog.dom.TagName.CANVAS);c.width=b;c.height=b;var d=c.getContext("2d");d.strokeStyle="black";d.strokeRect(0.5,0.5,b+0.5,b+0.5);d.fillStyle="black";d.textAlign="center";d.textBaseline="middle";d.font="24px sans-serif";d.fillText(this.tileCoord_.toString(),b/2,b/2);return this.canvasByContext_[a]=c}; +ol.source.TileDebug=function(a){ol.source.Tile.call(this,{extent:a.extent,opaque:!1,projection:a.projection,tileGrid:a.tileGrid});this.tileCache_=new ol.TileCache};goog.inherits(ol.source.TileDebug,ol.source.Tile);ol.source.TileDebug.prototype.canExpireCache=function(){return this.tileCache_.canExpireCache()};ol.source.TileDebug.prototype.expireCache=function(a){this.tileCache_.expireCache(a)}; +ol.source.TileDebug.prototype.getTile=function(a,b,c){var d=this.getKeyZXY(a,b,c);if(this.tileCache_.containsKey(d))return this.tileCache_.get(d);a=new ol.DebugTile_(new ol.TileCoord(a,b,c),this.tileGrid);this.tileCache_.set(d,a);return a};ol.tilejson={};ol.tilejson.grids_=[];var grid=function(a){ol.tilejson.grids_.push(a)};goog.exportSymbol("grid",grid);ol.source.TileJSON=function(a){ol.source.TileImage.call(this,{crossOrigin:a.crossOrigin,projection:ol.proj.get("EPSG:3857"),state:ol.source.State.LOADING,tileLoadFunction:a.tileLoadFunction});this.deferred_=goog.net.jsloader.load(a.url,{cleanupWhenDone:!0});this.deferred_.addCallback(this.handleTileJSONResponse,this)};goog.inherits(ol.source.TileJSON,ol.source.TileImage); +ol.source.TileJSON.prototype.handleTileJSONResponse=function(){var a=ol.tilejson.grids_.pop(),b=ol.proj.get("EPSG:4326"),c;if(goog.isDef(a.bounds)){var d=ol.proj.getTransformFromProjections(b,this.getProjection());c=ol.extent.transform(a.bounds,d);this.setExtent(c)}goog.isDef(a.scheme);var e=a.minzoom||0,d=a.maxzoom||22,f=new ol.tilegrid.XYZ({maxZoom:d,minZoom:e});this.tileGrid=f;this.tileUrlFunction=ol.TileUrlFunction.withTileCoordTransform(f.createTileCoordTransform({extent:c}),ol.TileUrlFunction.createFromTemplates(a.tiles)); +if(goog.isDef(a.attribution)){b=goog.isDef(c)?c:b.getExtent();c={};for(var g;e<=d;++e)g=e.toString(),c[g]=[f.getTileRangeForExtentAndZ(b,e)];this.setAttributions([new ol.Attribution({html:a.attribution,tileRanges:c})])}this.setState(ol.source.State.READY)};ol.source.TileWMS=function(a){a=goog.isDef(a)?a:{};var b=goog.isDef(a.params)?a.params:{},c=goog.object.get(b,"TRANSPARENT",!0);ol.source.TileImage.call(this,{attributions:a.attributions,crossOrigin:a.crossOrigin,extent:a.extent,logo:a.logo,opaque:!c,projection:a.projection,tileGrid:a.tileGrid,tileLoadFunction:a.tileLoadFunction,tileUrlFunction:goog.bind(this.tileUrlFunction_,this)});c=a.urls;!goog.isDef(c)&&goog.isDef(a.url)&&(c=ol.TileUrlFunction.expandUrl(a.url));this.urls_=c;this.gutter_=goog.isDef(a.gutter)? +a.gutter:0;this.params_=b;this.pixelRatio_=NaN;this.v13_=!0;this.serverType_=a.serverType;this.hidpi_=goog.isDef(a.hidpi)?a.hidpi:!0;this.coordKeyPrefix_="";this.resetCoordKeyPrefix_();this.tmpExtent_=ol.extent.createEmpty();this.updateV13_()};goog.inherits(ol.source.TileWMS,ol.source.TileImage); +ol.source.TileWMS.prototype.getGetFeatureInfoUrl=function(a,b,c,d){var e=this.pixelRatio_;if(!isNaN(this.pixelRatio_)){var f=this.getTileGrid();goog.isNull(f)&&(f=this.getTileGridForProjection(c));b=f.getTileCoordForCoordAndResolution(a,b);if(!(f.getResolutions().length<=b.z)){var g=f.getResolution(b.z),h=f.getTileCoordExtent(b,this.tmpExtent_),f=f.getTileSize(b.z),k=this.gutter_;0!==k&&(f+=2*k,h=ol.extent.buffer(h,g*k,h));1!=e&&(f=f*e+0.5|0);k={SERVICE:"WMS",VERSION:ol.source.wms.DEFAULT_VERSION, +REQUEST:"GetFeatureInfo",FORMAT:"image/png",TRANSPARENT:!0,QUERY_LAYERS:goog.object.get(this.params_,"LAYERS")};goog.object.extend(k,this.params_,d);d=Math.floor((h[3]-a[1])/(g/e));goog.object.set(k,this.v13_?"I":"X",Math.floor((a[0]-h[0])/(g/e)));goog.object.set(k,this.v13_?"J":"Y",d);return this.getRequestUrl_(b,f,h,e,c,k)}}};ol.source.TileWMS.prototype.getGutter=function(){return this.gutter_}; +ol.source.TileWMS.prototype.getKeyZXY=function(a,b,c){return this.coordKeyPrefix_+ol.source.TileWMS.superClass_.getKeyZXY.call(this,a,b,c)};ol.source.TileWMS.prototype.getParams=function(){return this.params_}; +ol.source.TileWMS.prototype.getRequestUrl_=function(a,b,c,d,e,f){var g=this.urls_;if(goog.isDef(g)&&!goog.array.isEmpty(g)){goog.object.set(f,"WIDTH",b);goog.object.set(f,"HEIGHT",b);f[this.v13_?"CRS":"SRS"]=e.getCode();"STYLES"in this.params_||goog.object.set(f,"STYLES",new String(""));if(1!=d)switch(this.serverType_){case ol.source.wms.ServerType.GEOSERVER:goog.object.set(f,"FORMAT_OPTIONS","dpi:"+(90*d+0.5|0));break;case ol.source.wms.ServerType.MAPSERVER:goog.object.set(f,"MAP_RESOLUTION",90* +d);break;case ol.source.wms.ServerType.CARMENTA_SERVER:case ol.source.wms.ServerType.QGIS:goog.object.set(f,"DPI",90*d)}b=e.getAxisOrientation();this.v13_&&"ne"==b.substr(0,2)&&(b=c[0],c[0]=c[1],c[1]=b,b=c[2],c[2]=c[3],c[3]=b);goog.object.set(f,"BBOX",c.join(","));1==g.length?g=g[0]:(a=goog.math.modulo(a.hash(),this.urls_.length),g=g[a]);return goog.uri.utils.appendParamsFromMap(g,f)}}; +ol.source.TileWMS.prototype.getTilePixelSize=function(a,b,c){a=ol.source.TileWMS.superClass_.getTilePixelSize.call(this,a,b,c);return 1!=b&&this.hidpi_&&goog.isDef(this.serverType_)?a*b+0.5|0:a};ol.source.TileWMS.prototype.resetCoordKeyPrefix_=function(){var a=0,b=[],c;for(c in this.params_)b[a++]=c+"-"+this.params_[c];this.coordKeyPrefix_=b.join("/")}; +ol.source.TileWMS.prototype.tileUrlFunction_=function(a,b,c){var d=this.getTileGrid();goog.isNull(d)&&(d=this.getTileGridForProjection(c));if(!(d.getResolutions().length<=a.z)){1==b||this.hidpi_&&goog.isDef(this.serverType_)||(b=1);var e=d.getResolution(a.z),f=d.getTileCoordExtent(a,this.tmpExtent_),d=d.getTileSize(a.z),g=this.gutter_;0!==g&&(d+=2*g,f=ol.extent.buffer(f,e*g,f));e=this.getExtent();if(goog.isNull(e)||ol.extent.intersects(f,e)&&!ol.extent.touches(f,e))return 1!=b&&(d=d*b+0.5|0),e={SERVICE:"WMS", +VERSION:ol.source.wms.DEFAULT_VERSION,REQUEST:"GetMap",FORMAT:"image/png",TRANSPARENT:!0},goog.object.extend(e,this.params_),this.pixelRatio_=b,this.getRequestUrl_(a,d,f,b,c,e)}};ol.source.TileWMS.prototype.updateParams=function(a){goog.object.extend(this.params_,a);this.resetCoordKeyPrefix_();this.updateV13_();this.dispatchChangeEvent()}; +ol.source.TileWMS.prototype.updateV13_=function(){var a=goog.object.get(this.params_,"VERSION",ol.source.wms.DEFAULT_VERSION);this.v13_=0<=goog.string.compareVersions(a,"1.3")};ol.source.TopoJSON=function(a){a=goog.isDef(a)?a:{};ol.source.VectorFile.call(this,{attributions:a.attributions,extent:a.extent,format:new ol.format.TopoJSON({defaultProjection:a.defaultProjection}),logo:a.logo,object:a.object,projection:a.projection,text:a.text,url:a.url})};goog.inherits(ol.source.TopoJSON,ol.source.VectorFile);ol.tilegrid.WMTS=function(a){this.matrixIds_=a.matrixIds;ol.tilegrid.TileGrid.call(this,{origin:a.origin,origins:a.origins,resolutions:a.resolutions,tileSize:a.tileSize,tileSizes:a.tileSizes})};goog.inherits(ol.tilegrid.WMTS,ol.tilegrid.TileGrid);ol.tilegrid.WMTS.prototype.getMatrixId=function(a){return this.matrixIds_[a]};ol.tilegrid.WMTS.prototype.getMatrixIds=function(){return this.matrixIds_}; +ol.tilegrid.WMTS.createFromCapabilitiesMatrixSet=function(a){var b=[],c=[],d=[],e=[],f=ol.proj.get(a.supportedCRS).getMetersPerUnit();goog.array.sort(a.matrixIds,function(a,b){return b.scaleDenominator-a.scaleDenominator});goog.array.forEach(a.matrixIds,function(a,h,k){c.push(a.identifier);d.push(a.topLeftCorner);b.push(2.8E-4*a.scaleDenominator/f);e.push(a.tileWidth)});return new ol.tilegrid.WMTS({origins:d,resolutions:b,matrixIds:c,tileSizes:e})};ol.source.WMTSRequestEncoding={KVP:"KVP",REST:"REST"}; +ol.source.WMTS=function(a){function b(a){a=e==ol.source.WMTSRequestEncoding.KVP?goog.uri.utils.appendParamsFromMap(a,g):a.replace(/\{(\w+?)\}/g,function(a,b){return b in g?g[b]:a});return function(b,c,d){if(!goog.isNull(b)){var g={TileMatrix:f.getMatrixId(b.z),TileCol:b.x,TileRow:b.y};goog.object.extend(g,this.dimensions_);b=a;return b=e==ol.source.WMTSRequestEncoding.KVP?goog.uri.utils.appendParamsFromMap(b,g):b.replace(/\{(\w+?)\}/g,function(a,b){return g[b]})}}}var c=goog.isDef(a.version)?a.version: +"1.0.0",d=goog.isDef(a.format)?a.format:"image/jpeg";this.dimensions_=a.dimensions||{};this.coordKeyPrefix_="";this.resetCoordKeyPrefix_();var e=goog.isDef(a.requestEncoding)?a.requestEncoding:ol.source.WMTSRequestEncoding.KVP,f=a.tileGrid,g={Layer:a.layer,style:a.style,Style:a.style,TileMatrixSet:a.matrixSet};e==ol.source.WMTSRequestEncoding.KVP&&goog.object.extend(g,{Service:"WMTS",Request:"GetTile",Version:c,Format:d});c=ol.TileUrlFunction.nullTileUrlFunction;d=a.urls;!goog.isDef(d)&&goog.isDef(a.url)&& +(d=ol.TileUrlFunction.expandUrl(a.url));goog.isDef(d)&&(c=ol.TileUrlFunction.createFromTileUrlFunctions(goog.array.map(d,b)));var h=ol.extent.createEmpty(),k=new ol.TileCoord(0,0,0),c=ol.TileUrlFunction.withTileCoordTransform(function(b,c,d){d=this.getTileGrid();if(d.getResolutions().length<=b.z)return null;var e=b.x,f=-b.y-1,g=d.getTileCoordExtent(b),u=c.getExtent(),s=goog.isDef(a.extent)?a.extent:u;!goog.isNull(s)&&(c.isGlobal()&&s[0]===u[0]&&s[2]===u[2])&&(c=Math.ceil((s[2]-s[0])/(g[2]-g[0])), +e=goog.math.modulo(e,c),k.z=b.z,k.x=e,k.y=b.y,g=d.getTileCoordExtent(k,h));return!ol.extent.intersects(g,s)||ol.extent.touches(g,s)?null:new ol.TileCoord(b.z,e,f)},c);ol.source.TileImage.call(this,{attributions:a.attributions,crossOrigin:a.crossOrigin,extent:a.extent,logo:a.logo,projection:a.projection,tileGrid:f,tileLoadFunction:a.tileLoadFunction,tileUrlFunction:c})};goog.inherits(ol.source.WMTS,ol.source.TileImage);ol.source.WMTS.prototype.getDimensions=function(){return this.dimensions_}; +ol.source.WMTS.prototype.getKeyZXY=function(a,b,c){return this.coordKeyPrefix_+ol.source.WMTS.superClass_.getKeyZXY.call(this,a,b,c)};ol.source.WMTS.prototype.resetCoordKeyPrefix_=function(){var a=0,b=[],c;for(c in this.dimensions_)b[a++]=c+"-"+this.dimensions_[c];this.coordKeyPrefix_=b.join("/")};ol.source.WMTS.prototype.updateDimensions=function(a){goog.object.extend(this.dimensions_,a);this.resetCoordKeyPrefix_();this.dispatchChangeEvent()}; +ol.source.WMTS.optionsFromCapabilities=function(a,b){var c=goog.array.find(a.contents.layers,function(a,c,d){return a.identifier==b}),d=c.tileMatrixSetLinks[0].tileMatrixSet,e=c.formats[0],f=goog.array.findIndex(c.styles,function(a,b,c){return a.isDefault});0>f&&(f=0);var f=c.styles[f].identifier,g={};goog.array.forEach(c.dimensions,function(a,b,c){b=a.identifier;c=a["default"];goog.isDef(c)||(c=a.values[0]);g[b]=c});var h=a.contents.tileMatrixSets[d],k=ol.tilegrid.WMTS.createFromCapabilitiesMatrixSet(h), +h=ol.proj.get(h.supportedCRS),l=a.operationsMetadata.GetTile.dcp.http.get,m,n;switch(goog.object.getKeys(l[0].constraints.GetEncoding.allowedValues)[0]){case "REST":case "RESTful":n=ol.source.WMTSRequestEncoding.REST;m=c.resourceUrls.tile[e];break;case "KVP":n=ol.source.WMTSRequestEncoding.KVP,m=[],goog.array.forEach(l,function(a,b,c){a.constraints.GetEncoding.allowedValues.hasOwnProperty(ol.source.WMTSRequestEncoding.KVP)&&m.push(a.url)})}return{urls:m,layer:b,matrixSet:d,format:e,projection:h,requestEncoding:n, +tileGrid:k,style:f,dimensions:g}};ol.tilegrid.Zoomify=function(a){var b=goog.isDef(a)?a:b;ol.tilegrid.TileGrid.call(this,{origin:[0,0],resolutions:b.resolutions})};goog.inherits(ol.tilegrid.Zoomify,ol.tilegrid.TileGrid); +ol.tilegrid.Zoomify.prototype.createTileCoordTransform=function(a){a=goog.isDef(a)?a:{};var b=this.minZoom,c=this.maxZoom,d=new ol.TileCoord(0,0,0),e=null;if(goog.isDef(a.extent)){var e=Array(c+1),f;for(f=0;f<=c;++f)e[f]=fm||l<=m)return null;a=a.y;return a<-l||-1g||e>g;)f.push([Math.ceil(d/g),Math.ceil(e/g)]),g+=g;break;case ol.source.ZoomifyTierSizeCalculation.TRUNCATED:for(c=d;c>g||e>g;)f.push([Math.ceil(c/g),Math.ceil(e/g)]),c>>=1,e>>=1}f.push([1,1]);f.reverse();for(var g=[1],h=[0], +e=1,c=f.length;e= 0;--i) { + var src = scripts[i].src; + var qmark = src.lastIndexOf("?"); + var l = qmark == -1 ? src.length : qmark; + if(src.substr(l - 7, 7) == "base.js") { + goog.basePath = src.substr(0, l - 7); + return + } + } + }; + goog.importScript_ = function(src) { + var importScript = goog.global.CLOSURE_IMPORT_SCRIPT || goog.writeScriptTag_; + if(!goog.dependencies_.written[src] && importScript(src)) { + goog.dependencies_.written[src] = true + } + }; + goog.writeScriptTag_ = function(src) { + if(goog.inHtmlDocument_()) { + var doc = goog.global.document; + if(doc.readyState == "complete") { + var isDeps = /\bdeps.js$/.test(src); + if(isDeps) { + return false + }else { + throw Error('Cannot write "' + src + '" after document load'); + } + } + doc.write('\x3cscript type\x3d"text/javascript" src\x3d"' + src + '"\x3e\x3c/' + "script\x3e"); + return true + }else { + return false + } + }; + goog.writeScripts_ = function() { + var scripts = []; + var seenScript = {}; + var deps = goog.dependencies_; + function visitNode(path) { + if(path in deps.written) { + return + } + if(path in deps.visited) { + if(!(path in seenScript)) { + seenScript[path] = true; + scripts.push(path) + } + return + } + deps.visited[path] = true; + if(path in deps.requires) { + for(var requireName in deps.requires[path]) { + if(!goog.isProvided_(requireName)) { + if(requireName in deps.nameToPath) { + visitNode(deps.nameToPath[requireName]) + }else { + throw Error("Undefined nameToPath for " + requireName); + } + } + } + } + if(!(path in seenScript)) { + seenScript[path] = true; + scripts.push(path) + } + } + for(var path in goog.included_) { + if(!deps.written[path]) { + visitNode(path) + } + } + for(var i = 0;i < scripts.length;i++) { + if(scripts[i]) { + goog.importScript_(goog.basePath + scripts[i]) + }else { + throw Error("Undefined script input"); + } + } + }; + goog.getPathFromDeps_ = function(rule) { + if(rule in goog.dependencies_.nameToPath) { + return goog.dependencies_.nameToPath[rule] + }else { + return null + } + }; + goog.findBasePath_(); + if(!goog.global.CLOSURE_NO_DEPS) { + goog.importScript_(goog.basePath + "deps.js") + } +} +goog.typeOf = function(value) { + var s = typeof value; + if(s == "object") { + if(value) { + if(value instanceof Array) { + return"array" + }else { + if(value instanceof Object) { + return s + } + } + var className = Object.prototype.toString.call((value)); + if(className == "[object Window]") { + return"object" + } + if(className == "[object Array]" || typeof value.length == "number" && typeof value.splice != "undefined" && typeof value.propertyIsEnumerable != "undefined" && !value.propertyIsEnumerable("splice")) { + return"array" + } + if(className == "[object Function]" || typeof value.call != "undefined" && typeof value.propertyIsEnumerable != "undefined" && !value.propertyIsEnumerable("call")) { + return"function" + } + }else { + return"null" + } + }else { + if(s == "function" && typeof value.call == "undefined") { + return"object" + } + } + return s +}; +goog.isDef = function(val) { + return val !== undefined +}; +goog.isNull = function(val) { + return val === null +}; +goog.isDefAndNotNull = function(val) { + return val != null +}; +goog.isArray = function(val) { + return goog.typeOf(val) == "array" +}; +goog.isArrayLike = function(val) { + var type = goog.typeOf(val); + return type == "array" || type == "object" && typeof val.length == "number" +}; +goog.isDateLike = function(val) { + return goog.isObject(val) && typeof val.getFullYear == "function" +}; +goog.isString = function(val) { + return typeof val == "string" +}; +goog.isBoolean = function(val) { + return typeof val == "boolean" +}; +goog.isNumber = function(val) { + return typeof val == "number" +}; +goog.isFunction = function(val) { + return goog.typeOf(val) == "function" +}; +goog.isObject = function(val) { + var type = typeof val; + return type == "object" && val != null || type == "function" +}; +goog.getUid = function(obj) { + return obj[goog.UID_PROPERTY_] || (obj[goog.UID_PROPERTY_] = ++goog.uidCounter_) +}; +goog.removeUid = function(obj) { + if("removeAttribute" in obj) { + obj.removeAttribute(goog.UID_PROPERTY_) + } + try { + delete obj[goog.UID_PROPERTY_] + }catch(ex) { + } +}; +goog.UID_PROPERTY_ = "closure_uid_" + (Math.random() * 1E9 >>> 0); +goog.uidCounter_ = 0; +goog.getHashCode = goog.getUid; +goog.removeHashCode = goog.removeUid; +goog.cloneObject = function(obj) { + var type = goog.typeOf(obj); + if(type == "object" || type == "array") { + if(obj.clone) { + return obj.clone() + } + var clone = type == "array" ? [] : {}; + for(var key in obj) { + clone[key] = goog.cloneObject(obj[key]) + } + return clone + } + return obj +}; +goog.bindNative_ = function(fn, selfObj, var_args) { + return(fn.call.apply(fn.bind, arguments)) +}; +goog.bindJs_ = function(fn, selfObj, var_args) { + if(!fn) { + throw new Error; + } + if(arguments.length > 2) { + var boundArgs = Array.prototype.slice.call(arguments, 2); + return function() { + var newArgs = Array.prototype.slice.call(arguments); + Array.prototype.unshift.apply(newArgs, boundArgs); + return fn.apply(selfObj, newArgs) + } + }else { + return function() { + return fn.apply(selfObj, arguments) + } + } +}; +goog.bind = function(fn, selfObj, var_args) { + if(Function.prototype.bind && Function.prototype.bind.toString().indexOf("native code") != -1) { + goog.bind = goog.bindNative_ + }else { + goog.bind = goog.bindJs_ + } + return goog.bind.apply(null, arguments) +}; +goog.partial = function(fn, var_args) { + var args = Array.prototype.slice.call(arguments, 1); + return function() { + var newArgs = Array.prototype.slice.call(arguments); + newArgs.unshift.apply(newArgs, args); + return fn.apply(this, newArgs) + } +}; +goog.mixin = function(target, source) { + for(var x in source) { + target[x] = source[x] + } +}; +goog.now = goog.TRUSTED_SITE && Date.now || function() { + return+new Date +}; +goog.globalEval = function(script) { + if(goog.global.execScript) { + goog.global.execScript(script, "JavaScript") + }else { + if(goog.global.eval) { + if(goog.evalWorksForGlobals_ == null) { + goog.global.eval("var _et_ \x3d 1;"); + if(typeof goog.global["_et_"] != "undefined") { + delete goog.global["_et_"]; + goog.evalWorksForGlobals_ = true + }else { + goog.evalWorksForGlobals_ = false + } + } + if(goog.evalWorksForGlobals_) { + goog.global.eval(script) + }else { + var doc = goog.global.document; + var scriptElt = doc.createElement("script"); + scriptElt.type = "text/javascript"; + scriptElt.defer = false; + scriptElt.appendChild(doc.createTextNode(script)); + doc.body.appendChild(scriptElt); + doc.body.removeChild(scriptElt) + } + }else { + throw Error("goog.globalEval not available"); + } + } +}; +goog.evalWorksForGlobals_ = null; +goog.cssNameMapping_; +goog.cssNameMappingStyle_; +goog.getCssName = function(className, opt_modifier) { + var getMapping = function(cssName) { + return goog.cssNameMapping_[cssName] || cssName + }; + var renameByParts = function(cssName) { + var parts = cssName.split("-"); + var mapped = []; + for(var i = 0;i < parts.length;i++) { + mapped.push(getMapping(parts[i])) + } + return mapped.join("-") + }; + var rename; + if(goog.cssNameMapping_) { + rename = goog.cssNameMappingStyle_ == "BY_WHOLE" ? getMapping : renameByParts + }else { + rename = function(a) { + return a + } + } + if(opt_modifier) { + return className + "-" + rename(opt_modifier) + }else { + return rename(className) + } +}; +goog.setCssNameMapping = function(mapping, opt_style) { + goog.cssNameMapping_ = mapping; + goog.cssNameMappingStyle_ = opt_style +}; +goog.global.CLOSURE_CSS_NAME_MAPPING; +if(!COMPILED && goog.global.CLOSURE_CSS_NAME_MAPPING) { + goog.cssNameMapping_ = goog.global.CLOSURE_CSS_NAME_MAPPING +} +goog.getMsg = function(str, opt_values) { + var values = opt_values || {}; + for(var key in values) { + var value = ("" + values[key]).replace(/\$/g, "$$$$"); + str = str.replace(new RegExp("\\{\\$" + key + "\\}", "gi"), value) + } + return str +}; +goog.getMsgWithFallback = function(a, b) { + return a +}; +goog.exportSymbol = function(publicPath, object, opt_objectToExportTo) { + goog.exportPath_(publicPath, object, opt_objectToExportTo) +}; +goog.exportProperty = function(object, publicName, symbol) { + object[publicName] = symbol +}; +goog.inherits = function(childCtor, parentCtor) { + function tempCtor() { + } + tempCtor.prototype = parentCtor.prototype; + childCtor.superClass_ = parentCtor.prototype; + childCtor.prototype = new tempCtor; + childCtor.prototype.constructor = childCtor +}; +goog.base = function(me, opt_methodName, var_args) { + var caller = arguments.callee.caller; + if(goog.DEBUG) { + if(!caller) { + throw Error("arguments.caller not defined. goog.base() expects not " + "to be running in strict mode. See " + "http://www.ecma-international.org/ecma-262/5.1/#sec-C"); + } + } + if(caller.superClass_) { + return caller.superClass_.constructor.apply(me, Array.prototype.slice.call(arguments, 1)) + } + var args = Array.prototype.slice.call(arguments, 2); + var foundCaller = false; + for(var ctor = me.constructor;ctor;ctor = ctor.superClass_ && ctor.superClass_.constructor) { + if(ctor.prototype[opt_methodName] === caller) { + foundCaller = true + }else { + if(foundCaller) { + return ctor.prototype[opt_methodName].apply(me, args) + } + } + } + if(me[opt_methodName] === caller) { + return me.constructor.prototype[opt_methodName].apply(me, args) + }else { + throw Error("goog.base called from a method of one name " + "to a method of a different name"); + } +}; +goog.scope = function(fn) { + fn.call(goog.global) +}; +goog.addDependency("../build/src/internal/src/requireall.js", [], ["libtess", "libtess.ActiveRegion", "libtess.CachedVertex", "libtess.Dict", "libtess.DictNode", "libtess.FaceCount", "libtess.GluFace", "libtess.GluHalfEdge", "libtess.GluMesh", "libtess.GluTesselator", "libtess.GluVertex", "libtess.PQHandleElem", "libtess.PQNode", "libtess.PriorityQ", "libtess.PriorityQHeap", "libtess.geom", "libtess.mesh", "libtess.normal", "libtess.render", "libtess.sweep", "libtess.tessmono", "ol", "ol.Attribution", +"ol.BrowserFeature", "ol.CanvasFunctionType", "ol.CenterConstraint", "ol.CenterConstraintType", "ol.Collection", "ol.CollectionEvent", "ol.CollectionEventType", "ol.Constraints", "ol.Coordinate", "ol.CoordinateArray", "ol.CoordinateFormatType", "ol.DeviceOrientation", "ol.DeviceOrientationProperty", "ol.DragBoxEvent", "ol.DrawEvent", "ol.Ellipsoid", "ol.Extent", "ol.Feature", "ol.FeatureOverlay", "ol.FrameState", "ol.Geolocation", "ol.GeolocationProperty", "ol.IView", "ol.IView2D", "ol.IView3D", +"ol.Image", "ol.ImageBase", "ol.ImageCanvas", "ol.ImageState", "ol.ImageTile", "ol.ImageUrlFunction", "ol.ImageUrlFunctionType", "ol.Kinetic", "ol.Map", "ol.MapBrowserEvent", "ol.MapBrowserEvent.EventType", "ol.MapBrowserEventHandler", "ol.MapEvent", "ol.MapEventType", "ol.MapProperty", "ol.Object", "ol.ObjectEvent", "ol.ObjectEventType", "ol.Observable", "ol.Overlay", "ol.OverlayPositioning", "ol.OverlayProperty", "ol.Pixel", "ol.PostRenderFunction", "ol.PreRenderFunction", "ol.RendererHint", "ol.ResolutionConstraint", +"ol.ResolutionConstraintType", "ol.RotationConstraint", "ol.RotationConstraintType", "ol.Size", "ol.Sphere", "ol.Tile", "ol.TileCache", "ol.TileCoord", "ol.TileLoadFunctionType", "ol.TilePriorityFunction", "ol.TileQueue", "ol.TileRange", "ol.TileState", "ol.TileUrlFunction", "ol.TileUrlFunctionType", "ol.TransformFunction", "ol.View", "ol.View2D", "ol.View2DProperty", "ol.View2DState", "ol.ViewHint", "ol.animation", "ol.array", "ol.binary.Buffer", "ol.binary.IReader", "ol.color", "ol.color.Matrix", +"ol.control", "ol.control.Attribution", "ol.control.Control", "ol.control.FullScreen", "ol.control.Logo", "ol.control.MousePosition", "ol.control.ScaleLine", "ol.control.ScaleLineProperty", "ol.control.ScaleLineUnits", "ol.control.Zoom", "ol.control.ZoomSlider", "ol.control.ZoomToExtent", "ol.coordinate", "ol.css", "ol.dom", "ol.dom.BrowserFeature", "ol.dom.Input", "ol.dom.InputProperty", "ol.easing", "ol.ellipsoid.BESSEL1841", "ol.ellipsoid.WGS84", "ol.events.ConditionType", "ol.events.condition", +"ol.extent", "ol.extent.Relationship", "ol.feature", "ol.format.BinaryFeature", "ol.format.Feature", "ol.format.FormatType", "ol.format.GML", "ol.format.GPX", "ol.format.GPX.V1_1", "ol.format.GeoJSON", "ol.format.IGC", "ol.format.IGCZ", "ol.format.JSONFeature", "ol.format.KML", "ol.format.OSMXML", "ol.format.Polyline", "ol.format.TextFeature", "ol.format.TopoJSON", "ol.format.XMLFeature", "ol.format.XSD", "ol.geom.Circle", "ol.geom.Geometry", "ol.geom.GeometryCollection", "ol.geom.GeometryType", +"ol.geom.LineString", "ol.geom.LinearRing", "ol.geom.MultiLineString", "ol.geom.MultiPoint", "ol.geom.MultiPolygon", "ol.geom.Point", "ol.geom.Polygon", "ol.geom.SimpleGeometry", "ol.geom.closest", "ol.geom.flat", "ol.geom.simplify", "ol.interaction", "ol.interaction.DoubleClickZoom", "ol.interaction.Drag", "ol.interaction.DragAndDrop", "ol.interaction.DragAndDropEvent", "ol.interaction.DragBox", "ol.interaction.DragPan", "ol.interaction.DragRotate", "ol.interaction.DragRotateAndZoom", "ol.interaction.DragZoom", +"ol.interaction.Draw", "ol.interaction.Interaction", "ol.interaction.KeyboardPan", "ol.interaction.KeyboardZoom", "ol.interaction.Modify", "ol.interaction.MouseWheelZoom", "ol.interaction.Select", "ol.interaction.Touch", "ol.interaction.TouchPan", "ol.interaction.TouchRotate", "ol.interaction.TouchZoom", "ol.layer.Base", "ol.layer.Group", "ol.layer.Heatmap", "ol.layer.Image", "ol.layer.Layer", "ol.layer.LayerProperty", "ol.layer.LayerState", "ol.layer.Tile", "ol.layer.Vector", "ol.math", "ol.parser.Parser", +"ol.parser.XML", "ol.parser.ogc.ExceptionReport", "ol.parser.ogc.Versioned", "ol.parser.ogc.WMSCapabilities", "ol.parser.ogc.WMSCapabilities_v1", "ol.parser.ogc.WMSCapabilities_v1_0_0", "ol.parser.ogc.WMSCapabilities_v1_1", "ol.parser.ogc.WMSCapabilities_v1_1_0", "ol.parser.ogc.WMSCapabilities_v1_1_1", "ol.parser.ogc.WMSCapabilities_v1_1_1_WMSC", "ol.parser.ogc.WMSCapabilities_v1_3_0", "ol.proj", "ol.proj.CH", "ol.proj.EPSG2056", "ol.proj.EPSG21781", "ol.proj.EPSG3857", "ol.proj.EPSG4326", "ol.proj.METERS_PER_UNIT", +"ol.proj.Projection", "ol.proj.ProjectionLike", "ol.proj.Units", "ol.proj.common", "ol.render.Box", "ol.render.Event", "ol.render.EventType", "ol.render.IReplayGroup", "ol.render.IVectorContext", "ol.render.canvas", "ol.render.canvas.Immediate", "ol.render.canvas.ReplayGroup", "ol.render.webgl.Immediate", "ol.renderer.Layer", "ol.renderer.Map", "ol.renderer.canvas.ImageLayer", "ol.renderer.canvas.Layer", "ol.renderer.canvas.Map", "ol.renderer.canvas.TileLayer", "ol.renderer.canvas.VectorLayer", "ol.renderer.dom.ImageLayer", +"ol.renderer.dom.Layer", "ol.renderer.dom.Map", "ol.renderer.dom.TileLayer", "ol.renderer.vector", "ol.renderer.webgl.ImageLayer", "ol.renderer.webgl.Layer", "ol.renderer.webgl.Map", "ol.renderer.webgl.TileLayer", "ol.renderer.webgl.map.shader.Color", "ol.renderer.webgl.map.shader.Default", "ol.renderer.webgl.tilelayer.shader", "ol.size", "ol.source.BingMaps", "ol.source.GPX", "ol.source.GeoJSON", "ol.source.IGC", "ol.source.Image", "ol.source.ImageCanvas", "ol.source.ImageStatic", "ol.source.ImageVector", +"ol.source.ImageWMS", "ol.source.KML", "ol.source.MapGuide", "ol.source.MapQuest", "ol.source.OSM", "ol.source.OSMXML", "ol.source.Source", "ol.source.Stamen", "ol.source.State", "ol.source.Tile", "ol.source.TileDebug", "ol.source.TileImage", "ol.source.TileJSON", "ol.source.TileOptions", "ol.source.TileWMS", "ol.source.TopoJSON", "ol.source.Vector", "ol.source.VectorEvent", "ol.source.VectorEventType", "ol.source.VectorFile", "ol.source.WMTS", "ol.source.WMTSRequestEncoding", "ol.source.XYZ", "ol.source.Zoomify", +"ol.source.wms", "ol.source.wms.ServerType", "ol.sphere.NORMAL", "ol.sphere.WGS84", "ol.structs.Buffer", "ol.structs.IntegerSet", "ol.structs.LRUCache", "ol.structs.PriorityQueue", "ol.structs.RBush", "ol.style.Circle", "ol.style.Fill", "ol.style.Icon", "ol.style.IconAnchorOrigin", "ol.style.IconAnchorUnits", "ol.style.IconImageCache", "ol.style.Image", "ol.style.ImageState", "ol.style.Stroke", "ol.style.Style", "ol.style.Text", "ol.tilegrid.TileGrid", "ol.tilegrid.WMTS", "ol.tilegrid.XYZ", "ol.tilegrid.Zoomify", +"ol.tilejson", "ol.vec.Mat4", "ol.webgl", "ol.webgl.Context", "ol.webgl.WebGLContextEventType", "ol.webgl.shader", "ol.xml"]); +goog.addDependency("../src/googx/dom/fullscreen.js", ["googx.dom.fullscreen", "googx.dom.fullscreen.EventType"], ["goog.dom", "goog.userAgent"]); +goog.addDependency("../src/libtess.js/dict/Dict.js", ["libtess.Dict"], ["libtess", "libtess.DictNode"]); +goog.addDependency("../src/libtess.js/dict/DictNode.js", ["libtess.DictNode"], ["libtess"]); +goog.addDependency("../src/libtess.js/geom.js", ["libtess.geom"], ["libtess"]); +goog.addDependency("../src/libtess.js/libtess.js", ["libtess"], []); +goog.addDependency("../src/libtess.js/libtess/CachedVertex.js", ["libtess.CachedVertex"], ["libtess"]); +goog.addDependency("../src/libtess.js/libtess/GluTesselator.js", ["libtess.GluTesselator"], ["libtess", "libtess.CachedVertex", "libtess.GluMesh", "libtess.mesh", "libtess.normal", "libtess.render", "libtess.sweep", "libtess.tessmono"]); +goog.addDependency("../src/libtess.js/mesh.js", ["libtess.mesh"], ["libtess", "libtess.GluFace", "libtess.GluHalfEdge", "libtess.GluVertex"]); +goog.addDependency("../src/libtess.js/mesh/GluFace.js", ["libtess.GluFace"], ["libtess"]); +goog.addDependency("../src/libtess.js/mesh/GluHalfEdge.js", ["libtess.GluHalfEdge"], ["libtess"]); +goog.addDependency("../src/libtess.js/mesh/GluMesh.js", ["libtess.GluMesh"], ["libtess", "libtess.GluFace", "libtess.GluHalfEdge", "libtess.GluVertex"]); +goog.addDependency("../src/libtess.js/mesh/GluVertex.js", ["libtess.GluVertex"], ["libtess"]); +goog.addDependency("../src/libtess.js/normal.js", ["libtess.normal"], ["libtess"]); +goog.addDependency("../src/libtess.js/priorityq/PQHandleElem.js", ["libtess.PQHandleElem"], ["libtess"]); +goog.addDependency("../src/libtess.js/priorityq/PQNode.js", ["libtess.PQNode"], ["libtess"]); +goog.addDependency("../src/libtess.js/priorityq/PriorityQ.js", ["libtess.PriorityQ"], ["libtess", "libtess.PriorityQHeap"]); +goog.addDependency("../src/libtess.js/priorityq/PriorityQHeap.js", ["libtess.PriorityQHeap"], ["libtess", "libtess.PQHandleElem", "libtess.PQNode"]); +goog.addDependency("../src/libtess.js/render.js", ["libtess.render"], ["libtess", "libtess.FaceCount"]); +goog.addDependency("../src/libtess.js/render/FaceCount.js", ["libtess.FaceCount"], ["libtess"]); +goog.addDependency("../src/libtess.js/sweep.js", ["libtess.sweep"], ["libtess", "libtess.ActiveRegion", "libtess.Dict", "libtess.GluVertex", "libtess.PriorityQ", "libtess.geom", "libtess.mesh"]); +goog.addDependency("../src/libtess.js/sweep/ActiveRegion.js", ["libtess.ActiveRegion"], ["libtess.DictNode"]); +goog.addDependency("../src/libtess.js/tessmono.js", ["libtess.tessmono"], ["libtess", "libtess.geom", "libtess.mesh"]); +goog.addDependency("../src/ol/animation.js", ["ol.animation"], ["ol.PreRenderFunction", "ol.ViewHint", "ol.easing"]); +goog.addDependency("../src/ol/array.js", ["ol.array"], ["goog.array", "goog.asserts"]); +goog.addDependency("../src/ol/attribution.js", ["ol.Attribution"], ["ol.TileRange"]); +goog.addDependency("../src/ol/binary.js", ["ol.binary.Buffer", "ol.binary.IReader"], ["goog.asserts", "goog.userAgent", "ol.BrowserFeature"]); +goog.addDependency("../src/ol/browserfeature.js", ["ol.BrowserFeature"], ["goog.dom", "goog.dom.TagName", "goog.userAgent", "ol.webgl"]); +goog.addDependency("../src/ol/canvasfunction.js", ["ol.CanvasFunctionType"], []); +goog.addDependency("../src/ol/centerconstraint.js", ["ol.CenterConstraint", "ol.CenterConstraintType"], ["goog.math"]); +goog.addDependency("../src/ol/collection.js", ["ol.Collection", "ol.CollectionEvent", "ol.CollectionEventType"], ["goog.array", "goog.events.Event", "ol.Object"]); +goog.addDependency("../src/ol/color/color.js", ["ol.color"], ["goog.array", "goog.asserts", "goog.color", "goog.color.names", "goog.math", "goog.vec.Mat4"]); +goog.addDependency("../src/ol/color/colormatrix.js", ["ol.color.Matrix"], ["goog.vec.Mat4"]); +goog.addDependency("../src/ol/constraints.js", ["ol.Constraints"], ["ol.CenterConstraintType", "ol.ResolutionConstraintType", "ol.RotationConstraintType"]); +goog.addDependency("../src/ol/control/attributioncontrol.js", ["ol.control.Attribution"], ["goog.array", "goog.dom", "goog.dom.TagName", "goog.object", "goog.style", "ol.Attribution", "ol.FrameState", "ol.control.Control", "ol.css"]); +goog.addDependency("../src/ol/control/control.js", ["ol.control.Control"], ["goog.array", "goog.dom", "goog.events", "ol.MapEventType", "ol.Object"]); +goog.addDependency("../src/ol/control/controldefaults.js", ["ol.control"], ["ol.Collection", "ol.control.Attribution", "ol.control.Logo", "ol.control.Zoom"]); +goog.addDependency("../src/ol/control/fullscreencontrol.js", ["ol.control.FullScreen"], ["goog.asserts", "goog.dom", "goog.dom.TagName", "goog.dom.classes", "goog.events", "goog.events.EventType", "googx.dom.fullscreen", "googx.dom.fullscreen.EventType", "ol.control.Control", "ol.css"]); +goog.addDependency("../src/ol/control/logocontrol.js", ["ol.control.Logo"], ["goog.dom", "goog.dom.TagName", "goog.object", "goog.style", "ol.FrameState", "ol.control.Control", "ol.css"]); +goog.addDependency("../src/ol/control/mousepositioncontrol.js", ["ol.control.MousePosition"], ["goog.array", "goog.dom", "goog.dom.TagName", "goog.events", "goog.events.EventType", "goog.style", "ol.CoordinateFormatType", "ol.Object", "ol.Pixel", "ol.TransformFunction", "ol.control.Control", "ol.proj", "ol.proj.Projection"]); +goog.addDependency("../src/ol/control/scalelinecontrol.js", ["ol.control.ScaleLine", "ol.control.ScaleLineProperty", "ol.control.ScaleLineUnits"], ["goog.array", "goog.asserts", "goog.dom", "goog.dom.TagName", "goog.events", "goog.math", "goog.style", "ol.Object", "ol.TransformFunction", "ol.View2DState", "ol.control.Control", "ol.css", "ol.proj", "ol.proj.Units", "ol.sphere.NORMAL"]); +goog.addDependency("../src/ol/control/zoomcontrol.js", ["ol.control.Zoom"], ["goog.asserts", "goog.dom", "goog.dom.TagName", "goog.events", "goog.events.EventType", "ol.View2D", "ol.animation", "ol.control.Control", "ol.css", "ol.easing"]); +goog.addDependency("../src/ol/control/zoomslidercontrol.js", ["ol.control.ZoomSlider"], ["goog.array", "goog.asserts", "goog.dom", "goog.dom.TagName", "goog.events", "goog.events.Event", "goog.events.EventType", "goog.fx.Dragger", "goog.fx.Dragger.EventType", "goog.math", "goog.math.Rect", "goog.style", "ol.animation", "ol.control.Control", "ol.css", "ol.easing"]); +goog.addDependency("../src/ol/control/zoomtoextentcontrol.js", ["ol.control.ZoomToExtent"], ["goog.asserts", "goog.dom", "goog.dom.TagName", "goog.events", "goog.events.EventType", "ol.control.Control", "ol.css"]); +goog.addDependency("../src/ol/coordinate.js", ["ol.Coordinate", "ol.CoordinateArray", "ol.CoordinateFormatType", "ol.coordinate"], ["goog.math"]); +goog.addDependency("../src/ol/css.js", ["ol.css"], []); +goog.addDependency("../src/ol/deviceorientation.js", ["ol.DeviceOrientation", "ol.DeviceOrientationProperty"], ["goog.events", "goog.math", "ol.BrowserFeature", "ol.Object"]); +goog.addDependency("../src/ol/dom/dom.js", ["ol.dom", "ol.dom.BrowserFeature"], ["goog.asserts", "goog.dom", "goog.dom.TagName", "goog.style", "goog.userAgent", "goog.vec.Mat4"]); +goog.addDependency("../src/ol/dom/input.js", ["ol.dom.Input", "ol.dom.InputProperty"], ["goog.asserts", "goog.events", "goog.events.EventType", "ol.Object"]); +goog.addDependency("../src/ol/easing.js", ["ol.easing"], ["goog.fx.easing"]); +goog.addDependency("../src/ol/ellipsoid/bessel1841ellipsoid.js", ["ol.ellipsoid.BESSEL1841"], ["ol.Ellipsoid"]); +goog.addDependency("../src/ol/ellipsoid/ellipsoid.js", ["ol.Ellipsoid"], ["goog.math", "ol.Coordinate"]); +goog.addDependency("../src/ol/ellipsoid/wgs84ellipsoid.js", ["ol.ellipsoid.WGS84"], ["ol.Ellipsoid"]); +goog.addDependency("../src/ol/events/condition.js", ["ol.events.ConditionType", "ol.events.condition"], ["goog.asserts", "goog.dom.TagName", "goog.functions", "ol.MapBrowserEvent.EventType"]); +goog.addDependency("../src/ol/extent.js", ["ol.Extent", "ol.extent", "ol.extent.Relationship"], ["goog.asserts", "goog.vec.Mat4", "ol.Coordinate", "ol.Size", "ol.TransformFunction"]); +goog.addDependency("../src/ol/feature.js", ["ol.Feature", "ol.feature"], ["goog.asserts", "goog.events", "goog.events.EventType", "goog.functions", "ol.Object", "ol.geom.Geometry", "ol.style.Circle", "ol.style.Fill", "ol.style.Stroke", "ol.style.Style"]); +goog.addDependency("../src/ol/featureoverlay.js", ["ol.FeatureOverlay"], ["goog.array", "goog.asserts", "goog.events", "goog.events.EventType", "goog.object", "ol.Collection", "ol.CollectionEventType", "ol.Feature", "ol.feature", "ol.render.EventType"]); +goog.addDependency("../src/ol/format/binaryfeatureformat.js", ["ol.format.BinaryFeature"], ["goog.asserts", "ol.BrowserFeature", "ol.binary.Buffer", "ol.format.Feature", "ol.format.FormatType", "ol.proj"]); +goog.addDependency("../src/ol/format/featureformat.js", ["ol.format.Feature"], ["goog.functions"]); +goog.addDependency("../src/ol/format/format.js", ["ol.format.FormatType"], []); +goog.addDependency("../src/ol/format/geojsonformat.js", ["ol.format.GeoJSON"], ["goog.array", "goog.asserts", "goog.object", "ol.Feature", "ol.format.JSONFeature", "ol.geom.GeometryCollection", "ol.geom.GeometryType", "ol.geom.LineString", "ol.geom.MultiLineString", "ol.geom.MultiPoint", "ol.geom.MultiPolygon", "ol.geom.Point", "ol.geom.Polygon", "ol.proj"]); +goog.addDependency("../src/ol/format/gmlformat.js", ["ol.format.GML"], ["goog.array", "goog.asserts", "goog.dom", "goog.dom.NodeType", "goog.object", "goog.string", "ol.Feature", "ol.extent", "ol.format.XMLFeature", "ol.format.XSD", "ol.geom.Geometry", "ol.geom.LineString", "ol.geom.LinearRing", "ol.geom.MultiLineString", "ol.geom.MultiPoint", "ol.geom.MultiPolygon", "ol.geom.Point", "ol.geom.Polygon", "ol.proj", "ol.xml"]); +goog.addDependency("../src/ol/format/gpxformat.js", ["ol.format.GPX", "ol.format.GPX.V1_1"], ["goog.array", "goog.asserts", "goog.dom.NodeType", "goog.object", "ol.Feature", "ol.format.XMLFeature", "ol.format.XSD", "ol.geom.LineString", "ol.geom.MultiLineString", "ol.geom.Point", "ol.proj", "ol.xml"]); +goog.addDependency("../src/ol/format/igcformat.js", ["ol.format.IGC", "ol.format.IGCZ"], ["goog.asserts", "goog.string", "goog.string.newlines", "ol.Feature", "ol.format.TextFeature", "ol.geom.LineString", "ol.proj"]); +goog.addDependency("../src/ol/format/jsonfeatureformat.js", ["ol.format.JSONFeature"], ["goog.asserts", "goog.json", "ol.format.Feature", "ol.format.FormatType"]); +goog.addDependency("../src/ol/format/kmlformat.js", ["ol.format.KML"], ["goog.Uri", "goog.array", "goog.asserts", "goog.dom.NodeType", "goog.math", "goog.object", "goog.string", "ol.Feature", "ol.feature", "ol.format.XMLFeature", "ol.format.XSD", "ol.geom.GeometryCollection", "ol.geom.GeometryType", "ol.geom.LineString", "ol.geom.MultiLineString", "ol.geom.MultiPoint", "ol.geom.MultiPolygon", "ol.geom.Point", "ol.geom.Polygon", "ol.proj", "ol.style.Fill", "ol.style.Icon", "ol.style.IconAnchorOrigin", +"ol.style.IconAnchorUnits", "ol.style.Image", "ol.style.Stroke", "ol.style.Style", "ol.xml"]); +goog.addDependency("../src/ol/format/osmxmlformat.js", ["ol.format.OSMXML"], ["goog.array", "goog.asserts", "goog.dom.NodeType", "goog.object", "ol.Feature", "ol.format.XMLFeature", "ol.geom.LineString", "ol.geom.Point", "ol.geom.Polygon", "ol.proj", "ol.xml"]); +goog.addDependency("../src/ol/format/polylineformat.js", ["ol.format.Polyline"], ["goog.asserts", "ol.Feature", "ol.format.TextFeature", "ol.geom.LineString", "ol.geom.flat", "ol.proj"]); +goog.addDependency("../src/ol/format/textfeatureformat.js", ["ol.format.TextFeature"], ["goog.asserts", "ol.format.Feature", "ol.format.FormatType"]); +goog.addDependency("../src/ol/format/topojsonformat.js", ["ol.format.TopoJSON"], ["goog.array", "goog.asserts", "goog.object", "ol.Feature", "ol.format.JSONFeature", "ol.geom.LineString", "ol.geom.MultiLineString", "ol.geom.MultiPoint", "ol.geom.MultiPolygon", "ol.geom.Point", "ol.geom.Polygon", "ol.proj"]); +goog.addDependency("../src/ol/format/xmlfeatureformat.js", ["ol.format.XMLFeature"], ["goog.array", "goog.asserts", "goog.dom.NodeType", "ol.format.Feature", "ol.format.FormatType", "ol.xml"]); +goog.addDependency("../src/ol/format/xsdformat.js", ["ol.format.XSD"], ["goog.asserts", "goog.string", "ol.xml"]); +goog.addDependency("../src/ol/framestate.js", ["ol.FrameState", "ol.PostRenderFunction", "ol.PreRenderFunction"], ["goog.vec.Mat4", "ol.Attribution", "ol.Extent", "ol.Size", "ol.TileQueue", "ol.TileRange", "ol.View2DState", "ol.layer.Layer", "ol.layer.LayerState"]); +goog.addDependency("../src/ol/geolocation.js", ["ol.Geolocation", "ol.GeolocationProperty"], ["goog.events", "goog.events.EventType", "goog.math", "ol.BrowserFeature", "ol.Coordinate", "ol.Object", "ol.proj"]); +goog.addDependency("../src/ol/geom/circle.js", ["ol.geom.Circle"], ["goog.asserts", "ol.extent", "ol.geom.GeometryType", "ol.geom.SimpleGeometry", "ol.geom.flat"]); +goog.addDependency("../src/ol/geom/closestgeom.js", ["ol.geom.closest"], ["goog.asserts", "ol.geom.flat"]); +goog.addDependency("../src/ol/geom/flatgeom.js", ["ol.geom.flat"], ["goog.array", "goog.asserts", "goog.math", "goog.vec.Mat4", "ol.extent"]); +goog.addDependency("../src/ol/geom/geometry.js", ["ol.geom.Geometry", "ol.geom.GeometryType"], ["goog.asserts", "goog.functions", "ol.Observable"]); +goog.addDependency("../src/ol/geom/geometrycollection.js", ["ol.geom.GeometryCollection"], ["goog.array", "goog.asserts", "goog.events", "goog.events.EventType", "goog.object", "ol.extent", "ol.geom.Geometry", "ol.geom.GeometryType"]); +goog.addDependency("../src/ol/geom/linearring.js", ["ol.geom.LinearRing"], ["ol.extent", "ol.geom.GeometryType", "ol.geom.SimpleGeometry", "ol.geom.closest", "ol.geom.flat", "ol.geom.simplify"]); +goog.addDependency("../src/ol/geom/linestring.js", ["ol.geom.LineString"], ["ol.extent", "ol.geom.GeometryType", "ol.geom.SimpleGeometry", "ol.geom.closest", "ol.geom.flat", "ol.geom.simplify"]); +goog.addDependency("../src/ol/geom/multilinestring.js", ["ol.geom.MultiLineString"], ["goog.array", "goog.asserts", "ol.extent", "ol.geom.GeometryType", "ol.geom.LineString", "ol.geom.SimpleGeometry", "ol.geom.closest", "ol.geom.flat", "ol.geom.simplify"]); +goog.addDependency("../src/ol/geom/multipoint.js", ["ol.geom.MultiPoint"], ["ol.extent", "ol.geom.GeometryType", "ol.geom.Point", "ol.geom.SimpleGeometry", "ol.geom.flat"]); +goog.addDependency("../src/ol/geom/multipolygon.js", ["ol.geom.MultiPolygon"], ["goog.array", "goog.asserts", "ol.extent", "ol.geom.GeometryType", "ol.geom.MultiPoint", "ol.geom.Polygon", "ol.geom.SimpleGeometry", "ol.geom.closest", "ol.geom.flat", "ol.geom.simplify"]); +goog.addDependency("../src/ol/geom/point.js", ["ol.geom.Point"], ["goog.asserts", "ol.extent", "ol.geom.GeometryType", "ol.geom.SimpleGeometry", "ol.geom.flat"]); +goog.addDependency("../src/ol/geom/polygon.js", ["ol.geom.Polygon"], ["ol.extent", "ol.geom.GeometryType", "ol.geom.LinearRing", "ol.geom.Point", "ol.geom.SimpleGeometry", "ol.geom.closest", "ol.geom.flat", "ol.geom.simplify"]); +goog.addDependency("../src/ol/geom/simplegeometry.js", ["ol.geom.SimpleGeometry"], ["goog.asserts", "goog.functions", "goog.object", "ol.extent", "ol.geom.Geometry", "ol.geom.flat"]); +goog.addDependency("../src/ol/geom/simplifygeom.js", ["ol.geom.simplify"], ["ol.geom.flat"]); +goog.addDependency("../src/ol/image.js", ["ol.Image"], ["goog.array", "goog.asserts", "goog.events", "goog.events.EventType", "goog.object", "ol.ImageBase", "ol.ImageState"]); +goog.addDependency("../src/ol/imagebase.js", ["ol.ImageBase", "ol.ImageState"], ["goog.events.EventTarget", "goog.events.EventType", "ol.Attribution", "ol.Extent"]); +goog.addDependency("../src/ol/imagecanvas.js", ["ol.ImageCanvas"], ["ol.ImageBase", "ol.ImageState"]); +goog.addDependency("../src/ol/imagetile.js", ["ol.ImageTile"], ["goog.array", "goog.asserts", "goog.events", "goog.events.EventType", "goog.object", "ol.Tile", "ol.TileCoord", "ol.TileLoadFunctionType", "ol.TileState"]); +goog.addDependency("../src/ol/imageurlfunction.js", ["ol.ImageUrlFunction", "ol.ImageUrlFunctionType"], ["ol.Size"]); +goog.addDependency("../src/ol/interaction/doubleclickzoominteraction.js", ["ol.interaction.DoubleClickZoom"], ["goog.asserts", "ol.MapBrowserEvent", "ol.MapBrowserEvent.EventType", "ol.interaction.Interaction"]); +goog.addDependency("../src/ol/interaction/draganddropinteraction.js", ["ol.interaction.DragAndDrop", "ol.interaction.DragAndDropEvent"], ["goog.array", "goog.asserts", "goog.events", "goog.events.Event", "goog.events.FileDropHandler", "goog.events.FileDropHandler.EventType", "goog.fs.FileReader", "goog.functions", "ol.interaction.Interaction", "ol.proj"]); +goog.addDependency("../src/ol/interaction/dragboxinteraction.js", ["ol.DragBoxEvent", "ol.interaction.DragBox"], ["goog.asserts", "goog.events.Event", "ol.events.ConditionType", "ol.events.condition", "ol.interaction.Drag", "ol.render.Box"]); +goog.addDependency("../src/ol/interaction/draginteraction.js", ["ol.interaction.Drag"], ["goog.asserts", "goog.events.BrowserEvent", "goog.functions", "ol.Coordinate", "ol.MapBrowserEvent", "ol.MapBrowserEvent.EventType", "ol.interaction.Interaction"]); +goog.addDependency("../src/ol/interaction/dragpaninteraction.js", ["ol.interaction.DragPan"], ["goog.asserts", "ol.Kinetic", "ol.PreRenderFunction", "ol.View2D", "ol.ViewHint", "ol.coordinate", "ol.events.ConditionType", "ol.events.condition", "ol.interaction.Drag"]); +goog.addDependency("../src/ol/interaction/dragrotateandzoominteraction.js", ["ol.interaction.DragRotateAndZoom"], ["goog.asserts", "goog.math.Vec2", "ol.ViewHint", "ol.events.ConditionType", "ol.events.condition", "ol.interaction.Drag", "ol.interaction.Interaction"]); +goog.addDependency("../src/ol/interaction/dragrotateinteraction.js", ["ol.interaction.DragRotate"], ["goog.asserts", "ol.ViewHint", "ol.events.ConditionType", "ol.events.condition", "ol.interaction.Drag", "ol.interaction.Interaction"]); +goog.addDependency("../src/ol/interaction/dragzoominteraction.js", ["ol.interaction.DragZoom"], ["goog.asserts", "ol.events.condition", "ol.extent", "ol.interaction.DragBox", "ol.interaction.Interaction", "ol.style.Stroke", "ol.style.Style"]); +goog.addDependency("../src/ol/interaction/drawinteraction.js", ["ol.DrawEvent", "ol.interaction.Draw"], ["goog.asserts", "goog.events.Event", "ol.Collection", "ol.Coordinate", "ol.Feature", "ol.FeatureOverlay", "ol.Map", "ol.MapBrowserEvent", "ol.MapBrowserEvent.EventType", "ol.geom.GeometryType", "ol.geom.LineString", "ol.geom.MultiLineString", "ol.geom.MultiPoint", "ol.geom.MultiPolygon", "ol.geom.Point", "ol.geom.Polygon", "ol.interaction.Interaction", "ol.source.Vector", "ol.style.Circle", "ol.style.Fill", +"ol.style.Stroke", "ol.style.Style"]); +goog.addDependency("../src/ol/interaction/interaction.js", ["ol.interaction.Interaction"], ["goog.asserts", "ol.MapBrowserEvent", "ol.Observable", "ol.View2D", "ol.animation", "ol.easing"]); +goog.addDependency("../src/ol/interaction/interactiondefaults.js", ["ol.interaction"], ["ol.Collection", "ol.Kinetic", "ol.interaction.DoubleClickZoom", "ol.interaction.DragPan", "ol.interaction.DragRotate", "ol.interaction.DragZoom", "ol.interaction.KeyboardPan", "ol.interaction.KeyboardZoom", "ol.interaction.MouseWheelZoom", "ol.interaction.TouchPan", "ol.interaction.TouchRotate", "ol.interaction.TouchZoom"]); +goog.addDependency("../src/ol/interaction/keyboardpaninteraction.js", ["ol.interaction.KeyboardPan"], ["goog.asserts", "goog.events.KeyCodes", "goog.events.KeyHandler.EventType", "goog.functions", "ol.View2D", "ol.coordinate", "ol.events.ConditionType", "ol.events.condition", "ol.interaction.Interaction"]); +goog.addDependency("../src/ol/interaction/keyboardzoominteraction.js", ["ol.interaction.KeyboardZoom"], ["goog.asserts", "goog.events.KeyHandler.EventType", "ol.events.ConditionType", "ol.events.condition", "ol.interaction.Interaction"]); +goog.addDependency("../src/ol/interaction/modifyinteraction.js", ["ol.interaction.Modify"], ["goog.array", "goog.asserts", "goog.events", "ol.Collection", "ol.CollectionEventType", "ol.Feature", "ol.FeatureOverlay", "ol.MapBrowserEvent.EventType", "ol.ViewHint", "ol.coordinate", "ol.extent", "ol.geom.GeometryType", "ol.geom.LineString", "ol.geom.MultiLineString", "ol.geom.MultiPoint", "ol.geom.MultiPolygon", "ol.geom.Point", "ol.geom.Polygon", "ol.interaction.Drag", "ol.structs.RBush"]); +goog.addDependency("../src/ol/interaction/mousewheelzoominteraction.js", ["ol.interaction.MouseWheelZoom"], ["goog.asserts", "goog.events.MouseWheelEvent", "goog.events.MouseWheelHandler.EventType", "goog.math", "ol.Coordinate", "ol.interaction.Interaction"]); +goog.addDependency("../src/ol/interaction/selectinteraction.js", ["ol.interaction.Select"], ["goog.array", "goog.functions", "ol.FeatureOverlay", "ol.events.condition", "ol.interaction.Interaction"]); +goog.addDependency("../src/ol/interaction/touchinteraction.js", ["ol.interaction.Touch"], ["goog.asserts", "goog.functions", "goog.object", "ol.MapBrowserEvent", "ol.MapBrowserEvent.EventType", "ol.Pixel", "ol.ViewHint", "ol.interaction.Interaction"]); +goog.addDependency("../src/ol/interaction/touchpaninteraction.js", ["ol.interaction.TouchPan"], ["goog.asserts", "ol.Kinetic", "ol.Pixel", "ol.PreRenderFunction", "ol.View2D", "ol.coordinate", "ol.interaction.Touch"]); +goog.addDependency("../src/ol/interaction/touchrotateinteraction.js", ["ol.interaction.TouchRotate"], ["goog.asserts", "goog.style", "ol.Coordinate", "ol.interaction.Interaction", "ol.interaction.Touch"]); +goog.addDependency("../src/ol/interaction/touchzoominteraction.js", ["ol.interaction.TouchZoom"], ["goog.asserts", "goog.style", "ol.Coordinate", "ol.interaction.Interaction", "ol.interaction.Touch"]); +goog.addDependency("../src/ol/iview.js", ["ol.IView"], ["ol.IView2D", "ol.IView3D"]); +goog.addDependency("../src/ol/iview2d.js", ["ol.IView2D", "ol.View2DState"], ["ol.Coordinate"]); +goog.addDependency("../src/ol/iview3d.js", ["ol.IView3D"], []); +goog.addDependency("../src/ol/kinetic.js", ["ol.Kinetic"], ["ol.Coordinate", "ol.PreRenderFunction", "ol.animation"]); +goog.addDependency("../src/ol/layer/heatmaplayer.js", ["ol.layer.Heatmap"], ["goog.asserts", "goog.dom", "goog.dom.TagName", "goog.events", "ol.Object", "ol.layer.Vector", "ol.render.EventType", "ol.style.Icon", "ol.style.Style"]); +goog.addDependency("../src/ol/layer/imagelayer.js", ["ol.layer.Image"], ["ol.layer.Layer"]); +goog.addDependency("../src/ol/layer/layer.js", ["ol.layer.Layer"], ["goog.asserts", "goog.events", "goog.events.EventType", "goog.object", "ol.layer.Base", "ol.source.Source"]); +goog.addDependency("../src/ol/layer/layerbase.js", ["ol.layer.Base", "ol.layer.LayerProperty", "ol.layer.LayerState"], ["goog.events", "goog.math", "goog.object", "ol.Object", "ol.source.State"]); +goog.addDependency("../src/ol/layer/layergroup.js", ["ol.layer.Group"], ["goog.array", "goog.asserts", "goog.events", "goog.events.EventType", "goog.math", "goog.object", "ol.Collection", "ol.CollectionEvent", "ol.CollectionEventType", "ol.Object", "ol.ObjectEventType", "ol.layer.Base", "ol.source.State"]); +goog.addDependency("../src/ol/layer/tilelayer.js", ["ol.layer.Tile"], ["ol.layer.Layer"]); +goog.addDependency("../src/ol/layer/vectorlayer.js", ["ol.layer.Vector"], ["goog.object", "ol.feature", "ol.layer.Layer"]); +goog.addDependency("../src/ol/map.js", ["ol.Map", "ol.MapProperty", "ol.RendererHint"], ["goog.Uri.QueryData", "goog.array", "goog.asserts", "goog.async.AnimationDelay", "goog.async.nextTick", "goog.debug.Console", "goog.dom", "goog.dom.TagName", "goog.dom.ViewportSizeMonitor", "goog.events", "goog.events.BrowserEvent", "goog.events.Event", "goog.events.EventType", "goog.events.KeyHandler", "goog.events.KeyHandler.EventType", "goog.events.MouseWheelHandler", "goog.events.MouseWheelHandler.EventType", +"goog.log", "goog.log.Level", "goog.object", "goog.style", "goog.vec.Mat4", "ol.BrowserFeature", "ol.Collection", "ol.CollectionEventType", "ol.FrameState", "ol.IView", "ol.MapBrowserEvent", "ol.MapBrowserEvent.EventType", "ol.MapBrowserEventHandler", "ol.MapEvent", "ol.MapEventType", "ol.Object", "ol.ObjectEvent", "ol.ObjectEventType", "ol.Pixel", "ol.PostRenderFunction", "ol.PreRenderFunction", "ol.Size", "ol.Tile", "ol.TileQueue", "ol.View", "ol.View2D", "ol.ViewHint", "ol.control", "ol.extent", +"ol.interaction", "ol.layer.Base", "ol.layer.Group", "ol.proj", "ol.proj.common", "ol.renderer.Map", "ol.renderer.canvas.Map", "ol.renderer.dom.Map", "ol.renderer.webgl.Map", "ol.structs.PriorityQueue", "ol.vec.Mat4"]); +goog.addDependency("../src/ol/mapbrowserevent.js", ["ol.MapBrowserEvent", "ol.MapBrowserEvent.EventType", "ol.MapBrowserEventHandler"], ["goog.array", "goog.asserts", "goog.events", "goog.events.BrowserEvent", "goog.events.EventTarget", "goog.events.EventType", "goog.object", "ol.Coordinate", "ol.FrameState", "ol.MapEvent", "ol.Pixel"]); +goog.addDependency("../src/ol/mapevent.js", ["ol.MapEvent", "ol.MapEventType"], ["goog.events.Event", "ol.FrameState"]); +goog.addDependency("../src/ol/math.js", ["ol.math"], ["goog.asserts"]); +goog.addDependency("../src/ol/object.js", ["ol.Object", "ol.ObjectEvent", "ol.ObjectEventType"], ["goog.array", "goog.events", "goog.events.Event", "goog.functions", "goog.object", "ol.Observable"]); +goog.addDependency("../src/ol/observable.js", ["ol.Observable"], ["goog.events", "goog.events.EventTarget", "goog.events.EventType"]); +goog.addDependency("../src/ol/ol.js", ["ol"], []); +goog.addDependency("../src/ol/overlay.js", ["ol.Overlay", "ol.OverlayPositioning", "ol.OverlayProperty"], ["goog.asserts", "goog.dom", "goog.dom.TagName", "goog.events", "goog.style", "ol.Coordinate", "ol.Map", "ol.MapEventType", "ol.Object"]); +goog.addDependency("../src/ol/parser/ogc/exceptionreportparser.js", ["ol.parser.ogc.ExceptionReport"], ["goog.dom.xml", "ol.parser.XML"]); +goog.addDependency("../src/ol/parser/ogc/versionedparser.js", ["ol.parser.ogc.Versioned"], ["goog.dom.xml", "ol.parser.ogc.ExceptionReport"]); +goog.addDependency("../src/ol/parser/ogc/wmscapabilitiesparser.js", ["ol.parser.ogc.WMSCapabilities"], ["ol.parser.ogc.Versioned", "ol.parser.ogc.WMSCapabilities_v1_0_0", "ol.parser.ogc.WMSCapabilities_v1_1_0", "ol.parser.ogc.WMSCapabilities_v1_1_1", "ol.parser.ogc.WMSCapabilities_v1_1_1_WMSC", "ol.parser.ogc.WMSCapabilities_v1_3_0"]); +goog.addDependency("../src/ol/parser/ogc/wmscapabilitiesparser_v1.js", ["ol.parser.ogc.WMSCapabilities_v1"], ["goog.dom.xml", "goog.object", "ol.parser.XML"]); +goog.addDependency("../src/ol/parser/ogc/wmscapabilitiesparser_v1_0_0.js", ["ol.parser.ogc.WMSCapabilities_v1_0_0"], ["goog.object", "goog.string", "ol.parser.ogc.WMSCapabilities_v1_1_0"]); +goog.addDependency("../src/ol/parser/ogc/wmscapabilitiesparser_v1_1.js", ["ol.parser.ogc.WMSCapabilities_v1_1"], ["goog.object", "ol.parser.ogc.WMSCapabilities_v1"]); +goog.addDependency("../src/ol/parser/ogc/wmscapabilitiesparser_v1_1_0.js", ["ol.parser.ogc.WMSCapabilities_v1_1_0"], ["goog.object", "ol.parser.ogc.WMSCapabilities_v1_1"]); +goog.addDependency("../src/ol/parser/ogc/wmscapabilitiesparser_v1_1_1.js", ["ol.parser.ogc.WMSCapabilities_v1_1_1"], ["goog.object", "ol.parser.ogc.WMSCapabilities_v1_1"]); +goog.addDependency("../src/ol/parser/ogc/wmscapabilitiesparser_v1_1_1_WMSC.js", ["ol.parser.ogc.WMSCapabilities_v1_1_1_WMSC"], ["goog.object", "ol.parser.ogc.WMSCapabilities_v1_1_1"]); +goog.addDependency("../src/ol/parser/ogc/wmscapabilitiesparser_v1_3_0.js", ["ol.parser.ogc.WMSCapabilities_v1_3_0"], ["goog.object", "ol.parser.ogc.WMSCapabilities_v1"]); +goog.addDependency("../src/ol/parser/parser.js", ["ol.parser.Parser"], []); +goog.addDependency("../src/ol/parser/xmlparser.js", ["ol.parser.XML"], ["goog.dom.xml", "ol.parser.Parser"]); +goog.addDependency("../src/ol/pixel.js", ["ol.Pixel"], []); +goog.addDependency("../src/ol/proj/chprojection.js", ["ol.proj.CH", "ol.proj.EPSG2056", "ol.proj.EPSG21781"], ["goog.asserts", "goog.math", "ol.ellipsoid.BESSEL1841", "ol.proj", "ol.proj.EPSG4326", "ol.proj.Projection", "ol.proj.Units"]); +goog.addDependency("../src/ol/proj/common.js", ["ol.proj.common"], ["ol.proj", "ol.proj.EPSG3857", "ol.proj.EPSG4326"]); +goog.addDependency("../src/ol/proj/epsg3857projection.js", ["ol.proj.EPSG3857"], ["goog.array", "goog.asserts", "ol.math", "ol.proj", "ol.proj.Projection", "ol.proj.Units"]); +goog.addDependency("../src/ol/proj/epsg4326projection.js", ["ol.proj.EPSG4326"], ["ol.proj", "ol.proj.Projection", "ol.proj.Units"]); +goog.addDependency("../src/ol/proj/proj.js", ["ol.proj", "ol.proj.METERS_PER_UNIT", "ol.proj.Projection", "ol.proj.ProjectionLike", "ol.proj.Units"], ["goog.array", "goog.asserts", "goog.object", "ol.Extent", "ol.TransformFunction", "ol.sphere.NORMAL"]); +goog.addDependency("../src/ol/render/box.js", ["ol.render.Box"], ["goog.Disposable", "goog.array", "goog.asserts", "goog.events", "ol.geom.Polygon", "ol.render.EventType"]); +goog.addDependency("../src/ol/render/canvas/canvas.js", ["ol.render.canvas"], ["ol.color"]); +goog.addDependency("../src/ol/render/canvas/canvasimmediate.js", ["ol.render.canvas.Immediate"], ["goog.array", "goog.asserts", "goog.object", "goog.vec.Mat4", "ol.BrowserFeature", "ol.color", "ol.extent", "ol.geom.flat", "ol.render.IVectorContext", "ol.render.canvas", "ol.vec.Mat4"]); +goog.addDependency("../src/ol/render/canvas/canvasreplay.js", ["ol.render.canvas.ReplayGroup"], ["goog.array", "goog.asserts", "goog.dom", "goog.dom.TagName", "goog.object", "goog.vec.Mat4", "ol.BrowserFeature", "ol.array", "ol.color", "ol.extent", "ol.extent.Relationship", "ol.geom.flat", "ol.geom.simplify", "ol.render.IReplayGroup", "ol.render.IVectorContext", "ol.render.canvas", "ol.vec.Mat4"]); +goog.addDependency("../src/ol/render/ireplay.js", ["ol.render.IReplayGroup"], ["goog.functions", "ol.render.IVectorContext"]); +goog.addDependency("../src/ol/render/ivectorcontext.js", ["ol.render.IVectorContext"], []); +goog.addDependency("../src/ol/render/renderevent.js", ["ol.render.Event", "ol.render.EventType"], ["goog.events.Event", "ol.render.IVectorContext"]); +goog.addDependency("../src/ol/render/vector.js", ["ol.renderer.vector"], ["goog.asserts", "ol.geom.Circle", "ol.geom.GeometryCollection", "ol.geom.LineString", "ol.geom.MultiLineString", "ol.geom.MultiPoint", "ol.geom.MultiPolygon", "ol.geom.Point", "ol.geom.Polygon", "ol.render.IReplayGroup", "ol.style.ImageState", "ol.style.Style"]); +goog.addDependency("../src/ol/render/webgl/webglimmediate.js", ["ol.render.webgl.Immediate"], []); +goog.addDependency("../src/ol/renderer/canvas/canvasimagelayerrenderer.js", ["ol.renderer.canvas.ImageLayer"], ["goog.asserts", "goog.events", "goog.events.EventType", "goog.vec.Mat4", "ol.ImageBase", "ol.ImageState", "ol.ViewHint", "ol.layer.Image", "ol.renderer.Map", "ol.renderer.canvas.Layer", "ol.source.Image", "ol.vec.Mat4"]); +goog.addDependency("../src/ol/renderer/canvas/canvaslayerrenderer.js", ["ol.renderer.canvas.Layer"], ["goog.vec.Mat4", "ol.layer.Layer", "ol.render.Event", "ol.render.EventType", "ol.render.canvas.Immediate", "ol.renderer.Layer", "ol.vec.Mat4"]); +goog.addDependency("../src/ol/renderer/canvas/canvasmaprenderer.js", ["ol.renderer.canvas.Map"], ["goog.asserts", "goog.dom", "goog.dom.TagName", "goog.style", "goog.vec.Mat4", "ol.css", "ol.layer.Image", "ol.layer.Tile", "ol.layer.Vector", "ol.render.Event", "ol.render.EventType", "ol.render.canvas.Immediate", "ol.renderer.Map", "ol.renderer.canvas.ImageLayer", "ol.renderer.canvas.Layer", "ol.renderer.canvas.TileLayer", "ol.renderer.canvas.VectorLayer", "ol.source.State", "ol.vec.Mat4"]); +goog.addDependency("../src/ol/renderer/canvas/canvastilelayerrenderer.js", ["ol.renderer.canvas.TileLayer"], ["goog.array", "goog.asserts", "goog.dom", "goog.dom.TagName", "goog.object", "goog.vec.Mat4", "ol.Size", "ol.Tile", "ol.TileCoord", "ol.TileRange", "ol.TileState", "ol.extent", "ol.layer.Tile", "ol.renderer.Map", "ol.renderer.canvas.Layer", "ol.source.Tile", "ol.vec.Mat4"]); +goog.addDependency("../src/ol/renderer/canvas/canvasvectorlayerrenderer.js", ["ol.renderer.canvas.VectorLayer"], ["goog.asserts", "goog.dom", "goog.dom.TagName", "goog.events", "goog.functions", "ol.ViewHint", "ol.extent", "ol.feature", "ol.layer.Vector", "ol.render.EventType", "ol.render.canvas.ReplayGroup", "ol.renderer.canvas.Layer", "ol.renderer.vector", "ol.source.Vector"]); +goog.addDependency("../src/ol/renderer/dom/domimagelayerrenderer.js", ["ol.renderer.dom.ImageLayer"], ["goog.asserts", "goog.dom", "goog.dom.TagName", "goog.events", "goog.events.EventType", "goog.vec.Mat4", "ol.ImageBase", "ol.ImageState", "ol.ViewHint", "ol.dom", "ol.layer.Image", "ol.renderer.dom.Layer", "ol.source.Image", "ol.vec.Mat4"]); +goog.addDependency("../src/ol/renderer/dom/domlayerrenderer.js", ["ol.renderer.dom.Layer"], ["goog.dom", "ol.layer.Layer", "ol.renderer.Layer"]); +goog.addDependency("../src/ol/renderer/dom/dommaprenderer.js", ["ol.renderer.dom.Map"], ["goog.asserts", "goog.dom", "goog.dom.TagName", "goog.functions", "goog.style", "ol.css", "ol.layer.Image", "ol.layer.Tile", "ol.renderer.Map", "ol.renderer.dom.ImageLayer", "ol.renderer.dom.Layer", "ol.renderer.dom.TileLayer", "ol.source.State"]); +goog.addDependency("../src/ol/renderer/dom/domtilelayerrenderer.js", ["ol.renderer.dom.TileLayer"], ["goog.array", "goog.asserts", "goog.dom", "goog.dom.TagName", "goog.object", "goog.style", "goog.vec.Mat4", "ol.Coordinate", "ol.Tile", "ol.TileCoord", "ol.TileRange", "ol.TileState", "ol.ViewHint", "ol.dom", "ol.dom.BrowserFeature", "ol.extent", "ol.layer.Tile", "ol.renderer.dom.Layer", "ol.source.Tile", "ol.tilegrid.TileGrid", "ol.vec.Mat4"]); +goog.addDependency("../src/ol/renderer/layerrenderer.js", ["ol.renderer.Layer"], ["goog.Disposable", "ol.FrameState", "ol.Image", "ol.ImageState", "ol.Tile", "ol.TileRange", "ol.TileState", "ol.layer.Layer", "ol.layer.LayerState", "ol.source.Source", "ol.source.State", "ol.source.Tile"]); +goog.addDependency("../src/ol/renderer/maprenderer.js", ["ol.renderer.Map"], ["goog.Disposable", "goog.asserts", "goog.dispose", "goog.object", "goog.vec.Mat4", "ol.FrameState", "ol.layer.Layer", "ol.renderer.Layer", "ol.style.IconImageCache", "ol.vec.Mat4"]); +goog.addDependency("../src/ol/renderer/webgl/webglimagelayerrenderer.js", ["ol.renderer.webgl.ImageLayer"], ["goog.asserts", "goog.events", "goog.events.EventType", "goog.vec.Mat4", "goog.webgl", "ol.Coordinate", "ol.Extent", "ol.ImageBase", "ol.ImageState", "ol.ViewHint", "ol.layer.Image", "ol.renderer.webgl.Layer", "ol.source.Image"]); +goog.addDependency("../src/ol/renderer/webgl/webgllayerrenderer.js", ["ol.renderer.webgl.Layer"], ["goog.vec.Mat4", "goog.webgl", "ol.FrameState", "ol.color.Matrix", "ol.layer.Layer", "ol.render.Event", "ol.render.EventType", "ol.render.webgl.Immediate", "ol.renderer.Layer", "ol.renderer.webgl.map.shader.Color", "ol.renderer.webgl.map.shader.Default", "ol.structs.Buffer"]); +goog.addDependency("../src/ol/renderer/webgl/webglmapcolorshader.js", ["ol.renderer.webgl.map.shader.Color"], ["ol.webgl.shader"]); +goog.addDependency("../src/ol/renderer/webgl/webglmapdefaultshader.js", ["ol.renderer.webgl.map.shader.Default"], ["ol.webgl.shader"]); +goog.addDependency("../src/ol/renderer/webgl/webglmaprenderer.js", ["ol.renderer.webgl.Map"], ["goog.array", "goog.asserts", "goog.dom", "goog.dom.TagName", "goog.events", "goog.events.Event", "goog.log", "goog.log.Logger", "goog.object", "goog.style", "goog.webgl", "ol.FrameState", "ol.Tile", "ol.css", "ol.layer.Image", "ol.layer.Tile", "ol.render.Event", "ol.render.EventType", "ol.render.webgl.Immediate", "ol.renderer.Map", "ol.renderer.webgl.ImageLayer", "ol.renderer.webgl.Layer", "ol.renderer.webgl.TileLayer", +"ol.source.State", "ol.structs.LRUCache", "ol.structs.PriorityQueue", "ol.webgl", "ol.webgl.Context", "ol.webgl.WebGLContextEventType"]); +goog.addDependency("../src/ol/renderer/webgl/webgltilelayerrenderer.js", ["ol.renderer.webgl.TileLayer"], ["goog.array", "goog.asserts", "goog.object", "goog.vec.Mat4", "goog.vec.Vec4", "goog.webgl", "ol.Tile", "ol.TileRange", "ol.TileState", "ol.extent", "ol.layer.Tile", "ol.math", "ol.renderer.webgl.Layer", "ol.renderer.webgl.tilelayer.shader", "ol.source.Tile", "ol.structs.Buffer"]); +goog.addDependency("../src/ol/renderer/webgl/webgltilelayershader.js", ["ol.renderer.webgl.tilelayer.shader"], ["ol.webgl.shader"]); +goog.addDependency("../src/ol/resolutionconstraint.js", ["ol.ResolutionConstraint", "ol.ResolutionConstraintType"], ["goog.math", "ol.array"]); +goog.addDependency("../src/ol/rotationconstraint.js", ["ol.RotationConstraint", "ol.RotationConstraintType"], ["goog.math"]); +goog.addDependency("../src/ol/size.js", ["ol.Size", "ol.size"], []); +goog.addDependency("../src/ol/source/bingmapssource.js", ["ol.source.BingMaps"], ["goog.Uri", "goog.array", "goog.asserts", "goog.net.Jsonp", "ol.Attribution", "ol.TileRange", "ol.TileUrlFunction", "ol.extent", "ol.proj", "ol.source.State", "ol.source.TileImage", "ol.tilegrid.XYZ"]); +goog.addDependency("../src/ol/source/debugtilesource.js", ["ol.source.TileDebug"], ["goog.dom", "goog.dom.TagName", "ol.Tile", "ol.TileCache", "ol.TileCoord", "ol.TileState", "ol.source.Tile", "ol.tilegrid.TileGrid"]); +goog.addDependency("../src/ol/source/geojsonsource.js", ["ol.source.GeoJSON"], ["ol.format.GeoJSON", "ol.source.VectorFile"]); +goog.addDependency("../src/ol/source/gpxsource.js", ["ol.source.GPX"], ["ol.format.GPX", "ol.source.VectorFile"]); +goog.addDependency("../src/ol/source/igcsource.js", ["ol.source.IGC"], ["ol.format.IGC", "ol.source.VectorFile"]); +goog.addDependency("../src/ol/source/imagecanvassource.js", ["ol.source.ImageCanvas"], ["ol.CanvasFunctionType", "ol.ImageCanvas", "ol.extent", "ol.source.Image"]); +goog.addDependency("../src/ol/source/imagesource.js", ["ol.source.Image"], ["goog.array", "goog.asserts", "ol.Attribution", "ol.Extent", "ol.Image", "ol.array", "ol.source.Source"]); +goog.addDependency("../src/ol/source/imagestaticsource.js", ["ol.source.ImageStatic"], ["ol.Image", "ol.extent", "ol.proj", "ol.source.Image"]); +goog.addDependency("../src/ol/source/imagevectorsource.js", ["ol.source.ImageVector"], ["goog.asserts", "goog.dom", "goog.dom.TagName", "goog.events", "goog.events.EventType", "goog.vec.Mat4", "ol.extent", "ol.feature", "ol.render.canvas.ReplayGroup", "ol.renderer.vector", "ol.source.ImageCanvas", "ol.source.Vector", "ol.vec.Mat4"]); +goog.addDependency("../src/ol/source/imagewmssource.js", ["ol.source.ImageWMS"], ["goog.asserts", "goog.object", "goog.string", "goog.uri.utils", "ol.Image", "ol.extent", "ol.proj", "ol.source.Image", "ol.source.wms", "ol.source.wms.ServerType"]); +goog.addDependency("../src/ol/source/kmlsource.js", ["ol.source.KML"], ["ol.format.KML", "ol.source.VectorFile"]); +goog.addDependency("../src/ol/source/mapguidesource.js", ["ol.source.MapGuide"], ["goog.object", "goog.uri.utils", "ol.Image", "ol.ImageUrlFunction", "ol.extent", "ol.source.Image"]); +goog.addDependency("../src/ol/source/mapquestsource.js", ["ol.source.MapQuest"], ["goog.asserts", "ol.Attribution", "ol.source.OSM", "ol.source.XYZ"]); +goog.addDependency("../src/ol/source/osmsource.js", ["ol.source.OSM"], ["ol.Attribution", "ol.source.XYZ"]); +goog.addDependency("../src/ol/source/osmxmlsource.js", ["ol.source.OSMXML"], ["ol.format.OSMXML", "ol.source.VectorFile"]); +goog.addDependency("../src/ol/source/source.js", ["ol.source.Source", "ol.source.State"], ["goog.events.EventType", "ol.Attribution", "ol.Extent", "ol.Observable", "ol.proj"]); +goog.addDependency("../src/ol/source/stamensource.js", ["ol.source.Stamen"], ["goog.asserts", "ol.Attribution", "ol.source.OSM", "ol.source.XYZ"]); +goog.addDependency("../src/ol/source/tileimagesource.js", ["ol.source.TileImage"], ["goog.asserts", "ol.Attribution", "ol.Extent", "ol.ImageTile", "ol.Tile", "ol.TileCache", "ol.TileCoord", "ol.TileLoadFunctionType", "ol.TileState", "ol.TileUrlFunction", "ol.TileUrlFunctionType", "ol.source.Tile", "ol.tilegrid.TileGrid"]); +goog.addDependency("../src/ol/source/tilejsonsource.js", ["ol.source.TileJSON", "ol.tilejson"], ["goog.asserts", "goog.net.jsloader", "ol.Attribution", "ol.TileRange", "ol.TileUrlFunction", "ol.extent", "ol.proj", "ol.source.State", "ol.source.TileImage", "ol.tilegrid.XYZ"]); +goog.addDependency("../src/ol/source/tilesource.js", ["ol.source.Tile", "ol.source.TileOptions"], ["goog.functions", "ol.Attribution", "ol.Extent", "ol.Tile", "ol.TileCoord", "ol.TileRange", "ol.source.Source", "ol.tilegrid.TileGrid"]); +goog.addDependency("../src/ol/source/tilewmssource.js", ["ol.source.TileWMS"], ["goog.array", "goog.asserts", "goog.math", "goog.object", "goog.string", "goog.uri.utils", "ol.TileCoord", "ol.TileUrlFunction", "ol.extent", "ol.source.TileImage", "ol.source.wms", "ol.source.wms.ServerType"]); +goog.addDependency("../src/ol/source/topojsonsource.js", ["ol.source.TopoJSON"], ["ol.format.TopoJSON", "ol.source.VectorFile"]); +goog.addDependency("../src/ol/source/vectorfilesource.js", ["ol.source.VectorFile"], ["goog.asserts", "goog.dispose", "goog.events", "goog.net.EventType", "goog.net.XhrIo", "goog.net.XhrIo.ResponseType", "goog.userAgent", "ol.BrowserFeature", "ol.format.FormatType", "ol.proj", "ol.source.State", "ol.source.Vector", "ol.xml"]); +goog.addDependency("../src/ol/source/vectorsource.js", ["ol.source.Vector", "ol.source.VectorEvent", "ol.source.VectorEventType"], ["goog.array", "goog.asserts", "goog.events", "goog.events.Event", "goog.events.EventType", "goog.object", "ol.source.Source", "ol.structs.RBush"]); +goog.addDependency("../src/ol/source/wmssource.js", ["ol.source.wms", "ol.source.wms.ServerType"], []); +goog.addDependency("../src/ol/source/wmtssource.js", ["ol.source.WMTS", "ol.source.WMTSRequestEncoding"], ["goog.array", "goog.asserts", "goog.math", "goog.object", "goog.uri.utils", "ol.TileCoord", "ol.TileUrlFunction", "ol.TileUrlFunctionType", "ol.extent", "ol.proj", "ol.source.TileImage", "ol.tilegrid.WMTS"]); +goog.addDependency("../src/ol/source/xyzsource.js", ["ol.source.XYZ"], ["ol.Attribution", "ol.TileUrlFunction", "ol.TileUrlFunctionType", "ol.proj", "ol.source.TileImage", "ol.tilegrid.XYZ"]); +goog.addDependency("../src/ol/source/zoomifysource.js", ["ol.source.Zoomify"], ["goog.array", "goog.asserts", "goog.dom", "goog.dom.TagName", "ol.ImageTile", "ol.TileCoord", "ol.TileState", "ol.TileUrlFunction", "ol.proj", "ol.source.TileImage", "ol.tilegrid.Zoomify"]); +goog.addDependency("../src/ol/sphere/normal.js", ["ol.sphere.NORMAL"], ["ol.Sphere"]); +goog.addDependency("../src/ol/sphere/sphere.js", ["ol.Sphere"], ["goog.math"]); +goog.addDependency("../src/ol/sphere/wgs84sphere.js", ["ol.sphere.WGS84"], ["ol.Sphere"]); +goog.addDependency("../src/ol/structs/buffer.js", ["ol.structs.Buffer"], ["goog.array", "goog.asserts", "goog.webgl", "ol.structs.IntegerSet"]); +goog.addDependency("../src/ol/structs/integerset.js", ["ol.structs.IntegerSet"], ["goog.asserts"]); +goog.addDependency("../src/ol/structs/lrucache.js", ["ol.structs.LRUCache"], ["goog.asserts", "goog.object"]); +goog.addDependency("../src/ol/structs/priorityqueue.js", ["ol.structs.PriorityQueue"], ["goog.asserts", "goog.object"]); +goog.addDependency("../src/ol/structs/rbush.js", ["ol.structs.RBush"], ["goog.array", "goog.asserts", "goog.object", "ol.extent"]); +goog.addDependency("../src/ol/style/circlestyle.js", ["ol.style.Circle"], ["goog.dom", "goog.dom.TagName", "ol.color", "ol.render.canvas", "ol.style.Fill", "ol.style.Image", "ol.style.ImageState", "ol.style.Stroke"]); +goog.addDependency("../src/ol/style/fillstyle.js", ["ol.style.Fill"], ["ol.color"]); +goog.addDependency("../src/ol/style/iconstyle.js", ["ol.style.Icon", "ol.style.IconAnchorOrigin", "ol.style.IconAnchorUnits", "ol.style.IconImageCache"], ["goog.array", "goog.asserts", "goog.dom", "goog.dom.TagName", "goog.events", "goog.events.EventTarget", "goog.events.EventType", "ol.style.Image", "ol.style.ImageState"]); +goog.addDependency("../src/ol/style/imagestyle.js", ["ol.style.Image", "ol.style.ImageState"], ["goog.array"]); +goog.addDependency("../src/ol/style/strokestyle.js", ["ol.style.Stroke"], ["ol.color"]); +goog.addDependency("../src/ol/style/style.js", ["ol.style.Style"], ["ol.style.Fill", "ol.style.Image"]); +goog.addDependency("../src/ol/style/textstyle.js", ["ol.style.Text"], []); +goog.addDependency("../src/ol/tile.js", ["ol.Tile", "ol.TileState"], ["goog.events", "goog.events.EventTarget", "goog.events.EventType", "ol.TileCoord"]); +goog.addDependency("../src/ol/tilecache.js", ["ol.TileCache"], ["goog.asserts", "ol.Tile", "ol.TileCoord", "ol.TileRange", "ol.structs.LRUCache"]); +goog.addDependency("../src/ol/tilecoord.js", ["ol.TileCoord"], ["goog.array", "goog.asserts"]); +goog.addDependency("../src/ol/tilegrid/tilegrid.js", ["ol.tilegrid.TileGrid"], ["goog.array", "goog.asserts", "ol.Coordinate", "ol.TileCoord", "ol.TileRange", "ol.array", "ol.extent", "ol.proj.METERS_PER_UNIT", "ol.proj.Projection", "ol.proj.Units"]); +goog.addDependency("../src/ol/tilegrid/wmtstilegrid.js", ["ol.tilegrid.WMTS"], ["goog.array", "goog.asserts", "ol.proj", "ol.tilegrid.TileGrid"]); +goog.addDependency("../src/ol/tilegrid/xyztilegrid.js", ["ol.tilegrid.XYZ"], ["goog.math", "ol.TileCoord", "ol.TileRange", "ol.proj", "ol.proj.EPSG3857", "ol.tilegrid.TileGrid"]); +goog.addDependency("../src/ol/tilegrid/zoomifytilegrid.js", ["ol.tilegrid.Zoomify"], ["goog.math", "ol.TileCoord", "ol.proj", "ol.tilegrid.TileGrid"]); +goog.addDependency("../src/ol/tileloadfunction.js", ["ol.TileLoadFunctionType"], []); +goog.addDependency("../src/ol/tilequeue.js", ["ol.TilePriorityFunction", "ol.TileQueue"], ["goog.events", "goog.events.EventType", "ol.Coordinate", "ol.Tile", "ol.structs.PriorityQueue"]); +goog.addDependency("../src/ol/tilerange.js", ["ol.TileRange"], ["goog.asserts", "ol.Size", "ol.TileCoord"]); +goog.addDependency("../src/ol/tileurlfunction.js", ["ol.TileUrlFunction", "ol.TileUrlFunctionType"], ["goog.array", "goog.math", "ol.TileCoord"]); +goog.addDependency("../src/ol/transformfunction.js", ["ol.TransformFunction"], []); +goog.addDependency("../src/ol/vec/mat4.js", ["ol.vec.Mat4"], ["goog.vec.Mat4"]); +goog.addDependency("../src/ol/view.js", ["ol.View", "ol.ViewHint"], ["goog.array", "goog.asserts", "ol.IView", "ol.Object"]); +goog.addDependency("../src/ol/view2d.js", ["ol.View2D", "ol.View2DProperty"], ["goog.asserts", "ol.CenterConstraint", "ol.Constraints", "ol.IView2D", "ol.IView3D", "ol.ResolutionConstraint", "ol.RotationConstraint", "ol.RotationConstraintType", "ol.Size", "ol.View", "ol.coordinate", "ol.extent", "ol.proj", "ol.proj.METERS_PER_UNIT", "ol.proj.Projection", "ol.proj.Units"]); +goog.addDependency("../src/ol/webgl/context.js", ["ol.webgl.Context"], ["goog.asserts", "goog.events", "goog.log", "goog.object", "ol.structs.Buffer", "ol.structs.IntegerSet", "ol.webgl.WebGLContextEventType"]); +goog.addDependency("../src/ol/webgl/shader.js", ["ol.webgl.shader"], ["goog.functions", "goog.webgl", "ol.webgl"]); +goog.addDependency("../src/ol/webgl/webgl.js", ["ol.webgl", "ol.webgl.WebGLContextEventType"], []); +goog.addDependency("../src/ol/xml.js", ["ol.xml"], ["goog.array", "goog.asserts", "goog.dom.NodeType", "goog.dom.xml", "goog.object", "goog.userAgent"]); +goog.addDependency("/closure/goog/a11y/aria/announcer.js", ["goog.a11y.aria.Announcer"], ["goog.Disposable", "goog.a11y.aria", "goog.a11y.aria.LivePriority", "goog.a11y.aria.State", "goog.dom", "goog.object"]); +goog.addDependency("/closure/goog/a11y/aria/aria.js", ["goog.a11y.aria"], ["goog.a11y.aria.Role", "goog.a11y.aria.State", "goog.a11y.aria.datatables", "goog.array", "goog.asserts", "goog.dom", "goog.dom.TagName", "goog.object", "goog.string"]); +goog.addDependency("/closure/goog/a11y/aria/attributes.js", ["goog.a11y.aria.AutoCompleteValues", "goog.a11y.aria.CheckedValues", "goog.a11y.aria.DropEffectValues", "goog.a11y.aria.ExpandedValues", "goog.a11y.aria.GrabbedValues", "goog.a11y.aria.InvalidValues", "goog.a11y.aria.LivePriority", "goog.a11y.aria.OrientationValues", "goog.a11y.aria.PressedValues", "goog.a11y.aria.RelevantValues", "goog.a11y.aria.SelectedValues", "goog.a11y.aria.SortValues", "goog.a11y.aria.State"], []); +goog.addDependency("/closure/goog/a11y/aria/datatables.js", ["goog.a11y.aria.datatables"], ["goog.a11y.aria.State", "goog.object"]); +goog.addDependency("/closure/goog/a11y/aria/roles.js", ["goog.a11y.aria.Role"], []); +goog.addDependency("/closure/goog/array/array.js", ["goog.array", "goog.array.ArrayLike"], ["goog.asserts"]); +goog.addDependency("/closure/goog/asserts/asserts.js", ["goog.asserts", "goog.asserts.AssertionError"], ["goog.debug.Error", "goog.string"]); +goog.addDependency("/closure/goog/async/animationdelay.js", ["goog.async.AnimationDelay"], ["goog.Disposable", "goog.events", "goog.functions"]); +goog.addDependency("/closure/goog/async/conditionaldelay.js", ["goog.async.ConditionalDelay"], ["goog.Disposable", "goog.async.Delay"]); +goog.addDependency("/closure/goog/async/delay.js", ["goog.Delay", "goog.async.Delay"], ["goog.Disposable", "goog.Timer"]); +goog.addDependency("/closure/goog/async/nexttick.js", ["goog.async.nextTick"], ["goog.debug.entryPointRegistry", "goog.functions"]); +goog.addDependency("/closure/goog/async/throttle.js", ["goog.Throttle", "goog.async.Throttle"], ["goog.Disposable", "goog.Timer"]); +goog.addDependency("/closure/goog/base.js", [], []); +goog.addDependency("/closure/goog/bootstrap/nodejs.js", [], []); +goog.addDependency("/closure/goog/bootstrap/webworkers.js", [], []); +goog.addDependency("/closure/goog/color/alpha.js", ["goog.color.alpha"], ["goog.color"]); +goog.addDependency("/closure/goog/color/color.js", ["goog.color"], ["goog.color.names", "goog.math"]); +goog.addDependency("/closure/goog/color/names.js", ["goog.color.names"], []); +goog.addDependency("/closure/goog/crypt/aes.js", ["goog.crypt.Aes"], ["goog.asserts", "goog.crypt.BlockCipher"]); +goog.addDependency("/closure/goog/crypt/arc4.js", ["goog.crypt.Arc4"], ["goog.asserts"]); +goog.addDependency("/closure/goog/crypt/base64.js", ["goog.crypt.base64"], ["goog.crypt", "goog.userAgent"]); +goog.addDependency("/closure/goog/crypt/basen.js", ["goog.crypt.baseN"], []); +goog.addDependency("/closure/goog/crypt/blobhasher.js", ["goog.crypt.BlobHasher", "goog.crypt.BlobHasher.EventType"], ["goog.asserts", "goog.crypt", "goog.crypt.Hash", "goog.events.EventTarget", "goog.fs", "goog.log"]); +goog.addDependency("/closure/goog/crypt/blockcipher.js", ["goog.crypt.BlockCipher"], []); +goog.addDependency("/closure/goog/crypt/cbc.js", ["goog.crypt.Cbc"], ["goog.array", "goog.crypt"]); +goog.addDependency("/closure/goog/crypt/cbc_test.js", ["goog.crypt.CbcTest"], ["goog.crypt", "goog.crypt.Aes", "goog.crypt.Cbc", "goog.testing.jsunit"]); +goog.addDependency("/closure/goog/crypt/crypt.js", ["goog.crypt"], ["goog.array"]); +goog.addDependency("/closure/goog/crypt/hash.js", ["goog.crypt.Hash"], []); +goog.addDependency("/closure/goog/crypt/hash32.js", ["goog.crypt.hash32"], ["goog.crypt"]); +goog.addDependency("/closure/goog/crypt/hashtester.js", ["goog.crypt.hashTester"], ["goog.array", "goog.crypt", "goog.testing.PerformanceTable", "goog.testing.PseudoRandom", "goog.testing.asserts"]); +goog.addDependency("/closure/goog/crypt/hmac.js", ["goog.crypt.Hmac"], ["goog.asserts", "goog.crypt.Hash"]); +goog.addDependency("/closure/goog/crypt/md5.js", ["goog.crypt.Md5"], ["goog.crypt.Hash"]); +goog.addDependency("/closure/goog/crypt/pbkdf2.js", ["goog.crypt.pbkdf2"], ["goog.asserts", "goog.crypt", "goog.crypt.Hmac", "goog.crypt.Sha1"]); +goog.addDependency("/closure/goog/crypt/sha1.js", ["goog.crypt.Sha1"], ["goog.crypt.Hash"]); +goog.addDependency("/closure/goog/crypt/sha2.js", ["goog.crypt.Sha2"], ["goog.array", "goog.asserts", "goog.crypt.Hash"]); +goog.addDependency("/closure/goog/crypt/sha224.js", ["goog.crypt.Sha224"], ["goog.crypt.Sha2"]); +goog.addDependency("/closure/goog/crypt/sha256.js", ["goog.crypt.Sha256"], ["goog.crypt.Sha2"]); +goog.addDependency("/closure/goog/cssom/cssom.js", ["goog.cssom", "goog.cssom.CssRuleType"], ["goog.array", "goog.dom"]); +goog.addDependency("/closure/goog/cssom/iframe/style.js", ["goog.cssom.iframe.style"], ["goog.cssom", "goog.dom", "goog.dom.NodeType", "goog.dom.TagName", "goog.dom.classes", "goog.string", "goog.style", "goog.userAgent"]); +goog.addDependency("/closure/goog/datasource/datamanager.js", ["goog.ds.DataManager"], ["goog.ds.BasicNodeList", "goog.ds.DataNode", "goog.ds.Expr", "goog.string", "goog.structs", "goog.structs.Map"]); +goog.addDependency("/closure/goog/datasource/datasource.js", ["goog.ds.BaseDataNode", "goog.ds.BasicNodeList", "goog.ds.DataNode", "goog.ds.DataNodeList", "goog.ds.EmptyNodeList", "goog.ds.LoadState", "goog.ds.SortedNodeList", "goog.ds.Util", "goog.ds.logger"], ["goog.array", "goog.log"]); +goog.addDependency("/closure/goog/datasource/expr.js", ["goog.ds.Expr"], ["goog.ds.BasicNodeList", "goog.ds.EmptyNodeList", "goog.string"]); +goog.addDependency("/closure/goog/datasource/fastdatanode.js", ["goog.ds.AbstractFastDataNode", "goog.ds.FastDataNode", "goog.ds.FastListNode", "goog.ds.PrimitiveFastDataNode"], ["goog.ds.DataManager", "goog.ds.EmptyNodeList", "goog.string"]); +goog.addDependency("/closure/goog/datasource/jsdatasource.js", ["goog.ds.JsDataSource", "goog.ds.JsPropertyDataSource"], ["goog.ds.BaseDataNode", "goog.ds.BasicNodeList", "goog.ds.DataManager", "goog.ds.EmptyNodeList", "goog.ds.LoadState"]); +goog.addDependency("/closure/goog/datasource/jsondatasource.js", ["goog.ds.JsonDataSource"], ["goog.Uri", "goog.dom", "goog.ds.DataManager", "goog.ds.JsDataSource", "goog.ds.LoadState", "goog.ds.logger"]); +goog.addDependency("/closure/goog/datasource/jsxmlhttpdatasource.js", ["goog.ds.JsXmlHttpDataSource"], ["goog.Uri", "goog.ds.DataManager", "goog.ds.FastDataNode", "goog.ds.LoadState", "goog.ds.logger", "goog.events", "goog.log", "goog.net.EventType", "goog.net.XhrIo"]); +goog.addDependency("/closure/goog/datasource/xmldatasource.js", ["goog.ds.XmlDataSource", "goog.ds.XmlHttpDataSource"], ["goog.Uri", "goog.dom.NodeType", "goog.dom.xml", "goog.ds.BasicNodeList", "goog.ds.DataManager", "goog.ds.LoadState", "goog.ds.logger", "goog.net.XhrIo", "goog.string"]); +goog.addDependency("/closure/goog/date/date.js", ["goog.date", "goog.date.Date", "goog.date.DateTime", "goog.date.Interval", "goog.date.month", "goog.date.weekDay"], ["goog.asserts", "goog.date.DateLike", "goog.i18n.DateTimeSymbols", "goog.string"]); +goog.addDependency("/closure/goog/date/datelike.js", ["goog.date.DateLike"], []); +goog.addDependency("/closure/goog/date/daterange.js", ["goog.date.DateRange", "goog.date.DateRange.Iterator", "goog.date.DateRange.StandardDateRangeKeys"], ["goog.date.Date", "goog.date.Interval", "goog.iter.Iterator", "goog.iter.StopIteration"]); +goog.addDependency("/closure/goog/date/relative.js", ["goog.date.relative"], ["goog.i18n.DateTimeFormat"]); +goog.addDependency("/closure/goog/date/utcdatetime.js", ["goog.date.UtcDateTime"], ["goog.date", "goog.date.Date", "goog.date.DateTime", "goog.date.Interval"]); +goog.addDependency("/closure/goog/db/cursor.js", ["goog.db.Cursor"], ["goog.async.Deferred", "goog.db.Error", "goog.debug", "goog.events.EventTarget"]); +goog.addDependency("/closure/goog/db/db.js", ["goog.db"], ["goog.async.Deferred", "goog.db.Error", "goog.db.IndexedDb", "goog.db.Transaction"]); +goog.addDependency("/closure/goog/db/error.js", ["goog.db.Error", "goog.db.Error.ErrorCode", "goog.db.Error.ErrorName", "goog.db.Error.VersionChangeBlockedError"], ["goog.debug.Error"]); +goog.addDependency("/closure/goog/db/index.js", ["goog.db.Index"], ["goog.async.Deferred", "goog.db.Cursor", "goog.db.Error", "goog.debug"]); +goog.addDependency("/closure/goog/db/indexeddb.js", ["goog.db.IndexedDb"], ["goog.async.Deferred", "goog.db.Error", "goog.db.Error.VersionChangeBlockedError", "goog.db.ObjectStore", "goog.db.Transaction", "goog.db.Transaction.TransactionMode", "goog.events.Event", "goog.events.EventHandler", "goog.events.EventTarget"]); +goog.addDependency("/closure/goog/db/keyrange.js", ["goog.db.KeyRange"], []); +goog.addDependency("/closure/goog/db/objectstore.js", ["goog.db.ObjectStore"], ["goog.async.Deferred", "goog.db.Cursor", "goog.db.Error", "goog.db.Index", "goog.debug", "goog.events"]); +goog.addDependency("/closure/goog/db/transaction.js", ["goog.db.Transaction", "goog.db.Transaction.TransactionMode"], ["goog.async.Deferred", "goog.db.Error", "goog.db.ObjectStore", "goog.events.EventHandler", "goog.events.EventTarget"]); +goog.addDependency("/closure/goog/debug/console.js", ["goog.debug.Console"], ["goog.debug.LogManager", "goog.debug.Logger.Level", "goog.debug.TextFormatter"]); +goog.addDependency("/closure/goog/debug/debug.js", ["goog.debug"], ["goog.array", "goog.string", "goog.structs.Set", "goog.userAgent"]); +goog.addDependency("/closure/goog/debug/debugwindow.js", ["goog.debug.DebugWindow"], ["goog.debug.HtmlFormatter", "goog.debug.LogManager", "goog.debug.Logger", "goog.structs.CircularBuffer", "goog.userAgent"]); +goog.addDependency("/closure/goog/debug/devcss/devcss.js", ["goog.debug.DevCss", "goog.debug.DevCss.UserAgent"], ["goog.cssom", "goog.dom.classes", "goog.events", "goog.events.EventType", "goog.string", "goog.userAgent"]); +goog.addDependency("/closure/goog/debug/devcss/devcssrunner.js", ["goog.debug.devCssRunner"], ["goog.debug.DevCss"]); +goog.addDependency("/closure/goog/debug/divconsole.js", ["goog.debug.DivConsole"], ["goog.debug.HtmlFormatter", "goog.debug.LogManager", "goog.style"]); +goog.addDependency("/closure/goog/debug/entrypointregistry.js", ["goog.debug.EntryPointMonitor", "goog.debug.entryPointRegistry"], ["goog.asserts"]); +goog.addDependency("/closure/goog/debug/error.js", ["goog.debug.Error"], []); +goog.addDependency("/closure/goog/debug/errorhandler.js", ["goog.debug.ErrorHandler", "goog.debug.ErrorHandler.ProtectedFunctionError"], ["goog.asserts", "goog.debug", "goog.debug.EntryPointMonitor", "goog.debug.Trace"]); +goog.addDependency("/closure/goog/debug/errorhandlerweakdep.js", ["goog.debug.errorHandlerWeakDep"], []); +goog.addDependency("/closure/goog/debug/errorreporter.js", ["goog.debug.ErrorReporter", "goog.debug.ErrorReporter.ExceptionEvent"], ["goog.asserts", "goog.debug", "goog.debug.ErrorHandler", "goog.debug.entryPointRegistry", "goog.events", "goog.events.Event", "goog.events.EventTarget", "goog.log", "goog.net.XhrIo", "goog.object", "goog.string", "goog.uri.utils", "goog.userAgent"]); +goog.addDependency("/closure/goog/debug/fancywindow.js", ["goog.debug.FancyWindow"], ["goog.debug.DebugWindow", "goog.debug.LogManager", "goog.debug.Logger", "goog.dom.DomHelper", "goog.object", "goog.string", "goog.userAgent"]); +goog.addDependency("/closure/goog/debug/formatter.js", ["goog.debug.Formatter", "goog.debug.HtmlFormatter", "goog.debug.TextFormatter"], ["goog.debug.RelativeTimeProvider", "goog.string"]); +goog.addDependency("/closure/goog/debug/fpsdisplay.js", ["goog.debug.FpsDisplay"], ["goog.asserts", "goog.async.AnimationDelay", "goog.ui.Component"]); +goog.addDependency("/closure/goog/debug/gcdiagnostics.js", ["goog.debug.GcDiagnostics"], ["goog.debug.Trace", "goog.log", "goog.userAgent"]); +goog.addDependency("/closure/goog/debug/logbuffer.js", ["goog.debug.LogBuffer"], ["goog.asserts", "goog.debug.LogRecord"]); +goog.addDependency("/closure/goog/debug/logger.js", ["goog.debug.LogManager", "goog.debug.Logger", "goog.debug.Logger.Level"], ["goog.array", "goog.asserts", "goog.debug", "goog.debug.LogBuffer", "goog.debug.LogRecord"]); +goog.addDependency("/closure/goog/debug/logrecord.js", ["goog.debug.LogRecord"], []); +goog.addDependency("/closure/goog/debug/logrecordserializer.js", ["goog.debug.logRecordSerializer"], ["goog.debug.LogRecord", "goog.debug.Logger.Level", "goog.json", "goog.object"]); +goog.addDependency("/closure/goog/debug/reflect.js", ["goog.debug.reflect"], []); +goog.addDependency("/closure/goog/debug/relativetimeprovider.js", ["goog.debug.RelativeTimeProvider"], []); +goog.addDependency("/closure/goog/debug/tracer.js", ["goog.debug.Trace"], ["goog.array", "goog.iter", "goog.log", "goog.structs.Map", "goog.structs.SimplePool"]); +goog.addDependency("/closure/goog/demos/autocompleteremotedata.js", [], []); +goog.addDependency("/closure/goog/demos/autocompleterichremotedata.js", [], []); +goog.addDependency("/closure/goog/demos/editor/equationeditor.js", ["goog.demos.editor.EquationEditor"], ["goog.ui.equation.EquationEditorDialog"]); +goog.addDependency("/closure/goog/demos/editor/helloworld.js", ["goog.demos.editor.HelloWorld"], ["goog.dom", "goog.dom.TagName", "goog.editor.Plugin"]); +goog.addDependency("/closure/goog/demos/editor/helloworlddialog.js", ["goog.demos.editor.HelloWorldDialog", "goog.demos.editor.HelloWorldDialog.OkEvent"], ["goog.dom.TagName", "goog.events.Event", "goog.string", "goog.ui.editor.AbstractDialog"]); +goog.addDependency("/closure/goog/demos/editor/helloworlddialogplugin.js", ["goog.demos.editor.HelloWorldDialogPlugin", "goog.demos.editor.HelloWorldDialogPlugin.Command"], ["goog.demos.editor.HelloWorldDialog", "goog.dom.TagName", "goog.editor.plugins.AbstractDialogPlugin", "goog.editor.range", "goog.functions", "goog.ui.editor.AbstractDialog"]); +goog.addDependency("/closure/goog/demos/graphics/tigerdata.js", [], []); +goog.addDependency("/closure/goog/demos/samplecomponent.js", ["goog.demos.SampleComponent"], ["goog.dom", "goog.dom.classes", "goog.events.EventType", "goog.events.KeyCodes", "goog.events.KeyHandler", "goog.ui.Component"]); +goog.addDependency("/closure/goog/demos/tree/testdata.js", [], []); +goog.addDependency("/closure/goog/demos/xpc/xpcdemo.js", [], ["goog.Uri", "goog.dom", "goog.events", "goog.events.EventType", "goog.json", "goog.log", "goog.net.xpc.CfgFields", "goog.net.xpc.CrossPageChannel"]); +goog.addDependency("/closure/goog/disposable/disposable.js", ["goog.Disposable", "goog.dispose"], ["goog.disposable.IDisposable"]); +goog.addDependency("/closure/goog/disposable/idisposable.js", ["goog.disposable.IDisposable"], []); +goog.addDependency("/closure/goog/dom/a11y.js", ["goog.dom.a11y", "goog.dom.a11y.Announcer", "goog.dom.a11y.LivePriority", "goog.dom.a11y.Role", "goog.dom.a11y.State"], ["goog.a11y.aria", "goog.a11y.aria.Announcer", "goog.a11y.aria.LivePriority", "goog.a11y.aria.Role", "goog.a11y.aria.State"]); +goog.addDependency("/closure/goog/dom/abstractmultirange.js", ["goog.dom.AbstractMultiRange"], ["goog.array", "goog.dom", "goog.dom.AbstractRange"]); +goog.addDependency("/closure/goog/dom/abstractrange.js", ["goog.dom.AbstractRange", "goog.dom.RangeIterator", "goog.dom.RangeType"], ["goog.dom", "goog.dom.NodeType", "goog.dom.SavedCaretRange", "goog.dom.TagIterator", "goog.userAgent"]); +goog.addDependency("/closure/goog/dom/annotate.js", ["goog.dom.annotate"], ["goog.array", "goog.dom", "goog.dom.NodeType", "goog.string"]); +goog.addDependency("/closure/goog/dom/browserfeature.js", ["goog.dom.BrowserFeature"], ["goog.userAgent"]); +goog.addDependency("/closure/goog/dom/browserrange/abstractrange.js", ["goog.dom.browserrange.AbstractRange"], ["goog.array", "goog.asserts", "goog.dom", "goog.dom.NodeType", "goog.dom.RangeEndpoint", "goog.dom.TagName", "goog.dom.TextRangeIterator", "goog.iter", "goog.math.Coordinate", "goog.string", "goog.string.StringBuffer", "goog.userAgent"]); +goog.addDependency("/closure/goog/dom/browserrange/browserrange.js", ["goog.dom.browserrange", "goog.dom.browserrange.Error"], ["goog.dom", "goog.dom.NodeType", "goog.dom.browserrange.GeckoRange", "goog.dom.browserrange.IeRange", "goog.dom.browserrange.OperaRange", "goog.dom.browserrange.W3cRange", "goog.dom.browserrange.WebKitRange", "goog.userAgent"]); +goog.addDependency("/closure/goog/dom/browserrange/geckorange.js", ["goog.dom.browserrange.GeckoRange"], ["goog.dom.browserrange.W3cRange"]); +goog.addDependency("/closure/goog/dom/browserrange/ierange.js", ["goog.dom.browserrange.IeRange"], ["goog.array", "goog.dom", "goog.dom.NodeType", "goog.dom.RangeEndpoint", "goog.dom.TagName", "goog.dom.browserrange.AbstractRange", "goog.log", "goog.string"]); +goog.addDependency("/closure/goog/dom/browserrange/operarange.js", ["goog.dom.browserrange.OperaRange"], ["goog.dom.browserrange.W3cRange"]); +goog.addDependency("/closure/goog/dom/browserrange/w3crange.js", ["goog.dom.browserrange.W3cRange"], ["goog.dom", "goog.dom.NodeType", "goog.dom.RangeEndpoint", "goog.dom.browserrange.AbstractRange", "goog.string"]); +goog.addDependency("/closure/goog/dom/browserrange/webkitrange.js", ["goog.dom.browserrange.WebKitRange"], ["goog.dom.RangeEndpoint", "goog.dom.browserrange.W3cRange", "goog.userAgent"]); +goog.addDependency("/closure/goog/dom/bufferedviewportsizemonitor.js", ["goog.dom.BufferedViewportSizeMonitor"], ["goog.asserts", "goog.async.Delay", "goog.events", "goog.events.EventTarget", "goog.events.EventType"]); +goog.addDependency("/closure/goog/dom/bufferedviewportsizemonitor_test.js", ["goog.dom.BufferedViewportSizeMonitorTest"], ["goog.dom.BufferedViewportSizeMonitor", "goog.dom.ViewportSizeMonitor", "goog.events", "goog.events.EventType", "goog.math.Size", "goog.testing.MockClock", "goog.testing.events", "goog.testing.events.Event", "goog.testing.jsunit"]); +goog.addDependency("/closure/goog/dom/classes.js", ["goog.dom.classes"], ["goog.array"]); +goog.addDependency("/closure/goog/dom/classes_test.js", ["goog.dom.classes_test"], ["goog.dom", "goog.dom.classes", "goog.testing.jsunit"]); +goog.addDependency("/closure/goog/dom/classlist.js", ["goog.dom.classlist"], ["goog.array", "goog.asserts"]); +goog.addDependency("/closure/goog/dom/classlist_test.js", ["goog.dom.classlist_test"], ["goog.dom", "goog.dom.classlist", "goog.testing.jsunit"]); +goog.addDependency("/closure/goog/dom/controlrange.js", ["goog.dom.ControlRange", "goog.dom.ControlRangeIterator"], ["goog.array", "goog.dom", "goog.dom.AbstractMultiRange", "goog.dom.AbstractRange", "goog.dom.RangeIterator", "goog.dom.RangeType", "goog.dom.SavedRange", "goog.dom.TagWalkType", "goog.dom.TextRange", "goog.iter.StopIteration", "goog.userAgent"]); +goog.addDependency("/closure/goog/dom/dataset.js", ["goog.dom.dataset"], ["goog.string"]); +goog.addDependency("/closure/goog/dom/dom.js", ["goog.dom", "goog.dom.Appendable", "goog.dom.DomHelper", "goog.dom.NodeType"], ["goog.array", "goog.dom.BrowserFeature", "goog.dom.TagName", "goog.dom.classes", "goog.math.Coordinate", "goog.math.Size", "goog.object", "goog.string", "goog.userAgent"]); +goog.addDependency("/closure/goog/dom/dom_test.js", ["goog.dom.dom_test"], ["goog.dom", "goog.dom.BrowserFeature", "goog.dom.DomHelper", "goog.dom.NodeType", "goog.dom.TagName", "goog.object", "goog.string.Unicode", "goog.testing.asserts", "goog.userAgent", "goog.userAgent.product", "goog.userAgent.product.isVersion"]); +goog.addDependency("/closure/goog/dom/fontsizemonitor.js", ["goog.dom.FontSizeMonitor", "goog.dom.FontSizeMonitor.EventType"], ["goog.dom", "goog.events", "goog.events.EventTarget", "goog.events.EventType", "goog.userAgent"]); +goog.addDependency("/closure/goog/dom/forms.js", ["goog.dom.forms"], ["goog.structs.Map"]); +goog.addDependency("/closure/goog/dom/fullscreen.js", ["goog.dom.fullscreen", "goog.dom.fullscreen.EventType"], ["goog.dom", "goog.userAgent", "goog.userAgent.product"]); +goog.addDependency("/closure/goog/dom/iframe.js", ["goog.dom.iframe"], ["goog.dom", "goog.userAgent"]); +goog.addDependency("/closure/goog/dom/iter.js", ["goog.dom.iter.AncestorIterator", "goog.dom.iter.ChildIterator", "goog.dom.iter.SiblingIterator"], ["goog.iter.Iterator", "goog.iter.StopIteration"]); +goog.addDependency("/closure/goog/dom/multirange.js", ["goog.dom.MultiRange", "goog.dom.MultiRangeIterator"], ["goog.array", "goog.dom.AbstractMultiRange", "goog.dom.AbstractRange", "goog.dom.RangeIterator", "goog.dom.RangeType", "goog.dom.SavedRange", "goog.dom.TextRange", "goog.iter.StopIteration", "goog.log"]); +goog.addDependency("/closure/goog/dom/nodeiterator.js", ["goog.dom.NodeIterator"], ["goog.dom.TagIterator"]); +goog.addDependency("/closure/goog/dom/nodeoffset.js", ["goog.dom.NodeOffset"], ["goog.Disposable", "goog.dom.TagName"]); +goog.addDependency("/closure/goog/dom/pattern/abstractpattern.js", ["goog.dom.pattern.AbstractPattern"], ["goog.dom.pattern.MatchType"]); +goog.addDependency("/closure/goog/dom/pattern/allchildren.js", ["goog.dom.pattern.AllChildren"], ["goog.dom.pattern.AbstractPattern", "goog.dom.pattern.MatchType"]); +goog.addDependency("/closure/goog/dom/pattern/callback/callback.js", ["goog.dom.pattern.callback"], ["goog.dom", "goog.dom.TagWalkType", "goog.iter"]); +goog.addDependency("/closure/goog/dom/pattern/callback/counter.js", ["goog.dom.pattern.callback.Counter"], []); +goog.addDependency("/closure/goog/dom/pattern/callback/test.js", ["goog.dom.pattern.callback.Test"], ["goog.iter.StopIteration"]); +goog.addDependency("/closure/goog/dom/pattern/childmatches.js", ["goog.dom.pattern.ChildMatches"], ["goog.dom.pattern.AllChildren", "goog.dom.pattern.MatchType"]); +goog.addDependency("/closure/goog/dom/pattern/endtag.js", ["goog.dom.pattern.EndTag"], ["goog.dom.TagWalkType", "goog.dom.pattern.Tag"]); +goog.addDependency("/closure/goog/dom/pattern/fulltag.js", ["goog.dom.pattern.FullTag"], ["goog.dom.pattern.MatchType", "goog.dom.pattern.StartTag", "goog.dom.pattern.Tag"]); +goog.addDependency("/closure/goog/dom/pattern/matcher.js", ["goog.dom.pattern.Matcher"], ["goog.dom.TagIterator", "goog.dom.pattern.MatchType", "goog.iter"]); +goog.addDependency("/closure/goog/dom/pattern/nodetype.js", ["goog.dom.pattern.NodeType"], ["goog.dom.pattern.AbstractPattern", "goog.dom.pattern.MatchType"]); +goog.addDependency("/closure/goog/dom/pattern/pattern.js", ["goog.dom.pattern", "goog.dom.pattern.MatchType"], []); +goog.addDependency("/closure/goog/dom/pattern/repeat.js", ["goog.dom.pattern.Repeat"], ["goog.dom.NodeType", "goog.dom.pattern.AbstractPattern", "goog.dom.pattern.MatchType"]); +goog.addDependency("/closure/goog/dom/pattern/sequence.js", ["goog.dom.pattern.Sequence"], ["goog.dom.NodeType", "goog.dom.pattern.AbstractPattern", "goog.dom.pattern.MatchType"]); +goog.addDependency("/closure/goog/dom/pattern/starttag.js", ["goog.dom.pattern.StartTag"], ["goog.dom.TagWalkType", "goog.dom.pattern.Tag"]); +goog.addDependency("/closure/goog/dom/pattern/tag.js", ["goog.dom.pattern.Tag"], ["goog.dom.pattern", "goog.dom.pattern.AbstractPattern", "goog.dom.pattern.MatchType", "goog.object"]); +goog.addDependency("/closure/goog/dom/pattern/text.js", ["goog.dom.pattern.Text"], ["goog.dom.NodeType", "goog.dom.pattern", "goog.dom.pattern.AbstractPattern", "goog.dom.pattern.MatchType"]); +goog.addDependency("/closure/goog/dom/range.js", ["goog.dom.Range"], ["goog.dom", "goog.dom.AbstractRange", "goog.dom.ControlRange", "goog.dom.MultiRange", "goog.dom.NodeType", "goog.dom.TextRange", "goog.userAgent"]); +goog.addDependency("/closure/goog/dom/rangeendpoint.js", ["goog.dom.RangeEndpoint"], []); +goog.addDependency("/closure/goog/dom/savedcaretrange.js", ["goog.dom.SavedCaretRange"], ["goog.array", "goog.dom", "goog.dom.SavedRange", "goog.dom.TagName", "goog.string"]); +goog.addDependency("/closure/goog/dom/savedrange.js", ["goog.dom.SavedRange"], ["goog.Disposable", "goog.log"]); +goog.addDependency("/closure/goog/dom/selection.js", ["goog.dom.selection"], ["goog.string", "goog.userAgent"]); +goog.addDependency("/closure/goog/dom/tagiterator.js", ["goog.dom.TagIterator", "goog.dom.TagWalkType"], ["goog.dom.NodeType", "goog.iter.Iterator", "goog.iter.StopIteration"]); +goog.addDependency("/closure/goog/dom/tagname.js", ["goog.dom.TagName"], []); +goog.addDependency("/closure/goog/dom/textrange.js", ["goog.dom.TextRange"], ["goog.array", "goog.dom", "goog.dom.AbstractRange", "goog.dom.RangeType", "goog.dom.SavedRange", "goog.dom.TagName", "goog.dom.TextRangeIterator", "goog.dom.browserrange", "goog.string", "goog.userAgent"]); +goog.addDependency("/closure/goog/dom/textrangeiterator.js", ["goog.dom.TextRangeIterator"], ["goog.array", "goog.dom.NodeType", "goog.dom.RangeIterator", "goog.dom.TagName", "goog.iter.StopIteration"]); +goog.addDependency("/closure/goog/dom/vendor.js", ["goog.dom.vendor"], ["goog.userAgent"]); +goog.addDependency("/closure/goog/dom/viewportsizemonitor.js", ["goog.dom.ViewportSizeMonitor"], ["goog.dom", "goog.events", "goog.events.EventTarget", "goog.events.EventType", "goog.math.Size"]); +goog.addDependency("/closure/goog/dom/xml.js", ["goog.dom.xml"], ["goog.dom", "goog.dom.NodeType"]); +goog.addDependency("/closure/goog/editor/browserfeature.js", ["goog.editor.BrowserFeature"], ["goog.editor.defines", "goog.userAgent", "goog.userAgent.product", "goog.userAgent.product.isVersion"]); +goog.addDependency("/closure/goog/editor/clicktoeditwrapper.js", ["goog.editor.ClickToEditWrapper"], ["goog.Disposable", "goog.asserts", "goog.dom", "goog.dom.Range", "goog.dom.TagName", "goog.editor.BrowserFeature", "goog.editor.Command", "goog.editor.Field.EventType", "goog.editor.range", "goog.events.BrowserEvent.MouseButton", "goog.events.EventHandler", "goog.events.EventType", "goog.log"]); +goog.addDependency("/closure/goog/editor/command.js", ["goog.editor.Command"], []); +goog.addDependency("/closure/goog/editor/contenteditablefield.js", ["goog.editor.ContentEditableField"], ["goog.asserts", "goog.editor.Field", "goog.log"]); +goog.addDependency("/closure/goog/editor/defines.js", ["goog.editor.defines"], []); +goog.addDependency("/closure/goog/editor/field.js", ["goog.editor.Field", "goog.editor.Field.EventType"], ["goog.a11y.aria", "goog.a11y.aria.Role", "goog.array", "goog.asserts", "goog.async.Delay", "goog.dom", "goog.dom.Range", "goog.dom.TagName", "goog.editor.BrowserFeature", "goog.editor.Command", "goog.editor.Plugin", "goog.editor.icontent", "goog.editor.icontent.FieldFormatInfo", "goog.editor.icontent.FieldStyleInfo", "goog.editor.node", "goog.editor.range", "goog.events", "goog.events.EventHandler", +"goog.events.EventTarget", "goog.events.EventType", "goog.events.KeyCodes", "goog.functions", "goog.log", "goog.string", "goog.string.Unicode", "goog.style", "goog.userAgent", "goog.userAgent.product"]); +goog.addDependency("/closure/goog/editor/field_test.js", ["goog.editor.field_test"], ["goog.dom", "goog.dom.Range", "goog.editor.BrowserFeature", "goog.editor.Field", "goog.editor.Plugin", "goog.editor.range", "goog.events", "goog.events.BrowserEvent", "goog.events.KeyCodes", "goog.functions", "goog.testing.LooseMock", "goog.testing.MockClock", "goog.testing.dom", "goog.testing.events", "goog.testing.events.Event", "goog.testing.recordFunction", "goog.userAgent"]); +goog.addDependency("/closure/goog/editor/focus.js", ["goog.editor.focus"], ["goog.dom.selection"]); +goog.addDependency("/closure/goog/editor/icontent.js", ["goog.editor.icontent", "goog.editor.icontent.FieldFormatInfo", "goog.editor.icontent.FieldStyleInfo"], ["goog.editor.BrowserFeature", "goog.style", "goog.userAgent"]); +goog.addDependency("/closure/goog/editor/link.js", ["goog.editor.Link"], ["goog.array", "goog.dom", "goog.dom.NodeType", "goog.dom.Range", "goog.editor.BrowserFeature", "goog.editor.Command", "goog.editor.node", "goog.editor.range", "goog.string", "goog.string.Unicode", "goog.uri.utils", "goog.uri.utils.ComponentIndex"]); +goog.addDependency("/closure/goog/editor/node.js", ["goog.editor.node"], ["goog.dom", "goog.dom.NodeType", "goog.dom.TagName", "goog.dom.iter.ChildIterator", "goog.dom.iter.SiblingIterator", "goog.iter", "goog.object", "goog.string", "goog.string.Unicode", "goog.userAgent"]); +goog.addDependency("/closure/goog/editor/plugin.js", ["goog.editor.Plugin"], ["goog.editor.Command", "goog.events.EventTarget", "goog.functions", "goog.log", "goog.object", "goog.reflect"]); +goog.addDependency("/closure/goog/editor/plugins/abstractbubbleplugin.js", ["goog.editor.plugins.AbstractBubblePlugin"], ["goog.dom", "goog.dom.NodeType", "goog.dom.Range", "goog.dom.TagName", "goog.editor.Plugin", "goog.editor.style", "goog.events", "goog.events.EventHandler", "goog.events.EventType", "goog.events.KeyCodes", "goog.events.actionEventWrapper", "goog.functions", "goog.string.Unicode", "goog.ui.Component.EventType", "goog.ui.editor.Bubble", "goog.userAgent"]); +goog.addDependency("/closure/goog/editor/plugins/abstractdialogplugin.js", ["goog.editor.plugins.AbstractDialogPlugin", "goog.editor.plugins.AbstractDialogPlugin.EventType"], ["goog.dom", "goog.dom.Range", "goog.editor.Field.EventType", "goog.editor.Plugin", "goog.editor.range", "goog.events", "goog.ui.editor.AbstractDialog.EventType"]); +goog.addDependency("/closure/goog/editor/plugins/abstracttabhandler.js", ["goog.editor.plugins.AbstractTabHandler"], ["goog.editor.Plugin", "goog.events.KeyCodes"]); +goog.addDependency("/closure/goog/editor/plugins/basictextformatter.js", ["goog.editor.plugins.BasicTextFormatter", "goog.editor.plugins.BasicTextFormatter.COMMAND"], ["goog.array", "goog.dom", "goog.dom.NodeType", "goog.dom.Range", "goog.dom.TagName", "goog.editor.BrowserFeature", "goog.editor.Command", "goog.editor.Link", "goog.editor.Plugin", "goog.editor.node", "goog.editor.range", "goog.editor.style", "goog.iter", "goog.iter.StopIteration", "goog.log", "goog.object", "goog.string", "goog.string.Unicode", +"goog.style", "goog.ui.editor.messages", "goog.userAgent"]); +goog.addDependency("/closure/goog/editor/plugins/blockquote.js", ["goog.editor.plugins.Blockquote"], ["goog.dom", "goog.dom.NodeType", "goog.dom.TagName", "goog.dom.classes", "goog.editor.BrowserFeature", "goog.editor.Command", "goog.editor.Plugin", "goog.editor.node", "goog.functions", "goog.log"]); +goog.addDependency("/closure/goog/editor/plugins/emoticons.js", ["goog.editor.plugins.Emoticons"], ["goog.dom.TagName", "goog.editor.Plugin", "goog.editor.range", "goog.functions", "goog.ui.emoji.Emoji", "goog.userAgent"]); +goog.addDependency("/closure/goog/editor/plugins/enterhandler.js", ["goog.editor.plugins.EnterHandler"], ["goog.dom", "goog.dom.NodeOffset", "goog.dom.NodeType", "goog.dom.Range", "goog.dom.TagName", "goog.editor.BrowserFeature", "goog.editor.Plugin", "goog.editor.node", "goog.editor.plugins.Blockquote", "goog.editor.range", "goog.editor.style", "goog.events.KeyCodes", "goog.functions", "goog.object", "goog.string", "goog.userAgent"]); +goog.addDependency("/closure/goog/editor/plugins/equationeditorbubble.js", ["goog.editor.plugins.equation.EquationBubble"], ["goog.dom", "goog.dom.TagName", "goog.editor.Command", "goog.editor.plugins.AbstractBubblePlugin", "goog.string.Unicode", "goog.ui.editor.Bubble", "goog.ui.equation.ImageRenderer"]); +goog.addDependency("/closure/goog/editor/plugins/equationeditorplugin.js", ["goog.editor.plugins.EquationEditorPlugin"], ["goog.dom", "goog.editor.Command", "goog.editor.plugins.AbstractDialogPlugin", "goog.editor.range", "goog.events", "goog.events.EventType", "goog.functions", "goog.log", "goog.ui.editor.AbstractDialog", "goog.ui.editor.EquationEditorDialog", "goog.ui.equation.ImageRenderer", "goog.ui.equation.PaletteManager"]); +goog.addDependency("/closure/goog/editor/plugins/firststrong.js", ["goog.editor.plugins.FirstStrong"], ["goog.dom.NodeType", "goog.dom.TagIterator", "goog.dom.TagName", "goog.editor.Command", "goog.editor.Plugin", "goog.editor.node", "goog.editor.range", "goog.i18n.bidi", "goog.i18n.uChar", "goog.iter", "goog.userAgent"]); +goog.addDependency("/closure/goog/editor/plugins/headerformatter.js", ["goog.editor.plugins.HeaderFormatter"], ["goog.editor.Command", "goog.editor.Plugin", "goog.userAgent"]); +goog.addDependency("/closure/goog/editor/plugins/linkbubble.js", ["goog.editor.plugins.LinkBubble", "goog.editor.plugins.LinkBubble.Action"], ["goog.array", "goog.dom", "goog.editor.BrowserFeature", "goog.editor.Command", "goog.editor.Link", "goog.editor.plugins.AbstractBubblePlugin", "goog.editor.range", "goog.string", "goog.style", "goog.ui.editor.messages", "goog.uri.utils", "goog.window"]); +goog.addDependency("/closure/goog/editor/plugins/linkdialogplugin.js", ["goog.editor.plugins.LinkDialogPlugin"], ["goog.array", "goog.dom", "goog.editor.Command", "goog.editor.plugins.AbstractDialogPlugin", "goog.events.EventHandler", "goog.functions", "goog.ui.editor.AbstractDialog.EventType", "goog.ui.editor.LinkDialog", "goog.ui.editor.LinkDialog.EventType", "goog.ui.editor.LinkDialog.OkEvent", "goog.uri.utils"]); +goog.addDependency("/closure/goog/editor/plugins/linkshortcutplugin.js", ["goog.editor.plugins.LinkShortcutPlugin"], ["goog.editor.Command", "goog.editor.Link", "goog.editor.Plugin", "goog.string"]); +goog.addDependency("/closure/goog/editor/plugins/listtabhandler.js", ["goog.editor.plugins.ListTabHandler"], ["goog.dom.TagName", "goog.editor.Command", "goog.editor.plugins.AbstractTabHandler"]); +goog.addDependency("/closure/goog/editor/plugins/loremipsum.js", ["goog.editor.plugins.LoremIpsum"], ["goog.asserts", "goog.dom", "goog.editor.Command", "goog.editor.Plugin", "goog.editor.node", "goog.functions"]); +goog.addDependency("/closure/goog/editor/plugins/removeformatting.js", ["goog.editor.plugins.RemoveFormatting"], ["goog.dom", "goog.dom.NodeType", "goog.dom.Range", "goog.dom.TagName", "goog.editor.BrowserFeature", "goog.editor.Plugin", "goog.editor.node", "goog.editor.range", "goog.string", "goog.userAgent"]); +goog.addDependency("/closure/goog/editor/plugins/spacestabhandler.js", ["goog.editor.plugins.SpacesTabHandler"], ["goog.dom", "goog.dom.TagName", "goog.editor.plugins.AbstractTabHandler", "goog.editor.range"]); +goog.addDependency("/closure/goog/editor/plugins/tableeditor.js", ["goog.editor.plugins.TableEditor"], ["goog.array", "goog.dom", "goog.dom.TagName", "goog.editor.Plugin", "goog.editor.Table", "goog.editor.node", "goog.editor.range", "goog.object"]); +goog.addDependency("/closure/goog/editor/plugins/tagonenterhandler.js", ["goog.editor.plugins.TagOnEnterHandler"], ["goog.dom", "goog.dom.NodeType", "goog.dom.Range", "goog.dom.TagName", "goog.editor.Command", "goog.editor.node", "goog.editor.plugins.EnterHandler", "goog.editor.range", "goog.editor.style", "goog.events.KeyCodes", "goog.string", "goog.style", "goog.userAgent"]); +goog.addDependency("/closure/goog/editor/plugins/undoredo.js", ["goog.editor.plugins.UndoRedo"], ["goog.dom", "goog.dom.NodeOffset", "goog.dom.Range", "goog.editor.BrowserFeature", "goog.editor.Command", "goog.editor.Field.EventType", "goog.editor.Plugin", "goog.editor.node", "goog.editor.plugins.UndoRedoManager", "goog.editor.plugins.UndoRedoState", "goog.events", "goog.events.EventHandler", "goog.log"]); +goog.addDependency("/closure/goog/editor/plugins/undoredomanager.js", ["goog.editor.plugins.UndoRedoManager", "goog.editor.plugins.UndoRedoManager.EventType"], ["goog.editor.plugins.UndoRedoState", "goog.events.EventTarget"]); +goog.addDependency("/closure/goog/editor/plugins/undoredostate.js", ["goog.editor.plugins.UndoRedoState"], ["goog.events.EventTarget"]); +goog.addDependency("/closure/goog/editor/range.js", ["goog.editor.range", "goog.editor.range.Point"], ["goog.array", "goog.dom", "goog.dom.NodeType", "goog.dom.Range", "goog.dom.RangeEndpoint", "goog.dom.SavedCaretRange", "goog.editor.node", "goog.editor.style", "goog.iter", "goog.userAgent"]); +goog.addDependency("/closure/goog/editor/seamlessfield.js", ["goog.editor.SeamlessField"], ["goog.cssom.iframe.style", "goog.dom", "goog.dom.Range", "goog.dom.TagName", "goog.editor.BrowserFeature", "goog.editor.Field", "goog.editor.icontent", "goog.editor.icontent.FieldFormatInfo", "goog.editor.icontent.FieldStyleInfo", "goog.editor.node", "goog.events", "goog.events.EventType", "goog.log", "goog.style"]); +goog.addDependency("/closure/goog/editor/seamlessfield_test.js", ["goog.editor.seamlessfield_test"], ["goog.dom", "goog.dom.DomHelper", "goog.dom.Range", "goog.editor.BrowserFeature", "goog.editor.Field", "goog.editor.SeamlessField", "goog.events", "goog.functions", "goog.style", "goog.testing.MockClock", "goog.testing.MockRange", "goog.testing.jsunit"]); +goog.addDependency("/closure/goog/editor/style.js", ["goog.editor.style"], ["goog.dom", "goog.dom.NodeType", "goog.editor.BrowserFeature", "goog.events.EventType", "goog.object", "goog.style", "goog.userAgent"]); +goog.addDependency("/closure/goog/editor/table.js", ["goog.editor.Table", "goog.editor.TableCell", "goog.editor.TableRow"], ["goog.dom", "goog.dom.DomHelper", "goog.dom.NodeType", "goog.dom.TagName", "goog.log", "goog.string.Unicode", "goog.style"]); +goog.addDependency("/closure/goog/events/actioneventwrapper.js", ["goog.events.actionEventWrapper"], ["goog.events", "goog.events.EventHandler", "goog.events.EventType", "goog.events.EventWrapper", "goog.events.KeyCodes"]); +goog.addDependency("/closure/goog/events/actionhandler.js", ["goog.events.ActionEvent", "goog.events.ActionHandler", "goog.events.ActionHandler.EventType", "goog.events.BeforeActionEvent"], ["goog.events", "goog.events.BrowserEvent", "goog.events.EventTarget", "goog.events.EventType", "goog.events.KeyCodes", "goog.userAgent"]); +goog.addDependency("/closure/goog/events/browserevent.js", ["goog.events.BrowserEvent", "goog.events.BrowserEvent.MouseButton"], ["goog.events.BrowserFeature", "goog.events.Event", "goog.events.EventType", "goog.reflect", "goog.userAgent"]); +goog.addDependency("/closure/goog/events/browserfeature.js", ["goog.events.BrowserFeature"], ["goog.userAgent"]); +goog.addDependency("/closure/goog/events/event.js", ["goog.events.Event", "goog.events.EventLike"], ["goog.Disposable"]); +goog.addDependency("/closure/goog/events/eventhandler.js", ["goog.events.EventHandler"], ["goog.Disposable", "goog.events", "goog.object"]); +goog.addDependency("/closure/goog/events/events.js", ["goog.events", "goog.events.Key", "goog.events.ListenableType"], ["goog.array", "goog.asserts", "goog.debug.entryPointRegistry", "goog.events.BrowserEvent", "goog.events.BrowserFeature", "goog.events.Listenable", "goog.events.Listener", "goog.object"]); +goog.addDependency("/closure/goog/events/eventtarget.js", ["goog.events.EventTarget"], ["goog.Disposable", "goog.array", "goog.asserts", "goog.events", "goog.events.Event", "goog.events.Listenable", "goog.events.ListenerMap", "goog.object"]); +goog.addDependency("/closure/goog/events/eventtargettester.js", ["goog.events.eventTargetTester", "goog.events.eventTargetTester.KeyType", "goog.events.eventTargetTester.UnlistenReturnType"], ["goog.array", "goog.events", "goog.events.Event", "goog.events.EventTarget", "goog.testing.asserts", "goog.testing.recordFunction"]); +goog.addDependency("/closure/goog/events/eventtype.js", ["goog.events.EventType"], ["goog.userAgent"]); +goog.addDependency("/closure/goog/events/eventwrapper.js", ["goog.events.EventWrapper"], []); +goog.addDependency("/closure/goog/events/filedrophandler.js", ["goog.events.FileDropHandler", "goog.events.FileDropHandler.EventType"], ["goog.array", "goog.dom", "goog.events", "goog.events.BrowserEvent", "goog.events.EventHandler", "goog.events.EventTarget", "goog.events.EventType", "goog.log"]); +goog.addDependency("/closure/goog/events/focushandler.js", ["goog.events.FocusHandler", "goog.events.FocusHandler.EventType"], ["goog.events", "goog.events.BrowserEvent", "goog.events.EventTarget", "goog.userAgent"]); +goog.addDependency("/closure/goog/events/imehandler.js", ["goog.events.ImeHandler", "goog.events.ImeHandler.Event", "goog.events.ImeHandler.EventType"], ["goog.events.Event", "goog.events.EventHandler", "goog.events.EventTarget", "goog.events.EventType", "goog.events.KeyCodes", "goog.userAgent"]); +goog.addDependency("/closure/goog/events/inputhandler.js", ["goog.events.InputHandler", "goog.events.InputHandler.EventType"], ["goog.Timer", "goog.dom", "goog.events.BrowserEvent", "goog.events.EventHandler", "goog.events.EventTarget", "goog.events.KeyCodes", "goog.userAgent"]); +goog.addDependency("/closure/goog/events/keycodes.js", ["goog.events.KeyCodes"], ["goog.userAgent"]); +goog.addDependency("/closure/goog/events/keyhandler.js", ["goog.events.KeyEvent", "goog.events.KeyHandler", "goog.events.KeyHandler.EventType"], ["goog.events", "goog.events.BrowserEvent", "goog.events.EventTarget", "goog.events.EventType", "goog.events.KeyCodes", "goog.userAgent"]); +goog.addDependency("/closure/goog/events/keynames.js", ["goog.events.KeyNames"], []); +goog.addDependency("/closure/goog/events/listenable.js", ["goog.events.Listenable", "goog.events.ListenableKey"], []); +goog.addDependency("/closure/goog/events/listener.js", ["goog.events.Listener"], ["goog.events.ListenableKey"]); +goog.addDependency("/closure/goog/events/listenermap.js", ["goog.events.ListenerMap"], ["goog.array", "goog.events.Listener", "goog.object"]); +goog.addDependency("/closure/goog/events/listenermap_test.js", ["goog.events.ListenerMapTest"], ["goog.dispose", "goog.events.EventTarget", "goog.events.ListenerMap", "goog.testing.jsunit"]); +goog.addDependency("/closure/goog/events/mousewheelhandler.js", ["goog.events.MouseWheelEvent", "goog.events.MouseWheelHandler", "goog.events.MouseWheelHandler.EventType"], ["goog.dom", "goog.events", "goog.events.BrowserEvent", "goog.events.EventTarget", "goog.math", "goog.style", "goog.userAgent"]); +goog.addDependency("/closure/goog/events/onlinehandler.js", ["goog.events.OnlineHandler", "goog.events.OnlineHandler.EventType"], ["goog.Timer", "goog.events.BrowserFeature", "goog.events.EventHandler", "goog.events.EventTarget", "goog.events.EventType", "goog.net.NetworkStatusMonitor", "goog.userAgent"]); +goog.addDependency("/closure/goog/events/pastehandler.js", ["goog.events.PasteHandler", "goog.events.PasteHandler.EventType", "goog.events.PasteHandler.State"], ["goog.Timer", "goog.async.ConditionalDelay", "goog.events.BrowserEvent", "goog.events.EventHandler", "goog.events.EventTarget", "goog.events.EventType", "goog.events.KeyCodes", "goog.log", "goog.userAgent"]); +goog.addDependency("/closure/goog/format/emailaddress.js", ["goog.format.EmailAddress"], ["goog.string"]); +goog.addDependency("/closure/goog/format/format.js", ["goog.format"], ["goog.i18n.GraphemeBreak", "goog.string", "goog.userAgent"]); +goog.addDependency("/closure/goog/format/htmlprettyprinter.js", ["goog.format.HtmlPrettyPrinter", "goog.format.HtmlPrettyPrinter.Buffer"], ["goog.object", "goog.string.StringBuffer"]); +goog.addDependency("/closure/goog/format/jsonprettyprinter.js", ["goog.format.JsonPrettyPrinter", "goog.format.JsonPrettyPrinter.HtmlDelimiters", "goog.format.JsonPrettyPrinter.TextDelimiters"], ["goog.json", "goog.json.Serializer", "goog.string", "goog.string.StringBuffer", "goog.string.format"]); +goog.addDependency("/closure/goog/fs/entry.js", ["goog.fs.DirectoryEntry", "goog.fs.DirectoryEntry.Behavior", "goog.fs.Entry", "goog.fs.FileEntry"], []); +goog.addDependency("/closure/goog/fs/entryimpl.js", ["goog.fs.DirectoryEntryImpl", "goog.fs.EntryImpl", "goog.fs.FileEntryImpl"], ["goog.array", "goog.async.Deferred", "goog.fs.DirectoryEntry", "goog.fs.Entry", "goog.fs.Error", "goog.fs.FileEntry", "goog.fs.FileWriter", "goog.functions", "goog.string"]); +goog.addDependency("/closure/goog/fs/error.js", ["goog.fs.Error", "goog.fs.Error.ErrorCode"], ["goog.debug.Error", "goog.string"]); +goog.addDependency("/closure/goog/fs/filereader.js", ["goog.fs.FileReader", "goog.fs.FileReader.EventType", "goog.fs.FileReader.ReadyState"], ["goog.async.Deferred", "goog.events.Event", "goog.events.EventTarget", "goog.fs.Error", "goog.fs.ProgressEvent"]); +goog.addDependency("/closure/goog/fs/filesaver.js", ["goog.fs.FileSaver", "goog.fs.FileSaver.EventType", "goog.fs.FileSaver.ProgressEvent", "goog.fs.FileSaver.ReadyState"], ["goog.events.Event", "goog.events.EventTarget", "goog.fs.Error", "goog.fs.ProgressEvent"]); +goog.addDependency("/closure/goog/fs/filesystem.js", ["goog.fs.FileSystem"], []); +goog.addDependency("/closure/goog/fs/filesystemimpl.js", ["goog.fs.FileSystemImpl"], ["goog.fs.DirectoryEntryImpl", "goog.fs.FileSystem"]); +goog.addDependency("/closure/goog/fs/filewriter.js", ["goog.fs.FileWriter"], ["goog.fs.Error", "goog.fs.FileSaver"]); +goog.addDependency("/closure/goog/fs/fs.js", ["goog.fs"], ["goog.array", "goog.async.Deferred", "goog.fs.Error", "goog.fs.FileReader", "goog.fs.FileSystemImpl", "goog.userAgent"]); +goog.addDependency("/closure/goog/fs/progressevent.js", ["goog.fs.ProgressEvent"], ["goog.events.Event"]); +goog.addDependency("/closure/goog/functions/functions.js", ["goog.functions"], []); +goog.addDependency("/closure/goog/fx/abstractdragdrop.js", ["goog.fx.AbstractDragDrop", "goog.fx.AbstractDragDrop.EventType", "goog.fx.DragDropEvent", "goog.fx.DragDropItem"], ["goog.dom", "goog.dom.classes", "goog.events", "goog.events.Event", "goog.events.EventHandler", "goog.events.EventTarget", "goog.events.EventType", "goog.fx.Dragger", "goog.fx.Dragger.EventType", "goog.math.Box", "goog.math.Coordinate", "goog.style"]); +goog.addDependency("/closure/goog/fx/anim/anim.js", ["goog.fx.anim", "goog.fx.anim.Animated"], ["goog.async.AnimationDelay", "goog.async.Delay", "goog.object"]); +goog.addDependency("/closure/goog/fx/animation.js", ["goog.fx.Animation", "goog.fx.Animation.EventType", "goog.fx.Animation.State", "goog.fx.AnimationEvent"], ["goog.array", "goog.events.Event", "goog.fx.Transition", "goog.fx.Transition.EventType", "goog.fx.TransitionBase.State", "goog.fx.anim", "goog.fx.anim.Animated"]); +goog.addDependency("/closure/goog/fx/animationqueue.js", ["goog.fx.AnimationParallelQueue", "goog.fx.AnimationQueue", "goog.fx.AnimationSerialQueue"], ["goog.array", "goog.asserts", "goog.events.EventHandler", "goog.fx.Transition.EventType", "goog.fx.TransitionBase", "goog.fx.TransitionBase.State"]); +goog.addDependency("/closure/goog/fx/css3/fx.js", ["goog.fx.css3"], ["goog.fx.css3.Transition"]); +goog.addDependency("/closure/goog/fx/css3/transition.js", ["goog.fx.css3.Transition"], ["goog.Timer", "goog.fx.TransitionBase", "goog.style", "goog.style.transition"]); +goog.addDependency("/closure/goog/fx/cssspriteanimation.js", ["goog.fx.CssSpriteAnimation"], ["goog.fx.Animation"]); +goog.addDependency("/closure/goog/fx/dom.js", ["goog.fx.dom", "goog.fx.dom.BgColorTransform", "goog.fx.dom.ColorTransform", "goog.fx.dom.Fade", "goog.fx.dom.FadeIn", "goog.fx.dom.FadeInAndShow", "goog.fx.dom.FadeOut", "goog.fx.dom.FadeOutAndHide", "goog.fx.dom.PredefinedEffect", "goog.fx.dom.Resize", "goog.fx.dom.ResizeHeight", "goog.fx.dom.ResizeWidth", "goog.fx.dom.Scroll", "goog.fx.dom.Slide", "goog.fx.dom.SlideFrom", "goog.fx.dom.Swipe"], ["goog.color", "goog.events", "goog.fx.Animation", "goog.fx.Transition.EventType", +"goog.style", "goog.style.bidi"]); +goog.addDependency("/closure/goog/fx/dragdrop.js", ["goog.fx.DragDrop"], ["goog.fx.AbstractDragDrop", "goog.fx.DragDropItem"]); +goog.addDependency("/closure/goog/fx/dragdropgroup.js", ["goog.fx.DragDropGroup"], ["goog.dom", "goog.fx.AbstractDragDrop", "goog.fx.DragDropItem"]); +goog.addDependency("/closure/goog/fx/dragger.js", ["goog.fx.DragEvent", "goog.fx.Dragger", "goog.fx.Dragger.EventType"], ["goog.dom", "goog.events", "goog.events.Event", "goog.events.EventHandler", "goog.events.EventTarget", "goog.events.EventType", "goog.math.Coordinate", "goog.math.Rect", "goog.style", "goog.style.bidi", "goog.userAgent"]); +goog.addDependency("/closure/goog/fx/draglistgroup.js", ["goog.fx.DragListDirection", "goog.fx.DragListGroup", "goog.fx.DragListGroup.EventType", "goog.fx.DragListGroupEvent"], ["goog.asserts", "goog.dom", "goog.dom.NodeType", "goog.dom.classes", "goog.events.Event", "goog.events.EventHandler", "goog.events.EventTarget", "goog.events.EventType", "goog.fx.Dragger", "goog.fx.Dragger.EventType", "goog.math.Coordinate", "goog.style"]); +goog.addDependency("/closure/goog/fx/dragscrollsupport.js", ["goog.fx.DragScrollSupport"], ["goog.Disposable", "goog.Timer", "goog.dom", "goog.events.EventHandler", "goog.events.EventType", "goog.math.Coordinate", "goog.style"]); +goog.addDependency("/closure/goog/fx/easing.js", ["goog.fx.easing"], []); +goog.addDependency("/closure/goog/fx/fx.js", ["goog.fx"], ["goog.asserts", "goog.fx.Animation", "goog.fx.Animation.EventType", "goog.fx.Animation.State", "goog.fx.AnimationEvent", "goog.fx.Transition.EventType", "goog.fx.easing"]); +goog.addDependency("/closure/goog/fx/transition.js", ["goog.fx.Transition", "goog.fx.Transition.EventType"], []); +goog.addDependency("/closure/goog/fx/transitionbase.js", ["goog.fx.TransitionBase", "goog.fx.TransitionBase.State"], ["goog.events.EventTarget", "goog.fx.Transition", "goog.fx.Transition.EventType"]); +goog.addDependency("/closure/goog/gears/basestore.js", ["goog.gears.BaseStore", "goog.gears.BaseStore.SchemaType"], ["goog.Disposable"]); +goog.addDependency("/closure/goog/gears/database.js", ["goog.gears.Database", "goog.gears.Database.EventType", "goog.gears.Database.TransactionEvent"], ["goog.array", "goog.debug", "goog.events.Event", "goog.events.EventTarget", "goog.gears", "goog.json", "goog.log"]); +goog.addDependency("/closure/goog/gears/gears.js", ["goog.gears"], ["goog.string"]); +goog.addDependency("/closure/goog/gears/httprequest.js", ["goog.gears.HttpRequest"], ["goog.Timer", "goog.gears", "goog.net.WrapperXmlHttpFactory", "goog.net.XmlHttp"]); +goog.addDependency("/closure/goog/gears/loggerclient.js", ["goog.gears.LoggerClient"], ["goog.Disposable", "goog.debug", "goog.debug.Logger"]); +goog.addDependency("/closure/goog/gears/loggerserver.js", ["goog.gears.LoggerServer"], ["goog.Disposable", "goog.gears.Worker.EventType", "goog.log", "goog.log.Level"]); +goog.addDependency("/closure/goog/gears/logstore.js", ["goog.gears.LogStore", "goog.gears.LogStore.Query"], ["goog.async.Delay", "goog.debug.LogManager", "goog.gears.BaseStore", "goog.gears.BaseStore.SchemaType", "goog.json", "goog.log", "goog.log.Level", "goog.log.LogRecord"]); +goog.addDependency("/closure/goog/gears/managedresourcestore.js", ["goog.gears.ManagedResourceStore", "goog.gears.ManagedResourceStore.EventType", "goog.gears.ManagedResourceStore.UpdateStatus", "goog.gears.ManagedResourceStoreEvent"], ["goog.events.Event", "goog.events.EventTarget", "goog.gears", "goog.log", "goog.string"]); +goog.addDependency("/closure/goog/gears/multipartformdata.js", ["goog.gears.MultipartFormData"], ["goog.asserts", "goog.gears", "goog.string"]); +goog.addDependency("/closure/goog/gears/statustype.js", ["goog.gears.StatusType"], []); +goog.addDependency("/closure/goog/gears/urlcapture.js", ["goog.gears.UrlCapture", "goog.gears.UrlCapture.Event", "goog.gears.UrlCapture.EventType"], ["goog.Uri", "goog.events.Event", "goog.events.EventTarget", "goog.gears", "goog.log"]); +goog.addDependency("/closure/goog/gears/worker.js", ["goog.gears.Worker", "goog.gears.Worker.EventType", "goog.gears.WorkerEvent"], ["goog.events.Event", "goog.events.EventTarget"]); +goog.addDependency("/closure/goog/gears/workerchannel.js", ["goog.gears.WorkerChannel"], ["goog.Disposable", "goog.debug", "goog.events", "goog.gears.Worker", "goog.gears.Worker.EventType", "goog.gears.WorkerEvent", "goog.json", "goog.log", "goog.messaging.AbstractChannel"]); +goog.addDependency("/closure/goog/gears/workerpool.js", ["goog.gears.WorkerPool", "goog.gears.WorkerPool.Event", "goog.gears.WorkerPool.EventType"], ["goog.events.Event", "goog.events.EventTarget", "goog.gears", "goog.gears.Worker"]); +goog.addDependency("/closure/goog/graphics/abstractgraphics.js", ["goog.graphics.AbstractGraphics"], ["goog.dom", "goog.graphics.Path", "goog.math.Coordinate", "goog.math.Size", "goog.style", "goog.ui.Component"]); +goog.addDependency("/closure/goog/graphics/affinetransform.js", ["goog.graphics.AffineTransform"], ["goog.math"]); +goog.addDependency("/closure/goog/graphics/canvaselement.js", ["goog.graphics.CanvasEllipseElement", "goog.graphics.CanvasGroupElement", "goog.graphics.CanvasImageElement", "goog.graphics.CanvasPathElement", "goog.graphics.CanvasRectElement", "goog.graphics.CanvasTextElement"], ["goog.array", "goog.dom", "goog.dom.TagName", "goog.graphics.EllipseElement", "goog.graphics.GroupElement", "goog.graphics.ImageElement", "goog.graphics.Path", "goog.graphics.PathElement", "goog.graphics.RectElement", "goog.graphics.TextElement", +"goog.math", "goog.string"]); +goog.addDependency("/closure/goog/graphics/canvasgraphics.js", ["goog.graphics.CanvasGraphics"], ["goog.events.EventType", "goog.graphics.AbstractGraphics", "goog.graphics.CanvasEllipseElement", "goog.graphics.CanvasGroupElement", "goog.graphics.CanvasImageElement", "goog.graphics.CanvasPathElement", "goog.graphics.CanvasRectElement", "goog.graphics.CanvasTextElement", "goog.graphics.SolidFill", "goog.math.Size", "goog.style"]); +goog.addDependency("/closure/goog/graphics/element.js", ["goog.graphics.Element"], ["goog.events", "goog.events.EventTarget", "goog.events.Listenable", "goog.graphics.AffineTransform", "goog.math"]); +goog.addDependency("/closure/goog/graphics/ellipseelement.js", ["goog.graphics.EllipseElement"], ["goog.graphics.StrokeAndFillElement"]); +goog.addDependency("/closure/goog/graphics/ext/coordinates.js", ["goog.graphics.ext.coordinates"], ["goog.string"]); +goog.addDependency("/closure/goog/graphics/ext/element.js", ["goog.graphics.ext.Element"], ["goog.events", "goog.events.EventTarget", "goog.functions", "goog.graphics", "goog.graphics.ext.coordinates"]); +goog.addDependency("/closure/goog/graphics/ext/ellipse.js", ["goog.graphics.ext.Ellipse"], ["goog.graphics.ext.StrokeAndFillElement"]); +goog.addDependency("/closure/goog/graphics/ext/ext.js", ["goog.graphics.ext"], ["goog.graphics.ext.Ellipse", "goog.graphics.ext.Graphics", "goog.graphics.ext.Group", "goog.graphics.ext.Image", "goog.graphics.ext.Rectangle", "goog.graphics.ext.Shape", "goog.graphics.ext.coordinates"]); +goog.addDependency("/closure/goog/graphics/ext/graphics.js", ["goog.graphics.ext.Graphics"], ["goog.events.EventType", "goog.graphics.ext.Group"]); +goog.addDependency("/closure/goog/graphics/ext/group.js", ["goog.graphics.ext.Group"], ["goog.graphics.ext.Element"]); +goog.addDependency("/closure/goog/graphics/ext/image.js", ["goog.graphics.ext.Image"], ["goog.graphics.ext.Element"]); +goog.addDependency("/closure/goog/graphics/ext/path.js", ["goog.graphics.ext.Path"], ["goog.graphics.AffineTransform", "goog.graphics.Path", "goog.math", "goog.math.Rect"]); +goog.addDependency("/closure/goog/graphics/ext/rectangle.js", ["goog.graphics.ext.Rectangle"], ["goog.graphics.ext.StrokeAndFillElement"]); +goog.addDependency("/closure/goog/graphics/ext/shape.js", ["goog.graphics.ext.Shape"], ["goog.graphics.ext.Path", "goog.graphics.ext.StrokeAndFillElement", "goog.math.Rect"]); +goog.addDependency("/closure/goog/graphics/ext/strokeandfillelement.js", ["goog.graphics.ext.StrokeAndFillElement"], ["goog.graphics.ext.Element"]); +goog.addDependency("/closure/goog/graphics/fill.js", ["goog.graphics.Fill"], []); +goog.addDependency("/closure/goog/graphics/font.js", ["goog.graphics.Font"], []); +goog.addDependency("/closure/goog/graphics/graphics.js", ["goog.graphics"], ["goog.graphics.CanvasGraphics", "goog.graphics.SvgGraphics", "goog.graphics.VmlGraphics", "goog.userAgent"]); +goog.addDependency("/closure/goog/graphics/groupelement.js", ["goog.graphics.GroupElement"], ["goog.graphics.Element"]); +goog.addDependency("/closure/goog/graphics/imageelement.js", ["goog.graphics.ImageElement"], ["goog.graphics.Element"]); +goog.addDependency("/closure/goog/graphics/lineargradient.js", ["goog.graphics.LinearGradient"], ["goog.asserts", "goog.graphics.Fill"]); +goog.addDependency("/closure/goog/graphics/path.js", ["goog.graphics.Path", "goog.graphics.Path.Segment"], ["goog.array", "goog.math"]); +goog.addDependency("/closure/goog/graphics/pathelement.js", ["goog.graphics.PathElement"], ["goog.graphics.StrokeAndFillElement"]); +goog.addDependency("/closure/goog/graphics/paths.js", ["goog.graphics.paths"], ["goog.graphics.Path", "goog.math.Coordinate"]); +goog.addDependency("/closure/goog/graphics/rectelement.js", ["goog.graphics.RectElement"], ["goog.graphics.StrokeAndFillElement"]); +goog.addDependency("/closure/goog/graphics/solidfill.js", ["goog.graphics.SolidFill"], ["goog.graphics.Fill"]); +goog.addDependency("/closure/goog/graphics/stroke.js", ["goog.graphics.Stroke"], []); +goog.addDependency("/closure/goog/graphics/strokeandfillelement.js", ["goog.graphics.StrokeAndFillElement"], ["goog.graphics.Element"]); +goog.addDependency("/closure/goog/graphics/svgelement.js", ["goog.graphics.SvgEllipseElement", "goog.graphics.SvgGroupElement", "goog.graphics.SvgImageElement", "goog.graphics.SvgPathElement", "goog.graphics.SvgRectElement", "goog.graphics.SvgTextElement"], ["goog.dom", "goog.graphics.EllipseElement", "goog.graphics.GroupElement", "goog.graphics.ImageElement", "goog.graphics.PathElement", "goog.graphics.RectElement", "goog.graphics.TextElement"]); +goog.addDependency("/closure/goog/graphics/svggraphics.js", ["goog.graphics.SvgGraphics"], ["goog.Timer", "goog.dom", "goog.events.EventHandler", "goog.events.EventType", "goog.graphics.AbstractGraphics", "goog.graphics.LinearGradient", "goog.graphics.Path", "goog.graphics.SolidFill", "goog.graphics.Stroke", "goog.graphics.SvgEllipseElement", "goog.graphics.SvgGroupElement", "goog.graphics.SvgImageElement", "goog.graphics.SvgPathElement", "goog.graphics.SvgRectElement", "goog.graphics.SvgTextElement", +"goog.math", "goog.math.Size", "goog.style", "goog.userAgent"]); +goog.addDependency("/closure/goog/graphics/textelement.js", ["goog.graphics.TextElement"], ["goog.graphics.StrokeAndFillElement"]); +goog.addDependency("/closure/goog/graphics/vmlelement.js", ["goog.graphics.VmlEllipseElement", "goog.graphics.VmlGroupElement", "goog.graphics.VmlImageElement", "goog.graphics.VmlPathElement", "goog.graphics.VmlRectElement", "goog.graphics.VmlTextElement"], ["goog.dom", "goog.graphics.EllipseElement", "goog.graphics.GroupElement", "goog.graphics.ImageElement", "goog.graphics.PathElement", "goog.graphics.RectElement", "goog.graphics.TextElement"]); +goog.addDependency("/closure/goog/graphics/vmlgraphics.js", ["goog.graphics.VmlGraphics"], ["goog.array", "goog.events", "goog.events.EventHandler", "goog.events.EventType", "goog.graphics.AbstractGraphics", "goog.graphics.LinearGradient", "goog.graphics.Path", "goog.graphics.SolidFill", "goog.graphics.VmlEllipseElement", "goog.graphics.VmlGroupElement", "goog.graphics.VmlImageElement", "goog.graphics.VmlPathElement", "goog.graphics.VmlRectElement", "goog.graphics.VmlTextElement", "goog.math", "goog.math.Size", +"goog.string", "goog.style"]); +goog.addDependency("/closure/goog/history/event.js", ["goog.history.Event"], ["goog.events.Event", "goog.history.EventType"]); +goog.addDependency("/closure/goog/history/eventtype.js", ["goog.history.EventType"], []); +goog.addDependency("/closure/goog/history/history.js", ["goog.History", "goog.History.Event", "goog.History.EventType"], ["goog.Timer", "goog.dom", "goog.events.EventHandler", "goog.events.EventTarget", "goog.events.EventType", "goog.history.Event", "goog.history.EventType", "goog.memoize", "goog.string", "goog.userAgent"]); +goog.addDependency("/closure/goog/history/history_test.js", ["goog.HistoryTest"], ["goog.History", "goog.testing.jsunit", "goog.userAgent"]); +goog.addDependency("/closure/goog/history/html5history.js", ["goog.history.Html5History", "goog.history.Html5History.TokenTransformer"], ["goog.asserts", "goog.events", "goog.events.EventTarget", "goog.events.EventType", "goog.history.Event", "goog.history.EventType"]); +goog.addDependency("/closure/goog/i18n/bidi.js", ["goog.i18n.bidi"], []); +goog.addDependency("/closure/goog/i18n/bidiformatter.js", ["goog.i18n.BidiFormatter"], ["goog.i18n.bidi", "goog.string"]); +goog.addDependency("/closure/goog/i18n/charlistdecompressor.js", ["goog.i18n.CharListDecompressor"], ["goog.array", "goog.i18n.uChar"]); +goog.addDependency("/closure/goog/i18n/charpickerdata.js", ["goog.i18n.CharPickerData"], []); +goog.addDependency("/closure/goog/i18n/collation.js", ["goog.i18n.collation"], []); +goog.addDependency("/closure/goog/i18n/compactnumberformatsymbols.js", ["goog.i18n.CompactNumberFormatSymbols", "goog.i18n.CompactNumberFormatSymbols_af", "goog.i18n.CompactNumberFormatSymbols_af_ZA", "goog.i18n.CompactNumberFormatSymbols_am", "goog.i18n.CompactNumberFormatSymbols_am_ET", "goog.i18n.CompactNumberFormatSymbols_ar", "goog.i18n.CompactNumberFormatSymbols_ar_001", "goog.i18n.CompactNumberFormatSymbols_ar_EG", "goog.i18n.CompactNumberFormatSymbols_bg", "goog.i18n.CompactNumberFormatSymbols_bg_BG", +"goog.i18n.CompactNumberFormatSymbols_bn", "goog.i18n.CompactNumberFormatSymbols_bn_BD", "goog.i18n.CompactNumberFormatSymbols_br", "goog.i18n.CompactNumberFormatSymbols_br_FR", "goog.i18n.CompactNumberFormatSymbols_ca", "goog.i18n.CompactNumberFormatSymbols_ca_AD", "goog.i18n.CompactNumberFormatSymbols_ca_ES", "goog.i18n.CompactNumberFormatSymbols_chr", "goog.i18n.CompactNumberFormatSymbols_chr_US", "goog.i18n.CompactNumberFormatSymbols_cs", "goog.i18n.CompactNumberFormatSymbols_cs_CZ", "goog.i18n.CompactNumberFormatSymbols_cy", +"goog.i18n.CompactNumberFormatSymbols_cy_GB", "goog.i18n.CompactNumberFormatSymbols_da", "goog.i18n.CompactNumberFormatSymbols_da_DK", "goog.i18n.CompactNumberFormatSymbols_de", "goog.i18n.CompactNumberFormatSymbols_de_AT", "goog.i18n.CompactNumberFormatSymbols_de_BE", "goog.i18n.CompactNumberFormatSymbols_de_CH", "goog.i18n.CompactNumberFormatSymbols_de_DE", "goog.i18n.CompactNumberFormatSymbols_de_LU", "goog.i18n.CompactNumberFormatSymbols_el", "goog.i18n.CompactNumberFormatSymbols_el_GR", "goog.i18n.CompactNumberFormatSymbols_en", +"goog.i18n.CompactNumberFormatSymbols_en_AS", "goog.i18n.CompactNumberFormatSymbols_en_AU", "goog.i18n.CompactNumberFormatSymbols_en_Dsrt_US", "goog.i18n.CompactNumberFormatSymbols_en_FM", "goog.i18n.CompactNumberFormatSymbols_en_GB", "goog.i18n.CompactNumberFormatSymbols_en_GU", "goog.i18n.CompactNumberFormatSymbols_en_IE", "goog.i18n.CompactNumberFormatSymbols_en_IN", "goog.i18n.CompactNumberFormatSymbols_en_MH", "goog.i18n.CompactNumberFormatSymbols_en_MP", "goog.i18n.CompactNumberFormatSymbols_en_PR", +"goog.i18n.CompactNumberFormatSymbols_en_PW", "goog.i18n.CompactNumberFormatSymbols_en_SG", "goog.i18n.CompactNumberFormatSymbols_en_TC", "goog.i18n.CompactNumberFormatSymbols_en_UM", "goog.i18n.CompactNumberFormatSymbols_en_US", "goog.i18n.CompactNumberFormatSymbols_en_VG", "goog.i18n.CompactNumberFormatSymbols_en_VI", "goog.i18n.CompactNumberFormatSymbols_en_ZA", "goog.i18n.CompactNumberFormatSymbols_es", "goog.i18n.CompactNumberFormatSymbols_es_419", "goog.i18n.CompactNumberFormatSymbols_es_EA", +"goog.i18n.CompactNumberFormatSymbols_es_ES", "goog.i18n.CompactNumberFormatSymbols_es_IC", "goog.i18n.CompactNumberFormatSymbols_et", "goog.i18n.CompactNumberFormatSymbols_et_EE", "goog.i18n.CompactNumberFormatSymbols_eu", "goog.i18n.CompactNumberFormatSymbols_eu_ES", "goog.i18n.CompactNumberFormatSymbols_fa", "goog.i18n.CompactNumberFormatSymbols_fa_IR", "goog.i18n.CompactNumberFormatSymbols_fi", "goog.i18n.CompactNumberFormatSymbols_fi_FI", "goog.i18n.CompactNumberFormatSymbols_fil", "goog.i18n.CompactNumberFormatSymbols_fil_PH", +"goog.i18n.CompactNumberFormatSymbols_fr", "goog.i18n.CompactNumberFormatSymbols_fr_BL", "goog.i18n.CompactNumberFormatSymbols_fr_CA", "goog.i18n.CompactNumberFormatSymbols_fr_FR", "goog.i18n.CompactNumberFormatSymbols_fr_GF", "goog.i18n.CompactNumberFormatSymbols_fr_GP", "goog.i18n.CompactNumberFormatSymbols_fr_MC", "goog.i18n.CompactNumberFormatSymbols_fr_MF", "goog.i18n.CompactNumberFormatSymbols_fr_MQ", "goog.i18n.CompactNumberFormatSymbols_fr_RE", "goog.i18n.CompactNumberFormatSymbols_fr_YT", +"goog.i18n.CompactNumberFormatSymbols_gl", "goog.i18n.CompactNumberFormatSymbols_gl_ES", "goog.i18n.CompactNumberFormatSymbols_gsw", "goog.i18n.CompactNumberFormatSymbols_gsw_CH", "goog.i18n.CompactNumberFormatSymbols_gu", "goog.i18n.CompactNumberFormatSymbols_gu_IN", "goog.i18n.CompactNumberFormatSymbols_haw", "goog.i18n.CompactNumberFormatSymbols_haw_US", "goog.i18n.CompactNumberFormatSymbols_he", "goog.i18n.CompactNumberFormatSymbols_he_IL", "goog.i18n.CompactNumberFormatSymbols_hi", "goog.i18n.CompactNumberFormatSymbols_hi_IN", +"goog.i18n.CompactNumberFormatSymbols_hr", "goog.i18n.CompactNumberFormatSymbols_hr_HR", "goog.i18n.CompactNumberFormatSymbols_hu", "goog.i18n.CompactNumberFormatSymbols_hu_HU", "goog.i18n.CompactNumberFormatSymbols_id", "goog.i18n.CompactNumberFormatSymbols_id_ID", "goog.i18n.CompactNumberFormatSymbols_in", "goog.i18n.CompactNumberFormatSymbols_is", "goog.i18n.CompactNumberFormatSymbols_is_IS", "goog.i18n.CompactNumberFormatSymbols_it", "goog.i18n.CompactNumberFormatSymbols_it_IT", "goog.i18n.CompactNumberFormatSymbols_it_SM", +"goog.i18n.CompactNumberFormatSymbols_iw", "goog.i18n.CompactNumberFormatSymbols_ja", "goog.i18n.CompactNumberFormatSymbols_ja_JP", "goog.i18n.CompactNumberFormatSymbols_kn", "goog.i18n.CompactNumberFormatSymbols_kn_IN", "goog.i18n.CompactNumberFormatSymbols_ko", "goog.i18n.CompactNumberFormatSymbols_ko_KR", "goog.i18n.CompactNumberFormatSymbols_ln", "goog.i18n.CompactNumberFormatSymbols_ln_CD", "goog.i18n.CompactNumberFormatSymbols_lt", "goog.i18n.CompactNumberFormatSymbols_lt_LT", "goog.i18n.CompactNumberFormatSymbols_lv", +"goog.i18n.CompactNumberFormatSymbols_lv_LV", "goog.i18n.CompactNumberFormatSymbols_ml", "goog.i18n.CompactNumberFormatSymbols_ml_IN", "goog.i18n.CompactNumberFormatSymbols_mr", "goog.i18n.CompactNumberFormatSymbols_mr_IN", "goog.i18n.CompactNumberFormatSymbols_ms", "goog.i18n.CompactNumberFormatSymbols_ms_Latn_MY", "goog.i18n.CompactNumberFormatSymbols_mt", "goog.i18n.CompactNumberFormatSymbols_mt_MT", "goog.i18n.CompactNumberFormatSymbols_nb", "goog.i18n.CompactNumberFormatSymbols_nb_NO", "goog.i18n.CompactNumberFormatSymbols_nl", +"goog.i18n.CompactNumberFormatSymbols_nl_NL", "goog.i18n.CompactNumberFormatSymbols_no", "goog.i18n.CompactNumberFormatSymbols_or", "goog.i18n.CompactNumberFormatSymbols_or_IN", "goog.i18n.CompactNumberFormatSymbols_pl", "goog.i18n.CompactNumberFormatSymbols_pl_PL", "goog.i18n.CompactNumberFormatSymbols_pt", "goog.i18n.CompactNumberFormatSymbols_pt_BR", "goog.i18n.CompactNumberFormatSymbols_pt_PT", "goog.i18n.CompactNumberFormatSymbols_ro", "goog.i18n.CompactNumberFormatSymbols_ro_RO", "goog.i18n.CompactNumberFormatSymbols_ru", +"goog.i18n.CompactNumberFormatSymbols_ru_RU", "goog.i18n.CompactNumberFormatSymbols_sk", "goog.i18n.CompactNumberFormatSymbols_sk_SK", "goog.i18n.CompactNumberFormatSymbols_sl", "goog.i18n.CompactNumberFormatSymbols_sl_SI", "goog.i18n.CompactNumberFormatSymbols_sq", "goog.i18n.CompactNumberFormatSymbols_sq_AL", "goog.i18n.CompactNumberFormatSymbols_sr", "goog.i18n.CompactNumberFormatSymbols_sr_Cyrl_RS", "goog.i18n.CompactNumberFormatSymbols_sv", "goog.i18n.CompactNumberFormatSymbols_sv_SE", "goog.i18n.CompactNumberFormatSymbols_sw", +"goog.i18n.CompactNumberFormatSymbols_sw_TZ", "goog.i18n.CompactNumberFormatSymbols_ta", "goog.i18n.CompactNumberFormatSymbols_ta_IN", "goog.i18n.CompactNumberFormatSymbols_te", "goog.i18n.CompactNumberFormatSymbols_te_IN", "goog.i18n.CompactNumberFormatSymbols_th", "goog.i18n.CompactNumberFormatSymbols_th_TH", "goog.i18n.CompactNumberFormatSymbols_tl", "goog.i18n.CompactNumberFormatSymbols_tr", "goog.i18n.CompactNumberFormatSymbols_tr_TR", "goog.i18n.CompactNumberFormatSymbols_uk", "goog.i18n.CompactNumberFormatSymbols_uk_UA", +"goog.i18n.CompactNumberFormatSymbols_ur", "goog.i18n.CompactNumberFormatSymbols_ur_PK", "goog.i18n.CompactNumberFormatSymbols_vi", "goog.i18n.CompactNumberFormatSymbols_vi_VN", "goog.i18n.CompactNumberFormatSymbols_zh", "goog.i18n.CompactNumberFormatSymbols_zh_CN", "goog.i18n.CompactNumberFormatSymbols_zh_HK", "goog.i18n.CompactNumberFormatSymbols_zh_Hans_CN", "goog.i18n.CompactNumberFormatSymbols_zh_TW", "goog.i18n.CompactNumberFormatSymbols_zu", "goog.i18n.CompactNumberFormatSymbols_zu_ZA"], []); +goog.addDependency("/closure/goog/i18n/compactnumberformatsymbols_ext.js", ["goog.i18n.CompactNumberFormatSymbolsExt", "goog.i18n.CompactNumberFormatSymbols_aa", "goog.i18n.CompactNumberFormatSymbols_aa_DJ", "goog.i18n.CompactNumberFormatSymbols_aa_ER", "goog.i18n.CompactNumberFormatSymbols_aa_ET", "goog.i18n.CompactNumberFormatSymbols_af_NA", "goog.i18n.CompactNumberFormatSymbols_agq", "goog.i18n.CompactNumberFormatSymbols_agq_CM", "goog.i18n.CompactNumberFormatSymbols_ak", "goog.i18n.CompactNumberFormatSymbols_ak_GH", +"goog.i18n.CompactNumberFormatSymbols_ar_AE", "goog.i18n.CompactNumberFormatSymbols_ar_BH", "goog.i18n.CompactNumberFormatSymbols_ar_DJ", "goog.i18n.CompactNumberFormatSymbols_ar_DZ", "goog.i18n.CompactNumberFormatSymbols_ar_EH", "goog.i18n.CompactNumberFormatSymbols_ar_ER", "goog.i18n.CompactNumberFormatSymbols_ar_IL", "goog.i18n.CompactNumberFormatSymbols_ar_IQ", "goog.i18n.CompactNumberFormatSymbols_ar_JO", "goog.i18n.CompactNumberFormatSymbols_ar_KM", "goog.i18n.CompactNumberFormatSymbols_ar_KW", +"goog.i18n.CompactNumberFormatSymbols_ar_LB", "goog.i18n.CompactNumberFormatSymbols_ar_LY", "goog.i18n.CompactNumberFormatSymbols_ar_MA", "goog.i18n.CompactNumberFormatSymbols_ar_MR", "goog.i18n.CompactNumberFormatSymbols_ar_OM", "goog.i18n.CompactNumberFormatSymbols_ar_PS", "goog.i18n.CompactNumberFormatSymbols_ar_QA", "goog.i18n.CompactNumberFormatSymbols_ar_SA", "goog.i18n.CompactNumberFormatSymbols_ar_SD", "goog.i18n.CompactNumberFormatSymbols_ar_SO", "goog.i18n.CompactNumberFormatSymbols_ar_SY", +"goog.i18n.CompactNumberFormatSymbols_ar_TD", "goog.i18n.CompactNumberFormatSymbols_ar_TN", "goog.i18n.CompactNumberFormatSymbols_ar_YE", "goog.i18n.CompactNumberFormatSymbols_as", "goog.i18n.CompactNumberFormatSymbols_as_IN", "goog.i18n.CompactNumberFormatSymbols_asa", "goog.i18n.CompactNumberFormatSymbols_asa_TZ", "goog.i18n.CompactNumberFormatSymbols_ast", "goog.i18n.CompactNumberFormatSymbols_ast_ES", "goog.i18n.CompactNumberFormatSymbols_az", "goog.i18n.CompactNumberFormatSymbols_az_Cyrl", "goog.i18n.CompactNumberFormatSymbols_az_Cyrl_AZ", +"goog.i18n.CompactNumberFormatSymbols_az_Latn", "goog.i18n.CompactNumberFormatSymbols_az_Latn_AZ", "goog.i18n.CompactNumberFormatSymbols_bas", "goog.i18n.CompactNumberFormatSymbols_bas_CM", "goog.i18n.CompactNumberFormatSymbols_be", "goog.i18n.CompactNumberFormatSymbols_be_BY", "goog.i18n.CompactNumberFormatSymbols_bem", "goog.i18n.CompactNumberFormatSymbols_bem_ZM", "goog.i18n.CompactNumberFormatSymbols_bez", "goog.i18n.CompactNumberFormatSymbols_bez_TZ", "goog.i18n.CompactNumberFormatSymbols_bm", +"goog.i18n.CompactNumberFormatSymbols_bm_ML", "goog.i18n.CompactNumberFormatSymbols_bn_IN", "goog.i18n.CompactNumberFormatSymbols_bo", "goog.i18n.CompactNumberFormatSymbols_bo_CN", "goog.i18n.CompactNumberFormatSymbols_bo_IN", "goog.i18n.CompactNumberFormatSymbols_brx", "goog.i18n.CompactNumberFormatSymbols_brx_IN", "goog.i18n.CompactNumberFormatSymbols_bs", "goog.i18n.CompactNumberFormatSymbols_bs_Cyrl", "goog.i18n.CompactNumberFormatSymbols_bs_Cyrl_BA", "goog.i18n.CompactNumberFormatSymbols_bs_Latn", +"goog.i18n.CompactNumberFormatSymbols_bs_Latn_BA", "goog.i18n.CompactNumberFormatSymbols_byn", "goog.i18n.CompactNumberFormatSymbols_byn_ER", "goog.i18n.CompactNumberFormatSymbols_cgg", "goog.i18n.CompactNumberFormatSymbols_cgg_UG", "goog.i18n.CompactNumberFormatSymbols_ckb", "goog.i18n.CompactNumberFormatSymbols_ckb_Arab", "goog.i18n.CompactNumberFormatSymbols_ckb_Arab_IQ", "goog.i18n.CompactNumberFormatSymbols_ckb_Arab_IR", "goog.i18n.CompactNumberFormatSymbols_ckb_IQ", "goog.i18n.CompactNumberFormatSymbols_ckb_IR", +"goog.i18n.CompactNumberFormatSymbols_ckb_Latn", "goog.i18n.CompactNumberFormatSymbols_ckb_Latn_IQ", "goog.i18n.CompactNumberFormatSymbols_dav", "goog.i18n.CompactNumberFormatSymbols_dav_KE", "goog.i18n.CompactNumberFormatSymbols_de_LI", "goog.i18n.CompactNumberFormatSymbols_dje", "goog.i18n.CompactNumberFormatSymbols_dje_NE", "goog.i18n.CompactNumberFormatSymbols_dua", "goog.i18n.CompactNumberFormatSymbols_dua_CM", "goog.i18n.CompactNumberFormatSymbols_dyo", "goog.i18n.CompactNumberFormatSymbols_dyo_SN", +"goog.i18n.CompactNumberFormatSymbols_dz", "goog.i18n.CompactNumberFormatSymbols_dz_BT", "goog.i18n.CompactNumberFormatSymbols_ebu", "goog.i18n.CompactNumberFormatSymbols_ebu_KE", "goog.i18n.CompactNumberFormatSymbols_ee", "goog.i18n.CompactNumberFormatSymbols_ee_GH", "goog.i18n.CompactNumberFormatSymbols_ee_TG", "goog.i18n.CompactNumberFormatSymbols_el_CY", "goog.i18n.CompactNumberFormatSymbols_en_150", "goog.i18n.CompactNumberFormatSymbols_en_AG", "goog.i18n.CompactNumberFormatSymbols_en_BB", "goog.i18n.CompactNumberFormatSymbols_en_BE", +"goog.i18n.CompactNumberFormatSymbols_en_BM", "goog.i18n.CompactNumberFormatSymbols_en_BS", "goog.i18n.CompactNumberFormatSymbols_en_BW", "goog.i18n.CompactNumberFormatSymbols_en_BZ", "goog.i18n.CompactNumberFormatSymbols_en_CA", "goog.i18n.CompactNumberFormatSymbols_en_CM", "goog.i18n.CompactNumberFormatSymbols_en_DM", "goog.i18n.CompactNumberFormatSymbols_en_Dsrt", "goog.i18n.CompactNumberFormatSymbols_en_FJ", "goog.i18n.CompactNumberFormatSymbols_en_GD", "goog.i18n.CompactNumberFormatSymbols_en_GG", +"goog.i18n.CompactNumberFormatSymbols_en_GH", "goog.i18n.CompactNumberFormatSymbols_en_GI", "goog.i18n.CompactNumberFormatSymbols_en_GM", "goog.i18n.CompactNumberFormatSymbols_en_GY", "goog.i18n.CompactNumberFormatSymbols_en_HK", "goog.i18n.CompactNumberFormatSymbols_en_IM", "goog.i18n.CompactNumberFormatSymbols_en_JE", "goog.i18n.CompactNumberFormatSymbols_en_JM", "goog.i18n.CompactNumberFormatSymbols_en_KE", "goog.i18n.CompactNumberFormatSymbols_en_KI", "goog.i18n.CompactNumberFormatSymbols_en_KN", +"goog.i18n.CompactNumberFormatSymbols_en_KY", "goog.i18n.CompactNumberFormatSymbols_en_LC", "goog.i18n.CompactNumberFormatSymbols_en_LR", "goog.i18n.CompactNumberFormatSymbols_en_LS", "goog.i18n.CompactNumberFormatSymbols_en_MG", "goog.i18n.CompactNumberFormatSymbols_en_MT", "goog.i18n.CompactNumberFormatSymbols_en_MU", "goog.i18n.CompactNumberFormatSymbols_en_MW", "goog.i18n.CompactNumberFormatSymbols_en_NA", "goog.i18n.CompactNumberFormatSymbols_en_NG", "goog.i18n.CompactNumberFormatSymbols_en_NZ", +"goog.i18n.CompactNumberFormatSymbols_en_PG", "goog.i18n.CompactNumberFormatSymbols_en_PH", "goog.i18n.CompactNumberFormatSymbols_en_PK", "goog.i18n.CompactNumberFormatSymbols_en_SB", "goog.i18n.CompactNumberFormatSymbols_en_SC", "goog.i18n.CompactNumberFormatSymbols_en_SL", "goog.i18n.CompactNumberFormatSymbols_en_SS", "goog.i18n.CompactNumberFormatSymbols_en_SZ", "goog.i18n.CompactNumberFormatSymbols_en_TO", "goog.i18n.CompactNumberFormatSymbols_en_TT", "goog.i18n.CompactNumberFormatSymbols_en_TZ", +"goog.i18n.CompactNumberFormatSymbols_en_UG", "goog.i18n.CompactNumberFormatSymbols_en_VC", "goog.i18n.CompactNumberFormatSymbols_en_VU", "goog.i18n.CompactNumberFormatSymbols_en_WS", "goog.i18n.CompactNumberFormatSymbols_en_ZM", "goog.i18n.CompactNumberFormatSymbols_en_ZW", "goog.i18n.CompactNumberFormatSymbols_eo", "goog.i18n.CompactNumberFormatSymbols_es_AR", "goog.i18n.CompactNumberFormatSymbols_es_BO", "goog.i18n.CompactNumberFormatSymbols_es_CL", "goog.i18n.CompactNumberFormatSymbols_es_CO", +"goog.i18n.CompactNumberFormatSymbols_es_CR", "goog.i18n.CompactNumberFormatSymbols_es_CU", "goog.i18n.CompactNumberFormatSymbols_es_DO", "goog.i18n.CompactNumberFormatSymbols_es_EC", "goog.i18n.CompactNumberFormatSymbols_es_GQ", "goog.i18n.CompactNumberFormatSymbols_es_GT", "goog.i18n.CompactNumberFormatSymbols_es_HN", "goog.i18n.CompactNumberFormatSymbols_es_MX", "goog.i18n.CompactNumberFormatSymbols_es_NI", "goog.i18n.CompactNumberFormatSymbols_es_PA", "goog.i18n.CompactNumberFormatSymbols_es_PE", +"goog.i18n.CompactNumberFormatSymbols_es_PH", "goog.i18n.CompactNumberFormatSymbols_es_PR", "goog.i18n.CompactNumberFormatSymbols_es_PY", "goog.i18n.CompactNumberFormatSymbols_es_SV", "goog.i18n.CompactNumberFormatSymbols_es_US", "goog.i18n.CompactNumberFormatSymbols_es_UY", "goog.i18n.CompactNumberFormatSymbols_es_VE", "goog.i18n.CompactNumberFormatSymbols_ewo", "goog.i18n.CompactNumberFormatSymbols_ewo_CM", "goog.i18n.CompactNumberFormatSymbols_fa_AF", "goog.i18n.CompactNumberFormatSymbols_ff", +"goog.i18n.CompactNumberFormatSymbols_ff_SN", "goog.i18n.CompactNumberFormatSymbols_fo", "goog.i18n.CompactNumberFormatSymbols_fo_FO", "goog.i18n.CompactNumberFormatSymbols_fr_BE", "goog.i18n.CompactNumberFormatSymbols_fr_BF", "goog.i18n.CompactNumberFormatSymbols_fr_BI", "goog.i18n.CompactNumberFormatSymbols_fr_BJ", "goog.i18n.CompactNumberFormatSymbols_fr_CD", "goog.i18n.CompactNumberFormatSymbols_fr_CF", "goog.i18n.CompactNumberFormatSymbols_fr_CG", "goog.i18n.CompactNumberFormatSymbols_fr_CH", +"goog.i18n.CompactNumberFormatSymbols_fr_CI", "goog.i18n.CompactNumberFormatSymbols_fr_CM", "goog.i18n.CompactNumberFormatSymbols_fr_DJ", "goog.i18n.CompactNumberFormatSymbols_fr_DZ", "goog.i18n.CompactNumberFormatSymbols_fr_GA", "goog.i18n.CompactNumberFormatSymbols_fr_GN", "goog.i18n.CompactNumberFormatSymbols_fr_GQ", "goog.i18n.CompactNumberFormatSymbols_fr_HT", "goog.i18n.CompactNumberFormatSymbols_fr_KM", "goog.i18n.CompactNumberFormatSymbols_fr_LU", "goog.i18n.CompactNumberFormatSymbols_fr_MA", +"goog.i18n.CompactNumberFormatSymbols_fr_MG", "goog.i18n.CompactNumberFormatSymbols_fr_ML", "goog.i18n.CompactNumberFormatSymbols_fr_MR", "goog.i18n.CompactNumberFormatSymbols_fr_MU", "goog.i18n.CompactNumberFormatSymbols_fr_NC", "goog.i18n.CompactNumberFormatSymbols_fr_NE", "goog.i18n.CompactNumberFormatSymbols_fr_PF", "goog.i18n.CompactNumberFormatSymbols_fr_RW", "goog.i18n.CompactNumberFormatSymbols_fr_SC", "goog.i18n.CompactNumberFormatSymbols_fr_SN", "goog.i18n.CompactNumberFormatSymbols_fr_SY", +"goog.i18n.CompactNumberFormatSymbols_fr_TD", "goog.i18n.CompactNumberFormatSymbols_fr_TG", "goog.i18n.CompactNumberFormatSymbols_fr_TN", "goog.i18n.CompactNumberFormatSymbols_fr_VU", "goog.i18n.CompactNumberFormatSymbols_fur", "goog.i18n.CompactNumberFormatSymbols_fur_IT", "goog.i18n.CompactNumberFormatSymbols_ga", "goog.i18n.CompactNumberFormatSymbols_ga_IE", "goog.i18n.CompactNumberFormatSymbols_gd", "goog.i18n.CompactNumberFormatSymbols_gd_GB", "goog.i18n.CompactNumberFormatSymbols_guz", "goog.i18n.CompactNumberFormatSymbols_guz_KE", +"goog.i18n.CompactNumberFormatSymbols_gv", "goog.i18n.CompactNumberFormatSymbols_gv_GB", "goog.i18n.CompactNumberFormatSymbols_ha", "goog.i18n.CompactNumberFormatSymbols_ha_Latn", "goog.i18n.CompactNumberFormatSymbols_ha_Latn_GH", "goog.i18n.CompactNumberFormatSymbols_ha_Latn_NE", "goog.i18n.CompactNumberFormatSymbols_ha_Latn_NG", "goog.i18n.CompactNumberFormatSymbols_hr_BA", "goog.i18n.CompactNumberFormatSymbols_hy", "goog.i18n.CompactNumberFormatSymbols_hy_AM", "goog.i18n.CompactNumberFormatSymbols_ia", +"goog.i18n.CompactNumberFormatSymbols_ia_FR", "goog.i18n.CompactNumberFormatSymbols_ig", "goog.i18n.CompactNumberFormatSymbols_ig_NG", "goog.i18n.CompactNumberFormatSymbols_ii", "goog.i18n.CompactNumberFormatSymbols_ii_CN", "goog.i18n.CompactNumberFormatSymbols_it_CH", "goog.i18n.CompactNumberFormatSymbols_jgo", "goog.i18n.CompactNumberFormatSymbols_jgo_CM", "goog.i18n.CompactNumberFormatSymbols_jmc", "goog.i18n.CompactNumberFormatSymbols_jmc_TZ", "goog.i18n.CompactNumberFormatSymbols_ka", "goog.i18n.CompactNumberFormatSymbols_ka_GE", +"goog.i18n.CompactNumberFormatSymbols_kab", "goog.i18n.CompactNumberFormatSymbols_kab_DZ", "goog.i18n.CompactNumberFormatSymbols_kam", "goog.i18n.CompactNumberFormatSymbols_kam_KE", "goog.i18n.CompactNumberFormatSymbols_kde", "goog.i18n.CompactNumberFormatSymbols_kde_TZ", "goog.i18n.CompactNumberFormatSymbols_kea", "goog.i18n.CompactNumberFormatSymbols_kea_CV", "goog.i18n.CompactNumberFormatSymbols_khq", "goog.i18n.CompactNumberFormatSymbols_khq_ML", "goog.i18n.CompactNumberFormatSymbols_ki", "goog.i18n.CompactNumberFormatSymbols_ki_KE", +"goog.i18n.CompactNumberFormatSymbols_kk", "goog.i18n.CompactNumberFormatSymbols_kk_Cyrl", "goog.i18n.CompactNumberFormatSymbols_kk_Cyrl_KZ", "goog.i18n.CompactNumberFormatSymbols_kkj", "goog.i18n.CompactNumberFormatSymbols_kkj_CM", "goog.i18n.CompactNumberFormatSymbols_kl", "goog.i18n.CompactNumberFormatSymbols_kl_GL", "goog.i18n.CompactNumberFormatSymbols_kln", "goog.i18n.CompactNumberFormatSymbols_kln_KE", "goog.i18n.CompactNumberFormatSymbols_km", "goog.i18n.CompactNumberFormatSymbols_km_KH", +"goog.i18n.CompactNumberFormatSymbols_ko_KP", "goog.i18n.CompactNumberFormatSymbols_kok", "goog.i18n.CompactNumberFormatSymbols_kok_IN", "goog.i18n.CompactNumberFormatSymbols_ks", "goog.i18n.CompactNumberFormatSymbols_ks_Arab", "goog.i18n.CompactNumberFormatSymbols_ks_Arab_IN", "goog.i18n.CompactNumberFormatSymbols_ksb", "goog.i18n.CompactNumberFormatSymbols_ksb_TZ", "goog.i18n.CompactNumberFormatSymbols_ksf", "goog.i18n.CompactNumberFormatSymbols_ksf_CM", "goog.i18n.CompactNumberFormatSymbols_ksh", +"goog.i18n.CompactNumberFormatSymbols_ksh_DE", "goog.i18n.CompactNumberFormatSymbols_kw", "goog.i18n.CompactNumberFormatSymbols_kw_GB", "goog.i18n.CompactNumberFormatSymbols_ky", "goog.i18n.CompactNumberFormatSymbols_ky_KG", "goog.i18n.CompactNumberFormatSymbols_lag", "goog.i18n.CompactNumberFormatSymbols_lag_TZ", "goog.i18n.CompactNumberFormatSymbols_lg", "goog.i18n.CompactNumberFormatSymbols_lg_UG", "goog.i18n.CompactNumberFormatSymbols_ln_AO", "goog.i18n.CompactNumberFormatSymbols_ln_CF", "goog.i18n.CompactNumberFormatSymbols_ln_CG", +"goog.i18n.CompactNumberFormatSymbols_lo", "goog.i18n.CompactNumberFormatSymbols_lo_LA", "goog.i18n.CompactNumberFormatSymbols_lu", "goog.i18n.CompactNumberFormatSymbols_lu_CD", "goog.i18n.CompactNumberFormatSymbols_luo", "goog.i18n.CompactNumberFormatSymbols_luo_KE", "goog.i18n.CompactNumberFormatSymbols_luy", "goog.i18n.CompactNumberFormatSymbols_luy_KE", "goog.i18n.CompactNumberFormatSymbols_mas", "goog.i18n.CompactNumberFormatSymbols_mas_KE", "goog.i18n.CompactNumberFormatSymbols_mas_TZ", "goog.i18n.CompactNumberFormatSymbols_mer", +"goog.i18n.CompactNumberFormatSymbols_mer_KE", "goog.i18n.CompactNumberFormatSymbols_mfe", "goog.i18n.CompactNumberFormatSymbols_mfe_MU", "goog.i18n.CompactNumberFormatSymbols_mg", "goog.i18n.CompactNumberFormatSymbols_mg_MG", "goog.i18n.CompactNumberFormatSymbols_mgh", "goog.i18n.CompactNumberFormatSymbols_mgh_MZ", "goog.i18n.CompactNumberFormatSymbols_mgo", "goog.i18n.CompactNumberFormatSymbols_mgo_CM", "goog.i18n.CompactNumberFormatSymbols_mk", "goog.i18n.CompactNumberFormatSymbols_mk_MK", "goog.i18n.CompactNumberFormatSymbols_mn", +"goog.i18n.CompactNumberFormatSymbols_mn_Cyrl", "goog.i18n.CompactNumberFormatSymbols_mn_Cyrl_MN", "goog.i18n.CompactNumberFormatSymbols_ms_Latn", "goog.i18n.CompactNumberFormatSymbols_ms_Latn_BN", "goog.i18n.CompactNumberFormatSymbols_ms_Latn_SG", "goog.i18n.CompactNumberFormatSymbols_mua", "goog.i18n.CompactNumberFormatSymbols_mua_CM", "goog.i18n.CompactNumberFormatSymbols_my", "goog.i18n.CompactNumberFormatSymbols_my_MM", "goog.i18n.CompactNumberFormatSymbols_naq", "goog.i18n.CompactNumberFormatSymbols_naq_NA", +"goog.i18n.CompactNumberFormatSymbols_nd", "goog.i18n.CompactNumberFormatSymbols_nd_ZW", "goog.i18n.CompactNumberFormatSymbols_ne", "goog.i18n.CompactNumberFormatSymbols_ne_IN", "goog.i18n.CompactNumberFormatSymbols_ne_NP", "goog.i18n.CompactNumberFormatSymbols_nl_AW", "goog.i18n.CompactNumberFormatSymbols_nl_BE", "goog.i18n.CompactNumberFormatSymbols_nl_CW", "goog.i18n.CompactNumberFormatSymbols_nl_SR", "goog.i18n.CompactNumberFormatSymbols_nl_SX", "goog.i18n.CompactNumberFormatSymbols_nmg", "goog.i18n.CompactNumberFormatSymbols_nmg_CM", +"goog.i18n.CompactNumberFormatSymbols_nn", "goog.i18n.CompactNumberFormatSymbols_nn_NO", "goog.i18n.CompactNumberFormatSymbols_nnh", "goog.i18n.CompactNumberFormatSymbols_nnh_CM", "goog.i18n.CompactNumberFormatSymbols_nr", "goog.i18n.CompactNumberFormatSymbols_nr_ZA", "goog.i18n.CompactNumberFormatSymbols_nso", "goog.i18n.CompactNumberFormatSymbols_nso_ZA", "goog.i18n.CompactNumberFormatSymbols_nus", "goog.i18n.CompactNumberFormatSymbols_nus_SD", "goog.i18n.CompactNumberFormatSymbols_nyn", "goog.i18n.CompactNumberFormatSymbols_nyn_UG", +"goog.i18n.CompactNumberFormatSymbols_om", "goog.i18n.CompactNumberFormatSymbols_om_ET", "goog.i18n.CompactNumberFormatSymbols_om_KE", "goog.i18n.CompactNumberFormatSymbols_os", "goog.i18n.CompactNumberFormatSymbols_os_GE", "goog.i18n.CompactNumberFormatSymbols_os_RU", "goog.i18n.CompactNumberFormatSymbols_pa", "goog.i18n.CompactNumberFormatSymbols_pa_Arab", "goog.i18n.CompactNumberFormatSymbols_pa_Arab_PK", "goog.i18n.CompactNumberFormatSymbols_pa_Guru", "goog.i18n.CompactNumberFormatSymbols_pa_Guru_IN", +"goog.i18n.CompactNumberFormatSymbols_ps", "goog.i18n.CompactNumberFormatSymbols_ps_AF", "goog.i18n.CompactNumberFormatSymbols_pt_AO", "goog.i18n.CompactNumberFormatSymbols_pt_CV", "goog.i18n.CompactNumberFormatSymbols_pt_GW", "goog.i18n.CompactNumberFormatSymbols_pt_MO", "goog.i18n.CompactNumberFormatSymbols_pt_MZ", "goog.i18n.CompactNumberFormatSymbols_pt_ST", "goog.i18n.CompactNumberFormatSymbols_pt_TL", "goog.i18n.CompactNumberFormatSymbols_rm", "goog.i18n.CompactNumberFormatSymbols_rm_CH", "goog.i18n.CompactNumberFormatSymbols_rn", +"goog.i18n.CompactNumberFormatSymbols_rn_BI", "goog.i18n.CompactNumberFormatSymbols_ro_MD", "goog.i18n.CompactNumberFormatSymbols_rof", "goog.i18n.CompactNumberFormatSymbols_rof_TZ", "goog.i18n.CompactNumberFormatSymbols_ru_BY", "goog.i18n.CompactNumberFormatSymbols_ru_KG", "goog.i18n.CompactNumberFormatSymbols_ru_KZ", "goog.i18n.CompactNumberFormatSymbols_ru_MD", "goog.i18n.CompactNumberFormatSymbols_ru_UA", "goog.i18n.CompactNumberFormatSymbols_rw", "goog.i18n.CompactNumberFormatSymbols_rw_RW", +"goog.i18n.CompactNumberFormatSymbols_rwk", "goog.i18n.CompactNumberFormatSymbols_rwk_TZ", "goog.i18n.CompactNumberFormatSymbols_sah", "goog.i18n.CompactNumberFormatSymbols_sah_RU", "goog.i18n.CompactNumberFormatSymbols_saq", "goog.i18n.CompactNumberFormatSymbols_saq_KE", "goog.i18n.CompactNumberFormatSymbols_sbp", "goog.i18n.CompactNumberFormatSymbols_sbp_TZ", "goog.i18n.CompactNumberFormatSymbols_se", "goog.i18n.CompactNumberFormatSymbols_se_FI", "goog.i18n.CompactNumberFormatSymbols_se_NO", "goog.i18n.CompactNumberFormatSymbols_seh", +"goog.i18n.CompactNumberFormatSymbols_seh_MZ", "goog.i18n.CompactNumberFormatSymbols_ses", "goog.i18n.CompactNumberFormatSymbols_ses_ML", "goog.i18n.CompactNumberFormatSymbols_sg", "goog.i18n.CompactNumberFormatSymbols_sg_CF", "goog.i18n.CompactNumberFormatSymbols_shi", "goog.i18n.CompactNumberFormatSymbols_shi_Latn", "goog.i18n.CompactNumberFormatSymbols_shi_Latn_MA", "goog.i18n.CompactNumberFormatSymbols_shi_Tfng", "goog.i18n.CompactNumberFormatSymbols_shi_Tfng_MA", "goog.i18n.CompactNumberFormatSymbols_si", +"goog.i18n.CompactNumberFormatSymbols_si_LK", "goog.i18n.CompactNumberFormatSymbols_sn", "goog.i18n.CompactNumberFormatSymbols_sn_ZW", "goog.i18n.CompactNumberFormatSymbols_so", "goog.i18n.CompactNumberFormatSymbols_so_DJ", "goog.i18n.CompactNumberFormatSymbols_so_ET", "goog.i18n.CompactNumberFormatSymbols_so_KE", "goog.i18n.CompactNumberFormatSymbols_so_SO", "goog.i18n.CompactNumberFormatSymbols_sq_MK", "goog.i18n.CompactNumberFormatSymbols_sq_XK", "goog.i18n.CompactNumberFormatSymbols_sr_Cyrl", +"goog.i18n.CompactNumberFormatSymbols_sr_Cyrl_BA", "goog.i18n.CompactNumberFormatSymbols_sr_Cyrl_ME", "goog.i18n.CompactNumberFormatSymbols_sr_Cyrl_XK", "goog.i18n.CompactNumberFormatSymbols_sr_Latn", "goog.i18n.CompactNumberFormatSymbols_sr_Latn_BA", "goog.i18n.CompactNumberFormatSymbols_sr_Latn_ME", "goog.i18n.CompactNumberFormatSymbols_sr_Latn_RS", "goog.i18n.CompactNumberFormatSymbols_sr_Latn_XK", "goog.i18n.CompactNumberFormatSymbols_ss", "goog.i18n.CompactNumberFormatSymbols_ss_SZ", "goog.i18n.CompactNumberFormatSymbols_ss_ZA", +"goog.i18n.CompactNumberFormatSymbols_ssy", "goog.i18n.CompactNumberFormatSymbols_ssy_ER", "goog.i18n.CompactNumberFormatSymbols_st", "goog.i18n.CompactNumberFormatSymbols_st_LS", "goog.i18n.CompactNumberFormatSymbols_st_ZA", "goog.i18n.CompactNumberFormatSymbols_sv_AX", "goog.i18n.CompactNumberFormatSymbols_sv_FI", "goog.i18n.CompactNumberFormatSymbols_sw_KE", "goog.i18n.CompactNumberFormatSymbols_sw_UG", "goog.i18n.CompactNumberFormatSymbols_swc", "goog.i18n.CompactNumberFormatSymbols_swc_CD", +"goog.i18n.CompactNumberFormatSymbols_ta_LK", "goog.i18n.CompactNumberFormatSymbols_ta_MY", "goog.i18n.CompactNumberFormatSymbols_ta_SG", "goog.i18n.CompactNumberFormatSymbols_teo", "goog.i18n.CompactNumberFormatSymbols_teo_KE", "goog.i18n.CompactNumberFormatSymbols_teo_UG", "goog.i18n.CompactNumberFormatSymbols_tg", "goog.i18n.CompactNumberFormatSymbols_tg_Cyrl", "goog.i18n.CompactNumberFormatSymbols_tg_Cyrl_TJ", "goog.i18n.CompactNumberFormatSymbols_ti", "goog.i18n.CompactNumberFormatSymbols_ti_ER", +"goog.i18n.CompactNumberFormatSymbols_ti_ET", "goog.i18n.CompactNumberFormatSymbols_tig", "goog.i18n.CompactNumberFormatSymbols_tig_ER", "goog.i18n.CompactNumberFormatSymbols_tn", "goog.i18n.CompactNumberFormatSymbols_tn_BW", "goog.i18n.CompactNumberFormatSymbols_tn_ZA", "goog.i18n.CompactNumberFormatSymbols_to", "goog.i18n.CompactNumberFormatSymbols_to_TO", "goog.i18n.CompactNumberFormatSymbols_tr_CY", "goog.i18n.CompactNumberFormatSymbols_ts", "goog.i18n.CompactNumberFormatSymbols_ts_ZA", "goog.i18n.CompactNumberFormatSymbols_twq", +"goog.i18n.CompactNumberFormatSymbols_twq_NE", "goog.i18n.CompactNumberFormatSymbols_tzm", "goog.i18n.CompactNumberFormatSymbols_tzm_Latn", "goog.i18n.CompactNumberFormatSymbols_tzm_Latn_MA", "goog.i18n.CompactNumberFormatSymbols_ur_IN", "goog.i18n.CompactNumberFormatSymbols_uz", "goog.i18n.CompactNumberFormatSymbols_uz_Arab", "goog.i18n.CompactNumberFormatSymbols_uz_Arab_AF", "goog.i18n.CompactNumberFormatSymbols_uz_Cyrl", "goog.i18n.CompactNumberFormatSymbols_uz_Cyrl_UZ", "goog.i18n.CompactNumberFormatSymbols_uz_Latn", +"goog.i18n.CompactNumberFormatSymbols_uz_Latn_UZ", "goog.i18n.CompactNumberFormatSymbols_vai", "goog.i18n.CompactNumberFormatSymbols_vai_Latn", "goog.i18n.CompactNumberFormatSymbols_vai_Latn_LR", "goog.i18n.CompactNumberFormatSymbols_vai_Vaii", "goog.i18n.CompactNumberFormatSymbols_vai_Vaii_LR", "goog.i18n.CompactNumberFormatSymbols_ve", "goog.i18n.CompactNumberFormatSymbols_ve_ZA", "goog.i18n.CompactNumberFormatSymbols_vo", "goog.i18n.CompactNumberFormatSymbols_vun", "goog.i18n.CompactNumberFormatSymbols_vun_TZ", +"goog.i18n.CompactNumberFormatSymbols_wae", "goog.i18n.CompactNumberFormatSymbols_wae_CH", "goog.i18n.CompactNumberFormatSymbols_wal", "goog.i18n.CompactNumberFormatSymbols_wal_ET", "goog.i18n.CompactNumberFormatSymbols_xh", "goog.i18n.CompactNumberFormatSymbols_xh_ZA", "goog.i18n.CompactNumberFormatSymbols_xog", "goog.i18n.CompactNumberFormatSymbols_xog_UG", "goog.i18n.CompactNumberFormatSymbols_yav", "goog.i18n.CompactNumberFormatSymbols_yav_CM", "goog.i18n.CompactNumberFormatSymbols_yo", "goog.i18n.CompactNumberFormatSymbols_yo_NG", +"goog.i18n.CompactNumberFormatSymbols_zh_Hans", "goog.i18n.CompactNumberFormatSymbols_zh_Hans_HK", "goog.i18n.CompactNumberFormatSymbols_zh_Hans_MO", "goog.i18n.CompactNumberFormatSymbols_zh_Hans_SG", "goog.i18n.CompactNumberFormatSymbols_zh_Hant", "goog.i18n.CompactNumberFormatSymbols_zh_Hant_HK", "goog.i18n.CompactNumberFormatSymbols_zh_Hant_MO", "goog.i18n.CompactNumberFormatSymbols_zh_Hant_TW"], []); +goog.addDependency("/closure/goog/i18n/currency.js", ["goog.i18n.currency", "goog.i18n.currency.CurrencyInfo", "goog.i18n.currency.CurrencyInfoTier2"], []); +goog.addDependency("/closure/goog/i18n/currencycodemap.js", ["goog.i18n.currencyCodeMap", "goog.i18n.currencyCodeMapTier2"], []); +goog.addDependency("/closure/goog/i18n/datetimeformat.js", ["goog.i18n.DateTimeFormat", "goog.i18n.DateTimeFormat.Format"], ["goog.asserts", "goog.i18n.DateTimeSymbols", "goog.i18n.TimeZone", "goog.string"]); +goog.addDependency("/closure/goog/i18n/datetimeparse.js", ["goog.i18n.DateTimeParse"], ["goog.i18n.DateTimeFormat", "goog.i18n.DateTimeSymbols"]); +goog.addDependency("/closure/goog/i18n/datetimepatterns.js", ["goog.i18n.DateTimePatterns", "goog.i18n.DateTimePatterns_af", "goog.i18n.DateTimePatterns_am", "goog.i18n.DateTimePatterns_ar", "goog.i18n.DateTimePatterns_bg", "goog.i18n.DateTimePatterns_bn", "goog.i18n.DateTimePatterns_br", "goog.i18n.DateTimePatterns_ca", "goog.i18n.DateTimePatterns_chr", "goog.i18n.DateTimePatterns_cs", "goog.i18n.DateTimePatterns_cy", "goog.i18n.DateTimePatterns_da", "goog.i18n.DateTimePatterns_de", "goog.i18n.DateTimePatterns_de_AT", +"goog.i18n.DateTimePatterns_de_CH", "goog.i18n.DateTimePatterns_el", "goog.i18n.DateTimePatterns_en", "goog.i18n.DateTimePatterns_en_AU", "goog.i18n.DateTimePatterns_en_GB", "goog.i18n.DateTimePatterns_en_IE", "goog.i18n.DateTimePatterns_en_IN", "goog.i18n.DateTimePatterns_en_SG", "goog.i18n.DateTimePatterns_en_US", "goog.i18n.DateTimePatterns_en_ZA", "goog.i18n.DateTimePatterns_es", "goog.i18n.DateTimePatterns_es_419", "goog.i18n.DateTimePatterns_es_ES", "goog.i18n.DateTimePatterns_et", "goog.i18n.DateTimePatterns_eu", +"goog.i18n.DateTimePatterns_fa", "goog.i18n.DateTimePatterns_fi", "goog.i18n.DateTimePatterns_fil", "goog.i18n.DateTimePatterns_fr", "goog.i18n.DateTimePatterns_fr_CA", "goog.i18n.DateTimePatterns_gl", "goog.i18n.DateTimePatterns_gsw", "goog.i18n.DateTimePatterns_gu", "goog.i18n.DateTimePatterns_haw", "goog.i18n.DateTimePatterns_he", "goog.i18n.DateTimePatterns_hi", "goog.i18n.DateTimePatterns_hr", "goog.i18n.DateTimePatterns_hu", "goog.i18n.DateTimePatterns_id", "goog.i18n.DateTimePatterns_in", +"goog.i18n.DateTimePatterns_is", "goog.i18n.DateTimePatterns_it", "goog.i18n.DateTimePatterns_iw", "goog.i18n.DateTimePatterns_ja", "goog.i18n.DateTimePatterns_kn", "goog.i18n.DateTimePatterns_ko", "goog.i18n.DateTimePatterns_ln", "goog.i18n.DateTimePatterns_lt", "goog.i18n.DateTimePatterns_lv", "goog.i18n.DateTimePatterns_ml", "goog.i18n.DateTimePatterns_mo", "goog.i18n.DateTimePatterns_mr", "goog.i18n.DateTimePatterns_ms", "goog.i18n.DateTimePatterns_mt", "goog.i18n.DateTimePatterns_nb", "goog.i18n.DateTimePatterns_nl", +"goog.i18n.DateTimePatterns_no", "goog.i18n.DateTimePatterns_or", "goog.i18n.DateTimePatterns_pl", "goog.i18n.DateTimePatterns_pt", "goog.i18n.DateTimePatterns_pt_BR", "goog.i18n.DateTimePatterns_pt_PT", "goog.i18n.DateTimePatterns_ro", "goog.i18n.DateTimePatterns_ru", "goog.i18n.DateTimePatterns_sk", "goog.i18n.DateTimePatterns_sl", "goog.i18n.DateTimePatterns_sq", "goog.i18n.DateTimePatterns_sr", "goog.i18n.DateTimePatterns_sv", "goog.i18n.DateTimePatterns_sw", "goog.i18n.DateTimePatterns_ta", +"goog.i18n.DateTimePatterns_te", "goog.i18n.DateTimePatterns_th", "goog.i18n.DateTimePatterns_tl", "goog.i18n.DateTimePatterns_tr", "goog.i18n.DateTimePatterns_uk", "goog.i18n.DateTimePatterns_ur", "goog.i18n.DateTimePatterns_vi", "goog.i18n.DateTimePatterns_zh", "goog.i18n.DateTimePatterns_zh_CN", "goog.i18n.DateTimePatterns_zh_HK", "goog.i18n.DateTimePatterns_zh_TW", "goog.i18n.DateTimePatterns_zu"], []); +goog.addDependency("/closure/goog/i18n/datetimepatternsext.js", ["goog.i18n.DateTimePatternsExt", "goog.i18n.DateTimePatterns_af_NA", "goog.i18n.DateTimePatterns_af_ZA", "goog.i18n.DateTimePatterns_agq", "goog.i18n.DateTimePatterns_agq_CM", "goog.i18n.DateTimePatterns_ak", "goog.i18n.DateTimePatterns_ak_GH", "goog.i18n.DateTimePatterns_am_ET", "goog.i18n.DateTimePatterns_ar_001", "goog.i18n.DateTimePatterns_ar_AE", "goog.i18n.DateTimePatterns_ar_BH", "goog.i18n.DateTimePatterns_ar_DJ", "goog.i18n.DateTimePatterns_ar_DZ", +"goog.i18n.DateTimePatterns_ar_EG", "goog.i18n.DateTimePatterns_ar_EH", "goog.i18n.DateTimePatterns_ar_ER", "goog.i18n.DateTimePatterns_ar_IL", "goog.i18n.DateTimePatterns_ar_IQ", "goog.i18n.DateTimePatterns_ar_JO", "goog.i18n.DateTimePatterns_ar_KM", "goog.i18n.DateTimePatterns_ar_KW", "goog.i18n.DateTimePatterns_ar_LB", "goog.i18n.DateTimePatterns_ar_LY", "goog.i18n.DateTimePatterns_ar_MA", "goog.i18n.DateTimePatterns_ar_MR", "goog.i18n.DateTimePatterns_ar_OM", "goog.i18n.DateTimePatterns_ar_PS", +"goog.i18n.DateTimePatterns_ar_QA", "goog.i18n.DateTimePatterns_ar_SA", "goog.i18n.DateTimePatterns_ar_SD", "goog.i18n.DateTimePatterns_ar_SO", "goog.i18n.DateTimePatterns_ar_SY", "goog.i18n.DateTimePatterns_ar_TD", "goog.i18n.DateTimePatterns_ar_TN", "goog.i18n.DateTimePatterns_ar_YE", "goog.i18n.DateTimePatterns_as", "goog.i18n.DateTimePatterns_as_IN", "goog.i18n.DateTimePatterns_asa", "goog.i18n.DateTimePatterns_asa_TZ", "goog.i18n.DateTimePatterns_az", "goog.i18n.DateTimePatterns_az_Cyrl", "goog.i18n.DateTimePatterns_az_Cyrl_AZ", +"goog.i18n.DateTimePatterns_az_Latn", "goog.i18n.DateTimePatterns_az_Latn_AZ", "goog.i18n.DateTimePatterns_bas", "goog.i18n.DateTimePatterns_bas_CM", "goog.i18n.DateTimePatterns_be", "goog.i18n.DateTimePatterns_be_BY", "goog.i18n.DateTimePatterns_bem", "goog.i18n.DateTimePatterns_bem_ZM", "goog.i18n.DateTimePatterns_bez", "goog.i18n.DateTimePatterns_bez_TZ", "goog.i18n.DateTimePatterns_bg_BG", "goog.i18n.DateTimePatterns_bm", "goog.i18n.DateTimePatterns_bm_ML", "goog.i18n.DateTimePatterns_bn_BD", +"goog.i18n.DateTimePatterns_bn_IN", "goog.i18n.DateTimePatterns_bo", "goog.i18n.DateTimePatterns_bo_CN", "goog.i18n.DateTimePatterns_bo_IN", "goog.i18n.DateTimePatterns_br_FR", "goog.i18n.DateTimePatterns_brx", "goog.i18n.DateTimePatterns_brx_IN", "goog.i18n.DateTimePatterns_bs", "goog.i18n.DateTimePatterns_bs_Cyrl", "goog.i18n.DateTimePatterns_bs_Cyrl_BA", "goog.i18n.DateTimePatterns_bs_Latn", "goog.i18n.DateTimePatterns_bs_Latn_BA", "goog.i18n.DateTimePatterns_ca_AD", "goog.i18n.DateTimePatterns_ca_ES", +"goog.i18n.DateTimePatterns_cgg", "goog.i18n.DateTimePatterns_cgg_UG", "goog.i18n.DateTimePatterns_chr_US", "goog.i18n.DateTimePatterns_cs_CZ", "goog.i18n.DateTimePatterns_cy_GB", "goog.i18n.DateTimePatterns_da_DK", "goog.i18n.DateTimePatterns_dav", "goog.i18n.DateTimePatterns_dav_KE", "goog.i18n.DateTimePatterns_de_BE", "goog.i18n.DateTimePatterns_de_DE", "goog.i18n.DateTimePatterns_de_LI", "goog.i18n.DateTimePatterns_de_LU", "goog.i18n.DateTimePatterns_dje", "goog.i18n.DateTimePatterns_dje_NE", +"goog.i18n.DateTimePatterns_dua", "goog.i18n.DateTimePatterns_dua_CM", "goog.i18n.DateTimePatterns_dyo", "goog.i18n.DateTimePatterns_dyo_SN", "goog.i18n.DateTimePatterns_dz", "goog.i18n.DateTimePatterns_dz_BT", "goog.i18n.DateTimePatterns_ebu", "goog.i18n.DateTimePatterns_ebu_KE", "goog.i18n.DateTimePatterns_ee", "goog.i18n.DateTimePatterns_ee_GH", "goog.i18n.DateTimePatterns_ee_TG", "goog.i18n.DateTimePatterns_el_CY", "goog.i18n.DateTimePatterns_el_GR", "goog.i18n.DateTimePatterns_en_150", "goog.i18n.DateTimePatterns_en_AG", +"goog.i18n.DateTimePatterns_en_AS", "goog.i18n.DateTimePatterns_en_BB", "goog.i18n.DateTimePatterns_en_BE", "goog.i18n.DateTimePatterns_en_BM", "goog.i18n.DateTimePatterns_en_BS", "goog.i18n.DateTimePatterns_en_BW", "goog.i18n.DateTimePatterns_en_BZ", "goog.i18n.DateTimePatterns_en_CA", "goog.i18n.DateTimePatterns_en_CM", "goog.i18n.DateTimePatterns_en_DM", "goog.i18n.DateTimePatterns_en_FJ", "goog.i18n.DateTimePatterns_en_FM", "goog.i18n.DateTimePatterns_en_GD", "goog.i18n.DateTimePatterns_en_GG", +"goog.i18n.DateTimePatterns_en_GH", "goog.i18n.DateTimePatterns_en_GI", "goog.i18n.DateTimePatterns_en_GM", "goog.i18n.DateTimePatterns_en_GU", "goog.i18n.DateTimePatterns_en_GY", "goog.i18n.DateTimePatterns_en_HK", "goog.i18n.DateTimePatterns_en_IM", "goog.i18n.DateTimePatterns_en_JE", "goog.i18n.DateTimePatterns_en_JM", "goog.i18n.DateTimePatterns_en_KE", "goog.i18n.DateTimePatterns_en_KI", "goog.i18n.DateTimePatterns_en_KN", "goog.i18n.DateTimePatterns_en_KY", "goog.i18n.DateTimePatterns_en_LC", +"goog.i18n.DateTimePatterns_en_LR", "goog.i18n.DateTimePatterns_en_LS", "goog.i18n.DateTimePatterns_en_MG", "goog.i18n.DateTimePatterns_en_MH", "goog.i18n.DateTimePatterns_en_MP", "goog.i18n.DateTimePatterns_en_MT", "goog.i18n.DateTimePatterns_en_MU", "goog.i18n.DateTimePatterns_en_MW", "goog.i18n.DateTimePatterns_en_NA", "goog.i18n.DateTimePatterns_en_NG", "goog.i18n.DateTimePatterns_en_NZ", "goog.i18n.DateTimePatterns_en_PG", "goog.i18n.DateTimePatterns_en_PH", "goog.i18n.DateTimePatterns_en_PK", +"goog.i18n.DateTimePatterns_en_PR", "goog.i18n.DateTimePatterns_en_PW", "goog.i18n.DateTimePatterns_en_SB", "goog.i18n.DateTimePatterns_en_SC", "goog.i18n.DateTimePatterns_en_SL", "goog.i18n.DateTimePatterns_en_SS", "goog.i18n.DateTimePatterns_en_SZ", "goog.i18n.DateTimePatterns_en_TC", "goog.i18n.DateTimePatterns_en_TO", "goog.i18n.DateTimePatterns_en_TT", "goog.i18n.DateTimePatterns_en_TZ", "goog.i18n.DateTimePatterns_en_UG", "goog.i18n.DateTimePatterns_en_UM", "goog.i18n.DateTimePatterns_en_US_POSIX", +"goog.i18n.DateTimePatterns_en_VC", "goog.i18n.DateTimePatterns_en_VG", "goog.i18n.DateTimePatterns_en_VI", "goog.i18n.DateTimePatterns_en_VU", "goog.i18n.DateTimePatterns_en_WS", "goog.i18n.DateTimePatterns_en_ZM", "goog.i18n.DateTimePatterns_en_ZW", "goog.i18n.DateTimePatterns_eo", "goog.i18n.DateTimePatterns_es_AR", "goog.i18n.DateTimePatterns_es_BO", "goog.i18n.DateTimePatterns_es_CL", "goog.i18n.DateTimePatterns_es_CO", "goog.i18n.DateTimePatterns_es_CR", "goog.i18n.DateTimePatterns_es_CU", +"goog.i18n.DateTimePatterns_es_DO", "goog.i18n.DateTimePatterns_es_EA", "goog.i18n.DateTimePatterns_es_EC", "goog.i18n.DateTimePatterns_es_GQ", "goog.i18n.DateTimePatterns_es_GT", "goog.i18n.DateTimePatterns_es_HN", "goog.i18n.DateTimePatterns_es_IC", "goog.i18n.DateTimePatterns_es_MX", "goog.i18n.DateTimePatterns_es_NI", "goog.i18n.DateTimePatterns_es_PA", "goog.i18n.DateTimePatterns_es_PE", "goog.i18n.DateTimePatterns_es_PH", "goog.i18n.DateTimePatterns_es_PR", "goog.i18n.DateTimePatterns_es_PY", +"goog.i18n.DateTimePatterns_es_SV", "goog.i18n.DateTimePatterns_es_US", "goog.i18n.DateTimePatterns_es_UY", "goog.i18n.DateTimePatterns_es_VE", "goog.i18n.DateTimePatterns_et_EE", "goog.i18n.DateTimePatterns_eu_ES", "goog.i18n.DateTimePatterns_ewo", "goog.i18n.DateTimePatterns_ewo_CM", "goog.i18n.DateTimePatterns_fa_AF", "goog.i18n.DateTimePatterns_fa_IR", "goog.i18n.DateTimePatterns_ff", "goog.i18n.DateTimePatterns_ff_SN", "goog.i18n.DateTimePatterns_fi_FI", "goog.i18n.DateTimePatterns_fil_PH", +"goog.i18n.DateTimePatterns_fo", "goog.i18n.DateTimePatterns_fo_FO", "goog.i18n.DateTimePatterns_fr_BE", "goog.i18n.DateTimePatterns_fr_BF", "goog.i18n.DateTimePatterns_fr_BI", "goog.i18n.DateTimePatterns_fr_BJ", "goog.i18n.DateTimePatterns_fr_BL", "goog.i18n.DateTimePatterns_fr_CD", "goog.i18n.DateTimePatterns_fr_CF", "goog.i18n.DateTimePatterns_fr_CG", "goog.i18n.DateTimePatterns_fr_CH", "goog.i18n.DateTimePatterns_fr_CI", "goog.i18n.DateTimePatterns_fr_CM", "goog.i18n.DateTimePatterns_fr_DJ", +"goog.i18n.DateTimePatterns_fr_DZ", "goog.i18n.DateTimePatterns_fr_FR", "goog.i18n.DateTimePatterns_fr_GA", "goog.i18n.DateTimePatterns_fr_GF", "goog.i18n.DateTimePatterns_fr_GN", "goog.i18n.DateTimePatterns_fr_GP", "goog.i18n.DateTimePatterns_fr_GQ", "goog.i18n.DateTimePatterns_fr_HT", "goog.i18n.DateTimePatterns_fr_KM", "goog.i18n.DateTimePatterns_fr_LU", "goog.i18n.DateTimePatterns_fr_MA", "goog.i18n.DateTimePatterns_fr_MC", "goog.i18n.DateTimePatterns_fr_MF", "goog.i18n.DateTimePatterns_fr_MG", +"goog.i18n.DateTimePatterns_fr_ML", "goog.i18n.DateTimePatterns_fr_MQ", "goog.i18n.DateTimePatterns_fr_MR", "goog.i18n.DateTimePatterns_fr_MU", "goog.i18n.DateTimePatterns_fr_NC", "goog.i18n.DateTimePatterns_fr_NE", "goog.i18n.DateTimePatterns_fr_PF", "goog.i18n.DateTimePatterns_fr_RE", "goog.i18n.DateTimePatterns_fr_RW", "goog.i18n.DateTimePatterns_fr_SC", "goog.i18n.DateTimePatterns_fr_SN", "goog.i18n.DateTimePatterns_fr_SY", "goog.i18n.DateTimePatterns_fr_TD", "goog.i18n.DateTimePatterns_fr_TG", +"goog.i18n.DateTimePatterns_fr_TN", "goog.i18n.DateTimePatterns_fr_VU", "goog.i18n.DateTimePatterns_fr_YT", "goog.i18n.DateTimePatterns_ga", "goog.i18n.DateTimePatterns_ga_IE", "goog.i18n.DateTimePatterns_gl_ES", "goog.i18n.DateTimePatterns_gsw_CH", "goog.i18n.DateTimePatterns_gu_IN", "goog.i18n.DateTimePatterns_guz", "goog.i18n.DateTimePatterns_guz_KE", "goog.i18n.DateTimePatterns_gv", "goog.i18n.DateTimePatterns_gv_GB", "goog.i18n.DateTimePatterns_ha", "goog.i18n.DateTimePatterns_ha_Latn", "goog.i18n.DateTimePatterns_ha_Latn_GH", +"goog.i18n.DateTimePatterns_ha_Latn_NE", "goog.i18n.DateTimePatterns_ha_Latn_NG", "goog.i18n.DateTimePatterns_haw_US", "goog.i18n.DateTimePatterns_he_IL", "goog.i18n.DateTimePatterns_hi_IN", "goog.i18n.DateTimePatterns_hr_BA", "goog.i18n.DateTimePatterns_hr_HR", "goog.i18n.DateTimePatterns_hu_HU", "goog.i18n.DateTimePatterns_hy", "goog.i18n.DateTimePatterns_hy_AM", "goog.i18n.DateTimePatterns_id_ID", "goog.i18n.DateTimePatterns_ig", "goog.i18n.DateTimePatterns_ig_NG", "goog.i18n.DateTimePatterns_ii", +"goog.i18n.DateTimePatterns_ii_CN", "goog.i18n.DateTimePatterns_is_IS", "goog.i18n.DateTimePatterns_it_CH", "goog.i18n.DateTimePatterns_it_IT", "goog.i18n.DateTimePatterns_it_SM", "goog.i18n.DateTimePatterns_ja_JP", "goog.i18n.DateTimePatterns_jgo", "goog.i18n.DateTimePatterns_jgo_CM", "goog.i18n.DateTimePatterns_jmc", "goog.i18n.DateTimePatterns_jmc_TZ", "goog.i18n.DateTimePatterns_ka", "goog.i18n.DateTimePatterns_ka_GE", "goog.i18n.DateTimePatterns_kab", "goog.i18n.DateTimePatterns_kab_DZ", "goog.i18n.DateTimePatterns_kam", +"goog.i18n.DateTimePatterns_kam_KE", "goog.i18n.DateTimePatterns_kde", "goog.i18n.DateTimePatterns_kde_TZ", "goog.i18n.DateTimePatterns_kea", "goog.i18n.DateTimePatterns_kea_CV", "goog.i18n.DateTimePatterns_khq", "goog.i18n.DateTimePatterns_khq_ML", "goog.i18n.DateTimePatterns_ki", "goog.i18n.DateTimePatterns_ki_KE", "goog.i18n.DateTimePatterns_kk", "goog.i18n.DateTimePatterns_kk_Cyrl", "goog.i18n.DateTimePatterns_kk_Cyrl_KZ", "goog.i18n.DateTimePatterns_kl", "goog.i18n.DateTimePatterns_kl_GL", "goog.i18n.DateTimePatterns_kln", +"goog.i18n.DateTimePatterns_kln_KE", "goog.i18n.DateTimePatterns_km", "goog.i18n.DateTimePatterns_km_KH", "goog.i18n.DateTimePatterns_kn_IN", "goog.i18n.DateTimePatterns_ko_KP", "goog.i18n.DateTimePatterns_ko_KR", "goog.i18n.DateTimePatterns_kok", "goog.i18n.DateTimePatterns_kok_IN", "goog.i18n.DateTimePatterns_ks", "goog.i18n.DateTimePatterns_ks_Arab", "goog.i18n.DateTimePatterns_ks_Arab_IN", "goog.i18n.DateTimePatterns_ksb", "goog.i18n.DateTimePatterns_ksb_TZ", "goog.i18n.DateTimePatterns_ksf", +"goog.i18n.DateTimePatterns_ksf_CM", "goog.i18n.DateTimePatterns_kw", "goog.i18n.DateTimePatterns_kw_GB", "goog.i18n.DateTimePatterns_lag", "goog.i18n.DateTimePatterns_lag_TZ", "goog.i18n.DateTimePatterns_lg", "goog.i18n.DateTimePatterns_lg_UG", "goog.i18n.DateTimePatterns_ln_AO", "goog.i18n.DateTimePatterns_ln_CD", "goog.i18n.DateTimePatterns_ln_CF", "goog.i18n.DateTimePatterns_ln_CG", "goog.i18n.DateTimePatterns_lo", "goog.i18n.DateTimePatterns_lo_LA", "goog.i18n.DateTimePatterns_lt_LT", "goog.i18n.DateTimePatterns_lu", +"goog.i18n.DateTimePatterns_lu_CD", "goog.i18n.DateTimePatterns_luo", "goog.i18n.DateTimePatterns_luo_KE", "goog.i18n.DateTimePatterns_luy", "goog.i18n.DateTimePatterns_luy_KE", "goog.i18n.DateTimePatterns_lv_LV", "goog.i18n.DateTimePatterns_mas", "goog.i18n.DateTimePatterns_mas_KE", "goog.i18n.DateTimePatterns_mas_TZ", "goog.i18n.DateTimePatterns_mer", "goog.i18n.DateTimePatterns_mer_KE", "goog.i18n.DateTimePatterns_mfe", "goog.i18n.DateTimePatterns_mfe_MU", "goog.i18n.DateTimePatterns_mg", "goog.i18n.DateTimePatterns_mg_MG", +"goog.i18n.DateTimePatterns_mgh", "goog.i18n.DateTimePatterns_mgh_MZ", "goog.i18n.DateTimePatterns_mgo", "goog.i18n.DateTimePatterns_mgo_CM", "goog.i18n.DateTimePatterns_mk", "goog.i18n.DateTimePatterns_mk_MK", "goog.i18n.DateTimePatterns_ml_IN", "goog.i18n.DateTimePatterns_mn", "goog.i18n.DateTimePatterns_mn_Cyrl", "goog.i18n.DateTimePatterns_mn_Cyrl_MN", "goog.i18n.DateTimePatterns_mr_IN", "goog.i18n.DateTimePatterns_ms_Latn", "goog.i18n.DateTimePatterns_ms_Latn_BN", "goog.i18n.DateTimePatterns_ms_Latn_MY", +"goog.i18n.DateTimePatterns_ms_Latn_SG", "goog.i18n.DateTimePatterns_mt_MT", "goog.i18n.DateTimePatterns_mua", "goog.i18n.DateTimePatterns_mua_CM", "goog.i18n.DateTimePatterns_my", "goog.i18n.DateTimePatterns_my_MM", "goog.i18n.DateTimePatterns_naq", "goog.i18n.DateTimePatterns_naq_NA", "goog.i18n.DateTimePatterns_nb_NO", "goog.i18n.DateTimePatterns_nd", "goog.i18n.DateTimePatterns_nd_ZW", "goog.i18n.DateTimePatterns_ne", "goog.i18n.DateTimePatterns_ne_IN", "goog.i18n.DateTimePatterns_ne_NP", "goog.i18n.DateTimePatterns_nl_AW", +"goog.i18n.DateTimePatterns_nl_BE", "goog.i18n.DateTimePatterns_nl_CW", "goog.i18n.DateTimePatterns_nl_NL", "goog.i18n.DateTimePatterns_nl_SR", "goog.i18n.DateTimePatterns_nl_SX", "goog.i18n.DateTimePatterns_nmg", "goog.i18n.DateTimePatterns_nmg_CM", "goog.i18n.DateTimePatterns_nn", "goog.i18n.DateTimePatterns_nn_NO", "goog.i18n.DateTimePatterns_nus", "goog.i18n.DateTimePatterns_nus_SD", "goog.i18n.DateTimePatterns_nyn", "goog.i18n.DateTimePatterns_nyn_UG", "goog.i18n.DateTimePatterns_om", "goog.i18n.DateTimePatterns_om_ET", +"goog.i18n.DateTimePatterns_om_KE", "goog.i18n.DateTimePatterns_or_IN", "goog.i18n.DateTimePatterns_pa", "goog.i18n.DateTimePatterns_pa_Arab", "goog.i18n.DateTimePatterns_pa_Arab_PK", "goog.i18n.DateTimePatterns_pa_Guru", "goog.i18n.DateTimePatterns_pa_Guru_IN", "goog.i18n.DateTimePatterns_pl_PL", "goog.i18n.DateTimePatterns_ps", "goog.i18n.DateTimePatterns_ps_AF", "goog.i18n.DateTimePatterns_pt_AO", "goog.i18n.DateTimePatterns_pt_CV", "goog.i18n.DateTimePatterns_pt_GW", "goog.i18n.DateTimePatterns_pt_MO", +"goog.i18n.DateTimePatterns_pt_MZ", "goog.i18n.DateTimePatterns_pt_ST", "goog.i18n.DateTimePatterns_pt_TL", "goog.i18n.DateTimePatterns_rm", "goog.i18n.DateTimePatterns_rm_CH", "goog.i18n.DateTimePatterns_rn", "goog.i18n.DateTimePatterns_rn_BI", "goog.i18n.DateTimePatterns_ro_MD", "goog.i18n.DateTimePatterns_ro_RO", "goog.i18n.DateTimePatterns_rof", "goog.i18n.DateTimePatterns_rof_TZ", "goog.i18n.DateTimePatterns_ru_BY", "goog.i18n.DateTimePatterns_ru_KG", "goog.i18n.DateTimePatterns_ru_KZ", "goog.i18n.DateTimePatterns_ru_MD", +"goog.i18n.DateTimePatterns_ru_RU", "goog.i18n.DateTimePatterns_ru_UA", "goog.i18n.DateTimePatterns_rw", "goog.i18n.DateTimePatterns_rw_RW", "goog.i18n.DateTimePatterns_rwk", "goog.i18n.DateTimePatterns_rwk_TZ", "goog.i18n.DateTimePatterns_saq", "goog.i18n.DateTimePatterns_saq_KE", "goog.i18n.DateTimePatterns_sbp", "goog.i18n.DateTimePatterns_sbp_TZ", "goog.i18n.DateTimePatterns_seh", "goog.i18n.DateTimePatterns_seh_MZ", "goog.i18n.DateTimePatterns_ses", "goog.i18n.DateTimePatterns_ses_ML", "goog.i18n.DateTimePatterns_sg", +"goog.i18n.DateTimePatterns_sg_CF", "goog.i18n.DateTimePatterns_shi", "goog.i18n.DateTimePatterns_shi_Latn", "goog.i18n.DateTimePatterns_shi_Latn_MA", "goog.i18n.DateTimePatterns_shi_Tfng", "goog.i18n.DateTimePatterns_shi_Tfng_MA", "goog.i18n.DateTimePatterns_si", "goog.i18n.DateTimePatterns_si_LK", "goog.i18n.DateTimePatterns_sk_SK", "goog.i18n.DateTimePatterns_sl_SI", "goog.i18n.DateTimePatterns_sn", "goog.i18n.DateTimePatterns_sn_ZW", "goog.i18n.DateTimePatterns_so", "goog.i18n.DateTimePatterns_so_DJ", +"goog.i18n.DateTimePatterns_so_ET", "goog.i18n.DateTimePatterns_so_KE", "goog.i18n.DateTimePatterns_so_SO", "goog.i18n.DateTimePatterns_sq_AL", "goog.i18n.DateTimePatterns_sq_MK", "goog.i18n.DateTimePatterns_sr_Cyrl", "goog.i18n.DateTimePatterns_sr_Cyrl_BA", "goog.i18n.DateTimePatterns_sr_Cyrl_ME", "goog.i18n.DateTimePatterns_sr_Cyrl_RS", "goog.i18n.DateTimePatterns_sr_Latn", "goog.i18n.DateTimePatterns_sr_Latn_BA", "goog.i18n.DateTimePatterns_sr_Latn_ME", "goog.i18n.DateTimePatterns_sr_Latn_RS", +"goog.i18n.DateTimePatterns_sv_AX", "goog.i18n.DateTimePatterns_sv_FI", "goog.i18n.DateTimePatterns_sv_SE", "goog.i18n.DateTimePatterns_sw_KE", "goog.i18n.DateTimePatterns_sw_TZ", "goog.i18n.DateTimePatterns_sw_UG", "goog.i18n.DateTimePatterns_swc", "goog.i18n.DateTimePatterns_swc_CD", "goog.i18n.DateTimePatterns_ta_IN", "goog.i18n.DateTimePatterns_ta_LK", "goog.i18n.DateTimePatterns_ta_MY", "goog.i18n.DateTimePatterns_ta_SG", "goog.i18n.DateTimePatterns_te_IN", "goog.i18n.DateTimePatterns_teo", +"goog.i18n.DateTimePatterns_teo_KE", "goog.i18n.DateTimePatterns_teo_UG", "goog.i18n.DateTimePatterns_th_TH", "goog.i18n.DateTimePatterns_ti", "goog.i18n.DateTimePatterns_ti_ER", "goog.i18n.DateTimePatterns_ti_ET", "goog.i18n.DateTimePatterns_to", "goog.i18n.DateTimePatterns_to_TO", "goog.i18n.DateTimePatterns_tr_CY", "goog.i18n.DateTimePatterns_tr_TR", "goog.i18n.DateTimePatterns_twq", "goog.i18n.DateTimePatterns_twq_NE", "goog.i18n.DateTimePatterns_tzm", "goog.i18n.DateTimePatterns_tzm_Latn", "goog.i18n.DateTimePatterns_tzm_Latn_MA", +"goog.i18n.DateTimePatterns_uk_UA", "goog.i18n.DateTimePatterns_ur_IN", "goog.i18n.DateTimePatterns_ur_PK", "goog.i18n.DateTimePatterns_uz", "goog.i18n.DateTimePatterns_uz_Arab", "goog.i18n.DateTimePatterns_uz_Arab_AF", "goog.i18n.DateTimePatterns_uz_Cyrl", "goog.i18n.DateTimePatterns_uz_Cyrl_UZ", "goog.i18n.DateTimePatterns_uz_Latn", "goog.i18n.DateTimePatterns_uz_Latn_UZ", "goog.i18n.DateTimePatterns_vai", "goog.i18n.DateTimePatterns_vai_Latn", "goog.i18n.DateTimePatterns_vai_Latn_LR", "goog.i18n.DateTimePatterns_vai_Vaii", +"goog.i18n.DateTimePatterns_vai_Vaii_LR", "goog.i18n.DateTimePatterns_vi_VN", "goog.i18n.DateTimePatterns_vun", "goog.i18n.DateTimePatterns_vun_TZ", "goog.i18n.DateTimePatterns_xog", "goog.i18n.DateTimePatterns_xog_UG", "goog.i18n.DateTimePatterns_yav", "goog.i18n.DateTimePatterns_yav_CM", "goog.i18n.DateTimePatterns_yo", "goog.i18n.DateTimePatterns_yo_NG", "goog.i18n.DateTimePatterns_zh_Hans", "goog.i18n.DateTimePatterns_zh_Hans_CN", "goog.i18n.DateTimePatterns_zh_Hans_HK", "goog.i18n.DateTimePatterns_zh_Hans_MO", +"goog.i18n.DateTimePatterns_zh_Hans_SG", "goog.i18n.DateTimePatterns_zh_Hant", "goog.i18n.DateTimePatterns_zh_Hant_HK", "goog.i18n.DateTimePatterns_zh_Hant_MO", "goog.i18n.DateTimePatterns_zh_Hant_TW", "goog.i18n.DateTimePatterns_zu_ZA"], ["goog.i18n.DateTimePatterns"]); +goog.addDependency("/closure/goog/i18n/datetimesymbols.js", ["goog.i18n.DateTimeSymbols", "goog.i18n.DateTimeSymbols_af", "goog.i18n.DateTimeSymbols_am", "goog.i18n.DateTimeSymbols_ar", "goog.i18n.DateTimeSymbols_bg", "goog.i18n.DateTimeSymbols_bn", "goog.i18n.DateTimeSymbols_br", "goog.i18n.DateTimeSymbols_ca", "goog.i18n.DateTimeSymbols_chr", "goog.i18n.DateTimeSymbols_cs", "goog.i18n.DateTimeSymbols_cy", "goog.i18n.DateTimeSymbols_da", "goog.i18n.DateTimeSymbols_de", "goog.i18n.DateTimeSymbols_de_AT", +"goog.i18n.DateTimeSymbols_de_CH", "goog.i18n.DateTimeSymbols_el", "goog.i18n.DateTimeSymbols_en", "goog.i18n.DateTimeSymbols_en_AU", "goog.i18n.DateTimeSymbols_en_GB", "goog.i18n.DateTimeSymbols_en_IE", "goog.i18n.DateTimeSymbols_en_IN", "goog.i18n.DateTimeSymbols_en_ISO", "goog.i18n.DateTimeSymbols_en_SG", "goog.i18n.DateTimeSymbols_en_US", "goog.i18n.DateTimeSymbols_en_ZA", "goog.i18n.DateTimeSymbols_es", "goog.i18n.DateTimeSymbols_es_419", "goog.i18n.DateTimeSymbols_es_ES", "goog.i18n.DateTimeSymbols_et", +"goog.i18n.DateTimeSymbols_eu", "goog.i18n.DateTimeSymbols_fa", "goog.i18n.DateTimeSymbols_fi", "goog.i18n.DateTimeSymbols_fil", "goog.i18n.DateTimeSymbols_fr", "goog.i18n.DateTimeSymbols_fr_CA", "goog.i18n.DateTimeSymbols_gl", "goog.i18n.DateTimeSymbols_gsw", "goog.i18n.DateTimeSymbols_gu", "goog.i18n.DateTimeSymbols_haw", "goog.i18n.DateTimeSymbols_he", "goog.i18n.DateTimeSymbols_hi", "goog.i18n.DateTimeSymbols_hr", "goog.i18n.DateTimeSymbols_hu", "goog.i18n.DateTimeSymbols_id", "goog.i18n.DateTimeSymbols_in", +"goog.i18n.DateTimeSymbols_is", "goog.i18n.DateTimeSymbols_it", "goog.i18n.DateTimeSymbols_iw", "goog.i18n.DateTimeSymbols_ja", "goog.i18n.DateTimeSymbols_kn", "goog.i18n.DateTimeSymbols_ko", "goog.i18n.DateTimeSymbols_ln", "goog.i18n.DateTimeSymbols_lt", "goog.i18n.DateTimeSymbols_lv", "goog.i18n.DateTimeSymbols_ml", "goog.i18n.DateTimeSymbols_mr", "goog.i18n.DateTimeSymbols_ms", "goog.i18n.DateTimeSymbols_mt", "goog.i18n.DateTimeSymbols_nb", "goog.i18n.DateTimeSymbols_nl", "goog.i18n.DateTimeSymbols_no", +"goog.i18n.DateTimeSymbols_or", "goog.i18n.DateTimeSymbols_pl", "goog.i18n.DateTimeSymbols_pt", "goog.i18n.DateTimeSymbols_pt_BR", "goog.i18n.DateTimeSymbols_pt_PT", "goog.i18n.DateTimeSymbols_ro", "goog.i18n.DateTimeSymbols_ru", "goog.i18n.DateTimeSymbols_sk", "goog.i18n.DateTimeSymbols_sl", "goog.i18n.DateTimeSymbols_sq", "goog.i18n.DateTimeSymbols_sr", "goog.i18n.DateTimeSymbols_sv", "goog.i18n.DateTimeSymbols_sw", "goog.i18n.DateTimeSymbols_ta", "goog.i18n.DateTimeSymbols_te", "goog.i18n.DateTimeSymbols_th", +"goog.i18n.DateTimeSymbols_tl", "goog.i18n.DateTimeSymbols_tr", "goog.i18n.DateTimeSymbols_uk", "goog.i18n.DateTimeSymbols_ur", "goog.i18n.DateTimeSymbols_vi", "goog.i18n.DateTimeSymbols_zh", "goog.i18n.DateTimeSymbols_zh_CN", "goog.i18n.DateTimeSymbols_zh_HK", "goog.i18n.DateTimeSymbols_zh_TW", "goog.i18n.DateTimeSymbols_zu"], []); +goog.addDependency("/closure/goog/i18n/datetimesymbolsext.js", ["goog.i18n.DateTimeSymbolsExt", "goog.i18n.DateTimeSymbols_aa", "goog.i18n.DateTimeSymbols_aa_DJ", "goog.i18n.DateTimeSymbols_aa_ER", "goog.i18n.DateTimeSymbols_aa_ET", "goog.i18n.DateTimeSymbols_af_NA", "goog.i18n.DateTimeSymbols_af_ZA", "goog.i18n.DateTimeSymbols_agq", "goog.i18n.DateTimeSymbols_agq_CM", "goog.i18n.DateTimeSymbols_ak", "goog.i18n.DateTimeSymbols_ak_GH", "goog.i18n.DateTimeSymbols_am_ET", "goog.i18n.DateTimeSymbols_ar_001", +"goog.i18n.DateTimeSymbols_ar_AE", "goog.i18n.DateTimeSymbols_ar_BH", "goog.i18n.DateTimeSymbols_ar_DJ", "goog.i18n.DateTimeSymbols_ar_DZ", "goog.i18n.DateTimeSymbols_ar_EG", "goog.i18n.DateTimeSymbols_ar_EH", "goog.i18n.DateTimeSymbols_ar_ER", "goog.i18n.DateTimeSymbols_ar_IL", "goog.i18n.DateTimeSymbols_ar_IQ", "goog.i18n.DateTimeSymbols_ar_JO", "goog.i18n.DateTimeSymbols_ar_KM", "goog.i18n.DateTimeSymbols_ar_KW", "goog.i18n.DateTimeSymbols_ar_LB", "goog.i18n.DateTimeSymbols_ar_LY", "goog.i18n.DateTimeSymbols_ar_MA", +"goog.i18n.DateTimeSymbols_ar_MR", "goog.i18n.DateTimeSymbols_ar_OM", "goog.i18n.DateTimeSymbols_ar_PS", "goog.i18n.DateTimeSymbols_ar_QA", "goog.i18n.DateTimeSymbols_ar_SA", "goog.i18n.DateTimeSymbols_ar_SD", "goog.i18n.DateTimeSymbols_ar_SO", "goog.i18n.DateTimeSymbols_ar_SY", "goog.i18n.DateTimeSymbols_ar_TD", "goog.i18n.DateTimeSymbols_ar_TN", "goog.i18n.DateTimeSymbols_ar_YE", "goog.i18n.DateTimeSymbols_as", "goog.i18n.DateTimeSymbols_as_IN", "goog.i18n.DateTimeSymbols_asa", "goog.i18n.DateTimeSymbols_asa_TZ", +"goog.i18n.DateTimeSymbols_ast", "goog.i18n.DateTimeSymbols_ast_ES", "goog.i18n.DateTimeSymbols_az", "goog.i18n.DateTimeSymbols_az_Cyrl", "goog.i18n.DateTimeSymbols_az_Cyrl_AZ", "goog.i18n.DateTimeSymbols_az_Latn", "goog.i18n.DateTimeSymbols_az_Latn_AZ", "goog.i18n.DateTimeSymbols_bas", "goog.i18n.DateTimeSymbols_bas_CM", "goog.i18n.DateTimeSymbols_be", "goog.i18n.DateTimeSymbols_be_BY", "goog.i18n.DateTimeSymbols_bem", "goog.i18n.DateTimeSymbols_bem_ZM", "goog.i18n.DateTimeSymbols_bez", "goog.i18n.DateTimeSymbols_bez_TZ", +"goog.i18n.DateTimeSymbols_bg_BG", "goog.i18n.DateTimeSymbols_bm", "goog.i18n.DateTimeSymbols_bm_ML", "goog.i18n.DateTimeSymbols_bn_BD", "goog.i18n.DateTimeSymbols_bn_IN", "goog.i18n.DateTimeSymbols_bo", "goog.i18n.DateTimeSymbols_bo_CN", "goog.i18n.DateTimeSymbols_bo_IN", "goog.i18n.DateTimeSymbols_br_FR", "goog.i18n.DateTimeSymbols_brx", "goog.i18n.DateTimeSymbols_brx_IN", "goog.i18n.DateTimeSymbols_bs", "goog.i18n.DateTimeSymbols_bs_Cyrl", "goog.i18n.DateTimeSymbols_bs_Cyrl_BA", "goog.i18n.DateTimeSymbols_bs_Latn", +"goog.i18n.DateTimeSymbols_bs_Latn_BA", "goog.i18n.DateTimeSymbols_byn", "goog.i18n.DateTimeSymbols_byn_ER", "goog.i18n.DateTimeSymbols_ca_AD", "goog.i18n.DateTimeSymbols_ca_ES", "goog.i18n.DateTimeSymbols_cgg", "goog.i18n.DateTimeSymbols_cgg_UG", "goog.i18n.DateTimeSymbols_chr_US", "goog.i18n.DateTimeSymbols_ckb", "goog.i18n.DateTimeSymbols_ckb_Arab", "goog.i18n.DateTimeSymbols_ckb_Arab_IQ", "goog.i18n.DateTimeSymbols_ckb_Arab_IR", "goog.i18n.DateTimeSymbols_ckb_IQ", "goog.i18n.DateTimeSymbols_ckb_IR", +"goog.i18n.DateTimeSymbols_ckb_Latn", "goog.i18n.DateTimeSymbols_ckb_Latn_IQ", "goog.i18n.DateTimeSymbols_cs_CZ", "goog.i18n.DateTimeSymbols_cy_GB", "goog.i18n.DateTimeSymbols_da_DK", "goog.i18n.DateTimeSymbols_dav", "goog.i18n.DateTimeSymbols_dav_KE", "goog.i18n.DateTimeSymbols_de_BE", "goog.i18n.DateTimeSymbols_de_DE", "goog.i18n.DateTimeSymbols_de_LI", "goog.i18n.DateTimeSymbols_de_LU", "goog.i18n.DateTimeSymbols_dje", "goog.i18n.DateTimeSymbols_dje_NE", "goog.i18n.DateTimeSymbols_dua", "goog.i18n.DateTimeSymbols_dua_CM", +"goog.i18n.DateTimeSymbols_dyo", "goog.i18n.DateTimeSymbols_dyo_SN", "goog.i18n.DateTimeSymbols_dz", "goog.i18n.DateTimeSymbols_dz_BT", "goog.i18n.DateTimeSymbols_ebu", "goog.i18n.DateTimeSymbols_ebu_KE", "goog.i18n.DateTimeSymbols_ee", "goog.i18n.DateTimeSymbols_ee_GH", "goog.i18n.DateTimeSymbols_ee_TG", "goog.i18n.DateTimeSymbols_el_CY", "goog.i18n.DateTimeSymbols_el_GR", "goog.i18n.DateTimeSymbols_en_150", "goog.i18n.DateTimeSymbols_en_AG", "goog.i18n.DateTimeSymbols_en_AS", "goog.i18n.DateTimeSymbols_en_BB", +"goog.i18n.DateTimeSymbols_en_BE", "goog.i18n.DateTimeSymbols_en_BM", "goog.i18n.DateTimeSymbols_en_BS", "goog.i18n.DateTimeSymbols_en_BW", "goog.i18n.DateTimeSymbols_en_BZ", "goog.i18n.DateTimeSymbols_en_CA", "goog.i18n.DateTimeSymbols_en_CM", "goog.i18n.DateTimeSymbols_en_DM", "goog.i18n.DateTimeSymbols_en_Dsrt", "goog.i18n.DateTimeSymbols_en_Dsrt_US", "goog.i18n.DateTimeSymbols_en_FJ", "goog.i18n.DateTimeSymbols_en_FM", "goog.i18n.DateTimeSymbols_en_GD", "goog.i18n.DateTimeSymbols_en_GG", "goog.i18n.DateTimeSymbols_en_GH", +"goog.i18n.DateTimeSymbols_en_GI", "goog.i18n.DateTimeSymbols_en_GM", "goog.i18n.DateTimeSymbols_en_GU", "goog.i18n.DateTimeSymbols_en_GY", "goog.i18n.DateTimeSymbols_en_HK", "goog.i18n.DateTimeSymbols_en_IM", "goog.i18n.DateTimeSymbols_en_JE", "goog.i18n.DateTimeSymbols_en_JM", "goog.i18n.DateTimeSymbols_en_KE", "goog.i18n.DateTimeSymbols_en_KI", "goog.i18n.DateTimeSymbols_en_KN", "goog.i18n.DateTimeSymbols_en_KY", "goog.i18n.DateTimeSymbols_en_LC", "goog.i18n.DateTimeSymbols_en_LR", "goog.i18n.DateTimeSymbols_en_LS", +"goog.i18n.DateTimeSymbols_en_MG", "goog.i18n.DateTimeSymbols_en_MH", "goog.i18n.DateTimeSymbols_en_MP", "goog.i18n.DateTimeSymbols_en_MT", "goog.i18n.DateTimeSymbols_en_MU", "goog.i18n.DateTimeSymbols_en_MW", "goog.i18n.DateTimeSymbols_en_NA", "goog.i18n.DateTimeSymbols_en_NG", "goog.i18n.DateTimeSymbols_en_NZ", "goog.i18n.DateTimeSymbols_en_PG", "goog.i18n.DateTimeSymbols_en_PH", "goog.i18n.DateTimeSymbols_en_PK", "goog.i18n.DateTimeSymbols_en_PR", "goog.i18n.DateTimeSymbols_en_PW", "goog.i18n.DateTimeSymbols_en_SB", +"goog.i18n.DateTimeSymbols_en_SC", "goog.i18n.DateTimeSymbols_en_SL", "goog.i18n.DateTimeSymbols_en_SS", "goog.i18n.DateTimeSymbols_en_SZ", "goog.i18n.DateTimeSymbols_en_TC", "goog.i18n.DateTimeSymbols_en_TO", "goog.i18n.DateTimeSymbols_en_TT", "goog.i18n.DateTimeSymbols_en_TZ", "goog.i18n.DateTimeSymbols_en_UG", "goog.i18n.DateTimeSymbols_en_UM", "goog.i18n.DateTimeSymbols_en_VC", "goog.i18n.DateTimeSymbols_en_VG", "goog.i18n.DateTimeSymbols_en_VI", "goog.i18n.DateTimeSymbols_en_VU", "goog.i18n.DateTimeSymbols_en_WS", +"goog.i18n.DateTimeSymbols_en_ZM", "goog.i18n.DateTimeSymbols_en_ZW", "goog.i18n.DateTimeSymbols_eo", "goog.i18n.DateTimeSymbols_es_AR", "goog.i18n.DateTimeSymbols_es_BO", "goog.i18n.DateTimeSymbols_es_CL", "goog.i18n.DateTimeSymbols_es_CO", "goog.i18n.DateTimeSymbols_es_CR", "goog.i18n.DateTimeSymbols_es_CU", "goog.i18n.DateTimeSymbols_es_DO", "goog.i18n.DateTimeSymbols_es_EA", "goog.i18n.DateTimeSymbols_es_EC", "goog.i18n.DateTimeSymbols_es_GQ", "goog.i18n.DateTimeSymbols_es_GT", "goog.i18n.DateTimeSymbols_es_HN", +"goog.i18n.DateTimeSymbols_es_IC", "goog.i18n.DateTimeSymbols_es_MX", "goog.i18n.DateTimeSymbols_es_NI", "goog.i18n.DateTimeSymbols_es_PA", "goog.i18n.DateTimeSymbols_es_PE", "goog.i18n.DateTimeSymbols_es_PH", "goog.i18n.DateTimeSymbols_es_PR", "goog.i18n.DateTimeSymbols_es_PY", "goog.i18n.DateTimeSymbols_es_SV", "goog.i18n.DateTimeSymbols_es_US", "goog.i18n.DateTimeSymbols_es_UY", "goog.i18n.DateTimeSymbols_es_VE", "goog.i18n.DateTimeSymbols_et_EE", "goog.i18n.DateTimeSymbols_eu_ES", "goog.i18n.DateTimeSymbols_ewo", +"goog.i18n.DateTimeSymbols_ewo_CM", "goog.i18n.DateTimeSymbols_fa_AF", "goog.i18n.DateTimeSymbols_fa_IR", "goog.i18n.DateTimeSymbols_ff", "goog.i18n.DateTimeSymbols_ff_SN", "goog.i18n.DateTimeSymbols_fi_FI", "goog.i18n.DateTimeSymbols_fil_PH", "goog.i18n.DateTimeSymbols_fo", "goog.i18n.DateTimeSymbols_fo_FO", "goog.i18n.DateTimeSymbols_fr_BE", "goog.i18n.DateTimeSymbols_fr_BF", "goog.i18n.DateTimeSymbols_fr_BI", "goog.i18n.DateTimeSymbols_fr_BJ", "goog.i18n.DateTimeSymbols_fr_BL", "goog.i18n.DateTimeSymbols_fr_CD", +"goog.i18n.DateTimeSymbols_fr_CF", "goog.i18n.DateTimeSymbols_fr_CG", "goog.i18n.DateTimeSymbols_fr_CH", "goog.i18n.DateTimeSymbols_fr_CI", "goog.i18n.DateTimeSymbols_fr_CM", "goog.i18n.DateTimeSymbols_fr_DJ", "goog.i18n.DateTimeSymbols_fr_DZ", "goog.i18n.DateTimeSymbols_fr_FR", "goog.i18n.DateTimeSymbols_fr_GA", "goog.i18n.DateTimeSymbols_fr_GF", "goog.i18n.DateTimeSymbols_fr_GN", "goog.i18n.DateTimeSymbols_fr_GP", "goog.i18n.DateTimeSymbols_fr_GQ", "goog.i18n.DateTimeSymbols_fr_HT", "goog.i18n.DateTimeSymbols_fr_KM", +"goog.i18n.DateTimeSymbols_fr_LU", "goog.i18n.DateTimeSymbols_fr_MA", "goog.i18n.DateTimeSymbols_fr_MC", "goog.i18n.DateTimeSymbols_fr_MF", "goog.i18n.DateTimeSymbols_fr_MG", "goog.i18n.DateTimeSymbols_fr_ML", "goog.i18n.DateTimeSymbols_fr_MQ", "goog.i18n.DateTimeSymbols_fr_MR", "goog.i18n.DateTimeSymbols_fr_MU", "goog.i18n.DateTimeSymbols_fr_NC", "goog.i18n.DateTimeSymbols_fr_NE", "goog.i18n.DateTimeSymbols_fr_PF", "goog.i18n.DateTimeSymbols_fr_RE", "goog.i18n.DateTimeSymbols_fr_RW", "goog.i18n.DateTimeSymbols_fr_SC", +"goog.i18n.DateTimeSymbols_fr_SN", "goog.i18n.DateTimeSymbols_fr_SY", "goog.i18n.DateTimeSymbols_fr_TD", "goog.i18n.DateTimeSymbols_fr_TG", "goog.i18n.DateTimeSymbols_fr_TN", "goog.i18n.DateTimeSymbols_fr_VU", "goog.i18n.DateTimeSymbols_fr_YT", "goog.i18n.DateTimeSymbols_fur", "goog.i18n.DateTimeSymbols_fur_IT", "goog.i18n.DateTimeSymbols_ga", "goog.i18n.DateTimeSymbols_ga_IE", "goog.i18n.DateTimeSymbols_gd", "goog.i18n.DateTimeSymbols_gd_GB", "goog.i18n.DateTimeSymbols_gl_ES", "goog.i18n.DateTimeSymbols_gsw_CH", +"goog.i18n.DateTimeSymbols_gu_IN", "goog.i18n.DateTimeSymbols_guz", "goog.i18n.DateTimeSymbols_guz_KE", "goog.i18n.DateTimeSymbols_gv", "goog.i18n.DateTimeSymbols_gv_GB", "goog.i18n.DateTimeSymbols_ha", "goog.i18n.DateTimeSymbols_ha_Latn", "goog.i18n.DateTimeSymbols_ha_Latn_GH", "goog.i18n.DateTimeSymbols_ha_Latn_NE", "goog.i18n.DateTimeSymbols_ha_Latn_NG", "goog.i18n.DateTimeSymbols_haw_US", "goog.i18n.DateTimeSymbols_he_IL", "goog.i18n.DateTimeSymbols_hi_IN", "goog.i18n.DateTimeSymbols_hr_BA", +"goog.i18n.DateTimeSymbols_hr_HR", "goog.i18n.DateTimeSymbols_hu_HU", "goog.i18n.DateTimeSymbols_hy", "goog.i18n.DateTimeSymbols_hy_AM", "goog.i18n.DateTimeSymbols_ia", "goog.i18n.DateTimeSymbols_ia_FR", "goog.i18n.DateTimeSymbols_id_ID", "goog.i18n.DateTimeSymbols_ig", "goog.i18n.DateTimeSymbols_ig_NG", "goog.i18n.DateTimeSymbols_ii", "goog.i18n.DateTimeSymbols_ii_CN", "goog.i18n.DateTimeSymbols_is_IS", "goog.i18n.DateTimeSymbols_it_CH", "goog.i18n.DateTimeSymbols_it_IT", "goog.i18n.DateTimeSymbols_it_SM", +"goog.i18n.DateTimeSymbols_ja_JP", "goog.i18n.DateTimeSymbols_jgo", "goog.i18n.DateTimeSymbols_jgo_CM", "goog.i18n.DateTimeSymbols_jmc", "goog.i18n.DateTimeSymbols_jmc_TZ", "goog.i18n.DateTimeSymbols_ka", "goog.i18n.DateTimeSymbols_ka_GE", "goog.i18n.DateTimeSymbols_kab", "goog.i18n.DateTimeSymbols_kab_DZ", "goog.i18n.DateTimeSymbols_kam", "goog.i18n.DateTimeSymbols_kam_KE", "goog.i18n.DateTimeSymbols_kde", "goog.i18n.DateTimeSymbols_kde_TZ", "goog.i18n.DateTimeSymbols_kea", "goog.i18n.DateTimeSymbols_kea_CV", +"goog.i18n.DateTimeSymbols_khq", "goog.i18n.DateTimeSymbols_khq_ML", "goog.i18n.DateTimeSymbols_ki", "goog.i18n.DateTimeSymbols_ki_KE", "goog.i18n.DateTimeSymbols_kk", "goog.i18n.DateTimeSymbols_kk_Cyrl", "goog.i18n.DateTimeSymbols_kk_Cyrl_KZ", "goog.i18n.DateTimeSymbols_kkj", "goog.i18n.DateTimeSymbols_kkj_CM", "goog.i18n.DateTimeSymbols_kl", "goog.i18n.DateTimeSymbols_kl_GL", "goog.i18n.DateTimeSymbols_kln", "goog.i18n.DateTimeSymbols_kln_KE", "goog.i18n.DateTimeSymbols_km", "goog.i18n.DateTimeSymbols_km_KH", +"goog.i18n.DateTimeSymbols_kn_IN", "goog.i18n.DateTimeSymbols_ko_KP", "goog.i18n.DateTimeSymbols_ko_KR", "goog.i18n.DateTimeSymbols_kok", "goog.i18n.DateTimeSymbols_kok_IN", "goog.i18n.DateTimeSymbols_ks", "goog.i18n.DateTimeSymbols_ks_Arab", "goog.i18n.DateTimeSymbols_ks_Arab_IN", "goog.i18n.DateTimeSymbols_ksb", "goog.i18n.DateTimeSymbols_ksb_TZ", "goog.i18n.DateTimeSymbols_ksf", "goog.i18n.DateTimeSymbols_ksf_CM", "goog.i18n.DateTimeSymbols_ksh", "goog.i18n.DateTimeSymbols_ksh_DE", "goog.i18n.DateTimeSymbols_kw", +"goog.i18n.DateTimeSymbols_kw_GB", "goog.i18n.DateTimeSymbols_ky", "goog.i18n.DateTimeSymbols_ky_KG", "goog.i18n.DateTimeSymbols_lag", "goog.i18n.DateTimeSymbols_lag_TZ", "goog.i18n.DateTimeSymbols_lg", "goog.i18n.DateTimeSymbols_lg_UG", "goog.i18n.DateTimeSymbols_ln_AO", "goog.i18n.DateTimeSymbols_ln_CD", "goog.i18n.DateTimeSymbols_ln_CF", "goog.i18n.DateTimeSymbols_ln_CG", "goog.i18n.DateTimeSymbols_lo", "goog.i18n.DateTimeSymbols_lo_LA", "goog.i18n.DateTimeSymbols_lt_LT", "goog.i18n.DateTimeSymbols_lu", +"goog.i18n.DateTimeSymbols_lu_CD", "goog.i18n.DateTimeSymbols_luo", "goog.i18n.DateTimeSymbols_luo_KE", "goog.i18n.DateTimeSymbols_luy", "goog.i18n.DateTimeSymbols_luy_KE", "goog.i18n.DateTimeSymbols_lv_LV", "goog.i18n.DateTimeSymbols_mas", "goog.i18n.DateTimeSymbols_mas_KE", "goog.i18n.DateTimeSymbols_mas_TZ", "goog.i18n.DateTimeSymbols_mer", "goog.i18n.DateTimeSymbols_mer_KE", "goog.i18n.DateTimeSymbols_mfe", "goog.i18n.DateTimeSymbols_mfe_MU", "goog.i18n.DateTimeSymbols_mg", "goog.i18n.DateTimeSymbols_mg_MG", +"goog.i18n.DateTimeSymbols_mgh", "goog.i18n.DateTimeSymbols_mgh_MZ", "goog.i18n.DateTimeSymbols_mgo", "goog.i18n.DateTimeSymbols_mgo_CM", "goog.i18n.DateTimeSymbols_mk", "goog.i18n.DateTimeSymbols_mk_MK", "goog.i18n.DateTimeSymbols_ml_IN", "goog.i18n.DateTimeSymbols_mn", "goog.i18n.DateTimeSymbols_mn_Cyrl", "goog.i18n.DateTimeSymbols_mn_Cyrl_MN", "goog.i18n.DateTimeSymbols_mr_IN", "goog.i18n.DateTimeSymbols_ms_Latn", "goog.i18n.DateTimeSymbols_ms_Latn_BN", "goog.i18n.DateTimeSymbols_ms_Latn_MY", +"goog.i18n.DateTimeSymbols_ms_Latn_SG", "goog.i18n.DateTimeSymbols_mt_MT", "goog.i18n.DateTimeSymbols_mua", "goog.i18n.DateTimeSymbols_mua_CM", "goog.i18n.DateTimeSymbols_my", "goog.i18n.DateTimeSymbols_my_MM", "goog.i18n.DateTimeSymbols_naq", "goog.i18n.DateTimeSymbols_naq_NA", "goog.i18n.DateTimeSymbols_nb_NO", "goog.i18n.DateTimeSymbols_nd", "goog.i18n.DateTimeSymbols_nd_ZW", "goog.i18n.DateTimeSymbols_ne", "goog.i18n.DateTimeSymbols_ne_IN", "goog.i18n.DateTimeSymbols_ne_NP", "goog.i18n.DateTimeSymbols_nl_AW", +"goog.i18n.DateTimeSymbols_nl_BE", "goog.i18n.DateTimeSymbols_nl_CW", "goog.i18n.DateTimeSymbols_nl_NL", "goog.i18n.DateTimeSymbols_nl_SR", "goog.i18n.DateTimeSymbols_nl_SX", "goog.i18n.DateTimeSymbols_nmg", "goog.i18n.DateTimeSymbols_nmg_CM", "goog.i18n.DateTimeSymbols_nn", "goog.i18n.DateTimeSymbols_nn_NO", "goog.i18n.DateTimeSymbols_nnh", "goog.i18n.DateTimeSymbols_nnh_CM", "goog.i18n.DateTimeSymbols_nr", "goog.i18n.DateTimeSymbols_nr_ZA", "goog.i18n.DateTimeSymbols_nso", "goog.i18n.DateTimeSymbols_nso_ZA", +"goog.i18n.DateTimeSymbols_nus", "goog.i18n.DateTimeSymbols_nus_SD", "goog.i18n.DateTimeSymbols_nyn", "goog.i18n.DateTimeSymbols_nyn_UG", "goog.i18n.DateTimeSymbols_om", "goog.i18n.DateTimeSymbols_om_ET", "goog.i18n.DateTimeSymbols_om_KE", "goog.i18n.DateTimeSymbols_or_IN", "goog.i18n.DateTimeSymbols_os", "goog.i18n.DateTimeSymbols_os_GE", "goog.i18n.DateTimeSymbols_os_RU", "goog.i18n.DateTimeSymbols_pa", "goog.i18n.DateTimeSymbols_pa_Arab", "goog.i18n.DateTimeSymbols_pa_Arab_PK", "goog.i18n.DateTimeSymbols_pa_Guru", +"goog.i18n.DateTimeSymbols_pa_Guru_IN", "goog.i18n.DateTimeSymbols_pl_PL", "goog.i18n.DateTimeSymbols_ps", "goog.i18n.DateTimeSymbols_ps_AF", "goog.i18n.DateTimeSymbols_pt_AO", "goog.i18n.DateTimeSymbols_pt_CV", "goog.i18n.DateTimeSymbols_pt_GW", "goog.i18n.DateTimeSymbols_pt_MO", "goog.i18n.DateTimeSymbols_pt_MZ", "goog.i18n.DateTimeSymbols_pt_ST", "goog.i18n.DateTimeSymbols_pt_TL", "goog.i18n.DateTimeSymbols_rm", "goog.i18n.DateTimeSymbols_rm_CH", "goog.i18n.DateTimeSymbols_rn", "goog.i18n.DateTimeSymbols_rn_BI", +"goog.i18n.DateTimeSymbols_ro_MD", "goog.i18n.DateTimeSymbols_ro_RO", "goog.i18n.DateTimeSymbols_rof", "goog.i18n.DateTimeSymbols_rof_TZ", "goog.i18n.DateTimeSymbols_ru_BY", "goog.i18n.DateTimeSymbols_ru_KG", "goog.i18n.DateTimeSymbols_ru_KZ", "goog.i18n.DateTimeSymbols_ru_MD", "goog.i18n.DateTimeSymbols_ru_RU", "goog.i18n.DateTimeSymbols_ru_UA", "goog.i18n.DateTimeSymbols_rw", "goog.i18n.DateTimeSymbols_rw_RW", "goog.i18n.DateTimeSymbols_rwk", "goog.i18n.DateTimeSymbols_rwk_TZ", "goog.i18n.DateTimeSymbols_sah", +"goog.i18n.DateTimeSymbols_sah_RU", "goog.i18n.DateTimeSymbols_saq", "goog.i18n.DateTimeSymbols_saq_KE", "goog.i18n.DateTimeSymbols_sbp", "goog.i18n.DateTimeSymbols_sbp_TZ", "goog.i18n.DateTimeSymbols_se", "goog.i18n.DateTimeSymbols_se_FI", "goog.i18n.DateTimeSymbols_se_NO", "goog.i18n.DateTimeSymbols_seh", "goog.i18n.DateTimeSymbols_seh_MZ", "goog.i18n.DateTimeSymbols_ses", "goog.i18n.DateTimeSymbols_ses_ML", "goog.i18n.DateTimeSymbols_sg", "goog.i18n.DateTimeSymbols_sg_CF", "goog.i18n.DateTimeSymbols_shi", +"goog.i18n.DateTimeSymbols_shi_Latn", "goog.i18n.DateTimeSymbols_shi_Latn_MA", "goog.i18n.DateTimeSymbols_shi_Tfng", "goog.i18n.DateTimeSymbols_shi_Tfng_MA", "goog.i18n.DateTimeSymbols_si", "goog.i18n.DateTimeSymbols_si_LK", "goog.i18n.DateTimeSymbols_sk_SK", "goog.i18n.DateTimeSymbols_sl_SI", "goog.i18n.DateTimeSymbols_sn", "goog.i18n.DateTimeSymbols_sn_ZW", "goog.i18n.DateTimeSymbols_so", "goog.i18n.DateTimeSymbols_so_DJ", "goog.i18n.DateTimeSymbols_so_ET", "goog.i18n.DateTimeSymbols_so_KE", "goog.i18n.DateTimeSymbols_so_SO", +"goog.i18n.DateTimeSymbols_sq_AL", "goog.i18n.DateTimeSymbols_sq_MK", "goog.i18n.DateTimeSymbols_sq_XK", "goog.i18n.DateTimeSymbols_sr_Cyrl", "goog.i18n.DateTimeSymbols_sr_Cyrl_BA", "goog.i18n.DateTimeSymbols_sr_Cyrl_ME", "goog.i18n.DateTimeSymbols_sr_Cyrl_RS", "goog.i18n.DateTimeSymbols_sr_Cyrl_XK", "goog.i18n.DateTimeSymbols_sr_Latn", "goog.i18n.DateTimeSymbols_sr_Latn_BA", "goog.i18n.DateTimeSymbols_sr_Latn_ME", "goog.i18n.DateTimeSymbols_sr_Latn_RS", "goog.i18n.DateTimeSymbols_sr_Latn_XK", "goog.i18n.DateTimeSymbols_ss", +"goog.i18n.DateTimeSymbols_ss_SZ", "goog.i18n.DateTimeSymbols_ss_ZA", "goog.i18n.DateTimeSymbols_ssy", "goog.i18n.DateTimeSymbols_ssy_ER", "goog.i18n.DateTimeSymbols_st", "goog.i18n.DateTimeSymbols_st_LS", "goog.i18n.DateTimeSymbols_st_ZA", "goog.i18n.DateTimeSymbols_sv_AX", "goog.i18n.DateTimeSymbols_sv_FI", "goog.i18n.DateTimeSymbols_sv_SE", "goog.i18n.DateTimeSymbols_sw_KE", "goog.i18n.DateTimeSymbols_sw_TZ", "goog.i18n.DateTimeSymbols_sw_UG", "goog.i18n.DateTimeSymbols_swc", "goog.i18n.DateTimeSymbols_swc_CD", +"goog.i18n.DateTimeSymbols_ta_IN", "goog.i18n.DateTimeSymbols_ta_LK", "goog.i18n.DateTimeSymbols_ta_MY", "goog.i18n.DateTimeSymbols_ta_SG", "goog.i18n.DateTimeSymbols_te_IN", "goog.i18n.DateTimeSymbols_teo", "goog.i18n.DateTimeSymbols_teo_KE", "goog.i18n.DateTimeSymbols_teo_UG", "goog.i18n.DateTimeSymbols_tg", "goog.i18n.DateTimeSymbols_tg_Cyrl", "goog.i18n.DateTimeSymbols_tg_Cyrl_TJ", "goog.i18n.DateTimeSymbols_th_TH", "goog.i18n.DateTimeSymbols_ti", "goog.i18n.DateTimeSymbols_ti_ER", "goog.i18n.DateTimeSymbols_ti_ET", +"goog.i18n.DateTimeSymbols_tig", "goog.i18n.DateTimeSymbols_tig_ER", "goog.i18n.DateTimeSymbols_tn", "goog.i18n.DateTimeSymbols_tn_BW", "goog.i18n.DateTimeSymbols_tn_ZA", "goog.i18n.DateTimeSymbols_to", "goog.i18n.DateTimeSymbols_to_TO", "goog.i18n.DateTimeSymbols_tr_CY", "goog.i18n.DateTimeSymbols_tr_TR", "goog.i18n.DateTimeSymbols_ts", "goog.i18n.DateTimeSymbols_ts_ZA", "goog.i18n.DateTimeSymbols_twq", "goog.i18n.DateTimeSymbols_twq_NE", "goog.i18n.DateTimeSymbols_tzm", "goog.i18n.DateTimeSymbols_tzm_Latn", +"goog.i18n.DateTimeSymbols_tzm_Latn_MA", "goog.i18n.DateTimeSymbols_uk_UA", "goog.i18n.DateTimeSymbols_ur_IN", "goog.i18n.DateTimeSymbols_ur_PK", "goog.i18n.DateTimeSymbols_uz", "goog.i18n.DateTimeSymbols_uz_Arab", "goog.i18n.DateTimeSymbols_uz_Arab_AF", "goog.i18n.DateTimeSymbols_uz_Cyrl", "goog.i18n.DateTimeSymbols_uz_Cyrl_UZ", "goog.i18n.DateTimeSymbols_uz_Latn", "goog.i18n.DateTimeSymbols_uz_Latn_UZ", "goog.i18n.DateTimeSymbols_vai", "goog.i18n.DateTimeSymbols_vai_Latn", "goog.i18n.DateTimeSymbols_vai_Latn_LR", +"goog.i18n.DateTimeSymbols_vai_Vaii", "goog.i18n.DateTimeSymbols_vai_Vaii_LR", "goog.i18n.DateTimeSymbols_ve", "goog.i18n.DateTimeSymbols_ve_ZA", "goog.i18n.DateTimeSymbols_vi_VN", "goog.i18n.DateTimeSymbols_vo", "goog.i18n.DateTimeSymbols_vun", "goog.i18n.DateTimeSymbols_vun_TZ", "goog.i18n.DateTimeSymbols_wae", "goog.i18n.DateTimeSymbols_wae_CH", "goog.i18n.DateTimeSymbols_wal", "goog.i18n.DateTimeSymbols_wal_ET", "goog.i18n.DateTimeSymbols_xh", "goog.i18n.DateTimeSymbols_xh_ZA", "goog.i18n.DateTimeSymbols_xog", +"goog.i18n.DateTimeSymbols_xog_UG", "goog.i18n.DateTimeSymbols_yav", "goog.i18n.DateTimeSymbols_yav_CM", "goog.i18n.DateTimeSymbols_yo", "goog.i18n.DateTimeSymbols_yo_NG", "goog.i18n.DateTimeSymbols_zh_Hans", "goog.i18n.DateTimeSymbols_zh_Hans_CN", "goog.i18n.DateTimeSymbols_zh_Hans_HK", "goog.i18n.DateTimeSymbols_zh_Hans_MO", "goog.i18n.DateTimeSymbols_zh_Hans_SG", "goog.i18n.DateTimeSymbols_zh_Hant", "goog.i18n.DateTimeSymbols_zh_Hant_HK", "goog.i18n.DateTimeSymbols_zh_Hant_MO", "goog.i18n.DateTimeSymbols_zh_Hant_TW", +"goog.i18n.DateTimeSymbols_zu_ZA"], ["goog.i18n.DateTimeSymbols"]); +goog.addDependency("/closure/goog/i18n/graphemebreak.js", ["goog.i18n.GraphemeBreak"], ["goog.structs.InversionMap"]); +goog.addDependency("/closure/goog/i18n/messageformat.js", ["goog.i18n.MessageFormat"], ["goog.asserts", "goog.i18n.NumberFormat", "goog.i18n.ordinalRules", "goog.i18n.pluralRules"]); +goog.addDependency("/closure/goog/i18n/mime.js", ["goog.i18n.mime", "goog.i18n.mime.encode"], ["goog.array"]); +goog.addDependency("/closure/goog/i18n/numberformat.js", ["goog.i18n.NumberFormat", "goog.i18n.NumberFormat.CurrencyStyle", "goog.i18n.NumberFormat.Format"], ["goog.asserts", "goog.i18n.CompactNumberFormatSymbols", "goog.i18n.NumberFormatSymbols", "goog.i18n.currency", "goog.math"]); +goog.addDependency("/closure/goog/i18n/numberformatsymbols.js", ["goog.i18n.NumberFormatSymbols", "goog.i18n.NumberFormatSymbols_af", "goog.i18n.NumberFormatSymbols_af_ZA", "goog.i18n.NumberFormatSymbols_am", "goog.i18n.NumberFormatSymbols_am_ET", "goog.i18n.NumberFormatSymbols_ar", "goog.i18n.NumberFormatSymbols_ar_001", "goog.i18n.NumberFormatSymbols_ar_EG", "goog.i18n.NumberFormatSymbols_bg", "goog.i18n.NumberFormatSymbols_bg_BG", "goog.i18n.NumberFormatSymbols_bn", "goog.i18n.NumberFormatSymbols_bn_BD", +"goog.i18n.NumberFormatSymbols_br", "goog.i18n.NumberFormatSymbols_br_FR", "goog.i18n.NumberFormatSymbols_ca", "goog.i18n.NumberFormatSymbols_ca_AD", "goog.i18n.NumberFormatSymbols_ca_ES", "goog.i18n.NumberFormatSymbols_chr", "goog.i18n.NumberFormatSymbols_chr_US", "goog.i18n.NumberFormatSymbols_cs", "goog.i18n.NumberFormatSymbols_cs_CZ", "goog.i18n.NumberFormatSymbols_cy", "goog.i18n.NumberFormatSymbols_cy_GB", "goog.i18n.NumberFormatSymbols_da", "goog.i18n.NumberFormatSymbols_da_DK", "goog.i18n.NumberFormatSymbols_de", +"goog.i18n.NumberFormatSymbols_de_AT", "goog.i18n.NumberFormatSymbols_de_BE", "goog.i18n.NumberFormatSymbols_de_CH", "goog.i18n.NumberFormatSymbols_de_DE", "goog.i18n.NumberFormatSymbols_de_LU", "goog.i18n.NumberFormatSymbols_el", "goog.i18n.NumberFormatSymbols_el_GR", "goog.i18n.NumberFormatSymbols_en", "goog.i18n.NumberFormatSymbols_en_AS", "goog.i18n.NumberFormatSymbols_en_AU", "goog.i18n.NumberFormatSymbols_en_Dsrt_US", "goog.i18n.NumberFormatSymbols_en_FM", "goog.i18n.NumberFormatSymbols_en_GB", +"goog.i18n.NumberFormatSymbols_en_GU", "goog.i18n.NumberFormatSymbols_en_IE", "goog.i18n.NumberFormatSymbols_en_IN", "goog.i18n.NumberFormatSymbols_en_MH", "goog.i18n.NumberFormatSymbols_en_MP", "goog.i18n.NumberFormatSymbols_en_PR", "goog.i18n.NumberFormatSymbols_en_PW", "goog.i18n.NumberFormatSymbols_en_SG", "goog.i18n.NumberFormatSymbols_en_TC", "goog.i18n.NumberFormatSymbols_en_UM", "goog.i18n.NumberFormatSymbols_en_US", "goog.i18n.NumberFormatSymbols_en_VG", "goog.i18n.NumberFormatSymbols_en_VI", +"goog.i18n.NumberFormatSymbols_en_ZA", "goog.i18n.NumberFormatSymbols_es", "goog.i18n.NumberFormatSymbols_es_419", "goog.i18n.NumberFormatSymbols_es_EA", "goog.i18n.NumberFormatSymbols_es_ES", "goog.i18n.NumberFormatSymbols_es_IC", "goog.i18n.NumberFormatSymbols_et", "goog.i18n.NumberFormatSymbols_et_EE", "goog.i18n.NumberFormatSymbols_eu", "goog.i18n.NumberFormatSymbols_eu_ES", "goog.i18n.NumberFormatSymbols_fa", "goog.i18n.NumberFormatSymbols_fa_IR", "goog.i18n.NumberFormatSymbols_fi", "goog.i18n.NumberFormatSymbols_fi_FI", +"goog.i18n.NumberFormatSymbols_fil", "goog.i18n.NumberFormatSymbols_fil_PH", "goog.i18n.NumberFormatSymbols_fr", "goog.i18n.NumberFormatSymbols_fr_BL", "goog.i18n.NumberFormatSymbols_fr_CA", "goog.i18n.NumberFormatSymbols_fr_FR", "goog.i18n.NumberFormatSymbols_fr_GF", "goog.i18n.NumberFormatSymbols_fr_GP", "goog.i18n.NumberFormatSymbols_fr_MC", "goog.i18n.NumberFormatSymbols_fr_MF", "goog.i18n.NumberFormatSymbols_fr_MQ", "goog.i18n.NumberFormatSymbols_fr_RE", "goog.i18n.NumberFormatSymbols_fr_YT", +"goog.i18n.NumberFormatSymbols_gl", "goog.i18n.NumberFormatSymbols_gl_ES", "goog.i18n.NumberFormatSymbols_gsw", "goog.i18n.NumberFormatSymbols_gsw_CH", "goog.i18n.NumberFormatSymbols_gu", "goog.i18n.NumberFormatSymbols_gu_IN", "goog.i18n.NumberFormatSymbols_haw", "goog.i18n.NumberFormatSymbols_haw_US", "goog.i18n.NumberFormatSymbols_he", "goog.i18n.NumberFormatSymbols_he_IL", "goog.i18n.NumberFormatSymbols_hi", "goog.i18n.NumberFormatSymbols_hi_IN", "goog.i18n.NumberFormatSymbols_hr", "goog.i18n.NumberFormatSymbols_hr_HR", +"goog.i18n.NumberFormatSymbols_hu", "goog.i18n.NumberFormatSymbols_hu_HU", "goog.i18n.NumberFormatSymbols_id", "goog.i18n.NumberFormatSymbols_id_ID", "goog.i18n.NumberFormatSymbols_in", "goog.i18n.NumberFormatSymbols_is", "goog.i18n.NumberFormatSymbols_is_IS", "goog.i18n.NumberFormatSymbols_it", "goog.i18n.NumberFormatSymbols_it_IT", "goog.i18n.NumberFormatSymbols_it_SM", "goog.i18n.NumberFormatSymbols_iw", "goog.i18n.NumberFormatSymbols_ja", "goog.i18n.NumberFormatSymbols_ja_JP", "goog.i18n.NumberFormatSymbols_kn", +"goog.i18n.NumberFormatSymbols_kn_IN", "goog.i18n.NumberFormatSymbols_ko", "goog.i18n.NumberFormatSymbols_ko_KR", "goog.i18n.NumberFormatSymbols_ln", "goog.i18n.NumberFormatSymbols_ln_CD", "goog.i18n.NumberFormatSymbols_lt", "goog.i18n.NumberFormatSymbols_lt_LT", "goog.i18n.NumberFormatSymbols_lv", "goog.i18n.NumberFormatSymbols_lv_LV", "goog.i18n.NumberFormatSymbols_ml", "goog.i18n.NumberFormatSymbols_ml_IN", "goog.i18n.NumberFormatSymbols_mr", "goog.i18n.NumberFormatSymbols_mr_IN", "goog.i18n.NumberFormatSymbols_ms", +"goog.i18n.NumberFormatSymbols_ms_Latn_MY", "goog.i18n.NumberFormatSymbols_mt", "goog.i18n.NumberFormatSymbols_mt_MT", "goog.i18n.NumberFormatSymbols_nb", "goog.i18n.NumberFormatSymbols_nb_NO", "goog.i18n.NumberFormatSymbols_nl", "goog.i18n.NumberFormatSymbols_nl_NL", "goog.i18n.NumberFormatSymbols_no", "goog.i18n.NumberFormatSymbols_or", "goog.i18n.NumberFormatSymbols_or_IN", "goog.i18n.NumberFormatSymbols_pl", "goog.i18n.NumberFormatSymbols_pl_PL", "goog.i18n.NumberFormatSymbols_pt", "goog.i18n.NumberFormatSymbols_pt_BR", +"goog.i18n.NumberFormatSymbols_pt_PT", "goog.i18n.NumberFormatSymbols_ro", "goog.i18n.NumberFormatSymbols_ro_RO", "goog.i18n.NumberFormatSymbols_ru", "goog.i18n.NumberFormatSymbols_ru_RU", "goog.i18n.NumberFormatSymbols_sk", "goog.i18n.NumberFormatSymbols_sk_SK", "goog.i18n.NumberFormatSymbols_sl", "goog.i18n.NumberFormatSymbols_sl_SI", "goog.i18n.NumberFormatSymbols_sq", "goog.i18n.NumberFormatSymbols_sq_AL", "goog.i18n.NumberFormatSymbols_sr", "goog.i18n.NumberFormatSymbols_sr_Cyrl_RS", "goog.i18n.NumberFormatSymbols_sv", +"goog.i18n.NumberFormatSymbols_sv_SE", "goog.i18n.NumberFormatSymbols_sw", "goog.i18n.NumberFormatSymbols_sw_TZ", "goog.i18n.NumberFormatSymbols_ta", "goog.i18n.NumberFormatSymbols_ta_IN", "goog.i18n.NumberFormatSymbols_te", "goog.i18n.NumberFormatSymbols_te_IN", "goog.i18n.NumberFormatSymbols_th", "goog.i18n.NumberFormatSymbols_th_TH", "goog.i18n.NumberFormatSymbols_tl", "goog.i18n.NumberFormatSymbols_tr", "goog.i18n.NumberFormatSymbols_tr_TR", "goog.i18n.NumberFormatSymbols_uk", "goog.i18n.NumberFormatSymbols_uk_UA", +"goog.i18n.NumberFormatSymbols_ur", "goog.i18n.NumberFormatSymbols_ur_PK", "goog.i18n.NumberFormatSymbols_vi", "goog.i18n.NumberFormatSymbols_vi_VN", "goog.i18n.NumberFormatSymbols_zh", "goog.i18n.NumberFormatSymbols_zh_CN", "goog.i18n.NumberFormatSymbols_zh_HK", "goog.i18n.NumberFormatSymbols_zh_Hans_CN", "goog.i18n.NumberFormatSymbols_zh_TW", "goog.i18n.NumberFormatSymbols_zu", "goog.i18n.NumberFormatSymbols_zu_ZA"], []); +goog.addDependency("/closure/goog/i18n/numberformatsymbolsext.js", ["goog.i18n.NumberFormatSymbolsExt", "goog.i18n.NumberFormatSymbols_aa", "goog.i18n.NumberFormatSymbols_aa_DJ", "goog.i18n.NumberFormatSymbols_aa_ER", "goog.i18n.NumberFormatSymbols_aa_ET", "goog.i18n.NumberFormatSymbols_af_NA", "goog.i18n.NumberFormatSymbols_agq", "goog.i18n.NumberFormatSymbols_agq_CM", "goog.i18n.NumberFormatSymbols_ak", "goog.i18n.NumberFormatSymbols_ak_GH", "goog.i18n.NumberFormatSymbols_ar_AE", "goog.i18n.NumberFormatSymbols_ar_BH", +"goog.i18n.NumberFormatSymbols_ar_DJ", "goog.i18n.NumberFormatSymbols_ar_DZ", "goog.i18n.NumberFormatSymbols_ar_EH", "goog.i18n.NumberFormatSymbols_ar_ER", "goog.i18n.NumberFormatSymbols_ar_IL", "goog.i18n.NumberFormatSymbols_ar_IQ", "goog.i18n.NumberFormatSymbols_ar_JO", "goog.i18n.NumberFormatSymbols_ar_KM", "goog.i18n.NumberFormatSymbols_ar_KW", "goog.i18n.NumberFormatSymbols_ar_LB", "goog.i18n.NumberFormatSymbols_ar_LY", "goog.i18n.NumberFormatSymbols_ar_MA", "goog.i18n.NumberFormatSymbols_ar_MR", +"goog.i18n.NumberFormatSymbols_ar_OM", "goog.i18n.NumberFormatSymbols_ar_PS", "goog.i18n.NumberFormatSymbols_ar_QA", "goog.i18n.NumberFormatSymbols_ar_SA", "goog.i18n.NumberFormatSymbols_ar_SD", "goog.i18n.NumberFormatSymbols_ar_SO", "goog.i18n.NumberFormatSymbols_ar_SY", "goog.i18n.NumberFormatSymbols_ar_TD", "goog.i18n.NumberFormatSymbols_ar_TN", "goog.i18n.NumberFormatSymbols_ar_YE", "goog.i18n.NumberFormatSymbols_as", "goog.i18n.NumberFormatSymbols_as_IN", "goog.i18n.NumberFormatSymbols_asa", +"goog.i18n.NumberFormatSymbols_asa_TZ", "goog.i18n.NumberFormatSymbols_ast", "goog.i18n.NumberFormatSymbols_ast_ES", "goog.i18n.NumberFormatSymbols_az", "goog.i18n.NumberFormatSymbols_az_Cyrl", "goog.i18n.NumberFormatSymbols_az_Cyrl_AZ", "goog.i18n.NumberFormatSymbols_az_Latn", "goog.i18n.NumberFormatSymbols_az_Latn_AZ", "goog.i18n.NumberFormatSymbols_bas", "goog.i18n.NumberFormatSymbols_bas_CM", "goog.i18n.NumberFormatSymbols_be", "goog.i18n.NumberFormatSymbols_be_BY", "goog.i18n.NumberFormatSymbols_bem", +"goog.i18n.NumberFormatSymbols_bem_ZM", "goog.i18n.NumberFormatSymbols_bez", "goog.i18n.NumberFormatSymbols_bez_TZ", "goog.i18n.NumberFormatSymbols_bm", "goog.i18n.NumberFormatSymbols_bm_ML", "goog.i18n.NumberFormatSymbols_bn_IN", "goog.i18n.NumberFormatSymbols_bo", "goog.i18n.NumberFormatSymbols_bo_CN", "goog.i18n.NumberFormatSymbols_bo_IN", "goog.i18n.NumberFormatSymbols_brx", "goog.i18n.NumberFormatSymbols_brx_IN", "goog.i18n.NumberFormatSymbols_bs", "goog.i18n.NumberFormatSymbols_bs_Cyrl", "goog.i18n.NumberFormatSymbols_bs_Cyrl_BA", +"goog.i18n.NumberFormatSymbols_bs_Latn", "goog.i18n.NumberFormatSymbols_bs_Latn_BA", "goog.i18n.NumberFormatSymbols_byn", "goog.i18n.NumberFormatSymbols_byn_ER", "goog.i18n.NumberFormatSymbols_cgg", "goog.i18n.NumberFormatSymbols_cgg_UG", "goog.i18n.NumberFormatSymbols_ckb", "goog.i18n.NumberFormatSymbols_ckb_Arab", "goog.i18n.NumberFormatSymbols_ckb_Arab_IQ", "goog.i18n.NumberFormatSymbols_ckb_Arab_IR", "goog.i18n.NumberFormatSymbols_ckb_IQ", "goog.i18n.NumberFormatSymbols_ckb_IR", "goog.i18n.NumberFormatSymbols_ckb_Latn", +"goog.i18n.NumberFormatSymbols_ckb_Latn_IQ", "goog.i18n.NumberFormatSymbols_dav", "goog.i18n.NumberFormatSymbols_dav_KE", "goog.i18n.NumberFormatSymbols_de_LI", "goog.i18n.NumberFormatSymbols_dje", "goog.i18n.NumberFormatSymbols_dje_NE", "goog.i18n.NumberFormatSymbols_dua", "goog.i18n.NumberFormatSymbols_dua_CM", "goog.i18n.NumberFormatSymbols_dyo", "goog.i18n.NumberFormatSymbols_dyo_SN", "goog.i18n.NumberFormatSymbols_dz", "goog.i18n.NumberFormatSymbols_dz_BT", "goog.i18n.NumberFormatSymbols_ebu", +"goog.i18n.NumberFormatSymbols_ebu_KE", "goog.i18n.NumberFormatSymbols_ee", "goog.i18n.NumberFormatSymbols_ee_GH", "goog.i18n.NumberFormatSymbols_ee_TG", "goog.i18n.NumberFormatSymbols_el_CY", "goog.i18n.NumberFormatSymbols_en_150", "goog.i18n.NumberFormatSymbols_en_AG", "goog.i18n.NumberFormatSymbols_en_BB", "goog.i18n.NumberFormatSymbols_en_BE", "goog.i18n.NumberFormatSymbols_en_BM", "goog.i18n.NumberFormatSymbols_en_BS", "goog.i18n.NumberFormatSymbols_en_BW", "goog.i18n.NumberFormatSymbols_en_BZ", +"goog.i18n.NumberFormatSymbols_en_CA", "goog.i18n.NumberFormatSymbols_en_CM", "goog.i18n.NumberFormatSymbols_en_DM", "goog.i18n.NumberFormatSymbols_en_Dsrt", "goog.i18n.NumberFormatSymbols_en_FJ", "goog.i18n.NumberFormatSymbols_en_GD", "goog.i18n.NumberFormatSymbols_en_GG", "goog.i18n.NumberFormatSymbols_en_GH", "goog.i18n.NumberFormatSymbols_en_GI", "goog.i18n.NumberFormatSymbols_en_GM", "goog.i18n.NumberFormatSymbols_en_GY", "goog.i18n.NumberFormatSymbols_en_HK", "goog.i18n.NumberFormatSymbols_en_IM", +"goog.i18n.NumberFormatSymbols_en_JE", "goog.i18n.NumberFormatSymbols_en_JM", "goog.i18n.NumberFormatSymbols_en_KE", "goog.i18n.NumberFormatSymbols_en_KI", "goog.i18n.NumberFormatSymbols_en_KN", "goog.i18n.NumberFormatSymbols_en_KY", "goog.i18n.NumberFormatSymbols_en_LC", "goog.i18n.NumberFormatSymbols_en_LR", "goog.i18n.NumberFormatSymbols_en_LS", "goog.i18n.NumberFormatSymbols_en_MG", "goog.i18n.NumberFormatSymbols_en_MT", "goog.i18n.NumberFormatSymbols_en_MU", "goog.i18n.NumberFormatSymbols_en_MW", +"goog.i18n.NumberFormatSymbols_en_NA", "goog.i18n.NumberFormatSymbols_en_NG", "goog.i18n.NumberFormatSymbols_en_NZ", "goog.i18n.NumberFormatSymbols_en_PG", "goog.i18n.NumberFormatSymbols_en_PH", "goog.i18n.NumberFormatSymbols_en_PK", "goog.i18n.NumberFormatSymbols_en_SB", "goog.i18n.NumberFormatSymbols_en_SC", "goog.i18n.NumberFormatSymbols_en_SL", "goog.i18n.NumberFormatSymbols_en_SS", "goog.i18n.NumberFormatSymbols_en_SZ", "goog.i18n.NumberFormatSymbols_en_TO", "goog.i18n.NumberFormatSymbols_en_TT", +"goog.i18n.NumberFormatSymbols_en_TZ", "goog.i18n.NumberFormatSymbols_en_UG", "goog.i18n.NumberFormatSymbols_en_VC", "goog.i18n.NumberFormatSymbols_en_VU", "goog.i18n.NumberFormatSymbols_en_WS", "goog.i18n.NumberFormatSymbols_en_ZM", "goog.i18n.NumberFormatSymbols_en_ZW", "goog.i18n.NumberFormatSymbols_eo", "goog.i18n.NumberFormatSymbols_es_AR", "goog.i18n.NumberFormatSymbols_es_BO", "goog.i18n.NumberFormatSymbols_es_CL", "goog.i18n.NumberFormatSymbols_es_CO", "goog.i18n.NumberFormatSymbols_es_CR", +"goog.i18n.NumberFormatSymbols_es_CU", "goog.i18n.NumberFormatSymbols_es_DO", "goog.i18n.NumberFormatSymbols_es_EC", "goog.i18n.NumberFormatSymbols_es_GQ", "goog.i18n.NumberFormatSymbols_es_GT", "goog.i18n.NumberFormatSymbols_es_HN", "goog.i18n.NumberFormatSymbols_es_MX", "goog.i18n.NumberFormatSymbols_es_NI", "goog.i18n.NumberFormatSymbols_es_PA", "goog.i18n.NumberFormatSymbols_es_PE", "goog.i18n.NumberFormatSymbols_es_PH", "goog.i18n.NumberFormatSymbols_es_PR", "goog.i18n.NumberFormatSymbols_es_PY", +"goog.i18n.NumberFormatSymbols_es_SV", "goog.i18n.NumberFormatSymbols_es_US", "goog.i18n.NumberFormatSymbols_es_UY", "goog.i18n.NumberFormatSymbols_es_VE", "goog.i18n.NumberFormatSymbols_ewo", "goog.i18n.NumberFormatSymbols_ewo_CM", "goog.i18n.NumberFormatSymbols_fa_AF", "goog.i18n.NumberFormatSymbols_ff", "goog.i18n.NumberFormatSymbols_ff_SN", "goog.i18n.NumberFormatSymbols_fo", "goog.i18n.NumberFormatSymbols_fo_FO", "goog.i18n.NumberFormatSymbols_fr_BE", "goog.i18n.NumberFormatSymbols_fr_BF", "goog.i18n.NumberFormatSymbols_fr_BI", +"goog.i18n.NumberFormatSymbols_fr_BJ", "goog.i18n.NumberFormatSymbols_fr_CD", "goog.i18n.NumberFormatSymbols_fr_CF", "goog.i18n.NumberFormatSymbols_fr_CG", "goog.i18n.NumberFormatSymbols_fr_CH", "goog.i18n.NumberFormatSymbols_fr_CI", "goog.i18n.NumberFormatSymbols_fr_CM", "goog.i18n.NumberFormatSymbols_fr_DJ", "goog.i18n.NumberFormatSymbols_fr_DZ", "goog.i18n.NumberFormatSymbols_fr_GA", "goog.i18n.NumberFormatSymbols_fr_GN", "goog.i18n.NumberFormatSymbols_fr_GQ", "goog.i18n.NumberFormatSymbols_fr_HT", +"goog.i18n.NumberFormatSymbols_fr_KM", "goog.i18n.NumberFormatSymbols_fr_LU", "goog.i18n.NumberFormatSymbols_fr_MA", "goog.i18n.NumberFormatSymbols_fr_MG", "goog.i18n.NumberFormatSymbols_fr_ML", "goog.i18n.NumberFormatSymbols_fr_MR", "goog.i18n.NumberFormatSymbols_fr_MU", "goog.i18n.NumberFormatSymbols_fr_NC", "goog.i18n.NumberFormatSymbols_fr_NE", "goog.i18n.NumberFormatSymbols_fr_PF", "goog.i18n.NumberFormatSymbols_fr_RW", "goog.i18n.NumberFormatSymbols_fr_SC", "goog.i18n.NumberFormatSymbols_fr_SN", +"goog.i18n.NumberFormatSymbols_fr_SY", "goog.i18n.NumberFormatSymbols_fr_TD", "goog.i18n.NumberFormatSymbols_fr_TG", "goog.i18n.NumberFormatSymbols_fr_TN", "goog.i18n.NumberFormatSymbols_fr_VU", "goog.i18n.NumberFormatSymbols_fur", "goog.i18n.NumberFormatSymbols_fur_IT", "goog.i18n.NumberFormatSymbols_ga", "goog.i18n.NumberFormatSymbols_ga_IE", "goog.i18n.NumberFormatSymbols_gd", "goog.i18n.NumberFormatSymbols_gd_GB", "goog.i18n.NumberFormatSymbols_guz", "goog.i18n.NumberFormatSymbols_guz_KE", "goog.i18n.NumberFormatSymbols_gv", +"goog.i18n.NumberFormatSymbols_gv_GB", "goog.i18n.NumberFormatSymbols_ha", "goog.i18n.NumberFormatSymbols_ha_Latn", "goog.i18n.NumberFormatSymbols_ha_Latn_GH", "goog.i18n.NumberFormatSymbols_ha_Latn_NE", "goog.i18n.NumberFormatSymbols_ha_Latn_NG", "goog.i18n.NumberFormatSymbols_hr_BA", "goog.i18n.NumberFormatSymbols_hy", "goog.i18n.NumberFormatSymbols_hy_AM", "goog.i18n.NumberFormatSymbols_ia", "goog.i18n.NumberFormatSymbols_ia_FR", "goog.i18n.NumberFormatSymbols_ig", "goog.i18n.NumberFormatSymbols_ig_NG", +"goog.i18n.NumberFormatSymbols_ii", "goog.i18n.NumberFormatSymbols_ii_CN", "goog.i18n.NumberFormatSymbols_it_CH", "goog.i18n.NumberFormatSymbols_jgo", "goog.i18n.NumberFormatSymbols_jgo_CM", "goog.i18n.NumberFormatSymbols_jmc", "goog.i18n.NumberFormatSymbols_jmc_TZ", "goog.i18n.NumberFormatSymbols_ka", "goog.i18n.NumberFormatSymbols_ka_GE", "goog.i18n.NumberFormatSymbols_kab", "goog.i18n.NumberFormatSymbols_kab_DZ", "goog.i18n.NumberFormatSymbols_kam", "goog.i18n.NumberFormatSymbols_kam_KE", "goog.i18n.NumberFormatSymbols_kde", +"goog.i18n.NumberFormatSymbols_kde_TZ", "goog.i18n.NumberFormatSymbols_kea", "goog.i18n.NumberFormatSymbols_kea_CV", "goog.i18n.NumberFormatSymbols_khq", "goog.i18n.NumberFormatSymbols_khq_ML", "goog.i18n.NumberFormatSymbols_ki", "goog.i18n.NumberFormatSymbols_ki_KE", "goog.i18n.NumberFormatSymbols_kk", "goog.i18n.NumberFormatSymbols_kk_Cyrl", "goog.i18n.NumberFormatSymbols_kk_Cyrl_KZ", "goog.i18n.NumberFormatSymbols_kkj", "goog.i18n.NumberFormatSymbols_kkj_CM", "goog.i18n.NumberFormatSymbols_kl", +"goog.i18n.NumberFormatSymbols_kl_GL", "goog.i18n.NumberFormatSymbols_kln", "goog.i18n.NumberFormatSymbols_kln_KE", "goog.i18n.NumberFormatSymbols_km", "goog.i18n.NumberFormatSymbols_km_KH", "goog.i18n.NumberFormatSymbols_ko_KP", "goog.i18n.NumberFormatSymbols_kok", "goog.i18n.NumberFormatSymbols_kok_IN", "goog.i18n.NumberFormatSymbols_ks", "goog.i18n.NumberFormatSymbols_ks_Arab", "goog.i18n.NumberFormatSymbols_ks_Arab_IN", "goog.i18n.NumberFormatSymbols_ksb", "goog.i18n.NumberFormatSymbols_ksb_TZ", +"goog.i18n.NumberFormatSymbols_ksf", "goog.i18n.NumberFormatSymbols_ksf_CM", "goog.i18n.NumberFormatSymbols_ksh", "goog.i18n.NumberFormatSymbols_ksh_DE", "goog.i18n.NumberFormatSymbols_kw", "goog.i18n.NumberFormatSymbols_kw_GB", "goog.i18n.NumberFormatSymbols_ky", "goog.i18n.NumberFormatSymbols_ky_KG", "goog.i18n.NumberFormatSymbols_lag", "goog.i18n.NumberFormatSymbols_lag_TZ", "goog.i18n.NumberFormatSymbols_lg", "goog.i18n.NumberFormatSymbols_lg_UG", "goog.i18n.NumberFormatSymbols_ln_AO", "goog.i18n.NumberFormatSymbols_ln_CF", +"goog.i18n.NumberFormatSymbols_ln_CG", "goog.i18n.NumberFormatSymbols_lo", "goog.i18n.NumberFormatSymbols_lo_LA", "goog.i18n.NumberFormatSymbols_lu", "goog.i18n.NumberFormatSymbols_lu_CD", "goog.i18n.NumberFormatSymbols_luo", "goog.i18n.NumberFormatSymbols_luo_KE", "goog.i18n.NumberFormatSymbols_luy", "goog.i18n.NumberFormatSymbols_luy_KE", "goog.i18n.NumberFormatSymbols_mas", "goog.i18n.NumberFormatSymbols_mas_KE", "goog.i18n.NumberFormatSymbols_mas_TZ", "goog.i18n.NumberFormatSymbols_mer", "goog.i18n.NumberFormatSymbols_mer_KE", +"goog.i18n.NumberFormatSymbols_mfe", "goog.i18n.NumberFormatSymbols_mfe_MU", "goog.i18n.NumberFormatSymbols_mg", "goog.i18n.NumberFormatSymbols_mg_MG", "goog.i18n.NumberFormatSymbols_mgh", "goog.i18n.NumberFormatSymbols_mgh_MZ", "goog.i18n.NumberFormatSymbols_mgo", "goog.i18n.NumberFormatSymbols_mgo_CM", "goog.i18n.NumberFormatSymbols_mk", "goog.i18n.NumberFormatSymbols_mk_MK", "goog.i18n.NumberFormatSymbols_mn", "goog.i18n.NumberFormatSymbols_mn_Cyrl", "goog.i18n.NumberFormatSymbols_mn_Cyrl_MN", +"goog.i18n.NumberFormatSymbols_ms_Latn", "goog.i18n.NumberFormatSymbols_ms_Latn_BN", "goog.i18n.NumberFormatSymbols_ms_Latn_SG", "goog.i18n.NumberFormatSymbols_mua", "goog.i18n.NumberFormatSymbols_mua_CM", "goog.i18n.NumberFormatSymbols_my", "goog.i18n.NumberFormatSymbols_my_MM", "goog.i18n.NumberFormatSymbols_naq", "goog.i18n.NumberFormatSymbols_naq_NA", "goog.i18n.NumberFormatSymbols_nd", "goog.i18n.NumberFormatSymbols_nd_ZW", "goog.i18n.NumberFormatSymbols_ne", "goog.i18n.NumberFormatSymbols_ne_IN", +"goog.i18n.NumberFormatSymbols_ne_NP", "goog.i18n.NumberFormatSymbols_nl_AW", "goog.i18n.NumberFormatSymbols_nl_BE", "goog.i18n.NumberFormatSymbols_nl_CW", "goog.i18n.NumberFormatSymbols_nl_SR", "goog.i18n.NumberFormatSymbols_nl_SX", "goog.i18n.NumberFormatSymbols_nmg", "goog.i18n.NumberFormatSymbols_nmg_CM", "goog.i18n.NumberFormatSymbols_nn", "goog.i18n.NumberFormatSymbols_nn_NO", "goog.i18n.NumberFormatSymbols_nnh", "goog.i18n.NumberFormatSymbols_nnh_CM", "goog.i18n.NumberFormatSymbols_nr", "goog.i18n.NumberFormatSymbols_nr_ZA", +"goog.i18n.NumberFormatSymbols_nso", "goog.i18n.NumberFormatSymbols_nso_ZA", "goog.i18n.NumberFormatSymbols_nus", "goog.i18n.NumberFormatSymbols_nus_SD", "goog.i18n.NumberFormatSymbols_nyn", "goog.i18n.NumberFormatSymbols_nyn_UG", "goog.i18n.NumberFormatSymbols_om", "goog.i18n.NumberFormatSymbols_om_ET", "goog.i18n.NumberFormatSymbols_om_KE", "goog.i18n.NumberFormatSymbols_os", "goog.i18n.NumberFormatSymbols_os_GE", "goog.i18n.NumberFormatSymbols_os_RU", "goog.i18n.NumberFormatSymbols_pa", "goog.i18n.NumberFormatSymbols_pa_Arab", +"goog.i18n.NumberFormatSymbols_pa_Arab_PK", "goog.i18n.NumberFormatSymbols_pa_Guru", "goog.i18n.NumberFormatSymbols_pa_Guru_IN", "goog.i18n.NumberFormatSymbols_ps", "goog.i18n.NumberFormatSymbols_ps_AF", "goog.i18n.NumberFormatSymbols_pt_AO", "goog.i18n.NumberFormatSymbols_pt_CV", "goog.i18n.NumberFormatSymbols_pt_GW", "goog.i18n.NumberFormatSymbols_pt_MO", "goog.i18n.NumberFormatSymbols_pt_MZ", "goog.i18n.NumberFormatSymbols_pt_ST", "goog.i18n.NumberFormatSymbols_pt_TL", "goog.i18n.NumberFormatSymbols_rm", +"goog.i18n.NumberFormatSymbols_rm_CH", "goog.i18n.NumberFormatSymbols_rn", "goog.i18n.NumberFormatSymbols_rn_BI", "goog.i18n.NumberFormatSymbols_ro_MD", "goog.i18n.NumberFormatSymbols_rof", "goog.i18n.NumberFormatSymbols_rof_TZ", "goog.i18n.NumberFormatSymbols_ru_BY", "goog.i18n.NumberFormatSymbols_ru_KG", "goog.i18n.NumberFormatSymbols_ru_KZ", "goog.i18n.NumberFormatSymbols_ru_MD", "goog.i18n.NumberFormatSymbols_ru_UA", "goog.i18n.NumberFormatSymbols_rw", "goog.i18n.NumberFormatSymbols_rw_RW", "goog.i18n.NumberFormatSymbols_rwk", +"goog.i18n.NumberFormatSymbols_rwk_TZ", "goog.i18n.NumberFormatSymbols_sah", "goog.i18n.NumberFormatSymbols_sah_RU", "goog.i18n.NumberFormatSymbols_saq", "goog.i18n.NumberFormatSymbols_saq_KE", "goog.i18n.NumberFormatSymbols_sbp", "goog.i18n.NumberFormatSymbols_sbp_TZ", "goog.i18n.NumberFormatSymbols_se", "goog.i18n.NumberFormatSymbols_se_FI", "goog.i18n.NumberFormatSymbols_se_NO", "goog.i18n.NumberFormatSymbols_seh", "goog.i18n.NumberFormatSymbols_seh_MZ", "goog.i18n.NumberFormatSymbols_ses", "goog.i18n.NumberFormatSymbols_ses_ML", +"goog.i18n.NumberFormatSymbols_sg", "goog.i18n.NumberFormatSymbols_sg_CF", "goog.i18n.NumberFormatSymbols_shi", "goog.i18n.NumberFormatSymbols_shi_Latn", "goog.i18n.NumberFormatSymbols_shi_Latn_MA", "goog.i18n.NumberFormatSymbols_shi_Tfng", "goog.i18n.NumberFormatSymbols_shi_Tfng_MA", "goog.i18n.NumberFormatSymbols_si", "goog.i18n.NumberFormatSymbols_si_LK", "goog.i18n.NumberFormatSymbols_sn", "goog.i18n.NumberFormatSymbols_sn_ZW", "goog.i18n.NumberFormatSymbols_so", "goog.i18n.NumberFormatSymbols_so_DJ", +"goog.i18n.NumberFormatSymbols_so_ET", "goog.i18n.NumberFormatSymbols_so_KE", "goog.i18n.NumberFormatSymbols_so_SO", "goog.i18n.NumberFormatSymbols_sq_MK", "goog.i18n.NumberFormatSymbols_sq_XK", "goog.i18n.NumberFormatSymbols_sr_Cyrl", "goog.i18n.NumberFormatSymbols_sr_Cyrl_BA", "goog.i18n.NumberFormatSymbols_sr_Cyrl_ME", "goog.i18n.NumberFormatSymbols_sr_Cyrl_XK", "goog.i18n.NumberFormatSymbols_sr_Latn", "goog.i18n.NumberFormatSymbols_sr_Latn_BA", "goog.i18n.NumberFormatSymbols_sr_Latn_ME", "goog.i18n.NumberFormatSymbols_sr_Latn_RS", +"goog.i18n.NumberFormatSymbols_sr_Latn_XK", "goog.i18n.NumberFormatSymbols_ss", "goog.i18n.NumberFormatSymbols_ss_SZ", "goog.i18n.NumberFormatSymbols_ss_ZA", "goog.i18n.NumberFormatSymbols_ssy", "goog.i18n.NumberFormatSymbols_ssy_ER", "goog.i18n.NumberFormatSymbols_st", "goog.i18n.NumberFormatSymbols_st_LS", "goog.i18n.NumberFormatSymbols_st_ZA", "goog.i18n.NumberFormatSymbols_sv_AX", "goog.i18n.NumberFormatSymbols_sv_FI", "goog.i18n.NumberFormatSymbols_sw_KE", "goog.i18n.NumberFormatSymbols_sw_UG", +"goog.i18n.NumberFormatSymbols_swc", "goog.i18n.NumberFormatSymbols_swc_CD", "goog.i18n.NumberFormatSymbols_ta_LK", "goog.i18n.NumberFormatSymbols_ta_MY", "goog.i18n.NumberFormatSymbols_ta_SG", "goog.i18n.NumberFormatSymbols_teo", "goog.i18n.NumberFormatSymbols_teo_KE", "goog.i18n.NumberFormatSymbols_teo_UG", "goog.i18n.NumberFormatSymbols_tg", "goog.i18n.NumberFormatSymbols_tg_Cyrl", "goog.i18n.NumberFormatSymbols_tg_Cyrl_TJ", "goog.i18n.NumberFormatSymbols_ti", "goog.i18n.NumberFormatSymbols_ti_ER", +"goog.i18n.NumberFormatSymbols_ti_ET", "goog.i18n.NumberFormatSymbols_tig", "goog.i18n.NumberFormatSymbols_tig_ER", "goog.i18n.NumberFormatSymbols_tn", "goog.i18n.NumberFormatSymbols_tn_BW", "goog.i18n.NumberFormatSymbols_tn_ZA", "goog.i18n.NumberFormatSymbols_to", "goog.i18n.NumberFormatSymbols_to_TO", "goog.i18n.NumberFormatSymbols_tr_CY", "goog.i18n.NumberFormatSymbols_ts", "goog.i18n.NumberFormatSymbols_ts_ZA", "goog.i18n.NumberFormatSymbols_twq", "goog.i18n.NumberFormatSymbols_twq_NE", "goog.i18n.NumberFormatSymbols_tzm", +"goog.i18n.NumberFormatSymbols_tzm_Latn", "goog.i18n.NumberFormatSymbols_tzm_Latn_MA", "goog.i18n.NumberFormatSymbols_ur_IN", "goog.i18n.NumberFormatSymbols_uz", "goog.i18n.NumberFormatSymbols_uz_Arab", "goog.i18n.NumberFormatSymbols_uz_Arab_AF", "goog.i18n.NumberFormatSymbols_uz_Cyrl", "goog.i18n.NumberFormatSymbols_uz_Cyrl_UZ", "goog.i18n.NumberFormatSymbols_uz_Latn", "goog.i18n.NumberFormatSymbols_uz_Latn_UZ", "goog.i18n.NumberFormatSymbols_vai", "goog.i18n.NumberFormatSymbols_vai_Latn", "goog.i18n.NumberFormatSymbols_vai_Latn_LR", +"goog.i18n.NumberFormatSymbols_vai_Vaii", "goog.i18n.NumberFormatSymbols_vai_Vaii_LR", "goog.i18n.NumberFormatSymbols_ve", "goog.i18n.NumberFormatSymbols_ve_ZA", "goog.i18n.NumberFormatSymbols_vo", "goog.i18n.NumberFormatSymbols_vun", "goog.i18n.NumberFormatSymbols_vun_TZ", "goog.i18n.NumberFormatSymbols_wae", "goog.i18n.NumberFormatSymbols_wae_CH", "goog.i18n.NumberFormatSymbols_wal", "goog.i18n.NumberFormatSymbols_wal_ET", "goog.i18n.NumberFormatSymbols_xh", "goog.i18n.NumberFormatSymbols_xh_ZA", +"goog.i18n.NumberFormatSymbols_xog", "goog.i18n.NumberFormatSymbols_xog_UG", "goog.i18n.NumberFormatSymbols_yav", "goog.i18n.NumberFormatSymbols_yav_CM", "goog.i18n.NumberFormatSymbols_yo", "goog.i18n.NumberFormatSymbols_yo_NG", "goog.i18n.NumberFormatSymbols_zh_Hans", "goog.i18n.NumberFormatSymbols_zh_Hans_HK", "goog.i18n.NumberFormatSymbols_zh_Hans_MO", "goog.i18n.NumberFormatSymbols_zh_Hans_SG", "goog.i18n.NumberFormatSymbols_zh_Hant", "goog.i18n.NumberFormatSymbols_zh_Hant_HK", "goog.i18n.NumberFormatSymbols_zh_Hant_MO", +"goog.i18n.NumberFormatSymbols_zh_Hant_TW"], ["goog.i18n.NumberFormatSymbols"]); +goog.addDependency("/closure/goog/i18n/ordinalrules.js", ["goog.i18n.ordinalRules"], []); +goog.addDependency("/closure/goog/i18n/pluralrules.js", ["goog.i18n.pluralRules"], []); +goog.addDependency("/closure/goog/i18n/timezone.js", ["goog.i18n.TimeZone"], ["goog.array", "goog.date.DateLike", "goog.string"]); +goog.addDependency("/closure/goog/i18n/uchar.js", ["goog.i18n.uChar"], []); +goog.addDependency("/closure/goog/i18n/uchar/localnamefetcher.js", ["goog.i18n.uChar.LocalNameFetcher"], ["goog.i18n.uChar", "goog.i18n.uChar.NameFetcher", "goog.log"]); +goog.addDependency("/closure/goog/i18n/uchar/namefetcher.js", ["goog.i18n.uChar.NameFetcher"], []); +goog.addDependency("/closure/goog/i18n/uchar/remotenamefetcher.js", ["goog.i18n.uChar.RemoteNameFetcher"], ["goog.Disposable", "goog.Uri", "goog.i18n.uChar", "goog.i18n.uChar.NameFetcher", "goog.log", "goog.net.XhrIo", "goog.structs.Map"]); +goog.addDependency("/closure/goog/iter/iter.js", ["goog.iter", "goog.iter.Iterator", "goog.iter.StopIteration"], ["goog.array", "goog.asserts"]); +goog.addDependency("/closure/goog/json/evaljsonprocessor.js", ["goog.json.EvalJsonProcessor"], ["goog.json", "goog.json.Processor", "goog.json.Serializer"]); +goog.addDependency("/closure/goog/json/json.js", ["goog.json", "goog.json.Serializer"], []); +goog.addDependency("/closure/goog/json/nativejsonprocessor.js", ["goog.json.NativeJsonProcessor"], ["goog.asserts", "goog.json", "goog.json.Processor"]); +goog.addDependency("/closure/goog/json/processor.js", ["goog.json.Processor"], ["goog.string.Parser", "goog.string.Stringifier"]); +goog.addDependency("/closure/goog/labs/classdef/classdef.js", ["goog.labs.classdef"], []); +goog.addDependency("/closure/goog/labs/events/touch.js", ["goog.labs.events.touch", "goog.labs.events.touch.TouchData"], ["goog.array", "goog.asserts", "goog.events.EventType", "goog.string"]); +goog.addDependency("/closure/goog/labs/events/touch_test.js", ["goog.labs.events.touchTest"], ["goog.labs.events.touch", "goog.testing.jsunit"]); +goog.addDependency("/closure/goog/labs/format/csv.js", ["goog.labs.format.csv", "goog.labs.format.csv.ParseError", "goog.labs.format.csv.Token"], ["goog.array", "goog.asserts", "goog.debug.Error", "goog.object", "goog.string", "goog.string.newlines"]); +goog.addDependency("/closure/goog/labs/format/csv_test.js", ["goog.labs.format.csvTest"], ["goog.labs.format.csv", "goog.labs.format.csv.ParseError", "goog.object", "goog.testing.asserts", "goog.testing.jsunit"]); +goog.addDependency("/closure/goog/labs/mock/mock.js", ["goog.labs.mock"], ["goog.array", "goog.debug", "goog.debug.Error", "goog.functions", "goog.json"]); +goog.addDependency("/closure/goog/labs/net/image.js", ["goog.labs.net.image"], ["goog.events.EventHandler", "goog.events.EventType", "goog.net.EventType", "goog.result.SimpleResult", "goog.userAgent"]); +goog.addDependency("/closure/goog/labs/net/image_test.js", ["goog.labs.net.imageTest"], ["goog.events", "goog.labs.net.image", "goog.result", "goog.result.Result", "goog.string", "goog.testing.AsyncTestCase", "goog.testing.jsunit", "goog.testing.recordFunction"]); +goog.addDependency("/closure/goog/labs/net/webchannel.js", ["goog.net.WebChannel"], ["goog.events", "goog.events.Event"]); +goog.addDependency("/closure/goog/labs/net/webchannel/basetestchannel.js", ["goog.labs.net.webChannel.BaseTestChannel"], ["goog.json.EvalJsonProcessor", "goog.labs.net.webChannel.Channel", "goog.labs.net.webChannel.WebChannelRequest", "goog.labs.net.webChannel.requestStats", "goog.labs.net.webChannel.requestStats.ServerReachability", "goog.labs.net.webChannel.requestStats.Stat", "goog.net.tmpnetwork"]); +goog.addDependency("/closure/goog/labs/net/webchannel/channel.js", ["goog.labs.net.webChannel.Channel"], []); +goog.addDependency("/closure/goog/labs/net/webchannel/requeststats.js", ["goog.labs.net.webChannel.requestStats", "goog.labs.net.webChannel.requestStats.Event", "goog.labs.net.webChannel.requestStats.ServerReachability", "goog.labs.net.webChannel.requestStats.ServerReachabilityEvent", "goog.labs.net.webChannel.requestStats.Stat", "goog.labs.net.webChannel.requestStats.StatEvent", "goog.labs.net.webChannel.requestStats.TimingEvent"], ["goog.events.Event", "goog.events.EventTarget"]); +goog.addDependency("/closure/goog/labs/net/webchannel/webchannelbase.js", ["goog.labs.net.webChannel.WebChannelBase"], ["goog.Uri", "goog.array", "goog.asserts", "goog.debug.TextFormatter", "goog.json", "goog.json.EvalJsonProcessor", "goog.labs.net.webChannel.BaseTestChannel", "goog.labs.net.webChannel.Channel", "goog.labs.net.webChannel.WebChannelDebug", "goog.labs.net.webChannel.WebChannelRequest", "goog.labs.net.webChannel.requestStats", "goog.labs.net.webChannel.requestStats.Stat", "goog.log", +"goog.net.XhrIo", "goog.net.tmpnetwork", "goog.string", "goog.structs", "goog.structs.CircularBuffer"]); +goog.addDependency("/closure/goog/labs/net/webchannel/webchannelbase_test.js", ["goog.labs.net.webChannel.webChannelBaseTest"], ["goog.Timer", "goog.array", "goog.dom", "goog.functions", "goog.json", "goog.labs.net.webChannel.WebChannelBase", "goog.labs.net.webChannel.WebChannelDebug", "goog.labs.net.webChannel.WebChannelRequest", "goog.labs.net.webChannel.requestStats", "goog.labs.net.webChannel.requestStats.Stat", "goog.net.tmpnetwork", "goog.structs.Map", "goog.testing.MockClock", "goog.testing.PropertyReplacer", +"goog.testing.asserts", "goog.testing.jsunit", "goog.testing.recordFunction"]); +goog.addDependency("/closure/goog/labs/net/webchannel/webchannelbasetransport.js", ["goog.labs.net.webChannel.WebChannelBaseTransport"], ["goog.asserts", "goog.events.EventTarget", "goog.labs.net.webChannel.WebChannelBase", "goog.log", "goog.net.WebChannel", "goog.net.WebChannelTransport", "goog.string.path"]); +goog.addDependency("/closure/goog/labs/net/webchannel/webchanneldebug.js", ["goog.labs.net.webChannel.WebChannelDebug"], ["goog.json", "goog.log"]); +goog.addDependency("/closure/goog/labs/net/webchannel/webchannelrequest.js", ["goog.labs.net.webChannel.WebChannelRequest"], ["goog.Timer", "goog.async.Throttle", "goog.events.EventHandler", "goog.labs.net.webChannel.requestStats", "goog.labs.net.webChannel.requestStats.ServerReachability", "goog.labs.net.webChannel.requestStats.Stat", "goog.net.ErrorCode", "goog.net.EventType", "goog.net.XmlHttp", "goog.object", "goog.userAgent"]); +goog.addDependency("/closure/goog/labs/net/webchanneltransport.js", ["goog.net.WebChannelTransport"], []); +goog.addDependency("/closure/goog/labs/net/webchanneltransportfactory.js", ["goog.net.createWebChannelTransport"], ["goog.functions", "goog.labs.net.webChannel.WebChannelBaseTransport"]); +goog.addDependency("/closure/goog/labs/net/xhr.js", ["goog.labs.net.xhr", "goog.labs.net.xhr.Error", "goog.labs.net.xhr.HttpError", "goog.labs.net.xhr.TimeoutError"], ["goog.debug.Error", "goog.json", "goog.net.HttpStatus", "goog.net.XmlHttp", "goog.result", "goog.result.SimpleResult", "goog.string", "goog.uri.utils"]); +goog.addDependency("/closure/goog/labs/object/object.js", ["goog.labs.object"], []); +goog.addDependency("/closure/goog/labs/observe/notice.js", ["goog.labs.observe.Notice"], []); +goog.addDependency("/closure/goog/labs/observe/observable.js", ["goog.labs.observe.Observable"], ["goog.disposable.IDisposable"]); +goog.addDependency("/closure/goog/labs/observe/observableset.js", ["goog.labs.observe.ObservableSet"], ["goog.array", "goog.labs.observe.Observer"]); +goog.addDependency("/closure/goog/labs/observe/observationset.js", ["goog.labs.observe.ObservationSet"], ["goog.array", "goog.labs.observe.Observer"]); +goog.addDependency("/closure/goog/labs/observe/observer.js", ["goog.labs.observe.Observer"], []); +goog.addDependency("/closure/goog/labs/observe/simpleobservable.js", ["goog.labs.observe.SimpleObservable"], ["goog.Disposable", "goog.array", "goog.asserts", "goog.labs.observe.Notice", "goog.labs.observe.Observable", "goog.labs.observe.Observer", "goog.object"]); +goog.addDependency("/closure/goog/labs/structs/map.js", ["goog.labs.structs.Map"], ["goog.array", "goog.asserts", "goog.labs.object", "goog.object"]); +goog.addDependency("/closure/goog/labs/structs/map_perf.js", ["goog.labs.structs.mapPerf"], ["goog.dom", "goog.labs.structs.Map", "goog.structs.Map", "goog.testing.PerformanceTable", "goog.testing.jsunit"]); +goog.addDependency("/closure/goog/labs/structs/multimap.js", ["goog.labs.structs.Multimap"], ["goog.array", "goog.labs.object", "goog.labs.structs.Map"]); +goog.addDependency("/closure/goog/labs/style/pixeldensitymonitor.js", ["goog.labs.style.PixelDensityMonitor", "goog.labs.style.PixelDensityMonitor.Density", "goog.labs.style.PixelDensityMonitor.EventType"], ["goog.events", "goog.events.EventTarget"]); +goog.addDependency("/closure/goog/labs/style/pixeldensitymonitor_test.js", ["goog.labs.style.PixelDensityMonitorTest"], ["goog.array", "goog.dom.DomHelper", "goog.events", "goog.labs.style.PixelDensityMonitor", "goog.testing.MockControl", "goog.testing.jsunit", "goog.testing.recordFunction"]); +goog.addDependency("/closure/goog/labs/testing/assertthat.js", ["goog.labs.testing.MatcherError", "goog.labs.testing.assertThat"], ["goog.asserts", "goog.debug.Error", "goog.labs.testing.Matcher"]); +goog.addDependency("/closure/goog/labs/testing/decoratormatcher.js", ["goog.labs.testing.AnythingMatcher"], ["goog.labs.testing.Matcher"]); +goog.addDependency("/closure/goog/labs/testing/dictionarymatcher.js", ["goog.labs.testing.HasEntriesMatcher", "goog.labs.testing.HasEntryMatcher", "goog.labs.testing.HasKeyMatcher", "goog.labs.testing.HasValueMatcher"], ["goog.array", "goog.asserts", "goog.labs.testing.Matcher", "goog.string"]); +goog.addDependency("/closure/goog/labs/testing/logicmatcher.js", ["goog.labs.testing.AllOfMatcher", "goog.labs.testing.AnyOfMatcher", "goog.labs.testing.IsNotMatcher"], ["goog.array", "goog.labs.testing.Matcher"]); +goog.addDependency("/closure/goog/labs/testing/matcher.js", ["goog.labs.testing.Matcher"], []); +goog.addDependency("/closure/goog/labs/testing/numbermatcher.js", ["goog.labs.testing.CloseToMatcher", "goog.labs.testing.EqualToMatcher", "goog.labs.testing.GreaterThanEqualToMatcher", "goog.labs.testing.GreaterThanMatcher", "goog.labs.testing.LessThanEqualToMatcher", "goog.labs.testing.LessThanMatcher"], ["goog.asserts", "goog.labs.testing.Matcher"]); +goog.addDependency("/closure/goog/labs/testing/objectmatcher.js", ["goog.labs.testing.HasPropertyMatcher", "goog.labs.testing.InstanceOfMatcher", "goog.labs.testing.IsNullMatcher", "goog.labs.testing.IsNullOrUndefinedMatcher", "goog.labs.testing.IsUndefinedMatcher", "goog.labs.testing.ObjectEqualsMatcher"], ["goog.labs.testing.Matcher", "goog.string"]); +goog.addDependency("/closure/goog/labs/testing/stringmatcher.js", ["goog.labs.testing.ContainsStringMatcher", "goog.labs.testing.EndsWithMatcher", "goog.labs.testing.EqualToIgnoringCaseMatcher", "goog.labs.testing.EqualToIgnoringWhitespaceMatcher", "goog.labs.testing.EqualsMatcher", "goog.labs.testing.RegexMatcher", "goog.labs.testing.StartsWithMatcher", "goog.labs.testing.StringContainsInOrderMatcher"], ["goog.asserts", "goog.labs.testing.Matcher", "goog.string"]); +goog.addDependency("/closure/goog/labs/useragent/browser.js", ["goog.labs.userAgent.browser"], ["goog.asserts", "goog.labs.userAgent.util", "goog.memoize", "goog.string"]); +goog.addDependency("/closure/goog/labs/useragent/browser_test.js", ["goog.labs.userAgent.browserTest"], ["goog.labs.userAgent.browser", "goog.labs.userAgent.testAgents", "goog.testing.PropertyReplacer", "goog.testing.jsunit"]); +goog.addDependency("/closure/goog/labs/useragent/device.js", ["goog.labs.userAgent.device"], ["goog.labs.userAgent.util"]); +goog.addDependency("/closure/goog/labs/useragent/device_test.js", ["goog.labs.userAgent.deviceTest"], ["goog.labs.userAgent.device", "goog.labs.userAgent.testAgents", "goog.testing.PropertyReplacer", "goog.testing.jsunit"]); +goog.addDependency("/closure/goog/labs/useragent/engine.js", ["goog.labs.userAgent.engine"], ["goog.array", "goog.labs.userAgent.util", "goog.memoize", "goog.string"]); +goog.addDependency("/closure/goog/labs/useragent/engine_test.js", ["goog.labs.userAgent.engineTest"], ["goog.labs.userAgent.engine", "goog.labs.userAgent.testAgents", "goog.testing.PropertyReplacer", "goog.testing.jsunit"]); +goog.addDependency("/closure/goog/labs/useragent/platform.js", ["goog.labs.userAgent.platform"], ["goog.labs.userAgent.util", "goog.memoize", "goog.string"]); +goog.addDependency("/closure/goog/labs/useragent/platform_test.js", ["goog.labs.userAgent.platformTest"], ["goog.labs.userAgent.platform", "goog.labs.userAgent.testAgents", "goog.testing.PropertyReplacer", "goog.testing.jsunit"]); +goog.addDependency("/closure/goog/labs/useragent/test_agents.js", ["goog.labs.userAgent.testAgents"], []); +goog.addDependency("/closure/goog/labs/useragent/util.js", ["goog.labs.userAgent.util"], ["goog.memoize", "goog.string"]); +goog.addDependency("/closure/goog/labs/useragent/util_test.js", ["goog.labs.userAgent.utilTest"], ["goog.labs.userAgent.testAgents", "goog.labs.userAgent.util", "goog.testing.jsunit"]); +goog.addDependency("/closure/goog/locale/countries.js", ["goog.locale.countries"], []); +goog.addDependency("/closure/goog/locale/defaultlocalenameconstants.js", ["goog.locale.defaultLocaleNameConstants"], []); +goog.addDependency("/closure/goog/locale/genericfontnames.js", ["goog.locale.genericFontNames"], []); +goog.addDependency("/closure/goog/locale/genericfontnamesdata.js", ["goog.locale.genericFontNamesData"], []); +goog.addDependency("/closure/goog/locale/locale.js", ["goog.locale"], ["goog.locale.nativeNameConstants"]); +goog.addDependency("/closure/goog/locale/nativenameconstants.js", ["goog.locale.nativeNameConstants"], []); +goog.addDependency("/closure/goog/locale/scriptToLanguages.js", ["goog.locale.scriptToLanguages"], ["goog.locale"]); +goog.addDependency("/closure/goog/locale/timezonedetection.js", ["goog.locale.timeZoneDetection"], ["goog.locale", "goog.locale.TimeZoneFingerprint"]); +goog.addDependency("/closure/goog/locale/timezonefingerprint.js", ["goog.locale.TimeZoneFingerprint"], []); +goog.addDependency("/closure/goog/locale/timezonelist.js", ["goog.locale.TimeZoneList"], ["goog.locale"]); +goog.addDependency("/closure/goog/log/log.js", ["goog.log", "goog.log.Level", "goog.log.LogRecord", "goog.log.Logger"], ["goog.debug", "goog.debug.LogRecord", "goog.debug.Logger"]); +goog.addDependency("/closure/goog/log/log_test.js", ["goog.logTest"], ["goog.debug.LogManager", "goog.log", "goog.log.Level", "goog.testing.jsunit"]); +goog.addDependency("/closure/goog/math/bezier.js", ["goog.math.Bezier"], ["goog.math", "goog.math.Coordinate"]); +goog.addDependency("/closure/goog/math/box.js", ["goog.math.Box"], ["goog.math.Coordinate"]); +goog.addDependency("/closure/goog/math/coordinate.js", ["goog.math.Coordinate"], ["goog.math"]); +goog.addDependency("/closure/goog/math/coordinate3.js", ["goog.math.Coordinate3"], []); +goog.addDependency("/closure/goog/math/exponentialbackoff.js", ["goog.math.ExponentialBackoff"], ["goog.asserts"]); +goog.addDependency("/closure/goog/math/integer.js", ["goog.math.Integer"], []); +goog.addDependency("/closure/goog/math/interpolator/interpolator1.js", ["goog.math.interpolator.Interpolator1"], []); +goog.addDependency("/closure/goog/math/interpolator/linear1.js", ["goog.math.interpolator.Linear1"], ["goog.array", "goog.math", "goog.math.interpolator.Interpolator1"]); +goog.addDependency("/closure/goog/math/interpolator/pchip1.js", ["goog.math.interpolator.Pchip1"], ["goog.math", "goog.math.interpolator.Spline1"]); +goog.addDependency("/closure/goog/math/interpolator/spline1.js", ["goog.math.interpolator.Spline1"], ["goog.array", "goog.math", "goog.math.interpolator.Interpolator1", "goog.math.tdma"]); +goog.addDependency("/closure/goog/math/line.js", ["goog.math.Line"], ["goog.math", "goog.math.Coordinate"]); +goog.addDependency("/closure/goog/math/long.js", ["goog.math.Long"], []); +goog.addDependency("/closure/goog/math/math.js", ["goog.math"], ["goog.array", "goog.asserts"]); +goog.addDependency("/closure/goog/math/matrix.js", ["goog.math.Matrix"], ["goog.array", "goog.math", "goog.math.Size", "goog.string"]); +goog.addDependency("/closure/goog/math/range.js", ["goog.math.Range"], []); +goog.addDependency("/closure/goog/math/rangeset.js", ["goog.math.RangeSet"], ["goog.array", "goog.iter.Iterator", "goog.iter.StopIteration", "goog.math.Range"]); +goog.addDependency("/closure/goog/math/rect.js", ["goog.math.Rect"], ["goog.math.Box", "goog.math.Coordinate", "goog.math.Size"]); +goog.addDependency("/closure/goog/math/size.js", ["goog.math.Size"], []); +goog.addDependency("/closure/goog/math/tdma.js", ["goog.math.tdma"], []); +goog.addDependency("/closure/goog/math/vec2.js", ["goog.math.Vec2"], ["goog.math", "goog.math.Coordinate"]); +goog.addDependency("/closure/goog/math/vec3.js", ["goog.math.Vec3"], ["goog.math", "goog.math.Coordinate3"]); +goog.addDependency("/closure/goog/memoize/memoize.js", ["goog.memoize"], []); +goog.addDependency("/closure/goog/messaging/abstractchannel.js", ["goog.messaging.AbstractChannel"], ["goog.Disposable", "goog.debug", "goog.json", "goog.log", "goog.messaging.MessageChannel"]); +goog.addDependency("/closure/goog/messaging/bufferedchannel.js", ["goog.messaging.BufferedChannel"], ["goog.Timer", "goog.Uri", "goog.debug.Error", "goog.events", "goog.log", "goog.messaging.MessageChannel", "goog.messaging.MultiChannel"]); +goog.addDependency("/closure/goog/messaging/deferredchannel.js", ["goog.messaging.DeferredChannel"], ["goog.Disposable", "goog.async.Deferred", "goog.messaging.MessageChannel"]); +goog.addDependency("/closure/goog/messaging/loggerclient.js", ["goog.messaging.LoggerClient"], ["goog.Disposable", "goog.debug", "goog.debug.LogManager", "goog.debug.Logger"]); +goog.addDependency("/closure/goog/messaging/loggerserver.js", ["goog.messaging.LoggerServer"], ["goog.Disposable", "goog.log"]); +goog.addDependency("/closure/goog/messaging/messagechannel.js", ["goog.messaging.MessageChannel"], []); +goog.addDependency("/closure/goog/messaging/messaging.js", ["goog.messaging"], ["goog.messaging.MessageChannel"]); +goog.addDependency("/closure/goog/messaging/multichannel.js", ["goog.messaging.MultiChannel", "goog.messaging.MultiChannel.VirtualChannel"], ["goog.Disposable", "goog.events.EventHandler", "goog.log", "goog.messaging.MessageChannel", "goog.object"]); +goog.addDependency("/closure/goog/messaging/portcaller.js", ["goog.messaging.PortCaller"], ["goog.Disposable", "goog.async.Deferred", "goog.messaging.DeferredChannel", "goog.messaging.PortChannel", "goog.messaging.PortNetwork", "goog.object"]); +goog.addDependency("/closure/goog/messaging/portchannel.js", ["goog.messaging.PortChannel"], ["goog.Timer", "goog.array", "goog.async.Deferred", "goog.debug", "goog.dom", "goog.dom.DomHelper", "goog.events", "goog.events.EventType", "goog.json", "goog.log", "goog.messaging.AbstractChannel", "goog.messaging.DeferredChannel", "goog.object", "goog.string"]); +goog.addDependency("/closure/goog/messaging/portnetwork.js", ["goog.messaging.PortNetwork"], []); +goog.addDependency("/closure/goog/messaging/portoperator.js", ["goog.messaging.PortOperator"], ["goog.Disposable", "goog.asserts", "goog.log", "goog.messaging.PortChannel", "goog.messaging.PortNetwork", "goog.object"]); +goog.addDependency("/closure/goog/messaging/respondingchannel.js", ["goog.messaging.RespondingChannel"], ["goog.Disposable", "goog.log", "goog.messaging.MessageChannel", "goog.messaging.MultiChannel", "goog.messaging.MultiChannel.VirtualChannel"]); +goog.addDependency("/closure/goog/messaging/testdata/portchannel_worker.js", ["goog.messaging.testdata.portchannel_worker"], ["goog.messaging.PortChannel"]); +goog.addDependency("/closure/goog/messaging/testdata/portnetwork_worker1.js", ["goog.messaging.testdata.portnetwork_worker1"], ["goog.messaging.PortCaller", "goog.messaging.PortChannel"]); +goog.addDependency("/closure/goog/messaging/testdata/portnetwork_worker2.js", ["goog.messaging.testdata.portnetwork_worker2"], ["goog.messaging.PortCaller", "goog.messaging.PortChannel"]); +goog.addDependency("/closure/goog/module/abstractmoduleloader.js", ["goog.module.AbstractModuleLoader"], []); +goog.addDependency("/closure/goog/module/basemodule.js", ["goog.module.BaseModule"], ["goog.Disposable"]); +goog.addDependency("/closure/goog/module/loader.js", ["goog.module.Loader"], ["goog.Timer", "goog.array", "goog.dom", "goog.object"]); +goog.addDependency("/closure/goog/module/module.js", ["goog.module"], ["goog.array", "goog.module.Loader"]); +goog.addDependency("/closure/goog/module/moduleinfo.js", ["goog.module.ModuleInfo"], ["goog.Disposable", "goog.functions", "goog.module.BaseModule", "goog.module.ModuleLoadCallback"]); +goog.addDependency("/closure/goog/module/moduleloadcallback.js", ["goog.module.ModuleLoadCallback"], ["goog.debug.entryPointRegistry", "goog.debug.errorHandlerWeakDep"]); +goog.addDependency("/closure/goog/module/moduleloader.js", ["goog.module.ModuleLoader"], ["goog.Timer", "goog.array", "goog.events", "goog.events.Event", "goog.events.EventHandler", "goog.events.EventTarget", "goog.log", "goog.module.AbstractModuleLoader", "goog.net.BulkLoader", "goog.net.EventType", "goog.net.jsloader", "goog.userAgent.product"]); +goog.addDependency("/closure/goog/module/moduleloader_test.js", ["goog.module.ModuleLoaderTest"], ["goog.array", "goog.dom", "goog.functions", "goog.module.ModuleLoader", "goog.module.ModuleManager", "goog.module.ModuleManager.CallbackType", "goog.object", "goog.testing.AsyncTestCase", "goog.testing.PropertyReplacer", "goog.testing.events.EventObserver", "goog.testing.jsunit", "goog.testing.recordFunction", "goog.userAgent.product"]); +goog.addDependency("/closure/goog/module/modulemanager.js", ["goog.module.ModuleManager", "goog.module.ModuleManager.CallbackType", "goog.module.ModuleManager.FailureType"], ["goog.Disposable", "goog.array", "goog.asserts", "goog.async.Deferred", "goog.debug.Trace", "goog.dispose", "goog.log", "goog.module.ModuleInfo", "goog.module.ModuleLoadCallback", "goog.object"]); +goog.addDependency("/closure/goog/module/testdata/modA_1.js", ["goog.module.testdata.modA_1"], []); +goog.addDependency("/closure/goog/module/testdata/modA_2.js", ["goog.module.testdata.modA_2"], ["goog.module.ModuleManager"]); +goog.addDependency("/closure/goog/module/testdata/modB_1.js", ["goog.module.testdata.modB_1"], ["goog.module.ModuleManager"]); +goog.addDependency("/closure/goog/net/browserchannel.js", ["goog.net.BrowserChannel", "goog.net.BrowserChannel.Error", "goog.net.BrowserChannel.Event", "goog.net.BrowserChannel.Handler", "goog.net.BrowserChannel.LogSaver", "goog.net.BrowserChannel.QueuedMap", "goog.net.BrowserChannel.ServerReachability", "goog.net.BrowserChannel.ServerReachabilityEvent", "goog.net.BrowserChannel.Stat", "goog.net.BrowserChannel.StatEvent", "goog.net.BrowserChannel.State", "goog.net.BrowserChannel.TimingEvent"], ["goog.Uri", +"goog.array", "goog.asserts", "goog.debug.TextFormatter", "goog.events.Event", "goog.events.EventTarget", "goog.json", "goog.json.EvalJsonProcessor", "goog.log", "goog.net.BrowserTestChannel", "goog.net.ChannelDebug", "goog.net.ChannelRequest", "goog.net.XhrIo", "goog.net.tmpnetwork", "goog.string", "goog.structs", "goog.structs.CircularBuffer"]); +goog.addDependency("/closure/goog/net/browsertestchannel.js", ["goog.net.BrowserTestChannel"], ["goog.json.EvalJsonProcessor", "goog.net.ChannelRequest", "goog.net.ChannelRequest.Error", "goog.net.tmpnetwork", "goog.string.Parser", "goog.userAgent"]); +goog.addDependency("/closure/goog/net/bulkloader.js", ["goog.net.BulkLoader"], ["goog.events.EventHandler", "goog.events.EventTarget", "goog.log", "goog.net.BulkLoaderHelper", "goog.net.EventType", "goog.net.XhrIo"]); +goog.addDependency("/closure/goog/net/bulkloaderhelper.js", ["goog.net.BulkLoaderHelper"], ["goog.Disposable", "goog.log"]); +goog.addDependency("/closure/goog/net/channeldebug.js", ["goog.net.ChannelDebug"], ["goog.json", "goog.log"]); +goog.addDependency("/closure/goog/net/channelrequest.js", ["goog.net.ChannelRequest", "goog.net.ChannelRequest.Error"], ["goog.Timer", "goog.async.Throttle", "goog.events.EventHandler", "goog.net.ErrorCode", "goog.net.EventType", "goog.net.XmlHttp", "goog.object", "goog.userAgent"]); +goog.addDependency("/closure/goog/net/cookies.js", ["goog.net.Cookies", "goog.net.cookies"], []); +goog.addDependency("/closure/goog/net/crossdomainrpc.js", ["goog.net.CrossDomainRpc"], ["goog.Uri", "goog.dom", "goog.events", "goog.events.EventTarget", "goog.events.EventType", "goog.json", "goog.log", "goog.net.EventType", "goog.net.HttpStatus", "goog.string", "goog.userAgent"]); +goog.addDependency("/closure/goog/net/errorcode.js", ["goog.net.ErrorCode"], []); +goog.addDependency("/closure/goog/net/eventtype.js", ["goog.net.EventType"], []); +goog.addDependency("/closure/goog/net/filedownloader.js", ["goog.net.FileDownloader", "goog.net.FileDownloader.Error"], ["goog.Disposable", "goog.asserts", "goog.async.Deferred", "goog.crypt.hash32", "goog.debug.Error", "goog.events", "goog.events.EventHandler", "goog.fs", "goog.fs.DirectoryEntry", "goog.fs.Error", "goog.fs.FileSaver", "goog.net.EventType", "goog.net.XhrIo", "goog.net.XhrIoPool", "goog.object"]); +goog.addDependency("/closure/goog/net/httpstatus.js", ["goog.net.HttpStatus"], []); +goog.addDependency("/closure/goog/net/iframeio.js", ["goog.net.IframeIo", "goog.net.IframeIo.IncrementalDataEvent"], ["goog.Timer", "goog.Uri", "goog.debug", "goog.dom", "goog.events", "goog.events.Event", "goog.events.EventTarget", "goog.events.EventType", "goog.json", "goog.log", "goog.net.ErrorCode", "goog.net.EventType", "goog.reflect", "goog.string", "goog.structs", "goog.userAgent"]); +goog.addDependency("/closure/goog/net/iframeloadmonitor.js", ["goog.net.IframeLoadMonitor"], ["goog.dom", "goog.events", "goog.events.EventTarget", "goog.events.EventType", "goog.userAgent"]); +goog.addDependency("/closure/goog/net/imageloader.js", ["goog.net.ImageLoader"], ["goog.array", "goog.dom", "goog.events.EventHandler", "goog.events.EventTarget", "goog.events.EventType", "goog.net.EventType", "goog.object", "goog.userAgent"]); +goog.addDependency("/closure/goog/net/ipaddress.js", ["goog.net.IpAddress", "goog.net.Ipv4Address", "goog.net.Ipv6Address"], ["goog.array", "goog.math.Integer", "goog.object", "goog.string"]); +goog.addDependency("/closure/goog/net/jsloader.js", ["goog.net.jsloader", "goog.net.jsloader.Error", "goog.net.jsloader.ErrorCode", "goog.net.jsloader.Options"], ["goog.array", "goog.async.Deferred", "goog.debug.Error", "goog.dom", "goog.dom.TagName"]); +goog.addDependency("/closure/goog/net/jsonp.js", ["goog.net.Jsonp"], ["goog.Uri", "goog.net.jsloader"]); +goog.addDependency("/closure/goog/net/mockiframeio.js", ["goog.net.MockIFrameIo"], ["goog.events.EventTarget", "goog.json", "goog.net.ErrorCode", "goog.net.EventType", "goog.net.IframeIo"]); +goog.addDependency("/closure/goog/net/multiiframeloadmonitor.js", ["goog.net.MultiIframeLoadMonitor"], ["goog.events", "goog.net.IframeLoadMonitor"]); +goog.addDependency("/closure/goog/net/networkstatusmonitor.js", ["goog.net.NetworkStatusMonitor"], ["goog.events.Listenable"]); +goog.addDependency("/closure/goog/net/networktester.js", ["goog.net.NetworkTester"], ["goog.Timer", "goog.Uri", "goog.log"]); +goog.addDependency("/closure/goog/net/testdata/jsloader_test1.js", ["goog.net.testdata.jsloader_test1"], []); +goog.addDependency("/closure/goog/net/testdata/jsloader_test2.js", ["goog.net.testdata.jsloader_test2"], []); +goog.addDependency("/closure/goog/net/testdata/jsloader_test3.js", ["goog.net.testdata.jsloader_test3"], []); +goog.addDependency("/closure/goog/net/testdata/jsloader_test4.js", ["goog.net.testdata.jsloader_test4"], []); +goog.addDependency("/closure/goog/net/tmpnetwork.js", ["goog.net.tmpnetwork"], ["goog.Uri", "goog.net.ChannelDebug"]); +goog.addDependency("/closure/goog/net/websocket.js", ["goog.net.WebSocket", "goog.net.WebSocket.ErrorEvent", "goog.net.WebSocket.EventType", "goog.net.WebSocket.MessageEvent"], ["goog.Timer", "goog.asserts", "goog.debug.entryPointRegistry", "goog.events", "goog.events.Event", "goog.events.EventTarget", "goog.log"]); +goog.addDependency("/closure/goog/net/wrapperxmlhttpfactory.js", ["goog.net.WrapperXmlHttpFactory"], ["goog.net.XmlHttpFactory"]); +goog.addDependency("/closure/goog/net/xhrio.js", ["goog.net.XhrIo", "goog.net.XhrIo.ResponseType"], ["goog.Timer", "goog.array", "goog.debug.entryPointRegistry", "goog.events.EventTarget", "goog.json", "goog.log", "goog.net.ErrorCode", "goog.net.EventType", "goog.net.HttpStatus", "goog.net.XmlHttp", "goog.object", "goog.string", "goog.structs", "goog.structs.Map", "goog.uri.utils", "goog.userAgent"]); +goog.addDependency("/closure/goog/net/xhriopool.js", ["goog.net.XhrIoPool"], ["goog.net.XhrIo", "goog.structs", "goog.structs.PriorityPool"]); +goog.addDependency("/closure/goog/net/xhrmanager.js", ["goog.net.XhrManager", "goog.net.XhrManager.Event", "goog.net.XhrManager.Request"], ["goog.Disposable", "goog.events", "goog.events.Event", "goog.events.EventHandler", "goog.events.EventTarget", "goog.net.ErrorCode", "goog.net.EventType", "goog.net.XhrIo", "goog.net.XhrIoPool", "goog.structs", "goog.structs.Map"]); +goog.addDependency("/closure/goog/net/xmlhttp.js", ["goog.net.DefaultXmlHttpFactory", "goog.net.XmlHttp", "goog.net.XmlHttp.OptionType", "goog.net.XmlHttp.ReadyState"], ["goog.net.WrapperXmlHttpFactory", "goog.net.XmlHttpFactory"]); +goog.addDependency("/closure/goog/net/xmlhttpfactory.js", ["goog.net.XmlHttpFactory"], []); +goog.addDependency("/closure/goog/net/xpc/crosspagechannel.js", ["goog.net.xpc.CrossPageChannel"], ["goog.Disposable", "goog.Uri", "goog.async.Deferred", "goog.async.Delay", "goog.dom", "goog.events", "goog.events.EventHandler", "goog.json", "goog.messaging.AbstractChannel", "goog.net.xpc", "goog.net.xpc.CrossPageChannelRole", "goog.net.xpc.FrameElementMethodTransport", "goog.net.xpc.IframePollingTransport", "goog.net.xpc.IframeRelayTransport", "goog.net.xpc.NativeMessagingTransport", "goog.net.xpc.NixTransport", +"goog.net.xpc.Transport", "goog.userAgent"]); +goog.addDependency("/closure/goog/net/xpc/crosspagechannelrole.js", ["goog.net.xpc.CrossPageChannelRole"], []); +goog.addDependency("/closure/goog/net/xpc/frameelementmethodtransport.js", ["goog.net.xpc.FrameElementMethodTransport"], ["goog.net.xpc", "goog.net.xpc.CrossPageChannelRole", "goog.net.xpc.Transport"]); +goog.addDependency("/closure/goog/net/xpc/iframepollingtransport.js", ["goog.net.xpc.IframePollingTransport", "goog.net.xpc.IframePollingTransport.Receiver", "goog.net.xpc.IframePollingTransport.Sender"], ["goog.array", "goog.dom", "goog.net.xpc", "goog.net.xpc.CrossPageChannelRole", "goog.net.xpc.Transport", "goog.userAgent"]); +goog.addDependency("/closure/goog/net/xpc/iframerelaytransport.js", ["goog.net.xpc.IframeRelayTransport"], ["goog.dom", "goog.events", "goog.net.xpc", "goog.net.xpc.Transport", "goog.userAgent"]); +goog.addDependency("/closure/goog/net/xpc/nativemessagingtransport.js", ["goog.net.xpc.NativeMessagingTransport"], ["goog.Timer", "goog.asserts", "goog.async.Deferred", "goog.events", "goog.events.EventHandler", "goog.net.xpc", "goog.net.xpc.CrossPageChannelRole", "goog.net.xpc.Transport"]); +goog.addDependency("/closure/goog/net/xpc/nixtransport.js", ["goog.net.xpc.NixTransport"], ["goog.net.xpc", "goog.net.xpc.CrossPageChannelRole", "goog.net.xpc.Transport", "goog.reflect"]); +goog.addDependency("/closure/goog/net/xpc/relay.js", ["goog.net.xpc.relay"], []); +goog.addDependency("/closure/goog/net/xpc/transport.js", ["goog.net.xpc.Transport"], ["goog.Disposable", "goog.dom", "goog.net.xpc"]); +goog.addDependency("/closure/goog/net/xpc/xpc.js", ["goog.net.xpc", "goog.net.xpc.CfgFields", "goog.net.xpc.ChannelStates", "goog.net.xpc.TransportNames", "goog.net.xpc.TransportTypes", "goog.net.xpc.UriCfgFields"], ["goog.log"]); +goog.addDependency("/closure/goog/object/object.js", ["goog.object"], []); +goog.addDependency("/closure/goog/positioning/absoluteposition.js", ["goog.positioning.AbsolutePosition"], ["goog.math.Box", "goog.math.Coordinate", "goog.math.Size", "goog.positioning", "goog.positioning.AbstractPosition"]); +goog.addDependency("/closure/goog/positioning/abstractposition.js", ["goog.positioning.AbstractPosition"], ["goog.math.Box", "goog.math.Size", "goog.positioning.Corner"]); +goog.addDependency("/closure/goog/positioning/anchoredposition.js", ["goog.positioning.AnchoredPosition"], ["goog.math.Box", "goog.positioning", "goog.positioning.AbstractPosition"]); +goog.addDependency("/closure/goog/positioning/anchoredviewportposition.js", ["goog.positioning.AnchoredViewportPosition"], ["goog.math.Box", "goog.positioning", "goog.positioning.AnchoredPosition", "goog.positioning.Corner", "goog.positioning.Overflow", "goog.positioning.OverflowStatus"]); +goog.addDependency("/closure/goog/positioning/clientposition.js", ["goog.positioning.ClientPosition"], ["goog.asserts", "goog.math.Box", "goog.math.Coordinate", "goog.math.Size", "goog.positioning", "goog.positioning.AbstractPosition", "goog.style"]); +goog.addDependency("/closure/goog/positioning/clientposition_test.js", ["goog.positioning.clientPositionTest"], ["goog.dom", "goog.positioning.ClientPosition", "goog.style", "goog.testing.jsunit"]); +goog.addDependency("/closure/goog/positioning/menuanchoredposition.js", ["goog.positioning.MenuAnchoredPosition"], ["goog.math.Box", "goog.math.Size", "goog.positioning", "goog.positioning.AnchoredViewportPosition", "goog.positioning.Corner", "goog.positioning.Overflow"]); +goog.addDependency("/closure/goog/positioning/positioning.js", ["goog.positioning", "goog.positioning.Corner", "goog.positioning.CornerBit", "goog.positioning.Overflow", "goog.positioning.OverflowStatus"], ["goog.asserts", "goog.dom", "goog.dom.TagName", "goog.math.Box", "goog.math.Coordinate", "goog.math.Size", "goog.style", "goog.style.bidi"]); +goog.addDependency("/closure/goog/positioning/positioning_test.js", ["goog.positioningTest"], ["goog.dom", "goog.dom.DomHelper", "goog.math.Box", "goog.math.Coordinate", "goog.math.Rect", "goog.math.Size", "goog.positioning", "goog.positioning.Corner", "goog.positioning.Overflow", "goog.positioning.OverflowStatus", "goog.style", "goog.testing.ExpectedFailures", "goog.testing.jsunit", "goog.userAgent", "goog.userAgent.product"]); +goog.addDependency("/closure/goog/positioning/viewportclientposition.js", ["goog.positioning.ViewportClientPosition"], ["goog.math.Box", "goog.math.Coordinate", "goog.math.Size", "goog.positioning.ClientPosition"]); +goog.addDependency("/closure/goog/positioning/viewportposition.js", ["goog.positioning.ViewportPosition"], ["goog.math.Box", "goog.math.Coordinate", "goog.math.Size", "goog.positioning.AbstractPosition"]); +goog.addDependency("/closure/goog/proto/proto.js", ["goog.proto"], ["goog.proto.Serializer"]); +goog.addDependency("/closure/goog/proto/serializer.js", ["goog.proto.Serializer"], ["goog.json.Serializer", "goog.string"]); +goog.addDependency("/closure/goog/proto2/descriptor.js", ["goog.proto2.Descriptor", "goog.proto2.Metadata"], ["goog.array", "goog.object", "goog.proto2.Util"]); +goog.addDependency("/closure/goog/proto2/fielddescriptor.js", ["goog.proto2.FieldDescriptor"], ["goog.proto2.Util", "goog.string"]); +goog.addDependency("/closure/goog/proto2/lazydeserializer.js", ["goog.proto2.LazyDeserializer"], ["goog.proto2.Message", "goog.proto2.Serializer", "goog.proto2.Util"]); +goog.addDependency("/closure/goog/proto2/message.js", ["goog.proto2.Message"], ["goog.proto2.Descriptor", "goog.proto2.FieldDescriptor", "goog.proto2.Util", "goog.string"]); +goog.addDependency("/closure/goog/proto2/objectserializer.js", ["goog.proto2.ObjectSerializer"], ["goog.proto2.Serializer", "goog.proto2.Util", "goog.string"]); +goog.addDependency("/closure/goog/proto2/package_test.pb.js", ["someprotopackage.TestPackageTypes"], ["goog.proto2.Message", "proto2.TestAllTypes"]); +goog.addDependency("/closure/goog/proto2/pbliteserializer.js", ["goog.proto2.PbLiteSerializer"], ["goog.proto2.LazyDeserializer", "goog.proto2.Util"]); +goog.addDependency("/closure/goog/proto2/serializer.js", ["goog.proto2.Serializer"], ["goog.proto2.Descriptor", "goog.proto2.FieldDescriptor", "goog.proto2.Message", "goog.proto2.Util"]); +goog.addDependency("/closure/goog/proto2/test.pb.js", ["proto2.TestAllTypes", "proto2.TestAllTypes.NestedEnum", "proto2.TestAllTypes.NestedMessage", "proto2.TestAllTypes.OptionalGroup", "proto2.TestAllTypes.RepeatedGroup"], ["goog.proto2.Message"]); +goog.addDependency("/closure/goog/proto2/textformatserializer.js", ["goog.proto2.TextFormatSerializer", "goog.proto2.TextFormatSerializer.Parser"], ["goog.array", "goog.asserts", "goog.json", "goog.proto2.Serializer", "goog.proto2.Util", "goog.string"]); +goog.addDependency("/closure/goog/proto2/textformatserializer_test.js", ["goog.proto2.TextFormatSerializerTest"], ["goog.proto2.TextFormatSerializer", "goog.testing.jsunit", "proto2.TestAllTypes"]); +goog.addDependency("/closure/goog/proto2/util.js", ["goog.proto2.Util"], ["goog.asserts"]); +goog.addDependency("/closure/goog/pubsub/pubsub.js", ["goog.pubsub.PubSub"], ["goog.Disposable", "goog.array"]); +goog.addDependency("/closure/goog/reflect/reflect.js", ["goog.reflect"], []); +goog.addDependency("/closure/goog/result/deferredadaptor.js", ["goog.result.DeferredAdaptor"], ["goog.async.Deferred", "goog.result", "goog.result.Result"]); +goog.addDependency("/closure/goog/result/dependentresult.js", ["goog.result.DependentResult"], ["goog.result.Result"]); +goog.addDependency("/closure/goog/result/result_interface.js", ["goog.result.Result"], []); +goog.addDependency("/closure/goog/result/resultutil.js", ["goog.result"], ["goog.array", "goog.result.DependentResult", "goog.result.Result", "goog.result.SimpleResult"]); +goog.addDependency("/closure/goog/result/simpleresult.js", ["goog.result.SimpleResult", "goog.result.SimpleResult.StateError"], ["goog.debug.Error", "goog.result.Result"]); +goog.addDependency("/closure/goog/soy/data.js", ["goog.soy.data", "goog.soy.data.SanitizedContent", "goog.soy.data.SanitizedContentKind"], []); +goog.addDependency("/closure/goog/soy/renderer.js", ["goog.soy.InjectedDataSupplier", "goog.soy.Renderer"], ["goog.asserts", "goog.dom", "goog.soy", "goog.soy.data.SanitizedContent", "goog.soy.data.SanitizedContentKind"]); +goog.addDependency("/closure/goog/soy/soy.js", ["goog.soy"], ["goog.asserts", "goog.dom", "goog.dom.NodeType", "goog.dom.TagName", "goog.soy.data", "goog.string"]); +goog.addDependency("/closure/goog/soy/soy_test.js", ["goog.soy.testHelper"], ["goog.dom", "goog.soy.data.SanitizedContent", "goog.soy.data.SanitizedContentKind", "goog.string", "goog.userAgent", "goog.dom.TagName"]); +goog.addDependency("/closure/goog/spell/spellcheck.js", ["goog.spell.SpellCheck", "goog.spell.SpellCheck.WordChangedEvent"], ["goog.Timer", "goog.events.EventTarget", "goog.structs.Set"]); +goog.addDependency("/closure/goog/stats/basicstat.js", ["goog.stats.BasicStat"], ["goog.array", "goog.iter", "goog.log", "goog.object", "goog.string.format", "goog.structs.CircularBuffer"]); +goog.addDependency("/closure/goog/storage/collectablestorage.js", ["goog.storage.CollectableStorage"], ["goog.array", "goog.asserts", "goog.iter", "goog.storage.ErrorCode", "goog.storage.ExpiringStorage", "goog.storage.RichStorage.Wrapper", "goog.storage.mechanism.IterableMechanism"]); +goog.addDependency("/closure/goog/storage/encryptedstorage.js", ["goog.storage.EncryptedStorage"], ["goog.crypt", "goog.crypt.Arc4", "goog.crypt.Sha1", "goog.crypt.base64", "goog.json", "goog.json.Serializer", "goog.storage.CollectableStorage", "goog.storage.ErrorCode", "goog.storage.RichStorage", "goog.storage.RichStorage.Wrapper", "goog.storage.mechanism.IterableMechanism"]); +goog.addDependency("/closure/goog/storage/errorcode.js", ["goog.storage.ErrorCode"], []); +goog.addDependency("/closure/goog/storage/expiringstorage.js", ["goog.storage.ExpiringStorage"], ["goog.storage.RichStorage", "goog.storage.RichStorage.Wrapper", "goog.storage.mechanism.Mechanism"]); +goog.addDependency("/closure/goog/storage/mechanism/errorcode.js", ["goog.storage.mechanism.ErrorCode"], []); +goog.addDependency("/closure/goog/storage/mechanism/errorhandlingmechanism.js", ["goog.storage.mechanism.ErrorHandlingMechanism"], ["goog.storage.mechanism.Mechanism"]); +goog.addDependency("/closure/goog/storage/mechanism/html5localstorage.js", ["goog.storage.mechanism.HTML5LocalStorage"], ["goog.storage.mechanism.HTML5WebStorage"]); +goog.addDependency("/closure/goog/storage/mechanism/html5sessionstorage.js", ["goog.storage.mechanism.HTML5SessionStorage"], ["goog.storage.mechanism.HTML5WebStorage"]); +goog.addDependency("/closure/goog/storage/mechanism/html5webstorage.js", ["goog.storage.mechanism.HTML5WebStorage"], ["goog.asserts", "goog.iter.Iterator", "goog.iter.StopIteration", "goog.storage.mechanism.ErrorCode", "goog.storage.mechanism.IterableMechanism"]); +goog.addDependency("/closure/goog/storage/mechanism/ieuserdata.js", ["goog.storage.mechanism.IEUserData"], ["goog.asserts", "goog.iter.Iterator", "goog.iter.StopIteration", "goog.storage.mechanism.ErrorCode", "goog.storage.mechanism.IterableMechanism", "goog.structs.Map", "goog.userAgent"]); +goog.addDependency("/closure/goog/storage/mechanism/iterablemechanism.js", ["goog.storage.mechanism.IterableMechanism"], ["goog.array", "goog.asserts", "goog.iter", "goog.iter.Iterator", "goog.storage.mechanism.Mechanism"]); +goog.addDependency("/closure/goog/storage/mechanism/iterablemechanismtester.js", ["goog.storage.mechanism.iterableMechanismTester"], ["goog.iter.Iterator", "goog.storage.mechanism.IterableMechanism", "goog.testing.asserts"]); +goog.addDependency("/closure/goog/storage/mechanism/mechanism.js", ["goog.storage.mechanism.Mechanism"], []); +goog.addDependency("/closure/goog/storage/mechanism/mechanismfactory.js", ["goog.storage.mechanism.mechanismfactory"], ["goog.storage.mechanism.HTML5LocalStorage", "goog.storage.mechanism.HTML5SessionStorage", "goog.storage.mechanism.IEUserData", "goog.storage.mechanism.IterableMechanism", "goog.storage.mechanism.PrefixedMechanism"]); +goog.addDependency("/closure/goog/storage/mechanism/mechanismseparationtester.js", ["goog.storage.mechanism.mechanismSeparationTester"], ["goog.iter.Iterator", "goog.storage.mechanism.IterableMechanism", "goog.testing.asserts"]); +goog.addDependency("/closure/goog/storage/mechanism/mechanismsharingtester.js", ["goog.storage.mechanism.mechanismSharingTester"], ["goog.iter.Iterator", "goog.storage.mechanism.IterableMechanism", "goog.testing.asserts"]); +goog.addDependency("/closure/goog/storage/mechanism/mechanismtester.js", ["goog.storage.mechanism.mechanismTester"], ["goog.storage.mechanism.ErrorCode", "goog.storage.mechanism.HTML5LocalStorage", "goog.storage.mechanism.Mechanism", "goog.testing.asserts", "goog.userAgent.product", "goog.userAgent.product.isVersion"]); +goog.addDependency("/closure/goog/storage/mechanism/prefixedmechanism.js", ["goog.storage.mechanism.PrefixedMechanism"], ["goog.iter.Iterator", "goog.storage.mechanism.IterableMechanism"]); +goog.addDependency("/closure/goog/storage/richstorage.js", ["goog.storage.RichStorage", "goog.storage.RichStorage.Wrapper"], ["goog.storage.ErrorCode", "goog.storage.Storage", "goog.storage.mechanism.Mechanism"]); +goog.addDependency("/closure/goog/storage/storage.js", ["goog.storage.Storage"], ["goog.json", "goog.json.Serializer", "goog.storage.ErrorCode"]); +goog.addDependency("/closure/goog/storage/storage_test.js", ["goog.storage.storage_test"], ["goog.storage.Storage", "goog.structs.Map", "goog.testing.asserts"]); +goog.addDependency("/closure/goog/string/linkify.js", ["goog.string.linkify"], ["goog.string"]); +goog.addDependency("/closure/goog/string/newlines.js", ["goog.string.newlines", "goog.string.newlines.Line"], ["goog.array"]); +goog.addDependency("/closure/goog/string/newlines_test.js", ["goog.string.newlinesTest"], ["goog.string.newlines", "goog.testing.jsunit"]); +goog.addDependency("/closure/goog/string/parser.js", ["goog.string.Parser"], []); +goog.addDependency("/closure/goog/string/path.js", ["goog.string.path"], ["goog.array", "goog.string"]); +goog.addDependency("/closure/goog/string/string.js", ["goog.string", "goog.string.Unicode"], []); +goog.addDependency("/closure/goog/string/string_test.js", ["goog.stringTest"], ["goog.functions", "goog.object", "goog.string", "goog.testing.PropertyReplacer", "goog.testing.jsunit"]); +goog.addDependency("/closure/goog/string/stringbuffer.js", ["goog.string.StringBuffer"], []); +goog.addDependency("/closure/goog/string/stringformat.js", ["goog.string.format"], ["goog.string"]); +goog.addDependency("/closure/goog/string/stringifier.js", ["goog.string.Stringifier"], []); +goog.addDependency("/closure/goog/structs/avltree.js", ["goog.structs.AvlTree", "goog.structs.AvlTree.Node"], ["goog.structs.Collection"]); +goog.addDependency("/closure/goog/structs/circularbuffer.js", ["goog.structs.CircularBuffer"], []); +goog.addDependency("/closure/goog/structs/collection.js", ["goog.structs.Collection"], []); +goog.addDependency("/closure/goog/structs/heap.js", ["goog.structs.Heap"], ["goog.array", "goog.object", "goog.structs.Node"]); +goog.addDependency("/closure/goog/structs/inversionmap.js", ["goog.structs.InversionMap"], ["goog.array"]); +goog.addDependency("/closure/goog/structs/linkedmap.js", ["goog.structs.LinkedMap"], ["goog.structs.Map"]); +goog.addDependency("/closure/goog/structs/map.js", ["goog.structs.Map"], ["goog.iter.Iterator", "goog.iter.StopIteration", "goog.object"]); +goog.addDependency("/closure/goog/structs/node.js", ["goog.structs.Node"], []); +goog.addDependency("/closure/goog/structs/pool.js", ["goog.structs.Pool"], ["goog.Disposable", "goog.structs.Queue", "goog.structs.Set"]); +goog.addDependency("/closure/goog/structs/prioritypool.js", ["goog.structs.PriorityPool"], ["goog.structs.Pool", "goog.structs.PriorityQueue"]); +goog.addDependency("/closure/goog/structs/priorityqueue.js", ["goog.structs.PriorityQueue"], ["goog.structs.Heap"]); +goog.addDependency("/closure/goog/structs/quadtree.js", ["goog.structs.QuadTree", "goog.structs.QuadTree.Node", "goog.structs.QuadTree.Point"], ["goog.math.Coordinate"]); +goog.addDependency("/closure/goog/structs/queue.js", ["goog.structs.Queue"], ["goog.array"]); +goog.addDependency("/closure/goog/structs/set.js", ["goog.structs.Set"], ["goog.structs", "goog.structs.Collection", "goog.structs.Map"]); +goog.addDependency("/closure/goog/structs/simplepool.js", ["goog.structs.SimplePool"], ["goog.Disposable"]); +goog.addDependency("/closure/goog/structs/stringset.js", ["goog.structs.StringSet"], ["goog.asserts", "goog.iter"]); +goog.addDependency("/closure/goog/structs/structs.js", ["goog.structs"], ["goog.array", "goog.object"]); +goog.addDependency("/closure/goog/structs/treenode.js", ["goog.structs.TreeNode"], ["goog.array", "goog.asserts", "goog.structs.Node"]); +goog.addDependency("/closure/goog/structs/trie.js", ["goog.structs.Trie"], ["goog.object", "goog.structs"]); +goog.addDependency("/closure/goog/style/bidi.js", ["goog.style.bidi"], ["goog.dom", "goog.style", "goog.userAgent"]); +goog.addDependency("/closure/goog/style/cursor.js", ["goog.style.cursor"], ["goog.userAgent"]); +goog.addDependency("/closure/goog/style/style.js", ["goog.style"], ["goog.array", "goog.asserts", "goog.dom", "goog.dom.NodeType", "goog.dom.vendor", "goog.math.Box", "goog.math.Coordinate", "goog.math.Rect", "goog.math.Size", "goog.object", "goog.string", "goog.userAgent"]); +goog.addDependency("/closure/goog/style/style_test.js", ["goog.style_test"], ["goog.array", "goog.color", "goog.dom", "goog.events.BrowserEvent", "goog.math.Box", "goog.math.Coordinate", "goog.math.Rect", "goog.math.Size", "goog.object", "goog.string", "goog.style", "goog.testing.ExpectedFailures", "goog.testing.PropertyReplacer", "goog.testing.asserts", "goog.testing.jsunit", "goog.userAgent", "goog.userAgent.product", "goog.userAgent.product.isVersion"]); +goog.addDependency("/closure/goog/style/stylescrollbartester.js", ["goog.styleScrollbarTester"], ["goog.dom", "goog.style", "goog.testing.asserts"]); +goog.addDependency("/closure/goog/style/transition.js", ["goog.style.transition", "goog.style.transition.Css3Property"], ["goog.array", "goog.asserts", "goog.dom.vendor", "goog.style", "goog.userAgent"]); +goog.addDependency("/closure/goog/testing/asserts.js", ["goog.testing.JsUnitException", "goog.testing.asserts"], ["goog.testing.stacktrace"]); +goog.addDependency("/closure/goog/testing/async/mockcontrol.js", ["goog.testing.async.MockControl"], ["goog.asserts", "goog.async.Deferred", "goog.debug", "goog.testing.asserts", "goog.testing.mockmatchers.IgnoreArgument"]); +goog.addDependency("/closure/goog/testing/asynctestcase.js", ["goog.testing.AsyncTestCase", "goog.testing.AsyncTestCase.ControlBreakingException"], ["goog.testing.TestCase", "goog.testing.TestCase.Test", "goog.testing.asserts"]); +goog.addDependency("/closure/goog/testing/benchmark.js", ["goog.testing.benchmark"], ["goog.dom", "goog.dom.TagName", "goog.testing.PerformanceTable", "goog.testing.PerformanceTimer", "goog.testing.TestCase"]); +goog.addDependency("/closure/goog/testing/continuationtestcase.js", ["goog.testing.ContinuationTestCase", "goog.testing.ContinuationTestCase.Step", "goog.testing.ContinuationTestCase.Test"], ["goog.array", "goog.events.EventHandler", "goog.testing.TestCase", "goog.testing.TestCase.Test", "goog.testing.asserts"]); +goog.addDependency("/closure/goog/testing/deferredtestcase.js", ["goog.testing.DeferredTestCase"], ["goog.async.Deferred", "goog.testing.AsyncTestCase", "goog.testing.TestCase"]); +goog.addDependency("/closure/goog/testing/dom.js", ["goog.testing.dom"], ["goog.dom", "goog.dom.NodeIterator", "goog.dom.NodeType", "goog.dom.TagIterator", "goog.dom.TagName", "goog.dom.classes", "goog.iter", "goog.object", "goog.string", "goog.style", "goog.testing.asserts", "goog.userAgent"]); +goog.addDependency("/closure/goog/testing/editor/dom.js", ["goog.testing.editor.dom"], ["goog.dom.NodeType", "goog.dom.TagIterator", "goog.dom.TagWalkType", "goog.iter", "goog.string", "goog.testing.asserts"]); +goog.addDependency("/closure/goog/testing/editor/fieldmock.js", ["goog.testing.editor.FieldMock"], ["goog.dom", "goog.dom.Range", "goog.editor.Field", "goog.testing.LooseMock", "goog.testing.mockmatchers"]); +goog.addDependency("/closure/goog/testing/editor/testhelper.js", ["goog.testing.editor.TestHelper"], ["goog.Disposable", "goog.dom", "goog.dom.Range", "goog.editor.BrowserFeature", "goog.editor.node", "goog.editor.plugins.AbstractBubblePlugin", "goog.testing.dom"]); +goog.addDependency("/closure/goog/testing/events/eventobserver.js", ["goog.testing.events.EventObserver"], ["goog.array"]); +goog.addDependency("/closure/goog/testing/events/events.js", ["goog.testing.events", "goog.testing.events.Event"], ["goog.Disposable", "goog.asserts", "goog.dom.NodeType", "goog.events", "goog.events.BrowserEvent", "goog.events.BrowserFeature", "goog.events.EventTarget", "goog.events.EventType", "goog.events.KeyCodes", "goog.object", "goog.style", "goog.userAgent"]); +goog.addDependency("/closure/goog/testing/events/matchers.js", ["goog.testing.events.EventMatcher"], ["goog.events.Event", "goog.testing.mockmatchers.ArgumentMatcher"]); +goog.addDependency("/closure/goog/testing/events/onlinehandler.js", ["goog.testing.events.OnlineHandler"], ["goog.events.EventTarget", "goog.net.NetworkStatusMonitor"]); +goog.addDependency("/closure/goog/testing/expectedfailures.js", ["goog.testing.ExpectedFailures"], ["goog.debug.DivConsole", "goog.dom", "goog.dom.TagName", "goog.events", "goog.events.EventType", "goog.log", "goog.style", "goog.testing.JsUnitException", "goog.testing.TestCase", "goog.testing.asserts"]); +goog.addDependency("/closure/goog/testing/fs/blob.js", ["goog.testing.fs.Blob"], ["goog.crypt.base64"]); +goog.addDependency("/closure/goog/testing/fs/entry.js", ["goog.testing.fs.DirectoryEntry", "goog.testing.fs.Entry", "goog.testing.fs.FileEntry"], ["goog.Timer", "goog.array", "goog.asserts", "goog.async.Deferred", "goog.fs.DirectoryEntry", "goog.fs.DirectoryEntryImpl", "goog.fs.Entry", "goog.fs.Error", "goog.fs.FileEntry", "goog.functions", "goog.object", "goog.string", "goog.testing.fs.File", "goog.testing.fs.FileWriter"]); +goog.addDependency("/closure/goog/testing/fs/file.js", ["goog.testing.fs.File"], ["goog.testing.fs.Blob"]); +goog.addDependency("/closure/goog/testing/fs/filereader.js", ["goog.testing.fs.FileReader"], ["goog.Timer", "goog.events.EventTarget", "goog.fs.Error", "goog.fs.FileReader.EventType", "goog.fs.FileReader.ReadyState", "goog.testing.fs.File", "goog.testing.fs.ProgressEvent"]); +goog.addDependency("/closure/goog/testing/fs/filesystem.js", ["goog.testing.fs.FileSystem"], ["goog.fs.FileSystem", "goog.testing.fs.DirectoryEntry"]); +goog.addDependency("/closure/goog/testing/fs/filewriter.js", ["goog.testing.fs.FileWriter"], ["goog.Timer", "goog.events.Event", "goog.events.EventTarget", "goog.fs.Error", "goog.fs.FileSaver.EventType", "goog.fs.FileSaver.ReadyState", "goog.string", "goog.testing.fs.File", "goog.testing.fs.ProgressEvent"]); +goog.addDependency("/closure/goog/testing/fs/fs.js", ["goog.testing.fs"], ["goog.Timer", "goog.array", "goog.async.Deferred", "goog.fs", "goog.testing.fs.Blob", "goog.testing.fs.FileSystem"]); +goog.addDependency("/closure/goog/testing/fs/progressevent.js", ["goog.testing.fs.ProgressEvent"], ["goog.events.Event"]); +goog.addDependency("/closure/goog/testing/functionmock.js", ["goog.testing", "goog.testing.FunctionMock", "goog.testing.GlobalFunctionMock", "goog.testing.MethodMock"], ["goog.object", "goog.testing.LooseMock", "goog.testing.Mock", "goog.testing.MockInterface", "goog.testing.PropertyReplacer", "goog.testing.StrictMock"]); +goog.addDependency("/closure/goog/testing/graphics.js", ["goog.testing.graphics"], ["goog.graphics.Path.Segment", "goog.testing.asserts"]); +goog.addDependency("/closure/goog/testing/i18n/asserts.js", ["goog.testing.i18n.asserts"], ["goog.testing.jsunit"]); +goog.addDependency("/closure/goog/testing/i18n/asserts_test.js", ["goog.testing.i18n.assertsTest"], ["goog.testing.i18n.asserts", "goog.testing.ExpectedFailures"]); +goog.addDependency("/closure/goog/testing/jsunit.js", ["goog.testing.jsunit"], ["goog.testing.TestCase", "goog.testing.TestRunner"]); +goog.addDependency("/closure/goog/testing/loosemock.js", ["goog.testing.LooseExpectationCollection", "goog.testing.LooseMock"], ["goog.array", "goog.structs.Map", "goog.testing.Mock"]); +goog.addDependency("/closure/goog/testing/messaging/mockmessagechannel.js", ["goog.testing.messaging.MockMessageChannel"], ["goog.messaging.AbstractChannel", "goog.testing.asserts"]); +goog.addDependency("/closure/goog/testing/messaging/mockmessageevent.js", ["goog.testing.messaging.MockMessageEvent"], ["goog.events.BrowserEvent", "goog.events.EventType", "goog.testing.events"]); +goog.addDependency("/closure/goog/testing/messaging/mockmessageport.js", ["goog.testing.messaging.MockMessagePort"], ["goog.events.EventTarget"]); +goog.addDependency("/closure/goog/testing/messaging/mockportnetwork.js", ["goog.testing.messaging.MockPortNetwork"], ["goog.messaging.PortNetwork", "goog.testing.messaging.MockMessageChannel"]); +goog.addDependency("/closure/goog/testing/mock.js", ["goog.testing.Mock", "goog.testing.MockExpectation"], ["goog.array", "goog.object", "goog.testing.JsUnitException", "goog.testing.MockInterface", "goog.testing.mockmatchers"]); +goog.addDependency("/closure/goog/testing/mockclassfactory.js", ["goog.testing.MockClassFactory", "goog.testing.MockClassRecord"], ["goog.array", "goog.object", "goog.testing.LooseMock", "goog.testing.StrictMock", "goog.testing.TestCase", "goog.testing.mockmatchers"]); +goog.addDependency("/closure/goog/testing/mockclock.js", ["goog.testing.MockClock"], ["goog.Disposable", "goog.testing.PropertyReplacer", "goog.testing.events", "goog.testing.events.Event"]); +goog.addDependency("/closure/goog/testing/mockcontrol.js", ["goog.testing.MockControl"], ["goog.array", "goog.testing", "goog.testing.LooseMock", "goog.testing.MockInterface", "goog.testing.StrictMock"]); +goog.addDependency("/closure/goog/testing/mockinterface.js", ["goog.testing.MockInterface"], []); +goog.addDependency("/closure/goog/testing/mockmatchers.js", ["goog.testing.mockmatchers", "goog.testing.mockmatchers.ArgumentMatcher", "goog.testing.mockmatchers.IgnoreArgument", "goog.testing.mockmatchers.InstanceOf", "goog.testing.mockmatchers.ObjectEquals", "goog.testing.mockmatchers.RegexpMatch", "goog.testing.mockmatchers.SaveArgument", "goog.testing.mockmatchers.TypeOf"], ["goog.array", "goog.dom", "goog.testing.asserts"]); +goog.addDependency("/closure/goog/testing/mockrandom.js", ["goog.testing.MockRandom"], ["goog.Disposable"]); +goog.addDependency("/closure/goog/testing/mockrange.js", ["goog.testing.MockRange"], ["goog.dom.AbstractRange", "goog.testing.LooseMock"]); +goog.addDependency("/closure/goog/testing/mockstorage.js", ["goog.testing.MockStorage"], ["goog.structs.Map"]); +goog.addDependency("/closure/goog/testing/mockuseragent.js", ["goog.testing.MockUserAgent"], ["goog.Disposable", "goog.userAgent"]); +goog.addDependency("/closure/goog/testing/multitestrunner.js", ["goog.testing.MultiTestRunner", "goog.testing.MultiTestRunner.TestFrame"], ["goog.Timer", "goog.array", "goog.dom", "goog.dom.classes", "goog.events.EventHandler", "goog.functions", "goog.string", "goog.ui.Component", "goog.ui.ServerChart", "goog.ui.TableSorter"]); +goog.addDependency("/closure/goog/testing/net/xhrio.js", ["goog.testing.net.XhrIo"], ["goog.array", "goog.dom.xml", "goog.events", "goog.events.EventTarget", "goog.json", "goog.net.ErrorCode", "goog.net.EventType", "goog.net.HttpStatus", "goog.net.XhrIo", "goog.net.XmlHttp", "goog.object", "goog.structs.Map"]); +goog.addDependency("/closure/goog/testing/net/xhriopool.js", ["goog.testing.net.XhrIoPool"], ["goog.net.XhrIoPool", "goog.testing.net.XhrIo"]); +goog.addDependency("/closure/goog/testing/objectpropertystring.js", ["goog.testing.ObjectPropertyString"], []); +goog.addDependency("/closure/goog/testing/performancetable.js", ["goog.testing.PerformanceTable"], ["goog.dom", "goog.testing.PerformanceTimer"]); +goog.addDependency("/closure/goog/testing/performancetimer.js", ["goog.testing.PerformanceTimer", "goog.testing.PerformanceTimer.Task"], ["goog.array", "goog.async.Deferred", "goog.math"]); +goog.addDependency("/closure/goog/testing/propertyreplacer.js", ["goog.testing.PropertyReplacer"], ["goog.userAgent"]); +goog.addDependency("/closure/goog/testing/proto2/proto2.js", ["goog.testing.proto2"], ["goog.proto2.Message", "goog.testing.asserts"]); +goog.addDependency("/closure/goog/testing/pseudorandom.js", ["goog.testing.PseudoRandom"], ["goog.Disposable"]); +goog.addDependency("/closure/goog/testing/recordfunction.js", ["goog.testing.FunctionCall", "goog.testing.recordConstructor", "goog.testing.recordFunction"], []); +goog.addDependency("/closure/goog/testing/shardingtestcase.js", ["goog.testing.ShardingTestCase"], ["goog.asserts", "goog.testing.TestCase"]); +goog.addDependency("/closure/goog/testing/singleton.js", ["goog.testing.singleton"], []); +goog.addDependency("/closure/goog/testing/stacktrace.js", ["goog.testing.stacktrace", "goog.testing.stacktrace.Frame"], []); +goog.addDependency("/closure/goog/testing/storage/fakemechanism.js", ["goog.testing.storage.FakeMechanism"], ["goog.storage.mechanism.IterableMechanism", "goog.structs.Map"]); +goog.addDependency("/closure/goog/testing/strictmock.js", ["goog.testing.StrictMock"], ["goog.array", "goog.testing.Mock"]); +goog.addDependency("/closure/goog/testing/style/layoutasserts.js", ["goog.testing.style.layoutasserts"], ["goog.style", "goog.testing.asserts", "goog.testing.style"]); +goog.addDependency("/closure/goog/testing/style/style.js", ["goog.testing.style"], ["goog.dom", "goog.math.Rect", "goog.style"]); +goog.addDependency("/closure/goog/testing/testcase.js", ["goog.testing.TestCase", "goog.testing.TestCase.Error", "goog.testing.TestCase.Order", "goog.testing.TestCase.Result", "goog.testing.TestCase.Test"], ["goog.object", "goog.testing.asserts", "goog.testing.stacktrace"]); +goog.addDependency("/closure/goog/testing/testqueue.js", ["goog.testing.TestQueue"], []); +goog.addDependency("/closure/goog/testing/testrunner.js", ["goog.testing.TestRunner"], ["goog.testing.TestCase"]); +goog.addDependency("/closure/goog/testing/ui/rendererasserts.js", ["goog.testing.ui.rendererasserts"], ["goog.testing.asserts"]); +goog.addDependency("/closure/goog/testing/ui/rendererharness.js", ["goog.testing.ui.RendererHarness"], ["goog.Disposable", "goog.dom.NodeType", "goog.testing.asserts", "goog.testing.dom"]); +goog.addDependency("/closure/goog/testing/ui/style.js", ["goog.testing.ui.style"], ["goog.array", "goog.dom", "goog.dom.classes", "goog.testing.asserts"]); +goog.addDependency("/closure/goog/timer/timer.js", ["goog.Timer"], ["goog.events.EventTarget"]); +goog.addDependency("/closure/goog/tweak/entries.js", ["goog.tweak.BaseEntry", "goog.tweak.BasePrimitiveSetting", "goog.tweak.BaseSetting", "goog.tweak.BooleanGroup", "goog.tweak.BooleanInGroupSetting", "goog.tweak.BooleanSetting", "goog.tweak.ButtonAction", "goog.tweak.NumericSetting", "goog.tweak.StringSetting"], ["goog.array", "goog.asserts", "goog.log", "goog.object"]); +goog.addDependency("/closure/goog/tweak/registry.js", ["goog.tweak.Registry"], ["goog.asserts", "goog.log", "goog.object", "goog.string", "goog.tweak.BaseEntry", "goog.uri.utils"]); +goog.addDependency("/closure/goog/tweak/testhelpers.js", ["goog.tweak.testhelpers"], ["goog.tweak", "goog.tweak.BooleanGroup", "goog.tweak.BooleanInGroupSetting", "goog.tweak.BooleanSetting", "goog.tweak.ButtonAction", "goog.tweak.NumericSetting", "goog.tweak.Registry", "goog.tweak.StringSetting"]); +goog.addDependency("/closure/goog/tweak/tweak.js", ["goog.tweak", "goog.tweak.ConfigParams"], ["goog.asserts", "goog.tweak.BaseSetting", "goog.tweak.BooleanGroup", "goog.tweak.BooleanInGroupSetting", "goog.tweak.BooleanSetting", "goog.tweak.ButtonAction", "goog.tweak.NumericSetting", "goog.tweak.Registry", "goog.tweak.StringSetting"]); +goog.addDependency("/closure/goog/tweak/tweakui.js", ["goog.tweak.EntriesPanel", "goog.tweak.TweakUi"], ["goog.array", "goog.asserts", "goog.dom.DomHelper", "goog.object", "goog.style", "goog.tweak", "goog.ui.Zippy", "goog.userAgent"]); +goog.addDependency("/closure/goog/ui/abstractspellchecker.js", ["goog.ui.AbstractSpellChecker", "goog.ui.AbstractSpellChecker.AsyncResult"], ["goog.a11y.aria", "goog.array", "goog.asserts", "goog.dom", "goog.dom.NodeType", "goog.dom.classes", "goog.dom.selection", "goog.events", "goog.events.Event", "goog.events.EventType", "goog.math.Coordinate", "goog.spell.SpellCheck", "goog.structs.Set", "goog.style", "goog.ui.Component", "goog.ui.MenuItem", "goog.ui.MenuSeparator", "goog.ui.PopupMenu"]); +goog.addDependency("/closure/goog/ui/ac/ac.js", ["goog.ui.ac"], ["goog.ui.ac.ArrayMatcher", "goog.ui.ac.AutoComplete", "goog.ui.ac.InputHandler", "goog.ui.ac.Renderer"]); +goog.addDependency("/closure/goog/ui/ac/arraymatcher.js", ["goog.ui.ac.ArrayMatcher"], ["goog.string"]); +goog.addDependency("/closure/goog/ui/ac/autocomplete.js", ["goog.ui.ac.AutoComplete", "goog.ui.ac.AutoComplete.EventType"], ["goog.array", "goog.asserts", "goog.events", "goog.events.EventTarget", "goog.object"]); +goog.addDependency("/closure/goog/ui/ac/inputhandler.js", ["goog.ui.ac.InputHandler"], ["goog.Disposable", "goog.Timer", "goog.a11y.aria", "goog.dom", "goog.dom.selection", "goog.events.EventHandler", "goog.events.EventType", "goog.events.KeyCodes", "goog.events.KeyHandler", "goog.string", "goog.userAgent", "goog.userAgent.product"]); +goog.addDependency("/closure/goog/ui/ac/remote.js", ["goog.ui.ac.Remote"], ["goog.ui.ac.AutoComplete", "goog.ui.ac.InputHandler", "goog.ui.ac.RemoteArrayMatcher", "goog.ui.ac.Renderer"]); +goog.addDependency("/closure/goog/ui/ac/remotearraymatcher.js", ["goog.ui.ac.RemoteArrayMatcher"], ["goog.Disposable", "goog.Uri", "goog.events", "goog.json", "goog.net.EventType", "goog.net.XhrIo"]); +goog.addDependency("/closure/goog/ui/ac/renderer.js", ["goog.ui.ac.Renderer", "goog.ui.ac.Renderer.CustomRenderer"], ["goog.a11y.aria", "goog.a11y.aria.Role", "goog.a11y.aria.State", "goog.array", "goog.dispose", "goog.dom", "goog.dom.NodeType", "goog.dom.classes", "goog.events", "goog.events.EventTarget", "goog.events.EventType", "goog.fx.dom.FadeInAndShow", "goog.fx.dom.FadeOutAndHide", "goog.positioning", "goog.positioning.Corner", "goog.positioning.Overflow", "goog.string", "goog.style", "goog.ui.IdGenerator", +"goog.ui.ac.AutoComplete"]); +goog.addDependency("/closure/goog/ui/ac/renderoptions.js", ["goog.ui.ac.RenderOptions"], []); +goog.addDependency("/closure/goog/ui/ac/richinputhandler.js", ["goog.ui.ac.RichInputHandler"], ["goog.ui.ac.InputHandler"]); +goog.addDependency("/closure/goog/ui/ac/richremote.js", ["goog.ui.ac.RichRemote"], ["goog.ui.ac.AutoComplete", "goog.ui.ac.Remote", "goog.ui.ac.Renderer", "goog.ui.ac.RichInputHandler", "goog.ui.ac.RichRemoteArrayMatcher"]); +goog.addDependency("/closure/goog/ui/ac/richremotearraymatcher.js", ["goog.ui.ac.RichRemoteArrayMatcher"], ["goog.json", "goog.ui.ac.RemoteArrayMatcher"]); +goog.addDependency("/closure/goog/ui/activitymonitor.js", ["goog.ui.ActivityMonitor"], ["goog.array", "goog.asserts", "goog.dom", "goog.events.EventHandler", "goog.events.EventTarget", "goog.events.EventType"]); +goog.addDependency("/closure/goog/ui/advancedtooltip.js", ["goog.ui.AdvancedTooltip"], ["goog.events", "goog.events.EventType", "goog.math.Box", "goog.math.Coordinate", "goog.style", "goog.ui.Tooltip", "goog.userAgent"]); +goog.addDependency("/closure/goog/ui/animatedzippy.js", ["goog.ui.AnimatedZippy"], ["goog.dom", "goog.events", "goog.fx.Animation", "goog.fx.Transition", "goog.fx.easing", "goog.ui.Zippy", "goog.ui.ZippyEvent"]); +goog.addDependency("/closure/goog/ui/attachablemenu.js", ["goog.ui.AttachableMenu"], ["goog.a11y.aria", "goog.a11y.aria.State", "goog.array", "goog.asserts", "goog.dom", "goog.dom.classes", "goog.events.Event", "goog.events.KeyCodes", "goog.string", "goog.style", "goog.ui.ItemEvent", "goog.ui.MenuBase", "goog.ui.PopupBase", "goog.userAgent"]); +goog.addDependency("/closure/goog/ui/bidiinput.js", ["goog.ui.BidiInput"], ["goog.dom", "goog.events", "goog.events.InputHandler", "goog.i18n.bidi", "goog.ui.Component"]); +goog.addDependency("/closure/goog/ui/bubble.js", ["goog.ui.Bubble"], ["goog.Timer", "goog.events", "goog.events.EventType", "goog.math.Box", "goog.positioning", "goog.positioning.AbsolutePosition", "goog.positioning.AnchoredPosition", "goog.positioning.Corner", "goog.positioning.CornerBit", "goog.style", "goog.ui.Component", "goog.ui.Popup"]); +goog.addDependency("/closure/goog/ui/button.js", ["goog.ui.Button", "goog.ui.Button.Side"], ["goog.events.EventType", "goog.events.KeyCodes", "goog.events.KeyHandler", "goog.ui.ButtonRenderer", "goog.ui.ButtonSide", "goog.ui.Component", "goog.ui.Control", "goog.ui.NativeButtonRenderer", "goog.ui.registry"]); +goog.addDependency("/closure/goog/ui/buttonrenderer.js", ["goog.ui.ButtonRenderer"], ["goog.a11y.aria", "goog.a11y.aria.Role", "goog.a11y.aria.State", "goog.asserts", "goog.ui.ButtonSide", "goog.ui.Component", "goog.ui.ControlRenderer"]); +goog.addDependency("/closure/goog/ui/buttonside.js", ["goog.ui.ButtonSide"], []); +goog.addDependency("/closure/goog/ui/charcounter.js", ["goog.ui.CharCounter", "goog.ui.CharCounter.Display"], ["goog.dom", "goog.events", "goog.events.EventTarget", "goog.events.InputHandler"]); +goog.addDependency("/closure/goog/ui/charpicker.js", ["goog.ui.CharPicker"], ["goog.a11y.aria", "goog.a11y.aria.State", "goog.array", "goog.asserts", "goog.dom.classes", "goog.events", "goog.events.Event", "goog.events.EventHandler", "goog.events.EventType", "goog.events.InputHandler", "goog.events.KeyCodes", "goog.events.KeyHandler", "goog.i18n.CharListDecompressor", "goog.i18n.uChar", "goog.structs.Set", "goog.style", "goog.ui.Button", "goog.ui.Component", "goog.ui.ContainerScroller", "goog.ui.FlatButtonRenderer", +"goog.ui.HoverCard", "goog.ui.LabelInput", "goog.ui.Menu", "goog.ui.MenuButton", "goog.ui.MenuItem", "goog.ui.Tooltip"]); +goog.addDependency("/closure/goog/ui/checkbox.js", ["goog.ui.Checkbox", "goog.ui.Checkbox.State"], ["goog.a11y.aria", "goog.a11y.aria.State", "goog.asserts", "goog.events.EventType", "goog.events.KeyCodes", "goog.ui.CheckboxRenderer", "goog.ui.Component.EventType", "goog.ui.Component.State", "goog.ui.Control", "goog.ui.registry"]); +goog.addDependency("/closure/goog/ui/checkboxmenuitem.js", ["goog.ui.CheckBoxMenuItem"], ["goog.ui.MenuItem", "goog.ui.registry"]); +goog.addDependency("/closure/goog/ui/checkboxrenderer.js", ["goog.ui.CheckboxRenderer"], ["goog.a11y.aria", "goog.a11y.aria.Role", "goog.a11y.aria.State", "goog.array", "goog.asserts", "goog.dom.classes", "goog.object", "goog.ui.ControlRenderer"]); +goog.addDependency("/closure/goog/ui/colorbutton.js", ["goog.ui.ColorButton"], ["goog.ui.Button", "goog.ui.ColorButtonRenderer", "goog.ui.registry"]); +goog.addDependency("/closure/goog/ui/colorbuttonrenderer.js", ["goog.ui.ColorButtonRenderer"], ["goog.dom.classes", "goog.functions", "goog.ui.ColorMenuButtonRenderer"]); +goog.addDependency("/closure/goog/ui/colormenubutton.js", ["goog.ui.ColorMenuButton"], ["goog.array", "goog.object", "goog.ui.ColorMenuButtonRenderer", "goog.ui.ColorPalette", "goog.ui.Component", "goog.ui.Menu", "goog.ui.MenuButton", "goog.ui.registry"]); +goog.addDependency("/closure/goog/ui/colormenubuttonrenderer.js", ["goog.ui.ColorMenuButtonRenderer"], ["goog.color", "goog.dom.classes", "goog.ui.MenuButtonRenderer", "goog.userAgent"]); +goog.addDependency("/closure/goog/ui/colorpalette.js", ["goog.ui.ColorPalette"], ["goog.array", "goog.color", "goog.style", "goog.ui.Palette", "goog.ui.PaletteRenderer"]); +goog.addDependency("/closure/goog/ui/colorpicker.js", ["goog.ui.ColorPicker", "goog.ui.ColorPicker.EventType"], ["goog.ui.ColorPalette", "goog.ui.Component"]); +goog.addDependency("/closure/goog/ui/colorsplitbehavior.js", ["goog.ui.ColorSplitBehavior"], ["goog.ui.ColorMenuButton", "goog.ui.SplitBehavior"]); +goog.addDependency("/closure/goog/ui/combobox.js", ["goog.ui.ComboBox", "goog.ui.ComboBoxItem"], ["goog.Timer", "goog.dom", "goog.dom.classlist", "goog.events.EventType", "goog.events.InputHandler", "goog.events.KeyCodes", "goog.events.KeyHandler", "goog.log", "goog.positioning.Corner", "goog.positioning.MenuAnchoredPosition", "goog.string", "goog.style", "goog.ui.Component", "goog.ui.ItemEvent", "goog.ui.LabelInput", "goog.ui.Menu", "goog.ui.MenuItem", "goog.ui.MenuSeparator", "goog.ui.registry", +"goog.userAgent"]); +goog.addDependency("/closure/goog/ui/component.js", ["goog.ui.Component", "goog.ui.Component.Error", "goog.ui.Component.EventType", "goog.ui.Component.State"], ["goog.array", "goog.asserts", "goog.dom", "goog.dom.NodeType", "goog.events.EventHandler", "goog.events.EventTarget", "goog.object", "goog.style", "goog.ui.IdGenerator"]); +goog.addDependency("/closure/goog/ui/container.js", ["goog.ui.Container", "goog.ui.Container.EventType", "goog.ui.Container.Orientation"], ["goog.a11y.aria", "goog.a11y.aria.State", "goog.asserts", "goog.dom", "goog.events.EventType", "goog.events.KeyCodes", "goog.events.KeyHandler", "goog.object", "goog.style", "goog.ui.Component", "goog.ui.ContainerRenderer", "goog.ui.Control"]); +goog.addDependency("/closure/goog/ui/containerrenderer.js", ["goog.ui.ContainerRenderer"], ["goog.a11y.aria", "goog.array", "goog.asserts", "goog.dom.NodeType", "goog.dom.classes", "goog.string", "goog.style", "goog.ui.registry", "goog.userAgent"]); +goog.addDependency("/closure/goog/ui/containerscroller.js", ["goog.ui.ContainerScroller"], ["goog.Disposable", "goog.Timer", "goog.events.EventHandler", "goog.style", "goog.ui.Component", "goog.ui.Container"]); +goog.addDependency("/closure/goog/ui/control.js", ["goog.ui.Control"], ["goog.array", "goog.dom", "goog.events.Event", "goog.events.EventType", "goog.events.KeyCodes", "goog.events.KeyHandler", "goog.string", "goog.ui.Component", "goog.ui.ControlContent", "goog.ui.ControlRenderer", "goog.ui.decorate", "goog.ui.registry", "goog.userAgent"]); +goog.addDependency("/closure/goog/ui/controlcontent.js", ["goog.ui.ControlContent"], []); +goog.addDependency("/closure/goog/ui/controlrenderer.js", ["goog.ui.ControlRenderer"], ["goog.a11y.aria", "goog.a11y.aria.State", "goog.array", "goog.asserts", "goog.dom", "goog.dom.classes", "goog.object", "goog.style", "goog.ui.Component", "goog.userAgent"]); +goog.addDependency("/closure/goog/ui/cookieeditor.js", ["goog.ui.CookieEditor"], ["goog.asserts", "goog.dom", "goog.dom.TagName", "goog.events.EventType", "goog.net.cookies", "goog.string", "goog.style", "goog.ui.Component"]); +goog.addDependency("/closure/goog/ui/css3buttonrenderer.js", ["goog.ui.Css3ButtonRenderer"], ["goog.dom.TagName", "goog.dom.classes", "goog.ui.Button", "goog.ui.ButtonRenderer", "goog.ui.Component", "goog.ui.INLINE_BLOCK_CLASSNAME", "goog.ui.registry"]); +goog.addDependency("/closure/goog/ui/css3menubuttonrenderer.js", ["goog.ui.Css3MenuButtonRenderer"], ["goog.dom", "goog.dom.TagName", "goog.ui.INLINE_BLOCK_CLASSNAME", "goog.ui.MenuButton", "goog.ui.MenuButtonRenderer", "goog.ui.registry"]); +goog.addDependency("/closure/goog/ui/cssnames.js", ["goog.ui.INLINE_BLOCK_CLASSNAME"], []); +goog.addDependency("/closure/goog/ui/custombutton.js", ["goog.ui.CustomButton"], ["goog.ui.Button", "goog.ui.CustomButtonRenderer", "goog.ui.registry"]); +goog.addDependency("/closure/goog/ui/custombuttonrenderer.js", ["goog.ui.CustomButtonRenderer"], ["goog.a11y.aria.Role", "goog.dom.NodeType", "goog.dom.classes", "goog.string", "goog.ui.ButtonRenderer", "goog.ui.INLINE_BLOCK_CLASSNAME"]); +goog.addDependency("/closure/goog/ui/customcolorpalette.js", ["goog.ui.CustomColorPalette"], ["goog.color", "goog.dom", "goog.dom.classes", "goog.ui.ColorPalette", "goog.ui.Component"]); +goog.addDependency("/closure/goog/ui/datepicker.js", ["goog.ui.DatePicker", "goog.ui.DatePicker.Events", "goog.ui.DatePickerEvent"], ["goog.a11y.aria", "goog.asserts", "goog.date", "goog.date.Date", "goog.date.Interval", "goog.dom", "goog.dom.NodeType", "goog.dom.classes", "goog.events.Event", "goog.events.EventType", "goog.events.KeyHandler", "goog.i18n.DateTimeFormat", "goog.i18n.DateTimeSymbols", "goog.string", "goog.style", "goog.ui.Component", "goog.ui.DefaultDatePickerRenderer", "goog.ui.IdGenerator"]); +goog.addDependency("/closure/goog/ui/datepickerrenderer.js", ["goog.ui.DatePickerRenderer"], []); +goog.addDependency("/closure/goog/ui/decorate.js", ["goog.ui.decorate"], ["goog.ui.registry"]); +goog.addDependency("/closure/goog/ui/defaultdatepickerrenderer.js", ["goog.ui.DefaultDatePickerRenderer"], ["goog.dom", "goog.dom.TagName", "goog.ui.DatePickerRenderer"]); +goog.addDependency("/closure/goog/ui/dialog.js", ["goog.ui.Dialog", "goog.ui.Dialog.ButtonSet", "goog.ui.Dialog.ButtonSet.DefaultButtons", "goog.ui.Dialog.DefaultButtonCaptions", "goog.ui.Dialog.DefaultButtonKeys", "goog.ui.Dialog.Event", "goog.ui.Dialog.EventType"], ["goog.a11y.aria", "goog.a11y.aria.Role", "goog.a11y.aria.State", "goog.asserts", "goog.dom", "goog.dom.NodeType", "goog.dom.TagName", "goog.dom.classes", "goog.events", "goog.events.Event", "goog.events.EventType", "goog.events.KeyCodes", +"goog.fx.Dragger", "goog.math.Rect", "goog.structs", "goog.structs.Map", "goog.style", "goog.ui.ModalPopup", "goog.userAgent"]); +goog.addDependency("/closure/goog/ui/dimensionpicker.js", ["goog.ui.DimensionPicker"], ["goog.events.EventType", "goog.events.KeyCodes", "goog.math.Size", "goog.ui.Component", "goog.ui.Control", "goog.ui.DimensionPickerRenderer", "goog.ui.registry"]); +goog.addDependency("/closure/goog/ui/dimensionpickerrenderer.js", ["goog.ui.DimensionPickerRenderer"], ["goog.a11y.aria", "goog.a11y.aria.State", "goog.dom", "goog.dom.TagName", "goog.i18n.bidi", "goog.style", "goog.ui.ControlRenderer", "goog.userAgent"]); +goog.addDependency("/closure/goog/ui/dragdropdetector.js", ["goog.ui.DragDropDetector", "goog.ui.DragDropDetector.EventType", "goog.ui.DragDropDetector.ImageDropEvent", "goog.ui.DragDropDetector.LinkDropEvent"], ["goog.dom", "goog.dom.TagName", "goog.events.Event", "goog.events.EventHandler", "goog.events.EventTarget", "goog.events.EventType", "goog.math.Coordinate", "goog.string", "goog.style", "goog.userAgent"]); +goog.addDependency("/closure/goog/ui/drilldownrow.js", ["goog.ui.DrilldownRow"], ["goog.dom", "goog.dom.classes", "goog.ui.Component"]); +goog.addDependency("/closure/goog/ui/editor/abstractdialog.js", ["goog.ui.editor.AbstractDialog", "goog.ui.editor.AbstractDialog.Builder", "goog.ui.editor.AbstractDialog.EventType"], ["goog.dom", "goog.dom.classes", "goog.events.EventTarget", "goog.string", "goog.ui.Dialog"]); +goog.addDependency("/closure/goog/ui/editor/bubble.js", ["goog.ui.editor.Bubble"], ["goog.dom", "goog.dom.TagName", "goog.dom.ViewportSizeMonitor", "goog.dom.classes", "goog.editor.style", "goog.events.EventHandler", "goog.events.EventTarget", "goog.events.EventType", "goog.log", "goog.math.Box", "goog.object", "goog.positioning", "goog.positioning.Corner", "goog.positioning.Overflow", "goog.positioning.OverflowStatus", "goog.string", "goog.style", "goog.ui.Component", "goog.ui.PopupBase", "goog.userAgent"]); +goog.addDependency("/closure/goog/ui/editor/defaulttoolbar.js", ["goog.ui.editor.ButtonDescriptor", "goog.ui.editor.DefaultToolbar"], ["goog.dom", "goog.dom.TagName", "goog.dom.classes", "goog.editor.Command", "goog.style", "goog.ui.editor.ToolbarFactory", "goog.ui.editor.messages", "goog.userAgent"]); +goog.addDependency("/closure/goog/ui/editor/equationeditordialog.js", ["goog.ui.editor.EquationEditorDialog"], ["goog.editor.Command", "goog.ui.Dialog", "goog.ui.editor.AbstractDialog", "goog.ui.editor.EquationEditorOkEvent", "goog.ui.equation.TexEditor"]); +goog.addDependency("/closure/goog/ui/editor/equationeditorokevent.js", ["goog.ui.editor.EquationEditorOkEvent"], ["goog.events.Event", "goog.ui.editor.AbstractDialog"]); +goog.addDependency("/closure/goog/ui/editor/linkdialog.js", ["goog.ui.editor.LinkDialog", "goog.ui.editor.LinkDialog.BeforeTestLinkEvent", "goog.ui.editor.LinkDialog.EventType", "goog.ui.editor.LinkDialog.OkEvent"], ["goog.dom", "goog.dom.TagName", "goog.editor.BrowserFeature", "goog.editor.Link", "goog.editor.focus", "goog.editor.node", "goog.events.Event", "goog.events.EventHandler", "goog.events.EventType", "goog.events.InputHandler", "goog.string", "goog.style", "goog.ui.Button", "goog.ui.Component", +"goog.ui.LinkButtonRenderer", "goog.ui.editor.AbstractDialog", "goog.ui.editor.TabPane", "goog.ui.editor.messages", "goog.userAgent", "goog.window"]); +goog.addDependency("/closure/goog/ui/editor/messages.js", ["goog.ui.editor.messages"], []); +goog.addDependency("/closure/goog/ui/editor/tabpane.js", ["goog.ui.editor.TabPane"], ["goog.dom.TagName", "goog.dom.classes", "goog.events.EventHandler", "goog.events.EventType", "goog.style", "goog.ui.Component", "goog.ui.Control", "goog.ui.Tab", "goog.ui.TabBar"]); +goog.addDependency("/closure/goog/ui/editor/toolbarcontroller.js", ["goog.ui.editor.ToolbarController"], ["goog.editor.Field", "goog.events.EventHandler", "goog.events.EventTarget", "goog.ui.Component"]); +goog.addDependency("/closure/goog/ui/editor/toolbarfactory.js", ["goog.ui.editor.ToolbarFactory"], ["goog.array", "goog.dom", "goog.dom.TagName", "goog.string", "goog.string.Unicode", "goog.style", "goog.ui.Component", "goog.ui.Container", "goog.ui.Option", "goog.ui.Toolbar", "goog.ui.ToolbarButton", "goog.ui.ToolbarColorMenuButton", "goog.ui.ToolbarMenuButton", "goog.ui.ToolbarRenderer", "goog.ui.ToolbarSelect", "goog.userAgent"]); +goog.addDependency("/closure/goog/ui/emoji/emoji.js", ["goog.ui.emoji.Emoji"], []); +goog.addDependency("/closure/goog/ui/emoji/emojipalette.js", ["goog.ui.emoji.EmojiPalette"], ["goog.events.EventType", "goog.net.ImageLoader", "goog.ui.Palette", "goog.ui.emoji.Emoji", "goog.ui.emoji.EmojiPaletteRenderer"]); +goog.addDependency("/closure/goog/ui/emoji/emojipaletterenderer.js", ["goog.ui.emoji.EmojiPaletteRenderer"], ["goog.a11y.aria", "goog.dom.NodeType", "goog.dom.classes", "goog.style", "goog.ui.PaletteRenderer", "goog.ui.emoji.Emoji"]); +goog.addDependency("/closure/goog/ui/emoji/emojipicker.js", ["goog.ui.emoji.EmojiPicker"], ["goog.log", "goog.style", "goog.ui.Component", "goog.ui.TabPane", "goog.ui.emoji.Emoji", "goog.ui.emoji.EmojiPalette", "goog.ui.emoji.EmojiPaletteRenderer", "goog.ui.emoji.ProgressiveEmojiPaletteRenderer"]); +goog.addDependency("/closure/goog/ui/emoji/popupemojipicker.js", ["goog.ui.emoji.PopupEmojiPicker"], ["goog.events.EventType", "goog.positioning.AnchoredPosition", "goog.positioning.Corner", "goog.ui.Component", "goog.ui.Popup", "goog.ui.emoji.EmojiPicker"]); +goog.addDependency("/closure/goog/ui/emoji/progressiveemojipaletterenderer.js", ["goog.ui.emoji.ProgressiveEmojiPaletteRenderer"], ["goog.style", "goog.ui.emoji.EmojiPaletteRenderer"]); +goog.addDependency("/closure/goog/ui/emoji/spriteinfo.js", ["goog.ui.emoji.SpriteInfo"], []); +goog.addDependency("/closure/goog/ui/equation/arrowpalette.js", ["goog.ui.equation.ArrowPalette"], ["goog.math.Size", "goog.ui.equation.Palette"]); +goog.addDependency("/closure/goog/ui/equation/changeevent.js", ["goog.ui.equation.ChangeEvent"], ["goog.events.Event"]); +goog.addDependency("/closure/goog/ui/equation/comparisonpalette.js", ["goog.ui.equation.ComparisonPalette"], ["goog.math.Size", "goog.ui.equation.Palette"]); +goog.addDependency("/closure/goog/ui/equation/editorpane.js", ["goog.ui.equation.EditorPane"], ["goog.style", "goog.ui.Component"]); +goog.addDependency("/closure/goog/ui/equation/equationeditor.js", ["goog.ui.equation.EquationEditor"], ["goog.events", "goog.ui.Component", "goog.ui.TabBar", "goog.ui.equation.ImageRenderer", "goog.ui.equation.TexPane"]); +goog.addDependency("/closure/goog/ui/equation/equationeditordialog.js", ["goog.ui.equation.EquationEditorDialog"], ["goog.dom", "goog.dom.classes", "goog.ui.Dialog", "goog.ui.equation.EquationEditor", "goog.ui.equation.PaletteManager", "goog.ui.equation.TexEditor"]); +goog.addDependency("/closure/goog/ui/equation/greekpalette.js", ["goog.ui.equation.GreekPalette"], ["goog.math.Size", "goog.ui.equation.Palette"]); +goog.addDependency("/closure/goog/ui/equation/imagerenderer.js", ["goog.ui.equation.ImageRenderer"], ["goog.dom.TagName", "goog.dom.classes", "goog.string", "goog.uri.utils"]); +goog.addDependency("/closure/goog/ui/equation/mathpalette.js", ["goog.ui.equation.MathPalette"], ["goog.math.Size", "goog.ui.equation.Palette"]); +goog.addDependency("/closure/goog/ui/equation/menupalette.js", ["goog.ui.equation.MenuPalette", "goog.ui.equation.MenuPaletteRenderer"], ["goog.math.Size", "goog.ui.PaletteRenderer", "goog.ui.equation.Palette", "goog.ui.equation.PaletteRenderer"]); +goog.addDependency("/closure/goog/ui/equation/palette.js", ["goog.ui.equation.Palette", "goog.ui.equation.PaletteEvent", "goog.ui.equation.PaletteRenderer"], ["goog.dom", "goog.dom.TagName", "goog.events.Event", "goog.ui.Palette", "goog.ui.PaletteRenderer"]); +goog.addDependency("/closure/goog/ui/equation/palettemanager.js", ["goog.ui.equation.PaletteManager"], ["goog.Timer", "goog.events.EventHandler", "goog.events.EventTarget", "goog.ui.equation.ArrowPalette", "goog.ui.equation.ComparisonPalette", "goog.ui.equation.GreekPalette", "goog.ui.equation.MathPalette", "goog.ui.equation.MenuPalette", "goog.ui.equation.Palette", "goog.ui.equation.SymbolPalette"]); +goog.addDependency("/closure/goog/ui/equation/symbolpalette.js", ["goog.ui.equation.SymbolPalette"], ["goog.math.Size", "goog.ui.equation.Palette"]); +goog.addDependency("/closure/goog/ui/equation/texeditor.js", ["goog.ui.equation.TexEditor"], ["goog.ui.Component", "goog.ui.equation.ImageRenderer", "goog.ui.equation.TexPane"]); +goog.addDependency("/closure/goog/ui/equation/texpane.js", ["goog.ui.equation.TexPane"], ["goog.Timer", "goog.dom", "goog.dom.TagName", "goog.dom.selection", "goog.events", "goog.events.EventType", "goog.events.InputHandler", "goog.style", "goog.ui.equation.ChangeEvent", "goog.ui.equation.EditorPane", "goog.ui.equation.ImageRenderer", "goog.ui.equation.Palette", "goog.ui.equation.PaletteEvent"]); +goog.addDependency("/closure/goog/ui/filteredmenu.js", ["goog.ui.FilteredMenu"], ["goog.dom", "goog.events", "goog.events.EventType", "goog.events.InputHandler", "goog.events.KeyCodes", "goog.string", "goog.style", "goog.ui.Component", "goog.ui.FilterObservingMenuItem", "goog.ui.Menu", "goog.userAgent"]); +goog.addDependency("/closure/goog/ui/filterobservingmenuitem.js", ["goog.ui.FilterObservingMenuItem"], ["goog.ui.FilterObservingMenuItemRenderer", "goog.ui.MenuItem", "goog.ui.registry"]); +goog.addDependency("/closure/goog/ui/filterobservingmenuitemrenderer.js", ["goog.ui.FilterObservingMenuItemRenderer"], ["goog.ui.MenuItemRenderer"]); +goog.addDependency("/closure/goog/ui/flatbuttonrenderer.js", ["goog.ui.FlatButtonRenderer"], ["goog.a11y.aria.Role", "goog.dom.classes", "goog.ui.Button", "goog.ui.ButtonRenderer", "goog.ui.INLINE_BLOCK_CLASSNAME", "goog.ui.registry"]); +goog.addDependency("/closure/goog/ui/flatmenubuttonrenderer.js", ["goog.ui.FlatMenuButtonRenderer"], ["goog.a11y.aria", "goog.a11y.aria.State", "goog.asserts", "goog.dom", "goog.string", "goog.style", "goog.ui.Component", "goog.ui.FlatButtonRenderer", "goog.ui.INLINE_BLOCK_CLASSNAME", "goog.ui.Menu", "goog.ui.MenuButton", "goog.ui.MenuRenderer", "goog.ui.registry"]); +goog.addDependency("/closure/goog/ui/formpost.js", ["goog.ui.FormPost"], ["goog.array", "goog.dom.TagName", "goog.string", "goog.string.StringBuffer", "goog.ui.Component"]); +goog.addDependency("/closure/goog/ui/gauge.js", ["goog.ui.Gauge", "goog.ui.GaugeColoredRange"], ["goog.a11y.aria", "goog.asserts", "goog.events", "goog.fx.Animation", "goog.fx.Transition", "goog.fx.easing", "goog.graphics", "goog.graphics.Font", "goog.graphics.Path", "goog.graphics.SolidFill", "goog.math", "goog.ui.Component", "goog.ui.GaugeTheme"]); +goog.addDependency("/closure/goog/ui/gaugetheme.js", ["goog.ui.GaugeTheme"], ["goog.graphics.LinearGradient", "goog.graphics.SolidFill", "goog.graphics.Stroke"]); +goog.addDependency("/closure/goog/ui/hovercard.js", ["goog.ui.HoverCard", "goog.ui.HoverCard.EventType", "goog.ui.HoverCard.TriggerEvent"], ["goog.array", "goog.dom", "goog.events", "goog.events.Event", "goog.events.EventType", "goog.ui.AdvancedTooltip", "goog.ui.PopupBase", "goog.ui.Tooltip"]); +goog.addDependency("/closure/goog/ui/hsvapalette.js", ["goog.ui.HsvaPalette"], ["goog.array", "goog.color.alpha", "goog.dom", "goog.dom.TagName", "goog.events", "goog.events.EventType", "goog.style", "goog.ui.Component", "goog.ui.HsvPalette"]); +goog.addDependency("/closure/goog/ui/hsvpalette.js", ["goog.ui.HsvPalette"], ["goog.color", "goog.dom.TagName", "goog.events", "goog.events.EventType", "goog.events.InputHandler", "goog.style", "goog.style.bidi", "goog.ui.Component", "goog.userAgent"]); +goog.addDependency("/closure/goog/ui/idgenerator.js", ["goog.ui.IdGenerator"], []); +goog.addDependency("/closure/goog/ui/idletimer.js", ["goog.ui.IdleTimer"], ["goog.Timer", "goog.events", "goog.events.EventTarget", "goog.structs.Set", "goog.ui.ActivityMonitor"]); +goog.addDependency("/closure/goog/ui/iframemask.js", ["goog.ui.IframeMask"], ["goog.Disposable", "goog.Timer", "goog.dom", "goog.dom.iframe", "goog.events.EventHandler", "goog.style"]); +goog.addDependency("/closure/goog/ui/imagelessbuttonrenderer.js", ["goog.ui.ImagelessButtonRenderer"], ["goog.dom.classes", "goog.ui.Button", "goog.ui.Component", "goog.ui.CustomButtonRenderer", "goog.ui.INLINE_BLOCK_CLASSNAME", "goog.ui.registry"]); +goog.addDependency("/closure/goog/ui/imagelessmenubuttonrenderer.js", ["goog.ui.ImagelessMenuButtonRenderer"], ["goog.dom", "goog.dom.TagName", "goog.dom.classes", "goog.ui.INLINE_BLOCK_CLASSNAME", "goog.ui.MenuButton", "goog.ui.MenuButtonRenderer", "goog.ui.registry"]); +goog.addDependency("/closure/goog/ui/inputdatepicker.js", ["goog.ui.InputDatePicker"], ["goog.date.DateTime", "goog.dom", "goog.string", "goog.ui.Component", "goog.ui.DatePicker", "goog.ui.PopupBase", "goog.ui.PopupDatePicker"]); +goog.addDependency("/closure/goog/ui/itemevent.js", ["goog.ui.ItemEvent"], ["goog.events.Event"]); +goog.addDependency("/closure/goog/ui/keyboardshortcuthandler.js", ["goog.ui.KeyboardShortcutEvent", "goog.ui.KeyboardShortcutHandler", "goog.ui.KeyboardShortcutHandler.EventType"], ["goog.Timer", "goog.events", "goog.events.Event", "goog.events.EventTarget", "goog.events.EventType", "goog.events.KeyCodes", "goog.events.KeyNames", "goog.object", "goog.userAgent"]); +goog.addDependency("/closure/goog/ui/labelinput.js", ["goog.ui.LabelInput"], ["goog.Timer", "goog.a11y.aria", "goog.a11y.aria.State", "goog.asserts", "goog.dom", "goog.dom.classlist", "goog.events.EventHandler", "goog.events.EventType", "goog.ui.Component", "goog.userAgent"]); +goog.addDependency("/closure/goog/ui/linkbuttonrenderer.js", ["goog.ui.LinkButtonRenderer"], ["goog.ui.Button", "goog.ui.FlatButtonRenderer", "goog.ui.registry"]); +goog.addDependency("/closure/goog/ui/media/flashobject.js", ["goog.ui.media.FlashObject", "goog.ui.media.FlashObject.ScriptAccessLevel", "goog.ui.media.FlashObject.Wmodes"], ["goog.asserts", "goog.events.Event", "goog.events.EventHandler", "goog.events.EventType", "goog.log", "goog.object", "goog.string", "goog.structs.Map", "goog.style", "goog.ui.Component", "goog.userAgent", "goog.userAgent.flash"]); +goog.addDependency("/closure/goog/ui/media/flickr.js", ["goog.ui.media.FlickrSet", "goog.ui.media.FlickrSetModel"], ["goog.ui.media.FlashObject", "goog.ui.media.Media", "goog.ui.media.MediaModel", "goog.ui.media.MediaRenderer"]); +goog.addDependency("/closure/goog/ui/media/googlevideo.js", ["goog.ui.media.GoogleVideo", "goog.ui.media.GoogleVideoModel"], ["goog.string", "goog.ui.media.FlashObject", "goog.ui.media.Media", "goog.ui.media.MediaModel", "goog.ui.media.MediaRenderer"]); +goog.addDependency("/closure/goog/ui/media/media.js", ["goog.ui.media.Media", "goog.ui.media.MediaRenderer"], ["goog.style", "goog.ui.Component", "goog.ui.Control", "goog.ui.ControlRenderer"]); +goog.addDependency("/closure/goog/ui/media/mediamodel.js", ["goog.ui.media.MediaModel", "goog.ui.media.MediaModel.Category", "goog.ui.media.MediaModel.Credit", "goog.ui.media.MediaModel.Credit.Role", "goog.ui.media.MediaModel.Credit.Scheme", "goog.ui.media.MediaModel.Medium", "goog.ui.media.MediaModel.MimeType", "goog.ui.media.MediaModel.Player", "goog.ui.media.MediaModel.SubTitle", "goog.ui.media.MediaModel.Thumbnail"], ["goog.array"]); +goog.addDependency("/closure/goog/ui/media/mp3.js", ["goog.ui.media.Mp3"], ["goog.string", "goog.ui.media.FlashObject", "goog.ui.media.Media", "goog.ui.media.MediaRenderer"]); +goog.addDependency("/closure/goog/ui/media/photo.js", ["goog.ui.media.Photo"], ["goog.ui.media.Media", "goog.ui.media.MediaRenderer"]); +goog.addDependency("/closure/goog/ui/media/picasa.js", ["goog.ui.media.PicasaAlbum", "goog.ui.media.PicasaAlbumModel"], ["goog.ui.media.FlashObject", "goog.ui.media.Media", "goog.ui.media.MediaModel", "goog.ui.media.MediaRenderer"]); +goog.addDependency("/closure/goog/ui/media/vimeo.js", ["goog.ui.media.Vimeo", "goog.ui.media.VimeoModel"], ["goog.string", "goog.ui.media.FlashObject", "goog.ui.media.Media", "goog.ui.media.MediaModel", "goog.ui.media.MediaRenderer"]); +goog.addDependency("/closure/goog/ui/media/youtube.js", ["goog.ui.media.Youtube", "goog.ui.media.YoutubeModel"], ["goog.string", "goog.ui.Component", "goog.ui.media.FlashObject", "goog.ui.media.Media", "goog.ui.media.MediaModel", "goog.ui.media.MediaRenderer"]); +goog.addDependency("/closure/goog/ui/menu.js", ["goog.ui.Menu", "goog.ui.Menu.EventType"], ["goog.math.Coordinate", "goog.string", "goog.style", "goog.ui.Component.EventType", "goog.ui.Component.State", "goog.ui.Container", "goog.ui.Container.Orientation", "goog.ui.MenuHeader", "goog.ui.MenuItem", "goog.ui.MenuRenderer", "goog.ui.MenuSeparator"]); +goog.addDependency("/closure/goog/ui/menubar.js", ["goog.ui.menuBar"], ["goog.ui.Container", "goog.ui.MenuBarRenderer"]); +goog.addDependency("/closure/goog/ui/menubardecorator.js", ["goog.ui.menuBarDecorator"], ["goog.ui.MenuBarRenderer", "goog.ui.menuBar", "goog.ui.registry"]); +goog.addDependency("/closure/goog/ui/menubarrenderer.js", ["goog.ui.MenuBarRenderer"], ["goog.a11y.aria.Role", "goog.ui.Container", "goog.ui.ContainerRenderer"]); +goog.addDependency("/closure/goog/ui/menubase.js", ["goog.ui.MenuBase"], ["goog.events.EventHandler", "goog.events.EventType", "goog.events.KeyHandler", "goog.ui.Popup"]); +goog.addDependency("/closure/goog/ui/menubutton.js", ["goog.ui.MenuButton"], ["goog.Timer", "goog.a11y.aria", "goog.a11y.aria.State", "goog.asserts", "goog.dom", "goog.events.EventType", "goog.events.KeyCodes", "goog.events.KeyHandler", "goog.math.Box", "goog.math.Rect", "goog.positioning", "goog.positioning.Corner", "goog.positioning.MenuAnchoredPosition", "goog.positioning.Overflow", "goog.style", "goog.ui.Button", "goog.ui.Component", "goog.ui.Menu", "goog.ui.MenuButtonRenderer", "goog.ui.registry", +"goog.userAgent", "goog.userAgent.product"]); +goog.addDependency("/closure/goog/ui/menubuttonrenderer.js", ["goog.ui.MenuButtonRenderer"], ["goog.a11y.aria", "goog.a11y.aria.State", "goog.asserts", "goog.dom", "goog.string", "goog.style", "goog.ui.Component", "goog.ui.CustomButtonRenderer", "goog.ui.INLINE_BLOCK_CLASSNAME", "goog.ui.Menu", "goog.ui.MenuRenderer", "goog.userAgent"]); +goog.addDependency("/closure/goog/ui/menuheader.js", ["goog.ui.MenuHeader"], ["goog.ui.Component", "goog.ui.Control", "goog.ui.MenuHeaderRenderer", "goog.ui.registry"]); +goog.addDependency("/closure/goog/ui/menuheaderrenderer.js", ["goog.ui.MenuHeaderRenderer"], ["goog.ui.ControlRenderer"]); +goog.addDependency("/closure/goog/ui/menuitem.js", ["goog.ui.MenuItem"], ["goog.array", "goog.dom", "goog.dom.classes", "goog.math.Coordinate", "goog.string", "goog.ui.Component", "goog.ui.Control", "goog.ui.MenuItemRenderer", "goog.ui.registry"]); +goog.addDependency("/closure/goog/ui/menuitemrenderer.js", ["goog.ui.MenuItemRenderer"], ["goog.a11y.aria", "goog.a11y.aria.Role", "goog.dom", "goog.dom.classes", "goog.ui.Component", "goog.ui.ControlRenderer"]); +goog.addDependency("/closure/goog/ui/menurenderer.js", ["goog.ui.MenuRenderer"], ["goog.a11y.aria", "goog.a11y.aria.Role", "goog.a11y.aria.State", "goog.asserts", "goog.dom", "goog.ui.ContainerRenderer", "goog.ui.Separator"]); +goog.addDependency("/closure/goog/ui/menuseparator.js", ["goog.ui.MenuSeparator"], ["goog.ui.MenuSeparatorRenderer", "goog.ui.Separator", "goog.ui.registry"]); +goog.addDependency("/closure/goog/ui/menuseparatorrenderer.js", ["goog.ui.MenuSeparatorRenderer"], ["goog.dom", "goog.dom.classes", "goog.ui.ControlContent", "goog.ui.ControlRenderer"]); +goog.addDependency("/closure/goog/ui/mockactivitymonitor.js", ["goog.ui.MockActivityMonitor"], ["goog.events.EventType", "goog.ui.ActivityMonitor"]); +goog.addDependency("/closure/goog/ui/mockactivitymonitor_test.js", ["goog.ui.MockActivityMonitorTest"], ["goog.events", "goog.functions", "goog.testing.jsunit", "goog.testing.recordFunction", "goog.ui.ActivityMonitor", "goog.ui.MockActivityMonitor"]); +goog.addDependency("/closure/goog/ui/modalpopup.js", ["goog.ui.ModalPopup"], ["goog.Timer", "goog.a11y.aria", "goog.a11y.aria.State", "goog.asserts", "goog.dom", "goog.dom.NodeType", "goog.dom.TagName", "goog.dom.classes", "goog.dom.iframe", "goog.events", "goog.events.EventType", "goog.events.FocusHandler", "goog.fx.Transition", "goog.style", "goog.ui.Component", "goog.ui.PopupBase", "goog.userAgent"]); +goog.addDependency("/closure/goog/ui/nativebuttonrenderer.js", ["goog.ui.NativeButtonRenderer"], ["goog.dom.classes", "goog.events.EventType", "goog.ui.ButtonRenderer", "goog.ui.Component"]); +goog.addDependency("/closure/goog/ui/offlineinstalldialog.js", ["goog.ui.OfflineInstallDialog", "goog.ui.OfflineInstallDialog.ButtonKeyType", "goog.ui.OfflineInstallDialog.EnableScreen", "goog.ui.OfflineInstallDialog.InstallScreen", "goog.ui.OfflineInstallDialog.InstallingGearsScreen", "goog.ui.OfflineInstallDialog.ScreenType", "goog.ui.OfflineInstallDialog.UpgradeScreen", "goog.ui.OfflineInstallDialogScreen"], ["goog.Disposable", "goog.dom.classes", "goog.gears", "goog.string", "goog.string.StringBuffer", +"goog.ui.Dialog", "goog.window"]); +goog.addDependency("/closure/goog/ui/offlinestatuscard.js", ["goog.ui.OfflineStatusCard", "goog.ui.OfflineStatusCard.EventType"], ["goog.dom", "goog.events.EventType", "goog.gears.StatusType", "goog.structs.Map", "goog.style", "goog.ui.Component", "goog.ui.ProgressBar"]); +goog.addDependency("/closure/goog/ui/offlinestatuscomponent.js", ["goog.ui.OfflineStatusComponent", "goog.ui.OfflineStatusComponent.StatusClassNames"], ["goog.dom.classes", "goog.events.EventType", "goog.gears.StatusType", "goog.positioning.AnchoredPosition", "goog.positioning.Corner", "goog.positioning.Overflow", "goog.ui.Component", "goog.ui.OfflineStatusCard", "goog.ui.Popup"]); +goog.addDependency("/closure/goog/ui/option.js", ["goog.ui.Option"], ["goog.ui.Component", "goog.ui.MenuItem", "goog.ui.registry"]); +goog.addDependency("/closure/goog/ui/palette.js", ["goog.ui.Palette"], ["goog.array", "goog.dom", "goog.events", "goog.events.EventType", "goog.events.KeyCodes", "goog.math.Size", "goog.ui.Component", "goog.ui.Control", "goog.ui.PaletteRenderer", "goog.ui.SelectionModel"]); +goog.addDependency("/closure/goog/ui/paletterenderer.js", ["goog.ui.PaletteRenderer"], ["goog.a11y.aria", "goog.a11y.aria.Role", "goog.a11y.aria.State", "goog.array", "goog.dom", "goog.dom.NodeIterator", "goog.dom.NodeType", "goog.dom.TagName", "goog.dom.classes", "goog.iter", "goog.style", "goog.ui.ControlRenderer", "goog.userAgent"]); +goog.addDependency("/closure/goog/ui/plaintextspellchecker.js", ["goog.ui.PlainTextSpellChecker"], ["goog.Timer", "goog.a11y.aria", "goog.asserts", "goog.dom", "goog.events.EventHandler", "goog.events.EventType", "goog.events.KeyCodes", "goog.events.KeyHandler", "goog.spell.SpellCheck", "goog.style", "goog.ui.AbstractSpellChecker", "goog.ui.Component", "goog.userAgent"]); +goog.addDependency("/closure/goog/ui/popup.js", ["goog.ui.Popup", "goog.ui.Popup.AbsolutePosition", "goog.ui.Popup.AnchoredPosition", "goog.ui.Popup.AnchoredViewPortPosition", "goog.ui.Popup.ClientPosition", "goog.ui.Popup.Corner", "goog.ui.Popup.Overflow", "goog.ui.Popup.ViewPortClientPosition", "goog.ui.Popup.ViewPortPosition"], ["goog.math.Box", "goog.positioning.AbsolutePosition", "goog.positioning.AnchoredPosition", "goog.positioning.AnchoredViewportPosition", "goog.positioning.ClientPosition", +"goog.positioning.Corner", "goog.positioning.Overflow", "goog.positioning.ViewportClientPosition", "goog.positioning.ViewportPosition", "goog.style", "goog.ui.PopupBase"]); +goog.addDependency("/closure/goog/ui/popupbase.js", ["goog.ui.PopupBase", "goog.ui.PopupBase.EventType", "goog.ui.PopupBase.Type"], ["goog.Timer", "goog.dom", "goog.events", "goog.events.EventHandler", "goog.events.EventTarget", "goog.events.EventType", "goog.events.KeyCodes", "goog.fx.Transition", "goog.style", "goog.userAgent"]); +goog.addDependency("/closure/goog/ui/popupcolorpicker.js", ["goog.ui.PopupColorPicker"], ["goog.dom.classes", "goog.events.EventType", "goog.positioning.AnchoredPosition", "goog.positioning.Corner", "goog.ui.ColorPicker", "goog.ui.Component", "goog.ui.Popup"]); +goog.addDependency("/closure/goog/ui/popupdatepicker.js", ["goog.ui.PopupDatePicker"], ["goog.events.EventType", "goog.positioning.AnchoredPosition", "goog.positioning.Corner", "goog.style", "goog.ui.Component", "goog.ui.DatePicker", "goog.ui.Popup", "goog.ui.PopupBase"]); +goog.addDependency("/closure/goog/ui/popupmenu.js", ["goog.ui.PopupMenu"], ["goog.events.EventType", "goog.positioning.AnchoredViewportPosition", "goog.positioning.Corner", "goog.positioning.MenuAnchoredPosition", "goog.positioning.ViewportClientPosition", "goog.structs", "goog.structs.Map", "goog.style", "goog.ui.Component.EventType", "goog.ui.Menu", "goog.ui.PopupBase", "goog.userAgent"]); +goog.addDependency("/closure/goog/ui/progressbar.js", ["goog.ui.ProgressBar", "goog.ui.ProgressBar.Orientation"], ["goog.a11y.aria", "goog.asserts", "goog.dom", "goog.dom.classes", "goog.events", "goog.events.EventType", "goog.ui.Component", "goog.ui.RangeModel", "goog.userAgent"]); +goog.addDependency("/closure/goog/ui/prompt.js", ["goog.ui.Prompt"], ["goog.Timer", "goog.dom", "goog.events", "goog.events.EventType", "goog.functions", "goog.ui.Component", "goog.ui.Dialog", "goog.userAgent"]); +goog.addDependency("/closure/goog/ui/rangemodel.js", ["goog.ui.RangeModel"], ["goog.events.EventTarget", "goog.ui.Component"]); +goog.addDependency("/closure/goog/ui/ratings.js", ["goog.ui.Ratings", "goog.ui.Ratings.EventType"], ["goog.a11y.aria", "goog.a11y.aria.Role", "goog.a11y.aria.State", "goog.asserts", "goog.dom.classes", "goog.events.EventType", "goog.ui.Component"]); +goog.addDependency("/closure/goog/ui/registry.js", ["goog.ui.registry"], ["goog.dom.classes"]); +goog.addDependency("/closure/goog/ui/richtextspellchecker.js", ["goog.ui.RichTextSpellChecker"], ["goog.Timer", "goog.dom", "goog.dom.NodeType", "goog.events", "goog.events.EventType", "goog.spell.SpellCheck", "goog.string.StringBuffer", "goog.ui.AbstractSpellChecker"]); +goog.addDependency("/closure/goog/ui/roundedpanel.js", ["goog.ui.BaseRoundedPanel", "goog.ui.CssRoundedPanel", "goog.ui.GraphicsRoundedPanel", "goog.ui.RoundedPanel", "goog.ui.RoundedPanel.Corner"], ["goog.dom", "goog.dom.classes", "goog.graphics", "goog.graphics.Path", "goog.graphics.SolidFill", "goog.graphics.Stroke", "goog.math", "goog.math.Coordinate", "goog.style", "goog.ui.Component", "goog.userAgent"]); +goog.addDependency("/closure/goog/ui/roundedtabrenderer.js", ["goog.ui.RoundedTabRenderer"], ["goog.dom", "goog.ui.Tab", "goog.ui.TabBar", "goog.ui.TabRenderer", "goog.ui.registry"]); +goog.addDependency("/closure/goog/ui/scrollfloater.js", ["goog.ui.ScrollFloater", "goog.ui.ScrollFloater.EventType"], ["goog.array", "goog.dom", "goog.dom.classes", "goog.events.EventType", "goog.style", "goog.ui.Component", "goog.userAgent"]); +goog.addDependency("/closure/goog/ui/select.js", ["goog.ui.Select"], ["goog.a11y.aria.Role", "goog.events.EventType", "goog.ui.Component", "goog.ui.MenuButton", "goog.ui.MenuItem", "goog.ui.SelectionModel", "goog.ui.registry"]); +goog.addDependency("/closure/goog/ui/selectionmenubutton.js", ["goog.ui.SelectionMenuButton", "goog.ui.SelectionMenuButton.SelectionState"], ["goog.events.EventType", "goog.style", "goog.ui.Component", "goog.ui.MenuButton", "goog.ui.MenuItem", "goog.ui.registry"]); +goog.addDependency("/closure/goog/ui/selectionmodel.js", ["goog.ui.SelectionModel"], ["goog.array", "goog.events.EventTarget", "goog.events.EventType"]); +goog.addDependency("/closure/goog/ui/separator.js", ["goog.ui.Separator"], ["goog.a11y.aria", "goog.asserts", "goog.ui.Component", "goog.ui.Control", "goog.ui.MenuSeparatorRenderer", "goog.ui.registry"]); +goog.addDependency("/closure/goog/ui/serverchart.js", ["goog.ui.ServerChart", "goog.ui.ServerChart.AxisDisplayType", "goog.ui.ServerChart.ChartType", "goog.ui.ServerChart.EncodingType", "goog.ui.ServerChart.Event", "goog.ui.ServerChart.LegendPosition", "goog.ui.ServerChart.MaximumValue", "goog.ui.ServerChart.MultiAxisAlignment", "goog.ui.ServerChart.MultiAxisType", "goog.ui.ServerChart.UriParam", "goog.ui.ServerChart.UriTooLongEvent"], ["goog.Uri", "goog.array", "goog.asserts", "goog.events.Event", +"goog.string", "goog.ui.Component"]); +goog.addDependency("/closure/goog/ui/slider.js", ["goog.ui.Slider", "goog.ui.Slider.Orientation"], ["goog.a11y.aria", "goog.a11y.aria.Role", "goog.dom", "goog.ui.SliderBase"]); +goog.addDependency("/closure/goog/ui/sliderbase.js", ["goog.ui.SliderBase", "goog.ui.SliderBase.AnimationFactory", "goog.ui.SliderBase.Orientation"], ["goog.Timer", "goog.a11y.aria", "goog.a11y.aria.Role", "goog.a11y.aria.State", "goog.array", "goog.asserts", "goog.dom", "goog.dom.classes", "goog.events", "goog.events.EventType", "goog.events.KeyCodes", "goog.events.KeyHandler", "goog.events.MouseWheelHandler", "goog.fx.AnimationParallelQueue", "goog.fx.Dragger", "goog.fx.Transition", "goog.fx.dom.ResizeHeight", +"goog.fx.dom.ResizeWidth", "goog.fx.dom.Slide", "goog.math", "goog.math.Coordinate", "goog.style", "goog.style.bidi", "goog.ui.Component", "goog.ui.RangeModel"]); +goog.addDependency("/closure/goog/ui/splitbehavior.js", ["goog.ui.SplitBehavior", "goog.ui.SplitBehavior.DefaultHandlers"], ["goog.Disposable", "goog.dispose", "goog.dom", "goog.dom.NodeType", "goog.dom.classes", "goog.events.EventHandler", "goog.ui.ButtonSide", "goog.ui.Component", "goog.ui.decorate", "goog.ui.registry"]); +goog.addDependency("/closure/goog/ui/splitpane.js", ["goog.ui.SplitPane", "goog.ui.SplitPane.Orientation"], ["goog.dom", "goog.dom.classes", "goog.events.EventType", "goog.fx.Dragger", "goog.math.Rect", "goog.math.Size", "goog.style", "goog.ui.Component", "goog.userAgent"]); +goog.addDependency("/closure/goog/ui/style/app/buttonrenderer.js", ["goog.ui.style.app.ButtonRenderer"], ["goog.dom.classes", "goog.ui.Button", "goog.ui.CustomButtonRenderer", "goog.ui.INLINE_BLOCK_CLASSNAME", "goog.ui.registry"]); +goog.addDependency("/closure/goog/ui/style/app/menubuttonrenderer.js", ["goog.ui.style.app.MenuButtonRenderer"], ["goog.a11y.aria.Role", "goog.array", "goog.dom", "goog.style", "goog.ui.Menu", "goog.ui.MenuRenderer", "goog.ui.style.app.ButtonRenderer"]); +goog.addDependency("/closure/goog/ui/style/app/primaryactionbuttonrenderer.js", ["goog.ui.style.app.PrimaryActionButtonRenderer"], ["goog.ui.Button", "goog.ui.registry", "goog.ui.style.app.ButtonRenderer"]); +goog.addDependency("/closure/goog/ui/submenu.js", ["goog.ui.SubMenu"], ["goog.Timer", "goog.dom", "goog.dom.classes", "goog.events.KeyCodes", "goog.positioning.AnchoredViewportPosition", "goog.positioning.Corner", "goog.style", "goog.ui.Component", "goog.ui.Menu", "goog.ui.MenuItem", "goog.ui.SubMenuRenderer", "goog.ui.registry"]); +goog.addDependency("/closure/goog/ui/submenurenderer.js", ["goog.ui.SubMenuRenderer"], ["goog.a11y.aria", "goog.a11y.aria.State", "goog.asserts", "goog.dom", "goog.dom.classes", "goog.style", "goog.ui.Menu", "goog.ui.MenuItemRenderer"]); +goog.addDependency("/closure/goog/ui/tab.js", ["goog.ui.Tab"], ["goog.ui.Component", "goog.ui.Control", "goog.ui.TabRenderer", "goog.ui.registry"]); +goog.addDependency("/closure/goog/ui/tabbar.js", ["goog.ui.TabBar", "goog.ui.TabBar.Location"], ["goog.ui.Component.EventType", "goog.ui.Container", "goog.ui.Container.Orientation", "goog.ui.Tab", "goog.ui.TabBarRenderer", "goog.ui.registry"]); +goog.addDependency("/closure/goog/ui/tabbarrenderer.js", ["goog.ui.TabBarRenderer"], ["goog.a11y.aria.Role", "goog.object", "goog.ui.ContainerRenderer"]); +goog.addDependency("/closure/goog/ui/tablesorter.js", ["goog.ui.TableSorter", "goog.ui.TableSorter.EventType"], ["goog.array", "goog.dom", "goog.dom.TagName", "goog.dom.classes", "goog.events.EventType", "goog.functions", "goog.ui.Component"]); +goog.addDependency("/closure/goog/ui/tabpane.js", ["goog.ui.TabPane", "goog.ui.TabPane.Events", "goog.ui.TabPane.TabLocation", "goog.ui.TabPane.TabPage", "goog.ui.TabPaneEvent"], ["goog.dom", "goog.dom.classes", "goog.events", "goog.events.Event", "goog.events.EventTarget", "goog.events.EventType", "goog.events.KeyCodes", "goog.style"]); +goog.addDependency("/closure/goog/ui/tabrenderer.js", ["goog.ui.TabRenderer"], ["goog.a11y.aria.Role", "goog.ui.Component", "goog.ui.ControlRenderer"]); +goog.addDependency("/closure/goog/ui/textarea.js", ["goog.ui.Textarea", "goog.ui.Textarea.EventType"], ["goog.dom", "goog.events.EventType", "goog.style", "goog.ui.Control", "goog.ui.TextareaRenderer", "goog.userAgent"]); +goog.addDependency("/closure/goog/ui/textarearenderer.js", ["goog.ui.TextareaRenderer"], ["goog.dom.TagName", "goog.ui.Component", "goog.ui.ControlRenderer"]); +goog.addDependency("/closure/goog/ui/togglebutton.js", ["goog.ui.ToggleButton"], ["goog.ui.Button", "goog.ui.Component", "goog.ui.CustomButtonRenderer", "goog.ui.registry"]); +goog.addDependency("/closure/goog/ui/toolbar.js", ["goog.ui.Toolbar"], ["goog.ui.Container", "goog.ui.ToolbarRenderer"]); +goog.addDependency("/closure/goog/ui/toolbarbutton.js", ["goog.ui.ToolbarButton"], ["goog.ui.Button", "goog.ui.ToolbarButtonRenderer", "goog.ui.registry"]); +goog.addDependency("/closure/goog/ui/toolbarbuttonrenderer.js", ["goog.ui.ToolbarButtonRenderer"], ["goog.ui.CustomButtonRenderer"]); +goog.addDependency("/closure/goog/ui/toolbarcolormenubutton.js", ["goog.ui.ToolbarColorMenuButton"], ["goog.ui.ColorMenuButton", "goog.ui.ToolbarColorMenuButtonRenderer", "goog.ui.registry"]); +goog.addDependency("/closure/goog/ui/toolbarcolormenubuttonrenderer.js", ["goog.ui.ToolbarColorMenuButtonRenderer"], ["goog.dom.classes", "goog.ui.ColorMenuButtonRenderer", "goog.ui.MenuButtonRenderer", "goog.ui.ToolbarMenuButtonRenderer"]); +goog.addDependency("/closure/goog/ui/toolbarmenubutton.js", ["goog.ui.ToolbarMenuButton"], ["goog.ui.MenuButton", "goog.ui.ToolbarMenuButtonRenderer", "goog.ui.registry"]); +goog.addDependency("/closure/goog/ui/toolbarmenubuttonrenderer.js", ["goog.ui.ToolbarMenuButtonRenderer"], ["goog.ui.MenuButtonRenderer"]); +goog.addDependency("/closure/goog/ui/toolbarrenderer.js", ["goog.ui.ToolbarRenderer"], ["goog.a11y.aria.Role", "goog.ui.Container", "goog.ui.ContainerRenderer", "goog.ui.Separator", "goog.ui.ToolbarSeparatorRenderer"]); +goog.addDependency("/closure/goog/ui/toolbarselect.js", ["goog.ui.ToolbarSelect"], ["goog.ui.Select", "goog.ui.ToolbarMenuButtonRenderer", "goog.ui.registry"]); +goog.addDependency("/closure/goog/ui/toolbarseparator.js", ["goog.ui.ToolbarSeparator"], ["goog.ui.Separator", "goog.ui.ToolbarSeparatorRenderer", "goog.ui.registry"]); +goog.addDependency("/closure/goog/ui/toolbarseparatorrenderer.js", ["goog.ui.ToolbarSeparatorRenderer"], ["goog.dom.classes", "goog.ui.INLINE_BLOCK_CLASSNAME", "goog.ui.MenuSeparatorRenderer"]); +goog.addDependency("/closure/goog/ui/toolbartogglebutton.js", ["goog.ui.ToolbarToggleButton"], ["goog.ui.ToggleButton", "goog.ui.ToolbarButtonRenderer", "goog.ui.registry"]); +goog.addDependency("/closure/goog/ui/tooltip.js", ["goog.ui.Tooltip", "goog.ui.Tooltip.CursorTooltipPosition", "goog.ui.Tooltip.ElementTooltipPosition", "goog.ui.Tooltip.State"], ["goog.Timer", "goog.array", "goog.dom", "goog.events", "goog.events.EventType", "goog.math.Box", "goog.math.Coordinate", "goog.positioning", "goog.positioning.AnchoredPosition", "goog.positioning.Corner", "goog.positioning.Overflow", "goog.positioning.OverflowStatus", "goog.positioning.ViewportPosition", "goog.structs.Set", +"goog.style", "goog.ui.Popup", "goog.ui.PopupBase"]); +goog.addDependency("/closure/goog/ui/tree/basenode.js", ["goog.ui.tree.BaseNode", "goog.ui.tree.BaseNode.EventType"], ["goog.Timer", "goog.a11y.aria", "goog.asserts", "goog.events.KeyCodes", "goog.string", "goog.string.StringBuffer", "goog.style", "goog.ui.Component", "goog.userAgent"]); +goog.addDependency("/closure/goog/ui/tree/treecontrol.js", ["goog.ui.tree.TreeControl"], ["goog.a11y.aria", "goog.asserts", "goog.dom.classes", "goog.events.EventType", "goog.events.FocusHandler", "goog.events.KeyHandler", "goog.log", "goog.ui.tree.BaseNode", "goog.ui.tree.TreeNode", "goog.ui.tree.TypeAhead", "goog.userAgent"]); +goog.addDependency("/closure/goog/ui/tree/treenode.js", ["goog.ui.tree.TreeNode"], ["goog.ui.tree.BaseNode"]); +goog.addDependency("/closure/goog/ui/tree/typeahead.js", ["goog.ui.tree.TypeAhead", "goog.ui.tree.TypeAhead.Offset"], ["goog.array", "goog.events.KeyCodes", "goog.string", "goog.structs.Trie"]); +goog.addDependency("/closure/goog/ui/tristatemenuitem.js", ["goog.ui.TriStateMenuItem", "goog.ui.TriStateMenuItem.State"], ["goog.dom.classes", "goog.ui.Component", "goog.ui.MenuItem", "goog.ui.TriStateMenuItemRenderer", "goog.ui.registry"]); +goog.addDependency("/closure/goog/ui/tristatemenuitemrenderer.js", ["goog.ui.TriStateMenuItemRenderer"], ["goog.dom.classes", "goog.ui.MenuItemRenderer"]); +goog.addDependency("/closure/goog/ui/twothumbslider.js", ["goog.ui.TwoThumbSlider"], ["goog.a11y.aria", "goog.a11y.aria.Role", "goog.dom", "goog.ui.SliderBase"]); +goog.addDependency("/closure/goog/ui/zippy.js", ["goog.ui.Zippy", "goog.ui.Zippy.Events", "goog.ui.ZippyEvent"], ["goog.a11y.aria", "goog.a11y.aria.Role", "goog.a11y.aria.State", "goog.dom", "goog.dom.classes", "goog.events.Event", "goog.events.EventHandler", "goog.events.EventTarget", "goog.events.EventType", "goog.events.KeyCodes", "goog.style"]); +goog.addDependency("/closure/goog/uri/uri.js", ["goog.Uri", "goog.Uri.QueryData"], ["goog.array", "goog.string", "goog.structs", "goog.structs.Map", "goog.uri.utils", "goog.uri.utils.ComponentIndex", "goog.uri.utils.StandardQueryParam"]); +goog.addDependency("/closure/goog/uri/uri_test.js", ["goog.UriTest"], ["goog.Uri", "goog.testing.jsunit"]); +goog.addDependency("/closure/goog/uri/utils.js", ["goog.uri.utils", "goog.uri.utils.ComponentIndex", "goog.uri.utils.QueryArray", "goog.uri.utils.QueryValue", "goog.uri.utils.StandardQueryParam"], ["goog.asserts", "goog.string", "goog.userAgent"]); +goog.addDependency("/closure/goog/useragent/adobereader.js", ["goog.userAgent.adobeReader"], ["goog.string", "goog.userAgent"]); +goog.addDependency("/closure/goog/useragent/flash.js", ["goog.userAgent.flash"], ["goog.string"]); +goog.addDependency("/closure/goog/useragent/iphoto.js", ["goog.userAgent.iphoto"], ["goog.string", "goog.userAgent"]); +goog.addDependency("/closure/goog/useragent/jscript.js", ["goog.userAgent.jscript"], ["goog.string"]); +goog.addDependency("/closure/goog/useragent/picasa.js", ["goog.userAgent.picasa"], ["goog.string", "goog.userAgent"]); +goog.addDependency("/closure/goog/useragent/platform.js", ["goog.userAgent.platform"], ["goog.userAgent"]); +goog.addDependency("/closure/goog/useragent/product.js", ["goog.userAgent.product"], ["goog.userAgent"]); +goog.addDependency("/closure/goog/useragent/product_isversion.js", ["goog.userAgent.product.isVersion"], ["goog.userAgent.product"]); +goog.addDependency("/closure/goog/useragent/useragent.js", ["goog.userAgent"], ["goog.string"]); +goog.addDependency("/closure/goog/vec/float32array.js", ["goog.vec.Float32Array"], []); +goog.addDependency("/closure/goog/vec/float64array.js", ["goog.vec.Float64Array"], []); +goog.addDependency("/closure/goog/vec/mat3.js", ["goog.vec.Mat3"], ["goog.vec"]); +goog.addDependency("/closure/goog/vec/mat3d.js", ["goog.vec.mat3d", "goog.vec.mat3d.Type"], ["goog.vec"]); +goog.addDependency("/closure/goog/vec/mat3f.js", ["goog.vec.mat3f", "goog.vec.mat3f.Type"], ["goog.vec"]); +goog.addDependency("/closure/goog/vec/mat4.js", ["goog.vec.Mat4"], ["goog.vec", "goog.vec.Vec3", "goog.vec.Vec4"]); +goog.addDependency("/closure/goog/vec/mat4d.js", ["goog.vec.mat4d", "goog.vec.mat4d.Type"], ["goog.vec", "goog.vec.vec3d", "goog.vec.vec4d"]); +goog.addDependency("/closure/goog/vec/mat4f.js", ["goog.vec.mat4f", "goog.vec.mat4f.Type"], ["goog.vec", "goog.vec.vec3f", "goog.vec.vec4f"]); +goog.addDependency("/closure/goog/vec/matrix3.js", ["goog.vec.Matrix3"], []); +goog.addDependency("/closure/goog/vec/matrix4.js", ["goog.vec.Matrix4"], ["goog.vec", "goog.vec.Vec3", "goog.vec.Vec4"]); +goog.addDependency("/closure/goog/vec/quaternion.js", ["goog.vec.Quaternion"], ["goog.vec", "goog.vec.Vec3", "goog.vec.Vec4"]); +goog.addDependency("/closure/goog/vec/ray.js", ["goog.vec.Ray"], ["goog.vec.Vec3"]); +goog.addDependency("/closure/goog/vec/vec.js", ["goog.vec", "goog.vec.AnyType", "goog.vec.ArrayType", "goog.vec.Float32", "goog.vec.Float64", "goog.vec.Number"], ["goog.vec.Float32Array", "goog.vec.Float64Array"]); +goog.addDependency("/closure/goog/vec/vec2.js", ["goog.vec.Vec2"], ["goog.vec"]); +goog.addDependency("/closure/goog/vec/vec2d.js", ["goog.vec.vec2d", "goog.vec.vec2d.Type"], ["goog.vec"]); +goog.addDependency("/closure/goog/vec/vec2f.js", ["goog.vec.vec2f", "goog.vec.vec2f.Type"], ["goog.vec"]); +goog.addDependency("/closure/goog/vec/vec3.js", ["goog.vec.Vec3"], ["goog.vec"]); +goog.addDependency("/closure/goog/vec/vec3d.js", ["goog.vec.vec3d", "goog.vec.vec3d.Type"], ["goog.vec"]); +goog.addDependency("/closure/goog/vec/vec3f.js", ["goog.vec.vec3f", "goog.vec.vec3f.Type"], ["goog.vec"]); +goog.addDependency("/closure/goog/vec/vec4.js", ["goog.vec.Vec4"], ["goog.vec"]); +goog.addDependency("/closure/goog/vec/vec4d.js", ["goog.vec.vec4d", "goog.vec.vec4d.Type"], ["goog.vec"]); +goog.addDependency("/closure/goog/vec/vec4f.js", ["goog.vec.vec4f", "goog.vec.vec4f.Type"], ["goog.vec"]); +goog.addDependency("/closure/goog/webgl/webgl.js", ["goog.webgl"], []); +goog.addDependency("/closure/goog/window/window.js", ["goog.window"], ["goog.string", "goog.userAgent"]); +goog.addDependency("/soy/soyutils.js", [], []); +goog.addDependency("/soy/soyutils_usegoog.js", ["soy", "soy.StringBuilder", "soy.esc", "soydata", "soydata.SanitizedHtml", "soydata.SanitizedHtmlAttribute", "soydata.SanitizedJs", "soydata.SanitizedJsStrChars", "soydata.SanitizedUri", "soydata.VERY_UNSAFE"], ["goog.asserts", "goog.dom.DomHelper", "goog.format", "goog.i18n.BidiFormatter", "goog.i18n.bidi", "goog.soy", "goog.soy.data.SanitizedContentKind", "goog.string", "goog.string.StringBuffer"]); +goog.addDependency("/third_party/closure/goog/base.js", [], []); +goog.addDependency("/third_party/closure/goog/caja/string/html/htmlparser.js", ["goog.string.html.HtmlParser", "goog.string.html.HtmlParser.EFlags", "goog.string.html.HtmlParser.Elements", "goog.string.html.HtmlParser.Entities", "goog.string.html.HtmlSaxHandler"], []); +goog.addDependency("/third_party/closure/goog/caja/string/html/htmlsanitizer.js", ["goog.string.html.HtmlSanitizer", "goog.string.html.HtmlSanitizer.AttributeType", "goog.string.html.HtmlSanitizer.Attributes", "goog.string.html.htmlSanitize"], ["goog.string.StringBuffer", "goog.string.html.HtmlParser", "goog.string.html.HtmlParser.EFlags", "goog.string.html.HtmlParser.Elements", "goog.string.html.HtmlSaxHandler"]); +goog.addDependency("/third_party/closure/goog/dojo/dom/query.js", ["goog.dom.query"], ["goog.array", "goog.dom", "goog.functions", "goog.string", "goog.userAgent"]); +goog.addDependency("/third_party/closure/goog/dojo/dom/query_test.js", [], []); +goog.addDependency("/third_party/closure/goog/jpeg_encoder/jpeg_encoder_basic.js", ["goog.crypt.JpegEncoder"], ["goog.crypt.base64"]); +goog.addDependency("/third_party/closure/goog/loremipsum/text/loremipsum.js", ["goog.text.LoremIpsum"], ["goog.array", "goog.math", "goog.string", "goog.structs.Map", "goog.structs.Set"]); +goog.addDependency("/third_party/closure/goog/mochikit/async/deferred.js", ["goog.async.Deferred", "goog.async.Deferred.AlreadyCalledError", "goog.async.Deferred.CanceledError"], ["goog.array", "goog.asserts", "goog.debug.Error", "goog.functions"]); +goog.addDependency("/third_party/closure/goog/mochikit/async/deferredlist.js", ["goog.async.DeferredList"], ["goog.async.Deferred"]); +goog.addDependency("/third_party/closure/goog/osapi/osapi.js", ["goog.osapi"], []); +goog.provide("libtess"); +libtess.DEBUG = false; +libtess.assert = function(condition, opt_message) { + if(libtess.DEBUG && !condition) { + throw new Error("Assertion failed" + (opt_message ? ": " + opt_message : "")); + } +}; +libtess.sweepDebugEvent = function(tess) { +}; +libtess.GLU_TESS_MAX_COORD = 1E150; +libtess.TRUE_PROJECT = false; +libtess.TESS_MAX_CACHE = 100; +libtess.GLU_TESS_DEFAULT_TOLERANCE = 0; +libtess.tessState = {T_DORMANT:0, T_IN_POLYGON:1, T_IN_CONTOUR:2}; +libtess.windingRule = {GLU_TESS_WINDING_ODD:100130, GLU_TESS_WINDING_NONZERO:100131, GLU_TESS_WINDING_POSITIVE:100132, GLU_TESS_WINDING_NEGATIVE:100133, GLU_TESS_WINDING_ABS_GEQ_TWO:100134}; +libtess.primitiveType = {GL_LINE_LOOP:2, GL_TRIANGLES:4, GL_TRIANGLE_STRIP:5, GL_TRIANGLE_FAN:6}; +libtess.errorType = {GLU_TESS_MISSING_BEGIN_POLYGON:100151, GLU_TESS_MISSING_END_POLYGON:100153, GLU_TESS_MISSING_BEGIN_CONTOUR:100152, GLU_TESS_MISSING_END_CONTOUR:100154, GLU_TESS_COORD_TOO_LARGE:100155, GLU_TESS_NEED_COMBINE_CALLBACK:100156}; +libtess.gluEnum = {GLU_TESS_MESH:100112, GLU_TESS_TOLERANCE:100142, GLU_TESS_WINDING_RULE:100140, GLU_TESS_BOUNDARY_ONLY:100141, GLU_INVALID_ENUM:100900, GLU_INVALID_VALUE:100901, GLU_TESS_BEGIN:100100, GLU_TESS_VERTEX:100101, GLU_TESS_END:100102, GLU_TESS_ERROR:100103, GLU_TESS_EDGE_FLAG:100104, GLU_TESS_COMBINE:100105, GLU_TESS_BEGIN_DATA:100106, GLU_TESS_VERTEX_DATA:100107, GLU_TESS_END_DATA:100108, GLU_TESS_ERROR_DATA:100109, GLU_TESS_EDGE_FLAG_DATA:100110, GLU_TESS_COMBINE_DATA:100111}; +libtess.PQHandle; +libtess.PQKey; +goog.provide("libtess.DictNode"); +goog.require("libtess"); +libtess.DictNode = function() { + this.key = null; + this.next = null; + this.prev = null +}; +libtess.DictNode.prototype.getKey = function() { + return this.key +}; +libtess.DictNode.prototype.getSucc = function() { + return this.next +}; +libtess.DictNode.prototype.getPred = function() { + return this.prev +}; +goog.provide("libtess.ActiveRegion"); +goog.require("libtess.DictNode"); +libtess.ActiveRegion = function() { + this.eUp = null; + this.nodeUp = null; + this.windingNumber = 0; + this.inside = false; + this.sentinel = false; + this.dirty = false; + this.fixUpperEdge = false +}; +libtess.ActiveRegion.prototype.regionBelow = function() { + return(this.nodeUp.getPred().getKey()) +}; +libtess.ActiveRegion.prototype.regionAbove = function() { + return(this.nodeUp.getSucc().getKey()) +}; +goog.provide("libtess.CachedVertex"); +goog.require("libtess"); +libtess.CachedVertex = function() { + this.coords = [0, 0, 0]; + this.data = null +}; +goog.provide("libtess.Dict"); +goog.require("libtess"); +goog.require("libtess.DictNode"); +libtess.dictKey; +libtess.Dict = function(frame, leq) { + this.head = new libtess.DictNode; + this.head.next = this.head; + this.head.prev = this.head; + this.frame = frame; + this.leq_ = (leq) +}; +libtess.Dict.prototype.deleteDict = function() { +}; +libtess.Dict.prototype.insertBefore = function(node, key) { + do { + node = node.prev + }while(node.key !== null && !this.leq_(this.frame, node.key, key)); + var newNode = new libtess.DictNode; + newNode.key = key; + newNode.next = node.next; + node.next.prev = newNode; + newNode.prev = node; + node.next = newNode; + return newNode +}; +libtess.Dict.prototype.insert = function(key) { + return this.insertBefore(this.head, key) +}; +libtess.Dict.prototype.deleteNode = function(node) { + node.next.prev = node.prev; + node.prev.next = node.next +}; +libtess.Dict.prototype.search = function(key) { + var node = this.head; + do { + node = node.next + }while(node.key !== null && !this.leq_(this.frame, key, node.key)); + return node +}; +libtess.Dict.prototype.getMin = function() { + return this.head.next +}; +libtess.Dict.prototype.getMax = function() { + return this.head.prev +}; +goog.provide("libtess.FaceCount"); +goog.require("libtess"); +libtess.FaceCount = function(size, eStart, renderFunction) { + this.size = size; + this.eStart = eStart; + this.render = renderFunction +}; +goog.provide("libtess.GluFace"); +goog.require("libtess"); +libtess.GluFace = function(opt_nextFace, opt_prevFace) { + this.next = opt_nextFace || this; + this.prev = opt_prevFace || this; + this.anEdge = null; + this.data = null; + this.trail = null; + this.marked = false; + this.inside = false +}; +goog.provide("libtess.GluHalfEdge"); +goog.require("libtess"); +libtess.GluHalfEdge = function(opt_nextEdge) { + this.next = opt_nextEdge || this; + this.sym = null; + this.oNext = null; + this.lNext = null; + this.org = null; + this.lFace = null; + this.activeRegion = null; + this.winding = 0 +}; +libtess.GluHalfEdge.prototype.rFace = function() { + return this.sym.lFace +}; +libtess.GluHalfEdge.prototype.dst = function() { + return this.sym.org +}; +libtess.GluHalfEdge.prototype.oPrev = function() { + return this.sym.lNext +}; +libtess.GluHalfEdge.prototype.lPrev = function() { + return this.oNext.sym +}; +libtess.GluHalfEdge.prototype.dPrev = function() { + return this.lNext.sym +}; +libtess.GluHalfEdge.prototype.rPrev = function() { + return this.sym.oNext +}; +libtess.GluHalfEdge.prototype.dNext = function() { + return this.rPrev().sym +}; +libtess.GluHalfEdge.prototype.rNext = function() { + return this.oPrev().sym +}; +goog.provide("libtess.GluVertex"); +goog.require("libtess"); +libtess.GluVertex = function(opt_nextVertex, opt_prevVertex) { + this.next = opt_nextVertex || this; + this.prev = opt_prevVertex || this; + this.anEdge = null; + this.data = null; + this.coords = [0, 0, 0]; + this.s = 0; + this.t = 0; + this.pqHandle = null +}; +goog.provide("libtess.GluMesh"); +goog.require("libtess"); +goog.require("libtess.GluFace"); +goog.require("libtess.GluHalfEdge"); +goog.require("libtess.GluVertex"); +libtess.GluMesh = function() { + this.vHead = new libtess.GluVertex; + this.fHead = new libtess.GluFace; + this.eHead = new libtess.GluHalfEdge; + this.eHeadSym = new libtess.GluHalfEdge; + this.eHead.sym = this.eHeadSym; + this.eHeadSym.sym = this.eHead +}; +libtess.GluMesh.prototype.checkMesh = function() { + if(!libtess.DEBUG) { + return + } + var fHead = this.fHead; + var vHead = this.vHead; + var eHead = this.eHead; + var e; + var f; + var fPrev = fHead; + for(fPrev = fHead;(f = fPrev.next) !== fHead;fPrev = f) { + libtess.assert(f.prev === fPrev); + e = f.anEdge; + do { + libtess.assert(e.sym !== e); + libtess.assert(e.sym.sym === e); + libtess.assert(e.lNext.oNext.sym === e); + libtess.assert(e.oNext.sym.lNext === e); + libtess.assert(e.lFace === f); + e = e.lNext + }while(e !== f.anEdge) + } + libtess.assert(f.prev === fPrev && f.anEdge === null && f.data === null); + var v; + var vPrev = vHead; + for(vPrev = vHead;(v = vPrev.next) !== vHead;vPrev = v) { + libtess.assert(v.prev === vPrev); + e = v.anEdge; + do { + libtess.assert(e.sym !== e); + libtess.assert(e.sym.sym === e); + libtess.assert(e.lNext.oNext.sym === e); + libtess.assert(e.oNext.sym.lNext === e); + libtess.assert(e.org === v); + e = e.oNext + }while(e !== v.anEdge) + } + libtess.assert(v.prev === vPrev && v.anEdge === null && v.data === null); + var ePrev = eHead; + for(ePrev = eHead;(e = ePrev.next) !== eHead;ePrev = e) { + libtess.assert(e.sym.next === ePrev.sym); + libtess.assert(e.sym !== e); + libtess.assert(e.sym.sym === e); + libtess.assert(e.org !== null); + libtess.assert(e.dst() !== null); + libtess.assert(e.lNext.oNext.sym === e); + libtess.assert(e.oNext.sym.lNext === e) + } + libtess.assert(e.sym.next === ePrev.sym && e.sym === this.eHeadSym && e.sym.sym === e && e.org === null && e.dst() === null && e.lFace === null && e.rFace() === null) +}; +goog.provide("libtess.mesh"); +goog.require("libtess"); +goog.require("libtess.GluFace"); +goog.require("libtess.GluHalfEdge"); +goog.require("libtess.GluVertex"); +libtess.mesh.makeEdge = function(mesh) { + var e = libtess.mesh.makeEdgePair_(mesh.eHead); + libtess.mesh.makeVertex_(e, mesh.vHead); + libtess.mesh.makeVertex_(e.sym, mesh.vHead); + libtess.mesh.makeFace_(e, mesh.fHead); + return e +}; +libtess.mesh.meshSplice = function(eOrg, eDst) { + var joiningLoops = false; + var joiningVertices = false; + if(eOrg === eDst) { + return + } + if(eDst.org !== eOrg.org) { + joiningVertices = true; + libtess.mesh.killVertex_(eDst.org, eOrg.org) + } + if(eDst.lFace !== eOrg.lFace) { + joiningLoops = true; + libtess.mesh.killFace_(eDst.lFace, eOrg.lFace) + } + libtess.mesh.splice_(eDst, eOrg); + if(!joiningVertices) { + libtess.mesh.makeVertex_(eDst, eOrg.org); + eOrg.org.anEdge = eOrg + } + if(!joiningLoops) { + libtess.mesh.makeFace_(eDst, eOrg.lFace); + eOrg.lFace.anEdge = eOrg + } +}; +libtess.mesh.deleteEdge = function(eDel) { + var eDelSym = eDel.sym; + var joiningLoops = false; + if(eDel.lFace !== eDel.rFace()) { + joiningLoops = true; + libtess.mesh.killFace_(eDel.lFace, eDel.rFace()) + } + if(eDel.oNext === eDel) { + libtess.mesh.killVertex_(eDel.org, null) + }else { + eDel.rFace().anEdge = eDel.oPrev(); + eDel.org.anEdge = eDel.oNext; + libtess.mesh.splice_(eDel, eDel.oPrev()); + if(!joiningLoops) { + libtess.mesh.makeFace_(eDel, eDel.lFace) + } + } + if(eDelSym.oNext === eDelSym) { + libtess.mesh.killVertex_(eDelSym.org, null); + libtess.mesh.killFace_(eDelSym.lFace, null) + }else { + eDel.lFace.anEdge = eDelSym.oPrev(); + eDelSym.org.anEdge = eDelSym.oNext; + libtess.mesh.splice_(eDelSym, eDelSym.oPrev()) + } + libtess.mesh.killEdge_(eDel) +}; +libtess.mesh.addEdgeVertex = function(eOrg) { + var eNew = libtess.mesh.makeEdgePair_(eOrg); + var eNewSym = eNew.sym; + libtess.mesh.splice_(eNew, eOrg.lNext); + eNew.org = eOrg.dst(); + libtess.mesh.makeVertex_(eNewSym, eNew.org); + eNew.lFace = eNewSym.lFace = eOrg.lFace; + return eNew +}; +libtess.mesh.splitEdge = function(eOrg) { + var tempHalfEdge = libtess.mesh.addEdgeVertex(eOrg); + var eNew = tempHalfEdge.sym; + libtess.mesh.splice_(eOrg.sym, eOrg.sym.oPrev()); + libtess.mesh.splice_(eOrg.sym, eNew); + eOrg.sym.org = eNew.org; + eNew.dst().anEdge = eNew.sym; + eNew.sym.lFace = eOrg.rFace(); + eNew.winding = eOrg.winding; + eNew.sym.winding = eOrg.sym.winding; + return eNew +}; +libtess.mesh.connect = function(eOrg, eDst) { + var joiningLoops = false; + var eNew = libtess.mesh.makeEdgePair_(eOrg); + var eNewSym = eNew.sym; + if(eDst.lFace !== eOrg.lFace) { + joiningLoops = true; + libtess.mesh.killFace_(eDst.lFace, eOrg.lFace) + } + libtess.mesh.splice_(eNew, eOrg.lNext); + libtess.mesh.splice_(eNewSym, eDst); + eNew.org = eOrg.dst(); + eNewSym.org = eDst.org; + eNew.lFace = eNewSym.lFace = eOrg.lFace; + eOrg.lFace.anEdge = eNewSym; + if(!joiningLoops) { + libtess.mesh.makeFace_(eNew, eOrg.lFace) + } + return eNew +}; +libtess.mesh.zapFace = function(fZap) { + var eStart = fZap.anEdge; + var eNext = eStart.lNext; + var e; + do { + e = eNext; + eNext = e.lNext; + e.lFace = null; + if(e.rFace() === null) { + if(e.oNext === e) { + libtess.mesh.killVertex_(e.org, null) + }else { + e.org.anEdge = e.oNext; + libtess.mesh.splice_(e, e.oPrev()) + } + var eSym = e.sym; + if(eSym.oNext === eSym) { + libtess.mesh.killVertex_(eSym.org, null) + }else { + eSym.org.anEdge = eSym.oNext; + libtess.mesh.splice_(eSym, eSym.oPrev()) + } + libtess.mesh.killEdge_(e) + } + }while(e !== eStart); + var fPrev = fZap.prev; + var fNext = fZap.next; + fNext.prev = fPrev; + fPrev.next = fNext +}; +libtess.mesh.meshUnion = function(mesh1, mesh2) { + var f1 = mesh1.fHead; + var v1 = mesh1.vHead; + var e1 = mesh1.eHead; + var f2 = mesh2.fHead; + var v2 = mesh2.vHead; + var e2 = mesh2.eHead; + if(f2.next !== f2) { + f1.prev.next = f2.next; + f2.next.prev = f1.prev; + f2.prev.next = f1; + f1.prev = f2.prev + } + if(v2.next !== v2) { + v1.prev.next = v2.next; + v2.next.prev = v1.prev; + v2.prev.next = v1; + v1.prev = v2.prev + } + if(e2.next !== e2) { + e1.sym.next.sym.next = e2.next; + e2.next.sym.next = e1.sym.next; + e2.sym.next.sym.next = e1; + e1.sym.next = e2.sym.next + } + return mesh1 +}; +libtess.mesh.deleteMesh = function(mesh) { +}; +libtess.mesh.makeEdgePair_ = function(eNext) { + var e = new libtess.GluHalfEdge; + var eSym = new libtess.GluHalfEdge; + var ePrev = eNext.sym.next; + eSym.next = ePrev; + ePrev.sym.next = e; + e.next = eNext; + eNext.sym.next = eSym; + e.sym = eSym; + e.oNext = e; + e.lNext = eSym; + eSym.sym = e; + eSym.oNext = eSym; + eSym.lNext = e; + return e +}; +libtess.mesh.splice_ = function(a, b) { + var aONext = a.oNext; + var bONext = b.oNext; + aONext.sym.lNext = b; + bONext.sym.lNext = a; + a.oNext = bONext; + b.oNext = aONext +}; +libtess.mesh.makeVertex_ = function(eOrig, vNext) { + var vPrev = vNext.prev; + var vNew = new libtess.GluVertex(vNext, vPrev); + vPrev.next = vNew; + vNext.prev = vNew; + vNew.anEdge = eOrig; + var e = eOrig; + do { + e.org = vNew; + e = e.oNext + }while(e !== eOrig) +}; +libtess.mesh.makeFace_ = function(eOrig, fNext) { + var fPrev = fNext.prev; + var fNew = new libtess.GluFace(fNext, fPrev); + fPrev.next = fNew; + fNext.prev = fNew; + fNew.anEdge = eOrig; + fNew.inside = fNext.inside; + var e = eOrig; + do { + e.lFace = fNew; + e = e.lNext + }while(e !== eOrig) +}; +libtess.mesh.killEdge_ = function(eDel) { + var eNext = eDel.next; + var ePrev = eDel.sym.next; + eNext.sym.next = ePrev; + ePrev.sym.next = eNext +}; +libtess.mesh.killVertex_ = function(vDel, newOrg) { + var eStart = vDel.anEdge; + var e = eStart; + do { + e.org = newOrg; + e = e.oNext + }while(e !== eStart); + var vPrev = vDel.prev; + var vNext = vDel.next; + vNext.prev = vPrev; + vPrev.next = vNext +}; +libtess.mesh.killFace_ = function(fDel, newLFace) { + var eStart = fDel.anEdge; + var e = eStart; + do { + e.lFace = newLFace; + e = e.lNext + }while(e !== eStart); + var fPrev = fDel.prev; + var fNext = fDel.next; + fNext.prev = fPrev; + fPrev.next = fNext +}; +goog.provide("libtess.normal"); +goog.require("libtess"); +libtess.normal.S_UNIT_X_ = 1; +libtess.normal.S_UNIT_Y_ = 0; +libtess.normal.projectPolygon = function(tess) { + var computedNormal = false; + var norm = [0, 0, 0]; + norm[0] = tess.normal[0]; + norm[1] = tess.normal[1]; + norm[2] = tess.normal[2]; + if(norm[0] === 0 && norm[1] === 0 && norm[2] === 0) { + libtess.normal.computeNormal_(tess, norm); + computedNormal = true + } + var sUnit = tess.sUnit; + var tUnit = tess.tUnit; + var i = libtess.normal.longAxis_(norm); + if(libtess.TRUE_PROJECT) { + libtess.normal.normalize_(norm); + sUnit[i] = 0; + sUnit[(i + 1) % 3] = libtess.normal.S_UNIT_X_; + sUnit[(i + 2) % 3] = libtess.normal.S_UNIT_Y_; + var w = libtess.normal.dot_(sUnit, norm); + sUnit[0] -= w * norm[0]; + sUnit[1] -= w * norm[1]; + sUnit[2] -= w * norm[2]; + libtess.normal.normalize_(sUnit); + tUnit[0] = norm[1] * sUnit[2] - norm[2] * sUnit[1]; + tUnit[1] = norm[2] * sUnit[0] - norm[0] * sUnit[2]; + tUnit[2] = norm[0] * sUnit[1] - norm[1] * sUnit[0]; + libtess.normal.normalize_(tUnit) + }else { + sUnit[i] = 0; + sUnit[(i + 1) % 3] = libtess.normal.S_UNIT_X_; + sUnit[(i + 2) % 3] = libtess.normal.S_UNIT_Y_; + tUnit[i] = 0; + tUnit[(i + 1) % 3] = norm[i] > 0 ? -libtess.normal.S_UNIT_Y_ : libtess.normal.S_UNIT_Y_; + tUnit[(i + 2) % 3] = norm[i] > 0 ? libtess.normal.S_UNIT_X_ : -libtess.normal.S_UNIT_X_ + } + var vHead = tess.mesh.vHead; + for(var v = vHead.next;v !== vHead;v = v.next) { + v.s = libtess.normal.dot_(v.coords, sUnit); + v.t = libtess.normal.dot_(v.coords, tUnit) + } + if(computedNormal) { + libtess.normal.checkOrientation_(tess) + } +}; +libtess.normal.dot_ = function(u, v) { + return u[0] * v[0] + u[1] * v[1] + u[2] * v[2] +}; +libtess.normal.normalize_ = function(v) { + var len = v[0] * v[0] + v[1] * v[1] + v[2] * v[2]; + libtess.assert(len > 0); + len = Math.sqrt(len); + v[0] /= len; + v[1] /= len; + v[2] /= len +}; +libtess.normal.longAxis_ = function(v) { + var i = 0; + if(Math.abs(v[1]) > Math.abs(v[0])) { + i = 1 + } + if(Math.abs(v[2]) > Math.abs(v[i])) { + i = 2 + } + return i +}; +libtess.normal.computeNormal_ = function(tess, norm) { + var maxVal = [0, 0, 0]; + var minVal = [0, 0, 0]; + var d1 = [0, 0, 0]; + var d2 = [0, 0, 0]; + var tNorm = [0, 0, 0]; + maxVal[0] = maxVal[1] = maxVal[2] = -2 * libtess.GLU_TESS_MAX_COORD; + minVal[0] = minVal[1] = minVal[2] = 2 * libtess.GLU_TESS_MAX_COORD; + var maxVert = new Array(3); + var minVert = new Array(3); + var i; + var v; + var vHead = tess.mesh.vHead; + for(v = vHead.next;v !== vHead;v = v.next) { + for(i = 0;i < 3;++i) { + var c = v.coords[i]; + if(c < minVal[i]) { + minVal[i] = c; + minVert[i] = v + } + if(c > maxVal[i]) { + maxVal[i] = c; + maxVert[i] = v + } + } + } + i = 0; + if(maxVal[1] - minVal[1] > maxVal[0] - minVal[0]) { + i = 1 + } + if(maxVal[2] - minVal[2] > maxVal[i] - minVal[i]) { + i = 2 + } + if(minVal[i] >= maxVal[i]) { + norm[0] = 0; + norm[1] = 0; + norm[2] = 1; + return + } + var maxLen2 = 0; + var v1 = minVert[i]; + var v2 = maxVert[i]; + d1[0] = v1.coords[0] - v2.coords[0]; + d1[1] = v1.coords[1] - v2.coords[1]; + d1[2] = v1.coords[2] - v2.coords[2]; + for(v = vHead.next;v !== vHead;v = v.next) { + d2[0] = v.coords[0] - v2.coords[0]; + d2[1] = v.coords[1] - v2.coords[1]; + d2[2] = v.coords[2] - v2.coords[2]; + tNorm[0] = d1[1] * d2[2] - d1[2] * d2[1]; + tNorm[1] = d1[2] * d2[0] - d1[0] * d2[2]; + tNorm[2] = d1[0] * d2[1] - d1[1] * d2[0]; + var tLen2 = tNorm[0] * tNorm[0] + tNorm[1] * tNorm[1] + tNorm[2] * tNorm[2]; + if(tLen2 > maxLen2) { + maxLen2 = tLen2; + norm[0] = tNorm[0]; + norm[1] = tNorm[1]; + norm[2] = tNorm[2] + } + } + if(maxLen2 <= 0) { + norm[0] = norm[1] = norm[2] = 0; + norm[libtess.normal.longAxis_(d1)] = 1 + } +}; +libtess.normal.checkOrientation_ = function(tess) { + var area = 0; + var fHead = tess.mesh.fHead; + for(var f = fHead.next;f !== fHead;f = f.next) { + var e = f.anEdge; + if(e.winding <= 0) { + continue + } + do { + area += (e.org.s - e.dst().s) * (e.org.t + e.dst().t); + e = e.lNext + }while(e !== f.anEdge) + } + if(area < 0) { + var vHead = tess.mesh.vHead; + for(var v = vHead.next;v !== vHead;v = v.next) { + v.t = -v.t + } + tess.tUnit[0] = -tess.tUnit[0]; + tess.tUnit[1] = -tess.tUnit[1]; + tess.tUnit[2] = -tess.tUnit[2] + } +}; +goog.provide("libtess.render"); +goog.require("libtess"); +goog.require("libtess.FaceCount"); +libtess.render.SIGN_INCONSISTENT_ = 2; +libtess.render.renderMesh = function(tess, mesh) { + tess.lonelyTriList = null; + var f; + for(f = mesh.fHead.next;f !== mesh.fHead;f = f.next) { + f.marked = false + } + for(f = mesh.fHead.next;f !== mesh.fHead;f = f.next) { + if(f.inside && !f.marked) { + libtess.render.renderMaximumFaceGroup_(tess, f); + libtess.assert(f.marked) + } + } + if(tess.lonelyTriList !== null) { + libtess.render.renderLonelyTriangles_(tess, tess.lonelyTriList); + tess.lonelyTriList = null + } +}; +libtess.render.renderBoundary = function(tess, mesh) { + for(var f = mesh.fHead.next;f !== mesh.fHead;f = f.next) { + if(f.inside) { + tess.callBeginOrBeginData(libtess.primitiveType.GL_LINE_LOOP); + var e = f.anEdge; + do { + tess.callVertexOrVertexData(e.org.data); + e = e.lNext + }while(e !== f.anEdge); + tess.callEndOrEndData() + } + } +}; +libtess.render.renderCache = function(tess) { + if(tess.cacheCount < 3) { + return true + } + var norm = [0, 0, 0]; + norm[0] = tess.normal[0]; + norm[1] = tess.normal[1]; + norm[2] = tess.normal[2]; + if(norm[0] === 0 && norm[1] === 0 && norm[2] === 0) { + libtess.render.computeNormal_(tess, norm, false) + } + var sign = libtess.render.computeNormal_(tess, norm, true); + if(sign === libtess.render.SIGN_INCONSISTENT_) { + return false + } + if(sign === 0) { + return true + } + switch(tess.windingRule) { + case libtess.windingRule.GLU_TESS_WINDING_ODD: + ; + case libtess.windingRule.GLU_TESS_WINDING_NONZERO: + break; + case libtess.windingRule.GLU_TESS_WINDING_POSITIVE: + if(sign < 0) { + return true + } + break; + case libtess.windingRule.GLU_TESS_WINDING_NEGATIVE: + if(sign > 0) { + return true + } + break; + case libtess.windingRule.GLU_TESS_WINDING_ABS_GEQ_TWO: + return true + } + tess.callBeginOrBeginData(tess.boundaryOnly ? libtess.primitiveType.GL_LINE_LOOP : tess.cacheCount > 3 ? libtess.primitiveType.GL_TRIANGLE_FAN : libtess.primitiveType.GL_TRIANGLES); + var v0 = 0; + var vn = v0 + tess.cacheCount; + var vc; + tess.callVertexOrVertexData(tess.cache[v0].data); + if(sign > 0) { + for(vc = v0 + 1;vc < vn;++vc) { + tess.callVertexOrVertexData(tess.cache[vc].data) + } + }else { + for(vc = vn - 1;vc > v0;--vc) { + tess.callVertexOrVertexData(tess.cache[vc].data) + } + } + tess.callEndOrEndData(); + return true +}; +libtess.render.marked_ = function(f) { + return!f.inside || f.marked +}; +libtess.render.freeTrail_ = function(t) { + while(t !== null) { + t.marked = false; + t = t.trail + } +}; +libtess.render.maximumFan_ = function(eOrig) { + var newFace = new libtess.FaceCount(0, null, libtess.render.renderFan_); + var trail = null; + var e; + for(e = eOrig;!libtess.render.marked_(e.lFace);e = e.oNext) { + e.lFace.trail = trail; + trail = e.lFace; + e.lFace.marked = true; + ++newFace.size + } + for(e = eOrig;!libtess.render.marked_(e.rFace());e = e.oPrev()) { + e.rFace().trail = trail; + trail = e.rFace(); + e.rFace().marked = true; + ++newFace.size + } + newFace.eStart = e; + libtess.render.freeTrail_(trail); + return newFace +}; +libtess.render.maximumStrip_ = function(eOrig) { + var newFace = new libtess.FaceCount(0, null, libtess.render.renderStrip_); + var headSize = 0; + var tailSize = 0; + var trail = null; + var e; + var eTail; + var eHead; + for(e = eOrig;!libtess.render.marked_(e.lFace);++tailSize, e = e.oNext) { + e.lFace.trail = trail; + trail = e.lFace; + e.lFace.marked = true; + ++tailSize; + e = e.dPrev(); + if(libtess.render.marked_(e.lFace)) { + break + } + e.lFace.trail = trail; + trail = e.lFace; + e.lFace.marked = true + } + eTail = e; + for(e = eOrig;!libtess.render.marked_(e.rFace());++headSize, e = e.dNext()) { + e.rFace().trail = trail; + trail = e.rFace(); + e.rFace().marked = true; + ++headSize; + e = e.oPrev(); + if(libtess.render.marked_(e.rFace())) { + break + } + e.rFace().trail = trail; + trail = e.rFace(); + e.rFace().marked = true + } + eHead = e; + newFace.size = tailSize + headSize; + if((tailSize & 1) === 0) { + newFace.eStart = eTail.sym + }else { + if((headSize & 1) === 0) { + newFace.eStart = eHead + }else { + --newFace.size; + newFace.eStart = eHead.oNext + } + } + libtess.render.freeTrail_(trail); + return newFace +}; +libtess.render.renderFan_ = function(tess, e, size) { + tess.callBeginOrBeginData(libtess.primitiveType.GL_TRIANGLE_FAN); + tess.callVertexOrVertexData(e.org.data); + tess.callVertexOrVertexData(e.dst().data); + while(!libtess.render.marked_(e.lFace)) { + e.lFace.marked = true; + --size; + e = e.oNext; + tess.callVertexOrVertexData(e.dst().data) + } + libtess.assert(size === 0); + tess.callEndOrEndData() +}; +libtess.render.renderStrip_ = function(tess, e, size) { + tess.callBeginOrBeginData(libtess.primitiveType.GL_TRIANGLE_STRIP); + tess.callVertexOrVertexData(e.org.data); + tess.callVertexOrVertexData(e.dst().data); + while(!libtess.render.marked_(e.lFace)) { + e.lFace.marked = true; + --size; + e = e.dPrev(); + tess.callVertexOrVertexData(e.org.data); + if(libtess.render.marked_(e.lFace)) { + break + } + e.lFace.marked = true; + --size; + e = e.oNext; + tess.callVertexOrVertexData(e.dst().data) + } + libtess.assert(size === 0); + tess.callEndOrEndData() +}; +libtess.render.renderTriangle_ = function(tess, e, size) { + libtess.assert(size === 1); + e.lFace.trail = tess.lonelyTriList; + tess.lonelyTriList = e.lFace; + e.lFace.marked = true +}; +libtess.render.renderMaximumFaceGroup_ = function(tess, fOrig) { + var e = fOrig.anEdge; + var max = new libtess.FaceCount(1, e, libtess.render.renderTriangle_); + var newFace; + if(!tess.flagBoundary) { + newFace = libtess.render.maximumFan_(e); + if(newFace.size > max.size) { + max = newFace + } + newFace = libtess.render.maximumFan_(e.lNext); + if(newFace.size > max.size) { + max = newFace + } + newFace = libtess.render.maximumFan_(e.lPrev()); + if(newFace.size > max.size) { + max = newFace + } + newFace = libtess.render.maximumStrip_(e); + if(newFace.size > max.size) { + max = newFace + } + newFace = libtess.render.maximumStrip_(e.lNext); + if(newFace.size > max.size) { + max = newFace + } + newFace = libtess.render.maximumStrip_(e.lPrev()); + if(newFace.size > max.size) { + max = newFace + } + } + max.render(tess, max.eStart, max.size) +}; +libtess.render.renderLonelyTriangles_ = function(tess, head) { + var edgeState = -1; + var f = head; + tess.callBeginOrBeginData(libtess.primitiveType.GL_TRIANGLES); + for(;f !== null;f = f.trail) { + var e = f.anEdge; + do { + if(tess.flagBoundary) { + var newState = !e.rFace().inside ? 1 : 0; + if(edgeState !== newState) { + edgeState = newState; + tess.callEdgeFlagOrEdgeFlagData(!!edgeState) + } + } + tess.callVertexOrVertexData(e.org.data); + e = e.lNext + }while(e !== f.anEdge) + } + tess.callEndOrEndData() +}; +libtess.render.computeNormal_ = function(tess, norm, check) { + if(!check) { + norm[0] = norm[1] = norm[2] = 0 + } + var v0 = 0; + var vn = v0 + tess.cacheCount; + var vc = v0 + 1; + var vert0 = tess.cache[v0]; + var vertc = tess.cache[vc]; + var xc = vertc.coords[0] - vert0.coords[0]; + var yc = vertc.coords[1] - vert0.coords[1]; + var zc = vertc.coords[2] - vert0.coords[2]; + var sign = 0; + while(++vc < vn) { + vertc = tess.cache[vc]; + var xp = xc; + var yp = yc; + var zp = zc; + xc = vertc.coords[0] - vert0.coords[0]; + yc = vertc.coords[1] - vert0.coords[1]; + zc = vertc.coords[2] - vert0.coords[2]; + var n = [0, 0, 0]; + n[0] = yp * zc - zp * yc; + n[1] = zp * xc - xp * zc; + n[2] = xp * yc - yp * xc; + var dot = n[0] * norm[0] + n[1] * norm[1] + n[2] * norm[2]; + if(!check) { + if(dot >= 0) { + norm[0] += n[0]; + norm[1] += n[1]; + norm[2] += n[2] + }else { + norm[0] -= n[0]; + norm[1] -= n[1]; + norm[2] -= n[2] + } + }else { + if(dot !== 0) { + if(dot > 0) { + if(sign < 0) { + return libtess.render.SIGN_INCONSISTENT_ + } + sign = 1 + }else { + if(sign > 0) { + return libtess.render.SIGN_INCONSISTENT_ + } + sign = -1 + } + } + } + } + return sign +}; +goog.provide("libtess.PQHandleElem"); +goog.require("libtess"); +libtess.PQHandleElem = function() { + this.key = null; + this.node = 0 +}; +libtess.PQHandleElem.realloc = function(oldArray, size) { + var newArray = new Array(size); + var index = 0; + if(oldArray !== null) { + for(;index < oldArray.length;index++) { + newArray[index] = oldArray[index] + } + } + for(;index < size;index++) { + newArray[index] = new libtess.PQHandleElem + } + return newArray +}; +goog.provide("libtess.PQNode"); +goog.require("libtess"); +libtess.PQNode = function() { + this.handle = 0 +}; +libtess.PQNode.realloc = function(oldArray, size) { + var newArray = new Array(size); + var index = 0; + if(oldArray !== null) { + for(;index < oldArray.length;index++) { + newArray[index] = oldArray[index] + } + } + for(;index < size;index++) { + newArray[index] = new libtess.PQNode + } + return newArray +}; +goog.provide("libtess.PriorityQHeap"); +goog.require("libtess"); +goog.require("libtess.PQHandleElem"); +goog.require("libtess.PQNode"); +libtess.PriorityQHeap = function(leq) { + this.nodes_ = libtess.PQNode.realloc(null, libtess.PriorityQHeap.INIT_SIZE_ + 1); + this.handles_ = libtess.PQHandleElem.realloc(null, libtess.PriorityQHeap.INIT_SIZE_ + 1); + this.size_ = 0; + this.max_ = libtess.PriorityQHeap.INIT_SIZE_; + this.freeList_ = 0; + this.initialized_ = false; + this.leq_ = leq; + this.nodes_[1].handle = 1 +}; +libtess.PriorityQHeap.INIT_SIZE_ = 32; +libtess.PriorityQHeap.prototype.deleteHeap = function() { + this.handles_ = null; + this.nodes_ = null +}; +libtess.PriorityQHeap.prototype.init = function() { + for(var i = this.size_;i >= 1;--i) { + this.floatDown_(i) + } + this.initialized_ = true +}; +libtess.PriorityQHeap.prototype.insert = function(keyNew) { + var curr = ++this.size_; + if(curr * 2 > this.max_) { + this.max_ *= 2; + this.nodes_ = libtess.PQNode.realloc(this.nodes_, this.max_ + 1); + this.handles_ = libtess.PQHandleElem.realloc(this.handles_, this.max_ + 1) + } + var free; + if(this.freeList_ === 0) { + free = curr + }else { + free = this.freeList_; + this.freeList_ = this.handles_[free].node + } + this.nodes_[curr].handle = free; + this.handles_[free].node = curr; + this.handles_[free].key = keyNew; + if(this.initialized_) { + this.floatUp_(curr) + } + return free +}; +libtess.PriorityQHeap.prototype.isEmpty = function() { + return this.size_ === 0 +}; +libtess.PriorityQHeap.prototype.minimum = function() { + return this.handles_[this.nodes_[1].handle].key +}; +libtess.PriorityQHeap.prototype.extractMin = function() { + var n = this.nodes_; + var h = this.handles_; + var hMin = n[1].handle; + var min = h[hMin].key; + if(this.size_ > 0) { + n[1].handle = n[this.size_].handle; + h[n[1].handle].node = 1; + h[hMin].key = null; + h[hMin].node = this.freeList_; + this.freeList_ = hMin; + if(--this.size_ > 0) { + this.floatDown_(1) + } + } + return min +}; +libtess.PriorityQHeap.prototype.remove = function(hCurr) { + var n = this.nodes_; + var h = this.handles_; + libtess.assert(hCurr >= 1 && hCurr <= this.max_ && h[hCurr].key !== null); + var curr = h[hCurr].node; + n[curr].handle = n[this.size_].handle; + h[n[curr].handle].node = curr; + if(curr <= --this.size_) { + if(curr <= 1 || this.leq_(h[n[curr >> 1].handle].key, h[n[curr].handle].key)) { + this.floatDown_(curr) + }else { + this.floatUp_(curr) + } + } + h[hCurr].key = null; + h[hCurr].node = this.freeList_; + this.freeList_ = hCurr +}; +libtess.PriorityQHeap.prototype.floatDown_ = function(curr) { + var n = this.nodes_; + var h = this.handles_; + var hCurr = n[curr].handle; + for(;;) { + var child = curr << 1; + if(child < this.size_ && this.leq_(h[n[child + 1].handle].key, h[n[child].handle].key)) { + ++child + } + libtess.assert(child <= this.max_); + var hChild = n[child].handle; + if(child > this.size_ || this.leq_(h[hCurr].key, h[hChild].key)) { + n[curr].handle = hCurr; + h[hCurr].node = curr; + break + } + n[curr].handle = hChild; + h[hChild].node = curr; + curr = child + } +}; +libtess.PriorityQHeap.prototype.floatUp_ = function(curr) { + var n = this.nodes_; + var h = this.handles_; + var hCurr = n[curr].handle; + for(;;) { + var parent = curr >> 1; + var hParent = n[parent].handle; + if(parent === 0 || this.leq_(h[hParent].key, h[hCurr].key)) { + n[curr].handle = hCurr; + h[hCurr].node = curr; + break + } + n[curr].handle = hParent; + h[hParent].node = curr; + curr = parent + } +}; +goog.provide("libtess.PriorityQ"); +goog.require("libtess"); +goog.require("libtess.PriorityQHeap"); +libtess.PriorityQ = function(leq) { + this.keys_ = libtess.PriorityQ.prototype.PQKeyRealloc_(null, libtess.PriorityQ.INIT_SIZE_); + this.order_ = null; + this.size_ = 0; + this.max_ = libtess.PriorityQ.INIT_SIZE_; + this.initialized_ = false; + this.leq_ = (leq); + this.heap_ = new libtess.PriorityQHeap(this.leq_) +}; +libtess.PriorityQ.INIT_SIZE_ = 32; +libtess.PriorityQ.prototype.deleteQ = function() { + this.heap_.deleteHeap(); + this.heap_ = null; + this.order_ = null; + this.keys_ = null +}; +libtess.PriorityQ.prototype.init = function() { + this.order_ = []; + for(var i = 0;i < this.size_;i++) { + this.order_[i] = i + } + var comparator = function(keys, leq) { + return function(a, b) { + return leq(keys[a], keys[b]) ? 1 : -1 + } + }(this.keys_, this.leq_); + this.order_.sort(comparator); + this.max_ = this.size_; + this.initialized_ = true; + this.heap_.init(); + if(libtess.DEBUG) { + var p = 0; + var r = p + this.size_ - 1; + for(i = p;i < r;++i) { + libtess.assert(this.leq_(this.keys_[this.order_[i + 1]], this.keys_[this.order_[i]])) + } + } +}; +libtess.PriorityQ.prototype.insert = function(keyNew) { + if(this.initialized_) { + return this.heap_.insert(keyNew) + } + var curr = this.size_; + if(++this.size_ >= this.max_) { + this.max_ *= 2; + this.keys_ = libtess.PriorityQ.prototype.PQKeyRealloc_(this.keys_, this.max_) + } + this.keys_[curr] = keyNew; + return-(curr + 1) +}; +libtess.PriorityQ.prototype.PQKeyRealloc_ = function(oldArray, size) { + var newArray = new Array(size); + var index = 0; + if(oldArray !== null) { + for(;index < oldArray.length;index++) { + newArray[index] = oldArray[index] + } + } + for(;index < size;index++) { + newArray[index] = null + } + return newArray +}; +libtess.PriorityQ.prototype.keyLessThan_ = function(x, y) { + var keyX = this.keys_[x]; + var keyY = this.keys_[y]; + return!this.leq_(keyY, keyX) +}; +libtess.PriorityQ.prototype.keyGreaterThan_ = function(x, y) { + var keyX = this.keys_[x]; + var keyY = this.keys_[y]; + return!this.leq_(keyX, keyY) +}; +libtess.PriorityQ.prototype.extractMin = function() { + if(this.size_ === 0) { + return this.heap_.extractMin() + } + var sortMin = this.keys_[this.order_[this.size_ - 1]]; + if(!this.heap_.isEmpty()) { + var heapMin = this.heap_.minimum(); + if(this.leq_(heapMin, sortMin)) { + return this.heap_.extractMin() + } + } + do { + --this.size_ + }while(this.size_ > 0 && this.keys_[this.order_[this.size_ - 1]] === null); + return sortMin +}; +libtess.PriorityQ.prototype.minimum = function() { + if(this.size_ === 0) { + return this.heap_.minimum() + } + var sortMin = this.keys_[this.order_[this.size_ - 1]]; + if(!this.heap_.isEmpty()) { + var heapMin = this.heap_.minimum(); + if(this.leq_(heapMin, sortMin)) { + return heapMin + } + } + return sortMin +}; +libtess.PriorityQ.prototype.isEmpty = function() { + return this.size_ === 0 && this.heap_.isEmpty() +}; +libtess.PriorityQ.prototype.remove = function(curr) { + if(curr >= 0) { + this.heap_.remove(curr); + return + } + curr = -(curr + 1); + libtess.assert(curr < this.max_ && this.keys_[curr] !== null); + this.keys_[curr] = null; + while(this.size_ > 0 && this.keys_[this.order_[this.size_ - 1]] === null) { + --this.size_ + } +}; +goog.provide("libtess.geom"); +goog.require("libtess"); +libtess.geom.vertEq = function(u, v) { + return u.s === v.s && u.t === v.t +}; +libtess.geom.vertLeq = function(u, v) { + return u.s < v.s || u.s === v.s && u.t <= v.t +}; +libtess.geom.edgeEval = function(u, v, w) { + var gapL, gapR; + libtess.assert(libtess.geom.vertLeq(u, v) && libtess.geom.vertLeq(v, w)); + gapL = v.s - u.s; + gapR = w.s - v.s; + if(gapL + gapR > 0) { + if(gapL < gapR) { + return v.t - u.t + (u.t - w.t) * (gapL / (gapL + gapR)) + }else { + return v.t - w.t + (w.t - u.t) * (gapR / (gapL + gapR)) + } + } + return 0 +}; +libtess.geom.edgeSign = function(u, v, w) { + var gapL, gapR; + libtess.assert(libtess.geom.vertLeq(u, v) && libtess.geom.vertLeq(v, w)); + gapL = v.s - u.s; + gapR = w.s - v.s; + if(gapL + gapR > 0) { + return(v.t - w.t) * gapL + (v.t - u.t) * gapR + } + return 0 +}; +libtess.geom.transLeq = function(u, v) { + return u.t < v.t || u.t === v.t && u.s <= v.s +}; +libtess.geom.transEval = function(u, v, w) { + var gapL, gapR; + libtess.assert(libtess.geom.transLeq(u, v) && libtess.geom.transLeq(v, w)); + gapL = v.t - u.t; + gapR = w.t - v.t; + if(gapL + gapR > 0) { + if(gapL < gapR) { + return v.s - u.s + (u.s - w.s) * (gapL / (gapL + gapR)) + }else { + return v.s - w.s + (w.s - u.s) * (gapR / (gapL + gapR)) + } + } + return 0 +}; +libtess.geom.transSign = function(u, v, w) { + var gapL, gapR; + libtess.assert(libtess.geom.transLeq(u, v) && libtess.geom.transLeq(v, w)); + gapL = v.t - u.t; + gapR = w.t - v.t; + if(gapL + gapR > 0) { + return(v.s - w.s) * gapL + (v.s - u.s) * gapR + } + return 0 +}; +libtess.geom.edgeGoesLeft = function(e) { + return libtess.geom.vertLeq(e.dst(), e.org) +}; +libtess.geom.edgeGoesRight = function(e) { + return libtess.geom.vertLeq(e.org, e.dst()) +}; +libtess.geom.vertL1dist = function(u, v) { + return Math.abs(u.s - v.s) + Math.abs(u.t - v.t) +}; +libtess.geom.vertCCW = function(u, v, w) { + return u.s * (v.t - w.t) + v.s * (w.t - u.t) + w.s * (u.t - v.t) >= 0 +}; +libtess.geom.interpolate_ = function(a, x, b, y) { + a = a < 0 ? 0 : a; + b = b < 0 ? 0 : b; + if(a <= b) { + if(b === 0) { + return(x + y) / 2 + }else { + return x + (y - x) * (a / (a + b)) + } + }else { + return y + (x - y) * (b / (a + b)) + } +}; +libtess.geom.edgeIntersect = function(o1, d1, o2, d2, v) { + var z1, z2; + var tmp; + if(!libtess.geom.vertLeq(o1, d1)) { + tmp = o1; + o1 = d1; + d1 = tmp + } + if(!libtess.geom.vertLeq(o2, d2)) { + tmp = o2; + o2 = d2; + d2 = tmp + } + if(!libtess.geom.vertLeq(o1, o2)) { + tmp = o1; + o1 = o2; + o2 = tmp; + tmp = d1; + d1 = d2; + d2 = tmp + } + if(!libtess.geom.vertLeq(o2, d1)) { + v.s = (o2.s + d1.s) / 2 + }else { + if(libtess.geom.vertLeq(d1, d2)) { + z1 = libtess.geom.edgeEval(o1, o2, d1); + z2 = libtess.geom.edgeEval(o2, d1, d2); + if(z1 + z2 < 0) { + z1 = -z1; + z2 = -z2 + } + v.s = libtess.geom.interpolate_(z1, o2.s, z2, d1.s) + }else { + z1 = libtess.geom.edgeSign(o1, o2, d1); + z2 = -libtess.geom.edgeSign(o1, d2, d1); + if(z1 + z2 < 0) { + z1 = -z1; + z2 = -z2 + } + v.s = libtess.geom.interpolate_(z1, o2.s, z2, d2.s) + } + } + if(!libtess.geom.transLeq(o1, d1)) { + tmp = o1; + o1 = d1; + d1 = tmp + } + if(!libtess.geom.transLeq(o2, d2)) { + tmp = o2; + o2 = d2; + d2 = tmp + } + if(!libtess.geom.transLeq(o1, o2)) { + tmp = o1; + o1 = o2; + o2 = tmp; + tmp = d1; + d1 = d2; + d2 = tmp + } + if(!libtess.geom.transLeq(o2, d1)) { + v.t = (o2.t + d1.t) / 2 + }else { + if(libtess.geom.transLeq(d1, d2)) { + z1 = libtess.geom.transEval(o1, o2, d1); + z2 = libtess.geom.transEval(o2, d1, d2); + if(z1 + z2 < 0) { + z1 = -z1; + z2 = -z2 + } + v.t = libtess.geom.interpolate_(z1, o2.t, z2, d1.t) + }else { + z1 = libtess.geom.transSign(o1, o2, d1); + z2 = -libtess.geom.transSign(o1, d2, d1); + if(z1 + z2 < 0) { + z1 = -z1; + z2 = -z2 + } + v.t = libtess.geom.interpolate_(z1, o2.t, z2, d2.t) + } + } +}; +goog.provide("libtess.sweep"); +goog.require("libtess"); +goog.require("libtess.ActiveRegion"); +goog.require("libtess.Dict"); +goog.require("libtess.GluVertex"); +goog.require("libtess.PriorityQ"); +goog.require("libtess.geom"); +goog.require("libtess.mesh"); +libtess.sweep.SENTINEL_COORD_ = 4 * libtess.GLU_TESS_MAX_COORD; +libtess.sweep.TOLERANCE_NONZERO_ = false; +libtess.sweep.computeInterior = function(tess) { + tess.fatalError = false; + libtess.sweep.removeDegenerateEdges_(tess); + libtess.sweep.initPriorityQ_(tess); + libtess.sweep.initEdgeDict_(tess); + var v; + while((v = (tess.pq.extractMin())) !== null) { + for(;;) { + var vNext = (tess.pq.minimum()); + if(vNext === null || !libtess.geom.vertEq(vNext, v)) { + break + } + vNext = (tess.pq.extractMin()); + libtess.sweep.spliceMergeVertices_(tess, v.anEdge, vNext.anEdge) + } + libtess.sweep.sweepEvent_(tess, v) + } + var tmpReg = (tess.dict.getMin().getKey()); + tess.event = tmpReg.eUp.org; + libtess.sweepDebugEvent(tess); + libtess.sweep.doneEdgeDict_(tess); + libtess.sweep.donePriorityQ_(tess); + libtess.sweep.removeDegenerateFaces_(tess.mesh); + tess.mesh.checkMesh() +}; +libtess.sweep.addWinding_ = function(eDst, eSrc) { + eDst.winding += eSrc.winding; + eDst.sym.winding += eSrc.sym.winding +}; +libtess.sweep.edgeLeq_ = function(tess, reg1, reg2) { + var event = tess.event; + var e1 = reg1.eUp; + var e2 = reg2.eUp; + if(e1.dst() === event) { + if(e2.dst() === event) { + if(libtess.geom.vertLeq(e1.org, e2.org)) { + return libtess.geom.edgeSign(e2.dst(), e1.org, e2.org) <= 0 + } + return libtess.geom.edgeSign(e1.dst(), e2.org, e1.org) >= 0 + } + return libtess.geom.edgeSign(e2.dst(), event, e2.org) <= 0 + } + if(e2.dst() === event) { + return libtess.geom.edgeSign(e1.dst(), event, e1.org) >= 0 + } + var t1 = libtess.geom.edgeEval(e1.dst(), event, e1.org); + var t2 = libtess.geom.edgeEval(e2.dst(), event, e2.org); + return t1 >= t2 +}; +libtess.sweep.deleteRegion_ = function(tess, reg) { + if(reg.fixUpperEdge) { + libtess.assert(reg.eUp.winding === 0) + } + reg.eUp.activeRegion = null; + tess.dict.deleteNode(reg.nodeUp); + reg.nodeUp = null +}; +libtess.sweep.fixUpperEdge_ = function(reg, newEdge) { + libtess.assert(reg.fixUpperEdge); + libtess.mesh.deleteEdge(reg.eUp); + reg.fixUpperEdge = false; + reg.eUp = newEdge; + newEdge.activeRegion = reg +}; +libtess.sweep.topLeftRegion_ = function(reg) { + var org = reg.eUp.org; + do { + reg = reg.regionAbove() + }while(reg.eUp.org === org); + if(reg.fixUpperEdge) { + var e = libtess.mesh.connect(reg.regionBelow().eUp.sym, reg.eUp.lNext); + libtess.sweep.fixUpperEdge_(reg, e); + reg = reg.regionAbove() + } + return reg +}; +libtess.sweep.topRightRegion_ = function(reg) { + var dst = reg.eUp.dst(); + do { + reg = reg.regionAbove() + }while(reg.eUp.dst() === dst); + return reg +}; +libtess.sweep.addRegionBelow_ = function(tess, regAbove, eNewUp) { + var regNew = new libtess.ActiveRegion; + regNew.eUp = eNewUp; + regNew.nodeUp = tess.dict.insertBefore(regAbove.nodeUp, regNew); + eNewUp.activeRegion = regNew; + return regNew +}; +libtess.sweep.isWindingInside_ = function(tess, n) { + switch(tess.windingRule) { + case libtess.windingRule.GLU_TESS_WINDING_ODD: + return(n & 1) !== 0; + case libtess.windingRule.GLU_TESS_WINDING_NONZERO: + return n !== 0; + case libtess.windingRule.GLU_TESS_WINDING_POSITIVE: + return n > 0; + case libtess.windingRule.GLU_TESS_WINDING_NEGATIVE: + return n < 0; + case libtess.windingRule.GLU_TESS_WINDING_ABS_GEQ_TWO: + return n >= 2 || n <= -2 + } + libtess.assert(false); + return false +}; +libtess.sweep.computeWinding_ = function(tess, reg) { + reg.windingNumber = reg.regionAbove().windingNumber + reg.eUp.winding; + reg.inside = libtess.sweep.isWindingInside_(tess, reg.windingNumber) +}; +libtess.sweep.finishRegion_ = function(tess, reg) { + var e = reg.eUp; + var f = e.lFace; + f.inside = reg.inside; + f.anEdge = e; + libtess.sweep.deleteRegion_(tess, reg) +}; +libtess.sweep.finishLeftRegions_ = function(tess, regFirst, regLast) { + var regPrev = regFirst; + var ePrev = regFirst.eUp; + while(regPrev !== regLast) { + regPrev.fixUpperEdge = false; + var reg = regPrev.regionBelow(); + var e = reg.eUp; + if(e.org !== ePrev.org) { + if(!reg.fixUpperEdge) { + libtess.sweep.finishRegion_(tess, regPrev); + break + } + e = libtess.mesh.connect(ePrev.lPrev(), e.sym); + libtess.sweep.fixUpperEdge_(reg, e) + } + if(ePrev.oNext !== e) { + libtess.mesh.meshSplice(e.oPrev(), e); + libtess.mesh.meshSplice(ePrev, e) + } + libtess.sweep.finishRegion_(tess, regPrev); + ePrev = reg.eUp; + regPrev = reg + } + return ePrev +}; +libtess.sweep.addRightEdges_ = function(tess, regUp, eFirst, eLast, eTopLeft, cleanUp) { + var firstTime = true; + var e = eFirst; + do { + libtess.assert(libtess.geom.vertLeq(e.org, e.dst())); + libtess.sweep.addRegionBelow_(tess, regUp, e.sym); + e = e.oNext + }while(e !== eLast); + if(eTopLeft === null) { + eTopLeft = regUp.regionBelow().eUp.rPrev() + } + var regPrev = regUp; + var ePrev = eTopLeft; + var reg; + for(;;) { + reg = regPrev.regionBelow(); + e = reg.eUp.sym; + if(e.org !== ePrev.org) { + break + } + if(e.oNext !== ePrev) { + libtess.mesh.meshSplice(e.oPrev(), e); + libtess.mesh.meshSplice(ePrev.oPrev(), e) + } + reg.windingNumber = regPrev.windingNumber - e.winding; + reg.inside = libtess.sweep.isWindingInside_(tess, reg.windingNumber); + regPrev.dirty = true; + if(!firstTime && libtess.sweep.checkForRightSplice_(tess, regPrev)) { + libtess.sweep.addWinding_(e, ePrev); + libtess.sweep.deleteRegion_(tess, regPrev); + libtess.mesh.deleteEdge(ePrev) + } + firstTime = false; + regPrev = reg; + ePrev = e + } + regPrev.dirty = true; + libtess.assert(regPrev.windingNumber - e.winding === reg.windingNumber); + if(cleanUp) { + libtess.sweep.walkDirtyRegions_(tess, regPrev) + } +}; +libtess.sweep.callCombine_ = function(tess, isect, data, weights, needed) { + var coords = [isect.coords[0], isect.coords[1], isect.coords[2]]; + isect.data = null; + isect.data = tess.callCombineOrCombineData(coords, data, weights); + if(isect.data === null) { + if(!needed) { + isect.data = data[0] + }else { + if(!tess.fatalError) { + tess.callErrorOrErrorData(libtess.errorType.GLU_TESS_NEED_COMBINE_CALLBACK); + tess.fatalError = true + } + } + } +}; +libtess.sweep.spliceMergeVertices_ = function(tess, e1, e2) { + var data = [null, null, null, null]; + var weights = [0.5, 0.5, 0, 0]; + data[0] = e1.org.data; + data[1] = e2.org.data; + libtess.sweep.callCombine_(tess, e1.org, data, weights, false); + libtess.mesh.meshSplice(e1, e2) +}; +libtess.sweep.vertexWeights_ = function(isect, org, dst, weights, weightIndex) { + var t1 = libtess.geom.vertL1dist(org, isect); + var t2 = libtess.geom.vertL1dist(dst, isect); + var i0 = weightIndex; + var i1 = weightIndex + 1; + weights[i0] = 0.5 * t2 / (t1 + t2); + weights[i1] = 0.5 * t1 / (t1 + t2); + isect.coords[0] += weights[i0] * org.coords[0] + weights[i1] * dst.coords[0]; + isect.coords[1] += weights[i0] * org.coords[1] + weights[i1] * dst.coords[1]; + isect.coords[2] += weights[i0] * org.coords[2] + weights[i1] * dst.coords[2] +}; +libtess.sweep.getIntersectData_ = function(tess, isect, orgUp, dstUp, orgLo, dstLo) { + var weights = [0, 0, 0, 0]; + var data = [orgUp.data, dstUp.data, orgLo.data, dstLo.data]; + isect.coords[0] = isect.coords[1] = isect.coords[2] = 0; + libtess.sweep.vertexWeights_(isect, orgUp, dstUp, weights, 0); + libtess.sweep.vertexWeights_(isect, orgLo, dstLo, weights, 2); + libtess.sweep.callCombine_(tess, isect, data, weights, true) +}; +libtess.sweep.checkForRightSplice_ = function(tess, regUp) { + var regLo = regUp.regionBelow(); + var eUp = regUp.eUp; + var eLo = regLo.eUp; + if(libtess.geom.vertLeq(eUp.org, eLo.org)) { + if(libtess.geom.edgeSign(eLo.dst(), eUp.org, eLo.org) > 0) { + return false + } + if(!libtess.geom.vertEq(eUp.org, eLo.org)) { + libtess.mesh.splitEdge(eLo.sym); + libtess.mesh.meshSplice(eUp, eLo.oPrev()); + regUp.dirty = regLo.dirty = true + }else { + if(eUp.org !== eLo.org) { + tess.pq.remove((eUp.org.pqHandle)); + libtess.sweep.spliceMergeVertices_(tess, eLo.oPrev(), eUp) + } + } + }else { + if(libtess.geom.edgeSign(eUp.dst(), eLo.org, eUp.org) < 0) { + return false + } + regUp.regionAbove().dirty = regUp.dirty = true; + libtess.mesh.splitEdge(eUp.sym); + libtess.mesh.meshSplice(eLo.oPrev(), eUp) + } + return true +}; +libtess.sweep.checkForLeftSplice_ = function(tess, regUp) { + var regLo = regUp.regionBelow(); + var eUp = regUp.eUp; + var eLo = regLo.eUp; + var e; + libtess.assert(!libtess.geom.vertEq(eUp.dst(), eLo.dst())); + if(libtess.geom.vertLeq(eUp.dst(), eLo.dst())) { + if(libtess.geom.edgeSign(eUp.dst(), eLo.dst(), eUp.org) < 0) { + return false + } + regUp.regionAbove().dirty = regUp.dirty = true; + e = libtess.mesh.splitEdge(eUp); + libtess.mesh.meshSplice(eLo.sym, e); + e.lFace.inside = regUp.inside + }else { + if(libtess.geom.edgeSign(eLo.dst(), eUp.dst(), eLo.org) > 0) { + return false + } + regUp.dirty = regLo.dirty = true; + e = libtess.mesh.splitEdge(eLo); + libtess.mesh.meshSplice(eUp.lNext, eLo.sym); + e.rFace().inside = regUp.inside + } + return true +}; +libtess.sweep.checkForIntersect_ = function(tess, regUp) { + var regLo = regUp.regionBelow(); + var eUp = regUp.eUp; + var eLo = regLo.eUp; + var orgUp = eUp.org; + var orgLo = eLo.org; + var dstUp = eUp.dst(); + var dstLo = eLo.dst(); + var isect = new libtess.GluVertex; + libtess.assert(!libtess.geom.vertEq(dstLo, dstUp)); + libtess.assert(libtess.geom.edgeSign(dstUp, tess.event, orgUp) <= 0); + libtess.assert(libtess.geom.edgeSign(dstLo, tess.event, orgLo) >= 0); + libtess.assert(orgUp !== tess.event && orgLo !== tess.event); + libtess.assert(!regUp.fixUpperEdge && !regLo.fixUpperEdge); + if(orgUp === orgLo) { + return false + } + var tMinUp = Math.min(orgUp.t, dstUp.t); + var tMaxLo = Math.max(orgLo.t, dstLo.t); + if(tMinUp > tMaxLo) { + return false + } + if(libtess.geom.vertLeq(orgUp, orgLo)) { + if(libtess.geom.edgeSign(dstLo, orgUp, orgLo) > 0) { + return false + } + }else { + if(libtess.geom.edgeSign(dstUp, orgLo, orgUp) < 0) { + return false + } + } + libtess.sweepDebugEvent(tess); + libtess.geom.edgeIntersect(dstUp, orgUp, dstLo, orgLo, isect); + libtess.assert(Math.min(orgUp.t, dstUp.t) <= isect.t); + libtess.assert(isect.t <= Math.max(orgLo.t, dstLo.t)); + libtess.assert(Math.min(dstLo.s, dstUp.s) <= isect.s); + libtess.assert(isect.s <= Math.max(orgLo.s, orgUp.s)); + if(libtess.geom.vertLeq(isect, tess.event)) { + isect.s = tess.event.s; + isect.t = tess.event.t + } + var orgMin = libtess.geom.vertLeq(orgUp, orgLo) ? orgUp : orgLo; + if(libtess.geom.vertLeq(orgMin, isect)) { + isect.s = orgMin.s; + isect.t = orgMin.t + } + if(libtess.geom.vertEq(isect, orgUp) || libtess.geom.vertEq(isect, orgLo)) { + libtess.sweep.checkForRightSplice_(tess, regUp); + return false + } + if(!libtess.geom.vertEq(dstUp, tess.event) && libtess.geom.edgeSign(dstUp, tess.event, isect) >= 0 || !libtess.geom.vertEq(dstLo, tess.event) && libtess.geom.edgeSign(dstLo, tess.event, isect) <= 0) { + if(dstLo === tess.event) { + libtess.mesh.splitEdge(eUp.sym); + libtess.mesh.meshSplice(eLo.sym, eUp); + regUp = libtess.sweep.topLeftRegion_(regUp); + eUp = regUp.regionBelow().eUp; + libtess.sweep.finishLeftRegions_(tess, regUp.regionBelow(), regLo); + libtess.sweep.addRightEdges_(tess, regUp, eUp.oPrev(), eUp, eUp, true); + return true + } + if(dstUp === tess.event) { + libtess.mesh.splitEdge(eLo.sym); + libtess.mesh.meshSplice(eUp.lNext, eLo.oPrev()); + regLo = regUp; + regUp = libtess.sweep.topRightRegion_(regUp); + var e = regUp.regionBelow().eUp.rPrev(); + regLo.eUp = eLo.oPrev(); + eLo = libtess.sweep.finishLeftRegions_(tess, regLo, null); + libtess.sweep.addRightEdges_(tess, regUp, eLo.oNext, eUp.rPrev(), e, true); + return true + } + if(libtess.geom.edgeSign(dstUp, tess.event, isect) >= 0) { + regUp.regionAbove().dirty = regUp.dirty = true; + libtess.mesh.splitEdge(eUp.sym); + eUp.org.s = tess.event.s; + eUp.org.t = tess.event.t + } + if(libtess.geom.edgeSign(dstLo, tess.event, isect) <= 0) { + regUp.dirty = regLo.dirty = true; + libtess.mesh.splitEdge(eLo.sym); + eLo.org.s = tess.event.s; + eLo.org.t = tess.event.t + } + return false + } + libtess.mesh.splitEdge(eUp.sym); + libtess.mesh.splitEdge(eLo.sym); + libtess.mesh.meshSplice(eLo.oPrev(), eUp); + eUp.org.s = isect.s; + eUp.org.t = isect.t; + eUp.org.pqHandle = tess.pq.insert(eUp.org); + libtess.sweep.getIntersectData_(tess, eUp.org, orgUp, dstUp, orgLo, dstLo); + regUp.regionAbove().dirty = regUp.dirty = regLo.dirty = true; + return false +}; +libtess.sweep.walkDirtyRegions_ = function(tess, regUp) { + var regLo = regUp.regionBelow(); + for(;;) { + while(regLo.dirty) { + regUp = regLo; + regLo = regLo.regionBelow() + } + if(!regUp.dirty) { + regLo = regUp; + regUp = regUp.regionAbove(); + if(regUp === null || !regUp.dirty) { + return + } + } + regUp.dirty = false; + var eUp = regUp.eUp; + var eLo = regLo.eUp; + if(eUp.dst() !== eLo.dst()) { + if(libtess.sweep.checkForLeftSplice_(tess, regUp)) { + if(regLo.fixUpperEdge) { + libtess.sweep.deleteRegion_(tess, regLo); + libtess.mesh.deleteEdge(eLo); + regLo = regUp.regionBelow(); + eLo = regLo.eUp + }else { + if(regUp.fixUpperEdge) { + libtess.sweep.deleteRegion_(tess, regUp); + libtess.mesh.deleteEdge(eUp); + regUp = regLo.regionAbove(); + eUp = regUp.eUp + } + } + } + } + if(eUp.org !== eLo.org) { + if(eUp.dst() !== eLo.dst() && !regUp.fixUpperEdge && !regLo.fixUpperEdge && (eUp.dst() === tess.event || eLo.dst() === tess.event)) { + if(libtess.sweep.checkForIntersect_(tess, regUp)) { + return + } + }else { + libtess.sweep.checkForRightSplice_(tess, regUp) + } + } + if(eUp.org === eLo.org && eUp.dst() === eLo.dst()) { + libtess.sweep.addWinding_(eLo, eUp); + libtess.sweep.deleteRegion_(tess, regUp); + libtess.mesh.deleteEdge(eUp); + regUp = regLo.regionAbove() + } + } +}; +libtess.sweep.connectRightVertex_ = function(tess, regUp, eBottomLeft) { + var eTopLeft = eBottomLeft.oNext; + var regLo = regUp.regionBelow(); + var eUp = regUp.eUp; + var eLo = regLo.eUp; + var degenerate = false; + if(eUp.dst() !== eLo.dst()) { + libtess.sweep.checkForIntersect_(tess, regUp) + } + if(libtess.geom.vertEq(eUp.org, tess.event)) { + libtess.mesh.meshSplice(eTopLeft.oPrev(), eUp); + regUp = libtess.sweep.topLeftRegion_(regUp); + eTopLeft = regUp.regionBelow().eUp; + libtess.sweep.finishLeftRegions_(tess, regUp.regionBelow(), regLo); + degenerate = true + } + if(libtess.geom.vertEq(eLo.org, tess.event)) { + libtess.mesh.meshSplice(eBottomLeft, eLo.oPrev()); + eBottomLeft = libtess.sweep.finishLeftRegions_(tess, regLo, null); + degenerate = true + } + if(degenerate) { + libtess.sweep.addRightEdges_(tess, regUp, eBottomLeft.oNext, eTopLeft, eTopLeft, true); + return + } + var eNew; + if(libtess.geom.vertLeq(eLo.org, eUp.org)) { + eNew = eLo.oPrev() + }else { + eNew = eUp + } + eNew = libtess.mesh.connect(eBottomLeft.lPrev(), eNew); + libtess.sweep.addRightEdges_(tess, regUp, eNew, eNew.oNext, eNew.oNext, false); + eNew.sym.activeRegion.fixUpperEdge = true; + libtess.sweep.walkDirtyRegions_(tess, regUp) +}; +libtess.sweep.connectLeftDegenerate_ = function(tess, regUp, vEvent) { + var e = regUp.eUp; + if(libtess.geom.vertEq(e.org, vEvent)) { + libtess.assert(libtess.sweep.TOLERANCE_NONZERO_); + libtess.sweep.spliceMergeVertices_(tess, e, vEvent.anEdge); + return + } + if(!libtess.geom.vertEq(e.dst(), vEvent)) { + libtess.mesh.splitEdge(e.sym); + if(regUp.fixUpperEdge) { + libtess.mesh.deleteEdge(e.oNext); + regUp.fixUpperEdge = false + } + libtess.mesh.meshSplice(vEvent.anEdge, e); + libtess.sweep.sweepEvent_(tess, vEvent); + return + } + libtess.assert(libtess.sweep.TOLERANCE_NONZERO_); + regUp = libtess.sweep.topRightRegion_(regUp); + var reg = regUp.regionBelow(); + var eTopRight = reg.eUp.sym; + var eTopLeft = eTopRight.oNext; + var eLast = eTopLeft; + if(reg.fixUpperEdge) { + libtess.assert(eTopLeft !== eTopRight); + libtess.sweep.deleteRegion_(tess, reg); + libtess.mesh.deleteEdge(eTopRight); + eTopRight = eTopLeft.oPrev() + } + libtess.mesh.meshSplice(vEvent.anEdge, eTopRight); + if(!libtess.geom.edgeGoesLeft(eTopLeft)) { + eTopLeft = null + } + libtess.sweep.addRightEdges_(tess, regUp, eTopRight.oNext, eLast, eTopLeft, true) +}; +libtess.sweep.connectLeftVertex_ = function(tess, vEvent) { + var tmp = new libtess.ActiveRegion; + tmp.eUp = vEvent.anEdge.sym; + var regUp = (tess.dict.search(tmp).getKey()); + var regLo = regUp.regionBelow(); + var eUp = regUp.eUp; + var eLo = regLo.eUp; + if(libtess.geom.edgeSign(eUp.dst(), vEvent, eUp.org) === 0) { + libtess.sweep.connectLeftDegenerate_(tess, regUp, vEvent); + return + } + var reg = libtess.geom.vertLeq(eLo.dst(), eUp.dst()) ? regUp : regLo; + var eNew; + if(regUp.inside || reg.fixUpperEdge) { + if(reg === regUp) { + eNew = libtess.mesh.connect(vEvent.anEdge.sym, eUp.lNext) + }else { + var tempHalfEdge = libtess.mesh.connect(eLo.dNext(), vEvent.anEdge); + eNew = tempHalfEdge.sym + } + if(reg.fixUpperEdge) { + libtess.sweep.fixUpperEdge_(reg, eNew) + }else { + libtess.sweep.computeWinding_(tess, libtess.sweep.addRegionBelow_(tess, regUp, eNew)) + } + libtess.sweep.sweepEvent_(tess, vEvent) + }else { + libtess.sweep.addRightEdges_(tess, regUp, vEvent.anEdge, vEvent.anEdge, null, true) + } +}; +libtess.sweep.sweepEvent_ = function(tess, vEvent) { + tess.event = vEvent; + libtess.sweepDebugEvent(tess); + var e = vEvent.anEdge; + while(e.activeRegion === null) { + e = e.oNext; + if(e === vEvent.anEdge) { + libtess.sweep.connectLeftVertex_(tess, vEvent); + return + } + } + var regUp = libtess.sweep.topLeftRegion_(e.activeRegion); + var reg = regUp.regionBelow(); + var eTopLeft = reg.eUp; + var eBottomLeft = libtess.sweep.finishLeftRegions_(tess, reg, null); + if(eBottomLeft.oNext === eTopLeft) { + libtess.sweep.connectRightVertex_(tess, regUp, eBottomLeft) + }else { + libtess.sweep.addRightEdges_(tess, regUp, eBottomLeft.oNext, eTopLeft, eTopLeft, true) + } +}; +libtess.sweep.addSentinel_ = function(tess, t) { + var reg = new libtess.ActiveRegion; + var e = libtess.mesh.makeEdge(tess.mesh); + e.org.s = libtess.sweep.SENTINEL_COORD_; + e.org.t = t; + e.dst().s = -libtess.sweep.SENTINEL_COORD_; + e.dst().t = t; + tess.event = e.dst(); + reg.eUp = e; + reg.windingNumber = 0; + reg.inside = false; + reg.fixUpperEdge = false; + reg.sentinel = true; + reg.dirty = false; + reg.nodeUp = tess.dict.insert(reg) +}; +libtess.sweep.initEdgeDict_ = function(tess) { + tess.dict = new libtess.Dict(tess, (libtess.sweep.edgeLeq_)); + libtess.sweep.addSentinel_(tess, -libtess.sweep.SENTINEL_COORD_); + libtess.sweep.addSentinel_(tess, libtess.sweep.SENTINEL_COORD_) +}; +libtess.sweep.doneEdgeDict_ = function(tess) { + var fixedEdges = 0; + var reg; + while((reg = (tess.dict.getMin().getKey())) !== null) { + if(!reg.sentinel) { + libtess.assert(reg.fixUpperEdge); + libtess.assert(++fixedEdges === 1) + } + libtess.assert(reg.windingNumber === 0); + libtess.sweep.deleteRegion_(tess, reg) + } + tess.dict.deleteDict(); + tess.dict = null +}; +libtess.sweep.removeDegenerateEdges_ = function(tess) { + var eHead = tess.mesh.eHead; + var eNext; + for(var e = eHead.next;e !== eHead;e = eNext) { + eNext = e.next; + var eLNext = e.lNext; + if(libtess.geom.vertEq(e.org, e.dst()) && e.lNext.lNext !== e) { + libtess.sweep.spliceMergeVertices_(tess, eLNext, e); + libtess.mesh.deleteEdge(e); + e = eLNext; + eLNext = e.lNext + } + if(eLNext.lNext === e) { + if(eLNext !== e) { + if(eLNext === eNext || eLNext === eNext.sym) { + eNext = eNext.next + } + libtess.mesh.deleteEdge(eLNext) + } + if(e === eNext || e === eNext.sym) { + eNext = eNext.next + } + libtess.mesh.deleteEdge(e) + } + } +}; +libtess.sweep.initPriorityQ_ = function(tess) { + var pq = new libtess.PriorityQ((libtess.geom.vertLeq)); + tess.pq = pq; + var vHead = tess.mesh.vHead; + var v; + for(v = vHead.next;v !== vHead;v = v.next) { + v.pqHandle = pq.insert(v) + } + pq.init() +}; +libtess.sweep.donePriorityQ_ = function(tess) { + tess.pq.deleteQ(); + tess.pq = null +}; +libtess.sweep.removeDegenerateFaces_ = function(mesh) { + var fNext; + for(var f = mesh.fHead.next;f !== mesh.fHead;f = fNext) { + fNext = f.next; + var e = f.anEdge; + libtess.assert(e.lNext !== e); + if(e.lNext.lNext === e) { + libtess.sweep.addWinding_(e.oNext, e); + libtess.mesh.deleteEdge(e) + } + } +}; +goog.provide("libtess.tessmono"); +goog.require("libtess"); +goog.require("libtess.geom"); +goog.require("libtess.mesh"); +libtess.tessmono.tessellateMonoRegion_ = function(face) { + var up = face.anEdge; + libtess.assert(up.lNext !== up && up.lNext.lNext !== up); + for(;libtess.geom.vertLeq(up.dst(), up.org);up = up.lPrev()) { + } + for(;libtess.geom.vertLeq(up.org, up.dst());up = up.lNext) { + } + var lo = up.lPrev(); + var tempHalfEdge; + while(up.lNext !== lo) { + if(libtess.geom.vertLeq(up.dst(), lo.org)) { + while(lo.lNext !== up && (libtess.geom.edgeGoesLeft(lo.lNext) || libtess.geom.edgeSign(lo.org, lo.dst(), lo.lNext.dst()) <= 0)) { + tempHalfEdge = libtess.mesh.connect(lo.lNext, lo); + lo = tempHalfEdge.sym + } + lo = lo.lPrev() + }else { + while(lo.lNext !== up && (libtess.geom.edgeGoesRight(up.lPrev()) || libtess.geom.edgeSign(up.dst(), up.org, up.lPrev().org) >= 0)) { + tempHalfEdge = libtess.mesh.connect(up, up.lPrev()); + up = tempHalfEdge.sym + } + up = up.lNext + } + } + libtess.assert(lo.lNext !== up); + while(lo.lNext.lNext !== up) { + tempHalfEdge = libtess.mesh.connect(lo.lNext, lo); + lo = tempHalfEdge.sym + } +}; +libtess.tessmono.tessellateInterior = function(mesh) { + var next; + for(var f = mesh.fHead.next;f !== mesh.fHead;f = next) { + next = f.next; + if(f.inside) { + libtess.tessmono.tessellateMonoRegion_(f) + } + } +}; +libtess.tessmono.discardExterior = function(mesh) { + var next; + for(var f = mesh.fHead.next;f !== mesh.fHead;f = next) { + next = f.next; + if(!f.inside) { + libtess.mesh.zapFace(f) + } + } +}; +libtess.tessmono.setWindingNumber = function(mesh, value, keepOnlyBoundary) { + var eNext; + for(var e = mesh.eHead.next;e !== mesh.eHead;e = eNext) { + eNext = e.next; + if(e.rFace().inside !== e.lFace.inside) { + e.winding = e.lFace.inside ? value : -value + }else { + if(!keepOnlyBoundary) { + e.winding = 0 + }else { + libtess.mesh.deleteEdge(e) + } + } + } +}; +goog.provide("libtess.GluTesselator"); +goog.require("libtess"); +goog.require("libtess.CachedVertex"); +goog.require("libtess.GluMesh"); +goog.require("libtess.mesh"); +goog.require("libtess.normal"); +goog.require("libtess.render"); +goog.require("libtess.sweep"); +goog.require("libtess.tessmono"); +libtess.GluTesselator = function() { + this.state = libtess.tessState.T_DORMANT; + this.lastEdge_ = null; + this.mesh = null; + this.callError_ = null; + this.normal = [0, 0, 0]; + this.sUnit = [0, 0, 0]; + this.tUnit = [0, 0, 0]; + this.relTolerance = libtess.GLU_TESS_DEFAULT_TOLERANCE; + this.windingRule = libtess.windingRule.GLU_TESS_WINDING_ODD; + this.fatalError = false; + this.dict = null; + this.pq = null; + this.event = null; + this.callCombine_ = null; + this.flagBoundary = false; + this.boundaryOnly = false; + this.lonelyTriList = null; + this.callBegin_ = null; + this.callEdgeFlag_ = null; + this.callVertex_ = null; + this.callEnd_ = null; + this.callMesh_ = null; + this.callBeginData_ = null; + this.callEdgeFlagData_ = null; + this.callVertexData_ = null; + this.callEndData_ = null; + this.callErrorData_ = null; + this.callCombineData_ = null; + this.polygonData_ = null; + this.emptyCache = false; + this.cacheCount = 0; + this.cache = new Array(libtess.TESS_MAX_CACHE); + for(var i = 0;i < libtess.TESS_MAX_CACHE;i++) { + this.cache[i] = new libtess.CachedVertex + } +}; +libtess.GluTesselator.prototype.gluDeleteTess = function() { + this.requireState_(libtess.tessState.T_DORMANT) +}; +libtess.GluTesselator.prototype.gluTessProperty = function(which, value) { + switch(which) { + case libtess.gluEnum.GLU_TESS_TOLERANCE: + if(value < 0 || value > 1) { + break + } + this.relTolerance = (value); + return; + case libtess.gluEnum.GLU_TESS_WINDING_RULE: + var windingRule = (value); + switch(windingRule) { + case libtess.windingRule.GLU_TESS_WINDING_ODD: + ; + case libtess.windingRule.GLU_TESS_WINDING_NONZERO: + ; + case libtess.windingRule.GLU_TESS_WINDING_POSITIVE: + ; + case libtess.windingRule.GLU_TESS_WINDING_NEGATIVE: + ; + case libtess.windingRule.GLU_TESS_WINDING_ABS_GEQ_TWO: + this.windingRule = windingRule; + return; + default: + } + break; + case libtess.gluEnum.GLU_TESS_BOUNDARY_ONLY: + this.boundaryOnly = !!value; + return; + default: + this.callErrorOrErrorData(libtess.gluEnum.GLU_INVALID_ENUM); + return + } + this.callErrorOrErrorData(libtess.gluEnum.GLU_INVALID_VALUE) +}; +libtess.GluTesselator.prototype.gluGetTessProperty = function(which) { + switch(which) { + case libtess.gluEnum.GLU_TESS_TOLERANCE: + libtess.assert(0 <= this.relTolerance && this.relTolerance <= 1); + return this.relTolerance; + case libtess.gluEnum.GLU_TESS_WINDING_RULE: + var rule = this.windingRule; + libtess.assert(rule === libtess.windingRule.GLU_TESS_WINDING_ODD || rule === libtess.windingRule.GLU_TESS_WINDING_NONZERO || rule === libtess.windingRule.GLU_TESS_WINDING_POSITIVE || rule === libtess.windingRule.GLU_TESS_WINDING_NEGATIVE || rule === libtess.windingRule.GLU_TESS_WINDING_ABS_GEQ_TWO); + return rule; + case libtess.gluEnum.GLU_TESS_BOUNDARY_ONLY: + libtess.assert(this.boundaryOnly === true || this.boundaryOnly === false); + return this.boundaryOnly; + default: + this.callErrorOrErrorData(libtess.gluEnum.GLU_INVALID_ENUM); + break + } + return false +}; +libtess.GluTesselator.prototype.gluTessNormal = function(x, y, z) { + this.normal[0] = x; + this.normal[1] = y; + this.normal[2] = z +}; +libtess.GluTesselator.prototype.gluTessCallback = function(which, opt_fn) { + var fn = !opt_fn ? null : opt_fn; + switch(which) { + case libtess.gluEnum.GLU_TESS_BEGIN: + this.callBegin_ = (fn); + return; + case libtess.gluEnum.GLU_TESS_BEGIN_DATA: + this.callBeginData_ = (fn); + return; + case libtess.gluEnum.GLU_TESS_EDGE_FLAG: + this.callEdgeFlag_ = (fn); + this.flagBoundary = !!fn; + return; + case libtess.gluEnum.GLU_TESS_EDGE_FLAG_DATA: + this.callEdgeFlagData_ = (fn); + this.flagBoundary = !!fn; + return; + case libtess.gluEnum.GLU_TESS_VERTEX: + this.callVertex_ = (fn); + return; + case libtess.gluEnum.GLU_TESS_VERTEX_DATA: + this.callVertexData_ = (fn); + return; + case libtess.gluEnum.GLU_TESS_END: + this.callEnd_ = (fn); + return; + case libtess.gluEnum.GLU_TESS_END_DATA: + this.callEndData_ = (fn); + return; + case libtess.gluEnum.GLU_TESS_ERROR: + this.callError_ = (fn); + return; + case libtess.gluEnum.GLU_TESS_ERROR_DATA: + this.callErrorData_ = (fn); + return; + case libtess.gluEnum.GLU_TESS_COMBINE: + this.callCombine_ = (fn); + return; + case libtess.gluEnum.GLU_TESS_COMBINE_DATA: + this.callCombineData_ = (fn); + return; + case libtess.gluEnum.GLU_TESS_MESH: + this.callMesh_ = (fn); + return; + default: + this.callErrorOrErrorData(libtess.gluEnum.GLU_INVALID_ENUM); + return + } +}; +libtess.GluTesselator.prototype.gluTessVertex = function(coords, data) { + var tooLarge = false; + var clamped = [0, 0, 0]; + this.requireState_(libtess.tessState.T_IN_CONTOUR); + if(this.emptyCache) { + this.emptyCache_(); + this.lastEdge_ = null + } + for(var i = 0;i < 3;++i) { + var x = coords[i]; + if(x < -libtess.GLU_TESS_MAX_COORD) { + x = -libtess.GLU_TESS_MAX_COORD; + tooLarge = true + } + if(x > libtess.GLU_TESS_MAX_COORD) { + x = libtess.GLU_TESS_MAX_COORD; + tooLarge = true + } + clamped[i] = x + } + if(tooLarge) { + this.callErrorOrErrorData(libtess.errorType.GLU_TESS_COORD_TOO_LARGE) + } + if(this.mesh === null) { + if(this.cacheCount < libtess.TESS_MAX_CACHE) { + this.cacheVertex_(clamped, data); + return + } + this.emptyCache_() + } + this.addVertex_(clamped, data) +}; +libtess.GluTesselator.prototype.gluTessBeginPolygon = function(data) { + this.requireState_(libtess.tessState.T_DORMANT); + this.state = libtess.tessState.T_IN_POLYGON; + this.cacheCount = 0; + this.emptyCache = false; + this.mesh = null; + this.polygonData_ = data +}; +libtess.GluTesselator.prototype.gluTessBeginContour = function() { + this.requireState_(libtess.tessState.T_IN_POLYGON); + this.state = libtess.tessState.T_IN_CONTOUR; + this.lastEdge_ = null; + if(this.cacheCount > 0) { + this.emptyCache = true + } +}; +libtess.GluTesselator.prototype.gluTessEndContour = function() { + this.requireState_(libtess.tessState.T_IN_CONTOUR); + this.state = libtess.tessState.T_IN_POLYGON +}; +libtess.GluTesselator.prototype.gluTessEndPolygon = function() { + this.requireState_(libtess.tessState.T_IN_POLYGON); + this.state = libtess.tessState.T_DORMANT; + if(this.mesh === null) { + if(!this.flagBoundary && !this.callMesh_) { + if(libtess.render.renderCache(this)) { + this.polygonData_ = null; + return + } + } + this.emptyCache_() + } + libtess.normal.projectPolygon(this); + libtess.sweep.computeInterior(this); + if(!this.fatalError) { + if(this.boundaryOnly) { + libtess.tessmono.setWindingNumber(this.mesh, 1, true) + }else { + libtess.tessmono.tessellateInterior(this.mesh) + } + this.mesh.checkMesh(); + if(this.callBegin_ || this.callEnd_ || this.callVertex_ || this.callEdgeFlag_ || this.callBeginData_ || this.callEndData_ || this.callVertexData_ || this.callEdgeFlagData_) { + if(this.boundaryOnly) { + libtess.render.renderBoundary(this, this.mesh) + }else { + libtess.render.renderMesh(this, this.mesh) + } + } + if(this.callMesh_) { + libtess.tessmono.discardExterior(this.mesh); + this.callMesh_(this.mesh); + this.mesh = null; + this.polygonData_ = null; + return + } + } + libtess.mesh.deleteMesh(this.mesh); + this.polygonData_ = null; + this.mesh = null +}; +libtess.GluTesselator.prototype.makeDormant_ = function() { + if(this.mesh) { + libtess.mesh.deleteMesh(this.mesh) + } + this.state = libtess.tessState.T_DORMANT; + this.lastEdge_ = null; + this.mesh = null +}; +libtess.GluTesselator.prototype.requireState_ = function(state) { + if(this.state !== state) { + this.gotoState_(state) + } +}; +libtess.GluTesselator.prototype.gotoState_ = function(newState) { + while(this.state !== newState) { + if(this.state < newState) { + switch(this.state) { + case libtess.tessState.T_DORMANT: + this.callErrorOrErrorData(libtess.errorType.GLU_TESS_MISSING_BEGIN_POLYGON); + this.gluTessBeginPolygon(null); + break; + case libtess.tessState.T_IN_POLYGON: + this.callErrorOrErrorData(libtess.errorType.GLU_TESS_MISSING_BEGIN_CONTOUR); + this.gluTessBeginContour(); + break + } + }else { + switch(this.state) { + case libtess.tessState.T_IN_CONTOUR: + this.callErrorOrErrorData(libtess.errorType.GLU_TESS_MISSING_END_CONTOUR); + this.gluTessEndContour(); + break; + case libtess.tessState.T_IN_POLYGON: + this.callErrorOrErrorData(libtess.errorType.GLU_TESS_MISSING_END_POLYGON); + this.makeDormant_(); + break + } + } + } +}; +libtess.GluTesselator.prototype.addVertex_ = function(coords, data) { + var e = this.lastEdge_; + if(e === null) { + e = libtess.mesh.makeEdge(this.mesh); + libtess.mesh.meshSplice(e, e.sym) + }else { + libtess.mesh.splitEdge(e); + e = e.lNext + } + e.org.data = data; + e.org.coords[0] = coords[0]; + e.org.coords[1] = coords[1]; + e.org.coords[2] = coords[2]; + e.winding = 1; + e.sym.winding = -1; + this.lastEdge_ = e +}; +libtess.GluTesselator.prototype.cacheVertex_ = function(coords, data) { + var v = this.cache[this.cacheCount]; + v.data = data; + v.coords[0] = coords[0]; + v.coords[1] = coords[1]; + v.coords[2] = coords[2]; + ++this.cacheCount +}; +libtess.GluTesselator.prototype.emptyCache_ = function() { + this.mesh = new libtess.GluMesh; + for(var i = 0;i < this.cacheCount;i++) { + var v = this.cache[i]; + this.addVertex_(v.coords, v.data) + } + this.cacheCount = 0; + this.emptyCache = false +}; +libtess.GluTesselator.prototype.callBeginOrBeginData = function(type) { + if(this.callBeginData_) { + this.callBeginData_(type, this.polygonData_) + }else { + if(this.callBegin_) { + this.callBegin_(type) + } + } +}; +libtess.GluTesselator.prototype.callVertexOrVertexData = function(data) { + if(this.callVertexData_) { + this.callVertexData_(data, this.polygonData_) + }else { + if(this.callVertex_) { + this.callVertex_(data) + } + } +}; +libtess.GluTesselator.prototype.callEdgeFlagOrEdgeFlagData = function(flag) { + if(this.callEdgeFlagData_) { + this.callEdgeFlagData_(flag, this.polygonData_) + }else { + if(this.callEdgeFlag_) { + this.callEdgeFlag_(flag) + } + } +}; +libtess.GluTesselator.prototype.callEndOrEndData = function() { + if(this.callEndData_) { + this.callEndData_(this.polygonData_) + }else { + if(this.callEnd_) { + this.callEnd_() + } + } +}; +libtess.GluTesselator.prototype.callCombineOrCombineData = function(coords, data, weight) { + var interpData; + if(this.callCombineData_) { + interpData = this.callCombineData_(coords, data, weight, this.polygonData_) + }else { + if(this.callCombine_) { + interpData = this.callCombine_(coords, data, weight) + } + } + if(interpData === undefined) { + interpData = null + } + return interpData +}; +libtess.GluTesselator.prototype.callErrorOrErrorData = function(errno) { + if(this.callErrorData_) { + this.callErrorData_(errno, this.polygonData_) + }else { + if(this.callError_) { + this.callError_(errno) + } + } +}; +goog.provide("ol"); +ol.inherits = goog.inherits; +goog.provide("goog.debug.Error"); +goog.debug.Error = function(opt_msg) { + if(Error.captureStackTrace) { + Error.captureStackTrace(this, goog.debug.Error) + }else { + this.stack = (new Error).stack || "" + } + if(opt_msg) { + this.message = String(opt_msg) + } +}; +goog.inherits(goog.debug.Error, Error); +goog.debug.Error.prototype.name = "CustomError"; +goog.provide("goog.string"); +goog.provide("goog.string.Unicode"); +goog.string.Unicode = {NBSP:"\u00a0"}; +goog.string.startsWith = function(str, prefix) { + return str.lastIndexOf(prefix, 0) == 0 +}; +goog.string.endsWith = function(str, suffix) { + var l = str.length - suffix.length; + return l >= 0 && str.indexOf(suffix, l) == l +}; +goog.string.caseInsensitiveStartsWith = function(str, prefix) { + return goog.string.caseInsensitiveCompare(prefix, str.substr(0, prefix.length)) == 0 +}; +goog.string.caseInsensitiveEndsWith = function(str, suffix) { + return goog.string.caseInsensitiveCompare(suffix, str.substr(str.length - suffix.length, suffix.length)) == 0 +}; +goog.string.caseInsensitiveEquals = function(str1, str2) { + return str1.toLowerCase() == str2.toLowerCase() +}; +goog.string.subs = function(str, var_args) { + var splitParts = str.split("%s"); + var returnString = ""; + var subsArguments = Array.prototype.slice.call(arguments, 1); + while(subsArguments.length && splitParts.length > 1) { + returnString += splitParts.shift() + subsArguments.shift() + } + return returnString + splitParts.join("%s") +}; +goog.string.collapseWhitespace = function(str) { + return str.replace(/[\s\xa0]+/g, " ").replace(/^\s+|\s+$/g, "") +}; +goog.string.isEmpty = function(str) { + return/^[\s\xa0]*$/.test(str) +}; +goog.string.isEmptySafe = function(str) { + return goog.string.isEmpty(goog.string.makeSafe(str)) +}; +goog.string.isBreakingWhitespace = function(str) { + return!/[^\t\n\r ]/.test(str) +}; +goog.string.isAlpha = function(str) { + return!/[^a-zA-Z]/.test(str) +}; +goog.string.isNumeric = function(str) { + return!/[^0-9]/.test(str) +}; +goog.string.isAlphaNumeric = function(str) { + return!/[^a-zA-Z0-9]/.test(str) +}; +goog.string.isSpace = function(ch) { + return ch == " " +}; +goog.string.isUnicodeChar = function(ch) { + return ch.length == 1 && ch >= " " && ch <= "~" || ch >= "\u0080" && ch <= "\ufffd" +}; +goog.string.stripNewlines = function(str) { + return str.replace(/(\r\n|\r|\n)+/g, " ") +}; +goog.string.canonicalizeNewlines = function(str) { + return str.replace(/(\r\n|\r|\n)/g, "\n") +}; +goog.string.normalizeWhitespace = function(str) { + return str.replace(/\xa0|\s/g, " ") +}; +goog.string.normalizeSpaces = function(str) { + return str.replace(/\xa0|[ \t]+/g, " ") +}; +goog.string.collapseBreakingSpaces = function(str) { + return str.replace(/[\t\r\n ]+/g, " ").replace(/^[\t\r\n ]+|[\t\r\n ]+$/g, "") +}; +goog.string.trim = function(str) { + return str.replace(/^[\s\xa0]+|[\s\xa0]+$/g, "") +}; +goog.string.trimLeft = function(str) { + return str.replace(/^[\s\xa0]+/, "") +}; +goog.string.trimRight = function(str) { + return str.replace(/[\s\xa0]+$/, "") +}; +goog.string.caseInsensitiveCompare = function(str1, str2) { + var test1 = String(str1).toLowerCase(); + var test2 = String(str2).toLowerCase(); + if(test1 < test2) { + return-1 + }else { + if(test1 == test2) { + return 0 + }else { + return 1 + } + } +}; +goog.string.numerateCompareRegExp_ = /(\.\d+)|(\d+)|(\D+)/g; +goog.string.numerateCompare = function(str1, str2) { + if(str1 == str2) { + return 0 + } + if(!str1) { + return-1 + } + if(!str2) { + return 1 + } + var tokens1 = str1.toLowerCase().match(goog.string.numerateCompareRegExp_); + var tokens2 = str2.toLowerCase().match(goog.string.numerateCompareRegExp_); + var count = Math.min(tokens1.length, tokens2.length); + for(var i = 0;i < count;i++) { + var a = tokens1[i]; + var b = tokens2[i]; + if(a != b) { + var num1 = parseInt(a, 10); + if(!isNaN(num1)) { + var num2 = parseInt(b, 10); + if(!isNaN(num2) && num1 - num2) { + return num1 - num2 + } + } + return a < b ? -1 : 1 + } + } + if(tokens1.length != tokens2.length) { + return tokens1.length - tokens2.length + } + return str1 < str2 ? -1 : 1 +}; +goog.string.urlEncode = function(str) { + return encodeURIComponent(String(str)) +}; +goog.string.urlDecode = function(str) { + return decodeURIComponent(str.replace(/\+/g, " ")) +}; +goog.string.newLineToBr = function(str, opt_xml) { + return str.replace(/(\r\n|\r|\n)/g, opt_xml ? "\x3cbr /\x3e" : "\x3cbr\x3e") +}; +goog.string.htmlEscape = function(str, opt_isLikelyToContainHtmlChars) { + if(opt_isLikelyToContainHtmlChars) { + return str.replace(goog.string.amperRe_, "\x26amp;").replace(goog.string.ltRe_, "\x26lt;").replace(goog.string.gtRe_, "\x26gt;").replace(goog.string.quotRe_, "\x26quot;") + }else { + if(!goog.string.allRe_.test(str)) { + return str + } + if(str.indexOf("\x26") != -1) { + str = str.replace(goog.string.amperRe_, "\x26amp;") + } + if(str.indexOf("\x3c") != -1) { + str = str.replace(goog.string.ltRe_, "\x26lt;") + } + if(str.indexOf("\x3e") != -1) { + str = str.replace(goog.string.gtRe_, "\x26gt;") + } + if(str.indexOf('"') != -1) { + str = str.replace(goog.string.quotRe_, "\x26quot;") + } + return str + } +}; +goog.string.amperRe_ = /&/g; +goog.string.ltRe_ = //g; +goog.string.quotRe_ = /\"/g; +goog.string.allRe_ = /[&<>\"]/; +goog.string.unescapeEntities = function(str) { + if(goog.string.contains(str, "\x26")) { + if("document" in goog.global) { + return goog.string.unescapeEntitiesUsingDom_(str) + }else { + return goog.string.unescapePureXmlEntities_(str) + } + } + return str +}; +goog.string.unescapeEntitiesUsingDom_ = function(str) { + var seen = {"\x26amp;":"\x26", "\x26lt;":"\x3c", "\x26gt;":"\x3e", "\x26quot;":'"'}; + var div = document.createElement("div"); + return str.replace(goog.string.HTML_ENTITY_PATTERN_, function(s, entity) { + var value = seen[s]; + if(value) { + return value + } + if(entity.charAt(0) == "#") { + var n = Number("0" + entity.substr(1)); + if(!isNaN(n)) { + value = String.fromCharCode(n) + } + } + if(!value) { + div.innerHTML = s + " "; + value = div.firstChild.nodeValue.slice(0, -1) + } + return seen[s] = value + }) +}; +goog.string.unescapePureXmlEntities_ = function(str) { + return str.replace(/&([^;]+);/g, function(s, entity) { + switch(entity) { + case "amp": + return"\x26"; + case "lt": + return"\x3c"; + case "gt": + return"\x3e"; + case "quot": + return'"'; + default: + if(entity.charAt(0) == "#") { + var n = Number("0" + entity.substr(1)); + if(!isNaN(n)) { + return String.fromCharCode(n) + } + } + return s + } + }) +}; +goog.string.HTML_ENTITY_PATTERN_ = /&([^;\s<&]+);?/g; +goog.string.whitespaceEscape = function(str, opt_xml) { + return goog.string.newLineToBr(str.replace(/ /g, " \x26#160;"), opt_xml) +}; +goog.string.stripQuotes = function(str, quoteChars) { + var length = quoteChars.length; + for(var i = 0;i < length;i++) { + var quoteChar = length == 1 ? quoteChars : quoteChars.charAt(i); + if(str.charAt(0) == quoteChar && str.charAt(str.length - 1) == quoteChar) { + return str.substring(1, str.length - 1) + } + } + return str +}; +goog.string.truncate = function(str, chars, opt_protectEscapedCharacters) { + if(opt_protectEscapedCharacters) { + str = goog.string.unescapeEntities(str) + } + if(str.length > chars) { + str = str.substring(0, chars - 3) + "..." + } + if(opt_protectEscapedCharacters) { + str = goog.string.htmlEscape(str) + } + return str +}; +goog.string.truncateMiddle = function(str, chars, opt_protectEscapedCharacters, opt_trailingChars) { + if(opt_protectEscapedCharacters) { + str = goog.string.unescapeEntities(str) + } + if(opt_trailingChars && str.length > chars) { + if(opt_trailingChars > chars) { + opt_trailingChars = chars + } + var endPoint = str.length - opt_trailingChars; + var startPoint = chars - opt_trailingChars; + str = str.substring(0, startPoint) + "..." + str.substring(endPoint) + }else { + if(str.length > chars) { + var half = Math.floor(chars / 2); + var endPos = str.length - half; + half += chars % 2; + str = str.substring(0, half) + "..." + str.substring(endPos) + } + } + if(opt_protectEscapedCharacters) { + str = goog.string.htmlEscape(str) + } + return str +}; +goog.string.specialEscapeChars_ = {"\x00":"\\0", "\b":"\\b", "\f":"\\f", "\n":"\\n", "\r":"\\r", "\t":"\\t", "\x0B":"\\x0B", '"':'\\"', "\\":"\\\\"}; +goog.string.jsEscapeCache_ = {"'":"\\'"}; +goog.string.quote = function(s) { + s = String(s); + if(s.quote) { + return s.quote() + }else { + var sb = ['"']; + for(var i = 0;i < s.length;i++) { + var ch = s.charAt(i); + var cc = ch.charCodeAt(0); + sb[i + 1] = goog.string.specialEscapeChars_[ch] || (cc > 31 && cc < 127 ? ch : goog.string.escapeChar(ch)) + } + sb.push('"'); + return sb.join("") + } +}; +goog.string.escapeString = function(str) { + var sb = []; + for(var i = 0;i < str.length;i++) { + sb[i] = goog.string.escapeChar(str.charAt(i)) + } + return sb.join("") +}; +goog.string.escapeChar = function(c) { + if(c in goog.string.jsEscapeCache_) { + return goog.string.jsEscapeCache_[c] + } + if(c in goog.string.specialEscapeChars_) { + return goog.string.jsEscapeCache_[c] = goog.string.specialEscapeChars_[c] + } + var rv = c; + var cc = c.charCodeAt(0); + if(cc > 31 && cc < 127) { + rv = c + }else { + if(cc < 256) { + rv = "\\x"; + if(cc < 16 || cc > 256) { + rv += "0" + } + }else { + rv = "\\u"; + if(cc < 4096) { + rv += "0" + } + } + rv += cc.toString(16).toUpperCase() + } + return goog.string.jsEscapeCache_[c] = rv +}; +goog.string.toMap = function(s) { + var rv = {}; + for(var i = 0;i < s.length;i++) { + rv[s.charAt(i)] = true + } + return rv +}; +goog.string.contains = function(s, ss) { + return s.indexOf(ss) != -1 +}; +goog.string.countOf = function(s, ss) { + return s && ss ? s.split(ss).length - 1 : 0 +}; +goog.string.removeAt = function(s, index, stringLength) { + var resultStr = s; + if(index >= 0 && index < s.length && stringLength > 0) { + resultStr = s.substr(0, index) + s.substr(index + stringLength, s.length - index - stringLength) + } + return resultStr +}; +goog.string.remove = function(s, ss) { + var re = new RegExp(goog.string.regExpEscape(ss), ""); + return s.replace(re, "") +}; +goog.string.removeAll = function(s, ss) { + var re = new RegExp(goog.string.regExpEscape(ss), "g"); + return s.replace(re, "") +}; +goog.string.regExpEscape = function(s) { + return String(s).replace(/([-()\[\]{}+?*.$\^|,:# right) { + return 1 + } + } + return 0 +}; +goog.string.HASHCODE_MAX_ = 4294967296; +goog.string.hashCode = function(str) { + var result = 0; + for(var i = 0;i < str.length;++i) { + result = 31 * result + str.charCodeAt(i); + result %= goog.string.HASHCODE_MAX_ + } + return result +}; +goog.string.uniqueStringCounter_ = Math.random() * 2147483648 | 0; +goog.string.createUniqueString = function() { + return"goog_" + goog.string.uniqueStringCounter_++ +}; +goog.string.toNumber = function(str) { + var num = Number(str); + if(num == 0 && goog.string.isEmpty(str)) { + return NaN + } + return num +}; +goog.string.isLowerCamelCase = function(str) { + return/^[a-z]+([A-Z][a-z]*)*$/.test(str) +}; +goog.string.isUpperCamelCase = function(str) { + return/^([A-Z][a-z]*)+$/.test(str) +}; +goog.string.toCamelCase = function(str) { + return String(str).replace(/\-([a-z])/g, function(all, match) { + return match.toUpperCase() + }) +}; +goog.string.toSelectorCase = function(str) { + return String(str).replace(/([A-Z])/g, "-$1").toLowerCase() +}; +goog.string.toTitleCase = function(str, opt_delimiters) { + var delimiters = goog.isString(opt_delimiters) ? goog.string.regExpEscape(opt_delimiters) : "\\s"; + delimiters = delimiters ? "|[" + delimiters + "]+" : ""; + var regexp = new RegExp("(^" + delimiters + ")([a-z])", "g"); + return str.replace(regexp, function(all, p1, p2) { + return p1 + p2.toUpperCase() + }) +}; +goog.string.parseInt = function(value) { + if(isFinite(value)) { + value = String(value) + } + if(goog.isString(value)) { + return/^\s*-?0x/i.test(value) ? parseInt(value, 16) : parseInt(value, 10) + } + return NaN +}; +goog.string.splitLimit = function(str, separator, limit) { + var parts = str.split(separator); + var returnVal = []; + while(limit > 0 && parts.length) { + returnVal.push(parts.shift()); + limit-- + } + if(parts.length) { + returnVal.push(parts.join(separator)) + } + return returnVal +}; +goog.provide("goog.asserts"); +goog.provide("goog.asserts.AssertionError"); +goog.require("goog.debug.Error"); +goog.require("goog.string"); +goog.define("goog.asserts.ENABLE_ASSERTS", goog.DEBUG); +goog.asserts.AssertionError = function(messagePattern, messageArgs) { + messageArgs.unshift(messagePattern); + goog.debug.Error.call(this, goog.string.subs.apply(null, messageArgs)); + messageArgs.shift(); + this.messagePattern = messagePattern +}; +goog.inherits(goog.asserts.AssertionError, goog.debug.Error); +goog.asserts.AssertionError.prototype.name = "AssertionError"; +goog.asserts.doAssertFailure_ = function(defaultMessage, defaultArgs, givenMessage, givenArgs) { + var message = "Assertion failed"; + if(givenMessage) { + message += ": " + givenMessage; + var args = givenArgs + }else { + if(defaultMessage) { + message += ": " + defaultMessage; + args = defaultArgs + } + } + throw new goog.asserts.AssertionError("" + message, args || []); +}; +goog.asserts.assert = function(condition, opt_message, var_args) { + if(goog.asserts.ENABLE_ASSERTS && !condition) { + goog.asserts.doAssertFailure_("", null, opt_message, Array.prototype.slice.call(arguments, 2)) + } + return condition +}; +goog.asserts.fail = function(opt_message, var_args) { + if(goog.asserts.ENABLE_ASSERTS) { + throw new goog.asserts.AssertionError("Failure" + (opt_message ? ": " + opt_message : ""), Array.prototype.slice.call(arguments, 1)); + } +}; +goog.asserts.assertNumber = function(value, opt_message, var_args) { + if(goog.asserts.ENABLE_ASSERTS && !goog.isNumber(value)) { + goog.asserts.doAssertFailure_("Expected number but got %s: %s.", [goog.typeOf(value), value], opt_message, Array.prototype.slice.call(arguments, 2)) + } + return(value) +}; +goog.asserts.assertString = function(value, opt_message, var_args) { + if(goog.asserts.ENABLE_ASSERTS && !goog.isString(value)) { + goog.asserts.doAssertFailure_("Expected string but got %s: %s.", [goog.typeOf(value), value], opt_message, Array.prototype.slice.call(arguments, 2)) + } + return(value) +}; +goog.asserts.assertFunction = function(value, opt_message, var_args) { + if(goog.asserts.ENABLE_ASSERTS && !goog.isFunction(value)) { + goog.asserts.doAssertFailure_("Expected function but got %s: %s.", [goog.typeOf(value), value], opt_message, Array.prototype.slice.call(arguments, 2)) + } + return(value) +}; +goog.asserts.assertObject = function(value, opt_message, var_args) { + if(goog.asserts.ENABLE_ASSERTS && !goog.isObject(value)) { + goog.asserts.doAssertFailure_("Expected object but got %s: %s.", [goog.typeOf(value), value], opt_message, Array.prototype.slice.call(arguments, 2)) + } + return(value) +}; +goog.asserts.assertArray = function(value, opt_message, var_args) { + if(goog.asserts.ENABLE_ASSERTS && !goog.isArray(value)) { + goog.asserts.doAssertFailure_("Expected array but got %s: %s.", [goog.typeOf(value), value], opt_message, Array.prototype.slice.call(arguments, 2)) + } + return(value) +}; +goog.asserts.assertBoolean = function(value, opt_message, var_args) { + if(goog.asserts.ENABLE_ASSERTS && !goog.isBoolean(value)) { + goog.asserts.doAssertFailure_("Expected boolean but got %s: %s.", [goog.typeOf(value), value], opt_message, Array.prototype.slice.call(arguments, 2)) + } + return(value) +}; +goog.asserts.assertInstanceof = function(value, type, opt_message, var_args) { + if(goog.asserts.ENABLE_ASSERTS && !(value instanceof type)) { + goog.asserts.doAssertFailure_("instanceof check failed.", null, opt_message, Array.prototype.slice.call(arguments, 3)) + } + return value +}; +goog.asserts.assertObjectPrototypeIsIntact = function() { + for(var key in Object.prototype) { + goog.asserts.fail(key + " should not be enumerable in Object.prototype.") + } +}; +goog.provide("ol.Size"); +goog.provide("ol.size"); +ol.Size; +ol.size.equals = function(a, b) { + return a[0] == b[0] && a[1] == b[1] +}; +goog.provide("goog.array"); +goog.provide("goog.array.ArrayLike"); +goog.require("goog.asserts"); +goog.define("goog.NATIVE_ARRAY_PROTOTYPES", goog.TRUSTED_SITE); +goog.array.ArrayLike; +goog.array.peek = function(array) { + return array[array.length - 1] +}; +goog.array.ARRAY_PROTOTYPE_ = Array.prototype; +goog.array.indexOf = goog.NATIVE_ARRAY_PROTOTYPES && goog.array.ARRAY_PROTOTYPE_.indexOf ? function(arr, obj, opt_fromIndex) { + goog.asserts.assert(arr.length != null); + return goog.array.ARRAY_PROTOTYPE_.indexOf.call(arr, obj, opt_fromIndex) +} : function(arr, obj, opt_fromIndex) { + var fromIndex = opt_fromIndex == null ? 0 : opt_fromIndex < 0 ? Math.max(0, arr.length + opt_fromIndex) : opt_fromIndex; + if(goog.isString(arr)) { + if(!goog.isString(obj) || obj.length != 1) { + return-1 + } + return arr.indexOf(obj, fromIndex) + } + for(var i = fromIndex;i < arr.length;i++) { + if(i in arr && arr[i] === obj) { + return i + } + } + return-1 +}; +goog.array.lastIndexOf = goog.NATIVE_ARRAY_PROTOTYPES && goog.array.ARRAY_PROTOTYPE_.lastIndexOf ? function(arr, obj, opt_fromIndex) { + goog.asserts.assert(arr.length != null); + var fromIndex = opt_fromIndex == null ? arr.length - 1 : opt_fromIndex; + return goog.array.ARRAY_PROTOTYPE_.lastIndexOf.call(arr, obj, fromIndex) +} : function(arr, obj, opt_fromIndex) { + var fromIndex = opt_fromIndex == null ? arr.length - 1 : opt_fromIndex; + if(fromIndex < 0) { + fromIndex = Math.max(0, arr.length + fromIndex) + } + if(goog.isString(arr)) { + if(!goog.isString(obj) || obj.length != 1) { + return-1 + } + return arr.lastIndexOf(obj, fromIndex) + } + for(var i = fromIndex;i >= 0;i--) { + if(i in arr && arr[i] === obj) { + return i + } + } + return-1 +}; +goog.array.forEach = goog.NATIVE_ARRAY_PROTOTYPES && goog.array.ARRAY_PROTOTYPE_.forEach ? function(arr, f, opt_obj) { + goog.asserts.assert(arr.length != null); + goog.array.ARRAY_PROTOTYPE_.forEach.call(arr, f, opt_obj) +} : function(arr, f, opt_obj) { + var l = arr.length; + var arr2 = goog.isString(arr) ? arr.split("") : arr; + for(var i = 0;i < l;i++) { + if(i in arr2) { + f.call(opt_obj, arr2[i], i, arr) + } + } +}; +goog.array.forEachRight = function(arr, f, opt_obj) { + var l = arr.length; + var arr2 = goog.isString(arr) ? arr.split("") : arr; + for(var i = l - 1;i >= 0;--i) { + if(i in arr2) { + f.call(opt_obj, arr2[i], i, arr) + } + } +}; +goog.array.filter = goog.NATIVE_ARRAY_PROTOTYPES && goog.array.ARRAY_PROTOTYPE_.filter ? function(arr, f, opt_obj) { + goog.asserts.assert(arr.length != null); + return goog.array.ARRAY_PROTOTYPE_.filter.call(arr, f, opt_obj) +} : function(arr, f, opt_obj) { + var l = arr.length; + var res = []; + var resLength = 0; + var arr2 = goog.isString(arr) ? arr.split("") : arr; + for(var i = 0;i < l;i++) { + if(i in arr2) { + var val = arr2[i]; + if(f.call(opt_obj, val, i, arr)) { + res[resLength++] = val + } + } + } + return res +}; +goog.array.map = goog.NATIVE_ARRAY_PROTOTYPES && goog.array.ARRAY_PROTOTYPE_.map ? function(arr, f, opt_obj) { + goog.asserts.assert(arr.length != null); + return goog.array.ARRAY_PROTOTYPE_.map.call(arr, f, opt_obj) +} : function(arr, f, opt_obj) { + var l = arr.length; + var res = new Array(l); + var arr2 = goog.isString(arr) ? arr.split("") : arr; + for(var i = 0;i < l;i++) { + if(i in arr2) { + res[i] = f.call(opt_obj, arr2[i], i, arr) + } + } + return res +}; +goog.array.reduce = function(arr, f, val, opt_obj) { + if(arr.reduce) { + if(opt_obj) { + return arr.reduce(goog.bind(f, opt_obj), val) + }else { + return arr.reduce(f, val) + } + } + var rval = val; + goog.array.forEach(arr, function(val, index) { + rval = f.call(opt_obj, rval, val, index, arr) + }); + return rval +}; +goog.array.reduceRight = function(arr, f, val, opt_obj) { + if(arr.reduceRight) { + if(opt_obj) { + return arr.reduceRight(goog.bind(f, opt_obj), val) + }else { + return arr.reduceRight(f, val) + } + } + var rval = val; + goog.array.forEachRight(arr, function(val, index) { + rval = f.call(opt_obj, rval, val, index, arr) + }); + return rval +}; +goog.array.some = goog.NATIVE_ARRAY_PROTOTYPES && goog.array.ARRAY_PROTOTYPE_.some ? function(arr, f, opt_obj) { + goog.asserts.assert(arr.length != null); + return goog.array.ARRAY_PROTOTYPE_.some.call(arr, f, opt_obj) +} : function(arr, f, opt_obj) { + var l = arr.length; + var arr2 = goog.isString(arr) ? arr.split("") : arr; + for(var i = 0;i < l;i++) { + if(i in arr2 && f.call(opt_obj, arr2[i], i, arr)) { + return true + } + } + return false +}; +goog.array.every = goog.NATIVE_ARRAY_PROTOTYPES && goog.array.ARRAY_PROTOTYPE_.every ? function(arr, f, opt_obj) { + goog.asserts.assert(arr.length != null); + return goog.array.ARRAY_PROTOTYPE_.every.call(arr, f, opt_obj) +} : function(arr, f, opt_obj) { + var l = arr.length; + var arr2 = goog.isString(arr) ? arr.split("") : arr; + for(var i = 0;i < l;i++) { + if(i in arr2 && !f.call(opt_obj, arr2[i], i, arr)) { + return false + } + } + return true +}; +goog.array.count = function(arr, f, opt_obj) { + var count = 0; + goog.array.forEach(arr, function(element, index, arr) { + if(f.call(opt_obj, element, index, arr)) { + ++count + } + }, opt_obj); + return count +}; +goog.array.find = function(arr, f, opt_obj) { + var i = goog.array.findIndex(arr, f, opt_obj); + return i < 0 ? null : goog.isString(arr) ? arr.charAt(i) : arr[i] +}; +goog.array.findIndex = function(arr, f, opt_obj) { + var l = arr.length; + var arr2 = goog.isString(arr) ? arr.split("") : arr; + for(var i = 0;i < l;i++) { + if(i in arr2 && f.call(opt_obj, arr2[i], i, arr)) { + return i + } + } + return-1 +}; +goog.array.findRight = function(arr, f, opt_obj) { + var i = goog.array.findIndexRight(arr, f, opt_obj); + return i < 0 ? null : goog.isString(arr) ? arr.charAt(i) : arr[i] +}; +goog.array.findIndexRight = function(arr, f, opt_obj) { + var l = arr.length; + var arr2 = goog.isString(arr) ? arr.split("") : arr; + for(var i = l - 1;i >= 0;i--) { + if(i in arr2 && f.call(opt_obj, arr2[i], i, arr)) { + return i + } + } + return-1 +}; +goog.array.contains = function(arr, obj) { + return goog.array.indexOf(arr, obj) >= 0 +}; +goog.array.isEmpty = function(arr) { + return arr.length == 0 +}; +goog.array.clear = function(arr) { + if(!goog.isArray(arr)) { + for(var i = arr.length - 1;i >= 0;i--) { + delete arr[i] + } + } + arr.length = 0 +}; +goog.array.insert = function(arr, obj) { + if(!goog.array.contains(arr, obj)) { + arr.push(obj) + } +}; +goog.array.insertAt = function(arr, obj, opt_i) { + goog.array.splice(arr, opt_i, 0, obj) +}; +goog.array.insertArrayAt = function(arr, elementsToAdd, opt_i) { + goog.partial(goog.array.splice, arr, opt_i, 0).apply(null, elementsToAdd) +}; +goog.array.insertBefore = function(arr, obj, opt_obj2) { + var i; + if(arguments.length == 2 || (i = goog.array.indexOf(arr, opt_obj2)) < 0) { + arr.push(obj) + }else { + goog.array.insertAt(arr, obj, i) + } +}; +goog.array.remove = function(arr, obj) { + var i = goog.array.indexOf(arr, obj); + var rv; + if(rv = i >= 0) { + goog.array.removeAt(arr, i) + } + return rv +}; +goog.array.removeAt = function(arr, i) { + goog.asserts.assert(arr.length != null); + return goog.array.ARRAY_PROTOTYPE_.splice.call(arr, i, 1).length == 1 +}; +goog.array.removeIf = function(arr, f, opt_obj) { + var i = goog.array.findIndex(arr, f, opt_obj); + if(i >= 0) { + goog.array.removeAt(arr, i); + return true + } + return false +}; +goog.array.concat = function(var_args) { + return goog.array.ARRAY_PROTOTYPE_.concat.apply(goog.array.ARRAY_PROTOTYPE_, arguments) +}; +goog.array.toArray = function(object) { + var length = object.length; + if(length > 0) { + var rv = new Array(length); + for(var i = 0;i < length;i++) { + rv[i] = object[i] + } + return rv + } + return[] +}; +goog.array.clone = goog.array.toArray; +goog.array.extend = function(arr1, var_args) { + for(var i = 1;i < arguments.length;i++) { + var arr2 = arguments[i]; + var isArrayLike; + if(goog.isArray(arr2) || (isArrayLike = goog.isArrayLike(arr2)) && Object.prototype.hasOwnProperty.call(arr2, "callee")) { + arr1.push.apply(arr1, arr2) + }else { + if(isArrayLike) { + var len1 = arr1.length; + var len2 = arr2.length; + for(var j = 0;j < len2;j++) { + arr1[len1 + j] = arr2[j] + } + }else { + arr1.push(arr2) + } + } + } +}; +goog.array.splice = function(arr, index, howMany, var_args) { + goog.asserts.assert(arr.length != null); + return goog.array.ARRAY_PROTOTYPE_.splice.apply(arr, goog.array.slice(arguments, 1)) +}; +goog.array.slice = function(arr, start, opt_end) { + goog.asserts.assert(arr.length != null); + if(arguments.length <= 2) { + return goog.array.ARRAY_PROTOTYPE_.slice.call(arr, start) + }else { + return goog.array.ARRAY_PROTOTYPE_.slice.call(arr, start, opt_end) + } +}; +goog.array.removeDuplicates = function(arr, opt_rv) { + var returnArray = opt_rv || arr; + var seen = {}, cursorInsert = 0, cursorRead = 0; + while(cursorRead < arr.length) { + var current = arr[cursorRead++]; + var key = goog.isObject(current) ? "o" + goog.getUid(current) : (typeof current).charAt(0) + current; + if(!Object.prototype.hasOwnProperty.call(seen, key)) { + seen[key] = true; + returnArray[cursorInsert++] = current + } + } + returnArray.length = cursorInsert +}; +goog.array.binarySearch = function(arr, target, opt_compareFn) { + return goog.array.binarySearch_(arr, opt_compareFn || goog.array.defaultCompare, false, target) +}; +goog.array.binarySelect = function(arr, evaluator, opt_obj) { + return goog.array.binarySearch_(arr, evaluator, true, undefined, opt_obj) +}; +goog.array.binarySearch_ = function(arr, compareFn, isEvaluator, opt_target, opt_selfObj) { + var left = 0; + var right = arr.length; + var found; + while(left < right) { + var middle = left + right >> 1; + var compareResult; + if(isEvaluator) { + compareResult = compareFn.call(opt_selfObj, arr[middle], middle, arr) + }else { + compareResult = compareFn(opt_target, arr[middle]) + } + if(compareResult > 0) { + left = middle + 1 + }else { + right = middle; + found = !compareResult + } + } + return found ? left : ~left +}; +goog.array.sort = function(arr, opt_compareFn) { + goog.asserts.assert(arr.length != null); + goog.array.ARRAY_PROTOTYPE_.sort.call(arr, opt_compareFn || goog.array.defaultCompare) +}; +goog.array.stableSort = function(arr, opt_compareFn) { + for(var i = 0;i < arr.length;i++) { + arr[i] = {index:i, value:arr[i]} + } + var valueCompareFn = opt_compareFn || goog.array.defaultCompare; + function stableCompareFn(obj1, obj2) { + return valueCompareFn(obj1.value, obj2.value) || obj1.index - obj2.index + } + goog.array.sort(arr, stableCompareFn); + for(var i = 0;i < arr.length;i++) { + arr[i] = arr[i].value + } +}; +goog.array.sortObjectsByKey = function(arr, key, opt_compareFn) { + var compare = opt_compareFn || goog.array.defaultCompare; + goog.array.sort(arr, function(a, b) { + return compare(a[key], b[key]) + }) +}; +goog.array.isSorted = function(arr, opt_compareFn, opt_strict) { + var compare = opt_compareFn || goog.array.defaultCompare; + for(var i = 1;i < arr.length;i++) { + var compareResult = compare(arr[i - 1], arr[i]); + if(compareResult > 0 || compareResult == 0 && opt_strict) { + return false + } + } + return true +}; +goog.array.equals = function(arr1, arr2, opt_equalsFn) { + if(!goog.isArrayLike(arr1) || !goog.isArrayLike(arr2) || arr1.length != arr2.length) { + return false + } + var l = arr1.length; + var equalsFn = opt_equalsFn || goog.array.defaultCompareEquality; + for(var i = 0;i < l;i++) { + if(!equalsFn(arr1[i], arr2[i])) { + return false + } + } + return true +}; +goog.array.compare = function(arr1, arr2, opt_equalsFn) { + return goog.array.equals(arr1, arr2, opt_equalsFn) +}; +goog.array.compare3 = function(arr1, arr2, opt_compareFn) { + var compare = opt_compareFn || goog.array.defaultCompare; + var l = Math.min(arr1.length, arr2.length); + for(var i = 0;i < l;i++) { + var result = compare(arr1[i], arr2[i]); + if(result != 0) { + return result + } + } + return goog.array.defaultCompare(arr1.length, arr2.length) +}; +goog.array.defaultCompare = function(a, b) { + return a > b ? 1 : a < b ? -1 : 0 +}; +goog.array.defaultCompareEquality = function(a, b) { + return a === b +}; +goog.array.binaryInsert = function(array, value, opt_compareFn) { + var index = goog.array.binarySearch(array, value, opt_compareFn); + if(index < 0) { + goog.array.insertAt(array, value, -(index + 1)); + return true + } + return false +}; +goog.array.binaryRemove = function(array, value, opt_compareFn) { + var index = goog.array.binarySearch(array, value, opt_compareFn); + return index >= 0 ? goog.array.removeAt(array, index) : false +}; +goog.array.bucket = function(array, sorter, opt_obj) { + var buckets = {}; + for(var i = 0;i < array.length;i++) { + var value = array[i]; + var key = sorter.call(opt_obj, value, i, array); + if(goog.isDef(key)) { + var bucket = buckets[key] || (buckets[key] = []); + bucket.push(value) + } + } + return buckets +}; +goog.array.toObject = function(arr, keyFunc, opt_obj) { + var ret = {}; + goog.array.forEach(arr, function(element, index) { + ret[keyFunc.call(opt_obj, element, index, arr)] = element + }); + return ret +}; +goog.array.range = function(startOrEnd, opt_end, opt_step) { + var array = []; + var start = 0; + var end = startOrEnd; + var step = opt_step || 1; + if(opt_end !== undefined) { + start = startOrEnd; + end = opt_end + } + if(step * (end - start) < 0) { + return[] + } + if(step > 0) { + for(var i = start;i < end;i += step) { + array.push(i) + } + }else { + for(var i = start;i > end;i += step) { + array.push(i) + } + } + return array +}; +goog.array.repeat = function(value, n) { + var array = []; + for(var i = 0;i < n;i++) { + array[i] = value + } + return array +}; +goog.array.flatten = function(var_args) { + var result = []; + for(var i = 0;i < arguments.length;i++) { + var element = arguments[i]; + if(goog.isArray(element)) { + result.push.apply(result, goog.array.flatten.apply(null, element)) + }else { + result.push(element) + } + } + return result +}; +goog.array.rotate = function(array, n) { + goog.asserts.assert(array.length != null); + if(array.length) { + n %= array.length; + if(n > 0) { + goog.array.ARRAY_PROTOTYPE_.unshift.apply(array, array.splice(-n, n)) + }else { + if(n < 0) { + goog.array.ARRAY_PROTOTYPE_.push.apply(array, array.splice(0, -n)) + } + } + } + return array +}; +goog.array.moveItem = function(arr, fromIndex, toIndex) { + goog.asserts.assert(fromIndex >= 0 && fromIndex < arr.length); + goog.asserts.assert(toIndex >= 0 && toIndex < arr.length); + var removedItems = goog.array.ARRAY_PROTOTYPE_.splice.call(arr, fromIndex, 1); + goog.array.ARRAY_PROTOTYPE_.splice.call(arr, toIndex, 0, removedItems[0]) +}; +goog.array.zip = function(var_args) { + if(!arguments.length) { + return[] + } + var result = []; + for(var i = 0;true;i++) { + var value = []; + for(var j = 0;j < arguments.length;j++) { + var arr = arguments[j]; + if(i >= arr.length) { + return result + } + value.push(arr[i]) + } + result.push(value) + } +}; +goog.array.shuffle = function(arr, opt_randFn) { + var randFn = opt_randFn || Math.random; + for(var i = arr.length - 1;i > 0;i--) { + var j = Math.floor(randFn() * (i + 1)); + var tmp = arr[i]; + arr[i] = arr[j]; + arr[j] = tmp + } +}; +goog.provide("ol.TileCoord"); +goog.require("goog.array"); +goog.require("goog.asserts"); +ol.QuadKeyCharCode = {ZERO:"0".charCodeAt(0), ONE:"1".charCodeAt(0), TWO:"2".charCodeAt(0), THREE:"3".charCodeAt(0)}; +ol.TileCoord = function(z, x, y) { + this.z = z; + this.x = x; + this.y = y +}; +ol.TileCoord.createFromQuadKey = function(quadKey) { + var z = quadKey.length, x = 0, y = 0; + var mask = 1 << z - 1; + var i; + for(i = 0;i < z;++i) { + switch(quadKey.charCodeAt(i)) { + case ol.QuadKeyCharCode.ONE: + x += mask; + break; + case ol.QuadKeyCharCode.TWO: + y += mask; + break; + case ol.QuadKeyCharCode.THREE: + x += mask; + y += mask; + break + } + mask >>= 1 + } + return new ol.TileCoord(z, x, y) +}; +ol.TileCoord.createFromString = function(str) { + var v = str.split("/"); + v = goog.array.map(v, function(e, i, a) { + return parseInt(e, 10) + }); + return new ol.TileCoord(v[0], v[1], v[2]) +}; +ol.TileCoord.createOrUpdate = function(z, x, y, tileCoord) { + if(goog.isDef(tileCoord)) { + tileCoord.z = z; + tileCoord.x = x; + tileCoord.y = y; + return tileCoord + }else { + return new ol.TileCoord(z, x, y) + } +}; +ol.TileCoord.getKeyZXY = function(z, x, y) { + return z + "/" + x + "/" + y +}; +ol.TileCoord.prototype.getZXY = function(opt_result) { + if(goog.isDef(opt_result)) { + goog.asserts.assert(opt_result.length == 3); + opt_result[0] = this.z; + opt_result[1] = this.x; + opt_result[2] = this.y; + return opt_result + }else { + return[this.z, this.x, this.y] + } +}; +ol.TileCoord.prototype.hash = function() { + return(this.x << this.z) + this.y +}; +ol.TileCoord.prototype.quadKey = function() { + var digits = new Array(this.z); + var mask = 1 << this.z - 1; + var i, charCode; + for(i = 0;i < this.z;++i) { + charCode = ol.QuadKeyCharCode.ZERO; + if(this.x & mask) { + charCode += 1 + } + if(this.y & mask) { + charCode += 2 + } + digits[i] = String.fromCharCode(charCode); + mask >>= 1 + } + return digits.join("") +}; +ol.TileCoord.prototype.toString = function() { + return ol.TileCoord.getKeyZXY(this.z, this.x, this.y) +}; +goog.provide("ol.TileRange"); +goog.require("goog.asserts"); +goog.require("ol.Size"); +goog.require("ol.TileCoord"); +ol.TileRange = function(minX, maxX, minY, maxY) { + this.minX = minX; + this.maxX = maxX; + this.minY = minY; + this.maxY = maxY +}; +ol.TileRange.boundingTileRange = function(var_args) { + var tileCoord0 = (arguments[0]); + var tileRange = new ol.TileRange(tileCoord0.x, tileCoord0.x, tileCoord0.y, tileCoord0.y); + var i, ii, tileCoord; + for(i = 1, ii = arguments.length;i < ii;++i) { + tileCoord = (arguments[i]); + goog.asserts.assert(tileCoord.z == tileCoord0.z); + tileRange.minX = Math.min(tileRange.minX, tileCoord.x); + tileRange.maxX = Math.max(tileRange.maxX, tileCoord.x); + tileRange.minY = Math.min(tileRange.minY, tileCoord.y); + tileRange.maxY = Math.max(tileRange.maxY, tileCoord.y) + } + return tileRange +}; +ol.TileRange.createOrUpdate = function(minX, maxX, minY, maxY, tileRange) { + if(goog.isDef(tileRange)) { + tileRange.minX = minX; + tileRange.maxX = maxX; + tileRange.minY = minY; + tileRange.maxY = maxY; + return tileRange + }else { + return new ol.TileRange(minX, maxX, minY, maxY) + } +}; +ol.TileRange.prototype.contains = function(tileCoord) { + return this.minX <= tileCoord.x && tileCoord.x <= this.maxX && this.minY <= tileCoord.y && tileCoord.y <= this.maxY +}; +ol.TileRange.prototype.containsTileRange = function(tileRange) { + return this.minX <= tileRange.minX && tileRange.maxX <= this.maxX && this.minY <= tileRange.minY && tileRange.maxY <= this.maxY +}; +ol.TileRange.prototype.equals = function(tileRange) { + return this.minX == tileRange.minX && this.minY == tileRange.minY && this.maxX == tileRange.maxX && this.maxY == tileRange.maxY +}; +ol.TileRange.prototype.extend = function(tileRange) { + if(tileRange.minX < this.minX) { + this.minX = tileRange.minX + } + if(tileRange.maxX > this.maxX) { + this.maxX = tileRange.maxX + } + if(tileRange.minY < this.minY) { + this.minY = tileRange.minY + } + if(tileRange.maxY > this.maxY) { + this.maxY = tileRange.maxY + } +}; +ol.TileRange.prototype.getHeight = function() { + return this.maxY - this.minY + 1 +}; +ol.TileRange.prototype.getSize = function() { + return[this.getWidth(), this.getHeight()] +}; +ol.TileRange.prototype.getWidth = function() { + return this.maxX - this.minX + 1 +}; +ol.TileRange.prototype.intersects = function(tileRange) { + return this.minX <= tileRange.maxX && this.maxX >= tileRange.minX && this.minY <= tileRange.maxY && this.maxY >= tileRange.minY +}; +goog.provide("ol.Attribution"); +goog.require("ol.TileRange"); +ol.Attribution = function(options) { + this.html_ = options.html; + this.tileRanges_ = goog.isDef(options.tileRanges) ? options.tileRanges : null +}; +ol.Attribution.prototype.getHTML = function() { + return this.html_ +}; +ol.Attribution.prototype.intersectsAnyTileRange = function(tileRanges) { + if(goog.isNull(this.tileRanges_)) { + return true + } + var i, ii, tileRange, z; + for(z in tileRanges) { + if(!(z in this.tileRanges_)) { + continue + } + tileRange = tileRanges[z]; + for(i = 0, ii = this.tileRanges_[z].length;i < ii;++i) { + if(this.tileRanges_[z][i].intersects(tileRange)) { + return true + } + } + } + return false +}; +goog.provide("goog.userAgent"); +goog.require("goog.string"); +goog.define("goog.userAgent.ASSUME_IE", false); +goog.define("goog.userAgent.ASSUME_GECKO", false); +goog.define("goog.userAgent.ASSUME_WEBKIT", false); +goog.define("goog.userAgent.ASSUME_MOBILE_WEBKIT", false); +goog.define("goog.userAgent.ASSUME_OPERA", false); +goog.define("goog.userAgent.ASSUME_ANY_VERSION", false); +goog.userAgent.BROWSER_KNOWN_ = goog.userAgent.ASSUME_IE || goog.userAgent.ASSUME_GECKO || goog.userAgent.ASSUME_MOBILE_WEBKIT || goog.userAgent.ASSUME_WEBKIT || goog.userAgent.ASSUME_OPERA; +goog.userAgent.getUserAgentString = function() { + return goog.global["navigator"] ? goog.global["navigator"].userAgent : null +}; +goog.userAgent.getNavigator = function() { + return goog.global["navigator"] +}; +goog.userAgent.init_ = function() { + goog.userAgent.detectedOpera_ = false; + goog.userAgent.detectedIe_ = false; + goog.userAgent.detectedWebkit_ = false; + goog.userAgent.detectedMobile_ = false; + goog.userAgent.detectedGecko_ = false; + var ua; + if(!goog.userAgent.BROWSER_KNOWN_ && (ua = goog.userAgent.getUserAgentString())) { + var navigator = goog.userAgent.getNavigator(); + goog.userAgent.detectedOpera_ = goog.string.startsWith(ua, "Opera"); + goog.userAgent.detectedIe_ = !goog.userAgent.detectedOpera_ && (goog.string.contains(ua, "MSIE") || goog.string.contains(ua, "Trident")); + goog.userAgent.detectedWebkit_ = !goog.userAgent.detectedOpera_ && goog.string.contains(ua, "WebKit"); + goog.userAgent.detectedMobile_ = goog.userAgent.detectedWebkit_ && goog.string.contains(ua, "Mobile"); + goog.userAgent.detectedGecko_ = !goog.userAgent.detectedOpera_ && !goog.userAgent.detectedWebkit_ && !goog.userAgent.detectedIe_ && navigator.product == "Gecko" + } +}; +if(!goog.userAgent.BROWSER_KNOWN_) { + goog.userAgent.init_() +} +goog.userAgent.OPERA = goog.userAgent.BROWSER_KNOWN_ ? goog.userAgent.ASSUME_OPERA : goog.userAgent.detectedOpera_; +goog.userAgent.IE = goog.userAgent.BROWSER_KNOWN_ ? goog.userAgent.ASSUME_IE : goog.userAgent.detectedIe_; +goog.userAgent.GECKO = goog.userAgent.BROWSER_KNOWN_ ? goog.userAgent.ASSUME_GECKO : goog.userAgent.detectedGecko_; +goog.userAgent.WEBKIT = goog.userAgent.BROWSER_KNOWN_ ? goog.userAgent.ASSUME_WEBKIT || goog.userAgent.ASSUME_MOBILE_WEBKIT : goog.userAgent.detectedWebkit_; +goog.userAgent.MOBILE = goog.userAgent.ASSUME_MOBILE_WEBKIT || goog.userAgent.detectedMobile_; +goog.userAgent.SAFARI = goog.userAgent.WEBKIT; +goog.userAgent.determinePlatform_ = function() { + var navigator = goog.userAgent.getNavigator(); + return navigator && navigator.platform || "" +}; +goog.userAgent.PLATFORM = goog.userAgent.determinePlatform_(); +goog.define("goog.userAgent.ASSUME_MAC", false); +goog.define("goog.userAgent.ASSUME_WINDOWS", false); +goog.define("goog.userAgent.ASSUME_LINUX", false); +goog.define("goog.userAgent.ASSUME_X11", false); +goog.define("goog.userAgent.ASSUME_ANDROID", false); +goog.define("goog.userAgent.ASSUME_IPHONE", false); +goog.define("goog.userAgent.ASSUME_IPAD", false); +goog.userAgent.PLATFORM_KNOWN_ = goog.userAgent.ASSUME_MAC || goog.userAgent.ASSUME_WINDOWS || goog.userAgent.ASSUME_LINUX || goog.userAgent.ASSUME_X11 || goog.userAgent.ASSUME_ANDROID || goog.userAgent.ASSUME_IPHONE || goog.userAgent.ASSUME_IPAD; +goog.userAgent.initPlatform_ = function() { + goog.userAgent.detectedMac_ = goog.string.contains(goog.userAgent.PLATFORM, "Mac"); + goog.userAgent.detectedWindows_ = goog.string.contains(goog.userAgent.PLATFORM, "Win"); + goog.userAgent.detectedLinux_ = goog.string.contains(goog.userAgent.PLATFORM, "Linux"); + goog.userAgent.detectedX11_ = !!goog.userAgent.getNavigator() && goog.string.contains(goog.userAgent.getNavigator()["appVersion"] || "", "X11"); + var ua = goog.userAgent.getUserAgentString(); + goog.userAgent.detectedAndroid_ = !!ua && goog.string.contains(ua, "Android"); + goog.userAgent.detectedIPhone_ = !!ua && goog.string.contains(ua, "iPhone"); + goog.userAgent.detectedIPad_ = !!ua && goog.string.contains(ua, "iPad") +}; +if(!goog.userAgent.PLATFORM_KNOWN_) { + goog.userAgent.initPlatform_() +} +goog.userAgent.MAC = goog.userAgent.PLATFORM_KNOWN_ ? goog.userAgent.ASSUME_MAC : goog.userAgent.detectedMac_; +goog.userAgent.WINDOWS = goog.userAgent.PLATFORM_KNOWN_ ? goog.userAgent.ASSUME_WINDOWS : goog.userAgent.detectedWindows_; +goog.userAgent.LINUX = goog.userAgent.PLATFORM_KNOWN_ ? goog.userAgent.ASSUME_LINUX : goog.userAgent.detectedLinux_; +goog.userAgent.X11 = goog.userAgent.PLATFORM_KNOWN_ ? goog.userAgent.ASSUME_X11 : goog.userAgent.detectedX11_; +goog.userAgent.ANDROID = goog.userAgent.PLATFORM_KNOWN_ ? goog.userAgent.ASSUME_ANDROID : goog.userAgent.detectedAndroid_; +goog.userAgent.IPHONE = goog.userAgent.PLATFORM_KNOWN_ ? goog.userAgent.ASSUME_IPHONE : goog.userAgent.detectedIPhone_; +goog.userAgent.IPAD = goog.userAgent.PLATFORM_KNOWN_ ? goog.userAgent.ASSUME_IPAD : goog.userAgent.detectedIPad_; +goog.userAgent.determineVersion_ = function() { + var version = "", re; + if(goog.userAgent.OPERA && goog.global["opera"]) { + var operaVersion = goog.global["opera"].version; + version = typeof operaVersion == "function" ? operaVersion() : operaVersion + }else { + if(goog.userAgent.GECKO) { + re = /rv\:([^\);]+)(\)|;)/ + }else { + if(goog.userAgent.IE) { + re = /\b(?:MSIE|rv)\s+([^\);]+)(\)|;)/ + }else { + if(goog.userAgent.WEBKIT) { + re = /WebKit\/(\S+)/ + } + } + } + if(re) { + var arr = re.exec(goog.userAgent.getUserAgentString()); + version = arr ? arr[1] : "" + } + } + if(goog.userAgent.IE) { + var docMode = goog.userAgent.getDocumentMode_(); + if(docMode > parseFloat(version)) { + return String(docMode) + } + } + return version +}; +goog.userAgent.getDocumentMode_ = function() { + var doc = goog.global["document"]; + return doc ? doc["documentMode"] : undefined +}; +goog.userAgent.VERSION = goog.userAgent.determineVersion_(); +goog.userAgent.compare = function(v1, v2) { + return goog.string.compareVersions(v1, v2) +}; +goog.userAgent.isVersionOrHigherCache_ = {}; +goog.userAgent.isVersionOrHigher = function(version) { + return goog.userAgent.ASSUME_ANY_VERSION || goog.userAgent.isVersionOrHigherCache_[version] || (goog.userAgent.isVersionOrHigherCache_[version] = goog.string.compareVersions(goog.userAgent.VERSION, version) >= 0) +}; +goog.userAgent.isVersion = goog.userAgent.isVersionOrHigher; +goog.userAgent.isDocumentModeOrHigher = function(documentMode) { + return goog.userAgent.IE && goog.userAgent.DOCUMENT_MODE >= documentMode +}; +goog.userAgent.isDocumentMode = goog.userAgent.isDocumentModeOrHigher; +goog.userAgent.DOCUMENT_MODE = function() { + var doc = goog.global["document"]; + if(!doc || !goog.userAgent.IE) { + return undefined + } + var mode = goog.userAgent.getDocumentMode_(); + return mode || (doc["compatMode"] == "CSS1Compat" ? parseInt(goog.userAgent.VERSION, 10) : 5) +}(); +goog.provide("goog.dom.BrowserFeature"); +goog.require("goog.userAgent"); +goog.dom.BrowserFeature = {CAN_ADD_NAME_OR_TYPE_ATTRIBUTES:!goog.userAgent.IE || goog.userAgent.isDocumentModeOrHigher(9), CAN_USE_CHILDREN_ATTRIBUTE:!goog.userAgent.GECKO && !goog.userAgent.IE || goog.userAgent.IE && goog.userAgent.isDocumentModeOrHigher(9) || goog.userAgent.GECKO && goog.userAgent.isVersionOrHigher("1.9.1"), CAN_USE_INNER_TEXT:goog.userAgent.IE && !goog.userAgent.isVersionOrHigher("9"), CAN_USE_PARENT_ELEMENT_PROPERTY:goog.userAgent.IE || goog.userAgent.OPERA || goog.userAgent.WEBKIT, +INNER_HTML_NEEDS_SCOPED_ELEMENT:goog.userAgent.IE}; +goog.provide("goog.dom.TagName"); +goog.dom.TagName = {A:"A", ABBR:"ABBR", ACRONYM:"ACRONYM", ADDRESS:"ADDRESS", APPLET:"APPLET", AREA:"AREA", ARTICLE:"ARTICLE", ASIDE:"ASIDE", AUDIO:"AUDIO", B:"B", BASE:"BASE", BASEFONT:"BASEFONT", BDI:"BDI", BDO:"BDO", BIG:"BIG", BLOCKQUOTE:"BLOCKQUOTE", BODY:"BODY", BR:"BR", BUTTON:"BUTTON", CANVAS:"CANVAS", CAPTION:"CAPTION", CENTER:"CENTER", CITE:"CITE", CODE:"CODE", COL:"COL", COLGROUP:"COLGROUP", COMMAND:"COMMAND", DATA:"DATA", DATALIST:"DATALIST", DD:"DD", DEL:"DEL", DETAILS:"DETAILS", DFN:"DFN", +DIALOG:"DIALOG", DIR:"DIR", DIV:"DIV", DL:"DL", DT:"DT", EM:"EM", EMBED:"EMBED", FIELDSET:"FIELDSET", FIGCAPTION:"FIGCAPTION", FIGURE:"FIGURE", FONT:"FONT", FOOTER:"FOOTER", FORM:"FORM", FRAME:"FRAME", FRAMESET:"FRAMESET", H1:"H1", H2:"H2", H3:"H3", H4:"H4", H5:"H5", H6:"H6", HEAD:"HEAD", HEADER:"HEADER", HGROUP:"HGROUP", HR:"HR", HTML:"HTML", I:"I", IFRAME:"IFRAME", IMG:"IMG", INPUT:"INPUT", INS:"INS", ISINDEX:"ISINDEX", KBD:"KBD", KEYGEN:"KEYGEN", LABEL:"LABEL", LEGEND:"LEGEND", LI:"LI", LINK:"LINK", +MAP:"MAP", MARK:"MARK", MATH:"MATH", MENU:"MENU", META:"META", METER:"METER", NAV:"NAV", NOFRAMES:"NOFRAMES", NOSCRIPT:"NOSCRIPT", OBJECT:"OBJECT", OL:"OL", OPTGROUP:"OPTGROUP", OPTION:"OPTION", OUTPUT:"OUTPUT", P:"P", PARAM:"PARAM", PRE:"PRE", PROGRESS:"PROGRESS", Q:"Q", RP:"RP", RT:"RT", RUBY:"RUBY", S:"S", SAMP:"SAMP", SCRIPT:"SCRIPT", SECTION:"SECTION", SELECT:"SELECT", SMALL:"SMALL", SOURCE:"SOURCE", SPAN:"SPAN", STRIKE:"STRIKE", STRONG:"STRONG", STYLE:"STYLE", SUB:"SUB", SUMMARY:"SUMMARY", +SUP:"SUP", SVG:"SVG", TABLE:"TABLE", TBODY:"TBODY", TD:"TD", TEXTAREA:"TEXTAREA", TFOOT:"TFOOT", TH:"TH", THEAD:"THEAD", TIME:"TIME", TITLE:"TITLE", TR:"TR", TRACK:"TRACK", TT:"TT", U:"U", UL:"UL", VAR:"VAR", VIDEO:"VIDEO", WBR:"WBR"}; +goog.provide("goog.dom.classes"); +goog.require("goog.array"); +goog.dom.classes.set = function(element, className) { + element.className = className +}; +goog.dom.classes.get = function(element) { + var className = element.className; + return goog.isString(className) && className.match(/\S+/g) || [] +}; +goog.dom.classes.add = function(element, var_args) { + var classes = goog.dom.classes.get(element); + var args = goog.array.slice(arguments, 1); + var expectedCount = classes.length + args.length; + goog.dom.classes.add_(classes, args); + goog.dom.classes.set(element, classes.join(" ")); + return classes.length == expectedCount +}; +goog.dom.classes.remove = function(element, var_args) { + var classes = goog.dom.classes.get(element); + var args = goog.array.slice(arguments, 1); + var newClasses = goog.dom.classes.getDifference_(classes, args); + goog.dom.classes.set(element, newClasses.join(" ")); + return newClasses.length == classes.length - args.length +}; +goog.dom.classes.add_ = function(classes, args) { + for(var i = 0;i < args.length;i++) { + if(!goog.array.contains(classes, args[i])) { + classes.push(args[i]) + } + } +}; +goog.dom.classes.getDifference_ = function(arr1, arr2) { + return goog.array.filter(arr1, function(item) { + return!goog.array.contains(arr2, item) + }) +}; +goog.dom.classes.swap = function(element, fromClass, toClass) { + var classes = goog.dom.classes.get(element); + var removed = false; + for(var i = 0;i < classes.length;i++) { + if(classes[i] == fromClass) { + goog.array.splice(classes, i--, 1); + removed = true + } + } + if(removed) { + classes.push(toClass); + goog.dom.classes.set(element, classes.join(" ")) + } + return removed +}; +goog.dom.classes.addRemove = function(element, classesToRemove, classesToAdd) { + var classes = goog.dom.classes.get(element); + if(goog.isString(classesToRemove)) { + goog.array.remove(classes, classesToRemove) + }else { + if(goog.isArray(classesToRemove)) { + classes = goog.dom.classes.getDifference_(classes, classesToRemove) + } + } + if(goog.isString(classesToAdd) && !goog.array.contains(classes, classesToAdd)) { + classes.push(classesToAdd) + }else { + if(goog.isArray(classesToAdd)) { + goog.dom.classes.add_(classes, classesToAdd) + } + } + goog.dom.classes.set(element, classes.join(" ")) +}; +goog.dom.classes.has = function(element, className) { + return goog.array.contains(goog.dom.classes.get(element), className) +}; +goog.dom.classes.enable = function(element, className, enabled) { + if(enabled) { + goog.dom.classes.add(element, className) + }else { + goog.dom.classes.remove(element, className) + } +}; +goog.dom.classes.toggle = function(element, className) { + var add = !goog.dom.classes.has(element, className); + goog.dom.classes.enable(element, className, add); + return add +}; +goog.provide("goog.math"); +goog.require("goog.array"); +goog.require("goog.asserts"); +goog.math.randomInt = function(a) { + return Math.floor(Math.random() * a) +}; +goog.math.uniformRandom = function(a, b) { + return a + Math.random() * (b - a) +}; +goog.math.clamp = function(value, min, max) { + return Math.min(Math.max(value, min), max) +}; +goog.math.modulo = function(a, b) { + var r = a % b; + return r * b < 0 ? r + b : r +}; +goog.math.lerp = function(a, b, x) { + return a + x * (b - a) +}; +goog.math.nearlyEquals = function(a, b, opt_tolerance) { + return Math.abs(a - b) <= (opt_tolerance || 1E-6) +}; +goog.math.standardAngle = function(angle) { + return goog.math.modulo(angle, 360) +}; +goog.math.toRadians = function(angleDegrees) { + return angleDegrees * Math.PI / 180 +}; +goog.math.toDegrees = function(angleRadians) { + return angleRadians * 180 / Math.PI +}; +goog.math.angleDx = function(degrees, radius) { + return radius * Math.cos(goog.math.toRadians(degrees)) +}; +goog.math.angleDy = function(degrees, radius) { + return radius * Math.sin(goog.math.toRadians(degrees)) +}; +goog.math.angle = function(x1, y1, x2, y2) { + return goog.math.standardAngle(goog.math.toDegrees(Math.atan2(y2 - y1, x2 - x1))) +}; +goog.math.angleDifference = function(startAngle, endAngle) { + var d = goog.math.standardAngle(endAngle) - goog.math.standardAngle(startAngle); + if(d > 180) { + d = d - 360 + }else { + if(d <= -180) { + d = 360 + d + } + } + return d +}; +goog.math.sign = function(x) { + return x == 0 ? 0 : x < 0 ? -1 : 1 +}; +goog.math.longestCommonSubsequence = function(array1, array2, opt_compareFn, opt_collectorFn) { + var compare = opt_compareFn || function(a, b) { + return a == b + }; + var collect = opt_collectorFn || function(i1, i2) { + return array1[i1] + }; + var length1 = array1.length; + var length2 = array2.length; + var arr = []; + for(var i = 0;i < length1 + 1;i++) { + arr[i] = []; + arr[i][0] = 0 + } + for(var j = 0;j < length2 + 1;j++) { + arr[0][j] = 0 + } + for(i = 1;i <= length1;i++) { + for(j = 1;j <= length2;j++) { + if(compare(array1[i - 1], array2[j - 1])) { + arr[i][j] = arr[i - 1][j - 1] + 1 + }else { + arr[i][j] = Math.max(arr[i - 1][j], arr[i][j - 1]) + } + } + } + var result = []; + var i = length1, j = length2; + while(i > 0 && j > 0) { + if(compare(array1[i - 1], array2[j - 1])) { + result.unshift(collect(i - 1, j - 1)); + i--; + j-- + }else { + if(arr[i - 1][j] > arr[i][j - 1]) { + i-- + }else { + j-- + } + } + } + return result +}; +goog.math.sum = function(var_args) { + return(goog.array.reduce(arguments, function(sum, value) { + return sum + value + }, 0)) +}; +goog.math.average = function(var_args) { + return goog.math.sum.apply(null, arguments) / arguments.length +}; +goog.math.standardDeviation = function(var_args) { + var sampleSize = arguments.length; + if(sampleSize < 2) { + return 0 + } + var mean = goog.math.average.apply(null, arguments); + var variance = goog.math.sum.apply(null, goog.array.map(arguments, function(val) { + return Math.pow(val - mean, 2) + })) / (sampleSize - 1); + return Math.sqrt(variance) +}; +goog.math.isInt = function(num) { + return isFinite(num) && num % 1 == 0 +}; +goog.math.isFiniteNumber = function(num) { + return isFinite(num) && !isNaN(num) +}; +goog.math.safeFloor = function(num, opt_epsilon) { + goog.asserts.assert(!goog.isDef(opt_epsilon) || opt_epsilon > 0); + return Math.floor(num + (opt_epsilon || 2E-15)) +}; +goog.math.safeCeil = function(num, opt_epsilon) { + goog.asserts.assert(!goog.isDef(opt_epsilon) || opt_epsilon > 0); + return Math.ceil(num - (opt_epsilon || 2E-15)) +}; +goog.provide("goog.math.Coordinate"); +goog.require("goog.math"); +goog.math.Coordinate = function(opt_x, opt_y) { + this.x = goog.isDef(opt_x) ? opt_x : 0; + this.y = goog.isDef(opt_y) ? opt_y : 0 +}; +goog.math.Coordinate.prototype.clone = function() { + return new goog.math.Coordinate(this.x, this.y) +}; +if(goog.DEBUG) { + goog.math.Coordinate.prototype.toString = function() { + return"(" + this.x + ", " + this.y + ")" + } +} +goog.math.Coordinate.equals = function(a, b) { + if(a == b) { + return true + } + if(!a || !b) { + return false + } + return a.x == b.x && a.y == b.y +}; +goog.math.Coordinate.distance = function(a, b) { + var dx = a.x - b.x; + var dy = a.y - b.y; + return Math.sqrt(dx * dx + dy * dy) +}; +goog.math.Coordinate.magnitude = function(a) { + return Math.sqrt(a.x * a.x + a.y * a.y) +}; +goog.math.Coordinate.azimuth = function(a) { + return goog.math.angle(0, 0, a.x, a.y) +}; +goog.math.Coordinate.squaredDistance = function(a, b) { + var dx = a.x - b.x; + var dy = a.y - b.y; + return dx * dx + dy * dy +}; +goog.math.Coordinate.difference = function(a, b) { + return new goog.math.Coordinate(a.x - b.x, a.y - b.y) +}; +goog.math.Coordinate.sum = function(a, b) { + return new goog.math.Coordinate(a.x + b.x, a.y + b.y) +}; +goog.math.Coordinate.prototype.ceil = function() { + this.x = Math.ceil(this.x); + this.y = Math.ceil(this.y); + return this +}; +goog.math.Coordinate.prototype.floor = function() { + this.x = Math.floor(this.x); + this.y = Math.floor(this.y); + return this +}; +goog.math.Coordinate.prototype.round = function() { + this.x = Math.round(this.x); + this.y = Math.round(this.y); + return this +}; +goog.math.Coordinate.prototype.translate = function(tx, opt_ty) { + if(tx instanceof goog.math.Coordinate) { + this.x += tx.x; + this.y += tx.y + }else { + this.x += tx; + if(goog.isNumber(opt_ty)) { + this.y += opt_ty + } + } + return this +}; +goog.math.Coordinate.prototype.scale = function(sx, opt_sy) { + var sy = goog.isNumber(opt_sy) ? opt_sy : sx; + this.x *= sx; + this.y *= sy; + return this +}; +goog.provide("goog.math.Size"); +goog.math.Size = function(width, height) { + this.width = width; + this.height = height +}; +goog.math.Size.equals = function(a, b) { + if(a == b) { + return true + } + if(!a || !b) { + return false + } + return a.width == b.width && a.height == b.height +}; +goog.math.Size.prototype.clone = function() { + return new goog.math.Size(this.width, this.height) +}; +if(goog.DEBUG) { + goog.math.Size.prototype.toString = function() { + return"(" + this.width + " x " + this.height + ")" + } +} +goog.math.Size.prototype.getLongest = function() { + return Math.max(this.width, this.height) +}; +goog.math.Size.prototype.getShortest = function() { + return Math.min(this.width, this.height) +}; +goog.math.Size.prototype.area = function() { + return this.width * this.height +}; +goog.math.Size.prototype.perimeter = function() { + return(this.width + this.height) * 2 +}; +goog.math.Size.prototype.aspectRatio = function() { + return this.width / this.height +}; +goog.math.Size.prototype.isEmpty = function() { + return!this.area() +}; +goog.math.Size.prototype.ceil = function() { + this.width = Math.ceil(this.width); + this.height = Math.ceil(this.height); + return this +}; +goog.math.Size.prototype.fitsInside = function(target) { + return this.width <= target.width && this.height <= target.height +}; +goog.math.Size.prototype.floor = function() { + this.width = Math.floor(this.width); + this.height = Math.floor(this.height); + return this +}; +goog.math.Size.prototype.round = function() { + this.width = Math.round(this.width); + this.height = Math.round(this.height); + return this +}; +goog.math.Size.prototype.scale = function(sx, opt_sy) { + var sy = goog.isNumber(opt_sy) ? opt_sy : sx; + this.width *= sx; + this.height *= sy; + return this +}; +goog.math.Size.prototype.scaleToFit = function(target) { + var s = this.aspectRatio() > target.aspectRatio() ? target.width / this.width : target.height / this.height; + return this.scale(s) +}; +goog.provide("goog.object"); +goog.object.forEach = function(obj, f, opt_obj) { + for(var key in obj) { + f.call(opt_obj, obj[key], key, obj) + } +}; +goog.object.filter = function(obj, f, opt_obj) { + var res = {}; + for(var key in obj) { + if(f.call(opt_obj, obj[key], key, obj)) { + res[key] = obj[key] + } + } + return res +}; +goog.object.map = function(obj, f, opt_obj) { + var res = {}; + for(var key in obj) { + res[key] = f.call(opt_obj, obj[key], key, obj) + } + return res +}; +goog.object.some = function(obj, f, opt_obj) { + for(var key in obj) { + if(f.call(opt_obj, obj[key], key, obj)) { + return true + } + } + return false +}; +goog.object.every = function(obj, f, opt_obj) { + for(var key in obj) { + if(!f.call(opt_obj, obj[key], key, obj)) { + return false + } + } + return true +}; +goog.object.getCount = function(obj) { + var rv = 0; + for(var key in obj) { + rv++ + } + return rv +}; +goog.object.getAnyKey = function(obj) { + for(var key in obj) { + return key + } +}; +goog.object.getAnyValue = function(obj) { + for(var key in obj) { + return obj[key] + } +}; +goog.object.contains = function(obj, val) { + return goog.object.containsValue(obj, val) +}; +goog.object.getValues = function(obj) { + var res = []; + var i = 0; + for(var key in obj) { + res[i++] = obj[key] + } + return res +}; +goog.object.getKeys = function(obj) { + var res = []; + var i = 0; + for(var key in obj) { + res[i++] = key + } + return res +}; +goog.object.getValueByKeys = function(obj, var_args) { + var isArrayLike = goog.isArrayLike(var_args); + var keys = isArrayLike ? var_args : arguments; + for(var i = isArrayLike ? 0 : 1;i < keys.length;i++) { + obj = obj[keys[i]]; + if(!goog.isDef(obj)) { + break + } + } + return obj +}; +goog.object.containsKey = function(obj, key) { + return key in obj +}; +goog.object.containsValue = function(obj, val) { + for(var key in obj) { + if(obj[key] == val) { + return true + } + } + return false +}; +goog.object.findKey = function(obj, f, opt_this) { + for(var key in obj) { + if(f.call(opt_this, obj[key], key, obj)) { + return key + } + } + return undefined +}; +goog.object.findValue = function(obj, f, opt_this) { + var key = goog.object.findKey(obj, f, opt_this); + return key && obj[key] +}; +goog.object.isEmpty = function(obj) { + for(var key in obj) { + return false + } + return true +}; +goog.object.clear = function(obj) { + for(var i in obj) { + delete obj[i] + } +}; +goog.object.remove = function(obj, key) { + var rv; + if(rv = key in obj) { + delete obj[key] + } + return rv +}; +goog.object.add = function(obj, key, val) { + if(key in obj) { + throw Error('The object already contains the key "' + key + '"'); + } + goog.object.set(obj, key, val) +}; +goog.object.get = function(obj, key, opt_val) { + if(key in obj) { + return obj[key] + } + return opt_val +}; +goog.object.set = function(obj, key, value) { + obj[key] = value +}; +goog.object.setIfUndefined = function(obj, key, value) { + return key in obj ? obj[key] : obj[key] = value +}; +goog.object.clone = function(obj) { + var res = {}; + for(var key in obj) { + res[key] = obj[key] + } + return res +}; +goog.object.unsafeClone = function(obj) { + var type = goog.typeOf(obj); + if(type == "object" || type == "array") { + if(obj.clone) { + return obj.clone() + } + var clone = type == "array" ? [] : {}; + for(var key in obj) { + clone[key] = goog.object.unsafeClone(obj[key]) + } + return clone + } + return obj +}; +goog.object.transpose = function(obj) { + var transposed = {}; + for(var key in obj) { + transposed[obj[key]] = key + } + return transposed +}; +goog.object.PROTOTYPE_FIELDS_ = ["constructor", "hasOwnProperty", "isPrototypeOf", "propertyIsEnumerable", "toLocaleString", "toString", "valueOf"]; +goog.object.extend = function(target, var_args) { + var key, source; + for(var i = 1;i < arguments.length;i++) { + source = arguments[i]; + for(key in source) { + target[key] = source[key] + } + for(var j = 0;j < goog.object.PROTOTYPE_FIELDS_.length;j++) { + key = goog.object.PROTOTYPE_FIELDS_[j]; + if(Object.prototype.hasOwnProperty.call(source, key)) { + target[key] = source[key] + } + } + } +}; +goog.object.create = function(var_args) { + var argLength = arguments.length; + if(argLength == 1 && goog.isArray(arguments[0])) { + return goog.object.create.apply(null, arguments[0]) + } + if(argLength % 2) { + throw Error("Uneven number of arguments"); + } + var rv = {}; + for(var i = 0;i < argLength;i += 2) { + rv[arguments[i]] = arguments[i + 1] + } + return rv +}; +goog.object.createSet = function(var_args) { + var argLength = arguments.length; + if(argLength == 1 && goog.isArray(arguments[0])) { + return goog.object.createSet.apply(null, arguments[0]) + } + var rv = {}; + for(var i = 0;i < argLength;i++) { + rv[arguments[i]] = true + } + return rv +}; +goog.object.createImmutableView = function(obj) { + var result = obj; + if(Object.isFrozen && !Object.isFrozen(obj)) { + result = Object.create(obj); + Object.freeze(result) + } + return result +}; +goog.object.isImmutableView = function(obj) { + return!!Object.isFrozen && Object.isFrozen(obj) +}; +goog.provide("goog.dom"); +goog.provide("goog.dom.Appendable"); +goog.provide("goog.dom.DomHelper"); +goog.provide("goog.dom.NodeType"); +goog.require("goog.array"); +goog.require("goog.dom.BrowserFeature"); +goog.require("goog.dom.TagName"); +goog.require("goog.dom.classes"); +goog.require("goog.math.Coordinate"); +goog.require("goog.math.Size"); +goog.require("goog.object"); +goog.require("goog.string"); +goog.require("goog.userAgent"); +goog.define("goog.dom.ASSUME_QUIRKS_MODE", false); +goog.define("goog.dom.ASSUME_STANDARDS_MODE", false); +goog.dom.COMPAT_MODE_KNOWN_ = goog.dom.ASSUME_QUIRKS_MODE || goog.dom.ASSUME_STANDARDS_MODE; +goog.dom.NodeType = {ELEMENT:1, ATTRIBUTE:2, TEXT:3, CDATA_SECTION:4, ENTITY_REFERENCE:5, ENTITY:6, PROCESSING_INSTRUCTION:7, COMMENT:8, DOCUMENT:9, DOCUMENT_TYPE:10, DOCUMENT_FRAGMENT:11, NOTATION:12}; +goog.dom.getDomHelper = function(opt_element) { + return opt_element ? new goog.dom.DomHelper(goog.dom.getOwnerDocument(opt_element)) : goog.dom.defaultDomHelper_ || (goog.dom.defaultDomHelper_ = new goog.dom.DomHelper) +}; +goog.dom.defaultDomHelper_; +goog.dom.getDocument = function() { + return document +}; +goog.dom.getElement = function(element) { + return goog.isString(element) ? document.getElementById(element) : element +}; +goog.dom.$ = goog.dom.getElement; +goog.dom.getElementsByTagNameAndClass = function(opt_tag, opt_class, opt_el) { + return goog.dom.getElementsByTagNameAndClass_(document, opt_tag, opt_class, opt_el) +}; +goog.dom.getElementsByClass = function(className, opt_el) { + var parent = opt_el || document; + if(goog.dom.canUseQuerySelector_(parent)) { + return parent.querySelectorAll("." + className) + }else { + if(parent.getElementsByClassName) { + return parent.getElementsByClassName(className) + } + } + return goog.dom.getElementsByTagNameAndClass_(document, "*", className, opt_el) +}; +goog.dom.getElementByClass = function(className, opt_el) { + var parent = opt_el || document; + var retVal = null; + if(goog.dom.canUseQuerySelector_(parent)) { + retVal = parent.querySelector("." + className) + }else { + retVal = goog.dom.getElementsByClass(className, opt_el)[0] + } + return retVal || null +}; +goog.dom.canUseQuerySelector_ = function(parent) { + return!!(parent.querySelectorAll && parent.querySelector) +}; +goog.dom.getElementsByTagNameAndClass_ = function(doc, opt_tag, opt_class, opt_el) { + var parent = opt_el || doc; + var tagName = opt_tag && opt_tag != "*" ? opt_tag.toUpperCase() : ""; + if(goog.dom.canUseQuerySelector_(parent) && (tagName || opt_class)) { + var query = tagName + (opt_class ? "." + opt_class : ""); + return parent.querySelectorAll(query) + } + if(opt_class && parent.getElementsByClassName) { + var els = parent.getElementsByClassName(opt_class); + if(tagName) { + var arrayLike = {}; + var len = 0; + for(var i = 0, el;el = els[i];i++) { + if(tagName == el.nodeName) { + arrayLike[len++] = el + } + } + arrayLike.length = len; + return arrayLike + }else { + return els + } + } + var els = parent.getElementsByTagName(tagName || "*"); + if(opt_class) { + var arrayLike = {}; + var len = 0; + for(var i = 0, el;el = els[i];i++) { + var className = el.className; + if(typeof className.split == "function" && goog.array.contains(className.split(/\s+/), opt_class)) { + arrayLike[len++] = el + } + } + arrayLike.length = len; + return arrayLike + }else { + return els + } +}; +goog.dom.$$ = goog.dom.getElementsByTagNameAndClass; +goog.dom.setProperties = function(element, properties) { + goog.object.forEach(properties, function(val, key) { + if(key == "style") { + element.style.cssText = val + }else { + if(key == "class") { + element.className = val + }else { + if(key == "for") { + element.htmlFor = val + }else { + if(key in goog.dom.DIRECT_ATTRIBUTE_MAP_) { + element.setAttribute(goog.dom.DIRECT_ATTRIBUTE_MAP_[key], val) + }else { + if(goog.string.startsWith(key, "aria-") || goog.string.startsWith(key, "data-")) { + element.setAttribute(key, val) + }else { + element[key] = val + } + } + } + } + } + }) +}; +goog.dom.DIRECT_ATTRIBUTE_MAP_ = {"cellpadding":"cellPadding", "cellspacing":"cellSpacing", "colspan":"colSpan", "frameborder":"frameBorder", "height":"height", "maxlength":"maxLength", "role":"role", "rowspan":"rowSpan", "type":"type", "usemap":"useMap", "valign":"vAlign", "width":"width"}; +goog.dom.getViewportSize = function(opt_window) { + return goog.dom.getViewportSize_(opt_window || window) +}; +goog.dom.getViewportSize_ = function(win) { + var doc = win.document; + var el = goog.dom.isCss1CompatMode_(doc) ? doc.documentElement : doc.body; + return new goog.math.Size(el.clientWidth, el.clientHeight) +}; +goog.dom.getDocumentHeight = function() { + return goog.dom.getDocumentHeight_(window) +}; +goog.dom.getDocumentHeight_ = function(win) { + var doc = win.document; + var height = 0; + if(doc) { + var vh = goog.dom.getViewportSize_(win).height; + var body = doc.body; + var docEl = doc.documentElement; + if(goog.dom.isCss1CompatMode_(doc) && docEl.scrollHeight) { + height = docEl.scrollHeight != vh ? docEl.scrollHeight : docEl.offsetHeight + }else { + var sh = docEl.scrollHeight; + var oh = docEl.offsetHeight; + if(docEl.clientHeight != oh) { + sh = body.scrollHeight; + oh = body.offsetHeight + } + if(sh > vh) { + height = sh > oh ? sh : oh + }else { + height = sh < oh ? sh : oh + } + } + } + return height +}; +goog.dom.getPageScroll = function(opt_window) { + var win = opt_window || goog.global || window; + return goog.dom.getDomHelper(win.document).getDocumentScroll() +}; +goog.dom.getDocumentScroll = function() { + return goog.dom.getDocumentScroll_(document) +}; +goog.dom.getDocumentScroll_ = function(doc) { + var el = goog.dom.getDocumentScrollElement_(doc); + var win = goog.dom.getWindow_(doc); + if(goog.userAgent.IE && goog.userAgent.isVersionOrHigher("10") && win.pageYOffset != el.scrollTop) { + return new goog.math.Coordinate(el.scrollLeft, el.scrollTop) + } + return new goog.math.Coordinate(win.pageXOffset || el.scrollLeft, win.pageYOffset || el.scrollTop) +}; +goog.dom.getDocumentScrollElement = function() { + return goog.dom.getDocumentScrollElement_(document) +}; +goog.dom.getDocumentScrollElement_ = function(doc) { + return!goog.userAgent.WEBKIT && goog.dom.isCss1CompatMode_(doc) ? doc.documentElement : doc.body +}; +goog.dom.getWindow = function(opt_doc) { + return opt_doc ? goog.dom.getWindow_(opt_doc) : window +}; +goog.dom.getWindow_ = function(doc) { + return doc.parentWindow || doc.defaultView +}; +goog.dom.createDom = function(tagName, opt_attributes, var_args) { + return goog.dom.createDom_(document, arguments) +}; +goog.dom.createDom_ = function(doc, args) { + var tagName = args[0]; + var attributes = args[1]; + if(!goog.dom.BrowserFeature.CAN_ADD_NAME_OR_TYPE_ATTRIBUTES && attributes && (attributes.name || attributes.type)) { + var tagNameArr = ["\x3c", tagName]; + if(attributes.name) { + tagNameArr.push(' name\x3d"', goog.string.htmlEscape(attributes.name), '"') + } + if(attributes.type) { + tagNameArr.push(' type\x3d"', goog.string.htmlEscape(attributes.type), '"'); + var clone = {}; + goog.object.extend(clone, attributes); + delete clone["type"]; + attributes = clone + } + tagNameArr.push("\x3e"); + tagName = tagNameArr.join("") + } + var element = doc.createElement(tagName); + if(attributes) { + if(goog.isString(attributes)) { + element.className = attributes + }else { + if(goog.isArray(attributes)) { + goog.dom.classes.add.apply(null, [element].concat(attributes)) + }else { + goog.dom.setProperties(element, attributes) + } + } + } + if(args.length > 2) { + goog.dom.append_(doc, element, args, 2) + } + return element +}; +goog.dom.append_ = function(doc, parent, args, startIndex) { + function childHandler(child) { + if(child) { + parent.appendChild(goog.isString(child) ? doc.createTextNode(child) : child) + } + } + for(var i = startIndex;i < args.length;i++) { + var arg = args[i]; + if(goog.isArrayLike(arg) && !goog.dom.isNodeLike(arg)) { + goog.array.forEach(goog.dom.isNodeList(arg) ? goog.array.toArray(arg) : arg, childHandler) + }else { + childHandler(arg) + } + } +}; +goog.dom.$dom = goog.dom.createDom; +goog.dom.createElement = function(name) { + return document.createElement(name) +}; +goog.dom.createTextNode = function(content) { + return document.createTextNode(String(content)) +}; +goog.dom.createTable = function(rows, columns, opt_fillWithNbsp) { + return goog.dom.createTable_(document, rows, columns, !!opt_fillWithNbsp) +}; +goog.dom.createTable_ = function(doc, rows, columns, fillWithNbsp) { + var rowHtml = ["\x3ctr\x3e"]; + for(var i = 0;i < columns;i++) { + rowHtml.push(fillWithNbsp ? "\x3ctd\x3e\x26nbsp;\x3c/td\x3e" : "\x3ctd\x3e\x3c/td\x3e") + } + rowHtml.push("\x3c/tr\x3e"); + rowHtml = rowHtml.join(""); + var totalHtml = ["\x3ctable\x3e"]; + for(i = 0;i < rows;i++) { + totalHtml.push(rowHtml) + } + totalHtml.push("\x3c/table\x3e"); + var elem = doc.createElement(goog.dom.TagName.DIV); + elem.innerHTML = totalHtml.join(""); + return(elem.removeChild(elem.firstChild)) +}; +goog.dom.htmlToDocumentFragment = function(htmlString) { + return goog.dom.htmlToDocumentFragment_(document, htmlString) +}; +goog.dom.htmlToDocumentFragment_ = function(doc, htmlString) { + var tempDiv = doc.createElement("div"); + if(goog.dom.BrowserFeature.INNER_HTML_NEEDS_SCOPED_ELEMENT) { + tempDiv.innerHTML = "\x3cbr\x3e" + htmlString; + tempDiv.removeChild(tempDiv.firstChild) + }else { + tempDiv.innerHTML = htmlString + } + if(tempDiv.childNodes.length == 1) { + return(tempDiv.removeChild(tempDiv.firstChild)) + }else { + var fragment = doc.createDocumentFragment(); + while(tempDiv.firstChild) { + fragment.appendChild(tempDiv.firstChild) + } + return fragment + } +}; +goog.dom.getCompatMode = function() { + return goog.dom.isCss1CompatMode() ? "CSS1Compat" : "BackCompat" +}; +goog.dom.isCss1CompatMode = function() { + return goog.dom.isCss1CompatMode_(document) +}; +goog.dom.isCss1CompatMode_ = function(doc) { + if(goog.dom.COMPAT_MODE_KNOWN_) { + return goog.dom.ASSUME_STANDARDS_MODE + } + return doc.compatMode == "CSS1Compat" +}; +goog.dom.canHaveChildren = function(node) { + if(node.nodeType != goog.dom.NodeType.ELEMENT) { + return false + } + switch(node.tagName) { + case goog.dom.TagName.APPLET: + ; + case goog.dom.TagName.AREA: + ; + case goog.dom.TagName.BASE: + ; + case goog.dom.TagName.BR: + ; + case goog.dom.TagName.COL: + ; + case goog.dom.TagName.COMMAND: + ; + case goog.dom.TagName.EMBED: + ; + case goog.dom.TagName.FRAME: + ; + case goog.dom.TagName.HR: + ; + case goog.dom.TagName.IMG: + ; + case goog.dom.TagName.INPUT: + ; + case goog.dom.TagName.IFRAME: + ; + case goog.dom.TagName.ISINDEX: + ; + case goog.dom.TagName.KEYGEN: + ; + case goog.dom.TagName.LINK: + ; + case goog.dom.TagName.NOFRAMES: + ; + case goog.dom.TagName.NOSCRIPT: + ; + case goog.dom.TagName.META: + ; + case goog.dom.TagName.OBJECT: + ; + case goog.dom.TagName.PARAM: + ; + case goog.dom.TagName.SCRIPT: + ; + case goog.dom.TagName.SOURCE: + ; + case goog.dom.TagName.STYLE: + ; + case goog.dom.TagName.TRACK: + ; + case goog.dom.TagName.WBR: + return false + } + return true +}; +goog.dom.appendChild = function(parent, child) { + parent.appendChild(child) +}; +goog.dom.append = function(parent, var_args) { + goog.dom.append_(goog.dom.getOwnerDocument(parent), parent, arguments, 1) +}; +goog.dom.removeChildren = function(node) { + var child; + while(child = node.firstChild) { + node.removeChild(child) + } +}; +goog.dom.insertSiblingBefore = function(newNode, refNode) { + if(refNode.parentNode) { + refNode.parentNode.insertBefore(newNode, refNode) + } +}; +goog.dom.insertSiblingAfter = function(newNode, refNode) { + if(refNode.parentNode) { + refNode.parentNode.insertBefore(newNode, refNode.nextSibling) + } +}; +goog.dom.insertChildAt = function(parent, child, index) { + parent.insertBefore(child, parent.childNodes[index] || null) +}; +goog.dom.removeNode = function(node) { + return node && node.parentNode ? node.parentNode.removeChild(node) : null +}; +goog.dom.replaceNode = function(newNode, oldNode) { + var parent = oldNode.parentNode; + if(parent) { + parent.replaceChild(newNode, oldNode) + } +}; +goog.dom.flattenElement = function(element) { + var child, parent = element.parentNode; + if(parent && parent.nodeType != goog.dom.NodeType.DOCUMENT_FRAGMENT) { + if(element.removeNode) { + return(element.removeNode(false)) + }else { + while(child = element.firstChild) { + parent.insertBefore(child, element) + } + return(goog.dom.removeNode(element)) + } + } +}; +goog.dom.getChildren = function(element) { + if(goog.dom.BrowserFeature.CAN_USE_CHILDREN_ATTRIBUTE && element.children != undefined) { + return element.children + } + return goog.array.filter(element.childNodes, function(node) { + return node.nodeType == goog.dom.NodeType.ELEMENT + }) +}; +goog.dom.getFirstElementChild = function(node) { + if(node.firstElementChild != undefined) { + return(node).firstElementChild + } + return goog.dom.getNextElementNode_(node.firstChild, true) +}; +goog.dom.getLastElementChild = function(node) { + if(node.lastElementChild != undefined) { + return(node).lastElementChild + } + return goog.dom.getNextElementNode_(node.lastChild, false) +}; +goog.dom.getNextElementSibling = function(node) { + if(node.nextElementSibling != undefined) { + return(node).nextElementSibling + } + return goog.dom.getNextElementNode_(node.nextSibling, true) +}; +goog.dom.getPreviousElementSibling = function(node) { + if(node.previousElementSibling != undefined) { + return(node).previousElementSibling + } + return goog.dom.getNextElementNode_(node.previousSibling, false) +}; +goog.dom.getNextElementNode_ = function(node, forward) { + while(node && node.nodeType != goog.dom.NodeType.ELEMENT) { + node = forward ? node.nextSibling : node.previousSibling + } + return(node) +}; +goog.dom.getNextNode = function(node) { + if(!node) { + return null + } + if(node.firstChild) { + return node.firstChild + } + while(node && !node.nextSibling) { + node = node.parentNode + } + return node ? node.nextSibling : null +}; +goog.dom.getPreviousNode = function(node) { + if(!node) { + return null + } + if(!node.previousSibling) { + return node.parentNode + } + node = node.previousSibling; + while(node && node.lastChild) { + node = node.lastChild + } + return node +}; +goog.dom.isNodeLike = function(obj) { + return goog.isObject(obj) && obj.nodeType > 0 +}; +goog.dom.isElement = function(obj) { + return goog.isObject(obj) && obj.nodeType == goog.dom.NodeType.ELEMENT +}; +goog.dom.isWindow = function(obj) { + return goog.isObject(obj) && obj["window"] == obj +}; +goog.dom.getParentElement = function(element) { + if(goog.dom.BrowserFeature.CAN_USE_PARENT_ELEMENT_PROPERTY) { + var isIe9 = goog.userAgent.IE && goog.userAgent.isVersionOrHigher("9") && !goog.userAgent.isVersionOrHigher("10"); + if(!(isIe9 && goog.global["SVGElement"] && element instanceof goog.global["SVGElement"])) { + return element.parentElement + } + } + var parent = element.parentNode; + return goog.dom.isElement(parent) ? (parent) : null +}; +goog.dom.contains = function(parent, descendant) { + if(parent.contains && descendant.nodeType == goog.dom.NodeType.ELEMENT) { + return parent == descendant || parent.contains(descendant) + } + if(typeof parent.compareDocumentPosition != "undefined") { + return parent == descendant || Boolean(parent.compareDocumentPosition(descendant) & 16) + } + while(descendant && parent != descendant) { + descendant = descendant.parentNode + } + return descendant == parent +}; +goog.dom.compareNodeOrder = function(node1, node2) { + if(node1 == node2) { + return 0 + } + if(node1.compareDocumentPosition) { + return node1.compareDocumentPosition(node2) & 2 ? 1 : -1 + } + if(goog.userAgent.IE && !goog.userAgent.isDocumentModeOrHigher(9)) { + if(node1.nodeType == goog.dom.NodeType.DOCUMENT) { + return-1 + } + if(node2.nodeType == goog.dom.NodeType.DOCUMENT) { + return 1 + } + } + if("sourceIndex" in node1 || node1.parentNode && "sourceIndex" in node1.parentNode) { + var isElement1 = node1.nodeType == goog.dom.NodeType.ELEMENT; + var isElement2 = node2.nodeType == goog.dom.NodeType.ELEMENT; + if(isElement1 && isElement2) { + return node1.sourceIndex - node2.sourceIndex + }else { + var parent1 = node1.parentNode; + var parent2 = node2.parentNode; + if(parent1 == parent2) { + return goog.dom.compareSiblingOrder_(node1, node2) + } + if(!isElement1 && goog.dom.contains(parent1, node2)) { + return-1 * goog.dom.compareParentsDescendantNodeIe_(node1, node2) + } + if(!isElement2 && goog.dom.contains(parent2, node1)) { + return goog.dom.compareParentsDescendantNodeIe_(node2, node1) + } + return(isElement1 ? node1.sourceIndex : parent1.sourceIndex) - (isElement2 ? node2.sourceIndex : parent2.sourceIndex) + } + } + var doc = goog.dom.getOwnerDocument(node1); + var range1, range2; + range1 = doc.createRange(); + range1.selectNode(node1); + range1.collapse(true); + range2 = doc.createRange(); + range2.selectNode(node2); + range2.collapse(true); + return range1.compareBoundaryPoints(goog.global["Range"].START_TO_END, range2) +}; +goog.dom.compareParentsDescendantNodeIe_ = function(textNode, node) { + var parent = textNode.parentNode; + if(parent == node) { + return-1 + } + var sibling = node; + while(sibling.parentNode != parent) { + sibling = sibling.parentNode + } + return goog.dom.compareSiblingOrder_(sibling, textNode) +}; +goog.dom.compareSiblingOrder_ = function(node1, node2) { + var s = node2; + while(s = s.previousSibling) { + if(s == node1) { + return-1 + } + } + return 1 +}; +goog.dom.findCommonAncestor = function(var_args) { + var i, count = arguments.length; + if(!count) { + return null + }else { + if(count == 1) { + return arguments[0] + } + } + var paths = []; + var minLength = Infinity; + for(i = 0;i < count;i++) { + var ancestors = []; + var node = arguments[i]; + while(node) { + ancestors.unshift(node); + node = node.parentNode + } + paths.push(ancestors); + minLength = Math.min(minLength, ancestors.length) + } + var output = null; + for(i = 0;i < minLength;i++) { + var first = paths[0][i]; + for(var j = 1;j < count;j++) { + if(first != paths[j][i]) { + return output + } + } + output = first + } + return output +}; +goog.dom.getOwnerDocument = function(node) { + return(node.nodeType == goog.dom.NodeType.DOCUMENT ? node : node.ownerDocument || node.document) +}; +goog.dom.getFrameContentDocument = function(frame) { + var doc = frame.contentDocument || frame.contentWindow.document; + return doc +}; +goog.dom.getFrameContentWindow = function(frame) { + return frame.contentWindow || goog.dom.getWindow_(goog.dom.getFrameContentDocument(frame)) +}; +goog.dom.setTextContent = function(element, text) { + if("textContent" in element) { + element.textContent = text + }else { + if(element.firstChild && element.firstChild.nodeType == goog.dom.NodeType.TEXT) { + while(element.lastChild != element.firstChild) { + element.removeChild(element.lastChild) + } + element.firstChild.data = text + }else { + goog.dom.removeChildren(element); + var doc = goog.dom.getOwnerDocument(element); + element.appendChild(doc.createTextNode(String(text))) + } + } +}; +goog.dom.getOuterHtml = function(element) { + if("outerHTML" in element) { + return element.outerHTML + }else { + var doc = goog.dom.getOwnerDocument(element); + var div = doc.createElement("div"); + div.appendChild(element.cloneNode(true)); + return div.innerHTML + } +}; +goog.dom.findNode = function(root, p) { + var rv = []; + var found = goog.dom.findNodes_(root, p, rv, true); + return found ? rv[0] : undefined +}; +goog.dom.findNodes = function(root, p) { + var rv = []; + goog.dom.findNodes_(root, p, rv, false); + return rv +}; +goog.dom.findNodes_ = function(root, p, rv, findOne) { + if(root != null) { + var child = root.firstChild; + while(child) { + if(p(child)) { + rv.push(child); + if(findOne) { + return true + } + } + if(goog.dom.findNodes_(child, p, rv, findOne)) { + return true + } + child = child.nextSibling + } + } + return false +}; +goog.dom.TAGS_TO_IGNORE_ = {"SCRIPT":1, "STYLE":1, "HEAD":1, "IFRAME":1, "OBJECT":1}; +goog.dom.PREDEFINED_TAG_VALUES_ = {"IMG":" ", "BR":"\n"}; +goog.dom.isFocusableTabIndex = function(element) { + var attrNode = element.getAttributeNode("tabindex"); + if(attrNode && attrNode.specified) { + var index = element.tabIndex; + return goog.isNumber(index) && index >= 0 && index < 32768 + } + return false +}; +goog.dom.setFocusableTabIndex = function(element, enable) { + if(enable) { + element.tabIndex = 0 + }else { + element.tabIndex = -1; + element.removeAttribute("tabIndex") + } +}; +goog.dom.getTextContent = function(node) { + var textContent; + if(goog.dom.BrowserFeature.CAN_USE_INNER_TEXT && "innerText" in node) { + textContent = goog.string.canonicalizeNewlines(node.innerText) + }else { + var buf = []; + goog.dom.getTextContent_(node, buf, true); + textContent = buf.join("") + } + textContent = textContent.replace(/ \xAD /g, " ").replace(/\xAD/g, ""); + textContent = textContent.replace(/\u200B/g, ""); + if(!goog.dom.BrowserFeature.CAN_USE_INNER_TEXT) { + textContent = textContent.replace(/ +/g, " ") + } + if(textContent != " ") { + textContent = textContent.replace(/^\s*/, "") + } + return textContent +}; +goog.dom.getRawTextContent = function(node) { + var buf = []; + goog.dom.getTextContent_(node, buf, false); + return buf.join("") +}; +goog.dom.getTextContent_ = function(node, buf, normalizeWhitespace) { + if(node.nodeName in goog.dom.TAGS_TO_IGNORE_) { + }else { + if(node.nodeType == goog.dom.NodeType.TEXT) { + if(normalizeWhitespace) { + buf.push(String(node.nodeValue).replace(/(\r\n|\r|\n)/g, "")) + }else { + buf.push(node.nodeValue) + } + }else { + if(node.nodeName in goog.dom.PREDEFINED_TAG_VALUES_) { + buf.push(goog.dom.PREDEFINED_TAG_VALUES_[node.nodeName]) + }else { + var child = node.firstChild; + while(child) { + goog.dom.getTextContent_(child, buf, normalizeWhitespace); + child = child.nextSibling + } + } + } + } +}; +goog.dom.getNodeTextLength = function(node) { + return goog.dom.getTextContent(node).length +}; +goog.dom.getNodeTextOffset = function(node, opt_offsetParent) { + var root = opt_offsetParent || goog.dom.getOwnerDocument(node).body; + var buf = []; + while(node && node != root) { + var cur = node; + while(cur = cur.previousSibling) { + buf.unshift(goog.dom.getTextContent(cur)) + } + node = node.parentNode + } + return goog.string.trimLeft(buf.join("")).replace(/ +/g, " ").length +}; +goog.dom.getNodeAtOffset = function(parent, offset, opt_result) { + var stack = [parent], pos = 0, cur = null; + while(stack.length > 0 && pos < offset) { + cur = stack.pop(); + if(cur.nodeName in goog.dom.TAGS_TO_IGNORE_) { + }else { + if(cur.nodeType == goog.dom.NodeType.TEXT) { + var text = cur.nodeValue.replace(/(\r\n|\r|\n)/g, "").replace(/ +/g, " "); + pos += text.length + }else { + if(cur.nodeName in goog.dom.PREDEFINED_TAG_VALUES_) { + pos += goog.dom.PREDEFINED_TAG_VALUES_[cur.nodeName].length + }else { + for(var i = cur.childNodes.length - 1;i >= 0;i--) { + stack.push(cur.childNodes[i]) + } + } + } + } + } + if(goog.isObject(opt_result)) { + opt_result.remainder = cur ? cur.nodeValue.length + offset - pos - 1 : 0; + opt_result.node = cur + } + return cur +}; +goog.dom.isNodeList = function(val) { + if(val && typeof val.length == "number") { + if(goog.isObject(val)) { + return typeof val.item == "function" || typeof val.item == "string" + }else { + if(goog.isFunction(val)) { + return typeof val.item == "function" + } + } + } + return false +}; +goog.dom.getAncestorByTagNameAndClass = function(element, opt_tag, opt_class) { + if(!opt_tag && !opt_class) { + return null + } + var tagName = opt_tag ? opt_tag.toUpperCase() : null; + return(goog.dom.getAncestor(element, function(node) { + return(!tagName || node.nodeName == tagName) && (!opt_class || goog.dom.classes.has(node, opt_class)) + }, true)) +}; +goog.dom.getAncestorByClass = function(element, className) { + return goog.dom.getAncestorByTagNameAndClass(element, null, className) +}; +goog.dom.getAncestor = function(element, matcher, opt_includeNode, opt_maxSearchSteps) { + if(!opt_includeNode) { + element = element.parentNode + } + var ignoreSearchSteps = opt_maxSearchSteps == null; + var steps = 0; + while(element && (ignoreSearchSteps || steps <= opt_maxSearchSteps)) { + if(matcher(element)) { + return element + } + element = element.parentNode; + steps++ + } + return null +}; +goog.dom.getActiveElement = function(doc) { + try { + return doc && doc.activeElement + }catch(e) { + } + return null +}; +goog.dom.DomHelper = function(opt_document) { + this.document_ = opt_document || goog.global.document || document +}; +goog.dom.DomHelper.prototype.getDomHelper = goog.dom.getDomHelper; +goog.dom.DomHelper.prototype.setDocument = function(document) { + this.document_ = document +}; +goog.dom.DomHelper.prototype.getDocument = function() { + return this.document_ +}; +goog.dom.DomHelper.prototype.getElement = function(element) { + if(goog.isString(element)) { + return this.document_.getElementById(element) + }else { + return element + } +}; +goog.dom.DomHelper.prototype.$ = goog.dom.DomHelper.prototype.getElement; +goog.dom.DomHelper.prototype.getElementsByTagNameAndClass = function(opt_tag, opt_class, opt_el) { + return goog.dom.getElementsByTagNameAndClass_(this.document_, opt_tag, opt_class, opt_el) +}; +goog.dom.DomHelper.prototype.getElementsByClass = function(className, opt_el) { + var doc = opt_el || this.document_; + return goog.dom.getElementsByClass(className, doc) +}; +goog.dom.DomHelper.prototype.getElementByClass = function(className, opt_el) { + var doc = opt_el || this.document_; + return goog.dom.getElementByClass(className, doc) +}; +goog.dom.DomHelper.prototype.$$ = goog.dom.DomHelper.prototype.getElementsByTagNameAndClass; +goog.dom.DomHelper.prototype.setProperties = goog.dom.setProperties; +goog.dom.DomHelper.prototype.getViewportSize = function(opt_window) { + return goog.dom.getViewportSize(opt_window || this.getWindow()) +}; +goog.dom.DomHelper.prototype.getDocumentHeight = function() { + return goog.dom.getDocumentHeight_(this.getWindow()) +}; +goog.dom.Appendable; +goog.dom.DomHelper.prototype.createDom = function(tagName, opt_attributes, var_args) { + return goog.dom.createDom_(this.document_, arguments) +}; +goog.dom.DomHelper.prototype.$dom = goog.dom.DomHelper.prototype.createDom; +goog.dom.DomHelper.prototype.createElement = function(name) { + return this.document_.createElement(name) +}; +goog.dom.DomHelper.prototype.createTextNode = function(content) { + return this.document_.createTextNode(String(content)) +}; +goog.dom.DomHelper.prototype.createTable = function(rows, columns, opt_fillWithNbsp) { + return goog.dom.createTable_(this.document_, rows, columns, !!opt_fillWithNbsp) +}; +goog.dom.DomHelper.prototype.htmlToDocumentFragment = function(htmlString) { + return goog.dom.htmlToDocumentFragment_(this.document_, htmlString) +}; +goog.dom.DomHelper.prototype.getCompatMode = function() { + return this.isCss1CompatMode() ? "CSS1Compat" : "BackCompat" +}; +goog.dom.DomHelper.prototype.isCss1CompatMode = function() { + return goog.dom.isCss1CompatMode_(this.document_) +}; +goog.dom.DomHelper.prototype.getWindow = function() { + return goog.dom.getWindow_(this.document_) +}; +goog.dom.DomHelper.prototype.getDocumentScrollElement = function() { + return goog.dom.getDocumentScrollElement_(this.document_) +}; +goog.dom.DomHelper.prototype.getDocumentScroll = function() { + return goog.dom.getDocumentScroll_(this.document_) +}; +goog.dom.DomHelper.prototype.getActiveElement = function(opt_doc) { + return goog.dom.getActiveElement(opt_doc || this.document_) +}; +goog.dom.DomHelper.prototype.appendChild = goog.dom.appendChild; +goog.dom.DomHelper.prototype.append = goog.dom.append; +goog.dom.DomHelper.prototype.canHaveChildren = goog.dom.canHaveChildren; +goog.dom.DomHelper.prototype.removeChildren = goog.dom.removeChildren; +goog.dom.DomHelper.prototype.insertSiblingBefore = goog.dom.insertSiblingBefore; +goog.dom.DomHelper.prototype.insertSiblingAfter = goog.dom.insertSiblingAfter; +goog.dom.DomHelper.prototype.insertChildAt = goog.dom.insertChildAt; +goog.dom.DomHelper.prototype.removeNode = goog.dom.removeNode; +goog.dom.DomHelper.prototype.replaceNode = goog.dom.replaceNode; +goog.dom.DomHelper.prototype.flattenElement = goog.dom.flattenElement; +goog.dom.DomHelper.prototype.getChildren = goog.dom.getChildren; +goog.dom.DomHelper.prototype.getFirstElementChild = goog.dom.getFirstElementChild; +goog.dom.DomHelper.prototype.getLastElementChild = goog.dom.getLastElementChild; +goog.dom.DomHelper.prototype.getNextElementSibling = goog.dom.getNextElementSibling; +goog.dom.DomHelper.prototype.getPreviousElementSibling = goog.dom.getPreviousElementSibling; +goog.dom.DomHelper.prototype.getNextNode = goog.dom.getNextNode; +goog.dom.DomHelper.prototype.getPreviousNode = goog.dom.getPreviousNode; +goog.dom.DomHelper.prototype.isNodeLike = goog.dom.isNodeLike; +goog.dom.DomHelper.prototype.isElement = goog.dom.isElement; +goog.dom.DomHelper.prototype.isWindow = goog.dom.isWindow; +goog.dom.DomHelper.prototype.getParentElement = goog.dom.getParentElement; +goog.dom.DomHelper.prototype.contains = goog.dom.contains; +goog.dom.DomHelper.prototype.compareNodeOrder = goog.dom.compareNodeOrder; +goog.dom.DomHelper.prototype.findCommonAncestor = goog.dom.findCommonAncestor; +goog.dom.DomHelper.prototype.getOwnerDocument = goog.dom.getOwnerDocument; +goog.dom.DomHelper.prototype.getFrameContentDocument = goog.dom.getFrameContentDocument; +goog.dom.DomHelper.prototype.getFrameContentWindow = goog.dom.getFrameContentWindow; +goog.dom.DomHelper.prototype.setTextContent = goog.dom.setTextContent; +goog.dom.DomHelper.prototype.getOuterHtml = goog.dom.getOuterHtml; +goog.dom.DomHelper.prototype.findNode = goog.dom.findNode; +goog.dom.DomHelper.prototype.findNodes = goog.dom.findNodes; +goog.dom.DomHelper.prototype.isFocusableTabIndex = goog.dom.isFocusableTabIndex; +goog.dom.DomHelper.prototype.setFocusableTabIndex = goog.dom.setFocusableTabIndex; +goog.dom.DomHelper.prototype.getTextContent = goog.dom.getTextContent; +goog.dom.DomHelper.prototype.getNodeTextLength = goog.dom.getNodeTextLength; +goog.dom.DomHelper.prototype.getNodeTextOffset = goog.dom.getNodeTextOffset; +goog.dom.DomHelper.prototype.getNodeAtOffset = goog.dom.getNodeAtOffset; +goog.dom.DomHelper.prototype.isNodeList = goog.dom.isNodeList; +goog.dom.DomHelper.prototype.getAncestorByTagNameAndClass = goog.dom.getAncestorByTagNameAndClass; +goog.dom.DomHelper.prototype.getAncestorByClass = goog.dom.getAncestorByClass; +goog.dom.DomHelper.prototype.getAncestor = goog.dom.getAncestor; +goog.provide("ol.webgl"); +goog.provide("ol.webgl.WebGLContextEventType"); +ol.webgl.CONTEXT_IDS_ = ["experimental-webgl", "webgl", "webkit-3d", "moz-webgl"]; +ol.webgl.WebGLContextEventType = {LOST:"webglcontextlost", RESTORED:"webglcontextrestored"}; +ol.webgl.getContext = function(canvas, opt_attributes) { + var context, i, ii = ol.webgl.CONTEXT_IDS_.length; + for(i = 0;i < ii;++i) { + try { + context = canvas.getContext(ol.webgl.CONTEXT_IDS_[i], opt_attributes); + if(!goog.isNull(context)) { + return(context) + } + }catch(e) { + } + } + return null +}; +goog.provide("ol.BrowserFeature"); +goog.require("goog.dom"); +goog.require("goog.dom.TagName"); +goog.require("goog.userAgent"); +goog.require("ol.webgl"); +ol.ASSUME_TOUCH = false; +ol.ENABLE_CANVAS = true; +ol.ENABLE_DOM = true; +ol.ENABLE_IMAGE = true; +ol.ENABLE_TILE = true; +ol.ENABLE_VECTOR = true; +ol.ENABLE_WEBGL = true; +ol.LEGACY_IE_SUPPORT = false; +ol.IS_LEGACY_IE = goog.userAgent.IE && !goog.userAgent.isVersionOrHigher("9.0") && goog.userAgent.VERSION !== ""; +ol.BrowserFeature.DEVICE_PIXEL_RATIO = goog.global.devicePixelRatio || 1; +ol.BrowserFeature.HAS_ARRAY_BUFFER = "ArrayBuffer" in goog.global; +ol.BrowserFeature.HAS_CANVAS_LINE_DASH = false; +ol.BrowserFeature.HAS_CANVAS = ol.ENABLE_CANVAS && function() { + if(!("HTMLCanvasElement" in goog.global)) { + return false + } + try { + var canvas = (goog.dom.createElement(goog.dom.TagName.CANVAS)); + var context = (canvas.getContext("2d")); + if(goog.isNull(context)) { + return false + }else { + if(goog.isDef(context.setLineDash)) { + ol.BrowserFeature.HAS_CANVAS_LINE_DASH = true + } + return true + } + }catch(e) { + return false + } +}(); +ol.BrowserFeature.HAS_DEVICE_ORIENTATION = "DeviceOrientationEvent" in goog.global; +ol.BrowserFeature.HAS_DOM = ol.ENABLE_DOM; +ol.BrowserFeature.HAS_GEOLOCATION = "geolocation" in goog.global.navigator; +ol.BrowserFeature.HAS_TOUCH = ol.ASSUME_TOUCH || goog.global.document && "ontouchstart" in goog.global.document.documentElement || !!goog.global.navigator.msPointerEnabled; +ol.BrowserFeature.HAS_WEBGL = ol.ENABLE_WEBGL && function() { + if(!("WebGLRenderingContext" in goog.global)) { + return false + } + try { + var canvas = (goog.dom.createElement(goog.dom.TagName.CANVAS)); + return!goog.isNull(ol.webgl.getContext(canvas, {failIfMajorPerformanceCaveat:true})) + }catch(e) { + return false + } +}(); +goog.provide("ol.CanvasFunctionType"); +ol.CanvasFunctionType; +goog.provide("ol.CenterConstraint"); +goog.provide("ol.CenterConstraintType"); +goog.require("goog.math"); +ol.CenterConstraintType; +ol.CenterConstraint.createExtent = function(extent) { + return function(center) { + if(goog.isDef(center)) { + return[goog.math.clamp(center[0], extent[0], extent[2]), goog.math.clamp(center[1], extent[1], extent[3])] + }else { + return undefined + } + } +}; +ol.CenterConstraint.none = function(center) { + return center +}; +goog.provide("goog.disposable.IDisposable"); +goog.disposable.IDisposable = function() { +}; +goog.disposable.IDisposable.prototype.dispose; +goog.disposable.IDisposable.prototype.isDisposed; +goog.provide("goog.Disposable"); +goog.provide("goog.dispose"); +goog.require("goog.disposable.IDisposable"); +goog.Disposable = function() { + if(goog.Disposable.MONITORING_MODE != goog.Disposable.MonitoringMode.OFF) { + if(goog.Disposable.INCLUDE_STACK_ON_CREATION) { + this.creationStack = (new Error).stack + } + goog.Disposable.instances_[goog.getUid(this)] = this + } +}; +goog.Disposable.MonitoringMode = {OFF:0, PERMANENT:1, INTERACTIVE:2}; +goog.define("goog.Disposable.MONITORING_MODE", 0); +goog.define("goog.Disposable.INCLUDE_STACK_ON_CREATION", true); +goog.Disposable.instances_ = {}; +goog.Disposable.getUndisposedObjects = function() { + var ret = []; + for(var id in goog.Disposable.instances_) { + if(goog.Disposable.instances_.hasOwnProperty(id)) { + ret.push(goog.Disposable.instances_[Number(id)]) + } + } + return ret +}; +goog.Disposable.clearUndisposedObjects = function() { + goog.Disposable.instances_ = {} +}; +goog.Disposable.prototype.disposed_ = false; +goog.Disposable.prototype.onDisposeCallbacks_; +goog.Disposable.prototype.creationStack; +goog.Disposable.prototype.isDisposed = function() { + return this.disposed_ +}; +goog.Disposable.prototype.getDisposed = goog.Disposable.prototype.isDisposed; +goog.Disposable.prototype.dispose = function() { + if(!this.disposed_) { + this.disposed_ = true; + this.disposeInternal(); + if(goog.Disposable.MONITORING_MODE != goog.Disposable.MonitoringMode.OFF) { + var uid = goog.getUid(this); + if(goog.Disposable.MONITORING_MODE == goog.Disposable.MonitoringMode.PERMANENT && !goog.Disposable.instances_.hasOwnProperty(uid)) { + throw Error(this + " did not call the goog.Disposable base " + "constructor or was disposed of after a clearUndisposedObjects " + "call"); + } + delete goog.Disposable.instances_[uid] + } + } +}; +goog.Disposable.prototype.registerDisposable = function(disposable) { + this.addOnDisposeCallback(goog.partial(goog.dispose, disposable)) +}; +goog.Disposable.prototype.addOnDisposeCallback = function(callback, opt_scope) { + if(!this.onDisposeCallbacks_) { + this.onDisposeCallbacks_ = [] + } + this.onDisposeCallbacks_.push(goog.bind(callback, opt_scope)) +}; +goog.Disposable.prototype.disposeInternal = function() { + if(this.onDisposeCallbacks_) { + while(this.onDisposeCallbacks_.length) { + this.onDisposeCallbacks_.shift()() + } + } +}; +goog.Disposable.isDisposed = function(obj) { + if(obj && typeof obj.isDisposed == "function") { + return obj.isDisposed() + } + return false +}; +goog.dispose = function(obj) { + if(obj && typeof obj.dispose == "function") { + obj.dispose() + } +}; +goog.disposeAll = function(var_args) { + for(var i = 0, len = arguments.length;i < len;++i) { + var disposable = arguments[i]; + if(goog.isArrayLike(disposable)) { + goog.disposeAll.apply(null, disposable) + }else { + goog.dispose(disposable) + } + } +}; +goog.provide("goog.events.Event"); +goog.provide("goog.events.EventLike"); +goog.require("goog.Disposable"); +goog.events.EventLike; +goog.events.Event = function(type, opt_target) { + this.type = type; + this.target = opt_target; + this.currentTarget = this.target +}; +goog.events.Event.prototype.disposeInternal = function() { +}; +goog.events.Event.prototype.dispose = function() { +}; +goog.events.Event.prototype.propagationStopped_ = false; +goog.events.Event.prototype.defaultPrevented = false; +goog.events.Event.prototype.returnValue_ = true; +goog.events.Event.prototype.stopPropagation = function() { + this.propagationStopped_ = true +}; +goog.events.Event.prototype.preventDefault = function() { + this.defaultPrevented = true; + this.returnValue_ = false +}; +goog.events.Event.stopPropagation = function(e) { + e.stopPropagation() +}; +goog.events.Event.preventDefault = function(e) { + e.preventDefault() +}; +goog.provide("goog.debug.EntryPointMonitor"); +goog.provide("goog.debug.entryPointRegistry"); +goog.require("goog.asserts"); +goog.debug.EntryPointMonitor = function() { +}; +goog.debug.EntryPointMonitor.prototype.wrap; +goog.debug.EntryPointMonitor.prototype.unwrap; +goog.debug.entryPointRegistry.refList_ = []; +goog.debug.entryPointRegistry.monitors_ = []; +goog.debug.entryPointRegistry.monitorsMayExist_ = false; +goog.debug.entryPointRegistry.register = function(callback) { + goog.debug.entryPointRegistry.refList_[goog.debug.entryPointRegistry.refList_.length] = callback; + if(goog.debug.entryPointRegistry.monitorsMayExist_) { + var monitors = goog.debug.entryPointRegistry.monitors_; + for(var i = 0;i < monitors.length;i++) { + callback(goog.bind(monitors[i].wrap, monitors[i])) + } + } +}; +goog.debug.entryPointRegistry.monitorAll = function(monitor) { + goog.debug.entryPointRegistry.monitorsMayExist_ = true; + var transformer = goog.bind(monitor.wrap, monitor); + for(var i = 0;i < goog.debug.entryPointRegistry.refList_.length;i++) { + goog.debug.entryPointRegistry.refList_[i](transformer) + } + goog.debug.entryPointRegistry.monitors_.push(monitor) +}; +goog.debug.entryPointRegistry.unmonitorAllIfPossible = function(monitor) { + var monitors = goog.debug.entryPointRegistry.monitors_; + goog.asserts.assert(monitor == monitors[monitors.length - 1], "Only the most recent monitor can be unwrapped."); + var transformer = goog.bind(monitor.unwrap, monitor); + for(var i = 0;i < goog.debug.entryPointRegistry.refList_.length;i++) { + goog.debug.entryPointRegistry.refList_[i](transformer) + } + monitors.length-- +}; +goog.provide("goog.events.BrowserFeature"); +goog.require("goog.userAgent"); +goog.events.BrowserFeature = {HAS_W3C_BUTTON:!goog.userAgent.IE || goog.userAgent.isDocumentModeOrHigher(9), HAS_W3C_EVENT_SUPPORT:!goog.userAgent.IE || goog.userAgent.isDocumentModeOrHigher(9), SET_KEY_CODE_TO_PREVENT_DEFAULT:goog.userAgent.IE && !goog.userAgent.isVersionOrHigher("9"), HAS_NAVIGATOR_ONLINE_PROPERTY:!goog.userAgent.WEBKIT || goog.userAgent.isVersionOrHigher("528"), HAS_HTML5_NETWORK_EVENT_SUPPORT:goog.userAgent.GECKO && goog.userAgent.isVersionOrHigher("1.9b") || goog.userAgent.IE && +goog.userAgent.isVersionOrHigher("8") || goog.userAgent.OPERA && goog.userAgent.isVersionOrHigher("9.5") || goog.userAgent.WEBKIT && goog.userAgent.isVersionOrHigher("528"), HTML5_NETWORK_EVENTS_FIRE_ON_BODY:goog.userAgent.GECKO && !goog.userAgent.isVersionOrHigher("8") || goog.userAgent.IE && !goog.userAgent.isVersionOrHigher("9"), TOUCH_ENABLED:"ontouchstart" in goog.global || !!(goog.global["document"] && document.documentElement && "ontouchstart" in document.documentElement) || !!(goog.global["navigator"] && +goog.global["navigator"]["msMaxTouchPoints"])}; +goog.provide("goog.events.EventType"); +goog.require("goog.userAgent"); +goog.events.EventType = {CLICK:"click", DBLCLICK:"dblclick", MOUSEDOWN:"mousedown", MOUSEUP:"mouseup", MOUSEOVER:"mouseover", MOUSEOUT:"mouseout", MOUSEMOVE:"mousemove", SELECTSTART:"selectstart", KEYPRESS:"keypress", KEYDOWN:"keydown", KEYUP:"keyup", BLUR:"blur", FOCUS:"focus", DEACTIVATE:"deactivate", FOCUSIN:goog.userAgent.IE ? "focusin" : "DOMFocusIn", FOCUSOUT:goog.userAgent.IE ? "focusout" : "DOMFocusOut", CHANGE:"change", SELECT:"select", SUBMIT:"submit", INPUT:"input", PROPERTYCHANGE:"propertychange", +DRAGSTART:"dragstart", DRAG:"drag", DRAGENTER:"dragenter", DRAGOVER:"dragover", DRAGLEAVE:"dragleave", DROP:"drop", DRAGEND:"dragend", TOUCHSTART:"touchstart", TOUCHMOVE:"touchmove", TOUCHEND:"touchend", TOUCHCANCEL:"touchcancel", BEFOREUNLOAD:"beforeunload", CONSOLEMESSAGE:"consolemessage", CONTEXTMENU:"contextmenu", DOMCONTENTLOADED:"DOMContentLoaded", ERROR:"error", HELP:"help", LOAD:"load", LOSECAPTURE:"losecapture", READYSTATECHANGE:"readystatechange", RESIZE:"resize", SCROLL:"scroll", UNLOAD:"unload", +HASHCHANGE:"hashchange", PAGEHIDE:"pagehide", PAGESHOW:"pageshow", POPSTATE:"popstate", COPY:"copy", PASTE:"paste", CUT:"cut", BEFORECOPY:"beforecopy", BEFORECUT:"beforecut", BEFOREPASTE:"beforepaste", ONLINE:"online", OFFLINE:"offline", MESSAGE:"message", CONNECT:"connect", TRANSITIONEND:goog.userAgent.WEBKIT ? "webkitTransitionEnd" : goog.userAgent.OPERA ? "oTransitionEnd" : "transitionend", MSGESTURECHANGE:"MSGestureChange", MSGESTUREEND:"MSGestureEnd", MSGESTUREHOLD:"MSGestureHold", MSGESTURESTART:"MSGestureStart", +MSGESTURETAP:"MSGestureTap", MSGOTPOINTERCAPTURE:"MSGotPointerCapture", MSINERTIASTART:"MSInertiaStart", MSLOSTPOINTERCAPTURE:"MSLostPointerCapture", MSPOINTERCANCEL:"MSPointerCancel", MSPOINTERDOWN:"MSPointerDown", MSPOINTERMOVE:"MSPointerMove", MSPOINTEROVER:"MSPointerOver", MSPOINTEROUT:"MSPointerOut", MSPOINTERUP:"MSPointerUp", TEXTINPUT:"textinput", COMPOSITIONSTART:"compositionstart", COMPOSITIONUPDATE:"compositionupdate", COMPOSITIONEND:"compositionend", EXIT:"exit", LOADABORT:"loadabort", +LOADCOMMIT:"loadcommit", LOADREDIRECT:"loadredirect", LOADSTART:"loadstart", LOADSTOP:"loadstop", RESPONSIVE:"responsive", SIZECHANGED:"sizechanged", UNRESPONSIVE:"unresponsive"}; +goog.provide("goog.reflect"); +goog.reflect.object = function(type, object) { + return object +}; +goog.reflect.sinkValue = function(x) { + goog.reflect.sinkValue[" "](x); + return x +}; +goog.reflect.sinkValue[" "] = goog.nullFunction; +goog.reflect.canAccessProperty = function(obj, prop) { + try { + goog.reflect.sinkValue(obj[prop]); + return true + }catch(e) { + } + return false +}; +goog.provide("goog.events.BrowserEvent"); +goog.provide("goog.events.BrowserEvent.MouseButton"); +goog.require("goog.events.BrowserFeature"); +goog.require("goog.events.Event"); +goog.require("goog.events.EventType"); +goog.require("goog.reflect"); +goog.require("goog.userAgent"); +goog.events.BrowserEvent = function(opt_e, opt_currentTarget) { + if(opt_e) { + this.init(opt_e, opt_currentTarget) + } +}; +goog.inherits(goog.events.BrowserEvent, goog.events.Event); +goog.events.BrowserEvent.MouseButton = {LEFT:0, MIDDLE:1, RIGHT:2}; +goog.events.BrowserEvent.IEButtonMap = [1, 4, 2]; +goog.events.BrowserEvent.prototype.target = null; +goog.events.BrowserEvent.prototype.currentTarget; +goog.events.BrowserEvent.prototype.relatedTarget = null; +goog.events.BrowserEvent.prototype.offsetX = 0; +goog.events.BrowserEvent.prototype.offsetY = 0; +goog.events.BrowserEvent.prototype.clientX = 0; +goog.events.BrowserEvent.prototype.clientY = 0; +goog.events.BrowserEvent.prototype.screenX = 0; +goog.events.BrowserEvent.prototype.screenY = 0; +goog.events.BrowserEvent.prototype.button = 0; +goog.events.BrowserEvent.prototype.keyCode = 0; +goog.events.BrowserEvent.prototype.charCode = 0; +goog.events.BrowserEvent.prototype.ctrlKey = false; +goog.events.BrowserEvent.prototype.altKey = false; +goog.events.BrowserEvent.prototype.shiftKey = false; +goog.events.BrowserEvent.prototype.metaKey = false; +goog.events.BrowserEvent.prototype.state; +goog.events.BrowserEvent.prototype.platformModifierKey = false; +goog.events.BrowserEvent.prototype.event_ = null; +goog.events.BrowserEvent.prototype.init = function(e, opt_currentTarget) { + var type = this.type = e.type; + goog.events.Event.call(this, type); + this.target = (e.target) || e.srcElement; + this.currentTarget = (opt_currentTarget); + var relatedTarget = (e.relatedTarget); + if(relatedTarget) { + if(goog.userAgent.GECKO) { + if(!goog.reflect.canAccessProperty(relatedTarget, "nodeName")) { + relatedTarget = null + } + } + }else { + if(type == goog.events.EventType.MOUSEOVER) { + relatedTarget = e.fromElement + }else { + if(type == goog.events.EventType.MOUSEOUT) { + relatedTarget = e.toElement + } + } + } + this.relatedTarget = relatedTarget; + this.offsetX = goog.userAgent.WEBKIT || e.offsetX !== undefined ? e.offsetX : e.layerX; + this.offsetY = goog.userAgent.WEBKIT || e.offsetY !== undefined ? e.offsetY : e.layerY; + this.clientX = e.clientX !== undefined ? e.clientX : e.pageX; + this.clientY = e.clientY !== undefined ? e.clientY : e.pageY; + this.screenX = e.screenX || 0; + this.screenY = e.screenY || 0; + this.button = e.button; + this.keyCode = e.keyCode || 0; + this.charCode = e.charCode || (type == "keypress" ? e.keyCode : 0); + this.ctrlKey = e.ctrlKey; + this.altKey = e.altKey; + this.shiftKey = e.shiftKey; + this.metaKey = e.metaKey; + this.platformModifierKey = goog.userAgent.MAC ? e.metaKey : e.ctrlKey; + this.state = e.state; + this.event_ = e; + if(e.defaultPrevented) { + this.preventDefault() + } + delete this.propagationStopped_ +}; +goog.events.BrowserEvent.prototype.isButton = function(button) { + if(!goog.events.BrowserFeature.HAS_W3C_BUTTON) { + if(this.type == "click") { + return button == goog.events.BrowserEvent.MouseButton.LEFT + }else { + return!!(this.event_.button & goog.events.BrowserEvent.IEButtonMap[button]) + } + }else { + return this.event_.button == button + } +}; +goog.events.BrowserEvent.prototype.isMouseActionButton = function() { + return this.isButton(goog.events.BrowserEvent.MouseButton.LEFT) && !(goog.userAgent.WEBKIT && goog.userAgent.MAC && this.ctrlKey) +}; +goog.events.BrowserEvent.prototype.stopPropagation = function() { + goog.events.BrowserEvent.superClass_.stopPropagation.call(this); + if(this.event_.stopPropagation) { + this.event_.stopPropagation() + }else { + this.event_.cancelBubble = true + } +}; +goog.events.BrowserEvent.prototype.preventDefault = function() { + goog.events.BrowserEvent.superClass_.preventDefault.call(this); + var be = this.event_; + if(!be.preventDefault) { + be.returnValue = false; + if(goog.events.BrowserFeature.SET_KEY_CODE_TO_PREVENT_DEFAULT) { + try { + var VK_F1 = 112; + var VK_F12 = 123; + if(be.ctrlKey || be.keyCode >= VK_F1 && be.keyCode <= VK_F12) { + be.keyCode = -1 + } + }catch(ex) { + } + } + }else { + be.preventDefault() + } +}; +goog.events.BrowserEvent.prototype.getBrowserEvent = function() { + return this.event_ +}; +goog.events.BrowserEvent.prototype.disposeInternal = function() { +}; +goog.provide("goog.events.Listenable"); +goog.provide("goog.events.ListenableKey"); +goog.events.Listenable = function() { +}; +goog.events.Listenable.IMPLEMENTED_BY_PROP = "closure_listenable_" + (Math.random() * 1E6 | 0); +goog.events.Listenable.addImplementation = function(cls) { + cls.prototype[goog.events.Listenable.IMPLEMENTED_BY_PROP] = true +}; +goog.events.Listenable.isImplementedBy = function(obj) { + return!!(obj && obj[goog.events.Listenable.IMPLEMENTED_BY_PROP]) +}; +goog.events.Listenable.prototype.listen; +goog.events.Listenable.prototype.listenOnce; +goog.events.Listenable.prototype.unlisten; +goog.events.Listenable.prototype.unlistenByKey; +goog.events.Listenable.prototype.dispatchEvent; +goog.events.Listenable.prototype.removeAllListeners; +goog.events.Listenable.prototype.getParentEventTarget; +goog.events.Listenable.prototype.fireListeners; +goog.events.Listenable.prototype.getListeners; +goog.events.Listenable.prototype.getListener; +goog.events.Listenable.prototype.hasListener; +goog.events.ListenableKey = function() { +}; +goog.events.ListenableKey.counter_ = 0; +goog.events.ListenableKey.reserveKey = function() { + return++goog.events.ListenableKey.counter_ +}; +goog.events.ListenableKey.prototype.src; +goog.events.ListenableKey.prototype.type; +goog.events.ListenableKey.prototype.listener; +goog.events.ListenableKey.prototype.capture; +goog.events.ListenableKey.prototype.handler; +goog.events.ListenableKey.prototype.key; +goog.provide("goog.events.Listener"); +goog.require("goog.events.ListenableKey"); +goog.events.Listener = function(listener, proxy, src, type, capture, opt_handler) { + if(goog.events.Listener.ENABLE_MONITORING) { + this.creationStack = (new Error).stack + } + this.listener = listener; + this.proxy = proxy; + this.src = src; + this.type = type; + this.capture = !!capture; + this.handler = opt_handler; + this.key = goog.events.ListenableKey.reserveKey(); + this.callOnce = false; + this.removed = false +}; +goog.define("goog.events.Listener.ENABLE_MONITORING", false); +goog.events.Listener.prototype.creationStack; +goog.events.Listener.prototype.markAsRemoved = function() { + this.removed = true; + this.listener = null; + this.proxy = null; + this.src = null; + this.handler = null +}; +goog.provide("goog.events"); +goog.provide("goog.events.Key"); +goog.provide("goog.events.ListenableType"); +goog.require("goog.array"); +goog.require("goog.asserts"); +goog.require("goog.debug.entryPointRegistry"); +goog.require("goog.events.BrowserEvent"); +goog.require("goog.events.BrowserFeature"); +goog.require("goog.events.Listenable"); +goog.require("goog.events.Listener"); +goog.require("goog.object"); +goog.events.Key; +goog.events.ListenableType; +goog.events.listeners_ = {}; +goog.events.listenerTree_ = {}; +goog.events.sources_ = {}; +goog.events.onString_ = "on"; +goog.events.onStringMap_ = {}; +goog.events.keySeparator_ = "_"; +goog.events.listen = function(src, type, listener, opt_capt, opt_handler) { + if(goog.isArray(type)) { + for(var i = 0;i < type.length;i++) { + goog.events.listen(src, type[i], listener, opt_capt, opt_handler) + } + return null + } + listener = goog.events.wrapListener_(listener); + if(goog.events.Listenable.isImplementedBy(src)) { + return src.listen((type), listener, opt_capt, opt_handler) + }else { + return goog.events.listen_((src), type, listener, false, opt_capt, opt_handler) + } +}; +goog.events.listen_ = function(src, type, listener, callOnce, opt_capt, opt_handler) { + if(!type) { + throw Error("Invalid event type"); + } + var capture = !!opt_capt; + var map = goog.events.listenerTree_; + if(!(type in map)) { + map[type] = {count_:0} + } + map = map[type]; + if(!(capture in map)) { + map[capture] = {count_:0}; + map.count_++ + } + map = map[capture]; + var srcUid = goog.getUid(src); + var listenerArray, listenerObj; + if(!map[srcUid]) { + listenerArray = map[srcUid] = []; + map.count_++ + }else { + listenerArray = map[srcUid]; + for(var i = 0;i < listenerArray.length;i++) { + listenerObj = listenerArray[i]; + if(listenerObj.listener == listener && listenerObj.handler == opt_handler) { + if(listenerObj.removed) { + break + } + if(!callOnce) { + listenerArray[i].callOnce = false + } + return listenerArray[i] + } + } + } + var proxy = goog.events.getProxy(); + listenerObj = new goog.events.Listener(listener, proxy, src, type, capture, opt_handler); + listenerObj.callOnce = callOnce; + proxy.src = src; + proxy.listener = listenerObj; + listenerArray.push(listenerObj); + if(!goog.events.sources_[srcUid]) { + goog.events.sources_[srcUid] = [] + } + goog.events.sources_[srcUid].push(listenerObj); + if(src.addEventListener) { + src.addEventListener(type, proxy, capture) + }else { + src.attachEvent(goog.events.getOnString_(type), proxy) + } + var key = listenerObj.key; + goog.events.listeners_[key] = listenerObj; + return listenerObj +}; +goog.events.getProxy = function() { + var proxyCallbackFunction = goog.events.handleBrowserEvent_; + var f = goog.events.BrowserFeature.HAS_W3C_EVENT_SUPPORT ? function(eventObject) { + return proxyCallbackFunction.call(f.src, f.listener, eventObject) + } : function(eventObject) { + var v = proxyCallbackFunction.call(f.src, f.listener, eventObject); + if(!v) { + return v + } + }; + return f +}; +goog.events.listenOnce = function(src, type, listener, opt_capt, opt_handler) { + if(goog.isArray(type)) { + for(var i = 0;i < type.length;i++) { + goog.events.listenOnce(src, type[i], listener, opt_capt, opt_handler) + } + return null + } + var listenableKey; + listener = goog.events.wrapListener_(listener); + if(goog.events.Listenable.isImplementedBy(src)) { + listenableKey = src.listenOnce((type), listener, opt_capt, opt_handler) + }else { + listenableKey = goog.events.listen_((src), type, listener, true, opt_capt, opt_handler) + } + return listenableKey +}; +goog.events.listenWithWrapper = function(src, wrapper, listener, opt_capt, opt_handler) { + wrapper.listen(src, listener, opt_capt, opt_handler) +}; +goog.events.unlisten = function(src, type, listener, opt_capt, opt_handler) { + if(goog.isArray(type)) { + for(var i = 0;i < type.length;i++) { + goog.events.unlisten(src, type[i], listener, opt_capt, opt_handler) + } + return null + } + listener = goog.events.wrapListener_(listener); + if(goog.events.Listenable.isImplementedBy(src)) { + return src.unlisten((type), listener, opt_capt, opt_handler) + } + var capture = !!opt_capt; + var listenerArray = goog.events.getListeners_(src, type, capture); + if(!listenerArray) { + return false + } + for(var i = 0;i < listenerArray.length;i++) { + if(listenerArray[i].listener == listener && listenerArray[i].capture == capture && listenerArray[i].handler == opt_handler) { + return goog.events.unlistenByKey(listenerArray[i]) + } + } + return false +}; +goog.events.unlistenByKey = function(key) { + if(goog.isNumber(key)) { + return false + } + var listener = (key); + if(!listener) { + return false + } + if(listener.removed) { + return false + } + var src = listener.src; + if(goog.events.Listenable.isImplementedBy(src)) { + return src.unlistenByKey(listener) + } + var type = listener.type; + var proxy = listener.proxy; + var capture = listener.capture; + if(src.removeEventListener) { + src.removeEventListener(type, proxy, capture) + }else { + if(src.detachEvent) { + src.detachEvent(goog.events.getOnString_(type), proxy) + } + } + var srcUid = goog.getUid(src); + if(goog.events.sources_[srcUid]) { + var sourcesArray = goog.events.sources_[srcUid]; + goog.array.remove(sourcesArray, listener); + if(sourcesArray.length == 0) { + delete goog.events.sources_[srcUid] + } + } + listener.markAsRemoved(); + var listenerArray = goog.events.listenerTree_[type][capture][srcUid]; + if(listenerArray) { + goog.array.remove(listenerArray, listener); + if(listenerArray.length == 0) { + delete goog.events.listenerTree_[type][capture][srcUid]; + goog.events.listenerTree_[type][capture].count_-- + } + if(goog.events.listenerTree_[type][capture].count_ == 0) { + delete goog.events.listenerTree_[type][capture]; + goog.events.listenerTree_[type].count_-- + } + if(goog.events.listenerTree_[type].count_ == 0) { + delete goog.events.listenerTree_[type] + } + } + delete goog.events.listeners_[listener.key]; + return true +}; +goog.events.unlistenWithWrapper = function(src, wrapper, listener, opt_capt, opt_handler) { + wrapper.unlisten(src, listener, opt_capt, opt_handler) +}; +goog.events.removeAll = function(opt_obj, opt_type) { + var count = 0; + var noObj = opt_obj == null; + var noType = opt_type == null; + if(!noObj) { + if(opt_obj && goog.events.Listenable.isImplementedBy(opt_obj)) { + return opt_obj.removeAllListeners(opt_type) + } + var srcUid = goog.getUid((opt_obj)); + if(goog.events.sources_[srcUid]) { + var sourcesArray = goog.events.sources_[srcUid]; + for(var i = sourcesArray.length - 1;i >= 0;i--) { + var listener = sourcesArray[i]; + if(noType || opt_type == listener.type) { + goog.events.unlistenByKey(listener); + count++ + } + } + } + }else { + goog.object.forEach(goog.events.listeners_, function(listener) { + goog.events.unlistenByKey(listener); + count++ + }) + } + return count +}; +goog.events.removeAllNativeListeners = function() { + var count = 0; + goog.object.forEach(goog.events.listeners_, function(listener) { + goog.events.unlistenByKey(listener); + count++ + }); + return count +}; +goog.events.getListeners = function(obj, type, capture) { + if(goog.events.Listenable.isImplementedBy(obj)) { + return obj.getListeners(type, capture) + }else { + return goog.events.getListeners_(obj, type, capture) || [] + } +}; +goog.events.getListeners_ = function(obj, type, capture) { + var map = goog.events.listenerTree_; + if(type in map) { + map = map[type]; + if(capture in map) { + map = map[capture]; + var objUid = goog.getUid(obj); + if(map[objUid]) { + return map[objUid] + } + } + } + return null +}; +goog.events.getListener = function(src, type, listener, opt_capt, opt_handler) { + var capture = !!opt_capt; + listener = goog.events.wrapListener_(listener); + if(goog.events.Listenable.isImplementedBy(src)) { + return src.getListener((type), listener, capture, opt_handler) + } + var listenerArray = goog.events.getListeners_(src, type, capture); + if(listenerArray) { + for(var i = 0;i < listenerArray.length;i++) { + if(!listenerArray[i].removed && listenerArray[i].listener == listener && listenerArray[i].capture == capture && listenerArray[i].handler == opt_handler) { + return listenerArray[i] + } + } + } + return null +}; +goog.events.hasListener = function(obj, opt_type, opt_capture) { + if(goog.events.Listenable.isImplementedBy(obj)) { + return obj.hasListener(opt_type, opt_capture) + } + var objUid = goog.getUid(obj); + var listeners = goog.events.sources_[objUid]; + if(listeners) { + var hasType = goog.isDef(opt_type); + var hasCapture = goog.isDef(opt_capture); + if(hasType && hasCapture) { + var map = goog.events.listenerTree_[opt_type]; + return!!map && !!map[opt_capture] && objUid in map[opt_capture] + }else { + if(!(hasType || hasCapture)) { + return true + }else { + return goog.array.some(listeners, function(listener) { + return hasType && listener.type == opt_type || hasCapture && listener.capture == opt_capture + }) + } + } + } + return false +}; +goog.events.expose = function(e) { + var str = []; + for(var key in e) { + if(e[key] && e[key].id) { + str.push(key + " \x3d " + e[key] + " (" + e[key].id + ")") + }else { + str.push(key + " \x3d " + e[key]) + } + } + return str.join("\n") +}; +goog.events.getOnString_ = function(type) { + if(type in goog.events.onStringMap_) { + return goog.events.onStringMap_[type] + } + return goog.events.onStringMap_[type] = goog.events.onString_ + type +}; +goog.events.fireListeners = function(obj, type, capture, eventObject) { + if(goog.events.Listenable.isImplementedBy(obj)) { + return obj.fireListeners(type, capture, eventObject) + } + var map = goog.events.listenerTree_; + if(type in map) { + map = map[type]; + if(capture in map) { + return goog.events.fireListeners_(map[capture], obj, type, capture, eventObject) + } + } + return true +}; +goog.events.fireListeners_ = function(map, obj, type, capture, eventObject) { + var retval = 1; + var objUid = goog.getUid(obj); + if(map[objUid]) { + var listenerArray = goog.array.clone(map[objUid]); + for(var i = 0;i < listenerArray.length;i++) { + var listener = listenerArray[i]; + if(listener && !listener.removed) { + retval &= goog.events.fireListener(listener, eventObject) !== false + } + } + } + return Boolean(retval) +}; +goog.events.fireListener = function(listener, eventObject) { + var listenerFn = listener.listener; + var listenerHandler = listener.handler || listener.src; + if(listener.callOnce) { + goog.events.unlistenByKey(listener) + } + return listenerFn.call(listenerHandler, eventObject) +}; +goog.events.getTotalListenerCount = function() { + return goog.object.getCount(goog.events.listeners_) +}; +goog.events.dispatchEvent = function(src, e) { + goog.asserts.assert(goog.events.Listenable.isImplementedBy(src), "Can not use goog.events.dispatchEvent with " + "non-goog.events.Listenable instance."); + return src.dispatchEvent(e) +}; +goog.events.protectBrowserEventEntryPoint = function(errorHandler) { + goog.events.handleBrowserEvent_ = errorHandler.protectEntryPoint(goog.events.handleBrowserEvent_) +}; +goog.events.handleBrowserEvent_ = function(listener, opt_evt) { + if(listener.removed) { + return true + } + var type = listener.type; + var map = goog.events.listenerTree_; + if(!(type in map)) { + return true + } + map = map[type]; + var retval, targetsMap; + if(!goog.events.BrowserFeature.HAS_W3C_EVENT_SUPPORT) { + var ieEvent = opt_evt || (goog.getObjectByName("window.event")); + var hasCapture = true in map; + var hasBubble = false in map; + if(hasCapture) { + if(goog.events.isMarkedIeEvent_(ieEvent)) { + return true + } + goog.events.markIeEvent_(ieEvent) + } + var evt = new goog.events.BrowserEvent; + evt.init(ieEvent, this); + retval = true; + try { + if(hasCapture) { + var ancestors = []; + for(var parent = evt.currentTarget;parent;parent = parent.parentNode) { + ancestors.push(parent) + } + targetsMap = map[true]; + for(var i = ancestors.length - 1;!evt.propagationStopped_ && i >= 0;i--) { + evt.currentTarget = ancestors[i]; + retval &= goog.events.fireListeners_(targetsMap, ancestors[i], type, true, evt) + } + if(hasBubble) { + targetsMap = map[false]; + for(var i = 0;!evt.propagationStopped_ && i < ancestors.length;i++) { + evt.currentTarget = ancestors[i]; + retval &= goog.events.fireListeners_(targetsMap, ancestors[i], type, false, evt) + } + } + }else { + retval = goog.events.fireListener(listener, evt) + } + }finally { + if(ancestors) { + ancestors.length = 0 + } + } + return retval + } + var be = new goog.events.BrowserEvent(opt_evt, (this)); + retval = goog.events.fireListener(listener, be); + return retval +}; +goog.events.markIeEvent_ = function(e) { + var useReturnValue = false; + if(e.keyCode == 0) { + try { + e.keyCode = -1; + return + }catch(ex) { + useReturnValue = true + } + } + if(useReturnValue || (e.returnValue) == undefined) { + e.returnValue = true + } +}; +goog.events.isMarkedIeEvent_ = function(e) { + return e.keyCode < 0 || e.returnValue != undefined +}; +goog.events.uniqueIdCounter_ = 0; +goog.events.getUniqueId = function(identifier) { + return identifier + "_" + goog.events.uniqueIdCounter_++ +}; +goog.events.LISTENER_WRAPPER_PROP_ = "__closure_events_fn_" + (Math.random() * 1E9 >>> 0); +goog.events.wrapListener_ = function(listener) { + goog.asserts.assert(listener, "Listener can not be null."); + if(goog.isFunction(listener)) { + return listener + } + goog.asserts.assert(listener.handleEvent, "An object listener must have handleEvent method."); + return listener[goog.events.LISTENER_WRAPPER_PROP_] || (listener[goog.events.LISTENER_WRAPPER_PROP_] = function(e) { + return listener.handleEvent(e) + }) +}; +goog.debug.entryPointRegistry.register(function(transformer) { + goog.events.handleBrowserEvent_ = transformer(goog.events.handleBrowserEvent_) +}); +goog.provide("goog.functions"); +goog.functions.constant = function(retValue) { + return function() { + return retValue + } +}; +goog.functions.FALSE = goog.functions.constant(false); +goog.functions.TRUE = goog.functions.constant(true); +goog.functions.NULL = goog.functions.constant(null); +goog.functions.identity = function(opt_returnValue, var_args) { + return opt_returnValue +}; +goog.functions.error = function(message) { + return function() { + throw Error(message); + } +}; +goog.functions.fail = function(err) { + return function() { + throw err; + } +}; +goog.functions.lock = function(f, opt_numArgs) { + opt_numArgs = opt_numArgs || 0; + return function() { + return f.apply(this, Array.prototype.slice.call(arguments, 0, opt_numArgs)) + } +}; +goog.functions.withReturnValue = function(f, retValue) { + return goog.functions.sequence(f, goog.functions.constant(retValue)) +}; +goog.functions.compose = function(fn, var_args) { + var functions = arguments; + var length = functions.length; + return function() { + var result; + if(length) { + result = functions[length - 1].apply(this, arguments) + } + for(var i = length - 2;i >= 0;i--) { + result = functions[i].call(this, result) + } + return result + } +}; +goog.functions.sequence = function(var_args) { + var functions = arguments; + var length = functions.length; + return function() { + var result; + for(var i = 0;i < length;i++) { + result = functions[i].apply(this, arguments) + } + return result + } +}; +goog.functions.and = function(var_args) { + var functions = arguments; + var length = functions.length; + return function() { + for(var i = 0;i < length;i++) { + if(!functions[i].apply(this, arguments)) { + return false + } + } + return true + } +}; +goog.functions.or = function(var_args) { + var functions = arguments; + var length = functions.length; + return function() { + for(var i = 0;i < length;i++) { + if(functions[i].apply(this, arguments)) { + return true + } + } + return false + } +}; +goog.functions.not = function(f) { + return function() { + return!f.apply(this, arguments) + } +}; +goog.functions.create = function(constructor, var_args) { + var temp = function() { + }; + temp.prototype = constructor.prototype; + var obj = new temp; + constructor.apply(obj, Array.prototype.slice.call(arguments, 1)); + return obj +}; +goog.provide("goog.events.ListenerMap"); +goog.require("goog.array"); +goog.require("goog.events.Listener"); +goog.require("goog.object"); +goog.events.ListenerMap = function(src) { + this.src = src; + this.listeners = {}; + this.typeCount_ = 0 +}; +goog.events.ListenerMap.prototype.getTypeCount = function() { + return this.typeCount_ +}; +goog.events.ListenerMap.prototype.getListenerCount = function() { + var count = 0; + for(var type in this.listeners) { + count += this.listeners[type].length + } + return count +}; +goog.events.ListenerMap.prototype.add = function(type, listener, callOnce, opt_useCapture, opt_listenerScope) { + var listenerArray = this.listeners[type]; + if(!listenerArray) { + listenerArray = this.listeners[type] = []; + this.typeCount_++ + } + var listenerObj; + var index = goog.events.ListenerMap.findListenerIndex_(listenerArray, listener, opt_useCapture, opt_listenerScope); + if(index > -1) { + listenerObj = listenerArray[index]; + if(!callOnce) { + listenerObj.callOnce = false + } + }else { + listenerObj = new goog.events.Listener(listener, null, this.src, type, !!opt_useCapture, opt_listenerScope); + listenerObj.callOnce = callOnce; + listenerArray.push(listenerObj) + } + return listenerObj +}; +goog.events.ListenerMap.prototype.remove = function(type, listener, opt_useCapture, opt_listenerScope) { + if(!(type in this.listeners)) { + return false + } + var listenerArray = this.listeners[type]; + var index = goog.events.ListenerMap.findListenerIndex_(listenerArray, listener, opt_useCapture, opt_listenerScope); + if(index > -1) { + var listenerObj = listenerArray[index]; + listenerObj.markAsRemoved(); + goog.array.removeAt(listenerArray, index); + if(listenerArray.length == 0) { + delete this.listeners[type]; + this.typeCount_-- + } + return true + } + return false +}; +goog.events.ListenerMap.prototype.removeByKey = function(listener) { + var type = listener.type; + if(!(type in this.listeners)) { + return false + } + var removed = goog.array.remove(this.listeners[type], listener); + if(removed) { + listener.markAsRemoved(); + if(this.listeners[type].length == 0) { + delete this.listeners[type]; + this.typeCount_-- + } + } + return removed +}; +goog.events.ListenerMap.prototype.removeAll = function(opt_type) { + var count = 0; + for(var type in this.listeners) { + if(!opt_type || type == opt_type) { + var listenerArray = this.listeners[type]; + for(var i = 0;i < listenerArray.length;i++) { + ++count; + listenerArray[i].removed = true + } + delete this.listeners[type]; + this.typeCount_-- + } + } + return count +}; +goog.events.ListenerMap.prototype.getListeners = function(type, capture) { + var listenerArray = this.listeners[type]; + var rv = []; + if(listenerArray) { + for(var i = 0;i < listenerArray.length;++i) { + var listenerObj = listenerArray[i]; + if(listenerObj.capture == capture) { + rv.push(listenerObj) + } + } + } + return rv +}; +goog.events.ListenerMap.prototype.getListener = function(type, listener, capture, opt_listenerScope) { + var listenerArray = this.listeners[type]; + var i = -1; + if(listenerArray) { + i = goog.events.ListenerMap.findListenerIndex_(listenerArray, listener, capture, opt_listenerScope) + } + return i > -1 ? listenerArray[i] : null +}; +goog.events.ListenerMap.prototype.hasListener = function(opt_type, opt_capture) { + var hasType = goog.isDef(opt_type); + var hasCapture = goog.isDef(opt_capture); + return goog.object.some(this.listeners, function(listenerArray, type) { + for(var i = 0;i < listenerArray.length;++i) { + if((!hasType || listenerArray[i].type == opt_type) && (!hasCapture || listenerArray[i].capture == opt_capture)) { + return true + } + } + return false + }) +}; +goog.events.ListenerMap.findListenerIndex_ = function(listenerArray, listener, opt_useCapture, opt_listenerScope) { + for(var i = 0;i < listenerArray.length;++i) { + var listenerObj = listenerArray[i]; + if(!listenerObj.removed && listenerObj.listener == listener && listenerObj.capture == !!opt_useCapture && listenerObj.handler == opt_listenerScope) { + return i + } + } + return-1 +}; +goog.provide("goog.events.EventTarget"); +goog.require("goog.Disposable"); +goog.require("goog.array"); +goog.require("goog.asserts"); +goog.require("goog.events"); +goog.require("goog.events.Event"); +goog.require("goog.events.Listenable"); +goog.require("goog.events.ListenerMap"); +goog.require("goog.object"); +goog.events.EventTarget = function() { + goog.Disposable.call(this); + this.eventTargetListeners_ = new goog.events.ListenerMap(this); + this.actualEventTarget_ = this +}; +goog.inherits(goog.events.EventTarget, goog.Disposable); +goog.events.Listenable.addImplementation(goog.events.EventTarget); +goog.events.EventTarget.MAX_ANCESTORS_ = 1E3; +goog.events.EventTarget.prototype.parentEventTarget_ = null; +goog.events.EventTarget.prototype.getParentEventTarget = function() { + return this.parentEventTarget_ +}; +goog.events.EventTarget.prototype.setParentEventTarget = function(parent) { + this.parentEventTarget_ = parent +}; +goog.events.EventTarget.prototype.addEventListener = function(type, handler, opt_capture, opt_handlerScope) { + goog.events.listen(this, type, handler, opt_capture, opt_handlerScope) +}; +goog.events.EventTarget.prototype.removeEventListener = function(type, handler, opt_capture, opt_handlerScope) { + goog.events.unlisten(this, type, handler, opt_capture, opt_handlerScope) +}; +goog.events.EventTarget.prototype.dispatchEvent = function(e) { + this.assertInitialized_(); + var ancestorsTree, ancestor = this.getParentEventTarget(); + if(ancestor) { + ancestorsTree = []; + var ancestorCount = 1; + for(;ancestor;ancestor = ancestor.getParentEventTarget()) { + ancestorsTree.push(ancestor); + goog.asserts.assert(++ancestorCount < goog.events.EventTarget.MAX_ANCESTORS_, "infinite loop") + } + } + return goog.events.EventTarget.dispatchEventInternal_(this.actualEventTarget_, e, ancestorsTree) +}; +goog.events.EventTarget.prototype.disposeInternal = function() { + goog.events.EventTarget.superClass_.disposeInternal.call(this); + this.removeAllListeners(); + this.parentEventTarget_ = null +}; +goog.events.EventTarget.prototype.listen = function(type, listener, opt_useCapture, opt_listenerScope) { + this.assertInitialized_(); + return this.eventTargetListeners_.add(type, listener, false, opt_useCapture, opt_listenerScope) +}; +goog.events.EventTarget.prototype.listenOnce = function(type, listener, opt_useCapture, opt_listenerScope) { + return this.eventTargetListeners_.add(type, listener, true, opt_useCapture, opt_listenerScope) +}; +goog.events.EventTarget.prototype.unlisten = function(type, listener, opt_useCapture, opt_listenerScope) { + return this.eventTargetListeners_.remove(type, listener, opt_useCapture, opt_listenerScope) +}; +goog.events.EventTarget.prototype.unlistenByKey = function(key) { + return this.eventTargetListeners_.removeByKey(key) +}; +goog.events.EventTarget.prototype.removeAllListeners = function(opt_type) { + if(!this.eventTargetListeners_) { + return 0 + } + return this.eventTargetListeners_.removeAll(opt_type) +}; +goog.events.EventTarget.prototype.fireListeners = function(type, capture, eventObject) { + var listenerArray = this.eventTargetListeners_.listeners[type]; + if(!listenerArray) { + return true + } + listenerArray = goog.array.clone(listenerArray); + var rv = true; + for(var i = 0;i < listenerArray.length;++i) { + var listener = listenerArray[i]; + if(listener && !listener.removed && listener.capture == capture) { + var listenerFn = listener.listener; + var listenerHandler = listener.handler || listener.src; + if(listener.callOnce) { + this.unlistenByKey(listener) + } + rv = listenerFn.call(listenerHandler, eventObject) !== false && rv + } + } + return rv && eventObject.returnValue_ != false +}; +goog.events.EventTarget.prototype.getListeners = function(type, capture) { + return this.eventTargetListeners_.getListeners(type, capture) +}; +goog.events.EventTarget.prototype.getListener = function(type, listener, capture, opt_listenerScope) { + return this.eventTargetListeners_.getListener(type, listener, capture, opt_listenerScope) +}; +goog.events.EventTarget.prototype.hasListener = function(opt_type, opt_capture) { + return this.eventTargetListeners_.hasListener(opt_type, opt_capture) +}; +goog.events.EventTarget.prototype.setTargetForTesting = function(target) { + this.actualEventTarget_ = target +}; +goog.events.EventTarget.prototype.assertInitialized_ = function() { + goog.asserts.assert(this.eventTargetListeners_, "Event target is not initialized. Did you call the superclass " + "(goog.events.EventTarget) constructor?") +}; +goog.events.EventTarget.dispatchEventInternal_ = function(target, e, opt_ancestorsTree) { + var type = e.type || (e); + if(goog.isString(e)) { + e = new goog.events.Event(e, target) + }else { + if(!(e instanceof goog.events.Event)) { + var oldEvent = e; + e = new goog.events.Event(type, target); + goog.object.extend(e, oldEvent) + }else { + e.target = e.target || target + } + } + var rv = true, currentTarget; + if(opt_ancestorsTree) { + for(var i = opt_ancestorsTree.length - 1;!e.propagationStopped_ && i >= 0;i--) { + currentTarget = e.currentTarget = opt_ancestorsTree[i]; + rv = currentTarget.fireListeners(type, true, e) && rv + } + } + if(!e.propagationStopped_) { + currentTarget = e.currentTarget = target; + rv = currentTarget.fireListeners(type, true, e) && rv; + if(!e.propagationStopped_) { + rv = currentTarget.fireListeners(type, false, e) && rv + } + } + if(opt_ancestorsTree) { + for(i = 0;!e.propagationStopped_ && i < opt_ancestorsTree.length;i++) { + currentTarget = e.currentTarget = opt_ancestorsTree[i]; + rv = currentTarget.fireListeners(type, false, e) && rv + } + } + return rv +}; +goog.provide("ol.Observable"); +goog.require("goog.events"); +goog.require("goog.events.EventTarget"); +goog.require("goog.events.EventType"); +ol.Observable = function() { + goog.base(this); + this.revision_ = 0 +}; +goog.inherits(ol.Observable, goog.events.EventTarget); +ol.Observable.prototype.dispatchChangeEvent = function() { + ++this.revision_; + this.dispatchEvent(goog.events.EventType.CHANGE) +}; +ol.Observable.prototype.getRevision = function() { + return this.revision_ +}; +ol.Observable.prototype.on = function(type, listener, opt_this) { + return goog.events.listen(this, type, listener, false, opt_this) +}; +ol.Observable.prototype.once = function(type, listener, opt_this) { + return goog.events.listenOnce(this, type, listener, false, opt_this) +}; +ol.Observable.prototype.un = function(type, listener, opt_this) { + goog.events.unlisten(this, type, listener, false, opt_this) +}; +ol.Observable.prototype.unByKey = function(key) { + goog.events.unlistenByKey(key) +}; +goog.provide("ol.Object"); +goog.provide("ol.ObjectEvent"); +goog.provide("ol.ObjectEventType"); +goog.require("goog.array"); +goog.require("goog.events"); +goog.require("goog.events.Event"); +goog.require("goog.functions"); +goog.require("goog.object"); +goog.require("ol.Observable"); +ol.ObjectEventType = {BEFOREPROPERTYCHANGE:"beforepropertychange", PROPERTYCHANGE:"propertychange"}; +ol.ObjectEvent = function(type, key) { + goog.base(this, type); + this.key = key +}; +goog.inherits(ol.ObjectEvent, goog.events.Event); +ol.ObjectAccessor = function(target, key) { + this.target = target; + this.key = key; + this.from = goog.functions.identity; + this.to = goog.functions.identity +}; +ol.ObjectAccessor.prototype.transform = function(from, to) { + this.from = from; + this.to = to; + this.target.notify(this.key) +}; +ol.Object = function(opt_values) { + goog.base(this); + this.values_ = {}; + this.accessors_ = {}; + this.beforeChangeListeners_ = {}; + this.listeners_ = {}; + if(goog.isDef(opt_values)) { + this.setValues(opt_values) + } +}; +goog.inherits(ol.Object, ol.Observable); +ol.Object.changeEventTypeCache_ = {}; +ol.Object.getterNameCache_ = {}; +ol.Object.setterNameCache_ = {}; +ol.Object.capitalize = function(str) { + return str.substr(0, 1).toUpperCase() + str.substr(1) +}; +ol.Object.getChangeEventType = function(key) { + return ol.Object.changeEventTypeCache_.hasOwnProperty(key) ? ol.Object.changeEventTypeCache_[key] : ol.Object.changeEventTypeCache_[key] = "change:" + key.toLowerCase() +}; +ol.Object.getGetterName = function(key) { + return ol.Object.getterNameCache_.hasOwnProperty(key) ? ol.Object.getterNameCache_[key] : ol.Object.getterNameCache_[key] = "get" + ol.Object.capitalize(key) +}; +ol.Object.getSetterName = function(key) { + return ol.Object.setterNameCache_.hasOwnProperty(key) ? ol.Object.setterNameCache_[key] : ol.Object.setterNameCache_[key] = "set" + ol.Object.capitalize(key) +}; +ol.Object.prototype.bindTo = function(key, target, opt_targetKey) { + var targetKey = opt_targetKey || key; + this.unbind(key); + var eventType = ol.Object.getChangeEventType(targetKey); + this.listeners_[key] = goog.events.listen(target, eventType, function() { + this.notifyInternal_(key) + }, undefined, this); + this.beforeChangeListeners_[key] = goog.events.listen(target, ol.ObjectEventType.BEFOREPROPERTYCHANGE, this.createBeforeChangeListener_(key, targetKey), undefined, this); + var accessor = new ol.ObjectAccessor(target, targetKey); + this.accessors_[key] = accessor; + this.notifyInternal_(key); + return accessor +}; +ol.Object.prototype.createBeforeChangeListener_ = function(key, targetKey) { + return function(event) { + if(event.key === targetKey) { + this.dispatchEvent(new ol.ObjectEvent(ol.ObjectEventType.BEFOREPROPERTYCHANGE, key)) + } + } +}; +ol.Object.prototype.get = function(key) { + var value; + var accessors = this.accessors_; + if(accessors.hasOwnProperty(key)) { + var accessor = accessors[key]; + var target = accessor.target; + var targetKey = accessor.key; + var getterName = ol.Object.getGetterName(targetKey); + var getter = (goog.object.get(target, getterName)); + if(goog.isDef(getter)) { + value = getter.call(target) + }else { + value = target.get(targetKey) + } + value = accessor.to(value) + }else { + if(this.values_.hasOwnProperty(key)) { + value = this.values_[key] + } + } + return value +}; +ol.Object.prototype.getKeys = function() { + var accessors = this.accessors_; + var keysObject; + if(goog.object.isEmpty(this.values_)) { + if(goog.object.isEmpty(accessors)) { + return[] + }else { + keysObject = accessors + } + }else { + if(goog.object.isEmpty(accessors)) { + keysObject = this.values_ + }else { + keysObject = {}; + var key; + for(key in this.values_) { + keysObject[key] = true + } + for(key in accessors) { + keysObject[key] = true + } + } + } + return goog.object.getKeys(keysObject) +}; +ol.Object.prototype.getProperties = function() { + var properties = {}; + var key; + for(key in this.values_) { + properties[key] = this.values_[key] + } + for(key in this.accessors_) { + properties[key] = this.get(key) + } + return properties +}; +ol.Object.prototype.notify = function(key) { + var accessors = this.accessors_; + if(accessors.hasOwnProperty(key)) { + var accessor = accessors[key]; + var target = accessor.target; + var targetKey = accessor.key; + target.notify(targetKey) + }else { + this.notifyInternal_(key) + } +}; +ol.Object.prototype.notifyInternal_ = function(key) { + var eventType = ol.Object.getChangeEventType(key); + this.dispatchEvent(eventType); + this.dispatchEvent(new ol.ObjectEvent(ol.ObjectEventType.PROPERTYCHANGE, key)) +}; +ol.Object.prototype.set = function(key, value) { + this.dispatchEvent(new ol.ObjectEvent(ol.ObjectEventType.BEFOREPROPERTYCHANGE, key)); + var accessors = this.accessors_; + if(accessors.hasOwnProperty(key)) { + var accessor = accessors[key]; + var target = accessor.target; + var targetKey = accessor.key; + value = accessor.from(value); + var setterName = ol.Object.getSetterName(targetKey); + var setter = (goog.object.get(target, setterName)); + if(goog.isDef(setter)) { + setter.call(target, value) + }else { + target.set(targetKey, value) + } + }else { + this.values_[key] = value; + this.notifyInternal_(key) + } +}; +ol.Object.prototype.setValues = function(values) { + var key; + for(key in values) { + this.set(key, values[key]) + } +}; +ol.Object.prototype.unbind = function(key) { + var listeners = this.listeners_; + var listener = listeners[key]; + if(listener) { + delete listeners[key]; + goog.events.unlistenByKey(listener); + var value = this.get(key); + delete this.accessors_[key]; + this.values_[key] = value + } + var listenerKey = this.beforeChangeListeners_[key]; + if(listenerKey) { + goog.events.unlistenByKey(listenerKey); + delete this.beforeChangeListeners_[key] + } +}; +ol.Object.prototype.unbindAll = function() { + for(var key in this.listeners_) { + this.unbind(key) + } +}; +goog.provide("ol.Collection"); +goog.provide("ol.CollectionEvent"); +goog.provide("ol.CollectionEventType"); +goog.require("goog.array"); +goog.require("goog.events.Event"); +goog.require("ol.Object"); +ol.CollectionEventType = {ADD:"add", REMOVE:"remove"}; +ol.CollectionEvent = function(type, opt_element, opt_target) { + goog.base(this, type, opt_target); + this.element = opt_element +}; +goog.inherits(ol.CollectionEvent, goog.events.Event); +ol.CollectionProperty = {LENGTH:"length"}; +ol.Collection = function(opt_array) { + goog.base(this); + this.array_ = opt_array || []; + this.updateLength_() +}; +goog.inherits(ol.Collection, ol.Object); +ol.Collection.prototype.clear = function() { + while(this.getLength() > 0) { + this.pop() + } +}; +ol.Collection.prototype.extend = function(arr) { + var i, ii; + for(i = 0, ii = arr.length;i < ii;++i) { + this.push(arr[i]) + } + return this +}; +ol.Collection.prototype.forEach = function(f, opt_this) { + goog.array.forEach(this.array_, f, opt_this) +}; +ol.Collection.prototype.getArray = function() { + return this.array_ +}; +ol.Collection.prototype.getAt = function(index) { + return this.array_[index] +}; +ol.Collection.prototype.getLength = function() { + return(this.get(ol.CollectionProperty.LENGTH)) +}; +ol.Collection.prototype.insertAt = function(index, elem) { + goog.array.insertAt(this.array_, elem, index); + this.updateLength_(); + this.dispatchEvent(new ol.CollectionEvent(ol.CollectionEventType.ADD, elem, this)) +}; +ol.Collection.prototype.pop = function() { + return this.removeAt(this.getLength() - 1) +}; +ol.Collection.prototype.push = function(elem) { + var n = this.array_.length; + this.insertAt(n, elem); + return n +}; +ol.Collection.prototype.remove = function(elem) { + var arr = this.array_; + var i, ii; + for(i = 0, ii = arr.length;i < ii;++i) { + if(arr[i] === elem) { + return this.removeAt(i) + } + } + return undefined +}; +ol.Collection.prototype.removeAt = function(index) { + var prev = this.array_[index]; + goog.array.removeAt(this.array_, index); + this.updateLength_(); + this.dispatchEvent(new ol.CollectionEvent(ol.CollectionEventType.REMOVE, prev, this)); + return prev +}; +ol.Collection.prototype.setAt = function(index, elem) { + var n = this.getLength(); + if(index < n) { + var prev = this.array_[index]; + this.array_[index] = elem; + this.dispatchEvent(new ol.CollectionEvent(ol.CollectionEventType.REMOVE, prev, this)); + this.dispatchEvent(new ol.CollectionEvent(ol.CollectionEventType.ADD, elem, this)) + }else { + var j; + for(j = n;j < index;++j) { + this.insertAt(j, undefined) + } + this.insertAt(index, elem) + } +}; +ol.Collection.prototype.updateLength_ = function() { + this.set(ol.CollectionProperty.LENGTH, this.array_.length) +}; +goog.provide("ol.array"); +goog.require("goog.array"); +goog.require("goog.asserts"); +ol.array.binaryFindNearest = function(arr, target) { + var index = goog.array.binarySearch(arr, target, function(a, b) { + return b - a + }); + if(index >= 0) { + return index + }else { + if(index == -1) { + return 0 + }else { + if(index == -arr.length - 1) { + return arr.length - 1 + }else { + var left = -index - 2; + var right = -index - 1; + if(arr[left] - target < target - arr[right]) { + return left + }else { + return right + } + } + } + } +}; +ol.array.linearFindNearest = function(arr, target, direction) { + var n = arr.length; + if(arr[0] <= target) { + return 0 + }else { + if(target <= arr[n - 1]) { + return n - 1 + }else { + var i; + if(direction > 0) { + for(i = 1;i < n;++i) { + if(arr[i] < target) { + return i - 1 + } + } + }else { + if(direction < 0) { + for(i = 1;i < n;++i) { + if(arr[i] <= target) { + return i + } + } + }else { + for(i = 1;i < n;++i) { + if(arr[i] == target) { + return i + }else { + if(arr[i] < target) { + if(arr[i - 1] - target < target - arr[i]) { + return i - 1 + }else { + return i + } + } + } + } + } + } + goog.asserts.fail(); + return n - 1 + } + } +}; +ol.array.reverseSubArray = function(arr, begin, end) { + goog.asserts.assert(begin >= 0); + goog.asserts.assert(end < arr.length); + while(begin < end) { + var tmp = arr[begin]; + arr[begin] = arr[end]; + arr[end] = tmp; + ++begin; + --end + } +}; +goog.provide("ol.ResolutionConstraint"); +goog.provide("ol.ResolutionConstraintType"); +goog.require("goog.math"); +goog.require("ol.array"); +ol.ResolutionConstraintType; +ol.ResolutionConstraint.createSnapToResolutions = function(resolutions) { + return function(resolution, delta, direction) { + if(goog.isDef(resolution)) { + var z = ol.array.linearFindNearest(resolutions, resolution, direction); + z = goog.math.clamp(z + delta, 0, resolutions.length - 1); + return resolutions[z] + }else { + return undefined + } + } +}; +ol.ResolutionConstraint.createSnapToPower = function(power, maxResolution, opt_maxLevel) { + return function(resolution, delta, direction) { + if(goog.isDef(resolution)) { + var offset; + if(direction > 0) { + offset = 0 + }else { + if(direction < 0) { + offset = 1 + }else { + offset = 0.5 + } + } + var oldLevel = Math.floor(Math.log(maxResolution / resolution) / Math.log(power) + offset); + var newLevel = Math.max(oldLevel + delta, 0); + if(goog.isDef(opt_maxLevel)) { + newLevel = Math.min(newLevel, opt_maxLevel) + } + return maxResolution / Math.pow(power, newLevel) + }else { + return undefined + } + } +}; +goog.provide("ol.RotationConstraint"); +goog.provide("ol.RotationConstraintType"); +goog.require("goog.math"); +ol.RotationConstraintType; +ol.RotationConstraint.disable = function(rotation, delta) { + if(goog.isDef(rotation)) { + return 0 + }else { + return undefined + } +}; +ol.RotationConstraint.none = function(rotation, delta) { + if(goog.isDef(rotation)) { + return rotation + delta + }else { + return undefined + } +}; +ol.RotationConstraint.createSnapToN = function(n) { + var theta = 2 * Math.PI / n; + return function(rotation, delta) { + if(goog.isDef(rotation)) { + rotation = Math.floor((rotation + delta) / theta + 0.5) * theta; + return rotation + }else { + return undefined + } + } +}; +ol.RotationConstraint.createSnapToZero = function(opt_tolerance) { + var tolerance = opt_tolerance || goog.math.toRadians(5); + return function(rotation, delta) { + if(goog.isDef(rotation)) { + if(Math.abs(rotation + delta) <= tolerance) { + return 0 + }else { + return rotation + delta + } + }else { + return undefined + } + } +}; +goog.provide("ol.Constraints"); +goog.require("ol.CenterConstraintType"); +goog.require("ol.ResolutionConstraintType"); +goog.require("ol.RotationConstraintType"); +ol.Constraints = function(centerConstraint, resolutionConstraint, rotationConstraint) { + this.center = centerConstraint; + this.resolution = resolutionConstraint; + this.rotation = rotationConstraint +}; +goog.provide("ol.Coordinate"); +goog.provide("ol.CoordinateArray"); +goog.provide("ol.CoordinateFormatType"); +goog.provide("ol.coordinate"); +goog.require("goog.math"); +ol.CoordinateFormatType; +ol.Coordinate; +ol.CoordinateArray; +ol.coordinate.add = function(coordinate, delta) { + coordinate[0] += delta[0]; + coordinate[1] += delta[1]; + return coordinate +}; +ol.coordinate.closestOnSegment = function(coordinate, segment) { + var x0 = coordinate[0]; + var y0 = coordinate[1]; + var start = segment[0]; + var end = segment[1]; + var x1 = start[0]; + var y1 = start[1]; + var x2 = end[0]; + var y2 = end[1]; + var dx = x2 - x1; + var dy = y2 - y1; + var along = dx == 0 && dy == 0 ? 0 : (dx * (x0 - x1) + dy * (y0 - y1)) / (dx * dx + dy * dy || 0); + var x, y; + if(along <= 0) { + x = x1; + y = y1 + }else { + if(along >= 1) { + x = x2; + y = y2 + }else { + x = x1 + along * dx; + y = y1 + along * dy + } + } + return[x, y] +}; +ol.coordinate.createStringXY = function(opt_fractionDigits) { + return function(coordinate) { + return ol.coordinate.toStringXY(coordinate, opt_fractionDigits) + } +}; +ol.coordinate.degreesToStringHDMS_ = function(degrees, hemispheres) { + var normalizedDegrees = goog.math.modulo(degrees + 180, 360) - 180; + var x = Math.abs(Math.round(3600 * normalizedDegrees)); + return Math.floor(x / 3600) + "\u00b0 " + Math.floor(x / 60 % 60) + "\u2032 " + Math.floor(x % 60) + "\u2033 " + hemispheres.charAt(normalizedDegrees < 0 ? 1 : 0) +}; +ol.coordinate.format = function(coordinate, template, opt_fractionDigits) { + if(goog.isDef(coordinate)) { + return template.replace("{x}", coordinate[0].toFixed(opt_fractionDigits)).replace("{y}", coordinate[1].toFixed(opt_fractionDigits)) + }else { + return"" + } +}; +ol.coordinate.equals = function(coordinate1, coordinate2) { + var equals = true; + for(var i = coordinate1.length - 1;i >= 0;--i) { + if(coordinate1[i] != coordinate2[i]) { + equals = false; + break + } + } + return equals +}; +ol.coordinate.rotate = function(coordinate, angle) { + var cosAngle = Math.cos(angle); + var sinAngle = Math.sin(angle); + var x = coordinate[0] * cosAngle - coordinate[1] * sinAngle; + var y = coordinate[1] * cosAngle + coordinate[0] * sinAngle; + coordinate[0] = x; + coordinate[1] = y; + return coordinate +}; +ol.coordinate.scale = function(coordinate, s) { + coordinate[0] *= s; + coordinate[1] *= s; + return coordinate +}; +ol.coordinate.squaredDistance = function(coord1, coord2) { + var dx = coord1[0] - coord2[0]; + var dy = coord1[1] - coord2[1]; + return dx * dx + dy * dy +}; +ol.coordinate.squaredDistanceToSegment = function(coordinate, segment) { + return ol.coordinate.squaredDistance(coordinate, ol.coordinate.closestOnSegment(coordinate, segment)) +}; +ol.coordinate.toStringHDMS = function(coordinate) { + if(goog.isDef(coordinate)) { + return ol.coordinate.degreesToStringHDMS_(coordinate[1], "NS") + " " + ol.coordinate.degreesToStringHDMS_(coordinate[0], "EW") + }else { + return"" + } +}; +ol.coordinate.toStringXY = function(coordinate, opt_fractionDigits) { + return ol.coordinate.format(coordinate, "{x}, {y}", opt_fractionDigits) +}; +ol.coordinate.fromProjectedArray = function(array, axis) { + var firstAxis = axis.charAt(0); + if(firstAxis === "n" || firstAxis === "s") { + return[array[1], array[0]] + }else { + return array + } +}; +goog.provide("ol.DeviceOrientation"); +goog.provide("ol.DeviceOrientationProperty"); +goog.require("goog.events"); +goog.require("goog.math"); +goog.require("ol.BrowserFeature"); +goog.require("ol.Object"); +ol.DeviceOrientationProperty = {ALPHA:"alpha", BETA:"beta", GAMMA:"gamma", HEADING:"heading", TRACKING:"tracking"}; +ol.DeviceOrientation = function(opt_options) { + goog.base(this); + var options = goog.isDef(opt_options) ? opt_options : {}; + this.listenerKey_ = null; + goog.events.listen(this, ol.Object.getChangeEventType(ol.DeviceOrientationProperty.TRACKING), this.handleTrackingChanged_, false, this); + this.setTracking(goog.isDef(options.tracking) ? options.tracking : false) +}; +goog.inherits(ol.DeviceOrientation, ol.Object); +ol.DeviceOrientation.prototype.disposeInternal = function() { + this.setTracking(false); + goog.base(this, "disposeInternal") +}; +ol.DeviceOrientation.prototype.orientationChange_ = function(browserEvent) { + var event = (browserEvent.getBrowserEvent()); + if(goog.isDefAndNotNull(event.alpha)) { + var alpha = goog.math.toRadians(event.alpha); + this.set(ol.DeviceOrientationProperty.ALPHA, alpha); + if(goog.isBoolean(event.absolute) && event.absolute) { + this.set(ol.DeviceOrientationProperty.HEADING, alpha) + }else { + if(goog.isDefAndNotNull(event.webkitCompassHeading) && goog.isDefAndNotNull(event.webkitCompassAccuracy) && event.webkitCompassAccuracy != -1) { + var heading = goog.math.toRadians(event.webkitCompassHeading); + this.set(ol.DeviceOrientationProperty.HEADING, heading) + } + } + } + if(goog.isDefAndNotNull(event.beta)) { + this.set(ol.DeviceOrientationProperty.BETA, goog.math.toRadians(event.beta)) + } + if(goog.isDefAndNotNull(event.gamma)) { + this.set(ol.DeviceOrientationProperty.GAMMA, goog.math.toRadians(event.gamma)) + } +}; +ol.DeviceOrientation.prototype.getAlpha = function() { + return(this.get(ol.DeviceOrientationProperty.ALPHA)) +}; +goog.exportProperty(ol.DeviceOrientation.prototype, "getAlpha", ol.DeviceOrientation.prototype.getAlpha); +ol.DeviceOrientation.prototype.getBeta = function() { + return(this.get(ol.DeviceOrientationProperty.BETA)) +}; +goog.exportProperty(ol.DeviceOrientation.prototype, "getBeta", ol.DeviceOrientation.prototype.getBeta); +ol.DeviceOrientation.prototype.getGamma = function() { + return(this.get(ol.DeviceOrientationProperty.GAMMA)) +}; +goog.exportProperty(ol.DeviceOrientation.prototype, "getGamma", ol.DeviceOrientation.prototype.getGamma); +ol.DeviceOrientation.prototype.getHeading = function() { + return(this.get(ol.DeviceOrientationProperty.HEADING)) +}; +goog.exportProperty(ol.DeviceOrientation.prototype, "getHeading", ol.DeviceOrientation.prototype.getHeading); +ol.DeviceOrientation.prototype.getTracking = function() { + return(this.get(ol.DeviceOrientationProperty.TRACKING)) +}; +goog.exportProperty(ol.DeviceOrientation.prototype, "getTracking", ol.DeviceOrientation.prototype.getTracking); +ol.DeviceOrientation.prototype.handleTrackingChanged_ = function() { + if(ol.BrowserFeature.HAS_DEVICE_ORIENTATION) { + var tracking = this.getTracking(); + if(tracking && goog.isNull(this.listenerKey_)) { + this.listenerKey_ = goog.events.listen(goog.global, "deviceorientation", this.orientationChange_, false, this) + }else { + if(!tracking && !goog.isNull(this.listenerKey_)) { + goog.events.unlistenByKey(this.listenerKey_); + this.listenerKey_ = null + } + } + } +}; +ol.DeviceOrientation.prototype.setTracking = function(tracking) { + this.set(ol.DeviceOrientationProperty.TRACKING, tracking) +}; +goog.exportProperty(ol.DeviceOrientation.prototype, "setTracking", ol.DeviceOrientation.prototype.setTracking); +goog.provide("goog.vec.Float32Array"); +goog.vec.Float32Array = function(p0) { + this.length = (p0.length || p0); + for(var i = 0;i < this.length;i++) { + this[i] = p0[i] || 0 + } +}; +goog.vec.Float32Array.BYTES_PER_ELEMENT = 4; +goog.vec.Float32Array.prototype.BYTES_PER_ELEMENT = 4; +goog.vec.Float32Array.prototype.set = function(values, opt_offset) { + opt_offset = opt_offset || 0; + for(var i = 0;i < values.length && opt_offset + i < this.length;i++) { + this[opt_offset + i] = values[i] + } +}; +goog.vec.Float32Array.prototype.toString = Array.prototype.join; +if(typeof Float32Array == "undefined") { + goog.exportProperty(goog.vec.Float32Array, "BYTES_PER_ELEMENT", goog.vec.Float32Array.BYTES_PER_ELEMENT); + goog.exportProperty(goog.vec.Float32Array.prototype, "BYTES_PER_ELEMENT", goog.vec.Float32Array.prototype.BYTES_PER_ELEMENT); + goog.exportProperty(goog.vec.Float32Array.prototype, "set", goog.vec.Float32Array.prototype.set); + goog.exportProperty(goog.vec.Float32Array.prototype, "toString", goog.vec.Float32Array.prototype.toString); + goog.exportSymbol("Float32Array", goog.vec.Float32Array) +} +;goog.provide("goog.vec.Float64Array"); +goog.vec.Float64Array = function(p0) { + this.length = (p0.length || p0); + for(var i = 0;i < this.length;i++) { + this[i] = p0[i] || 0 + } +}; +goog.vec.Float64Array.BYTES_PER_ELEMENT = 8; +goog.vec.Float64Array.prototype.BYTES_PER_ELEMENT = 8; +goog.vec.Float64Array.prototype.set = function(values, opt_offset) { + opt_offset = opt_offset || 0; + for(var i = 0;i < values.length && opt_offset + i < this.length;i++) { + this[opt_offset + i] = values[i] + } +}; +goog.vec.Float64Array.prototype.toString = Array.prototype.join; +if(typeof Float64Array == "undefined") { + try { + goog.exportProperty(goog.vec.Float64Array, "BYTES_PER_ELEMENT", goog.vec.Float64Array.BYTES_PER_ELEMENT) + }catch(float64ArrayError) { + } + goog.exportProperty(goog.vec.Float64Array.prototype, "BYTES_PER_ELEMENT", goog.vec.Float64Array.prototype.BYTES_PER_ELEMENT); + goog.exportProperty(goog.vec.Float64Array.prototype, "set", goog.vec.Float64Array.prototype.set); + goog.exportProperty(goog.vec.Float64Array.prototype, "toString", goog.vec.Float64Array.prototype.toString); + goog.exportSymbol("Float64Array", goog.vec.Float64Array) +} +;goog.provide("goog.vec"); +goog.provide("goog.vec.AnyType"); +goog.provide("goog.vec.ArrayType"); +goog.provide("goog.vec.Float32"); +goog.provide("goog.vec.Float64"); +goog.provide("goog.vec.Number"); +goog.require("goog.vec.Float32Array"); +goog.require("goog.vec.Float64Array"); +goog.vec.Float32; +goog.vec.Float64; +goog.vec.Number; +goog.vec.AnyType; +goog.vec.ArrayType; +goog.vec.EPSILON = 1E-6; +goog.provide("goog.vec.Vec3"); +goog.require("goog.vec"); +goog.vec.Vec3.Float32; +goog.vec.Vec3.Float64; +goog.vec.Vec3.Number; +goog.vec.Vec3.AnyType; +goog.vec.Vec3.Type; +goog.vec.Vec3.Vec3Like; +goog.vec.Vec3.createFloat32 = function() { + return new Float32Array(3) +}; +goog.vec.Vec3.createFloat64 = function() { + return new Float64Array(3) +}; +goog.vec.Vec3.createNumber = function() { + var a = new Array(3); + goog.vec.Vec3.setFromValues(a, 0, 0, 0); + return a +}; +goog.vec.Vec3.create = function() { + return new Float32Array(3) +}; +goog.vec.Vec3.createFloat32FromArray = function(vec) { + var newVec = goog.vec.Vec3.createFloat32(); + goog.vec.Vec3.setFromArray(newVec, vec); + return newVec +}; +goog.vec.Vec3.createFloat32FromValues = function(v0, v1, v2) { + var a = goog.vec.Vec3.createFloat32(); + goog.vec.Vec3.setFromValues(a, v0, v1, v2); + return a +}; +goog.vec.Vec3.cloneFloat32 = goog.vec.Vec3.createFloat32FromArray; +goog.vec.Vec3.createFloat64FromArray = function(vec) { + var newVec = goog.vec.Vec3.createFloat64(); + goog.vec.Vec3.setFromArray(newVec, vec); + return newVec +}; +goog.vec.Vec3.createFloat64FromValues = function(v0, v1, v2) { + var vec = goog.vec.Vec3.createFloat64(); + goog.vec.Vec3.setFromValues(vec, v0, v1, v2); + return vec +}; +goog.vec.Vec3.cloneFloat64 = goog.vec.Vec3.createFloat64FromArray; +goog.vec.Vec3.createFromArray = function(vec) { + var newVec = goog.vec.Vec3.create(); + goog.vec.Vec3.setFromArray(newVec, vec); + return newVec +}; +goog.vec.Vec3.createFromValues = function(v0, v1, v2) { + var vec = goog.vec.Vec3.create(); + goog.vec.Vec3.setFromValues(vec, v0, v1, v2); + return vec +}; +goog.vec.Vec3.clone = function(vec) { + var newVec = goog.vec.Vec3.create(); + goog.vec.Vec3.setFromArray(newVec, vec); + return newVec +}; +goog.vec.Vec3.setFromValues = function(vec, v0, v1, v2) { + vec[0] = v0; + vec[1] = v1; + vec[2] = v2; + return vec +}; +goog.vec.Vec3.setFromArray = function(vec, values) { + vec[0] = values[0]; + vec[1] = values[1]; + vec[2] = values[2]; + return vec +}; +goog.vec.Vec3.add = function(vec0, vec1, resultVec) { + resultVec[0] = vec0[0] + vec1[0]; + resultVec[1] = vec0[1] + vec1[1]; + resultVec[2] = vec0[2] + vec1[2]; + return resultVec +}; +goog.vec.Vec3.subtract = function(vec0, vec1, resultVec) { + resultVec[0] = vec0[0] - vec1[0]; + resultVec[1] = vec0[1] - vec1[1]; + resultVec[2] = vec0[2] - vec1[2]; + return resultVec +}; +goog.vec.Vec3.negate = function(vec0, resultVec) { + resultVec[0] = -vec0[0]; + resultVec[1] = -vec0[1]; + resultVec[2] = -vec0[2]; + return resultVec +}; +goog.vec.Vec3.scale = function(vec0, scalar, resultVec) { + resultVec[0] = vec0[0] * scalar; + resultVec[1] = vec0[1] * scalar; + resultVec[2] = vec0[2] * scalar; + return resultVec +}; +goog.vec.Vec3.magnitudeSquared = function(vec0) { + var x = vec0[0], y = vec0[1], z = vec0[2]; + return x * x + y * y + z * z +}; +goog.vec.Vec3.magnitude = function(vec0) { + var x = vec0[0], y = vec0[1], z = vec0[2]; + return Math.sqrt(x * x + y * y + z * z) +}; +goog.vec.Vec3.normalize = function(vec0, resultVec) { + var ilen = 1 / goog.vec.Vec3.magnitude(vec0); + resultVec[0] = vec0[0] * ilen; + resultVec[1] = vec0[1] * ilen; + resultVec[2] = vec0[2] * ilen; + return resultVec +}; +goog.vec.Vec3.dot = function(v0, v1) { + return v0[0] * v1[0] + v0[1] * v1[1] + v0[2] * v1[2] +}; +goog.vec.Vec3.cross = function(v0, v1, resultVec) { + var x0 = v0[0], y0 = v0[1], z0 = v0[2]; + var x1 = v1[0], y1 = v1[1], z1 = v1[2]; + resultVec[0] = y0 * z1 - z0 * y1; + resultVec[1] = z0 * x1 - x0 * z1; + resultVec[2] = x0 * y1 - y0 * x1; + return resultVec +}; +goog.vec.Vec3.distanceSquared = function(vec0, vec1) { + var x = vec0[0] - vec1[0]; + var y = vec0[1] - vec1[1]; + var z = vec0[2] - vec1[2]; + return x * x + y * y + z * z +}; +goog.vec.Vec3.distance = function(vec0, vec1) { + return Math.sqrt(goog.vec.Vec3.distanceSquared(vec0, vec1)) +}; +goog.vec.Vec3.direction = function(vec0, vec1, resultVec) { + var x = vec1[0] - vec0[0]; + var y = vec1[1] - vec0[1]; + var z = vec1[2] - vec0[2]; + var d = Math.sqrt(x * x + y * y + z * z); + if(d) { + d = 1 / d; + resultVec[0] = x * d; + resultVec[1] = y * d; + resultVec[2] = z * d + }else { + resultVec[0] = resultVec[1] = resultVec[2] = 0 + } + return resultVec +}; +goog.vec.Vec3.lerp = function(v0, v1, f, resultVec) { + var x = v0[0], y = v0[1], z = v0[2]; + resultVec[0] = (v1[0] - x) * f + x; + resultVec[1] = (v1[1] - y) * f + y; + resultVec[2] = (v1[2] - z) * f + z; + return resultVec +}; +goog.vec.Vec3.equals = function(v0, v1) { + return v0.length == v1.length && v0[0] == v1[0] && v0[1] == v1[1] && v0[2] == v1[2] +}; +goog.provide("goog.vec.Vec4"); +goog.require("goog.vec"); +goog.vec.Vec4.Float32; +goog.vec.Vec4.Float64; +goog.vec.Vec4.Number; +goog.vec.Vec4.AnyType; +goog.vec.Vec4.Type; +goog.vec.Vec4.Vec4Like; +goog.vec.Vec4.createFloat32 = function() { + return new Float32Array(4) +}; +goog.vec.Vec4.createFloat64 = function() { + return new Float64Array(4) +}; +goog.vec.Vec4.createNumber = function() { + var v = new Array(4); + goog.vec.Vec4.setFromValues(v, 0, 0, 0, 0); + return v +}; +goog.vec.Vec4.create = function() { + return new Float32Array(4) +}; +goog.vec.Vec4.createFromArray = function(vec) { + var newVec = goog.vec.Vec4.create(); + goog.vec.Vec4.setFromArray(newVec, vec); + return newVec +}; +goog.vec.Vec4.createFloat32FromArray = function(vec) { + var newVec = goog.vec.Vec4.createFloat32(); + goog.vec.Vec4.setFromArray(newVec, vec); + return newVec +}; +goog.vec.Vec4.createFloat32FromValues = function(v0, v1, v2, v3) { + var vec = goog.vec.Vec4.createFloat32(); + goog.vec.Vec4.setFromValues(vec, v0, v1, v2, v3); + return vec +}; +goog.vec.Vec4.cloneFloat32 = goog.vec.Vec4.createFloat32FromArray; +goog.vec.Vec4.createFloat64FromArray = function(vec) { + var newVec = goog.vec.Vec4.createFloat64(); + goog.vec.Vec4.setFromArray(newVec, vec); + return newVec +}; +goog.vec.Vec4.createFloat64FromValues = function(v0, v1, v2, v3) { + var vec = goog.vec.Vec4.createFloat64(); + goog.vec.Vec4.setFromValues(vec, v0, v1, v2, v3); + return vec +}; +goog.vec.Vec4.cloneFloat64 = goog.vec.Vec4.createFloat64FromArray; +goog.vec.Vec4.createFromValues = function(v0, v1, v2, v3) { + var vec = goog.vec.Vec4.create(); + goog.vec.Vec4.setFromValues(vec, v0, v1, v2, v3); + return vec +}; +goog.vec.Vec4.clone = goog.vec.Vec4.createFromArray; +goog.vec.Vec4.setFromValues = function(vec, v0, v1, v2, v3) { + vec[0] = v0; + vec[1] = v1; + vec[2] = v2; + vec[3] = v3; + return vec +}; +goog.vec.Vec4.setFromArray = function(vec, values) { + vec[0] = values[0]; + vec[1] = values[1]; + vec[2] = values[2]; + vec[3] = values[3]; + return vec +}; +goog.vec.Vec4.add = function(vec0, vec1, resultVec) { + resultVec[0] = vec0[0] + vec1[0]; + resultVec[1] = vec0[1] + vec1[1]; + resultVec[2] = vec0[2] + vec1[2]; + resultVec[3] = vec0[3] + vec1[3]; + return resultVec +}; +goog.vec.Vec4.subtract = function(vec0, vec1, resultVec) { + resultVec[0] = vec0[0] - vec1[0]; + resultVec[1] = vec0[1] - vec1[1]; + resultVec[2] = vec0[2] - vec1[2]; + resultVec[3] = vec0[3] - vec1[3]; + return resultVec +}; +goog.vec.Vec4.negate = function(vec0, resultVec) { + resultVec[0] = -vec0[0]; + resultVec[1] = -vec0[1]; + resultVec[2] = -vec0[2]; + resultVec[3] = -vec0[3]; + return resultVec +}; +goog.vec.Vec4.scale = function(vec0, scalar, resultVec) { + resultVec[0] = vec0[0] * scalar; + resultVec[1] = vec0[1] * scalar; + resultVec[2] = vec0[2] * scalar; + resultVec[3] = vec0[3] * scalar; + return resultVec +}; +goog.vec.Vec4.magnitudeSquared = function(vec0) { + var x = vec0[0], y = vec0[1], z = vec0[2], w = vec0[3]; + return x * x + y * y + z * z + w * w +}; +goog.vec.Vec4.magnitude = function(vec0) { + var x = vec0[0], y = vec0[1], z = vec0[2], w = vec0[3]; + return Math.sqrt(x * x + y * y + z * z + w * w) +}; +goog.vec.Vec4.normalize = function(vec0, resultVec) { + var ilen = 1 / goog.vec.Vec4.magnitude(vec0); + resultVec[0] = vec0[0] * ilen; + resultVec[1] = vec0[1] * ilen; + resultVec[2] = vec0[2] * ilen; + resultVec[3] = vec0[3] * ilen; + return resultVec +}; +goog.vec.Vec4.dot = function(v0, v1) { + return v0[0] * v1[0] + v0[1] * v1[1] + v0[2] * v1[2] + v0[3] * v1[3] +}; +goog.vec.Vec4.lerp = function(v0, v1, f, resultVec) { + var x = v0[0], y = v0[1], z = v0[2], w = v0[3]; + resultVec[0] = (v1[0] - x) * f + x; + resultVec[1] = (v1[1] - y) * f + y; + resultVec[2] = (v1[2] - z) * f + z; + resultVec[3] = (v1[3] - w) * f + w; + return resultVec +}; +goog.vec.Vec4.equals = function(v0, v1) { + return v0.length == v1.length && v0[0] == v1[0] && v0[1] == v1[1] && v0[2] == v1[2] && v0[3] == v1[3] +}; +goog.provide("goog.vec.Mat4"); +goog.require("goog.vec"); +goog.require("goog.vec.Vec3"); +goog.require("goog.vec.Vec4"); +goog.vec.Mat4.Float32; +goog.vec.Mat4.Float64; +goog.vec.Mat4.Number; +goog.vec.Mat4.AnyType; +goog.vec.Mat4.Type; +goog.vec.Mat4.Mat4Like; +goog.vec.Mat4.createFloat32 = function() { + return new Float32Array(16) +}; +goog.vec.Mat4.createFloat64 = function() { + return new Float64Array(16) +}; +goog.vec.Mat4.createNumber = function() { + var a = new Array(16); + goog.vec.Mat4.setFromValues(a, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0); + return a +}; +goog.vec.Mat4.create = function() { + return goog.vec.Mat4.createFloat32() +}; +goog.vec.Mat4.createFloat32Identity = function() { + var mat = goog.vec.Mat4.createFloat32(); + mat[0] = mat[5] = mat[10] = mat[15] = 1; + return mat +}; +goog.vec.Mat4.createFloat64Identity = function() { + var mat = goog.vec.Mat4.createFloat64(); + mat[0] = mat[5] = mat[10] = mat[15] = 1; + return mat +}; +goog.vec.Mat4.createNumberIdentity = function() { + var a = new Array(16); + goog.vec.Mat4.setFromValues(a, 1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1); + return a +}; +goog.vec.Mat4.createIdentity = function() { + return goog.vec.Mat4.createFloat32Identity() +}; +goog.vec.Mat4.createFloat32FromArray = function(matrix) { + var newMatrix = goog.vec.Mat4.createFloat32(); + goog.vec.Mat4.setFromArray(newMatrix, matrix); + return newMatrix +}; +goog.vec.Mat4.createFloat32FromValues = function(v00, v10, v20, v30, v01, v11, v21, v31, v02, v12, v22, v32, v03, v13, v23, v33) { + var newMatrix = goog.vec.Mat4.createFloat32(); + goog.vec.Mat4.setFromValues(newMatrix, v00, v10, v20, v30, v01, v11, v21, v31, v02, v12, v22, v32, v03, v13, v23, v33); + return newMatrix +}; +goog.vec.Mat4.cloneFloat32 = goog.vec.Mat4.createFloat32FromArray; +goog.vec.Mat4.createFloat64FromArray = function(matrix) { + var newMatrix = goog.vec.Mat4.createFloat64(); + goog.vec.Mat4.setFromArray(newMatrix, matrix); + return newMatrix +}; +goog.vec.Mat4.createFloat64FromValues = function(v00, v10, v20, v30, v01, v11, v21, v31, v02, v12, v22, v32, v03, v13, v23, v33) { + var newMatrix = goog.vec.Mat4.createFloat64(); + goog.vec.Mat4.setFromValues(newMatrix, v00, v10, v20, v30, v01, v11, v21, v31, v02, v12, v22, v32, v03, v13, v23, v33); + return newMatrix +}; +goog.vec.Mat4.cloneFloat64 = goog.vec.Mat4.createFloat64FromArray; +goog.vec.Mat4.createFromArray = function(matrix) { + var newMatrix = goog.vec.Mat4.createFloat32(); + goog.vec.Mat4.setFromArray(newMatrix, matrix); + return newMatrix +}; +goog.vec.Mat4.createFromValues = function(v00, v10, v20, v30, v01, v11, v21, v31, v02, v12, v22, v32, v03, v13, v23, v33) { + return goog.vec.Mat4.createFloat32FromValues(v00, v10, v20, v30, v01, v11, v21, v31, v02, v12, v22, v32, v03, v13, v23, v33) +}; +goog.vec.Mat4.clone = goog.vec.Mat4.createFromArray; +goog.vec.Mat4.getElement = function(mat, row, column) { + return mat[row + column * 4] +}; +goog.vec.Mat4.setElement = function(mat, row, column, value) { + mat[row + column * 4] = value; + return mat +}; +goog.vec.Mat4.setFromValues = function(mat, v00, v10, v20, v30, v01, v11, v21, v31, v02, v12, v22, v32, v03, v13, v23, v33) { + mat[0] = v00; + mat[1] = v10; + mat[2] = v20; + mat[3] = v30; + mat[4] = v01; + mat[5] = v11; + mat[6] = v21; + mat[7] = v31; + mat[8] = v02; + mat[9] = v12; + mat[10] = v22; + mat[11] = v32; + mat[12] = v03; + mat[13] = v13; + mat[14] = v23; + mat[15] = v33; + return mat +}; +goog.vec.Mat4.setFromArray = function(mat, values) { + mat[0] = values[0]; + mat[1] = values[1]; + mat[2] = values[2]; + mat[3] = values[3]; + mat[4] = values[4]; + mat[5] = values[5]; + mat[6] = values[6]; + mat[7] = values[7]; + mat[8] = values[8]; + mat[9] = values[9]; + mat[10] = values[10]; + mat[11] = values[11]; + mat[12] = values[12]; + mat[13] = values[13]; + mat[14] = values[14]; + mat[15] = values[15]; + return mat +}; +goog.vec.Mat4.setFromRowMajorArray = function(mat, values) { + mat[0] = values[0]; + mat[1] = values[4]; + mat[2] = values[8]; + mat[3] = values[12]; + mat[4] = values[1]; + mat[5] = values[5]; + mat[6] = values[9]; + mat[7] = values[13]; + mat[8] = values[2]; + mat[9] = values[6]; + mat[10] = values[10]; + mat[11] = values[14]; + mat[12] = values[3]; + mat[13] = values[7]; + mat[14] = values[11]; + mat[15] = values[15]; + return mat +}; +goog.vec.Mat4.setDiagonalValues = function(mat, v00, v11, v22, v33) { + mat[0] = v00; + mat[5] = v11; + mat[10] = v22; + mat[15] = v33; + return mat +}; +goog.vec.Mat4.setDiagonal = function(mat, vec) { + mat[0] = vec[0]; + mat[5] = vec[1]; + mat[10] = vec[2]; + mat[15] = vec[3]; + return mat +}; +goog.vec.Mat4.getDiagonal = function(mat, vec, opt_diagonal) { + if(!opt_diagonal) { + vec[0] = mat[0]; + vec[1] = mat[5]; + vec[2] = mat[10]; + vec[3] = mat[15] + }else { + var offset = opt_diagonal > 0 ? 4 * opt_diagonal : -opt_diagonal; + for(var i = 0;i < 4 - Math.abs(opt_diagonal);i++) { + vec[i] = mat[offset + 5 * i] + } + } + return vec +}; +goog.vec.Mat4.setColumnValues = function(mat, column, v0, v1, v2, v3) { + var i = column * 4; + mat[i] = v0; + mat[i + 1] = v1; + mat[i + 2] = v2; + mat[i + 3] = v3; + return mat +}; +goog.vec.Mat4.setColumn = function(mat, column, vec) { + var i = column * 4; + mat[i] = vec[0]; + mat[i + 1] = vec[1]; + mat[i + 2] = vec[2]; + mat[i + 3] = vec[3]; + return mat +}; +goog.vec.Mat4.getColumn = function(mat, column, vec) { + var i = column * 4; + vec[0] = mat[i]; + vec[1] = mat[i + 1]; + vec[2] = mat[i + 2]; + vec[3] = mat[i + 3]; + return vec +}; +goog.vec.Mat4.setColumns = function(mat, vec0, vec1, vec2, vec3) { + goog.vec.Mat4.setColumn(mat, 0, vec0); + goog.vec.Mat4.setColumn(mat, 1, vec1); + goog.vec.Mat4.setColumn(mat, 2, vec2); + goog.vec.Mat4.setColumn(mat, 3, vec3); + return mat +}; +goog.vec.Mat4.getColumns = function(mat, vec0, vec1, vec2, vec3) { + goog.vec.Mat4.getColumn(mat, 0, vec0); + goog.vec.Mat4.getColumn(mat, 1, vec1); + goog.vec.Mat4.getColumn(mat, 2, vec2); + goog.vec.Mat4.getColumn(mat, 3, vec3) +}; +goog.vec.Mat4.setRowValues = function(mat, row, v0, v1, v2, v3) { + mat[row] = v0; + mat[row + 4] = v1; + mat[row + 8] = v2; + mat[row + 12] = v3; + return mat +}; +goog.vec.Mat4.setRow = function(mat, row, vec) { + mat[row] = vec[0]; + mat[row + 4] = vec[1]; + mat[row + 8] = vec[2]; + mat[row + 12] = vec[3]; + return mat +}; +goog.vec.Mat4.getRow = function(mat, row, vec) { + vec[0] = mat[row]; + vec[1] = mat[row + 4]; + vec[2] = mat[row + 8]; + vec[3] = mat[row + 12]; + return vec +}; +goog.vec.Mat4.setRows = function(mat, vec0, vec1, vec2, vec3) { + goog.vec.Mat4.setRow(mat, 0, vec0); + goog.vec.Mat4.setRow(mat, 1, vec1); + goog.vec.Mat4.setRow(mat, 2, vec2); + goog.vec.Mat4.setRow(mat, 3, vec3); + return mat +}; +goog.vec.Mat4.getRows = function(mat, vec0, vec1, vec2, vec3) { + goog.vec.Mat4.getRow(mat, 0, vec0); + goog.vec.Mat4.getRow(mat, 1, vec1); + goog.vec.Mat4.getRow(mat, 2, vec2); + goog.vec.Mat4.getRow(mat, 3, vec3) +}; +goog.vec.Mat4.makeZero = function(mat) { + mat[0] = 0; + mat[1] = 0; + mat[2] = 0; + mat[3] = 0; + mat[4] = 0; + mat[5] = 0; + mat[6] = 0; + mat[7] = 0; + mat[8] = 0; + mat[9] = 0; + mat[10] = 0; + mat[11] = 0; + mat[12] = 0; + mat[13] = 0; + mat[14] = 0; + mat[15] = 0; + return mat +}; +goog.vec.Mat4.makeIdentity = function(mat) { + mat[0] = 1; + mat[1] = 0; + mat[2] = 0; + mat[3] = 0; + mat[4] = 0; + mat[5] = 1; + mat[6] = 0; + mat[7] = 0; + mat[8] = 0; + mat[9] = 0; + mat[10] = 1; + mat[11] = 0; + mat[12] = 0; + mat[13] = 0; + mat[14] = 0; + mat[15] = 1; + return mat +}; +goog.vec.Mat4.addMat = function(mat0, mat1, resultMat) { + resultMat[0] = mat0[0] + mat1[0]; + resultMat[1] = mat0[1] + mat1[1]; + resultMat[2] = mat0[2] + mat1[2]; + resultMat[3] = mat0[3] + mat1[3]; + resultMat[4] = mat0[4] + mat1[4]; + resultMat[5] = mat0[5] + mat1[5]; + resultMat[6] = mat0[6] + mat1[6]; + resultMat[7] = mat0[7] + mat1[7]; + resultMat[8] = mat0[8] + mat1[8]; + resultMat[9] = mat0[9] + mat1[9]; + resultMat[10] = mat0[10] + mat1[10]; + resultMat[11] = mat0[11] + mat1[11]; + resultMat[12] = mat0[12] + mat1[12]; + resultMat[13] = mat0[13] + mat1[13]; + resultMat[14] = mat0[14] + mat1[14]; + resultMat[15] = mat0[15] + mat1[15]; + return resultMat +}; +goog.vec.Mat4.subMat = function(mat0, mat1, resultMat) { + resultMat[0] = mat0[0] - mat1[0]; + resultMat[1] = mat0[1] - mat1[1]; + resultMat[2] = mat0[2] - mat1[2]; + resultMat[3] = mat0[3] - mat1[3]; + resultMat[4] = mat0[4] - mat1[4]; + resultMat[5] = mat0[5] - mat1[5]; + resultMat[6] = mat0[6] - mat1[6]; + resultMat[7] = mat0[7] - mat1[7]; + resultMat[8] = mat0[8] - mat1[8]; + resultMat[9] = mat0[9] - mat1[9]; + resultMat[10] = mat0[10] - mat1[10]; + resultMat[11] = mat0[11] - mat1[11]; + resultMat[12] = mat0[12] - mat1[12]; + resultMat[13] = mat0[13] - mat1[13]; + resultMat[14] = mat0[14] - mat1[14]; + resultMat[15] = mat0[15] - mat1[15]; + return resultMat +}; +goog.vec.Mat4.multScalar = function(mat, scalar, resultMat) { + resultMat[0] = mat[0] * scalar; + resultMat[1] = mat[1] * scalar; + resultMat[2] = mat[2] * scalar; + resultMat[3] = mat[3] * scalar; + resultMat[4] = mat[4] * scalar; + resultMat[5] = mat[5] * scalar; + resultMat[6] = mat[6] * scalar; + resultMat[7] = mat[7] * scalar; + resultMat[8] = mat[8] * scalar; + resultMat[9] = mat[9] * scalar; + resultMat[10] = mat[10] * scalar; + resultMat[11] = mat[11] * scalar; + resultMat[12] = mat[12] * scalar; + resultMat[13] = mat[13] * scalar; + resultMat[14] = mat[14] * scalar; + resultMat[15] = mat[15] * scalar; + return resultMat +}; +goog.vec.Mat4.multMat = function(mat0, mat1, resultMat) { + var a00 = mat0[0], a10 = mat0[1], a20 = mat0[2], a30 = mat0[3]; + var a01 = mat0[4], a11 = mat0[5], a21 = mat0[6], a31 = mat0[7]; + var a02 = mat0[8], a12 = mat0[9], a22 = mat0[10], a32 = mat0[11]; + var a03 = mat0[12], a13 = mat0[13], a23 = mat0[14], a33 = mat0[15]; + var b00 = mat1[0], b10 = mat1[1], b20 = mat1[2], b30 = mat1[3]; + var b01 = mat1[4], b11 = mat1[5], b21 = mat1[6], b31 = mat1[7]; + var b02 = mat1[8], b12 = mat1[9], b22 = mat1[10], b32 = mat1[11]; + var b03 = mat1[12], b13 = mat1[13], b23 = mat1[14], b33 = mat1[15]; + resultMat[0] = a00 * b00 + a01 * b10 + a02 * b20 + a03 * b30; + resultMat[1] = a10 * b00 + a11 * b10 + a12 * b20 + a13 * b30; + resultMat[2] = a20 * b00 + a21 * b10 + a22 * b20 + a23 * b30; + resultMat[3] = a30 * b00 + a31 * b10 + a32 * b20 + a33 * b30; + resultMat[4] = a00 * b01 + a01 * b11 + a02 * b21 + a03 * b31; + resultMat[5] = a10 * b01 + a11 * b11 + a12 * b21 + a13 * b31; + resultMat[6] = a20 * b01 + a21 * b11 + a22 * b21 + a23 * b31; + resultMat[7] = a30 * b01 + a31 * b11 + a32 * b21 + a33 * b31; + resultMat[8] = a00 * b02 + a01 * b12 + a02 * b22 + a03 * b32; + resultMat[9] = a10 * b02 + a11 * b12 + a12 * b22 + a13 * b32; + resultMat[10] = a20 * b02 + a21 * b12 + a22 * b22 + a23 * b32; + resultMat[11] = a30 * b02 + a31 * b12 + a32 * b22 + a33 * b32; + resultMat[12] = a00 * b03 + a01 * b13 + a02 * b23 + a03 * b33; + resultMat[13] = a10 * b03 + a11 * b13 + a12 * b23 + a13 * b33; + resultMat[14] = a20 * b03 + a21 * b13 + a22 * b23 + a23 * b33; + resultMat[15] = a30 * b03 + a31 * b13 + a32 * b23 + a33 * b33; + return resultMat +}; +goog.vec.Mat4.transpose = function(mat, resultMat) { + if(resultMat == mat) { + var a10 = mat[1], a20 = mat[2], a30 = mat[3]; + var a21 = mat[6], a31 = mat[7]; + var a32 = mat[11]; + resultMat[1] = mat[4]; + resultMat[2] = mat[8]; + resultMat[3] = mat[12]; + resultMat[4] = a10; + resultMat[6] = mat[9]; + resultMat[7] = mat[13]; + resultMat[8] = a20; + resultMat[9] = a21; + resultMat[11] = mat[14]; + resultMat[12] = a30; + resultMat[13] = a31; + resultMat[14] = a32 + }else { + resultMat[0] = mat[0]; + resultMat[1] = mat[4]; + resultMat[2] = mat[8]; + resultMat[3] = mat[12]; + resultMat[4] = mat[1]; + resultMat[5] = mat[5]; + resultMat[6] = mat[9]; + resultMat[7] = mat[13]; + resultMat[8] = mat[2]; + resultMat[9] = mat[6]; + resultMat[10] = mat[10]; + resultMat[11] = mat[14]; + resultMat[12] = mat[3]; + resultMat[13] = mat[7]; + resultMat[14] = mat[11]; + resultMat[15] = mat[15] + } + return resultMat +}; +goog.vec.Mat4.determinant = function(mat) { + var m00 = mat[0], m10 = mat[1], m20 = mat[2], m30 = mat[3]; + var m01 = mat[4], m11 = mat[5], m21 = mat[6], m31 = mat[7]; + var m02 = mat[8], m12 = mat[9], m22 = mat[10], m32 = mat[11]; + var m03 = mat[12], m13 = mat[13], m23 = mat[14], m33 = mat[15]; + var a0 = m00 * m11 - m10 * m01; + var a1 = m00 * m21 - m20 * m01; + var a2 = m00 * m31 - m30 * m01; + var a3 = m10 * m21 - m20 * m11; + var a4 = m10 * m31 - m30 * m11; + var a5 = m20 * m31 - m30 * m21; + var b0 = m02 * m13 - m12 * m03; + var b1 = m02 * m23 - m22 * m03; + var b2 = m02 * m33 - m32 * m03; + var b3 = m12 * m23 - m22 * m13; + var b4 = m12 * m33 - m32 * m13; + var b5 = m22 * m33 - m32 * m23; + return a0 * b5 - a1 * b4 + a2 * b3 + a3 * b2 - a4 * b1 + a5 * b0 +}; +goog.vec.Mat4.invert = function(mat, resultMat) { + var m00 = mat[0], m10 = mat[1], m20 = mat[2], m30 = mat[3]; + var m01 = mat[4], m11 = mat[5], m21 = mat[6], m31 = mat[7]; + var m02 = mat[8], m12 = mat[9], m22 = mat[10], m32 = mat[11]; + var m03 = mat[12], m13 = mat[13], m23 = mat[14], m33 = mat[15]; + var a0 = m00 * m11 - m10 * m01; + var a1 = m00 * m21 - m20 * m01; + var a2 = m00 * m31 - m30 * m01; + var a3 = m10 * m21 - m20 * m11; + var a4 = m10 * m31 - m30 * m11; + var a5 = m20 * m31 - m30 * m21; + var b0 = m02 * m13 - m12 * m03; + var b1 = m02 * m23 - m22 * m03; + var b2 = m02 * m33 - m32 * m03; + var b3 = m12 * m23 - m22 * m13; + var b4 = m12 * m33 - m32 * m13; + var b5 = m22 * m33 - m32 * m23; + var det = a0 * b5 - a1 * b4 + a2 * b3 + a3 * b2 - a4 * b1 + a5 * b0; + if(det == 0) { + return false + } + var idet = 1 / det; + resultMat[0] = (m11 * b5 - m21 * b4 + m31 * b3) * idet; + resultMat[1] = (-m10 * b5 + m20 * b4 - m30 * b3) * idet; + resultMat[2] = (m13 * a5 - m23 * a4 + m33 * a3) * idet; + resultMat[3] = (-m12 * a5 + m22 * a4 - m32 * a3) * idet; + resultMat[4] = (-m01 * b5 + m21 * b2 - m31 * b1) * idet; + resultMat[5] = (m00 * b5 - m20 * b2 + m30 * b1) * idet; + resultMat[6] = (-m03 * a5 + m23 * a2 - m33 * a1) * idet; + resultMat[7] = (m02 * a5 - m22 * a2 + m32 * a1) * idet; + resultMat[8] = (m01 * b4 - m11 * b2 + m31 * b0) * idet; + resultMat[9] = (-m00 * b4 + m10 * b2 - m30 * b0) * idet; + resultMat[10] = (m03 * a4 - m13 * a2 + m33 * a0) * idet; + resultMat[11] = (-m02 * a4 + m12 * a2 - m32 * a0) * idet; + resultMat[12] = (-m01 * b3 + m11 * b1 - m21 * b0) * idet; + resultMat[13] = (m00 * b3 - m10 * b1 + m20 * b0) * idet; + resultMat[14] = (-m03 * a3 + m13 * a1 - m23 * a0) * idet; + resultMat[15] = (m02 * a3 - m12 * a1 + m22 * a0) * idet; + return true +}; +goog.vec.Mat4.equals = function(mat0, mat1) { + return mat0.length == mat1.length && mat0[0] == mat1[0] && mat0[1] == mat1[1] && mat0[2] == mat1[2] && mat0[3] == mat1[3] && mat0[4] == mat1[4] && mat0[5] == mat1[5] && mat0[6] == mat1[6] && mat0[7] == mat1[7] && mat0[8] == mat1[8] && mat0[9] == mat1[9] && mat0[10] == mat1[10] && mat0[11] == mat1[11] && mat0[12] == mat1[12] && mat0[13] == mat1[13] && mat0[14] == mat1[14] && mat0[15] == mat1[15] +}; +goog.vec.Mat4.multVec3 = function(mat, vec, resultVec) { + var x = vec[0], y = vec[1], z = vec[2]; + resultVec[0] = x * mat[0] + y * mat[4] + z * mat[8] + mat[12]; + resultVec[1] = x * mat[1] + y * mat[5] + z * mat[9] + mat[13]; + resultVec[2] = x * mat[2] + y * mat[6] + z * mat[10] + mat[14]; + return resultVec +}; +goog.vec.Mat4.multVec3NoTranslate = function(mat, vec, resultVec) { + var x = vec[0], y = vec[1], z = vec[2]; + resultVec[0] = x * mat[0] + y * mat[4] + z * mat[8]; + resultVec[1] = x * mat[1] + y * mat[5] + z * mat[9]; + resultVec[2] = x * mat[2] + y * mat[6] + z * mat[10]; + return resultVec +}; +goog.vec.Mat4.multVec3Projective = function(mat, vec, resultVec) { + var x = vec[0], y = vec[1], z = vec[2]; + var invw = 1 / (x * mat[3] + y * mat[7] + z * mat[11] + mat[15]); + resultVec[0] = (x * mat[0] + y * mat[4] + z * mat[8] + mat[12]) * invw; + resultVec[1] = (x * mat[1] + y * mat[5] + z * mat[9] + mat[13]) * invw; + resultVec[2] = (x * mat[2] + y * mat[6] + z * mat[10] + mat[14]) * invw; + return resultVec +}; +goog.vec.Mat4.multVec4 = function(mat, vec, resultVec) { + var x = vec[0], y = vec[1], z = vec[2], w = vec[3]; + resultVec[0] = x * mat[0] + y * mat[4] + z * mat[8] + w * mat[12]; + resultVec[1] = x * mat[1] + y * mat[5] + z * mat[9] + w * mat[13]; + resultVec[2] = x * mat[2] + y * mat[6] + z * mat[10] + w * mat[14]; + resultVec[3] = x * mat[3] + y * mat[7] + z * mat[11] + w * mat[15]; + return resultVec +}; +goog.vec.Mat4.makeTranslate = function(mat, x, y, z) { + goog.vec.Mat4.makeIdentity(mat); + return goog.vec.Mat4.setColumnValues(mat, 3, x, y, z, 1) +}; +goog.vec.Mat4.makeScale = function(mat, x, y, z) { + goog.vec.Mat4.makeIdentity(mat); + return goog.vec.Mat4.setDiagonalValues(mat, x, y, z, 1) +}; +goog.vec.Mat4.makeRotate = function(mat, angle, ax, ay, az) { + var c = Math.cos(angle); + var d = 1 - c; + var s = Math.sin(angle); + return goog.vec.Mat4.setFromValues(mat, ax * ax * d + c, ax * ay * d + az * s, ax * az * d - ay * s, 0, ax * ay * d - az * s, ay * ay * d + c, ay * az * d + ax * s, 0, ax * az * d + ay * s, ay * az * d - ax * s, az * az * d + c, 0, 0, 0, 0, 1) +}; +goog.vec.Mat4.makeRotateX = function(mat, angle) { + var c = Math.cos(angle); + var s = Math.sin(angle); + return goog.vec.Mat4.setFromValues(mat, 1, 0, 0, 0, 0, c, s, 0, 0, -s, c, 0, 0, 0, 0, 1) +}; +goog.vec.Mat4.makeRotateY = function(mat, angle) { + var c = Math.cos(angle); + var s = Math.sin(angle); + return goog.vec.Mat4.setFromValues(mat, c, 0, -s, 0, 0, 1, 0, 0, s, 0, c, 0, 0, 0, 0, 1) +}; +goog.vec.Mat4.makeRotateZ = function(mat, angle) { + var c = Math.cos(angle); + var s = Math.sin(angle); + return goog.vec.Mat4.setFromValues(mat, c, s, 0, 0, -s, c, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1) +}; +goog.vec.Mat4.makeFrustum = function(mat, left, right, bottom, top, near, far) { + var x = 2 * near / (right - left); + var y = 2 * near / (top - bottom); + var a = (right + left) / (right - left); + var b = (top + bottom) / (top - bottom); + var c = -(far + near) / (far - near); + var d = -(2 * far * near) / (far - near); + return goog.vec.Mat4.setFromValues(mat, x, 0, 0, 0, 0, y, 0, 0, a, b, c, -1, 0, 0, d, 0) +}; +goog.vec.Mat4.makePerspective = function(mat, fovy, aspect, near, far) { + var angle = fovy / 2; + var dz = far - near; + var sinAngle = Math.sin(angle); + if(dz == 0 || sinAngle == 0 || aspect == 0) { + return mat + } + var cot = Math.cos(angle) / sinAngle; + return goog.vec.Mat4.setFromValues(mat, cot / aspect, 0, 0, 0, 0, cot, 0, 0, 0, 0, -(far + near) / dz, -1, 0, 0, -(2 * near * far) / dz, 0) +}; +goog.vec.Mat4.makeOrtho = function(mat, left, right, bottom, top, near, far) { + var x = 2 / (right - left); + var y = 2 / (top - bottom); + var z = -2 / (far - near); + var a = -(right + left) / (right - left); + var b = -(top + bottom) / (top - bottom); + var c = -(far + near) / (far - near); + return goog.vec.Mat4.setFromValues(mat, x, 0, 0, 0, 0, y, 0, 0, 0, 0, z, 0, a, b, c, 1) +}; +goog.vec.Mat4.makeLookAt = function(mat, eyePt, centerPt, worldUpVec) { + var fwdVec = goog.vec.Mat4.tmpVec4_[0]; + goog.vec.Vec3.subtract(centerPt, eyePt, fwdVec); + goog.vec.Vec3.normalize(fwdVec, fwdVec); + fwdVec[3] = 0; + var sideVec = goog.vec.Mat4.tmpVec4_[1]; + goog.vec.Vec3.cross(fwdVec, worldUpVec, sideVec); + goog.vec.Vec3.normalize(sideVec, sideVec); + sideVec[3] = 0; + var upVec = goog.vec.Mat4.tmpVec4_[2]; + goog.vec.Vec3.cross(sideVec, fwdVec, upVec); + goog.vec.Vec3.normalize(upVec, upVec); + upVec[3] = 0; + goog.vec.Vec3.negate(fwdVec, fwdVec); + goog.vec.Mat4.setRow(mat, 0, sideVec); + goog.vec.Mat4.setRow(mat, 1, upVec); + goog.vec.Mat4.setRow(mat, 2, fwdVec); + goog.vec.Mat4.setRowValues(mat, 3, 0, 0, 0, 1); + goog.vec.Mat4.translate(mat, -eyePt[0], -eyePt[1], -eyePt[2]); + return mat +}; +goog.vec.Mat4.toLookAt = function(mat, eyePt, fwdVec, worldUpVec) { + var matInverse = goog.vec.Mat4.tmpMat4_[0]; + if(!goog.vec.Mat4.invert(mat, matInverse)) { + return false + } + if(eyePt) { + eyePt[0] = matInverse[12]; + eyePt[1] = matInverse[13]; + eyePt[2] = matInverse[14] + } + if(fwdVec || worldUpVec) { + if(!fwdVec) { + fwdVec = goog.vec.Mat4.tmpVec3_[0] + } + fwdVec[0] = -mat[2]; + fwdVec[1] = -mat[6]; + fwdVec[2] = -mat[10]; + goog.vec.Vec3.normalize(fwdVec, fwdVec) + } + if(worldUpVec) { + var side = goog.vec.Mat4.tmpVec3_[1]; + side[0] = mat[0]; + side[1] = mat[4]; + side[2] = mat[8]; + goog.vec.Vec3.cross(side, fwdVec, worldUpVec); + goog.vec.Vec3.normalize(worldUpVec, worldUpVec) + } + return true +}; +goog.vec.Mat4.makeEulerZXZ = function(mat, theta1, theta2, theta3) { + var c1 = Math.cos(theta1); + var s1 = Math.sin(theta1); + var c2 = Math.cos(theta2); + var s2 = Math.sin(theta2); + var c3 = Math.cos(theta3); + var s3 = Math.sin(theta3); + mat[0] = c1 * c3 - c2 * s1 * s3; + mat[1] = c2 * c1 * s3 + c3 * s1; + mat[2] = s3 * s2; + mat[3] = 0; + mat[4] = -c1 * s3 - c3 * c2 * s1; + mat[5] = c1 * c2 * c3 - s1 * s3; + mat[6] = c3 * s2; + mat[7] = 0; + mat[8] = s2 * s1; + mat[9] = -c1 * s2; + mat[10] = c2; + mat[11] = 0; + mat[12] = 0; + mat[13] = 0; + mat[14] = 0; + mat[15] = 1; + return mat +}; +goog.vec.Mat4.toEulerZXZ = function(mat, euler, opt_theta2IsNegative) { + var sinTheta2 = Math.sqrt(mat[2] * mat[2] + mat[6] * mat[6]); + var signTheta2 = opt_theta2IsNegative ? -1 : 1; + if(sinTheta2 > goog.vec.EPSILON) { + euler[2] = Math.atan2(mat[2] * signTheta2, mat[6] * signTheta2); + euler[1] = Math.atan2(sinTheta2 * signTheta2, mat[10]); + euler[0] = Math.atan2(mat[8] * signTheta2, -mat[9] * signTheta2) + }else { + euler[0] = 0; + euler[1] = Math.atan2(sinTheta2 * signTheta2, mat[10]); + euler[2] = Math.atan2(mat[1], mat[0]) + } + euler[0] = (euler[0] + Math.PI * 2) % (Math.PI * 2); + euler[2] = (euler[2] + Math.PI * 2) % (Math.PI * 2); + euler[1] = (euler[1] * signTheta2 + Math.PI * 2) % (Math.PI * 2) * signTheta2; + return euler +}; +goog.vec.Mat4.translate = function(mat, x, y, z) { + return goog.vec.Mat4.setColumnValues(mat, 3, mat[0] * x + mat[4] * y + mat[8] * z + mat[12], mat[1] * x + mat[5] * y + mat[9] * z + mat[13], mat[2] * x + mat[6] * y + mat[10] * z + mat[14], mat[3] * x + mat[7] * y + mat[11] * z + mat[15]) +}; +goog.vec.Mat4.scale = function(mat, x, y, z) { + return goog.vec.Mat4.setFromValues(mat, mat[0] * x, mat[1] * x, mat[2] * x, mat[3] * x, mat[4] * y, mat[5] * y, mat[6] * y, mat[7] * y, mat[8] * z, mat[9] * z, mat[10] * z, mat[11] * z, mat[12], mat[13], mat[14], mat[15]) +}; +goog.vec.Mat4.rotate = function(mat, angle, x, y, z) { + var m00 = mat[0], m10 = mat[1], m20 = mat[2], m30 = mat[3]; + var m01 = mat[4], m11 = mat[5], m21 = mat[6], m31 = mat[7]; + var m02 = mat[8], m12 = mat[9], m22 = mat[10], m32 = mat[11]; + var m03 = mat[12], m13 = mat[13], m23 = mat[14], m33 = mat[15]; + var cosAngle = Math.cos(angle); + var sinAngle = Math.sin(angle); + var diffCosAngle = 1 - cosAngle; + var r00 = x * x * diffCosAngle + cosAngle; + var r10 = x * y * diffCosAngle + z * sinAngle; + var r20 = x * z * diffCosAngle - y * sinAngle; + var r01 = x * y * diffCosAngle - z * sinAngle; + var r11 = y * y * diffCosAngle + cosAngle; + var r21 = y * z * diffCosAngle + x * sinAngle; + var r02 = x * z * diffCosAngle + y * sinAngle; + var r12 = y * z * diffCosAngle - x * sinAngle; + var r22 = z * z * diffCosAngle + cosAngle; + return goog.vec.Mat4.setFromValues(mat, m00 * r00 + m01 * r10 + m02 * r20, m10 * r00 + m11 * r10 + m12 * r20, m20 * r00 + m21 * r10 + m22 * r20, m30 * r00 + m31 * r10 + m32 * r20, m00 * r01 + m01 * r11 + m02 * r21, m10 * r01 + m11 * r11 + m12 * r21, m20 * r01 + m21 * r11 + m22 * r21, m30 * r01 + m31 * r11 + m32 * r21, m00 * r02 + m01 * r12 + m02 * r22, m10 * r02 + m11 * r12 + m12 * r22, m20 * r02 + m21 * r12 + m22 * r22, m30 * r02 + m31 * r12 + m32 * r22, m03, m13, m23, m33) +}; +goog.vec.Mat4.rotateX = function(mat, angle) { + var m01 = mat[4], m11 = mat[5], m21 = mat[6], m31 = mat[7]; + var m02 = mat[8], m12 = mat[9], m22 = mat[10], m32 = mat[11]; + var c = Math.cos(angle); + var s = Math.sin(angle); + mat[4] = m01 * c + m02 * s; + mat[5] = m11 * c + m12 * s; + mat[6] = m21 * c + m22 * s; + mat[7] = m31 * c + m32 * s; + mat[8] = m01 * -s + m02 * c; + mat[9] = m11 * -s + m12 * c; + mat[10] = m21 * -s + m22 * c; + mat[11] = m31 * -s + m32 * c; + return mat +}; +goog.vec.Mat4.rotateY = function(mat, angle) { + var m00 = mat[0], m10 = mat[1], m20 = mat[2], m30 = mat[3]; + var m02 = mat[8], m12 = mat[9], m22 = mat[10], m32 = mat[11]; + var c = Math.cos(angle); + var s = Math.sin(angle); + mat[0] = m00 * c + m02 * -s; + mat[1] = m10 * c + m12 * -s; + mat[2] = m20 * c + m22 * -s; + mat[3] = m30 * c + m32 * -s; + mat[8] = m00 * s + m02 * c; + mat[9] = m10 * s + m12 * c; + mat[10] = m20 * s + m22 * c; + mat[11] = m30 * s + m32 * c; + return mat +}; +goog.vec.Mat4.rotateZ = function(mat, angle) { + var m00 = mat[0], m10 = mat[1], m20 = mat[2], m30 = mat[3]; + var m01 = mat[4], m11 = mat[5], m21 = mat[6], m31 = mat[7]; + var c = Math.cos(angle); + var s = Math.sin(angle); + mat[0] = m00 * c + m01 * s; + mat[1] = m10 * c + m11 * s; + mat[2] = m20 * c + m21 * s; + mat[3] = m30 * c + m31 * s; + mat[4] = m00 * -s + m01 * c; + mat[5] = m10 * -s + m11 * c; + mat[6] = m20 * -s + m21 * c; + mat[7] = m30 * -s + m31 * c; + return mat +}; +goog.vec.Mat4.getTranslation = function(mat, translation) { + translation[0] = mat[12]; + translation[1] = mat[13]; + translation[2] = mat[14]; + return translation +}; +goog.vec.Mat4.tmpVec3_ = [goog.vec.Vec3.createFloat64(), goog.vec.Vec3.createFloat64()]; +goog.vec.Mat4.tmpVec4_ = [goog.vec.Vec4.createFloat64(), goog.vec.Vec4.createFloat64(), goog.vec.Vec4.createFloat64()]; +goog.vec.Mat4.tmpMat4_ = [goog.vec.Mat4.createFloat64()]; +goog.provide("ol.TransformFunction"); +ol.TransformFunction; +goog.provide("ol.Extent"); +goog.provide("ol.extent"); +goog.provide("ol.extent.Relationship"); +goog.require("goog.asserts"); +goog.require("goog.vec.Mat4"); +goog.require("ol.Coordinate"); +goog.require("ol.Size"); +goog.require("ol.TransformFunction"); +ol.Extent; +ol.extent.Relationship = {UNKNOWN:0, INTERSECTING:1, ABOVE:2, RIGHT:4, BELOW:8, LEFT:16}; +ol.extent.boundingExtent = function(coordinates) { + var extent = ol.extent.createEmpty(); + for(var i = 0, ii = coordinates.length;i < ii;++i) { + ol.extent.extendCoordinate(extent, coordinates[i]) + } + return extent +}; +ol.extent.boundingExtentXYs_ = function(xs, ys, opt_extent) { + goog.asserts.assert(xs.length > 0); + goog.asserts.assert(ys.length > 0); + var minX = Math.min.apply(null, xs); + var minY = Math.min.apply(null, ys); + var maxX = Math.max.apply(null, xs); + var maxY = Math.max.apply(null, ys); + return ol.extent.createOrUpdate(minX, minY, maxX, maxY, opt_extent) +}; +ol.extent.buffer = function(extent, value, opt_extent) { + if(goog.isDef(opt_extent)) { + opt_extent[0] = extent[0] - value; + opt_extent[1] = extent[1] - value; + opt_extent[2] = extent[2] + value; + opt_extent[3] = extent[3] + value; + return opt_extent + }else { + return[extent[0] - value, extent[1] - value, extent[2] + value, extent[3] + value] + } +}; +ol.extent.clone = function(extent, opt_extent) { + if(goog.isDef(opt_extent)) { + opt_extent[0] = extent[0]; + opt_extent[1] = extent[1]; + opt_extent[2] = extent[2]; + opt_extent[3] = extent[3]; + return opt_extent + }else { + return extent.slice() + } +}; +ol.extent.closestSquaredDistanceXY = function(extent, x, y) { + var dx, dy; + if(x < extent[0]) { + dx = extent[0] - x + }else { + if(extent[2] < x) { + dx = x - extent[2] + }else { + dx = 0 + } + } + if(y < extent[1]) { + dy = extent[1] - y + }else { + if(extent[3] < y) { + dy = y - extent[3] + }else { + dy = 0 + } + } + return dx * dx + dy * dy +}; +ol.extent.containsCoordinate = function(extent, coordinate) { + return extent[0] <= coordinate[0] && coordinate[0] <= extent[2] && extent[1] <= coordinate[1] && coordinate[1] <= extent[3] +}; +ol.extent.containsExtent = function(extent1, extent2) { + return extent1[0] <= extent2[0] && extent2[2] <= extent1[2] && extent1[1] <= extent2[1] && extent2[3] <= extent1[3] +}; +ol.extent.coordinateRelationship = function(extent, coordinate) { + var minX = extent[0]; + var minY = extent[1]; + var maxX = extent[2]; + var maxY = extent[3]; + var x = coordinate[0]; + var y = coordinate[1]; + var relationship = ol.extent.Relationship.UNKNOWN; + if(x < minX) { + relationship = relationship | ol.extent.Relationship.LEFT + }else { + if(x > maxX) { + relationship = relationship | ol.extent.Relationship.RIGHT + } + } + if(y < minY) { + relationship = relationship | ol.extent.Relationship.BELOW + }else { + if(y > maxY) { + relationship = relationship | ol.extent.Relationship.ABOVE + } + } + if(relationship === ol.extent.Relationship.UNKNOWN) { + relationship = ol.extent.Relationship.INTERSECTING + } + return relationship +}; +ol.extent.createEmpty = function() { + return[Infinity, Infinity, -Infinity, -Infinity] +}; +ol.extent.createOrUpdate = function(minX, minY, maxX, maxY, opt_extent) { + if(goog.isDef(opt_extent)) { + opt_extent[0] = minX; + opt_extent[1] = minY; + opt_extent[2] = maxX; + opt_extent[3] = maxY; + return opt_extent + }else { + return[minX, minY, maxX, maxY] + } +}; +ol.extent.createOrUpdateEmpty = function(opt_extent) { + return ol.extent.createOrUpdate(Infinity, Infinity, -Infinity, -Infinity, opt_extent) +}; +ol.extent.createOrUpdateFromCoordinate = function(coordinate, opt_extent) { + var x = coordinate[0]; + var y = coordinate[1]; + return ol.extent.createOrUpdate(x, y, x, y, opt_extent) +}; +ol.extent.createOrUpdateFromCoordinates = function(coordinates, opt_extent) { + var extent = ol.extent.createOrUpdateEmpty(opt_extent); + return ol.extent.extendCoordinates(extent, coordinates) +}; +ol.extent.createOrUpdateFromFlatCoordinates = function(flatCoordinates, offset, end, stride, opt_extent) { + var extent = ol.extent.createOrUpdateEmpty(opt_extent); + return ol.extent.extendFlatCoordinates(extent, flatCoordinates, offset, end, stride) +}; +ol.extent.createOrUpdateFromRings = function(rings, opt_extent) { + var extent = ol.extent.createOrUpdateEmpty(opt_extent); + return ol.extent.extendRings(extent, rings) +}; +ol.extent.empty = function(extent) { + extent[0] = extent[1] = Infinity; + extent[2] = extent[3] = -Infinity; + return extent +}; +ol.extent.equals = function(extent1, extent2) { + return extent1[0] == extent2[0] && extent1[2] == extent2[2] && extent1[1] == extent2[1] && extent1[3] == extent2[3] +}; +ol.extent.extend = function(extent1, extent2) { + if(extent2[0] < extent1[0]) { + extent1[0] = extent2[0] + } + if(extent2[2] > extent1[2]) { + extent1[2] = extent2[2] + } + if(extent2[1] < extent1[1]) { + extent1[1] = extent2[1] + } + if(extent2[3] > extent1[3]) { + extent1[3] = extent2[3] + } + return extent1 +}; +ol.extent.extendCoordinate = function(extent, coordinate) { + if(coordinate[0] < extent[0]) { + extent[0] = coordinate[0] + } + if(coordinate[0] > extent[2]) { + extent[2] = coordinate[0] + } + if(coordinate[1] < extent[1]) { + extent[1] = coordinate[1] + } + if(coordinate[1] > extent[3]) { + extent[3] = coordinate[1] + } +}; +ol.extent.extendCoordinates = function(extent, coordinates) { + var i, ii; + for(i = 0, ii = coordinates.length;i < ii;++i) { + ol.extent.extendCoordinate(extent, coordinates[i]) + } + return extent +}; +ol.extent.extendFlatCoordinates = function(extent, flatCoordinates, offset, end, stride) { + for(;offset < end;offset += stride) { + ol.extent.extendXY(extent, flatCoordinates[offset], flatCoordinates[offset + 1]) + } + return extent +}; +ol.extent.extendRings = function(extent, rings) { + var i, ii; + for(i = 0, ii = rings.length;i < ii;++i) { + ol.extent.extendCoordinates(extent, rings[i]) + } + return extent +}; +ol.extent.extendXY = function(extent, x, y) { + extent[0] = Math.min(extent[0], x); + extent[1] = Math.min(extent[1], y); + extent[2] = Math.max(extent[2], x); + extent[3] = Math.max(extent[3], y) +}; +ol.extent.getArea = function(extent) { + return ol.extent.getWidth(extent) * ol.extent.getHeight(extent) +}; +ol.extent.getBottomLeft = function(extent) { + return[extent[0], extent[1]] +}; +ol.extent.getBottomRight = function(extent) { + return[extent[2], extent[1]] +}; +ol.extent.getCenter = function(extent) { + return[(extent[0] + extent[2]) / 2, (extent[1] + extent[3]) / 2] +}; +ol.extent.getEnlargedArea = function(extent1, extent2) { + var minX = Math.min(extent1[0], extent2[0]); + var minY = Math.min(extent1[1], extent2[1]); + var maxX = Math.max(extent1[2], extent2[2]); + var maxY = Math.max(extent1[3], extent2[3]); + return(maxX - minX) * (maxY - minY) +}; +ol.extent.getForView2DAndSize = function(center, resolution, rotation, size, opt_extent) { + var dx = resolution * size[0] / 2; + var dy = resolution * size[1] / 2; + var cosRotation = Math.cos(rotation); + var sinRotation = Math.sin(rotation); + var xs = [-dx, -dx, dx, dx]; + var ys = [-dy, dy, -dy, dy]; + var i, x, y; + for(i = 0;i < 4;++i) { + x = xs[i]; + y = ys[i]; + xs[i] = center[0] + x * cosRotation - y * sinRotation; + ys[i] = center[1] + x * sinRotation + y * cosRotation + } + return ol.extent.boundingExtentXYs_(xs, ys, opt_extent) +}; +ol.extent.getHeight = function(extent) { + return extent[3] - extent[1] +}; +ol.extent.getIntersectionArea = function(extent1, extent2) { + var minX = Math.max(extent1[0], extent2[0]); + var minY = Math.max(extent1[1], extent2[1]); + var maxX = Math.min(extent1[2], extent2[2]); + var maxY = Math.min(extent1[3], extent2[3]); + return Math.max(0, maxX - minX) * Math.max(0, maxY - minY) +}; +ol.extent.getMargin = function(extent) { + return ol.extent.getWidth(extent) + ol.extent.getHeight(extent) +}; +ol.extent.getSize = function(extent) { + return[extent[2] - extent[0], extent[3] - extent[1]] +}; +ol.extent.getTopLeft = function(extent) { + return[extent[0], extent[3]] +}; +ol.extent.getTopRight = function(extent) { + return[extent[2], extent[3]] +}; +ol.extent.getWidth = function(extent) { + return extent[2] - extent[0] +}; +ol.extent.intersects = function(extent1, extent2) { + return extent1[0] <= extent2[2] && extent1[2] >= extent2[0] && extent1[1] <= extent2[3] && extent1[3] >= extent2[1] +}; +ol.extent.isEmpty = function(extent) { + return extent[2] < extent[0] || extent[3] < extent[1] +}; +ol.extent.normalize = function(extent, coordinate) { + return[(coordinate[0] - extent[0]) / (extent[2] - extent[0]), (coordinate[1] - extent[1]) / (extent[3] - extent[1])] +}; +ol.extent.returnOrUpdate = function(extent, opt_extent) { + if(goog.isDef(opt_extent)) { + opt_extent[0] = extent[0]; + opt_extent[1] = extent[1]; + opt_extent[2] = extent[2]; + opt_extent[3] = extent[3]; + return opt_extent + }else { + return extent + } +}; +ol.extent.scaleFromCenter = function(extent, value) { + var deltaX = (extent[2] - extent[0]) / 2 * (value - 1); + var deltaY = (extent[3] - extent[1]) / 2 * (value - 1); + extent[0] -= deltaX; + extent[2] += deltaX; + extent[1] -= deltaY; + extent[3] += deltaY +}; +ol.extent.segmentIntersects = function(extent, start, end) { + var intersects = false; + var startRel = ol.extent.coordinateRelationship(extent, start); + var endRel = ol.extent.coordinateRelationship(extent, end); + if(startRel === ol.extent.Relationship.INTERSECTING || endRel === ol.extent.Relationship.INTERSECTING) { + intersects = true + }else { + var minX = extent[0]; + var minY = extent[1]; + var maxX = extent[2]; + var maxY = extent[3]; + var startX = start[0]; + var startY = start[1]; + var endX = end[0]; + var endY = end[1]; + var slope = (endY - startY) / (endX - startX); + var x, y; + if(!!(endRel & ol.extent.Relationship.ABOVE) && !(startRel & ol.extent.Relationship.ABOVE)) { + x = endX - (endY - maxY) / slope; + intersects = x >= minX && x <= maxX + }else { + if(!!(endRel & ol.extent.Relationship.RIGHT) && !(startRel & ol.extent.Relationship.RIGHT)) { + y = endY - (endX - maxX) * slope; + intersects = y >= minY && y <= maxY + }else { + if(!!(endRel & ol.extent.Relationship.BELOW) && !(startRel & ol.extent.Relationship.BELOW)) { + x = endX - (endY - minY) / slope; + intersects = x >= minX && x <= maxX + }else { + if(!!(endRel & ol.extent.Relationship.LEFT) && !(startRel & ol.extent.Relationship.LEFT)) { + y = endY - (endX - minX) * slope; + intersects = y >= minY && y <= maxY + } + } + } + } + } + return intersects +}; +ol.extent.touches = function(extent1, extent2) { + var intersects = ol.extent.intersects(extent1, extent2); + return intersects && (extent1[0] == extent2[2] || extent1[2] == extent2[0] || extent1[1] == extent2[3] || extent1[3] == extent2[1]) +}; +ol.extent.transform = function(extent, transformFn, opt_extent) { + var coordinates = [extent[0], extent[1], extent[0], extent[3], extent[2], extent[1], extent[2], extent[3]]; + transformFn(coordinates, coordinates, 2); + var xs = [coordinates[0], coordinates[2], coordinates[4], coordinates[6]]; + var ys = [coordinates[1], coordinates[3], coordinates[5], coordinates[7]]; + return ol.extent.boundingExtentXYs_(xs, ys, opt_extent) +}; +ol.extent.transform2D = function(extent, transform, opt_extent) { + var dest = goog.isDef(opt_extent) ? opt_extent : []; + var m00 = goog.vec.Mat4.getElement(transform, 0, 0); + var m10 = goog.vec.Mat4.getElement(transform, 1, 0); + var m01 = goog.vec.Mat4.getElement(transform, 0, 1); + var m11 = goog.vec.Mat4.getElement(transform, 1, 1); + var m03 = goog.vec.Mat4.getElement(transform, 0, 3); + var m13 = goog.vec.Mat4.getElement(transform, 1, 3); + var xi = [0, 2, 0, 2]; + var yi = [1, 1, 3, 3]; + var xs = []; + var ys = []; + var i, x, y; + for(i = 0;i < 4;++i) { + x = extent[xi[i]]; + y = extent[yi[i]]; + xs[i] = m00 * x + m01 * y + m03; + ys[i] = m10 * x + m11 * y + m13 + } + dest[0] = Math.min.apply(null, xs); + dest[1] = Math.min.apply(null, ys); + dest[2] = Math.max.apply(null, xs); + dest[3] = Math.max.apply(null, ys); + return dest +}; +goog.provide("ol.Tile"); +goog.provide("ol.TileState"); +goog.require("goog.events"); +goog.require("goog.events.EventTarget"); +goog.require("goog.events.EventType"); +goog.require("ol.TileCoord"); +ol.TileState = {IDLE:0, LOADING:1, LOADED:2, ERROR:3, EMPTY:4}; +ol.Tile = function(tileCoord, state) { + goog.base(this); + this.tileCoord = tileCoord; + this.state = state +}; +goog.inherits(ol.Tile, goog.events.EventTarget); +ol.Tile.prototype.dispatchChangeEvent = function() { + this.dispatchEvent(goog.events.EventType.CHANGE) +}; +ol.Tile.prototype.getImage = goog.abstractMethod; +ol.Tile.prototype.getKey = function() { + return goog.getUid(this).toString() +}; +ol.Tile.prototype.getTileCoord = function() { + return this.tileCoord +}; +ol.Tile.prototype.getState = function() { + return this.state +}; +ol.Tile.prototype.load = goog.abstractMethod; +goog.provide("ol.structs.PriorityQueue"); +goog.require("goog.asserts"); +goog.require("goog.object"); +ol.structs.PriorityQueue = function(priorityFunction, keyFunction) { + this.priorityFunction_ = priorityFunction; + this.keyFunction_ = keyFunction; + this.elements_ = []; + this.priorities_ = []; + this.queuedElements_ = {} +}; +ol.structs.PriorityQueue.DROP = Infinity; +ol.structs.PriorityQueue.prototype.assertValid = function() { + var elements = this.elements_; + var priorities = this.priorities_; + var n = elements.length; + goog.asserts.assert(priorities.length == n); + var i, priority; + for(i = 0;i < (n >> 1) - 1;++i) { + priority = priorities[i]; + goog.asserts.assert(priority <= priorities[this.getLeftChildIndex_(i)]); + goog.asserts.assert(priority <= priorities[this.getRightChildIndex_(i)]) + } +}; +ol.structs.PriorityQueue.prototype.clear = function() { + this.elements_.length = 0; + this.priorities_.length = 0; + goog.object.clear(this.queuedElements_) +}; +ol.structs.PriorityQueue.prototype.dequeue = function() { + var elements = this.elements_; + goog.asserts.assert(elements.length > 0); + var priorities = this.priorities_; + var element = elements[0]; + if(elements.length == 1) { + elements.length = 0; + priorities.length = 0 + }else { + elements[0] = elements.pop(); + priorities[0] = priorities.pop(); + this.siftUp_(0) + } + var elementKey = this.keyFunction_(element); + goog.asserts.assert(elementKey in this.queuedElements_); + delete this.queuedElements_[elementKey]; + return element +}; +ol.structs.PriorityQueue.prototype.enqueue = function(element) { + goog.asserts.assert(!(this.keyFunction_(element) in this.queuedElements_)); + var priority = this.priorityFunction_(element); + if(priority != ol.structs.PriorityQueue.DROP) { + this.elements_.push(element); + this.priorities_.push(priority); + this.queuedElements_[this.keyFunction_(element)] = true; + this.siftDown_(0, this.elements_.length - 1) + } +}; +ol.structs.PriorityQueue.prototype.getCount = function() { + return this.elements_.length +}; +ol.structs.PriorityQueue.prototype.getLeftChildIndex_ = function(index) { + return index * 2 + 1 +}; +ol.structs.PriorityQueue.prototype.getRightChildIndex_ = function(index) { + return index * 2 + 2 +}; +ol.structs.PriorityQueue.prototype.getParentIndex_ = function(index) { + return index - 1 >> 1 +}; +ol.structs.PriorityQueue.prototype.heapify_ = function() { + var i; + for(i = (this.elements_.length >> 1) - 1;i >= 0;i--) { + this.siftUp_(i) + } +}; +ol.structs.PriorityQueue.prototype.isEmpty = function() { + return this.elements_.length === 0 +}; +ol.structs.PriorityQueue.prototype.isKeyQueued = function(key) { + return key in this.queuedElements_ +}; +ol.structs.PriorityQueue.prototype.isQueued = function(element) { + return this.isKeyQueued(this.keyFunction_(element)) +}; +ol.structs.PriorityQueue.prototype.siftUp_ = function(index) { + var elements = this.elements_; + var priorities = this.priorities_; + var count = elements.length; + var element = elements[index]; + var priority = priorities[index]; + var startIndex = index; + while(index < count >> 1) { + var lIndex = this.getLeftChildIndex_(index); + var rIndex = this.getRightChildIndex_(index); + var smallerChildIndex = rIndex < count && priorities[rIndex] < priorities[lIndex] ? rIndex : lIndex; + elements[index] = elements[smallerChildIndex]; + priorities[index] = priorities[smallerChildIndex]; + index = smallerChildIndex + } + elements[index] = element; + priorities[index] = priority; + this.siftDown_(startIndex, index) +}; +ol.structs.PriorityQueue.prototype.siftDown_ = function(startIndex, index) { + var elements = this.elements_; + var priorities = this.priorities_; + var element = elements[index]; + var priority = priorities[index]; + while(index > startIndex) { + var parentIndex = this.getParentIndex_(index); + if(priorities[parentIndex] > priority) { + elements[index] = elements[parentIndex]; + priorities[index] = priorities[parentIndex]; + index = parentIndex + }else { + break + } + } + elements[index] = element; + priorities[index] = priority +}; +ol.structs.PriorityQueue.prototype.reprioritize = function() { + var priorityFunction = this.priorityFunction_; + var elements = this.elements_; + var priorities = this.priorities_; + var index = 0; + var n = elements.length; + var element, i, priority; + for(i = 0;i < n;++i) { + element = elements[i]; + priority = priorityFunction(element); + if(priority == ol.structs.PriorityQueue.DROP) { + delete this.queuedElements_[this.keyFunction_(element)] + }else { + priorities[index] = priority; + elements[index++] = element + } + } + elements.length = index; + priorities.length = index; + this.heapify_() +}; +goog.provide("ol.TilePriorityFunction"); +goog.provide("ol.TileQueue"); +goog.require("goog.events"); +goog.require("goog.events.EventType"); +goog.require("ol.Coordinate"); +goog.require("ol.Tile"); +goog.require("ol.structs.PriorityQueue"); +ol.TilePriorityFunction; +ol.TileQueue = function(tilePriorityFunction, tileChangeCallback) { + goog.base(this, function(element) { + return tilePriorityFunction.apply(null, element) + }, function(element) { + return(element[0]).getKey() + }); + this.tileChangeCallback_ = tileChangeCallback; + this.tilesLoading_ = 0 +}; +goog.inherits(ol.TileQueue, ol.structs.PriorityQueue); +ol.TileQueue.prototype.getTilesLoading = function() { + return this.tilesLoading_ +}; +ol.TileQueue.prototype.handleTileChange = function() { + --this.tilesLoading_; + this.tileChangeCallback_() +}; +ol.TileQueue.prototype.loadMoreTiles = function(maxTotalLoading, maxNewLoads) { + var newLoads = Math.min(maxTotalLoading - this.getTilesLoading(), maxNewLoads, this.getCount()); + var i, tile; + for(i = 0;i < newLoads;++i) { + tile = (this.dequeue()[0]); + goog.events.listenOnce(tile, goog.events.EventType.CHANGE, this.handleTileChange, false, this); + tile.load() + } + this.tilesLoading_ += newLoads +}; +goog.provide("ol.IView2D"); +goog.provide("ol.View2DState"); +goog.require("ol.Coordinate"); +ol.View2DState; +ol.IView2D = function() { +}; +ol.IView2D.prototype.getCenter = function() { +}; +ol.IView2D.prototype.getProjection = function() { +}; +ol.IView2D.prototype.getResolution = function() { +}; +ol.IView2D.prototype.getRotation = function() { +}; +ol.IView2D.prototype.getView2DState = function() { +}; +ol.IView2D.prototype.isDef = function() { +}; +/* + + Latitude/longitude spherical geodesy formulae taken from + http://www.movable-type.co.uk/scripts/latlong.html + Licenced under CC-BY-3.0. +*/ +goog.provide("ol.Sphere"); +goog.require("goog.math"); +ol.Sphere = function(radius) { + this.radius = radius +}; +ol.Sphere.prototype.cosineDistance = function(c1, c2) { + var lat1 = goog.math.toRadians(c1[1]); + var lat2 = goog.math.toRadians(c2[1]); + var deltaLon = goog.math.toRadians(c2[0] - c1[0]); + return this.radius * Math.acos(Math.sin(lat1) * Math.sin(lat2) + Math.cos(lat1) * Math.cos(lat2) * Math.cos(deltaLon)) +}; +ol.Sphere.prototype.crossTrackDistance = function(c1, c2, c3) { + var d13 = this.cosineDistance(c1, c2); + var theta12 = goog.math.toRadians(this.initialBearing(c1, c2)); + var theta13 = goog.math.toRadians(this.initialBearing(c1, c3)); + return this.radius * Math.asin(Math.sin(d13 / this.radius) * Math.sin(theta13 - theta12)) +}; +ol.Sphere.prototype.equirectangularDistance = function(c1, c2) { + var lat1 = goog.math.toRadians(c1[1]); + var lat2 = goog.math.toRadians(c2[1]); + var deltaLon = goog.math.toRadians(c2[0] - c1[0]); + var x = deltaLon * Math.cos((lat1 + lat2) / 2); + var y = lat2 - lat1; + return this.radius * Math.sqrt(x * x + y * y) +}; +ol.Sphere.prototype.finalBearing = function(c1, c2) { + return(this.initialBearing(c2, c1) + 180) % 360 +}; +ol.Sphere.prototype.haversineDistance = function(c1, c2) { + var lat1 = goog.math.toRadians(c1[1]); + var lat2 = goog.math.toRadians(c2[1]); + var deltaLatBy2 = (lat2 - lat1) / 2; + var deltaLonBy2 = goog.math.toRadians(c2[0] - c1[0]) / 2; + var a = Math.sin(deltaLatBy2) * Math.sin(deltaLatBy2) + Math.sin(deltaLonBy2) * Math.sin(deltaLonBy2) * Math.cos(lat1) * Math.cos(lat2); + return 2 * this.radius * Math.atan2(Math.sqrt(a), Math.sqrt(1 - a)) +}; +ol.Sphere.prototype.initialBearing = function(c1, c2) { + var lat1 = goog.math.toRadians(c1[1]); + var lat2 = goog.math.toRadians(c2[1]); + var deltaLon = goog.math.toRadians(c2[0] - c1[0]); + var y = Math.sin(deltaLon) * Math.cos(lat2); + var x = Math.cos(lat1) * Math.sin(lat2) - Math.sin(lat1) * Math.cos(lat2) * Math.cos(deltaLon); + return goog.math.toDegrees(Math.atan2(y, x)) +}; +ol.Sphere.prototype.maximumLatitude = function(bearing, latitude) { + return Math.cos(Math.abs(Math.sin(goog.math.toRadians(bearing)) * Math.cos(goog.math.toRadians(latitude)))) +}; +ol.Sphere.prototype.midpoint = function(c1, c2) { + var lat1 = goog.math.toRadians(c1[1]); + var lat2 = goog.math.toRadians(c2[1]); + var lon1 = goog.math.toRadians(c1[0]); + var deltaLon = goog.math.toRadians(c2[0] - c1[0]); + var Bx = Math.cos(lat2) * Math.cos(deltaLon); + var By = Math.cos(lat2) * Math.sin(deltaLon); + var cosLat1PlusBx = Math.cos(lat1) + Bx; + var lat = Math.atan2(Math.sin(lat1) + Math.sin(lat2), Math.sqrt(cosLat1PlusBx * cosLat1PlusBx + By * By)); + var lon = lon1 + Math.atan2(By, cosLat1PlusBx); + return[goog.math.toDegrees(lon), goog.math.toDegrees(lat)] +}; +ol.Sphere.prototype.offset = function(c1, distance, bearing) { + var lat1 = goog.math.toRadians(c1[1]); + var lon1 = goog.math.toRadians(c1[0]); + var dByR = distance / this.radius; + var lat = Math.asin(Math.sin(lat1) * Math.cos(dByR) + Math.cos(lat1) * Math.sin(dByR) * Math.cos(bearing)); + var lon = lon1 + Math.atan2(Math.sin(bearing) * Math.sin(dByR) * Math.cos(lat1), Math.cos(dByR) - Math.sin(lat1) * Math.sin(lat)); + return[goog.math.toDegrees(lon), goog.math.toDegrees(lat)] +}; +goog.provide("ol.sphere.NORMAL"); +goog.require("ol.Sphere"); +ol.sphere.NORMAL = new ol.Sphere(6370997); +goog.provide("ol.proj"); +goog.provide("ol.proj.METERS_PER_UNIT"); +goog.provide("ol.proj.Projection"); +goog.provide("ol.proj.ProjectionLike"); +goog.provide("ol.proj.Units"); +goog.require("goog.array"); +goog.require("goog.asserts"); +goog.require("goog.object"); +goog.require("ol.Extent"); +goog.require("ol.TransformFunction"); +goog.require("ol.sphere.NORMAL"); +ol.ENABLE_PROJ4JS = true; +ol.HAVE_PROJ4JS = ol.ENABLE_PROJ4JS && typeof Proj4js == "object"; +ol.proj.ProjectionLike; +ol.proj.Units = {DEGREES:"degrees", FEET:"ft", METERS:"m", PIXELS:"pixels"}; +ol.proj.METERS_PER_UNIT[ol.proj.Units.DEGREES] = 2 * Math.PI * ol.sphere.NORMAL.radius / 360; +ol.proj.METERS_PER_UNIT[ol.proj.Units.FEET] = 0.3048; +ol.proj.METERS_PER_UNIT[ol.proj.Units.METERS] = 1; +ol.proj.Projection = function(options) { + this.code_ = options.code; + this.units_ = (options.units); + this.extent_ = goog.isDef(options.extent) ? options.extent : null; + this.axisOrientation_ = goog.isDef(options.axisOrientation) ? options.axisOrientation : "enu"; + this.global_ = goog.isDef(options.global) ? options.global : false; + this.defaultTileGrid_ = null +}; +ol.proj.Projection.prototype.getCode = function() { + return this.code_ +}; +ol.proj.Projection.prototype.getExtent = function() { + return this.extent_ +}; +ol.proj.Projection.prototype.getPointResolution = goog.abstractMethod; +ol.proj.Projection.prototype.getUnits = function() { + return this.units_ +}; +ol.proj.Projection.prototype.getMetersPerUnit = function() { + return ol.proj.METERS_PER_UNIT[this.units_] +}; +ol.proj.Projection.prototype.getAxisOrientation = function() { + return this.axisOrientation_ +}; +ol.proj.Projection.prototype.isGlobal = function() { + return this.global_ +}; +ol.proj.Projection.prototype.getDefaultTileGrid = function() { + return this.defaultTileGrid_ +}; +ol.proj.Projection.prototype.setDefaultTileGrid = function(tileGrid) { + this.defaultTileGrid_ = tileGrid +}; +ol.Proj4jsProjection_ = function(proj4jsProj, options) { + var units = (proj4jsProj.units); + var config = ({units:units, axisOrientation:proj4jsProj.axis}); + goog.object.extend(config, options); + goog.base(this, config); + this.proj4jsProj_ = proj4jsProj; + this.toEPSG4326_ = null +}; +goog.inherits(ol.Proj4jsProjection_, ol.proj.Projection); +ol.Proj4jsProjection_.prototype.getMetersPerUnit = function() { + var metersPerUnit = this.proj4jsProj_.to_meter; + if(!goog.isDef(metersPerUnit)) { + metersPerUnit = ol.proj.METERS_PER_UNIT[this.units_] + } + return metersPerUnit +}; +ol.Proj4jsProjection_.prototype.getPointResolution = function(resolution, point) { + if(this.getUnits() == ol.proj.Units.DEGREES) { + return resolution + }else { + if(goog.isNull(this.toEPSG4326_)) { + this.toEPSG4326_ = ol.proj.getTransformFromProjections(this, ol.proj.getProj4jsProjectionFromCode_({code:"EPSG:4326", extent:null})) + } + var vertices = [point[0] - resolution / 2, point[1], point[0] + resolution / 2, point[1], point[0], point[1] - resolution / 2, point[0], point[1] + resolution / 2]; + vertices = this.toEPSG4326_(vertices, vertices, 2); + var width = ol.sphere.NORMAL.haversineDistance(vertices.slice(0, 2), vertices.slice(2, 4)); + var height = ol.sphere.NORMAL.haversineDistance(vertices.slice(4, 6), vertices.slice(6, 8)); + var pointResolution = (width + height) / 2; + if(this.getUnits() == ol.proj.Units.FEET) { + pointResolution /= 0.3048 + } + return pointResolution + } +}; +ol.Proj4jsProjection_.prototype.getProj4jsProj = function() { + return this.proj4jsProj_ +}; +ol.proj.proj4jsProjections_ = {}; +ol.proj.projections_ = {}; +ol.proj.transforms_ = {}; +ol.proj.addEquivalentProjections = function(projections) { + ol.proj.addProjections(projections); + goog.array.forEach(projections, function(source) { + goog.array.forEach(projections, function(destination) { + if(source !== destination) { + ol.proj.addTransform(source, destination, ol.proj.cloneTransform) + } + }) + }) +}; +ol.proj.addEquivalentTransforms = function(projections1, projections2, forwardTransform, inverseTransform) { + goog.array.forEach(projections1, function(projection1) { + goog.array.forEach(projections2, function(projection2) { + ol.proj.addTransform(projection1, projection2, forwardTransform); + ol.proj.addTransform(projection2, projection1, inverseTransform) + }) + }) +}; +ol.proj.addProj4jsProjection_ = function(proj4jsProjection) { + var proj4jsProjections = ol.proj.proj4jsProjections_; + var code = proj4jsProjection.getCode(); + goog.asserts.assert(!goog.object.containsKey(proj4jsProjections, code)); + proj4jsProjections[code] = proj4jsProjection +}; +ol.proj.addProjection = function(projection) { + var projections = ol.proj.projections_; + var code = projection.getCode(); + projections[code] = projection; + ol.proj.addTransform(projection, projection, ol.proj.cloneTransform) +}; +ol.proj.addProjections = function(projections) { + goog.array.forEach(projections, function(projection) { + ol.proj.addProjection(projection) + }) +}; +ol.proj.clearAllProjections = function() { + if(ol.ENABLE_PROJ4JS) { + ol.proj.proj4jsProjections_ = {} + } + ol.proj.projections_ = {}; + ol.proj.transforms_ = {} +}; +ol.proj.createProjection = function(projection, defaultCode) { + if(!goog.isDefAndNotNull(projection)) { + return ol.proj.get(defaultCode) + }else { + if(goog.isString(projection)) { + return ol.proj.get(projection) + }else { + goog.asserts.assertInstanceof(projection, ol.proj.Projection); + return projection + } + } +}; +ol.proj.addTransform = function(source, destination, transformFn) { + var sourceCode = source.getCode(); + var destinationCode = destination.getCode(); + var transforms = ol.proj.transforms_; + if(!goog.object.containsKey(transforms, sourceCode)) { + transforms[sourceCode] = {} + } + transforms[sourceCode][destinationCode] = transformFn +}; +ol.proj.removeTransform = function(source, destination) { + var sourceCode = source.getCode(); + var destinationCode = destination.getCode(); + var transforms = ol.proj.transforms_; + goog.asserts.assert(sourceCode in transforms); + goog.asserts.assert(destinationCode in transforms[sourceCode]); + var transform = transforms[sourceCode][destinationCode]; + delete transforms[sourceCode][destinationCode]; + var keys = goog.object.getKeys(transforms[sourceCode]); + if(keys.length === 0) { + delete transforms[sourceCode] + } + return transform +}; +ol.proj.get = function(projectionLike) { + var projection; + if(projectionLike instanceof ol.proj.Projection) { + projection = projectionLike + }else { + if(goog.isString(projectionLike)) { + var code = projectionLike; + projection = ol.proj.projections_[code]; + if(ol.HAVE_PROJ4JS && !goog.isDef(projection)) { + projection = ol.proj.getProj4jsProjectionFromCode_({code:code, extent:null}) + } + if(!goog.isDef(projection)) { + goog.asserts.assert(goog.isDef(projection)); + projection = null + } + }else { + projection = null + } + } + return projection +}; +ol.proj.getProj4jsProjectionFromCode_ = function(options) { + var code = options.code; + var proj4jsProjections = ol.proj.proj4jsProjections_; + var proj4jsProjection = proj4jsProjections[code]; + if(!goog.isDef(proj4jsProjection)) { + var proj4jsProj = new Proj4js.Proj(code); + var srsCode = proj4jsProj.srsCode; + proj4jsProjection = proj4jsProjections[srsCode]; + if(!goog.isDef(proj4jsProjection)) { + var config = (goog.object.clone(options)); + config.code = srsCode; + proj4jsProjection = new ol.Proj4jsProjection_(proj4jsProj, config); + proj4jsProjections[srsCode] = proj4jsProjection + } + proj4jsProjections[code] = proj4jsProjection + } + return proj4jsProjection +}; +ol.proj.equivalent = function(projection1, projection2) { + if(projection1 === projection2) { + return true + }else { + if(projection1.getUnits() != projection2.getUnits()) { + return false + }else { + var transformFn = ol.proj.getTransformFromProjections(projection1, projection2); + return transformFn === ol.proj.cloneTransform + } + } +}; +ol.proj.getTransform = function(source, destination) { + var sourceProjection = ol.proj.get(source); + var destinationProjection = ol.proj.get(destination); + return ol.proj.getTransformFromProjections(sourceProjection, destinationProjection) +}; +ol.proj.getTransformFromProjections = function(sourceProjection, destinationProjection) { + var transforms = ol.proj.transforms_; + var sourceCode = sourceProjection.getCode(); + var destinationCode = destinationProjection.getCode(); + var transform; + if(goog.object.containsKey(transforms, sourceCode) && goog.object.containsKey(transforms[sourceCode], destinationCode)) { + transform = transforms[sourceCode][destinationCode] + } + if(ol.HAVE_PROJ4JS && !goog.isDef(transform)) { + var proj4jsSource; + if(sourceProjection instanceof ol.Proj4jsProjection_) { + proj4jsSource = sourceProjection + }else { + proj4jsSource = ol.proj.getProj4jsProjectionFromCode_({code:sourceCode, extent:null}) + } + var sourceProj4jsProj = proj4jsSource.getProj4jsProj(); + var proj4jsDestination; + if(destinationProjection instanceof ol.Proj4jsProjection_) { + proj4jsDestination = destinationProjection + }else { + proj4jsDestination = ol.proj.getProj4jsProjectionFromCode_({code:destinationCode, extent:null}) + } + var destinationProj4jsProj = proj4jsDestination.getProj4jsProj(); + transform = function(input, opt_output, opt_dimension) { + var length = input.length, dimension = opt_dimension > 1 ? opt_dimension : 2, output = opt_output; + if(!goog.isDef(output)) { + if(dimension > 2) { + output = input.slice() + }else { + output = new Array(length) + } + } + goog.asserts.assert(output.length % dimension === 0); + var proj4jsPoint; + for(var i = 0;i < length;i += dimension) { + proj4jsPoint = new Proj4js.Point(input[i], input[i + 1]); + proj4jsPoint = Proj4js.transform(sourceProj4jsProj, destinationProj4jsProj, proj4jsPoint); + output[i] = proj4jsPoint.x; + output[i + 1] = proj4jsPoint.y + } + return output + }; + ol.proj.addTransform(sourceProjection, destinationProjection, transform) + } + if(!goog.isDef(transform)) { + goog.asserts.assert(goog.isDef(transform)); + transform = ol.proj.identityTransform + } + return transform +}; +ol.proj.identityTransform = function(input, opt_output, opt_dimension) { + if(goog.isDef(opt_output) && input !== opt_output) { + goog.asserts.fail("This should not be used internally."); + for(var i = 0, ii = input.length;i < ii;++i) { + opt_output[i] = input[i] + } + input = opt_output + } + return input +}; +ol.proj.cloneTransform = function(input, opt_output, opt_dimension) { + var output; + if(goog.isDef(opt_output)) { + for(var i = 0, ii = input.length;i < ii;++i) { + opt_output[i] = input[i] + } + output = opt_output + }else { + output = input.slice() + } + return output +}; +ol.proj.transform = function(point, source, destination) { + var transformFn = ol.proj.getTransform(source, destination); + return transformFn(point) +}; +ol.proj.transformWithProjections = function(point, sourceProjection, destinationProjection) { + var transformFn = ol.proj.getTransformFromProjections(sourceProjection, destinationProjection); + return transformFn(point) +}; +ol.proj.configureProj4jsProjection = function(options) { + goog.asserts.assert(!goog.object.containsKey(ol.proj.proj4jsProjections_, options.code)); + return ol.proj.getProj4jsProjectionFromCode_(options) +}; +goog.provide("ol.source.Source"); +goog.provide("ol.source.State"); +goog.require("goog.events.EventType"); +goog.require("ol.Attribution"); +goog.require("ol.Extent"); +goog.require("ol.Observable"); +goog.require("ol.proj"); +ol.source.State = {LOADING:0, READY:1, ERROR:2}; +ol.source.SourceOptions; +ol.source.Source = function(options) { + goog.base(this); + this.projection_ = ol.proj.get(options.projection); + this.extent_ = goog.isDef(options.extent) ? options.extent : goog.isDef(options.projection) ? this.projection_.getExtent() : null; + this.attributions_ = goog.isDef(options.attributions) ? options.attributions : null; + this.logo_ = options.logo; + this.state_ = goog.isDef(options.state) ? (options.state) : ol.source.State.READY +}; +goog.inherits(ol.source.Source, ol.Observable); +ol.source.Source.prototype.forEachFeatureAtPixel = goog.nullFunction; +ol.source.Source.prototype.getAttributions = function() { + return this.attributions_ +}; +ol.source.Source.prototype.getExtent = function() { + return this.extent_ +}; +ol.source.Source.prototype.getLogo = function() { + return this.logo_ +}; +ol.source.Source.prototype.getProjection = function() { + return this.projection_ +}; +ol.source.Source.prototype.getResolutions = goog.abstractMethod; +ol.source.Source.prototype.getState = function() { + return this.state_ +}; +ol.source.Source.prototype.setAttributions = function(attributions) { + this.attributions_ = attributions +}; +ol.source.Source.prototype.setExtent = function(extent) { + this.extent_ = extent +}; +ol.source.Source.prototype.setLogo = function(logo) { + this.logo_ = logo +}; +ol.source.Source.prototype.setState = function(state) { + this.state_ = state; + this.dispatchChangeEvent() +}; +ol.source.Source.prototype.setProjection = function(projection) { + this.projection_ = projection +}; +goog.provide("ol.layer.Base"); +goog.provide("ol.layer.LayerProperty"); +goog.provide("ol.layer.LayerState"); +goog.require("goog.events"); +goog.require("goog.math"); +goog.require("goog.object"); +goog.require("ol.Object"); +goog.require("ol.source.State"); +ol.layer.LayerProperty = {BRIGHTNESS:"brightness", CONTRAST:"contrast", HUE:"hue", OPACITY:"opacity", SATURATION:"saturation", VISIBLE:"visible", MAX_RESOLUTION:"maxResolution", MIN_RESOLUTION:"minResolution"}; +ol.layer.LayerState; +ol.layer.Base = function(options) { + goog.base(this); + var values = goog.object.clone(options); + values.brightness = goog.isDef(values.brightness) ? values.brightness : 0; + values.contrast = goog.isDef(values.contrast) ? values.contrast : 1; + values.hue = goog.isDef(values.hue) ? values.hue : 0; + values.opacity = goog.isDef(values.opacity) ? values.opacity : 1; + values.saturation = goog.isDef(values.saturation) ? values.saturation : 1; + values.visible = goog.isDef(values.visible) ? values.visible : true; + values.maxResolution = goog.isDef(values.maxResolution) ? values.maxResolution : Infinity; + values.minResolution = goog.isDef(values.minResolution) ? values.minResolution : 0; + this.setValues(values) +}; +goog.inherits(ol.layer.Base, ol.Object); +ol.layer.Base.prototype.getBrightness = function() { + return(this.get(ol.layer.LayerProperty.BRIGHTNESS)) +}; +goog.exportProperty(ol.layer.Base.prototype, "getBrightness", ol.layer.Base.prototype.getBrightness); +ol.layer.Base.prototype.getContrast = function() { + return(this.get(ol.layer.LayerProperty.CONTRAST)) +}; +goog.exportProperty(ol.layer.Base.prototype, "getContrast", ol.layer.Base.prototype.getContrast); +ol.layer.Base.prototype.getHue = function() { + return(this.get(ol.layer.LayerProperty.HUE)) +}; +goog.exportProperty(ol.layer.Base.prototype, "getHue", ol.layer.Base.prototype.getHue); +ol.layer.Base.prototype.getLayerState = function() { + var brightness = this.getBrightness(); + var contrast = this.getContrast(); + var hue = this.getHue(); + var opacity = this.getOpacity(); + var saturation = this.getSaturation(); + var sourceState = this.getSourceState(); + var visible = this.getVisible(); + var maxResolution = this.getMaxResolution(); + var minResolution = this.getMinResolution(); + return{brightness:goog.isDef(brightness) ? goog.math.clamp(brightness, -1, 1) : 0, contrast:goog.isDef(contrast) ? Math.max(contrast, 0) : 1, hue:goog.isDef(hue) ? hue : 0, opacity:goog.isDef(opacity) ? goog.math.clamp(opacity, 0, 1) : 1, saturation:goog.isDef(saturation) ? Math.max(saturation, 0) : 1, sourceState:sourceState, visible:goog.isDef(visible) ? !!visible : true, maxResolution:goog.isDef(maxResolution) ? maxResolution : Infinity, minResolution:goog.isDef(minResolution) ? Math.max(minResolution, + 0) : 0} +}; +ol.layer.Base.prototype.getLayersArray = goog.abstractMethod; +ol.layer.Base.prototype.getLayerStatesArray = goog.abstractMethod; +ol.layer.Base.prototype.getMaxResolution = function() { + return(this.get(ol.layer.LayerProperty.MAX_RESOLUTION)) +}; +goog.exportProperty(ol.layer.Base.prototype, "getMaxResolution", ol.layer.Base.prototype.getMaxResolution); +ol.layer.Base.prototype.getMinResolution = function() { + return(this.get(ol.layer.LayerProperty.MIN_RESOLUTION)) +}; +goog.exportProperty(ol.layer.Base.prototype, "getMinResolution", ol.layer.Base.prototype.getMinResolution); +ol.layer.Base.prototype.getOpacity = function() { + return(this.get(ol.layer.LayerProperty.OPACITY)) +}; +goog.exportProperty(ol.layer.Base.prototype, "getOpacity", ol.layer.Base.prototype.getOpacity); +ol.layer.Base.prototype.getSaturation = function() { + return(this.get(ol.layer.LayerProperty.SATURATION)) +}; +goog.exportProperty(ol.layer.Base.prototype, "getSaturation", ol.layer.Base.prototype.getSaturation); +ol.layer.Base.prototype.getSourceState = goog.abstractMethod; +ol.layer.Base.prototype.getVisible = function() { + return(this.get(ol.layer.LayerProperty.VISIBLE)) +}; +goog.exportProperty(ol.layer.Base.prototype, "getVisible", ol.layer.Base.prototype.getVisible); +ol.layer.Base.prototype.setBrightness = function(brightness) { + this.set(ol.layer.LayerProperty.BRIGHTNESS, brightness) +}; +goog.exportProperty(ol.layer.Base.prototype, "setBrightness", ol.layer.Base.prototype.setBrightness); +ol.layer.Base.prototype.setContrast = function(contrast) { + this.set(ol.layer.LayerProperty.CONTRAST, contrast) +}; +goog.exportProperty(ol.layer.Base.prototype, "setContrast", ol.layer.Base.prototype.setContrast); +ol.layer.Base.prototype.setHue = function(hue) { + this.set(ol.layer.LayerProperty.HUE, hue) +}; +goog.exportProperty(ol.layer.Base.prototype, "setHue", ol.layer.Base.prototype.setHue); +ol.layer.Base.prototype.setMaxResolution = function(maxResolution) { + this.set(ol.layer.LayerProperty.MAX_RESOLUTION, maxResolution) +}; +goog.exportProperty(ol.layer.Base.prototype, "setMaxResolution", ol.layer.Base.prototype.setMaxResolution); +ol.layer.Base.prototype.setMinResolution = function(minResolution) { + this.set(ol.layer.LayerProperty.MIN_RESOLUTION, minResolution) +}; +goog.exportProperty(ol.layer.Base.prototype, "setMinResolution", ol.layer.Base.prototype.setMinResolution); +ol.layer.Base.prototype.setOpacity = function(opacity) { + this.set(ol.layer.LayerProperty.OPACITY, opacity) +}; +goog.exportProperty(ol.layer.Base.prototype, "setOpacity", ol.layer.Base.prototype.setOpacity); +ol.layer.Base.prototype.setSaturation = function(saturation) { + this.set(ol.layer.LayerProperty.SATURATION, saturation) +}; +goog.exportProperty(ol.layer.Base.prototype, "setSaturation", ol.layer.Base.prototype.setSaturation); +ol.layer.Base.prototype.setVisible = function(visible) { + this.set(ol.layer.LayerProperty.VISIBLE, visible) +}; +goog.exportProperty(ol.layer.Base.prototype, "setVisible", ol.layer.Base.prototype.setVisible); +goog.provide("ol.layer.Layer"); +goog.require("goog.asserts"); +goog.require("goog.events"); +goog.require("goog.events.EventType"); +goog.require("goog.object"); +goog.require("ol.layer.Base"); +goog.require("ol.source.Source"); +ol.layer.Layer = function(options) { + var baseOptions = goog.object.clone(options); + delete baseOptions.source; + goog.base(this, (baseOptions)); + this.source_ = options.source; + goog.events.listen(this.source_, goog.events.EventType.CHANGE, this.handleSourceChange_, false, this) +}; +goog.inherits(ol.layer.Layer, ol.layer.Base); +ol.layer.Layer.prototype.getLayersArray = function(opt_array) { + var array = goog.isDef(opt_array) ? opt_array : []; + array.push(this); + return array +}; +ol.layer.Layer.prototype.getLayerStatesArray = function(opt_obj) { + var obj = goog.isDef(opt_obj) ? opt_obj : {layers:[], layerStates:[]}; + goog.asserts.assert(obj.layers.length === obj.layerStates.length); + obj.layers.push(this); + obj.layerStates.push(this.getLayerState()); + return obj +}; +ol.layer.Layer.prototype.getSource = function() { + return this.source_ +}; +ol.layer.Layer.prototype.getSourceState = function() { + return this.getSource().getState() +}; +ol.layer.Layer.prototype.handleSourceChange_ = function() { + this.dispatchChangeEvent() +}; +goog.provide("ol.FrameState"); +goog.provide("ol.PostRenderFunction"); +goog.provide("ol.PreRenderFunction"); +goog.require("goog.vec.Mat4"); +goog.require("ol.Attribution"); +goog.require("ol.Extent"); +goog.require("ol.Size"); +goog.require("ol.TileQueue"); +goog.require("ol.TileRange"); +goog.require("ol.View2DState"); +goog.require("ol.layer.Layer"); +goog.require("ol.layer.LayerState"); +ol.FrameState; +ol.PostRenderFunction; +ol.PreRenderFunction; +goog.provide("ol.MapEvent"); +goog.provide("ol.MapEventType"); +goog.require("goog.events.Event"); +goog.require("ol.FrameState"); +ol.MapEventType = {POSTRENDER:"postrender", MOVEEND:"moveend"}; +ol.MapEvent = function(type, map, opt_frameState) { + goog.base(this, type); + this.map = map; + this.frameState = goog.isDef(opt_frameState) ? opt_frameState : null +}; +goog.inherits(ol.MapEvent, goog.events.Event); +goog.provide("ol.Pixel"); +ol.Pixel; +goog.provide("ol.MapBrowserEvent"); +goog.provide("ol.MapBrowserEvent.EventType"); +goog.provide("ol.MapBrowserEventHandler"); +goog.require("goog.array"); +goog.require("goog.asserts"); +goog.require("goog.events"); +goog.require("goog.events.BrowserEvent"); +goog.require("goog.events.EventTarget"); +goog.require("goog.events.EventType"); +goog.require("goog.object"); +goog.require("ol.Coordinate"); +goog.require("ol.FrameState"); +goog.require("ol.MapEvent"); +goog.require("ol.Pixel"); +ol.MapBrowserEvent = function(type, map, browserEvent, opt_frameState) { + goog.base(this, type, map, opt_frameState); + this.browserEvent = browserEvent; + this.originalEvent = browserEvent.getBrowserEvent(); + this.coordinate = map.getEventCoordinate(this.originalEvent); + this.pixel = map.getEventPixel(this.originalEvent) +}; +goog.inherits(ol.MapBrowserEvent, ol.MapEvent); +ol.MapBrowserEvent.prototype.preventDefault = function() { + goog.base(this, "preventDefault"); + this.browserEvent.preventDefault() +}; +ol.MapBrowserEvent.prototype.stopPropagation = function() { + goog.base(this, "stopPropagation"); + this.browserEvent.stopPropagation() +}; +ol.MapBrowserEventHandler = function(map) { + goog.base(this); + this.map_ = map; + this.clickTimeoutId_ = 0; + this.dragged_ = false; + this.dragListenerKeys_ = null; + this.mousedownListenerKey_ = null; + this.pointerdownListenerKey_ = null; + this.touchstartListenerKey_ = null; + if(ol.LEGACY_IE_SUPPORT && ol.IS_LEGACY_IE) { + this.ieDblclickListenerKey_ = null + } + this.down_ = null; + var element = this.map_.getViewport(); + this.relayedListenerKeys_ = [goog.events.listen(element, goog.events.EventType.MOUSEMOVE, this.relayEvent_, false, this), goog.events.listen(element, goog.events.EventType.CLICK, this.relayEvent_, false, this)]; + this.mousedownListenerKey_ = goog.events.listen(element, goog.events.EventType.MOUSEDOWN, this.handleMouseDown_, false, this); + this.pointerdownListenerKey_ = goog.events.listen(element, goog.events.EventType.MSPOINTERDOWN, this.handlePointerDown_, false, this); + this.touchstartListenerKey_ = goog.events.listen(element, goog.events.EventType.TOUCHSTART, this.handleTouchStart_, false, this); + if(ol.LEGACY_IE_SUPPORT && ol.IS_LEGACY_IE) { + this.ieDblclickListenerKey_ = goog.events.listen(element, goog.events.EventType.DBLCLICK, this.emulateClick_, false, this) + } +}; +goog.inherits(ol.MapBrowserEventHandler, goog.events.EventTarget); +ol.MapBrowserEventHandler.prototype.getDown = function() { + return this.down_ +}; +ol.MapBrowserEventHandler.prototype.emulateClick_ = function(browserEvent) { + if(this.clickTimeoutId_ !== 0) { + goog.global.clearTimeout(this.clickTimeoutId_); + this.clickTimeoutId_ = 0; + var newEvent = new ol.MapBrowserEvent(ol.MapBrowserEvent.EventType.DBLCLICK, this.map_, browserEvent); + this.dispatchEvent(newEvent) + }else { + if(ol.LEGACY_IE_SUPPORT && ol.IS_LEGACY_IE) { + var ev = (goog.object.clone(browserEvent.getBrowserEvent())); + this.clickTimeoutId_ = goog.global.setTimeout(goog.bind(function() { + this.clickTimeoutId_ = 0; + var newEvent = new ol.MapBrowserEvent(ol.MapBrowserEvent.EventType.SINGLECLICK, this.map_, new goog.events.BrowserEvent(ev, browserEvent.currentTarget)); + this.dispatchEvent(newEvent) + }, this), 250) + }else { + this.clickTimeoutId_ = goog.global.setTimeout(goog.bind(function() { + this.clickTimeoutId_ = 0; + var newEvent = new ol.MapBrowserEvent(ol.MapBrowserEvent.EventType.SINGLECLICK, this.map_, browserEvent); + this.dispatchEvent(newEvent) + }, this), 250) + } + } +}; +ol.MapBrowserEventHandler.prototype.handleMouseUp_ = function(browserEvent) { + if(this.down_) { + goog.array.forEach(this.dragListenerKeys_, goog.events.unlistenByKey); + this.dragListenerKeys_ = null; + if(this.dragged_) { + var newEvent = new ol.MapBrowserEvent(ol.MapBrowserEvent.EventType.DRAGEND, this.map_, browserEvent); + this.dispatchEvent(newEvent) + }else { + if(browserEvent.isMouseActionButton()) { + this.emulateClick_(browserEvent) + } + } + } +}; +ol.MapBrowserEventHandler.prototype.handleMouseDown_ = function(browserEvent) { + if(!goog.isNull(this.pointerdownListenerKey_)) { + goog.events.unlistenByKey(this.pointerdownListenerKey_); + this.pointerdownListenerKey_ = null; + goog.asserts.assert(!goog.isNull(this.touchstartListenerKey_)); + goog.events.unlistenByKey(this.touchstartListenerKey_); + this.touchstartListenerKey_ = null + } + var newEvent = new ol.MapBrowserEvent(ol.MapBrowserEvent.EventType.DOWN, this.map_, browserEvent); + this.dispatchEvent(newEvent); + this.down_ = browserEvent; + this.dragged_ = false; + this.dragListenerKeys_ = [goog.events.listen(goog.global.document, goog.events.EventType.MOUSEMOVE, this.handleMouseMove_, false, this), goog.events.listen(goog.global.document, goog.events.EventType.MOUSEUP, this.handleMouseUp_, false, this)]; + browserEvent.preventDefault() +}; +ol.MapBrowserEventHandler.prototype.handleMouseMove_ = function(browserEvent) { + var newEvent; + if(!this.dragged_) { + this.dragged_ = true; + newEvent = new ol.MapBrowserEvent(ol.MapBrowserEvent.EventType.DRAGSTART, this.map_, this.down_); + this.dispatchEvent(newEvent) + } + newEvent = new ol.MapBrowserEvent(ol.MapBrowserEvent.EventType.DRAG, this.map_, browserEvent); + this.dispatchEvent(newEvent) +}; +ol.MapBrowserEventHandler.prototype.handlePointerDown_ = function(browserEvent) { + if(!goog.isNull(this.mousedownListenerKey_)) { + goog.events.unlistenByKey(this.mousedownListenerKey_); + this.mousedownListenerKey_ = null; + goog.asserts.assert(!goog.isNull(this.touchstartListenerKey_)); + goog.events.unlistenByKey(this.touchstartListenerKey_); + this.touchstartListenerKey_ = null + } + var newEvent = new ol.MapBrowserEvent(ol.MapBrowserEvent.EventType.TOUCHSTART, this.map_, browserEvent); + this.dispatchEvent(newEvent); + this.down_ = browserEvent; + this.dragged_ = false; + this.dragListenerKeys_ = [goog.events.listen(goog.global.document, goog.events.EventType.MSPOINTERMOVE, this.handlePointerMove_, false, this), goog.events.listen(goog.global.document, goog.events.EventType.MSPOINTERUP, this.handlePointerUp_, false, this)]; + browserEvent.preventDefault() +}; +ol.MapBrowserEventHandler.prototype.handlePointerMove_ = function(browserEvent) { + if(browserEvent.clientX != this.down_.clientX || browserEvent.clientY != this.down_.clientY) { + this.dragged_ = true; + var newEvent = new ol.MapBrowserEvent(ol.MapBrowserEvent.EventType.TOUCHMOVE, this.map_, browserEvent); + this.dispatchEvent(newEvent) + } +}; +ol.MapBrowserEventHandler.prototype.handlePointerUp_ = function(browserEvent) { + var newEvent = new ol.MapBrowserEvent(ol.MapBrowserEvent.EventType.TOUCHEND, this.map_, browserEvent); + this.dispatchEvent(newEvent); + goog.array.forEach(this.dragListenerKeys_, goog.events.unlistenByKey); + if(!this.dragged_ && browserEvent.isMouseActionButton()) { + goog.asserts.assert(!goog.isNull(this.down_)); + this.emulateClick_(this.down_) + } +}; +ol.MapBrowserEventHandler.prototype.handleTouchStart_ = function(browserEvent) { + if(!goog.isNull(this.mousedownListenerKey_)) { + goog.events.unlistenByKey(this.mousedownListenerKey_); + this.mousedownListenerKey_ = null; + goog.asserts.assert(!goog.isNull(this.pointerdownListenerKey_)); + goog.events.unlistenByKey(this.pointerdownListenerKey_); + this.pointerdownListenerKey_ = null + } + var newEvent = new ol.MapBrowserEvent(ol.MapBrowserEvent.EventType.TOUCHSTART, this.map_, browserEvent); + this.dispatchEvent(newEvent); + this.down_ = browserEvent; + this.dragged_ = false; + if(goog.isNull(this.dragListenerKeys_)) { + this.dragListenerKeys_ = [goog.events.listen(goog.global.document, goog.events.EventType.TOUCHMOVE, this.handleTouchMove_, false, this), goog.events.listen(goog.global.document, goog.events.EventType.TOUCHEND, this.handleTouchEnd_, false, this)] + } + browserEvent.preventDefault() +}; +ol.MapBrowserEventHandler.prototype.handleTouchMove_ = function(browserEvent) { + this.dragged_ = true; + var newEvent = new ol.MapBrowserEvent(ol.MapBrowserEvent.EventType.TOUCHMOVE, this.map_, browserEvent); + this.dispatchEvent(newEvent); + browserEvent.preventDefault() +}; +ol.MapBrowserEventHandler.prototype.handleTouchEnd_ = function(browserEvent) { + var newEvent = new ol.MapBrowserEvent(ol.MapBrowserEvent.EventType.TOUCHEND, this.map_, browserEvent); + this.dispatchEvent(newEvent); + if(browserEvent.getBrowserEvent().targetTouches.length === 0) { + goog.array.forEach(this.dragListenerKeys_, goog.events.unlistenByKey); + this.dragListenerKeys_ = null + } + if(!this.dragged_) { + goog.asserts.assert(!goog.isNull(this.down_)); + this.emulateClick_(this.down_) + } +}; +ol.MapBrowserEventHandler.prototype.disposeInternal = function() { + if(!goog.isNull(this.relayedListenerKeys_)) { + goog.array.forEach(this.relayedListenerKeys_, goog.events.unlistenByKey); + this.relayedListenerKeys_ = null + } + if(!goog.isNull(this.mousedownListenerKey_)) { + goog.events.unlistenByKey(this.mousedownListenerKey_); + this.mousedownListenerKey_ = null + } + if(!goog.isNull(this.pointerdownListenerKey_)) { + goog.events.unlistenByKey(this.pointerdownListenerKey_); + this.pointerdownListenerKey_ = null + } + if(!goog.isNull(this.touchstartListenerKey_)) { + goog.events.unlistenByKey(this.touchstartListenerKey_); + this.touchstartListenerKey_ = null + } + if(!goog.isNull(this.dragListenerKeys_)) { + goog.array.forEach(this.dragListenerKeys_, goog.events.unlistenByKey); + this.dragListenerKeys_ = null + } + if(ol.LEGACY_IE_SUPPORT && ol.IS_LEGACY_IE && !goog.isNull(this.ieDblclickListenerKey_)) { + goog.events.unlistenByKey(this.ieDblclickListenerKey_); + this.ieDblclickListenerKey_ = null + } + goog.base(this, "disposeInternal") +}; +ol.MapBrowserEventHandler.prototype.relayEvent_ = function(browserEvent) { + this.dispatchEvent(new ol.MapBrowserEvent(browserEvent.type, this.map_, browserEvent)) +}; +ol.MapBrowserEvent.EventType = {CLICK:goog.events.EventType.CLICK, DBLCLICK:goog.events.EventType.DBLCLICK, MOUSEMOVE:goog.events.EventType.MOUSEMOVE, DOWN:"down", DRAGSTART:"dragstart", DRAG:"drag", DRAGEND:"dragend", SINGLECLICK:"singleclick", TOUCHSTART:goog.events.EventType.TOUCHSTART, TOUCHMOVE:goog.events.EventType.TOUCHMOVE, TOUCHEND:goog.events.EventType.TOUCHEND}; +goog.provide("ol.events.ConditionType"); +goog.provide("ol.events.condition"); +goog.require("goog.asserts"); +goog.require("goog.dom.TagName"); +goog.require("goog.functions"); +goog.require("ol.MapBrowserEvent.EventType"); +ol.events.ConditionType; +ol.events.condition.altKeyOnly = function(mapBrowserEvent) { + var browserEvent = mapBrowserEvent.browserEvent; + return browserEvent.altKey && !browserEvent.platformModifierKey && !browserEvent.shiftKey +}; +ol.events.condition.altShiftKeysOnly = function(mapBrowserEvent) { + var browserEvent = mapBrowserEvent.browserEvent; + return browserEvent.altKey && !browserEvent.platformModifierKey && browserEvent.shiftKey +}; +ol.events.condition.always = goog.functions.TRUE; +ol.events.condition.singleClick = function(mapBrowserEvent) { + return mapBrowserEvent.type == ol.MapBrowserEvent.EventType.SINGLECLICK +}; +ol.events.condition.noModifierKeys = function(mapBrowserEvent) { + var browserEvent = mapBrowserEvent.browserEvent; + return!browserEvent.altKey && !browserEvent.platformModifierKey && !browserEvent.shiftKey +}; +ol.events.condition.platformModifierKeyOnly = function(mapBrowserEvent) { + var browserEvent = mapBrowserEvent.browserEvent; + return!browserEvent.altKey && browserEvent.platformModifierKey && !browserEvent.shiftKey +}; +ol.events.condition.shiftKeyOnly = function(mapBrowserEvent) { + var browserEvent = mapBrowserEvent.browserEvent; + return!browserEvent.altKey && !browserEvent.platformModifierKey && browserEvent.shiftKey +}; +ol.events.condition.targetNotEditable = function(mapBrowserEvent) { + var target = mapBrowserEvent.browserEvent.target; + goog.asserts.assertInstanceof(target, Element); + var tagName = target.tagName; + return tagName !== goog.dom.TagName.INPUT && tagName !== goog.dom.TagName.SELECT && tagName !== goog.dom.TagName.TEXTAREA +}; +goog.provide("ol.IView3D"); +ol.IView3D = function() { +}; +ol.IView3D.prototype.isDef = function() { +}; +goog.provide("ol.IView"); +goog.require("ol.IView2D"); +goog.require("ol.IView3D"); +ol.IView = function() { +}; +ol.IView.prototype.getView2D = function() { +}; +ol.IView.prototype.getView3D = function() { +}; +ol.IView.prototype.isDef = function() { +}; +goog.provide("ol.View"); +goog.provide("ol.ViewHint"); +goog.require("goog.array"); +goog.require("goog.asserts"); +goog.require("ol.IView"); +goog.require("ol.Object"); +ol.ViewHint = {ANIMATING:0, INTERACTING:1}; +ol.View = function() { + goog.base(this); + this.hints_ = [0, 0] +}; +goog.inherits(ol.View, ol.Object); +ol.View.prototype.getHints = function() { + return goog.array.clone(this.hints_) +}; +ol.View.prototype.getView2D = function() { + goog.asserts.fail(); + return null +}; +ol.View.prototype.getView3D = function() { + goog.asserts.fail(); + return null +}; +ol.View.prototype.isDef = function() { + goog.asserts.fail(); + return false +}; +ol.View.prototype.setHint = function(hint, delta) { + goog.asserts.assert(0 <= hint && hint < this.hints_.length); + this.hints_[hint] += delta; + goog.asserts.assert(this.hints_[hint] >= 0); + return this.hints_[hint] +}; +goog.provide("ol.View2D"); +goog.provide("ol.View2DProperty"); +goog.require("goog.asserts"); +goog.require("ol.CenterConstraint"); +goog.require("ol.Constraints"); +goog.require("ol.IView2D"); +goog.require("ol.IView3D"); +goog.require("ol.ResolutionConstraint"); +goog.require("ol.RotationConstraint"); +goog.require("ol.RotationConstraintType"); +goog.require("ol.Size"); +goog.require("ol.View"); +goog.require("ol.coordinate"); +goog.require("ol.extent"); +goog.require("ol.proj"); +goog.require("ol.proj.METERS_PER_UNIT"); +goog.require("ol.proj.Projection"); +goog.require("ol.proj.Units"); +ol.View2DProperty = {CENTER:"center", PROJECTION:"projection", RESOLUTION:"resolution", ROTATION:"rotation"}; +ol.View2D = function(opt_options) { + goog.base(this); + var options = opt_options || {}; + var values = {}; + values[ol.View2DProperty.CENTER] = goog.isDef(options.center) ? options.center : null; + values[ol.View2DProperty.PROJECTION] = ol.proj.createProjection(options.projection, "EPSG:3857"); + var resolutionConstraintInfo = ol.View2D.createResolutionConstraint_(options); + this.maxResolution_ = resolutionConstraintInfo.maxResolution; + this.minResolution_ = resolutionConstraintInfo.minResolution; + var centerConstraint = ol.View2D.createCenterConstraint_(options); + var resolutionConstraint = resolutionConstraintInfo.constraint; + var rotationConstraint = ol.View2D.createRotationConstraint_(options); + this.constraints_ = new ol.Constraints(centerConstraint, resolutionConstraint, rotationConstraint); + if(goog.isDef(options.resolution)) { + values[ol.View2DProperty.RESOLUTION] = options.resolution + }else { + if(goog.isDef(options.zoom)) { + values[ol.View2DProperty.RESOLUTION] = this.constrainResolution(this.maxResolution_, options.zoom) + } + } + values[ol.View2DProperty.ROTATION] = goog.isDef(options.rotation) ? options.rotation : 0; + this.setValues(values) +}; +goog.inherits(ol.View2D, ol.View); +ol.View2D.prototype.calculateCenterRotate = function(rotation, anchor) { + var center; + var currentCenter = this.getCenter(); + if(goog.isDef(currentCenter)) { + center = [currentCenter[0] - anchor[0], currentCenter[1] - anchor[1]]; + ol.coordinate.rotate(center, rotation - this.getRotation()); + ol.coordinate.add(center, anchor) + } + return center +}; +ol.View2D.prototype.calculateCenterZoom = function(resolution, anchor) { + var center; + var currentCenter = this.getCenter(); + var currentResolution = this.getResolution(); + if(goog.isDef(currentCenter) && goog.isDef(currentResolution)) { + var x = anchor[0] - resolution * (anchor[0] - currentCenter[0]) / currentResolution; + var y = anchor[1] - resolution * (anchor[1] - currentCenter[1]) / currentResolution; + center = [x, y] + } + return center +}; +ol.View2D.prototype.constrainCenter = function(center) { + return this.constraints_.center(center) +}; +ol.View2D.prototype.constrainResolution = function(resolution, opt_delta, opt_direction) { + var delta = opt_delta || 0; + var direction = opt_direction || 0; + return this.constraints_.resolution(resolution, delta, direction) +}; +ol.View2D.prototype.constrainRotation = function(rotation, opt_delta) { + var delta = opt_delta || 0; + return this.constraints_.rotation(rotation, delta) +}; +ol.View2D.prototype.getCenter = function() { + return(this.get(ol.View2DProperty.CENTER)) +}; +goog.exportProperty(ol.View2D.prototype, "getCenter", ol.View2D.prototype.getCenter); +ol.View2D.prototype.calculateExtent = function(size) { + goog.asserts.assert(this.isDef()); + var center = this.getCenter(); + var resolution = this.getResolution(); + var minX = center[0] - resolution * size[0] / 2; + var maxX = center[0] + resolution * size[0] / 2; + var minY = center[1] - resolution * size[1] / 2; + var maxY = center[1] + resolution * size[1] / 2; + return[minX, minY, maxX, maxY] +}; +ol.View2D.prototype.getProjection = function() { + return(this.get(ol.View2DProperty.PROJECTION)) +}; +goog.exportProperty(ol.View2D.prototype, "getProjection", ol.View2D.prototype.getProjection); +ol.View2D.prototype.getResolution = function() { + return(this.get(ol.View2DProperty.RESOLUTION)) +}; +goog.exportProperty(ol.View2D.prototype, "getResolution", ol.View2D.prototype.getResolution); +ol.View2D.prototype.getResolutionForExtent = function(extent, size) { + var xResolution = (extent[2] - extent[0]) / size[0]; + var yResolution = (extent[3] - extent[1]) / size[1]; + return Math.max(xResolution, yResolution) +}; +ol.View2D.prototype.getResolutionForValueFunction = function(opt_power) { + var power = opt_power || 2; + var maxResolution = this.maxResolution_; + var minResolution = this.minResolution_; + var max = Math.log(maxResolution / minResolution) / Math.log(power); + return function(value) { + var resolution = maxResolution / Math.pow(power, value * max); + goog.asserts.assert(resolution >= minResolution && resolution <= maxResolution); + return resolution + } +}; +ol.View2D.prototype.getRotation = function() { + return(this.get(ol.View2DProperty.ROTATION)) +}; +goog.exportProperty(ol.View2D.prototype, "getRotation", ol.View2D.prototype.getRotation); +ol.View2D.prototype.getValueForResolutionFunction = function(opt_power) { + var power = opt_power || 2; + var maxResolution = this.maxResolution_; + var minResolution = this.minResolution_; + var max = Math.log(maxResolution / minResolution) / Math.log(power); + return function(resolution) { + var value = Math.log(maxResolution / resolution) / Math.log(power) / max; + goog.asserts.assert(value >= 0 && value <= 1); + return value + } +}; +ol.View2D.prototype.getView2D = function() { + return this +}; +ol.View2D.prototype.getView2DState = function() { + goog.asserts.assert(this.isDef()); + var center = (this.getCenter()); + var projection = this.getProjection(); + var resolution = (this.getResolution()); + var rotation = this.getRotation(); + return{center:center.slice(), projection:goog.isDef(projection) ? projection : null, resolution:resolution, rotation:goog.isDef(rotation) ? rotation : 0} +}; +ol.View2D.prototype.getView3D = function() { +}; +ol.View2D.prototype.getZoom = function() { + var zoom; + var resolution = this.getResolution(); + if(goog.isDef(resolution)) { + var res, z = 0; + do { + res = this.constrainResolution(this.maxResolution_, z); + if(res == resolution) { + zoom = z; + break + } + ++z + }while(res > this.minResolution_) + } + return zoom +}; +ol.View2D.prototype.fitExtent = function(extent, size) { + if(!ol.extent.isEmpty(extent)) { + this.setCenter(ol.extent.getCenter(extent)); + var resolution = this.getResolutionForExtent(extent, size); + var constrainedResolution = this.constrainResolution(resolution, 0, 0); + if(constrainedResolution < resolution) { + constrainedResolution = this.constrainResolution(constrainedResolution, -1, 0) + } + this.setResolution(constrainedResolution) + } +}; +ol.View2D.prototype.isDef = function() { + return goog.isDefAndNotNull(this.getCenter()) && goog.isDef(this.getResolution()) +}; +ol.View2D.prototype.setCenter = function(center) { + this.set(ol.View2DProperty.CENTER, center) +}; +goog.exportProperty(ol.View2D.prototype, "setCenter", ol.View2D.prototype.setCenter); +ol.View2D.prototype.setProjection = function(projection) { + this.set(ol.View2DProperty.PROJECTION, projection) +}; +goog.exportProperty(ol.View2D.prototype, "setProjection", ol.View2D.prototype.setProjection); +ol.View2D.prototype.setResolution = function(resolution) { + this.set(ol.View2DProperty.RESOLUTION, resolution) +}; +goog.exportProperty(ol.View2D.prototype, "setResolution", ol.View2D.prototype.setResolution); +ol.View2D.prototype.setRotation = function(rotation) { + this.set(ol.View2DProperty.ROTATION, rotation) +}; +goog.exportProperty(ol.View2D.prototype, "setRotation", ol.View2D.prototype.setRotation); +ol.View2D.prototype.setZoom = function(zoom) { + var resolution = this.constrainResolution(this.maxResolution_, zoom, 0); + this.setResolution(resolution) +}; +ol.View2D.createCenterConstraint_ = function(options) { + if(goog.isDef(options.extent)) { + return ol.CenterConstraint.createExtent(options.extent) + }else { + return ol.CenterConstraint.none + } +}; +ol.View2D.createResolutionConstraint_ = function(options) { + var resolutionConstraint; + var maxResolution; + var minResolution; + if(goog.isDef(options.resolutions)) { + var resolutions = options.resolutions; + maxResolution = resolutions[0]; + minResolution = resolutions[resolutions.length - 1]; + resolutionConstraint = ol.ResolutionConstraint.createSnapToResolutions(resolutions) + }else { + maxResolution = options.maxResolution; + if(!goog.isDef(maxResolution)) { + var projection = options.projection; + var projectionExtent = ol.proj.createProjection(projection, "EPSG:3857").getExtent(); + var size = goog.isNull(projectionExtent) ? 360 * ol.proj.METERS_PER_UNIT[ol.proj.Units.DEGREES] / ol.proj.METERS_PER_UNIT[projection.getUnits()] : Math.max(projectionExtent[2] - projectionExtent[0], projectionExtent[3] - projectionExtent[1]); + maxResolution = size / ol.DEFAULT_TILE_SIZE + } + var maxZoom = options.maxZoom; + if(!goog.isDef(maxZoom)) { + maxZoom = 28 + } + var zoomFactor = options.zoomFactor; + if(!goog.isDef(zoomFactor)) { + zoomFactor = 2 + } + minResolution = maxResolution / Math.pow(zoomFactor, maxZoom); + resolutionConstraint = ol.ResolutionConstraint.createSnapToPower(zoomFactor, maxResolution, maxZoom) + } + return{constraint:resolutionConstraint, maxResolution:maxResolution, minResolution:minResolution} +}; +ol.View2D.createRotationConstraint_ = function(options) { + var enableRotation = goog.isDef(options.enableRotation) ? options.enableRotation : true; + if(enableRotation) { + var constrainRotation = options.constrainRotation; + if(!goog.isDef(constrainRotation) || constrainRotation === true) { + return ol.RotationConstraint.createSnapToZero() + }else { + if(constrainRotation === false) { + return ol.RotationConstraint.none + }else { + if(goog.isNumber(constrainRotation)) { + return ol.RotationConstraint.createSnapToN(constrainRotation) + }else { + goog.asserts.fail(); + return ol.RotationConstraint.none + } + } + } + }else { + return ol.RotationConstraint.disable + } +}; +goog.provide("goog.fx.easing"); +goog.fx.easing.easeIn = function(t) { + return t * t * t +}; +goog.fx.easing.easeOut = function(t) { + return 1 - Math.pow(1 - t, 3) +}; +goog.fx.easing.inAndOut = function(t) { + return 3 * t * t - 2 * t * t * t +}; +goog.provide("ol.easing"); +goog.require("goog.fx.easing"); +ol.easing.bounce = function(t) { + var s = 7.5625, p = 2.75, l; + if(t < 1 / p) { + l = s * t * t + }else { + if(t < 2 / p) { + t -= 1.5 / p; + l = s * t * t + 0.75 + }else { + if(t < 2.5 / p) { + t -= 2.25 / p; + l = s * t * t + 0.9375 + }else { + t -= 2.625 / p; + l = s * t * t + 0.984375 + } + } + } + return l +}; +ol.easing.easeIn = goog.fx.easing.easeIn; +ol.easing.easeOut = goog.fx.easing.easeOut; +ol.easing.elastic = function(t) { + return Math.pow(2, -10 * t) * Math.sin((t - 0.075) * 2 * Math.PI / 0.3) + 1 +}; +ol.easing.inAndOut = goog.fx.easing.inAndOut; +ol.easing.linear = function(t) { + return t +}; +ol.easing.upAndDown = function(t) { + if(t < 0.5) { + return ol.easing.inAndOut(2 * t) + }else { + return 1 - ol.easing.inAndOut(2 * (t - 0.5)) + } +}; +goog.provide("ol.animation"); +goog.require("ol.PreRenderFunction"); +goog.require("ol.ViewHint"); +goog.require("ol.easing"); +ol.animation.bounce = function(options) { + var resolution = options.resolution; + var start = goog.isDef(options.start) ? options.start : goog.now(); + var duration = goog.isDef(options.duration) ? options.duration : 1E3; + var easing = goog.isDef(options.easing) ? options.easing : ol.easing.upAndDown; + return function(map, frameState) { + if(frameState.time < start) { + frameState.animate = true; + frameState.viewHints[ol.ViewHint.ANIMATING] += 1; + return true + }else { + if(frameState.time < start + duration) { + var delta = easing((frameState.time - start) / duration); + var deltaResolution = resolution - frameState.view2DState.resolution; + frameState.animate = true; + frameState.view2DState.resolution += delta * deltaResolution; + frameState.viewHints[ol.ViewHint.ANIMATING] += 1; + return true + }else { + return false + } + } + } +}; +ol.animation.pan = function(options) { + var source = options.source; + var start = goog.isDef(options.start) ? options.start : goog.now(); + var sourceX = source[0]; + var sourceY = source[1]; + var duration = goog.isDef(options.duration) ? options.duration : 1E3; + var easing = goog.isDef(options.easing) ? options.easing : ol.easing.inAndOut; + return function(map, frameState) { + if(frameState.time < start) { + frameState.animate = true; + frameState.viewHints[ol.ViewHint.ANIMATING] += 1; + return true + }else { + if(frameState.time < start + duration) { + var delta = 1 - easing((frameState.time - start) / duration); + var deltaX = sourceX - frameState.view2DState.center[0]; + var deltaY = sourceY - frameState.view2DState.center[1]; + frameState.animate = true; + frameState.view2DState.center[0] += delta * deltaX; + frameState.view2DState.center[1] += delta * deltaY; + frameState.viewHints[ol.ViewHint.ANIMATING] += 1; + return true + }else { + return false + } + } + } +}; +ol.animation.rotate = function(options) { + var sourceRotation = options.rotation; + var start = goog.isDef(options.start) ? options.start : goog.now(); + var duration = goog.isDef(options.duration) ? options.duration : 1E3; + var easing = goog.isDef(options.easing) ? options.easing : ol.easing.inAndOut; + return function(map, frameState) { + if(frameState.time < start) { + frameState.animate = true; + frameState.viewHints[ol.ViewHint.ANIMATING] += 1; + return true + }else { + if(frameState.time < start + duration) { + var delta = 1 - easing((frameState.time - start) / duration); + var deltaRotation = sourceRotation - frameState.view2DState.rotation; + frameState.animate = true; + frameState.view2DState.rotation += delta * deltaRotation; + frameState.viewHints[ol.ViewHint.ANIMATING] += 1; + return true + }else { + return false + } + } + } +}; +ol.animation.zoom = function(options) { + var sourceResolution = options.resolution; + var start = goog.isDef(options.start) ? options.start : goog.now(); + var duration = goog.isDef(options.duration) ? options.duration : 1E3; + var easing = goog.isDef(options.easing) ? options.easing : ol.easing.inAndOut; + return function(map, frameState) { + if(frameState.time < start) { + frameState.animate = true; + frameState.viewHints[ol.ViewHint.ANIMATING] += 1; + return true + }else { + if(frameState.time < start + duration) { + var delta = 1 - easing((frameState.time - start) / duration); + var deltaResolution = sourceResolution - frameState.view2DState.resolution; + frameState.animate = true; + frameState.view2DState.resolution += delta * deltaResolution; + frameState.viewHints[ol.ViewHint.ANIMATING] += 1; + return true + }else { + return false + } + } + } +}; +goog.provide("ol.interaction.Interaction"); +goog.require("goog.asserts"); +goog.require("ol.MapBrowserEvent"); +goog.require("ol.Observable"); +goog.require("ol.View2D"); +goog.require("ol.animation"); +goog.require("ol.easing"); +ol.interaction.Interaction = function() { + goog.base(this); + this.map_ = null +}; +goog.inherits(ol.interaction.Interaction, ol.Observable); +ol.interaction.Interaction.prototype.getMap = function() { + return this.map_ +}; +ol.interaction.Interaction.prototype.handleMapBrowserEvent = goog.abstractMethod; +ol.interaction.Interaction.prototype.setMap = function(map) { + this.map_ = map +}; +ol.interaction.Interaction.pan = function(map, view, delta, opt_duration) { + goog.asserts.assertInstanceof(view, ol.View2D); + var currentCenter = view.getCenter(); + if(goog.isDef(currentCenter)) { + if(goog.isDef(opt_duration) && opt_duration > 0) { + map.beforeRender(ol.animation.pan({source:currentCenter, duration:opt_duration, easing:ol.easing.linear})) + } + var center = view.constrainCenter([currentCenter[0] + delta[0], currentCenter[1] + delta[1]]); + view.setCenter(center) + } +}; +ol.interaction.Interaction.rotate = function(map, view, rotation, opt_anchor, opt_duration) { + goog.asserts.assertInstanceof(view, ol.View2D); + rotation = view.constrainRotation(rotation, 0); + ol.interaction.Interaction.rotateWithoutConstraints(map, view, rotation, opt_anchor, opt_duration) +}; +ol.interaction.Interaction.rotateWithoutConstraints = function(map, view, rotation, opt_anchor, opt_duration) { + goog.asserts.assertInstanceof(view, ol.View2D); + if(goog.isDefAndNotNull(rotation)) { + var currentRotation = view.getRotation(); + var currentCenter = view.getCenter(); + if(goog.isDef(currentRotation) && goog.isDef(currentCenter) && goog.isDef(opt_duration) && opt_duration > 0) { + map.beforeRender(ol.animation.rotate({rotation:currentRotation, duration:opt_duration, easing:ol.easing.easeOut})); + if(goog.isDef(opt_anchor)) { + map.beforeRender(ol.animation.pan({source:currentCenter, duration:opt_duration, easing:ol.easing.easeOut})) + } + } + goog.asserts.assertInstanceof(view, ol.View2D); + if(goog.isDefAndNotNull(opt_anchor)) { + var center = view.calculateCenterRotate(rotation, opt_anchor); + view.setCenter(center) + } + view.setRotation(rotation) + } +}; +ol.interaction.Interaction.zoom = function(map, view, resolution, opt_anchor, opt_duration, opt_direction) { + goog.asserts.assertInstanceof(view, ol.View2D); + resolution = view.constrainResolution(resolution, 0, opt_direction); + ol.interaction.Interaction.zoomWithoutConstraints(map, view, resolution, opt_anchor, opt_duration) +}; +ol.interaction.Interaction.zoomByDelta = function(map, view, delta, opt_anchor, opt_duration) { + goog.asserts.assertInstanceof(view, ol.View2D); + var currentResolution = view.getResolution(); + var resolution = view.constrainResolution(currentResolution, delta, 0); + ol.interaction.Interaction.zoomWithoutConstraints(map, view, resolution, opt_anchor, opt_duration) +}; +ol.interaction.Interaction.zoomWithoutConstraints = function(map, view, resolution, opt_anchor, opt_duration) { + goog.asserts.assertInstanceof(view, ol.View2D); + if(goog.isDefAndNotNull(resolution)) { + var currentResolution = view.getResolution(); + var currentCenter = view.getCenter(); + if(goog.isDef(currentResolution) && goog.isDef(currentCenter) && goog.isDef(opt_duration) && opt_duration > 0) { + map.beforeRender(ol.animation.zoom({resolution:currentResolution, duration:opt_duration, easing:ol.easing.easeOut})); + if(goog.isDef(opt_anchor)) { + map.beforeRender(ol.animation.pan({source:currentCenter, duration:opt_duration, easing:ol.easing.easeOut})) + } + } + goog.asserts.assertInstanceof(view, ol.View2D); + if(goog.isDefAndNotNull(opt_anchor)) { + var center = view.calculateCenterZoom(resolution, opt_anchor); + view.setCenter(center) + } + view.setResolution(resolution) + } +}; +goog.provide("ol.interaction.Drag"); +goog.require("goog.asserts"); +goog.require("goog.events.BrowserEvent"); +goog.require("goog.functions"); +goog.require("ol.Coordinate"); +goog.require("ol.MapBrowserEvent"); +goog.require("ol.MapBrowserEvent.EventType"); +goog.require("ol.interaction.Interaction"); +ol.interaction.Drag = function() { + goog.base(this); + this.dragging_ = false; + this.startX = 0; + this.startY = 0; + this.deltaX = 0; + this.deltaY = 0; + this.startCenter = null; + this.startCoordinate = null +}; +goog.inherits(ol.interaction.Drag, ol.interaction.Interaction); +ol.interaction.Drag.prototype.getDragging = function() { + return this.dragging_ +}; +ol.interaction.Drag.prototype.handleDrag = goog.nullFunction; +ol.interaction.Drag.prototype.handleDragEnd = goog.nullFunction; +ol.interaction.Drag.prototype.handleDragStart = goog.functions.FALSE; +ol.interaction.Drag.prototype.handleDown = goog.nullFunction; +ol.interaction.Drag.prototype.handleMapBrowserEvent = function(mapBrowserEvent) { + var map = mapBrowserEvent.map; + if(!map.isDef()) { + return true + } + var stopEvent = false; + var view = map.getView(); + var browserEvent = mapBrowserEvent.browserEvent; + if(mapBrowserEvent.type == ol.MapBrowserEvent.EventType.DOWN) { + goog.asserts.assertInstanceof(browserEvent, goog.events.BrowserEvent); + this.handleDown(mapBrowserEvent) + } + if(this.dragging_) { + if(mapBrowserEvent.type == ol.MapBrowserEvent.EventType.DRAG) { + goog.asserts.assertInstanceof(browserEvent, goog.events.BrowserEvent); + this.deltaX = browserEvent.clientX - this.startX; + this.deltaY = browserEvent.clientY - this.startY; + this.handleDrag(mapBrowserEvent) + }else { + if(mapBrowserEvent.type == ol.MapBrowserEvent.EventType.DRAGEND) { + goog.asserts.assertInstanceof(browserEvent, goog.events.BrowserEvent); + this.deltaX = browserEvent.clientX - this.startX; + this.deltaY = browserEvent.clientY - this.startY; + this.dragging_ = false; + this.handleDragEnd(mapBrowserEvent) + } + } + }else { + if(mapBrowserEvent.type == ol.MapBrowserEvent.EventType.DRAGSTART) { + goog.asserts.assertInstanceof(browserEvent, goog.events.BrowserEvent); + var view2DState = view.getView2D().getView2DState(); + this.startX = browserEvent.clientX; + this.startY = browserEvent.clientY; + this.deltaX = 0; + this.deltaY = 0; + this.startCenter = view2DState.center; + this.startCoordinate = mapBrowserEvent.coordinate; + var handled = this.handleDragStart(mapBrowserEvent); + if(handled) { + this.dragging_ = true; + mapBrowserEvent.preventDefault(); + stopEvent = true + } + } + } + return!stopEvent +}; +goog.provide("ol.geom.Geometry"); +goog.provide("ol.geom.GeometryType"); +goog.require("goog.asserts"); +goog.require("goog.functions"); +goog.require("ol.Observable"); +ol.geom.GeometryType = {POINT:"Point", LINE_STRING:"LineString", LINEAR_RING:"LinearRing", POLYGON:"Polygon", MULTI_POINT:"MultiPoint", MULTI_LINE_STRING:"MultiLineString", MULTI_POLYGON:"MultiPolygon", GEOMETRY_COLLECTION:"GeometryCollection", CIRCLE:"Circle"}; +ol.geom.GeometryLayout = {XY:"XY", XYZ:"XYZ", XYM:"XYM", XYZM:"XYZM"}; +ol.geom.Geometry = function() { + goog.base(this); + this.extent = undefined; + this.extentRevision = -1; + this.simplifiedGeometryCache = {}; + this.simplifiedGeometryMaxMinSquaredTolerance = 0; + this.simplifiedGeometryRevision = 0 +}; +goog.inherits(ol.geom.Geometry, ol.Observable); +ol.geom.Geometry.prototype.clone = goog.abstractMethod; +ol.geom.Geometry.prototype.closestPointXY = goog.abstractMethod; +ol.geom.Geometry.prototype.getClosestPoint = function(point, opt_closestPoint) { + var closestPoint = goog.isDef(opt_closestPoint) ? opt_closestPoint : [NaN, NaN]; + this.closestPointXY(point[0], point[1], closestPoint, Infinity); + return closestPoint +}; +ol.geom.Geometry.prototype.containsCoordinate = function(coordinate) { + return this.containsXY(coordinate[0], coordinate[1]) +}; +ol.geom.Geometry.prototype.containsXY = goog.functions.FALSE; +ol.geom.Geometry.prototype.getExtent = goog.abstractMethod; +ol.geom.Geometry.prototype.getSimplifiedGeometry = goog.abstractMethod; +ol.geom.Geometry.prototype.getType = goog.abstractMethod; +ol.geom.Geometry.prototype.transform = goog.abstractMethod; +ol.geom.RawPoint; +ol.geom.RawLineString; +ol.geom.RawLinearRing; +ol.geom.RawPolygon; +ol.geom.RawMultiPoint; +ol.geom.RawMultiLineString; +ol.geom.RawMultiPolygon; +goog.provide("ol.geom.flat"); +goog.require("goog.array"); +goog.require("goog.asserts"); +goog.require("goog.math"); +goog.require("goog.vec.Mat4"); +goog.require("ol.extent"); +ol.geom.flat.closestPoint = function(flatCoordinates, offset1, offset2, stride, x, y, closestPoint) { + var x1 = flatCoordinates[offset1]; + var y1 = flatCoordinates[offset1 + 1]; + var dx = flatCoordinates[offset2] - x1; + var dy = flatCoordinates[offset2 + 1] - y1; + var i, offset; + if(dx === 0 && dy === 0) { + offset = offset1 + }else { + var t = ((x - x1) * dx + (y - y1) * dy) / (dx * dx + dy * dy); + if(t > 1) { + offset = offset2 + }else { + if(t > 0) { + for(i = 0;i < stride;++i) { + closestPoint[i] = goog.math.lerp(flatCoordinates[offset1 + i], flatCoordinates[offset2 + i], t) + } + closestPoint.length = stride; + return + }else { + offset = offset1 + } + } + } + for(i = 0;i < stride;++i) { + closestPoint[i] = flatCoordinates[offset + i] + } + closestPoint.length = stride +}; +ol.geom.flat.deflateCoordinate = function(flatCoordinates, offset, coordinate, stride) { + goog.asserts.assert(coordinate.length == stride); + var i, ii; + for(i = 0, ii = coordinate.length;i < ii;++i) { + flatCoordinates[offset++] = coordinate[i] + } + return offset +}; +ol.geom.flat.deflateCoordinates = function(flatCoordinates, offset, coordinates, stride) { + var i, ii; + for(i = 0, ii = coordinates.length;i < ii;++i) { + var coordinate = coordinates[i]; + goog.asserts.assert(coordinate.length == stride); + var j; + for(j = 0;j < stride;++j) { + flatCoordinates[offset++] = coordinate[j] + } + } + return offset +}; +ol.geom.flat.deflateCoordinatess = function(flatCoordinates, offset, coordinatess, stride, opt_ends) { + var ends = goog.isDef(opt_ends) ? opt_ends : []; + var i = 0; + var j, jj; + for(j = 0, jj = coordinatess.length;j < jj;++j) { + var end = ol.geom.flat.deflateCoordinates(flatCoordinates, offset, coordinatess[j], stride); + ends[i++] = end; + offset = end + } + ends.length = i; + return ends +}; +ol.geom.flat.deflateCoordinatesss = function(flatCoordinates, offset, coordinatesss, stride, opt_endss) { + var endss = goog.isDef(opt_endss) ? opt_endss : []; + var i = 0; + var j, jj; + for(j = 0, jj = coordinatesss.length;j < jj;++j) { + var ends = ol.geom.flat.deflateCoordinatess(flatCoordinates, offset, coordinatesss[j], stride, endss[i]); + endss[i++] = ends; + offset = ends[ends.length - 1] + } + endss.length = i; + return endss +}; +ol.geom.flat.flipXY = function(flatCoordinates, offset, end, stride, opt_dest, opt_destOffset) { + var dest, destOffset; + if(goog.isDef(opt_dest)) { + dest = opt_dest; + destOffset = goog.isDef(opt_destOffset) ? opt_destOffset : 0 + }else { + goog.asserts.assert(!goog.isDef(opt_destOffset)); + dest = []; + destOffset = 0 + } + var j, k; + for(j = offset;j < end;) { + var x = flatCoordinates[j++]; + dest[destOffset++] = flatCoordinates[j++]; + dest[destOffset++] = x; + for(k = 2;k < stride;++k) { + dest[destOffset++] = flatCoordinates[j++] + } + } + dest.length = destOffset; + return dest +}; +ol.geom.flat.inflateCoordinates = function(flatCoordinates, offset, end, stride, opt_coordinates) { + var coordinates = goog.isDef(opt_coordinates) ? opt_coordinates : []; + var i = 0; + var j; + for(j = offset;j < end;j += stride) { + coordinates[i++] = flatCoordinates.slice(j, j + stride) + } + coordinates.length = i; + return coordinates +}; +ol.geom.flat.inflateCoordinatess = function(flatCoordinates, offset, ends, stride, opt_coordinatess) { + var coordinatess = goog.isDef(opt_coordinatess) ? opt_coordinatess : []; + var i = 0; + var j, jj; + for(j = 0, jj = ends.length;j < jj;++j) { + var end = ends[j]; + coordinatess[i++] = ol.geom.flat.inflateCoordinates(flatCoordinates, offset, end, stride, coordinatess[i]); + offset = end + } + coordinatess.length = i; + return coordinatess +}; +ol.geom.flat.inflateCoordinatesss = function(flatCoordinates, offset, endss, stride, opt_coordinatesss) { + var coordinatesss = goog.isDef(opt_coordinatesss) ? opt_coordinatesss : []; + var i = 0; + var j, jj; + for(j = 0, jj = endss.length;j < jj;++j) { + var ends = endss[j]; + coordinatesss[i++] = ol.geom.flat.inflateCoordinatess(flatCoordinates, offset, ends, stride, coordinatesss[i]); + offset = ends[ends.length - 1] + } + coordinatesss.length = i; + return coordinatesss +}; +ol.geom.flat.lineStringInterpolate = function(flatCoordinates, offset, end, stride, fraction, opt_dest) { + goog.asserts.assert(0 <= fraction && fraction <= 1); + var pointX = NaN; + var pointY = NaN; + var n = (end - offset) / stride; + if(n === 0) { + goog.asserts.fail() + }else { + if(n == 1) { + pointX = flatCoordinates[offset]; + pointY = flatCoordinates[offset + 1] + }else { + if(n == 2) { + pointX = (1 - fraction) * flatCoordinates[offset] + fraction * flatCoordinates[offset + stride]; + pointY = (1 - fraction) * flatCoordinates[offset + 1] + fraction * flatCoordinates[offset + stride + 1] + }else { + var x1 = flatCoordinates[offset]; + var y1 = flatCoordinates[offset + 1]; + var length = 0; + var cumulativeLengths = [0]; + var i; + for(i = offset + stride;i < end;i += stride) { + var x2 = flatCoordinates[i]; + var y2 = flatCoordinates[i + 1]; + length += Math.sqrt((x2 - x1) * (x2 - x1) + (y2 - y1) * (y2 - y1)); + cumulativeLengths.push(length); + x1 = x2; + y1 = y2 + } + var target = fraction * length; + var index = goog.array.binarySearch(cumulativeLengths, target); + if(index < 0) { + var t = (target - cumulativeLengths[-index - 2]) / (cumulativeLengths[-index - 1] - cumulativeLengths[-index - 2]); + var o = offset + (-index - 2) * stride; + pointX = (1 - t) * flatCoordinates[o] + t * flatCoordinates[o + stride]; + pointY = (1 - t) * flatCoordinates[o + 1] + t * flatCoordinates[o + stride + 1] + }else { + pointX = flatCoordinates[offset + index * stride]; + pointY = flatCoordinates[offset + index * stride + 1] + } + } + } + } + if(goog.isDefAndNotNull(opt_dest)) { + opt_dest.push(pointX, pointY); + return opt_dest + }else { + return[pointX, pointY] + } +}; +ol.geom.flat.lineStringCoordinateAtM = function(flatCoordinates, offset, end, stride, m, extrapolate) { + if(end == offset) { + return null + } + var coordinate; + if(m < flatCoordinates[offset + stride - 1]) { + if(extrapolate) { + coordinate = flatCoordinates.slice(offset, offset + stride); + coordinate[stride - 1] = m; + return coordinate + }else { + return null + } + }else { + if(flatCoordinates[end - 1] < m) { + if(extrapolate) { + coordinate = flatCoordinates.slice(end - stride, end); + coordinate[stride - 1] = m; + return coordinate + }else { + return null + } + } + } + if(m == flatCoordinates[offset + stride - 1]) { + return flatCoordinates.slice(offset, offset + stride) + } + var lo = offset / stride; + var hi = end / stride; + while(lo < hi) { + var mid = lo + hi >> 1; + if(m < flatCoordinates[(mid + 1) * stride - 1]) { + hi = mid + }else { + lo = mid + 1 + } + } + var m0 = flatCoordinates[lo * stride - 1]; + if(m == m0) { + return flatCoordinates.slice((lo - 1) * stride, (lo - 1) * stride + stride) + } + var m1 = flatCoordinates[(lo + 1) * stride - 1]; + goog.asserts.assert(m0 < m); + goog.asserts.assert(m <= m1); + var t = (m - m0) / (m1 - m0); + coordinate = []; + var i; + for(i = 0;i < stride - 1;++i) { + coordinate.push((1 - t) * flatCoordinates[(lo - 1) * stride + i] + t * flatCoordinates[lo * stride + i]) + } + coordinate.push(m); + goog.asserts.assert(coordinate.length == stride); + return coordinate +}; +ol.geom.flat.lineStringsCoordinateAtM = function(flatCoordinates, offset, ends, stride, m, extrapolate, interpolate) { + if(interpolate) { + return ol.geom.flat.lineStringCoordinateAtM(flatCoordinates, offset, ends[ends.length - 1], stride, m, extrapolate) + } + var coordinate; + if(m < flatCoordinates[stride - 1]) { + if(extrapolate) { + coordinate = flatCoordinates.slice(0, stride); + coordinate[stride - 1] = m; + return coordinate + }else { + return null + } + } + if(flatCoordinates[flatCoordinates.length - 1] < m) { + if(extrapolate) { + coordinate = flatCoordinates.slice(flatCoordinates.length - stride); + coordinate[stride - 1] = m; + return coordinate + }else { + return null + } + } + var i, ii; + for(i = 0, ii = ends.length;i < ii;++i) { + var end = ends[i]; + if(offset == end) { + continue + } + if(m < flatCoordinates[offset + stride - 1]) { + return null + }else { + if(m <= flatCoordinates[end - 1]) { + return ol.geom.flat.lineStringCoordinateAtM(flatCoordinates, offset, end, stride, m, false) + } + } + offset = end + } + goog.asserts.fail(); + return null +}; +ol.geom.flat.lineStringLength = function(flatCoordinates, offset, end, stride) { + var x1 = flatCoordinates[offset]; + var y1 = flatCoordinates[offset + 1]; + var length = 0; + var i; + for(i = offset + stride;i < end;i += stride) { + var x2 = flatCoordinates[i]; + var y2 = flatCoordinates[i + 1]; + length += Math.sqrt((x2 - x1) * (x2 - x1) + (y2 - y1) * (y2 - y1)); + x1 = x2; + y1 = y2 + } + return length +}; +ol.geom.flat.linearRingArea = function(flatCoordinates, offset, end, stride) { + var twiceArea = 0; + var x1 = flatCoordinates[end - stride]; + var y1 = flatCoordinates[end - stride + 1]; + for(;offset < end;offset += stride) { + var x2 = flatCoordinates[offset]; + var y2 = flatCoordinates[offset + 1]; + twiceArea += y1 * x2 - x1 * y2; + x1 = x2; + y1 = y2 + } + return twiceArea / 2 +}; +ol.geom.flat.linearRingContainsXY = function(flatCoordinates, offset, end, stride, x, y) { + var contains = false; + var x1 = flatCoordinates[end - stride]; + var y1 = flatCoordinates[end - stride + 1]; + for(;offset < end;offset += stride) { + var x2 = flatCoordinates[offset]; + var y2 = flatCoordinates[offset + 1]; + var intersect = y1 > y != y2 > y && x < (x2 - x1) * (y - y1) / (y2 - y1) + x1; + if(intersect) { + contains = !contains + } + x1 = x2; + y1 = y2 + } + return contains +}; +ol.geom.flat.linearRingIsClockwise = function(flatCoordinates, offset, end, stride) { + var edge = 0; + var x1 = flatCoordinates[end - stride]; + var y1 = flatCoordinates[end - stride + 1]; + for(;offset < end;offset += stride) { + var x2 = flatCoordinates[offset]; + var y2 = flatCoordinates[offset + 1]; + edge += (x2 - x1) * (y2 + y1); + x1 = x2; + y1 = y2 + } + return edge > 0 +}; +ol.geom.flat.linearRingPerimeter = function(flatCoordinates, offset, end, stride) { + var perimeter = ol.geom.flat.lineStringLength(flatCoordinates, offset, end, stride); + var dx = flatCoordinates[end - stride] - flatCoordinates[offset]; + var dy = flatCoordinates[end - stride + 1] - flatCoordinates[offset + 1]; + perimeter += Math.sqrt(dx * dx + dy * dy); + return perimeter +}; +ol.geom.flat.linearRingsArea = function(flatCoordinates, offset, ends, stride) { + var area = 0; + var i, ii; + for(i = 0, ii = ends.length;i < ii;++i) { + var end = ends[i]; + area += ol.geom.flat.linearRingArea(flatCoordinates, offset, end, stride); + offset = end + } + return area +}; +ol.geom.flat.linearRingsContainsXY = function(flatCoordinates, offset, ends, stride, x, y) { + goog.asserts.assert(ends.length > 0); + if(ends.length === 0) { + return false + } + if(!ol.geom.flat.linearRingContainsXY(flatCoordinates, offset, ends[0], stride, x, y)) { + return false + } + var i, ii; + for(i = 1, ii = ends.length;i < ii;++i) { + if(ol.geom.flat.linearRingContainsXY(flatCoordinates, ends[i - 1], ends[i], stride, x, y)) { + return false + } + } + return true +}; +ol.geom.flat.linearRingsGetInteriorPoint = function(flatCoordinates, offset, ends, stride, flatCenters, flatCentersOffset, opt_dest) { + var i, ii, x, x1, x2, y1, y2; + var y = flatCenters[flatCentersOffset + 1]; + var intersections = []; + var end = ends[0]; + x1 = flatCoordinates[end - stride]; + y1 = flatCoordinates[end - stride + 1]; + for(i = offset;i < end;i += stride) { + x2 = flatCoordinates[i]; + y2 = flatCoordinates[i + 1]; + if(y <= y1 && y2 <= y || y1 <= y && y <= y2) { + x = (y - y1) / (y2 - y1) * (x2 - x1) + x1; + intersections.push(x) + } + x1 = x2; + y1 = y2 + } + var pointX = NaN; + var maxSegmentLength = -Infinity; + intersections.sort(); + x1 = intersections[0]; + for(i = 1, ii = intersections.length;i < ii;++i) { + x2 = intersections[i]; + var segmentLength = Math.abs(x2 - x1); + if(segmentLength > maxSegmentLength) { + x = (x1 + x2) / 2; + if(ol.geom.flat.linearRingsContainsXY(flatCoordinates, offset, ends, stride, x, y)) { + pointX = x; + maxSegmentLength = segmentLength + } + } + x1 = x2 + } + if(isNaN(pointX)) { + pointX = flatCenters[flatCentersOffset] + } + if(goog.isDef(opt_dest)) { + opt_dest.push(pointX, y); + return opt_dest + }else { + return[pointX, y] + } +}; +ol.geom.flat.linearRingsAreOriented = function(flatCoordinates, offset, ends, stride) { + var i, ii; + for(i = 0, ii = ends.length;i < ii;++i) { + var end = ends[i]; + var isClockwise = ol.geom.flat.linearRingIsClockwise(flatCoordinates, offset, end, stride); + if(i === 0 ? !isClockwise : isClockwise) { + return false + } + offset = end + } + return true +}; +ol.geom.flat.linearRingssAreOriented = function(flatCoordinates, offset, endss, stride) { + var i, ii; + for(i = 0, ii = endss.length;i < ii;++i) { + if(!ol.geom.flat.linearRingsAreOriented(flatCoordinates, offset, endss[i], stride)) { + return false + } + } + return true +}; +ol.geom.flat.linearRingssArea = function(flatCoordinates, offset, endss, stride) { + var area = 0; + var i, ii; + for(i = 0, ii = endss.length;i < ii;++i) { + var ends = endss[i]; + area += ol.geom.flat.linearRingsArea(flatCoordinates, offset, ends, stride); + offset = ends[ends.length - 1] + } + return area +}; +ol.geom.flat.linearRingssContainsXY = function(flatCoordinates, offset, endss, stride, x, y) { + goog.asserts.assert(endss.length > 0); + if(endss.length === 0) { + return false + } + var i, ii; + for(i = 0, ii = endss.length;i < ii;++i) { + var ends = endss[i]; + if(ol.geom.flat.linearRingsContainsXY(flatCoordinates, offset, ends, stride, x, y)) { + return true + } + offset = ends[ends.length - 1] + } + return false +}; +ol.geom.flat.linearRingssGetInteriorPoints = function(flatCoordinates, offset, endss, stride, flatCenters) { + goog.asserts.assert(2 * endss.length == flatCenters.length); + var interiorPoints = []; + var i, ii; + for(i = 0, ii = endss.length;i < ii;++i) { + var ends = endss[i]; + interiorPoints = ol.geom.flat.linearRingsGetInteriorPoint(flatCoordinates, offset, ends, stride, flatCenters, 2 * i, interiorPoints); + offset = ends[ends.length - 1] + } + return interiorPoints +}; +ol.geom.flat.linearRingssGetFlatCenters = function(flatCoordinates, offset, endss, stride) { + var flatCenters = []; + var i, ii; + var extent = ol.extent.createEmpty(); + for(i = 0, ii = endss.length;i < ii;++i) { + var ends = endss[i]; + extent = ol.extent.createOrUpdateFromFlatCoordinates(flatCoordinates, offset, ends[0], stride); + flatCenters.push((extent[0] + extent[2]) / 2, (extent[1] + extent[3]) / 2); + offset = ends[ends.length - 1] + } + return flatCenters +}; +ol.geom.flat.orientLinearRings = function(flatCoordinates, offset, ends, stride) { + var i, ii; + for(i = 0, ii = ends.length;i < ii;++i) { + var end = ends[i]; + var isClockwise = ol.geom.flat.linearRingIsClockwise(flatCoordinates, offset, end, stride); + var reverse = i === 0 ? !isClockwise : isClockwise; + if(reverse) { + ol.geom.flat.reverseCoordinates(flatCoordinates, offset, end, stride) + } + offset = end + } + return offset +}; +ol.geom.flat.orientLinearRingss = function(flatCoordinates, offset, endss, stride) { + var i, ii; + for(i = 0, ii = endss.length;i < ii;++i) { + offset = ol.geom.flat.orientLinearRings(flatCoordinates, offset, endss[i], stride) + } + return offset +}; +ol.geom.flat.reverseCoordinates = function(flatCoordinates, offset, end, stride) { + while(offset < end - stride) { + var i; + for(i = 0;i < stride;++i) { + var tmp = flatCoordinates[offset + i]; + flatCoordinates[offset + i] = flatCoordinates[end - stride + i]; + flatCoordinates[end - stride + i] = tmp + } + offset += stride; + end -= stride + } +}; +ol.geom.flat.squaredSegmentDistance = function(x, y, x1, y1, x2, y2) { + var dx = x2 - x1; + var dy = y2 - y1; + if(dx !== 0 || dy !== 0) { + var t = ((x - x1) * dx + (y - y1) * dy) / (dx * dx + dy * dy); + if(t > 1) { + x1 = x2; + y1 = y2 + }else { + if(t > 0) { + x1 += dx * t; + y1 += dy * t + } + } + } + return ol.geom.flat.squaredDistance(x, y, x1, y1) +}; +ol.geom.flat.squaredDistance = function(x1, y1, x2, y2) { + var dx = x2 - x1; + var dy = y2 - y1; + return dx * dx + dy * dy +}; +ol.geom.flat.transform2D = function(flatCoordinates, stride, transform, opt_dest) { + var m00 = goog.vec.Mat4.getElement(transform, 0, 0); + var m10 = goog.vec.Mat4.getElement(transform, 1, 0); + var m01 = goog.vec.Mat4.getElement(transform, 0, 1); + var m11 = goog.vec.Mat4.getElement(transform, 1, 1); + var m03 = goog.vec.Mat4.getElement(transform, 0, 3); + var m13 = goog.vec.Mat4.getElement(transform, 1, 3); + var dest = goog.isDef(opt_dest) ? opt_dest : []; + var i = 0; + var j, jj; + for(j = 0, jj = flatCoordinates.length;j < jj;j += stride) { + var x = flatCoordinates[j]; + var y = flatCoordinates[j + 1]; + dest[i++] = m00 * x + m01 * y + m03; + dest[i++] = m10 * x + m11 * y + m13 + } + if(goog.isDef(opt_dest) && dest.length != i) { + dest.length = i + } + return dest +}; +goog.provide("ol.geom.SimpleGeometry"); +goog.require("goog.asserts"); +goog.require("goog.functions"); +goog.require("goog.object"); +goog.require("ol.extent"); +goog.require("ol.geom.Geometry"); +goog.require("ol.geom.flat"); +ol.geom.SimpleGeometry = function() { + goog.base(this); + this.layout = ol.geom.GeometryLayout.XY; + this.stride = 2; + this.flatCoordinates = null +}; +goog.inherits(ol.geom.SimpleGeometry, ol.geom.Geometry); +ol.geom.SimpleGeometry.getLayoutForStride_ = function(stride) { + if(stride == 2) { + return ol.geom.GeometryLayout.XY + }else { + if(stride == 3) { + return ol.geom.GeometryLayout.XYZ + }else { + if(stride == 4) { + return ol.geom.GeometryLayout.XYZM + }else { + throw new Error("unsupported stride: " + stride); + } + } + } +}; +ol.geom.SimpleGeometry.getStrideForLayout_ = function(layout) { + if(layout == ol.geom.GeometryLayout.XY) { + return 2 + }else { + if(layout == ol.geom.GeometryLayout.XYZ) { + return 3 + }else { + if(layout == ol.geom.GeometryLayout.XYM) { + return 3 + }else { + if(layout == ol.geom.GeometryLayout.XYZM) { + return 4 + }else { + throw new Error("unsupported layout: " + layout); + } + } + } + } +}; +ol.geom.SimpleGeometry.prototype.containsXY = goog.functions.FALSE; +ol.geom.SimpleGeometry.prototype.getExtent = function(opt_extent) { + if(this.extentRevision != this.getRevision()) { + this.extent = ol.extent.createOrUpdateFromFlatCoordinates(this.flatCoordinates, 0, this.flatCoordinates.length, this.stride, this.extent); + this.extentRevision = this.getRevision() + } + goog.asserts.assert(goog.isDef(this.extent)); + return ol.extent.returnOrUpdate(this.extent, opt_extent) +}; +ol.geom.SimpleGeometry.prototype.getFirstCoordinate = function() { + return this.flatCoordinates.slice(0, this.stride) +}; +ol.geom.SimpleGeometry.prototype.getFlatCoordinates = function() { + return this.flatCoordinates +}; +ol.geom.SimpleGeometry.prototype.getLastCoordinate = function() { + return this.flatCoordinates.slice(this.flatCoordinates.length - this.stride) +}; +ol.geom.SimpleGeometry.prototype.getLayout = function() { + return this.layout +}; +ol.geom.SimpleGeometry.prototype.getSimplifiedGeometry = function(squaredTolerance) { + if(this.simplifiedGeometryRevision != this.getRevision()) { + goog.object.clear(this.simplifiedGeometryCache); + this.simplifiedGeometryMaxMinSquaredTolerance = 0; + this.simplifiedGeometryRevision = this.getRevision() + } + if(squaredTolerance < 0 || this.simplifiedGeometryMaxMinSquaredTolerance !== 0 && squaredTolerance <= this.simplifiedGeometryMaxMinSquaredTolerance) { + return this + } + var key = squaredTolerance.toString(); + if(this.simplifiedGeometryCache.hasOwnProperty(key)) { + return this.simplifiedGeometryCache[key] + }else { + var simplifiedGeometry = this.getSimplifiedGeometryInternal(squaredTolerance); + var simplifiedFlatCoordinates = simplifiedGeometry.getFlatCoordinates(); + if(simplifiedFlatCoordinates.length < this.flatCoordinates.length) { + this.simplifiedGeometryCache[key] = simplifiedGeometry; + return simplifiedGeometry + }else { + this.simplifiedGeometryMaxMinSquaredTolerance = squaredTolerance; + return this + } + } +}; +ol.geom.SimpleGeometry.prototype.getSimplifiedGeometryInternal = function(squaredTolerance) { + return this +}; +ol.geom.SimpleGeometry.prototype.getStride = function() { + return this.stride +}; +ol.geom.SimpleGeometry.prototype.setFlatCoordinatesInternal = function(layout, flatCoordinates) { + this.stride = ol.geom.SimpleGeometry.getStrideForLayout_(layout); + this.layout = layout; + this.flatCoordinates = flatCoordinates +}; +ol.geom.SimpleGeometry.prototype.setLayout = function(layout, coordinates, nesting) { + var stride; + if(goog.isDef(layout)) { + stride = ol.geom.SimpleGeometry.getStrideForLayout_(layout) + }else { + var i; + for(i = 0;i < nesting;++i) { + if(coordinates.length === 0) { + this.layout = ol.geom.GeometryLayout.XY; + this.stride = 2; + return + }else { + coordinates = (coordinates[0]) + } + } + stride = (coordinates).length; + layout = ol.geom.SimpleGeometry.getLayoutForStride_(stride) + } + this.layout = layout; + this.stride = stride +}; +ol.geom.SimpleGeometry.prototype.transform = function(transformFn) { + if(!goog.isNull(this.flatCoordinates)) { + transformFn(this.flatCoordinates, this.flatCoordinates, this.stride); + this.dispatchChangeEvent() + } +}; +ol.geom.transformSimpleGeometry2D = function(simpleGeometry, transform, opt_dest) { + var flatCoordinates = simpleGeometry.getFlatCoordinates(); + if(goog.isNull(flatCoordinates)) { + return null + }else { + var stride = simpleGeometry.getStride(); + return ol.geom.flat.transform2D(flatCoordinates, stride, transform, opt_dest) + } +}; +goog.provide("ol.geom.closest"); +goog.require("goog.asserts"); +goog.require("ol.geom.flat"); +ol.geom.closest.getMaxSquaredDelta = function(flatCoordinates, offset, end, stride, maxSquaredDelta) { + var x1 = flatCoordinates[offset]; + var y1 = flatCoordinates[offset + 1]; + for(offset += stride;offset < end;offset += stride) { + var x2 = flatCoordinates[offset]; + var y2 = flatCoordinates[offset + 1]; + var squaredDelta = ol.geom.flat.squaredDistance(x1, y1, x2, y2); + if(squaredDelta > maxSquaredDelta) { + maxSquaredDelta = squaredDelta + } + x1 = x2; + y1 = y2 + } + return maxSquaredDelta +}; +ol.geom.closest.getsMaxSquaredDelta = function(flatCoordinates, offset, ends, stride, maxSquaredDelta) { + var i, ii; + for(i = 0, ii = ends.length;i < ii;++i) { + var end = ends[i]; + maxSquaredDelta = ol.geom.closest.getMaxSquaredDelta(flatCoordinates, offset, end, stride, maxSquaredDelta); + offset = end + } + return maxSquaredDelta +}; +ol.geom.closest.getssMaxSquaredDelta = function(flatCoordinates, offset, endss, stride, maxSquaredDelta) { + var i, ii; + for(i = 0, ii = endss.length;i < ii;++i) { + var ends = endss[i]; + maxSquaredDelta = ol.geom.closest.getsMaxSquaredDelta(flatCoordinates, offset, ends, stride, maxSquaredDelta); + offset = ends[ends.length - 1] + } + return maxSquaredDelta +}; +ol.geom.closest.getClosestPoint = function(flatCoordinates, offset, end, stride, maxDelta, isRing, x, y, closestPoint, minSquaredDistance, opt_tmpPoint) { + if(offset == end) { + return minSquaredDistance + } + var i, squaredDistance; + if(maxDelta === 0) { + squaredDistance = ol.geom.flat.squaredDistance(x, y, flatCoordinates[offset], flatCoordinates[offset + 1]); + if(squaredDistance < minSquaredDistance) { + for(i = 0;i < stride;++i) { + closestPoint[i] = flatCoordinates[offset + i] + } + closestPoint.length = stride; + return squaredDistance + }else { + return minSquaredDistance + } + } + goog.asserts.assert(maxDelta > 0); + var tmpPoint = goog.isDef(opt_tmpPoint) ? opt_tmpPoint : [NaN, NaN]; + var index = offset + stride; + while(index < end) { + ol.geom.flat.closestPoint(flatCoordinates, index - stride, index, stride, x, y, tmpPoint); + squaredDistance = ol.geom.flat.squaredDistance(x, y, tmpPoint[0], tmpPoint[1]); + if(squaredDistance < minSquaredDistance) { + minSquaredDistance = squaredDistance; + for(i = 0;i < stride;++i) { + closestPoint[i] = tmpPoint[i] + } + closestPoint.length = stride; + index += stride + }else { + index += stride * Math.max((Math.sqrt(squaredDistance) - Math.sqrt(minSquaredDistance)) / maxDelta | 0, 1) + } + } + if(isRing) { + ol.geom.flat.closestPoint(flatCoordinates, end - stride, offset, stride, x, y, tmpPoint); + squaredDistance = ol.geom.flat.squaredDistance(x, y, tmpPoint[0], tmpPoint[1]); + if(squaredDistance < minSquaredDistance) { + minSquaredDistance = squaredDistance; + for(i = 0;i < stride;++i) { + closestPoint[i] = tmpPoint[i] + } + closestPoint.length = stride + } + } + return minSquaredDistance +}; +ol.geom.closest.getsClosestPoint = function(flatCoordinates, offset, ends, stride, maxDelta, isRing, x, y, closestPoint, minSquaredDistance, opt_tmpPoint) { + var tmpPoint = goog.isDef(opt_tmpPoint) ? opt_tmpPoint : [NaN, NaN]; + var i, ii; + for(i = 0, ii = ends.length;i < ii;++i) { + var end = ends[i]; + minSquaredDistance = ol.geom.closest.getClosestPoint(flatCoordinates, offset, end, stride, maxDelta, isRing, x, y, closestPoint, minSquaredDistance, tmpPoint); + offset = end + } + return minSquaredDistance +}; +ol.geom.closest.getssClosestPoint = function(flatCoordinates, offset, endss, stride, maxDelta, isRing, x, y, closestPoint, minSquaredDistance, opt_tmpPoint) { + var tmpPoint = goog.isDef(opt_tmpPoint) ? opt_tmpPoint : [NaN, NaN]; + var i, ii; + for(i = 0, ii = endss.length;i < ii;++i) { + var ends = endss[i]; + minSquaredDistance = ol.geom.closest.getsClosestPoint(flatCoordinates, offset, ends, stride, maxDelta, isRing, x, y, closestPoint, minSquaredDistance, tmpPoint); + offset = ends[ends.length - 1] + } + return minSquaredDistance +}; +goog.provide("ol.geom.simplify"); +goog.require("ol.geom.flat"); +ol.geom.simplify.lineString = function(flatCoordinates, offset, end, stride, squaredTolerance, highQuality, opt_simplifiedFlatCoordinates) { + var simplifiedFlatCoordinates = goog.isDef(opt_simplifiedFlatCoordinates) ? opt_simplifiedFlatCoordinates : []; + if(!highQuality) { + end = ol.geom.simplify.radialDistance(flatCoordinates, offset, end, stride, squaredTolerance, simplifiedFlatCoordinates, 0); + flatCoordinates = simplifiedFlatCoordinates; + offset = 0; + stride = 2 + } + simplifiedFlatCoordinates.length = ol.geom.simplify.douglasPeucker(flatCoordinates, offset, end, stride, squaredTolerance, simplifiedFlatCoordinates, 0); + return simplifiedFlatCoordinates +}; +ol.geom.simplify.douglasPeucker = function(flatCoordinates, offset, end, stride, squaredTolerance, simplifiedFlatCoordinates, simplifiedOffset) { + var n = (end - offset) / stride; + if(n < 3) { + for(;offset < end;offset += stride) { + simplifiedFlatCoordinates[simplifiedOffset++] = flatCoordinates[offset]; + simplifiedFlatCoordinates[simplifiedOffset++] = flatCoordinates[offset + 1] + } + return simplifiedOffset + } + var markers = new Array(n); + markers[0] = 1; + markers[n - 1] = 1; + var stack = [offset, end - stride]; + var index = 0; + var i; + while(stack.length > 0) { + var last = stack.pop(); + var first = stack.pop(); + var maxSquaredDistance = 0; + var x1 = flatCoordinates[first]; + var y1 = flatCoordinates[first + 1]; + var x2 = flatCoordinates[last]; + var y2 = flatCoordinates[last + 1]; + for(i = first + stride;i < last;i += stride) { + var x = flatCoordinates[i]; + var y = flatCoordinates[i + 1]; + var squaredDistance = ol.geom.flat.squaredSegmentDistance(x, y, x1, y1, x2, y2); + if(squaredDistance > maxSquaredDistance) { + index = i; + maxSquaredDistance = squaredDistance + } + } + if(maxSquaredDistance > squaredTolerance) { + markers[(index - offset) / stride] = 1; + if(first + stride < index) { + stack.push(first, index) + } + if(index + stride < last) { + stack.push(index, last) + } + } + } + for(i = 0;i < n;++i) { + if(markers[i]) { + simplifiedFlatCoordinates[simplifiedOffset++] = flatCoordinates[offset + i * stride]; + simplifiedFlatCoordinates[simplifiedOffset++] = flatCoordinates[offset + i * stride + 1] + } + } + return simplifiedOffset +}; +ol.geom.simplify.douglasPeuckers = function(flatCoordinates, offset, ends, stride, squaredTolerance, simplifiedFlatCoordinates, simplifiedOffset, simplifiedEnds) { + var i, ii; + for(i = 0, ii = ends.length;i < ii;++i) { + var end = ends[i]; + simplifiedOffset = ol.geom.simplify.douglasPeucker(flatCoordinates, offset, end, stride, squaredTolerance, simplifiedFlatCoordinates, simplifiedOffset); + simplifiedEnds.push(simplifiedOffset); + offset = end + } + return simplifiedOffset +}; +ol.geom.simplify.douglasPeuckerss = function(flatCoordinates, offset, endss, stride, squaredTolerance, simplifiedFlatCoordinates, simplifiedOffset, simplifiedEndss) { + var i, ii; + for(i = 0, ii = endss.length;i < ii;++i) { + var ends = endss[i]; + var simplifiedEnds = []; + simplifiedOffset = ol.geom.simplify.douglasPeuckers(flatCoordinates, offset, ends, stride, squaredTolerance, simplifiedFlatCoordinates, simplifiedOffset, simplifiedEnds); + simplifiedEndss.push(simplifiedEnds); + offset = ends[ends.length - 1] + } + return simplifiedOffset +}; +ol.geom.simplify.radialDistance = function(flatCoordinates, offset, end, stride, squaredTolerance, simplifiedFlatCoordinates, simplifiedOffset) { + if(end <= offset + stride) { + for(;offset < end;offset += stride) { + simplifiedFlatCoordinates[simplifiedOffset++] = flatCoordinates[offset]; + simplifiedFlatCoordinates[simplifiedOffset++] = flatCoordinates[offset + 1] + } + return simplifiedOffset + } + var x1 = flatCoordinates[offset]; + var y1 = flatCoordinates[offset + 1]; + simplifiedFlatCoordinates[simplifiedOffset++] = x1; + simplifiedFlatCoordinates[simplifiedOffset++] = y1; + var x2 = x1; + var y2 = y1; + for(offset += stride;offset < end;offset += stride) { + x2 = flatCoordinates[offset]; + y2 = flatCoordinates[offset + 1]; + if(ol.geom.flat.squaredDistance(x1, y1, x2, y2) > squaredTolerance) { + simplifiedFlatCoordinates[simplifiedOffset++] = x2; + simplifiedFlatCoordinates[simplifiedOffset++] = y2; + x1 = x2; + y1 = y2 + } + } + if(x2 != x1 || y2 != y1) { + simplifiedFlatCoordinates[simplifiedOffset++] = x2; + simplifiedFlatCoordinates[simplifiedOffset++] = y2 + } + return simplifiedOffset +}; +ol.geom.simplify.snap = function(value, tolerance) { + return tolerance * Math.round(value / tolerance) +}; +ol.geom.simplify.quantize = function(flatCoordinates, offset, end, stride, tolerance, simplifiedFlatCoordinates, simplifiedOffset) { + if(offset == end) { + return simplifiedOffset + } + var x1 = ol.geom.simplify.snap(flatCoordinates[offset], tolerance); + var y1 = ol.geom.simplify.snap(flatCoordinates[offset + 1], tolerance); + offset += stride; + simplifiedFlatCoordinates[simplifiedOffset++] = x1; + simplifiedFlatCoordinates[simplifiedOffset++] = y1; + var x2, y2; + do { + x2 = ol.geom.simplify.snap(flatCoordinates[offset], tolerance); + y2 = ol.geom.simplify.snap(flatCoordinates[offset + 1], tolerance); + offset += stride; + if(offset == end) { + simplifiedFlatCoordinates[simplifiedOffset++] = x2; + simplifiedFlatCoordinates[simplifiedOffset++] = y2; + return simplifiedOffset + } + }while(x2 == x1 && y2 == y1); + while(offset < end) { + var x3, y3; + x3 = ol.geom.simplify.snap(flatCoordinates[offset], tolerance); + y3 = ol.geom.simplify.snap(flatCoordinates[offset + 1], tolerance); + offset += stride; + if(x3 == x2 && y3 == y2) { + continue + } + var dx1 = x2 - x1; + var dy1 = y2 - y1; + var dx2 = x3 - x1; + var dy2 = y3 - y1; + if(dx1 * dy2 == dy1 * dx2 && (dx1 < 0 && dx2 < dx1 || dx1 == dx2 || dx1 > 0 && dx2 > dx1) && (dy1 < 0 && dy2 < dy1 || dy1 == dy2 || dy1 > 0 && dy2 > dy1)) { + x2 = x3; + y2 = y3; + continue + } + simplifiedFlatCoordinates[simplifiedOffset++] = x2; + simplifiedFlatCoordinates[simplifiedOffset++] = y2; + x1 = x2; + y1 = y2; + x2 = x3; + y2 = y3 + } + simplifiedFlatCoordinates[simplifiedOffset++] = x2; + simplifiedFlatCoordinates[simplifiedOffset++] = y2; + return simplifiedOffset +}; +ol.geom.simplify.quantizes = function(flatCoordinates, offset, ends, stride, tolerance, simplifiedFlatCoordinates, simplifiedOffset, simplifiedEnds) { + var i, ii; + for(i = 0, ii = ends.length;i < ii;++i) { + var end = ends[i]; + simplifiedOffset = ol.geom.simplify.quantize(flatCoordinates, offset, end, stride, tolerance, simplifiedFlatCoordinates, simplifiedOffset); + simplifiedEnds.push(simplifiedOffset); + offset = end + } + return simplifiedOffset +}; +ol.geom.simplify.quantizess = function(flatCoordinates, offset, endss, stride, tolerance, simplifiedFlatCoordinates, simplifiedOffset, simplifiedEndss) { + var i, ii; + for(i = 0, ii = endss.length;i < ii;++i) { + var ends = endss[i]; + var simplifiedEnds = []; + simplifiedOffset = ol.geom.simplify.quantizes(flatCoordinates, offset, ends, stride, tolerance, simplifiedFlatCoordinates, simplifiedOffset, simplifiedEnds); + simplifiedEndss.push(simplifiedEnds); + offset = ends[ends.length - 1] + } + return simplifiedOffset +}; +goog.provide("ol.geom.LinearRing"); +goog.require("ol.extent"); +goog.require("ol.geom.GeometryType"); +goog.require("ol.geom.SimpleGeometry"); +goog.require("ol.geom.closest"); +goog.require("ol.geom.flat"); +goog.require("ol.geom.simplify"); +ol.geom.LinearRing = function(coordinates, opt_layout) { + goog.base(this); + this.maxDelta_ = -1; + this.maxDeltaRevision_ = -1; + this.setCoordinates(coordinates, opt_layout) +}; +goog.inherits(ol.geom.LinearRing, ol.geom.SimpleGeometry); +ol.geom.LinearRing.prototype.clone = function() { + var linearRing = new ol.geom.LinearRing(null); + linearRing.setFlatCoordinates(this.layout, this.flatCoordinates.slice()); + return linearRing +}; +ol.geom.LinearRing.prototype.closestPointXY = function(x, y, closestPoint, minSquaredDistance) { + if(minSquaredDistance < ol.extent.closestSquaredDistanceXY(this.getExtent(), x, y)) { + return minSquaredDistance + } + if(this.maxDeltaRevision_ != this.getRevision()) { + this.maxDelta_ = Math.sqrt(ol.geom.closest.getMaxSquaredDelta(this.flatCoordinates, 0, this.flatCoordinates.length, this.stride, 0)); + this.maxDeltaRevision_ = this.getRevision() + } + return ol.geom.closest.getClosestPoint(this.flatCoordinates, 0, this.flatCoordinates.length, this.stride, this.maxDelta_, true, x, y, closestPoint, minSquaredDistance) +}; +ol.geom.LinearRing.prototype.getArea = function() { + return ol.geom.flat.linearRingArea(this.flatCoordinates, 0, this.flatCoordinates.length, this.stride) +}; +ol.geom.LinearRing.prototype.getCoordinates = function() { + return ol.geom.flat.inflateCoordinates(this.flatCoordinates, 0, this.flatCoordinates.length, this.stride) +}; +ol.geom.LinearRing.prototype.getSimplifiedGeometryInternal = function(squaredTolerance) { + var simplifiedFlatCoordinates = []; + simplifiedFlatCoordinates.length = ol.geom.simplify.douglasPeucker(this.flatCoordinates, 0, this.flatCoordinates.length, this.stride, squaredTolerance, simplifiedFlatCoordinates, 0); + var simplifiedLinearRing = new ol.geom.LinearRing(null); + simplifiedLinearRing.setFlatCoordinates(ol.geom.GeometryLayout.XY, simplifiedFlatCoordinates); + return simplifiedLinearRing +}; +ol.geom.LinearRing.prototype.getType = function() { + return ol.geom.GeometryType.LINEAR_RING +}; +ol.geom.LinearRing.prototype.setCoordinates = function(coordinates, opt_layout) { + if(goog.isNull(coordinates)) { + this.setFlatCoordinates(ol.geom.GeometryLayout.XY, null) + }else { + this.setLayout(opt_layout, coordinates, 1); + if(goog.isNull(this.flatCoordinates)) { + this.flatCoordinates = [] + } + this.flatCoordinates.length = ol.geom.flat.deflateCoordinates(this.flatCoordinates, 0, coordinates, this.stride); + this.dispatchChangeEvent() + } +}; +ol.geom.LinearRing.prototype.setFlatCoordinates = function(layout, flatCoordinates) { + this.setFlatCoordinatesInternal(layout, flatCoordinates); + this.dispatchChangeEvent() +}; +goog.provide("ol.geom.Point"); +goog.require("goog.asserts"); +goog.require("ol.extent"); +goog.require("ol.geom.GeometryType"); +goog.require("ol.geom.SimpleGeometry"); +goog.require("ol.geom.flat"); +ol.geom.Point = function(coordinates, opt_layout) { + goog.base(this); + this.setCoordinates(coordinates, opt_layout) +}; +goog.inherits(ol.geom.Point, ol.geom.SimpleGeometry); +ol.geom.Point.prototype.clone = function() { + var point = new ol.geom.Point(null); + point.setFlatCoordinates(this.layout, this.flatCoordinates.slice()); + return point +}; +ol.geom.Point.prototype.closestPointXY = function(x, y, closestPoint, minSquaredDistance) { + var flatCoordinates = this.flatCoordinates; + var squaredDistance = ol.geom.flat.squaredDistance(x, y, flatCoordinates[0], flatCoordinates[1]); + if(squaredDistance < minSquaredDistance) { + var stride = this.stride; + var i; + for(i = 0;i < stride;++i) { + closestPoint[i] = flatCoordinates[i] + } + closestPoint.length = stride; + return squaredDistance + }else { + return minSquaredDistance + } +}; +ol.geom.Point.prototype.getCoordinates = function() { + return this.flatCoordinates.slice() +}; +ol.geom.Point.prototype.getExtent = function(opt_extent) { + if(this.extentRevision != this.getRevision()) { + this.extent = ol.extent.createOrUpdateFromCoordinate(this.flatCoordinates, this.extent); + this.extentRevision = this.getRevision() + } + goog.asserts.assert(goog.isDef(this.extent)); + return ol.extent.returnOrUpdate(this.extent, opt_extent) +}; +ol.geom.Point.prototype.getType = function() { + return ol.geom.GeometryType.POINT +}; +ol.geom.Point.prototype.setCoordinates = function(coordinates, opt_layout) { + if(goog.isNull(coordinates)) { + this.setFlatCoordinates(ol.geom.GeometryLayout.XY, null) + }else { + this.setLayout(opt_layout, coordinates, 0); + if(goog.isNull(this.flatCoordinates)) { + this.flatCoordinates = [] + } + this.flatCoordinates.length = ol.geom.flat.deflateCoordinate(this.flatCoordinates, 0, coordinates, this.stride); + this.dispatchChangeEvent() + } +}; +ol.geom.Point.prototype.setFlatCoordinates = function(layout, flatCoordinates) { + this.setFlatCoordinatesInternal(layout, flatCoordinates); + this.dispatchChangeEvent() +}; +goog.provide("ol.geom.Polygon"); +goog.require("ol.extent"); +goog.require("ol.geom.GeometryType"); +goog.require("ol.geom.LinearRing"); +goog.require("ol.geom.Point"); +goog.require("ol.geom.SimpleGeometry"); +goog.require("ol.geom.closest"); +goog.require("ol.geom.flat"); +goog.require("ol.geom.simplify"); +ol.geom.Polygon = function(coordinates, opt_layout) { + goog.base(this); + this.ends_ = []; + this.flatInteriorPointRevision_ = -1; + this.flatInteriorPoint_ = null; + this.maxDelta_ = -1; + this.maxDeltaRevision_ = -1; + this.orientedRevision_ = -1; + this.orientedFlatCoordinates_ = null; + this.setCoordinates(coordinates, opt_layout) +}; +goog.inherits(ol.geom.Polygon, ol.geom.SimpleGeometry); +ol.geom.Polygon.prototype.clone = function() { + var polygon = new ol.geom.Polygon(null); + polygon.setFlatCoordinates(this.layout, this.flatCoordinates.slice(), this.ends_.slice()); + return polygon +}; +ol.geom.Polygon.prototype.closestPointXY = function(x, y, closestPoint, minSquaredDistance) { + if(minSquaredDistance < ol.extent.closestSquaredDistanceXY(this.getExtent(), x, y)) { + return minSquaredDistance + } + if(this.maxDeltaRevision_ != this.getRevision()) { + this.maxDelta_ = Math.sqrt(ol.geom.closest.getsMaxSquaredDelta(this.flatCoordinates, 0, this.ends_, this.stride, 0)); + this.maxDeltaRevision_ = this.getRevision() + } + return ol.geom.closest.getsClosestPoint(this.flatCoordinates, 0, this.ends_, this.stride, this.maxDelta_, true, x, y, closestPoint, minSquaredDistance) +}; +ol.geom.Polygon.prototype.containsXY = function(x, y) { + return ol.geom.flat.linearRingsContainsXY(this.getOrientedFlatCoordinates(), 0, this.ends_, this.stride, x, y) +}; +ol.geom.Polygon.prototype.getArea = function() { + return ol.geom.flat.linearRingsArea(this.getOrientedFlatCoordinates(), 0, this.ends_, this.stride) +}; +ol.geom.Polygon.prototype.getCoordinates = function() { + return ol.geom.flat.inflateCoordinatess(this.flatCoordinates, 0, this.ends_, this.stride) +}; +ol.geom.Polygon.prototype.getEnds = function() { + return this.ends_ +}; +ol.geom.Polygon.prototype.getFlatInteriorPoint = function() { + if(this.flatInteriorPointRevision_ != this.getRevision()) { + var flatCenter = ol.extent.getCenter(this.getExtent()); + this.flatInteriorPoint_ = ol.geom.flat.linearRingsGetInteriorPoint(this.getOrientedFlatCoordinates(), 0, this.ends_, this.stride, flatCenter, 0); + this.flatInteriorPointRevision_ = this.getRevision() + } + return this.flatInteriorPoint_ +}; +ol.geom.Polygon.prototype.getInteriorPoint = function() { + return new ol.geom.Point(this.getFlatInteriorPoint()) +}; +ol.geom.Polygon.prototype.getLinearRings = function() { + var layout = this.layout; + var flatCoordinates = this.flatCoordinates; + var ends = this.ends_; + var linearRings = []; + var offset = 0; + var i, ii; + for(i = 0, ii = ends.length;i < ii;++i) { + var end = ends[i]; + var linearRing = new ol.geom.LinearRing(null); + linearRing.setFlatCoordinates(layout, flatCoordinates.slice(offset, end)); + linearRings.push(linearRing); + offset = end + } + return linearRings +}; +ol.geom.Polygon.prototype.getOrientedFlatCoordinates = function() { + if(this.orientedRevision_ != this.getRevision()) { + var flatCoordinates = this.flatCoordinates; + if(ol.geom.flat.linearRingsAreOriented(flatCoordinates, 0, this.ends_, this.stride)) { + this.orientedFlatCoordinates_ = flatCoordinates + }else { + this.orientedFlatCoordinates_ = flatCoordinates.slice(); + this.orientedFlatCoordinates_.length = ol.geom.flat.orientLinearRings(this.orientedFlatCoordinates_, 0, this.ends_, this.stride) + } + this.orientedRevision_ = this.getRevision() + } + return this.orientedFlatCoordinates_ +}; +ol.geom.Polygon.prototype.getSimplifiedGeometryInternal = function(squaredTolerance) { + var simplifiedFlatCoordinates = []; + var simplifiedEnds = []; + simplifiedFlatCoordinates.length = ol.geom.simplify.quantizes(this.flatCoordinates, 0, this.ends_, this.stride, Math.sqrt(squaredTolerance), simplifiedFlatCoordinates, 0, simplifiedEnds); + var simplifiedPolygon = new ol.geom.Polygon(null); + simplifiedPolygon.setFlatCoordinates(ol.geom.GeometryLayout.XY, simplifiedFlatCoordinates, simplifiedEnds); + return simplifiedPolygon +}; +ol.geom.Polygon.prototype.getType = function() { + return ol.geom.GeometryType.POLYGON +}; +ol.geom.Polygon.prototype.setCoordinates = function(coordinates, opt_layout) { + if(goog.isNull(coordinates)) { + this.setFlatCoordinates(ol.geom.GeometryLayout.XY, null, this.ends_) + }else { + this.setLayout(opt_layout, coordinates, 2); + if(goog.isNull(this.flatCoordinates)) { + this.flatCoordinates = [] + } + var ends = ol.geom.flat.deflateCoordinatess(this.flatCoordinates, 0, coordinates, this.stride, this.ends_); + this.flatCoordinates.length = ends.length === 0 ? 0 : ends[ends.length - 1]; + this.dispatchChangeEvent() + } +}; +ol.geom.Polygon.prototype.setFlatCoordinates = function(layout, flatCoordinates, ends) { + this.setFlatCoordinatesInternal(layout, flatCoordinates); + this.ends_ = ends; + this.dispatchChangeEvent() +}; +goog.provide("ol.render.IVectorContext"); +ol.render.IVectorContext = function() { +}; +ol.render.IVectorContext.prototype.drawAsync = function(zIndex, callback) { +}; +ol.render.IVectorContext.prototype.drawCircleGeometry = function(circleGeometry, data) { +}; +ol.render.IVectorContext.prototype.drawFeature = function(feature, style) { +}; +ol.render.IVectorContext.prototype.drawGeometryCollectionGeometry = function(geometryCollectionGeometry, data) { +}; +ol.render.IVectorContext.prototype.drawPointGeometry = function(pointGeometry, data) { +}; +ol.render.IVectorContext.prototype.drawLineStringGeometry = function(lineStringGeometry, data) { +}; +ol.render.IVectorContext.prototype.drawMultiLineStringGeometry = function(multiLineStringGeometry, data) { +}; +ol.render.IVectorContext.prototype.drawMultiPointGeometry = function(multiPointGeometry, data) { +}; +ol.render.IVectorContext.prototype.drawMultiPolygonGeometry = function(multiPolygonGeometry, data) { +}; +ol.render.IVectorContext.prototype.drawPolygonGeometry = function(polygonGeometry, data) { +}; +ol.render.IVectorContext.prototype.drawText = function(flatCoordinates, offset, end, stride, geometry, data) { +}; +ol.render.IVectorContext.prototype.setFillStrokeStyle = function(fillStyle, strokeStyle) { +}; +ol.render.IVectorContext.prototype.setImageStyle = function(imageStyle) { +}; +ol.render.IVectorContext.prototype.setTextStyle = function(textStyle) { +}; +goog.provide("ol.render.Event"); +goog.provide("ol.render.EventType"); +goog.require("goog.events.Event"); +goog.require("ol.render.IVectorContext"); +ol.render.EventType = {POSTCOMPOSE:"postcompose", PRECOMPOSE:"precompose", RENDER:"render"}; +ol.render.Event = function(type, opt_target, opt_vectorContext, opt_frameState, opt_context, opt_glContext) { + goog.base(this, type, opt_target); + this.vectorContext = opt_vectorContext; + this.frameState = opt_frameState; + this.context = opt_context; + this.glContext = opt_glContext +}; +goog.inherits(ol.render.Event, goog.events.Event); +goog.provide("ol.render.Box"); +goog.require("goog.Disposable"); +goog.require("goog.array"); +goog.require("goog.asserts"); +goog.require("goog.events"); +goog.require("ol.geom.Polygon"); +goog.require("ol.render.EventType"); +ol.render.Box = function(style) { + this.map_ = null; + this.postComposeListenerKey_ = null; + this.startPixel_ = null; + this.endPixel_ = null; + this.geometry_ = null; + this.style_ = style +}; +goog.inherits(ol.render.Box, goog.Disposable); +ol.render.Box.prototype.createGeometry_ = function() { + goog.asserts.assert(!goog.isNull(this.startPixel_)); + goog.asserts.assert(!goog.isNull(this.endPixel_)); + goog.asserts.assert(!goog.isNull(this.map_)); + var startPixel = this.startPixel_; + var endPixel = this.endPixel_; + var pixels = [startPixel, [startPixel[0], endPixel[1]], endPixel, [endPixel[0], startPixel[1]]]; + var coordinates = goog.array.map(pixels, this.map_.getCoordinateFromPixel, this.map_); + coordinates[4] = coordinates[0].slice(); + return new ol.geom.Polygon([coordinates]) +}; +ol.render.Box.prototype.disposeInternal = function() { + this.setMap(null) +}; +ol.render.Box.prototype.handleMapPostCompose_ = function(event) { + var geometry = this.geometry_; + goog.asserts.assert(!goog.isNull(geometry)); + var style = this.style_; + goog.asserts.assert(!goog.isNull(style)); + event.vectorContext.drawAsync(Infinity, function(render) { + render.setFillStrokeStyle(style.getFill(), style.getStroke()); + render.setTextStyle(style.getText()); + render.drawPolygonGeometry(geometry, null) + }) +}; +ol.render.Box.prototype.getGeometry = function() { + return this.geometry_ +}; +ol.render.Box.prototype.requestMapRenderFrame_ = function() { + if(!goog.isNull(this.map_) && !goog.isNull(this.startPixel_) && !goog.isNull(this.endPixel_)) { + this.map_.render() + } +}; +ol.render.Box.prototype.setMap = function(map) { + if(!goog.isNull(this.postComposeListenerKey_)) { + goog.events.unlistenByKey(this.postComposeListenerKey_); + this.postComposeListenerKey_ = null; + this.map_.render(); + this.map_ = null + } + this.map_ = map; + if(!goog.isNull(this.map_)) { + this.postComposeListenerKey_ = goog.events.listen(map, ol.render.EventType.POSTCOMPOSE, this.handleMapPostCompose_, false, this); + this.requestMapRenderFrame_() + } +}; +ol.render.Box.prototype.setPixels = function(startPixel, endPixel) { + this.startPixel_ = startPixel; + this.endPixel_ = endPixel; + this.geometry_ = this.createGeometry_(); + this.requestMapRenderFrame_() +}; +goog.provide("ol.DragBoxEvent"); +goog.provide("ol.interaction.DragBox"); +goog.require("goog.asserts"); +goog.require("goog.events.Event"); +goog.require("ol.events.ConditionType"); +goog.require("ol.events.condition"); +goog.require("ol.interaction.Drag"); +goog.require("ol.render.Box"); +ol.DRAG_BOX_HYSTERESIS_PIXELS = 8; +ol.DRAG_BOX_HYSTERESIS_PIXELS_SQUARED = ol.DRAG_BOX_HYSTERESIS_PIXELS * ol.DRAG_BOX_HYSTERESIS_PIXELS; +ol.DragBoxEventType = {BOXSTART:"boxstart", BOXEND:"boxend"}; +ol.DragBoxEvent = function(type, coordinate) { + goog.base(this, type); + this.coordinate = coordinate +}; +goog.inherits(ol.DragBoxEvent, goog.events.Event); +ol.interaction.DragBox = function(opt_options) { + goog.base(this); + var options = goog.isDef(opt_options) ? opt_options : {}; + var style = goog.isDef(options.style) ? options.style : null; + this.box_ = new ol.render.Box(style); + this.startPixel_ = null; + this.condition_ = goog.isDef(options.condition) ? options.condition : ol.events.condition.always +}; +goog.inherits(ol.interaction.DragBox, ol.interaction.Drag); +ol.interaction.DragBox.prototype.handleDrag = function(mapBrowserEvent) { + this.box_.setPixels(this.startPixel_, mapBrowserEvent.pixel) +}; +ol.interaction.DragBox.prototype.getGeometry = function() { + return this.box_.getGeometry() +}; +ol.interaction.DragBox.prototype.onBoxEnd = goog.nullFunction; +ol.interaction.DragBox.prototype.handleDragEnd = function(mapBrowserEvent) { + this.box_.setMap(null); + if(this.deltaX * this.deltaX + this.deltaY * this.deltaY >= ol.DRAG_BOX_HYSTERESIS_PIXELS_SQUARED) { + this.onBoxEnd(mapBrowserEvent); + this.dispatchEvent(new ol.DragBoxEvent(ol.DragBoxEventType.BOXEND, mapBrowserEvent.coordinate)) + } +}; +ol.interaction.DragBox.prototype.handleDragStart = function(mapBrowserEvent) { + var browserEvent = mapBrowserEvent.browserEvent; + if(browserEvent.isMouseActionButton() && this.condition_(mapBrowserEvent)) { + this.startPixel_ = mapBrowserEvent.pixel; + this.box_.setMap(mapBrowserEvent.map); + this.box_.setPixels(this.startPixel_, this.startPixel_); + this.dispatchEvent(new ol.DragBoxEvent(ol.DragBoxEventType.BOXSTART, mapBrowserEvent.coordinate)); + return true + }else { + return false + } +}; +goog.provide("goog.color.names"); +goog.color.names = {"aliceblue":"#f0f8ff", "antiquewhite":"#faebd7", "aqua":"#00ffff", "aquamarine":"#7fffd4", "azure":"#f0ffff", "beige":"#f5f5dc", "bisque":"#ffe4c4", "black":"#000000", "blanchedalmond":"#ffebcd", "blue":"#0000ff", "blueviolet":"#8a2be2", "brown":"#a52a2a", "burlywood":"#deb887", "cadetblue":"#5f9ea0", "chartreuse":"#7fff00", "chocolate":"#d2691e", "coral":"#ff7f50", "cornflowerblue":"#6495ed", "cornsilk":"#fff8dc", "crimson":"#dc143c", "cyan":"#00ffff", "darkblue":"#00008b", "darkcyan":"#008b8b", +"darkgoldenrod":"#b8860b", "darkgray":"#a9a9a9", "darkgreen":"#006400", "darkgrey":"#a9a9a9", "darkkhaki":"#bdb76b", "darkmagenta":"#8b008b", "darkolivegreen":"#556b2f", "darkorange":"#ff8c00", "darkorchid":"#9932cc", "darkred":"#8b0000", "darksalmon":"#e9967a", "darkseagreen":"#8fbc8f", "darkslateblue":"#483d8b", "darkslategray":"#2f4f4f", "darkslategrey":"#2f4f4f", "darkturquoise":"#00ced1", "darkviolet":"#9400d3", "deeppink":"#ff1493", "deepskyblue":"#00bfff", "dimgray":"#696969", "dimgrey":"#696969", +"dodgerblue":"#1e90ff", "firebrick":"#b22222", "floralwhite":"#fffaf0", "forestgreen":"#228b22", "fuchsia":"#ff00ff", "gainsboro":"#dcdcdc", "ghostwhite":"#f8f8ff", "gold":"#ffd700", "goldenrod":"#daa520", "gray":"#808080", "green":"#008000", "greenyellow":"#adff2f", "grey":"#808080", "honeydew":"#f0fff0", "hotpink":"#ff69b4", "indianred":"#cd5c5c", "indigo":"#4b0082", "ivory":"#fffff0", "khaki":"#f0e68c", "lavender":"#e6e6fa", "lavenderblush":"#fff0f5", "lawngreen":"#7cfc00", "lemonchiffon":"#fffacd", +"lightblue":"#add8e6", "lightcoral":"#f08080", "lightcyan":"#e0ffff", "lightgoldenrodyellow":"#fafad2", "lightgray":"#d3d3d3", "lightgreen":"#90ee90", "lightgrey":"#d3d3d3", "lightpink":"#ffb6c1", "lightsalmon":"#ffa07a", "lightseagreen":"#20b2aa", "lightskyblue":"#87cefa", "lightslategray":"#778899", "lightslategrey":"#778899", "lightsteelblue":"#b0c4de", "lightyellow":"#ffffe0", "lime":"#00ff00", "limegreen":"#32cd32", "linen":"#faf0e6", "magenta":"#ff00ff", "maroon":"#800000", "mediumaquamarine":"#66cdaa", +"mediumblue":"#0000cd", "mediumorchid":"#ba55d3", "mediumpurple":"#9370db", "mediumseagreen":"#3cb371", "mediumslateblue":"#7b68ee", "mediumspringgreen":"#00fa9a", "mediumturquoise":"#48d1cc", "mediumvioletred":"#c71585", "midnightblue":"#191970", "mintcream":"#f5fffa", "mistyrose":"#ffe4e1", "moccasin":"#ffe4b5", "navajowhite":"#ffdead", "navy":"#000080", "oldlace":"#fdf5e6", "olive":"#808000", "olivedrab":"#6b8e23", "orange":"#ffa500", "orangered":"#ff4500", "orchid":"#da70d6", "palegoldenrod":"#eee8aa", +"palegreen":"#98fb98", "paleturquoise":"#afeeee", "palevioletred":"#db7093", "papayawhip":"#ffefd5", "peachpuff":"#ffdab9", "peru":"#cd853f", "pink":"#ffc0cb", "plum":"#dda0dd", "powderblue":"#b0e0e6", "purple":"#800080", "red":"#ff0000", "rosybrown":"#bc8f8f", "royalblue":"#4169e1", "saddlebrown":"#8b4513", "salmon":"#fa8072", "sandybrown":"#f4a460", "seagreen":"#2e8b57", "seashell":"#fff5ee", "sienna":"#a0522d", "silver":"#c0c0c0", "skyblue":"#87ceeb", "slateblue":"#6a5acd", "slategray":"#708090", +"slategrey":"#708090", "snow":"#fffafa", "springgreen":"#00ff7f", "steelblue":"#4682b4", "tan":"#d2b48c", "teal":"#008080", "thistle":"#d8bfd8", "tomato":"#ff6347", "turquoise":"#40e0d0", "violet":"#ee82ee", "wheat":"#f5deb3", "white":"#ffffff", "whitesmoke":"#f5f5f5", "yellow":"#ffff00", "yellowgreen":"#9acd32"}; +goog.provide("goog.color"); +goog.require("goog.color.names"); +goog.require("goog.math"); +goog.color.Rgb; +goog.color.Hsv; +goog.color.Hsl; +goog.color.parse = function(str) { + var result = {}; + str = String(str); + var maybeHex = goog.color.prependHashIfNecessaryHelper(str); + if(goog.color.isValidHexColor_(maybeHex)) { + result.hex = goog.color.normalizeHex(maybeHex); + result.type = "hex"; + return result + }else { + var rgb = goog.color.isValidRgbColor_(str); + if(rgb.length) { + result.hex = goog.color.rgbArrayToHex(rgb); + result.type = "rgb"; + return result + }else { + if(goog.color.names) { + var hex = goog.color.names[str.toLowerCase()]; + if(hex) { + result.hex = hex; + result.type = "named"; + return result + } + } + } + } + throw Error(str + " is not a valid color string"); +}; +goog.color.isValidColor = function(str) { + var maybeHex = goog.color.prependHashIfNecessaryHelper(str); + return!!(goog.color.isValidHexColor_(maybeHex) || goog.color.isValidRgbColor_(str).length || goog.color.names && goog.color.names[str.toLowerCase()]) +}; +goog.color.parseRgb = function(str) { + var rgb = goog.color.isValidRgbColor_(str); + if(!rgb.length) { + throw Error(str + " is not a valid RGB color"); + } + return rgb +}; +goog.color.hexToRgbStyle = function(hexColor) { + return goog.color.rgbStyle_(goog.color.hexToRgb(hexColor)) +}; +goog.color.hexTripletRe_ = /#(.)(.)(.)/; +goog.color.normalizeHex = function(hexColor) { + if(!goog.color.isValidHexColor_(hexColor)) { + throw Error("'" + hexColor + "' is not a valid hex color"); + } + if(hexColor.length == 4) { + hexColor = hexColor.replace(goog.color.hexTripletRe_, "#$1$1$2$2$3$3") + } + return hexColor.toLowerCase() +}; +goog.color.hexToRgb = function(hexColor) { + hexColor = goog.color.normalizeHex(hexColor); + var r = parseInt(hexColor.substr(1, 2), 16); + var g = parseInt(hexColor.substr(3, 2), 16); + var b = parseInt(hexColor.substr(5, 2), 16); + return[r, g, b] +}; +goog.color.rgbToHex = function(r, g, b) { + r = Number(r); + g = Number(g); + b = Number(b); + if(isNaN(r) || r < 0 || r > 255 || isNaN(g) || g < 0 || g > 255 || isNaN(b) || b < 0 || b > 255) { + throw Error('"(' + r + "," + g + "," + b + '") is not a valid RGB color'); + } + var hexR = goog.color.prependZeroIfNecessaryHelper(r.toString(16)); + var hexG = goog.color.prependZeroIfNecessaryHelper(g.toString(16)); + var hexB = goog.color.prependZeroIfNecessaryHelper(b.toString(16)); + return"#" + hexR + hexG + hexB +}; +goog.color.rgbArrayToHex = function(rgb) { + return goog.color.rgbToHex(rgb[0], rgb[1], rgb[2]) +}; +goog.color.rgbToHsl = function(r, g, b) { + var normR = r / 255; + var normG = g / 255; + var normB = b / 255; + var max = Math.max(normR, normG, normB); + var min = Math.min(normR, normG, normB); + var h = 0; + var s = 0; + var l = 0.5 * (max + min); + if(max != min) { + if(max == normR) { + h = 60 * (normG - normB) / (max - min) + }else { + if(max == normG) { + h = 60 * (normB - normR) / (max - min) + 120 + }else { + if(max == normB) { + h = 60 * (normR - normG) / (max - min) + 240 + } + } + } + if(0 < l && l <= 0.5) { + s = (max - min) / (2 * l) + }else { + s = (max - min) / (2 - 2 * l) + } + } + return[Math.round(h + 360) % 360, s, l] +}; +goog.color.rgbArrayToHsl = function(rgb) { + return goog.color.rgbToHsl(rgb[0], rgb[1], rgb[2]) +}; +goog.color.hueToRgb_ = function(v1, v2, vH) { + if(vH < 0) { + vH += 1 + }else { + if(vH > 1) { + vH -= 1 + } + } + if(6 * vH < 1) { + return v1 + (v2 - v1) * 6 * vH + }else { + if(2 * vH < 1) { + return v2 + }else { + if(3 * vH < 2) { + return v1 + (v2 - v1) * (2 / 3 - vH) * 6 + } + } + } + return v1 +}; +goog.color.hslToRgb = function(h, s, l) { + var r = 0; + var g = 0; + var b = 0; + var normH = h / 360; + if(s == 0) { + r = g = b = l * 255 + }else { + var temp1 = 0; + var temp2 = 0; + if(l < 0.5) { + temp2 = l * (1 + s) + }else { + temp2 = l + s - s * l + } + temp1 = 2 * l - temp2; + r = 255 * goog.color.hueToRgb_(temp1, temp2, normH + 1 / 3); + g = 255 * goog.color.hueToRgb_(temp1, temp2, normH); + b = 255 * goog.color.hueToRgb_(temp1, temp2, normH - 1 / 3) + } + return[Math.round(r), Math.round(g), Math.round(b)] +}; +goog.color.hslArrayToRgb = function(hsl) { + return goog.color.hslToRgb(hsl[0], hsl[1], hsl[2]) +}; +goog.color.validHexColorRe_ = /^#(?:[0-9a-f]{3}){1,2}$/i; +goog.color.isValidHexColor_ = function(str) { + return goog.color.validHexColorRe_.test(str) +}; +goog.color.normalizedHexColorRe_ = /^#[0-9a-f]{6}$/; +goog.color.isNormalizedHexColor_ = function(str) { + return goog.color.normalizedHexColorRe_.test(str) +}; +goog.color.rgbColorRe_ = /^(?:rgb)?\((0|[1-9]\d{0,2}),\s?(0|[1-9]\d{0,2}),\s?(0|[1-9]\d{0,2})\)$/i; +goog.color.isValidRgbColor_ = function(str) { + var regExpResultArray = str.match(goog.color.rgbColorRe_); + if(regExpResultArray) { + var r = Number(regExpResultArray[1]); + var g = Number(regExpResultArray[2]); + var b = Number(regExpResultArray[3]); + if(r >= 0 && r <= 255 && g >= 0 && g <= 255 && b >= 0 && b <= 255) { + return[r, g, b] + } + } + return[] +}; +goog.color.prependZeroIfNecessaryHelper = function(hex) { + return hex.length == 1 ? "0" + hex : hex +}; +goog.color.prependHashIfNecessaryHelper = function(str) { + return str.charAt(0) == "#" ? str : "#" + str +}; +goog.color.rgbStyle_ = function(rgb) { + return"rgb(" + rgb.join(",") + ")" +}; +goog.color.hsvToRgb = function(h, s, brightness) { + var red = 0; + var green = 0; + var blue = 0; + if(s == 0) { + red = brightness; + green = brightness; + blue = brightness + }else { + var sextant = Math.floor(h / 60); + var remainder = h / 60 - sextant; + var val1 = brightness * (1 - s); + var val2 = brightness * (1 - s * remainder); + var val3 = brightness * (1 - s * (1 - remainder)); + switch(sextant) { + case 1: + red = val2; + green = brightness; + blue = val1; + break; + case 2: + red = val1; + green = brightness; + blue = val3; + break; + case 3: + red = val1; + green = val2; + blue = brightness; + break; + case 4: + red = val3; + green = val1; + blue = brightness; + break; + case 5: + red = brightness; + green = val1; + blue = val2; + break; + case 6: + ; + case 0: + red = brightness; + green = val3; + blue = val1; + break + } + } + return[Math.floor(red), Math.floor(green), Math.floor(blue)] +}; +goog.color.rgbToHsv = function(red, green, blue) { + var max = Math.max(Math.max(red, green), blue); + var min = Math.min(Math.min(red, green), blue); + var hue; + var saturation; + var value = max; + if(min == max) { + hue = 0; + saturation = 0 + }else { + var delta = max - min; + saturation = delta / max; + if(red == max) { + hue = (green - blue) / delta + }else { + if(green == max) { + hue = 2 + (blue - red) / delta + }else { + hue = 4 + (red - green) / delta + } + } + hue *= 60; + if(hue < 0) { + hue += 360 + } + if(hue > 360) { + hue -= 360 + } + } + return[hue, saturation, value] +}; +goog.color.rgbArrayToHsv = function(rgb) { + return goog.color.rgbToHsv(rgb[0], rgb[1], rgb[2]) +}; +goog.color.hsvArrayToRgb = function(hsv) { + return goog.color.hsvToRgb(hsv[0], hsv[1], hsv[2]) +}; +goog.color.hexToHsl = function(hex) { + var rgb = goog.color.hexToRgb(hex); + return goog.color.rgbToHsl(rgb[0], rgb[1], rgb[2]) +}; +goog.color.hslToHex = function(h, s, l) { + return goog.color.rgbArrayToHex(goog.color.hslToRgb(h, s, l)) +}; +goog.color.hslArrayToHex = function(hsl) { + return goog.color.rgbArrayToHex(goog.color.hslToRgb(hsl[0], hsl[1], hsl[2])) +}; +goog.color.hexToHsv = function(hex) { + return goog.color.rgbArrayToHsv(goog.color.hexToRgb(hex)) +}; +goog.color.hsvToHex = function(h, s, v) { + return goog.color.rgbArrayToHex(goog.color.hsvToRgb(h, s, v)) +}; +goog.color.hsvArrayToHex = function(hsv) { + return goog.color.hsvToHex(hsv[0], hsv[1], hsv[2]) +}; +goog.color.hslDistance = function(hsl1, hsl2) { + var sl1, sl2; + if(hsl1[2] <= 0.5) { + sl1 = hsl1[1] * hsl1[2] + }else { + sl1 = hsl1[1] * (1 - hsl1[2]) + } + if(hsl2[2] <= 0.5) { + sl2 = hsl2[1] * hsl2[2] + }else { + sl2 = hsl2[1] * (1 - hsl2[2]) + } + var h1 = hsl1[0] / 360; + var h2 = hsl2[0] / 360; + var dh = (h1 - h2) * 2 * Math.PI; + return(hsl1[2] - hsl2[2]) * (hsl1[2] - hsl2[2]) + sl1 * sl1 + sl2 * sl2 - 2 * sl1 * sl2 * Math.cos(dh) +}; +goog.color.blend = function(rgb1, rgb2, factor) { + factor = goog.math.clamp(factor, 0, 1); + return[Math.round(factor * rgb1[0] + (1 - factor) * rgb2[0]), Math.round(factor * rgb1[1] + (1 - factor) * rgb2[1]), Math.round(factor * rgb1[2] + (1 - factor) * rgb2[2])] +}; +goog.color.darken = function(rgb, factor) { + var black = [0, 0, 0]; + return goog.color.blend(black, rgb, factor) +}; +goog.color.lighten = function(rgb, factor) { + var white = [255, 255, 255]; + return goog.color.blend(white, rgb, factor) +}; +goog.color.highContrast = function(prime, suggestions) { + var suggestionsWithDiff = []; + for(var i = 0;i < suggestions.length;i++) { + suggestionsWithDiff.push({color:suggestions[i], diff:goog.color.yiqBrightnessDiff_(suggestions[i], prime) + goog.color.colorDiff_(suggestions[i], prime)}) + } + suggestionsWithDiff.sort(function(a, b) { + return b.diff - a.diff + }); + return suggestionsWithDiff[0].color +}; +goog.color.yiqBrightness_ = function(rgb) { + return Math.round((rgb[0] * 299 + rgb[1] * 587 + rgb[2] * 114) / 1E3) +}; +goog.color.yiqBrightnessDiff_ = function(rgb1, rgb2) { + return Math.abs(goog.color.yiqBrightness_(rgb1) - goog.color.yiqBrightness_(rgb2)) +}; +goog.color.colorDiff_ = function(rgb1, rgb2) { + return Math.abs(rgb1[0] - rgb2[0]) + Math.abs(rgb1[1] - rgb2[1]) + Math.abs(rgb1[2] - rgb2[2]) +}; +goog.provide("ol.color"); +goog.require("goog.array"); +goog.require("goog.asserts"); +goog.require("goog.color"); +goog.require("goog.color.names"); +goog.require("goog.math"); +goog.require("goog.vec.Mat4"); +ol.color.ENABLE_NAMED_COLORS = true; +ol.Color; +ol.color.hexColorRe_ = /^#(?:[0-9a-f]{3}){1,2}$/i; +ol.color.rgbColorRe_ = /^(?:rgb)?\((0|[1-9]\d{0,2}),\s?(0|[1-9]\d{0,2}),\s?(0|[1-9]\d{0,2})\)$/i; +ol.color.rgbaColorRe_ = /^(?:rgba)?\((0|[1-9]\d{0,2}),\s?(0|[1-9]\d{0,2}),\s?(0|[1-9]\d{0,2}),\s?(0|1|0\.\d{0,10})\)$/i; +ol.color.blend = function(dst, src, opt_color) { + var out = goog.isDef(opt_color) ? opt_color : []; + var dstA = dst[3]; + var srcA = dst[3]; + if(dstA == 1) { + out[0] = src[0] * srcA + dst[0] * (1 - srcA) + 0.5 | 0; + out[1] = src[1] * srcA + dst[1] * (1 - srcA) + 0.5 | 0; + out[2] = src[2] * srcA + dst[2] * (1 - srcA) + 0.5 | 0; + out[4] = 1 + }else { + if(srcA === 0) { + out[0] = dst[0]; + out[1] = dst[1]; + out[2] = dst[2]; + out[3] = dstA + }else { + var outA = srcA + dstA * (1 - srcA); + if(outA === 0) { + out[0] = 0; + out[1] = 0; + out[2] = 0; + out[3] = 0 + }else { + out[0] = (src[0] * srcA + dst[0] * dstA * (1 - srcA)) / outA + 0.5 | 0; + out[1] = (src[1] * srcA + dst[1] * dstA * (1 - srcA)) / outA + 0.5 | 0; + out[2] = (src[2] * srcA + dst[2] * dstA * (1 - srcA)) / outA + 0.5 | 0; + out[3] = outA + } + } + } + goog.asserts.assert(ol.color.isValid(out)); + return out +}; +ol.color.asArray = function(color) { + if(goog.isArray(color)) { + return color + }else { + goog.asserts.assert(goog.isString(color)); + return ol.color.fromString(color) + } +}; +ol.color.asString = function(color) { + if(goog.isString(color)) { + return color + }else { + goog.asserts.assert(goog.isArray(color)); + return ol.color.toString(color) + } +}; +ol.color.equals = function(color1, color2) { + return color1 === color2 || color1[0] == color2[0] && color1[1] == color2[1] && color1[2] == color2[2] && color1[3] == color2[3] +}; +ol.color.fromString = function() { + var MAX_CACHE_SIZE = 1024; + var cache = {}; + var cacheSize = 0; + return function(s, opt_color) { + var color; + if(cache.hasOwnProperty(s)) { + color = cache[s] + }else { + if(cacheSize >= MAX_CACHE_SIZE) { + var i = 0; + var key; + for(key in cache) { + if((i++ & 3) === 0) { + delete cache[key]; + --cacheSize + } + } + } + color = ol.color.fromStringInternal_(s); + cache[s] = color; + ++cacheSize + } + return ol.color.returnOrUpdate(color, opt_color) + } +}(); +ol.color.fromStringInternal_ = function(s) { + var isHex = false; + if(ol.color.ENABLE_NAMED_COLORS && goog.color.names.hasOwnProperty(s)) { + s = (goog.color.names[s]); + isHex = true + } + var r, g, b, a, color, match; + if(isHex || (match = ol.color.hexColorRe_.exec(s))) { + var n = s.length - 1; + goog.asserts.assert(n == 3 || n == 6); + var d = n == 3 ? 1 : 2; + r = parseInt(s.substr(1 + 0 * d, d), 16); + g = parseInt(s.substr(1 + 1 * d, d), 16); + b = parseInt(s.substr(1 + 2 * d, d), 16); + if(d == 1) { + r = (r << 4) + r; + g = (g << 4) + g; + b = (b << 4) + b + } + a = 1; + color = [r, g, b, a]; + goog.asserts.assert(ol.color.isValid(color)); + return color + }else { + if(match = ol.color.rgbaColorRe_.exec(s)) { + r = Number(match[1]); + g = Number(match[2]); + b = Number(match[3]); + a = Number(match[4]); + color = [r, g, b, a]; + return ol.color.normalize(color, color) + }else { + if(match = ol.color.rgbColorRe_.exec(s)) { + r = Number(match[1]); + g = Number(match[2]); + b = Number(match[3]); + color = [r, g, b, 1]; + return ol.color.normalize(color, color) + }else { + throw new Error(s + " is not a valid color"); + } + } + } +}; +ol.color.isValid = function(color) { + return 0 <= color[0] && color[0] < 256 && 0 <= color[1] && color[1] < 256 && 0 <= color[2] && color[2] < 256 && 0 <= color[3] && color[3] <= 1 +}; +ol.color.normalize = function(color, opt_color) { + var result = goog.isDef(opt_color) ? opt_color : []; + result[0] = goog.math.clamp(color[0] + 0.5 | 0, 0, 255); + result[1] = goog.math.clamp(color[1] + 0.5 | 0, 0, 255); + result[2] = goog.math.clamp(color[2] + 0.5 | 0, 0, 255); + result[3] = goog.math.clamp(color[3], 0, 1); + return result +}; +ol.color.returnOrUpdate = function(color, opt_color) { + if(goog.isDef(opt_color)) { + opt_color[0] = color[0]; + opt_color[1] = color[1]; + opt_color[2] = color[2]; + opt_color[3] = color[3]; + return opt_color + }else { + return color + } +}; +ol.color.toString = function(color) { + var r = color[0]; + if(r != (r | 0)) { + r = r + 0.5 | 0 + } + var g = color[1]; + if(g != (g | 0)) { + g = g + 0.5 | 0 + } + var b = color[2]; + if(b != (b | 0)) { + b = b + 0.5 | 0 + } + var a = color[3]; + return"rgba(" + r + "," + g + "," + b + "," + a + ")" +}; +ol.color.transform = function(color, transform, opt_color) { + var result = goog.isDef(opt_color) ? opt_color : []; + result = goog.vec.Mat4.multVec3(transform, color, result); + goog.asserts.assert(goog.isArray(result)); + result[3] = color[3]; + return ol.color.normalize(result, result) +}; +ol.color.stringOrColorEquals = function(color1, color2) { + if(color1 === color2 || color1 == color2) { + return true + } + if(goog.isString(color1)) { + color1 = ol.color.fromString(color1) + } + if(goog.isString(color2)) { + color2 = ol.color.fromString(color2) + } + return ol.color.equals(color1, color2) +}; +goog.provide("ol.render.canvas"); +goog.require("ol.color"); +ol.render.canvas.FillState; +ol.render.canvas.StrokeState; +ol.render.canvas.TextState; +ol.render.canvas.defaultFont = "10px sans-serif"; +ol.render.canvas.defaultFillStyle = ol.color.fromString("black"); +ol.render.canvas.defaultLineCap = "round"; +ol.render.canvas.defaultLineDash = []; +ol.render.canvas.defaultLineJoin = "round"; +ol.render.canvas.defaultMiterLimit = 10; +ol.render.canvas.defaultStrokeStyle = [0, 0, 0, 1]; +ol.render.canvas.defaultTextAlign = "center"; +ol.render.canvas.defaultTextBaseline = "middle"; +ol.render.canvas.defaultLineWidth = 1; +goog.provide("ol.style.Fill"); +goog.require("ol.color"); +ol.style.Fill = function(opt_options) { + var options = goog.isDef(opt_options) ? opt_options : {}; + this.color_ = goog.isDef(options.color) ? options.color : null +}; +ol.style.Fill.prototype.getColor = function() { + return this.color_ +}; +goog.provide("ol.style.Image"); +goog.provide("ol.style.ImageState"); +goog.require("goog.array"); +ol.style.ImageState = {IDLE:0, LOADING:1, LOADED:2, ERROR:3}; +ol.style.ImageOptions; +ol.style.Image = function(options) { + this.opacity_ = options.opacity; + this.rotateWithView_ = options.rotateWithView; + this.rotation_ = options.rotation; + this.scale_ = options.scale; + this.snapToPixel_ = options.snapToPixel +}; +ol.style.Image.prototype.getOpacity = function() { + return this.opacity_ +}; +ol.style.Image.prototype.getRotateWithView = function() { + return this.rotateWithView_ +}; +ol.style.Image.prototype.getRotation = function() { + return this.rotation_ +}; +ol.style.Image.prototype.getScale = function() { + return this.scale_ +}; +ol.style.Image.prototype.getSnapToPixel = function() { + return this.snapToPixel_ +}; +ol.style.Image.prototype.getAnchor = goog.abstractMethod; +ol.style.Image.prototype.getImage = goog.abstractMethod; +ol.style.Image.prototype.getImageState = goog.abstractMethod; +ol.style.Image.prototype.getHitDetectionImage = goog.abstractMethod; +ol.style.Image.prototype.getSize = goog.abstractMethod; +ol.style.Image.prototype.listenImageChange = goog.abstractMethod; +ol.style.Image.prototype.load = goog.abstractMethod; +ol.style.Image.prototype.unlistenImageChange = goog.abstractMethod; +goog.provide("ol.style.Stroke"); +goog.require("ol.color"); +ol.style.Stroke = function(opt_options) { + var options = goog.isDef(opt_options) ? opt_options : {}; + this.color_ = goog.isDef(options.color) ? options.color : null; + this.lineCap_ = options.lineCap; + this.lineDash_ = goog.isDef(options.lineDash) ? options.lineDash : null; + this.lineJoin_ = options.lineJoin; + this.miterLimit_ = options.miterLimit; + this.width_ = options.width +}; +ol.style.Stroke.prototype.getColor = function() { + return this.color_ +}; +ol.style.Stroke.prototype.getLineCap = function() { + return this.lineCap_ +}; +ol.style.Stroke.prototype.getLineDash = function() { + return this.lineDash_ +}; +ol.style.Stroke.prototype.getLineJoin = function() { + return this.lineJoin_ +}; +ol.style.Stroke.prototype.getMiterLimit = function() { + return this.miterLimit_ +}; +ol.style.Stroke.prototype.getWidth = function() { + return this.width_ +}; +goog.provide("ol.style.Circle"); +goog.require("goog.dom"); +goog.require("goog.dom.TagName"); +goog.require("ol.color"); +goog.require("ol.render.canvas"); +goog.require("ol.style.Fill"); +goog.require("ol.style.Image"); +goog.require("ol.style.ImageState"); +goog.require("ol.style.Stroke"); +ol.style.Circle = function(opt_options) { + var options = goog.isDef(opt_options) ? opt_options : {}; + this.canvas_ = (goog.dom.createElement(goog.dom.TagName.CANVAS)); + this.hitDetectionCanvas_ = null; + this.fill_ = goog.isDef(options.fill) ? options.fill : null; + this.radius_ = options.radius; + this.stroke_ = goog.isDef(options.stroke) ? options.stroke : null; + var size = this.render_(); + this.anchor_ = [size / 2, size / 2]; + this.size_ = [size, size]; + goog.base(this, {opacity:1, rotateWithView:false, rotation:0, scale:1, snapToPixel:undefined}) +}; +goog.inherits(ol.style.Circle, ol.style.Image); +ol.style.Circle.prototype.getAnchor = function() { + return this.anchor_ +}; +ol.style.Circle.prototype.getFill = function() { + return this.fill_ +}; +ol.style.Circle.prototype.getHitDetectionImage = function(pixelRatio) { + return this.hitDetectionCanvas_ +}; +ol.style.Circle.prototype.getImage = function(pixelRatio) { + return this.canvas_ +}; +ol.style.Circle.prototype.getImageState = function() { + return ol.style.ImageState.LOADED +}; +ol.style.Circle.prototype.getRadius = function() { + return this.radius_ +}; +ol.style.Circle.prototype.getSize = function() { + return this.size_ +}; +ol.style.Circle.prototype.getStroke = function() { + return this.stroke_ +}; +ol.style.Circle.prototype.listenImageChange = goog.nullFunction; +ol.style.Circle.prototype.load = goog.nullFunction; +ol.style.Circle.prototype.unlistenImageChange = goog.nullFunction; +ol.style.Circle.prototype.render_ = function() { + var canvas = this.canvas_; + var strokeStyle, strokeWidth; + if(goog.isNull(this.stroke_)) { + strokeWidth = 0 + }else { + strokeStyle = ol.color.asString(this.stroke_.getColor()); + strokeWidth = this.stroke_.getWidth(); + if(!goog.isDef(strokeWidth)) { + strokeWidth = ol.render.canvas.defaultLineWidth + } + } + var size = 2 * (this.radius_ + strokeWidth) + 1; + canvas.height = size; + canvas.width = size; + var context = (canvas.getContext("2d")); + context.arc(size / 2, size / 2, this.radius_, 0, 2 * Math.PI, true); + if(!goog.isNull(this.fill_)) { + context.fillStyle = ol.color.asString(this.fill_.getColor()); + context.fill() + } + if(!goog.isNull(this.stroke_)) { + context.strokeStyle = strokeStyle; + context.lineWidth = strokeWidth; + context.stroke() + } + if(!goog.isNull(this.fill_)) { + this.hitDetectionCanvas_ = canvas + }else { + this.hitDetectionCanvas_ = (goog.dom.createElement(goog.dom.TagName.CANVAS)); + canvas = this.hitDetectionCanvas_; + canvas.height = size; + canvas.width = size; + context = (canvas.getContext("2d")); + context.arc(size / 2, size / 2, this.radius_, 0, 2 * Math.PI, true); + context.fillStyle = ol.render.canvas.defaultFillStyle; + context.fill(); + if(!goog.isNull(this.stroke_)) { + context.strokeStyle = strokeStyle; + context.lineWidth = strokeWidth; + context.stroke() + } + } + return size +}; +goog.provide("ol.style.Style"); +goog.require("ol.style.Fill"); +goog.require("ol.style.Image"); +ol.style.Style = function(opt_options) { + var options = goog.isDef(opt_options) ? opt_options : {}; + this.fill_ = goog.isDef(options.fill) ? options.fill : null; + this.image_ = goog.isDef(options.image) ? options.image : null; + this.stroke_ = goog.isDef(options.stroke) ? options.stroke : null; + this.text_ = goog.isDef(options.text) ? options.text : null; + this.zIndex_ = options.zIndex +}; +ol.style.Style.prototype.getFill = function() { + return this.fill_ +}; +ol.style.Style.prototype.getImage = function() { + return this.image_ +}; +ol.style.Style.prototype.getStroke = function() { + return this.stroke_ +}; +ol.style.Style.prototype.getText = function() { + return this.text_ +}; +ol.style.Style.prototype.getZIndex = function() { + return this.zIndex_ +}; +goog.provide("ol.Feature"); +goog.provide("ol.feature"); +goog.require("goog.asserts"); +goog.require("goog.events"); +goog.require("goog.events.EventType"); +goog.require("goog.functions"); +goog.require("ol.Object"); +goog.require("ol.geom.Geometry"); +goog.require("ol.style.Circle"); +goog.require("ol.style.Fill"); +goog.require("ol.style.Stroke"); +goog.require("ol.style.Style"); +ol.Feature = function(opt_geometryOrValues) { + goog.base(this); + this.id_ = undefined; + this.geometryName_ = "geometry"; + this.style_ = null; + this.styleFunction_ = undefined; + this.geometryChangeKey_ = null; + goog.events.listen(this, ol.Object.getChangeEventType(this.geometryName_), this.handleGeometryChanged_, false, this); + if(goog.isDefAndNotNull(opt_geometryOrValues)) { + if(opt_geometryOrValues instanceof ol.geom.Geometry) { + var geometry = (opt_geometryOrValues); + this.setGeometry(geometry) + }else { + goog.asserts.assert(goog.isObject(opt_geometryOrValues)); + var values = (opt_geometryOrValues); + this.setValues(values) + } + }else { + this.setGeometry(null) + } +}; +goog.inherits(ol.Feature, ol.Object); +ol.Feature.prototype.getGeometry = function() { + return(this.get(this.geometryName_)) +}; +goog.exportProperty(ol.Feature.prototype, "getGeometry", ol.Feature.prototype.getGeometry); +ol.Feature.prototype.getId = function() { + return this.id_ +}; +ol.Feature.prototype.getGeometryName = function() { + return this.geometryName_ +}; +ol.Feature.prototype.getStyle = function() { + return this.style_ +}; +ol.Feature.prototype.getStyleFunction = function() { + return this.styleFunction_ +}; +ol.Feature.prototype.handleGeometryChange_ = function() { + this.dispatchChangeEvent() +}; +ol.Feature.prototype.handleGeometryChanged_ = function() { + if(!goog.isNull(this.geometryChangeKey_)) { + goog.events.unlistenByKey(this.geometryChangeKey_); + this.geometryChangeKey_ = null + } + var geometry = this.getGeometry(); + if(goog.isDefAndNotNull(geometry)) { + this.geometryChangeKey_ = goog.events.listen(geometry, goog.events.EventType.CHANGE, this.handleGeometryChange_, false, this) + } + this.dispatchChangeEvent() +}; +ol.Feature.prototype.setGeometry = function(geometry) { + this.set(this.geometryName_, geometry) +}; +goog.exportProperty(ol.Feature.prototype, "setGeometry", ol.Feature.prototype.setGeometry); +ol.Feature.prototype.setStyle = function(style) { + this.style_ = style; + this.styleFunction_ = ol.feature.createFeatureStyleFunction(style); + this.dispatchChangeEvent() +}; +ol.Feature.prototype.setId = function(id) { + this.id_ = id +}; +ol.Feature.prototype.setGeometryName = function(name) { + goog.events.unlisten(this, ol.Object.getChangeEventType(this.geometryName_), this.handleGeometryChanged_, false, this); + this.geometryName_ = name; + goog.events.listen(this, ol.Object.getChangeEventType(this.geometryName_), this.handleGeometryChanged_, false, this); + this.handleGeometryChanged_() +}; +ol.feature.FeatureStyleFunction; +ol.feature.defaultFeatureStyleFunction = function() { + var fill = new ol.style.Fill({color:"rgba(255,255,255,0.4)"}); + var stroke = new ol.style.Stroke({color:"#3399CC", width:1.25}); + var styles = [new ol.style.Style({image:new ol.style.Circle({fill:fill, stroke:stroke, radius:5}), fill:fill, stroke:stroke})]; + return function(resolution) { + return styles + } +}(); +ol.feature.StyleFunction; +ol.feature.defaultStyleFunction = function(feature, resolution) { + var featureStyleFunction = feature.getStyleFunction(); + if(!goog.isDef(featureStyleFunction)) { + featureStyleFunction = ol.feature.defaultFeatureStyleFunction + } + return featureStyleFunction.call(feature, resolution) +}; +ol.feature.createFeatureStyleFunction = function(obj) { + var styleFunction; + if(goog.isFunction(obj)) { + styleFunction = (obj) + }else { + var styles; + if(goog.isArray(obj)) { + styles = obj + }else { + goog.asserts.assertInstanceof(obj, ol.style.Style); + styles = [obj] + } + styleFunction = goog.functions.constant(styles) + } + return styleFunction +}; +ol.feature.createStyleFunction = function(obj) { + var styleFunction; + if(goog.isFunction(obj)) { + styleFunction = (obj) + }else { + var styles; + if(goog.isArray(obj)) { + styles = obj + }else { + goog.asserts.assertInstanceof(obj, ol.style.Style); + styles = [obj] + } + styleFunction = goog.functions.constant(styles) + } + return styleFunction +}; +goog.provide("ol.FeatureOverlay"); +goog.require("goog.array"); +goog.require("goog.asserts"); +goog.require("goog.events"); +goog.require("goog.events.EventType"); +goog.require("goog.object"); +goog.require("ol.Collection"); +goog.require("ol.CollectionEventType"); +goog.require("ol.Feature"); +goog.require("ol.feature"); +goog.require("ol.render.EventType"); +ol.FeatureOverlay = function(opt_options) { + var options = goog.isDef(opt_options) ? opt_options : {}; + this.features_ = null; + this.featuresListenerKeys_ = null; + this.featureChangeListenerKeys_ = null; + this.map_ = null; + this.postComposeListenerKey_ = null; + this.style_ = null; + this.styleFunction_ = goog.isDef(options.style) ? ol.feature.createStyleFunction(options.style) : undefined; + if(goog.isDef(options.features)) { + if(goog.isArray(options.features)) { + this.setFeatures(new ol.Collection(goog.array.clone(options.features))) + }else { + goog.asserts.assertInstanceof(options.features, ol.Collection); + this.setFeatures(options.features) + } + }else { + this.setFeatures(new ol.Collection) + } + if(goog.isDef(options.map)) { + this.setMap(options.map) + } +}; +ol.FeatureOverlay.prototype.addFeature = function(feature) { + this.features_.push(feature) +}; +ol.FeatureOverlay.prototype.getFeatures = function() { + return this.features_ +}; +ol.FeatureOverlay.prototype.handleFeatureChange_ = function() { + this.render_() +}; +ol.FeatureOverlay.prototype.handleFeaturesAdd_ = function(collectionEvent) { + goog.asserts.assert(!goog.isNull(this.featureChangeListenerKeys_)); + var feature = (collectionEvent.element); + this.featureChangeListenerKeys_[goog.getUid(feature).toString()] = goog.events.listen(feature, goog.events.EventType.CHANGE, this.handleFeatureChange_, false, this); + this.render_() +}; +ol.FeatureOverlay.prototype.handleFeaturesRemove_ = function(collectionEvent) { + goog.asserts.assert(!goog.isNull(this.featureChangeListenerKeys_)); + var feature = (collectionEvent.element); + var key = goog.getUid(feature).toString(); + goog.events.unlistenByKey(this.featureChangeListenerKeys_[key]); + delete this.featureChangeListenerKeys_[key]; + this.render_() +}; +ol.FeatureOverlay.prototype.handleMapPostCompose_ = function(event) { + if(goog.isNull(this.features_) || !goog.isDef(this.styleFunction_)) { + return + } + var resolution = event.frameState.view2DState.resolution; + var vectorContext = event.vectorContext; + var i, ii, feature, styles; + this.features_.forEach(function(feature) { + styles = this.styleFunction_(feature, resolution); + if(!goog.isDefAndNotNull(styles)) { + return + } + ii = styles.length; + for(i = 0;i < ii;++i) { + vectorContext.drawFeature(feature, styles[i]) + } + }, this) +}; +ol.FeatureOverlay.prototype.removeFeature = function(feature) { + this.features_.remove(feature) +}; +ol.FeatureOverlay.prototype.render_ = function() { + if(!goog.isNull(this.map_)) { + this.map_.render() + } +}; +ol.FeatureOverlay.prototype.setFeatures = function(features) { + if(!goog.isNull(this.featuresListenerKeys_)) { + goog.array.forEach(this.featuresListenerKeys_, goog.events.unlistenByKey); + this.featuresListenerKeys_ = null + } + if(!goog.isNull(this.featureChangeListenerKeys_)) { + goog.array.forEach(goog.object.getValues(this.featureChangeListenerKeys_), goog.events.unlistenByKey); + this.featureChangeListenerKeys_ = null + } + this.features_ = features; + if(!goog.isNull(features)) { + this.featuresListenerKeys_ = [goog.events.listen(features, ol.CollectionEventType.ADD, this.handleFeaturesAdd_, false, this), goog.events.listen(features, ol.CollectionEventType.REMOVE, this.handleFeaturesRemove_, false, this)]; + this.featureChangeListenerKeys_ = {}; + var featuresArray = features.getArray(); + var i, ii = featuresArray.length; + var feature; + for(i = 0;i < ii;++i) { + feature = featuresArray[i]; + this.featureChangeListenerKeys_[goog.getUid(feature).toString()] = goog.events.listen(feature, goog.events.EventType.CHANGE, this.handleFeatureChange_, false, this) + } + } + this.render_() +}; +ol.FeatureOverlay.prototype.setMap = function(map) { + if(!goog.isNull(this.postComposeListenerKey_)) { + goog.events.unlistenByKey(this.postComposeListenerKey_); + this.postComposeListenerKey_ = null + } + this.render_(); + this.map_ = map; + if(!goog.isNull(map)) { + this.postComposeListenerKey_ = goog.events.listen(map, ol.render.EventType.POSTCOMPOSE, this.handleMapPostCompose_, false, this); + map.render() + } +}; +ol.FeatureOverlay.prototype.setStyle = function(style) { + this.style_ = style; + this.styleFunction_ = ol.feature.createStyleFunction(style); + this.render_() +}; +ol.FeatureOverlay.prototype.getStyle = function() { + return this.style_ +}; +ol.FeatureOverlay.prototype.getStyleFunction = function() { + return this.styleFunction_ +}; +goog.provide("goog.structs"); +goog.require("goog.array"); +goog.require("goog.object"); +goog.structs.getCount = function(col) { + if(typeof col.getCount == "function") { + return col.getCount() + } + if(goog.isArrayLike(col) || goog.isString(col)) { + return col.length + } + return goog.object.getCount(col) +}; +goog.structs.getValues = function(col) { + if(typeof col.getValues == "function") { + return col.getValues() + } + if(goog.isString(col)) { + return col.split("") + } + if(goog.isArrayLike(col)) { + var rv = []; + var l = col.length; + for(var i = 0;i < l;i++) { + rv.push(col[i]) + } + return rv + } + return goog.object.getValues(col) +}; +goog.structs.getKeys = function(col) { + if(typeof col.getKeys == "function") { + return col.getKeys() + } + if(typeof col.getValues == "function") { + return undefined + } + if(goog.isArrayLike(col) || goog.isString(col)) { + var rv = []; + var l = col.length; + for(var i = 0;i < l;i++) { + rv.push(i) + } + return rv + } + return goog.object.getKeys(col) +}; +goog.structs.contains = function(col, val) { + if(typeof col.contains == "function") { + return col.contains(val) + } + if(typeof col.containsValue == "function") { + return col.containsValue(val) + } + if(goog.isArrayLike(col) || goog.isString(col)) { + return goog.array.contains((col), val) + } + return goog.object.containsValue(col, val) +}; +goog.structs.isEmpty = function(col) { + if(typeof col.isEmpty == "function") { + return col.isEmpty() + } + if(goog.isArrayLike(col) || goog.isString(col)) { + return goog.array.isEmpty((col)) + } + return goog.object.isEmpty(col) +}; +goog.structs.clear = function(col) { + if(typeof col.clear == "function") { + col.clear() + }else { + if(goog.isArrayLike(col)) { + goog.array.clear((col)) + }else { + goog.object.clear(col) + } + } +}; +goog.structs.forEach = function(col, f, opt_obj) { + if(typeof col.forEach == "function") { + col.forEach(f, opt_obj) + }else { + if(goog.isArrayLike(col) || goog.isString(col)) { + goog.array.forEach((col), f, opt_obj) + }else { + var keys = goog.structs.getKeys(col); + var values = goog.structs.getValues(col); + var l = values.length; + for(var i = 0;i < l;i++) { + f.call(opt_obj, values[i], keys && keys[i], col) + } + } + } +}; +goog.structs.filter = function(col, f, opt_obj) { + if(typeof col.filter == "function") { + return col.filter(f, opt_obj) + } + if(goog.isArrayLike(col) || goog.isString(col)) { + return goog.array.filter((col), f, opt_obj) + } + var rv; + var keys = goog.structs.getKeys(col); + var values = goog.structs.getValues(col); + var l = values.length; + if(keys) { + rv = {}; + for(var i = 0;i < l;i++) { + if(f.call(opt_obj, values[i], keys[i], col)) { + rv[keys[i]] = values[i] + } + } + }else { + rv = []; + for(var i = 0;i < l;i++) { + if(f.call(opt_obj, values[i], undefined, col)) { + rv.push(values[i]) + } + } + } + return rv +}; +goog.structs.map = function(col, f, opt_obj) { + if(typeof col.map == "function") { + return col.map(f, opt_obj) + } + if(goog.isArrayLike(col) || goog.isString(col)) { + return goog.array.map((col), f, opt_obj) + } + var rv; + var keys = goog.structs.getKeys(col); + var values = goog.structs.getValues(col); + var l = values.length; + if(keys) { + rv = {}; + for(var i = 0;i < l;i++) { + rv[keys[i]] = f.call(opt_obj, values[i], keys[i], col) + } + }else { + rv = []; + for(var i = 0;i < l;i++) { + rv[i] = f.call(opt_obj, values[i], undefined, col) + } + } + return rv +}; +goog.structs.some = function(col, f, opt_obj) { + if(typeof col.some == "function") { + return col.some(f, opt_obj) + } + if(goog.isArrayLike(col) || goog.isString(col)) { + return goog.array.some((col), f, opt_obj) + } + var keys = goog.structs.getKeys(col); + var values = goog.structs.getValues(col); + var l = values.length; + for(var i = 0;i < l;i++) { + if(f.call(opt_obj, values[i], keys && keys[i], col)) { + return true + } + } + return false +}; +goog.structs.every = function(col, f, opt_obj) { + if(typeof col.every == "function") { + return col.every(f, opt_obj) + } + if(goog.isArrayLike(col) || goog.isString(col)) { + return goog.array.every((col), f, opt_obj) + } + var keys = goog.structs.getKeys(col); + var values = goog.structs.getValues(col); + var l = values.length; + for(var i = 0;i < l;i++) { + if(!f.call(opt_obj, values[i], keys && keys[i], col)) { + return false + } + } + return true +}; +goog.provide("goog.iter"); +goog.provide("goog.iter.Iterator"); +goog.provide("goog.iter.StopIteration"); +goog.require("goog.array"); +goog.require("goog.asserts"); +goog.iter.Iterable; +if("StopIteration" in goog.global) { + goog.iter.StopIteration = goog.global["StopIteration"] +}else { + goog.iter.StopIteration = Error("StopIteration") +} +goog.iter.Iterator = function() { +}; +goog.iter.Iterator.prototype.next = function() { + throw goog.iter.StopIteration; +}; +goog.iter.Iterator.prototype.__iterator__ = function(opt_keys) { + return this +}; +goog.iter.toIterator = function(iterable) { + if(iterable instanceof goog.iter.Iterator) { + return iterable + } + if(typeof iterable.__iterator__ == "function") { + return iterable.__iterator__(false) + } + if(goog.isArrayLike(iterable)) { + var i = 0; + var newIter = new goog.iter.Iterator; + newIter.next = function() { + while(true) { + if(i >= iterable.length) { + throw goog.iter.StopIteration; + } + if(!(i in iterable)) { + i++; + continue + } + return iterable[i++] + } + }; + return newIter + } + throw Error("Not implemented"); +}; +goog.iter.forEach = function(iterable, f, opt_obj) { + if(goog.isArrayLike(iterable)) { + try { + goog.array.forEach((iterable), f, opt_obj) + }catch(ex) { + if(ex !== goog.iter.StopIteration) { + throw ex; + } + } + }else { + iterable = goog.iter.toIterator(iterable); + try { + while(true) { + f.call(opt_obj, iterable.next(), undefined, iterable) + } + }catch(ex) { + if(ex !== goog.iter.StopIteration) { + throw ex; + } + } + } +}; +goog.iter.filter = function(iterable, f, opt_obj) { + var iterator = goog.iter.toIterator(iterable); + var newIter = new goog.iter.Iterator; + newIter.next = function() { + while(true) { + var val = iterator.next(); + if(f.call(opt_obj, val, undefined, iterator)) { + return val + } + } + }; + return newIter +}; +goog.iter.range = function(startOrStop, opt_stop, opt_step) { + var start = 0; + var stop = startOrStop; + var step = opt_step || 1; + if(arguments.length > 1) { + start = startOrStop; + stop = opt_stop + } + if(step == 0) { + throw Error("Range step argument must not be zero"); + } + var newIter = new goog.iter.Iterator; + newIter.next = function() { + if(step > 0 && start >= stop || step < 0 && start <= stop) { + throw goog.iter.StopIteration; + } + var rv = start; + start += step; + return rv + }; + return newIter +}; +goog.iter.join = function(iterable, deliminator) { + return goog.iter.toArray(iterable).join(deliminator) +}; +goog.iter.map = function(iterable, f, opt_obj) { + var iterator = goog.iter.toIterator(iterable); + var newIter = new goog.iter.Iterator; + newIter.next = function() { + while(true) { + var val = iterator.next(); + return f.call(opt_obj, val, undefined, iterator) + } + }; + return newIter +}; +goog.iter.reduce = function(iterable, f, val, opt_obj) { + var rval = val; + goog.iter.forEach(iterable, function(val) { + rval = f.call(opt_obj, rval, val) + }); + return rval +}; +goog.iter.some = function(iterable, f, opt_obj) { + iterable = goog.iter.toIterator(iterable); + try { + while(true) { + if(f.call(opt_obj, iterable.next(), undefined, iterable)) { + return true + } + } + }catch(ex) { + if(ex !== goog.iter.StopIteration) { + throw ex; + } + } + return false +}; +goog.iter.every = function(iterable, f, opt_obj) { + iterable = goog.iter.toIterator(iterable); + try { + while(true) { + if(!f.call(opt_obj, iterable.next(), undefined, iterable)) { + return false + } + } + }catch(ex) { + if(ex !== goog.iter.StopIteration) { + throw ex; + } + } + return true +}; +goog.iter.chain = function(var_args) { + var args = arguments; + var length = args.length; + var i = 0; + var newIter = new goog.iter.Iterator; + newIter.next = function() { + try { + if(i >= length) { + throw goog.iter.StopIteration; + } + var current = goog.iter.toIterator(args[i]); + return current.next() + }catch(ex) { + if(ex !== goog.iter.StopIteration || i >= length) { + throw ex; + }else { + i++; + return this.next() + } + } + }; + return newIter +}; +goog.iter.dropWhile = function(iterable, f, opt_obj) { + var iterator = goog.iter.toIterator(iterable); + var newIter = new goog.iter.Iterator; + var dropping = true; + newIter.next = function() { + while(true) { + var val = iterator.next(); + if(dropping && f.call(opt_obj, val, undefined, iterator)) { + continue + }else { + dropping = false + } + return val + } + }; + return newIter +}; +goog.iter.takeWhile = function(iterable, f, opt_obj) { + var iterator = goog.iter.toIterator(iterable); + var newIter = new goog.iter.Iterator; + var taking = true; + newIter.next = function() { + while(true) { + if(taking) { + var val = iterator.next(); + if(f.call(opt_obj, val, undefined, iterator)) { + return val + }else { + taking = false + } + }else { + throw goog.iter.StopIteration; + } + } + }; + return newIter +}; +goog.iter.toArray = function(iterable) { + if(goog.isArrayLike(iterable)) { + return goog.array.toArray((iterable)) + } + iterable = goog.iter.toIterator(iterable); + var array = []; + goog.iter.forEach(iterable, function(val) { + array.push(val) + }); + return array +}; +goog.iter.equals = function(iterable1, iterable2) { + iterable1 = goog.iter.toIterator(iterable1); + iterable2 = goog.iter.toIterator(iterable2); + var b1, b2; + try { + while(true) { + b1 = b2 = false; + var val1 = iterable1.next(); + b1 = true; + var val2 = iterable2.next(); + b2 = true; + if(val1 != val2) { + return false + } + } + }catch(ex) { + if(ex !== goog.iter.StopIteration) { + throw ex; + }else { + if(b1 && !b2) { + return false + } + if(!b2) { + try { + val2 = iterable2.next(); + return false + }catch(ex1) { + if(ex1 !== goog.iter.StopIteration) { + throw ex1; + } + return true + } + } + } + } + return false +}; +goog.iter.nextOrValue = function(iterable, defaultValue) { + try { + return goog.iter.toIterator(iterable).next() + }catch(e) { + if(e != goog.iter.StopIteration) { + throw e; + } + return defaultValue + } +}; +goog.iter.product = function(var_args) { + var someArrayEmpty = goog.array.some(arguments, function(arr) { + return!arr.length + }); + if(someArrayEmpty || !arguments.length) { + return new goog.iter.Iterator + } + var iter = new goog.iter.Iterator; + var arrays = arguments; + var indicies = goog.array.repeat(0, arrays.length); + iter.next = function() { + if(indicies) { + var retVal = goog.array.map(indicies, function(valueIndex, arrayIndex) { + return arrays[arrayIndex][valueIndex] + }); + for(var i = indicies.length - 1;i >= 0;i--) { + goog.asserts.assert(indicies); + if(indicies[i] < arrays[i].length - 1) { + indicies[i]++; + break + } + if(i == 0) { + indicies = null; + break + } + indicies[i] = 0 + } + return retVal + } + throw goog.iter.StopIteration; + }; + return iter +}; +goog.iter.cycle = function(iterable) { + var baseIterator = goog.iter.toIterator(iterable); + var cache = []; + var cacheIndex = 0; + var iter = new goog.iter.Iterator; + var useCache = false; + iter.next = function() { + var returnElement = null; + if(!useCache) { + try { + returnElement = baseIterator.next(); + cache.push(returnElement); + return returnElement + }catch(e) { + if(e != goog.iter.StopIteration || goog.array.isEmpty(cache)) { + throw e; + } + useCache = true + } + } + returnElement = cache[cacheIndex]; + cacheIndex = (cacheIndex + 1) % cache.length; + return returnElement + }; + return iter +}; +goog.provide("goog.structs.Map"); +goog.require("goog.iter.Iterator"); +goog.require("goog.iter.StopIteration"); +goog.require("goog.object"); +goog.structs.Map = function(opt_map, var_args) { + this.map_ = {}; + this.keys_ = []; + var argLength = arguments.length; + if(argLength > 1) { + if(argLength % 2) { + throw Error("Uneven number of arguments"); + } + for(var i = 0;i < argLength;i += 2) { + this.set(arguments[i], arguments[i + 1]) + } + }else { + if(opt_map) { + this.addAll((opt_map)) + } + } +}; +goog.structs.Map.prototype.count_ = 0; +goog.structs.Map.prototype.version_ = 0; +goog.structs.Map.prototype.getCount = function() { + return this.count_ +}; +goog.structs.Map.prototype.getValues = function() { + this.cleanupKeysArray_(); + var rv = []; + for(var i = 0;i < this.keys_.length;i++) { + var key = this.keys_[i]; + rv.push(this.map_[key]) + } + return rv +}; +goog.structs.Map.prototype.getKeys = function() { + this.cleanupKeysArray_(); + return(this.keys_.concat()) +}; +goog.structs.Map.prototype.containsKey = function(key) { + return goog.structs.Map.hasKey_(this.map_, key) +}; +goog.structs.Map.prototype.containsValue = function(val) { + for(var i = 0;i < this.keys_.length;i++) { + var key = this.keys_[i]; + if(goog.structs.Map.hasKey_(this.map_, key) && this.map_[key] == val) { + return true + } + } + return false +}; +goog.structs.Map.prototype.equals = function(otherMap, opt_equalityFn) { + if(this === otherMap) { + return true + } + if(this.count_ != otherMap.getCount()) { + return false + } + var equalityFn = opt_equalityFn || goog.structs.Map.defaultEquals; + this.cleanupKeysArray_(); + for(var key, i = 0;key = this.keys_[i];i++) { + if(!equalityFn(this.get(key), otherMap.get(key))) { + return false + } + } + return true +}; +goog.structs.Map.defaultEquals = function(a, b) { + return a === b +}; +goog.structs.Map.prototype.isEmpty = function() { + return this.count_ == 0 +}; +goog.structs.Map.prototype.clear = function() { + this.map_ = {}; + this.keys_.length = 0; + this.count_ = 0; + this.version_ = 0 +}; +goog.structs.Map.prototype.remove = function(key) { + if(goog.structs.Map.hasKey_(this.map_, key)) { + delete this.map_[key]; + this.count_--; + this.version_++; + if(this.keys_.length > 2 * this.count_) { + this.cleanupKeysArray_() + } + return true + } + return false +}; +goog.structs.Map.prototype.cleanupKeysArray_ = function() { + if(this.count_ != this.keys_.length) { + var srcIndex = 0; + var destIndex = 0; + while(srcIndex < this.keys_.length) { + var key = this.keys_[srcIndex]; + if(goog.structs.Map.hasKey_(this.map_, key)) { + this.keys_[destIndex++] = key + } + srcIndex++ + } + this.keys_.length = destIndex + } + if(this.count_ != this.keys_.length) { + var seen = {}; + var srcIndex = 0; + var destIndex = 0; + while(srcIndex < this.keys_.length) { + var key = this.keys_[srcIndex]; + if(!goog.structs.Map.hasKey_(seen, key)) { + this.keys_[destIndex++] = key; + seen[key] = 1 + } + srcIndex++ + } + this.keys_.length = destIndex + } +}; +goog.structs.Map.prototype.get = function(key, opt_val) { + if(goog.structs.Map.hasKey_(this.map_, key)) { + return this.map_[key] + } + return opt_val +}; +goog.structs.Map.prototype.set = function(key, value) { + if(!goog.structs.Map.hasKey_(this.map_, key)) { + this.count_++; + this.keys_.push(key); + this.version_++ + } + this.map_[key] = value +}; +goog.structs.Map.prototype.addAll = function(map) { + var keys, values; + if(map instanceof goog.structs.Map) { + keys = map.getKeys(); + values = map.getValues() + }else { + keys = goog.object.getKeys(map); + values = goog.object.getValues(map) + } + for(var i = 0;i < keys.length;i++) { + this.set(keys[i], values[i]) + } +}; +goog.structs.Map.prototype.clone = function() { + return new goog.structs.Map(this) +}; +goog.structs.Map.prototype.transpose = function() { + var transposed = new goog.structs.Map; + for(var i = 0;i < this.keys_.length;i++) { + var key = this.keys_[i]; + var value = this.map_[key]; + transposed.set(value, key) + } + return transposed +}; +goog.structs.Map.prototype.toObject = function() { + this.cleanupKeysArray_(); + var obj = {}; + for(var i = 0;i < this.keys_.length;i++) { + var key = this.keys_[i]; + obj[key] = this.map_[key] + } + return obj +}; +goog.structs.Map.prototype.getKeyIterator = function() { + return this.__iterator__(true) +}; +goog.structs.Map.prototype.getValueIterator = function() { + return this.__iterator__(false) +}; +goog.structs.Map.prototype.__iterator__ = function(opt_keys) { + this.cleanupKeysArray_(); + var i = 0; + var keys = this.keys_; + var map = this.map_; + var version = this.version_; + var selfObj = this; + var newIter = new goog.iter.Iterator; + newIter.next = function() { + while(true) { + if(version != selfObj.version_) { + throw Error("The map has changed since the iterator was created"); + } + if(i >= keys.length) { + throw goog.iter.StopIteration; + } + var key = keys[i++]; + return opt_keys ? key : map[key] + } + }; + return newIter +}; +goog.structs.Map.hasKey_ = function(obj, key) { + return Object.prototype.hasOwnProperty.call(obj, key) +}; +goog.provide("goog.uri.utils"); +goog.provide("goog.uri.utils.ComponentIndex"); +goog.provide("goog.uri.utils.QueryArray"); +goog.provide("goog.uri.utils.QueryValue"); +goog.provide("goog.uri.utils.StandardQueryParam"); +goog.require("goog.asserts"); +goog.require("goog.string"); +goog.require("goog.userAgent"); +goog.uri.utils.CharCode_ = {AMPERSAND:38, EQUAL:61, HASH:35, QUESTION:63}; +goog.uri.utils.buildFromEncodedParts = function(opt_scheme, opt_userInfo, opt_domain, opt_port, opt_path, opt_queryData, opt_fragment) { + var out = ""; + if(opt_scheme) { + out += opt_scheme + ":" + } + if(opt_domain) { + out += "//"; + if(opt_userInfo) { + out += opt_userInfo + "@" + } + out += opt_domain; + if(opt_port) { + out += ":" + opt_port + } + } + if(opt_path) { + out += opt_path + } + if(opt_queryData) { + out += "?" + opt_queryData + } + if(opt_fragment) { + out += "#" + opt_fragment + } + return out +}; +goog.uri.utils.splitRe_ = new RegExp("^" + "(?:" + "([^:/?#.]+)" + ":)?" + "(?://" + "(?:([^/?#]*)@)?" + "([^/#?]*?)" + "(?::([0-9]+))?" + "(?\x3d[/#?]|$)" + ")?" + "([^?#]+)?" + "(?:\\?([^#]*))?" + "(?:#(.*))?" + "$"); +goog.uri.utils.ComponentIndex = {SCHEME:1, USER_INFO:2, DOMAIN:3, PORT:4, PATH:5, QUERY_DATA:6, FRAGMENT:7}; +goog.uri.utils.split = function(uri) { + goog.uri.utils.phishingProtection_(); + return(uri.match(goog.uri.utils.splitRe_)) +}; +goog.uri.utils.needsPhishingProtection_ = goog.userAgent.WEBKIT; +goog.uri.utils.phishingProtection_ = function() { + if(goog.uri.utils.needsPhishingProtection_) { + goog.uri.utils.needsPhishingProtection_ = false; + var location = goog.global["location"]; + if(location) { + var href = location["href"]; + if(href) { + var domain = goog.uri.utils.getDomain(href); + if(domain && domain != location["hostname"]) { + goog.uri.utils.needsPhishingProtection_ = true; + throw Error(); + } + } + } + } +}; +goog.uri.utils.decodeIfPossible_ = function(uri) { + return uri && decodeURIComponent(uri) +}; +goog.uri.utils.getComponentByIndex_ = function(componentIndex, uri) { + return goog.uri.utils.split(uri)[componentIndex] || null +}; +goog.uri.utils.getScheme = function(uri) { + return goog.uri.utils.getComponentByIndex_(goog.uri.utils.ComponentIndex.SCHEME, uri) +}; +goog.uri.utils.getEffectiveScheme = function(uri) { + var scheme = goog.uri.utils.getScheme(uri); + if(!scheme && self.location) { + var protocol = self.location.protocol; + scheme = protocol.substr(0, protocol.length - 1) + } + return scheme ? scheme.toLowerCase() : "" +}; +goog.uri.utils.getUserInfoEncoded = function(uri) { + return goog.uri.utils.getComponentByIndex_(goog.uri.utils.ComponentIndex.USER_INFO, uri) +}; +goog.uri.utils.getUserInfo = function(uri) { + return goog.uri.utils.decodeIfPossible_(goog.uri.utils.getUserInfoEncoded(uri)) +}; +goog.uri.utils.getDomainEncoded = function(uri) { + return goog.uri.utils.getComponentByIndex_(goog.uri.utils.ComponentIndex.DOMAIN, uri) +}; +goog.uri.utils.getDomain = function(uri) { + return goog.uri.utils.decodeIfPossible_(goog.uri.utils.getDomainEncoded(uri)) +}; +goog.uri.utils.getPort = function(uri) { + return Number(goog.uri.utils.getComponentByIndex_(goog.uri.utils.ComponentIndex.PORT, uri)) || null +}; +goog.uri.utils.getPathEncoded = function(uri) { + return goog.uri.utils.getComponentByIndex_(goog.uri.utils.ComponentIndex.PATH, uri) +}; +goog.uri.utils.getPath = function(uri) { + return goog.uri.utils.decodeIfPossible_(goog.uri.utils.getPathEncoded(uri)) +}; +goog.uri.utils.getQueryData = function(uri) { + return goog.uri.utils.getComponentByIndex_(goog.uri.utils.ComponentIndex.QUERY_DATA, uri) +}; +goog.uri.utils.getFragmentEncoded = function(uri) { + var hashIndex = uri.indexOf("#"); + return hashIndex < 0 ? null : uri.substr(hashIndex + 1) +}; +goog.uri.utils.setFragmentEncoded = function(uri, fragment) { + return goog.uri.utils.removeFragment(uri) + (fragment ? "#" + fragment : "") +}; +goog.uri.utils.getFragment = function(uri) { + return goog.uri.utils.decodeIfPossible_(goog.uri.utils.getFragmentEncoded(uri)) +}; +goog.uri.utils.getHost = function(uri) { + var pieces = goog.uri.utils.split(uri); + return goog.uri.utils.buildFromEncodedParts(pieces[goog.uri.utils.ComponentIndex.SCHEME], pieces[goog.uri.utils.ComponentIndex.USER_INFO], pieces[goog.uri.utils.ComponentIndex.DOMAIN], pieces[goog.uri.utils.ComponentIndex.PORT]) +}; +goog.uri.utils.getPathAndAfter = function(uri) { + var pieces = goog.uri.utils.split(uri); + return goog.uri.utils.buildFromEncodedParts(null, null, null, null, pieces[goog.uri.utils.ComponentIndex.PATH], pieces[goog.uri.utils.ComponentIndex.QUERY_DATA], pieces[goog.uri.utils.ComponentIndex.FRAGMENT]) +}; +goog.uri.utils.removeFragment = function(uri) { + var hashIndex = uri.indexOf("#"); + return hashIndex < 0 ? uri : uri.substr(0, hashIndex) +}; +goog.uri.utils.haveSameDomain = function(uri1, uri2) { + var pieces1 = goog.uri.utils.split(uri1); + var pieces2 = goog.uri.utils.split(uri2); + return pieces1[goog.uri.utils.ComponentIndex.DOMAIN] == pieces2[goog.uri.utils.ComponentIndex.DOMAIN] && pieces1[goog.uri.utils.ComponentIndex.SCHEME] == pieces2[goog.uri.utils.ComponentIndex.SCHEME] && pieces1[goog.uri.utils.ComponentIndex.PORT] == pieces2[goog.uri.utils.ComponentIndex.PORT] +}; +goog.uri.utils.assertNoFragmentsOrQueries_ = function(uri) { + if(goog.DEBUG && (uri.indexOf("#") >= 0 || uri.indexOf("?") >= 0)) { + throw Error("goog.uri.utils: Fragment or query identifiers are not " + "supported: [" + uri + "]"); + } +}; +goog.uri.utils.QueryValue; +goog.uri.utils.QueryArray; +goog.uri.utils.appendQueryData_ = function(buffer) { + if(buffer[1]) { + var baseUri = (buffer[0]); + var hashIndex = baseUri.indexOf("#"); + if(hashIndex >= 0) { + buffer.push(baseUri.substr(hashIndex)); + buffer[0] = baseUri = baseUri.substr(0, hashIndex) + } + var questionIndex = baseUri.indexOf("?"); + if(questionIndex < 0) { + buffer[1] = "?" + }else { + if(questionIndex == baseUri.length - 1) { + buffer[1] = undefined + } + } + } + return buffer.join("") +}; +goog.uri.utils.appendKeyValuePairs_ = function(key, value, pairs) { + if(goog.isArray(value)) { + goog.asserts.assertArray(value); + for(var j = 0;j < value.length;j++) { + goog.uri.utils.appendKeyValuePairs_(key, String(value[j]), pairs) + } + }else { + if(value != null) { + pairs.push("\x26", key, value === "" ? "" : "\x3d", goog.string.urlEncode(value)) + } + } +}; +goog.uri.utils.buildQueryDataBuffer_ = function(buffer, keysAndValues, opt_startIndex) { + goog.asserts.assert(Math.max(keysAndValues.length - (opt_startIndex || 0), 0) % 2 == 0, "goog.uri.utils: Key/value lists must be even in length."); + for(var i = opt_startIndex || 0;i < keysAndValues.length;i += 2) { + goog.uri.utils.appendKeyValuePairs_(keysAndValues[i], keysAndValues[i + 1], buffer) + } + return buffer +}; +goog.uri.utils.buildQueryData = function(keysAndValues, opt_startIndex) { + var buffer = goog.uri.utils.buildQueryDataBuffer_([], keysAndValues, opt_startIndex); + buffer[0] = ""; + return buffer.join("") +}; +goog.uri.utils.buildQueryDataBufferFromMap_ = function(buffer, map) { + for(var key in map) { + goog.uri.utils.appendKeyValuePairs_(key, map[key], buffer) + } + return buffer +}; +goog.uri.utils.buildQueryDataFromMap = function(map) { + var buffer = goog.uri.utils.buildQueryDataBufferFromMap_([], map); + buffer[0] = ""; + return buffer.join("") +}; +goog.uri.utils.appendParams = function(uri, var_args) { + return goog.uri.utils.appendQueryData_(arguments.length == 2 ? goog.uri.utils.buildQueryDataBuffer_([uri], arguments[1], 0) : goog.uri.utils.buildQueryDataBuffer_([uri], arguments, 1)) +}; +goog.uri.utils.appendParamsFromMap = function(uri, map) { + return goog.uri.utils.appendQueryData_(goog.uri.utils.buildQueryDataBufferFromMap_([uri], map)) +}; +goog.uri.utils.appendParam = function(uri, key, opt_value) { + var paramArr = [uri, "\x26", key]; + if(goog.isDefAndNotNull(opt_value)) { + paramArr.push("\x3d", goog.string.urlEncode(opt_value)) + } + return goog.uri.utils.appendQueryData_(paramArr) +}; +goog.uri.utils.findParam_ = function(uri, startIndex, keyEncoded, hashOrEndIndex) { + var index = startIndex; + var keyLength = keyEncoded.length; + while((index = uri.indexOf(keyEncoded, index)) >= 0 && index < hashOrEndIndex) { + var precedingChar = uri.charCodeAt(index - 1); + if(precedingChar == goog.uri.utils.CharCode_.AMPERSAND || precedingChar == goog.uri.utils.CharCode_.QUESTION) { + var followingChar = uri.charCodeAt(index + keyLength); + if(!followingChar || followingChar == goog.uri.utils.CharCode_.EQUAL || followingChar == goog.uri.utils.CharCode_.AMPERSAND || followingChar == goog.uri.utils.CharCode_.HASH) { + return index + } + } + index += keyLength + 1 + } + return-1 +}; +goog.uri.utils.hashOrEndRe_ = /#|$/; +goog.uri.utils.hasParam = function(uri, keyEncoded) { + return goog.uri.utils.findParam_(uri, 0, keyEncoded, uri.search(goog.uri.utils.hashOrEndRe_)) >= 0 +}; +goog.uri.utils.getParamValue = function(uri, keyEncoded) { + var hashOrEndIndex = uri.search(goog.uri.utils.hashOrEndRe_); + var foundIndex = goog.uri.utils.findParam_(uri, 0, keyEncoded, hashOrEndIndex); + if(foundIndex < 0) { + return null + }else { + var endPosition = uri.indexOf("\x26", foundIndex); + if(endPosition < 0 || endPosition > hashOrEndIndex) { + endPosition = hashOrEndIndex + } + foundIndex += keyEncoded.length + 1; + return goog.string.urlDecode(uri.substr(foundIndex, endPosition - foundIndex)) + } +}; +goog.uri.utils.getParamValues = function(uri, keyEncoded) { + var hashOrEndIndex = uri.search(goog.uri.utils.hashOrEndRe_); + var position = 0; + var foundIndex; + var result = []; + while((foundIndex = goog.uri.utils.findParam_(uri, position, keyEncoded, hashOrEndIndex)) >= 0) { + position = uri.indexOf("\x26", foundIndex); + if(position < 0 || position > hashOrEndIndex) { + position = hashOrEndIndex + } + foundIndex += keyEncoded.length + 1; + result.push(goog.string.urlDecode(uri.substr(foundIndex, position - foundIndex))) + } + return result +}; +goog.uri.utils.trailingQueryPunctuationRe_ = /[?&]($|#)/; +goog.uri.utils.removeParam = function(uri, keyEncoded) { + var hashOrEndIndex = uri.search(goog.uri.utils.hashOrEndRe_); + var position = 0; + var foundIndex; + var buffer = []; + while((foundIndex = goog.uri.utils.findParam_(uri, position, keyEncoded, hashOrEndIndex)) >= 0) { + buffer.push(uri.substring(position, foundIndex)); + position = Math.min(uri.indexOf("\x26", foundIndex) + 1 || hashOrEndIndex, hashOrEndIndex) + } + buffer.push(uri.substr(position)); + return buffer.join("").replace(goog.uri.utils.trailingQueryPunctuationRe_, "$1") +}; +goog.uri.utils.setParam = function(uri, keyEncoded, value) { + return goog.uri.utils.appendParam(goog.uri.utils.removeParam(uri, keyEncoded), keyEncoded, value) +}; +goog.uri.utils.appendPath = function(baseUri, path) { + goog.uri.utils.assertNoFragmentsOrQueries_(baseUri); + if(goog.string.endsWith(baseUri, "/")) { + baseUri = baseUri.substr(0, baseUri.length - 1) + } + if(goog.string.startsWith(path, "/")) { + path = path.substr(1) + } + return goog.string.buildString(baseUri, "/", path) +}; +goog.uri.utils.StandardQueryParam = {RANDOM:"zx"}; +goog.uri.utils.makeUnique = function(uri) { + return goog.uri.utils.setParam(uri, goog.uri.utils.StandardQueryParam.RANDOM, goog.string.getRandomString()) +}; +goog.provide("goog.Uri"); +goog.provide("goog.Uri.QueryData"); +goog.require("goog.array"); +goog.require("goog.string"); +goog.require("goog.structs"); +goog.require("goog.structs.Map"); +goog.require("goog.uri.utils"); +goog.require("goog.uri.utils.ComponentIndex"); +goog.require("goog.uri.utils.StandardQueryParam"); +goog.Uri = function(opt_uri, opt_ignoreCase) { + var m; + if(opt_uri instanceof goog.Uri) { + this.ignoreCase_ = goog.isDef(opt_ignoreCase) ? opt_ignoreCase : opt_uri.getIgnoreCase(); + this.setScheme(opt_uri.getScheme()); + this.setUserInfo(opt_uri.getUserInfo()); + this.setDomain(opt_uri.getDomain()); + this.setPort(opt_uri.getPort()); + this.setPath(opt_uri.getPath()); + this.setQueryData(opt_uri.getQueryData().clone()); + this.setFragment(opt_uri.getFragment()) + }else { + if(opt_uri && (m = goog.uri.utils.split(String(opt_uri)))) { + this.ignoreCase_ = !!opt_ignoreCase; + this.setScheme(m[goog.uri.utils.ComponentIndex.SCHEME] || "", true); + this.setUserInfo(m[goog.uri.utils.ComponentIndex.USER_INFO] || "", true); + this.setDomain(m[goog.uri.utils.ComponentIndex.DOMAIN] || "", true); + this.setPort(m[goog.uri.utils.ComponentIndex.PORT]); + this.setPath(m[goog.uri.utils.ComponentIndex.PATH] || "", true); + this.setQueryData(m[goog.uri.utils.ComponentIndex.QUERY_DATA] || "", true); + this.setFragment(m[goog.uri.utils.ComponentIndex.FRAGMENT] || "", true) + }else { + this.ignoreCase_ = !!opt_ignoreCase; + this.queryData_ = new goog.Uri.QueryData(null, null, this.ignoreCase_) + } + } +}; +goog.Uri.preserveParameterTypesCompatibilityFlag = false; +goog.Uri.RANDOM_PARAM = goog.uri.utils.StandardQueryParam.RANDOM; +goog.Uri.prototype.scheme_ = ""; +goog.Uri.prototype.userInfo_ = ""; +goog.Uri.prototype.domain_ = ""; +goog.Uri.prototype.port_ = null; +goog.Uri.prototype.path_ = ""; +goog.Uri.prototype.queryData_; +goog.Uri.prototype.fragment_ = ""; +goog.Uri.prototype.isReadOnly_ = false; +goog.Uri.prototype.ignoreCase_ = false; +goog.Uri.prototype.toString = function() { + var out = []; + var scheme = this.getScheme(); + if(scheme) { + out.push(goog.Uri.encodeSpecialChars_(scheme, goog.Uri.reDisallowedInSchemeOrUserInfo_), ":") + } + var domain = this.getDomain(); + if(domain) { + out.push("//"); + var userInfo = this.getUserInfo(); + if(userInfo) { + out.push(goog.Uri.encodeSpecialChars_(userInfo, goog.Uri.reDisallowedInSchemeOrUserInfo_), "@") + } + out.push(goog.string.urlEncode(domain)); + var port = this.getPort(); + if(port != null) { + out.push(":", String(port)) + } + } + var path = this.getPath(); + if(path) { + if(this.hasDomain() && path.charAt(0) != "/") { + out.push("/") + } + out.push(goog.Uri.encodeSpecialChars_(path, path.charAt(0) == "/" ? goog.Uri.reDisallowedInAbsolutePath_ : goog.Uri.reDisallowedInRelativePath_)) + } + var query = this.getEncodedQuery(); + if(query) { + out.push("?", query) + } + var fragment = this.getFragment(); + if(fragment) { + out.push("#", goog.Uri.encodeSpecialChars_(fragment, goog.Uri.reDisallowedInFragment_)) + } + return out.join("") +}; +goog.Uri.prototype.resolve = function(relativeUri) { + var absoluteUri = this.clone(); + var overridden = relativeUri.hasScheme(); + if(overridden) { + absoluteUri.setScheme(relativeUri.getScheme()) + }else { + overridden = relativeUri.hasUserInfo() + } + if(overridden) { + absoluteUri.setUserInfo(relativeUri.getUserInfo()) + }else { + overridden = relativeUri.hasDomain() + } + if(overridden) { + absoluteUri.setDomain(relativeUri.getDomain()) + }else { + overridden = relativeUri.hasPort() + } + var path = relativeUri.getPath(); + if(overridden) { + absoluteUri.setPort(relativeUri.getPort()) + }else { + overridden = relativeUri.hasPath(); + if(overridden) { + if(path.charAt(0) != "/") { + if(this.hasDomain() && !this.hasPath()) { + path = "/" + path + }else { + var lastSlashIndex = absoluteUri.getPath().lastIndexOf("/"); + if(lastSlashIndex != -1) { + path = absoluteUri.getPath().substr(0, lastSlashIndex + 1) + path + } + } + } + path = goog.Uri.removeDotSegments(path) + } + } + if(overridden) { + absoluteUri.setPath(path) + }else { + overridden = relativeUri.hasQuery() + } + if(overridden) { + absoluteUri.setQueryData(relativeUri.getDecodedQuery()) + }else { + overridden = relativeUri.hasFragment() + } + if(overridden) { + absoluteUri.setFragment(relativeUri.getFragment()) + } + return absoluteUri +}; +goog.Uri.prototype.clone = function() { + return new goog.Uri(this) +}; +goog.Uri.prototype.getScheme = function() { + return this.scheme_ +}; +goog.Uri.prototype.setScheme = function(newScheme, opt_decode) { + this.enforceReadOnly(); + this.scheme_ = opt_decode ? goog.Uri.decodeOrEmpty_(newScheme) : newScheme; + if(this.scheme_) { + this.scheme_ = this.scheme_.replace(/:$/, "") + } + return this +}; +goog.Uri.prototype.hasScheme = function() { + return!!this.scheme_ +}; +goog.Uri.prototype.getUserInfo = function() { + return this.userInfo_ +}; +goog.Uri.prototype.setUserInfo = function(newUserInfo, opt_decode) { + this.enforceReadOnly(); + this.userInfo_ = opt_decode ? goog.Uri.decodeOrEmpty_(newUserInfo) : newUserInfo; + return this +}; +goog.Uri.prototype.hasUserInfo = function() { + return!!this.userInfo_ +}; +goog.Uri.prototype.getDomain = function() { + return this.domain_ +}; +goog.Uri.prototype.setDomain = function(newDomain, opt_decode) { + this.enforceReadOnly(); + this.domain_ = opt_decode ? goog.Uri.decodeOrEmpty_(newDomain) : newDomain; + return this +}; +goog.Uri.prototype.hasDomain = function() { + return!!this.domain_ +}; +goog.Uri.prototype.getPort = function() { + return this.port_ +}; +goog.Uri.prototype.setPort = function(newPort) { + this.enforceReadOnly(); + if(newPort) { + newPort = Number(newPort); + if(isNaN(newPort) || newPort < 0) { + throw Error("Bad port number " + newPort); + } + this.port_ = newPort + }else { + this.port_ = null + } + return this +}; +goog.Uri.prototype.hasPort = function() { + return this.port_ != null +}; +goog.Uri.prototype.getPath = function() { + return this.path_ +}; +goog.Uri.prototype.setPath = function(newPath, opt_decode) { + this.enforceReadOnly(); + this.path_ = opt_decode ? goog.Uri.decodeOrEmpty_(newPath) : newPath; + return this +}; +goog.Uri.prototype.hasPath = function() { + return!!this.path_ +}; +goog.Uri.prototype.hasQuery = function() { + return this.queryData_.toString() !== "" +}; +goog.Uri.prototype.setQueryData = function(queryData, opt_decode) { + this.enforceReadOnly(); + if(queryData instanceof goog.Uri.QueryData) { + this.queryData_ = queryData; + this.queryData_.setIgnoreCase(this.ignoreCase_) + }else { + if(!opt_decode) { + queryData = goog.Uri.encodeSpecialChars_(queryData, goog.Uri.reDisallowedInQuery_) + } + this.queryData_ = new goog.Uri.QueryData(queryData, null, this.ignoreCase_) + } + return this +}; +goog.Uri.prototype.setQuery = function(newQuery, opt_decode) { + return this.setQueryData(newQuery, opt_decode) +}; +goog.Uri.prototype.getEncodedQuery = function() { + return this.queryData_.toString() +}; +goog.Uri.prototype.getDecodedQuery = function() { + return this.queryData_.toDecodedString() +}; +goog.Uri.prototype.getQueryData = function() { + return this.queryData_ +}; +goog.Uri.prototype.getQuery = function() { + return this.getEncodedQuery() +}; +goog.Uri.prototype.setParameterValue = function(key, value) { + this.enforceReadOnly(); + this.queryData_.set(key, value); + return this +}; +goog.Uri.prototype.setParameterValues = function(key, values) { + this.enforceReadOnly(); + if(!goog.isArray(values)) { + values = [String(values)] + } + this.queryData_.setValues(key, (values)); + return this +}; +goog.Uri.prototype.getParameterValues = function(name) { + return this.queryData_.getValues(name) +}; +goog.Uri.prototype.getParameterValue = function(paramName) { + return(this.queryData_.get(paramName)) +}; +goog.Uri.prototype.getFragment = function() { + return this.fragment_ +}; +goog.Uri.prototype.setFragment = function(newFragment, opt_decode) { + this.enforceReadOnly(); + this.fragment_ = opt_decode ? goog.Uri.decodeOrEmpty_(newFragment) : newFragment; + return this +}; +goog.Uri.prototype.hasFragment = function() { + return!!this.fragment_ +}; +goog.Uri.prototype.hasSameDomainAs = function(uri2) { + return(!this.hasDomain() && !uri2.hasDomain() || this.getDomain() == uri2.getDomain()) && (!this.hasPort() && !uri2.hasPort() || this.getPort() == uri2.getPort()) +}; +goog.Uri.prototype.makeUnique = function() { + this.enforceReadOnly(); + this.setParameterValue(goog.Uri.RANDOM_PARAM, goog.string.getRandomString()); + return this +}; +goog.Uri.prototype.removeParameter = function(key) { + this.enforceReadOnly(); + this.queryData_.remove(key); + return this +}; +goog.Uri.prototype.setReadOnly = function(isReadOnly) { + this.isReadOnly_ = isReadOnly; + return this +}; +goog.Uri.prototype.isReadOnly = function() { + return this.isReadOnly_ +}; +goog.Uri.prototype.enforceReadOnly = function() { + if(this.isReadOnly_) { + throw Error("Tried to modify a read-only Uri"); + } +}; +goog.Uri.prototype.setIgnoreCase = function(ignoreCase) { + this.ignoreCase_ = ignoreCase; + if(this.queryData_) { + this.queryData_.setIgnoreCase(ignoreCase) + } + return this +}; +goog.Uri.prototype.getIgnoreCase = function() { + return this.ignoreCase_ +}; +goog.Uri.parse = function(uri, opt_ignoreCase) { + return uri instanceof goog.Uri ? uri.clone() : new goog.Uri(uri, opt_ignoreCase) +}; +goog.Uri.create = function(opt_scheme, opt_userInfo, opt_domain, opt_port, opt_path, opt_query, opt_fragment, opt_ignoreCase) { + var uri = new goog.Uri(null, opt_ignoreCase); + opt_scheme && uri.setScheme(opt_scheme); + opt_userInfo && uri.setUserInfo(opt_userInfo); + opt_domain && uri.setDomain(opt_domain); + opt_port && uri.setPort(opt_port); + opt_path && uri.setPath(opt_path); + opt_query && uri.setQueryData(opt_query); + opt_fragment && uri.setFragment(opt_fragment); + return uri +}; +goog.Uri.resolve = function(base, rel) { + if(!(base instanceof goog.Uri)) { + base = goog.Uri.parse(base) + } + if(!(rel instanceof goog.Uri)) { + rel = goog.Uri.parse(rel) + } + return base.resolve(rel) +}; +goog.Uri.removeDotSegments = function(path) { + if(path == ".." || path == ".") { + return"" + }else { + if(!goog.string.contains(path, "./") && !goog.string.contains(path, "/.")) { + return path + }else { + var leadingSlash = goog.string.startsWith(path, "/"); + var segments = path.split("/"); + var out = []; + for(var pos = 0;pos < segments.length;) { + var segment = segments[pos++]; + if(segment == ".") { + if(leadingSlash && pos == segments.length) { + out.push("") + } + }else { + if(segment == "..") { + if(out.length > 1 || out.length == 1 && out[0] != "") { + out.pop() + } + if(leadingSlash && pos == segments.length) { + out.push("") + } + }else { + out.push(segment); + leadingSlash = true + } + } + } + return out.join("/") + } + } +}; +goog.Uri.decodeOrEmpty_ = function(val) { + return val ? decodeURIComponent(val) : "" +}; +goog.Uri.encodeSpecialChars_ = function(unescapedPart, extra) { + if(goog.isString(unescapedPart)) { + return encodeURI(unescapedPart).replace(extra, goog.Uri.encodeChar_) + } + return null +}; +goog.Uri.encodeChar_ = function(ch) { + var n = ch.charCodeAt(0); + return"%" + (n >> 4 & 15).toString(16) + (n & 15).toString(16) +}; +goog.Uri.reDisallowedInSchemeOrUserInfo_ = /[#\/\?@]/g; +goog.Uri.reDisallowedInRelativePath_ = /[\#\?:]/g; +goog.Uri.reDisallowedInAbsolutePath_ = /[\#\?]/g; +goog.Uri.reDisallowedInQuery_ = /[\#\?@]/g; +goog.Uri.reDisallowedInFragment_ = /#/g; +goog.Uri.haveSameDomain = function(uri1String, uri2String) { + var pieces1 = goog.uri.utils.split(uri1String); + var pieces2 = goog.uri.utils.split(uri2String); + return pieces1[goog.uri.utils.ComponentIndex.DOMAIN] == pieces2[goog.uri.utils.ComponentIndex.DOMAIN] && pieces1[goog.uri.utils.ComponentIndex.PORT] == pieces2[goog.uri.utils.ComponentIndex.PORT] +}; +goog.Uri.QueryData = function(opt_query, opt_uri, opt_ignoreCase) { + this.encodedQuery_ = opt_query || null; + this.ignoreCase_ = !!opt_ignoreCase +}; +goog.Uri.QueryData.prototype.ensureKeyMapInitialized_ = function() { + if(!this.keyMap_) { + this.keyMap_ = new goog.structs.Map; + this.count_ = 0; + if(this.encodedQuery_) { + var pairs = this.encodedQuery_.split("\x26"); + for(var i = 0;i < pairs.length;i++) { + var indexOfEquals = pairs[i].indexOf("\x3d"); + var name = null; + var value = null; + if(indexOfEquals >= 0) { + name = pairs[i].substring(0, indexOfEquals); + value = pairs[i].substring(indexOfEquals + 1) + }else { + name = pairs[i] + } + name = goog.string.urlDecode(name); + name = this.getKeyName_(name); + this.add(name, value ? goog.string.urlDecode(value) : "") + } + } + } +}; +goog.Uri.QueryData.createFromMap = function(map, opt_uri, opt_ignoreCase) { + var keys = goog.structs.getKeys(map); + if(typeof keys == "undefined") { + throw Error("Keys are undefined"); + } + var queryData = new goog.Uri.QueryData(null, null, opt_ignoreCase); + var values = goog.structs.getValues(map); + for(var i = 0;i < keys.length;i++) { + var key = keys[i]; + var value = values[i]; + if(!goog.isArray(value)) { + queryData.add(key, value) + }else { + queryData.setValues(key, value) + } + } + return queryData +}; +goog.Uri.QueryData.createFromKeysValues = function(keys, values, opt_uri, opt_ignoreCase) { + if(keys.length != values.length) { + throw Error("Mismatched lengths for keys/values"); + } + var queryData = new goog.Uri.QueryData(null, null, opt_ignoreCase); + for(var i = 0;i < keys.length;i++) { + queryData.add(keys[i], values[i]) + } + return queryData +}; +goog.Uri.QueryData.prototype.keyMap_ = null; +goog.Uri.QueryData.prototype.count_ = null; +goog.Uri.QueryData.prototype.getCount = function() { + this.ensureKeyMapInitialized_(); + return this.count_ +}; +goog.Uri.QueryData.prototype.add = function(key, value) { + this.ensureKeyMapInitialized_(); + this.invalidateCache_(); + key = this.getKeyName_(key); + var values = this.keyMap_.get(key); + if(!values) { + this.keyMap_.set(key, values = []) + } + values.push(value); + this.count_++; + return this +}; +goog.Uri.QueryData.prototype.remove = function(key) { + this.ensureKeyMapInitialized_(); + key = this.getKeyName_(key); + if(this.keyMap_.containsKey(key)) { + this.invalidateCache_(); + this.count_ -= this.keyMap_.get(key).length; + return this.keyMap_.remove(key) + } + return false +}; +goog.Uri.QueryData.prototype.clear = function() { + this.invalidateCache_(); + this.keyMap_ = null; + this.count_ = 0 +}; +goog.Uri.QueryData.prototype.isEmpty = function() { + this.ensureKeyMapInitialized_(); + return this.count_ == 0 +}; +goog.Uri.QueryData.prototype.containsKey = function(key) { + this.ensureKeyMapInitialized_(); + key = this.getKeyName_(key); + return this.keyMap_.containsKey(key) +}; +goog.Uri.QueryData.prototype.containsValue = function(value) { + var vals = this.getValues(); + return goog.array.contains(vals, value) +}; +goog.Uri.QueryData.prototype.getKeys = function() { + this.ensureKeyMapInitialized_(); + var vals = (this.keyMap_.getValues()); + var keys = this.keyMap_.getKeys(); + var rv = []; + for(var i = 0;i < keys.length;i++) { + var val = vals[i]; + for(var j = 0;j < val.length;j++) { + rv.push(keys[i]) + } + } + return rv +}; +goog.Uri.QueryData.prototype.getValues = function(opt_key) { + this.ensureKeyMapInitialized_(); + var rv = []; + if(opt_key) { + if(this.containsKey(opt_key)) { + rv = goog.array.concat(rv, this.keyMap_.get(this.getKeyName_(opt_key))) + } + }else { + var values = (this.keyMap_.getValues()); + for(var i = 0;i < values.length;i++) { + rv = goog.array.concat(rv, values[i]) + } + } + return rv +}; +goog.Uri.QueryData.prototype.set = function(key, value) { + this.ensureKeyMapInitialized_(); + this.invalidateCache_(); + key = this.getKeyName_(key); + if(this.containsKey(key)) { + this.count_ -= this.keyMap_.get(key).length + } + this.keyMap_.set(key, [value]); + this.count_++; + return this +}; +goog.Uri.QueryData.prototype.get = function(key, opt_default) { + var values = key ? this.getValues(key) : []; + if(goog.Uri.preserveParameterTypesCompatibilityFlag) { + return values.length > 0 ? values[0] : opt_default + }else { + return values.length > 0 ? String(values[0]) : opt_default + } +}; +goog.Uri.QueryData.prototype.setValues = function(key, values) { + this.remove(key); + if(values.length > 0) { + this.invalidateCache_(); + this.keyMap_.set(this.getKeyName_(key), goog.array.clone(values)); + this.count_ += values.length + } +}; +goog.Uri.QueryData.prototype.toString = function() { + if(this.encodedQuery_) { + return this.encodedQuery_ + } + if(!this.keyMap_) { + return"" + } + var sb = []; + var keys = this.keyMap_.getKeys(); + for(var i = 0;i < keys.length;i++) { + var key = keys[i]; + var encodedKey = goog.string.urlEncode(key); + var val = this.getValues(key); + for(var j = 0;j < val.length;j++) { + var param = encodedKey; + if(val[j] !== "") { + param += "\x3d" + goog.string.urlEncode(val[j]) + } + sb.push(param) + } + } + return this.encodedQuery_ = sb.join("\x26") +}; +goog.Uri.QueryData.prototype.toDecodedString = function() { + return goog.Uri.decodeOrEmpty_(this.toString()) +}; +goog.Uri.QueryData.prototype.invalidateCache_ = function() { + this.encodedQuery_ = null +}; +goog.Uri.QueryData.prototype.filterKeys = function(keys) { + this.ensureKeyMapInitialized_(); + goog.structs.forEach(this.keyMap_, function(value, key, map) { + if(!goog.array.contains(keys, key)) { + this.remove(key) + } + }, this); + return this +}; +goog.Uri.QueryData.prototype.clone = function() { + var rv = new goog.Uri.QueryData; + rv.encodedQuery_ = this.encodedQuery_; + if(this.keyMap_) { + rv.keyMap_ = this.keyMap_.clone(); + rv.count_ = this.count_ + } + return rv +}; +goog.Uri.QueryData.prototype.getKeyName_ = function(arg) { + var keyName = String(arg); + if(this.ignoreCase_) { + keyName = keyName.toLowerCase() + } + return keyName +}; +goog.Uri.QueryData.prototype.setIgnoreCase = function(ignoreCase) { + var resetKeys = ignoreCase && !this.ignoreCase_; + if(resetKeys) { + this.ensureKeyMapInitialized_(); + this.invalidateCache_(); + goog.structs.forEach(this.keyMap_, function(value, key) { + var lowerCase = key.toLowerCase(); + if(key != lowerCase) { + this.remove(key); + this.setValues(lowerCase, value) + } + }, this) + } + this.ignoreCase_ = ignoreCase +}; +goog.Uri.QueryData.prototype.extend = function(var_args) { + for(var i = 0;i < arguments.length;i++) { + var data = arguments[i]; + goog.structs.forEach(data, function(value, key) { + this.add(key, value) + }, this) + } +}; +goog.provide("goog.async.AnimationDelay"); +goog.require("goog.Disposable"); +goog.require("goog.events"); +goog.require("goog.functions"); +goog.async.AnimationDelay = function(listener, opt_window, opt_handler) { + goog.base(this); + this.listener_ = listener; + this.handler_ = opt_handler; + this.win_ = opt_window || window; + this.callback_ = goog.bind(this.doAction_, this) +}; +goog.inherits(goog.async.AnimationDelay, goog.Disposable); +goog.async.AnimationDelay.prototype.id_ = null; +goog.async.AnimationDelay.prototype.usingListeners_ = false; +goog.async.AnimationDelay.TIMEOUT = 20; +goog.async.AnimationDelay.MOZ_BEFORE_PAINT_EVENT_ = "MozBeforePaint"; +goog.async.AnimationDelay.prototype.start = function() { + this.stop(); + this.usingListeners_ = false; + var raf = this.getRaf_(); + var cancelRaf = this.getCancelRaf_(); + if(raf && !cancelRaf && this.win_.mozRequestAnimationFrame) { + this.id_ = goog.events.listen(this.win_, goog.async.AnimationDelay.MOZ_BEFORE_PAINT_EVENT_, this.callback_); + this.win_.mozRequestAnimationFrame(null); + this.usingListeners_ = true + }else { + if(raf && cancelRaf) { + this.id_ = raf.call(this.win_, this.callback_) + }else { + this.id_ = this.win_.setTimeout(goog.functions.lock(this.callback_), goog.async.AnimationDelay.TIMEOUT) + } + } +}; +goog.async.AnimationDelay.prototype.stop = function() { + if(this.isActive()) { + var raf = this.getRaf_(); + var cancelRaf = this.getCancelRaf_(); + if(raf && !cancelRaf && this.win_.mozRequestAnimationFrame) { + goog.events.unlistenByKey(this.id_) + }else { + if(raf && cancelRaf) { + cancelRaf.call(this.win_, (this.id_)) + }else { + this.win_.clearTimeout((this.id_)) + } + } + } + this.id_ = null +}; +goog.async.AnimationDelay.prototype.fire = function() { + this.stop(); + this.doAction_() +}; +goog.async.AnimationDelay.prototype.fireIfActive = function() { + if(this.isActive()) { + this.fire() + } +}; +goog.async.AnimationDelay.prototype.isActive = function() { + return this.id_ != null +}; +goog.async.AnimationDelay.prototype.doAction_ = function() { + if(this.usingListeners_ && this.id_) { + goog.events.unlistenByKey(this.id_) + } + this.id_ = null; + this.listener_.call(this.handler_, goog.now()) +}; +goog.async.AnimationDelay.prototype.disposeInternal = function() { + this.stop(); + goog.base(this, "disposeInternal") +}; +goog.async.AnimationDelay.prototype.getRaf_ = function() { + var win = this.win_; + return win.requestAnimationFrame || win.webkitRequestAnimationFrame || win.mozRequestAnimationFrame || win.oRequestAnimationFrame || win.msRequestAnimationFrame || null +}; +goog.async.AnimationDelay.prototype.getCancelRaf_ = function() { + var win = this.win_; + return win.cancelRequestAnimationFrame || win.webkitCancelRequestAnimationFrame || win.mozCancelRequestAnimationFrame || win.oCancelRequestAnimationFrame || win.msCancelRequestAnimationFrame || null +}; +goog.provide("goog.async.nextTick"); +goog.require("goog.debug.entryPointRegistry"); +goog.require("goog.functions"); +goog.async.nextTick = function(callback, opt_context) { + var cb = callback; + if(opt_context) { + cb = goog.bind(callback, opt_context) + } + cb = goog.async.nextTick.wrapCallback_(cb); + if(goog.isFunction(goog.global.setImmediate)) { + goog.global.setImmediate(cb); + return + } + if(!goog.async.nextTick.setImmediate_) { + goog.async.nextTick.setImmediate_ = goog.async.nextTick.getSetImmediateEmulator_() + } + goog.async.nextTick.setImmediate_(cb) +}; +goog.async.nextTick.setImmediate_; +goog.async.nextTick.getSetImmediateEmulator_ = function() { + var Channel = goog.global["MessageChannel"]; + if(typeof Channel === "undefined" && typeof window !== "undefined" && window.postMessage && window.addEventListener) { + Channel = function() { + var iframe = document.createElement("iframe"); + iframe.style.display = "none"; + iframe.src = ""; + document.body.appendChild(iframe); + var win = iframe.contentWindow; + var doc = win.document; + doc.open(); + doc.write(""); + doc.close(); + var message = "callImmediate" + Math.random(); + var origin = win.location.protocol + "//" + win.location.host; + var onmessage = goog.bind(function(e) { + if(e.origin != origin && e.data != message) { + return + } + this["port1"].onmessage() + }, this); + win.addEventListener("message", onmessage, false); + this["port1"] = {}; + this["port2"] = {postMessage:function() { + win.postMessage(message, origin) + }} + } + } + if(typeof Channel !== "undefined") { + var channel = new Channel; + var head = {}; + var tail = head; + channel["port1"].onmessage = function() { + head = head.next; + var cb = head.cb; + head.cb = null; + cb() + }; + return function(cb) { + tail.next = {cb:cb}; + tail = tail.next; + channel["port2"].postMessage(0) + } + } + if(typeof document !== "undefined" && "onreadystatechange" in document.createElement("script")) { + return function(cb) { + var script = document.createElement("script"); + script.onreadystatechange = function() { + script.onreadystatechange = null; + script.parentNode.removeChild(script); + script = null; + cb(); + cb = null + }; + document.documentElement.appendChild(script) + } + } + return function(cb) { + goog.global.setTimeout(cb, 0) + } +}; +goog.async.nextTick.wrapCallback_ = goog.functions.identity; +goog.debug.entryPointRegistry.register(function(transformer) { + goog.async.nextTick.wrapCallback_ = transformer +}); +goog.provide("goog.structs.Collection"); +goog.structs.Collection = function() { +}; +goog.structs.Collection.prototype.add; +goog.structs.Collection.prototype.remove; +goog.structs.Collection.prototype.contains; +goog.structs.Collection.prototype.getCount; +goog.provide("goog.structs.Set"); +goog.require("goog.structs"); +goog.require("goog.structs.Collection"); +goog.require("goog.structs.Map"); +goog.structs.Set = function(opt_values) { + this.map_ = new goog.structs.Map; + if(opt_values) { + this.addAll(opt_values) + } +}; +goog.structs.Set.getKey_ = function(val) { + var type = typeof val; + if(type == "object" && val || type == "function") { + return"o" + goog.getUid((val)) + }else { + return type.substr(0, 1) + val + } +}; +goog.structs.Set.prototype.getCount = function() { + return this.map_.getCount() +}; +goog.structs.Set.prototype.add = function(element) { + this.map_.set(goog.structs.Set.getKey_(element), element) +}; +goog.structs.Set.prototype.addAll = function(col) { + var values = goog.structs.getValues(col); + var l = values.length; + for(var i = 0;i < l;i++) { + this.add(values[i]) + } +}; +goog.structs.Set.prototype.removeAll = function(col) { + var values = goog.structs.getValues(col); + var l = values.length; + for(var i = 0;i < l;i++) { + this.remove(values[i]) + } +}; +goog.structs.Set.prototype.remove = function(element) { + return this.map_.remove(goog.structs.Set.getKey_(element)) +}; +goog.structs.Set.prototype.clear = function() { + this.map_.clear() +}; +goog.structs.Set.prototype.isEmpty = function() { + return this.map_.isEmpty() +}; +goog.structs.Set.prototype.contains = function(element) { + return this.map_.containsKey(goog.structs.Set.getKey_(element)) +}; +goog.structs.Set.prototype.containsAll = function(col) { + return goog.structs.every(col, this.contains, this) +}; +goog.structs.Set.prototype.intersection = function(col) { + var result = new goog.structs.Set; + var values = goog.structs.getValues(col); + for(var i = 0;i < values.length;i++) { + var value = values[i]; + if(this.contains(value)) { + result.add(value) + } + } + return result +}; +goog.structs.Set.prototype.difference = function(col) { + var result = this.clone(); + result.removeAll(col); + return result +}; +goog.structs.Set.prototype.getValues = function() { + return this.map_.getValues() +}; +goog.structs.Set.prototype.clone = function() { + return new goog.structs.Set(this) +}; +goog.structs.Set.prototype.equals = function(col) { + return this.getCount() == goog.structs.getCount(col) && this.isSubsetOf(col) +}; +goog.structs.Set.prototype.isSubsetOf = function(col) { + var colCount = goog.structs.getCount(col); + if(this.getCount() > colCount) { + return false + } + if(!(col instanceof goog.structs.Set) && colCount > 5) { + col = new goog.structs.Set(col) + } + return goog.structs.every(this, function(value) { + return goog.structs.contains(col, value) + }) +}; +goog.structs.Set.prototype.__iterator__ = function(opt_keys) { + return this.map_.__iterator__(false) +}; +goog.provide("goog.debug"); +goog.require("goog.array"); +goog.require("goog.string"); +goog.require("goog.structs.Set"); +goog.require("goog.userAgent"); +goog.define("goog.debug.LOGGING_ENABLED", goog.DEBUG); +goog.debug.catchErrors = function(logFunc, opt_cancel, opt_target) { + var target = opt_target || goog.global; + var oldErrorHandler = target.onerror; + var retVal = !!opt_cancel; + if(goog.userAgent.WEBKIT && !goog.userAgent.isVersionOrHigher("535.3")) { + retVal = !retVal + } + target.onerror = function(message, url, line) { + if(oldErrorHandler) { + oldErrorHandler(message, url, line) + } + logFunc({message:message, fileName:url, line:line}); + return retVal + } +}; +goog.debug.expose = function(obj, opt_showFn) { + if(typeof obj == "undefined") { + return"undefined" + } + if(obj == null) { + return"NULL" + } + var str = []; + for(var x in obj) { + if(!opt_showFn && goog.isFunction(obj[x])) { + continue + } + var s = x + " \x3d "; + try { + s += obj[x] + }catch(e) { + s += "*** " + e + " ***" + } + str.push(s) + } + return str.join("\n") +}; +goog.debug.deepExpose = function(obj, opt_showFn) { + var previous = new goog.structs.Set; + var str = []; + var helper = function(obj, space) { + var nestspace = space + " "; + var indentMultiline = function(str) { + return str.replace(/\n/g, "\n" + space) + }; + try { + if(!goog.isDef(obj)) { + str.push("undefined") + }else { + if(goog.isNull(obj)) { + str.push("NULL") + }else { + if(goog.isString(obj)) { + str.push('"' + indentMultiline(obj) + '"') + }else { + if(goog.isFunction(obj)) { + str.push(indentMultiline(String(obj))) + }else { + if(goog.isObject(obj)) { + if(previous.contains(obj)) { + str.push("*** reference loop detected ***") + }else { + previous.add(obj); + str.push("{"); + for(var x in obj) { + if(!opt_showFn && goog.isFunction(obj[x])) { + continue + } + str.push("\n"); + str.push(nestspace); + str.push(x + " \x3d "); + helper(obj[x], nestspace) + } + str.push("\n" + space + "}") + } + }else { + str.push(obj) + } + } + } + } + } + }catch(e) { + str.push("*** " + e + " ***") + } + }; + helper(obj, ""); + return str.join("") +}; +goog.debug.exposeArray = function(arr) { + var str = []; + for(var i = 0;i < arr.length;i++) { + if(goog.isArray(arr[i])) { + str.push(goog.debug.exposeArray(arr[i])) + }else { + str.push(arr[i]) + } + } + return"[ " + str.join(", ") + " ]" +}; +goog.debug.exposeException = function(err, opt_fn) { + try { + var e = goog.debug.normalizeErrorObject(err); + var error = "Message: " + goog.string.htmlEscape(e.message) + '\nUrl: \x3ca href\x3d"view-source:' + e.fileName + '" target\x3d"_new"\x3e' + e.fileName + "\x3c/a\x3e\nLine: " + e.lineNumber + "\n\nBrowser stack:\n" + goog.string.htmlEscape(e.stack + "-\x3e ") + "[end]\n\nJS stack traversal:\n" + goog.string.htmlEscape(goog.debug.getStacktrace(opt_fn) + "-\x3e "); + return error + }catch(e2) { + return"Exception trying to expose exception! You win, we lose. " + e2 + } +}; +goog.debug.normalizeErrorObject = function(err) { + var href = goog.getObjectByName("window.location.href"); + if(goog.isString(err)) { + return{"message":err, "name":"Unknown error", "lineNumber":"Not available", "fileName":href, "stack":"Not available"} + } + var lineNumber, fileName; + var threwError = false; + try { + lineNumber = err.lineNumber || err.line || "Not available" + }catch(e) { + lineNumber = "Not available"; + threwError = true + } + try { + fileName = err.fileName || err.filename || err.sourceURL || goog.global["$googDebugFname"] || href + }catch(e) { + fileName = "Not available"; + threwError = true + } + if(threwError || !err.lineNumber || !err.fileName || !err.stack || !err.message || !err.name) { + return{"message":err.message || "Not available", "name":err.name || "UnknownError", "lineNumber":lineNumber, "fileName":fileName, "stack":err.stack || "Not available"} + } + return err +}; +goog.debug.enhanceError = function(err, opt_message) { + var error = typeof err == "string" ? Error(err) : err; + if(!error.stack) { + error.stack = goog.debug.getStacktrace(arguments.callee.caller) + } + if(opt_message) { + var x = 0; + while(error["message" + x]) { + ++x + } + error["message" + x] = String(opt_message) + } + return error +}; +goog.debug.getStacktraceSimple = function(opt_depth) { + var sb = []; + var fn = arguments.callee.caller; + var depth = 0; + while(fn && (!opt_depth || depth < opt_depth)) { + sb.push(goog.debug.getFunctionName(fn)); + sb.push("()\n"); + try { + fn = fn.caller + }catch(e) { + sb.push("[exception trying to get caller]\n"); + break + } + depth++; + if(depth >= goog.debug.MAX_STACK_DEPTH) { + sb.push("[...long stack...]"); + break + } + } + if(opt_depth && depth >= opt_depth) { + sb.push("[...reached max depth limit...]") + }else { + sb.push("[end]") + } + return sb.join("") +}; +goog.debug.MAX_STACK_DEPTH = 50; +goog.debug.getStacktrace = function(opt_fn) { + return goog.debug.getStacktraceHelper_(opt_fn || arguments.callee.caller, []) +}; +goog.debug.getStacktraceHelper_ = function(fn, visited) { + var sb = []; + if(goog.array.contains(visited, fn)) { + sb.push("[...circular reference...]") + }else { + if(fn && visited.length < goog.debug.MAX_STACK_DEPTH) { + sb.push(goog.debug.getFunctionName(fn) + "("); + var args = fn.arguments; + for(var i = 0;i < args.length;i++) { + if(i > 0) { + sb.push(", ") + } + var argDesc; + var arg = args[i]; + switch(typeof arg) { + case "object": + argDesc = arg ? "object" : "null"; + break; + case "string": + argDesc = arg; + break; + case "number": + argDesc = String(arg); + break; + case "boolean": + argDesc = arg ? "true" : "false"; + break; + case "function": + argDesc = goog.debug.getFunctionName(arg); + argDesc = argDesc ? argDesc : "[fn]"; + break; + case "undefined": + ; + default: + argDesc = typeof arg; + break + } + if(argDesc.length > 40) { + argDesc = argDesc.substr(0, 40) + "..." + } + sb.push(argDesc) + } + visited.push(fn); + sb.push(")\n"); + try { + sb.push(goog.debug.getStacktraceHelper_(fn.caller, visited)) + }catch(e) { + sb.push("[exception trying to get caller]\n") + } + }else { + if(fn) { + sb.push("[...long stack...]") + }else { + sb.push("[end]") + } + } + } + return sb.join("") +}; +goog.debug.setFunctionResolver = function(resolver) { + goog.debug.fnNameResolver_ = resolver +}; +goog.debug.getFunctionName = function(fn) { + if(goog.debug.fnNameCache_[fn]) { + return goog.debug.fnNameCache_[fn] + } + if(goog.debug.fnNameResolver_) { + var name = goog.debug.fnNameResolver_(fn); + if(name) { + goog.debug.fnNameCache_[fn] = name; + return name + } + } + var functionSource = String(fn); + if(!goog.debug.fnNameCache_[functionSource]) { + var matches = /function ([^\(]+)/.exec(functionSource); + if(matches) { + var method = matches[1]; + goog.debug.fnNameCache_[functionSource] = method + }else { + goog.debug.fnNameCache_[functionSource] = "[Anonymous]" + } + } + return goog.debug.fnNameCache_[functionSource] +}; +goog.debug.makeWhitespaceVisible = function(string) { + return string.replace(/ /g, "[_]").replace(/\f/g, "[f]").replace(/\n/g, "[n]\n").replace(/\r/g, "[r]").replace(/\t/g, "[t]") +}; +goog.debug.fnNameCache_ = {}; +goog.debug.fnNameResolver_; +goog.provide("goog.debug.LogRecord"); +goog.debug.LogRecord = function(level, msg, loggerName, opt_time, opt_sequenceNumber) { + this.reset(level, msg, loggerName, opt_time, opt_sequenceNumber) +}; +goog.debug.LogRecord.prototype.time_; +goog.debug.LogRecord.prototype.level_; +goog.debug.LogRecord.prototype.msg_; +goog.debug.LogRecord.prototype.loggerName_; +goog.debug.LogRecord.prototype.sequenceNumber_ = 0; +goog.debug.LogRecord.prototype.exception_ = null; +goog.debug.LogRecord.prototype.exceptionText_ = null; +goog.define("goog.debug.LogRecord.ENABLE_SEQUENCE_NUMBERS", true); +goog.debug.LogRecord.nextSequenceNumber_ = 0; +goog.debug.LogRecord.prototype.reset = function(level, msg, loggerName, opt_time, opt_sequenceNumber) { + if(goog.debug.LogRecord.ENABLE_SEQUENCE_NUMBERS) { + this.sequenceNumber_ = typeof opt_sequenceNumber == "number" ? opt_sequenceNumber : goog.debug.LogRecord.nextSequenceNumber_++ + } + this.time_ = opt_time || goog.now(); + this.level_ = level; + this.msg_ = msg; + this.loggerName_ = loggerName; + delete this.exception_; + delete this.exceptionText_ +}; +goog.debug.LogRecord.prototype.getLoggerName = function() { + return this.loggerName_ +}; +goog.debug.LogRecord.prototype.getException = function() { + return this.exception_ +}; +goog.debug.LogRecord.prototype.setException = function(exception) { + this.exception_ = exception +}; +goog.debug.LogRecord.prototype.getExceptionText = function() { + return this.exceptionText_ +}; +goog.debug.LogRecord.prototype.setExceptionText = function(text) { + this.exceptionText_ = text +}; +goog.debug.LogRecord.prototype.setLoggerName = function(loggerName) { + this.loggerName_ = loggerName +}; +goog.debug.LogRecord.prototype.getLevel = function() { + return this.level_ +}; +goog.debug.LogRecord.prototype.setLevel = function(level) { + this.level_ = level +}; +goog.debug.LogRecord.prototype.getMessage = function() { + return this.msg_ +}; +goog.debug.LogRecord.prototype.setMessage = function(msg) { + this.msg_ = msg +}; +goog.debug.LogRecord.prototype.getMillis = function() { + return this.time_ +}; +goog.debug.LogRecord.prototype.setMillis = function(time) { + this.time_ = time +}; +goog.debug.LogRecord.prototype.getSequenceNumber = function() { + return this.sequenceNumber_ +}; +goog.provide("goog.debug.LogBuffer"); +goog.require("goog.asserts"); +goog.require("goog.debug.LogRecord"); +goog.debug.LogBuffer = function() { + goog.asserts.assert(goog.debug.LogBuffer.isBufferingEnabled(), "Cannot use goog.debug.LogBuffer without defining " + "goog.debug.LogBuffer.CAPACITY."); + this.clear() +}; +goog.debug.LogBuffer.getInstance = function() { + if(!goog.debug.LogBuffer.instance_) { + goog.debug.LogBuffer.instance_ = new goog.debug.LogBuffer + } + return goog.debug.LogBuffer.instance_ +}; +goog.define("goog.debug.LogBuffer.CAPACITY", 0); +goog.debug.LogBuffer.prototype.buffer_; +goog.debug.LogBuffer.prototype.curIndex_; +goog.debug.LogBuffer.prototype.isFull_; +goog.debug.LogBuffer.prototype.addRecord = function(level, msg, loggerName) { + var curIndex = (this.curIndex_ + 1) % goog.debug.LogBuffer.CAPACITY; + this.curIndex_ = curIndex; + if(this.isFull_) { + var ret = this.buffer_[curIndex]; + ret.reset(level, msg, loggerName); + return ret + } + this.isFull_ = curIndex == goog.debug.LogBuffer.CAPACITY - 1; + return this.buffer_[curIndex] = new goog.debug.LogRecord(level, msg, loggerName) +}; +goog.debug.LogBuffer.isBufferingEnabled = function() { + return goog.debug.LogBuffer.CAPACITY > 0 +}; +goog.debug.LogBuffer.prototype.clear = function() { + this.buffer_ = new Array(goog.debug.LogBuffer.CAPACITY); + this.curIndex_ = -1; + this.isFull_ = false +}; +goog.debug.LogBuffer.prototype.forEachRecord = function(func) { + var buffer = this.buffer_; + if(!buffer[0]) { + return + } + var curIndex = this.curIndex_; + var i = this.isFull_ ? curIndex : -1; + do { + i = (i + 1) % goog.debug.LogBuffer.CAPACITY; + func((buffer[i])) + }while(i != curIndex) +}; +goog.provide("goog.debug.LogManager"); +goog.provide("goog.debug.Logger"); +goog.provide("goog.debug.Logger.Level"); +goog.require("goog.array"); +goog.require("goog.asserts"); +goog.require("goog.debug"); +goog.require("goog.debug.LogBuffer"); +goog.require("goog.debug.LogRecord"); +goog.debug.Logger = function(name) { + this.name_ = name +}; +goog.debug.Logger.prototype.parent_ = null; +goog.debug.Logger.prototype.level_ = null; +goog.debug.Logger.prototype.children_ = null; +goog.debug.Logger.prototype.handlers_ = null; +goog.define("goog.debug.Logger.ENABLE_HIERARCHY", true); +if(!goog.debug.Logger.ENABLE_HIERARCHY) { + goog.debug.Logger.rootHandlers_ = []; + goog.debug.Logger.rootLevel_ +} +goog.debug.Logger.Level = function(name, value) { + this.name = name; + this.value = value +}; +goog.debug.Logger.Level.prototype.toString = function() { + return this.name +}; +goog.debug.Logger.Level.OFF = new goog.debug.Logger.Level("OFF", Infinity); +goog.debug.Logger.Level.SHOUT = new goog.debug.Logger.Level("SHOUT", 1200); +goog.debug.Logger.Level.SEVERE = new goog.debug.Logger.Level("SEVERE", 1E3); +goog.debug.Logger.Level.WARNING = new goog.debug.Logger.Level("WARNING", 900); +goog.debug.Logger.Level.INFO = new goog.debug.Logger.Level("INFO", 800); +goog.debug.Logger.Level.CONFIG = new goog.debug.Logger.Level("CONFIG", 700); +goog.debug.Logger.Level.FINE = new goog.debug.Logger.Level("FINE", 500); +goog.debug.Logger.Level.FINER = new goog.debug.Logger.Level("FINER", 400); +goog.debug.Logger.Level.FINEST = new goog.debug.Logger.Level("FINEST", 300); +goog.debug.Logger.Level.ALL = new goog.debug.Logger.Level("ALL", 0); +goog.debug.Logger.Level.PREDEFINED_LEVELS = [goog.debug.Logger.Level.OFF, goog.debug.Logger.Level.SHOUT, goog.debug.Logger.Level.SEVERE, goog.debug.Logger.Level.WARNING, goog.debug.Logger.Level.INFO, goog.debug.Logger.Level.CONFIG, goog.debug.Logger.Level.FINE, goog.debug.Logger.Level.FINER, goog.debug.Logger.Level.FINEST, goog.debug.Logger.Level.ALL]; +goog.debug.Logger.Level.predefinedLevelsCache_ = null; +goog.debug.Logger.Level.createPredefinedLevelsCache_ = function() { + goog.debug.Logger.Level.predefinedLevelsCache_ = {}; + for(var i = 0, level;level = goog.debug.Logger.Level.PREDEFINED_LEVELS[i];i++) { + goog.debug.Logger.Level.predefinedLevelsCache_[level.value] = level; + goog.debug.Logger.Level.predefinedLevelsCache_[level.name] = level + } +}; +goog.debug.Logger.Level.getPredefinedLevel = function(name) { + if(!goog.debug.Logger.Level.predefinedLevelsCache_) { + goog.debug.Logger.Level.createPredefinedLevelsCache_() + } + return goog.debug.Logger.Level.predefinedLevelsCache_[name] || null +}; +goog.debug.Logger.Level.getPredefinedLevelByValue = function(value) { + if(!goog.debug.Logger.Level.predefinedLevelsCache_) { + goog.debug.Logger.Level.createPredefinedLevelsCache_() + } + if(value in goog.debug.Logger.Level.predefinedLevelsCache_) { + return goog.debug.Logger.Level.predefinedLevelsCache_[value] + } + for(var i = 0;i < goog.debug.Logger.Level.PREDEFINED_LEVELS.length;++i) { + var level = goog.debug.Logger.Level.PREDEFINED_LEVELS[i]; + if(level.value <= value) { + return level + } + } + return null +}; +goog.debug.Logger.getLogger = function(name) { + return goog.debug.LogManager.getLogger(name) +}; +goog.debug.Logger.logToProfilers = function(msg) { + if(goog.global["console"]) { + if(goog.global["console"]["timeStamp"]) { + goog.global["console"]["timeStamp"](msg) + }else { + if(goog.global["console"]["markTimeline"]) { + goog.global["console"]["markTimeline"](msg) + } + } + } + if(goog.global["msWriteProfilerMark"]) { + goog.global["msWriteProfilerMark"](msg) + } +}; +goog.debug.Logger.prototype.getName = function() { + return this.name_ +}; +goog.debug.Logger.prototype.addHandler = function(handler) { + if(goog.debug.LOGGING_ENABLED) { + if(goog.debug.Logger.ENABLE_HIERARCHY) { + if(!this.handlers_) { + this.handlers_ = [] + } + this.handlers_.push(handler) + }else { + goog.asserts.assert(!this.name_, "Cannot call addHandler on a non-root logger when " + "goog.debug.Logger.ENABLE_HIERARCHY is false."); + goog.debug.Logger.rootHandlers_.push(handler) + } + } +}; +goog.debug.Logger.prototype.removeHandler = function(handler) { + if(goog.debug.LOGGING_ENABLED) { + var handlers = goog.debug.Logger.ENABLE_HIERARCHY ? this.handlers_ : goog.debug.Logger.rootHandlers_; + return!!handlers && goog.array.remove(handlers, handler) + }else { + return false + } +}; +goog.debug.Logger.prototype.getParent = function() { + return this.parent_ +}; +goog.debug.Logger.prototype.getChildren = function() { + if(!this.children_) { + this.children_ = {} + } + return this.children_ +}; +goog.debug.Logger.prototype.setLevel = function(level) { + if(goog.debug.LOGGING_ENABLED) { + if(goog.debug.Logger.ENABLE_HIERARCHY) { + this.level_ = level + }else { + goog.asserts.assert(!this.name_, "Cannot call setLevel() on a non-root logger when " + "goog.debug.Logger.ENABLE_HIERARCHY is false."); + goog.debug.Logger.rootLevel_ = level + } + } +}; +goog.debug.Logger.prototype.getLevel = function() { + return goog.debug.LOGGING_ENABLED ? this.level_ : goog.debug.Logger.Level.OFF +}; +goog.debug.Logger.prototype.getEffectiveLevel = function() { + if(!goog.debug.LOGGING_ENABLED) { + return goog.debug.Logger.Level.OFF + } + if(!goog.debug.Logger.ENABLE_HIERARCHY) { + return goog.debug.Logger.rootLevel_ + } + if(this.level_) { + return this.level_ + } + if(this.parent_) { + return this.parent_.getEffectiveLevel() + } + goog.asserts.fail("Root logger has no level set."); + return null +}; +goog.debug.Logger.prototype.isLoggable = function(level) { + return goog.debug.LOGGING_ENABLED && level.value >= this.getEffectiveLevel().value +}; +goog.debug.Logger.prototype.log = function(level, msg, opt_exception) { + if(goog.debug.LOGGING_ENABLED && this.isLoggable(level)) { + this.doLogRecord_(this.getLogRecord(level, msg, opt_exception)) + } +}; +goog.debug.Logger.prototype.getLogRecord = function(level, msg, opt_exception) { + if(goog.debug.LogBuffer.isBufferingEnabled()) { + var logRecord = goog.debug.LogBuffer.getInstance().addRecord(level, msg, this.name_) + }else { + logRecord = new goog.debug.LogRecord(level, String(msg), this.name_) + } + if(opt_exception) { + logRecord.setException(opt_exception); + logRecord.setExceptionText(goog.debug.exposeException(opt_exception, arguments.callee.caller)) + } + return logRecord +}; +goog.debug.Logger.prototype.shout = function(msg, opt_exception) { + if(goog.debug.LOGGING_ENABLED) { + this.log(goog.debug.Logger.Level.SHOUT, msg, opt_exception) + } +}; +goog.debug.Logger.prototype.severe = function(msg, opt_exception) { + if(goog.debug.LOGGING_ENABLED) { + this.log(goog.debug.Logger.Level.SEVERE, msg, opt_exception) + } +}; +goog.debug.Logger.prototype.warning = function(msg, opt_exception) { + if(goog.debug.LOGGING_ENABLED) { + this.log(goog.debug.Logger.Level.WARNING, msg, opt_exception) + } +}; +goog.debug.Logger.prototype.info = function(msg, opt_exception) { + if(goog.debug.LOGGING_ENABLED) { + this.log(goog.debug.Logger.Level.INFO, msg, opt_exception) + } +}; +goog.debug.Logger.prototype.config = function(msg, opt_exception) { + if(goog.debug.LOGGING_ENABLED) { + this.log(goog.debug.Logger.Level.CONFIG, msg, opt_exception) + } +}; +goog.debug.Logger.prototype.fine = function(msg, opt_exception) { + if(goog.debug.LOGGING_ENABLED) { + this.log(goog.debug.Logger.Level.FINE, msg, opt_exception) + } +}; +goog.debug.Logger.prototype.finer = function(msg, opt_exception) { + if(goog.debug.LOGGING_ENABLED) { + this.log(goog.debug.Logger.Level.FINER, msg, opt_exception) + } +}; +goog.debug.Logger.prototype.finest = function(msg, opt_exception) { + if(goog.debug.LOGGING_ENABLED) { + this.log(goog.debug.Logger.Level.FINEST, msg, opt_exception) + } +}; +goog.debug.Logger.prototype.logRecord = function(logRecord) { + if(goog.debug.LOGGING_ENABLED && this.isLoggable(logRecord.getLevel())) { + this.doLogRecord_(logRecord) + } +}; +goog.debug.Logger.prototype.doLogRecord_ = function(logRecord) { + goog.debug.Logger.logToProfilers("log:" + logRecord.getMessage()); + if(goog.debug.Logger.ENABLE_HIERARCHY) { + var target = this; + while(target) { + target.callPublish_(logRecord); + target = target.getParent() + } + }else { + for(var i = 0, handler;handler = goog.debug.Logger.rootHandlers_[i++];) { + handler(logRecord) + } + } +}; +goog.debug.Logger.prototype.callPublish_ = function(logRecord) { + if(this.handlers_) { + for(var i = 0, handler;handler = this.handlers_[i];i++) { + handler(logRecord) + } + } +}; +goog.debug.Logger.prototype.setParent_ = function(parent) { + this.parent_ = parent +}; +goog.debug.Logger.prototype.addChild_ = function(name, logger) { + this.getChildren()[name] = logger +}; +goog.debug.LogManager = {}; +goog.debug.LogManager.loggers_ = {}; +goog.debug.LogManager.rootLogger_ = null; +goog.debug.LogManager.initialize = function() { + if(!goog.debug.LogManager.rootLogger_) { + goog.debug.LogManager.rootLogger_ = new goog.debug.Logger(""); + goog.debug.LogManager.loggers_[""] = goog.debug.LogManager.rootLogger_; + goog.debug.LogManager.rootLogger_.setLevel(goog.debug.Logger.Level.CONFIG) + } +}; +goog.debug.LogManager.getLoggers = function() { + return goog.debug.LogManager.loggers_ +}; +goog.debug.LogManager.getRoot = function() { + goog.debug.LogManager.initialize(); + return(goog.debug.LogManager.rootLogger_) +}; +goog.debug.LogManager.getLogger = function(name) { + goog.debug.LogManager.initialize(); + var ret = goog.debug.LogManager.loggers_[name]; + return ret || goog.debug.LogManager.createLogger_(name) +}; +goog.debug.LogManager.createFunctionForCatchErrors = function(opt_logger) { + return function(info) { + var logger = opt_logger || goog.debug.LogManager.getRoot(); + logger.severe("Error: " + info.message + " (" + info.fileName + " @ Line: " + info.line + ")") + } +}; +goog.debug.LogManager.createLogger_ = function(name) { + var logger = new goog.debug.Logger(name); + if(goog.debug.Logger.ENABLE_HIERARCHY) { + var lastDotIndex = name.lastIndexOf("."); + var parentName = name.substr(0, lastDotIndex); + var leafName = name.substr(lastDotIndex + 1); + var parentLogger = goog.debug.LogManager.getLogger(parentName); + parentLogger.addChild_(leafName, logger); + logger.setParent_(parentLogger) + } + goog.debug.LogManager.loggers_[name] = logger; + return logger +}; +goog.provide("goog.debug.RelativeTimeProvider"); +goog.debug.RelativeTimeProvider = function() { + this.relativeTimeStart_ = goog.now() +}; +goog.debug.RelativeTimeProvider.defaultInstance_ = new goog.debug.RelativeTimeProvider; +goog.debug.RelativeTimeProvider.prototype.set = function(timeStamp) { + this.relativeTimeStart_ = timeStamp +}; +goog.debug.RelativeTimeProvider.prototype.reset = function() { + this.set(goog.now()) +}; +goog.debug.RelativeTimeProvider.prototype.get = function() { + return this.relativeTimeStart_ +}; +goog.debug.RelativeTimeProvider.getDefaultInstance = function() { + return goog.debug.RelativeTimeProvider.defaultInstance_ +}; +goog.provide("goog.debug.Formatter"); +goog.provide("goog.debug.HtmlFormatter"); +goog.provide("goog.debug.TextFormatter"); +goog.require("goog.debug.RelativeTimeProvider"); +goog.require("goog.string"); +goog.debug.Formatter = function(opt_prefix) { + this.prefix_ = opt_prefix || ""; + this.startTimeProvider_ = goog.debug.RelativeTimeProvider.getDefaultInstance() +}; +goog.debug.Formatter.prototype.showAbsoluteTime = true; +goog.debug.Formatter.prototype.showRelativeTime = true; +goog.debug.Formatter.prototype.showLoggerName = true; +goog.debug.Formatter.prototype.showExceptionText = false; +goog.debug.Formatter.prototype.showSeverityLevel = false; +goog.debug.Formatter.prototype.formatRecord = goog.abstractMethod; +goog.debug.Formatter.prototype.setStartTimeProvider = function(provider) { + this.startTimeProvider_ = provider +}; +goog.debug.Formatter.prototype.getStartTimeProvider = function() { + return this.startTimeProvider_ +}; +goog.debug.Formatter.prototype.resetRelativeTimeStart = function() { + this.startTimeProvider_.reset() +}; +goog.debug.Formatter.getDateTimeStamp_ = function(logRecord) { + var time = new Date(logRecord.getMillis()); + return goog.debug.Formatter.getTwoDigitString_(time.getFullYear() - 2E3) + goog.debug.Formatter.getTwoDigitString_(time.getMonth() + 1) + goog.debug.Formatter.getTwoDigitString_(time.getDate()) + " " + goog.debug.Formatter.getTwoDigitString_(time.getHours()) + ":" + goog.debug.Formatter.getTwoDigitString_(time.getMinutes()) + ":" + goog.debug.Formatter.getTwoDigitString_(time.getSeconds()) + "." + goog.debug.Formatter.getTwoDigitString_(Math.floor(time.getMilliseconds() / 10)) +}; +goog.debug.Formatter.getTwoDigitString_ = function(n) { + if(n < 10) { + return"0" + n + } + return String(n) +}; +goog.debug.Formatter.getRelativeTime_ = function(logRecord, relativeTimeStart) { + var ms = logRecord.getMillis() - relativeTimeStart; + var sec = ms / 1E3; + var str = sec.toFixed(3); + var spacesToPrepend = 0; + if(sec < 1) { + spacesToPrepend = 2 + }else { + while(sec < 100) { + spacesToPrepend++; + sec *= 10 + } + } + while(spacesToPrepend-- > 0) { + str = " " + str + } + return str +}; +goog.debug.HtmlFormatter = function(opt_prefix) { + goog.debug.Formatter.call(this, opt_prefix) +}; +goog.inherits(goog.debug.HtmlFormatter, goog.debug.Formatter); +goog.debug.HtmlFormatter.prototype.showExceptionText = true; +goog.debug.HtmlFormatter.prototype.formatRecord = function(logRecord) { + var className; + switch(logRecord.getLevel().value) { + case goog.debug.Logger.Level.SHOUT.value: + className = "dbg-sh"; + break; + case goog.debug.Logger.Level.SEVERE.value: + className = "dbg-sev"; + break; + case goog.debug.Logger.Level.WARNING.value: + className = "dbg-w"; + break; + case goog.debug.Logger.Level.INFO.value: + className = "dbg-i"; + break; + case goog.debug.Logger.Level.FINE.value: + ; + default: + className = "dbg-f"; + break + } + var sb = []; + sb.push(this.prefix_, " "); + if(this.showAbsoluteTime) { + sb.push("[", goog.debug.Formatter.getDateTimeStamp_(logRecord), "] ") + } + if(this.showRelativeTime) { + sb.push("[", goog.string.whitespaceEscape(goog.debug.Formatter.getRelativeTime_(logRecord, this.startTimeProvider_.get())), "s] ") + } + if(this.showLoggerName) { + sb.push("[", goog.string.htmlEscape(logRecord.getLoggerName()), "] ") + } + if(this.showSeverityLevel) { + sb.push("[", goog.string.htmlEscape(logRecord.getLevel().name), "] ") + } + sb.push('\x3cspan class\x3d"', className, '"\x3e', goog.string.newLineToBr(goog.string.whitespaceEscape(goog.string.htmlEscape(logRecord.getMessage())))); + if(this.showExceptionText && logRecord.getException()) { + sb.push("\x3cbr\x3e", goog.string.newLineToBr(goog.string.whitespaceEscape(logRecord.getExceptionText() || ""))) + } + sb.push("\x3c/span\x3e\x3cbr\x3e"); + return sb.join("") +}; +goog.debug.TextFormatter = function(opt_prefix) { + goog.debug.Formatter.call(this, opt_prefix) +}; +goog.inherits(goog.debug.TextFormatter, goog.debug.Formatter); +goog.debug.TextFormatter.prototype.formatRecord = function(logRecord) { + var sb = []; + sb.push(this.prefix_, " "); + if(this.showAbsoluteTime) { + sb.push("[", goog.debug.Formatter.getDateTimeStamp_(logRecord), "] ") + } + if(this.showRelativeTime) { + sb.push("[", goog.debug.Formatter.getRelativeTime_(logRecord, this.startTimeProvider_.get()), "s] ") + } + if(this.showLoggerName) { + sb.push("[", logRecord.getLoggerName(), "] ") + } + if(this.showSeverityLevel) { + sb.push("[", logRecord.getLevel().name, "] ") + } + sb.push(logRecord.getMessage(), "\n"); + if(this.showExceptionText && logRecord.getException()) { + sb.push(logRecord.getExceptionText(), "\n") + } + return sb.join("") +}; +goog.provide("goog.debug.Console"); +goog.require("goog.debug.LogManager"); +goog.require("goog.debug.Logger.Level"); +goog.require("goog.debug.TextFormatter"); +goog.debug.Console = function() { + this.publishHandler_ = goog.bind(this.addLogRecord, this); + this.formatter_ = new goog.debug.TextFormatter; + this.formatter_.showAbsoluteTime = false; + this.formatter_.showExceptionText = false; + this.isCapturing_ = false; + this.logBuffer_ = ""; + this.filteredLoggers_ = {} +}; +goog.debug.Console.prototype.getFormatter = function() { + return this.formatter_ +}; +goog.debug.Console.prototype.setCapturing = function(capturing) { + if(capturing == this.isCapturing_) { + return + } + var rootLogger = goog.debug.LogManager.getRoot(); + if(capturing) { + rootLogger.addHandler(this.publishHandler_) + }else { + rootLogger.removeHandler(this.publishHandler_); + this.logBuffer = "" + } + this.isCapturing_ = capturing +}; +goog.debug.Console.prototype.addLogRecord = function(logRecord) { + if(this.filteredLoggers_[logRecord.getLoggerName()]) { + return + } + var record = this.formatter_.formatRecord(logRecord); + var console = goog.debug.Console.console_; + if(console) { + switch(logRecord.getLevel()) { + case goog.debug.Logger.Level.SHOUT: + goog.debug.Console.logToConsole_(console, "info", record); + break; + case goog.debug.Logger.Level.SEVERE: + goog.debug.Console.logToConsole_(console, "error", record); + break; + case goog.debug.Logger.Level.WARNING: + goog.debug.Console.logToConsole_(console, "warn", record); + break; + default: + goog.debug.Console.logToConsole_(console, "debug", record); + break + } + }else { + if(window.opera) { + window.opera["postError"](record) + }else { + this.logBuffer_ += record + } + } +}; +goog.debug.Console.prototype.addFilter = function(loggerName) { + this.filteredLoggers_[loggerName] = true +}; +goog.debug.Console.prototype.removeFilter = function(loggerName) { + delete this.filteredLoggers_[loggerName] +}; +goog.debug.Console.instance = null; +goog.debug.Console.console_ = window.console; +goog.debug.Console.setConsole = function(console) { + goog.debug.Console.console_ = console +}; +goog.debug.Console.autoInstall = function() { + if(!goog.debug.Console.instance) { + goog.debug.Console.instance = new goog.debug.Console + } + if(window.location.href.indexOf("Debug\x3dtrue") != -1) { + goog.debug.Console.instance.setCapturing(true) + } +}; +goog.debug.Console.show = function() { + alert(goog.debug.Console.instance.logBuffer_) +}; +goog.debug.Console.logToConsole_ = function(console, fnName, record) { + if(console[fnName]) { + console[fnName](record) + }else { + console.log(record) + } +}; +goog.provide("goog.dom.ViewportSizeMonitor"); +goog.require("goog.dom"); +goog.require("goog.events"); +goog.require("goog.events.EventTarget"); +goog.require("goog.events.EventType"); +goog.require("goog.math.Size"); +goog.dom.ViewportSizeMonitor = function(opt_window) { + goog.events.EventTarget.call(this); + this.window_ = opt_window || window; + this.listenerKey_ = goog.events.listen(this.window_, goog.events.EventType.RESIZE, this.handleResize_, false, this); + this.size_ = goog.dom.getViewportSize(this.window_) +}; +goog.inherits(goog.dom.ViewportSizeMonitor, goog.events.EventTarget); +goog.dom.ViewportSizeMonitor.getInstanceForWindow = function(opt_window) { + var currentWindow = opt_window || window; + var uid = goog.getUid(currentWindow); + return goog.dom.ViewportSizeMonitor.windowInstanceMap_[uid] = goog.dom.ViewportSizeMonitor.windowInstanceMap_[uid] || new goog.dom.ViewportSizeMonitor(currentWindow) +}; +goog.dom.ViewportSizeMonitor.removeInstanceForWindow = function(opt_window) { + var uid = goog.getUid(opt_window || window); + goog.dispose(goog.dom.ViewportSizeMonitor.windowInstanceMap_[uid]); + delete goog.dom.ViewportSizeMonitor.windowInstanceMap_[uid] +}; +goog.dom.ViewportSizeMonitor.windowInstanceMap_ = {}; +goog.dom.ViewportSizeMonitor.prototype.listenerKey_ = null; +goog.dom.ViewportSizeMonitor.prototype.window_ = null; +goog.dom.ViewportSizeMonitor.prototype.size_ = null; +goog.dom.ViewportSizeMonitor.prototype.getSize = function() { + return this.size_ ? this.size_.clone() : null +}; +goog.dom.ViewportSizeMonitor.prototype.disposeInternal = function() { + goog.dom.ViewportSizeMonitor.superClass_.disposeInternal.call(this); + if(this.listenerKey_) { + goog.events.unlistenByKey(this.listenerKey_); + this.listenerKey_ = null + } + this.window_ = null; + this.size_ = null +}; +goog.dom.ViewportSizeMonitor.prototype.handleResize_ = function(event) { + var size = goog.dom.getViewportSize(this.window_); + if(!goog.math.Size.equals(size, this.size_)) { + this.size_ = size; + this.dispatchEvent(goog.events.EventType.RESIZE) + } +}; +goog.provide("goog.events.KeyCodes"); +goog.require("goog.userAgent"); +goog.events.KeyCodes = {WIN_KEY_FF_LINUX:0, MAC_ENTER:3, BACKSPACE:8, TAB:9, NUM_CENTER:12, ENTER:13, SHIFT:16, CTRL:17, ALT:18, PAUSE:19, CAPS_LOCK:20, ESC:27, SPACE:32, PAGE_UP:33, PAGE_DOWN:34, END:35, HOME:36, LEFT:37, UP:38, RIGHT:39, DOWN:40, PRINT_SCREEN:44, INSERT:45, DELETE:46, ZERO:48, ONE:49, TWO:50, THREE:51, FOUR:52, FIVE:53, SIX:54, SEVEN:55, EIGHT:56, NINE:57, FF_SEMICOLON:59, FF_EQUALS:61, QUESTION_MARK:63, A:65, B:66, C:67, D:68, E:69, F:70, G:71, H:72, I:73, J:74, K:75, L:76, M:77, +N:78, O:79, P:80, Q:81, R:82, S:83, T:84, U:85, V:86, W:87, X:88, Y:89, Z:90, META:91, WIN_KEY_RIGHT:92, CONTEXT_MENU:93, NUM_ZERO:96, NUM_ONE:97, NUM_TWO:98, NUM_THREE:99, NUM_FOUR:100, NUM_FIVE:101, NUM_SIX:102, NUM_SEVEN:103, NUM_EIGHT:104, NUM_NINE:105, NUM_MULTIPLY:106, NUM_PLUS:107, NUM_MINUS:109, NUM_PERIOD:110, NUM_DIVISION:111, F1:112, F2:113, F3:114, F4:115, F5:116, F6:117, F7:118, F8:119, F9:120, F10:121, F11:122, F12:123, NUMLOCK:144, SCROLL_LOCK:145, FIRST_MEDIA_KEY:166, LAST_MEDIA_KEY:183, +SEMICOLON:186, DASH:189, EQUALS:187, COMMA:188, PERIOD:190, SLASH:191, APOSTROPHE:192, TILDE:192, SINGLE_QUOTE:222, OPEN_SQUARE_BRACKET:219, BACKSLASH:220, CLOSE_SQUARE_BRACKET:221, WIN_KEY:224, MAC_FF_META:224, WIN_IME:229, PHANTOM:255}; +goog.events.KeyCodes.isTextModifyingKeyEvent = function(e) { + if(e.altKey && !e.ctrlKey || e.metaKey || e.keyCode >= goog.events.KeyCodes.F1 && e.keyCode <= goog.events.KeyCodes.F12) { + return false + } + switch(e.keyCode) { + case goog.events.KeyCodes.ALT: + ; + case goog.events.KeyCodes.CAPS_LOCK: + ; + case goog.events.KeyCodes.CONTEXT_MENU: + ; + case goog.events.KeyCodes.CTRL: + ; + case goog.events.KeyCodes.DOWN: + ; + case goog.events.KeyCodes.END: + ; + case goog.events.KeyCodes.ESC: + ; + case goog.events.KeyCodes.HOME: + ; + case goog.events.KeyCodes.INSERT: + ; + case goog.events.KeyCodes.LEFT: + ; + case goog.events.KeyCodes.MAC_FF_META: + ; + case goog.events.KeyCodes.META: + ; + case goog.events.KeyCodes.NUMLOCK: + ; + case goog.events.KeyCodes.NUM_CENTER: + ; + case goog.events.KeyCodes.PAGE_DOWN: + ; + case goog.events.KeyCodes.PAGE_UP: + ; + case goog.events.KeyCodes.PAUSE: + ; + case goog.events.KeyCodes.PHANTOM: + ; + case goog.events.KeyCodes.PRINT_SCREEN: + ; + case goog.events.KeyCodes.RIGHT: + ; + case goog.events.KeyCodes.SCROLL_LOCK: + ; + case goog.events.KeyCodes.SHIFT: + ; + case goog.events.KeyCodes.UP: + ; + case goog.events.KeyCodes.WIN_KEY: + ; + case goog.events.KeyCodes.WIN_KEY_RIGHT: + return false; + case goog.events.KeyCodes.WIN_KEY_FF_LINUX: + return!goog.userAgent.GECKO; + default: + return e.keyCode < goog.events.KeyCodes.FIRST_MEDIA_KEY || e.keyCode > goog.events.KeyCodes.LAST_MEDIA_KEY + } +}; +goog.events.KeyCodes.firesKeyPressEvent = function(keyCode, opt_heldKeyCode, opt_shiftKey, opt_ctrlKey, opt_altKey) { + if(!goog.userAgent.IE && !(goog.userAgent.WEBKIT && goog.userAgent.isVersionOrHigher("525"))) { + return true + } + if(goog.userAgent.MAC && opt_altKey) { + return goog.events.KeyCodes.isCharacterKey(keyCode) + } + if(opt_altKey && !opt_ctrlKey) { + return false + } + if(!opt_shiftKey && (opt_heldKeyCode == goog.events.KeyCodes.CTRL || opt_heldKeyCode == goog.events.KeyCodes.ALT || goog.userAgent.MAC && opt_heldKeyCode == goog.events.KeyCodes.META)) { + return false + } + if(goog.userAgent.WEBKIT && opt_ctrlKey && opt_shiftKey) { + switch(keyCode) { + case goog.events.KeyCodes.BACKSLASH: + ; + case goog.events.KeyCodes.OPEN_SQUARE_BRACKET: + ; + case goog.events.KeyCodes.CLOSE_SQUARE_BRACKET: + ; + case goog.events.KeyCodes.TILDE: + ; + case goog.events.KeyCodes.SEMICOLON: + ; + case goog.events.KeyCodes.DASH: + ; + case goog.events.KeyCodes.EQUALS: + ; + case goog.events.KeyCodes.COMMA: + ; + case goog.events.KeyCodes.PERIOD: + ; + case goog.events.KeyCodes.SLASH: + ; + case goog.events.KeyCodes.APOSTROPHE: + ; + case goog.events.KeyCodes.SINGLE_QUOTE: + return false + } + } + if(goog.userAgent.IE && opt_ctrlKey && opt_heldKeyCode == keyCode) { + return false + } + switch(keyCode) { + case goog.events.KeyCodes.ENTER: + return!(goog.userAgent.IE && goog.userAgent.isDocumentModeOrHigher(9)); + case goog.events.KeyCodes.ESC: + return!goog.userAgent.WEBKIT + } + return goog.events.KeyCodes.isCharacterKey(keyCode) +}; +goog.events.KeyCodes.isCharacterKey = function(keyCode) { + if(keyCode >= goog.events.KeyCodes.ZERO && keyCode <= goog.events.KeyCodes.NINE) { + return true + } + if(keyCode >= goog.events.KeyCodes.NUM_ZERO && keyCode <= goog.events.KeyCodes.NUM_MULTIPLY) { + return true + } + if(keyCode >= goog.events.KeyCodes.A && keyCode <= goog.events.KeyCodes.Z) { + return true + } + if(goog.userAgent.WEBKIT && keyCode == 0) { + return true + } + switch(keyCode) { + case goog.events.KeyCodes.SPACE: + ; + case goog.events.KeyCodes.QUESTION_MARK: + ; + case goog.events.KeyCodes.NUM_PLUS: + ; + case goog.events.KeyCodes.NUM_MINUS: + ; + case goog.events.KeyCodes.NUM_PERIOD: + ; + case goog.events.KeyCodes.NUM_DIVISION: + ; + case goog.events.KeyCodes.SEMICOLON: + ; + case goog.events.KeyCodes.FF_SEMICOLON: + ; + case goog.events.KeyCodes.DASH: + ; + case goog.events.KeyCodes.EQUALS: + ; + case goog.events.KeyCodes.FF_EQUALS: + ; + case goog.events.KeyCodes.COMMA: + ; + case goog.events.KeyCodes.PERIOD: + ; + case goog.events.KeyCodes.SLASH: + ; + case goog.events.KeyCodes.APOSTROPHE: + ; + case goog.events.KeyCodes.SINGLE_QUOTE: + ; + case goog.events.KeyCodes.OPEN_SQUARE_BRACKET: + ; + case goog.events.KeyCodes.BACKSLASH: + ; + case goog.events.KeyCodes.CLOSE_SQUARE_BRACKET: + return true; + default: + return false + } +}; +goog.events.KeyCodes.normalizeGeckoKeyCode = function(keyCode) { + switch(keyCode) { + case goog.events.KeyCodes.FF_EQUALS: + return goog.events.KeyCodes.EQUALS; + case goog.events.KeyCodes.FF_SEMICOLON: + return goog.events.KeyCodes.SEMICOLON; + case goog.events.KeyCodes.MAC_FF_META: + return goog.events.KeyCodes.META; + case goog.events.KeyCodes.WIN_KEY_FF_LINUX: + return goog.events.KeyCodes.WIN_KEY; + default: + return keyCode + } +}; +goog.provide("goog.events.KeyEvent"); +goog.provide("goog.events.KeyHandler"); +goog.provide("goog.events.KeyHandler.EventType"); +goog.require("goog.events"); +goog.require("goog.events.BrowserEvent"); +goog.require("goog.events.EventTarget"); +goog.require("goog.events.EventType"); +goog.require("goog.events.KeyCodes"); +goog.require("goog.userAgent"); +goog.events.KeyHandler = function(opt_element, opt_capture) { + goog.events.EventTarget.call(this); + if(opt_element) { + this.attach(opt_element, opt_capture) + } +}; +goog.inherits(goog.events.KeyHandler, goog.events.EventTarget); +goog.events.KeyHandler.prototype.element_ = null; +goog.events.KeyHandler.prototype.keyPressKey_ = null; +goog.events.KeyHandler.prototype.keyDownKey_ = null; +goog.events.KeyHandler.prototype.keyUpKey_ = null; +goog.events.KeyHandler.prototype.lastKey_ = -1; +goog.events.KeyHandler.prototype.keyCode_ = -1; +goog.events.KeyHandler.prototype.altKey_ = false; +goog.events.KeyHandler.EventType = {KEY:"key"}; +goog.events.KeyHandler.safariKey_ = {3:goog.events.KeyCodes.ENTER, 12:goog.events.KeyCodes.NUMLOCK, 63232:goog.events.KeyCodes.UP, 63233:goog.events.KeyCodes.DOWN, 63234:goog.events.KeyCodes.LEFT, 63235:goog.events.KeyCodes.RIGHT, 63236:goog.events.KeyCodes.F1, 63237:goog.events.KeyCodes.F2, 63238:goog.events.KeyCodes.F3, 63239:goog.events.KeyCodes.F4, 63240:goog.events.KeyCodes.F5, 63241:goog.events.KeyCodes.F6, 63242:goog.events.KeyCodes.F7, 63243:goog.events.KeyCodes.F8, 63244:goog.events.KeyCodes.F9, +63245:goog.events.KeyCodes.F10, 63246:goog.events.KeyCodes.F11, 63247:goog.events.KeyCodes.F12, 63248:goog.events.KeyCodes.PRINT_SCREEN, 63272:goog.events.KeyCodes.DELETE, 63273:goog.events.KeyCodes.HOME, 63275:goog.events.KeyCodes.END, 63276:goog.events.KeyCodes.PAGE_UP, 63277:goog.events.KeyCodes.PAGE_DOWN, 63289:goog.events.KeyCodes.NUMLOCK, 63302:goog.events.KeyCodes.INSERT}; +goog.events.KeyHandler.keyIdentifier_ = {"Up":goog.events.KeyCodes.UP, "Down":goog.events.KeyCodes.DOWN, "Left":goog.events.KeyCodes.LEFT, "Right":goog.events.KeyCodes.RIGHT, "Enter":goog.events.KeyCodes.ENTER, "F1":goog.events.KeyCodes.F1, "F2":goog.events.KeyCodes.F2, "F3":goog.events.KeyCodes.F3, "F4":goog.events.KeyCodes.F4, "F5":goog.events.KeyCodes.F5, "F6":goog.events.KeyCodes.F6, "F7":goog.events.KeyCodes.F7, "F8":goog.events.KeyCodes.F8, "F9":goog.events.KeyCodes.F9, "F10":goog.events.KeyCodes.F10, +"F11":goog.events.KeyCodes.F11, "F12":goog.events.KeyCodes.F12, "U+007F":goog.events.KeyCodes.DELETE, "Home":goog.events.KeyCodes.HOME, "End":goog.events.KeyCodes.END, "PageUp":goog.events.KeyCodes.PAGE_UP, "PageDown":goog.events.KeyCodes.PAGE_DOWN, "Insert":goog.events.KeyCodes.INSERT}; +goog.events.KeyHandler.USES_KEYDOWN_ = goog.userAgent.IE || goog.userAgent.WEBKIT && goog.userAgent.isVersionOrHigher("525"); +goog.events.KeyHandler.SAVE_ALT_FOR_KEYPRESS_ = goog.userAgent.MAC && goog.userAgent.GECKO; +goog.events.KeyHandler.prototype.handleKeyDown_ = function(e) { + if(goog.userAgent.WEBKIT) { + if(this.lastKey_ == goog.events.KeyCodes.CTRL && !e.ctrlKey || this.lastKey_ == goog.events.KeyCodes.ALT && !e.altKey || goog.userAgent.MAC && this.lastKey_ == goog.events.KeyCodes.META && !e.metaKey) { + this.lastKey_ = -1; + this.keyCode_ = -1 + } + } + if(this.lastKey_ == -1) { + if(e.ctrlKey && e.keyCode != goog.events.KeyCodes.CTRL) { + this.lastKey_ = goog.events.KeyCodes.CTRL + }else { + if(e.altKey && e.keyCode != goog.events.KeyCodes.ALT) { + this.lastKey_ = goog.events.KeyCodes.ALT + }else { + if(e.metaKey && e.keyCode != goog.events.KeyCodes.META) { + this.lastKey_ = goog.events.KeyCodes.META + } + } + } + } + if(goog.events.KeyHandler.USES_KEYDOWN_ && !goog.events.KeyCodes.firesKeyPressEvent(e.keyCode, this.lastKey_, e.shiftKey, e.ctrlKey, e.altKey)) { + this.handleEvent(e) + }else { + this.keyCode_ = goog.userAgent.GECKO ? goog.events.KeyCodes.normalizeGeckoKeyCode(e.keyCode) : e.keyCode; + if(goog.events.KeyHandler.SAVE_ALT_FOR_KEYPRESS_) { + this.altKey_ = e.altKey + } + } +}; +goog.events.KeyHandler.prototype.resetState = function() { + this.lastKey_ = -1; + this.keyCode_ = -1 +}; +goog.events.KeyHandler.prototype.handleKeyup_ = function(e) { + this.resetState(); + this.altKey_ = e.altKey +}; +goog.events.KeyHandler.prototype.handleEvent = function(e) { + var be = e.getBrowserEvent(); + var keyCode, charCode; + var altKey = be.altKey; + if(goog.userAgent.IE && e.type == goog.events.EventType.KEYPRESS) { + keyCode = this.keyCode_; + charCode = keyCode != goog.events.KeyCodes.ENTER && keyCode != goog.events.KeyCodes.ESC ? be.keyCode : 0 + }else { + if(goog.userAgent.WEBKIT && e.type == goog.events.EventType.KEYPRESS) { + keyCode = this.keyCode_; + charCode = be.charCode >= 0 && be.charCode < 63232 && goog.events.KeyCodes.isCharacterKey(keyCode) ? be.charCode : 0 + }else { + if(goog.userAgent.OPERA) { + keyCode = this.keyCode_; + charCode = goog.events.KeyCodes.isCharacterKey(keyCode) ? be.keyCode : 0 + }else { + keyCode = be.keyCode || this.keyCode_; + charCode = be.charCode || 0; + if(goog.events.KeyHandler.SAVE_ALT_FOR_KEYPRESS_) { + altKey = this.altKey_ + } + if(goog.userAgent.MAC && charCode == goog.events.KeyCodes.QUESTION_MARK && keyCode == goog.events.KeyCodes.WIN_KEY) { + keyCode = goog.events.KeyCodes.SLASH + } + } + } + } + var key = keyCode; + var keyIdentifier = be.keyIdentifier; + if(keyCode) { + if(keyCode >= 63232 && keyCode in goog.events.KeyHandler.safariKey_) { + key = goog.events.KeyHandler.safariKey_[keyCode] + }else { + if(keyCode == 25 && e.shiftKey) { + key = 9 + } + } + }else { + if(keyIdentifier && keyIdentifier in goog.events.KeyHandler.keyIdentifier_) { + key = goog.events.KeyHandler.keyIdentifier_[keyIdentifier] + } + } + var repeat = key == this.lastKey_; + this.lastKey_ = key; + var event = new goog.events.KeyEvent(key, charCode, repeat, be); + event.altKey = altKey; + this.dispatchEvent(event) +}; +goog.events.KeyHandler.prototype.getElement = function() { + return this.element_ +}; +goog.events.KeyHandler.prototype.attach = function(element, opt_capture) { + if(this.keyUpKey_) { + this.detach() + } + this.element_ = element; + this.keyPressKey_ = goog.events.listen(this.element_, goog.events.EventType.KEYPRESS, this, opt_capture); + this.keyDownKey_ = goog.events.listen(this.element_, goog.events.EventType.KEYDOWN, this.handleKeyDown_, opt_capture, this); + this.keyUpKey_ = goog.events.listen(this.element_, goog.events.EventType.KEYUP, this.handleKeyup_, opt_capture, this) +}; +goog.events.KeyHandler.prototype.detach = function() { + if(this.keyPressKey_) { + goog.events.unlistenByKey(this.keyPressKey_); + goog.events.unlistenByKey(this.keyDownKey_); + goog.events.unlistenByKey(this.keyUpKey_); + this.keyPressKey_ = null; + this.keyDownKey_ = null; + this.keyUpKey_ = null + } + this.element_ = null; + this.lastKey_ = -1; + this.keyCode_ = -1 +}; +goog.events.KeyHandler.prototype.disposeInternal = function() { + goog.events.KeyHandler.superClass_.disposeInternal.call(this); + this.detach() +}; +goog.events.KeyEvent = function(keyCode, charCode, repeat, browserEvent) { + goog.events.BrowserEvent.call(this, browserEvent); + this.type = goog.events.KeyHandler.EventType.KEY; + this.keyCode = keyCode; + this.charCode = charCode; + this.repeat = repeat +}; +goog.inherits(goog.events.KeyEvent, goog.events.BrowserEvent); +goog.provide("goog.dom.vendor"); +goog.require("goog.userAgent"); +goog.dom.vendor.getVendorJsPrefix = function() { + if(goog.userAgent.WEBKIT) { + return"Webkit" + }else { + if(goog.userAgent.GECKO) { + return"Moz" + }else { + if(goog.userAgent.IE) { + return"ms" + }else { + if(goog.userAgent.OPERA) { + return"O" + } + } + } + } + return null +}; +goog.dom.vendor.getVendorPrefix = function() { + if(goog.userAgent.WEBKIT) { + return"-webkit" + }else { + if(goog.userAgent.GECKO) { + return"-moz" + }else { + if(goog.userAgent.IE) { + return"-ms" + }else { + if(goog.userAgent.OPERA) { + return"-o" + } + } + } + } + return null +}; +goog.provide("goog.math.Box"); +goog.require("goog.math.Coordinate"); +goog.math.Box = function(top, right, bottom, left) { + this.top = top; + this.right = right; + this.bottom = bottom; + this.left = left +}; +goog.math.Box.boundingBox = function(var_args) { + var box = new goog.math.Box(arguments[0].y, arguments[0].x, arguments[0].y, arguments[0].x); + for(var i = 1;i < arguments.length;i++) { + var coord = arguments[i]; + box.top = Math.min(box.top, coord.y); + box.right = Math.max(box.right, coord.x); + box.bottom = Math.max(box.bottom, coord.y); + box.left = Math.min(box.left, coord.x) + } + return box +}; +goog.math.Box.prototype.clone = function() { + return new goog.math.Box(this.top, this.right, this.bottom, this.left) +}; +if(goog.DEBUG) { + goog.math.Box.prototype.toString = function() { + return"(" + this.top + "t, " + this.right + "r, " + this.bottom + "b, " + this.left + "l)" + } +} +goog.math.Box.prototype.contains = function(other) { + return goog.math.Box.contains(this, other) +}; +goog.math.Box.prototype.expand = function(top, opt_right, opt_bottom, opt_left) { + if(goog.isObject(top)) { + this.top -= top.top; + this.right += top.right; + this.bottom += top.bottom; + this.left -= top.left + }else { + this.top -= top; + this.right += opt_right; + this.bottom += opt_bottom; + this.left -= opt_left + } + return this +}; +goog.math.Box.prototype.expandToInclude = function(box) { + this.left = Math.min(this.left, box.left); + this.top = Math.min(this.top, box.top); + this.right = Math.max(this.right, box.right); + this.bottom = Math.max(this.bottom, box.bottom) +}; +goog.math.Box.equals = function(a, b) { + if(a == b) { + return true + } + if(!a || !b) { + return false + } + return a.top == b.top && a.right == b.right && a.bottom == b.bottom && a.left == b.left +}; +goog.math.Box.contains = function(box, other) { + if(!box || !other) { + return false + } + if(other instanceof goog.math.Box) { + return other.left >= box.left && other.right <= box.right && other.top >= box.top && other.bottom <= box.bottom + } + return other.x >= box.left && other.x <= box.right && other.y >= box.top && other.y <= box.bottom +}; +goog.math.Box.relativePositionX = function(box, coord) { + if(coord.x < box.left) { + return coord.x - box.left + }else { + if(coord.x > box.right) { + return coord.x - box.right + } + } + return 0 +}; +goog.math.Box.relativePositionY = function(box, coord) { + if(coord.y < box.top) { + return coord.y - box.top + }else { + if(coord.y > box.bottom) { + return coord.y - box.bottom + } + } + return 0 +}; +goog.math.Box.distance = function(box, coord) { + var x = goog.math.Box.relativePositionX(box, coord); + var y = goog.math.Box.relativePositionY(box, coord); + return Math.sqrt(x * x + y * y) +}; +goog.math.Box.intersects = function(a, b) { + return a.left <= b.right && b.left <= a.right && a.top <= b.bottom && b.top <= a.bottom +}; +goog.math.Box.intersectsWithPadding = function(a, b, padding) { + return a.left <= b.right + padding && b.left <= a.right + padding && a.top <= b.bottom + padding && b.top <= a.bottom + padding +}; +goog.math.Box.prototype.ceil = function() { + this.top = Math.ceil(this.top); + this.right = Math.ceil(this.right); + this.bottom = Math.ceil(this.bottom); + this.left = Math.ceil(this.left); + return this +}; +goog.math.Box.prototype.floor = function() { + this.top = Math.floor(this.top); + this.right = Math.floor(this.right); + this.bottom = Math.floor(this.bottom); + this.left = Math.floor(this.left); + return this +}; +goog.math.Box.prototype.round = function() { + this.top = Math.round(this.top); + this.right = Math.round(this.right); + this.bottom = Math.round(this.bottom); + this.left = Math.round(this.left); + return this +}; +goog.math.Box.prototype.translate = function(tx, opt_ty) { + if(tx instanceof goog.math.Coordinate) { + this.left += tx.x; + this.right += tx.x; + this.top += tx.y; + this.bottom += tx.y + }else { + this.left += tx; + this.right += tx; + if(goog.isNumber(opt_ty)) { + this.top += opt_ty; + this.bottom += opt_ty + } + } + return this +}; +goog.math.Box.prototype.scale = function(sx, opt_sy) { + var sy = goog.isNumber(opt_sy) ? opt_sy : sx; + this.left *= sx; + this.right *= sx; + this.top *= sy; + this.bottom *= sy; + return this +}; +goog.provide("goog.math.Rect"); +goog.require("goog.math.Box"); +goog.require("goog.math.Coordinate"); +goog.require("goog.math.Size"); +goog.math.Rect = function(x, y, w, h) { + this.left = x; + this.top = y; + this.width = w; + this.height = h +}; +goog.math.Rect.prototype.clone = function() { + return new goog.math.Rect(this.left, this.top, this.width, this.height) +}; +goog.math.Rect.prototype.toBox = function() { + var right = this.left + this.width; + var bottom = this.top + this.height; + return new goog.math.Box(this.top, right, bottom, this.left) +}; +goog.math.Rect.createFromBox = function(box) { + return new goog.math.Rect(box.left, box.top, box.right - box.left, box.bottom - box.top) +}; +if(goog.DEBUG) { + goog.math.Rect.prototype.toString = function() { + return"(" + this.left + ", " + this.top + " - " + this.width + "w x " + this.height + "h)" + } +} +goog.math.Rect.equals = function(a, b) { + if(a == b) { + return true + } + if(!a || !b) { + return false + } + return a.left == b.left && a.width == b.width && a.top == b.top && a.height == b.height +}; +goog.math.Rect.prototype.intersection = function(rect) { + var x0 = Math.max(this.left, rect.left); + var x1 = Math.min(this.left + this.width, rect.left + rect.width); + if(x0 <= x1) { + var y0 = Math.max(this.top, rect.top); + var y1 = Math.min(this.top + this.height, rect.top + rect.height); + if(y0 <= y1) { + this.left = x0; + this.top = y0; + this.width = x1 - x0; + this.height = y1 - y0; + return true + } + } + return false +}; +goog.math.Rect.intersection = function(a, b) { + var x0 = Math.max(a.left, b.left); + var x1 = Math.min(a.left + a.width, b.left + b.width); + if(x0 <= x1) { + var y0 = Math.max(a.top, b.top); + var y1 = Math.min(a.top + a.height, b.top + b.height); + if(y0 <= y1) { + return new goog.math.Rect(x0, y0, x1 - x0, y1 - y0) + } + } + return null +}; +goog.math.Rect.intersects = function(a, b) { + return a.left <= b.left + b.width && b.left <= a.left + a.width && a.top <= b.top + b.height && b.top <= a.top + a.height +}; +goog.math.Rect.prototype.intersects = function(rect) { + return goog.math.Rect.intersects(this, rect) +}; +goog.math.Rect.difference = function(a, b) { + var intersection = goog.math.Rect.intersection(a, b); + if(!intersection || !intersection.height || !intersection.width) { + return[a.clone()] + } + var result = []; + var top = a.top; + var height = a.height; + var ar = a.left + a.width; + var ab = a.top + a.height; + var br = b.left + b.width; + var bb = b.top + b.height; + if(b.top > a.top) { + result.push(new goog.math.Rect(a.left, a.top, a.width, b.top - a.top)); + top = b.top; + height -= b.top - a.top + } + if(bb < ab) { + result.push(new goog.math.Rect(a.left, bb, a.width, ab - bb)); + height = bb - top + } + if(b.left > a.left) { + result.push(new goog.math.Rect(a.left, top, b.left - a.left, height)) + } + if(br < ar) { + result.push(new goog.math.Rect(br, top, ar - br, height)) + } + return result +}; +goog.math.Rect.prototype.difference = function(rect) { + return goog.math.Rect.difference(this, rect) +}; +goog.math.Rect.prototype.boundingRect = function(rect) { + var right = Math.max(this.left + this.width, rect.left + rect.width); + var bottom = Math.max(this.top + this.height, rect.top + rect.height); + this.left = Math.min(this.left, rect.left); + this.top = Math.min(this.top, rect.top); + this.width = right - this.left; + this.height = bottom - this.top +}; +goog.math.Rect.boundingRect = function(a, b) { + if(!a || !b) { + return null + } + var clone = a.clone(); + clone.boundingRect(b); + return clone +}; +goog.math.Rect.prototype.contains = function(another) { + if(another instanceof goog.math.Rect) { + return this.left <= another.left && this.left + this.width >= another.left + another.width && this.top <= another.top && this.top + this.height >= another.top + another.height + }else { + return another.x >= this.left && another.x <= this.left + this.width && another.y >= this.top && another.y <= this.top + this.height + } +}; +goog.math.Rect.prototype.squaredDistance = function(point) { + var dx = point.x < this.left ? this.left - point.x : Math.max(point.x - (this.left + this.width), 0); + var dy = point.y < this.top ? this.top - point.y : Math.max(point.y - (this.top + this.height), 0); + return dx * dx + dy * dy +}; +goog.math.Rect.prototype.distance = function(point) { + return Math.sqrt(this.squaredDistance(point)) +}; +goog.math.Rect.prototype.getSize = function() { + return new goog.math.Size(this.width, this.height) +}; +goog.math.Rect.prototype.getTopLeft = function() { + return new goog.math.Coordinate(this.left, this.top) +}; +goog.math.Rect.prototype.getCenter = function() { + return new goog.math.Coordinate(this.left + this.width / 2, this.top + this.height / 2) +}; +goog.math.Rect.prototype.getBottomRight = function() { + return new goog.math.Coordinate(this.left + this.width, this.top + this.height) +}; +goog.math.Rect.prototype.ceil = function() { + this.left = Math.ceil(this.left); + this.top = Math.ceil(this.top); + this.width = Math.ceil(this.width); + this.height = Math.ceil(this.height); + return this +}; +goog.math.Rect.prototype.floor = function() { + this.left = Math.floor(this.left); + this.top = Math.floor(this.top); + this.width = Math.floor(this.width); + this.height = Math.floor(this.height); + return this +}; +goog.math.Rect.prototype.round = function() { + this.left = Math.round(this.left); + this.top = Math.round(this.top); + this.width = Math.round(this.width); + this.height = Math.round(this.height); + return this +}; +goog.math.Rect.prototype.translate = function(tx, opt_ty) { + if(tx instanceof goog.math.Coordinate) { + this.left += tx.x; + this.top += tx.y + }else { + this.left += tx; + if(goog.isNumber(opt_ty)) { + this.top += opt_ty + } + } + return this +}; +goog.math.Rect.prototype.scale = function(sx, opt_sy) { + var sy = goog.isNumber(opt_sy) ? opt_sy : sx; + this.left *= sx; + this.width *= sx; + this.top *= sy; + this.height *= sy; + return this +}; +goog.provide("goog.style"); +goog.require("goog.array"); +goog.require("goog.asserts"); +goog.require("goog.dom"); +goog.require("goog.dom.NodeType"); +goog.require("goog.dom.vendor"); +goog.require("goog.math.Box"); +goog.require("goog.math.Coordinate"); +goog.require("goog.math.Rect"); +goog.require("goog.math.Size"); +goog.require("goog.object"); +goog.require("goog.string"); +goog.require("goog.userAgent"); +goog.define("goog.style.GET_BOUNDING_CLIENT_RECT_ALWAYS_EXISTS", false); +goog.style.setStyle = function(element, style, opt_value) { + if(goog.isString(style)) { + goog.style.setStyle_(element, opt_value, style) + }else { + goog.object.forEach(style, goog.partial(goog.style.setStyle_, element)) + } +}; +goog.style.setStyle_ = function(element, value, style) { + var propertyName = goog.style.getVendorJsStyleName_(element, style); + if(propertyName) { + element.style[propertyName] = value + } +}; +goog.style.getVendorJsStyleName_ = function(element, style) { + var camelStyle = goog.string.toCamelCase(style); + if(element.style[camelStyle] === undefined) { + var prefixedStyle = goog.dom.vendor.getVendorJsPrefix() + goog.string.toTitleCase(style); + if(element.style[prefixedStyle] !== undefined) { + return prefixedStyle + } + } + return camelStyle +}; +goog.style.getVendorStyleName_ = function(element, style) { + var camelStyle = goog.string.toCamelCase(style); + if(element.style[camelStyle] === undefined) { + var prefixedStyle = goog.dom.vendor.getVendorJsPrefix() + goog.string.toTitleCase(style); + if(element.style[prefixedStyle] !== undefined) { + return goog.dom.vendor.getVendorPrefix() + "-" + style + } + } + return style +}; +goog.style.getStyle = function(element, property) { + var styleValue = element.style[goog.string.toCamelCase(property)]; + if(typeof styleValue !== "undefined") { + return styleValue + } + return element.style[goog.style.getVendorJsStyleName_(element, property)] || "" +}; +goog.style.getComputedStyle = function(element, property) { + var doc = goog.dom.getOwnerDocument(element); + if(doc.defaultView && doc.defaultView.getComputedStyle) { + var styles = doc.defaultView.getComputedStyle(element, null); + if(styles) { + return styles[property] || styles.getPropertyValue(property) || "" + } + } + return"" +}; +goog.style.getCascadedStyle = function(element, style) { + return element.currentStyle ? element.currentStyle[style] : null +}; +goog.style.getStyle_ = function(element, style) { + return goog.style.getComputedStyle(element, style) || goog.style.getCascadedStyle(element, style) || element.style && element.style[style] +}; +goog.style.getComputedPosition = function(element) { + return goog.style.getStyle_(element, "position") +}; +goog.style.getBackgroundColor = function(element) { + return goog.style.getStyle_(element, "backgroundColor") +}; +goog.style.getComputedOverflowX = function(element) { + return goog.style.getStyle_(element, "overflowX") +}; +goog.style.getComputedOverflowY = function(element) { + return goog.style.getStyle_(element, "overflowY") +}; +goog.style.getComputedZIndex = function(element) { + return goog.style.getStyle_(element, "zIndex") +}; +goog.style.getComputedTextAlign = function(element) { + return goog.style.getStyle_(element, "textAlign") +}; +goog.style.getComputedCursor = function(element) { + return goog.style.getStyle_(element, "cursor") +}; +goog.style.setPosition = function(el, arg1, opt_arg2) { + var x, y; + var buggyGeckoSubPixelPos = goog.userAgent.GECKO && (goog.userAgent.MAC || goog.userAgent.X11) && goog.userAgent.isVersionOrHigher("1.9"); + if(arg1 instanceof goog.math.Coordinate) { + x = arg1.x; + y = arg1.y + }else { + x = arg1; + y = opt_arg2 + } + el.style.left = goog.style.getPixelStyleValue_((x), buggyGeckoSubPixelPos); + el.style.top = goog.style.getPixelStyleValue_((y), buggyGeckoSubPixelPos) +}; +goog.style.getPosition = function(element) { + return new goog.math.Coordinate(element.offsetLeft, element.offsetTop) +}; +goog.style.getClientViewportElement = function(opt_node) { + var doc; + if(opt_node) { + doc = goog.dom.getOwnerDocument(opt_node) + }else { + doc = goog.dom.getDocument() + } + if(goog.userAgent.IE && !goog.userAgent.isDocumentModeOrHigher(9) && !goog.dom.getDomHelper(doc).isCss1CompatMode()) { + return doc.body + } + return doc.documentElement +}; +goog.style.getViewportPageOffset = function(doc) { + var body = doc.body; + var documentElement = doc.documentElement; + var scrollLeft = body.scrollLeft || documentElement.scrollLeft; + var scrollTop = body.scrollTop || documentElement.scrollTop; + return new goog.math.Coordinate(scrollLeft, scrollTop) +}; +goog.style.getBoundingClientRect_ = function(el) { + var rect; + try { + rect = el.getBoundingClientRect() + }catch(e) { + return{"left":0, "top":0, "right":0, "bottom":0} + } + if(goog.userAgent.IE) { + var doc = el.ownerDocument; + rect.left -= doc.documentElement.clientLeft + doc.body.clientLeft; + rect.top -= doc.documentElement.clientTop + doc.body.clientTop + } + return(rect) +}; +goog.style.getOffsetParent = function(element) { + if(goog.userAgent.IE && !goog.userAgent.isDocumentModeOrHigher(8)) { + return element.offsetParent + } + var doc = goog.dom.getOwnerDocument(element); + var positionStyle = goog.style.getStyle_(element, "position"); + var skipStatic = positionStyle == "fixed" || positionStyle == "absolute"; + for(var parent = element.parentNode;parent && parent != doc;parent = parent.parentNode) { + positionStyle = goog.style.getStyle_((parent), "position"); + skipStatic = skipStatic && positionStyle == "static" && parent != doc.documentElement && parent != doc.body; + if(!skipStatic && (parent.scrollWidth > parent.clientWidth || parent.scrollHeight > parent.clientHeight || positionStyle == "fixed" || positionStyle == "absolute" || positionStyle == "relative")) { + return(parent) + } + } + return null +}; +goog.style.getVisibleRectForElement = function(element) { + var visibleRect = new goog.math.Box(0, Infinity, Infinity, 0); + var dom = goog.dom.getDomHelper(element); + var body = dom.getDocument().body; + var documentElement = dom.getDocument().documentElement; + var scrollEl = dom.getDocumentScrollElement(); + for(var el = element;el = goog.style.getOffsetParent(el);) { + if((!goog.userAgent.IE || el.clientWidth != 0) && (!goog.userAgent.WEBKIT || el.clientHeight != 0 || el != body) && el != body && el != documentElement && goog.style.getStyle_(el, "overflow") != "visible") { + var pos = goog.style.getPageOffset(el); + var client = goog.style.getClientLeftTop(el); + pos.x += client.x; + pos.y += client.y; + visibleRect.top = Math.max(visibleRect.top, pos.y); + visibleRect.right = Math.min(visibleRect.right, pos.x + el.clientWidth); + visibleRect.bottom = Math.min(visibleRect.bottom, pos.y + el.clientHeight); + visibleRect.left = Math.max(visibleRect.left, pos.x) + } + } + var scrollX = scrollEl.scrollLeft, scrollY = scrollEl.scrollTop; + visibleRect.left = Math.max(visibleRect.left, scrollX); + visibleRect.top = Math.max(visibleRect.top, scrollY); + var winSize = dom.getViewportSize(); + visibleRect.right = Math.min(visibleRect.right, scrollX + winSize.width); + visibleRect.bottom = Math.min(visibleRect.bottom, scrollY + winSize.height); + return visibleRect.top >= 0 && visibleRect.left >= 0 && visibleRect.bottom > visibleRect.top && visibleRect.right > visibleRect.left ? visibleRect : null +}; +goog.style.getContainerOffsetToScrollInto = function(element, container, opt_center) { + var elementPos = goog.style.getPageOffset(element); + var containerPos = goog.style.getPageOffset(container); + var containerBorder = goog.style.getBorderBox(container); + var relX = elementPos.x - containerPos.x - containerBorder.left; + var relY = elementPos.y - containerPos.y - containerBorder.top; + var spaceX = container.clientWidth - element.offsetWidth; + var spaceY = container.clientHeight - element.offsetHeight; + var scrollLeft = container.scrollLeft; + var scrollTop = container.scrollTop; + if(opt_center) { + scrollLeft += relX - spaceX / 2; + scrollTop += relY - spaceY / 2 + }else { + scrollLeft += Math.min(relX, Math.max(relX - spaceX, 0)); + scrollTop += Math.min(relY, Math.max(relY - spaceY, 0)) + } + return new goog.math.Coordinate(scrollLeft, scrollTop) +}; +goog.style.scrollIntoContainerView = function(element, container, opt_center) { + var offset = goog.style.getContainerOffsetToScrollInto(element, container, opt_center); + container.scrollLeft = offset.x; + container.scrollTop = offset.y +}; +goog.style.getClientLeftTop = function(el) { + if(goog.userAgent.GECKO && !goog.userAgent.isVersionOrHigher("1.9")) { + var left = parseFloat(goog.style.getComputedStyle(el, "borderLeftWidth")); + if(goog.style.isRightToLeft(el)) { + var scrollbarWidth = el.offsetWidth - el.clientWidth - left - parseFloat(goog.style.getComputedStyle(el, "borderRightWidth")); + left += scrollbarWidth + } + return new goog.math.Coordinate(left, parseFloat(goog.style.getComputedStyle(el, "borderTopWidth"))) + } + return new goog.math.Coordinate(el.clientLeft, el.clientTop) +}; +goog.style.getPageOffset = function(el) { + var box, doc = goog.dom.getOwnerDocument(el); + var positionStyle = goog.style.getStyle_(el, "position"); + goog.asserts.assertObject(el, "Parameter is required"); + var BUGGY_GECKO_BOX_OBJECT = !goog.style.GET_BOUNDING_CLIENT_RECT_ALWAYS_EXISTS && goog.userAgent.GECKO && doc.getBoxObjectFor && !el.getBoundingClientRect && positionStyle == "absolute" && (box = doc.getBoxObjectFor(el)) && (box.screenX < 0 || box.screenY < 0); + var pos = new goog.math.Coordinate(0, 0); + var viewportElement = goog.style.getClientViewportElement(doc); + if(el == viewportElement) { + return pos + } + if(goog.style.GET_BOUNDING_CLIENT_RECT_ALWAYS_EXISTS || el.getBoundingClientRect) { + box = goog.style.getBoundingClientRect_(el); + var scrollCoord = goog.dom.getDomHelper(doc).getDocumentScroll(); + pos.x = box.left + scrollCoord.x; + pos.y = box.top + scrollCoord.y + }else { + if(doc.getBoxObjectFor && !BUGGY_GECKO_BOX_OBJECT) { + box = doc.getBoxObjectFor(el); + var vpBox = doc.getBoxObjectFor(viewportElement); + pos.x = box.screenX - vpBox.screenX; + pos.y = box.screenY - vpBox.screenY + }else { + var parent = el; + do { + pos.x += parent.offsetLeft; + pos.y += parent.offsetTop; + if(parent != el) { + pos.x += parent.clientLeft || 0; + pos.y += parent.clientTop || 0 + } + if(goog.userAgent.WEBKIT && goog.style.getComputedPosition(parent) == "fixed") { + pos.x += doc.body.scrollLeft; + pos.y += doc.body.scrollTop; + break + } + parent = parent.offsetParent + }while(parent && parent != el); + if(goog.userAgent.OPERA || goog.userAgent.WEBKIT && positionStyle == "absolute") { + pos.y -= doc.body.offsetTop + } + for(parent = el;(parent = goog.style.getOffsetParent(parent)) && parent != doc.body && parent != viewportElement;) { + pos.x -= parent.scrollLeft; + if(!goog.userAgent.OPERA || parent.tagName != "TR") { + pos.y -= parent.scrollTop + } + } + } + } + return pos +}; +goog.style.getPageOffsetLeft = function(el) { + return goog.style.getPageOffset(el).x +}; +goog.style.getPageOffsetTop = function(el) { + return goog.style.getPageOffset(el).y +}; +goog.style.getFramedPageOffset = function(el, relativeWin) { + var position = new goog.math.Coordinate(0, 0); + var currentWin = goog.dom.getWindow(goog.dom.getOwnerDocument(el)); + var currentEl = el; + do { + var offset = currentWin == relativeWin ? goog.style.getPageOffset(currentEl) : goog.style.getClientPositionForElement_(goog.asserts.assert(currentEl)); + position.x += offset.x; + position.y += offset.y + }while(currentWin && currentWin != relativeWin && (currentEl = currentWin.frameElement) && (currentWin = currentWin.parent)); + return position +}; +goog.style.translateRectForAnotherFrame = function(rect, origBase, newBase) { + if(origBase.getDocument() != newBase.getDocument()) { + var body = origBase.getDocument().body; + var pos = goog.style.getFramedPageOffset(body, newBase.getWindow()); + pos = goog.math.Coordinate.difference(pos, goog.style.getPageOffset(body)); + if(goog.userAgent.IE && !origBase.isCss1CompatMode()) { + pos = goog.math.Coordinate.difference(pos, origBase.getDocumentScroll()) + } + rect.left += pos.x; + rect.top += pos.y + } +}; +goog.style.getRelativePosition = function(a, b) { + var ap = goog.style.getClientPosition(a); + var bp = goog.style.getClientPosition(b); + return new goog.math.Coordinate(ap.x - bp.x, ap.y - bp.y) +}; +goog.style.getClientPositionForElement_ = function(el) { + var pos; + if(goog.style.GET_BOUNDING_CLIENT_RECT_ALWAYS_EXISTS || el.getBoundingClientRect) { + var box = goog.style.getBoundingClientRect_(el); + pos = new goog.math.Coordinate(box.left, box.top) + }else { + var scrollCoord = goog.dom.getDomHelper(el).getDocumentScroll(); + var pageCoord = goog.style.getPageOffset(el); + pos = new goog.math.Coordinate(pageCoord.x - scrollCoord.x, pageCoord.y - scrollCoord.y) + } + if(goog.userAgent.GECKO && !goog.userAgent.isVersionOrHigher(12)) { + return goog.math.Coordinate.sum(pos, goog.style.getCssTranslation(el)) + }else { + return pos + } +}; +goog.style.getClientPosition = function(el) { + goog.asserts.assert(el); + if(el.nodeType == goog.dom.NodeType.ELEMENT) { + return goog.style.getClientPositionForElement_((el)) + }else { + var isAbstractedEvent = goog.isFunction(el.getBrowserEvent); + var targetEvent = el; + if(el.targetTouches) { + targetEvent = el.targetTouches[0] + }else { + if(isAbstractedEvent && el.getBrowserEvent().targetTouches) { + targetEvent = el.getBrowserEvent().targetTouches[0] + } + } + return new goog.math.Coordinate(targetEvent.clientX, targetEvent.clientY) + } +}; +goog.style.setPageOffset = function(el, x, opt_y) { + var cur = goog.style.getPageOffset(el); + if(x instanceof goog.math.Coordinate) { + opt_y = x.y; + x = x.x + } + var dx = x - cur.x; + var dy = opt_y - cur.y; + goog.style.setPosition(el, el.offsetLeft + dx, el.offsetTop + dy) +}; +goog.style.setSize = function(element, w, opt_h) { + var h; + if(w instanceof goog.math.Size) { + h = w.height; + w = w.width + }else { + if(opt_h == undefined) { + throw Error("missing height argument"); + } + h = opt_h + } + goog.style.setWidth(element, (w)); + goog.style.setHeight(element, (h)) +}; +goog.style.getPixelStyleValue_ = function(value, round) { + if(typeof value == "number") { + value = (round ? Math.round(value) : value) + "px" + } + return value +}; +goog.style.setHeight = function(element, height) { + element.style.height = goog.style.getPixelStyleValue_(height, true) +}; +goog.style.setWidth = function(element, width) { + element.style.width = goog.style.getPixelStyleValue_(width, true) +}; +goog.style.getSize = function(element) { + return goog.style.evaluateWithTemporaryDisplay_(goog.style.getSizeWithDisplay_, (element)) +}; +goog.style.evaluateWithTemporaryDisplay_ = function(fn, element) { + if(goog.style.getStyle_(element, "display") != "none") { + return fn(element) + } + var style = element.style; + var originalDisplay = style.display; + var originalVisibility = style.visibility; + var originalPosition = style.position; + style.visibility = "hidden"; + style.position = "absolute"; + style.display = "inline"; + var retVal = fn(element); + style.display = originalDisplay; + style.position = originalPosition; + style.visibility = originalVisibility; + return retVal +}; +goog.style.getSizeWithDisplay_ = function(element) { + var offsetWidth = element.offsetWidth; + var offsetHeight = element.offsetHeight; + var webkitOffsetsZero = goog.userAgent.WEBKIT && !offsetWidth && !offsetHeight; + if((!goog.isDef(offsetWidth) || webkitOffsetsZero) && element.getBoundingClientRect) { + var clientRect = goog.style.getBoundingClientRect_(element); + return new goog.math.Size(clientRect.right - clientRect.left, clientRect.bottom - clientRect.top) + } + return new goog.math.Size(offsetWidth, offsetHeight) +}; +goog.style.getTransformedSize = function(element) { + if(!element.getBoundingClientRect) { + return null + } + var clientRect = goog.style.evaluateWithTemporaryDisplay_(goog.style.getBoundingClientRect_, element); + return new goog.math.Size(clientRect.right - clientRect.left, clientRect.bottom - clientRect.top) +}; +goog.style.getBounds = function(element) { + var o = goog.style.getPageOffset(element); + var s = goog.style.getSize(element); + return new goog.math.Rect(o.x, o.y, s.width, s.height) +}; +goog.style.toCamelCase = function(selector) { + return goog.string.toCamelCase(String(selector)) +}; +goog.style.toSelectorCase = function(selector) { + return goog.string.toSelectorCase(selector) +}; +goog.style.getOpacity = function(el) { + var style = el.style; + var result = ""; + if("opacity" in style) { + result = style.opacity + }else { + if("MozOpacity" in style) { + result = style.MozOpacity + }else { + if("filter" in style) { + var match = style.filter.match(/alpha\(opacity=([\d.]+)\)/); + if(match) { + result = String(match[1] / 100) + } + } + } + } + return result == "" ? result : Number(result) +}; +goog.style.setOpacity = function(el, alpha) { + var style = el.style; + if("opacity" in style) { + style.opacity = alpha + }else { + if("MozOpacity" in style) { + style.MozOpacity = alpha + }else { + if("filter" in style) { + if(alpha === "") { + style.filter = "" + }else { + style.filter = "alpha(opacity\x3d" + alpha * 100 + ")" + } + } + } + } +}; +goog.style.setTransparentBackgroundImage = function(el, src) { + var style = el.style; + if(goog.userAgent.IE && !goog.userAgent.isVersionOrHigher("8")) { + style.filter = "progid:DXImageTransform.Microsoft.AlphaImageLoader(" + 'src\x3d"' + src + '", sizingMethod\x3d"crop")' + }else { + style.backgroundImage = "url(" + src + ")"; + style.backgroundPosition = "top left"; + style.backgroundRepeat = "no-repeat" + } +}; +goog.style.clearTransparentBackgroundImage = function(el) { + var style = el.style; + if("filter" in style) { + style.filter = "" + }else { + style.backgroundImage = "none" + } +}; +goog.style.showElement = function(el, display) { + goog.style.setElementShown(el, display) +}; +goog.style.setElementShown = function(el, isShown) { + el.style.display = isShown ? "" : "none" +}; +goog.style.isElementShown = function(el) { + return el.style.display != "none" +}; +goog.style.installStyles = function(stylesString, opt_node) { + var dh = goog.dom.getDomHelper(opt_node); + var styleSheet = null; + if(goog.userAgent.IE) { + styleSheet = dh.getDocument().createStyleSheet(); + goog.style.setStyles(styleSheet, stylesString) + }else { + var head = dh.getElementsByTagNameAndClass("head")[0]; + if(!head) { + var body = dh.getElementsByTagNameAndClass("body")[0]; + head = dh.createDom("head"); + body.parentNode.insertBefore(head, body) + } + styleSheet = dh.createDom("style"); + goog.style.setStyles(styleSheet, stylesString); + dh.appendChild(head, styleSheet) + } + return styleSheet +}; +goog.style.uninstallStyles = function(styleSheet) { + var node = styleSheet.ownerNode || styleSheet.owningElement || (styleSheet); + goog.dom.removeNode(node) +}; +goog.style.setStyles = function(element, stylesString) { + if(goog.userAgent.IE) { + element.cssText = stylesString + }else { + element.innerHTML = stylesString + } +}; +goog.style.setPreWrap = function(el) { + var style = el.style; + if(goog.userAgent.IE && !goog.userAgent.isVersionOrHigher("8")) { + style.whiteSpace = "pre"; + style.wordWrap = "break-word" + }else { + if(goog.userAgent.GECKO) { + style.whiteSpace = "-moz-pre-wrap" + }else { + style.whiteSpace = "pre-wrap" + } + } +}; +goog.style.setInlineBlock = function(el) { + var style = el.style; + style.position = "relative"; + if(goog.userAgent.IE && !goog.userAgent.isVersionOrHigher("8")) { + style.zoom = "1"; + style.display = "inline" + }else { + if(goog.userAgent.GECKO) { + style.display = goog.userAgent.isVersionOrHigher("1.9a") ? "inline-block" : "-moz-inline-box" + }else { + style.display = "inline-block" + } + } +}; +goog.style.isRightToLeft = function(el) { + return"rtl" == goog.style.getStyle_(el, "direction") +}; +goog.style.unselectableStyle_ = goog.userAgent.GECKO ? "MozUserSelect" : goog.userAgent.WEBKIT ? "WebkitUserSelect" : null; +goog.style.isUnselectable = function(el) { + if(goog.style.unselectableStyle_) { + return el.style[goog.style.unselectableStyle_].toLowerCase() == "none" + }else { + if(goog.userAgent.IE || goog.userAgent.OPERA) { + return el.getAttribute("unselectable") == "on" + } + } + return false +}; +goog.style.setUnselectable = function(el, unselectable, opt_noRecurse) { + var descendants = !opt_noRecurse ? el.getElementsByTagName("*") : null; + var name = goog.style.unselectableStyle_; + if(name) { + var value = unselectable ? "none" : ""; + el.style[name] = value; + if(descendants) { + for(var i = 0, descendant;descendant = descendants[i];i++) { + descendant.style[name] = value + } + } + }else { + if(goog.userAgent.IE || goog.userAgent.OPERA) { + var value = unselectable ? "on" : ""; + el.setAttribute("unselectable", value); + if(descendants) { + for(var i = 0, descendant;descendant = descendants[i];i++) { + descendant.setAttribute("unselectable", value) + } + } + } + } +}; +goog.style.getBorderBoxSize = function(element) { + return new goog.math.Size(element.offsetWidth, element.offsetHeight) +}; +goog.style.setBorderBoxSize = function(element, size) { + var doc = goog.dom.getOwnerDocument(element); + var isCss1CompatMode = goog.dom.getDomHelper(doc).isCss1CompatMode(); + if(goog.userAgent.IE && (!isCss1CompatMode || !goog.userAgent.isVersionOrHigher("8"))) { + var style = element.style; + if(isCss1CompatMode) { + var paddingBox = goog.style.getPaddingBox(element); + var borderBox = goog.style.getBorderBox(element); + style.pixelWidth = size.width - borderBox.left - paddingBox.left - paddingBox.right - borderBox.right; + style.pixelHeight = size.height - borderBox.top - paddingBox.top - paddingBox.bottom - borderBox.bottom + }else { + style.pixelWidth = size.width; + style.pixelHeight = size.height + } + }else { + goog.style.setBoxSizingSize_(element, size, "border-box") + } +}; +goog.style.getContentBoxSize = function(element) { + var doc = goog.dom.getOwnerDocument(element); + var ieCurrentStyle = goog.userAgent.IE && element.currentStyle; + if(ieCurrentStyle && goog.dom.getDomHelper(doc).isCss1CompatMode() && ieCurrentStyle.width != "auto" && ieCurrentStyle.height != "auto" && !ieCurrentStyle.boxSizing) { + var width = goog.style.getIePixelValue_(element, ieCurrentStyle.width, "width", "pixelWidth"); + var height = goog.style.getIePixelValue_(element, ieCurrentStyle.height, "height", "pixelHeight"); + return new goog.math.Size(width, height) + }else { + var borderBoxSize = goog.style.getBorderBoxSize(element); + var paddingBox = goog.style.getPaddingBox(element); + var borderBox = goog.style.getBorderBox(element); + return new goog.math.Size(borderBoxSize.width - borderBox.left - paddingBox.left - paddingBox.right - borderBox.right, borderBoxSize.height - borderBox.top - paddingBox.top - paddingBox.bottom - borderBox.bottom) + } +}; +goog.style.setContentBoxSize = function(element, size) { + var doc = goog.dom.getOwnerDocument(element); + var isCss1CompatMode = goog.dom.getDomHelper(doc).isCss1CompatMode(); + if(goog.userAgent.IE && (!isCss1CompatMode || !goog.userAgent.isVersionOrHigher("8"))) { + var style = element.style; + if(isCss1CompatMode) { + style.pixelWidth = size.width; + style.pixelHeight = size.height + }else { + var paddingBox = goog.style.getPaddingBox(element); + var borderBox = goog.style.getBorderBox(element); + style.pixelWidth = size.width + borderBox.left + paddingBox.left + paddingBox.right + borderBox.right; + style.pixelHeight = size.height + borderBox.top + paddingBox.top + paddingBox.bottom + borderBox.bottom + } + }else { + goog.style.setBoxSizingSize_(element, size, "content-box") + } +}; +goog.style.setBoxSizingSize_ = function(element, size, boxSizing) { + var style = element.style; + if(goog.userAgent.GECKO) { + style.MozBoxSizing = boxSizing + }else { + if(goog.userAgent.WEBKIT) { + style.WebkitBoxSizing = boxSizing + }else { + style.boxSizing = boxSizing + } + } + style.width = Math.max(size.width, 0) + "px"; + style.height = Math.max(size.height, 0) + "px" +}; +goog.style.getIePixelValue_ = function(element, value, name, pixelName) { + if(/^\d+px?$/.test(value)) { + return parseInt(value, 10) + }else { + var oldStyleValue = element.style[name]; + var oldRuntimeValue = element.runtimeStyle[name]; + element.runtimeStyle[name] = element.currentStyle[name]; + element.style[name] = value; + var pixelValue = element.style[pixelName]; + element.style[name] = oldStyleValue; + element.runtimeStyle[name] = oldRuntimeValue; + return pixelValue + } +}; +goog.style.getIePixelDistance_ = function(element, propName) { + var value = goog.style.getCascadedStyle(element, propName); + return value ? goog.style.getIePixelValue_(element, value, "left", "pixelLeft") : 0 +}; +goog.style.getBox_ = function(element, stylePrefix) { + if(goog.userAgent.IE) { + var left = goog.style.getIePixelDistance_(element, stylePrefix + "Left"); + var right = goog.style.getIePixelDistance_(element, stylePrefix + "Right"); + var top = goog.style.getIePixelDistance_(element, stylePrefix + "Top"); + var bottom = goog.style.getIePixelDistance_(element, stylePrefix + "Bottom"); + return new goog.math.Box(top, right, bottom, left) + }else { + var left = (goog.style.getComputedStyle(element, stylePrefix + "Left")); + var right = (goog.style.getComputedStyle(element, stylePrefix + "Right")); + var top = (goog.style.getComputedStyle(element, stylePrefix + "Top")); + var bottom = (goog.style.getComputedStyle(element, stylePrefix + "Bottom")); + return new goog.math.Box(parseFloat(top), parseFloat(right), parseFloat(bottom), parseFloat(left)) + } +}; +goog.style.getPaddingBox = function(element) { + return goog.style.getBox_(element, "padding") +}; +goog.style.getMarginBox = function(element) { + return goog.style.getBox_(element, "margin") +}; +goog.style.ieBorderWidthKeywords_ = {"thin":2, "medium":4, "thick":6}; +goog.style.getIePixelBorder_ = function(element, prop) { + if(goog.style.getCascadedStyle(element, prop + "Style") == "none") { + return 0 + } + var width = goog.style.getCascadedStyle(element, prop + "Width"); + if(width in goog.style.ieBorderWidthKeywords_) { + return goog.style.ieBorderWidthKeywords_[width] + } + return goog.style.getIePixelValue_(element, width, "left", "pixelLeft") +}; +goog.style.getBorderBox = function(element) { + if(goog.userAgent.IE) { + var left = goog.style.getIePixelBorder_(element, "borderLeft"); + var right = goog.style.getIePixelBorder_(element, "borderRight"); + var top = goog.style.getIePixelBorder_(element, "borderTop"); + var bottom = goog.style.getIePixelBorder_(element, "borderBottom"); + return new goog.math.Box(top, right, bottom, left) + }else { + var left = (goog.style.getComputedStyle(element, "borderLeftWidth")); + var right = (goog.style.getComputedStyle(element, "borderRightWidth")); + var top = (goog.style.getComputedStyle(element, "borderTopWidth")); + var bottom = (goog.style.getComputedStyle(element, "borderBottomWidth")); + return new goog.math.Box(parseFloat(top), parseFloat(right), parseFloat(bottom), parseFloat(left)) + } +}; +goog.style.getFontFamily = function(el) { + var doc = goog.dom.getOwnerDocument(el); + var font = ""; + if(doc.body.createTextRange) { + var range = doc.body.createTextRange(); + range.moveToElementText(el); + try { + font = range.queryCommandValue("FontName") + }catch(e) { + font = "" + } + } + if(!font) { + font = goog.style.getStyle_(el, "fontFamily") + } + var fontsArray = font.split(","); + if(fontsArray.length > 1) { + font = fontsArray[0] + } + return goog.string.stripQuotes(font, "\"'") +}; +goog.style.lengthUnitRegex_ = /[^\d]+$/; +goog.style.getLengthUnits = function(value) { + var units = value.match(goog.style.lengthUnitRegex_); + return units && units[0] || null +}; +goog.style.ABSOLUTE_CSS_LENGTH_UNITS_ = {"cm":1, "in":1, "mm":1, "pc":1, "pt":1}; +goog.style.CONVERTIBLE_RELATIVE_CSS_UNITS_ = {"em":1, "ex":1}; +goog.style.getFontSize = function(el) { + var fontSize = goog.style.getStyle_(el, "fontSize"); + var sizeUnits = goog.style.getLengthUnits(fontSize); + if(fontSize && "px" == sizeUnits) { + return parseInt(fontSize, 10) + } + if(goog.userAgent.IE) { + if(sizeUnits in goog.style.ABSOLUTE_CSS_LENGTH_UNITS_) { + return goog.style.getIePixelValue_(el, fontSize, "left", "pixelLeft") + }else { + if(el.parentNode && el.parentNode.nodeType == goog.dom.NodeType.ELEMENT && sizeUnits in goog.style.CONVERTIBLE_RELATIVE_CSS_UNITS_) { + var parentElement = (el.parentNode); + var parentSize = goog.style.getStyle_(parentElement, "fontSize"); + return goog.style.getIePixelValue_(parentElement, fontSize == parentSize ? "1em" : fontSize, "left", "pixelLeft") + } + } + } + var sizeElement = goog.dom.createDom("span", {"style":"visibility:hidden;position:absolute;" + "line-height:0;padding:0;margin:0;border:0;height:1em;"}); + goog.dom.appendChild(el, sizeElement); + fontSize = sizeElement.offsetHeight; + goog.dom.removeNode(sizeElement); + return fontSize +}; +goog.style.parseStyleAttribute = function(value) { + var result = {}; + goog.array.forEach(value.split(/\s*;\s*/), function(pair) { + var keyValue = pair.split(/\s*:\s*/); + if(keyValue.length == 2) { + result[goog.string.toCamelCase(keyValue[0].toLowerCase())] = keyValue[1] + } + }); + return result +}; +goog.style.toStyleAttribute = function(obj) { + var buffer = []; + goog.object.forEach(obj, function(value, key) { + buffer.push(goog.string.toSelectorCase(key), ":", value, ";") + }); + return buffer.join("") +}; +goog.style.setFloat = function(el, value) { + el.style[goog.userAgent.IE ? "styleFloat" : "cssFloat"] = value +}; +goog.style.getFloat = function(el) { + return el.style[goog.userAgent.IE ? "styleFloat" : "cssFloat"] || "" +}; +goog.style.getScrollbarWidth = function(opt_className) { + var outerDiv = goog.dom.createElement("div"); + if(opt_className) { + outerDiv.className = opt_className + } + outerDiv.style.cssText = "overflow:auto;" + "position:absolute;top:0;width:100px;height:100px"; + var innerDiv = goog.dom.createElement("div"); + goog.style.setSize(innerDiv, "200px", "200px"); + outerDiv.appendChild(innerDiv); + goog.dom.appendChild(goog.dom.getDocument().body, outerDiv); + var width = outerDiv.offsetWidth - outerDiv.clientWidth; + goog.dom.removeNode(outerDiv); + return width +}; +goog.style.MATRIX_TRANSLATION_REGEX_ = new RegExp("matrix\\([0-9\\.\\-]+, [0-9\\.\\-]+, " + "[0-9\\.\\-]+, [0-9\\.\\-]+, " + "([0-9\\.\\-]+)p?x?, ([0-9\\.\\-]+)p?x?\\)"); +goog.style.getCssTranslation = function(element) { + var property; + if(goog.userAgent.IE) { + property = "-ms-transform" + }else { + if(goog.userAgent.WEBKIT) { + property = "-webkit-transform" + }else { + if(goog.userAgent.OPERA) { + property = "-o-transform" + }else { + if(goog.userAgent.GECKO) { + property = "-moz-transform" + } + } + } + } + var transform; + if(property) { + transform = goog.style.getStyle_(element, property) + } + if(!transform) { + transform = goog.style.getStyle_(element, "transform") + } + if(!transform) { + return new goog.math.Coordinate(0, 0) + } + var matches = transform.match(goog.style.MATRIX_TRANSLATION_REGEX_); + if(!matches) { + return new goog.math.Coordinate(0, 0) + } + return new goog.math.Coordinate(parseFloat(matches[1]), parseFloat(matches[2])) +}; +goog.provide("goog.events.MouseWheelEvent"); +goog.provide("goog.events.MouseWheelHandler"); +goog.provide("goog.events.MouseWheelHandler.EventType"); +goog.require("goog.dom"); +goog.require("goog.events"); +goog.require("goog.events.BrowserEvent"); +goog.require("goog.events.EventTarget"); +goog.require("goog.math"); +goog.require("goog.style"); +goog.require("goog.userAgent"); +goog.events.MouseWheelHandler = function(element, opt_capture) { + goog.events.EventTarget.call(this); + this.element_ = element; + var rtlElement = goog.dom.isElement(this.element_) ? (this.element_) : this.element_ ? (this.element_).body : null; + this.isRtl_ = !!rtlElement && goog.style.isRightToLeft(rtlElement); + var type = goog.userAgent.GECKO ? "DOMMouseScroll" : "mousewheel"; + this.listenKey_ = goog.events.listen(this.element_, type, this, opt_capture) +}; +goog.inherits(goog.events.MouseWheelHandler, goog.events.EventTarget); +goog.events.MouseWheelHandler.EventType = {MOUSEWHEEL:"mousewheel"}; +goog.events.MouseWheelHandler.prototype.maxDeltaX_; +goog.events.MouseWheelHandler.prototype.maxDeltaY_; +goog.events.MouseWheelHandler.prototype.setMaxDeltaX = function(maxDeltaX) { + this.maxDeltaX_ = maxDeltaX +}; +goog.events.MouseWheelHandler.prototype.setMaxDeltaY = function(maxDeltaY) { + this.maxDeltaY_ = maxDeltaY +}; +goog.events.MouseWheelHandler.prototype.handleEvent = function(e) { + var deltaX = 0; + var deltaY = 0; + var detail = 0; + var be = e.getBrowserEvent(); + if(be.type == "mousewheel") { + var wheelDeltaScaleFactor = 1; + if(goog.userAgent.IE || goog.userAgent.WEBKIT && (goog.userAgent.WINDOWS || goog.userAgent.isVersionOrHigher("532.0"))) { + wheelDeltaScaleFactor = 40 + } + detail = goog.events.MouseWheelHandler.smartScale_(-be.wheelDelta, wheelDeltaScaleFactor); + if(goog.isDef(be.wheelDeltaX)) { + deltaX = goog.events.MouseWheelHandler.smartScale_(-be.wheelDeltaX, wheelDeltaScaleFactor); + deltaY = goog.events.MouseWheelHandler.smartScale_(-be.wheelDeltaY, wheelDeltaScaleFactor) + }else { + deltaY = detail + } + }else { + detail = be.detail; + if(detail > 100) { + detail = 3 + }else { + if(detail < -100) { + detail = -3 + } + } + if(goog.isDef(be.axis) && be.axis === be.HORIZONTAL_AXIS) { + deltaX = detail + }else { + deltaY = detail + } + } + if(goog.isNumber(this.maxDeltaX_)) { + deltaX = goog.math.clamp(deltaX, -this.maxDeltaX_, this.maxDeltaX_) + } + if(goog.isNumber(this.maxDeltaY_)) { + deltaY = goog.math.clamp(deltaY, -this.maxDeltaY_, this.maxDeltaY_) + } + if(this.isRtl_) { + deltaX = -deltaX + } + var newEvent = new goog.events.MouseWheelEvent(detail, be, deltaX, deltaY); + this.dispatchEvent(newEvent) +}; +goog.events.MouseWheelHandler.smartScale_ = function(mouseWheelDelta, scaleFactor) { + if(goog.userAgent.WEBKIT && (goog.userAgent.MAC || goog.userAgent.LINUX) && mouseWheelDelta % scaleFactor != 0) { + return mouseWheelDelta + }else { + return mouseWheelDelta / scaleFactor + } +}; +goog.events.MouseWheelHandler.prototype.disposeInternal = function() { + goog.events.MouseWheelHandler.superClass_.disposeInternal.call(this); + goog.events.unlistenByKey(this.listenKey_); + this.listenKey_ = null +}; +goog.events.MouseWheelEvent = function(detail, browserEvent, deltaX, deltaY) { + goog.events.BrowserEvent.call(this, browserEvent); + this.type = goog.events.MouseWheelHandler.EventType.MOUSEWHEEL; + this.detail = detail; + this.deltaX = deltaX; + this.deltaY = deltaY +}; +goog.inherits(goog.events.MouseWheelEvent, goog.events.BrowserEvent); +goog.provide("goog.log"); +goog.provide("goog.log.Level"); +goog.provide("goog.log.LogRecord"); +goog.provide("goog.log.Logger"); +goog.require("goog.debug"); +goog.require("goog.debug.LogRecord"); +goog.require("goog.debug.Logger"); +goog.define("goog.log.ENABLED", goog.debug.LOGGING_ENABLED); +goog.log.Logger = goog.debug.Logger; +goog.log.Level = goog.debug.Logger.Level; +goog.log.LogRecord = goog.debug.LogRecord; +goog.log.getLogger = function(name, opt_level) { + if(goog.log.ENABLED) { + var logger = goog.debug.Logger.getLogger(name); + if(opt_level && logger) { + logger.setLevel(opt_level) + } + return logger + }else { + return null + } +}; +goog.log.addHandler = function(logger, handler) { + if(goog.log.ENABLED && logger) { + logger.addHandler(handler) + } +}; +goog.log.removeHandler = function(logger, handler) { + if(goog.log.ENABLED && logger) { + return logger.removeHandler(handler) + }else { + return false + } +}; +goog.log.log = function(logger, level, msg, opt_exception) { + if(goog.log.ENABLED && logger) { + logger.log(level, msg, opt_exception) + } +}; +goog.log.error = function(logger, msg, opt_exception) { + if(goog.log.ENABLED && logger) { + logger.severe(msg, opt_exception) + } +}; +goog.log.warning = function(logger, msg, opt_exception) { + if(goog.log.ENABLED && logger) { + logger.warning(msg, opt_exception) + } +}; +goog.log.info = function(logger, msg, opt_exception) { + if(goog.log.ENABLED && logger) { + logger.info(msg, opt_exception) + } +}; +goog.log.fine = function(logger, msg, opt_exception) { + if(goog.log.ENABLED && logger) { + logger.fine(msg, opt_exception) + } +}; +goog.provide("ol.control.Control"); +goog.require("goog.array"); +goog.require("goog.dom"); +goog.require("goog.events"); +goog.require("ol.MapEventType"); +goog.require("ol.Object"); +ol.control.Control = function(options) { + goog.base(this); + this.element = goog.isDef(options.element) ? options.element : null; + this.target_ = goog.isDef(options.target) ? goog.dom.getElement(options.target) : null; + this.map_ = null; + this.listenerKeys = [] +}; +goog.inherits(ol.control.Control, ol.Object); +ol.control.Control.prototype.disposeInternal = function() { + goog.dom.removeNode(this.element); + goog.base(this, "disposeInternal") +}; +ol.control.Control.prototype.getMap = function() { + return this.map_ +}; +ol.control.Control.prototype.handleMapPostrender = goog.nullFunction; +ol.control.Control.prototype.setMap = function(map) { + if(!goog.isNull(this.map_)) { + goog.dom.removeNode(this.element) + } + if(!goog.array.isEmpty(this.listenerKeys)) { + goog.array.forEach(this.listenerKeys, goog.events.unlistenByKey); + this.listenerKeys.length = 0 + } + this.map_ = map; + if(!goog.isNull(this.map_)) { + var target = !goog.isNull(this.target_) ? this.target_ : map.getOverlayContainerStopEvent(); + goog.dom.appendChild(target, this.element); + if(this.handleMapPostrender !== goog.nullFunction) { + this.listenerKeys.push(goog.events.listen(map, ol.MapEventType.POSTRENDER, this.handleMapPostrender, false, this)) + } + map.render() + } +}; +goog.provide("ol.css"); +ol.css.CLASS_UNSELECTABLE = "ol-unselectable"; +ol.css.CLASS_UNSUPPORTED = "ol-unsupported"; +goog.provide("ol.control.Attribution"); +goog.require("goog.array"); +goog.require("goog.dom"); +goog.require("goog.dom.TagName"); +goog.require("goog.object"); +goog.require("goog.style"); +goog.require("ol.Attribution"); +goog.require("ol.FrameState"); +goog.require("ol.control.Control"); +goog.require("ol.css"); +ol.control.Attribution = function(opt_options) { + var options = goog.isDef(opt_options) ? opt_options : {}; + this.ulElement_ = goog.dom.createElement(goog.dom.TagName.UL); + var className = goog.isDef(options.className) ? options.className : "ol-attribution"; + var element = goog.dom.createDom(goog.dom.TagName.DIV, {"class":className + " " + ol.css.CLASS_UNSELECTABLE}, this.ulElement_); + goog.base(this, {element:element, target:options.target}); + this.renderedVisible_ = true; + this.attributionElements_ = {}; + this.attributionElementRenderedVisible_ = {} +}; +goog.inherits(ol.control.Attribution, ol.control.Control); +ol.control.Attribution.prototype.getSourceAttributions = function(frameState) { + var i, ii, j, jj, tileRanges, source, sourceAttribution, sourceAttributionKey, sourceAttributions, sourceKey; + var layers = frameState.layersArray; + var attributions = goog.object.clone(frameState.attributions); + var hiddenAttributions = {}; + for(i = 0, ii = layers.length;i < ii;i++) { + source = layers[i].getSource(); + sourceKey = goog.getUid(source).toString(); + sourceAttributions = source.getAttributions(); + if(goog.isNull(sourceAttributions)) { + continue + } + for(j = 0, jj = sourceAttributions.length;j < jj;j++) { + sourceAttribution = sourceAttributions[j]; + sourceAttributionKey = goog.getUid(sourceAttribution).toString(); + if(sourceAttributionKey in attributions) { + continue + } + tileRanges = frameState.usedTiles[sourceKey]; + if(goog.isDef(tileRanges) && sourceAttribution.intersectsAnyTileRange(tileRanges)) { + if(sourceAttributionKey in hiddenAttributions) { + delete hiddenAttributions[sourceAttributionKey] + } + attributions[sourceAttributionKey] = sourceAttribution + }else { + hiddenAttributions[sourceAttributionKey] = sourceAttribution + } + } + } + return[attributions, hiddenAttributions] +}; +ol.control.Attribution.prototype.handleMapPostrender = function(mapEvent) { + this.updateElement_(mapEvent.frameState) +}; +ol.control.Attribution.prototype.updateElement_ = function(frameState) { + if(goog.isNull(frameState)) { + if(this.renderedVisible_) { + goog.style.setElementShown(this.element, false); + this.renderedVisible_ = false + } + return + } + var attributions = this.getSourceAttributions(frameState); + var visibleAttributions = attributions[0]; + var hiddenAttributions = attributions[1]; + var attributionElement, attributionKey; + for(attributionKey in this.attributionElements_) { + if(attributionKey in visibleAttributions) { + if(!this.attributionElementRenderedVisible_[attributionKey]) { + goog.style.setElementShown(this.attributionElements_[attributionKey], true); + this.attributionElementRenderedVisible_[attributionKey] = true + } + delete visibleAttributions[attributionKey] + }else { + if(attributionKey in hiddenAttributions) { + if(this.attributionElementRenderedVisible_[attributionKey]) { + goog.style.setElementShown(this.attributionElements_[attributionKey], false); + delete this.attributionElementRenderedVisible_[attributionKey] + } + delete hiddenAttributions[attributionKey] + }else { + goog.dom.removeNode(this.attributionElements_[attributionKey]); + delete this.attributionElements_[attributionKey]; + delete this.attributionElementRenderedVisible_[attributionKey] + } + } + } + for(attributionKey in visibleAttributions) { + attributionElement = goog.dom.createElement(goog.dom.TagName.LI); + attributionElement.innerHTML = visibleAttributions[attributionKey].getHTML(); + goog.dom.appendChild(this.ulElement_, attributionElement); + this.attributionElements_[attributionKey] = attributionElement; + this.attributionElementRenderedVisible_[attributionKey] = true + } + for(attributionKey in hiddenAttributions) { + attributionElement = goog.dom.createElement(goog.dom.TagName.LI); + attributionElement.innerHTML = hiddenAttributions[attributionKey].getHTML(); + goog.style.setElementShown(attributionElement, false); + goog.dom.appendChild(this.ulElement_, attributionElement); + this.attributionElements_[attributionKey] = attributionElement + } + var renderVisible = !goog.object.isEmpty(this.attributionElementRenderedVisible_); + if(this.renderedVisible_ != renderVisible) { + goog.style.setElementShown(this.element, renderVisible); + this.renderedVisible_ = renderVisible + } +}; +goog.provide("ol.control.Logo"); +goog.require("goog.dom"); +goog.require("goog.dom.TagName"); +goog.require("goog.object"); +goog.require("goog.style"); +goog.require("ol.FrameState"); +goog.require("ol.control.Control"); +goog.require("ol.css"); +ol.control.Logo = function(opt_options) { + var options = goog.isDef(opt_options) ? opt_options : {}; + this.ulElement_ = goog.dom.createElement(goog.dom.TagName.UL); + var className = goog.isDef(options.className) ? options.className : "ol-logo"; + var element = goog.dom.createDom(goog.dom.TagName.DIV, {"class":className + " " + ol.css.CLASS_UNSELECTABLE}, this.ulElement_); + goog.base(this, {element:element, target:options.target}); + this.renderedVisible_ = true; + this.logoElements_ = {} +}; +goog.inherits(ol.control.Logo, ol.control.Control); +ol.control.Logo.prototype.handleMapPostrender = function(mapEvent) { + this.updateElement_(mapEvent.frameState) +}; +ol.control.Logo.prototype.updateElement_ = function(frameState) { + if(goog.isNull(frameState)) { + if(this.renderedVisible_) { + goog.style.setElementShown(this.element, false); + this.renderedVisible_ = false + } + return + } + var logo; + var logos = frameState.logos; + var logoElements = this.logoElements_; + for(logo in logoElements) { + if(!(logo in logos)) { + goog.dom.removeNode(logoElements[logo]); + delete logoElements[logo] + } + } + var image, logoElement, logoKey; + for(logoKey in logos) { + if(!(logoKey in logoElements)) { + image = new Image; + image.src = logoKey; + var logoValue = logos[logoKey]; + var child; + if(logoValue === "") { + child = image + }else { + child = goog.dom.createDom(goog.dom.TagName.A, {"href":logoValue, "target":"_blank"}); + child.appendChild(image) + } + logoElement = goog.dom.createDom(goog.dom.TagName.LI, undefined, child); + goog.dom.appendChild(this.ulElement_, logoElement); + logoElements[logoKey] = logoElement + } + } + var renderVisible = !goog.object.isEmpty(logos); + if(this.renderedVisible_ != renderVisible) { + goog.style.setElementShown(this.element, renderVisible); + this.renderedVisible_ = renderVisible + } +}; +goog.provide("ol.control.Zoom"); +goog.require("goog.asserts"); +goog.require("goog.dom"); +goog.require("goog.dom.TagName"); +goog.require("goog.events"); +goog.require("goog.events.EventType"); +goog.require("ol.View2D"); +goog.require("ol.animation"); +goog.require("ol.control.Control"); +goog.require("ol.css"); +goog.require("ol.easing"); +ol.control.Zoom = function(opt_options) { + var options = goog.isDef(opt_options) ? opt_options : {}; + var className = goog.isDef(options.className) ? options.className : "ol-zoom"; + var delta = goog.isDef(options.delta) ? options.delta : 1; + var zoomInLabel = goog.isDef(options.zoomInLabel) ? options.zoomInLabel : "+"; + var zoomOutLabel = goog.isDef(options.zoomOutLabel) ? options.zoomOutLabel : "\u2212"; + var zoomInTipLabel = goog.isDef(options.zoomInTipLabel) ? options.zoomInTipLabel : "Zoom in"; + var zoomOutTipLabel = goog.isDef(options.zoomOutTipLabel) ? options.zoomOutTipLabel : "Zoom out"; + var tTipZoomIn = goog.dom.createDom(goog.dom.TagName.SPAN, {"role":"tooltip"}, zoomInTipLabel); + var inElement = goog.dom.createDom(goog.dom.TagName.BUTTON, {"class":className + "-in ol-has-tooltip", "name":"ZoomIn", "type":"button"}, tTipZoomIn, zoomInLabel); + goog.events.listen(inElement, [goog.events.EventType.TOUCHEND, goog.events.EventType.CLICK], goog.partial(ol.control.Zoom.prototype.zoomByDelta_, delta), false, this); + goog.events.listen(inElement, [goog.events.EventType.MOUSEOUT, goog.events.EventType.FOCUSOUT], function() { + this.blur() + }, false); + var tTipsZoomOut = goog.dom.createDom(goog.dom.TagName.SPAN, {"role":"tooltip", "type":"button"}, zoomOutTipLabel); + var outElement = goog.dom.createDom(goog.dom.TagName.BUTTON, {"class":className + "-out ol-has-tooltip", "name":"ZoomOut"}, tTipsZoomOut, zoomOutLabel); + goog.events.listen(outElement, [goog.events.EventType.TOUCHEND, goog.events.EventType.CLICK], goog.partial(ol.control.Zoom.prototype.zoomByDelta_, -delta), false, this); + goog.events.listen(outElement, [goog.events.EventType.MOUSEOUT, goog.events.EventType.FOCUSOUT], function() { + this.blur() + }, false); + var cssClasses = className + " " + ol.css.CLASS_UNSELECTABLE; + var element = goog.dom.createDom(goog.dom.TagName.DIV, cssClasses, inElement, outElement); + goog.base(this, {element:element, target:options.target}); + this.duration_ = goog.isDef(options.duration) ? options.duration : 250 +}; +goog.inherits(ol.control.Zoom, ol.control.Control); +ol.control.Zoom.prototype.zoomByDelta_ = function(delta, browserEvent) { + browserEvent.preventDefault(); + var map = this.getMap(); + var view = map.getView(); + goog.asserts.assert(goog.isDef(view)); + var view2D = view.getView2D(); + goog.asserts.assertInstanceof(view2D, ol.View2D); + var currentResolution = view2D.getResolution(); + if(goog.isDef(currentResolution)) { + if(this.duration_ > 0) { + map.beforeRender(ol.animation.zoom({resolution:currentResolution, duration:this.duration_, easing:ol.easing.easeOut})) + } + var newResolution = view2D.constrainResolution(currentResolution, delta); + view2D.setResolution(newResolution) + } +}; +goog.provide("ol.control"); +goog.require("ol.Collection"); +goog.require("ol.control.Attribution"); +goog.require("ol.control.Logo"); +goog.require("ol.control.Zoom"); +ol.control.defaults = function(opt_options) { + var options = goog.isDef(opt_options) ? opt_options : {}; + var controls = new ol.Collection; + var zoomControl = goog.isDef(options.zoom) ? options.zoom : true; + if(zoomControl) { + var zoomControlOptions = goog.isDef(options.zoomOptions) ? options.zoomOptions : undefined; + controls.push(new ol.control.Zoom(zoomControlOptions)) + } + var attributionControl = goog.isDef(options.attribution) ? options.attribution : true; + if(attributionControl) { + var attributionControlOptions = goog.isDef(options.attributionOptions) ? options.attributionOptions : undefined; + controls.push(new ol.control.Attribution(attributionControlOptions)) + } + var logoControl = goog.isDef(options.logo) ? options.logo : true; + if(logoControl) { + var logoControlOptions = goog.isDef(options.logoOptions) ? options.logoOptions : undefined; + controls.push(new ol.control.Logo(logoControlOptions)) + } + return controls +}; +goog.provide("ol.Kinetic"); +goog.require("ol.Coordinate"); +goog.require("ol.PreRenderFunction"); +goog.require("ol.animation"); +ol.Kinetic = function(decay, minVelocity, delay) { + this.decay_ = decay; + this.minVelocity_ = minVelocity; + this.delay_ = delay; + this.points_ = []; + this.angle_ = 0; + this.initialVelocity_ = 0 +}; +ol.Kinetic.prototype.begin = function() { + this.points_.length = 0; + this.angle_ = 0; + this.initialVelocity_ = 0 +}; +ol.Kinetic.prototype.update = function(x, y) { + this.points_.push(x, y, goog.now()) +}; +ol.Kinetic.prototype.end = function() { + var delay = goog.now() - this.delay_; + var lastIndex = this.points_.length - 3; + if(this.points_[lastIndex + 2] < delay) { + return false + } + var firstIndex = lastIndex - 3; + while(firstIndex >= 0 && this.points_[firstIndex + 2] > delay) { + firstIndex -= 3 + } + if(firstIndex >= 0) { + var duration = this.points_[lastIndex + 2] - this.points_[firstIndex + 2]; + var dx = this.points_[lastIndex] - this.points_[firstIndex]; + var dy = this.points_[lastIndex + 1] - this.points_[firstIndex + 1]; + this.angle_ = Math.atan2(dy, dx); + this.initialVelocity_ = Math.sqrt(dx * dx + dy * dy) / duration; + return this.initialVelocity_ > this.minVelocity_ + } + return false +}; +ol.Kinetic.prototype.pan = function(source) { + var decay = this.decay_; + var initialVelocity = this.initialVelocity_; + var minVelocity = this.minVelocity_; + var duration = this.getDuration_(); + var easingFunction = function(t) { + return initialVelocity * (Math.exp(decay * t * duration) - 1) / (minVelocity - initialVelocity) + }; + return ol.animation.pan({source:source, duration:duration, easing:easingFunction}) +}; +ol.Kinetic.prototype.getDuration_ = function() { + return Math.log(this.minVelocity_ / this.initialVelocity_) / this.decay_ +}; +ol.Kinetic.prototype.getDistance = function() { + return(this.minVelocity_ - this.initialVelocity_) / this.decay_ +}; +ol.Kinetic.prototype.getAngle = function() { + return this.angle_ +}; +goog.provide("ol.interaction.DoubleClickZoom"); +goog.require("goog.asserts"); +goog.require("ol.MapBrowserEvent"); +goog.require("ol.MapBrowserEvent.EventType"); +goog.require("ol.interaction.Interaction"); +ol.interaction.DoubleClickZoom = function(opt_options) { + var options = goog.isDef(opt_options) ? opt_options : {}; + this.delta_ = goog.isDef(options.delta) ? options.delta : 1; + goog.base(this); + this.duration_ = goog.isDef(options.duration) ? options.duration : 250 +}; +goog.inherits(ol.interaction.DoubleClickZoom, ol.interaction.Interaction); +ol.interaction.DoubleClickZoom.prototype.handleMapBrowserEvent = function(mapBrowserEvent) { + var stopEvent = false; + var browserEvent = mapBrowserEvent.browserEvent; + if(mapBrowserEvent.type == ol.MapBrowserEvent.EventType.DBLCLICK) { + var map = mapBrowserEvent.map; + var anchor = mapBrowserEvent.coordinate; + var delta = browserEvent.shiftKey ? -this.delta_ : this.delta_; + var view = map.getView().getView2D(); + ol.interaction.Interaction.zoomByDelta(map, view, delta, anchor, this.duration_); + mapBrowserEvent.preventDefault(); + stopEvent = true + } + return!stopEvent +}; +goog.provide("ol.interaction.DragPan"); +goog.require("goog.asserts"); +goog.require("ol.Kinetic"); +goog.require("ol.PreRenderFunction"); +goog.require("ol.View2D"); +goog.require("ol.ViewHint"); +goog.require("ol.coordinate"); +goog.require("ol.events.ConditionType"); +goog.require("ol.events.condition"); +goog.require("ol.interaction.Drag"); +ol.interaction.DragPan = function(opt_options) { + goog.base(this); + var options = goog.isDef(opt_options) ? opt_options : {}; + this.condition_ = goog.isDef(options.condition) ? options.condition : ol.events.condition.noModifierKeys; + this.kinetic_ = options.kinetic; + this.kineticPreRenderFn_ = null +}; +goog.inherits(ol.interaction.DragPan, ol.interaction.Drag); +ol.interaction.DragPan.prototype.handleDrag = function(mapBrowserEvent) { + if(this.kinetic_) { + this.kinetic_.update(mapBrowserEvent.browserEvent.clientX, mapBrowserEvent.browserEvent.clientY) + } + var map = mapBrowserEvent.map; + var view = map.getView(); + goog.asserts.assertInstanceof(view, ol.View2D); + var view2DState = view.getView2DState(); + var newCenter = [-view2DState.resolution * this.deltaX, view2DState.resolution * this.deltaY]; + ol.coordinate.rotate(newCenter, view2DState.rotation); + ol.coordinate.add(newCenter, this.startCenter); + newCenter = view.constrainCenter(newCenter); + map.render(); + view.setCenter(newCenter) +}; +ol.interaction.DragPan.prototype.handleDragEnd = function(mapBrowserEvent) { + var map = mapBrowserEvent.map; + var view = map.getView(); + view.setHint(ol.ViewHint.INTERACTING, -1); + if(this.kinetic_ && this.kinetic_.end()) { + var view2D = view.getView2D(); + goog.asserts.assertInstanceof(view2D, ol.View2D); + var view2DState = view2D.getView2DState(); + var distance = this.kinetic_.getDistance(); + var angle = this.kinetic_.getAngle(); + this.kineticPreRenderFn_ = this.kinetic_.pan(view2DState.center); + map.beforeRender(this.kineticPreRenderFn_); + var centerpx = map.getPixelFromCoordinate(view2DState.center); + var dest = map.getCoordinateFromPixel([centerpx[0] - distance * Math.cos(angle), centerpx[1] - distance * Math.sin(angle)]); + dest = view2D.constrainCenter(dest); + view2D.setCenter(dest) + } + map.render() +}; +ol.interaction.DragPan.prototype.handleDragStart = function(mapBrowserEvent) { + var browserEvent = mapBrowserEvent.browserEvent; + if(browserEvent.isMouseActionButton() && this.condition_(mapBrowserEvent)) { + if(this.kinetic_) { + this.kinetic_.begin(); + this.kinetic_.update(browserEvent.clientX, browserEvent.clientY) + } + var map = mapBrowserEvent.map; + map.getView().setHint(ol.ViewHint.INTERACTING, 1); + map.render(); + return true + }else { + return false + } +}; +ol.interaction.DragPan.prototype.handleDown = function(mapBrowserEvent) { + var map = mapBrowserEvent.map; + var view = map.getView(); + goog.asserts.assertInstanceof(view, ol.View2D); + goog.asserts.assert(!goog.isNull(mapBrowserEvent.frameState)); + if(!goog.isNull(this.kineticPreRenderFn_) && map.removePreRenderFunction(this.kineticPreRenderFn_)) { + map.render(); + view.setCenter(mapBrowserEvent.frameState.view2DState.center); + this.kineticPreRenderFn_ = null + } +}; +goog.provide("ol.interaction.DragRotate"); +goog.require("goog.asserts"); +goog.require("ol.ViewHint"); +goog.require("ol.events.ConditionType"); +goog.require("ol.events.condition"); +goog.require("ol.interaction.Drag"); +goog.require("ol.interaction.Interaction"); +ol.interaction.DRAGROTATE_ANIMATION_DURATION = 250; +ol.interaction.DragRotate = function(opt_options) { + var options = goog.isDef(opt_options) ? opt_options : {}; + goog.base(this); + this.condition_ = goog.isDef(options.condition) ? options.condition : ol.events.condition.altShiftKeysOnly; + this.lastAngle_ = undefined +}; +goog.inherits(ol.interaction.DragRotate, ol.interaction.Drag); +ol.interaction.DragRotate.prototype.handleDrag = function(mapBrowserEvent) { + var map = mapBrowserEvent.map; + var size = map.getSize(); + var offset = mapBrowserEvent.pixel; + var theta = Math.atan2(size[1] / 2 - offset[1], offset[0] - size[0] / 2); + if(goog.isDef(this.lastAngle_)) { + var delta = theta - this.lastAngle_; + var view = map.getView().getView2D(); + var view2DState = view.getView2DState(); + map.render(); + ol.interaction.Interaction.rotateWithoutConstraints(map, view, view2DState.rotation - delta) + } + this.lastAngle_ = theta +}; +ol.interaction.DragRotate.prototype.handleDragEnd = function(mapBrowserEvent) { + var map = mapBrowserEvent.map; + var view = map.getView(); + view.setHint(ol.ViewHint.INTERACTING, -1); + var view2D = view.getView2D(); + var view2DState = view2D.getView2DState(); + ol.interaction.Interaction.rotate(map, view2D, view2DState.rotation, undefined, ol.interaction.DRAGROTATE_ANIMATION_DURATION) +}; +ol.interaction.DragRotate.prototype.handleDragStart = function(mapBrowserEvent) { + var browserEvent = mapBrowserEvent.browserEvent; + if(browserEvent.isMouseActionButton() && this.condition_(mapBrowserEvent)) { + var map = mapBrowserEvent.map; + map.getView().setHint(ol.ViewHint.INTERACTING, 1); + map.render(); + this.lastAngle_ = undefined; + return true + }else { + return false + } +}; +goog.provide("ol.interaction.DragZoom"); +goog.require("goog.asserts"); +goog.require("ol.events.condition"); +goog.require("ol.extent"); +goog.require("ol.interaction.DragBox"); +goog.require("ol.interaction.Interaction"); +goog.require("ol.style.Stroke"); +goog.require("ol.style.Style"); +ol.interaction.DRAGZOOM_ANIMATION_DURATION = 200; +ol.interaction.DragZoom = function(opt_options) { + var options = goog.isDef(opt_options) ? opt_options : {}; + var condition = goog.isDef(options.condition) ? options.condition : ol.events.condition.shiftKeyOnly; + var style = goog.isDef(options.style) ? options.style : new ol.style.Style({stroke:new ol.style.Stroke({color:[0, 0, 255, 1]})}); + goog.base(this, {condition:condition, style:style}) +}; +goog.inherits(ol.interaction.DragZoom, ol.interaction.DragBox); +ol.interaction.DragZoom.prototype.onBoxEnd = function() { + var map = this.getMap(); + var view = map.getView().getView2D(); + var extent = this.getGeometry().getExtent(); + var center = ol.extent.getCenter(extent); + ol.interaction.Interaction.zoom(map, view, view.getResolutionForExtent(extent, map.getSize()), center, ol.interaction.DRAGZOOM_ANIMATION_DURATION) +}; +goog.provide("ol.interaction.KeyboardPan"); +goog.require("goog.asserts"); +goog.require("goog.events.KeyCodes"); +goog.require("goog.events.KeyHandler.EventType"); +goog.require("goog.functions"); +goog.require("ol.View2D"); +goog.require("ol.coordinate"); +goog.require("ol.events.ConditionType"); +goog.require("ol.events.condition"); +goog.require("ol.interaction.Interaction"); +ol.interaction.KEYBOARD_PAN_DURATION = 100; +ol.interaction.KeyboardPan = function(opt_options) { + goog.base(this); + var options = goog.isDef(opt_options) ? opt_options : {}; + this.condition_ = goog.isDef(options.condition) ? options.condition : goog.functions.and(ol.events.condition.noModifierKeys, ol.events.condition.targetNotEditable); + this.pixelDelta_ = goog.isDef(options.pixelDelta) ? options.pixelDelta : 128 +}; +goog.inherits(ol.interaction.KeyboardPan, ol.interaction.Interaction); +ol.interaction.KeyboardPan.prototype.handleMapBrowserEvent = function(mapBrowserEvent) { + var stopEvent = false; + if(mapBrowserEvent.type == goog.events.KeyHandler.EventType.KEY) { + var keyEvent = (mapBrowserEvent.browserEvent); + var keyCode = keyEvent.keyCode; + if(this.condition_(mapBrowserEvent) && (keyCode == goog.events.KeyCodes.DOWN || keyCode == goog.events.KeyCodes.LEFT || keyCode == goog.events.KeyCodes.RIGHT || keyCode == goog.events.KeyCodes.UP)) { + var map = mapBrowserEvent.map; + var view = map.getView(); + goog.asserts.assertInstanceof(view, ol.View2D); + var view2DState = view.getView2DState(); + var mapUnitsDelta = view2DState.resolution * this.pixelDelta_; + var deltaX = 0, deltaY = 0; + if(keyCode == goog.events.KeyCodes.DOWN) { + deltaY = -mapUnitsDelta + }else { + if(keyCode == goog.events.KeyCodes.LEFT) { + deltaX = -mapUnitsDelta + }else { + if(keyCode == goog.events.KeyCodes.RIGHT) { + deltaX = mapUnitsDelta + }else { + deltaY = mapUnitsDelta + } + } + } + var delta = [deltaX, deltaY]; + ol.coordinate.rotate(delta, view2DState.rotation); + ol.interaction.Interaction.pan(map, view, delta, ol.interaction.KEYBOARD_PAN_DURATION); + mapBrowserEvent.preventDefault(); + stopEvent = true + } + } + return!stopEvent +}; +goog.provide("ol.interaction.KeyboardZoom"); +goog.require("goog.asserts"); +goog.require("goog.events.KeyHandler.EventType"); +goog.require("ol.events.ConditionType"); +goog.require("ol.events.condition"); +goog.require("ol.interaction.Interaction"); +ol.interaction.KeyboardZoom = function(opt_options) { + goog.base(this); + var options = goog.isDef(opt_options) ? opt_options : {}; + this.condition_ = goog.isDef(options.condition) ? options.condition : ol.events.condition.targetNotEditable; + this.delta_ = goog.isDef(options.delta) ? options.delta : 1; + this.duration_ = goog.isDef(options.duration) ? options.duration : 100 +}; +goog.inherits(ol.interaction.KeyboardZoom, ol.interaction.Interaction); +ol.interaction.KeyboardZoom.prototype.handleMapBrowserEvent = function(mapBrowserEvent) { + var stopEvent = false; + if(mapBrowserEvent.type == goog.events.KeyHandler.EventType.KEY) { + var keyEvent = (mapBrowserEvent.browserEvent); + var charCode = keyEvent.charCode; + if(this.condition_(mapBrowserEvent) && (charCode == "+".charCodeAt(0) || charCode == "-".charCodeAt(0))) { + var map = mapBrowserEvent.map; + var delta = charCode == "+".charCodeAt(0) ? this.delta_ : -this.delta_; + map.render(); + var view = map.getView().getView2D(); + ol.interaction.Interaction.zoomByDelta(map, view, delta, undefined, this.duration_); + mapBrowserEvent.preventDefault(); + stopEvent = true + } + } + return!stopEvent +}; +goog.provide("ol.interaction.MouseWheelZoom"); +goog.require("goog.asserts"); +goog.require("goog.events.MouseWheelEvent"); +goog.require("goog.events.MouseWheelHandler.EventType"); +goog.require("goog.math"); +goog.require("ol.Coordinate"); +goog.require("ol.interaction.Interaction"); +ol.interaction.MOUSEWHEELZOOM_MAXDELTA = 1; +ol.interaction.MOUSEWHEELZOOM_TIMEOUT_DURATION = 80; +ol.interaction.MouseWheelZoom = function(opt_options) { + var options = goog.isDef(opt_options) ? opt_options : {}; + goog.base(this); + this.delta_ = 0; + this.duration_ = goog.isDef(options.duration) ? options.duration : 250; + this.lastAnchor_ = null; + this.startTime_ = undefined; + this.timeoutId_ = undefined +}; +goog.inherits(ol.interaction.MouseWheelZoom, ol.interaction.Interaction); +ol.interaction.MouseWheelZoom.prototype.handleMapBrowserEvent = function(mapBrowserEvent) { + var stopEvent = false; + if(mapBrowserEvent.type == goog.events.MouseWheelHandler.EventType.MOUSEWHEEL) { + var map = mapBrowserEvent.map; + var mouseWheelEvent = mapBrowserEvent.browserEvent; + goog.asserts.assertInstanceof(mouseWheelEvent, goog.events.MouseWheelEvent); + this.lastAnchor_ = mapBrowserEvent.coordinate; + this.delta_ += mouseWheelEvent.deltaY / 3; + if(!goog.isDef(this.startTime_)) { + this.startTime_ = goog.now() + } + var duration = ol.interaction.MOUSEWHEELZOOM_TIMEOUT_DURATION; + var timeLeft = Math.max(duration - (goog.now() - this.startTime_), 0); + goog.global.clearTimeout(this.timeoutId_); + this.timeoutId_ = goog.global.setTimeout(goog.bind(this.doZoom_, this, map), timeLeft); + mapBrowserEvent.preventDefault(); + stopEvent = true + } + return!stopEvent +}; +ol.interaction.MouseWheelZoom.prototype.doZoom_ = function(map) { + var maxDelta = ol.interaction.MOUSEWHEELZOOM_MAXDELTA; + var delta = goog.math.clamp(this.delta_, -maxDelta, maxDelta); + var view = map.getView().getView2D(); + map.render(); + ol.interaction.Interaction.zoomByDelta(map, view, -delta, this.lastAnchor_, this.duration_); + this.delta_ = 0; + this.lastAnchor_ = null; + this.startTime_ = undefined; + this.timeoutId_ = undefined +}; +goog.provide("ol.interaction.Touch"); +goog.require("goog.asserts"); +goog.require("goog.functions"); +goog.require("goog.object"); +goog.require("ol.MapBrowserEvent"); +goog.require("ol.MapBrowserEvent.EventType"); +goog.require("ol.Pixel"); +goog.require("ol.ViewHint"); +goog.require("ol.interaction.Interaction"); +ol.interaction.Touch = function() { + goog.base(this); + this.handled_ = false; + this.trackedTouches_ = {}; + this.targetTouches = [] +}; +goog.inherits(ol.interaction.Touch, ol.interaction.Interaction); +ol.interaction.Touch.centroid = function(touches) { + var length = touches.length; + var clientX = 0; + var clientY = 0; + for(var i = 0;i < length;i++) { + clientX += touches[i].clientX; + clientY += touches[i].clientY + } + return[clientX / length, clientY / length] +}; +ol.interaction.Touch.isTouchEvent_ = function(mapBrowserEvent) { + var type = mapBrowserEvent.type; + return type === ol.MapBrowserEvent.EventType.TOUCHSTART || type === ol.MapBrowserEvent.EventType.TOUCHMOVE || type === ol.MapBrowserEvent.EventType.TOUCHEND +}; +ol.interaction.Touch.prototype.updateTrackedTouches_ = function(mapBrowserEvent) { + if(ol.interaction.Touch.isTouchEvent_(mapBrowserEvent)) { + var event = mapBrowserEvent.originalEvent; + if(goog.isDef(event.targetTouches)) { + this.targetTouches = event.targetTouches + }else { + if(goog.isDef(event.pointerId)) { + if(mapBrowserEvent.type == ol.MapBrowserEvent.EventType.TOUCHEND) { + delete this.trackedTouches_[event.pointerId] + }else { + this.trackedTouches_[event.pointerId] = event + } + this.targetTouches = goog.object.getValues(this.trackedTouches_) + }else { + goog.asserts.fail("unknown touch event model") + } + } + } +}; +ol.interaction.Touch.prototype.handleTouchMove = goog.nullFunction; +ol.interaction.Touch.prototype.handleTouchEnd = goog.functions.FALSE; +ol.interaction.Touch.prototype.handleTouchStart = goog.functions.FALSE; +ol.interaction.Touch.prototype.handleMapBrowserEvent = function(mapBrowserEvent) { + var view = mapBrowserEvent.map.getView(); + this.updateTrackedTouches_(mapBrowserEvent); + if(this.handled_) { + if(mapBrowserEvent.type == ol.MapBrowserEvent.EventType.TOUCHMOVE) { + this.handleTouchMove(mapBrowserEvent) + }else { + if(mapBrowserEvent.type == ol.MapBrowserEvent.EventType.TOUCHEND) { + this.handled_ = this.handleTouchEnd(mapBrowserEvent); + if(!this.handled_) { + view.setHint(ol.ViewHint.INTERACTING, -1) + } + } + } + } + if(mapBrowserEvent.type == ol.MapBrowserEvent.EventType.TOUCHSTART) { + var handled = this.handleTouchStart(mapBrowserEvent); + if(!this.handled_ && handled) { + view.setHint(ol.ViewHint.INTERACTING, 1) + } + this.handled_ = handled + } + return true +}; +goog.provide("ol.interaction.TouchPan"); +goog.require("goog.asserts"); +goog.require("ol.Kinetic"); +goog.require("ol.Pixel"); +goog.require("ol.PreRenderFunction"); +goog.require("ol.View2D"); +goog.require("ol.coordinate"); +goog.require("ol.interaction.Touch"); +ol.interaction.TouchPan = function(opt_options) { + goog.base(this); + var options = goog.isDef(opt_options) ? opt_options : {}; + this.kinetic_ = options.kinetic; + this.kineticPreRenderFn_ = null; + this.lastCentroid = null; + this.noKinetic_ = false +}; +goog.inherits(ol.interaction.TouchPan, ol.interaction.Touch); +ol.interaction.TouchPan.prototype.handleTouchMove = function(mapBrowserEvent) { + goog.asserts.assert(this.targetTouches.length >= 1); + var centroid = ol.interaction.Touch.centroid(this.targetTouches); + if(!goog.isNull(this.lastCentroid)) { + if(this.kinetic_) { + this.kinetic_.update(centroid[0], centroid[1]) + } + var deltaX = this.lastCentroid[0] - centroid[0]; + var deltaY = centroid[1] - this.lastCentroid[1]; + var map = mapBrowserEvent.map; + var view2D = map.getView().getView2D(); + goog.asserts.assertInstanceof(view2D, ol.View2D); + var view2DState = view2D.getView2DState(); + var center = [deltaX, deltaY]; + ol.coordinate.scale(center, view2DState.resolution); + ol.coordinate.rotate(center, view2DState.rotation); + ol.coordinate.add(center, view2DState.center); + center = view2D.constrainCenter(center); + map.render(); + view2D.setCenter(center) + } + this.lastCentroid = centroid +}; +ol.interaction.TouchPan.prototype.handleTouchEnd = function(mapBrowserEvent) { + var map = mapBrowserEvent.map; + var view2D = map.getView().getView2D(); + goog.asserts.assertInstanceof(view2D, ol.View2D); + if(this.targetTouches.length === 0) { + if(!this.noKinetic_ && this.kinetic_ && this.kinetic_.end()) { + var distance = this.kinetic_.getDistance(); + var angle = this.kinetic_.getAngle(); + var center = view2D.getCenter(); + goog.asserts.assert(goog.isDef(center)); + this.kineticPreRenderFn_ = this.kinetic_.pan(center); + map.beforeRender(this.kineticPreRenderFn_); + var centerpx = map.getPixelFromCoordinate(center); + var dest = map.getCoordinateFromPixel([centerpx[0] - distance * Math.cos(angle), centerpx[1] - distance * Math.sin(angle)]); + dest = view2D.constrainCenter(dest); + view2D.setCenter(dest) + } + map.render(); + return false + }else { + this.lastCentroid = null; + return true + } +}; +ol.interaction.TouchPan.prototype.handleTouchStart = function(mapBrowserEvent) { + if(this.targetTouches.length > 0) { + var map = mapBrowserEvent.map; + var view2D = map.getView().getView2D(); + goog.asserts.assertInstanceof(view2D, ol.View2D); + this.lastCentroid = null; + map.render(); + if(!goog.isNull(this.kineticPreRenderFn_) && map.removePreRenderFunction(this.kineticPreRenderFn_)) { + view2D.setCenter(mapBrowserEvent.frameState.view2DState.center); + this.kineticPreRenderFn_ = null + } + if(this.kinetic_) { + this.kinetic_.begin() + } + this.noKinetic_ = this.targetTouches.length > 1; + return true + }else { + return false + } +}; +goog.provide("ol.interaction.TouchRotate"); +goog.require("goog.asserts"); +goog.require("goog.style"); +goog.require("ol.Coordinate"); +goog.require("ol.interaction.Interaction"); +goog.require("ol.interaction.Touch"); +ol.interaction.TOUCHROTATE_ANIMATION_DURATION = 250; +ol.interaction.TouchRotate = function(opt_options) { + goog.base(this); + var options = goog.isDef(opt_options) ? opt_options : {}; + this.anchor_ = null; + this.lastAngle_ = undefined; + this.rotating_ = false; + this.rotationDelta_ = 0; + this.threshold_ = goog.isDef(options.threshold) ? options.threshold : 0.3 +}; +goog.inherits(ol.interaction.TouchRotate, ol.interaction.Touch); +ol.interaction.TouchRotate.prototype.handleTouchMove = function(mapBrowserEvent) { + goog.asserts.assert(this.targetTouches.length >= 2); + var rotationDelta = 0; + var touch0 = this.targetTouches[0]; + var touch1 = this.targetTouches[1]; + var angle = Math.atan2(touch1.clientY - touch0.clientY, touch1.clientX - touch0.clientX); + if(goog.isDef(this.lastAngle_)) { + var delta = angle - this.lastAngle_; + this.rotationDelta_ += delta; + if(!this.rotating_ && Math.abs(this.rotationDelta_) > this.threshold_) { + this.rotating_ = true + } + rotationDelta = delta + } + this.lastAngle_ = angle; + var map = mapBrowserEvent.map; + var viewportPosition = goog.style.getClientPosition(map.getViewport()); + var centroid = ol.interaction.Touch.centroid(this.targetTouches); + centroid[0] -= viewportPosition.x; + centroid[1] -= viewportPosition.y; + this.anchor_ = map.getCoordinateFromPixel(centroid); + if(this.rotating_) { + var view = map.getView().getView2D(); + var view2DState = view.getView2DState(); + map.render(); + ol.interaction.Interaction.rotateWithoutConstraints(map, view, view2DState.rotation + rotationDelta, this.anchor_) + } +}; +ol.interaction.TouchRotate.prototype.handleTouchEnd = function(mapBrowserEvent) { + if(this.targetTouches.length < 2) { + var map = mapBrowserEvent.map; + var view = map.getView().getView2D(); + var view2DState = view.getView2DState(); + if(this.rotating_) { + ol.interaction.Interaction.rotate(map, view, view2DState.rotation, this.anchor_, ol.interaction.TOUCHROTATE_ANIMATION_DURATION) + } + return false + }else { + return true + } +}; +ol.interaction.TouchRotate.prototype.handleTouchStart = function(mapBrowserEvent) { + if(this.targetTouches.length >= 2) { + var map = mapBrowserEvent.map; + this.anchor_ = null; + this.lastAngle_ = undefined; + this.rotating_ = false; + this.rotationDelta_ = 0; + map.render(); + return true + }else { + return false + } +}; +goog.provide("ol.interaction.TouchZoom"); +goog.require("goog.asserts"); +goog.require("goog.style"); +goog.require("ol.Coordinate"); +goog.require("ol.interaction.Interaction"); +goog.require("ol.interaction.Touch"); +ol.interaction.TouchZoom = function(opt_options) { + var options = goog.isDef(opt_options) ? opt_options : {}; + goog.base(this); + this.anchor_ = null; + this.duration_ = goog.isDef(options.duration) ? options.duration : 400; + this.lastDistance_ = undefined; + this.lastScaleDelta_ = 1 +}; +goog.inherits(ol.interaction.TouchZoom, ol.interaction.Touch); +ol.interaction.TouchZoom.prototype.handleTouchMove = function(mapBrowserEvent) { + goog.asserts.assert(this.targetTouches.length >= 2); + var scaleDelta = 1; + var touch0 = this.targetTouches[0]; + var touch1 = this.targetTouches[1]; + var dx = touch0.clientX - touch1.clientX; + var dy = touch0.clientY - touch1.clientY; + var distance = Math.sqrt(dx * dx + dy * dy); + if(goog.isDef(this.lastDistance_)) { + scaleDelta = this.lastDistance_ / distance + } + this.lastDistance_ = distance; + if(scaleDelta != 1) { + this.lastScaleDelta_ = scaleDelta + } + var map = mapBrowserEvent.map; + var view = map.getView().getView2D(); + var view2DState = view.getView2DState(); + var viewportPosition = goog.style.getClientPosition(map.getViewport()); + var centroid = ol.interaction.Touch.centroid(this.targetTouches); + centroid[0] -= viewportPosition.x; + centroid[1] -= viewportPosition.y; + this.anchor_ = map.getCoordinateFromPixel(centroid); + map.render(); + ol.interaction.Interaction.zoomWithoutConstraints(map, view, view2DState.resolution * scaleDelta, this.anchor_) +}; +ol.interaction.TouchZoom.prototype.handleTouchEnd = function(mapBrowserEvent) { + if(this.targetTouches.length < 2) { + var map = mapBrowserEvent.map; + var view = map.getView().getView2D(); + var view2DState = view.getView2DState(); + var direction = this.lastScaleDelta_ - 1; + ol.interaction.Interaction.zoom(map, view, view2DState.resolution, this.anchor_, this.duration_, direction); + return false + }else { + return true + } +}; +ol.interaction.TouchZoom.prototype.handleTouchStart = function(mapBrowserEvent) { + if(this.targetTouches.length >= 2) { + var map = mapBrowserEvent.map; + this.anchor_ = null; + this.lastDistance_ = undefined; + this.lastScaleDelta_ = 1; + map.render(); + return true + }else { + return false + } +}; +goog.provide("ol.interaction"); +goog.require("ol.Collection"); +goog.require("ol.Kinetic"); +goog.require("ol.interaction.DoubleClickZoom"); +goog.require("ol.interaction.DragPan"); +goog.require("ol.interaction.DragRotate"); +goog.require("ol.interaction.DragZoom"); +goog.require("ol.interaction.KeyboardPan"); +goog.require("ol.interaction.KeyboardZoom"); +goog.require("ol.interaction.MouseWheelZoom"); +goog.require("ol.interaction.TouchPan"); +goog.require("ol.interaction.TouchRotate"); +goog.require("ol.interaction.TouchZoom"); +ol.interaction.defaults = function(opt_options) { + var options = goog.isDef(opt_options) ? opt_options : {}; + var interactions = new ol.Collection; + var kinetic = new ol.Kinetic(-0.005, 0.05, 100); + var altShiftDragRotate = goog.isDef(options.altShiftDragRotate) ? options.altShiftDragRotate : true; + if(altShiftDragRotate) { + interactions.push(new ol.interaction.DragRotate) + } + var doubleClickZoom = goog.isDef(options.doubleClickZoom) ? options.doubleClickZoom : true; + if(doubleClickZoom) { + interactions.push(new ol.interaction.DoubleClickZoom({delta:options.zoomDelta, duration:options.zoomDuration})) + } + var touchPan = goog.isDef(options.touchPan) ? options.touchPan : true; + if(touchPan) { + interactions.push(new ol.interaction.TouchPan({kinetic:kinetic})) + } + var touchRotate = goog.isDef(options.touchRotate) ? options.touchRotate : true; + if(touchRotate) { + interactions.push(new ol.interaction.TouchRotate) + } + var touchZoom = goog.isDef(options.touchZoom) ? options.touchZoom : true; + if(touchZoom) { + interactions.push(new ol.interaction.TouchZoom({duration:options.zoomDuration})) + } + var dragPan = goog.isDef(options.dragPan) ? options.dragPan : true; + if(dragPan) { + interactions.push(new ol.interaction.DragPan({kinetic:kinetic})) + } + var keyboard = goog.isDef(options.keyboard) ? options.keyboard : true; + if(keyboard) { + interactions.push(new ol.interaction.KeyboardPan); + interactions.push(new ol.interaction.KeyboardZoom({delta:options.zoomDelta, duration:options.zoomDuration})) + } + var mouseWheelZoom = goog.isDef(options.mouseWheelZoom) ? options.mouseWheelZoom : true; + if(mouseWheelZoom) { + interactions.push(new ol.interaction.MouseWheelZoom({duration:options.zoomDuration})) + } + var shiftDragZoom = goog.isDef(options.shiftDragZoom) ? options.shiftDragZoom : true; + if(shiftDragZoom) { + interactions.push(new ol.interaction.DragZoom) + } + return interactions +}; +goog.provide("ol.layer.Group"); +goog.require("goog.array"); +goog.require("goog.asserts"); +goog.require("goog.events"); +goog.require("goog.events.EventType"); +goog.require("goog.math"); +goog.require("goog.object"); +goog.require("ol.Collection"); +goog.require("ol.CollectionEvent"); +goog.require("ol.CollectionEventType"); +goog.require("ol.Object"); +goog.require("ol.ObjectEventType"); +goog.require("ol.layer.Base"); +goog.require("ol.source.State"); +ol.layer.GroupProperty = {LAYERS:"layers"}; +ol.layer.Group = function(opt_options) { + var options = goog.isDef(opt_options) ? opt_options : {}; + var baseOptions = (goog.object.clone(options)); + delete baseOptions.layers; + var layers = options.layers; + goog.base(this, baseOptions); + this.listenerKeys_ = null; + goog.events.listen(this, ol.Object.getChangeEventType(ol.layer.GroupProperty.LAYERS), this.handleLayersChanged_, false, this); + if(goog.isDef(layers)) { + if(goog.isArray(layers)) { + layers = new ol.Collection(goog.array.clone(layers)) + }else { + goog.asserts.assertInstanceof(layers, ol.Collection); + layers = layers + } + }else { + layers = new ol.Collection + } + this.setLayers(layers) +}; +goog.inherits(ol.layer.Group, ol.layer.Base); +ol.layer.Group.prototype.handleLayerChange_ = function() { + if(this.getVisible()) { + this.dispatchChangeEvent() + } +}; +ol.layer.Group.prototype.handleLayersChanged_ = function(event) { + if(!goog.isNull(this.listenerKeys_)) { + goog.array.forEach(goog.object.getValues(this.listenerKeys_), goog.events.unlistenByKey); + this.listenerKeys_ = null + } + var layers = this.getLayers(); + if(goog.isDefAndNotNull(layers)) { + this.listenerKeys_ = {"add":goog.events.listen(layers, ol.CollectionEventType.ADD, this.handleLayersAdd_, false, this), "remove":goog.events.listen(layers, ol.CollectionEventType.REMOVE, this.handleLayersRemove_, false, this)}; + var layersArray = layers.getArray(); + var i, ii, layer; + for(i = 0, ii = layersArray.length;i < ii;i++) { + layer = layersArray[i]; + this.listenerKeys_[goog.getUid(layer).toString()] = goog.events.listen(layer, [ol.ObjectEventType.PROPERTYCHANGE, goog.events.EventType.CHANGE], this.handleLayerChange_, false, this) + } + } + this.dispatchChangeEvent() +}; +ol.layer.Group.prototype.handleLayersAdd_ = function(collectionEvent) { + var layer = (collectionEvent.element); + this.listenerKeys_[goog.getUid(layer).toString()] = goog.events.listen(layer, [ol.ObjectEventType.PROPERTYCHANGE, goog.events.EventType.CHANGE], this.handleLayerChange_, false, this); + this.dispatchChangeEvent() +}; +ol.layer.Group.prototype.handleLayersRemove_ = function(collectionEvent) { + var layer = (collectionEvent.element); + var key = goog.getUid(layer).toString(); + goog.events.unlistenByKey(this.listenerKeys_[key]); + delete this.listenerKeys_[key]; + this.dispatchChangeEvent() +}; +ol.layer.Group.prototype.getLayers = function() { + return(this.get(ol.layer.GroupProperty.LAYERS)) +}; +goog.exportProperty(ol.layer.Group.prototype, "getLayers", ol.layer.Group.prototype.getLayers); +ol.layer.Group.prototype.setLayers = function(layers) { + this.set(ol.layer.GroupProperty.LAYERS, layers) +}; +goog.exportProperty(ol.layer.Group.prototype, "setLayers", ol.layer.Group.prototype.setLayers); +ol.layer.Group.prototype.getLayersArray = function(opt_array) { + var array = goog.isDef(opt_array) ? opt_array : []; + this.getLayers().forEach(function(layer) { + layer.getLayersArray(array) + }); + return array +}; +ol.layer.Group.prototype.getLayerStatesArray = function(opt_obj) { + var obj = goog.isDef(opt_obj) ? opt_obj : {layers:[], layerStates:[]}; + goog.asserts.assert(obj.layers.length === obj.layerStates.length); + var pos = obj.layers.length; + this.getLayers().forEach(function(layer) { + layer.getLayerStatesArray(obj) + }); + var ownLayerState = this.getLayerState(); + var i, ii, layerState; + for(i = pos, ii = obj.layerStates.length;i < ii;i++) { + layerState = obj.layerStates[i]; + layerState.brightness = goog.math.clamp(layerState.brightness + ownLayerState.brightness, -1, 1); + layerState.contrast *= ownLayerState.contrast; + layerState.hue += ownLayerState.hue; + layerState.opacity *= ownLayerState.opacity; + layerState.saturation *= ownLayerState.saturation; + layerState.visible = layerState.visible && ownLayerState.visible; + layerState.maxResolution = Math.min(layerState.maxResolution, ownLayerState.maxResolution); + layerState.minResolution = Math.max(layerState.minResolution, ownLayerState.minResolution) + } + return obj +}; +ol.layer.Group.prototype.getSourceState = function() { + return ol.source.State.READY +}; +goog.provide("ol.math"); +goog.require("goog.asserts"); +ol.math.cosh = function(x) { + return(Math.exp(x) + Math.exp(-x)) / 2 +}; +ol.math.coth = function(x) { + var expMinusTwoX = Math.exp(-2 * x); + return(1 + expMinusTwoX) / (1 - expMinusTwoX) +}; +ol.math.csch = function(x) { + return 2 / (Math.exp(x) - Math.exp(-x)) +}; +ol.math.roundUpToPowerOfTwo = function(x) { + goog.asserts.assert(0 < x); + return Math.pow(2, Math.ceil(Math.log(x) / Math.LN2)) +}; +ol.math.sech = function(x) { + return 2 / (Math.exp(x) + Math.exp(-x)) +}; +ol.math.sinh = function(x) { + return(Math.exp(x) - Math.exp(-x)) / 2 +}; +ol.math.tanh = function(x) { + var expMinusTwoX = Math.exp(-2 * x); + return(1 - expMinusTwoX) / (1 + expMinusTwoX) +}; +goog.provide("ol.proj.EPSG3857"); +goog.require("goog.array"); +goog.require("goog.asserts"); +goog.require("ol.math"); +goog.require("ol.proj"); +goog.require("ol.proj.Projection"); +goog.require("ol.proj.Units"); +ol.proj.EPSG3857 = function(code) { + goog.base(this, {code:code, units:ol.proj.Units.METERS, extent:ol.proj.EPSG3857.EXTENT, global:true}) +}; +goog.inherits(ol.proj.EPSG3857, ol.proj.Projection); +ol.proj.EPSG3857.RADIUS = 6378137; +ol.proj.EPSG3857.HALF_SIZE = Math.PI * ol.proj.EPSG3857.RADIUS; +ol.proj.EPSG3857.EXTENT = [-ol.proj.EPSG3857.HALF_SIZE, -ol.proj.EPSG3857.HALF_SIZE, ol.proj.EPSG3857.HALF_SIZE, ol.proj.EPSG3857.HALF_SIZE]; +ol.proj.EPSG3857.CODES = ["EPSG:3857", "EPSG:102100", "EPSG:102113", "EPSG:900913", "urn:ogc:def:crs:EPSG:6.18:3:3857"]; +ol.proj.EPSG3857.PROJECTIONS = goog.array.map(ol.proj.EPSG3857.CODES, function(code) { + return new ol.proj.EPSG3857(code) +}); +ol.proj.EPSG3857.fromEPSG4326 = function(input, opt_output, opt_dimension) { + var length = input.length, dimension = opt_dimension > 1 ? opt_dimension : 2, output = opt_output; + if(!goog.isDef(output)) { + if(dimension > 2) { + output = input.slice() + }else { + output = new Array(length) + } + } + goog.asserts.assert(output.length % dimension === 0); + for(var i = 0;i < length;i += dimension) { + output[i] = ol.proj.EPSG3857.RADIUS * Math.PI * input[i] / 180; + output[i + 1] = ol.proj.EPSG3857.RADIUS * Math.log(Math.tan(Math.PI * (input[i + 1] + 90) / 360)) + } + return output +}; +ol.proj.EPSG3857.toEPSG4326 = function(input, opt_output, opt_dimension) { + var length = input.length, dimension = opt_dimension > 1 ? opt_dimension : 2, output = opt_output; + if(!goog.isDef(output)) { + if(dimension > 2) { + output = input.slice() + }else { + output = new Array(length) + } + } + goog.asserts.assert(output.length % dimension === 0); + for(var i = 0;i < length;i += dimension) { + output[i] = 180 * input[i] / (ol.proj.EPSG3857.RADIUS * Math.PI); + output[i + 1] = 360 * Math.atan(Math.exp(input[i + 1] / ol.proj.EPSG3857.RADIUS)) / Math.PI - 90 + } + return output +}; +ol.proj.EPSG3857.prototype.getPointResolution = function(resolution, point) { + return resolution / ol.math.cosh(point[1] / ol.proj.EPSG3857.RADIUS) +}; +goog.provide("ol.proj.EPSG4326"); +goog.require("ol.proj"); +goog.require("ol.proj.Projection"); +goog.require("ol.proj.Units"); +ol.proj.EPSG4326 = function(code, opt_axisOrientation) { + goog.base(this, {code:code, units:ol.proj.Units.DEGREES, extent:ol.proj.EPSG4326.EXTENT, axisOrientation:opt_axisOrientation, global:true}) +}; +goog.inherits(ol.proj.EPSG4326, ol.proj.Projection); +ol.proj.EPSG4326.EXTENT = [-180, -90, 180, 90]; +ol.proj.EPSG4326.PROJECTIONS = [new ol.proj.EPSG4326("CRS:84"), new ol.proj.EPSG4326("EPSG:4326", "neu"), new ol.proj.EPSG4326("urn:ogc:def:crs:EPSG:6.6:4326", "neu"), new ol.proj.EPSG4326("urn:ogc:def:crs:OGC:1.3:CRS84"), new ol.proj.EPSG4326("urn:ogc:def:crs:OGC:2:84"), new ol.proj.EPSG4326("http://www.opengis.net/gml/srs/epsg.xml#4326", "neu"), new ol.proj.EPSG4326("urn:x-ogc:def:crs:EPSG:4326", "neu")]; +ol.proj.EPSG4326.prototype.getPointResolution = function(resolution, point) { + return resolution +}; +goog.provide("ol.proj.common"); +goog.require("ol.proj"); +goog.require("ol.proj.EPSG3857"); +goog.require("ol.proj.EPSG4326"); +ol.proj.common.add = function() { + ol.proj.addEquivalentProjections(ol.proj.EPSG3857.PROJECTIONS); + ol.proj.addEquivalentProjections(ol.proj.EPSG4326.PROJECTIONS); + ol.proj.addEquivalentTransforms(ol.proj.EPSG4326.PROJECTIONS, ol.proj.EPSG3857.PROJECTIONS, ol.proj.EPSG3857.fromEPSG4326, ol.proj.EPSG3857.toEPSG4326) +}; +goog.provide("ol.ImageBase"); +goog.provide("ol.ImageState"); +goog.require("goog.events.EventTarget"); +goog.require("goog.events.EventType"); +goog.require("ol.Attribution"); +goog.require("ol.Extent"); +ol.ImageState = {IDLE:0, LOADING:1, LOADED:2, ERROR:3}; +ol.ImageBase = function(extent, resolution, pixelRatio, state, attributions) { + goog.base(this); + this.attributions_ = attributions; + this.extent_ = extent; + this.pixelRatio_ = pixelRatio; + this.resolution_ = resolution; + this.state = state +}; +goog.inherits(ol.ImageBase, goog.events.EventTarget); +ol.ImageBase.prototype.dispatchChangeEvent = function() { + this.dispatchEvent(goog.events.EventType.CHANGE) +}; +ol.ImageBase.prototype.getAttributions = function() { + return this.attributions_ +}; +ol.ImageBase.prototype.getExtent = function() { + return this.extent_ +}; +ol.ImageBase.prototype.getImageElement = goog.abstractMethod; +ol.ImageBase.prototype.getPixelRatio = function() { + return this.pixelRatio_ +}; +ol.ImageBase.prototype.getResolution = function() { + return this.resolution_ +}; +ol.ImageBase.prototype.getState = function() { + return this.state +}; +ol.ImageBase.prototype.load = goog.abstractMethod; +goog.provide("ol.Image"); +goog.require("goog.array"); +goog.require("goog.asserts"); +goog.require("goog.events"); +goog.require("goog.events.EventType"); +goog.require("goog.object"); +goog.require("ol.ImageBase"); +goog.require("ol.ImageState"); +ol.Image = function(extent, resolution, pixelRatio, attributions, src, crossOrigin) { + goog.base(this, extent, resolution, pixelRatio, ol.ImageState.IDLE, attributions); + this.src_ = src; + this.image_ = new Image; + if(!goog.isNull(crossOrigin)) { + this.image_.crossOrigin = crossOrigin + } + this.imageByContext_ = {}; + this.imageListenerKeys_ = null; + this.state = ol.ImageState.IDLE +}; +goog.inherits(ol.Image, ol.ImageBase); +ol.Image.prototype.getImageElement = function(opt_context) { + if(goog.isDef(opt_context)) { + var image; + var key = goog.getUid(opt_context); + if(key in this.imageByContext_) { + return this.imageByContext_[key] + }else { + if(goog.object.isEmpty(this.imageByContext_)) { + image = this.image_ + }else { + image = (this.image_.cloneNode(false)) + } + } + this.imageByContext_[key] = image; + return image + }else { + return this.image_ + } +}; +ol.Image.prototype.handleImageError_ = function() { + this.state = ol.ImageState.ERROR; + this.unlistenImage_(); + this.dispatchChangeEvent() +}; +ol.Image.prototype.handleImageLoad_ = function() { + this.state = ol.ImageState.LOADED; + this.unlistenImage_(); + this.dispatchChangeEvent() +}; +ol.Image.prototype.load = function() { + if(this.state == ol.ImageState.IDLE) { + this.state = ol.ImageState.LOADING; + goog.asserts.assert(goog.isNull(this.imageListenerKeys_)); + this.imageListenerKeys_ = [goog.events.listenOnce(this.image_, goog.events.EventType.ERROR, this.handleImageError_, false, this), goog.events.listenOnce(this.image_, goog.events.EventType.LOAD, this.handleImageLoad_, false, this)]; + this.image_.src = this.src_ + } +}; +ol.Image.prototype.unlistenImage_ = function() { + goog.asserts.assert(!goog.isNull(this.imageListenerKeys_)); + goog.array.forEach(this.imageListenerKeys_, goog.events.unlistenByKey); + this.imageListenerKeys_ = null +}; +goog.provide("ol.tilegrid.TileGrid"); +goog.require("goog.array"); +goog.require("goog.asserts"); +goog.require("ol.Coordinate"); +goog.require("ol.TileCoord"); +goog.require("ol.TileRange"); +goog.require("ol.array"); +goog.require("ol.extent"); +goog.require("ol.proj.METERS_PER_UNIT"); +goog.require("ol.proj.Projection"); +goog.require("ol.proj.Units"); +ol.DEFAULT_TILE_SIZE = 256; +ol.DEFAULT_MAX_ZOOM = 42; +ol.tilegrid.TileGrid = function(options) { + this.minZoom = goog.isDef(options.minZoom) ? options.minZoom : 0; + this.resolutions_ = options.resolutions; + goog.asserts.assert(goog.array.isSorted(this.resolutions_, function(a, b) { + return b - a + }, true)); + this.maxZoom = this.resolutions_.length - 1; + this.origin_ = goog.isDef(options.origin) ? options.origin : null; + this.origins_ = null; + if(goog.isDef(options.origins)) { + this.origins_ = options.origins; + goog.asserts.assert(this.origins_.length == this.maxZoom + 1) + } + goog.asserts.assert(goog.isNull(this.origin_) && !goog.isNull(this.origins_) || !goog.isNull(this.origin_) && goog.isNull(this.origins_)); + this.tileSizes_ = null; + if(goog.isDef(options.tileSizes)) { + this.tileSizes_ = options.tileSizes; + goog.asserts.assert(this.tileSizes_.length == this.maxZoom + 1) + } + this.tileSize_ = goog.isDef(options.tileSize) ? options.tileSize : goog.isNull(this.tileSizes_) ? ol.DEFAULT_TILE_SIZE : undefined; + goog.asserts.assert(!goog.isDef(this.tileSize_) && !goog.isNull(this.tileSizes_) || goog.isDef(this.tileSize_) && goog.isNull(this.tileSizes_)) +}; +ol.tilegrid.TileGrid.tmpTileCoord_ = new ol.TileCoord(0, 0, 0); +ol.tilegrid.TileGrid.prototype.createTileCoordTransform = goog.abstractMethod; +ol.tilegrid.TileGrid.prototype.forEachTileCoordParentTileRange = function(tileCoord, callback, opt_this, opt_tileRange, opt_extent) { + var tileCoordExtent = this.getTileCoordExtent(tileCoord, opt_extent); + var z = tileCoord.z - 1; + while(z >= this.minZoom) { + if(callback.call(opt_this, z, this.getTileRangeForExtentAndZ(tileCoordExtent, z, opt_tileRange))) { + return true + } + --z + } + return false +}; +ol.tilegrid.TileGrid.prototype.getMaxZoom = function() { + return this.maxZoom +}; +ol.tilegrid.TileGrid.prototype.getMinZoom = function() { + return this.minZoom +}; +ol.tilegrid.TileGrid.prototype.getOrigin = function(z) { + if(!goog.isNull(this.origin_)) { + return this.origin_ + }else { + goog.asserts.assert(!goog.isNull(this.origins_)); + goog.asserts.assert(this.minZoom <= z && z <= this.maxZoom); + return this.origins_[z] + } +}; +ol.tilegrid.TileGrid.prototype.getResolution = function(z) { + goog.asserts.assert(this.minZoom <= z && z <= this.maxZoom); + return this.resolutions_[z] +}; +ol.tilegrid.TileGrid.prototype.getResolutions = function() { + return this.resolutions_ +}; +ol.tilegrid.TileGrid.prototype.getTileCoordChildTileRange = function(tileCoord, opt_tileRange, opt_extent) { + if(tileCoord.z < this.maxZoom) { + var tileCoordExtent = this.getTileCoordExtent(tileCoord, opt_extent); + return this.getTileRangeForExtentAndZ(tileCoordExtent, tileCoord.z + 1, opt_tileRange) + }else { + return null + } +}; +ol.tilegrid.TileGrid.prototype.getTileRangeExtent = function(z, tileRange, opt_extent) { + var origin = this.getOrigin(z); + var resolution = this.getResolution(z); + var tileSize = this.getTileSize(z); + var minX = origin[0] + tileRange.minX * tileSize * resolution; + var maxX = origin[0] + (tileRange.maxX + 1) * tileSize * resolution; + var minY = origin[1] + tileRange.minY * tileSize * resolution; + var maxY = origin[1] + (tileRange.maxY + 1) * tileSize * resolution; + return ol.extent.createOrUpdate(minX, minY, maxX, maxY, opt_extent) +}; +ol.tilegrid.TileGrid.prototype.getTileRangeForExtentAndResolution = function(extent, resolution, opt_tileRange) { + var tileCoord = ol.tilegrid.TileGrid.tmpTileCoord_; + this.getTileCoordForXYAndResolution_(extent[0], extent[1], resolution, false, tileCoord); + var minX = tileCoord.x; + var minY = tileCoord.y; + this.getTileCoordForXYAndResolution_(extent[2], extent[3], resolution, true, tileCoord); + return ol.TileRange.createOrUpdate(minX, tileCoord.x, minY, tileCoord.y, opt_tileRange) +}; +ol.tilegrid.TileGrid.prototype.getTileRangeForExtentAndZ = function(extent, z, opt_tileRange) { + var resolution = this.getResolution(z); + return this.getTileRangeForExtentAndResolution(extent, resolution, opt_tileRange) +}; +ol.tilegrid.TileGrid.prototype.getTileCoordCenter = function(tileCoord) { + var origin = this.getOrigin(tileCoord.z); + var resolution = this.getResolution(tileCoord.z); + var tileSize = this.getTileSize(tileCoord.z); + return[origin[0] + (tileCoord.x + 0.5) * tileSize * resolution, origin[1] + (tileCoord.y + 0.5) * tileSize * resolution] +}; +ol.tilegrid.TileGrid.prototype.getTileCoordExtent = function(tileCoord, opt_extent) { + var origin = this.getOrigin(tileCoord.z); + var resolution = this.getResolution(tileCoord.z); + var tileSize = this.getTileSize(tileCoord.z); + var minX = origin[0] + tileCoord.x * tileSize * resolution; + var minY = origin[1] + tileCoord.y * tileSize * resolution; + var maxX = minX + tileSize * resolution; + var maxY = minY + tileSize * resolution; + return ol.extent.createOrUpdate(minX, minY, maxX, maxY, opt_extent) +}; +ol.tilegrid.TileGrid.prototype.getTileCoordForCoordAndResolution = function(coordinate, resolution, opt_tileCoord) { + return this.getTileCoordForXYAndResolution_(coordinate[0], coordinate[1], resolution, false, opt_tileCoord) +}; +ol.tilegrid.TileGrid.prototype.getTileCoordForXYAndResolution_ = function(x, y, resolution, reverseIntersectionPolicy, opt_tileCoord) { + var z = this.getZForResolution(resolution); + var scale = resolution / this.getResolution(z); + var origin = this.getOrigin(z); + var tileSize = this.getTileSize(z); + var tileCoordX = scale * (x - origin[0]) / (resolution * tileSize); + var tileCoordY = scale * (y - origin[1]) / (resolution * tileSize); + if(reverseIntersectionPolicy) { + tileCoordX = Math.ceil(tileCoordX) - 1; + tileCoordY = Math.ceil(tileCoordY) - 1 + }else { + tileCoordX = Math.floor(tileCoordX); + tileCoordY = Math.floor(tileCoordY) + } + return ol.TileCoord.createOrUpdate(z, tileCoordX, tileCoordY, opt_tileCoord) +}; +ol.tilegrid.TileGrid.prototype.getTileCoordForCoordAndZ = function(coordinate, z, opt_tileCoord) { + var resolution = this.getResolution(z); + return this.getTileCoordForXYAndResolution_(coordinate[0], coordinate[1], resolution, false, opt_tileCoord) +}; +ol.tilegrid.TileGrid.prototype.getTileCoordResolution = function(tileCoord) { + goog.asserts.assert(this.minZoom <= tileCoord.z && tileCoord.z <= this.maxZoom); + return this.resolutions_[tileCoord.z] +}; +ol.tilegrid.TileGrid.prototype.getTileSize = function(z) { + if(goog.isDef(this.tileSize_)) { + return this.tileSize_ + }else { + goog.asserts.assert(!goog.isNull(this.tileSizes_)); + goog.asserts.assert(this.minZoom <= z && z <= this.maxZoom); + return this.tileSizes_[z] + } +}; +ol.tilegrid.TileGrid.prototype.getZForResolution = function(resolution) { + return ol.array.linearFindNearest(this.resolutions_, resolution, 0) +}; +ol.tilegrid.getForProjection = function(projection) { + var tileGrid = projection.getDefaultTileGrid(); + if(goog.isNull(tileGrid)) { + tileGrid = ol.tilegrid.createForProjection(projection); + projection.setDefaultTileGrid(tileGrid) + } + return tileGrid +}; +ol.tilegrid.createForProjection = function(projection, opt_maxZoom, opt_tileSize) { + var projectionExtent = projection.getExtent(); + var size = goog.isNull(projectionExtent) ? 360 * ol.proj.METERS_PER_UNIT[ol.proj.Units.DEGREES] / projection.getMetersPerUnit() : Math.max(projectionExtent[2] - projectionExtent[0], projectionExtent[3] - projectionExtent[1]); + var maxZoom = goog.isDef(opt_maxZoom) ? opt_maxZoom : ol.DEFAULT_MAX_ZOOM; + var tileSize = goog.isDef(opt_tileSize) ? opt_tileSize : ol.DEFAULT_TILE_SIZE; + var resolutions = new Array(maxZoom + 1); + var maxResolution = size / tileSize; + for(var z = 0, zz = resolutions.length;z < zz;++z) { + resolutions[z] = maxResolution / Math.pow(2, z) + } + return new ol.tilegrid.TileGrid({origin:goog.isNull(projectionExtent) ? [0, 0] : ol.extent.getBottomLeft(projectionExtent), resolutions:resolutions, tileSize:tileSize}) +}; +goog.provide("ol.source.Tile"); +goog.provide("ol.source.TileOptions"); +goog.require("goog.functions"); +goog.require("ol.Attribution"); +goog.require("ol.Extent"); +goog.require("ol.Tile"); +goog.require("ol.TileCoord"); +goog.require("ol.TileRange"); +goog.require("ol.source.Source"); +goog.require("ol.tilegrid.TileGrid"); +ol.source.TileOptions; +ol.source.Tile = function(options) { + goog.base(this, {attributions:options.attributions, extent:options.extent, logo:options.logo, projection:options.projection}); + this.opaque_ = goog.isDef(options.opaque) ? options.opaque : false; + this.tileGrid = goog.isDef(options.tileGrid) ? options.tileGrid : null +}; +goog.inherits(ol.source.Tile, ol.source.Source); +ol.source.Tile.prototype.canExpireCache = goog.functions.FALSE; +ol.source.Tile.prototype.expireCache = goog.abstractMethod; +ol.source.Tile.prototype.findLoadedTiles = function(loadedTilesByZ, getTileIfLoaded, z, tileRange) { + var fullyCovered = true; + var tile, tileCoordKey, x, y; + for(x = tileRange.minX;x <= tileRange.maxX;++x) { + for(y = tileRange.minY;y <= tileRange.maxY;++y) { + tileCoordKey = this.getKeyZXY(z, x, y); + if(loadedTilesByZ[z] && loadedTilesByZ[z][tileCoordKey]) { + continue + } + tile = getTileIfLoaded(z, x, y); + if(!goog.isNull(tile)) { + if(!loadedTilesByZ[z]) { + loadedTilesByZ[z] = {} + } + loadedTilesByZ[z][tileCoordKey] = tile + }else { + fullyCovered = false + } + } + } + return fullyCovered +}; +ol.source.Tile.prototype.getGutter = function() { + return 0 +}; +ol.source.Tile.prototype.getKeyZXY = ol.TileCoord.getKeyZXY; +ol.source.Tile.prototype.getOpaque = function() { + return this.opaque_ +}; +ol.source.Tile.prototype.getResolutions = function() { + return this.tileGrid.getResolutions() +}; +ol.source.Tile.prototype.getTile = goog.abstractMethod; +ol.source.Tile.prototype.getTileGrid = function() { + return this.tileGrid +}; +ol.source.Tile.prototype.getTileGridForProjection = function(projection) { + if(goog.isNull(this.tileGrid)) { + return ol.tilegrid.getForProjection(projection) + }else { + return this.tileGrid + } +}; +ol.source.Tile.prototype.getTilePixelSize = function(z, pixelRatio, projection) { + var tileGrid = this.getTileGridForProjection(projection); + return tileGrid.getTileSize(z) +}; +ol.source.Tile.prototype.useTile = goog.nullFunction; +goog.provide("ol.renderer.Layer"); +goog.require("goog.Disposable"); +goog.require("ol.FrameState"); +goog.require("ol.Image"); +goog.require("ol.ImageState"); +goog.require("ol.Tile"); +goog.require("ol.TileRange"); +goog.require("ol.TileState"); +goog.require("ol.layer.Layer"); +goog.require("ol.layer.LayerState"); +goog.require("ol.source.Source"); +goog.require("ol.source.State"); +goog.require("ol.source.Tile"); +ol.renderer.Layer = function(mapRenderer, layer) { + goog.base(this); + this.mapRenderer_ = mapRenderer; + this.layer_ = layer +}; +goog.inherits(ol.renderer.Layer, goog.Disposable); +ol.renderer.Layer.prototype.forEachFeatureAtPixel = goog.nullFunction; +ol.renderer.Layer.prototype.getLayer = function() { + return this.layer_ +}; +ol.renderer.Layer.prototype.getMap = function() { + return this.mapRenderer_.getMap() +}; +ol.renderer.Layer.prototype.getMapRenderer = function() { + return this.mapRenderer_ +}; +ol.renderer.Layer.prototype.handleImageChange = function(event) { + var image = (event.target); + if(image.getState() === ol.ImageState.LOADED) { + this.renderIfReadyAndVisible() + } +}; +ol.renderer.Layer.prototype.prepareFrame = goog.abstractMethod; +ol.renderer.Layer.prototype.renderIfReadyAndVisible = function() { + var layer = this.getLayer(); + if(layer.getVisible() && layer.getSourceState() == ol.source.State.READY) { + this.getMap().render() + } +}; +ol.renderer.Layer.prototype.scheduleExpireCache = function(frameState, tileSource) { + if(tileSource.canExpireCache()) { + frameState.postRenderFunctions.push(goog.partial(function(tileSource, map, frameState) { + var tileSourceKey = goog.getUid(tileSource).toString(); + tileSource.expireCache(frameState.usedTiles[tileSourceKey]) + }, tileSource)) + } +}; +ol.renderer.Layer.prototype.updateAttributions = function(attributionsSet, attributions) { + if(goog.isDefAndNotNull(attributions)) { + var attribution, i, ii; + for(i = 0, ii = attributions.length;i < ii;++i) { + attribution = attributions[i]; + attributionsSet[goog.getUid(attribution).toString()] = attribution + } + } +}; +ol.renderer.Layer.prototype.updateLogos = function(frameState, source) { + var logo = source.getLogo(); + if(goog.isDef(logo)) { + frameState.logos[logo] = "" + } +}; +ol.renderer.Layer.prototype.updateUsedTiles = function(usedTiles, tileSource, z, tileRange) { + var tileSourceKey = goog.getUid(tileSource).toString(); + var zKey = z.toString(); + if(tileSourceKey in usedTiles) { + if(zKey in usedTiles[tileSourceKey]) { + usedTiles[tileSourceKey][zKey].extend(tileRange) + }else { + usedTiles[tileSourceKey][zKey] = tileRange + } + }else { + usedTiles[tileSourceKey] = {}; + usedTiles[tileSourceKey][zKey] = tileRange + } +}; +ol.renderer.Layer.prototype.createGetTileIfLoadedFunction = function(isLoadedFunction, tileSource, pixelRatio, projection) { + return function(z, x, y) { + var tile = tileSource.getTile(z, x, y, pixelRatio, projection); + return isLoadedFunction(tile) ? tile : null + } +}; +ol.renderer.Layer.prototype.snapCenterToPixel = function(center, resolution, size) { + return[resolution * (Math.round(center[0] / resolution) + size[0] % 2 / 2), resolution * (Math.round(center[1] / resolution) + size[1] % 2 / 2)] +}; +ol.renderer.Layer.prototype.manageTilePyramid = function(frameState, tileSource, tileGrid, pixelRatio, projection, extent, currentZ, preload, opt_tileCallback, opt_this) { + var tileSourceKey = goog.getUid(tileSource).toString(); + if(!(tileSourceKey in frameState.wantedTiles)) { + frameState.wantedTiles[tileSourceKey] = {} + } + var wantedTiles = frameState.wantedTiles[tileSourceKey]; + var tileQueue = frameState.tileQueue; + var minZoom = tileGrid.getMinZoom(); + var tile, tileRange, tileResolution, x, y, z; + if(!goog.isDef(preload)) { + preload = 0 + } + for(z = currentZ;z >= minZoom;--z) { + tileRange = tileGrid.getTileRangeForExtentAndZ(extent, z); + tileResolution = tileGrid.getResolution(z); + for(x = tileRange.minX;x <= tileRange.maxX;++x) { + for(y = tileRange.minY;y <= tileRange.maxY;++y) { + if(currentZ - z <= preload) { + tile = tileSource.getTile(z, x, y, pixelRatio, projection); + if(tile.getState() == ol.TileState.IDLE) { + wantedTiles[tile.tileCoord.toString()] = true; + if(!tileQueue.isKeyQueued(tile.getKey())) { + tileQueue.enqueue([tile, tileSourceKey, tileGrid.getTileCoordCenter(tile.tileCoord), tileResolution]) + } + } + if(goog.isDef(opt_tileCallback)) { + opt_tileCallback.call(opt_this, tile) + } + }else { + tileSource.useTile(z, x, y) + } + } + } + } +}; +goog.provide("ol.style.Icon"); +goog.provide("ol.style.IconAnchorOrigin"); +goog.provide("ol.style.IconAnchorUnits"); +goog.provide("ol.style.IconImageCache"); +goog.require("goog.array"); +goog.require("goog.asserts"); +goog.require("goog.dom"); +goog.require("goog.dom.TagName"); +goog.require("goog.events"); +goog.require("goog.events.EventTarget"); +goog.require("goog.events.EventType"); +goog.require("ol.style.Image"); +goog.require("ol.style.ImageState"); +ol.style.IconAnchorOrigin = {BOTTOM_LEFT:"bottom-left", BOTTOM_RIGHT:"bottom-right", TOP_LEFT:"top-left", TOP_RIGHT:"top-right"}; +ol.style.IconAnchorUnits = {FRACTION:"fraction", PIXELS:"pixels"}; +ol.style.Icon = function(opt_options) { + var options = goog.isDef(opt_options) ? opt_options : {}; + this.anchor_ = goog.isDef(options.anchor) ? options.anchor : [0.5, 0.5]; + this.anchorOrigin_ = goog.isDef(options.anchorOrigin) ? options.anchorOrigin : ol.style.IconAnchorOrigin.TOP_LEFT; + this.anchorXUnits_ = goog.isDef(options.anchorXUnits) ? options.anchorXUnits : ol.style.IconAnchorUnits.FRACTION; + this.anchorYUnits_ = goog.isDef(options.anchorYUnits) ? options.anchorYUnits : ol.style.IconAnchorUnits.FRACTION; + var crossOrigin = goog.isDef(options.crossOrigin) ? options.crossOrigin : null; + this.iconImage_ = ol.style.IconImage_.get(options.src, crossOrigin); + this.size_ = goog.isDef(options.size) ? options.size : null; + var opacity = goog.isDef(options.opacity) ? options.opacity : 1; + var rotateWithView = goog.isDef(options.rotateWithView) ? options.rotateWithView : false; + var rotation = goog.isDef(options.rotation) ? options.rotation : 0; + var scale = goog.isDef(options.scale) ? options.scale : 1; + goog.base(this, {opacity:opacity, rotation:rotation, scale:scale, snapToPixel:undefined, rotateWithView:rotateWithView}) +}; +goog.inherits(ol.style.Icon, ol.style.Image); +ol.style.Icon.prototype.getAnchor = function() { + var anchor = this.anchor_; + var size = this.getSize(); + if(this.anchorXUnits_ == ol.style.IconAnchorUnits.FRACTION || this.anchorYUnits_ == ol.style.IconAnchorUnits.FRACTION) { + if(goog.isNull(size)) { + return null + } + anchor = this.anchor_.slice(); + if(this.anchorXUnits_ == ol.style.IconAnchorUnits.FRACTION) { + anchor[0] *= size[0] + } + if(this.anchorYUnits_ == ol.style.IconAnchorUnits.FRACTION) { + anchor[1] *= size[1] + } + } + if(this.anchorOrigin_ != ol.style.IconAnchorOrigin.TOP_LEFT) { + if(goog.isNull(size)) { + return null + } + if(anchor === this.anchor_) { + anchor = this.anchor_.slice() + } + if(this.anchorOrigin_ == ol.style.IconAnchorOrigin.TOP_RIGHT || this.anchorOrigin_ == ol.style.IconAnchorOrigin.BOTTOM_RIGHT) { + anchor[0] = -anchor[0] + size[0] + } + if(this.anchorOrigin_ == ol.style.IconAnchorOrigin.BOTTOM_LEFT || this.anchorOrigin_ == ol.style.IconAnchorOrigin.BOTTOM_RIGHT) { + anchor[1] += size[1] + } + } + return anchor +}; +ol.style.Icon.prototype.getImage = function(pixelRatio) { + return this.iconImage_.getImage(pixelRatio) +}; +ol.style.Icon.prototype.getImageState = function() { + return this.iconImage_.getImageState() +}; +ol.style.Icon.prototype.getHitDetectionImage = function(pixelRatio) { + return this.iconImage_.getHitDetectionImage(pixelRatio) +}; +ol.style.Icon.prototype.getSrc = function() { + return this.iconImage_.getSrc() +}; +ol.style.Icon.prototype.getSize = function() { + return goog.isNull(this.size_) ? this.iconImage_.getSize() : this.size_ +}; +ol.style.Icon.prototype.listenImageChange = function(listener, thisArg) { + return goog.events.listen(this.iconImage_, goog.events.EventType.CHANGE, listener, false, thisArg) +}; +ol.style.Icon.prototype.load = function() { + this.iconImage_.load() +}; +ol.style.Icon.prototype.unlistenImageChange = function(listener, thisArg) { + goog.events.unlisten(this.iconImage_, goog.events.EventType.CHANGE, listener, false, thisArg) +}; +ol.style.IconImage_ = function(src, crossOrigin) { + goog.base(this); + this.hitDetectionImage_ = null; + this.image_ = new Image; + if(!goog.isNull(crossOrigin)) { + this.image_.crossOrigin = crossOrigin + } + this.imageListenerKeys_ = null; + this.imageState_ = ol.style.ImageState.IDLE; + this.size_ = null; + this.src_ = src; + this.tainting_ = false +}; +goog.inherits(ol.style.IconImage_, goog.events.EventTarget); +ol.style.IconImage_.get = function(src, crossOrigin) { + var iconImageCache = ol.style.IconImageCache.getInstance(); + var iconImage = iconImageCache.get(src, crossOrigin); + if(goog.isNull(iconImage)) { + iconImage = new ol.style.IconImage_(src, crossOrigin); + iconImageCache.set(src, crossOrigin, iconImage) + } + return iconImage +}; +ol.style.IconImage_.prototype.determineTainting_ = function() { + var canvas = (goog.dom.createElement(goog.dom.TagName.CANVAS)); + canvas.width = 1; + canvas.height = 1; + var context = (canvas.getContext("2d")); + context.drawImage(this.image_, 0, 0); + try { + context.getImageData(0, 0, 1, 1) + }catch(e) { + this.tainting_ = true + } +}; +ol.style.IconImage_.prototype.dispatchChangeEvent_ = function() { + this.dispatchEvent(goog.events.EventType.CHANGE) +}; +ol.style.IconImage_.prototype.handleImageError_ = function() { + this.imageState_ = ol.style.ImageState.ERROR; + this.unlistenImage_(); + this.dispatchChangeEvent_() +}; +ol.style.IconImage_.prototype.handleImageLoad_ = function() { + this.imageState_ = ol.style.ImageState.LOADED; + this.size_ = [this.image_.width, this.image_.height]; + this.unlistenImage_(); + this.determineTainting_(); + this.dispatchChangeEvent_() +}; +ol.style.IconImage_.prototype.getImage = function(pixelRatio) { + return this.image_ +}; +ol.style.IconImage_.prototype.getImageState = function() { + return this.imageState_ +}; +ol.style.IconImage_.prototype.getHitDetectionImage = function(pixelRatio) { + if(goog.isNull(this.hitDetectionImage_)) { + if(this.tainting_) { + var canvas = (goog.dom.createElement(goog.dom.TagName.CANVAS)); + var width = this.size_[0]; + var height = this.size_[1]; + canvas.width = width; + canvas.height = height; + var context = (canvas.getContext("2d")); + context.fillRect(0, 0, width, height); + this.hitDetectionImage_ = canvas + }else { + this.hitDetectionImage_ = this.image_ + } + } + return this.hitDetectionImage_ +}; +ol.style.IconImage_.prototype.getSize = function() { + return this.size_ +}; +ol.style.IconImage_.prototype.getSrc = function() { + return this.src_ +}; +ol.style.IconImage_.prototype.load = function() { + if(this.imageState_ == ol.style.ImageState.IDLE) { + goog.asserts.assert(goog.isDef(this.src_)); + goog.asserts.assert(goog.isNull(this.imageListenerKeys_)); + this.imageState_ = ol.style.ImageState.LOADING; + this.imageListenerKeys_ = [goog.events.listenOnce(this.image_, goog.events.EventType.ERROR, this.handleImageError_, false, this), goog.events.listenOnce(this.image_, goog.events.EventType.LOAD, this.handleImageLoad_, false, this)]; + try { + this.image_.src = this.src_ + }catch(e) { + this.handleImageError_() + } + } +}; +ol.style.IconImage_.prototype.unlistenImage_ = function() { + goog.asserts.assert(!goog.isNull(this.imageListenerKeys_)); + goog.array.forEach(this.imageListenerKeys_, goog.events.unlistenByKey); + this.imageListenerKeys_ = null +}; +ol.style.IconImageCache = function() { + this.cache_ = {}; + this.cacheSize_ = 0; + this.maxCacheSize_ = 32 +}; +goog.addSingletonGetter(ol.style.IconImageCache); +ol.style.IconImageCache.getKey = function(src, crossOrigin) { + goog.asserts.assert(goog.isDef(crossOrigin)); + return crossOrigin + ":" + src +}; +ol.style.IconImageCache.prototype.clear = function() { + this.cache_ = {}; + this.cacheSize_ = 0 +}; +ol.style.IconImageCache.prototype.expire = function() { + if(this.cacheSize_ > this.maxCacheSize_) { + var i = 0; + var key, iconImage; + for(key in this.cache_) { + iconImage = this.cache_[key]; + if((i++ & 3) === 0 && !goog.events.hasListener(iconImage)) { + delete this.cache_[key]; + --this.cacheSize_ + } + } + } +}; +ol.style.IconImageCache.prototype.get = function(src, crossOrigin) { + var key = ol.style.IconImageCache.getKey(src, crossOrigin); + return key in this.cache_ ? this.cache_[key] : null +}; +ol.style.IconImageCache.prototype.set = function(src, crossOrigin, iconImage) { + var key = ol.style.IconImageCache.getKey(src, crossOrigin); + this.cache_[key] = iconImage; + ++this.cacheSize_ +}; +goog.provide("ol.vec.Mat4"); +goog.require("goog.vec.Mat4"); +ol.vec.Mat4.makeTransform2D = function(mat, translateX1, translateY1, scaleX, scaleY, rotation, translateX2, translateY2) { + goog.vec.Mat4.makeIdentity(mat); + if(translateX1 !== 0 || translateY1 !== 0) { + goog.vec.Mat4.translate(mat, translateX1, translateY1, 0) + } + if(scaleX != 1 || scaleY != 1) { + goog.vec.Mat4.scale(mat, scaleX, scaleY, 1) + } + if(rotation !== 0) { + goog.vec.Mat4.rotateZ(mat, rotation) + } + if(translateX2 !== 0 || translateY2 !== 0) { + goog.vec.Mat4.translate(mat, translateX2, translateY2, 0) + } + return mat +}; +ol.vec.Mat4.equals2D = function(mat1, mat2) { + return goog.vec.Mat4.getElement(mat1, 0, 0) == goog.vec.Mat4.getElement(mat2, 0, 0) && goog.vec.Mat4.getElement(mat1, 1, 0) == goog.vec.Mat4.getElement(mat2, 1, 0) && goog.vec.Mat4.getElement(mat1, 0, 1) == goog.vec.Mat4.getElement(mat2, 0, 1) && goog.vec.Mat4.getElement(mat1, 1, 1) == goog.vec.Mat4.getElement(mat2, 1, 1) && goog.vec.Mat4.getElement(mat1, 0, 3) == goog.vec.Mat4.getElement(mat2, 0, 3) && goog.vec.Mat4.getElement(mat1, 1, 3) == goog.vec.Mat4.getElement(mat2, 1, 3) +}; +ol.vec.Mat4.multVec2 = function(mat, vec, resultVec) { + var m00 = goog.vec.Mat4.getElement(mat, 0, 0); + var m10 = goog.vec.Mat4.getElement(mat, 1, 0); + var m01 = goog.vec.Mat4.getElement(mat, 0, 1); + var m11 = goog.vec.Mat4.getElement(mat, 1, 1); + var m03 = goog.vec.Mat4.getElement(mat, 0, 3); + var m13 = goog.vec.Mat4.getElement(mat, 1, 3); + var x = vec[0], y = vec[1]; + resultVec[0] = m00 * x + m01 * y + m03; + resultVec[1] = m10 * x + m11 * y + m13; + return resultVec +}; +goog.provide("ol.renderer.Map"); +goog.require("goog.Disposable"); +goog.require("goog.asserts"); +goog.require("goog.dispose"); +goog.require("goog.object"); +goog.require("goog.vec.Mat4"); +goog.require("ol.FrameState"); +goog.require("ol.layer.Layer"); +goog.require("ol.renderer.Layer"); +goog.require("ol.style.IconImageCache"); +goog.require("ol.vec.Mat4"); +ol.renderer.Map = function(container, map) { + goog.base(this); + this.map_ = map; + this.layerRenderers_ = {} +}; +goog.inherits(ol.renderer.Map, goog.Disposable); +ol.renderer.Map.prototype.calculateMatrices2D = function(frameState) { + var view2DState = frameState.view2DState; + var coordinateToPixelMatrix = frameState.coordinateToPixelMatrix; + goog.asserts.assert(!goog.isNull(coordinateToPixelMatrix)); + ol.vec.Mat4.makeTransform2D(coordinateToPixelMatrix, frameState.size[0] / 2, frameState.size[1] / 2, 1 / view2DState.resolution, -1 / view2DState.resolution, -view2DState.rotation, -view2DState.center[0], -view2DState.center[1]); + var inverted = goog.vec.Mat4.invert(coordinateToPixelMatrix, frameState.pixelToCoordinateMatrix); + goog.asserts.assert(inverted) +}; +ol.renderer.Map.prototype.createLayerRenderer = function(layer) { + return new ol.renderer.Layer(this, layer) +}; +ol.renderer.Map.prototype.disposeInternal = function() { + goog.object.forEach(this.layerRenderers_, function(layerRenderer) { + goog.dispose(layerRenderer) + }); + goog.base(this, "disposeInternal") +}; +ol.renderer.Map.prototype.forEachFeatureAtPixel = function(coordinate, frameState, callback, thisArg, layerFilter, thisArg2) { + var layersArray = this.map_.getLayerGroup().getLayersArray(); + var i; + for(i = layersArray.length - 1;i >= 0;--i) { + var layer = layersArray[i]; + if(layer.getVisible() && layerFilter.call(thisArg2, layer)) { + var layerRenderer = this.getLayerRenderer(layer); + var result = layerRenderer.forEachFeatureAtPixel(coordinate, frameState, callback, thisArg); + if(result) { + return result + } + } + } + return undefined +}; +ol.renderer.Map.prototype.getLayerRenderer = function(layer) { + var layerKey = goog.getUid(layer).toString(); + if(layerKey in this.layerRenderers_) { + return this.layerRenderers_[layerKey] + }else { + var layerRenderer = this.createLayerRenderer(layer); + this.layerRenderers_[layerKey] = layerRenderer; + return layerRenderer + } +}; +ol.renderer.Map.prototype.getLayerRendererByKey = function(layerKey) { + goog.asserts.assert(layerKey in this.layerRenderers_); + return this.layerRenderers_[layerKey] +}; +ol.renderer.Map.prototype.getLayerRenderers = function() { + return this.layerRenderers_ +}; +ol.renderer.Map.prototype.getMap = function() { + return this.map_ +}; +ol.renderer.Map.prototype.removeLayerRendererByKey_ = function(layerKey) { + goog.asserts.assert(layerKey in this.layerRenderers_); + var layerRenderer = this.layerRenderers_[layerKey]; + delete this.layerRenderers_[layerKey]; + return layerRenderer +}; +ol.renderer.Map.prototype.renderFrame = goog.nullFunction; +ol.renderer.Map.prototype.removeUnusedLayerRenderers_ = function(map, frameState) { + var layerKey; + for(layerKey in this.layerRenderers_) { + if(goog.isNull(frameState) || !(layerKey in frameState.layerStates)) { + goog.dispose(this.removeLayerRendererByKey_(layerKey)) + } + } +}; +ol.renderer.Map.prototype.scheduleExpireIconCache = function(frameState) { + frameState.postRenderFunctions.push(function(map, frameState) { + ol.style.IconImageCache.getInstance().expire() + }) +}; +ol.renderer.Map.prototype.scheduleRemoveUnusedLayerRenderers = function(frameState) { + var layerKey; + for(layerKey in this.layerRenderers_) { + if(!(layerKey in frameState.layerStates)) { + frameState.postRenderFunctions.push(goog.bind(this.removeUnusedLayerRenderers_, this)); + return + } + } +}; +goog.provide("ol.layer.Image"); +goog.require("ol.layer.Layer"); +ol.layer.Image = function(options) { + goog.base(this, options) +}; +goog.inherits(ol.layer.Image, ol.layer.Layer); +goog.provide("ol.layer.Tile"); +goog.require("ol.layer.Layer"); +ol.layer.TileProperty = {PRELOAD:"preload", USE_INTERIM_TILES_ON_ERROR:"useInterimTilesOnError"}; +ol.layer.Tile = function(options) { + goog.base(this, options) +}; +goog.inherits(ol.layer.Tile, ol.layer.Layer); +ol.layer.Tile.prototype.getPreload = function() { + return(this.get(ol.layer.TileProperty.PRELOAD)) +}; +goog.exportProperty(ol.layer.Tile.prototype, "getPreload", ol.layer.Tile.prototype.getPreload); +ol.layer.Tile.prototype.setPreload = function(preload) { + this.set(ol.layer.TileProperty.PRELOAD, preload) +}; +goog.exportProperty(ol.layer.Tile.prototype, "setPreload", ol.layer.Tile.prototype.setPreload); +ol.layer.Tile.prototype.getUseInterimTilesOnError = function() { + return(this.get(ol.layer.TileProperty.USE_INTERIM_TILES_ON_ERROR)) +}; +goog.exportProperty(ol.layer.Tile.prototype, "getUseInterimTilesOnError", ol.layer.Tile.prototype.getUseInterimTilesOnError); +ol.layer.Tile.prototype.setUseInterimTilesOnError = function(useInterimTilesOnError) { + this.set(ol.layer.TileProperty.USE_INTERIM_TILES_ON_ERROR, useInterimTilesOnError) +}; +goog.exportProperty(ol.layer.Tile.prototype, "setUseInterimTilesOnError", ol.layer.Tile.prototype.setUseInterimTilesOnError); +goog.provide("ol.layer.Vector"); +goog.require("goog.object"); +goog.require("ol.feature"); +goog.require("ol.layer.Layer"); +ol.layer.VectorProperty = {RENDER_GEOMETRY_FUNCTIONS:"renderGeometryFunctions"}; +ol.layer.Vector = function(opt_options) { + var options = goog.isDef(opt_options) ? opt_options : ({}); + var baseOptions = goog.object.clone(options); + delete baseOptions.style; + goog.base(this, (baseOptions)); + this.style_ = null; + this.styleFunction_ = undefined; + if(goog.isDef(options.style)) { + this.setStyle(options.style) + } +}; +goog.inherits(ol.layer.Vector, ol.layer.Layer); +ol.layer.Vector.prototype.getRenderGeometryFunctions = function() { + return(this.get(ol.layer.VectorProperty.RENDER_GEOMETRY_FUNCTIONS)) +}; +goog.exportProperty(ol.layer.Vector.prototype, "getRenderGeometryFunctions", ol.layer.Vector.prototype.getRenderGeometryFunctions); +ol.layer.Vector.prototype.getStyle = function() { + return this.style_ +}; +ol.layer.Vector.prototype.getStyleFunction = function() { + return this.styleFunction_ +}; +ol.layer.Vector.prototype.setRenderGeometryFunctions = function(renderGeometryFunctions) { + this.set(ol.layer.VectorProperty.RENDER_GEOMETRY_FUNCTIONS, renderGeometryFunctions) +}; +goog.exportProperty(ol.layer.Vector.prototype, "setRenderGeometryFunctions", ol.layer.Vector.prototype.setRenderGeometryFunctions); +ol.layer.Vector.prototype.setStyle = function(style) { + this.style_ = style; + this.styleFunction_ = ol.feature.createStyleFunction(style); + this.dispatchChangeEvent() +}; +goog.provide("ol.render.canvas.Immediate"); +goog.require("goog.array"); +goog.require("goog.asserts"); +goog.require("goog.object"); +goog.require("goog.vec.Mat4"); +goog.require("ol.BrowserFeature"); +goog.require("ol.color"); +goog.require("ol.extent"); +goog.require("ol.geom.flat"); +goog.require("ol.render.IVectorContext"); +goog.require("ol.render.canvas"); +goog.require("ol.vec.Mat4"); +ol.render.canvas.Immediate = function(context, pixelRatio, extent, transform, viewRotation) { + this.callbacksByZIndex_ = {}; + this.context_ = context; + this.pixelRatio_ = pixelRatio; + this.extent_ = extent; + this.transform_ = transform; + this.viewRotation_ = viewRotation; + this.contextFillState_ = null; + this.contextStrokeState_ = null; + this.contextTextState_ = null; + this.fillState_ = null; + this.strokeState_ = null; + this.image_ = null; + this.imageAnchorX_ = 0; + this.imageAnchorY_ = 0; + this.imageHeight_ = 0; + this.imageOpacity_ = 0; + this.imageRotateWithView_ = false; + this.imageRotation_ = 0; + this.imageScale_ = 0; + this.imageSnapToPixel_ = false; + this.imageWidth_ = 0; + this.text_ = ""; + this.textRotation_ = 0; + this.textScale_ = 0; + this.textFillState_ = null; + this.textStrokeState_ = null; + this.textState_ = null; + this.pixelCoordinates_ = []; + this.tmpLocalTransform_ = goog.vec.Mat4.createNumber() +}; +ol.render.canvas.Immediate.prototype.drawImages_ = function(flatCoordinates, offset, end, stride) { + if(goog.isNull(this.image_)) { + return + } + goog.asserts.assert(offset === 0); + goog.asserts.assert(end == flatCoordinates.length); + var pixelCoordinates = ol.geom.flat.transform2D(flatCoordinates, 2, this.transform_, this.pixelCoordinates_); + var context = this.context_; + var localTransform = this.tmpLocalTransform_; + var alpha = context.globalAlpha; + if(this.imageOpacity_ != 1) { + context.globalAlpha = alpha * this.imageOpacity_ + } + var rotation = this.imageRotation_; + if(this.imageRotateWithView_) { + rotation += this.viewRotation_ + } + var i, ii; + for(i = 0, ii = pixelCoordinates.length;i < ii;i += 2) { + var x = pixelCoordinates[i] - this.imageAnchorX_; + var y = pixelCoordinates[i + 1] - this.imageAnchorY_; + if(this.imageSnapToPixel_) { + x = x + 0.5 | 0; + y = y + 0.5 | 0 + } + if(rotation !== 0 || this.imageScale_ != 1) { + var centerX = x + this.imageAnchorX_; + var centerY = y + this.imageAnchorY_; + ol.vec.Mat4.makeTransform2D(localTransform, centerX, centerY, this.imageScale_, this.imageScale_, rotation, -centerX, -centerY); + context.setTransform(goog.vec.Mat4.getElement(localTransform, 0, 0), goog.vec.Mat4.getElement(localTransform, 1, 0), goog.vec.Mat4.getElement(localTransform, 0, 1), goog.vec.Mat4.getElement(localTransform, 1, 1), goog.vec.Mat4.getElement(localTransform, 0, 3), goog.vec.Mat4.getElement(localTransform, 1, 3)) + } + context.drawImage(this.image_, x, y, this.imageWidth_, this.imageHeight_) + } + if(rotation !== 0 || this.imageScale_ != 1) { + context.setTransform(1, 0, 0, 1, 0, 0) + } + if(this.imageOpacity_ != 1) { + context.globalAlpha = alpha + } +}; +ol.render.canvas.Immediate.prototype.drawText_ = function(flatCoordinates, offset, end, stride) { + if(goog.isNull(this.textState_) || this.text_ === "") { + return + } + if(!goog.isNull(this.textFillState_)) { + this.setContextFillState_(this.textFillState_) + } + if(!goog.isNull(this.textStrokeState_)) { + this.setContextStrokeState_(this.textStrokeState_) + } + this.setContextTextState_(this.textState_); + goog.asserts.assert(offset === 0); + goog.asserts.assert(end == flatCoordinates.length); + var pixelCoordinates = ol.geom.flat.transform2D(flatCoordinates, stride, this.transform_, this.pixelCoordinates_); + var context = this.context_; + for(;offset < end;offset += stride) { + var x = pixelCoordinates[offset]; + var y = pixelCoordinates[offset + 1]; + if(this.textRotation_ !== 0 || this.textScale_ != 1) { + var localTransform = ol.vec.Mat4.makeTransform2D(this.tmpLocalTransform_, x, y, this.textScale_, this.textScale_, this.textRotation_, -x, -y); + context.setTransform(goog.vec.Mat4.getElement(localTransform, 0, 0), goog.vec.Mat4.getElement(localTransform, 1, 0), goog.vec.Mat4.getElement(localTransform, 0, 1), goog.vec.Mat4.getElement(localTransform, 1, 1), goog.vec.Mat4.getElement(localTransform, 0, 3), goog.vec.Mat4.getElement(localTransform, 1, 3)) + } + if(!goog.isNull(this.textStrokeState_)) { + context.strokeText(this.text_, x, y) + } + if(!goog.isNull(this.textFillState_)) { + context.fillText(this.text_, x, y) + } + } + if(this.textRotation_ !== 0 || this.textScale_ != 1) { + context.setTransform(1, 0, 0, 1, 0, 0) + } +}; +ol.render.canvas.Immediate.prototype.moveToLineTo_ = function(pixelCoordinates, offset, end, close) { + var context = this.context_; + context.moveTo(pixelCoordinates[offset], pixelCoordinates[offset + 1]); + var i; + for(i = offset + 2;i < end;i += 2) { + context.lineTo(pixelCoordinates[i], pixelCoordinates[i + 1]) + } + if(close) { + context.lineTo(pixelCoordinates[offset], pixelCoordinates[offset + 1]) + } + return end +}; +ol.render.canvas.Immediate.prototype.drawRings_ = function(pixelCoordinates, offset, ends) { + var context = this.context_; + var i, ii; + for(i = 0, ii = ends.length;i < ii;++i) { + offset = this.moveToLineTo_(pixelCoordinates, offset, ends[i], true); + context.closePath() + } + return offset +}; +ol.render.canvas.Immediate.prototype.drawAsync = function(zIndex, callback) { + var zIndexKey = zIndex.toString(); + var callbacks = this.callbacksByZIndex_[zIndexKey]; + if(goog.isDef(callbacks)) { + callbacks.push(callback) + }else { + this.callbacksByZIndex_[zIndexKey] = [callback] + } +}; +ol.render.canvas.Immediate.prototype.drawCircleGeometry = function(circleGeometry, data) { + if(!ol.extent.intersects(this.extent_, circleGeometry.getExtent())) { + return + } + if(!goog.isNull(this.fillState_) || !goog.isNull(this.strokeState_)) { + if(!goog.isNull(this.fillState_)) { + this.setContextFillState_(this.fillState_) + } + if(!goog.isNull(this.strokeState_)) { + this.setContextStrokeState_(this.strokeState_) + } + var pixelCoordinates = ol.geom.transformSimpleGeometry2D(circleGeometry, this.transform_, this.pixelCoordinates_); + var dx = pixelCoordinates[2] - pixelCoordinates[0]; + var dy = pixelCoordinates[3] - pixelCoordinates[1]; + var radius = Math.sqrt(dx * dx + dy * dy); + var context = this.context_; + context.beginPath(); + context.arc(pixelCoordinates[0], pixelCoordinates[1], radius, 0, 2 * Math.PI); + if(!goog.isNull(this.fillState_)) { + context.fill() + } + if(!goog.isNull(this.strokeState_)) { + context.stroke() + } + } + if(this.text_ !== "") { + this.drawText_(circleGeometry.getCenter(), 0, 2, 2) + } +}; +ol.render.canvas.Immediate.prototype.drawFeature = function(feature, style) { + var geometry = feature.getGeometry(); + if(goog.isNull(geometry) || !ol.extent.intersects(this.extent_, geometry.getExtent())) { + return + } + var zIndex = style.getZIndex(); + if(!goog.isDef(zIndex)) { + zIndex = 0 + } + this.drawAsync(zIndex, function(render) { + render.setFillStrokeStyle(style.getFill(), style.getStroke()); + render.setImageStyle(style.getImage()); + render.setTextStyle(style.getText()); + var renderGeometry = ol.render.canvas.Immediate.GEOMETRY_RENDERES_[geometry.getType()]; + goog.asserts.assert(goog.isDef(renderGeometry)); + renderGeometry.call(render, geometry, null) + }) +}; +ol.render.canvas.Immediate.prototype.drawGeometryCollectionGeometry = function(geometryCollectionGeometry, data) { + var geometries = geometryCollectionGeometry.getGeometriesArray(); + var i, ii; + for(i = 0, ii = geometries.length;i < ii;++i) { + var geometry = geometries[i]; + var geometryRenderer = ol.render.canvas.Immediate.GEOMETRY_RENDERES_[geometry.getType()]; + goog.asserts.assert(goog.isDef(geometryRenderer)); + geometryRenderer.call(this, geometry, data) + } +}; +ol.render.canvas.Immediate.prototype.drawPointGeometry = function(pointGeometry, data) { + var flatCoordinates = pointGeometry.getFlatCoordinates(); + var stride = pointGeometry.getStride(); + if(!goog.isNull(this.image_)) { + this.drawImages_(flatCoordinates, 0, flatCoordinates.length, stride) + } + if(this.text_ !== "") { + this.drawText_(flatCoordinates, 0, flatCoordinates.length, stride) + } +}; +ol.render.canvas.Immediate.prototype.drawMultiPointGeometry = function(multiPointGeometry, data) { + var flatCoordinates = multiPointGeometry.getFlatCoordinates(); + var stride = multiPointGeometry.getStride(); + if(!goog.isNull(this.image_)) { + this.drawImages_(flatCoordinates, 0, flatCoordinates.length, stride) + } + if(this.text_ !== "") { + this.drawText_(flatCoordinates, 0, flatCoordinates.length, stride) + } +}; +ol.render.canvas.Immediate.prototype.drawLineStringGeometry = function(lineStringGeometry, data) { + if(!ol.extent.intersects(this.extent_, lineStringGeometry.getExtent())) { + return + } + if(!goog.isNull(this.strokeState_)) { + this.setContextStrokeState_(this.strokeState_); + var pixelCoordinates = ol.geom.transformSimpleGeometry2D(lineStringGeometry, this.transform_, this.pixelCoordinates_); + var context = this.context_; + context.beginPath(); + this.moveToLineTo_(pixelCoordinates, 0, pixelCoordinates.length, false); + context.stroke() + } + if(this.text_ !== "") { + var flatMidpoint = lineStringGeometry.getFlatMidpoint(); + this.drawText_(flatMidpoint, 0, 2, 2) + } +}; +ol.render.canvas.Immediate.prototype.drawMultiLineStringGeometry = function(multiLineStringGeometry, data) { + var geometryExtent = multiLineStringGeometry.getExtent(); + if(!ol.extent.intersects(this.extent_, geometryExtent)) { + return + } + var pixelCoordinates; + if(!goog.isNull(this.strokeState_)) { + this.setContextStrokeState_(this.strokeState_); + pixelCoordinates = ol.geom.transformSimpleGeometry2D(multiLineStringGeometry, this.transform_, this.pixelCoordinates_); + var context = this.context_; + context.beginPath(); + var ends = multiLineStringGeometry.getEnds(); + var offset = 0; + var i, ii; + for(i = 0, ii = ends.length;i < ii;++i) { + offset = this.moveToLineTo_(pixelCoordinates, offset, ends[i], false) + } + context.stroke() + } + if(this.text_ !== "") { + var flatMidpoints = multiLineStringGeometry.getFlatMidpoints(); + this.drawText_(flatMidpoints, 0, flatMidpoints.length, 2) + } +}; +ol.render.canvas.Immediate.prototype.drawPolygonGeometry = function(polygonGeometry, data) { + if(!ol.extent.intersects(this.extent_, polygonGeometry.getExtent())) { + return + } + var pixelCoordinates; + if(!goog.isNull(this.strokeState_) || !goog.isNull(this.fillState_)) { + if(!goog.isNull(this.fillState_)) { + this.setContextFillState_(this.fillState_) + } + if(!goog.isNull(this.strokeState_)) { + this.setContextStrokeState_(this.strokeState_) + } + pixelCoordinates = ol.geom.transformSimpleGeometry2D(polygonGeometry, this.transform_, this.pixelCoordinates_); + var context = this.context_; + context.beginPath(); + this.drawRings_(pixelCoordinates, 0, polygonGeometry.getEnds()); + if(!goog.isNull(this.fillState_)) { + context.fill() + } + if(!goog.isNull(this.strokeState_)) { + context.stroke() + } + } + if(this.text_ !== "") { + var flatInteriorPoint = polygonGeometry.getFlatInteriorPoint(); + this.drawText_(flatInteriorPoint, 0, 2, 2) + } +}; +ol.render.canvas.Immediate.prototype.drawMultiPolygonGeometry = function(multiPolygonGeometry, data) { + if(!ol.extent.intersects(this.extent_, multiPolygonGeometry.getExtent())) { + return + } + var pixelCoordinates; + if(!goog.isNull(this.strokeState_) || !goog.isNull(this.fillState_)) { + if(!goog.isNull(this.fillState_)) { + this.setContextFillState_(this.fillState_) + } + if(!goog.isNull(this.strokeState_)) { + this.setContextStrokeState_(this.strokeState_) + } + pixelCoordinates = ol.geom.transformSimpleGeometry2D(multiPolygonGeometry, this.transform_, this.pixelCoordinates_); + var context = this.context_; + var endss = multiPolygonGeometry.getEndss(); + var offset = 0; + var i, ii; + for(i = 0, ii = endss.length;i < ii;++i) { + var ends = endss[i]; + context.beginPath(); + offset = this.drawRings_(pixelCoordinates, offset, ends); + if(!goog.isNull(this.fillState_)) { + context.fill() + } + if(!goog.isNull(this.strokeState_)) { + context.stroke() + } + } + } + if(this.text_ !== "") { + var flatInteriorPoints = multiPolygonGeometry.getFlatInteriorPoints(); + this.drawText_(flatInteriorPoints, 0, flatInteriorPoints.length, 2) + } +}; +ol.render.canvas.Immediate.prototype.drawText = goog.abstractMethod; +ol.render.canvas.Immediate.prototype.flush = function() { + var zs = goog.array.map(goog.object.getKeys(this.callbacksByZIndex_), Number); + goog.array.sort(zs); + var i, ii, callbacks, j, jj; + for(i = 0, ii = zs.length;i < ii;++i) { + callbacks = this.callbacksByZIndex_[zs[i].toString()]; + for(j = 0, jj = callbacks.length;j < jj;++j) { + callbacks[j](this) + } + } +}; +ol.render.canvas.Immediate.prototype.setContextFillState_ = function(fillState) { + var context = this.context_; + var contextFillState = this.contextFillState_; + if(goog.isNull(contextFillState)) { + context.fillStyle = fillState.fillStyle; + this.contextFillState_ = {fillStyle:fillState.fillStyle} + }else { + if(contextFillState.fillStyle != fillState.fillStyle) { + contextFillState.fillStyle = context.fillStyle = fillState.fillStyle + } + } +}; +ol.render.canvas.Immediate.prototype.setContextStrokeState_ = function(strokeState) { + var context = this.context_; + var contextStrokeState = this.contextStrokeState_; + if(goog.isNull(contextStrokeState)) { + context.lineCap = strokeState.lineCap; + if(ol.BrowserFeature.HAS_CANVAS_LINE_DASH) { + context.setLineDash(strokeState.lineDash) + } + context.lineJoin = strokeState.lineJoin; + context.lineWidth = strokeState.lineWidth; + context.miterLimit = strokeState.miterLimit; + context.strokeStyle = strokeState.strokeStyle; + this.contextStrokeState_ = {lineCap:strokeState.lineCap, lineDash:strokeState.lineDash, lineJoin:strokeState.lineJoin, lineWidth:strokeState.lineWidth, miterLimit:strokeState.miterLimit, strokeStyle:strokeState.strokeStyle} + }else { + if(contextStrokeState.lineCap != strokeState.lineCap) { + contextStrokeState.lineCap = context.lineCap = strokeState.lineCap + } + if(ol.BrowserFeature.HAS_CANVAS_LINE_DASH) { + if(!goog.array.equals(contextStrokeState.lineDash, strokeState.lineDash)) { + context.setLineDash(contextStrokeState.lineDash = strokeState.lineDash) + } + } + if(contextStrokeState.lineJoin != strokeState.lineJoin) { + contextStrokeState.lineJoin = context.lineJoin = strokeState.lineJoin + } + if(contextStrokeState.lineWidth != strokeState.lineWidth) { + contextStrokeState.lineWidth = context.lineWidth = strokeState.lineWidth + } + if(contextStrokeState.miterLimit != strokeState.miterLimit) { + contextStrokeState.miterLimit = context.miterLimit = strokeState.miterLimit + } + if(contextStrokeState.strokeStyle != strokeState.strokeStyle) { + contextStrokeState.strokeStyle = context.strokeStyle = strokeState.strokeStyle + } + } +}; +ol.render.canvas.Immediate.prototype.setContextTextState_ = function(textState) { + var context = this.context_; + var contextTextState = this.contextTextState_; + if(goog.isNull(contextTextState)) { + context.font = textState.font; + context.textAlign = textState.textAlign; + context.textBaseline = textState.textBaseline; + this.contextTextState_ = {font:textState.font, textAlign:textState.textAlign, textBaseline:textState.textBaseline} + }else { + if(contextTextState.font != textState.font) { + contextTextState.font = context.font = textState.font + } + if(contextTextState.textAlign != textState.textAlign) { + contextTextState.textAlign = context.textAlign = textState.textAlign + } + if(contextTextState.textBaseline != textState.textBaseline) { + contextTextState.textBaseline = context.textBaseline = textState.textBaseline + } + } +}; +ol.render.canvas.Immediate.prototype.setFillStrokeStyle = function(fillStyle, strokeStyle) { + if(goog.isNull(fillStyle)) { + this.fillState_ = null + }else { + var fillStyleColor = fillStyle.getColor(); + this.fillState_ = {fillStyle:ol.color.asString(!goog.isNull(fillStyleColor) ? fillStyleColor : ol.render.canvas.defaultFillStyle)} + } + if(goog.isNull(strokeStyle)) { + this.strokeState_ = null + }else { + var strokeStyleColor = strokeStyle.getColor(); + var strokeStyleLineCap = strokeStyle.getLineCap(); + var strokeStyleLineDash = strokeStyle.getLineDash(); + var strokeStyleLineJoin = strokeStyle.getLineJoin(); + var strokeStyleWidth = strokeStyle.getWidth(); + var strokeStyleMiterLimit = strokeStyle.getMiterLimit(); + this.strokeState_ = {lineCap:goog.isDef(strokeStyleLineCap) ? strokeStyleLineCap : ol.render.canvas.defaultLineCap, lineDash:goog.isDefAndNotNull(strokeStyleLineDash) ? strokeStyleLineDash : ol.render.canvas.defaultLineDash, lineJoin:goog.isDef(strokeStyleLineJoin) ? strokeStyleLineJoin : ol.render.canvas.defaultLineJoin, lineWidth:this.pixelRatio_ * (goog.isDef(strokeStyleWidth) ? strokeStyleWidth : ol.render.canvas.defaultLineWidth), miterLimit:goog.isDef(strokeStyleMiterLimit) ? strokeStyleMiterLimit : + ol.render.canvas.defaultMiterLimit, strokeStyle:ol.color.asString(!goog.isNull(strokeStyleColor) ? strokeStyleColor : ol.render.canvas.defaultStrokeStyle)} + } +}; +ol.render.canvas.Immediate.prototype.setImageStyle = function(imageStyle) { + if(goog.isNull(imageStyle)) { + this.image_ = null + }else { + var imageAnchor = imageStyle.getAnchor(); + var imageImage = imageStyle.getImage(1); + var imageOpacity = imageStyle.getOpacity(); + var imageRotateWithView = imageStyle.getRotateWithView(); + var imageRotation = imageStyle.getRotation(); + var imageScale = imageStyle.getScale(); + var imageSize = imageStyle.getSize(); + var imageSnapToPixel = imageStyle.getSnapToPixel(); + goog.asserts.assert(!goog.isNull(imageAnchor)); + goog.asserts.assert(!goog.isNull(imageImage)); + goog.asserts.assert(!goog.isNull(imageSize)); + this.imageAnchorX_ = imageAnchor[0]; + this.imageAnchorY_ = imageAnchor[1]; + this.imageHeight_ = imageSize[1]; + this.image_ = imageImage; + this.imageOpacity_ = goog.isDef(imageOpacity) ? imageOpacity : 1; + this.imageRotateWithView_ = goog.isDef(imageRotateWithView) ? imageRotateWithView : false; + this.imageRotation_ = goog.isDef(imageRotation) ? imageRotation : 0; + this.imageScale_ = goog.isDef(imageScale) ? imageScale : 1; + this.imageSnapToPixel_ = goog.isDef(imageSnapToPixel) ? imageSnapToPixel : false; + this.imageWidth_ = imageSize[0] + } +}; +ol.render.canvas.Immediate.prototype.setTextStyle = function(textStyle) { + if(goog.isNull(textStyle)) { + this.text_ = "" + }else { + var textFillStyle = textStyle.getFill(); + if(goog.isNull(textFillStyle)) { + this.textFillState_ = null + }else { + var textFillStyleColor = textFillStyle.getColor(); + this.textFillState_ = {fillStyle:ol.color.asString(!goog.isNull(textFillStyleColor) ? textFillStyleColor : ol.render.canvas.defaultFillStyle)} + } + var textStrokeStyle = textStyle.getStroke(); + if(goog.isNull(textStrokeStyle)) { + this.textStrokeState_ = null + }else { + var textStrokeStyleColor = textStrokeStyle.getColor(); + var textStrokeStyleLineCap = textStrokeStyle.getLineCap(); + var textStrokeStyleLineDash = textStrokeStyle.getLineDash(); + var textStrokeStyleLineJoin = textStrokeStyle.getLineJoin(); + var textStrokeStyleWidth = textStrokeStyle.getWidth(); + var textStrokeStyleMiterLimit = textStrokeStyle.getMiterLimit(); + this.textStrokeState_ = {lineCap:goog.isDef(textStrokeStyleLineCap) ? textStrokeStyleLineCap : ol.render.canvas.defaultLineCap, lineDash:goog.isDefAndNotNull(textStrokeStyleLineDash) ? textStrokeStyleLineDash : ol.render.canvas.defaultLineDash, lineJoin:goog.isDef(textStrokeStyleLineJoin) ? textStrokeStyleLineJoin : ol.render.canvas.defaultLineJoin, lineWidth:this.pixelRatio_ * (goog.isDef(textStrokeStyleWidth) ? textStrokeStyleWidth : ol.render.canvas.defaultLineWidth), miterLimit:goog.isDef(textStrokeStyleMiterLimit) ? + textStrokeStyleMiterLimit : ol.render.canvas.defaultMiterLimit, strokeStyle:ol.color.asString(!goog.isNull(textStrokeStyleColor) ? textStrokeStyleColor : ol.render.canvas.defaultStrokeStyle)} + } + var textFont = textStyle.getFont(); + var textRotation = textStyle.getRotation(); + var textScale = textStyle.getScale(); + var textText = textStyle.getText(); + var textTextAlign = textStyle.getTextAlign(); + var textTextBaseline = textStyle.getTextBaseline(); + this.textState_ = {font:goog.isDef(textFont) ? textFont : ol.render.canvas.defaultFont, textAlign:goog.isDef(textTextAlign) ? textTextAlign : ol.render.canvas.defaultTextAlign, textBaseline:goog.isDef(textTextBaseline) ? textTextBaseline : ol.render.canvas.defaultTextBaseline}; + this.text_ = goog.isDef(textText) ? textText : ""; + this.textRotation_ = goog.isDef(textRotation) ? textRotation : 0; + this.textScale_ = this.pixelRatio_ * (goog.isDef(textScale) ? textScale : 1) + } +}; +ol.render.canvas.Immediate.GEOMETRY_RENDERES_ = {"Point":ol.render.canvas.Immediate.prototype.drawPointGeometry, "LineString":ol.render.canvas.Immediate.prototype.drawLineStringGeometry, "Polygon":ol.render.canvas.Immediate.prototype.drawPolygonGeometry, "MultiPoint":ol.render.canvas.Immediate.prototype.drawMultiPointGeometry, "MultiLineString":ol.render.canvas.Immediate.prototype.drawMultiLineStringGeometry, "MultiPolygon":ol.render.canvas.Immediate.prototype.drawMultiPolygonGeometry, "GeometryCollection":ol.render.canvas.Immediate.prototype.drawGeometryCollectionGeometry, +"Circle":ol.render.canvas.Immediate.prototype.drawCircleGeometry}; +goog.provide("ol.renderer.canvas.Layer"); +goog.require("goog.vec.Mat4"); +goog.require("ol.layer.Layer"); +goog.require("ol.render.Event"); +goog.require("ol.render.EventType"); +goog.require("ol.render.canvas.Immediate"); +goog.require("ol.renderer.Layer"); +goog.require("ol.vec.Mat4"); +ol.renderer.canvas.Layer = function(mapRenderer, layer) { + goog.base(this, mapRenderer, layer); + this.transform_ = goog.vec.Mat4.createNumber() +}; +goog.inherits(ol.renderer.canvas.Layer, ol.renderer.Layer); +ol.renderer.canvas.Layer.prototype.composeFrame = function(frameState, layerState, context) { + this.dispatchPreComposeEvent(context, frameState); + var image = this.getImage(); + if(!goog.isNull(image)) { + var imageTransform = this.getImageTransform(); + context.globalAlpha = layerState.opacity; + if(frameState.view2DState.rotation === 0) { + var dx = goog.vec.Mat4.getElement(imageTransform, 0, 3); + var dy = goog.vec.Mat4.getElement(imageTransform, 1, 3); + var dw = image.width * goog.vec.Mat4.getElement(imageTransform, 0, 0); + var dh = image.height * goog.vec.Mat4.getElement(imageTransform, 1, 1); + context.drawImage(image, 0, 0, +image.width, +image.height, Math.round(dx), Math.round(dy), Math.round(dw), Math.round(dh)) + }else { + context.setTransform(goog.vec.Mat4.getElement(imageTransform, 0, 0), goog.vec.Mat4.getElement(imageTransform, 1, 0), goog.vec.Mat4.getElement(imageTransform, 0, 1), goog.vec.Mat4.getElement(imageTransform, 1, 1), goog.vec.Mat4.getElement(imageTransform, 0, 3), goog.vec.Mat4.getElement(imageTransform, 1, 3)); + context.drawImage(image, 0, 0); + context.setTransform(1, 0, 0, 1, 0, 0) + } + } + this.dispatchPostComposeEvent(context, frameState) +}; +ol.renderer.canvas.Layer.prototype.dispatchComposeEvent_ = function(type, context, frameState, opt_transform) { + var layer = this.getLayer(); + if(layer.hasListener(type)) { + var transform = goog.isDef(opt_transform) ? opt_transform : this.getTransform(frameState); + var render = new ol.render.canvas.Immediate(context, frameState.pixelRatio, frameState.extent, transform, frameState.view2DState.rotation); + var composeEvent = new ol.render.Event(type, layer, render, frameState, context, null); + layer.dispatchEvent(composeEvent); + render.flush() + } +}; +ol.renderer.canvas.Layer.prototype.dispatchPostComposeEvent = function(context, frameState, opt_transform) { + this.dispatchComposeEvent_(ol.render.EventType.POSTCOMPOSE, context, frameState, opt_transform) +}; +ol.renderer.canvas.Layer.prototype.dispatchPreComposeEvent = function(context, frameState, opt_transform) { + this.dispatchComposeEvent_(ol.render.EventType.PRECOMPOSE, context, frameState, opt_transform) +}; +ol.renderer.canvas.Layer.prototype.dispatchRenderEvent = function(context, frameState, opt_transform) { + this.dispatchComposeEvent_(ol.render.EventType.RENDER, context, frameState, opt_transform) +}; +ol.renderer.canvas.Layer.prototype.getImage = goog.abstractMethod; +ol.renderer.canvas.Layer.prototype.getImageTransform = goog.abstractMethod; +ol.renderer.canvas.Layer.prototype.getTransform = function(frameState) { + var view2DState = frameState.view2DState; + var pixelRatio = frameState.pixelRatio; + return ol.vec.Mat4.makeTransform2D(this.transform_, pixelRatio * frameState.size[0] / 2, pixelRatio * frameState.size[1] / 2, pixelRatio / view2DState.resolution, -pixelRatio / view2DState.resolution, -view2DState.rotation, -view2DState.center[0], -view2DState.center[1]) +}; +goog.provide("ol.source.Image"); +goog.require("goog.array"); +goog.require("goog.asserts"); +goog.require("ol.Attribution"); +goog.require("ol.Extent"); +goog.require("ol.Image"); +goog.require("ol.array"); +goog.require("ol.source.Source"); +ol.source.ImageOptions; +ol.source.Image = function(options) { + goog.base(this, {attributions:options.attributions, extent:options.extent, logo:options.logo, projection:options.projection, state:options.state}); + this.resolutions_ = goog.isDef(options.resolutions) ? options.resolutions : null; + goog.asserts.assert(goog.isNull(this.resolutions_) || goog.array.isSorted(this.resolutions_, function(a, b) { + return b - a + }, true)) +}; +goog.inherits(ol.source.Image, ol.source.Source); +ol.source.Image.prototype.getResolutions = function() { + return this.resolutions_ +}; +ol.source.Image.prototype.findNearestResolution = function(resolution) { + if(!goog.isNull(this.resolutions_)) { + var idx = ol.array.linearFindNearest(this.resolutions_, resolution, 0); + resolution = this.resolutions_[idx] + } + return resolution +}; +ol.source.Image.prototype.getImage = goog.abstractMethod; +goog.provide("ol.renderer.canvas.ImageLayer"); +goog.require("goog.asserts"); +goog.require("goog.events"); +goog.require("goog.events.EventType"); +goog.require("goog.vec.Mat4"); +goog.require("ol.ImageBase"); +goog.require("ol.ImageState"); +goog.require("ol.ViewHint"); +goog.require("ol.layer.Image"); +goog.require("ol.renderer.Map"); +goog.require("ol.renderer.canvas.Layer"); +goog.require("ol.source.Image"); +goog.require("ol.vec.Mat4"); +ol.renderer.canvas.ImageLayer = function(mapRenderer, imageLayer) { + goog.base(this, mapRenderer, imageLayer); + this.image_ = null; + this.imageTransform_ = goog.vec.Mat4.createNumber() +}; +goog.inherits(ol.renderer.canvas.ImageLayer, ol.renderer.canvas.Layer); +ol.renderer.canvas.ImageLayer.prototype.forEachFeatureAtPixel = function(coordinate, frameState, callback, thisArg) { + var layer = this.getLayer(); + var source = layer.getSource(); + goog.asserts.assertInstanceof(source, ol.source.Image); + var extent = frameState.extent; + var resolution = frameState.view2DState.resolution; + var rotation = frameState.view2DState.rotation; + return source.forEachFeatureAtPixel(extent, resolution, rotation, coordinate, function(feature) { + return callback.call(thisArg, feature, layer) + }) +}; +ol.renderer.canvas.ImageLayer.prototype.getImage = function() { + return goog.isNull(this.image_) ? null : this.image_.getImageElement() +}; +ol.renderer.canvas.ImageLayer.prototype.getImageTransform = function() { + return this.imageTransform_ +}; +ol.renderer.canvas.ImageLayer.prototype.prepareFrame = function(frameState, layerState) { + var pixelRatio = frameState.pixelRatio; + var view2DState = frameState.view2DState; + var viewCenter = view2DState.center; + var viewResolution = view2DState.resolution; + var viewRotation = view2DState.rotation; + var image; + var imageLayer = this.getLayer(); + goog.asserts.assertInstanceof(imageLayer, ol.layer.Image); + var imageSource = imageLayer.getSource(); + goog.asserts.assertInstanceof(imageSource, ol.source.Image); + var hints = frameState.viewHints; + if(!hints[ol.ViewHint.ANIMATING] && !hints[ol.ViewHint.INTERACTING]) { + image = imageSource.getImage(frameState.extent, viewResolution, pixelRatio, view2DState.projection); + if(!goog.isNull(image)) { + var imageState = image.getState(); + if(imageState == ol.ImageState.IDLE) { + goog.events.listenOnce(image, goog.events.EventType.CHANGE, this.handleImageChange, false, this); + image.load() + }else { + if(imageState == ol.ImageState.LOADED) { + this.image_ = image + } + } + } + } + if(!goog.isNull(this.image_)) { + image = this.image_; + var imageExtent = image.getExtent(); + var imageResolution = image.getResolution(); + var imagePixelRatio = image.getPixelRatio(); + var scale = pixelRatio * imageResolution / (viewResolution * imagePixelRatio); + ol.vec.Mat4.makeTransform2D(this.imageTransform_, pixelRatio * frameState.size[0] / 2, pixelRatio * frameState.size[1] / 2, scale, scale, viewRotation, imagePixelRatio * (imageExtent[0] - viewCenter[0]) / imageResolution, imagePixelRatio * (viewCenter[1] - imageExtent[3]) / imageResolution); + this.updateAttributions(frameState.attributions, image.getAttributions()); + this.updateLogos(frameState, imageSource) + } +}; +goog.provide("ol.renderer.canvas.TileLayer"); +goog.require("goog.array"); +goog.require("goog.asserts"); +goog.require("goog.dom"); +goog.require("goog.dom.TagName"); +goog.require("goog.object"); +goog.require("goog.vec.Mat4"); +goog.require("ol.Size"); +goog.require("ol.Tile"); +goog.require("ol.TileCoord"); +goog.require("ol.TileRange"); +goog.require("ol.TileState"); +goog.require("ol.extent"); +goog.require("ol.layer.Tile"); +goog.require("ol.renderer.Map"); +goog.require("ol.renderer.canvas.Layer"); +goog.require("ol.source.Tile"); +goog.require("ol.vec.Mat4"); +ol.renderer.canvas.TileLayer = function(mapRenderer, tileLayer) { + goog.base(this, mapRenderer, tileLayer); + this.canvas_ = null; + this.canvasSize_ = null; + this.context_ = null; + this.imageTransform_ = goog.vec.Mat4.createNumber(); + this.renderedCanvasZ_ = NaN; + this.renderedCanvasTileRange_ = null; + this.renderedTiles_ = null +}; +goog.inherits(ol.renderer.canvas.TileLayer, ol.renderer.canvas.Layer); +ol.renderer.canvas.TileLayer.prototype.getImage = function() { + return this.canvas_ +}; +ol.renderer.canvas.TileLayer.prototype.getImageTransform = function() { + return this.imageTransform_ +}; +ol.renderer.canvas.TileLayer.prototype.prepareFrame = function(frameState, layerState) { + var pixelRatio = frameState.pixelRatio; + var view2DState = frameState.view2DState; + var projection = view2DState.projection; + var tileLayer = this.getLayer(); + goog.asserts.assertInstanceof(tileLayer, ol.layer.Tile); + var tileSource = tileLayer.getSource(); + goog.asserts.assertInstanceof(tileSource, ol.source.Tile); + var tileGrid = tileSource.getTileGridForProjection(projection); + var tileGutter = tileSource.getGutter(); + var z = tileGrid.getZForResolution(view2DState.resolution); + var tilePixelSize = tileSource.getTilePixelSize(z, frameState.pixelRatio, projection); + var tilePixelRatio = tilePixelSize / tileGrid.getTileSize(z); + var tileResolution = tileGrid.getResolution(z); + var tilePixelResolution = tileResolution / tilePixelRatio; + var center = view2DState.center; + var extent; + if(tileResolution == view2DState.resolution) { + center = this.snapCenterToPixel(center, tileResolution, frameState.size); + extent = ol.extent.getForView2DAndSize(center, tileResolution, view2DState.rotation, frameState.size) + }else { + extent = frameState.extent + } + var tileRange = tileGrid.getTileRangeForExtentAndResolution(extent, tileResolution); + var canvasWidth = tilePixelSize * tileRange.getWidth(); + var canvasHeight = tilePixelSize * tileRange.getHeight(); + var canvas, context; + if(goog.isNull(this.canvas_)) { + goog.asserts.assert(goog.isNull(this.canvasSize_)); + goog.asserts.assert(goog.isNull(this.context_)); + goog.asserts.assert(goog.isNull(this.renderedCanvasTileRange_)); + canvas = (goog.dom.createElement(goog.dom.TagName.CANVAS)); + canvas.width = canvasWidth; + canvas.height = canvasHeight; + context = (canvas.getContext("2d")); + this.canvas_ = canvas; + this.canvasSize_ = [canvasWidth, canvasHeight]; + this.context_ = context + }else { + goog.asserts.assert(!goog.isNull(this.canvasSize_)); + goog.asserts.assert(!goog.isNull(this.context_)); + canvas = this.canvas_; + context = this.context_; + if(this.canvasSize_[0] < canvasWidth || this.canvasSize_[1] < canvasHeight) { + canvas.width = canvasWidth; + canvas.height = canvasHeight; + this.canvasSize_ = [canvasWidth, canvasHeight]; + this.renderedCanvasTileRange_ = null + }else { + canvasWidth = this.canvasSize_[0]; + canvasHeight = this.canvasSize_[1]; + if(z != this.renderedCanvasZ_ || !this.renderedCanvasTileRange_.containsTileRange(tileRange)) { + this.renderedCanvasTileRange_ = null + } + } + } + var canvasTileRange, canvasTileRangeWidth, minX, minY; + if(goog.isNull(this.renderedCanvasTileRange_)) { + canvasTileRangeWidth = canvasWidth / tilePixelSize; + var canvasTileRangeHeight = canvasHeight / tilePixelSize; + minX = tileRange.minX - Math.floor((canvasTileRangeWidth - tileRange.getWidth()) / 2); + minY = tileRange.minY - Math.floor((canvasTileRangeHeight - tileRange.getHeight()) / 2); + this.renderedCanvasZ_ = z; + this.renderedCanvasTileRange_ = new ol.TileRange(minX, minX + canvasTileRangeWidth - 1, minY, minY + canvasTileRangeHeight - 1); + this.renderedTiles_ = new Array(canvasTileRangeWidth * canvasTileRangeHeight); + canvasTileRange = this.renderedCanvasTileRange_ + }else { + canvasTileRange = this.renderedCanvasTileRange_; + canvasTileRangeWidth = canvasTileRange.getWidth() + } + goog.asserts.assert(canvasTileRange.containsTileRange(tileRange)); + var tilesToDrawByZ = {}; + tilesToDrawByZ[z] = {}; + var tilesToClear = []; + var getTileIfLoaded = this.createGetTileIfLoadedFunction(function(tile) { + return!goog.isNull(tile) && tile.getState() == ol.TileState.LOADED + }, tileSource, pixelRatio, projection); + var findLoadedTiles = goog.bind(tileSource.findLoadedTiles, tileSource, tilesToDrawByZ, getTileIfLoaded); + var useInterimTilesOnError = tileLayer.getUseInterimTilesOnError(); + if(!goog.isDef(useInterimTilesOnError)) { + useInterimTilesOnError = true + } + var tmpExtent = ol.extent.createEmpty(); + var tmpTileRange = new ol.TileRange(0, 0, 0, 0); + var childTileRange, fullyLoaded, tile, tileState, x, y; + for(x = tileRange.minX;x <= tileRange.maxX;++x) { + for(y = tileRange.minY;y <= tileRange.maxY;++y) { + tile = tileSource.getTile(z, x, y, pixelRatio, projection); + tileState = tile.getState(); + if(tileState == ol.TileState.LOADED || tileState == ol.TileState.EMPTY || tileState == ol.TileState.ERROR && !useInterimTilesOnError) { + tilesToDrawByZ[z][tile.tileCoord.toString()] = tile; + continue + } + fullyLoaded = tileGrid.forEachTileCoordParentTileRange(tile.tileCoord, findLoadedTiles, null, tmpTileRange, tmpExtent); + if(!fullyLoaded) { + tilesToClear.push(tile); + childTileRange = tileGrid.getTileCoordChildTileRange(tile.tileCoord, tmpTileRange, tmpExtent); + if(!goog.isNull(childTileRange)) { + findLoadedTiles(z + 1, childTileRange) + } + } + } + } + var i, ii; + for(i = 0, ii = tilesToClear.length;i < ii;++i) { + tile = tilesToClear[i]; + x = tilePixelSize * (tile.tileCoord.x - canvasTileRange.minX); + y = tilePixelSize * (canvasTileRange.maxY - tile.tileCoord.y); + context.clearRect(x, y, tilePixelSize, tilePixelSize) + } + var zs = goog.array.map(goog.object.getKeys(tilesToDrawByZ), Number); + goog.array.sort(zs); + var opaque = tileSource.getOpaque(); + var origin = ol.extent.getTopLeft(tileGrid.getTileCoordExtent(new ol.TileCoord(z, canvasTileRange.minX, canvasTileRange.maxY), tmpExtent)); + var currentZ, index, scale, tileCoordKey, tileExtent, tilesToDraw; + var ix, iy, interimTileExtent, interimTileRange, maxX, maxY; + var height, width; + for(i = 0, ii = zs.length;i < ii;++i) { + currentZ = zs[i]; + tilePixelSize = tileSource.getTilePixelSize(currentZ, pixelRatio, projection); + tilesToDraw = tilesToDrawByZ[currentZ]; + if(currentZ == z) { + for(tileCoordKey in tilesToDraw) { + tile = tilesToDraw[tileCoordKey]; + index = (tile.tileCoord.y - canvasTileRange.minY) * canvasTileRangeWidth + (tile.tileCoord.x - canvasTileRange.minX); + if(this.renderedTiles_[index] != tile) { + x = tilePixelSize * (tile.tileCoord.x - canvasTileRange.minX); + y = tilePixelSize * (canvasTileRange.maxY - tile.tileCoord.y); + tileState = tile.getState(); + if(tileState == ol.TileState.EMPTY || tileState == ol.TileState.ERROR && !useInterimTilesOnError || !opaque) { + context.clearRect(x, y, tilePixelSize, tilePixelSize) + } + if(tileState == ol.TileState.LOADED) { + context.drawImage(tile.getImage(), tileGutter, tileGutter, tilePixelSize, tilePixelSize, x, y, tilePixelSize, tilePixelSize) + } + this.renderedTiles_[index] = tile + } + } + }else { + scale = tileGrid.getResolution(currentZ) / tileResolution; + for(tileCoordKey in tilesToDraw) { + tile = tilesToDraw[tileCoordKey]; + tileExtent = tileGrid.getTileCoordExtent(tile.tileCoord, tmpExtent); + x = (tileExtent[0] - origin[0]) / tilePixelResolution; + y = (origin[1] - tileExtent[3]) / tilePixelResolution; + width = scale * tilePixelSize; + height = scale * tilePixelSize; + tileState = tile.getState(); + if(tileState == ol.TileState.EMPTY || !opaque) { + context.clearRect(x, y, width, height) + } + if(tileState == ol.TileState.LOADED) { + context.drawImage(tile.getImage(), tileGutter, tileGutter, tilePixelSize, tilePixelSize, x, y, width, height) + } + interimTileRange = tileGrid.getTileRangeForExtentAndZ(tileExtent, z, tmpTileRange); + minX = Math.max(interimTileRange.minX, canvasTileRange.minX); + maxX = Math.min(interimTileRange.maxX, canvasTileRange.maxX); + minY = Math.max(interimTileRange.minY, canvasTileRange.minY); + maxY = Math.min(interimTileRange.maxY, canvasTileRange.maxY); + for(ix = minX;ix <= maxX;++ix) { + for(iy = minY;iy <= maxY;++iy) { + index = (iy - canvasTileRange.minY) * canvasTileRangeWidth + (ix - canvasTileRange.minX); + this.renderedTiles_[index] = undefined + } + } + } + } + } + this.updateUsedTiles(frameState.usedTiles, tileSource, z, tileRange); + this.manageTilePyramid(frameState, tileSource, tileGrid, pixelRatio, projection, extent, z, tileLayer.getPreload()); + this.scheduleExpireCache(frameState, tileSource); + this.updateLogos(frameState, tileSource); + ol.vec.Mat4.makeTransform2D(this.imageTransform_, pixelRatio * frameState.size[0] / 2, pixelRatio * frameState.size[1] / 2, pixelRatio * tilePixelResolution / view2DState.resolution, pixelRatio * tilePixelResolution / view2DState.resolution, view2DState.rotation, (origin[0] - center[0]) / tilePixelResolution, (center[1] - origin[1]) / tilePixelResolution) +}; +goog.provide("ol.render.IReplayGroup"); +goog.require("goog.functions"); +goog.require("ol.render.IVectorContext"); +ol.render.ReplayType = {IMAGE:"Image", LINE_STRING:"LineString", POLYGON:"Polygon", TEXT:"Text"}; +ol.render.REPLAY_ORDER = [ol.render.ReplayType.POLYGON, ol.render.ReplayType.LINE_STRING, ol.render.ReplayType.IMAGE, ol.render.ReplayType.TEXT]; +ol.render.IReplayGroup = function() { +}; +ol.render.IReplayGroup.prototype.finish = function() { +}; +ol.render.IReplayGroup.prototype.getReplay = function(zIndex, replayType) { +}; +ol.render.IReplayGroup.prototype.isEmpty = function() { +}; +goog.provide("ol.render.canvas.ReplayGroup"); +goog.require("goog.array"); +goog.require("goog.asserts"); +goog.require("goog.dom"); +goog.require("goog.dom.TagName"); +goog.require("goog.object"); +goog.require("goog.vec.Mat4"); +goog.require("ol.BrowserFeature"); +goog.require("ol.array"); +goog.require("ol.color"); +goog.require("ol.extent"); +goog.require("ol.extent.Relationship"); +goog.require("ol.geom.flat"); +goog.require("ol.geom.simplify"); +goog.require("ol.render.IReplayGroup"); +goog.require("ol.render.IVectorContext"); +goog.require("ol.render.canvas"); +goog.require("ol.vec.Mat4"); +ol.render.canvas.Instruction = {BEGIN_GEOMETRY:0, BEGIN_PATH:1, CIRCLE:2, CLOSE_PATH:3, DRAW_IMAGE:4, DRAW_TEXT:5, END_GEOMETRY:6, FILL:7, MOVE_TO_LINE_TO:8, SET_FILL_STYLE:9, SET_STROKE_STYLE:10, SET_TEXT_STYLE:11, STROKE:12}; +ol.render.canvas.Replay = function(tolerance, maxExtent) { + this.tolerance = tolerance; + this.maxExtent = maxExtent; + this.beginGeometryInstruction1_ = null; + this.beginGeometryInstruction2_ = null; + this.instructions = []; + this.coordinates = []; + this.renderedTransform_ = goog.vec.Mat4.createNumber(); + this.hitDetectionInstructions = []; + this.pixelCoordinates_ = []; + this.extent_ = ol.extent.createEmpty(); + this.tmpLocalTransform_ = goog.vec.Mat4.createNumber() +}; +ol.render.canvas.Replay.prototype.appendFlatCoordinates = function(flatCoordinates, offset, end, stride, close) { + var myEnd = this.coordinates.length; + var extent = this.maxExtent; + var lastCoord = [flatCoordinates[offset], flatCoordinates[offset + 1]]; + var nextCoord = [NaN, NaN]; + var skipped = true; + var i, lastRel, nextRel; + for(i = offset + stride;i < end;i += stride) { + nextCoord[0] = flatCoordinates[i]; + nextCoord[1] = flatCoordinates[i + 1]; + nextRel = ol.extent.coordinateRelationship(extent, nextCoord); + if(nextRel !== lastRel) { + if(skipped) { + this.coordinates[myEnd++] = lastCoord[0]; + this.coordinates[myEnd++] = lastCoord[1] + } + this.coordinates[myEnd++] = nextCoord[0]; + this.coordinates[myEnd++] = nextCoord[1]; + skipped = false + }else { + if(nextRel === ol.extent.Relationship.INTERSECTING) { + this.coordinates[myEnd++] = nextCoord[0]; + this.coordinates[myEnd++] = nextCoord[1]; + skipped = false + }else { + skipped = true + } + } + lastCoord[0] = nextCoord[0]; + lastCoord[1] = nextCoord[1]; + lastRel = nextRel + } + if(close) { + this.coordinates[myEnd++] = flatCoordinates[offset]; + this.coordinates[myEnd++] = flatCoordinates[offset + 1] + } + return myEnd +}; +ol.render.canvas.Replay.prototype.beginGeometry = function(geometry) { + this.beginGeometryInstruction1_ = [ol.render.canvas.Instruction.BEGIN_GEOMETRY, geometry, 0]; + this.instructions.push(this.beginGeometryInstruction1_); + this.beginGeometryInstruction2_ = [ol.render.canvas.Instruction.BEGIN_GEOMETRY, geometry, 0]; + this.hitDetectionInstructions.push(this.beginGeometryInstruction2_) +}; +ol.render.canvas.Replay.prototype.replay_ = function(context, pixelRatio, transform, viewRotation, renderGeometryFunction, instructions, geometryCallback) { + var pixelCoordinates; + if(ol.vec.Mat4.equals2D(transform, this.renderedTransform_)) { + pixelCoordinates = this.pixelCoordinates_ + }else { + pixelCoordinates = ol.geom.flat.transform2D(this.coordinates, 2, transform, this.pixelCoordinates_); + goog.vec.Mat4.setFromArray(this.renderedTransform_, transform); + goog.asserts.assert(pixelCoordinates === this.pixelCoordinates_) + } + var i = 0; + var ii = instructions.length; + var d = 0; + var dd; + var localTransform = this.tmpLocalTransform_; + while(i < ii) { + var instruction = instructions[i]; + var type = (instruction[0]); + var fill, geometry, stroke, text, x, y; + switch(type) { + case ol.render.canvas.Instruction.BEGIN_GEOMETRY: + geometry = (instruction[1]); + if(renderGeometryFunction(geometry)) { + ++i + }else { + i = (instruction[2]) + } + break; + case ol.render.canvas.Instruction.BEGIN_PATH: + context.beginPath(); + ++i; + break; + case ol.render.canvas.Instruction.CIRCLE: + var x1 = pixelCoordinates[d]; + var y1 = pixelCoordinates[d + 1]; + var x2 = pixelCoordinates[d + 2]; + var y2 = pixelCoordinates[d + 3]; + var dx = x2 - x1; + var dy = y2 - y1; + var r = Math.sqrt(dx * dx + dy * dy); + context.arc(x1, y1, r, 0, 2 * Math.PI, true); + d += 4; + ++i; + break; + case ol.render.canvas.Instruction.CLOSE_PATH: + context.closePath(); + ++i; + break; + case ol.render.canvas.Instruction.DRAW_IMAGE: + goog.asserts.assert(goog.isNumber(instruction[1])); + d = (instruction[1]); + goog.asserts.assert(goog.isNumber(instruction[2])); + dd = (instruction[2]); + var image = (instruction[3]); + var anchorX = (instruction[4]) * pixelRatio; + var anchorY = (instruction[5]) * pixelRatio; + var height = (instruction[6]) * pixelRatio; + var opacity = (instruction[7]); + var rotateWithView = (instruction[8]); + var rotation = (instruction[9]); + var scale = (instruction[10]); + var snapToPixel = (instruction[11]); + var width = (instruction[12]) * pixelRatio; + if(rotateWithView) { + rotation += viewRotation + } + for(;d < dd;d += 2) { + x = pixelCoordinates[d] - anchorX; + y = pixelCoordinates[d + 1] - anchorY; + if(snapToPixel) { + x = x + 0.5 | 0; + y = y + 0.5 | 0 + } + if(scale != 1 || rotation !== 0) { + var centerX = x + anchorX; + var centerY = y + anchorY; + ol.vec.Mat4.makeTransform2D(localTransform, centerX, centerY, scale, scale, rotation, -centerX, -centerY); + context.setTransform(goog.vec.Mat4.getElement(localTransform, 0, 0), goog.vec.Mat4.getElement(localTransform, 1, 0), goog.vec.Mat4.getElement(localTransform, 0, 1), goog.vec.Mat4.getElement(localTransform, 1, 1), goog.vec.Mat4.getElement(localTransform, 0, 3), goog.vec.Mat4.getElement(localTransform, 1, 3)) + } + var alpha = context.globalAlpha; + if(opacity != 1) { + context.globalAlpha = alpha * opacity + } + context.drawImage(image, x, y, width, height); + if(opacity != 1) { + context.globalAlpha = alpha + } + if(scale != 1 || rotation !== 0) { + context.setTransform(1, 0, 0, 1, 0, 0) + } + } + ++i; + break; + case ol.render.canvas.Instruction.DRAW_TEXT: + goog.asserts.assert(goog.isNumber(instruction[1])); + d = (instruction[1]); + goog.asserts.assert(goog.isNumber(instruction[2])); + dd = (instruction[2]); + goog.asserts.assert(goog.isString(instruction[3])); + text = (instruction[3]); + goog.asserts.assert(goog.isNumber(instruction[4])); + rotation = (instruction[4]); + goog.asserts.assert(goog.isNumber(instruction[5])); + scale = (instruction[5]) * pixelRatio; + goog.asserts.assert(goog.isBoolean(instruction[6])); + fill = (instruction[6]); + goog.asserts.assert(goog.isBoolean(instruction[7])); + stroke = (instruction[7]); + for(;d < dd;d += 2) { + x = pixelCoordinates[d]; + y = pixelCoordinates[d + 1]; + if(scale != 1 || rotation !== 0) { + ol.vec.Mat4.makeTransform2D(localTransform, x, y, scale, scale, rotation, -x, -y); + context.setTransform(goog.vec.Mat4.getElement(localTransform, 0, 0), goog.vec.Mat4.getElement(localTransform, 1, 0), goog.vec.Mat4.getElement(localTransform, 0, 1), goog.vec.Mat4.getElement(localTransform, 1, 1), goog.vec.Mat4.getElement(localTransform, 0, 3), goog.vec.Mat4.getElement(localTransform, 1, 3)) + } + if(stroke) { + context.strokeText(text, x, y) + } + if(fill) { + context.fillText(text, x, y) + } + if(scale != 1 || rotation !== 0) { + context.setTransform(1, 0, 0, 1, 0, 0) + } + } + ++i; + break; + case ol.render.canvas.Instruction.END_GEOMETRY: + if(goog.isDef(geometryCallback)) { + geometry = (instruction[1]); + var data = (instruction[2]); + var result = geometryCallback(geometry, data); + if(result) { + return result + } + } + ++i; + break; + case ol.render.canvas.Instruction.FILL: + context.fill(); + ++i; + break; + case ol.render.canvas.Instruction.MOVE_TO_LINE_TO: + goog.asserts.assert(goog.isNumber(instruction[1])); + d = (instruction[1]); + goog.asserts.assert(goog.isNumber(instruction[2])); + dd = (instruction[2]); + context.moveTo(pixelCoordinates[d], pixelCoordinates[d + 1]); + for(d += 2;d < dd;d += 2) { + context.lineTo(pixelCoordinates[d], pixelCoordinates[d + 1]) + } + ++i; + break; + case ol.render.canvas.Instruction.SET_FILL_STYLE: + goog.asserts.assert(goog.isString(instruction[1])); + context.fillStyle = (instruction[1]); + ++i; + break; + case ol.render.canvas.Instruction.SET_STROKE_STYLE: + goog.asserts.assert(goog.isString(instruction[1])); + goog.asserts.assert(goog.isNumber(instruction[2])); + goog.asserts.assert(goog.isString(instruction[3])); + goog.asserts.assert(goog.isString(instruction[4])); + goog.asserts.assert(goog.isNumber(instruction[5])); + goog.asserts.assert(!goog.isNull(instruction[6])); + context.strokeStyle = (instruction[1]); + context.lineWidth = (instruction[2]) * pixelRatio; + context.lineCap = (instruction[3]); + context.lineJoin = (instruction[4]); + context.miterLimit = (instruction[5]); + if(ol.BrowserFeature.HAS_CANVAS_LINE_DASH) { + context.setLineDash((instruction[6])) + } + ++i; + break; + case ol.render.canvas.Instruction.SET_TEXT_STYLE: + goog.asserts.assert(goog.isString(instruction[1])); + goog.asserts.assert(goog.isString(instruction[2])); + goog.asserts.assert(goog.isString(instruction[3])); + context.font = (instruction[1]); + context.textAlign = (instruction[2]); + context.textBaseline = (instruction[3]); + ++i; + break; + case ol.render.canvas.Instruction.STROKE: + context.stroke(); + ++i; + break; + default: + goog.asserts.fail(); + ++i; + break + } + } + goog.asserts.assert(i == instructions.length); + return undefined +}; +ol.render.canvas.Replay.prototype.replay = function(context, pixelRatio, transform, viewRotation, renderGeometryFunction) { + var instructions = this.instructions; + return this.replay_(context, pixelRatio, transform, viewRotation, renderGeometryFunction, instructions, undefined) +}; +ol.render.canvas.Replay.prototype.replayHitDetection = function(context, transform, viewRotation, renderGeometryFunction, opt_geometryCallback) { + var instructions = this.hitDetectionInstructions; + return this.replay_(context, 1, transform, viewRotation, renderGeometryFunction, instructions, opt_geometryCallback) +}; +ol.render.canvas.Replay.prototype.reverseHitDetectionInstructions_ = function() { + var hitDetectionInstructions = this.hitDetectionInstructions; + hitDetectionInstructions.reverse(); + var i; + var n = hitDetectionInstructions.length; + var instruction; + var type; + var begin = -1; + for(i = 0;i < n;++i) { + instruction = hitDetectionInstructions[i]; + type = (instruction[0]); + if(type == ol.render.canvas.Instruction.END_GEOMETRY) { + goog.asserts.assert(begin == -1); + begin = i + }else { + if(type == ol.render.canvas.Instruction.BEGIN_GEOMETRY) { + goog.asserts.assert(begin >= 0); + ol.array.reverseSubArray(this.hitDetectionInstructions, begin, i); + begin = -1 + } + } + } +}; +ol.render.canvas.Replay.prototype.drawAsync = goog.abstractMethod; +ol.render.canvas.Replay.prototype.drawCircleGeometry = goog.abstractMethod; +ol.render.canvas.Replay.prototype.drawFeature = goog.abstractMethod; +ol.render.canvas.Replay.prototype.drawGeometryCollectionGeometry = goog.abstractMethod; +ol.render.canvas.Replay.prototype.drawLineStringGeometry = goog.abstractMethod; +ol.render.canvas.Replay.prototype.drawMultiLineStringGeometry = goog.abstractMethod; +ol.render.canvas.Replay.prototype.drawPointGeometry = goog.abstractMethod; +ol.render.canvas.Replay.prototype.drawMultiPointGeometry = goog.abstractMethod; +ol.render.canvas.Replay.prototype.drawPolygonGeometry = goog.abstractMethod; +ol.render.canvas.Replay.prototype.drawMultiPolygonGeometry = goog.abstractMethod; +ol.render.canvas.Replay.prototype.drawText = goog.abstractMethod; +ol.render.canvas.Replay.prototype.endGeometry = function(geometry, data) { + goog.asserts.assert(!goog.isNull(this.beginGeometryInstruction1_)); + this.beginGeometryInstruction1_[2] = this.instructions.length; + this.beginGeometryInstruction1_ = null; + goog.asserts.assert(!goog.isNull(this.beginGeometryInstruction2_)); + this.beginGeometryInstruction2_[2] = this.hitDetectionInstructions.length; + this.beginGeometryInstruction2_ = null; + var endGeometryInstruction = [ol.render.canvas.Instruction.END_GEOMETRY, geometry, data]; + this.instructions.push(endGeometryInstruction); + this.hitDetectionInstructions.push(endGeometryInstruction) +}; +ol.render.canvas.Replay.prototype.finish = goog.nullFunction; +ol.render.canvas.Replay.prototype.getExtent = function() { + return this.extent_ +}; +ol.render.canvas.Replay.prototype.setFillStrokeStyle = goog.abstractMethod; +ol.render.canvas.Replay.prototype.setImageStyle = goog.abstractMethod; +ol.render.canvas.Replay.prototype.setTextStyle = goog.abstractMethod; +ol.render.canvas.ImageReplay = function(tolerance, maxExtent) { + goog.base(this, tolerance, maxExtent); + this.hitDetectionImage_ = null; + this.image_ = null; + this.anchorX_ = undefined; + this.anchorY_ = undefined; + this.height_ = undefined; + this.opacity_ = undefined; + this.rotateWithView_ = undefined; + this.rotation_ = undefined; + this.scale_ = undefined; + this.snapToPixel_ = undefined; + this.width_ = undefined +}; +goog.inherits(ol.render.canvas.ImageReplay, ol.render.canvas.Replay); +ol.render.canvas.ImageReplay.prototype.drawCoordinates_ = function(flatCoordinates, offset, end, stride) { + return this.appendFlatCoordinates(flatCoordinates, offset, end, stride, false) +}; +ol.render.canvas.ImageReplay.prototype.drawPointGeometry = function(pointGeometry, data) { + if(goog.isNull(this.image_)) { + return + } + goog.asserts.assert(goog.isDef(this.anchorX_)); + goog.asserts.assert(goog.isDef(this.anchorY_)); + goog.asserts.assert(goog.isDef(this.height_)); + goog.asserts.assert(goog.isDef(this.opacity_)); + goog.asserts.assert(goog.isDef(this.rotateWithView_)); + goog.asserts.assert(goog.isDef(this.rotation_)); + goog.asserts.assert(goog.isDef(this.scale_)); + goog.asserts.assert(goog.isDef(this.width_)); + ol.extent.extend(this.extent_, pointGeometry.getExtent()); + this.beginGeometry(pointGeometry); + var flatCoordinates = pointGeometry.getFlatCoordinates(); + var stride = pointGeometry.getStride(); + var myBegin = this.coordinates.length; + var myEnd = this.drawCoordinates_(flatCoordinates, 0, flatCoordinates.length, stride); + this.instructions.push([ol.render.canvas.Instruction.DRAW_IMAGE, myBegin, myEnd, this.image_, this.anchorX_, this.anchorY_, this.height_, this.opacity_, this.rotateWithView_, this.rotation_, this.scale_, this.snapToPixel_, this.width_]); + this.hitDetectionInstructions.push([ol.render.canvas.Instruction.DRAW_IMAGE, myBegin, myEnd, this.hitDetectionImage_, this.anchorX_, this.anchorY_, this.height_, this.opacity_, this.rotateWithView_, this.rotation_, this.scale_, this.snapToPixel_, this.width_]); + this.endGeometry(pointGeometry, data) +}; +ol.render.canvas.ImageReplay.prototype.drawMultiPointGeometry = function(multiPointGeometry, data) { + if(goog.isNull(this.image_)) { + return + } + goog.asserts.assert(goog.isDef(this.anchorX_)); + goog.asserts.assert(goog.isDef(this.anchorY_)); + goog.asserts.assert(goog.isDef(this.height_)); + goog.asserts.assert(goog.isDef(this.opacity_)); + goog.asserts.assert(goog.isDef(this.rotateWithView_)); + goog.asserts.assert(goog.isDef(this.rotation_)); + goog.asserts.assert(goog.isDef(this.scale_)); + goog.asserts.assert(goog.isDef(this.width_)); + ol.extent.extend(this.extent_, multiPointGeometry.getExtent()); + this.beginGeometry(multiPointGeometry); + var flatCoordinates = multiPointGeometry.getFlatCoordinates(); + var stride = multiPointGeometry.getStride(); + var myBegin = this.coordinates.length; + var myEnd = this.drawCoordinates_(flatCoordinates, 0, flatCoordinates.length, stride); + this.instructions.push([ol.render.canvas.Instruction.DRAW_IMAGE, myBegin, myEnd, this.image_, this.anchorX_, this.anchorY_, this.height_, this.opacity_, this.rotateWithView_, this.rotation_, this.scale_, this.snapToPixel_, this.width_]); + this.hitDetectionInstructions.push([ol.render.canvas.Instruction.DRAW_IMAGE, myBegin, myEnd, this.hitDetectionImage_, this.anchorX_, this.anchorY_, this.height_, this.opacity_, this.rotateWithView_, this.rotation_, this.scale_, this.snapToPixel_, this.width_]); + this.endGeometry(multiPointGeometry, data) +}; +ol.render.canvas.ImageReplay.prototype.finish = function() { + this.reverseHitDetectionInstructions_(); + this.anchorX_ = undefined; + this.anchorY_ = undefined; + this.hitDetectionImage_ = null; + this.image_ = null; + this.height_ = undefined; + this.scale_ = undefined; + this.opacity_ = undefined; + this.rotateWithView_ = undefined; + this.rotation_ = undefined; + this.snapToPixel_ = undefined; + this.width_ = undefined +}; +ol.render.canvas.ImageReplay.prototype.setImageStyle = function(imageStyle) { + goog.asserts.assert(!goog.isNull(imageStyle)); + var anchor = imageStyle.getAnchor(); + goog.asserts.assert(!goog.isNull(anchor)); + var size = imageStyle.getSize(); + goog.asserts.assert(!goog.isNull(size)); + var hitDetectionImage = imageStyle.getHitDetectionImage(1); + goog.asserts.assert(!goog.isNull(hitDetectionImage)); + var image = imageStyle.getImage(1); + goog.asserts.assert(!goog.isNull(image)); + this.anchorX_ = anchor[0]; + this.anchorY_ = anchor[1]; + this.hitDetectionImage_ = hitDetectionImage; + this.image_ = image; + this.height_ = size[1]; + this.opacity_ = imageStyle.getOpacity(); + this.rotateWithView_ = imageStyle.getRotateWithView(); + this.rotation_ = imageStyle.getRotation(); + this.scale_ = imageStyle.getScale(); + this.snapToPixel_ = imageStyle.getSnapToPixel(); + this.width_ = size[0] +}; +ol.render.canvas.LineStringReplay = function(tolerance, maxExtent) { + goog.base(this, tolerance, maxExtent); + this.state_ = {currentStrokeStyle:undefined, currentLineCap:undefined, currentLineDash:null, currentLineJoin:undefined, currentLineWidth:undefined, currentMiterLimit:undefined, lastStroke:0, strokeStyle:undefined, lineCap:undefined, lineDash:null, lineJoin:undefined, lineWidth:undefined, miterLimit:undefined} +}; +goog.inherits(ol.render.canvas.LineStringReplay, ol.render.canvas.Replay); +ol.render.canvas.LineStringReplay.prototype.drawFlatCoordinates_ = function(flatCoordinates, offset, end, stride) { + var myBegin = this.coordinates.length; + var myEnd = this.appendFlatCoordinates(flatCoordinates, offset, end, stride, false); + var moveToLineToInstruction = [ol.render.canvas.Instruction.MOVE_TO_LINE_TO, myBegin, myEnd]; + this.instructions.push(moveToLineToInstruction); + this.hitDetectionInstructions.push(moveToLineToInstruction); + return end +}; +ol.render.canvas.LineStringReplay.prototype.setStrokeStyle_ = function() { + var state = this.state_; + var strokeStyle = state.strokeStyle; + var lineCap = state.lineCap; + var lineDash = state.lineDash; + var lineJoin = state.lineJoin; + var lineWidth = state.lineWidth; + var miterLimit = state.miterLimit; + goog.asserts.assert(goog.isDef(strokeStyle)); + goog.asserts.assert(goog.isDef(lineCap)); + goog.asserts.assert(!goog.isNull(lineDash)); + goog.asserts.assert(goog.isDef(lineJoin)); + goog.asserts.assert(goog.isDef(lineWidth)); + goog.asserts.assert(goog.isDef(miterLimit)); + if(state.currentStrokeStyle != strokeStyle || state.currentLineCap != lineCap || !goog.array.equals(state.currentLineDash, lineDash) || state.currentLineJoin != lineJoin || state.currentLineWidth != lineWidth || state.currentMiterLimit != miterLimit) { + if(state.lastStroke != this.coordinates.length) { + this.instructions.push([ol.render.canvas.Instruction.STROKE]); + state.lastStroke = this.coordinates.length + } + this.instructions.push([ol.render.canvas.Instruction.SET_STROKE_STYLE, strokeStyle, lineWidth, lineCap, lineJoin, miterLimit, lineDash], [ol.render.canvas.Instruction.BEGIN_PATH]); + state.currentStrokeStyle = strokeStyle; + state.currentLineCap = lineCap; + state.currentLineDash = lineDash; + state.currentLineJoin = lineJoin; + state.currentLineWidth = lineWidth; + state.currentMiterLimit = miterLimit + } +}; +ol.render.canvas.LineStringReplay.prototype.drawLineStringGeometry = function(lineStringGeometry, data) { + var state = this.state_; + goog.asserts.assert(!goog.isNull(state)); + var strokeStyle = state.strokeStyle; + var lineWidth = state.lineWidth; + if(!goog.isDef(strokeStyle) || !goog.isDef(lineWidth)) { + return + } + ol.extent.extend(this.extent_, lineStringGeometry.getExtent()); + this.setStrokeStyle_(); + this.beginGeometry(lineStringGeometry); + this.hitDetectionInstructions.push([ol.render.canvas.Instruction.SET_STROKE_STYLE, state.strokeStyle, state.lineWidth, state.lineCap, state.lineJoin, state.miterLimit, state.lineDash], [ol.render.canvas.Instruction.BEGIN_PATH]); + var flatCoordinates = lineStringGeometry.getFlatCoordinates(); + var stride = lineStringGeometry.getStride(); + this.drawFlatCoordinates_(flatCoordinates, 0, flatCoordinates.length, stride); + this.hitDetectionInstructions.push([ol.render.canvas.Instruction.STROKE]); + this.endGeometry(lineStringGeometry, data) +}; +ol.render.canvas.LineStringReplay.prototype.drawMultiLineStringGeometry = function(multiLineStringGeometry, data) { + var state = this.state_; + goog.asserts.assert(!goog.isNull(state)); + var strokeStyle = state.strokeStyle; + var lineWidth = state.lineWidth; + if(!goog.isDef(strokeStyle) || !goog.isDef(lineWidth)) { + return + } + ol.extent.extend(this.extent_, multiLineStringGeometry.getExtent()); + this.setStrokeStyle_(); + this.beginGeometry(multiLineStringGeometry); + this.hitDetectionInstructions.push([ol.render.canvas.Instruction.SET_STROKE_STYLE, state.strokeStyle, state.lineWidth, state.lineCap, state.lineJoin, state.miterLimit, state.lineDash], [ol.render.canvas.Instruction.BEGIN_PATH]); + var ends = multiLineStringGeometry.getEnds(); + var flatCoordinates = multiLineStringGeometry.getFlatCoordinates(); + var stride = multiLineStringGeometry.getStride(); + var offset = 0; + var i, ii; + for(i = 0, ii = ends.length;i < ii;++i) { + offset = this.drawFlatCoordinates_(flatCoordinates, offset, ends[i], stride) + } + this.hitDetectionInstructions.push([ol.render.canvas.Instruction.STROKE]); + this.endGeometry(multiLineStringGeometry, data) +}; +ol.render.canvas.LineStringReplay.prototype.finish = function() { + var state = this.state_; + goog.asserts.assert(!goog.isNull(state)); + if(state.lastStroke != this.coordinates.length) { + this.instructions.push([ol.render.canvas.Instruction.STROKE]) + } + this.reverseHitDetectionInstructions_(); + this.state_ = null +}; +ol.render.canvas.LineStringReplay.prototype.setFillStrokeStyle = function(fillStyle, strokeStyle) { + goog.asserts.assert(!goog.isNull(this.state_)); + goog.asserts.assert(goog.isNull(fillStyle)); + goog.asserts.assert(!goog.isNull(strokeStyle)); + var strokeStyleColor = strokeStyle.getColor(); + this.state_.strokeStyle = ol.color.asString(!goog.isNull(strokeStyleColor) ? strokeStyleColor : ol.render.canvas.defaultStrokeStyle); + var strokeStyleLineCap = strokeStyle.getLineCap(); + this.state_.lineCap = goog.isDef(strokeStyleLineCap) ? strokeStyleLineCap : ol.render.canvas.defaultLineCap; + var strokeStyleLineDash = strokeStyle.getLineDash(); + this.state_.lineDash = !goog.isNull(strokeStyleLineDash) ? strokeStyleLineDash : ol.render.canvas.defaultLineDash; + var strokeStyleLineJoin = strokeStyle.getLineJoin(); + this.state_.lineJoin = goog.isDef(strokeStyleLineJoin) ? strokeStyleLineJoin : ol.render.canvas.defaultLineJoin; + var strokeStyleWidth = strokeStyle.getWidth(); + this.state_.lineWidth = goog.isDef(strokeStyleWidth) ? strokeStyleWidth : ol.render.canvas.defaultLineWidth; + var strokeStyleMiterLimit = strokeStyle.getMiterLimit(); + this.state_.miterLimit = goog.isDef(strokeStyleMiterLimit) ? strokeStyleMiterLimit : ol.render.canvas.defaultMiterLimit +}; +ol.render.canvas.PolygonReplay = function(tolerance, maxExtent) { + goog.base(this, tolerance, maxExtent); + this.state_ = {currentFillStyle:undefined, currentStrokeStyle:undefined, currentLineCap:undefined, currentLineDash:null, currentLineJoin:undefined, currentLineWidth:undefined, currentMiterLimit:undefined, fillStyle:undefined, strokeStyle:undefined, lineCap:undefined, lineDash:null, lineJoin:undefined, lineWidth:undefined, miterLimit:undefined} +}; +goog.inherits(ol.render.canvas.PolygonReplay, ol.render.canvas.Replay); +ol.render.canvas.PolygonReplay.prototype.drawFlatCoordinatess_ = function(flatCoordinates, offset, ends, stride) { + var state = this.state_; + var beginPathInstruction = [ol.render.canvas.Instruction.BEGIN_PATH]; + this.instructions.push(beginPathInstruction); + this.hitDetectionInstructions.push(beginPathInstruction); + var i, ii; + for(i = 0, ii = ends.length;i < ii;++i) { + var end = ends[i]; + var myBegin = this.coordinates.length; + var myEnd = this.appendFlatCoordinates(flatCoordinates, offset, end, stride, true); + var moveToLineToInstruction = [ol.render.canvas.Instruction.MOVE_TO_LINE_TO, myBegin, myEnd]; + var closePathInstruction = [ol.render.canvas.Instruction.CLOSE_PATH]; + this.instructions.push(moveToLineToInstruction, closePathInstruction); + this.hitDetectionInstructions.push(moveToLineToInstruction, closePathInstruction); + offset = end + } + var fillInstruction = [ol.render.canvas.Instruction.FILL]; + this.hitDetectionInstructions.push(fillInstruction); + if(goog.isDef(state.fillStyle)) { + this.instructions.push(fillInstruction) + } + if(goog.isDef(state.strokeStyle)) { + goog.asserts.assert(goog.isDef(state.lineWidth)); + var strokeInstruction = [ol.render.canvas.Instruction.STROKE]; + this.instructions.push(strokeInstruction); + this.hitDetectionInstructions.push(strokeInstruction) + } + return offset +}; +ol.render.canvas.PolygonReplay.prototype.drawCircleGeometry = function(circleGeometry, data) { + var state = this.state_; + goog.asserts.assert(!goog.isNull(state)); + var fillStyle = state.fillStyle; + var strokeStyle = state.strokeStyle; + if(!goog.isDef(fillStyle) && !goog.isDef(strokeStyle)) { + return + } + if(goog.isDef(strokeStyle)) { + goog.asserts.assert(goog.isDef(state.lineWidth)) + } + ol.extent.extend(this.extent_, circleGeometry.getExtent()); + this.setFillStrokeStyles_(); + this.beginGeometry(circleGeometry); + this.hitDetectionInstructions.push([ol.render.canvas.Instruction.SET_FILL_STYLE, ol.color.asString(ol.render.canvas.defaultFillStyle)]); + if(goog.isDef(state.strokeStyle)) { + this.hitDetectionInstructions.push([ol.render.canvas.Instruction.SET_STROKE_STYLE, state.strokeStyle, state.lineWidth, state.lineCap, state.lineJoin, state.miterLimit, state.lineDash]) + } + var flatCoordinates = circleGeometry.getFlatCoordinates(); + var stride = circleGeometry.getStride(); + this.appendFlatCoordinates(flatCoordinates, 0, flatCoordinates.length, stride, false); + var beginPathInstruction = [ol.render.canvas.Instruction.BEGIN_PATH]; + var circleInstruction = [ol.render.canvas.Instruction.CIRCLE]; + this.instructions.push(beginPathInstruction, circleInstruction); + this.hitDetectionInstructions.push(beginPathInstruction, circleInstruction); + this.endGeometry(circleGeometry, data); + var fillInstruction = [ol.render.canvas.Instruction.FILL]; + this.hitDetectionInstructions.push(fillInstruction); + if(goog.isDef(state.fillStyle)) { + this.instructions.push(fillInstruction) + } + if(goog.isDef(state.strokeStyle)) { + goog.asserts.assert(goog.isDef(state.lineWidth)); + var strokeInstruction = [ol.render.canvas.Instruction.STROKE]; + this.instructions.push(strokeInstruction); + this.hitDetectionInstructions.push(strokeInstruction) + } +}; +ol.render.canvas.PolygonReplay.prototype.drawPolygonGeometry = function(polygonGeometry, data) { + var state = this.state_; + goog.asserts.assert(!goog.isNull(state)); + var fillStyle = state.fillStyle; + var strokeStyle = state.strokeStyle; + if(!goog.isDef(fillStyle) && !goog.isDef(strokeStyle)) { + return + } + if(goog.isDef(strokeStyle)) { + goog.asserts.assert(goog.isDef(state.lineWidth)) + } + ol.extent.extend(this.extent_, polygonGeometry.getExtent()); + this.setFillStrokeStyles_(); + this.beginGeometry(polygonGeometry); + this.hitDetectionInstructions.push([ol.render.canvas.Instruction.SET_FILL_STYLE, ol.color.asString(ol.render.canvas.defaultFillStyle)]); + if(goog.isDef(state.strokeStyle)) { + this.hitDetectionInstructions.push([ol.render.canvas.Instruction.SET_STROKE_STYLE, state.strokeStyle, state.lineWidth, state.lineCap, state.lineJoin, state.miterLimit, state.lineDash]) + } + var ends = polygonGeometry.getEnds(); + var flatCoordinates = polygonGeometry.getOrientedFlatCoordinates(); + var stride = polygonGeometry.getStride(); + this.drawFlatCoordinatess_(flatCoordinates, 0, ends, stride); + this.endGeometry(polygonGeometry, data) +}; +ol.render.canvas.PolygonReplay.prototype.drawMultiPolygonGeometry = function(multiPolygonGeometry, data) { + var state = this.state_; + goog.asserts.assert(!goog.isNull(state)); + var fillStyle = state.fillStyle; + var strokeStyle = state.strokeStyle; + if(!goog.isDef(fillStyle) && !goog.isDef(strokeStyle)) { + return + } + if(goog.isDef(strokeStyle)) { + goog.asserts.assert(goog.isDef(state.lineWidth)) + } + ol.extent.extend(this.extent_, multiPolygonGeometry.getExtent()); + this.setFillStrokeStyles_(); + this.beginGeometry(multiPolygonGeometry); + this.hitDetectionInstructions.push([ol.render.canvas.Instruction.SET_FILL_STYLE, ol.color.asString(ol.render.canvas.defaultFillStyle)]); + if(goog.isDef(state.strokeStyle)) { + this.hitDetectionInstructions.push([ol.render.canvas.Instruction.SET_STROKE_STYLE, state.strokeStyle, state.lineWidth, state.lineCap, state.lineJoin, state.miterLimit, state.lineDash]) + } + var endss = multiPolygonGeometry.getEndss(); + var flatCoordinates = multiPolygonGeometry.getOrientedFlatCoordinates(); + var stride = multiPolygonGeometry.getStride(); + var offset = 0; + var i, ii; + for(i = 0, ii = endss.length;i < ii;++i) { + offset = this.drawFlatCoordinatess_(flatCoordinates, offset, endss[i], stride) + } + this.endGeometry(multiPolygonGeometry, data) +}; +ol.render.canvas.PolygonReplay.prototype.finish = function() { + goog.asserts.assert(!goog.isNull(this.state_)); + this.reverseHitDetectionInstructions_(); + this.state_ = null; + var tolerance = this.tolerance; + if(tolerance !== 0) { + var coordinates = this.coordinates; + var i, ii; + for(i = 0, ii = coordinates.length;i < ii;++i) { + coordinates[i] = ol.geom.simplify.snap(coordinates[i], tolerance) + } + } +}; +ol.render.canvas.PolygonReplay.prototype.setFillStrokeStyle = function(fillStyle, strokeStyle) { + goog.asserts.assert(!goog.isNull(this.state_)); + goog.asserts.assert(!goog.isNull(fillStyle) || !goog.isNull(strokeStyle)); + var state = this.state_; + if(!goog.isNull(fillStyle)) { + var fillStyleColor = fillStyle.getColor(); + state.fillStyle = ol.color.asString(!goog.isNull(fillStyleColor) ? fillStyleColor : ol.render.canvas.defaultFillStyle) + }else { + state.fillStyle = undefined + } + if(!goog.isNull(strokeStyle)) { + var strokeStyleColor = strokeStyle.getColor(); + state.strokeStyle = ol.color.asString(!goog.isNull(strokeStyleColor) ? strokeStyleColor : ol.render.canvas.defaultStrokeStyle); + var strokeStyleLineCap = strokeStyle.getLineCap(); + state.lineCap = goog.isDef(strokeStyleLineCap) ? strokeStyleLineCap : ol.render.canvas.defaultLineCap; + var strokeStyleLineDash = strokeStyle.getLineDash(); + state.lineDash = !goog.isNull(strokeStyleLineDash) ? strokeStyleLineDash.slice() : ol.render.canvas.defaultLineDash; + var strokeStyleLineJoin = strokeStyle.getLineJoin(); + state.lineJoin = goog.isDef(strokeStyleLineJoin) ? strokeStyleLineJoin : ol.render.canvas.defaultLineJoin; + var strokeStyleWidth = strokeStyle.getWidth(); + state.lineWidth = goog.isDef(strokeStyleWidth) ? strokeStyleWidth : ol.render.canvas.defaultLineWidth; + var strokeStyleMiterLimit = strokeStyle.getMiterLimit(); + state.miterLimit = goog.isDef(strokeStyleMiterLimit) ? strokeStyleMiterLimit : ol.render.canvas.defaultMiterLimit + }else { + state.strokeStyle = undefined; + state.lineCap = undefined; + state.lineDash = null; + state.lineJoin = undefined; + state.lineWidth = undefined; + state.miterLimit = undefined + } +}; +ol.render.canvas.PolygonReplay.prototype.setFillStrokeStyles_ = function() { + var state = this.state_; + var fillStyle = state.fillStyle; + var strokeStyle = state.strokeStyle; + var lineCap = state.lineCap; + var lineDash = state.lineDash; + var lineJoin = state.lineJoin; + var lineWidth = state.lineWidth; + var miterLimit = state.miterLimit; + if(goog.isDef(fillStyle) && state.currentFillStyle != fillStyle) { + this.instructions.push([ol.render.canvas.Instruction.SET_FILL_STYLE, fillStyle]); + state.currentFillStyle = state.fillStyle + } + if(goog.isDef(strokeStyle)) { + goog.asserts.assert(goog.isDef(lineCap)); + goog.asserts.assert(!goog.isNull(lineDash)); + goog.asserts.assert(goog.isDef(lineJoin)); + goog.asserts.assert(goog.isDef(lineWidth)); + goog.asserts.assert(goog.isDef(miterLimit)); + if(state.currentStrokeStyle != strokeStyle || state.currentLineCap != lineCap || state.currentLineDash != lineDash || state.currentLineJoin != lineJoin || state.currentLineWidth != lineWidth || state.currentMiterLimit != miterLimit) { + this.instructions.push([ol.render.canvas.Instruction.SET_STROKE_STYLE, strokeStyle, lineWidth, lineCap, lineJoin, miterLimit, lineDash]); + state.currentStrokeStyle = strokeStyle; + state.currentLineCap = lineCap; + state.currentLineDash = lineDash; + state.currentLineJoin = lineJoin; + state.currentLineWidth = lineWidth; + state.currentMiterLimit = miterLimit + } + } +}; +ol.render.canvas.TextReplay = function(tolerance, maxExtent) { + goog.base(this, tolerance, maxExtent); + this.replayFillState_ = null; + this.replayStrokeState_ = null; + this.replayTextState_ = null; + this.text_ = ""; + this.textRotation_ = 0; + this.textScale_ = 0; + this.textFillState_ = null; + this.textStrokeState_ = null; + this.textState_ = null +}; +goog.inherits(ol.render.canvas.TextReplay, ol.render.canvas.Replay); +ol.render.canvas.TextReplay.prototype.drawText = function(flatCoordinates, offset, end, stride, geometry, data) { + if(this.text_ === "" || goog.isNull(this.textState_) || goog.isNull(this.textFillState_) && goog.isNull(this.textStrokeState_)) { + return + } + ol.extent.extendFlatCoordinates(this.extent_, flatCoordinates, offset, end, stride); + if(!goog.isNull(this.textFillState_)) { + this.setReplayFillState_(this.textFillState_) + } + if(!goog.isNull(this.textStrokeState_)) { + this.setReplayStrokeState_(this.textStrokeState_) + } + this.setReplayTextState_(this.textState_); + this.beginGeometry(geometry); + var myBegin = this.coordinates.length; + var myEnd = this.appendFlatCoordinates(flatCoordinates, offset, end, stride, false); + var fill = !goog.isNull(this.textFillState_); + var stroke = !goog.isNull(this.textStrokeState_); + var drawTextInstruction = [ol.render.canvas.Instruction.DRAW_TEXT, myBegin, myEnd, this.text_, this.textRotation_, this.textScale_, fill, stroke]; + this.instructions.push(drawTextInstruction); + this.hitDetectionInstructions.push(drawTextInstruction); + this.endGeometry(geometry, data) +}; +ol.render.canvas.TextReplay.prototype.setReplayFillState_ = function(fillState) { + var replayFillState = this.replayFillState_; + if(!goog.isNull(replayFillState) && replayFillState.fillStyle == fillState.fillStyle) { + return + } + var setFillStyleInstruction = [ol.render.canvas.Instruction.SET_FILL_STYLE, fillState.fillStyle]; + this.instructions.push(setFillStyleInstruction); + this.hitDetectionInstructions.push(setFillStyleInstruction); + if(goog.isNull(replayFillState)) { + this.replayFillState_ = {fillStyle:fillState.fillStyle} + }else { + replayFillState.fillStyle = fillState.fillStyle + } +}; +ol.render.canvas.TextReplay.prototype.setReplayStrokeState_ = function(strokeState) { + var replayStrokeState = this.replayStrokeState_; + if(!goog.isNull(replayStrokeState) && replayStrokeState.lineCap == strokeState.lineCap && replayStrokeState.lineDash == strokeState.lineDash && replayStrokeState.lineJoin == strokeState.lineJoin && replayStrokeState.lineWidth == strokeState.lineWidth && replayStrokeState.miterLimit == strokeState.miterLimit && replayStrokeState.strokeStyle == strokeState.strokeStyle) { + return + } + var setStrokeStyleInstruction = [ol.render.canvas.Instruction.SET_STROKE_STYLE, strokeState.strokeStyle, strokeState.lineWidth, strokeState.lineCap, strokeState.lineJoin, strokeState.miterLimit, strokeState.lineDash]; + this.instructions.push(setStrokeStyleInstruction); + this.hitDetectionInstructions.push(setStrokeStyleInstruction); + if(goog.isNull(replayStrokeState)) { + this.replayStrokeState_ = {lineCap:strokeState.lineCap, lineDash:strokeState.lineDash, lineJoin:strokeState.lineJoin, lineWidth:strokeState.lineWidth, miterLimit:strokeState.miterLimit, strokeStyle:strokeState.strokeStyle} + }else { + replayStrokeState.lineCap = strokeState.lineCap; + replayStrokeState.lineDash = strokeState.lineDash; + replayStrokeState.lineJoin = strokeState.lineJoin; + replayStrokeState.lineWidth = strokeState.lineWidth; + replayStrokeState.miterLimit = strokeState.miterLimit; + replayStrokeState.strokeStyle = strokeState.strokeStyle + } +}; +ol.render.canvas.TextReplay.prototype.setReplayTextState_ = function(textState) { + var replayTextState = this.replayTextState_; + if(!goog.isNull(replayTextState) && replayTextState.font == textState.font && replayTextState.textAlign == textState.textAlign && replayTextState.textBaseline == textState.textBaseline) { + return + } + var setTextStyleInstruction = [ol.render.canvas.Instruction.SET_TEXT_STYLE, textState.font, textState.textAlign, textState.textBaseline]; + this.instructions.push(setTextStyleInstruction); + this.hitDetectionInstructions.push(setTextStyleInstruction); + if(goog.isNull(replayTextState)) { + this.replayTextState_ = {font:textState.font, textAlign:textState.textAlign, textBaseline:textState.textBaseline} + }else { + replayTextState.font = textState.font; + replayTextState.textAlign = textState.textAlign; + replayTextState.textBaseline = textState.textBaseline + } +}; +ol.render.canvas.TextReplay.prototype.setTextStyle = function(textStyle) { + if(goog.isNull(textStyle)) { + this.text_ = "" + }else { + var textFillStyle = textStyle.getFill(); + if(goog.isNull(textFillStyle)) { + this.textFillState_ = null + }else { + var textFillStyleColor = textFillStyle.getColor(); + var fillStyle = ol.color.asString(!goog.isNull(textFillStyleColor) ? textFillStyleColor : ol.render.canvas.defaultFillStyle); + if(goog.isNull(this.textFillState_)) { + this.textFillState_ = {fillStyle:fillStyle} + }else { + var textFillState = this.textFillState_; + textFillState.fillStyle = fillStyle + } + } + var textStrokeStyle = textStyle.getStroke(); + if(goog.isNull(textStrokeStyle)) { + this.textStrokeState_ = null + }else { + var textStrokeStyleColor = textStrokeStyle.getColor(); + var textStrokeStyleLineCap = textStrokeStyle.getLineCap(); + var textStrokeStyleLineDash = textStrokeStyle.getLineDash(); + var textStrokeStyleLineJoin = textStrokeStyle.getLineJoin(); + var textStrokeStyleWidth = textStrokeStyle.getWidth(); + var textStrokeStyleMiterLimit = textStrokeStyle.getMiterLimit(); + var lineCap = goog.isDef(textStrokeStyleLineCap) ? textStrokeStyleLineCap : ol.render.canvas.defaultLineCap; + var lineDash = goog.isDefAndNotNull(textStrokeStyleLineDash) ? textStrokeStyleLineDash.slice() : ol.render.canvas.defaultLineDash; + var lineJoin = goog.isDef(textStrokeStyleLineJoin) ? textStrokeStyleLineJoin : ol.render.canvas.defaultLineJoin; + var lineWidth = goog.isDef(textStrokeStyleWidth) ? textStrokeStyleWidth : ol.render.canvas.defaultLineWidth; + var miterLimit = goog.isDef(textStrokeStyleMiterLimit) ? textStrokeStyleMiterLimit : ol.render.canvas.defaultMiterLimit; + var strokeStyle = ol.color.asString(!goog.isNull(textStrokeStyleColor) ? textStrokeStyleColor : ol.render.canvas.defaultStrokeStyle); + if(goog.isNull(this.textStrokeState_)) { + this.textStrokeState_ = {lineCap:lineCap, lineDash:lineDash, lineJoin:lineJoin, lineWidth:lineWidth, miterLimit:miterLimit, strokeStyle:strokeStyle} + }else { + var textStrokeState = this.textStrokeState_; + textStrokeState.lineCap = lineCap; + textStrokeState.lineDash = lineDash; + textStrokeState.lineJoin = lineJoin; + textStrokeState.lineWidth = lineWidth; + textStrokeState.miterLimit = miterLimit; + textStrokeState.strokeStyle = strokeStyle + } + } + var textFont = textStyle.getFont(); + var textRotation = textStyle.getRotation(); + var textScale = textStyle.getScale(); + var textText = textStyle.getText(); + var textTextAlign = textStyle.getTextAlign(); + var textTextBaseline = textStyle.getTextBaseline(); + var font = goog.isDef(textFont) ? textFont : ol.render.canvas.defaultFont; + var textAlign = goog.isDef(textTextAlign) ? textTextAlign : ol.render.canvas.defaultTextAlign; + var textBaseline = goog.isDef(textTextBaseline) ? textTextBaseline : ol.render.canvas.defaultTextBaseline; + if(goog.isNull(this.textState_)) { + this.textState_ = {font:font, textAlign:textAlign, textBaseline:textBaseline} + }else { + var textState = this.textState_; + textState.font = font; + textState.textAlign = textAlign; + textState.textBaseline = textBaseline + } + this.text_ = goog.isDef(textText) ? textText : ""; + this.textRotation_ = goog.isDef(textRotation) ? textRotation : 0; + this.textScale_ = goog.isDef(textScale) ? textScale : 1 + } +}; +ol.render.canvas.ReplayGroup = function(tolerance, maxExtent) { + this.tolerance_ = tolerance; + this.maxExtent_ = maxExtent; + this.replaysByZIndex_ = {}; + var hitDetectionCanvas = (goog.dom.createElement(goog.dom.TagName.CANVAS)); + hitDetectionCanvas.width = 1; + hitDetectionCanvas.height = 1; + this.hitDetectionContext_ = (hitDetectionCanvas.getContext("2d")); + this.hitDetectionTransform_ = goog.vec.Mat4.createNumber() +}; +ol.render.canvas.ReplayGroup.prototype.replay = function(context, extent, pixelRatio, transform, viewRotation, renderGeometryFunction) { + var zs = goog.array.map(goog.object.getKeys(this.replaysByZIndex_), Number); + goog.array.sort(zs); + return this.replay_(zs, context, extent, pixelRatio, transform, viewRotation, renderGeometryFunction) +}; +ol.render.canvas.ReplayGroup.prototype.replayHitDetection_ = function(zs, context, extent, transform, viewRotation, renderGeometryFunction, geometryCallback) { + var i, ii, replays, replayType, replay, result; + for(i = 0, ii = zs.length;i < ii;++i) { + replays = this.replaysByZIndex_[zs[i].toString()]; + for(replayType in replays) { + replay = replays[replayType]; + if(ol.extent.intersects(extent, replay.getExtent())) { + result = replay.replayHitDetection(context, transform, viewRotation, renderGeometryFunction, geometryCallback); + if(result) { + return result + } + } + } + } + return undefined +}; +ol.render.canvas.ReplayGroup.prototype.replay_ = function(zs, context, extent, pixelRatio, transform, viewRotation, renderGeometryFunction) { + var maxExtent = this.maxExtent_; + var minX = maxExtent[0]; + var minY = maxExtent[1]; + var maxX = maxExtent[2]; + var maxY = maxExtent[3]; + var flatClipCoords = ol.geom.flat.transform2D([minX, minY, minX, maxY, maxX, maxY, maxX, minY], 2, transform); + context.save(); + context.beginPath(); + context.moveTo(flatClipCoords[0], flatClipCoords[1]); + context.lineTo(flatClipCoords[2], flatClipCoords[3]); + context.lineTo(flatClipCoords[4], flatClipCoords[5]); + context.lineTo(flatClipCoords[6], flatClipCoords[7]); + context.closePath(); + context.clip(); + var i, ii, j, jj, replays, replayType, replay, result; + for(i = 0, ii = zs.length;i < ii;++i) { + replays = this.replaysByZIndex_[zs[i].toString()]; + for(j = 0, jj = ol.render.REPLAY_ORDER.length;j < jj;++j) { + replay = replays[ol.render.REPLAY_ORDER[j]]; + if(goog.isDef(replay) && ol.extent.intersects(extent, replay.getExtent())) { + result = replay.replay(context, pixelRatio, transform, viewRotation, renderGeometryFunction); + if(result) { + return result + } + } + } + } + context.restore(); + return undefined +}; +ol.render.canvas.ReplayGroup.prototype.forEachGeometryAtPixel = function(extent, resolution, rotation, coordinate, renderGeometryFunction, callback) { + var transform = this.hitDetectionTransform_; + ol.vec.Mat4.makeTransform2D(transform, 0.5, 0.5, 1 / resolution, -1 / resolution, -rotation, -coordinate[0], -coordinate[1]); + var zs = goog.array.map(goog.object.getKeys(this.replaysByZIndex_), Number); + goog.array.sort(zs, function(a, b) { + return b - a + }); + var context = this.hitDetectionContext_; + context.clearRect(0, 0, 1, 1); + return this.replayHitDetection_(zs, context, extent, transform, rotation, renderGeometryFunction, function(geometry, data) { + var imageData = context.getImageData(0, 0, 1, 1).data; + if(imageData[3] > 0) { + var result = callback(geometry, data); + if(result) { + return result + } + context.clearRect(0, 0, 1, 1) + } + }) +}; +ol.render.canvas.ReplayGroup.prototype.finish = function() { + var zKey; + for(zKey in this.replaysByZIndex_) { + var replays = this.replaysByZIndex_[zKey]; + var replayKey; + for(replayKey in replays) { + replays[replayKey].finish() + } + } +}; +ol.render.canvas.ReplayGroup.prototype.getReplay = function(zIndex, replayType) { + var zIndexKey = goog.isDef(zIndex) ? zIndex.toString() : "0"; + var replays = this.replaysByZIndex_[zIndexKey]; + if(!goog.isDef(replays)) { + replays = {}; + this.replaysByZIndex_[zIndexKey] = replays + } + var replay = replays[replayType]; + if(!goog.isDef(replay)) { + var Constructor = ol.render.canvas.BATCH_CONSTRUCTORS_[replayType]; + goog.asserts.assert(goog.isDef(Constructor)); + replay = new Constructor(this.tolerance_, this.maxExtent_); + replays[replayType] = replay + } + return replay +}; +ol.render.canvas.ReplayGroup.prototype.isEmpty = function() { + return goog.object.isEmpty(this.replaysByZIndex_) +}; +ol.render.canvas.BATCH_CONSTRUCTORS_ = {"Image":ol.render.canvas.ImageReplay, "LineString":ol.render.canvas.LineStringReplay, "Polygon":ol.render.canvas.PolygonReplay, "Text":ol.render.canvas.TextReplay}; +goog.provide("ol.geom.Circle"); +goog.require("goog.asserts"); +goog.require("ol.extent"); +goog.require("ol.geom.GeometryType"); +goog.require("ol.geom.SimpleGeometry"); +goog.require("ol.geom.flat"); +ol.geom.Circle = function(center, opt_radius, opt_layout) { + goog.base(this); + var radius = goog.isDef(opt_radius) ? opt_radius : 0; + this.setCenterAndRadius(center, radius, opt_layout) +}; +goog.inherits(ol.geom.Circle, ol.geom.SimpleGeometry); +ol.geom.Circle.prototype.clone = function() { + var circle = new ol.geom.Circle(null); + circle.setFlatCoordinates(this.layout, this.flatCoordinates.slice()); + return circle +}; +ol.geom.Circle.prototype.closestPointXY = function(x, y, closestPoint, minSquaredDistance) { + var flatCoordinates = this.flatCoordinates; + var dx = x - flatCoordinates[0]; + var dy = y - flatCoordinates[1]; + var squaredDistance = dx * dx + dy * dy; + if(squaredDistance < minSquaredDistance) { + var i; + if(squaredDistance === 0) { + for(i = 0;i < this.stride;++i) { + closestPoint[i] = flatCoordinates[i] + } + }else { + var delta = this.getRadius() / Math.sqrt(squaredDistance); + closestPoint[0] = flatCoordinates[0] + delta * dx; + closestPoint[1] = flatCoordinates[1] + delta * dy; + for(i = 2;i < this.stride;++i) { + closestPoint[i] = flatCoordinates[i] + } + } + closestPoint.length = this.stride; + return squaredDistance + }else { + return minSquaredDistance + } +}; +ol.geom.Circle.prototype.containsXY = function(x, y) { + var flatCoordinates = this.flatCoordinates; + var dx = x - flatCoordinates[0]; + var dy = y - flatCoordinates[1]; + return dx * dx + dy * dy <= this.getRadiusSquared_() +}; +ol.geom.Circle.prototype.getCenter = function() { + return this.flatCoordinates.slice(0, this.stride) +}; +ol.geom.Circle.prototype.getExtent = function(opt_extent) { + if(this.extentRevision != this.getRevision()) { + var flatCoordinates = this.flatCoordinates; + var radius = flatCoordinates[this.stride] - flatCoordinates[0]; + this.extent = ol.extent.createOrUpdate(flatCoordinates[0] - radius, flatCoordinates[1] - radius, flatCoordinates[0] + radius, flatCoordinates[1] + radius, this.extent); + this.extentRevision = this.getRevision() + } + goog.asserts.assert(goog.isDef(this.extent)); + return ol.extent.returnOrUpdate(this.extent, opt_extent) +}; +ol.geom.Circle.prototype.getRadius = function() { + return Math.sqrt(this.getRadiusSquared_()) +}; +ol.geom.Circle.prototype.getRadiusSquared_ = function() { + var dx = this.flatCoordinates[this.stride] - this.flatCoordinates[0]; + var dy = this.flatCoordinates[this.stride + 1] - this.flatCoordinates[1]; + return dx * dx + dy * dy +}; +ol.geom.Circle.prototype.getSimplifiedGeometry = function(squaredTolerance) { + return this +}; +ol.geom.Circle.prototype.getType = function() { + return ol.geom.GeometryType.CIRCLE +}; +ol.geom.Circle.prototype.setCenter = function(center) { + var stride = this.stride; + goog.asserts.assert(center.length == stride); + var radius = this.flatCoordinates[stride] - this.flatCoordinates[0]; + var flatCoordinates = center.slice(); + flatCoordinates[stride] = flatCoordinates[0] + radius; + var i; + for(i = 1;i < stride;++i) { + flatCoordinates[stride + i] = center[i] + } + this.setFlatCoordinates(this.layout, flatCoordinates) +}; +ol.geom.Circle.prototype.setCenterAndRadius = function(center, radius, opt_layout) { + if(goog.isNull(center)) { + this.setFlatCoordinates(ol.geom.GeometryLayout.XY, null) + }else { + this.setLayout(opt_layout, center, 0); + if(goog.isNull(this.flatCoordinates)) { + this.flatCoordinates = [] + } + var flatCoordinates = this.flatCoordinates; + var offset = ol.geom.flat.deflateCoordinate(flatCoordinates, 0, center, this.stride); + flatCoordinates[offset++] = flatCoordinates[0] + radius; + var i, ii; + for(i = 1, ii = this.stride;i < ii;++i) { + flatCoordinates[offset++] = flatCoordinates[i] + } + flatCoordinates.length = offset; + this.dispatchChangeEvent() + } +}; +ol.geom.Circle.prototype.setFlatCoordinates = function(layout, flatCoordinates) { + this.setFlatCoordinatesInternal(layout, flatCoordinates); + this.dispatchChangeEvent() +}; +ol.geom.Circle.prototype.setRadius = function(radius) { + goog.asserts.assert(!goog.isNull(this.flatCoordinates)); + this.flatCoordinates[this.stride] = this.flatCoordinates[0] + radius; + this.dispatchChangeEvent() +}; +ol.geom.Circle.prototype.transform = goog.abstractMethod; +goog.provide("ol.geom.GeometryCollection"); +goog.require("goog.array"); +goog.require("goog.asserts"); +goog.require("goog.events"); +goog.require("goog.events.EventType"); +goog.require("goog.object"); +goog.require("ol.extent"); +goog.require("ol.geom.Geometry"); +goog.require("ol.geom.GeometryType"); +ol.geom.GeometryCollection = function(opt_geometries) { + goog.base(this); + this.geometries_ = goog.isDef(opt_geometries) ? opt_geometries : null; + this.listenGeometriesChange_() +}; +goog.inherits(ol.geom.GeometryCollection, ol.geom.Geometry); +ol.geom.GeometryCollection.cloneGeometries_ = function(geometries) { + var clonedGeometries = []; + var i, ii; + for(i = 0, ii = geometries.length;i < ii;++i) { + clonedGeometries.push(geometries[i].clone()) + } + return clonedGeometries +}; +ol.geom.GeometryCollection.prototype.unlistenGeometriesChange_ = function() { + var i, ii; + if(goog.isNull(this.geometries_)) { + return + } + for(i = 0, ii = this.geometries_.length;i < ii;++i) { + goog.events.unlisten(this.geometries_[i], goog.events.EventType.CHANGE, this.dispatchChangeEvent, false, this) + } +}; +ol.geom.GeometryCollection.prototype.listenGeometriesChange_ = function() { + var i, ii; + if(goog.isNull(this.geometries_)) { + return + } + for(i = 0, ii = this.geometries_.length;i < ii;++i) { + goog.events.listen(this.geometries_[i], goog.events.EventType.CHANGE, this.dispatchChangeEvent, false, this) + } +}; +ol.geom.GeometryCollection.prototype.clone = function() { + var geometryCollection = new ol.geom.GeometryCollection(null); + geometryCollection.setGeometries(this.geometries_); + return geometryCollection +}; +ol.geom.GeometryCollection.prototype.closestPointXY = function(x, y, closestPoint, minSquaredDistance) { + if(minSquaredDistance < ol.extent.closestSquaredDistanceXY(this.getExtent(), x, y)) { + return minSquaredDistance + } + var geometries = this.geometries_; + var i, ii; + for(i = 0, ii = geometries.length;i < ii;++i) { + minSquaredDistance = geometries[i].closestPointXY(x, y, closestPoint, minSquaredDistance) + } + return minSquaredDistance +}; +ol.geom.GeometryCollection.prototype.containsXY = function(x, y) { + var geometries = this.geometries_; + var i, ii; + for(i = 0, ii = geometries.length;i < ii;++i) { + if(geometries[i].containsXY(x, y)) { + return true + } + } + return false +}; +ol.geom.GeometryCollection.prototype.getExtent = function(opt_extent) { + if(this.extentRevision != this.getRevision()) { + var extent = ol.extent.createOrUpdateEmpty(this.extent); + var geometries = this.geometries_; + var i, ii; + for(i = 0, ii = geometries.length;i < ii;++i) { + ol.extent.extend(extent, geometries[i].getExtent()) + } + this.extent = extent; + this.extentRevision = this.getRevision() + } + goog.asserts.assert(goog.isDef(this.extent)); + return ol.extent.returnOrUpdate(this.extent, opt_extent) +}; +ol.geom.GeometryCollection.prototype.getGeometries = function() { + return ol.geom.GeometryCollection.cloneGeometries_(this.geometries_) +}; +ol.geom.GeometryCollection.prototype.getGeometriesArray = function() { + return this.geometries_ +}; +ol.geom.GeometryCollection.prototype.getSimplifiedGeometry = function(squaredTolerance) { + if(this.simplifiedGeometryRevision != this.getRevision()) { + goog.object.clear(this.simplifiedGeometryCache); + this.simplifiedGeometryMaxMinSquaredTolerance = 0; + this.simplifiedGeometryRevision = this.getRevision() + } + if(squaredTolerance < 0 || this.simplifiedGeometryMaxMinSquaredTolerance !== 0 && squaredTolerance < this.simplifiedGeometryMaxMinSquaredTolerance) { + return this + } + var key = squaredTolerance.toString(); + if(this.simplifiedGeometryCache.hasOwnProperty(key)) { + return this.simplifiedGeometryCache[key] + }else { + var simplifiedGeometries = []; + var geometries = this.geometries_; + var simplified = false; + var i, ii; + for(i = 0, ii = geometries.length;i < ii;++i) { + var geometry = geometries[i]; + var simplifiedGeometry = geometry.getSimplifiedGeometry(squaredTolerance); + simplifiedGeometries.push(simplifiedGeometry); + if(simplifiedGeometry !== geometry) { + simplified = true + } + } + if(simplified) { + var simplifiedGeometryCollection = new ol.geom.GeometryCollection(null); + simplifiedGeometryCollection.setGeometriesArray(simplifiedGeometries); + this.simplifiedGeometryCache[key] = simplifiedGeometryCollection; + return simplifiedGeometryCollection + }else { + this.simplifiedGeometryMaxMinSquaredTolerance = squaredTolerance; + return this + } + } +}; +ol.geom.GeometryCollection.prototype.getType = function() { + return ol.geom.GeometryType.GEOMETRY_COLLECTION +}; +ol.geom.GeometryCollection.prototype.isEmpty = function() { + return goog.array.isEmpty(this.geometries_) +}; +ol.geom.GeometryCollection.prototype.setGeometries = function(geometries) { + this.setGeometriesArray(ol.geom.GeometryCollection.cloneGeometries_(geometries)) +}; +ol.geom.GeometryCollection.prototype.setGeometriesArray = function(geometries) { + this.unlistenGeometriesChange_(); + this.geometries_ = geometries; + this.listenGeometriesChange_(); + this.dispatchChangeEvent() +}; +ol.geom.GeometryCollection.prototype.transform = function(transformFn) { + var geometries = this.geometries_; + var i, ii; + for(i = 0, ii = geometries.length;i < ii;++i) { + geometries[i].transform(transformFn) + } + this.dispatchChangeEvent() +}; +ol.geom.GeometryCollection.prototype.disposeInternal = function() { + this.unlistenGeometriesChange_(); + goog.base(this, "disposeInternal") +}; +goog.provide("ol.geom.LineString"); +goog.require("ol.extent"); +goog.require("ol.geom.GeometryType"); +goog.require("ol.geom.SimpleGeometry"); +goog.require("ol.geom.closest"); +goog.require("ol.geom.flat"); +goog.require("ol.geom.simplify"); +ol.geom.LineString = function(coordinates, opt_layout) { + goog.base(this); + this.flatMidpoint_ = null; + this.flatMidpointRevision_ = -1; + this.maxDelta_ = -1; + this.maxDeltaRevision_ = -1; + this.setCoordinates(coordinates, opt_layout) +}; +goog.inherits(ol.geom.LineString, ol.geom.SimpleGeometry); +ol.geom.LineString.prototype.clone = function() { + var lineString = new ol.geom.LineString(null); + lineString.setFlatCoordinates(this.layout, this.flatCoordinates.slice()); + return lineString +}; +ol.geom.LineString.prototype.closestPointXY = function(x, y, closestPoint, minSquaredDistance) { + if(minSquaredDistance < ol.extent.closestSquaredDistanceXY(this.getExtent(), x, y)) { + return minSquaredDistance + } + if(this.maxDeltaRevision_ != this.getRevision()) { + this.maxDelta_ = Math.sqrt(ol.geom.closest.getMaxSquaredDelta(this.flatCoordinates, 0, this.flatCoordinates.length, this.stride, 0)); + this.maxDeltaRevision_ = this.getRevision() + } + return ol.geom.closest.getClosestPoint(this.flatCoordinates, 0, this.flatCoordinates.length, this.stride, this.maxDelta_, false, x, y, closestPoint, minSquaredDistance) +}; +ol.geom.LineString.prototype.getCoordinateAtM = function(m, opt_extrapolate) { + if(this.layout != ol.geom.GeometryLayout.XYM && this.layout != ol.geom.GeometryLayout.XYZM) { + return null + } + var extrapolate = goog.isDef(opt_extrapolate) ? opt_extrapolate : false; + return ol.geom.flat.lineStringCoordinateAtM(this.flatCoordinates, 0, this.flatCoordinates.length, this.stride, m, extrapolate) +}; +ol.geom.LineString.prototype.getCoordinates = function() { + return ol.geom.flat.inflateCoordinates(this.flatCoordinates, 0, this.flatCoordinates.length, this.stride) +}; +ol.geom.LineString.prototype.getLength = function() { + return ol.geom.flat.lineStringLength(this.flatCoordinates, 0, this.flatCoordinates.length, this.stride) +}; +ol.geom.LineString.prototype.getFlatMidpoint = function() { + if(this.flatMidpointRevision_ != this.getRevision()) { + this.flatMidpoint_ = ol.geom.flat.lineStringInterpolate(this.flatCoordinates, 0, this.flatCoordinates.length, this.stride, 0.5, this.flatMidpoint_); + this.flatMidpointRevision_ = this.getRevision() + } + return this.flatMidpoint_ +}; +ol.geom.LineString.prototype.getSimplifiedGeometryInternal = function(squaredTolerance) { + var simplifiedFlatCoordinates = []; + simplifiedFlatCoordinates.length = ol.geom.simplify.douglasPeucker(this.flatCoordinates, 0, this.flatCoordinates.length, this.stride, squaredTolerance, simplifiedFlatCoordinates, 0); + var simplifiedLineString = new ol.geom.LineString(null); + simplifiedLineString.setFlatCoordinates(ol.geom.GeometryLayout.XY, simplifiedFlatCoordinates); + return simplifiedLineString +}; +ol.geom.LineString.prototype.getType = function() { + return ol.geom.GeometryType.LINE_STRING +}; +ol.geom.LineString.prototype.setCoordinates = function(coordinates, opt_layout) { + if(goog.isNull(coordinates)) { + this.setFlatCoordinates(ol.geom.GeometryLayout.XY, null) + }else { + this.setLayout(opt_layout, coordinates, 1); + if(goog.isNull(this.flatCoordinates)) { + this.flatCoordinates = [] + } + this.flatCoordinates.length = ol.geom.flat.deflateCoordinates(this.flatCoordinates, 0, coordinates, this.stride); + this.dispatchChangeEvent() + } +}; +ol.geom.LineString.prototype.setFlatCoordinates = function(layout, flatCoordinates) { + this.setFlatCoordinatesInternal(layout, flatCoordinates); + this.dispatchChangeEvent() +}; +goog.provide("ol.geom.MultiLineString"); +goog.require("goog.array"); +goog.require("goog.asserts"); +goog.require("ol.extent"); +goog.require("ol.geom.GeometryType"); +goog.require("ol.geom.LineString"); +goog.require("ol.geom.SimpleGeometry"); +goog.require("ol.geom.closest"); +goog.require("ol.geom.flat"); +goog.require("ol.geom.simplify"); +ol.geom.MultiLineString = function(coordinates, opt_layout) { + goog.base(this); + this.ends_ = []; + this.maxDelta_ = -1; + this.maxDeltaRevision_ = -1; + this.setCoordinates(coordinates, opt_layout) +}; +goog.inherits(ol.geom.MultiLineString, ol.geom.SimpleGeometry); +ol.geom.MultiLineString.prototype.clone = function() { + var multiLineString = new ol.geom.MultiLineString(null); + multiLineString.setFlatCoordinates(this.layout, this.flatCoordinates.slice(), this.ends_.slice()); + return multiLineString +}; +ol.geom.MultiLineString.prototype.closestPointXY = function(x, y, closestPoint, minSquaredDistance) { + if(minSquaredDistance < ol.extent.closestSquaredDistanceXY(this.getExtent(), x, y)) { + return minSquaredDistance + } + if(this.maxDeltaRevision_ != this.getRevision()) { + this.maxDelta_ = Math.sqrt(ol.geom.closest.getsMaxSquaredDelta(this.flatCoordinates, 0, this.ends_, this.stride, 0)); + this.maxDeltaRevision_ = this.getRevision() + } + return ol.geom.closest.getsClosestPoint(this.flatCoordinates, 0, this.ends_, this.stride, this.maxDelta_, false, x, y, closestPoint, minSquaredDistance) +}; +ol.geom.MultiLineString.prototype.getCoordinateAtM = function(m, opt_extrapolate, opt_interpolate) { + if(this.layout != ol.geom.GeometryLayout.XYM && this.layout != ol.geom.GeometryLayout.XYZM || this.flatCoordinates.length === 0) { + return null + } + var extrapolate = goog.isDef(opt_extrapolate) ? opt_extrapolate : false; + var interpolate = goog.isDef(opt_interpolate) ? opt_interpolate : false; + return ol.geom.flat.lineStringsCoordinateAtM(this.flatCoordinates, 0, this.ends_, this.stride, m, extrapolate, interpolate) +}; +ol.geom.MultiLineString.prototype.getCoordinates = function() { + return ol.geom.flat.inflateCoordinatess(this.flatCoordinates, 0, this.ends_, this.stride) +}; +ol.geom.MultiLineString.prototype.getEnds = function() { + return this.ends_ +}; +ol.geom.MultiLineString.prototype.getLineStrings = function() { + var coordinates = this.getCoordinates(); + var lineStrings = []; + var i, ii; + for(i = 0, ii = coordinates.length;i < ii;++i) { + lineStrings.push(new ol.geom.LineString(coordinates[i])) + } + return lineStrings +}; +ol.geom.MultiLineString.prototype.getFlatMidpoints = function() { + var midpoints = []; + var flatCoordinates = this.flatCoordinates; + var offset = 0; + var ends = this.ends_; + var stride = this.stride; + var i, ii; + for(i = 0, ii = ends.length;i < ii;++i) { + var end = ends[i]; + var midpoint = ol.geom.flat.lineStringInterpolate(flatCoordinates, offset, end, stride, 0.5); + goog.array.extend(midpoints, midpoint); + offset = end + } + return midpoints +}; +ol.geom.MultiLineString.prototype.getSimplifiedGeometryInternal = function(squaredTolerance) { + var simplifiedFlatCoordinates = []; + var simplifiedEnds = []; + simplifiedFlatCoordinates.length = ol.geom.simplify.douglasPeuckers(this.flatCoordinates, 0, this.ends_, this.stride, squaredTolerance, simplifiedFlatCoordinates, 0, simplifiedEnds); + var simplifiedMultiLineString = new ol.geom.MultiLineString(null); + simplifiedMultiLineString.setFlatCoordinates(ol.geom.GeometryLayout.XY, simplifiedFlatCoordinates, simplifiedEnds); + return simplifiedMultiLineString +}; +ol.geom.MultiLineString.prototype.getType = function() { + return ol.geom.GeometryType.MULTI_LINE_STRING +}; +ol.geom.MultiLineString.prototype.setCoordinates = function(coordinates, opt_layout) { + if(goog.isNull(coordinates)) { + this.setFlatCoordinates(ol.geom.GeometryLayout.XY, null, this.ends_) + }else { + this.setLayout(opt_layout, coordinates, 2); + if(goog.isNull(this.flatCoordinates)) { + this.flatCoordinates = [] + } + var ends = ol.geom.flat.deflateCoordinatess(this.flatCoordinates, 0, coordinates, this.stride, this.ends_); + this.flatCoordinates.length = ends.length === 0 ? 0 : ends[ends.length - 1]; + this.dispatchChangeEvent() + } +}; +ol.geom.MultiLineString.prototype.setFlatCoordinates = function(layout, flatCoordinates, ends) { + this.setFlatCoordinatesInternal(layout, flatCoordinates); + this.ends_ = ends; + this.dispatchChangeEvent() +}; +ol.geom.MultiLineString.prototype.setLineStrings = function(lineStrings) { + var layout = ol.geom.GeometryLayout.XY; + var flatCoordinates = []; + var ends = []; + var i, ii; + for(i = 0, ii = lineStrings.length;i < ii;++i) { + var lineString = lineStrings[i]; + if(i === 0) { + layout = lineString.getLayout() + }else { + goog.asserts.assert(lineString.getLayout() == layout) + } + goog.array.extend(flatCoordinates, lineString.getFlatCoordinates()); + ends.push(flatCoordinates.length) + } + this.setFlatCoordinates(layout, flatCoordinates, ends) +}; +goog.provide("ol.geom.MultiPoint"); +goog.require("ol.extent"); +goog.require("ol.geom.GeometryType"); +goog.require("ol.geom.Point"); +goog.require("ol.geom.SimpleGeometry"); +goog.require("ol.geom.flat"); +ol.geom.MultiPoint = function(coordinates, opt_layout) { + goog.base(this); + this.setCoordinates(coordinates, opt_layout) +}; +goog.inherits(ol.geom.MultiPoint, ol.geom.SimpleGeometry); +ol.geom.MultiPoint.prototype.clone = function() { + var multiPoint = new ol.geom.MultiPoint(null); + multiPoint.setFlatCoordinates(this.layout, this.flatCoordinates.slice()); + return multiPoint +}; +ol.geom.MultiPoint.prototype.closestPointXY = function(x, y, closestPoint, minSquaredDistance) { + if(minSquaredDistance < ol.extent.closestSquaredDistanceXY(this.getExtent(), x, y)) { + return minSquaredDistance + } + var flatCoordinates = this.flatCoordinates; + var stride = this.stride; + var i, ii, j; + for(i = 0, ii = flatCoordinates.length;i < ii;i += stride) { + var squaredDistance = ol.geom.flat.squaredDistance(x, y, flatCoordinates[i], flatCoordinates[i + 1]); + if(squaredDistance < minSquaredDistance) { + minSquaredDistance = squaredDistance; + for(j = 0;j < stride;++j) { + closestPoint[j] = flatCoordinates[i + j] + } + closestPoint.length = stride + } + } + return minSquaredDistance +}; +ol.geom.MultiPoint.prototype.getCoordinates = function() { + return ol.geom.flat.inflateCoordinates(this.flatCoordinates, 0, this.flatCoordinates.length, this.stride) +}; +ol.geom.MultiPoint.prototype.getPoints = function() { + var coordinates = this.getCoordinates(); + var points = []; + var i, ii; + for(i = 0, ii = coordinates.length;i < ii;++i) { + points.push(new ol.geom.Point(coordinates[i])) + } + return points +}; +ol.geom.MultiPoint.prototype.getType = function() { + return ol.geom.GeometryType.MULTI_POINT +}; +ol.geom.MultiPoint.prototype.setCoordinates = function(coordinates, opt_layout) { + if(goog.isNull(coordinates)) { + this.setFlatCoordinates(ol.geom.GeometryLayout.XY, null) + }else { + this.setLayout(opt_layout, coordinates, 1); + if(goog.isNull(this.flatCoordinates)) { + this.flatCoordinates = [] + } + this.flatCoordinates.length = ol.geom.flat.deflateCoordinates(this.flatCoordinates, 0, coordinates, this.stride); + this.dispatchChangeEvent() + } +}; +ol.geom.MultiPoint.prototype.setFlatCoordinates = function(layout, flatCoordinates) { + this.setFlatCoordinatesInternal(layout, flatCoordinates); + this.dispatchChangeEvent() +}; +goog.provide("ol.geom.MultiPolygon"); +goog.require("goog.array"); +goog.require("goog.asserts"); +goog.require("ol.extent"); +goog.require("ol.geom.GeometryType"); +goog.require("ol.geom.MultiPoint"); +goog.require("ol.geom.Polygon"); +goog.require("ol.geom.SimpleGeometry"); +goog.require("ol.geom.closest"); +goog.require("ol.geom.flat"); +goog.require("ol.geom.simplify"); +ol.geom.MultiPolygon = function(coordinates, opt_layout) { + goog.base(this); + this.endss_ = []; + this.flatInteriorPointsRevision_ = -1; + this.flatInteriorPoints_ = null; + this.maxDelta_ = -1; + this.maxDeltaRevision_ = -1; + this.orientedRevision_ = -1; + this.orientedFlatCoordinates_ = null; + this.setCoordinates(coordinates, opt_layout) +}; +goog.inherits(ol.geom.MultiPolygon, ol.geom.SimpleGeometry); +ol.geom.MultiPolygon.prototype.clone = function() { + var multiPolygon = new ol.geom.MultiPolygon(null); + multiPolygon.setFlatCoordinates(this.layout, this.flatCoordinates.slice(), this.endss_.slice()); + return multiPolygon +}; +ol.geom.MultiPolygon.prototype.closestPointXY = function(x, y, closestPoint, minSquaredDistance) { + if(minSquaredDistance < ol.extent.closestSquaredDistanceXY(this.getExtent(), x, y)) { + return minSquaredDistance + } + if(this.maxDeltaRevision_ != this.getRevision()) { + this.maxDelta_ = Math.sqrt(ol.geom.closest.getssMaxSquaredDelta(this.flatCoordinates, 0, this.endss_, this.stride, 0)); + this.maxDeltaRevision_ = this.getRevision() + } + return ol.geom.closest.getssClosestPoint(this.getOrientedFlatCoordinates(), 0, this.endss_, this.stride, this.maxDelta_, true, x, y, closestPoint, minSquaredDistance) +}; +ol.geom.MultiPolygon.prototype.containsXY = function(x, y) { + return ol.geom.flat.linearRingssContainsXY(this.getOrientedFlatCoordinates(), 0, this.endss_, this.stride, x, y) +}; +ol.geom.MultiPolygon.prototype.getArea = function() { + return ol.geom.flat.linearRingssArea(this.getOrientedFlatCoordinates(), 0, this.endss_, this.stride) +}; +ol.geom.MultiPolygon.prototype.getCoordinates = function() { + return ol.geom.flat.inflateCoordinatesss(this.flatCoordinates, 0, this.endss_, this.stride) +}; +ol.geom.MultiPolygon.prototype.getEndss = function() { + return this.endss_ +}; +ol.geom.MultiPolygon.prototype.getFlatInteriorPoints = function() { + if(this.flatInteriorPointsRevision_ != this.getRevision()) { + var flatCenters = ol.geom.flat.linearRingssGetFlatCenters(this.flatCoordinates, 0, this.endss_, this.stride); + this.flatInteriorPoints_ = ol.geom.flat.linearRingssGetInteriorPoints(this.getOrientedFlatCoordinates(), 0, this.endss_, this.stride, flatCenters); + this.flatInteriorPointsRevision_ = this.getRevision() + } + return this.flatInteriorPoints_ +}; +ol.geom.MultiPolygon.prototype.getInteriorPoints = function() { + var interiorPoints = new ol.geom.MultiPoint(null); + interiorPoints.setFlatCoordinates(ol.geom.GeometryLayout.XY, this.getFlatInteriorPoints().slice()); + return interiorPoints +}; +ol.geom.MultiPolygon.prototype.getOrientedFlatCoordinates = function() { + if(this.orientedRevision_ != this.getRevision()) { + var flatCoordinates = this.flatCoordinates; + if(ol.geom.flat.linearRingssAreOriented(flatCoordinates, 0, this.endss_, this.stride)) { + this.orientedFlatCoordinates_ = flatCoordinates + }else { + this.orientedFlatCoordinates_ = flatCoordinates.slice(); + this.orientedFlatCoordinates_.length = ol.geom.flat.orientLinearRingss(this.orientedFlatCoordinates_, 0, this.endss_, this.stride) + } + this.orientedRevision_ = this.getRevision() + } + return this.orientedFlatCoordinates_ +}; +ol.geom.MultiPolygon.prototype.getSimplifiedGeometryInternal = function(squaredTolerance) { + var simplifiedFlatCoordinates = []; + var simplifiedEndss = []; + simplifiedFlatCoordinates.length = ol.geom.simplify.quantizess(this.flatCoordinates, 0, this.endss_, this.stride, Math.sqrt(squaredTolerance), simplifiedFlatCoordinates, 0, simplifiedEndss); + var simplifiedMultiPolygon = new ol.geom.MultiPolygon(null); + simplifiedMultiPolygon.setFlatCoordinates(ol.geom.GeometryLayout.XY, simplifiedFlatCoordinates, simplifiedEndss); + return simplifiedMultiPolygon +}; +ol.geom.MultiPolygon.prototype.getPolygons = function() { + var layout = this.layout; + var flatCoordinates = this.flatCoordinates; + var endss = this.endss_; + var polygons = []; + var offset = 0; + var i, ii; + for(i = 0, ii = endss.length;i < ii;++i) { + var ends = endss[i]; + var end = ends[ends.length - 1]; + var polygon = new ol.geom.Polygon(null); + polygon.setFlatCoordinates(layout, flatCoordinates.slice(offset, end), ends.slice()); + polygons.push(polygon); + offset = end + } + return polygons +}; +ol.geom.MultiPolygon.prototype.getType = function() { + return ol.geom.GeometryType.MULTI_POLYGON +}; +ol.geom.MultiPolygon.prototype.setCoordinates = function(coordinates, opt_layout) { + if(goog.isNull(coordinates)) { + this.setFlatCoordinates(ol.geom.GeometryLayout.XY, null, this.endss_) + }else { + this.setLayout(opt_layout, coordinates, 3); + if(goog.isNull(this.flatCoordinates)) { + this.flatCoordinates = [] + } + var endss = ol.geom.flat.deflateCoordinatesss(this.flatCoordinates, 0, coordinates, this.stride, this.endss_); + var lastEnds = endss[endss.length - 1]; + this.flatCoordinates.length = lastEnds.length === 0 ? 0 : lastEnds[lastEnds.length - 1]; + this.dispatchChangeEvent() + } +}; +ol.geom.MultiPolygon.prototype.setFlatCoordinates = function(layout, flatCoordinates, endss) { + this.setFlatCoordinatesInternal(layout, flatCoordinates); + this.endss_ = endss; + this.dispatchChangeEvent() +}; +ol.geom.MultiPolygon.prototype.setPolygons = function(polygons) { + var layout = ol.geom.GeometryLayout.XY; + var flatCoordinates = []; + var endss = []; + var i, ii, ends; + for(i = 0, ii = polygons.length;i < ii;++i) { + var polygon = polygons[i]; + if(i === 0) { + layout = polygon.getLayout() + }else { + goog.asserts.assert(polygon.getLayout() == layout) + } + var offset = flatCoordinates.length; + ends = polygon.getEnds(); + var j, jj; + for(j = 0, jj = ends.length;j < jj;++j) { + ends[j] += offset + } + goog.array.extend(flatCoordinates, polygon.getFlatCoordinates()); + endss.push(ends) + } + this.setFlatCoordinates(layout, flatCoordinates, endss) +}; +goog.provide("ol.renderer.vector"); +goog.require("goog.asserts"); +goog.require("ol.geom.Circle"); +goog.require("ol.geom.GeometryCollection"); +goog.require("ol.geom.LineString"); +goog.require("ol.geom.MultiLineString"); +goog.require("ol.geom.MultiPoint"); +goog.require("ol.geom.MultiPolygon"); +goog.require("ol.geom.Point"); +goog.require("ol.geom.Polygon"); +goog.require("ol.render.IReplayGroup"); +goog.require("ol.style.ImageState"); +goog.require("ol.style.Style"); +ol.renderer.vector.renderCircleGeometry_ = function(replayGroup, geometry, style, data) { + goog.asserts.assertInstanceof(geometry, ol.geom.Circle); + var fillStyle = style.getFill(); + var strokeStyle = style.getStroke(); + if(!goog.isNull(fillStyle) || !goog.isNull(strokeStyle)) { + var polygonReplay = replayGroup.getReplay(style.getZIndex(), ol.render.ReplayType.POLYGON); + polygonReplay.setFillStrokeStyle(fillStyle, strokeStyle); + polygonReplay.drawCircleGeometry(geometry, data) + } + var textStyle = style.getText(); + if(!goog.isNull(textStyle)) { + var textReplay = replayGroup.getReplay(style.getZIndex(), ol.render.ReplayType.TEXT); + textReplay.setTextStyle(textStyle); + textReplay.drawText(geometry.getCenter(), 0, 2, 2, geometry, data) + } +}; +ol.renderer.vector.renderFeature = function(replayGroup, feature, style, squaredTolerance, data, listener, thisArg) { + var loading = false; + var imageStyle, imageState; + imageStyle = style.getImage(); + if(goog.isNull(imageStyle)) { + ol.renderer.vector.renderFeature_(replayGroup, feature, style, squaredTolerance, data) + }else { + imageState = imageStyle.getImageState(); + if(imageState == ol.style.ImageState.LOADED || imageState == ol.style.ImageState.ERROR) { + imageStyle.unlistenImageChange(listener, thisArg); + if(imageState == ol.style.ImageState.LOADED) { + ol.renderer.vector.renderFeature_(replayGroup, feature, style, squaredTolerance, data) + } + }else { + if(imageState == ol.style.ImageState.IDLE) { + imageStyle.load() + } + imageState = imageStyle.getImageState(); + goog.asserts.assert(imageState == ol.style.ImageState.LOADING); + imageStyle.listenImageChange(listener, thisArg); + loading = true + } + } + return loading +}; +ol.renderer.vector.renderFeature_ = function(replayGroup, feature, style, squaredTolerance, data) { + var geometry = feature.getGeometry(); + if(goog.isNull(geometry)) { + return + } + var simplifiedGeometry = geometry.getSimplifiedGeometry(squaredTolerance); + var geometryRenderer = ol.renderer.vector.GEOMETRY_RENDERERS_[simplifiedGeometry.getType()]; + goog.asserts.assert(goog.isDef(geometryRenderer)); + geometryRenderer(replayGroup, simplifiedGeometry, style, data) +}; +ol.renderer.vector.renderGeometryCollectionGeometry_ = function(replayGroup, geometry, style, data) { + goog.asserts.assertInstanceof(geometry, ol.geom.GeometryCollection); + var geometries = geometry.getGeometriesArray(); + var i, ii; + for(i = 0, ii = geometries.length;i < ii;++i) { + var geometryRenderer = ol.renderer.vector.GEOMETRY_RENDERERS_[geometries[i].getType()]; + goog.asserts.assert(goog.isDef(geometryRenderer)); + geometryRenderer(replayGroup, geometries[i], style, data) + } +}; +ol.renderer.vector.renderLineStringGeometry_ = function(replayGroup, geometry, style, data) { + goog.asserts.assertInstanceof(geometry, ol.geom.LineString); + var strokeStyle = style.getStroke(); + if(!goog.isNull(strokeStyle)) { + var lineStringReplay = replayGroup.getReplay(style.getZIndex(), ol.render.ReplayType.LINE_STRING); + lineStringReplay.setFillStrokeStyle(null, strokeStyle); + lineStringReplay.drawLineStringGeometry(geometry, data) + } + var textStyle = style.getText(); + if(!goog.isNull(textStyle)) { + var textReplay = replayGroup.getReplay(style.getZIndex(), ol.render.ReplayType.TEXT); + textReplay.setTextStyle(textStyle); + textReplay.drawText(geometry.getFlatMidpoint(), 0, 2, 2, geometry, data) + } +}; +ol.renderer.vector.renderMultiLineStringGeometry_ = function(replayGroup, geometry, style, data) { + goog.asserts.assertInstanceof(geometry, ol.geom.MultiLineString); + var strokeStyle = style.getStroke(); + if(!goog.isNull(strokeStyle)) { + var lineStringReplay = replayGroup.getReplay(style.getZIndex(), ol.render.ReplayType.LINE_STRING); + lineStringReplay.setFillStrokeStyle(null, strokeStyle); + lineStringReplay.drawMultiLineStringGeometry(geometry, data) + } + var textStyle = style.getText(); + if(!goog.isNull(textStyle)) { + var textReplay = replayGroup.getReplay(style.getZIndex(), ol.render.ReplayType.TEXT); + textReplay.setTextStyle(textStyle); + var flatMidpointCoordinates = geometry.getFlatMidpoints(); + textReplay.drawText(flatMidpointCoordinates, 0, flatMidpointCoordinates.length, 2, geometry, data) + } +}; +ol.renderer.vector.renderMultiPolygonGeometry_ = function(replayGroup, geometry, style, data) { + goog.asserts.assertInstanceof(geometry, ol.geom.MultiPolygon); + var fillStyle = style.getFill(); + var strokeStyle = style.getStroke(); + if(!goog.isNull(strokeStyle) || !goog.isNull(fillStyle)) { + var polygonReplay = replayGroup.getReplay(style.getZIndex(), ol.render.ReplayType.POLYGON); + polygonReplay.setFillStrokeStyle(fillStyle, strokeStyle); + polygonReplay.drawMultiPolygonGeometry(geometry, data) + } + var textStyle = style.getText(); + if(!goog.isNull(textStyle)) { + var textReplay = replayGroup.getReplay(style.getZIndex(), ol.render.ReplayType.TEXT); + textReplay.setTextStyle(textStyle); + var flatInteriorPointCoordinates = geometry.getFlatInteriorPoints(); + textReplay.drawText(flatInteriorPointCoordinates, 0, flatInteriorPointCoordinates.length, 2, geometry, data) + } +}; +ol.renderer.vector.renderPointGeometry_ = function(replayGroup, geometry, style, data) { + goog.asserts.assertInstanceof(geometry, ol.geom.Point); + var imageStyle = style.getImage(); + if(!goog.isNull(imageStyle)) { + var imageReplay = replayGroup.getReplay(style.getZIndex(), ol.render.ReplayType.IMAGE); + imageReplay.setImageStyle(imageStyle); + imageReplay.drawPointGeometry(geometry, data) + } + var textStyle = style.getText(); + if(!goog.isNull(textStyle)) { + var textReplay = replayGroup.getReplay(style.getZIndex(), ol.render.ReplayType.TEXT); + textReplay.setTextStyle(textStyle); + textReplay.drawText(geometry.getCoordinates(), 0, 2, 2, geometry, data) + } +}; +ol.renderer.vector.renderMultiPointGeometry_ = function(replayGroup, geometry, style, data) { + goog.asserts.assertInstanceof(geometry, ol.geom.MultiPoint); + var imageStyle = style.getImage(); + if(!goog.isNull(imageStyle)) { + var imageReplay = replayGroup.getReplay(style.getZIndex(), ol.render.ReplayType.IMAGE); + imageReplay.setImageStyle(imageStyle); + imageReplay.drawMultiPointGeometry(geometry, data) + } + var textStyle = style.getText(); + if(!goog.isNull(textStyle)) { + var textReplay = replayGroup.getReplay(style.getZIndex(), ol.render.ReplayType.TEXT); + textReplay.setTextStyle(textStyle); + var flatCoordinates = geometry.getFlatCoordinates(); + textReplay.drawText(flatCoordinates, 0, flatCoordinates.length, geometry.getStride(), geometry, data) + } +}; +ol.renderer.vector.renderPolygonGeometry_ = function(replayGroup, geometry, style, data) { + goog.asserts.assertInstanceof(geometry, ol.geom.Polygon); + var fillStyle = style.getFill(); + var strokeStyle = style.getStroke(); + if(!goog.isNull(fillStyle) || !goog.isNull(strokeStyle)) { + var polygonReplay = replayGroup.getReplay(style.getZIndex(), ol.render.ReplayType.POLYGON); + polygonReplay.setFillStrokeStyle(fillStyle, strokeStyle); + polygonReplay.drawPolygonGeometry(geometry, data) + } + var textStyle = style.getText(); + if(!goog.isNull(textStyle)) { + var textReplay = replayGroup.getReplay(style.getZIndex(), ol.render.ReplayType.TEXT); + textReplay.setTextStyle(textStyle); + textReplay.drawText(geometry.getFlatInteriorPoint(), 0, 2, 2, geometry, data) + } +}; +ol.renderer.vector.GEOMETRY_RENDERERS_ = {"Point":ol.renderer.vector.renderPointGeometry_, "LineString":ol.renderer.vector.renderLineStringGeometry_, "Polygon":ol.renderer.vector.renderPolygonGeometry_, "MultiPoint":ol.renderer.vector.renderMultiPointGeometry_, "MultiLineString":ol.renderer.vector.renderMultiLineStringGeometry_, "MultiPolygon":ol.renderer.vector.renderMultiPolygonGeometry_, "GeometryCollection":ol.renderer.vector.renderGeometryCollectionGeometry_, "Circle":ol.renderer.vector.renderCircleGeometry_}; +goog.provide("ol.structs.RBush"); +goog.require("goog.array"); +goog.require("goog.asserts"); +goog.require("goog.object"); +goog.require("ol.extent"); +ol.structs.RBushNode = function(extent, height, children, value) { + if(height === 0) { + goog.asserts.assert(goog.isNull(children)); + goog.asserts.assert(!goog.isNull(value)) + }else { + goog.asserts.assert(!goog.isNull(children)); + goog.asserts.assert(goog.isNull(value)) + } + this.extent = extent; + this.height = height; + this.children = children; + this.value = value +}; +ol.structs.RBushNode.compareMinX = function(node1, node2) { + return node1.extent[0] - node2.extent[0] +}; +ol.structs.RBushNode.compareMinY = function(node1, node2) { + return node1.extent[1] - node2.extent[1] +}; +ol.structs.RBushNode.prototype.assertValid = function(maxEntries) { + if(this.height === 0) { + goog.asserts.assert(goog.isNull(this.children)); + goog.asserts.assert(!goog.isNull(this.value)) + }else { + goog.asserts.assert(!goog.isNull(this.children)); + goog.asserts.assert(goog.isNull(this.value)); + goog.asserts.assert(this.children.length <= maxEntries); + var i, ii; + for(i = 0, ii = this.children.length;i < ii;++i) { + var child = this.children[i]; + goog.asserts.assert(ol.extent.containsExtent(this.extent, child.extent)); + child.assertValid(maxEntries) + } + } +}; +ol.structs.RBushNode.prototype.getChildrenExtent = function(start, stop, opt_extent) { + goog.asserts.assert(!this.isLeaf()); + var children = this.children; + var extent = ol.extent.createOrUpdateEmpty(opt_extent); + var i; + for(i = start;i < stop;++i) { + ol.extent.extend(extent, children[i].extent) + } + return extent +}; +ol.structs.RBushNode.prototype.remove = function(extent, value, path) { + var children = this.children; + var ii = children.length; + var child, i; + if(this.height == 1) { + for(i = 0;i < ii;++i) { + child = children[i]; + if(child.value === value) { + goog.array.removeAt(children, i); + return true + } + } + }else { + goog.asserts.assert(this.height > 1); + for(i = 0;i < ii;++i) { + child = children[i]; + if(ol.extent.containsExtent(child.extent, extent)) { + path.push(child); + if(child.remove(extent, value, path)) { + return true + } + path.pop() + } + } + } + return false +}; +ol.structs.RBushNode.prototype.updateExtent = function() { + goog.asserts.assert(!this.isLeaf()); + var extent = ol.extent.createOrUpdateEmpty(this.extent); + var children = this.children; + var i, ii; + for(i = 0, ii = children.length;i < ii;++i) { + ol.extent.extend(extent, children[i].extent) + } +}; +ol.structs.RBushNode.prototype.isLeaf = function() { + return goog.isNull(this.children) +}; +ol.structs.RBush = function(opt_maxEntries) { + this.maxEntries_ = Math.max(4, goog.isDef(opt_maxEntries) ? opt_maxEntries : 9); + this.minEntries_ = Math.max(2, Math.ceil(0.4 * this.maxEntries_)); + this.root_ = new ol.structs.RBushNode(ol.extent.createEmpty(), 1, [], null); + this.valueExtent_ = {}; + if(goog.DEBUG) { + this.readers_ = 0 + } +}; +ol.structs.RBush.prototype.allDistMargin_ = function(node, compare) { + var children = node.children; + var m = this.minEntries_; + var M = children.length; + var i; + goog.array.sort(children, compare); + var leftExtent = node.getChildrenExtent(0, m); + var rightExtent = node.getChildrenExtent(M - m, M); + var margin = ol.extent.getMargin(leftExtent) + ol.extent.getMargin(rightExtent); + for(i = m;i < M - m;++i) { + ol.extent.extend(leftExtent, children[i].extent); + margin += ol.extent.getMargin(leftExtent) + } + for(i = M - m - 1;i >= m;--i) { + ol.extent.extend(rightExtent, children[i].extent); + margin += ol.extent.getMargin(rightExtent) + } + return margin +}; +ol.structs.RBush.prototype.assertValid = function() { + this.root_.assertValid(this.maxEntries_) +}; +ol.structs.RBush.prototype.chooseSplitAxis_ = function(node) { + var xMargin = this.allDistMargin_(node, ol.structs.RBushNode.compareMinX); + var yMargin = this.allDistMargin_(node, ol.structs.RBushNode.compareMinY); + if(xMargin < yMargin) { + goog.array.sort(node.children, ol.structs.RBushNode.compareMinX) + } +}; +ol.structs.RBush.prototype.chooseSplitIndex_ = function(node) { + var children = node.children; + var m = this.minEntries_; + var M = children.length; + var minOverlap = Infinity; + var minArea = Infinity; + var extent1 = ol.extent.createEmpty(); + var extent2 = ol.extent.createEmpty(); + var index = 0; + var i; + for(i = m;i <= M - m;++i) { + extent1 = node.getChildrenExtent(0, i, extent1); + extent2 = node.getChildrenExtent(i, M, extent2); + var overlap = ol.extent.getIntersectionArea(extent1, extent2); + var area = ol.extent.getArea(extent1) + ol.extent.getArea(extent2); + if(overlap < minOverlap) { + minOverlap = overlap; + minArea = Math.min(area, minArea); + index = i + }else { + if(overlap == minOverlap && area < minArea) { + minArea = area; + index = i + } + } + } + return index +}; +ol.structs.RBush.prototype.chooseSubtree_ = function(extent, node, level, path) { + while(!node.isLeaf() && path.length - 1 != level) { + var minArea = Infinity; + var minEnlargement = Infinity; + var children = node.children; + var bestChild = null; + var i, ii; + for(i = 0, ii = children.length;i < ii;++i) { + var child = children[i]; + var area = ol.extent.getArea(child.extent); + var enlargement = ol.extent.getEnlargedArea(child.extent, extent) - area; + if(enlargement < minEnlargement) { + minEnlargement = enlargement; + minArea = Math.min(area, minArea); + bestChild = child + }else { + if(enlargement == minEnlargement && area < minArea) { + minArea = area; + bestChild = child + } + } + } + goog.asserts.assert(!goog.isNull(bestChild)); + node = bestChild; + path.push(node) + } + return node +}; +ol.structs.RBush.prototype.clear = function() { + var node = this.root_; + node.extent = ol.extent.createOrUpdateEmpty(this.root_.extent); + node.height = 1; + node.children.length = 0; + node.value = null; + goog.object.clear(this.valueExtent_) +}; +ol.structs.RBush.prototype.condense_ = function(path) { + var i; + for(i = path.length - 1;i >= 0;--i) { + var node = path[i]; + if(node.children.length === 0) { + if(i > 0) { + goog.array.remove(path[i - 1].children, node) + }else { + this.clear() + } + }else { + node.updateExtent() + } + } +}; +ol.structs.RBush.prototype.forEach = function(callback, opt_this) { + if(goog.DEBUG) { + ++this.readers_; + try { + return this.forEach_(this.root_, callback, opt_this) + }finally { + --this.readers_ + } + }else { + return this.forEach_(this.root_, callback, opt_this) + } +}; +ol.structs.RBush.prototype.forEach_ = function(node, callback, opt_this) { + goog.asserts.assert(!node.isLeaf()); + var toVisit = [node]; + var children, i, ii, result; + while(toVisit.length > 0) { + node = toVisit.pop(); + children = node.children; + if(node.height == 1) { + for(i = 0, ii = children.length;i < ii;++i) { + result = callback.call(opt_this, children[i].value); + if(result) { + return result + } + } + }else { + toVisit.push.apply(toVisit, children) + } + } +}; +ol.structs.RBush.prototype.forEachInExtent = function(extent, callback, opt_this) { + if(goog.DEBUG) { + ++this.readers_; + try { + return this.forEachInExtent_(extent, callback, opt_this) + }finally { + --this.readers_ + } + }else { + return this.forEachInExtent_(extent, callback, opt_this) + } +}; +ol.structs.RBush.prototype.forEachInExtent_ = function(extent, callback, opt_this) { + var toVisit = [this.root_]; + var result; + while(toVisit.length > 0) { + var node = toVisit.pop(); + if(ol.extent.intersects(extent, node.extent)) { + if(node.isLeaf()) { + result = callback.call(opt_this, node.value); + if(result) { + return result + } + }else { + if(ol.extent.containsExtent(extent, node.extent)) { + result = this.forEach_(node, callback, opt_this); + if(result) { + return result + } + }else { + toVisit.push.apply(toVisit, node.children) + } + } + } + } + return undefined +}; +ol.structs.RBush.prototype.forEachNode = function(callback, opt_this) { + var toVisit = [this.root_]; + while(toVisit.length > 0) { + var node = toVisit.pop(); + var result = callback.call(opt_this, node); + if(result) { + return result + } + if(!node.isLeaf()) { + toVisit.push.apply(toVisit, node.children) + } + } + return undefined +}; +ol.structs.RBush.prototype.getAll = function() { + var values = []; + this.forEach(function(value) { + values.push(value) + }); + return values +}; +ol.structs.RBush.prototype.getInExtent = function(extent) { + var values = []; + this.forEachInExtent(extent, function(value) { + values.push(value) + }); + return values +}; +ol.structs.RBush.prototype.getExtent = function(opt_extent) { + return ol.extent.returnOrUpdate(this.root_.extent, opt_extent) +}; +ol.structs.RBush.prototype.getKey_ = function(value) { + goog.asserts.assert(goog.isObject(value)); + return goog.getUid(value).toString() +}; +ol.structs.RBush.prototype.insert = function(extent, value) { + if(goog.DEBUG && this.readers_) { + throw new Error("cannot insert value while reading"); + } + var key = this.getKey_(value); + goog.asserts.assert(!this.valueExtent_.hasOwnProperty(key)); + this.insert_(extent, value, this.root_.height - 1); + this.valueExtent_[key] = ol.extent.clone(extent) +}; +ol.structs.RBush.prototype.insert_ = function(extent, value, level) { + var path = [this.root_]; + var node = this.chooseSubtree_(extent, this.root_, level, path); + node.children.push(new ol.structs.RBushNode(extent, 0, null, value)); + ol.extent.extend(node.extent, extent); + var i; + for(i = path.length - 1;i >= 0;--i) { + if(path[i].children.length > this.maxEntries_) { + this.split_(path, i) + }else { + break + } + } + for(;i >= 0;--i) { + ol.extent.extend(path[i].extent, extent) + } + return node +}; +ol.structs.RBush.prototype.isEmpty = function() { + return this.root_.children.length === 0 +}; +ol.structs.RBush.prototype.remove = function(value) { + if(goog.DEBUG && this.readers_) { + throw new Error("cannot remove value while reading"); + } + var key = this.getKey_(value); + goog.asserts.assert(this.valueExtent_.hasOwnProperty(key)); + var extent = this.valueExtent_[key]; + delete this.valueExtent_[key]; + return this.remove_(extent, value) +}; +ol.structs.RBush.prototype.remove_ = function(extent, value) { + var root = this.root_; + var path = [root]; + var removed = root.remove(extent, value, path); + if(removed) { + this.condense_(path) + }else { + goog.asserts.assert(path.length == 1); + goog.asserts.assert(path[0] === root) + } + return removed +}; +ol.structs.RBush.prototype.split_ = function(path, level) { + var node = path[level]; + this.chooseSplitAxis_(node); + var splitIndex = this.chooseSplitIndex_(node); + var newChildren = node.children.splice(splitIndex); + var newNode = new ol.structs.RBushNode(ol.extent.createEmpty(), node.height, newChildren, null); + node.updateExtent(); + newNode.updateExtent(); + if(level) { + path[level - 1].children.push(newNode) + }else { + this.splitRoot_(node, newNode) + } +}; +ol.structs.RBush.prototype.splitRoot_ = function(node1, node2) { + goog.asserts.assert(node1 === this.root_); + var height = node1.height + 1; + var extent = ol.extent.extend(node1.extent.slice(), node2.extent); + var children = [node1, node2]; + this.root_ = new ol.structs.RBushNode(extent, height, children, null) +}; +ol.structs.RBush.prototype.update = function(extent, value) { + if(goog.DEBUG && this.readers_) { + throw new Error("cannot update value while reading"); + } + var key = this.getKey_(value); + var currentExtent = this.valueExtent_[key]; + goog.asserts.assert(goog.isDef(currentExtent)); + if(!ol.extent.equals(currentExtent, extent)) { + var removed = this.remove_(currentExtent, value); + goog.asserts.assert(removed); + this.insert_(extent, value, this.root_.height - 1); + this.valueExtent_[key] = ol.extent.clone(extent, currentExtent) + } +}; +goog.provide("ol.source.Vector"); +goog.provide("ol.source.VectorEvent"); +goog.provide("ol.source.VectorEventType"); +goog.require("goog.array"); +goog.require("goog.asserts"); +goog.require("goog.events"); +goog.require("goog.events.Event"); +goog.require("goog.events.EventType"); +goog.require("goog.object"); +goog.require("ol.source.Source"); +goog.require("ol.structs.RBush"); +ol.source.VectorEventType = {ADDFEATURE:"addfeature", REMOVEFEATURE:"removefeature"}; +ol.source.Vector = function(opt_options) { + var options = goog.isDef(opt_options) ? opt_options : {}; + goog.base(this, {attributions:options.attributions, extent:options.extent, logo:options.logo, projection:options.projection, state:options.state}); + this.rBush_ = new ol.structs.RBush; + this.nullGeometryFeatures_ = {}; + this.featureChangeKeys_ = {}; + if(goog.isDef(options.features)) { + this.addFeaturesInternal(options.features) + } +}; +goog.inherits(ol.source.Vector, ol.source.Source); +ol.source.Vector.prototype.addFeature = function(feature) { + this.addFeatureInternal(feature); + this.dispatchChangeEvent() +}; +ol.source.Vector.prototype.addFeatureInternal = function(feature) { + var featureKey = goog.getUid(feature).toString(); + goog.asserts.assert(!(featureKey in this.featureChangeKeys_)); + this.featureChangeKeys_[featureKey] = goog.events.listen(feature, goog.events.EventType.CHANGE, this.handleFeatureChange_, false, this); + var geometry = feature.getGeometry(); + if(goog.isNull(geometry)) { + this.nullGeometryFeatures_[goog.getUid(feature).toString()] = feature + }else { + var extent = geometry.getExtent(); + this.rBush_.insert(extent, feature) + } + this.dispatchEvent(new ol.source.VectorEvent(ol.source.VectorEventType.ADDFEATURE, feature)) +}; +ol.source.Vector.prototype.addFeatures = function(features) { + this.addFeaturesInternal(features); + this.dispatchChangeEvent() +}; +ol.source.Vector.prototype.addFeaturesInternal = function(features) { + var i, ii; + for(i = 0, ii = features.length;i < ii;++i) { + this.addFeatureInternal(features[i]) + } +}; +ol.source.Vector.prototype.clear = function() { + this.rBush_.forEach(this.removeFeatureInternal, this); + this.rBush_.clear(); + goog.object.forEach(this.nullGeometryFeatures_, this.removeFeatureInternal, this); + goog.object.clear(this.nullGeometryFeatures_); + goog.asserts.assert(goog.object.isEmpty(this.featureChangeKeys_)); + this.dispatchChangeEvent() +}; +ol.source.Vector.prototype.forEachFeature = function(f, opt_this) { + return this.rBush_.forEach(f, opt_this) +}; +ol.source.Vector.prototype.forEachFeatureAtCoordinate = function(coordinate, f, opt_this) { + var extent = [coordinate[0], coordinate[1], coordinate[0], coordinate[1]]; + return this.forEachFeatureInExtent(extent, function(feature) { + var geometry = feature.getGeometry(); + goog.asserts.assert(!goog.isNull(geometry)); + if(geometry.containsCoordinate(coordinate)) { + return f.call(opt_this, feature) + }else { + return undefined + } + }) +}; +ol.source.Vector.prototype.forEachFeatureInExtent = function(extent, f, opt_this) { + return this.rBush_.forEachInExtent(extent, f, opt_this) +}; +ol.source.Vector.prototype.getFeatures = function() { + var features = this.rBush_.getAll(); + if(!goog.object.isEmpty(this.nullGeometryFeatures_)) { + goog.array.extend(features, goog.object.getValues(this.nullGeometryFeatures_)) + } + return features +}; +ol.source.Vector.prototype.getFeaturesAtCoordinate = function(coordinate) { + var features = []; + this.forEachFeatureAtCoordinate(coordinate, function(feature) { + features.push(feature) + }); + return features +}; +ol.source.Vector.prototype.getFeaturesInExtent = function(extent) { + return this.rBush_.getInExtent(extent) +}; +ol.source.Vector.prototype.getClosestFeatureToCoordinate = function(coordinate) { + var x = coordinate[0]; + var y = coordinate[1]; + var closestFeature = null; + var closestPoint = [NaN, NaN]; + var minSquaredDistance = Infinity; + var extent = [-Infinity, -Infinity, Infinity, Infinity]; + this.rBush_.forEachInExtent(extent, function(feature) { + var geometry = feature.getGeometry(); + goog.asserts.assert(!goog.isNull(geometry)); + var previousMinSquaredDistance = minSquaredDistance; + minSquaredDistance = geometry.closestPointXY(x, y, closestPoint, minSquaredDistance); + if(minSquaredDistance < previousMinSquaredDistance) { + closestFeature = feature; + var minDistance = Math.sqrt(minSquaredDistance); + extent[0] = x - minDistance; + extent[1] = y - minDistance; + extent[2] = x + minDistance; + extent[3] = y + minDistance + } + }); + return closestFeature +}; +ol.source.Vector.prototype.getExtent = function() { + return this.rBush_.getExtent() +}; +ol.source.Vector.prototype.handleFeatureChange_ = function(event) { + var feature = (event.target); + var featureKey = goog.getUid(feature).toString(); + var geometry = feature.getGeometry(); + if(goog.isNull(geometry)) { + if(!(featureKey in this.nullGeometryFeatures_)) { + this.rBush_.remove(feature); + this.nullGeometryFeatures_[featureKey] = feature + } + }else { + var extent = geometry.getExtent(); + if(featureKey in this.nullGeometryFeatures_) { + delete this.nullGeometryFeatures_[featureKey]; + this.rBush_.insert(extent, feature) + }else { + this.rBush_.update(extent, feature) + } + } + this.dispatchChangeEvent() +}; +ol.source.Vector.prototype.isEmpty = function() { + return this.rBush_.isEmpty() && goog.object.isEmpty(this.nullGeometryFeatures_) +}; +ol.source.Vector.prototype.removeFeature = function(feature) { + var featureKey = goog.getUid(feature).toString(); + if(featureKey in this.nullGeometryFeatures_) { + delete this.nullGeometryFeatures_[featureKey] + }else { + this.rBush_.remove(feature) + } + this.removeFeatureInternal(feature); + this.dispatchChangeEvent() +}; +ol.source.Vector.prototype.removeFeatureInternal = function(feature) { + var featureKey = goog.getUid(feature).toString(); + goog.asserts.assert(featureKey in this.featureChangeKeys_); + goog.events.unlistenByKey(this.featureChangeKeys_[featureKey]); + delete this.featureChangeKeys_[featureKey]; + this.dispatchEvent(new ol.source.VectorEvent(ol.source.VectorEventType.REMOVEFEATURE, feature)) +}; +ol.source.VectorEvent = function(type, opt_feature) { + goog.base(this, type); + this.feature = opt_feature +}; +goog.inherits(ol.source.VectorEvent, goog.events.Event); +goog.provide("ol.renderer.canvas.VectorLayer"); +goog.require("goog.asserts"); +goog.require("goog.dom"); +goog.require("goog.dom.TagName"); +goog.require("goog.events"); +goog.require("goog.functions"); +goog.require("ol.ViewHint"); +goog.require("ol.extent"); +goog.require("ol.feature"); +goog.require("ol.layer.Vector"); +goog.require("ol.render.EventType"); +goog.require("ol.render.canvas.ReplayGroup"); +goog.require("ol.renderer.canvas.Layer"); +goog.require("ol.renderer.vector"); +goog.require("ol.source.Vector"); +ol.renderer.canvas.VectorLayer = function(mapRenderer, vectorLayer) { + goog.base(this, mapRenderer, vectorLayer); + this.dirty_ = false; + this.renderedRevision_ = -1; + this.renderedResolution_ = NaN; + this.renderedExtent_ = ol.extent.createEmpty(); + this.replayGroup_ = null; + var canvas = (goog.dom.createElement(goog.dom.TagName.CANVAS)); + this.context_ = (canvas.getContext("2d")) +}; +goog.inherits(ol.renderer.canvas.VectorLayer, ol.renderer.canvas.Layer); +ol.renderer.canvas.VectorLayer.prototype.composeFrame = function(frameState, layerState, context) { + var transform = this.getTransform(frameState); + this.dispatchPreComposeEvent(context, frameState, transform); + var replayGroup = this.replayGroup_; + if(!goog.isNull(replayGroup) && !replayGroup.isEmpty()) { + var layer = this.getLayer(); + var replayContext; + if(layer.hasListener(ol.render.EventType.RENDER)) { + this.context_.canvas.width = context.canvas.width; + this.context_.canvas.height = context.canvas.height; + replayContext = this.context_ + }else { + replayContext = context + } + var renderGeometryFunction = this.getRenderGeometryFunction_(); + goog.asserts.assert(goog.isFunction(renderGeometryFunction)); + replayContext.globalAlpha = layerState.opacity; + replayGroup.replay(replayContext, frameState.extent, frameState.pixelRatio, transform, frameState.view2DState.rotation, renderGeometryFunction); + if(replayContext != context) { + this.dispatchRenderEvent(replayContext, frameState, transform); + context.drawImage(replayContext.canvas, 0, 0) + } + } + this.dispatchPostComposeEvent(context, frameState, transform) +}; +ol.renderer.canvas.VectorLayer.prototype.forEachFeatureAtPixel = function(coordinate, frameState, callback, thisArg) { + if(goog.isNull(this.replayGroup_)) { + return undefined + }else { + var extent = frameState.extent; + var resolution = frameState.view2DState.resolution; + var rotation = frameState.view2DState.rotation; + var layer = this.getLayer(); + var renderGeometryFunction = this.getRenderGeometryFunction_(); + goog.asserts.assert(goog.isFunction(renderGeometryFunction)); + return this.replayGroup_.forEachGeometryAtPixel(extent, resolution, rotation, coordinate, renderGeometryFunction, function(geometry, data) { + var feature = (data); + goog.asserts.assert(goog.isDef(feature)); + return callback.call(thisArg, feature, layer) + }) + } +}; +ol.renderer.canvas.VectorLayer.prototype.getRenderGeometryFunction_ = function() { + var vectorLayer = this.getLayer(); + goog.asserts.assertInstanceof(vectorLayer, ol.layer.Vector); + var renderGeometryFunctions = vectorLayer.getRenderGeometryFunctions(); + if(!goog.isDef(renderGeometryFunctions)) { + return goog.functions.TRUE + } + var renderGeometryFunctionsArray = renderGeometryFunctions.getArray(); + switch(renderGeometryFunctionsArray.length) { + case 0: + return goog.functions.TRUE; + case 1: + return renderGeometryFunctionsArray[0]; + default: + return function(geometry) { + var i, ii; + for(i = 0, ii = renderGeometryFunctionsArray.length;i < ii;++i) { + if(!renderGeometryFunctionsArray[i](geometry)) { + return false + } + } + return true + } + } +}; +ol.renderer.canvas.VectorLayer.prototype.handleImageChange_ = function(event) { + this.renderIfReadyAndVisible() +}; +ol.renderer.canvas.VectorLayer.prototype.prepareFrame = function(frameState, layerState) { + var vectorLayer = this.getLayer(); + goog.asserts.assertInstanceof(vectorLayer, ol.layer.Vector); + var vectorSource = vectorLayer.getSource(); + goog.asserts.assertInstanceof(vectorSource, ol.source.Vector); + this.updateAttributions(frameState.attributions, vectorSource.getAttributions()); + this.updateLogos(frameState, vectorSource); + if(!this.dirty_ && (frameState.viewHints[ol.ViewHint.ANIMATING] || frameState.viewHints[ol.ViewHint.INTERACTING])) { + return + } + var frameStateExtent = frameState.extent; + var frameStateResolution = frameState.view2DState.resolution; + var pixelRatio = frameState.pixelRatio; + var vectorLayerRevision = vectorLayer.getRevision(); + if(!this.dirty_ && this.renderedResolution_ == frameStateResolution && this.renderedRevision_ == vectorLayerRevision && ol.extent.containsExtent(this.renderedExtent_, frameStateExtent)) { + return + } + var extent = this.renderedExtent_; + var xBuffer = ol.extent.getWidth(frameStateExtent) / 4; + var yBuffer = ol.extent.getHeight(frameStateExtent) / 4; + extent[0] = frameStateExtent[0] - xBuffer; + extent[1] = frameStateExtent[1] - yBuffer; + extent[2] = frameStateExtent[2] + xBuffer; + extent[3] = frameStateExtent[3] + yBuffer; + goog.dispose(this.replayGroup_); + this.replayGroup_ = null; + this.dirty_ = false; + var styleFunction = vectorLayer.getStyleFunction(); + if(!goog.isDef(styleFunction)) { + styleFunction = ol.feature.defaultStyleFunction + } + var tolerance = frameStateResolution / (2 * pixelRatio); + var replayGroup = new ol.render.canvas.ReplayGroup(tolerance, extent); + vectorSource.forEachFeatureInExtent(extent, function(feature) { + var dirty = this.renderFeature(feature, frameStateResolution, pixelRatio, styleFunction, replayGroup); + this.dirty_ = this.dirty_ || dirty + }, this); + replayGroup.finish(); + this.renderedResolution_ = frameStateResolution; + this.renderedRevision_ = vectorLayerRevision; + this.replayGroup_ = replayGroup +}; +ol.renderer.canvas.VectorLayer.prototype.renderFeature = function(feature, resolution, pixelRatio, styleFunction, replayGroup) { + var styles = styleFunction(feature, resolution); + if(!goog.isDefAndNotNull(styles)) { + return false + } + var squaredTolerance = resolution * resolution / (4 * pixelRatio * pixelRatio); + var i, ii, loading = false; + for(i = 0, ii = styles.length;i < ii;++i) { + loading = ol.renderer.vector.renderFeature(replayGroup, feature, styles[i], squaredTolerance, feature, this.handleImageChange_, this) || loading + } + return loading +}; +goog.provide("ol.renderer.canvas.Map"); +goog.require("goog.asserts"); +goog.require("goog.dom"); +goog.require("goog.dom.TagName"); +goog.require("goog.style"); +goog.require("goog.vec.Mat4"); +goog.require("ol.css"); +goog.require("ol.layer.Image"); +goog.require("ol.layer.Tile"); +goog.require("ol.layer.Vector"); +goog.require("ol.render.Event"); +goog.require("ol.render.EventType"); +goog.require("ol.render.canvas.Immediate"); +goog.require("ol.renderer.Map"); +goog.require("ol.renderer.canvas.ImageLayer"); +goog.require("ol.renderer.canvas.Layer"); +goog.require("ol.renderer.canvas.TileLayer"); +goog.require("ol.renderer.canvas.VectorLayer"); +goog.require("ol.source.State"); +goog.require("ol.vec.Mat4"); +ol.renderer.canvas.Map = function(container, map) { + goog.base(this, container, map); + this.canvas_ = (goog.dom.createElement(goog.dom.TagName.CANVAS)); + this.canvas_.style.width = "100%"; + this.canvas_.style.height = "100%"; + this.canvas_.className = ol.css.CLASS_UNSELECTABLE; + goog.dom.insertChildAt(container, this.canvas_, 0); + this.renderedVisible_ = true; + this.context_ = (this.canvas_.getContext("2d")); + this.transform_ = goog.vec.Mat4.createNumber() +}; +goog.inherits(ol.renderer.canvas.Map, ol.renderer.Map); +ol.renderer.canvas.Map.prototype.createLayerRenderer = function(layer) { + if(ol.ENABLE_IMAGE && layer instanceof ol.layer.Image) { + return new ol.renderer.canvas.ImageLayer(this, layer) + }else { + if(ol.ENABLE_TILE && layer instanceof ol.layer.Tile) { + return new ol.renderer.canvas.TileLayer(this, layer) + }else { + if(ol.ENABLE_VECTOR && layer instanceof ol.layer.Vector) { + return new ol.renderer.canvas.VectorLayer(this, layer) + }else { + goog.asserts.fail(); + return null + } + } + } +}; +ol.renderer.canvas.Map.prototype.dispatchComposeEvent_ = function(type, frameState) { + var map = this.getMap(); + var context = this.context_; + if(map.hasListener(type)) { + var view2DState = frameState.view2DState; + var pixelRatio = frameState.pixelRatio; + ol.vec.Mat4.makeTransform2D(this.transform_, this.canvas_.width / 2, this.canvas_.height / 2, pixelRatio / view2DState.resolution, -pixelRatio / view2DState.resolution, -view2DState.rotation, -view2DState.center[0], -view2DState.center[1]); + var render = new ol.render.canvas.Immediate(context, pixelRatio, frameState.extent, this.transform_, view2DState.rotation); + var composeEvent = new ol.render.Event(type, map, render, frameState, context, null); + map.dispatchEvent(composeEvent); + render.flush() + } +}; +ol.renderer.canvas.Map.prototype.getCanvasLayerRenderer = function(layer) { + var layerRenderer = this.getLayerRenderer(layer); + goog.asserts.assertInstanceof(layerRenderer, ol.renderer.canvas.Layer); + return(layerRenderer) +}; +ol.renderer.canvas.Map.prototype.renderFrame = function(frameState) { + if(goog.isNull(frameState)) { + if(this.renderedVisible_) { + goog.style.setElementShown(this.canvas_, false); + this.renderedVisible_ = false + } + return + } + var context = this.context_; + var width = frameState.size[0] * frameState.pixelRatio; + var height = frameState.size[1] * frameState.pixelRatio; + if(this.canvas_.width != width || this.canvas_.height != height) { + this.canvas_.width = width; + this.canvas_.height = height + }else { + context.clearRect(0, 0, this.canvas_.width, this.canvas_.height) + } + this.calculateMatrices2D(frameState); + this.dispatchComposeEvent_(ol.render.EventType.PRECOMPOSE, frameState); + var layerStates = frameState.layerStates; + var layersArray = frameState.layersArray; + var viewResolution = frameState.view2DState.resolution; + var i, ii, layer, layerRenderer, layerState; + for(i = 0, ii = layersArray.length;i < ii;++i) { + layer = layersArray[i]; + layerRenderer = this.getLayerRenderer(layer); + goog.asserts.assertInstanceof(layerRenderer, ol.renderer.canvas.Layer); + layerState = layerStates[goog.getUid(layer)]; + if(!layerState.visible || layerState.sourceState != ol.source.State.READY || viewResolution >= layerState.maxResolution || viewResolution < layerState.minResolution) { + continue + } + layerRenderer.prepareFrame(frameState, layerState); + layerRenderer.composeFrame(frameState, layerState, context) + } + this.dispatchComposeEvent_(ol.render.EventType.POSTCOMPOSE, frameState); + if(!this.renderedVisible_) { + goog.style.setElementShown(this.canvas_, true); + this.renderedVisible_ = true + } + this.scheduleRemoveUnusedLayerRenderers(frameState); + this.scheduleExpireIconCache(frameState) +}; +goog.provide("ol.dom"); +goog.provide("ol.dom.BrowserFeature"); +goog.require("goog.asserts"); +goog.require("goog.dom"); +goog.require("goog.dom.TagName"); +goog.require("goog.style"); +goog.require("goog.userAgent"); +goog.require("goog.vec.Mat4"); +ol.dom.BrowserFeature = {USE_MS_MATRIX_TRANSFORM:ol.LEGACY_IE_SUPPORT && ol.IS_LEGACY_IE, USE_MS_ALPHA_FILTER:ol.LEGACY_IE_SUPPORT && ol.IS_LEGACY_IE}; +ol.dom.canUseCssTransform = function() { + var canUseCssTransform; + return function() { + if(!goog.isDef(canUseCssTransform)) { + goog.asserts.assert(!goog.isNull(document.body)); + if(!goog.global.getComputedStyle) { + canUseCssTransform = false + }else { + var el = goog.dom.createElement(goog.dom.TagName.P), has2d, transforms = {"webkitTransform":"-webkit-transform", "OTransform":"-o-transform", "msTransform":"-ms-transform", "MozTransform":"-moz-transform", "transform":"transform"}; + goog.dom.appendChild(document.body, el); + for(var t in transforms) { + if(t in el.style) { + el.style[t] = "translate(1px,1px)"; + has2d = goog.global.getComputedStyle(el).getPropertyValue(transforms[t]) + } + } + goog.dom.removeNode(el); + canUseCssTransform = has2d && has2d !== "none" + } + } + return canUseCssTransform + } +}(); +ol.dom.canUseCssTransform3D = function() { + var canUseCssTransform3D; + return function() { + if(!goog.isDef(canUseCssTransform3D)) { + goog.asserts.assert(!goog.isNull(document.body)); + if(!goog.global.getComputedStyle) { + canUseCssTransform3D = false + }else { + var el = goog.dom.createElement(goog.dom.TagName.P), has3d, transforms = {"webkitTransform":"-webkit-transform", "OTransform":"-o-transform", "msTransform":"-ms-transform", "MozTransform":"-moz-transform", "transform":"transform"}; + goog.dom.appendChild(document.body, el); + for(var t in transforms) { + if(t in el.style) { + el.style[t] = "translate3d(1px,1px,1px)"; + has3d = goog.global.getComputedStyle(el).getPropertyValue(transforms[t]) + } + } + goog.dom.removeNode(el); + canUseCssTransform3D = has3d && has3d !== "none" + } + } + return canUseCssTransform3D + } +}(); +ol.dom.setTransform = function(element, value) { + var style = element.style; + style.WebkitTransform = value; + style.MozTransform = value; + style.OTransform = value; + style.msTransform = value; + style.transform = value; + if(goog.userAgent.IE && !ol.IS_LEGACY_IE) { + element.style.transformOrigin = "0 0" + } +}; +ol.dom.setOpacity = function(element, value) { + if(ol.dom.BrowserFeature.USE_MS_ALPHA_FILTER) { + var filter = element.currentStyle.filter; + var regex; + var alpha; + if(goog.userAgent.VERSION == "8.0") { + regex = /progid:DXImageTransform\.Microsoft\.Alpha\(.*?\)/i, alpha = "progid:DXImageTransform.Microsoft.Alpha(Opacity\x3d" + value * 100 + ")" + }else { + regex = /alpha\(.*?\)/i; + alpha = "alpha(opacity\x3d" + value * 100 + ")" + } + var newFilter = filter.replace(regex, alpha); + if(newFilter === filter) { + newFilter += " " + alpha + } + element.style.filter = newFilter; + if(element.currentStyle.zIndex === "auto") { + element.style.zIndex = 0 + } + }else { + goog.style.setOpacity(element, value) + } +}; +ol.dom.setIEMatrix_ = function(element, value) { + var filter = element.currentStyle.filter; + var newFilter = filter.replace(/progid:DXImageTransform.Microsoft.Matrix\(.*?\)/i, value); + if(newFilter === filter) { + newFilter = " " + value + } + element.style.filter = newFilter; + if(element.currentStyle.zIndex === "auto") { + element.style.zIndex = 0 + } +}; +ol.dom.transformElement2D = function(element, transform, opt_precision, opt_translationElement) { + var i; + if(ol.dom.canUseCssTransform3D()) { + var value3D; + if(goog.isDef(opt_precision)) { + var strings3D = new Array(16); + for(i = 0;i < 16;++i) { + strings3D[i] = transform[i].toFixed(opt_precision) + } + value3D = strings3D.join(",") + }else { + value3D = transform.join(",") + } + ol.dom.setTransform(element, "matrix3d(" + value3D + ")") + }else { + if(ol.dom.canUseCssTransform()) { + var transform2D = [goog.vec.Mat4.getElement(transform, 0, 0), goog.vec.Mat4.getElement(transform, 1, 0), goog.vec.Mat4.getElement(transform, 0, 1), goog.vec.Mat4.getElement(transform, 1, 1), goog.vec.Mat4.getElement(transform, 0, 3), goog.vec.Mat4.getElement(transform, 1, 3)]; + var value2D; + if(goog.isDef(opt_precision)) { + var strings2D = new Array(6); + for(i = 0;i < 6;++i) { + strings2D[i] = transform2D[i].toFixed(opt_precision) + } + value2D = strings2D.join(",") + }else { + value2D = transform2D.join(",") + } + ol.dom.setTransform(element, "matrix(" + value2D + ")") + }else { + if(ol.dom.BrowserFeature.USE_MS_MATRIX_TRANSFORM) { + var m11 = goog.vec.Mat4.getElement(transform, 0, 0), m12 = goog.vec.Mat4.getElement(transform, 0, 1), m21 = goog.vec.Mat4.getElement(transform, 1, 0), m22 = goog.vec.Mat4.getElement(transform, 1, 1), dx = goog.vec.Mat4.getElement(transform, 0, 3), dy = goog.vec.Mat4.getElement(transform, 1, 3); + var s = "progid:DXImageTransform.Microsoft.Matrix("; + s += 'sizingMethod\x3d"auto expand"'; + s += ",M11\x3d" + m11.toFixed(opt_precision || 20); + s += ",M12\x3d" + m12.toFixed(opt_precision || 20); + s += ",M21\x3d" + m21.toFixed(opt_precision || 20); + s += ",M22\x3d" + m22.toFixed(opt_precision || 20); + s += ")"; + ol.dom.setIEMatrix_(element, s); + dx /= m11; + dy /= m22; + opt_translationElement.style.left = Math.round(dx) + "px"; + opt_translationElement.style.top = Math.round(dy) + "px" + }else { + element.style.left = Math.round(goog.vec.Mat4.getElement(transform, 0, 3)) + "px"; + element.style.top = Math.round(goog.vec.Mat4.getElement(transform, 1, 3)) + "px" + } + } + } +}; +goog.provide("ol.renderer.dom.Layer"); +goog.require("goog.dom"); +goog.require("ol.layer.Layer"); +goog.require("ol.renderer.Layer"); +ol.renderer.dom.Layer = function(mapRenderer, layer, target) { + goog.base(this, mapRenderer, layer); + this.target = target +}; +goog.inherits(ol.renderer.dom.Layer, ol.renderer.Layer); +ol.renderer.dom.Layer.prototype.getTarget = function() { + return this.target +}; +goog.provide("ol.renderer.dom.ImageLayer"); +goog.require("goog.asserts"); +goog.require("goog.dom"); +goog.require("goog.dom.TagName"); +goog.require("goog.events"); +goog.require("goog.events.EventType"); +goog.require("goog.vec.Mat4"); +goog.require("ol.ImageBase"); +goog.require("ol.ImageState"); +goog.require("ol.ViewHint"); +goog.require("ol.dom"); +goog.require("ol.layer.Image"); +goog.require("ol.renderer.dom.Layer"); +goog.require("ol.source.Image"); +goog.require("ol.vec.Mat4"); +ol.renderer.dom.ImageLayer = function(mapRenderer, imageLayer) { + var target = goog.dom.createElement(goog.dom.TagName.DIV); + target.style.position = "absolute"; + goog.base(this, mapRenderer, imageLayer, target); + this.image_ = null; + this.transform_ = goog.vec.Mat4.createNumberIdentity() +}; +goog.inherits(ol.renderer.dom.ImageLayer, ol.renderer.dom.Layer); +ol.renderer.dom.ImageLayer.prototype.forEachFeatureAtPixel = function(coordinate, frameState, callback, thisArg) { + var layer = this.getLayer(); + var source = layer.getSource(); + goog.asserts.assertInstanceof(source, ol.source.Image); + var extent = frameState.extent; + var resolution = frameState.view2DState.resolution; + var rotation = frameState.view2DState.rotation; + return source.forEachFeatureAtPixel(extent, resolution, rotation, coordinate, function(feature) { + return callback.call(thisArg, feature, layer) + }) +}; +ol.renderer.dom.ImageLayer.prototype.prepareFrame = function(frameState, layerState) { + var view2DState = frameState.view2DState; + var viewCenter = view2DState.center; + var viewResolution = view2DState.resolution; + var viewRotation = view2DState.rotation; + var image = this.image_; + var imageLayer = this.getLayer(); + goog.asserts.assertInstanceof(imageLayer, ol.layer.Image); + var imageSource = imageLayer.getSource(); + goog.asserts.assertInstanceof(imageSource, ol.source.Image); + var hints = frameState.viewHints; + if(!hints[ol.ViewHint.ANIMATING] && !hints[ol.ViewHint.INTERACTING]) { + var image_ = imageSource.getImage(frameState.extent, viewResolution, frameState.pixelRatio, view2DState.projection); + if(!goog.isNull(image_)) { + var imageState = image_.getState(); + if(imageState == ol.ImageState.IDLE) { + goog.events.listenOnce(image_, goog.events.EventType.CHANGE, this.handleImageChange, false, this); + image_.load() + }else { + if(imageState == ol.ImageState.LOADED) { + image = image_ + } + } + } + } + if(!goog.isNull(image)) { + var imageExtent = image.getExtent(); + var imageResolution = image.getResolution(); + var transform = goog.vec.Mat4.createNumber(); + ol.vec.Mat4.makeTransform2D(transform, frameState.size[0] / 2, frameState.size[1] / 2, imageResolution / viewResolution, imageResolution / viewResolution, viewRotation, (imageExtent[0] - viewCenter[0]) / imageResolution, (viewCenter[1] - imageExtent[3]) / imageResolution); + if(image != this.image_) { + var imageElement = image.getImageElement(this); + imageElement.style.maxWidth = "none"; + imageElement.style.position = "absolute"; + goog.dom.removeChildren(this.target); + goog.dom.appendChild(this.target, imageElement); + this.image_ = image + } + this.setTransform_(transform); + this.updateAttributions(frameState.attributions, image.getAttributions()); + this.updateLogos(frameState, imageSource) + } +}; +ol.renderer.dom.ImageLayer.prototype.setTransform_ = function(transform) { + if(!ol.vec.Mat4.equals2D(transform, this.transform_)) { + ol.dom.transformElement2D(this.target, transform, 6); + goog.vec.Mat4.setFromArray(this.transform_, transform) + } +}; +goog.provide("ol.renderer.dom.TileLayer"); +goog.require("goog.array"); +goog.require("goog.asserts"); +goog.require("goog.dom"); +goog.require("goog.dom.TagName"); +goog.require("goog.object"); +goog.require("goog.style"); +goog.require("goog.vec.Mat4"); +goog.require("ol.Coordinate"); +goog.require("ol.Tile"); +goog.require("ol.TileCoord"); +goog.require("ol.TileRange"); +goog.require("ol.TileState"); +goog.require("ol.ViewHint"); +goog.require("ol.dom"); +goog.require("ol.dom.BrowserFeature"); +goog.require("ol.extent"); +goog.require("ol.layer.Tile"); +goog.require("ol.renderer.dom.Layer"); +goog.require("ol.source.Tile"); +goog.require("ol.tilegrid.TileGrid"); +goog.require("ol.vec.Mat4"); +ol.renderer.dom.TileLayer = function(mapRenderer, tileLayer) { + var target = goog.dom.createElement(goog.dom.TagName.DIV); + target.style.position = "absolute"; + if(ol.dom.BrowserFeature.USE_MS_MATRIX_TRANSFORM) { + target.style.width = "100%"; + target.style.height = "100%" + } + goog.base(this, mapRenderer, tileLayer, target); + this.renderedVisible_ = true; + this.renderedOpacity_ = 1; + this.renderedRevision_ = 0; + this.tileLayerZs_ = {} +}; +goog.inherits(ol.renderer.dom.TileLayer, ol.renderer.dom.Layer); +ol.renderer.dom.TileLayer.prototype.prepareFrame = function(frameState, layerState) { + if(!layerState.visible) { + if(this.renderedVisible_) { + goog.style.setElementShown(this.target, false); + this.renderedVisible_ = false + } + return + } + var pixelRatio = frameState.pixelRatio; + var view2DState = frameState.view2DState; + var projection = view2DState.projection; + var tileLayer = this.getLayer(); + goog.asserts.assertInstanceof(tileLayer, ol.layer.Tile); + var tileSource = tileLayer.getSource(); + goog.asserts.assertInstanceof(tileSource, ol.source.Tile); + var tileGrid = tileSource.getTileGridForProjection(projection); + var tileGutter = tileSource.getGutter(); + var z = tileGrid.getZForResolution(view2DState.resolution); + var tileResolution = tileGrid.getResolution(z); + var center = view2DState.center; + var extent; + if(tileResolution == view2DState.resolution) { + center = this.snapCenterToPixel(center, tileResolution, frameState.size); + extent = ol.extent.getForView2DAndSize(center, tileResolution, view2DState.rotation, frameState.size) + }else { + extent = frameState.extent + } + var tileRange = tileGrid.getTileRangeForExtentAndResolution(extent, tileResolution); + var tilesToDrawByZ = {}; + tilesToDrawByZ[z] = {}; + var getTileIfLoaded = this.createGetTileIfLoadedFunction(function(tile) { + return!goog.isNull(tile) && tile.getState() == ol.TileState.LOADED + }, tileSource, pixelRatio, projection); + var findLoadedTiles = goog.bind(tileSource.findLoadedTiles, tileSource, tilesToDrawByZ, getTileIfLoaded); + var useInterimTilesOnError = tileLayer.getUseInterimTilesOnError(); + if(!goog.isDef(useInterimTilesOnError)) { + useInterimTilesOnError = true + } + var tmpExtent = ol.extent.createEmpty(); + var tmpTileRange = new ol.TileRange(0, 0, 0, 0); + var childTileRange, fullyLoaded, tile, tileState, x, y; + for(x = tileRange.minX;x <= tileRange.maxX;++x) { + for(y = tileRange.minY;y <= tileRange.maxY;++y) { + tile = tileSource.getTile(z, x, y, pixelRatio, projection); + tileState = tile.getState(); + if(tileState == ol.TileState.LOADED) { + tilesToDrawByZ[z][tile.tileCoord.toString()] = tile; + continue + }else { + if(tileState == ol.TileState.EMPTY || tileState == ol.TileState.ERROR && !useInterimTilesOnError) { + continue + } + } + fullyLoaded = tileGrid.forEachTileCoordParentTileRange(tile.tileCoord, findLoadedTiles, null, tmpTileRange, tmpExtent); + if(!fullyLoaded) { + childTileRange = tileGrid.getTileCoordChildTileRange(tile.tileCoord, tmpTileRange, tmpExtent); + if(!goog.isNull(childTileRange)) { + findLoadedTiles(z + 1, childTileRange) + } + } + } + } + var tileLayerZ, tileLayerZKey; + if(this.renderedRevision_ != tileSource.getRevision()) { + for(tileLayerZKey in this.tileLayerZs_) { + tileLayerZ = this.tileLayerZs_[+tileLayerZKey]; + goog.dom.removeNode(tileLayerZ.target) + } + this.tileLayerZs_ = {}; + this.renderedRevision_ = tileSource.getRevision() + } + var zs = goog.array.map(goog.object.getKeys(tilesToDrawByZ), Number); + goog.array.sort(zs); + var newTileLayerZKeys = {}; + var iz, iziz, tileCoordKey, tileCoordOrigin, tilesToDraw; + for(iz = 0, iziz = zs.length;iz < iziz;++iz) { + tileLayerZKey = zs[iz]; + if(tileLayerZKey in this.tileLayerZs_) { + tileLayerZ = this.tileLayerZs_[tileLayerZKey] + }else { + tileCoordOrigin = tileGrid.getTileCoordForCoordAndZ(center, tileLayerZKey); + tileLayerZ = new ol.renderer.dom.TileLayerZ_(tileGrid, tileCoordOrigin); + newTileLayerZKeys[tileLayerZKey] = true; + this.tileLayerZs_[tileLayerZKey] = tileLayerZ + } + tilesToDraw = tilesToDrawByZ[tileLayerZKey]; + for(tileCoordKey in tilesToDraw) { + tileLayerZ.addTile(tilesToDraw[tileCoordKey], tileGutter) + } + tileLayerZ.finalizeAddTiles() + } + var tileLayerZKeys = goog.array.map(goog.object.getKeys(this.tileLayerZs_), Number); + goog.array.sort(tileLayerZKeys); + var i, ii, j, origin, resolution; + var transform = goog.vec.Mat4.createNumber(); + for(i = 0, ii = tileLayerZKeys.length;i < ii;++i) { + tileLayerZKey = tileLayerZKeys[i]; + tileLayerZ = this.tileLayerZs_[tileLayerZKey]; + if(!(tileLayerZKey in tilesToDrawByZ)) { + goog.dom.removeNode(tileLayerZ.target); + delete this.tileLayerZs_[tileLayerZKey]; + continue + } + resolution = tileLayerZ.getResolution(); + origin = tileLayerZ.getOrigin(); + ol.vec.Mat4.makeTransform2D(transform, frameState.size[0] / 2, frameState.size[1] / 2, resolution / view2DState.resolution, resolution / view2DState.resolution, view2DState.rotation, (origin[0] - center[0]) / resolution, (center[1] - origin[1]) / resolution); + tileLayerZ.setTransform(transform); + if(tileLayerZKey in newTileLayerZKeys) { + for(j = tileLayerZKey - 1;j >= 0;--j) { + if(j in this.tileLayerZs_) { + goog.dom.insertSiblingAfter(tileLayerZ.target, this.tileLayerZs_[j].target); + break + } + } + if(j < 0) { + goog.dom.insertChildAt(this.target, tileLayerZ.target, 0) + } + }else { + if(!frameState.viewHints[ol.ViewHint.ANIMATING] && !frameState.viewHints[ol.ViewHint.INTERACTING]) { + tileLayerZ.removeTilesOutsideExtent(extent, tmpTileRange) + } + } + } + if(layerState.opacity != this.renderedOpacity_) { + ol.dom.setOpacity(this.target, layerState.opacity); + this.renderedOpacity_ = layerState.opacity + } + if(layerState.visible && !this.renderedVisible_) { + goog.style.setElementShown(this.target, true); + this.renderedVisible_ = true + } + this.updateUsedTiles(frameState.usedTiles, tileSource, z, tileRange); + this.manageTilePyramid(frameState, tileSource, tileGrid, pixelRatio, projection, extent, z, tileLayer.getPreload()); + this.scheduleExpireCache(frameState, tileSource); + this.updateLogos(frameState, tileSource) +}; +ol.renderer.dom.TileLayerZ_ = function(tileGrid, tileCoordOrigin) { + this.target = goog.dom.createElement(goog.dom.TagName.DIV); + this.target.style.position = "absolute"; + this.target.style.width = "100%"; + this.target.style.height = "100%"; + if(ol.LEGACY_IE_SUPPORT && ol.IS_LEGACY_IE) { + this.translateTarget_ = goog.dom.createElement(goog.dom.TagName.DIV); + this.translateTarget_.style.position = "absolute"; + this.translateTarget_.style.width = "100%"; + this.translateTarget_.style.height = "100%"; + goog.dom.appendChild(this.target, this.translateTarget_) + } + this.tileGrid_ = tileGrid; + this.tileCoordOrigin_ = tileCoordOrigin; + this.origin_ = ol.extent.getTopLeft(tileGrid.getTileCoordExtent(tileCoordOrigin)); + this.resolution_ = tileGrid.getResolution(tileCoordOrigin.z); + this.tiles_ = {}; + this.documentFragment_ = null; + this.transform_ = goog.vec.Mat4.createNumberIdentity() +}; +ol.renderer.dom.TileLayerZ_.prototype.addTile = function(tile, tileGutter) { + var tileCoord = tile.tileCoord; + goog.asserts.assert(tileCoord.z == this.tileCoordOrigin_.z); + var tileCoordKey = tileCoord.toString(); + if(tileCoordKey in this.tiles_) { + return + } + var tileSize = this.tileGrid_.getTileSize(tileCoord.z); + var image = tile.getImage(this); + var imageStyle = image.style; + imageStyle.maxWidth = "none"; + var tileElement; + var tileElementStyle; + if(tileGutter > 0) { + tileElement = goog.dom.createElement(goog.dom.TagName.DIV); + tileElementStyle = tileElement.style; + tileElementStyle.overflow = "hidden"; + tileElementStyle.width = tileSize + "px"; + tileElementStyle.height = tileSize + "px"; + imageStyle.position = "absolute"; + imageStyle.left = -tileGutter + "px"; + imageStyle.top = -tileGutter + "px"; + imageStyle.width = tileSize + 2 * tileGutter + "px"; + imageStyle.height = tileSize + 2 * tileGutter + "px"; + goog.dom.appendChild(tileElement, image) + }else { + imageStyle.width = tileSize + "px"; + imageStyle.height = tileSize + "px"; + tileElement = image; + tileElementStyle = imageStyle + } + tileElementStyle.position = "absolute"; + tileElementStyle.left = (tileCoord.x - this.tileCoordOrigin_.x) * tileSize + "px"; + tileElementStyle.top = (this.tileCoordOrigin_.y - tileCoord.y) * tileSize + "px"; + if(goog.isNull(this.documentFragment_)) { + this.documentFragment_ = document.createDocumentFragment() + } + goog.dom.appendChild(this.documentFragment_, tileElement); + this.tiles_[tileCoordKey] = tile +}; +ol.renderer.dom.TileLayerZ_.prototype.finalizeAddTiles = function() { + if(!goog.isNull(this.documentFragment_)) { + if(ol.LEGACY_IE_SUPPORT && ol.IS_LEGACY_IE) { + goog.dom.appendChild(this.translateTarget_, this.documentFragment_) + }else { + goog.dom.appendChild(this.target, this.documentFragment_) + } + this.documentFragment_ = null + } +}; +ol.renderer.dom.TileLayerZ_.prototype.getOrigin = function() { + return this.origin_ +}; +ol.renderer.dom.TileLayerZ_.prototype.getResolution = function() { + return this.resolution_ +}; +ol.renderer.dom.TileLayerZ_.prototype.removeTilesOutsideExtent = function(extent, opt_tileRange) { + var tileRange = this.tileGrid_.getTileRangeForExtentAndZ(extent, this.tileCoordOrigin_.z, opt_tileRange); + var tilesToRemove = []; + var tile, tileCoordKey; + for(tileCoordKey in this.tiles_) { + tile = this.tiles_[tileCoordKey]; + if(!tileRange.contains(tile.tileCoord)) { + tilesToRemove.push(tile) + } + } + var i, ii; + for(i = 0, ii = tilesToRemove.length;i < ii;++i) { + tile = tilesToRemove[i]; + tileCoordKey = tile.tileCoord.toString(); + goog.dom.removeNode(tile.getImage(this)); + delete this.tiles_[tileCoordKey] + } +}; +ol.renderer.dom.TileLayerZ_.prototype.setTransform = function(transform) { + if(!ol.vec.Mat4.equals2D(transform, this.transform_)) { + if(ol.LEGACY_IE_SUPPORT && ol.IS_LEGACY_IE) { + ol.dom.transformElement2D(this.target, transform, 6, this.translateTarget_) + }else { + ol.dom.transformElement2D(this.target, transform, 6) + } + goog.vec.Mat4.setFromArray(this.transform_, transform) + } +}; +goog.provide("ol.renderer.dom.Map"); +goog.require("goog.asserts"); +goog.require("goog.dom"); +goog.require("goog.dom.TagName"); +goog.require("goog.functions"); +goog.require("goog.style"); +goog.require("ol.css"); +goog.require("ol.layer.Image"); +goog.require("ol.layer.Tile"); +goog.require("ol.renderer.Map"); +goog.require("ol.renderer.dom.ImageLayer"); +goog.require("ol.renderer.dom.Layer"); +goog.require("ol.renderer.dom.TileLayer"); +goog.require("ol.source.State"); +ol.renderer.dom.Map = function(container, map) { + goog.base(this, container, map); + this.layersPane_ = goog.dom.createElement(goog.dom.TagName.DIV); + this.layersPane_.className = ol.css.CLASS_UNSELECTABLE; + var style = this.layersPane_.style; + style.position = "absolute"; + style.width = "100%"; + style.height = "100%"; + if(ol.LEGACY_IE_SUPPORT && ol.IS_LEGACY_IE) { + this.layersPane_.ondragstart = goog.functions.FALSE; + this.layersPane_.onselectstart = goog.functions.FALSE + } + goog.dom.insertChildAt(container, this.layersPane_, 0); + this.renderedVisible_ = true +}; +goog.inherits(ol.renderer.dom.Map, ol.renderer.Map); +ol.renderer.dom.Map.prototype.createLayerRenderer = function(layer) { + var layerRenderer; + if(ol.ENABLE_IMAGE && layer instanceof ol.layer.Image) { + layerRenderer = new ol.renderer.dom.ImageLayer(this, layer) + }else { + if(ol.ENABLE_TILE && layer instanceof ol.layer.Tile) { + layerRenderer = new ol.renderer.dom.TileLayer(this, layer) + }else { + goog.asserts.fail(); + return null + } + } + return layerRenderer +}; +ol.renderer.dom.Map.prototype.renderFrame = function(frameState) { + if(goog.isNull(frameState)) { + if(this.renderedVisible_) { + goog.style.setElementShown(this.layersPane_, false); + this.renderedVisible_ = false + } + return + } + var addChild; + if(ol.LEGACY_IE_SUPPORT && ol.IS_LEGACY_IE) { + addChild = function(elem) { + goog.dom.appendChild(this.layersPane_, elem) + } + }else { + addChild = function(elem, i) { + goog.dom.insertChildAt(this.layersPane_, elem, i) + } + } + var layerStates = frameState.layerStates; + var layersArray = frameState.layersArray; + var i, ii, layer, layerRenderer, layerState; + for(i = 0, ii = layersArray.length;i < ii;++i) { + layer = layersArray[i]; + layerRenderer = (this.getLayerRenderer(layer)); + goog.asserts.assertInstanceof(layerRenderer, ol.renderer.dom.Layer); + addChild.call(this, layerRenderer.getTarget(), i); + layerState = frameState.layerStates[goog.getUid(layer)]; + if(layerState.sourceState == ol.source.State.READY) { + layerRenderer.prepareFrame(frameState, layerState) + } + } + var layerKey; + for(layerKey in this.getLayerRenderers()) { + if(!(layerKey in layerStates)) { + layerRenderer = this.getLayerRendererByKey(layerKey); + goog.asserts.assertInstanceof(layerRenderer, ol.renderer.dom.Layer); + goog.dom.removeNode(layerRenderer.getTarget()) + } + } + if(!this.renderedVisible_) { + goog.style.setElementShown(this.layersPane_, true); + this.renderedVisible_ = true + } + this.calculateMatrices2D(frameState); + this.scheduleRemoveUnusedLayerRenderers(frameState); + this.scheduleExpireIconCache(frameState) +}; +goog.provide("goog.webgl"); +goog.webgl.DEPTH_BUFFER_BIT = 256; +goog.webgl.STENCIL_BUFFER_BIT = 1024; +goog.webgl.COLOR_BUFFER_BIT = 16384; +goog.webgl.POINTS = 0; +goog.webgl.LINES = 1; +goog.webgl.LINE_LOOP = 2; +goog.webgl.LINE_STRIP = 3; +goog.webgl.TRIANGLES = 4; +goog.webgl.TRIANGLE_STRIP = 5; +goog.webgl.TRIANGLE_FAN = 6; +goog.webgl.ZERO = 0; +goog.webgl.ONE = 1; +goog.webgl.SRC_COLOR = 768; +goog.webgl.ONE_MINUS_SRC_COLOR = 769; +goog.webgl.SRC_ALPHA = 770; +goog.webgl.ONE_MINUS_SRC_ALPHA = 771; +goog.webgl.DST_ALPHA = 772; +goog.webgl.ONE_MINUS_DST_ALPHA = 773; +goog.webgl.DST_COLOR = 774; +goog.webgl.ONE_MINUS_DST_COLOR = 775; +goog.webgl.SRC_ALPHA_SATURATE = 776; +goog.webgl.FUNC_ADD = 32774; +goog.webgl.BLEND_EQUATION = 32777; +goog.webgl.BLEND_EQUATION_RGB = 32777; +goog.webgl.BLEND_EQUATION_ALPHA = 34877; +goog.webgl.FUNC_SUBTRACT = 32778; +goog.webgl.FUNC_REVERSE_SUBTRACT = 32779; +goog.webgl.BLEND_DST_RGB = 32968; +goog.webgl.BLEND_SRC_RGB = 32969; +goog.webgl.BLEND_DST_ALPHA = 32970; +goog.webgl.BLEND_SRC_ALPHA = 32971; +goog.webgl.CONSTANT_COLOR = 32769; +goog.webgl.ONE_MINUS_CONSTANT_COLOR = 32770; +goog.webgl.CONSTANT_ALPHA = 32771; +goog.webgl.ONE_MINUS_CONSTANT_ALPHA = 32772; +goog.webgl.BLEND_COLOR = 32773; +goog.webgl.ARRAY_BUFFER = 34962; +goog.webgl.ELEMENT_ARRAY_BUFFER = 34963; +goog.webgl.ARRAY_BUFFER_BINDING = 34964; +goog.webgl.ELEMENT_ARRAY_BUFFER_BINDING = 34965; +goog.webgl.STREAM_DRAW = 35040; +goog.webgl.STATIC_DRAW = 35044; +goog.webgl.DYNAMIC_DRAW = 35048; +goog.webgl.BUFFER_SIZE = 34660; +goog.webgl.BUFFER_USAGE = 34661; +goog.webgl.CURRENT_VERTEX_ATTRIB = 34342; +goog.webgl.FRONT = 1028; +goog.webgl.BACK = 1029; +goog.webgl.FRONT_AND_BACK = 1032; +goog.webgl.CULL_FACE = 2884; +goog.webgl.BLEND = 3042; +goog.webgl.DITHER = 3024; +goog.webgl.STENCIL_TEST = 2960; +goog.webgl.DEPTH_TEST = 2929; +goog.webgl.SCISSOR_TEST = 3089; +goog.webgl.POLYGON_OFFSET_FILL = 32823; +goog.webgl.SAMPLE_ALPHA_TO_COVERAGE = 32926; +goog.webgl.SAMPLE_COVERAGE = 32928; +goog.webgl.NO_ERROR = 0; +goog.webgl.INVALID_ENUM = 1280; +goog.webgl.INVALID_VALUE = 1281; +goog.webgl.INVALID_OPERATION = 1282; +goog.webgl.OUT_OF_MEMORY = 1285; +goog.webgl.CW = 2304; +goog.webgl.CCW = 2305; +goog.webgl.LINE_WIDTH = 2849; +goog.webgl.ALIASED_POINT_SIZE_RANGE = 33901; +goog.webgl.ALIASED_LINE_WIDTH_RANGE = 33902; +goog.webgl.CULL_FACE_MODE = 2885; +goog.webgl.FRONT_FACE = 2886; +goog.webgl.DEPTH_RANGE = 2928; +goog.webgl.DEPTH_WRITEMASK = 2930; +goog.webgl.DEPTH_CLEAR_VALUE = 2931; +goog.webgl.DEPTH_FUNC = 2932; +goog.webgl.STENCIL_CLEAR_VALUE = 2961; +goog.webgl.STENCIL_FUNC = 2962; +goog.webgl.STENCIL_FAIL = 2964; +goog.webgl.STENCIL_PASS_DEPTH_FAIL = 2965; +goog.webgl.STENCIL_PASS_DEPTH_PASS = 2966; +goog.webgl.STENCIL_REF = 2967; +goog.webgl.STENCIL_VALUE_MASK = 2963; +goog.webgl.STENCIL_WRITEMASK = 2968; +goog.webgl.STENCIL_BACK_FUNC = 34816; +goog.webgl.STENCIL_BACK_FAIL = 34817; +goog.webgl.STENCIL_BACK_PASS_DEPTH_FAIL = 34818; +goog.webgl.STENCIL_BACK_PASS_DEPTH_PASS = 34819; +goog.webgl.STENCIL_BACK_REF = 36003; +goog.webgl.STENCIL_BACK_VALUE_MASK = 36004; +goog.webgl.STENCIL_BACK_WRITEMASK = 36005; +goog.webgl.VIEWPORT = 2978; +goog.webgl.SCISSOR_BOX = 3088; +goog.webgl.COLOR_CLEAR_VALUE = 3106; +goog.webgl.COLOR_WRITEMASK = 3107; +goog.webgl.UNPACK_ALIGNMENT = 3317; +goog.webgl.PACK_ALIGNMENT = 3333; +goog.webgl.MAX_TEXTURE_SIZE = 3379; +goog.webgl.MAX_VIEWPORT_DIMS = 3386; +goog.webgl.SUBPIXEL_BITS = 3408; +goog.webgl.RED_BITS = 3410; +goog.webgl.GREEN_BITS = 3411; +goog.webgl.BLUE_BITS = 3412; +goog.webgl.ALPHA_BITS = 3413; +goog.webgl.DEPTH_BITS = 3414; +goog.webgl.STENCIL_BITS = 3415; +goog.webgl.POLYGON_OFFSET_UNITS = 10752; +goog.webgl.POLYGON_OFFSET_FACTOR = 32824; +goog.webgl.TEXTURE_BINDING_2D = 32873; +goog.webgl.SAMPLE_BUFFERS = 32936; +goog.webgl.SAMPLES = 32937; +goog.webgl.SAMPLE_COVERAGE_VALUE = 32938; +goog.webgl.SAMPLE_COVERAGE_INVERT = 32939; +goog.webgl.COMPRESSED_TEXTURE_FORMATS = 34467; +goog.webgl.DONT_CARE = 4352; +goog.webgl.FASTEST = 4353; +goog.webgl.NICEST = 4354; +goog.webgl.GENERATE_MIPMAP_HINT = 33170; +goog.webgl.BYTE = 5120; +goog.webgl.UNSIGNED_BYTE = 5121; +goog.webgl.SHORT = 5122; +goog.webgl.UNSIGNED_SHORT = 5123; +goog.webgl.INT = 5124; +goog.webgl.UNSIGNED_INT = 5125; +goog.webgl.FLOAT = 5126; +goog.webgl.DEPTH_COMPONENT = 6402; +goog.webgl.ALPHA = 6406; +goog.webgl.RGB = 6407; +goog.webgl.RGBA = 6408; +goog.webgl.LUMINANCE = 6409; +goog.webgl.LUMINANCE_ALPHA = 6410; +goog.webgl.UNSIGNED_SHORT_4_4_4_4 = 32819; +goog.webgl.UNSIGNED_SHORT_5_5_5_1 = 32820; +goog.webgl.UNSIGNED_SHORT_5_6_5 = 33635; +goog.webgl.FRAGMENT_SHADER = 35632; +goog.webgl.VERTEX_SHADER = 35633; +goog.webgl.MAX_VERTEX_ATTRIBS = 34921; +goog.webgl.MAX_VERTEX_UNIFORM_VECTORS = 36347; +goog.webgl.MAX_VARYING_VECTORS = 36348; +goog.webgl.MAX_COMBINED_TEXTURE_IMAGE_UNITS = 35661; +goog.webgl.MAX_VERTEX_TEXTURE_IMAGE_UNITS = 35660; +goog.webgl.MAX_TEXTURE_IMAGE_UNITS = 34930; +goog.webgl.MAX_FRAGMENT_UNIFORM_VECTORS = 36349; +goog.webgl.SHADER_TYPE = 35663; +goog.webgl.DELETE_STATUS = 35712; +goog.webgl.LINK_STATUS = 35714; +goog.webgl.VALIDATE_STATUS = 35715; +goog.webgl.ATTACHED_SHADERS = 35717; +goog.webgl.ACTIVE_UNIFORMS = 35718; +goog.webgl.ACTIVE_ATTRIBUTES = 35721; +goog.webgl.SHADING_LANGUAGE_VERSION = 35724; +goog.webgl.CURRENT_PROGRAM = 35725; +goog.webgl.NEVER = 512; +goog.webgl.LESS = 513; +goog.webgl.EQUAL = 514; +goog.webgl.LEQUAL = 515; +goog.webgl.GREATER = 516; +goog.webgl.NOTEQUAL = 517; +goog.webgl.GEQUAL = 518; +goog.webgl.ALWAYS = 519; +goog.webgl.KEEP = 7680; +goog.webgl.REPLACE = 7681; +goog.webgl.INCR = 7682; +goog.webgl.DECR = 7683; +goog.webgl.INVERT = 5386; +goog.webgl.INCR_WRAP = 34055; +goog.webgl.DECR_WRAP = 34056; +goog.webgl.VENDOR = 7936; +goog.webgl.RENDERER = 7937; +goog.webgl.VERSION = 7938; +goog.webgl.NEAREST = 9728; +goog.webgl.LINEAR = 9729; +goog.webgl.NEAREST_MIPMAP_NEAREST = 9984; +goog.webgl.LINEAR_MIPMAP_NEAREST = 9985; +goog.webgl.NEAREST_MIPMAP_LINEAR = 9986; +goog.webgl.LINEAR_MIPMAP_LINEAR = 9987; +goog.webgl.TEXTURE_MAG_FILTER = 10240; +goog.webgl.TEXTURE_MIN_FILTER = 10241; +goog.webgl.TEXTURE_WRAP_S = 10242; +goog.webgl.TEXTURE_WRAP_T = 10243; +goog.webgl.TEXTURE_2D = 3553; +goog.webgl.TEXTURE = 5890; +goog.webgl.TEXTURE_CUBE_MAP = 34067; +goog.webgl.TEXTURE_BINDING_CUBE_MAP = 34068; +goog.webgl.TEXTURE_CUBE_MAP_POSITIVE_X = 34069; +goog.webgl.TEXTURE_CUBE_MAP_NEGATIVE_X = 34070; +goog.webgl.TEXTURE_CUBE_MAP_POSITIVE_Y = 34071; +goog.webgl.TEXTURE_CUBE_MAP_NEGATIVE_Y = 34072; +goog.webgl.TEXTURE_CUBE_MAP_POSITIVE_Z = 34073; +goog.webgl.TEXTURE_CUBE_MAP_NEGATIVE_Z = 34074; +goog.webgl.MAX_CUBE_MAP_TEXTURE_SIZE = 34076; +goog.webgl.TEXTURE0 = 33984; +goog.webgl.TEXTURE1 = 33985; +goog.webgl.TEXTURE2 = 33986; +goog.webgl.TEXTURE3 = 33987; +goog.webgl.TEXTURE4 = 33988; +goog.webgl.TEXTURE5 = 33989; +goog.webgl.TEXTURE6 = 33990; +goog.webgl.TEXTURE7 = 33991; +goog.webgl.TEXTURE8 = 33992; +goog.webgl.TEXTURE9 = 33993; +goog.webgl.TEXTURE10 = 33994; +goog.webgl.TEXTURE11 = 33995; +goog.webgl.TEXTURE12 = 33996; +goog.webgl.TEXTURE13 = 33997; +goog.webgl.TEXTURE14 = 33998; +goog.webgl.TEXTURE15 = 33999; +goog.webgl.TEXTURE16 = 34E3; +goog.webgl.TEXTURE17 = 34001; +goog.webgl.TEXTURE18 = 34002; +goog.webgl.TEXTURE19 = 34003; +goog.webgl.TEXTURE20 = 34004; +goog.webgl.TEXTURE21 = 34005; +goog.webgl.TEXTURE22 = 34006; +goog.webgl.TEXTURE23 = 34007; +goog.webgl.TEXTURE24 = 34008; +goog.webgl.TEXTURE25 = 34009; +goog.webgl.TEXTURE26 = 34010; +goog.webgl.TEXTURE27 = 34011; +goog.webgl.TEXTURE28 = 34012; +goog.webgl.TEXTURE29 = 34013; +goog.webgl.TEXTURE30 = 34014; +goog.webgl.TEXTURE31 = 34015; +goog.webgl.ACTIVE_TEXTURE = 34016; +goog.webgl.REPEAT = 10497; +goog.webgl.CLAMP_TO_EDGE = 33071; +goog.webgl.MIRRORED_REPEAT = 33648; +goog.webgl.FLOAT_VEC2 = 35664; +goog.webgl.FLOAT_VEC3 = 35665; +goog.webgl.FLOAT_VEC4 = 35666; +goog.webgl.INT_VEC2 = 35667; +goog.webgl.INT_VEC3 = 35668; +goog.webgl.INT_VEC4 = 35669; +goog.webgl.BOOL = 35670; +goog.webgl.BOOL_VEC2 = 35671; +goog.webgl.BOOL_VEC3 = 35672; +goog.webgl.BOOL_VEC4 = 35673; +goog.webgl.FLOAT_MAT2 = 35674; +goog.webgl.FLOAT_MAT3 = 35675; +goog.webgl.FLOAT_MAT4 = 35676; +goog.webgl.SAMPLER_2D = 35678; +goog.webgl.SAMPLER_CUBE = 35680; +goog.webgl.VERTEX_ATTRIB_ARRAY_ENABLED = 34338; +goog.webgl.VERTEX_ATTRIB_ARRAY_SIZE = 34339; +goog.webgl.VERTEX_ATTRIB_ARRAY_STRIDE = 34340; +goog.webgl.VERTEX_ATTRIB_ARRAY_TYPE = 34341; +goog.webgl.VERTEX_ATTRIB_ARRAY_NORMALIZED = 34922; +goog.webgl.VERTEX_ATTRIB_ARRAY_POINTER = 34373; +goog.webgl.VERTEX_ATTRIB_ARRAY_BUFFER_BINDING = 34975; +goog.webgl.COMPILE_STATUS = 35713; +goog.webgl.LOW_FLOAT = 36336; +goog.webgl.MEDIUM_FLOAT = 36337; +goog.webgl.HIGH_FLOAT = 36338; +goog.webgl.LOW_INT = 36339; +goog.webgl.MEDIUM_INT = 36340; +goog.webgl.HIGH_INT = 36341; +goog.webgl.FRAMEBUFFER = 36160; +goog.webgl.RENDERBUFFER = 36161; +goog.webgl.RGBA4 = 32854; +goog.webgl.RGB5_A1 = 32855; +goog.webgl.RGB565 = 36194; +goog.webgl.DEPTH_COMPONENT16 = 33189; +goog.webgl.STENCIL_INDEX = 6401; +goog.webgl.STENCIL_INDEX8 = 36168; +goog.webgl.DEPTH_STENCIL = 34041; +goog.webgl.RENDERBUFFER_WIDTH = 36162; +goog.webgl.RENDERBUFFER_HEIGHT = 36163; +goog.webgl.RENDERBUFFER_INTERNAL_FORMAT = 36164; +goog.webgl.RENDERBUFFER_RED_SIZE = 36176; +goog.webgl.RENDERBUFFER_GREEN_SIZE = 36177; +goog.webgl.RENDERBUFFER_BLUE_SIZE = 36178; +goog.webgl.RENDERBUFFER_ALPHA_SIZE = 36179; +goog.webgl.RENDERBUFFER_DEPTH_SIZE = 36180; +goog.webgl.RENDERBUFFER_STENCIL_SIZE = 36181; +goog.webgl.FRAMEBUFFER_ATTACHMENT_OBJECT_TYPE = 36048; +goog.webgl.FRAMEBUFFER_ATTACHMENT_OBJECT_NAME = 36049; +goog.webgl.FRAMEBUFFER_ATTACHMENT_TEXTURE_LEVEL = 36050; +goog.webgl.FRAMEBUFFER_ATTACHMENT_TEXTURE_CUBE_MAP_FACE = 36051; +goog.webgl.COLOR_ATTACHMENT0 = 36064; +goog.webgl.DEPTH_ATTACHMENT = 36096; +goog.webgl.STENCIL_ATTACHMENT = 36128; +goog.webgl.DEPTH_STENCIL_ATTACHMENT = 33306; +goog.webgl.NONE = 0; +goog.webgl.FRAMEBUFFER_COMPLETE = 36053; +goog.webgl.FRAMEBUFFER_INCOMPLETE_ATTACHMENT = 36054; +goog.webgl.FRAMEBUFFER_INCOMPLETE_MISSING_ATTACHMENT = 36055; +goog.webgl.FRAMEBUFFER_INCOMPLETE_DIMENSIONS = 36057; +goog.webgl.FRAMEBUFFER_UNSUPPORTED = 36061; +goog.webgl.FRAMEBUFFER_BINDING = 36006; +goog.webgl.RENDERBUFFER_BINDING = 36007; +goog.webgl.MAX_RENDERBUFFER_SIZE = 34024; +goog.webgl.INVALID_FRAMEBUFFER_OPERATION = 1286; +goog.webgl.UNPACK_FLIP_Y_WEBGL = 37440; +goog.webgl.UNPACK_PREMULTIPLY_ALPHA_WEBGL = 37441; +goog.webgl.CONTEXT_LOST_WEBGL = 37442; +goog.webgl.UNPACK_COLORSPACE_CONVERSION_WEBGL = 37443; +goog.webgl.BROWSER_DEFAULT_WEBGL = 37444; +goog.webgl.HALF_FLOAT_OES = 36193; +goog.webgl.FRAGMENT_SHADER_DERIVATIVE_HINT_OES = 35723; +goog.webgl.VERTEX_ARRAY_BINDING_OES = 34229; +goog.webgl.UNMASKED_VENDOR_WEBGL = 37445; +goog.webgl.UNMASKED_RENDERER_WEBGL = 37446; +goog.webgl.COMPRESSED_RGB_S3TC_DXT1_EXT = 33776; +goog.webgl.COMPRESSED_RGBA_S3TC_DXT1_EXT = 33777; +goog.webgl.COMPRESSED_RGBA_S3TC_DXT3_EXT = 33778; +goog.webgl.COMPRESSED_RGBA_S3TC_DXT5_EXT = 33779; +goog.webgl.TEXTURE_MAX_ANISOTROPY_EXT = 34046; +goog.webgl.MAX_TEXTURE_MAX_ANISOTROPY_EXT = 34047; +goog.provide("ol.render.webgl.Immediate"); +ol.render.webgl.Immediate = function(context, pixelRatio) { +}; +ol.render.webgl.Immediate.prototype.drawAsync = function(zIndex, callback) { +}; +ol.render.webgl.Immediate.prototype.drawCircleGeometry = function(circleGeometry, data) { +}; +ol.render.webgl.Immediate.prototype.drawFeature = function(feature, style) { +}; +ol.render.webgl.Immediate.prototype.drawGeometryCollectionGeometry = function(geometryCollectionGeometry, data) { +}; +ol.render.webgl.Immediate.prototype.drawPointGeometry = function(pointGeometry, data) { +}; +ol.render.webgl.Immediate.prototype.drawLineStringGeometry = function(lineStringGeometry, data) { +}; +ol.render.webgl.Immediate.prototype.drawMultiLineStringGeometry = function(multiLineStringGeometry, data) { +}; +ol.render.webgl.Immediate.prototype.drawMultiPointGeometry = function(multiPointGeometry, data) { +}; +ol.render.webgl.Immediate.prototype.drawMultiPolygonGeometry = function(multiPolygonGeometry, data) { +}; +ol.render.webgl.Immediate.prototype.drawPolygonGeometry = function(polygonGeometry, data) { +}; +ol.render.webgl.Immediate.prototype.drawText = function(flatCoordinates, offset, end, stride, geometry, data) { +}; +ol.render.webgl.Immediate.prototype.setFillStrokeStyle = function(fillStyle, strokeStyle) { +}; +ol.render.webgl.Immediate.prototype.setImageStyle = function(imageStyle) { +}; +ol.render.webgl.Immediate.prototype.setTextStyle = function(textStyle) { +}; +goog.provide("ol.color.Matrix"); +goog.require("goog.vec.Mat4"); +ol.color.Matrix = function() { + this.colorMatrix_ = goog.vec.Mat4.createNumber(); + this.brightness_ = undefined; + this.brightnessMatrix_ = goog.vec.Mat4.createNumber(); + this.contrast_ = undefined; + this.contrastMatrix_ = goog.vec.Mat4.createNumber(); + this.hue_ = undefined; + this.hueMatrix_ = goog.vec.Mat4.createNumber(); + this.saturation_ = undefined; + this.saturationMatrix_ = goog.vec.Mat4.createNumber() +}; +ol.color.Matrix.makeBrightness = function(matrix, value) { + goog.vec.Mat4.makeTranslate(matrix, value, value, value); + return matrix +}; +ol.color.Matrix.makeContrast = function(matrix, value) { + goog.vec.Mat4.makeScale(matrix, value, value, value); + var translateValue = -0.5 * value + 0.5; + goog.vec.Mat4.setColumnValues(matrix, 3, translateValue, translateValue, translateValue, 1); + return matrix +}; +ol.color.Matrix.makeHue = function(matrix, value) { + var cosHue = Math.cos(value); + var sinHue = Math.sin(value); + var v00 = 0.213 + cosHue * 0.787 - sinHue * 0.213; + var v01 = 0.715 - cosHue * 0.715 - sinHue * 0.715; + var v02 = 0.072 - cosHue * 0.072 + sinHue * 0.928; + var v03 = 0; + var v10 = 0.213 - cosHue * 0.213 + sinHue * 0.143; + var v11 = 0.715 + cosHue * 0.285 + sinHue * 0.14; + var v12 = 0.072 - cosHue * 0.072 - sinHue * 0.283; + var v13 = 0; + var v20 = 0.213 - cosHue * 0.213 - sinHue * 0.787; + var v21 = 0.715 - cosHue * 0.715 + sinHue * 0.715; + var v22 = 0.072 + cosHue * 0.928 + sinHue * 0.072; + var v23 = 0; + var v30 = 0; + var v31 = 0; + var v32 = 0; + var v33 = 1; + goog.vec.Mat4.setFromValues(matrix, v00, v10, v20, v30, v01, v11, v21, v31, v02, v12, v22, v32, v03, v13, v23, v33); + return matrix +}; +ol.color.Matrix.makeSaturation = function(matrix, value) { + var v00 = 0.213 + 0.787 * value; + var v01 = 0.715 - 0.715 * value; + var v02 = 0.072 - 0.072 * value; + var v03 = 0; + var v10 = 0.213 - 0.213 * value; + var v11 = 0.715 + 0.285 * value; + var v12 = 0.072 - 0.072 * value; + var v13 = 0; + var v20 = 0.213 - 0.213 * value; + var v21 = 0.715 - 0.715 * value; + var v22 = 0.072 + 0.928 * value; + var v23 = 0; + var v30 = 0; + var v31 = 0; + var v32 = 0; + var v33 = 1; + goog.vec.Mat4.setFromValues(matrix, v00, v10, v20, v30, v01, v11, v21, v31, v02, v12, v22, v32, v03, v13, v23, v33); + return matrix +}; +ol.color.Matrix.prototype.getMatrix = function(brightness, contrast, hue, saturation) { + var colorMatrixDirty = false; + if(goog.isDef(brightness) && brightness !== this.brightness_) { + ol.color.Matrix.makeBrightness(this.brightnessMatrix_, brightness); + this.brightness_ = brightness; + colorMatrixDirty = true + } + if(goog.isDef(contrast) && contrast !== this.contrast_) { + ol.color.Matrix.makeContrast(this.contrastMatrix_, contrast); + this.contrast_ = contrast; + colorMatrixDirty = true + } + if(goog.isDef(hue) && hue !== this.hue_) { + ol.color.Matrix.makeHue(this.hueMatrix_, hue); + this.hue_ = hue; + colorMatrixDirty = true + } + if(goog.isDef(saturation) && saturation !== this.saturation_) { + ol.color.Matrix.makeSaturation(this.saturationMatrix_, saturation); + this.saturation_ = saturation; + colorMatrixDirty = true + } + if(colorMatrixDirty) { + var colorMatrix = this.colorMatrix_; + goog.vec.Mat4.makeIdentity(colorMatrix); + if(goog.isDef(contrast)) { + goog.vec.Mat4.multMat(colorMatrix, this.contrastMatrix_, colorMatrix) + } + if(goog.isDef(brightness)) { + goog.vec.Mat4.multMat(colorMatrix, this.brightnessMatrix_, colorMatrix) + } + if(goog.isDef(saturation)) { + goog.vec.Mat4.multMat(colorMatrix, this.saturationMatrix_, colorMatrix) + } + if(goog.isDef(hue)) { + goog.vec.Mat4.multMat(colorMatrix, this.hueMatrix_, colorMatrix) + } + } + return this.colorMatrix_ +}; +goog.provide("ol.webgl.shader"); +goog.require("goog.functions"); +goog.require("goog.webgl"); +goog.require("ol.webgl"); +ol.webgl.Shader = function(source) { + this.source_ = source +}; +ol.webgl.Shader.prototype.getType = goog.abstractMethod; +ol.webgl.Shader.prototype.getSource = function() { + return this.source_ +}; +ol.webgl.Shader.prototype.isAnimated = goog.functions.FALSE; +ol.webgl.shader.Fragment = function(source) { + goog.base(this, source) +}; +goog.inherits(ol.webgl.shader.Fragment, ol.webgl.Shader); +ol.webgl.shader.Fragment.prototype.getType = function() { + return goog.webgl.FRAGMENT_SHADER +}; +ol.webgl.shader.Vertex = function(source) { + goog.base(this, source) +}; +goog.inherits(ol.webgl.shader.Vertex, ol.webgl.Shader); +ol.webgl.shader.Vertex.prototype.getType = function() { + return goog.webgl.VERTEX_SHADER +}; +goog.provide("ol.renderer.webgl.map.shader.Color"); +goog.require("ol.webgl.shader"); +ol.renderer.webgl.map.shader.ColorFragment = function() { + goog.base(this, ol.renderer.webgl.map.shader.ColorFragment.SOURCE) +}; +goog.inherits(ol.renderer.webgl.map.shader.ColorFragment, ol.webgl.shader.Fragment); +goog.addSingletonGetter(ol.renderer.webgl.map.shader.ColorFragment); +ol.renderer.webgl.map.shader.ColorFragment.DEBUG_SOURCE = "precision mediump float;\nvarying vec2 v_texCoord;\n\n\n// @see https://svn.webkit.org/repository/webkit/trunk/Source/WebCore/platform/graphics/filters/skia/SkiaImageFilterBuilder.cpp\nuniform mat4 u_colorMatrix;\nuniform float u_opacity;\nuniform sampler2D u_texture;\n\nvoid main(void) {\n vec4 texColor \x3d texture2D(u_texture, v_texCoord);\n gl_FragColor.rgb \x3d (u_colorMatrix * vec4(texColor.rgb, 1.)).rgb;\n gl_FragColor.a \x3d texColor.a * u_opacity;\n}\n"; +ol.renderer.webgl.map.shader.ColorFragment.OPTIMIZED_SOURCE = "precision mediump float;varying vec2 a;uniform mat4 f;uniform float g;uniform sampler2D h;void main(void){vec4 texColor\x3dtexture2D(h,a);gl_FragColor.rgb\x3d(f*vec4(texColor.rgb,1.)).rgb;gl_FragColor.a\x3dtexColor.a*g;}"; +ol.renderer.webgl.map.shader.ColorFragment.SOURCE = goog.DEBUG ? ol.renderer.webgl.map.shader.ColorFragment.DEBUG_SOURCE : ol.renderer.webgl.map.shader.ColorFragment.OPTIMIZED_SOURCE; +ol.renderer.webgl.map.shader.ColorVertex = function() { + goog.base(this, ol.renderer.webgl.map.shader.ColorVertex.SOURCE) +}; +goog.inherits(ol.renderer.webgl.map.shader.ColorVertex, ol.webgl.shader.Vertex); +goog.addSingletonGetter(ol.renderer.webgl.map.shader.ColorVertex); +ol.renderer.webgl.map.shader.ColorVertex.DEBUG_SOURCE = "varying vec2 v_texCoord;\n\n\nattribute vec2 a_position;\nattribute vec2 a_texCoord;\n\nuniform mat4 u_texCoordMatrix;\nuniform mat4 u_projectionMatrix;\n\nvoid main(void) {\n gl_Position \x3d u_projectionMatrix * vec4(a_position, 0., 1.);\n v_texCoord \x3d (u_texCoordMatrix * vec4(a_texCoord, 0., 1.)).st;\n}\n\n\n"; +ol.renderer.webgl.map.shader.ColorVertex.OPTIMIZED_SOURCE = "varying vec2 a;attribute vec2 b;attribute vec2 c;uniform mat4 d;uniform mat4 e;void main(void){gl_Position\x3de*vec4(b,0.,1.);a\x3d(d*vec4(c,0.,1.)).st;}"; +ol.renderer.webgl.map.shader.ColorVertex.SOURCE = goog.DEBUG ? ol.renderer.webgl.map.shader.ColorVertex.DEBUG_SOURCE : ol.renderer.webgl.map.shader.ColorVertex.OPTIMIZED_SOURCE; +ol.renderer.webgl.map.shader.Color.Locations = function(gl, program) { + this.u_colorMatrix = gl.getUniformLocation(program, goog.DEBUG ? "u_colorMatrix" : "f"); + this.u_opacity = gl.getUniformLocation(program, goog.DEBUG ? "u_opacity" : "g"); + this.u_projectionMatrix = gl.getUniformLocation(program, goog.DEBUG ? "u_projectionMatrix" : "e"); + this.u_texCoordMatrix = gl.getUniformLocation(program, goog.DEBUG ? "u_texCoordMatrix" : "d"); + this.u_texture = gl.getUniformLocation(program, goog.DEBUG ? "u_texture" : "h"); + this.a_position = gl.getAttribLocation(program, goog.DEBUG ? "a_position" : "b"); + this.a_texCoord = gl.getAttribLocation(program, goog.DEBUG ? "a_texCoord" : "c") +}; +goog.provide("ol.renderer.webgl.map.shader.Default"); +goog.require("ol.webgl.shader"); +ol.renderer.webgl.map.shader.DefaultFragment = function() { + goog.base(this, ol.renderer.webgl.map.shader.DefaultFragment.SOURCE) +}; +goog.inherits(ol.renderer.webgl.map.shader.DefaultFragment, ol.webgl.shader.Fragment); +goog.addSingletonGetter(ol.renderer.webgl.map.shader.DefaultFragment); +ol.renderer.webgl.map.shader.DefaultFragment.DEBUG_SOURCE = "precision mediump float;\nvarying vec2 v_texCoord;\n\n\nuniform float u_opacity;\nuniform sampler2D u_texture;\n\nvoid main(void) {\n vec4 texColor \x3d texture2D(u_texture, v_texCoord);\n gl_FragColor.rgb \x3d texColor.rgb;\n gl_FragColor.a \x3d texColor.a * u_opacity;\n}\n"; +ol.renderer.webgl.map.shader.DefaultFragment.OPTIMIZED_SOURCE = "precision mediump float;varying vec2 a;uniform float f;uniform sampler2D g;void main(void){vec4 texColor\x3dtexture2D(g,a);gl_FragColor.rgb\x3dtexColor.rgb;gl_FragColor.a\x3dtexColor.a*f;}"; +ol.renderer.webgl.map.shader.DefaultFragment.SOURCE = goog.DEBUG ? ol.renderer.webgl.map.shader.DefaultFragment.DEBUG_SOURCE : ol.renderer.webgl.map.shader.DefaultFragment.OPTIMIZED_SOURCE; +ol.renderer.webgl.map.shader.DefaultVertex = function() { + goog.base(this, ol.renderer.webgl.map.shader.DefaultVertex.SOURCE) +}; +goog.inherits(ol.renderer.webgl.map.shader.DefaultVertex, ol.webgl.shader.Vertex); +goog.addSingletonGetter(ol.renderer.webgl.map.shader.DefaultVertex); +ol.renderer.webgl.map.shader.DefaultVertex.DEBUG_SOURCE = "varying vec2 v_texCoord;\n\n\nattribute vec2 a_position;\nattribute vec2 a_texCoord;\n\nuniform mat4 u_texCoordMatrix;\nuniform mat4 u_projectionMatrix;\n\nvoid main(void) {\n gl_Position \x3d u_projectionMatrix * vec4(a_position, 0., 1.);\n v_texCoord \x3d (u_texCoordMatrix * vec4(a_texCoord, 0., 1.)).st;\n}\n\n\n"; +ol.renderer.webgl.map.shader.DefaultVertex.OPTIMIZED_SOURCE = "varying vec2 a;attribute vec2 b;attribute vec2 c;uniform mat4 d;uniform mat4 e;void main(void){gl_Position\x3de*vec4(b,0.,1.);a\x3d(d*vec4(c,0.,1.)).st;}"; +ol.renderer.webgl.map.shader.DefaultVertex.SOURCE = goog.DEBUG ? ol.renderer.webgl.map.shader.DefaultVertex.DEBUG_SOURCE : ol.renderer.webgl.map.shader.DefaultVertex.OPTIMIZED_SOURCE; +ol.renderer.webgl.map.shader.Default.Locations = function(gl, program) { + this.u_opacity = gl.getUniformLocation(program, goog.DEBUG ? "u_opacity" : "f"); + this.u_projectionMatrix = gl.getUniformLocation(program, goog.DEBUG ? "u_projectionMatrix" : "e"); + this.u_texCoordMatrix = gl.getUniformLocation(program, goog.DEBUG ? "u_texCoordMatrix" : "d"); + this.u_texture = gl.getUniformLocation(program, goog.DEBUG ? "u_texture" : "g"); + this.a_position = gl.getAttribLocation(program, goog.DEBUG ? "a_position" : "b"); + this.a_texCoord = gl.getAttribLocation(program, goog.DEBUG ? "a_texCoord" : "c") +}; +goog.provide("ol.structs.IntegerSet"); +goog.require("goog.asserts"); +ol.structs.IntegerSet = function(opt_arr) { + this.arr_ = goog.isDef(opt_arr) ? opt_arr : []; + if(goog.DEBUG) { + this.assertValid() + } +}; +ol.structs.IntegerSet.prototype.addRange = function(addStart, addStop) { + goog.asserts.assert(addStart <= addStop); + if(addStart == addStop) { + return + } + var arr = this.arr_; + var n = arr.length; + var i; + for(i = 0;i < n;i += 2) { + if(addStart <= arr[i]) { + arr.splice(i, 0, addStart, addStop); + this.compactRanges_(); + return + } + } + arr.push(addStart, addStop); + this.compactRanges_() +}; +ol.structs.IntegerSet.prototype.assertValid = function() { + var arr = this.arr_; + var n = arr.length; + goog.asserts.assert(n % 2 === 0); + var i; + for(i = 1;i < n;++i) { + goog.asserts.assert(arr[i] > arr[i - 1]) + } +}; +ol.structs.IntegerSet.prototype.clear = function() { + this.arr_.length = 0 +}; +ol.structs.IntegerSet.prototype.compactRanges_ = function() { + var arr = this.arr_; + var n = arr.length; + var rangeIndex = 0; + var i; + for(i = 0;i < n;i += 2) { + if(arr[i] == arr[i + 1]) { + }else { + if(rangeIndex > 0 && arr[rangeIndex - 2] <= arr[i] && arr[i] <= arr[rangeIndex - 1]) { + arr[rangeIndex - 1] = Math.max(arr[rangeIndex - 1], arr[i + 1]) + }else { + arr[rangeIndex++] = arr[i]; + arr[rangeIndex++] = arr[i + 1] + } + } + } + arr.length = rangeIndex +}; +ol.structs.IntegerSet.prototype.findRange = function(minSize) { + goog.asserts.assert(minSize > 0); + var arr = this.arr_; + var n = arr.length; + var bestIndex = -1; + var bestSize, i, size; + for(i = 0;i < n;i += 2) { + size = arr[i + 1] - arr[i]; + if(size == minSize) { + return arr[i] + }else { + if(size > minSize && (bestIndex == -1 || size < bestSize)) { + bestIndex = arr[i]; + bestSize = size + } + } + } + return bestIndex +}; +ol.structs.IntegerSet.prototype.forEachRange = function(f, opt_this) { + var arr = this.arr_; + var n = arr.length; + var i; + for(i = 0;i < n;i += 2) { + f.call(opt_this, arr[i], arr[i + 1]) + } +}; +ol.structs.IntegerSet.prototype.forEachRangeInverted = function(start, stop, f, opt_this) { + goog.asserts.assert(start < stop); + var arr = this.arr_; + var n = arr.length; + if(n === 0) { + f.call(opt_this, start, stop) + }else { + if(start < arr[0]) { + f.call(opt_this, start, arr[0]) + } + var i; + for(i = 1;i < n - 1;i += 2) { + f.call(opt_this, arr[i], arr[i + 1]) + } + if(arr[n - 1] < stop) { + f.call(opt_this, arr[n - 1], stop) + } + } +}; +ol.structs.IntegerSet.prototype.getArray = function() { + return this.arr_ +}; +ol.structs.IntegerSet.prototype.getFirst = function() { + return this.arr_.length === 0 ? -1 : this.arr_[0] +}; +ol.structs.IntegerSet.prototype.getLast = function() { + var n = this.arr_.length; + return n === 0 ? -1 : this.arr_[n - 1] +}; +ol.structs.IntegerSet.prototype.getSize = function() { + var arr = this.arr_; + var n = arr.length; + var size = 0; + var i; + for(i = 0;i < n;i += 2) { + size += arr[i + 1] - arr[i] + } + return size +}; +ol.structs.IntegerSet.prototype.intersectsRange = function(start, stop) { + goog.asserts.assert(start <= stop); + if(start == stop) { + return false + }else { + var arr = this.arr_; + var n = arr.length; + var i = 0; + for(i = 0;i < n;i += 2) { + if(arr[i] <= start && start < arr[i + 1] || arr[i] < stop && stop - 1 < arr[i + 1] || start < arr[i] && arr[i + 1] <= stop) { + return true + } + } + return false + } +}; +ol.structs.IntegerSet.prototype.isEmpty = function() { + return this.arr_.length === 0 +}; +ol.structs.IntegerSet.prototype.pack = function() { + return this.arr_ +}; +ol.structs.IntegerSet.prototype.removeRange = function(removeStart, removeStop) { + goog.asserts.assert(removeStart <= removeStop); + var arr = this.arr_; + var n = arr.length; + var i; + for(i = 0;i < n;i += 2) { + if(removeStop < arr[i] || arr[i + 1] < removeStart) { + continue + }else { + if(arr[i] > removeStop) { + break + } + } + if(removeStart < arr[i]) { + if(removeStop == arr[i]) { + break + }else { + if(removeStop < arr[i + 1]) { + arr[i] = Math.max(arr[i], removeStop); + break + }else { + arr.splice(i, 2); + i -= 2; + n -= 2 + } + } + }else { + if(removeStart == arr[i]) { + if(removeStop < arr[i + 1]) { + arr[i] = removeStop; + break + }else { + if(removeStop == arr[i + 1]) { + arr.splice(i, 2); + break + }else { + arr.splice(i, 2); + i -= 2; + n -= 2 + } + } + }else { + if(removeStop < arr[i + 1]) { + arr.splice(i, 2, arr[i], removeStart, removeStop, arr[i + 1]); + break + }else { + if(removeStop == arr[i + 1]) { + arr[i + 1] = removeStart; + break + }else { + arr[i + 1] = removeStart + } + } + } + } + } + this.compactRanges_() +}; +if(goog.DEBUG) { + ol.structs.IntegerSet.prototype.toString = function() { + var arr = this.arr_; + var n = arr.length; + var result = new Array(n / 2); + var resultIndex = 0; + var i; + for(i = 0;i < n;i += 2) { + result[resultIndex++] = arr[i] + "-" + arr[i + 1] + } + return result.join(", ") + } +} +;goog.provide("ol.structs.Buffer"); +goog.require("goog.array"); +goog.require("goog.asserts"); +goog.require("goog.webgl"); +goog.require("ol.structs.IntegerSet"); +ol.structs.BufferUsage = {STATIC_DRAW:goog.webgl.STATIC_DRAW, STREAM_DRAW:goog.webgl.STREAM_DRAW, DYNAMIC_DRAW:goog.webgl.DYNAMIC_DRAW}; +ol.BUFFER_REPLACE_UNUSED_ENTRIES_WITH_NANS = goog.DEBUG; +ol.structs.Buffer = function(opt_arr, opt_used, opt_usage) { + this.arr_ = goog.isDef(opt_arr) ? opt_arr : []; + this.dirtySets_ = []; + this.freeSet_ = new ol.structs.IntegerSet; + var used = goog.isDef(opt_used) ? opt_used : this.arr_.length; + if(used < this.arr_.length) { + this.freeSet_.addRange(used, this.arr_.length) + } + if(ol.BUFFER_REPLACE_UNUSED_ENTRIES_WITH_NANS) { + var arr = this.arr_; + var n = arr.length; + var i; + for(i = used;i < n;++i) { + arr[i] = NaN + } + } + this.split32_ = null; + this.split32DirtySet_ = null; + this.usage_ = goog.isDef(opt_usage) ? opt_usage : ol.structs.BufferUsage.STATIC_DRAW +}; +ol.structs.Buffer.prototype.allocate = function(size) { + goog.asserts.assert(size > 0); + var offset = this.freeSet_.findRange(size); + goog.asserts.assert(offset != -1); + this.freeSet_.removeRange(offset, offset + size); + return offset +}; +ol.structs.Buffer.prototype.add = function(values) { + var size = values.length; + var offset = this.allocate(size); + var i; + for(i = 0;i < size;++i) { + this.arr_[offset + i] = values[i] + } + this.markDirty(size, offset); + return offset +}; +ol.structs.Buffer.prototype.addDirtySet = function(dirtySet) { + goog.asserts.assert(!goog.array.contains(this.dirtySets_, dirtySet)); + this.dirtySets_.push(dirtySet) +}; +ol.structs.Buffer.prototype.forEachRange = function(f, opt_this) { + if(this.arr_.length !== 0) { + this.freeSet_.forEachRangeInverted(0, this.arr_.length, f, opt_this) + } +}; +ol.structs.Buffer.prototype.getArray = function() { + return this.arr_ +}; +ol.structs.Buffer.prototype.getCount = function() { + return this.arr_.length - this.freeSet_.getSize() +}; +ol.structs.Buffer.prototype.getFreeSet = function() { + return this.freeSet_ +}; +ol.structs.Buffer.prototype.getSplit32 = function() { + var arr = this.arr_; + var n = arr.length; + if(goog.isNull(this.split32DirtySet_)) { + this.split32DirtySet_ = new ol.structs.IntegerSet([0, n]); + this.addDirtySet(this.split32DirtySet_) + } + if(goog.isNull(this.split32_)) { + this.split32_ = new Float32Array(2 * n) + } + var split32 = this.split32_; + this.split32DirtySet_.forEachRange(function(start, stop) { + var doubleHigh, i, j, value; + for(i = start, j = 2 * start;i < stop;++i, j += 2) { + value = arr[i]; + if(value < 0) { + doubleHigh = 65536 * Math.floor(-value / 65536); + split32[j] = -doubleHigh; + split32[j + 1] = value + doubleHigh + }else { + doubleHigh = 65536 * Math.floor(value / 65536); + split32[j] = doubleHigh; + split32[j + 1] = value - doubleHigh + } + } + }); + this.split32DirtySet_.clear(); + return this.split32_ +}; +ol.structs.Buffer.prototype.getUsage = function() { + return this.usage_ +}; +ol.structs.Buffer.prototype.markDirty = function(size, offset) { + var i, ii; + for(i = 0, ii = this.dirtySets_.length;i < ii;++i) { + this.dirtySets_[i].addRange(offset, offset + size) + } +}; +ol.structs.Buffer.prototype.remove = function(size, offset) { + var i, ii; + this.freeSet_.addRange(offset, offset + size); + for(i = 0, ii = this.dirtySets_.length;i < ii;++i) { + this.dirtySets_[i].removeRange(offset, offset + size) + } + if(ol.BUFFER_REPLACE_UNUSED_ENTRIES_WITH_NANS) { + var arr = this.arr_; + for(i = 0;i < size;++i) { + arr[offset + i] = NaN + } + } +}; +ol.structs.Buffer.prototype.removeDirtySet = function(dirtySet) { + var removed = goog.array.remove(this.dirtySets_, dirtySet); + goog.asserts.assert(removed) +}; +ol.structs.Buffer.prototype.set = function(values, offset) { + var arr = this.arr_; + var n = values.length; + goog.asserts.assert(0 <= offset && offset + n <= arr.length); + var i; + for(i = 0;i < n;++i) { + arr[offset + i] = values[i] + } + this.markDirty(n, offset) +}; +goog.provide("ol.renderer.webgl.Layer"); +goog.require("goog.vec.Mat4"); +goog.require("goog.webgl"); +goog.require("ol.FrameState"); +goog.require("ol.color.Matrix"); +goog.require("ol.layer.Layer"); +goog.require("ol.render.Event"); +goog.require("ol.render.EventType"); +goog.require("ol.render.webgl.Immediate"); +goog.require("ol.renderer.Layer"); +goog.require("ol.renderer.webgl.map.shader.Color"); +goog.require("ol.renderer.webgl.map.shader.Default"); +goog.require("ol.structs.Buffer"); +ol.renderer.webgl.Layer = function(mapRenderer, layer) { + goog.base(this, mapRenderer, layer); + this.arrayBuffer_ = new ol.structs.Buffer([-1, -1, 0, 0, 1, -1, 1, 0, -1, 1, 0, 1, 1, 1, 1, 1]); + this.texture = null; + this.framebuffer = null; + this.framebufferDimension = undefined; + this.texCoordMatrix = goog.vec.Mat4.createNumber(); + this.projectionMatrix = goog.vec.Mat4.createNumberIdentity(); + this.colorMatrix_ = new ol.color.Matrix; + this.colorLocations_ = null; + this.defaultLocations_ = null +}; +goog.inherits(ol.renderer.webgl.Layer, ol.renderer.Layer); +ol.renderer.webgl.Layer.prototype.bindFramebuffer = function(frameState, framebufferDimension) { + var mapRenderer = this.getWebGLMapRenderer(); + var gl = mapRenderer.getGL(); + if(!goog.isDef(this.framebufferDimension) || this.framebufferDimension != framebufferDimension) { + frameState.postRenderFunctions.push(goog.partial(function(gl, framebuffer, texture) { + if(!gl.isContextLost()) { + gl.deleteFramebuffer(framebuffer); + gl.deleteTexture(texture) + } + }, gl, this.framebuffer, this.texture)); + var texture = gl.createTexture(); + gl.bindTexture(goog.webgl.TEXTURE_2D, texture); + gl.texImage2D(goog.webgl.TEXTURE_2D, 0, goog.webgl.RGBA, framebufferDimension, framebufferDimension, 0, goog.webgl.RGBA, goog.webgl.UNSIGNED_BYTE, null); + gl.texParameteri(goog.webgl.TEXTURE_2D, goog.webgl.TEXTURE_MAG_FILTER, goog.webgl.LINEAR); + gl.texParameteri(goog.webgl.TEXTURE_2D, goog.webgl.TEXTURE_MIN_FILTER, goog.webgl.LINEAR); + var framebuffer = gl.createFramebuffer(); + gl.bindFramebuffer(goog.webgl.FRAMEBUFFER, framebuffer); + gl.framebufferTexture2D(goog.webgl.FRAMEBUFFER, goog.webgl.COLOR_ATTACHMENT0, goog.webgl.TEXTURE_2D, texture, 0); + this.texture = texture; + this.framebuffer = framebuffer; + this.framebufferDimension = framebufferDimension + }else { + gl.bindFramebuffer(goog.webgl.FRAMEBUFFER, this.framebuffer) + } +}; +ol.renderer.webgl.Layer.prototype.composeFrame = function(frameState, layerState, context) { + this.dispatchComposeEvent_(ol.render.EventType.PRECOMPOSE, context, frameState); + context.bindBuffer(goog.webgl.ARRAY_BUFFER, this.arrayBuffer_); + var gl = context.getGL(); + var useColor = layerState.brightness || layerState.contrast != 1 || layerState.hue || layerState.saturation != 1; + var fragmentShader, vertexShader; + if(useColor) { + fragmentShader = ol.renderer.webgl.map.shader.ColorFragment.getInstance(); + vertexShader = ol.renderer.webgl.map.shader.ColorVertex.getInstance() + }else { + fragmentShader = ol.renderer.webgl.map.shader.DefaultFragment.getInstance(); + vertexShader = ol.renderer.webgl.map.shader.DefaultVertex.getInstance() + } + var program = context.getProgram(fragmentShader, vertexShader); + var locations; + if(useColor) { + if(goog.isNull(this.colorLocations_)) { + locations = new ol.renderer.webgl.map.shader.Color.Locations(gl, program); + this.colorLocations_ = locations + }else { + locations = this.colorLocations_ + } + }else { + if(goog.isNull(this.defaultLocations_)) { + locations = new ol.renderer.webgl.map.shader.Default.Locations(gl, program); + this.defaultLocations_ = locations + }else { + locations = this.defaultLocations_ + } + } + if(context.useProgram(program)) { + gl.enableVertexAttribArray(locations.a_position); + gl.vertexAttribPointer(locations.a_position, 2, goog.webgl.FLOAT, false, 16, 0); + gl.enableVertexAttribArray(locations.a_texCoord); + gl.vertexAttribPointer(locations.a_texCoord, 2, goog.webgl.FLOAT, false, 16, 8); + gl.uniform1i(locations.u_texture, 0) + } + gl.uniformMatrix4fv(locations.u_texCoordMatrix, false, this.getTexCoordMatrix()); + gl.uniformMatrix4fv(locations.u_projectionMatrix, false, this.getProjectionMatrix()); + if(useColor) { + gl.uniformMatrix4fv(locations.u_colorMatrix, false, this.colorMatrix_.getMatrix(layerState.brightness, layerState.contrast, layerState.hue, layerState.saturation)) + } + gl.uniform1f(locations.u_opacity, layerState.opacity); + gl.bindTexture(goog.webgl.TEXTURE_2D, this.getTexture()); + gl.drawArrays(goog.webgl.TRIANGLE_STRIP, 0, 4); + this.dispatchComposeEvent_(ol.render.EventType.POSTCOMPOSE, context, frameState) +}; +ol.renderer.webgl.Layer.prototype.dispatchComposeEvent_ = function(type, context, frameState) { + var layer = this.getLayer(); + if(layer.hasListener(type)) { + var render = new ol.render.webgl.Immediate(context, frameState.pixelRatio); + var composeEvent = new ol.render.Event(type, layer, render, frameState, null, context); + layer.dispatchEvent(composeEvent) + } +}; +ol.renderer.webgl.Layer.prototype.getWebGLMapRenderer = function() { + return(this.getMapRenderer()) +}; +ol.renderer.webgl.Layer.prototype.getTexCoordMatrix = function() { + return this.texCoordMatrix +}; +ol.renderer.webgl.Layer.prototype.getTexture = function() { + return this.texture +}; +ol.renderer.webgl.Layer.prototype.getProjectionMatrix = function() { + return this.projectionMatrix +}; +ol.renderer.webgl.Layer.prototype.handleWebGLContextLost = function() { + this.texture = null; + this.framebuffer = null; + this.framebufferDimension = undefined +}; +goog.provide("ol.renderer.webgl.ImageLayer"); +goog.require("goog.asserts"); +goog.require("goog.events"); +goog.require("goog.events.EventType"); +goog.require("goog.vec.Mat4"); +goog.require("goog.webgl"); +goog.require("ol.Coordinate"); +goog.require("ol.Extent"); +goog.require("ol.ImageBase"); +goog.require("ol.ImageState"); +goog.require("ol.ViewHint"); +goog.require("ol.layer.Image"); +goog.require("ol.renderer.webgl.Layer"); +goog.require("ol.source.Image"); +ol.renderer.webgl.ImageLayer = function(mapRenderer, imageLayer) { + goog.base(this, mapRenderer, imageLayer); + this.image_ = null +}; +goog.inherits(ol.renderer.webgl.ImageLayer, ol.renderer.webgl.Layer); +ol.renderer.webgl.ImageLayer.prototype.createTexture_ = function(image) { + var imageElement = image.getImageElement(); + var gl = this.getWebGLMapRenderer().getGL(); + var texture = gl.createTexture(); + gl.bindTexture(goog.webgl.TEXTURE_2D, texture); + gl.texImage2D(goog.webgl.TEXTURE_2D, 0, goog.webgl.RGBA, goog.webgl.RGBA, goog.webgl.UNSIGNED_BYTE, imageElement); + gl.texParameteri(goog.webgl.TEXTURE_2D, goog.webgl.TEXTURE_WRAP_S, goog.webgl.CLAMP_TO_EDGE); + gl.texParameteri(goog.webgl.TEXTURE_2D, goog.webgl.TEXTURE_WRAP_T, goog.webgl.CLAMP_TO_EDGE); + gl.texParameteri(goog.webgl.TEXTURE_2D, goog.webgl.TEXTURE_MIN_FILTER, goog.webgl.LINEAR); + gl.texParameteri(goog.webgl.TEXTURE_2D, goog.webgl.TEXTURE_MAG_FILTER, goog.webgl.LINEAR); + return texture +}; +ol.renderer.webgl.ImageLayer.prototype.forEachFeatureAtPixel = function(coordinate, frameState, callback, thisArg) { + var layer = this.getLayer(); + var source = layer.getSource(); + goog.asserts.assertInstanceof(source, ol.source.Image); + var extent = frameState.extent; + var resolution = frameState.view2DState.resolution; + var rotation = frameState.view2DState.rotation; + return source.forEachFeatureAtPixel(extent, resolution, rotation, coordinate, function(feature) { + return callback.call(thisArg, feature, layer) + }) +}; +ol.renderer.webgl.ImageLayer.prototype.prepareFrame = function(frameState, layerState) { + var gl = this.getWebGLMapRenderer().getGL(); + var view2DState = frameState.view2DState; + var viewCenter = view2DState.center; + var viewResolution = view2DState.resolution; + var viewRotation = view2DState.rotation; + var image = this.image_; + var texture = this.texture; + var imageLayer = this.getLayer(); + goog.asserts.assertInstanceof(imageLayer, ol.layer.Image); + var imageSource = imageLayer.getSource(); + goog.asserts.assertInstanceof(imageSource, ol.source.Image); + var hints = frameState.viewHints; + if(!hints[ol.ViewHint.ANIMATING] && !hints[ol.ViewHint.INTERACTING]) { + var image_ = imageSource.getImage(frameState.extent, viewResolution, frameState.pixelRatio, view2DState.projection); + if(!goog.isNull(image_)) { + var imageState = image_.getState(); + if(imageState == ol.ImageState.IDLE) { + goog.events.listenOnce(image_, goog.events.EventType.CHANGE, this.handleImageChange, false, this); + image_.load() + }else { + if(imageState == ol.ImageState.LOADED) { + image = image_; + texture = this.createTexture_(image_); + if(!goog.isNull(this.texture)) { + frameState.postRenderFunctions.push(goog.partial(function(gl, texture) { + if(!gl.isContextLost()) { + gl.deleteTexture(texture) + } + }, gl, this.texture)) + } + } + } + } + } + if(!goog.isNull(image)) { + goog.asserts.assert(!goog.isNull(texture)); + var canvas = this.getWebGLMapRenderer().getContext().getCanvas(); + this.updateProjectionMatrix_(canvas.width, canvas.height, viewCenter, viewResolution, viewRotation, image.getExtent()); + var texCoordMatrix = this.texCoordMatrix; + goog.vec.Mat4.makeIdentity(texCoordMatrix); + goog.vec.Mat4.scale(texCoordMatrix, 1, -1, 1); + goog.vec.Mat4.translate(texCoordMatrix, 0, -1, 0); + this.image_ = image; + this.texture = texture; + this.updateAttributions(frameState.attributions, image.getAttributions()); + this.updateLogos(frameState, imageSource) + } +}; +ol.renderer.webgl.ImageLayer.prototype.updateProjectionMatrix_ = function(canvasWidth, canvasHeight, viewCenter, viewResolution, viewRotation, imageExtent) { + var canvasExtentWidth = canvasWidth * viewResolution; + var canvasExtentHeight = canvasHeight * viewResolution; + var projectionMatrix = this.projectionMatrix; + goog.vec.Mat4.makeIdentity(projectionMatrix); + goog.vec.Mat4.scale(projectionMatrix, 2 / canvasExtentWidth, 2 / canvasExtentHeight, 1); + goog.vec.Mat4.rotateZ(projectionMatrix, -viewRotation); + goog.vec.Mat4.translate(projectionMatrix, imageExtent[0] - viewCenter[0], imageExtent[1] - viewCenter[1], 0); + goog.vec.Mat4.scale(projectionMatrix, (imageExtent[2] - imageExtent[0]) / 2, (imageExtent[3] - imageExtent[1]) / 2, 1); + goog.vec.Mat4.translate(projectionMatrix, 1, 1, 0) +}; +goog.provide("ol.renderer.webgl.tilelayer.shader"); +goog.require("ol.webgl.shader"); +ol.renderer.webgl.tilelayer.shader.Fragment = function() { + goog.base(this, ol.renderer.webgl.tilelayer.shader.Fragment.SOURCE) +}; +goog.inherits(ol.renderer.webgl.tilelayer.shader.Fragment, ol.webgl.shader.Fragment); +goog.addSingletonGetter(ol.renderer.webgl.tilelayer.shader.Fragment); +ol.renderer.webgl.tilelayer.shader.Fragment.DEBUG_SOURCE = "precision mediump float;\nvarying vec2 v_texCoord;\n\n\nuniform sampler2D u_texture;\n\nvoid main(void) {\n gl_FragColor \x3d texture2D(u_texture, v_texCoord);\n}\n"; +ol.renderer.webgl.tilelayer.shader.Fragment.OPTIMIZED_SOURCE = "precision mediump float;varying vec2 a;uniform sampler2D e;void main(void){gl_FragColor\x3dtexture2D(e,a);}"; +ol.renderer.webgl.tilelayer.shader.Fragment.SOURCE = goog.DEBUG ? ol.renderer.webgl.tilelayer.shader.Fragment.DEBUG_SOURCE : ol.renderer.webgl.tilelayer.shader.Fragment.OPTIMIZED_SOURCE; +ol.renderer.webgl.tilelayer.shader.Vertex = function() { + goog.base(this, ol.renderer.webgl.tilelayer.shader.Vertex.SOURCE) +}; +goog.inherits(ol.renderer.webgl.tilelayer.shader.Vertex, ol.webgl.shader.Vertex); +goog.addSingletonGetter(ol.renderer.webgl.tilelayer.shader.Vertex); +ol.renderer.webgl.tilelayer.shader.Vertex.DEBUG_SOURCE = "varying vec2 v_texCoord;\n\n\nattribute vec2 a_position;\nattribute vec2 a_texCoord;\nuniform vec4 u_tileOffset;\n\nvoid main(void) {\n gl_Position \x3d vec4(a_position * u_tileOffset.xy + u_tileOffset.zw, 0., 1.);\n v_texCoord \x3d a_texCoord;\n}\n\n\n"; +ol.renderer.webgl.tilelayer.shader.Vertex.OPTIMIZED_SOURCE = "varying vec2 a;attribute vec2 b;attribute vec2 c;uniform vec4 d;void main(void){gl_Position\x3dvec4(b*d.xy+d.zw,0.,1.);a\x3dc;}"; +ol.renderer.webgl.tilelayer.shader.Vertex.SOURCE = goog.DEBUG ? ol.renderer.webgl.tilelayer.shader.Vertex.DEBUG_SOURCE : ol.renderer.webgl.tilelayer.shader.Vertex.OPTIMIZED_SOURCE; +ol.renderer.webgl.tilelayer.shader.Locations = function(gl, program) { + this.u_texture = gl.getUniformLocation(program, goog.DEBUG ? "u_texture" : "e"); + this.u_tileOffset = gl.getUniformLocation(program, goog.DEBUG ? "u_tileOffset" : "d"); + this.a_position = gl.getAttribLocation(program, goog.DEBUG ? "a_position" : "b"); + this.a_texCoord = gl.getAttribLocation(program, goog.DEBUG ? "a_texCoord" : "c") +}; +goog.provide("ol.renderer.webgl.TileLayer"); +goog.require("goog.array"); +goog.require("goog.asserts"); +goog.require("goog.object"); +goog.require("goog.vec.Mat4"); +goog.require("goog.vec.Vec4"); +goog.require("goog.webgl"); +goog.require("ol.Tile"); +goog.require("ol.TileRange"); +goog.require("ol.TileState"); +goog.require("ol.extent"); +goog.require("ol.layer.Tile"); +goog.require("ol.math"); +goog.require("ol.renderer.webgl.Layer"); +goog.require("ol.renderer.webgl.tilelayer.shader"); +goog.require("ol.source.Tile"); +goog.require("ol.structs.Buffer"); +ol.renderer.webgl.TileLayer = function(mapRenderer, tileLayer) { + goog.base(this, mapRenderer, tileLayer); + this.fragmentShader_ = ol.renderer.webgl.tilelayer.shader.Fragment.getInstance(); + this.vertexShader_ = ol.renderer.webgl.tilelayer.shader.Vertex.getInstance(); + this.locations_ = null; + this.renderArrayBuffer_ = new ol.structs.Buffer([0, 0, 0, 1, 1, 0, 1, 1, 0, 1, 0, 0, 1, 1, 1, 0]); + this.renderedTileRange_ = null; + this.renderedFramebufferExtent_ = null; + this.renderedRevision_ = -1 +}; +goog.inherits(ol.renderer.webgl.TileLayer, ol.renderer.webgl.Layer); +ol.renderer.webgl.TileLayer.prototype.disposeInternal = function() { + var mapRenderer = this.getWebGLMapRenderer(); + var context = mapRenderer.getContext(); + context.deleteBuffer(this.renderArrayBuffer_); + goog.base(this, "disposeInternal") +}; +ol.renderer.webgl.TileLayer.prototype.handleWebGLContextLost = function() { + goog.base(this, "handleWebGLContextLost"); + this.locations_ = null +}; +ol.renderer.webgl.TileLayer.prototype.prepareFrame = function(frameState, layerState) { + var mapRenderer = this.getWebGLMapRenderer(); + var context = mapRenderer.getContext(); + var gl = mapRenderer.getGL(); + var view2DState = frameState.view2DState; + var projection = view2DState.projection; + var tileLayer = this.getLayer(); + goog.asserts.assertInstanceof(tileLayer, ol.layer.Tile); + var tileSource = tileLayer.getSource(); + goog.asserts.assertInstanceof(tileSource, ol.source.Tile); + var tileGrid = tileSource.getTileGridForProjection(projection); + var z = tileGrid.getZForResolution(view2DState.resolution); + var tileResolution = tileGrid.getResolution(z); + var tilePixelSize = tileSource.getTilePixelSize(z, frameState.pixelRatio, projection); + var pixelRatio = tilePixelSize / tileGrid.getTileSize(z); + var tilePixelResolution = tileResolution / pixelRatio; + var tileGutter = tileSource.getGutter(); + var center = view2DState.center; + var extent; + if(tileResolution == view2DState.resolution) { + center = this.snapCenterToPixel(center, tileResolution, frameState.size); + extent = ol.extent.getForView2DAndSize(center, tileResolution, view2DState.rotation, frameState.size) + }else { + extent = frameState.extent + } + var tileRange = tileGrid.getTileRangeForExtentAndResolution(extent, tileResolution); + var framebufferExtent; + if(!goog.isNull(this.renderedTileRange_) && this.renderedTileRange_.equals(tileRange) && this.renderedRevision_ == tileSource.getRevision()) { + framebufferExtent = this.renderedFramebufferExtent_ + }else { + var tileRangeSize = tileRange.getSize(); + var maxDimension = Math.max(tileRangeSize[0] * tilePixelSize, tileRangeSize[1] * tilePixelSize); + var framebufferDimension = ol.math.roundUpToPowerOfTwo(maxDimension); + var framebufferExtentDimension = tilePixelResolution * framebufferDimension; + var origin = tileGrid.getOrigin(z); + var minX = origin[0] + tileRange.minX * tilePixelSize * tilePixelResolution; + var minY = origin[1] + tileRange.minY * tilePixelSize * tilePixelResolution; + framebufferExtent = [minX, minY, minX + framebufferExtentDimension, minY + framebufferExtentDimension]; + this.bindFramebuffer(frameState, framebufferDimension); + gl.viewport(0, 0, framebufferDimension, framebufferDimension); + gl.clearColor(0, 0, 0, 0); + gl.clear(goog.webgl.COLOR_BUFFER_BIT); + gl.disable(goog.webgl.BLEND); + var program = context.getProgram(this.fragmentShader_, this.vertexShader_); + context.useProgram(program); + if(goog.isNull(this.locations_)) { + this.locations_ = new ol.renderer.webgl.tilelayer.shader.Locations(gl, program) + } + context.bindBuffer(goog.webgl.ARRAY_BUFFER, this.renderArrayBuffer_); + gl.enableVertexAttribArray(this.locations_.a_position); + gl.vertexAttribPointer(this.locations_.a_position, 2, goog.webgl.FLOAT, false, 16, 0); + gl.enableVertexAttribArray(this.locations_.a_texCoord); + gl.vertexAttribPointer(this.locations_.a_texCoord, 2, goog.webgl.FLOAT, false, 16, 8); + gl.uniform1i(this.locations_.u_texture, 0); + var tilesToDrawByZ = {}; + tilesToDrawByZ[z] = {}; + var getTileIfLoaded = this.createGetTileIfLoadedFunction(function(tile) { + return!goog.isNull(tile) && tile.getState() == ol.TileState.LOADED && mapRenderer.isTileTextureLoaded(tile) + }, tileSource, pixelRatio, projection); + var findLoadedTiles = goog.bind(tileSource.findLoadedTiles, tileSource, tilesToDrawByZ, getTileIfLoaded); + var useInterimTilesOnError = tileLayer.getUseInterimTilesOnError(); + if(!goog.isDef(useInterimTilesOnError)) { + useInterimTilesOnError = true + } + var allTilesLoaded = true; + var tmpExtent = ol.extent.createEmpty(); + var tmpTileRange = new ol.TileRange(0, 0, 0, 0); + var childTileRange, fullyLoaded, tile, tileState, x, y; + for(x = tileRange.minX;x <= tileRange.maxX;++x) { + for(y = tileRange.minY;y <= tileRange.maxY;++y) { + tile = tileSource.getTile(z, x, y, pixelRatio, projection); + tileState = tile.getState(); + if(tileState == ol.TileState.LOADED) { + if(mapRenderer.isTileTextureLoaded(tile)) { + tilesToDrawByZ[z][tile.tileCoord.toString()] = tile; + continue + } + }else { + if(tileState == ol.TileState.EMPTY || tileState == ol.TileState.ERROR && !useInterimTilesOnError) { + continue + } + } + allTilesLoaded = false; + fullyLoaded = tileGrid.forEachTileCoordParentTileRange(tile.tileCoord, findLoadedTiles, null, tmpTileRange, tmpExtent); + if(!fullyLoaded) { + childTileRange = tileGrid.getTileCoordChildTileRange(tile.tileCoord, tmpTileRange, tmpExtent); + if(!goog.isNull(childTileRange)) { + findLoadedTiles(z + 1, childTileRange) + } + } + } + } + var zs = goog.array.map(goog.object.getKeys(tilesToDrawByZ), Number); + goog.array.sort(zs); + var u_tileOffset = goog.vec.Vec4.createFloat32(); + var i, ii, sx, sy, tileExtent, tileKey, tilesToDraw, tx, ty; + for(i = 0, ii = zs.length;i < ii;++i) { + tilesToDraw = tilesToDrawByZ[zs[i]]; + for(tileKey in tilesToDraw) { + tile = tilesToDraw[tileKey]; + tileExtent = tileGrid.getTileCoordExtent(tile.tileCoord, tmpExtent); + sx = 2 * (tileExtent[2] - tileExtent[0]) / framebufferExtentDimension; + sy = 2 * (tileExtent[3] - tileExtent[1]) / framebufferExtentDimension; + tx = 2 * (tileExtent[0] - framebufferExtent[0]) / framebufferExtentDimension - 1; + ty = 2 * (tileExtent[1] - framebufferExtent[1]) / framebufferExtentDimension - 1; + goog.vec.Vec4.setFromValues(u_tileOffset, sx, sy, tx, ty); + gl.uniform4fv(this.locations_.u_tileOffset, u_tileOffset); + mapRenderer.bindTileTexture(tile, tilePixelSize, tileGutter * pixelRatio, goog.webgl.LINEAR, goog.webgl.LINEAR); + gl.drawArrays(goog.webgl.TRIANGLE_STRIP, 0, 4) + } + } + if(allTilesLoaded) { + this.renderedTileRange_ = tileRange; + this.renderedFramebufferExtent_ = framebufferExtent; + this.renderedRevision_ = tileSource.getRevision() + }else { + this.renderedTileRange_ = null; + this.renderedFramebufferExtent_ = null; + this.renderedRevision_ = -1; + frameState.animate = true + } + } + this.updateUsedTiles(frameState.usedTiles, tileSource, z, tileRange); + var tileTextureQueue = mapRenderer.getTileTextureQueue(); + this.manageTilePyramid(frameState, tileSource, tileGrid, pixelRatio, projection, extent, z, tileLayer.getPreload(), function(tile) { + if(tile.getState() == ol.TileState.LOADED && !mapRenderer.isTileTextureLoaded(tile) && !tileTextureQueue.isKeyQueued(tile.getKey())) { + tileTextureQueue.enqueue([tile, tileGrid.getTileCoordCenter(tile.tileCoord), tileGrid.getResolution(tile.tileCoord.z), tilePixelSize, tileGutter * pixelRatio]) + } + }, this); + this.scheduleExpireCache(frameState, tileSource); + this.updateLogos(frameState, tileSource); + var texCoordMatrix = this.texCoordMatrix; + goog.vec.Mat4.makeIdentity(texCoordMatrix); + goog.vec.Mat4.translate(texCoordMatrix, (center[0] - framebufferExtent[0]) / (framebufferExtent[2] - framebufferExtent[0]), (center[1] - framebufferExtent[1]) / (framebufferExtent[3] - framebufferExtent[1]), 0); + if(view2DState.rotation !== 0) { + goog.vec.Mat4.rotateZ(texCoordMatrix, view2DState.rotation) + } + goog.vec.Mat4.scale(texCoordMatrix, frameState.size[0] * view2DState.resolution / (framebufferExtent[2] - framebufferExtent[0]), frameState.size[1] * view2DState.resolution / (framebufferExtent[3] - framebufferExtent[1]), 1); + goog.vec.Mat4.translate(texCoordMatrix, -0.5, -0.5, 0) +}; +goog.provide("ol.structs.LRUCache"); +goog.require("goog.asserts"); +goog.require("goog.object"); +ol.structs.LRUCache = function() { + this.count_ = 0; + this.entries_ = {}; + this.oldest_ = null; + this.newest_ = null +}; +ol.structs.LRUCache.prototype.assertValid = function() { + if(this.count_ === 0) { + goog.asserts.assert(goog.object.isEmpty(this.entries_)); + goog.asserts.assert(goog.isNull(this.oldest_)); + goog.asserts.assert(goog.isNull(this.newest_)) + }else { + goog.asserts.assert(goog.object.getCount(this.entries_) == this.count_); + goog.asserts.assert(!goog.isNull(this.oldest_)); + goog.asserts.assert(goog.isNull(this.oldest_.older)); + goog.asserts.assert(!goog.isNull(this.newest_)); + goog.asserts.assert(goog.isNull(this.newest_.newer)); + var i, entry; + var older = null; + i = 0; + for(entry = this.oldest_;!goog.isNull(entry);entry = entry.newer) { + goog.asserts.assert(entry.older === older); + older = entry; + ++i + } + goog.asserts.assert(i == this.count_); + var newer = null; + i = 0; + for(entry = this.newest_;!goog.isNull(entry);entry = entry.older) { + goog.asserts.assert(entry.newer === newer); + newer = entry; + ++i + } + goog.asserts.assert(i == this.count_) + } +}; +ol.structs.LRUCache.prototype.clear = function() { + this.count_ = 0; + this.entries_ = {}; + this.oldest_ = null; + this.newest_ = null +}; +ol.structs.LRUCache.prototype.containsKey = function(key) { + return this.entries_.hasOwnProperty(key) +}; +ol.structs.LRUCache.prototype.forEach = function(f, opt_this) { + var entry = this.oldest_; + while(!goog.isNull(entry)) { + f.call(opt_this, entry.value_, entry.key_, this); + entry = entry.newer + } +}; +ol.structs.LRUCache.prototype.get = function(key) { + var entry = this.entries_[key]; + goog.asserts.assert(goog.isDef(entry)); + if(entry === this.newest_) { + return entry.value_ + }else { + if(entry === this.oldest_) { + this.oldest_ = this.oldest_.newer; + this.oldest_.older = null + }else { + entry.newer.older = entry.older; + entry.older.newer = entry.newer + } + } + entry.newer = null; + entry.older = this.newest_; + this.newest_.newer = entry; + this.newest_ = entry; + return entry.value_ +}; +ol.structs.LRUCache.prototype.getCount = function() { + return this.count_ +}; +ol.structs.LRUCache.prototype.getKeys = function() { + var keys = new Array(this.count_); + var i = 0; + var entry; + for(entry = this.newest_;!goog.isNull(entry);entry = entry.older) { + keys[i++] = entry.key_ + } + goog.asserts.assert(i == this.count_); + return keys +}; +ol.structs.LRUCache.prototype.getValues = function() { + var values = new Array(this.count_); + var i = 0; + var entry; + for(entry = this.newest_;!goog.isNull(entry);entry = entry.older) { + values[i++] = entry.value_ + } + goog.asserts.assert(i == this.count_); + return values +}; +ol.structs.LRUCache.prototype.peekLast = function() { + goog.asserts.assert(!goog.isNull(this.oldest_)); + return this.oldest_.value_ +}; +ol.structs.LRUCache.prototype.peekLastKey = function() { + goog.asserts.assert(!goog.isNull(this.oldest_)); + return this.oldest_.key_ +}; +ol.structs.LRUCache.prototype.pop = function() { + goog.asserts.assert(!goog.isNull(this.oldest_)); + goog.asserts.assert(!goog.isNull(this.newest_)); + var entry = this.oldest_; + goog.asserts.assert(entry.key_ in this.entries_); + delete this.entries_[entry.key_]; + if(!goog.isNull(entry.newer)) { + entry.newer.older = null + } + this.oldest_ = entry.newer; + if(goog.isNull(this.oldest_)) { + this.newest_ = null + } + --this.count_; + return entry.value_ +}; +ol.structs.LRUCache.prototype.set = function(key, value) { + goog.asserts.assert(!(key in {})); + goog.asserts.assert(!(key in this.entries_)); + var entry = {key_:key, newer:null, older:this.newest_, value_:value}; + if(goog.isNull(this.newest_)) { + this.oldest_ = entry + }else { + this.newest_.newer = entry + } + this.newest_ = entry; + this.entries_[key] = entry; + ++this.count_ +}; +ol.structs.LRUCacheEntry; +goog.provide("ol.webgl.Context"); +goog.require("goog.asserts"); +goog.require("goog.events"); +goog.require("goog.log"); +goog.require("goog.object"); +goog.require("ol.structs.Buffer"); +goog.require("ol.structs.IntegerSet"); +goog.require("ol.webgl.WebGLContextEventType"); +ol.webgl.BufferCacheEntry; +ol.webgl.Context = function(canvas, gl) { + this.canvas_ = canvas; + this.gl_ = gl; + this.bufferCache_ = {}; + this.shaderCache_ = {}; + this.programCache_ = {}; + this.currentProgram_ = null; + goog.events.listen(this.canvas_, ol.webgl.WebGLContextEventType.LOST, this.handleWebGLContextLost, false, this); + goog.events.listen(this.canvas_, ol.webgl.WebGLContextEventType.RESTORED, this.handleWebGLContextRestored, false, this) +}; +ol.webgl.Context.prototype.bindBuffer = function(target, buf) { + var gl = this.getGL(); + var arr = buf.getArray(); + var bufferKey = goog.getUid(buf); + if(bufferKey in this.bufferCache_) { + var bufferCacheEntry = this.bufferCache_[bufferKey]; + gl.bindBuffer(target, bufferCacheEntry.buffer); + bufferCacheEntry.dirtySet.forEachRange(function(start, stop) { + var slice = arr.slice(start, stop); + gl.bufferSubData(target, start, target == goog.webgl.ARRAY_BUFFER ? new Float32Array(slice) : new Uint16Array(slice)) + }); + bufferCacheEntry.dirtySet.clear() + }else { + var buffer = gl.createBuffer(); + gl.bindBuffer(target, buffer); + gl.bufferData(target, target == goog.webgl.ARRAY_BUFFER ? new Float32Array(arr) : new Uint16Array(arr), buf.getUsage()); + var dirtySet = new ol.structs.IntegerSet; + buf.addDirtySet(dirtySet); + this.bufferCache_[bufferKey] = {buf:buf, buffer:buffer, dirtySet:dirtySet} + } +}; +ol.webgl.Context.prototype.deleteBuffer = function(buf) { + var gl = this.getGL(); + var bufferKey = goog.getUid(buf); + goog.asserts.assert(bufferKey in this.bufferCache_); + var bufferCacheEntry = this.bufferCache_[bufferKey]; + bufferCacheEntry.buf.removeDirtySet(bufferCacheEntry.dirtySet); + if(!gl.isContextLost()) { + gl.deleteBuffer(bufferCacheEntry.buffer) + } + delete this.bufferCache_[bufferKey] +}; +ol.webgl.Context.prototype.disposeInternal = function() { + goog.object.forEach(this.bufferCache_, function(bufferCacheEntry) { + bufferCacheEntry.buf.removeDirtySet(bufferCacheEntry.dirtySet) + }); + var gl = this.getGL(); + if(!gl.isContextLost()) { + goog.object.forEach(this.bufferCache_, function(bufferCacheEntry) { + gl.deleteBuffer(bufferCacheEntry.buffer) + }); + goog.object.forEach(this.programCache_, function(program) { + gl.deleteProgram(program) + }); + goog.object.forEach(this.shaderCache_, function(shader) { + gl.deleteShader(shader) + }) + } +}; +ol.webgl.Context.prototype.getCanvas = function() { + return this.canvas_ +}; +ol.webgl.Context.prototype.getGL = function() { + return this.gl_ +}; +ol.webgl.Context.prototype.getShader = function(shaderObject) { + var shaderKey = goog.getUid(shaderObject); + if(shaderKey in this.shaderCache_) { + return this.shaderCache_[shaderKey] + }else { + var gl = this.getGL(); + var shader = gl.createShader(shaderObject.getType()); + gl.shaderSource(shader, shaderObject.getSource()); + gl.compileShader(shader); + if(goog.DEBUG) { + if(!gl.getShaderParameter(shader, goog.webgl.COMPILE_STATUS) && !gl.isContextLost()) { + goog.log.error(this.logger_, gl.getShaderInfoLog(shader)) + } + } + goog.asserts.assert(gl.getShaderParameter(shader, goog.webgl.COMPILE_STATUS) || gl.isContextLost()); + this.shaderCache_[shaderKey] = shader; + return shader + } +}; +ol.webgl.Context.prototype.getProgram = function(fragmentShaderObject, vertexShaderObject) { + var programKey = goog.getUid(fragmentShaderObject) + "/" + goog.getUid(vertexShaderObject); + if(programKey in this.programCache_) { + return this.programCache_[programKey] + }else { + var gl = this.getGL(); + var program = gl.createProgram(); + gl.attachShader(program, this.getShader(fragmentShaderObject)); + gl.attachShader(program, this.getShader(vertexShaderObject)); + gl.linkProgram(program); + if(goog.DEBUG) { + if(!gl.getProgramParameter(program, goog.webgl.LINK_STATUS) && !gl.isContextLost()) { + goog.log.error(this.logger_, gl.getProgramInfoLog(program)) + } + } + goog.asserts.assert(gl.getProgramParameter(program, goog.webgl.LINK_STATUS) || gl.isContextLost()); + this.programCache_[programKey] = program; + return program + } +}; +ol.webgl.Context.prototype.handleWebGLContextLost = function() { + goog.object.clear(this.bufferCache_); + goog.object.clear(this.shaderCache_); + goog.object.clear(this.programCache_); + this.currentProgram_ = null +}; +ol.webgl.Context.prototype.handleWebGLContextRestored = function() { +}; +ol.webgl.Context.prototype.useProgram = function(program) { + if(program == this.currentProgram_) { + return false + }else { + var gl = this.getGL(); + gl.useProgram(program); + this.currentProgram_ = program; + return true + } +}; +ol.webgl.Context.prototype.logger_ = goog.log.getLogger("ol.webgl.Context"); +goog.provide("ol.renderer.webgl.Map"); +goog.require("goog.array"); +goog.require("goog.asserts"); +goog.require("goog.dom"); +goog.require("goog.dom.TagName"); +goog.require("goog.events"); +goog.require("goog.events.Event"); +goog.require("goog.log"); +goog.require("goog.log.Logger"); +goog.require("goog.object"); +goog.require("goog.style"); +goog.require("goog.webgl"); +goog.require("ol.FrameState"); +goog.require("ol.Tile"); +goog.require("ol.css"); +goog.require("ol.layer.Image"); +goog.require("ol.layer.Tile"); +goog.require("ol.render.Event"); +goog.require("ol.render.EventType"); +goog.require("ol.render.webgl.Immediate"); +goog.require("ol.renderer.Map"); +goog.require("ol.renderer.webgl.ImageLayer"); +goog.require("ol.renderer.webgl.Layer"); +goog.require("ol.renderer.webgl.TileLayer"); +goog.require("ol.source.State"); +goog.require("ol.structs.LRUCache"); +goog.require("ol.structs.PriorityQueue"); +goog.require("ol.webgl"); +goog.require("ol.webgl.Context"); +goog.require("ol.webgl.WebGLContextEventType"); +ol.WEBGL_TEXTURE_CACHE_HIGH_WATER_MARK = 1024; +ol.renderer.webgl.TextureCacheEntry; +ol.renderer.webgl.Map = function(container, map) { + goog.base(this, container, map); + this.canvas_ = (goog.dom.createElement(goog.dom.TagName.CANVAS)); + this.canvas_.style.width = "100%"; + this.canvas_.style.height = "100%"; + this.canvas_.className = ol.css.CLASS_UNSELECTABLE; + goog.dom.insertChildAt(container, this.canvas_, 0); + this.clipTileCanvas_ = (goog.dom.createElement(goog.dom.TagName.CANVAS)); + this.clipTileCanvasSize_ = 0; + this.clipTileContext_ = (this.clipTileCanvas_.getContext("2d")); + this.renderedVisible_ = true; + this.gl_ = ol.webgl.getContext(this.canvas_, {antialias:true, depth:false, failIfMajorPerformanceCaveat:true, preserveDrawingBuffer:false, stencil:true}); + goog.asserts.assert(!goog.isNull(this.gl_)); + this.context_ = new ol.webgl.Context(this.canvas_, this.gl_); + goog.events.listen(this.canvas_, ol.webgl.WebGLContextEventType.LOST, this.handleWebGLContextLost, false, this); + goog.events.listen(this.canvas_, ol.webgl.WebGLContextEventType.RESTORED, this.handleWebGLContextRestored, false, this); + this.textureCache_ = new ol.structs.LRUCache; + this.focus_ = null; + this.tileTextureQueue_ = new ol.structs.PriorityQueue(goog.bind(function(element) { + var tileCenter = (element[1]); + var tileResolution = (element[2]); + var deltaX = tileCenter[0] - this.focus_[0]; + var deltaY = tileCenter[1] - this.focus_[1]; + return 65536 * Math.log(tileResolution) + Math.sqrt(deltaX * deltaX + deltaY * deltaY) / tileResolution + }, this), function(element) { + return(element[0]).getKey() + }); + this.loadNextTileTexture_ = goog.bind(function(map, frameState) { + if(!this.tileTextureQueue_.isEmpty()) { + this.tileTextureQueue_.reprioritize(); + var element = this.tileTextureQueue_.dequeue(); + var tile = (element[0]); + var tileSize = (element[3]); + var tileGutter = (element[4]); + this.bindTileTexture(tile, tileSize, tileGutter, goog.webgl.LINEAR, goog.webgl.LINEAR) + } + }, this); + this.textureCacheFrameMarkerCount_ = 0; + this.initializeGL_() +}; +goog.inherits(ol.renderer.webgl.Map, ol.renderer.Map); +ol.renderer.webgl.Map.prototype.bindTileTexture = function(tile, tileSize, tileGutter, magFilter, minFilter) { + var gl = this.getGL(); + var tileKey = tile.getKey(); + if(this.textureCache_.containsKey(tileKey)) { + var textureCacheEntry = (this.textureCache_.get(tileKey)); + gl.bindTexture(goog.webgl.TEXTURE_2D, textureCacheEntry.texture); + if(textureCacheEntry.magFilter != magFilter) { + gl.texParameteri(goog.webgl.TEXTURE_2D, goog.webgl.TEXTURE_MAG_FILTER, magFilter); + textureCacheEntry.magFilter = magFilter + } + if(textureCacheEntry.minFilter != minFilter) { + gl.texParameteri(goog.webgl.TEXTURE_2D, goog.webgl.TEXTURE_MAG_FILTER, minFilter); + textureCacheEntry.minFilter = minFilter + } + }else { + var texture = gl.createTexture(); + gl.bindTexture(goog.webgl.TEXTURE_2D, texture); + if(tileGutter > 0) { + var clipTileCanvas = this.clipTileCanvas_; + var clipTileContext = this.clipTileContext_; + if(this.clipTileCanvasSize_ != tileSize) { + clipTileCanvas.width = tileSize; + clipTileCanvas.height = tileSize; + this.clipTileCanvasSize_ = tileSize + }else { + clipTileContext.clearRect(0, 0, tileSize, tileSize) + } + clipTileContext.drawImage(tile.getImage(), tileGutter, tileGutter, tileSize, tileSize, 0, 0, tileSize, tileSize); + gl.texImage2D(goog.webgl.TEXTURE_2D, 0, goog.webgl.RGBA, goog.webgl.RGBA, goog.webgl.UNSIGNED_BYTE, clipTileCanvas) + }else { + gl.texImage2D(goog.webgl.TEXTURE_2D, 0, goog.webgl.RGBA, goog.webgl.RGBA, goog.webgl.UNSIGNED_BYTE, tile.getImage()) + } + gl.texParameteri(goog.webgl.TEXTURE_2D, goog.webgl.TEXTURE_MAG_FILTER, magFilter); + gl.texParameteri(goog.webgl.TEXTURE_2D, goog.webgl.TEXTURE_MIN_FILTER, minFilter); + gl.texParameteri(goog.webgl.TEXTURE_2D, goog.webgl.TEXTURE_WRAP_S, goog.webgl.CLAMP_TO_EDGE); + gl.texParameteri(goog.webgl.TEXTURE_2D, goog.webgl.TEXTURE_WRAP_T, goog.webgl.CLAMP_TO_EDGE); + this.textureCache_.set(tileKey, {texture:texture, magFilter:magFilter, minFilter:minFilter}) + } +}; +ol.renderer.webgl.Map.prototype.createLayerRenderer = function(layer) { + if(ol.ENABLE_IMAGE && layer instanceof ol.layer.Image) { + return new ol.renderer.webgl.ImageLayer(this, layer) + }else { + if(ol.ENABLE_TILE && layer instanceof ol.layer.Tile) { + return new ol.renderer.webgl.TileLayer(this, layer) + }else { + goog.asserts.fail(); + return null + } + } +}; +ol.renderer.webgl.Map.prototype.dispatchComposeEvent_ = function(type, frameState) { + var map = this.getMap(); + if(map.hasListener(type)) { + var context = this.getContext(); + var render = new ol.render.webgl.Immediate(context, frameState.pixelRatio); + var composeEvent = new ol.render.Event(type, map, render, frameState, null, context); + map.dispatchEvent(composeEvent) + } +}; +ol.renderer.webgl.Map.prototype.disposeInternal = function() { + var gl = this.getGL(); + if(!gl.isContextLost()) { + this.textureCache_.forEach(function(textureCacheEntry) { + if(!goog.isNull(textureCacheEntry)) { + gl.deleteTexture(textureCacheEntry.texture) + } + }) + } + goog.dispose(this.context_); + goog.base(this, "disposeInternal") +}; +ol.renderer.webgl.Map.prototype.expireCache_ = function(map, frameState) { + var gl = this.getGL(); + var textureCacheEntry; + while(this.textureCache_.getCount() - this.textureCacheFrameMarkerCount_ > ol.WEBGL_TEXTURE_CACHE_HIGH_WATER_MARK) { + textureCacheEntry = (this.textureCache_.peekLast()); + if(goog.isNull(textureCacheEntry)) { + if(+this.textureCache_.peekLastKey() == frameState.index) { + break + }else { + --this.textureCacheFrameMarkerCount_ + } + }else { + gl.deleteTexture(textureCacheEntry.texture) + } + this.textureCache_.pop() + } +}; +ol.renderer.webgl.Map.prototype.getContext = function() { + return this.context_ +}; +ol.renderer.webgl.Map.prototype.getGL = function() { + return this.gl_ +}; +ol.renderer.webgl.Map.prototype.getTileTextureQueue = function() { + return this.tileTextureQueue_ +}; +ol.renderer.webgl.Map.prototype.handleWebGLContextLost = function(event) { + event.preventDefault(); + this.textureCache_.clear(); + this.textureCacheFrameMarkerCount_ = 0; + goog.object.forEach(this.getLayerRenderers(), function(layerRenderer, key, object) { + goog.asserts.assertInstanceof(layerRenderer, ol.renderer.webgl.Layer); + var webGLLayerRenderer = (layerRenderer); + webGLLayerRenderer.handleWebGLContextLost() + }) +}; +ol.renderer.webgl.Map.prototype.handleWebGLContextRestored = function() { + this.initializeGL_(); + this.getMap().render() +}; +ol.renderer.webgl.Map.prototype.initializeGL_ = function() { + var gl = this.gl_; + gl.activeTexture(goog.webgl.TEXTURE0); + gl.blendFuncSeparate(goog.webgl.SRC_ALPHA, goog.webgl.ONE_MINUS_SRC_ALPHA, goog.webgl.ONE, goog.webgl.ONE_MINUS_SRC_ALPHA); + gl.disable(goog.webgl.CULL_FACE); + gl.disable(goog.webgl.DEPTH_TEST); + gl.disable(goog.webgl.SCISSOR_TEST); + gl.disable(goog.webgl.STENCIL_TEST) +}; +ol.renderer.webgl.Map.prototype.isTileTextureLoaded = function(tile) { + return this.textureCache_.containsKey(tile.getKey()) +}; +ol.renderer.webgl.Map.prototype.logger_ = goog.log.getLogger("ol.renderer.webgl.Map"); +ol.renderer.webgl.Map.prototype.renderFrame = function(frameState) { + var context = this.getContext(); + var gl = this.getGL(); + if(gl.isContextLost()) { + return false + } + if(goog.isNull(frameState)) { + if(this.renderedVisible_) { + goog.style.setElementShown(this.canvas_, false); + this.renderedVisible_ = false + } + return false + } + this.focus_ = frameState.focus; + this.textureCache_.set((-frameState.index).toString(), null); + ++this.textureCacheFrameMarkerCount_; + var layersToDraw = []; + var layersArray = frameState.layersArray; + var viewResolution = frameState.view2DState.resolution; + var i, ii, layer, layerRenderer, layerState; + for(i = 0, ii = layersArray.length;i < ii;++i) { + layer = layersArray[i]; + layerState = frameState.layerStates[goog.getUid(layer)]; + if(layerState.visible && layerState.sourceState == ol.source.State.READY && viewResolution < layerState.maxResolution && viewResolution >= layerState.minResolution) { + layersToDraw.push(layer) + } + } + for(i = 0, ii = layersToDraw.length;i < ii;++i) { + layer = layersToDraw[i]; + layerRenderer = this.getLayerRenderer(layer); + goog.asserts.assertInstanceof(layerRenderer, ol.renderer.webgl.Layer); + layerState = frameState.layerStates[goog.getUid(layer)]; + layerRenderer.prepareFrame(frameState, layerState) + } + var width = frameState.size[0] * frameState.pixelRatio; + var height = frameState.size[1] * frameState.pixelRatio; + if(this.canvas_.width != width || this.canvas_.height != height) { + this.canvas_.width = width; + this.canvas_.height = height + } + gl.bindFramebuffer(goog.webgl.FRAMEBUFFER, null); + gl.clearColor(0, 0, 0, 0); + gl.clear(goog.webgl.COLOR_BUFFER_BIT); + gl.enable(goog.webgl.BLEND); + gl.viewport(0, 0, this.canvas_.width, this.canvas_.height); + this.dispatchComposeEvent_(ol.render.EventType.PRECOMPOSE, frameState); + for(i = 0, ii = layersToDraw.length;i < ii;++i) { + layer = layersToDraw[i]; + layerState = frameState.layerStates[goog.getUid(layer)]; + layerRenderer = this.getLayerRenderer(layer); + goog.asserts.assertInstanceof(layerRenderer, ol.renderer.webgl.Layer); + layerRenderer.composeFrame(frameState, layerState, context) + } + if(!this.renderedVisible_) { + goog.style.setElementShown(this.canvas_, true); + this.renderedVisible_ = true + } + this.calculateMatrices2D(frameState); + if(this.textureCache_.getCount() - this.textureCacheFrameMarkerCount_ > ol.WEBGL_TEXTURE_CACHE_HIGH_WATER_MARK) { + frameState.postRenderFunctions.push(goog.bind(this.expireCache_, this)) + } + if(!this.tileTextureQueue_.isEmpty()) { + frameState.postRenderFunctions.push(this.loadNextTileTexture_); + frameState.animate = true + } + this.dispatchComposeEvent_(ol.render.EventType.POSTCOMPOSE, frameState); + this.scheduleRemoveUnusedLayerRenderers(frameState); + this.scheduleExpireIconCache(frameState) +}; +goog.provide("ol.Map"); +goog.provide("ol.MapProperty"); +goog.provide("ol.RendererHint"); +goog.require("goog.Uri.QueryData"); +goog.require("goog.array"); +goog.require("goog.asserts"); +goog.require("goog.async.AnimationDelay"); +goog.require("goog.async.nextTick"); +goog.require("goog.debug.Console"); +goog.require("goog.dom"); +goog.require("goog.dom.TagName"); +goog.require("goog.dom.ViewportSizeMonitor"); +goog.require("goog.events"); +goog.require("goog.events.BrowserEvent"); +goog.require("goog.events.Event"); +goog.require("goog.events.EventType"); +goog.require("goog.events.KeyHandler"); +goog.require("goog.events.KeyHandler.EventType"); +goog.require("goog.events.MouseWheelHandler"); +goog.require("goog.events.MouseWheelHandler.EventType"); +goog.require("goog.log"); +goog.require("goog.log.Level"); +goog.require("goog.object"); +goog.require("goog.style"); +goog.require("goog.vec.Mat4"); +goog.require("ol.BrowserFeature"); +goog.require("ol.Collection"); +goog.require("ol.CollectionEventType"); +goog.require("ol.FrameState"); +goog.require("ol.IView"); +goog.require("ol.MapBrowserEvent"); +goog.require("ol.MapBrowserEvent.EventType"); +goog.require("ol.MapBrowserEventHandler"); +goog.require("ol.MapEvent"); +goog.require("ol.MapEventType"); +goog.require("ol.Object"); +goog.require("ol.ObjectEvent"); +goog.require("ol.ObjectEventType"); +goog.require("ol.Pixel"); +goog.require("ol.PostRenderFunction"); +goog.require("ol.PreRenderFunction"); +goog.require("ol.Size"); +goog.require("ol.Tile"); +goog.require("ol.TileQueue"); +goog.require("ol.View"); +goog.require("ol.View2D"); +goog.require("ol.ViewHint"); +goog.require("ol.control"); +goog.require("ol.extent"); +goog.require("ol.interaction"); +goog.require("ol.layer.Base"); +goog.require("ol.layer.Group"); +goog.require("ol.proj"); +goog.require("ol.proj.common"); +goog.require("ol.renderer.Map"); +goog.require("ol.renderer.canvas.Map"); +goog.require("ol.renderer.dom.Map"); +goog.require("ol.renderer.webgl.Map"); +goog.require("ol.structs.PriorityQueue"); +goog.require("ol.vec.Mat4"); +ol.OL3_URL = "http://ol3js.org/"; +ol.OL3_LOGO_URL = "data:image/png;base64," + "iVBORw0KGgoAAAANSUhEUgAAACAAAAAgCAMAAABEpIrGAAAAA3NCSVQICAjb4U/gAAAACXBI" + "WXMAAAHGAAABxgEXwfpGAAAAGXRFWHRTb2Z0d2FyZQB3d3cuaW5rc2NhcGUub3Jnm+48GgAA" + "AhNQTFRF////AP//AICAgP//AFVVQECA////K1VVSbbbYL/fJ05idsTYJFtbbcjbJllmZszW" + "WMTOIFhoHlNiZszTa9DdUcHNHlNlV8XRIVdiasrUHlZjIVZjaMnVH1RlIFRkH1RkH1ZlasvY" + "asvXVsPQH1VkacnVa8vWIVZjIFRjVMPQa8rXIVVkXsXRsNveIFVkIFZlIVVj3eDeh6GmbMvX" + "H1ZkIFRka8rWbMvXIFVkIFVjIFVkbMvWH1VjbMvWIFVlbcvWIFVla8vVIFVkbMvWbMvVH1Vk" + +"bMvWIFVlbcvWIFVkbcvVbMvWjNPbIFVkU8LPwMzNIFVkbczWIFVkbsvWbMvXIFVkRnB8bcvW" + "2+TkW8XRIFVkIlZlJVloJlpoKlxrLl9tMmJwOWd0Omh1RXF8TneCT3iDUHiDU8LPVMLPVcLP" + "VcPQVsPPVsPQV8PQWMTQWsTQW8TQXMXSXsXRX4SNX8bSYMfTYcfTYsfTY8jUZcfSZsnUaIqT" + "acrVasrVa8jTa8rWbI2VbMvWbcvWdJObdcvUdszUd8vVeJaee87Yfc3WgJyjhqGnitDYjaar" + "ldPZnrK2oNbborW5o9bbo9fbpLa6q9ndrL3ArtndscDDutzfu8fJwN7gwt7gxc/QyuHhy+Hi" + "zeHi0NfX0+Pj19zb1+Tj2uXk29/e3uLg3+Lh3+bl4uXj4ufl4+fl5Ofl5ufl5ujm5+jmySDn" + "BAAAAFp0Uk5TAAECAgMEBAYHCA0NDg4UGRogIiMmKSssLzU7PkJJT1JTVFliY2hrdHZ3foSF" + +"hYeJjY2QkpugqbG1tre5w8zQ09XY3uXn6+zx8vT09vf4+Pj5+fr6/P39/f3+gz7SsAAAAVVJ" + "REFUOMtjYKA7EBDnwCPLrObS1BRiLoJLnte6CQy8FLHLCzs2QUG4FjZ5GbcmBDDjxJBXDWxC" + "Brb8aM4zbkIDzpLYnAcE9VXlJSWlZRU13koIeW57mGx5XjoMZEUqwxWYQaQbSzLSkYGfKFSe" + "0QMsX5WbjgY0YS4MBplemI4BdGBW+DQ11eZiymfqQuXZIjqwyadPNoSZ4L+0FVM6e+oGI6g8" + "a9iKNT3o8kVzNkzRg5lgl7p4wyRUL9Yt2jAxVh6mQCogae6GmflI8p0r13VFWTHBQ0rWPW7a" + "hgWVcPm+9cuLoyy4kCJDzCm6d8PSFoh0zvQNC5OjDJhQopPPJqph1doJBUD5tnkbZiUEqaCn" + "B3bTqLTFG1bPn71kw4b+GFdpLElKIzRxxgYgWNYc5SCENVHKeUaltHdXx0dZ8uBI1hJ2UUDg" + +"q82CM2MwKeibqAvSO7MCABq0wXEPiqWEAAAAAElFTkSuQmCC"; +ol.RendererHint = {CANVAS:"canvas", DOM:"dom", WEBGL:"webgl"}; +ol.DEFAULT_RENDERER_HINTS = [ol.RendererHint.WEBGL, ol.RendererHint.CANVAS, ol.RendererHint.DOM]; +ol.MapProperty = {LAYERGROUP:"layergroup", SIZE:"size", TARGET:"target", VIEW:"view"}; +ol.Map = function(options) { + goog.base(this); + var optionsInternal = ol.Map.createOptionsInternal(options); + this.pixelRatio_ = goog.isDef(options.pixelRatio) ? options.pixelRatio : ol.BrowserFeature.DEVICE_PIXEL_RATIO; + this.ol3Logo_ = optionsInternal.ol3Logo; + this.animationDelay_ = new goog.async.AnimationDelay(this.renderFrame_, undefined, this); + this.registerDisposable(this.animationDelay_); + this.coordinateToPixelMatrix_ = goog.vec.Mat4.createNumber(); + this.pixelToCoordinateMatrix_ = goog.vec.Mat4.createNumber(); + this.frameIndex_ = 0; + this.frameState_ = null; + this.viewPropertyListenerKey_ = null; + this.layerGroupPropertyListenerKeys_ = null; + this.viewport_ = goog.dom.createDom(goog.dom.TagName.DIV, "ol-viewport"); + this.viewport_.style.position = "relative"; + this.viewport_.style.overflow = "hidden"; + this.viewport_.style.width = "100%"; + this.viewport_.style.height = "100%"; + this.viewport_.style.msTouchAction = "none"; + if(ol.BrowserFeature.HAS_TOUCH) { + this.viewport_.className = "ol-touch" + } + this.overlayContainer_ = goog.dom.createDom(goog.dom.TagName.DIV, "ol-overlaycontainer"); + goog.dom.appendChild(this.viewport_, this.overlayContainer_); + this.overlayContainerStopEvent_ = goog.dom.createDom(goog.dom.TagName.DIV, "ol-overlaycontainer-stopevent"); + goog.events.listen(this.overlayContainerStopEvent_, [goog.events.EventType.CLICK, goog.events.EventType.DBLCLICK, goog.events.EventType.MOUSEDOWN, goog.events.EventType.TOUCHSTART, goog.events.EventType.MSPOINTERDOWN], goog.events.Event.stopPropagation); + goog.dom.appendChild(this.viewport_, this.overlayContainerStopEvent_); + var mapBrowserEventHandler = new ol.MapBrowserEventHandler(this); + goog.events.listen(mapBrowserEventHandler, goog.object.getValues(ol.MapBrowserEvent.EventType), this.handleMapBrowserEvent, false, this); + this.registerDisposable(mapBrowserEventHandler); + this.keyboardEventTarget_ = optionsInternal.keyboardEventTarget; + this.keyHandler_ = new goog.events.KeyHandler; + goog.events.listen(this.keyHandler_, goog.events.KeyHandler.EventType.KEY, this.handleBrowserEvent, false, this); + this.registerDisposable(this.keyHandler_); + var mouseWheelHandler = new goog.events.MouseWheelHandler(this.viewport_); + goog.events.listen(mouseWheelHandler, goog.events.MouseWheelHandler.EventType.MOUSEWHEEL, this.handleBrowserEvent, false, this); + this.registerDisposable(mouseWheelHandler); + this.controls_ = optionsInternal.controls; + this.deviceOptions_ = optionsInternal.deviceOptions; + this.interactions_ = optionsInternal.interactions; + this.overlays_ = optionsInternal.overlays; + this.renderer_ = new optionsInternal.rendererConstructor(this.viewport_, this); + this.registerDisposable(this.renderer_); + this.viewportSizeMonitor_ = new goog.dom.ViewportSizeMonitor; + goog.events.listen(this.viewportSizeMonitor_, goog.events.EventType.RESIZE, this.updateSize, false, this); + this.focus_ = null; + this.preRenderFunctions_ = []; + this.postRenderFunctions_ = []; + this.tileQueue_ = new ol.TileQueue(goog.bind(this.getTilePriority, this), goog.bind(this.handleTileChange_, this)); + goog.events.listen(this, ol.Object.getChangeEventType(ol.MapProperty.LAYERGROUP), this.handleLayerGroupChanged_, false, this); + goog.events.listen(this, ol.Object.getChangeEventType(ol.MapProperty.VIEW), this.handleViewChanged_, false, this); + goog.events.listen(this, ol.Object.getChangeEventType(ol.MapProperty.SIZE), this.handleSizeChanged_, false, this); + goog.events.listen(this, ol.Object.getChangeEventType(ol.MapProperty.TARGET), this.handleTargetChanged_, false, this); + this.setValues(optionsInternal.values); + this.controls_.forEach(function(control) { + control.setMap(this) + }, this); + goog.events.listen(this.controls_, ol.CollectionEventType.ADD, function(event) { + event.element.setMap(this) + }, false, this); + goog.events.listen(this.controls_, ol.CollectionEventType.REMOVE, function(event) { + event.element.setMap(null) + }, false, this); + this.interactions_.forEach(function(interaction) { + interaction.setMap(this) + }, this); + goog.events.listen(this.interactions_, ol.CollectionEventType.ADD, function(event) { + event.element.setMap(this) + }, false, this); + goog.events.listen(this.interactions_, ol.CollectionEventType.REMOVE, function(event) { + event.element.setMap(null) + }, false, this); + this.overlays_.forEach(function(overlay) { + overlay.setMap(this) + }, this); + goog.events.listen(this.overlays_, ol.CollectionEventType.ADD, function(event) { + event.element.setMap(this) + }, false, this); + goog.events.listen(this.overlays_, ol.CollectionEventType.REMOVE, function(event) { + event.element.setMap(null) + }, false, this) +}; +goog.inherits(ol.Map, ol.Object); +ol.Map.prototype.addControl = function(control) { + var controls = this.getControls(); + goog.asserts.assert(goog.isDef(controls)); + controls.push(control) +}; +ol.Map.prototype.addInteraction = function(interaction) { + var interactions = this.getInteractions(); + goog.asserts.assert(goog.isDef(interactions)); + interactions.push(interaction) +}; +ol.Map.prototype.addLayer = function(layer) { + var layers = this.getLayerGroup().getLayers(); + goog.asserts.assert(goog.isDef(layers)); + layers.push(layer) +}; +ol.Map.prototype.addOverlay = function(overlay) { + var overlays = this.getOverlays(); + goog.asserts.assert(goog.isDef(overlays)); + overlays.push(overlay) +}; +ol.Map.prototype.beforeRender = function(var_args) { + this.render(); + Array.prototype.push.apply(this.preRenderFunctions_, arguments) +}; +ol.Map.prototype.removePreRenderFunction = function(preRenderFunction) { + return goog.array.remove(this.preRenderFunctions_, preRenderFunction) +}; +ol.Map.prototype.disposeInternal = function() { + goog.dom.removeNode(this.viewport_); + goog.base(this, "disposeInternal") +}; +ol.Map.prototype.forEachFeatureAtPixel = function(pixel, callback, opt_this, opt_layerFilter, opt_this2) { + if(goog.isNull(this.frameState_)) { + return + } + var coordinate = this.getCoordinateFromPixel(pixel); + var thisArg = goog.isDef(opt_this) ? opt_this : null; + var layerFilter = goog.isDef(opt_layerFilter) ? opt_layerFilter : goog.functions.TRUE; + var thisArg2 = goog.isDef(opt_this2) ? opt_this2 : null; + return this.renderer_.forEachFeatureAtPixel(coordinate, this.frameState_, callback, thisArg, layerFilter, thisArg2) +}; +ol.Map.prototype.getEventCoordinate = function(event) { + return this.getCoordinateFromPixel(this.getEventPixel(event)) +}; +ol.Map.prototype.getEventPixel = function(event) { + if(goog.isDef(event.changedTouches)) { + var touch = event.changedTouches.item(0); + var viewportPosition = goog.style.getClientPosition(this.viewport_); + return[touch.clientX - viewportPosition.x, touch.clientY - viewportPosition.y] + }else { + var eventPosition = goog.style.getRelativePosition(event, this.viewport_); + return[eventPosition.x, eventPosition.y] + } +}; +ol.Map.prototype.getTarget = function() { + return(this.get(ol.MapProperty.TARGET)) +}; +goog.exportProperty(ol.Map.prototype, "getTarget", ol.Map.prototype.getTarget); +ol.Map.prototype.getCoordinateFromPixel = function(pixel) { + var frameState = this.frameState_; + if(goog.isNull(frameState)) { + return null + }else { + var vec2 = pixel.slice(); + return ol.vec.Mat4.multVec2(frameState.pixelToCoordinateMatrix, vec2, vec2) + } +}; +ol.Map.prototype.getControls = function() { + return this.controls_ +}; +ol.Map.prototype.getOverlays = function() { + return this.overlays_ +}; +ol.Map.prototype.getInteractions = function() { + return this.interactions_ +}; +ol.Map.prototype.getLayerGroup = function() { + return(this.get(ol.MapProperty.LAYERGROUP)) +}; +goog.exportProperty(ol.Map.prototype, "getLayerGroup", ol.Map.prototype.getLayerGroup); +ol.Map.prototype.getLayers = function() { + var layerGroup = this.getLayerGroup(); + if(goog.isDef(layerGroup)) { + return layerGroup.getLayers() + }else { + return undefined + } +}; +ol.Map.prototype.getPixelFromCoordinate = function(coordinate) { + var frameState = this.frameState_; + if(goog.isNull(frameState)) { + return null + }else { + var vec2 = coordinate.slice(0, 2); + return ol.vec.Mat4.multVec2(frameState.coordinateToPixelMatrix, vec2, vec2) + } +}; +ol.Map.prototype.getSize = function() { + return(this.get(ol.MapProperty.SIZE)) +}; +goog.exportProperty(ol.Map.prototype, "getSize", ol.Map.prototype.getSize); +ol.Map.prototype.getView = function() { + return(this.get(ol.MapProperty.VIEW)) +}; +goog.exportProperty(ol.Map.prototype, "getView", ol.Map.prototype.getView); +ol.Map.prototype.getViewport = function() { + return this.viewport_ +}; +ol.Map.prototype.getOverlayContainer = function() { + return this.overlayContainer_ +}; +ol.Map.prototype.getOverlayContainerStopEvent = function() { + return this.overlayContainerStopEvent_ +}; +ol.Map.prototype.getTilePriority = function(tile, tileSourceKey, tileCenter, tileResolution) { + var frameState = this.frameState_; + if(goog.isNull(frameState) || !(tileSourceKey in frameState.wantedTiles)) { + return ol.structs.PriorityQueue.DROP + } + var coordKey = tile.tileCoord.toString(); + if(!frameState.wantedTiles[tileSourceKey][coordKey]) { + return ol.structs.PriorityQueue.DROP + } + var deltaX = tileCenter[0] - frameState.focus[0]; + var deltaY = tileCenter[1] - frameState.focus[1]; + return 65536 * Math.log(tileResolution) + Math.sqrt(deltaX * deltaX + deltaY * deltaY) / tileResolution +}; +ol.Map.prototype.handleBrowserEvent = function(browserEvent, opt_type) { + var type = opt_type || browserEvent.type; + var mapBrowserEvent = new ol.MapBrowserEvent(type, this, browserEvent); + this.handleMapBrowserEvent(mapBrowserEvent) +}; +ol.Map.prototype.handleMapBrowserEvent = function(mapBrowserEvent) { + if(goog.isNull(this.frameState_)) { + return + } + this.focus_ = mapBrowserEvent.coordinate; + mapBrowserEvent.frameState = this.frameState_; + var interactions = this.getInteractions(); + var interactionsArray = (interactions.getArray()); + var i; + if(this.dispatchEvent(mapBrowserEvent) !== false) { + for(i = interactionsArray.length - 1;i >= 0;i--) { + var interaction = interactionsArray[i]; + var cont = interaction.handleMapBrowserEvent(mapBrowserEvent); + if(!cont) { + break + } + } + } +}; +ol.Map.prototype.handlePostRender = function() { + var frameState = this.frameState_; + var tileQueue = this.tileQueue_; + if(!tileQueue.isEmpty()) { + var maxTotalLoading = 16; + var maxNewLoads = maxTotalLoading; + var tileSourceCount = 0; + if(!goog.isNull(frameState)) { + var hints = frameState.viewHints; + var deviceOptions = this.deviceOptions_; + if(hints[ol.ViewHint.ANIMATING]) { + maxTotalLoading = deviceOptions.loadTilesWhileAnimating === false ? 0 : 8; + maxNewLoads = 2 + } + if(hints[ol.ViewHint.INTERACTING]) { + maxTotalLoading = deviceOptions.loadTilesWhileInteracting === false ? 0 : 8; + maxNewLoads = 2 + } + tileSourceCount = goog.object.getCount(frameState.wantedTiles) + } + maxTotalLoading *= tileSourceCount; + maxNewLoads *= tileSourceCount; + if(tileQueue.getTilesLoading() < maxTotalLoading) { + tileQueue.reprioritize(); + tileQueue.loadMoreTiles(maxTotalLoading, maxNewLoads) + } + } + var postRenderFunctions = this.postRenderFunctions_; + var i, ii; + for(i = 0, ii = postRenderFunctions.length;i < ii;++i) { + postRenderFunctions[i](this, frameState) + } + postRenderFunctions.length = 0 +}; +ol.Map.prototype.handleSizeChanged_ = function() { + this.render() +}; +ol.Map.prototype.handleTargetChanged_ = function() { + var target = this.getTarget(); + var targetElement = goog.isDef(target) ? goog.dom.getElement(target) : null; + this.keyHandler_.detach(); + if(goog.isNull(targetElement)) { + goog.dom.removeNode(this.viewport_) + }else { + goog.dom.appendChild(targetElement, this.viewport_); + var keyboardEventTarget = goog.isNull(this.keyboardEventTarget_) ? targetElement : this.keyboardEventTarget_; + this.keyHandler_.attach(keyboardEventTarget) + } + this.updateSize() +}; +ol.Map.prototype.handleTileChange_ = function() { + this.render() +}; +ol.Map.prototype.handleViewPropertyChanged_ = function() { + this.render() +}; +ol.Map.prototype.handleViewChanged_ = function() { + if(!goog.isNull(this.viewPropertyListenerKey_)) { + goog.events.unlistenByKey(this.viewPropertyListenerKey_); + this.viewPropertyListenerKey_ = null + } + var view = this.getView(); + if(goog.isDefAndNotNull(view)) { + this.viewPropertyListenerKey_ = goog.events.listen(view, ol.ObjectEventType.PROPERTYCHANGE, this.handleViewPropertyChanged_, false, this) + } + this.render() +}; +ol.Map.prototype.handleLayerGroupMemberChanged_ = function(event) { + goog.asserts.assertInstanceof(event, goog.events.Event); + this.render() +}; +ol.Map.prototype.handleLayerGroupPropertyChanged_ = function(event) { + goog.asserts.assertInstanceof(event, ol.ObjectEvent); + this.render() +}; +ol.Map.prototype.handleLayerGroupChanged_ = function() { + if(!goog.isNull(this.layerGroupPropertyListenerKeys_)) { + var length = this.layerGroupPropertyListenerKeys_.length; + for(var i = 0;i < length;++i) { + goog.events.unlistenByKey(this.layerGroupPropertyListenerKeys_[i]) + } + this.layerGroupPropertyListenerKeys_ = null + } + var layerGroup = this.getLayerGroup(); + if(goog.isDefAndNotNull(layerGroup)) { + this.layerGroupPropertyListenerKeys_ = [goog.events.listen(layerGroup, ol.ObjectEventType.PROPERTYCHANGE, this.handleLayerGroupPropertyChanged_, false, this), goog.events.listen(layerGroup, goog.events.EventType.CHANGE, this.handleLayerGroupMemberChanged_, false, this)] + } + this.render() +}; +ol.Map.prototype.isDef = function() { + if(!goog.dom.contains(document, this.viewport_)) { + return false + } + if(!goog.style.isElementShown(this.viewport_)) { + return false + } + var size = this.getSize(); + if(!goog.isDefAndNotNull(size) || size[0] <= 0 || size[1] <= 0) { + return false + } + var view = this.getView(); + if(!goog.isDef(view) || !view.isDef()) { + return false + } + return true +}; +ol.Map.prototype.isRendered = function() { + return!goog.isNull(this.frameState_) +}; +ol.Map.prototype.renderSync = function() { + this.animationDelay_.fire() +}; +ol.Map.prototype.render = function() { + if(!this.animationDelay_.isActive()) { + this.animationDelay_.start() + } +}; +ol.Map.prototype.removeControl = function(control) { + var controls = this.getControls(); + goog.asserts.assert(goog.isDef(controls)); + if(goog.isDef(controls.remove(control))) { + return control + } + return undefined +}; +ol.Map.prototype.removeInteraction = function(interaction) { + var removed; + var interactions = this.getInteractions(); + goog.asserts.assert(goog.isDef(interactions)); + if(goog.isDef(interactions.remove(interaction))) { + removed = interaction + } + return removed +}; +ol.Map.prototype.removeLayer = function(layer) { + var layers = this.getLayerGroup().getLayers(); + goog.asserts.assert(goog.isDef(layers)); + return(layers.remove(layer)) +}; +ol.Map.prototype.removeOverlay = function(overlay) { + var overlays = this.getOverlays(); + goog.asserts.assert(goog.isDef(overlays)); + if(goog.isDef(overlays.remove(overlay))) { + return overlay + } + return undefined +}; +ol.Map.prototype.renderFrame_ = function(time) { + var i, ii, view2DState; + function hasArea(size) { + return size[0] > 0 && size[1] > 0 + } + var size = this.getSize(); + var view = this.getView(); + var view2D = goog.isDef(view) ? this.getView().getView2D() : undefined; + var frameState = null; + if(goog.isDef(size) && hasArea(size) && goog.isDef(view2D) && view2D.isDef()) { + var viewHints = view.getHints(); + var obj = this.getLayerGroup().getLayerStatesArray(); + var layersArray = obj.layers; + var layerStatesArray = obj.layerStates; + var layerStates = {}; + var layer; + for(i = 0, ii = layersArray.length;i < ii;++i) { + layer = layersArray[i]; + layerStates[goog.getUid(layer)] = layerStatesArray[i] + } + view2DState = view2D.getView2DState(); + frameState = {animate:false, attributions:{}, coordinateToPixelMatrix:this.coordinateToPixelMatrix_, extent:null, focus:goog.isNull(this.focus_) ? view2DState.center : this.focus_, index:this.frameIndex_++, layersArray:layersArray, layerStates:layerStates, logos:{}, pixelRatio:this.pixelRatio_, pixelToCoordinateMatrix:this.pixelToCoordinateMatrix_, postRenderFunctions:[], size:size, tileQueue:this.tileQueue_, time:time, usedTiles:{}, view2DState:view2DState, viewHints:viewHints, wantedTiles:{}}; + if(this.ol3Logo_) { + frameState.logos[ol.OL3_LOGO_URL] = ol.OL3_URL + } + } + var preRenderFunctions = this.preRenderFunctions_; + var n = 0, preRenderFunction; + for(i = 0, ii = preRenderFunctions.length;i < ii;++i) { + preRenderFunction = preRenderFunctions[i]; + if(preRenderFunction(this, frameState)) { + preRenderFunctions[n++] = preRenderFunction + } + } + preRenderFunctions.length = n; + if(!goog.isNull(frameState)) { + frameState.extent = ol.extent.getForView2DAndSize(view2DState.center, view2DState.resolution, view2DState.rotation, frameState.size) + } + this.frameState_ = frameState; + this.renderer_.renderFrame(frameState); + if(!goog.isNull(frameState)) { + if(frameState.animate) { + this.render() + } + Array.prototype.push.apply(this.postRenderFunctions_, frameState.postRenderFunctions); + var idle = this.preRenderFunctions_.length == 0 && !frameState.animate && !frameState.viewHints[ol.ViewHint.ANIMATING] && !frameState.viewHints[ol.ViewHint.INTERACTING]; + if(idle) { + this.dispatchEvent(new ol.MapEvent(ol.MapEventType.MOVEEND, this)) + } + } + this.dispatchEvent(new ol.MapEvent(ol.MapEventType.POSTRENDER, this, frameState)); + goog.async.nextTick(this.handlePostRender, this) +}; +ol.Map.prototype.setLayerGroup = function(layerGroup) { + this.set(ol.MapProperty.LAYERGROUP, layerGroup) +}; +goog.exportProperty(ol.Map.prototype, "setLayerGroup", ol.Map.prototype.setLayerGroup); +ol.Map.prototype.setSize = function(size) { + this.set(ol.MapProperty.SIZE, size) +}; +goog.exportProperty(ol.Map.prototype, "setSize", ol.Map.prototype.setSize); +ol.Map.prototype.setTarget = function(target) { + this.set(ol.MapProperty.TARGET, target) +}; +goog.exportProperty(ol.Map.prototype, "setTarget", ol.Map.prototype.setTarget); +ol.Map.prototype.setView = function(view) { + this.set(ol.MapProperty.VIEW, view) +}; +goog.exportProperty(ol.Map.prototype, "setView", ol.Map.prototype.setView); +ol.Map.prototype.updateSize = function() { + var target = this.getTarget(); + var targetElement = goog.isDef(target) ? goog.dom.getElement(target) : null; + if(goog.isNull(targetElement)) { + this.setSize(undefined) + }else { + var size = goog.style.getContentBoxSize(targetElement); + this.setSize([size.width, size.height]) + } +}; +ol.MapOptionsInternal; +ol.Map.createOptionsInternal = function(options) { + var keyboardEventTarget = null; + if(goog.isDef(options.keyboardEventTarget)) { + keyboardEventTarget = goog.isString(options.keyboardEventTarget) ? document.getElementById(options.keyboardEventTarget) : options.keyboardEventTarget + } + var values = {}; + var ol3Logo = goog.isDef(options.ol3Logo) ? options.ol3Logo : true; + var layerGroup = options.layers instanceof ol.layer.Group ? options.layers : new ol.layer.Group({layers:options.layers}); + values[ol.MapProperty.LAYERGROUP] = layerGroup; + values[ol.MapProperty.TARGET] = options.target; + values[ol.MapProperty.VIEW] = goog.isDef(options.view) ? options.view : new ol.View2D; + var rendererConstructor = ol.renderer.Map; + var rendererHints; + if(goog.isDef(options.renderer)) { + if(goog.isArray(options.renderer)) { + rendererHints = options.renderer + }else { + if(goog.isString(options.renderer)) { + rendererHints = [options.renderer] + }else { + goog.asserts.fail("Incorrect format for renderer option") + } + } + }else { + rendererHints = ol.DEFAULT_RENDERER_HINTS + } + var i, ii; + for(i = 0, ii = rendererHints.length;i < ii;++i) { + var rendererHint = rendererHints[i]; + if(ol.ENABLE_CANVAS && rendererHint == ol.RendererHint.CANVAS) { + if(ol.BrowserFeature.HAS_CANVAS) { + rendererConstructor = ol.renderer.canvas.Map; + break + } + }else { + if(ol.ENABLE_DOM && rendererHint == ol.RendererHint.DOM) { + if(ol.BrowserFeature.HAS_DOM) { + rendererConstructor = ol.renderer.dom.Map; + break + } + }else { + if(ol.ENABLE_WEBGL && rendererHint == ol.RendererHint.WEBGL) { + if(ol.BrowserFeature.HAS_WEBGL) { + rendererConstructor = ol.renderer.webgl.Map; + break + } + } + } + } + } + var controls; + if(goog.isDef(options.controls)) { + if(goog.isArray(options.controls)) { + controls = new ol.Collection(goog.array.clone(options.controls)) + }else { + goog.asserts.assertInstanceof(options.controls, ol.Collection); + controls = options.controls + } + }else { + controls = ol.control.defaults() + } + var deviceOptions = goog.isDef(options.deviceOptions) ? options.deviceOptions : ({}); + var interactions; + if(goog.isDef(options.interactions)) { + if(goog.isArray(options.interactions)) { + interactions = new ol.Collection(goog.array.clone(options.interactions)) + }else { + goog.asserts.assertInstanceof(options.interactions, ol.Collection); + interactions = options.interactions + } + }else { + interactions = ol.interaction.defaults() + } + var overlays; + if(goog.isDef(options.overlays)) { + if(goog.isArray(options.overlays)) { + overlays = new ol.Collection(goog.array.clone(options.overlays)) + }else { + goog.asserts.assertInstanceof(options.overlays, ol.Collection); + overlays = options.overlays + } + }else { + overlays = new ol.Collection + } + return{controls:controls, deviceOptions:deviceOptions, interactions:interactions, keyboardEventTarget:keyboardEventTarget, ol3Logo:ol3Logo, overlays:overlays, rendererConstructor:rendererConstructor, values:values} +}; +ol.proj.common.add(); +if(goog.DEBUG) { + (function() { + goog.debug.Console.autoInstall(); + var logger = goog.log.getLogger("ol"); + logger.setLevel(goog.log.Level.FINEST) + })() +} +;goog.provide("ol.DrawEvent"); +goog.provide("ol.interaction.Draw"); +goog.require("goog.asserts"); +goog.require("goog.events.Event"); +goog.require("ol.Collection"); +goog.require("ol.Coordinate"); +goog.require("ol.Feature"); +goog.require("ol.FeatureOverlay"); +goog.require("ol.Map"); +goog.require("ol.MapBrowserEvent"); +goog.require("ol.MapBrowserEvent.EventType"); +goog.require("ol.geom.GeometryType"); +goog.require("ol.geom.LineString"); +goog.require("ol.geom.MultiLineString"); +goog.require("ol.geom.MultiPoint"); +goog.require("ol.geom.MultiPolygon"); +goog.require("ol.geom.Point"); +goog.require("ol.geom.Polygon"); +goog.require("ol.interaction.Interaction"); +goog.require("ol.source.Vector"); +goog.require("ol.style.Circle"); +goog.require("ol.style.Fill"); +goog.require("ol.style.Stroke"); +goog.require("ol.style.Style"); +ol.DrawEventType = {DRAWSTART:"drawstart", DRAWEND:"drawend"}; +ol.DrawEvent = function(type, feature) { + goog.base(this, type); + this.feature = feature +}; +goog.inherits(ol.DrawEvent, goog.events.Event); +ol.interaction.Draw = function(options) { + goog.base(this); + this.source_ = goog.isDef(options.source) ? options.source : null; + this.features_ = goog.isDef(options.features) ? options.features : null; + this.snapTolerance_ = goog.isDef(options.snapTolerance) ? options.snapTolerance : 12; + this.minPointsPerRing_ = goog.isDef(options.minPointsPerRing) ? options.minPointsPerRing : 3; + this.type_ = options.type; + this.mode_ = ol.interaction.Draw.getMode_(this.type_); + this.finishCoordinate_ = null; + this.sketchFeature_ = null; + this.sketchPoint_ = null; + this.sketchLine_ = null; + this.sketchRawPolygon_ = null; + this.squaredClickTolerance_ = 4; + this.overlay_ = new ol.FeatureOverlay({style:goog.isDef(options.style) ? options.style : ol.interaction.Draw.getDefaultStyleFunction()}) +}; +goog.inherits(ol.interaction.Draw, ol.interaction.Interaction); +ol.interaction.Draw.getDefaultStyleFunction = function() { + var styles = {}; + styles[ol.geom.GeometryType.POLYGON] = [new ol.style.Style({fill:new ol.style.Fill({color:[255, 255, 255, 0.5]})})]; + styles[ol.geom.GeometryType.MULTI_POLYGON] = styles[ol.geom.GeometryType.POLYGON]; + styles[ol.geom.GeometryType.LINE_STRING] = [new ol.style.Style({stroke:new ol.style.Stroke({color:[255, 255, 255, 1], width:5})}), new ol.style.Style({stroke:new ol.style.Stroke({color:[0, 153, 255, 1], width:3})})]; + styles[ol.geom.GeometryType.MULTI_LINE_STRING] = styles[ol.geom.GeometryType.LINE_STRING]; + styles[ol.geom.GeometryType.POINT] = [new ol.style.Style({image:new ol.style.Circle({radius:7, fill:new ol.style.Fill({color:[0, 153, 255, 1]}), stroke:new ol.style.Stroke({color:[255, 255, 255, 0.75], width:1.5})}), zIndex:1E5})]; + styles[ol.geom.GeometryType.MULTI_POINT] = styles[ol.geom.GeometryType.POINT]; + return function(feature, resolution) { + return styles[feature.getGeometry().getType()] + } +}; +ol.interaction.Draw.prototype.setMap = function(map) { + if(goog.isNull(map)) { + this.abortDrawing_() + } + this.overlay_.setMap(map); + goog.base(this, "setMap", map) +}; +ol.interaction.Draw.prototype.handleMapBrowserEvent = function(event) { + var map = event.map; + if(!map.isDef()) { + return true + } + var pass = true; + if(event.type === ol.MapBrowserEvent.EventType.CLICK) { + pass = this.handleClick_(event) + }else { + if(event.type === ol.MapBrowserEvent.EventType.MOUSEMOVE) { + pass = this.handleMove_(event) + }else { + if(event.type === ol.MapBrowserEvent.EventType.DBLCLICK) { + pass = false + } + } + } + return pass +}; +ol.interaction.Draw.prototype.handleClick_ = function(event) { + var downPx = event.map.getEventPixel(event.target.getDown()); + var clickPx = event.pixel; + var dx = downPx[0] - clickPx[0]; + var dy = downPx[1] - clickPx[1]; + var squaredDistance = dx * dx + dy * dy; + var pass = true; + if(squaredDistance <= this.squaredClickTolerance_) { + if(goog.isNull(this.finishCoordinate_)) { + this.startDrawing_(event) + }else { + if(this.mode_ === ol.interaction.DrawMode.POINT || this.atFinish_(event)) { + this.finishDrawing_(event) + }else { + this.addToDrawing_(event) + } + } + pass = false + } + return pass +}; +ol.interaction.Draw.prototype.handleMove_ = function(event) { + if(this.mode_ === ol.interaction.DrawMode.POINT && goog.isNull(this.finishCoordinate_)) { + this.startDrawing_(event) + }else { + if(!goog.isNull(this.finishCoordinate_)) { + this.modifyDrawing_(event) + } + } + return true +}; +ol.interaction.Draw.prototype.atFinish_ = function(event) { + var at = false; + if(!goog.isNull(this.sketchFeature_)) { + var geometry = this.sketchFeature_.getGeometry(); + var potentiallyDone = false; + var potentiallyFinishCoordinates = [this.finishCoordinate_]; + if(this.mode_ === ol.interaction.DrawMode.LINE_STRING) { + goog.asserts.assertInstanceof(geometry, ol.geom.LineString); + potentiallyDone = geometry.getCoordinates().length > 2 + }else { + if(this.mode_ === ol.interaction.DrawMode.POLYGON) { + goog.asserts.assertInstanceof(geometry, ol.geom.Polygon); + potentiallyDone = geometry.getCoordinates()[0].length > this.minPointsPerRing_; + potentiallyFinishCoordinates = [this.sketchRawPolygon_[0][0], this.sketchRawPolygon_[0][this.sketchRawPolygon_[0].length - 2]] + } + } + if(potentiallyDone) { + var map = event.map; + for(var i = 0, ii = potentiallyFinishCoordinates.length;i < ii;i++) { + var finishCoordinate = potentiallyFinishCoordinates[i]; + var finishPixel = map.getPixelFromCoordinate(finishCoordinate); + var pixel = event.pixel; + var dx = pixel[0] - finishPixel[0]; + var dy = pixel[1] - finishPixel[1]; + at = Math.sqrt(dx * dx + dy * dy) <= this.snapTolerance_; + if(at) { + this.finishCoordinate_ = finishCoordinate; + break + } + } + } + } + return at +}; +ol.interaction.Draw.prototype.startDrawing_ = function(event) { + var start = event.coordinate; + this.finishCoordinate_ = start; + var geometry; + if(this.mode_ === ol.interaction.DrawMode.POINT) { + geometry = new ol.geom.Point(start.slice()) + }else { + this.sketchPoint_ = new ol.Feature(new ol.geom.Point(start.slice())); + if(this.mode_ === ol.interaction.DrawMode.LINE_STRING) { + geometry = new ol.geom.LineString([start.slice(), start.slice()]) + }else { + if(this.mode_ === ol.interaction.DrawMode.POLYGON) { + this.sketchLine_ = new ol.Feature(new ol.geom.LineString([start.slice(), start.slice()])); + this.sketchRawPolygon_ = [[start.slice(), start.slice()]]; + geometry = new ol.geom.Polygon(this.sketchRawPolygon_) + } + } + } + goog.asserts.assert(goog.isDef(geometry)); + this.sketchFeature_ = new ol.Feature(geometry); + this.updateSketchFeatures_(); + this.dispatchEvent(new ol.DrawEvent(ol.DrawEventType.DRAWSTART, this.sketchFeature_)) +}; +ol.interaction.Draw.prototype.modifyDrawing_ = function(event) { + var coordinate = event.coordinate; + var geometry = this.sketchFeature_.getGeometry(); + var coordinates, last; + if(this.mode_ === ol.interaction.DrawMode.POINT) { + goog.asserts.assertInstanceof(geometry, ol.geom.Point); + last = geometry.getCoordinates(); + last[0] = coordinate[0]; + last[1] = coordinate[1]; + geometry.setCoordinates(last) + }else { + if(this.mode_ === ol.interaction.DrawMode.LINE_STRING) { + goog.asserts.assertInstanceof(geometry, ol.geom.LineString); + coordinates = geometry.getCoordinates() + }else { + if(this.mode_ === ol.interaction.DrawMode.POLYGON) { + goog.asserts.assertInstanceof(geometry, ol.geom.Polygon); + coordinates = this.sketchRawPolygon_[0] + } + } + if(this.atFinish_(event)) { + coordinate = this.finishCoordinate_.slice() + } + var sketchPointGeom = this.sketchPoint_.getGeometry(); + goog.asserts.assertInstanceof(sketchPointGeom, ol.geom.Point); + sketchPointGeom.setCoordinates(coordinate); + last = coordinates[coordinates.length - 1]; + last[0] = coordinate[0]; + last[1] = coordinate[1]; + if(this.mode_ === ol.interaction.DrawMode.LINE_STRING) { + goog.asserts.assertInstanceof(geometry, ol.geom.LineString); + geometry.setCoordinates(coordinates) + }else { + if(this.mode_ === ol.interaction.DrawMode.POLYGON) { + var sketchLineGeom = this.sketchLine_.getGeometry(); + goog.asserts.assertInstanceof(sketchLineGeom, ol.geom.LineString); + sketchLineGeom.setCoordinates(coordinates); + goog.asserts.assertInstanceof(geometry, ol.geom.Polygon); + geometry.setCoordinates(this.sketchRawPolygon_) + } + } + } + this.updateSketchFeatures_() +}; +ol.interaction.Draw.prototype.addToDrawing_ = function(event) { + var coordinate = event.coordinate; + var geometry = this.sketchFeature_.getGeometry(); + var coordinates, last; + if(this.mode_ === ol.interaction.DrawMode.LINE_STRING) { + this.finishCoordinate_ = coordinate.slice(); + goog.asserts.assertInstanceof(geometry, ol.geom.LineString); + coordinates = geometry.getCoordinates(); + coordinates.push(coordinate.slice()); + geometry.setCoordinates(coordinates) + }else { + if(this.mode_ === ol.interaction.DrawMode.POLYGON) { + this.sketchRawPolygon_[0].push(coordinate.slice()); + goog.asserts.assertInstanceof(geometry, ol.geom.Polygon); + geometry.setCoordinates(this.sketchRawPolygon_) + } + } + this.updateSketchFeatures_() +}; +ol.interaction.Draw.prototype.finishDrawing_ = function(event) { + var sketchFeature = this.abortDrawing_(); + goog.asserts.assert(!goog.isNull(sketchFeature)); + var coordinates; + var geometry = sketchFeature.getGeometry(); + if(this.mode_ === ol.interaction.DrawMode.POINT) { + goog.asserts.assertInstanceof(geometry, ol.geom.Point); + coordinates = geometry.getCoordinates() + }else { + if(this.mode_ === ol.interaction.DrawMode.LINE_STRING) { + goog.asserts.assertInstanceof(geometry, ol.geom.LineString); + coordinates = geometry.getCoordinates(); + coordinates.pop(); + geometry.setCoordinates(coordinates) + }else { + if(this.mode_ === ol.interaction.DrawMode.POLYGON) { + goog.asserts.assertInstanceof(geometry, ol.geom.Polygon); + this.sketchRawPolygon_[0].pop(); + this.sketchRawPolygon_[0].push(this.sketchRawPolygon_[0][0]); + geometry.setCoordinates(this.sketchRawPolygon_); + coordinates = geometry.getCoordinates() + } + } + } + if(this.type_ === ol.geom.GeometryType.MULTI_POINT) { + sketchFeature.setGeometry(new ol.geom.MultiPoint([coordinates])) + }else { + if(this.type_ === ol.geom.GeometryType.MULTI_LINE_STRING) { + sketchFeature.setGeometry(new ol.geom.MultiLineString([coordinates])) + }else { + if(this.type_ === ol.geom.GeometryType.MULTI_POLYGON) { + sketchFeature.setGeometry(new ol.geom.MultiPolygon([coordinates])) + } + } + } + if(!goog.isNull(this.features_)) { + this.features_.push(sketchFeature) + } + if(!goog.isNull(this.source_)) { + this.source_.addFeature(sketchFeature) + } + this.dispatchEvent(new ol.DrawEvent(ol.DrawEventType.DRAWEND, sketchFeature)) +}; +ol.interaction.Draw.prototype.abortDrawing_ = function() { + this.finishCoordinate_ = null; + var sketchFeature = this.sketchFeature_; + if(!goog.isNull(sketchFeature)) { + this.sketchFeature_ = null; + this.sketchPoint_ = null; + this.sketchLine_ = null; + this.overlay_.getFeatures().clear() + } + return sketchFeature +}; +ol.interaction.Draw.prototype.updateSketchFeatures_ = function() { + var sketchFeatures = [this.sketchFeature_]; + if(!goog.isNull(this.sketchLine_)) { + sketchFeatures.push(this.sketchLine_) + } + if(!goog.isNull(this.sketchPoint_)) { + sketchFeatures.push(this.sketchPoint_) + } + this.overlay_.setFeatures(new ol.Collection(sketchFeatures)) +}; +ol.interaction.Draw.getMode_ = function(type) { + var mode; + if(type === ol.geom.GeometryType.POINT || type === ol.geom.GeometryType.MULTI_POINT) { + mode = ol.interaction.DrawMode.POINT + }else { + if(type === ol.geom.GeometryType.LINE_STRING || type === ol.geom.GeometryType.MULTI_LINE_STRING) { + mode = ol.interaction.DrawMode.LINE_STRING + }else { + if(type === ol.geom.GeometryType.POLYGON || type === ol.geom.GeometryType.MULTI_POLYGON) { + mode = ol.interaction.DrawMode.POLYGON + } + } + } + goog.asserts.assert(goog.isDef(mode)); + return mode +}; +ol.interaction.DrawMode = {POINT:"Point", LINE_STRING:"LineString", POLYGON:"Polygon"}; +goog.provide("ol.Ellipsoid"); +goog.require("goog.math"); +goog.require("ol.Coordinate"); +ol.Ellipsoid = function(a, flattening) { + this.a = a; + this.flattening = flattening; + this.b = this.a * (1 - this.flattening); + this.eSquared = 2 * flattening - flattening * flattening; + this.e = Math.sqrt(this.eSquared) +}; +ol.Ellipsoid.prototype.vincenty = function(c1, c2, opt_minDeltaLambda, opt_maxIterations) { + var minDeltaLambda = goog.isDef(opt_minDeltaLambda) ? opt_minDeltaLambda : 1E-12; + var maxIterations = goog.isDef(opt_maxIterations) ? opt_maxIterations : 100; + var f = this.flattening; + var lat1 = goog.math.toRadians(c1[1]); + var lat2 = goog.math.toRadians(c2[1]); + var deltaLon = goog.math.toRadians(c2[0] - c1[0]); + var U1 = Math.atan((1 - f) * Math.tan(lat1)); + var cosU1 = Math.cos(U1); + var sinU1 = Math.sin(U1); + var U2 = Math.atan((1 - f) * Math.tan(lat2)); + var cosU2 = Math.cos(U2); + var sinU2 = Math.sin(U2); + var lambda = deltaLon; + var cosSquaredAlpha, sinAlpha; + var cosLambda, deltaLambda = Infinity, sinLambda; + var cos2SigmaM, cosSigma, sigma, sinSigma; + var i; + for(i = maxIterations;i > 0;--i) { + cosLambda = Math.cos(lambda); + sinLambda = Math.sin(lambda); + var x = cosU2 * sinLambda; + var y = cosU1 * sinU2 - sinU1 * cosU2 * cosLambda; + sinSigma = Math.sqrt(x * x + y * y); + if(sinSigma === 0) { + return{distance:0, initialBearing:0, finalBearing:0} + } + cosSigma = sinU1 * sinU2 + cosU1 * cosU2 * cosLambda; + sigma = Math.atan2(sinSigma, cosSigma); + sinAlpha = cosU1 * cosU2 * sinLambda / sinSigma; + cosSquaredAlpha = 1 - sinAlpha * sinAlpha; + cos2SigmaM = cosSigma - 2 * sinU1 * sinU2 / cosSquaredAlpha; + if(isNaN(cos2SigmaM)) { + cos2SigmaM = 0 + } + var C = f / 16 * cosSquaredAlpha * (4 + f * (4 - 3 * cosSquaredAlpha)); + var lambdaPrime = deltaLon + (1 - C) * f * sinAlpha * (sigma + C * sinSigma * (cos2SigmaM + C * cosSigma * (2 * cos2SigmaM * cos2SigmaM - 1))); + deltaLambda = Math.abs(lambdaPrime - lambda); + lambda = lambdaPrime; + if(deltaLambda < minDeltaLambda) { + break + } + } + if(i === 0) { + return{distance:NaN, finalBearing:NaN, initialBearing:NaN} + } + var aSquared = this.a * this.a; + var bSquared = this.b * this.b; + var uSquared = cosSquaredAlpha * (aSquared - bSquared) / bSquared; + var A = 1 + uSquared / 16384 * (4096 + uSquared * (uSquared * (320 - 175 * uSquared) - 768)); + var B = uSquared / 1024 * (256 + uSquared * (uSquared * (74 - 47 * uSquared) - 128)); + var deltaSigma = B * sinSigma * (cos2SigmaM + B / 4 * (cosSigma * (2 * cos2SigmaM * cos2SigmaM - 1) - B / 6 * cos2SigmaM * (4 * sinSigma * sinSigma - 3) * (4 * cos2SigmaM * cos2SigmaM - 3))); + cosLambda = Math.cos(lambda); + sinLambda = Math.sin(lambda); + var alpha1 = Math.atan2(cosU2 * sinLambda, cosU1 * sinU2 - sinU1 * cosU2 * cosLambda); + var alpha2 = Math.atan2(cosU1 * sinLambda, cosU1 * sinU2 * cosLambda - sinU1 * cosU2); + return{distance:this.b * A * (sigma - deltaSigma), initialBearing:goog.math.toDegrees(alpha1), finalBearing:goog.math.toDegrees(alpha2)} +}; +ol.Ellipsoid.prototype.vincentyDistance = function(c1, c2, opt_minDeltaLambda, opt_maxIterations) { + var vincenty = this.vincenty(c1, c2, opt_minDeltaLambda, opt_maxIterations); + return vincenty.distance +}; +ol.Ellipsoid.prototype.vincentyFinalBearing = function(c1, c2, opt_minDeltaLambda, opt_maxIterations) { + var vincenty = this.vincenty(c1, c2, opt_minDeltaLambda, opt_maxIterations); + return vincenty.finalBearing +}; +ol.Ellipsoid.prototype.vincentyInitialBearing = function(c1, c2, opt_minDeltaLambda, opt_maxIterations) { + var vincenty = this.vincenty(c1, c2, opt_minDeltaLambda, opt_maxIterations); + return vincenty.initialBearing +}; +goog.provide("ol.Geolocation"); +goog.provide("ol.GeolocationProperty"); +goog.require("goog.events"); +goog.require("goog.events.EventType"); +goog.require("goog.math"); +goog.require("ol.BrowserFeature"); +goog.require("ol.Coordinate"); +goog.require("ol.Object"); +goog.require("ol.proj"); +ol.GeolocationProperty = {ACCURACY:"accuracy", ALTITUDE:"altitude", ALTITUDE_ACCURACY:"altitudeAccuracy", HEADING:"heading", POSITION:"position", PROJECTION:"projection", SPEED:"speed", TRACKING:"tracking", TRACKING_OPTIONS:"trackingOptions"}; +ol.Geolocation = function(opt_options) { + goog.base(this); + var options = goog.isDef(opt_options) ? opt_options : {}; + this.position_ = null; + this.transform_ = ol.proj.identityTransform; + this.watchId_ = undefined; + goog.events.listen(this, ol.Object.getChangeEventType(ol.GeolocationProperty.PROJECTION), this.handleProjectionChanged_, false, this); + goog.events.listen(this, ol.Object.getChangeEventType(ol.GeolocationProperty.TRACKING), this.handleTrackingChanged_, false, this); + if(goog.isDef(options.projection)) { + this.setProjection(ol.proj.get(options.projection)) + } + if(goog.isDef(options.trackingOptions)) { + this.setTrackingOptions(options.trackingOptions) + } + this.setTracking(goog.isDef(options.tracking) ? options.tracking : false) +}; +goog.inherits(ol.Geolocation, ol.Object); +ol.Geolocation.prototype.disposeInternal = function() { + this.setTracking(false); + goog.base(this, "disposeInternal") +}; +ol.Geolocation.prototype.handleProjectionChanged_ = function() { + var projection = this.getProjection(); + if(goog.isDefAndNotNull(projection)) { + this.transform_ = ol.proj.getTransformFromProjections(ol.proj.get("EPSG:4326"), projection); + if(!goog.isNull(this.position_)) { + this.set(ol.GeolocationProperty.POSITION, this.transform_(this.position_)) + } + } +}; +ol.Geolocation.prototype.handleTrackingChanged_ = function() { + if(ol.BrowserFeature.HAS_GEOLOCATION) { + var tracking = this.getTracking(); + if(tracking && !goog.isDef(this.watchId_)) { + this.watchId_ = goog.global.navigator.geolocation.watchPosition(goog.bind(this.positionChange_, this), goog.bind(this.positionError_, this), this.getTrackingOptions()) + }else { + if(!tracking && goog.isDef(this.watchId_)) { + goog.global.navigator.geolocation.clearWatch(this.watchId_); + this.watchId_ = undefined + } + } + } +}; +ol.Geolocation.prototype.positionChange_ = function(position) { + var coords = position.coords; + this.set(ol.GeolocationProperty.ACCURACY, coords.accuracy); + this.set(ol.GeolocationProperty.ALTITUDE, goog.isNull(coords.altitude) ? undefined : coords.altitude); + this.set(ol.GeolocationProperty.ALTITUDE_ACCURACY, goog.isNull(coords.altitudeAccuracy) ? undefined : coords.altitudeAccuracy); + this.set(ol.GeolocationProperty.HEADING, goog.isNull(coords.heading) ? undefined : goog.math.toRadians(coords.heading)); + if(goog.isNull(this.position_)) { + this.position_ = [coords.longitude, coords.latitude] + }else { + this.position_[0] = coords.longitude; + this.position_[1] = coords.latitude + } + this.set(ol.GeolocationProperty.POSITION, this.transform_(this.position_)); + this.set(ol.GeolocationProperty.SPEED, goog.isNull(coords.speed) ? undefined : coords.speed) +}; +ol.Geolocation.prototype.positionError_ = function(error) { + error.type = goog.events.EventType.ERROR; + this.dispatchEvent(error) +}; +ol.Geolocation.prototype.getAccuracy = function() { + return(this.get(ol.GeolocationProperty.ACCURACY)) +}; +goog.exportProperty(ol.Geolocation.prototype, "getAccuracy", ol.Geolocation.prototype.getAccuracy); +ol.Geolocation.prototype.getAltitude = function() { + return(this.get(ol.GeolocationProperty.ALTITUDE)) +}; +goog.exportProperty(ol.Geolocation.prototype, "getAltitude", ol.Geolocation.prototype.getAltitude); +ol.Geolocation.prototype.getAltitudeAccuracy = function() { + return(this.get(ol.GeolocationProperty.ALTITUDE_ACCURACY)) +}; +goog.exportProperty(ol.Geolocation.prototype, "getAltitudeAccuracy", ol.Geolocation.prototype.getAltitudeAccuracy); +ol.Geolocation.prototype.getHeading = function() { + return(this.get(ol.GeolocationProperty.HEADING)) +}; +goog.exportProperty(ol.Geolocation.prototype, "getHeading", ol.Geolocation.prototype.getHeading); +ol.Geolocation.prototype.getPosition = function() { + return(this.get(ol.GeolocationProperty.POSITION)) +}; +goog.exportProperty(ol.Geolocation.prototype, "getPosition", ol.Geolocation.prototype.getPosition); +ol.Geolocation.prototype.getProjection = function() { + return(this.get(ol.GeolocationProperty.PROJECTION)) +}; +goog.exportProperty(ol.Geolocation.prototype, "getProjection", ol.Geolocation.prototype.getProjection); +ol.Geolocation.prototype.getSpeed = function() { + return(this.get(ol.GeolocationProperty.SPEED)) +}; +goog.exportProperty(ol.Geolocation.prototype, "getSpeed", ol.Geolocation.prototype.getSpeed); +ol.Geolocation.prototype.getTracking = function() { + return(this.get(ol.GeolocationProperty.TRACKING)) +}; +goog.exportProperty(ol.Geolocation.prototype, "getTracking", ol.Geolocation.prototype.getTracking); +ol.Geolocation.prototype.getTrackingOptions = function() { + return(this.get(ol.GeolocationProperty.TRACKING_OPTIONS)) +}; +goog.exportProperty(ol.Geolocation.prototype, "getTrackingOptions", ol.Geolocation.prototype.getTrackingOptions); +ol.Geolocation.prototype.setProjection = function(projection) { + this.set(ol.GeolocationProperty.PROJECTION, projection) +}; +goog.exportProperty(ol.Geolocation.prototype, "setProjection", ol.Geolocation.prototype.setProjection); +ol.Geolocation.prototype.setTracking = function(tracking) { + this.set(ol.GeolocationProperty.TRACKING, tracking) +}; +goog.exportProperty(ol.Geolocation.prototype, "setTracking", ol.Geolocation.prototype.setTracking); +ol.Geolocation.prototype.setTrackingOptions = function(options) { + this.set(ol.GeolocationProperty.TRACKING_OPTIONS, options) +}; +goog.exportProperty(ol.Geolocation.prototype, "setTrackingOptions", ol.Geolocation.prototype.setTrackingOptions); +goog.provide("ol.ImageCanvas"); +goog.require("ol.ImageBase"); +goog.require("ol.ImageState"); +ol.ImageCanvas = function(extent, resolution, pixelRatio, attributions, canvas) { + goog.base(this, extent, resolution, pixelRatio, ol.ImageState.LOADED, attributions); + this.canvas_ = canvas +}; +goog.inherits(ol.ImageCanvas, ol.ImageBase); +ol.ImageCanvas.prototype.getImageElement = function(opt_context) { + return this.canvas_ +}; +goog.provide("ol.TileLoadFunctionType"); +ol.TileLoadFunctionType; +goog.provide("ol.ImageTile"); +goog.require("goog.array"); +goog.require("goog.asserts"); +goog.require("goog.events"); +goog.require("goog.events.EventType"); +goog.require("goog.object"); +goog.require("ol.Tile"); +goog.require("ol.TileCoord"); +goog.require("ol.TileLoadFunctionType"); +goog.require("ol.TileState"); +ol.ImageTile = function(tileCoord, state, src, crossOrigin, tileLoadFunction) { + goog.base(this, tileCoord, state); + this.src_ = src; + this.image_ = new Image; + if(!goog.isNull(crossOrigin)) { + this.image_.crossOrigin = crossOrigin + } + this.imageByContext_ = {}; + this.imageListenerKeys_ = null; + this.tileLoadFunction_ = tileLoadFunction +}; +goog.inherits(ol.ImageTile, ol.Tile); +ol.ImageTile.prototype.getImage = function(opt_context) { + if(goog.isDef(opt_context)) { + var image; + var key = goog.getUid(opt_context); + if(key in this.imageByContext_) { + return this.imageByContext_[key] + }else { + if(goog.object.isEmpty(this.imageByContext_)) { + image = this.image_ + }else { + image = (this.image_.cloneNode(false)) + } + } + this.imageByContext_[key] = image; + return image + }else { + return this.image_ + } +}; +ol.ImageTile.prototype.getKey = function() { + return this.src_ +}; +ol.ImageTile.prototype.handleImageError_ = function() { + this.state = ol.TileState.ERROR; + this.unlistenImage_(); + this.dispatchChangeEvent() +}; +ol.ImageTile.prototype.handleImageLoad_ = function() { + if(!goog.isDef(this.image_.naturalWidth)) { + this.image_.naturalWidth = this.image_.width; + this.image_.naturalHeight = this.image_.height + } + if(this.image_.naturalWidth && this.image_.naturalHeight) { + this.state = ol.TileState.LOADED + }else { + this.state = ol.TileState.EMPTY + } + this.unlistenImage_(); + this.dispatchChangeEvent() +}; +ol.ImageTile.prototype.load = function() { + if(this.state == ol.TileState.IDLE) { + this.state = ol.TileState.LOADING; + goog.asserts.assert(goog.isNull(this.imageListenerKeys_)); + this.imageListenerKeys_ = [goog.events.listenOnce(this.image_, goog.events.EventType.ERROR, this.handleImageError_, false, this), goog.events.listenOnce(this.image_, goog.events.EventType.LOAD, this.handleImageLoad_, false, this)]; + this.tileLoadFunction_(this, this.src_) + } +}; +ol.ImageTile.prototype.unlistenImage_ = function() { + goog.asserts.assert(!goog.isNull(this.imageListenerKeys_)); + goog.array.forEach(this.imageListenerKeys_, goog.events.unlistenByKey); + this.imageListenerKeys_ = null +}; +goog.provide("ol.ImageUrlFunction"); +goog.provide("ol.ImageUrlFunctionType"); +goog.require("ol.Size"); +ol.ImageUrlFunctionType; +ol.ImageUrlFunction.createFromParamsFunction = function(baseUrl, params, paramsFunction) { + return function(extent, size, projection) { + return paramsFunction(baseUrl, params, extent, size, projection) + } +}; +ol.ImageUrlFunction.nullImageUrlFunction = function(extent, size) { + return undefined +}; +goog.provide("ol.Overlay"); +goog.provide("ol.OverlayPositioning"); +goog.provide("ol.OverlayProperty"); +goog.require("goog.asserts"); +goog.require("goog.dom"); +goog.require("goog.dom.TagName"); +goog.require("goog.events"); +goog.require("goog.style"); +goog.require("ol.Coordinate"); +goog.require("ol.Map"); +goog.require("ol.MapEventType"); +goog.require("ol.Object"); +ol.OverlayProperty = {ELEMENT:"element", MAP:"map", POSITION:"position", POSITIONING:"positioning"}; +ol.OverlayPositioning = {BOTTOM_LEFT:"bottom-left", BOTTOM_CENTER:"bottom-center", BOTTOM_RIGHT:"bottom-right", CENTER_LEFT:"center-left", CENTER_CENTER:"center-center", CENTER_RIGHT:"center-right", TOP_LEFT:"top-left", TOP_CENTER:"top-center", TOP_RIGHT:"top-right"}; +ol.Overlay = function(options) { + goog.base(this); + this.insertFirst_ = goog.isDef(options.insertFirst) ? options.insertFirst : true; + this.stopEvent_ = goog.isDef(options.stopEvent) ? options.stopEvent : true; + this.element_ = goog.dom.createElement(goog.dom.TagName.DIV); + this.element_.style.position = "absolute"; + this.rendered_ = {bottom_:"", left_:"", right_:"", top_:"", visible:true}; + this.mapPostrenderListenerKey_ = null; + goog.events.listen(this, ol.Object.getChangeEventType(ol.OverlayProperty.ELEMENT), this.handleElementChanged, false, this); + goog.events.listen(this, ol.Object.getChangeEventType(ol.OverlayProperty.MAP), this.handleMapChanged, false, this); + goog.events.listen(this, ol.Object.getChangeEventType(ol.OverlayProperty.POSITION), this.handlePositionChanged, false, this); + goog.events.listen(this, ol.Object.getChangeEventType(ol.OverlayProperty.POSITIONING), this.handlePositioningChanged, false, this); + if(goog.isDef(options.element)) { + this.setElement(options.element) + } + if(goog.isDef(options.position)) { + this.setPosition(options.position) + } + if(goog.isDef(options.positioning)) { + this.setPositioning((options.positioning)) + } +}; +goog.inherits(ol.Overlay, ol.Object); +ol.Overlay.prototype.getElement = function() { + return(this.get(ol.OverlayProperty.ELEMENT)) +}; +goog.exportProperty(ol.Overlay.prototype, "getElement", ol.Overlay.prototype.getElement); +ol.Overlay.prototype.getMap = function() { + return(this.get(ol.OverlayProperty.MAP)) +}; +goog.exportProperty(ol.Overlay.prototype, "getMap", ol.Overlay.prototype.getMap); +ol.Overlay.prototype.getPosition = function() { + return(this.get(ol.OverlayProperty.POSITION)) +}; +goog.exportProperty(ol.Overlay.prototype, "getPosition", ol.Overlay.prototype.getPosition); +ol.Overlay.prototype.getPositioning = function() { + return(this.get(ol.OverlayProperty.POSITIONING)) +}; +goog.exportProperty(ol.Overlay.prototype, "getPositioning", ol.Overlay.prototype.getPositioning); +ol.Overlay.prototype.handleElementChanged = function() { + goog.dom.removeChildren(this.element_); + var element = this.getElement(); + if(goog.isDefAndNotNull(element)) { + goog.dom.append((this.element_), element) + } +}; +ol.Overlay.prototype.handleMapChanged = function() { + if(!goog.isNull(this.mapPostrenderListenerKey_)) { + goog.dom.removeNode(this.element_); + goog.events.unlistenByKey(this.mapPostrenderListenerKey_); + this.mapPostrenderListenerKey_ = null + } + var map = this.getMap(); + if(goog.isDefAndNotNull(map)) { + this.mapPostrenderListenerKey_ = goog.events.listen(map, ol.MapEventType.POSTRENDER, this.handleMapPostrender, false, this); + this.updatePixelPosition_(); + var container = this.stopEvent_ ? map.getOverlayContainerStopEvent() : map.getOverlayContainer(); + if(this.insertFirst_) { + goog.dom.insertChildAt((container), this.element_, 0) + }else { + goog.dom.append((container), this.element_) + } + } +}; +ol.Overlay.prototype.handleMapPostrender = function() { + this.updatePixelPosition_() +}; +ol.Overlay.prototype.handlePositionChanged = function() { + this.updatePixelPosition_() +}; +ol.Overlay.prototype.handlePositioningChanged = function() { + this.updatePixelPosition_() +}; +ol.Overlay.prototype.setElement = function(element) { + this.set(ol.OverlayProperty.ELEMENT, element) +}; +goog.exportProperty(ol.Overlay.prototype, "setElement", ol.Overlay.prototype.setElement); +ol.Overlay.prototype.setMap = function(map) { + this.set(ol.OverlayProperty.MAP, map) +}; +goog.exportProperty(ol.Overlay.prototype, "setMap", ol.Overlay.prototype.setMap); +ol.Overlay.prototype.setPosition = function(position) { + this.set(ol.OverlayProperty.POSITION, position) +}; +goog.exportProperty(ol.Overlay.prototype, "setPosition", ol.Overlay.prototype.setPosition); +ol.Overlay.prototype.setPositioning = function(positioning) { + this.set(ol.OverlayProperty.POSITIONING, positioning) +}; +goog.exportProperty(ol.Overlay.prototype, "setPositioning", ol.Overlay.prototype.setPositioning); +ol.Overlay.prototype.updatePixelPosition_ = function() { + var map = this.getMap(); + var position = this.getPosition(); + if(!goog.isDef(map) || !map.isRendered() || !goog.isDef(position)) { + if(this.rendered_.visible) { + goog.style.setElementShown(this.element_, false); + this.rendered_.visible = false + } + return + } + var pixel = map.getPixelFromCoordinate(position); + goog.asserts.assert(!goog.isNull(pixel)); + var mapSize = map.getSize(); + goog.asserts.assert(goog.isDef(mapSize)); + var style = this.element_.style; + var positioning = this.getPositioning(); + if(positioning == ol.OverlayPositioning.BOTTOM_RIGHT || positioning == ol.OverlayPositioning.CENTER_RIGHT || positioning == ol.OverlayPositioning.TOP_RIGHT) { + if(this.rendered_.left_ !== "") { + this.rendered_.left_ = style.left = "" + } + var right = Math.round(mapSize[0] - pixel[0]) + "px"; + if(this.rendered_.right_ != right) { + this.rendered_.right_ = style.right = right + } + }else { + if(this.rendered_.right_ !== "") { + this.rendered_.right_ = style.right = "" + } + var offsetX = 0; + if(positioning == ol.OverlayPositioning.BOTTOM_CENTER || positioning == ol.OverlayPositioning.CENTER_CENTER || positioning == ol.OverlayPositioning.TOP_CENTER) { + offsetX = goog.style.getSize(this.element_).width / 2 + } + var left = Math.round(pixel[0] - offsetX) + "px"; + if(this.rendered_.left_ != left) { + this.rendered_.left_ = style.left = left + } + } + if(positioning == ol.OverlayPositioning.BOTTOM_LEFT || positioning == ol.OverlayPositioning.BOTTOM_CENTER || positioning == ol.OverlayPositioning.BOTTOM_RIGHT) { + if(this.rendered_.top_ !== "") { + this.rendered_.top_ = style.top = "" + } + var bottom = Math.round(mapSize[1] - pixel[1]) + "px"; + if(this.rendered_.bottom_ != bottom) { + this.rendered_.bottom_ = style.bottom = bottom + } + }else { + if(this.rendered_.bottom_ !== "") { + this.rendered_.bottom_ = style.bottom = "" + } + var offsetY = 0; + if(positioning == ol.OverlayPositioning.CENTER_LEFT || positioning == ol.OverlayPositioning.CENTER_CENTER || positioning == ol.OverlayPositioning.CENTER_RIGHT) { + offsetY = goog.style.getSize(this.element_).height / 2 + } + var top = Math.round(pixel[1] - offsetY) + "px"; + if(this.rendered_.top_ != top) { + this.rendered_.top_ = style.top = top + } + } + if(!this.rendered_.visible) { + goog.style.setElementShown(this.element_, true); + this.rendered_.visible = true + } +}; +goog.provide("ol.TileCache"); +goog.require("goog.asserts"); +goog.require("ol.Tile"); +goog.require("ol.TileCoord"); +goog.require("ol.TileRange"); +goog.require("ol.structs.LRUCache"); +ol.DEFAULT_TILE_CACHE_HIGH_WATER_MARK = 2048; +ol.TileCache = function(opt_highWaterMark) { + goog.base(this); + this.highWaterMark_ = goog.isDef(opt_highWaterMark) ? opt_highWaterMark : ol.DEFAULT_TILE_CACHE_HIGH_WATER_MARK +}; +goog.inherits(ol.TileCache, ol.structs.LRUCache); +ol.TileCache.prototype.canExpireCache = function() { + return this.getCount() > this.highWaterMark_ +}; +ol.TileCache.prototype.expireCache = function(usedTiles) { + var tile, zKey; + while(this.canExpireCache()) { + tile = (this.peekLast()); + zKey = tile.tileCoord.z.toString(); + if(zKey in usedTiles && usedTiles[zKey].contains(tile.tileCoord)) { + break + }else { + this.pop() + } + } +}; +ol.TileCache.prototype.pruneTileRange = function(tileRange) { + var i = this.getCount(), key; + while(i--) { + key = this.peekLastKey(); + if(tileRange.contains(ol.TileCoord.createFromString(key))) { + this.pop() + }else { + this.get(key) + } + } +}; +goog.provide("ol.TileUrlFunction"); +goog.provide("ol.TileUrlFunctionType"); +goog.require("goog.array"); +goog.require("goog.math"); +goog.require("ol.TileCoord"); +ol.TileUrlFunctionType; +ol.TileCoordTransformType; +ol.TileUrlFunction.createFromTemplate = function(template) { + return function(tileCoord, pixelRatio, projection) { + if(goog.isNull(tileCoord)) { + return undefined + }else { + return template.replace("{z}", tileCoord.z.toString()).replace("{x}", tileCoord.x.toString()).replace("{y}", tileCoord.y.toString()) + } + } +}; +ol.TileUrlFunction.createFromTemplates = function(templates) { + return ol.TileUrlFunction.createFromTileUrlFunctions(goog.array.map(templates, ol.TileUrlFunction.createFromTemplate)) +}; +ol.TileUrlFunction.createFromTileUrlFunctions = function(tileUrlFunctions) { + if(tileUrlFunctions.length === 1) { + return tileUrlFunctions[0] + } + return function(tileCoord, pixelRatio, projection) { + if(goog.isNull(tileCoord)) { + return undefined + }else { + var index = goog.math.modulo(tileCoord.hash(), tileUrlFunctions.length); + return tileUrlFunctions[index].call(this, tileCoord, pixelRatio, projection) + } + } +}; +ol.TileUrlFunction.nullTileUrlFunction = function(tileCoord, pixelRatio, projection) { + return undefined +}; +ol.TileUrlFunction.withTileCoordTransform = function(transformFn, tileUrlFunction) { + var tmpTileCoord = new ol.TileCoord(0, 0, 0); + return function(tileCoord, pixelRatio, projection) { + if(goog.isNull(tileCoord)) { + return undefined + }else { + return tileUrlFunction.call(this, transformFn.call(this, tileCoord, projection, tmpTileCoord), pixelRatio, projection) + } + } +}; +ol.TileUrlFunction.expandUrl = function(url) { + var urls = []; + var match = /\{(\d)-(\d)\}/.exec(url) || /\{([a-z])-([a-z])\}/.exec(url); + if(match) { + var startCharCode = match[1].charCodeAt(0); + var stopCharCode = match[2].charCodeAt(0); + var charCode; + for(charCode = startCharCode;charCode <= stopCharCode;++charCode) { + urls.push(url.replace(match[0], String.fromCharCode(charCode))) + } + }else { + urls.push(url) + } + return urls +}; +goog.provide("ol.binary.Buffer"); +goog.provide("ol.binary.IReader"); +goog.require("goog.asserts"); +goog.require("goog.userAgent"); +goog.require("ol.BrowserFeature"); +ol.binary.Buffer = function(data) { + this.data_ = data +}; +ol.binary.Buffer.prototype.getReader = function() { + var data = this.data_; + if(ol.BrowserFeature.HAS_ARRAY_BUFFER) { + var arrayBuffer; + if(data instanceof ArrayBuffer) { + arrayBuffer = data + }else { + if(goog.isString(data)) { + arrayBuffer = new ArrayBuffer(data.length); + var uint8View = new Uint8Array(arrayBuffer); + var i, ii; + for(i = 0, ii = data.length;i < ii;++i) { + uint8View[i] = data.charCodeAt(i) + } + }else { + goog.asserts.fail(); + return null + } + } + return new ol.binary.ArrayBufferReader(arrayBuffer) + }else { + goog.asserts.assert(goog.isString(data)); + goog.asserts.assert(goog.userAgent.IE && !goog.userAgent.isVersionOrHigher("10.0")); + return new ol.binary.ArrayReader((new VBArray(data)).toArray()) + } +}; +ol.binary.IReader = function() { +}; +ol.binary.IReader.prototype.atEOF = function() { +}; +ol.binary.IReader.prototype.readByte = function() { +}; +ol.binary.ArrayBufferReader = function(arrayBuffer) { + this.uint8View_ = new Uint8Array(arrayBuffer); + this.length_ = this.uint8View_.length; + this.offset_ = 0 +}; +ol.binary.ArrayBufferReader.prototype.atEOF = function() { + return this.offset_ == this.length_ +}; +ol.binary.ArrayBufferReader.prototype.readByte = function() { + if(this.offset_ < this.length_) { + return this.uint8View_[this.offset_++] + }else { + goog.asserts.fail(); + return 0 + } +}; +ol.binary.ArrayReader = function(array) { + this.array_ = array; + this.length_ = array.length; + this.offset_ = 0 +}; +ol.binary.ArrayReader.prototype.atEOF = function() { + return this.offset_ == this.length_ +}; +ol.binary.ArrayReader.prototype.readByte = function() { + if(this.offset_ < this.length_) { + return this.array_[this.offset_++] + }else { + goog.asserts.fail(); + return 0 + } +}; +goog.provide("googx.dom.fullscreen"); +goog.provide("googx.dom.fullscreen.EventType"); +goog.require("goog.dom"); +goog.require("goog.userAgent"); +googx.dom.fullscreen.EventType = {CHANGE:function() { + if(goog.userAgent.WEBKIT) { + return"webkitfullscreenchange" + } + if(goog.userAgent.GECKO) { + return"mozfullscreenchange" + } + if(goog.userAgent.IE) { + return"MSFullscreenChange" + } + return"fullscreenchange" +}()}; +googx.dom.fullscreen.isSupported = function(opt_domHelper) { + var doc = googx.dom.fullscreen.getDocument_(opt_domHelper); + var body = doc.body; + return!!(body.webkitRequestFullscreen || body.mozRequestFullScreen && doc.mozFullScreenEnabled || body.msRequestFullscreen && doc.msFullscreenEnabled || body.requestFullscreen && doc.fullscreenEnabled) +}; +googx.dom.fullscreen.requestFullScreen = function(element) { + if(element.webkitRequestFullscreen) { + element.webkitRequestFullscreen() + }else { + if(element.mozRequestFullScreen) { + element.mozRequestFullScreen() + }else { + if(element.msRequestFullscreen) { + element.msRequestFullscreen() + }else { + if(element.requestFullscreen) { + element.requestFullscreen() + } + } + } + } +}; +googx.dom.fullscreen.requestFullScreenWithKeys = function(element) { + if(element.mozRequestFullScreenWithKeys) { + element.mozRequestFullScreenWithKeys() + }else { + if(element.webkitRequestFullscreen) { + element.webkitRequestFullscreen() + }else { + googx.dom.fullscreen.requestFullScreen(element) + } + } +}; +googx.dom.fullscreen.exitFullScreen = function(opt_domHelper) { + var doc = googx.dom.fullscreen.getDocument_(opt_domHelper); + if(doc.webkitCancelFullScreen) { + doc.webkitCancelFullScreen() + }else { + if(doc.mozCancelFullScreen) { + doc.mozCancelFullScreen() + }else { + if(doc.msExitFullscreen) { + doc.msExitFullscreen() + }else { + if(doc.exitFullscreen) { + doc.exitFullscreen() + } + } + } + } +}; +googx.dom.fullscreen.isFullScreen = function(opt_domHelper) { + var doc = googx.dom.fullscreen.getDocument_(opt_domHelper); + return!!(doc.webkitIsFullScreen || doc.mozFullScreen || doc.msFullscreenElement || doc.fullscreenElement) +}; +googx.dom.fullscreen.getDocument_ = function(opt_domHelper) { + return opt_domHelper ? opt_domHelper.getDocument() : goog.dom.getDomHelper().getDocument() +}; +goog.provide("ol.control.FullScreen"); +goog.require("goog.asserts"); +goog.require("goog.dom"); +goog.require("goog.dom.TagName"); +goog.require("goog.dom.classes"); +goog.require("goog.events"); +goog.require("goog.events.EventType"); +goog.require("googx.dom.fullscreen"); +goog.require("googx.dom.fullscreen.EventType"); +goog.require("ol.control.Control"); +goog.require("ol.css"); +ol.control.FullScreen = function(opt_options) { + var options = goog.isDef(opt_options) ? opt_options : {}; + this.cssClassName_ = goog.isDef(options.className) ? options.className : "ol-full-screen"; + var tipLabel = goog.isDef(options.tipLabel) ? options.tipLabel : "Toggle full-screen"; + var tip = goog.dom.createDom(goog.dom.TagName.SPAN, {"role":"tooltip"}, tipLabel); + var button = goog.dom.createDom(goog.dom.TagName.BUTTON, {"class":this.cssClassName_ + "-" + googx.dom.fullscreen.isFullScreen() + " ol-has-tooltip"}); + goog.dom.appendChild(button, tip); + goog.events.listen(button, [goog.events.EventType.CLICK, goog.events.EventType.TOUCHEND], this.handleClick_, false, this); + goog.events.listen(button, [goog.events.EventType.MOUSEOUT, goog.events.EventType.FOCUSOUT], function() { + this.blur() + }, false); + goog.events.listen(goog.global.document, googx.dom.fullscreen.EventType.CHANGE, this.handleFullScreenChange_, false, this); + var element = goog.dom.createDom(goog.dom.TagName.DIV, {"class":this.cssClassName_ + " " + ol.css.CLASS_UNSELECTABLE + " " + (!googx.dom.fullscreen.isSupported() ? ol.css.CLASS_UNSUPPORTED : "")}, button); + goog.base(this, {element:element, target:options.target}); + this.keys_ = goog.isDef(options.keys) ? options.keys : false +}; +goog.inherits(ol.control.FullScreen, ol.control.Control); +ol.control.FullScreen.prototype.handleClick_ = function(browserEvent) { + if(!googx.dom.fullscreen.isSupported()) { + return + } + browserEvent.preventDefault(); + var map = this.getMap(); + if(goog.isNull(map)) { + return + } + if(googx.dom.fullscreen.isFullScreen()) { + googx.dom.fullscreen.exitFullScreen() + }else { + var target = map.getTarget(); + goog.asserts.assert(goog.isDefAndNotNull(target)); + var element = goog.dom.getElement(target); + goog.asserts.assert(goog.isDefAndNotNull(element)); + if(this.keys_) { + googx.dom.fullscreen.requestFullScreenWithKeys(element) + }else { + googx.dom.fullscreen.requestFullScreen(element) + } + } +}; +ol.control.FullScreen.prototype.handleFullScreenChange_ = function() { + var opened = this.cssClassName_ + "-true"; + var closed = this.cssClassName_ + "-false"; + var anchor = goog.dom.getFirstElementChild(this.element); + var map = this.getMap(); + if(googx.dom.fullscreen.isFullScreen()) { + goog.dom.classes.swap(anchor, closed, opened) + }else { + goog.dom.classes.swap(anchor, opened, closed) + } + if(!goog.isNull(map)) { + map.updateSize() + } +}; +goog.provide("ol.control.MousePosition"); +goog.require("goog.array"); +goog.require("goog.dom"); +goog.require("goog.dom.TagName"); +goog.require("goog.events"); +goog.require("goog.events.EventType"); +goog.require("goog.style"); +goog.require("ol.CoordinateFormatType"); +goog.require("ol.Object"); +goog.require("ol.Pixel"); +goog.require("ol.TransformFunction"); +goog.require("ol.control.Control"); +goog.require("ol.proj"); +goog.require("ol.proj.Projection"); +ol.control.MousePositionProperty = {PROJECTION:"projection", COORDINATE_FORMAT:"coordinateFormat"}; +ol.control.MousePosition = function(opt_options) { + var options = goog.isDef(opt_options) ? opt_options : {}; + var className = goog.isDef(options.className) ? options.className : "ol-mouse-position"; + var element = goog.dom.createDom(goog.dom.TagName.DIV, {"class":className}); + goog.base(this, {element:element, target:options.target}); + goog.events.listen(this, ol.Object.getChangeEventType(ol.control.MousePositionProperty.PROJECTION), this.handleProjectionChanged_, false, this); + if(goog.isDef(options.coordinateFormat)) { + this.setCoordinateFormat(options.coordinateFormat) + } + if(goog.isDef(options.projection)) { + this.setProjection(ol.proj.get(options.projection)) + } + this.undefinedHTML_ = goog.isDef(options.undefinedHTML) ? options.undefinedHTML : ""; + this.renderedHTML_ = element.innerHTML; + this.mapProjection_ = null; + this.transform_ = null; + this.lastMouseMovePixel_ = null +}; +goog.inherits(ol.control.MousePosition, ol.control.Control); +ol.control.MousePosition.prototype.handleMapPostrender = function(mapEvent) { + var frameState = mapEvent.frameState; + if(goog.isNull(frameState)) { + this.mapProjection_ = null + }else { + if(this.mapProjection_ != frameState.view2DState.projection) { + this.mapProjection_ = frameState.view2DState.projection; + this.transform_ = null + } + } + this.updateHTML_(this.lastMouseMovePixel_) +}; +ol.control.MousePosition.prototype.handleProjectionChanged_ = function() { + this.transform_ = null +}; +ol.control.MousePosition.prototype.getCoordinateFormat = function() { + return(this.get(ol.control.MousePositionProperty.COORDINATE_FORMAT)) +}; +goog.exportProperty(ol.control.MousePosition.prototype, "getCoordinateFormat", ol.control.MousePosition.prototype.getCoordinateFormat); +ol.control.MousePosition.prototype.getProjection = function() { + return(this.get(ol.control.MousePositionProperty.PROJECTION)) +}; +goog.exportProperty(ol.control.MousePosition.prototype, "getProjection", ol.control.MousePosition.prototype.getProjection); +ol.control.MousePosition.prototype.handleMouseMove = function(browserEvent) { + var map = this.getMap(); + var eventPosition = goog.style.getRelativePosition(browserEvent, map.getViewport()); + this.lastMouseMovePixel_ = [eventPosition.x, eventPosition.y]; + this.updateHTML_(this.lastMouseMovePixel_) +}; +ol.control.MousePosition.prototype.handleMouseOut = function(browserEvent) { + this.updateHTML_(null); + this.lastMouseMovePixel_ = null +}; +ol.control.MousePosition.prototype.setMap = function(map) { + goog.base(this, "setMap", map); + if(!goog.isNull(map)) { + var viewport = map.getViewport(); + this.listenerKeys.push(goog.events.listen(viewport, goog.events.EventType.MOUSEMOVE, this.handleMouseMove, false, this), goog.events.listen(viewport, goog.events.EventType.MOUSEOUT, this.handleMouseOut, false, this)) + } +}; +ol.control.MousePosition.prototype.setCoordinateFormat = function(format) { + this.set(ol.control.MousePositionProperty.COORDINATE_FORMAT, format) +}; +goog.exportProperty(ol.control.MousePosition.prototype, "setCoordinateFormat", ol.control.MousePosition.prototype.setCoordinateFormat); +ol.control.MousePosition.prototype.setProjection = function(projection) { + this.set(ol.control.MousePositionProperty.PROJECTION, projection) +}; +goog.exportProperty(ol.control.MousePosition.prototype, "setProjection", ol.control.MousePosition.prototype.setProjection); +ol.control.MousePosition.prototype.updateHTML_ = function(pixel) { + var html = this.undefinedHTML_; + if(!goog.isNull(pixel) && !goog.isNull(this.mapProjection_)) { + if(goog.isNull(this.transform_)) { + var projection = this.getProjection(); + if(goog.isDef(projection)) { + this.transform_ = ol.proj.getTransformFromProjections(this.mapProjection_, projection) + }else { + this.transform_ = ol.proj.identityTransform + } + } + var map = this.getMap(); + var coordinate = map.getCoordinateFromPixel(pixel); + if(!goog.isNull(coordinate)) { + this.transform_(coordinate, coordinate); + var coordinateFormat = this.getCoordinateFormat(); + if(goog.isDef(coordinateFormat)) { + html = coordinateFormat(coordinate) + }else { + html = coordinate.toString() + } + } + } + if(!goog.isDef(this.renderedHTML_) || html != this.renderedHTML_) { + this.element.innerHTML = html; + this.renderedHTML_ = html + } +}; +goog.provide("ol.control.ScaleLine"); +goog.provide("ol.control.ScaleLineProperty"); +goog.provide("ol.control.ScaleLineUnits"); +goog.require("goog.array"); +goog.require("goog.asserts"); +goog.require("goog.dom"); +goog.require("goog.dom.TagName"); +goog.require("goog.events"); +goog.require("goog.math"); +goog.require("goog.style"); +goog.require("ol.Object"); +goog.require("ol.TransformFunction"); +goog.require("ol.View2DState"); +goog.require("ol.control.Control"); +goog.require("ol.css"); +goog.require("ol.proj"); +goog.require("ol.proj.Units"); +goog.require("ol.sphere.NORMAL"); +ol.control.ScaleLineProperty = {UNITS:"units"}; +ol.control.ScaleLineUnits = {DEGREES:"degrees", IMPERIAL:"imperial", NAUTICAL:"nautical", METRIC:"metric", US:"us"}; +ol.control.ScaleLine = function(opt_options) { + var options = opt_options || {}; + var className = goog.isDef(options.className) ? options.className : "ol-scale-line"; + this.innerElement_ = goog.dom.createDom(goog.dom.TagName.DIV, {"class":className + "-inner"}); + this.element_ = goog.dom.createDom(goog.dom.TagName.DIV, {"class":className + " " + ol.css.CLASS_UNSELECTABLE}, this.innerElement_); + this.view2DState_ = null; + this.minWidth_ = goog.isDef(options.minWidth) ? options.minWidth : 64; + this.renderedVisible_ = false; + this.renderedWidth_ = undefined; + this.renderedHTML_ = ""; + this.toEPSG4326_ = null; + goog.base(this, {element:this.element_, target:options.target}); + goog.events.listen(this, ol.Object.getChangeEventType(ol.control.ScaleLineProperty.UNITS), this.handleUnitsChanged_, false, this); + this.setUnits((options.units) || ol.control.ScaleLineUnits.METRIC) +}; +goog.inherits(ol.control.ScaleLine, ol.control.Control); +ol.control.ScaleLine.LEADING_DIGITS = [1, 2, 5]; +ol.control.ScaleLine.prototype.getUnits = function() { + return(this.get(ol.control.ScaleLineProperty.UNITS)) +}; +goog.exportProperty(ol.control.ScaleLine.prototype, "getUnits", ol.control.ScaleLine.prototype.getUnits); +ol.control.ScaleLine.prototype.handleMapPostrender = function(mapEvent) { + var frameState = mapEvent.frameState; + if(goog.isNull(frameState)) { + this.view2DState_ = null + }else { + this.view2DState_ = frameState.view2DState + } + this.updateElement_() +}; +ol.control.ScaleLine.prototype.handleUnitsChanged_ = function() { + this.updateElement_() +}; +ol.control.ScaleLine.prototype.setUnits = function(units) { + this.set(ol.control.ScaleLineProperty.UNITS, units) +}; +goog.exportProperty(ol.control.ScaleLine.prototype, "setUnits", ol.control.ScaleLine.prototype.setUnits); +ol.control.ScaleLine.prototype.updateElement_ = function() { + var view2DState = this.view2DState_; + if(goog.isNull(view2DState)) { + if(this.renderedVisible_) { + goog.style.setElementShown(this.element_, false); + this.renderedVisible_ = false + } + return + } + var center = view2DState.center; + var projection = view2DState.projection; + var pointResolution = projection.getPointResolution(view2DState.resolution, center); + var projectionUnits = projection.getUnits(); + var cosLatitude; + var units = this.getUnits(); + if(projectionUnits == ol.proj.Units.DEGREES && (units == ol.control.ScaleLineUnits.METRIC || units == ol.control.ScaleLineUnits.IMPERIAL)) { + this.toEPSG4326_ = null; + cosLatitude = Math.cos(goog.math.toRadians(center[1])); + pointResolution *= Math.PI * cosLatitude * ol.sphere.NORMAL.radius / 180; + projectionUnits = ol.proj.Units.METERS + }else { + if((projectionUnits == ol.proj.Units.FEET || projectionUnits == ol.proj.Units.METERS) && units == ol.control.ScaleLineUnits.DEGREES) { + if(goog.isNull(this.toEPSG4326_)) { + this.toEPSG4326_ = ol.proj.getTransformFromProjections(projection, ol.proj.get("EPSG:4326")) + } + cosLatitude = Math.cos(goog.math.toRadians(this.toEPSG4326_(center)[1])); + var radius = ol.sphere.NORMAL.radius; + if(projectionUnits == ol.proj.Units.FEET) { + radius /= 0.3048 + } + pointResolution *= 180 / (Math.PI * cosLatitude * radius); + projectionUnits = ol.proj.Units.DEGREES + }else { + this.toEPSG4326_ = null + } + } + goog.asserts.assert((units == ol.control.ScaleLineUnits.METRIC || units == ol.control.ScaleLineUnits.IMPERIAL) && projectionUnits == ol.proj.Units.METERS || units == ol.control.ScaleLineUnits.DEGREES && projectionUnits == ol.proj.Units.DEGREES); + var nominalCount = this.minWidth_ * pointResolution; + var suffix = ""; + if(units == ol.control.ScaleLineUnits.DEGREES) { + if(nominalCount < 1 / 60) { + suffix = "\u2033"; + pointResolution *= 3600 + }else { + if(nominalCount < 1) { + suffix = "\u2032"; + pointResolution *= 60 + }else { + suffix = "\u00b0" + } + } + }else { + if(units == ol.control.ScaleLineUnits.IMPERIAL) { + if(nominalCount < 0.9144) { + suffix = "in"; + pointResolution /= 0.0254 + }else { + if(nominalCount < 1609.344) { + suffix = "ft"; + pointResolution /= 0.3048 + }else { + suffix = "mi"; + pointResolution /= 1609.344 + } + } + }else { + if(units == ol.control.ScaleLineUnits.NAUTICAL) { + pointResolution /= 1852; + suffix = "nm" + }else { + if(units == ol.control.ScaleLineUnits.METRIC) { + if(nominalCount < 1) { + suffix = "mm"; + pointResolution *= 1E3 + }else { + if(nominalCount < 1E3) { + suffix = "m" + }else { + suffix = "km"; + pointResolution /= 1E3 + } + } + }else { + if(units == ol.control.ScaleLineUnits.US) { + if(nominalCount < 0.9144) { + suffix = "in"; + pointResolution *= 39.37 + }else { + if(nominalCount < 1609.344) { + suffix = "ft"; + pointResolution /= 0.30480061 + }else { + suffix = "mi"; + pointResolution /= 1609.3472 + } + } + }else { + goog.asserts.fail() + } + } + } + } + } + var i = 3 * Math.floor(Math.log(this.minWidth_ * pointResolution) / Math.log(10)); + var count, width; + while(true) { + count = ol.control.ScaleLine.LEADING_DIGITS[i % 3] * Math.pow(10, Math.floor(i / 3)); + width = Math.round(count / pointResolution); + if(width >= this.minWidth_) { + break + } + ++i + } + var html = count + suffix; + if(this.renderedHTML_ != html) { + this.innerElement_.innerHTML = html; + this.renderedHTML_ = html + } + if(this.renderedWidth_ != width) { + this.innerElement_.style.width = width + "px"; + this.renderedWidth_ = width + } + if(!this.renderedVisible_) { + goog.style.setElementShown(this.element_, true); + this.renderedVisible_ = true + } +}; +goog.provide("goog.events.EventHandler"); +goog.require("goog.Disposable"); +goog.require("goog.events"); +goog.require("goog.object"); +goog.events.EventHandler = function(opt_handler) { + goog.Disposable.call(this); + this.handler_ = opt_handler; + this.keys_ = {} +}; +goog.inherits(goog.events.EventHandler, goog.Disposable); +goog.events.EventHandler.typeArray_ = []; +goog.events.EventHandler.prototype.listen = function(src, type, opt_fn, opt_capture, opt_handler) { + if(!goog.isArray(type)) { + goog.events.EventHandler.typeArray_[0] = (type); + type = goog.events.EventHandler.typeArray_ + } + for(var i = 0;i < type.length;i++) { + var listenerObj = goog.events.listen(src, type[i], opt_fn || this, opt_capture || false, opt_handler || this.handler_ || this); + if(goog.DEBUG && !listenerObj) { + return this + } + var key = listenerObj.key; + this.keys_[key] = listenerObj + } + return this +}; +goog.events.EventHandler.prototype.listenOnce = function(src, type, opt_fn, opt_capture, opt_handler) { + if(goog.isArray(type)) { + for(var i = 0;i < type.length;i++) { + this.listenOnce(src, type[i], opt_fn, opt_capture, opt_handler) + } + }else { + var listenerObj = goog.events.listenOnce(src, type, opt_fn || this, opt_capture, opt_handler || this.handler_ || this); + var key = listenerObj.key; + this.keys_[key] = listenerObj + } + return this +}; +goog.events.EventHandler.prototype.listenWithWrapper = function(src, wrapper, listener, opt_capt, opt_handler) { + wrapper.listen(src, listener, opt_capt, opt_handler || this.handler_ || this, this); + return this +}; +goog.events.EventHandler.prototype.getListenerCount = function() { + var count = 0; + for(var key in this.keys_) { + if(Object.prototype.hasOwnProperty.call(this.keys_, key)) { + count++ + } + } + return count +}; +goog.events.EventHandler.prototype.unlisten = function(src, type, opt_fn, opt_capture, opt_handler) { + if(goog.isArray(type)) { + for(var i = 0;i < type.length;i++) { + this.unlisten(src, type[i], opt_fn, opt_capture, opt_handler) + } + }else { + var listener = goog.events.getListener(src, type, opt_fn || this, opt_capture, opt_handler || this.handler_ || this); + if(listener) { + goog.events.unlistenByKey(listener); + delete this.keys_[listener.key] + } + } + return this +}; +goog.events.EventHandler.prototype.unlistenWithWrapper = function(src, wrapper, listener, opt_capt, opt_handler) { + wrapper.unlisten(src, listener, opt_capt, opt_handler || this.handler_ || this, this); + return this +}; +goog.events.EventHandler.prototype.removeAll = function() { + goog.object.forEach(this.keys_, goog.events.unlistenByKey); + this.keys_ = {} +}; +goog.events.EventHandler.prototype.disposeInternal = function() { + goog.events.EventHandler.superClass_.disposeInternal.call(this); + this.removeAll() +}; +goog.events.EventHandler.prototype.handleEvent = function(e) { + throw Error("EventHandler.handleEvent not implemented"); +}; +goog.provide("goog.style.bidi"); +goog.require("goog.dom"); +goog.require("goog.style"); +goog.require("goog.userAgent"); +goog.style.bidi.getScrollLeft = function(element) { + var isRtl = goog.style.isRightToLeft(element); + if(isRtl && goog.userAgent.GECKO) { + return-element.scrollLeft + }else { + if(isRtl && !(goog.userAgent.IE && goog.userAgent.isVersionOrHigher("8"))) { + var overflowX = goog.style.getComputedOverflowX(element); + if(overflowX == "visible") { + return element.scrollLeft + }else { + return element.scrollWidth - element.clientWidth - element.scrollLeft + } + } + } + return element.scrollLeft +}; +goog.style.bidi.getOffsetStart = function(element) { + var offsetLeftForReal = element.offsetLeft; + var bestParent = element.offsetParent; + if(!bestParent && goog.style.getComputedPosition(element) == "fixed") { + bestParent = goog.dom.getOwnerDocument(element).documentElement + } + if(!bestParent) { + return offsetLeftForReal + } + if(goog.userAgent.GECKO) { + var borderWidths = goog.style.getBorderBox(bestParent); + offsetLeftForReal += borderWidths.left + }else { + if(goog.userAgent.isDocumentModeOrHigher(8)) { + var borderWidths = goog.style.getBorderBox(bestParent); + offsetLeftForReal -= borderWidths.left + } + } + if(goog.style.isRightToLeft(bestParent)) { + var elementRightOffset = offsetLeftForReal + element.offsetWidth; + return bestParent.clientWidth - elementRightOffset + } + return offsetLeftForReal +}; +goog.style.bidi.setScrollOffset = function(element, offsetStart) { + offsetStart = Math.max(offsetStart, 0); + if(!goog.style.isRightToLeft(element)) { + element.scrollLeft = offsetStart + }else { + if(goog.userAgent.GECKO) { + element.scrollLeft = -offsetStart + }else { + if(!(goog.userAgent.IE && goog.userAgent.isVersionOrHigher("8"))) { + element.scrollLeft = element.scrollWidth - offsetStart - element.clientWidth + }else { + element.scrollLeft = offsetStart + } + } + } +}; +goog.style.bidi.setPosition = function(elem, left, top, isRtl) { + if(!goog.isNull(top)) { + elem.style.top = top + "px" + } + if(isRtl) { + elem.style.right = left + "px"; + elem.style.left = "" + }else { + elem.style.left = left + "px"; + elem.style.right = "" + } +}; +goog.provide("goog.fx.DragEvent"); +goog.provide("goog.fx.Dragger"); +goog.provide("goog.fx.Dragger.EventType"); +goog.require("goog.dom"); +goog.require("goog.events"); +goog.require("goog.events.Event"); +goog.require("goog.events.EventHandler"); +goog.require("goog.events.EventTarget"); +goog.require("goog.events.EventType"); +goog.require("goog.math.Coordinate"); +goog.require("goog.math.Rect"); +goog.require("goog.style"); +goog.require("goog.style.bidi"); +goog.require("goog.userAgent"); +goog.fx.Dragger = function(target, opt_handle, opt_limits) { + goog.events.EventTarget.call(this); + this.target = target; + this.handle = opt_handle || target; + this.limits = opt_limits || new goog.math.Rect(NaN, NaN, NaN, NaN); + this.document_ = goog.dom.getOwnerDocument(target); + this.eventHandler_ = new goog.events.EventHandler(this); + this.registerDisposable(this.eventHandler_); + goog.events.listen(this.handle, [goog.events.EventType.TOUCHSTART, goog.events.EventType.MOUSEDOWN], this.startDrag, false, this) +}; +goog.inherits(goog.fx.Dragger, goog.events.EventTarget); +goog.fx.Dragger.HAS_SET_CAPTURE_ = goog.userAgent.IE || goog.userAgent.GECKO && goog.userAgent.isVersionOrHigher("1.9.3"); +goog.fx.Dragger.EventType = {EARLY_CANCEL:"earlycancel", START:"start", BEFOREDRAG:"beforedrag", DRAG:"drag", END:"end"}; +goog.fx.Dragger.prototype.target; +goog.fx.Dragger.prototype.handle; +goog.fx.Dragger.prototype.limits; +goog.fx.Dragger.prototype.rightToLeft_; +goog.fx.Dragger.prototype.clientX = 0; +goog.fx.Dragger.prototype.clientY = 0; +goog.fx.Dragger.prototype.screenX = 0; +goog.fx.Dragger.prototype.screenY = 0; +goog.fx.Dragger.prototype.startX = 0; +goog.fx.Dragger.prototype.startY = 0; +goog.fx.Dragger.prototype.deltaX = 0; +goog.fx.Dragger.prototype.deltaY = 0; +goog.fx.Dragger.prototype.pageScroll; +goog.fx.Dragger.prototype.enabled_ = true; +goog.fx.Dragger.prototype.dragging_ = false; +goog.fx.Dragger.prototype.hysteresisDistanceSquared_ = 0; +goog.fx.Dragger.prototype.mouseDownTime_ = 0; +goog.fx.Dragger.prototype.document_; +goog.fx.Dragger.prototype.scrollTarget_; +goog.fx.Dragger.prototype.ieDragStartCancellingOn_ = false; +goog.fx.Dragger.prototype.useRightPositioningForRtl_ = false; +goog.fx.Dragger.prototype.enableRightPositioningForRtl = function(useRightPositioningForRtl) { + this.useRightPositioningForRtl_ = useRightPositioningForRtl +}; +goog.fx.Dragger.prototype.getHandler = function() { + return this.eventHandler_ +}; +goog.fx.Dragger.prototype.setLimits = function(limits) { + this.limits = limits || new goog.math.Rect(NaN, NaN, NaN, NaN) +}; +goog.fx.Dragger.prototype.setHysteresis = function(distance) { + this.hysteresisDistanceSquared_ = Math.pow(distance, 2) +}; +goog.fx.Dragger.prototype.getHysteresis = function() { + return Math.sqrt(this.hysteresisDistanceSquared_) +}; +goog.fx.Dragger.prototype.setScrollTarget = function(scrollTarget) { + this.scrollTarget_ = scrollTarget +}; +goog.fx.Dragger.prototype.setCancelIeDragStart = function(cancelIeDragStart) { + this.ieDragStartCancellingOn_ = cancelIeDragStart +}; +goog.fx.Dragger.prototype.getEnabled = function() { + return this.enabled_ +}; +goog.fx.Dragger.prototype.setEnabled = function(enabled) { + this.enabled_ = enabled +}; +goog.fx.Dragger.prototype.disposeInternal = function() { + goog.fx.Dragger.superClass_.disposeInternal.call(this); + goog.events.unlisten(this.handle, [goog.events.EventType.TOUCHSTART, goog.events.EventType.MOUSEDOWN], this.startDrag, false, this); + this.cleanUpAfterDragging_(); + this.target = null; + this.handle = null +}; +goog.fx.Dragger.prototype.isRightToLeft_ = function() { + if(!goog.isDef(this.rightToLeft_)) { + this.rightToLeft_ = goog.style.isRightToLeft(this.target) + } + return this.rightToLeft_ +}; +goog.fx.Dragger.prototype.startDrag = function(e) { + var isMouseDown = e.type == goog.events.EventType.MOUSEDOWN; + if(this.enabled_ && !this.dragging_ && (!isMouseDown || e.isMouseActionButton())) { + this.maybeReinitTouchEvent_(e); + if(this.hysteresisDistanceSquared_ == 0) { + if(this.fireDragStart_(e)) { + this.dragging_ = true; + e.preventDefault() + }else { + return + } + }else { + e.preventDefault() + } + this.setupDragHandlers(); + this.clientX = this.startX = e.clientX; + this.clientY = this.startY = e.clientY; + this.screenX = e.screenX; + this.screenY = e.screenY; + this.deltaX = this.useRightPositioningForRtl_ ? goog.style.bidi.getOffsetStart(this.target) : this.target.offsetLeft; + this.deltaY = this.target.offsetTop; + this.pageScroll = goog.dom.getDomHelper(this.document_).getDocumentScroll(); + this.mouseDownTime_ = goog.now() + }else { + this.dispatchEvent(goog.fx.Dragger.EventType.EARLY_CANCEL) + } +}; +goog.fx.Dragger.prototype.setupDragHandlers = function() { + var doc = this.document_; + var docEl = doc.documentElement; + var useCapture = !goog.fx.Dragger.HAS_SET_CAPTURE_; + this.eventHandler_.listen(doc, [goog.events.EventType.TOUCHMOVE, goog.events.EventType.MOUSEMOVE], this.handleMove_, useCapture); + this.eventHandler_.listen(doc, [goog.events.EventType.TOUCHEND, goog.events.EventType.MOUSEUP], this.endDrag, useCapture); + if(goog.fx.Dragger.HAS_SET_CAPTURE_) { + docEl.setCapture(false); + this.eventHandler_.listen(docEl, goog.events.EventType.LOSECAPTURE, this.endDrag) + }else { + this.eventHandler_.listen(goog.dom.getWindow(doc), goog.events.EventType.BLUR, this.endDrag) + } + if(goog.userAgent.IE && this.ieDragStartCancellingOn_) { + this.eventHandler_.listen(doc, goog.events.EventType.DRAGSTART, goog.events.Event.preventDefault) + } + if(this.scrollTarget_) { + this.eventHandler_.listen(this.scrollTarget_, goog.events.EventType.SCROLL, this.onScroll_, useCapture) + } +}; +goog.fx.Dragger.prototype.fireDragStart_ = function(e) { + return this.dispatchEvent(new goog.fx.DragEvent(goog.fx.Dragger.EventType.START, this, e.clientX, e.clientY, e)) +}; +goog.fx.Dragger.prototype.cleanUpAfterDragging_ = function() { + this.eventHandler_.removeAll(); + if(goog.fx.Dragger.HAS_SET_CAPTURE_) { + this.document_.releaseCapture() + } +}; +goog.fx.Dragger.prototype.endDrag = function(e, opt_dragCanceled) { + this.cleanUpAfterDragging_(); + if(this.dragging_) { + this.maybeReinitTouchEvent_(e); + this.dragging_ = false; + var x = this.limitX(this.deltaX); + var y = this.limitY(this.deltaY); + var dragCanceled = opt_dragCanceled || e.type == goog.events.EventType.TOUCHCANCEL; + this.dispatchEvent(new goog.fx.DragEvent(goog.fx.Dragger.EventType.END, this, e.clientX, e.clientY, e, x, y, dragCanceled)) + }else { + this.dispatchEvent(goog.fx.Dragger.EventType.EARLY_CANCEL) + } +}; +goog.fx.Dragger.prototype.endDragCancel = function(e) { + this.endDrag(e, true) +}; +goog.fx.Dragger.prototype.maybeReinitTouchEvent_ = function(e) { + var type = e.type; + if(type == goog.events.EventType.TOUCHSTART || type == goog.events.EventType.TOUCHMOVE) { + e.init(e.getBrowserEvent().targetTouches[0], e.currentTarget) + }else { + if(type == goog.events.EventType.TOUCHEND || type == goog.events.EventType.TOUCHCANCEL) { + e.init(e.getBrowserEvent().changedTouches[0], e.currentTarget) + } + } +}; +goog.fx.Dragger.prototype.handleMove_ = function(e) { + if(this.enabled_) { + this.maybeReinitTouchEvent_(e); + var sign = this.useRightPositioningForRtl_ && this.isRightToLeft_() ? -1 : 1; + var dx = sign * (e.clientX - this.clientX); + var dy = e.clientY - this.clientY; + this.clientX = e.clientX; + this.clientY = e.clientY; + this.screenX = e.screenX; + this.screenY = e.screenY; + if(!this.dragging_) { + var diffX = this.startX - this.clientX; + var diffY = this.startY - this.clientY; + var distance = diffX * diffX + diffY * diffY; + if(distance > this.hysteresisDistanceSquared_) { + if(this.fireDragStart_(e)) { + this.dragging_ = true + }else { + if(!this.isDisposed()) { + this.endDrag(e) + } + return + } + } + } + var pos = this.calculatePosition_(dx, dy); + var x = pos.x; + var y = pos.y; + if(this.dragging_) { + var rv = this.dispatchEvent(new goog.fx.DragEvent(goog.fx.Dragger.EventType.BEFOREDRAG, this, e.clientX, e.clientY, e, x, y)); + if(rv) { + this.doDrag(e, x, y, false); + e.preventDefault() + } + } + } +}; +goog.fx.Dragger.prototype.calculatePosition_ = function(dx, dy) { + var pageScroll = goog.dom.getDomHelper(this.document_).getDocumentScroll(); + dx += pageScroll.x - this.pageScroll.x; + dy += pageScroll.y - this.pageScroll.y; + this.pageScroll = pageScroll; + this.deltaX += dx; + this.deltaY += dy; + var x = this.limitX(this.deltaX); + var y = this.limitY(this.deltaY); + return new goog.math.Coordinate(x, y) +}; +goog.fx.Dragger.prototype.onScroll_ = function(e) { + var pos = this.calculatePosition_(0, 0); + e.clientX = this.clientX; + e.clientY = this.clientY; + this.doDrag(e, pos.x, pos.y, true) +}; +goog.fx.Dragger.prototype.doDrag = function(e, x, y, dragFromScroll) { + this.defaultAction(x, y); + this.dispatchEvent(new goog.fx.DragEvent(goog.fx.Dragger.EventType.DRAG, this, e.clientX, e.clientY, e, x, y)) +}; +goog.fx.Dragger.prototype.limitX = function(x) { + var rect = this.limits; + var left = !isNaN(rect.left) ? rect.left : null; + var width = !isNaN(rect.width) ? rect.width : 0; + var maxX = left != null ? left + width : Infinity; + var minX = left != null ? left : -Infinity; + return Math.min(maxX, Math.max(minX, x)) +}; +goog.fx.Dragger.prototype.limitY = function(y) { + var rect = this.limits; + var top = !isNaN(rect.top) ? rect.top : null; + var height = !isNaN(rect.height) ? rect.height : 0; + var maxY = top != null ? top + height : Infinity; + var minY = top != null ? top : -Infinity; + return Math.min(maxY, Math.max(minY, y)) +}; +goog.fx.Dragger.prototype.defaultAction = function(x, y) { + if(this.useRightPositioningForRtl_ && this.isRightToLeft_()) { + this.target.style.right = x + "px" + }else { + this.target.style.left = x + "px" + } + this.target.style.top = y + "px" +}; +goog.fx.Dragger.prototype.isDragging = function() { + return this.dragging_ +}; +goog.fx.DragEvent = function(type, dragobj, clientX, clientY, browserEvent, opt_actX, opt_actY, opt_dragCanceled) { + goog.events.Event.call(this, type); + this.clientX = clientX; + this.clientY = clientY; + this.browserEvent = browserEvent; + this.left = goog.isDef(opt_actX) ? opt_actX : dragobj.deltaX; + this.top = goog.isDef(opt_actY) ? opt_actY : dragobj.deltaY; + this.dragger = dragobj; + this.dragCanceled = !!opt_dragCanceled +}; +goog.inherits(goog.fx.DragEvent, goog.events.Event); +goog.provide("ol.control.ZoomSlider"); +goog.require("goog.array"); +goog.require("goog.asserts"); +goog.require("goog.dom"); +goog.require("goog.dom.TagName"); +goog.require("goog.events"); +goog.require("goog.events.Event"); +goog.require("goog.events.EventType"); +goog.require("goog.fx.Dragger"); +goog.require("goog.fx.Dragger.EventType"); +goog.require("goog.math"); +goog.require("goog.math.Rect"); +goog.require("goog.style"); +goog.require("ol.animation"); +goog.require("ol.control.Control"); +goog.require("ol.css"); +goog.require("ol.easing"); +ol.control.ZOOMSLIDER_ANIMATION_DURATION = 200; +ol.control.ZoomSlider = function(opt_options) { + var options = goog.isDef(opt_options) ? opt_options : {}; + this.currentResolution_ = undefined; + this.direction_ = ol.control.ZoomSlider.direction.VERTICAL; + this.sliderInitialized_ = false; + var className = goog.isDef(options.className) ? options.className : "ol-zoomslider"; + var thumbElement = goog.dom.createDom(goog.dom.TagName.DIV, [className + "-thumb", ol.css.CLASS_UNSELECTABLE]); + var sliderElement = goog.dom.createDom(goog.dom.TagName.DIV, [className, ol.css.CLASS_UNSELECTABLE], thumbElement); + this.dragger_ = new goog.fx.Dragger(thumbElement); + this.registerDisposable(this.dragger_); + goog.events.listen(this.dragger_, [goog.fx.Dragger.EventType.DRAG, goog.fx.Dragger.EventType.END], this.handleSliderChange_, undefined, this); + goog.events.listen(sliderElement, goog.events.EventType.CLICK, this.handleContainerClick_, false, this); + goog.events.listen(thumbElement, goog.events.EventType.CLICK, goog.events.Event.stopPropagation); + goog.base(this, {element:sliderElement}) +}; +goog.inherits(ol.control.ZoomSlider, ol.control.Control); +ol.control.ZoomSlider.direction = {VERTICAL:0, HORIZONTAL:1}; +ol.control.ZoomSlider.prototype.setMap = function(map) { + goog.base(this, "setMap", map); + if(!goog.isNull(map)) { + map.render() + } +}; +ol.control.ZoomSlider.prototype.initSlider_ = function() { + var container = this.element, thumb = goog.dom.getFirstElementChild(container), elemSize = goog.style.getContentBoxSize(container), thumbBounds = goog.style.getBounds(thumb), thumbMargins = goog.style.getMarginBox(thumb), thumbBorderBox = goog.style.getBorderBox(thumb), w = elemSize.width - thumbMargins.left - thumbMargins.right - thumbBorderBox.left - thumbBorderBox.right - thumbBounds.width, h = elemSize.height - thumbMargins.top - thumbMargins.bottom - thumbBorderBox.top - thumbBorderBox.bottom - + thumbBounds.height, limits; + if(elemSize.width > elemSize.height) { + this.direction_ = ol.control.ZoomSlider.direction.HORIZONTAL; + limits = new goog.math.Rect(0, 0, w, 0) + }else { + this.direction_ = ol.control.ZoomSlider.direction.VERTICAL; + limits = new goog.math.Rect(0, 0, 0, h) + } + this.dragger_.setLimits(limits); + this.sliderInitialized_ = true +}; +ol.control.ZoomSlider.prototype.handleMapPostrender = function(mapEvent) { + if(goog.isNull(mapEvent.frameState)) { + return + } + goog.asserts.assert(goog.isDefAndNotNull(mapEvent.frameState.view2DState)); + if(!this.sliderInitialized_) { + this.initSlider_() + } + var res = mapEvent.frameState.view2DState.resolution; + if(res !== this.currentResolution_) { + this.currentResolution_ = res; + this.positionThumbForResolution_(res) + } +}; +ol.control.ZoomSlider.prototype.handleContainerClick_ = function(browserEvent) { + var map = this.getMap(); + var view = map.getView().getView2D(); + var resolution; + var amountDragged = this.amountDragged_(browserEvent.offsetX, browserEvent.offsetY); + resolution = this.resolutionForAmount_(amountDragged); + goog.asserts.assert(goog.isDef(resolution)); + map.beforeRender(ol.animation.zoom({resolution:resolution, duration:ol.control.ZOOMSLIDER_ANIMATION_DURATION, easing:ol.easing.easeOut})); + resolution = view.constrainResolution(resolution); + view.setResolution(resolution) +}; +ol.control.ZoomSlider.prototype.positionThumbForResolution_ = function(res) { + var amount = this.amountForResolution_(res), dragger = this.dragger_, thumb = goog.dom.getFirstElementChild(this.element); + if(this.direction_ == ol.control.ZoomSlider.direction.HORIZONTAL) { + var left = dragger.limits.left + dragger.limits.width * amount; + goog.style.setPosition(thumb, left) + }else { + var top = dragger.limits.top + dragger.limits.height * amount; + goog.style.setPosition(thumb, dragger.limits.left, top) + } +}; +ol.control.ZoomSlider.prototype.amountDragged_ = function(x, y) { + var draggerLimits = this.dragger_.limits, amount = 0; + if(this.direction_ === ol.control.ZoomSlider.direction.HORIZONTAL) { + amount = (x - draggerLimits.left) / draggerLimits.width + }else { + amount = (y - draggerLimits.top) / draggerLimits.height + } + return amount +}; +ol.control.ZoomSlider.prototype.resolutionForAmount_ = function(amount) { + amount = (goog.math.clamp(amount, 0, 1) - 1) * -1; + var fn = this.getMap().getView().getView2D().getResolutionForValueFunction(); + return fn(amount) +}; +ol.control.ZoomSlider.prototype.amountForResolution_ = function(res) { + var fn = this.getMap().getView().getView2D().getValueForResolutionFunction(); + var value = fn(res); + return(value - 1) * -1 +}; +ol.control.ZoomSlider.prototype.handleSliderChange_ = function(e) { + var map = this.getMap(); + var view = map.getView().getView2D(); + var resolution; + if(e.type === goog.fx.Dragger.EventType.DRAG) { + var amountDragged = this.amountDragged_(e.left, e.top); + resolution = this.resolutionForAmount_(amountDragged); + if(resolution !== this.currentResolution_) { + this.currentResolution_ = resolution; + view.setResolution(resolution) + } + }else { + goog.asserts.assert(goog.isDef(this.currentResolution_)); + map.beforeRender(ol.animation.zoom({resolution:this.currentResolution_, duration:ol.control.ZOOMSLIDER_ANIMATION_DURATION, easing:ol.easing.easeOut})); + resolution = view.constrainResolution(this.currentResolution_); + view.setResolution(resolution) + } +}; +goog.provide("ol.control.ZoomToExtent"); +goog.require("goog.asserts"); +goog.require("goog.dom"); +goog.require("goog.dom.TagName"); +goog.require("goog.events"); +goog.require("goog.events.EventType"); +goog.require("ol.control.Control"); +goog.require("ol.css"); +ol.control.ZoomToExtent = function(opt_options) { + var options = goog.isDef(opt_options) ? opt_options : {}; + this.extent_ = goog.isDef(options.extent) ? options.extent : null; + var className = goog.isDef(options.className) ? options.className : "ol-zoom-extent"; + var tipLabel = goog.isDef(options.tipLabel) ? options.tipLabel : "Fit to extent"; + var tip = goog.dom.createDom(goog.dom.TagName.SPAN, {"role":"tooltip"}, tipLabel); + var element = goog.dom.createDom(goog.dom.TagName.DIV, {"class":className + " " + ol.css.CLASS_UNSELECTABLE}); + var button = goog.dom.createDom(goog.dom.TagName.BUTTON, {"class":"ol-has-tooltip"}); + goog.dom.appendChild(button, tip); + goog.dom.appendChild(element, button); + goog.events.listen(button, [goog.events.EventType.TOUCHEND, goog.events.EventType.CLICK], this.handleZoomToExtent_, false, this); + goog.events.listen(button, [goog.events.EventType.MOUSEOUT, goog.events.EventType.FOCUSOUT], function() { + this.blur() + }, false); + goog.base(this, {element:element, target:options.target}) +}; +goog.inherits(ol.control.ZoomToExtent, ol.control.Control); +ol.control.ZoomToExtent.prototype.handleZoomToExtent_ = function(browserEvent) { + browserEvent.preventDefault(); + var map = this.getMap(); + var view = map.getView(); + goog.asserts.assert(goog.isDef(view)); + var view2D = view.getView2D(); + var extent = goog.isNull(this.extent_) ? view2D.getProjection().getExtent() : this.extent_; + view2D.fitExtent(extent, map.getSize()) +}; +goog.provide("ol.dom.Input"); +goog.provide("ol.dom.InputProperty"); +goog.require("goog.asserts"); +goog.require("goog.events"); +goog.require("goog.events.EventType"); +goog.require("ol.Object"); +ol.dom.InputProperty = {VALUE:"value", CHECKED:"checked"}; +ol.dom.Input = function(target) { + goog.base(this); + this.target_ = (target); + goog.events.listen(this.target_, [goog.events.EventType.CHANGE, goog.events.EventType.INPUT], this.handleInputChanged_, false, this); + goog.events.listen(this, ol.Object.getChangeEventType(ol.dom.InputProperty.VALUE), this.handleValueChanged_, false, this); + goog.events.listen(this, ol.Object.getChangeEventType(ol.dom.InputProperty.CHECKED), this.handleCheckedChanged_, false, this) +}; +goog.inherits(ol.dom.Input, ol.Object); +ol.dom.Input.prototype.getChecked = function() { + return(this.get(ol.dom.InputProperty.CHECKED)) +}; +goog.exportProperty(ol.dom.Input.prototype, "getChecked", ol.dom.Input.prototype.getChecked); +ol.dom.Input.prototype.getValue = function() { + return(this.get(ol.dom.InputProperty.VALUE)) +}; +goog.exportProperty(ol.dom.Input.prototype, "getValue", ol.dom.Input.prototype.getValue); +ol.dom.Input.prototype.setValue = function(value) { + this.set(ol.dom.InputProperty.VALUE, value) +}; +goog.exportProperty(ol.dom.Input.prototype, "setValue", ol.dom.Input.prototype.setValue); +ol.dom.Input.prototype.setChecked = function(checked) { + this.set(ol.dom.InputProperty.CHECKED, checked) +}; +goog.exportProperty(ol.dom.Input.prototype, "setChecked", ol.dom.Input.prototype.setChecked); +ol.dom.Input.prototype.handleInputChanged_ = function(browserEvent) { + goog.asserts.assert(browserEvent.currentTarget == this.target_); + var target = this.target_; + if(target.type === "checkbox" || target.type === "radio") { + this.setChecked(target.checked) + }else { + this.setValue(target.value) + } +}; +ol.dom.Input.prototype.handleCheckedChanged_ = function(event) { + this.target_.checked = (this.getChecked()) +}; +ol.dom.Input.prototype.handleValueChanged_ = function(event) { + this.target_.value = (this.getValue()) +}; +goog.provide("ol.ellipsoid.BESSEL1841"); +goog.require("ol.Ellipsoid"); +ol.ellipsoid.BESSEL1841 = new ol.Ellipsoid(6377397.155, 1 / 299.15281285); +goog.provide("ol.ellipsoid.WGS84"); +goog.require("ol.Ellipsoid"); +ol.ellipsoid.WGS84 = new ol.Ellipsoid(6378137, 1 / 298.257223563); +goog.provide("ol.format.Feature"); +goog.require("goog.functions"); +ol.format.Feature = function() { +}; +ol.format.Feature.prototype.getExtensions = goog.abstractMethod; +ol.format.Feature.prototype.getType = goog.abstractMethod; +ol.format.Feature.prototype.readFeature = goog.abstractMethod; +ol.format.Feature.prototype.readFeatures = goog.abstractMethod; +ol.format.Feature.prototype.readGeometry = goog.abstractMethod; +ol.format.Feature.prototype.readProjection = goog.abstractMethod; +ol.format.Feature.prototype.writeFeature = goog.abstractMethod; +ol.format.Feature.prototype.writeFeatures = goog.abstractMethod; +ol.format.Feature.prototype.writeGeometry = goog.abstractMethod; +goog.provide("ol.format.FormatType"); +ol.format.FormatType = {BINARY:"binary", JSON:"json", TEXT:"text", XML:"xml"}; +goog.provide("ol.format.BinaryFeature"); +goog.require("goog.asserts"); +goog.require("ol.BrowserFeature"); +goog.require("ol.binary.Buffer"); +goog.require("ol.format.Feature"); +goog.require("ol.format.FormatType"); +goog.require("ol.proj"); +ol.format.BinaryFeature = function() { + goog.base(this) +}; +goog.inherits(ol.format.BinaryFeature, ol.format.Feature); +ol.format.BinaryFeature.getBuffer_ = function(source) { + if(ol.BrowserFeature.HAS_ARRAY_BUFFER && source instanceof ArrayBuffer) { + return new ol.binary.Buffer(source) + }else { + if(goog.isString(source)) { + return new ol.binary.Buffer(source) + }else { + goog.asserts.fail(); + return null + } + } +}; +ol.format.BinaryFeature.prototype.getType = function() { + return ol.format.FormatType.BINARY +}; +ol.format.BinaryFeature.prototype.readFeature = function(source) { + return this.readFeatureFromBuffer(ol.format.BinaryFeature.getBuffer_(source)) +}; +ol.format.BinaryFeature.prototype.readFeatures = function(source) { + return this.readFeaturesFromBuffer(ol.format.BinaryFeature.getBuffer_(source)) +}; +ol.format.BinaryFeature.prototype.readFeatureFromBuffer = goog.abstractMethod; +ol.format.BinaryFeature.prototype.readFeaturesFromBuffer = goog.abstractMethod; +ol.format.BinaryFeature.prototype.readGeometry = function(source) { + return this.readGeometryFromBuffer(ol.format.BinaryFeature.getBuffer_(source)) +}; +ol.format.BinaryFeature.prototype.readGeometryFromBuffer = goog.abstractMethod; +ol.format.BinaryFeature.prototype.readProjection = function(source) { + return this.readProjectionFromBuffer(ol.format.BinaryFeature.getBuffer_(source)) +}; +ol.format.BinaryFeature.prototype.readProjectionFromBuffer = goog.abstractMethod; +goog.provide("goog.dom.xml"); +goog.require("goog.dom"); +goog.require("goog.dom.NodeType"); +goog.dom.xml.MAX_XML_SIZE_KB = 2 * 1024; +goog.dom.xml.MAX_ELEMENT_DEPTH = 256; +goog.dom.xml.createDocument = function(opt_rootTagName, opt_namespaceUri) { + if(opt_namespaceUri && !opt_rootTagName) { + throw Error("Can't create document with namespace and no root tag"); + } + if(document.implementation && document.implementation.createDocument) { + return document.implementation.createDocument(opt_namespaceUri || "", opt_rootTagName || "", null) + }else { + if(typeof ActiveXObject != "undefined") { + var doc = goog.dom.xml.createMsXmlDocument_(); + if(doc) { + if(opt_rootTagName) { + doc.appendChild(doc.createNode(goog.dom.NodeType.ELEMENT, opt_rootTagName, opt_namespaceUri || "")) + } + return doc + } + } + } + throw Error("Your browser does not support creating new documents"); +}; +goog.dom.xml.loadXml = function(xml) { + if(typeof DOMParser != "undefined") { + return(new DOMParser).parseFromString(xml, "application/xml") + }else { + if(typeof ActiveXObject != "undefined") { + var doc = goog.dom.xml.createMsXmlDocument_(); + doc.loadXML(xml); + return doc + } + } + throw Error("Your browser does not support loading xml documents"); +}; +goog.dom.xml.serialize = function(xml) { + if(typeof XMLSerializer != "undefined") { + return(new XMLSerializer).serializeToString(xml) + } + var text = xml.xml; + if(text) { + return text + } + throw Error("Your browser does not support serializing XML documents"); +}; +goog.dom.xml.selectSingleNode = function(node, path) { + if(typeof node.selectSingleNode != "undefined") { + var doc = goog.dom.getOwnerDocument(node); + if(typeof doc.setProperty != "undefined") { + doc.setProperty("SelectionLanguage", "XPath") + } + return node.selectSingleNode(path) + }else { + if(document.implementation.hasFeature("XPath", "3.0")) { + var doc = goog.dom.getOwnerDocument(node); + var resolver = doc.createNSResolver(doc.documentElement); + var result = doc.evaluate(path, node, resolver, XPathResult.FIRST_ORDERED_NODE_TYPE, null); + return result.singleNodeValue + } + } + return null +}; +goog.dom.xml.selectNodes = function(node, path) { + if(typeof node.selectNodes != "undefined") { + var doc = goog.dom.getOwnerDocument(node); + if(typeof doc.setProperty != "undefined") { + doc.setProperty("SelectionLanguage", "XPath") + } + return node.selectNodes(path) + }else { + if(document.implementation.hasFeature("XPath", "3.0")) { + var doc = goog.dom.getOwnerDocument(node); + var resolver = doc.createNSResolver(doc.documentElement); + var nodes = doc.evaluate(path, node, resolver, XPathResult.ORDERED_NODE_SNAPSHOT_TYPE, null); + var results = []; + var count = nodes.snapshotLength; + for(var i = 0;i < count;i++) { + results.push(nodes.snapshotItem(i)) + } + return results + }else { + return[] + } + } +}; +goog.dom.xml.setAttributes = function(element, attributes) { + for(var key in attributes) { + if(attributes.hasOwnProperty(key)) { + element.setAttribute(key, attributes[key]) + } + } +}; +goog.dom.xml.createMsXmlDocument_ = function() { + var doc = new ActiveXObject("MSXML2.DOMDocument"); + if(doc) { + doc.resolveExternals = false; + doc.validateOnParse = false; + try { + doc.setProperty("ProhibitDTD", true); + doc.setProperty("MaxXMLSize", goog.dom.xml.MAX_XML_SIZE_KB); + doc.setProperty("MaxElementDepth", goog.dom.xml.MAX_ELEMENT_DEPTH) + }catch(e) { + } + } + return doc +}; +goog.provide("ol.xml"); +goog.require("goog.array"); +goog.require("goog.asserts"); +goog.require("goog.dom.NodeType"); +goog.require("goog.dom.xml"); +goog.require("goog.object"); +goog.require("goog.userAgent"); +ol.xml.NodeStackItem; +ol.xml.Parser; +ol.xml.Serializer; +ol.xml.DOCUMENT = goog.dom.xml.createDocument(); +ol.xml.createElementNS_ = function(namespaceURI, qualifiedName) { + return ol.xml.DOCUMENT.createElementNS(namespaceURI, qualifiedName) +}; +ol.xml.createElementNSActiveX_ = function(namespaceURI, qualifiedName) { + if(goog.isNull(namespaceURI)) { + namespaceURI = "" + } + return ol.xml.DOCUMENT.createNode(1, qualifiedName, namespaceURI) +}; +ol.xml.createElementNS = document.implementation && document.implementation.createDocument ? ol.xml.createElementNS_ : ol.xml.createElementNSActiveX_; +ol.xml.getAllTextContent = function(node, normalizeWhitespace) { + return ol.xml.getAllTextContent_(node, normalizeWhitespace, []).join("") +}; +ol.xml.getAllTextContent_ = function(node, normalizeWhitespace, accumulator) { + if(node.nodeType == goog.dom.NodeType.CDATA_SECTION || node.nodeType == goog.dom.NodeType.TEXT) { + if(normalizeWhitespace) { + accumulator.push(String(node.nodeValue).replace(/(\r\n|\r|\n)/g, "")) + }else { + accumulator.push(node.nodeValue) + } + }else { + var n; + for(n = node.firstChild;!goog.isNull(n);n = n.nextSibling) { + ol.xml.getAllTextContent_(n, normalizeWhitespace, accumulator) + } + } + return accumulator +}; +ol.xml.getLocalName_ = function(node) { + return node.localName +}; +ol.xml.getLocalNameIE_ = function(node) { + var localName = node.localName; + if(goog.isDef(localName)) { + return localName + } + var baseName = node.baseName; + goog.asserts.assert(goog.isDefAndNotNull(baseName)); + return baseName +}; +ol.xml.getLocalName = goog.userAgent.IE ? ol.xml.getLocalNameIE_ : ol.xml.getLocalName_; +ol.xml.isDocument_ = function(value) { + return value instanceof Document +}; +ol.xml.isDocumentIE_ = function(value) { + return goog.isObject(value) && value.nodeType == goog.dom.NodeType.DOCUMENT +}; +ol.xml.isDocument = goog.userAgent.IE ? ol.xml.isDocumentIE_ : ol.xml.isDocument_; +ol.xml.isNode_ = function(value) { + return value instanceof Node +}; +ol.xml.isNodeIE_ = function(value) { + return goog.isObject(value) && goog.isDef(value.nodeType) +}; +ol.xml.isNode = goog.userAgent.IE ? ol.xml.isNodeIE_ : ol.xml.isNode_; +ol.xml.getAttributeNS_ = function(node, namespaceURI, name) { + return node.getAttributeNS(namespaceURI, name) || "" +}; +ol.xml.getAttributeNSActiveX_ = function(node, namespaceURI, name) { + var attributeValue = ""; + var attributeNode = ol.xml.getAttributeNodeNS(node, namespaceURI, name); + if(goog.isDef(attributeNode)) { + attributeValue = attributeNode.nodeValue + } + return attributeValue +}; +ol.xml.getAttributeNS = document.implementation && document.implementation.createDocument ? ol.xml.getAttributeNS_ : ol.xml.getAttributeNSActiveX_; +ol.xml.getAttributeNodeNS_ = function(node, namespaceURI, name) { + return node.getAttributeNodeNS(namespaceURI, name) +}; +ol.xml.getAttributeNodeNSActiveX_ = function(node, namespaceURI, name) { + var attributeNode = null; + var attributes = node.attributes; + var potentialNode, fullName; + for(var i = 0, len = attributes.length;i < len;++i) { + potentialNode = attributes[i]; + if(potentialNode.namespaceURI == namespaceURI) { + fullName = potentialNode.prefix ? potentialNode.prefix + ":" + name : name; + if(fullName == potentialNode.nodeName) { + attributeNode = potentialNode; + break + } + } + } + return attributeNode +}; +ol.xml.getAttributeNodeNS = document.implementation && document.implementation.createDocument ? ol.xml.getAttributeNodeNS_ : ol.xml.getAttributeNodeNSActiveX_; +ol.xml.setAttributeNS_ = function(node, namespaceURI, name, value) { + node.setAttributeNS(namespaceURI, name, value) +}; +ol.xml.setAttributeNSActiveX_ = function(node, namespaceURI, name, value) { + if(!goog.isNull(namespaceURI)) { + var attribute = node.ownerDocument.createNode(2, name, namespaceURI); + attribute.nodeValue = value; + node.setAttributeNode(attribute) + }else { + node.setAttribute(name, value) + } +}; +ol.xml.setAttributeNS = document.implementation && document.implementation.createDocument ? ol.xml.setAttributeNS_ : ol.xml.setAttributeNSActiveX_; +ol.xml.load = function(xml) { + return(new DOMParser).parseFromString(xml, "application/xml") +}; +ol.xml.makeArrayExtender = function(valueReader, opt_this) { + return function(node, objectStack) { + var value = valueReader.call(opt_this, node, objectStack); + if(goog.isDef(value)) { + goog.asserts.assert(goog.isArray(value)); + var array = (objectStack[objectStack.length - 1]); + goog.asserts.assert(goog.isArray(array)); + goog.array.extend(array, value) + } + } +}; +ol.xml.makeArrayPusher = function(valueReader, opt_this) { + return function(node, objectStack) { + var value = valueReader.call(opt_this, node, objectStack); + if(goog.isDef(value)) { + var array = objectStack[objectStack.length - 1]; + goog.asserts.assert(goog.isArray(array)); + array.push(value) + } + } +}; +ol.xml.makeReplacer = function(valueReader, opt_this) { + return function(node, objectStack) { + var value = valueReader.call(opt_this, node, objectStack); + if(goog.isDef(value)) { + objectStack[objectStack.length - 1] = value + } + } +}; +ol.xml.makeObjectPropertySetter = function(valueReader, opt_property, opt_this) { + goog.asserts.assert(goog.isDef(valueReader)); + return function(node, objectStack) { + var value = valueReader.call(opt_this, node, objectStack); + if(goog.isDef(value)) { + var object = (objectStack[objectStack.length - 1]); + var property = goog.isDef(opt_property) ? opt_property : node.localName; + goog.asserts.assert(goog.isObject(object)); + goog.object.set(object, property, value) + } + } +}; +ol.xml.makeParsersNS = function(namespaceURIs, parsers, opt_parsersNS) { + return(ol.xml.makeStructureNS(namespaceURIs, parsers, opt_parsersNS)) +}; +ol.xml.makeChildAppender = function(nodeWriter, opt_this) { + return function(node, value, objectStack) { + nodeWriter.call(opt_this, node, value, objectStack); + var parent = objectStack[objectStack.length - 1]; + goog.asserts.assert(goog.isObject(parent)); + var parentNode = parent.node; + goog.asserts.assert(ol.xml.isNode(parentNode) || ol.xml.isDocument(parentNode)); + parentNode.appendChild(node) + } +}; +ol.xml.makeArraySerializer = function(nodeWriter, opt_this) { + var serializersNS, nodeFactory; + return function(node, value, objectStack) { + if(!goog.isDef(serializersNS)) { + serializersNS = {}; + var serializers = {}; + goog.object.set(serializers, node.localName, nodeWriter); + goog.object.set(serializersNS, node.namespaceURI, serializers); + nodeFactory = ol.xml.makeSimpleNodeFactory(node.localName) + } + ol.xml.serialize(serializersNS, nodeFactory, value, objectStack) + } +}; +ol.xml.makeSimpleNodeFactory = function(opt_nodeName, opt_namespaceURI) { + var fixedNodeName = opt_nodeName; + return function(value, objectStack, opt_nodeName) { + var context = objectStack[objectStack.length - 1]; + var node = context.node; + goog.asserts.assert(ol.xml.isNode(node) || ol.xml.isDocument(node)); + var nodeName = fixedNodeName; + if(!goog.isDef(nodeName)) { + nodeName = opt_nodeName + } + var namespaceURI = opt_namespaceURI; + if(!goog.isDef(opt_namespaceURI)) { + namespaceURI = node.namespaceURI + } + goog.asserts.assert(goog.isDef(nodeName)); + return ol.xml.createElementNS(namespaceURI, nodeName) + } +}; +ol.xml.OBJECT_PROPERTY_NODE_FACTORY = ol.xml.makeSimpleNodeFactory(); +ol.xml.makeSequence = function(object, orderedKeys) { + var length = orderedKeys.length; + var sequence = new Array(length); + for(var i = 0;i < length;++i) { + sequence[i] = object[orderedKeys[i]] + } + return sequence +}; +ol.xml.makeStructureNS = function(namespaceURIs, structure, opt_structureNS) { + var structureNS = goog.isDef(opt_structureNS) ? opt_structureNS : {}; + var i, ii; + for(i = 0, ii = namespaceURIs.length;i < ii;++i) { + structureNS[namespaceURIs[i]] = structure + } + return structureNS +}; +ol.xml.parse = function(parsersNS, node, objectStack, opt_this) { + var n; + for(n = node.firstElementChild;!goog.isNull(n);n = n.nextElementSibling) { + var parsers = parsersNS[n.namespaceURI]; + if(goog.isDef(parsers)) { + var parser = parsers[n.localName]; + if(goog.isDef(parser)) { + parser.call(opt_this, n, objectStack) + } + } + } +}; +ol.xml.pushParseAndPop = function(object, parsersNS, node, objectStack, opt_this) { + objectStack.push(object); + ol.xml.parse(parsersNS, node, objectStack, opt_this); + return objectStack.pop() +}; +ol.xml.serialize = function(serializersNS, nodeFactory, values, objectStack, opt_keys, opt_this) { + var length = (goog.isDef(opt_keys) ? opt_keys : values).length; + var value, node; + for(var i = 0;i < length;++i) { + value = values[i]; + if(goog.isDef(value)) { + node = nodeFactory.call(opt_this, value, objectStack, goog.isDef(opt_keys) ? opt_keys[i] : undefined); + if(goog.isDef(node)) { + serializersNS[node.namespaceURI][node.localName].call(opt_this, node, value, objectStack) + } + } + } +}; +ol.xml.pushSerializeAndPop = function(object, serializersNS, nodeFactory, values, objectStack, opt_keys, opt_this) { + objectStack.push(object); + ol.xml.serialize(serializersNS, nodeFactory, values, objectStack, opt_keys, opt_this); + return objectStack.pop() +}; +goog.provide("ol.format.XMLFeature"); +goog.require("goog.array"); +goog.require("goog.asserts"); +goog.require("goog.dom.NodeType"); +goog.require("ol.format.Feature"); +goog.require("ol.format.FormatType"); +goog.require("ol.xml"); +ol.format.XMLFeature = function() { + goog.base(this) +}; +goog.inherits(ol.format.XMLFeature, ol.format.Feature); +ol.format.XMLFeature.prototype.getType = function() { + return ol.format.FormatType.XML +}; +ol.format.XMLFeature.prototype.readFeature = function(source) { + if(ol.xml.isDocument(source)) { + return this.readFeatureFromDocument((source)) + }else { + if(ol.xml.isNode(source)) { + return this.readFeatureFromNode((source)) + }else { + if(goog.isString(source)) { + var doc = ol.xml.load(source); + return this.readFeatureFromDocument(doc) + }else { + goog.asserts.fail(); + return null + } + } + } +}; +ol.format.XMLFeature.prototype.readFeatureFromDocument = function(doc) { + var features = this.readFeaturesFromDocument(doc); + if(features.length > 0) { + return features[0] + }else { + return null + } +}; +ol.format.XMLFeature.prototype.readFeatureFromNode = goog.abstractMethod; +ol.format.XMLFeature.prototype.readFeatures = function(source) { + if(ol.xml.isDocument(source)) { + return this.readFeaturesFromDocument((source)) + }else { + if(ol.xml.isNode(source)) { + return this.readFeaturesFromNode((source)) + }else { + if(goog.isString(source)) { + var doc = ol.xml.load(source); + return this.readFeaturesFromDocument(doc) + }else { + goog.asserts.fail(); + return[] + } + } + } +}; +ol.format.XMLFeature.prototype.readFeaturesFromDocument = function(doc) { + var features = []; + var n; + for(n = doc.firstChild;!goog.isNull(n);n = n.nextSibling) { + if(n.nodeType == goog.dom.NodeType.ELEMENT) { + goog.array.extend(features, this.readFeaturesFromNode(n)) + } + } + return features +}; +ol.format.XMLFeature.prototype.readFeaturesFromNode = goog.abstractMethod; +ol.format.XMLFeature.prototype.readGeometry = function(source) { + if(ol.xml.isDocument(source)) { + return this.readGeometryFromDocument((source)) + }else { + if(ol.xml.isNode(source)) { + return this.readGeometryFromNode((source)) + }else { + if(goog.isString(source)) { + var doc = ol.xml.load(source); + return this.readGeometryFromDocument(doc) + }else { + goog.asserts.fail(); + return null + } + } + } +}; +ol.format.XMLFeature.prototype.readGeometryFromDocument = goog.abstractMethod; +ol.format.XMLFeature.prototype.readGeometryFromNode = goog.abstractMethod; +ol.format.XMLFeature.prototype.readProjection = function(source) { + if(ol.xml.isDocument(source)) { + return this.readProjectionFromDocument((source)) + }else { + if(ol.xml.isNode(source)) { + return this.readProjectionFromNode((source)) + }else { + if(goog.isString(source)) { + var doc = ol.xml.load(source); + return this.readProjectionFromDocument(doc) + }else { + goog.asserts.fail(); + return null + } + } + } +}; +ol.format.XMLFeature.prototype.readProjectionFromDocument = goog.abstractMethod; +ol.format.XMLFeature.prototype.readProjectionFromNode = goog.abstractMethod; +ol.format.XMLFeature.prototype.writeFeature = function(feature) { + return this.writeFeatureNode(feature) +}; +ol.format.XMLFeature.prototype.writeFeatureNode = goog.abstractMethod; +ol.format.XMLFeature.prototype.writeFeatures = function(features) { + return this.writeFeaturesNode(features) +}; +ol.format.XMLFeature.prototype.writeFeaturesNode = goog.abstractMethod; +ol.format.XMLFeature.prototype.writeGeometry = function(geometry) { + return this.writeGeometryNode(geometry) +}; +ol.format.XMLFeature.prototype.writeGeometryNode = goog.abstractMethod; +goog.provide("ol.format.XSD"); +goog.require("goog.asserts"); +goog.require("goog.string"); +goog.require("ol.xml"); +ol.format.XSD.NAMESPACE_URI = "http://www.w3.org/2001/XMLSchema"; +ol.format.XSD.readBoolean = function(node) { + var s = ol.xml.getAllTextContent(node, false); + return ol.format.XSD.readBooleanString(s) +}; +ol.format.XSD.readBooleanString = function(string) { + var m = /^\s*(true|1)|(false|0)\s*$/.exec(string); + if(m) { + return goog.isDef(m[1]) || false + }else { + return undefined + } +}; +ol.format.XSD.readDateTime = function(node) { + var s = ol.xml.getAllTextContent(node, false); + var re = /^\s*(\d{4})-(\d{2})-(\d{2})T(\d{2}):(\d{2}):(\d{2})(Z|(?:([+\-])(\d{2})(?::(\d{2}))?))\s*$/; + var m = re.exec(s); + if(m) { + var year = parseInt(m[1], 10); + var month = parseInt(m[2], 10) - 1; + var day = parseInt(m[3], 10); + var hour = parseInt(m[4], 10); + var minute = parseInt(m[5], 10); + var second = parseInt(m[6], 10); + var dateTime = Date.UTC(year, month, day, hour, minute, second) / 1E3; + if(m[7] != "Z") { + var sign = m[8] == "-" ? -1 : 1; + dateTime += sign * 60 * parseInt(m[9], 10); + if(goog.isDef(m[10])) { + dateTime += sign * 60 * 60 * parseInt(m[10], 10) + } + } + return dateTime + }else { + return undefined + } +}; +ol.format.XSD.readDecimal = function(node) { + var s = ol.xml.getAllTextContent(node, false); + return ol.format.XSD.readDecimalString(s) +}; +ol.format.XSD.readDecimalString = function(string) { + var m = /^\s*([+\-]?\d*\.?\d+(?:e[+\-]?\d+)?)\s*$/i.exec(string); + if(m) { + return parseFloat(m[1]) + }else { + return undefined + } +}; +ol.format.XSD.readNonNegativeInteger = function(node) { + var s = ol.xml.getAllTextContent(node, false); + return ol.format.XSD.readNonNegativeIntegerString(s) +}; +ol.format.XSD.readNonNegativeIntegerString = function(string) { + var m = /^\s*(\d+)\s*$/.exec(string); + if(m) { + return parseInt(m[1], 10) + }else { + return undefined + } +}; +ol.format.XSD.readString = function(node) { + var s = ol.xml.getAllTextContent(node, false); + return goog.string.trim(s) +}; +ol.format.XSD.writeDateTimeTextNode = function(node, dateTime) { + var date = new Date(dateTime * 1E3); + var string = date.getUTCFullYear() + "-" + goog.string.padNumber(date.getUTCMonth() + 1, 2) + "-" + goog.string.padNumber(date.getUTCDate(), 2) + "T" + goog.string.padNumber(date.getUTCHours(), 2) + ":" + goog.string.padNumber(date.getUTCMinutes(), 2) + ":" + goog.string.padNumber(date.getUTCSeconds(), 2) + "Z"; + node.appendChild(ol.xml.DOCUMENT.createTextNode(string)) +}; +ol.format.XSD.writeDecimalTextNode = function(node, decimal) { + var string = decimal.toPrecision(); + node.appendChild(ol.xml.DOCUMENT.createTextNode(string)) +}; +ol.format.XSD.writeNonNegativeIntegerTextNode = function(node, nonNegativeInteger) { + goog.asserts.assert(nonNegativeInteger >= 0); + goog.asserts.assert(nonNegativeInteger == (nonNegativeInteger | 0)); + var string = nonNegativeInteger.toString(); + node.appendChild(ol.xml.DOCUMENT.createTextNode(string)) +}; +ol.format.XSD.writeStringTextNode = function(node, string) { + node.appendChild(ol.xml.DOCUMENT.createTextNode(string)) +}; +goog.provide("ol.format.GML"); +goog.require("goog.array"); +goog.require("goog.asserts"); +goog.require("goog.dom"); +goog.require("goog.dom.NodeType"); +goog.require("goog.object"); +goog.require("goog.string"); +goog.require("ol.Feature"); +goog.require("ol.extent"); +goog.require("ol.format.XMLFeature"); +goog.require("ol.format.XSD"); +goog.require("ol.geom.Geometry"); +goog.require("ol.geom.LineString"); +goog.require("ol.geom.LinearRing"); +goog.require("ol.geom.MultiLineString"); +goog.require("ol.geom.MultiPoint"); +goog.require("ol.geom.MultiPolygon"); +goog.require("ol.geom.Point"); +goog.require("ol.geom.Polygon"); +goog.require("ol.proj"); +goog.require("ol.xml"); +ol.format.GML = function(opt_options) { + var options = (goog.isDef(opt_options) ? opt_options : {}); + this.featureType_ = options.featureType; + this.featureNS_ = options.featureNS; + this.srsName_ = options.srsName; + this.surface_ = goog.isDef(options.surface) ? options.surface : false; + this.curve_ = goog.isDef(options.curve) ? options.curve : false; + this.multiCurve_ = goog.isDef(options.multiCurve) ? options.multiCurve : true; + this.multiSurface_ = goog.isDef(options.multiSurface) ? options.multiSurface : true; + this.schemaLocation_ = goog.isDef(options.schemaLocation) ? options.schemaLocation : ol.format.GML.schemaLocation_; + goog.base(this) +}; +goog.inherits(ol.format.GML, ol.format.XMLFeature); +ol.format.GML.schemaLocation_ = "http://www.opengis.net/gml " + "http://schemas.opengis.net/gml/3.1.1/profiles/gmlsfProfile/" + "1.0.0/gmlsf.xsd"; +ol.format.GML.readFeatures_ = function(node, objectStack) { + goog.asserts.assert(node.nodeType == goog.dom.NodeType.ELEMENT); + var localName = ol.xml.getLocalName(node); + var context = objectStack[0]; + goog.asserts.assert(goog.isObject(context)); + var featureType = goog.object.get(context, "featureType"); + var features; + if(localName == "FeatureCollection") { + features = ol.xml.pushParseAndPop(null, ol.format.GML.FEATURE_COLLECTION_PARSERS_, node, objectStack) + }else { + if(localName == "featureMembers") { + var parsers = {}; + var parsersNS = {}; + parsers[featureType] = ol.xml.makeArrayPusher(ol.format.GML.readFeature_); + parsersNS[goog.object.get(context, "featureNS")] = parsers; + features = ol.xml.pushParseAndPop([], parsersNS, node, objectStack) + } + } + if(!goog.isDef(features)) { + features = [] + } + return features +}; +ol.format.GML.FEATURE_COLLECTION_PARSERS_ = {"http://www.opengis.net/gml":{"featureMembers":ol.xml.makeReplacer(ol.format.GML.readFeatures_)}}; +ol.format.GML.readGeometry_ = function(node, objectStack) { + var context = objectStack[0]; + goog.asserts.assert(goog.isObject(context)); + goog.object.set(context, "srsName", node.firstElementChild.getAttribute("srsName")); + var geometry = ol.xml.pushParseAndPop((null), ol.format.GML.GEOMETRY_PARSERS_, node, objectStack); + if(goog.isDefAndNotNull(geometry)) { + return geometry + }else { + return undefined + } +}; +ol.format.GML.readFeature_ = function(node, objectStack) { + var n; + var fid = node.getAttribute("fid") || ol.xml.getAttributeNS(node, "http://www.opengis.net/gml", "id"); + var values = {}, geometryName; + for(n = node.firstElementChild;!goog.isNull(n);n = n.nextElementSibling) { + if(n.childNodes.length === 0 || n.childNodes.length === 1 && n.firstChild.nodeType === 3) { + var value = ol.xml.getAllTextContent(n, false); + if(goog.string.isEmpty(value)) { + value = undefined + } + values[ol.xml.getLocalName(n)] = value + }else { + geometryName = ol.xml.getLocalName(n); + values[geometryName] = ol.format.GML.readGeometry_(n, objectStack) + } + } + var feature = new ol.Feature(values); + if(goog.isDef(geometryName)) { + feature.setGeometryName(geometryName) + } + if(fid) { + feature.setId(fid) + } + return feature +}; +ol.format.GML.readPoint_ = function(node, objectStack) { + goog.asserts.assert(node.nodeType == goog.dom.NodeType.ELEMENT); + goog.asserts.assert(node.localName == "Point"); + var flatCoordinates = ol.format.GML.readFlatCoordinatesFromNode_(node, objectStack); + if(goog.isDefAndNotNull(flatCoordinates)) { + var point = new ol.geom.Point(null); + goog.asserts.assert(flatCoordinates.length == 3); + point.setFlatCoordinates(ol.geom.GeometryLayout.XYZ, flatCoordinates); + return point + } +}; +ol.format.GML.readMultiPoint_ = function(node, objectStack) { + goog.asserts.assert(node.nodeType == goog.dom.NodeType.ELEMENT); + goog.asserts.assert(node.localName == "MultiPoint"); + var coordinates = ol.xml.pushParseAndPop(([]), ol.format.GML.MULTIPOINT_PARSERS_, node, objectStack); + if(goog.isDef(coordinates)) { + return new ol.geom.MultiPoint(coordinates) + }else { + return undefined + } +}; +ol.format.GML.readMultiLineString_ = function(node, objectStack) { + goog.asserts.assert(node.nodeType == goog.dom.NodeType.ELEMENT); + goog.asserts.assert(node.localName == "MultiLineString"); + var lineStrings = ol.xml.pushParseAndPop(([]), ol.format.GML.MULTILINESTRING_PARSERS_, node, objectStack); + if(goog.isDef(lineStrings)) { + var multiLineString = new ol.geom.MultiLineString(null); + multiLineString.setLineStrings(lineStrings); + return multiLineString + }else { + return undefined + } +}; +ol.format.GML.readMultiCurve_ = function(node, objectStack) { + goog.asserts.assert(node.nodeType == goog.dom.NodeType.ELEMENT); + goog.asserts.assert(node.localName == "MultiCurve"); + var lineStrings = ol.xml.pushParseAndPop(([]), ol.format.GML.MULTICURVE_PARSERS_, node, objectStack); + if(goog.isDef(lineStrings)) { + var multiLineString = new ol.geom.MultiLineString(null); + multiLineString.setLineStrings(lineStrings); + return multiLineString + }else { + return undefined + } +}; +ol.format.GML.readMultiSurface_ = function(node, objectStack) { + goog.asserts.assert(node.nodeType == goog.dom.NodeType.ELEMENT); + goog.asserts.assert(node.localName == "MultiSurface"); + var polygons = ol.xml.pushParseAndPop(([]), ol.format.GML.MULTISURFACE_PARSERS_, node, objectStack); + if(goog.isDef(polygons)) { + var multiPolygon = new ol.geom.MultiPolygon(null); + multiPolygon.setPolygons(polygons); + return multiPolygon + }else { + return undefined + } +}; +ol.format.GML.readMultiPolygon_ = function(node, objectStack) { + goog.asserts.assert(node.nodeType == goog.dom.NodeType.ELEMENT); + goog.asserts.assert(node.localName == "MultiPolygon"); + var polygons = ol.xml.pushParseAndPop(([]), ol.format.GML.MULTIPOLYGON_PARSERS_, node, objectStack); + if(goog.isDef(polygons)) { + var multiPolygon = new ol.geom.MultiPolygon(null); + multiPolygon.setPolygons(polygons); + return multiPolygon + }else { + return undefined + } +}; +ol.format.GML.pointMemberParser_ = function(node, objectStack) { + goog.asserts.assert(node.nodeType == goog.dom.NodeType.ELEMENT); + goog.asserts.assert(node.localName == "pointMember" || node.localName == "pointMembers"); + ol.xml.parse(ol.format.GML.POINTMEMBER_PARSERS_, node, objectStack) +}; +ol.format.GML.lineStringMemberParser_ = function(node, objectStack) { + goog.asserts.assert(node.nodeType == goog.dom.NodeType.ELEMENT); + goog.asserts.assert(node.localName == "lineStringMember" || node.localName == "lineStringMembers"); + ol.xml.parse(ol.format.GML.LINESTRINGMEMBER_PARSERS_, node, objectStack) +}; +ol.format.GML.curveMemberParser_ = function(node, objectStack) { + goog.asserts.assert(node.nodeType == goog.dom.NodeType.ELEMENT); + goog.asserts.assert(node.localName == "curveMember" || node.localName == "curveMembers"); + ol.xml.parse(ol.format.GML.CURVEMEMBER_PARSERS_, node, objectStack) +}; +ol.format.GML.surfaceMemberParser_ = function(node, objectStack) { + goog.asserts.assert(node.nodeType == goog.dom.NodeType.ELEMENT); + goog.asserts.assert(node.localName == "surfaceMember" || node.localName == "surfaceMembers"); + ol.xml.parse(ol.format.GML.SURFACEMEMBER_PARSERS_, node, objectStack) +}; +ol.format.GML.polygonMemberParser_ = function(node, objectStack) { + goog.asserts.assert(node.nodeType == goog.dom.NodeType.ELEMENT); + goog.asserts.assert(node.localName == "polygonMember" || node.localName == "polygonMembers"); + ol.xml.parse(ol.format.GML.POLYGONMEMBER_PARSERS_, node, objectStack) +}; +ol.format.GML.readLineString_ = function(node, objectStack) { + goog.asserts.assert(node.nodeType == goog.dom.NodeType.ELEMENT); + goog.asserts.assert(node.localName == "LineString"); + var flatCoordinates = ol.format.GML.readFlatCoordinatesFromNode_(node, objectStack); + if(goog.isDefAndNotNull(flatCoordinates)) { + var lineString = new ol.geom.LineString(null); + lineString.setFlatCoordinates(ol.geom.GeometryLayout.XYZ, flatCoordinates); + return lineString + }else { + return undefined + } +}; +ol.format.GML.readPatch_ = function(node, objectStack) { + goog.asserts.assert(node.nodeType == goog.dom.NodeType.ELEMENT); + goog.asserts.assert(node.localName == "patches"); + return ol.xml.pushParseAndPop(([null]), ol.format.GML.PATCHES_PARSERS_, node, objectStack) +}; +ol.format.GML.readSegment_ = function(node, objectStack) { + goog.asserts.assert(node.nodeType == goog.dom.NodeType.ELEMENT); + goog.asserts.assert(node.localName == "segments"); + return ol.xml.pushParseAndPop(([null]), ol.format.GML.SEGMENTS_PARSERS_, node, objectStack) +}; +ol.format.GML.readPolygonPatch_ = function(node, objectStack) { + goog.asserts.assert(node.nodeType == goog.dom.NodeType.ELEMENT); + goog.asserts.assert(node.localName == "PolygonPatch"); + return ol.xml.pushParseAndPop(([null]), ol.format.GML.FLAT_LINEAR_RINGS_PARSERS_, node, objectStack) +}; +ol.format.GML.readLineStringSegment_ = function(node, objectStack) { + goog.asserts.assert(node.nodeType == goog.dom.NodeType.ELEMENT); + goog.asserts.assert(node.localName == "LineStringSegment"); + return ol.xml.pushParseAndPop(([null]), ol.format.GML.GEOMETRY_FLAT_COORDINATES_PARSERS_, node, objectStack) +}; +ol.format.GML.interiorParser_ = function(node, objectStack) { + goog.asserts.assert(node.nodeType == goog.dom.NodeType.ELEMENT); + goog.asserts.assert(node.localName == "interior"); + var flatLinearRing = ol.xml.pushParseAndPop((undefined), ol.format.GML.RING_PARSERS_, node, objectStack); + if(goog.isDef(flatLinearRing)) { + var flatLinearRings = (objectStack[objectStack.length - 1]); + goog.asserts.assert(goog.isArray(flatLinearRings)); + goog.asserts.assert(flatLinearRings.length > 0); + flatLinearRings.push(flatLinearRing) + } +}; +ol.format.GML.exteriorParser_ = function(node, objectStack) { + goog.asserts.assert(node.nodeType == goog.dom.NodeType.ELEMENT); + goog.asserts.assert(node.localName == "exterior"); + var flatLinearRing = ol.xml.pushParseAndPop((undefined), ol.format.GML.RING_PARSERS_, node, objectStack); + if(goog.isDef(flatLinearRing)) { + var flatLinearRings = (objectStack[objectStack.length - 1]); + goog.asserts.assert(goog.isArray(flatLinearRings)); + goog.asserts.assert(flatLinearRings.length > 0); + flatLinearRings[0] = flatLinearRing + } +}; +ol.format.GML.readFlatLinearRing_ = function(node, objectStack) { + goog.asserts.assert(node.nodeType == goog.dom.NodeType.ELEMENT); + goog.asserts.assert(node.localName == "LinearRing"); + var ring = ol.xml.pushParseAndPop((null), ol.format.GML.GEOMETRY_FLAT_COORDINATES_PARSERS_, node, objectStack); + if(goog.isDefAndNotNull(ring)) { + return ring + }else { + return undefined + } +}; +ol.format.GML.readLinearRing_ = function(node, objectStack) { + goog.asserts.assert(node.nodeType == goog.dom.NodeType.ELEMENT); + goog.asserts.assert(node.localName == "LinearRing"); + var flatCoordinates = ol.format.GML.readFlatCoordinatesFromNode_(node, objectStack); + if(goog.isDef(flatCoordinates)) { + var ring = new ol.geom.LinearRing(null); + ring.setFlatCoordinates(ol.geom.GeometryLayout.XYZ, flatCoordinates); + return ring + }else { + return undefined + } +}; +ol.format.GML.readPolygon_ = function(node, objectStack) { + goog.asserts.assert(node.nodeType == goog.dom.NodeType.ELEMENT); + goog.asserts.assert(node.localName == "Polygon"); + var flatLinearRings = ol.xml.pushParseAndPop(([null]), ol.format.GML.FLAT_LINEAR_RINGS_PARSERS_, node, objectStack); + if(goog.isDef(flatLinearRings) && !goog.isNull(flatLinearRings[0])) { + var polygon = new ol.geom.Polygon(null); + var flatCoordinates = flatLinearRings[0]; + var ends = [flatCoordinates.length]; + var i, ii; + for(i = 1, ii = flatLinearRings.length;i < ii;++i) { + goog.array.extend(flatCoordinates, flatLinearRings[i]); + ends.push(flatCoordinates.length) + } + polygon.setFlatCoordinates(ol.geom.GeometryLayout.XYZ, flatCoordinates, ends); + return polygon + }else { + return undefined + } +}; +ol.format.GML.readSurface_ = function(node, objectStack) { + goog.asserts.assert(node.nodeType == goog.dom.NodeType.ELEMENT); + goog.asserts.assert(node.localName == "Surface"); + var flatLinearRings = ol.xml.pushParseAndPop(([null]), ol.format.GML.SURFACE_PARSERS_, node, objectStack); + if(goog.isDef(flatLinearRings) && !goog.isNull(flatLinearRings[0])) { + var polygon = new ol.geom.Polygon(null); + var flatCoordinates = flatLinearRings[0]; + var ends = [flatCoordinates.length]; + var i, ii; + for(i = 1, ii = flatLinearRings.length;i < ii;++i) { + goog.array.extend(flatCoordinates, flatLinearRings[i]); + ends.push(flatCoordinates.length) + } + polygon.setFlatCoordinates(ol.geom.GeometryLayout.XYZ, flatCoordinates, ends); + return polygon + }else { + return undefined + } +}; +ol.format.GML.readCurve_ = function(node, objectStack) { + goog.asserts.assert(node.nodeType == goog.dom.NodeType.ELEMENT); + goog.asserts.assert(node.localName == "Curve"); + var flatCoordinates = ol.xml.pushParseAndPop(([null]), ol.format.GML.CURVE_PARSERS_, node, objectStack); + if(goog.isDef(flatCoordinates)) { + var lineString = new ol.geom.LineString(null); + lineString.setFlatCoordinates(ol.geom.GeometryLayout.XYZ, flatCoordinates); + return lineString + }else { + return undefined + } +}; +ol.format.GML.readEnvelope_ = function(node, objectStack) { + goog.asserts.assert(node.nodeType == goog.dom.NodeType.ELEMENT); + goog.asserts.assert(node.localName == "Envelope"); + var flatCoordinates = ol.xml.pushParseAndPop(([null]), ol.format.GML.ENVELOPE_PARSERS_, node, objectStack); + return ol.extent.createOrUpdate(flatCoordinates[1][0], flatCoordinates[1][1], flatCoordinates[2][0], flatCoordinates[2][1]) +}; +ol.format.GML.readFlatCoordinatesFromNode_ = function(node, objectStack) { + goog.asserts.assert(node.nodeType == goog.dom.NodeType.ELEMENT); + return(ol.xml.pushParseAndPop(null, ol.format.GML.GEOMETRY_FLAT_COORDINATES_PARSERS_, node, objectStack)) +}; +ol.format.GML.readFlatPos_ = function(node, objectStack) { + var s = ol.xml.getAllTextContent(node, false).replace(/^\s*|\s*$/g, ""); + var flatCoordinates = goog.array.map(s.split(/\s+/), parseFloat); + var context = objectStack[0]; + goog.asserts.assert(goog.isObject(context)); + var containerSrs = goog.object.get(context, "srsName"); + var axisOrientation = "enu"; + if(!goog.isNull(containerSrs)) { + var proj = ol.proj.get(containerSrs); + axisOrientation = proj.getAxisOrientation() + } + if(axisOrientation === "neu") { + flatCoordinates = flatCoordinates.reverse() + } + var len = flatCoordinates.length; + if(len == 2) { + flatCoordinates.push(0) + } + if(len === 0) { + return undefined + } + return flatCoordinates +}; +ol.format.GML.readFlatPosList_ = function(node, objectStack) { + var s = ol.xml.getAllTextContent(node, false).replace(/^\s*|\s*$/g, ""); + var context = objectStack[0]; + goog.asserts.assert(goog.isObject(context)); + var containerSrs = goog.object.get(context, "srsName"); + var containerDimension = node.parentNode.getAttribute("srsDimension"); + var axisOrientation = "enu"; + if(!goog.isNull(containerSrs)) { + var proj = ol.proj.get(containerSrs); + axisOrientation = proj.getAxisOrientation() + } + var coords = s.split(/\s+/); + var dim = 2; + if(!goog.isNull(node.getAttribute("srsDimension"))) { + dim = ol.format.XSD.readNonNegativeIntegerString(node.getAttribute("srsDimension")) + }else { + if(!goog.isNull(node.getAttribute("dimension"))) { + dim = ol.format.XSD.readNonNegativeIntegerString(node.getAttribute("dimension")) + }else { + if(!goog.isNull(containerDimension)) { + dim = ol.format.XSD.readNonNegativeIntegerString(containerDimension) + } + } + } + var x, y, z; + var flatCoordinates = []; + for(var i = 0, ii = coords.length;i < ii;i += dim) { + x = parseFloat(coords[i]); + y = parseFloat(coords[i + 1]); + z = dim === 3 ? parseFloat(coords[i + 2]) : 0; + if(axisOrientation.substr(0, 2) === "en") { + flatCoordinates.push(x, y, z) + }else { + flatCoordinates.push(y, x, z) + } + } + return flatCoordinates +}; +ol.format.GML.GEOMETRY_PARSERS_ = {"http://www.opengis.net/gml":{"Point":ol.xml.makeReplacer(ol.format.GML.readPoint_), "MultiPoint":ol.xml.makeReplacer(ol.format.GML.readMultiPoint_), "LineString":ol.xml.makeReplacer(ol.format.GML.readLineString_), "MultiLineString":ol.xml.makeReplacer(ol.format.GML.readMultiLineString_), "LinearRing":ol.xml.makeReplacer(ol.format.GML.readLinearRing_), "Polygon":ol.xml.makeReplacer(ol.format.GML.readPolygon_), "MultiPolygon":ol.xml.makeReplacer(ol.format.GML.readMultiPolygon_), +"Surface":ol.xml.makeReplacer(ol.format.GML.readSurface_), "MultiSurface":ol.xml.makeReplacer(ol.format.GML.readMultiSurface_), "Curve":ol.xml.makeReplacer(ol.format.GML.readCurve_), "MultiCurve":ol.xml.makeReplacer(ol.format.GML.readMultiCurve_), "Envelope":ol.xml.makeReplacer(ol.format.GML.readEnvelope_)}}; +ol.format.GML.GEOMETRY_FLAT_COORDINATES_PARSERS_ = {"http://www.opengis.net/gml":{"pos":ol.xml.makeReplacer(ol.format.GML.readFlatPos_), "posList":ol.xml.makeReplacer(ol.format.GML.readFlatPosList_)}}; +ol.format.GML.FLAT_LINEAR_RINGS_PARSERS_ = {"http://www.opengis.net/gml":{"interior":ol.format.GML.interiorParser_, "exterior":ol.format.GML.exteriorParser_}}; +ol.format.GML.MULTIPOINT_PARSERS_ = {"http://www.opengis.net/gml":{"pointMember":ol.xml.makeArrayPusher(ol.format.GML.pointMemberParser_), "pointMembers":ol.xml.makeArrayPusher(ol.format.GML.pointMemberParser_)}}; +ol.format.GML.MULTILINESTRING_PARSERS_ = {"http://www.opengis.net/gml":{"lineStringMember":ol.xml.makeArrayPusher(ol.format.GML.lineStringMemberParser_), "lineStringMembers":ol.xml.makeArrayPusher(ol.format.GML.lineStringMemberParser_)}}; +ol.format.GML.MULTICURVE_PARSERS_ = {"http://www.opengis.net/gml":{"curveMember":ol.xml.makeArrayPusher(ol.format.GML.curveMemberParser_), "curveMembers":ol.xml.makeArrayPusher(ol.format.GML.curveMemberParser_)}}; +ol.format.GML.MULTISURFACE_PARSERS_ = {"http://www.opengis.net/gml":{"surfaceMember":ol.xml.makeArrayPusher(ol.format.GML.surfaceMemberParser_), "surfaceMembers":ol.xml.makeArrayPusher(ol.format.GML.surfaceMemberParser_)}}; +ol.format.GML.MULTIPOLYGON_PARSERS_ = {"http://www.opengis.net/gml":{"polygonMember":ol.xml.makeArrayPusher(ol.format.GML.polygonMemberParser_), "polygonMembers":ol.xml.makeArrayPusher(ol.format.GML.polygonMemberParser_)}}; +ol.format.GML.POINTMEMBER_PARSERS_ = {"http://www.opengis.net/gml":{"Point":ol.xml.makeArrayPusher(ol.format.GML.readFlatCoordinatesFromNode_)}}; +ol.format.GML.LINESTRINGMEMBER_PARSERS_ = {"http://www.opengis.net/gml":{"LineString":ol.xml.makeArrayPusher(ol.format.GML.readLineString_)}}; +ol.format.GML.CURVEMEMBER_PARSERS_ = {"http://www.opengis.net/gml":{"LineString":ol.xml.makeArrayPusher(ol.format.GML.readLineString_), "Curve":ol.xml.makeArrayPusher(ol.format.GML.readCurve_)}}; +ol.format.GML.SURFACEMEMBER_PARSERS_ = {"http://www.opengis.net/gml":{"Polygon":ol.xml.makeArrayPusher(ol.format.GML.readPolygon_), "Surface":ol.xml.makeArrayPusher(ol.format.GML.readSurface_)}}; +ol.format.GML.POLYGONMEMBER_PARSERS_ = {"http://www.opengis.net/gml":{"Polygon":ol.xml.makeArrayPusher(ol.format.GML.readPolygon_)}}; +ol.format.GML.SURFACE_PARSERS_ = {"http://www.opengis.net/gml":{"patches":ol.xml.makeReplacer(ol.format.GML.readPatch_)}}; +ol.format.GML.CURVE_PARSERS_ = {"http://www.opengis.net/gml":{"segments":ol.xml.makeReplacer(ol.format.GML.readSegment_)}}; +ol.format.GML.ENVELOPE_PARSERS_ = {"http://www.opengis.net/gml":{"lowerCorner":ol.xml.makeArrayPusher(ol.format.GML.readFlatPosList_), "upperCorner":ol.xml.makeArrayPusher(ol.format.GML.readFlatPosList_)}}; +ol.format.GML.PATCHES_PARSERS_ = {"http://www.opengis.net/gml":{"PolygonPatch":ol.xml.makeReplacer(ol.format.GML.readPolygonPatch_)}}; +ol.format.GML.SEGMENTS_PARSERS_ = {"http://www.opengis.net/gml":{"LineStringSegment":ol.xml.makeReplacer(ol.format.GML.readLineStringSegment_)}}; +ol.format.GML.RING_PARSERS_ = {"http://www.opengis.net/gml":{"LinearRing":ol.xml.makeReplacer(ol.format.GML.readFlatLinearRing_)}}; +ol.format.GML.prototype.readGeometryFromNode = function(node) { + var geometry = ol.format.GML.readGeometry_(node, [{}]); + return goog.isDef(geometry) ? geometry : null +}; +ol.format.GML.prototype.readFeaturesFromNode = function(node) { + var objectStack = [{"featureType":this.featureType_, "featureNS":this.featureNS_}]; + return ol.format.GML.readFeatures_(node, objectStack) +}; +ol.format.GML.writePos_ = function(node, value, objectStack) { + var context = objectStack[objectStack.length - 1]; + goog.asserts.assert(goog.isObject(context)); + var srsName = goog.object.get(context, "srsName"); + var axisOrientation = "enu"; + if(goog.isDefAndNotNull(srsName)) { + axisOrientation = ol.proj.get(srsName).getAxisOrientation() + } + var point = value.getCoordinates(); + var coords; + if(axisOrientation.substr(0, 2) === "en") { + coords = point[0] + " " + point[1] + }else { + coords = point[1] + " " + point[0] + } + ol.format.XSD.writeStringTextNode(node, coords) +}; +ol.format.GML.getCoords_ = function(point, opt_srsName) { + var axisOrientation = "enu"; + if(goog.isDefAndNotNull(opt_srsName)) { + axisOrientation = ol.proj.get(opt_srsName).getAxisOrientation() + } + return axisOrientation.substr(0, 2) === "en" ? point[0] + " " + point[1] : point[1] + " " + point[0] +}; +ol.format.GML.writePosList_ = function(node, value, objectStack) { + var context = objectStack[objectStack.length - 1]; + goog.asserts.assert(goog.isObject(context)); + var srsName = goog.object.get(context, "srsName"); + var points = value.getCoordinates(); + var len = points.length; + var parts = new Array(len); + var point; + for(var i = 0;i < len;++i) { + point = points[i]; + parts[i] = ol.format.GML.getCoords_(point, srsName) + } + ol.format.XSD.writeStringTextNode(node, parts.join(" ")) +}; +ol.format.GML.writePoint_ = function(node, geometry, objectStack) { + var context = objectStack[objectStack.length - 1]; + goog.asserts.assert(goog.isObject(context)); + var srsName = goog.object.get(context, "srsName"); + if(goog.isDefAndNotNull(srsName)) { + node.setAttribute("srsName", srsName) + } + var pos = ol.xml.createElementNS(node.namespaceURI, "pos"); + node.appendChild(pos); + ol.format.GML.writePos_(pos, geometry, objectStack) +}; +ol.format.GML.writeLinearRing_ = function(node, geometry, objectStack) { + var context = objectStack[objectStack.length - 1]; + goog.asserts.assert(goog.isObject(context)); + var srsName = goog.object.get(context, "srsName"); + if(goog.isDefAndNotNull(srsName)) { + node.setAttribute("srsName", srsName) + } + var posList = ol.xml.createElementNS(node.namespaceURI, "posList"); + node.appendChild(posList); + ol.format.GML.writePosList_(posList, geometry, objectStack) +}; +ol.format.GML.RING_NODE_FACTORY_ = function(value, objectStack, opt_nodeName) { + var context = objectStack[objectStack.length - 1]; + var parentNode = context.node; + goog.asserts.assert(goog.isObject(context)); + var exteriorWritten = goog.object.get(context, "exteriorWritten"); + if(!goog.isDef(exteriorWritten)) { + goog.object.set(context, "exteriorWritten", true) + } + return ol.xml.createElementNS(parentNode.namespaceURI, goog.isDef(exteriorWritten) ? "interior" : "exterior") +}; +ol.format.GML.writeSurfaceOrPolygon_ = function(node, geometry, objectStack) { + var context = objectStack[objectStack.length - 1]; + goog.asserts.assert(goog.isObject(context)); + var srsName = goog.object.get(context, "srsName"); + if(node.nodeName !== "PolygonPatch" && goog.isDefAndNotNull(srsName)) { + node.setAttribute("srsName", srsName) + } + if(node.nodeName === "Polygon" || node.nodeName === "PolygonPatch") { + var rings = geometry.getLinearRings(); + ol.xml.pushSerializeAndPop({node:node, srsName:srsName}, ol.format.GML.RING_SERIALIZERS_, ol.format.GML.RING_NODE_FACTORY_, rings, objectStack) + }else { + if(node.nodeName === "Surface") { + var patches = ol.xml.createElementNS(node.namespaceURI, "patches"); + node.appendChild(patches); + ol.format.GML.writeSurfacePatches_(patches, geometry, objectStack) + } + } +}; +ol.format.GML.writeCurveOrLineString_ = function(node, geometry, objectStack) { + var context = objectStack[objectStack.length - 1]; + goog.asserts.assert(goog.isObject(context)); + var srsName = goog.object.get(context, "srsName"); + if(node.nodeName !== "LineStringSegment" && goog.isDefAndNotNull(srsName)) { + node.setAttribute("srsName", srsName) + } + if(node.nodeName === "LineString" || node.nodeName === "LineStringSegment") { + var posList = ol.xml.createElementNS(node.namespaceURI, "posList"); + node.appendChild(posList); + ol.format.GML.writePosList_(posList, geometry, objectStack) + }else { + if(node.nodeName === "Curve") { + var segments = ol.xml.createElementNS(node.namespaceURI, "segments"); + node.appendChild(segments); + ol.format.GML.writeCurveSegments_(segments, geometry, objectStack) + } + } +}; +ol.format.GML.writeMultiSurfaceOrPolygon_ = function(node, geometry, objectStack) { + var context = objectStack[objectStack.length - 1]; + goog.asserts.assert(goog.isObject(context)); + var srsName = goog.object.get(context, "srsName"); + var surface = goog.object.get(context, "surface"); + if(goog.isDefAndNotNull(srsName)) { + node.setAttribute("srsName", srsName) + } + var polygons = geometry.getPolygons(); + ol.xml.pushSerializeAndPop({node:node, srsName:srsName, surface:surface}, ol.format.GML.SURFACEORPOLYGONMEMBER_SERIALIZERS_, ol.format.GML.MULTIGEOMETRY_MEMBER_NODE_FACTORY_, polygons, objectStack) +}; +ol.format.GML.writeMultiPoint_ = function(node, geometry, objectStack) { + var context = objectStack[objectStack.length - 1]; + goog.asserts.assert(goog.isObject(context)); + var srsName = goog.object.get(context, "srsName"); + if(goog.isDefAndNotNull(srsName)) { + node.setAttribute("srsName", srsName) + } + var points = geometry.getPoints(); + ol.xml.pushSerializeAndPop({node:node, srsName:srsName}, ol.format.GML.POINTMEMBER_SERIALIZERS_, ol.xml.makeSimpleNodeFactory("pointMember"), points, objectStack) +}; +ol.format.GML.writeMultiCurveOrLineString_ = function(node, geometry, objectStack) { + var context = objectStack[objectStack.length - 1]; + goog.asserts.assert(goog.isObject(context)); + var srsName = goog.object.get(context, "srsName"); + var curve = goog.object.get(context, "curve"); + if(goog.isDefAndNotNull(srsName)) { + node.setAttribute("srsName", srsName) + } + var lines = geometry.getLineStrings(); + ol.xml.pushSerializeAndPop({node:node, srsName:srsName, curve:curve}, ol.format.GML.LINESTRINGORCURVEMEMBER_SERIALIZERS_, ol.format.GML.MULTIGEOMETRY_MEMBER_NODE_FACTORY_, lines, objectStack) +}; +ol.format.GML.writeRing_ = function(node, ring, objectStack) { + var linearRing = ol.xml.createElementNS(node.namespaceURI, "LinearRing"); + node.appendChild(linearRing); + ol.format.GML.writeLinearRing_(linearRing, ring, objectStack) +}; +ol.format.GML.writeSurfaceOrPolygonMember_ = function(node, polygon, objectStack) { + var context = objectStack[objectStack.length - 1]; + goog.asserts.assert(goog.isObject(context)); + var child = ol.format.GML.GEOMETRY_NODE_FACTORY_(polygon, objectStack); + if(goog.isDef(child)) { + node.appendChild(child); + ol.format.GML.writeSurfaceOrPolygon_(child, polygon, objectStack) + } +}; +ol.format.GML.writePointMember_ = function(node, point, objectStack) { + var child = ol.xml.createElementNS(node.namespaceURI, "Point"); + node.appendChild(child); + ol.format.GML.writePoint_(child, point, objectStack) +}; +ol.format.GML.writeLineStringOrCurveMember_ = function(node, line, objectStack) { + var context = objectStack[objectStack.length - 1]; + goog.asserts.assert(goog.isObject(context)); + var child = ol.format.GML.GEOMETRY_NODE_FACTORY_(line, objectStack); + if(goog.isDef(child)) { + node.appendChild(child); + ol.format.GML.writeCurveOrLineString_(child, line, objectStack) + } +}; +ol.format.GML.writeSurfacePatches_ = function(node, polygon, objectStack) { + var child = ol.xml.createElementNS(node.namespaceURI, "PolygonPatch"); + node.appendChild(child); + ol.format.GML.writeSurfaceOrPolygon_(child, polygon, objectStack) +}; +ol.format.GML.writeCurveSegments_ = function(node, line, objectStack) { + var child = ol.xml.createElementNS(node.namespaceURI, "LineStringSegment"); + node.appendChild(child); + ol.format.GML.writeCurveOrLineString_(child, line, objectStack) +}; +ol.format.GML.writeGeometry_ = function(node, geometry, objectStack) { + var context = objectStack[objectStack.length - 1]; + goog.asserts.assert(goog.isObject(context)); + var item = goog.object.clone(context); + item.node = node; + ol.xml.pushSerializeAndPop((item), ol.format.GML.GEOMETRY_SERIALIZERS_, ol.format.GML.GEOMETRY_NODE_FACTORY_, [geometry], objectStack) +}; +ol.format.GML.writeFeature_ = function(node, feature, objectStack) { + var fid = feature.getId(); + if(goog.isDef(fid)) { + node.setAttribute("fid", fid) + } + var context = objectStack[objectStack.length - 1]; + goog.asserts.assert(goog.isObject(context)); + var featureNS = goog.object.get(context, "featureNS"); + var geometryName = feature.getGeometryName(); + if(!goog.isDef(context.serializers)) { + context.serializers = {}; + context.serializers[featureNS] = {} + } + var properties = feature.getProperties(); + var keys = [], values = []; + for(var key in properties) { + keys.push(key); + values.push(properties[key]); + if(key == geometryName) { + if(!(key in context.serializers[featureNS])) { + context.serializers[featureNS][key] = ol.xml.makeChildAppender(ol.format.GML.writeGeometry_) + } + }else { + if(!(key in context.serializers[featureNS])) { + context.serializers[featureNS][key] = ol.xml.makeChildAppender(ol.format.XSD.writeStringTextNode) + } + } + } + var item = goog.object.clone(context); + item.node = node; + ol.xml.pushSerializeAndPop((item), context.serializers, ol.xml.OBJECT_PROPERTY_NODE_FACTORY, values, objectStack, keys) +}; +ol.format.GML.writeFeatureMembers_ = function(node, features, objectStack) { + var context = objectStack[objectStack.length - 1]; + goog.asserts.assert(goog.isObject(context)); + var featureType = goog.object.get(context, "featureType"); + var featureNS = goog.object.get(context, "featureNS"); + var serializers = {}; + serializers[featureNS] = {}; + serializers[featureNS][featureType] = ol.xml.makeChildAppender(ol.format.GML.writeFeature_); + var item = goog.object.clone(context); + item.node = node; + ol.xml.pushSerializeAndPop((item), serializers, ol.xml.makeSimpleNodeFactory(featureType, featureNS), features, objectStack) +}; +ol.format.GML.SURFACEORPOLYGONMEMBER_SERIALIZERS_ = {"http://www.opengis.net/gml":{"surfaceMember":ol.xml.makeChildAppender(ol.format.GML.writeSurfaceOrPolygonMember_), "polygonMember":ol.xml.makeChildAppender(ol.format.GML.writeSurfaceOrPolygonMember_)}}; +ol.format.GML.POINTMEMBER_SERIALIZERS_ = {"http://www.opengis.net/gml":{"pointMember":ol.xml.makeChildAppender(ol.format.GML.writePointMember_)}}; +ol.format.GML.LINESTRINGORCURVEMEMBER_SERIALIZERS_ = {"http://www.opengis.net/gml":{"lineStringMember":ol.xml.makeChildAppender(ol.format.GML.writeLineStringOrCurveMember_), "curveMember":ol.xml.makeChildAppender(ol.format.GML.writeLineStringOrCurveMember_)}}; +ol.format.GML.RING_SERIALIZERS_ = {"http://www.opengis.net/gml":{"exterior":ol.xml.makeChildAppender(ol.format.GML.writeRing_), "interior":ol.xml.makeChildAppender(ol.format.GML.writeRing_)}}; +ol.format.GML.GEOMETRY_SERIALIZERS_ = {"http://www.opengis.net/gml":{"Curve":ol.xml.makeChildAppender(ol.format.GML.writeCurveOrLineString_), "MultiCurve":ol.xml.makeChildAppender(ol.format.GML.writeMultiCurveOrLineString_), "Point":ol.xml.makeChildAppender(ol.format.GML.writePoint_), "MultiPoint":ol.xml.makeChildAppender(ol.format.GML.writeMultiPoint_), "LineString":ol.xml.makeChildAppender(ol.format.GML.writeCurveOrLineString_), "MultiLineString":ol.xml.makeChildAppender(ol.format.GML.writeMultiCurveOrLineString_), +"LinearRing":ol.xml.makeChildAppender(ol.format.GML.writeLinearRing_), "Polygon":ol.xml.makeChildAppender(ol.format.GML.writeSurfaceOrPolygon_), "MultiPolygon":ol.xml.makeChildAppender(ol.format.GML.writeMultiSurfaceOrPolygon_), "Surface":ol.xml.makeChildAppender(ol.format.GML.writeSurfaceOrPolygon_), "MultiSurface":ol.xml.makeChildAppender(ol.format.GML.writeMultiSurfaceOrPolygon_)}}; +ol.format.GML.MULTIGEOMETRY_TO_MEMBER_NODENAME_ = {"MultiLineString":"lineStringMember", "MultiCurve":"curveMember", "MultiPolygon":"polygonMember", "MultiSurface":"surfaceMember"}; +ol.format.GML.MULTIGEOMETRY_MEMBER_NODE_FACTORY_ = function(value, objectStack, opt_nodeName) { + var parentNode = objectStack[objectStack.length - 1].node; + goog.asserts.assert(ol.xml.isNode(parentNode)); + return ol.xml.createElementNS("http://www.opengis.net/gml", ol.format.GML.MULTIGEOMETRY_TO_MEMBER_NODENAME_[parentNode.nodeName]) +}; +ol.format.GML.GEOMETRY_NODE_FACTORY_ = function(value, objectStack, opt_nodeName) { + var context = objectStack[objectStack.length - 1]; + goog.asserts.assert(goog.isObject(context)); + var multiSurface = goog.object.get(context, "multiSurface"); + var surface = goog.object.get(context, "surface"); + var curve = goog.object.get(context, "curve"); + var multiCurve = goog.object.get(context, "multiCurve"); + goog.asserts.assertInstanceof(value, ol.geom.Geometry); + var parentNode = objectStack[objectStack.length - 1].node; + goog.asserts.assert(ol.xml.isNode(parentNode)); + var nodeName = value.getType(); + if(nodeName === "MultiPolygon" && multiSurface === true) { + nodeName = "MultiSurface" + }else { + if(nodeName === "Polygon" && surface === true) { + nodeName = "Surface" + }else { + if(nodeName === "LineString" && curve === true) { + nodeName = "Curve" + }else { + if(nodeName === "MultiLineString" && multiCurve === true) { + nodeName = "MultiCurve" + } + } + } + } + return ol.xml.createElementNS("http://www.opengis.net/gml", nodeName) +}; +ol.format.GML.prototype.writeGeometryNode = function(geometry) { + var geom = ol.xml.createElementNS("http://www.opengis.net/gml", "geom"); + var context = {node:geom, srsName:this.srsName_, curve:this.curve_, surface:this.surface_, multiSurface:this.multiSurface_, multiCurve:this.multiCurve_}; + ol.xml.pushSerializeAndPop((context), ol.format.GML.GEOMETRY_SERIALIZERS_, ol.format.GML.GEOMETRY_NODE_FACTORY_, [geometry], []); + return geom +}; +ol.format.GML.prototype.writeFeaturesNode = function(features) { + var node = ol.xml.createElementNS("http://www.opengis.net/gml", "featureMembers"); + ol.xml.setAttributeNS(node, "http://www.w3.org/2001/XMLSchema-instance", "xsi:schemaLocation", this.schemaLocation_); + var context = {srsName:this.srsName_, curve:this.curve_, surface:this.surface_, multiSurface:this.multiSurface_, multiCurve:this.multiCurve_, featureNS:this.featureNS_, featureType:this.featureType_}; + ol.format.GML.writeFeatureMembers_(node, features, [context]); + return node +}; +goog.provide("ol.format.GPX"); +goog.provide("ol.format.GPX.V1_1"); +goog.require("goog.array"); +goog.require("goog.asserts"); +goog.require("goog.dom.NodeType"); +goog.require("goog.object"); +goog.require("ol.Feature"); +goog.require("ol.format.XMLFeature"); +goog.require("ol.format.XSD"); +goog.require("ol.geom.LineString"); +goog.require("ol.geom.MultiLineString"); +goog.require("ol.geom.Point"); +goog.require("ol.proj"); +goog.require("ol.xml"); +ol.format.GPX = function() { + goog.base(this) +}; +goog.inherits(ol.format.GPX, ol.format.XMLFeature); +ol.format.GPX.NAMESPACE_URIS_ = [null, "http://www.topografix.com/GPX/1/0", "http://www.topografix.com/GPX/1/1"]; +ol.format.GPX.appendCoordinate_ = function(flatCoordinates, node, values) { + goog.asserts.assert(node.nodeType == goog.dom.NodeType.ELEMENT); + flatCoordinates.push(parseFloat(node.getAttribute("lon")), parseFloat(node.getAttribute("lat"))); + if(goog.object.containsKey(values, "ele")) { + flatCoordinates.push((goog.object.get(values, "ele"))); + goog.object.remove(values, "ele") + }else { + flatCoordinates.push(0) + } + if(goog.object.containsKey(values, "time")) { + flatCoordinates.push((goog.object.get(values, "time"))); + goog.object.remove(values, "time") + }else { + flatCoordinates.push(0) + } + return flatCoordinates +}; +ol.format.GPX.parseLink_ = function(node, objectStack) { + goog.asserts.assert(node.nodeType == goog.dom.NodeType.ELEMENT); + goog.asserts.assert(node.localName == "link"); + var values = (objectStack[objectStack.length - 1]); + var href = node.getAttribute("href"); + if(!goog.isNull(href)) { + goog.object.set(values, "link", href) + } + ol.xml.parse(ol.format.GPX.LINK_PARSERS_, node, objectStack) +}; +ol.format.GPX.parseRtePt_ = function(node, objectStack) { + goog.asserts.assert(node.nodeType == goog.dom.NodeType.ELEMENT); + goog.asserts.assert(node.localName == "rtept"); + var values = ol.xml.pushParseAndPop({}, ol.format.GPX.RTEPT_PARSERS_, node, objectStack); + if(goog.isDef(values)) { + var rteValues = (objectStack[objectStack.length - 1]); + var flatCoordinates = (goog.object.get(rteValues, "flatCoordinates")); + ol.format.GPX.appendCoordinate_(flatCoordinates, node, values) + } +}; +ol.format.GPX.parseTrkPt_ = function(node, objectStack) { + goog.asserts.assert(node.nodeType == goog.dom.NodeType.ELEMENT); + goog.asserts.assert(node.localName == "trkpt"); + var values = ol.xml.pushParseAndPop({}, ol.format.GPX.TRKPT_PARSERS_, node, objectStack); + if(goog.isDef(values)) { + var trkValues = (objectStack[objectStack.length - 1]); + var flatCoordinates = (goog.object.get(trkValues, "flatCoordinates")); + ol.format.GPX.appendCoordinate_(flatCoordinates, node, values) + } +}; +ol.format.GPX.parseTrkSeg_ = function(node, objectStack) { + goog.asserts.assert(node.nodeType == goog.dom.NodeType.ELEMENT); + goog.asserts.assert(node.localName == "trkseg"); + var values = (objectStack[objectStack.length - 1]); + ol.xml.parse(ol.format.GPX.TRKSEG_PARSERS_, node, objectStack); + var flatCoordinates = (goog.object.get(values, "flatCoordinates")); + var ends = (goog.object.get(values, "ends")); + ends.push(flatCoordinates.length) +}; +ol.format.GPX.readRte_ = function(node, objectStack) { + goog.asserts.assert(node.nodeType == goog.dom.NodeType.ELEMENT); + goog.asserts.assert(node.localName == "rte"); + var values = ol.xml.pushParseAndPop({"flatCoordinates":[]}, ol.format.GPX.RTE_PARSERS_, node, objectStack); + if(!goog.isDef(values)) { + return undefined + } + var flatCoordinates = (goog.object.get(values, "flatCoordinates")); + goog.object.remove(values, "flatCoordinates"); + var geometry = new ol.geom.LineString(null); + geometry.setFlatCoordinates(ol.geom.GeometryLayout.XYZM, flatCoordinates); + var feature = new ol.Feature(geometry); + feature.setValues(values); + return feature +}; +ol.format.GPX.readTrk_ = function(node, objectStack) { + goog.asserts.assert(node.nodeType == goog.dom.NodeType.ELEMENT); + goog.asserts.assert(node.localName == "trk"); + var values = ol.xml.pushParseAndPop({"flatCoordinates":[], "ends":[]}, ol.format.GPX.TRK_PARSERS_, node, objectStack); + if(!goog.isDef(values)) { + return undefined + } + var flatCoordinates = (goog.object.get(values, "flatCoordinates")); + goog.object.remove(values, "flatCoordinates"); + var ends = (goog.object.get(values, "ends")); + goog.object.remove(values, "ends"); + var geometry = new ol.geom.MultiLineString(null); + geometry.setFlatCoordinates(ol.geom.GeometryLayout.XYZM, flatCoordinates, ends); + var feature = new ol.Feature(geometry); + feature.setValues(values); + return feature +}; +ol.format.GPX.readWpt_ = function(node, objectStack) { + goog.asserts.assert(node.nodeType == goog.dom.NodeType.ELEMENT); + goog.asserts.assert(node.localName == "wpt"); + var values = ol.xml.pushParseAndPop({}, ol.format.GPX.WPT_PARSERS_, node, objectStack); + if(!goog.isDef(values)) { + return undefined + } + var coordinates = ol.format.GPX.appendCoordinate_([], node, values); + var geometry = new ol.geom.Point(coordinates, ol.geom.GeometryLayout.XYZM); + var feature = new ol.Feature(geometry); + feature.setValues(values); + return feature +}; +ol.format.GPX.FEATURE_READER_ = {"rte":ol.format.GPX.readRte_, "trk":ol.format.GPX.readTrk_, "wpt":ol.format.GPX.readWpt_}; +ol.format.GPX.GPX_PARSERS_ = ol.xml.makeParsersNS(ol.format.GPX.NAMESPACE_URIS_, {"rte":ol.xml.makeArrayPusher(ol.format.GPX.readRte_), "trk":ol.xml.makeArrayPusher(ol.format.GPX.readTrk_), "wpt":ol.xml.makeArrayPusher(ol.format.GPX.readWpt_)}); +ol.format.GPX.LINK_PARSERS_ = ol.xml.makeParsersNS(ol.format.GPX.NAMESPACE_URIS_, {"text":ol.xml.makeObjectPropertySetter(ol.format.XSD.readString, "linkText"), "type":ol.xml.makeObjectPropertySetter(ol.format.XSD.readString, "linkType")}); +ol.format.GPX.RTE_PARSERS_ = ol.xml.makeParsersNS(ol.format.GPX.NAMESPACE_URIS_, {"name":ol.xml.makeObjectPropertySetter(ol.format.XSD.readString), "cmt":ol.xml.makeObjectPropertySetter(ol.format.XSD.readString), "desc":ol.xml.makeObjectPropertySetter(ol.format.XSD.readString), "src":ol.xml.makeObjectPropertySetter(ol.format.XSD.readString), "link":ol.format.GPX.parseLink_, "number":ol.xml.makeObjectPropertySetter(ol.format.XSD.readNonNegativeInteger), "type":ol.xml.makeObjectPropertySetter(ol.format.XSD.readString), +"rtept":ol.format.GPX.parseRtePt_}); +ol.format.GPX.RTEPT_PARSERS_ = ol.xml.makeParsersNS(ol.format.GPX.NAMESPACE_URIS_, {"ele":ol.xml.makeObjectPropertySetter(ol.format.XSD.readDecimal), "time":ol.xml.makeObjectPropertySetter(ol.format.XSD.readDateTime)}); +ol.format.GPX.TRK_PARSERS_ = ol.xml.makeParsersNS(ol.format.GPX.NAMESPACE_URIS_, {"name":ol.xml.makeObjectPropertySetter(ol.format.XSD.readString), "cmt":ol.xml.makeObjectPropertySetter(ol.format.XSD.readString), "desc":ol.xml.makeObjectPropertySetter(ol.format.XSD.readString), "src":ol.xml.makeObjectPropertySetter(ol.format.XSD.readString), "link":ol.format.GPX.parseLink_, "number":ol.xml.makeObjectPropertySetter(ol.format.XSD.readNonNegativeInteger), "type":ol.xml.makeObjectPropertySetter(ol.format.XSD.readString), +"trkseg":ol.format.GPX.parseTrkSeg_}); +ol.format.GPX.TRKSEG_PARSERS_ = ol.xml.makeParsersNS(ol.format.GPX.NAMESPACE_URIS_, {"trkpt":ol.format.GPX.parseTrkPt_}); +ol.format.GPX.TRKPT_PARSERS_ = ol.xml.makeParsersNS(ol.format.GPX.NAMESPACE_URIS_, {"ele":ol.xml.makeObjectPropertySetter(ol.format.XSD.readDecimal), "time":ol.xml.makeObjectPropertySetter(ol.format.XSD.readDateTime)}); +ol.format.GPX.WPT_PARSERS_ = ol.xml.makeParsersNS(ol.format.GPX.NAMESPACE_URIS_, {"ele":ol.xml.makeObjectPropertySetter(ol.format.XSD.readDecimal), "time":ol.xml.makeObjectPropertySetter(ol.format.XSD.readDateTime), "magvar":ol.xml.makeObjectPropertySetter(ol.format.XSD.readDecimal), "geoidheight":ol.xml.makeObjectPropertySetter(ol.format.XSD.readDecimal), "name":ol.xml.makeObjectPropertySetter(ol.format.XSD.readString), "cmt":ol.xml.makeObjectPropertySetter(ol.format.XSD.readString), "desc":ol.xml.makeObjectPropertySetter(ol.format.XSD.readString), +"src":ol.xml.makeObjectPropertySetter(ol.format.XSD.readString), "link":ol.format.GPX.parseLink_, "sym":ol.xml.makeObjectPropertySetter(ol.format.XSD.readString), "type":ol.xml.makeObjectPropertySetter(ol.format.XSD.readString), "fix":ol.xml.makeObjectPropertySetter(ol.format.XSD.readString), "sat":ol.xml.makeObjectPropertySetter(ol.format.XSD.readNonNegativeInteger), "hdop":ol.xml.makeObjectPropertySetter(ol.format.XSD.readDecimal), "vdop":ol.xml.makeObjectPropertySetter(ol.format.XSD.readDecimal), +"pdop":ol.xml.makeObjectPropertySetter(ol.format.XSD.readDecimal), "ageofdgpsdata":ol.xml.makeObjectPropertySetter(ol.format.XSD.readDecimal), "dgpsid":ol.xml.makeObjectPropertySetter(ol.format.XSD.readNonNegativeInteger)}); +ol.format.GPX.prototype.readFeatureFromNode = function(node) { + goog.asserts.assert(node.nodeType == goog.dom.NodeType.ELEMENT); + if(goog.array.indexOf(ol.format.GPX.NAMESPACE_URIS_, node.namespaceURI) == -1) { + return null + } + var featureReader = ol.format.GPX.FEATURE_READER_[node.localName]; + if(!goog.isDef(featureReader)) { + return null + } + var feature = featureReader(node, []); + if(!goog.isDef(feature)) { + return null + } + return feature +}; +ol.format.GPX.prototype.readFeaturesFromNode = function(node) { + goog.asserts.assert(node.nodeType == goog.dom.NodeType.ELEMENT); + if(goog.array.indexOf(ol.format.GPX.NAMESPACE_URIS_, node.namespaceURI) == -1) { + return[] + } + if(node.localName == "gpx") { + var features = ol.xml.pushParseAndPop(([]), ol.format.GPX.GPX_PARSERS_, node, []); + if(goog.isDef(features)) { + return features + }else { + return[] + } + } + return[] +}; +ol.format.GPX.prototype.readProjectionFromDocument = function(doc) { + return ol.proj.get("EPSG:4326") +}; +ol.format.GPX.prototype.readProjectionFromNode = function(node) { + return ol.proj.get("EPSG:4326") +}; +ol.format.GPX.writeLink_ = function(node, value, objectStack) { + node.setAttribute("href", value); + var context = objectStack[objectStack.length - 1]; + goog.asserts.assert(goog.isObject(context)); + var properties = goog.object.get(context, "properties"); + var link = [goog.object.get(properties, "linkText"), goog.object.get(properties, "linkType")]; + ol.xml.pushSerializeAndPop(({node:node}), ol.format.GPX.LINK_SERIALIZERS_, ol.xml.OBJECT_PROPERTY_NODE_FACTORY, link, objectStack, ol.format.GPX.LINK_SEQUENCE_) +}; +ol.format.GPX.writeWptType_ = function(node, coordinate, objectStack) { + var context = objectStack[objectStack.length - 1]; + goog.asserts.assert(goog.isObject(context)); + var parentNode = context.node; + goog.asserts.assert(ol.xml.isNode(parentNode)); + var namespaceURI = parentNode.namespaceURI; + var properties = goog.object.get(context, "properties"); + ol.xml.setAttributeNS(node, null, "lat", coordinate[1]); + ol.xml.setAttributeNS(node, null, "lon", coordinate[0]); + var geometryLayout = goog.object.get(context, "geometryLayout"); + switch(geometryLayout) { + case ol.geom.GeometryLayout.XYZM: + if(coordinate[3] !== 0) { + goog.object.set(properties, "time", coordinate[3]) + } + ; + case ol.geom.GeometryLayout.XYZ: + if(coordinate[2] !== 0) { + goog.object.set(properties, "ele", coordinate[2]) + } + break; + case ol.geom.GeometryLayout.XYM: + if(coordinate[2] !== 0) { + goog.object.set(properties, "time", coordinate[2]) + } + } + var orderedKeys = ol.format.GPX.WPT_TYPE_SEQUENCE_[namespaceURI]; + var values = ol.xml.makeSequence(properties, orderedKeys); + ol.xml.pushSerializeAndPop(({node:node, "properties":properties}), ol.format.GPX.WPT_TYPE_SERIALIZERS_, ol.xml.OBJECT_PROPERTY_NODE_FACTORY, values, objectStack, orderedKeys) +}; +ol.format.GPX.writeRte_ = function(node, feature, objectStack) { + var properties = feature.getProperties(); + var context = {node:node, "properties":properties}; + var geometry = feature.getGeometry(); + if(goog.isDef(geometry)) { + goog.asserts.assertInstanceof(geometry, ol.geom.LineString); + goog.object.set(context, "geometryLayout", geometry.getLayout()); + goog.object.set(properties, "rtept", geometry.getCoordinates()) + } + var parentNode = objectStack[objectStack.length - 1].node; + var orderedKeys = ol.format.GPX.RTE_SEQUENCE_[parentNode.namespaceURI]; + var values = ol.xml.makeSequence(properties, orderedKeys); + ol.xml.pushSerializeAndPop((context), ol.format.GPX.RTE_SERIALIZERS_, ol.xml.OBJECT_PROPERTY_NODE_FACTORY, values, objectStack, orderedKeys) +}; +ol.format.GPX.writeTrk_ = function(node, feature, objectStack) { + var properties = feature.getProperties(); + var context = {node:node, "properties":properties}; + var geometry = feature.getGeometry(); + if(goog.isDef(geometry)) { + goog.asserts.assertInstanceof(geometry, ol.geom.MultiLineString); + goog.object.set(properties, "trkseg", geometry.getLineStrings()) + } + var parentNode = objectStack[objectStack.length - 1].node; + var orderedKeys = ol.format.GPX.TRK_SEQUENCE_[parentNode.namespaceURI]; + var values = ol.xml.makeSequence(properties, orderedKeys); + ol.xml.pushSerializeAndPop((context), ol.format.GPX.TRK_SERIALIZERS_, ol.xml.OBJECT_PROPERTY_NODE_FACTORY, values, objectStack, orderedKeys) +}; +ol.format.GPX.writeTrkSeg_ = function(node, lineString, objectStack) { + var context = {node:node, "geometryLayout":lineString.getLayout(), "properties":{}}; + ol.xml.pushSerializeAndPop((context), ol.format.GPX.TRKSEG_SERIALIZERS_, ol.format.GPX.TRKSEG_NODE_FACTORY_, lineString.getCoordinates(), objectStack) +}; +ol.format.GPX.writeWpt_ = function(node, feature, objectStack) { + var context = objectStack[objectStack.length - 1]; + goog.asserts.assert(goog.isObject(context)); + goog.object.set(context, "properties", feature.getProperties()); + var geometry = feature.getGeometry(); + if(goog.isDef(geometry)) { + goog.asserts.assertInstanceof(geometry, ol.geom.Point); + goog.object.set(context, "geometryLayout", geometry.getLayout()); + ol.format.GPX.writeWptType_(node, geometry.getCoordinates(), objectStack) + } +}; +ol.format.GPX.LINK_SEQUENCE_ = ["text", "type"]; +ol.format.GPX.LINK_SERIALIZERS_ = ol.xml.makeStructureNS(ol.format.GPX.NAMESPACE_URIS_, {"text":ol.xml.makeChildAppender(ol.format.XSD.writeStringTextNode), "type":ol.xml.makeChildAppender(ol.format.XSD.writeStringTextNode)}); +ol.format.GPX.RTE_SEQUENCE_ = ol.xml.makeStructureNS(ol.format.GPX.NAMESPACE_URIS_, ["name", "cmt", "desc", "src", "link", "number", "type", "rtept"]); +ol.format.GPX.RTE_SERIALIZERS_ = ol.xml.makeStructureNS(ol.format.GPX.NAMESPACE_URIS_, {"name":ol.xml.makeChildAppender(ol.format.XSD.writeStringTextNode), "cmt":ol.xml.makeChildAppender(ol.format.XSD.writeStringTextNode), "desc":ol.xml.makeChildAppender(ol.format.XSD.writeStringTextNode), "src":ol.xml.makeChildAppender(ol.format.XSD.writeStringTextNode), "link":ol.xml.makeChildAppender(ol.format.GPX.writeLink_), "number":ol.xml.makeChildAppender(ol.format.XSD.writeNonNegativeIntegerTextNode), "type":ol.xml.makeChildAppender(ol.format.XSD.writeStringTextNode), +"rtept":ol.xml.makeArraySerializer(ol.xml.makeChildAppender(ol.format.GPX.writeWptType_))}); +ol.format.GPX.TRK_SEQUENCE_ = ol.xml.makeStructureNS(ol.format.GPX.NAMESPACE_URIS_, ["name", "cmt", "desc", "src", "link", "number", "type", "trkseg"]); +ol.format.GPX.TRK_SERIALIZERS_ = ol.xml.makeStructureNS(ol.format.GPX.NAMESPACE_URIS_, {"name":ol.xml.makeChildAppender(ol.format.XSD.writeStringTextNode), "cmt":ol.xml.makeChildAppender(ol.format.XSD.writeStringTextNode), "desc":ol.xml.makeChildAppender(ol.format.XSD.writeStringTextNode), "src":ol.xml.makeChildAppender(ol.format.XSD.writeStringTextNode), "link":ol.xml.makeChildAppender(ol.format.GPX.writeLink_), "number":ol.xml.makeChildAppender(ol.format.XSD.writeNonNegativeIntegerTextNode), "type":ol.xml.makeChildAppender(ol.format.XSD.writeStringTextNode), +"trkseg":ol.xml.makeArraySerializer(ol.xml.makeChildAppender(ol.format.GPX.writeTrkSeg_))}); +ol.format.GPX.TRKSEG_NODE_FACTORY_ = ol.xml.makeSimpleNodeFactory("trkpt"); +ol.format.GPX.TRKSEG_SERIALIZERS_ = ol.xml.makeStructureNS(ol.format.GPX.NAMESPACE_URIS_, {"trkpt":ol.xml.makeChildAppender(ol.format.GPX.writeWptType_)}); +ol.format.GPX.WPT_TYPE_SEQUENCE_ = ol.xml.makeStructureNS(ol.format.GPX.NAMESPACE_URIS_, ["ele", "time", "magvar", "geoidheight", "name", "cmt", "desc", "src", "link", "sym", "type", "fix", "sat", "hdop", "vdop", "pdop", "ageofdgpsdata", "dgpsid"]); +ol.format.GPX.WPT_TYPE_SERIALIZERS_ = ol.xml.makeStructureNS(ol.format.GPX.NAMESPACE_URIS_, {"ele":ol.xml.makeChildAppender(ol.format.XSD.writeDecimalTextNode), "time":ol.xml.makeChildAppender(ol.format.XSD.writeDateTimeTextNode), "magvar":ol.xml.makeChildAppender(ol.format.XSD.writeDecimalTextNode), "geoidheight":ol.xml.makeChildAppender(ol.format.XSD.writeDecimalTextNode), "name":ol.xml.makeChildAppender(ol.format.XSD.writeStringTextNode), "cmt":ol.xml.makeChildAppender(ol.format.XSD.writeStringTextNode), +"desc":ol.xml.makeChildAppender(ol.format.XSD.writeStringTextNode), "src":ol.xml.makeChildAppender(ol.format.XSD.writeStringTextNode), "link":ol.xml.makeChildAppender(ol.format.GPX.writeLink_), "sym":ol.xml.makeChildAppender(ol.format.XSD.writeStringTextNode), "type":ol.xml.makeChildAppender(ol.format.XSD.writeStringTextNode), "fix":ol.xml.makeChildAppender(ol.format.XSD.writeStringTextNode), "sat":ol.xml.makeChildAppender(ol.format.XSD.writeNonNegativeIntegerTextNode), "hdop":ol.xml.makeChildAppender(ol.format.XSD.writeDecimalTextNode), +"vdop":ol.xml.makeChildAppender(ol.format.XSD.writeDecimalTextNode), "pdop":ol.xml.makeChildAppender(ol.format.XSD.writeDecimalTextNode), "ageofdgpsdata":ol.xml.makeChildAppender(ol.format.XSD.writeDecimalTextNode), "dgpsid":ol.xml.makeChildAppender(ol.format.XSD.writeNonNegativeIntegerTextNode)}); +ol.format.GPX.GEOMETRY_TYPE_TO_NODENAME_ = {"Point":"wpt", "LineString":"rte", "MultiLineString":"trk"}; +ol.format.GPX.GPX_NODE_FACTORY_ = function(value, objectStack, opt_nodeName) { + goog.asserts.assertInstanceof(value, ol.Feature); + var geometry = value.getGeometry(); + if(goog.isDef(geometry)) { + var parentNode = objectStack[objectStack.length - 1].node; + goog.asserts.assert(ol.xml.isNode(parentNode)); + return ol.xml.createElementNS(parentNode.namespaceURI, ol.format.GPX.GEOMETRY_TYPE_TO_NODENAME_[geometry.getType()]) + } +}; +ol.format.GPX.GPX_SERIALIZERS_ = ol.xml.makeStructureNS(ol.format.GPX.NAMESPACE_URIS_, {"rte":ol.xml.makeChildAppender(ol.format.GPX.writeRte_), "trk":ol.xml.makeChildAppender(ol.format.GPX.writeTrk_), "wpt":ol.xml.makeChildAppender(ol.format.GPX.writeWpt_)}); +ol.format.GPX.V1_1 = function() { + goog.base(this) +}; +goog.inherits(ol.format.GPX.V1_1, ol.format.GPX); +ol.format.GPX.V1_1.prototype.writeFeaturesNode = function(features) { + var gpx = ol.xml.createElementNS("http://www.topografix.com/GPX/1/1", "gpx"); + ol.xml.pushSerializeAndPop(({node:gpx}), ol.format.GPX.GPX_SERIALIZERS_, ol.format.GPX.GPX_NODE_FACTORY_, features, []); + return gpx +}; +goog.provide("goog.json"); +goog.provide("goog.json.Serializer"); +goog.json.isValid_ = function(s) { + if(/^\s*$/.test(s)) { + return false + } + var backslashesRe = /\\["\\\/bfnrtu]/g; + var simpleValuesRe = /"[^"\\\n\r\u2028\u2029\x00-\x08\x0a-\x1f]*"|true|false|null|-?\d+(?:\.\d*)?(?:[eE][+\-]?\d+)?/g; + var openBracketsRe = /(?:^|:|,)(?:[\s\u2028\u2029]*\[)+/g; + var remainderRe = /^[\],:{}\s\u2028\u2029]*$/; + return remainderRe.test(s.replace(backslashesRe, "@").replace(simpleValuesRe, "]").replace(openBracketsRe, "")) +}; +goog.json.parse = function(s) { + var o = String(s); + if(goog.json.isValid_(o)) { + try { + return(eval("(" + o + ")")) + }catch(ex) { + } + } + throw Error("Invalid JSON string: " + o); +}; +goog.json.unsafeParse = function(s) { + return(eval("(" + s + ")")) +}; +goog.json.Replacer; +goog.json.Reviver; +goog.json.serialize = function(object, opt_replacer) { + return(new goog.json.Serializer(opt_replacer)).serialize(object) +}; +goog.json.Serializer = function(opt_replacer) { + this.replacer_ = opt_replacer +}; +goog.json.Serializer.prototype.serialize = function(object) { + var sb = []; + this.serialize_(object, sb); + return sb.join("") +}; +goog.json.Serializer.prototype.serialize_ = function(object, sb) { + switch(typeof object) { + case "string": + this.serializeString_((object), sb); + break; + case "number": + this.serializeNumber_((object), sb); + break; + case "boolean": + sb.push(object); + break; + case "undefined": + sb.push("null"); + break; + case "object": + if(object == null) { + sb.push("null"); + break + } + if(goog.isArray(object)) { + this.serializeArray((object), sb); + break + } + this.serializeObject_((object), sb); + break; + case "function": + break; + default: + throw Error("Unknown type: " + typeof object); + } +}; +goog.json.Serializer.charToJsonCharCache_ = {'"':'\\"', "\\":"\\\\", "/":"\\/", "\b":"\\b", "\f":"\\f", "\n":"\\n", "\r":"\\r", "\t":"\\t", "\x0B":"\\u000b"}; +goog.json.Serializer.charsToReplace_ = /\uffff/.test("\uffff") ? /[\\\"\x00-\x1f\x7f-\uffff]/g : /[\\\"\x00-\x1f\x7f-\xff]/g; +goog.json.Serializer.prototype.serializeString_ = function(s, sb) { + sb.push('"', s.replace(goog.json.Serializer.charsToReplace_, function(c) { + if(c in goog.json.Serializer.charToJsonCharCache_) { + return goog.json.Serializer.charToJsonCharCache_[c] + } + var cc = c.charCodeAt(0); + var rv = "\\u"; + if(cc < 16) { + rv += "000" + }else { + if(cc < 256) { + rv += "00" + }else { + if(cc < 4096) { + rv += "0" + } + } + } + return goog.json.Serializer.charToJsonCharCache_[c] = rv + cc.toString(16) + }), '"') +}; +goog.json.Serializer.prototype.serializeNumber_ = function(n, sb) { + sb.push(isFinite(n) && !isNaN(n) ? n : "null") +}; +goog.json.Serializer.prototype.serializeArray = function(arr, sb) { + var l = arr.length; + sb.push("["); + var sep = ""; + for(var i = 0;i < l;i++) { + sb.push(sep); + var value = arr[i]; + this.serialize_(this.replacer_ ? this.replacer_.call(arr, String(i), value) : value, sb); + sep = "," + } + sb.push("]") +}; +goog.json.Serializer.prototype.serializeObject_ = function(obj, sb) { + sb.push("{"); + var sep = ""; + for(var key in obj) { + if(Object.prototype.hasOwnProperty.call(obj, key)) { + var value = obj[key]; + if(typeof value != "function") { + sb.push(sep); + this.serializeString_(key, sb); + sb.push(":"); + this.serialize_(this.replacer_ ? this.replacer_.call(obj, key, value) : value, sb); + sep = "," + } + } + } + sb.push("}") +}; +goog.provide("ol.format.JSONFeature"); +goog.require("goog.asserts"); +goog.require("goog.json"); +goog.require("ol.format.Feature"); +goog.require("ol.format.FormatType"); +ol.format.JSONFeature = function() { + goog.base(this) +}; +goog.inherits(ol.format.JSONFeature, ol.format.Feature); +ol.format.JSONFeature.prototype.getObject_ = function(source) { + if(goog.isObject(source)) { + return source + }else { + if(goog.isString(source)) { + var object = goog.json.parse(source); + return goog.isDef(object) ? object : null + }else { + goog.asserts.fail(); + return null + } + } +}; +ol.format.JSONFeature.prototype.getType = function() { + return ol.format.FormatType.JSON +}; +ol.format.JSONFeature.prototype.readFeature = function(source) { + return this.readFeatureFromObject(this.getObject_(source)) +}; +ol.format.JSONFeature.prototype.readFeatures = function(source) { + return this.readFeaturesFromObject(this.getObject_(source)) +}; +ol.format.JSONFeature.prototype.readFeatureFromObject = goog.abstractMethod; +ol.format.JSONFeature.prototype.readFeaturesFromObject = goog.abstractMethod; +ol.format.JSONFeature.prototype.readGeometry = function(source) { + return this.readGeometryFromObject(this.getObject_(source)) +}; +ol.format.JSONFeature.prototype.readGeometryFromObject = goog.abstractMethod; +ol.format.JSONFeature.prototype.readProjection = function(source) { + return this.readProjectionFromObject(this.getObject_(source)) +}; +ol.format.JSONFeature.prototype.readProjectionFromObject = goog.abstractMethod; +ol.format.JSONFeature.prototype.writeFeature = function(feature) { + return this.writeFeatureObject(feature) +}; +ol.format.JSONFeature.prototype.writeFeatureObject = goog.abstractMethod; +ol.format.JSONFeature.prototype.writeFeatures = function(features) { + return this.writeFeaturesObject(features) +}; +ol.format.JSONFeature.prototype.writeFeaturesObject = goog.abstractMethod; +ol.format.JSONFeature.prototype.writeGeometry = function(geometry) { + return this.writeGeometryObject(geometry) +}; +ol.format.JSONFeature.prototype.writeGeometryObject = goog.abstractMethod; +goog.provide("ol.format.GeoJSON"); +goog.require("goog.array"); +goog.require("goog.asserts"); +goog.require("goog.object"); +goog.require("ol.Feature"); +goog.require("ol.format.JSONFeature"); +goog.require("ol.geom.GeometryCollection"); +goog.require("ol.geom.GeometryType"); +goog.require("ol.geom.LineString"); +goog.require("ol.geom.MultiLineString"); +goog.require("ol.geom.MultiPoint"); +goog.require("ol.geom.MultiPolygon"); +goog.require("ol.geom.Point"); +goog.require("ol.geom.Polygon"); +goog.require("ol.proj"); +ol.format.GeoJSON = function(opt_options) { + var options = goog.isDef(opt_options) ? opt_options : {}; + goog.base(this); + this.defaultProjection_ = ol.proj.get(options.defaultProjection ? options.defaultProjection : "EPSG:4326") +}; +goog.inherits(ol.format.GeoJSON, ol.format.JSONFeature); +ol.format.GeoJSON.EXTENSIONS_ = [".geojson"]; +ol.format.GeoJSON.readGeometry_ = function(object) { + if(goog.isNull(object)) { + return null + } + var geometryReader = ol.format.GeoJSON.GEOMETRY_READERS_[object.type]; + goog.asserts.assert(goog.isDef(geometryReader)); + return geometryReader(object) +}; +ol.format.GeoJSON.readGeometryCollectionGeometry_ = function(object) { + goog.asserts.assert(object.type == "GeometryCollection"); + var geometries = goog.array.map(object.geometries, ol.format.GeoJSON.readGeometry_); + return new ol.geom.GeometryCollection(geometries) +}; +ol.format.GeoJSON.readPointGeometry_ = function(object) { + goog.asserts.assert(object.type == "Point"); + return new ol.geom.Point(object.coordinates) +}; +ol.format.GeoJSON.readLineStringGeometry_ = function(object) { + goog.asserts.assert(object.type == "LineString"); + return new ol.geom.LineString(object.coordinates) +}; +ol.format.GeoJSON.readMultiLineStringGeometry_ = function(object) { + goog.asserts.assert(object.type == "MultiLineString"); + return new ol.geom.MultiLineString(object.coordinates) +}; +ol.format.GeoJSON.readMultiPointGeometry_ = function(object) { + goog.asserts.assert(object.type == "MultiPoint"); + return new ol.geom.MultiPoint(object.coordinates) +}; +ol.format.GeoJSON.readMultiPolygonGeometry_ = function(object) { + goog.asserts.assert(object.type == "MultiPolygon"); + return new ol.geom.MultiPolygon(object.coordinates) +}; +ol.format.GeoJSON.readPolygonGeometry_ = function(object) { + goog.asserts.assert(object.type == "Polygon"); + return new ol.geom.Polygon(object.coordinates) +}; +ol.format.GeoJSON.writeGeometry_ = function(geometry) { + var geometryWriter = ol.format.GeoJSON.GEOMETRY_WRITERS_[geometry.getType()]; + goog.asserts.assert(goog.isDef(geometryWriter)); + return geometryWriter(geometry) +}; +ol.format.GeoJSON.writeEmptyGeometryCollectionGeometry_ = function(geometry) { + return({"type":"GeometryCollection", "geometries":[]}) +}; +ol.format.GeoJSON.writeGeometryCollectionGeometry_ = function(geometry) { + goog.asserts.assertInstanceof(geometry, ol.geom.GeometryCollection); + var geometries = goog.array.map(geometry.getGeometriesArray(), ol.format.GeoJSON.writeGeometry_); + return({"type":"GeometryCollection", "geometries":geometries}) +}; +ol.format.GeoJSON.writeLineStringGeometry_ = function(geometry) { + goog.asserts.assertInstanceof(geometry, ol.geom.LineString); + return({"type":"LineString", "coordinates":geometry.getCoordinates()}) +}; +ol.format.GeoJSON.writeMultiLineStringGeometry_ = function(geometry) { + goog.asserts.assertInstanceof(geometry, ol.geom.MultiLineString); + goog.asserts.assert(geometry.getType() == ol.geom.GeometryType.MULTI_LINE_STRING); + return({"type":"MultiLineString", "coordinates":geometry.getCoordinates()}) +}; +ol.format.GeoJSON.writeMultiPointGeometry_ = function(geometry) { + goog.asserts.assertInstanceof(geometry, ol.geom.MultiPoint); + return({"type":"MultiPoint", "coordinates":geometry.getCoordinates()}) +}; +ol.format.GeoJSON.writeMultiPolygonGeometry_ = function(geometry) { + goog.asserts.assertInstanceof(geometry, ol.geom.MultiPolygon); + return({"type":"MultiPolygon", "coordinates":geometry.getCoordinates()}) +}; +ol.format.GeoJSON.writePointGeometry_ = function(geometry) { + goog.asserts.assertInstanceof(geometry, ol.geom.Point); + return({"type":"Point", "coordinates":geometry.getCoordinates()}) +}; +ol.format.GeoJSON.writePolygonGeometry_ = function(geometry) { + goog.asserts.assertInstanceof(geometry, ol.geom.Polygon); + return({"type":"Polygon", "coordinates":geometry.getCoordinates()}) +}; +ol.format.GeoJSON.GEOMETRY_READERS_ = {"Point":ol.format.GeoJSON.readPointGeometry_, "LineString":ol.format.GeoJSON.readLineStringGeometry_, "Polygon":ol.format.GeoJSON.readPolygonGeometry_, "MultiPoint":ol.format.GeoJSON.readMultiPointGeometry_, "MultiLineString":ol.format.GeoJSON.readMultiLineStringGeometry_, "MultiPolygon":ol.format.GeoJSON.readMultiPolygonGeometry_, "GeometryCollection":ol.format.GeoJSON.readGeometryCollectionGeometry_}; +ol.format.GeoJSON.GEOMETRY_WRITERS_ = {"Point":ol.format.GeoJSON.writePointGeometry_, "LineString":ol.format.GeoJSON.writeLineStringGeometry_, "Polygon":ol.format.GeoJSON.writePolygonGeometry_, "MultiPoint":ol.format.GeoJSON.writeMultiPointGeometry_, "MultiLineString":ol.format.GeoJSON.writeMultiLineStringGeometry_, "MultiPolygon":ol.format.GeoJSON.writeMultiPolygonGeometry_, "GeometryCollection":ol.format.GeoJSON.writeGeometryCollectionGeometry_, "Circle":ol.format.GeoJSON.writeEmptyGeometryCollectionGeometry_}; +ol.format.GeoJSON.prototype.getExtensions = function() { + return ol.format.GeoJSON.EXTENSIONS_ +}; +ol.format.GeoJSON.prototype.readFeatureFromObject = function(object) { + var geoJSONFeature = (object); + goog.asserts.assert(geoJSONFeature.type == "Feature"); + var geometry = ol.format.GeoJSON.readGeometry_(geoJSONFeature.geometry); + var feature = new ol.Feature(geometry); + if(goog.isDef(geoJSONFeature.id)) { + feature.setId(geoJSONFeature.id) + } + if(goog.isDef(geoJSONFeature.properties)) { + feature.setValues(geoJSONFeature.properties) + } + return feature +}; +ol.format.GeoJSON.prototype.readFeaturesFromObject = function(object) { + var geoJSONObject = (object); + if(geoJSONObject.type == "Feature") { + return[this.readFeatureFromObject(object)] + }else { + if(geoJSONObject.type == "FeatureCollection") { + var geoJSONFeatureCollection = (object); + var features = []; + var geoJSONFeatures = geoJSONFeatureCollection.features; + var i, ii; + for(i = 0, ii = geoJSONFeatures.length;i < ii;++i) { + features.push(this.readFeatureFromObject(geoJSONFeatures[i])) + } + return features + }else { + goog.asserts.fail(); + return[] + } + } +}; +ol.format.GeoJSON.prototype.readGeometryFromObject = function(object) { + return ol.format.GeoJSON.readGeometry_((object)) +}; +ol.format.GeoJSON.prototype.readProjection = function(object) { + var geoJSONObject = (object); + var crs = geoJSONObject.crs; + if(goog.isDefAndNotNull(crs)) { + if(crs.type == "name") { + return ol.proj.get(crs.properties.name) + }else { + if(crs.type == "EPSG") { + return ol.proj.get("EPSG:" + crs.properties.code) + }else { + goog.asserts.fail(); + return null + } + } + }else { + return this.defaultProjection_ + } +}; +ol.format.GeoJSON.prototype.writeFeatureObject = function(feature) { + var object = {"type":"Feature"}; + var id = feature.getId(); + if(goog.isDefAndNotNull(id)) { + goog.object.set(object, "id", id) + } + var geometry = feature.getGeometry(); + if(goog.isDefAndNotNull(geometry)) { + goog.object.set(object, "geometry", ol.format.GeoJSON.writeGeometry_(geometry)) + } + var properties = feature.getProperties(); + goog.object.remove(properties, "geometry"); + if(!goog.object.isEmpty(properties)) { + goog.object.set(object, "properties", properties) + } + return object +}; +ol.format.GeoJSON.prototype.writeFeaturesObject = function(features) { + var objects = []; + var i, ii; + for(i = 0, ii = features.length;i < ii;++i) { + objects.push(this.writeFeatureObject(features[i])) + } + return({"type":"FeatureCollection", "features":objects}) +}; +ol.format.GeoJSON.prototype.writeGeometryObject = ol.format.GeoJSON.writeGeometry_; +goog.provide("goog.string.newlines"); +goog.provide("goog.string.newlines.Line"); +goog.require("goog.array"); +goog.string.newlines.splitLines = function(str, opt_keepNewlines) { + var lines = goog.string.newlines.getLines(str); + return goog.array.map(lines, function(line) { + return opt_keepNewlines ? line.getFullLine() : line.getContent() + }) +}; +goog.string.newlines.Line = function(string, startLineIndex, endContentIndex, endLineIndex) { + this.string = string; + this.startLineIndex = startLineIndex; + this.endContentIndex = endContentIndex; + this.endLineIndex = endLineIndex +}; +goog.string.newlines.Line.prototype.getContent = function() { + return this.string.substring(this.startLineIndex, this.endContentIndex) +}; +goog.string.newlines.Line.prototype.getFullLine = function() { + return this.string.substring(this.startLineIndex, this.endLineIndex) +}; +goog.string.newlines.Line.prototype.getNewline = function() { + return this.string.substring(this.endContentIndex, this.endLineIndex) +}; +goog.string.newlines.getLines = function(str) { + var re = RegExp("\r\n|\r|\n", "g"); + var sliceIndex = 0; + var result; + var lines = []; + while(result = re.exec(str)) { + var line = new goog.string.newlines.Line(str, sliceIndex, result.index, result.index + result[0].length); + lines.push(line); + sliceIndex = re.lastIndex + } + if(sliceIndex < str.length) { + var line = new goog.string.newlines.Line(str, sliceIndex, str.length, str.length); + lines.push(line) + } + return lines +}; +goog.provide("ol.format.TextFeature"); +goog.require("goog.asserts"); +goog.require("ol.format.Feature"); +goog.require("ol.format.FormatType"); +ol.format.TextFeature = function() { + goog.base(this) +}; +goog.inherits(ol.format.TextFeature, ol.format.Feature); +ol.format.TextFeature.prototype.getText_ = function(source) { + if(goog.isString(source)) { + return source + }else { + goog.asserts.fail(); + return"" + } +}; +ol.format.TextFeature.prototype.getType = function() { + return ol.format.FormatType.TEXT +}; +ol.format.TextFeature.prototype.readFeature = function(source) { + return this.readFeatureFromText(this.getText_(source)) +}; +ol.format.TextFeature.prototype.readFeatureFromText = goog.abstractMethod; +ol.format.TextFeature.prototype.readFeatures = function(source) { + return this.readFeaturesFromText(this.getText_(source)) +}; +ol.format.TextFeature.prototype.readFeaturesFromText = goog.abstractMethod; +ol.format.TextFeature.prototype.readGeometry = function(source) { + return this.readGeometryFromText(this.getText_(source)) +}; +ol.format.TextFeature.prototype.readGeometryFromText = goog.abstractMethod; +ol.format.TextFeature.prototype.readProjection = function(source) { + return this.readProjectionFromText(this.getText_(source)) +}; +ol.format.TextFeature.prototype.readProjectionFromText = goog.abstractMethod; +ol.format.TextFeature.prototype.writeFeature = function(feature) { + return this.writeFeatureText(feature) +}; +ol.format.TextFeature.prototype.writeFeatureText = goog.abstractMethod; +ol.format.TextFeature.prototype.writeFeatures = function(features) { + return this.writeFeaturesText(features) +}; +ol.format.TextFeature.prototype.writeFeaturesText = goog.abstractMethod; +ol.format.TextFeature.prototype.writeGeometry = function(geometry) { + return this.writeGeometryText(geometry) +}; +ol.format.TextFeature.prototype.writeGeometryText = goog.abstractMethod; +goog.provide("ol.format.IGC"); +goog.provide("ol.format.IGCZ"); +goog.require("goog.asserts"); +goog.require("goog.string"); +goog.require("goog.string.newlines"); +goog.require("ol.Feature"); +goog.require("ol.format.TextFeature"); +goog.require("ol.geom.LineString"); +goog.require("ol.proj"); +ol.format.IGCZ = {BAROMETRIC:"barometric", GPS:"gps", NONE:"none"}; +ol.format.IGC = function(opt_options) { + var options = goog.isDef(opt_options) ? opt_options : {}; + goog.base(this); + this.altitudeMode_ = goog.isDef(options.altitudeMode) ? options.altitudeMode : ol.format.IGCZ.NONE +}; +goog.inherits(ol.format.IGC, ol.format.TextFeature); +ol.format.IGC.EXTENSIONS_ = [".igc"]; +ol.format.IGC.B_RECORD_RE_ = /^B(\d{2})(\d{2})(\d{2})(\d{2})(\d{5})([NS])(\d{3})(\d{5})([EW])([AV])(\d{5})(\d{5})/; +ol.format.IGC.H_RECORD_RE_ = /^H.([A-Z]{3}).*?:(.*)/; +ol.format.IGC.HFDTE_RECORD_RE_ = /^HFDTE(\d{2})(\d{2})(\d{2})/; +ol.format.IGC.prototype.getExtensions = function() { + return ol.format.IGC.EXTENSIONS_ +}; +ol.format.IGC.prototype.readFeatureFromText = function(text) { + var altitudeMode = this.altitudeMode_; + var lines = goog.string.newlines.splitLines(text); + var properties = {}; + var flatCoordinates = []; + var year = 2E3; + var month = 0; + var day = 1; + var i, ii; + for(i = 0, ii = lines.length;i < ii;++i) { + var line = lines[i]; + var m; + if(line.charAt(0) == "B") { + m = ol.format.IGC.B_RECORD_RE_.exec(line); + if(m) { + var hour = parseInt(m[1], 10); + var minute = parseInt(m[2], 10); + var second = parseInt(m[3], 10); + var y = parseInt(m[4], 10) + parseInt(m[5], 10) / 6E4; + if(m[6] == "S") { + y = -y + } + var x = parseInt(m[7], 10) + parseInt(m[8], 10) / 6E4; + if(m[9] == "W") { + x = -x + } + flatCoordinates.push(x, y); + if(altitudeMode != ol.format.IGCZ.NONE) { + var z; + if(altitudeMode == ol.format.IGCZ.GPS) { + z = parseInt(m[11], 10) + }else { + if(altitudeMode == ol.format.IGCZ.BAROMETRIC) { + z = parseInt(m[12], 10) + }else { + goog.asserts.fail(); + z = 0 + } + } + flatCoordinates.push(z) + } + var dateTime = Date.UTC(year, month, day, hour, minute, second); + flatCoordinates.push(dateTime / 1E3) + } + }else { + if(line.charAt(0) == "H") { + m = ol.format.IGC.HFDTE_RECORD_RE_.exec(line); + if(m) { + day = parseInt(m[1], 10); + month = parseInt(m[2], 10) - 1; + year = 2E3 + parseInt(m[3], 10) + }else { + m = ol.format.IGC.H_RECORD_RE_.exec(line); + if(m) { + properties[m[1]] = goog.string.trim(m[2]); + m = ol.format.IGC.HFDTE_RECORD_RE_.exec(line) + } + } + } + } + } + var lineString = new ol.geom.LineString(null); + var layout = altitudeMode == ol.format.IGCZ.NONE ? ol.geom.GeometryLayout.XYM : ol.geom.GeometryLayout.XYZM; + lineString.setFlatCoordinates(layout, flatCoordinates); + var feature = new ol.Feature(lineString); + feature.setValues(properties); + return feature +}; +ol.format.IGC.prototype.readFeaturesFromText = function(text) { + var feature = this.readFeatureFromText(text); + if(!goog.isNull(feature)) { + return[feature] + }else { + return[] + } +}; +ol.format.IGC.prototype.readProjectionFromText = function(text) { + return ol.proj.get("EPSG:4326") +}; +goog.provide("ol.format.KML"); +goog.require("goog.Uri"); +goog.require("goog.array"); +goog.require("goog.asserts"); +goog.require("goog.dom.NodeType"); +goog.require("goog.math"); +goog.require("goog.object"); +goog.require("goog.string"); +goog.require("ol.Feature"); +goog.require("ol.feature"); +goog.require("ol.format.XMLFeature"); +goog.require("ol.format.XSD"); +goog.require("ol.geom.GeometryCollection"); +goog.require("ol.geom.GeometryType"); +goog.require("ol.geom.LineString"); +goog.require("ol.geom.MultiLineString"); +goog.require("ol.geom.MultiPoint"); +goog.require("ol.geom.MultiPolygon"); +goog.require("ol.geom.Point"); +goog.require("ol.geom.Polygon"); +goog.require("ol.proj"); +goog.require("ol.style.Fill"); +goog.require("ol.style.Icon"); +goog.require("ol.style.IconAnchorOrigin"); +goog.require("ol.style.IconAnchorUnits"); +goog.require("ol.style.Image"); +goog.require("ol.style.Stroke"); +goog.require("ol.style.Style"); +goog.require("ol.xml"); +ol.format.KMLVec2_; +ol.format.KMLGxTrackObject_; +ol.format.KML = function(opt_options) { + var options = goog.isDef(opt_options) ? opt_options : {}; + goog.base(this); + var defaultStyle = goog.isDef(options.defaultStyle) ? options.defaultStyle : ol.format.KML.DEFAULT_STYLE_ARRAY_; + var sharedStyles = {}; + var findStyle = function(styleValue) { + if(goog.isArray(styleValue)) { + return styleValue + }else { + if(goog.isString(styleValue)) { + if(!(styleValue in sharedStyles) && "#" + styleValue in sharedStyles) { + styleValue = "#" + styleValue + } + return findStyle(sharedStyles[styleValue]) + }else { + return defaultStyle + } + } + }; + this.sharedStyles_ = sharedStyles; + this.featureStyleFunction_ = function(resolution) { + var style = (this.get("Style")); + if(goog.isDef(style)) { + return style + } + var styleUrl = (this.get("styleUrl")); + if(goog.isDef(styleUrl)) { + return findStyle(styleUrl) + } + return defaultStyle + } +}; +goog.inherits(ol.format.KML, ol.format.XMLFeature); +ol.format.KML.EXTENSIONS_ = [".kml"]; +ol.format.KML.GX_NAMESPACE_URIS_ = ["http://www.google.com/kml/ext/2.2"]; +ol.format.KML.NAMESPACE_URIS_ = [null, "http://earth.google.com/kml/2.0", "http://earth.google.com/kml/2.1", "http://earth.google.com/kml/2.2", "http://www.opengis.net/kml/2.2"]; +ol.format.KML.DEFAULT_COLOR_ = [255, 255, 255, 1]; +ol.format.KML.DEFAULT_FILL_STYLE_ = new ol.style.Fill({color:ol.format.KML.DEFAULT_COLOR_}); +ol.format.KML.DEFAULT_IMAGE_STYLE_ANCHOR_ = [2, 20]; +ol.format.KML.DEFAULT_IMAGE_STYLE_ANCHOR_X_UNITS_ = ol.style.IconAnchorUnits.PIXELS; +ol.format.KML.DEFAULT_IMAGE_STYLE_ANCHOR_Y_UNITS_ = ol.style.IconAnchorUnits.PIXELS; +ol.format.KML.DEFAULT_IMAGE_STYLE_SIZE_ = [32, 32]; +ol.format.KML.DEFAULT_IMAGE_STYLE_SRC_ = "https://maps.google.com/mapfiles/kml/pushpin/ylw-pushpin.png"; +ol.format.KML.DEFAULT_IMAGE_STYLE_ = new ol.style.Icon({anchor:ol.format.KML.DEFAULT_IMAGE_STYLE_ANCHOR_, anchorXUnits:ol.format.KML.DEFAULT_IMAGE_STYLE_ANCHOR_X_UNITS_, anchorYUnits:ol.format.KML.DEFAULT_IMAGE_STYLE_ANCHOR_Y_UNITS_, crossOrigin:"anonymous", rotation:0, scale:1, size:ol.format.KML.DEFAULT_IMAGE_STYLE_SIZE_, src:ol.format.KML.DEFAULT_IMAGE_STYLE_SRC_}); +ol.format.KML.DEFAULT_STROKE_STYLE_ = new ol.style.Stroke({color:ol.format.KML.DEFAULT_COLOR_, width:1}); +ol.format.KML.DEFAULT_STYLE_ = new ol.style.Style({fill:ol.format.KML.DEFAULT_FILL_STYLE_, image:ol.format.KML.DEFAULT_IMAGE_STYLE_, text:null, stroke:ol.format.KML.DEFAULT_STROKE_STYLE_, zIndex:0}); +ol.format.KML.DEFAULT_STYLE_ARRAY_ = [ol.format.KML.DEFAULT_STYLE_]; +ol.format.KML.ICON_ANCHOR_UNITS_MAP_ = {"fraction":ol.style.IconAnchorUnits.FRACTION, "pixels":ol.style.IconAnchorUnits.PIXELS}; +ol.format.KML.readColor_ = function(node) { + var s = ol.xml.getAllTextContent(node, false); + var m = /^\s*#?\s*([0-9A-Fa-f]{8})\s*$/.exec(s); + if(m) { + var hexColor = m[1]; + return[parseInt(hexColor.substr(6, 2), 16), parseInt(hexColor.substr(4, 2), 16), parseInt(hexColor.substr(2, 2), 16), parseInt(hexColor.substr(0, 2), 16) / 255] + }else { + return undefined + } +}; +ol.format.KML.readFlatCoordinates_ = function(node) { + var s = ol.xml.getAllTextContent(node, false); + var flatCoordinates = []; + var re = /^\s*([+\-]?\d*\.?\d+(?:e[+\-]?\d+)?)\s*,\s*([+\-]?\d*\.?\d+(?:e[+\-]?\d+)?)(?:\s*,\s*([+\-]?\d*\.?\d+(?:e[+\-]?\d+)?))?\s*/i; + var m; + while(m = re.exec(s)) { + var x = parseFloat(m[1]); + var y = parseFloat(m[2]); + var z = m[3] ? parseFloat(m[3]) : 0; + flatCoordinates.push(x, y, z); + s = s.substr(m[0].length) + } + if(s !== "") { + return undefined + } + return flatCoordinates +}; +ol.format.KML.readStyleUrl_ = function(node) { + var s = goog.string.trim(ol.xml.getAllTextContent(node, false)); + if(goog.isDefAndNotNull(node.baseURI)) { + return goog.Uri.resolve(node.baseURI, s).toString() + }else { + return s + } +}; +ol.format.KML.readURI_ = function(node) { + var s = ol.xml.getAllTextContent(node, false); + if(goog.isDefAndNotNull(node.baseURI)) { + return goog.Uri.resolve(node.baseURI, goog.string.trim(s)).toString() + }else { + return goog.string.trim(s) + } +}; +ol.format.KML.readVec2_ = function(node) { + var xunits = node.getAttribute("xunits"); + var yunits = node.getAttribute("yunits"); + return{x:parseFloat(node.getAttribute("x")), xunits:ol.format.KML.ICON_ANCHOR_UNITS_MAP_[xunits], y:parseFloat(node.getAttribute("y")), yunits:ol.format.KML.ICON_ANCHOR_UNITS_MAP_[yunits]} +}; +ol.format.KML.readScale_ = function(node) { + var number = ol.format.XSD.readDecimal(node); + if(goog.isDef(number)) { + return Math.sqrt(number) + }else { + return undefined + } +}; +ol.format.KML.readStyleMapValue_ = function(node, objectStack) { + return ol.xml.pushParseAndPop((undefined), ol.format.KML.STYLE_MAP_PARSERS_, node, objectStack) +}; +ol.format.KML.IconStyleParser_ = function(node, objectStack) { + goog.asserts.assert(node.nodeType == goog.dom.NodeType.ELEMENT); + goog.asserts.assert(node.localName == "IconStyle"); + var object = ol.xml.pushParseAndPop({}, ol.format.KML.ICON_STYLE_PARSERS_, node, objectStack); + if(!goog.isDef(object)) { + return + } + var styleObject = (objectStack[objectStack.length - 1]); + goog.asserts.assert(goog.isObject(styleObject)); + var IconObject = (goog.object.get(object, "Icon", {})); + var src; + var href = (goog.object.get(IconObject, "href")); + if(goog.isDef(href)) { + src = href + }else { + src = ol.format.KML.DEFAULT_IMAGE_STYLE_SRC_ + } + var anchor, anchorXUnits, anchorYUnits; + var hotSpot = (goog.object.get(object, "hotSpot")); + if(goog.isDef(hotSpot)) { + anchor = [hotSpot.x, hotSpot.y]; + anchorXUnits = hotSpot.xunits; + anchorYUnits = hotSpot.yunits + }else { + if(src === ol.format.KML.DEFAULT_IMAGE_STYLE_SRC_) { + anchor = ol.format.KML.DEFAULT_IMAGE_STYLE_ANCHOR_; + anchorXUnits = ol.format.KML.DEFAULT_IMAGE_STYLE_ANCHOR_X_UNITS_; + anchorYUnits = ol.format.KML.DEFAULT_IMAGE_STYLE_ANCHOR_Y_UNITS_ + }else { + if(/^http:\/\/maps\.(?:google|gstatic)\.com\//.test(src)) { + anchor = [0.5, 1]; + anchorXUnits = ol.style.IconAnchorUnits.FRACTION; + anchorYUnits = ol.style.IconAnchorUnits.FRACTION + } + } + } + var rotation; + var heading = (goog.object.get(object, "heading")); + if(goog.isDef(heading)) { + rotation = goog.math.toRadians(heading) + } + var scale = (goog.object.get(object, "scale")); + var size; + if(src == ol.format.KML.DEFAULT_IMAGE_STYLE_SRC_) { + size = ol.format.KML.DEFAULT_IMAGE_STYLE_SIZE_ + } + var imageStyle = new ol.style.Icon({anchor:anchor, anchorOrigin:ol.style.IconAnchorOrigin.TOP_LEFT, anchorXUnits:anchorXUnits, anchorYUnits:anchorYUnits, crossOrigin:"anonymous", rotation:rotation, scale:scale, size:size, src:src}); + goog.object.set(styleObject, "imageStyle", imageStyle) +}; +ol.format.KML.LineStyleParser_ = function(node, objectStack) { + goog.asserts.assert(node.nodeType == goog.dom.NodeType.ELEMENT); + goog.asserts.assert(node.localName == "LineStyle"); + var object = ol.xml.pushParseAndPop({}, ol.format.KML.LINE_STYLE_PARSERS_, node, objectStack); + if(!goog.isDef(object)) { + return + } + var styleObject = objectStack[objectStack.length - 1]; + goog.asserts.assert(goog.isObject(styleObject)); + var strokeStyle = new ol.style.Stroke({color:(goog.object.get(object, "color", ol.format.KML.DEFAULT_COLOR_)), width:(goog.object.get(object, "width", 1))}); + goog.object.set(styleObject, "strokeStyle", strokeStyle) +}; +ol.format.KML.PolyStyleParser_ = function(node, objectStack) { + goog.asserts.assert(node.nodeType == goog.dom.NodeType.ELEMENT); + goog.asserts.assert(node.localName == "PolyStyle"); + var object = ol.xml.pushParseAndPop({}, ol.format.KML.POLY_STYLE_PARSERS_, node, objectStack); + if(!goog.isDef(object)) { + return + } + var styleObject = objectStack[objectStack.length - 1]; + goog.asserts.assert(goog.isObject(styleObject)); + var fillStyle = new ol.style.Fill({color:(goog.object.get(object, "color", ol.format.KML.DEFAULT_COLOR_))}); + goog.object.set(styleObject, "fillStyle", fillStyle); + var fill = (goog.object.get(object, "fill")); + if(goog.isDef(fill)) { + goog.object.set(styleObject, "fill", fill) + } + var outline = (goog.object.get(object, "outline")); + if(goog.isDef(outline)) { + goog.object.set(styleObject, "outline", outline) + } +}; +ol.format.KML.readFlatLinearRing_ = function(node, objectStack) { + goog.asserts.assert(node.nodeType == goog.dom.NodeType.ELEMENT); + goog.asserts.assert(node.localName == "LinearRing"); + return(ol.xml.pushParseAndPop(null, ol.format.KML.FLAT_LINEAR_RING_PARSERS_, node, objectStack)) +}; +ol.format.KML.gxCoordParser_ = function(node, objectStack) { + goog.asserts.assert(node.nodeType == goog.dom.NodeType.ELEMENT); + goog.asserts.assert(goog.array.indexOf(ol.format.KML.GX_NAMESPACE_URIS_, node.namespaceURI) != -1); + goog.asserts.assert(node.localName == "coord"); + var gxTrackObject = (objectStack[objectStack.length - 1]); + goog.asserts.assert(goog.isObject(gxTrackObject)); + var flatCoordinates = gxTrackObject.flatCoordinates; + var s = ol.xml.getAllTextContent(node, false); + var re = /^\s*([+\-]?\d+(?:\.\d*)?(?:e[+\-]?\d*)?)\s+([+\-]?\d+(?:\.\d*)?(?:e[+\-]?\d*)?)\s+([+\-]?\d+(?:\.\d*)?(?:e[+\-]?\d*)?)\s*$/i; + var m = re.exec(s); + if(m) { + var x = parseFloat(m[1]); + var y = parseFloat(m[2]); + var z = parseFloat(m[3]); + flatCoordinates.push(x, y, z, 0) + }else { + flatCoordinates.push(0, 0, 0, 0) + } +}; +ol.format.KML.readGxMultiTrack_ = function(node, objectStack) { + goog.asserts.assert(node.nodeType == goog.dom.NodeType.ELEMENT); + goog.asserts.assert(goog.array.indexOf(ol.format.KML.GX_NAMESPACE_URIS_, node.namespaceURI) != -1); + goog.asserts.assert(node.localName == "MultiTrack"); + var lineStrings = ol.xml.pushParseAndPop(([]), ol.format.KML.GX_MULTITRACK_GEOMETRY_PARSERS_, node, objectStack); + if(!goog.isDef(lineStrings)) { + return undefined + } + var multiLineString = new ol.geom.MultiLineString(null); + multiLineString.setLineStrings(lineStrings); + return multiLineString +}; +ol.format.KML.readGxTrack_ = function(node, objectStack) { + goog.asserts.assert(node.nodeType == goog.dom.NodeType.ELEMENT); + goog.asserts.assert(goog.array.indexOf(ol.format.KML.GX_NAMESPACE_URIS_, node.namespaceURI) != -1); + goog.asserts.assert(node.localName == "Track"); + var gxTrackObject = ol.xml.pushParseAndPop(({flatCoordinates:[], whens:[]}), ol.format.KML.GX_TRACK_PARSERS_, node, objectStack); + if(!goog.isDef(gxTrackObject)) { + return undefined + } + var flatCoordinates = gxTrackObject.flatCoordinates; + var whens = gxTrackObject.whens; + goog.asserts.assert(flatCoordinates.length / 4 == whens.length); + var i, ii; + for(i = 0, ii = Math.min(flatCoordinates.length, whens.length);i < ii;++i) { + flatCoordinates[4 * i + 3] = whens[i] + } + var lineString = new ol.geom.LineString(null); + lineString.setFlatCoordinates(ol.geom.GeometryLayout.XYZM, flatCoordinates); + return lineString +}; +ol.format.KML.readIcon_ = function(node, objectStack) { + goog.asserts.assert(node.nodeType == goog.dom.NodeType.ELEMENT); + goog.asserts.assert(node.localName == "Icon"); + var iconObject = ol.xml.pushParseAndPop({}, ol.format.KML.ICON_PARSERS_, node, objectStack); + if(goog.isDef(iconObject)) { + return iconObject + }else { + return null + } +}; +ol.format.KML.readFlatCoordinatesFromNode_ = function(node, objectStack) { + goog.asserts.assert(node.nodeType == goog.dom.NodeType.ELEMENT); + return(ol.xml.pushParseAndPop(null, ol.format.KML.GEOMETRY_FLAT_COORDINATES_PARSERS_, node, objectStack)) +}; +ol.format.KML.readLineString_ = function(node, objectStack) { + goog.asserts.assert(node.nodeType == goog.dom.NodeType.ELEMENT); + goog.asserts.assert(node.localName == "LineString"); + var flatCoordinates = ol.format.KML.readFlatCoordinatesFromNode_(node, objectStack); + if(goog.isDef(flatCoordinates)) { + var lineString = new ol.geom.LineString(null); + lineString.setFlatCoordinates(ol.geom.GeometryLayout.XYZ, flatCoordinates); + return lineString + }else { + return undefined + } +}; +ol.format.KML.readLinearRing_ = function(node, objectStack) { + goog.asserts.assert(node.nodeType == goog.dom.NodeType.ELEMENT); + goog.asserts.assert(node.localName == "LinearRing"); + var flatCoordinates = ol.format.KML.readFlatCoordinatesFromNode_(node, objectStack); + if(goog.isDef(flatCoordinates)) { + var polygon = new ol.geom.Polygon(null); + polygon.setFlatCoordinates(ol.geom.GeometryLayout.XYZ, flatCoordinates, [flatCoordinates.length]); + return polygon + }else { + return undefined + } +}; +ol.format.KML.readMultiGeometry_ = function(node, objectStack) { + goog.asserts.assert(node.nodeType == goog.dom.NodeType.ELEMENT); + goog.asserts.assert(node.localName == "MultiGeometry"); + var geometries = ol.xml.pushParseAndPop(([]), ol.format.KML.MULTI_GEOMETRY_PARSERS_, node, objectStack); + if(!goog.isDef(geometries)) { + return null + } + if(geometries.length === 0) { + return new ol.geom.GeometryCollection(geometries) + } + var homogeneous = true; + var type = geometries[0].getType(); + var geometry, i, ii; + for(i = 1, ii = geometries.length;i < ii;++i) { + geometry = geometries[i]; + if(geometry.getType() != type) { + homogeneous = false; + break + } + } + if(homogeneous) { + var layout; + var flatCoordinates; + if(type == ol.geom.GeometryType.POINT) { + var point = geometries[0]; + goog.asserts.assertInstanceof(point, ol.geom.Point); + layout = point.getLayout(); + flatCoordinates = point.getFlatCoordinates(); + for(i = 1, ii = geometries.length;i < ii;++i) { + geometry = geometries[i]; + goog.asserts.assertInstanceof(geometry, ol.geom.Point); + goog.asserts.assert(geometry.getLayout() == layout); + goog.array.extend(flatCoordinates, geometry.getFlatCoordinates()) + } + var multiPoint = new ol.geom.MultiPoint(null); + multiPoint.setFlatCoordinates(layout, flatCoordinates); + return multiPoint + }else { + if(type == ol.geom.GeometryType.LINE_STRING) { + var multiLineString = new ol.geom.MultiLineString(null); + multiLineString.setLineStrings(geometries); + return multiLineString + }else { + if(type == ol.geom.GeometryType.POLYGON) { + var multiPolygon = new ol.geom.MultiPolygon(null); + multiPolygon.setPolygons(geometries); + return multiPolygon + }else { + if(type == ol.geom.GeometryType.GEOMETRY_COLLECTION) { + return new ol.geom.GeometryCollection(geometries) + }else { + goog.asserts.fail(); + return null + } + } + } + } + }else { + return new ol.geom.GeometryCollection(geometries) + } +}; +ol.format.KML.readPoint_ = function(node, objectStack) { + goog.asserts.assert(node.nodeType == goog.dom.NodeType.ELEMENT); + goog.asserts.assert(node.localName == "Point"); + var flatCoordinates = ol.format.KML.readFlatCoordinatesFromNode_(node, objectStack); + if(goog.isDefAndNotNull(flatCoordinates)) { + var point = new ol.geom.Point(null); + goog.asserts.assert(flatCoordinates.length == 3); + point.setFlatCoordinates(ol.geom.GeometryLayout.XYZ, flatCoordinates); + return point + }else { + return undefined + } +}; +ol.format.KML.readPolygon_ = function(node, objectStack) { + goog.asserts.assert(node.nodeType == goog.dom.NodeType.ELEMENT); + goog.asserts.assert(node.localName == "Polygon"); + var flatLinearRings = ol.xml.pushParseAndPop(([null]), ol.format.KML.FLAT_LINEAR_RINGS_PARSERS_, node, objectStack); + if(goog.isDefAndNotNull(flatLinearRings) && !goog.isNull(flatLinearRings[0])) { + var polygon = new ol.geom.Polygon(null); + var flatCoordinates = flatLinearRings[0]; + var ends = [flatCoordinates.length]; + var i, ii; + for(i = 1, ii = flatLinearRings.length;i < ii;++i) { + goog.array.extend(flatCoordinates, flatLinearRings[i]); + ends.push(flatCoordinates.length) + } + polygon.setFlatCoordinates(ol.geom.GeometryLayout.XYZ, flatCoordinates, ends); + return polygon + }else { + return undefined + } +}; +ol.format.KML.readStyle_ = function(node, objectStack) { + goog.asserts.assert(node.nodeType == goog.dom.NodeType.ELEMENT); + goog.asserts.assert(node.localName == "Style"); + var styleObject = ol.xml.pushParseAndPop({}, ol.format.KML.STYLE_PARSERS_, node, objectStack); + if(!goog.isDef(styleObject)) { + return null + } + var fillStyle = (goog.object.get(styleObject, "fillStyle", ol.format.KML.DEFAULT_FILL_STYLE_)); + var fill = (goog.object.get(styleObject, "fill")); + if(goog.isDef(fill) && !fill) { + fillStyle = null + } + var imageStyle = (goog.object.get(styleObject, "imageStyle", ol.format.KML.DEFAULT_IMAGE_STYLE_)); + var strokeStyle = (goog.object.get(styleObject, "strokeStyle", ol.format.KML.DEFAULT_STROKE_STYLE_)); + var outline = (goog.object.get(styleObject, "outline")); + if(goog.isDef(outline) && !outline) { + strokeStyle = null + } + return[new ol.style.Style({fill:fillStyle, image:imageStyle, stroke:strokeStyle, text:null, zIndex:undefined})] +}; +ol.format.KML.DataParser_ = function(node, objectStack) { + goog.asserts.assert(node.nodeType == goog.dom.NodeType.ELEMENT); + goog.asserts.assert(node.localName == "Data"); + var name = node.getAttribute("name"); + if(!goog.isNull(name)) { + var data = ol.xml.pushParseAndPop(undefined, ol.format.KML.DATA_PARSERS_, node, objectStack); + if(goog.isDef(data)) { + var featureObject = (objectStack[objectStack.length - 1]); + goog.asserts.assert(goog.isObject(featureObject)); + goog.object.set(featureObject, name, data) + } + } +}; +ol.format.KML.ExtendedDataParser_ = function(node, objectStack) { + goog.asserts.assert(node.nodeType == goog.dom.NodeType.ELEMENT); + goog.asserts.assert(node.localName == "ExtendedData"); + ol.xml.parse(ol.format.KML.EXTENDED_DATA_PARSERS_, node, objectStack) +}; +ol.format.KML.PairDataParser_ = function(node, objectStack) { + goog.asserts.assert(node.nodeType == goog.dom.NodeType.ELEMENT); + goog.asserts.assert(node.localName == "Pair"); + var pairObject = ol.xml.pushParseAndPop({}, ol.format.KML.PAIR_PARSERS_, node, objectStack); + if(!goog.isDef(pairObject)) { + return + } + var key = (goog.object.get(pairObject, "key")); + if(goog.isDef(key) && key == "normal") { + var styleUrl = (goog.object.get(pairObject, "styleUrl")); + if(goog.isDef(styleUrl)) { + objectStack[objectStack.length - 1] = styleUrl + } + var Style = (goog.object.get(pairObject, "Style")); + if(goog.isDef(Style)) { + objectStack[objectStack.length - 1] = Style + } + } +}; +ol.format.KML.PlacemarkStyleMapParser_ = function(node, objectStack) { + goog.asserts.assert(node.nodeType == goog.dom.NodeType.ELEMENT); + goog.asserts.assert(node.localName == "StyleMap"); + var styleMapValue = ol.format.KML.readStyleMapValue_(node, objectStack); + if(!goog.isDef(styleMapValue)) { + return + } + var placemarkObject = objectStack[objectStack.length - 1]; + goog.asserts.assert(goog.isObject(placemarkObject)); + if(goog.isArray(styleMapValue)) { + goog.object.set(placemarkObject, "Style", styleMapValue) + }else { + if(goog.isString(styleMapValue)) { + goog.object.set(placemarkObject, "styleUrl", styleMapValue) + }else { + goog.asserts.fail() + } + } +}; +ol.format.KML.SchemaDataParser_ = function(node, objectStack) { + goog.asserts.assert(node.nodeType == goog.dom.NodeType.ELEMENT); + goog.asserts.assert(node.localName == "SchemaData"); + ol.xml.parse(ol.format.KML.SCHEMA_DATA_PARSERS_, node, objectStack) +}; +ol.format.KML.SimpleDataParser_ = function(node, objectStack) { + goog.asserts.assert(node.nodeType == goog.dom.NodeType.ELEMENT); + goog.asserts.assert(node.localName == "SimpleData"); + var name = node.getAttribute("name"); + if(!goog.isNull(name)) { + var data = ol.format.XSD.readString(node); + var featureObject = (objectStack[objectStack.length - 1]); + goog.object.set(featureObject, name, data) + } +}; +ol.format.KML.innerBoundaryIsParser_ = function(node, objectStack) { + goog.asserts.assert(node.nodeType == goog.dom.NodeType.ELEMENT); + goog.asserts.assert(node.localName == "innerBoundaryIs"); + var flatLinearRing = ol.xml.pushParseAndPop((undefined), ol.format.KML.INNER_BOUNDARY_IS_PARSERS_, node, objectStack); + if(goog.isDef(flatLinearRing)) { + var flatLinearRings = (objectStack[objectStack.length - 1]); + goog.asserts.assert(goog.isArray(flatLinearRings)); + goog.asserts.assert(flatLinearRings.length > 0); + flatLinearRings.push(flatLinearRing) + } +}; +ol.format.KML.outerBoundaryIsParser_ = function(node, objectStack) { + goog.asserts.assert(node.nodeType == goog.dom.NodeType.ELEMENT); + goog.asserts.assert(node.localName == "outerBoundaryIs"); + var flatLinearRing = ol.xml.pushParseAndPop((undefined), ol.format.KML.OUTER_BOUNDARY_IS_PARSERS_, node, objectStack); + if(goog.isDef(flatLinearRing)) { + var flatLinearRings = (objectStack[objectStack.length - 1]); + goog.asserts.assert(goog.isArray(flatLinearRings)); + goog.asserts.assert(flatLinearRings.length > 0); + flatLinearRings[0] = flatLinearRing + } +}; +ol.format.KML.whenParser_ = function(node, objectStack) { + goog.asserts.assert(node.nodeType == goog.dom.NodeType.ELEMENT); + goog.asserts.assert(node.localName == "when"); + var gxTrackObject = (objectStack[objectStack.length - 1]); + goog.asserts.assert(goog.isObject(gxTrackObject)); + var whens = gxTrackObject.whens; + var s = ol.xml.getAllTextContent(node, false); + var re = /^\s*(\d{4})($|-(\d{2})($|-(\d{2})($|T(\d{2}):(\d{2}):(\d{2})(Z|(?:([+\-])(\d{2})(?::(\d{2}))?)))))\s*$/; + var m = re.exec(s); + if(m) { + var year = parseInt(m[1], 10); + var month = goog.isDef(m[3]) ? parseInt(m[3], 10) - 1 : 0; + var day = goog.isDef(m[5]) ? parseInt(m[5], 10) : 1; + var hour = goog.isDef(m[7]) ? parseInt(m[7], 10) : 0; + var minute = goog.isDef(m[8]) ? parseInt(m[8], 10) : 0; + var second = goog.isDef(m[9]) ? parseInt(m[9], 10) : 0; + var when = Date.UTC(year, month, day, hour, minute, second); + if(goog.isDef(m[10]) && m[10] != "Z") { + var sign = m[11] == "-" ? -1 : 1; + when += sign * 60 * parseInt(m[12], 10); + if(goog.isDef(m[13])) { + when += sign * 60 * 60 * parseInt(m[13], 10) + } + } + whens.push(when) + }else { + whens.push(0) + } +}; +ol.format.KML.DATA_PARSERS_ = ol.xml.makeParsersNS(ol.format.KML.NAMESPACE_URIS_, {"value":ol.xml.makeReplacer(ol.format.XSD.readString)}); +ol.format.KML.EXTENDED_DATA_PARSERS_ = ol.xml.makeParsersNS(ol.format.KML.NAMESPACE_URIS_, {"Data":ol.format.KML.DataParser_, "SchemaData":ol.format.KML.SchemaDataParser_}); +ol.format.KML.FLAT_LINEAR_RING_PARSERS_ = ol.xml.makeParsersNS(ol.format.KML.NAMESPACE_URIS_, {"coordinates":ol.xml.makeReplacer(ol.format.KML.readFlatCoordinates_)}); +ol.format.KML.FLAT_LINEAR_RINGS_PARSERS_ = ol.xml.makeParsersNS(ol.format.KML.NAMESPACE_URIS_, {"innerBoundaryIs":ol.format.KML.innerBoundaryIsParser_, "outerBoundaryIs":ol.format.KML.outerBoundaryIsParser_}); +ol.format.KML.GX_TRACK_PARSERS_ = ol.xml.makeParsersNS(ol.format.KML.NAMESPACE_URIS_, {"when":ol.format.KML.whenParser_}, ol.xml.makeParsersNS(ol.format.KML.GX_NAMESPACE_URIS_, {"coord":ol.format.KML.gxCoordParser_})); +ol.format.KML.GEOMETRY_FLAT_COORDINATES_PARSERS_ = ol.xml.makeParsersNS(ol.format.KML.NAMESPACE_URIS_, {"coordinates":ol.xml.makeReplacer(ol.format.KML.readFlatCoordinates_)}); +ol.format.KML.ICON_PARSERS_ = ol.xml.makeParsersNS(ol.format.KML.NAMESPACE_URIS_, {"href":ol.xml.makeObjectPropertySetter(ol.format.KML.readURI_)}); +ol.format.KML.ICON_STYLE_PARSERS_ = ol.xml.makeParsersNS(ol.format.KML.NAMESPACE_URIS_, {"Icon":ol.xml.makeObjectPropertySetter(ol.format.KML.readIcon_), "heading":ol.xml.makeObjectPropertySetter(ol.format.XSD.readDecimal), "hotSpot":ol.xml.makeObjectPropertySetter(ol.format.KML.readVec2_), "scale":ol.xml.makeObjectPropertySetter(ol.format.KML.readScale_)}); +ol.format.KML.INNER_BOUNDARY_IS_PARSERS_ = ol.xml.makeParsersNS(ol.format.KML.NAMESPACE_URIS_, {"LinearRing":ol.xml.makeReplacer(ol.format.KML.readFlatLinearRing_)}); +ol.format.KML.LINE_STYLE_PARSERS_ = ol.xml.makeParsersNS(ol.format.KML.NAMESPACE_URIS_, {"color":ol.xml.makeObjectPropertySetter(ol.format.KML.readColor_), "width":ol.xml.makeObjectPropertySetter(ol.format.XSD.readDecimal)}); +ol.format.KML.MULTI_GEOMETRY_PARSERS_ = ol.xml.makeParsersNS(ol.format.KML.NAMESPACE_URIS_, {"LineString":ol.xml.makeArrayPusher(ol.format.KML.readLineString_), "LinearRing":ol.xml.makeArrayPusher(ol.format.KML.readLinearRing_), "MultiGeometry":ol.xml.makeArrayPusher(ol.format.KML.readMultiGeometry_), "Point":ol.xml.makeArrayPusher(ol.format.KML.readPoint_), "Polygon":ol.xml.makeArrayPusher(ol.format.KML.readPolygon_)}); +ol.format.KML.GX_MULTITRACK_GEOMETRY_PARSERS_ = ol.xml.makeParsersNS(ol.format.KML.GX_NAMESPACE_URIS_, {"Track":ol.xml.makeArrayPusher(ol.format.KML.readGxTrack_)}); +ol.format.KML.OUTER_BOUNDARY_IS_PARSERS_ = ol.xml.makeParsersNS(ol.format.KML.NAMESPACE_URIS_, {"LinearRing":ol.xml.makeReplacer(ol.format.KML.readFlatLinearRing_)}); +ol.format.KML.PAIR_PARSERS_ = ol.xml.makeParsersNS(ol.format.KML.NAMESPACE_URIS_, {"Style":ol.xml.makeObjectPropertySetter(ol.format.KML.readStyle_), "key":ol.xml.makeObjectPropertySetter(ol.format.XSD.readString), "styleUrl":ol.xml.makeObjectPropertySetter(ol.format.KML.readStyleUrl_)}); +ol.format.KML.PLACEMARK_PARSERS_ = ol.xml.makeParsersNS(ol.format.KML.NAMESPACE_URIS_, {"ExtendedData":ol.format.KML.ExtendedDataParser_, "MultiGeometry":ol.xml.makeObjectPropertySetter(ol.format.KML.readMultiGeometry_, "geometry"), "LineString":ol.xml.makeObjectPropertySetter(ol.format.KML.readLineString_, "geometry"), "LinearRing":ol.xml.makeObjectPropertySetter(ol.format.KML.readLinearRing_, "geometry"), "Point":ol.xml.makeObjectPropertySetter(ol.format.KML.readPoint_, "geometry"), "Polygon":ol.xml.makeObjectPropertySetter(ol.format.KML.readPolygon_, +"geometry"), "Style":ol.xml.makeObjectPropertySetter(ol.format.KML.readStyle_), "StyleMap":ol.format.KML.PlacemarkStyleMapParser_, "address":ol.xml.makeObjectPropertySetter(ol.format.XSD.readString), "description":ol.xml.makeObjectPropertySetter(ol.format.XSD.readString), "name":ol.xml.makeObjectPropertySetter(ol.format.XSD.readString), "open":ol.xml.makeObjectPropertySetter(ol.format.XSD.readBoolean), "phoneNumber":ol.xml.makeObjectPropertySetter(ol.format.XSD.readString), "styleUrl":ol.xml.makeObjectPropertySetter(ol.format.KML.readURI_), +"visibility":ol.xml.makeObjectPropertySetter(ol.format.XSD.readBoolean)}, ol.xml.makeParsersNS(ol.format.KML.GX_NAMESPACE_URIS_, {"MultiTrack":ol.xml.makeObjectPropertySetter(ol.format.KML.readGxMultiTrack_, "geometry"), "Track":ol.xml.makeObjectPropertySetter(ol.format.KML.readGxTrack_, "geometry")})); +ol.format.KML.POLY_STYLE_PARSERS_ = ol.xml.makeParsersNS(ol.format.KML.NAMESPACE_URIS_, {"color":ol.xml.makeObjectPropertySetter(ol.format.KML.readColor_), "fill":ol.xml.makeObjectPropertySetter(ol.format.XSD.readBoolean), "outline":ol.xml.makeObjectPropertySetter(ol.format.XSD.readBoolean)}); +ol.format.KML.SCHEMA_DATA_PARSERS_ = ol.xml.makeParsersNS(ol.format.KML.NAMESPACE_URIS_, {"SimpleData":ol.format.KML.SimpleDataParser_}); +ol.format.KML.STYLE_PARSERS_ = ol.xml.makeParsersNS(ol.format.KML.NAMESPACE_URIS_, {"IconStyle":ol.format.KML.IconStyleParser_, "LineStyle":ol.format.KML.LineStyleParser_, "PolyStyle":ol.format.KML.PolyStyleParser_}); +ol.format.KML.STYLE_MAP_PARSERS_ = ol.xml.makeParsersNS(ol.format.KML.NAMESPACE_URIS_, {"Pair":ol.format.KML.PairDataParser_}); +ol.format.KML.prototype.getExtensions = function() { + return ol.format.KML.EXTENSIONS_ +}; +ol.format.KML.prototype.readDocumentOrFolder_ = function(node, objectStack) { + goog.asserts.assert(node.nodeType == goog.dom.NodeType.ELEMENT); + var localName = ol.xml.getLocalName(node); + goog.asserts.assert(localName == "Document" || localName == "Folder"); + var parsersNS = ol.xml.makeParsersNS(ol.format.KML.NAMESPACE_URIS_, {"Folder":ol.xml.makeArrayExtender(this.readDocumentOrFolder_, this), "Placemark":ol.xml.makeArrayPusher(this.readPlacemark_, this), "Style":goog.bind(this.readSharedStyle_, this), "StyleMap":goog.bind(this.readSharedStyleMap_, this)}); + var features = ol.xml.pushParseAndPop(([]), parsersNS, node, objectStack, this); + if(goog.isDef(features)) { + return features + }else { + return undefined + } +}; +ol.format.KML.prototype.readPlacemark_ = function(node, objectStack) { + goog.asserts.assert(node.nodeType == goog.dom.NodeType.ELEMENT); + goog.asserts.assert(node.localName == "Placemark"); + var object = ol.xml.pushParseAndPop({"geometry":null}, ol.format.KML.PLACEMARK_PARSERS_, node, objectStack); + if(!goog.isDef(object)) { + return undefined + } + var feature = new ol.Feature; + var id = node.getAttribute("id"); + if(!goog.isNull(id)) { + feature.setId(id) + } + feature.setValues(object); + feature.setStyle(this.featureStyleFunction_); + return feature +}; +ol.format.KML.prototype.readSharedStyle_ = function(node, objectStack) { + goog.asserts.assert(node.nodeType == goog.dom.NodeType.ELEMENT); + goog.asserts.assert(node.localName == "Style"); + var id = node.getAttribute("id"); + if(!goog.isNull(id)) { + var style = ol.format.KML.readStyle_(node, objectStack); + if(goog.isDef(style)) { + var styleUri; + if(goog.isDefAndNotNull(node.baseURI)) { + styleUri = goog.Uri.resolve(node.baseURI, "#" + id).toString() + }else { + styleUri = "#" + id + } + this.sharedStyles_[styleUri] = style + } + } +}; +ol.format.KML.prototype.readSharedStyleMap_ = function(node, objectStack) { + goog.asserts.assert(node.nodeType == goog.dom.NodeType.ELEMENT); + goog.asserts.assert(node.localName == "StyleMap"); + var id = node.getAttribute("id"); + if(goog.isNull(id)) { + return + } + var styleMapValue = ol.format.KML.readStyleMapValue_(node, objectStack); + if(!goog.isDef(styleMapValue)) { + return + } + var styleUri; + if(goog.isDefAndNotNull(node.baseURI)) { + styleUri = goog.Uri.resolve(node.baseURI, "#" + id).toString() + }else { + styleUri = "#" + id + } + this.sharedStyles_[styleUri] = styleMapValue +}; +ol.format.KML.prototype.readFeatureFromNode = function(node) { + goog.asserts.assert(node.nodeType == goog.dom.NodeType.ELEMENT); + if(goog.array.indexOf(ol.format.KML.NAMESPACE_URIS_, node.namespaceURI) == -1) { + return null + } + goog.asserts.assert(node.localName == "Placemark"); + var feature = this.readPlacemark_(node, []); + if(goog.isDef(feature)) { + return feature + }else { + return null + } +}; +ol.format.KML.prototype.readFeaturesFromNode = function(node) { + goog.asserts.assert(node.nodeType == goog.dom.NodeType.ELEMENT); + if(goog.array.indexOf(ol.format.KML.NAMESPACE_URIS_, node.namespaceURI) == -1) { + return[] + } + var features; + var localName = ol.xml.getLocalName(node); + if(localName == "Document" || localName == "Folder") { + features = this.readDocumentOrFolder_(node, []); + if(goog.isDef(features)) { + return features + }else { + return[] + } + }else { + if(localName == "Placemark") { + var feature = this.readPlacemark_(node, []); + if(goog.isDef(feature)) { + return[feature] + }else { + return[] + } + }else { + if(localName == "kml") { + features = []; + var n; + for(n = node.firstElementChild;!goog.isNull(n);n = n.nextElementSibling) { + var fs = this.readFeaturesFromNode(n); + if(goog.isDef(fs)) { + goog.array.extend(features, fs) + } + } + return features + }else { + return[] + } + } + } +}; +ol.format.KML.prototype.readName = function(source) { + if(ol.xml.isDocument(source)) { + return this.readNameFromDocument((source)) + }else { + if(ol.xml.isNode(source)) { + return this.readNameFromNode((source)) + }else { + if(goog.isString(source)) { + var doc = ol.xml.load(source); + return this.readNameFromDocument(doc) + }else { + goog.asserts.fail(); + return undefined + } + } + } +}; +ol.format.KML.prototype.readNameFromDocument = function(doc) { + var n; + for(n = doc.firstChild;!goog.isNull(n);n = n.nextSibling) { + if(n.nodeType == goog.dom.NodeType.ELEMENT) { + var name = this.readNameFromNode(n); + if(goog.isDef(name)) { + return name + } + } + } + return undefined +}; +ol.format.KML.prototype.readNameFromNode = function(node) { + var n; + for(n = node.firstElementChild;!goog.isNull(n);n = n.nextElementSibling) { + if(goog.array.indexOf(ol.format.KML.NAMESPACE_URIS_, n.namespaceURI) != -1 && n.localName == "name") { + return ol.format.XSD.readString(n) + } + } + for(n = node.firstElementChild;!goog.isNull(n);n = n.nextElementSibling) { + var localName = ol.xml.getLocalName(n); + if(goog.array.indexOf(ol.format.KML.NAMESPACE_URIS_, n.namespaceURI) != -1 && (localName == "Document" || localName == "Folder" || localName == "Placemark" || localName == "kml")) { + var name = this.readNameFromNode(n); + if(goog.isDef(name)) { + return name + } + } + } + return undefined +}; +ol.format.KML.prototype.readProjectionFromDocument = function(doc) { + return ol.proj.get("EPSG:4326") +}; +ol.format.KML.prototype.readProjectionFromNode = function(node) { + return ol.proj.get("EPSG:4326") +}; +goog.provide("ol.format.OSMXML"); +goog.require("goog.array"); +goog.require("goog.asserts"); +goog.require("goog.dom.NodeType"); +goog.require("goog.object"); +goog.require("ol.Feature"); +goog.require("ol.format.XMLFeature"); +goog.require("ol.geom.LineString"); +goog.require("ol.geom.Point"); +goog.require("ol.geom.Polygon"); +goog.require("ol.proj"); +goog.require("ol.xml"); +ol.format.OSMXML = function() { + goog.base(this) +}; +goog.inherits(ol.format.OSMXML, ol.format.XMLFeature); +ol.format.OSMXML.EXTENSIONS_ = [".osm"]; +ol.format.OSMXML.prototype.getExtensions = function() { + return ol.format.OSMXML.EXTENSIONS_ +}; +ol.format.OSMXML.readNode_ = function(node, objectStack) { + goog.asserts.assert(node.nodeType == goog.dom.NodeType.ELEMENT); + goog.asserts.assert(node.localName == "node"); + var state = (objectStack[objectStack.length - 1]); + var id = node.getAttribute("id"); + var coordinates = ([parseFloat(node.getAttribute("lon")), parseFloat(node.getAttribute("lat"))]); + goog.object.set(state.nodes, id, coordinates); + var values = ol.xml.pushParseAndPop({tags:{}}, ol.format.OSMXML.NODE_PARSERS_, node, objectStack); + if(!goog.object.isEmpty(values.tags)) { + var geometry = new ol.geom.Point(coordinates); + var feature = new ol.Feature(geometry); + feature.setId(id); + feature.setValues(values.tags); + state.features.push(feature) + } +}; +ol.format.OSMXML.readWay_ = function(node, objectStack) { + goog.asserts.assert(node.nodeType == goog.dom.NodeType.ELEMENT); + goog.asserts.assert(node.localName == "way"); + var id = node.getAttribute("id"); + var values = ol.xml.pushParseAndPop({ndrefs:[], tags:{}}, ol.format.OSMXML.WAY_PARSERS_, node, objectStack); + var state = (objectStack[objectStack.length - 1]); + var flatCoordinates = ([]); + for(var i = 0, ii = values.ndrefs.length;i < ii;i++) { + var point = goog.object.get(state.nodes, values.ndrefs[i]); + goog.array.extend(flatCoordinates, point) + } + var geometry; + if(values.ndrefs[0] == values.ndrefs[values.ndrefs.length - 1]) { + geometry = new ol.geom.Polygon(null); + geometry.setFlatCoordinates(ol.geom.GeometryLayout.XY, flatCoordinates, [flatCoordinates.length]) + }else { + geometry = new ol.geom.LineString(null); + geometry.setFlatCoordinates(ol.geom.GeometryLayout.XY, flatCoordinates) + } + var feature = new ol.Feature(geometry); + feature.setId(id); + feature.setValues(values.tags); + state.features.push(feature) +}; +ol.format.OSMXML.readNd_ = function(node, objectStack) { + goog.asserts.assert(node.nodeType == goog.dom.NodeType.ELEMENT); + goog.asserts.assert(node.localName == "nd"); + var values = (objectStack[objectStack.length - 1]); + values.ndrefs.push(node.getAttribute("ref")) +}; +ol.format.OSMXML.readTag_ = function(node, objectStack) { + goog.asserts.assert(node.nodeType == goog.dom.NodeType.ELEMENT); + goog.asserts.assert(node.localName == "tag"); + var values = (objectStack[objectStack.length - 1]); + goog.object.set(values.tags, node.getAttribute("k"), node.getAttribute("v")) +}; +ol.format.OSMXML.NAMESPACE_URIS_ = [null]; +ol.format.OSMXML.WAY_PARSERS_ = ol.xml.makeParsersNS(ol.format.OSMXML.NAMESPACE_URIS_, {"nd":ol.format.OSMXML.readNd_, "tag":ol.format.OSMXML.readTag_}); +ol.format.OSMXML.PARSERS_ = ol.xml.makeParsersNS(ol.format.OSMXML.NAMESPACE_URIS_, {"node":ol.format.OSMXML.readNode_, "way":ol.format.OSMXML.readWay_}); +ol.format.OSMXML.NODE_PARSERS_ = ol.xml.makeParsersNS(ol.format.OSMXML.NAMESPACE_URIS_, {"tag":ol.format.OSMXML.readTag_}); +ol.format.OSMXML.prototype.readFeaturesFromNode = function(node) { + goog.asserts.assert(node.nodeType == goog.dom.NodeType.ELEMENT); + if(node.localName == "osm") { + var state = ol.xml.pushParseAndPop({nodes:{}, features:[]}, ol.format.OSMXML.PARSERS_, node, []); + if(goog.isDef(state.features)) { + return state.features + } + } + return[] +}; +ol.format.OSMXML.prototype.readProjectionFromDocument = function(doc) { + return ol.proj.get("EPSG:4326") +}; +ol.format.OSMXML.prototype.readProjectionFromNode = function(node) { + return ol.proj.get("EPSG:4326") +}; +goog.provide("ol.format.Polyline"); +goog.require("goog.asserts"); +goog.require("ol.Feature"); +goog.require("ol.format.TextFeature"); +goog.require("ol.geom.LineString"); +goog.require("ol.geom.flat"); +goog.require("ol.proj"); +ol.format.Polyline = function() { + goog.base(this) +}; +goog.inherits(ol.format.Polyline, ol.format.TextFeature); +ol.format.Polyline.encodeFlatCoordinates = function(flatPoints, opt_dimension) { + var dimension = goog.isDef(opt_dimension) ? opt_dimension : 2; + return ol.format.Polyline.encodeDeltas(flatPoints, dimension) +}; +ol.format.Polyline.decodeFlatCoordinates = function(encoded, opt_dimension) { + var dimension = goog.isDef(opt_dimension) ? opt_dimension : 2; + return ol.format.Polyline.decodeDeltas(encoded, dimension) +}; +ol.format.Polyline.encodeDeltas = function(numbers, dimension, opt_factor) { + var factor = goog.isDef(opt_factor) ? opt_factor : 1E5; + var d; + var lastNumbers = new Array(dimension); + for(d = 0;d < dimension;++d) { + lastNumbers[d] = 0 + } + var i, ii; + for(i = 0, ii = numbers.length;i < ii;) { + for(d = 0;d < dimension;++d, ++i) { + var num = numbers[i]; + var delta = num - lastNumbers[d]; + lastNumbers[d] = num; + numbers[i] = delta + } + } + return ol.format.Polyline.encodeFloats(numbers, factor) +}; +ol.format.Polyline.decodeDeltas = function(encoded, dimension, opt_factor) { + var factor = goog.isDef(opt_factor) ? opt_factor : 1E5; + var d; + var lastNumbers = new Array(dimension); + for(d = 0;d < dimension;++d) { + lastNumbers[d] = 0 + } + var numbers = ol.format.Polyline.decodeFloats(encoded, factor); + var i, ii; + for(i = 0, ii = numbers.length;i < ii;) { + for(d = 0;d < dimension;++d, ++i) { + lastNumbers[d] += numbers[i]; + numbers[i] = lastNumbers[d] + } + } + return numbers +}; +ol.format.Polyline.encodeFloats = function(numbers, opt_factor) { + var factor = goog.isDef(opt_factor) ? opt_factor : 1E5; + var i, ii; + for(i = 0, ii = numbers.length;i < ii;++i) { + numbers[i] = Math.round(numbers[i] * factor) + } + return ol.format.Polyline.encodeSignedIntegers(numbers) +}; +ol.format.Polyline.decodeFloats = function(encoded, opt_factor) { + var factor = goog.isDef(opt_factor) ? opt_factor : 1E5; + var numbers = ol.format.Polyline.decodeSignedIntegers(encoded); + var i, ii; + for(i = 0, ii = numbers.length;i < ii;++i) { + numbers[i] /= factor + } + return numbers +}; +ol.format.Polyline.encodeSignedIntegers = function(numbers) { + var i, ii; + for(i = 0, ii = numbers.length;i < ii;++i) { + var num = numbers[i]; + numbers[i] = num < 0 ? ~(num << 1) : num << 1 + } + return ol.format.Polyline.encodeUnsignedIntegers(numbers) +}; +ol.format.Polyline.decodeSignedIntegers = function(encoded) { + var numbers = ol.format.Polyline.decodeUnsignedIntegers(encoded); + var i, ii; + for(i = 0, ii = numbers.length;i < ii;++i) { + var num = numbers[i]; + numbers[i] = num & 1 ? ~(num >> 1) : num >> 1 + } + return numbers +}; +ol.format.Polyline.encodeUnsignedIntegers = function(numbers) { + var encoded = ""; + var i, ii; + for(i = 0, ii = numbers.length;i < ii;++i) { + encoded += ol.format.Polyline.encodeUnsignedInteger(numbers[i]) + } + return encoded +}; +ol.format.Polyline.decodeUnsignedIntegers = function(encoded) { + var numbers = []; + var current = 0; + var shift = 0; + var i, ii; + for(i = 0, ii = encoded.length;i < ii;++i) { + var b = encoded.charCodeAt(i) - 63; + current |= (b & 31) << shift; + if(b < 32) { + numbers.push(current); + current = 0; + shift = 0 + }else { + shift += 5 + } + } + return numbers +}; +ol.format.Polyline.encodeUnsignedInteger = function(num) { + var value, encoded = ""; + while(num >= 32) { + value = (32 | num & 31) + 63; + encoded += String.fromCharCode(value); + num >>= 5 + } + value = num + 63; + encoded += String.fromCharCode(value); + return encoded +}; +ol.format.Polyline.prototype.readFeatureFromText = function(text) { + var geometry = this.readGeometryFromText(text); + return new ol.Feature(geometry) +}; +ol.format.Polyline.prototype.readFeaturesFromText = function(text) { + var feature = this.readFeatureFromText(text); + return[feature] +}; +ol.format.Polyline.prototype.readGeometryFromText = function(text) { + var flatCoordinates = ol.format.Polyline.decodeFlatCoordinates(text, 2); + var coordinates = ol.geom.flat.inflateCoordinates(flatCoordinates, 0, flatCoordinates.length, 2); + return new ol.geom.LineString(coordinates) +}; +ol.format.Polyline.prototype.readProjectionFromText = function(text) { + return ol.proj.get("EPSG:4326") +}; +ol.format.Polyline.prototype.writeFeatureText = function(feature) { + var geometry = feature.getGeometry(); + if(goog.isDefAndNotNull(geometry)) { + return this.writeGeometryText(geometry) + }else { + goog.asserts.fail(); + return"" + } +}; +ol.format.Polyline.prototype.writeFeaturesText = function(features) { + goog.asserts.assert(features.length == 1); + return this.writeFeatureText(features[0]) +}; +ol.format.Polyline.prototype.writeGeometryText = function(geometry) { + goog.asserts.assertInstanceof(geometry, ol.geom.LineString); + var flatCoordinates = geometry.getFlatCoordinates(); + var stride = geometry.getStride(); + return ol.format.Polyline.encodeFlatCoordinates(flatCoordinates, stride) +}; +goog.provide("ol.format.TopoJSON"); +goog.require("goog.array"); +goog.require("goog.asserts"); +goog.require("goog.object"); +goog.require("ol.Feature"); +goog.require("ol.format.JSONFeature"); +goog.require("ol.geom.LineString"); +goog.require("ol.geom.MultiLineString"); +goog.require("ol.geom.MultiPoint"); +goog.require("ol.geom.MultiPolygon"); +goog.require("ol.geom.Point"); +goog.require("ol.geom.Polygon"); +goog.require("ol.proj"); +ol.format.TopoJSON = function(opt_options) { + var options = goog.isDef(opt_options) ? opt_options : {}; + goog.base(this); + this.defaultProjection_ = ol.proj.get(options.defaultProjection || "EPSG:4326") +}; +goog.inherits(ol.format.TopoJSON, ol.format.JSONFeature); +ol.format.TopoJSON.EXTENSIONS_ = [".topojson"]; +ol.format.TopoJSON.concatenateArcs_ = function(indices, arcs) { + var coordinates = []; + var index, arc; + var i, ii; + var j, jj; + for(i = 0, ii = indices.length;i < ii;++i) { + index = indices[i]; + if(i > 0) { + coordinates.pop() + } + if(index >= 0) { + arc = arcs[index] + }else { + arc = arcs[~index].slice().reverse() + } + coordinates.push.apply(coordinates, arc) + } + for(j = 0, jj = coordinates.length;j < jj;++j) { + coordinates[j] = coordinates[j].slice() + } + return coordinates +}; +ol.format.TopoJSON.readPointGeometry_ = function(object, scale, translate) { + var coordinates = object.coordinates; + if(goog.isDef(scale) && goog.isDef(translate)) { + ol.format.TopoJSON.transformVertex_(coordinates, scale, translate) + } + return new ol.geom.Point(coordinates) +}; +ol.format.TopoJSON.readMultiPointGeometry_ = function(object, scale, translate) { + var coordinates = object.coordinates; + var i, ii; + if(goog.isDef(scale) && goog.isDef(translate)) { + for(i = 0, ii = coordinates.length;i < ii;++i) { + ol.format.TopoJSON.transformVertex_(coordinates[i], scale, translate) + } + } + return new ol.geom.MultiPoint(coordinates) +}; +ol.format.TopoJSON.readLineStringGeometry_ = function(object, arcs) { + var coordinates = ol.format.TopoJSON.concatenateArcs_(object.arcs, arcs); + return new ol.geom.LineString(goog.array.flatten(coordinates)) +}; +ol.format.TopoJSON.readMultiLineStringGeometry_ = function(object, arcs) { + var coordinates = []; + var i, ii; + for(i = 0, ii = object.arcs.length;i < ii;++i) { + coordinates[i] = ol.format.TopoJSON.concatenateArcs_(object.arcs[i], arcs) + } + return new ol.geom.MultiLineString(coordinates) +}; +ol.format.TopoJSON.readPolygonGeometry_ = function(object, arcs) { + var coordinates = []; + var i, ii; + for(i = 0, ii = object.arcs.length;i < ii;++i) { + coordinates[i] = ol.format.TopoJSON.concatenateArcs_(object.arcs[i], arcs) + } + return new ol.geom.Polygon(coordinates) +}; +ol.format.TopoJSON.readMultiPolygonGeometry_ = function(object, arcs) { + var coordinates = []; + var polyArray, ringCoords, j, jj; + var i, ii; + for(i = 0, ii = object.arcs.length;i < ii;++i) { + polyArray = object.arcs[i]; + ringCoords = []; + for(j = 0, jj = polyArray.length;j < jj;++j) { + ringCoords[j] = ol.format.TopoJSON.concatenateArcs_(polyArray[j], arcs) + } + coordinates[i] = ringCoords + } + return new ol.geom.MultiPolygon(coordinates) +}; +ol.format.TopoJSON.prototype.getExtensions = function() { + return ol.format.TopoJSON.EXTENSIONS_ +}; +ol.format.TopoJSON.readFeaturesFromGeometryCollection_ = function(collection, arcs, scale, translate) { + var geometries = collection.geometries; + var features = []; + var i, ii; + for(i = 0, ii = geometries.length;i < ii;++i) { + features[i] = ol.format.TopoJSON.readFeatureFromGeometry_(geometries[i], arcs, scale, translate) + } + return features +}; +ol.format.TopoJSON.readFeatureFromGeometry_ = function(object, arcs, scale, translate) { + var geometry; + var type = object.type; + var geometryReader = ol.format.TopoJSON.GEOMETRY_READERS_[type]; + goog.asserts.assert(goog.isDef(geometryReader)); + if(type === "Point" || type === "MultiPoint") { + geometry = geometryReader(object, scale, translate) + }else { + geometry = geometryReader(object, arcs) + } + var feature = new ol.Feature; + feature.setGeometry(geometry); + if(goog.isDef(object.id)) { + feature.setId(object.id) + } + if(goog.isDef(object.properties)) { + feature.setValues(object.properties) + } + return feature +}; +ol.format.TopoJSON.prototype.readFeaturesFromObject = function(object) { + if(object.type == "Topology") { + var topoJSONTopology = (object); + var transform, scale = null, translate = null; + if(goog.isDef(topoJSONTopology.transform)) { + transform = (topoJSONTopology.transform); + scale = transform.scale; + translate = transform.translate + } + var arcs = topoJSONTopology.arcs; + if(goog.isDef(transform)) { + ol.format.TopoJSON.transformArcs_(arcs, scale, translate) + } + var features = []; + var topoJSONFeatures = goog.object.getValues(topoJSONTopology.objects); + var i, ii; + var feature; + for(i = 0, ii = topoJSONFeatures.length;i < ii;++i) { + if(topoJSONFeatures[i].type === "GeometryCollection") { + feature = (topoJSONFeatures[i]); + features.push.apply(features, ol.format.TopoJSON.readFeaturesFromGeometryCollection_(feature, arcs, scale, translate)) + }else { + feature = (topoJSONFeatures[i]); + features.push(ol.format.TopoJSON.readFeatureFromGeometry_(feature, arcs, scale, translate)) + } + } + return features + }else { + return[] + } +}; +ol.format.TopoJSON.transformArcs_ = function(arcs, scale, translate) { + var i, ii; + for(i = 0, ii = arcs.length;i < ii;++i) { + ol.format.TopoJSON.transformArc_(arcs[i], scale, translate) + } +}; +ol.format.TopoJSON.transformArc_ = function(arc, scale, translate) { + var x = 0; + var y = 0; + var vertex; + var i, ii; + for(i = 0, ii = arc.length;i < ii;++i) { + vertex = arc[i]; + x += vertex[0]; + y += vertex[1]; + vertex[0] = x; + vertex[1] = y; + ol.format.TopoJSON.transformVertex_(vertex, scale, translate) + } +}; +ol.format.TopoJSON.transformVertex_ = function(vertex, scale, translate) { + vertex[0] = vertex[0] * scale[0] + translate[0]; + vertex[1] = vertex[1] * scale[1] + translate[1] +}; +ol.format.TopoJSON.prototype.readProjection = function(object) { + return this.defaultProjection_ +}; +ol.format.TopoJSON.GEOMETRY_READERS_ = {"Point":ol.format.TopoJSON.readPointGeometry_, "LineString":ol.format.TopoJSON.readLineStringGeometry_, "Polygon":ol.format.TopoJSON.readPolygonGeometry_, "MultiPoint":ol.format.TopoJSON.readMultiPointGeometry_, "MultiLineString":ol.format.TopoJSON.readMultiLineStringGeometry_, "MultiPolygon":ol.format.TopoJSON.readMultiPolygonGeometry_}; +goog.provide("goog.events.FileDropHandler"); +goog.provide("goog.events.FileDropHandler.EventType"); +goog.require("goog.array"); +goog.require("goog.dom"); +goog.require("goog.events"); +goog.require("goog.events.BrowserEvent"); +goog.require("goog.events.EventHandler"); +goog.require("goog.events.EventTarget"); +goog.require("goog.events.EventType"); +goog.require("goog.log"); +goog.events.FileDropHandler = function(element, opt_preventDropOutside) { + goog.events.EventTarget.call(this); + this.eventHandler_ = new goog.events.EventHandler(this); + var doc = element; + if(opt_preventDropOutside) { + doc = goog.dom.getOwnerDocument(element) + } + this.eventHandler_.listen(doc, goog.events.EventType.DRAGENTER, this.onDocDragEnter_); + if(doc != element) { + this.eventHandler_.listen(doc, goog.events.EventType.DRAGOVER, this.onDocDragOver_) + } + this.eventHandler_.listen(element, goog.events.EventType.DRAGOVER, this.onElemDragOver_); + this.eventHandler_.listen(element, goog.events.EventType.DROP, this.onElemDrop_) +}; +goog.inherits(goog.events.FileDropHandler, goog.events.EventTarget); +goog.events.FileDropHandler.prototype.dndContainsFiles_ = false; +goog.events.FileDropHandler.prototype.logger_ = goog.log.getLogger("goog.events.FileDropHandler"); +goog.events.FileDropHandler.EventType = {DROP:goog.events.EventType.DROP}; +goog.events.FileDropHandler.prototype.disposeInternal = function() { + goog.events.FileDropHandler.superClass_.disposeInternal.call(this); + this.eventHandler_.dispose() +}; +goog.events.FileDropHandler.prototype.dispatch_ = function(e) { + goog.log.fine(this.logger_, "Firing DROP event..."); + var event = new goog.events.BrowserEvent(e.getBrowserEvent()); + event.type = goog.events.FileDropHandler.EventType.DROP; + this.dispatchEvent(event) +}; +goog.events.FileDropHandler.prototype.onDocDragEnter_ = function(e) { + goog.log.log(this.logger_, goog.log.Level.FINER, '"' + e.target.id + '" (' + e.target + ") dispatched: " + e.type); + var dt = e.getBrowserEvent().dataTransfer; + this.dndContainsFiles_ = !!(dt && (dt.types && (goog.array.contains(dt.types, "Files") || goog.array.contains(dt.types, "public.file-url")) || dt.files && dt.files.length > 0)); + if(this.dndContainsFiles_) { + e.preventDefault() + } + goog.log.log(this.logger_, goog.log.Level.FINER, "dndContainsFiles_: " + this.dndContainsFiles_) +}; +goog.events.FileDropHandler.prototype.onDocDragOver_ = function(e) { + goog.log.log(this.logger_, goog.log.Level.FINEST, '"' + e.target.id + '" (' + e.target + ") dispatched: " + e.type); + if(this.dndContainsFiles_) { + e.preventDefault(); + var dt = e.getBrowserEvent().dataTransfer; + dt.dropEffect = "none" + } +}; +goog.events.FileDropHandler.prototype.onElemDragOver_ = function(e) { + goog.log.log(this.logger_, goog.log.Level.FINEST, '"' + e.target.id + '" (' + e.target + ") dispatched: " + e.type); + if(this.dndContainsFiles_) { + e.preventDefault(); + e.stopPropagation(); + var dt = e.getBrowserEvent().dataTransfer; + dt.effectAllowed = "all"; + dt.dropEffect = "copy" + } +}; +goog.events.FileDropHandler.prototype.onElemDrop_ = function(e) { + goog.log.log(this.logger_, goog.log.Level.FINER, '"' + e.target.id + '" (' + e.target + ") dispatched: " + e.type); + if(this.dndContainsFiles_) { + e.preventDefault(); + e.stopPropagation(); + this.dispatch_(e) + } +}; +/* + Portions of this code are from MochiKit, received by + The Closure Authors under the MIT license. All other code is Copyright + 2005-2009 The Closure Authors. All Rights Reserved. +*/ +goog.provide("goog.async.Deferred"); +goog.provide("goog.async.Deferred.AlreadyCalledError"); +goog.provide("goog.async.Deferred.CanceledError"); +goog.require("goog.array"); +goog.require("goog.asserts"); +goog.require("goog.debug.Error"); +goog.require("goog.functions"); +goog.async.Deferred = function(opt_onCancelFunction, opt_defaultScope) { + this.sequence_ = []; + this.onCancelFunction_ = opt_onCancelFunction; + this.defaultScope_ = opt_defaultScope || null; + if(goog.async.Deferred.LONG_STACK_TRACES) { + this.constructorStack_ = null; + if(Error.captureStackTrace) { + var target = {stack:""}; + Error.captureStackTrace(target, goog.async.Deferred); + if(typeof target.stack == "string") { + this.constructorStack_ = target.stack.replace(/^[^\n]*\n/, "") + } + } + } +}; +goog.async.Deferred.prototype.fired_ = false; +goog.async.Deferred.prototype.hadError_ = false; +goog.async.Deferred.prototype.result_; +goog.async.Deferred.prototype.blocked_ = false; +goog.async.Deferred.prototype.blocking_ = false; +goog.async.Deferred.prototype.silentlyCanceled_ = false; +goog.async.Deferred.prototype.unhandledExceptionTimeoutId_; +goog.async.Deferred.prototype.parent_; +goog.async.Deferred.prototype.branches_ = 0; +goog.define("goog.async.Deferred.STRICT_ERRORS", false); +goog.define("goog.async.Deferred.LONG_STACK_TRACES", goog.DEBUG); +goog.async.Deferred.prototype.cancel = function(opt_deepCancel) { + if(!this.hasFired()) { + if(this.parent_) { + var parent = this.parent_; + delete this.parent_; + if(opt_deepCancel) { + parent.cancel(opt_deepCancel) + }else { + parent.branchCancel_() + } + } + if(this.onCancelFunction_) { + this.onCancelFunction_.call(this.defaultScope_, this) + }else { + this.silentlyCanceled_ = true + } + if(!this.hasFired()) { + this.errback(new goog.async.Deferred.CanceledError(this)) + } + }else { + if(this.result_ instanceof goog.async.Deferred) { + this.result_.cancel() + } + } +}; +goog.async.Deferred.prototype.branchCancel_ = function() { + this.branches_--; + if(this.branches_ <= 0) { + this.cancel() + } +}; +goog.async.Deferred.prototype.continue_ = function(isSuccess, res) { + this.blocked_ = false; + this.updateResult_(isSuccess, res) +}; +goog.async.Deferred.prototype.updateResult_ = function(isSuccess, res) { + this.fired_ = true; + this.result_ = res; + this.hadError_ = !isSuccess; + this.fire_() +}; +goog.async.Deferred.prototype.check_ = function() { + if(this.hasFired()) { + if(!this.silentlyCanceled_) { + throw new goog.async.Deferred.AlreadyCalledError(this); + } + this.silentlyCanceled_ = false + } +}; +goog.async.Deferred.prototype.callback = function(opt_result) { + this.check_(); + this.assertNotDeferred_(opt_result); + this.updateResult_(true, opt_result) +}; +goog.async.Deferred.prototype.errback = function(opt_result) { + this.check_(); + this.assertNotDeferred_(opt_result); + this.makeStackTraceLong_(opt_result); + this.updateResult_(false, opt_result) +}; +goog.async.Deferred.prototype.makeStackTraceLong_ = function(error) { + if(!goog.async.Deferred.LONG_STACK_TRACES) { + return + } + if(this.constructorStack_ && goog.isObject(error) && error.stack && /^[^\n]+(\n [^\n]+)+/.test(error.stack)) { + error.stack = error.stack + "\nDEFERRED OPERATION:\n" + this.constructorStack_ + } +}; +goog.async.Deferred.prototype.assertNotDeferred_ = function(obj) { + goog.asserts.assert(!(obj instanceof goog.async.Deferred), "An execution sequence may not be initiated with a blocking Deferred.") +}; +goog.async.Deferred.prototype.addCallback = function(cb, opt_scope) { + return this.addCallbacks(cb, null, opt_scope) +}; +goog.async.Deferred.prototype.addErrback = function(eb, opt_scope) { + return this.addCallbacks(null, eb, opt_scope) +}; +goog.async.Deferred.prototype.addBoth = function(f, opt_scope) { + return this.addCallbacks(f, f, opt_scope) +}; +goog.async.Deferred.prototype.addCallbacks = function(cb, eb, opt_scope) { + goog.asserts.assert(!this.blocking_, "Blocking Deferreds can not be re-used"); + this.sequence_.push([cb, eb, opt_scope]); + if(this.hasFired()) { + this.fire_() + } + return this +}; +goog.async.Deferred.prototype.chainDeferred = function(otherDeferred) { + this.addCallbacks(otherDeferred.callback, otherDeferred.errback, otherDeferred); + return this +}; +goog.async.Deferred.prototype.awaitDeferred = function(otherDeferred) { + return this.addCallback(goog.bind(otherDeferred.branch, otherDeferred)) +}; +goog.async.Deferred.prototype.branch = function(opt_propagateCancel) { + var d = new goog.async.Deferred; + this.chainDeferred(d); + if(opt_propagateCancel) { + d.parent_ = this; + this.branches_++ + } + return d +}; +goog.async.Deferred.prototype.hasFired = function() { + return this.fired_ +}; +goog.async.Deferred.prototype.isError = function(res) { + return res instanceof Error +}; +goog.async.Deferred.prototype.hasErrback_ = function() { + return goog.array.some(this.sequence_, function(sequenceRow) { + return goog.isFunction(sequenceRow[1]) + }) +}; +goog.async.Deferred.prototype.fire_ = function() { + if(this.unhandledExceptionTimeoutId_ && this.hasFired() && this.hasErrback_()) { + goog.global.clearTimeout(this.unhandledExceptionTimeoutId_); + delete this.unhandledExceptionTimeoutId_ + } + if(this.parent_) { + this.parent_.branches_--; + delete this.parent_ + } + var res = this.result_; + var unhandledException = false; + var isNewlyBlocked = false; + while(this.sequence_.length && !this.blocked_) { + var sequenceEntry = this.sequence_.shift(); + var callback = sequenceEntry[0]; + var errback = sequenceEntry[1]; + var scope = sequenceEntry[2]; + var f = this.hadError_ ? errback : callback; + if(f) { + try { + var ret = f.call(scope || this.defaultScope_, res); + if(goog.isDef(ret)) { + this.hadError_ = this.hadError_ && (ret == res || this.isError(ret)); + this.result_ = res = ret + } + if(res instanceof goog.async.Deferred) { + isNewlyBlocked = true; + this.blocked_ = true + } + }catch(ex) { + res = ex; + this.hadError_ = true; + this.makeStackTraceLong_(res); + if(!this.hasErrback_()) { + unhandledException = true + } + } + } + } + this.result_ = res; + if(isNewlyBlocked) { + res.addCallbacks(goog.bind(this.continue_, this, true), goog.bind(this.continue_, this, false)); + res.blocking_ = true + }else { + if(goog.async.Deferred.STRICT_ERRORS && this.isError(res) && !(res instanceof goog.async.Deferred.CanceledError)) { + this.hadError_ = true; + unhandledException = true + } + } + if(unhandledException) { + this.unhandledExceptionTimeoutId_ = goog.global.setTimeout(goog.functions.fail(res), 0) + } +}; +goog.async.Deferred.succeed = function(opt_result) { + var d = new goog.async.Deferred; + d.callback(opt_result); + return d +}; +goog.async.Deferred.fail = function(res) { + var d = new goog.async.Deferred; + d.errback(res); + return d +}; +goog.async.Deferred.canceled = function() { + var d = new goog.async.Deferred; + d.cancel(); + return d +}; +goog.async.Deferred.when = function(value, callback, opt_scope) { + if(value instanceof goog.async.Deferred) { + return value.branch(true).addCallback(callback, opt_scope) + }else { + return goog.async.Deferred.succeed(value).addCallback(callback, opt_scope) + } +}; +goog.async.Deferred.AlreadyCalledError = function(deferred) { + goog.debug.Error.call(this); + this.deferred = deferred +}; +goog.inherits(goog.async.Deferred.AlreadyCalledError, goog.debug.Error); +goog.async.Deferred.AlreadyCalledError.prototype.message = "Deferred has already fired"; +goog.async.Deferred.AlreadyCalledError.prototype.name = "AlreadyCalledError"; +goog.async.Deferred.CanceledError = function(deferred) { + goog.debug.Error.call(this); + this.deferred = deferred +}; +goog.inherits(goog.async.Deferred.CanceledError, goog.debug.Error); +goog.async.Deferred.CanceledError.prototype.message = "Deferred was canceled"; +goog.async.Deferred.CanceledError.prototype.name = "CanceledError"; +goog.provide("goog.fs.Error"); +goog.provide("goog.fs.Error.ErrorCode"); +goog.require("goog.debug.Error"); +goog.require("goog.string"); +goog.fs.Error = function(code, action) { + goog.base(this, goog.string.subs("Error %s: %s", action, goog.fs.Error.getDebugMessage(code))); + this.code = (code) +}; +goog.inherits(goog.fs.Error, goog.debug.Error); +goog.fs.Error.ErrorCode = {NOT_FOUND:1, SECURITY:2, ABORT:3, NOT_READABLE:4, ENCODING:5, NO_MODIFICATION_ALLOWED:6, INVALID_STATE:7, SYNTAX:8, INVALID_MODIFICATION:9, QUOTA_EXCEEDED:10, TYPE_MISMATCH:11, PATH_EXISTS:12}; +goog.fs.Error.getDebugMessage = function(errorCode) { + switch(errorCode) { + case goog.fs.Error.ErrorCode.NOT_FOUND: + return"File or directory not found"; + case goog.fs.Error.ErrorCode.SECURITY: + return"Insecure or disallowed operation"; + case goog.fs.Error.ErrorCode.ABORT: + return"Operation aborted"; + case goog.fs.Error.ErrorCode.NOT_READABLE: + return"File or directory not readable"; + case goog.fs.Error.ErrorCode.ENCODING: + return"Invalid encoding"; + case goog.fs.Error.ErrorCode.NO_MODIFICATION_ALLOWED: + return"Cannot modify file or directory"; + case goog.fs.Error.ErrorCode.INVALID_STATE: + return"Invalid state"; + case goog.fs.Error.ErrorCode.SYNTAX: + return"Invalid line-ending specifier"; + case goog.fs.Error.ErrorCode.INVALID_MODIFICATION: + return"Invalid modification"; + case goog.fs.Error.ErrorCode.QUOTA_EXCEEDED: + return"Quota exceeded"; + case goog.fs.Error.ErrorCode.TYPE_MISMATCH: + return"Invalid filetype"; + case goog.fs.Error.ErrorCode.PATH_EXISTS: + return"File or directory already exists at specified path"; + default: + return"Unrecognized error" + } +}; +goog.provide("goog.fs.ProgressEvent"); +goog.require("goog.events.Event"); +goog.fs.ProgressEvent = function(event, target) { + goog.base(this, event.type, target); + this.event_ = event +}; +goog.inherits(goog.fs.ProgressEvent, goog.events.Event); +goog.fs.ProgressEvent.prototype.isLengthComputable = function() { + return this.event_.lengthComputable +}; +goog.fs.ProgressEvent.prototype.getLoaded = function() { + return this.event_.loaded +}; +goog.fs.ProgressEvent.prototype.getTotal = function() { + return this.event_.total +}; +goog.provide("goog.fs.FileReader"); +goog.provide("goog.fs.FileReader.EventType"); +goog.provide("goog.fs.FileReader.ReadyState"); +goog.require("goog.async.Deferred"); +goog.require("goog.events.Event"); +goog.require("goog.events.EventTarget"); +goog.require("goog.fs.Error"); +goog.require("goog.fs.ProgressEvent"); +goog.fs.FileReader = function() { + goog.base(this); + this.reader_ = new FileReader; + this.reader_.onloadstart = goog.bind(this.dispatchProgressEvent_, this); + this.reader_.onprogress = goog.bind(this.dispatchProgressEvent_, this); + this.reader_.onload = goog.bind(this.dispatchProgressEvent_, this); + this.reader_.onabort = goog.bind(this.dispatchProgressEvent_, this); + this.reader_.onerror = goog.bind(this.dispatchProgressEvent_, this); + this.reader_.onloadend = goog.bind(this.dispatchProgressEvent_, this) +}; +goog.inherits(goog.fs.FileReader, goog.events.EventTarget); +goog.fs.FileReader.ReadyState = {INIT:0, LOADING:1, DONE:2}; +goog.fs.FileReader.EventType = {LOAD_START:"loadstart", PROGRESS:"progress", LOAD:"load", ABORT:"abort", ERROR:"error", LOAD_END:"loadend"}; +goog.fs.FileReader.prototype.abort = function() { + try { + this.reader_.abort() + }catch(e) { + throw new goog.fs.Error(e.code, "aborting read"); + } +}; +goog.fs.FileReader.prototype.getReadyState = function() { + return(this.reader_.readyState) +}; +goog.fs.FileReader.prototype.getResult = function() { + return this.reader_.result +}; +goog.fs.FileReader.prototype.getError = function() { + return this.reader_.error && new goog.fs.Error(this.reader_.error.code, "reading file") +}; +goog.fs.FileReader.prototype.dispatchProgressEvent_ = function(event) { + this.dispatchEvent(new goog.fs.ProgressEvent(event, this)) +}; +goog.fs.FileReader.prototype.disposeInternal = function() { + goog.base(this, "disposeInternal"); + delete this.reader_ +}; +goog.fs.FileReader.prototype.readAsBinaryString = function(blob) { + this.reader_.readAsBinaryString(blob) +}; +goog.fs.FileReader.readAsBinaryString = function(blob) { + var reader = new goog.fs.FileReader; + var d = goog.fs.FileReader.createDeferred_(reader); + reader.readAsBinaryString(blob); + return d +}; +goog.fs.FileReader.prototype.readAsArrayBuffer = function(blob) { + this.reader_.readAsArrayBuffer(blob) +}; +goog.fs.FileReader.readAsArrayBuffer = function(blob) { + var reader = new goog.fs.FileReader; + var d = goog.fs.FileReader.createDeferred_(reader); + reader.readAsArrayBuffer(blob); + return d +}; +goog.fs.FileReader.prototype.readAsText = function(blob, opt_encoding) { + this.reader_.readAsText(blob, opt_encoding) +}; +goog.fs.FileReader.readAsText = function(blob, opt_encoding) { + var reader = new goog.fs.FileReader; + var d = goog.fs.FileReader.createDeferred_(reader); + reader.readAsText(blob, opt_encoding); + return d +}; +goog.fs.FileReader.prototype.readAsDataUrl = function(blob) { + this.reader_.readAsDataURL(blob) +}; +goog.fs.FileReader.readAsDataUrl = function(blob) { + var reader = new goog.fs.FileReader; + var d = goog.fs.FileReader.createDeferred_(reader); + reader.readAsDataUrl(blob); + return d +}; +goog.fs.FileReader.createDeferred_ = function(reader) { + var deferred = new goog.async.Deferred; + reader.addEventListener(goog.fs.FileReader.EventType.LOAD_END, goog.partial(function(d, r, e) { + var result = r.getResult(); + var error = r.getError(); + if(result != null && !error) { + d.callback(result) + }else { + d.errback(error) + } + r.dispose() + }, deferred, reader)); + return deferred +}; +goog.provide("ol.interaction.DragAndDrop"); +goog.provide("ol.interaction.DragAndDropEvent"); +goog.require("goog.array"); +goog.require("goog.asserts"); +goog.require("goog.events"); +goog.require("goog.events.Event"); +goog.require("goog.events.FileDropHandler"); +goog.require("goog.events.FileDropHandler.EventType"); +goog.require("goog.fs.FileReader"); +goog.require("goog.functions"); +goog.require("ol.interaction.Interaction"); +goog.require("ol.proj"); +ol.interaction.DragAndDrop = function(opt_options) { + var options = goog.isDef(opt_options) ? opt_options : {}; + goog.base(this); + this.formatConstructors_ = goog.isDef(options.formatConstructors) ? options.formatConstructors : []; + this.reprojectTo_ = goog.isDef(options.reprojectTo) ? ol.proj.get(options.reprojectTo) : null; + this.fileDropHandler_ = null; + this.dropListenKey_ = undefined +}; +goog.inherits(ol.interaction.DragAndDrop, ol.interaction.Interaction); +ol.interaction.DragAndDrop.prototype.disposeInternal = function() { + if(goog.isDef(this.dropListenKey_)) { + goog.events.unlistenByKey(this.dropListenKey_) + } + goog.base(this, "disposeInternal") +}; +ol.interaction.DragAndDrop.prototype.handleDrop_ = function(event) { + var files = event.getBrowserEvent().dataTransfer.files; + var i, ii; + for(i = 0, ii = files.length;i < ii;++i) { + var reader = goog.fs.FileReader.readAsText(files[i], ""); + reader.addCallback(this.handleResult_, this) + } +}; +ol.interaction.DragAndDrop.prototype.handleResult_ = function(result) { + var map = this.getMap(); + goog.asserts.assert(!goog.isNull(map)); + var projection = this.reprojectTo_; + if(goog.isNull(projection)) { + var view = map.getView(); + goog.asserts.assert(goog.isDef(view)); + projection = view.getView2D().getProjection(); + goog.asserts.assert(goog.isDef(projection)) + } + var formatConstructors = this.formatConstructors_; + var features = []; + var i, ii; + for(i = 0, ii = formatConstructors.length;i < ii;++i) { + var formatConstructor = formatConstructors[i]; + var format = new formatConstructor; + var readFeatures = this.tryReadFeatures_(format, result); + if(!goog.isNull(readFeatures)) { + var featureProjection = format.readProjection(result); + var transform = ol.proj.getTransform(featureProjection, projection); + var j, jj; + for(j = 0, jj = readFeatures.length;j < jj;++j) { + var feature = readFeatures[j]; + var geometry = feature.getGeometry(); + if(!goog.isNull(geometry)) { + geometry.transform(transform) + } + features.push(feature) + } + } + } + this.dispatchEvent(new ol.interaction.DragAndDropEvent(ol.interaction.DragAndDropEventType.ADD_FEATURES, this, features, projection)) +}; +ol.interaction.DragAndDrop.prototype.handleMapBrowserEvent = goog.functions.TRUE; +ol.interaction.DragAndDrop.prototype.setMap = function(map) { + if(goog.isDef(this.dropListenKey_)) { + goog.events.unlistenByKey(this.dropListenKey_); + this.dropListenKey_ = undefined + } + if(!goog.isNull(this.fileDropHandler_)) { + goog.dispose(this.fileDropHandler_); + this.fileDropHandler_ = null + } + goog.asserts.assert(!goog.isDef(this.dropListenKey_)); + goog.base(this, "setMap", map); + if(!goog.isNull(map)) { + this.fileDropHandler_ = new goog.events.FileDropHandler(map.getViewport()); + this.dropListenKey_ = goog.events.listen(this.fileDropHandler_, goog.events.FileDropHandler.EventType.DROP, this.handleDrop_, false, this) + } +}; +ol.interaction.DragAndDrop.prototype.tryReadFeatures_ = function(format, text) { + try { + return format.readFeatures(text) + }catch(e) { + return null + } +}; +ol.interaction.DragAndDropEventType = {ADD_FEATURES:"addfeatures"}; +ol.interaction.DragAndDropEvent = function(type, opt_target, opt_features, opt_projection) { + goog.base(this, type, opt_target); + this.features = opt_features; + this.projection = opt_projection +}; +goog.inherits(ol.interaction.DragAndDropEvent, goog.events.Event); +goog.provide("goog.math.Vec2"); +goog.require("goog.math"); +goog.require("goog.math.Coordinate"); +goog.math.Vec2 = function(x, y) { + this.x = x; + this.y = y +}; +goog.inherits(goog.math.Vec2, goog.math.Coordinate); +goog.math.Vec2.randomUnit = function() { + var angle = Math.random() * Math.PI * 2; + return new goog.math.Vec2(Math.cos(angle), Math.sin(angle)) +}; +goog.math.Vec2.random = function() { + var mag = Math.sqrt(Math.random()); + var angle = Math.random() * Math.PI * 2; + return new goog.math.Vec2(Math.cos(angle) * mag, Math.sin(angle) * mag) +}; +goog.math.Vec2.fromCoordinate = function(a) { + return new goog.math.Vec2(a.x, a.y) +}; +goog.math.Vec2.prototype.clone = function() { + return new goog.math.Vec2(this.x, this.y) +}; +goog.math.Vec2.prototype.magnitude = function() { + return Math.sqrt(this.x * this.x + this.y * this.y) +}; +goog.math.Vec2.prototype.squaredMagnitude = function() { + return this.x * this.x + this.y * this.y +}; +goog.math.Vec2.prototype.scale = (goog.math.Coordinate.prototype.scale); +goog.math.Vec2.prototype.invert = function() { + this.x = -this.x; + this.y = -this.y; + return this +}; +goog.math.Vec2.prototype.normalize = function() { + return this.scale(1 / this.magnitude()) +}; +goog.math.Vec2.prototype.add = function(b) { + this.x += b.x; + this.y += b.y; + return this +}; +goog.math.Vec2.prototype.subtract = function(b) { + this.x -= b.x; + this.y -= b.y; + return this +}; +goog.math.Vec2.prototype.rotate = function(angle) { + var cos = Math.cos(angle); + var sin = Math.sin(angle); + var newX = this.x * cos - this.y * sin; + var newY = this.y * cos + this.x * sin; + this.x = newX; + this.y = newY; + return this +}; +goog.math.Vec2.rotateAroundPoint = function(v, axisPoint, angle) { + var res = v.clone(); + return res.subtract(axisPoint).rotate(angle).add(axisPoint) +}; +goog.math.Vec2.prototype.equals = function(b) { + return this == b || !!b && this.x == b.x && this.y == b.y +}; +goog.math.Vec2.distance = goog.math.Coordinate.distance; +goog.math.Vec2.squaredDistance = goog.math.Coordinate.squaredDistance; +goog.math.Vec2.equals = goog.math.Coordinate.equals; +goog.math.Vec2.sum = function(a, b) { + return new goog.math.Vec2(a.x + b.x, a.y + b.y) +}; +goog.math.Vec2.difference = function(a, b) { + return new goog.math.Vec2(a.x - b.x, a.y - b.y) +}; +goog.math.Vec2.dot = function(a, b) { + return a.x * b.x + a.y * b.y +}; +goog.math.Vec2.lerp = function(a, b, x) { + return new goog.math.Vec2(goog.math.lerp(a.x, b.x, x), goog.math.lerp(a.y, b.y, x)) +}; +goog.provide("ol.interaction.DragRotateAndZoom"); +goog.require("goog.asserts"); +goog.require("goog.math.Vec2"); +goog.require("ol.ViewHint"); +goog.require("ol.events.ConditionType"); +goog.require("ol.events.condition"); +goog.require("ol.interaction.Drag"); +goog.require("ol.interaction.Interaction"); +ol.interaction.DRAGROTATEANDZOOM_ANIMATION_DURATION = 400; +ol.interaction.DragRotateAndZoom = function(opt_options) { + var options = goog.isDef(opt_options) ? opt_options : {}; + goog.base(this); + this.condition_ = goog.isDef(options.condition) ? options.condition : ol.events.condition.shiftKeyOnly; + this.lastAngle_ = undefined; + this.lastMagnitude_ = undefined; + this.lastScaleDelta_ = 0 +}; +goog.inherits(ol.interaction.DragRotateAndZoom, ol.interaction.Drag); +ol.interaction.DragRotateAndZoom.prototype.handleDrag = function(mapBrowserEvent) { + var map = mapBrowserEvent.map; + var size = map.getSize(); + var offset = mapBrowserEvent.pixel; + var delta = new goog.math.Vec2(offset[0] - size[0] / 2, size[1] / 2 - offset[1]); + var theta = Math.atan2(delta.y, delta.x); + var magnitude = delta.magnitude(); + var view = map.getView().getView2D(); + var view2DState = view.getView2DState(); + map.render(); + if(goog.isDef(this.lastAngle_)) { + var angleDelta = theta - this.lastAngle_; + ol.interaction.Interaction.rotateWithoutConstraints(map, view, view2DState.rotation - angleDelta) + } + this.lastAngle_ = theta; + if(goog.isDef(this.lastMagnitude_)) { + var resolution = this.lastMagnitude_ * (view2DState.resolution / magnitude); + ol.interaction.Interaction.zoomWithoutConstraints(map, view, resolution) + } + if(goog.isDef(this.lastMagnitude_)) { + this.lastScaleDelta_ = this.lastMagnitude_ / magnitude + } + this.lastMagnitude_ = magnitude +}; +ol.interaction.DragRotateAndZoom.prototype.handleDragEnd = function(mapBrowserEvent) { + var map = mapBrowserEvent.map; + var view = map.getView(); + view.setHint(ol.ViewHint.INTERACTING, -1); + var view2D = view.getView2D(); + var view2DState = view2D.getView2DState(); + var direction = this.lastScaleDelta_ - 1; + ol.interaction.Interaction.rotate(map, view2D, view2DState.rotation); + ol.interaction.Interaction.zoom(map, view2D, view2DState.resolution, undefined, ol.interaction.DRAGROTATEANDZOOM_ANIMATION_DURATION, direction); + this.lastScaleDelta_ = 0; + return true +}; +ol.interaction.DragRotateAndZoom.prototype.handleDragStart = function(mapBrowserEvent) { + if(this.condition_(mapBrowserEvent)) { + mapBrowserEvent.map.getView().setHint(ol.ViewHint.INTERACTING, 1); + this.lastAngle_ = undefined; + this.lastMagnitude_ = undefined; + return true + }else { + return false + } +}; +goog.provide("ol.interaction.Modify"); +goog.require("goog.array"); +goog.require("goog.asserts"); +goog.require("goog.events"); +goog.require("ol.Collection"); +goog.require("ol.CollectionEventType"); +goog.require("ol.Feature"); +goog.require("ol.FeatureOverlay"); +goog.require("ol.MapBrowserEvent.EventType"); +goog.require("ol.ViewHint"); +goog.require("ol.coordinate"); +goog.require("ol.extent"); +goog.require("ol.geom.GeometryType"); +goog.require("ol.geom.LineString"); +goog.require("ol.geom.MultiLineString"); +goog.require("ol.geom.MultiPoint"); +goog.require("ol.geom.MultiPolygon"); +goog.require("ol.geom.Point"); +goog.require("ol.geom.Polygon"); +goog.require("ol.interaction.Drag"); +goog.require("ol.structs.RBush"); +ol.interaction.SegmentDataType; +ol.interaction.Modify = function(options) { + goog.base(this); + this.vertexFeature_ = null; + this.vertexSegments_ = null; + this.modifiable_ = false; + this.lastPixel_ = null; + this.rBush_ = null; + this.pixelTolerance_ = goog.isDef(options.pixelTolerance) ? options.pixelTolerance : 20; + this.dragSegments_ = null; + this.overlay_ = new ol.FeatureOverlay({style:options.style}); + this.features_ = options.features; + goog.events.listen(this.features_, ol.CollectionEventType.ADD, this.addFeature_, false, this); + goog.events.listen(this.features_, ol.CollectionEventType.REMOVE, this.removeFeature_, false, this); + this.SEGMENT_WRITERS_ = {"Point":this.writePointGeometry_, "LineString":this.writeLineStringGeometry_, "LinearRing":this.writeLineStringGeometry_, "Polygon":this.writePolygonGeometry_, "MultiPoint":this.writeMultiPointGeometry_, "MultiLineString":this.writeMultiLineStringGeometry_, "MultiPolygon":this.writeMultiPolygonGeometry_, "GeometryCollection":this.writeGeometryCollectionGeometry_} +}; +goog.inherits(ol.interaction.Modify, ol.interaction.Drag); +ol.interaction.Modify.prototype.setMap = function(map) { + if(!goog.isNull(map)) { + if(goog.isNull(this.rBush_)) { + this.rBush_ = new ol.structs.RBush + } + }else { + this.rBush_ = null + } + this.overlay_.setMap(map); + goog.base(this, "setMap", map) +}; +ol.interaction.Modify.prototype.addFeature_ = function(evt) { + var feature = evt.element; + goog.asserts.assertInstanceof(feature, ol.Feature); + var geometry = feature.getGeometry(); + if(goog.isDef(this.SEGMENT_WRITERS_[geometry.getType()])) { + this.SEGMENT_WRITERS_[geometry.getType()].call(this, feature, geometry) + } + this.handleMouseAtPixel_(this.lastPixel_, this.getMap()) +}; +ol.interaction.Modify.prototype.writePointGeometry_ = function(feature, geometry) { + var coordinates = geometry.getCoordinates(); + var segmentData = ({feature:feature, geometry:geometry, segment:[coordinates, coordinates]}); + this.rBush_.insert(geometry.getExtent(), segmentData) +}; +ol.interaction.Modify.prototype.writeMultiPointGeometry_ = function(feature, geometry) { + var points = geometry.getCoordinates(); + var coordinates, i, ii, segmentData; + for(i = 0, ii = points.length;i < ii;++i) { + coordinates = points[i]; + segmentData = ({feature:feature, geometry:geometry, depth:[i], index:i, segment:[coordinates, coordinates]}); + this.rBush_.insert(geometry.getExtent(), segmentData) + } +}; +ol.interaction.Modify.prototype.writeLineStringGeometry_ = function(feature, geometry) { + var coordinates = geometry.getCoordinates(); + var i, ii, segment, segmentData; + for(i = 0, ii = coordinates.length - 1;i < ii;++i) { + segment = coordinates.slice(i, i + 2); + segmentData = ({feature:feature, geometry:geometry, index:i, segment:segment}); + this.rBush_.insert(ol.extent.boundingExtent(segment), segmentData) + } +}; +ol.interaction.Modify.prototype.writeMultiLineStringGeometry_ = function(feature, geometry) { + var lines = geometry.getCoordinates(); + var coordinates, i, ii, j, jj, segment, segmentData; + for(j = 0, jj = lines.length;j < jj;++j) { + coordinates = lines[j]; + for(i = 0, ii = coordinates.length - 1;i < ii;++i) { + segment = coordinates.slice(i, i + 2); + segmentData = ({feature:feature, geometry:geometry, depth:[j], index:i, segment:segment}); + this.rBush_.insert(ol.extent.boundingExtent(segment), segmentData) + } + } +}; +ol.interaction.Modify.prototype.writePolygonGeometry_ = function(feature, geometry) { + var rings = geometry.getCoordinates(); + var coordinates = rings[0]; + var i, ii, segment, segmentData; + for(i = 0, ii = coordinates.length - 1;i < ii;++i) { + segment = coordinates.slice(i, i + 2); + segmentData = ({feature:feature, geometry:geometry, index:i, segment:segment}); + this.rBush_.insert(ol.extent.boundingExtent(segment), segmentData) + } +}; +ol.interaction.Modify.prototype.writeMultiPolygonGeometry_ = function(feature, geometry) { + var polygons = geometry.getCoordinates(); + var coordinates, i, ii, j, jj, segment, segmentData; + for(j = 0, jj = polygons.length;j < jj;++j) { + coordinates = polygons[j][0]; + for(i = 0, ii = coordinates.length - 1;i < ii;++i) { + segment = coordinates.slice(i, i + 2); + segmentData = ({feature:feature, geometry:geometry, depth:[j], index:i, segment:segment}); + this.rBush_.insert(ol.extent.boundingExtent(segment), segmentData) + } + } +}; +ol.interaction.Modify.prototype.writeGeometryCollectionGeometry_ = function(feature, geometry) { + var i, geometries = geometry.getGeometriesArray(); + for(i = 0;i < geometries.length;++i) { + this.SEGMENT_WRITERS_[geometries[i].getType()].call(this, feature, geometries[i]) + } +}; +ol.interaction.Modify.prototype.removeFeature_ = function(evt) { + var feature = evt.element; + var rBush = this.rBush_; + var i, nodesToRemove = []; + rBush.forEachInExtent(feature.getGeometry().getExtent(), function(node) { + if(feature === node.feature) { + nodesToRemove.push(node) + } + }); + for(i = nodesToRemove.length - 1;i >= 0;--i) { + rBush.remove(nodesToRemove[i]) + } + if(!goog.isNull(this.vertexFeature_) && this.features_.getLength() === 0) { + this.overlay_.removeFeature(this.vertexFeature_); + this.vertexFeature_ = null + } +}; +ol.interaction.Modify.prototype.createOrUpdateVertexFeature_ = function(coordinates) { + var vertexFeature = this.vertexFeature_; + if(goog.isNull(vertexFeature)) { + vertexFeature = new ol.Feature(new ol.geom.Point(coordinates)); + this.vertexFeature_ = vertexFeature; + this.overlay_.addFeature(vertexFeature) + }else { + var geometry = (vertexFeature.getGeometry()); + geometry.setCoordinates(coordinates) + } + return vertexFeature +}; +ol.interaction.Modify.prototype.handleDragStart = function(evt) { + this.dragSegments_ = []; + var vertexFeature = this.vertexFeature_; + if(!goog.isNull(vertexFeature)) { + var insertVertices = []; + var geometry = (vertexFeature.getGeometry()); + var vertex = geometry.getCoordinates(); + var vertexExtent = ol.extent.boundingExtent([vertex]); + var segmentDataMatches = []; + this.rBush_.forEachInExtent(vertexExtent, function(segmentData) { + segmentDataMatches.push(segmentData) + }); + var distinctFeatures = {}; + for(var i = 0, ii = segmentDataMatches.length;i < ii;++i) { + var segmentDataMatch = segmentDataMatches[i]; + var segment = segmentDataMatch.segment; + if(!(goog.getUid(segmentDataMatch.feature) in distinctFeatures)) { + var feature = segmentDataMatch.feature; + distinctFeatures[goog.getUid(feature)] = true + } + if(ol.coordinate.equals(segment[0], vertex)) { + this.dragSegments_.push([segmentDataMatch, 0]) + }else { + if(ol.coordinate.equals(segment[1], vertex)) { + this.dragSegments_.push([segmentDataMatch, 1]) + }else { + if(goog.getUid(segment) in this.vertexSegments_) { + insertVertices.push([segmentDataMatch, vertex]) + } + } + } + } + for(i = insertVertices.length - 1;i >= 0;--i) { + this.insertVertex_.apply(this, insertVertices[i]) + } + } + return this.modifiable_ +}; +ol.interaction.Modify.prototype.handleDrag = function(evt) { + var vertex = evt.coordinate; + for(var i = 0, ii = this.dragSegments_.length;i < ii;++i) { + var dragSegment = this.dragSegments_[i]; + var segmentData = dragSegment[0]; + var depth = segmentData.depth; + var geometry = segmentData.geometry; + var coordinates = geometry.getCoordinates(); + var segment = segmentData.segment; + var index = dragSegment[1]; + switch(geometry.getType()) { + case ol.geom.GeometryType.POINT: + coordinates = vertex; + segment[0] = segment[1] = vertex; + break; + case ol.geom.GeometryType.MULTI_POINT: + coordinates[segmentData.index] = vertex; + segment[0] = segment[1] = vertex; + break; + case ol.geom.GeometryType.LINE_STRING: + coordinates[segmentData.index + index] = vertex; + segment[index] = vertex; + break; + case ol.geom.GeometryType.MULTI_LINE_STRING: + coordinates[depth[0]][segmentData.index + index] = vertex; + segment[index] = vertex; + break; + case ol.geom.GeometryType.POLYGON: + coordinates[0][segmentData.index + index] = vertex; + segment[index] = vertex; + break; + case ol.geom.GeometryType.MULTI_POLYGON: + coordinates[depth[0]][0][segmentData.index + index] = vertex; + segment[index] = vertex; + break + } + geometry.setCoordinates(coordinates); + var newBounds = ol.extent.boundingExtent(segment); + this.createOrUpdateVertexFeature_(vertex); + this.rBush_.remove(segmentData); + this.rBush_.insert(newBounds, segmentData) + } +}; +ol.interaction.Modify.prototype.handleDragEnd = function(evt) { + var segmentData; + for(var i = this.dragSegments_.length - 1;i >= 0;--i) { + segmentData = this.dragSegments_[i][0]; + this.rBush_.update(ol.extent.boundingExtent(segmentData.segment), segmentData) + } +}; +ol.interaction.Modify.prototype.handleMapBrowserEvent = function(mapBrowserEvent) { + if(!mapBrowserEvent.map.getView().getHints()[ol.ViewHint.INTERACTING] && !this.getDragging() && mapBrowserEvent.type == ol.MapBrowserEvent.EventType.MOUSEMOVE) { + this.handleMouseMove_(mapBrowserEvent) + } + goog.base(this, "handleMapBrowserEvent", mapBrowserEvent); + return!this.modifiable_ +}; +ol.interaction.Modify.prototype.handleMouseMove_ = function(evt) { + this.lastPixel_ = evt.pixel; + this.handleMouseAtPixel_(evt.pixel, evt.map) +}; +ol.interaction.Modify.prototype.handleMouseAtPixel_ = function(pixel, map) { + var pixelCoordinate = map.getCoordinateFromPixel(pixel); + var sortByDistance = function(a, b) { + return ol.coordinate.squaredDistanceToSegment(pixelCoordinate, a.segment) - ol.coordinate.squaredDistanceToSegment(pixelCoordinate, b.segment) + }; + var lowerLeft = map.getCoordinateFromPixel([pixel[0] - this.pixelTolerance_, pixel[1] + this.pixelTolerance_]); + var upperRight = map.getCoordinateFromPixel([pixel[0] + this.pixelTolerance_, pixel[1] - this.pixelTolerance_]); + var box = ol.extent.boundingExtent([lowerLeft, upperRight]); + this.modifiable_ = false; + var rBush = this.rBush_; + var nodes = rBush.getInExtent(box); + if(nodes.length > 0) { + nodes.sort(sortByDistance); + var node = nodes[0]; + var closestSegment = node.segment; + var vertex = ol.coordinate.closestOnSegment(pixelCoordinate, closestSegment); + var vertexPixel = map.getPixelFromCoordinate(vertex); + if(Math.sqrt(ol.coordinate.squaredDistance(pixel, vertexPixel)) <= this.pixelTolerance_) { + var pixel1 = map.getPixelFromCoordinate(closestSegment[0]); + var pixel2 = map.getPixelFromCoordinate(closestSegment[1]); + var squaredDist1 = ol.coordinate.squaredDistance(vertexPixel, pixel1); + var squaredDist2 = ol.coordinate.squaredDistance(vertexPixel, pixel2); + var dist = Math.sqrt(Math.min(squaredDist1, squaredDist2)); + if(dist <= 10) { + vertex = squaredDist1 > squaredDist2 ? closestSegment[1] : closestSegment[0] + } + this.createOrUpdateVertexFeature_(vertex); + var vertexSegments = {}; + vertexSegments[goog.getUid(closestSegment)] = true; + var segment; + for(var i = 1, ii = nodes.length;i < ii;++i) { + segment = nodes[i].segment; + if(ol.coordinate.equals(closestSegment[0], segment[0]) && ol.coordinate.equals(closestSegment[1], segment[1]) || ol.coordinate.equals(closestSegment[0], segment[1]) && ol.coordinate.equals(closestSegment[1], segment[0])) { + vertexSegments[goog.getUid(segment)] = true + }else { + break + } + } + this.vertexSegments_ = vertexSegments; + this.modifiable_ = true; + return + } + } + if(!goog.isNull(this.vertexFeature_)) { + this.overlay_.removeFeature(this.vertexFeature_); + this.vertexFeature_ = null + } +}; +ol.interaction.Modify.prototype.insertVertex_ = function(segmentData, vertex) { + var segment = segmentData.segment; + var feature = segmentData.feature; + var geometry = segmentData.geometry; + var depth = segmentData.depth; + var index = segmentData.index; + var coordinates; + switch(geometry.getType()) { + case ol.geom.GeometryType.MULTI_LINE_STRING: + goog.asserts.assertInstanceof(geometry, ol.geom.MultiLineString); + coordinates = geometry.getCoordinates(); + coordinates[depth[0]].splice(index + 1, 0, vertex); + break; + case ol.geom.GeometryType.POLYGON: + goog.asserts.assertInstanceof(geometry, ol.geom.Polygon); + coordinates = geometry.getCoordinates(); + coordinates[0].splice(index + 1, 0, vertex); + break; + case ol.geom.GeometryType.MULTI_POLYGON: + goog.asserts.assertInstanceof(geometry, ol.geom.MultiPolygon); + coordinates = geometry.getCoordinates(); + coordinates[depth[0]][0].splice(index + 1, 0, vertex); + break; + case ol.geom.GeometryType.LINE_STRING: + goog.asserts.assertInstanceof(geometry, ol.geom.LineString); + coordinates = geometry.getCoordinates(); + coordinates.splice(index + 1, 0, vertex); + break; + default: + return + } + geometry.setCoordinates(coordinates); + var rTree = this.rBush_; + goog.asserts.assert(goog.isDef(segment)); + rTree.remove(segmentData); + var uid = goog.getUid(feature); + var segmentDataMatches = []; + this.rBush_.forEachInExtent(geometry.getExtent(), function(segmentData) { + if(goog.getUid(segmentData.feature) === uid) { + segmentDataMatches.push(segmentData) + } + }); + for(var i = 0, ii = segmentDataMatches.length;i < ii;++i) { + var segmentDataMatch = segmentDataMatches[i]; + if(segmentDataMatch.geometry === geometry && segmentDataMatch.index > index) { + ++segmentDataMatch.index + } + } + var newSegmentData = ({segment:[segment[0], vertex], feature:feature, geometry:geometry, depth:depth, index:index}); + rTree.insert(ol.extent.boundingExtent(newSegmentData.segment), newSegmentData); + this.dragSegments_.push([newSegmentData, 1]); + var newSegmentData2 = ({segment:[vertex, segment[1]], feature:feature, geometry:geometry, depth:depth, index:index + 1}); + rTree.insert(ol.extent.boundingExtent(newSegmentData2.segment), newSegmentData2); + this.dragSegments_.push([newSegmentData2, 0]) +}; +goog.provide("ol.interaction.Select"); +goog.require("goog.array"); +goog.require("goog.functions"); +goog.require("ol.FeatureOverlay"); +goog.require("ol.events.condition"); +goog.require("ol.interaction.Interaction"); +ol.interaction.Select = function(options) { + goog.base(this); + this.condition_ = goog.isDef(options.condition) ? options.condition : ol.events.condition.singleClick; + this.addCondition_ = goog.isDef(options.addCondition) ? options.addCondition : ol.events.condition.shiftKeyOnly; + var layerFilter; + if(goog.isDef(options.layerFilter)) { + layerFilter = options.layerFilter + }else { + if(goog.isDef(options.layer)) { + var layer = options.layer; + layerFilter = function(l) { + return l === layer + } + }else { + if(goog.isDef(options.layers)) { + var layers = options.layers; + layerFilter = function(layer) { + return goog.array.indexOf(layers, layer) != -1 + } + }else { + layerFilter = goog.functions.TRUE + } + } + } + this.layerFilter_ = layerFilter; + this.featureOverlay_ = new ol.FeatureOverlay({style:options.style}) +}; +goog.inherits(ol.interaction.Select, ol.interaction.Interaction); +ol.interaction.Select.prototype.getFeatures = function() { + return this.featureOverlay_.getFeatures() +}; +ol.interaction.Select.prototype.handleMapBrowserEvent = function(mapBrowserEvent) { + if(!this.condition_(mapBrowserEvent)) { + return true + } + var add = this.addCondition_(mapBrowserEvent); + var map = mapBrowserEvent.map; + var features = this.featureOverlay_.getFeatures(); + if(add) { + map.forEachFeatureAtPixel(mapBrowserEvent.pixel, function(feature, layer) { + if(goog.array.indexOf(features.getArray(), feature) == -1) { + features.push(feature) + } + }, undefined, this.layerFilter_) + }else { + var feature = map.forEachFeatureAtPixel(mapBrowserEvent.pixel, function(feature, layer) { + return feature + }, undefined, this.layerFilter_); + if(goog.isDef(feature)) { + if(features.getLength() == 1) { + if(features.getAt(0) !== feature) { + features.setAt(0, feature) + } + }else { + if(features.getLength() != 1) { + features.clear() + } + features.push(feature) + } + }else { + if(features.getLength() !== 0) { + features.clear() + } + } + } + return false +}; +ol.interaction.Select.prototype.setMap = function(map) { + goog.base(this, "setMap", map); + this.featureOverlay_.setMap(map) +}; +goog.provide("ol.layer.Heatmap"); +goog.require("goog.asserts"); +goog.require("goog.dom"); +goog.require("goog.dom.TagName"); +goog.require("goog.events"); +goog.require("ol.Object"); +goog.require("ol.layer.Vector"); +goog.require("ol.render.EventType"); +goog.require("ol.style.Icon"); +goog.require("ol.style.Style"); +ol.layer.HeatmapLayerProperty = {GRADIENT:"gradient"}; +ol.layer.Heatmap = function(opt_options) { + var options = goog.isDef(opt_options) ? opt_options : {}; + goog.base(this, (options)); + this.gradient_ = null; + goog.events.listen(this, ol.Object.getChangeEventType(ol.layer.HeatmapLayerProperty.GRADIENT), this.handleGradientChanged_, false, this); + this.setGradient(goog.isDef(options.gradient) ? options.gradient : ol.layer.Heatmap.DEFAULT_GRADIENT); + var radius = goog.isDef(options.radius) ? options.radius : 8; + var blur = goog.isDef(options.blur) ? options.blur : 15; + var shadow = goog.isDef(options.shadow) ? options.shadow : 250; + var style = new ol.style.Style({image:ol.layer.Heatmap.createIcon_(radius, blur, shadow)}); + this.setStyle(style); + goog.events.listen(this, ol.render.EventType.RENDER, this.handleRender_, false, this) +}; +goog.inherits(ol.layer.Heatmap, ol.layer.Vector); +ol.layer.Heatmap.DEFAULT_GRADIENT = ["#00f", "#0ff", "#0f0", "#ff0", "#f00"]; +ol.layer.Heatmap.createGradient_ = function(colors) { + var canvas = goog.dom.createElement(goog.dom.TagName.CANVAS); + var context = canvas.getContext("2d"); + var width = 1; + var height = 256; + canvas.width = width; + canvas.height = height; + var gradient = context.createLinearGradient(0, 0, width, height); + var step = 1 / colors.length; + for(var i = 0, ii = colors.length;i < ii;++i) { + gradient.addColorStop(i * step, colors[i]) + } + context.fillStyle = gradient; + context.fillRect(0, 0, width, height); + return context.getImageData(0, 0, width, height).data +}; +ol.layer.Heatmap.createIcon_ = function(radius, blur, shadow) { + var canvas = (goog.dom.createElement(goog.dom.TagName.CANVAS)); + var context = canvas.getContext("2d"); + var halfSize = radius + blur + 1; + canvas.width = canvas.height = halfSize * 2; + context.shadowOffsetX = context.shadowOffsetY = shadow; + context.shadowBlur = blur; + context.shadowColor = "#000"; + context.beginPath(); + var center = halfSize - shadow; + context.arc(center, center, radius, 0, Math.PI * 2, true); + context.fill(); + return new ol.style.Icon({src:canvas.toDataURL()}) +}; +ol.layer.Heatmap.prototype.getGradient = function() { + return(this.get(ol.layer.HeatmapLayerProperty.GRADIENT)) +}; +goog.exportProperty(ol.layer.Heatmap.prototype, "getGradient", ol.layer.Heatmap.prototype.getGradient); +ol.layer.Heatmap.prototype.handleGradientChanged_ = function() { + this.gradient_ = ol.layer.Heatmap.createGradient_(this.getGradient()) +}; +ol.layer.Heatmap.prototype.handleRender_ = function(event) { + goog.asserts.assert(event.type == ol.render.EventType.RENDER); + var context = event.context; + var canvas = context.canvas; + var image = context.getImageData(0, 0, canvas.width, canvas.height); + var view8 = image.data; + var i, ii, alpha, offset; + for(i = 0, ii = view8.length;i < ii;i += 4) { + alpha = view8[i + 3] * 4; + if(alpha) { + view8[i] = this.gradient_[alpha]; + view8[i + 1] = this.gradient_[alpha + 1]; + view8[i + 2] = this.gradient_[alpha + 2] + } + } + context.putImageData(image, 0, 0) +}; +ol.layer.Heatmap.prototype.setGradient = function(colors) { + this.set(ol.layer.HeatmapLayerProperty.GRADIENT, colors) +}; +goog.exportProperty(ol.layer.Heatmap.prototype, "setGradient", ol.layer.Heatmap.prototype.setGradient); +goog.provide("ol.parser.Parser"); +ol.parser.Parser = function() { +}; +goog.provide("ol.parser.XML"); +goog.require("goog.dom.xml"); +goog.require("ol.parser.Parser"); +ol.parser.XML = function() { + if(goog.global.ActiveXObject) { + this.xmldom = new ActiveXObject("Microsoft.XMLDOM") + } + this.regExes = {trimSpace:/^\s*|\s*$/g, removeSpace:/\s*/g, splitSpace:/\s+/, trimComma:/\s*,\s*/g} +}; +goog.inherits(ol.parser.XML, ol.parser.Parser); +ol.parser.XML.prototype.readNode = function(node, obj) { + if(!obj) { + obj = {} + } + var group = this.readers[node.namespaceURI] || this.readers[this.defaultNamespaceURI]; + if(group) { + var local = node.localName || node.nodeName.split(":").pop(); + var reader = group[local] || group["*"]; + if(reader) { + reader.apply(this, [node, obj]) + } + } + return obj +}; +ol.parser.XML.prototype.readChildNodes = function(node, obj) { + if(!obj) { + obj = {} + } + var children = node.childNodes; + var child; + for(var i = 0, len = children.length;i < len;++i) { + child = children[i]; + if(child.nodeType == 1) { + this.readNode(child, obj) + } + } + return obj +}; +ol.parser.XML.prototype.getChildValue = function(node, def) { + var value = def || ""; + if(node) { + for(var child = node.firstChild;child;child = child.nextSibling) { + switch(child.nodeType) { + case 3: + ; + case 4: + value += child.nodeValue; + break; + default: + break + } + } + } + return value +}; +ol.parser.XML.prototype.getAttributeNodeNS = function(node, uri, name) { + var attributeNode = null; + if(node.getAttributeNodeNS) { + attributeNode = node.getAttributeNodeNS(uri, name) + }else { + var attributes = node.attributes; + var potentialNode, fullName; + for(var i = 0, len = attributes.length;i < len;++i) { + potentialNode = attributes[i]; + if(potentialNode.namespaceURI == uri) { + fullName = potentialNode.prefix ? potentialNode.prefix + ":" + name : name; + if(fullName == potentialNode.nodeName) { + attributeNode = potentialNode; + break + } + } + } + } + return attributeNode +}; +ol.parser.XML.prototype.getAttributeNS = function(node, uri, name) { + var attributeValue = ""; + if(node.getAttributeNS) { + attributeValue = node.getAttributeNS(uri, name) || "" + }else { + var attributeNode = this.getAttributeNodeNS(node, uri, name); + if(attributeNode) { + attributeValue = attributeNode.nodeValue + } + } + return attributeValue +}; +ol.parser.XML.prototype.createElementNS = function(name, opt_uri) { + var uri = opt_uri ? opt_uri : this.defaultNamespaceURI; + var element; + if(this.xmldom) { + element = this.xmldom.createNode(1, name, uri) + }else { + element = document.createElementNS(uri, name) + } + return element +}; +ol.parser.XML.prototype.writeNode = function(name, obj, opt_uri, opt_parent) { + var child = null; + if(goog.isDef(this.writers)) { + var uri = opt_uri ? opt_uri : this.defaultNamespaceURI; + child = this.writers[uri][name].apply(this, [obj]); + if(opt_parent && child) { + opt_parent.appendChild(child) + } + } + return child +}; +ol.parser.XML.prototype.createTextNode = function(text) { + var node; + if(this.xmldom) { + node = this.xmldom.createTextNode(text) + }else { + node = document.createTextNode(text) + } + return node +}; +ol.parser.XML.prototype.setAttributeNS = function(node, uri, name, value) { + if(node.setAttributeNS) { + node.setAttributeNS(uri, name, value) + }else { + if(this.xmldom) { + if(uri) { + var attribute = node.ownerDocument.createNode(2, name, uri); + attribute.nodeValue = value; + node.setAttributeNode(attribute) + }else { + node.setAttribute(name, value) + } + }else { + throw new Error("setAttributeNS not implemented"); + } + } +}; +ol.parser.XML.prototype.serialize = function(node) { + if(this.xmldom) { + return node.xml + }else { + if(node.nodeType == 1) { + var doc = document.implementation.createDocument("", "", null); + if(doc.importNode) { + doc.appendChild(doc.importNode(node, true)) + }else { + doc.appendChild(node) + } + return goog.dom.xml.serialize(doc) + }else { + return goog.dom.xml.serialize(node) + } + } +}; +ol.parser.XML.prototype.createDocumentFragment = function() { + var element; + if(this.xmldom) { + element = this.xmldom.createDocumentFragment() + }else { + element = document.createDocumentFragment() + } + return element +}; +goog.provide("ol.parser.ogc.ExceptionReport"); +goog.require("goog.dom.xml"); +goog.require("ol.parser.XML"); +ol.parser.ogc.ExceptionReport = function() { + var exceptionReader = function(node, exceptionReport) { + var exception = {code:node.getAttribute("exceptionCode"), locator:node.getAttribute("locator"), texts:[]}; + exceptionReport.exceptions.push(exception); + this.readChildNodes(node, exception) + }; + var exceptionTextReader = function(node, exception) { + var text = this.getChildValue(node); + exception.texts.push(text) + }; + this.readers = {"http://www.opengis.net/ogc":{"ServiceExceptionReport":function(node, obj) { + obj["exceptionReport"] = {}; + obj["exceptionReport"]["exceptions"] = []; + this.readChildNodes(node, obj["exceptionReport"]) + }, "ServiceException":function(node, exceptionReport) { + var exception = {}; + exception["code"] = node.getAttribute("code"); + exception["locator"] = node.getAttribute("locator"); + exception["text"] = this.getChildValue(node); + exceptionReport["exceptions"].push(exception) + }}, "http://www.opengis.net/ows":{"ExceptionReport":function(node, obj) { + obj.success = false; + obj.exceptionReport = {version:node.getAttribute("version"), language:node.getAttribute("language"), exceptions:[]}; + this.readChildNodes(node, obj.exceptionReport) + }, "Exception":function(node, exceptionReport) { + exceptionReader.apply(this, arguments) + }, "ExceptionText":function(node, exception) { + exceptionTextReader.apply(this, arguments) + }}, "http://www.opengis.net/ows/1.1":{"ExceptionReport":function(node, obj) { + obj.exceptionReport = {version:node.getAttribute("version"), language:node.getAttribute("xml:lang"), exceptions:[]}; + this.readChildNodes(node, obj.exceptionReport) + }, "Exception":function(node, exceptionReport) { + exceptionReader.apply(this, arguments) + }, "ExceptionText":function(node, exception) { + exceptionTextReader.apply(this, arguments) + }}}; + goog.base(this) +}; +goog.inherits(ol.parser.ogc.ExceptionReport, ol.parser.XML); +ol.parser.ogc.ExceptionReport.prototype.read = function(data) { + if(goog.isString(data)) { + data = goog.dom.xml.loadXml(data) + } + var exceptionInfo = {}; + exceptionInfo["exceptionReport"] = null; + if(data) { + this.readChildNodes(data, exceptionInfo) + } + return exceptionInfo +}; +goog.provide("ol.parser.ogc.Versioned"); +goog.require("goog.dom.xml"); +goog.require("ol.parser.ogc.ExceptionReport"); +ol.parser.ogc.Versioned = function(opt_options) { + var options = goog.isDef(opt_options) ? opt_options : {}; + this.options = options; + this.defaultVersion = options.defaultVersion || null; + this.version = options.version; + this.profile = options.profile; + if(goog.isDef(options.allowFallback)) { + this.allowFallback = options.allowFallback + }else { + this.allowFallback = false + } + if(goog.isDef(options.stringifyOutput)) { + this.stringifyOutput = options.stringifyOutput + }else { + this.stringifyOutput = false + } +}; +ol.parser.ogc.Versioned.prototype.getVersion = function(root, opt_options) { + var version; + if(root) { + version = this.version; + if(!version) { + version = root.getAttribute("version"); + if(!version) { + version = this.defaultVersion + } + } + }else { + version = opt_options && opt_options.version || this.version || this.defaultVersion + } + return version +}; +ol.parser.ogc.Versioned.prototype.getParser = function(version) { + version = version || this.defaultVersion; + var profile = this.profile ? "_" + this.profile : ""; + if(!this.parser || this.parser.VERSION != version) { + var format = this.parsers["v" + version.replace(/\./g, "_") + profile]; + if(!format) { + if(profile !== "" && this.allowFallback) { + profile = ""; + format = this.parsers["v" + version.replace(/\./g, "_") + profile] + } + if(!format) { + throw"Can't find a parser for version " + version + profile; + } + } + this.parser = new format(this.options) + } + return this.parser +}; +ol.parser.ogc.Versioned.prototype.write = function(obj, opt_options) { + var version = this.getVersion(null, opt_options); + this.parser = this.getParser(version); + var root = this.parser.write(obj, opt_options); + if(this.stringifyOutput === false) { + return root + }else { + return goog.dom.xml.serialize(root) + } +}; +ol.parser.ogc.Versioned.prototype.read = function(data, opt_options) { + if(goog.isString(data)) { + data = goog.dom.xml.loadXml(data) + } + var root = data.documentElement; + var version = this.getVersion(root); + this.parser = this.getParser(version); + var obj = this.parser.read(data, opt_options); + var errorProperty = this.parser.errorProperty || null; + if(errorProperty !== null && obj[errorProperty] === undefined) { + var format = new ol.parser.ogc.ExceptionReport; + obj.error = format.read(data) + } + obj.version = version; + return obj +}; +goog.provide("ol.parser.ogc.WMSCapabilities_v1"); +goog.require("goog.dom.xml"); +goog.require("goog.object"); +goog.require("ol.parser.XML"); +ol.parser.ogc.WMSCapabilities_v1 = function() { + this.defaultNamespaceURI = "http://www.opengis.net/wms"; + this.errorProperty = "service"; + this.readers = {"http://www.opengis.net/wms":{"Service":function(node, obj) { + obj["service"] = {}; + this.readChildNodes(node, obj["service"]) + }, "Name":function(node, obj) { + obj["name"] = this.getChildValue(node) + }, "Title":function(node, obj) { + obj["title"] = this.getChildValue(node) + }, "Abstract":function(node, obj) { + obj["abstract"] = this.getChildValue(node) + }, "BoundingBox":function(node, obj) { + var bbox = {}; + bbox["bbox"] = [parseFloat(node.getAttribute("minx")), parseFloat(node.getAttribute("miny")), parseFloat(node.getAttribute("maxx")), parseFloat(node.getAttribute("maxy"))]; + var res = {x:parseFloat(node.getAttribute("resx")), y:parseFloat(node.getAttribute("resy"))}; + if(!(isNaN(res.x) && isNaN(res.y))) { + bbox["res"] = res + } + return bbox + }, "OnlineResource":function(node, obj) { + obj["href"] = this.getAttributeNS(node, "http://www.w3.org/1999/xlink", "href") + }, "ContactInformation":function(node, obj) { + obj["contactInformation"] = {}; + this.readChildNodes(node, obj["contactInformation"]) + }, "ContactPersonPrimary":function(node, obj) { + obj["personPrimary"] = {}; + this.readChildNodes(node, obj["personPrimary"]) + }, "ContactPerson":function(node, obj) { + obj["person"] = this.getChildValue(node) + }, "ContactOrganization":function(node, obj) { + obj["organization"] = this.getChildValue(node) + }, "ContactPosition":function(node, obj) { + obj["position"] = this.getChildValue(node) + }, "ContactAddress":function(node, obj) { + obj["contactAddress"] = {}; + this.readChildNodes(node, obj["contactAddress"]) + }, "AddressType":function(node, obj) { + obj["type"] = this.getChildValue(node) + }, "Address":function(node, obj) { + obj["address"] = this.getChildValue(node) + }, "City":function(node, obj) { + obj["city"] = this.getChildValue(node) + }, "StateOrProvince":function(node, obj) { + obj["stateOrProvince"] = this.getChildValue(node) + }, "PostCode":function(node, obj) { + obj["postcode"] = this.getChildValue(node) + }, "Country":function(node, obj) { + obj["country"] = this.getChildValue(node) + }, "ContactVoiceTelephone":function(node, obj) { + obj["phone"] = this.getChildValue(node) + }, "ContactFacsimileTelephone":function(node, obj) { + obj["fax"] = this.getChildValue(node) + }, "ContactElectronicMailAddress":function(node, obj) { + obj["email"] = this.getChildValue(node) + }, "Fees":function(node, obj) { + var fees = this.getChildValue(node); + if(fees && fees.toLowerCase() != "none") { + obj["fees"] = fees + } + }, "AccessConstraints":function(node, obj) { + var constraints = this.getChildValue(node); + if(constraints && constraints.toLowerCase() != "none") { + obj["accessConstraints"] = constraints + } + }, "Capability":function(node, obj) { + obj["capability"] = {}; + obj["capability"]["nestedLayers"] = []; + obj["capability"]["layers"] = []; + this.readChildNodes(node, obj["capability"]) + }, "Request":function(node, obj) { + obj["request"] = {}; + this.readChildNodes(node, obj["request"]) + }, "GetCapabilities":function(node, obj) { + obj["getcapabilities"] = {}; + obj["getcapabilities"]["formats"] = []; + this.readChildNodes(node, obj["getcapabilities"]) + }, "Format":function(node, obj) { + if(goog.isArray(obj["formats"])) { + obj["formats"].push(this.getChildValue(node)) + }else { + obj["format"] = this.getChildValue(node) + } + }, "DCPType":function(node, obj) { + this.readChildNodes(node, obj) + }, "HTTP":function(node, obj) { + this.readChildNodes(node, obj) + }, "Get":function(node, obj) { + obj["get"] = {}; + this.readChildNodes(node, obj["get"]) + }, "Post":function(node, obj) { + obj["post"] = {}; + this.readChildNodes(node, obj["post"]) + }, "GetMap":function(node, obj) { + obj["getmap"] = {}; + obj["getmap"]["formats"] = []; + this.readChildNodes(node, obj["getmap"]) + }, "GetFeatureInfo":function(node, obj) { + obj["getfeatureinfo"] = {}; + obj["getfeatureinfo"]["formats"] = []; + this.readChildNodes(node, obj["getfeatureinfo"]) + }, "Exception":function(node, obj) { + obj["exception"] = {}; + obj["exception"]["formats"] = []; + this.readChildNodes(node, obj["exception"]) + }, "Layer":function(node, obj) { + var parentLayer, capability; + if(obj["capability"]) { + capability = obj["capability"]; + parentLayer = obj + }else { + capability = obj + } + var attrNode = node.getAttributeNode("queryable"); + var queryable = attrNode && attrNode.specified ? node.getAttribute("queryable") : null; + attrNode = node.getAttributeNode("cascaded"); + var cascaded = attrNode && attrNode.specified ? node.getAttribute("cascaded") : null; + attrNode = node.getAttributeNode("opaque"); + var opaque = attrNode && attrNode.specified ? node.getAttribute("opaque") : null; + var noSubsets = node.getAttribute("noSubsets"); + var fixedWidth = node.getAttribute("fixedWidth"); + var fixedHeight = node.getAttribute("fixedHeight"); + var parent = parentLayer || {}; + var layer = {"nestedLayers":[], "styles":parentLayer ? [].concat(parentLayer["styles"]) : [], "srs":{}, "metadataURLs":[], "bbox":{}, "llbbox":parent["llbbox"], "dimensions":{}, "authorityURLs":{}, "identifiers":{}, "keywords":[], "queryable":queryable && queryable !== "" ? queryable === "1" || queryable === "true" : parent["queryable"] || false, "cascaded":cascaded !== null ? parseInt(cascaded, 10) : parent["cascaded"] || 0, "opaque":opaque ? opaque === "1" || opaque === "true" : parent["opaque"] || + false, "noSubsets":noSubsets !== null ? noSubsets === "1" || noSubsets === "true" : parent["noSubsets"] || false, "fixedWidth":fixedWidth !== null ? parseInt(fixedWidth, 10) : parent["fixedWidth"] || 0, "fixedHeight":fixedHeight !== null ? parseInt(fixedHeight, 10) : parent["fixedHeight"] || 0, "minScale":parent["minScale"], "maxScale":parent["maxScale"], "attribution":parent["attribution"]}; + if(parentLayer) { + goog.object.extend(layer["srs"], parent["srs"]); + goog.object.extend(layer["bbox"], parent["bbox"]); + goog.object.extend(layer["dimensions"], parent["dimensions"]); + goog.object.extend(layer["authorityURLs"], parent["authorityURLs"]) + } + obj["nestedLayers"].push(layer); + layer["capability"] = capability; + this.readChildNodes(node, layer); + delete layer["capability"]; + if(layer["name"]) { + var parts = layer["name"].split(":"), request = capability["request"], gfi = request["getfeatureinfo"]; + if(parts.length > 0) { + layer["prefix"] = parts[0] + } + capability["layers"].push(layer); + if(!goog.isDef(layer["formats"])) { + layer["formats"] = request["getmap"]["formats"] + } + if(!goog.isDef(layer["infoFormats"]) && gfi) { + layer["infoFormats"] = gfi["formats"] + } + } + }, "Attribution":function(node, obj) { + obj["attribution"] = {}; + this.readChildNodes(node, obj["attribution"]) + }, "LogoURL":function(node, obj) { + obj["logo"] = {"width":node.getAttribute("width"), "height":node.getAttribute("height")}; + this.readChildNodes(node, obj["logo"]) + }, "Style":function(node, obj) { + var style = {}; + obj["styles"].push(style); + this.readChildNodes(node, style) + }, "LegendURL":function(node, obj) { + var legend = {"width":node.getAttribute("width"), "height":node.getAttribute("height")}; + obj["legend"] = legend; + this.readChildNodes(node, legend) + }, "MetadataURL":function(node, obj) { + var metadataURL = {"type":node.getAttribute("type")}; + obj["metadataURLs"].push(metadataURL); + this.readChildNodes(node, metadataURL) + }, "DataURL":function(node, obj) { + obj["dataURL"] = {}; + this.readChildNodes(node, obj["dataURL"]) + }, "FeatureListURL":function(node, obj) { + obj["featureListURL"] = {}; + this.readChildNodes(node, obj["featureListURL"]) + }, "AuthorityURL":function(node, obj) { + var name = node.getAttribute("name"); + var authority = {}; + this.readChildNodes(node, authority); + obj["authorityURLs"][name] = authority["href"] + }, "Identifier":function(node, obj) { + var authority = node.getAttribute("authority"); + obj["identifiers"][authority] = this.getChildValue(node) + }, "KeywordList":function(node, obj) { + this.readChildNodes(node, obj) + }, "SRS":function(node, obj) { + obj["srs"][this.getChildValue(node)] = true + }}}; + goog.base(this) +}; +goog.inherits(ol.parser.ogc.WMSCapabilities_v1, ol.parser.XML); +ol.parser.ogc.WMSCapabilities_v1.prototype.read = function(data) { + if(goog.isString(data)) { + data = goog.dom.xml.loadXml(data) + } + if(data && data.nodeType == 9) { + data = data.documentElement + } + var obj = {}; + this.readNode(data, obj); + return obj +}; +goog.provide("ol.parser.ogc.WMSCapabilities_v1_1"); +goog.require("goog.object"); +goog.require("ol.parser.ogc.WMSCapabilities_v1"); +ol.parser.ogc.WMSCapabilities_v1_1 = function() { + goog.base(this); + var bboxreader = this.readers["http://www.opengis.net/wms"]["BoundingBox"]; + goog.object.extend(this.readers["http://www.opengis.net/wms"], {"WMT_MS_Capabilities":function(node, obj) { + this.readChildNodes(node, obj) + }, "Keyword":function(node, obj) { + if(obj["keywords"]) { + obj["keywords"].push({"value":this.getChildValue(node)}) + } + }, "DescribeLayer":function(node, obj) { + obj["describelayer"] = {"formats":[]}; + this.readChildNodes(node, obj["describelayer"]) + }, "GetLegendGraphic":function(node, obj) { + obj["getlegendgraphic"] = {"formats":[]}; + this.readChildNodes(node, obj["getlegendgraphic"]) + }, "GetStyles":function(node, obj) { + obj["getstyles"] = {"formats":[]}; + this.readChildNodes(node, obj["getstyles"]) + }, "PutStyles":function(node, obj) { + obj["putstyles"] = {"formats":[]}; + this.readChildNodes(node, obj["putstyles"]) + }, "UserDefinedSymbolization":function(node, obj) { + var userSymbols = {"supportSLD":parseInt(node.getAttribute("SupportSLD"), 10) == 1, "userLayer":parseInt(node.getAttribute("UserLayer"), 10) == 1, "userStyle":parseInt(node.getAttribute("UserStyle"), 10) == 1, "remoteWFS":parseInt(node.getAttribute("RemoteWFS"), 10) == 1}; + obj["userSymbols"] = userSymbols + }, "LatLonBoundingBox":function(node, obj) { + obj["llbbox"] = [parseFloat(node.getAttribute("minx")), parseFloat(node.getAttribute("miny")), parseFloat(node.getAttribute("maxx")), parseFloat(node.getAttribute("maxy"))] + }, "BoundingBox":function(node, obj) { + var bbox = bboxreader.apply(this, arguments); + bbox["srs"] = node.getAttribute("SRS"); + obj["bbox"][bbox["srs"]] = bbox + }, "ScaleHint":function(node, obj) { + var min = parseFloat(node.getAttribute("min")); + var max = parseFloat(node.getAttribute("max")); + var rad2 = Math.pow(2, 0.5); + var dpi = 25.4 / 0.28; + var ipm = 39.37; + if(min !== 0) { + obj["maxScale"] = parseFloat(min / rad2 * ipm * dpi) + } + if(max != Infinity) { + obj["minScale"] = parseFloat(max / rad2 * ipm * dpi) + } + }, "Dimension":function(node, obj) { + var name = node.getAttribute("name").toLowerCase(); + var dim = {"name":name, "units":node.getAttribute("units"), "unitsymbol":node.getAttribute("unitSymbol")}; + obj["dimensions"][dim.name] = dim + }, "Extent":function(node, obj) { + var name = node.getAttribute("name").toLowerCase(); + if(name in obj["dimensions"]) { + var extent = obj["dimensions"][name]; + extent["nearestVal"] = node.getAttribute("nearestValue") === "1"; + extent["multipleVal"] = node.getAttribute("multipleValues") === "1"; + extent["current"] = node.getAttribute("current") === "1"; + extent["default"] = node.getAttribute("default") || ""; + var values = this.getChildValue(node); + extent["values"] = values.split(",") + } + }}) +}; +goog.inherits(ol.parser.ogc.WMSCapabilities_v1_1, ol.parser.ogc.WMSCapabilities_v1); +goog.provide("ol.parser.ogc.WMSCapabilities_v1_1_0"); +goog.require("goog.object"); +goog.require("ol.parser.ogc.WMSCapabilities_v1_1"); +ol.parser.ogc.WMSCapabilities_v1_1_0 = function() { + goog.base(this); + this.version = "1.1.0"; + goog.object.extend(this.readers["http://www.opengis.net/wms"], {"SRS":function(node, obj) { + var srs = this.getChildValue(node); + var values = srs.split(/ +/); + for(var i = 0, ii = values.length;i < ii;i++) { + obj["srs"][values[i]] = true + } + }}) +}; +goog.inherits(ol.parser.ogc.WMSCapabilities_v1_1_0, ol.parser.ogc.WMSCapabilities_v1_1); +goog.provide("ol.parser.ogc.WMSCapabilities_v1_0_0"); +goog.require("goog.object"); +goog.require("goog.string"); +goog.require("ol.parser.ogc.WMSCapabilities_v1_1_0"); +ol.parser.ogc.WMSCapabilities_v1_0_0 = function() { + goog.base(this); + this.version = "1.0.0"; + goog.object.extend(this.readers["http://www.opengis.net/wms"], {"Format":function(node, obj) { + for(var i = 0, ii = node.childNodes.length;i < ii;i++) { + var child = node.childNodes[i]; + var local = child.localName || child.nodeName.split(":").pop(); + if(goog.isArray(obj["formats"])) { + obj["formats"].push(local) + }else { + obj["format"] = local + } + } + }, "Keywords":function(node, obj) { + if(!goog.isDef(obj["keywords"])) { + obj["keywords"] = [] + } + var keywords = this.getChildValue(node).split(/ +/); + for(var i = 0, ii = keywords.length;i < ii;++i) { + if(!goog.string.isEmpty(keywords[i])) { + obj["keywords"].push({"value":keywords[i]}) + } + } + }, "OnlineResource":function(node, obj) { + obj["href"] = this.getChildValue(node) + }, "Get":function(node, obj) { + obj["get"] = {"href":node.getAttribute("onlineResource")} + }, "Post":function(node, obj) { + obj["post"] = {"href":node.getAttribute("onlineResource")} + }, "Map":function(node, obj) { + var reader = this.readers[this.defaultNamespaceURI]["GetMap"]; + reader.apply(this, arguments) + }, "Capabilities":function(node, obj) { + var reader = this.readers[this.defaultNamespaceURI]["GetCapabilities"]; + reader.apply(this, arguments) + }, "FeatureInfo":function(node, obj) { + var reader = this.readers[this.defaultNamespaceURI]["GetFeatureInfo"]; + reader.apply(this, arguments) + }}) +}; +goog.inherits(ol.parser.ogc.WMSCapabilities_v1_0_0, ol.parser.ogc.WMSCapabilities_v1_1_0); +goog.provide("ol.parser.ogc.WMSCapabilities_v1_1_1"); +goog.require("goog.object"); +goog.require("ol.parser.ogc.WMSCapabilities_v1_1"); +ol.parser.ogc.WMSCapabilities_v1_1_1 = function() { + goog.base(this); + this.version = "1.1.1"; + goog.object.extend(this.readers["http://www.opengis.net/wms"], {"SRS":function(node, obj) { + obj["srs"][this.getChildValue(node)] = true + }}) +}; +goog.inherits(ol.parser.ogc.WMSCapabilities_v1_1_1, ol.parser.ogc.WMSCapabilities_v1_1); +goog.provide("ol.parser.ogc.WMSCapabilities_v1_1_1_WMSC"); +goog.require("goog.object"); +goog.require("ol.parser.ogc.WMSCapabilities_v1_1_1"); +ol.parser.ogc.WMSCapabilities_v1_1_1_WMSC = function() { + goog.base(this); + this.profile = "WMSC"; + goog.object.extend(this.readers["http://www.opengis.net/wms"], {"VendorSpecificCapabilities":function(node, obj) { + obj["vendorSpecific"] = {"tileSets":[]}; + this.readChildNodes(node, obj["vendorSpecific"]) + }, "TileSet":function(node, vendorSpecific) { + var tileset = {"srs":{}, "bbox":{}, "resolutions":[]}; + this.readChildNodes(node, tileset); + vendorSpecific.tileSets.push(tileset) + }, "Resolutions":function(node, tileset) { + var res = this.getChildValue(node).split(" "); + for(var i = 0, ii = res.length;i < ii;i++) { + if(res[i] !== "") { + tileset["resolutions"].push(parseFloat(res[i])) + } + } + }, "Width":function(node, tileset) { + tileset["width"] = parseInt(this.getChildValue(node), 10) + }, "Height":function(node, tileset) { + tileset["height"] = parseInt(this.getChildValue(node), 10) + }, "Layers":function(node, tileset) { + tileset["layers"] = this.getChildValue(node) + }, "Styles":function(node, tileset) { + tileset["styles"] = this.getChildValue(node) + }}) +}; +goog.inherits(ol.parser.ogc.WMSCapabilities_v1_1_1_WMSC, ol.parser.ogc.WMSCapabilities_v1_1_1); +goog.provide("ol.parser.ogc.WMSCapabilities_v1_3_0"); +goog.require("goog.object"); +goog.require("ol.parser.ogc.WMSCapabilities_v1"); +ol.parser.ogc.WMSCapabilities_v1_3_0 = function() { + goog.base(this); + var bboxreader = this.readers["http://www.opengis.net/wms"]["BoundingBox"]; + goog.object.extend(this.readers["http://www.opengis.net/wms"], {"WMS_Capabilities":function(node, obj) { + this.readChildNodes(node, obj) + }, "LayerLimit":function(node, obj) { + obj["layerLimit"] = parseInt(this.getChildValue(node), 10) + }, "MaxWidth":function(node, obj) { + obj["maxWidth"] = parseInt(this.getChildValue(node), 10) + }, "MaxHeight":function(node, obj) { + obj["maxHeight"] = parseInt(this.getChildValue(node), 10) + }, "BoundingBox":function(node, obj) { + var bbox = bboxreader.apply(this, arguments); + bbox["srs"] = node.getAttribute("CRS"); + obj["bbox"][bbox["srs"]] = bbox + }, "CRS":function(node, obj) { + this.readers["http://www.opengis.net/wms"]["SRS"].apply(this, arguments) + }, "EX_GeographicBoundingBox":function(node, obj) { + obj["llbbox"] = []; + this.readChildNodes(node, obj["llbbox"]) + }, "westBoundLongitude":function(node, obj) { + obj[0] = this.getChildValue(node) + }, "eastBoundLongitude":function(node, obj) { + obj[2] = this.getChildValue(node) + }, "southBoundLatitude":function(node, obj) { + obj[1] = this.getChildValue(node) + }, "northBoundLatitude":function(node, obj) { + obj[3] = this.getChildValue(node) + }, "MinScaleDenominator":function(node, obj) { + obj["maxScale"] = parseFloat(this.getChildValue(node)).toPrecision(16) + }, "MaxScaleDenominator":function(node, obj) { + obj["minScale"] = parseFloat(this.getChildValue(node)).toPrecision(16) + }, "Dimension":function(node, obj) { + var name = node.getAttribute("name").toLowerCase(); + var dim = {"name":name, "units":node.getAttribute("units"), "unitsymbol":node.getAttribute("unitSymbol"), "nearestVal":node.getAttribute("nearestValue") === "1", "multipleVal":node.getAttribute("multipleValues") === "1", "default":node.getAttribute("default") || "", "current":node.getAttribute("current") === "1", "values":this.getChildValue(node).split(",")}; + obj["dimensions"][dim["name"]] = dim + }, "Keyword":function(node, obj) { + var keyword = {"value":this.getChildValue(node), "vocabulary":node.getAttribute("vocabulary")}; + if(obj["keywords"]) { + obj["keywords"].push(keyword) + } + }}); + this.readers["sld"] = {"UserDefinedSymbolization":function(node, obj) { + var readers = this.readers["http://www.opengis.net/wms"]; + readers.UserDefinedSymbolization.apply(this, arguments); + var value = node.getAttribute("InlineFeature"); + obj["userSymbols"]["inlineFeature"] = parseInt(value, 10) == 1; + value = node.getAttribute("RemoteWCS"); + obj["userSymbols"]["remoteWCS"] = parseInt(value, 10) == 1 + }, "DescribeLayer":function(node, obj) { + var readers = this.readers["http://www.opengis.net/wms"]; + readers.DescribeLayer.apply(this, arguments) + }, "GetLegendGraphic":function(node, obj) { + var readers = this.readers["http://www.opengis.net/wms"]; + readers.GetLegendGraphic.apply(this, arguments) + }} +}; +goog.inherits(ol.parser.ogc.WMSCapabilities_v1_3_0, ol.parser.ogc.WMSCapabilities_v1); +goog.provide("ol.parser.ogc.WMSCapabilities"); +goog.require("ol.parser.ogc.Versioned"); +goog.require("ol.parser.ogc.WMSCapabilities_v1_0_0"); +goog.require("ol.parser.ogc.WMSCapabilities_v1_1_0"); +goog.require("ol.parser.ogc.WMSCapabilities_v1_1_1"); +goog.require("ol.parser.ogc.WMSCapabilities_v1_1_1_WMSC"); +goog.require("ol.parser.ogc.WMSCapabilities_v1_3_0"); +ol.ENABLE_WMSCAPS_1_0_0 = false; +ol.ENABLE_WMSCAPS_1_1_0 = true; +ol.ENABLE_WMSCAPS_1_1_1 = true; +ol.ENABLE_WMSCAPS_1_3_0 = true; +ol.ENABLE_WMSCAPS_1_1_1_WMSC = true; +ol.parser.ogc.WMSCapabilities = function(opt_options) { + opt_options = opt_options || {}; + opt_options["defaultVersion"] = "1.1.1"; + this.parsers = {}; + if(ol.ENABLE_WMSCAPS_1_0_0) { + this.parsers["v1_0_0"] = ol.parser.ogc.WMSCapabilities_v1_0_0 + } + if(ol.ENABLE_WMSCAPS_1_1_0) { + this.parsers["v1_1_0"] = ol.parser.ogc.WMSCapabilities_v1_1_0 + } + if(ol.ENABLE_WMSCAPS_1_1_1) { + this.parsers["v1_1_1"] = ol.parser.ogc.WMSCapabilities_v1_1_1 + } + if(ol.ENABLE_WMSCAPS_1_1_1_WMSC) { + this.parsers["v1_1_1_WMSC"] = ol.parser.ogc.WMSCapabilities_v1_1_1_WMSC + } + if(ol.ENABLE_WMSCAPS_1_3_0) { + this.parsers["v1_3_0"] = ol.parser.ogc.WMSCapabilities_v1_3_0 + } + goog.base(this, opt_options) +}; +goog.inherits(ol.parser.ogc.WMSCapabilities, ol.parser.ogc.Versioned); +goog.provide("ol.proj.CH"); +goog.provide("ol.proj.EPSG2056"); +goog.provide("ol.proj.EPSG21781"); +goog.require("goog.asserts"); +goog.require("goog.math"); +goog.require("ol.ellipsoid.BESSEL1841"); +goog.require("ol.proj"); +goog.require("ol.proj.EPSG4326"); +goog.require("ol.proj.Projection"); +goog.require("ol.proj.Units"); +ol.proj.CH = function(options) { + goog.base(this, {code:options.code, extent:options.extent, global:false, units:ol.proj.Units.METERS}) +}; +goog.inherits(ol.proj.CH, ol.proj.Projection); +ol.proj.CH.PHI0 = goog.math.toRadians((3600 * 46 + 60 * 57 + 8.66) / 3600); +ol.proj.CH.LAMBDA0 = goog.math.toRadians((3600 * 7 + 60 * 26 + 22.5) / 3600); +ol.proj.CH.ELLIPSOID = ol.ellipsoid.BESSEL1841; +ol.proj.CH.COS_PHI0 = Math.cos(ol.proj.CH.PHI0); +ol.proj.CH.SIN_PHI0 = Math.sin(ol.proj.CH.PHI0); +ol.proj.CH.R = ol.proj.CH.ELLIPSOID.a * Math.sqrt(1 - ol.proj.CH.ELLIPSOID.eSquared) / (1 - ol.proj.CH.ELLIPSOID.eSquared * ol.proj.CH.SIN_PHI0 * ol.proj.CH.SIN_PHI0); +ol.proj.CH.ALPHA = Math.sqrt(1 + ol.proj.CH.ELLIPSOID.eSquared * Math.pow(ol.proj.CH.COS_PHI0, 4) / (1 - ol.proj.CH.ELLIPSOID.eSquared)); +ol.proj.CH.SIN_B0 = ol.proj.CH.SIN_PHI0 / ol.proj.CH.ALPHA; +ol.proj.CH.B0 = Math.asin(ol.proj.CH.SIN_B0); +ol.proj.CH.COS_B0 = Math.cos(ol.proj.CH.B0); +ol.proj.CH.K = Math.log(Math.tan(Math.PI / 4 + ol.proj.CH.B0 / 2)) - ol.proj.CH.ALPHA * Math.log(Math.tan(Math.PI / 4 + ol.proj.CH.PHI0 / 2)) + ol.proj.CH.ALPHA * ol.proj.CH.ELLIPSOID.e * Math.log((1 + ol.proj.CH.ELLIPSOID.e * ol.proj.CH.SIN_PHI0) / (1 - ol.proj.CH.ELLIPSOID.e * ol.proj.CH.SIN_PHI0)) / 2; +ol.proj.CH.add = function() { + ol.proj.EPSG2056.add(); + ol.proj.EPSG21781.add(); + var epsg2056 = ol.proj.get("EPSG:2056"); + var epsg21781 = ol.proj.get("EPSG:21781"); + ol.proj.addTransform(epsg2056, epsg21781, goog.partial(ol.proj.CH.translate_, -2E6, -1E6)); + ol.proj.addTransform(epsg21781, epsg2056, goog.partial(ol.proj.CH.translate_, 2E6, 1E6)) +}; +ol.proj.CH.fromEPSG4326Approximate_ = function(offsetY, offsetX, input, opt_output, opt_dimension) { + var n = input.length; + var dimension = goog.isDef(opt_dimension) ? opt_dimension : 2; + var output; + if(goog.isDef(opt_output)) { + output = opt_output + }else { + if(dimension > 2) { + output = input.slice() + }else { + output = new Array(n) + } + } + goog.asserts.assert(dimension >= 2); + goog.asserts.assert(output.length % dimension === 0); + var auxLat, auxLon, i; + for(i = 0;i < n;i += dimension) { + auxLat = 36 * input[i + 1] / 100 - 16.902866; + auxLon = 36 * input[i] / 100 - 2.67825; + output[i] = offsetY + 72.37 + 211455.93 * auxLon - 10938.51 * auxLon * auxLat - 0.36 * auxLon * auxLat * auxLat - 44.54 * auxLon * auxLon * auxLon; + output[i + 1] = offsetX + 147.07 + 308807.95 * auxLat + 3745.25 * auxLon * auxLon + 76.63 * auxLat * auxLat - 194.56 * auxLon * auxLon * auxLat + 119.79 * auxLat * auxLat * auxLat + } + return output +}; +ol.proj.CH.fromEPSG4326Rigorous_ = function(offsetY, offsetX, input, opt_output, opt_dimension) { + var n = input.length; + var dimension = goog.isDef(opt_dimension) ? opt_dimension : 2; + var output; + if(goog.isDef(opt_output)) { + output = opt_output + }else { + if(dimension > 2) { + output = input.slice() + }else { + output = new Array(n) + } + } + goog.asserts.assert(dimension >= 2); + goog.asserts.assert(output.length % dimension === 0); + var b, bBar, eSinPhi, i, l, lambda, lBar, phi, s; + for(i = 0;i < n;i += dimension) { + lambda = goog.math.toRadians(input[i]); + phi = goog.math.toRadians(input[i + 1]); + eSinPhi = ol.proj.CH.ELLIPSOID.e * Math.sin(phi); + s = ol.proj.CH.ALPHA * Math.log(Math.tan(Math.PI / 4 + phi / 2)) - ol.proj.CH.ALPHA * ol.proj.CH.ELLIPSOID.e * Math.log((1 + eSinPhi) / (1 - eSinPhi)) / 2 + ol.proj.CH.K; + b = 2 * (Math.atan(Math.exp(s)) - Math.PI / 4); + l = ol.proj.CH.ALPHA * (lambda - ol.proj.CH.LAMBDA0); + lBar = Math.atan2(Math.sin(l), ol.proj.CH.SIN_B0 * Math.tan(b) + ol.proj.CH.COS_B0 * Math.cos(l)); + bBar = Math.asin(ol.proj.CH.COS_B0 * Math.sin(b) - ol.proj.CH.SIN_B0 * Math.cos(b) * Math.cos(l)); + output[i] = offsetY + ol.proj.CH.R * lBar; + output[i + 1] = offsetX + ol.proj.CH.R * Math.log((1 + Math.sin(bBar)) / (1 - Math.sin(bBar))) / 2 + } + return output +}; +ol.proj.CH.toEPSG4326Approximate_ = function(offsetY, offsetX, input, opt_output, opt_dimension) { + var n = input.length; + var dimension = goog.isDef(opt_dimension) ? opt_dimension : 2; + var output; + if(goog.isDef(opt_output)) { + output = opt_output + }else { + if(dimension > 2) { + output = input.slice() + }else { + output = new Array(n) + } + } + goog.asserts.assert(dimension >= 2); + goog.asserts.assert(output.length % dimension === 0); + var auxX, auxY, i; + for(i = 0;i < n;i += dimension) { + auxY = (input[i] - offsetY) / 1E6; + auxX = (input[i + 1] - offsetX) / 1E6; + output[i] = 100 * (2.6779094 + 4.728982 * auxY + 0.791484 * auxY * auxX + 0.1306 * auxY * auxX * auxX - 0.0436 * auxY * auxY * auxY) / 36; + output[i + 1] = 100 * (16.9023892 + 3.238272 * auxX - 0.270978 * auxY * auxY - 0.002528 * auxX * auxX - 0.0447 * auxY * auxY * auxX - 0.014 * auxX * auxX * auxX) / 36 + } + return output +}; +ol.proj.CH.toEPSG4326Rigorous_ = function(offsetY, offsetX, input, opt_output, opt_dimension) { + var n = input.length; + var dimension = goog.isDef(opt_dimension) ? opt_dimension : 2; + var output; + if(goog.isDef(opt_output)) { + output = opt_output + }else { + if(dimension > 2) { + output = input.slice() + }else { + output = new Array(n) + } + } + goog.asserts.assert(dimension >= 2); + goog.asserts.assert(output.length % dimension === 0); + var b, bBar, eSinPhi, i, iterations, l, lambda, lastPhi, lBar, phi, s, x, y; + for(i = 0;i < n;i += dimension) { + y = input[i] - offsetY; + x = input[i + 1] - offsetX; + lBar = y / ol.proj.CH.R; + bBar = 2 * (Math.atan(Math.exp(x / ol.proj.CH.R)) - Math.PI / 4); + b = Math.asin(ol.proj.CH.COS_B0 * Math.sin(bBar) + ol.proj.CH.SIN_B0 * Math.cos(bBar) * Math.cos(lBar)); + l = Math.atan2(Math.sin(lBar), ol.proj.CH.COS_B0 * Math.cos(lBar) - ol.proj.CH.SIN_B0 * Math.tan(bBar)); + lambda = ol.proj.CH.LAMBDA0 + l / ol.proj.CH.ALPHA; + lastPhi = phi = b; + for(iterations = 20;iterations > 0;--iterations) { + s = (Math.log(Math.tan(Math.PI / 4 + b / 2)) - ol.proj.CH.K) / ol.proj.CH.ALPHA + ol.proj.CH.ELLIPSOID.e * Math.log(Math.tan(Math.PI / 4 + Math.asin(ol.proj.CH.ELLIPSOID.e * Math.sin(phi)) / 2)); + phi = 2 * Math.atan(Math.exp(s)) - Math.PI / 2; + if(Math.abs(phi - lastPhi) < 1E-7) { + break + } + lastPhi = phi + } + goog.asserts.assert(iterations !== 0); + output[i] = goog.math.toDegrees(lambda); + output[i + 1] = goog.math.toDegrees(phi) + } + return output +}; +ol.proj.CH.translate_ = function(offsetY, offsetX, input, opt_output, opt_dimension) { + var n = input.length; + var dimension = goog.isDef(opt_dimension) ? opt_dimension : 2; + var output; + if(goog.isDef(opt_output)) { + output = opt_output + }else { + if(dimension > 2) { + output = input.slice() + }else { + output = new Array(n) + } + } + goog.asserts.assert(dimension >= 2); + goog.asserts.assert(output.length % dimension === 0); + var i; + for(i = 0;i < n;i += dimension) { + output[i] = input[i] + offsetY; + output[i + 1] = input[i + 1] + offsetX + } + return output +}; +ol.proj.CH.prototype.getPointResolution = function(resolution, point) { + return resolution +}; +ol.proj.EPSG2056 = function() { + goog.base(this, {code:"EPSG:2056", extent:ol.proj.EPSG2056.EXTENT}) +}; +goog.inherits(ol.proj.EPSG2056, ol.proj.CH); +ol.proj.EPSG2056.EXTENT = [2485869.5728, 1076443.1884, 2837076.5648, 1299941.7864]; +ol.proj.EPSG2056.add = function() { + ol.proj.addEquivalentProjections(ol.proj.EPSG4326.PROJECTIONS); + var epsg2056 = new ol.proj.EPSG2056; + ol.proj.addProjection(epsg2056); + ol.proj.addEquivalentTransforms(ol.proj.EPSG4326.PROJECTIONS, [epsg2056], goog.partial(ol.proj.CH.fromEPSG4326Rigorous_, 26E5, 12E5), goog.partial(ol.proj.CH.toEPSG4326Rigorous_, 26E5, 12E5)) +}; +ol.proj.EPSG21781 = function() { + goog.base(this, {code:"EPSG:21781", extent:ol.proj.EPSG21781.EXTENT}) +}; +goog.inherits(ol.proj.EPSG21781, ol.proj.CH); +ol.proj.EPSG21781.EXTENT = [485869.5728, 76443.1884, 837076.5648, 299941.7864]; +ol.proj.EPSG21781.add = function() { + ol.proj.addEquivalentProjections(ol.proj.EPSG4326.PROJECTIONS); + var epsg21781 = new ol.proj.EPSG21781; + ol.proj.addProjection(epsg21781); + ol.proj.addEquivalentTransforms(ol.proj.EPSG4326.PROJECTIONS, [epsg21781], goog.partial(ol.proj.CH.fromEPSG4326Rigorous_, 6E5, 2E5), goog.partial(ol.proj.CH.toEPSG4326Rigorous_, 6E5, 2E5)) +}; +goog.provide("goog.net.jsloader"); +goog.provide("goog.net.jsloader.Error"); +goog.provide("goog.net.jsloader.ErrorCode"); +goog.provide("goog.net.jsloader.Options"); +goog.require("goog.array"); +goog.require("goog.async.Deferred"); +goog.require("goog.debug.Error"); +goog.require("goog.dom"); +goog.require("goog.dom.TagName"); +goog.net.jsloader.GLOBAL_VERIFY_OBJS_ = "closure_verification"; +goog.net.jsloader.DEFAULT_TIMEOUT = 5E3; +goog.net.jsloader.Options; +goog.net.jsloader.scriptsToLoad_ = []; +goog.net.jsloader.loadMany = function(uris, opt_options) { + if(!uris.length) { + return + } + var isAnotherModuleLoading = goog.net.jsloader.scriptsToLoad_.length; + goog.array.extend(goog.net.jsloader.scriptsToLoad_, uris); + if(isAnotherModuleLoading) { + return + } + uris = goog.net.jsloader.scriptsToLoad_; + var popAndLoadNextScript = function() { + var uri = uris.shift(); + var deferred = goog.net.jsloader.load(uri, opt_options); + if(uris.length) { + deferred.addBoth(popAndLoadNextScript) + } + }; + popAndLoadNextScript() +}; +goog.net.jsloader.load = function(uri, opt_options) { + var options = opt_options || {}; + var doc = options.document || document; + var script = goog.dom.createElement(goog.dom.TagName.SCRIPT); + var request = {script_:script, timeout_:undefined}; + var deferred = new goog.async.Deferred(goog.net.jsloader.cancel_, request); + var timeout = null; + var timeoutDuration = goog.isDefAndNotNull(options.timeout) ? options.timeout : goog.net.jsloader.DEFAULT_TIMEOUT; + if(timeoutDuration > 0) { + timeout = window.setTimeout(function() { + goog.net.jsloader.cleanup_(script, true); + deferred.errback(new goog.net.jsloader.Error(goog.net.jsloader.ErrorCode.TIMEOUT, "Timeout reached for loading script " + uri)) + }, timeoutDuration); + request.timeout_ = timeout + } + script.onload = script.onreadystatechange = function() { + if(!script.readyState || script.readyState == "loaded" || script.readyState == "complete") { + var removeScriptNode = options.cleanupWhenDone || false; + goog.net.jsloader.cleanup_(script, removeScriptNode, timeout); + deferred.callback(null) + } + }; + script.onerror = function() { + goog.net.jsloader.cleanup_(script, true, timeout); + deferred.errback(new goog.net.jsloader.Error(goog.net.jsloader.ErrorCode.LOAD_ERROR, "Error while loading script " + uri)) + }; + goog.dom.setProperties(script, {"type":"text/javascript", "charset":"UTF-8", "src":uri}); + var scriptParent = goog.net.jsloader.getScriptParentElement_(doc); + scriptParent.appendChild(script); + return deferred +}; +goog.net.jsloader.loadAndVerify = function(uri, verificationObjName, options) { + if(!goog.global[goog.net.jsloader.GLOBAL_VERIFY_OBJS_]) { + goog.global[goog.net.jsloader.GLOBAL_VERIFY_OBJS_] = {} + } + var verifyObjs = goog.global[goog.net.jsloader.GLOBAL_VERIFY_OBJS_]; + if(goog.isDef(verifyObjs[verificationObjName])) { + return goog.async.Deferred.fail(new goog.net.jsloader.Error(goog.net.jsloader.ErrorCode.VERIFY_OBJECT_ALREADY_EXISTS, "Verification object " + verificationObjName + " already defined.")) + } + var sendDeferred = goog.net.jsloader.load(uri, options); + var deferred = new goog.async.Deferred(goog.bind(sendDeferred.cancel, sendDeferred)); + sendDeferred.addCallback(function() { + var result = verifyObjs[verificationObjName]; + if(goog.isDef(result)) { + deferred.callback(result); + delete verifyObjs[verificationObjName] + }else { + deferred.errback(new goog.net.jsloader.Error(goog.net.jsloader.ErrorCode.VERIFY_ERROR, "Script " + uri + " loaded, but verification object " + verificationObjName + " was not defined.")) + } + }); + sendDeferred.addErrback(function(error) { + if(goog.isDef(verifyObjs[verificationObjName])) { + delete verifyObjs[verificationObjName] + } + deferred.errback(error) + }); + return deferred +}; +goog.net.jsloader.getScriptParentElement_ = function(doc) { + var headElements = doc.getElementsByTagName(goog.dom.TagName.HEAD); + if(!headElements || goog.array.isEmpty(headElements)) { + return doc.documentElement + }else { + return headElements[0] + } +}; +goog.net.jsloader.cancel_ = function() { + var request = this; + if(request && request.script_) { + var scriptNode = request.script_; + if(scriptNode && scriptNode.tagName == "SCRIPT") { + goog.net.jsloader.cleanup_(scriptNode, true, request.timeout_) + } + } +}; +goog.net.jsloader.cleanup_ = function(scriptNode, removeScriptNode, opt_timeout) { + if(goog.isDefAndNotNull(opt_timeout)) { + goog.global.clearTimeout(opt_timeout) + } + scriptNode.onload = goog.nullFunction; + scriptNode.onerror = goog.nullFunction; + scriptNode.onreadystatechange = goog.nullFunction; + if(removeScriptNode) { + window.setTimeout(function() { + goog.dom.removeNode(scriptNode) + }, 0) + } +}; +goog.net.jsloader.ErrorCode = {LOAD_ERROR:0, TIMEOUT:1, VERIFY_ERROR:2, VERIFY_OBJECT_ALREADY_EXISTS:3}; +goog.net.jsloader.Error = function(code, opt_message) { + var msg = "Jsloader error (code #" + code + ")"; + if(opt_message) { + msg += ": " + opt_message + } + goog.base(this, msg); + this.code = code +}; +goog.inherits(goog.net.jsloader.Error, goog.debug.Error); +goog.provide("goog.net.Jsonp"); +goog.require("goog.Uri"); +goog.require("goog.net.jsloader"); +goog.net.Jsonp = function(uri, opt_callbackParamName) { + this.uri_ = new goog.Uri(uri); + this.callbackParamName_ = opt_callbackParamName ? opt_callbackParamName : "callback"; + this.timeout_ = 5E3 +}; +goog.net.Jsonp.CALLBACKS = "_callbacks_"; +goog.net.Jsonp.scriptCounter_ = 0; +goog.net.Jsonp.prototype.setRequestTimeout = function(timeout) { + this.timeout_ = timeout +}; +goog.net.Jsonp.prototype.getRequestTimeout = function() { + return this.timeout_ +}; +goog.net.Jsonp.prototype.send = function(opt_payload, opt_replyCallback, opt_errorCallback, opt_callbackParamValue) { + var payload = opt_payload || null; + var id = opt_callbackParamValue || "_" + (goog.net.Jsonp.scriptCounter_++).toString(36) + goog.now().toString(36); + if(!goog.global[goog.net.Jsonp.CALLBACKS]) { + goog.global[goog.net.Jsonp.CALLBACKS] = {} + } + var uri = this.uri_.clone(); + if(payload) { + goog.net.Jsonp.addPayloadToUri_(payload, uri) + } + if(opt_replyCallback) { + var reply = goog.net.Jsonp.newReplyHandler_(id, opt_replyCallback); + goog.global[goog.net.Jsonp.CALLBACKS][id] = reply; + uri.setParameterValues(this.callbackParamName_, goog.net.Jsonp.CALLBACKS + "." + id) + } + var deferred = goog.net.jsloader.load(uri.toString(), {timeout:this.timeout_, cleanupWhenDone:true}); + var error = goog.net.Jsonp.newErrorHandler_(id, payload, opt_errorCallback); + deferred.addErrback(error); + return{id_:id, deferred_:deferred} +}; +goog.net.Jsonp.prototype.cancel = function(request) { + if(request) { + if(request.deferred_) { + request.deferred_.cancel() + } + if(request.id_) { + goog.net.Jsonp.cleanup_(request.id_, false) + } + } +}; +goog.net.Jsonp.newErrorHandler_ = function(id, payload, opt_errorCallback) { + return function() { + goog.net.Jsonp.cleanup_(id, false); + if(opt_errorCallback) { + opt_errorCallback(payload) + } + } +}; +goog.net.Jsonp.newReplyHandler_ = function(id, replyCallback) { + return function(var_args) { + goog.net.Jsonp.cleanup_(id, true); + replyCallback.apply(undefined, arguments) + } +}; +goog.net.Jsonp.cleanup_ = function(id, deleteReplyHandler) { + if(goog.global[goog.net.Jsonp.CALLBACKS][id]) { + if(deleteReplyHandler) { + delete goog.global[goog.net.Jsonp.CALLBACKS][id] + }else { + goog.global[goog.net.Jsonp.CALLBACKS][id] = goog.nullFunction + } + } +}; +goog.net.Jsonp.addPayloadToUri_ = function(payload, uri) { + for(var name in payload) { + if(!payload.hasOwnProperty || payload.hasOwnProperty(name)) { + uri.setParameterValues(name, payload[name]) + } + } + return uri +}; +goog.provide("ol.source.TileImage"); +goog.require("goog.asserts"); +goog.require("ol.Attribution"); +goog.require("ol.Extent"); +goog.require("ol.ImageTile"); +goog.require("ol.Tile"); +goog.require("ol.TileCache"); +goog.require("ol.TileCoord"); +goog.require("ol.TileLoadFunctionType"); +goog.require("ol.TileState"); +goog.require("ol.TileUrlFunction"); +goog.require("ol.TileUrlFunctionType"); +goog.require("ol.source.Tile"); +goog.require("ol.tilegrid.TileGrid"); +ol.source.TileImageOptions; +ol.source.TileImage = function(options) { + goog.base(this, {attributions:options.attributions, extent:options.extent, logo:options.logo, opaque:options.opaque, projection:options.projection, tileGrid:options.tileGrid}); + this.tileUrlFunction = goog.isDef(options.tileUrlFunction) ? options.tileUrlFunction : ol.TileUrlFunction.nullTileUrlFunction; + this.crossOrigin = goog.isDef(options.crossOrigin) ? options.crossOrigin : null; + this.tileCache = new ol.TileCache; + this.tileLoadFunction = goog.isDef(options.tileLoadFunction) ? options.tileLoadFunction : ol.source.TileImage.defaultTileLoadFunction; + this.tileClass = goog.isDef(options.tileClass) ? options.tileClass : ol.ImageTile +}; +goog.inherits(ol.source.TileImage, ol.source.Tile); +ol.source.TileImage.defaultTileLoadFunction = function(imageTile, src) { + imageTile.getImage().src = src +}; +ol.source.TileImage.prototype.canExpireCache = function() { + return this.tileCache.canExpireCache() +}; +ol.source.TileImage.prototype.expireCache = function(usedTiles) { + this.tileCache.expireCache(usedTiles) +}; +ol.source.TileImage.prototype.getTile = function(z, x, y, pixelRatio, projection) { + var tileCoordKey = this.getKeyZXY(z, x, y); + if(this.tileCache.containsKey(tileCoordKey)) { + return(this.tileCache.get(tileCoordKey)) + }else { + goog.asserts.assert(projection); + var tileCoord = new ol.TileCoord(z, x, y); + var tileUrl = this.tileUrlFunction(tileCoord, pixelRatio, projection); + var tile = new this.tileClass(tileCoord, goog.isDef(tileUrl) ? ol.TileState.IDLE : ol.TileState.EMPTY, goog.isDef(tileUrl) ? tileUrl : "", this.crossOrigin, this.tileLoadFunction); + this.tileCache.set(tileCoordKey, tile); + return tile + } +}; +ol.source.TileImage.prototype.setTileUrlFunction = function(tileUrlFunction) { + this.tileCache.clear(); + this.tileUrlFunction = tileUrlFunction; + this.dispatchChangeEvent() +}; +ol.source.TileImage.prototype.useTile = function(z, x, y) { + var tileCoordKey = this.getKeyZXY(z, x, y); + if(this.tileCache.containsKey(tileCoordKey)) { + this.tileCache.get(tileCoordKey) + } +}; +goog.provide("ol.tilegrid.XYZ"); +goog.require("goog.math"); +goog.require("ol.TileCoord"); +goog.require("ol.TileRange"); +goog.require("ol.proj"); +goog.require("ol.proj.EPSG3857"); +goog.require("ol.tilegrid.TileGrid"); +ol.tilegrid.XYZ = function(options) { + var resolutions = new Array(options.maxZoom + 1); + var z; + var size = 2 * ol.proj.EPSG3857.HALF_SIZE / ol.DEFAULT_TILE_SIZE; + for(z = 0;z <= options.maxZoom;++z) { + resolutions[z] = size / Math.pow(2, z) + } + goog.base(this, {minZoom:options.minZoom, origin:[-ol.proj.EPSG3857.HALF_SIZE, ol.proj.EPSG3857.HALF_SIZE], resolutions:resolutions, tileSize:ol.DEFAULT_TILE_SIZE}) +}; +goog.inherits(ol.tilegrid.XYZ, ol.tilegrid.TileGrid); +ol.tilegrid.XYZ.prototype.createTileCoordTransform = function(opt_options) { + var options = goog.isDef(opt_options) ? opt_options : {}; + var minZ = this.minZoom; + var maxZ = this.maxZoom; + var wrapX = goog.isDef(options.wrapX) ? options.wrapX : true; + var tmpTileCoord = new ol.TileCoord(0, 0, 0); + var tileRangeByZ = null; + if(goog.isDef(options.extent)) { + tileRangeByZ = new Array(maxZ + 1); + var z; + for(z = 0;z <= maxZ;++z) { + if(z < minZ) { + tileRangeByZ[z] = null + }else { + tileRangeByZ[z] = this.getTileRangeForExtentAndZ(options.extent, z) + } + } + } + return function(tileCoord, projection, opt_tileCoord) { + var z = tileCoord.z; + if(z < minZ || maxZ < z) { + return null + } + var n = Math.pow(2, z); + var x = tileCoord.x; + if(wrapX) { + x = goog.math.modulo(x, n) + }else { + if(x < 0 || n <= x) { + return null + } + } + var y = tileCoord.y; + if(y < -n || -1 < y) { + return null + } + if(!goog.isNull(tileRangeByZ)) { + tmpTileCoord.z = z; + tmpTileCoord.x = x; + tmpTileCoord.y = y; + if(!tileRangeByZ[z].contains(tmpTileCoord)) { + return null + } + } + return ol.TileCoord.createOrUpdate(z, x, -y - 1, opt_tileCoord) + } +}; +ol.tilegrid.XYZ.prototype.getTileCoordChildTileRange = function(tileCoord, opt_tileRange) { + if(tileCoord.z < this.maxZoom) { + return ol.TileRange.createOrUpdate(2 * tileCoord.x, 2 * (tileCoord.x + 1), 2 * tileCoord.y, 2 * (tileCoord.y + 1), opt_tileRange) + }else { + return null + } +}; +ol.tilegrid.XYZ.prototype.forEachTileCoordParentTileRange = function(tileCoord, callback, opt_this, opt_tileRange) { + var tileRange = ol.TileRange.createOrUpdate(0, tileCoord.x, 0, tileCoord.y, opt_tileRange); + var z; + for(z = tileCoord.z - 1;z >= this.minZoom;--z) { + tileRange.minX = tileRange.maxX >>= 1; + tileRange.minY = tileRange.maxY >>= 1; + if(callback.call(opt_this, z, tileRange)) { + return true + } + } + return false +}; +goog.provide("ol.source.BingMaps"); +goog.require("goog.Uri"); +goog.require("goog.array"); +goog.require("goog.asserts"); +goog.require("goog.net.Jsonp"); +goog.require("ol.Attribution"); +goog.require("ol.TileRange"); +goog.require("ol.TileUrlFunction"); +goog.require("ol.extent"); +goog.require("ol.proj"); +goog.require("ol.source.State"); +goog.require("ol.source.TileImage"); +goog.require("ol.tilegrid.XYZ"); +ol.source.BingMaps = function(options) { + goog.base(this, {crossOrigin:"anonymous", opaque:true, projection:ol.proj.get("EPSG:3857"), state:ol.source.State.LOADING, tileLoadFunction:options.tileLoadFunction}); + this.culture_ = goog.isDef(options.culture) ? options.culture : "en-us"; + var uri = new goog.Uri("//dev.virtualearth.net/REST/v1/Imagery/Metadata/" + options.imagerySet); + var jsonp = new goog.net.Jsonp(uri, "jsonp"); + jsonp.send({"include":"ImageryProviders", "key":options.key}, goog.bind(this.handleImageryMetadataResponse, this)) +}; +goog.inherits(ol.source.BingMaps, ol.source.TileImage); +ol.source.BingMaps.TOS_ATTRIBUTION = new ol.Attribution({html:'\x3ca class\x3d"ol-attribution-bing-tos" target\x3d"_blank" ' + 'href\x3d"http://www.microsoft.com/maps/product/terms.html"\x3e' + "Terms of Use\x3c/a\x3e"}); +ol.source.BingMaps.prototype.handleImageryMetadataResponse = function(response) { + if(response.statusCode != 200 || response.statusDescription != "OK" || response.authenticationResultCode != "ValidCredentials" || response.resourceSets.length != 1 || response.resourceSets[0].resources.length != 1) { + this.setState(ol.source.State.ERROR); + return + } + var brandLogoUri = response.brandLogoUri; + var resource = response.resourceSets[0].resources[0]; + goog.asserts.assert(resource.imageWidth == resource.imageHeight); + var tileGrid = new ol.tilegrid.XYZ({minZoom:resource.zoomMin, maxZoom:resource.zoomMax, tileSize:resource.imageWidth}); + this.tileGrid = tileGrid; + var culture = this.culture_; + this.tileUrlFunction = ol.TileUrlFunction.withTileCoordTransform(tileGrid.createTileCoordTransform(), ol.TileUrlFunction.createFromTileUrlFunctions(goog.array.map(resource.imageUrlSubdomains, function(subdomain) { + var imageUrl = resource.imageUrl.replace("{subdomain}", subdomain).replace("{culture}", culture); + return function(tileCoord, pixelRatio, projection) { + goog.asserts.assert(ol.proj.equivalent(projection, this.getProjection())); + if(goog.isNull(tileCoord)) { + return undefined + }else { + return imageUrl.replace("{quadkey}", tileCoord.quadKey()) + } + } + }))); + if(resource.imageryProviders) { + var transform = ol.proj.getTransformFromProjections(ol.proj.get("EPSG:4326"), this.getProjection()); + var attributions = goog.array.map(resource.imageryProviders, function(imageryProvider) { + var html = imageryProvider.attribution; + var tileRanges = {}; + goog.array.forEach(imageryProvider.coverageAreas, function(coverageArea) { + var minZ = coverageArea.zoomMin; + var maxZ = coverageArea.zoomMax; + var bbox = coverageArea.bbox; + var epsg4326Extent = [bbox[1], bbox[0], bbox[3], bbox[2]]; + var extent = ol.extent.transform(epsg4326Extent, transform); + var tileRange, z, zKey; + for(z = minZ;z <= maxZ;++z) { + zKey = z.toString(); + tileRange = tileGrid.getTileRangeForExtentAndZ(extent, z); + if(zKey in tileRanges) { + tileRanges[zKey].push(tileRange) + }else { + tileRanges[zKey] = [tileRange] + } + } + }); + return new ol.Attribution({html:html, tileRanges:tileRanges}) + }); + attributions.push(ol.source.BingMaps.TOS_ATTRIBUTION); + this.setAttributions(attributions) + } + this.setLogo(brandLogoUri); + this.setState(ol.source.State.READY) +}; +goog.provide("goog.net.EventType"); +goog.net.EventType = {COMPLETE:"complete", SUCCESS:"success", ERROR:"error", ABORT:"abort", READY:"ready", READY_STATE_CHANGE:"readystatechange", TIMEOUT:"timeout", INCREMENTAL_DATA:"incrementaldata", PROGRESS:"progress"}; +goog.provide("goog.Timer"); +goog.require("goog.events.EventTarget"); +goog.Timer = function(opt_interval, opt_timerObject) { + goog.events.EventTarget.call(this); + this.interval_ = opt_interval || 1; + this.timerObject_ = opt_timerObject || goog.Timer.defaultTimerObject; + this.boundTick_ = goog.bind(this.tick_, this); + this.last_ = goog.now() +}; +goog.inherits(goog.Timer, goog.events.EventTarget); +goog.Timer.MAX_TIMEOUT_ = 2147483647; +goog.Timer.prototype.enabled = false; +goog.Timer.defaultTimerObject = goog.global; +goog.Timer.intervalScale = 0.8; +goog.Timer.prototype.timer_ = null; +goog.Timer.prototype.getInterval = function() { + return this.interval_ +}; +goog.Timer.prototype.setInterval = function(interval) { + this.interval_ = interval; + if(this.timer_ && this.enabled) { + this.stop(); + this.start() + }else { + if(this.timer_) { + this.stop() + } + } +}; +goog.Timer.prototype.tick_ = function() { + if(this.enabled) { + var elapsed = goog.now() - this.last_; + if(elapsed > 0 && elapsed < this.interval_ * goog.Timer.intervalScale) { + this.timer_ = this.timerObject_.setTimeout(this.boundTick_, this.interval_ - elapsed); + return + } + if(this.timer_) { + this.timerObject_.clearTimeout(this.timer_); + this.timer_ = null + } + this.dispatchTick(); + if(this.enabled) { + this.timer_ = this.timerObject_.setTimeout(this.boundTick_, this.interval_); + this.last_ = goog.now() + } + } +}; +goog.Timer.prototype.dispatchTick = function() { + this.dispatchEvent(goog.Timer.TICK) +}; +goog.Timer.prototype.start = function() { + this.enabled = true; + if(!this.timer_) { + this.timer_ = this.timerObject_.setTimeout(this.boundTick_, this.interval_); + this.last_ = goog.now() + } +}; +goog.Timer.prototype.stop = function() { + this.enabled = false; + if(this.timer_) { + this.timerObject_.clearTimeout(this.timer_); + this.timer_ = null + } +}; +goog.Timer.prototype.disposeInternal = function() { + goog.Timer.superClass_.disposeInternal.call(this); + this.stop(); + delete this.timerObject_ +}; +goog.Timer.TICK = "tick"; +goog.Timer.callOnce = function(listener, opt_delay, opt_handler) { + if(goog.isFunction(listener)) { + if(opt_handler) { + listener = goog.bind(listener, opt_handler) + } + }else { + if(listener && typeof listener.handleEvent == "function") { + listener = goog.bind(listener.handleEvent, listener) + }else { + throw Error("Invalid listener argument"); + } + } + if(opt_delay > goog.Timer.MAX_TIMEOUT_) { + return-1 + }else { + return goog.Timer.defaultTimerObject.setTimeout(listener, opt_delay || 0) + } +}; +goog.Timer.clear = function(timerId) { + goog.Timer.defaultTimerObject.clearTimeout(timerId) +}; +goog.provide("goog.net.ErrorCode"); +goog.net.ErrorCode = {NO_ERROR:0, ACCESS_DENIED:1, FILE_NOT_FOUND:2, FF_SILENT_ERROR:3, CUSTOM_ERROR:4, EXCEPTION:5, HTTP_ERROR:6, ABORT:7, TIMEOUT:8, OFFLINE:9}; +goog.net.ErrorCode.getDebugMessage = function(errorCode) { + switch(errorCode) { + case goog.net.ErrorCode.NO_ERROR: + return"No Error"; + case goog.net.ErrorCode.ACCESS_DENIED: + return"Access denied to content document"; + case goog.net.ErrorCode.FILE_NOT_FOUND: + return"File not found"; + case goog.net.ErrorCode.FF_SILENT_ERROR: + return"Firefox silently errored"; + case goog.net.ErrorCode.CUSTOM_ERROR: + return"Application custom error"; + case goog.net.ErrorCode.EXCEPTION: + return"An exception occurred"; + case goog.net.ErrorCode.HTTP_ERROR: + return"Http response at 400 or 500 level"; + case goog.net.ErrorCode.ABORT: + return"Request was aborted"; + case goog.net.ErrorCode.TIMEOUT: + return"Request timed out"; + case goog.net.ErrorCode.OFFLINE: + return"The resource is not available offline"; + default: + return"Unrecognized error code" + } +}; +goog.provide("goog.net.HttpStatus"); +goog.net.HttpStatus = {CONTINUE:100, SWITCHING_PROTOCOLS:101, OK:200, CREATED:201, ACCEPTED:202, NON_AUTHORITATIVE_INFORMATION:203, NO_CONTENT:204, RESET_CONTENT:205, PARTIAL_CONTENT:206, MULTIPLE_CHOICES:300, MOVED_PERMANENTLY:301, FOUND:302, SEE_OTHER:303, NOT_MODIFIED:304, USE_PROXY:305, TEMPORARY_REDIRECT:307, BAD_REQUEST:400, UNAUTHORIZED:401, PAYMENT_REQUIRED:402, FORBIDDEN:403, NOT_FOUND:404, METHOD_NOT_ALLOWED:405, NOT_ACCEPTABLE:406, PROXY_AUTHENTICATION_REQUIRED:407, REQUEST_TIMEOUT:408, +CONFLICT:409, GONE:410, LENGTH_REQUIRED:411, PRECONDITION_FAILED:412, REQUEST_ENTITY_TOO_LARGE:413, REQUEST_URI_TOO_LONG:414, UNSUPPORTED_MEDIA_TYPE:415, REQUEST_RANGE_NOT_SATISFIABLE:416, EXPECTATION_FAILED:417, INTERNAL_SERVER_ERROR:500, NOT_IMPLEMENTED:501, BAD_GATEWAY:502, SERVICE_UNAVAILABLE:503, GATEWAY_TIMEOUT:504, HTTP_VERSION_NOT_SUPPORTED:505, QUIRK_IE_NO_CONTENT:1223}; +goog.net.HttpStatus.isSuccess = function(status) { + switch(status) { + case goog.net.HttpStatus.OK: + ; + case goog.net.HttpStatus.CREATED: + ; + case goog.net.HttpStatus.ACCEPTED: + ; + case goog.net.HttpStatus.NO_CONTENT: + ; + case goog.net.HttpStatus.PARTIAL_CONTENT: + ; + case goog.net.HttpStatus.NOT_MODIFIED: + ; + case goog.net.HttpStatus.QUIRK_IE_NO_CONTENT: + return true; + default: + return false + } +}; +goog.provide("goog.net.XmlHttpFactory"); +goog.net.XmlHttpFactory = function() { +}; +goog.net.XmlHttpFactory.prototype.cachedOptions_ = null; +goog.net.XmlHttpFactory.prototype.createInstance = goog.abstractMethod; +goog.net.XmlHttpFactory.prototype.getOptions = function() { + return this.cachedOptions_ || (this.cachedOptions_ = this.internalGetOptions()) +}; +goog.net.XmlHttpFactory.prototype.internalGetOptions = goog.abstractMethod; +goog.provide("goog.net.WrapperXmlHttpFactory"); +goog.require("goog.net.XmlHttpFactory"); +goog.net.WrapperXmlHttpFactory = function(xhrFactory, optionsFactory) { + goog.net.XmlHttpFactory.call(this); + this.xhrFactory_ = xhrFactory; + this.optionsFactory_ = optionsFactory +}; +goog.inherits(goog.net.WrapperXmlHttpFactory, goog.net.XmlHttpFactory); +goog.net.WrapperXmlHttpFactory.prototype.createInstance = function() { + return this.xhrFactory_() +}; +goog.net.WrapperXmlHttpFactory.prototype.getOptions = function() { + return this.optionsFactory_() +}; +goog.provide("goog.net.DefaultXmlHttpFactory"); +goog.provide("goog.net.XmlHttp"); +goog.provide("goog.net.XmlHttp.OptionType"); +goog.provide("goog.net.XmlHttp.ReadyState"); +goog.require("goog.net.WrapperXmlHttpFactory"); +goog.require("goog.net.XmlHttpFactory"); +goog.net.XmlHttp = function() { + return goog.net.XmlHttp.factory_.createInstance() +}; +goog.define("goog.net.XmlHttp.ASSUME_NATIVE_XHR", false); +goog.net.XmlHttp.getOptions = function() { + return goog.net.XmlHttp.factory_.getOptions() +}; +goog.net.XmlHttp.OptionType = {USE_NULL_FUNCTION:0, LOCAL_REQUEST_ERROR:1}; +goog.net.XmlHttp.ReadyState = {UNINITIALIZED:0, LOADING:1, LOADED:2, INTERACTIVE:3, COMPLETE:4}; +goog.net.XmlHttp.factory_; +goog.net.XmlHttp.setFactory = function(factory, optionsFactory) { + goog.net.XmlHttp.setGlobalFactory(new goog.net.WrapperXmlHttpFactory((factory), (optionsFactory))) +}; +goog.net.XmlHttp.setGlobalFactory = function(factory) { + goog.net.XmlHttp.factory_ = factory +}; +goog.net.DefaultXmlHttpFactory = function() { + goog.net.XmlHttpFactory.call(this) +}; +goog.inherits(goog.net.DefaultXmlHttpFactory, goog.net.XmlHttpFactory); +goog.net.DefaultXmlHttpFactory.prototype.createInstance = function() { + var progId = this.getProgId_(); + if(progId) { + return new ActiveXObject(progId) + }else { + return new XMLHttpRequest + } +}; +goog.net.DefaultXmlHttpFactory.prototype.internalGetOptions = function() { + var progId = this.getProgId_(); + var options = {}; + if(progId) { + options[goog.net.XmlHttp.OptionType.USE_NULL_FUNCTION] = true; + options[goog.net.XmlHttp.OptionType.LOCAL_REQUEST_ERROR] = true + } + return options +}; +goog.net.DefaultXmlHttpFactory.prototype.ieProgId_; +goog.net.DefaultXmlHttpFactory.prototype.getProgId_ = function() { + if(goog.net.XmlHttp.ASSUME_NATIVE_XHR) { + return"" + } + if(!this.ieProgId_ && typeof XMLHttpRequest == "undefined" && typeof ActiveXObject != "undefined") { + var ACTIVE_X_IDENTS = ["MSXML2.XMLHTTP.6.0", "MSXML2.XMLHTTP.3.0", "MSXML2.XMLHTTP", "Microsoft.XMLHTTP"]; + for(var i = 0;i < ACTIVE_X_IDENTS.length;i++) { + var candidate = ACTIVE_X_IDENTS[i]; + try { + new ActiveXObject(candidate); + this.ieProgId_ = candidate; + return candidate + }catch(e) { + } + } + throw Error("Could not create ActiveXObject. ActiveX might be disabled," + " or MSXML might not be installed"); + } + return(this.ieProgId_) +}; +goog.net.XmlHttp.setGlobalFactory(new goog.net.DefaultXmlHttpFactory); +goog.provide("goog.net.XhrIo"); +goog.provide("goog.net.XhrIo.ResponseType"); +goog.require("goog.Timer"); +goog.require("goog.array"); +goog.require("goog.debug.entryPointRegistry"); +goog.require("goog.events.EventTarget"); +goog.require("goog.json"); +goog.require("goog.log"); +goog.require("goog.net.ErrorCode"); +goog.require("goog.net.EventType"); +goog.require("goog.net.HttpStatus"); +goog.require("goog.net.XmlHttp"); +goog.require("goog.object"); +goog.require("goog.string"); +goog.require("goog.structs"); +goog.require("goog.structs.Map"); +goog.require("goog.uri.utils"); +goog.require("goog.userAgent"); +goog.net.XhrIo = function(opt_xmlHttpFactory) { + goog.base(this); + this.headers = new goog.structs.Map; + this.xmlHttpFactory_ = opt_xmlHttpFactory || null; + this.active_ = false; + this.xhr_ = null; + this.xhrOptions_ = null; + this.lastUri_ = ""; + this.lastMethod_ = ""; + this.lastErrorCode_ = goog.net.ErrorCode.NO_ERROR; + this.lastError_ = ""; + this.errorDispatched_ = false; + this.inSend_ = false; + this.inOpen_ = false; + this.inAbort_ = false; + this.timeoutInterval_ = 0; + this.timeoutId_ = null; + this.responseType_ = goog.net.XhrIo.ResponseType.DEFAULT; + this.withCredentials_ = false; + this.useXhr2Timeout_ = false +}; +goog.inherits(goog.net.XhrIo, goog.events.EventTarget); +goog.net.XhrIo.ResponseType = {DEFAULT:"", TEXT:"text", DOCUMENT:"document", BLOB:"blob", ARRAY_BUFFER:"arraybuffer"}; +goog.net.XhrIo.prototype.logger_ = goog.log.getLogger("goog.net.XhrIo"); +goog.net.XhrIo.CONTENT_TYPE_HEADER = "Content-Type"; +goog.net.XhrIo.HTTP_SCHEME_PATTERN = /^https?$/i; +goog.net.XhrIo.METHODS_WITH_FORM_DATA = ["POST", "PUT"]; +goog.net.XhrIo.FORM_CONTENT_TYPE = "application/x-www-form-urlencoded;charset\x3dutf-8"; +goog.net.XhrIo.XHR2_TIMEOUT_ = "timeout"; +goog.net.XhrIo.XHR2_ON_TIMEOUT_ = "ontimeout"; +goog.net.XhrIo.sendInstances_ = []; +goog.net.XhrIo.send = function(url, opt_callback, opt_method, opt_content, opt_headers, opt_timeoutInterval, opt_withCredentials) { + var x = new goog.net.XhrIo; + goog.net.XhrIo.sendInstances_.push(x); + if(opt_callback) { + x.listen(goog.net.EventType.COMPLETE, opt_callback) + } + x.listenOnce(goog.net.EventType.READY, x.cleanupSend_); + if(opt_timeoutInterval) { + x.setTimeoutInterval(opt_timeoutInterval) + } + if(opt_withCredentials) { + x.setWithCredentials(opt_withCredentials) + } + x.send(url, opt_method, opt_content, opt_headers) +}; +goog.net.XhrIo.cleanup = function() { + var instances = goog.net.XhrIo.sendInstances_; + while(instances.length) { + instances.pop().dispose() + } +}; +goog.net.XhrIo.protectEntryPoints = function(errorHandler) { + goog.net.XhrIo.prototype.onReadyStateChangeEntryPoint_ = errorHandler.protectEntryPoint(goog.net.XhrIo.prototype.onReadyStateChangeEntryPoint_) +}; +goog.net.XhrIo.prototype.cleanupSend_ = function() { + this.dispose(); + goog.array.remove(goog.net.XhrIo.sendInstances_, this) +}; +goog.net.XhrIo.prototype.getTimeoutInterval = function() { + return this.timeoutInterval_ +}; +goog.net.XhrIo.prototype.setTimeoutInterval = function(ms) { + this.timeoutInterval_ = Math.max(0, ms) +}; +goog.net.XhrIo.prototype.setResponseType = function(type) { + this.responseType_ = type +}; +goog.net.XhrIo.prototype.getResponseType = function() { + return this.responseType_ +}; +goog.net.XhrIo.prototype.setWithCredentials = function(withCredentials) { + this.withCredentials_ = withCredentials +}; +goog.net.XhrIo.prototype.getWithCredentials = function() { + return this.withCredentials_ +}; +goog.net.XhrIo.prototype.send = function(url, opt_method, opt_content, opt_headers) { + if(this.xhr_) { + throw Error("[goog.net.XhrIo] Object is active with another request\x3d" + this.lastUri_ + "; newUri\x3d" + url); + } + var method = opt_method ? opt_method.toUpperCase() : "GET"; + this.lastUri_ = url; + this.lastError_ = ""; + this.lastErrorCode_ = goog.net.ErrorCode.NO_ERROR; + this.lastMethod_ = method; + this.errorDispatched_ = false; + this.active_ = true; + this.xhr_ = this.createXhr(); + this.xhrOptions_ = this.xmlHttpFactory_ ? this.xmlHttpFactory_.getOptions() : goog.net.XmlHttp.getOptions(); + this.xhr_.onreadystatechange = goog.bind(this.onReadyStateChange_, this); + try { + goog.log.fine(this.logger_, this.formatMsg_("Opening Xhr")); + this.inOpen_ = true; + this.xhr_.open(method, url, true); + this.inOpen_ = false + }catch(err) { + goog.log.fine(this.logger_, this.formatMsg_("Error opening Xhr: " + err.message)); + this.error_(goog.net.ErrorCode.EXCEPTION, err); + return + } + var content = opt_content || ""; + var headers = this.headers.clone(); + if(opt_headers) { + goog.structs.forEach(opt_headers, function(value, key) { + headers.set(key, value) + }) + } + var contentTypeKey = goog.array.find(headers.getKeys(), goog.net.XhrIo.isContentTypeHeader_); + var contentIsFormData = goog.global["FormData"] && content instanceof goog.global["FormData"]; + if(goog.array.contains(goog.net.XhrIo.METHODS_WITH_FORM_DATA, method) && !contentTypeKey && !contentIsFormData) { + headers.set(goog.net.XhrIo.CONTENT_TYPE_HEADER, goog.net.XhrIo.FORM_CONTENT_TYPE) + } + goog.structs.forEach(headers, function(value, key) { + this.xhr_.setRequestHeader(key, value) + }, this); + if(this.responseType_) { + this.xhr_.responseType = this.responseType_ + } + if(goog.object.containsKey(this.xhr_, "withCredentials")) { + this.xhr_.withCredentials = this.withCredentials_ + } + try { + this.cleanUpTimeoutTimer_(); + if(this.timeoutInterval_ > 0) { + this.useXhr2Timeout_ = goog.net.XhrIo.shouldUseXhr2Timeout_(this.xhr_); + goog.log.fine(this.logger_, this.formatMsg_("Will abort after " + this.timeoutInterval_ + "ms if incomplete, xhr2 " + this.useXhr2Timeout_)); + if(this.useXhr2Timeout_) { + this.xhr_[goog.net.XhrIo.XHR2_TIMEOUT_] = this.timeoutInterval_; + this.xhr_[goog.net.XhrIo.XHR2_ON_TIMEOUT_] = goog.bind(this.timeout_, this) + }else { + this.timeoutId_ = goog.Timer.callOnce(this.timeout_, this.timeoutInterval_, this) + } + } + goog.log.fine(this.logger_, this.formatMsg_("Sending request")); + this.inSend_ = true; + this.xhr_.send(content); + this.inSend_ = false + }catch(err) { + goog.log.fine(this.logger_, this.formatMsg_("Send error: " + err.message)); + this.error_(goog.net.ErrorCode.EXCEPTION, err) + } +}; +goog.net.XhrIo.shouldUseXhr2Timeout_ = function(xhr) { + return goog.userAgent.IE && goog.userAgent.isVersionOrHigher(9) && goog.isNumber(xhr[goog.net.XhrIo.XHR2_TIMEOUT_]) && goog.isDef(xhr[goog.net.XhrIo.XHR2_ON_TIMEOUT_]) +}; +goog.net.XhrIo.isContentTypeHeader_ = function(header) { + return goog.string.caseInsensitiveEquals(goog.net.XhrIo.CONTENT_TYPE_HEADER, header) +}; +goog.net.XhrIo.prototype.createXhr = function() { + return this.xmlHttpFactory_ ? this.xmlHttpFactory_.createInstance() : goog.net.XmlHttp() +}; +goog.net.XhrIo.prototype.timeout_ = function() { + if(typeof goog == "undefined") { + }else { + if(this.xhr_) { + this.lastError_ = "Timed out after " + this.timeoutInterval_ + "ms, aborting"; + this.lastErrorCode_ = goog.net.ErrorCode.TIMEOUT; + goog.log.fine(this.logger_, this.formatMsg_(this.lastError_)); + this.dispatchEvent(goog.net.EventType.TIMEOUT); + this.abort(goog.net.ErrorCode.TIMEOUT) + } + } +}; +goog.net.XhrIo.prototype.error_ = function(errorCode, err) { + this.active_ = false; + if(this.xhr_) { + this.inAbort_ = true; + this.xhr_.abort(); + this.inAbort_ = false + } + this.lastError_ = err; + this.lastErrorCode_ = errorCode; + this.dispatchErrors_(); + this.cleanUpXhr_() +}; +goog.net.XhrIo.prototype.dispatchErrors_ = function() { + if(!this.errorDispatched_) { + this.errorDispatched_ = true; + this.dispatchEvent(goog.net.EventType.COMPLETE); + this.dispatchEvent(goog.net.EventType.ERROR) + } +}; +goog.net.XhrIo.prototype.abort = function(opt_failureCode) { + if(this.xhr_ && this.active_) { + goog.log.fine(this.logger_, this.formatMsg_("Aborting")); + this.active_ = false; + this.inAbort_ = true; + this.xhr_.abort(); + this.inAbort_ = false; + this.lastErrorCode_ = opt_failureCode || goog.net.ErrorCode.ABORT; + this.dispatchEvent(goog.net.EventType.COMPLETE); + this.dispatchEvent(goog.net.EventType.ABORT); + this.cleanUpXhr_() + } +}; +goog.net.XhrIo.prototype.disposeInternal = function() { + if(this.xhr_) { + if(this.active_) { + this.active_ = false; + this.inAbort_ = true; + this.xhr_.abort(); + this.inAbort_ = false + } + this.cleanUpXhr_(true) + } + goog.base(this, "disposeInternal") +}; +goog.net.XhrIo.prototype.onReadyStateChange_ = function() { + if(this.isDisposed()) { + return + } + if(!this.inOpen_ && !this.inSend_ && !this.inAbort_) { + this.onReadyStateChangeEntryPoint_() + }else { + this.onReadyStateChangeHelper_() + } +}; +goog.net.XhrIo.prototype.onReadyStateChangeEntryPoint_ = function() { + this.onReadyStateChangeHelper_() +}; +goog.net.XhrIo.prototype.onReadyStateChangeHelper_ = function() { + if(!this.active_) { + return + } + if(typeof goog == "undefined") { + }else { + if(this.xhrOptions_[goog.net.XmlHttp.OptionType.LOCAL_REQUEST_ERROR] && this.getReadyState() == goog.net.XmlHttp.ReadyState.COMPLETE && this.getStatus() == 2) { + goog.log.fine(this.logger_, this.formatMsg_("Local request error detected and ignored")) + }else { + if(this.inSend_ && this.getReadyState() == goog.net.XmlHttp.ReadyState.COMPLETE) { + goog.Timer.callOnce(this.onReadyStateChange_, 0, this); + return + } + this.dispatchEvent(goog.net.EventType.READY_STATE_CHANGE); + if(this.isComplete()) { + goog.log.fine(this.logger_, this.formatMsg_("Request complete")); + this.active_ = false; + try { + if(this.isSuccess()) { + this.dispatchEvent(goog.net.EventType.COMPLETE); + this.dispatchEvent(goog.net.EventType.SUCCESS) + }else { + this.lastErrorCode_ = goog.net.ErrorCode.HTTP_ERROR; + this.lastError_ = this.getStatusText() + " [" + this.getStatus() + "]"; + this.dispatchErrors_() + } + }finally { + this.cleanUpXhr_() + } + } + } + } +}; +goog.net.XhrIo.prototype.cleanUpXhr_ = function(opt_fromDispose) { + if(this.xhr_) { + this.cleanUpTimeoutTimer_(); + var xhr = this.xhr_; + var clearedOnReadyStateChange = this.xhrOptions_[goog.net.XmlHttp.OptionType.USE_NULL_FUNCTION] ? goog.nullFunction : null; + this.xhr_ = null; + this.xhrOptions_ = null; + if(!opt_fromDispose) { + this.dispatchEvent(goog.net.EventType.READY) + } + try { + xhr.onreadystatechange = clearedOnReadyStateChange + }catch(e) { + goog.log.error(this.logger_, "Problem encountered resetting onreadystatechange: " + e.message) + } + } +}; +goog.net.XhrIo.prototype.cleanUpTimeoutTimer_ = function() { + if(this.xhr_ && this.useXhr2Timeout_) { + this.xhr_[goog.net.XhrIo.XHR2_ON_TIMEOUT_] = null + } + if(goog.isNumber(this.timeoutId_)) { + goog.Timer.clear(this.timeoutId_); + this.timeoutId_ = null + } +}; +goog.net.XhrIo.prototype.isActive = function() { + return!!this.xhr_ +}; +goog.net.XhrIo.prototype.isComplete = function() { + return this.getReadyState() == goog.net.XmlHttp.ReadyState.COMPLETE +}; +goog.net.XhrIo.prototype.isSuccess = function() { + var status = this.getStatus(); + return goog.net.HttpStatus.isSuccess(status) || status === 0 && !this.isLastUriEffectiveSchemeHttp_() +}; +goog.net.XhrIo.prototype.isLastUriEffectiveSchemeHttp_ = function() { + var scheme = goog.uri.utils.getEffectiveScheme(String(this.lastUri_)); + return goog.net.XhrIo.HTTP_SCHEME_PATTERN.test(scheme) +}; +goog.net.XhrIo.prototype.getReadyState = function() { + return this.xhr_ ? (this.xhr_.readyState) : goog.net.XmlHttp.ReadyState.UNINITIALIZED +}; +goog.net.XhrIo.prototype.getStatus = function() { + try { + return this.getReadyState() > goog.net.XmlHttp.ReadyState.LOADED ? this.xhr_.status : -1 + }catch(e) { + goog.log.warning(this.logger_, "Can not get status: " + e.message); + return-1 + } +}; +goog.net.XhrIo.prototype.getStatusText = function() { + try { + return this.getReadyState() > goog.net.XmlHttp.ReadyState.LOADED ? this.xhr_.statusText : "" + }catch(e) { + goog.log.fine(this.logger_, "Can not get status: " + e.message); + return"" + } +}; +goog.net.XhrIo.prototype.getLastUri = function() { + return String(this.lastUri_) +}; +goog.net.XhrIo.prototype.getResponseText = function() { + try { + return this.xhr_ ? this.xhr_.responseText : "" + }catch(e) { + goog.log.fine(this.logger_, "Can not get responseText: " + e.message); + return"" + } +}; +goog.net.XhrIo.prototype.getResponseBody = function() { + try { + if(this.xhr_ && "responseBody" in this.xhr_) { + return this.xhr_["responseBody"] + } + }catch(e) { + goog.log.fine(this.logger_, "Can not get responseBody: " + e.message) + } + return null +}; +goog.net.XhrIo.prototype.getResponseXml = function() { + try { + return this.xhr_ ? this.xhr_.responseXML : null + }catch(e) { + goog.log.fine(this.logger_, "Can not get responseXML: " + e.message); + return null + } +}; +goog.net.XhrIo.prototype.getResponseJson = function(opt_xssiPrefix) { + if(!this.xhr_) { + return undefined + } + var responseText = this.xhr_.responseText; + if(opt_xssiPrefix && responseText.indexOf(opt_xssiPrefix) == 0) { + responseText = responseText.substring(opt_xssiPrefix.length) + } + return goog.json.parse(responseText) +}; +goog.net.XhrIo.prototype.getResponse = function() { + try { + if(!this.xhr_) { + return null + } + if("response" in this.xhr_) { + return this.xhr_.response + } + switch(this.responseType_) { + case goog.net.XhrIo.ResponseType.DEFAULT: + ; + case goog.net.XhrIo.ResponseType.TEXT: + return this.xhr_.responseText; + case goog.net.XhrIo.ResponseType.ARRAY_BUFFER: + if("mozResponseArrayBuffer" in this.xhr_) { + return this.xhr_.mozResponseArrayBuffer + } + } + goog.log.error(this.logger_, "Response type " + this.responseType_ + " is not " + "supported on this browser"); + return null + }catch(e) { + goog.log.fine(this.logger_, "Can not get response: " + e.message); + return null + } +}; +goog.net.XhrIo.prototype.getResponseHeader = function(key) { + return this.xhr_ && this.isComplete() ? this.xhr_.getResponseHeader(key) : undefined +}; +goog.net.XhrIo.prototype.getAllResponseHeaders = function() { + return this.xhr_ && this.isComplete() ? this.xhr_.getAllResponseHeaders() : "" +}; +goog.net.XhrIo.prototype.getLastErrorCode = function() { + return this.lastErrorCode_ +}; +goog.net.XhrIo.prototype.getLastError = function() { + return goog.isString(this.lastError_) ? this.lastError_ : String(this.lastError_) +}; +goog.net.XhrIo.prototype.formatMsg_ = function(msg) { + return msg + " [" + this.lastMethod_ + " " + this.lastUri_ + " " + this.getStatus() + "]" +}; +goog.debug.entryPointRegistry.register(function(transformer) { + goog.net.XhrIo.prototype.onReadyStateChangeEntryPoint_ = transformer(goog.net.XhrIo.prototype.onReadyStateChangeEntryPoint_) +}); +goog.provide("ol.source.VectorFile"); +goog.require("goog.asserts"); +goog.require("goog.dispose"); +goog.require("goog.events"); +goog.require("goog.net.EventType"); +goog.require("goog.net.XhrIo"); +goog.require("goog.net.XhrIo.ResponseType"); +goog.require("goog.userAgent"); +goog.require("ol.BrowserFeature"); +goog.require("ol.format.FormatType"); +goog.require("ol.proj"); +goog.require("ol.source.State"); +goog.require("ol.source.Vector"); +goog.require("ol.xml"); +ol.source.VectorFile = function(opt_options) { + var options = goog.isDef(opt_options) ? opt_options : {}; + goog.base(this, {attributions:options.attributions, extent:options.extent, logo:options.logo, projection:options.projection}); + this.format = options.format; + if(goog.isDef(options.doc)) { + this.readFeatures_(options.doc) + } + if(goog.isDef(options.node)) { + this.readFeatures_(options.node) + } + if(goog.isDef(options.object)) { + this.readFeatures_(options.object) + } + if(goog.isDef(options.text)) { + this.readFeatures_(options.text) + } + if(goog.isDef(options.arrayBuffer)) { + this.readFeatures_(options.arrayBuffer) + } + if(goog.isDef(options.url) || goog.isDef(options.urls)) { + this.setState(ol.source.State.LOADING); + var type = this.format.getType(); + var responseType; + if(type == ol.format.FormatType.BINARY && ol.BrowserFeature.HAS_ARRAY_BUFFER) { + responseType = goog.net.XhrIo.ResponseType.ARRAY_BUFFER + }else { + responseType = goog.net.XhrIo.ResponseType.TEXT + } + var xhrIo; + if(goog.isDef(options.url)) { + xhrIo = new goog.net.XhrIo; + xhrIo.setResponseType(responseType); + goog.events.listen(xhrIo, goog.net.EventType.COMPLETE, goog.bind(this.handleXhrIo_, this)); + xhrIo.send(options.url) + } + if(goog.isDef(options.urls)) { + var urls = options.urls; + var i, ii; + for(i = 0, ii = urls.length;i < ii;++i) { + xhrIo = new goog.net.XhrIo; + xhrIo.setResponseType(responseType); + goog.events.listen(xhrIo, goog.net.EventType.COMPLETE, goog.bind(this.handleXhrIo_, this)); + xhrIo.send(urls[i]) + } + } + } +}; +goog.inherits(ol.source.VectorFile, ol.source.Vector); +ol.source.VectorFile.prototype.handleXhrIo_ = function(event) { + var xhrIo = event.target; + goog.asserts.assertInstanceof(xhrIo, goog.net.XhrIo); + if(xhrIo.isSuccess()) { + var type = this.format.getType(); + var source; + if(type == ol.format.FormatType.BINARY && ol.BrowserFeature.HAS_ARRAY_BUFFER) { + source = xhrIo.getResponse(); + goog.asserts.assertInstanceof(source, ArrayBuffer) + }else { + if(type == ol.format.FormatType.JSON) { + source = xhrIo.getResponseJson() + }else { + if(type == ol.format.FormatType.TEXT) { + source = xhrIo.getResponseText() + }else { + if(type == ol.format.FormatType.XML) { + if(!goog.userAgent.IE) { + source = xhrIo.getResponseXml() + } + if(!goog.isDefAndNotNull(source)) { + source = ol.xml.load(xhrIo.getResponseText()) + } + }else { + goog.asserts.fail() + } + } + } + } + goog.dispose(xhrIo); + if(goog.isDefAndNotNull(source)) { + this.readFeatures_(source) + }else { + this.setState(ol.source.State.ERROR); + goog.asserts.fail() + } + }else { + this.setState(ol.source.State.ERROR) + } +}; +ol.source.VectorFile.prototype.readFeatures_ = function(source) { + var format = this.format; + var features = format.readFeatures(source); + var featureProjection = format.readProjection(source); + var projection = this.getProjection(); + if(!goog.isNull(projection)) { + if(!ol.proj.equivalent(featureProjection, projection)) { + var transform = ol.proj.getTransform(featureProjection, projection); + var i, ii; + for(i = 0, ii = features.length;i < ii;++i) { + var feature = features[i]; + var geometry = feature.getGeometry(); + if(!goog.isNull(geometry)) { + geometry.transform(transform) + } + } + } + } + this.addFeaturesInternal(features); + this.setState(ol.source.State.READY) +}; +goog.provide("ol.source.GPX"); +goog.require("ol.format.GPX"); +goog.require("ol.source.VectorFile"); +ol.source.GPX = function(opt_options) { + var options = goog.isDef(opt_options) ? opt_options : {}; + goog.base(this, {attributions:options.attributions, doc:options.doc, extent:options.extent, format:new ol.format.GPX, logo:options.logo, node:options.node, projection:options.projection, text:options.text, url:options.url, urls:options.urls}) +}; +goog.inherits(ol.source.GPX, ol.source.VectorFile); +goog.provide("ol.source.GeoJSON"); +goog.require("ol.format.GeoJSON"); +goog.require("ol.source.VectorFile"); +ol.source.GeoJSON = function(opt_options) { + var options = goog.isDef(opt_options) ? opt_options : {}; + goog.base(this, {attributions:options.attributions, extent:options.extent, format:new ol.format.GeoJSON({defaultProjection:options.defaultProjection}), logo:options.logo, object:options.object, projection:options.projection, text:options.text, url:options.url, urls:options.urls}) +}; +goog.inherits(ol.source.GeoJSON, ol.source.VectorFile); +goog.provide("ol.source.IGC"); +goog.require("ol.format.IGC"); +goog.require("ol.source.VectorFile"); +ol.source.IGC = function(opt_options) { + var options = goog.isDef(opt_options) ? opt_options : {}; + goog.base(this, {format:new ol.format.IGC({altitudeMode:options.altitudeMode}), projection:options.projection, text:options.text, url:options.url, urls:options.urls}) +}; +goog.inherits(ol.source.IGC, ol.source.VectorFile); +goog.provide("ol.source.ImageCanvas"); +goog.require("ol.CanvasFunctionType"); +goog.require("ol.ImageCanvas"); +goog.require("ol.extent"); +goog.require("ol.source.Image"); +ol.source.ImageCanvas = function(options) { + goog.base(this, {attributions:options.attributions, extent:options.extent, logo:options.logo, projection:options.projection, resolutions:options.resolutions, state:options.state}); + this.canvasFunction_ = options.canvasFunction; + this.canvas_ = null; + this.renderedRevision_ = 0; + this.ratio_ = goog.isDef(options.ratio) ? options.ratio : 1.5 +}; +goog.inherits(ol.source.ImageCanvas, ol.source.Image); +ol.source.ImageCanvas.prototype.getImage = function(extent, resolution, pixelRatio, projection) { + resolution = this.findNearestResolution(resolution); + var canvas = this.canvas_; + if(!goog.isNull(canvas) && this.renderedRevision_ == this.getRevision() && canvas.getResolution() == resolution && canvas.getPixelRatio() == pixelRatio && ol.extent.containsExtent(canvas.getExtent(), extent)) { + return canvas + } + extent = extent.slice(); + ol.extent.scaleFromCenter(extent, this.ratio_); + var width = (extent[2] - extent[0]) / resolution; + var height = (extent[3] - extent[1]) / resolution; + var size = [width * pixelRatio, height * pixelRatio]; + var canvasElement = this.canvasFunction_(extent, resolution, pixelRatio, size, projection); + if(!goog.isNull(canvasElement)) { + canvas = new ol.ImageCanvas(extent, resolution, pixelRatio, this.getAttributions(), canvasElement) + } + this.canvas_ = canvas; + this.renderedRevision_ = this.getRevision(); + return canvas +}; +goog.provide("ol.source.ImageStatic"); +goog.require("ol.Image"); +goog.require("ol.extent"); +goog.require("ol.proj"); +goog.require("ol.source.Image"); +ol.source.ImageStatic = function(options) { + var attributions = goog.isDef(options.attributions) ? options.attributions : null; + var crossOrigin = goog.isDef(options.crossOrigin) ? options.crossOrigin : null; + var imageExtent = options.imageExtent; + var imageSize = options.imageSize; + var imageResolution = (imageExtent[3] - imageExtent[1]) / imageSize[1]; + var imageUrl = options.url; + var projection = ol.proj.get(options.projection); + goog.base(this, {attributions:attributions, extent:options.extent, logo:options.logo, projection:projection, resolutions:[imageResolution]}); + this.image_ = new ol.Image(imageExtent, imageResolution, 1, attributions, imageUrl, crossOrigin) +}; +goog.inherits(ol.source.ImageStatic, ol.source.Image); +ol.source.ImageStatic.prototype.getImage = function(extent, resolution, pixelRatio, projection) { + if(ol.extent.intersects(extent, this.image_.getExtent())) { + return this.image_ + } + return null +}; +goog.provide("ol.source.ImageVector"); +goog.require("goog.asserts"); +goog.require("goog.dom"); +goog.require("goog.dom.TagName"); +goog.require("goog.events"); +goog.require("goog.events.EventType"); +goog.require("goog.vec.Mat4"); +goog.require("ol.extent"); +goog.require("ol.feature"); +goog.require("ol.render.canvas.ReplayGroup"); +goog.require("ol.renderer.vector"); +goog.require("ol.source.ImageCanvas"); +goog.require("ol.source.Vector"); +goog.require("ol.vec.Mat4"); +ol.source.ImageVector = function(options) { + this.source_ = options.source; + this.styleFunction_ = goog.isDef(options.style) ? ol.feature.createStyleFunction(options.style) : ol.feature.defaultStyleFunction; + this.transform_ = goog.vec.Mat4.createNumber(); + this.canvasElement_ = (goog.dom.createElement(goog.dom.TagName.CANVAS)); + this.canvasContext_ = (this.canvasElement_.getContext("2d")); + this.canvasSize_ = [0, 0]; + this.replayGroup_ = null; + goog.base(this, {attributions:options.attributions, canvasFunction:goog.bind(this.canvasFunctionInternal_, this), extent:options.extent, logo:options.logo, projection:options.projection, ratio:options.ratio, resolutions:options.resolutions, state:this.source_.getState()}); + goog.events.listen(this.source_, goog.events.EventType.CHANGE, this.handleSourceChange_, undefined, this) +}; +goog.inherits(ol.source.ImageVector, ol.source.ImageCanvas); +ol.source.ImageVector.prototype.canvasFunctionInternal_ = function(extent, resolution, pixelRatio, size, projection) { + var tolerance = resolution / (2 * pixelRatio); + var replayGroup = new ol.render.canvas.ReplayGroup(tolerance, extent); + var loading = false; + this.source_.forEachFeatureInExtent(extent, function(feature) { + loading = loading || this.renderFeature_(feature, resolution, pixelRatio, replayGroup) + }, this); + replayGroup.finish(); + if(loading) { + return null + } + if(this.canvasSize_[0] != size[0] || this.canvasSize_[1] != size[1]) { + this.canvasElement_.width = size[0]; + this.canvasElement_.height = size[1]; + this.canvasSize_[0] = size[0]; + this.canvasSize_[1] = size[1] + }else { + this.canvasContext_.clearRect(0, 0, size[0], size[1]) + } + var transform = this.getTransform_(ol.extent.getCenter(extent), resolution, pixelRatio, size); + replayGroup.replay(this.canvasContext_, extent, pixelRatio, transform, 0, goog.functions.TRUE); + this.replayGroup_ = replayGroup; + return this.canvasElement_ +}; +ol.source.ImageVector.prototype.forEachFeatureAtPixel = function(extent, resolution, rotation, coordinate, callback) { + if(goog.isNull(this.replayGroup_)) { + return undefined + }else { + return this.replayGroup_.forEachGeometryAtPixel(extent, resolution, 0, coordinate, goog.functions.TRUE, function(geometry, data) { + var feature = (data); + return callback(feature) + }) + } +}; +ol.source.ImageVector.prototype.getTransform_ = function(center, resolution, pixelRatio, size) { + return ol.vec.Mat4.makeTransform2D(this.transform_, size[0] / 2, size[1] / 2, pixelRatio / resolution, -pixelRatio / resolution, 0, -center[0], -center[1]) +}; +ol.source.ImageVector.prototype.handleImageChange_ = function(event) { + this.dispatchChangeEvent() +}; +ol.source.ImageVector.prototype.handleSourceChange_ = function() { + this.setState(this.source_.getState()) +}; +ol.source.ImageVector.prototype.renderFeature_ = function(feature, resolution, pixelRatio, replayGroup) { + var styles = this.styleFunction_(feature, resolution); + if(!goog.isDefAndNotNull(styles)) { + return false + } + var squaredTolerance = resolution * resolution / (4 * pixelRatio * pixelRatio); + var i, ii, loading = false; + for(i = 0, ii = styles.length;i < ii;++i) { + loading = ol.renderer.vector.renderFeature(replayGroup, feature, styles[i], squaredTolerance, feature, this.handleImageChange_, this) || loading + } + return loading +}; +goog.provide("ol.source.wms"); +goog.provide("ol.source.wms.ServerType"); +ol.source.wms.DEFAULT_VERSION = "1.3.0"; +ol.source.wms.ServerType = {CARMENTA_SERVER:"carmentaserver", GEOSERVER:"geoserver", MAPSERVER:"mapserver", QGIS:"qgis"}; +goog.provide("ol.source.ImageWMS"); +goog.require("goog.asserts"); +goog.require("goog.object"); +goog.require("goog.string"); +goog.require("goog.uri.utils"); +goog.require("ol.Image"); +goog.require("ol.extent"); +goog.require("ol.proj"); +goog.require("ol.source.Image"); +goog.require("ol.source.wms"); +goog.require("ol.source.wms.ServerType"); +ol.source.ImageWMS = function(opt_options) { + var options = goog.isDef(opt_options) ? opt_options : {}; + goog.base(this, {attributions:options.attributions, extent:options.extent, logo:options.logo, projection:options.projection, resolutions:options.resolutions}); + this.crossOrigin_ = goog.isDef(options.crossOrigin) ? options.crossOrigin : null; + this.url_ = options.url; + this.params_ = options.params; + this.v13_ = true; + this.updateV13_(); + this.serverType_ = (options.serverType); + this.hidpi_ = goog.isDef(options.hidpi) ? options.hidpi : true; + this.image_ = null; + this.imageSize_ = [0, 0]; + this.renderedProjection_ = null; + this.renderedResolution_ = NaN; + this.renderedRevision_ = 0; + this.ratio_ = goog.isDef(options.ratio) ? options.ratio : 1.5 +}; +goog.inherits(ol.source.ImageWMS, ol.source.Image); +ol.source.ImageWMS.prototype.getGetFeatureInfoUrl = function(coordinate, resolution, projection, params) { + goog.asserts.assert(!("VERSION" in params)); + if(!goog.isDef(this.url_) || goog.isNull(this.image_)) { + return undefined + } + goog.asserts.assert(this.imageSize_[0] !== 0 && this.imageSize_[1] !== 0); + goog.asserts.assert(!isNaN(this.renderedResolution_)); + goog.asserts.assert(!goog.isNull(this.renderedProjection_)); + if(resolution != this.renderedResolution_ || !ol.proj.equivalent(projection, this.renderedProjection_)) { + return undefined + } + var extent = this.image_.getExtent(); + var pixelRatio = this.image_.getPixelRatio(); + var baseParams = {"SERVICE":"WMS", "VERSION":ol.source.wms.DEFAULT_VERSION, "REQUEST":"GetFeatureInfo", "FORMAT":"image/png", "TRANSPARENT":true, "QUERY_LAYERS":goog.object.get(this.params_, "LAYERS")}; + goog.object.extend(baseParams, this.params_, params); + var imageResolution = resolution / pixelRatio; + var x = Math.floor((coordinate[0] - extent[0]) / imageResolution); + var y = Math.floor((extent[3] - coordinate[1]) / imageResolution); + goog.object.set(baseParams, this.v13_ ? "I" : "X", x); + goog.object.set(baseParams, this.v13_ ? "J" : "Y", y); + return this.getRequestUrl_(extent, this.imageSize_, pixelRatio, projection, baseParams) +}; +ol.source.ImageWMS.prototype.getParams = function() { + return this.params_ +}; +ol.source.ImageWMS.prototype.getImage = function(extent, resolution, pixelRatio, projection) { + if(!goog.isDef(this.url_)) { + return null + } + resolution = this.findNearestResolution(resolution); + if(pixelRatio != 1 && (!this.hidpi_ || !goog.isDef(this.serverType_))) { + pixelRatio = 1 + } + var image = this.image_; + if(!goog.isNull(image) && this.renderedRevision_ == this.getRevision() && image.getResolution() == resolution && image.getPixelRatio() == pixelRatio && ol.extent.containsExtent(image.getExtent(), extent)) { + return image + } + var params = {"SERVICE":"WMS", "VERSION":ol.source.wms.DEFAULT_VERSION, "REQUEST":"GetMap", "FORMAT":"image/png", "TRANSPARENT":true}; + goog.object.extend(params, this.params_); + extent = extent.slice(); + var centerX = (extent[0] + extent[2]) / 2; + var centerY = (extent[1] + extent[3]) / 2; + if(this.ratio_ != 1) { + var halfWidth = this.ratio_ * (extent[2] - extent[0]) / 2; + var halfHeight = this.ratio_ * (extent[3] - extent[1]) / 2; + extent[0] = centerX - halfWidth; + extent[1] = centerY - halfHeight; + extent[2] = centerX + halfWidth; + extent[3] = centerY + halfHeight + } + var imageResolution = resolution / pixelRatio; + var width = Math.ceil((extent[2] - extent[0]) / imageResolution); + var height = Math.ceil((extent[3] - extent[1]) / imageResolution); + extent[0] = centerX - imageResolution * width / 2; + extent[2] = centerX + imageResolution * width / 2; + extent[1] = centerY - imageResolution * height / 2; + extent[3] = centerY + imageResolution * height / 2; + this.imageSize_[0] = width; + this.imageSize_[1] = height; + var url = this.getRequestUrl_(extent, this.imageSize_, pixelRatio, projection, params); + this.image_ = new ol.Image(extent, resolution, pixelRatio, this.getAttributions(), url, this.crossOrigin_); + this.renderedProjection_ = projection; + this.renderedResolution_ = resolution; + this.renderedRevision_ = this.getRevision(); + return this.image_ +}; +ol.source.ImageWMS.prototype.getRequestUrl_ = function(extent, size, pixelRatio, projection, params) { + goog.asserts.assert(goog.isDef(this.url_)); + params[this.v13_ ? "CRS" : "SRS"] = projection.getCode(); + if(!("STYLES" in this.params_)) { + goog.object.set(params, "STYLES", new String("")) + } + if(pixelRatio != 1) { + switch(this.serverType_) { + case ol.source.wms.ServerType.GEOSERVER: + var dpi = 90 * pixelRatio + 0.5 | 0; + goog.object.set(params, "FORMAT_OPTIONS", "dpi:" + dpi); + break; + case ol.source.wms.ServerType.MAPSERVER: + goog.object.set(params, "MAP_RESOLUTION", 90 * pixelRatio); + break; + case ol.source.wms.ServerType.CARMENTA_SERVER: + ; + case ol.source.wms.ServerType.QGIS: + goog.object.set(params, "DPI", 90 * pixelRatio); + break; + default: + goog.asserts.fail(); + break + } + } + goog.object.set(params, "WIDTH", size[0]); + goog.object.set(params, "HEIGHT", size[1]); + var axisOrientation = projection.getAxisOrientation(); + var bbox; + if(this.v13_ && axisOrientation.substr(0, 2) == "ne") { + bbox = [extent[1], extent[0], extent[3], extent[2]] + }else { + bbox = extent + } + goog.object.set(params, "BBOX", bbox.join(",")); + return goog.uri.utils.appendParamsFromMap(this.url_, params) +}; +ol.source.ImageWMS.prototype.setUrl = function(url) { + if(url != this.url_) { + this.url_ = url; + this.image_ = null; + this.dispatchChangeEvent() + } +}; +ol.source.ImageWMS.prototype.updateParams = function(params) { + goog.object.extend(this.params_, params); + this.updateV13_(); + this.image_ = null; + this.dispatchChangeEvent() +}; +ol.source.ImageWMS.prototype.updateV13_ = function() { + var version = goog.object.get(this.params_, "VERSION", ol.source.wms.DEFAULT_VERSION); + this.v13_ = goog.string.compareVersions(version, "1.3") >= 0 +}; +goog.provide("ol.source.KML"); +goog.require("ol.format.KML"); +goog.require("ol.source.VectorFile"); +ol.source.KML = function(opt_options) { + var options = goog.isDef(opt_options) ? opt_options : {}; + goog.base(this, {attributions:options.attributions, doc:options.doc, extent:options.extent, format:new ol.format.KML({defaultStyle:options.defaultStyle}), logo:options.logo, node:options.node, projection:options.projection, text:options.text, url:options.url, urls:options.urls}) +}; +goog.inherits(ol.source.KML, ol.source.VectorFile); +goog.provide("ol.source.MapGuide"); +goog.require("goog.object"); +goog.require("goog.uri.utils"); +goog.require("ol.Image"); +goog.require("ol.ImageUrlFunction"); +goog.require("ol.extent"); +goog.require("ol.source.Image"); +ol.source.MapGuide = function(options) { + goog.base(this, {extent:options.extent, projection:options.projection, resolutions:options.resolutions}); + this.crossOrigin_ = goog.isDef(options.crossOrigin) ? options.crossOrigin : null; + this.displayDpi_ = goog.isDef(options.displayDpi) ? options.displayDpi : 96; + var imageUrlFunction; + if(goog.isDef(options.url)) { + var params = goog.isDef(options.params) ? options.params : {}; + imageUrlFunction = ol.ImageUrlFunction.createFromParamsFunction(options.url, params, goog.bind(this.getUrl, this)) + }else { + imageUrlFunction = ol.ImageUrlFunction.nullImageUrlFunction + } + this.imageUrlFunction_ = imageUrlFunction; + this.hidpi_ = goog.isDef(options.hidpi) ? options.hidpi : true; + this.metersPerUnit_ = goog.isDef(options.metersPerUnit) ? options.metersPerUnit : 1; + this.ratio_ = goog.isDef(options.ratio) ? options.ratio : 1; + this.useOverlay_ = goog.isDef(options.useOverlay) ? options.useOverlay : false; + this.image_ = null +}; +goog.inherits(ol.source.MapGuide, ol.source.Image); +ol.source.MapGuide.prototype.getImage = function(extent, resolution, pixelRatio, projection) { + resolution = this.findNearestResolution(resolution); + pixelRatio = this.hidpi_ ? pixelRatio : 1; + var image = this.image_; + if(!goog.isNull(image) && image.getResolution() == resolution && image.getPixelRatio() == pixelRatio && ol.extent.containsExtent(image.getExtent(), extent)) { + return image + } + if(this.ratio_ != 1) { + extent = extent.slice(); + ol.extent.scaleFromCenter(extent, this.ratio_) + } + var width = (extent[2] - extent[0]) / resolution; + var height = (extent[3] - extent[1]) / resolution; + var size = [width * pixelRatio, height * pixelRatio]; + var imageUrl = this.imageUrlFunction_(extent, size, projection); + if(goog.isDef(imageUrl)) { + image = new ol.Image(extent, resolution, pixelRatio, this.getAttributions(), imageUrl, this.crossOrigin_) + }else { + image = null + } + this.image_ = image; + return image +}; +ol.source.MapGuide.getScale = function(extent, size, metersPerUnit, dpi) { + var mcsW = ol.extent.getWidth(extent); + var mcsH = ol.extent.getHeight(extent); + var devW = size[0]; + var devH = size[1]; + var mpp = 0.0254 / dpi; + if(devH * mcsW > devW * mcsH) { + return mcsW * metersPerUnit / (devW * mpp) + }else { + return mcsH * metersPerUnit / (devH * mpp) + } +}; +ol.source.MapGuide.prototype.getUrl = function(baseUrl, params, extent, size, projection) { + var scale = ol.source.MapGuide.getScale(extent, size, this.metersPerUnit_, this.displayDpi_); + var center = ol.extent.getCenter(extent); + var baseParams = {"OPERATION":this.useOverlay_ ? "GETDYNAMICMAPOVERLAYIMAGE" : "GETMAPIMAGE", "VERSION":"2.0.0", "LOCALE":"en", "CLIENTAGENT":"ol.source.MapGuide source", "CLIP":"1", "SETDISPLAYDPI":this.displayDpi_, "SETDISPLAYWIDTH":Math.round(size[0]), "SETDISPLAYHEIGHT":Math.round(size[1]), "SETVIEWSCALE":scale, "SETVIEWCENTERX":center[0], "SETVIEWCENTERY":center[1]}; + goog.object.extend(baseParams, params); + return goog.uri.utils.appendParamsFromMap(baseUrl, baseParams) +}; +goog.provide("ol.source.XYZ"); +goog.require("ol.Attribution"); +goog.require("ol.TileUrlFunction"); +goog.require("ol.TileUrlFunctionType"); +goog.require("ol.proj"); +goog.require("ol.source.TileImage"); +goog.require("ol.tilegrid.XYZ"); +ol.source.XYZ = function(options) { + var projection = options.projection || ol.proj.get("EPSG:3857"); + var maxZoom = goog.isDef(options.maxZoom) ? options.maxZoom : 18; + var tileGrid = new ol.tilegrid.XYZ({maxZoom:maxZoom}); + goog.base(this, {attributions:options.attributions, crossOrigin:options.crossOrigin, extent:options.extent, logo:options.logo, projection:projection, tileGrid:tileGrid, tileLoadFunction:options.tileLoadFunction, tileUrlFunction:ol.TileUrlFunction.nullTileUrlFunction}); + this.tileCoordTransform_ = tileGrid.createTileCoordTransform({extent:options.extent}); + if(goog.isDef(options.tileUrlFunction)) { + this.setTileUrlFunction(options.tileUrlFunction) + }else { + if(goog.isDef(options.urls)) { + this.setUrls(options.urls) + }else { + if(goog.isDef(options.url)) { + this.setUrl(options.url) + } + } + } +}; +goog.inherits(ol.source.XYZ, ol.source.TileImage); +ol.source.XYZ.prototype.setTileUrlFunction = function(tileUrlFunction) { + goog.base(this, "setTileUrlFunction", ol.TileUrlFunction.withTileCoordTransform(this.tileCoordTransform_, tileUrlFunction)) +}; +ol.source.XYZ.prototype.setUrl = function(url) { + this.setTileUrlFunction(ol.TileUrlFunction.createFromTemplates(ol.TileUrlFunction.expandUrl(url))) +}; +ol.source.XYZ.prototype.setUrls = function(urls) { + this.setTileUrlFunction(ol.TileUrlFunction.createFromTemplates(urls)) +}; +goog.provide("ol.source.OSM"); +goog.require("ol.Attribution"); +goog.require("ol.source.XYZ"); +ol.source.OSM = function(opt_options) { + var options = goog.isDef(opt_options) ? opt_options : {}; + var attributions; + if(goog.isDef(options.attributions)) { + attributions = options.attributions + }else { + attributions = ol.source.OSM.ATTRIBUTIONS + } + var crossOrigin = goog.isDef(options.crossOrigin) ? options.crossOrigin : "anonymous"; + var url = goog.isDef(options.url) ? options.url : "//{a-c}.tile.openstreetmap.org/{z}/{x}/{y}.png"; + goog.base(this, {attributions:attributions, crossOrigin:crossOrigin, opaque:true, maxZoom:options.maxZoom, tileLoadFunction:options.tileLoadFunction, url:url}) +}; +goog.inherits(ol.source.OSM, ol.source.XYZ); +ol.source.OSM.DATA_ATTRIBUTION = new ol.Attribution({html:"Data \x26copy; " + '\x3ca href\x3d"http://www.openstreetmap.org/"\x3eOpenStreetMap\x3c/a\x3e ' + "contributors, " + '\x3ca href\x3d"http://www.openstreetmap.org/copyright"\x3eODbL\x3c/a\x3e'}); +ol.source.OSM.TILE_ATTRIBUTION = new ol.Attribution({html:"Tiles \x26copy; " + '\x3ca href\x3d"http://www.openstreetmap.org/"\x3eOpenStreetMap\x3c/a\x3e ' + "contributors, " + '\x3ca href\x3d"http://creativecommons.org/licenses/by-sa/2.0/"\x3eCC BY-SA\x3c/a\x3e'}); +ol.source.OSM.ATTRIBUTIONS = [ol.source.OSM.TILE_ATTRIBUTION, ol.source.OSM.DATA_ATTRIBUTION]; +goog.provide("ol.source.MapQuest"); +goog.require("goog.asserts"); +goog.require("ol.Attribution"); +goog.require("ol.source.OSM"); +goog.require("ol.source.XYZ"); +ol.source.MapQuest = function(opt_options) { + var options = goog.isDef(opt_options) ? opt_options : {}; + goog.asserts.assert(options.layer in ol.source.MapQuestConfig); + var layerConfig = ol.source.MapQuestConfig[options.layer]; + var url = "//otile{1-4}.mqcdn.com/tiles/1.0.0/" + options.layer + "/{z}/{x}/{y}.jpg"; + goog.base(this, {attributions:layerConfig.attributions, crossOrigin:"anonymous", logo:"//developer.mapquest.com/content/osm/mq_logo.png", maxZoom:layerConfig.maxZoom, opaque:true, tileLoadFunction:options.tileLoadFunction, url:url}) +}; +goog.inherits(ol.source.MapQuest, ol.source.XYZ); +ol.source.MapQuest.TILE_ATTRIBUTION = new ol.Attribution({html:"Tiles Courtesy of " + '\x3ca href\x3d"http://www.mapquest.com/" target\x3d"_blank"\x3eMapQuest\x3c/a\x3e'}); +ol.source.MapQuestConfig = {"osm":{maxZoom:28, attributions:[ol.source.MapQuest.TILE_ATTRIBUTION, ol.source.OSM.DATA_ATTRIBUTION]}, "sat":{maxZoom:18, attributions:[ol.source.MapQuest.TILE_ATTRIBUTION, new ol.Attribution({html:"Portions Courtesy NASA/JPL-Caltech and " + "U.S. Depart. of Agriculture, Farm Service Agency"})]}, "hyb":{maxZoom:18, attributions:[ol.source.MapQuest.TILE_ATTRIBUTION, ol.source.OSM.DATA_ATTRIBUTION]}}; +goog.provide("ol.source.OSMXML"); +goog.require("ol.format.OSMXML"); +goog.require("ol.source.VectorFile"); +ol.source.OSMXML = function(opt_options) { + var options = goog.isDef(opt_options) ? opt_options : {}; + goog.base(this, {attributions:options.attributions, doc:options.doc, extent:options.extent, format:new ol.format.OSMXML, logo:options.logo, node:options.node, projection:options.projection, reprojectTo:options.reprojectTo, text:options.text, url:options.url}) +}; +goog.inherits(ol.source.OSMXML, ol.source.VectorFile); +goog.provide("ol.source.Stamen"); +goog.require("goog.asserts"); +goog.require("ol.Attribution"); +goog.require("ol.source.OSM"); +goog.require("ol.source.XYZ"); +ol.source.StamenLayerConfig = {"terrain":{extension:"jpg", opaque:true}, "terrain-background":{extension:"jpg", opaque:true}, "terrain-labels":{extension:"png", opaque:false}, "terrain-lines":{extension:"png", opaque:false}, "toner-background":{extension:"png", opaque:true}, "toner":{extension:"png", opaque:true}, "toner-hybrid":{extension:"png", opaque:false}, "toner-labels":{extension:"png", opaque:false}, "toner-lines":{extension:"png", opaque:false}, "toner-lite":{extension:"png", opaque:true}, +"watercolor":{extension:"jpg", opaque:true}}; +ol.source.StamenProviderConfig = {"terrain":{minZoom:4, maxZoom:18}, "toner":{minZoom:0, maxZoom:20}, "watercolor":{minZoom:3, maxZoom:16}}; +ol.source.Stamen = function(options) { + var i = options.layer.indexOf("-"); + var provider = i == -1 ? options.layer : options.layer.slice(0, i); + goog.asserts.assert(provider in ol.source.StamenProviderConfig); + var providerConfig = ol.source.StamenProviderConfig[provider]; + goog.asserts.assert(options.layer in ol.source.StamenLayerConfig); + var layerConfig = ol.source.StamenLayerConfig[options.layer]; + var url = goog.isDef(options.url) ? options.url : "//{a-d}.tile.stamen.com/" + options.layer + "/{z}/{x}/{y}." + layerConfig.extension; + goog.base(this, {attributions:ol.source.Stamen.ATTRIBUTIONS, crossOrigin:"anonymous", maxZoom:providerConfig.maxZoom, opaque:layerConfig.opaque, tileLoadFunction:options.tileLoadFunction, url:url}) +}; +goog.inherits(ol.source.Stamen, ol.source.XYZ); +ol.source.Stamen.ATTRIBUTIONS = [new ol.Attribution({html:'Map tiles by \x3ca href\x3d"http://stamen.com/"\x3eStamen Design\x3c/a\x3e, ' + 'under \x3ca href\x3d"http://creativecommons.org/licenses/by/3.0/"\x3eCC BY' + " 3.0\x3c/a\x3e."}), ol.source.OSM.DATA_ATTRIBUTION]; +goog.provide("ol.source.TileDebug"); +goog.require("goog.dom"); +goog.require("goog.dom.TagName"); +goog.require("ol.Tile"); +goog.require("ol.TileCache"); +goog.require("ol.TileCoord"); +goog.require("ol.TileState"); +goog.require("ol.source.Tile"); +goog.require("ol.tilegrid.TileGrid"); +ol.DebugTile_ = function(tileCoord, tileGrid) { + goog.base(this, tileCoord, ol.TileState.LOADED); + this.tileCoord_ = tileCoord; + this.tileSize_ = tileGrid.getTileSize(tileCoord.z); + this.canvasByContext_ = {} +}; +goog.inherits(ol.DebugTile_, ol.Tile); +ol.DebugTile_.prototype.getImage = function(opt_context) { + var key = goog.isDef(opt_context) ? goog.getUid(opt_context) : -1; + if(key in this.canvasByContext_) { + return this.canvasByContext_[key] + }else { + var tileSize = this.tileSize_; + var canvas = (goog.dom.createElement(goog.dom.TagName.CANVAS)); + canvas.width = tileSize; + canvas.height = tileSize; + var context = (canvas.getContext("2d")); + context.strokeStyle = "black"; + context.strokeRect(0.5, 0.5, tileSize + 0.5, tileSize + 0.5); + context.fillStyle = "black"; + context.textAlign = "center"; + context.textBaseline = "middle"; + context.font = "24px sans-serif"; + context.fillText(this.tileCoord_.toString(), tileSize / 2, tileSize / 2); + this.canvasByContext_[key] = canvas; + return canvas + } +}; +ol.source.TileDebug = function(options) { + goog.base(this, {extent:options.extent, opaque:false, projection:options.projection, tileGrid:options.tileGrid}); + this.tileCache_ = new ol.TileCache +}; +goog.inherits(ol.source.TileDebug, ol.source.Tile); +ol.source.TileDebug.prototype.canExpireCache = function() { + return this.tileCache_.canExpireCache() +}; +ol.source.TileDebug.prototype.expireCache = function(usedTiles) { + this.tileCache_.expireCache(usedTiles) +}; +ol.source.TileDebug.prototype.getTile = function(z, x, y) { + var tileCoordKey = this.getKeyZXY(z, x, y); + if(this.tileCache_.containsKey(tileCoordKey)) { + return(this.tileCache_.get(tileCoordKey)) + }else { + var tile = new ol.DebugTile_(new ol.TileCoord(z, x, y), this.tileGrid); + this.tileCache_.set(tileCoordKey, tile); + return tile + } +}; +goog.provide("ol.source.TileJSON"); +goog.provide("ol.tilejson"); +goog.require("goog.asserts"); +goog.require("goog.net.jsloader"); +goog.require("ol.Attribution"); +goog.require("ol.TileRange"); +goog.require("ol.TileUrlFunction"); +goog.require("ol.extent"); +goog.require("ol.proj"); +goog.require("ol.source.State"); +goog.require("ol.source.TileImage"); +goog.require("ol.tilegrid.XYZ"); +ol.tilejson.grids_ = []; +var grid = function(tileJSON) { + ol.tilejson.grids_.push(tileJSON) +}; +goog.exportSymbol("grid", grid); +ol.source.TileJSON = function(options) { + goog.base(this, {crossOrigin:options.crossOrigin, projection:ol.proj.get("EPSG:3857"), state:ol.source.State.LOADING, tileLoadFunction:options.tileLoadFunction}); + this.deferred_ = goog.net.jsloader.load(options.url, {cleanupWhenDone:true}); + this.deferred_.addCallback(this.handleTileJSONResponse, this) +}; +goog.inherits(ol.source.TileJSON, ol.source.TileImage); +ol.source.TileJSON.prototype.handleTileJSONResponse = function() { + var tileJSON = ol.tilejson.grids_.pop(); + var epsg4326Projection = ol.proj.get("EPSG:4326"); + var extent; + if(goog.isDef(tileJSON.bounds)) { + var transform = ol.proj.getTransformFromProjections(epsg4326Projection, this.getProjection()); + extent = ol.extent.transform(tileJSON.bounds, transform); + this.setExtent(extent) + } + if(goog.isDef(tileJSON.scheme)) { + goog.asserts.assert(tileJSON.scheme == "xyz") + } + var minZoom = tileJSON.minzoom || 0; + var maxZoom = tileJSON.maxzoom || 22; + var tileGrid = new ol.tilegrid.XYZ({maxZoom:maxZoom, minZoom:minZoom}); + this.tileGrid = tileGrid; + this.tileUrlFunction = ol.TileUrlFunction.withTileCoordTransform(tileGrid.createTileCoordTransform({extent:extent}), ol.TileUrlFunction.createFromTemplates(tileJSON.tiles)); + if(goog.isDef(tileJSON.attribution)) { + var attributionExtent = goog.isDef(extent) ? extent : epsg4326Projection.getExtent(); + var tileRanges = {}; + var z, zKey; + for(z = minZoom;z <= maxZoom;++z) { + zKey = z.toString(); + tileRanges[zKey] = [tileGrid.getTileRangeForExtentAndZ(attributionExtent, z)] + } + this.setAttributions([new ol.Attribution({html:tileJSON.attribution, tileRanges:tileRanges})]) + } + this.setState(ol.source.State.READY) +}; +goog.provide("ol.source.TileWMS"); +goog.require("goog.array"); +goog.require("goog.asserts"); +goog.require("goog.math"); +goog.require("goog.object"); +goog.require("goog.string"); +goog.require("goog.uri.utils"); +goog.require("ol.TileCoord"); +goog.require("ol.TileUrlFunction"); +goog.require("ol.extent"); +goog.require("ol.source.TileImage"); +goog.require("ol.source.wms"); +goog.require("ol.source.wms.ServerType"); +ol.source.TileWMS = function(opt_options) { + var options = goog.isDef(opt_options) ? opt_options : {}; + var params = goog.isDef(options.params) ? options.params : {}; + var transparent = goog.object.get(params, "TRANSPARENT", true); + goog.base(this, {attributions:options.attributions, crossOrigin:options.crossOrigin, extent:options.extent, logo:options.logo, opaque:!transparent, projection:options.projection, tileGrid:options.tileGrid, tileLoadFunction:options.tileLoadFunction, tileUrlFunction:goog.bind(this.tileUrlFunction_, this)}); + var urls = options.urls; + if(!goog.isDef(urls) && goog.isDef(options.url)) { + urls = ol.TileUrlFunction.expandUrl(options.url) + } + this.urls_ = urls; + this.gutter_ = goog.isDef(options.gutter) ? options.gutter : 0; + this.params_ = params; + this.pixelRatio_ = NaN; + this.v13_ = true; + this.serverType_ = (options.serverType); + this.hidpi_ = goog.isDef(options.hidpi) ? options.hidpi : true; + this.coordKeyPrefix_ = ""; + this.resetCoordKeyPrefix_(); + this.tmpExtent_ = ol.extent.createEmpty(); + this.updateV13_() +}; +goog.inherits(ol.source.TileWMS, ol.source.TileImage); +ol.source.TileWMS.prototype.getGetFeatureInfoUrl = function(coordinate, resolution, projection, params) { + goog.asserts.assert(!("VERSION" in params)); + var pixelRatio = this.pixelRatio_; + if(isNaN(this.pixelRatio_)) { + return undefined + } + var tileGrid = this.getTileGrid(); + if(goog.isNull(tileGrid)) { + tileGrid = this.getTileGridForProjection(projection) + } + var tileCoord = tileGrid.getTileCoordForCoordAndResolution(coordinate, resolution); + if(tileGrid.getResolutions().length <= tileCoord.z) { + return undefined + } + var tileResolution = tileGrid.getResolution(tileCoord.z); + var tileExtent = tileGrid.getTileCoordExtent(tileCoord, this.tmpExtent_); + var tileSize = tileGrid.getTileSize(tileCoord.z); + var gutter = this.gutter_; + if(gutter !== 0) { + tileSize += 2 * gutter; + tileExtent = ol.extent.buffer(tileExtent, tileResolution * gutter, tileExtent) + } + if(pixelRatio != 1) { + tileSize = tileSize * pixelRatio + 0.5 | 0 + } + var baseParams = {"SERVICE":"WMS", "VERSION":ol.source.wms.DEFAULT_VERSION, "REQUEST":"GetFeatureInfo", "FORMAT":"image/png", "TRANSPARENT":true, "QUERY_LAYERS":goog.object.get(this.params_, "LAYERS")}; + goog.object.extend(baseParams, this.params_, params); + var x = Math.floor((coordinate[0] - tileExtent[0]) / (tileResolution / pixelRatio)); + var y = Math.floor((tileExtent[3] - coordinate[1]) / (tileResolution / pixelRatio)); + goog.object.set(baseParams, this.v13_ ? "I" : "X", x); + goog.object.set(baseParams, this.v13_ ? "J" : "Y", y); + return this.getRequestUrl_(tileCoord, tileSize, tileExtent, pixelRatio, projection, baseParams) +}; +ol.source.TileWMS.prototype.getGutter = function() { + return this.gutter_ +}; +ol.source.TileWMS.prototype.getKeyZXY = function(z, x, y) { + return this.coordKeyPrefix_ + goog.base(this, "getKeyZXY", z, x, y) +}; +ol.source.TileWMS.prototype.getParams = function() { + return this.params_ +}; +ol.source.TileWMS.prototype.getRequestUrl_ = function(tileCoord, tileSize, tileExtent, pixelRatio, projection, params) { + var urls = this.urls_; + if(!goog.isDef(urls) || goog.array.isEmpty(urls)) { + return undefined + } + goog.object.set(params, "WIDTH", tileSize); + goog.object.set(params, "HEIGHT", tileSize); + params[this.v13_ ? "CRS" : "SRS"] = projection.getCode(); + if(!("STYLES" in this.params_)) { + goog.object.set(params, "STYLES", new String("")) + } + if(pixelRatio != 1) { + switch(this.serverType_) { + case ol.source.wms.ServerType.GEOSERVER: + var dpi = 90 * pixelRatio + 0.5 | 0; + goog.object.set(params, "FORMAT_OPTIONS", "dpi:" + dpi); + break; + case ol.source.wms.ServerType.MAPSERVER: + goog.object.set(params, "MAP_RESOLUTION", 90 * pixelRatio); + break; + case ol.source.wms.ServerType.CARMENTA_SERVER: + ; + case ol.source.wms.ServerType.QGIS: + goog.object.set(params, "DPI", 90 * pixelRatio); + break; + default: + goog.asserts.fail(); + break + } + } + var axisOrientation = projection.getAxisOrientation(); + var bbox = tileExtent; + if(this.v13_ && axisOrientation.substr(0, 2) == "ne") { + var tmp; + tmp = tileExtent[0]; + bbox[0] = tileExtent[1]; + bbox[1] = tmp; + tmp = tileExtent[2]; + bbox[2] = tileExtent[3]; + bbox[3] = tmp + } + goog.object.set(params, "BBOX", bbox.join(",")); + var url; + if(urls.length == 1) { + url = urls[0] + }else { + var index = goog.math.modulo(tileCoord.hash(), this.urls_.length); + url = urls[index] + } + return goog.uri.utils.appendParamsFromMap(url, params) +}; +ol.source.TileWMS.prototype.getTilePixelSize = function(z, pixelRatio, projection) { + var tileSize = goog.base(this, "getTilePixelSize", z, pixelRatio, projection); + if(pixelRatio == 1 || !this.hidpi_ || !goog.isDef(this.serverType_)) { + return tileSize + }else { + return tileSize * pixelRatio + 0.5 | 0 + } +}; +ol.source.TileWMS.prototype.resetCoordKeyPrefix_ = function() { + var i = 0; + var res = []; + for(var key in this.params_) { + res[i++] = key + "-" + this.params_[key] + } + this.coordKeyPrefix_ = res.join("/") +}; +ol.source.TileWMS.prototype.tileUrlFunction_ = function(tileCoord, pixelRatio, projection) { + var tileGrid = this.getTileGrid(); + if(goog.isNull(tileGrid)) { + tileGrid = this.getTileGridForProjection(projection) + } + if(tileGrid.getResolutions().length <= tileCoord.z) { + return undefined + } + if(pixelRatio != 1 && (!this.hidpi_ || !goog.isDef(this.serverType_))) { + pixelRatio = 1 + } + var tileResolution = tileGrid.getResolution(tileCoord.z); + var tileExtent = tileGrid.getTileCoordExtent(tileCoord, this.tmpExtent_); + var tileSize = tileGrid.getTileSize(tileCoord.z); + var gutter = this.gutter_; + if(gutter !== 0) { + tileSize += 2 * gutter; + tileExtent = ol.extent.buffer(tileExtent, tileResolution * gutter, tileExtent) + } + var extent = this.getExtent(); + if(!goog.isNull(extent) && (!ol.extent.intersects(tileExtent, extent) || ol.extent.touches(tileExtent, extent))) { + return undefined + } + if(pixelRatio != 1) { + tileSize = tileSize * pixelRatio + 0.5 | 0 + } + var baseParams = {"SERVICE":"WMS", "VERSION":ol.source.wms.DEFAULT_VERSION, "REQUEST":"GetMap", "FORMAT":"image/png", "TRANSPARENT":true}; + goog.object.extend(baseParams, this.params_); + this.pixelRatio_ = pixelRatio; + return this.getRequestUrl_(tileCoord, tileSize, tileExtent, pixelRatio, projection, baseParams) +}; +ol.source.TileWMS.prototype.updateParams = function(params) { + goog.object.extend(this.params_, params); + this.resetCoordKeyPrefix_(); + this.updateV13_(); + this.dispatchChangeEvent() +}; +ol.source.TileWMS.prototype.updateV13_ = function() { + var version = goog.object.get(this.params_, "VERSION", ol.source.wms.DEFAULT_VERSION); + this.v13_ = goog.string.compareVersions(version, "1.3") >= 0 +}; +goog.provide("ol.source.TopoJSON"); +goog.require("ol.format.TopoJSON"); +goog.require("ol.source.VectorFile"); +ol.source.TopoJSON = function(opt_options) { + var options = goog.isDef(opt_options) ? opt_options : {}; + goog.base(this, {attributions:options.attributions, extent:options.extent, format:new ol.format.TopoJSON({defaultProjection:options.defaultProjection}), logo:options.logo, object:options.object, projection:options.projection, text:options.text, url:options.url}) +}; +goog.inherits(ol.source.TopoJSON, ol.source.VectorFile); +goog.provide("ol.tilegrid.WMTS"); +goog.require("goog.array"); +goog.require("goog.asserts"); +goog.require("ol.proj"); +goog.require("ol.tilegrid.TileGrid"); +ol.tilegrid.WMTS = function(options) { + goog.asserts.assert(options.resolutions.length == options.matrixIds.length); + this.matrixIds_ = options.matrixIds; + goog.base(this, {origin:options.origin, origins:options.origins, resolutions:options.resolutions, tileSize:options.tileSize, tileSizes:options.tileSizes}) +}; +goog.inherits(ol.tilegrid.WMTS, ol.tilegrid.TileGrid); +ol.tilegrid.WMTS.prototype.getMatrixId = function(z) { + goog.asserts.assert(0 <= z && z < this.matrixIds_.length); + return this.matrixIds_[z] +}; +ol.tilegrid.WMTS.prototype.getMatrixIds = function() { + return this.matrixIds_ +}; +ol.tilegrid.WMTS.createFromCapabilitiesMatrixSet = function(matrixSet) { + var resolutions = []; + var matrixIds = []; + var origins = []; + var tileSizes = []; + var supportedCRSPropName = "supportedCRS"; + var matrixIdsPropName = "matrixIds"; + var identifierPropName = "identifier"; + var scaleDenominatorPropName = "scaleDenominator"; + var topLeftCornerPropName = "topLeftCorner"; + var tileWidthPropName = "tileWidth"; + var tileHeightPropName = "tileHeight"; + var projection = ol.proj.get(matrixSet[supportedCRSPropName]); + var metersPerUnit = projection.getMetersPerUnit(); + goog.array.sort(matrixSet[matrixIdsPropName], function(a, b) { + return b[scaleDenominatorPropName] - a[scaleDenominatorPropName] + }); + goog.array.forEach(matrixSet[matrixIdsPropName], function(elt, index, array) { + matrixIds.push(elt[identifierPropName]); + origins.push(elt[topLeftCornerPropName]); + resolutions.push(elt[scaleDenominatorPropName] * 2.8E-4 / metersPerUnit); + var tileWidth = elt[tileWidthPropName]; + var tileHeight = elt[tileHeightPropName]; + goog.asserts.assert(tileWidth == tileHeight); + tileSizes.push(tileWidth) + }); + return new ol.tilegrid.WMTS({origins:origins, resolutions:resolutions, matrixIds:matrixIds, tileSizes:tileSizes}) +}; +goog.provide("ol.source.WMTS"); +goog.provide("ol.source.WMTSRequestEncoding"); +goog.require("goog.array"); +goog.require("goog.asserts"); +goog.require("goog.math"); +goog.require("goog.object"); +goog.require("goog.uri.utils"); +goog.require("ol.TileCoord"); +goog.require("ol.TileUrlFunction"); +goog.require("ol.TileUrlFunctionType"); +goog.require("ol.extent"); +goog.require("ol.proj"); +goog.require("ol.source.TileImage"); +goog.require("ol.tilegrid.WMTS"); +ol.source.WMTSRequestEncoding = {KVP:"KVP", REST:"REST"}; +ol.source.WMTS = function(options) { + var version = goog.isDef(options.version) ? options.version : "1.0.0"; + var format = goog.isDef(options.format) ? options.format : "image/jpeg"; + this.dimensions_ = options.dimensions || {}; + this.coordKeyPrefix_ = ""; + this.resetCoordKeyPrefix_(); + var requestEncoding = goog.isDef(options.requestEncoding) ? options.requestEncoding : ol.source.WMTSRequestEncoding.KVP; + var tileGrid = options.tileGrid; + var context = {"Layer":options.layer, "style":options.style, "Style":options.style, "TileMatrixSet":options.matrixSet}; + if(requestEncoding == ol.source.WMTSRequestEncoding.KVP) { + goog.object.extend(context, {"Service":"WMTS", "Request":"GetTile", "Version":version, "Format":format}) + } + function createFromWMTSTemplate(template) { + template = requestEncoding == ol.source.WMTSRequestEncoding.KVP ? goog.uri.utils.appendParamsFromMap(template, context) : template.replace(/\{(\w+?)\}/g, function(m, p) { + return p in context ? context[p] : m + }); + return function(tileCoord, pixelRatio, projection) { + if(goog.isNull(tileCoord)) { + return undefined + }else { + var localContext = {"TileMatrix":tileGrid.getMatrixId(tileCoord.z), "TileCol":tileCoord.x, "TileRow":tileCoord.y}; + goog.object.extend(localContext, this.dimensions_); + var url = template; + if(requestEncoding == ol.source.WMTSRequestEncoding.KVP) { + url = goog.uri.utils.appendParamsFromMap(url, localContext) + }else { + url = url.replace(/\{(\w+?)\}/g, function(m, p) { + return localContext[p] + }) + } + return url + } + } + } + var tileUrlFunction = ol.TileUrlFunction.nullTileUrlFunction; + var urls = options.urls; + if(!goog.isDef(urls) && goog.isDef(options.url)) { + urls = ol.TileUrlFunction.expandUrl(options.url) + } + if(goog.isDef(urls)) { + tileUrlFunction = ol.TileUrlFunction.createFromTileUrlFunctions(goog.array.map(urls, createFromWMTSTemplate)) + } + var tmpExtent = ol.extent.createEmpty(); + var tmpTileCoord = new ol.TileCoord(0, 0, 0); + tileUrlFunction = ol.TileUrlFunction.withTileCoordTransform(function(tileCoord, projection, opt_tileCoord) { + var tileGrid = this.getTileGrid(); + goog.asserts.assert(!goog.isNull(tileGrid)); + if(tileGrid.getResolutions().length <= tileCoord.z) { + return null + } + var x = tileCoord.x; + var y = -tileCoord.y - 1; + var tileExtent = tileGrid.getTileCoordExtent(tileCoord); + var projectionExtent = projection.getExtent(); + var extent = goog.isDef(options.extent) ? options.extent : projectionExtent; + if(!goog.isNull(extent) && projection.isGlobal() && extent[0] === projectionExtent[0] && extent[2] === projectionExtent[2]) { + var numCols = Math.ceil((extent[2] - extent[0]) / (tileExtent[2] - tileExtent[0])); + x = goog.math.modulo(x, numCols); + tmpTileCoord.z = tileCoord.z; + tmpTileCoord.x = x; + tmpTileCoord.y = tileCoord.y; + tileExtent = tileGrid.getTileCoordExtent(tmpTileCoord, tmpExtent) + } + if(!ol.extent.intersects(tileExtent, extent) || ol.extent.touches(tileExtent, extent)) { + return null + } + return new ol.TileCoord(tileCoord.z, x, y) + }, tileUrlFunction); + goog.base(this, {attributions:options.attributions, crossOrigin:options.crossOrigin, extent:options.extent, logo:options.logo, projection:options.projection, tileGrid:tileGrid, tileLoadFunction:options.tileLoadFunction, tileUrlFunction:tileUrlFunction}) +}; +goog.inherits(ol.source.WMTS, ol.source.TileImage); +ol.source.WMTS.prototype.getDimensions = function() { + return this.dimensions_ +}; +ol.source.WMTS.prototype.getKeyZXY = function(z, x, y) { + return this.coordKeyPrefix_ + goog.base(this, "getKeyZXY", z, x, y) +}; +ol.source.WMTS.prototype.resetCoordKeyPrefix_ = function() { + var i = 0; + var res = []; + for(var key in this.dimensions_) { + res[i++] = key + "-" + this.dimensions_[key] + } + this.coordKeyPrefix_ = res.join("/") +}; +ol.source.WMTS.prototype.updateDimensions = function(dimensions) { + goog.object.extend(this.dimensions_, dimensions); + this.resetCoordKeyPrefix_(); + this.dispatchChangeEvent() +}; +ol.source.WMTS.optionsFromCapabilities = function(wmtsCap, layer) { + var layers = wmtsCap["contents"]["layers"]; + var l = goog.array.find(layers, function(elt, index, array) { + return elt["identifier"] == layer + }); + goog.asserts.assert(!goog.isNull(l)); + goog.asserts.assert(l["tileMatrixSetLinks"].length > 0); + var matrixSet = (l["tileMatrixSetLinks"][0]["tileMatrixSet"]); + var format = (l["formats"][0]); + var idx = goog.array.findIndex(l["styles"], function(elt, index, array) { + return elt["isDefault"] + }); + if(idx < 0) { + idx = 0 + } + var style = (l["styles"][idx]["identifier"]); + var dimensions = {}; + goog.array.forEach(l["dimensions"], function(elt, index, array) { + var key = elt["identifier"]; + var value = elt["default"]; + if(goog.isDef(value)) { + goog.asserts.assert(goog.array.indexOf(elt["values"], value) >= 0) + }else { + value = elt["values"][0] + } + goog.asserts.assert(goog.isDef(value)); + dimensions[key] = value + }); + var matrixSets = wmtsCap["contents"]["tileMatrixSets"]; + goog.asserts.assert(matrixSet in matrixSets); + var matrixSetObj = matrixSets[matrixSet]; + var tileGrid = ol.tilegrid.WMTS.createFromCapabilitiesMatrixSet(matrixSetObj); + var projection = ol.proj.get(matrixSetObj["supportedCRS"]); + var gets = wmtsCap["operationsMetadata"]["GetTile"]["dcp"]["http"]["get"]; + var encodings = goog.object.getKeys(gets[0]["constraints"]["GetEncoding"]["allowedValues"]); + goog.asserts.assert(encodings.length > 0); + var urls; + var requestEncoding; + switch(encodings[0]) { + case "REST": + ; + case "RESTful": + requestEncoding = ol.source.WMTSRequestEncoding.REST; + goog.asserts.assert(l["resourceUrls"].hasOwnProperty("tile")); + goog.asserts.assert(l["resourceUrls"]["tile"].hasOwnProperty(format)); + urls = (l["resourceUrls"]["tile"][format]); + break; + case "KVP": + requestEncoding = ol.source.WMTSRequestEncoding.KVP; + urls = []; + goog.array.forEach(gets, function(elt, index, array) { + if(elt["constraints"]["GetEncoding"]["allowedValues"].hasOwnProperty(ol.source.WMTSRequestEncoding.KVP)) { + urls.push((elt["url"])) + } + }); + goog.asserts.assert(urls.length > 0); + break; + default: + goog.asserts.fail() + } + return{urls:urls, layer:layer, matrixSet:matrixSet, format:format, projection:projection, requestEncoding:requestEncoding, tileGrid:tileGrid, style:style, dimensions:dimensions} +}; +goog.provide("ol.tilegrid.Zoomify"); +goog.require("goog.math"); +goog.require("ol.TileCoord"); +goog.require("ol.proj"); +goog.require("ol.tilegrid.TileGrid"); +ol.tilegrid.Zoomify = function(opt_options) { + var options = goog.isDef(opt_options) ? opt_options : options; + goog.base(this, {origin:[0, 0], resolutions:options.resolutions}) +}; +goog.inherits(ol.tilegrid.Zoomify, ol.tilegrid.TileGrid); +ol.tilegrid.Zoomify.prototype.createTileCoordTransform = function(opt_options) { + var options = goog.isDef(opt_options) ? opt_options : {}; + var minZ = this.minZoom; + var maxZ = this.maxZoom; + var tmpTileCoord = new ol.TileCoord(0, 0, 0); + var tileRangeByZ = null; + if(goog.isDef(options.extent)) { + tileRangeByZ = new Array(maxZ + 1); + var z; + for(z = 0;z <= maxZ;++z) { + if(z < minZ) { + tileRangeByZ[z] = null + }else { + tileRangeByZ[z] = this.getTileRangeForExtentAndZ(options.extent, z) + } + } + } + return function(tileCoord, projection, opt_tileCoord) { + var z = tileCoord.z; + if(z < minZ || maxZ < z) { + return null + } + var n = Math.pow(2, z); + var x = tileCoord.x; + if(x < 0 || n <= x) { + return null + } + var y = tileCoord.y; + if(y < -n || -1 < y) { + return null + } + if(!goog.isNull(tileRangeByZ)) { + tmpTileCoord.z = z; + tmpTileCoord.x = x; + tmpTileCoord.y = -y - 1; + if(!tileRangeByZ[z].contains(tmpTileCoord)) { + return null + } + } + return ol.TileCoord.createOrUpdate(z, x, -y - 1, opt_tileCoord) + } +}; +goog.provide("ol.source.Zoomify"); +goog.require("goog.array"); +goog.require("goog.asserts"); +goog.require("goog.dom"); +goog.require("goog.dom.TagName"); +goog.require("ol.ImageTile"); +goog.require("ol.TileCoord"); +goog.require("ol.TileState"); +goog.require("ol.TileUrlFunction"); +goog.require("ol.proj"); +goog.require("ol.source.TileImage"); +goog.require("ol.tilegrid.Zoomify"); +ol.source.ZoomifyTierSizeCalculation = {DEFAULT:"default", TRUNCATED:"truncated"}; +ol.source.Zoomify = function(opt_options) { + var options = goog.isDef(opt_options) ? opt_options : {}; + var size = options.size; + var tierSizeCalculation = goog.isDef(options.tierSizeCalculation) ? options.tierSizeCalculation : ol.source.ZoomifyTierSizeCalculation.DEFAULT; + var imageWidth = size[0]; + var imageHeight = size[1]; + var tierSizeInTiles = []; + var tileSize = ol.DEFAULT_TILE_SIZE; + switch(tierSizeCalculation) { + case ol.source.ZoomifyTierSizeCalculation.DEFAULT: + while(imageWidth > tileSize || imageHeight > tileSize) { + tierSizeInTiles.push([Math.ceil(imageWidth / tileSize), Math.ceil(imageHeight / tileSize)]); + tileSize += tileSize + } + break; + case ol.source.ZoomifyTierSizeCalculation.TRUNCATED: + var width = imageWidth; + var height = imageHeight; + while(width > tileSize || height > tileSize) { + tierSizeInTiles.push([Math.ceil(width / tileSize), Math.ceil(height / tileSize)]); + width >>= 1; + height >>= 1 + } + break; + default: + goog.asserts.fail(); + break + } + tierSizeInTiles.push([1, 1]); + tierSizeInTiles.reverse(); + var resolutions = [1]; + var tileCountUpToTier = [0]; + var i, ii; + for(i = 1, ii = tierSizeInTiles.length;i < ii;i++) { + resolutions.push(1 << i); + tileCountUpToTier.push(tierSizeInTiles[i - 1][0] * tierSizeInTiles[i - 1][1] + tileCountUpToTier[i - 1]) + } + resolutions.reverse(); + var tileGrid = new ol.tilegrid.Zoomify({resolutions:resolutions}); + var url = options.url; + var tileUrlFunction = ol.TileUrlFunction.withTileCoordTransform(tileGrid.createTileCoordTransform({extent:[0, 0, size[0], size[1]]}), function(tileCoord, pixelRatio, projection) { + if(goog.isNull(tileCoord)) { + return undefined + }else { + var tileIndex = tileCoord.x + tileCoord.y * tierSizeInTiles[tileCoord.z][0] + tileCountUpToTier[tileCoord.z]; + var tileGroup = tileIndex / ol.DEFAULT_TILE_SIZE | 0; + return url + "TileGroup" + tileGroup + "/" + tileCoord.z + "-" + tileCoord.x + "-" + tileCoord.y + ".jpg" + } + }); + goog.base(this, {attributions:options.attributions, crossOrigin:options.crossOrigin, logo:options.logo, tileClass:ol.source.ZoomifyTile_, tileGrid:tileGrid, tileUrlFunction:tileUrlFunction}) +}; +goog.inherits(ol.source.Zoomify, ol.source.TileImage); +ol.source.ZoomifyTile_ = function(tileCoord, state, src, crossOrigin, tileLoadFunction) { + goog.base(this, tileCoord, state, src, crossOrigin, tileLoadFunction); + this.zoomifyImageByContext_ = {} +}; +goog.inherits(ol.source.ZoomifyTile_, ol.ImageTile); +ol.source.ZoomifyTile_.prototype.getImage = function(opt_context) { + var key = goog.isDef(opt_context) ? goog.getUid(opt_context).toString() : ""; + if(key in this.zoomifyImageByContext_) { + return this.zoomifyImageByContext_[key] + }else { + var image = goog.base(this, "getImage", opt_context); + if(this.state == ol.TileState.LOADED) { + if(image.width == ol.DEFAULT_TILE_SIZE && image.height == ol.DEFAULT_TILE_SIZE) { + this.zoomifyImageByContext_[key] = image; + return image + }else { + var canvas = (goog.dom.createElement(goog.dom.TagName.CANVAS)); + canvas.width = ol.DEFAULT_TILE_SIZE; + canvas.height = ol.DEFAULT_TILE_SIZE; + var context = (canvas.getContext("2d")); + context.drawImage(image, 0, 0); + this.zoomifyImageByContext_[key] = canvas; + return canvas + } + }else { + return image + } + } +}; +goog.provide("ol.sphere.WGS84"); +goog.require("ol.Sphere"); +ol.sphere.WGS84 = new ol.Sphere(6378137); +goog.provide("ol.style.Text"); +ol.style.Text = function(opt_options) { + var options = goog.isDef(opt_options) ? opt_options : {}; + this.font_ = options.font; + this.rotation_ = options.rotation; + this.scale_ = options.scale; + this.text_ = options.text; + this.textAlign_ = options.textAlign; + this.textBaseline_ = options.textBaseline; + this.fill_ = goog.isDef(options.fill) ? options.fill : null; + this.stroke_ = goog.isDef(options.stroke) ? options.stroke : null +}; +ol.style.Text.prototype.getFont = function() { + return this.font_ +}; +ol.style.Text.prototype.getFill = function() { + return this.fill_ +}; +ol.style.Text.prototype.getRotation = function() { + return this.rotation_ +}; +ol.style.Text.prototype.getScale = function() { + return this.scale_ +}; +ol.style.Text.prototype.getStroke = function() { + return this.stroke_ +}; +ol.style.Text.prototype.getText = function() { + return this.text_ +}; +ol.style.Text.prototype.getTextAlign = function() { + return this.textAlign_ +}; +ol.style.Text.prototype.getTextBaseline = function() { + return this.textBaseline_ +}; +goog.require("libtess"); +goog.require("libtess.ActiveRegion"); +goog.require("libtess.CachedVertex"); +goog.require("libtess.Dict"); +goog.require("libtess.DictNode"); +goog.require("libtess.FaceCount"); +goog.require("libtess.GluFace"); +goog.require("libtess.GluHalfEdge"); +goog.require("libtess.GluMesh"); +goog.require("libtess.GluTesselator"); +goog.require("libtess.GluVertex"); +goog.require("libtess.PQHandleElem"); +goog.require("libtess.PQNode"); +goog.require("libtess.PriorityQ"); +goog.require("libtess.PriorityQHeap"); +goog.require("libtess.geom"); +goog.require("libtess.mesh"); +goog.require("libtess.normal"); +goog.require("libtess.render"); +goog.require("libtess.sweep"); +goog.require("libtess.tessmono"); +goog.require("ol"); +goog.require("ol.Attribution"); +goog.require("ol.BrowserFeature"); +goog.require("ol.CanvasFunctionType"); +goog.require("ol.CenterConstraint"); +goog.require("ol.CenterConstraintType"); +goog.require("ol.Collection"); +goog.require("ol.CollectionEvent"); +goog.require("ol.CollectionEventType"); +goog.require("ol.Constraints"); +goog.require("ol.Coordinate"); +goog.require("ol.CoordinateArray"); +goog.require("ol.CoordinateFormatType"); +goog.require("ol.DeviceOrientation"); +goog.require("ol.DeviceOrientationProperty"); +goog.require("ol.DragBoxEvent"); +goog.require("ol.DrawEvent"); +goog.require("ol.Ellipsoid"); +goog.require("ol.Extent"); +goog.require("ol.Feature"); +goog.require("ol.FeatureOverlay"); +goog.require("ol.FrameState"); +goog.require("ol.Geolocation"); +goog.require("ol.GeolocationProperty"); +goog.require("ol.IView"); +goog.require("ol.IView2D"); +goog.require("ol.IView3D"); +goog.require("ol.Image"); +goog.require("ol.ImageBase"); +goog.require("ol.ImageCanvas"); +goog.require("ol.ImageState"); +goog.require("ol.ImageTile"); +goog.require("ol.ImageUrlFunction"); +goog.require("ol.ImageUrlFunctionType"); +goog.require("ol.Kinetic"); +goog.require("ol.Map"); +goog.require("ol.MapBrowserEvent"); +goog.require("ol.MapBrowserEvent.EventType"); +goog.require("ol.MapBrowserEventHandler"); +goog.require("ol.MapEvent"); +goog.require("ol.MapEventType"); +goog.require("ol.MapProperty"); +goog.require("ol.Object"); +goog.require("ol.ObjectEvent"); +goog.require("ol.ObjectEventType"); +goog.require("ol.Observable"); +goog.require("ol.Overlay"); +goog.require("ol.OverlayPositioning"); +goog.require("ol.OverlayProperty"); +goog.require("ol.Pixel"); +goog.require("ol.PostRenderFunction"); +goog.require("ol.PreRenderFunction"); +goog.require("ol.RendererHint"); +goog.require("ol.ResolutionConstraint"); +goog.require("ol.ResolutionConstraintType"); +goog.require("ol.RotationConstraint"); +goog.require("ol.RotationConstraintType"); +goog.require("ol.Size"); +goog.require("ol.Sphere"); +goog.require("ol.Tile"); +goog.require("ol.TileCache"); +goog.require("ol.TileCoord"); +goog.require("ol.TileLoadFunctionType"); +goog.require("ol.TilePriorityFunction"); +goog.require("ol.TileQueue"); +goog.require("ol.TileRange"); +goog.require("ol.TileState"); +goog.require("ol.TileUrlFunction"); +goog.require("ol.TileUrlFunctionType"); +goog.require("ol.TransformFunction"); +goog.require("ol.View"); +goog.require("ol.View2D"); +goog.require("ol.View2DProperty"); +goog.require("ol.View2DState"); +goog.require("ol.ViewHint"); +goog.require("ol.animation"); +goog.require("ol.array"); +goog.require("ol.binary.Buffer"); +goog.require("ol.binary.IReader"); +goog.require("ol.color"); +goog.require("ol.color.Matrix"); +goog.require("ol.control"); +goog.require("ol.control.Attribution"); +goog.require("ol.control.Control"); +goog.require("ol.control.FullScreen"); +goog.require("ol.control.Logo"); +goog.require("ol.control.MousePosition"); +goog.require("ol.control.ScaleLine"); +goog.require("ol.control.ScaleLineProperty"); +goog.require("ol.control.ScaleLineUnits"); +goog.require("ol.control.Zoom"); +goog.require("ol.control.ZoomSlider"); +goog.require("ol.control.ZoomToExtent"); +goog.require("ol.coordinate"); +goog.require("ol.css"); +goog.require("ol.dom"); +goog.require("ol.dom.BrowserFeature"); +goog.require("ol.dom.Input"); +goog.require("ol.dom.InputProperty"); +goog.require("ol.easing"); +goog.require("ol.ellipsoid.BESSEL1841"); +goog.require("ol.ellipsoid.WGS84"); +goog.require("ol.events.ConditionType"); +goog.require("ol.events.condition"); +goog.require("ol.extent"); +goog.require("ol.extent.Relationship"); +goog.require("ol.feature"); +goog.require("ol.format.BinaryFeature"); +goog.require("ol.format.Feature"); +goog.require("ol.format.FormatType"); +goog.require("ol.format.GML"); +goog.require("ol.format.GPX"); +goog.require("ol.format.GPX.V1_1"); +goog.require("ol.format.GeoJSON"); +goog.require("ol.format.IGC"); +goog.require("ol.format.IGCZ"); +goog.require("ol.format.JSONFeature"); +goog.require("ol.format.KML"); +goog.require("ol.format.OSMXML"); +goog.require("ol.format.Polyline"); +goog.require("ol.format.TextFeature"); +goog.require("ol.format.TopoJSON"); +goog.require("ol.format.XMLFeature"); +goog.require("ol.format.XSD"); +goog.require("ol.geom.Circle"); +goog.require("ol.geom.Geometry"); +goog.require("ol.geom.GeometryCollection"); +goog.require("ol.geom.GeometryType"); +goog.require("ol.geom.LineString"); +goog.require("ol.geom.LinearRing"); +goog.require("ol.geom.MultiLineString"); +goog.require("ol.geom.MultiPoint"); +goog.require("ol.geom.MultiPolygon"); +goog.require("ol.geom.Point"); +goog.require("ol.geom.Polygon"); +goog.require("ol.geom.SimpleGeometry"); +goog.require("ol.geom.closest"); +goog.require("ol.geom.flat"); +goog.require("ol.geom.simplify"); +goog.require("ol.interaction"); +goog.require("ol.interaction.DoubleClickZoom"); +goog.require("ol.interaction.Drag"); +goog.require("ol.interaction.DragAndDrop"); +goog.require("ol.interaction.DragAndDropEvent"); +goog.require("ol.interaction.DragBox"); +goog.require("ol.interaction.DragPan"); +goog.require("ol.interaction.DragRotate"); +goog.require("ol.interaction.DragRotateAndZoom"); +goog.require("ol.interaction.DragZoom"); +goog.require("ol.interaction.Draw"); +goog.require("ol.interaction.Interaction"); +goog.require("ol.interaction.KeyboardPan"); +goog.require("ol.interaction.KeyboardZoom"); +goog.require("ol.interaction.Modify"); +goog.require("ol.interaction.MouseWheelZoom"); +goog.require("ol.interaction.Select"); +goog.require("ol.interaction.Touch"); +goog.require("ol.interaction.TouchPan"); +goog.require("ol.interaction.TouchRotate"); +goog.require("ol.interaction.TouchZoom"); +goog.require("ol.layer.Base"); +goog.require("ol.layer.Group"); +goog.require("ol.layer.Heatmap"); +goog.require("ol.layer.Image"); +goog.require("ol.layer.Layer"); +goog.require("ol.layer.LayerProperty"); +goog.require("ol.layer.LayerState"); +goog.require("ol.layer.Tile"); +goog.require("ol.layer.Vector"); +goog.require("ol.math"); +goog.require("ol.parser.Parser"); +goog.require("ol.parser.XML"); +goog.require("ol.parser.ogc.ExceptionReport"); +goog.require("ol.parser.ogc.Versioned"); +goog.require("ol.parser.ogc.WMSCapabilities"); +goog.require("ol.parser.ogc.WMSCapabilities_v1"); +goog.require("ol.parser.ogc.WMSCapabilities_v1_0_0"); +goog.require("ol.parser.ogc.WMSCapabilities_v1_1"); +goog.require("ol.parser.ogc.WMSCapabilities_v1_1_0"); +goog.require("ol.parser.ogc.WMSCapabilities_v1_1_1"); +goog.require("ol.parser.ogc.WMSCapabilities_v1_1_1_WMSC"); +goog.require("ol.parser.ogc.WMSCapabilities_v1_3_0"); +goog.require("ol.proj"); +goog.require("ol.proj.CH"); +goog.require("ol.proj.EPSG2056"); +goog.require("ol.proj.EPSG21781"); +goog.require("ol.proj.EPSG3857"); +goog.require("ol.proj.EPSG4326"); +goog.require("ol.proj.METERS_PER_UNIT"); +goog.require("ol.proj.Projection"); +goog.require("ol.proj.ProjectionLike"); +goog.require("ol.proj.Units"); +goog.require("ol.proj.common"); +goog.require("ol.render.Box"); +goog.require("ol.render.Event"); +goog.require("ol.render.EventType"); +goog.require("ol.render.IReplayGroup"); +goog.require("ol.render.IVectorContext"); +goog.require("ol.render.canvas"); +goog.require("ol.render.canvas.Immediate"); +goog.require("ol.render.canvas.ReplayGroup"); +goog.require("ol.render.webgl.Immediate"); +goog.require("ol.renderer.Layer"); +goog.require("ol.renderer.Map"); +goog.require("ol.renderer.canvas.ImageLayer"); +goog.require("ol.renderer.canvas.Layer"); +goog.require("ol.renderer.canvas.Map"); +goog.require("ol.renderer.canvas.TileLayer"); +goog.require("ol.renderer.canvas.VectorLayer"); +goog.require("ol.renderer.dom.ImageLayer"); +goog.require("ol.renderer.dom.Layer"); +goog.require("ol.renderer.dom.Map"); +goog.require("ol.renderer.dom.TileLayer"); +goog.require("ol.renderer.vector"); +goog.require("ol.renderer.webgl.ImageLayer"); +goog.require("ol.renderer.webgl.Layer"); +goog.require("ol.renderer.webgl.Map"); +goog.require("ol.renderer.webgl.TileLayer"); +goog.require("ol.renderer.webgl.map.shader.Color"); +goog.require("ol.renderer.webgl.map.shader.Default"); +goog.require("ol.renderer.webgl.tilelayer.shader"); +goog.require("ol.size"); +goog.require("ol.source.BingMaps"); +goog.require("ol.source.GPX"); +goog.require("ol.source.GeoJSON"); +goog.require("ol.source.IGC"); +goog.require("ol.source.Image"); +goog.require("ol.source.ImageCanvas"); +goog.require("ol.source.ImageStatic"); +goog.require("ol.source.ImageVector"); +goog.require("ol.source.ImageWMS"); +goog.require("ol.source.KML"); +goog.require("ol.source.MapGuide"); +goog.require("ol.source.MapQuest"); +goog.require("ol.source.OSM"); +goog.require("ol.source.OSMXML"); +goog.require("ol.source.Source"); +goog.require("ol.source.Stamen"); +goog.require("ol.source.State"); +goog.require("ol.source.Tile"); +goog.require("ol.source.TileDebug"); +goog.require("ol.source.TileImage"); +goog.require("ol.source.TileJSON"); +goog.require("ol.source.TileOptions"); +goog.require("ol.source.TileWMS"); +goog.require("ol.source.TopoJSON"); +goog.require("ol.source.Vector"); +goog.require("ol.source.VectorEvent"); +goog.require("ol.source.VectorEventType"); +goog.require("ol.source.VectorFile"); +goog.require("ol.source.WMTS"); +goog.require("ol.source.WMTSRequestEncoding"); +goog.require("ol.source.XYZ"); +goog.require("ol.source.Zoomify"); +goog.require("ol.source.wms"); +goog.require("ol.source.wms.ServerType"); +goog.require("ol.sphere.NORMAL"); +goog.require("ol.sphere.WGS84"); +goog.require("ol.structs.Buffer"); +goog.require("ol.structs.IntegerSet"); +goog.require("ol.structs.LRUCache"); +goog.require("ol.structs.PriorityQueue"); +goog.require("ol.structs.RBush"); +goog.require("ol.style.Circle"); +goog.require("ol.style.Fill"); +goog.require("ol.style.Icon"); +goog.require("ol.style.IconAnchorOrigin"); +goog.require("ol.style.IconAnchorUnits"); +goog.require("ol.style.IconImageCache"); +goog.require("ol.style.Image"); +goog.require("ol.style.ImageState"); +goog.require("ol.style.Stroke"); +goog.require("ol.style.Style"); +goog.require("ol.style.Text"); +goog.require("ol.tilegrid.TileGrid"); +goog.require("ol.tilegrid.WMTS"); +goog.require("ol.tilegrid.XYZ"); +goog.require("ol.tilegrid.Zoomify"); +goog.require("ol.tilejson"); +goog.require("ol.vec.Mat4"); +goog.require("ol.webgl"); +goog.require("ol.webgl.Context"); +goog.require("ol.webgl.WebGLContextEventType"); +goog.require("ol.webgl.shader"); +goog.require("ol.xml"); + diff --git a/float-no-zero/build/ol.js b/float-no-zero/build/ol.js new file mode 100644 index 0000000000..eda39cd04c --- /dev/null +++ b/float-no-zero/build/ol.js @@ -0,0 +1,555 @@ +// OpenLayers 3. see http://ol3js.org/ +(function(){function ba(){return function(){}}function k(a){return function(){return this[a]}}function ca(a){return function(){return a}}var l,da=da||{},s=this;function fa(){}function ga(a){a.Ka=function(){return a.fe?a.fe:a.fe=new a}} +function ha(a){var b=typeof a;if("object"==b)if(a){if(a instanceof Array)return"array";if(a instanceof Object)return b;var c=Object.prototype.toString.call(a);if("[object Window]"==c)return"object";if("[object Array]"==c||"number"==typeof a.length&&"undefined"!=typeof a.splice&&"undefined"!=typeof a.propertyIsEnumerable&&!a.propertyIsEnumerable("splice"))return"array";if("[object Function]"==c||"undefined"!=typeof a.call&&"undefined"!=typeof a.propertyIsEnumerable&&!a.propertyIsEnumerable("call"))return"function"}else return"null"; +else if("function"==b&&"undefined"==typeof a.call)return"object";return b}function t(a){return void 0!==a}function ia(a){return"array"==ha(a)}function ja(a){var b=ha(a);return"array"==b||"object"==b&&"number"==typeof a.length}function la(a){return"string"==typeof a}function na(a){return"number"==typeof a}function oa(a){return"function"==ha(a)}function pa(a){var b=typeof a;return"object"==b&&null!=a||"function"==b}function A(a){return a[qa]||(a[qa]=++ra)} +var qa="closure_uid_"+(1E9*Math.random()>>>0),ra=0;function ta(a,b,c){return a.call.apply(a.bind,arguments)}function ua(a,b,c){if(!a)throw Error();if(2/g,Fa=/\"/g,Ba=/[&<>\"]/;function Ga(a){a=t(void 0)?a.toFixed(void 0):String(a);var b=a.indexOf(".");-1==b&&(b=a.length);b=Math.max(0,2-b);return Array(b+1).join("0")+a} +function Ha(a,b){for(var c=0,d=za(String(a)).split("."),e=za(String(b)).split("."),f=Math.max(d.length,e.length),g=0;0==c&&g(0==q[1].length?0:parseInt(q[1],10))?1:0)||((0==r[2].length)<(0==q[2].length)? +-1:(0==r[2].length)>(0==q[2].length)?1:0)||(r[2]q[2]?1:0)}while(0==c)}return c};var Ia=Array.prototype,Ja=Ia.indexOf?function(a,b,c){return Ia.indexOf.call(a,b,c)}:function(a,b,c){c=null==c?0:0>c?Math.max(0,a.length+c):c;if(la(a))return la(b)&&1==b.length?a.indexOf(b,c):-1;for(;cc?null:la(a)?a.charAt(c):a[c]}function Oa(a,b,c){for(var d=a.length,e=la(a)?a.split(""):a,f=0;f=arguments.length?Ia.slice.call(a,b):Ia.slice.call(a,b,c)}function Va(a,b){Ia.sort.call(a,b||Wa)}function Xa(a,b){if(!ja(a)||!ja(b)||a.length!=b.length)return!1;for(var c=a.length,d=Ya,e=0;eb?1:a>=1;return b.join("")}$a.prototype.toString=function(){return bb(this.a,this.x,this.y)};function db(a,b,c,d){this.a=a;this.d=b;this.b=c;this.c=d}function eb(a,b,c,d,e){return t(e)?(e.a=a,e.d=b,e.b=c,e.c=d,e):new db(a,b,c,d)}db.prototype.contains=function(a){return this.a<=a.x&&a.x<=this.d&&this.b<=a.y&&a.y<=this.c};function fb(a){this.c=a.html;this.a=t(a.tileRanges)?a.tileRanges:null};var gb,hb,ib,kb,lb,mb,nb;function ob(){return s.navigator?s.navigator.userAgent:null}function pb(){return s.navigator}kb=ib=hb=gb=!1;var qb;if(qb=ob()){var rb=pb();gb=0==qb.lastIndexOf("Opera",0);hb=!gb&&(-1!=qb.indexOf("MSIE")||-1!=qb.indexOf("Trident"));ib=!gb&&-1!=qb.indexOf("WebKit");kb=!gb&&!ib&&!hb&&"Gecko"==rb.product}var sb=gb,H=hb,ub=kb,vb=ib,wb,xb=pb();wb=xb&&xb.platform||"";lb=-1!=wb.indexOf("Mac");mb=-1!=wb.indexOf("Win");nb=-1!=wb.indexOf("Linux"); +var yb=!!pb()&&-1!=(pb().appVersion||"").indexOf("X11");function zb(){var a=s.document;return a?a.documentMode:void 0}var Ab;a:{var Bb="",Cb;if(sb&&s.opera)var Db=s.opera.version,Bb="function"==typeof Db?Db():Db;else if(ub?Cb=/rv\:([^\);]+)(\)|;)/:H?Cb=/\b(?:MSIE|rv)\s+([^\);]+)(\)|;)/:vb&&(Cb=/WebKit\/(\S+)/),Cb)var Eb=Cb.exec(ob()),Bb=Eb?Eb[1]:"";if(H){var Fb=zb();if(Fb>parseFloat(Bb)){Ab=String(Fb);break a}}Ab=Bb}var Gb={};function Hb(a){return Gb[a]||(Gb[a]=0<=Ha(Ab,a))} +var Ib=s.document,Jb=Ib&&H?zb()||("CSS1Compat"==Ib.compatMode?parseInt(Ab,10):5):void 0;var Kb,Lb=!H||H&&9<=Jb;!ub&&!H||H&&H&&9<=Jb||ub&&Hb("1.9.1");H&&Hb("9");function Nb(a){a=a.className;return la(a)&&a.match(/\S+/g)||[]}function Ob(a,b){for(var c=Nb(a),d=Ua(arguments,1),e=c.length+d.length,f=c,g=0;gc*b?c+b:c}function Sb(a){return a*Math.PI/180};function Tb(a,b){this.x=t(a)?a:0;this.y=t(b)?b:0}l=Tb.prototype;l.J=function(){return new Tb(this.x,this.y)};l.ceil=function(){this.x=Math.ceil(this.x);this.y=Math.ceil(this.y);return this};l.floor=function(){this.x=Math.floor(this.x);this.y=Math.floor(this.y);return this};l.round=function(){this.x=Math.round(this.x);this.y=Math.round(this.y);return this};l.scale=function(a,b){var c=na(b)?b:a;this.x*=a;this.y*=c;return this};function Ub(a,b){this.width=a;this.height=b}l=Ub.prototype;l.J=function(){return new Ub(this.width,this.height)};l.aa=function(){return!(this.width*this.height)};l.ceil=function(){this.width=Math.ceil(this.width);this.height=Math.ceil(this.height);return this};l.floor=function(){this.width=Math.floor(this.width);this.height=Math.floor(this.height);return this};l.round=function(){this.width=Math.round(this.width);this.height=Math.round(this.height);return this}; +l.scale=function(a,b){var c=na(b)?b:a;this.width*=a;this.height*=c;return this};function Vb(a,b,c){for(var d in a)b.call(c,a[d],d,a)}function Wb(a,b){for(var c in a)if(b.call(void 0,a[c],c,a))return!0;return!1}function Xb(a){var b=[],c=0,d;for(d in a)b[c++]=a[d];return b}function Yb(a){var b=[],c=0,d;for(d in a)b[c++]=d;return b}function Zb(a){for(var b in a)return!1;return!0}function $b(a){for(var b in a)delete a[b]}function ac(a,b){b in a&&delete a[b]}function I(a,b,c){return b in a?a[b]:c}function bc(a){var b={},c;for(c in a)b[c]=a[c];return b}var cc="constructor hasOwnProperty isPrototypeOf propertyIsEnumerable toLocaleString toString valueOf".split(" "); +function dc(a,b){for(var c,d,e=1;e=a.keyCode)a.keyCode=-1}catch(b){}};l.df=k("Q");var Sc="closure_listenable_"+(1E6*Math.random()|0);function Tc(a){return!(!a||!a[Sc])}var Uc=0;function Vc(a,b,c,d,e,f){this.xa=a;this.a=b;this.src=c;this.type=d;this.capture=!!e;this.cb=f;this.key=++Uc;this.Ha=this.kb=!1}function Wc(a){a.Ha=!0;a.xa=null;a.a=null;a.src=null;a.cb=null};var Xc={},Yc={},Zc={},$c={};function J(a,b,c,d,e){if(ia(b)){for(var f=0;fe.keyCode||void 0!=e.returnValue)return!0;a:{var h=!1;if(0==e.keyCode)try{e.keyCode=-1;break a}catch(m){h=!0}if(h||void 0==e.returnValue)e.returnValue=!0}}h=new Oc;Pc(h,e,this);e=!0;try{if(c){for(var n=[],p=h.c;p;p=p.parentNode)n.push(p);f=d[!0];for(var r=n.length- +1;!h.Qa&&0<=r;r--)h.c=n[r],e&=kd(f,n[r],h);if(g)for(f=d[!1],r=0;!h.Qa&&r>>0);function ad(a){return oa(a)?a:a[md]||(a[md]=function(b){return a.handleEvent(b)})};function nd(a){return function(){return a}}var od=nd(!1),pd=nd(!0);function qd(a){return a}function rd(a){return function(){throw a;}}function sd(a){var b;b=b||0;return function(){return a.apply(this,Array.prototype.slice.call(arguments,0,b))}}function td(a){var b=arguments,c=b.length;return function(){for(var a=0;a=c||(1<=c?(g=h,e=f):(g+=c*m,e+=c*n));return[g,e]}function we(a,b){var c=Rb(a+180,360)-180,d=Math.abs(Math.round(3600*c));return Math.floor(d/3600)+"\u00b0 "+Math.floor(d/60%60)+"\u2032 "+Math.floor(d%60)+"\u2033 "+b.charAt(0>c?1:0)} +function xe(a,b,c){return t(a)?b.replace("{x}",a[0].toFixed(c)).replace("{y}",a[1].toFixed(c)):""}function ye(a,b){for(var c=!0,d=a.length-1;0<=d;--d)if(a[d]!=b[d]){c=!1;break}return c}function ze(a,b){var c=Math.cos(b),d=Math.sin(b),e=a[1]*c+a[0]*d;a[0]=a[0]*c-a[1]*d;a[1]=e;return a}function Ae(a,b){var c=a[0]-b[0],d=a[1]-b[1];return c*c+d*d}function Be(a,b){return xe(a,"{x}, {y}",b)};function Ce(a){for(var b=De(),c=0,d=a.length;ce[2]&&(e[2]=f[0]);f[1]e[3]&&(e[3]=f[1])}return b}function Ee(a,b,c){var d=Math.min.apply(null,a),e=Math.min.apply(null,b);a=Math.max.apply(null,a);b=Math.max.apply(null,b);return Fe(d,e,a,b,c)}function Ge(a,b,c){return t(c)?(c[0]=a[0]-b,c[1]=a[1]-b,c[2]=a[2]+b,c[3]=a[3]+b,c):[a[0]-b,a[1]-b,a[2]+b,a[3]+b]} +function He(a,b){return t(b)?(b[0]=a[0],b[1]=a[1],b[2]=a[2],b[3]=a[3],b):a.slice()}function Ie(a,b,c){b=ba[2]&&(a[2]=b[2]);b[1]a[3]&&(a[3]=b[3]);return a}function Ne(a,b,c,d,e){for(;cf;++f)g=e[f],h=d[f],e[f]=a[0]+g*b-h*c,d[f]=a[1]+g*c+h*b;return Ee(e,d,void 0)}function Re(a){return a[3]-a[1]}function Se(a){return[a[0],a[3]]}function Te(a){return a[2]-a[0]}function Ue(a,b){return a[0]<=b[2]&&a[2]>=b[0]&&a[1]<=b[3]&&a[3]>=b[1]}function Ve(a){return a[2]>1;){var m=2*b+1,n=2*b+2,m=nb;){var g=c-1>>1;if(a[g]>f)d[c]=d[g],a[c]=a[g],c=g;else break}d[c]=e;a[c]=f}function If(a){var b=a.f,c=a.a,d=a.c,e=0,f=c.length,g,h,m;for(h=0;h>1)-1;0<=b;b--)Ff(a,b)};function Jf(a,b){Df.call(this,function(b){return a.apply(null,b)},function(a){return a[0].d()});this.h=b;this.d=0}G(Jf,Df);Jf.prototype.g=function(){--this.d;this.h()};function Kf(a){yd.call(this);this.l=xf(a.projection);this.O=t(a.extent)?a.extent:t(a.projection)?this.l.p():null;this.d=t(a.attributions)?a.attributions:null;this.q=a.logo;this.f=t(a.state)?a.state:1}G(Kf,yd);Kf.prototype.k=fa;Kf.prototype.p=k("O");Kf.prototype.V=k("f");function Lf(a,b){a.f=b;a.u()};function T(a){P.call(this);a=bc(a);a.brightness=t(a.brightness)?a.brightness:0;a.contrast=t(a.contrast)?a.contrast:1;a.hue=t(a.hue)?a.hue:0;a.opacity=t(a.opacity)?a.opacity:1;a.saturation=t(a.saturation)?a.saturation:1;a.visible=t(a.visible)?a.visible:!0;a.maxResolution=t(a.maxResolution)?a.maxResolution:Infinity;a.minResolution=t(a.minResolution)?a.minResolution:0;this.Y(a)}G(T,P);T.prototype.i=function(){return this.s("brightness")};T.prototype.getBrightness=T.prototype.i;T.prototype.k=function(){return this.s("contrast")}; +T.prototype.getContrast=T.prototype.k;T.prototype.n=function(){return this.s("hue")};T.prototype.getHue=T.prototype.n;function Mf(a){var b=a.i(),c=a.k(),d=a.n(),e=a.G(),f=a.B(),g=a.Xc(),h=a.b(),m=a.o();a=a.q();return{brightness:t(b)?Qb(b,-1,1):0,contrast:t(c)?Math.max(c,0):1,hue:t(d)?d:0,opacity:t(e)?Qb(e,0,1):1,saturation:t(f)?Math.max(f,0):1,sd:g,visible:t(h)?!!h:!0,maxResolution:t(m)?m:Infinity,minResolution:t(a)?Math.max(a,0):0}}T.prototype.o=function(){return this.s("maxResolution")}; +T.prototype.getMaxResolution=T.prototype.o;T.prototype.q=function(){return this.s("minResolution")};T.prototype.getMinResolution=T.prototype.q;T.prototype.G=function(){return this.s("opacity")};T.prototype.getOpacity=T.prototype.G;T.prototype.B=function(){return this.s("saturation")};T.prototype.getSaturation=T.prototype.B;T.prototype.b=function(){return this.s("visible")};T.prototype.getVisible=T.prototype.b;T.prototype.Ua=function(a){this.t("brightness",a)};T.prototype.setBrightness=T.prototype.Ua; +T.prototype.jb=function(a){this.t("contrast",a)};T.prototype.setContrast=T.prototype.jb;T.prototype.Jc=function(a){this.t("hue",a)};T.prototype.setHue=T.prototype.Jc;T.prototype.Kc=function(a){this.t("maxResolution",a)};T.prototype.setMaxResolution=T.prototype.Kc;T.prototype.Lc=function(a){this.t("minResolution",a)};T.prototype.setMinResolution=T.prototype.Lc;T.prototype.Mc=function(a){this.t("opacity",a)};T.prototype.setOpacity=T.prototype.Mc;T.prototype.Oc=function(a){this.t("saturation",a)}; +T.prototype.setSaturation=T.prototype.Oc;T.prototype.Pc=function(a){this.t("visible",a)};T.prototype.setVisible=T.prototype.Pc;function Nf(a){var b=bc(a);delete b.source;T.call(this,b);this.a=a.source;J(this.a,"change",this.Ng,!1,this)}G(Nf,T);l=Nf.prototype;l.Wc=function(a){a=t(a)?a:[];a.push(this);return a};l.Vc=function(a){a=t(a)?a:{layers:[],$:[]};a.layers.push(this);a.$.push(Mf(this));return a};l.Mg=k("a");l.Xc=function(){return this.a.f};l.Ng=function(){this.u()};function Of(){P.call(this);this.k=[0,0]}G(Of,P);Of.prototype.N=ca(null);Of.prototype.gd=ca(!1);function Pf(a,b){a.k[1]+=b};function Qf(a){return 1-Math.pow(1-a,3)};function Rf(a){return 3*a*a-2*a*a*a}function Sf(a){return a}function Tf(a){return 0.5>a?Rf(2*a):1-Rf(2*(a-0.5))};function Uf(a){var b=a.source,c=t(a.start)?a.start:wa(),d=b[0],e=b[1],f=t(a.duration)?a.duration:1E3,g=t(a.easing)?a.easing:Rf;return function(a,b){if(b.timeb;)d-=3;if(0<=d){var b=a.a[c+2]-a.a[d+2],e=a.a[c]-a.a[d],c=a.a[c+1]-a.a[d+1];a.b=Math.atan2(c,e);a.c=Math.sqrt(e*e+c*c)/b;return a.c>a.d}return!1} +function Zf(a,b){var c=a.e,d=a.c,e=a.d,f=Math.log(a.d/a.c)/a.e;return Uf({source:b,duration:f,easing:function(a){return d*(Math.exp(c*a*f)-1)/(e-d)}})};function $f(a){if("function"==typeof a.Ba)return a.Ba();if(la(a))return a.split("");if(ja(a)){for(var b=[],c=a.length,d=0;d2*this.H&&dg(this),!0):!1};function dg(a){if(a.H!=a.a.length){for(var b=0,c=0;bc?a[1]="?":c==b.length-1&&(a[1]=void 0)}return a.join("")} +function kg(a,b,c){if(ia(b))for(var d=0;db)throw Error("Bad port number "+b);a.xb=b}else a.xb=null}function qg(a,b,c){og(a);b instanceof rg?(a.a=b,xg(a.a,a.$a)):(c||(b=sg(b,yg)),a.a=new rg(b,0,a.$a))}function zg(a,b,c){og(a);ia(c)||(c=[String(c)]);Ag(a.a,b,c)}function og(a){if(a.qg)throw Error("Tried to modify a read-only Uri");} +function Bg(a){return a instanceof mg?a.J():new mg(a,void 0)} +function Cg(a,b){a instanceof mg||(a=Bg(a));b instanceof mg||(b=Bg(b));var c=a,d=b,e=c.J(),f=!!d.Ra;f?ng(e,d.Ra):f=!!d.hb;if(f){var g=d.hb;og(e);e.hb=g}else f=!!d.za;f?(g=d.za,og(e),e.za=g):f=null!=d.xb;g=d.ya;if(f)pg(e,d.xb);else if(f=!!d.ya)if("/"!=g.charAt(0)&&(c.za&&!c.ya?g="/"+g:(c=e.ya.lastIndexOf("/"),-1!=c&&(g=e.ya.substr(0,c+1)+g))),".."==g||"."==g)g="";else if(-1!=g.indexOf("./")||-1!=g.indexOf("/.")){for(var c=0==g.lastIndexOf("/",0),g=g.split("/"),h=[],m=0;m>4&15).toString(16)+(a&15).toString(16)}var tg=/[#\/\?@]/g,vg=/[\#\?:]/g,ug=/[\#\?]/g,yg=/[\#\?@]/g,wg=/#/g; +function rg(a,b,c){this.a=a||null;this.c=!!c}function Eg(a){if(!a.R&&(a.R=new bg,a.H=0,a.a))for(var b=a.a.split("\x26"),c=0;c=a||96<=a&&106>=a||65<=a&&90>=a||vb&&0==a)return!0;switch(a){case 32:case 63:case 107:case 109:case 110:case 111:case 186:case 59:case 189:case 187:case 61:case 188:case 190:case 191:case 192:case 222:case 219:case 220:case 221:return!0;default:return!1}}function Pg(a){switch(a){case 61:return 187;case 59:return 186;case 224:return 91;case 0:return 224;default:return a}};function Qg(a,b){wd.call(this);a&&Rg(this,a,b)}G(Qg,wd);l=Qg.prototype;l.Tb=null;l.vc=null;l.bd=null;l.wc=null;l.ba=-1;l.Ma=-1;l.Qc=!1; +var Tg={3:13,12:144,63232:38,63233:40,63234:37,63235:39,63236:112,63237:113,63238:114,63239:115,63240:116,63241:117,63242:118,63243:119,63244:120,63245:121,63246:122,63247:123,63248:44,63272:46,63273:36,63275:35,63276:33,63277:34,63289:144,63302:45},Ug={Up:38,Down:40,Left:37,Right:39,Enter:13,F1:112,F2:113,F3:114,F4:115,F5:116,F6:117,F7:118,F8:119,F9:120,F10:121,F11:122,F12:123,"U+007F":46,Home:36,End:35,PageUp:33,PageDown:34,Insert:45},Vg=H||vb&&Hb("525"),Wg=lb&&ub; +Qg.prototype.a=function(a){vb&&(17==this.ba&&!a.Sb||18==this.ba&&!a.fa||lb&&91==this.ba&&!a.Zc)&&(this.Ma=this.ba=-1);-1==this.ba&&(a.Sb&&17!=a.Ca?this.ba=17:a.fa&&18!=a.Ca?this.ba=18:a.Zc&&91!=a.Ca&&(this.ba=91));Vg&&!Ng(a.Ca,this.ba,a.Da,a.Sb,a.fa)?this.handleEvent(a):(this.Ma=ub?Pg(a.Ca):a.Ca,Wg&&(this.Qc=a.fa))};Qg.prototype.c=function(a){this.Ma=this.ba=-1;this.Qc=a.fa}; +Qg.prototype.handleEvent=function(a){var b=a.Q,c,d,e=b.altKey;H&&"keypress"==a.type?(c=this.Ma,d=13!=c&&27!=c?b.keyCode:0):vb&&"keypress"==a.type?(c=this.Ma,d=0<=b.charCode&&63232>b.charCode&&Og(c)?b.charCode:0):sb?(c=this.Ma,d=Og(c)?b.keyCode:0):(c=b.keyCode||this.Ma,d=b.charCode||0,Wg&&(e=this.Qc),lb&&(63==d&&224==c)&&(c=191));var f=c,g=b.keyIdentifier;c?63232<=c&&c in Tg?f=Tg[c]:25==c&&a.Da&&(f=9):g&&g in Ug&&(f=Ug[g]);a=f==this.ba;this.ba=f;b=new Xg(f,d,a,b);b.fa=e;N(this,b)}; +function Rg(a,b,c){a.wc&&Yg(a);a.Tb=b;a.vc=J(a.Tb,"keypress",a,c);a.bd=J(a.Tb,"keydown",a.a,c,a);a.wc=J(a.Tb,"keyup",a.c,c,a)}function Yg(a){a.vc&&(K(a.vc),K(a.bd),K(a.wc),a.vc=null,a.bd=null,a.wc=null);a.Tb=null;a.ba=-1;a.Ma=-1}Qg.prototype.A=function(){Qg.F.A.call(this);Yg(this)};function Xg(a,b,c,d){d&&Pc(this,d,void 0);this.type="key";this.Ca=a;this.Yc=b;this.a=c}G(Xg,Oc);function Zg(a,b,c,d){this.top=a;this.right=b;this.bottom=c;this.left=d}l=Zg.prototype;l.J=function(){return new Zg(this.top,this.right,this.bottom,this.left)};l.contains=function(a){return this&&a?a instanceof Zg?a.left>=this.left&&a.right<=this.right&&a.top>=this.top&&a.bottom<=this.bottom:a.x>=this.left&&a.x<=this.right&&a.y>=this.top&&a.y<=this.bottom:!1}; +l.ceil=function(){this.top=Math.ceil(this.top);this.right=Math.ceil(this.right);this.bottom=Math.ceil(this.bottom);this.left=Math.ceil(this.left);return this};l.floor=function(){this.top=Math.floor(this.top);this.right=Math.floor(this.right);this.bottom=Math.floor(this.bottom);this.left=Math.floor(this.left);return this};l.round=function(){this.top=Math.round(this.top);this.right=Math.round(this.right);this.bottom=Math.round(this.bottom);this.left=Math.round(this.left);return this}; +l.scale=function(a,b){var c=na(b)?b:a;this.left*=a;this.right*=a;this.top*=c;this.bottom*=c;return this};function $g(a,b,c,d){this.left=a;this.top=b;this.width=c;this.height=d}l=$g.prototype;l.J=function(){return new $g(this.left,this.top,this.width,this.height)};l.contains=function(a){return a instanceof $g?this.left<=a.left&&this.left+this.width>=a.left+a.width&&this.top<=a.top&&this.top+this.height>=a.top+a.height:a.x>=this.left&&a.x<=this.left+this.width&&a.y>=this.top&&a.y<=this.top+this.height}; +l.ceil=function(){this.left=Math.ceil(this.left);this.top=Math.ceil(this.top);this.width=Math.ceil(this.width);this.height=Math.ceil(this.height);return this};l.floor=function(){this.left=Math.floor(this.left);this.top=Math.floor(this.top);this.width=Math.floor(this.width);this.height=Math.floor(this.height);return this};l.round=function(){this.left=Math.round(this.left);this.top=Math.round(this.top);this.width=Math.round(this.width);this.height=Math.round(this.height);return this}; +l.scale=function(a,b){var c=na(b)?b:a;this.left*=a;this.width*=a;this.top*=c;this.height*=c;return this};function ah(a,b){var c=gc(a);return c.defaultView&&c.defaultView.getComputedStyle&&(c=c.defaultView.getComputedStyle(a,null))?c[b]||c.getPropertyValue(b)||"":""}function bh(a,b){return ah(a,b)||(a.currentStyle?a.currentStyle[b]:null)||a.style&&a.style[b]}function ch(a,b,c){var d,e=ub&&(lb||yb)&&Hb("1.9");b instanceof Tb?(d=b.x,b=b.y):(d=b,b=c);a.style.left=dh(d,e);a.style.top=dh(b,e)} +function eh(a){var b;try{b=a.getBoundingClientRect()}catch(c){return{left:0,top:0,right:0,bottom:0}}H&&(a=a.ownerDocument,b.left-=a.documentElement.clientLeft+a.body.clientLeft,b.top-=a.documentElement.clientTop+a.body.clientTop);return b} +function fh(a){if(H&&!(H&&8<=Jb))return a.offsetParent;var b=gc(a),c=bh(a,"position"),d="fixed"==c||"absolute"==c;for(a=a.parentNode;a&&a!=b;a=a.parentNode)if(c=bh(a,"position"),d=d&&"static"==c&&a!=b.documentElement&&a!=b.body,!d&&(a.scrollWidth>a.clientWidth||a.scrollHeight>a.clientHeight||"fixed"==c||"absolute"==c||"relative"==c))return a;return null} +function gh(a){var b,c=gc(a),d=bh(a,"position"),e=ub&&c.getBoxObjectFor&&!a.getBoundingClientRect&&"absolute"==d&&(b=c.getBoxObjectFor(a))&&(0>b.screenX||0>b.screenY),f=new Tb(0,0),g;b=c?gc(c):document;(g=!H)||(g=H&&9<=Jb)||(ec(b),g=!0);g=g?b.documentElement:b.body;if(a==g)return f;if(a.getBoundingClientRect)b=eh(a),a=wc(ec(c)),f.x=b.left+a.x,f.y=b.top+a.y;else if(c.getBoxObjectFor&&!e)b=c.getBoxObjectFor(a),a=c.getBoxObjectFor(g),f.x=b.screenX-a.screenX,f.y=b.screenY-a.screenY;else{e=a;do{f.x+=e.offsetLeft; +f.y+=e.offsetTop;e!=a&&(f.x+=e.clientLeft||0,f.y+=e.clientTop||0);if(vb&&"fixed"==bh(e,"position")){f.x+=c.body.scrollLeft;f.y+=c.body.scrollTop;break}e=e.offsetParent}while(e&&e!=a);if(sb||vb&&"absolute"==d)f.y-=c.body.offsetTop;for(e=a;(e=fh(e))&&e!=c.body&&e!=g;)f.x-=e.scrollLeft,sb&&"TR"==e.tagName||(f.y-=e.scrollTop)}return f}function hh(a,b){var c=ih(a),d=ih(b);return new Tb(c.x-d.x,c.y-d.y)} +function ih(a){if(1==a.nodeType){var b;if(a.getBoundingClientRect)b=eh(a),b=new Tb(b.left,b.top);else{b=wc(ec(a));var c=gh(a);b=new Tb(c.x-b.x,c.y-b.y)}if(ub&&!Hb(12)){var d;H?d="-ms-transform":vb?d="-webkit-transform":sb?d="-o-transform":ub&&(d="-moz-transform");var e;d&&(e=bh(a,d));e||(e=bh(a,"transform"));a=e?(a=e.match(jh))?new Tb(parseFloat(a[1]),parseFloat(a[2])):new Tb(0,0):new Tb(0,0);a=new Tb(b.x+a.x,b.y+a.y)}else a=b;return a}d=oa(a.df);e=a;a.targetTouches?e=a.targetTouches[0]:d&&a.Q.targetTouches&& +(e=a.Q.targetTouches[0]);return new Tb(e.clientX,e.clientY)}function dh(a,b){"number"==typeof a&&(a=(b?Math.round(a):a)+"px");return a}function kh(a){var b=lh;if("none"!=bh(a,"display"))return b(a);var c=a.style,d=c.display,e=c.visibility,f=c.position;c.visibility="hidden";c.position="absolute";c.display="inline";a=b(a);c.display=d;c.position=f;c.visibility=e;return a} +function lh(a){var b=a.offsetWidth,c=a.offsetHeight,d=vb&&!b&&!c;return t(b)&&!d||!a.getBoundingClientRect?new Ub(b,c):(a=eh(a),new Ub(a.right-a.left,a.bottom-a.top))}function mh(a,b){var c=a.style;"opacity"in c?c.opacity=b:"MozOpacity"in c?c.MozOpacity=b:"filter"in c&&(c.filter=""===b?"":"alpha(opacity\x3d"+100*b+")")}function nh(a,b){a.style.display=b?"":"none"}function oh(a){return"rtl"==bh(a,"direction")} +function ph(a){var b=gc(a),c=H&&a.currentStyle,d;if(d=c)ec(b),d="auto"!=c.width&&"auto"!=c.height&&!c.boxSizing;if(d)return b=qh(a,c.width,"width","pixelWidth"),a=qh(a,c.height,"height","pixelHeight"),new Ub(b,a);c=new Ub(a.offsetWidth,a.offsetHeight);b=rh(a,"padding");a=sh(a);return new Ub(c.width-a.left-b.left-b.right-a.right,c.height-a.top-b.top-b.bottom-a.bottom)} +function qh(a,b,c,d){if(/^\d+px?$/.test(b))return parseInt(b,10);var e=a.style[c],f=a.runtimeStyle[c];a.runtimeStyle[c]=a.currentStyle[c];a.style[c]=b;b=a.style[d];a.style[c]=e;a.runtimeStyle[c]=f;return b}function th(a,b){var c=a.currentStyle?a.currentStyle[b]:null;return c?qh(a,c,"left","pixelLeft"):0} +function rh(a,b){if(H){var c=th(a,b+"Left"),d=th(a,b+"Right"),e=th(a,b+"Top"),f=th(a,b+"Bottom");return new Zg(e,d,f,c)}c=ah(a,b+"Left");d=ah(a,b+"Right");e=ah(a,b+"Top");f=ah(a,b+"Bottom");return new Zg(parseFloat(e),parseFloat(d),parseFloat(f),parseFloat(c))}var uh={thin:2,medium:4,thick:6};function vh(a,b){if("none"==(a.currentStyle?a.currentStyle[b+"Style"]:null))return 0;var c=a.currentStyle?a.currentStyle[b+"Width"]:null;return c in uh?uh[c]:qh(a,c,"left","pixelLeft")} +function sh(a){if(H){var b=vh(a,"borderLeft"),c=vh(a,"borderRight"),d=vh(a,"borderTop");a=vh(a,"borderBottom");return new Zg(d,c,a,b)}b=ah(a,"borderLeftWidth");c=ah(a,"borderRightWidth");d=ah(a,"borderTopWidth");a=ah(a,"borderBottomWidth");return new Zg(parseFloat(d),parseFloat(c),parseFloat(a),parseFloat(b))}var jh=/matrix\([0-9\.\-]+, [0-9\.\-]+, [0-9\.\-]+, [0-9\.\-]+, ([0-9\.\-]+)p?x?, ([0-9\.\-]+)p?x?\)/;function wh(a,b){wd.call(this);this.a=a;var c=pa(this.a)&&1==this.a.nodeType?this.a:this.a?this.a.body:null;this.e=!!c&&oh(c);this.c=J(this.a,ub?"DOMMouseScroll":"mousewheel",this,b)}G(wh,wd); +wh.prototype.handleEvent=function(a){var b=0,c=0,d=0;a=a.Q;if("mousewheel"==a.type){c=1;if(H||vb&&(mb||Hb("532.0")))c=40;d=xh(-a.wheelDelta,c);t(a.wheelDeltaX)?(b=xh(-a.wheelDeltaX,c),c=xh(-a.wheelDeltaY,c)):c=d}else d=a.detail,100d&&(d=-3),t(a.axis)&&a.axis===a.HORIZONTAL_AXIS?b=d:c=d;na(this.b)&&(b=Qb(b,-this.b,this.b));na(this.d)&&(c=Qb(c,-this.d,this.d));this.e&&(b=-b);b=new yh(d,a,b,c);N(this,b)};function xh(a,b){return vb&&(lb||nb)&&0!=a%b?a:a/b} +wh.prototype.A=function(){wh.F.A.call(this);K(this.c);this.c=null};function yh(a,b,c,d){b&&Pc(this,b,void 0);this.type="mousewheel";this.d=a;this.b=c;this.a=d}G(yh,Oc);function zh(a,b,c){Gc.call(this,a);this.map=b;this.b=t(c)?c:null}G(zh,Gc);function Ah(a,b,c,d){zh.call(this,a,b,d);this.a=c;this.originalEvent=c.Q;this.coordinate=b.Ud(this.originalEvent);this.pixel=b.pc(this.originalEvent)}G(Ah,zh);Ah.prototype.M=function(){Ah.F.M.call(this);this.a.M()};Ah.prototype.Ea=function(){Ah.F.Ea.call(this);this.a.Ea()}; +function Bh(a){wd.call(this);this.a=a;this.g=0;this.b=!1;this.va=this.f=this.e=this.d=this.c=null;a=this.a.b;this.h=[J(a,"mousemove",this.xe,!1,this),J(a,"click",this.xe,!1,this)];this.d=J(a,"mousedown",this.Xf,!1,this);this.e=J(a,"MSPointerDown",this.Zf,!1,this);this.f=J(a,"touchstart",this.lg,!1,this)}G(Bh,wd);function Ch(a,b){if(0!==a.g){s.clearTimeout(a.g);a.g=0;var c=new Ah(Dh,a.a,b);N(a,c)}else a.g=s.setTimeout(B(function(){this.g=0;var a=new Ah(Eh,this.a,b);N(this,a)},a),250)}l=Bh.prototype; +l.Yf=function(a){this.va&&(Ka(this.c,K),this.c=null,this.b?(a=new Ah(Fh,this.a,a),N(this,a)):Rc(a)&&Ch(this,a))};l.Xf=function(a){null!==this.e&&(K(this.e),this.e=null,K(this.f),this.f=null);var b=new Ah(Gh,this.a,a);N(this,b);this.va=a;this.b=!1;this.c=[J(s.document,"mousemove",this.Dg,!1,this),J(s.document,"mouseup",this.Yf,!1,this)];a.M()};l.Dg=function(a){var b;this.b||(this.b=!0,b=new Ah(Hh,this.a,this.va),N(this,b));b=new Ah(Ih,this.a,a);N(this,b)}; +l.Zf=function(a){null!==this.d&&(K(this.d),this.d=null,K(this.f),this.f=null);var b=new Ah(Jh,this.a,a);N(this,b);this.va=a;this.b=!1;this.c=[J(s.document,"MSPointerMove",this.$f,!1,this),J(s.document,"MSPointerUp",this.ag,!1,this)];a.M()};l.$f=function(a){if(a.clientX!=this.va.clientX||a.clientY!=this.va.clientY)this.b=!0,a=new Ah(Kh,this.a,a),N(this,a)};l.ag=function(a){var b=new Ah(Lh,this.a,a);N(this,b);Ka(this.c,K);!this.b&&Rc(a)&&Ch(this,this.va)}; +l.lg=function(a){null!==this.d&&(K(this.d),this.d=null,K(this.e),this.e=null);var b=new Ah(Jh,this.a,a);N(this,b);this.va=a;this.b=!1;null===this.c&&(this.c=[J(s.document,"touchmove",this.kg,!1,this),J(s.document,"touchend",this.jg,!1,this)]);a.M()};l.kg=function(a){this.b=!0;var b=new Ah(Kh,this.a,a);N(this,b);a.M()};l.jg=function(a){var b=new Ah(Lh,this.a,a);N(this,b);0===a.Q.targetTouches.length&&(Ka(this.c,K),this.c=null);this.b||Ch(this,this.va)}; +l.A=function(){null!==this.h&&(Ka(this.h,K),this.h=null);null!==this.d&&(K(this.d),this.d=null);null!==this.e&&(K(this.e),this.e=null);null!==this.f&&(K(this.f),this.f=null);null!==this.c&&(Ka(this.c,K),this.c=null);Bh.F.A.call(this)};l.xe=function(a){N(this,new Ah(a.type,this.a,a))};var Dh="dblclick",Gh="down",Hh="dragstart",Ih="drag",Fh="dragend",Eh="singleclick",Jh="touchstart",Kh="touchmove",Lh="touchend",Mh={ii:"click",ji:Dh,qi:"mousemove",ki:Gh,ni:Hh,li:Ih,mi:Fh,ri:Eh,vi:Jh,ui:Kh,ti:Lh};function Nh(a){return function(b){if(t(b))return[Qb(b[0],a[0],a[2]),Qb(b[1],a[1],a[3])]}}function Oh(a){return a};function Ph(a,b,c){var d=a.length;if(a[0]<=b)return 0;if(!(b<=a[d-1]))if(0c)for(c=1;cf?1:0.5,d=Math.floor(Math.log(b/d)/Math.log(a)+f),e=Math.max(d+e,0),t(c)&&(e=Math.min(e,c)),b/Math.pow(a,e)}};function Sh(a){if(t(a))return 0}function Th(a,b){if(t(a))return a+b}function Uh(a){var b=2*Math.PI/a;return function(a,d){if(t(a))return a=Math.floor((a+d)/b+0.5)*b}}function Vh(){var a=Sb(5);return function(b,c){if(t(b))return Math.abs(b+c)<=a?0:b+c}};function Wh(a,b,c){this.center=a;this.resolution=b;this.rotation=c};function U(a){Of.call(this);a=a||{};var b={};b.center=t(a.center)?a.center:null;b.projection=wf(a.projection);var c,d,e;if(t(a.resolutions))c=a.resolutions,d=c[0],e=c[c.length-1],c=Qh(c);else{d=a.maxResolution;t(d)||(d=a.projection,e=wf(d).p(),d=(null===e?360*bf.degrees/bf[d.ta]:Math.max(e[2]-e[0],e[3]-e[1]))/256);c=a.maxZoom;t(c)||(c=28);var f=a.zoomFactor;t(f)||(f=2);e=d/Math.pow(f,c);c=Rh(f,d,c)}this.i=d;this.o=e;(t(a.enableRotation)?a.enableRotation:1)?(d=a.constrainRotation,d=t(d)&&!0!==d?!1=== +d?Th:na(d)?Uh(d):Th:Vh()):d=Sh;this.g=new Wh(t(a.extent)?Nh(a.extent):Oh,c,d);t(a.resolution)?b.resolution=a.resolution:t(a.zoom)&&(b.resolution=this.a(this.i,a.zoom));b.rotation=t(a.rotation)?a.rotation:0;this.Y(b)}G(U,Of);U.prototype.a=function(a,b,c){return this.g.resolution(a,b||0,c||0)};U.prototype.constrainRotation=function(a,b){return this.g.rotation(a,b||0)};U.prototype.b=function(){return this.s("center")};U.prototype.getCenter=U.prototype.b; +U.prototype.r=function(a){var b=this.b(),c=this.d();return[b[0]-c*a[0]/2,b[1]-c*a[1]/2,b[0]+c*a[0]/2,b[1]+c*a[1]/2]};U.prototype.l=function(){return this.s("projection")};U.prototype.getProjection=U.prototype.l;U.prototype.d=function(){return this.s("resolution")};U.prototype.getResolution=U.prototype.d;function Xh(a,b){return Math.max((a[2]-a[0])/b[0],(a[3]-a[1])/b[1])}function Yh(a){var b=a.i,c=Math.log(b/a.o)/Math.log(2);return function(a){return b/Math.pow(2,a*c)}}U.prototype.n=function(){return this.s("rotation")}; +U.prototype.getRotation=U.prototype.n;function Zh(a){var b=a.i,c=Math.log(b/a.o)/Math.log(2);return function(a){return Math.log(b/a)/Math.log(2)/c}}l=U.prototype;l.N=function(){return this};function $h(a){var b=a.b(),c=a.l(),d=a.d();a=a.n();return{center:b.slice(),projection:t(c)?c:null,resolution:d,rotation:t(a)?a:0}}l.Gf=function(){var a,b=this.d();if(t(b)){var c,d=0;do{c=this.a(this.i,d);if(c==b){a=d;break}++d}while(c>this.o)}return a}; +l.Sd=function(a,b){if(!Ve(a)){this.pa(Pe(a));var c=Xh(a,b),d=this.a(c,0,0);d=w.a&&g.a[v][u].b<=w.c&&g.a[v][u].c>=w.b){u= +!0;break a}u=!1}u?(h in q&&delete q[h],r[h]=g):q[h]=g}b=[r,q];a=b[0];b=b[1];for(var y in this.d)y in a?(this.b[y]||(nh(this.d[y],!0),this.b[y]=!0),delete a[y]):y in b?(this.b[y]&&(nh(this.d[y],!1),delete this.b[y]),delete b[y]):(tc(this.d[y]),delete this.d[y],delete this.b[y]);for(y in a)c=oc("LI"),c.innerHTML=a[y].c,this.k.appendChild(c),this.d[y]=c,this.b[y]=!0;for(y in b)c=oc("LI"),c.innerHTML=b[y].c,nh(c,!1),this.k.appendChild(c),this.d[y]=c;y=!Zb(this.b);this.i!=y&&(nh(this.element,y),this.i= +y)}};function ci(a){a=t(a)?a:{};this.d=oc("UL");var b=lc("DIV",{"class":(t(a.className)?a.className:"ol-logo")+" ol-unselectable"},this.d);ai.call(this,{element:b,target:a.target});this.b=!0;this.i={}}G(ci,ai); +ci.prototype.f=function(a){a=a.b;if(null===a)this.b&&(nh(this.element,!1),this.b=!1);else{var b;a=a.dd;var c=this.i;for(b in c)b in a||(tc(c[b]),delete c[b]);for(var d in a)if(!(d in c)){b=new Image;b.src=d;var e=a[d];""===e?e=b:(e=lc("A",{href:e,target:"_blank"}),e.appendChild(b));b=lc("LI",void 0,e);this.d.appendChild(b);c[d]=b}d=!Zb(a);this.b!=d&&(nh(this.element,d),this.b=d)}};function di(a){a=t(a)?a:{};var b=t(a.className)?a.className:"ol-zoom",c=t(a.delta)?a.delta:1,d=t(a.zoomInLabel)?a.zoomInLabel:"+",e=t(a.zoomOutLabel)?a.zoomOutLabel:"\u2212",f=t(a.zoomOutTipLabel)?a.zoomOutTipLabel:"Zoom out",g=lc("SPAN",{role:"tooltip"},t(a.zoomInTipLabel)?a.zoomInTipLabel:"Zoom in"),d=lc("BUTTON",{"class":b+"-in ol-has-tooltip",name:"ZoomIn",type:"button"},g,d);J(d,["touchend","click"],va(di.prototype.d,c),!1,this);J(d,["mouseout",Mc],function(){this.blur()},!1);f=lc("SPAN",{role:"tooltip", +type:"button"},f);e=lc("BUTTON",{"class":b+"-out ol-has-tooltip",name:"ZoomOut"},f,e);J(e,["touchend","click"],va(di.prototype.d,-c),!1,this);J(e,["mouseout",Mc],function(){this.blur()},!1);b=lc("DIV",b+" ol-unselectable",d,e);ai.call(this,{element:b,target:a.target});this.b=t(a.duration)?a.duration:250}G(di,ai);di.prototype.d=function(a,b){b.M();var c=this.a,d=c.a().N(),e=d.d();t(e)&&(0>1,p=g(c,f[n]),0q?(c=(c-f[-q-2])/(f[-q-1]-f[-q-2]),b+=(-q-2)*d,f=(1-c)*a[b]+c*a[b+d],g=(1-c)*a[b+1]+c*a[b+d+1]):(f=a[b+q*d],g=a[b+q*d+1])}return null!= +e?(e.push(f,g),e):[f,g]}function Ai(a,b,c,d,e,f){if(c==b)return null;if(e>1,ef!=p>f&&e<(n-h)*(f-m)/(p-m)+h&&(g=!g);h=n;m=p}return g}function Ei(a,b,c,d){for(var e=0,f=a[c-d],g=a[c-d+1];br&&(n=(n+p)/2,Gi(a,b,c,d,n,q)&&(x=n,r=w));n=p}isNaN(x)&&(x=e[f]);return t(g)?(g.push(x,q),g):[x,q]}function Ii(a,b,c){var d=0,e,f;e=0;for(f=b.length;ea||0!==this.g&&a<=this.g)return this;var b=a.toString();if(this.f.hasOwnProperty(b))return this.f[b];var c=this.mb(a);if(c.j.lengthe&&(e=f);f=h;g=m}return e}function Si(a,b,c,d,e){var f,g;f=0;for(g=c.length;fh){for(;bu&&(n=p,u=z)}u>e&&(m[(n-b)/d]=1,q+dF&&aaF)&&(0>O&&saO)||(w[g++]=z,w[g++]=D,v=z,y=D);z=E;D=L}}w[g++]=z;w[g++]=D}}h.push(g);b=p}return g};function Xi(a,b){Mi.call(this);this.d=this.h=-1;this.K(a,b)}G(Xi,Mi);l=Xi.prototype;l.J=function(){var a=new Xi(null),b=this.j.slice();Oi(a,this.b,b);a.u();return a};l.la=function(a,b,c,d){if(dthis.n&&(this.a=!0));this.e=c;a=a.map;c=ih(a.b);d=nj(this.targetTouches);d[0]-=c.x;d[1]-=c.y;this.b=a.ea(d);this.a&&(c=a.a().N(),d=$h(c),a.I(),gi(a,c,d.rotation+b,this.b))}; +pj.prototype.f=function(a){if(2>this.targetTouches.length){a=a.map;var b=a.a().N(),c=$h(b);if(this.a){var c=c.rotation,d=this.b,c=b.constrainRotation(c,0);gi(a,b,c,d,250)}return!1}return!0};pj.prototype.h=function(a){return 2<=this.targetTouches.length?(a=a.map,this.b=null,this.e=void 0,this.a=!1,this.i=0,a.I(),!0):!1};function qj(a){a=t(a)?a:{};mj.call(this);this.b=null;this.i=t(a.duration)?a.duration:400;this.a=void 0;this.e=1}G(qj,mj);qj.prototype.g=function(a){var b=1,c=this.targetTouches[0],d=this.targetTouches[1],e=c.clientX-d.clientX,c=c.clientY-d.clientY,e=Math.sqrt(e*e+c*c);t(this.a)&&(b=this.a/e);this.a=e;1!=b&&(this.e=b);a=a.map;var e=a.a().N(),c=$h(e),d=ih(a.b),f=nj(this.targetTouches);f[0]-=d.x;f[1]-=d.y;this.b=a.ea(f);a.I();ii(a,e,c.resolution*b,this.b)}; +qj.prototype.f=function(a){if(2>this.targetTouches.length){a=a.map;var b=a.a().N(),c=$h(b).resolution,d=this.b,e=this.i,c=b.a(c,0,this.e-1);ii(a,b,c,d,e);return!1}return!0};qj.prototype.h=function(a){return 2<=this.targetTouches.length?(a=a.map,this.b=null,this.a=void 0,this.e=1,a.I(),!0):!1};function rj(a){a=t(a)?a:{};var b=new Q,c=new Xf(-0.005,0.05,100);(t(a.altShiftDragRotate)?a.altShiftDragRotate:1)&&b.push(new si);(t(a.doubleClickZoom)?a.doubleClickZoom:1)&&b.push(new ji({delta:a.zoomDelta,duration:a.zoomDuration}));(t(a.touchPan)?a.touchPan:1)&&b.push(new oj({kinetic:c}));(t(a.touchRotate)?a.touchRotate:1)&&b.push(new pj);(t(a.touchZoom)?a.touchZoom:1)&&b.push(new qj({duration:a.zoomDuration}));(t(a.dragPan)?a.dragPan:1)&&b.push(new ri({kinetic:c}));if(t(a.keyboard)?a.keyboard: +1)b.push(new jj),b.push(new kj({delta:a.zoomDelta,duration:a.zoomDuration}));(t(a.mouseWheelZoom)?a.mouseWheelZoom:1)&&b.push(new lj({duration:a.zoomDuration}));(t(a.shiftDragZoom)?a.shiftDragZoom:1)&&b.push(new ij);return b};function sj(a){var b=t(a)?a:{};a=bc(b);delete a.layers;b=b.layers;T.call(this,a);this.a=null;J(this,Fd("layers"),this.Uf,!1,this);t(b)?ia(b)&&(b=new Q(Ra(b))):b=new Q;this.d(b)}G(sj,T);l=sj.prototype;l.de=function(){this.b()&&this.u()}; +l.Uf=function(){null!==this.a&&(Ka(Xb(this.a),K),this.a=null);var a=this.eb();if(null!=a){this.a={add:J(a,"add",this.Tf,!1,this),remove:J(a,"remove",this.Vf,!1,this)};var a=a.a,b,c,d;b=0;for(c=a.length;b=this.minZoom;){if(b.call(c,a,Fj(this,e,a,d)))return!0;--a}return!1};l.vf=k("minZoom"); +l.Wb=function(a){return null===this.d?this.f[a]:this.d};l.Ya=k("a");l.rc=function(a,b,c){return a.aa.d&&(a.d=d.d),d.ba.c&&(a.c=d.c)):a[b][c]=d:(a[b]={},a[b][c]=d)}function Rj(a,b,c,d){return function(e,f,g){e=b.nb(e,f,g,c,d);return a(e)?e:null}}function Sj(a,b,c){return[b*(Math.round(a[0]/b)+c[0]%2/2),b*(Math.round(a[1]/b)+c[1]%2/2)]} +function Tj(a,b,c,d,e,f,g,h,m,n){var p=A(b).toString();p in a.Ab||(a.Ab[p]={});var r=a.Ab[p];a=a.Uh;var q=c.minZoom,u,x,w,v,y,z;t(h)||(h=0);for(z=g;z>=q;--z)for(x=Fj(c,f,z),w=c.a[z],v=x.a;v<=x.d;++v)for(y=x.b;y<=x.c;++y)g-z<=h?(u=b.nb(z,v,y,d,e),0==u.state&&(r[u.a.toString()]=!0,u.d()in a.b||Gf(a,[u,p,Ij(c,u.a),w])),t(m)&&m.call(n,u)):b.Ie(z,v,y)};function Uj(a){a=t(a)?a:{};this.b=t(a.anchor)?a.anchor:[0.5,0.5];this.c=t(a.anchorOrigin)?a.anchorOrigin:"top-left";this.d=t(a.anchorXUnits)?a.anchorXUnits:"fraction";this.g=t(a.anchorYUnits)?a.anchorYUnits:"fraction";var b=a.src,c=t(a.crossOrigin)?a.crossOrigin:null,d=Vj.Ka(),e;e=c+":"+b;e=e in d.a?d.a[e]:null;null===e&&(e=new Wj(b,c),d.a[c+":"+b]=e,++d.c);this.a=e;this.h=t(a.size)?a.size:null;ke.call(this,{opacity:t(a.opacity)?a.opacity:1,rotation:t(a.rotation)?a.rotation:0,scale:t(a.scale)?a.scale: +1,Fe:void 0,rotateWithView:t(a.rotateWithView)?a.rotateWithView:!1})}G(Uj,ke);l=Uj.prototype;l.Pb=function(){var a=this.b,b=this.vb();if("fraction"==this.d||"fraction"==this.g){if(null===b)return null;a=this.b.slice();"fraction"==this.d&&(a[0]*=b[0]);"fraction"==this.g&&(a[1]*=b[1])}if("top-left"!=this.c){if(null===b)return null;a===this.b&&(a=this.b.slice());if("top-right"==this.c||"bottom-right"==this.c)a[0]=-a[0]+b[0];if("bottom-left"==this.c||"bottom-right"==this.c)a[1]+=b[1]}return a};l.Vb=function(){return this.a.a}; +l.re=function(){return this.a.c};l.qe=function(){var a=this.a;if(null===a.d)if(a.h){var b=oc("CANVAS"),c=a.e[0],d=a.e[1];b.width=c;b.height=d;b.getContext("2d").fillRect(0,0,c,d);a.d=b}else a.d=a.a;return a.d};l.gh=function(){return this.a.f};l.vb=function(){return null===this.h?this.a.e:this.h};l.ge=function(a,b){return J(this.a,"change",a,!1,b)};l.se=function(){var a=this.a;if(0==a.c){a.c=1;a.b=[ed(a.a,"error",a.g,!1,a),ed(a.a,"load",a.i,!1,a)];try{a.a.src=a.f}catch(b){a.g()}}}; +l.He=function(a,b){fd(this.a,"change",a,!1,b)};function Wj(a,b){wd.call(this);this.d=null;this.a=new Image;null!==b&&(this.a.crossOrigin=b);this.b=null;this.c=0;this.e=null;this.f=a;this.h=!1}G(Wj,wd);Wj.prototype.g=function(){this.c=3;Ka(this.b,K);this.b=null;N(this,"change")}; +Wj.prototype.i=function(){this.c=2;this.e=[this.a.width,this.a.height];Ka(this.b,K);this.b=null;var a=oc("CANVAS");a.width=1;a.height=1;a=a.getContext("2d");a.drawImage(this.a,0,0);try{a.getImageData(0,0,1,1)}catch(b){this.h=!0}N(this,"change")};function Vj(){this.a={};this.c=0;this.b=32}ga(Vj);Vj.prototype.clear=function(){this.a={};this.c=0};function Xj(a,b,c,d,e,f,g,h){Vd(a);0===b&&0===c||Xd(a,b,c);1==d&&1==e||Yd(a,d,e);0!==f&&Zd(a,f);0===g&&0===h||Xd(a,g,h);return a}function Yj(a,b){return a[0]==b[0]&&a[1]==b[1]&&a[4]==b[4]&&a[5]==b[5]&&a[12]==b[12]&&a[13]==b[13]}function Zj(a,b,c){var d=a[1],e=a[5],f=a[13],g=b[0];b=b[1];c[0]=a[0]*g+a[4]*b+a[12];c[1]=d*g+e*b+f;return c};function ak(a,b){Bc.call(this);this.f=b;this.b={}}G(ak,Bc); +function bk(a){var b=a.w,c=a.Md;Xj(c,a.size[0]/2,a.size[1]/2,1/b.resolution,-1/b.resolution,-b.rotation,-b.center[0],-b.center[1]);a=a.ue;var b=c[0],d=c[1],e=c[2],f=c[3],g=c[4],h=c[5],m=c[6],n=c[7],p=c[8],r=c[9],q=c[10],u=c[11],x=c[12],w=c[13],v=c[14],c=c[15],y=b*h-d*g,z=b*m-e*g,D=b*n-f*g,E=d*m-e*h,L=d*n-f*h,F=e*n-f*m,O=p*w-r*x,aa=p*v-q*x,sa=p*c-u*x,ma=r*v-q*w,M=r*c-u*w,ka=q*c-u*v,ea=y*ka-z*M+D*ma+E*sa-L*aa+F*O;0!=ea&&(ea=1/ea,a[0]=(h*ka-m*M+n*ma)*ea,a[1]=(-d*ka+e*M-f*ma)*ea,a[2]=(w*F-v*L+c*E)*ea, +a[3]=(-r*F+q*L-u*E)*ea,a[4]=(-g*ka+m*sa-n*aa)*ea,a[5]=(b*ka-e*sa+f*aa)*ea,a[6]=(-x*F+v*D-c*z)*ea,a[7]=(p*F-q*D+u*z)*ea,a[8]=(g*M-h*sa+n*O)*ea,a[9]=(-b*M+d*sa-f*O)*ea,a[10]=(x*L-w*D+c*y)*ea,a[11]=(-p*L+r*D-u*y)*ea,a[12]=(-g*ma+h*aa-m*O)*ea,a[13]=(b*ma-d*aa+e*O)*ea,a[14]=(-x*E+w*z-v*y)*ea,a[15]=(p*E-r*z+q*y)*ea)}ak.prototype.gc=function(a){return new Lj(this,a)};ak.prototype.A=function(){Vb(this.b,function(a){Fc(a)});ak.F.A.call(this)}; +function ck(a,b){var c=A(b).toString();if(c in a.b)return a.b[c];var d=a.gc(b);return a.b[c]=d}ak.prototype.Ec=fa;ak.prototype.r=function(a,b){for(var c in this.b)if(!(null!==b&&c in b.$)){var d=this.b[c];delete this.b[c];Fc(d)}};function dk(a){a.Pa.push(function(){var a=Vj.Ka();if(a.c>a.b){var c=0,d,e;for(d in a.a)e=a.a[d],0!==(c++&3)||id(e)||(delete a.a[d],--a.c)}})}function ek(a,b){for(var c in a.b)if(!(c in b.$)){b.Pa.push(B(a.r,a));break}};function fk(a){Nf.call(this,a)}G(fk,Nf);function gk(a){Nf.call(this,a)}G(gk,Nf);gk.prototype.d=function(){return this.s("preload")};gk.prototype.getPreload=gk.prototype.d;gk.prototype.g=function(a){this.t("preload",a)};gk.prototype.setPreload=gk.prototype.g;gk.prototype.f=function(){return this.s("useInterimTilesOnError")};gk.prototype.getUseInterimTilesOnError=gk.prototype.f;gk.prototype.l=function(a){this.t("useInterimTilesOnError",a)};gk.prototype.setUseInterimTilesOnError=gk.prototype.l;function hk(a){a=t(a)?a:{};var b=bc(a);delete b.style;Nf.call(this,b);this.O=null;this.f=void 0;t(a.style)&&this.g(a.style)}G(hk,Nf);hk.prototype.r=function(){return this.s("renderGeometryFunctions")};hk.prototype.getRenderGeometryFunctions=hk.prototype.r;hk.prototype.Sa=k("O");hk.prototype.Ta=k("f");hk.prototype.Nc=function(a){this.t("renderGeometryFunctions",a)};hk.prototype.setRenderGeometryFunctions=hk.prototype.Nc;hk.prototype.g=function(a){this.O=a;this.f=qe(a);this.u()};function ik(a,b,c,d,e){this.S={};this.b=a;this.B=b;this.g=c;this.f=d;this.jb=e;this.h=this.a=this.c=this.ja=this.U=this.O=null;this.o=this.V=this.r=this.ca=0;this.ua=!1;this.i=this.Ia=0;this.Sa=!1;this.Ta=0;this.d="";this.l=this.q=0;this.G=this.n=this.k=null;this.e=[];this.Ua=Rd()} +function jk(a,b){if(null!==a.h){var c=Li(b,2,a.f,a.e),d=a.b,e=a.Ua,f=d.globalAlpha;1!=a.o&&(d.globalAlpha=f*a.o);var g=a.Ia;a.ua&&(g+=a.jb);var h,m;h=0;for(m=c.length;hx&&(z=z|4);yw&&(z|=2);0===z&&(z=1);u=z;u!==q?(p&&(a.coordinates[g++]=m[0],a.coordinates[g++]=m[1]),a.coordinates[g++]=n[0],a.coordinates[g++]=n[1],p=!1):1===u?(a.coordinates[g++]=n[0],a.coordinates[g++]=n[1],p=!1):p=!0;m[0]=n[0];m[1]=n[1];q=u}f&&(a.coordinates[g++]=b[c],a.coordinates[g++]=b[c+ +1]);return g}function Ek(a,b){a.o=[0,b,0];a.c.push(a.o);a.q=[0,b,0];a.a.push(a.q)} +function Fk(a,b,c,d,e,f,g,h){var m;Yj(d,a.B)?m=a.r:(m=Li(a.coordinates,2,d,a.r),Ud(a.B,d));d=0;var n=g.length,p=0,r;for(a=a.O;da||0!==this.g&&a=a;--b)Me(f,d[b].extent),g+=Te(f)+Re(f);return g}l=ul.prototype; +l.clear=function(){var a=this.a;a.extent=Ke(this.a.extent);a.height=1;a.a.length=0;a.value=null;$b(this.c)};l.forEach=function(a,b){return wl(this.a,a,b)};function wl(a,b,c){for(var d=[a],e,f,g;0a.b){g=a;h=e;f=c;d=h[f];p=g;m=d;n=vl(p,m,ql); +p=vl(p,m,rl);n=h.maxResolution||ec;++c)d[c]=b[c].toFixed(6);c=d.join(",")}else c=b.join(",");Pl(a,"matrix3d("+c+")")}else if(Nl()){d=[b[0],b[1],b[4],b[5],b[12],b[13]];if(t(6)){var e=Array(6);for(c=0;6>c;++c)e[c]=d[c].toFixed(6);c=e.join(",")}else c=d.join(",");Pl(a,"matrix("+c+")")}else a.style.left=Math.round(b[12])+"px",a.style.top=Math.round(b[13])+"px"};function Rl(a,b,c){Lj.call(this,a,b);this.target=c}G(Rl,Lj);function Sl(a,b){var c=oc("DIV");c.style.position="absolute";Rl.call(this,a,b,c);this.c=null;this.e=Td()}G(Sl,Rl);Sl.prototype.f=function(a,b,c,d){var e=this.a;return e.a.k(b.extent,b.w.resolution,b.w.rotation,a,function(a){return c.call(d,a,e)})}; +Sl.prototype.b=function(a){var b=a.w,c=b.center,d=b.resolution,e=b.rotation,f=this.c,g=this.a.a,h=a.P;h[0]||h[1]||(b=g.ub(a.extent,d,a.pixelRatio,b.projection),null!==b&&(h=b.state,0==h?(ed(b,"change",this.l,!1,this),Bj(b)):2==h&&(f=b)));if(null!==f){var h=f.p(),m=f.d,b=Rd();Xj(b,a.size[0]/2,a.size[1]/2,m/d,m/d,e,(h[0]-c[0])/m,(c[1]-h[3])/m);f!=this.c&&(c=f.e(this),c.style.maxWidth="none",c.style.position="absolute",qc(this.target),this.target.appendChild(c),this.c=f);Yj(b,this.e)||(Ql(this.target, +b),Ud(this.e,b));Oj(a.attributions,f.g);Pj(a,g)}};function Tl(a,b){var c=oc("DIV");c.style.position="absolute";Rl.call(this,a,b,c);this.e=!0;this.h=1;this.g=0;this.c={}}G(Tl,Rl); +Tl.prototype.b=function(a,b){if(b.visible){var c=a.pixelRatio,d=a.w,e=d.projection,f=this.a,g=f.a,h=Kj(g,e),m=g.qc(),n=Ph(h.a,d.resolution,0),p=h.a[n],r=d.center,q;p==d.resolution?(r=Sj(r,p,a.size),q=Qe(r,p,d.rotation,a.size)):q=a.extent;var p=Gj(h,q,p),u={};u[n]={};var x=B(g.Uc,g,u,Rj(function(a){return null!==a&&2==a.state},g,c,e)),w=f.f();t(w)||(w=!0);var v=De(),y=new db(0,0,0,0),z,D,E,L;for(E=p.a;E<=p.d;++E)for(L=p.b;L<=p.c;++L)z=g.nb(n,E,L,c,e),D=z.state,2==D?u[n][z.a.toString()]=z:4==D||3== +D&&!w||(D=h.oc(z.a,x,null,y,v),D||(z=h.rc(z.a,y,v),null===z||x(n+1,z)));var F;if(this.g!=g.c){for(F in this.c)w=this.c[+F],tc(w.target);this.c={};this.g=g.c}v=La(Yb(u),Number);Va(v);var x={},O;E=0;for(L=v.length;EF&&sc(this.target,w.target,0)}else a.P[0]||a.P[1]||Yl(w,q,y);else tc(w.target),delete this.c[F];b.opacity!=this.h&&(mh(this.target,b.opacity),this.h=b.opacity);b.visible&&!this.e&&(nh(this.target,!0),this.e=!0);Qj(a.bc,g,n,p);Tj(a,g,h,c,e,q,n,f.d());Nj(a,g);Pj(a,g)}else this.e&&(nh(this.target,!1),this.e=!1)}; +function Ul(a,b){this.target=oc("DIV");this.target.style.position="absolute";this.target.style.width="100%";this.target.style.height="100%";this.e=a;this.b=b;this.f=Se(Ej(a,b));this.g=a.a[b.a];this.c={};this.a=null;this.d=Td()} +function Vl(a,b,c){var d=b.a,e=d.toString();if(!(e in a.c)){var f=a.e.na(d.a),g=b.b(a),h=g.style;h.maxWidth="none";var m,n;0c)break;if(bb&&(-1==e||h=n.minResolution)&&d.push(m);g=0;for(h=d.length;g=b[0]||0>=b[1])return!1;a=a.a();return t(a)&&a.gd()?!0:!1}l.Oh=function(){var a=this.q;Hg(a);a.Od()};l.I=function(){null!=this.q.X||this.q.start()};l.Ih=function(a){if(t(this.k.remove(a)))return a}; +l.Kh=function(a){var b;t(this.i.remove(a))&&(b=a);return b};l.Lh=function(a){return this.Xa().eb().remove(a)};l.Mh=function(a){if(t(this.l.remove(a)))return a}; +l.Nh=function(a){var b,c,d,e=this.g();b=this.a();var f=t(b)?this.a().N():void 0,g=null;if(t(e)&&0c?(e="\u2032",b*=60):e="\u00b0":"imperial"==f?0.9144> +c?(e="in",b/=0.0254):1609.344>c?(e="ft",b/=0.3048):(e="mi",b/=1609.344):"nautical"==f?(b/=1852,e="nm"):"metric"==f?1>c?(e="mm",b*=1E3):1E3>c?e="m":(e="km",b/=1E3):"us"==f&&(0.9144>c?(e="in",b*=39.37):1609.344>c?(e="ft",b/=0.30480061):(e="mi",b/=1609.3472));for(var f=3*Math.floor(Math.log(a.k*b)/Math.log(10)),g,h;;){g=Zm[f%3]*Math.pow(10,Math.floor(f/3));h=Math.round(g/b);if(h>=a.k)break;++f}g=g+e;a.q!=g&&(a.i.innerHTML=g,a.q=g);a.B!=h&&(a.i.style.width=h+"px",a.B=h);a.d||(nh(a.l,!0),a.d=!0)}};function an(a){Bc.call(this);this.c=a;this.a={}}G(an,Bc);var bn=[];an.prototype.ga=function(a,b,c,d,e){ia(b)||(bn[0]=b,b=bn);for(var f=0;fthis.ee)if(N(this,new hn("start",this,a.clientX,a.clientY,a)))this.bb=!0;else{this.ca||this.lc(a);return}}c=ln(this,b,c);b=c.x;c=c.y;this.bb&&N(this,new hn("beforedrag",this,a.clientX,a.clientY,a,b,c))&&(mn(this,a,b,c),a.M())}}; +function ln(a,b,c){var d=wc(ec(a.b));b+=d.x-a.e.x;c+=d.y-a.e.y;a.e=d;a.ob+=b;a.pb+=c;b=jn(a,a.ob);a=kn(a,a.pb);return new Tb(b,a)}l.Bh=function(a){var b=ln(this,0,0);a.clientX=this.clientX;a.clientY=this.clientY;mn(this,a,b.x,b.y)};function mn(a,b,c,d){a.vd&&fn(a)?a.target.style.right=c+"px":a.target.style.left=c+"px";a.target.style.top=d+"px";N(a,new hn("drag",a,b.clientX,b.clientY,b,c,d))} +function jn(a,b){var c=a.c,d=isNaN(c.left)?null:c.left,c=isNaN(c.width)?0:c.width;return Math.min(null!=d?d+c:Infinity,Math.max(null!=d?d:-Infinity,b))}function kn(a,b){var c=a.c,d=isNaN(c.top)?null:c.top,c=isNaN(c.height)?0:c.height;return Math.min(null!=d?d+c:Infinity,Math.max(null!=d?d:-Infinity,b))}function hn(a,b,c,d,e,f,g,h){Gc.call(this,a);this.clientX=c;this.clientY=d;this.d=e;this.left=t(f)?f:b.ob;this.top=t(g)?g:b.pb;this.b=b;this.a=!!h}G(hn,Gc);function nn(a){a=t(a)?a:{};this.b=void 0;this.i=on;this.k=!1;var b=t(a.className)?a.className:"ol-zoomslider";a=lc("DIV",[b+"-thumb","ol-unselectable"]);b=lc("DIV",[b,"ol-unselectable"],a);this.d=new dn(a);Ec(this,this.d);J(this.d,["drag","end"],this.n,void 0,this);J(b,"click",this.l,!1,this);J(a,"click",Hc);ai.call(this,{element:b})}G(nn,ai);var on=0;nn.prototype.setMap=function(a){nn.F.setMap.call(this,a);null===a||a.I()}; +nn.prototype.f=function(a){if(null!==a.b){if(!this.k){var b=this.element,c=uc(b),b=ph(b),d;d=gh(c);var e=kh(c);d=new $g(d.x,d.y,e.width,e.height);var e=rh(c,"margin"),f=sh(c),c=b.width-e.left-e.right-f.left-f.right-d.width;d=b.height-e.top-e.bottom-f.top-f.bottom-d.height;b.width>b.height?(this.i=1,b=new $g(0,0,c,0)):(this.i=on,b=new $g(0,0,0,d));this.d.c=b||new $g(NaN,NaN,NaN,NaN);this.k=!0}a=a.b.w.resolution;a!==this.b&&(this.b=a,a=-1*(Zh(this.a.a().N())(a)-1),b=this.d,c=uc(this.element),1==this.i? +ch(c,b.c.left+b.c.width*a):ch(c,b.c.left,b.c.top+b.c.height*a))}};nn.prototype.l=function(a){var b=this.a,c=b.a().N();a=pn(this,qn(this,a.Wd,a.Xd));b.ka(Wf({resolution:a,duration:200,easing:Qf}));a=c.a(a);c.f(a)};function qn(a,b,c){var d=a.d.c,e=0;return e=1===a.i?(b-d.left)/d.width:(c-d.top)/d.height}function pn(a,b){b=-1*(Qb(b,0,1)-1);return Yh(a.a.a().N())(b)} +nn.prototype.n=function(a){var b=this.a,c=b.a().N();"drag"===a.type?(a=pn(this,qn(this,a.left,a.top)),a!==this.b&&(this.b=a,c.f(a))):(b.ka(Wf({resolution:this.b,duration:200,easing:Qf})),a=c.a(this.b),c.f(a))};function rn(a){a=t(a)?a:{};this.b=t(a.extent)?a.extent:null;var b=t(a.className)?a.className:"ol-zoom-extent",c=lc("SPAN",{role:"tooltip"},t(a.tipLabel)?a.tipLabel:"Fit to extent"),b=lc("DIV",{"class":b+" ol-unselectable"}),d=lc("BUTTON",{"class":"ol-has-tooltip"});d.appendChild(c);b.appendChild(d);J(d,["touchend","click"],this.d,!1,this);J(d,["mouseout",Mc],function(){this.blur()},!1);ai.call(this,{element:b,target:a.target})}G(rn,ai); +rn.prototype.d=function(a){a.M();a=this.a;var b=a.a().N(),c=null===this.b?b.l().p():this.b;b.Sd(c,a.g())};function sn(a){P.call(this);this.a=a;J(this.a,["change","input"],this.k,!1,this);J(this,Fd("value"),this.l,!1,this);J(this,Fd("checked"),this.i,!1,this)}G(sn,P);sn.prototype.b=function(){return this.s("checked")};sn.prototype.getChecked=sn.prototype.b;sn.prototype.d=function(){return this.s("value")};sn.prototype.getValue=sn.prototype.d;sn.prototype.g=function(a){this.t("value",a)};sn.prototype.setValue=sn.prototype.g;sn.prototype.f=function(a){this.t("checked",a)};sn.prototype.setChecked=sn.prototype.f; +sn.prototype.k=function(){var a=this.a;"checkbox"===a.type||"radio"===a.type?this.f(a.checked):this.g(a.value)};sn.prototype.i=function(){this.a.checked=this.b()};sn.prototype.l=function(){this.a.value=this.d()};function tn(){};function un(a){if("undefined"!=typeof DOMParser)return(new DOMParser).parseFromString(a,"application/xml");if("undefined"!=typeof ActiveXObject){var b=vn();b.loadXML(a);return b}throw Error("Your browser does not support loading xml documents");}function vn(){var a=new ActiveXObject("MSXML2.DOMDocument");if(a){a.resolveExternals=!1;a.validateOnParse=!1;try{a.setProperty("ProhibitDTD",!0),a.setProperty("MaxXMLSize",2048),a.setProperty("MaxElementDepth",256)}catch(b){}}return a};var wn;a:if(document.implementation&&document.implementation.createDocument)wn=document.implementation.createDocument("","",null);else{if("undefined"!=typeof ActiveXObject){var xn=vn();if(xn){wn=xn;break a}}throw Error("Your browser does not support creating new documents");}var yn=wn;function zn(a,b){return yn.createElementNS(a,b)}function An(a,b){null===a&&(a="");return yn.createNode(1,b,a)}var Bn=document.implementation&&document.implementation.createDocument?zn:An; +function Cn(a){return Dn(a,!1,[]).join("")}function Dn(a,b,c){if(4==a.nodeType||3==a.nodeType)b?c.push(String(a.nodeValue).replace(/(\r\n|\r|\n)/g,"")):c.push(a.nodeValue);else for(a=a.firstChild;null!==a;a=a.nextSibling)Dn(a,b,c);return c}function En(a){return a.localName}function Fn(a){var b=a.localName;return t(b)?b:a.baseName}var Gn=H?Fn:En;function Hn(a){return a instanceof Document}function In(a){return pa(a)&&9==a.nodeType}var Jn=H?In:Hn;function Kn(a){return a instanceof Node} +function Ln(a){return pa(a)&&t(a.nodeType)}var Mn=H?Ln:Kn;function Nn(a,b,c,d){a.setAttributeNS(b,c,d)}function On(a,b,c,d){null===b?a.setAttribute(c,d):(b=a.ownerDocument.createNode(2,c,b),b.nodeValue=d,a.setAttributeNode(b))}var Pn=document.implementation&&document.implementation.createDocument?Nn:On;function Qn(a){return(new DOMParser).parseFromString(a,"application/xml")}function Rn(a,b){return function(c,d){var e=a.call(b,c,d);t(e)&&Sa(d[d.length-1],e)}} +function Sn(a,b){return function(c,d){var e=a.call(b,c,d);t(e)&&d[d.length-1].push(e)}}function Tn(a){return function(b,c){var d=a.call(void 0,b,c);t(d)&&(c[c.length-1]=d)}}function W(a,b){return function(c,d){var e=a.call(void 0,c,d);t(e)&&(d[d.length-1][t(b)?b:c.localName]=e)}}function X(a){return function(b,c,d){a.call(void 0,b,c,d);d[d.length-1].node.appendChild(b)}} +function Un(a){var b,c;return function(d,e,f){if(!t(b)){b={};var g={};g[d.localName]=a;b[d.namespaceURI]=g;c=Vn(d.localName)}Wn(b,c,e,f)}}function Vn(a){return function(b,c,d){b=c[c.length-1].node;c=a;t(c)||(c=d);d=void 0;t(void 0)||(d=b.namespaceURI);return Bn(d,c)}}var Xn=Vn();function Yn(a,b){for(var c=b.length,d=Array(c),e=0;ea.o,f=[a.b[0][0],a.b[0][a.b[0].length-2]]);if(e)for(var d=b.map,e=0,g=f.length;e=Math.sqrt(Math.min(b,c))&&(h=b>c?g[1]:g[0]);Kq(a,h);c={};c[A(g)]=!0;b=1;for(m=f.length;bg&&++q.index}p= +{T:[c[0],b],feature:d,geometry:e,depth:f,index:g};Bl(h,Ce(p.T),p);this.b.push([p,1]);c={T:[b,c[1]],feature:d,geometry:e,depth:f,index:g+1};Bl(h,Ce(c.T),c);this.b.push([c,0])};function Lq(a){fi.call(this);this.e=t(a.condition)?a.condition:li;this.d=t(a.addCondition)?a.addCondition:ni;var b;if(t(a.layerFilter))b=a.layerFilter;else if(t(a.layer)){var c=a.layer;b=function(a){return a===c}}else if(t(a.layers)){var d=a.layers;b=function(a){return-1!=Ja(d,a)}}else b=pd;this.b=b;this.a=new se({style:a.style})}G(Lq,fi);Lq.prototype.f=function(){return this.a.a}; +Lq.prototype.qa=function(a){if(!this.e(a))return!0;var b=this.d(a),c=a.map,d=this.a.a;b?c.hd(a.pixel,function(a){-1==Ja(d.a,a)&&d.push(a)},void 0,this.b):(a=c.hd(a.pixel,function(a){return a},void 0,this.b),t(a)?1==d.Na()?d.Td(0)!==a&&d.Ae(0,a):(1!=d.Na()&&d.clear(),d.push(a)):0!==d.Na()&&d.clear());return!1};Lq.prototype.setMap=function(a){Lq.F.setMap.call(this,a);this.a.setMap(a)};function Mq(a){var b=t(a)?a:{};hk.call(this,b);this.d=null;J(this,Fd("gradient"),this.ua,!1,this);this.V(t(b.gradient)?b.gradient:Nq);a=t(b.radius)?b.radius:8;var c=t(b.blur)?b.blur:15,d=t(b.Sh)?b.Sh:250,b=oc("CANVAS"),e=b.getContext("2d"),f=a+c+1;b.width=b.height=2*f;e.shadowOffsetX=e.shadowOffsetY=d;e.shadowBlur=c;e.shadowColor="#000";e.beginPath();c=f-d;e.arc(c,c,a,0,2*Math.PI,!0);e.fill();a=new Uj({src:b.toDataURL()});this.g(new ne({image:a}));J(this,"render",this.Ia,!1,this)}G(Mq,hk); +var Nq=["#00f","#0ff","#0f0","#ff0","#f00"];Mq.prototype.l=function(){return this.s("gradient")};Mq.prototype.getGradient=Mq.prototype.l;Mq.prototype.ua=function(){var a=this.l(),b=oc("CANVAS"),c=b.getContext("2d");b.width=1;b.height=256;for(var b=c.createLinearGradient(0,0,1,256),d=1/a.length,e=0,f=a.length;ea.d&&!(c=a.a.ib,d=c.a.a.toString(),d in b&&b[d].contains(c.a));)a.pop()};function vr(a){Jj.call(this,{attributions:a.attributions,extent:a.extent,logo:a.logo,opaque:a.opaque,projection:a.projection,tileGrid:a.tileGrid});this.tileUrlFunction=t(a.tileUrlFunction)?a.tileUrlFunction:qr;this.crossOrigin=t(a.crossOrigin)?a.crossOrigin:null;this.b=new tr;this.tileLoadFunction=t(a.tileLoadFunction)?a.tileLoadFunction:wr;this.Hc=t(a.Hc)?a.Hc:Cf}G(vr,Jj);function wr(a,b){a.b().src=b}l=vr.prototype;l.kd=function(){return this.b.wa()>this.b.d};l.oe=function(a){ur(this.b,a)}; +l.nb=function(a,b,c,d,e){var f=this.La(a,b,c);if(Dm(this.b,f))return Gm(this.b,f);a=new $a(a,b,c);d=this.tileUrlFunction(a,d,e);d=new this.Hc(a,t(d)?0:4,t(d)?d:"",this.crossOrigin,this.tileLoadFunction);Hm(this.b,f,d);return d};l.$b=function(a){this.b.clear();this.tileUrlFunction=a;this.u()};l.Ie=function(a,b,c){a=this.La(a,b,c);Dm(this.b,a)&&Gm(this.b,a)};function xr(a){var b=Array(a.maxZoom+1),c,d=2*vj/256;for(c=0;c<=a.maxZoom;++c)b[c]=d/Math.pow(2,c);Cj.call(this,{minZoom:a.minZoom,origin:[-vj,vj],resolutions:b,tileSize:256})}G(xr,Cj); +xr.prototype.c=function(a){a=t(a)?a:{};var b=this.minZoom,c=this.maxZoom,d=t(a.$h)?a.$h:!0,e=new $a(0,0,0),f=null;if(t(a.extent)){var f=Array(c+1),g;for(g=0;g<=c;++g)f[g]=gr||p<=r)return null;a=a.y;return a<-p||-1=this.minZoom;--a)if(d.a=d.d>>=1,d.b=d.c>>=1,b.call(c,a,d))return!0;return!1};function yr(a){vr.call(this,{crossOrigin:"anonymous",opaque:!0,projection:xf("EPSG:3857"),state:0,tileLoadFunction:a.tileLoadFunction});this.a=t(a.culture)?a.culture:"en-us";var b=new mg("//dev.virtualearth.net/REST/v1/Imagery/Metadata/"+a.imagerySet),b=new ir(b),c={include:"ImageryProviders",key:a.key};a=B(this.e,this);var d=c||null,c="_"+(jr++).toString(36)+wa().toString(36);s._callbacks_||(s._callbacks_={});var e=b.c.J();if(d)for(var f in d)d.hasOwnProperty&&!d.hasOwnProperty(f)||zg(e,f,d[f]); +a&&(s._callbacks_[c]=mr(c,a),zg(e,b.a,"_callbacks_."+c));f=br(e.toString(),{timeout:b.gb,Kd:!0});mq(f,null,kr(c),void 0)}G(yr,vr);var zr=new fb({html:'\x3ca class\x3d"ol-attribution-bing-tos" target\x3d"_blank" href\x3d"http://www.microsoft.com/maps/product/terms.html"\x3eTerms of Use\x3c/a\x3e'}); +yr.prototype.e=function(a){if(200!=a.statusCode||"OK"!=a.statusDescription||"ValidCredentials"!=a.authenticationResultCode||1!=a.resourceSets.length||1!=a.resourceSets[0].resources.length)Lf(this,2);else{var b=a.brandLogoUri,c=a.resourceSets[0].resources[0],d=new xr({minZoom:c.zoomMin,maxZoom:c.zoomMax,tileSize:c.imageWidth});this.tileGrid=d;var e=this.a;this.tileUrlFunction=rr(d.c(),pr(La(c.imageUrlSubdomains,function(a){var b=c.imageUrl.replace("{subdomain}",a).replace("{culture}",e);return function(a){return null=== +a?void 0:b.replace("{quadkey}",cb(a))}})));if(c.imageryProviders){var f=ff(xf("EPSG:4326"),this.l);a=La(c.imageryProviders,function(a){var b=a.attribution,c={};Ka(a.coverageAreas,function(a){var b=a.zoomMin,e=a.zoomMax;a=a.bbox;a=Ze([a[1],a[0],a[3],a[2]],f);var g,h;for(g=b;g<=e;++g)h=g.toString(),b=Fj(d,a,g),h in c?c[h].push(b):c[h]=[b]});return new fb({html:b,tileRanges:c})});a.push(zr);this.d=a}this.q=b;Lf(this,1)}};function Ar(a,b,c){if(oa(a))c&&(a=B(a,c));else if(a&&"function"==typeof a.handleEvent)a=B(a.handleEvent,a);else throw Error("Invalid listener argument");return 2147483647h*g?f*e/(h*n):g*e/(m*n);c=Pe(c);d={OPERATION:this.B?"GETDYNAMICMAPOVERLAYIMAGE":"GETMAPIMAGE",VERSION:"2.0.0",LOCALE:"en",CLIENTAGENT:"ol.source.MapGuide source",CLIP:"1",SETDISPLAYDPI:this.a,SETDISPLAYWIDTH:Math.round(d[0]),SETDISPLAYHEIGHT:Math.round(d[1]),SETVIEWSCALE:e,SETVIEWCENTERX:c[0],SETVIEWCENTERY:c[1]};dc(d,b);return jg(lg([a],d))};function ls(a){var b=a.projection||xf("EPSG:3857"),c=new xr({maxZoom:t(a.maxZoom)?a.maxZoom:18});vr.call(this,{attributions:a.attributions,crossOrigin:a.crossOrigin,extent:a.extent,logo:a.logo,projection:b,tileGrid:c,tileLoadFunction:a.tileLoadFunction,tileUrlFunction:qr});this.e=c.c({extent:a.extent});t(a.tileUrlFunction)?this.$b(a.tileUrlFunction):t(a.urls)?this.$b(or(a.urls)):t(a.url)&&this.a(a.url)}G(ls,vr);ls.prototype.$b=function(a){ls.F.$b.call(this,rr(this.e,a))};ls.prototype.a=function(a){this.$b(or(sr(a)))};function ms(a){a=t(a)?a:{};ls.call(this,{attributions:t(a.attributions)?a.attributions:ns,crossOrigin:t(a.crossOrigin)?a.crossOrigin:"anonymous",opaque:!0,maxZoom:a.maxZoom,tileLoadFunction:a.tileLoadFunction,url:t(a.url)?a.url:"//{a-c}.tile.openstreetmap.org/{z}/{x}/{y}.png"})}G(ms,ls); +var os=new fb({html:'Data \x26copy; \x3ca href\x3d"http://www.openstreetmap.org/"\x3eOpenStreetMap\x3c/a\x3e contributors, \x3ca href\x3d"http://www.openstreetmap.org/copyright"\x3eODbL\x3c/a\x3e'}),ps=new fb({html:'Tiles \x26copy; \x3ca href\x3d"http://www.openstreetmap.org/"\x3eOpenStreetMap\x3c/a\x3e contributors, \x3ca href\x3d"http://creativecommons.org/licenses/by-sa/2.0/"\x3eCC BY-SA\x3c/a\x3e'}),ns=[ps,os];function qs(a){a=t(a)?a:{};var b=rs[a.layer];ls.call(this,{attributions:b.attributions,crossOrigin:"anonymous",logo:"//developer.mapquest.com/content/osm/mq_logo.png",maxZoom:b.maxZoom,opaque:!0,tileLoadFunction:a.tileLoadFunction,url:"//otile{1-4}.mqcdn.com/tiles/1.0.0/"+a.layer+"/{z}/{x}/{y}.jpg"})}G(qs,ls); +var ss=new fb({html:'Tiles Courtesy of \x3ca href\x3d"http://www.mapquest.com/" target\x3d"_blank"\x3eMapQuest\x3c/a\x3e'}),rs={osm:{maxZoom:28,attributions:[ss,os]},sat:{maxZoom:18,attributions:[ss,new fb({html:"Portions Courtesy NASA/JPL-Caltech and U.S. Depart. of Agriculture, Farm Service Agency"})]},hyb:{maxZoom:18,attributions:[ss,os]}};function ts(){}G(ts,bo);function us(a,b){var c=a.getAttribute("k"),d=a.getAttribute("v");b[b.length-1].ac[c]=d} +var vs=[null],ws=Y(vs,{nd:function(a,b){b[b.length-1].tb.push(a.getAttribute("ref"))},tag:us},void 0),ys=Y(vs,{node:function(a,b){var c=b[b.length-1],d=a.getAttribute("id"),e=[parseFloat(a.getAttribute("lon")),parseFloat(a.getAttribute("lat"))];c.je[d]=e;var f=$n({ac:{}},xs,a,b);Zb(f.ac)||(e=new Yi(e),e=new R(e),e.b(d),e.Y(f.ac),c.features.push(e))},way:function(a,b){for(var c=a.getAttribute("id"),d=$n({tb:[],ac:{}},ws,a,b),e=b[b.length-1],f=[],g=0,h=d.tb.length;gthis.a.d};Fs.prototype.oe=function(a){ur(this.a,a)};Fs.prototype.nb=function(a,b,c){var d=this.La(a,b,c);if(Dm(this.a,d))return Gm(this.a,d);a=new Es(new $a(a,b,c),this.tileGrid);Hm(this.a,d,a);return a};var Gs=[];C("grid",function(a){Gs.push(a)});function Hs(a){vr.call(this,{crossOrigin:a.crossOrigin,projection:xf("EPSG:3857"),state:0,tileLoadFunction:a.tileLoadFunction});this.a=br(a.url,{Kd:!0});mq(this.a,this.e,null,this)}G(Hs,vr); +Hs.prototype.e=function(){var a=Gs.pop(),b=xf("EPSG:4326"),c;if(t(a.bounds)){var d=ff(b,this.l);this.O=c=Ze(a.bounds,d)}var e=a.minzoom||0,d=a.maxzoom||22,f=new xr({maxZoom:d,minZoom:e});this.tileGrid=f;this.tileUrlFunction=rr(f.c({extent:c}),or(a.tiles));if(t(a.attribution)){b=t(c)?c:b.p();c={};for(var g;e<=d;++e)g=e.toString(),c[g]=[Fj(f,b,e)];this.d=[new fb({html:a.attribution,tileRanges:c})]}Lf(this,1)};function Is(a){a=t(a)?a:{};var b=t(a.params)?a.params:{};vr.call(this,{attributions:a.attributions,crossOrigin:a.crossOrigin,extent:a.extent,logo:a.logo,opaque:!I(b,"TRANSPARENT",!0),projection:a.projection,tileGrid:a.tileGrid,tileLoadFunction:a.tileLoadFunction,tileUrlFunction:B(this.Vh,this)});var c=a.urls;!t(c)&&t(a.url)&&(c=sr(a.url));this.B=c;this.g=t(a.gutter)?a.gutter:0;this.a=b;this.h=NaN;this.e=!0;this.i=a.serverType;this.o=t(a.hidpi)?a.hidpi:!0;this.n="";Js(this);this.r=De();Ks(this)} +G(Is,vr);l=Is.prototype; +l.Xg=function(a,b,c,d){var e=this.h;if(!isNaN(this.h)){var f=this.tileGrid;null===f&&(f=Kj(this,c));b=Hj(f,a[0],a[1],b,!1,void 0);if(!(f.Ya().length<=b.a)){var g=f.a[b.a],h=Ej(f,b,this.r),f=f.na(b.a),m=this.g;0!==m&&(f+=2*m,h=Ge(h,g*m,h));1!=e&&(f=f*e+0.5|0);m={SERVICE:"WMS",VERSION:"1.3.0",REQUEST:"GetFeatureInfo",FORMAT:"image/png",TRANSPARENT:!0,QUERY_LAYERS:I(this.a,"LAYERS")};dc(m,this.a,d);d=Math.floor((h[3]-a[1])/(g/e));m[this.e?"I":"X"]=Math.floor((a[0]-h[0])/(g/e));m[this.e?"J":"Y"]=d;return Ls(this, +b,f,h,e,c,m)}}};l.qc=k("g");l.La=function(a,b,c){return this.n+Is.F.La.call(this,a,b,c)};l.Yg=k("a"); +function Ls(a,b,c,d,e,f,g){var h=a.B;if(t(h)&&0!=h.length){g.WIDTH=c;g.HEIGHT=c;g[a.e?"CRS":"SRS"]=f.a;"STYLES"in a.a||(g.STYLES=new String(""));if(1!=e)switch(a.i){case "geoserver":g.FORMAT_OPTIONS="dpi:"+(90*e+0.5|0);break;case "mapserver":g.MAP_RESOLUTION=90*e;break;case "carmentaserver":case "qgis":g.DPI=90*e}c=f.e;a.e&&"ne"==c.substr(0,2)&&(c=d[0],d[0]=d[1],d[1]=c,c=d[2],d[2]=d[3],d[3]=c);g.BBOX=d.join(",");return jg(lg([1==h.length?h[0]:h[Rb((b.x<p||n<=p)return null;a=a.y;return a<-n||-1f||d>f;)e.push([Math.ceil(c/f),Math.ceil(d/f)]),f+=f;break;case "truncated":for(;c>f||d>f;)e.push([Math.ceil(c/f),Math.ceil(d/f)]),c>>=1,d>>=1}e.push([1,1]);e.reverse();for(var f=[1],g=[0],d=1,c=e.length;df&&(f=0);var f=c.styles[f].identifier,g={};Ka(c.dimensions,function(a){var b=a.identifier,c=a["default"];t(c)||(c=a.values[0]);g[b]=c});var h=a.contents.tileMatrixSets[d],m=Os(h),h=xf(h.supportedCRS),n=a.operationsMetadata.GetTile.dcp.http.get,p,r;switch(Yb(n[0].constraints.GetEncoding.allowedValues)[0]){case "REST":case "RESTful":r= +"REST";p=c.resourceUrls.tile[e];break;case "KVP":r=Ps,p=[],Ka(n,function(a){a.constraints.GetEncoding.allowedValues.hasOwnProperty(Ps)&&p.push(a.url)})}return{urls:p,layer:b,matrixSet:d,format:e,projection:h,requestEncoding:r,tileGrid:m,style:f,dimensions:g}});Qs.prototype.getDimensions=Qs.prototype.g;Qs.prototype.updateDimensions=Qs.prototype.h;C("ol.source.XYZ",ls);ls.prototype.setUrl=ls.prototype.a;C("ol.source.Zoomify",Ts);C("ol.style.Circle",me);me.prototype.getAnchor=me.prototype.Pb; +me.prototype.getFill=me.prototype.dh;me.prototype.getImage=me.prototype.Vb;me.prototype.getRadius=me.prototype.eh;me.prototype.getSize=me.prototype.vb;me.prototype.getStroke=me.prototype.fh;C("ol.style.Fill",je);je.prototype.getColor=je.prototype.c;C("ol.style.Icon",Uj);Uj.prototype.getAnchor=Uj.prototype.Pb;Uj.prototype.getImage=Uj.prototype.Vb;Uj.prototype.getSize=Uj.prototype.vb;Uj.prototype.getSrc=Uj.prototype.gh;C("ol.style.Image",ke);ke.prototype.getRotation=ke.prototype.S; +ke.prototype.getScale=ke.prototype.o;C("ol.style.Stroke",le);le.prototype.getColor=le.prototype.hh;le.prototype.getLineCap=le.prototype.sf;le.prototype.getLineDash=le.prototype.ih;le.prototype.getLineJoin=le.prototype.tf;le.prototype.getMiterLimit=le.prototype.wf;le.prototype.getWidth=le.prototype.jh;C("ol.style.Style",ne);ne.prototype.getFill=ne.prototype.kh;ne.prototype.getImage=ne.prototype.lh;ne.prototype.getStroke=ne.prototype.mh;ne.prototype.getText=ne.prototype.nh;ne.prototype.getZIndex=ne.prototype.Ff; +C("ol.style.Text",Vs);Vs.prototype.getFill=Vs.prototype.oh;Vs.prototype.getFont=Vs.prototype.jf;Vs.prototype.getRotation=Vs.prototype.ph;Vs.prototype.getScale=Vs.prototype.qh;Vs.prototype.getStroke=Vs.prototype.rh;Vs.prototype.getText=Vs.prototype.sh;Vs.prototype.getTextAlign=Vs.prototype.Af;Vs.prototype.getTextBaseline=Vs.prototype.Bf;C("ol.tilegrid.TileGrid",Cj);Cj.prototype.getMinZoom=Cj.prototype.vf;Cj.prototype.getOrigin=Cj.prototype.Wb;Cj.prototype.getResolutions=Cj.prototype.Ya; +Cj.prototype.getTileSize=Cj.prototype.na;C("ol.tilegrid.WMTS",Ns);Ns.prototype.getMatrixIds=Ns.prototype.g;C("ol.tilegrid.XYZ",xr);C("ol.tilegrid.Zoomify",Ss);C("ol.webgl.Context",Im);Im.prototype.getGL=Im.prototype.th;Im.prototype.useProgram=Im.prototype.ld;})(); diff --git a/float-no-zero/closure-library/closure/goog/a11y/aria/announcer.js b/float-no-zero/closure-library/closure/goog/a11y/aria/announcer.js new file mode 100644 index 0000000000..0ffaf33f33 --- /dev/null +++ b/float-no-zero/closure-library/closure/goog/a11y/aria/announcer.js @@ -0,0 +1,108 @@ +// Copyright 2007 The Closure Library Authors. All Rights Reserved. +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS-IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + + +/** + * @fileoverview Announcer that allows messages to be spoken by assistive + * technologies. + */ + +goog.provide('goog.a11y.aria.Announcer'); + +goog.require('goog.Disposable'); +goog.require('goog.a11y.aria'); +goog.require('goog.a11y.aria.LivePriority'); +goog.require('goog.a11y.aria.State'); +goog.require('goog.dom'); +goog.require('goog.object'); + + + +/** + * Class that allows messages to be spoken by assistive technologies that the + * user may have active. + * + * @param {goog.dom.DomHelper=} opt_domHelper DOM helper. + * @constructor + * @extends {goog.Disposable} + */ +goog.a11y.aria.Announcer = function(opt_domHelper) { + goog.base(this); + + /** + * @type {goog.dom.DomHelper} + * @private + */ + this.domHelper_ = opt_domHelper || goog.dom.getDomHelper(); + + /** + * Map of priority to live region elements to use for communicating updates. + * Elements are created on demand. + * @type {Object.} + * @private + */ + this.liveRegions_ = {}; +}; +goog.inherits(goog.a11y.aria.Announcer, goog.Disposable); + + +/** @override */ +goog.a11y.aria.Announcer.prototype.disposeInternal = function() { + goog.object.forEach( + this.liveRegions_, this.domHelper_.removeNode, this.domHelper_); + this.liveRegions_ = null; + this.domHelper_ = null; + goog.base(this, 'disposeInternal'); +}; + + +/** + * Announce a message to be read by any assistive technologies the user may + * have active. + * @param {string} message The message to announce to screen readers. + * @param {goog.a11y.aria.LivePriority=} opt_priority The priority of the + * message. Defaults to POLITE. + */ +goog.a11y.aria.Announcer.prototype.say = function(message, opt_priority) { + goog.dom.setTextContent(this.getLiveRegion_( + opt_priority || goog.a11y.aria.LivePriority.POLITE), message); +}; + + +/** + * Returns an aria-live region that can be used to communicate announcements. + * @param {!goog.a11y.aria.LivePriority} priority The required priority. + * @return {Element} A live region of the requested priority. + * @private + */ +goog.a11y.aria.Announcer.prototype.getLiveRegion_ = function(priority) { + if (this.liveRegions_[priority]) { + return this.liveRegions_[priority]; + } + var liveRegion; + liveRegion = this.domHelper_.createElement('div'); + // Note that IE has a habit of declaring things that aren't display:none as + // invisible to third-party tools like JAWs, so we can't just use height:0. + liveRegion.style.position = 'absolute'; + liveRegion.style.top = '-1000px'; + liveRegion.style.height = '1px'; + liveRegion.style.overflow = 'hidden'; + goog.a11y.aria.setState(liveRegion, goog.a11y.aria.State.LIVE, + priority); + goog.a11y.aria.setState(liveRegion, goog.a11y.aria.State.ATOMIC, + 'true'); + this.domHelper_.getDocument().body.appendChild(liveRegion); + this.liveRegions_[priority] = liveRegion; + return liveRegion; +}; diff --git a/float-no-zero/closure-library/closure/goog/a11y/aria/aria.js b/float-no-zero/closure-library/closure/goog/a11y/aria/aria.js new file mode 100644 index 0000000000..abc261f6bf --- /dev/null +++ b/float-no-zero/closure-library/closure/goog/a11y/aria/aria.js @@ -0,0 +1,362 @@ +// Copyright 2007 The Closure Library Authors. All Rights Reserved. +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS-IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + + +/** + * @fileoverview Utilities for adding, removing and setting ARIA roles and + * states as defined by W3C ARIA standard: http://www.w3.org/TR/wai-aria/ + * All modern browsers have some form of ARIA support, so no browser checks are + * performed when adding ARIA to components. + * + */ + +goog.provide('goog.a11y.aria'); + +goog.require('goog.a11y.aria.Role'); +goog.require('goog.a11y.aria.State'); +goog.require('goog.a11y.aria.datatables'); +goog.require('goog.array'); +goog.require('goog.asserts'); +goog.require('goog.dom'); +goog.require('goog.dom.TagName'); +goog.require('goog.object'); +goog.require('goog.string'); + + +/** + * ARIA states/properties prefix. + * @private + */ +goog.a11y.aria.ARIA_PREFIX_ = 'aria-'; + + +/** + * ARIA role attribute. + * @private + */ +goog.a11y.aria.ROLE_ATTRIBUTE_ = 'role'; + + +/** + * A list of tag names for which we don't need to set ARIA role and states + * because they have well supported semantics for screen readers or because + * they don't contain content to be made accessible. + * @private + */ +goog.a11y.aria.TAGS_WITH_ASSUMED_ROLES_ = [ + goog.dom.TagName.A, + goog.dom.TagName.AREA, + goog.dom.TagName.BUTTON, + goog.dom.TagName.HEAD, + goog.dom.TagName.INPUT, + goog.dom.TagName.LINK, + goog.dom.TagName.MENU, + goog.dom.TagName.META, + goog.dom.TagName.OPTGROUP, + goog.dom.TagName.OPTION, + goog.dom.TagName.PROGRESS, + goog.dom.TagName.STYLE, + goog.dom.TagName.SELECT, + goog.dom.TagName.SOURCE, + goog.dom.TagName.TEXTAREA, + goog.dom.TagName.TITLE, + goog.dom.TagName.TRACK +]; + + +/** + * Sets the role of an element. If the roleName is + * empty string or null, the role for the element is removed. + * We encourage clients to call the goog.a11y.aria.removeRole + * method instead of setting null and empty string values. + * Special handling for this case is added to ensure + * backword compatibility with existing code. + * + * @param {!Element} element DOM node to set role of. + * @param {!goog.a11y.aria.Role|string} roleName role name(s). + */ +goog.a11y.aria.setRole = function(element, roleName) { + if (!roleName) { + // Setting the ARIA role to empty string is not allowed + // by the ARIA standard. + goog.a11y.aria.removeRole(element); + } else { + if (goog.asserts.ENABLE_ASSERTS) { + goog.asserts.assert(goog.object.containsValue( + goog.a11y.aria.Role, roleName), 'No such ARIA role ' + roleName); + } + element.setAttribute(goog.a11y.aria.ROLE_ATTRIBUTE_, roleName); + } +}; + + +/** + * Gets role of an element. + * @param {!Element} element DOM element to get role of. + * @return {?goog.a11y.aria.Role} ARIA Role name. + */ +goog.a11y.aria.getRole = function(element) { + var role = element.getAttribute(goog.a11y.aria.ROLE_ATTRIBUTE_); + return /** @type {goog.a11y.aria.Role} */ (role) || null; +}; + + +/** + * Removes role of an element. + * @param {!Element} element DOM element to remove the role from. + */ +goog.a11y.aria.removeRole = function(element) { + element.removeAttribute(goog.a11y.aria.ROLE_ATTRIBUTE_); +}; + + +/** + * Sets the state or property of an element. + * @param {!Element} element DOM node where we set state. + * @param {!(goog.a11y.aria.State|string)} stateName State attribute being set. + * Automatically adds prefix 'aria-' to the state name if the attribute is + * not an extra attribute. + * @param {string|boolean|number|!goog.array.ArrayLike.} value Value + * for the state attribute. + */ +goog.a11y.aria.setState = function(element, stateName, value) { + if (goog.isArrayLike(value)) { + var array = /** @type {!goog.array.ArrayLike.} */ (value); + value = array.join(' '); + } + var attrStateName = goog.a11y.aria.getAriaAttributeName_(stateName); + if (value === '' || value == undefined) { + var defaultValueMap = goog.a11y.aria.datatables.getDefaultValuesMap(); + // Work around for browsers that don't properly support ARIA. + // According to the ARIA W3C standard, user agents should allow + // setting empty value which results in setting the default value + // for the ARIA state if such exists. The exact text from the ARIA W3C + // standard (http://www.w3.org/TR/wai-aria/states_and_properties): + // "When a value is indicated as the default, the user agent + // MUST follow the behavior prescribed by this value when the state or + // property is empty or undefined." + // The defaultValueMap contains the default values for the ARIA states + // and has as a key the goog.a11y.aria.State constant for the state. + if (stateName in defaultValueMap) { + element.setAttribute(attrStateName, defaultValueMap[stateName]); + } else { + element.removeAttribute(attrStateName); + } + } else { + element.setAttribute(attrStateName, value); + } +}; + + +/** + * Remove the state or property for the element. + * @param {!Element} element DOM node where we set state. + * @param {!goog.a11y.aria.State} stateName State name. + */ +goog.a11y.aria.removeState = function(element, stateName) { + element.removeAttribute(goog.a11y.aria.getAriaAttributeName_(stateName)); +}; + + +/** + * Gets value of specified state or property. + * @param {!Element} element DOM node to get state from. + * @param {!goog.a11y.aria.State|string} stateName State name. + * @return {string} Value of the state attribute. + */ +goog.a11y.aria.getState = function(element, stateName) { + // TODO(user): return properly typed value result -- + // boolean, number, string, null. We should be able to chain + // getState(...) and setState(...) methods. + + var attr = + /** @type {string|number|boolean} */ (element.getAttribute( + goog.a11y.aria.getAriaAttributeName_(stateName))); + var isNullOrUndefined = attr == null || attr == undefined; + return isNullOrUndefined ? '' : String(attr); +}; + + +/** + * Returns the activedescendant element for the input element by + * using the activedescendant ARIA property of the given element. + * @param {!Element} element DOM node to get activedescendant + * element for. + * @return {?Element} DOM node of the activedescendant, if found. + */ +goog.a11y.aria.getActiveDescendant = function(element) { + var id = goog.a11y.aria.getState( + element, goog.a11y.aria.State.ACTIVEDESCENDANT); + return goog.dom.getOwnerDocument(element).getElementById(id); +}; + + +/** + * Sets the activedescendant ARIA property value for an element. + * If the activeElement is not null, it should have an id set. + * @param {!Element} element DOM node to set activedescendant ARIA property to. + * @param {?Element} activeElement DOM node being set as activedescendant. + */ +goog.a11y.aria.setActiveDescendant = function(element, activeElement) { + var id = ''; + if (activeElement) { + id = activeElement.id; + goog.asserts.assert(id, 'The active element should have an id.'); + } + + goog.a11y.aria.setState(element, goog.a11y.aria.State.ACTIVEDESCENDANT, id); +}; + + +/** + * Gets the label of the given element. + * @param {!Element} element DOM node to get label from. + * @return {string} label The label. + */ +goog.a11y.aria.getLabel = function(element) { + return goog.a11y.aria.getState(element, goog.a11y.aria.State.LABEL); +}; + + +/** + * Sets the label of the given element. + * @param {!Element} element DOM node to set label to. + * @param {string} label The label to set. + */ +goog.a11y.aria.setLabel = function(element, label) { + goog.a11y.aria.setState(element, goog.a11y.aria.State.LABEL, label); +}; + + +/** + * Asserts that the element has a role set if it's not an HTML element whose + * semantics is well supported by most screen readers. + * Only to be used internally by the ARIA library in goog.a11y.aria.*. + * @param {!Element} element The element to assert an ARIA role set. + * @param {!goog.array.ArrayLike.} allowedRoles The child roles of + * the roles. + */ +goog.a11y.aria.assertRoleIsSetInternalUtil = function(element, allowedRoles) { + if (goog.array.contains(goog.a11y.aria.TAGS_WITH_ASSUMED_ROLES_, + element.tagName)) { + return; + } + var elementRole = /** @type {string}*/ (goog.a11y.aria.getRole(element)); + goog.asserts.assert(elementRole != null, + 'The element ARIA role cannot be null.'); + + goog.asserts.assert(goog.array.contains(allowedRoles, elementRole), + 'Non existing or incorrect role set for element.' + + 'The role set is "' + elementRole + + '". The role should be any of "' + allowedRoles + + '". Check the ARIA specification for more details ' + + 'http://www.w3.org/TR/wai-aria/roles.'); +}; + + +/** + * Gets the boolean value of an ARIA state/property. + * Only to be used internally by the ARIA library in goog.a11y.aria.*. + * @param {!Element} element The element to get the ARIA state for. + * @param {!goog.a11y.aria.State|string} stateName the ARIA state name. + * @return {?boolean} Boolean value for the ARIA state value or null if + * the state value is not 'true' or 'false'. + */ +goog.a11y.aria.getBooleanStateInternalUtil = function(element, stateName) { + var stringValue = goog.a11y.aria.getState(element, stateName); + if (stringValue == 'true') { + return true; + } + if (stringValue == 'false') { + return false; + } + return null; +}; + + +/** + * Gets the number value of an ARIA state/property. + * Only to be used internally by the ARIA library in goog.a11y.aria.*. + * @param {!Element} element The element to get the ARIA state for. + * @param {!goog.a11y.aria.State|string} stateName the ARIA state name. + * @return {?number} Number value for the ARIA state value or null if + * the state value is not a number. + */ +goog.a11y.aria.getNumberStateInternalUtil = function(element, stateName) { + var stringValue = goog.a11y.aria.getState(element, stateName); + if (goog.string.isNumeric(stringValue)) { + return goog.string.toNumber(stringValue); + } + return null; +}; + + +/** + * Gets array of strings value of the specified state or + * property for the element. + * Only to be used internally by the ARIA library in goog.a11y.aria.*. + * @param {!Element} element DOM node to get state from. + * @param {!goog.a11y.aria.State} stateName State name. + * @return {!goog.array.ArrayLike.} string Array + * value of the state attribute. + */ +goog.a11y.aria.getStringArrayStateInternalUtil = function(element, stateName) { + var attrValue = element.getAttribute( + goog.a11y.aria.getAriaAttributeName_(stateName)); + return goog.a11y.aria.splitStringOnWhitespace_(attrValue); +}; + + +/** + * Gets the string value of an ARIA state/property. + * Only to be used internally by the ARIA library in goog.a11y.aria.*. + * @param {!Element} element The element to get the ARIA state for. + * @param {!goog.a11y.aria.State|string} stateName the ARIA state name. + * @return {?string} String value for the ARIA state value or null if + * the state value is empty string. + */ +goog.a11y.aria.getStringStateInternalUtil = function(element, stateName) { + var stringValue = goog.a11y.aria.getState(element, stateName); + return stringValue || null; +}; + + +/** + * Splits the input stringValue on whitespace. + * @param {string} stringValue The value of the string to split. + * @return {!goog.array.ArrayLike.} string Array + * value as result of the split. + * @private + */ +goog.a11y.aria.splitStringOnWhitespace_ = function(stringValue) { + return stringValue ? stringValue.split(/\s+/) : []; +}; + + +/** + * Adds the 'aria-' prefix to ariaName. + * @param {string} ariaName ARIA state/property name. + * @private + * @return {string} The ARIA attribute name with added 'aria-' prefix. + * @throws {Error} If no such attribute exists. + */ +goog.a11y.aria.getAriaAttributeName_ = function(ariaName) { + if (goog.asserts.ENABLE_ASSERTS) { + goog.asserts.assert(ariaName, 'ARIA attribute cannot be empty.'); + goog.asserts.assert(goog.object.containsValue( + goog.a11y.aria.State, ariaName), + 'No such ARIA attribute ' + ariaName); + } + return goog.a11y.aria.ARIA_PREFIX_ + ariaName; +}; diff --git a/float-no-zero/closure-library/closure/goog/a11y/aria/attributes.js b/float-no-zero/closure-library/closure/goog/a11y/aria/attributes.js new file mode 100644 index 0000000000..f4e0a3d074 --- /dev/null +++ b/float-no-zero/closure-library/closure/goog/a11y/aria/attributes.js @@ -0,0 +1,389 @@ +// Copyright 2013 The Closure Library Authors. All Rights Reserved. +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS-IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + + +/** + * @fileoverview The file contains generated enumerations for ARIA states + * and properties as defined by W3C ARIA standard: + * http://www.w3.org/TR/wai-aria/. + * + * This is auto-generated code. Do not manually edit! For more details + * about how to edit it via the generator check go/closure-ariagen. + */ + +goog.provide('goog.a11y.aria.AutoCompleteValues'); +goog.provide('goog.a11y.aria.CheckedValues'); +goog.provide('goog.a11y.aria.DropEffectValues'); +goog.provide('goog.a11y.aria.ExpandedValues'); +goog.provide('goog.a11y.aria.GrabbedValues'); +goog.provide('goog.a11y.aria.InvalidValues'); +goog.provide('goog.a11y.aria.LivePriority'); +goog.provide('goog.a11y.aria.OrientationValues'); +goog.provide('goog.a11y.aria.PressedValues'); +goog.provide('goog.a11y.aria.RelevantValues'); +goog.provide('goog.a11y.aria.SelectedValues'); +goog.provide('goog.a11y.aria.SortValues'); +goog.provide('goog.a11y.aria.State'); + + +/** + * ARIA states and properties. + * @enum {string} + */ +goog.a11y.aria.State = { + // ARIA property for setting the currently active descendant of an element, + // for example the selected item in a list box. Value: ID of an element. + ACTIVEDESCENDANT: 'activedescendant', + + // ARIA property that, if true, indicates that all of a changed region should + // be presented, instead of only parts. Value: one of {true, false}. + ATOMIC: 'atomic', + + // ARIA property to specify that input completion is provided. Value: + // one of {'inline', 'list', 'both', 'none'}. + AUTOCOMPLETE: 'autocomplete', + + // ARIA state to indicate that an element and its subtree are being updated. + // Value: one of {true, false}. + BUSY: 'busy', + + // ARIA state for a checked item. Value: one of {'true', 'false', 'mixed', + // undefined}. + CHECKED: 'checked', + + // ARIA property that identifies the element or elements whose contents or + // presence are controlled by this element. + // Value: space-separated IDs of other elements. + CONTROLS: 'controls', + + // ARIA property that identifies the element or elements that describe + // this element. Value: space-separated IDs of other elements. + DESCRIBEDBY: 'describedby', + + // ARIA state for a disabled item. Value: one of {true, false}. + DISABLED: 'disabled', + + // ARIA property that indicates what functions can be performed when a + // dragged object is released on the drop target. Value: one of + // {'copy', 'move', 'link', 'execute', 'popup', 'none'}. + DROPEFFECT: 'dropeffect', + + // ARIA state for setting whether the element like a tree node is expanded. + // Value: one of {true, false, undefined}. + EXPANDED: 'expanded', + + // ARIA property that identifies the next element (or elements) in the + // recommended reading order of content. Value: space-separated ids of + // elements to flow to. + FLOWTO: 'flowto', + + // ARIA state that indicates an element's "grabbed" state in drag-and-drop. + // Value: one of {true, false, undefined}. + GRABBED: 'grabbed', + + // ARIA property indicating whether the element has a popup. + // Value: one of {true, false}. + HASPOPUP: 'haspopup', + + // ARIA state indicating that the element is not visible or perceivable + // to any user. Value: one of {true, false}. + HIDDEN: 'hidden', + + // ARIA state indicating that the entered value does not conform. Value: + // one of {false, true, 'grammar', 'spelling'} + INVALID: 'invalid', + + // ARIA property that provides a label to override any other text, value, or + // contents used to describe this element. Value: string. + LABEL: 'label', + + // ARIA property for setting the element which labels another element. + // Value: space-separated IDs of elements. + LABELLEDBY: 'labelledby', + + // ARIA property for setting the level of an element in the hierarchy. + // Value: integer. + LEVEL: 'level', + + // ARIA property indicating that an element will be updated, and + // describes the types of updates the user agents, assistive technologies, + // and user can expect from the live region. Value: one of {'off', 'polite', + // 'assertive'}. + LIVE: 'live', + + // ARIA property indicating whether a text box can accept multiline input. + // Value: one of {true, false}. + MULTILINE: 'multiline', + + // ARIA property indicating if the user may select more than one item. + // Value: one of {true, false}. + MULTISELECTABLE: 'multiselectable', + + // ARIA property indicating if the element is horizontal or vertical. + // Value: one of {'vertical', 'horizontal'}. + ORIENTATION: 'orientation', + + // ARIA property creating a visual, functional, or contextual parent/child + // relationship when the DOM hierarchy can't be used to represent it. + // Value: Space-separated IDs of elements. + OWNS: 'owns', + + // ARIA property that defines an element's number of position in a list. + // Value: integer. + POSINSET: 'posinset', + + // ARIA state for a pressed item. + // Value: one of {true, false, undefined, 'mixed'}. + PRESSED: 'pressed', + + // ARIA property indicating that an element is not editable. + // Value: one of {true, false}. + READONLY: 'readonly', + + // ARIA property indicating that change notifications within this subtree + // of a live region should be announced. Value: one of {'additions', + // 'removals', 'text', 'all', 'additions text'}. + RELEVANT: 'relevant', + + // ARIA property indicating that user input is required on this element + // before a form may be submitted. Value: one of {true, false}. + REQUIRED: 'required', + + // ARIA state for setting the currently selected item in the list. + // Value: one of {true, false, undefined}. + SELECTED: 'selected', + + // ARIA property defining the number of items in a list. Value: integer. + SETSIZE: 'setsize', + + // ARIA property indicating if items are sorted. Value: one of {'ascending', + // 'descending', 'none', 'other'}. + SORT: 'sort', + + // ARIA property for slider maximum value. Value: number. + VALUEMAX: 'valuemax', + + // ARIA property for slider minimum value. Value: number. + VALUEMIN: 'valuemin', + + // ARIA property for slider active value. Value: number. + VALUENOW: 'valuenow', + + // ARIA property for slider active value represented as text. + // Value: string. + VALUETEXT: 'valuetext' +}; + + +/** + * ARIA state values for AutoCompleteValues. + * @enum {string} + */ +goog.a11y.aria.AutoCompleteValues = { + // The system provides text after the caret as a suggestion + // for how to complete the field. + INLINE: 'inline', + // A list of choices appears from which the user can choose, + // but the edit box retains focus. + LIST: 'list', + // A list of choices appears and the currently selected suggestion + // also appears inline. + BOTH: 'both', + // No input completion suggestions are provided. + NONE: 'none' +}; + + +/** + * ARIA state values for DropEffectValues. + * @enum {string} + */ +goog.a11y.aria.DropEffectValues = { + // A duplicate of the source object will be dropped into the target. + COPY: 'copy', + // The source object will be removed from its current location + // and dropped into the target. + MOVE: 'move', + // A reference or shortcut to the dragged object + // will be created in the target object. + LINK: 'link', + // A function supported by the drop target is + // executed, using the drag source as an input. + EXECUTE: 'execute', + // There is a popup menu or dialog that allows the user to choose + // one of the drag operations (copy, move, link, execute) and any other + // drag functionality, such as cancel. + POPUP: 'popup', + // No operation can be performed; effectively + // cancels the drag operation if an attempt is made to drop on this object. + NONE: 'none' +}; + + +/** + * ARIA state values for LivePriority. + * @enum {string} + */ +goog.a11y.aria.LivePriority = { + // Updates to the region will not be presented to the user + // unless the assitive technology is currently focused on that region. + OFF: 'off', + // (Background change) Assistive technologies SHOULD announce + // updates at the next graceful opportunity, such as at the end of + // speaking the current sentence or when the user pauses typing. + POLITE: 'polite', + // This information has the highest priority and assistive + // technologies SHOULD notify the user immediately. + // Because an interruption may disorient users or cause them to not complete + // their current task, authors SHOULD NOT use the assertive value unless the + // interruption is imperative. + ASSERTIVE: 'assertive' +}; + + +/** + * ARIA state values for OrientationValues. + * @enum {string} + */ +goog.a11y.aria.OrientationValues = { + // The element is oriented vertically. + VERTICAL: 'vertical', + // The element is oriented horizontally. + HORIZONTAL: 'horizontal' +}; + + +/** + * ARIA state values for RelevantValues. + * @enum {string} + */ +goog.a11y.aria.RelevantValues = { + // Element nodes are added to the DOM within the live region. + ADDITIONS: 'additions', + // Text or element nodes within the live region are removed from the DOM. + REMOVALS: 'removals', + // Text is added to any DOM descendant nodes of the live region. + TEXT: 'text', + // Equivalent to the combination of all values, "additions removals text". + ALL: 'all' +}; + + +/** + * ARIA state values for SortValues. + * @enum {string} + */ +goog.a11y.aria.SortValues = { + // Items are sorted in ascending order by this column. + ASCENDING: 'ascending', + // Items are sorted in descending order by this column. + DESCENDING: 'descending', + // There is no defined sort applied to the column. + NONE: 'none', + // A sort algorithm other than ascending or descending has been applied. + OTHER: 'other' +}; + + +/** + * ARIA state values for CheckedValues. + * @enum {string} + */ +goog.a11y.aria.CheckedValues = { + // The selectable element is checked. + TRUE: 'true', + // The selectable element is not checked. + FALSE: 'false', + // Indicates a mixed mode value for a tri-state + // checkbox or menuitemcheckbox. + MIXED: 'mixed', + // The element does not support being checked. + UNDEFINED: 'undefined' +}; + + +/** + * ARIA state values for ExpandedValues. + * @enum {string} + */ +goog.a11y.aria.ExpandedValues = { + // The element, or another grouping element it controls, is expanded. + TRUE: 'true', + // The element, or another grouping element it controls, is collapsed. + FALSE: 'false', + // The element, or another grouping element + // it controls, is neither expandable nor collapsible; all its + // child elements are shown or there are no child elements. + UNDEFINED: 'undefined' +}; + + +/** + * ARIA state values for GrabbedValues. + * @enum {string} + */ +goog.a11y.aria.GrabbedValues = { + // Indicates that the element has been "grabbed" for dragging. + TRUE: 'true', + // Indicates that the element supports being dragged. + FALSE: 'false', + // Indicates that the element does not support being dragged. + UNDEFINED: 'undefined' +}; + + +/** + * ARIA state values for InvalidValues. + * @enum {string} + */ +goog.a11y.aria.InvalidValues = { + // There are no detected errors in the value. + FALSE: 'false', + // The value entered by the user has failed validation. + TRUE: 'true', + // A grammatical error was detected. + GRAMMAR: 'grammar', + // A spelling error was detected. + SPELLING: 'spelling' +}; + + +/** + * ARIA state values for PressedValues. + * @enum {string} + */ +goog.a11y.aria.PressedValues = { + // The element is pressed. + TRUE: 'true', + // The element supports being pressed but is not currently pressed. + FALSE: 'false', + // Indicates a mixed mode value for a tri-state toggle button. + MIXED: 'mixed', + // The element does not support being pressed. + UNDEFINED: 'undefined' +}; + + +/** + * ARIA state values for SelectedValues. + * @enum {string} + */ +goog.a11y.aria.SelectedValues = { + // The selectable element is selected. + TRUE: 'true', + // The selectable element is not selected. + FALSE: 'false', + // The element is not selectable. + UNDEFINED: 'undefined' +}; diff --git a/float-no-zero/closure-library/closure/goog/a11y/aria/datatables.js b/float-no-zero/closure-library/closure/goog/a11y/aria/datatables.js new file mode 100644 index 0000000000..c97df20856 --- /dev/null +++ b/float-no-zero/closure-library/closure/goog/a11y/aria/datatables.js @@ -0,0 +1,68 @@ +// Copyright 2013 The Closure Library Authors. All Rights Reserved. +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS-IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + + + +/** + * @fileoverview The file contains data tables generated from the ARIA + * standard schema http://www.w3.org/TR/wai-aria/. + * + * This is auto-generated code. Do not manually edit! + */ + +goog.provide('goog.a11y.aria.datatables'); + +goog.require('goog.a11y.aria.State'); +goog.require('goog.object'); + + +/** + * A map that contains mapping between an ARIA state and the default value + * for it. Note that not all ARIA states have default values. + * + * @type {Object.} + */ +goog.a11y.aria.DefaultStateValueMap_; + + +/** + * A method that creates a map that contains mapping between an ARIA state and + * the default value for it. Note that not all ARIA states have default values. + * + * @return {Object.} + * The names for each of the notification methods. + */ +goog.a11y.aria.datatables.getDefaultValuesMap = function() { + if (!goog.a11y.aria.DefaultStateValueMap_) { + goog.a11y.aria.DefaultStateValueMap_ = goog.object.create( + goog.a11y.aria.State.ATOMIC, false, + goog.a11y.aria.State.AUTOCOMPLETE, 'none', + goog.a11y.aria.State.DROPEFFECT, 'none', + goog.a11y.aria.State.HASPOPUP, false, + goog.a11y.aria.State.LIVE, 'off', + goog.a11y.aria.State.MULTILINE, false, + goog.a11y.aria.State.MULTISELECTABLE, false, + goog.a11y.aria.State.ORIENTATION, 'vertical', + goog.a11y.aria.State.READONLY, false, + goog.a11y.aria.State.RELEVANT, 'additions text', + goog.a11y.aria.State.REQUIRED, false, + goog.a11y.aria.State.SORT, 'none', + goog.a11y.aria.State.BUSY, false, + goog.a11y.aria.State.DISABLED, false, + goog.a11y.aria.State.HIDDEN, false, + goog.a11y.aria.State.INVALID, 'false'); + } + + return goog.a11y.aria.DefaultStateValueMap_; +}; diff --git a/float-no-zero/closure-library/closure/goog/a11y/aria/roles.js b/float-no-zero/closure-library/closure/goog/a11y/aria/roles.js new file mode 100644 index 0000000000..a282cc2d86 --- /dev/null +++ b/float-no-zero/closure-library/closure/goog/a11y/aria/roles.js @@ -0,0 +1,216 @@ +// Copyright 2013 The Closure Library Authors. All Rights Reserved. +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS-IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + + +/** + * @fileoverview The file contains generated enumerations for ARIA roles + * as defined by W3C ARIA standard: http://www.w3.org/TR/wai-aria/. + * + * This is auto-generated code. Do not manually edit! For more details + * about how to edit it via the generator check go/closure-ariagen. + */ + +goog.provide('goog.a11y.aria.Role'); + + +/** + * ARIA role values. + * @enum {string} + */ +goog.a11y.aria.Role = { + // ARIA role for an alert element that doesn't need to be explicitly closed. + ALERT: 'alert', + + // ARIA role for an alert dialog element that takes focus and must be closed. + ALERTDIALOG: 'alertdialog', + + // ARIA role for an application that implements its own keyboard navigation. + APPLICATION: 'application', + + // ARIA role for an article. + ARTICLE: 'article', + + // ARIA role for a banner containing mostly site content, not page content. + BANNER: 'banner', + + // ARIA role for a button element. + BUTTON: 'button', + + // ARIA role for a checkbox button element; use with the CHECKED state. + CHECKBOX: 'checkbox', + + // ARIA role for a column header of a table or grid. + COLUMNHEADER: 'columnheader', + + // ARIA role for a combo box element. + COMBOBOX: 'combobox', + + // ARIA role for a supporting section of the document. + COMPLEMENTARY: 'complementary', + + // ARIA role for a large perceivable region that contains information + // about the parent document. + CONTENTINFO: 'contentinfo', + + // ARIA role for a definition of a term or concept. + DEFINITION: 'definition', + + // ARIA role for a dialog, some descendant must take initial focus. + DIALOG: 'dialog', + + // ARIA role for a directory, like a table of contents. + DIRECTORY: 'directory', + + // ARIA role for a part of a page that's a document, not a web application. + DOCUMENT: 'document', + + // ARIA role for a landmark region logically considered one form. + FORM: 'form', + + // ARIA role for an interactive control of tabular data. + GRID: 'grid', + + // ARIA role for a cell in a grid. + GRIDCELL: 'gridcell', + + // ARIA role for a group of related elements like tree item siblings. + GROUP: 'group', + + // ARIA role for a heading element. + HEADING: 'heading', + + // ARIA role for a container of elements that together comprise one image. + IMG: 'img', + + // ARIA role for a link. + LINK: 'link', + + // ARIA role for a list of non-interactive list items. + LIST: 'list', + + // ARIA role for a listbox. + LISTBOX: 'listbox', + + // ARIA role for a list item. + LISTITEM: 'listitem', + + // ARIA role for a live region where new information is added. + LOG: 'log', + + // ARIA landmark role for the main content in a document. Use only once. + MAIN: 'main', + + // ARIA role for a live region of non-essential information that changes. + MARQUEE: 'marquee', + + // ARIA role for a mathematical expression. + MATH: 'math', + + // ARIA role for a popup menu. + MENU: 'menu', + + // ARIA role for a menubar element containing menu elements. + MENUBAR: 'menubar', + + // ARIA role for menu item elements. + MENU_ITEM: 'menuitem', + + // ARIA role for a checkbox box element inside a menu. + MENU_ITEM_CHECKBOX: 'menuitemcheckbox', + + // ARIA role for a radio button element inside a menu. + MENU_ITEM_RADIO: 'menuitemradio', + + // ARIA landmark role for a collection of navigation links. + NAVIGATION: 'navigation', + + // ARIA role for a section ancillary to the main content. + NOTE: 'note', + + // ARIA role for option items that are children of combobox, listbox, menu, + // radiogroup, or tree elements. + OPTION: 'option', + + // ARIA role for ignorable cosmetic elements with no semantic significance. + PRESENTATION: 'presentation', + + // ARIA role for a progress bar element. + PROGRESSBAR: 'progressbar', + + // ARIA role for a radio button element. + RADIO: 'radio', + + // ARIA role for a group of connected radio button elements. + RADIOGROUP: 'radiogroup', + + // ARIA role for an important region of the page. + REGION: 'region', + + // ARIA role for a row of cells in a grid. + ROW: 'row', + + // ARIA role for a group of one or more rows in a grid. + ROWGROUP: 'rowgroup', + + // ARIA role for a row header of a table or grid. + ROWHEADER: 'rowheader', + + // ARIA role for a scrollbar element. + SCROLLBAR: 'scrollbar', + + // ARIA landmark role for a part of the page providing search functionality. + SEARCH: 'search', + + // ARIA role for a menu separator. + SEPARATOR: 'separator', + + // ARIA role for a slider. + SLIDER: 'slider', + + // ARIA role for a spin button. + SPINBUTTON: 'spinbutton', + + // ARIA role for a live region with advisory info less severe than an alert. + STATUS: 'status', + + // ARIA role for a tab button. + TAB: 'tab', + + // ARIA role for a tab bar (i.e. a list of tab buttons). + TAB_LIST: 'tablist', + + // ARIA role for a tab page (i.e. the element holding tab contents). + TAB_PANEL: 'tabpanel', + + // ARIA role for a textbox element. + TEXTBOX: 'textbox', + + // ARIA role for an element displaying elapsed time or time remaining. + TIMER: 'timer', + + // ARIA role for a toolbar element. + TOOLBAR: 'toolbar', + + // ARIA role for a tooltip element. + TOOLTIP: 'tooltip', + + // ARIA role for a tree. + TREE: 'tree', + + // ARIA role for a grid whose rows can be expanded and collapsed like a tree. + TREEGRID: 'treegrid', + + // ARIA role for a tree item that sometimes may be expanded or collapsed. + TREEITEM: 'treeitem' +}; diff --git a/float-no-zero/closure-library/closure/goog/array/array.js b/float-no-zero/closure-library/closure/goog/array/array.js new file mode 100644 index 0000000000..0ec1491ebb --- /dev/null +++ b/float-no-zero/closure-library/closure/goog/array/array.js @@ -0,0 +1,1507 @@ +// Copyright 2006 The Closure Library Authors. All Rights Reserved. +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS-IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +/** + * @fileoverview Utilities for manipulating arrays. + * + */ + + +goog.provide('goog.array'); +goog.provide('goog.array.ArrayLike'); + +goog.require('goog.asserts'); + + +/** + * @define {boolean} NATIVE_ARRAY_PROTOTYPES indicates whether the code should + * rely on Array.prototype functions, if available. + * + * The Array.prototype functions can be defined by external libraries like + * Prototype and setting this flag to false forces closure to use its own + * goog.array implementation. + * + * If your javascript can be loaded by a third party site and you are wary about + * relying on the prototype functions, specify + * "--define goog.NATIVE_ARRAY_PROTOTYPES=false" to the JSCompiler. + * + * Setting goog.TRUSTED_SITE to false will automatically set + * NATIVE_ARRAY_PROTOTYPES to false. + */ +goog.define('goog.NATIVE_ARRAY_PROTOTYPES', goog.TRUSTED_SITE); + + +/** + * @typedef {Array|NodeList|Arguments|{length: number}} + */ +goog.array.ArrayLike; + + +/** + * Returns the last element in an array without removing it. + * @param {goog.array.ArrayLike} array The array. + * @return {*} Last item in array. + */ +goog.array.peek = function(array) { + return array[array.length - 1]; +}; + + +/** + * Reference to the original {@code Array.prototype}. + * @private + */ +goog.array.ARRAY_PROTOTYPE_ = Array.prototype; + + +// NOTE(arv): Since most of the array functions are generic it allows you to +// pass an array-like object. Strings have a length and are considered array- +// like. However, the 'in' operator does not work on strings so we cannot just +// use the array path even if the browser supports indexing into strings. We +// therefore end up splitting the string. + + +/** + * Returns the index of the first element of an array with a specified + * value, or -1 if the element is not present in the array. + * + * See {@link http://tinyurl.com/developer-mozilla-org-array-indexof} + * + * @param {goog.array.ArrayLike} arr The array to be searched. + * @param {*} obj The object for which we are searching. + * @param {number=} opt_fromIndex The index at which to start the search. If + * omitted the search starts at index 0. + * @return {number} The index of the first matching array element. + */ +goog.array.indexOf = goog.NATIVE_ARRAY_PROTOTYPES && + goog.array.ARRAY_PROTOTYPE_.indexOf ? + function(arr, obj, opt_fromIndex) { + goog.asserts.assert(arr.length != null); + + return goog.array.ARRAY_PROTOTYPE_.indexOf.call(arr, obj, opt_fromIndex); + } : + function(arr, obj, opt_fromIndex) { + var fromIndex = opt_fromIndex == null ? + 0 : (opt_fromIndex < 0 ? + Math.max(0, arr.length + opt_fromIndex) : opt_fromIndex); + + if (goog.isString(arr)) { + // Array.prototype.indexOf uses === so only strings should be found. + if (!goog.isString(obj) || obj.length != 1) { + return -1; + } + return arr.indexOf(obj, fromIndex); + } + + for (var i = fromIndex; i < arr.length; i++) { + if (i in arr && arr[i] === obj) + return i; + } + return -1; + }; + + +/** + * Returns the index of the last element of an array with a specified value, or + * -1 if the element is not present in the array. + * + * See {@link http://tinyurl.com/developer-mozilla-org-array-lastindexof} + * + * @param {goog.array.ArrayLike} arr The array to be searched. + * @param {*} obj The object for which we are searching. + * @param {?number=} opt_fromIndex The index at which to start the search. If + * omitted the search starts at the end of the array. + * @return {number} The index of the last matching array element. + */ +goog.array.lastIndexOf = goog.NATIVE_ARRAY_PROTOTYPES && + goog.array.ARRAY_PROTOTYPE_.lastIndexOf ? + function(arr, obj, opt_fromIndex) { + goog.asserts.assert(arr.length != null); + + // Firefox treats undefined and null as 0 in the fromIndex argument which + // leads it to always return -1 + var fromIndex = opt_fromIndex == null ? arr.length - 1 : opt_fromIndex; + return goog.array.ARRAY_PROTOTYPE_.lastIndexOf.call(arr, obj, fromIndex); + } : + function(arr, obj, opt_fromIndex) { + var fromIndex = opt_fromIndex == null ? arr.length - 1 : opt_fromIndex; + + if (fromIndex < 0) { + fromIndex = Math.max(0, arr.length + fromIndex); + } + + if (goog.isString(arr)) { + // Array.prototype.lastIndexOf uses === so only strings should be found. + if (!goog.isString(obj) || obj.length != 1) { + return -1; + } + return arr.lastIndexOf(obj, fromIndex); + } + + for (var i = fromIndex; i >= 0; i--) { + if (i in arr && arr[i] === obj) + return i; + } + return -1; + }; + + +/** + * Calls a function for each element in an array. Skips holes in the array. + * See {@link http://tinyurl.com/developer-mozilla-org-array-foreach} + * + * @param {Array.|goog.array.ArrayLike} arr Array or array like object over + * which to iterate. + * @param {?function(this: S, T, number, ?): ?} f The function to call for every + * element. This function takes 3 arguments (the element, the index and the + * array). The return value is ignored. + * @param {S=} opt_obj The object to be used as the value of 'this' within f. + * @template T,S + */ +goog.array.forEach = goog.NATIVE_ARRAY_PROTOTYPES && + goog.array.ARRAY_PROTOTYPE_.forEach ? + function(arr, f, opt_obj) { + goog.asserts.assert(arr.length != null); + + goog.array.ARRAY_PROTOTYPE_.forEach.call(arr, f, opt_obj); + } : + function(arr, f, opt_obj) { + var l = arr.length; // must be fixed during loop... see docs + var arr2 = goog.isString(arr) ? arr.split('') : arr; + for (var i = 0; i < l; i++) { + if (i in arr2) { + f.call(opt_obj, arr2[i], i, arr); + } + } + }; + + +/** + * Calls a function for each element in an array, starting from the last + * element rather than the first. + * + * @param {Array.|goog.array.ArrayLike} arr Array or array + * like object over which to iterate. + * @param {?function(this: S, T, number, ?): ?} f The function to call for every + * element. This function + * takes 3 arguments (the element, the index and the array). The return + * value is ignored. + * @param {S=} opt_obj The object to be used as the value of 'this' + * within f. + * @template T,S + */ +goog.array.forEachRight = function(arr, f, opt_obj) { + var l = arr.length; // must be fixed during loop... see docs + var arr2 = goog.isString(arr) ? arr.split('') : arr; + for (var i = l - 1; i >= 0; --i) { + if (i in arr2) { + f.call(opt_obj, arr2[i], i, arr); + } + } +}; + + +/** + * Calls a function for each element in an array, and if the function returns + * true adds the element to a new array. + * + * See {@link http://tinyurl.com/developer-mozilla-org-array-filter} + * + * @param {Array.|goog.array.ArrayLike} arr Array or array + * like object over which to iterate. + * @param {?function(this:S, T, number, ?):boolean} f The function to call for + * every element. This function + * takes 3 arguments (the element, the index and the array) and must + * return a Boolean. If the return value is true the element is added to the + * result array. If it is false the element is not included. + * @param {S=} opt_obj The object to be used as the value of 'this' + * within f. + * @return {!Array} a new array in which only elements that passed the test are + * present. + * @template T,S + */ +goog.array.filter = goog.NATIVE_ARRAY_PROTOTYPES && + goog.array.ARRAY_PROTOTYPE_.filter ? + function(arr, f, opt_obj) { + goog.asserts.assert(arr.length != null); + + return goog.array.ARRAY_PROTOTYPE_.filter.call(arr, f, opt_obj); + } : + function(arr, f, opt_obj) { + var l = arr.length; // must be fixed during loop... see docs + var res = []; + var resLength = 0; + var arr2 = goog.isString(arr) ? arr.split('') : arr; + for (var i = 0; i < l; i++) { + if (i in arr2) { + var val = arr2[i]; // in case f mutates arr2 + if (f.call(opt_obj, val, i, arr)) { + res[resLength++] = val; + } + } + } + return res; + }; + + +/** + * Calls a function for each element in an array and inserts the result into a + * new array. + * + * See {@link http://tinyurl.com/developer-mozilla-org-array-map} + * + * @param {Array.|goog.array.ArrayLike} arr Array or array + * like object over which to iterate. + * @param {?function(this:S, T, number, ?):?} f The function to call for every + * element. This function + * takes 3 arguments (the element, the index and the array) and should + * return something. The result will be inserted into a new array. + * @param {S=} opt_obj The object to be used as the value of 'this' + * within f. + * @return {!Array} a new array with the results from f. + * @template T,S + */ +goog.array.map = goog.NATIVE_ARRAY_PROTOTYPES && + goog.array.ARRAY_PROTOTYPE_.map ? + function(arr, f, opt_obj) { + goog.asserts.assert(arr.length != null); + + return goog.array.ARRAY_PROTOTYPE_.map.call(arr, f, opt_obj); + } : + function(arr, f, opt_obj) { + var l = arr.length; // must be fixed during loop... see docs + var res = new Array(l); + var arr2 = goog.isString(arr) ? arr.split('') : arr; + for (var i = 0; i < l; i++) { + if (i in arr2) { + res[i] = f.call(opt_obj, arr2[i], i, arr); + } + } + return res; + }; + + +/** + * Passes every element of an array into a function and accumulates the result. + * + * See {@link http://tinyurl.com/developer-mozilla-org-array-reduce} + * + * For example: + * var a = [1, 2, 3, 4]; + * goog.array.reduce(a, function(r, v, i, arr) {return r + v;}, 0); + * returns 10 + * + * @param {Array.|goog.array.ArrayLike} arr Array or array + * like object over which to iterate. + * @param {?function(this:S, R, T, number, ?) : R} f The function to call for + * every element. This function + * takes 4 arguments (the function's previous result or the initial value, + * the value of the current array element, the current array index, and the + * array itself) + * function(previousValue, currentValue, index, array). + * @param {?} val The initial value to pass into the function on the first call. + * @param {S=} opt_obj The object to be used as the value of 'this' + * within f. + * @return {R} Result of evaluating f repeatedly across the values of the array. + * @template T,S,R + */ +goog.array.reduce = function(arr, f, val, opt_obj) { + if (arr.reduce) { + if (opt_obj) { + return arr.reduce(goog.bind(f, opt_obj), val); + } else { + return arr.reduce(f, val); + } + } + var rval = val; + goog.array.forEach(arr, function(val, index) { + rval = f.call(opt_obj, rval, val, index, arr); + }); + return rval; +}; + + +/** + * Passes every element of an array into a function and accumulates the result, + * starting from the last element and working towards the first. + * + * See {@link http://tinyurl.com/developer-mozilla-org-array-reduceright} + * + * For example: + * var a = ['a', 'b', 'c']; + * goog.array.reduceRight(a, function(r, v, i, arr) {return r + v;}, ''); + * returns 'cba' + * + * @param {Array.|goog.array.ArrayLike} arr Array or array + * like object over which to iterate. + * @param {?function(this:S, R, T, number, ?) : R} f The function to call for + * every element. This function + * takes 4 arguments (the function's previous result or the initial value, + * the value of the current array element, the current array index, and the + * array itself) + * function(previousValue, currentValue, index, array). + * @param {?} val The initial value to pass into the function on the first call. + * @param {S=} opt_obj The object to be used as the value of 'this' + * within f. + * @return {R} Object returned as a result of evaluating f repeatedly across the + * values of the array. + * @template T,S,R + */ +goog.array.reduceRight = function(arr, f, val, opt_obj) { + if (arr.reduceRight) { + if (opt_obj) { + return arr.reduceRight(goog.bind(f, opt_obj), val); + } else { + return arr.reduceRight(f, val); + } + } + var rval = val; + goog.array.forEachRight(arr, function(val, index) { + rval = f.call(opt_obj, rval, val, index, arr); + }); + return rval; +}; + + +/** + * Calls f for each element of an array. If any call returns true, some() + * returns true (without checking the remaining elements). If all calls + * return false, some() returns false. + * + * See {@link http://tinyurl.com/developer-mozilla-org-array-some} + * + * @param {Array.|goog.array.ArrayLike} arr Array or array + * like object over which to iterate. + * @param {?function(this:S, T, number, ?) : boolean} f The function to call for + * for every element. This function takes 3 arguments (the element, the + * index and the array) and should return a boolean. + * @param {S=} opt_obj The object to be used as the value of 'this' + * within f. + * @return {boolean} true if any element passes the test. + * @template T,S + */ +goog.array.some = goog.NATIVE_ARRAY_PROTOTYPES && + goog.array.ARRAY_PROTOTYPE_.some ? + function(arr, f, opt_obj) { + goog.asserts.assert(arr.length != null); + + return goog.array.ARRAY_PROTOTYPE_.some.call(arr, f, opt_obj); + } : + function(arr, f, opt_obj) { + var l = arr.length; // must be fixed during loop... see docs + var arr2 = goog.isString(arr) ? arr.split('') : arr; + for (var i = 0; i < l; i++) { + if (i in arr2 && f.call(opt_obj, arr2[i], i, arr)) { + return true; + } + } + return false; + }; + + +/** + * Call f for each element of an array. If all calls return true, every() + * returns true. If any call returns false, every() returns false and + * does not continue to check the remaining elements. + * + * See {@link http://tinyurl.com/developer-mozilla-org-array-every} + * + * @param {Array.|goog.array.ArrayLike} arr Array or array + * like object over which to iterate. + * @param {?function(this:S, T, number, ?) : boolean} f The function to call for + * for every element. This function takes 3 arguments (the element, the + * index and the array) and should return a boolean. + * @param {S=} opt_obj The object to be used as the value of 'this' + * within f. + * @return {boolean} false if any element fails the test. + * @template T,S + */ +goog.array.every = goog.NATIVE_ARRAY_PROTOTYPES && + goog.array.ARRAY_PROTOTYPE_.every ? + function(arr, f, opt_obj) { + goog.asserts.assert(arr.length != null); + + return goog.array.ARRAY_PROTOTYPE_.every.call(arr, f, opt_obj); + } : + function(arr, f, opt_obj) { + var l = arr.length; // must be fixed during loop... see docs + var arr2 = goog.isString(arr) ? arr.split('') : arr; + for (var i = 0; i < l; i++) { + if (i in arr2 && !f.call(opt_obj, arr2[i], i, arr)) { + return false; + } + } + return true; + }; + + +/** + * Counts the array elements that fulfill the predicate, i.e. for which the + * callback function returns true. Skips holes in the array. + * + * @param {!(Array.|goog.array.ArrayLike)} arr Array or array like object + * over which to iterate. + * @param {function(this: S, T, number, ?): boolean} f The function to call for + * every element. Takes 3 arguments (the element, the index and the array). + * @param {S=} opt_obj The object to be used as the value of 'this' within f. + * @return {number} The number of the matching elements. + * @template T,S + */ +goog.array.count = function(arr, f, opt_obj) { + var count = 0; + goog.array.forEach(arr, function(element, index, arr) { + if (f.call(opt_obj, element, index, arr)) { + ++count; + } + }, opt_obj); + return count; +}; + + +/** + * Search an array for the first element that satisfies a given condition and + * return that element. + * @param {Array.|goog.array.ArrayLike} arr Array or array + * like object over which to iterate. + * @param {?function(this:S, T, number, ?) : boolean} f The function to call + * for every element. This function takes 3 arguments (the element, the + * index and the array) and should return a boolean. + * @param {S=} opt_obj An optional "this" context for the function. + * @return {T} The first array element that passes the test, or null if no + * element is found. + * @template T,S + */ +goog.array.find = function(arr, f, opt_obj) { + var i = goog.array.findIndex(arr, f, opt_obj); + return i < 0 ? null : goog.isString(arr) ? arr.charAt(i) : arr[i]; +}; + + +/** + * Search an array for the first element that satisfies a given condition and + * return its index. + * @param {Array.|goog.array.ArrayLike} arr Array or array + * like object over which to iterate. + * @param {?function(this:S, T, number, ?) : boolean} f The function to call for + * every element. This function + * takes 3 arguments (the element, the index and the array) and should + * return a boolean. + * @param {S=} opt_obj An optional "this" context for the function. + * @return {number} The index of the first array element that passes the test, + * or -1 if no element is found. + * @template T,S + */ +goog.array.findIndex = function(arr, f, opt_obj) { + var l = arr.length; // must be fixed during loop... see docs + var arr2 = goog.isString(arr) ? arr.split('') : arr; + for (var i = 0; i < l; i++) { + if (i in arr2 && f.call(opt_obj, arr2[i], i, arr)) { + return i; + } + } + return -1; +}; + + +/** + * Search an array (in reverse order) for the last element that satisfies a + * given condition and return that element. + * @param {Array.|goog.array.ArrayLike} arr Array or array + * like object over which to iterate. + * @param {?function(this:S, T, number, ?) : boolean} f The function to call + * for every element. This function + * takes 3 arguments (the element, the index and the array) and should + * return a boolean. + * @param {S=} opt_obj An optional "this" context for the function. + * @return {T} The last array element that passes the test, or null if no + * element is found. + * @template T,S + */ +goog.array.findRight = function(arr, f, opt_obj) { + var i = goog.array.findIndexRight(arr, f, opt_obj); + return i < 0 ? null : goog.isString(arr) ? arr.charAt(i) : arr[i]; +}; + + +/** + * Search an array (in reverse order) for the last element that satisfies a + * given condition and return its index. + * @param {Array.|goog.array.ArrayLike} arr Array or array + * like object over which to iterate. + * @param {?function(this:S, T, number, ?) : boolean} f The function to call + * for every element. This function + * takes 3 arguments (the element, the index and the array) and should + * return a boolean. + * @param {Object=} opt_obj An optional "this" context for the function. + * @return {number} The index of the last array element that passes the test, + * or -1 if no element is found. + * @template T,S + */ +goog.array.findIndexRight = function(arr, f, opt_obj) { + var l = arr.length; // must be fixed during loop... see docs + var arr2 = goog.isString(arr) ? arr.split('') : arr; + for (var i = l - 1; i >= 0; i--) { + if (i in arr2 && f.call(opt_obj, arr2[i], i, arr)) { + return i; + } + } + return -1; +}; + + +/** + * Whether the array contains the given object. + * @param {goog.array.ArrayLike} arr The array to test for the presence of the + * element. + * @param {*} obj The object for which to test. + * @return {boolean} true if obj is present. + */ +goog.array.contains = function(arr, obj) { + return goog.array.indexOf(arr, obj) >= 0; +}; + + +/** + * Whether the array is empty. + * @param {goog.array.ArrayLike} arr The array to test. + * @return {boolean} true if empty. + */ +goog.array.isEmpty = function(arr) { + return arr.length == 0; +}; + + +/** + * Clears the array. + * @param {goog.array.ArrayLike} arr Array or array like object to clear. + */ +goog.array.clear = function(arr) { + // For non real arrays we don't have the magic length so we delete the + // indices. + if (!goog.isArray(arr)) { + for (var i = arr.length - 1; i >= 0; i--) { + delete arr[i]; + } + } + arr.length = 0; +}; + + +/** + * Pushes an item into an array, if it's not already in the array. + * @param {Array.} arr Array into which to insert the item. + * @param {T} obj Value to add. + * @template T + */ +goog.array.insert = function(arr, obj) { + if (!goog.array.contains(arr, obj)) { + arr.push(obj); + } +}; + + +/** + * Inserts an object at the given index of the array. + * @param {goog.array.ArrayLike} arr The array to modify. + * @param {*} obj The object to insert. + * @param {number=} opt_i The index at which to insert the object. If omitted, + * treated as 0. A negative index is counted from the end of the array. + */ +goog.array.insertAt = function(arr, obj, opt_i) { + goog.array.splice(arr, opt_i, 0, obj); +}; + + +/** + * Inserts at the given index of the array, all elements of another array. + * @param {goog.array.ArrayLike} arr The array to modify. + * @param {goog.array.ArrayLike} elementsToAdd The array of elements to add. + * @param {number=} opt_i The index at which to insert the object. If omitted, + * treated as 0. A negative index is counted from the end of the array. + */ +goog.array.insertArrayAt = function(arr, elementsToAdd, opt_i) { + goog.partial(goog.array.splice, arr, opt_i, 0).apply(null, elementsToAdd); +}; + + +/** + * Inserts an object into an array before a specified object. + * @param {Array.} arr The array to modify. + * @param {T} obj The object to insert. + * @param {T=} opt_obj2 The object before which obj should be inserted. If obj2 + * is omitted or not found, obj is inserted at the end of the array. + * @template T + */ +goog.array.insertBefore = function(arr, obj, opt_obj2) { + var i; + if (arguments.length == 2 || (i = goog.array.indexOf(arr, opt_obj2)) < 0) { + arr.push(obj); + } else { + goog.array.insertAt(arr, obj, i); + } +}; + + +/** + * Removes the first occurrence of a particular value from an array. + * @param {goog.array.ArrayLike} arr Array from which to remove value. + * @param {*} obj Object to remove. + * @return {boolean} True if an element was removed. + */ +goog.array.remove = function(arr, obj) { + var i = goog.array.indexOf(arr, obj); + var rv; + if ((rv = i >= 0)) { + goog.array.removeAt(arr, i); + } + return rv; +}; + + +/** + * Removes from an array the element at index i + * @param {goog.array.ArrayLike} arr Array or array like object from which to + * remove value. + * @param {number} i The index to remove. + * @return {boolean} True if an element was removed. + */ +goog.array.removeAt = function(arr, i) { + goog.asserts.assert(arr.length != null); + + // use generic form of splice + // splice returns the removed items and if successful the length of that + // will be 1 + return goog.array.ARRAY_PROTOTYPE_.splice.call(arr, i, 1).length == 1; +}; + + +/** + * Removes the first value that satisfies the given condition. + * @param {Array.|goog.array.ArrayLike} arr Array or array + * like object over which to iterate. + * @param {?function(this:S, T, number, ?) : boolean} f The function to call + * for every element. This function + * takes 3 arguments (the element, the index and the array) and should + * return a boolean. + * @param {S=} opt_obj An optional "this" context for the function. + * @return {boolean} True if an element was removed. + * @template T,S + */ +goog.array.removeIf = function(arr, f, opt_obj) { + var i = goog.array.findIndex(arr, f, opt_obj); + if (i >= 0) { + goog.array.removeAt(arr, i); + return true; + } + return false; +}; + + +/** + * Returns a new array that is the result of joining the arguments. If arrays + * are passed then their items are added, however, if non-arrays are passed they + * will be added to the return array as is. + * + * Note that ArrayLike objects will be added as is, rather than having their + * items added. + * + * goog.array.concat([1, 2], [3, 4]) -> [1, 2, 3, 4] + * goog.array.concat(0, [1, 2]) -> [0, 1, 2] + * goog.array.concat([1, 2], null) -> [1, 2, null] + * + * There is bug in all current versions of IE (6, 7 and 8) where arrays created + * in an iframe become corrupted soon (not immediately) after the iframe is + * destroyed. This is common if loading data via goog.net.IframeIo, for example. + * This corruption only affects the concat method which will start throwing + * Catastrophic Errors (#-2147418113). + * + * See http://endoflow.com/scratch/corrupted-arrays.html for a test case. + * + * Internally goog.array should use this, so that all methods will continue to + * work on these broken array objects. + * + * @param {...*} var_args Items to concatenate. Arrays will have each item + * added, while primitives and objects will be added as is. + * @return {!Array} The new resultant array. + */ +goog.array.concat = function(var_args) { + return goog.array.ARRAY_PROTOTYPE_.concat.apply( + goog.array.ARRAY_PROTOTYPE_, arguments); +}; + + +/** + * Converts an object to an array. + * @param {goog.array.ArrayLike} object The object to convert to an array. + * @return {!Array} The object converted into an array. If object has a + * length property, every property indexed with a non-negative number + * less than length will be included in the result. If object does not + * have a length property, an empty array will be returned. + */ +goog.array.toArray = function(object) { + var length = object.length; + + // If length is not a number the following it false. This case is kept for + // backwards compatibility since there are callers that pass objects that are + // not array like. + if (length > 0) { + var rv = new Array(length); + for (var i = 0; i < length; i++) { + rv[i] = object[i]; + } + return rv; + } + return []; +}; + + +/** + * Does a shallow copy of an array. + * @param {goog.array.ArrayLike} arr Array or array-like object to clone. + * @return {!Array} Clone of the input array. + */ +goog.array.clone = goog.array.toArray; + + +/** + * Extends an array with another array, element, or "array like" object. + * This function operates 'in-place', it does not create a new Array. + * + * Example: + * var a = []; + * goog.array.extend(a, [0, 1]); + * a; // [0, 1] + * goog.array.extend(a, 2); + * a; // [0, 1, 2] + * + * @param {Array} arr1 The array to modify. + * @param {...*} var_args The elements or arrays of elements to add to arr1. + */ +goog.array.extend = function(arr1, var_args) { + for (var i = 1; i < arguments.length; i++) { + var arr2 = arguments[i]; + // If we have an Array or an Arguments object we can just call push + // directly. + var isArrayLike; + if (goog.isArray(arr2) || + // Detect Arguments. ES5 says that the [[Class]] of an Arguments object + // is "Arguments" but only V8 and JSC/Safari gets this right. We instead + // detect Arguments by checking for array like and presence of "callee". + (isArrayLike = goog.isArrayLike(arr2)) && + // The getter for callee throws an exception in strict mode + // according to section 10.6 in ES5 so check for presence instead. + Object.prototype.hasOwnProperty.call(arr2, 'callee')) { + arr1.push.apply(arr1, arr2); + } else if (isArrayLike) { + // Otherwise loop over arr2 to prevent copying the object. + var len1 = arr1.length; + var len2 = arr2.length; + for (var j = 0; j < len2; j++) { + arr1[len1 + j] = arr2[j]; + } + } else { + arr1.push(arr2); + } + } +}; + + +/** + * Adds or removes elements from an array. This is a generic version of Array + * splice. This means that it might work on other objects similar to arrays, + * such as the arguments object. + * + * @param {goog.array.ArrayLike} arr The array to modify. + * @param {number|undefined} index The index at which to start changing the + * array. If not defined, treated as 0. + * @param {number} howMany How many elements to remove (0 means no removal. A + * value below 0 is treated as zero and so is any other non number. Numbers + * are floored). + * @param {...*} var_args Optional, additional elements to insert into the + * array. + * @return {!Array} the removed elements. + */ +goog.array.splice = function(arr, index, howMany, var_args) { + goog.asserts.assert(arr.length != null); + + return goog.array.ARRAY_PROTOTYPE_.splice.apply( + arr, goog.array.slice(arguments, 1)); +}; + + +/** + * Returns a new array from a segment of an array. This is a generic version of + * Array slice. This means that it might work on other objects similar to + * arrays, such as the arguments object. + * + * @param {Array.|goog.array.ArrayLike} arr The array from + * which to copy a segment. + * @param {number} start The index of the first element to copy. + * @param {number=} opt_end The index after the last element to copy. + * @return {!Array.} A new array containing the specified segment of the + * original array. + * @template T + */ +goog.array.slice = function(arr, start, opt_end) { + goog.asserts.assert(arr.length != null); + + // passing 1 arg to slice is not the same as passing 2 where the second is + // null or undefined (in that case the second argument is treated as 0). + // we could use slice on the arguments object and then use apply instead of + // testing the length + if (arguments.length <= 2) { + return goog.array.ARRAY_PROTOTYPE_.slice.call(arr, start); + } else { + return goog.array.ARRAY_PROTOTYPE_.slice.call(arr, start, opt_end); + } +}; + + +/** + * Removes all duplicates from an array (retaining only the first + * occurrence of each array element). This function modifies the + * array in place and doesn't change the order of the non-duplicate items. + * + * For objects, duplicates are identified as having the same unique ID as + * defined by {@link goog.getUid}. + * + * Runtime: N, + * Worstcase space: 2N (no dupes) + * + * @param {goog.array.ArrayLike} arr The array from which to remove duplicates. + * @param {Array=} opt_rv An optional array in which to return the results, + * instead of performing the removal inplace. If specified, the original + * array will remain unchanged. + */ +goog.array.removeDuplicates = function(arr, opt_rv) { + var returnArray = opt_rv || arr; + + var seen = {}, cursorInsert = 0, cursorRead = 0; + while (cursorRead < arr.length) { + var current = arr[cursorRead++]; + + // Prefix each type with a single character representing the type to + // prevent conflicting keys (e.g. true and 'true'). + var key = goog.isObject(current) ? + 'o' + goog.getUid(current) : + (typeof current).charAt(0) + current; + + if (!Object.prototype.hasOwnProperty.call(seen, key)) { + seen[key] = true; + returnArray[cursorInsert++] = current; + } + } + returnArray.length = cursorInsert; +}; + + +/** + * Searches the specified array for the specified target using the binary + * search algorithm. If no opt_compareFn is specified, elements are compared + * using goog.array.defaultCompare, which compares the elements + * using the built in < and > operators. This will produce the expected + * behavior for homogeneous arrays of String(s) and Number(s). The array + * specified must be sorted in ascending order (as defined by the + * comparison function). If the array is not sorted, results are undefined. + * If the array contains multiple instances of the specified target value, any + * of these instances may be found. + * + * Runtime: O(log n) + * + * @param {goog.array.ArrayLike} arr The array to be searched. + * @param {*} target The sought value. + * @param {Function=} opt_compareFn Optional comparison function by which the + * array is ordered. Should take 2 arguments to compare, and return a + * negative number, zero, or a positive number depending on whether the + * first argument is less than, equal to, or greater than the second. + * @return {number} Lowest index of the target value if found, otherwise + * (-(insertion point) - 1). The insertion point is where the value should + * be inserted into arr to preserve the sorted property. Return value >= 0 + * iff target is found. + */ +goog.array.binarySearch = function(arr, target, opt_compareFn) { + return goog.array.binarySearch_(arr, + opt_compareFn || goog.array.defaultCompare, false /* isEvaluator */, + target); +}; + + +/** + * Selects an index in the specified array using the binary search algorithm. + * The evaluator receives an element and determines whether the desired index + * is before, at, or after it. The evaluator must be consistent (formally, + * goog.array.map(goog.array.map(arr, evaluator, opt_obj), goog.math.sign) + * must be monotonically non-increasing). + * + * Runtime: O(log n) + * + * @param {goog.array.ArrayLike} arr The array to be searched. + * @param {Function} evaluator Evaluator function that receives 3 arguments + * (the element, the index and the array). Should return a negative number, + * zero, or a positive number depending on whether the desired index is + * before, at, or after the element passed to it. + * @param {Object=} opt_obj The object to be used as the value of 'this' + * within evaluator. + * @return {number} Index of the leftmost element matched by the evaluator, if + * such exists; otherwise (-(insertion point) - 1). The insertion point is + * the index of the first element for which the evaluator returns negative, + * or arr.length if no such element exists. The return value is non-negative + * iff a match is found. + */ +goog.array.binarySelect = function(arr, evaluator, opt_obj) { + return goog.array.binarySearch_(arr, evaluator, true /* isEvaluator */, + undefined /* opt_target */, opt_obj); +}; + + +/** + * Implementation of a binary search algorithm which knows how to use both + * comparison functions and evaluators. If an evaluator is provided, will call + * the evaluator with the given optional data object, conforming to the + * interface defined in binarySelect. Otherwise, if a comparison function is + * provided, will call the comparison function against the given data object. + * + * This implementation purposefully does not use goog.bind or goog.partial for + * performance reasons. + * + * Runtime: O(log n) + * + * @param {goog.array.ArrayLike} arr The array to be searched. + * @param {Function} compareFn Either an evaluator or a comparison function, + * as defined by binarySearch and binarySelect above. + * @param {boolean} isEvaluator Whether the function is an evaluator or a + * comparison function. + * @param {*=} opt_target If the function is a comparison function, then this is + * the target to binary search for. + * @param {Object=} opt_selfObj If the function is an evaluator, this is an + * optional this object for the evaluator. + * @return {number} Lowest index of the target value if found, otherwise + * (-(insertion point) - 1). The insertion point is where the value should + * be inserted into arr to preserve the sorted property. Return value >= 0 + * iff target is found. + * @private + */ +goog.array.binarySearch_ = function(arr, compareFn, isEvaluator, opt_target, + opt_selfObj) { + var left = 0; // inclusive + var right = arr.length; // exclusive + var found; + while (left < right) { + var middle = (left + right) >> 1; + var compareResult; + if (isEvaluator) { + compareResult = compareFn.call(opt_selfObj, arr[middle], middle, arr); + } else { + compareResult = compareFn(opt_target, arr[middle]); + } + if (compareResult > 0) { + left = middle + 1; + } else { + right = middle; + // We are looking for the lowest index so we can't return immediately. + found = !compareResult; + } + } + // left is the index if found, or the insertion point otherwise. + // ~left is a shorthand for -left - 1. + return found ? left : ~left; +}; + + +/** + * Sorts the specified array into ascending order. If no opt_compareFn is + * specified, elements are compared using + * goog.array.defaultCompare, which compares the elements using + * the built in < and > operators. This will produce the expected behavior + * for homogeneous arrays of String(s) and Number(s), unlike the native sort, + * but will give unpredictable results for heterogenous lists of strings and + * numbers with different numbers of digits. + * + * This sort is not guaranteed to be stable. + * + * Runtime: Same as Array.prototype.sort + * + * @param {Array.} arr The array to be sorted. + * @param {?function(T,T):number=} opt_compareFn Optional comparison + * function by which the + * array is to be ordered. Should take 2 arguments to compare, and return a + * negative number, zero, or a positive number depending on whether the + * first argument is less than, equal to, or greater than the second. + * @template T + */ +goog.array.sort = function(arr, opt_compareFn) { + // TODO(arv): Update type annotation since null is not accepted. + goog.asserts.assert(arr.length != null); + + goog.array.ARRAY_PROTOTYPE_.sort.call( + arr, opt_compareFn || goog.array.defaultCompare); +}; + + +/** + * Sorts the specified array into ascending order in a stable way. If no + * opt_compareFn is specified, elements are compared using + * goog.array.defaultCompare, which compares the elements using + * the built in < and > operators. This will produce the expected behavior + * for homogeneous arrays of String(s) and Number(s). + * + * Runtime: Same as Array.prototype.sort, plus an additional + * O(n) overhead of copying the array twice. + * + * @param {Array.} arr The array to be sorted. + * @param {?function(T, T): number=} opt_compareFn Optional comparison function + * by which the array is to be ordered. Should take 2 arguments to compare, + * and return a negative number, zero, or a positive number depending on + * whether the first argument is less than, equal to, or greater than the + * second. + * @template T + */ +goog.array.stableSort = function(arr, opt_compareFn) { + for (var i = 0; i < arr.length; i++) { + arr[i] = {index: i, value: arr[i]}; + } + var valueCompareFn = opt_compareFn || goog.array.defaultCompare; + function stableCompareFn(obj1, obj2) { + return valueCompareFn(obj1.value, obj2.value) || obj1.index - obj2.index; + }; + goog.array.sort(arr, stableCompareFn); + for (var i = 0; i < arr.length; i++) { + arr[i] = arr[i].value; + } +}; + + +/** + * Sorts an array of objects by the specified object key and compare + * function. If no compare function is provided, the key values are + * compared in ascending order using goog.array.defaultCompare. + * This won't work for keys that get renamed by the compiler. So use + * {'foo': 1, 'bar': 2} rather than {foo: 1, bar: 2}. + * @param {Array.} arr An array of objects to sort. + * @param {string} key The object key to sort by. + * @param {Function=} opt_compareFn The function to use to compare key + * values. + */ +goog.array.sortObjectsByKey = function(arr, key, opt_compareFn) { + var compare = opt_compareFn || goog.array.defaultCompare; + goog.array.sort(arr, function(a, b) { + return compare(a[key], b[key]); + }); +}; + + +/** + * Tells if the array is sorted. + * @param {!Array.} arr The array. + * @param {?function(T,T):number=} opt_compareFn Function to compare the + * array elements. + * Should take 2 arguments to compare, and return a negative number, zero, + * or a positive number depending on whether the first argument is less + * than, equal to, or greater than the second. + * @param {boolean=} opt_strict If true no equal elements are allowed. + * @return {boolean} Whether the array is sorted. + * @template T + */ +goog.array.isSorted = function(arr, opt_compareFn, opt_strict) { + var compare = opt_compareFn || goog.array.defaultCompare; + for (var i = 1; i < arr.length; i++) { + var compareResult = compare(arr[i - 1], arr[i]); + if (compareResult > 0 || compareResult == 0 && opt_strict) { + return false; + } + } + return true; +}; + + +/** + * Compares two arrays for equality. Two arrays are considered equal if they + * have the same length and their corresponding elements are equal according to + * the comparison function. + * + * @param {goog.array.ArrayLike} arr1 The first array to compare. + * @param {goog.array.ArrayLike} arr2 The second array to compare. + * @param {Function=} opt_equalsFn Optional comparison function. + * Should take 2 arguments to compare, and return true if the arguments + * are equal. Defaults to {@link goog.array.defaultCompareEquality} which + * compares the elements using the built-in '===' operator. + * @return {boolean} Whether the two arrays are equal. + */ +goog.array.equals = function(arr1, arr2, opt_equalsFn) { + if (!goog.isArrayLike(arr1) || !goog.isArrayLike(arr2) || + arr1.length != arr2.length) { + return false; + } + var l = arr1.length; + var equalsFn = opt_equalsFn || goog.array.defaultCompareEquality; + for (var i = 0; i < l; i++) { + if (!equalsFn(arr1[i], arr2[i])) { + return false; + } + } + return true; +}; + + +/** + * @deprecated Use {@link goog.array.equals}. + * @param {goog.array.ArrayLike} arr1 See {@link goog.array.equals}. + * @param {goog.array.ArrayLike} arr2 See {@link goog.array.equals}. + * @param {Function=} opt_equalsFn See {@link goog.array.equals}. + * @return {boolean} See {@link goog.array.equals}. + */ +goog.array.compare = function(arr1, arr2, opt_equalsFn) { + return goog.array.equals(arr1, arr2, opt_equalsFn); +}; + + +/** + * 3-way array compare function. + * @param {!goog.array.ArrayLike} arr1 The first array to compare. + * @param {!goog.array.ArrayLike} arr2 The second array to compare. + * @param {?function(?, ?): number=} opt_compareFn Optional comparison function + * by which the array is to be ordered. Should take 2 arguments to compare, + * and return a negative number, zero, or a positive number depending on + * whether the first argument is less than, equal to, or greater than the + * second. + * @return {number} Negative number, zero, or a positive number depending on + * whether the first argument is less than, equal to, or greater than the + * second. + */ +goog.array.compare3 = function(arr1, arr2, opt_compareFn) { + var compare = opt_compareFn || goog.array.defaultCompare; + var l = Math.min(arr1.length, arr2.length); + for (var i = 0; i < l; i++) { + var result = compare(arr1[i], arr2[i]); + if (result != 0) { + return result; + } + } + return goog.array.defaultCompare(arr1.length, arr2.length); +}; + + +/** + * Compares its two arguments for order, using the built in < and > + * operators. + * @param {*} a The first object to be compared. + * @param {*} b The second object to be compared. + * @return {number} A negative number, zero, or a positive number as the first + * argument is less than, equal to, or greater than the second. + */ +goog.array.defaultCompare = function(a, b) { + return a > b ? 1 : a < b ? -1 : 0; +}; + + +/** + * Compares its two arguments for equality, using the built in === operator. + * @param {*} a The first object to compare. + * @param {*} b The second object to compare. + * @return {boolean} True if the two arguments are equal, false otherwise. + */ +goog.array.defaultCompareEquality = function(a, b) { + return a === b; +}; + + +/** + * Inserts a value into a sorted array. The array is not modified if the + * value is already present. + * @param {Array.} array The array to modify. + * @param {T} value The object to insert. + * @param {?function(T,T):number=} opt_compareFn Optional comparison function by + * which the + * array is ordered. Should take 2 arguments to compare, and return a + * negative number, zero, or a positive number depending on whether the + * first argument is less than, equal to, or greater than the second. + * @return {boolean} True if an element was inserted. + * @template T + */ +goog.array.binaryInsert = function(array, value, opt_compareFn) { + var index = goog.array.binarySearch(array, value, opt_compareFn); + if (index < 0) { + goog.array.insertAt(array, value, -(index + 1)); + return true; + } + return false; +}; + + +/** + * Removes a value from a sorted array. + * @param {Array} array The array to modify. + * @param {*} value The object to remove. + * @param {Function=} opt_compareFn Optional comparison function by which the + * array is ordered. Should take 2 arguments to compare, and return a + * negative number, zero, or a positive number depending on whether the + * first argument is less than, equal to, or greater than the second. + * @return {boolean} True if an element was removed. + */ +goog.array.binaryRemove = function(array, value, opt_compareFn) { + var index = goog.array.binarySearch(array, value, opt_compareFn); + return (index >= 0) ? goog.array.removeAt(array, index) : false; +}; + + +/** + * Splits an array into disjoint buckets according to a splitting function. + * @param {Array.} array The array. + * @param {function(this:S, T,number,Array.):?} sorter Function to call for + * every element. This takes 3 arguments (the element, the index and the + * array) and must return a valid object key (a string, number, etc), or + * undefined, if that object should not be placed in a bucket. + * @param {S=} opt_obj The object to be used as the value of 'this' within + * sorter. + * @return {!Object} An object, with keys being all of the unique return values + * of sorter, and values being arrays containing the items for + * which the splitter returned that key. + * @template T,S + */ +goog.array.bucket = function(array, sorter, opt_obj) { + var buckets = {}; + + for (var i = 0; i < array.length; i++) { + var value = array[i]; + var key = sorter.call(opt_obj, value, i, array); + if (goog.isDef(key)) { + // Push the value to the right bucket, creating it if necessary. + var bucket = buckets[key] || (buckets[key] = []); + bucket.push(value); + } + } + + return buckets; +}; + + +/** + * Creates a new object built from the provided array and the key-generation + * function. + * @param {Array.|goog.array.ArrayLike} arr Array or array like object over + * which to iterate whose elements will be the values in the new object. + * @param {?function(this:S, T, number, ?) : string} keyFunc The function to + * call for every element. This function takes 3 arguments (the element, the + * index and the array) and should return a string that will be used as the + * key for the element in the new object. If the function returns the same + * key for more than one element, the value for that key is + * implementation-defined. + * @param {S=} opt_obj The object to be used as the value of 'this' + * within keyFunc. + * @return {!Object.} The new object. + * @template T,S + */ +goog.array.toObject = function(arr, keyFunc, opt_obj) { + var ret = {}; + goog.array.forEach(arr, function(element, index) { + ret[keyFunc.call(opt_obj, element, index, arr)] = element; + }); + return ret; +}; + + +/** + * Creates a range of numbers in an arithmetic progression. + * + * Range takes 1, 2, or 3 arguments: + *
+ * range(5) is the same as range(0, 5, 1) and produces [0, 1, 2, 3, 4]
+ * range(2, 5) is the same as range(2, 5, 1) and produces [2, 3, 4]
+ * range(-2, -5, -1) produces [-2, -3, -4]
+ * range(-2, -5, 1) produces [], since stepping by 1 wouldn't ever reach -5.
+ * 
+ * + * @param {number} startOrEnd The starting value of the range if an end argument + * is provided. Otherwise, the start value is 0, and this is the end value. + * @param {number=} opt_end The optional end value of the range. + * @param {number=} opt_step The step size between range values. Defaults to 1 + * if opt_step is undefined or 0. + * @return {!Array.} An array of numbers for the requested range. May be + * an empty array if adding the step would not converge toward the end + * value. + */ +goog.array.range = function(startOrEnd, opt_end, opt_step) { + var array = []; + var start = 0; + var end = startOrEnd; + var step = opt_step || 1; + if (opt_end !== undefined) { + start = startOrEnd; + end = opt_end; + } + + if (step * (end - start) < 0) { + // Sign mismatch: start + step will never reach the end value. + return []; + } + + if (step > 0) { + for (var i = start; i < end; i += step) { + array.push(i); + } + } else { + for (var i = start; i > end; i += step) { + array.push(i); + } + } + return array; +}; + + +/** + * Returns an array consisting of the given value repeated N times. + * + * @param {*} value The value to repeat. + * @param {number} n The repeat count. + * @return {!Array} An array with the repeated value. + */ +goog.array.repeat = function(value, n) { + var array = []; + for (var i = 0; i < n; i++) { + array[i] = value; + } + return array; +}; + + +/** + * Returns an array consisting of every argument with all arrays + * expanded in-place recursively. + * + * @param {...*} var_args The values to flatten. + * @return {!Array} An array containing the flattened values. + */ +goog.array.flatten = function(var_args) { + var result = []; + for (var i = 0; i < arguments.length; i++) { + var element = arguments[i]; + if (goog.isArray(element)) { + result.push.apply(result, goog.array.flatten.apply(null, element)); + } else { + result.push(element); + } + } + return result; +}; + + +/** + * Rotates an array in-place. After calling this method, the element at + * index i will be the element previously at index (i - n) % + * array.length, for all values of i between 0 and array.length - 1, + * inclusive. + * + * For example, suppose list comprises [t, a, n, k, s]. After invoking + * rotate(array, 1) (or rotate(array, -4)), array will comprise [s, t, a, n, k]. + * + * @param {!Array.} array The array to rotate. + * @param {number} n The amount to rotate. + * @return {!Array.} The array. + * @template T + */ +goog.array.rotate = function(array, n) { + goog.asserts.assert(array.length != null); + + if (array.length) { + n %= array.length; + if (n > 0) { + goog.array.ARRAY_PROTOTYPE_.unshift.apply(array, array.splice(-n, n)); + } else if (n < 0) { + goog.array.ARRAY_PROTOTYPE_.push.apply(array, array.splice(0, -n)); + } + } + return array; +}; + + +/** + * Moves one item of an array to a new position keeping the order of the rest + * of the items. Example use case: keeping a list of JavaScript objects + * synchronized with the corresponding list of DOM elements after one of the + * elements has been dragged to a new position. + * @param {!(Array|Arguments|{length:number})} arr The array to modify. + * @param {number} fromIndex Index of the item to move between 0 and + * {@code arr.length - 1}. + * @param {number} toIndex Target index between 0 and {@code arr.length - 1}. + */ +goog.array.moveItem = function(arr, fromIndex, toIndex) { + goog.asserts.assert(fromIndex >= 0 && fromIndex < arr.length); + goog.asserts.assert(toIndex >= 0 && toIndex < arr.length); + // Remove 1 item at fromIndex. + var removedItems = goog.array.ARRAY_PROTOTYPE_.splice.call(arr, fromIndex, 1); + // Insert the removed item at toIndex. + goog.array.ARRAY_PROTOTYPE_.splice.call(arr, toIndex, 0, removedItems[0]); + // We don't use goog.array.insertAt and goog.array.removeAt, because they're + // significantly slower than splice. +}; + + +/** + * Creates a new array for which the element at position i is an array of the + * ith element of the provided arrays. The returned array will only be as long + * as the shortest array provided; additional values are ignored. For example, + * the result of zipping [1, 2] and [3, 4, 5] is [[1,3], [2, 4]]. + * + * This is similar to the zip() function in Python. See {@link + * http://docs.python.org/library/functions.html#zip} + * + * @param {...!goog.array.ArrayLike} var_args Arrays to be combined. + * @return {!Array.} A new array of arrays created from provided arrays. + */ +goog.array.zip = function(var_args) { + if (!arguments.length) { + return []; + } + var result = []; + for (var i = 0; true; i++) { + var value = []; + for (var j = 0; j < arguments.length; j++) { + var arr = arguments[j]; + // If i is larger than the array length, this is the shortest array. + if (i >= arr.length) { + return result; + } + value.push(arr[i]); + } + result.push(value); + } +}; + + +/** + * Shuffles the values in the specified array using the Fisher-Yates in-place + * shuffle (also known as the Knuth Shuffle). By default, calls Math.random() + * and so resets the state of that random number generator. Similarly, may reset + * the state of the any other specified random number generator. + * + * Runtime: O(n) + * + * @param {!Array} arr The array to be shuffled. + * @param {function():number=} opt_randFn Optional random function to use for + * shuffling. + * Takes no arguments, and returns a random number on the interval [0, 1). + * Defaults to Math.random() using JavaScript's built-in Math library. + */ +goog.array.shuffle = function(arr, opt_randFn) { + var randFn = opt_randFn || Math.random; + + for (var i = arr.length - 1; i > 0; i--) { + // Choose a random array index in [0, i] (inclusive with i). + var j = Math.floor(randFn() * (i + 1)); + + var tmp = arr[i]; + arr[i] = arr[j]; + arr[j] = tmp; + } +}; diff --git a/float-no-zero/closure-library/closure/goog/asserts/asserts.js b/float-no-zero/closure-library/closure/goog/asserts/asserts.js new file mode 100644 index 0000000000..4494526dce --- /dev/null +++ b/float-no-zero/closure-library/closure/goog/asserts/asserts.js @@ -0,0 +1,293 @@ +// Copyright 2008 The Closure Library Authors. All Rights Reserved. +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS-IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +/** + * @fileoverview Utilities to check the preconditions, postconditions and + * invariants runtime. + * + * Methods in this package should be given special treatment by the compiler + * for type-inference. For example, goog.asserts.assert(foo) + * will restrict foo to a truthy value. + * + * The compiler has an option to disable asserts. So code like: + * + * var x = goog.asserts.assert(foo()); goog.asserts.assert(bar()); + * + * will be transformed into: + * + * var x = foo(); + * + * The compiler will leave in foo() (because its return value is used), + * but it will remove bar() because it assumes it does not have side-effects. + * + */ + +goog.provide('goog.asserts'); +goog.provide('goog.asserts.AssertionError'); + +goog.require('goog.debug.Error'); +goog.require('goog.string'); + + +/** + * @define {boolean} Whether to strip out asserts or to leave them in. + */ +goog.define('goog.asserts.ENABLE_ASSERTS', goog.DEBUG); + + + +/** + * Error object for failed assertions. + * @param {string} messagePattern The pattern that was used to form message. + * @param {!Array.<*>} messageArgs The items to substitute into the pattern. + * @constructor + * @extends {goog.debug.Error} + */ +goog.asserts.AssertionError = function(messagePattern, messageArgs) { + messageArgs.unshift(messagePattern); + goog.debug.Error.call(this, goog.string.subs.apply(null, messageArgs)); + // Remove the messagePattern afterwards to avoid permenantly modifying the + // passed in array. + messageArgs.shift(); + + /** + * The message pattern used to format the error message. Error handlers can + * use this to uniquely identify the assertion. + * @type {string} + */ + this.messagePattern = messagePattern; +}; +goog.inherits(goog.asserts.AssertionError, goog.debug.Error); + + +/** @override */ +goog.asserts.AssertionError.prototype.name = 'AssertionError'; + + +/** + * Throws an exception with the given message and "Assertion failed" prefixed + * onto it. + * @param {string} defaultMessage The message to use if givenMessage is empty. + * @param {Array.<*>} defaultArgs The substitution arguments for defaultMessage. + * @param {string|undefined} givenMessage Message supplied by the caller. + * @param {Array.<*>} givenArgs The substitution arguments for givenMessage. + * @throws {goog.asserts.AssertionError} When the value is not a number. + * @private + */ +goog.asserts.doAssertFailure_ = + function(defaultMessage, defaultArgs, givenMessage, givenArgs) { + var message = 'Assertion failed'; + if (givenMessage) { + message += ': ' + givenMessage; + var args = givenArgs; + } else if (defaultMessage) { + message += ': ' + defaultMessage; + args = defaultArgs; + } + // The '' + works around an Opera 10 bug in the unit tests. Without it, + // a stack trace is added to var message above. With this, a stack trace is + // not added until this line (it causes the extra garbage to be added after + // the assertion message instead of in the middle of it). + throw new goog.asserts.AssertionError('' + message, args || []); +}; + + +/** + * Checks if the condition evaluates to true if goog.asserts.ENABLE_ASSERTS is + * true. + * @param {*} condition The condition to check. + * @param {string=} opt_message Error message in case of failure. + * @param {...*} var_args The items to substitute into the failure message. + * @return {*} The value of the condition. + * @throws {goog.asserts.AssertionError} When the condition evaluates to false. + */ +goog.asserts.assert = function(condition, opt_message, var_args) { + if (goog.asserts.ENABLE_ASSERTS && !condition) { + goog.asserts.doAssertFailure_('', null, opt_message, + Array.prototype.slice.call(arguments, 2)); + } + return condition; +}; + + +/** + * Fails if goog.asserts.ENABLE_ASSERTS is true. This function is useful in case + * when we want to add a check in the unreachable area like switch-case + * statement: + * + *
+ *  switch(type) {
+ *    case FOO: doSomething(); break;
+ *    case BAR: doSomethingElse(); break;
+ *    default: goog.assert.fail('Unrecognized type: ' + type);
+ *      // We have only 2 types - "default:" section is unreachable code.
+ *  }
+ * 
+ * + * @param {string=} opt_message Error message in case of failure. + * @param {...*} var_args The items to substitute into the failure message. + * @throws {goog.asserts.AssertionError} Failure. + */ +goog.asserts.fail = function(opt_message, var_args) { + if (goog.asserts.ENABLE_ASSERTS) { + throw new goog.asserts.AssertionError( + 'Failure' + (opt_message ? ': ' + opt_message : ''), + Array.prototype.slice.call(arguments, 1)); + } +}; + + +/** + * Checks if the value is a number if goog.asserts.ENABLE_ASSERTS is true. + * @param {*} value The value to check. + * @param {string=} opt_message Error message in case of failure. + * @param {...*} var_args The items to substitute into the failure message. + * @return {number} The value, guaranteed to be a number when asserts enabled. + * @throws {goog.asserts.AssertionError} When the value is not a number. + */ +goog.asserts.assertNumber = function(value, opt_message, var_args) { + if (goog.asserts.ENABLE_ASSERTS && !goog.isNumber(value)) { + goog.asserts.doAssertFailure_('Expected number but got %s: %s.', + [goog.typeOf(value), value], opt_message, + Array.prototype.slice.call(arguments, 2)); + } + return /** @type {number} */ (value); +}; + + +/** + * Checks if the value is a string if goog.asserts.ENABLE_ASSERTS is true. + * @param {*} value The value to check. + * @param {string=} opt_message Error message in case of failure. + * @param {...*} var_args The items to substitute into the failure message. + * @return {string} The value, guaranteed to be a string when asserts enabled. + * @throws {goog.asserts.AssertionError} When the value is not a string. + */ +goog.asserts.assertString = function(value, opt_message, var_args) { + if (goog.asserts.ENABLE_ASSERTS && !goog.isString(value)) { + goog.asserts.doAssertFailure_('Expected string but got %s: %s.', + [goog.typeOf(value), value], opt_message, + Array.prototype.slice.call(arguments, 2)); + } + return /** @type {string} */ (value); +}; + + +/** + * Checks if the value is a function if goog.asserts.ENABLE_ASSERTS is true. + * @param {*} value The value to check. + * @param {string=} opt_message Error message in case of failure. + * @param {...*} var_args The items to substitute into the failure message. + * @return {!Function} The value, guaranteed to be a function when asserts + * enabled. + * @throws {goog.asserts.AssertionError} When the value is not a function. + */ +goog.asserts.assertFunction = function(value, opt_message, var_args) { + if (goog.asserts.ENABLE_ASSERTS && !goog.isFunction(value)) { + goog.asserts.doAssertFailure_('Expected function but got %s: %s.', + [goog.typeOf(value), value], opt_message, + Array.prototype.slice.call(arguments, 2)); + } + return /** @type {!Function} */ (value); +}; + + +/** + * Checks if the value is an Object if goog.asserts.ENABLE_ASSERTS is true. + * @param {*} value The value to check. + * @param {string=} opt_message Error message in case of failure. + * @param {...*} var_args The items to substitute into the failure message. + * @return {!Object} The value, guaranteed to be a non-null object. + * @throws {goog.asserts.AssertionError} When the value is not an object. + */ +goog.asserts.assertObject = function(value, opt_message, var_args) { + if (goog.asserts.ENABLE_ASSERTS && !goog.isObject(value)) { + goog.asserts.doAssertFailure_('Expected object but got %s: %s.', + [goog.typeOf(value), value], + opt_message, Array.prototype.slice.call(arguments, 2)); + } + return /** @type {!Object} */ (value); +}; + + +/** + * Checks if the value is an Array if goog.asserts.ENABLE_ASSERTS is true. + * @param {*} value The value to check. + * @param {string=} opt_message Error message in case of failure. + * @param {...*} var_args The items to substitute into the failure message. + * @return {!Array} The value, guaranteed to be a non-null array. + * @throws {goog.asserts.AssertionError} When the value is not an array. + */ +goog.asserts.assertArray = function(value, opt_message, var_args) { + if (goog.asserts.ENABLE_ASSERTS && !goog.isArray(value)) { + goog.asserts.doAssertFailure_('Expected array but got %s: %s.', + [goog.typeOf(value), value], opt_message, + Array.prototype.slice.call(arguments, 2)); + } + return /** @type {!Array} */ (value); +}; + + +/** + * Checks if the value is a boolean if goog.asserts.ENABLE_ASSERTS is true. + * @param {*} value The value to check. + * @param {string=} opt_message Error message in case of failure. + * @param {...*} var_args The items to substitute into the failure message. + * @return {boolean} The value, guaranteed to be a boolean when asserts are + * enabled. + * @throws {goog.asserts.AssertionError} When the value is not a boolean. + */ +goog.asserts.assertBoolean = function(value, opt_message, var_args) { + if (goog.asserts.ENABLE_ASSERTS && !goog.isBoolean(value)) { + goog.asserts.doAssertFailure_('Expected boolean but got %s: %s.', + [goog.typeOf(value), value], opt_message, + Array.prototype.slice.call(arguments, 2)); + } + return /** @type {boolean} */ (value); +}; + + +/** + * Checks if the value is an instance of the user-defined type if + * goog.asserts.ENABLE_ASSERTS is true. + * + * The compiler may tighten the type returned by this function. + * + * @param {*} value The value to check. + * @param {function(new: T, ...)} type A user-defined constructor. + * @param {string=} opt_message Error message in case of failure. + * @param {...*} var_args The items to substitute into the failure message. + * @throws {goog.asserts.AssertionError} When the value is not an instance of + * type. + * @return {!T} + * @template T + */ +goog.asserts.assertInstanceof = function(value, type, opt_message, var_args) { + if (goog.asserts.ENABLE_ASSERTS && !(value instanceof type)) { + goog.asserts.doAssertFailure_('instanceof check failed.', null, + opt_message, Array.prototype.slice.call(arguments, 3)); + } + return value; +}; + + +/** + * Checks that no enumerable keys are present in Object.prototype. Such keys + * would break most code that use {@code for (var ... in ...)} loops. + */ +goog.asserts.assertObjectPrototypeIsIntact = function() { + for (var key in Object.prototype) { + goog.asserts.fail(key + ' should not be enumerable in Object.prototype.'); + } +}; diff --git a/float-no-zero/closure-library/closure/goog/async/animationdelay.js b/float-no-zero/closure-library/closure/goog/async/animationdelay.js new file mode 100644 index 0000000000..e617eb0daf --- /dev/null +++ b/float-no-zero/closure-library/closure/goog/async/animationdelay.js @@ -0,0 +1,270 @@ +// Copyright 2012 The Closure Library Authors. All Rights Reserved. +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS-IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +/** + * @fileoverview A delayed callback that pegs to the next animation frame + * instead of a user-configurable timeout. + * + */ + +goog.provide('goog.async.AnimationDelay'); + +goog.require('goog.Disposable'); +goog.require('goog.events'); +goog.require('goog.functions'); + + + +// TODO(nicksantos): Should we factor out the common code between this and +// goog.async.Delay? I'm not sure if there's enough code for this to really +// make sense. Subclassing seems like the wrong approach for a variety of +// reasons. Maybe there should be a common interface? + + + +/** + * A delayed callback that pegs to the next animation frame + * instead of a user configurable timeout. By design, this should have + * the same interface as goog.async.Delay. + * + * Uses requestAnimationFrame and friends when available, but falls + * back to a timeout of goog.async.AnimationDelay.TIMEOUT. + * + * For more on requestAnimationFrame and how you can use it to create smoother + * animations, see: + * @see http://paulirish.com/2011/requestanimationframe-for-smart-animating/ + * + * @param {function(number)} listener Function to call when the delay completes. + * Will be passed the timestamp when it's called, in unix ms. + * @param {Window=} opt_window The window object to execute the delay in. + * Defaults to the global object. + * @param {Object=} opt_handler The object scope to invoke the function in. + * @constructor + * @extends {goog.Disposable} + */ +goog.async.AnimationDelay = function(listener, opt_window, opt_handler) { + goog.base(this); + + /** + * The function that will be invoked after a delay. + * @type {function(number)} + * @private + */ + this.listener_ = listener; + + /** + * The object context to invoke the callback in. + * @type {Object|undefined} + * @private + */ + this.handler_ = opt_handler; + + /** + * @type {Window} + * @private + */ + this.win_ = opt_window || window; + + /** + * Cached callback function invoked when the delay finishes. + * @type {function()} + * @private + */ + this.callback_ = goog.bind(this.doAction_, this); +}; +goog.inherits(goog.async.AnimationDelay, goog.Disposable); + + +/** + * Identifier of the active delay timeout, or event listener, + * or null when inactive. + * @type {goog.events.Key|number|null} + * @private + */ +goog.async.AnimationDelay.prototype.id_ = null; + + +/** + * If we're using dom listeners. + * @type {?boolean} + * @private + */ +goog.async.AnimationDelay.prototype.usingListeners_ = false; + + +/** + * Default wait timeout for animations (in milliseconds). Only used for timed + * animation, which uses a timer (setTimeout) to schedule animation. + * + * @type {number} + * @const + */ +goog.async.AnimationDelay.TIMEOUT = 20; + + +/** + * Name of event received from the requestAnimationFrame in Firefox. + * + * @type {string} + * @const + * @private + */ +goog.async.AnimationDelay.MOZ_BEFORE_PAINT_EVENT_ = 'MozBeforePaint'; + + +/** + * Starts the delay timer. The provided listener function will be called + * before the next animation frame. + */ +goog.async.AnimationDelay.prototype.start = function() { + this.stop(); + this.usingListeners_ = false; + + var raf = this.getRaf_(); + var cancelRaf = this.getCancelRaf_(); + if (raf && !cancelRaf && this.win_.mozRequestAnimationFrame) { + // Because Firefox (Gecko) runs animation in separate threads, it also saves + // time by running the requestAnimationFrame callbacks in that same thread. + // Sadly this breaks the assumption of implicit thread-safety in JS, and can + // thus create thread-based inconsistencies on counters etc. + // + // Calling cycleAnimations_ using the MozBeforePaint event instead of as + // callback fixes this. + // + // Trigger this condition only if the mozRequestAnimationFrame is available, + // but not the W3C requestAnimationFrame function (as in draft) or the + // equivalent cancel functions. + this.id_ = goog.events.listen( + this.win_, + goog.async.AnimationDelay.MOZ_BEFORE_PAINT_EVENT_, + this.callback_); + this.win_.mozRequestAnimationFrame(null); + this.usingListeners_ = true; + } else if (raf && cancelRaf) { + this.id_ = raf.call(this.win_, this.callback_); + } else { + this.id_ = this.win_.setTimeout( + // Prior to Firefox 13, Gecko passed a non-standard parameter + // to the callback that we want to ignore. + goog.functions.lock(this.callback_), + goog.async.AnimationDelay.TIMEOUT); + } +}; + + +/** + * Stops the delay timer if it is active. No action is taken if the timer is not + * in use. + */ +goog.async.AnimationDelay.prototype.stop = function() { + if (this.isActive()) { + var raf = this.getRaf_(); + var cancelRaf = this.getCancelRaf_(); + if (raf && !cancelRaf && this.win_.mozRequestAnimationFrame) { + goog.events.unlistenByKey(this.id_); + } else if (raf && cancelRaf) { + cancelRaf.call(this.win_, /** @type {number} */ (this.id_)); + } else { + this.win_.clearTimeout(/** @type {number} */ (this.id_)); + } + } + this.id_ = null; +}; + + +/** + * Fires delay's action even if timer has already gone off or has not been + * started yet; guarantees action firing. Stops the delay timer. + */ +goog.async.AnimationDelay.prototype.fire = function() { + this.stop(); + this.doAction_(); +}; + + +/** + * Fires delay's action only if timer is currently active. Stops the delay + * timer. + */ +goog.async.AnimationDelay.prototype.fireIfActive = function() { + if (this.isActive()) { + this.fire(); + } +}; + + +/** + * @return {boolean} True if the delay is currently active, false otherwise. + */ +goog.async.AnimationDelay.prototype.isActive = function() { + return this.id_ != null; +}; + + +/** + * Invokes the callback function after the delay successfully completes. + * @private + */ +goog.async.AnimationDelay.prototype.doAction_ = function() { + if (this.usingListeners_ && this.id_) { + goog.events.unlistenByKey(this.id_); + } + this.id_ = null; + + // We are not using the timestamp returned by requestAnimationFrame + // because it may be either a Date.now-style time or a + // high-resolution time (depending on browser implementation). Using + // goog.now() will ensure that the timestamp used is consistent and + // compatible with goog.fx.Animation. + this.listener_.call(this.handler_, goog.now()); +}; + + +/** @override */ +goog.async.AnimationDelay.prototype.disposeInternal = function() { + this.stop(); + goog.base(this, 'disposeInternal'); +}; + + +/** + * @return {?function(function(number)): number} The requestAnimationFrame + * function, or null if not available on this browser. + * @private + */ +goog.async.AnimationDelay.prototype.getRaf_ = function() { + var win = this.win_; + return win.requestAnimationFrame || + win.webkitRequestAnimationFrame || + win.mozRequestAnimationFrame || + win.oRequestAnimationFrame || + win.msRequestAnimationFrame || + null; +}; + + +/** + * @return {?function(number): number} The cancelAnimationFrame function, + * or null if not available on this browser. + * @private + */ +goog.async.AnimationDelay.prototype.getCancelRaf_ = function() { + var win = this.win_; + return win.cancelRequestAnimationFrame || + win.webkitCancelRequestAnimationFrame || + win.mozCancelRequestAnimationFrame || + win.oCancelRequestAnimationFrame || + win.msCancelRequestAnimationFrame || + null; +}; diff --git a/float-no-zero/closure-library/closure/goog/async/conditionaldelay.js b/float-no-zero/closure-library/closure/goog/async/conditionaldelay.js new file mode 100644 index 0000000000..1e3897579f --- /dev/null +++ b/float-no-zero/closure-library/closure/goog/async/conditionaldelay.js @@ -0,0 +1,235 @@ +// Copyright 2008 The Closure Library Authors. All Rights Reserved. +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS-IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +/** + * @fileoverview Defines a class useful for handling functions that must be + * invoked later when some condition holds. Examples include deferred function + * calls that return a boolean flag whether it succedeed or not. + * + * Example: + * + * function deferred() { + * var succeeded = false; + * // ... custom code + * return succeeded; + * } + * + * var deferredCall = new goog.async.ConditionalDelay(deferred); + * deferredCall.onSuccess = function() { + * alert('Success: The deferred function has been successfully executed.'); + * } + * deferredCall.onFailure = function() { + * alert('Failure: Time limit exceeded.'); + * } + * + * // Call the deferred() every 100 msec until it returns true, + * // or 5 seconds pass. + * deferredCall.start(100, 5000); + * + * // Stop the deferred function call (does nothing if it's not active). + * deferredCall.stop(); + * + */ + + +goog.provide('goog.async.ConditionalDelay'); + +goog.require('goog.Disposable'); +goog.require('goog.async.Delay'); + + + +/** + * A ConditionalDelay object invokes the associated function after a specified + * interval delay and checks its return value. If the function returns + * {@code true} the conditional delay is cancelled and {@see #onSuccess} + * is called. Otherwise this object keeps to invoke the deferred function until + * either it returns {@code true} or the timeout is exceeded. In the latter case + * the {@see #onFailure} method will be called. + * + * The interval duration and timeout can be specified each time the delay is + * started. Calling start on an active delay will reset the timer. + * + * @param {function():boolean} listener Function to call when the delay + * completes. Should return a value that type-converts to {@code true} if + * the call succeeded and this delay should be stopped. + * @param {Object=} opt_handler The object scope to invoke the function in. + * @constructor + * @extends {goog.Disposable} + */ +goog.async.ConditionalDelay = function(listener, opt_handler) { + goog.Disposable.call(this); + + /** + * The function that will be invoked after a delay. + * @type {function():boolean} + * @private + */ + this.listener_ = listener; + + /** + * The object context to invoke the callback in. + * @type {Object|undefined} + * @private + */ + this.handler_ = opt_handler; + + /** + * The underlying goog.async.Delay delegate object. + * @type {goog.async.Delay} + * @private + */ + this.delay_ = new goog.async.Delay( + goog.bind(this.onTick_, this), 0 /*interval*/, this /*scope*/); +}; +goog.inherits(goog.async.ConditionalDelay, goog.Disposable); + + +/** + * The delay interval in milliseconds to between the calls to the callback. + * Note, that the callback may be invoked earlier than this interval if the + * timeout is exceeded. + * @type {number} + * @private + */ +goog.async.ConditionalDelay.prototype.interval_ = 0; + + +/** + * The timeout timestamp until which the delay is to be executed. + * A negative value means no timeout. + * @type {number} + * @private + */ +goog.async.ConditionalDelay.prototype.runUntil_ = 0; + + +/** + * True if the listener has been executed, and it returned {@code true}. + * @type {boolean} + * @private + */ +goog.async.ConditionalDelay.prototype.isDone_ = false; + + +/** @override */ +goog.async.ConditionalDelay.prototype.disposeInternal = function() { + this.delay_.dispose(); + delete this.listener_; + delete this.handler_; + goog.async.ConditionalDelay.superClass_.disposeInternal.call(this); +}; + + +/** + * Starts the delay timer. The provided listener function will be called + * repeatedly after the specified interval until the function returns + * {@code true} or the timeout is exceeded. Calling start on an active timer + * will stop the timer first. + * @param {number=} opt_interval The time interval between the function + * invocations (in milliseconds). Default is 0. + * @param {number=} opt_timeout The timeout interval (in milliseconds). Takes + * precedence over the {@code opt_interval}, i.e. if the timeout is less + * than the invocation interval, the function will be called when the + * timeout is exceeded. A negative value means no timeout. Default is 0. + */ +goog.async.ConditionalDelay.prototype.start = function(opt_interval, + opt_timeout) { + this.stop(); + this.isDone_ = false; + + var timeout = opt_timeout || 0; + this.interval_ = Math.max(opt_interval || 0, 0); + this.runUntil_ = timeout < 0 ? -1 : (goog.now() + timeout); + this.delay_.start( + timeout < 0 ? this.interval_ : Math.min(this.interval_, timeout)); +}; + + +/** + * Stops the delay timer if it is active. No action is taken if the timer is not + * in use. + */ +goog.async.ConditionalDelay.prototype.stop = function() { + this.delay_.stop(); +}; + + +/** + * @return {boolean} True if the delay is currently active, false otherwise. + */ +goog.async.ConditionalDelay.prototype.isActive = function() { + return this.delay_.isActive(); +}; + + +/** + * @return {boolean} True if the listener has been executed and returned + * {@code true} since the last call to {@see #start}. + */ +goog.async.ConditionalDelay.prototype.isDone = function() { + return this.isDone_; +}; + + +/** + * Called when the listener has been successfully executed and returned + * {@code true}. The {@see #isDone} method should return {@code true} by now. + * Designed for inheritance, should be overridden by subclasses or on the + * instances if they care. + */ +goog.async.ConditionalDelay.prototype.onSuccess = function() { + // Do nothing by default. +}; + + +/** + * Called when this delayed call is cancelled because the timeout has been + * exceeded, and the listener has never returned {@code true}. + * Designed for inheritance, should be overridden by subclasses or on the + * instances if they care. + */ +goog.async.ConditionalDelay.prototype.onFailure = function() { + // Do nothing by default. +}; + + +/** + * A callback function for the underlying {@code goog.async.Delay} object. When + * executed the listener function is called, and if it returns {@code true} + * the delay is stopped and the {@see #onSuccess} method is invoked. + * If the timeout is exceeded the delay is stopped and the + * {@see #onFailure} method is called. + * @private + */ +goog.async.ConditionalDelay.prototype.onTick_ = function() { + var successful = this.listener_.call(this.handler_); + if (successful) { + this.isDone_ = true; + this.onSuccess(); + } else { + // Try to reschedule the task. + if (this.runUntil_ < 0) { + // No timeout. + this.delay_.start(this.interval_); + } else { + var timeLeft = this.runUntil_ - goog.now(); + if (timeLeft <= 0) { + this.onFailure(); + } else { + this.delay_.start(Math.min(this.interval_, timeLeft)); + } + } + } +}; diff --git a/float-no-zero/closure-library/closure/goog/async/delay.js b/float-no-zero/closure-library/closure/goog/async/delay.js new file mode 100644 index 0000000000..3f3b262aef --- /dev/null +++ b/float-no-zero/closure-library/closure/goog/async/delay.js @@ -0,0 +1,177 @@ +// Copyright 2007 The Closure Library Authors. All Rights Reserved. +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS-IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +/** + * @fileoverview Defines a class useful for handling functions that must be + * invoked after a delay, especially when that delay is frequently restarted. + * Examples include delaying before displaying a tooltip, menu hysteresis, + * idle timers, etc. + * @author brenneman@google.com (Shawn Brenneman) + * @see ../demos/timers.html + */ + + +goog.provide('goog.Delay'); +goog.provide('goog.async.Delay'); + +goog.require('goog.Disposable'); +goog.require('goog.Timer'); + + + +/** + * A Delay object invokes the associated function after a specified delay. The + * interval duration can be specified once in the constructor, or can be defined + * each time the delay is started. Calling start on an active delay will reset + * the timer. + * + * @param {Function} listener Function to call when the delay completes. + * @param {number=} opt_interval The default length of the invocation delay (in + * milliseconds). + * @param {Object=} opt_handler The object scope to invoke the function in. + * @constructor + * @extends {goog.Disposable} + */ +goog.async.Delay = function(listener, opt_interval, opt_handler) { + goog.Disposable.call(this); + + /** + * The function that will be invoked after a delay. + * @type {Function} + * @private + */ + this.listener_ = listener; + + /** + * The default amount of time to delay before invoking the callback. + * @type {number} + * @private + */ + this.interval_ = opt_interval || 0; + + /** + * The object context to invoke the callback in. + * @type {Object|undefined} + * @private + */ + this.handler_ = opt_handler; + + + /** + * Cached callback function invoked when the delay finishes. + * @type {Function} + * @private + */ + this.callback_ = goog.bind(this.doAction_, this); +}; +goog.inherits(goog.async.Delay, goog.Disposable); + + + +/** + * A deprecated alias. + * @deprecated Use goog.async.Delay instead. + * @constructor + */ +goog.Delay = goog.async.Delay; + + +/** + * Identifier of the active delay timeout, or 0 when inactive. + * @type {number} + * @private + */ +goog.async.Delay.prototype.id_ = 0; + + +/** + * Disposes of the object, cancelling the timeout if it is still outstanding and + * removing all object references. + * @override + * @protected + */ +goog.async.Delay.prototype.disposeInternal = function() { + goog.async.Delay.superClass_.disposeInternal.call(this); + this.stop(); + delete this.listener_; + delete this.handler_; +}; + + +/** + * Starts the delay timer. The provided listener function will be called after + * the specified interval. Calling start on an active timer will reset the + * delay interval. + * @param {number=} opt_interval If specified, overrides the object's default + * interval with this one (in milliseconds). + */ +goog.async.Delay.prototype.start = function(opt_interval) { + this.stop(); + this.id_ = goog.Timer.callOnce( + this.callback_, + goog.isDef(opt_interval) ? opt_interval : this.interval_); +}; + + +/** + * Stops the delay timer if it is active. No action is taken if the timer is not + * in use. + */ +goog.async.Delay.prototype.stop = function() { + if (this.isActive()) { + goog.Timer.clear(this.id_); + } + this.id_ = 0; +}; + + +/** + * Fires delay's action even if timer has already gone off or has not been + * started yet; guarantees action firing. Stops the delay timer. + */ +goog.async.Delay.prototype.fire = function() { + this.stop(); + this.doAction_(); +}; + + +/** + * Fires delay's action only if timer is currently active. Stops the delay + * timer. + */ +goog.async.Delay.prototype.fireIfActive = function() { + if (this.isActive()) { + this.fire(); + } +}; + + +/** + * @return {boolean} True if the delay is currently active, false otherwise. + */ +goog.async.Delay.prototype.isActive = function() { + return this.id_ != 0; +}; + + +/** + * Invokes the callback function after the delay successfully completes. + * @private + */ +goog.async.Delay.prototype.doAction_ = function() { + this.id_ = 0; + if (this.listener_) { + this.listener_.call(this.handler_); + } +}; diff --git a/float-no-zero/closure-library/closure/goog/async/nexttick.js b/float-no-zero/closure-library/closure/goog/async/nexttick.js new file mode 100644 index 0000000000..5f8b895e69 --- /dev/null +++ b/float-no-zero/closure-library/closure/goog/async/nexttick.js @@ -0,0 +1,174 @@ +// Copyright 2013 The Closure Library Authors. All Rights Reserved. +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS-IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +/** + * @fileoverview Provides a function to schedule running a function as soon + * as possible after the current JS execution stops and yields to the event + * loop. + * + */ + +goog.provide('goog.async.nextTick'); + +goog.require('goog.debug.entryPointRegistry'); +goog.require('goog.functions'); + + +/** + * Fires the provided callbacks as soon as possible after the current JS + * execution context. setTimeout(…, 0) always takes at least 5ms for legacy + * reasons. + * @param {function()} callback Callback function to fire as soon as possible. + * @param {Object=} opt_context Object in whose scope to call the listener. + */ +goog.async.nextTick = function(callback, opt_context) { + var cb = callback; + if (opt_context) { + cb = goog.bind(callback, opt_context); + } + cb = goog.async.nextTick.wrapCallback_(cb); + // Introduced and currently only supported by IE10. + if (goog.isFunction(goog.global.setImmediate)) { + goog.global.setImmediate(cb); + return; + } + // Look for and cache the custom fallback version of setImmediate. + if (!goog.async.nextTick.setImmediate_) { + goog.async.nextTick.setImmediate_ = + goog.async.nextTick.getSetImmediateEmulator_(); + } + goog.async.nextTick.setImmediate_(cb); +}; + + +/** + * Cache for the setImmediate implementation. + * @type {function(function())} + * @private + */ +goog.async.nextTick.setImmediate_; + + +/** + * Determines the best possible implementation to run a function as soon as + * the JS event loop is idle. + * @return {function(function())} The "setImmediate" implementation. + * @private + */ +goog.async.nextTick.getSetImmediateEmulator_ = function() { + // Create a private message channel and use it to postMessage empty messages + // to ourselves. + var Channel = goog.global['MessageChannel']; + // If MessageChannel is not available and we are in a browser, implement + // an iframe based polyfill in browsers that have postMessage and + // document.addEventListener. The latter excludes IE8 because it has a + // synchronous postMessage implementation. + if (typeof Channel === 'undefined' && typeof window !== 'undefined' && + window.postMessage && window.addEventListener) { + /** @constructor */ + Channel = function() { + // Make an empty, invisible iframe. + var iframe = document.createElement('iframe'); + iframe.style.display = 'none'; + iframe.src = ''; + document.body.appendChild(iframe); + var win = iframe.contentWindow; + var doc = win.document; + doc.open(); + doc.write(''); + doc.close(); + var message = 'callImmediate' + Math.random(); + var origin = win.location.protocol + '//' + win.location.host; + var onmessage = goog.bind(function(e) { + // Validate origin and message to make sure that this message was + // intended for us. + if (e.origin != origin && e.data != message) { + return; + } + this['port1'].onmessage(); + }, this); + win.addEventListener('message', onmessage, false); + this['port1'] = {}; + this['port2'] = { + postMessage: function() { + win.postMessage(message, origin); + } + }; + }; + } + if (typeof Channel !== 'undefined') { + var channel = new Channel(); + // Use a fifo linked list to call callbacks in the right order. + var head = {}; + var tail = head; + channel['port1'].onmessage = function() { + head = head.next; + var cb = head.cb; + head.cb = null; + cb(); + }; + return function(cb) { + tail.next = { + cb: cb + }; + tail = tail.next; + channel['port2'].postMessage(0); + }; + } + // Implementation for IE6-8: Script elements fire an asynchronous + // onreadystatechange event when inserted into the DOM. + if (typeof document !== 'undefined' && 'onreadystatechange' in + document.createElement('script')) { + return function(cb) { + var script = document.createElement('script'); + script.onreadystatechange = function() { + // Clean up and call the callback. + script.onreadystatechange = null; + script.parentNode.removeChild(script); + script = null; + cb(); + cb = null; + }; + document.documentElement.appendChild(script); + }; + } + // Fall back to setTimeout with 0. In browsers this creates a delay of 5ms + // or more. + return function(cb) { + goog.global.setTimeout(cb, 0); + }; +}; + + +/** + * Helper function that is overrided to protect callbacks with entry point + * monitor if the application monitors entry points. + * @param {function()} callback Callback function to fire as soon as possible. + * @return {function()} The wrapped callback. + * @private + */ +goog.async.nextTick.wrapCallback_ = goog.functions.identity; + + +// Register the callback function as an entry point, so that it can be +// monitored for exception handling, etc. This has to be done in this file +// since it requires special code to handle all browsers. +goog.debug.entryPointRegistry.register( + /** + * @param {function(!Function): !Function} transformer The transforming + * function. + */ + function(transformer) { + goog.async.nextTick.wrapCallback_ = transformer; + }); diff --git a/float-no-zero/closure-library/closure/goog/async/throttle.js b/float-no-zero/closure-library/closure/goog/async/throttle.js new file mode 100644 index 0000000000..c8ece971bd --- /dev/null +++ b/float-no-zero/closure-library/closure/goog/async/throttle.js @@ -0,0 +1,189 @@ +// Copyright 2007 The Closure Library Authors. All Rights Reserved. +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS-IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +/** + * @fileoverview Definition of the goog.async.Throttle class. + * + * @see ../demos/timers.html + */ + +goog.provide('goog.Throttle'); +goog.provide('goog.async.Throttle'); + +goog.require('goog.Disposable'); +goog.require('goog.Timer'); + + + +/** + * Throttle will perform an action that is passed in no more than once + * per interval (specified in milliseconds). If it gets multiple signals + * to perform the action while it is waiting, it will only perform the action + * once at the end of the interval. + * @param {Function} listener Function to callback when the action is triggered. + * @param {number} interval Interval over which to throttle. The handler can + * only be called once per interval. + * @param {Object=} opt_handler Object in whose scope to call the listener. + * @constructor + * @extends {goog.Disposable} + */ +goog.async.Throttle = function(listener, interval, opt_handler) { + goog.Disposable.call(this); + + /** + * Function to callback + * @type {Function} + * @private + */ + this.listener_ = listener; + + /** + * Interval for the throttle time + * @type {number} + * @private + */ + this.interval_ = interval; + + /** + * "this" context for the listener + * @type {Object|undefined} + * @private + */ + this.handler_ = opt_handler; + + /** + * Cached callback function invoked after the throttle timeout completes + * @type {Function} + * @private + */ + this.callback_ = goog.bind(this.onTimer_, this); +}; +goog.inherits(goog.async.Throttle, goog.Disposable); + + + +/** + * A deprecated alias. + * @deprecated Use goog.async.Throttle instead. + * @constructor + */ +goog.Throttle = goog.async.Throttle; + + +/** + * Indicates that the action is pending and needs to be fired. + * @type {boolean} + * @private + */ +goog.async.Throttle.prototype.shouldFire_ = false; + + +/** + * Indicates the count of nested pauses currently in effect on the throttle. + * When this count is not zero, fired actions will be postponed until the + * throttle is resumed enough times to drop the pause count to zero. + * @type {number} + * @private + */ +goog.async.Throttle.prototype.pauseCount_ = 0; + + +/** + * Timer for scheduling the next callback + * @type {?number} + * @private + */ +goog.async.Throttle.prototype.timer_ = null; + + +/** + * Notifies the throttle that the action has happened. It will throttle the call + * so that the callback is not called too often according to the interval + * parameter passed to the constructor. + */ +goog.async.Throttle.prototype.fire = function() { + if (!this.timer_ && !this.pauseCount_) { + this.doAction_(); + } else { + this.shouldFire_ = true; + } +}; + + +/** + * Cancels any pending action callback. The throttle can be restarted by + * calling {@link #fire}. + */ +goog.async.Throttle.prototype.stop = function() { + if (this.timer_) { + goog.Timer.clear(this.timer_); + this.timer_ = null; + this.shouldFire_ = false; + } +}; + + +/** + * Pauses the throttle. All pending and future action callbacks will be + * delayed until the throttle is resumed. Pauses can be nested. + */ +goog.async.Throttle.prototype.pause = function() { + this.pauseCount_++; +}; + + +/** + * Resumes the throttle. If doing so drops the pausing count to zero, pending + * action callbacks will be executed as soon as possible, but still no sooner + * than an interval's delay after the previous call. Future action callbacks + * will be executed as normal. + */ +goog.async.Throttle.prototype.resume = function() { + this.pauseCount_--; + if (!this.pauseCount_ && this.shouldFire_ && !this.timer_) { + this.shouldFire_ = false; + this.doAction_(); + } +}; + + +/** @override */ +goog.async.Throttle.prototype.disposeInternal = function() { + goog.async.Throttle.superClass_.disposeInternal.call(this); + this.stop(); +}; + + +/** + * Handler for the timer to fire the throttle + * @private + */ +goog.async.Throttle.prototype.onTimer_ = function() { + this.timer_ = null; + + if (this.shouldFire_ && !this.pauseCount_) { + this.shouldFire_ = false; + this.doAction_(); + } +}; + + +/** + * Calls the callback + * @private + */ +goog.async.Throttle.prototype.doAction_ = function() { + this.timer_ = goog.Timer.callOnce(this.callback_, this.interval_); + this.listener_.call(this.handler_); +}; diff --git a/float-no-zero/closure-library/closure/goog/base.js b/float-no-zero/closure-library/closure/goog/base.js new file mode 100644 index 0000000000..bd82e88de5 --- /dev/null +++ b/float-no-zero/closure-library/closure/goog/base.js @@ -0,0 +1,1593 @@ +// Copyright 2006 The Closure Library Authors. All Rights Reserved. +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS-IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +/** + * @fileoverview Bootstrap for the Google JS Library (Closure). + * + * In uncompiled mode base.js will write out Closure's deps file, unless the + * global CLOSURE_NO_DEPS is set to true. This allows projects to + * include their own deps file(s) from different locations. + * + * + * @provideGoog + */ + + +/** + * @define {boolean} Overridden to true by the compiler when --closure_pass + * or --mark_as_compiled is specified. + */ +var COMPILED = false; + + +/** + * Base namespace for the Closure library. Checks to see goog is already + * defined in the current scope before assigning to prevent clobbering if + * base.js is loaded more than once. + * + * @const + */ +var goog = goog || {}; + + +/** + * Reference to the global context. In most cases this will be 'window'. + */ +goog.global = this; + + +/** + * A hook for overriding the define values in uncompiled mode. + * + * In uncompiled mode, {@code CLOSURE_DEFINES} may be defined before loading + * base.js. If a key is defined in {@code CLOSURE_DEFINES}, {@code goog.define} + * will use the value instead of the default value. This allows flags to be + * overwritten without compilation (this is normally accomplished with the + * compiler's "define" flag). + * + * Example: + *
+ *   var CLOSURE_DEFINES = {'goog.DEBUG', false};
+ * 
+ * + * @type {Object.|undefined} + */ +goog.global.CLOSURE_DEFINES; + + +/** + * Builds an object structure for the provided namespace path, ensuring that + * names that already exist are not overwritten. For example: + * "a.b.c" -> a = {};a.b={};a.b.c={}; + * Used by goog.provide and goog.exportSymbol. + * @param {string} name name of the object that this file defines. + * @param {*=} opt_object the object to expose at the end of the path. + * @param {Object=} opt_objectToExportTo The object to add the path to; default + * is |goog.global|. + * @private + */ +goog.exportPath_ = function(name, opt_object, opt_objectToExportTo) { + var parts = name.split('.'); + var cur = opt_objectToExportTo || goog.global; + + // Internet Explorer exhibits strange behavior when throwing errors from + // methods externed in this manner. See the testExportSymbolExceptions in + // base_test.html for an example. + if (!(parts[0] in cur) && cur.execScript) { + cur.execScript('var ' + parts[0]); + } + + // Certain browsers cannot parse code in the form for((a in b); c;); + // This pattern is produced by the JSCompiler when it collapses the + // statement above into the conditional loop below. To prevent this from + // happening, use a for-loop and reserve the init logic as below. + + // Parentheses added to eliminate strict JS warning in Firefox. + for (var part; parts.length && (part = parts.shift());) { + if (!parts.length && opt_object !== undefined) { + // last part and we have an object; use it + cur[part] = opt_object; + } else if (cur[part]) { + cur = cur[part]; + } else { + cur = cur[part] = {}; + } + } +}; + + +/** + * Defines a named value. In uncompiled mode, the value is retreived from + * CLOSURE_DEFINES if the object is defined and has the property specified, + * and otherwise used the defined defaultValue. When compiled, the default + * can be overridden using compiler command-line options. + * + * @param {string} name The distinguished name to provide. + * @param {string|number|boolean} defaultValue + */ +goog.define = function(name, defaultValue) { + var value = defaultValue; + if (!COMPILED) { + if (goog.global.CLOSURE_DEFINES && Object.prototype.hasOwnProperty.call( + goog.global.CLOSURE_DEFINES, name)) { + value = goog.global.CLOSURE_DEFINES[name]; + } + } + goog.exportPath_(name, value); +}; + + +/** + * @define {boolean} DEBUG is provided as a convenience so that debugging code + * that should not be included in a production js_binary can be easily stripped + * by specifying --define goog.DEBUG=false to the JSCompiler. For example, most + * toString() methods should be declared inside an "if (goog.DEBUG)" conditional + * because they are generally used for debugging purposes and it is difficult + * for the JSCompiler to statically determine whether they are used. + */ +goog.DEBUG = true; + + +/** + * @define {string} LOCALE defines the locale being used for compilation. It is + * used to select locale specific data to be compiled in js binary. BUILD rule + * can specify this value by "--define goog.LOCALE=" as JSCompiler + * option. + * + * Take into account that the locale code format is important. You should use + * the canonical Unicode format with hyphen as a delimiter. Language must be + * lowercase, Language Script - Capitalized, Region - UPPERCASE. + * There are few examples: pt-BR, en, en-US, sr-Latin-BO, zh-Hans-CN. + * + * See more info about locale codes here: + * http://www.unicode.org/reports/tr35/#Unicode_Language_and_Locale_Identifiers + * + * For language codes you should use values defined by ISO 693-1. See it here + * http://www.w3.org/WAI/ER/IG/ert/iso639.htm. There is only one exception from + * this rule: the Hebrew language. For legacy reasons the old code (iw) should + * be used instead of the new code (he), see http://wiki/Main/IIISynonyms. + */ +goog.define('goog.LOCALE', 'en'); // default to en + + +/** + * @define {boolean} Whether this code is running on trusted sites. + * + * On untrusted sites, several native functions can be defined or overridden by + * external libraries like Prototype, Datejs, and JQuery and setting this flag + * to false forces closure to use its own implementations when possible. + * + * If your JavaScript can be loaded by a third party site and you are wary about + * relying on non-standard implementations, specify + * "--define goog.TRUSTED_SITE=false" to the JSCompiler. + */ +goog.define('goog.TRUSTED_SITE', true); + + +/** + * Creates object stubs for a namespace. The presence of one or more + * goog.provide() calls indicate that the file defines the given + * objects/namespaces. Build tools also scan for provide/require statements + * to discern dependencies, build dependency files (see deps.js), etc. + * @see goog.require + * @param {string} name Namespace provided by this file in the form + * "goog.package.part". + */ +goog.provide = function(name) { + if (!COMPILED) { + // Ensure that the same namespace isn't provided twice. This is intended + // to teach new developers that 'goog.provide' is effectively a variable + // declaration. And when JSCompiler transforms goog.provide into a real + // variable declaration, the compiled JS should work the same as the raw + // JS--even when the raw JS uses goog.provide incorrectly. + if (goog.isProvided_(name)) { + throw Error('Namespace "' + name + '" already declared.'); + } + delete goog.implicitNamespaces_[name]; + + var namespace = name; + while ((namespace = namespace.substring(0, namespace.lastIndexOf('.')))) { + if (goog.getObjectByName(namespace)) { + break; + } + goog.implicitNamespaces_[namespace] = true; + } + } + + goog.exportPath_(name); +}; + + +/** + * Marks that the current file should only be used for testing, and never for + * live code in production. + * + * In the case of unit tests, the message may optionally be an exact namespace + * for the test (e.g. 'goog.stringTest'). The linter will then ignore the extra + * provide (if not explicitly defined in the code). + * + * @param {string=} opt_message Optional message to add to the error that's + * raised when used in production code. + */ +goog.setTestOnly = function(opt_message) { + if (COMPILED && !goog.DEBUG) { + opt_message = opt_message || ''; + throw Error('Importing test-only code into non-debug environment' + + opt_message ? ': ' + opt_message : '.'); + } +}; + + +if (!COMPILED) { + + /** + * Check if the given name has been goog.provided. This will return false for + * names that are available only as implicit namespaces. + * @param {string} name name of the object to look for. + * @return {boolean} Whether the name has been provided. + * @private + */ + goog.isProvided_ = function(name) { + return !goog.implicitNamespaces_[name] && !!goog.getObjectByName(name); + }; + + /** + * Namespaces implicitly defined by goog.provide. For example, + * goog.provide('goog.events.Event') implicitly declares that 'goog' and + * 'goog.events' must be namespaces. + * + * @type {Object} + * @private + */ + goog.implicitNamespaces_ = {}; +} + + +/** + * Returns an object based on its fully qualified external name. If you are + * using a compilation pass that renames property names beware that using this + * function will not find renamed properties. + * + * @param {string} name The fully qualified name. + * @param {Object=} opt_obj The object within which to look; default is + * |goog.global|. + * @return {?} The value (object or primitive) or, if not found, null. + */ +goog.getObjectByName = function(name, opt_obj) { + var parts = name.split('.'); + var cur = opt_obj || goog.global; + for (var part; part = parts.shift(); ) { + if (goog.isDefAndNotNull(cur[part])) { + cur = cur[part]; + } else { + return null; + } + } + return cur; +}; + + +/** + * Globalizes a whole namespace, such as goog or goog.lang. + * + * @param {Object} obj The namespace to globalize. + * @param {Object=} opt_global The object to add the properties to. + * @deprecated Properties may be explicitly exported to the global scope, but + * this should no longer be done in bulk. + */ +goog.globalize = function(obj, opt_global) { + var global = opt_global || goog.global; + for (var x in obj) { + global[x] = obj[x]; + } +}; + + +/** + * Adds a dependency from a file to the files it requires. + * @param {string} relPath The path to the js file. + * @param {Array} provides An array of strings with the names of the objects + * this file provides. + * @param {Array} requires An array of strings with the names of the objects + * this file requires. + */ +goog.addDependency = function(relPath, provides, requires) { + if (goog.DEPENDENCIES_ENABLED) { + var provide, require; + var path = relPath.replace(/\\/g, '/'); + var deps = goog.dependencies_; + for (var i = 0; provide = provides[i]; i++) { + deps.nameToPath[provide] = path; + if (!(path in deps.pathToNames)) { + deps.pathToNames[path] = {}; + } + deps.pathToNames[path][provide] = true; + } + for (var j = 0; require = requires[j]; j++) { + if (!(path in deps.requires)) { + deps.requires[path] = {}; + } + deps.requires[path][require] = true; + } + } +}; + + + + +// NOTE(nnaze): The debug DOM loader was included in base.js as an original way +// to do "debug-mode" development. The dependency system can sometimes be +// confusing, as can the debug DOM loader's asynchronous nature. +// +// With the DOM loader, a call to goog.require() is not blocking -- the script +// will not load until some point after the current script. If a namespace is +// needed at runtime, it needs to be defined in a previous script, or loaded via +// require() with its registered dependencies. +// User-defined namespaces may need their own deps file. See http://go/js_deps, +// http://go/genjsdeps, or, externally, DepsWriter. +// http://code.google.com/closure/library/docs/depswriter.html +// +// Because of legacy clients, the DOM loader can't be easily removed from +// base.js. Work is being done to make it disableable or replaceable for +// different environments (DOM-less JavaScript interpreters like Rhino or V8, +// for example). See bootstrap/ for more information. + + +/** + * @define {boolean} Whether to enable the debug loader. + * + * If enabled, a call to goog.require() will attempt to load the namespace by + * appending a script tag to the DOM (if the namespace has been registered). + * + * If disabled, goog.require() will simply assert that the namespace has been + * provided (and depend on the fact that some outside tool correctly ordered + * the script). + */ +goog.define('goog.ENABLE_DEBUG_LOADER', true); + + +/** + * Implements a system for the dynamic resolution of dependencies that works in + * parallel with the BUILD system. Note that all calls to goog.require will be + * stripped by the JSCompiler when the --closure_pass option is used. + * @see goog.provide + * @param {string} name Namespace to include (as was given in goog.provide()) in + * the form "goog.package.part". + */ +goog.require = function(name) { + + // If the object already exists we do not need do do anything. + // TODO(arv): If we start to support require based on file name this has to + // change. + // TODO(arv): If we allow goog.foo.* this has to change. + // TODO(arv): If we implement dynamic load after page load we should probably + // not remove this code for the compiled output. + if (!COMPILED) { + if (goog.isProvided_(name)) { + return; + } + + if (goog.ENABLE_DEBUG_LOADER) { + var path = goog.getPathFromDeps_(name); + if (path) { + goog.included_[path] = true; + goog.writeScripts_(); + return; + } + } + + var errorMessage = 'goog.require could not find: ' + name; + if (goog.global.console) { + goog.global.console['error'](errorMessage); + } + + + throw Error(errorMessage); + + } +}; + + +/** + * Path for included scripts. + * @type {string} + */ +goog.basePath = ''; + + +/** + * A hook for overriding the base path. + * @type {string|undefined} + */ +goog.global.CLOSURE_BASE_PATH; + + +/** + * Whether to write out Closure's deps file. By default, the deps are written. + * @type {boolean|undefined} + */ +goog.global.CLOSURE_NO_DEPS; + + +/** + * A function to import a single script. This is meant to be overridden when + * Closure is being run in non-HTML contexts, such as web workers. It's defined + * in the global scope so that it can be set before base.js is loaded, which + * allows deps.js to be imported properly. + * + * The function is passed the script source, which is a relative URI. It should + * return true if the script was imported, false otherwise. + */ +goog.global.CLOSURE_IMPORT_SCRIPT; + + +/** + * Null function used for default values of callbacks, etc. + * @return {void} Nothing. + */ +goog.nullFunction = function() {}; + + +/** + * The identity function. Returns its first argument. + * + * @param {*=} opt_returnValue The single value that will be returned. + * @param {...*} var_args Optional trailing arguments. These are ignored. + * @return {?} The first argument. We can't know the type -- just pass it along + * without type. + * @deprecated Use goog.functions.identity instead. + */ +goog.identityFunction = function(opt_returnValue, var_args) { + return opt_returnValue; +}; + + +/** + * When defining a class Foo with an abstract method bar(), you can do: + * Foo.prototype.bar = goog.abstractMethod + * + * Now if a subclass of Foo fails to override bar(), an error will be thrown + * when bar() is invoked. + * + * Note: This does not take the name of the function to override as an argument + * because that would make it more difficult to obfuscate our JavaScript code. + * + * @type {!Function} + * @throws {Error} when invoked to indicate the method should be overridden. + */ +goog.abstractMethod = function() { + throw Error('unimplemented abstract method'); +}; + + +/** + * Adds a {@code getInstance} static method that always returns the same + * instance object. + * @param {!Function} ctor The constructor for the class to add the static + * method to. + */ +goog.addSingletonGetter = function(ctor) { + ctor.getInstance = function() { + if (ctor.instance_) { + return ctor.instance_; + } + if (goog.DEBUG) { + // NOTE: JSCompiler can't optimize away Array#push. + goog.instantiatedSingletons_[goog.instantiatedSingletons_.length] = ctor; + } + return ctor.instance_ = new ctor; + }; +}; + + +/** + * All singleton classes that have been instantiated, for testing. Don't read + * it directly, use the {@code goog.testing.singleton} module. The compiler + * removes this variable if unused. + * @type {!Array.} + * @private + */ +goog.instantiatedSingletons_ = []; + + +/** + * True if goog.dependencies_ is available. + * @const {boolean} + */ +goog.DEPENDENCIES_ENABLED = !COMPILED && goog.ENABLE_DEBUG_LOADER; + + +if (goog.DEPENDENCIES_ENABLED) { + /** + * Object used to keep track of urls that have already been added. This record + * allows the prevention of circular dependencies. + * @type {Object} + * @private + */ + goog.included_ = {}; + + + /** + * This object is used to keep track of dependencies and other data that is + * used for loading scripts. + * @private + * @type {Object} + */ + goog.dependencies_ = { + pathToNames: {}, // 1 to many + nameToPath: {}, // 1 to 1 + requires: {}, // 1 to many + // Used when resolving dependencies to prevent us from visiting file twice. + visited: {}, + written: {} // Used to keep track of script files we have written. + }; + + + /** + * Tries to detect whether is in the context of an HTML document. + * @return {boolean} True if it looks like HTML document. + * @private + */ + goog.inHtmlDocument_ = function() { + var doc = goog.global.document; + return typeof doc != 'undefined' && + 'write' in doc; // XULDocument misses write. + }; + + + /** + * Tries to detect the base path of base.js script that bootstraps Closure. + * @private + */ + goog.findBasePath_ = function() { + if (goog.global.CLOSURE_BASE_PATH) { + goog.basePath = goog.global.CLOSURE_BASE_PATH; + return; + } else if (!goog.inHtmlDocument_()) { + return; + } + var doc = goog.global.document; + var scripts = doc.getElementsByTagName('script'); + // Search backwards since the current script is in almost all cases the one + // that has base.js. + for (var i = scripts.length - 1; i >= 0; --i) { + var src = scripts[i].src; + var qmark = src.lastIndexOf('?'); + var l = qmark == -1 ? src.length : qmark; + if (src.substr(l - 7, 7) == 'base.js') { + goog.basePath = src.substr(0, l - 7); + return; + } + } + }; + + + /** + * Imports a script if, and only if, that script hasn't already been imported. + * (Must be called at execution time) + * @param {string} src Script source. + * @private + */ + goog.importScript_ = function(src) { + var importScript = goog.global.CLOSURE_IMPORT_SCRIPT || + goog.writeScriptTag_; + if (!goog.dependencies_.written[src] && importScript(src)) { + goog.dependencies_.written[src] = true; + } + }; + + + /** + * The default implementation of the import function. Writes a script tag to + * import the script. + * + * @param {string} src The script source. + * @return {boolean} True if the script was imported, false otherwise. + * @private + */ + goog.writeScriptTag_ = function(src) { + if (goog.inHtmlDocument_()) { + var doc = goog.global.document; + + // If the user tries to require a new symbol after document load, + // something has gone terribly wrong. Doing a document.write would + // wipe out the page. + if (doc.readyState == 'complete') { + // Certain test frameworks load base.js multiple times, which tries + // to write deps.js each time. If that happens, just fail silently. + // These frameworks wipe the page between each load of base.js, so this + // is OK. + var isDeps = /\bdeps.js$/.test(src); + if (isDeps) { + return false; + } else { + throw Error('Cannot write "' + src + '" after document load'); + } + } + + doc.write( + ''); + assertEquals('SCRIPT', script.tagName); + + if (goog.userAgent.IE && !goog.userAgent.isDocumentModeOrHigher(9)) { + // Removing an Element from a DOM tree in IE sets its parentNode to a new + // DocumentFragment. Bizarre! + assertEquals(goog.dom.NodeType.DOCUMENT_FRAGMENT, + goog.dom.removeNode(div).parentNode.nodeType); + } else { + assertNull(div.parentNode); + } +} + +function testAppend() { + var div = document.createElement('div'); + var b = document.createElement('b'); + var c = document.createTextNode('c'); + goog.dom.append(div, 'a', b, c); + assertEqualsCaseAndLeadingWhitespaceInsensitive('ac', div.innerHTML); +} + +function testAppend2() { + var div = myIframeDoc.createElement('div'); + var b = myIframeDoc.createElement('b'); + var c = myIframeDoc.createTextNode('c'); + goog.dom.append(div, 'a', b, c); + assertEqualsCaseAndLeadingWhitespaceInsensitive('ac', div.innerHTML); +} + +function testAppend3() { + var div = document.createElement('div'); + var b = document.createElement('b'); + var c = document.createTextNode('c'); + goog.dom.append(div, ['a', b, c]); + assertEqualsCaseAndLeadingWhitespaceInsensitive('ac', div.innerHTML); +} + +function testAppend4() { + var div = document.createElement('div'); + var div2 = document.createElement('div'); + div2.innerHTML = 'ac'; + goog.dom.append(div, div2.childNodes); + assertEqualsCaseAndLeadingWhitespaceInsensitive('ac', div.innerHTML); + assertFalse(div2.hasChildNodes()); +} + +function testGetDocumentScroll() { + // setUpPage added divForTestingScrolling to the DOM. It's not init'd here so + // it can be shared amonst other tests. + window.scrollTo(100, 100); + + assertEquals(100, goog.dom.getDocumentScroll().x); + assertEquals(100, goog.dom.getDocumentScroll().y); +} + +function testGetDocumentScrollOfFixedViewport() { + // iOS and perhaps other environments don't actually support scrolling. + // Instead, you view the document's fixed layout through a screen viewport. + // We need getDocumentScroll to handle this case though. + // In case of IE10 though, we do want to use scrollLeft/scrollTop + // because the rest of the positioning is done off the scrolled away origin. + var fakeDocumentScrollElement = {scrollLeft: 0, scrollTop: 0}; + var fakeDocument = { + defaultView: {pageXOffset: 100, pageYOffset: 100}, + documentElement: fakeDocumentScrollElement, + body: fakeDocumentScrollElement + }; + var dh = goog.dom.getDomHelper(document); + dh.setDocument(fakeDocument); + if (goog.userAgent.IE && goog.userAgent.isVersionOrHigher(10)) { + assertEquals(0, dh.getDocumentScroll().x); + assertEquals(0, dh.getDocumentScroll().y); + } else { + assertEquals(100, dh.getDocumentScroll().x); + assertEquals(100, dh.getDocumentScroll().y); + } +} + +function testActiveElementIE() { + if (!goog.userAgent.IE) { + return; + } + + var link = goog.dom.getElement('link'); + link.focus(); + + assertEquals(link.tagName, goog.dom.getActiveElement(document).tagName); + assertEquals(link, goog.dom.getActiveElement(document)); +} + +function testParentElement() { + var testEl = $('testEl'); + var bodyEl = goog.dom.getParentElement(testEl); + assertNotNull(bodyEl); + var htmlEl = goog.dom.getParentElement(bodyEl); + assertNotNull(htmlEl); + var documentNotAnElement = goog.dom.getParentElement(htmlEl); + assertNull(documentNotAnElement); + + var tree = goog.dom.htmlToDocumentFragment( + '
' + + '

Some text

' + + '
Some special text
' + + '
Foo
' + + '
'); + assertNull(goog.dom.getParentElement(tree)); + pEl = goog.dom.getNextNode(tree); + var fragmentRootEl = goog.dom.getParentElement(pEl); + assertEquals(tree, fragmentRootEl); + + var detachedEl = goog.dom.createDom('div'); + var detachedHasNoParent = goog.dom.getParentElement(detachedEl); + assertNull(detachedHasNoParent); + + if (goog.userAgent.IE && !goog.userAgent.isVersionOrHigher('9')) { + // svg is not supported in IE8 and below. + return; + } + + var svg = $('testSvg'); + assertNotNull(svg); + var rect = $('testRect'); + assertNotNull(rect); + var g = $('testG'); + assertNotNull(g); + + if (goog.userAgent.IE && goog.userAgent.isVersionOrHigher('9')) { + // test to make sure IE9 is returning undefined for .parentElement + assertUndefined(g.parentElement); + assertUndefined(rect.parentElement); + assertUndefined(svg.parentElement); + } + var shouldBeG = goog.dom.getParentElement(rect); + assertEquals(g, shouldBeG); + var shouldBeSvg = goog.dom.getParentElement(g); + assertEquals(svg, shouldBeSvg); + var shouldBeBody = goog.dom.getParentElement(svg); + assertEquals(bodyEl, shouldBeBody); +} + + +/** + * @return {boolean} Returns true if the userAgent is IE8 or higher. + */ +function isIE8OrHigher() { + return goog.userAgent.IE && goog.userAgent.product.isVersion('8'); +} diff --git a/float-no-zero/closure-library/closure/goog/dom/fontsizemonitor.js b/float-no-zero/closure-library/closure/goog/dom/fontsizemonitor.js new file mode 100644 index 0000000000..8bf4f67569 --- /dev/null +++ b/float-no-zero/closure-library/closure/goog/dom/fontsizemonitor.js @@ -0,0 +1,159 @@ +// Copyright 2005 The Closure Library Authors. All Rights Reserved. +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS-IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +/** + * @fileoverview A class that can be used to listen to font size changes. + */ + +goog.provide('goog.dom.FontSizeMonitor'); +goog.provide('goog.dom.FontSizeMonitor.EventType'); + +goog.require('goog.dom'); +goog.require('goog.events'); +goog.require('goog.events.EventTarget'); +goog.require('goog.events.EventType'); +goog.require('goog.userAgent'); + + +// TODO(arv): Move this to goog.events instead. + + + +/** + * This class can be used to monitor changes in font size. Instances will + * dispatch a {@code goog.dom.FontSizeMonitor.EventType.CHANGE} event. + * Example usage: + *
+ * var fms = new goog.dom.FontSizeMonitor();
+ * goog.events.listen(fms, goog.dom.FontSizeMonitor.EventType.CHANGE,
+ *     function(e) {
+ *       alert('Font size was changed');
+ *     });
+ * 
+ * @param {goog.dom.DomHelper=} opt_domHelper DOM helper object that is used to + * determine where to insert the DOM nodes used to determine when the font + * size changes. + * @constructor + * @extends {goog.events.EventTarget} + */ +goog.dom.FontSizeMonitor = function(opt_domHelper) { + goog.events.EventTarget.call(this); + + var dom = opt_domHelper || goog.dom.getDomHelper(); + + /** + * Offscreen iframe which we use to detect resize events. + * @type {Element} + * @private + */ + this.sizeElement_ = dom.createDom( + // The size of the iframe is expressed in em, which are font size relative + // which will cause the iframe to be resized when the font size changes. + // The actual values are not relevant as long as we can ensure that the + // iframe has a non zero size and is completely off screen. + goog.userAgent.IE ? 'div' : 'iframe', { + 'style': 'position:absolute;width:9em;height:9em;top:-99em', + 'tabIndex': -1, + 'aria-hidden': 'true' + }); + var p = dom.getDocument().body; + p.insertBefore(this.sizeElement_, p.firstChild); + + /** + * The object that we listen to resize events on. + * @type {Element|Window} + * @private + */ + var resizeTarget = this.resizeTarget_ = + goog.userAgent.IE ? this.sizeElement_ : + goog.dom.getFrameContentWindow( + /** @type {HTMLIFrameElement} */ (this.sizeElement_)); + + // We need to open and close the document to get Firefox 2 to work. We must + // not do this for IE in case we are using HTTPS since accessing the document + // on an about:blank iframe in IE using HTTPS raises a Permission Denied + // error. + if (goog.userAgent.GECKO) { + var doc = resizeTarget.document; + doc.open(); + doc.close(); + } + + // Listen to resize event on the window inside the iframe. + goog.events.listen(resizeTarget, goog.events.EventType.RESIZE, + this.handleResize_, false, this); + + /** + * Last measured width of the iframe element. + * @type {number} + * @private + */ + this.lastWidth_ = this.sizeElement_.offsetWidth; +}; +goog.inherits(goog.dom.FontSizeMonitor, goog.events.EventTarget); + + +/** + * The event types that the FontSizeMonitor fires. + * @enum {string} + */ +goog.dom.FontSizeMonitor.EventType = { + // TODO(arv): Change value to 'change' after updating the callers. + CHANGE: 'fontsizechange' +}; + + +/** + * Constant for the change event. + * @type {string} + * @deprecated Use {@code goog.dom.FontSizeMonitor.EventType.CHANGE} instead. + */ +goog.dom.FontSizeMonitor.CHANGE_EVENT = + goog.dom.FontSizeMonitor.EventType.CHANGE; + + +/** @override */ +goog.dom.FontSizeMonitor.prototype.disposeInternal = function() { + goog.dom.FontSizeMonitor.superClass_.disposeInternal.call(this); + + goog.events.unlisten(this.resizeTarget_, goog.events.EventType.RESIZE, + this.handleResize_, false, this); + this.resizeTarget_ = null; + + // Firefox 2 crashes if the iframe is removed during the unload phase. + if (!goog.userAgent.GECKO || + goog.userAgent.isVersionOrHigher('1.9')) { + goog.dom.removeNode(this.sizeElement_); + } + delete this.sizeElement_; +}; + + +/** + * Handles the onresize event of the iframe and dispatches a change event in + * case its size really changed. + * @param {goog.events.BrowserEvent} e The event object. + * @private + */ +goog.dom.FontSizeMonitor.prototype.handleResize_ = function(e) { + // Only dispatch the event if the size really changed. Some newer browsers do + // not really change the font-size, instead they zoom the whole page. This + // does trigger window resize events on the iframe but the logical pixel size + // remains the same (the device pixel size changes but that is irrelevant). + var currentWidth = this.sizeElement_.offsetWidth; + if (this.lastWidth_ != currentWidth) { + this.lastWidth_ = currentWidth; + this.dispatchEvent(goog.dom.FontSizeMonitor.EventType.CHANGE); + } +}; diff --git a/float-no-zero/closure-library/closure/goog/dom/forms.js b/float-no-zero/closure-library/closure/goog/dom/forms.js new file mode 100644 index 0000000000..8e6e214413 --- /dev/null +++ b/float-no-zero/closure-library/closure/goog/dom/forms.js @@ -0,0 +1,414 @@ +// Copyright 2006 The Closure Library Authors. All Rights Reserved. +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS-IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +/** + * @fileoverview Utilities for manipulating a form and elements. + * + * @author arv@google.com (Erik Arvidsson) + * @author jonp@google.com (Jon Perlow) + * @author elsigh@google.com (Lindsey Simon) + */ + +goog.provide('goog.dom.forms'); + +goog.require('goog.structs.Map'); + + +/** + * Returns form data as a map of name to value arrays. This doesn't + * support file inputs. + * @param {HTMLFormElement} form The form. + * @return {!goog.structs.Map} A map of the form data as form name to arrays of + * values. + */ +goog.dom.forms.getFormDataMap = function(form) { + var map = new goog.structs.Map(); + goog.dom.forms.getFormDataHelper_(form, map, + goog.dom.forms.addFormDataToMap_); + return map; +}; + + +/** + * Returns the form data as an application/x-www-url-encoded string. This + * doesn't support file inputs. + * @param {HTMLFormElement} form The form. + * @return {string} An application/x-www-url-encoded string. + */ +goog.dom.forms.getFormDataString = function(form) { + var sb = []; + goog.dom.forms.getFormDataHelper_(form, sb, + goog.dom.forms.addFormDataToStringBuffer_); + return sb.join('&'); +}; + + +/** + * Returns the form data as a map or an application/x-www-url-encoded + * string. This doesn't support file inputs. + * @param {HTMLFormElement} form The form. + * @param {Object} result The object form data is being put in. + * @param {Function} fnAppend Function that takes {@code result}, an element + * name, and an element value, and adds the name/value pair to the result + * object. + * @private + */ +goog.dom.forms.getFormDataHelper_ = function(form, result, fnAppend) { + var els = form.elements; + for (var el, i = 0; el = els[i]; i++) { + if (// Make sure we don't include elements that are not part of the form. + // Some browsers include non-form elements. Check for 'form' property. + // See http://code.google.com/p/closure-library/issues/detail?id=227 + // and + // http://www.whatwg.org/specs/web-apps/current-work/multipage/the-input-element.html#the-input-element + (el.form != form) || + el.disabled || + // HTMLFieldSetElement has a form property but no value. + el.tagName.toLowerCase() == 'fieldset') { + continue; + } + + var name = el.name; + switch (el.type.toLowerCase()) { + case 'file': + // file inputs are not supported + case 'submit': + case 'reset': + case 'button': + // don't submit these + break; + case 'select-multiple': + var values = goog.dom.forms.getValue(el); + if (values != null) { + for (var value, j = 0; value = values[j]; j++) { + fnAppend(result, name, value); + } + } + break; + default: + var value = goog.dom.forms.getValue(el); + if (value != null) { + fnAppend(result, name, value); + } + } + } + + // input[type=image] are not included in the elements collection + var inputs = form.getElementsByTagName('input'); + for (var input, i = 0; input = inputs[i]; i++) { + if (input.form == form && input.type.toLowerCase() == 'image') { + name = input.name; + fnAppend(result, name, input.value); + fnAppend(result, name + '.x', '0'); + fnAppend(result, name + '.y', '0'); + } + } +}; + + +/** + * Adds the name/value pair to the map. + * @param {goog.structs.Map} map The map to add to. + * @param {string} name The name. + * @param {string} value The value. + * @private + */ +goog.dom.forms.addFormDataToMap_ = function(map, name, value) { + var array = map.get(name); + if (!array) { + array = []; + map.set(name, array); + } + array.push(value); +}; + + +/** + * Adds a name/value pair to an string buffer array in the form 'name=value'. + * @param {Array} sb The string buffer array for storing data. + * @param {string} name The name. + * @param {string} value The value. + * @private + */ +goog.dom.forms.addFormDataToStringBuffer_ = function(sb, name, value) { + sb.push(encodeURIComponent(name) + '=' + encodeURIComponent(value)); +}; + + +/** + * Whether the form has a file input. + * @param {HTMLFormElement} form The form. + * @return {boolean} Whether the form has a file input. + */ +goog.dom.forms.hasFileInput = function(form) { + var els = form.elements; + for (var el, i = 0; el = els[i]; i++) { + if (!el.disabled && el.type && el.type.toLowerCase() == 'file') { + return true; + } + } + return false; +}; + + +/** + * Enables or disables either all elements in a form or a single form element. + * @param {Element} el The element, either a form or an element within a form. + * @param {boolean} disabled Whether the element should be disabled. + */ +goog.dom.forms.setDisabled = function(el, disabled) { + // disable all elements in a form + if (el.tagName == 'FORM') { + var els = el.elements; + for (var i = 0; el = els[i]; i++) { + goog.dom.forms.setDisabled(el, disabled); + } + } else { + // makes sure to blur buttons, multi-selects, and any elements which + // maintain keyboard/accessibility focus when disabled + if (disabled == true) { + el.blur(); + } + el.disabled = disabled; + } +}; + + +/** + * Focuses, and optionally selects the content of, a form element. + * @param {Element} el The form element. + */ +goog.dom.forms.focusAndSelect = function(el) { + el.focus(); + if (el.select) { + el.select(); + } +}; + + +/** + * Whether a form element has a value. + * @param {Element} el The element. + * @return {boolean} Whether the form has a value. + */ +goog.dom.forms.hasValue = function(el) { + var value = goog.dom.forms.getValue(el); + return !!value; +}; + + +/** + * Whether a named form field has a value. + * @param {HTMLFormElement} form The form element. + * @param {string} name Name of an input to the form. + * @return {boolean} Whether the form has a value. + */ +goog.dom.forms.hasValueByName = function(form, name) { + var value = goog.dom.forms.getValueByName(form, name); + return !!value; +}; + + +/** + * Gets the current value of any element with a type. + * @param {Element} el The element. + * @return {string|Array.|null} The current value of the element + * (or null). + */ +goog.dom.forms.getValue = function(el) { + var type = el.type; + if (!goog.isDef(type)) { + return null; + } + switch (type.toLowerCase()) { + case 'checkbox': + case 'radio': + return goog.dom.forms.getInputChecked_(el); + case 'select-one': + return goog.dom.forms.getSelectSingle_(el); + case 'select-multiple': + return goog.dom.forms.getSelectMultiple_(el); + default: + return goog.isDef(el.value) ? el.value : null; + } +}; + + +/** + * Alias for goog.dom.form.element.getValue + * @type {Function} + * @deprecated Use {@link goog.dom.forms.getValue} instead. + */ +goog.dom.$F = goog.dom.forms.getValue; + + +/** + * Returns the value of the named form field. In the case of radio buttons, + * returns the value of the checked button with the given name. + * + * @param {HTMLFormElement} form The form element. + * @param {string} name Name of an input to the form. + * + * @return {Array.|string|null} The value of the form element, or + * null if the form element does not exist or has no value. + */ +goog.dom.forms.getValueByName = function(form, name) { + var els = form.elements[name]; + + if (els) { + if (els.type) { + return goog.dom.forms.getValue(els); + } else { + for (var i = 0; i < els.length; i++) { + var val = goog.dom.forms.getValue(els[i]); + if (val) { + return val; + } + } + } + } + return null; +}; + + +/** + * Gets the current value of a checkable input element. + * @param {Element} el The element. + * @return {?string} The value of the form element (or null). + * @private + */ +goog.dom.forms.getInputChecked_ = function(el) { + return el.checked ? el.value : null; +}; + + +/** + * Gets the current value of a select-one element. + * @param {Element} el The element. + * @return {?string} The value of the form element (or null). + * @private + */ +goog.dom.forms.getSelectSingle_ = function(el) { + var selectedIndex = el.selectedIndex; + return selectedIndex >= 0 ? el.options[selectedIndex].value : null; +}; + + +/** + * Gets the current value of a select-multiple element. + * @param {Element} el The element. + * @return {Array.?} The value of the form element (or null). + * @private + */ +goog.dom.forms.getSelectMultiple_ = function(el) { + var values = []; + for (var option, i = 0; option = el.options[i]; i++) { + if (option.selected) { + values.push(option.value); + } + } + return values.length ? values : null; +}; + + +/** + * Sets the current value of any element with a type. + * @param {Element} el The element. + * @param {*=} opt_value The value to give to the element, which will be coerced + * by the browser in the default case using toString. This value should be + * an array for setting the value of select multiple elements. + */ +goog.dom.forms.setValue = function(el, opt_value) { + var type = el.type; + if (goog.isDef(type)) { + switch (type.toLowerCase()) { + case 'checkbox': + case 'radio': + goog.dom.forms.setInputChecked_(el, + /** @type {string} */ (opt_value)); + break; + case 'select-one': + goog.dom.forms.setSelectSingle_(el, + /** @type {string} */ (opt_value)); + break; + case 'select-multiple': + goog.dom.forms.setSelectMultiple_(el, + /** @type {Array} */ (opt_value)); + break; + default: + el.value = goog.isDefAndNotNull(opt_value) ? opt_value : ''; + } + } +}; + + +/** + * Sets a checkable input element's checked property. + * #TODO(user): This seems potentially unintuitive since it doesn't set + * the value property but my hunch is that the primary use case is to check a + * checkbox, not to reset its value property. + * @param {Element} el The element. + * @param {string|boolean=} opt_value The value, sets the element checked if + * val is set. + * @private + */ +goog.dom.forms.setInputChecked_ = function(el, opt_value) { + el.checked = opt_value ? 'checked' : null; +}; + + +/** + * Sets the value of a select-one element. + * @param {Element} el The element. + * @param {string=} opt_value The value of the selected option element. + * @private + */ +goog.dom.forms.setSelectSingle_ = function(el, opt_value) { + // unset any prior selections + el.selectedIndex = -1; + if (goog.isString(opt_value)) { + for (var option, i = 0; option = el.options[i]; i++) { + if (option.value == opt_value) { + option.selected = true; + break; + } + } + } +}; + + +/** + * Sets the value of a select-multiple element. + * @param {Element} el The element. + * @param {Array.|string=} opt_value The value of the selected option + * element(s). + * @private + */ +goog.dom.forms.setSelectMultiple_ = function(el, opt_value) { + // reset string opt_values as an array + if (goog.isString(opt_value)) { + opt_value = [opt_value]; + } + for (var option, i = 0; option = el.options[i]; i++) { + // we have to reset the other options to false for select-multiple + option.selected = false; + if (opt_value) { + for (var value, j = 0; value = opt_value[j]; j++) { + if (option.value == value) { + option.selected = true; + } + } + } + } +}; diff --git a/float-no-zero/closure-library/closure/goog/dom/fullscreen.js b/float-no-zero/closure-library/closure/goog/dom/fullscreen.js new file mode 100644 index 0000000000..d1f1297314 --- /dev/null +++ b/float-no-zero/closure-library/closure/goog/dom/fullscreen.js @@ -0,0 +1,124 @@ +// Copyright 2012 The Closure Library Authors. All Rights Reserved. +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS-IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +/** + * @fileoverview Functions for managing full screen status of the DOM. + * + */ + +goog.provide('goog.dom.fullscreen'); +goog.provide('goog.dom.fullscreen.EventType'); + +goog.require('goog.dom'); +goog.require('goog.userAgent'); +goog.require('goog.userAgent.product'); + + +/** + * Event types for full screen. + * @enum {string} + */ +goog.dom.fullscreen.EventType = { + /** Dispatched by the Document when the fullscreen status changes. */ + CHANGE: goog.userAgent.WEBKIT ? + 'webkitfullscreenchange' : + 'mozfullscreenchange' +}; + + +/** + * Determines if full screen is supported. + * @param {!goog.dom.DomHelper=} opt_domHelper The DomHelper for the DOM being + * queried. If not provided, use the current DOM. + * @return {boolean} True iff full screen is supported. + */ +goog.dom.fullscreen.isSupported = function(opt_domHelper) { + var doc = goog.dom.fullscreen.getDocument_(opt_domHelper); + var body = doc.body; + return !!body.webkitRequestFullScreen || + (!!body.mozRequestFullScreen && doc.mozFullScreenEnabled); +}; + + +/** + * Requests putting the element in full screen. + * @param {!Element} element The element to put full screen. + */ +goog.dom.fullscreen.requestFullScreen = function(element) { + if (element.webkitRequestFullScreen) { + element.webkitRequestFullScreen(); + } else if (element.mozRequestFullScreen) { + element.mozRequestFullScreen(); + } +}; + + +/** + * Requests putting the element in full screen with full keyboard access. + * @param {!Element} element The element to put full screen. + */ +goog.dom.fullscreen.requestFullScreenWithKeys = function( + element) { + if (element.mozRequestFullScreenWithKeys) { + element.mozRequestFullScreenWithKeys(); + } else if (element.webkitRequestFullScreen && + element.ALLOW_KEYBOARD_INPUT && + goog.userAgent.product.CHROME) { + // Safari has the ALLOW_KEYBOARD_INPUT property but using it gives an error. + element.webkitRequestFullScreen(element.ALLOW_KEYBOARD_INPUT); + } else { + goog.dom.fullscreen.requestFullScreen(element); + } +}; + + +/** + * Exits full screen. + * @param {!goog.dom.DomHelper=} opt_domHelper The DomHelper for the DOM being + * queried. If not provided, use the current DOM. + */ +goog.dom.fullscreen.exitFullScreen = function(opt_domHelper) { + var doc = goog.dom.fullscreen.getDocument_(opt_domHelper); + if (doc.webkitCancelFullScreen) { + doc.webkitCancelFullScreen(); + } else if (doc.mozCancelFullScreen) { + doc.mozCancelFullScreen(); + } +}; + + +/** + * Determines if the document is full screen. + * @param {!goog.dom.DomHelper=} opt_domHelper The DomHelper for the DOM being + * queried. If not provided, use the current DOM. + * @return {boolean} Whether the document is full screen. + */ +goog.dom.fullscreen.isFullScreen = function(opt_domHelper) { + var doc = goog.dom.fullscreen.getDocument_(opt_domHelper); + return !!doc.webkitIsFullScreen || !!doc.mozFullScreen; +}; + + +/** + * Gets the document object of the dom. + * @param {!goog.dom.DomHelper=} opt_domHelper The DomHelper for the DOM being + * queried. If not provided, use the current DOM. + * @return {!Document} The dom document. + * @private + */ +goog.dom.fullscreen.getDocument_ = function(opt_domHelper) { + return opt_domHelper ? + opt_domHelper.getDocument() : + goog.dom.getDomHelper().getDocument(); +}; diff --git a/float-no-zero/closure-library/closure/goog/dom/iframe.js b/float-no-zero/closure-library/closure/goog/dom/iframe.js new file mode 100644 index 0000000000..c23e795c31 --- /dev/null +++ b/float-no-zero/closure-library/closure/goog/dom/iframe.js @@ -0,0 +1,163 @@ +// Copyright 2008 The Closure Library Authors. All Rights Reserved. +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS-IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +/** + * @fileoverview Utilities for creating and working with iframes + * cross-browser. + * @author gboyer@google.com (Garry Boyer) + */ + + +goog.provide('goog.dom.iframe'); + +goog.require('goog.dom'); +goog.require('goog.userAgent'); + + +/** + * Safe source for a blank iframe. + * + * Intentionally not about:blank, which gives mixed content warnings in IE6 + * over HTTPS. + * + * @type {string} + */ +goog.dom.iframe.BLANK_SOURCE = 'javascript:""'; + + +/** + * Safe source for a new blank iframe that may not cause a new load of the + * iframe. This is different from {@code goog.dom.iframe.BLANK_SOURCE} in that + * it will allow an iframe to be loaded synchronously in more browsers, notably + * Gecko, following the javascript protocol spec. + * + * NOTE: This should not be used to replace the source of an existing iframe. + * The new src value will be ignored, per the spec. + * + * Due to cross-browser differences, the load is not guaranteed to be + * synchronous. If code depends on the load of the iframe, + * then {@code goog.net.IframeLoadMonitor} or a similar technique should be + * used. + * + * According to + * http://www.whatwg.org/specs/web-apps/current-work/multipage/webappapis.html#javascript-protocol + * the 'javascript:""' URL should trigger a new load of the iframe, which may be + * asynchronous. A void src, such as 'javascript:undefined', does not change + * the browsing context document's, and thus should not trigger another load. + * + * Intentionally not about:blank, which also triggers a load. + * + * NOTE: 'javascript:' URL handling spec compliance varies per browser. IE + * throws an error with 'javascript:undefined'. Webkit browsers will reload the + * iframe when setting this source on an existing iframe. + * + * @type {string} + */ +goog.dom.iframe.BLANK_SOURCE_NEW_FRAME = goog.userAgent.IE ? + 'javascript:""' : + 'javascript:undefined'; + + +/** + * Styles to help ensure an undecorated iframe. + * @type {string} + * @private + */ +goog.dom.iframe.STYLES_ = 'border:0;vertical-align:bottom;'; + + +/** + * Creates a completely blank iframe element. + * + * The iframe will not caused mixed-content warnings for IE6 under HTTPS. + * The iframe will also have no borders or padding, so that the styled width + * and height will be the actual width and height of the iframe. + * + * This function currently only attempts to create a blank iframe. There + * are no guarantees to the contents of the iframe or whether it is rendered + * in quirks mode. + * + * @param {goog.dom.DomHelper} domHelper The dom helper to use. + * @param {string=} opt_styles CSS styles for the iframe. + * @return {!HTMLIFrameElement} A completely blank iframe. + */ +goog.dom.iframe.createBlank = function(domHelper, opt_styles) { + return /** @type {!HTMLIFrameElement} */ (domHelper.createDom('iframe', { + 'frameborder': 0, + // Since iframes are inline elements, we must align to bottom to + // compensate for the line descent. + 'style': goog.dom.iframe.STYLES_ + (opt_styles || ''), + 'src': goog.dom.iframe.BLANK_SOURCE + })); +}; + + +/** + * Writes the contents of a blank iframe that has already been inserted + * into the document. + * @param {!HTMLIFrameElement} iframe An iframe with no contents, such as + * one created by goog.dom.iframe.createBlank, but already appended to + * a parent document. + * @param {string} content Content to write to the iframe, from doctype to + * the HTML close tag. + */ +goog.dom.iframe.writeContent = function(iframe, content) { + var doc = goog.dom.getFrameContentDocument(iframe); + doc.open(); + doc.write(content); + doc.close(); +}; + + +// TODO(gboyer): Provide a higher-level API for the most common use case, so +// that you can just provide a list of stylesheets and some content HTML. +/** + * Creates a same-domain iframe containing preloaded content. + * + * This is primarily useful for DOM sandboxing. One use case is to embed + * a trusted Javascript app with potentially conflicting CSS styles. The + * second case is to reduce the cost of layout passes by the browser -- for + * example, you can perform sandbox sizing of characters in an iframe while + * manipulating a heavy DOM in the main window. The iframe and parent frame + * can access each others' properties and functions without restriction. + * + * @param {!Element} parentElement The parent element in which to append the + * iframe. + * @param {string=} opt_headContents Contents to go into the iframe's head. + * @param {string=} opt_bodyContents Contents to go into the iframe's body. + * @param {string=} opt_styles CSS styles for the iframe itself, before adding + * to the parent element. + * @param {boolean=} opt_quirks Whether to use quirks mode (false by default). + * @return {HTMLIFrameElement} An iframe that has the specified contents. + */ +goog.dom.iframe.createWithContent = function( + parentElement, opt_headContents, opt_bodyContents, opt_styles, opt_quirks) { + var domHelper = goog.dom.getDomHelper(parentElement); + // Generate the HTML content. + var contentBuf = []; + + if (!opt_quirks) { + contentBuf.push(''); + } + contentBuf.push('', opt_headContents, '', + opt_bodyContents, ''); + + var iframe = goog.dom.iframe.createBlank(domHelper, opt_styles); + + // Cannot manipulate iframe content until it is in a document. + parentElement.appendChild(iframe); + goog.dom.iframe.writeContent(iframe, contentBuf.join('')); + + return iframe; +}; diff --git a/float-no-zero/closure-library/closure/goog/dom/iter.js b/float-no-zero/closure-library/closure/goog/dom/iter.js new file mode 100644 index 0000000000..0224af3ec4 --- /dev/null +++ b/float-no-zero/closure-library/closure/goog/dom/iter.js @@ -0,0 +1,127 @@ +// Copyright 2008 The Closure Library Authors. All Rights Reserved. +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS-IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +/** + * @fileoverview Iterators over DOM nodes. + * + * @author robbyw@google.com (Robby Walker) + */ + +goog.provide('goog.dom.iter.AncestorIterator'); +goog.provide('goog.dom.iter.ChildIterator'); +goog.provide('goog.dom.iter.SiblingIterator'); + +goog.require('goog.iter.Iterator'); +goog.require('goog.iter.StopIteration'); + + + +/** + * Iterator over a Node's siblings. + * @param {Node} node The node to start with. + * @param {boolean=} opt_includeNode Whether to return the given node as the + * first return value from next. + * @param {boolean=} opt_reverse Whether to traverse siblings in reverse + * document order. + * @constructor + * @extends {goog.iter.Iterator} + */ +goog.dom.iter.SiblingIterator = function(node, opt_includeNode, opt_reverse) { + /** + * The current node, or null if iteration is finished. + * @type {Node} + * @private + */ + this.node_ = node; + + /** + * Whether to iterate in reverse. + * @type {boolean} + * @private + */ + this.reverse_ = !!opt_reverse; + + if (node && !opt_includeNode) { + this.next(); + } +}; +goog.inherits(goog.dom.iter.SiblingIterator, goog.iter.Iterator); + + +/** @override */ +goog.dom.iter.SiblingIterator.prototype.next = function() { + var node = this.node_; + if (!node) { + throw goog.iter.StopIteration; + } + this.node_ = this.reverse_ ? node.previousSibling : node.nextSibling; + return node; +}; + + + +/** + * Iterator over an Element's children. + * @param {Element} element The element to iterate over. + * @param {boolean=} opt_reverse Optionally traverse children from last to + * first. + * @param {number=} opt_startIndex Optional starting index. + * @constructor + * @extends {goog.dom.iter.SiblingIterator} + */ +goog.dom.iter.ChildIterator = function(element, opt_reverse, opt_startIndex) { + if (!goog.isDef(opt_startIndex)) { + opt_startIndex = opt_reverse && element.childNodes.length ? + element.childNodes.length - 1 : 0; + } + goog.dom.iter.SiblingIterator.call(this, element.childNodes[opt_startIndex], + true, opt_reverse); +}; +goog.inherits(goog.dom.iter.ChildIterator, goog.dom.iter.SiblingIterator); + + + +/** + * Iterator over a Node's ancestors, stopping after the document body. + * @param {Node} node The node to start with. + * @param {boolean=} opt_includeNode Whether to return the given node as the + * first return value from next. + * @constructor + * @extends {goog.iter.Iterator} + */ +goog.dom.iter.AncestorIterator = function(node, opt_includeNode) { + /** + * The current node, or null if iteration is finished. + * @type {Node} + * @private + */ + this.node_ = node; + + if (node && !opt_includeNode) { + this.next(); + } +}; +goog.inherits(goog.dom.iter.AncestorIterator, goog.iter.Iterator); + + +/** @override */ +goog.dom.iter.AncestorIterator.prototype.next = function() { + var node = this.node_; + if (!node) { + throw goog.iter.StopIteration; + } + this.node_ = node.parentNode; + return node; +}; + diff --git a/float-no-zero/closure-library/closure/goog/dom/multirange.js b/float-no-zero/closure-library/closure/goog/dom/multirange.js new file mode 100644 index 0000000000..0fb6f2064f --- /dev/null +++ b/float-no-zero/closure-library/closure/goog/dom/multirange.js @@ -0,0 +1,519 @@ +// Copyright 2008 The Closure Library Authors. All Rights Reserved. +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS-IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +/** + * @fileoverview Utilities for working with W3C multi-part ranges. + * + * @author robbyw@google.com (Robby Walker) + */ + + +goog.provide('goog.dom.MultiRange'); +goog.provide('goog.dom.MultiRangeIterator'); + +goog.require('goog.array'); +goog.require('goog.dom.AbstractMultiRange'); +goog.require('goog.dom.AbstractRange'); +goog.require('goog.dom.RangeIterator'); +goog.require('goog.dom.RangeType'); +goog.require('goog.dom.SavedRange'); +goog.require('goog.dom.TextRange'); +goog.require('goog.iter.StopIteration'); +goog.require('goog.log'); + + + +/** + * Creates a new multi part range with no properties. Do not use this + * constructor: use one of the goog.dom.Range.createFrom* methods instead. + * @constructor + * @extends {goog.dom.AbstractMultiRange} + */ +goog.dom.MultiRange = function() { + /** + * Array of browser sub-ranges comprising this multi-range. + * @type {Array.} + * @private + */ + this.browserRanges_ = []; + + /** + * Lazily initialized array of range objects comprising this multi-range. + * @type {Array.} + * @private + */ + this.ranges_ = []; + + /** + * Lazily computed sorted version of ranges_, sorted by start point. + * @type {Array.?} + * @private + */ + this.sortedRanges_ = null; + + /** + * Lazily computed container node. + * @type {Node} + * @private + */ + this.container_ = null; +}; +goog.inherits(goog.dom.MultiRange, goog.dom.AbstractMultiRange); + + +/** + * Creates a new range wrapper from the given browser selection object. Do not + * use this method directly - please use goog.dom.Range.createFrom* instead. + * @param {Selection} selection The browser selection object. + * @return {goog.dom.MultiRange} A range wrapper object. + */ +goog.dom.MultiRange.createFromBrowserSelection = function(selection) { + var range = new goog.dom.MultiRange(); + for (var i = 0, len = selection.rangeCount; i < len; i++) { + range.browserRanges_.push(selection.getRangeAt(i)); + } + return range; +}; + + +/** + * Creates a new range wrapper from the given browser ranges. Do not + * use this method directly - please use goog.dom.Range.createFrom* instead. + * @param {Array.} browserRanges The browser ranges. + * @return {goog.dom.MultiRange} A range wrapper object. + */ +goog.dom.MultiRange.createFromBrowserRanges = function(browserRanges) { + var range = new goog.dom.MultiRange(); + range.browserRanges_ = goog.array.clone(browserRanges); + return range; +}; + + +/** + * Creates a new range wrapper from the given goog.dom.TextRange objects. Do + * not use this method directly - please use goog.dom.Range.createFrom* instead. + * @param {Array.} textRanges The text range objects. + * @return {goog.dom.MultiRange} A range wrapper object. + */ +goog.dom.MultiRange.createFromTextRanges = function(textRanges) { + var range = new goog.dom.MultiRange(); + range.ranges_ = textRanges; + range.browserRanges_ = goog.array.map(textRanges, function(range) { + return range.getBrowserRangeObject(); + }); + return range; +}; + + +/** + * Logging object. + * @type {goog.log.Logger} + * @private + */ +goog.dom.MultiRange.prototype.logger_ = + goog.log.getLogger('goog.dom.MultiRange'); + + +// Method implementations + + +/** + * Clears cached values. Should be called whenever this.browserRanges_ is + * modified. + * @private + */ +goog.dom.MultiRange.prototype.clearCachedValues_ = function() { + this.ranges_ = []; + this.sortedRanges_ = null; + this.container_ = null; +}; + + +/** + * @return {goog.dom.MultiRange} A clone of this range. + * @override + */ +goog.dom.MultiRange.prototype.clone = function() { + return goog.dom.MultiRange.createFromBrowserRanges(this.browserRanges_); +}; + + +/** @override */ +goog.dom.MultiRange.prototype.getType = function() { + return goog.dom.RangeType.MULTI; +}; + + +/** @override */ +goog.dom.MultiRange.prototype.getBrowserRangeObject = function() { + // NOTE(robbyw): This method does not make sense for multi-ranges. + if (this.browserRanges_.length > 1) { + goog.log.warning(this.logger_, + 'getBrowserRangeObject called on MultiRange with more than 1 range'); + } + return this.browserRanges_[0]; +}; + + +/** @override */ +goog.dom.MultiRange.prototype.setBrowserRangeObject = function(nativeRange) { + // TODO(robbyw): Look in to adding setBrowserSelectionObject. + return false; +}; + + +/** @override */ +goog.dom.MultiRange.prototype.getTextRangeCount = function() { + return this.browserRanges_.length; +}; + + +/** @override */ +goog.dom.MultiRange.prototype.getTextRange = function(i) { + if (!this.ranges_[i]) { + this.ranges_[i] = goog.dom.TextRange.createFromBrowserRange( + this.browserRanges_[i]); + } + return this.ranges_[i]; +}; + + +/** @override */ +goog.dom.MultiRange.prototype.getContainer = function() { + if (!this.container_) { + var nodes = []; + for (var i = 0, len = this.getTextRangeCount(); i < len; i++) { + nodes.push(this.getTextRange(i).getContainer()); + } + this.container_ = goog.dom.findCommonAncestor.apply(null, nodes); + } + return this.container_; +}; + + +/** + * @return {Array.} An array of sub-ranges, sorted by start + * point. + */ +goog.dom.MultiRange.prototype.getSortedRanges = function() { + if (!this.sortedRanges_) { + this.sortedRanges_ = this.getTextRanges(); + this.sortedRanges_.sort(function(a, b) { + var aStartNode = a.getStartNode(); + var aStartOffset = a.getStartOffset(); + var bStartNode = b.getStartNode(); + var bStartOffset = b.getStartOffset(); + + if (aStartNode == bStartNode && aStartOffset == bStartOffset) { + return 0; + } + + return goog.dom.Range.isReversed(aStartNode, aStartOffset, bStartNode, + bStartOffset) ? 1 : -1; + }); + } + return this.sortedRanges_; +}; + + +/** @override */ +goog.dom.MultiRange.prototype.getStartNode = function() { + return this.getSortedRanges()[0].getStartNode(); +}; + + +/** @override */ +goog.dom.MultiRange.prototype.getStartOffset = function() { + return this.getSortedRanges()[0].getStartOffset(); +}; + + +/** @override */ +goog.dom.MultiRange.prototype.getEndNode = function() { + // NOTE(robbyw): This may return the wrong node if any subranges overlap. + return goog.array.peek(this.getSortedRanges()).getEndNode(); +}; + + +/** @override */ +goog.dom.MultiRange.prototype.getEndOffset = function() { + // NOTE(robbyw): This may return the wrong value if any subranges overlap. + return goog.array.peek(this.getSortedRanges()).getEndOffset(); +}; + + +/** @override */ +goog.dom.MultiRange.prototype.isRangeInDocument = function() { + return goog.array.every(this.getTextRanges(), function(range) { + return range.isRangeInDocument(); + }); +}; + + +/** @override */ +goog.dom.MultiRange.prototype.isCollapsed = function() { + return this.browserRanges_.length == 0 || + this.browserRanges_.length == 1 && this.getTextRange(0).isCollapsed(); +}; + + +/** @override */ +goog.dom.MultiRange.prototype.getText = function() { + return goog.array.map(this.getTextRanges(), function(range) { + return range.getText(); + }).join(''); +}; + + +/** @override */ +goog.dom.MultiRange.prototype.getHtmlFragment = function() { + return this.getValidHtml(); +}; + + +/** @override */ +goog.dom.MultiRange.prototype.getValidHtml = function() { + // NOTE(robbyw): This does not behave well if the sub-ranges overlap. + return goog.array.map(this.getTextRanges(), function(range) { + return range.getValidHtml(); + }).join(''); +}; + + +/** @override */ +goog.dom.MultiRange.prototype.getPastableHtml = function() { + // TODO(robbyw): This should probably do something smart like group TR and TD + // selections in to the same table. + return this.getValidHtml(); +}; + + +/** @override */ +goog.dom.MultiRange.prototype.__iterator__ = function(opt_keys) { + return new goog.dom.MultiRangeIterator(this); +}; + + +// RANGE ACTIONS + + +/** @override */ +goog.dom.MultiRange.prototype.select = function() { + var selection = goog.dom.AbstractRange.getBrowserSelectionForWindow( + this.getWindow()); + selection.removeAllRanges(); + for (var i = 0, len = this.getTextRangeCount(); i < len; i++) { + selection.addRange(this.getTextRange(i).getBrowserRangeObject()); + } +}; + + +/** @override */ +goog.dom.MultiRange.prototype.removeContents = function() { + goog.array.forEach(this.getTextRanges(), function(range) { + range.removeContents(); + }); +}; + + +// SAVE/RESTORE + + +/** @override */ +goog.dom.MultiRange.prototype.saveUsingDom = function() { + return new goog.dom.DomSavedMultiRange_(this); +}; + + +// RANGE MODIFICATION + + +/** + * Collapses this range to a single point, either the first or last point + * depending on the parameter. This will result in the number of ranges in this + * multi range becoming 1. + * @param {boolean} toAnchor Whether to collapse to the anchor. + * @override + */ +goog.dom.MultiRange.prototype.collapse = function(toAnchor) { + if (!this.isCollapsed()) { + var range = toAnchor ? this.getTextRange(0) : this.getTextRange( + this.getTextRangeCount() - 1); + + this.clearCachedValues_(); + range.collapse(toAnchor); + this.ranges_ = [range]; + this.sortedRanges_ = [range]; + this.browserRanges_ = [range.getBrowserRangeObject()]; + } +}; + + +// SAVED RANGE OBJECTS + + + +/** + * A SavedRange implementation using DOM endpoints. + * @param {goog.dom.MultiRange} range The range to save. + * @constructor + * @extends {goog.dom.SavedRange} + * @private + */ +goog.dom.DomSavedMultiRange_ = function(range) { + /** + * Array of saved ranges. + * @type {Array.} + * @private + */ + this.savedRanges_ = goog.array.map(range.getTextRanges(), function(range) { + return range.saveUsingDom(); + }); +}; +goog.inherits(goog.dom.DomSavedMultiRange_, goog.dom.SavedRange); + + +/** + * @return {goog.dom.MultiRange} The restored range. + * @override + */ +goog.dom.DomSavedMultiRange_.prototype.restoreInternal = function() { + var ranges = goog.array.map(this.savedRanges_, function(savedRange) { + return savedRange.restore(); + }); + return goog.dom.MultiRange.createFromTextRanges(ranges); +}; + + +/** @override */ +goog.dom.DomSavedMultiRange_.prototype.disposeInternal = function() { + goog.dom.DomSavedMultiRange_.superClass_.disposeInternal.call(this); + + goog.array.forEach(this.savedRanges_, function(savedRange) { + savedRange.dispose(); + }); + delete this.savedRanges_; +}; + + +// RANGE ITERATION + + + +/** + * Subclass of goog.dom.TagIterator that iterates over a DOM range. It + * adds functions to determine the portion of each text node that is selected. + * + * @param {goog.dom.MultiRange} range The range to traverse. + * @constructor + * @extends {goog.dom.RangeIterator} + */ +goog.dom.MultiRangeIterator = function(range) { + if (range) { + this.iterators_ = goog.array.map( + range.getSortedRanges(), + function(r) { + return goog.iter.toIterator(r); + }); + } + + goog.dom.RangeIterator.call( + this, range ? this.getStartNode() : null, false); +}; +goog.inherits(goog.dom.MultiRangeIterator, goog.dom.RangeIterator); + + +/** + * The list of range iterators left to traverse. + * @type {Array.?} + * @private + */ +goog.dom.MultiRangeIterator.prototype.iterators_ = null; + + +/** + * The index of the current sub-iterator being traversed. + * @type {number} + * @private + */ +goog.dom.MultiRangeIterator.prototype.currentIdx_ = 0; + + +/** @override */ +goog.dom.MultiRangeIterator.prototype.getStartTextOffset = function() { + return this.iterators_[this.currentIdx_].getStartTextOffset(); +}; + + +/** @override */ +goog.dom.MultiRangeIterator.prototype.getEndTextOffset = function() { + return this.iterators_[this.currentIdx_].getEndTextOffset(); +}; + + +/** @override */ +goog.dom.MultiRangeIterator.prototype.getStartNode = function() { + return this.iterators_[0].getStartNode(); +}; + + +/** @override */ +goog.dom.MultiRangeIterator.prototype.getEndNode = function() { + return goog.array.peek(this.iterators_).getEndNode(); +}; + + +/** @override */ +goog.dom.MultiRangeIterator.prototype.isLast = function() { + return this.iterators_[this.currentIdx_].isLast(); +}; + + +/** @override */ +goog.dom.MultiRangeIterator.prototype.next = function() { + /** @preserveTry */ + try { + var it = this.iterators_[this.currentIdx_]; + var next = it.next(); + this.setPosition(it.node, it.tagType, it.depth); + return next; + } catch (ex) { + if (ex !== goog.iter.StopIteration || + this.iterators_.length - 1 == this.currentIdx_) { + throw ex; + } else { + // In case we got a StopIteration, increment counter and try again. + this.currentIdx_++; + return this.next(); + } + } +}; + + +/** @override */ +goog.dom.MultiRangeIterator.prototype.copyFrom = function(other) { + this.iterators_ = goog.array.clone(other.iterators_); + goog.dom.MultiRangeIterator.superClass_.copyFrom.call(this, other); +}; + + +/** + * @return {goog.dom.MultiRangeIterator} An identical iterator. + * @override + */ +goog.dom.MultiRangeIterator.prototype.clone = function() { + var copy = new goog.dom.MultiRangeIterator(null); + copy.copyFrom(this); + return copy; +}; diff --git a/float-no-zero/closure-library/closure/goog/dom/nodeiterator.js b/float-no-zero/closure-library/closure/goog/dom/nodeiterator.js new file mode 100644 index 0000000000..22453a021e --- /dev/null +++ b/float-no-zero/closure-library/closure/goog/dom/nodeiterator.js @@ -0,0 +1,86 @@ +// Copyright 2008 The Closure Library Authors. All Rights Reserved. +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS-IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +/** + * @fileoverview Iterator subclass for DOM tree traversal. + * + * @author robbyw@google.com (Robby Walker) + */ + +goog.provide('goog.dom.NodeIterator'); + +goog.require('goog.dom.TagIterator'); + + + +/** + * A DOM tree traversal iterator. + * + * Starting with the given node, the iterator walks the DOM in order, reporting + * events for each node. The iterator acts as a prefix iterator: + * + *
+ * <div>1<span>2</span>3</div>
+ * 
+ * + * Will return the following nodes: + * + * [div, 1, span, 2, 3] + * + * With the following depths + * + * [1, 1, 2, 2, 1] + * + * Imagining | represents iterator position, the traversal stops at + * each of the following locations: + * + *
<div>|1|<span>|2|</span>3|</div>
+ * + * The iterator can also be used in reverse mode, which will return the nodes + * and states in the opposite order. The depths will be slightly different + * since, like in normal mode, the depth is computed *after* the last move. + * + * Lastly, it is possible to create an iterator that is unconstrained, meaning + * that it will continue iterating until the end of the document instead of + * until exiting the start node. + * + * @param {Node=} opt_node The start node. Defaults to an empty iterator. + * @param {boolean=} opt_reversed Whether to traverse the tree in reverse. + * @param {boolean=} opt_unconstrained Whether the iterator is not constrained + * to the starting node and its children. + * @param {number=} opt_depth The starting tree depth. + * @constructor + * @extends {goog.dom.TagIterator} + */ +goog.dom.NodeIterator = function(opt_node, opt_reversed, + opt_unconstrained, opt_depth) { + goog.dom.TagIterator.call(this, opt_node, opt_reversed, opt_unconstrained, + null, opt_depth); +}; +goog.inherits(goog.dom.NodeIterator, goog.dom.TagIterator); + + +/** + * Moves to the next position in the DOM tree. + * @return {Node} Returns the next node, or throws a goog.iter.StopIteration + * exception if the end of the iterator's range has been reached. + * @override + */ +goog.dom.NodeIterator.prototype.next = function() { + do { + goog.dom.NodeIterator.superClass_.next.call(this); + } while (this.isEndTag()); + + return this.node; +}; diff --git a/float-no-zero/closure-library/closure/goog/dom/nodeoffset.js b/float-no-zero/closure-library/closure/goog/dom/nodeoffset.js new file mode 100644 index 0000000000..084d4b0766 --- /dev/null +++ b/float-no-zero/closure-library/closure/goog/dom/nodeoffset.js @@ -0,0 +1,112 @@ +// Copyright 2005 The Closure Library Authors. All Rights Reserved. +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS-IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +/** + * @fileoverview Object to store the offset from one node to another in a way + * that works on any similar DOM structure regardless of whether it is the same + * actual nodes. + * + */ + +goog.provide('goog.dom.NodeOffset'); + +goog.require('goog.Disposable'); +goog.require('goog.dom.TagName'); + + + +/** + * Object to store the offset from one node to another in a way that works on + * any similar DOM structure regardless of whether it is the same actual nodes. + * @param {Node} node The node to get the offset for. + * @param {Node} baseNode The node to calculate the offset from. + * @extends {goog.Disposable} + * @constructor + */ +goog.dom.NodeOffset = function(node, baseNode) { + goog.Disposable.call(this); + + /** + * A stack of childNode offsets. + * @type {Array.} + * @private + */ + this.offsetStack_ = []; + + /** + * A stack of childNode names. + * @type {Array.} + * @private + */ + this.nameStack_ = []; + + while (node && node.nodeName != goog.dom.TagName.BODY && node != baseNode) { + // Compute the sibling offset. + var siblingOffset = 0; + var sib = node.previousSibling; + while (sib) { + sib = sib.previousSibling; + ++siblingOffset; + } + this.offsetStack_.unshift(siblingOffset); + this.nameStack_.unshift(node.nodeName); + + node = node.parentNode; + } +}; +goog.inherits(goog.dom.NodeOffset, goog.Disposable); + + +/** + * @return {string} A string representation of this object. + * @override + */ +goog.dom.NodeOffset.prototype.toString = function() { + var strs = []; + var name; + for (var i = 0; name = this.nameStack_[i]; i++) { + strs.push(this.offsetStack_[i] + ',' + name); + } + return strs.join('\n'); +}; + + +/** + * Walk the dom and find the node relative to baseNode. Returns null on + * failure. + * @param {Node} baseNode The node to start walking from. Should be equivalent + * to the node passed in to the constructor, in that it should have the + * same contents. + * @return {Node} The node relative to baseNode, or null on failure. + */ +goog.dom.NodeOffset.prototype.findTargetNode = function(baseNode) { + var name; + var curNode = baseNode; + for (var i = 0; name = this.nameStack_[i]; ++i) { + curNode = curNode.childNodes[this.offsetStack_[i]]; + + // Sanity check and make sure the element names match. + if (!curNode || curNode.nodeName != name) { + return null; + } + } + return curNode; +}; + + +/** @override */ +goog.dom.NodeOffset.prototype.disposeInternal = function() { + delete this.offsetStack_; + delete this.nameStack_; +}; diff --git a/float-no-zero/closure-library/closure/goog/dom/pattern/abstractpattern.js b/float-no-zero/closure-library/closure/goog/dom/pattern/abstractpattern.js new file mode 100644 index 0000000000..6015b09c5e --- /dev/null +++ b/float-no-zero/closure-library/closure/goog/dom/pattern/abstractpattern.js @@ -0,0 +1,60 @@ +// Copyright 2007 The Closure Library Authors. All Rights Reserved. +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS-IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +/** + * @fileoverview DOM pattern base class. + * + * @author robbyw@google.com (Robby Walker) + */ + +goog.provide('goog.dom.pattern.AbstractPattern'); + +goog.require('goog.dom.pattern.MatchType'); + + + +/** + * Base pattern class for DOM matching. + * + * @constructor + */ +goog.dom.pattern.AbstractPattern = function() { +}; + + +/** + * The first node matched by this pattern. + * @type {Node} + */ +goog.dom.pattern.AbstractPattern.prototype.matchedNode = null; + + +/** + * Reset any internal state this pattern keeps. + */ +goog.dom.pattern.AbstractPattern.prototype.reset = function() { + // The base implementation does nothing. +}; + + +/** + * Test whether this pattern matches the given token. + * + * @param {Node} token Token to match against. + * @param {goog.dom.TagWalkType} type The type of token. + * @return {goog.dom.pattern.MatchType} {@code MATCH} if the pattern matches. + */ +goog.dom.pattern.AbstractPattern.prototype.matchToken = function(token, type) { + return goog.dom.pattern.MatchType.NO_MATCH; +}; diff --git a/float-no-zero/closure-library/closure/goog/dom/pattern/allchildren.js b/float-no-zero/closure-library/closure/goog/dom/pattern/allchildren.js new file mode 100644 index 0000000000..86f8cdf9e3 --- /dev/null +++ b/float-no-zero/closure-library/closure/goog/dom/pattern/allchildren.js @@ -0,0 +1,75 @@ +// Copyright 2007 The Closure Library Authors. All Rights Reserved. +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS-IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +/** + * @fileoverview DOM pattern to match any children of a tag. + * + * @author robbyw@google.com (Robby Walker) + */ + +goog.provide('goog.dom.pattern.AllChildren'); + +goog.require('goog.dom.pattern.AbstractPattern'); +goog.require('goog.dom.pattern.MatchType'); + + + +/** + * Pattern object that matches any nodes at or below the current tree depth. + * + * @constructor + * @extends {goog.dom.pattern.AbstractPattern} + */ +goog.dom.pattern.AllChildren = function() { +}; +goog.inherits(goog.dom.pattern.AllChildren, goog.dom.pattern.AbstractPattern); + + +/** + * Tracks the matcher's depth to detect the end of the tag. + * + * @type {number} + * @private + */ +goog.dom.pattern.AllChildren.prototype.depth_ = 0; + + +/** + * Test whether the given token is on the same level. + * + * @param {Node} token Token to match against. + * @param {goog.dom.TagWalkType} type The type of token. + * @return {goog.dom.pattern.MatchType} {@code MATCHING} if the token is on the + * same level or deeper and {@code BACKTRACK_MATCH} if not. + * @override + */ +goog.dom.pattern.AllChildren.prototype.matchToken = function(token, type) { + this.depth_ += type; + + if (this.depth_ >= 0) { + return goog.dom.pattern.MatchType.MATCHING; + } else { + this.depth_ = 0; + return goog.dom.pattern.MatchType.BACKTRACK_MATCH; + } +}; + + +/** + * Reset any internal state this pattern keeps. + * @override + */ +goog.dom.pattern.AllChildren.prototype.reset = function() { + this.depth_ = 0; +}; diff --git a/float-no-zero/closure-library/closure/goog/dom/pattern/callback/callback.js b/float-no-zero/closure-library/closure/goog/dom/pattern/callback/callback.js new file mode 100644 index 0000000000..7d7aa60c33 --- /dev/null +++ b/float-no-zero/closure-library/closure/goog/dom/pattern/callback/callback.js @@ -0,0 +1,82 @@ +// Copyright 2007 The Closure Library Authors. All Rights Reserved. +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS-IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +/** + * @fileoverview Useful callback functions for the DOM matcher. + * + * @author robbyw@google.com (Robby Walker) + */ + +goog.provide('goog.dom.pattern.callback'); + +goog.require('goog.dom'); +goog.require('goog.dom.TagWalkType'); +goog.require('goog.iter'); + + +/** + * Callback function for use in {@link goog.dom.pattern.Matcher.addPattern} + * that removes the matched node from the tree. Should be used in conjunciton + * with a {@link goog.dom.pattern.StartTag} pattern. + * + * @param {Node} node The node matched by the pattern. + * @param {goog.dom.TagIterator} position The position where the match + * finished. + * @return {boolean} Returns true to indicate tree changes were made. + */ +goog.dom.pattern.callback.removeNode = function(node, position) { + // Find out which position would be next. + position.setPosition(node, goog.dom.TagWalkType.END_TAG); + + goog.iter.nextOrValue(position, null); + + // Remove the node. + goog.dom.removeNode(node); + + // Correct for the depth change. + position.depth -= 1; + + // Indicate that we made position/tree changes. + return true; +}; + + +/** + * Callback function for use in {@link goog.dom.pattern.Matcher.addPattern} + * that removes the matched node from the tree and replaces it with its + * children. Should be used in conjunction with a + * {@link goog.dom.pattern.StartTag} pattern. + * + * @param {Element} node The node matched by the pattern. + * @param {goog.dom.TagIterator} position The position where the match + * finished. + * @return {boolean} Returns true to indicate tree changes were made. + */ +goog.dom.pattern.callback.flattenElement = function(node, position) { + // Find out which position would be next. + position.setPosition(node, node.firstChild ? + goog.dom.TagWalkType.START_TAG : + goog.dom.TagWalkType.END_TAG); + + goog.iter.nextOrValue(position, null); + + // Flatten the node. + goog.dom.flattenElement(node); + + // Correct for the depth change. + position.depth -= 1; + + // Indicate that we made position/tree changes. + return true; +}; diff --git a/float-no-zero/closure-library/closure/goog/dom/pattern/callback/counter.js b/float-no-zero/closure-library/closure/goog/dom/pattern/callback/counter.js new file mode 100644 index 0000000000..a354de05f1 --- /dev/null +++ b/float-no-zero/closure-library/closure/goog/dom/pattern/callback/counter.js @@ -0,0 +1,72 @@ +// Copyright 2007 The Closure Library Authors. All Rights Reserved. +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS-IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +/** + * @fileoverview Callback object that counts matches. + * + * @author robbyw@google.com (Robby Walker) + */ + +goog.provide('goog.dom.pattern.callback.Counter'); + + + +/** + * Callback class for counting matches. + * @constructor + */ +goog.dom.pattern.callback.Counter = function() { +}; + + +/** + * The count of objects matched so far. + * + * @type {number} + */ +goog.dom.pattern.callback.Counter.prototype.count = 0; + + +/** + * The callback function. Suitable as a callback for + * {@link goog.dom.pattern.Matcher}. + * @type {Function} + * @private + */ +goog.dom.pattern.callback.Counter.prototype.callback_ = null; + + +/** + * Get a bound callback function that is suitable as a callback for + * {@link goog.dom.pattern.Matcher}. + * + * @return {Function} A callback function. + */ +goog.dom.pattern.callback.Counter.prototype.getCallback = function() { + if (!this.callback_) { + this.callback_ = goog.bind(function() { + this.count++; + return false; + }, this); + } + return this.callback_; +}; + + +/** + * Reset the counter. + */ +goog.dom.pattern.callback.Counter.prototype.reset = function() { + this.count = 0; +}; diff --git a/float-no-zero/closure-library/closure/goog/dom/pattern/callback/test.js b/float-no-zero/closure-library/closure/goog/dom/pattern/callback/test.js new file mode 100644 index 0000000000..30a58c1615 --- /dev/null +++ b/float-no-zero/closure-library/closure/goog/dom/pattern/callback/test.js @@ -0,0 +1,77 @@ +// Copyright 2007 The Closure Library Authors. All Rights Reserved. +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS-IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +/** + * @fileoverview Callback object that tests if a pattern matches at least once. + * + * @author robbyw@google.com (Robby Walker) + */ + +goog.provide('goog.dom.pattern.callback.Test'); + +goog.require('goog.iter.StopIteration'); + + + +/** + * Callback class for testing for at least one match. + * @constructor + */ +goog.dom.pattern.callback.Test = function() { +}; + + +/** + * Whether or not the pattern matched. + * + * @type {boolean} + */ +goog.dom.pattern.callback.Test.prototype.matched = false; + + +/** + * The callback function. Suitable as a callback for + * {@link goog.dom.pattern.Matcher}. + * @type {Function} + * @private + */ +goog.dom.pattern.callback.Test.prototype.callback_ = null; + + +/** + * Get a bound callback function that is suitable as a callback for + * {@link goog.dom.pattern.Matcher}. + * + * @return {Function} A callback function. + */ +goog.dom.pattern.callback.Test.prototype.getCallback = function() { + if (!this.callback_) { + this.callback_ = goog.bind(function(node, position) { + // Mark our match. + this.matched = true; + + // Stop searching. + throw goog.iter.StopIteration; + }, this); + } + return this.callback_; +}; + + +/** + * Reset the counter. + */ +goog.dom.pattern.callback.Test.prototype.reset = function() { + this.matched = false; +}; diff --git a/float-no-zero/closure-library/closure/goog/dom/pattern/childmatches.js b/float-no-zero/closure-library/closure/goog/dom/pattern/childmatches.js new file mode 100644 index 0000000000..72f1b51f33 --- /dev/null +++ b/float-no-zero/closure-library/closure/goog/dom/pattern/childmatches.js @@ -0,0 +1,154 @@ +// Copyright 2007 The Closure Library Authors. All Rights Reserved. +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS-IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +/** + * @fileoverview DOM pattern to match any children of a tag, and + * specifically collect those that match a child pattern. + * + * @author robbyw@google.com (Robby Walker) + */ + +goog.provide('goog.dom.pattern.ChildMatches'); + +goog.require('goog.dom.pattern.AllChildren'); +goog.require('goog.dom.pattern.MatchType'); + + + +/** + * Pattern object that matches any nodes at or below the current tree depth. + * + * @param {goog.dom.pattern.AbstractPattern} childPattern Pattern to collect + * child matches of. + * @param {number=} opt_minimumMatches Enforce a minimum nuber of matches. + * Defaults to 0. + * @constructor + * @extends {goog.dom.pattern.AllChildren} + */ +goog.dom.pattern.ChildMatches = function(childPattern, opt_minimumMatches) { + this.childPattern_ = childPattern; + this.matches = []; + this.minimumMatches_ = opt_minimumMatches || 0; + goog.dom.pattern.AllChildren.call(this); +}; +goog.inherits(goog.dom.pattern.ChildMatches, goog.dom.pattern.AllChildren); + + +/** + * Array of matched child nodes. + * + * @type {Array.} + */ +goog.dom.pattern.ChildMatches.prototype.matches; + + +/** + * Minimum number of matches. + * + * @type {number} + * @private + */ +goog.dom.pattern.ChildMatches.prototype.minimumMatches_ = 0; + + +/** + * The child pattern to collect matches from. + * + * @type {goog.dom.pattern.AbstractPattern} + * @private + */ +goog.dom.pattern.ChildMatches.prototype.childPattern_; + + +/** + * Whether the pattern has recently matched or failed to match and will need to + * be reset when starting a new round of matches. + * + * @type {boolean} + * @private + */ +goog.dom.pattern.ChildMatches.prototype.needsReset_ = false; + + +/** + * Test whether the given token is on the same level. + * + * @param {Node} token Token to match against. + * @param {goog.dom.TagWalkType} type The type of token. + * @return {goog.dom.pattern.MatchType} {@code MATCHING} if the token is on the + * same level or deeper and {@code BACKTRACK_MATCH} if not. + * @override + */ +goog.dom.pattern.ChildMatches.prototype.matchToken = function(token, type) { + // Defer resets so we maintain our matches array until the last possible time. + if (this.needsReset_) { + this.reset(); + } + + // Call the super-method to ensure we stay in the child tree. + var status = + goog.dom.pattern.AllChildren.prototype.matchToken.apply(this, arguments); + + switch (status) { + case goog.dom.pattern.MatchType.MATCHING: + var backtrack = false; + + switch (this.childPattern_.matchToken(token, type)) { + case goog.dom.pattern.MatchType.BACKTRACK_MATCH: + backtrack = true; + case goog.dom.pattern.MatchType.MATCH: + // Collect the match. + this.matches.push(this.childPattern_.matchedNode); + break; + + default: + // Keep trying if we haven't hit a terminal state. + break; + } + + if (backtrack) { + // The only interesting result is a MATCH, since BACKTRACK_MATCH means + // we are hitting an infinite loop on something like a Repeat(0). + if (this.childPattern_.matchToken(token, type) == + goog.dom.pattern.MatchType.MATCH) { + this.matches.push(this.childPattern_.matchedNode); + } + } + return goog.dom.pattern.MatchType.MATCHING; + + case goog.dom.pattern.MatchType.BACKTRACK_MATCH: + // TODO(robbyw): this should return something like BACKTRACK_NO_MATCH + // when we don't meet our minimum. + this.needsReset_ = true; + return (this.matches.length >= this.minimumMatches_) ? + goog.dom.pattern.MatchType.BACKTRACK_MATCH : + goog.dom.pattern.MatchType.NO_MATCH; + + default: + this.needsReset_ = true; + return status; + } +}; + + +/** + * Reset any internal state this pattern keeps. + * @override + */ +goog.dom.pattern.ChildMatches.prototype.reset = function() { + this.needsReset_ = false; + this.matches.length = 0; + this.childPattern_.reset(); + goog.dom.pattern.AllChildren.prototype.reset.call(this); +}; diff --git a/float-no-zero/closure-library/closure/goog/dom/pattern/endtag.js b/float-no-zero/closure-library/closure/goog/dom/pattern/endtag.js new file mode 100644 index 0000000000..75f995266d --- /dev/null +++ b/float-no-zero/closure-library/closure/goog/dom/pattern/endtag.js @@ -0,0 +1,53 @@ +// Copyright 2007 The Closure Library Authors. All Rights Reserved. +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS-IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +/** + * @fileoverview DOM pattern to match the end of a tag. + * + * @author robbyw@google.com (Robby Walker) + */ + +goog.provide('goog.dom.pattern.EndTag'); + +goog.require('goog.dom.TagWalkType'); +goog.require('goog.dom.pattern.Tag'); + + + +/** + * Pattern object that matches a closing tag. + * + * @param {string|RegExp} tag Name of the tag. Also will accept a regular + * expression to match against the tag name. + * @param {Object=} opt_attrs Optional map of attribute names to desired values. + * This pattern will only match when all attributes are present and match + * the string or regular expression value provided here. + * @param {Object=} opt_styles Optional map of CSS style names to desired + * values. This pattern will only match when all styles are present and + * match the string or regular expression value provided here. + * @param {Function=} opt_test Optional function that takes the element as a + * parameter and returns true if this pattern should match it. + * @constructor + * @extends {goog.dom.pattern.Tag} + */ +goog.dom.pattern.EndTag = function(tag, opt_attrs, opt_styles, opt_test) { + goog.dom.pattern.Tag.call( + this, + tag, + goog.dom.TagWalkType.END_TAG, + opt_attrs, + opt_styles, + opt_test); +}; +goog.inherits(goog.dom.pattern.EndTag, goog.dom.pattern.Tag); diff --git a/float-no-zero/closure-library/closure/goog/dom/pattern/fulltag.js b/float-no-zero/closure-library/closure/goog/dom/pattern/fulltag.js new file mode 100644 index 0000000000..1fa2230319 --- /dev/null +++ b/float-no-zero/closure-library/closure/goog/dom/pattern/fulltag.js @@ -0,0 +1,93 @@ +// Copyright 2007 The Closure Library Authors. All Rights Reserved. +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS-IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +/** + * @fileoverview DOM pattern to match a tag and all of its children. + * + * @author robbyw@google.com (Robby Walker) + */ + +goog.provide('goog.dom.pattern.FullTag'); + +goog.require('goog.dom.pattern.MatchType'); +goog.require('goog.dom.pattern.StartTag'); +goog.require('goog.dom.pattern.Tag'); + + + +/** + * Pattern object that matches a full tag including all its children. + * + * @param {string|RegExp} tag Name of the tag. Also will accept a regular + * expression to match against the tag name. + * @param {Object=} opt_attrs Optional map of attribute names to desired values. + * This pattern will only match when all attributes are present and match + * the string or regular expression value provided here. + * @param {Object=} opt_styles Optional map of CSS style names to desired + * values. This pattern will only match when all styles are present and + * match the string or regular expression value provided here. + * @param {Function=} opt_test Optional function that takes the element as a + * parameter and returns true if this pattern should match it. + * @constructor + * @extends {goog.dom.pattern.StartTag} + */ +goog.dom.pattern.FullTag = function(tag, opt_attrs, opt_styles, opt_test) { + goog.dom.pattern.StartTag.call( + this, + tag, + opt_attrs, + opt_styles, + opt_test); +}; +goog.inherits(goog.dom.pattern.FullTag, goog.dom.pattern.StartTag); + + +/** + * Tracks the matcher's depth to detect the end of the tag. + * + * @type {number} + * @private + */ +goog.dom.pattern.FullTag.prototype.depth_ = 0; + + +/** + * Test whether the given token is a start tag token which matches the tag name, + * style, and attributes provided in the constructor. + * + * @param {Node} token Token to match against. + * @param {goog.dom.TagWalkType} type The type of token. + * @return {goog.dom.pattern.MatchType} MATCH at the end of our + * tag, MATCHING if we are within the tag, and + * NO_MATCH if the starting tag does not match. + * @override + */ +goog.dom.pattern.FullTag.prototype.matchToken = function(token, type) { + if (!this.depth_) { + // If we have not yet started, make sure we match as a StartTag. + if (goog.dom.pattern.Tag.prototype.matchToken.call(this, token, type)) { + this.depth_ = type; + return goog.dom.pattern.MatchType.MATCHING; + + } else { + return goog.dom.pattern.MatchType.NO_MATCH; + } + } else { + this.depth_ += type; + + return this.depth_ ? + goog.dom.pattern.MatchType.MATCHING : + goog.dom.pattern.MatchType.MATCH; + } +}; diff --git a/float-no-zero/closure-library/closure/goog/dom/pattern/matcher.js b/float-no-zero/closure-library/closure/goog/dom/pattern/matcher.js new file mode 100644 index 0000000000..c0c87a3d27 --- /dev/null +++ b/float-no-zero/closure-library/closure/goog/dom/pattern/matcher.js @@ -0,0 +1,150 @@ +// Copyright 2007 The Closure Library Authors. All Rights Reserved. +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS-IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +/** + * @fileoverview DOM pattern matcher. Allows for simple searching of DOM + * using patterns descended from {@link goog.dom.pattern.AbstractPattern}. + * + * @author robbyw@google.com (Robby Walker) + */ + +goog.provide('goog.dom.pattern.Matcher'); + +goog.require('goog.dom.TagIterator'); +goog.require('goog.dom.pattern.MatchType'); +goog.require('goog.iter'); + + +// TODO(robbyw): Allow for backtracks of size > 1. + + + +/** + * Given a set of patterns and a root node, this class tests the patterns in + * parallel. + * + * It is not (yet) a smart matcher - it doesn't do any advanced backtracking. + * Given the pattern DIV, SPAN the matcher will not match + * DIV, DIV, SPAN because it starts matching at the first + * DIV, fails to match SPAN at the second, and never + * backtracks to try again. + * + * It is also possible to have a set of complex patterns that when matched in + * parallel will miss some possible matches. Running multiple times will catch + * all matches eventually. + * + * @constructor + */ +goog.dom.pattern.Matcher = function() { + this.patterns_ = []; + this.callbacks_ = []; +}; + + +/** + * Array of patterns to attempt to match in parallel. + * + * @type {Array.} + * @private + */ +goog.dom.pattern.Matcher.prototype.patterns_; + + +/** + * Array of callbacks to call when a pattern is matched. The indexing is the + * same as the {@link #patterns_} array. + * + * @type {Array.} + * @private + */ +goog.dom.pattern.Matcher.prototype.callbacks_; + + +/** + * Adds a pattern to be matched. The callback can return an object whose keys + * are processing instructions. + * + * @param {goog.dom.pattern.AbstractPattern} pattern The pattern to add. + * @param {Function} callback Function to call when a match is found. Uses + * the above semantics. + */ +goog.dom.pattern.Matcher.prototype.addPattern = function(pattern, callback) { + this.patterns_.push(pattern); + this.callbacks_.push(callback); +}; + + +/** + * Resets all the patterns. + * + * @private + */ +goog.dom.pattern.Matcher.prototype.reset_ = function() { + for (var i = 0, len = this.patterns_.length; i < len; i++) { + this.patterns_[i].reset(); + } +}; + + +/** + * Test the given node against all patterns. + * + * @param {goog.dom.TagIterator} position A position in a node walk that is + * located at the token to process. + * @return {boolean} Whether a pattern modified the position or tree + * and its callback resulted in DOM structure or position modification. + * @private + */ +goog.dom.pattern.Matcher.prototype.matchToken_ = function(position) { + for (var i = 0, len = this.patterns_.length; i < len; i++) { + var pattern = this.patterns_[i]; + switch (pattern.matchToken(position.node, position.tagType)) { + case goog.dom.pattern.MatchType.MATCH: + case goog.dom.pattern.MatchType.BACKTRACK_MATCH: + var callback = this.callbacks_[i]; + + // Callbacks are allowed to modify the current position, but must + // return true if the do. + if (callback(pattern.matchedNode, position, pattern)) { + return true; + } + + default: + // Do nothing. + break; + } + } + + return false; +}; + + +/** + * Match the set of patterns against a match tree. + * + * @param {Node} node The root node of the tree to match. + */ +goog.dom.pattern.Matcher.prototype.match = function(node) { + var position = new goog.dom.TagIterator(node); + + this.reset_(); + + goog.iter.forEach(position, function() { + while (this.matchToken_(position)) { + // Since we've moved, our old pattern statuses don't make sense any more. + // Reset them. + this.reset_(); + } + }, this); +}; diff --git a/float-no-zero/closure-library/closure/goog/dom/pattern/nodetype.js b/float-no-zero/closure-library/closure/goog/dom/pattern/nodetype.js new file mode 100644 index 0000000000..b13bbe18c8 --- /dev/null +++ b/float-no-zero/closure-library/closure/goog/dom/pattern/nodetype.js @@ -0,0 +1,58 @@ +// Copyright 2008 The Closure Library Authors. All Rights Reserved. +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS-IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +/** + * @fileoverview DOM pattern to match a node of the given type. + * + * @author robbyw@google.com (Robby Walker) + */ + +goog.provide('goog.dom.pattern.NodeType'); + +goog.require('goog.dom.pattern.AbstractPattern'); +goog.require('goog.dom.pattern.MatchType'); + + + +/** + * Pattern object that matches any node of the given type. + * @param {goog.dom.NodeType} nodeType The node type to match. + * @constructor + * @extends {goog.dom.pattern.AbstractPattern} + */ +goog.dom.pattern.NodeType = function(nodeType) { + /** + * The node type to match. + * @type {goog.dom.NodeType} + * @private + */ + this.nodeType_ = nodeType; +}; +goog.inherits(goog.dom.pattern.NodeType, goog.dom.pattern.AbstractPattern); + + +/** + * Test whether the given token is a text token which matches the string or + * regular expression provided in the constructor. + * @param {Node} token Token to match against. + * @param {goog.dom.TagWalkType} type The type of token. + * @return {goog.dom.pattern.MatchType} MATCH if the pattern + * matches, NO_MATCH otherwise. + * @override + */ +goog.dom.pattern.NodeType.prototype.matchToken = function(token, type) { + return token.nodeType == this.nodeType_ ? + goog.dom.pattern.MatchType.MATCH : + goog.dom.pattern.MatchType.NO_MATCH; +}; diff --git a/float-no-zero/closure-library/closure/goog/dom/pattern/pattern.js b/float-no-zero/closure-library/closure/goog/dom/pattern/pattern.js new file mode 100644 index 0000000000..19f4d1b794 --- /dev/null +++ b/float-no-zero/closure-library/closure/goog/dom/pattern/pattern.js @@ -0,0 +1,93 @@ +// Copyright 2007 The Closure Library Authors. All Rights Reserved. +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS-IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +/** + * @fileoverview DOM patterns. Allows for description of complex DOM patterns + * using regular expression like constructs. + * + * @author robbyw@google.com (Robby Walker) + */ + +goog.provide('goog.dom.pattern'); +goog.provide('goog.dom.pattern.MatchType'); + + +/** + * Regular expression for breaking text nodes. + * @type {RegExp} + */ +goog.dom.pattern.BREAKING_TEXTNODE_RE = /^\s*$/; + + +/** + * Utility function to match a string against either a string or a regular + * expression. + * + * @param {string|RegExp} obj Either a string or a regular expression. + * @param {string} str The string to match. + * @return {boolean} Whether the strings are equal, or if the string matches + * the regular expression. + */ +goog.dom.pattern.matchStringOrRegex = function(obj, str) { + if (goog.isString(obj)) { + // Match a string + return str == obj; + } else { + // Match a regular expression + return !!(str && str.match(obj)); + } +}; + + +/** + * Utility function to match a DOM attribute against either a string or a + * regular expression. Conforms to the interface spec for + * {@link goog.object#every}. + * + * @param {string|RegExp} elem Either a string or a regular expression. + * @param {string} index The attribute name to match. + * @param {Object} orig The original map of matches to test. + * @return {boolean} Whether the strings are equal, or if the attribute matches + * the regular expression. + * @this {Element} Called using goog.object every on an Element. + */ +goog.dom.pattern.matchStringOrRegexMap = function(elem, index, orig) { + return goog.dom.pattern.matchStringOrRegex(elem, + index in this ? this[index] : + (this.getAttribute ? this.getAttribute(index) : null)); +}; + + +/** + * When matched to a token, a pattern may return any of the following statuses: + *
    + *
  1. NO_MATCH - The pattern does not match. This is the only + * value that evaluates to false in a boolean context. + *
  2. MATCHING - The token is part of an incomplete match. + *
  3. MATCH - The token completes a match. + *
  4. BACKTRACK_MATCH - The token does not match, but indicates + * the end of a repetitive match. For instance, in regular expressions, + * the pattern /a+/ would match 'aaaaaaaab'. + * Every 'a' token would give a status of + * MATCHING while the 'b' token would give a + * status of BACKTRACK_MATCH. + *
+ * @enum {number} + */ +goog.dom.pattern.MatchType = { + NO_MATCH: 0, + MATCHING: 1, + MATCH: 2, + BACKTRACK_MATCH: 3 +}; diff --git a/float-no-zero/closure-library/closure/goog/dom/pattern/repeat.js b/float-no-zero/closure-library/closure/goog/dom/pattern/repeat.js new file mode 100644 index 0000000000..5a47de0b08 --- /dev/null +++ b/float-no-zero/closure-library/closure/goog/dom/pattern/repeat.js @@ -0,0 +1,190 @@ +// Copyright 2007 The Closure Library Authors. All Rights Reserved. +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS-IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +/** + * @fileoverview DOM pattern to match a tag and all of its children. + * + * @author robbyw@google.com (Robby Walker) + */ + +goog.provide('goog.dom.pattern.Repeat'); + +goog.require('goog.dom.NodeType'); +goog.require('goog.dom.pattern.AbstractPattern'); +goog.require('goog.dom.pattern.MatchType'); + + + +/** + * Pattern object that matches a repetition of another pattern. + * @param {goog.dom.pattern.AbstractPattern} pattern The pattern to + * repetitively match. + * @param {number=} opt_minimum The minimum number of times to match. Defaults + * to 0. + * @param {number=} opt_maximum The maximum number of times to match. Defaults + * to unlimited. + * @constructor + * @extends {goog.dom.pattern.AbstractPattern} + */ +goog.dom.pattern.Repeat = function(pattern, + opt_minimum, + opt_maximum) { + this.pattern_ = pattern; + this.minimum_ = opt_minimum || 0; + this.maximum_ = opt_maximum || null; + this.matches = []; +}; +goog.inherits(goog.dom.pattern.Repeat, goog.dom.pattern.AbstractPattern); + + +/** + * Pattern to repetitively match. + * + * @type {goog.dom.pattern.AbstractPattern} + * @private + */ +goog.dom.pattern.Repeat.prototype.pattern_; + + +/** + * Minimum number of times to match the pattern. + * + * @private + */ +goog.dom.pattern.Repeat.prototype.minimum_ = 0; + + +/** + * Optional maximum number of times to match the pattern. A {@code null} value + * will be treated as infinity. + * + * @type {?number} + * @private + */ +goog.dom.pattern.Repeat.prototype.maximum_ = 0; + + +/** + * Number of times the pattern has matched. + * + * @type {number} + */ +goog.dom.pattern.Repeat.prototype.count = 0; + + +/** + * Whether the pattern has recently matched or failed to match and will need to + * be reset when starting a new round of matches. + * + * @type {boolean} + * @private + */ +goog.dom.pattern.Repeat.prototype.needsReset_ = false; + + +/** + * The matched nodes. + * + * @type {Array.} + */ +goog.dom.pattern.Repeat.prototype.matches; + + +/** + * Test whether the given token continues a repeated series of matches of the + * pattern given in the constructor. + * + * @param {Node} token Token to match against. + * @param {goog.dom.TagWalkType} type The type of token. + * @return {goog.dom.pattern.MatchType} MATCH if the pattern + * matches, BACKTRACK_MATCH if the pattern does not match + * but already had accumulated matches, MATCHING if the pattern + * starts a match, and NO_MATCH if the pattern does not match. + * @suppress {missingProperties} See the broken line below. + * @override + */ +goog.dom.pattern.Repeat.prototype.matchToken = function(token, type) { + // Reset if we're starting a new match + if (this.needsReset_) { + this.reset(); + } + + // If the option is set, ignore any whitespace only text nodes + if (token.nodeType == goog.dom.NodeType.TEXT && + token.nodeValue.match(/^\s+$/)) { + return goog.dom.pattern.MatchType.MATCHING; + } + + switch (this.pattern_.matchToken(token, type)) { + case goog.dom.pattern.MatchType.MATCH: + // Record the first token we match. + if (this.count == 0) { + this.matchedNode = token; + } + + // Mark the match + this.count++; + + // Add to the list + this.matches.push(this.pattern_.matchedNode); + + // Check if this match hits our maximum + if (this.maximum_ !== null && this.count == this.maximum_) { + this.needsReset_ = true; + return goog.dom.pattern.MatchType.MATCH; + } else { + return goog.dom.pattern.MatchType.MATCHING; + } + + case goog.dom.pattern.MatchType.MATCHING: + // This can happen when our child pattern is a sequence or a repetition. + return goog.dom.pattern.MatchType.MATCHING; + + case goog.dom.pattern.MatchType.BACKTRACK_MATCH: + // This happens if our child pattern is repetitive too. + // TODO(robbyw): Backtrack further if necessary. + this.count++; + + // NOTE(nicksantos): This line of code is broken. this.patterns_ doesn't + // exist, and this.currentPosition_ doesn't exit. When this is fixed, + // remove the missingProperties suppression above. + if (this.currentPosition_ == this.patterns_.length) { + this.needsReset_ = true; + return goog.dom.pattern.MatchType.BACKTRACK_MATCH; + } else { + // Retry the same token on the next iteration of the child pattern. + return this.matchToken(token, type); + } + + default: + this.needsReset_ = true; + if (this.count >= this.minimum_) { + return goog.dom.pattern.MatchType.BACKTRACK_MATCH; + } else { + return goog.dom.pattern.MatchType.NO_MATCH; + } + } +}; + + +/** + * Reset any internal state this pattern keeps. + * @override + */ +goog.dom.pattern.Repeat.prototype.reset = function() { + this.pattern_.reset(); + this.count = 0; + this.needsReset_ = false; + this.matches.length = 0; +}; diff --git a/float-no-zero/closure-library/closure/goog/dom/pattern/sequence.js b/float-no-zero/closure-library/closure/goog/dom/pattern/sequence.js new file mode 100644 index 0000000000..df40fd6f61 --- /dev/null +++ b/float-no-zero/closure-library/closure/goog/dom/pattern/sequence.js @@ -0,0 +1,141 @@ +// Copyright 2007 The Closure Library Authors. All Rights Reserved. +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS-IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +/** + * @fileoverview DOM pattern to match a sequence of other patterns. + * + * @author robbyw@google.com (Robby Walker) + */ + +goog.provide('goog.dom.pattern.Sequence'); + +goog.require('goog.dom.NodeType'); +goog.require('goog.dom.pattern.AbstractPattern'); +goog.require('goog.dom.pattern.MatchType'); + + + +/** + * Pattern object that matches a sequence of other patterns. + * + * @param {Array.} patterns Ordered array of + * patterns to match. + * @param {boolean=} opt_ignoreWhitespace Optional flag to ignore text nodes + * consisting entirely of whitespace. The default is to not ignore them. + * @constructor + * @extends {goog.dom.pattern.AbstractPattern} + */ +goog.dom.pattern.Sequence = function(patterns, opt_ignoreWhitespace) { + this.patterns = patterns; + this.ignoreWhitespace_ = !!opt_ignoreWhitespace; +}; +goog.inherits(goog.dom.pattern.Sequence, goog.dom.pattern.AbstractPattern); + + +/** + * Ordered array of patterns to match. + * + * @type {Array.} + */ +goog.dom.pattern.Sequence.prototype.patterns; + + +/** + * Position in the patterns array we have reached by successful matches. + * + * @type {number} + * @private + */ +goog.dom.pattern.Sequence.prototype.currentPosition_ = 0; + + +/** + * Whether or not to ignore whitespace only Text nodes. + * + * @type {boolean} + * @private + */ +goog.dom.pattern.Sequence.prototype.ignoreWhitespace_ = false; + + +/** + * Test whether the given token starts, continues, or finishes the sequence + * of patterns given in the constructor. + * + * @param {Node} token Token to match against. + * @param {goog.dom.TagWalkType} type The type of token. + * @return {goog.dom.pattern.MatchType} MATCH if the pattern + * matches, MATCHING if the pattern starts a match, and + * NO_MATCH if the pattern does not match. + * @override + */ +goog.dom.pattern.Sequence.prototype.matchToken = function(token, type) { + // If the option is set, ignore any whitespace only text nodes + if (this.ignoreWhitespace_ && token.nodeType == goog.dom.NodeType.TEXT && + goog.dom.pattern.BREAKING_TEXTNODE_RE.test(token.nodeValue)) { + return goog.dom.pattern.MatchType.MATCHING; + } + + switch (this.patterns[this.currentPosition_].matchToken(token, type)) { + case goog.dom.pattern.MatchType.MATCH: + // Record the first token we match. + if (this.currentPosition_ == 0) { + this.matchedNode = token; + } + + // Move forward one position. + this.currentPosition_++; + + // Check if this is the last position. + if (this.currentPosition_ == this.patterns.length) { + this.reset(); + return goog.dom.pattern.MatchType.MATCH; + } else { + return goog.dom.pattern.MatchType.MATCHING; + } + + case goog.dom.pattern.MatchType.MATCHING: + // This can happen when our child pattern is a sequence or a repetition. + return goog.dom.pattern.MatchType.MATCHING; + + case goog.dom.pattern.MatchType.BACKTRACK_MATCH: + // This means a repetitive match succeeded 1 token ago. + // TODO(robbyw): Backtrack further if necessary. + this.currentPosition_++; + + if (this.currentPosition_ == this.patterns.length) { + this.reset(); + return goog.dom.pattern.MatchType.BACKTRACK_MATCH; + } else { + // Retry the same token on the next pattern. + return this.matchToken(token, type); + } + + default: + this.reset(); + return goog.dom.pattern.MatchType.NO_MATCH; + } +}; + + +/** + * Reset any internal state this pattern keeps. + * @override + */ +goog.dom.pattern.Sequence.prototype.reset = function() { + if (this.patterns[this.currentPosition_]) { + this.patterns[this.currentPosition_].reset(); + } + this.currentPosition_ = 0; +}; diff --git a/float-no-zero/closure-library/closure/goog/dom/pattern/starttag.js b/float-no-zero/closure-library/closure/goog/dom/pattern/starttag.js new file mode 100644 index 0000000000..4ce01135ea --- /dev/null +++ b/float-no-zero/closure-library/closure/goog/dom/pattern/starttag.js @@ -0,0 +1,53 @@ +// Copyright 2007 The Closure Library Authors. All Rights Reserved. +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS-IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +/** + * @fileoverview DOM pattern to match the start of a tag. + * + * @author robbyw@google.com (Robby Walker) + */ + +goog.provide('goog.dom.pattern.StartTag'); + +goog.require('goog.dom.TagWalkType'); +goog.require('goog.dom.pattern.Tag'); + + + +/** + * Pattern object that matches an opening tag. + * + * @param {string|RegExp} tag Name of the tag. Also will accept a regular + * expression to match against the tag name. + * @param {Object=} opt_attrs Optional map of attribute names to desired values. + * This pattern will only match when all attributes are present and match + * the string or regular expression value provided here. + * @param {Object=} opt_styles Optional map of CSS style names to desired + * values. This pattern will only match when all styles are present and + * match the string or regular expression value provided here. + * @param {Function=} opt_test Optional function that takes the element as a + * parameter and returns true if this pattern should match it. + * @constructor + * @extends {goog.dom.pattern.Tag} + */ +goog.dom.pattern.StartTag = function(tag, opt_attrs, opt_styles, opt_test) { + goog.dom.pattern.Tag.call( + this, + tag, + goog.dom.TagWalkType.START_TAG, + opt_attrs, + opt_styles, + opt_test); +}; +goog.inherits(goog.dom.pattern.StartTag, goog.dom.pattern.Tag); diff --git a/float-no-zero/closure-library/closure/goog/dom/pattern/tag.js b/float-no-zero/closure-library/closure/goog/dom/pattern/tag.js new file mode 100644 index 0000000000..d04ccd3a3f --- /dev/null +++ b/float-no-zero/closure-library/closure/goog/dom/pattern/tag.js @@ -0,0 +1,150 @@ +// Copyright 2007 The Closure Library Authors. All Rights Reserved. +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS-IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +/** + * @fileoverview DOM pattern to match a tag. + * + * @author robbyw@google.com (Robby Walker) + */ + +goog.provide('goog.dom.pattern.Tag'); + +goog.require('goog.dom.pattern'); +goog.require('goog.dom.pattern.AbstractPattern'); +goog.require('goog.dom.pattern.MatchType'); +goog.require('goog.object'); + + + +/** + * Pattern object that matches an tag. + * + * @param {string|RegExp} tag Name of the tag. Also will accept a regular + * expression to match against the tag name. + * @param {goog.dom.TagWalkType} type Type of token to match. + * @param {Object=} opt_attrs Optional map of attribute names to desired values. + * This pattern will only match when all attributes are present and match + * the string or regular expression value provided here. + * @param {Object=} opt_styles Optional map of CSS style names to desired + * values. This pattern will only match when all styles are present and + * match the string or regular expression value provided here. + * @param {Function=} opt_test Optional function that takes the element as a + * parameter and returns true if this pattern should match it. + * @constructor + * @extends {goog.dom.pattern.AbstractPattern} + */ +goog.dom.pattern.Tag = function(tag, type, opt_attrs, opt_styles, opt_test) { + if (goog.isString(tag)) { + this.tag_ = tag.toUpperCase(); + } else { + this.tag_ = tag; + } + + this.type_ = type; + + this.attrs_ = opt_attrs || null; + this.styles_ = opt_styles || null; + this.test_ = opt_test || null; +}; +goog.inherits(goog.dom.pattern.Tag, goog.dom.pattern.AbstractPattern); + + +/** + * The tag to match. + * + * @type {string|RegExp} + * @private + */ +goog.dom.pattern.Tag.prototype.tag_; + + +/** + * The type of token to match. + * + * @type {goog.dom.TagWalkType} + * @private + */ +goog.dom.pattern.Tag.prototype.type_; + + +/** + * The attributes to test for. + * + * @type {Object} + * @private + */ +goog.dom.pattern.Tag.prototype.attrs_ = null; + + +/** + * The styles to test for. + * + * @type {Object} + * @private + */ +goog.dom.pattern.Tag.prototype.styles_ = null; + + +/** + * Function that takes the element as a parameter and returns true if this + * pattern should match it. + * + * @type {Function} + * @private + */ +goog.dom.pattern.Tag.prototype.test_ = null; + + +/** + * Test whether the given token is a tag token which matches the tag name, + * style, and attributes provided in the constructor. + * + * @param {Node} token Token to match against. + * @param {goog.dom.TagWalkType} type The type of token. + * @return {goog.dom.pattern.MatchType} MATCH if the pattern + * matches, NO_MATCH otherwise. + * @override + */ +goog.dom.pattern.Tag.prototype.matchToken = function(token, type) { + // Check the direction and tag name. + if (type == this.type_ && + goog.dom.pattern.matchStringOrRegex(this.tag_, token.nodeName)) { + // Check the attributes. + if (this.attrs_ && + !goog.object.every( + this.attrs_, + goog.dom.pattern.matchStringOrRegexMap, + token)) { + return goog.dom.pattern.MatchType.NO_MATCH; + } + // Check the styles. + if (this.styles_ && + !goog.object.every( + this.styles_, + goog.dom.pattern.matchStringOrRegexMap, + token.style)) { + return goog.dom.pattern.MatchType.NO_MATCH; + } + + if (this.test_ && !this.test_(token)) { + return goog.dom.pattern.MatchType.NO_MATCH; + } + + // If we reach this point, we have a match and should save it. + this.matchedNode = token; + return goog.dom.pattern.MatchType.MATCH; + } + + return goog.dom.pattern.MatchType.NO_MATCH; +}; diff --git a/float-no-zero/closure-library/closure/goog/dom/pattern/text.js b/float-no-zero/closure-library/closure/goog/dom/pattern/text.js new file mode 100644 index 0000000000..5b625ab84e --- /dev/null +++ b/float-no-zero/closure-library/closure/goog/dom/pattern/text.js @@ -0,0 +1,70 @@ +// Copyright 2007 The Closure Library Authors. All Rights Reserved. +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS-IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +/** + * @fileoverview DOM pattern to match a text node. + * + * @author robbyw@google.com (Robby Walker) + */ + +goog.provide('goog.dom.pattern.Text'); + +goog.require('goog.dom.NodeType'); +goog.require('goog.dom.pattern'); +goog.require('goog.dom.pattern.AbstractPattern'); +goog.require('goog.dom.pattern.MatchType'); + + + +/** + * Pattern object that matches text by exact matching or regular expressions. + * + * @param {string|RegExp} match String or regular expression to match against. + * @constructor + * @extends {goog.dom.pattern.AbstractPattern} + */ +goog.dom.pattern.Text = function(match) { + this.match_ = match; +}; +goog.inherits(goog.dom.pattern.Text, goog.dom.pattern.AbstractPattern); + + +/** + * The text or regular expression to match. + * + * @type {string|RegExp} + * @private + */ +goog.dom.pattern.Text.prototype.match_; + + +/** + * Test whether the given token is a text token which matches the string or + * regular expression provided in the constructor. + * + * @param {Node} token Token to match against. + * @param {goog.dom.TagWalkType} type The type of token. + * @return {goog.dom.pattern.MatchType} MATCH if the pattern + * matches, NO_MATCH otherwise. + * @override + */ +goog.dom.pattern.Text.prototype.matchToken = function(token, type) { + if (token.nodeType == goog.dom.NodeType.TEXT && + goog.dom.pattern.matchStringOrRegex(this.match_, token.nodeValue)) { + this.matchedNode = token; + return goog.dom.pattern.MatchType.MATCH; + } + + return goog.dom.pattern.MatchType.NO_MATCH; +}; diff --git a/float-no-zero/closure-library/closure/goog/dom/range.js b/float-no-zero/closure-library/closure/goog/dom/range.js new file mode 100644 index 0000000000..3df70816ed --- /dev/null +++ b/float-no-zero/closure-library/closure/goog/dom/range.js @@ -0,0 +1,226 @@ +// Copyright 2007 The Closure Library Authors. All Rights Reserved. +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS-IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +/** + * @fileoverview Utilities for working with ranges in HTML documents. + * + * @author robbyw@google.com (Robby Walker) + * @author ojan@google.com (Ojan Vafai) + * @author jparent@google.com (Julie Parent) + */ + +goog.provide('goog.dom.Range'); + +goog.require('goog.dom'); +goog.require('goog.dom.AbstractRange'); +goog.require('goog.dom.ControlRange'); +goog.require('goog.dom.MultiRange'); +goog.require('goog.dom.NodeType'); +goog.require('goog.dom.TextRange'); +goog.require('goog.userAgent'); + + +/** + * Create a new selection from the given browser window's current selection. + * Note that this object does not auto-update if the user changes their + * selection and should be used as a snapshot. + * @param {Window=} opt_win The window to get the selection of. Defaults to the + * window this class was defined in. + * @return {goog.dom.AbstractRange?} A range wrapper object, or null if there + * was an error. + */ +goog.dom.Range.createFromWindow = function(opt_win) { + var sel = goog.dom.AbstractRange.getBrowserSelectionForWindow( + opt_win || window); + return sel && goog.dom.Range.createFromBrowserSelection(sel); +}; + + +/** + * Create a new range wrapper from the given browser selection object. Note + * that this object does not auto-update if the user changes their selection and + * should be used as a snapshot. + * @param {!Object} selection The browser selection object. + * @return {goog.dom.AbstractRange?} A range wrapper object or null if there + * was an error. + */ +goog.dom.Range.createFromBrowserSelection = function(selection) { + var range; + var isReversed = false; + if (selection.createRange) { + /** @preserveTry */ + try { + range = selection.createRange(); + } catch (e) { + // Access denied errors can be thrown here in IE if the selection was + // a flash obj or if there are cross domain issues + return null; + } + } else if (selection.rangeCount) { + if (selection.rangeCount > 1) { + return goog.dom.MultiRange.createFromBrowserSelection( + /** @type {Selection} */ (selection)); + } else { + range = selection.getRangeAt(0); + isReversed = goog.dom.Range.isReversed(selection.anchorNode, + selection.anchorOffset, selection.focusNode, selection.focusOffset); + } + } else { + return null; + } + + return goog.dom.Range.createFromBrowserRange(range, isReversed); +}; + + +/** + * Create a new range wrapper from the given browser range object. + * @param {Range|TextRange} range The browser range object. + * @param {boolean=} opt_isReversed Whether the focus node is before the anchor + * node. + * @return {goog.dom.AbstractRange} A range wrapper object. + */ +goog.dom.Range.createFromBrowserRange = function(range, opt_isReversed) { + // Create an IE control range when appropriate. + return goog.dom.AbstractRange.isNativeControlRange(range) ? + goog.dom.ControlRange.createFromBrowserRange(range) : + goog.dom.TextRange.createFromBrowserRange(range, opt_isReversed); +}; + + +/** + * Create a new range wrapper that selects the given node's text. + * @param {Node} node The node to select. + * @param {boolean=} opt_isReversed Whether the focus node is before the anchor + * node. + * @return {goog.dom.AbstractRange} A range wrapper object. + */ +goog.dom.Range.createFromNodeContents = function(node, opt_isReversed) { + return goog.dom.TextRange.createFromNodeContents(node, opt_isReversed); +}; + + +/** + * Create a new range wrapper that represents a caret at the given node, + * accounting for the given offset. This always creates a TextRange, regardless + * of whether node is an image node or other control range type node. + * @param {Node} node The node to place a caret at. + * @param {number} offset The offset within the node to place the caret at. + * @return {goog.dom.AbstractRange} A range wrapper object. + */ +goog.dom.Range.createCaret = function(node, offset) { + return goog.dom.TextRange.createFromNodes(node, offset, node, offset); +}; + + +/** + * Create a new range wrapper that selects the area between the given nodes, + * accounting for the given offsets. + * @param {Node} anchorNode The node to anchor on. + * @param {number} anchorOffset The offset within the node to anchor on. + * @param {Node} focusNode The node to focus on. + * @param {number} focusOffset The offset within the node to focus on. + * @return {goog.dom.AbstractRange} A range wrapper object. + */ +goog.dom.Range.createFromNodes = function(anchorNode, anchorOffset, focusNode, + focusOffset) { + return goog.dom.TextRange.createFromNodes(anchorNode, anchorOffset, focusNode, + focusOffset); +}; + + +/** + * Clears the window's selection. + * @param {Window=} opt_win The window to get the selection of. Defaults to the + * window this class was defined in. + */ +goog.dom.Range.clearSelection = function(opt_win) { + var sel = goog.dom.AbstractRange.getBrowserSelectionForWindow( + opt_win || window); + if (!sel) { + return; + } + if (sel.empty) { + // We can't just check that the selection is empty, becuase IE + // sometimes gets confused. + try { + sel.empty(); + } catch (e) { + // Emptying an already empty selection throws an exception in IE + } + } else { + try { + sel.removeAllRanges(); + } catch (e) { + // This throws in IE9 if the range has been invalidated; for example, if + // the user clicked on an element which disappeared during the event + // handler. + } + } +}; + + +/** + * Tests if the window has a selection. + * @param {Window=} opt_win The window to check the selection of. Defaults to + * the window this class was defined in. + * @return {boolean} Whether the window has a selection. + */ +goog.dom.Range.hasSelection = function(opt_win) { + var sel = goog.dom.AbstractRange.getBrowserSelectionForWindow( + opt_win || window); + return !!sel && (goog.userAgent.IE ? sel.type != 'None' : !!sel.rangeCount); +}; + + +/** + * Returns whether the focus position occurs before the anchor position. + * @param {Node} anchorNode The node to anchor on. + * @param {number} anchorOffset The offset within the node to anchor on. + * @param {Node} focusNode The node to focus on. + * @param {number} focusOffset The offset within the node to focus on. + * @return {boolean} Whether the focus position occurs before the anchor + * position. + */ +goog.dom.Range.isReversed = function(anchorNode, anchorOffset, focusNode, + focusOffset) { + if (anchorNode == focusNode) { + return focusOffset < anchorOffset; + } + var child; + if (anchorNode.nodeType == goog.dom.NodeType.ELEMENT && anchorOffset) { + child = anchorNode.childNodes[anchorOffset]; + if (child) { + anchorNode = child; + anchorOffset = 0; + } else if (goog.dom.contains(anchorNode, focusNode)) { + // If focus node is contained in anchorNode, it must be before the + // end of the node. Hence we are reversed. + return true; + } + } + if (focusNode.nodeType == goog.dom.NodeType.ELEMENT && focusOffset) { + child = focusNode.childNodes[focusOffset]; + if (child) { + focusNode = child; + focusOffset = 0; + } else if (goog.dom.contains(focusNode, anchorNode)) { + // If anchor node is contained in focusNode, it must be before the + // end of the node. Hence we are not reversed. + return false; + } + } + return (goog.dom.compareNodeOrder(anchorNode, focusNode) || + anchorOffset - focusOffset) > 0; +}; diff --git a/float-no-zero/closure-library/closure/goog/dom/rangeendpoint.js b/float-no-zero/closure-library/closure/goog/dom/rangeendpoint.js new file mode 100644 index 0000000000..f8d0fe446c --- /dev/null +++ b/float-no-zero/closure-library/closure/goog/dom/rangeendpoint.js @@ -0,0 +1,32 @@ +// Copyright 2007 The Closure Library Authors. All Rights Reserved. +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS-IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +/** + * @fileoverview Simple struct for endpoints of a range. + * + * @author robbyw@google.com (Robby Walker) + */ + + +goog.provide('goog.dom.RangeEndpoint'); + + +/** + * Constants for selection endpoints. + * @enum {number} + */ +goog.dom.RangeEndpoint = { + START: 1, + END: 0 +}; diff --git a/float-no-zero/closure-library/closure/goog/dom/savedcaretrange.js b/float-no-zero/closure-library/closure/goog/dom/savedcaretrange.js new file mode 100644 index 0000000000..ed3aecfbfa --- /dev/null +++ b/float-no-zero/closure-library/closure/goog/dom/savedcaretrange.js @@ -0,0 +1,215 @@ +// Copyright 2008 The Closure Library Authors. All Rights Reserved. +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS-IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +/** + * @fileoverview An API for saving and restoring ranges as HTML carets. + * + * @author nicksantos@google.com (Nick Santos) + */ + + +goog.provide('goog.dom.SavedCaretRange'); + +goog.require('goog.array'); +goog.require('goog.dom'); +goog.require('goog.dom.SavedRange'); +goog.require('goog.dom.TagName'); +goog.require('goog.string'); + + + +/** + * A struct for holding context about saved selections. + * This can be used to preserve the selection and restore while the DOM is + * manipulated, or through an asynchronous call. Use goog.dom.Range factory + * methods to obtain an {@see goog.dom.AbstractRange} instance, and use + * {@see goog.dom.AbstractRange#saveUsingCarets} to obtain a SavedCaretRange. + * For editor ranges under content-editable elements or design-mode iframes, + * prefer using {@see goog.editor.range.saveUsingNormalizedCarets}. + * @param {goog.dom.AbstractRange} range The range being saved. + * @constructor + * @extends {goog.dom.SavedRange} + */ +goog.dom.SavedCaretRange = function(range) { + goog.dom.SavedRange.call(this); + + /** + * The DOM id of the caret at the start of the range. + * @type {string} + * @private + */ + this.startCaretId_ = goog.string.createUniqueString(); + + /** + * The DOM id of the caret at the end of the range. + * @type {string} + * @private + */ + this.endCaretId_ = goog.string.createUniqueString(); + + /** + * Whether the range is reversed (anchor at the end). + * @private {boolean} + */ + this.reversed_ = range.isReversed(); + + /** + * A DOM helper for storing the current document context. + * @type {goog.dom.DomHelper} + * @private + */ + this.dom_ = goog.dom.getDomHelper(range.getDocument()); + + range.surroundWithNodes(this.createCaret_(true), this.createCaret_(false)); +}; +goog.inherits(goog.dom.SavedCaretRange, goog.dom.SavedRange); + + +/** + * Gets the range that this SavedCaretRage represents, without selecting it + * or removing the carets from the DOM. + * @return {goog.dom.AbstractRange?} An abstract range. + */ +goog.dom.SavedCaretRange.prototype.toAbstractRange = function() { + var range = null; + var startCaret = this.getCaret(true); + var endCaret = this.getCaret(false); + if (startCaret && endCaret) { + /** @suppress {missingRequire} circular dependency */ + range = goog.dom.Range.createFromNodes(startCaret, 0, endCaret, 0); + } + return range; +}; + + +/** + * Gets carets. + * @param {boolean} start If true, returns the start caret. Otherwise, get the + * end caret. + * @return {Element} The start or end caret in the given document. + */ +goog.dom.SavedCaretRange.prototype.getCaret = function(start) { + return this.dom_.getElement(start ? this.startCaretId_ : this.endCaretId_); +}; + + +/** + * Removes the carets from the current restoration document. + * @param {goog.dom.AbstractRange=} opt_range A range whose offsets have already + * been adjusted for caret removal; it will be adjusted if it is also + * affected by post-removal operations, such as text node normalization. + * @return {goog.dom.AbstractRange|undefined} The adjusted range, if opt_range + * was provided. + */ +goog.dom.SavedCaretRange.prototype.removeCarets = function(opt_range) { + goog.dom.removeNode(this.getCaret(true)); + goog.dom.removeNode(this.getCaret(false)); + return opt_range; +}; + + +/** + * Sets the document where the range will be restored. + * @param {!Document} doc An HTML document. + */ +goog.dom.SavedCaretRange.prototype.setRestorationDocument = function(doc) { + this.dom_.setDocument(doc); +}; + + +/** + * Reconstruct the selection from the given saved range. Removes carets after + * restoring the selection. If restore does not dispose this saved range, it may + * only be restored a second time if innerHTML or some other mechanism is used + * to restore the carets to the dom. + * @return {goog.dom.AbstractRange?} Restored selection. + * @override + * @protected + */ +goog.dom.SavedCaretRange.prototype.restoreInternal = function() { + var range = null; + var anchorCaret = this.getCaret(!this.reversed_); + var focusCaret = this.getCaret(this.reversed_); + if (anchorCaret && focusCaret) { + var anchorNode = anchorCaret.parentNode; + var anchorOffset = goog.array.indexOf(anchorNode.childNodes, anchorCaret); + var focusNode = focusCaret.parentNode; + var focusOffset = goog.array.indexOf(focusNode.childNodes, focusCaret); + if (focusNode == anchorNode) { + // Compensate for the start caret being removed. + if (this.reversed_) { + anchorOffset--; + } else { + focusOffset--; + } + } + /** @suppress {missingRequire} circular dependency */ + range = goog.dom.Range.createFromNodes(anchorNode, anchorOffset, + focusNode, focusOffset); + range = this.removeCarets(range); + range.select(); + } else { + // If only one caret was found, remove it. + this.removeCarets(); + } + return range; +}; + + +/** + * Dispose the saved range and remove the carets from the DOM. + * @override + * @protected + */ +goog.dom.SavedCaretRange.prototype.disposeInternal = function() { + this.removeCarets(); + this.dom_ = null; +}; + + +/** + * Creates a caret element. + * @param {boolean} start If true, creates the start caret. Otherwise, + * creates the end caret. + * @return {Element} The new caret element. + * @private + */ +goog.dom.SavedCaretRange.prototype.createCaret_ = function(start) { + return this.dom_.createDom(goog.dom.TagName.SPAN, + {'id': start ? this.startCaretId_ : this.endCaretId_}); +}; + + +/** + * A regex that will match all saved range carets in a string. + * @type {RegExp} + */ +goog.dom.SavedCaretRange.CARET_REGEX = /<\/span>/ig; + + +/** + * Returns whether two strings of html are equal, ignoring any saved carets. + * Thus two strings of html whose only difference is the id of their saved + * carets will be considered equal, since they represent html with the + * same selection. + * @param {string} str1 The first string. + * @param {string} str2 The second string. + * @return {boolean} Whether two strings of html are equal, ignoring any + * saved carets. + */ +goog.dom.SavedCaretRange.htmlEqual = function(str1, str2) { + return str1 == str2 || + str1.replace(goog.dom.SavedCaretRange.CARET_REGEX, '') == + str2.replace(goog.dom.SavedCaretRange.CARET_REGEX, ''); +}; diff --git a/float-no-zero/closure-library/closure/goog/dom/savedrange.js b/float-no-zero/closure-library/closure/goog/dom/savedrange.js new file mode 100644 index 0000000000..5a7e951347 --- /dev/null +++ b/float-no-zero/closure-library/closure/goog/dom/savedrange.js @@ -0,0 +1,74 @@ +// Copyright 2007 The Closure Library Authors. All Rights Reserved. +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS-IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +/** + * @fileoverview A generic interface for saving and restoring ranges. + * + * @author robbyw@google.com (Robby Walker) + */ + + +goog.provide('goog.dom.SavedRange'); + +goog.require('goog.Disposable'); +goog.require('goog.log'); + + + +/** + * Abstract interface for a saved range. + * @constructor + * @extends {goog.Disposable} + */ +goog.dom.SavedRange = function() { + goog.Disposable.call(this); +}; +goog.inherits(goog.dom.SavedRange, goog.Disposable); + + +/** + * Logging object. + * @type {goog.log.Logger} + * @private + */ +goog.dom.SavedRange.logger_ = + goog.log.getLogger('goog.dom.SavedRange'); + + +/** + * Restores the range and by default disposes of the saved copy. Take note: + * this means the by default SavedRange objects are single use objects. + * @param {boolean=} opt_stayAlive Whether this SavedRange should stay alive + * (not be disposed) after restoring the range. Defaults to false (dispose). + * @return {goog.dom.AbstractRange} The restored range. + */ +goog.dom.SavedRange.prototype.restore = function(opt_stayAlive) { + if (this.isDisposed()) { + goog.log.error(goog.dom.SavedRange.logger_, + 'Disposed SavedRange objects cannot be restored.'); + } + + var range = this.restoreInternal(); + if (!opt_stayAlive) { + this.dispose(); + } + return range; +}; + + +/** + * Internal method to restore the saved range. + * @return {goog.dom.AbstractRange} The restored range. + */ +goog.dom.SavedRange.prototype.restoreInternal = goog.abstractMethod; diff --git a/float-no-zero/closure-library/closure/goog/dom/selection.js b/float-no-zero/closure-library/closure/goog/dom/selection.js new file mode 100644 index 0000000000..6d6f69e14f --- /dev/null +++ b/float-no-zero/closure-library/closure/goog/dom/selection.js @@ -0,0 +1,470 @@ +// Copyright 2006 The Closure Library Authors. All Rights Reserved. +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS-IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +/** + * @fileoverview Utilities for working with selections in input boxes and text + * areas. + * + * @see ../demos/dom_selection.html + */ + + +goog.provide('goog.dom.selection'); + +goog.require('goog.string'); +goog.require('goog.userAgent'); + + +/** + * Sets the place where the selection should start inside a textarea or a text + * input + * @param {Element} textfield A textarea or text input. + * @param {number} pos The position to set the start of the selection at. + */ +goog.dom.selection.setStart = function(textfield, pos) { + if (goog.dom.selection.useSelectionProperties_(textfield)) { + textfield.selectionStart = pos; + } else if (goog.userAgent.IE) { + // destructuring assignment would have been sweet + var tmp = goog.dom.selection.getRangeIe_(textfield); + var range = tmp[0]; + var selectionRange = tmp[1]; + + if (range.inRange(selectionRange)) { + pos = goog.dom.selection.canonicalizePositionIe_(textfield, pos); + + range.collapse(true); + range.move('character', pos); + range.select(); + } + } +}; + + +/** + * Return the place where the selection starts inside a textarea or a text + * input + * @param {Element} textfield A textarea or text input. + * @return {number} The position where the selection starts or 0 if it was + * unable to find the position or no selection exists. Note that we can't + * reliably tell the difference between an element that has no selection and + * one where it starts at 0. + */ +goog.dom.selection.getStart = function(textfield) { + return goog.dom.selection.getEndPoints_(textfield, true)[0]; +}; + + +/** + * Returns the start and end points of the selection within a textarea in IE. + * IE treats newline characters as \r\n characters, and we need to check for + * these characters at the edge of our selection, to ensure that we return the + * right cursor position. + * @param {TextRange} range Complete range object, e.g., "Hello\r\n". + * @param {TextRange} selRange Selected range object. + * @param {boolean} getOnlyStart Value indicating if only start + * cursor position is to be returned. In IE, obtaining the end position + * involves extra work, hence we have this parameter for calls which need + * only start position. + * @return {Array.} An array with the start and end positions where the + * selection starts and ends or [0,0] if it was unable to find the + * positions or no selection exists. Note that we can't reliably tell the + * difference between an element that has no selection and one where + * it starts and ends at 0. If getOnlyStart was true, we return + * -1 as end offset. + * @private + */ +goog.dom.selection.getEndPointsTextareaIe_ = function( + range, selRange, getOnlyStart) { + // Create a duplicate of the selected range object to perform our actions + // against. Example of selectionRange = "" (assuming that the cursor is + // just after the \r\n combination) + var selectionRange = selRange.duplicate(); + + // Text before the selection start, e.g.,"Hello" (notice how range.text + // excludes the \r\n sequence) + var beforeSelectionText = range.text; + // Text before the selection start, e.g., "Hello" (this will later include + // the \r\n sequences also) + var untrimmedBeforeSelectionText = beforeSelectionText; + // Text within the selection , e.g. "" assuming that the cursor is just after + // the \r\n combination. + var selectionText = selectionRange.text; + // Text within the selection, e.g., "" (this will later include the \r\n + // sequences also) + var untrimmedSelectionText = selectionText; + + // Boolean indicating whether we are done dealing with the text before the + // selection's beginning. + var isRangeEndTrimmed = false; + // Go over the range until it becomes a 0-lengthed range or until the range + // text starts changing when we move the end back by one character. + // If after moving the end back by one character, the text remains the same, + // then we need to add a "\r\n" at the end to get the actual text. + while (!isRangeEndTrimmed) { + if (range.compareEndPoints('StartToEnd', range) == 0) { + isRangeEndTrimmed = true; + } else { + range.moveEnd('character', -1); + if (range.text == beforeSelectionText) { + // If the start position of the cursor was after a \r\n string, + // we would skip over it in one go with the moveEnd call, but + // range.text will still show "Hello" (because of the IE range.text + // bug) - this implies that we should add a \r\n to our + // untrimmedBeforeSelectionText string. + untrimmedBeforeSelectionText += '\r\n'; + } else { + isRangeEndTrimmed = true; + } + } + } + + if (getOnlyStart) { + // We return -1 as end, since the caller is only interested in the start + // value. + return [untrimmedBeforeSelectionText.length, -1]; + } + // Boolean indicating whether we are done dealing with the text inside the + // selection. + var isSelectionRangeEndTrimmed = false; + // Go over the selected range until it becomes a 0-lengthed range or until + // the range text starts changing when we move the end back by one character. + // If after moving the end back by one character, the text remains the same, + // then we need to add a "\r\n" at the end to get the actual text. + while (!isSelectionRangeEndTrimmed) { + if (selectionRange.compareEndPoints('StartToEnd', selectionRange) == 0) { + isSelectionRangeEndTrimmed = true; + } else { + selectionRange.moveEnd('character', -1); + if (selectionRange.text == selectionText) { + // If the selection was not empty, and the end point of the selection + // was just after a \r\n, we would have skipped it in one go with the + // moveEnd call, and this implies that we should add a \r\n to the + // untrimmedSelectionText string. + untrimmedSelectionText += '\r\n'; + } else { + isSelectionRangeEndTrimmed = true; + } + } + } + return [ + untrimmedBeforeSelectionText.length, + untrimmedBeforeSelectionText.length + untrimmedSelectionText.length]; +}; + + +/** + * Returns the start and end points of the selection inside a textarea or a + * text input. + * @param {Element} textfield A textarea or text input. + * @return {Array.} An array with the start and end positions where the + * selection starts and ends or [0,0] if it was unable to find the + * positions or no selection exists. Note that we can't reliably tell the + * difference between an element that has no selection and one where + * it starts and ends at 0. + */ +goog.dom.selection.getEndPoints = function(textfield) { + return goog.dom.selection.getEndPoints_(textfield, false); +}; + + +/** + * Returns the start and end points of the selection inside a textarea or a + * text input. + * @param {Element} textfield A textarea or text input. + * @param {boolean} getOnlyStart Value indicating if only start + * cursor position is to be returned. In IE, obtaining the end position + * involves extra work, hence we have this parameter. In FF, there is not + * much extra effort involved. + * @return {Array.} An array with the start and end positions where the + * selection starts and ends or [0,0] if it was unable to find the + * positions or no selection exists. Note that we can't reliably tell the + * difference between an element that has no selection and one where + * it starts and ends at 0. If getOnlyStart was true, we return + * -1 as end offset. + * @private + */ +goog.dom.selection.getEndPoints_ = function(textfield, getOnlyStart) { + var startPos = 0; + var endPos = 0; + if (goog.dom.selection.useSelectionProperties_(textfield)) { + startPos = textfield.selectionStart; + endPos = getOnlyStart ? -1 : textfield.selectionEnd; + } else if (goog.userAgent.IE) { + var tmp = goog.dom.selection.getRangeIe_(textfield); + var range = tmp[0]; + var selectionRange = tmp[1]; + + if (range.inRange(selectionRange)) { + range.setEndPoint('EndToStart', selectionRange); + if (textfield.type == 'textarea') { + return goog.dom.selection.getEndPointsTextareaIe_( + range, selectionRange, getOnlyStart); + } + startPos = range.text.length; + if (!getOnlyStart) { + endPos = range.text.length + selectionRange.text.length; + } else { + endPos = -1; // caller did not ask for end position + } + } + } + return [startPos, endPos]; +}; + + +/** + * Sets the place where the selection should end inside a text area or a text + * input + * @param {Element} textfield A textarea or text input. + * @param {number} pos The position to end the selection at. + */ +goog.dom.selection.setEnd = function(textfield, pos) { + if (goog.dom.selection.useSelectionProperties_(textfield)) { + textfield.selectionEnd = pos; + } else if (goog.userAgent.IE) { + var tmp = goog.dom.selection.getRangeIe_(textfield); + var range = tmp[0]; + var selectionRange = tmp[1]; + + if (range.inRange(selectionRange)) { + // Both the current position and the start cursor position need + // to be canonicalized to take care of possible \r\n miscounts. + pos = goog.dom.selection.canonicalizePositionIe_(textfield, pos); + var startCursorPos = goog.dom.selection.canonicalizePositionIe_( + textfield, goog.dom.selection.getStart(textfield)); + + selectionRange.collapse(true); + selectionRange.moveEnd('character', pos - startCursorPos); + selectionRange.select(); + } + } +}; + + +/** + * Returns the place where the selection ends inside a textarea or a text input + * @param {Element} textfield A textarea or text input. + * @return {number} The position where the selection ends or 0 if it was + * unable to find the position or no selection exists. + */ +goog.dom.selection.getEnd = function(textfield) { + return goog.dom.selection.getEndPoints_(textfield, false)[1]; +}; + + +/** + * Sets the cursor position within a textfield. + * @param {Element} textfield A textarea or text input. + * @param {number} pos The position within the text field. + */ +goog.dom.selection.setCursorPosition = function(textfield, pos) { + if (goog.dom.selection.useSelectionProperties_(textfield)) { + // Mozilla directly supports this + textfield.selectionStart = pos; + textfield.selectionEnd = pos; + + } else if (goog.userAgent.IE) { + pos = goog.dom.selection.canonicalizePositionIe_(textfield, pos); + + // IE has textranges. A textfield's textrange encompasses the + // entire textfield's text by default + var sel = textfield.createTextRange(); + + sel.collapse(true); + sel.move('character', pos); + sel.select(); + } +}; + + +/** + * Sets the selected text inside a textarea or a text input + * @param {Element} textfield A textarea or text input. + * @param {string} text The text to change the selection to. + */ +goog.dom.selection.setText = function(textfield, text) { + if (goog.dom.selection.useSelectionProperties_(textfield)) { + var value = textfield.value; + var oldSelectionStart = textfield.selectionStart; + var before = value.substr(0, oldSelectionStart); + var after = value.substr(textfield.selectionEnd); + textfield.value = before + text + after; + textfield.selectionStart = oldSelectionStart; + textfield.selectionEnd = oldSelectionStart + text.length; + } else if (goog.userAgent.IE) { + var tmp = goog.dom.selection.getRangeIe_(textfield); + var range = tmp[0]; + var selectionRange = tmp[1]; + + if (!range.inRange(selectionRange)) { + return; + } + // When we set the selection text the selection range is collapsed to the + // end. We therefore duplicate the current selection so we know where it + // started. Once we've set the selection text we move the start of the + // selection range to the old start + var range2 = selectionRange.duplicate(); + selectionRange.text = text; + selectionRange.setEndPoint('StartToStart', range2); + selectionRange.select(); + } else { + throw Error('Cannot set the selection end'); + } +}; + + +/** + * Returns the selected text inside a textarea or a text input + * @param {Element} textfield A textarea or text input. + * @return {string} The selected text. + */ +goog.dom.selection.getText = function(textfield) { + if (goog.dom.selection.useSelectionProperties_(textfield)) { + var s = textfield.value; + return s.substring(textfield.selectionStart, textfield.selectionEnd); + } + + if (goog.userAgent.IE) { + var tmp = goog.dom.selection.getRangeIe_(textfield); + var range = tmp[0]; + var selectionRange = tmp[1]; + + if (!range.inRange(selectionRange)) { + return ''; + } else if (textfield.type == 'textarea') { + return goog.dom.selection.getSelectionRangeText_(selectionRange); + } + return selectionRange.text; + } + + throw Error('Cannot get the selection text'); +}; + + +/** + * Returns the selected text within a textarea in IE. + * IE treats newline characters as \r\n characters, and we need to check for + * these characters at the edge of our selection, to ensure that we return the + * right string. + * @param {TextRange} selRange Selected range object. + * @return {string} Selected text in the textarea. + * @private + */ +goog.dom.selection.getSelectionRangeText_ = function(selRange) { + // Create a duplicate of the selected range object to perform our actions + // against. Suppose the text in the textarea is "Hello\r\nWorld" and the + // selection encompasses the "o\r\n" bit, initial selectionRange will be "o" + // (assuming that the cursor is just after the \r\n combination) + var selectionRange = selRange.duplicate(); + + // Text within the selection , e.g. "o" assuming that the cursor is just after + // the \r\n combination. + var selectionText = selectionRange.text; + // Text within the selection, e.g., "o" (this will later include the \r\n + // sequences also) + var untrimmedSelectionText = selectionText; + + // Boolean indicating whether we are done dealing with the text inside the + // selection. + var isSelectionRangeEndTrimmed = false; + // Go over the selected range until it becomes a 0-lengthed range or until + // the range text starts changing when we move the end back by one character. + // If after moving the end back by one character, the text remains the same, + // then we need to add a "\r\n" at the end to get the actual text. + while (!isSelectionRangeEndTrimmed) { + if (selectionRange.compareEndPoints('StartToEnd', selectionRange) == 0) { + isSelectionRangeEndTrimmed = true; + } else { + selectionRange.moveEnd('character', -1); + if (selectionRange.text == selectionText) { + // If the selection was not empty, and the end point of the selection + // was just after a \r\n, we would have skipped it in one go with the + // moveEnd call, and this implies that we should add a \r\n to the + // untrimmedSelectionText string. + untrimmedSelectionText += '\r\n'; + } else { + isSelectionRangeEndTrimmed = true; + } + } + } + return untrimmedSelectionText; +}; + + +/** + * Helper function for returning the range for an object as well as the + * selection range + * @private + * @param {Element} el The element to get the range for. + * @return {Array.} Range of object and selection range in two + * element array. + */ +goog.dom.selection.getRangeIe_ = function(el) { + var doc = el.ownerDocument || el.document; + + var selectionRange = doc.selection.createRange(); + // el.createTextRange() doesn't work on textareas + var range; + + if (el.type == 'textarea') { + range = doc.body.createTextRange(); + range.moveToElementText(el); + } else { + range = el.createTextRange(); + } + + return [range, selectionRange]; +}; + + +/** + * Helper function for canonicalizing a position inside a textfield in IE. + * Deals with the issue that \r\n counts as 2 characters, but + * move('character', n) passes over both characters in one move. + * @private + * @param {Element} textfield The text element. + * @param {number} pos The position desired in that element. + * @return {number} The canonicalized position that will work properly with + * move('character', pos). + */ +goog.dom.selection.canonicalizePositionIe_ = function(textfield, pos) { + if (textfield.type == 'textarea') { + // We do this only for textarea because it is the only one which can + // have a \r\n (input cannot have this). + var value = textfield.value.substring(0, pos); + pos = goog.string.canonicalizeNewlines(value).length; + } + return pos; +}; + + +/** + * Helper function to determine whether it's okay to use + * selectionStart/selectionEnd. + * + * @param {Element} el The element to check for. + * @return {boolean} Whether it's okay to use the selectionStart and + * selectionEnd properties on {@code el}. + * @private + */ +goog.dom.selection.useSelectionProperties_ = function(el) { + try { + return typeof el.selectionStart == 'number'; + } catch (e) { + // Firefox throws an exception if you try to access selectionStart + // on an element with display: none. + return false; + } +}; diff --git a/float-no-zero/closure-library/closure/goog/dom/tagiterator.js b/float-no-zero/closure-library/closure/goog/dom/tagiterator.js new file mode 100644 index 0000000000..cd7787d6d9 --- /dev/null +++ b/float-no-zero/closure-library/closure/goog/dom/tagiterator.js @@ -0,0 +1,367 @@ +// Copyright 2008 The Closure Library Authors. All Rights Reserved. +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS-IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +/** + * @fileoverview Iterator subclass for DOM tree traversal. + * + * @author robbyw@google.com (Robby Walker) + */ + +goog.provide('goog.dom.TagIterator'); +goog.provide('goog.dom.TagWalkType'); + +goog.require('goog.dom.NodeType'); +goog.require('goog.iter.Iterator'); +goog.require('goog.iter.StopIteration'); + + +/** + * There are three types of token: + *
    + *
  1. {@code START_TAG} - The beginning of a tag. + *
  2. {@code OTHER} - Any non-element node position. + *
  3. {@code END_TAG} - The end of a tag. + *
+ * Users of this enumeration can rely on {@code START_TAG + END_TAG = 0} and + * that {@code OTHER = 0}. + * + * @enum {number} + */ +goog.dom.TagWalkType = { + START_TAG: 1, + OTHER: 0, + END_TAG: -1 +}; + + + +/** + * A DOM tree traversal iterator. + * + * Starting with the given node, the iterator walks the DOM in order, reporting + * events for the start and end of Elements, and the presence of text nodes. For + * example: + * + *
+ * <div>1<span>2</span>3</div>
+ * 
+ * + * Will return the following nodes: + * + * [div, 1, span, 2, span, 3, div] + * + * With the following states: + * + * [START, OTHER, START, OTHER, END, OTHER, END] + * + * And the following depths + * + * [1, 1, 2, 2, 1, 1, 0] + * + * Imagining | represents iterator position, the traversal stops at + * each of the following locations: + * + *
+ * <div>|1|<span>|2|</span>|3|</div>|
+ * 
+ * + * The iterator can also be used in reverse mode, which will return the nodes + * and states in the opposite order. The depths will be slightly different + * since, like in normal mode, the depth is computed *after* the given node. + * + * Lastly, it is possible to create an iterator that is unconstrained, meaning + * that it will continue iterating until the end of the document instead of + * until exiting the start node. + * + * @param {Node=} opt_node The start node. If unspecified or null, defaults to + * an empty iterator. + * @param {boolean=} opt_reversed Whether to traverse the tree in reverse. + * @param {boolean=} opt_unconstrained Whether the iterator is not constrained + * to the starting node and its children. + * @param {goog.dom.TagWalkType?=} opt_tagType The type of the position. + * Defaults to the start of the given node for forward iterators, and + * the end of the node for reverse iterators. + * @param {number=} opt_depth The starting tree depth. + * @constructor + * @extends {goog.iter.Iterator} + */ +goog.dom.TagIterator = function(opt_node, opt_reversed, + opt_unconstrained, opt_tagType, opt_depth) { + this.reversed = !!opt_reversed; + if (opt_node) { + this.setPosition(opt_node, opt_tagType); + } + this.depth = opt_depth != undefined ? opt_depth : this.tagType || 0; + if (this.reversed) { + this.depth *= -1; + } + this.constrained = !opt_unconstrained; +}; +goog.inherits(goog.dom.TagIterator, goog.iter.Iterator); + + +/** + * The node this position is located on. + * @type {Node} + */ +goog.dom.TagIterator.prototype.node = null; + + +/** + * The type of this position. + * @type {goog.dom.TagWalkType} + */ +goog.dom.TagIterator.prototype.tagType = goog.dom.TagWalkType.OTHER; + + +/** + * The tree depth of this position relative to where the iterator started. The + * depth is considered to be the tree depth just past the current node, so if an + * iterator is at position
+ *     
|
+ *
+ * (i.e. the node is the div and the type is START_TAG) its depth will be 1. + * @type {number} + */ +goog.dom.TagIterator.prototype.depth; + + +/** + * Whether the node iterator is moving in reverse. + * @type {boolean} + */ +goog.dom.TagIterator.prototype.reversed; + + +/** + * Whether the iterator is constrained to the starting node and its children. + * @type {boolean} + */ +goog.dom.TagIterator.prototype.constrained; + + +/** + * Whether iteration has started. + * @type {boolean} + * @private + */ +goog.dom.TagIterator.prototype.started_ = false; + + +/** + * Set the position of the iterator. Overwrite the tree node and the position + * type which can be one of the {@link goog.dom.TagWalkType} token types. + * Only overwrites the tree depth when the parameter is specified. + * @param {Node} node The node to set the position to. + * @param {goog.dom.TagWalkType?=} opt_tagType The type of the position + * Defaults to the start of the given node. + * @param {number=} opt_depth The tree depth. + */ +goog.dom.TagIterator.prototype.setPosition = function(node, + opt_tagType, opt_depth) { + this.node = node; + + if (node) { + if (goog.isNumber(opt_tagType)) { + this.tagType = opt_tagType; + } else { + // Auto-determine the proper type + this.tagType = this.node.nodeType != goog.dom.NodeType.ELEMENT ? + goog.dom.TagWalkType.OTHER : + this.reversed ? goog.dom.TagWalkType.END_TAG : + goog.dom.TagWalkType.START_TAG; + } + } + + if (goog.isNumber(opt_depth)) { + this.depth = opt_depth; + } +}; + + +/** + * Replace this iterator's values with values from another. The two iterators + * must be of the same type. + * @param {goog.dom.TagIterator} other The iterator to copy. + * @protected + */ +goog.dom.TagIterator.prototype.copyFrom = function(other) { + this.node = other.node; + this.tagType = other.tagType; + this.depth = other.depth; + this.reversed = other.reversed; + this.constrained = other.constrained; +}; + + +/** + * @return {goog.dom.TagIterator} A copy of this iterator. + */ +goog.dom.TagIterator.prototype.clone = function() { + return new goog.dom.TagIterator(this.node, this.reversed, + !this.constrained, this.tagType, this.depth); +}; + + +/** + * Skip the current tag. + */ +goog.dom.TagIterator.prototype.skipTag = function() { + var check = this.reversed ? goog.dom.TagWalkType.END_TAG : + goog.dom.TagWalkType.START_TAG; + if (this.tagType == check) { + this.tagType = /** @type {goog.dom.TagWalkType} */ (check * -1); + this.depth += this.tagType * (this.reversed ? -1 : 1); + } +}; + + +/** + * Restart the current tag. + */ +goog.dom.TagIterator.prototype.restartTag = function() { + var check = this.reversed ? goog.dom.TagWalkType.START_TAG : + goog.dom.TagWalkType.END_TAG; + if (this.tagType == check) { + this.tagType = /** @type {goog.dom.TagWalkType} */ (check * -1); + this.depth += this.tagType * (this.reversed ? -1 : 1); + } +}; + + +/** + * Move to the next position in the DOM tree. + * @return {Node} Returns the next node, or throws a goog.iter.StopIteration + * exception if the end of the iterator's range has been reached. + * @override + */ +goog.dom.TagIterator.prototype.next = function() { + var node; + + if (this.started_) { + if (!this.node || this.constrained && this.depth == 0) { + throw goog.iter.StopIteration; + } + node = this.node; + + var startType = this.reversed ? goog.dom.TagWalkType.END_TAG : + goog.dom.TagWalkType.START_TAG; + + if (this.tagType == startType) { + // If we have entered the tag, test if there are any children to move to. + var child = this.reversed ? node.lastChild : node.firstChild; + if (child) { + this.setPosition(child); + } else { + // If not, move on to exiting this tag. + this.setPosition(node, + /** @type {goog.dom.TagWalkType} */ (startType * -1)); + } + } else { + var sibling = this.reversed ? node.previousSibling : node.nextSibling; + if (sibling) { + // Try to move to the next node. + this.setPosition(sibling); + } else { + // If no such node exists, exit our parent. + this.setPosition(node.parentNode, + /** @type {goog.dom.TagWalkType} */ (startType * -1)); + } + } + + this.depth += this.tagType * (this.reversed ? -1 : 1); + } else { + this.started_ = true; + } + + // Check the new position for being last, and return it if it's not. + node = this.node; + if (!this.node) { + throw goog.iter.StopIteration; + } + return node; +}; + + +/** + * @return {boolean} Whether next has ever been called on this iterator. + * @protected + */ +goog.dom.TagIterator.prototype.isStarted = function() { + return this.started_; +}; + + +/** + * @return {boolean} Whether this iterator's position is a start tag position. + */ +goog.dom.TagIterator.prototype.isStartTag = function() { + return this.tagType == goog.dom.TagWalkType.START_TAG; +}; + + +/** + * @return {boolean} Whether this iterator's position is an end tag position. + */ +goog.dom.TagIterator.prototype.isEndTag = function() { + return this.tagType == goog.dom.TagWalkType.END_TAG; +}; + + +/** + * @return {boolean} Whether this iterator's position is not at an element node. + */ +goog.dom.TagIterator.prototype.isNonElement = function() { + return this.tagType == goog.dom.TagWalkType.OTHER; +}; + + +/** + * Test if two iterators are at the same position - i.e. if the node and tagType + * is the same. This will still return true if the two iterators are moving in + * opposite directions or have different constraints. + * @param {goog.dom.TagIterator} other The iterator to compare to. + * @return {boolean} Whether the two iterators are at the same position. + */ +goog.dom.TagIterator.prototype.equals = function(other) { + // Nodes must be equal, and we must either have reached the end of our tree + // or be at the same position. + return other.node == this.node && (!this.node || + other.tagType == this.tagType); +}; + + +/** + * Replace the current node with the list of nodes. Reset the iterator so that + * it visits the first of the nodes next. + * @param {...Object} var_args A list of nodes to replace the current node with. + * If the first argument is array-like, it will be used, otherwise all the + * arguments are assumed to be nodes. + */ +goog.dom.TagIterator.prototype.splice = function(var_args) { + // Reset the iterator so that it iterates over the first replacement node in + // the arguments on the next iteration. + var node = this.node; + this.restartTag(); + this.reversed = !this.reversed; + goog.dom.TagIterator.prototype.next.call(this); + this.reversed = !this.reversed; + + // Replace the node with the arguments. + var arr = goog.isArrayLike(arguments[0]) ? arguments[0] : arguments; + for (var i = arr.length - 1; i >= 0; i--) { + goog.dom.insertSiblingAfter(arr[i], node); + } + goog.dom.removeNode(node); +}; diff --git a/float-no-zero/closure-library/closure/goog/dom/tagname.js b/float-no-zero/closure-library/closure/goog/dom/tagname.js new file mode 100644 index 0000000000..77a9b475a9 --- /dev/null +++ b/float-no-zero/closure-library/closure/goog/dom/tagname.js @@ -0,0 +1,159 @@ +// Copyright 2007 The Closure Library Authors. All Rights Reserved. +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS-IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +/** + * @fileoverview Defines the goog.dom.TagName enum. This enumerates + * all HTML tag names specified in either the the W3C HTML 4.01 index of + * elements or the HTML5 draft specification. + * + * References: + * http://www.w3.org/TR/html401/index/elements.html + * http://dev.w3.org/html5/spec/section-index.html + * + */ +goog.provide('goog.dom.TagName'); + + +/** + * Enum of all html tag names specified by the W3C HTML4.01 and HTML5 + * specifications. + * @enum {string} + */ +goog.dom.TagName = { + A: 'A', + ABBR: 'ABBR', + ACRONYM: 'ACRONYM', + ADDRESS: 'ADDRESS', + APPLET: 'APPLET', + AREA: 'AREA', + ARTICLE: 'ARTICLE', + ASIDE: 'ASIDE', + AUDIO: 'AUDIO', + B: 'B', + BASE: 'BASE', + BASEFONT: 'BASEFONT', + BDI: 'BDI', + BDO: 'BDO', + BIG: 'BIG', + BLOCKQUOTE: 'BLOCKQUOTE', + BODY: 'BODY', + BR: 'BR', + BUTTON: 'BUTTON', + CANVAS: 'CANVAS', + CAPTION: 'CAPTION', + CENTER: 'CENTER', + CITE: 'CITE', + CODE: 'CODE', + COL: 'COL', + COLGROUP: 'COLGROUP', + COMMAND: 'COMMAND', + DATA: 'DATA', + DATALIST: 'DATALIST', + DD: 'DD', + DEL: 'DEL', + DETAILS: 'DETAILS', + DFN: 'DFN', + DIALOG: 'DIALOG', + DIR: 'DIR', + DIV: 'DIV', + DL: 'DL', + DT: 'DT', + EM: 'EM', + EMBED: 'EMBED', + FIELDSET: 'FIELDSET', + FIGCAPTION: 'FIGCAPTION', + FIGURE: 'FIGURE', + FONT: 'FONT', + FOOTER: 'FOOTER', + FORM: 'FORM', + FRAME: 'FRAME', + FRAMESET: 'FRAMESET', + H1: 'H1', + H2: 'H2', + H3: 'H3', + H4: 'H4', + H5: 'H5', + H6: 'H6', + HEAD: 'HEAD', + HEADER: 'HEADER', + HGROUP: 'HGROUP', + HR: 'HR', + HTML: 'HTML', + I: 'I', + IFRAME: 'IFRAME', + IMG: 'IMG', + INPUT: 'INPUT', + INS: 'INS', + ISINDEX: 'ISINDEX', + KBD: 'KBD', + KEYGEN: 'KEYGEN', + LABEL: 'LABEL', + LEGEND: 'LEGEND', + LI: 'LI', + LINK: 'LINK', + MAP: 'MAP', + MARK: 'MARK', + MATH: 'MATH', + MENU: 'MENU', + META: 'META', + METER: 'METER', + NAV: 'NAV', + NOFRAMES: 'NOFRAMES', + NOSCRIPT: 'NOSCRIPT', + OBJECT: 'OBJECT', + OL: 'OL', + OPTGROUP: 'OPTGROUP', + OPTION: 'OPTION', + OUTPUT: 'OUTPUT', + P: 'P', + PARAM: 'PARAM', + PRE: 'PRE', + PROGRESS: 'PROGRESS', + Q: 'Q', + RP: 'RP', + RT: 'RT', + RUBY: 'RUBY', + S: 'S', + SAMP: 'SAMP', + SCRIPT: 'SCRIPT', + SECTION: 'SECTION', + SELECT: 'SELECT', + SMALL: 'SMALL', + SOURCE: 'SOURCE', + SPAN: 'SPAN', + STRIKE: 'STRIKE', + STRONG: 'STRONG', + STYLE: 'STYLE', + SUB: 'SUB', + SUMMARY: 'SUMMARY', + SUP: 'SUP', + SVG: 'SVG', + TABLE: 'TABLE', + TBODY: 'TBODY', + TD: 'TD', + TEXTAREA: 'TEXTAREA', + TFOOT: 'TFOOT', + TH: 'TH', + THEAD: 'THEAD', + TIME: 'TIME', + TITLE: 'TITLE', + TR: 'TR', + TRACK: 'TRACK', + TT: 'TT', + U: 'U', + UL: 'UL', + VAR: 'VAR', + VIDEO: 'VIDEO', + WBR: 'WBR' +}; diff --git a/float-no-zero/closure-library/closure/goog/dom/textrange.js b/float-no-zero/closure-library/closure/goog/dom/textrange.js new file mode 100644 index 0000000000..73b82ac1ab --- /dev/null +++ b/float-no-zero/closure-library/closure/goog/dom/textrange.js @@ -0,0 +1,630 @@ +// Copyright 2007 The Closure Library Authors. All Rights Reserved. +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS-IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +/** + * @fileoverview Utilities for working with text ranges in HTML documents. + * + * @author robbyw@google.com (Robby Walker) + * @author ojan@google.com (Ojan Vafai) + * @author jparent@google.com (Julie Parent) + */ + + +goog.provide('goog.dom.TextRange'); + +goog.require('goog.array'); +goog.require('goog.dom'); +goog.require('goog.dom.AbstractRange'); +goog.require('goog.dom.RangeType'); +goog.require('goog.dom.SavedRange'); +goog.require('goog.dom.TagName'); +goog.require('goog.dom.TextRangeIterator'); +goog.require('goog.dom.browserrange'); +goog.require('goog.string'); +goog.require('goog.userAgent'); + + + +/** + * Create a new text selection with no properties. Do not use this constructor: + * use one of the goog.dom.Range.createFrom* methods instead. + * @constructor + * @extends {goog.dom.AbstractRange} + */ +goog.dom.TextRange = function() { +}; +goog.inherits(goog.dom.TextRange, goog.dom.AbstractRange); + + +/** + * Create a new range wrapper from the given browser range object. Do not use + * this method directly - please use goog.dom.Range.createFrom* instead. + * @param {Range|TextRange} range The browser range object. + * @param {boolean=} opt_isReversed Whether the focus node is before the anchor + * node. + * @return {goog.dom.TextRange} A range wrapper object. + */ +goog.dom.TextRange.createFromBrowserRange = function(range, opt_isReversed) { + return goog.dom.TextRange.createFromBrowserRangeWrapper_( + goog.dom.browserrange.createRange(range), opt_isReversed); +}; + + +/** + * Create a new range wrapper from the given browser range wrapper. + * @param {goog.dom.browserrange.AbstractRange} browserRange The browser range + * wrapper. + * @param {boolean=} opt_isReversed Whether the focus node is before the anchor + * node. + * @return {goog.dom.TextRange} A range wrapper object. + * @private + */ +goog.dom.TextRange.createFromBrowserRangeWrapper_ = function(browserRange, + opt_isReversed) { + var range = new goog.dom.TextRange(); + + // Initialize the range as a browser range wrapper type range. + range.browserRangeWrapper_ = browserRange; + range.isReversed_ = !!opt_isReversed; + + return range; +}; + + +/** + * Create a new range wrapper that selects the given node's text. Do not use + * this method directly - please use goog.dom.Range.createFrom* instead. + * @param {Node} node The node to select. + * @param {boolean=} opt_isReversed Whether the focus node is before the anchor + * node. + * @return {goog.dom.TextRange} A range wrapper object. + */ +goog.dom.TextRange.createFromNodeContents = function(node, opt_isReversed) { + return goog.dom.TextRange.createFromBrowserRangeWrapper_( + goog.dom.browserrange.createRangeFromNodeContents(node), + opt_isReversed); +}; + + +/** + * Create a new range wrapper that selects the area between the given nodes, + * accounting for the given offsets. Do not use this method directly - please + * use goog.dom.Range.createFrom* instead. + * @param {Node} anchorNode The node to start with. + * @param {number} anchorOffset The offset within the node to start. + * @param {Node} focusNode The node to end with. + * @param {number} focusOffset The offset within the node to end. + * @return {goog.dom.TextRange} A range wrapper object. + */ +goog.dom.TextRange.createFromNodes = function(anchorNode, anchorOffset, + focusNode, focusOffset) { + var range = new goog.dom.TextRange(); + range.isReversed_ = goog.dom.Range.isReversed(anchorNode, anchorOffset, + focusNode, focusOffset); + + // Avoid selecting terminal elements directly + if (goog.dom.isElement(anchorNode) && !goog.dom.canHaveChildren(anchorNode)) { + var parent = anchorNode.parentNode; + anchorOffset = goog.array.indexOf(parent.childNodes, anchorNode); + anchorNode = parent; + } + + if (goog.dom.isElement(focusNode) && !goog.dom.canHaveChildren(focusNode)) { + var parent = focusNode.parentNode; + focusOffset = goog.array.indexOf(parent.childNodes, focusNode); + focusNode = parent; + } + + // Initialize the range as a W3C style range. + if (range.isReversed_) { + range.startNode_ = focusNode; + range.startOffset_ = focusOffset; + range.endNode_ = anchorNode; + range.endOffset_ = anchorOffset; + } else { + range.startNode_ = anchorNode; + range.startOffset_ = anchorOffset; + range.endNode_ = focusNode; + range.endOffset_ = focusOffset; + } + + return range; +}; + + +// Representation 1: a browser range wrapper. + + +/** + * The browser specific range wrapper. This can be null if one of the other + * representations of the range is specified. + * @type {goog.dom.browserrange.AbstractRange?} + * @private + */ +goog.dom.TextRange.prototype.browserRangeWrapper_ = null; + + +// Representation 2: two endpoints specified as nodes + offsets + + +/** + * The start node of the range. This can be null if one of the other + * representations of the range is specified. + * @type {Node} + * @private + */ +goog.dom.TextRange.prototype.startNode_ = null; + + +/** + * The start offset of the range. This can be null if one of the other + * representations of the range is specified. + * @type {?number} + * @private + */ +goog.dom.TextRange.prototype.startOffset_ = null; + + +/** + * The end node of the range. This can be null if one of the other + * representations of the range is specified. + * @type {Node} + * @private + */ +goog.dom.TextRange.prototype.endNode_ = null; + + +/** + * The end offset of the range. This can be null if one of the other + * representations of the range is specified. + * @type {?number} + * @private + */ +goog.dom.TextRange.prototype.endOffset_ = null; + + +/** + * Whether the focus node is before the anchor node. + * @type {boolean} + * @private + */ +goog.dom.TextRange.prototype.isReversed_ = false; + + +// Method implementations + + +/** + * @return {goog.dom.TextRange} A clone of this range. + * @override + */ +goog.dom.TextRange.prototype.clone = function() { + var range = new goog.dom.TextRange(); + range.browserRangeWrapper_ = this.browserRangeWrapper_; + range.startNode_ = this.startNode_; + range.startOffset_ = this.startOffset_; + range.endNode_ = this.endNode_; + range.endOffset_ = this.endOffset_; + range.isReversed_ = this.isReversed_; + + return range; +}; + + +/** @override */ +goog.dom.TextRange.prototype.getType = function() { + return goog.dom.RangeType.TEXT; +}; + + +/** @override */ +goog.dom.TextRange.prototype.getBrowserRangeObject = function() { + return this.getBrowserRangeWrapper_().getBrowserRange(); +}; + + +/** @override */ +goog.dom.TextRange.prototype.setBrowserRangeObject = function(nativeRange) { + // Test if it's a control range by seeing if a control range only method + // exists. + if (goog.dom.AbstractRange.isNativeControlRange(nativeRange)) { + return false; + } + this.browserRangeWrapper_ = goog.dom.browserrange.createRange( + nativeRange); + this.clearCachedValues_(); + return true; +}; + + +/** + * Clear all cached values. + * @private + */ +goog.dom.TextRange.prototype.clearCachedValues_ = function() { + this.startNode_ = this.startOffset_ = this.endNode_ = this.endOffset_ = null; +}; + + +/** @override */ +goog.dom.TextRange.prototype.getTextRangeCount = function() { + return 1; +}; + + +/** @override */ +goog.dom.TextRange.prototype.getTextRange = function(i) { + return this; +}; + + +/** + * @return {goog.dom.browserrange.AbstractRange} The range wrapper object. + * @private + */ +goog.dom.TextRange.prototype.getBrowserRangeWrapper_ = function() { + return this.browserRangeWrapper_ || + (this.browserRangeWrapper_ = goog.dom.browserrange.createRangeFromNodes( + this.getStartNode(), this.getStartOffset(), + this.getEndNode(), this.getEndOffset())); +}; + + +/** @override */ +goog.dom.TextRange.prototype.getContainer = function() { + return this.getBrowserRangeWrapper_().getContainer(); +}; + + +/** @override */ +goog.dom.TextRange.prototype.getStartNode = function() { + return this.startNode_ || + (this.startNode_ = this.getBrowserRangeWrapper_().getStartNode()); +}; + + +/** @override */ +goog.dom.TextRange.prototype.getStartOffset = function() { + return this.startOffset_ != null ? this.startOffset_ : + (this.startOffset_ = this.getBrowserRangeWrapper_().getStartOffset()); +}; + + +/** @override */ +goog.dom.TextRange.prototype.getStartPosition = function() { + return this.isReversed() ? + this.getBrowserRangeWrapper_().getEndPosition() : + this.getBrowserRangeWrapper_().getStartPosition(); +}; + + +/** @override */ +goog.dom.TextRange.prototype.getEndNode = function() { + return this.endNode_ || + (this.endNode_ = this.getBrowserRangeWrapper_().getEndNode()); +}; + + +/** @override */ +goog.dom.TextRange.prototype.getEndOffset = function() { + return this.endOffset_ != null ? this.endOffset_ : + (this.endOffset_ = this.getBrowserRangeWrapper_().getEndOffset()); +}; + + +/** @override */ +goog.dom.TextRange.prototype.getEndPosition = function() { + return this.isReversed() ? + this.getBrowserRangeWrapper_().getStartPosition() : + this.getBrowserRangeWrapper_().getEndPosition(); +}; + + +/** + * Moves a TextRange to the provided nodes and offsets. + * @param {Node} startNode The node to start with. + * @param {number} startOffset The offset within the node to start. + * @param {Node} endNode The node to end with. + * @param {number} endOffset The offset within the node to end. + * @param {boolean} isReversed Whether the range is reversed. + */ +goog.dom.TextRange.prototype.moveToNodes = function(startNode, startOffset, + endNode, endOffset, + isReversed) { + this.startNode_ = startNode; + this.startOffset_ = startOffset; + this.endNode_ = endNode; + this.endOffset_ = endOffset; + this.isReversed_ = isReversed; + this.browserRangeWrapper_ = null; +}; + + +/** @override */ +goog.dom.TextRange.prototype.isReversed = function() { + return this.isReversed_; +}; + + +/** @override */ +goog.dom.TextRange.prototype.containsRange = function(otherRange, + opt_allowPartial) { + var otherRangeType = otherRange.getType(); + if (otherRangeType == goog.dom.RangeType.TEXT) { + return this.getBrowserRangeWrapper_().containsRange( + otherRange.getBrowserRangeWrapper_(), opt_allowPartial); + } else if (otherRangeType == goog.dom.RangeType.CONTROL) { + var elements = otherRange.getElements(); + var fn = opt_allowPartial ? goog.array.some : goog.array.every; + return fn(elements, function(el) { + return this.containsNode(el, opt_allowPartial); + }, this); + } + return false; +}; + + +/** + * Tests if the given node is in a document. + * @param {Node} node The node to check. + * @return {boolean} Whether the given node is in the given document. + */ +goog.dom.TextRange.isAttachedNode = function(node) { + if (goog.userAgent.IE && !goog.userAgent.isDocumentModeOrHigher(9)) { + var returnValue = false; + /** @preserveTry */ + try { + returnValue = node.parentNode; + } catch (e) { + // IE sometimes throws Invalid Argument errors when a node is detached. + // Note: trying to return a value from the above try block can cause IE + // to crash. It is necessary to use the local returnValue + } + return !!returnValue; + } else { + return goog.dom.contains(node.ownerDocument.body, node); + } +}; + + +/** @override */ +goog.dom.TextRange.prototype.isRangeInDocument = function() { + // Ensure any cached nodes are in the document. IE also allows ranges to + // become detached, so we check if the range is still in the document as + // well for IE. + return (!this.startNode_ || + goog.dom.TextRange.isAttachedNode(this.startNode_)) && + (!this.endNode_ || + goog.dom.TextRange.isAttachedNode(this.endNode_)) && + (!(goog.userAgent.IE && !goog.userAgent.isDocumentModeOrHigher(9)) || + this.getBrowserRangeWrapper_().isRangeInDocument()); +}; + + +/** @override */ +goog.dom.TextRange.prototype.isCollapsed = function() { + return this.getBrowserRangeWrapper_().isCollapsed(); +}; + + +/** @override */ +goog.dom.TextRange.prototype.getText = function() { + return this.getBrowserRangeWrapper_().getText(); +}; + + +/** @override */ +goog.dom.TextRange.prototype.getHtmlFragment = function() { + // TODO(robbyw): Generalize the code in browserrange so it is static and + // just takes an iterator. This would mean we don't always have to create a + // browser range. + return this.getBrowserRangeWrapper_().getHtmlFragment(); +}; + + +/** @override */ +goog.dom.TextRange.prototype.getValidHtml = function() { + return this.getBrowserRangeWrapper_().getValidHtml(); +}; + + +/** @override */ +goog.dom.TextRange.prototype.getPastableHtml = function() { + // TODO(robbyw): Get any attributes the table or tr has. + + var html = this.getValidHtml(); + + if (html.match(/^\s*'; + } else if (html.match(/^\s*'; + } else if (html.match(/^\s*'; + } else if (html.match(/^\s*', html, ''); + } + + return html; +}; + + +/** + * Returns a TextRangeIterator over the contents of the range. Regardless of + * the direction of the range, the iterator will move in document order. + * @param {boolean=} opt_keys Unused for this iterator. + * @return {goog.dom.TextRangeIterator} An iterator over tags in the range. + * @override + */ +goog.dom.TextRange.prototype.__iterator__ = function(opt_keys) { + return new goog.dom.TextRangeIterator(this.getStartNode(), + this.getStartOffset(), this.getEndNode(), this.getEndOffset()); +}; + + +// RANGE ACTIONS + + +/** @override */ +goog.dom.TextRange.prototype.select = function() { + this.getBrowserRangeWrapper_().select(this.isReversed_); +}; + + +/** @override */ +goog.dom.TextRange.prototype.removeContents = function() { + this.getBrowserRangeWrapper_().removeContents(); + this.clearCachedValues_(); +}; + + +/** + * Surrounds the text range with the specified element (on Mozilla) or with a + * clone of the specified element (on IE). Returns a reference to the + * surrounding element if the operation was successful; returns null if the + * operation failed. + * @param {Element} element The element with which the selection is to be + * surrounded. + * @return {Element} The surrounding element (same as the argument on Mozilla, + * but not on IE), or null if unsuccessful. + */ +goog.dom.TextRange.prototype.surroundContents = function(element) { + var output = this.getBrowserRangeWrapper_().surroundContents(element); + this.clearCachedValues_(); + return output; +}; + + +/** @override */ +goog.dom.TextRange.prototype.insertNode = function(node, before) { + var output = this.getBrowserRangeWrapper_().insertNode(node, before); + this.clearCachedValues_(); + return output; +}; + + +/** @override */ +goog.dom.TextRange.prototype.surroundWithNodes = function(startNode, endNode) { + this.getBrowserRangeWrapper_().surroundWithNodes(startNode, endNode); + this.clearCachedValues_(); +}; + + +// SAVE/RESTORE + + +/** @override */ +goog.dom.TextRange.prototype.saveUsingDom = function() { + return new goog.dom.DomSavedTextRange_(this); +}; + + +// RANGE MODIFICATION + + +/** @override */ +goog.dom.TextRange.prototype.collapse = function(toAnchor) { + var toStart = this.isReversed() ? !toAnchor : toAnchor; + + if (this.browserRangeWrapper_) { + this.browserRangeWrapper_.collapse(toStart); + } + + if (toStart) { + this.endNode_ = this.startNode_; + this.endOffset_ = this.startOffset_; + } else { + this.startNode_ = this.endNode_; + this.startOffset_ = this.endOffset_; + } + + // Collapsed ranges can't be reversed + this.isReversed_ = false; +}; + + +// SAVED RANGE OBJECTS + + + +/** + * A SavedRange implementation using DOM endpoints. + * @param {goog.dom.AbstractRange} range The range to save. + * @constructor + * @extends {goog.dom.SavedRange} + * @private + */ +goog.dom.DomSavedTextRange_ = function(range) { + /** + * The anchor node. + * @type {Node} + * @private + */ + this.anchorNode_ = range.getAnchorNode(); + + /** + * The anchor node offset. + * @type {number} + * @private + */ + this.anchorOffset_ = range.getAnchorOffset(); + + /** + * The focus node. + * @type {Node} + * @private + */ + this.focusNode_ = range.getFocusNode(); + + /** + * The focus node offset. + * @type {number} + * @private + */ + this.focusOffset_ = range.getFocusOffset(); +}; +goog.inherits(goog.dom.DomSavedTextRange_, goog.dom.SavedRange); + + +/** + * @return {goog.dom.AbstractRange} The restored range. + * @override + */ +goog.dom.DomSavedTextRange_.prototype.restoreInternal = function() { + return goog.dom.Range.createFromNodes(this.anchorNode_, this.anchorOffset_, + this.focusNode_, this.focusOffset_); +}; + + +/** @override */ +goog.dom.DomSavedTextRange_.prototype.disposeInternal = function() { + goog.dom.DomSavedTextRange_.superClass_.disposeInternal.call(this); + + this.anchorNode_ = null; + this.focusNode_ = null; +}; diff --git a/float-no-zero/closure-library/closure/goog/dom/textrangeiterator.js b/float-no-zero/closure-library/closure/goog/dom/textrangeiterator.js new file mode 100644 index 0000000000..b8d49b8565 --- /dev/null +++ b/float-no-zero/closure-library/closure/goog/dom/textrangeiterator.js @@ -0,0 +1,244 @@ +// Copyright 2007 The Closure Library Authors. All Rights Reserved. +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS-IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +/** + * @fileoverview Iterator between two DOM text range positions. + * + * @author robbyw@google.com (Robby Walker) + */ + +goog.provide('goog.dom.TextRangeIterator'); + +goog.require('goog.array'); +goog.require('goog.dom.NodeType'); +goog.require('goog.dom.RangeIterator'); +goog.require('goog.dom.TagName'); +goog.require('goog.iter.StopIteration'); + + + +/** + * Subclass of goog.dom.TagIterator that iterates over a DOM range. It + * adds functions to determine the portion of each text node that is selected. + * + * @param {Node} startNode The starting node position. + * @param {number} startOffset The offset in to startNode. If startNode is + * an element, indicates an offset in to childNodes. If startNode is a + * text node, indicates an offset in to nodeValue. + * @param {Node} endNode The ending node position. + * @param {number} endOffset The offset in to endNode. If endNode is + * an element, indicates an offset in to childNodes. If endNode is a + * text node, indicates an offset in to nodeValue. + * @param {boolean=} opt_reverse Whether to traverse nodes in reverse. + * @constructor + * @extends {goog.dom.RangeIterator} + */ +goog.dom.TextRangeIterator = function(startNode, startOffset, endNode, + endOffset, opt_reverse) { + var goNext; + + if (startNode) { + this.startNode_ = startNode; + this.startOffset_ = startOffset; + this.endNode_ = endNode; + this.endOffset_ = endOffset; + + // Skip to the offset nodes - being careful to special case BRs since these + // have no children but still can appear as the startContainer of a range. + if (startNode.nodeType == goog.dom.NodeType.ELEMENT && + startNode.tagName != goog.dom.TagName.BR) { + var startChildren = startNode.childNodes; + var candidate = startChildren[startOffset]; + if (candidate) { + this.startNode_ = candidate; + this.startOffset_ = 0; + } else { + if (startChildren.length) { + this.startNode_ = + /** @type {Node} */ (goog.array.peek(startChildren)); + } + goNext = true; + } + } + + if (endNode.nodeType == goog.dom.NodeType.ELEMENT) { + this.endNode_ = endNode.childNodes[endOffset]; + if (this.endNode_) { + this.endOffset_ = 0; + } else { + // The offset was past the last element. + this.endNode_ = endNode; + } + } + } + + goog.dom.RangeIterator.call(this, opt_reverse ? this.endNode_ : + this.startNode_, opt_reverse); + + if (goNext) { + try { + this.next(); + } catch (e) { + if (e != goog.iter.StopIteration) { + throw e; + } + } + } +}; +goog.inherits(goog.dom.TextRangeIterator, goog.dom.RangeIterator); + + +/** + * The first node in the selection. + * @type {Node} + * @private + */ +goog.dom.TextRangeIterator.prototype.startNode_ = null; + + +/** + * The last node in the selection. + * @type {Node} + * @private + */ +goog.dom.TextRangeIterator.prototype.endNode_ = null; + + +/** + * The offset within the first node in the selection. + * @type {number} + * @private + */ +goog.dom.TextRangeIterator.prototype.startOffset_ = 0; + + +/** + * The offset within the last node in the selection. + * @type {number} + * @private + */ +goog.dom.TextRangeIterator.prototype.endOffset_ = 0; + + +/** @override */ +goog.dom.TextRangeIterator.prototype.getStartTextOffset = function() { + // Offsets only apply to text nodes. If our current node is the start node, + // return the saved offset. Otherwise, return 0. + return this.node.nodeType != goog.dom.NodeType.TEXT ? -1 : + this.node == this.startNode_ ? this.startOffset_ : 0; +}; + + +/** @override */ +goog.dom.TextRangeIterator.prototype.getEndTextOffset = function() { + // Offsets only apply to text nodes. If our current node is the end node, + // return the saved offset. Otherwise, return the length of the node. + return this.node.nodeType != goog.dom.NodeType.TEXT ? -1 : + this.node == this.endNode_ ? this.endOffset_ : this.node.nodeValue.length; +}; + + +/** @override */ +goog.dom.TextRangeIterator.prototype.getStartNode = function() { + return this.startNode_; +}; + + +/** + * Change the start node of the iterator. + * @param {Node} node The new start node. + */ +goog.dom.TextRangeIterator.prototype.setStartNode = function(node) { + if (!this.isStarted()) { + this.setPosition(node); + } + + this.startNode_ = node; + this.startOffset_ = 0; +}; + + +/** @override */ +goog.dom.TextRangeIterator.prototype.getEndNode = function() { + return this.endNode_; +}; + + +/** + * Change the end node of the iterator. + * @param {Node} node The new end node. + */ +goog.dom.TextRangeIterator.prototype.setEndNode = function(node) { + this.endNode_ = node; + this.endOffset_ = 0; +}; + + +/** @override */ +goog.dom.TextRangeIterator.prototype.isLast = function() { + return this.isStarted() && this.node == this.endNode_ && + (!this.endOffset_ || !this.isStartTag()); +}; + + +/** + * Move to the next position in the selection. + * Throws {@code goog.iter.StopIteration} when it passes the end of the range. + * @return {Node} The node at the next position. + * @override + */ +goog.dom.TextRangeIterator.prototype.next = function() { + if (this.isLast()) { + throw goog.iter.StopIteration; + } + + // Call the super function. + return goog.dom.TextRangeIterator.superClass_.next.call(this); +}; + + +/** @override */ +goog.dom.TextRangeIterator.prototype.skipTag = function() { + goog.dom.TextRangeIterator.superClass_.skipTag.apply(this); + + // If the node we are skipping contains the end node, we just skipped past + // the end, so we stop the iteration. + if (goog.dom.contains(this.node, this.endNode_)) { + throw goog.iter.StopIteration; + } +}; + + +/** @override */ +goog.dom.TextRangeIterator.prototype.copyFrom = function(other) { + this.startNode_ = other.startNode_; + this.endNode_ = other.endNode_; + this.startOffset_ = other.startOffset_; + this.endOffset_ = other.endOffset_; + this.isReversed_ = other.isReversed_; + + goog.dom.TextRangeIterator.superClass_.copyFrom.call(this, other); +}; + + +/** + * @return {goog.dom.TextRangeIterator} An identical iterator. + * @override + */ +goog.dom.TextRangeIterator.prototype.clone = function() { + var copy = new goog.dom.TextRangeIterator(this.startNode_, + this.startOffset_, this.endNode_, this.endOffset_, this.isReversed_); + copy.copyFrom(this); + return copy; +}; diff --git a/float-no-zero/closure-library/closure/goog/dom/vendor.js b/float-no-zero/closure-library/closure/goog/dom/vendor.js new file mode 100644 index 0000000000..8787f66615 --- /dev/null +++ b/float-no-zero/closure-library/closure/goog/dom/vendor.js @@ -0,0 +1,62 @@ +// Copyright 2012 The Closure Library Authors. All Rights Reserved. +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS-IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +/** + * @fileoverview Vendor prefix getters. + */ + +goog.provide('goog.dom.vendor'); + +goog.require('goog.userAgent'); + + +/** + * Returns the JS vendor prefix used in CSS properties. Different vendors + * use different methods of changing the case of the property names. + * + * @return {?string} The JS vendor prefix or null if there is none. + */ +goog.dom.vendor.getVendorJsPrefix = function() { + if (goog.userAgent.WEBKIT) { + return 'Webkit'; + } else if (goog.userAgent.GECKO) { + return 'Moz'; + } else if (goog.userAgent.IE) { + return 'ms'; + } else if (goog.userAgent.OPERA) { + return 'O'; + } + + return null; +}; + + +/** + * Returns the vendor prefix used in CSS properties. + * + * @return {?string} The vendor prefix or null if there is none. + */ +goog.dom.vendor.getVendorPrefix = function() { + if (goog.userAgent.WEBKIT) { + return '-webkit'; + } else if (goog.userAgent.GECKO) { + return '-moz'; + } else if (goog.userAgent.IE) { + return '-ms'; + } else if (goog.userAgent.OPERA) { + return '-o'; + } + + return null; +}; diff --git a/float-no-zero/closure-library/closure/goog/dom/viewportsizemonitor.js b/float-no-zero/closure-library/closure/goog/dom/viewportsizemonitor.js new file mode 100644 index 0000000000..692687000c --- /dev/null +++ b/float-no-zero/closure-library/closure/goog/dom/viewportsizemonitor.js @@ -0,0 +1,180 @@ +// Copyright 2007 The Closure Library Authors. All Rights Reserved. +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS-IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +/** + * @fileoverview Utility class that monitors viewport size changes. + * + * @author attila@google.com (Attila Bodis) + * @see ../demos/viewportsizemonitor.html + */ + +goog.provide('goog.dom.ViewportSizeMonitor'); + +goog.require('goog.dom'); +goog.require('goog.events'); +goog.require('goog.events.EventTarget'); +goog.require('goog.events.EventType'); +goog.require('goog.math.Size'); + + + +/** + * This class can be used to monitor changes in the viewport size. Instances + * dispatch a {@link goog.events.EventType.RESIZE} event when the viewport size + * changes. Handlers can call {@link goog.dom.ViewportSizeMonitor#getSize} to + * get the new viewport size. + * + * Use this class if you want to execute resize/reflow logic each time the + * user resizes the browser window. This class is guaranteed to only dispatch + * {@code RESIZE} events when the pixel dimensions of the viewport change. + * (Internet Explorer fires resize events if any element on the page is resized, + * even if the viewport dimensions are unchanged, which can lead to infinite + * resize loops.) + * + * Example usage: + *
+ *    var vsm = new goog.dom.ViewportSizeMonitor();
+ *    goog.events.listen(vsm, goog.events.EventType.RESIZE, function(e) {
+ *      alert('Viewport size changed to ' + vsm.getSize());
+ *    });
+ *  
+ * + * Manually verified on IE6, IE7, FF2, Opera 11, Safari 4 and Chrome. + * + * @param {Window=} opt_window The window to monitor; defaults to the window in + * which this code is executing. + * @constructor + * @extends {goog.events.EventTarget} + */ +goog.dom.ViewportSizeMonitor = function(opt_window) { + goog.events.EventTarget.call(this); + + // Default the window to the current window if unspecified. + this.window_ = opt_window || window; + + // Listen for window resize events. + this.listenerKey_ = goog.events.listen(this.window_, + goog.events.EventType.RESIZE, this.handleResize_, false, this); + + // Set the initial size. + this.size_ = goog.dom.getViewportSize(this.window_); +}; +goog.inherits(goog.dom.ViewportSizeMonitor, goog.events.EventTarget); + + +/** + * Returns a viewport size monitor for the given window. A new one is created + * if it doesn't exist already. This prevents the unnecessary creation of + * multiple spooling monitors for a window. + * @param {Window=} opt_window The window to monitor; defaults to the window in + * which this code is executing. + * @return {goog.dom.ViewportSizeMonitor} Monitor for the given window. + */ +goog.dom.ViewportSizeMonitor.getInstanceForWindow = function(opt_window) { + var currentWindow = opt_window || window; + var uid = goog.getUid(currentWindow); + + return goog.dom.ViewportSizeMonitor.windowInstanceMap_[uid] = + goog.dom.ViewportSizeMonitor.windowInstanceMap_[uid] || + new goog.dom.ViewportSizeMonitor(currentWindow); +}; + + +/** + * Removes and disposes a viewport size monitor for the given window if one + * exists. + * @param {Window=} opt_window The window whose monitor should be removed; + * defaults to the window in which this code is executing. + */ +goog.dom.ViewportSizeMonitor.removeInstanceForWindow = function(opt_window) { + var uid = goog.getUid(opt_window || window); + + goog.dispose(goog.dom.ViewportSizeMonitor.windowInstanceMap_[uid]); + delete goog.dom.ViewportSizeMonitor.windowInstanceMap_[uid]; +}; + + +/** + * Map of window hash code to viewport size monitor for that window, if + * created. + * @type {Object.} + * @private + */ +goog.dom.ViewportSizeMonitor.windowInstanceMap_ = {}; + + +/** + * Event listener key for window the window resize handler, as returned by + * {@link goog.events.listen}. + * @type {goog.events.Key} + * @private + */ +goog.dom.ViewportSizeMonitor.prototype.listenerKey_ = null; + + +/** + * The window to monitor. Defaults to the window in which the code is running. + * @type {Window} + * @private + */ +goog.dom.ViewportSizeMonitor.prototype.window_ = null; + + +/** + * The most recently recorded size of the viewport, in pixels. + * @type {goog.math.Size?} + * @private + */ +goog.dom.ViewportSizeMonitor.prototype.size_ = null; + + +/** + * Returns the most recently recorded size of the viewport, in pixels. May + * return null if no window resize event has been handled yet. + * @return {goog.math.Size} The viewport dimensions, in pixels. + */ +goog.dom.ViewportSizeMonitor.prototype.getSize = function() { + // Return a clone instead of the original to preserve encapsulation. + return this.size_ ? this.size_.clone() : null; +}; + + +/** @override */ +goog.dom.ViewportSizeMonitor.prototype.disposeInternal = function() { + goog.dom.ViewportSizeMonitor.superClass_.disposeInternal.call(this); + + if (this.listenerKey_) { + goog.events.unlistenByKey(this.listenerKey_); + this.listenerKey_ = null; + } + + this.window_ = null; + this.size_ = null; +}; + + +/** + * Handles window resize events by measuring the dimensions of the + * viewport and dispatching a {@link goog.events.EventType.RESIZE} event if the + * current dimensions are different from the previous ones. + * @param {goog.events.Event} event The window resize event to handle. + * @private + */ +goog.dom.ViewportSizeMonitor.prototype.handleResize_ = function(event) { + var size = goog.dom.getViewportSize(this.window_); + if (!goog.math.Size.equals(size, this.size_)) { + this.size_ = size; + this.dispatchEvent(goog.events.EventType.RESIZE); + } +}; diff --git a/float-no-zero/closure-library/closure/goog/dom/xml.js b/float-no-zero/closure-library/closure/goog/dom/xml.js new file mode 100644 index 0000000000..a5ab4f8db2 --- /dev/null +++ b/float-no-zero/closure-library/closure/goog/dom/xml.js @@ -0,0 +1,204 @@ +// Copyright 2006 The Closure Library Authors. All Rights Reserved. +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS-IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +/** + * @fileoverview + * XML utilities. + * + */ + +goog.provide('goog.dom.xml'); + +goog.require('goog.dom'); +goog.require('goog.dom.NodeType'); + + +/** + * Max XML size for MSXML2. Used to prevent potential DoS attacks. + * @type {number} + */ +goog.dom.xml.MAX_XML_SIZE_KB = 2 * 1024; // In kB + + +/** + * Max XML size for MSXML2. Used to prevent potential DoS attacks. + * @type {number} + */ +goog.dom.xml.MAX_ELEMENT_DEPTH = 256; // Same default as MSXML6. + + +/** + * Creates an XML document appropriate for the current JS runtime + * @param {string=} opt_rootTagName The root tag name. + * @param {string=} opt_namespaceUri Namespace URI of the document element. + * @return {Document} The new document. + */ +goog.dom.xml.createDocument = function(opt_rootTagName, opt_namespaceUri) { + if (opt_namespaceUri && !opt_rootTagName) { + throw Error("Can't create document with namespace and no root tag"); + } + if (document.implementation && document.implementation.createDocument) { + return document.implementation.createDocument(opt_namespaceUri || '', + opt_rootTagName || '', + null); + } else if (typeof ActiveXObject != 'undefined') { + var doc = goog.dom.xml.createMsXmlDocument_(); + if (doc) { + if (opt_rootTagName) { + doc.appendChild(doc.createNode(goog.dom.NodeType.ELEMENT, + opt_rootTagName, + opt_namespaceUri || '')); + } + return doc; + } + } + throw Error('Your browser does not support creating new documents'); +}; + + +/** + * Creates an XML document from a string + * @param {string} xml The text. + * @return {Document} XML document from the text. + */ +goog.dom.xml.loadXml = function(xml) { + if (typeof DOMParser != 'undefined') { + return new DOMParser().parseFromString(xml, 'application/xml'); + } else if (typeof ActiveXObject != 'undefined') { + var doc = goog.dom.xml.createMsXmlDocument_(); + doc.loadXML(xml); + return doc; + } + throw Error('Your browser does not support loading xml documents'); +}; + + +/** + * Serializes an XML document or subtree to string. + * @param {Document|Element} xml The document or the root node of the subtree. + * @return {string} The serialized XML. + */ +goog.dom.xml.serialize = function(xml) { + // Compatible with Firefox, Opera and WebKit. + if (typeof XMLSerializer != 'undefined') { + return new XMLSerializer().serializeToString(xml); + } + // Compatible with Internet Explorer. + var text = xml.xml; + if (text) { + return text; + } + throw Error('Your browser does not support serializing XML documents'); +}; + + +/** + * Selects a single node using an Xpath expression and a root node + * @param {Node} node The root node. + * @param {string} path Xpath selector. + * @return {Node} The selected node, or null if no matching node. + */ +goog.dom.xml.selectSingleNode = function(node, path) { + if (typeof node.selectSingleNode != 'undefined') { + var doc = goog.dom.getOwnerDocument(node); + if (typeof doc.setProperty != 'undefined') { + doc.setProperty('SelectionLanguage', 'XPath'); + } + return node.selectSingleNode(path); + } else if (document.implementation.hasFeature('XPath', '3.0')) { + var doc = goog.dom.getOwnerDocument(node); + var resolver = doc.createNSResolver(doc.documentElement); + var result = doc.evaluate(path, node, resolver, + XPathResult.FIRST_ORDERED_NODE_TYPE, null); + return result.singleNodeValue; + } + return null; +}; + + +/** + * Selects multiple nodes using an Xpath expression and a root node + * @param {Node} node The root node. + * @param {string} path Xpath selector. + * @return {(NodeList,Array.)} The selected nodes, or empty array if no + * matching nodes. + */ +goog.dom.xml.selectNodes = function(node, path) { + if (typeof node.selectNodes != 'undefined') { + var doc = goog.dom.getOwnerDocument(node); + if (typeof doc.setProperty != 'undefined') { + doc.setProperty('SelectionLanguage', 'XPath'); + } + return node.selectNodes(path); + } else if (document.implementation.hasFeature('XPath', '3.0')) { + var doc = goog.dom.getOwnerDocument(node); + var resolver = doc.createNSResolver(doc.documentElement); + var nodes = doc.evaluate(path, node, resolver, + XPathResult.ORDERED_NODE_SNAPSHOT_TYPE, null); + var results = []; + var count = nodes.snapshotLength; + for (var i = 0; i < count; i++) { + results.push(nodes.snapshotItem(i)); + } + return results; + } else { + return []; + } +}; + + +/** + * Sets multiple attributes on an element. Differs from goog.dom.setProperties + * in that it exclusively uses the element's setAttributes method. Use this + * when you need to ensure that the exact property is available as an attribute + * and can be read later by the native getAttribute method. + * @param {!Element} element XML or DOM element to set attributes on. + * @param {!Object.} attributes Map of property:value pairs. + */ +goog.dom.xml.setAttributes = function(element, attributes) { + for (var key in attributes) { + if (attributes.hasOwnProperty(key)) { + element.setAttribute(key, attributes[key]); + } + } +}; + + +/** + * Creates an instance of the MSXML2.DOMDocument. + * @return {Document} The new document. + * @private + */ +goog.dom.xml.createMsXmlDocument_ = function() { + var doc = new ActiveXObject('MSXML2.DOMDocument'); + if (doc) { + // Prevent potential vulnerabilities exposed by MSXML2, see + // http://b/1707300 and http://wiki/Main/ISETeamXMLAttacks for details. + doc.resolveExternals = false; + doc.validateOnParse = false; + // Add a try catch block because accessing these properties will throw an + // error on unsupported MSXML versions. This affects Windows machines + // running IE6 or IE7 that are on XP SP2 or earlier without MSXML updates. + // See http://msdn.microsoft.com/en-us/library/ms766391(VS.85).aspx for + // specific details on which MSXML versions support these properties. + try { + doc.setProperty('ProhibitDTD', true); + doc.setProperty('MaxXMLSize', goog.dom.xml.MAX_XML_SIZE_KB); + doc.setProperty('MaxElementDepth', goog.dom.xml.MAX_ELEMENT_DEPTH); + } catch (e) { + // No-op. + } + } + return doc; +}; diff --git a/float-no-zero/closure-library/closure/goog/editor/browserfeature.js b/float-no-zero/closure-library/closure/goog/editor/browserfeature.js new file mode 100644 index 0000000000..4f50e46d38 --- /dev/null +++ b/float-no-zero/closure-library/closure/goog/editor/browserfeature.js @@ -0,0 +1,273 @@ +// Copyright 2005 The Closure Library Authors. All Rights Reserved. +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS-IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +/** + * @fileoverview Trogedit constants for browser features and quirks that should + * be used by the rich text editor. + */ + +goog.provide('goog.editor.BrowserFeature'); + +goog.require('goog.editor.defines'); +goog.require('goog.userAgent'); +goog.require('goog.userAgent.product'); +goog.require('goog.userAgent.product.isVersion'); + + +/** + * Maps browser quirks to boolean values, detailing what the current + * browser supports. + * @type {Object} + */ +goog.editor.BrowserFeature = { + // Whether this browser uses the IE TextRange object. + HAS_IE_RANGES: goog.userAgent.IE && !goog.userAgent.isDocumentModeOrHigher(9), + + // Whether this browser uses the W3C standard Range object. + // Assumes IE higher versions will be compliance with W3C standard. + HAS_W3C_RANGES: goog.userAgent.GECKO || goog.userAgent.WEBKIT || + goog.userAgent.OPERA || + (goog.userAgent.IE && goog.userAgent.isDocumentModeOrHigher(9)), + + // Has the contentEditable attribute, which makes nodes editable. + // + // NOTE(nicksantos): FF3 has contentEditable, but there are 3 major reasons + // why we don't use it: + // 1) In FF3, we listen for key events on the document, and we'd have to + // filter them properly. See TR_Browser.USE_DOCUMENT_FOR_KEY_EVENTS. + // 2) In FF3, we listen for focus/blur events on the document, which + // simply doesn't make sense in contentEditable. focus/blur + // on contentEditable elements still has some quirks, which we're + // talking to Firefox-team about. + // 3) We currently use Mutation events in FF3 to detect changes, + // and these are dispatched on the document only. + // If we ever hope to support FF3/contentEditable, all 3 of these issues + // will need answers. Most just involve refactoring at our end. + HAS_CONTENT_EDITABLE: goog.userAgent.IE || goog.userAgent.WEBKIT || + goog.userAgent.OPERA || + (goog.editor.defines.USE_CONTENTEDITABLE_IN_FIREFOX_3 && + goog.userAgent.GECKO && goog.userAgent.isVersionOrHigher('1.9')), + + // Whether to use mutation event types to detect changes + // in the field contents. + USE_MUTATION_EVENTS: goog.userAgent.GECKO, + + // Whether the browser has a functional DOMSubtreeModified event. + // TODO(user): Enable for all FF3 once we're confident this event fires + // reliably. Currently it's only enabled if using contentEditable in FF as + // we have no other choice in that case but to use this event. + HAS_DOM_SUBTREE_MODIFIED_EVENT: goog.userAgent.WEBKIT || + (goog.editor.defines.USE_CONTENTEDITABLE_IN_FIREFOX_3 && + goog.userAgent.GECKO && goog.userAgent.isVersionOrHigher('1.9')), + + // Whether nodes can be copied from one document to another + HAS_DOCUMENT_INDEPENDENT_NODES: goog.userAgent.GECKO, + + // Whether the cursor goes before or inside the first block element on + // focus, e.g.,

foo

. FF will put the cursor before the + // paragraph on focus, which is wrong. + PUTS_CURSOR_BEFORE_FIRST_BLOCK_ELEMENT_ON_FOCUS: goog.userAgent.GECKO, + + // Whether the selection of one frame is cleared when another frame + // is focused. + CLEARS_SELECTION_WHEN_FOCUS_LEAVES: + goog.userAgent.IE || goog.userAgent.WEBKIT || goog.userAgent.OPERA, + + // Whether "unselectable" is supported as an element style. + HAS_UNSELECTABLE_STYLE: goog.userAgent.GECKO || goog.userAgent.WEBKIT, + + // Whether this browser's "FormatBlock" command does not suck. + FORMAT_BLOCK_WORKS_FOR_BLOCKQUOTES: goog.userAgent.GECKO || + goog.userAgent.WEBKIT || goog.userAgent.OPERA, + + // Whether this browser's "FormatBlock" command may create multiple + // blockquotes. + CREATES_MULTIPLE_BLOCKQUOTES: + (goog.userAgent.WEBKIT && + !goog.userAgent.isVersionOrHigher('534.16')) || + goog.userAgent.OPERA, + + // Whether this browser's "FormatBlock" command will wrap blockquotes + // inside of divs, instead of replacing divs with blockquotes. + WRAPS_BLOCKQUOTE_IN_DIVS: goog.userAgent.OPERA, + + // Whether the readystatechange event is more reliable than load. + PREFERS_READY_STATE_CHANGE_EVENT: goog.userAgent.IE, + + // Whether hitting the tab key will fire a keypress event. + // see http://www.quirksmode.org/js/keys.html + TAB_FIRES_KEYPRESS: !goog.userAgent.IE, + + // Has a standards mode quirk where width=100% doesn't do the right thing, + // but width=99% does. + // TODO(user|user): This should be fixable by less hacky means + NEEDS_99_WIDTH_IN_STANDARDS_MODE: goog.userAgent.IE, + + // Whether keyboard events only reliably fire on the document. + // On Gecko without contentEditable, keyboard events only fire reliably on the + // document element. With contentEditable, the field itself is focusable, + // which means that it will fire key events. This does not apply if + // application is using ContentEditableField or otherwise overriding Field + // not to use an iframe. + USE_DOCUMENT_FOR_KEY_EVENTS: goog.userAgent.GECKO && + !goog.editor.defines.USE_CONTENTEDITABLE_IN_FIREFOX_3, + + // Whether this browser shows non-standard attributes in innerHTML. + SHOWS_CUSTOM_ATTRS_IN_INNER_HTML: goog.userAgent.IE, + + // Whether this browser shrinks empty nodes away to nothing. + // (If so, we need to insert some space characters into nodes that + // shouldn't be collapsed) + COLLAPSES_EMPTY_NODES: + goog.userAgent.GECKO || goog.userAgent.WEBKIT || goog.userAgent.OPERA, + + // Whether we must convert and tags to , . + CONVERT_TO_B_AND_I_TAGS: goog.userAgent.GECKO || goog.userAgent.OPERA, + + // Whether this browser likes to tab through images in contentEditable mode, + // and we like to disable this feature. + TABS_THROUGH_IMAGES: goog.userAgent.IE, + + // Whether this browser unescapes urls when you extract it from the href tag. + UNESCAPES_URLS_WITHOUT_ASKING: goog.userAgent.IE && + !goog.userAgent.isVersionOrHigher('7.0'), + + // Whether this browser supports execCommand("styleWithCSS") to toggle between + // inserting html tags or inline styling for things like bold, italic, etc. + HAS_STYLE_WITH_CSS: + goog.userAgent.GECKO && goog.userAgent.isVersionOrHigher('1.8') || + goog.userAgent.WEBKIT || goog.userAgent.OPERA, + + // Whether clicking on an editable link will take you to that site. + FOLLOWS_EDITABLE_LINKS: goog.userAgent.WEBKIT || + goog.userAgent.IE && goog.userAgent.isVersionOrHigher('9'), + + // Whether this browser has document.activeElement available. + HAS_ACTIVE_ELEMENT: + goog.userAgent.IE || goog.userAgent.OPERA || + goog.userAgent.GECKO && goog.userAgent.isVersionOrHigher('1.9'), + + // Whether this browser supports the setCapture method on DOM elements. + HAS_SET_CAPTURE: goog.userAgent.IE, + + // Whether this browser can't set background color when the selection + // is collapsed. + EATS_EMPTY_BACKGROUND_COLOR: goog.userAgent.GECKO || + goog.userAgent.WEBKIT && !goog.userAgent.isVersionOrHigher('527'), + + // Whether this browser supports the "focusin" or "DOMFocusIn" event + // consistently. + // NOTE(nicksantos): FF supports DOMFocusIn, but doesn't seem to do so + // consistently. + SUPPORTS_FOCUSIN: goog.userAgent.IE || goog.userAgent.OPERA, + + // Whether clicking on an image will cause the selection to move to the image. + // Note: Gecko moves the selection, but it won't always go to the image. + // For example, if the image is wrapped in a div, and you click on the img, + // anchorNode = focusNode = div, anchorOffset = 0, focusOffset = 1, so this + // is another way of "selecting" the image, but there are too many special + // cases like this so we will do the work manually. + SELECTS_IMAGES_ON_CLICK: goog.userAgent.IE || goog.userAgent.OPERA, + + // Whether this browser moves '); + + // + // Hidefocus is needed to ensure that IE7 doesn't show the dotted, focus + // border when you tab into the field. + html.push('', bodyHtml, ''); + + return html.join(''); +}; + + +/** + * Write the initial iframe content in normal mode. + * @param {goog.editor.icontent.FieldFormatInfo} info Formatting info about + * the field. + * @param {string} bodyHtml The HTML to insert as the iframe body. + * @param {goog.editor.icontent.FieldStyleInfo?} style Style info about + * the field, if needed. + * @param {HTMLIFrameElement} iframe The iframe. + */ +goog.editor.icontent.writeNormalInitialBlendedIframe = + function(info, bodyHtml, style, iframe) { + // Firefox blended needs to inherit all the css from the original page. + // Firefox standards mode needs to set extra style for images. + if (info.blended_) { + var field = style.wrapper_; + // If there is padding on the original field, then the iFrame will be + // positioned inside the padding by default. We don't want this, as it + // causes the contents to appear to shift, and also causes the + // scrollbars to appear inside the padding. + // + // To compensate, we set the iframe margins to offset the padding. + var paddingBox = goog.style.getPaddingBox(field); + if (paddingBox.top || paddingBox.left || + paddingBox.right || paddingBox.bottom) { + goog.style.setStyle(iframe, 'margin', + (-paddingBox.top) + 'px ' + + (-paddingBox.right) + 'px ' + + (-paddingBox.bottom) + 'px ' + + (-paddingBox.left) + 'px'); + } + } + + goog.editor.icontent.writeNormalInitialIframe( + info, bodyHtml, style, iframe); +}; + + +/** + * Write the initial iframe content in normal mode. + * @param {goog.editor.icontent.FieldFormatInfo} info Formatting info about + * the field. + * @param {string} bodyHtml The HTML to insert as the iframe body. + * @param {goog.editor.icontent.FieldStyleInfo?} style Style info about + * the field, if needed. + * @param {HTMLIFrameElement} iframe The iframe. + */ +goog.editor.icontent.writeNormalInitialIframe = + function(info, bodyHtml, style, iframe) { + + var html = goog.editor.icontent.getInitialIframeContent_( + info, bodyHtml, style); + + var doc = goog.dom.getFrameContentDocument(iframe); + doc.open(); + doc.write(html); + doc.close(); +}; + + +/** + * Write the initial iframe content in IE/HTTPS mode. + * @param {goog.editor.icontent.FieldFormatInfo} info Formatting info about + * the field. + * @param {Document} doc The iframe document. + * @param {string} bodyHtml The HTML to insert as the iframe body. + */ +goog.editor.icontent.writeHttpsInitialIframe = function(info, doc, bodyHtml) { + var body = doc.body; + + // For HTTPS we already have a document with a doc type and a body element + // and don't want to create a new history entry which can cause data loss if + // the user clicks the back button. + if (goog.editor.BrowserFeature.HAS_CONTENT_EDITABLE) { + body.contentEditable = true; + } + body.className = 'editable'; + body.setAttribute('g_editable', true); + body.hideFocus = true; + body.id = info.fieldId_; + + goog.style.setStyle(body, info.extraStyles_); + body.innerHTML = bodyHtml; +}; + diff --git a/float-no-zero/closure-library/closure/goog/editor/link.js b/float-no-zero/closure-library/closure/goog/editor/link.js new file mode 100644 index 0000000000..8e70dfe8a4 --- /dev/null +++ b/float-no-zero/closure-library/closure/goog/editor/link.js @@ -0,0 +1,359 @@ +// Copyright 2007 The Closure Library Authors. All Rights Reserved. +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS-IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +/** + * @fileoverview A utility class for managing editable links. + * + * @author nicksantos@google.com (Nick Santos) + */ + +goog.provide('goog.editor.Link'); + +goog.require('goog.array'); +goog.require('goog.dom'); +goog.require('goog.dom.NodeType'); +goog.require('goog.dom.Range'); +goog.require('goog.editor.BrowserFeature'); +goog.require('goog.editor.Command'); +goog.require('goog.editor.node'); +goog.require('goog.editor.range'); +goog.require('goog.string'); +goog.require('goog.string.Unicode'); +goog.require('goog.uri.utils'); +goog.require('goog.uri.utils.ComponentIndex'); + + + +/** + * Wrap an editable link. + * @param {HTMLAnchorElement} anchor The anchor element. + * @param {boolean} isNew Whether this is a new link. + * @constructor + */ +goog.editor.Link = function(anchor, isNew) { + /** + * The link DOM element. + * @type {HTMLAnchorElement} + * @private + */ + this.anchor_ = anchor; + + /** + * Whether this link represents a link just added to the document. + * @type {boolean} + * @private + */ + this.isNew_ = isNew; + + + /** + * Any extra anchors created by the browser from a selection in the same + * operation that created the primary link + * @type {!Array.} + * @private + */ + this.extraAnchors_ = []; +}; + + +/** + * @return {HTMLAnchorElement} The anchor element. + */ +goog.editor.Link.prototype.getAnchor = function() { + return this.anchor_; +}; + + +/** + * @return {!Array.} The extra anchor elements, if any, + * created by the browser from a selection. + */ +goog.editor.Link.prototype.getExtraAnchors = function() { + return this.extraAnchors_; +}; + + +/** + * @return {string} The inner text for the anchor. + */ +goog.editor.Link.prototype.getCurrentText = function() { + if (!this.currentText_) { + this.currentText_ = goog.dom.getRawTextContent(this.getAnchor()); + } + return this.currentText_; +}; + + +/** + * @return {boolean} Whether the link is new. + */ +goog.editor.Link.prototype.isNew = function() { + return this.isNew_; +}; + + +/** + * Set the url without affecting the isNew() status of the link. + * @param {string} url A URL. + */ +goog.editor.Link.prototype.initializeUrl = function(url) { + this.getAnchor().href = url; +}; + + +/** + * Removes the link, leaving its contents in the document. Note that this + * object will no longer be usable/useful after this call. + */ +goog.editor.Link.prototype.removeLink = function() { + goog.dom.flattenElement(this.anchor_); + this.anchor_ = null; + while (this.extraAnchors_.length) { + goog.dom.flattenElement(/** @type {Element} */(this.extraAnchors_.pop())); + } +}; + + +/** + * Change the link. + * @param {string} newText New text for the link. If the link contains all its + * text in one descendent, newText will only replace the text in that + * one node. Otherwise, we'll change the innerHTML of the whole + * link to newText. + * @param {string} newUrl A new URL. + */ +goog.editor.Link.prototype.setTextAndUrl = function(newText, newUrl) { + var anchor = this.getAnchor(); + anchor.href = newUrl; + + // If the text did not change, don't update link text. + var currentText = this.getCurrentText(); + if (newText != currentText) { + var leaf = goog.editor.node.getLeftMostLeaf(anchor); + if (leaf.nodeType == goog.dom.NodeType.TEXT) { + leaf = leaf.parentNode; + } + + if (goog.dom.getRawTextContent(leaf) != currentText) { + leaf = anchor; + } + + goog.dom.removeChildren(leaf); + + var domHelper = goog.dom.getDomHelper(leaf); + goog.dom.appendChild(leaf, domHelper.createTextNode(newText)); + + // The text changed, so force getCurrentText to recompute. + this.currentText_ = null; + } + + this.isNew_ = false; +}; + + +/** + * Places the cursor to the right of the anchor. + * Note that this is different from goog.editor.range's placeCursorNextTo + * in that it specifically handles the placement of a cursor in browsers + * that trap you in links, by adding a space when necessary and placing the + * cursor after that space. + */ +goog.editor.Link.prototype.placeCursorRightOf = function() { + var anchor = this.getAnchor(); + // If the browser gets stuck in a link if we place the cursor next to it, + // we'll place the cursor after a space instead. + if (goog.editor.BrowserFeature.GETS_STUCK_IN_LINKS) { + var spaceNode; + var nextSibling = anchor.nextSibling; + + // Check if there is already a space after the link. Only handle the + // simple case - the next node is a text node that starts with a space. + if (nextSibling && + nextSibling.nodeType == goog.dom.NodeType.TEXT && + (goog.string.startsWith(nextSibling.data, goog.string.Unicode.NBSP) || + goog.string.startsWith(nextSibling.data, ' '))) { + spaceNode = nextSibling; + } else { + // If there isn't an obvious space to use, create one after the link. + var dh = goog.dom.getDomHelper(anchor); + spaceNode = dh.createTextNode(goog.string.Unicode.NBSP); + goog.dom.insertSiblingAfter(spaceNode, anchor); + } + + // Move the selection after the space. + var range = goog.dom.Range.createCaret(spaceNode, 1); + range.select(); + } else { + goog.editor.range.placeCursorNextTo(anchor, false); + } +}; + + +/** + * Updates the cursor position and link bubble for this link. + * @param {goog.editor.Field} field The field in which the link is created. + * @param {string} url The link url. + * @private + */ +goog.editor.Link.prototype.updateLinkDisplay_ = function(field, url) { + this.initializeUrl(url); + this.placeCursorRightOf(); + field.execCommand(goog.editor.Command.UPDATE_LINK_BUBBLE); +}; + + +/** + * @return {string?} The modified string for the link if the link + * text appears to be a valid link. Returns null if this is not + * a valid link address. + */ +goog.editor.Link.prototype.getValidLinkFromText = function() { + var text = this.getCurrentText(); + if (goog.editor.Link.isLikelyUrl(text)) { + if (text.search(/:/) < 0) { + return 'http://' + goog.string.trimLeft(text); + } + return text; + } else if (goog.editor.Link.isLikelyEmailAddress(text)) { + return 'mailto:' + text; + } + return null; +}; + + +/** + * After link creation, finish creating the link depending on the type + * of link being created. + * @param {goog.editor.Field} field The field where this link is being created. + */ +goog.editor.Link.prototype.finishLinkCreation = function(field) { + var linkFromText = this.getValidLinkFromText(); + if (linkFromText) { + this.updateLinkDisplay_(field, linkFromText); + } else { + field.execCommand(goog.editor.Command.MODAL_LINK_EDITOR, this); + } +}; + + +/** + * Initialize a new link. + * @param {HTMLAnchorElement} anchor The anchor element. + * @param {string} url The initial URL. + * @param {string=} opt_target The target. + * @param {Array.=} opt_extraAnchors Extra anchors created + * by the browser when parsing a selection. + * @return {goog.editor.Link} The link. + */ +goog.editor.Link.createNewLink = function(anchor, url, opt_target, + opt_extraAnchors) { + var link = new goog.editor.Link(anchor, true); + link.initializeUrl(url); + + if (opt_target) { + anchor.target = opt_target; + } + if (opt_extraAnchors) { + link.extraAnchors_ = opt_extraAnchors; + } + + return link; +}; + + +/** + * Returns true if str could be a URL, false otherwise + * + * Ex: TR_Util.isLikelyUrl_("http://www.google.com") == true + * TR_Util.isLikelyUrl_("www.google.com") == true + * + * @param {string} str String to check if it looks like a URL. + * @return {boolean} Whether str could be a URL. + */ +goog.editor.Link.isLikelyUrl = function(str) { + // Whitespace means this isn't a domain. + if (/\s/.test(str)) { + return false; + } + + if (goog.editor.Link.isLikelyEmailAddress(str)) { + return false; + } + + // Add a scheme if the url doesn't have one - this helps the parser. + var addedScheme = false; + if (!/^[^:\/?#.]+:/.test(str)) { + str = 'http://' + str; + addedScheme = true; + } + + // Parse the domain. + var parts = goog.uri.utils.split(str); + + // Relax the rules for special schemes. + var scheme = parts[goog.uri.utils.ComponentIndex.SCHEME]; + if (goog.array.indexOf(['mailto', 'aim'], scheme) != -1) { + return true; + } + + // Require domains to contain a '.', unless the domain is fully qualified and + // forbids domains from containing invalid characters. + var domain = parts[goog.uri.utils.ComponentIndex.DOMAIN]; + if (!domain || (addedScheme && domain.indexOf('.') == -1) || + (/[^\w\d\-\u0100-\uffff.%]/.test(domain))) { + return false; + } + + // Require http and ftp paths to start with '/'. + var path = parts[goog.uri.utils.ComponentIndex.PATH]; + return !path || path.indexOf('/') == 0; +}; + + +/** + * Regular expression that matches strings that could be an email address. + * @type {RegExp} + * @private + */ +goog.editor.Link.LIKELY_EMAIL_ADDRESS_ = new RegExp( + '^' + // Test from start of string + '[\\w-]+(\\.[\\w-]+)*' + // Dot-delimited alphanumerics and dashes (name) + '\\@' + // @ + '([\\w-]+\\.)+' + // Alphanumerics, dashes and dots (domain) + '(\\d+|\\w\\w+)$', // Domain ends in at least one number or 2 letters + 'i'); + + +/** + * Returns true if str could be an email address, false otherwise + * + * Ex: goog.editor.Link.isLikelyEmailAddress_("some word") == false + * goog.editor.Link.isLikelyEmailAddress_("foo@foo.com") == true + * + * @param {string} str String to test for being email address. + * @return {boolean} Whether "str" looks like an email address. + */ +goog.editor.Link.isLikelyEmailAddress = function(str) { + return goog.editor.Link.LIKELY_EMAIL_ADDRESS_.test(str); +}; + + +/** + * Determines whether or not a url is an email link. + * @param {string} url A url. + * @return {boolean} Whether the url is a mailto link. + */ +goog.editor.Link.isMailto = function(url) { + return !!url && goog.string.startsWith(url, 'mailto:'); +}; diff --git a/float-no-zero/closure-library/closure/goog/editor/node.js b/float-no-zero/closure-library/closure/goog/editor/node.js new file mode 100644 index 0000000000..307c7fa557 --- /dev/null +++ b/float-no-zero/closure-library/closure/goog/editor/node.js @@ -0,0 +1,483 @@ +// Copyright 2005 The Closure Library Authors. All Rights Reserved. +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS-IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +/** + * @fileoverview Utilties for working with DOM nodes related to rich text + * editing. Many of these are not general enough to go into goog.dom. + * + */ + +goog.provide('goog.editor.node'); + +goog.require('goog.dom'); +goog.require('goog.dom.NodeType'); +goog.require('goog.dom.TagName'); +goog.require('goog.dom.iter.ChildIterator'); +goog.require('goog.dom.iter.SiblingIterator'); +goog.require('goog.iter'); +goog.require('goog.object'); +goog.require('goog.string'); +goog.require('goog.string.Unicode'); +goog.require('goog.userAgent'); + + +/** + * Names of all block-level tags + * @type {Object} + * @private + */ +goog.editor.node.BLOCK_TAG_NAMES_ = goog.object.createSet( + goog.dom.TagName.ADDRESS, + goog.dom.TagName.ARTICLE, + goog.dom.TagName.ASIDE, + goog.dom.TagName.BLOCKQUOTE, + goog.dom.TagName.BODY, + goog.dom.TagName.CAPTION, + goog.dom.TagName.CENTER, + goog.dom.TagName.COL, + goog.dom.TagName.COLGROUP, + goog.dom.TagName.DETAILS, + goog.dom.TagName.DIR, + goog.dom.TagName.DIV, + goog.dom.TagName.DL, + goog.dom.TagName.DD, + goog.dom.TagName.DT, + goog.dom.TagName.FIELDSET, + goog.dom.TagName.FIGCAPTION, + goog.dom.TagName.FIGURE, + goog.dom.TagName.FOOTER, + goog.dom.TagName.FORM, + goog.dom.TagName.H1, + goog.dom.TagName.H2, + goog.dom.TagName.H3, + goog.dom.TagName.H4, + goog.dom.TagName.H5, + goog.dom.TagName.H6, + goog.dom.TagName.HEADER, + goog.dom.TagName.HGROUP, + goog.dom.TagName.HR, + goog.dom.TagName.ISINDEX, + goog.dom.TagName.OL, + goog.dom.TagName.LI, + goog.dom.TagName.MAP, + goog.dom.TagName.MENU, + goog.dom.TagName.NAV, + goog.dom.TagName.OPTGROUP, + goog.dom.TagName.OPTION, + goog.dom.TagName.P, + goog.dom.TagName.PRE, + goog.dom.TagName.SECTION, + goog.dom.TagName.SUMMARY, + goog.dom.TagName.TABLE, + goog.dom.TagName.TBODY, + goog.dom.TagName.TD, + goog.dom.TagName.TFOOT, + goog.dom.TagName.TH, + goog.dom.TagName.THEAD, + goog.dom.TagName.TR, + goog.dom.TagName.UL); + + +/** + * Names of tags that have intrinsic content. + * TODO(robbyw): What about object, br, input, textarea, button, isindex, + * hr, keygen, select, table, tr, td? + * @type {Object} + * @private + */ +goog.editor.node.NON_EMPTY_TAGS_ = goog.object.createSet( + goog.dom.TagName.IMG, goog.dom.TagName.IFRAME, goog.dom.TagName.EMBED); + + +/** + * Check if the node is in a standards mode document. + * @param {Node} node The node to test. + * @return {boolean} Whether the node is in a standards mode document. + */ +goog.editor.node.isStandardsMode = function(node) { + return goog.dom.getDomHelper(node).isCss1CompatMode(); +}; + + +/** + * Get the right-most non-ignorable leaf node of the given node. + * @param {Node} parent The parent ndoe. + * @return {Node} The right-most non-ignorable leaf node. + */ +goog.editor.node.getRightMostLeaf = function(parent) { + var temp; + while (temp = goog.editor.node.getLastChild(parent)) { + parent = temp; + } + return parent; +}; + + +/** + * Get the left-most non-ignorable leaf node of the given node. + * @param {Node} parent The parent ndoe. + * @return {Node} The left-most non-ignorable leaf node. + */ +goog.editor.node.getLeftMostLeaf = function(parent) { + var temp; + while (temp = goog.editor.node.getFirstChild(parent)) { + parent = temp; + } + return parent; +}; + + +/** + * Version of firstChild that skips nodes that are entirely + * whitespace and comments. + * @param {Node} parent The reference node. + * @return {Node} The first child of sibling that is important according to + * goog.editor.node.isImportant, or null if no such node exists. + */ +goog.editor.node.getFirstChild = function(parent) { + return goog.editor.node.getChildHelper_(parent, false); +}; + + +/** + * Version of lastChild that skips nodes that are entirely whitespace or + * comments. (Normally lastChild is a property of all DOM nodes that gives the + * last of the nodes contained directly in the reference node.) + * @param {Node} parent The reference node. + * @return {Node} The last child of sibling that is important according to + * goog.editor.node.isImportant, or null if no such node exists. + */ +goog.editor.node.getLastChild = function(parent) { + return goog.editor.node.getChildHelper_(parent, true); +}; + + +/** + * Version of previoussibling that skips nodes that are entirely + * whitespace or comments. (Normally previousSibling is a property + * of all DOM nodes that gives the sibling node, the node that is + * a child of the same parent, that occurs immediately before the + * reference node.) + * @param {Node} sibling The reference node. + * @return {Node} The closest previous sibling to sibling that is + * important according to goog.editor.node.isImportant, or null if no such + * node exists. + */ +goog.editor.node.getPreviousSibling = function(sibling) { + return /** @type {Node} */ (goog.editor.node.getFirstValue_( + goog.iter.filter(new goog.dom.iter.SiblingIterator(sibling, false, true), + goog.editor.node.isImportant))); +}; + + +/** + * Version of nextSibling that skips nodes that are entirely whitespace or + * comments. + * @param {Node} sibling The reference node. + * @return {Node} The closest next sibling to sibling that is important + * according to goog.editor.node.isImportant, or null if no + * such node exists. + */ +goog.editor.node.getNextSibling = function(sibling) { + return /** @type {Node} */ (goog.editor.node.getFirstValue_( + goog.iter.filter(new goog.dom.iter.SiblingIterator(sibling), + goog.editor.node.isImportant))); +}; + + +/** + * Internal helper for lastChild/firstChild that skips nodes that are entirely + * whitespace or comments. + * @param {Node} parent The reference node. + * @param {boolean} isReversed Whether children should be traversed forward + * or backward. + * @return {Node} The first/last child of sibling that is important according + * to goog.editor.node.isImportant, or null if no such node exists. + * @private + */ +goog.editor.node.getChildHelper_ = function(parent, isReversed) { + return (!parent || parent.nodeType != goog.dom.NodeType.ELEMENT) ? null : + /** @type {Node} */ (goog.editor.node.getFirstValue_(goog.iter.filter( + new goog.dom.iter.ChildIterator( + /** @type {Element} */ (parent), isReversed), + goog.editor.node.isImportant))); +}; + + +/** + * Utility function that returns the first value from an iterator or null if + * the iterator is empty. + * @param {goog.iter.Iterator} iterator The iterator to get a value from. + * @return {*} The first value from the iterator. + * @private + */ +goog.editor.node.getFirstValue_ = function(iterator) { + /** @preserveTry */ + try { + return iterator.next(); + } catch (e) { + return null; + } +}; + + +/** + * Determine if a node should be returned by the iterator functions. + * @param {Node} node An object implementing the DOM1 Node interface. + * @return {boolean} Whether the node is an element, or a text node that + * is not all whitespace. + */ +goog.editor.node.isImportant = function(node) { + // Return true if the node is not either a TextNode or an ElementNode. + return node.nodeType == goog.dom.NodeType.ELEMENT || + node.nodeType == goog.dom.NodeType.TEXT && + !goog.editor.node.isAllNonNbspWhiteSpace(node); +}; + + +/** + * Determine whether a node's text content is entirely whitespace. + * @param {Node} textNode A node implementing the CharacterData interface (i.e., + * a Text, Comment, or CDATASection node. + * @return {boolean} Whether the text content of node is whitespace, + * otherwise false. + */ +goog.editor.node.isAllNonNbspWhiteSpace = function(textNode) { + return goog.string.isBreakingWhitespace(textNode.nodeValue); +}; + + +/** + * Returns true if the node contains only whitespace and is not and does not + * contain any images, iframes or embed tags. + * @param {Node} node The node to check. + * @param {boolean=} opt_prohibitSingleNbsp By default, this function treats a + * single nbsp as empty. Set this to true to treat this case as non-empty. + * @return {boolean} Whether the node contains only whitespace. + */ +goog.editor.node.isEmpty = function(node, opt_prohibitSingleNbsp) { + var nodeData = goog.dom.getRawTextContent(node); + + if (node.getElementsByTagName) { + for (var tag in goog.editor.node.NON_EMPTY_TAGS_) { + if (node.tagName == tag || node.getElementsByTagName(tag).length > 0) { + return false; + } + } + } + return (!opt_prohibitSingleNbsp && nodeData == goog.string.Unicode.NBSP) || + goog.string.isBreakingWhitespace(nodeData); +}; + + +/** + * Returns the length of the text in node if it is a text node, or the number + * of children of the node, if it is an element. Useful for range-manipulation + * code where you need to know the offset for the right side of the node. + * @param {Node} node The node to get the length of. + * @return {number} The length of the node. + */ +goog.editor.node.getLength = function(node) { + return node.length || node.childNodes.length; +}; + + +/** + * Search child nodes using a predicate function and return the first node that + * satisfies the condition. + * @param {Node} parent The parent node to search. + * @param {function(Node):boolean} hasProperty A function that takes a child + * node as a parameter and returns true if it meets the criteria. + * @return {?number} The index of the node found, or null if no node is found. + */ +goog.editor.node.findInChildren = function(parent, hasProperty) { + for (var i = 0, len = parent.childNodes.length; i < len; i++) { + if (hasProperty(parent.childNodes[i])) { + return i; + } + } + return null; +}; + + +/** + * Search ancestor nodes using a predicate function and returns the topmost + * ancestor in the chain of consecutive ancestors that satisfies the condition. + * + * @param {Node} node The node whose ancestors have to be searched. + * @param {function(Node): boolean} hasProperty A function that takes a parent + * node as a parameter and returns true if it meets the criteria. + * @return {Node} The topmost ancestor or null if no ancestor satisfies the + * predicate function. + */ +goog.editor.node.findHighestMatchingAncestor = function(node, hasProperty) { + var parent = node.parentNode; + var ancestor = null; + while (parent && hasProperty(parent)) { + ancestor = parent; + parent = parent.parentNode; + } + return ancestor; +}; + + +/** +* Checks if node is a block-level html element. The display css + * property is ignored. + * @param {Node} node The node to test. + * @return {boolean} Whether the node is a block-level node. + */ +goog.editor.node.isBlockTag = function(node) { + return !!goog.editor.node.BLOCK_TAG_NAMES_[node.tagName]; +}; + + +/** + * Skips siblings of a node that are empty text nodes. + * @param {Node} node A node. May be null. + * @return {Node} The node or the first sibling of the node that is not an + * empty text node. May be null. + */ +goog.editor.node.skipEmptyTextNodes = function(node) { + while (node && node.nodeType == goog.dom.NodeType.TEXT && + !node.nodeValue) { + node = node.nextSibling; + } + return node; +}; + + +/** + * Checks if an element is a top-level editable container (meaning that + * it itself is not editable, but all its child nodes are editable). + * @param {Node} element The element to test. + * @return {boolean} Whether the element is a top-level editable container. + */ +goog.editor.node.isEditableContainer = function(element) { + return element.getAttribute && + element.getAttribute('g_editable') == 'true'; +}; + + +/** + * Checks if a node is inside an editable container. + * @param {Node} node The node to test. + * @return {boolean} Whether the node is in an editable container. + */ +goog.editor.node.isEditable = function(node) { + return !!goog.dom.getAncestor(node, goog.editor.node.isEditableContainer); +}; + + +/** + * Finds the top-most DOM node inside an editable field that is an ancestor + * (or self) of a given DOM node and meets the specified criteria. + * @param {Node} node The DOM node where the search starts. + * @param {function(Node) : boolean} criteria A function that takes a DOM node + * as a parameter and returns a boolean to indicate whether the node meets + * the criteria or not. + * @return {Node} The DOM node if found, or null. + */ +goog.editor.node.findTopMostEditableAncestor = function(node, criteria) { + var targetNode = null; + while (node && !goog.editor.node.isEditableContainer(node)) { + if (criteria(node)) { + targetNode = node; + } + node = node.parentNode; + } + return targetNode; +}; + + +/** + * Splits off a subtree. + * @param {!Node} currentNode The starting splitting point. + * @param {Node=} opt_secondHalf The initial leftmost leaf the new subtree. + * If null, siblings after currentNode will be placed in the subtree, but + * no additional node will be. + * @param {Node=} opt_root The top of the tree where splitting stops at. + * @return {!Node} The new subtree. + */ +goog.editor.node.splitDomTreeAt = function(currentNode, + opt_secondHalf, opt_root) { + var parent; + while (currentNode != opt_root && (parent = currentNode.parentNode)) { + opt_secondHalf = goog.editor.node.getSecondHalfOfNode_(parent, currentNode, + opt_secondHalf); + currentNode = parent; + } + return /** @type {!Node} */(opt_secondHalf); +}; + + +/** + * Creates a clone of node, moving all children after startNode to it. + * When firstChild is not null or undefined, it is also appended to the clone + * as the first child. + * @param {!Node} node The node to clone. + * @param {!Node} startNode All siblings after this node will be moved to the + * clone. + * @param {Node|undefined} firstChild The first child of the new cloned element. + * @return {!Node} The cloned node that now contains the children after + * startNode. + * @private + */ +goog.editor.node.getSecondHalfOfNode_ = function(node, startNode, firstChild) { + var secondHalf = /** @type {!Node} */(node.cloneNode(false)); + while (startNode.nextSibling) { + goog.dom.appendChild(secondHalf, startNode.nextSibling); + } + if (firstChild) { + secondHalf.insertBefore(firstChild, secondHalf.firstChild); + } + return secondHalf; +}; + + +/** + * Appends all of oldNode's children to newNode. This removes all children from + * oldNode and appends them to newNode. oldNode is left with no children. + * @param {!Node} newNode Node to transfer children to. + * @param {Node} oldNode Node to transfer children from. + * @deprecated Use goog.dom.append directly instead. + */ +goog.editor.node.transferChildren = function(newNode, oldNode) { + goog.dom.append(newNode, oldNode.childNodes); +}; + + +/** + * Replaces the innerHTML of a node. + * + * IE has serious problems if you try to set innerHTML of an editable node with + * any selection. Early versions of IE tear up the old internal tree storage, to + * help avoid ref-counting loops. But this sometimes leaves the selection object + * in a bad state and leads to segfaults. + * + * Removing the nodes first prevents IE from tearing them up. This is not + * strictly necessary in nodes that do not have the selection. You should always + * use this function when setting innerHTML inside of a field. + * + * @param {Node} node A node. + * @param {string} html The innerHTML to set on the node. + */ +goog.editor.node.replaceInnerHtml = function(node, html) { + // Only do this IE. On gecko, we use element change events, and don't + // want to trigger spurious events. + if (goog.userAgent.IE) { + goog.dom.removeChildren(node); + } + node.innerHTML = html; +}; diff --git a/float-no-zero/closure-library/closure/goog/editor/plugin.js b/float-no-zero/closure-library/closure/goog/editor/plugin.js new file mode 100644 index 0000000000..3550c4cde6 --- /dev/null +++ b/float-no-zero/closure-library/closure/goog/editor/plugin.js @@ -0,0 +1,463 @@ +// Copyright 2008 The Closure Library Authors. All Rights Reserved. +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS-IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. +// All Rights Reserved. + +/** + * @fileoverview Abstract API for TrogEdit plugins. + * + * @see ../demos/editor/editor.html + */ + +goog.provide('goog.editor.Plugin'); + +// TODO(user): Remove the dependency on goog.editor.Command asap. Currently only +// needed for execCommand issues with links. +goog.require('goog.editor.Command'); +goog.require('goog.events.EventTarget'); +goog.require('goog.functions'); +goog.require('goog.log'); +goog.require('goog.object'); +goog.require('goog.reflect'); + + + +/** + * Abstract API for trogedit plugins. + * @constructor + * @extends {goog.events.EventTarget} + */ +goog.editor.Plugin = function() { + goog.events.EventTarget.call(this); + + /** + * Whether this plugin is enabled for the registered field object. + * @type {boolean} + * @private + */ + this.enabled_ = this.activeOnUneditableFields(); +}; +goog.inherits(goog.editor.Plugin, goog.events.EventTarget); + + +/** + * The field object this plugin is attached to. + * @type {goog.editor.Field} + * @protected + * @deprecated Use goog.editor.Plugin.getFieldObject and + * goog.editor.Plugin.setFieldObject. + */ +goog.editor.Plugin.prototype.fieldObject = null; + + +/** + * @return {goog.dom.DomHelper?} The dom helper object associated with the + * currently active field. + */ +goog.editor.Plugin.prototype.getFieldDomHelper = function() { + return this.getFieldObject() && this.getFieldObject().getEditableDomHelper(); +}; + + +/** + * Indicates if this plugin should be automatically disposed when the + * registered field is disposed. This should be changed to false for + * plugins used as multi-field plugins. + * @type {boolean} + * @private + */ +goog.editor.Plugin.prototype.autoDispose_ = true; + + +/** + * The logger for this plugin. + * @type {goog.log.Logger} + * @protected + */ +goog.editor.Plugin.prototype.logger = + goog.log.getLogger('goog.editor.Plugin'); + + +/** + * Sets the field object for use with this plugin. + * @return {goog.editor.Field} The editable field object. + * @protected + * @suppress {deprecated} Until fieldObject can be made private. + */ +goog.editor.Plugin.prototype.getFieldObject = function() { + return this.fieldObject; +}; + + +/** + * Sets the field object for use with this plugin. + * @param {goog.editor.Field} fieldObject The editable field object. + * @protected + * @suppress {deprecated} Until fieldObject can be made private. + */ +goog.editor.Plugin.prototype.setFieldObject = function(fieldObject) { + this.fieldObject = fieldObject; +}; + + +/** + * Registers the field object for use with this plugin. + * @param {goog.editor.Field} fieldObject The editable field object. + */ +goog.editor.Plugin.prototype.registerFieldObject = function(fieldObject) { + this.setFieldObject(fieldObject); +}; + + +/** + * Unregisters and disables this plugin for the current field object. + * @param {goog.editor.Field} fieldObj The field object. For single-field + * plugins, this parameter is ignored. + */ +goog.editor.Plugin.prototype.unregisterFieldObject = function(fieldObj) { + if (this.getFieldObject()) { + this.disable(this.getFieldObject()); + this.setFieldObject(null); + } +}; + + +/** + * Enables this plugin for the specified, registered field object. A field + * object should only be enabled when it is loaded. + * @param {goog.editor.Field} fieldObject The field object. + */ +goog.editor.Plugin.prototype.enable = function(fieldObject) { + if (this.getFieldObject() == fieldObject) { + this.enabled_ = true; + } else { + goog.log.error(this.logger, 'Trying to enable an unregistered field with ' + + 'this plugin.'); + } +}; + + +/** + * Disables this plugin for the specified, registered field object. + * @param {goog.editor.Field} fieldObject The field object. + */ +goog.editor.Plugin.prototype.disable = function(fieldObject) { + if (this.getFieldObject() == fieldObject) { + this.enabled_ = false; + } else { + goog.log.error(this.logger, 'Trying to disable an unregistered field ' + + 'with this plugin.'); + } +}; + + +/** + * Returns whether this plugin is enabled for the field object. + * + * @param {goog.editor.Field} fieldObject The field object. + * @return {boolean} Whether this plugin is enabled for the field object. + */ +goog.editor.Plugin.prototype.isEnabled = function(fieldObject) { + return this.getFieldObject() == fieldObject ? this.enabled_ : false; +}; + + +/** + * Set if this plugin should automatically be disposed when the registered + * field is disposed. + * @param {boolean} autoDispose Whether to autoDispose. + */ +goog.editor.Plugin.prototype.setAutoDispose = function(autoDispose) { + this.autoDispose_ = autoDispose; +}; + + +/** + * @return {boolean} Whether or not this plugin should automatically be disposed + * when it's registered field is disposed. + */ +goog.editor.Plugin.prototype.isAutoDispose = function() { + return this.autoDispose_; +}; + + +/** + * @return {boolean} If true, field will not disable the command + * when the field becomes uneditable. + */ +goog.editor.Plugin.prototype.activeOnUneditableFields = goog.functions.FALSE; + + +/** + * @param {string} command The command to check. + * @return {boolean} If true, field will not dispatch change events + * for commands of this type. This is useful for "seamless" plugins like + * dialogs and lorem ipsum. + */ +goog.editor.Plugin.prototype.isSilentCommand = goog.functions.FALSE; + + +/** @override */ +goog.editor.Plugin.prototype.disposeInternal = function() { + if (this.getFieldObject()) { + this.unregisterFieldObject(this.getFieldObject()); + } + + goog.editor.Plugin.superClass_.disposeInternal.call(this); +}; + + +/** + * @return {string} The ID unique to this plugin class. Note that different + * instances off the plugin share the same classId. + */ +goog.editor.Plugin.prototype.getTrogClassId; + + +/** + * An enum of operations that plugins may support. + * @enum {number} + */ +goog.editor.Plugin.Op = { + KEYDOWN: 1, + KEYPRESS: 2, + KEYUP: 3, + SELECTION: 4, + SHORTCUT: 5, + EXEC_COMMAND: 6, + QUERY_COMMAND: 7, + PREPARE_CONTENTS_HTML: 8, + CLEAN_CONTENTS_HTML: 10, + CLEAN_CONTENTS_DOM: 11 +}; + + +/** + * A map from plugin operations to the names of the methods that + * invoke those operations. + */ +goog.editor.Plugin.OPCODE = goog.object.transpose( + goog.reflect.object(goog.editor.Plugin, { + handleKeyDown: goog.editor.Plugin.Op.KEYDOWN, + handleKeyPress: goog.editor.Plugin.Op.KEYPRESS, + handleKeyUp: goog.editor.Plugin.Op.KEYUP, + handleSelectionChange: goog.editor.Plugin.Op.SELECTION, + handleKeyboardShortcut: goog.editor.Plugin.Op.SHORTCUT, + execCommand: goog.editor.Plugin.Op.EXEC_COMMAND, + queryCommandValue: goog.editor.Plugin.Op.QUERY_COMMAND, + prepareContentsHtml: goog.editor.Plugin.Op.PREPARE_CONTENTS_HTML, + cleanContentsHtml: goog.editor.Plugin.Op.CLEAN_CONTENTS_HTML, + cleanContentsDom: goog.editor.Plugin.Op.CLEAN_CONTENTS_DOM + })); + + +/** + * A set of op codes that run even on disabled plugins. + */ +goog.editor.Plugin.IRREPRESSIBLE_OPS = goog.object.createSet( + goog.editor.Plugin.Op.PREPARE_CONTENTS_HTML, + goog.editor.Plugin.Op.CLEAN_CONTENTS_HTML, + goog.editor.Plugin.Op.CLEAN_CONTENTS_DOM); + + +/** + * Handles keydown. It is run before handleKeyboardShortcut and if it returns + * true handleKeyboardShortcut will not be called. + * @param {!goog.events.BrowserEvent} e The browser event. + * @return {boolean} Whether the event was handled and thus should *not* be + * propagated to other plugins or handleKeyboardShortcut. + */ +goog.editor.Plugin.prototype.handleKeyDown; + + +/** + * Handles keypress. It is run before handleKeyboardShortcut and if it returns + * true handleKeyboardShortcut will not be called. + * @param {!goog.events.BrowserEvent} e The browser event. + * @return {boolean} Whether the event was handled and thus should *not* be + * propagated to other plugins or handleKeyboardShortcut. + */ +goog.editor.Plugin.prototype.handleKeyPress; + + +/** + * Handles keyup. + * @param {!goog.events.BrowserEvent} e The browser event. + * @return {boolean} Whether the event was handled and thus should *not* be + * propagated to other plugins. + */ +goog.editor.Plugin.prototype.handleKeyUp; + + +/** + * Handles selection change. + * @param {!goog.events.BrowserEvent=} opt_e The browser event. + * @param {!Node=} opt_target The node the selection changed to. + * @return {boolean} Whether the event was handled and thus should *not* be + * propagated to other plugins. + */ +goog.editor.Plugin.prototype.handleSelectionChange; + + +/** + * Handles keyboard shortcuts. Preferred to using handleKey* as it will use + * the proper event based on browser and will be more performant. If + * handleKeyPress/handleKeyDown returns true, this will not be called. If the + * plugin handles the shortcut, it is responsible for dispatching appropriate + * events (change, selection change at the time of this comment). If the plugin + * calls execCommand on the editable field, then execCommand already takes care + * of dispatching events. + * NOTE: For performance reasons this is only called when any key is pressed + * in conjunction with ctrl/meta keys OR when a small subset of keys (defined + * in goog.editor.Field.POTENTIAL_SHORTCUT_KEYCODES_) are pressed without + * ctrl/meta keys. We specifically don't invoke it when altKey is pressed since + * alt key is used in many i8n UIs to enter certain characters. + * @param {!goog.events.BrowserEvent} e The browser event. + * @param {string} key The key pressed. + * @param {boolean} isModifierPressed Whether the ctrl/meta key was pressed or + * not. + * @return {boolean} Whether the event was handled and thus should *not* be + * propagated to other plugins. We also call preventDefault on the event if + * the return value is true. + */ +goog.editor.Plugin.prototype.handleKeyboardShortcut; + + +/** + * Handles execCommand. This default implementation handles dispatching + * BEFORECHANGE, CHANGE, and SELECTIONCHANGE events, and calls + * execCommandInternal to perform the actual command. Plugins that want to + * do their own event dispatching should override execCommand, otherwise + * it is preferred to only override execCommandInternal. + * + * This version of execCommand will only work for single field plugins. + * Multi-field plugins must override execCommand. + * + * @param {string} command The command to execute. + * @param {...*} var_args Any additional parameters needed to + * execute the command. + * @return {*} The result of the execCommand, if any. + */ +goog.editor.Plugin.prototype.execCommand = function(command, var_args) { + // TODO(user): Replace all uses of isSilentCommand with plugins that just + // override this base execCommand method. + var silent = this.isSilentCommand(command); + if (!silent) { + // Stop listening to mutation events in Firefox while text formatting + // is happening. This prevents us from trying to size the field in the + // middle of an execCommand, catching the field in a strange intermediary + // state where both replacement nodes and original nodes are appended to + // the dom. Note that change events get turned back on by + // fieldObj.dispatchChange. + if (goog.userAgent.GECKO) { + this.getFieldObject().stopChangeEvents(true, true); + } + + this.getFieldObject().dispatchBeforeChange(); + } + + try { + var result = this.execCommandInternal.apply(this, arguments); + } finally { + // If the above execCommandInternal call throws an exception, we still need + // to turn change events back on (see http://b/issue?id=1471355). + // NOTE: If if you add to or change the methods called in this finally + // block, please add them as expected calls to the unit test function + // testExecCommandException(). + if (!silent) { + // dispatchChange includes a call to startChangeEvents, which unwinds the + // call to stopChangeEvents made before the try block. + this.getFieldObject().dispatchChange(); + this.getFieldObject().dispatchSelectionChangeEvent(); + } + } + + return result; +}; + + +/** + * Handles execCommand. This default implementation does nothing, and is + * called by execCommand, which handles event dispatching. This method should + * be overriden by plugins that don't need to do their own event dispatching. + * If custom event dispatching is needed, execCommand shoul be overriden + * instead. + * + * @param {string} command The command to execute. + * @param {...*} var_args Any additional parameters needed to + * execute the command. + * @return {*} The result of the execCommand, if any. + * @protected + */ +goog.editor.Plugin.prototype.execCommandInternal; + + +/** + * Gets the state of this command if this plugin serves that command. + * @param {string} command The command to check. + * @return {*} The value of the command. + */ +goog.editor.Plugin.prototype.queryCommandValue; + + +/** + * Prepares the given HTML for editing. Strips out content that should not + * appear in an editor, and normalizes content as appropriate. The inverse + * of cleanContentsHtml. + * + * This op is invoked even on disabled plugins. + * + * @param {string} originalHtml The original HTML. + * @param {Object} styles A map of strings. If the plugin wants to add + * any styles to the field element, it should add them as key-value + * pairs to this object. + * @return {string} New HTML that's ok for editing. + */ +goog.editor.Plugin.prototype.prepareContentsHtml; + + +/** + * Cleans the contents of the node passed to it. The node contents are modified + * directly, and the modifications will subsequently be used, for operations + * such as saving the innerHTML of the editor etc. Since the plugins act on + * the DOM directly, this method can be very expensive. + * + * This op is invoked even on disabled plugins. + * + * @param {!Element} fieldCopy The copy of the editable field which + * needs to be cleaned up. + */ +goog.editor.Plugin.prototype.cleanContentsDom; + + +/** + * Cleans the html contents of Trogedit. Both cleanContentsDom and + * and cleanContentsHtml will be called on contents extracted from Trogedit. + * The inverse of prepareContentsHtml. + * + * This op is invoked even on disabled plugins. + * + * @param {string} originalHtml The trogedit HTML. + * @return {string} Cleaned-up HTML. + */ +goog.editor.Plugin.prototype.cleanContentsHtml; + + +/** + * Whether the string corresponds to a command this plugin handles. + * @param {string} command Command string to check. + * @return {boolean} Whether the plugin handles this type of command. + */ +goog.editor.Plugin.prototype.isSupportedCommand = function(command) { + return false; +}; diff --git a/float-no-zero/closure-library/closure/goog/editor/plugins/abstractbubbleplugin.js b/float-no-zero/closure-library/closure/goog/editor/plugins/abstractbubbleplugin.js new file mode 100644 index 0000000000..cc230eed27 --- /dev/null +++ b/float-no-zero/closure-library/closure/goog/editor/plugins/abstractbubbleplugin.js @@ -0,0 +1,630 @@ +// Copyright 2005 The Closure Library Authors. All Rights Reserved. +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS-IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +/** + * @fileoverview Base class for bubble plugins. + */ + +goog.provide('goog.editor.plugins.AbstractBubblePlugin'); + +goog.require('goog.dom'); +goog.require('goog.dom.NodeType'); +goog.require('goog.dom.Range'); +goog.require('goog.dom.TagName'); +goog.require('goog.editor.Plugin'); +goog.require('goog.editor.style'); +goog.require('goog.events'); +goog.require('goog.events.EventHandler'); +goog.require('goog.events.EventType'); +goog.require('goog.events.KeyCodes'); +goog.require('goog.events.actionEventWrapper'); +goog.require('goog.functions'); +goog.require('goog.string.Unicode'); +goog.require('goog.ui.Component.EventType'); +goog.require('goog.ui.editor.Bubble'); +goog.require('goog.userAgent'); + + + +/** + * Base class for bubble plugins. This is used for to connect user behavior + * in the editor to a goog.ui.editor.Bubble UI element that allows + * the user to modify the properties of an element on their page (e.g. the alt + * text of an image tag). + * + * Subclasses should override the abstract method getBubbleTargetFromSelection() + * with code to determine if the current selection should activate the bubble + * type. The other abstract method createBubbleContents() should be overriden + * with code to create the inside markup of the bubble. The base class creates + * the rest of the bubble. + * + * @constructor + * @extends {goog.editor.Plugin} + */ +goog.editor.plugins.AbstractBubblePlugin = function() { + goog.base(this); + + /** + * Place to register events the plugin listens to. + * @type {goog.events.EventHandler} + * @protected + */ + this.eventRegister = new goog.events.EventHandler(this); +}; +goog.inherits(goog.editor.plugins.AbstractBubblePlugin, goog.editor.Plugin); + + +/** + * The css class name of option link elements. + * @type {string} + * @private + */ +goog.editor.plugins.AbstractBubblePlugin.OPTION_LINK_CLASSNAME_ = + goog.getCssName('tr_option-link'); + + +/** + * The css class name of link elements. + * @type {string} + * @private + */ +goog.editor.plugins.AbstractBubblePlugin.LINK_CLASSNAME_ = + goog.getCssName('tr_bubble_link'); + + +/** + * The constant string used to separate option links. + * @type {string} + * @protected + */ +goog.editor.plugins.AbstractBubblePlugin.DASH_NBSP_STRING = + goog.string.Unicode.NBSP + '-' + goog.string.Unicode.NBSP; + + +/** + * Default factory function for creating a bubble UI component. + * @param {!Element} parent The parent element for the bubble. + * @param {number} zIndex The z index to draw the bubble at. + * @return {!goog.ui.editor.Bubble} The new bubble component. + * @private + */ +goog.editor.plugins.AbstractBubblePlugin.defaultBubbleFactory_ = function( + parent, zIndex) { + return new goog.ui.editor.Bubble(parent, zIndex); +}; + + +/** + * Factory function that creates a bubble UI component. It takes as parameters + * the bubble parent element and the z index to draw the bubble at. + * @type {function(!Element, number): !goog.ui.editor.Bubble} + * @private + */ +goog.editor.plugins.AbstractBubblePlugin.bubbleFactory_ = + goog.editor.plugins.AbstractBubblePlugin.defaultBubbleFactory_; + + +/** + * Sets the bubble factory function. + * @param {function(!Element, number): !goog.ui.editor.Bubble} + * bubbleFactory Function that creates a bubble for the given bubble parent + * element and z index. + */ +goog.editor.plugins.AbstractBubblePlugin.setBubbleFactory = function( + bubbleFactory) { + goog.editor.plugins.AbstractBubblePlugin.bubbleFactory_ = bubbleFactory; +}; + + +/** + * Map from field id to shared bubble object. + * @type {Object.} + * @private + */ +goog.editor.plugins.AbstractBubblePlugin.bubbleMap_ = {}; + + +/** + * The optional parent of the bubble. If null or not set, we will use the + * application document. This is useful when you have an editor embedded in + * a scrolling DIV. + * @type {Element|undefined} + * @private + */ +goog.editor.plugins.AbstractBubblePlugin.prototype.bubbleParent_; + + +/** + * The id of the panel this plugin added to the shared bubble. Null when + * this plugin doesn't currently have a panel in a bubble. + * @type {string?} + * @private + */ +goog.editor.plugins.AbstractBubblePlugin.prototype.panelId_ = null; + + +/** + * Whether this bubble should support tabbing through the link elements. False + * by default. + * @type {boolean} + * @private + */ +goog.editor.plugins.AbstractBubblePlugin.prototype.keyboardNavigationEnabled_ = + false; + + +/** + * Sets whether the bubble should support tabbing through the link elements. + * @param {boolean} keyboardNavigationEnabled Whether the bubble should support + * tabbing through the link elements. + */ +goog.editor.plugins.AbstractBubblePlugin.prototype.enableKeyboardNavigation = + function(keyboardNavigationEnabled) { + this.keyboardNavigationEnabled_ = keyboardNavigationEnabled; +}; + + +/** + * Sets the bubble parent. + * @param {Element} bubbleParent An element where the bubble will be + * anchored. If null, we will use the application document. This + * is useful when you have an editor embedded in a scrolling div. + */ +goog.editor.plugins.AbstractBubblePlugin.prototype.setBubbleParent = function( + bubbleParent) { + this.bubbleParent_ = bubbleParent; +}; + + +/** + * @return {goog.dom.DomHelper} The dom helper for the bubble window. + */ +goog.editor.plugins.AbstractBubblePlugin.prototype.getBubbleDom = function() { + return this.dom_; +}; + + +/** @override */ +goog.editor.plugins.AbstractBubblePlugin.prototype.getTrogClassId = + goog.functions.constant('AbstractBubblePlugin'); + + +/** + * Returns the element whose properties the bubble manipulates. + * @return {Element} The target element. + */ +goog.editor.plugins.AbstractBubblePlugin.prototype.getTargetElement = + function() { + return this.targetElement_; +}; + + +/** @override */ +goog.editor.plugins.AbstractBubblePlugin.prototype.handleKeyUp = function(e) { + // For example, when an image is selected, pressing any key overwrites + // the image and the panel should be hidden. + // Therefore we need to track key presses when the bubble is showing. + if (this.isVisible()) { + this.handleSelectionChange(); + } + return false; +}; + + +/** + * Pops up a property bubble for the given selection if appropriate and closes + * open property bubbles if no longer needed. This should not be overridden. + * @override + */ +goog.editor.plugins.AbstractBubblePlugin.prototype.handleSelectionChange = + function(opt_e, opt_target) { + var selectedElement; + if (opt_e) { + selectedElement = /** @type {Element} */ (opt_e.target); + } else if (opt_target) { + selectedElement = /** @type {Element} */ (opt_target); + } else { + var range = this.getFieldObject().getRange(); + if (range) { + var startNode = range.getStartNode(); + var endNode = range.getEndNode(); + var startOffset = range.getStartOffset(); + var endOffset = range.getEndOffset(); + // Sometimes in IE, the range will be collapsed, but think the end node + // and start node are different (although in the same visible position). + // In this case, favor the position IE thinks is the start node. + if (goog.userAgent.IE && range.isCollapsed() && startNode != endNode) { + range = goog.dom.Range.createCaret(startNode, startOffset); + } + if (startNode.nodeType == goog.dom.NodeType.ELEMENT && + startNode == endNode && startOffset == endOffset - 1) { + var element = startNode.childNodes[startOffset]; + if (element.nodeType == goog.dom.NodeType.ELEMENT) { + selectedElement = element; + } + } + } + selectedElement = selectedElement || range && range.getContainerElement(); + } + return this.handleSelectionChangeInternal(selectedElement); +}; + + +/** + * Pops up a property bubble for the given selection if appropriate and closes + * open property bubbles if no longer needed. + * @param {Element?} selectedElement The selected element. + * @return {boolean} Always false, allowing every bubble plugin to handle the + * event. + * @protected + */ +goog.editor.plugins.AbstractBubblePlugin.prototype. + handleSelectionChangeInternal = function(selectedElement) { + if (selectedElement) { + var bubbleTarget = this.getBubbleTargetFromSelection(selectedElement); + if (bubbleTarget) { + if (bubbleTarget != this.targetElement_ || !this.panelId_) { + // Make sure any existing panel of the same type is closed before + // creating a new one. + if (this.panelId_) { + this.closeBubble(); + } + this.createBubble(bubbleTarget); + } + return false; + } + } + + if (this.panelId_) { + this.closeBubble(); + } + + return false; +}; + + +/** + * Should be overriden by subclasses to return the bubble target element or + * null if an element of their required type isn't found. + * @param {Element} selectedElement The target of the selection change event or + * the parent container of the current entire selection. + * @return {Element?} The HTML bubble target element or null if no element of + * the required type is not found. + */ +goog.editor.plugins.AbstractBubblePlugin.prototype. + getBubbleTargetFromSelection = goog.abstractMethod; + + +/** @override */ +goog.editor.plugins.AbstractBubblePlugin.prototype.disable = function(field) { + // When the field is made uneditable, dispose of the bubble. We do this + // because the next time the field is made editable again it may be in + // a different document / iframe. + if (field.isUneditable()) { + var bubble = goog.editor.plugins.AbstractBubblePlugin.bubbleMap_[field.id]; + if (bubble) { + bubble.dispose(); + delete goog.editor.plugins.AbstractBubblePlugin.bubbleMap_[field.id]; + } + } +}; + + +/** + * @return {goog.ui.editor.Bubble} The shared bubble object for the field this + * plugin is registered on. Creates it if necessary. + * @private + */ +goog.editor.plugins.AbstractBubblePlugin.prototype.getSharedBubble_ = + function() { + var bubbleParent = /** @type {!Element} */ (this.bubbleParent_ || + this.getFieldObject().getAppWindow().document.body); + this.dom_ = goog.dom.getDomHelper(bubbleParent); + + var bubble = goog.editor.plugins.AbstractBubblePlugin.bubbleMap_[ + this.getFieldObject().id]; + if (!bubble) { + bubble = goog.editor.plugins.AbstractBubblePlugin.bubbleFactory_.call(null, + bubbleParent, + this.getFieldObject().getBaseZindex()); + goog.editor.plugins.AbstractBubblePlugin.bubbleMap_[ + this.getFieldObject().id] = bubble; + } + return bubble; +}; + + +/** + * Creates and shows the property bubble. + * @param {Element} targetElement The target element of the bubble. + */ +goog.editor.plugins.AbstractBubblePlugin.prototype.createBubble = function( + targetElement) { + var bubble = this.getSharedBubble_(); + if (!bubble.hasPanelOfType(this.getBubbleType())) { + this.targetElement_ = targetElement; + + this.panelId_ = bubble.addPanel(this.getBubbleType(), this.getBubbleTitle(), + targetElement, + goog.bind(this.createBubbleContents, this), + this.shouldPreferBubbleAboveElement()); + this.eventRegister.listen(bubble, goog.ui.Component.EventType.HIDE, + this.handlePanelClosed_); + + this.onShow(); + + if (this.keyboardNavigationEnabled_) { + this.eventRegister.listen(bubble.getContentElement(), + goog.events.EventType.KEYDOWN, this.onBubbleKey_); + } + } +}; + + +/** + * @return {string} The type of bubble shown by this plugin. Usually the tag + * name of the element this bubble targets. + * @protected + */ +goog.editor.plugins.AbstractBubblePlugin.prototype.getBubbleType = function() { + return ''; +}; + + +/** + * @return {string} The title for bubble shown by this plugin. Defaults to no + * title. Should be overridden by subclasses. + * @protected + */ +goog.editor.plugins.AbstractBubblePlugin.prototype.getBubbleTitle = function() { + return ''; +}; + + +/** + * @return {boolean} Whether the bubble should prefer placement above the + * target element. + * @protected + */ +goog.editor.plugins.AbstractBubblePlugin.prototype. + shouldPreferBubbleAboveElement = goog.functions.FALSE; + + +/** + * Should be overriden by subclasses to add the type specific contents to the + * bubble. + * @param {Element} bubbleContainer The container element of the bubble to + * which the contents should be added. + * @protected + */ +goog.editor.plugins.AbstractBubblePlugin.prototype.createBubbleContents = + goog.abstractMethod; + + +/** + * Register the handler for the target's CLICK event. + * @param {Element} target The event source element. + * @param {Function} handler The event handler. + * @protected + * @deprecated Use goog.editor.plugins.AbstractBubblePlugin. + * registerActionHandler to register click and enter events. + */ +goog.editor.plugins.AbstractBubblePlugin.prototype.registerClickHandler = + function(target, handler) { + this.registerActionHandler(target, handler); +}; + + +/** + * Register the handler for the target's CLICK and ENTER key events. + * @param {Element} target The event source element. + * @param {Function} handler The event handler. + * @protected + */ +goog.editor.plugins.AbstractBubblePlugin.prototype.registerActionHandler = + function(target, handler) { + this.eventRegister.listenWithWrapper(target, goog.events.actionEventWrapper, + handler); +}; + + +/** + * Closes the bubble. + */ +goog.editor.plugins.AbstractBubblePlugin.prototype.closeBubble = function() { + if (this.panelId_) { + this.getSharedBubble_().removePanel(this.panelId_); + this.handlePanelClosed_(); + } +}; + + +/** + * Called after the bubble is shown. The default implementation does nothing. + * Override it to provide your own one. + * @protected + */ +goog.editor.plugins.AbstractBubblePlugin.prototype.onShow = goog.nullFunction; + + +/** + * Handles when the bubble panel is closed. Invoked when the entire bubble is + * hidden and also directly when the panel is closed manually. + * @private + */ +goog.editor.plugins.AbstractBubblePlugin.prototype.handlePanelClosed_ = + function() { + this.targetElement_ = null; + this.panelId_ = null; + this.eventRegister.removeAll(); +}; + + +/** + * In case the keyboard navigation is enabled, this will focus to the first link + * element in the bubble when TAB is clicked. The user could still go through + * the rest of tabbable UI elements using shift + TAB. + * @override + */ +goog.editor.plugins.AbstractBubblePlugin.prototype.handleKeyDown = function(e) { + if (this.keyboardNavigationEnabled_ && + this.isVisible() && + e.keyCode == goog.events.KeyCodes.TAB && !e.shiftKey) { + var bubbleEl = this.getSharedBubble_().getContentElement(); + var linkEl = goog.dom.getElementByClass( + goog.editor.plugins.AbstractBubblePlugin.LINK_CLASSNAME_, bubbleEl); + if (linkEl) { + linkEl.focus(); + e.preventDefault(); + return true; + } + } + return false; +}; + + +/** + * Handles a key event on the bubble. This ensures that the focus loops through + * the link elements found in the bubble and then the focus is got by the field + * element. + * @param {goog.events.BrowserEvent} e The event. + * @private + */ +goog.editor.plugins.AbstractBubblePlugin.prototype.onBubbleKey_ = function(e) { + if (this.isVisible() && + e.keyCode == goog.events.KeyCodes.TAB) { + var bubbleEl = this.getSharedBubble_().getContentElement(); + var links = goog.dom.getElementsByClass( + goog.editor.plugins.AbstractBubblePlugin.LINK_CLASSNAME_, bubbleEl); + var tabbingOutOfBubble = e.shiftKey ? + links[0] == e.target : + links.length && links[links.length - 1] == e.target; + if (tabbingOutOfBubble) { + this.getFieldObject().focus(); + e.preventDefault(); + } + } +}; + + +/** + * @return {boolean} Whether the bubble is visible. + */ +goog.editor.plugins.AbstractBubblePlugin.prototype.isVisible = function() { + return !!this.panelId_; +}; + + +/** + * Reposition the property bubble. + */ +goog.editor.plugins.AbstractBubblePlugin.prototype.reposition = function() { + var bubble = this.getSharedBubble_(); + if (bubble) { + bubble.reposition(); + } +}; + + +/** + * Helper method that creates option links (such as edit, test, remove) + * @param {string} id String id for the span id. + * @return {Element} The option link element. + * @protected + */ +goog.editor.plugins.AbstractBubblePlugin.prototype.createLinkOption = function( + id) { + // Dash plus link are together in a span so we can hide/show them easily + return this.dom_.createDom(goog.dom.TagName.SPAN, + { + id: id, + className: + goog.editor.plugins.AbstractBubblePlugin.OPTION_LINK_CLASSNAME_ + }, + this.dom_.createTextNode( + goog.editor.plugins.AbstractBubblePlugin.DASH_NBSP_STRING)); +}; + + +/** + * Helper method that creates a link with text set to linkText and optionaly + * wires up a listener for the CLICK event or the link. + * @param {string} linkId The id of the link. + * @param {string} linkText Text of the link. + * @param {Function=} opt_onClick Optional function to call when the link is + * clicked. + * @param {Element=} opt_container If specified, location to insert link. If no + * container is specified, the old link is removed and replaced. + * @return {Element} The link element. + * @protected + */ +goog.editor.plugins.AbstractBubblePlugin.prototype.createLink = function( + linkId, linkText, opt_onClick, opt_container) { + var link = this.createLinkHelper(linkId, linkText, false, opt_container); + if (opt_onClick) { + this.registerActionHandler(link, opt_onClick); + } + return link; +}; + + +/** + * Helper method to create a link to insert into the bubble. + * @param {string} linkId The id of the link. + * @param {string} linkText Text of the link. + * @param {boolean} isAnchor Set to true to create an actual anchor tag + * instead of a span. Actual links are right clickable (e.g. to open in + * a new window) and also update window status on hover. + * @param {Element=} opt_container If specified, location to insert link. If no + * container is specified, the old link is removed and replaced. + * @return {Element} The link element. + * @protected + */ +goog.editor.plugins.AbstractBubblePlugin.prototype.createLinkHelper = function( + linkId, linkText, isAnchor, opt_container) { + var link = this.dom_.createDom( + isAnchor ? goog.dom.TagName.A : goog.dom.TagName.SPAN, + {className: goog.editor.plugins.AbstractBubblePlugin.LINK_CLASSNAME_}, + linkText); + if (this.keyboardNavigationEnabled_) { + link.setAttribute('tabindex', 0); + } + link.setAttribute('role', 'link'); + this.setupLink(link, linkId, opt_container); + goog.editor.style.makeUnselectable(link, this.eventRegister); + return link; +}; + + +/** + * Inserts a link in the given container if it is specified or removes + * the old link with this id and replaces it with the new link + * @param {Element} link Html element to insert. + * @param {string} linkId Id of the link. + * @param {Element=} opt_container If specified, location to insert link. + * @protected + */ +goog.editor.plugins.AbstractBubblePlugin.prototype.setupLink = function( + link, linkId, opt_container) { + if (opt_container) { + opt_container.appendChild(link); + } else { + var oldLink = this.dom_.getElement(linkId); + if (oldLink) { + goog.dom.replaceNode(link, oldLink); + } + } + + link.id = linkId; +}; diff --git a/float-no-zero/closure-library/closure/goog/editor/plugins/abstractdialogplugin.js b/float-no-zero/closure-library/closure/goog/editor/plugins/abstractdialogplugin.js new file mode 100644 index 0000000000..954e1e2b3d --- /dev/null +++ b/float-no-zero/closure-library/closure/goog/editor/plugins/abstractdialogplugin.js @@ -0,0 +1,334 @@ +// Copyright 2008 The Closure Library Authors. All Rights Reserved. +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS-IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +/** + * @fileoverview An abstract superclass for TrogEdit dialog plugins. Each + * Trogedit dialog has its own plugin. + * + * @author nicksantos@google.com (Nick Santos) + * @author marcosalmeida@google.com (Marcos Almeida) + */ + +goog.provide('goog.editor.plugins.AbstractDialogPlugin'); +goog.provide('goog.editor.plugins.AbstractDialogPlugin.EventType'); + +goog.require('goog.dom'); +goog.require('goog.dom.Range'); +goog.require('goog.editor.Field.EventType'); +goog.require('goog.editor.Plugin'); +goog.require('goog.editor.range'); +goog.require('goog.events'); +goog.require('goog.ui.editor.AbstractDialog.EventType'); + + +// *** Public interface ***************************************************** // + + + +/** + * An abstract superclass for a Trogedit plugin that creates exactly one + * dialog. By default dialogs are not reused -- each time execCommand is called, + * a new instance of the dialog object is created (and the old one disposed of). + * To enable reusing of the dialog object, subclasses should call + * setReuseDialog() after calling the superclass constructor. + * @param {string} command The command that this plugin handles. + * @constructor + * @extends {goog.editor.Plugin} + */ +goog.editor.plugins.AbstractDialogPlugin = function(command) { + goog.editor.Plugin.call(this); + this.command_ = command; +}; +goog.inherits(goog.editor.plugins.AbstractDialogPlugin, goog.editor.Plugin); + + +/** @override */ +goog.editor.plugins.AbstractDialogPlugin.prototype.isSupportedCommand = + function(command) { + return command == this.command_; +}; + + +/** + * Handles execCommand. Dialog plugins don't make any changes when they open a + * dialog, just when the dialog closes (because only modal dialogs are + * supported). Hence this method does not dispatch the change events that the + * superclass method does. + * @param {string} command The command to execute. + * @param {...*} var_args Any additional parameters needed to + * execute the command. + * @return {*} The result of the execCommand, if any. + * @override + */ +goog.editor.plugins.AbstractDialogPlugin.prototype.execCommand = function( + command, var_args) { + return this.execCommandInternal.apply(this, arguments); +}; + + +// *** Events *************************************************************** // + + +/** + * Event type constants for events the dialog plugins fire. + * @enum {string} + */ +goog.editor.plugins.AbstractDialogPlugin.EventType = { + // This event is fired when a dialog has been opened. + OPENED: 'dialogOpened', + // This event is fired when a dialog has been closed. + CLOSED: 'dialogClosed' +}; + + +// *** Protected interface ************************************************** // + + +/** + * Creates a new instance of this plugin's dialog. Must be overridden by + * subclasses. + * @param {!goog.dom.DomHelper} dialogDomHelper The dom helper to be used to + * create the dialog. + * @param {*=} opt_arg The dialog specific argument. Concrete subclasses should + * declare a specific type. + * @return {goog.ui.editor.AbstractDialog} The newly created dialog. + * @protected + */ +goog.editor.plugins.AbstractDialogPlugin.prototype.createDialog = + goog.abstractMethod; + + +/** + * Returns the current dialog that was created and opened by this plugin. + * @return {goog.ui.editor.AbstractDialog} The current dialog that was created + * and opened by this plugin. + * @protected + */ +goog.editor.plugins.AbstractDialogPlugin.prototype.getDialog = function() { + return this.dialog_; +}; + + +/** + * Sets whether this plugin should reuse the same instance of the dialog each + * time execCommand is called or create a new one. This is intended for use by + * subclasses only, hence protected. + * @param {boolean} reuse Whether to reuse the dialog. + * @protected + */ +goog.editor.plugins.AbstractDialogPlugin.prototype.setReuseDialog = + function(reuse) { + this.reuseDialog_ = reuse; +}; + + +/** + * Handles execCommand by opening the dialog. Dispatches + * {@link goog.editor.plugins.AbstractDialogPlugin.EventType.OPENED} after the + * dialog is shown. + * @param {string} command The command to execute. + * @param {*=} opt_arg The dialog specific argument. Should be the same as + * {@link createDialog}. + * @return {*} Always returns true, indicating the dialog was shown. + * @protected + * @override + */ +goog.editor.plugins.AbstractDialogPlugin.prototype.execCommandInternal = + function(command, opt_arg) { + // If this plugin should not reuse dialog instances, first dispose of the + // previous dialog. + if (!this.reuseDialog_) { + this.disposeDialog_(); + } + // If there is no dialog yet (or we aren't reusing the previous one), create + // one. + if (!this.dialog_) { + this.dialog_ = this.createDialog( + // TODO(user): Add Field.getAppDomHelper. (Note dom helper will + // need to be updated if setAppWindow is called by clients.) + goog.dom.getDomHelper(this.getFieldObject().getAppWindow()), + opt_arg); + } + + // Since we're opening a dialog, we need to clear the selection because the + // focus will be going to the dialog, and if we leave an selection in the + // editor while another selection is active in the dialog as the user is + // typing, some browsers will screw up the original selection. But first we + // save it so we can restore it when the dialog closes. + // getRange may return null if there is no selection in the field. + var tempRange = this.getFieldObject().getRange(); + // saveUsingDom() did not work as well as saveUsingNormalizedCarets(), + // not sure why. + this.savedRange_ = tempRange && goog.editor.range.saveUsingNormalizedCarets( + tempRange); + goog.dom.Range.clearSelection( + this.getFieldObject().getEditableDomHelper().getWindow()); + + // Listen for the dialog closing so we can clean up. + goog.events.listenOnce(this.dialog_, + goog.ui.editor.AbstractDialog.EventType.AFTER_HIDE, + this.handleAfterHide, + false, + this); + + this.getFieldObject().setModalMode(true); + this.dialog_.show(); + this.dispatchEvent(goog.editor.plugins.AbstractDialogPlugin.EventType.OPENED); + + // Since the selection has left the document, dispatch a selection + // change event. + this.getFieldObject().dispatchSelectionChangeEvent(); + + return true; +}; + + +/** + * Cleans up after the dialog has closed, including restoring the selection to + * what it was before the dialog was opened. If a subclass modifies the editable + * field's content such that the original selection is no longer valid (usually + * the case when the user clicks OK, and sometimes also on Cancel), it is that + * subclass' responsibility to place the selection in the desired place during + * the OK or Cancel (or other) handler. In that case, this method will leave the + * selection in place. + * @param {goog.events.Event} e The AFTER_HIDE event object. + * @protected + */ +goog.editor.plugins.AbstractDialogPlugin.prototype.handleAfterHide = function( + e) { + this.getFieldObject().setModalMode(false); + this.restoreOriginalSelection(); + + if (!this.reuseDialog_) { + this.disposeDialog_(); + } + + this.dispatchEvent(goog.editor.plugins.AbstractDialogPlugin.EventType.CLOSED); + + // Since the selection has returned to the document, dispatch a selection + // change event. + this.getFieldObject().dispatchSelectionChangeEvent(); + + // When the dialog closes due to pressing enter or escape, that happens on the + // keydown event. But the browser will still fire a keyup event after that, + // which is caught by the editable field and causes it to try to fire a + // selection change event. To avoid that, we "debounce" the selection change + // event, meaning the editable field will not fire that event if the keyup + // that caused it immediately after this dialog was hidden ("immediately" + // means a small number of milliseconds defined by the editable field). + this.getFieldObject().debounceEvent( + goog.editor.Field.EventType.SELECTIONCHANGE); +}; + + +/** + * Restores the selection in the editable field to what it was before the dialog + * was opened. This is not guaranteed to work if the contents of the field + * have changed. + * @protected + */ +goog.editor.plugins.AbstractDialogPlugin.prototype.restoreOriginalSelection = + function() { + this.getFieldObject().restoreSavedRange(this.savedRange_); + this.savedRange_ = null; +}; + + +/** + * Cleans up the structure used to save the original selection before the dialog + * was opened. Should be used by subclasses that don't restore the original + * selection via restoreOriginalSelection. + * @protected + */ +goog.editor.plugins.AbstractDialogPlugin.prototype.disposeOriginalSelection = + function() { + if (this.savedRange_) { + this.savedRange_.dispose(); + this.savedRange_ = null; + } +}; + + +/** @override */ +goog.editor.plugins.AbstractDialogPlugin.prototype.disposeInternal = + function() { + this.disposeDialog_(); + goog.base(this, 'disposeInternal'); +}; + + +// *** Private implementation *********************************************** // + + +/** + * The command that this plugin handles. + * @type {string} + * @private + */ +goog.editor.plugins.AbstractDialogPlugin.prototype.command_; + + +/** + * The current dialog that was created and opened by this plugin. + * @type {goog.ui.editor.AbstractDialog} + * @private + */ +goog.editor.plugins.AbstractDialogPlugin.prototype.dialog_; + + +/** + * Whether this plugin should reuse the same instance of the dialog each time + * execCommand is called or create a new one. + * @type {boolean} + * @private + */ +goog.editor.plugins.AbstractDialogPlugin.prototype.reuseDialog_ = false; + + +/** + * Mutex to prevent recursive calls to disposeDialog_. + * @type {boolean} + * @private + */ +goog.editor.plugins.AbstractDialogPlugin.prototype.isDisposingDialog_ = false; + + +/** + * SavedRange representing the selection before the dialog was opened. + * @type {goog.dom.SavedRange} + * @private + */ +goog.editor.plugins.AbstractDialogPlugin.prototype.savedRange_; + + +/** + * Disposes of the dialog if needed. It is this abstract class' responsibility + * to dispose of the dialog. The "if needed" refers to the fact this method + * might be called twice (nested calls, not sequential) in the dispose flow, so + * if the dialog was already disposed once it should not be disposed again. + * @private + */ +goog.editor.plugins.AbstractDialogPlugin.prototype.disposeDialog_ = function() { + // Wrap disposing the dialog in a mutex. Otherwise disposing it would cause it + // to get hidden (if it is still open) and fire AFTER_HIDE, which in + // turn would cause the dialog to be disposed again (closure only flags an + // object as disposed after the dispose call chain completes, so it doesn't + // prevent recursive dispose calls). + if (this.dialog_ && !this.isDisposingDialog_) { + this.isDisposingDialog_ = true; + this.dialog_.dispose(); + this.dialog_ = null; + this.isDisposingDialog_ = false; + } +}; diff --git a/float-no-zero/closure-library/closure/goog/editor/plugins/abstracttabhandler.js b/float-no-zero/closure-library/closure/goog/editor/plugins/abstracttabhandler.js new file mode 100644 index 0000000000..e5668199d7 --- /dev/null +++ b/float-no-zero/closure-library/closure/goog/editor/plugins/abstracttabhandler.js @@ -0,0 +1,78 @@ +// Copyright 2008 The Closure Library Authors. All Rights Reserved. +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS-IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +/** + * @fileoverview Abstract Editor plugin class to handle tab keys. Has one + * abstract method which should be overriden to handle a tab key press. + * + * @author robbyw@google.com (Robby Walker) + * @author ajp@google.com (Andy Perelson) + */ + +goog.provide('goog.editor.plugins.AbstractTabHandler'); + +goog.require('goog.editor.Plugin'); +goog.require('goog.events.KeyCodes'); + + + +/** + * Plugin to handle tab keys. Specific tab behavior defined by subclasses. + * + * @constructor + * @extends {goog.editor.Plugin} + */ +goog.editor.plugins.AbstractTabHandler = function() { + goog.editor.Plugin.call(this); +}; +goog.inherits(goog.editor.plugins.AbstractTabHandler, goog.editor.Plugin); + + +/** @override */ +goog.editor.plugins.AbstractTabHandler.prototype.getTrogClassId = + goog.abstractMethod; + + +/** @override */ +goog.editor.plugins.AbstractTabHandler.prototype.handleKeyboardShortcut = + function(e, key, isModifierPressed) { + // If a dialog doesn't have selectable field, Moz grabs the event and + // performs actions in editor window. This solves that problem and allows + // the event to be passed on to proper handlers. + if (goog.userAgent.GECKO && this.getFieldObject().inModalMode()) { + return false; + } + + // Don't handle Ctrl+Tab since the user is most likely trying to switch + // browser tabs. See bug 1305086. + // FF3 on Mac sends Ctrl-Tab to trogedit and we end up inserting a tab, but + // then it also switches the tabs. See bug 1511681. Note that we don't use + // isModifierPressed here since isModifierPressed is true only if metaKey + // is true on Mac. + if (e.keyCode == goog.events.KeyCodes.TAB && !e.metaKey && !e.ctrlKey) { + return this.handleTabKey(e); + } + + return false; +}; + + +/** + * Handle a tab key press. + * @param {goog.events.Event} e The key event. + * @return {boolean} Whether this event was handled by this plugin. + * @protected + */ +goog.editor.plugins.AbstractTabHandler.prototype.handleTabKey = + goog.abstractMethod; diff --git a/float-no-zero/closure-library/closure/goog/editor/plugins/basictextformatter.js b/float-no-zero/closure-library/closure/goog/editor/plugins/basictextformatter.js new file mode 100644 index 0000000000..d765d51427 --- /dev/null +++ b/float-no-zero/closure-library/closure/goog/editor/plugins/basictextformatter.js @@ -0,0 +1,1750 @@ +// Copyright 2006 The Closure Library Authors. All Rights Reserved. +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS-IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +/** + * @fileoverview Functions to style text. + * + */ + +goog.provide('goog.editor.plugins.BasicTextFormatter'); +goog.provide('goog.editor.plugins.BasicTextFormatter.COMMAND'); + +goog.require('goog.array'); +goog.require('goog.dom'); +goog.require('goog.dom.NodeType'); +goog.require('goog.dom.Range'); +goog.require('goog.dom.TagName'); +goog.require('goog.editor.BrowserFeature'); +goog.require('goog.editor.Command'); +goog.require('goog.editor.Link'); +goog.require('goog.editor.Plugin'); +goog.require('goog.editor.node'); +goog.require('goog.editor.range'); +goog.require('goog.editor.style'); +goog.require('goog.iter'); +goog.require('goog.iter.StopIteration'); +goog.require('goog.log'); +goog.require('goog.object'); +goog.require('goog.string'); +goog.require('goog.string.Unicode'); +goog.require('goog.style'); +goog.require('goog.ui.editor.messages'); +goog.require('goog.userAgent'); + + + +/** + * Functions to style text (e.g. underline, make bold, etc.) + * @constructor + * @extends {goog.editor.Plugin} + */ +goog.editor.plugins.BasicTextFormatter = function() { + goog.editor.Plugin.call(this); +}; +goog.inherits(goog.editor.plugins.BasicTextFormatter, goog.editor.Plugin); + + +/** @override */ +goog.editor.plugins.BasicTextFormatter.prototype.getTrogClassId = function() { + return 'BTF'; +}; + + +/** + * Logging object. + * @type {goog.log.Logger} + * @protected + * @override + */ +goog.editor.plugins.BasicTextFormatter.prototype.logger = + goog.log.getLogger('goog.editor.plugins.BasicTextFormatter'); + + +/** + * Commands implemented by this plugin. + * @enum {string} + */ +goog.editor.plugins.BasicTextFormatter.COMMAND = { + LINK: '+link', + FORMAT_BLOCK: '+formatBlock', + INDENT: '+indent', + OUTDENT: '+outdent', + STRIKE_THROUGH: '+strikeThrough', + HORIZONTAL_RULE: '+insertHorizontalRule', + SUBSCRIPT: '+subscript', + SUPERSCRIPT: '+superscript', + UNDERLINE: '+underline', + BOLD: '+bold', + ITALIC: '+italic', + FONT_SIZE: '+fontSize', + FONT_FACE: '+fontName', + FONT_COLOR: '+foreColor', + BACKGROUND_COLOR: '+backColor', + ORDERED_LIST: '+insertOrderedList', + UNORDERED_LIST: '+insertUnorderedList', + JUSTIFY_CENTER: '+justifyCenter', + JUSTIFY_FULL: '+justifyFull', + JUSTIFY_RIGHT: '+justifyRight', + JUSTIFY_LEFT: '+justifyLeft' +}; + + +/** + * Inverse map of execCommand strings to + * {@link goog.editor.plugins.BasicTextFormatter.COMMAND} constants. Used to + * determine whether a string corresponds to a command this plugin + * handles in O(1) time. + * @type {Object} + * @private + */ +goog.editor.plugins.BasicTextFormatter.SUPPORTED_COMMANDS_ = + goog.object.transpose(goog.editor.plugins.BasicTextFormatter.COMMAND); + + +/** + * Whether the string corresponds to a command this plugin handles. + * @param {string} command Command string to check. + * @return {boolean} Whether the string corresponds to a command + * this plugin handles. + * @override + */ +goog.editor.plugins.BasicTextFormatter.prototype.isSupportedCommand = function( + command) { + // TODO(user): restore this to simple check once table editing + // is moved out into its own plugin + return command in goog.editor.plugins.BasicTextFormatter.SUPPORTED_COMMANDS_; +}; + + +/** + * @return {goog.dom.AbstractRange} The closure range object that wraps the + * current user selection. + * @private + */ +goog.editor.plugins.BasicTextFormatter.prototype.getRange_ = function() { + return this.getFieldObject().getRange(); +}; + + +/** + * @return {Document} The document object associated with the currently active + * field. + * @private + */ +goog.editor.plugins.BasicTextFormatter.prototype.getDocument_ = function() { + return this.getFieldDomHelper().getDocument(); +}; + + +/** + * Execute a user-initiated command. + * @param {string} command Command to execute. + * @param {...*} var_args For color commands, this + * should be the hex color (with the #). For FORMAT_BLOCK, this should be + * the goog.editor.plugins.BasicTextFormatter.BLOCK_COMMAND. + * It will be unused for other commands. + * @return {Object|undefined} The result of the command. + * @override + */ +goog.editor.plugins.BasicTextFormatter.prototype.execCommandInternal = function( + command, var_args) { + var preserveDir, styleWithCss, needsFormatBlockDiv, hasDummySelection; + var result; + var opt_arg = arguments[1]; + + switch (command) { + case goog.editor.plugins.BasicTextFormatter.COMMAND.BACKGROUND_COLOR: + // Don't bother for no color selected, color picker is resetting itself. + if (!goog.isNull(opt_arg)) { + if (goog.editor.BrowserFeature.EATS_EMPTY_BACKGROUND_COLOR) { + this.applyBgColorManually_(opt_arg); + } else if (goog.userAgent.OPERA) { + // backColor will color the block level element instead of + // the selected span of text in Opera. + this.execCommandHelper_('hiliteColor', opt_arg); + } else { + this.execCommandHelper_(command, opt_arg); + } + } + break; + + case goog.editor.plugins.BasicTextFormatter.COMMAND.LINK: + result = this.toggleLink_(opt_arg); + break; + + case goog.editor.plugins.BasicTextFormatter.COMMAND.JUSTIFY_CENTER: + case goog.editor.plugins.BasicTextFormatter.COMMAND.JUSTIFY_FULL: + case goog.editor.plugins.BasicTextFormatter.COMMAND.JUSTIFY_RIGHT: + case goog.editor.plugins.BasicTextFormatter.COMMAND.JUSTIFY_LEFT: + this.justify_(command); + break; + + default: + if (goog.userAgent.IE && + command == + goog.editor.plugins.BasicTextFormatter.COMMAND.FORMAT_BLOCK && + opt_arg) { + // IE requires that the argument be in the form of an opening + // tag, like

, including angle brackets. WebKit will accept + // the arguemnt with or without brackets, and Firefox pre-3 supports + // only a fixed subset of tags with brackets, and prefers without. + // So we only add them IE only. + opt_arg = '<' + opt_arg + '>'; + } + + if (command == + goog.editor.plugins.BasicTextFormatter.COMMAND.FONT_COLOR && + goog.isNull(opt_arg)) { + // If we don't have a color, then FONT_COLOR is a no-op. + break; + } + + switch (command) { + case goog.editor.plugins.BasicTextFormatter.COMMAND.INDENT: + case goog.editor.plugins.BasicTextFormatter.COMMAND.OUTDENT: + if (goog.editor.BrowserFeature.HAS_STYLE_WITH_CSS) { + if (goog.userAgent.GECKO) { + styleWithCss = true; + } + if (goog.userAgent.OPERA) { + if (command == + goog.editor.plugins.BasicTextFormatter.COMMAND.OUTDENT) { + // styleWithCSS actually sets negative margins on
+ // to outdent them. If the command is enabled without + // styleWithCSS flipped on, then the caret is in a blockquote so + // styleWithCSS must not be used. But if the command is not + // enabled, styleWithCSS should be used so that elements such as + // a
with a margin-left style can still be outdented. + // (Opera bug: CORE-21118) + styleWithCss = + !this.getDocument_().queryCommandEnabled('outdent'); + } else { + // Always use styleWithCSS for indenting. Otherwise, Opera will + // make separate
s around *each* indented line, + // which adds big default
margins between each + // indented line. + styleWithCss = true; + } + } + } + // Fall through. + + case goog.editor.plugins.BasicTextFormatter.COMMAND.ORDERED_LIST: + case goog.editor.plugins.BasicTextFormatter.COMMAND.UNORDERED_LIST: + if (goog.editor.BrowserFeature.LEAVES_P_WHEN_REMOVING_LISTS && + this.queryCommandStateInternal_(this.getDocument_(), + command)) { + // IE leaves behind P tags when unapplying lists. + // If we're not in P-mode, then we want divs + // So, unlistify, then convert the Ps into divs. + needsFormatBlockDiv = this.getFieldObject().queryCommandValue( + goog.editor.Command.DEFAULT_TAG) != goog.dom.TagName.P; + } else if (!goog.editor.BrowserFeature.CAN_LISTIFY_BR) { + // IE doesn't convert BRed line breaks into separate list items. + // So convert the BRs to divs, then do the listify. + this.convertBreaksToDivs_(); + } + + // This fix only works in Gecko. + if (goog.userAgent.GECKO && + goog.editor.BrowserFeature.FORGETS_FORMATTING_WHEN_LISTIFYING && + !this.queryCommandValue(command)) { + hasDummySelection |= this.beforeInsertListGecko_(); + } + // Fall through to preserveDir block + + case goog.editor.plugins.BasicTextFormatter.COMMAND.FORMAT_BLOCK: + // Both FF & IE may lose directionality info. Save/restore it. + // TODO(user): Does Safari also need this? + // TODO (gmark, jparent): This isn't ideal because it uses a string + // literal, so if the plugin name changes, it would break. We need a + // better solution. See also other places in code that use + // this.getPluginByClassId('Bidi'). + preserveDir = !!this.getFieldObject().getPluginByClassId('Bidi'); + break; + + case goog.editor.plugins.BasicTextFormatter.COMMAND.SUBSCRIPT: + case goog.editor.plugins.BasicTextFormatter.COMMAND.SUPERSCRIPT: + if (goog.editor.BrowserFeature.NESTS_SUBSCRIPT_SUPERSCRIPT) { + // This browser nests subscript and superscript when both are + // applied, instead of canceling out the first when applying the + // second. + this.applySubscriptSuperscriptWorkarounds_(command); + } + break; + + case goog.editor.plugins.BasicTextFormatter.COMMAND.UNDERLINE: + case goog.editor.plugins.BasicTextFormatter.COMMAND.BOLD: + case goog.editor.plugins.BasicTextFormatter.COMMAND.ITALIC: + // If we are applying the formatting, then we want to have + // styleWithCSS false so that we generate html tags (like ). If we + // are unformatting something, we want to have styleWithCSS true so + // that we can unformat both html tags and inline styling. + // TODO(user): What about WebKit and Opera? + styleWithCss = goog.userAgent.GECKO && + goog.editor.BrowserFeature.HAS_STYLE_WITH_CSS && + this.queryCommandValue(command); + break; + + case goog.editor.plugins.BasicTextFormatter.COMMAND.FONT_COLOR: + case goog.editor.plugins.BasicTextFormatter.COMMAND.FONT_FACE: + // It is very expensive in FF (order of magnitude difference) to use + // font tags instead of styled spans. Whenever possible, + // force FF to use spans. + // Font size is very expensive too, but FF always uses font tags, + // regardless of which styleWithCSS value you use. + styleWithCss = goog.editor.BrowserFeature.HAS_STYLE_WITH_CSS && + goog.userAgent.GECKO; + } + + /** + * Cases where we just use the default execCommand (in addition + * to the above fall-throughs) + * goog.editor.plugins.BasicTextFormatter.COMMAND.STRIKE_THROUGH: + * goog.editor.plugins.BasicTextFormatter.COMMAND.HORIZONTAL_RULE: + * goog.editor.plugins.BasicTextFormatter.COMMAND.SUBSCRIPT: + * goog.editor.plugins.BasicTextFormatter.COMMAND.SUPERSCRIPT: + * goog.editor.plugins.BasicTextFormatter.COMMAND.UNDERLINE: + * goog.editor.plugins.BasicTextFormatter.COMMAND.BOLD: + * goog.editor.plugins.BasicTextFormatter.COMMAND.ITALIC: + * goog.editor.plugins.BasicTextFormatter.COMMAND.FONT_SIZE: + * goog.editor.plugins.BasicTextFormatter.COMMAND.FONT_FACE: + */ + this.execCommandHelper_(command, opt_arg, preserveDir, !!styleWithCss); + + if (hasDummySelection) { + this.getDocument_().execCommand('Delete', false, true); + } + + if (needsFormatBlockDiv) { + this.getDocument_().execCommand('FormatBlock', false, '
'); + } + } + // FF loses focus, so we have to set the focus back to the document or the + // user can't type after selecting from menu. In IE, focus is set correctly + // and resetting it here messes it up. + if (goog.userAgent.GECKO && !this.getFieldObject().inModalMode()) { + this.focusField_(); + } + return result; +}; + + +/** + * Focuses on the field. + * @private + */ +goog.editor.plugins.BasicTextFormatter.prototype.focusField_ = function() { + this.getFieldDomHelper().getWindow().focus(); +}; + + +/** + * Gets the command value. + * @param {string} command The command value to get. + * @return {string|boolean|null} The current value of the command in the given + * selection. NOTE: This return type list is not documented in MSDN or MDC + * and has been constructed from experience. Please update it + * if necessary. + * @override + */ +goog.editor.plugins.BasicTextFormatter.prototype.queryCommandValue = function( + command) { + var styleWithCss; + switch (command) { + case goog.editor.plugins.BasicTextFormatter.COMMAND.LINK: + return this.isNodeInState_(goog.dom.TagName.A); + + case goog.editor.plugins.BasicTextFormatter.COMMAND.JUSTIFY_CENTER: + case goog.editor.plugins.BasicTextFormatter.COMMAND.JUSTIFY_FULL: + case goog.editor.plugins.BasicTextFormatter.COMMAND.JUSTIFY_RIGHT: + case goog.editor.plugins.BasicTextFormatter.COMMAND.JUSTIFY_LEFT: + return this.isJustification_(command); + + case goog.editor.plugins.BasicTextFormatter.COMMAND.FORMAT_BLOCK: + // TODO(nicksantos): See if we can use queryCommandValue here. + return goog.editor.plugins.BasicTextFormatter.getSelectionBlockState_( + this.getFieldObject().getRange()); + + case goog.editor.plugins.BasicTextFormatter.COMMAND.INDENT: + case goog.editor.plugins.BasicTextFormatter.COMMAND.OUTDENT: + case goog.editor.plugins.BasicTextFormatter.COMMAND.HORIZONTAL_RULE: + // TODO: See if there are reasonable results to return for + // these commands. + return false; + + case goog.editor.plugins.BasicTextFormatter.COMMAND.FONT_SIZE: + case goog.editor.plugins.BasicTextFormatter.COMMAND.FONT_FACE: + case goog.editor.plugins.BasicTextFormatter.COMMAND.FONT_COLOR: + case goog.editor.plugins.BasicTextFormatter.COMMAND.BACKGROUND_COLOR: + // We use queryCommandValue here since we don't just want to know if a + // color/fontface/fontsize is applied, we want to know WHICH one it is. + return this.queryCommandValueInternal_(this.getDocument_(), command, + goog.editor.BrowserFeature.HAS_STYLE_WITH_CSS && + goog.userAgent.GECKO); + + case goog.editor.plugins.BasicTextFormatter.COMMAND.UNDERLINE: + case goog.editor.plugins.BasicTextFormatter.COMMAND.BOLD: + case goog.editor.plugins.BasicTextFormatter.COMMAND.ITALIC: + styleWithCss = goog.editor.BrowserFeature.HAS_STYLE_WITH_CSS && + goog.userAgent.GECKO; + + default: + /** + * goog.editor.plugins.BasicTextFormatter.COMMAND.STRIKE_THROUGH + * goog.editor.plugins.BasicTextFormatter.COMMAND.SUBSCRIPT + * goog.editor.plugins.BasicTextFormatter.COMMAND.SUPERSCRIPT + * goog.editor.plugins.BasicTextFormatter.COMMAND.UNDERLINE + * goog.editor.plugins.BasicTextFormatter.COMMAND.BOLD + * goog.editor.plugins.BasicTextFormatter.COMMAND.ITALIC + * goog.editor.plugins.BasicTextFormatter.COMMAND.ORDERED_LIST + * goog.editor.plugins.BasicTextFormatter.COMMAND.UNORDERED_LIST + */ + // This only works for commands that use the default execCommand + return this.queryCommandStateInternal_(this.getDocument_(), command, + styleWithCss); + } +}; + + +/** + * @override + */ +goog.editor.plugins.BasicTextFormatter.prototype.prepareContentsHtml = + function(html) { + // If the browser collapses empty nodes and the field has only a script + // tag in it, then it will collapse this node. Which will mean the user + // can't click into it to edit it. + if (goog.editor.BrowserFeature.COLLAPSES_EMPTY_NODES && + html.match(/^\s* + + + + + diff --git a/float-no-zero/examples/accessible.js b/float-no-zero/examples/accessible.js new file mode 100644 index 0000000000..0b035bdd41 --- /dev/null +++ b/float-no-zero/examples/accessible.js @@ -0,0 +1,13 @@ +var map = new ol.Map({ + layers: [ + new ol.layer.Tile({ + source: new ol.source.OSM() + }) + ], + renderer: exampleNS.getRendererFromQueryString(), + target: 'map', + view: new ol.View2D({ + center: [0, 0], + zoom: 2 + }) +}); diff --git a/float-no-zero/examples/animation-require.js b/float-no-zero/examples/animation-require.js new file mode 100644 index 0000000000..5e7ecc288b --- /dev/null +++ b/float-no-zero/examples/animation-require.js @@ -0,0 +1,7 @@ +goog.require('ol.Map'); +goog.require('ol.View2D'); +goog.require('ol.animation'); +goog.require('ol.easing'); +goog.require('ol.layer.Tile'); +goog.require('ol.proj'); +goog.require('ol.source.OSM'); diff --git a/float-no-zero/examples/animation.html b/float-no-zero/examples/animation.html new file mode 100644 index 0000000000..3eae57f489 --- /dev/null +++ b/float-no-zero/examples/animation.html @@ -0,0 +1,64 @@ + + + + + + + + + + + Animation example + + + + + +
+ +
+
+
+
+
+ +
+
+ + + + + + + + +
+
+ +
+ +
+

Animation example

+

Demonstrates animated pan, zoom, and rotation.

+
+

See the animation.js source to see how this is done.

+
+
animation
+
+ +
+ +
+ + + + + + + diff --git a/float-no-zero/examples/animation.js b/float-no-zero/examples/animation.js new file mode 100644 index 0000000000..f92a2e2765 --- /dev/null +++ b/float-no-zero/examples/animation.js @@ -0,0 +1,133 @@ +var london = ol.proj.transform([-0.12755, 51.507222], 'EPSG:4326', 'EPSG:3857'); +var moscow = ol.proj.transform([37.6178, 55.7517], 'EPSG:4326', 'EPSG:3857'); +var istanbul = ol.proj.transform([28.9744, 41.0128], 'EPSG:4326', 'EPSG:3857'); +var rome = ol.proj.transform([12.5, 41.9], 'EPSG:4326', 'EPSG:3857'); +var bern = ol.proj.transform([7.4458, 46.95], 'EPSG:4326', 'EPSG:3857'); +var madrid = ol.proj.transform([-3.683333, 40.4], 'EPSG:4326', 'EPSG:3857'); + +var view = new ol.View2D({ + // the view's initial state + center: istanbul, + zoom: 6 +}); + +var map = new ol.Map({ + layers: [ + new ol.layer.Tile({ + preload: 4, + source: new ol.source.OSM() + }) + ], + renderer: exampleNS.getRendererFromQueryString(), + target: 'map', + view: view +}); + +var rotateLeft = document.getElementById('rotate-left'); +rotateLeft.addEventListener('click', function() { + var rotateLeft = ol.animation.rotate({ + duration: 2000, + rotation: -4 * Math.PI + }); + map.beforeRender(rotateLeft); +}, false); +var rotateRight = document.getElementById('rotate-right'); +rotateRight.addEventListener('click', function() { + var rotateRight = ol.animation.rotate({ + duration: 2000, + rotation: 4 * Math.PI + }); + map.beforeRender(rotateRight); +}, false); + + +var panToLondon = document.getElementById('pan-to-london'); +panToLondon.addEventListener('click', function() { + var pan = ol.animation.pan({ + duration: 2000, + source: /** @type {ol.Coordinate} */ (view.getCenter()) + }); + map.beforeRender(pan); + view.setCenter(london); +}, false); + +var elasticToMoscow = document.getElementById('elastic-to-moscow'); +elasticToMoscow.addEventListener('click', function() { + var pan = ol.animation.pan({ + duration: 2000, + easing: ol.easing.elastic, + source: /** @type {ol.Coordinate} */ (view.getCenter()) + }); + map.beforeRender(pan); + view.setCenter(moscow); +}, false); + +var bounceToIstanbul = document.getElementById('bounce-to-istanbul'); +bounceToIstanbul.addEventListener('click', function() { + var pan = ol.animation.pan({ + duration: 2000, + easing: ol.easing.bounce, + source: /** @type {ol.Coordinate} */ (view.getCenter()) + }); + map.beforeRender(pan); + view.setCenter(istanbul); +}, false); + +var spinToRome = document.getElementById('spin-to-rome'); +spinToRome.addEventListener('click', function() { + var duration = 2000; + var start = +new Date(); + var pan = ol.animation.pan({ + duration: duration, + source: /** @type {ol.Coordinate} */ (view.getCenter()), + start: start + }); + var rotate = ol.animation.rotate({ + duration: duration, + rotation: 2 * Math.PI, + start: start + }); + map.beforeRender(pan, rotate); + view.setCenter(rome); +}, false); + +var flyToBern = document.getElementById('fly-to-bern'); +flyToBern.addEventListener('click', function() { + var duration = 2000; + var start = +new Date(); + var pan = ol.animation.pan({ + duration: duration, + source: /** @type {ol.Coordinate} */ (view.getCenter()), + start: start + }); + var bounce = ol.animation.bounce({ + duration: duration, + resolution: 4 * view.getResolution(), + start: start + }); + map.beforeRender(pan, bounce); + view.setCenter(bern); +}, false); + +var spiralToMadrid = document.getElementById('spiral-to-madrid'); +spiralToMadrid.addEventListener('click', function() { + var duration = 2000; + var start = +new Date(); + var pan = ol.animation.pan({ + duration: duration, + source: /** @type {ol.Coordinate} */ (view.getCenter()), + start: start + }); + var bounce = ol.animation.bounce({ + duration: duration, + resolution: 2 * view.getResolution(), + start: start + }); + var rotate = ol.animation.rotate({ + duration: duration, + rotation: -4 * Math.PI, + start: start + }); + map.beforeRender(pan, bounce, rotate); + view.setCenter(madrid); +}, false); diff --git a/float-no-zero/examples/bind-input-require.js b/float-no-zero/examples/bind-input-require.js new file mode 100644 index 0000000000..bdb701005e --- /dev/null +++ b/float-no-zero/examples/bind-input-require.js @@ -0,0 +1,6 @@ +goog.require('ol.BrowserFeature'); +goog.require('ol.Map'); +goog.require('ol.View2D'); +goog.require('ol.dom.Input'); +goog.require('ol.layer.Tile'); +goog.require('ol.source.OSM'); diff --git a/float-no-zero/examples/bind-input.html b/float-no-zero/examples/bind-input.html new file mode 100644 index 0000000000..051351c34e --- /dev/null +++ b/float-no-zero/examples/bind-input.html @@ -0,0 +1,89 @@ + + + + + + + + + + + Bind HTML input example + + + + + +
+ +
+
+
+
+
+ +
+ +
+

Bind HTML input example

+

Demonstrates two-way binding of HTML input elements to OpenLayers objects.

+
+

See the bind-input.js source to see how this is done.

+ +
+
input, bind, openstreetmap
+
+ +
+
+
+ Layer + + + + + + + + + + + +
+
+
+ +
+
+
+ View + + + + +
+
+
+ +
+ +
+ + + + + + + diff --git a/float-no-zero/examples/bind-input.js b/float-no-zero/examples/bind-input.js new file mode 100644 index 0000000000..9d9efd559a --- /dev/null +++ b/float-no-zero/examples/bind-input.js @@ -0,0 +1,57 @@ +if (!ol.BrowserFeature.HAS_WEBGL) { + var inputs = document.getElementsByClassName('webgl'); + for (var i = 0, len = inputs.length; i < len; i++) { + inputs[i].disabled = true; + } + var info = document.getElementById('no-webgl'); + /** + * display warning message + */ + info.style.display = ''; +} + +var layer = new ol.layer.Tile({ + source: new ol.source.OSM() +}); + +var view = new ol.View2D({ + center: [0, 0], + zoom: 2 +}); + +var map = new ol.Map({ + layers: [layer], + renderer: exampleNS.getRendererFromQueryString(), + target: 'map', + view: view +}); + +var visible = new ol.dom.Input(document.getElementById('visible')); +visible.bindTo('checked', layer, 'visible'); + +var opacity = new ol.dom.Input(document.getElementById('opacity')); +opacity.bindTo('value', layer, 'opacity') + .transform(parseFloat, String); + +var hue = new ol.dom.Input(document.getElementById('hue')); +hue.bindTo('value', layer, 'hue') + .transform(parseFloat, String); + +var saturation = new ol.dom.Input(document.getElementById('saturation')); +saturation.bindTo('value', layer, 'saturation') + .transform(parseFloat, String); + +var contrast = new ol.dom.Input(document.getElementById('contrast')); +contrast.bindTo('value', layer, 'contrast') + .transform(parseFloat, String); + +var brightness = new ol.dom.Input(document.getElementById('brightness')); +brightness.bindTo('value', layer, 'brightness') + .transform(parseFloat, String); + + +var rotation = new ol.dom.Input(document.getElementById('rotation')); +rotation.bindTo('value', view, 'rotation').transform(parseFloat, String); + +var resolution = new ol.dom.Input(document.getElementById('resolution')); +resolution.bindTo('value', view, 'resolution').transform(parseFloat, String); diff --git a/float-no-zero/examples/bing-maps-require.js b/float-no-zero/examples/bing-maps-require.js new file mode 100644 index 0000000000..a99a9ac828 --- /dev/null +++ b/float-no-zero/examples/bing-maps-require.js @@ -0,0 +1,4 @@ +goog.require('ol.Map'); +goog.require('ol.View2D'); +goog.require('ol.layer.Tile'); +goog.require('ol.source.BingMaps'); diff --git a/float-no-zero/examples/bing-maps.html b/float-no-zero/examples/bing-maps.html new file mode 100644 index 0000000000..33c8f9cbef --- /dev/null +++ b/float-no-zero/examples/bing-maps.html @@ -0,0 +1,59 @@ + + + + + + + + + + + Bing Maps example + + + + + +
+ +
+
+
+ + +
+
+ +
+ +
+

Bing Maps example

+

Example of a Bing Maps layer.

+
+

See the bing-maps.js source to see how this is done.

+
+
bing, bing-maps
+
+ +
+ +
+ + + + + + + diff --git a/float-no-zero/examples/bing-maps.js b/float-no-zero/examples/bing-maps.js new file mode 100644 index 0000000000..ce4e94cf1b --- /dev/null +++ b/float-no-zero/examples/bing-maps.js @@ -0,0 +1,37 @@ +var styles = [ + 'Road', + 'Aerial', + 'AerialWithLabels', + 'collinsBart', + 'ordnanceSurvey' +]; +var layers = []; +var i, ii; +for (i = 0, ii = styles.length; i < ii; ++i) { + layers.push(new ol.layer.Tile({ + visible: false, + preload: Infinity, + source: new ol.source.BingMaps({ + key: 'Ak-dzM4wZjSqTlzveKz5u0d4IQ4bRzVI309GxmkgSVr1ewS6iPSrOvOKhA-CJlm3', + imagerySet: styles[i] + }) + })); +} +var map = new ol.Map({ + layers: layers, + renderer: exampleNS.getRendererFromQueryString(), + target: 'map', + view: new ol.View2D({ + center: [-6655.5402445057125, 6709968.258934638], + zoom: 13 + }) +}); + +$('#layer-select').change(function() { + var style = $(this).find(':selected').val(); + var i, ii; + for (i = 0, ii = layers.length; i < ii; ++i) { + layers[i].setVisible(styles[i] == style); + } +}); +$('#layer-select').trigger('change'); diff --git a/float-no-zero/examples/brightness-contrast-require.js b/float-no-zero/examples/brightness-contrast-require.js new file mode 100644 index 0000000000..30f445845f --- /dev/null +++ b/float-no-zero/examples/brightness-contrast-require.js @@ -0,0 +1,5 @@ +goog.require('ol.BrowserFeature'); +goog.require('ol.Map'); +goog.require('ol.View2D'); +goog.require('ol.layer.Tile'); +goog.require('ol.source.MapQuest'); diff --git a/float-no-zero/examples/brightness-contrast.html b/float-no-zero/examples/brightness-contrast.html new file mode 100644 index 0000000000..98d62567ec --- /dev/null +++ b/float-no-zero/examples/brightness-contrast.html @@ -0,0 +1,74 @@ + + + + + + + + + + + Brightness/contrast example + + + + + + +
+ +
+
+
+ + + +
+ + + +
+
+ + + +
+
+
+ +
+ +
+

Brightness/contrast example

+

Example of brightness/contrast control on the client (WebGL only).

+
+

See the brightness-contrast.js source to see how this is done.

+
+
brightness, contrast, webgl
+
+ +
+ +
+ + + + + + + diff --git a/float-no-zero/examples/brightness-contrast.js b/float-no-zero/examples/brightness-contrast.js new file mode 100644 index 0000000000..39e266f4b0 --- /dev/null +++ b/float-no-zero/examples/brightness-contrast.js @@ -0,0 +1,68 @@ +function setResetBrightnessButtonHTML() { + resetBrightness.innerHTML = 'Brightness (' + + layer.getBrightness().toFixed(3) + ')'; +} + +function setResetContrastButtonHTML() { + resetContrast.innerHTML = 'Contrast (' + layer.getContrast().toFixed(3) + ')'; +} + +if (!ol.BrowserFeature.HAS_WEBGL) { + var info = document.getElementById('no-webgl'); + /** + * display error message + */ + info.style.display = ''; +} else { + var layer = new ol.layer.Tile({ + source: new ol.source.MapQuest({layer: 'sat'}) + }); + + var map = new ol.Map({ + layers: [layer], + renderer: 'webgl', + target: 'map', + view: new ol.View2D({ + center: [0, 0], + zoom: 2 + }) + }); + + var increaseBrightness = document.getElementById('increase-brightness'); + var resetBrightness = document.getElementById('reset-brightness'); + var decreaseBrightness = document.getElementById('decrease-brightness'); + + setResetBrightnessButtonHTML(); + + increaseBrightness.addEventListener('click', function() { + layer.setBrightness(Math.min(layer.getBrightness() + 0.125, 1)); + setResetBrightnessButtonHTML(); + }, false); + resetBrightness.addEventListener('click', function() { + layer.setBrightness(0); + setResetBrightnessButtonHTML(); + }, false); + decreaseBrightness.addEventListener('click', function() { + layer.setBrightness(Math.max(layer.getBrightness() - 0.125, -1)); + setResetBrightnessButtonHTML(); + }, false); + + var increaseContrast = document.getElementById('increase-contrast'); + var resetContrast = document.getElementById('reset-contrast'); + var decreaseContrast = document.getElementById('decrease-contrast'); + + setResetContrastButtonHTML(); + + increaseContrast.addEventListener('click', function() { + layer.setContrast(layer.getContrast() + 0.125); + setResetContrastButtonHTML(); + }, false); + resetContrast.addEventListener('click', function() { + layer.setContrast(1); + setResetContrastButtonHTML(); + }, false); + decreaseContrast.addEventListener('click', function() { + layer.setContrast(Math.max(layer.getContrast() - 0.125, 0)); + setResetContrastButtonHTML(); + }, false); +} diff --git a/float-no-zero/examples/canvas-tiles-require.js b/float-no-zero/examples/canvas-tiles-require.js new file mode 100644 index 0000000000..a99e4453ee --- /dev/null +++ b/float-no-zero/examples/canvas-tiles-require.js @@ -0,0 +1,7 @@ +goog.require('ol.Map'); +goog.require('ol.View2D'); +goog.require('ol.layer.Tile'); +goog.require('ol.proj'); +goog.require('ol.source.OSM'); +goog.require('ol.source.TileDebug'); +goog.require('ol.tilegrid.XYZ'); diff --git a/float-no-zero/examples/canvas-tiles.html b/float-no-zero/examples/canvas-tiles.html new file mode 100644 index 0000000000..c28386bc3d --- /dev/null +++ b/float-no-zero/examples/canvas-tiles.html @@ -0,0 +1,52 @@ + + + + + + + + + + + Canvas tiles example + + + + + +
+ +
+
+
+
+
+ +
+ +
+

Canvas tiles example

+

Renders tiles with coordinates for debugging.

+
+

The black grid tiles are generated on the client with an HTML5 canvas. Note that the tile coordinates are ol3 normalized tile coordinates (origin bottom left), not OSM tile coordinates (origin top left).

+

See the canvas-tiles.js source to see how this is done.

+
+
layers, openstreetmap, canvas
+
+ +
+ +
+ + + + + + + diff --git a/float-no-zero/examples/canvas-tiles.js b/float-no-zero/examples/canvas-tiles.js new file mode 100644 index 0000000000..294c3ffcea --- /dev/null +++ b/float-no-zero/examples/canvas-tiles.js @@ -0,0 +1,22 @@ +var map = new ol.Map({ + layers: [ + new ol.layer.Tile({ + source: new ol.source.OSM() + }), + new ol.layer.Tile({ + source: new ol.source.TileDebug({ + projection: 'EPSG:3857', + tileGrid: new ol.tilegrid.XYZ({ + maxZoom: 22 + }) + }) + }) + ], + renderer: exampleNS.getRendererFromQueryString(), + target: 'map', + view: new ol.View2D({ + center: ol.proj.transform( + [-0.1275, 51.507222], 'EPSG:4326', 'EPSG:3857'), + zoom: 10 + }) +}); diff --git a/float-no-zero/examples/custom-controls-require.js b/float-no-zero/examples/custom-controls-require.js new file mode 100644 index 0000000000..1f1e18cad2 --- /dev/null +++ b/float-no-zero/examples/custom-controls-require.js @@ -0,0 +1,7 @@ +goog.require('ol'); +goog.require('ol.Map'); +goog.require('ol.View2D'); +goog.require('ol.control'); +goog.require('ol.control.Control'); +goog.require('ol.layer.Tile'); +goog.require('ol.source.OSM'); diff --git a/float-no-zero/examples/custom-controls.html b/float-no-zero/examples/custom-controls.html new file mode 100644 index 0000000000..45ddf6e63f --- /dev/null +++ b/float-no-zero/examples/custom-controls.html @@ -0,0 +1,91 @@ + + + + + + + + + + + + ol3 custom controls example + + + + + +
+ +
+
+
+
+
+ +
+
+

Custom controls

+

This example shows how to create custom controls.

+
+

+ This example creates a "rotate to north" button. + See the custom-controls.js + source to see how this is done. +

+
+
+ custom, control +
+
+
+
+ + + + + + + + diff --git a/float-no-zero/examples/custom-controls.js b/float-no-zero/examples/custom-controls.js new file mode 100644 index 0000000000..1582f0c288 --- /dev/null +++ b/float-no-zero/examples/custom-controls.js @@ -0,0 +1,71 @@ +/** + * Define a namespace for the application. + */ +window.app = {}; +var app = window.app; + + +// +// Define rotate to north control. +// + + + +/** + * @constructor + * @extends {ol.control.Control} + * @param {Object=} opt_options Control options. + */ +app.RotateNorthControl = function(opt_options) { + + var options = opt_options || {}; + + var anchor = document.createElement('a'); + anchor.href = '#rotate-north'; + anchor.innerHTML = 'N'; + + var this_ = this; + var handleRotateNorth = function(e) { + // prevent #rotate-north anchor from getting appended to the url + e.preventDefault(); + this_.getMap().getView().getView2D().setRotation(0); + }; + + anchor.addEventListener('click', handleRotateNorth, false); + anchor.addEventListener('touchstart', handleRotateNorth, false); + + var element = document.createElement('div'); + element.className = 'rotate-north ol-unselectable'; + element.appendChild(anchor); + + ol.control.Control.call(this, { + element: element, + target: options.target + }); + +}; +ol.inherits(app.RotateNorthControl, ol.control.Control); + + +// +// Create map, giving it a rotate to north control. +// + + +var map = new ol.Map({ + controls: ol.control.defaults().extend([ + new app.RotateNorthControl() + ]), + layers: [ + new ol.layer.Tile({ + source: new ol.source.OSM() + }) + ], + renderer: exampleNS.getRendererFromQueryString(), + target: 'map', + view: new ol.View2D({ + center: [0, 0], + zoom: 2, + rotation: 1 + }) +}); diff --git a/float-no-zero/examples/d3-require.js b/float-no-zero/examples/d3-require.js new file mode 100644 index 0000000000..1616fbb6eb --- /dev/null +++ b/float-no-zero/examples/d3-require.js @@ -0,0 +1,9 @@ +goog.require('ol'); +goog.require('ol.Map'); +goog.require('ol.View2D'); +goog.require('ol.extent'); +goog.require('ol.layer.Image'); +goog.require('ol.layer.Tile'); +goog.require('ol.proj'); +goog.require('ol.source.ImageCanvas'); +goog.require('ol.source.Stamen'); diff --git a/float-no-zero/examples/d3.html b/float-no-zero/examples/d3.html new file mode 100644 index 0000000000..bad878f6ff --- /dev/null +++ b/float-no-zero/examples/d3.html @@ -0,0 +1,54 @@ + + + + + + + + + + + d3 integration example + + + + + +
+ +
+
+
+
+
+ +
+ +
+

d3 integration example

+

Example of using ol3 and d3 together.

+
+

The example loads TopoJSON geometries and uses d3 (d3.geo.path) to render these geometries to a canvas element that is then used as the image of an ol3 image layer.

+

See the d3.js source to see how this is done.

+
+
d3
+
+ +
+ +
+ + + + + + + + + diff --git a/float-no-zero/examples/d3.js b/float-no-zero/examples/d3.js new file mode 100644 index 0000000000..cc87db2fbb --- /dev/null +++ b/float-no-zero/examples/d3.js @@ -0,0 +1,84 @@ +var map = new ol.Map({ + layers: [ + new ol.layer.Tile({ + source: new ol.source.Stamen({ + layer: 'watercolor' + }) + }) + ], + renderer: 'canvas', + target: 'map', + view: new ol.View2D({ + center: ol.proj.transform([-97, 38], 'EPSG:4326', 'EPSG:3857'), + zoom: 4 + }) +}); + + +/** + * Load the topojson data and create an ol.layer.Image for that data. + */ +d3.json('data/topojson/us.json', function(error, us) { + var features = topojson.feature(us, us.objects.counties); + + /** + * This function uses d3 to render the topojson features to a canvas. + * @param {ol.Extent} extent Extent. + * @param {number} resolution Resolution. + * @param {number} pixelRatio Pixel ratio. + * @param {ol.Size} size Size. + * @param {ol.proj.Projection} projection Projection. + * @return {HTMLCanvasElement} + */ + var canvasFunction = function(extent, resolution, pixelRatio, + size, projection) { + var canvasWidth = size[0]; + var canvasHeight = size[1]; + + var canvas = d3.select(document.createElement('canvas')); + canvas.attr('width', canvasWidth).attr('height', canvasHeight); + + var context = canvas.node().getContext('2d'); + + var d3Projection = d3.geo.mercator().scale(1).translate([0, 0]); + var d3Path = d3.geo.path().projection(d3Projection); + + var pixelBounds = d3Path.bounds(features); + var pixelBoundsWidth = pixelBounds[1][0] - pixelBounds[0][0]; + var pixelBoundsHeight = pixelBounds[1][1] - pixelBounds[0][1]; + + var geoBounds = d3.geo.bounds(features); + var geoBoundsLeftBottom = ol.proj.transform( + geoBounds[0], 'EPSG:4326', projection); + var geoBoundsRightTop = ol.proj.transform( + geoBounds[1], 'EPSG:4326', projection); + var geoBoundsWidth = geoBoundsRightTop[0] - geoBoundsLeftBottom[0]; + if (geoBoundsWidth < 0) { + geoBoundsWidth += ol.extent.getWidth(projection.getExtent()); + } + var geoBoundsHeight = geoBoundsRightTop[1] - geoBoundsLeftBottom[1]; + + var widthResolution = geoBoundsWidth / pixelBoundsWidth; + var heightResolution = geoBoundsHeight / pixelBoundsHeight; + var r = Math.max(widthResolution, heightResolution); + var scale = r / (resolution / pixelRatio); + + var center = ol.proj.transform(ol.extent.getCenter(extent), + projection, 'EPSG:4326'); + d3Projection.scale(scale).center(center) + .translate([canvasWidth / 2, canvasHeight / 2]); + d3Path = d3Path.projection(d3Projection).context(context); + d3Path(features); + context.stroke(); + + return canvas[0][0]; + }; + + var layer = new ol.layer.Image({ + source: new ol.source.ImageCanvas({ + canvasFunction: canvasFunction, + projection: 'EPSG:3857' + }) + }); + map.addLayer(layer); +}); diff --git a/float-no-zero/examples/data/IGNWMTSCapabilities.xml b/float-no-zero/examples/data/IGNWMTSCapabilities.xml new file mode 100644 index 0000000000..03def672fe --- /dev/null +++ b/float-no-zero/examples/data/IGNWMTSCapabilities.xml @@ -0,0 +1 @@ +Service de visualisation WMTSCe service permet la visualisation de couches de données raster IGN au travers d'un flux WMTSUnités administrativesLimites administrativesSurfaces bâtiesRéseaux de transportRoutesRéseaux ferroviairesAérodromesRéseau hydrographiqueParcelles cadastralesBâtimentsServices d'utilité publique et services publicsRéseaux de transportHydrographiePhotographies aériennesCartesCartes historiquesAltitudeOGC WMTS1.0.0licencesConditions Générales d'Utilisation disponibles ici : http://professionnels.ign.fr/sites/default/files/CGU_API_Pro.pdfIGNGéoportail SAVcustodian73 avenue de ParisSaint Mandé94160Francegeop_services@geoportail.frKVPKVPLimites administrativesReprésentation des limites administratives (régions, départements, cantons, communes)Unités administratives-63.3725 -21.475655.9259 72.679ADMINISTRATIVEUNITS.BOUNDARIESimage/pngPM10336576336671116801152672134412136823041344268713273646082688537614547292005376107351510943183841062421472162190436768212644294317438247352042528858711887648147024850711717436122926427245854848491141081689168288160336AéroportsLocalisation des aéroports, aérodromes et héliports, des pistes, bâtiments et équipements dédiés.Réseaux de transports-68.709 -21.475655.9259 76.5354AEROPORT_SYMBO_PYR-PNG_WLD_WM_2013-03-28image/pngPM103365763366711168011526721344121368230413432679132736460026885359145479919253761072015109601837510632214391621920367442127242879174384073488425448575918876961469768510417151968391647716723288839144721689168288168336Sylvoécorégions d'alluvions récentesAffichage des cinq sylvoécorégions d’alluvions récentes correspondant aux cinq vallées des bassins des grands fleuves français et de leurs affluents, à enjeux importants.Occupation des terres-5.15047 41.32529.57054 51.0991ALLUVIONS-RECENTS_SYMBO_PYR-PNG_FXX_WM_20120807image/pngPM1033438249754511677765994108212136215301989215713273330613986431414547561237973862915109581223815955172591621916244683191834510615233139739476270879951241409167191248272Zones franches urbainesZones franches créées au sein de quartiers de plus de 8 500 habitants particulièrement défavorisés, en tenant compte des éléments de nature à faciliter l’implantation d’entreprises ou le développement d’activités économiques.Zones de gestion-63.3725 -21.475655.9259 51.3121AREAMANAGEMENT.ZFUimage/pngPM103345743316751167711496631343121362229813262686132724459626535373145457919353071073915109221838610615214791621844367722123142951619352044739714189879143821709167287165341Zones urbaines sensiblesZones urbaines caractérisées par la présence de grands ensembles ou de quartiers d’habitat dégradé et par un déséquilibre accentué entre l’habitat et l’emploi.Zones de gestion-63.3725 -21.475655.9259 51.3121AREAMANAGEMENT.ZUSimage/pngPM103345743316751167711496631343121362229813262686132724459626535373145457919353071073915109221838610615214791621844367722123142951619352044739714189879143821709167287165341BâtimentsAffichage des constructions couvrant le territoire français.Bâtiments-63.1614 -21.399855.8465 72.679BATI_SYMBO_PYR-PNG_WLD_20120704image/pngPM10338574332671116811148664134212136622971329268413273745942658536814547591895317107361510950183781063421473162190036757212694293817438177351542539858761887634147030850791717446122827437245654848501121091699101225218336BâtimentsAffichage des constructions couvrant le territoire français.Bâtiments-63.3725 -21.475655.9259 72.679BATI_SYMBO_PYR-PNG_WLD_20130131image/pngPM10338574332671116811148664134212136622971329268413273745942658536814547591895317107361510943183841062421472162190436768212644294317438247352042528858711887648147024850711717276122827437245654848501121091699101225218336BâtimentsAffichage des constructions couvrant le territoire français.Bâtiments-63.3725 -21.475655.9259 72.679BATI_SYMBO_PYR-PNG_WLD_20130204image/pngPM10338574332671116811148664134212136823041328268713273646002656536714547191925312107361510943183841062421472162190436768212644294317438247352042528858711887648147024850711717276122827437245654848501121091699101225218336AltitudeLa couche altitude se compose d'un MNT (Modèle Numérique de Terrain) affiché en teintes hypsométriques et issu de la BD ALTI®.Altitude-178.206 -22.5952167.432 50.9308BDALTI_PYR-JPEG_WLD_WM_WMTS_20120617image/jpegPM103425785988116841156101976121368231220395313273646244079061454729248811581262136061742720123885144124791712892494Carte du reliefLa couche altitude se compose d'un MNT (Modèle Numérique de Terrain) affiché en teintes hypsométriques et issu de la BD ALTI®.Cartes-178.206 -22.5952167.432 50.9308BDALTI_PYR-JPEG_WLD_WM_WMTS_20120618image/jpegPM103425785988116841156101976121368231220395313273646244079061454729248811581262136061742720123885144124791712892494Carte forestière v1 (1987-2004)La cartographie forestière est une base de données cartographique des formations végétales forestières et naturelles. Elle couvre l'ensemble du territoire de France métropolitaine. Elle est réalisée par interprétation de photographies aériennes infrarouges et affinée par des contrôles sur le terrain (le seuil minimal de surface cartographiée est de 2,25 ha).Inventaire forestier-5.34206 41.20659.82939 51.2203BDFORETV1_PYR-PNG_FXX_WM_1image/pngPM1034138349653911683766993107912136715321987215913273430653974431914546961307948863915109381226015897172781621876245213179534557621233133742476267885951241349170191248269Carte forestière (v2 : 2006-)Localisation de 32 types de formations végétales sur le territoire. Carte en cours de réalisation depuis 2006.Occupation des terres-5.34206 41.20659.82939 51.2203BDFORETV2_PYR-PNG_FXX_WM_20120625image/pngPM1034138349653911683766993107912136715321987215913273430653974431914546961307948863915109381226015897172781621876245213179534557621233133742476267885951241349170191248269Parcelles cadastralesLimites des parcelles cadastrales issues de plans scannés et de plans numériques.Parcelles cadastrales-63.1607 14.38119.66314 51.091BDPARCEL_PYR-PNG_WLD_WM_20120712image/pngPM103424703325391168494166410781213691882132921561327393765265843131454787530531786271510956150601063417255162191230121212693451017438256024342539690201887651120487850791380411917530224097517015927608220350605481951340318552164621292033742584167885117831349171235166269Parcelles cadastralesLimites des parcelles cadastrales issues de plans scannés et de plans numériques.Parcelles cadastrales-63.1607 14.38119.66314 51.091BDPARCEL_PYR-PNG_WLD_WM_20120716image/pngPM103424703325391168494166410781213691882132921561327393765265843131454787530531786271510956150601063417255162191230121212693451017438256024342539690201887651120487850791380411917530224097517015927608220350605481951340318552164621292033742584167885117831349171235166269Parcelles cadastralesLimites des parcelles cadastrales issues de plans scannés et de plans numériques.Parcelles cadastrales-63.1607 -21.392255.8464 51.091BDPARCEL_PYR-PNG_WLD_WM_20120723image/pngPM10342574332670116841148664134112136922971329268313273945942658536614547891885317107331510956183771063421467162191236755212694293417438257351142539858681887651147023850791717361917530229404617015934347320350605588093340318686946621352041742714183885143831679171287166335Parcelles cadastralesLimites des parcelles cadastrales issues de plans scannés et de plans numériques.Parcelles cadastrales-63.1607 -21.392255.8464 51.091BDPARCEL_PYR-PNG_WLD_WM_20121220image/pngPM10342574332670116841148664134112136922971329268313273945942658536614547891885317107331510956183771063421467162191236755212694293417438257351142539858681887651147023850791717361917530229404617015934347320350605588093340318686946621352041742714183885143831679171287166335Guyane Françoise (1780)Carte de Guyane française établie par M. Bonne, Ingénieur-Hydrographe de la Marine. Cette carte figure dans l'"atlas de toutes les parties connues du globe terrestre", ouvrage rédigé par l'abbé Guillaume-Thomas RAYNAL et publié à Genève en 1780.Cartes historiques-55.9127 -0.49941-50.0835 7.88966BONNE_PYR-JPG_GUF_WM_20121214image/jpegPM000001010010489513352369212113342247855515161111630322223761644446812212888929244256176184Guyane française (1780)Carte de Guyane française établie par M. Bonne, Ingénieur-Hydrographe de la Marine. Cette carte figure dans l'"atlas de toutes les parties connues du globe terrestre", ouvrage rédigé par l'abbé Guillaume-Thomas RAYNAL et publié à Genève en 1780.Cartes historiques-55.9127 -0.49941-50.0835 7.88966BONNE_PYR-JPG_GUF_WM_20130124image/jpegPM000001010010489513352369212113342247855515161111630322223761644446812212888929244256176184BâtimentsAffichage des constructions couvrant le territoire français.Bâtiments-63.3725 -21.475655.9259 72.679BUILDINGS.BUILDINGSimage/pngPM10338574332671116811148664134212136823041328268713273646002656536714547191925312107361510943183841062421472162190436768212644294317438247352042528858711887648147024850711717276122827437245654848501121091699101225218336Parcelles cadastralesLimites des parcelles cadastrales issues de plans scannés et de plans numériques.Parcelles cadastrales-63.1607 -21.392255.8464 51.091CADASTRALPARCELS.PARCELSimage/pngPM10342574332670116841148664134112136922971329268313273945942658536614547891885317107331510956183771063421467162191236755212694293417438257351142539858681887651147023850791717361917530229404617015934347320350605588093340318686946621352041742714183885143831679171287166335Carte France Raster ®Carte à grande échelle spécialement adaptée à l'affichage de données urbaines.Cartes-63.7576 -21.565556.0405 51.0019CARTE-FRANCERASTER_PYR-JPEG_WLD_WM_20120706image/jpegPM1034157433067111683114966013421213662299134326851327324598264453711454659197531110742151093118394106322146716218893677121264429341743804647794252969075188760914705185058171737621233034742476168885951231369170191247272Carte Mondiale pour la mini-vueCarte Mondiale pour la mini-vueMini-Vue-179.5 -75179.5 75CARTE-MINIVUE_PYR-JPG_WLD_WM_20120706image/jpegPM10102203043060841130165226032685206472110501288422100256Cartes IGNCartes IGNCartes-180 -60180 80CARTE_PYR-JPG_WLD_WM_20120509image/jpegPM1034257433267011684114866413411213682297132926831327364595265853661454729190531610733151094418381106322146716218893676321264429342020430508411101653220326745064742714183885143831679171287166335Cartes IGNCartes IGNCartes-180 -90180 90CARTE_PYR-JPG_WLD_WM_20121005image/jpegPM000011010210341777599011681155410198112136331082039631327265294407926145452101078115851151094420215163317021621889404313264689517438177351542539858761887634147030850791717522020430508411101653220326745064732970123880194124791703882495Cartes IGNCartes IGNCartes-180 -90180 90CARTE_PYR-JPG_WLD_WM_20121121image/jpegPM000011010210341777599011681155410198112136331082039631327266177407328145452123558115851151094420215163317021621889404313264689517438177351542539858761887634147030850791717522020430508411101653220326745064732970123880194124791703882495Cartes IGNCartes IGNCartes-180 -90180 90CARTE_PYR-JPG_WLD_WM_20121122image/jpegPM000011010210341777599011681154410198112136330882039631327266177407926145452123558115851151094420215163317021621889404313264689517438177351542539858761887634147030850791717522020430508411101653220326745064732970123880194124791703882495Cartes IGNCartes IGNCartes-180 -67.7557180 80CARTE_PYR-JPG_WLD_WM_20130115image/jpegPM000011010210341777599011681154410198112136330882039631327266177407926145452123558115851151094420215163317021621889404313264689517436967355242447859031887392147104849121718072020430508411101653220326745064732970123880194124791703882495Cartes IGNCartes IGNCartes-180 -67.7557180 80CARTE_PYR-JPG_WLD_WM_20130205image/jpegPM000011010210341777599011681154410198112136330882039631327266177407926145452123558115851151094420215163317021621889404313264689517436967355242447859031887392147104849121718072020430508411101653220326745064732970123880194124791703882495Cartes IGNCartes IGNCartes-180 -67.7557180 80CARTE_PYR-JPG_WLD_WM_20130227image/jpegPM000011010210341777599011681154410198112136330882039631327266177407926145452123558115851151094420215163317021621889404313264689517436967355242447859031887392147104849121718072020430508411101653220326745064732970123880194124791703882495Cartes IGNCartes IGNCartes-180 -67.7557180 85.0511CARTE_PYR-JPG_WLD_WM_WM_20130603image/jpegPM000011010210341777599011681154410198112136330882039631327266177407926145452123558115851151094420215163317021621889404313264689517436967355242447859031887392147104849121718072030430608401201650240326048064732970123880194124791703882495Carte de CassiniCarte de Cassini en couleur (feuilles gravées et aquarellées), issue de l’exemplaire dit de « Marie-Antoinette » du XVIIIe siècle.Cartes historiques-6.00063 42.0199.2809 51.2455CASSINI_PYR-JPG_WLD_WM_2012-06-01image/jpegPM103413804945381168376098910761213661520197921531327333040395943071454676080791886141510934121611583717228621233033742476167885951231349170190247269Carte de Cassini (XVIIIe siècle)Carte de Cassini en couleur (feuilles gravées et aquarellées), issue de l’exemplaire dit de « Marie-Antoinette » du XVIIIe siècle.Cartes historiques-6.00063 42.0199.2809 51.2455CASSINI_PYR-JPG_WLD_WM_20130125image/jpegPM103413804945381168376098910761213661520197921531327333040395943071454676080791886141510934121611583717228621233033742476167885951231349170190247269IrisZones Iris définies par l'INSEE pour les besoins des recensements sur l'ensemble des communes de plus de 10 000 habitants et la plupart des communes de 5 000 à 10 000 habitants.Divers-5.15047 41.32529.57054 51.0991CONTOURS_IRIS_WM_20120830image/pngPM10334382497545116777659941082121362153019892157132733306139784314145475612379578629615233139739476270879951241409167191248272Lignes électriquesAffichage des lignes électriques.Energie-63.3725 -21.475655.9259 51.3121ELEC_SYMBO_PYR-PNG_WLD_WM_20130313image/pngPM103423824975371168576599410741213681536199221601327364600268853681454799192537610736151095918384106392147216219203675221280429271743840735044255985855188769614700885136171695615233139739476270879951241409167191248272MNT BDAlti V1BDAlti V1 au pas de 25mMNT-64 -23168 52ELEVATION.ELEVATIONGRIDCOVERAGEimage/x-bil;bits=32WGS84G000011011310216642659197911432128513193959202273155154310103056202061613404112372780822478541601644949108321329989Trait de côte HistolittFormalisation de la limite entre le domaine terrestre et le domaine marin.AltitudeLittoral-63.2529 -21.5155.9472 51.1388ELEVATION.LEVEL0image/pngPM1033457433267611677114966413441213622298132826881327334597265653681454749194531310737151094918381106342146616219073676321269429331743814735264253885866188764414703685076171732619352044739714189879143831719167287166342Carte du reliefLa couche altitude se compose d'un MNT (Modèle Numérique de Terrain) affiché en teintes hypsométriques et issu de la BD ALTI®.Cartes-178.206 -22.5952167.432 50.9308ELEVATION.SLOPESimage/jpegPM103425785988116841156101976121368231220395313273646244079061454729248811581262136061742720123885144124791712892494Litto3D ®Modèle numérique continu terre-mer sur la frange littorale.Littoral5.75296 42.97866.25761 43.2733ELEVATION.SLOPES.HIGHRESimage/pngPM10375376528529117507521056105912150015052113211913300130104226423814600360218453847615120061204316907169531624012240863381533907623233333746476666893941321329187188264264AltitudeImages en teintes hypsométriques de la BDAlti à 25mgéographie55.2057 -21.392355.8466 -20.8627ELEVATION.SLOPES_WLD_2.0_3857_JPGimage/jpegPM1057257466867011114511481337134112229022972675268313458145945351536763535414177171838381431431671679286287334335Carte Europe politiqueCarte Europe politiqueCartes-41.4623 23.810174.8102 68.9745EUROPEPOLITIQUE_PYR-JPEG_WLD_WM_WMTS_3Dimage/jpegPM000001000110200442387731201123133543661156131222612272445725554891850110961829100221193365Carte Europe politiqueCarte Europe politiqueCartes-41.4623 23.810174.8102 68.9745EUROPEPOLITIQUE_PYR-JPEG_WLD_WM_WMTS_3D_V1image/jpegPM000001000110200442387731201123133543661156131222612272445725554891850110961829100221193365Réseau ferroviaireCarte du réseau ferroviaireVoies ferrées-26.711 20.991854.9094 72.679FERRE_SYMBO_PYR-PNG_WLD_WM_20120713image/pngPM103383824975411168176599410781213661530198921571327333061397843141454756123795786296122827437245654848501121091699101225218336Réseau ferroviaireCarte du réseau ferroviaireVoies ferrées-26.711 20.991854.9094 72.679FERRE_SYMBO_PYR-PNG_WLD_WM_20120809image/pngPM10338382497541116817659941078121366153019892157132733306139784314145475612379578629151095812174159711725116219162434831950344946122827437245654848501121091699101225218336Réseau ferroviaireCarte du réseau ferroviaireVoies ferrées-26.711 20.991854.9094 72.679FERRE_SYMBO_PYR-PNG_WLD_WM_20120814image/pngPM103383824975411168176599410781213661530198921571327333061397843141454756123795786291510958121741597117251162191624348319503449417438334869763900689881887666973941278011379616122827437245654848501121091699101225218336Réseau ferroviaireCarte du réseau ferroviaireVoies ferrées-26.711 20.991854.9094 72.679FERRE_SYMBO_PYR-PNG_WLD_WM_20130312image/pngPM103383824975411168176599410781213661530198921571327363048399243121454716088798486241510943121751596817248162190424352319363449617438244870463872689911887664973921277441379686122827437245654848501121091699101225218336ForêtReprésentation simplifiée des forêts.Forêt-63.3725 -21.475655.9259 51.3121FORESTCOVER_SYMBO_PYR-PNG_WLD_WM_20130523image/pngPM10336576328671116801152664134412136823041328268713273646002656536714547191925312107361510952183831063221471162191236760212644293517438247352042528858711887648147024850711717439168288160336Paris haute résolutionPrises de vues aériennes de Paris à haute résolution.Photographies2.19509 48.80952.42968 48.9124GEN_ORTHOPARIS_FXX_PYR-PNG_WM_20120705image/pngPM1214081409207220751328162819414541511456325639829183021511265112791658316605162253022559331673321017450614511866335664201890123902371326701328411918024618047426534026568220360492360948530681531364Carte topographique - environs de Paris (1906)Carte topographique de Paris et de ses environs éditée en 1906.Cartes historiques1.62941 48.47263 49.1548GEOGRAPHICALGRIDSYSTEMS.1900TYPEMAPSimage/jpegPM1035035351652011701707103310411214031415206620821328072831413241641456155663826583281511231113261653116657France administrativeCarte de la France administrative (régions, départements, arrondissements, cantons, communes)Cartes-63.2459 -21.637156.052 51.5596GEOGRAPHICALGRIDSYSTEMS.ADMINISTRATIVEUNITSimage/jpegPM10339575332671621352041742714183884143831679169287166335Guyane française (1780)Carte de Guyane française établie par M. Bonne, Ingénieur-Hydrographe de la Marine. Cette carte figure dans l'"atlas de toutes les parties connues du globe terrestre", ouvrage rédigé par l'abbé Guillaume-Thomas RAYNAL et publié à Genève en 1780.Cartes historiques-55.9127 -0.49941-50.0835 7.88966GEOGRAPHICALGRIDSYSTEMS.BONNEimage/jpegPM000001010010489513352369212113342247855515161111630322223761644446812212888929244256176184Carte de Cassini (XVIIIe siècle)Carte de Cassini en couleur (feuilles gravées et aquarellées), issue de l’exemplaire dit de « Marie-Antoinette » du XVIIIe siècle.Cartes historiques-6.00063 42.0199.2809 51.2455GEOGRAPHICALGRIDSYSTEMS.CASSINIimage/jpegPM103413804945381168376098910761213661520197921531327333040395943071454676080791886141510934121611583717228621233033742476167885951231349170190247269Carte littorale (SHOM/IGN)Assemblage des cartes marines du Service hydrographique et océanographique de la marine (SHOM) et des cartes terrestres de l’IGN.CartesLittoral-61.9629 -21.534856.1621 51.454GEOGRAPHICALGRIDSYSTEMS.COASTALMAPSimage/pngPM103405743356711168111496711343121362229913432687132726459826865374145452919653721074815109041839210744214961621808367842148842992621352041742714183885143831679170287167335Cartographie AJACCIO 1976Zone d'Ajaccio - Cartographie 1976EDUGEO8.507 41.66549.13252 42.0381GEOGRAPHICALGRIDSYSTEMS.EDUGEO.AJACCIO1976image/pngPM10379381536537117597621072107512151915252144215113303930514289430314607961028579860715121591220417158172151624318244093431634430623233333747476767894951341349189190268268Cartographie BELFORT MONTBELLIARD 1973Zone d'Ajaccio - BELFORT MONTBELLIARD 1973EDUGEO6.50535 47.36767.25597 47.8735GEOGRAPHICALGRIDSYSTEMS.EDUGEO.BELFORT-MONTBELLIARD1973image/pngPM10356358530532117127171061106512142514342122213013285128694244426114570357388488852215114071147616976170441622815229523395234088622223333744446666889891321339178179265266Cartographie BERRY SUD 1952Zone de BERRY SUD - Cartographie 1952EDUGEO1.00082 46.1681.75144 46.6854GEOGRAPHICALGRIDSYSTEMS.EDUGEO.BERRY-SUD1952image/pngPM10361363514516117227271029103312144514542059206713289129084118413514578358178237827115115671163516475165431623134232713295033086622223232745456464890901281299180181257258Cartographie BETHUNE 1956Zone de BETHUNE 1956EDUGEO2.37696 50.173.37778 50.6484GEOGRAPHICALGRIDSYSTEMS.EDUGEO.BETHUNE1956image/pngPM10344346518521116886931037104312137713862075208613275527724150417214551055448300834515110201108816600166911622041221773320033382621213232743436465886861291309172173259260Cartographie BIARRITZ 1979Zone de Biarritz 1979EDUGEO-1.87654 43.1433-1.25103 43.6885GEOGRAPHICALGRIDSYSTEMS.EDUGEO.BIARRITZ1979image/pngPM10373375506508117477511013101612149415022026203313298830054053406714597760118106813515119541202216213162701623908240453242632540623233131746466363893931261279186187253254Cartographie BOURG St-MAURICE 1974Zone de BOURG St-MAURICE - Cartographie 1974EDUGEO6.50535 45.38277.13087 45.7331GEOGRAPHICALGRIDSYSTEMS.EDUGEO.BOURG-ST-MAURICE1974image/pngPM10365366530532117307331061106412146114672122212913292329344244425814584658698488851615116921173816976170331623384234763395234066622223333745456666891911321339182183265266Cartographie CAEN 1969Zone de CAEN - Cartographie 1969EDUGEO-0.875721 49.035-0.125103 49.4434GEOGRAPHICALGRIDSYSTEMS.EDUGEO.CAEN1969image/pngPM10349351509511116997031019102312139814062038204613279728124076409314559556248152818615111911124816304163721622382224963260832745621213131743436363887871271279174175254255Cartographie Cap d'AGDE 1971Zone du Cap d'Agde 1971EDUGEO3.00247 43.14333.62799 43.5073GEOGRAPHICALGRIDSYSTEMS.EDUGEO.CAP-DAGDE1971image/pngPM10374375520522117487511041104412149715022082208913299430054164417814598860118328835715119771202216657167141623954240453331433428623233232746466565893931301309187187260261Cartographie CLERMONT FERRAND 1966Zone de CLERMONT FERRAND 1966EDUGEO2.75227 45.64573.37778 45.9944GEOGRAPHICALGRIDSYSTEMS.EDUGEO.CLERMONT-FERRAND1966image/pngPM10364365519521117287311039104312145714622079208613291429254158417214582958518317834515116581170316634166911623316234073326933382622223232745456465891911291309182182259260Cartographie CREIL SUD PICARDIE 1979Zone de CREIL SUD PICARDIE 1979EDUGEO2.25185 49.0353.12757 49.6058GEOGRAPHICALGRIDSYSTEMS.EDUGEO.CREIL-SUD-PICARDIE1979image/pngPM10349351518520116987031036104112139614062073208313279228124147416714558456248294833415111681124816588166681622337224963317733337621213232743436465887871291309174175259260Cartographie Dijon 1962Zone de Dijon 1962EDUGEO4.75391 46.94225.37943 47.5368GEOGRAPHICALGRIDSYSTEMS.EDUGEO.DIJON1962image/pngPM10357360525527117157201051105412143114412102210913286328834204421814572657668408843615114531153316816168731622906230663363333747622223232744456565889901311319178180262263Cartographie GRENOBLE 1965Zone de Grenoble 1965EDUGEO5.50453 44.94166.13005 45.3827GEOGRAPHICALGRIDSYSTEMS.EDUGEO.GRENOBLE1965image/pngPM10366368527529117337371055105812146714742110211713293429484221423514586958978442847015117381179416885169411623476235893377033883622233233745466566891921311329183184263264Cartographie GRENOBLE 1976Zone de Grenoble 1976EDUGEO5.50453 45.03016.25515 45.4705GEOGRAPHICALGRIDSYSTEMS.EDUGEO.GRENOBLE1976image/pngPM10366368527529117327361055105912146514722110211913293129454221423814586358918442847615117261178316885169531623453235673377033906622233233745466566891921311329183184263264Cartographie GRENOBLE 1991Zone de Grenoble 1991EDUGEO5.50453 44.94166.13005 45.3827GEOGRAPHICALGRIDSYSTEMS.EDUGEO.GRENOBLE1991image/pngPM10366368527529117337371055105812146714742110211713293429484221423514586958978442847015117381179416885169411623476235893377033883622233233745466566891921311329183184263264Cartographie Guadeloupe 1955Zone de Guadeloupe 1955EDUGEO-61.6758 16.1695-61.3005 16.6495GEOGRAPHICALGRIDSYSTEMS.EDUGEO.GUADELOUPE1955image/pngPM104634653363371192793067367512185518611346135013371137232692270114742374465385540215148461489210770108041629693297842154021608628292121757584242811511684849231232168168Cartographie Guyane 1958Zone de Guyane 1958EDUGEO-54.4198 5.12238-53.419 5.99398GEOGRAPHICALGRIDSYSTEMS.EDUGEO.GUYANE1958image/pngPM104944973573601198999471472012197919891428144013395939792857288014791879585715576015158371591711430115211631674318342286123043630312222761624445812312489909247248178180Cartographie LA REUNION 1980Zone de la Réunion 1980EDUGEO55.0453 -21.495455.6708 -20.6783GEOGRAPHICALGRIDSYSTEMS.EDUGEO.LA-REUNION1980image/pngPM10572574668670111144114913371340122288229826742681134577459753485362149154919410697107251518308183882139421451163661636776427884290263535414177171838381431431671679286287334335Cartographie LA ROCHELLE-ROCHEFORT 1959Zone de LA ROCHELLE-ROCHEFORT 1959EDUGEO-1.37613 45.7331-0.750618 46.4273GEOGRAPHICALGRIDSYSTEMS.EDUGEO.LA-ROCHELLE-ROCHEFORT1959image/pngPM10362365508509117257301016101912145014612032203913290029234064407814580058468129815715116011169216258163151623202233843251732631622223131745456363890911271279181182254254Cartographie Limoges 1966Zone de Limoges 1966EDUGEO1.00082 45.64571.50124 45.9944GEOGRAPHICALGRIDSYSTEMS.EDUGEO.LIMOGES1966image/pngPM10364365514516117287311029103212145714622059206513291429254118413014582958518237826015116581170316475165201623316234073295033041622223232745456464891911281299182182257258Cartographie LYON 1947Zone de LYON - Cartographie 1947EDUGEO4.50371 45.47055.37943 46.0813GEOGRAPHICALGRIDSYSTEMS.EDUGEO.LYON1947image/pngPM10363366524527117277321049105412145514652099210913291129314198421814582358638396843615116461172616793168731623293234533358733747622223232745456565890911311319181183262263Cartographie LYON 1980Zone de LYON - Cartographie 1980EDUGEO4.62881 45.47055.12922 45.9944GEOGRAPHICALGRIDSYSTEMS.EDUGEO.LYON1980image/pngPM10364366525526117287321050105312145714652100210613291429314201421214582958638402842515116581172616805168501623316234533361033701622223232745456565891911311319182183262263Cartographie LYON 1985Zone de LYON - Cartographie 1985EDUGEO4.62881 45.55825.12922 45.9944GEOGRAPHICALGRIDSYSTEMS.EDUGEO.LYON1985image/pngPM10364366525526117287321050105312145714642100210613291429284201421214582958578402842515116581171516805168501623316234303361033701622223232745456565891911311319182183262263Cartographie MARNE LA VALLÉE 1966Zone de MARNE LA VALLÉE 1966EDUGEO2.37696 48.70593.12757 49.035GEOGRAPHICALGRIDSYSTEMS.EDUGEO.MARNE-LA-VALLEE1966image/pngPM10351352518520117037051037104112140614112075208313281228234150416714562456468300833415112481129316600166681622496225873320033337621223232743446465887881291309175176259260Cartographie MARNE LA VALLÉE 1978Zone de MARNE LA VALLÉE 1978EDUGEO2.37696 48.70592.75227 49.035GEOGRAPHICALGRIDSYSTEMS.EDUGEO.MARNE-LA-VALLEE1978image/pngPM10351352518519117037051037103912140614112075207913281228234150415814562456468300831715112481129316600166341622496225873320033269621223232743446464887881291299175176259259Cartographie MARNE LA VALLÉE 1987Zone de MARNE LA VALLÉE 1987EDUGEO2.37696 48.70593.12757 49.035GEOGRAPHICALGRIDSYSTEMS.EDUGEO.MARNE-LA-VALLEE1987image/pngPM10351352518520117037051037104112140614112075208313281228234150416714562456468300833415112481129316600166681622496225873320033337621223232743446465887881291309175176259260Cartographie MARSEILLE MARTIGUES 1947Zone de MARSEILLE MARTIGUES 1947EDUGEO4.50371 43.0525.62963 43.6885GEOGRAPHICALGRIDSYSTEMS.EDUGEO.MARSEILLE-MARTIGUES1947image/pngPM10373376524528117477521049105612149415042099211213298830084198422414597760178396844815119541203416793168961623908240683358733792623233233746476566893941311329186188262264Cartographie MARSEILLE MARTIGUES 1980Zone de MARSEILLE MARTIGUES 1980EDUGEO5.00412 43.0525.62963 43.5073GEOGRAPHICALGRIDSYSTEMS.EDUGEO.MARSEILLE-MARTIGUES1980image/pngPM10374376526528117487521052105612149715042104211213299430084209422414598860178419844815119771203416839168961623954240683367833792623233233746476566893941311329187188263264Cartographie MARSEILLE MARTIGUES 1986Zone de MARSEILLE MARTIGUES 1986EDUGEO4.87902 43.0525.62963 43.6885GEOGRAPHICALGRIDSYSTEMS.EDUGEO.MARSEILLE-MARTIGUES1986image/pngPM10373376525528117477521051105612149415042103211213298830084207422414597760178414844815119541203416828168961623908240683365633792623233233746476566893941311329186188262264Cartographie METZ NANCY 1983Zone de METZ NANCY 1983EDUGEO5.75474 48.45766.50535 49.362GEOGRAPHICALGRIDSYSTEMS.EDUGEO.METZ-NANCY1983image/pngPM10350354528530117007081056106112140014162113212213280028324226424414560156648453848815112021132816907169761622405226563381533952621223333743446666887881321329175177264265Cartographie NANTES 1972Zone de NANTES 1972EDUGEO-2.50206 47.0276-1.25103 47.4522GEOGRAPHICALGRIDSYSTEMS.EDUGEO.NANTES1972image/pngPM10358360504508117167201009101612143314402019203313286628804039406714573257608078813515114641152116156162701622929230433231232540622223131744456363889901261279179180252254Cartographie 1964Zone de Paris - Cartographie 1964EDUGEO2.00165 48.78842.50206 49.117GEOGRAPHICALGRIDSYSTEMS.EDUGEO.PARIS1964image/pngPM10351352517519117027051035103812140414102070207613280928204141415214561856418283830515112371128216566166111622474225653313233223621223232743446464887881291299175176258259Cartographie 1979Zone de Paris - Cartographie 1979EDUGEO2.00165 48.70592.62716 49.035GEOGRAPHICALGRIDSYSTEMS.EDUGEO.PARIS1979image/pngPM10351352517519117037051035103812140614112070207713281228234141415514562456468283831115112481129316566166231622496225873313233246621223232743446464887881291299175176258259Cartographie REIMS 1974Zone de REIMS 1974EDUGEO3.75309 49.0354.50371 49.4434GEOGRAPHICALGRIDSYSTEMS.EDUGEO.REIMS1974image/pngPM10349351522524116997031045104912139814062090209913279728124181419814559556248362839615111911124816725167931622382224963345133587621213232743436565887871301319174175261262Cartographie REIMS 1983Zone de REIMS 1983EDUGEO3.75309 49.0354.50371 49.6058GEOGRAPHICALGRIDSYSTEMS.EDUGEO.REIMS1983image/pngPM10349351522524116987031045104912139614062090209913279228124181419814558456248362839615111681124816725167931622337224963345133587621213232743436565887871301319174175261262Cartographie Roissy 1973Zone de Roissy - Cartographie 1973EDUGEO2.25185 48.87072.75227 49.117GEOGRAPHICALGRIDSYSTEMS.EDUGEO.ROISSY1973image/pngPM10351352518519117027041036103912140414082073207913280928174147415814561856358294831715112371127116588166341622474225423317733269621223232743446464887881291299175176259259Cartographie Roissy 1978Zone de Roissy - Cartographie 1978EDUGEO2.25185 48.87072.75227 49.2805GEOGRAPHICALGRIDSYSTEMS.EDUGEO.ROISSY1978image/pngPM10350352518519117007041036103912140114082073207913280328174147415814560756358294831715112141127116588166341622428225423317733269621223232743446464887881291299175176259259Cartographie STRASBOURG 1956Zone de STRASBOURG 1956EDUGEO7.25597 48.20818.13169 48.7884GEOGRAPHICALGRIDSYSTEMS.EDUGEO.STRASBOURG1956image/pngPM10352355532535117057101065107012141014202130214013282028404261428114564156818522856215112821136217044171241622565227243408834248622223333744446666888881331339176177266267Cartographie STRASBOURG 1978Zone de STRASBOURG 1978EDUGEO7.25597 48.12468.00659 48.8707GEOGRAPHICALGRIDSYSTEMS.EDUGEO.STRASBOURG1978image/pngPM10352355532534117047101065106912140814212130213913281728434261427814563556868522855615112711137317044171121622542227473408834225622223333744446666888881331339176177266267Cartographie TOULON HYERES 1976Zone de TOULON HYERES 1976EDUGEO5.62963 42.86896.38025 43.2345GEOGRAPHICALGRIDSYSTEMS.EDUGEO.TOULON-HYERES1976image/pngPM10375376528530117507531056106012150115072112212013300230144224424114600560288448848215120111205616896169641624022241133379233929623233333746476666893941321329187188264265Cartographie TOULOUSE 1948Zone de TOULOUSE 1948EDUGEO1.12593 43.41651.75144 43.7789GEOGRAPHICALGRIDSYSTEMS.EDUGEO.TOULOUSE1948image/pngPM10373374515516117467491030103312149214982060206713298529974121413514597159948243827115119431198816486165431623886239773297233086623233232746466464893931281299186187257258Cartographie Vannes Golf du Morbihan 1960Zone de Vannes Golf du Morbihan - Cartographie 1960EDUGEO-3.37778 47.3676-2.50206 47.8735GEOGRAPHICALGRIDSYSTEMS.EDUGEO.VANNES-GOLF-DU-MORBIHAN1960image/pngPM10356358502504117127171004100912142514342009201913285128694019403914570357388038807815114071147616076161561622815229523215332312622223131744446263889891251269178179251252Cartographie Vannes Golf du Morbihan 1971Zone de Vannes Golf du Morbihan - Cartographie 1971EDUGEO-3.37778 47.3676-2.50206 47.8735GEOGRAPHICALGRIDSYSTEMS.EDUGEO.VANNES-GOLF-DU-MORBIHAN1971image/pngPM10356358502504117127171004100912142514342009201913285128694019403914570357388038807815114071147616076161561622815229523215332312622223131744446263889891251269178179251252Cartographie Versailles 1979Zone de Versailles - Cartographie 1979EDUGEO1.87654 48.54052.50206 49.035GEOGRAPHICALGRIDSYSTEMS.EDUGEO.VERSAILLES1979image/pngPM10351353517519117037071034103812140614142069207613281228294138415214562456588277830515112481131616554166111622496226333310933223621223232743446464887881291299175176258259Carte de l'état-major - environs de Paris (1818 - 1824)Carte des environs de Paris au 1 : 10 000 établie entre 1818 et 1824.Cartes historiques1.82682 48.38472.79738 49.5142GEOGRAPHICALGRIDSYSTEMS.ETATMAJOR10image/jpegPM10349354517519116987081034103912139714172068207913279528344137415914559056698275831915111811133816550166381622363226763310033277621223232743446464887881291299174177258259Carte de l'état-major (1820-1866)Carte française en couleurs du XIXè siècle en couleurs superposable aux cartes et données modernes.Cartes historiques-6.08889 41.184410.961 51.2745GEOGRAPHICALGRIDSYSTEMS.ETATMAJOR40image/jpegPM103423824955401168476599110801213681531198321601327363063396643211454726127793386421510944122551586617285621233033742476167885951231359171191247270Carte France Raster ®Carte à grande échelle spécialement adaptée à l'affichage de données urbaines.Cartes-63.7576 -21.565556.0405 51.0019GEOGRAPHICALGRIDSYSTEMS.FRANCERASTERimage/jpegPM1034157433067111683114966013421213662299134326851327324598264453711454659197531110742151093118394106322146716218893677121264429341743804647794252969075188760914705185058171737621233034742476168885951231369170191247272Cartographie Le Havre 1975Zone du Havre 1975EDUGEO-0.125103 49.28050.500412 49.6868GEOGRAPHICALGRIDSYSTEMS.LE-HAVRE1975image/pngPM10348350511513116977001023102612139414012046205313278928034093410714557856078186821415111571121416372164291622314224283274532859621213132743436364887871271289174175255256Cartographie Le Havre 1979Zone du Havre 1979EDUGEO-0.125103 49.28050.625515 49.6868GEOGRAPHICALGRIDSYSTEMS.LE-HAVRE1979image/pngPM10348350511513116977001023102712139414012046205513278928034093411014557856078186822015111571121416372164401622314224283274532881621213132743436364887871271289174175255256Cartes IGNCartes IGNCartes-180 -67.7557180 85.0511GEOGRAPHICALGRIDSYSTEMS.MAPSimage/jpegPM000011010210341777599011681154410198112136330882039631327266177407926145452123558115851151094420215163317021621889404313264689517436967355242447859031887392147104849121718072030430608401201650240326048064732970123880194124791703882495Carte Mondiale pour la mini-vueCarte Mondiale pour la mini-vueMini-Vue-179.5 -75179.5 75GEOGRAPHICALGRIDSYSTEMS.MAPS.OVERVIEWimage/jpegPM10102203043060841130165226032685206472110501288422100256PYRAMIDE SCAN EXPRESS CLASSIQUECartographie topographique multi-échelles du territoire français issue des bases de données vecteur de l’IGN –réalisée selon un processus cartographique innovant fortement automatisé.testCartes-22.5 39.884122.5 55.7766GEOGRAPHICALGRIDSYSTEMS.MAPS.SCAN-EXPRESS.CLASSIQUEimage/jpegPM10332386478546116817729861090121362154419722180132723307939554332145472612679518634151094412253159031726816218632453031753345751743776490246355269103620242835740485671880961121439166193239273PYRAMIDE SCAN EXPRESS STANDARDCartographie topographique multi-échelles du territoire français issue des bases de données vecteur de l’IGN –réalisée selon un processus cartographique innovant fortement automatisé.Cartes-22.5 39.884122.5 55.7766GEOGRAPHICALGRIDSYSTEMS.MAPS.SCAN-EXPRESS.STANDARDimage/jpegPM10332386478546116817729861090121362154419722180132723307939554332145472612679518634151094412253159031726816218632453031753345751743776490246355269103620242835740485671880961121439166193239273Dénominations géographiquesAffichage des noms des villes, villages, lieux-dits ...Divers-63.3725 -21.475655.9259 72.679GEOGRAPHICALNAMES.NAMESimage/pngPM10336576328671116801152664134412136823041328268713273646002656536714547191925312107361510943183841062421472162190436768212644294317438087352042528858711887632147024850711717436122827437245654788481121091579105217218314HydrographieAffichage des lacs, réservoirs, rivières et cours d'eau en France.Hydrographie-63.3725 -21.475655.9259 72.679HYDROGRAPHY.HYDROGRAPHYimage/pngPM10339576328672116801152660134412136423001324268813273646002656536814547191925320107361510943183841062421472162190436768212644294417438247352042528858711887664147024850711717436122827437245654848501121091699101225218336HydrographieAffichage des lacs, réservoirs, rivières et cours d'eau en France.Hydrographie-63.1614 -21.399855.8465 72.679HYDRO_SYMBO_PYR-PNG_WLD_WM_20120629image/pngPM10494506356366116831148664134212136822971329268413273745942658536814547791895317107361510950183781063421473162190036757212694293817438177351542539858761887634147030850791717446122827437245654848501121091699101225218336HydrographieAffichage des lacs, réservoirs, rivières et cours d'eau en France.Hydrographie-63.3725 -21.475655.9259 72.679HYDRO_SYMBO_PYR-PNG_WLD_WM_20130319image/pngPM10494506356366116831148664134212136822971329268413273745942658536814547791895317107361510943183841062421472162190436768212644294417438247352042528858711887664147024850711717436122827437245654848501121091699101225218336HydrographieAffichage des lacs, réservoirs, rivières et cours d'eau en France.Hydrographie-63.3725 -21.475655.9259 72.679HYDRO_SYMBO_PYR-PNG_WLD_WM_20130320image/pngPM10339576328672116801152660134412136423001324268813273646002656536814547191925320107361510943183841062421472162190436768212644294417438247352042528858711887664147024850711717436122827437245654848501121091699101225218336IFREMER - Berck St-Quentin 1934Photographie aérienne de Berck St-Quentin en 1934 (archives de l'IFREMER).Littoral1.51075 50.2511.66952 50.4143IFREMER-BERK_PYR-PNG_FXX_1934-V1image/pngPM103453465165161169069210321033121381138420652066132763276941304133145527553882608267151105411077165211653516221082215433043330711744217443096608666142188843488619132173132285IFREMER - Groix 1938Photographies aériennes de Groix en 1938 (archives de l'IFREMER).Littoral-3.52232 47.6057-3.39634 47.6661IFREMER-GROIX_PYR-PNG_FXX_1938-V1image/pngPM103573575015021171471510031004121429143020072009132859286040154018145718572180318037151143611443160631607416228722288732126321491745745457756425364299189149191550128506128598IFREMER - Abords de LorientPhotographie aérienne des abords de Lorient en 1924 (archives de l'IFREMER).Littoral-3.56436 47.6222-3.25248 47.7997IFREMER-QUIBERON_PYR-PNG_FXX_1924-V1image/pngPM103563575015021171371510031005121427143020072010132854286040144021145709572080298043151141911441160591608716228392288332119321751745678457666423864350189135791532128477128700IFREMER - Somme 1935Photographie aérienne de la Baie de Somme en 1935 (archives de l'IFREMER).Littoral1.48669 50.16991.65766 50.2795IFREMER-SOMME_PYR-PNG_FXX_WM_1935-V1image/pngPM103463465165161169269310321033121384138620642066132768277241294133145536554482598267151107311088165191653416221462217733038330691744293443556607766139188858788711132155132278Corine Land Cover 2006Visualisation de l’occupation du sol en France métropolitaine. Outil de référence pour mesurer les impacts environnementaux.Occupation des terres-5.15047 41.32529.57054 51.0991LANDCOVER.CORINELANDCOVERimage/pngPM10340382497539116837659941078121368153019892157132737306139784314619233135741476268883951241369169191248270Régions forestières nationalesCette cartographie représente des zones homogènes du point de vue des types de forêt ou de paysage sur la base de conditions physiques dominantes (climat, sol, relief).Occupation des terres-5.15047 41.32529.57054 51.0991LANDCOVER.FORESTAREASimage/pngPM1033438249754511677765994108212136215301989215713273330613978431414547561237957862915109501224615915172591621908244843183034510615233139739476270879951241409167191248272ForêtReprésentation simplifiée des forêts.Forêt-63.3725 -21.475655.9259 51.3121LANDCOVER.FORESTCOVERimage/pngPM10336576328671116801152664134412136823041328268713273646002656536714547191925312107361510952183831063221471162191236760212644293517438247352042528858711887648147024850711717439168288160336Carte forestière v1 (1987-2004)La cartographie forestière est une base de données cartographique des formations végétales forestières et naturelles. Elle couvre l'ensemble du territoire de France métropolitaine. Elle est réalisée par interprétation de photographies aériennes infrarouges et affinée par des contrôles sur le terrain (le seuil minimal de surface cartographiée est de 2,25 ha).Occupation des terres-5.34206 41.20659.82939 51.2203LANDCOVER.FORESTINVENTORY.V1image/pngPM1034138349653911683766993107912136715321987215913273430653974431914546961307948863915109381226015897172781621876245213179534557621233133742476267885951241349170191248269Carte forestière (v2 : 2006-)Localisation de 32 types de formations végétales sur le territoire. Carte en cours de réalisation depuis 2006.Occupation des terres-5.34206 41.20659.82939 51.2203LANDCOVER.FORESTINVENTORY.V2image/pngPM1034138349653911683766993107912136715321987215913273430653974431914546961307948863915109381226015897172781621876245213179534557621233133742476267885951241349170191248269SylvoécorégionsDécoupage de la France métropolitaine prenant en compte les facteurs biogéographiques déterminant la production forestière et la répartition des grands types d’habitat forestier.Occupation des terres-5.15047 41.32529.57054 51.0991LANDCOVER.SYLVOECOREGIONSimage/pngPM1033638449654411672768992108812135915361984216013273630723968432014547261287952864015109431225515904172641621904244963182434512616321647732484879880961111449160192240272Sylvoécorégions d'alluvions récentesAffichage des cinq sylvoécorégions d’alluvions récentes correspondant aux cinq vallées des bassins des grands fleuves français et de leurs affluents, à enjeux importants.Occupation des terres-5.15047 41.32529.57054 51.0991LANDCOVER.SYLVOECOREGIONS.ALLUVIUMimage/pngPM1033438249754511677765994108212136215301989215713273330613986431414547561237973862915109581223815955172591621916244683191834510615233139739476270879951241409167191248272Registre parcellaire graphique (RPG) 2007Registre parcellaire graphique : zones de cultures déclarées par les exploitants en 2007.Agriculture-63.2635 -21.41956.0237 51.2203LANDUSE.AGRICULTURE2007image/pngPM103415743326711168311486641342121367229713282685132734459526565370145469919053121074115109381838010625214831621876367612125142966621352041742714183885143831679170287166335Registre parcellaire graphique (RPG) 2008Registre parcellaire graphique : zones de cultures déclarées par les exploitants en 2008.Agriculture-63.2635 -21.41956.0237 51.2203LANDUSE.AGRICULTURE2008image/pngPM103415743326711168311486641342121367229713282685132734459526565370145469919053121074115109381838010625214831621876367612125142966621352041742714183885143831679170287166335Registre parcellaire graphique (RPG) 2009Registre parcellaire graphique : zones de cultures déclarées par les exploitants en 2009.Agriculture-63.2635 -21.41956.0237 51.2203LANDUSE.AGRICULTURE2009image/pngPM103415743326711168311486641342121367229713282685132734459526565370145469919053121074115109381838010625214831621876367612125142966621352041742714183885143831679170287166335Registre parcellaire graphique (RPG) 2010Registre parcellaire graphique : zones de culture déclarées par les exploitants en 2010.Agriculture-5.34206 41.20659.82939 51.2203LANDUSE.AGRICULTURE2010image/pngPM1034138349653911683766993107912136715321987215913273430653974431914546961307948863915109381226015897172781621876245213179534557621233133742476267885951241349170191248269Limites administrativesReprésentation des limites administratives (régions, départements, cantons, communes)Unités administratives-26.711 20.991854.9094 72.679LIMADM_SYMBO_PYR-PNG_WLD_20120620image/pngPM103383824975411168176599410781213661530198921571327253061397843141454676123795786296122827437245654848501121091699101225218336Limites administrativesReprésentation des limites administratives (régions, départements, cantons, communes)Unités administratives-63.1614 -21.399855.8465 72.679LIMADM_SYMBO_PYR-PNG_WLD_20120704image/pngPM10338574332677116811148664134612136622971329268413272545942658536814546791895317107361510950183781063421473162190036757212694293817438177351542539858761887650147030850791717446122827437245654848501121091699101225218336Limites administrativesReprésentation des limites administratives (régions, départements, cantons, communes)Unités administratives-63.3725 -21.475655.9259 72.679LIMADM_SYMBO_PYR-PNG_WLD_20130204image/pngPM10338574332677116811148664134612136622971329268413272545942658536814546791895317107361510943183841062421472162190436768212644294317438247352042528858711887648147024850711717436122827437245654848501121091699101225218336Limites administrativesReprésentation des limites administratives (régions, départements, cantons, communes)Unités administratives-63.3725 -21.475655.9259 72.679LIMADM_SYMBO_PYR-PNG_WLD_20130205image/pngPM10336576336671116801152672134412136823041344268713273646082688537614547292005376107351510943183841062421472162190436768212644294317438247352042528858711887648147024850711717436122827437245654848501121091699101225218336Limites administrativesReprésentation des limites administratives (régions, départements, cantons, communes)Unités administratives-63.3725 -21.475655.9259 72.679LIMADM_SYMBO_PYR-PNG_WLD_20130219image/pngPM10336576336671116801152672134412136823041344268713273646082688537614547292005376107351510943183841062421472162190436768212644294317438247352042528858711887648147024850711717436122926427245854848491141081689168288160336MNT LITTO3DMNT LITTO3D au pas de 1MLittoral5.45 42.956.3 43.3LITTO3D_PYR-RAW_WLD_WGS84G_2012-06-25image/x-bil;bits=32WGS84G000111002210265267105510591153153521102119121062107042204239132125214184408478144250428216880169571585018565337603391421144322884441616588323361616656673333131132866662632649132133527529Crues du bassin de la Seine - PHECCarte des plus hautes eaux connues (PHEC) sur le bassin de la Seine : crue de la seine et de ses affluents en 1910, ainsi que d'autres crues à des dates postérieures sur d'autres cours d'eau.Zone à risques0.419457 47.41635.43248 50.064LSEP-CRUE_PYR-PNG_WLD_WM_20120904image/pngPM10342358513529116927161026105812138514332052211613277128674105422514555057348211844315111011146916422168861622203229393284433764614223240736446472881891281369171179256264Crues du bassin de la Seine - PHECCarte des plus hautes eaux connues (PHEC) sur le bassin de la Seine : crue de la seine et de ses affluents en 1910, ainsi que d'autres crues à des dates postérieures sur d'autres cours d'eau.Zone à risques0.419457 47.41635.43248 50.064LSEP-CRUE_PYR-PNG_WLD_WM_20121009image/pngPM10342358513529116927161026105812138514332052211613277128674105422514555057348211844315111011146916422168861622203229393284433764614223240736446472881891281369171179256264Crues du bassin de la Seine - PHECCarte des plus hautes eaux connues (PHEC) sur le bassin de la Seine : crue de la seine et de ses affluents en 1910, ainsi que d'autres crues à des dates postérieures sur d'autres cours d'eau.Risques naturels0.419457 47.41635.43248 50.064LSEP-CRUE_PYR-PNG_WLD_WM_20130128image/pngPM10342360512529116887201024105812138414392048211613277128724104422514555057368208844315111011147216416168861622203229443284033764614243240736486472880961281369168184256264Corine Land Cover 2006Visualisation de l’occupation du sol en France métropolitaine. Outil de référence pour mesurer les impacts environnementaux.Occupation des terres-5.15047 41.32529.57054 51.0991MEDDE-CLC_PYR-PNG_FXX_WM_20120703image/pngPM10340382497539116837659941078121368153019892157132737306139784314619233135741476268883951241369169191248270Ortholittorale 2000Donnée issue du Référentiel géographique du littoral. Zone de couverture de l'orthophotographie : côte de la mer du Nord, de la Manche et de l'Atlantique.Littoral-5.21565 43.3012.60783 51.1233MEDDE-ORTHOLITTORAL_PYR_PNG_WLD_WM_20120926image/pngPM10342375497519116847509941038121369150019882077132738300039774155145476600179548310151095212003159091662116219042400631818332421743808480126363766485188761796024127274132970621233132742466264885931241299171187248259Arrêtés de protection de biotopeConservation de l'habitat d'espèces protégées. Outil réglementaires de niveau départemental.Ecologie-63.2635 -21.41955.8659 51.2203MNHN-APB_PYR-PNG_WLD_WM_20120615image/pngPM103415743326701168311486641341121367229713282683132734459526565367145469919053121073415109381838010625214691621876367612125142938621352041742714183885143831679170287166335Arrêtés de protection de biotopeConservation de l'habitat d'espèces protégées. Outil réglementaires de niveau départemental.Ecologie-63.3725 -21.475655.9259 51.3121MNHN-APB_PYR-PNG_WLD_WM_20121005image/pngPM103345743316831168511496631351121370229813262686132740459626535373145481919353071073115109621838610631214631621940367562126342911619352052739714189879143821789159287165341Réserves de biosphèreRéserves naturelles reconnues par le Programme sur l'Homme et la Biosphère créé par l'Unesco.Ecologie-63.25 15.71849.72255 51.1534MNHN-BIOS_PYR-PNG_WLD_WM_20120629image/pngPM1034246633253911684933664107912136818661328215813273637332656431714547374675313863415109471493410626172681621895298692125334537621292033742584167885116831349171233166269Conservatoire du littoral : Périmètres d'interventionLes sites du conservatoire du littoral ont pour vocation la sauvegarde des espaces côtiers et lacustres. Leur accès au public est encouragé mais reste défini dans des limites compatibles avec la vulnérabilité de chaque site.Littoral-63.1614 -21.399855.8465 51.0991MNHN-CDL_PYR-PNG_WLD_WM_20121212_2image/pngPM103345743326771167711486641346121362229713292684132733459426585368145475918953171073615109501837810634214731621908367572126942938879143831759167287166342Conservatoire du littoral : Périmètres d'interventionLes sites du conservatoire du littoral ont pour vocation la sauvegarde des espaces côtiers et lacustres. Leur accès au public est encouragé mais reste défini dans des limites compatibles avec la vulnérabilité de chaque site.Littoral-63.1614 -21.399855.8465 51.0991MNHN-CDL_PYR-PNG_WLD_WM_20130116image/pngPM103345743326771167711486641346121362229713292684132733459426585368145475918953171073615109501837810634214731621908367572126942938879143831759167287166342Conservatoire du littoral : Périmètres d'interventionLes sites du conservatoire du littoral ont pour vocation la sauvegarde des espaces côtiers et lacustres. Leur accès au public est encouragé mais reste défini dans des limites compatibles avec la vulnérabilité de chaque site.Littoral-63.3725 -21.475655.9259 51.3121MNHN-CDL_PYR-PNG_WLD_WM_20130319image/pngPM103365763286721168011526641344121368230413282688132736460026565368145471919253121073615109521838410632214711621912367602127242935880144801689168288160336Conservatoire du littoral : Parcelles protégéesLes sites du conservatoire du littoral ont pour vocation la sauvegarde des espaces côtiers et lacustres. Leur accès au public est encouragé mais reste défini dans des limites compatibles avec la vulnérabilité de chaque site.Littoral-63.3725 -21.475655.9259 51.3121MNHN-CEN_PYR-PNG_WLD_WM_20121213image/pngPM103365763286711168011526641344121368230413282687132736460026565367145471919253121073615109431838410624214721621904367682126442943880144801689168288160336Parcs naturels marinsZones maritimes identifiées pour leur biodiversité ou par les activités humaines faisant l'objet de protection.Ecologie-63.3725 -21.475655.9259 51.3121MNHN-PNM_PYR-PNG_WLD_WM_20120717image/pngPM103345743316751167711496631343121362229813262686132724459626535373145457919353071073915109221838610615214791621844367722123142951619352044739714189879143821709167287165341Parcs naturels marinsZones maritimes identifiées pour leur biodiversité ou par les activités humaines faisant l'objet de protection.Ecologie-63.3725 -21.475655.9259 51.3121MNHN-PNM_PYR-PNG_WLD_WM_20121002image/pngPM103345743316751167711496631343121362229813262686132724459626535373145457919353071073915109221838610615214791621844367722123142951619352044739714189879143821709167287165341Parcs naturels régionauxLes parcs naturels régionaux ont pour but de valoriser de vastes espaces de fort intérêt culturel et naturel, et de veiller au développement durable de ces territoires dont le caractère rural est souvent très affirmé.Ecologie-61.388 1.984799.82939 51.2203MNHN-PNR_PYR-PNG_WLD_WM_20120622image/pngPM10341506337539116831012674107912136720251349215913273440502699431914546981015398863915109381620310796172781621876324062159234557621312133742634267885126841349170253168269Parcs naturels régionauxLes parcs naturels régionaux ont pour but de valoriser de vastes espaces de fort intérêt culturel et naturel, et de veiller au développement durable de ces territoires dont le caractère rural est souvent très affirmé.Ecologie-63.3725 -21.475655.9259 51.3121MNHN-PNR_PYR-PNG_WLD_WM_20121005image/pngPM10334510331539116851005663107912137020101342215813274040042701431714548180095403863515109621600210807172551621940319882161534495619352036739714173879127821469159255165277Parcs nationauxZones naturelles labellisées en raison de leur richesse naturelle exceptionnelle.Ecologie-54.7027 -21.487155.9848 51.1534MNHN-PN_PYR-PNG_WLD_WM_20120628image/pngPM103425743566711168411497121342121368229814252684132736459628515369145473919357021073915109471838711404214791621895367742280942959621352241742714483885143891679171287178335Parcs nationauxLes parcs nationaux sont de vastes espaces protégés terrestres ou marins dont le patrimoine naturel est exceptionnel, et dont le but est à la fois de protéger des processus écologiques à large échelle et de fournir des possibilités de découverte de la nature.Ecologie-61.9679 -21.387755.8779 51.0863MNHN-PN_PYR-PNG_WLD_WM_20120719image/pngPM103425743356701168411486711341121369229713422683132739459426855367145478918853711073515109571837710743214701621914367552148742940621352041742714183885143831679171287167335Parcs nationauxLes parcs nationaux sont de vastes espaces protégés terrestres ou marins dont le patrimoine naturel est exceptionnel, et dont le but est à la fois de protéger des processus écologiques à large échelle et de fournir des possibilités de découverte de la nature.Ecologie-63.3725 -21.475655.9259 51.3121MNHN-PN_PYR-PNG_WLD_WM_20120810image/pngPM103345743316751167711496631343121362229813262686132724459626535373145457919353071073915109221838610615214791621844367722123142951619352044739714189879143821709167287165341Zones humides d'importance internationaleUn site Ramsar est un espace désigné en application de la Convention relative aux zones humides d'importance internationale, particulièrement comme habitats des oiseaux d'eau, dont le traité a été signé en 1971 sur les bords de la mer Caspienne (Iran).Ecologie-63.3725 -50.571480.7449 51.3121MNHN-RAMSAR_PYR-PNG_WLD_WM_20121213image/pngPM1033668833673611672136067214721213592704134429441327365408268858721454881081653761174315109912163110752234721621984432642150346943616471647732953295880176801919160352160368Réserves biologiquesUne réserve biologique est un espace protégé en milieu forestier ou en milieu associé à la forêt (landes, mares, tourbières, dunes). Ce statut s'applique aux forêts gérées par l'Office National des Forêts et a pour but la protection d'habitats remarquables ou représentatifs.Ecologie-61.388 -21.46955.8906 51.2203MNHN-RB_PYR-PNG_WLD_WM_20120622image/pngPM103415743376701168311496741341121367229813492683132734459626995367145469919253981073515109381838510796214711621876367712159242942621352141742714283885143841679170287168335Réserves biologiquesUne réserve biologique est un espace protégé en milieu forestier ou en milieu associé à la forêt (landes, mares, tourbières, dunes). Ce statut s'applique aux forêts gérées par l'Office National des Forêts et a pour but la protection d'habitats remarquables ou représentatifs.Ecologie-63.3725 -21.475655.9259 51.3121MNHN-RB_PYR-PNG_WLD_WM_20121002image/pngPM103345743316831168511496631351121370229813422686132740459627015373145497919354031073115109941838610807214631622004367562161542927619352052739714189879143821789159287165341Réserves nationales de chasse et de faune sauvageLes réserves nationales de chasse et de faune sauvage sont des espaces protégés terrestres ou marins dont la gestion est principalement assurée par l'Office National de la Chasse et de la Faune Sauvage.Ecologie-2.99155 41.6879.6157 51.0863MNHN-RNCF_PYR-PNG_WLD_WM_20120717image/pngPM10342381503539116847621006107812136915252013215713273930504027431414547861018055862915109571220216111172591621914244043222334518621233133742476267885951251349171190251269Réserves Naturelles de CorseLes réserves naturelles sont des espaces protégés terrestres ou marins dont le patrimoine naturel est exceptionnel, tant sur le plan de la biodiversité que parfois sur celui de la géodiversité.Ecologie-5.15047 41.32529.57054 51.0991MNHN-RNC_PYR-PNG_WLD_WM_20120907image/pngPM10374382529545117497651066108212149815302141215713300530614282431414601961238573862915120381224617155172511624084244923431834502615233139739476270887951321409183191264272Réserves naturelles nationalesLes réserves naturelles sont des espaces protégés terrestres ou marins dont le patrimoine naturel est exceptionnel, tant sur le plan de la biodiversité que parfois sur celui de la géodiversité.Ecologie-63.25 -21.487155.8779 51.0863MNHN-RN_PYR-PNG_WLD_WM_20120720image/pngPM103425743326701168411496641341121369229813282683132739459626565367145478919353131073515109571838710626214701621914367742125342940621352041742714183885143831679171287166335Réserves naturelles nationalesLes réserves naturelles sont des espaces protégés terrestres ou marins dont le patrimoine naturel est exceptionnel, tant sur le plan de la biodiversité que parfois sur celui de la géodiversité.Ecologie-63.3725 -50.571480.7449 51.3121MNHN-RN_PYR-PNG_WLD_WM_20121107image/pngPM1033567933173911678135866314711213652709132629341327385410265358691454761082053151173915109522163210639234711621912432562128746943618422052736844197881169821869163339165373Sites Natura 2000 au titre de la Directive HabitatsLe réseau Natura 2000 s'inscrit au coeur de la politique de conservation de la nature de l'Union européenne et est un élément clé de l'objectif visant à enrayer l'érosion de la biodiversité.Ecologie-5.34206 41.20659.82939 51.2203MNHN-SIC_PYR-PNG_WLD_WM_20120719image/pngPM1034138349653911683766993107912136715321987215913273430653974431914546961307948863915109381226015897172781621876245213179534557621233133742476267885951241349170191248269Sites Natura 2000 au titre de la Directive HabitatsLe réseau Natura 2000 s'inscrit au coeur de la politique de conservation de la nature de l'Union européenne et est un élément clé de l'objectif visant à enrayer l'érosion de la biodiversité.Ecologie-5.15047 41.32529.57054 51.0991MNHN-SIC_PYR-PNG_WLD_WM_20121001image/pngPM1033438249754511677765994108212136215301989215713273330613978431414547561237957862915109501224615915172591621908244923183034510615233139739476270879951241409167191248272Zones écologiques de nature remarquable (ZNIEFF1)Inventaire des espaces naturels abritant la nature remarquableEcologie-63.3725 -21.475655.9259 51.3121MNHN-ZNIEFF1_PYR-PNG_WLD_WM_20121210image/pngPM10336512344544116801016696108012136820241400215913273640482808431914547180965616863215109521618411231172551621912323672247134511616311639739633972880128801369168256168272Zones fonctionnelles de nature remarquable (ZNIEFF2)Inventaire des espaces fonctionnels indispensables à la nature remarquable.Ecologie-63.3725 -21.475655.9259 51.3121MNHN-ZNIEFF2_PYR-PNG_WLD_WM20121204image/pngPM10336512344544116801016696108012136820241400215913273640482808431914547980965624863215109601619111247172551621920323832249534503616311639739633972880128801369168256168272Sites NATURA 2000 au titre de la Directive OiseauxLe réseau Natura 2000 s'inscrit au coeur de la politique de conservation de la nature de l'Union européenne et est un élément clé de l'objectif visant à enrayer l'érosion de la biodiversité.Ecologie-5.34206 41.20659.82939 51.2203MNHN-ZPS_PYR-PNG_WLD_WM_20120717image/pngPM1034138349653911683766993107912136715321987215913273430653974431914546961307948863915109381226015897172781621876245213179534557621233133742476267885951241349170191248269Sites NATURA 2000 au titre de la Directive OiseauxLe réseau Natura 2000 s'inscrit au coeur de la politique de conservation de la nature de l'Union européenne et est un élément clé de l'objectif visant à enrayer l'érosion de la biodiversité.Ecologie-63.3725 -21.475655.9259 51.3121MNHN-ZPS_PYR-PNG_WLD_WM_20121001image/pngPM10334390491539116777739911079121362153819822158132724306839734317145457612979478635151092212258158951726316218442451631799345196192728367395557738791031221389167199245269MNT BDAlti V1BDAlti V1 au pas de 25mMNT-64 -23168 52MNT_PYR-RAW_WLD_WGS84G_2012-07-04image/x-bil;bits=32WGS84G000011011310216642659197911432128513193959202273155154310103056202061613404112372780822478541601644949108321329989Carte Monde 12 feuillesCarte de mondeCartes-180 -66.5133180 85.0511MONDE12F_PYR-JPEG_WLD_WM_WMTS_3Dimage/jpegPM00001101022030430608401201650240326048064Carte Monde 12 feuillesCarte de mondeCartes-180 -60180 80MONDE12F_PYR-JPEG_WLD_WM_WMTS_3D_V1image/jpegPM2020430508411101653220326745064Carte Monde 12 feuillesCarte de mondeCartes-180 -60180 80MONDE12F_PYR-JPEG_WLD_WM_WMTS_3D_V2image/jpegPM00001101022020430508411101653220326745064Carte Monde 12 feuillesCarte de mondeCartes-180 -66.5133180 85.0511MONDE12F_PYR-JPEG_WLD_WM_WMTS_3D_V2-20130601image/jpegPM00001101022030430608401201650240326048064Crues du bassin de la Seine - PHECCarte des plus hautes eaux connues (PHEC) sur le bassin de la Seine : crue de la seine et de ses affluents en 1910, ainsi que d'autres crues à des dates postérieures sur d'autres cours d'eau.Risques naturels0.419457 47.41635.43248 50.064NATURALRISKZONES.1910FLOODEDWATERSHEDSimage/pngPM10342360512529116887201024105812138414392048211613277128724104422514555057368208844315111011147216416168861622203229443284033764614243240736486472880961281369168184256264BDORTHO-NCLa BDORTHO-NC est une orthophotographie du territoire de Nouvelle-Calédonie réalisée par la DITTT pour le compte du Gouvernement de Nouvelle-Calédonie.Photographies-178 -84178 84NCL-DITTT-ORTHO_PYR-JPEG_WLD_WM_WMTS_20121214image/jpegPM00000101011031992510181162198511203612125397022407313454846357816792414909692701563315848151819318540312663169716363863708062533633951772773741601250661267911814554614832025013225358220303307074015015503103161620637312401278724812549154962509Dénominations géographiquesAffichage des noms des villes, villages, lieux-dits ...Divers-63.3725 -21.475655.9259 72.679NOMS_SYMBO_PYR-PNG_WLD_WM_20120814image/pngPM10334574331675116771149671134312136222981342268613273245962685537314547391935371107396122827437245654788481121091579105217218314Dénominations géographiquesAffichage des noms des villes, villages, lieux-dits ...Divers-63.3725 -21.475655.9259 72.679NOMS_SYMBO_PYR-PNG_WLD_WM_20120815image/pngPM1033457433167511677114967113431213622298134226861327324596268553731454739193537110739151095418378106312147116219083675621263429356122827437245654788481121091579105217218314Dénominations géographiquesAffichage des noms des villes, villages, lieux-dits ...Divers-63.3725 -21.475655.9259 72.679NOMS_SYMBO_PYR-PNG_WLD_WM_20120829image/pngPM10334574331675116771149671134312136222981342268613273245962685537314547391935371107391510954183781063121471162190836756212634293517438167351242526858701887633147025850691717416122827437245654788481121091579105217218314Dénominations géographiquesAffichage des noms des villes, villages, lieux-dits ...Divers-63.3725 -21.475655.9259 72.679NOMS_SYMBO_PYR-PNG_WLD_WM_20120912image/pngPM10334574331675116771149671134312136222981342268613273245962685537314547391935371107391510954183781063121471162190836756212634293517438167351242526858701887633147025850691717416122827437245654788481121091579105217218314Dénominations géographiquesAffichage des noms des villes, villages, lieux-dits ...Divers-63.3725 -21.475655.9259 72.679NOMS_SYMBO_PYR-PNG_WLD_WM_20130311image/pngPM10336576328671116801152664134412136823041328268713273646002656536714547191925312107361510943183841062421472162190436768212644294317438087352042528858711887632147024850711717436122827437245654788481121091579105217218314Photographie - Biarritz 1977Photographie de Biarritz 1977EDUGEO-1.8265 43.3165-1.18848 43.7157ORTHO-EDUGEO_PYR-PNG_WLD_WMimage/pngPM10373375506508117467501013101712149315002027203413298730004054406814597560008108813715119501200116217162751623901240023243532551623233131746466363893931261279186187253254Suisse - photographies aériennes du canton de Genève (SITG)Photographie aérienne du canton de Genève.Photographies5.95007 46.12416.31198 46.3658ORTHOGENEVE_PYR-PNG_CHE_WM_20100612image/pngPM1036236352852911725727105710591214511455211521191329022910423142391458045820846284791511609116411692516958162321923282338513391717464384656567702678341892876931301354041356681918575218626127080927133620371504372522541618542672622223333745456666890901321329181181264264Photographie - AJACCIO 1975Photographie - Ajaccio 1975EDUGEO8.65713 41.83348.98239 42.0846ORTHOIMAGERY.EDUGEO.AJACCIO1975image/pngPM10379380536537117597611073107512151915232146215013303830464292430014607660928585860015121531218417171172011624307243683434334403623233333747476767894951341349189190268268Photographie - AJACCIO 1990Photographie - Ajaccio 1990EDUGEO8.64462 41.78688.98239 42.0939ORTHOIMAGERY.EDUGEO.AJACCIO1990image/pngPM10379380536537117597611073107512151915232146215013303830474292430014607660958585860015121521219017170172011624305243803434134403623233333747476767894951341349189190268268SPOT ARCACHON 2010Zone d'ARCACHON - 2010EDUGEO-1.87654 44.2289-0.750618 45.0301ORTHOIMAGERY.EDUGEO.ARCACHON2010image/pngPM10368371506509117367421013101912147214852026203913294529714053407814589159438106815715117831188616213163151623567237723242632631623233131746466363892921261279184185253254SPOT ARRAS LENS BETHUNE 2008Zone de ARRAS LENS BETHUNE - 2008EDUGEO1.75144 49.9293.25268 50.8068ORTHOIMAGERY.EDUGEO.ARRAS-LENS-BETHUNE2008image/pngPM10343347516521116876951033104212137413902067208513274927804135417014549855618271834015109971112316543166801621995222463308633360621213232742436465885861291309171173258260Photographie - BELFORT MONTBELLIARD 1951Photographie - BELFORT MONTBELLIARD 1951EDUGEO6.69301 47.46076.96824 47.6801ORTHOIMAGERY.EDUGEO.BELFORT-MONTBELLIARD1951image/pngPM10357358531531117147161062106312142914322124212713285828654248425414571757318496850915114341146316993170181622868229273398634036622223333744446666889891321329178179265265Photographie - BERRY SUD 1950Photographie - BERRY SUD 1950EDUGEO1.23852 46.36691.48873 46.4531ORTHOIMAGERY.EDUGEO.BERRY-SUD1950image/pngPM10362362515516117247251031103212144914512062206413289929024124412914579858048248825915115971160916496165191623195232183299333039622223232745456464890901281299181181257258Photographie - BERRY SUD 1970Photographie - BERRY SUD 1970EDUGEO1.01333 46.60811.42617 46.7283ORTHOIMAGERY.EDUGEO.BERRY-SUD1970image/pngPM10361361514516117227231029103212144514472059206413289028944119412814578057888238825615115611157716476165131623123231543295233027622223232745456464890901281299180180257258Photographie - BETHUNE 1963Photographie - BETHUNE 1963EDUGEO2.62716 50.39392.95243 50.5054ORTHOIMAGERY.EDUGEO.BETHUNE1963image/pngPM10345345519520116906911038104012138013822077208113276027644155416314552055288311832615110411105716623166521622082221143324633305621213232743436465886861291309172172259260Photographie - BETHUNE 1964Photographie - BETHUNE 1964EDUGEO2.83984 50.333.29021 50.4098ORTHOIMAGERY.EDUGEO.BETHUNE1964image/pngPM10345345520521116906911040104212138113832080208513276327664160417014552755338321834115110541106616642166831622109221323328433366621213232743436565886861301309172172260260Photographie - BETHUNE 1988Photographie - BETHUNE 1988EDUGEO2.5521 50.3223.24017 50.4895ORTHOIMAGERY.EDUGEO.BETHUNE1988image/pngPM10345345519521116906911038104212138013832077208413276027664154416914552155338308833915110431106716616166781622086221343323233357621213232743436465886861291309172172259260Photographie - Biarritz 1977Photographie de Biarritz 1977EDUGEO-1.8265 43.3165-1.18848 43.7157ORTHOIMAGERY.EDUGEO.BIARRITZ1977image/pngPM10373375506508117467501013101712149315002027203413298730004054406814597560008108813715119501200116217162751623901240023243532551623233131746466363893931261279186187253254Photographie - BIARRTITZ 1979Photographie - Biarritz 1979EDUGEO-1.13844 43.6795-0.975803 43.7609ORTHOIMAGERY.EDUGEO.BIARRTITZ1979image/pngPM10373373508509117467471017101812149314942035203613298629884070407314597259778140814715119451195516280162951623890239113256032590623233131746466363893931271279186186254254SPOT BORDEAUX 2003Zone de Bordeaux 2003EDUGEO-1.12593 44.67540.125103 45.5582ORTHOIMAGERY.EDUGEO.BORDEAUX2003image/pngPM10366369508512117327391017102412146414782035204913292829574070409814585759148140819715117151182916281163951623430236583256332790622233132745466364891921271289183184254256Photographie - BOURG SAINT MAURICE 1956Photographie - BOURG SAINT MAURICE 1956EDUGEO6.61795 45.47936.85564 45.6282ORTHOIMAGERY.EDUGEO.BOURG-ST-MAURICE1956image/pngPM10365366530531117317321061106312146314652123212613292629314246425214585358628493850415117061172516986170081623412234513397234016622223333745456666891911321329182183265265Photographie - CAEN 1991Photographie - CAEN 1991EDUGEO-0.975803 49.0350.0250206 49.4109ORTHOIMAGERY.EDUGEO.CAEN1991image/pngPM10349351509512116997031018102412139914062036204813279928124073409614559856248147819315111961124816295163861622392224963259032772621213132743436364887871271289174175254256Photographie - Le Cap d'Agde 1968Photographie du Cap d'Agde 1968EDUGEO3.02749 43.18893.60297 43.3984ORTHOIMAGERY.EDUGEO.CAP-D-AGDE1968image/pngPM10374375520522117497511041104412149815022082208813299730044164417714599560088329835515119901201716659167111623981240343331933423623233232746466565893931301309187187260261SPOT Cap d'Agde 2008Zone du Cap d'Agde - 2008EDUGEO3.12757 43.14333.75309 43.5073ORTHOIMAGERY.EDUGEO.CAP-D-AGDE2008image/pngPM10374375520522117487511041104512149715022083209013299430054167418114598860118334836215119771202216668167251623954240453333733451623233232746466565893931301309187187260261Photographie - Le Cap d'Agde 1981Photographie du Cap d'Agde 1981EDUGEO3.01498 43.18893.66552 43.3984ORTHOIMAGERY.EDUGEO.CAP-DAGE1981image/pngPM10374375520522117497511041104412149815022082208913299730044164417914599560088329835815119901201716658167171623981240343331633435623233232746466565893931301309187187260261Photographie - CLERMONT FERRAND 1965Photographie - CLERMONT FERRAND 1965EDUGEO2.82733 45.71563.29021 45.9596ORTHOIMAGERY.EDUGEO.CLERMONT-FERRAND1965image/pngPM10364365520521117287301040104212145714612080208513291529234160417014583158478320834115116621169416641166831623325233893328233366622223232745456565891911301309182182260260Photographie - CLERMONT FERRAND 1985Photographie - CLERMONT FERRAND 1985EDUGEO2.88988 45.70693.2777 45.9423ORTHOIMAGERY.EDUGEO.CLERMONT-FERRAND1985image/pngPM10364365520521117297301040104212145814612080208513291629234161417014583258478323834115116651169516647166821623330233913329433364622223232745456565891911301309182182260260Photographie - CREIL SUD PICARDIE 1975Photographie - CREIL SUD PICARDIE 1975EDUGEO2.25185 49.0762.96494 49.5085ORTHOIMAGERY.EDUGEO.CREIL-SUD-PICARDIE1975image/pngPM10349351518520116987021036104012139714052073208113279528104147416314559156218294832615111821124216588166531622364224853317733307621213232743436465887871291309174175259260Photographie - Dijon 1971Photographie de Dijon 1971EDUGEO4.87902 47.18935.24181 47.3676ORTHOIMAGERY.EDUGEO.DIJON1971image/pngPM10358359525526117177181051105312143414372103210713286928754207421514573857508414843015114761150016828168611622952230003365633722622223232744446565889891311319179179262263Photographie - Grenoble 1966Photographie de Grenoble 1966EDUGEO5.61712 45.06555.94239 45.286ORTHOIMAGERY.EDUGEO.GRENOBLE1966image/pngPM10367368527528117347361055105712146814722111211513293729444223423114587558898447846215117501177916895169241623501235583379033849622233233745466566891921311329183184263264Photographie - Grenoble 1989Photographie de Grenoble 1989EDUGEO5.54206 45.05665.96741 45.3387ORTHOIMAGERY.EDUGEO.GRENOBLE1989image/pngPM10366368527528117337361055105712146714722111211513293529454222423114587158908444846315117431178016888169271623487235603377633854622233233745466566891921311329183184263264Photographie - GUADELOUPE 1984Photographie - GUADELOUPE 1984EDUGEO-61.7633 15.9411-61.4756 16.3376ORTHOIMAGERY.EDUGEO.GUADELOUPE1984image/pngPM104644663363371192993267267412185918641345134813371937282690269714743874565381539415148761491310762107881629752298272152421576629292121758584242811611684849232233168168Photographie - GUYANE 1955Photographie - Guyane 1955EDUGEO-54.1321 5.384-53.5065 5.79487ORTHOIMAGERY.EDUGEO.GUYANE1955image/pngPM104954963583591199099371671912198119861432143913396339732864287814792779465728575615158551589311456115131631711317862291323027630312222761624444812312489899247248179179Photographie - LA REUNION 1961Photographie - LA REUNION 1961EDUGEO55.258 -21.390655.5833 -20.8538ORTHOIMAGERY.EDUGEO.LA-REUNION1961image/pngPM10572574669670111145114813381340122290229726762680134581459453535360149162918810706107211518325183772141321443163665136755428274288663535414177171838381431431671679286287334335Photographie - LA REUNION 1980Photographie - LA REUNION 1980EDUGEO55.1579 -21.437255.6583 -20.7836ORTHOIMAGERY.EDUGEO.LA-REUNION1980image/pngPM10572574668670111144114813371340122289229726752681134579459553515362149159919110702107251518318183822140421450163663736764428094290063535414177171838381431431671679286287334335Photographie - LA REUNION 1989Photographie - LA REUNION 1989EDUGEO55.2079 -21.402255.7334 -20.8538ORTHOIMAGERY.EDUGEO.LA-REUNION1989image/pngPM10572574669670111145114813381341122290229726762682134581459453525364149162918910704107281518325183792140921456163665136758428184291363535414177171838381431431671679286287334335SPOT Ls Réunion 2010Zone de la Réunion - 2010EDUGEO55.0453 -21.495455.921 -20.6783ORTHOIMAGERY.EDUGEO.LA-REUNION2010image/pngPM10572574668671111144114913371342122288229826742684134577459753485368149154919410697107371518308183882139421474163661636776427884294863535414177171838381431431671679286287334335Photographie - LA ROCHELLE ROCHEFORT 1950Photographie LA ROCHELLE ROCHEFORT 1950EDUGEO-1.06338 45.05665.96741 45.9944ORTHOIMAGERY.EDUGEO.LA-ROCHELLE-ROCHEFORT1950image/pngPM10364368508528117287361017105712145714722035211513291429454071423114582958908143846315116581178016287169271623316235603257433854622233133745466366891921271329182184254264Photographie - LA-ROCHELLE-ROCHEFORT 1973Photographie de La Rochelle Rochefort 1973EDUGEO-1.37613 46.0726-1.03835 46.2286ORTHOIMAGERY.EDUGEO.LA-ROCHELLE-ROCHEFORT1973image/pngPM10363364508509117267281016101812145314562032203613290629124064407214581358248129814415116271164816258162891623255232963251732578622223131745456363890911271279181182254254Photographie - Le Havre 1955Photographie du Havre 1955EDUGEO0.0500412 49.45970.387819 49.5409ORTHOIMAGERY.EDUGEO.LE-HAVRE1955image/pngPM10349349512513116986991024102612139713982048205213279427974097410414558855948194820915111771118916388164191622355223783277732838621213232743436464887871281289174174256256Photographie - Le Havre 1964Photographie du Havre 1964EDUGEO0.0500412 49.44340.375309 49.622ORTHOIMAGERY.EDUGEO.LE-HAVRE1964image/pngPM10348349512513116976991024102612139513982048205213279127974097410414558355958194820915111661119116388164181622332223823277732836621213232743436464887871281289174174256256SPOT LE HAVRE 2008Zone du HAVRE - 2008EDUGEO-0.375309 49.0351.00082 49.8484ORTHOIMAGERY.EDUGEO.LE-HAVRE2008image/pngPM10347351510514116957031021102912139114062043205913278328124087411814556756248174823715111341124816349164751622269224963269932950621213132743436364886871271289173175255257Photographie - Limoges 1974Photographie de Limoges 1974EDUGEO1.00082 45.70691.42617 45.9596ORTHOIMAGERY.EDUGEO.LIMOGES1974image/pngPM10364365514516117287301029103212145714612059206413291529234118412814583158478237825615116621169516475165131623325233913295033027622223232745456464891911281299182182257258Photographie - LYON 1965Photographie - LYON 1965EDUGEO4.71638 45.54945.07918 45.8987ORTHOIMAGERY.EDUGEO.LYON1965image/pngPM103643665255261172973210501052121458146421012105132917292942034211145835585884068423151167011716168131684616233412343233626336921746683468656725367385189336693731134506134770622223232745456565891911311319182183262263Photographie - LYON 1984Photographie - LYON 1984EDUGEO4.70387 45.70695.17926 45.8726ORTHOIMAGERY.EDUGEO.LYON1984image/pngPM10364365525526117297301050105312145914612101210613291829234203421314583758478406842715116741169516812168551623348233913362433710622223232745456565891911311319182182262263Photographie - LYON 1988Photographie - LYON 1988EDUGEO4.62881 45.53195.12922 45.9161ORTHOIMAGERY.EDUGEO.LYON1988image/pngPM10364366525526117297321050105312145814642100210613291729294201421214583458598402842515116681171816805168501623337234373361033701622223232745456565891911311319182183262263SPOT LYON 2008Zone de LYON - 2008EDUGEO4.50371 45.20675.75474 45.9944ORTHOIMAGERY.EDUGEO.LYON2008image/pngPM10364367524528117287351049105612145714702099211313291429404198422614582958808396845315116581176016793169071623316235213358733815622223233745456566891911311329182183262264Photographie - Marne La Vallée 1965Photographie de Marne la Vallée 1965EDUGEO2.40198 48.8462.93992 48.9858ORTHOIMAGERY.EDUGEO.MARNE-LA-VALLEE1965image/pngPM10351352518520117037041037104012140614092075208113281328184150416214562756378301832515112551127416602166511622510225493320533303621223232743446465887881291309175176259260Photographie - Marne La Vallée 1977Photographie de Marne la Vallée 1977EDUGEO2.48955 48.81312.92741 48.9694ORTHOIMAGERY.EDUGEO.MARNE-LA-VALLEE1977image/pngPM10351352519520117037041038104012140714092076208113281428194152416214562856398305832515112571127916610166501622515225583322133300621223232743446465887881291309175176259260Photographie - Marne la Vallée 1987Photographie de Marne la Vallée 1987EDUGEO2.47704 48.86252.92741 48.9447ORTHOIMAGERY.EDUGEO.MARNE-LA-VALLEE1987image/pngPM10351352519520117037041038104012140714092076208113281528184152416214563056368304832515112601127216609166501622521225443321833300621223232743446465887881291309175176259260Photographie - MARSEILLE MARTIGUES 1969Photographie MARSEILLE MARTIGUES1969EDUGEO5.20428 43.17985.69219 43.3984ORTHOIMAGERY.EDUGEO.MARSEILLE-MARTIGUES1969image/pngPM10374375526528117497511053105612149815022107211213299730044214422514599560098428845115119901201816857169021623981240363371533804623233233746466566893931311329187187263264Photographie - MARSEILLE MARTIGUES 1980Photographie MARSEILLE MARTIGUES1980EDUGEO4.67885 43.31655.29186 43.5708ORTHOIMAGERY.EDUGEO.MARSEILLE-MARTIGUES1980image/pngPM10374375525527117487501050105412149615002101210813299230004202421614598460008404843215119691200116809168651623938240023361933731623233232746466565893931311319187187262263Photographie - MARSEILLE MARTIGUES 1987Photographie MARSEILLE MARTIGUES1987EDUGEO4.65383 43.31655.1042 43.5708ORTHOIMAGERY.EDUGEO.MARSEILLE-MARTIGUES1987image/pngPM10374375525526117487501050105312149615002100210613299230004201421214598460008403842415119691200116807168481623938240023361533697623233232746466565893931311319187187262263Photographie - MARSEILLE MARTIGUES 1988Photographie MARSEILLE MARTIGUES1988EDUGEO4.91655 43.37115.39194 43.5708ORTHOIMAGERY.EDUGEO.MARSEILLE-MARTIGUES1988image/pngPM10374374525527117487491051105412149614992103210913299229984207421814598459978415843715119691199416831168741623938239883366333749623233232746466565893931311319187187262263SPOT MARSEILLE-MARTIGUES 2010Zone de MARSEILLE-MARTIGUES - 2010EDUGEO5.25433 43.14335.75474 43.4165ORTHOIMAGERY.EDUGEO.MARSEILLE-MARTIGUES2010image/pngPM10374375526528117497511053105612149815022107211313299730054215422614599460118431845315119881202216862169071623977240453372433815623233233746466566893931311329187187263264Photographie - La Martinique 1988Photographie de la Martinique 1988EDUGEO-61.1378 14.3713-60.8251 14.7104ORTHOIMAGERY.EDUGEO.MARTINIQUE1988image/pngPM104694703383381193994167667712187818821352135513375737652704271114751575305409542315150301506110819108471630060301232163821695629292121758584242811711784849234235169169Photographie - METZ NANCY 1982Photographie - METZ NANCY 1982EDUGEO5.9549 48.59026.43029 49.3376ORTHOIMAGERY.EDUGEO.METZ-NANCY1982image/pngPM103503535285301170070610571060121400141321152121132801282742314242145603565484638484151120611309169261696916224122261933852339381744825452396770467877188965090479135408135754621223333743446666887881321329175176264265Photographie - Nantes 1971Photographie de Nantes 1971EDUGEO-2.27687 47.1042-1.40115 47.3591ORTHOIMAGERY.EDUGEO.NANTES1971image/pngPM10358359505508117177191011101612143414382022203213286928774044406414573857558088812815114771151116176162561622954230223235332512622223131744446363889891261279179179252254Photographie - Paris 1949Photographie - Paris 1949EDUGEO2.20181 48.76362.52708 48.9529ORTHOIMAGERY.EDUGEO.PARIS1949image/pngPM103513525185191170370510361038121407141020732076132814282141464153145629564282928307151125911285165841661416225192257133168332281745039451436633766456189007890287132675132912621223232743446464887881291299175176259259Photographie - Paris 1965Photographie - Paris 1965EDUGEO2.02667 48.8462.48955 48.9858ORTHOIMAGERY.EDUGEO.PARIS1965image/pngPM10351352517519117037041035103812140614092071207613281328184142415214562756378284830515112551127416568166101622510225493313633221621223232743446464887881291299175176258259SPOT PARIS 2010Zone de Paris - SPOT 2010EDUGEO1.87654 48.54053.00247 49.362ORTHOIMAGERY.EDUGEO.PARIS2010SPOTimage/pngPM10350353517520117007071034104112140014142069208213280028294138416414560156588277832815112021131616554166571622405226333310933314621223232743446465887881291309175176258260Photographie - Reims 1963Photographie de Reims 1963EDUGEO3.95325 49.1174.21597 49.2968ORTHOIMAGERY.EDUGEO.REIMS1963image/pngPM10350351523523117007021046104712140114042092209513280228094185419114560556188371838315112111123716743167671622423224743348733535621213232743436565887871301309175175261261Photographie - Reims 1973Photographie de Reims 1973EDUGEO3.95325 49.12524.22848 49.2886ORTHOIMAGERY.EDUGEO.REIMS1973image/pngPM10350351523524117007021046104812140114042092209613280328084185419214560656178371838415112131123516743167681622426224713348733537621213232743436565887871301319175175261262Photographie - Reims 1988Photographie de Reims 1988EDUGEO3.91572 49.12524.2535 49.2805ORTHOIMAGERY.EDUGEO.REIMS1988image/pngPM10350351523524117007021046104812140114042092209613280328084185419214560756178370838515112141123516740167711622428224713348033542621213232743436565887871301319175175261262SPOT REIMS 2010Zone de Paris - REIMS 2010EDUGEO3.50288 48.95294.75391 49.362ORTHOIMAGERY.EDUGEO.REIMS2010image/pngPM10350351521525117007031043105112140014072087210213280028144175420414560156298351840815112021125916702168161622405225193340533633621213232743436565887871301319175175260262Photographie - ROISSY 1965Photographie - ROISSY 1965EDUGEO2.35194 48.90362.70222 49.0432ORTHOIMAGERY.EDUGEO.ROISSY1965image/pngPM103513525185191170270410371039121405140820742078132811281641494157145623563382998314151124711266165981662916224942253333196332591744989450666639266519188997890132132784133039621223232743446464887881291299175176259259Photographie - ROISSY 1987Photographie - ROISSY 1987EDUGEO2.45202 48.94472.65218 49.035ORTHOIMAGERY.EDUGEO.ROISSY1987image/pngPM103513515185191170370310371039121406140720752078132812281541514156145624563083038312151124811260166071662516224962252133214332501744993450436642866501188998790087132857133003621213232743436464887871291299175175259259Photographie - Strasbourg 1975Photographie de Strasbourg 1975EDUGEO7.31852 48.40787.93153 48.6563ORTHOIMAGERY.EDUGEO.STRASBOURG1975image/pngPM10353354532534117067081065106912141214162131213813282528334262427614565056678525855215113001133417050171051622601226693410034211622223333744446666888881331339176177266267Photographie - Strasbourg 1985Photographie de Strasbourg 1985EDUGEO7.46865 48.39957.894 48.6232ORTHOIMAGERY.EDUGEO.STRASBOURG1985image/pngPM10353354533534117067081066106812141314172132213713282628344265427514565256688531855115113051133617063171021622610226723412734205622223333744446666888881331339176177266267SPOT STRASBOURG 2010Zone de Paris - STRASBOURG 2010EDUGEO7.13087 48.04118.2568 48.8707ORTHOIMAGERY.EDUGEO.STRASBOURG2010image/pngPM10352355532535117047111064107012140814232129214113281728464258428314563556928516856715112711138517033171351622542227703406634271622223333744446666888881331339176177266267Photographie - TOULON-HYERES 1972Photographie de TOULON-HYERES 1972EDUGEO5.74223 42.96966.33021 43.2163ORTHOIMAGERY.EDUGEO.TOULON-HYERES1972image/pngPM10375376528530117507521056106012150115052113212013300330114226424014600660228453848015120131204416906169601624027240883381333920623233333746476666893941321329187188264265Photographie -Toulouse 1954Photographie de Toulouse 1954EDUGEO1.23852 43.56181.55128 43.7247ORTHOIMAGERY.EDUGEO.TOULOUSE1954image/pngPM10373374515516117467481031103212149314962062206513298729924124413114597459858248826215119491197016496165251623899239403299333050623233232746466464893931281299186187257258SPOT Vallée du Drac 2010Zone de la Vallée du Drac - 2010EDUGEO5.12922 44.76436.25515 45.0301ORTHOIMAGERY.EDUGEO.VALEE-DU-DRAC2010image/pngPM10368369526529117367381053105912147214772106211913294529544212423814589159088425847615117831181716850169531623567236353370133906623233233746466566892921311329184184263264Photographie - VANNES GOLF DU MORBIHAN 1970Photographie - VANNES GOLF DU MORBIHAN 1970EDUGEO-3.20264 47.4607-2.62716 47.7138ORTHOIMAGERY.EDUGEO.VANNES-GOLF-DU-MORBIHAN1970image/pngPM103573585025041171471610051009121428143220112018132857286540234036145714573180468072151142911463160921614416228582292732184322891745717458546436964579189143591708128739129158622223131744446263889891251269178179251252Photographie - Versailles 1965Photographie - Versailles 1965EDUGEO1.98914 48.60672.32692 48.8789ORTHOIMAGERY.EDUGEO.VERSAILLES1965image/pngPM103523535175181170470610351037121408141320702074132817282641414148145635565382828297151127011307165651659516225402261533130331911745080452306626066383189016090460132520132766622223232744446464888881291299176176258259Photographie - Versailles 1989Photographie de Versailles 1989EDUGEO1.87654 48.63152.33943 48.8789ORTHOIMAGERY.EDUGEO.VERSAILLES1989image/pngPM10352353517518117047061034103712140814132069207413281728264138414914563556528277829815112701130416554165961622540226083310933193622223232744446464888881291299176176258259Photographies aériennesPhotographies aériennesPhotographies-178 -84178 84ORTHOIMAGERY.ORTHOPHOTOSimage/jpegPM0000010101103199251018116219851120361212539702240731327394635417924145478927082158481510956185401653169716219123707233063395174382574144660126791188765114827213202535821917877229406017015934347320303307074015015503103161620637312401278724812549154962509Ortholittorale 2000Donnée issue du Référentiel géographique du littoral. Zone de couverture de l'orthophotographie : côte de la mer du Nord, de la Manche et de l'Atlantique.Littoral-5.21565 43.3012.60783 51.1233ORTHOIMAGERY.ORTHOPHOTOS.COAST2000image/pngPM10342375497519116847509941038121369150019882077132738300039774155145476600179548310151095212003159091662116219042400631818332421743808480126363766485188761796024127274132970621233132742466264885931241299171187248259Photographies arériennes - (CRS84)OrthophotographiesPhotographies-178.187 -21.401355.8464 51.091ORTHOIMAGERY.ORTHOPHOTOS.CRS84image/jpegWGS84G10221633101341114421267202683128852534415366131770506982107331435411013916521467157082202793304293416141654055966085868172833081118132017173661339083727791167855158233591103165670Suisse - photographies aériennes du canton de Genève (SITG)Photographie aérienne du canton de Genève.Photographies5.95007 46.12416.31198 46.3658ORTHOIMAGERY.ORTHOPHOTOS.GENEVEimage/pngPM1036236352852911725727105710591214511455211521191329022910423142391458045820846284791511609116411692516958162321923282338513391717464384656567702678341892876931301354041356681918575218626127080927133620371504372522541618542672622223333745456666890901321329181181264264IFREMER - Authie 1935Photographie aérienne d'Authie en 1935 (archives de l'IFREMER).Littoral1.52005 50.17041.67164 50.5759ORTHOIMAGERY.ORTHOPHOTOS.IFREMER.AUTHIE.1935image/pngPM103443465165161168969310321033121378138620652066132757277241304133145515554482618267151103111088165231653516220622217733046330711744124443556609366142188824988711132186132285IFREMER - Authie 1935Photographie aérienne d'Authie en 1935 (archives de l'IFREMER).Littoral1.52005 50.17041.67164 50.5759ORTHOIMAGERY.ORTHOPHOTOS.IFREMER.AUTHIE.1935-V1image/pngPM103443465165161168969310321033121378138620652066132757277241304133145515554482618267151103111088165231653516220622217733046330711744124443556609366142188824988711132186132285IFREMER - Berck St-Quentin 1934Photographie aérienne de Berck St-Quentin en 1934 (archives de l'IFREMER).Littoral1.51075 50.2511.66952 50.4143ORTHOIMAGERY.ORTHOPHOTOS.IFREMER.BERCK.1934image/pngPM103453465165161169069210321033121381138420652066132763276941304133145527553882608267151105411077165211653516221082215433043330711744217443096608666142188843488619132173132285IFREMER - Canche-Authie 1935Photographie aérienne de Canche-Authie en 1935 (archives de l'IFREMER).Littoral1.52005 50.3141.68189 50.576ORTHOIMAGERY.ORTHOPHOTOS.IFREMER.CANCHE.1935image/pngPM103443455165161168969110321033121378138320652067132757276741304134145515553482618268151103111068165221653616220622213633045330731744124442736609166146188824988547132183132293IFREMER - Canche-Authie 1935Photographie aérienne de Canche-Authie en 1935 (archives de l'IFREMER).Littoral1.52005 50.3141.68189 50.576ORTHOIMAGERY.ORTHOPHOTOS.IFREMER.CANCHE.1935-V1image/pngPM103443455165161168969110321033121378138320652067132757276741304134145515553482618268151103111068165221653616220622213633045330731744124442736609166146188824988547132183132293IFREMER - Douelan 1938Photographie aérienne de Douelan en 1938 (archives de l'IFREMER).Littoral-3.54994 47.6947-3.44699 47.7806ORTHOIMAGERY.ORTHOPHOTOS.IFREMER.DOUELAN.1938image/pngPM103563575015021171371410031004121427142820072008132855285740154017145710571580308035151142011431160601607016228412286332121321401745682457266424364281189136591453128486128562IFREMER - Douelan 1938Photographie aérienne de Douelan en 1938 (archives de l'IFREMER).Littoral-3.54994 47.6947-3.44699 47.7806ORTHOIMAGERY.ORTHOPHOTOS.IFREMER.DOUELAN.1938-V1image/pngPM103563575015021171371410031004121427142820072008132855285740154017145710571580308035151142011431160601607016228412286332121321401745682457266424364281189136591453128486128562IFREMER - Groix 1938Photographies aériennes de Groix en 1938 (archives de l'IFREMER).Littoral-3.52232 47.6057-3.39634 47.6661ORTHOIMAGERY.ORTHOPHOTOS.IFREMER.GROIX.1938image/pngPM103573575015021171471510031004121429143020072009132859286040154018145718572180318037151143611443160631607416228722288732126321491745745457756425364299189149191550128506128598IFREMER - Le Pouldu Kernevel 1938Photographie aérienne de Le Pouldou Kernevel en 1938 (archives de l'IFREMER).LittoralPhotographies-3.49123 47.6797-3.35182 47.7408ORTHOIMAGERY.ORTHOPHOTOS.IFREMER.LEPOULDOU.1938image/pngPM103573575025021171471410041004121428142920082009132856285840164019145713571680338039151142611433160661607816228522286732132321571745705457346426464315189141191468128529128630IFREMER - Le Pouldu Kernevel 1938Photographie aérienne de Le Pouldou Kernevel en 1938 (archives de l'IFREMER).LittoralPhotographies-3.49123 47.6797-3.35182 47.7408ORTHOIMAGERY.ORTHOPHOTOS.IFREMER.LEPOULDOU.1938-V1image/pngPM103573575025021171471410041004121428142920082009132856285840164019145713571680338039151142611433160661607816228522286732132321571745705457346426464315189141191468128529128630IFREMER - Port Louis Gâvres 1938Photographie aérienne de Port Louis Gâvres en 1938 (archives de l'IFREMER).Littoral-3.39707 47.6579-3.21579 47.739ORTHOIMAGERY.ORTHOPHOTOS.IFREMER.PORTLOUIS.1938image/pngPM103573575025021171471410041005121428142920092011132856285940184022145713571880378045151142611436160751609116228532287232150321821745707457446430064364189141491489128600128729IFREMER - Port Louis Gâvres 1938Photographie aérienne de Port Louis Gâvres en 1938 (archives de l'IFREMER).Littoral-3.39707 47.6579-3.21579 47.739ORTHOIMAGERY.ORTHOPHOTOS.IFREMER.PORTLOUIS.1938-V1image/pngPM103573575025021171471410041005121428142920092011132856285940184022145713571880378045151142611436160751609116228532287232150321821745707457446430064364189141491489128600128729IFREMER - Abords de LorientPhotographie aérienne des abords de Lorient en 1924 (archives de l'IFREMER).Littoral-3.56436 47.6222-3.25248 47.7997ORTHOIMAGERY.ORTHOPHOTOS.IFREMER.QUIBERON.1924image/pngPM103563575015021171371510031005121427143020072010132854286040144021145709572080298043151141911441160591608716228392288332119321751745678457666423864350189135791532128477128700IFREMER - Somme 1935Photographie aérienne de la Baie de Somme en 1935 (archives de l'IFREMER).Littoral1.48669 50.16991.65766 50.2795ORTHOIMAGERY.ORTHOPHOTOS.IFREMER.SOMME.1935image/pngPM103463465165161169269310321033121384138620642066132768277241294133145536554482598267151107311088165191653416221462217733038330691744293443556607766139188858788711132155132278IFREMER - Rivière du Ter 1939Photographie aérienne de la Rivière du Ter en 1939 (archives de l'IFREMER).Littoral-3.44022 47.7006-3.34067 47.7595ORTHOIMAGERY.ORTHOPHOTOS.IFREMER.TER.1939image/pngPM103563575025021171371410041004121427142820082009132855285740174019145711571580358039151142311431160701607916228462286232141321591745693457246428364319189138791448128567128638IFREMER - Rivière du Ter 1939Photographie aérienne de la Rivière du Ter en 1939 (archives de l'IFREMER).Littoral-3.44022 47.7006-3.34067 47.7595ORTHOIMAGERY.ORTHOPHOTOS.IFREMER.TER.1939-V1image/pngPM103563575025021171371410041004121427142820082009132855285740174019145711571580358039151142311431160701607916228462286232141321591745693457246428364319189138791448128567128638Planet ObserverImage satellite retravaillée pour obtenir une couverture mondiale esthétique.planet observerortho image-180 -90180 88ORTHOIMAGERY.ORTHOPHOTOS.LOW_RES.CRS84image/jpegWGS84G_PO01112112141011024120481112048140961214096181922141831811641161325132164616411287112812568125615129151211024BDORTHO-NCLa BDORTHO-NC est une orthophotographie du territoire de Nouvelle-Calédonie réalisée par la DITTT pour le compte du Gouvernement de Nouvelle-Calédonie.Photographies-178 -84178 84ORTHOIMAGERY.ORTHOPHOTOS.NCLimage/jpegPM00000101011031992510181162198511203612125397022407313454846357816792414909692701563315848151819318540312663169716363863708062533633951772773741601250661267911814554614832025013225358220303307074015015503103161620637312401278724812549154962509Paris haute résolutionPrises de vues aériennes de Paris à haute résolution.Photographies2.19509 48.80952.42968 48.9124ORTHOIMAGERY.ORTHOPHOTOS.PARISimage/pngPM1214081409207220751328162819414541511456325639829183021511265112791658316605162253022559331673321017450614511866335664201890123902371326701328411918024618047426534026568220360492360948530681531364GEOSUD / RapidEye (2010)Image satellitaire de la France métropolitaine effectuée en 2010 par les satellites de télédétection RapidEye dans le cadre du projet EQUIPEX GEOSUD.Images satellitaires-5.80725 41.201410.961 50.9218ORTHOIMAGERY.ORTHOPHOTOS.RAPIDEYEimage/jpegPM0000010001103423824965391168476599310791213681531198621591327363063397243191454726126794586381510944122531589017277211123223445578510111516621233133742476267885951241349171191248269Photographies aériennes 2000-2005Prises de vues aériennes des territoires réalisées entre 2000 et 2005.Photographies-178.187 -21.401355.8561 51.091ORTHOIMAGERY.ORTHOPHOTOS2000-2005image/jpegPM1034257456701168411481013411213692297202683132739459441536614547891898210733151095618378165214671621912367573304293517438257351566085871188765114703013201717436213504174271083885143116791712872335Planet ObserverImage satellite retravaillée pour obtenir une couverture mondiale esthétique.planet observerortho image-180 -90180 88PHOTO-LOWRES_PYR-JPEG_WLD_WGS84G_2012-05-04image/jpegWGS84G_PO01112112141011024120481112048140961214096181922141831811641161325132164616411287112812568125615129151211024Photographies aériennes 2000-2005Prises de vues aériennes des territoires réalisées entre 2000 et 2005.Photographies-178.187 -21.401355.8561 51.091PHOTOHISTO_PYR-JPEG_WLD_WM_20121015image/jpegPM1034257456701168411481013411213692297202683132739459441536614547891898210733151095618378165214671621912367573304293517438257351566085871188765114703013201717436213504174271083885143116791712872335Photographies arériennes (CRS84)Orthophotographiesortho-images-178.187 -21.401355.8464 50.3854PHOTO_PYR-JPEG_WLD_WGS84G_2012-05-25image/jpegWGS84G10225633101341114501267202683129012534415366131803506982107331436061013916521467157212202793304293416144254055966085868172885181118132017173661439083728791167856158233591123165670Photographies arériennes (CRS84)Orthophotographiesortho-images-178.187 -21.401355.8464 51.091PHOTO_PYR-JPEG_WLD_WGS84G_2012-06-11image/jpegWGS84G10221633101341114421267202683128852534415366131770506982107331435411013916521467157082202793304293416141654055966085868172833081118132017173661339083727791167855158233591103165670Photographies arériennes - (CRS84)OrthophotographiesPhotographies-178.187 -21.401355.8464 51.091PHOTO_PYR-JPEG_WLD_WGS84G_2012-10-01image/jpegWGS84G10221633101341114421267202683128852534415366131770506982107331435411013916521467157082202793304293416141654055966085868172833081118132017173661339083727791167855158233591103165670Photographies arériennes - (CRS84)OrthophotographiesPhotographies-178.187 -21.401355.8464 51.091PHOTO_PYR-JPEG_WLD_WGS84G_20121008image/jpegWGS84G10221633101341114421267202683128852534415366131770506982107331435411013916521467157082202793304293416141654055966085868172833081118132017173661339083727791167855158233591103165670Photographies aériennesPhotographies aériennesPhotographies-63.1607 -21.401355.8464 60.6416PHOTO_PYR-JPEG_WLD_WM_2012-05-14image/jpegPM103425745670116841148101341121369229720268313273945944153661454789189821073315109561837816521467162191236757330429341743825735156608586818876511470301320171736191787722409891701592733926213504174271083885143116791712872335Photographies aériennesPhotographies aériennesPhotographies-180 -90180 90PHOTO_PYR-JPEG_WLD_WM_WMT_20121004image/jpegPM000001010110319925101811621985112036121253970224073132739459441536614547891898210733151095618378165214671621912367573304293417438257351566085868188765114703013201717361917877229406017015934347320303307074015015503103161620637312401278724812549154962509Photographies aériennesPhotographies aériennesPhotographies-178 -84178 84PHOTO_PYR-JPEG_WLD_WM_WMT_20130603image/jpegPM0000010101103199251018116219851120361212539702240731327394635417924145478927082158481510956185401653169716219123707233063395174382574144660126791188765114827213202535821917877229406017015934347320303307074015015503103161620637312401278724812549154962509Arrêtés de protection de biotopeConservation de l'habitat d'espèces protégées. Outil réglementaires de niveau départemental.Ecologie-63.3725 -21.475655.9259 51.3121PROTECTEDAREAS.APBimage/pngPM103345743316831168511496631351121370229813262686132740459626535373145481919353071073115109621838610631214631621940367562126342911619352052739714189879143821789159287165341Réserves de biosphèreRéserves naturelles reconnues par le Programme sur l'Homme et la Biosphère créé par l'Unesco.Ecologie-63.25 15.71849.72255 51.1534PROTECTEDAREAS.BIOSimage/pngPM1034246633253911684933664107912136818661328215813273637332656431714547374675313863415109471493410626172681621895298692125334537621292033742584167885116831349171233166269Conservatoire du littoral : Périmètres d'interventionLes sites du conservatoire du littoral ont pour vocation la sauvegarde des espaces côtiers et lacustres. Leur accès au public est encouragé mais reste défini dans des limites compatibles avec la vulnérabilité de chaque site.Littoral-63.3725 -21.475655.9259 51.3121PROTECTEDAREAS.CDLimage/pngPM103365763286721168011526641344121368230413282688132736460026565368145471919253121073615109521838410632214711621912367602127242935880144801689168288160336Conservatoire du littoral : Parcelles protégéesLes sites du conservatoire du littoral ont pour vocation la sauvegarde des espaces côtiers et lacustres. Leur accès au public est encouragé mais reste défini dans des limites compatibles avec la vulnérabilité de chaque site.Littoral-63.3725 -21.475655.9259 51.3121PROTECTEDAREAS.CENimage/pngPM103365763286711168011526641344121368230413282687132736460026565367145471919253121073615109431838410624214721621904367682126442943880144801689168288160336Parcs nationauxLes parcs nationaux sont de vastes espaces protégés terrestres ou marins dont le patrimoine naturel est exceptionnel, et dont le but est à la fois de protéger des processus écologiques à large échelle et de fournir des possibilités de découverte de la nature.Ecologie-63.3725 -21.475655.9259 51.3121PROTECTEDAREAS.PNimage/pngPM103345743316751167711496631343121362229813262686132724459626535373145457919353071073915109221838610615214791621844367722123142951619352044739714189879143821709167287165341Parcs naturels marinsZones maritimes identifiées pour leur biodiversité ou par les activités humaines faisant l'objet de protection.Ecologie-63.3725 -21.475655.9259 51.3121PROTECTEDAREAS.PNMimage/pngPM103345743316751167711496631343121362229813262686132724459626535373145457919353071073915109221838610615214791621844367722123142951619352044739714189879143821709167287165341Parcs naturels régionauxLes parcs naturels régionaux ont pour but de valoriser de vastes espaces de fort intérêt culturel et naturel, et de veiller au développement durable de ces territoires dont le caractère rural est souvent très affirmé.Ecologie-63.3725 -21.475655.9259 51.3121PROTECTEDAREAS.PNRimage/pngPM10334510331539116851005663107912137020101342215813274040042701431714548180095403863515109621600210807172551621940319882161534495619352036739714173879127821469159255165277Zones humides d'importance internationaleUn site Ramsar est un espace désigné en application de la Convention relative aux zones humides d'importance internationale, particulièrement comme habitats des oiseaux d'eau, dont le traité a été signé en 1971 sur les bords de la mer Caspienne (Iran).Ecologie-63.3725 -50.571480.7449 51.3121PROTECTEDAREAS.RAMSARimage/pngPM1033668833673611672136067214721213592704134429441327365408268858721454881081653761174315109912163110752234721621984432642150346943616471647732953295880176801919160352160368Réserves biologiquesUne réserve biologique est un espace protégé en milieu forestier ou en milieu associé à la forêt (landes, mares, tourbières, dunes). Ce statut s'applique aux forêts gérées par l'Office National des Forêts et a pour but la protection d'habitats remarquables ou représentatifs.Ecologie-63.3725 -21.475655.9259 51.3121PROTECTEDAREAS.RBimage/pngPM103345743316831168511496631351121370229813422686132740459627015373145497919354031073115109941838610807214631622004367562161542927619352052739714189879143821789159287165341Réserves naturelles nationalesLes réserves naturelles sont des espaces protégés terrestres ou marins dont le patrimoine naturel est exceptionnel, tant sur le plan de la biodiversité que parfois sur celui de la géodiversité.Ecologie-63.3725 -50.571480.7449 51.3121PROTECTEDAREAS.RNimage/pngPM1033567933173911678135866314711213652709132629341327385410265358691454761082053151173915109522163210639234711621912432562128746943618422052736844197881169821869163339165373Réserves Naturelles de CorseLes réserves naturelles sont des espaces protégés terrestres ou marins dont le patrimoine naturel est exceptionnel, tant sur le plan de la biodiversité que parfois sur celui de la géodiversité.Ecologie-5.15047 41.32529.57054 51.0991PROTECTEDAREAS.RNCimage/pngPM10374382529545117497651066108212149815302141215713300530614282431414601961238573862915120381224617155172511624084244923431834502615233139739476270887951321409183191264272Réserves nationales de chasse et de faune sauvageLes réserves nationales de chasse et de faune sauvage sont des espaces protégés terrestres ou marins dont la gestion est principalement assurée par l'Office National de la Chasse et de la Faune Sauvage.Ecologie-2.99155 41.6879.6157 51.0863PROTECTEDAREAS.RNCFimage/pngPM10342381503539116847621006107812136915252013215713273930504027431414547861018055862915109571220216111172591621914244043222334518621233133742476267885951251349171190251269Sites Natura 2000 au titre de la Directive HabitatsLe réseau Natura 2000 s'inscrit au coeur de la politique de conservation de la nature de l'Union européenne et est un élément clé de l'objectif visant à enrayer l'érosion de la biodiversité.Ecologie-5.15047 41.32529.57054 51.0991PROTECTEDAREAS.SICimage/pngPM1033438249754511677765994108212136215301989215713273330613978431414547561237957862915109501224615915172591621908244923183034510615233139739476270879951241409167191248272Zones écologiques de nature remarquable (ZNIEFF1)Inventaire des espaces naturels abritant la nature remarquableEcologie-63.3725 -21.475655.9259 51.3121PROTECTEDAREAS.ZNIEFF1image/pngPM10336512344544116801016696108012136820241400215913273640482808431914547180965616863215109521618411231172551621912323672247134511616311639739633972880128801369168256168272Zones fonctionnelles de nature remarquable (ZNIEFF2)Inventaire des espaces fonctionnels indispensables à la nature remarquable.Ecologie-63.3725 -21.475655.9259 51.3121PROTECTEDAREAS.ZNIEFF2image/pngPM10336512344544116801016696108012136820241400215913273640482808431914547980965624863215109601619111247172551621920323832249534503616311639739633972880128801369168256168272Sites NATURA 2000 au titre de la Directive OiseauxLe réseau Natura 2000 s'inscrit au coeur de la politique de conservation de la nature de l'Union européenne et est un élément clé de l'objectif visant à enrayer l'érosion de la biodiversité.Ecologie-63.3725 -21.475655.9259 51.3121PROTECTEDAREAS.ZPSimage/pngPM10334390491539116777739911079121362153819822158132724306839734317145457612979478635151092212258158951726316218442451631799345196192728367395557738791031221389167199245269GEOSUD / RapidEye (2010)Image satellitaire de la France métropolitaine effectuée en 2010 par les satellites de télédétection RapidEye dans le cadre du projet EQUIPEX GEOSUD.Images satellitaires-5.80725 41.201410.961 50.9218RAPIDEYE_PYR-JPEG_WLD_WM_2010image/jpegPM0000010001103423824965391168476599310791213681531198621591327363063397243191454726126794586381510944122531589017277211123223445578510111516621233133742476267885951241349171191248269Régions forestières nationalesCette cartographie représente des zones homogènes du point de vue des types de forêt ou de paysage sur la base de conditions physiques dominantes (climat, sol, relief).Occupation des terres-5.15047 41.32529.57054 51.0991REGIONS-FORESTIERES-NATIONALES_SYMBO_PYR-PNG_FXX_WM_20120809image/pngPM1033438249754511677765994108212136215301989215713273330613978431414547561237957862915109501224615915172591621908244843183034510615233139739476270879951241409167191248272RoutesAffichage du réseau routier français et européen.Réseau routier-63.1614 -21.399855.8465 72.679ROUTE_SYMBO_PYR-PNG_WLD_20120629image/pngPM10340574332671116831148664134212136822971329268413273345942658536814547591895317107361510950183781063421473162190036757212694293817438177351542539858761887634147030850791717446122827437245654848501121091699101225218336RoutesAffichage du réseau routier français et européen.Réseau routier-63.3725 -21.475655.9259 72.679ROUTE_SYMBO_PYR-PNG_WLD_20130121image/pngPM10340576330672116821150662134312136323001326268613273646002688536714547191925376107361510943183841062421472162190436768212644294317438247352042528858711887648147024850711717436122926427245854848491141081689102226218336RoutesAffichage du réseau routier français et européen.Réseau routier-63.3725 -21.475655.9259 72.679ROUTE_SYMBO_PYR-PNG_WLD_20130131image/pngPM10340576330672116821150662134312136323001326268613273646002656536714547191925312107361510943183841062421472162190436768212644294317438247352042528858711887648147024850711717436122926427245854848491141081689102226218336RoutesAffichage du réseau routier français et européen.Réseau routier-5.15047 41.32529.57054 51.0991ROUTE_SYMBO_PYR-PNG_WLD_ERM_20120530image/pngPM103383824975411168176599410781213661530198921579167191248272Référentiel parcellaire graphique (RPG) 2007Référentiel parcellaire graphique : zones de cultures déclarées par les exploitants en 2007.Agriculture-63.2635 -21.41956.0237 51.2203RPG2007_PYR-PNG_WLD_20120615image/pngPM103415743326711168311486641342121367229713282685132734459526565370145469919053121074115109381838010625214831621876367612125142966621352041742714183885143831679170287166335Registre parcellaire graphique (RPG) 2007Registre parcellaire graphique : zones de cultures déclarées par les exploitants en 2007.Agriculture-63.2635 -21.41956.0237 51.2203RPG2007_PYR-PNG_WLD_20121001image/pngPM103415743326711168311486641342121367229713282685132734459526565370145469919053121074115109381838010625214831621876367612125142966621352041742714183885143831679170287166335Référentiel parcellaire graphique (RPG) 2008Référentiel parcellaire graphique : zones de cultures déclarées par les exploitants en 2008.Agriculture-63.2635 -21.41956.0237 51.2203RPG2008_PYR-PNG_WLD_20120615image/pngPM103415743326711168311486641342121367229713282685132734459526565370145469919053121074115109381838010625214831621876367612125142966621352041742714183885143831679170287166335Registre parcellaire graphique (RPG) 2008Registre parcellaire graphique : zones de cultures déclarées par les exploitants en 2008.Agriculture-63.2635 -21.41956.0237 51.2203RPG2008_PYR-PNG_WLD_20121001image/pngPM103415743326711168311486641342121367229713282685132734459526565370145469919053121074115109381838010625214831621876367612125142966621352041742714183885143831679170287166335Référentiel parcellaire graphique (RPG) 2009Référentiel parcellaire graphique : zones de cultures déclarées par les exploitants en 2009.Agriculture-63.2635 -21.41956.0237 51.2203RPG2009_PYR-PNG_WLD_20120615image/pngPM103415743326711168311486641342121367229713282685132734459526565370145469919053121074115109381838010625214831621876367612125142966621352041742714183885143831679170287166335Registre parcellaire graphique (RPG) 2009Registre parcellaire graphique : zones de cultures déclarées par les exploitants en 2009.Agriculture-63.2635 -21.41956.0237 51.2203RPG2009_PYR-PNG_WLD_20121001image/pngPM103415743326711168311486641342121367229713282685132734459526565370145469919053121074115109381838010625214831621876367612125142966621352041742714183885143831679170287166335Référentiel parcellaire graphique (RPG) 2010Référentiel parcellaire graphique : zones de culture déclarées par les exploitants en 2010.Agriculture-5.34206 41.20659.82939 51.2203RPG2010_PYR-PNG_WLD_20120709image/pngPM1034138349653911683766993107912136715321987215913273430653974431914546961307948863915109381226015897172781621876245213179534557621233133742476267885951241349170191248269Registre parcellaire graphique (RPG) 2010Registre parcellaire graphique : zones de culture déclarées par les exploitants en 2010.Agriculture-5.34206 41.20659.82939 51.2203RPG2010_PYR-PNG_WLD_20120924image/pngPM1034138349653911683766993107912136715321987215913273430653974431914546961307948863915109381226015897172781621876245213179534557621233133742476267885951241349170191248269Cartographie LA REUNION 1980Zone de la Réunion 1980EDUGEO55.0453 -21.495455.6708 -20.6783SCAN-EDUGEO_PYR-PNG_FXX_WMimage/pngPM10572574668670111144114913371340122288229826742681134577459753485362149154919410697107251518308183882139421451163661636776427884290263535414177171838381431431671679286287334335PYRAMIDE SCAN EXPRESS CLASSIQUECartographie topographique multi-échelles du territoire français issue des bases de données vecteur de l’IGN –réalisée selon un processus cartographique innovant fortement automatisé.testCartes-22.5 39.884122.5 55.7766SCAN-EXPRESS-CLASSIQUE_PYR-JPG_WLD_WM_WMTS_20130612image/jpegPM10332386478546116817729861090121362154419722180132723307939554332145472612679518634151094412253159031726816218632453031753345751743776490246355269103620242835740485671880961121439166193239273PYRAMIDE SCAN EXPRESS STANDARDCartographie topographique multi-échelles du territoire français issue des bases de données vecteur de l’IGN –réalisée selon un processus cartographique innovant fortement automatisé.Cartes-22.5 39.884122.5 55.7766SCAN-EXPRESS-STANDARD_PYR-JPG_WLD_WM_WMTS_20130612image/jpegPM10332386478546116817729861090121362154419722180132723307939554332145472612679518634151094412253159031726816218632453031753345751743776490246355269103620242835740485671880961121439166193239273Carte SCAN 1000Le produit SCAN 1000® version 2 est une collection d'images numériques en couleurs, obtenues par rastérisation des données vecteur de la carte nationale France (901) à l'échelle 1 :1,000,000ième. Le produit couvre l'ensemble du territoire français métropolitain et la Corse.Cartes-6.24618 41.086410.8338 51.252SCAN1000_PYR-JPEG_WLD_WM_WMTS_3Dimage/jpegPM000001000110341383493539211123223445578510111516621233033742476167885951231349170191246269Carte SCAN 1000Le produit SCAN 1000® version 2 est une collection d'images numériques en couleurs, obtenues par rastérisation des données vecteur de la carte nationale France (901) à l'échelle 1 :1,000,000ième. Le produit couvre l'ensemble du territoire français métropolitain et la Corse.Cartes-6.24618 41.086410.8338 51.02SCAN1000_PYR-JPEG_WLD_WM_WMTS_3D_V1image/jpegPM000001000110341383493539211123223445578510111516621233033742476167885951231349170191246269Carte SCAN 1000Le produit SCAN 1000® version 2 est une collection d'images numériques en couleurs, obtenues par rastérisation des données vecteur de la carte nationale France (901) à l'échelle 1 :1,000,000ième. Le produit couvre l'ensemble du territoire français métropolitain et la Corse.Cartes-6.24618 41.086410.8338 51.252SCAN1000_PYR-JPEG_WLD_WM_WMTS_3D_V2image/jpegPM000001000110341383493539211123223445578510111516621233033742476167885951231349170191246269Carte SCAN 100Le produit SCAN 100® version 2 est une collection d'images numériques en couleurs, obtenues par rasterisation des données vecteur servant à la réalisation des cartes de la série au 1:100,000ième de l'IGN. Le produit SCAN 100® version 2 se compose d'images numériques sans habillage ni surcharge et d'indications de géoréférencement.Cartes-63.3788 -21.700656.0391 51.1615SCAN100_PYR-JPEG_WLD_WM_WMTS_3Dimage/jpegPM1034057533167111681115066313421213632301132626851327264602265353711454529204530710742621352041742714183885143821679170287165335Carte SCAN 100Le produit SCAN 100® version 2 est une collection d'images numériques en couleurs, obtenues par rasterisation des données vecteur servant à la réalisation des cartes de la série au 1:100,000ième de l'IGN. Le produit SCAN 100® version 2 se compose d'images numériques sans habillage ni surcharge et d'indications de géoréférencement.Cartes-63.3788 -21.700656.0391 51.1615SCAN100_PYR-JPEG_WLD_WM_WMTS_3D_20110801image/jpegPM1034057533167111681115066313421213632301132626851327264602265353711454529204530710742621352041742714183885143821679170287165335Carte SCAN 100Le produit SCAN 100® version 2 est une collection d'images numériques en couleurs, obtenues par rasterisation des données vecteur servant à la réalisation des cartes de la série au 1:100,000ième de l'IGN. Le produit SCAN 100® version 2 se compose d'images numériques sans habillage ni surcharge et d'indications de géoréférencement.Cartes-63.3788 -21.700656.0391 51.1615SCAN100_PYR-JPEG_WLD_WM_WMTS_3D_20121201image/jpegPM1034057533167111681115066313421213632301132626851327264602265353711454529204530710742621352041742714183885143821679170287165335Carte SCAN 100Le produit SCAN 100® version 2 est une collection d'images numériques en couleurs, obtenues par rasterisation des données vecteur servant à la réalisation des cartes de la série au 1:100,000ième de l'IGN. Le produit SCAN 100® version 2 se compose d'images numériques sans habillage ni surcharge et d'indications de géoréférencement.Cartes-5.71319 -21.700656.0391 51.1615SCAN100_PYR-JPEG_WLD_WM_WMTS_3D_V1image/jpegPM10340575496671116811150993134212136323011987268513272646023974537114545292047948107426213531417427162838851431241679170287248335Carte SCAN 25 TouristiqueLe produit SCAN 25® version 2 est une collection d'images cartographiques numériques en couleurs, obtenues par rasterisation des données servant à la réalisation des cartes de la série au 1 : 25 000. Le produit SCAN 25® version 2 se compose d'images numériques sans habillage ni surchage et d'indications de géoréférencementCartes-5.66635 41.209710.8198 50.9307SCAN25_PYR-JPEG_WLD_WM_WMTS_3Dimage/jpegPM1034257456701168411481013411213682297202683132736459540536614547291908110733151094418381163214671621889367633264293462134314074271083885143116791712872335Carte SCAN 25 TouristiqueLe produit SCAN 25® version 2 est une collection d'images cartographiques numériques en couleurs, obtenues par rasterisation des données servant à la réalisation des cartes de la série au 1 : 25 000. Le produit SCAN 25® version 2 se compose d'images numériques sans habillage ni surchage et d'indications de géoréférencementCartes-178.206 -21.428455.847 50.9307SCAN25_PYR-JPEG_WLD_WM_WMTS_3D_2012-07-01image/jpegPM1034257456701168411481013411213682297202683132736459540536614547291908110733151094418381163214671621889367633264293462134314074271083885143116791712872335Carte SCAN 25 TouristiqueLe produit SCAN 25® version 2 est une collection d'images cartographiques numériques en couleurs, obtenues par rasterisation des données servant à la réalisation des cartes de la série au 1 : 25 000. Le produit SCAN 25® version 2 se compose d'images numériques sans habillage ni surchage et d'indications de géoréférencementCartes-178.206 -21.428455.847 50.9307SCAN25_PYR-JPEG_WLD_WM_WMTS_3D_2012-10-01image/jpegPM1034257456701168411481013411213682297202683132736459540536614547291908110733151094418381163214671621889367633264293462134314074271083885143116791712872335Carte SCAN 25 TouristiqueLe produit SCAN 25® version 2 est une collection d'images cartographiques numériques en couleurs, obtenues par rasterisation des données servant à la réalisation des cartes de la série au 1 : 25 000. Le produit SCAN 25® version 2 se compose d'images numériques sans habillage ni surchage et d'indications de géoréférencementCartes-5.66635 41.209710.8198 50.9307SCAN25_PYR-JPEG_WLD_WM_WMTS_3D_2013-01-01image/jpegPM1034257456701168411481013411213682297202683132736459540536614547291908110733151094418381163214671621889367633264293462134314074271083885143116791712872335Carte SCAN 25 TouristiqueLe produit SCAN 25® version 2 est une collection d'images cartographiques numériques en couleurs, obtenues par rasterisation des données servant à la réalisation des cartes de la série au 1 : 25 000. Le produit SCAN 25® version 2 se compose d'images numériques sans habillage ni surchage et d'indications de géoréférencementCartes-63.1891 -21.428455.847 50.9307SCAN25_PYR-JPEG_WLD_WM_WMTS_3D_V1image/jpegPM10342574332670116841148664134112136822971329268313273645952658536614547291905316107331510944183811063221467162188936763212644293434445488910517171920621352041742714183885143831679171287166335France administrativeCarte de la France administrative (régions, départements, arrondissements, cantons, communes)Cartes-63.2459 -21.637156.052 51.5596SCANADM_PYR-JPEG_WLD_WM_20120624image/jpegPM10339575332671621352041742714183884143831679169287166335Carte de l'état-major - environs de Paris (1818 - 1824)Carte des environs de Paris au 1 : 10 000 établie entre 1818 et 1824.Cartes historiques1.82682 48.38472.79738 49.5142SCANEM10_PYR-JPEG_FXX_WM_1824image/jpegPM10349354517519116987081034103912139714172068207913279528344137415914559056698275831915111811133816550166381622363226763310033277621223232743446464887881291299174177258259Carte de l'état-major (1820-1866)Carte française en couleurs du XIXè siècle en couleurs superposable aux cartes et données modernes.Cartes historiques-6.08889 41.184410.961 51.2745SCANEM40_PYR-JPEG_FXX_WM_20130124image/jpegPM103423824955401168476599110801213681531198321601327363063396643211454726127793386421510944122551586617285621233033742476167885951231359171191247270Litto3D ®Modèle numérique continu terre-mer sur la frange littorale.Littoral5.75296 42.97866.25761 43.2733SCANLITTO3D_PYR-PNG_WLD_WM_20120704image/pngPM10375376528529117507521056105912150015052113211913300130104226423814600360218453847615120061204316907169531624012240863381533907623233333746476666893941321329187188264264Carte littorale (SHOM/IGN)Assemblage des cartes marines du Service hydrographique et océanographique de la marine (SHOM) et des cartes terrestres de l’IGN.CartesLittoral-61.9629 -21.534856.1621 51.454SCANLITTO_PYR-JPEG_WLD_WM_20120709image/pngPM103405743356711168111496711343121362229913432687132726459826865374145452919653721074815109041839210744214961621808367842148842992621352041742714183885143831679170287167335Carte SCANREGLe produit SCAN Régional® version 2 est une collection d'images cartographiques numériques en couleur, obtenues par rastérisation des données vecteur de la série « Cartes régionales » éditées par l'IGN. Ces images couvrent l'ensemble du territoire français métropolitain.Cartes-5.71319 40.852311.4297 51.1615SCANREG_PYR-JPEG_WLD_WM_WMTS_3Dimage/jpegPM000001000110340384496541116817689931082121363153719872164132726307439744328211123233445678510121516621243133742486267885961241359170192248270Carte SCANREGLe produit SCAN Régional® version 2 est une collection d'images cartographiques numériques en couleur, obtenues par rastérisation des données vecteur de la série « Cartes régionales » éditées par l'IGN. Ces images couvrent l'ensemble du territoire français métropolitain.Cartes-5.71319 40.852311.4297 51.1615SCANREG_PYR-JPEG_WLD_WM_WMTS_3D_2013image/jpegPM000001000110340384496541116817689931082121363153719872164132726307439744328211123233445678510121516621243133742486267885961241359170192248270Carte SCANREGLe produit SCAN Régional® version 2 est une collection d'images cartographiques numériques en couleur, obtenues par rastérisation des données vecteur de la série « Cartes régionales » éditées par l'IGN. Ces images couvrent l'ensemble du territoire français métropolitain.Cartes-5.71319 40.852311.4297 51.1615SCANREG_PYR-JPEG_WLD_WM_WMTS_3D_V1image/jpegPM000001000110340384496541116817689931082121363153719872164132726307439744328211123233445678510121516621243133742486267885961241359170192248270Carte topographique type 1900Cartes au 1 : 50 000 (1ère édition issue de la Cartothèque de l'IGN) N°XXIII-14 Paris (format utile original 53 x 40 cm) Et ses 8 feuilles environnantes : XXII-13 Pontoise XXII-14 Versailles XXII-15 Rambouillet XXIII-13 L'Isle-Adam XXIII-15 Corbeil XXIV-13 Dammartin-en-Goëlle XXIV-14 Lagny XXIV-15 Brie-Comte-Robert Dressées, héliogravées et publiées par le Service géographique de l'armée en 1906, d'après les travaux exécutés sur le terrain entre 1878 et 1901.Cartes1.62941 48.47263 49.1548SCANTYPE1900_PYR-JPG_WLD_WM_20120510image/jpegPM1035035351652011701707103310411214031415206620821328072831413241641456155663826583281511231113261653116657621223232743446465887881291309175176258260Carte topographique type 1900Cartes au 1 : 50 000 (1ère édition issue de la Cartothèque de l'IGN) N°XXIII-14 Paris (format utile original 53 x 40 cm) Et ses 8 feuilles environnantes : XXII-13 Pontoise XXII-14 Versailles XXII-15 Rambouillet XXIII-13 L'Isle-Adam XXIII-15 Corbeil XXIV-13 Dammartin-en-Goëlle XXIV-14 Lagny XXIV-15 Brie-Comte-Robert Dressées, héliogravées et publiées par le Service géographique de l'armée en 1906, d'après les travaux exécutés sur le terrain entre 1878 et 1901.Cartes1.62941 48.47263 49.1548SCANTYPE1900_PYR-JPG_WLD_WM_20120705image/jpegPM1035035351652011701707103310411214031415206620821328072831413241641456155663826583281511231113261653116657Carte topographique - environs de Paris (1906)Carte topographique de Paris et de ses environs éditée en 1906.Cartes historiques1.62941 48.47263 49.1548SCANTYPE1900_PYR-JPG_WM_20130124image/jpegPM1035035351652011701707103310411214031415206620821328072831413241641456155663826583281511231113261653116657Trait de côte HistolittFormalisation de la limite entre le domaine terrestre et le domaine marin.AltitudeLittoral-63.2529 -21.5155.9472 51.1388SHOM-TDC_PYR-PNG_WLD_WM_20120904image/pngPM1033457433267611677114966413441213622298132826881327334597265653681454749194531310737151094918381106342146616219073676321269429331743814735264253885866188764414703685076171732619352044739714189879143831719167287166342SPOT BORDEAUX 2003Zone de Bordeaux 2003EDUGEO-1.12593 44.67540.125103 45.5582SPOT-EDUGEO_PYR-PNG_WLD_WMimage/pngPM10366369508512117327391017102412146414782035204913292829574070409814585759148140819715117151182916281163951623430236583256332790622233132745466364891921271289183184254256Spot 5Cette couche est formée d'images prises par le satellite SPOT 5 en 2009 et 2010 depuis une altitude de 800 km. La résolution des images initiales est de 2,5 mètres/pixel, ce qui permet d'identifier l'existence de bâtiments, routes et chemins, et sa précision est homogène avec celle du référentiel à Grande Echelle. Le satellite SPOT 5 est exploité depuis 2002 par le Centre national d'études spatiales (CNES) et les images sont distribuées par la société Spot Image (Astrium GEO-Information Services). L'expertise de l'IGN menée à la demande du CNES a permis d'affiner les performances géométriques du capteur SPOT5, dans l'intérêt de tous les utilisateurs. La couche " SPOT 5 " visible sur Géoportail est issue de la co-édition Reference3D® entre Spot Image et l'IGN. Aucune légende n'est associée à cette couche. La radiométrie des images est traitée par des couleurs naturelles.Photographies-2 42.00014.99991 46SPOT5_PYR-JPEG_WLD_WMimage/jpegPM10364380506526117287601012105212145715202025210413291430414050420914582860828100841915116571216416201168391623315243283240333678622233132745476365891951261319182190253263Spot 5Cette couche est formée d'images prises par le satellite SPOT 5 en 2009 et 2010 depuis une altitude de 800 km. La résolution des images initiales est de 2,5 mètres/pixel, ce qui permet d'identifier l'existence de bâtiments, routes et chemins, et sa précision est homogène avec celle du référentiel à Grande Echelle. Le satellite SPOT 5 est exploité depuis 2002 par le Centre national d'études spatiales (CNES) et les images sont distribuées par la société Spot Image (Astrium GEO-Information Services). L'expertise de l'IGN menée à la demande du CNES a permis d'affiner les performances géométriques du capteur SPOT5, dans l'intérêt de tous les utilisateurs. La couche " SPOT 5 " visible sur Géoportail est issue de la co-édition Reference3D® entre Spot Image et l'IGN. Aucune légende n'est associée à cette couche. La radiométrie des images est traitée par des couleurs naturelles.Photographies-2 42.00014.99991 46SPOT5_PYR-JPEG_WLD_WM_20120624image/jpegPM10364380506526117287601012105212145715202025210413291430414050420914582860828100841915116571216416201168391623315243283240333678622233132745476365891951261319182190253263IrisZones Iris définies par l'INSEE pour les besoins des recensements sur l'ensemble des communes de plus de 10 000 habitants et la plupart des communes de 5 000 à 10 000 habitants.Divers-5.15047 41.32529.57054 51.0991STATISTICALUNITS.IRISimage/pngPM10334382497545116777659941082121362153019892157132733306139784314145475612379578629615233139739476270879951241409167191248272SylvoécorégionsDécoupage de la France métropolitaine prenant en compte les facteurs biogéographiques déterminant la production forestière et la répartition des grands types d’habitat forestier.Occupation des terres-5.15047 41.32529.57054 51.0991SYLVOECOREGIONS_SYMBO_PYR-PNG_FXX_WM_20120807image/pngPM1033438249754511677765994108212136215301989215713273330613978431414547561237957862915109501224615915172591621908244923183034510615233139739476270879951241409167191248272SylvoécorégionsDécoupage de la France métropolitaine prenant en compte les facteurs biogéographiques déterminant la production forestière et la répartition des grands types d’habitat forestier.Occupation des terres-5.15047 41.32529.57054 51.0991SYLVOECOREGIONS_SYMBO_PYR-PNG_FXX_WM_20121031image/pngPM1033638449654411672768992108812135915361984216013273630723968432014547261287952864015109431225515904172641621904244963182434512616321647732484879880961111449160192240272Réseau ferroviaireCarte du réseau ferroviaireVoies ferrées-26.711 20.991854.9094 72.679TRANSPORTNETWORKS.RAILWAYSimage/pngPM103383824975411168176599410781213661530198921571327363048399243121454716088798486241510943121751596817248162190424352319363449617438244870463872689911887664973921277441379686122827437245654848501121091699101225218336RoutesAffichage du réseau routier français et européen.Réseau routier-63.3725 -21.475655.9259 72.679TRANSPORTNETWORKS.ROADSimage/pngPM10340576330672116821150662134312136323001326268613273646002656536714547191925312107361510943183841062421472162190436768212644294317438247352042528858711887648147024850711717436122926427245854848491141081689102226218336AéroportsLocalisation des aéroports, aérodromes et héliports, des pistes, bâtiments et équipements dédiés.Réseaux de transports-68.709 -21.475655.9259 76.5354TRANSPORTNETWORKS.RUNWAYSimage/pngPM103365763366711168011526721344121368230413432679132736460026885359145479919253761072015109601837510632214391621920367442127242879174384073488425448575918876961469768510417151968391647716723288839144721689168288168336MNT LITTO3DMNT LITTO3D au pas de 1MLittoral5.45 42.956.3 43.3UNDERWATER.ELEVATION.ELEVATIONGRIDCOVERAGEimage/x-bil;bits=32WGS84G000111002210265267105510591153153521102119121062107042204239132125214184408478144250428216880169571585018565337603391421144322884441616588323361616656673333131132866662632649132133527529Lignes électriquesAffichage des lignes électriques.Energie-63.3725 -21.475655.9259 51.3121UTILITYANDGOVERNMENTALSERVICES.ALLimage/pngPM103423824975371168576599410741213681536199221601327364600268853681454799192537610736151095918384106392147216219203675221280429271743840735044255985855188769614700885136171695615233139739476270879951241409167191248272Zones franches urbainesZones franches créées au sein de quartiers de plus de 8 500 habitants particulièrement défavorisés, en tenant compte des éléments de nature à faciliter l’implantation d’entreprises ou le développement d’activités économiques.Zones de gestion-63.3725 -21.475655.9259 51.3121ZFU_BDD_WLD_WM_20120925image/pngPM103345743316751167711496631343121362229813262686132724459626535373145457919353071073915109221838610615214791621844367722123142951619352044739714189879143821709167287165341Zones urbaines sensiblesZones urbaines caractérisées par la présence de grands ensembles ou de quartiers d’habitat dégradé et par un déséquilibre accentué entre l’habitat et l’emploi.Zones de gestion-63.3725 -21.475655.9259 51.3121ZUS_BDD_WLD_WM_20120925image/pngPM103345743316751167711496631343121362229813262686132724459626535373145457919353071073915109221838610615214791621844367722123142951619352044739714189879143821709167287165341PMEPSG:38570559082264.0287178958533332-20037508 20037508256256111279541132.0143588959472254-20037508 200375082562562210545978.7734655447186469-20037508 200375082562561024102411272989.3867327723085907-20037508 200375082562562048204812136494.6933663861796617-20037508 20037508256256409640961368247.3466831930771477-20037508 20037508256256819281921434123.6733415965449154-20037508 2003750825625616384163841517061.8366707982724577-20037508 200375082562563276832768168530.9183353991362289-20037508 200375082562566553665536174265.4591676995681144-20037508 20037508256256131072131072182132.7295838497840572-20037508 20037508256256262144262144191066.3647919248918304-20037508 200375082562565242885242882139770566.0071793960087234-20037508 200375082562564420533.1823959624461134-20037508 200375082562561048576104857621266.5911979812228585-20037508 2003750825625620971522097152369885283.0035897239868063-20037508 2003750825625688434942641.5017948619934032-20037508 200375082562561616517471320.7508974309967016-20037508 20037508256256323268735660.3754487154983508-20037508 20037508256256646474367830.1877243577491754-20037508 2003750825625612812882183915.0938621788745877-20037508 2003750825625625625691091957.5469310886252288-20037508 20037508256256512512WGS84GIGNF:WGS84G0279541132.0143588675418869-180 90256256211139770566.0071794337709434-180 902562564210272989.3867327723315839-180 902562562048102411136494.6933663861657919-180 90256256409620481268247.3466831930828960-180 90256256819240961334123.6733415965414480-180 902562561638481921417061.8366707982707240-180 902562563276816384158530.9183353991353620-180 902562566553632768164265.4591676995676810-180 9025625613107265536172132.7295838497838405-180 90256256262144131072181066.3647919248919202-180 9025625652428826214419533.1823959624459601-180 902562561048576524288269885283.0035897168854717-180 9025625684334942641.5017948584427359-180 90256256168417471320.7508974292213679-180 90256256321658735660.3754487146106840-180 90256256643264367830.1877243573053420-180 902562561286472183915.0938621786526710-180 9025625625612881091957.5469310893263355-180 902562565122569545978.7734655446631677-180 902562561024512WGS84G_POIGNF:WGS84G0279541132.0143588675418869-180 90256256211139770566.0071794337709434-180 902562564210272989.3867327723315839-180 902562562048102411136494.6933663861657919-180 90256256409620481268247.3466831930828960-180 9025625681924096269885283.0035897168854717-180 9025625684334942641.5017948584427359-180 90256256168417471320.7508974292213679-180 90256256321658735660.3754487146106840-180 90256256643264367830.1877243573053420-180 902562561286472183915.0938621786526710-180 9025625625612881091957.5469310893263355-180 902562565122569545978.7734655446631677-180 902562561024512 diff --git a/float-no-zero/examples/data/WMTSCapabilities.xml b/float-no-zero/examples/data/WMTSCapabilities.xml new file mode 100644 index 0000000000..44836d9af4 --- /dev/null +++ b/float-no-zero/examples/data/WMTSCapabilities.xml @@ -0,0 +1,374 @@ + + + + Web Map Tile Service + OGC WMTS + 1.0.0 + none + http://data.wien.gv.at/nutzungsbedingungen + + + Magistrat Wien + + + Gerhard Sommer + + + + + + + + + + RESTful + + + + + + + RESTful + + + + + + + RESTful + + + + + + + RESTful + + + + + + + RESTful + + + + + + + + + + + + + RESTful + + + + + + + RESTful + + + + + + + RESTful + + + + + + + RESTful + + + + + + + RESTful + + + + + + + + + + Luftbild + + 16.17 48.10 + 16.58 48.33 + + lb + + image/jpeg + + google3857 + + + + + + + + + MZK Flächen + + 16.17 48.10 + 16.58 48.33 + + fmzk + + image/jpeg + + google3857 + + + + + + + + + Flächenwidmungs- und Bebauungsplan + + 16.17 48.10 + 16.58 48.33 + + flwbplmzk + + image/jpeg + + google3857 + + + + + + + + + Beschriftung + + 16.17 48.10 + 16.58 48.33 + + beschriftung + + image/png + + google3857 + + + + + + + + + + google3857 + + 1799448.394855 6124949.747770 + 1848250.442089 6162571.828177 + + urn:ogc:def:crs:EPSG:6.18:3:3857 + urn:ogc:def:wkss:OGC:1.0:GoogleMapsCompatible + + 0 + 559082264.029 + -20037508.3428 20037508.3428 + 256 + 256 + 1 + 1 + + + 1 + 279541132.015 + -20037508.3428 20037508.3428 + 256 + 256 + 2 + 2 + + + 2 + 139770566.007 + -20037508.3428 20037508.3428 + 256 + 256 + 4 + 4 + + + 3 + 69885283.0036 + -20037508.3428 20037508.3428 + 256 + 256 + 8 + 8 + + + 4 + 34942641.5018 + -20037508.3428 20037508.3428 + 256 + 256 + 16 + 16 + + + 5 + 17471320.7509 + -20037508.3428 20037508.3428 + 256 + 256 + 32 + 32 + + + 6 + 8735660.37545 + -20037508.3428 20037508.3428 + 256 + 256 + 64 + 64 + + + 7 + 4367830.18773 + -20037508.3428 20037508.3428 + 256 + 256 + 128 + 128 + + + 8 + 2183915.09386 + -20037508.3428 20037508.3428 + 256 + 256 + 256 + 256 + + + 9 + 1091957.54693 + -20037508.3428 20037508.3428 + 256 + 256 + 512 + 512 + + + 10 + 545978.773466 + -20037508.3428 20037508.3428 + 256 + 256 + 1024 + 1024 + + + 11 + 272989.386733 + -20037508.3428 20037508.3428 + 256 + 256 + 2048 + 2048 + + + 12 + 136494.693366 + -20037508.3428 20037508.3428 + 256 + 256 + 4096 + 4096 + + + 13 + 68247.3466832 + -20037508.3428 20037508.3428 + 256 + 256 + 8192 + 8192 + + + 14 + 34123.6733416 + -20037508.3428 20037508.3428 + 256 + 256 + 16384 + 16384 + + + 15 + 17061.8366708 + -20037508.3428 20037508.3428 + 256 + 256 + 32768 + 32768 + + + 16 + 8530.91833540 + -20037508.3428 20037508.3428 + 256 + 256 + 65536 + 65536 + + + 17 + 4265.45916770 + -20037508.3428 20037508.3428 + 256 + 256 + 131072 + 131072 + + + 18 + 2132.72958385 + -20037508.3428 20037508.3428 + 256 + 256 + 262144 + 262144 + + + 19 + 1066.36479193 + -20037508.3428 20037508.3428 + 256 + 256 + 524288 + 524288 + + + + + \ No newline at end of file diff --git a/float-no-zero/examples/data/geojson/countries.geojson b/float-no-zero/examples/data/geojson/countries.geojson new file mode 100644 index 0000000000..b27f2ecacb --- /dev/null +++ b/float-no-zero/examples/data/geojson/countries.geojson @@ -0,0 +1,181 @@ +{"type":"FeatureCollection","features":[ +{"type":"Feature","id":"AFG","properties":{"name":"Afghanistan"},"geometry":{"type":"Polygon","coordinates":[[[61.210817,35.650072],[62.230651,35.270664],[62.984662,35.404041],[63.193538,35.857166],[63.982896,36.007957],[64.546479,36.312073],[64.746105,37.111818],[65.588948,37.305217],[65.745631,37.661164],[66.217385,37.39379],[66.518607,37.362784],[67.075782,37.356144],[67.83,37.144994],[68.135562,37.023115],[68.859446,37.344336],[69.196273,37.151144],[69.518785,37.608997],[70.116578,37.588223],[70.270574,37.735165],[70.376304,38.138396],[70.806821,38.486282],[71.348131,38.258905],[71.239404,37.953265],[71.541918,37.905774],[71.448693,37.065645],[71.844638,36.738171],[72.193041,36.948288],[72.63689,37.047558],[73.260056,37.495257],[73.948696,37.421566],[74.980002,37.41999],[75.158028,37.133031],[74.575893,37.020841],[74.067552,36.836176],[72.920025,36.720007],[71.846292,36.509942],[71.262348,36.074388],[71.498768,35.650563],[71.613076,35.153203],[71.115019,34.733126],[71.156773,34.348911],[70.881803,33.988856],[69.930543,34.02012],[70.323594,33.358533],[69.687147,33.105499],[69.262522,32.501944],[69.317764,31.901412],[68.926677,31.620189],[68.556932,31.71331],[67.792689,31.58293],[67.683394,31.303154],[66.938891,31.304911],[66.381458,30.738899],[66.346473,29.887943],[65.046862,29.472181],[64.350419,29.560031],[64.148002,29.340819],[63.550261,29.468331],[62.549857,29.318572],[60.874248,29.829239],[61.781222,30.73585],[61.699314,31.379506],[60.941945,31.548075],[60.863655,32.18292],[60.536078,32.981269],[60.9637,33.528832],[60.52843,33.676446],[60.803193,34.404102],[61.210817,35.650072]]]}}, +{"type":"Feature","id":"AGO","properties":{"name":"Angola"},"geometry":{"type":"MultiPolygon","coordinates":[[[[16.326528,-5.87747],[16.57318,-6.622645],[16.860191,-7.222298],[17.089996,-7.545689],[17.47297,-8.068551],[18.134222,-7.987678],[18.464176,-7.847014],[19.016752,-7.988246],[19.166613,-7.738184],[19.417502,-7.155429],[20.037723,-7.116361],[20.091622,-6.94309],[20.601823,-6.939318],[20.514748,-7.299606],[21.728111,-7.290872],[21.746456,-7.920085],[21.949131,-8.305901],[21.801801,-8.908707],[21.875182,-9.523708],[22.208753,-9.894796],[22.155268,-11.084801],[22.402798,-10.993075],[22.837345,-11.017622],[23.456791,-10.867863],[23.912215,-10.926826],[24.017894,-11.237298],[23.904154,-11.722282],[24.079905,-12.191297],[23.930922,-12.565848],[24.016137,-12.911046],[21.933886,-12.898437],[21.887843,-16.08031],[22.562478,-16.898451],[23.215048,-17.523116],[21.377176,-17.930636],[18.956187,-17.789095],[18.263309,-17.309951],[14.209707,-17.353101],[14.058501,-17.423381],[13.462362,-16.971212],[12.814081,-16.941343],[12.215461,-17.111668],[11.734199,-17.301889],[11.640096,-16.673142],[11.778537,-15.793816],[12.123581,-14.878316],[12.175619,-14.449144],[12.500095,-13.5477],[12.738479,-13.137906],[13.312914,-12.48363],[13.633721,-12.038645],[13.738728,-11.297863],[13.686379,-10.731076],[13.387328,-10.373578],[13.120988,-9.766897],[12.87537,-9.166934],[12.929061,-8.959091],[13.236433,-8.562629],[12.93304,-7.596539],[12.728298,-6.927122],[12.227347,-6.294448],[12.322432,-6.100092],[12.735171,-5.965682],[13.024869,-5.984389],[13.375597,-5.864241],[16.326528,-5.87747]]],[[[12.436688,-5.684304],[12.182337,-5.789931],[11.914963,-5.037987],[12.318608,-4.60623],[12.62076,-4.438023],[12.995517,-4.781103],[12.631612,-4.991271],[12.468004,-5.248362],[12.436688,-5.684304]]]]}}, +{"type":"Feature","id":"ALB","properties":{"name":"Albania"},"geometry":{"type":"Polygon","coordinates":[[[20.590247,41.855404],[20.463175,41.515089],[20.605182,41.086226],[21.02004,40.842727],[20.99999,40.580004],[20.674997,40.435],[20.615,40.110007],[20.150016,39.624998],[19.98,39.694993],[19.960002,39.915006],[19.406082,40.250773],[19.319059,40.72723],[19.40355,41.409566],[19.540027,41.719986],[19.371769,41.877548],[19.304486,42.195745],[19.738051,42.688247],[19.801613,42.500093],[20.0707,42.58863],[20.283755,42.32026],[20.52295,42.21787],[20.590247,41.855404]]]}}, +{"type":"Feature","id":"ARE","properties":{"name":"United Arab Emirates"},"geometry":{"type":"Polygon","coordinates":[[[51.579519,24.245497],[51.757441,24.294073],[51.794389,24.019826],[52.577081,24.177439],[53.404007,24.151317],[54.008001,24.121758],[54.693024,24.797892],[55.439025,25.439145],[56.070821,26.055464],[56.261042,25.714606],[56.396847,24.924732],[55.886233,24.920831],[55.804119,24.269604],[55.981214,24.130543],[55.528632,23.933604],[55.525841,23.524869],[55.234489,23.110993],[55.208341,22.70833],[55.006803,22.496948],[52.000733,23.001154],[51.617708,24.014219],[51.579519,24.245497]]]}}, +{"type":"Feature","id":"ARG","properties":{"name":"Argentina"},"geometry":{"type":"MultiPolygon","coordinates":[[[[-65.5,-55.2],[-66.45,-55.25],[-66.95992,-54.89681],[-67.56244,-54.87001],[-68.63335,-54.8695],[-68.63401,-52.63637],[-68.25,-53.1],[-67.75,-53.85],[-66.45,-54.45],[-65.05,-54.7],[-65.5,-55.2]]],[[[-64.964892,-22.075862],[-64.377021,-22.798091],[-63.986838,-21.993644],[-62.846468,-22.034985],[-62.685057,-22.249029],[-60.846565,-23.880713],[-60.028966,-24.032796],[-58.807128,-24.771459],[-57.777217,-25.16234],[-57.63366,-25.603657],[-58.618174,-27.123719],[-57.60976,-27.395899],[-56.486702,-27.548499],[-55.695846,-27.387837],[-54.788795,-26.621786],[-54.625291,-25.739255],[-54.13005,-25.547639],[-53.628349,-26.124865],[-53.648735,-26.923473],[-54.490725,-27.474757],[-55.162286,-27.881915],[-56.2909,-28.852761],[-57.625133,-30.216295],[-57.874937,-31.016556],[-58.14244,-32.044504],[-58.132648,-33.040567],[-58.349611,-33.263189],[-58.427074,-33.909454],[-58.495442,-34.43149],[-57.22583,-35.288027],[-57.362359,-35.97739],[-56.737487,-36.413126],[-56.788285,-36.901572],[-57.749157,-38.183871],[-59.231857,-38.72022],[-61.237445,-38.928425],[-62.335957,-38.827707],[-62.125763,-39.424105],[-62.330531,-40.172586],[-62.145994,-40.676897],[-62.745803,-41.028761],[-63.770495,-41.166789],[-64.73209,-40.802677],[-65.118035,-41.064315],[-64.978561,-42.058001],[-64.303408,-42.359016],[-63.755948,-42.043687],[-63.458059,-42.563138],[-64.378804,-42.873558],[-65.181804,-43.495381],[-65.328823,-44.501366],[-65.565269,-45.036786],[-66.509966,-45.039628],[-67.293794,-45.551896],[-67.580546,-46.301773],[-66.597066,-47.033925],[-65.641027,-47.236135],[-65.985088,-48.133289],[-67.166179,-48.697337],[-67.816088,-49.869669],[-68.728745,-50.264218],[-69.138539,-50.73251],[-68.815561,-51.771104],[-68.149995,-52.349983],[-68.571545,-52.299444],[-69.498362,-52.142761],[-71.914804,-52.009022],[-72.329404,-51.425956],[-72.309974,-50.67701],[-72.975747,-50.74145],[-73.328051,-50.378785],[-73.415436,-49.318436],[-72.648247,-48.878618],[-72.331161,-48.244238],[-72.447355,-47.738533],[-71.917258,-46.884838],[-71.552009,-45.560733],[-71.659316,-44.973689],[-71.222779,-44.784243],[-71.329801,-44.407522],[-71.793623,-44.207172],[-71.464056,-43.787611],[-71.915424,-43.408565],[-72.148898,-42.254888],[-71.746804,-42.051386],[-71.915734,-40.832339],[-71.680761,-39.808164],[-71.413517,-38.916022],[-70.814664,-38.552995],[-71.118625,-37.576827],[-71.121881,-36.658124],[-70.364769,-36.005089],[-70.388049,-35.169688],[-69.817309,-34.193571],[-69.814777,-33.273886],[-70.074399,-33.09121],[-70.535069,-31.36501],[-69.919008,-30.336339],[-70.01355,-29.367923],[-69.65613,-28.459141],[-69.001235,-27.521214],[-68.295542,-26.89934],[-68.5948,-26.506909],[-68.386001,-26.185016],[-68.417653,-24.518555],[-67.328443,-24.025303],[-66.985234,-22.986349],[-67.106674,-22.735925],[-66.273339,-21.83231],[-64.964892,-22.075862]]]]}}, +{"type":"Feature","id":"ARM","properties":{"name":"Armenia"},"geometry":{"type":"Polygon","coordinates":[[[43.582746,41.092143],[44.97248,41.248129],[45.179496,40.985354],[45.560351,40.81229],[45.359175,40.561504],[45.891907,40.218476],[45.610012,39.899994],[46.034534,39.628021],[46.483499,39.464155],[46.50572,38.770605],[46.143623,38.741201],[45.735379,39.319719],[45.739978,39.473999],[45.298145,39.471751],[45.001987,39.740004],[44.79399,39.713003],[44.400009,40.005],[43.656436,40.253564],[43.752658,40.740201],[43.582746,41.092143]]]}}, +{"type":"Feature","id":"ATA","properties":{"name":"Antarctica"},"geometry":{"type":"MultiPolygon","coordinates":[[[[-59.572095,-80.040179],[-59.865849,-80.549657],[-60.159656,-81.000327],[-62.255393,-80.863178],[-64.488125,-80.921934],[-65.741666,-80.588827],[-65.741666,-80.549657],[-66.290031,-80.255773],[-64.037688,-80.294944],[-61.883246,-80.39287],[-61.138976,-79.981371],[-60.610119,-79.628679],[-59.572095,-80.040179]]],[[[-159.208184,-79.497059],[-161.127601,-79.634209],[-162.439847,-79.281465],[-163.027408,-78.928774],[-163.066604,-78.869966],[-163.712896,-78.595667],[-163.712896,-78.595667],[-163.105801,-78.223338],[-161.245113,-78.380176],[-160.246208,-78.693645],[-159.482405,-79.046338],[-159.208184,-79.497059]]],[[[-45.154758,-78.04707],[-43.920828,-78.478103],[-43.48995,-79.08556],[-43.372438,-79.516645],[-43.333267,-80.026123],[-44.880537,-80.339644],[-46.506174,-80.594357],[-48.386421,-80.829485],[-50.482107,-81.025442],[-52.851988,-80.966685],[-54.164259,-80.633528],[-53.987991,-80.222028],[-51.853134,-79.94773],[-50.991326,-79.614623],[-50.364595,-79.183487],[-49.914131,-78.811209],[-49.306959,-78.458569],[-48.660616,-78.047018],[-48.660616,-78.047019],[-48.151396,-78.04707],[-46.662857,-77.831476],[-45.154758,-78.04707]]],[[[-121.211511,-73.50099],[-119.918851,-73.657725],[-118.724143,-73.481353],[-119.292119,-73.834097],[-120.232217,-74.08881],[-121.62283,-74.010468],[-122.621735,-73.657778],[-122.621735,-73.657777],[-122.406245,-73.324619],[-121.211511,-73.50099]]],[[[-125.559566,-73.481353],[-124.031882,-73.873268],[-124.619469,-73.834097],[-125.912181,-73.736118],[-127.28313,-73.461769],[-127.28313,-73.461768],[-126.558472,-73.246226],[-125.559566,-73.481353]]],[[[-98.98155,-71.933334],[-97.884743,-72.070535],[-96.787937,-71.952971],[-96.20035,-72.521205],[-96.983765,-72.442864],[-98.198083,-72.482035],[-99.432013,-72.442864],[-100.783455,-72.50162],[-101.801868,-72.305663],[-102.330725,-71.894164],[-102.330725,-71.894164],[-101.703967,-71.717792],[-100.430919,-71.854993],[-98.98155,-71.933334]]],[[[-68.451346,-70.955823],[-68.333834,-71.406493],[-68.510128,-71.798407],[-68.784297,-72.170736],[-69.959471,-72.307885],[-71.075889,-72.503842],[-72.388134,-72.484257],[-71.8985,-72.092343],[-73.073622,-72.229492],[-74.19004,-72.366693],[-74.953895,-72.072757],[-75.012625,-71.661258],[-73.915819,-71.269345],[-73.915819,-71.269344],[-73.230331,-71.15178],[-72.074717,-71.190951],[-71.780962,-70.681473],[-71.72218,-70.309196],[-71.741791,-69.505782],[-71.173815,-69.035475],[-70.253252,-68.87874],[-69.724447,-69.251017],[-69.489422,-69.623346],[-69.058518,-70.074016],[-68.725541,-70.505153],[-68.451346,-70.955823]]],[[[-58.614143,-64.152467],[-59.045073,-64.36801],[-59.789342,-64.211223],[-60.611928,-64.309202],[-61.297416,-64.54433],[-62.0221,-64.799094],[-62.51176,-65.09303],[-62.648858,-65.484942],[-62.590128,-65.857219],[-62.120079,-66.190326],[-62.805567,-66.425505],[-63.74569,-66.503847],[-64.294106,-66.837004],[-64.881693,-67.150474],[-65.508425,-67.58161],[-65.665082,-67.953887],[-65.312545,-68.365335],[-64.783715,-68.678908],[-63.961103,-68.913984],[-63.1973,-69.227556],[-62.785955,-69.619419],[-62.570516,-69.991747],[-62.276736,-70.383661],[-61.806661,-70.716768],[-61.512906,-71.089045],[-61.375809,-72.010074],[-61.081977,-72.382351],[-61.003661,-72.774265],[-60.690269,-73.166179],[-60.827367,-73.695242],[-61.375809,-74.106742],[-61.96337,-74.439848],[-63.295201,-74.576997],[-63.74569,-74.92974],[-64.352836,-75.262847],[-65.860987,-75.635124],[-67.192818,-75.79191],[-68.446282,-76.007452],[-69.797724,-76.222995],[-70.600724,-76.634494],[-72.206776,-76.673665],[-73.969536,-76.634494],[-75.555977,-76.712887],[-77.24037,-76.712887],[-76.926979,-77.104802],[-75.399294,-77.28107],[-74.282876,-77.55542],[-73.656119,-77.908112],[-74.772536,-78.221633],[-76.4961,-78.123654],[-77.925858,-78.378419],[-77.984666,-78.789918],[-78.023785,-79.181833],[-76.848637,-79.514939],[-76.633224,-79.887216],[-75.360097,-80.259545],[-73.244852,-80.416331],[-71.442946,-80.69063],[-70.013163,-81.004151],[-68.191646,-81.317672],[-65.704279,-81.474458],[-63.25603,-81.748757],[-61.552026,-82.042692],[-59.691416,-82.37585],[-58.712121,-82.846106],[-58.222487,-83.218434],[-57.008117,-82.865691],[-55.362894,-82.571755],[-53.619771,-82.258235],[-51.543644,-82.003521],[-49.76135,-81.729171],[-47.273931,-81.709586],[-44.825708,-81.846735],[-42.808363,-82.081915],[-42.16202,-81.65083],[-40.771433,-81.356894],[-38.244818,-81.337309],[-36.26667,-81.121715],[-34.386397,-80.906172],[-32.310296,-80.769023],[-30.097098,-80.592651],[-28.549802,-80.337938],[-29.254901,-79.985195],[-29.685805,-79.632503],[-29.685805,-79.260226],[-31.624808,-79.299397],[-33.681324,-79.456132],[-35.639912,-79.456132],[-35.914107,-79.083855],[-35.77701,-78.339248],[-35.326546,-78.123654],[-33.896763,-77.888526],[-32.212369,-77.65345],[-30.998051,-77.359515],[-29.783732,-77.065579],[-28.882779,-76.673665],[-27.511752,-76.497345],[-26.160336,-76.360144],[-25.474822,-76.281803],[-23.927552,-76.24258],[-22.458598,-76.105431],[-21.224694,-75.909474],[-20.010375,-75.674346],[-18.913543,-75.439218],[-17.522982,-75.125698],[-16.641589,-74.79254],[-15.701491,-74.498604],[-15.40771,-74.106742],[-16.46532,-73.871614],[-16.112784,-73.460114],[-15.446855,-73.146542],[-14.408805,-72.950585],[-13.311973,-72.715457],[-12.293508,-72.401936],[-11.510067,-72.010074],[-11.020433,-71.539767],[-10.295774,-71.265416],[-9.101015,-71.324224],[-8.611381,-71.65733],[-7.416622,-71.696501],[-7.377451,-71.324224],[-6.868232,-70.93231],[-5.790985,-71.030289],[-5.536375,-71.402617],[-4.341667,-71.461373],[-3.048981,-71.285053],[-1.795492,-71.167438],[-0.659489,-71.226246],[-0.228637,-71.637745],[0.868195,-71.304639],[1.886686,-71.128267],[3.022638,-70.991118],[4.139055,-70.853917],[5.157546,-70.618789],[6.273912,-70.462055],[7.13572,-70.246512],[7.742866,-69.893769],[8.48711,-70.148534],[9.525135,-70.011333],[10.249845,-70.48164],[10.817821,-70.834332],[11.953824,-70.638375],[12.404287,-70.246512],[13.422778,-69.972162],[14.734998,-70.030918],[15.126757,-70.403247],[15.949342,-70.030918],[17.026589,-69.913354],[18.201711,-69.874183],[19.259373,-69.893769],[20.375739,-70.011333],[21.452985,-70.07014],[21.923034,-70.403247],[22.569403,-70.697182],[23.666184,-70.520811],[24.841357,-70.48164],[25.977309,-70.48164],[27.093726,-70.462055],[28.09258,-70.324854],[29.150242,-70.20729],[30.031583,-69.93294],[30.971733,-69.75662],[31.990172,-69.658641],[32.754053,-69.384291],[33.302443,-68.835642],[33.870419,-68.502588],[34.908495,-68.659271],[35.300202,-69.012014],[36.16201,-69.247142],[37.200035,-69.168748],[37.905108,-69.52144],[38.649404,-69.776205],[39.667894,-69.541077],[40.020431,-69.109941],[40.921358,-68.933621],[41.959434,-68.600514],[42.938702,-68.463313],[44.113876,-68.267408],[44.897291,-68.051866],[45.719928,-67.816738],[46.503343,-67.601196],[47.44344,-67.718759],[48.344419,-67.366068],[48.990736,-67.091718],[49.930885,-67.111303],[50.753471,-66.876175],[50.949325,-66.523484],[51.791547,-66.249133],[52.614133,-66.053176],[53.613038,-65.89639],[54.53355,-65.818049],[55.414943,-65.876805],[56.355041,-65.974783],[57.158093,-66.249133],[57.255968,-66.680218],[58.137361,-67.013324],[58.744508,-67.287675],[59.939318,-67.405239],[60.605221,-67.679589],[61.427806,-67.953887],[62.387489,-68.012695],[63.19049,-67.816738],[64.052349,-67.405239],[64.992447,-67.620729],[65.971715,-67.738345],[66.911864,-67.855909],[67.891133,-67.934302],[68.890038,-67.934302],[69.712624,-68.972791],[69.673453,-69.227556],[69.555941,-69.678226],[68.596258,-69.93294],[67.81274,-70.305268],[67.949889,-70.697182],[69.066307,-70.677545],[68.929157,-71.069459],[68.419989,-71.441788],[67.949889,-71.853287],[68.71377,-72.166808],[69.869307,-72.264787],[71.024895,-72.088415],[71.573285,-71.696501],[71.906288,-71.324224],[72.454627,-71.010703],[73.08141,-70.716768],[73.33602,-70.364024],[73.864877,-69.874183],[74.491557,-69.776205],[75.62756,-69.737034],[76.626465,-69.619419],[77.644904,-69.462684],[78.134539,-69.07077],[78.428371,-68.698441],[79.113859,-68.326216],[80.093127,-68.071503],[80.93535,-67.875546],[81.483792,-67.542388],[82.051767,-67.366068],[82.776426,-67.209282],[83.775331,-67.30726],[84.676206,-67.209282],[85.655527,-67.091718],[86.752359,-67.150474],[87.477017,-66.876175],[87.986289,-66.209911],[88.358411,-66.484261],[88.828408,-66.954568],[89.67063,-67.150474],[90.630365,-67.228867],[91.5901,-67.111303],[92.608539,-67.189696],[93.548637,-67.209282],[94.17542,-67.111303],[95.017591,-67.170111],[95.781472,-67.385653],[96.682399,-67.248504],[97.759646,-67.248504],[98.68021,-67.111303],[99.718182,-67.248504],[100.384188,-66.915346],[100.893356,-66.58224],[101.578896,-66.30789],[102.832411,-65.563284],[103.478676,-65.700485],[104.242557,-65.974783],[104.90846,-66.327527],[106.181561,-66.934931],[107.160881,-66.954568],[108.081393,-66.954568],[109.15864,-66.837004],[110.235835,-66.699804],[111.058472,-66.425505],[111.74396,-66.13157],[112.860378,-66.092347],[113.604673,-65.876805],[114.388088,-66.072762],[114.897308,-66.386283],[115.602381,-66.699804],[116.699161,-66.660633],[117.384701,-66.915346],[118.57946,-67.170111],[119.832924,-67.268089],[120.871,-67.189696],[121.654415,-66.876175],[122.320369,-66.562654],[123.221296,-66.484261],[124.122274,-66.621462],[125.160247,-66.719389],[126.100396,-66.562654],[127.001427,-66.562654],[127.882768,-66.660633],[128.80328,-66.758611],[129.704259,-66.58224],[130.781454,-66.425505],[131.799945,-66.386283],[132.935896,-66.386283],[133.85646,-66.288304],[134.757387,-66.209963],[135.031582,-65.72007],[135.070753,-65.308571],[135.697485,-65.582869],[135.873805,-66.033591],[136.206705,-66.44509],[136.618049,-66.778197],[137.460271,-66.954568],[138.596223,-66.895761],[139.908442,-66.876175],[140.809421,-66.817367],[142.121692,-66.817367],[143.061842,-66.797782],[144.374061,-66.837004],[145.490427,-66.915346],[146.195552,-67.228867],[145.999699,-67.601196],[146.646067,-67.895131],[147.723263,-68.130259],[148.839629,-68.385024],[150.132314,-68.561292],[151.483705,-68.71813],[152.502247,-68.874813],[153.638199,-68.894502],[154.284567,-68.561292],[155.165857,-68.835642],[155.92979,-69.149215],[156.811132,-69.384291],[158.025528,-69.482269],[159.181013,-69.599833],[159.670699,-69.991747],[160.80665,-70.226875],[161.570479,-70.579618],[162.686897,-70.736353],[163.842434,-70.716768],[164.919681,-70.775524],[166.11444,-70.755938],[167.309095,-70.834332],[168.425616,-70.971481],[169.463589,-71.20666],[170.501665,-71.402617],[171.20679,-71.696501],[171.089227,-72.088415],[170.560422,-72.441159],[170.109958,-72.891829],[169.75737,-73.24452],[169.287321,-73.65602],[167.975101,-73.812806],[167.387489,-74.165498],[166.094803,-74.38104],[165.644391,-74.772954],[164.958851,-75.145283],[164.234193,-75.458804],[163.822797,-75.870303],[163.568239,-76.24258],[163.47026,-76.693302],[163.489897,-77.065579],[164.057873,-77.457442],[164.273363,-77.82977],[164.743464,-78.182514],[166.604126,-78.319611],[166.995781,-78.750748],[165.193876,-78.907483],[163.666217,-79.123025],[161.766385,-79.162248],[160.924162,-79.730482],[160.747894,-80.200737],[160.316964,-80.573066],[159.788211,-80.945395],[161.120016,-81.278501],[161.629287,-81.690001],[162.490992,-82.062278],[163.705336,-82.395435],[165.095949,-82.708956],[166.604126,-83.022477],[168.895665,-83.335998],[169.404782,-83.825891],[172.283934,-84.041433],[172.477049,-84.117914],[173.224083,-84.41371],[175.985672,-84.158997],[178.277212,-84.472518],[180,-84.71338],[-179.942499,-84.721443],[-179.058677,-84.139412],[-177.256772,-84.452933],[-177.140807,-84.417941],[-176.084673,-84.099259],[-175.947235,-84.110449],[-175.829882,-84.117914],[-174.382503,-84.534323],[-173.116559,-84.117914],[-172.889106,-84.061019],[-169.951223,-83.884647],[-168.999989,-84.117914],[-168.530199,-84.23739],[-167.022099,-84.570497],[-164.182144,-84.82521],[-161.929775,-85.138731],[-158.07138,-85.37391],[-155.192253,-85.09956],[-150.942099,-85.295517],[-148.533073,-85.609038],[-145.888918,-85.315102],[-143.107718,-85.040752],[-142.892279,-84.570497],[-146.829068,-84.531274],[-150.060732,-84.296146],[-150.902928,-83.904232],[-153.586201,-83.68869],[-153.409907,-83.23802],[-153.037759,-82.82652],[-152.665637,-82.454192],[-152.861517,-82.042692],[-154.526299,-81.768394],[-155.29018,-81.41565],[-156.83745,-81.102129],[-154.408787,-81.160937],[-152.097662,-81.004151],[-150.648293,-81.337309],[-148.865998,-81.043373],[-147.22075,-80.671045],[-146.417749,-80.337938],[-146.770286,-79.926439],[-148.062947,-79.652089],[-149.531901,-79.358205],[-151.588416,-79.299397],[-153.390322,-79.162248],[-155.329376,-79.064269],[-155.975668,-78.69194],[-157.268302,-78.378419],[-158.051768,-78.025676],[-158.365134,-76.889207],[-157.875474,-76.987238],[-156.974573,-77.300759],[-155.329376,-77.202728],[-153.742832,-77.065579],[-152.920247,-77.496664],[-151.33378,-77.398737],[-150.00195,-77.183143],[-148.748486,-76.908845],[-147.612483,-76.575738],[-146.104409,-76.47776],[-146.143528,-76.105431],[-146.496091,-75.733154],[-146.20231,-75.380411],[-144.909624,-75.204039],[-144.322037,-75.537197],[-142.794353,-75.34124],[-141.638764,-75.086475],[-140.209007,-75.06689],[-138.85759,-74.968911],[-137.5062,-74.733783],[-136.428901,-74.518241],[-135.214583,-74.302699],[-134.431194,-74.361455],[-133.745654,-74.439848],[-132.257168,-74.302699],[-130.925311,-74.479019],[-129.554284,-74.459433],[-128.242038,-74.322284],[-126.890622,-74.420263],[-125.402082,-74.518241],[-124.011496,-74.479019],[-122.562152,-74.498604],[-121.073613,-74.518241],[-119.70256,-74.479019],[-118.684145,-74.185083],[-117.469801,-74.028348],[-116.216312,-74.243891],[-115.021552,-74.067519],[-113.944331,-73.714828],[-113.297988,-74.028348],[-112.945452,-74.38104],[-112.299083,-74.714198],[-111.261059,-74.420263],[-110.066325,-74.79254],[-108.714909,-74.910103],[-107.559346,-75.184454],[-106.149148,-75.125698],[-104.876074,-74.949326],[-103.367949,-74.988497],[-102.016507,-75.125698],[-100.645531,-75.302018],[-100.1167,-74.870933],[-100.763043,-74.537826],[-101.252703,-74.185083],[-102.545337,-74.106742],[-103.113313,-73.734413],[-103.328752,-73.362084],[-103.681289,-72.61753],[-102.917485,-72.754679],[-101.60524,-72.813436],[-100.312528,-72.754679],[-99.13738,-72.911414],[-98.118889,-73.20535],[-97.688037,-73.558041],[-96.336595,-73.616849],[-95.043961,-73.4797],[-93.672907,-73.283743],[-92.439003,-73.166179],[-91.420564,-73.401307],[-90.088733,-73.322914],[-89.226951,-72.558722],[-88.423951,-73.009393],[-87.268337,-73.185764],[-86.014822,-73.087786],[-85.192236,-73.4797],[-83.879991,-73.518871],[-82.665646,-73.636434],[-81.470913,-73.851977],[-80.687447,-73.4797],[-80.295791,-73.126956],[-79.296886,-73.518871],[-77.925858,-73.420892],[-76.907367,-73.636434],[-76.221879,-73.969541],[-74.890049,-73.871614],[-73.852024,-73.65602],[-72.833533,-73.401307],[-71.619215,-73.264157],[-70.209042,-73.146542],[-68.935916,-73.009393],[-67.956622,-72.79385],[-67.369061,-72.480329],[-67.134036,-72.049244],[-67.251548,-71.637745],[-67.56494,-71.245831],[-67.917477,-70.853917],[-68.230843,-70.462055],[-68.485452,-70.109311],[-68.544209,-69.717397],[-68.446282,-69.325535],[-67.976233,-68.953206],[-67.5845,-68.541707],[-67.427843,-68.149844],[-67.62367,-67.718759],[-67.741183,-67.326845],[-67.251548,-66.876175],[-66.703184,-66.58224],[-66.056815,-66.209963],[-65.371327,-65.89639],[-64.568276,-65.602506],[-64.176542,-65.171423],[-63.628152,-64.897073],[-63.001394,-64.642308],[-62.041686,-64.583552],[-61.414928,-64.270031],[-60.709855,-64.074074],[-59.887269,-63.95651],[-59.162585,-63.701745],[-58.594557,-63.388224],[-57.811143,-63.27066],[-57.223582,-63.525425],[-57.59573,-63.858532],[-58.614143,-64.152467]]]]}}, +{"type":"Feature","id":"ATF","properties":{"name":"French Southern and Antarctic Lands"},"geometry":{"type":"Polygon","coordinates":[[[68.935,-48.625],[69.58,-48.94],[70.525,-49.065],[70.56,-49.255],[70.28,-49.71],[68.745,-49.775],[68.72,-49.2425],[68.8675,-48.83],[68.935,-48.625]]]}}, +{"type":"Feature","id":"AUS","properties":{"name":"Australia"},"geometry":{"type":"MultiPolygon","coordinates":[[[[145.397978,-40.792549],[146.364121,-41.137695],[146.908584,-41.000546],[147.689259,-40.808258],[148.289068,-40.875438],[148.359865,-42.062445],[148.017301,-42.407024],[147.914052,-43.211522],[147.564564,-42.937689],[146.870343,-43.634597],[146.663327,-43.580854],[146.048378,-43.549745],[145.43193,-42.693776],[145.29509,-42.03361],[144.718071,-41.162552],[144.743755,-40.703975],[145.397978,-40.792549]]],[[[143.561811,-13.763656],[143.922099,-14.548311],[144.563714,-14.171176],[144.894908,-14.594458],[145.374724,-14.984976],[145.271991,-15.428205],[145.48526,-16.285672],[145.637033,-16.784918],[145.888904,-16.906926],[146.160309,-17.761655],[146.063674,-18.280073],[146.387478,-18.958274],[147.471082,-19.480723],[148.177602,-19.955939],[148.848414,-20.39121],[148.717465,-20.633469],[149.28942,-21.260511],[149.678337,-22.342512],[150.077382,-22.122784],[150.482939,-22.556142],[150.727265,-22.402405],[150.899554,-23.462237],[151.609175,-24.076256],[152.07354,-24.457887],[152.855197,-25.267501],[153.136162,-26.071173],[153.161949,-26.641319],[153.092909,-27.2603],[153.569469,-28.110067],[153.512108,-28.995077],[153.339095,-29.458202],[153.069241,-30.35024],[153.089602,-30.923642],[152.891578,-31.640446],[152.450002,-32.550003],[151.709117,-33.041342],[151.343972,-33.816023],[151.010555,-34.31036],[150.714139,-35.17346],[150.32822,-35.671879],[150.075212,-36.420206],[149.946124,-37.109052],[149.997284,-37.425261],[149.423882,-37.772681],[148.304622,-37.809061],[147.381733,-38.219217],[146.922123,-38.606532],[146.317922,-39.035757],[145.489652,-38.593768],[144.876976,-38.417448],[145.032212,-37.896188],[144.485682,-38.085324],[143.609974,-38.809465],[142.745427,-38.538268],[142.17833,-38.380034],[141.606582,-38.308514],[140.638579,-38.019333],[139.992158,-37.402936],[139.806588,-36.643603],[139.574148,-36.138362],[139.082808,-35.732754],[138.120748,-35.612296],[138.449462,-35.127261],[138.207564,-34.384723],[137.71917,-35.076825],[136.829406,-35.260535],[137.352371,-34.707339],[137.503886,-34.130268],[137.890116,-33.640479],[137.810328,-32.900007],[136.996837,-33.752771],[136.372069,-34.094766],[135.989043,-34.890118],[135.208213,-34.47867],[135.239218,-33.947953],[134.613417,-33.222778],[134.085904,-32.848072],[134.273903,-32.617234],[132.990777,-32.011224],[132.288081,-31.982647],[131.326331,-31.495803],[129.535794,-31.590423],[128.240938,-31.948489],[127.102867,-32.282267],[126.148714,-32.215966],[125.088623,-32.728751],[124.221648,-32.959487],[124.028947,-33.483847],[123.659667,-33.890179],[122.811036,-33.914467],[122.183064,-34.003402],[121.299191,-33.821036],[120.580268,-33.930177],[119.893695,-33.976065],[119.298899,-34.509366],[119.007341,-34.464149],[118.505718,-34.746819],[118.024972,-35.064733],[117.295507,-35.025459],[116.625109,-35.025097],[115.564347,-34.386428],[115.026809,-34.196517],[115.048616,-33.623425],[115.545123,-33.487258],[115.714674,-33.259572],[115.679379,-32.900369],[115.801645,-32.205062],[115.689611,-31.612437],[115.160909,-30.601594],[114.997043,-30.030725],[115.040038,-29.461095],[114.641974,-28.810231],[114.616498,-28.516399],[114.173579,-28.118077],[114.048884,-27.334765],[113.477498,-26.543134],[113.338953,-26.116545],[113.778358,-26.549025],[113.440962,-25.621278],[113.936901,-25.911235],[114.232852,-26.298446],[114.216161,-25.786281],[113.721255,-24.998939],[113.625344,-24.683971],[113.393523,-24.384764],[113.502044,-23.80635],[113.706993,-23.560215],[113.843418,-23.059987],[113.736552,-22.475475],[114.149756,-21.755881],[114.225307,-22.517488],[114.647762,-21.82952],[115.460167,-21.495173],[115.947373,-21.068688],[116.711615,-20.701682],[117.166316,-20.623599],[117.441545,-20.746899],[118.229559,-20.374208],[118.836085,-20.263311],[118.987807,-20.044203],[119.252494,-19.952942],[119.805225,-19.976506],[120.85622,-19.683708],[121.399856,-19.239756],[121.655138,-18.705318],[122.241665,-18.197649],[122.286624,-17.798603],[122.312772,-17.254967],[123.012574,-16.4052],[123.433789,-17.268558],[123.859345,-17.069035],[123.503242,-16.596506],[123.817073,-16.111316],[124.258287,-16.327944],[124.379726,-15.56706],[124.926153,-15.0751],[125.167275,-14.680396],[125.670087,-14.51007],[125.685796,-14.230656],[126.125149,-14.347341],[126.142823,-14.095987],[126.582589,-13.952791],[127.065867,-13.817968],[127.804633,-14.276906],[128.35969,-14.86917],[128.985543,-14.875991],[129.621473,-14.969784],[129.4096,-14.42067],[129.888641,-13.618703],[130.339466,-13.357376],[130.183506,-13.10752],[130.617795,-12.536392],[131.223495,-12.183649],[131.735091,-12.302453],[132.575298,-12.114041],[132.557212,-11.603012],[131.824698,-11.273782],[132.357224,-11.128519],[133.019561,-11.376411],[133.550846,-11.786515],[134.393068,-12.042365],[134.678632,-11.941183],[135.298491,-12.248606],[135.882693,-11.962267],[136.258381,-12.049342],[136.492475,-11.857209],[136.95162,-12.351959],[136.685125,-12.887223],[136.305407,-13.29123],[135.961758,-13.324509],[136.077617,-13.724278],[135.783836,-14.223989],[135.428664,-14.715432],[135.500184,-14.997741],[136.295175,-15.550265],[137.06536,-15.870762],[137.580471,-16.215082],[138.303217,-16.807604],[138.585164,-16.806622],[139.108543,-17.062679],[139.260575,-17.371601],[140.215245,-17.710805],[140.875463,-17.369069],[141.07111,-16.832047],[141.274095,-16.38887],[141.398222,-15.840532],[141.702183,-15.044921],[141.56338,-14.561333],[141.63552,-14.270395],[141.519869,-13.698078],[141.65092,-12.944688],[141.842691,-12.741548],[141.68699,-12.407614],[141.928629,-11.877466],[142.118488,-11.328042],[142.143706,-11.042737],[142.51526,-10.668186],[142.79731,-11.157355],[142.866763,-11.784707],[143.115947,-11.90563],[143.158632,-12.325656],[143.522124,-12.834358],[143.597158,-13.400422],[143.561811,-13.763656]]]]}}, +{"type":"Feature","id":"AUT","properties":{"name":"Austria"},"geometry":{"type":"Polygon","coordinates":[[[16.979667,48.123497],[16.903754,47.714866],[16.340584,47.712902],[16.534268,47.496171],[16.202298,46.852386],[16.011664,46.683611],[15.137092,46.658703],[14.632472,46.431817],[13.806475,46.509306],[12.376485,46.767559],[12.153088,47.115393],[11.164828,46.941579],[11.048556,46.751359],[10.442701,46.893546],[9.932448,46.920728],[9.47997,47.10281],[9.632932,47.347601],[9.594226,47.525058],[9.896068,47.580197],[10.402084,47.302488],[10.544504,47.566399],[11.426414,47.523766],[12.141357,47.703083],[12.62076,47.672388],[12.932627,47.467646],[13.025851,47.637584],[12.884103,48.289146],[13.243357,48.416115],[13.595946,48.877172],[14.338898,48.555305],[14.901447,48.964402],[15.253416,49.039074],[16.029647,48.733899],[16.499283,48.785808],[16.960288,48.596982],[16.879983,48.470013],[16.979667,48.123497]]]}}, +{"type":"Feature","id":"AZE","properties":{"name":"Azerbaijan"},"geometry":{"type":"MultiPolygon","coordinates":[[[[45.001987,39.740004],[45.298145,39.471751],[45.739978,39.473999],[45.735379,39.319719],[46.143623,38.741201],[45.457722,38.874139],[44.952688,39.335765],[44.79399,39.713003],[45.001987,39.740004]]],[[[47.373315,41.219732],[47.815666,41.151416],[47.987283,41.405819],[48.584353,41.80887],[49.110264,41.282287],[49.618915,40.572924],[50.08483,40.526157],[50.392821,40.256561],[49.569202,40.176101],[49.395259,39.399482],[49.223228,39.049219],[48.856532,38.815486],[48.883249,38.320245],[48.634375,38.270378],[48.010744,38.794015],[48.355529,39.288765],[48.060095,39.582235],[47.685079,39.508364],[46.50572,38.770605],[46.483499,39.464155],[46.034534,39.628021],[45.610012,39.899994],[45.891907,40.218476],[45.359175,40.561504],[45.560351,40.81229],[45.179496,40.985354],[44.97248,41.248129],[45.217426,41.411452],[45.962601,41.123873],[46.501637,41.064445],[46.637908,41.181673],[46.145432,41.722802],[46.404951,41.860675],[46.686071,41.827137],[47.373315,41.219732]]]]}}, +{"type":"Feature","id":"BDI","properties":{"name":"Burundi"},"geometry":{"type":"Polygon","coordinates":[[[29.339998,-4.499983],[29.276384,-3.293907],[29.024926,-2.839258],[29.632176,-2.917858],[29.938359,-2.348487],[30.469696,-2.413858],[30.527677,-2.807632],[30.743013,-3.034285],[30.752263,-3.35933],[30.50556,-3.568567],[30.116333,-4.090138],[29.753512,-4.452389],[29.339998,-4.499983]]]}}, +{"type":"Feature","id":"BEL","properties":{"name":"Belgium"},"geometry":{"type":"Polygon","coordinates":[[[3.314971,51.345781],[4.047071,51.267259],[4.973991,51.475024],[5.606976,51.037298],[6.156658,50.803721],[6.043073,50.128052],[5.782417,50.090328],[5.674052,49.529484],[4.799222,49.985373],[4.286023,49.907497],[3.588184,50.378992],[3.123252,50.780363],[2.658422,50.796848],[2.513573,51.148506],[3.314971,51.345781]]]}}, +{"type":"Feature","id":"BEN","properties":{"name":"Benin"},"geometry":{"type":"Polygon","coordinates":[[[2.691702,6.258817],[1.865241,6.142158],[1.618951,6.832038],[1.664478,9.12859],[1.463043,9.334624],[1.425061,9.825395],[1.077795,10.175607],[0.772336,10.470808],[0.899563,10.997339],[1.24347,11.110511],[1.447178,11.547719],[1.935986,11.64115],[2.154474,11.94015],[2.490164,12.233052],[2.848643,12.235636],[3.61118,11.660167],[3.572216,11.327939],[3.797112,10.734746],[3.60007,10.332186],[3.705438,10.06321],[3.220352,9.444153],[2.912308,9.137608],[2.723793,8.506845],[2.749063,7.870734],[2.691702,6.258817]]]}}, +{"type":"Feature","id":"BFA","properties":{"name":"Burkina Faso"},"geometry":{"type":"Polygon","coordinates":[[[-2.827496,9.642461],[-3.511899,9.900326],[-3.980449,9.862344],[-4.330247,9.610835],[-4.779884,9.821985],[-4.954653,10.152714],[-5.404342,10.370737],[-5.470565,10.95127],[-5.197843,11.375146],[-5.220942,11.713859],[-4.427166,12.542646],[-4.280405,13.228444],[-4.006391,13.472485],[-3.522803,13.337662],[-3.103707,13.541267],[-2.967694,13.79815],[-2.191825,14.246418],[-2.001035,14.559008],[-1.066363,14.973815],[-0.515854,15.116158],[-0.266257,14.924309],[0.374892,14.928908],[0.295646,14.444235],[0.429928,13.988733],[0.993046,13.33575],[1.024103,12.851826],[2.177108,12.625018],[2.154474,11.94015],[1.935986,11.64115],[1.447178,11.547719],[1.24347,11.110511],[0.899563,10.997339],[0.023803,11.018682],[-0.438702,11.098341],[-0.761576,10.93693],[-1.203358,11.009819],[-2.940409,10.96269],[-2.963896,10.395335],[-2.827496,9.642461]]]}}, +{"type":"Feature","id":"BGD","properties":{"name":"Bangladesh"},"geometry":{"type":"Polygon","coordinates":[[[92.672721,22.041239],[92.652257,21.324048],[92.303234,21.475485],[92.368554,20.670883],[92.082886,21.192195],[92.025215,21.70157],[91.834891,22.182936],[91.417087,22.765019],[90.496006,22.805017],[90.586957,22.392794],[90.272971,21.836368],[89.847467,22.039146],[89.70205,21.857116],[89.418863,21.966179],[89.031961,22.055708],[88.876312,22.879146],[88.52977,23.631142],[88.69994,24.233715],[88.084422,24.501657],[88.306373,24.866079],[88.931554,25.238692],[88.209789,25.768066],[88.563049,26.446526],[89.355094,26.014407],[89.832481,25.965082],[89.920693,25.26975],[90.872211,25.132601],[91.799596,25.147432],[92.376202,24.976693],[91.915093,24.130414],[91.46773,24.072639],[91.158963,23.503527],[91.706475,22.985264],[91.869928,23.624346],[92.146035,23.627499],[92.672721,22.041239]]]}}, +{"type":"Feature","id":"BGR","properties":{"name":"Bulgaria"},"geometry":{"type":"Polygon","coordinates":[[[22.65715,44.234923],[22.944832,43.823785],[23.332302,43.897011],[24.100679,43.741051],[25.569272,43.688445],[26.065159,43.943494],[27.2424,44.175986],[27.970107,43.812468],[28.558081,43.707462],[28.039095,43.293172],[27.673898,42.577892],[27.99672,42.007359],[27.135739,42.141485],[26.117042,41.826905],[26.106138,41.328899],[25.197201,41.234486],[24.492645,41.583896],[23.692074,41.309081],[22.952377,41.337994],[22.881374,41.999297],[22.380526,42.32026],[22.545012,42.461362],[22.436595,42.580321],[22.604801,42.898519],[22.986019,43.211161],[22.500157,43.642814],[22.410446,44.008063],[22.65715,44.234923]]]}}, +{"type":"Feature","id":"BHS","properties":{"name":"The Bahamas"},"geometry":{"type":"MultiPolygon","coordinates":[[[[-77.53466,23.75975],[-77.78,23.71],[-78.03405,24.28615],[-78.40848,24.57564],[-78.19087,25.2103],[-77.89,25.17],[-77.54,24.34],[-77.53466,23.75975]]],[[[-77.82,26.58],[-78.91,26.42],[-78.98,26.79],[-78.51,26.87],[-77.85,26.84],[-77.82,26.58]]],[[[-77,26.59],[-77.17255,25.87918],[-77.35641,26.00735],[-77.34,26.53],[-77.78802,26.92516],[-77.79,27.04],[-77,26.59]]]]}}, +{"type":"Feature","id":"BIH","properties":{"name":"Bosnia and Herzegovina"},"geometry":{"type":"Polygon","coordinates":[[[19.005486,44.860234],[19.36803,44.863],[19.11761,44.42307],[19.59976,44.03847],[19.454,43.5681],[19.21852,43.52384],[19.03165,43.43253],[18.70648,43.20011],[18.56,42.65],[17.674922,43.028563],[17.297373,43.446341],[16.916156,43.667722],[16.456443,44.04124],[16.23966,44.351143],[15.750026,44.818712],[15.959367,45.233777],[16.318157,45.004127],[16.534939,45.211608],[17.002146,45.233777],[17.861783,45.06774],[18.553214,45.08159],[19.005486,44.860234]]]}}, +{"type":"Feature","id":"BLR","properties":{"name":"Belarus"},"geometry":{"type":"Polygon","coordinates":[[[23.484128,53.912498],[24.450684,53.905702],[25.536354,54.282423],[25.768433,54.846963],[26.588279,55.167176],[26.494331,55.615107],[27.10246,55.783314],[28.176709,56.16913],[29.229513,55.918344],[29.371572,55.670091],[29.896294,55.789463],[30.873909,55.550976],[30.971836,55.081548],[30.757534,54.811771],[31.384472,54.157056],[31.791424,53.974639],[31.731273,53.794029],[32.405599,53.618045],[32.693643,53.351421],[32.304519,53.132726],[31.497644,53.167427],[31.305201,53.073996],[31.540018,52.742052],[31.785998,52.101678],[30.927549,52.042353],[30.619454,51.822806],[30.555117,51.319503],[30.157364,51.416138],[29.254938,51.368234],[28.992835,51.602044],[28.617613,51.427714],[28.241615,51.572227],[27.454066,51.592303],[26.337959,51.832289],[25.327788,51.910656],[24.553106,51.888461],[24.005078,51.617444],[23.527071,51.578454],[23.508002,52.023647],[23.199494,52.486977],[23.799199,52.691099],[23.804935,53.089731],[23.527536,53.470122],[23.484128,53.912498]]]}}, +{"type":"Feature","id":"BLZ","properties":{"name":"Belize"},"geometry":{"type":"Polygon","coordinates":[[[-89.14308,17.808319],[-89.150909,17.955468],[-89.029857,18.001511],[-88.848344,17.883198],[-88.490123,18.486831],[-88.300031,18.499982],[-88.296336,18.353273],[-88.106813,18.348674],[-88.123479,18.076675],[-88.285355,17.644143],[-88.197867,17.489475],[-88.302641,17.131694],[-88.239518,17.036066],[-88.355428,16.530774],[-88.551825,16.265467],[-88.732434,16.233635],[-88.930613,15.887273],[-89.229122,15.886938],[-89.150806,17.015577],[-89.14308,17.808319]]]}}, +{"type":"Feature","id":"BMU","properties":{"name":"Bermuda"},"geometry":{"type":"Polygon","coordinates":[[[-64.7799734332998,32.3072000581802],[-64.7873319183061,32.3039237143428],[-64.7946942710173,32.3032682700388],[-64.8094297981283,32.3098175728414],[-64.8167896352437,32.3058845718466],[-64.8101968029642,32.3022833180511],[-64.7962291465484,32.2934409732427],[-64.7815086336978,32.2868973114514],[-64.7997025513437,32.2796896417328],[-64.8066707691087,32.2747767569465],[-64.8225587873683,32.2669111289395],[-64.8287548840306,32.2669075473817],[-64.8306732143498,32.2583944840235],[-64.8399924854972,32.254782282336],[-64.8566090462354,32.2547740387514],[-64.8682296789446,32.2616393614322],[-64.8628241459563,32.2724481933959],[-64.8748651338951,32.2757120264753],[-64.8717752856644,32.2819371582026],[-64.8671422127295,32.2930760547989],[-64.8559068764437,32.2960321186471],[-64.8597429072279,32.3015842021933],[-64.8439233486717,32.3140553852543],[-64.8350242329311,32.3242161760006],[-64.8338690593672,32.3294587561557],[-64.8520298651164,32.3110911879954],[-64.8635922932573,32.3048469433363],[-64.8686668994079,32.30910745083],[-64.8721354593415,32.3041908606301],[-64.8779667328485,32.3038632800462],[-64.8780046844321,32.2907757831692],[-64.8849776658292,32.2819261366004],[-64.8783230004629,32.2613001418681],[-64.863194968877,32.2465799485801],[-64.8519819555722,32.2485519134663],[-64.842311980074,32.2492123317296],[-64.8388242605209,32.2475773472534],[-64.8334002575532,32.2462714714698],[-64.8256389530584,32.2472637398594],[-64.8205697556026,32.2531698880328],[-64.8105087275579,32.2561208974156],[-64.7900177727338,32.2659446936992],[-64.7745415970416,32.2718413023427],[-64.7644742436426,32.2855931353214],[-64.7551803442276,32.2908326702531],[-64.7423982971436,32.2996734994024],[-64.7206991797682,32.3137542201258],[-64.7117851247134,32.3176823360806],[-64.6962778813133,32.3275029115532],[-64.6768921127452,32.3324095397555],[-64.6567136927777,32.3451776458469],[-64.6532168823499,32.3494356627941],[-64.6605720384429,32.3589423487763],[-64.65125819471,32.3615600906466],[-64.6462011670816,32.36975169749],[-64.6613227512832,32.3763135008721],[-64.6690666074397,32.388444543924],[-64.6834270548595,32.3854968316788],[-64.6954617672714,32.3763221285869],[-64.70438689565,32.3704254760469],[-64.7117569982798,32.368132600249],[-64.7061764744404,32.3600110593559],[-64.700531552697,32.3590601356818],[-64.6940348033967,32.3640708659835],[-64.6895164826082,32.3633598579866],[-64.6864150099255,32.3547797587266],[-64.6824635995504,32.3540628176846],[-64.6835876652835,32.3626447677968],[-64.6801998697415,32.3631199096979],[-64.6672170444687,32.3597751617473],[-64.6598811264978,32.3497625771755],[-64.6737331235384,32.3390281851635],[-64.6887090648183,32.3342439408053],[-64.706732854446,32.3429010723036],[-64.7149301576112,32.3552188753513],[-64.7185967666669,32.3552239212394],[-64.7214189847314,32.3518830231342],[-64.7270616067222,32.3466461715475],[-64.734962460882,32.3442819830499],[-64.7383521549094,32.3407216514918],[-64.7411729976333,32.3311790864627],[-64.7423019216485,32.323311561213],[-64.7462482354281,32.318538611581],[-64.7566773739613,32.3130509130175],[-64.768738200563,32.3088369816572],[-64.7799734332998,32.3072000581802]]]}}, +{"type":"Feature","id":"BOL","properties":{"name":"Bolivia"},"geometry":{"type":"Polygon","coordinates":[[[-62.846468,-22.034985],[-63.986838,-21.993644],[-64.377021,-22.798091],[-64.964892,-22.075862],[-66.273339,-21.83231],[-67.106674,-22.735925],[-67.82818,-22.872919],[-68.219913,-21.494347],[-68.757167,-20.372658],[-68.442225,-19.405068],[-68.966818,-18.981683],[-69.100247,-18.260125],[-69.590424,-17.580012],[-68.959635,-16.500698],[-69.389764,-15.660129],[-69.160347,-15.323974],[-69.339535,-14.953195],[-68.948887,-14.453639],[-68.929224,-13.602684],[-68.88008,-12.899729],[-68.66508,-12.5613],[-69.529678,-10.951734],[-68.786158,-11.03638],[-68.271254,-11.014521],[-68.048192,-10.712059],[-67.173801,-10.306812],[-66.646908,-9.931331],[-65.338435,-9.761988],[-65.444837,-10.511451],[-65.321899,-10.895872],[-65.402281,-11.56627],[-64.316353,-12.461978],[-63.196499,-12.627033],[-62.80306,-13.000653],[-62.127081,-13.198781],[-61.713204,-13.489202],[-61.084121,-13.479384],[-60.503304,-13.775955],[-60.459198,-14.354007],[-60.264326,-14.645979],[-60.251149,-15.077219],[-60.542966,-15.09391],[-60.15839,-16.258284],[-58.24122,-16.299573],[-58.388058,-16.877109],[-58.280804,-17.27171],[-57.734558,-17.552468],[-57.498371,-18.174188],[-57.676009,-18.96184],[-57.949997,-19.400004],[-57.853802,-19.969995],[-58.166392,-20.176701],[-58.183471,-19.868399],[-59.115042,-19.356906],[-60.043565,-19.342747],[-61.786326,-19.633737],[-62.265961,-20.513735],[-62.291179,-21.051635],[-62.685057,-22.249029],[-62.846468,-22.034985]]]}}, +{"type":"Feature","id":"BRA","properties":{"name":"Brazil"},"geometry":{"type":"Polygon","coordinates":[[[-57.625133,-30.216295],[-56.2909,-28.852761],[-55.162286,-27.881915],[-54.490725,-27.474757],[-53.648735,-26.923473],[-53.628349,-26.124865],[-54.13005,-25.547639],[-54.625291,-25.739255],[-54.428946,-25.162185],[-54.293476,-24.5708],[-54.29296,-24.021014],[-54.652834,-23.839578],[-55.027902,-24.001274],[-55.400747,-23.956935],[-55.517639,-23.571998],[-55.610683,-22.655619],[-55.797958,-22.35693],[-56.473317,-22.0863],[-56.88151,-22.282154],[-57.937156,-22.090176],[-57.870674,-20.732688],[-58.166392,-20.176701],[-57.853802,-19.969995],[-57.949997,-19.400004],[-57.676009,-18.96184],[-57.498371,-18.174188],[-57.734558,-17.552468],[-58.280804,-17.27171],[-58.388058,-16.877109],[-58.24122,-16.299573],[-60.15839,-16.258284],[-60.542966,-15.09391],[-60.251149,-15.077219],[-60.264326,-14.645979],[-60.459198,-14.354007],[-60.503304,-13.775955],[-61.084121,-13.479384],[-61.713204,-13.489202],[-62.127081,-13.198781],[-62.80306,-13.000653],[-63.196499,-12.627033],[-64.316353,-12.461978],[-65.402281,-11.56627],[-65.321899,-10.895872],[-65.444837,-10.511451],[-65.338435,-9.761988],[-66.646908,-9.931331],[-67.173801,-10.306812],[-68.048192,-10.712059],[-68.271254,-11.014521],[-68.786158,-11.03638],[-69.529678,-10.951734],[-70.093752,-11.123972],[-70.548686,-11.009147],[-70.481894,-9.490118],[-71.302412,-10.079436],[-72.184891,-10.053598],[-72.563033,-9.520194],[-73.226713,-9.462213],[-73.015383,-9.032833],[-73.571059,-8.424447],[-73.987235,-7.52383],[-73.723401,-7.340999],[-73.724487,-6.918595],[-73.120027,-6.629931],[-73.219711,-6.089189],[-72.964507,-5.741251],[-72.891928,-5.274561],[-71.748406,-4.593983],[-70.928843,-4.401591],[-70.794769,-4.251265],[-69.893635,-4.298187],[-69.444102,-1.556287],[-69.420486,-1.122619],[-69.577065,-0.549992],[-70.020656,-0.185156],[-70.015566,0.541414],[-69.452396,0.706159],[-69.252434,0.602651],[-69.218638,0.985677],[-69.804597,1.089081],[-69.816973,1.714805],[-67.868565,1.692455],[-67.53781,2.037163],[-67.259998,1.719999],[-67.065048,1.130112],[-66.876326,1.253361],[-66.325765,0.724452],[-65.548267,0.789254],[-65.354713,1.095282],[-64.611012,1.328731],[-64.199306,1.492855],[-64.083085,1.916369],[-63.368788,2.2009],[-63.422867,2.411068],[-64.269999,2.497006],[-64.408828,3.126786],[-64.368494,3.79721],[-64.816064,4.056445],[-64.628659,4.148481],[-63.888343,4.02053],[-63.093198,3.770571],[-62.804533,4.006965],[-62.08543,4.162124],[-60.966893,4.536468],[-60.601179,4.918098],[-60.733574,5.200277],[-60.213683,5.244486],[-59.980959,5.014061],[-60.111002,4.574967],[-59.767406,4.423503],[-59.53804,3.958803],[-59.815413,3.606499],[-59.974525,2.755233],[-59.718546,2.24963],[-59.646044,1.786894],[-59.030862,1.317698],[-58.540013,1.268088],[-58.429477,1.463942],[-58.11345,1.507195],[-57.660971,1.682585],[-57.335823,1.948538],[-56.782704,1.863711],[-56.539386,1.899523],[-55.995698,1.817667],[-55.9056,2.021996],[-56.073342,2.220795],[-55.973322,2.510364],[-55.569755,2.421506],[-55.097587,2.523748],[-54.524754,2.311849],[-54.088063,2.105557],[-53.778521,2.376703],[-53.554839,2.334897],[-53.418465,2.053389],[-52.939657,2.124858],[-52.556425,2.504705],[-52.249338,3.241094],[-51.657797,4.156232],[-51.317146,4.203491],[-51.069771,3.650398],[-50.508875,1.901564],[-49.974076,1.736483],[-49.947101,1.04619],[-50.699251,0.222984],[-50.388211,-0.078445],[-48.620567,-0.235489],[-48.584497,-1.237805],[-47.824956,-0.581618],[-46.566584,-0.941028],[-44.905703,-1.55174],[-44.417619,-2.13775],[-44.581589,-2.691308],[-43.418791,-2.38311],[-41.472657,-2.912018],[-39.978665,-2.873054],[-38.500383,-3.700652],[-37.223252,-4.820946],[-36.452937,-5.109404],[-35.597796,-5.149504],[-35.235389,-5.464937],[-34.89603,-6.738193],[-34.729993,-7.343221],[-35.128212,-8.996401],[-35.636967,-9.649282],[-37.046519,-11.040721],[-37.683612,-12.171195],[-38.423877,-13.038119],[-38.673887,-13.057652],[-38.953276,-13.79337],[-38.882298,-15.667054],[-39.161092,-17.208407],[-39.267339,-17.867746],[-39.583521,-18.262296],[-39.760823,-19.599113],[-40.774741,-20.904512],[-40.944756,-21.937317],[-41.754164,-22.370676],[-41.988284,-22.97007],[-43.074704,-22.967693],[-44.647812,-23.351959],[-45.352136,-23.796842],[-46.472093,-24.088969],[-47.648972,-24.885199],[-48.495458,-25.877025],[-48.641005,-26.623698],[-48.474736,-27.175912],[-48.66152,-28.186135],[-48.888457,-28.674115],[-49.587329,-29.224469],[-50.696874,-30.984465],[-51.576226,-31.777698],[-52.256081,-32.24537],[-52.7121,-33.196578],[-53.373662,-33.768378],[-53.650544,-33.202004],[-53.209589,-32.727666],[-53.787952,-32.047243],[-54.572452,-31.494511],[-55.60151,-30.853879],[-55.973245,-30.883076],[-56.976026,-30.109686],[-57.625133,-30.216295]]]}}, +{"type":"Feature","id":"BRN","properties":{"name":"Brunei"},"geometry":{"type":"Polygon","coordinates":[[[114.204017,4.525874],[114.599961,4.900011],[115.45071,5.44773],[115.4057,4.955228],[115.347461,4.316636],[114.869557,4.348314],[114.659596,4.007637],[114.204017,4.525874]]]}}, +{"type":"Feature","id":"BTN","properties":{"name":"Bhutan"},"geometry":{"type":"Polygon","coordinates":[[[91.696657,27.771742],[92.103712,27.452614],[92.033484,26.83831],[91.217513,26.808648],[90.373275,26.875724],[89.744528,26.719403],[88.835643,27.098966],[88.814248,27.299316],[89.47581,28.042759],[90.015829,28.296439],[90.730514,28.064954],[91.258854,28.040614],[91.696657,27.771742]]]}}, +{"type":"Feature","id":"BWA","properties":{"name":"Botswana"},"geometry":{"type":"Polygon","coordinates":[[[25.649163,-18.536026],[25.850391,-18.714413],[26.164791,-19.293086],[27.296505,-20.39152],[27.724747,-20.499059],[27.727228,-20.851802],[28.02137,-21.485975],[28.794656,-21.639454],[29.432188,-22.091313],[28.017236,-22.827754],[27.11941,-23.574323],[26.786407,-24.240691],[26.485753,-24.616327],[25.941652,-24.696373],[25.765849,-25.174845],[25.664666,-25.486816],[25.025171,-25.71967],[24.211267,-25.670216],[23.73357,-25.390129],[23.312097,-25.26869],[22.824271,-25.500459],[22.579532,-25.979448],[22.105969,-26.280256],[21.605896,-26.726534],[20.889609,-26.828543],[20.66647,-26.477453],[20.758609,-25.868136],[20.165726,-24.917962],[19.895768,-24.76779],[19.895458,-21.849157],[20.881134,-21.814327],[20.910641,-18.252219],[21.65504,-18.219146],[23.196858,-17.869038],[23.579006,-18.281261],[24.217365,-17.889347],[24.520705,-17.887125],[25.084443,-17.661816],[25.264226,-17.73654],[25.649163,-18.536026]]]}}, +{"type":"Feature","id":"CAF","properties":{"name":"Central African Republic"},"geometry":{"type":"Polygon","coordinates":[[[15.27946,7.421925],[16.106232,7.497088],[16.290562,7.754307],[16.456185,7.734774],[16.705988,7.508328],[17.96493,7.890914],[18.389555,8.281304],[18.911022,8.630895],[18.81201,8.982915],[19.094008,9.074847],[20.059685,9.012706],[21.000868,9.475985],[21.723822,10.567056],[22.231129,10.971889],[22.864165,11.142395],[22.977544,10.714463],[23.554304,10.089255],[23.55725,9.681218],[23.394779,9.265068],[23.459013,8.954286],[23.805813,8.666319],[24.567369,8.229188],[25.114932,7.825104],[25.124131,7.500085],[25.796648,6.979316],[26.213418,6.546603],[26.465909,5.946717],[27.213409,5.550953],[27.374226,5.233944],[27.044065,5.127853],[26.402761,5.150875],[25.650455,5.256088],[25.278798,5.170408],[25.128833,4.927245],[24.805029,4.897247],[24.410531,5.108784],[23.297214,4.609693],[22.84148,4.710126],[22.704124,4.633051],[22.405124,4.02916],[21.659123,4.224342],[20.927591,4.322786],[20.290679,4.691678],[19.467784,5.031528],[18.932312,4.709506],[18.542982,4.201785],[18.453065,3.504386],[17.8099,3.560196],[17.133042,3.728197],[16.537058,3.198255],[16.012852,2.26764],[15.907381,2.557389],[15.862732,3.013537],[15.405396,3.335301],[15.03622,3.851367],[14.950953,4.210389],[14.478372,4.732605],[14.558936,5.030598],[14.459407,5.451761],[14.53656,6.226959],[14.776545,6.408498],[15.27946,7.421925]]]}}, +{"type":"Feature","id":"CAN","properties":{"name":"Canada"},"geometry":{"type":"MultiPolygon","coordinates":[[[[-63.6645,46.55001],[-62.9393,46.41587],[-62.01208,46.44314],[-62.50391,46.03339],[-62.87433,45.96818],[-64.1428,46.39265],[-64.39261,46.72747],[-64.01486,47.03601],[-63.6645,46.55001]]],[[[-61.806305,49.10506],[-62.29318,49.08717],[-63.58926,49.40069],[-64.51912,49.87304],[-64.17322,49.95718],[-62.85829,49.70641],[-61.835585,49.28855],[-61.806305,49.10506]]],[[[-123.510002,48.510011],[-124.012891,48.370846],[-125.655013,48.825005],[-125.954994,49.179996],[-126.850004,49.53],[-127.029993,49.814996],[-128.059336,49.994959],[-128.444584,50.539138],[-128.358414,50.770648],[-127.308581,50.552574],[-126.695001,50.400903],[-125.755007,50.295018],[-125.415002,49.950001],[-124.920768,49.475275],[-123.922509,49.062484],[-123.510002,48.510011]]],[[[-56.134036,50.68701],[-56.795882,49.812309],[-56.143105,50.150117],[-55.471492,49.935815],[-55.822401,49.587129],[-54.935143,49.313011],[-54.473775,49.556691],[-53.476549,49.249139],[-53.786014,48.516781],[-53.086134,48.687804],[-52.958648,48.157164],[-52.648099,47.535548],[-53.069158,46.655499],[-53.521456,46.618292],[-54.178936,46.807066],[-53.961869,47.625207],[-54.240482,47.752279],[-55.400773,46.884994],[-55.997481,46.91972],[-55.291219,47.389562],[-56.250799,47.632545],[-57.325229,47.572807],[-59.266015,47.603348],[-59.419494,47.899454],[-58.796586,48.251525],[-59.231625,48.523188],[-58.391805,49.125581],[-57.35869,50.718274],[-56.73865,51.287438],[-55.870977,51.632094],[-55.406974,51.588273],[-55.600218,51.317075],[-56.134036,50.68701]]],[[[-132.710008,54.040009],[-132.710009,54.040009],[-132.710008,54.040009],[-132.710008,54.040009],[-131.74999,54.120004],[-132.04948,52.984621],[-131.179043,52.180433],[-131.57783,52.182371],[-132.180428,52.639707],[-132.549992,53.100015],[-133.054611,53.411469],[-133.239664,53.85108],[-133.180004,54.169975],[-132.710008,54.040009]]],[[[-79.26582,62.158675],[-79.65752,61.63308],[-80.09956,61.7181],[-80.36215,62.01649],[-80.315395,62.085565],[-79.92939,62.3856],[-79.52002,62.36371],[-79.26582,62.158675]]],[[[-81.89825,62.7108],[-83.06857,62.15922],[-83.77462,62.18231],[-83.99367,62.4528],[-83.25048,62.91409],[-81.87699,62.90458],[-81.89825,62.7108]]],[[[-85.161308,65.657285],[-84.975764,65.217518],[-84.464012,65.371772],[-83.882626,65.109618],[-82.787577,64.766693],[-81.642014,64.455136],[-81.55344,63.979609],[-80.817361,64.057486],[-80.103451,63.725981],[-80.99102,63.411246],[-82.547178,63.651722],[-83.108798,64.101876],[-84.100417,63.569712],[-85.523405,63.052379],[-85.866769,63.637253],[-87.221983,63.541238],[-86.35276,64.035833],[-86.224886,64.822917],[-85.883848,65.738778],[-85.161308,65.657285]]],[[[-75.86588,67.14886],[-76.98687,67.09873],[-77.2364,67.58809],[-76.81166,68.14856],[-75.89521,68.28721],[-75.1145,68.01036],[-75.10333,67.58202],[-75.21597,67.44425],[-75.86588,67.14886]]],[[[-95.647681,69.10769],[-96.269521,68.75704],[-97.617401,69.06003],[-98.431801,68.9507],[-99.797401,69.40003],[-98.917401,69.71003],[-98.218261,70.14354],[-97.157401,69.86003],[-96.557401,69.68003],[-96.257401,69.49003],[-95.647681,69.10769]]],[[[-90.5471,69.49766],[-90.55151,68.47499],[-89.21515,69.25873],[-88.01966,68.61508],[-88.31749,67.87338],[-87.35017,67.19872],[-86.30607,67.92146],[-85.57664,68.78456],[-85.52197,69.88211],[-84.10081,69.80539],[-82.62258,69.65826],[-81.28043,69.16202],[-81.2202,68.66567],[-81.96436,68.13253],[-81.25928,67.59716],[-81.38653,67.11078],[-83.34456,66.41154],[-84.73542,66.2573],[-85.76943,66.55833],[-86.0676,66.05625],[-87.03143,65.21297],[-87.32324,64.77563],[-88.48296,64.09897],[-89.91444,64.03273],[-90.70398,63.61017],[-90.77004,62.96021],[-91.93342,62.83508],[-93.15698,62.02469],[-94.24153,60.89865],[-94.62931,60.11021],[-94.6846,58.94882],[-93.21502,58.78212],[-92.76462,57.84571],[-92.29703,57.08709],[-90.89769,57.28468],[-89.03953,56.85172],[-88.03978,56.47162],[-87.32421,55.99914],[-86.07121,55.72383],[-85.01181,55.3026],[-83.36055,55.24489],[-82.27285,55.14832],[-82.4362,54.28227],[-82.12502,53.27703],[-81.40075,52.15788],[-79.91289,51.20842],[-79.14301,51.53393],[-78.60191,52.56208],[-79.12421,54.14145],[-79.82958,54.66772],[-78.22874,55.13645],[-77.0956,55.83741],[-76.54137,56.53423],[-76.62319,57.20263],[-77.30226,58.05209],[-78.51688,58.80458],[-77.33676,59.85261],[-77.77272,60.75788],[-78.10687,62.31964],[-77.41067,62.55053],[-75.69621,62.2784],[-74.6682,62.18111],[-73.83988,62.4438],[-72.90853,62.10507],[-71.67708,61.52535],[-71.37369,61.13717],[-69.59042,61.06141],[-69.62033,60.22125],[-69.2879,58.95736],[-68.37455,58.80106],[-67.64976,58.21206],[-66.20178,58.76731],[-65.24517,59.87071],[-64.58352,60.33558],[-63.80475,59.4426],[-62.50236,58.16708],[-61.39655,56.96745],[-61.79866,56.33945],[-60.46853,55.77548],[-59.56962,55.20407],[-57.97508,54.94549],[-57.3332,54.6265],[-56.93689,53.78032],[-56.15811,53.64749],[-55.75632,53.27036],[-55.68338,52.14664],[-56.40916,51.7707],[-57.12691,51.41972],[-58.77482,51.0643],[-60.03309,50.24277],[-61.72366,50.08046],[-63.86251,50.29099],[-65.36331,50.2982],[-66.39905,50.22897],[-67.23631,49.51156],[-68.51114,49.06836],[-69.95362,47.74488],[-71.10458,46.82171],[-70.25522,46.98606],[-68.65,48.3],[-66.55243,49.1331],[-65.05626,49.23278],[-64.17099,48.74248],[-65.11545,48.07085],[-64.79854,46.99297],[-64.47219,46.23849],[-63.17329,45.73902],[-61.52072,45.88377],[-60.51815,47.00793],[-60.4486,46.28264],[-59.80287,45.9204],[-61.03988,45.26525],[-63.25471,44.67014],[-64.24656,44.26553],[-65.36406,43.54523],[-66.1234,43.61867],[-66.16173,44.46512],[-64.42549,45.29204],[-66.02605,45.25931],[-67.13741,45.13753],[-67.79134,45.70281],[-67.79046,47.06636],[-68.23444,47.35486],[-68.905,47.185],[-69.237216,47.447781],[-69.99997,46.69307],[-70.305,45.915],[-70.66,45.46],[-71.08482,45.30524],[-71.405,45.255],[-71.50506,45.0082],[-73.34783,45.00738],[-74.867,45.00048],[-75.31821,44.81645],[-76.375,44.09631],[-76.5,44.018459],[-76.820034,43.628784],[-77.737885,43.629056],[-78.72028,43.625089],[-79.171674,43.466339],[-79.01,43.27],[-78.92,42.965],[-78.939362,42.863611],[-80.247448,42.3662],[-81.277747,42.209026],[-82.439278,41.675105],[-82.690089,41.675105],[-83.02981,41.832796],[-83.142,41.975681],[-83.12,42.08],[-82.9,42.43],[-82.43,42.98],[-82.137642,43.571088],[-82.337763,44.44],[-82.550925,45.347517],[-83.592851,45.816894],[-83.469551,45.994686],[-83.616131,46.116927],[-83.890765,46.116927],[-84.091851,46.275419],[-84.14212,46.512226],[-84.3367,46.40877],[-84.6049,46.4396],[-84.543749,46.538684],[-84.779238,46.637102],[-84.87608,46.900083],[-85.652363,47.220219],[-86.461991,47.553338],[-87.439793,47.94],[-88.378114,48.302918],[-89.272917,48.019808],[-89.6,48.01],[-90.83,48.27],[-91.64,48.14],[-92.61,48.45],[-93.63087,48.60926],[-94.32914,48.67074],[-94.64,48.84],[-94.81758,49.38905],[-95.15609,49.38425],[-95.15907,49],[-97.22872,49.0007],[-100.65,49],[-104.04826,48.99986],[-107.05,49],[-110.05,49],[-113,49],[-116.04818,49],[-117.03121,49],[-120,49],[-122.84,49],[-122.97421,49.002538],[-124.91024,49.98456],[-125.62461,50.41656],[-127.43561,50.83061],[-127.99276,51.71583],[-127.85032,52.32961],[-129.12979,52.75538],[-129.30523,53.56159],[-130.51497,54.28757],[-130.53611,54.80278],[-129.98,55.285],[-130.00778,55.91583],[-131.70781,56.55212],[-132.73042,57.69289],[-133.35556,58.41028],[-134.27111,58.86111],[-134.945,59.27056],[-135.47583,59.78778],[-136.47972,59.46389],[-137.4525,58.905],[-138.34089,59.56211],[-139.039,60],[-140.013,60.27682],[-140.99778,60.30639],[-140.9925,66.00003],[-140.986,69.712],[-139.12052,69.47102],[-137.54636,68.99002],[-136.50358,68.89804],[-135.62576,69.31512],[-134.41464,69.62743],[-132.92925,69.50534],[-131.43136,69.94451],[-129.79471,70.19369],[-129.10773,69.77927],[-128.36156,70.01286],[-128.13817,70.48384],[-127.44712,70.37721],[-125.75632,69.48058],[-124.42483,70.1584],[-124.28968,69.39969],[-123.06108,69.56372],[-122.6835,69.85553],[-121.47226,69.79778],[-119.94288,69.37786],[-117.60268,69.01128],[-116.22643,68.84151],[-115.2469,68.90591],[-113.89794,68.3989],[-115.30489,67.90261],[-113.49727,67.68815],[-110.798,67.80612],[-109.94619,67.98104],[-108.8802,67.38144],[-107.79239,67.88736],[-108.81299,68.31164],[-108.16721,68.65392],[-106.95,68.7],[-106.15,68.8],[-105.34282,68.56122],[-104.33791,68.018],[-103.22115,68.09775],[-101.45433,67.64689],[-99.90195,67.80566],[-98.4432,67.78165],[-98.5586,68.40394],[-97.66948,68.57864],[-96.11991,68.23939],[-96.12588,67.29338],[-95.48943,68.0907],[-94.685,68.06383],[-94.23282,69.06903],[-95.30408,69.68571],[-96.47131,70.08976],[-96.39115,71.19482],[-95.2088,71.92053],[-93.88997,71.76015],[-92.87818,71.31869],[-91.51964,70.19129],[-92.40692,69.69997],[-90.5471,69.49766]]],[[[-114.16717,73.12145],[-114.66634,72.65277],[-112.44102,72.9554],[-111.05039,72.4504],[-109.92035,72.96113],[-109.00654,72.63335],[-108.18835,71.65089],[-107.68599,72.06548],[-108.39639,73.08953],[-107.51645,73.23598],[-106.52259,73.07601],[-105.40246,72.67259],[-104.77484,71.6984],[-104.46476,70.99297],[-102.78537,70.49776],[-100.98078,70.02432],[-101.08929,69.58447],[-102.73116,69.50402],[-102.09329,69.11962],[-102.43024,68.75282],[-104.24,68.91],[-105.96,69.18],[-107.12254,69.11922],[-109,68.78],[-111.534149,68.630059],[-113.3132,68.53554],[-113.85496,69.00744],[-115.22,69.28],[-116.10794,69.16821],[-117.34,69.96],[-116.67473,70.06655],[-115.13112,70.2373],[-113.72141,70.19237],[-112.4161,70.36638],[-114.35,70.6],[-116.48684,70.52045],[-117.9048,70.54056],[-118.43238,70.9092],[-116.11311,71.30918],[-117.65568,71.2952],[-119.40199,71.55859],[-118.56267,72.30785],[-117.86642,72.70594],[-115.18909,73.31459],[-114.16717,73.12145]]],[[[-104.5,73.42],[-105.38,72.76],[-106.94,73.46],[-106.6,73.6],[-105.26,73.64],[-104.5,73.42]]],[[[-76.34,73.102685],[-76.251404,72.826385],[-77.314438,72.855545],[-78.39167,72.876656],[-79.486252,72.742203],[-79.775833,72.802902],[-80.876099,73.333183],[-80.833885,73.693184],[-80.353058,73.75972],[-78.064438,73.651932],[-76.34,73.102685]]],[[[-86.562179,73.157447],[-85.774371,72.534126],[-84.850112,73.340278],[-82.31559,73.750951],[-80.600088,72.716544],[-80.748942,72.061907],[-78.770639,72.352173],[-77.824624,72.749617],[-75.605845,72.243678],[-74.228616,71.767144],[-74.099141,71.33084],[-72.242226,71.556925],[-71.200015,70.920013],[-68.786054,70.525024],[-67.91497,70.121948],[-66.969033,69.186087],[-68.805123,68.720198],[-66.449866,68.067163],[-64.862314,67.847539],[-63.424934,66.928473],[-61.851981,66.862121],[-62.163177,66.160251],[-63.918444,64.998669],[-65.14886,65.426033],[-66.721219,66.388041],[-68.015016,66.262726],[-68.141287,65.689789],[-67.089646,65.108455],[-65.73208,64.648406],[-65.320168,64.382737],[-64.669406,63.392927],[-65.013804,62.674185],[-66.275045,62.945099],[-68.783186,63.74567],[-67.369681,62.883966],[-66.328297,62.280075],[-66.165568,61.930897],[-68.877367,62.330149],[-71.023437,62.910708],[-72.235379,63.397836],[-71.886278,63.679989],[-73.378306,64.193963],[-74.834419,64.679076],[-74.818503,64.389093],[-77.70998,64.229542],[-78.555949,64.572906],[-77.897281,65.309192],[-76.018274,65.326969],[-73.959795,65.454765],[-74.293883,65.811771],[-73.944912,66.310578],[-72.651167,67.284576],[-72.92606,67.726926],[-73.311618,68.069437],[-74.843307,68.554627],[-76.869101,68.894736],[-76.228649,69.147769],[-77.28737,69.76954],[-78.168634,69.826488],[-78.957242,70.16688],[-79.492455,69.871808],[-81.305471,69.743185],[-84.944706,69.966634],[-87.060003,70.260001],[-88.681713,70.410741],[-89.51342,70.762038],[-88.467721,71.218186],[-89.888151,71.222552],[-90.20516,72.235074],[-89.436577,73.129464],[-88.408242,73.537889],[-85.826151,73.803816],[-86.562179,73.157447]]],[[[-100.35642,73.84389],[-99.16387,73.63339],[-97.38,73.76],[-97.12,73.47],[-98.05359,72.99052],[-96.54,72.56],[-96.72,71.66],[-98.35966,71.27285],[-99.32286,71.35639],[-100.01482,71.73827],[-102.5,72.51],[-102.48,72.83],[-100.43836,72.70588],[-101.54,73.36],[-100.35642,73.84389]]],[[[-93.196296,72.771992],[-94.269047,72.024596],[-95.409856,72.061881],[-96.033745,72.940277],[-96.018268,73.43743],[-95.495793,73.862417],[-94.503658,74.134907],[-92.420012,74.100025],[-90.509793,73.856732],[-92.003965,72.966244],[-93.196296,72.771992]]],[[[-120.46,71.383602],[-123.09219,70.90164],[-123.62,71.34],[-125.928949,71.868688],[-125.5,72.292261],[-124.80729,73.02256],[-123.94,73.68],[-124.91775,74.29275],[-121.53788,74.44893],[-120.10978,74.24135],[-117.55564,74.18577],[-116.58442,73.89607],[-115.51081,73.47519],[-116.76794,73.22292],[-119.22,72.52],[-120.46,71.82],[-120.46,71.383602]]],[[[-93.612756,74.979997],[-94.156909,74.592347],[-95.608681,74.666864],[-96.820932,74.927623],[-96.288587,75.377828],[-94.85082,75.647218],[-93.977747,75.29649],[-93.612756,74.979997]]],[[[-98.5,76.72],[-97.735585,76.25656],[-97.704415,75.74344],[-98.16,75],[-99.80874,74.89744],[-100.88366,75.05736],[-100.86292,75.64075],[-102.50209,75.5638],[-102.56552,76.3366],[-101.48973,76.30537],[-99.98349,76.64634],[-98.57699,76.58859],[-98.5,76.72]]],[[[-108.21141,76.20168],[-107.81943,75.84552],[-106.92893,76.01282],[-105.881,75.9694],[-105.70498,75.47951],[-106.31347,75.00527],[-109.7,74.85],[-112.22307,74.41696],[-113.74381,74.39427],[-113.87135,74.72029],[-111.79421,75.1625],[-116.31221,75.04343],[-117.7104,75.2222],[-116.34602,76.19903],[-115.40487,76.47887],[-112.59056,76.14134],[-110.81422,75.54919],[-109.0671,75.47321],[-110.49726,76.42982],[-109.5811,76.79417],[-108.54859,76.67832],[-108.21141,76.20168]]],[[[-94.684086,77.097878],[-93.573921,76.776296],[-91.605023,76.778518],[-90.741846,76.449597],[-90.969661,76.074013],[-89.822238,75.847774],[-89.187083,75.610166],[-87.838276,75.566189],[-86.379192,75.482421],[-84.789625,75.699204],[-82.753445,75.784315],[-81.128531,75.713983],[-80.057511,75.336849],[-79.833933,74.923127],[-80.457771,74.657304],[-81.948843,74.442459],[-83.228894,74.564028],[-86.097452,74.410032],[-88.15035,74.392307],[-89.764722,74.515555],[-92.422441,74.837758],[-92.768285,75.38682],[-92.889906,75.882655],[-93.893824,76.319244],[-95.962457,76.441381],[-97.121379,76.751078],[-96.745123,77.161389],[-94.684086,77.097878]]],[[[-116.198587,77.645287],[-116.335813,76.876962],[-117.106051,76.530032],[-118.040412,76.481172],[-119.899318,76.053213],[-121.499995,75.900019],[-122.854924,76.116543],[-122.854925,76.116543],[-121.157535,76.864508],[-119.103939,77.51222],[-117.570131,77.498319],[-116.198587,77.645287]]],[[[-93.840003,77.519997],[-94.295608,77.491343],[-96.169654,77.555111],[-96.436304,77.834629],[-94.422577,77.820005],[-93.720656,77.634331],[-93.840003,77.519997]]],[[[-110.186938,77.697015],[-112.051191,77.409229],[-113.534279,77.732207],[-112.724587,78.05105],[-111.264443,78.152956],[-109.854452,77.996325],[-110.186938,77.697015]]],[[[-109.663146,78.601973],[-110.881314,78.40692],[-112.542091,78.407902],[-112.525891,78.550555],[-111.50001,78.849994],[-110.963661,78.804441],[-109.663146,78.601973]]],[[[-95.830295,78.056941],[-97.309843,77.850597],[-98.124289,78.082857],[-98.552868,78.458105],[-98.631984,78.87193],[-97.337231,78.831984],[-96.754399,78.765813],[-95.559278,78.418315],[-95.830295,78.056941]]],[[[-100.060192,78.324754],[-99.670939,77.907545],[-101.30394,78.018985],[-102.949809,78.343229],[-105.176133,78.380332],[-104.210429,78.67742],[-105.41958,78.918336],[-105.492289,79.301594],[-103.529282,79.165349],[-100.825158,78.800462],[-100.060192,78.324754]]],[[[-87.02,79.66],[-85.81435,79.3369],[-87.18756,79.0393],[-89.03535,78.28723],[-90.80436,78.21533],[-92.87669,78.34333],[-93.95116,78.75099],[-93.93574,79.11373],[-93.14524,79.3801],[-94.974,79.37248],[-96.07614,79.70502],[-96.70972,80.15777],[-96.01644,80.60233],[-95.32345,80.90729],[-94.29843,80.97727],[-94.73542,81.20646],[-92.40984,81.25739],[-91.13289,80.72345],[-89.45,80.509322],[-87.81,80.32],[-87.02,79.66]]],[[[-68.5,83.106322],[-65.82735,83.02801],[-63.68,82.9],[-61.85,82.6286],[-61.89388,82.36165],[-64.334,81.92775],[-66.75342,81.72527],[-67.65755,81.50141],[-65.48031,81.50657],[-67.84,80.9],[-69.4697,80.61683],[-71.18,79.8],[-73.2428,79.63415],[-73.88,79.430162],[-76.90773,79.32309],[-75.52924,79.19766],[-76.22046,79.01907],[-75.39345,78.52581],[-76.34354,78.18296],[-77.88851,77.89991],[-78.36269,77.50859],[-79.75951,77.20968],[-79.61965,76.98336],[-77.91089,77.022045],[-77.88911,76.777955],[-80.56125,76.17812],[-83.17439,76.45403],[-86.11184,76.29901],[-87.6,76.42],[-89.49068,76.47239],[-89.6161,76.95213],[-87.76739,77.17833],[-88.26,77.9],[-87.65,77.970222],[-84.97634,77.53873],[-86.34,78.18],[-87.96192,78.37181],[-87.15198,78.75867],[-85.37868,78.9969],[-85.09495,79.34543],[-86.50734,79.73624],[-86.93179,80.25145],[-84.19844,80.20836],[-83.408696,80.1],[-81.84823,80.46442],[-84.1,80.58],[-87.59895,80.51627],[-89.36663,80.85569],[-90.2,81.26],[-91.36786,81.5531],[-91.58702,81.89429],[-90.1,82.085],[-88.93227,82.11751],[-86.97024,82.27961],[-85.5,82.652273],[-84.260005,82.6],[-83.18,82.32],[-82.42,82.86],[-81.1,83.02],[-79.30664,83.13056],[-76.25,83.172059],[-75.71878,83.06404],[-72.83153,83.23324],[-70.665765,83.169781],[-68.5,83.106322]]]]}}, +{"type":"Feature","id":"CHE","properties":{"name":"Switzerland"},"geometry":{"type":"Polygon","coordinates":[[[9.594226,47.525058],[9.632932,47.347601],[9.47997,47.10281],[9.932448,46.920728],[10.442701,46.893546],[10.363378,46.483571],[9.922837,46.314899],[9.182882,46.440215],[8.966306,46.036932],[8.489952,46.005151],[8.31663,46.163642],[7.755992,45.82449],[7.273851,45.776948],[6.843593,45.991147],[6.5001,46.429673],[6.022609,46.27299],[6.037389,46.725779],[6.768714,47.287708],[6.736571,47.541801],[7.192202,47.449766],[7.466759,47.620582],[8.317301,47.61358],[8.522612,47.830828],[9.594226,47.525058]]]}}, +{"type":"Feature","id":"CHL","properties":{"name":"Chile"},"geometry":{"type":"MultiPolygon","coordinates":[[[[-68.63401,-52.63637],[-68.63335,-54.8695],[-67.56244,-54.87001],[-66.95992,-54.89681],[-67.29103,-55.30124],[-68.14863,-55.61183],[-68.639991,-55.580018],[-69.2321,-55.49906],[-69.95809,-55.19843],[-71.00568,-55.05383],[-72.2639,-54.49514],[-73.2852,-53.95752],[-74.66253,-52.83749],[-73.8381,-53.04743],[-72.43418,-53.7154],[-71.10773,-54.07433],[-70.59178,-53.61583],[-70.26748,-52.93123],[-69.34565,-52.5183],[-68.63401,-52.63637]]],[[[-68.219913,-21.494347],[-67.82818,-22.872919],[-67.106674,-22.735925],[-66.985234,-22.986349],[-67.328443,-24.025303],[-68.417653,-24.518555],[-68.386001,-26.185016],[-68.5948,-26.506909],[-68.295542,-26.89934],[-69.001235,-27.521214],[-69.65613,-28.459141],[-70.01355,-29.367923],[-69.919008,-30.336339],[-70.535069,-31.36501],[-70.074399,-33.09121],[-69.814777,-33.273886],[-69.817309,-34.193571],[-70.388049,-35.169688],[-70.364769,-36.005089],[-71.121881,-36.658124],[-71.118625,-37.576827],[-70.814664,-38.552995],[-71.413517,-38.916022],[-71.680761,-39.808164],[-71.915734,-40.832339],[-71.746804,-42.051386],[-72.148898,-42.254888],[-71.915424,-43.408565],[-71.464056,-43.787611],[-71.793623,-44.207172],[-71.329801,-44.407522],[-71.222779,-44.784243],[-71.659316,-44.973689],[-71.552009,-45.560733],[-71.917258,-46.884838],[-72.447355,-47.738533],[-72.331161,-48.244238],[-72.648247,-48.878618],[-73.415436,-49.318436],[-73.328051,-50.378785],[-72.975747,-50.74145],[-72.309974,-50.67701],[-72.329404,-51.425956],[-71.914804,-52.009022],[-69.498362,-52.142761],[-68.571545,-52.299444],[-69.461284,-52.291951],[-69.94278,-52.537931],[-70.845102,-52.899201],[-71.006332,-53.833252],[-71.429795,-53.856455],[-72.557943,-53.53141],[-73.702757,-52.835069],[-73.702757,-52.83507],[-74.946763,-52.262754],[-75.260026,-51.629355],[-74.976632,-51.043396],[-75.479754,-50.378372],[-75.608015,-48.673773],[-75.18277,-47.711919],[-74.126581,-46.939253],[-75.644395,-46.647643],[-74.692154,-45.763976],[-74.351709,-44.103044],[-73.240356,-44.454961],[-72.717804,-42.383356],[-73.3889,-42.117532],[-73.701336,-43.365776],[-74.331943,-43.224958],[-74.017957,-41.794813],[-73.677099,-39.942213],[-73.217593,-39.258689],[-73.505559,-38.282883],[-73.588061,-37.156285],[-73.166717,-37.12378],[-72.553137,-35.50884],[-71.861732,-33.909093],[-71.43845,-32.418899],[-71.668721,-30.920645],[-71.370083,-30.095682],[-71.489894,-28.861442],[-70.905124,-27.64038],[-70.724954,-25.705924],[-70.403966,-23.628997],[-70.091246,-21.393319],[-70.16442,-19.756468],[-70.372572,-18.347975],[-69.858444,-18.092694],[-69.590424,-17.580012],[-69.100247,-18.260125],[-68.966818,-18.981683],[-68.442225,-19.405068],[-68.757167,-20.372658],[-68.219913,-21.494347]]]]}}, +{"type":"Feature","id":"CHN","properties":{"name":"China"},"geometry":{"type":"MultiPolygon","coordinates":[[[[110.339188,18.678395],[109.47521,18.197701],[108.655208,18.507682],[108.626217,19.367888],[109.119056,19.821039],[110.211599,20.101254],[110.786551,20.077534],[111.010051,19.69593],[110.570647,19.255879],[110.339188,18.678395]]],[[[127.657407,49.76027],[129.397818,49.4406],[130.582293,48.729687],[130.987282,47.790132],[132.506672,47.78897],[133.373596,48.183442],[135.026311,48.47823],[134.500814,47.57844],[134.112362,47.212467],[133.769644,46.116927],[133.097127,45.144066],[131.883454,45.321162],[131.025212,44.967953],[131.288555,44.11152],[131.144688,42.92999],[130.633866,42.903015],[130.640016,42.395009],[129.994267,42.985387],[129.596669,42.424982],[128.052215,41.994285],[128.208433,41.466772],[127.343783,41.503152],[126.869083,41.816569],[126.182045,41.107336],[125.079942,40.569824],[124.265625,39.928493],[122.86757,39.637788],[122.131388,39.170452],[121.054554,38.897471],[121.585995,39.360854],[121.376757,39.750261],[122.168595,40.422443],[121.640359,40.94639],[120.768629,40.593388],[119.639602,39.898056],[119.023464,39.252333],[118.042749,39.204274],[117.532702,38.737636],[118.059699,38.061476],[118.87815,37.897325],[118.911636,37.448464],[119.702802,37.156389],[120.823457,37.870428],[121.711259,37.481123],[122.357937,37.454484],[122.519995,36.930614],[121.104164,36.651329],[120.637009,36.11144],[119.664562,35.609791],[119.151208,34.909859],[120.227525,34.360332],[120.620369,33.376723],[121.229014,32.460319],[121.908146,31.692174],[121.891919,30.949352],[121.264257,30.676267],[121.503519,30.142915],[122.092114,29.83252],[121.938428,29.018022],[121.684439,28.225513],[121.125661,28.135673],[120.395473,27.053207],[119.585497,25.740781],[118.656871,24.547391],[117.281606,23.624501],[115.890735,22.782873],[114.763827,22.668074],[114.152547,22.22376],[113.80678,22.54834],[113.241078,22.051367],[111.843592,21.550494],[110.785466,21.397144],[110.444039,20.341033],[109.889861,20.282457],[109.627655,21.008227],[109.864488,21.395051],[108.522813,21.715212],[108.05018,21.55238],[107.04342,21.811899],[106.567273,22.218205],[106.725403,22.794268],[105.811247,22.976892],[105.329209,23.352063],[104.476858,22.81915],[103.504515,22.703757],[102.706992,22.708795],[102.170436,22.464753],[101.652018,22.318199],[101.80312,21.174367],[101.270026,21.201652],[101.180005,21.436573],[101.150033,21.849984],[100.416538,21.558839],[99.983489,21.742937],[99.240899,22.118314],[99.531992,22.949039],[98.898749,23.142722],[98.660262,24.063286],[97.60472,23.897405],[97.724609,25.083637],[98.671838,25.918703],[98.712094,26.743536],[98.68269,27.508812],[98.246231,27.747221],[97.911988,28.335945],[97.327114,28.261583],[96.248833,28.411031],[96.586591,28.83098],[96.117679,29.452802],[95.404802,29.031717],[94.56599,29.277438],[93.413348,28.640629],[92.503119,27.896876],[91.696657,27.771742],[91.258854,28.040614],[90.730514,28.064954],[90.015829,28.296439],[89.47581,28.042759],[88.814248,27.299316],[88.730326,28.086865],[88.120441,27.876542],[86.954517,27.974262],[85.82332,28.203576],[85.011638,28.642774],[84.23458,28.839894],[83.898993,29.320226],[83.337115,29.463732],[82.327513,30.115268],[81.525804,30.422717],[81.111256,30.183481],[79.721367,30.882715],[78.738894,31.515906],[78.458446,32.618164],[79.176129,32.48378],[79.208892,32.994395],[78.811086,33.506198],[78.912269,34.321936],[77.837451,35.49401],[76.192848,35.898403],[75.896897,36.666806],[75.158028,37.133031],[74.980002,37.41999],[74.829986,37.990007],[74.864816,38.378846],[74.257514,38.606507],[73.928852,38.505815],[73.675379,39.431237],[73.960013,39.660008],[73.822244,39.893973],[74.776862,40.366425],[75.467828,40.562072],[76.526368,40.427946],[76.904484,41.066486],[78.187197,41.185316],[78.543661,41.582243],[80.11943,42.123941],[80.25999,42.349999],[80.18015,42.920068],[80.866206,43.180362],[79.966106,44.917517],[81.947071,45.317027],[82.458926,45.53965],[83.180484,47.330031],[85.16429,47.000956],[85.720484,47.452969],[85.768233,48.455751],[86.598776,48.549182],[87.35997,49.214981],[87.751264,49.297198],[88.013832,48.599463],[88.854298,48.069082],[90.280826,47.693549],[90.970809,46.888146],[90.585768,45.719716],[90.94554,45.286073],[92.133891,45.115076],[93.480734,44.975472],[94.688929,44.352332],[95.306875,44.241331],[95.762455,43.319449],[96.349396,42.725635],[97.451757,42.74889],[99.515817,42.524691],[100.845866,42.663804],[101.83304,42.514873],[103.312278,41.907468],[104.522282,41.908347],[104.964994,41.59741],[106.129316,42.134328],[107.744773,42.481516],[109.243596,42.519446],[110.412103,42.871234],[111.129682,43.406834],[111.829588,43.743118],[111.667737,44.073176],[111.348377,44.457442],[111.873306,45.102079],[112.436062,45.011646],[113.463907,44.808893],[114.460332,45.339817],[115.985096,45.727235],[116.717868,46.388202],[117.421701,46.672733],[118.874326,46.805412],[119.66327,46.69268],[119.772824,47.048059],[118.866574,47.74706],[118.064143,48.06673],[117.295507,47.697709],[116.308953,47.85341],[115.742837,47.726545],[115.485282,48.135383],[116.191802,49.134598],[116.678801,49.888531],[117.879244,49.510983],[119.288461,50.142883],[119.279366,50.582908],[120.18205,51.643566],[120.738191,51.964115],[120.725789,52.516226],[120.177089,52.753886],[121.003085,53.251401],[122.245748,53.431726],[123.571507,53.458804],[125.068211,53.161045],[125.946349,52.792799],[126.564399,51.784255],[126.939157,51.353894],[127.287456,50.739797],[127.657407,49.76027]]]]}}, +{"type":"Feature","id":"CIV","properties":{"name":"Ivory Coast"},"geometry":{"type":"Polygon","coordinates":[[[-2.856125,4.994476],[-3.311084,4.984296],[-4.00882,5.179813],[-4.649917,5.168264],[-5.834496,4.993701],[-6.528769,4.705088],[-7.518941,4.338288],[-7.712159,4.364566],[-7.635368,5.188159],[-7.539715,5.313345],[-7.570153,5.707352],[-7.993693,6.12619],[-8.311348,6.193033],[-8.60288,6.467564],[-8.385452,6.911801],[-8.485446,7.395208],[-8.439298,7.686043],[-8.280703,7.68718],[-8.221792,8.123329],[-8.299049,8.316444],[-8.203499,8.455453],[-7.8321,8.575704],[-8.079114,9.376224],[-8.309616,9.789532],[-8.229337,10.12902],[-8.029944,10.206535],[-7.89959,10.297382],[-7.622759,10.147236],[-6.850507,10.138994],[-6.666461,10.430811],[-6.493965,10.411303],[-6.205223,10.524061],[-6.050452,10.096361],[-5.816926,10.222555],[-5.404342,10.370737],[-4.954653,10.152714],[-4.779884,9.821985],[-4.330247,9.610835],[-3.980449,9.862344],[-3.511899,9.900326],[-2.827496,9.642461],[-2.56219,8.219628],[-2.983585,7.379705],[-3.24437,6.250472],[-2.810701,5.389051],[-2.856125,4.994476]]]}}, +{"type":"Feature","id":"CMR","properties":{"name":"Cameroon"},"geometry":{"type":"Polygon","coordinates":[[[13.075822,2.267097],[12.951334,2.321616],[12.35938,2.192812],[11.751665,2.326758],[11.276449,2.261051],[9.649158,2.283866],[9.795196,3.073404],[9.404367,3.734527],[8.948116,3.904129],[8.744924,4.352215],[8.488816,4.495617],[8.500288,4.771983],[8.757533,5.479666],[9.233163,6.444491],[9.522706,6.453482],[10.118277,7.03877],[10.497375,7.055358],[11.058788,6.644427],[11.745774,6.981383],[11.839309,7.397042],[12.063946,7.799808],[12.218872,8.305824],[12.753672,8.717763],[12.955468,9.417772],[13.1676,9.640626],[13.308676,10.160362],[13.57295,10.798566],[14.415379,11.572369],[14.468192,11.904752],[14.577178,12.085361],[14.181336,12.483657],[14.213531,12.802035],[14.495787,12.859396],[14.893386,12.219048],[14.960152,11.555574],[14.923565,10.891325],[15.467873,9.982337],[14.909354,9.992129],[14.627201,9.920919],[14.171466,10.021378],[13.954218,9.549495],[14.544467,8.965861],[14.979996,8.796104],[15.120866,8.38215],[15.436092,7.692812],[15.27946,7.421925],[14.776545,6.408498],[14.53656,6.226959],[14.459407,5.451761],[14.558936,5.030598],[14.478372,4.732605],[14.950953,4.210389],[15.03622,3.851367],[15.405396,3.335301],[15.862732,3.013537],[15.907381,2.557389],[16.012852,2.26764],[15.940919,1.727673],[15.146342,1.964015],[14.337813,2.227875],[13.075822,2.267097]]]}}, +{"type":"Feature","id":"COD","properties":{"name":"Democratic Republic of the Congo"},"geometry":{"type":"Polygon","coordinates":[[[30.83386,3.509166],[30.773347,2.339883],[31.174149,2.204465],[30.85267,1.849396],[30.468508,1.583805],[30.086154,1.062313],[29.875779,0.59738],[29.819503,-0.20531],[29.587838,-0.587406],[29.579466,-1.341313],[29.291887,-1.620056],[29.254835,-2.21511],[29.117479,-2.292211],[29.024926,-2.839258],[29.276384,-3.293907],[29.339998,-4.499983],[29.519987,-5.419979],[29.419993,-5.939999],[29.620032,-6.520015],[30.199997,-7.079981],[30.740015,-8.340007],[30.346086,-8.238257],[29.002912,-8.407032],[28.734867,-8.526559],[28.449871,-9.164918],[28.673682,-9.605925],[28.49607,-10.789884],[28.372253,-11.793647],[28.642417,-11.971569],[29.341548,-12.360744],[29.616001,-12.178895],[29.699614,-13.257227],[28.934286,-13.248958],[28.523562,-12.698604],[28.155109,-12.272481],[27.388799,-12.132747],[27.16442,-11.608748],[26.553088,-11.92444],[25.75231,-11.784965],[25.418118,-11.330936],[24.78317,-11.238694],[24.314516,-11.262826],[24.257155,-10.951993],[23.912215,-10.926826],[23.456791,-10.867863],[22.837345,-11.017622],[22.402798,-10.993075],[22.155268,-11.084801],[22.208753,-9.894796],[21.875182,-9.523708],[21.801801,-8.908707],[21.949131,-8.305901],[21.746456,-7.920085],[21.728111,-7.290872],[20.514748,-7.299606],[20.601823,-6.939318],[20.091622,-6.94309],[20.037723,-7.116361],[19.417502,-7.155429],[19.166613,-7.738184],[19.016752,-7.988246],[18.464176,-7.847014],[18.134222,-7.987678],[17.47297,-8.068551],[17.089996,-7.545689],[16.860191,-7.222298],[16.57318,-6.622645],[16.326528,-5.87747],[13.375597,-5.864241],[13.024869,-5.984389],[12.735171,-5.965682],[12.322432,-6.100092],[12.182337,-5.789931],[12.436688,-5.684304],[12.468004,-5.248362],[12.631612,-4.991271],[12.995517,-4.781103],[13.25824,-4.882957],[13.600235,-4.500138],[14.144956,-4.510009],[14.209035,-4.793092],[14.582604,-4.970239],[15.170992,-4.343507],[15.75354,-3.855165],[16.00629,-3.535133],[15.972803,-2.712392],[16.407092,-1.740927],[16.865307,-1.225816],[17.523716,-0.74383],[17.638645,-0.424832],[17.663553,-0.058084],[17.82654,0.288923],[17.774192,0.855659],[17.898835,1.741832],[18.094276,2.365722],[18.393792,2.900443],[18.453065,3.504386],[18.542982,4.201785],[18.932312,4.709506],[19.467784,5.031528],[20.290679,4.691678],[20.927591,4.322786],[21.659123,4.224342],[22.405124,4.02916],[22.704124,4.633051],[22.84148,4.710126],[23.297214,4.609693],[24.410531,5.108784],[24.805029,4.897247],[25.128833,4.927245],[25.278798,5.170408],[25.650455,5.256088],[26.402761,5.150875],[27.044065,5.127853],[27.374226,5.233944],[27.979977,4.408413],[28.428994,4.287155],[28.696678,4.455077],[29.159078,4.389267],[29.715995,4.600805],[29.9535,4.173699],[30.83386,3.509166]]]}}, +{"type":"Feature","id":"COG","properties":{"name":"Republic of the Congo"},"geometry":{"type":"Polygon","coordinates":[[[12.995517,-4.781103],[12.62076,-4.438023],[12.318608,-4.60623],[11.914963,-5.037987],[11.093773,-3.978827],[11.855122,-3.426871],[11.478039,-2.765619],[11.820964,-2.514161],[12.495703,-2.391688],[12.575284,-1.948511],[13.109619,-2.42874],[13.992407,-2.470805],[14.29921,-1.998276],[14.425456,-1.333407],[14.316418,-0.552627],[13.843321,0.038758],[14.276266,1.19693],[14.026669,1.395677],[13.282631,1.314184],[13.003114,1.830896],[13.075822,2.267097],[14.337813,2.227875],[15.146342,1.964015],[15.940919,1.727673],[16.012852,2.26764],[16.537058,3.198255],[17.133042,3.728197],[17.8099,3.560196],[18.453065,3.504386],[18.393792,2.900443],[18.094276,2.365722],[17.898835,1.741832],[17.774192,0.855659],[17.82654,0.288923],[17.663553,-0.058084],[17.638645,-0.424832],[17.523716,-0.74383],[16.865307,-1.225816],[16.407092,-1.740927],[15.972803,-2.712392],[16.00629,-3.535133],[15.75354,-3.855165],[15.170992,-4.343507],[14.582604,-4.970239],[14.209035,-4.793092],[14.144956,-4.510009],[13.600235,-4.500138],[13.25824,-4.882957],[12.995517,-4.781103]]]}}, +{"type":"Feature","id":"COL","properties":{"name":"Colombia"},"geometry":{"type":"Polygon","coordinates":[[[-75.373223,-0.152032],[-75.801466,0.084801],[-76.292314,0.416047],[-76.57638,0.256936],[-77.424984,0.395687],[-77.668613,0.825893],[-77.855061,0.809925],[-78.855259,1.380924],[-78.990935,1.69137],[-78.617831,1.766404],[-78.662118,2.267355],[-78.42761,2.629556],[-77.931543,2.696606],[-77.510431,3.325017],[-77.12769,3.849636],[-77.496272,4.087606],[-77.307601,4.667984],[-77.533221,5.582812],[-77.318815,5.845354],[-77.476661,6.691116],[-77.881571,7.223771],[-77.753414,7.70984],[-77.431108,7.638061],[-77.242566,7.935278],[-77.474723,8.524286],[-77.353361,8.670505],[-76.836674,8.638749],[-76.086384,9.336821],[-75.6746,9.443248],[-75.664704,9.774003],[-75.480426,10.61899],[-74.906895,11.083045],[-74.276753,11.102036],[-74.197223,11.310473],[-73.414764,11.227015],[-72.627835,11.731972],[-72.238195,11.95555],[-71.75409,12.437303],[-71.399822,12.376041],[-71.137461,12.112982],[-71.331584,11.776284],[-71.973922,11.608672],[-72.227575,11.108702],[-72.614658,10.821975],[-72.905286,10.450344],[-73.027604,9.73677],[-73.304952,9.152],[-72.78873,9.085027],[-72.660495,8.625288],[-72.439862,8.405275],[-72.360901,8.002638],[-72.479679,7.632506],[-72.444487,7.423785],[-72.198352,7.340431],[-71.960176,6.991615],[-70.674234,7.087785],[-70.093313,6.960376],[-69.38948,6.099861],[-68.985319,6.206805],[-68.265052,6.153268],[-67.695087,6.267318],[-67.34144,6.095468],[-67.521532,5.55687],[-67.744697,5.221129],[-67.823012,4.503937],[-67.621836,3.839482],[-67.337564,3.542342],[-67.303173,3.318454],[-67.809938,2.820655],[-67.447092,2.600281],[-67.181294,2.250638],[-66.876326,1.253361],[-67.065048,1.130112],[-67.259998,1.719999],[-67.53781,2.037163],[-67.868565,1.692455],[-69.816973,1.714805],[-69.804597,1.089081],[-69.218638,0.985677],[-69.252434,0.602651],[-69.452396,0.706159],[-70.015566,0.541414],[-70.020656,-0.185156],[-69.577065,-0.549992],[-69.420486,-1.122619],[-69.444102,-1.556287],[-69.893635,-4.298187],[-70.394044,-3.766591],[-70.692682,-3.742872],[-70.047709,-2.725156],[-70.813476,-2.256865],[-71.413646,-2.342802],[-71.774761,-2.16979],[-72.325787,-2.434218],[-73.070392,-2.308954],[-73.659504,-1.260491],[-74.122395,-1.002833],[-74.441601,-0.53082],[-75.106625,-0.057205],[-75.373223,-0.152032]]]}}, +{"type":"Feature","id":"CRI","properties":{"name":"Costa Rica"},"geometry":{"type":"Polygon","coordinates":[[[-82.965783,8.225028],[-83.508437,8.446927],[-83.711474,8.656836],[-83.596313,8.830443],[-83.632642,9.051386],[-83.909886,9.290803],[-84.303402,9.487354],[-84.647644,9.615537],[-84.713351,9.908052],[-84.97566,10.086723],[-84.911375,9.795992],[-85.110923,9.55704],[-85.339488,9.834542],[-85.660787,9.933347],[-85.797445,10.134886],[-85.791709,10.439337],[-85.659314,10.754331],[-85.941725,10.895278],[-85.71254,11.088445],[-85.561852,11.217119],[-84.903003,10.952303],[-84.673069,11.082657],[-84.355931,10.999226],[-84.190179,10.79345],[-83.895054,10.726839],[-83.655612,10.938764],[-83.40232,10.395438],[-83.015677,9.992982],[-82.546196,9.566135],[-82.932891,9.476812],[-82.927155,9.07433],[-82.719183,8.925709],[-82.868657,8.807266],[-82.829771,8.626295],[-82.913176,8.423517],[-82.965783,8.225028]]]}}, +{"type":"Feature","id":"CUB","properties":{"name":"Cuba"},"geometry":{"type":"Polygon","coordinates":[[[-82.268151,23.188611],[-81.404457,23.117271],[-80.618769,23.10598],[-79.679524,22.765303],[-79.281486,22.399202],[-78.347434,22.512166],[-77.993296,22.277194],[-77.146422,21.657851],[-76.523825,21.20682],[-76.19462,21.220565],[-75.598222,21.016624],[-75.67106,20.735091],[-74.933896,20.693905],[-74.178025,20.284628],[-74.296648,20.050379],[-74.961595,19.923435],[-75.63468,19.873774],[-76.323656,19.952891],[-77.755481,19.855481],[-77.085108,20.413354],[-77.492655,20.673105],[-78.137292,20.739949],[-78.482827,21.028613],[-78.719867,21.598114],[-79.285,21.559175],[-80.217475,21.827324],[-80.517535,22.037079],[-81.820943,22.192057],[-82.169992,22.387109],[-81.795002,22.636965],[-82.775898,22.68815],[-83.494459,22.168518],[-83.9088,22.154565],[-84.052151,21.910575],[-84.54703,21.801228],[-84.974911,21.896028],[-84.447062,22.20495],[-84.230357,22.565755],[-83.77824,22.788118],[-83.267548,22.983042],[-82.510436,23.078747],[-82.268151,23.188611]]]}}, +{"type":"Feature","id":"-99","properties":{"name":"Northern Cyprus"},"geometry":{"type":"Polygon","coordinates":[[[32.73178,35.140026],[32.802474,35.145504],[32.946961,35.386703],[33.667227,35.373216],[34.576474,35.671596],[33.900804,35.245756],[33.973617,35.058506],[33.86644,35.093595],[33.675392,35.017863],[33.525685,35.038688],[33.475817,35.000345],[33.455922,35.101424],[33.383833,35.162712],[33.190977,35.173125],[32.919572,35.087833],[32.73178,35.140026]]]}}, +{"type":"Feature","id":"CYP","properties":{"name":"Cyprus"},"geometry":{"type":"Polygon","coordinates":[[[33.973617,35.058506],[34.004881,34.978098],[32.979827,34.571869],[32.490296,34.701655],[32.256667,35.103232],[32.73178,35.140026],[32.919572,35.087833],[33.190977,35.173125],[33.383833,35.162712],[33.455922,35.101424],[33.475817,35.000345],[33.525685,35.038688],[33.675392,35.017863],[33.86644,35.093595],[33.973617,35.058506]]]}}, +{"type":"Feature","id":"CZE","properties":{"name":"Czech Republic"},"geometry":{"type":"Polygon","coordinates":[[[16.960288,48.596982],[16.499283,48.785808],[16.029647,48.733899],[15.253416,49.039074],[14.901447,48.964402],[14.338898,48.555305],[13.595946,48.877172],[13.031329,49.307068],[12.521024,49.547415],[12.415191,49.969121],[12.240111,50.266338],[12.966837,50.484076],[13.338132,50.733234],[14.056228,50.926918],[14.307013,51.117268],[14.570718,51.002339],[15.016996,51.106674],[15.490972,50.78473],[16.238627,50.697733],[16.176253,50.422607],[16.719476,50.215747],[16.868769,50.473974],[17.554567,50.362146],[17.649445,50.049038],[18.392914,49.988629],[18.853144,49.49623],[18.554971,49.495015],[18.399994,49.315001],[18.170498,49.271515],[18.104973,49.043983],[17.913512,48.996493],[17.886485,48.903475],[17.545007,48.800019],[17.101985,48.816969],[16.960288,48.596982]]]}}, +{"type":"Feature","id":"DEU","properties":{"name":"Germany"},"geometry":{"type":"Polygon","coordinates":[[[9.921906,54.983104],[9.93958,54.596642],[10.950112,54.363607],[10.939467,54.008693],[11.956252,54.196486],[12.51844,54.470371],[13.647467,54.075511],[14.119686,53.757029],[14.353315,53.248171],[14.074521,52.981263],[14.4376,52.62485],[14.685026,52.089947],[14.607098,51.745188],[15.016996,51.106674],[14.570718,51.002339],[14.307013,51.117268],[14.056228,50.926918],[13.338132,50.733234],[12.966837,50.484076],[12.240111,50.266338],[12.415191,49.969121],[12.521024,49.547415],[13.031329,49.307068],[13.595946,48.877172],[13.243357,48.416115],[12.884103,48.289146],[13.025851,47.637584],[12.932627,47.467646],[12.62076,47.672388],[12.141357,47.703083],[11.426414,47.523766],[10.544504,47.566399],[10.402084,47.302488],[9.896068,47.580197],[9.594226,47.525058],[8.522612,47.830828],[8.317301,47.61358],[7.466759,47.620582],[7.593676,48.333019],[8.099279,49.017784],[6.65823,49.201958],[6.18632,49.463803],[6.242751,49.902226],[6.043073,50.128052],[6.156658,50.803721],[5.988658,51.851616],[6.589397,51.852029],[6.84287,52.22844],[7.092053,53.144043],[6.90514,53.482162],[7.100425,53.693932],[7.936239,53.748296],[8.121706,53.527792],[8.800734,54.020786],[8.572118,54.395646],[8.526229,54.962744],[9.282049,54.830865],[9.921906,54.983104]]]}}, +{"type":"Feature","id":"DJI","properties":{"name":"Djibouti"},"geometry":{"type":"Polygon","coordinates":[[[43.081226,12.699639],[43.317852,12.390148],[43.286381,11.974928],[42.715874,11.735641],[43.145305,11.46204],[42.776852,10.926879],[42.55493,11.10511],[42.31414,11.0342],[41.75557,11.05091],[41.73959,11.35511],[41.66176,11.6312],[42,12.1],[42.35156,12.54223],[42.779642,12.455416],[43.081226,12.699639]]]}}, +{"type":"Feature","id":"DNK","properties":{"name":"Denmark"},"geometry":{"type":"MultiPolygon","coordinates":[[[[12.690006,55.609991],[12.089991,54.800015],[11.043543,55.364864],[10.903914,55.779955],[12.370904,56.111407],[12.690006,55.609991]]],[[[10.912182,56.458621],[10.667804,56.081383],[10.369993,56.190007],[9.649985,55.469999],[9.921906,54.983104],[9.282049,54.830865],[8.526229,54.962744],[8.120311,55.517723],[8.089977,56.540012],[8.256582,56.809969],[8.543438,57.110003],[9.424469,57.172066],[9.775559,57.447941],[10.580006,57.730017],[10.546106,57.215733],[10.25,56.890016],[10.369993,56.609982],[10.912182,56.458621]]]]}}, +{"type":"Feature","id":"DOM","properties":{"name":"Dominican Republic"},"geometry":{"type":"Polygon","coordinates":[[[-71.712361,19.714456],[-71.587304,19.884911],[-70.806706,19.880286],[-70.214365,19.622885],[-69.950815,19.648],[-69.76925,19.293267],[-69.222126,19.313214],[-69.254346,19.015196],[-68.809412,18.979074],[-68.317943,18.612198],[-68.689316,18.205142],[-69.164946,18.422648],[-69.623988,18.380713],[-69.952934,18.428307],[-70.133233,18.245915],[-70.517137,18.184291],[-70.669298,18.426886],[-70.99995,18.283329],[-71.40021,17.598564],[-71.657662,17.757573],[-71.708305,18.044997],[-71.687738,18.31666],[-71.945112,18.6169],[-71.701303,18.785417],[-71.624873,19.169838],[-71.712361,19.714456]]]}}, +{"type":"Feature","id":"DZA","properties":{"name":"Algeria"},"geometry":{"type":"Polygon","coordinates":[[[11.999506,23.471668],[8.572893,21.565661],[5.677566,19.601207],[4.267419,19.155265],[3.158133,19.057364],[3.146661,19.693579],[2.683588,19.85623],[2.060991,20.142233],[1.823228,20.610809],[-1.550055,22.792666],[-4.923337,24.974574],[-8.6844,27.395744],[-8.665124,27.589479],[-8.66559,27.656426],[-8.674116,28.841289],[-7.059228,29.579228],[-6.060632,29.7317],[-5.242129,30.000443],[-4.859646,30.501188],[-3.690441,30.896952],[-3.647498,31.637294],[-3.06898,31.724498],[-2.616605,32.094346],[-1.307899,32.262889],[-1.124551,32.651522],[-1.388049,32.864015],[-1.733455,33.919713],[-1.792986,34.527919],[-2.169914,35.168396],[-1.208603,35.714849],[-0.127454,35.888662],[0.503877,36.301273],[1.466919,36.605647],[3.161699,36.783905],[4.815758,36.865037],[5.32012,36.716519],[6.26182,37.110655],[7.330385,37.118381],[7.737078,36.885708],[8.420964,36.946427],[8.217824,36.433177],[8.376368,35.479876],[8.140981,34.655146],[7.524482,34.097376],[7.612642,33.344115],[8.430473,32.748337],[8.439103,32.506285],[9.055603,32.102692],[9.48214,30.307556],[9.805634,29.424638],[9.859998,28.95999],[9.683885,28.144174],[9.756128,27.688259],[9.629056,27.140953],[9.716286,26.512206],[9.319411,26.094325],[9.910693,25.365455],[9.948261,24.936954],[10.303847,24.379313],[10.771364,24.562532],[11.560669,24.097909],[11.999506,23.471668]]]}}, +{"type":"Feature","id":"ECU","properties":{"name":"Ecuador"},"geometry":{"type":"Polygon","coordinates":[[[-80.302561,-3.404856],[-79.770293,-2.657512],[-79.986559,-2.220794],[-80.368784,-2.685159],[-80.967765,-2.246943],[-80.764806,-1.965048],[-80.933659,-1.057455],[-80.58337,-0.906663],[-80.399325,-0.283703],[-80.020898,0.36034],[-80.09061,0.768429],[-79.542762,0.982938],[-78.855259,1.380924],[-77.855061,0.809925],[-77.668613,0.825893],[-77.424984,0.395687],[-76.57638,0.256936],[-76.292314,0.416047],[-75.801466,0.084801],[-75.373223,-0.152032],[-75.233723,-0.911417],[-75.544996,-1.56161],[-76.635394,-2.608678],[-77.837905,-3.003021],[-78.450684,-3.873097],[-78.639897,-4.547784],[-79.205289,-4.959129],[-79.624979,-4.454198],[-80.028908,-4.346091],[-80.442242,-4.425724],[-80.469295,-4.059287],[-80.184015,-3.821162],[-80.302561,-3.404856]]]}}, +{"type":"Feature","id":"EGY","properties":{"name":"Egypt"},"geometry":{"type":"Polygon","coordinates":[[[34.9226,29.50133],[34.64174,29.09942],[34.42655,28.34399],[34.15451,27.8233],[33.92136,27.6487],[33.58811,27.97136],[33.13676,28.41765],[32.42323,29.85108],[32.32046,29.76043],[32.73482,28.70523],[33.34876,27.69989],[34.10455,26.14227],[34.47387,25.59856],[34.79507,25.03375],[35.69241,23.92671],[35.49372,23.75237],[35.52598,23.10244],[36.69069,22.20485],[36.86623,22],[32.9,22],[29.02,22],[25,22],[25,25.6825],[25,29.238655],[24.70007,30.04419],[24.95762,30.6616],[24.80287,31.08929],[25.16482,31.56915],[26.49533,31.58568],[27.45762,31.32126],[28.45048,31.02577],[28.91353,30.87005],[29.68342,31.18686],[30.09503,31.4734],[30.97693,31.55586],[31.68796,31.4296],[31.96041,30.9336],[32.19247,31.26034],[32.99392,31.02407],[33.7734,30.96746],[34.26544,31.21936],[34.9226,29.50133]]]}}, +{"type":"Feature","id":"ERI","properties":{"name":"Eritrea"},"geometry":{"type":"Polygon","coordinates":[[[42.35156,12.54223],[42.00975,12.86582],[41.59856,13.45209],[41.155194,13.77332],[40.8966,14.11864],[40.026219,14.519579],[39.34061,14.53155],[39.0994,14.74064],[38.51295,14.50547],[37.90607,14.95943],[37.59377,14.2131],[36.42951,14.42211],[36.323189,14.822481],[36.75386,16.291874],[36.85253,16.95655],[37.16747,17.26314],[37.904,17.42754],[38.41009,17.998307],[38.990623,16.840626],[39.26611,15.922723],[39.814294,15.435647],[41.179275,14.49108],[41.734952,13.921037],[42.276831,13.343992],[42.589576,13.000421],[43.081226,12.699639],[42.779642,12.455416],[42.35156,12.54223]]]}}, +{"type":"Feature","id":"ESP","properties":{"name":"Spain"},"geometry":{"type":"Polygon","coordinates":[[[-9.034818,41.880571],[-8.984433,42.592775],[-9.392884,43.026625],[-7.97819,43.748338],[-6.754492,43.567909],[-5.411886,43.57424],[-4.347843,43.403449],[-3.517532,43.455901],[-1.901351,43.422802],[-1.502771,43.034014],[0.338047,42.579546],[0.701591,42.795734],[1.826793,42.343385],[2.985999,42.473015],[3.039484,41.89212],[2.091842,41.226089],[0.810525,41.014732],[0.721331,40.678318],[0.106692,40.123934],[-0.278711,39.309978],[0.111291,38.738514],[-0.467124,38.292366],[-0.683389,37.642354],[-1.438382,37.443064],[-2.146453,36.674144],[-3.415781,36.6589],[-4.368901,36.677839],[-4.995219,36.324708],[-5.37716,35.94685],[-5.866432,36.029817],[-6.236694,36.367677],[-6.520191,36.942913],[-7.453726,37.097788],[-7.537105,37.428904],[-7.166508,37.803894],[-7.029281,38.075764],[-7.374092,38.373059],[-7.098037,39.030073],[-7.498632,39.629571],[-7.066592,39.711892],[-7.026413,40.184524],[-6.86402,40.330872],[-6.851127,41.111083],[-6.389088,41.381815],[-6.668606,41.883387],[-7.251309,41.918346],[-7.422513,41.792075],[-8.013175,41.790886],[-8.263857,42.280469],[-8.671946,42.134689],[-9.034818,41.880571]]]}}, +{"type":"Feature","id":"EST","properties":{"name":"Estonia"},"geometry":{"type":"Polygon","coordinates":[[[24.312863,57.793424],[24.428928,58.383413],[24.061198,58.257375],[23.42656,58.612753],[23.339795,59.18724],[24.604214,59.465854],[25.864189,59.61109],[26.949136,59.445803],[27.981114,59.475388],[28.131699,59.300825],[27.420166,58.724581],[27.716686,57.791899],[27.288185,57.474528],[26.463532,57.476389],[25.60281,57.847529],[25.164594,57.970157],[24.312863,57.793424]]]}}, +{"type":"Feature","id":"ETH","properties":{"name":"Ethiopia"},"geometry":{"type":"Polygon","coordinates":[[[37.90607,14.95943],[38.51295,14.50547],[39.0994,14.74064],[39.34061,14.53155],[40.02625,14.51959],[40.8966,14.11864],[41.1552,13.77333],[41.59856,13.45209],[42.00975,12.86582],[42.35156,12.54223],[42,12.1],[41.66176,11.6312],[41.73959,11.35511],[41.75557,11.05091],[42.31414,11.0342],[42.55493,11.10511],[42.776852,10.926879],[42.55876,10.57258],[42.92812,10.02194],[43.29699,9.54048],[43.67875,9.18358],[46.94834,7.99688],[47.78942,8.003],[44.9636,5.00162],[43.66087,4.95755],[42.76967,4.25259],[42.12861,4.23413],[41.855083,3.918912],[41.1718,3.91909],[40.76848,4.25702],[39.85494,3.83879],[39.559384,3.42206],[38.89251,3.50074],[38.67114,3.61607],[38.43697,3.58851],[38.120915,3.598605],[36.855093,4.447864],[36.159079,4.447864],[35.817448,4.776966],[35.817448,5.338232],[35.298007,5.506],[34.70702,6.59422],[34.25032,6.82607],[34.0751,7.22595],[33.56829,7.71334],[32.95418,7.78497],[33.2948,8.35458],[33.8255,8.37916],[33.97498,8.68456],[33.96162,9.58358],[34.25745,10.63009],[34.73115,10.91017],[34.83163,11.31896],[35.26049,12.08286],[35.86363,12.57828],[36.27022,13.56333],[36.42951,14.42211],[37.59377,14.2131],[37.90607,14.95943]]]}}, +{"type":"Feature","id":"FIN","properties":{"name":"Finland"},"geometry":{"type":"Polygon","coordinates":[[[28.59193,69.064777],[28.445944,68.364613],[29.977426,67.698297],[29.054589,66.944286],[30.21765,65.80598],[29.54443,64.948672],[30.444685,64.204453],[30.035872,63.552814],[31.516092,62.867687],[31.139991,62.357693],[30.211107,61.780028],[28.069998,60.503517],[26.255173,60.423961],[24.496624,60.057316],[22.869695,59.846373],[22.290764,60.391921],[21.322244,60.72017],[21.544866,61.705329],[21.059211,62.607393],[21.536029,63.189735],[22.442744,63.81781],[24.730512,64.902344],[25.398068,65.111427],[25.294043,65.534346],[23.903379,66.006927],[23.56588,66.396051],[23.539473,67.936009],[21.978535,68.616846],[20.645593,69.106247],[21.244936,69.370443],[22.356238,68.841741],[23.66205,68.891247],[24.735679,68.649557],[25.689213,69.092114],[26.179622,69.825299],[27.732292,70.164193],[29.015573,69.766491],[28.59193,69.064777]]]}}, +{"type":"Feature","id":"FJI","properties":{"name":"Fiji"},"geometry":{"type":"MultiPolygon","coordinates":[[[[178.3736,-17.33992],[178.71806,-17.62846],[178.55271,-18.15059],[177.93266,-18.28799],[177.38146,-18.16432],[177.28504,-17.72465],[177.67087,-17.38114],[178.12557,-17.50481],[178.3736,-17.33992]]],[[[179.364143,-16.801354],[178.725059,-17.012042],[178.596839,-16.63915],[179.096609,-16.433984],[179.413509,-16.379054],[180,-16.067133],[180,-16.555217],[179.364143,-16.801354]]],[[[-179.917369,-16.501783],[-180,-16.555217],[-180,-16.067133],[-179.79332,-16.020882],[-179.917369,-16.501783]]]]}}, +{"type":"Feature","id":"FLK","properties":{"name":"Falkland Islands"},"geometry":{"type":"Polygon","coordinates":[[[-61.2,-51.85],[-60,-51.25],[-59.15,-51.5],[-58.55,-51.1],[-57.75,-51.55],[-58.05,-51.9],[-59.4,-52.2],[-59.85,-51.85],[-60.7,-52.3],[-61.2,-51.85]]]}}, +{"type":"Feature","id":"FRA","properties":{"name":"France"},"geometry":{"type":"MultiPolygon","coordinates":[[[[9.560016,42.152492],[9.229752,41.380007],[8.775723,41.583612],[8.544213,42.256517],[8.746009,42.628122],[9.390001,43.009985],[9.560016,42.152492]]],[[[3.588184,50.378992],[4.286023,49.907497],[4.799222,49.985373],[5.674052,49.529484],[5.897759,49.442667],[6.18632,49.463803],[6.65823,49.201958],[8.099279,49.017784],[7.593676,48.333019],[7.466759,47.620582],[7.192202,47.449766],[6.736571,47.541801],[6.768714,47.287708],[6.037389,46.725779],[6.022609,46.27299],[6.5001,46.429673],[6.843593,45.991147],[6.802355,45.70858],[7.096652,45.333099],[6.749955,45.028518],[7.007562,44.254767],[7.549596,44.127901],[7.435185,43.693845],[6.529245,43.128892],[4.556963,43.399651],[3.100411,43.075201],[2.985999,42.473015],[1.826793,42.343385],[0.701591,42.795734],[0.338047,42.579546],[-1.502771,43.034014],[-1.901351,43.422802],[-1.384225,44.02261],[-1.193798,46.014918],[-2.225724,47.064363],[-2.963276,47.570327],[-4.491555,47.954954],[-4.59235,48.68416],[-3.295814,48.901692],[-1.616511,48.644421],[-1.933494,49.776342],[-0.989469,49.347376],[1.338761,50.127173],[1.639001,50.946606],[2.513573,51.148506],[2.658422,50.796848],[3.123252,50.780363],[3.588184,50.378992]]]]}}, +{"type":"Feature","id":"GAB","properties":{"name":"Gabon"},"geometry":{"type":"Polygon","coordinates":[[[11.093773,-3.978827],[10.066135,-2.969483],[9.405245,-2.144313],[8.797996,-1.111301],[8.830087,-0.779074],[9.04842,-0.459351],[9.291351,0.268666],[9.492889,1.01012],[9.830284,1.067894],[11.285079,1.057662],[11.276449,2.261051],[11.751665,2.326758],[12.35938,2.192812],[12.951334,2.321616],[13.075822,2.267097],[13.003114,1.830896],[13.282631,1.314184],[14.026669,1.395677],[14.276266,1.19693],[13.843321,0.038758],[14.316418,-0.552627],[14.425456,-1.333407],[14.29921,-1.998276],[13.992407,-2.470805],[13.109619,-2.42874],[12.575284,-1.948511],[12.495703,-2.391688],[11.820964,-2.514161],[11.478039,-2.765619],[11.855122,-3.426871],[11.093773,-3.978827]]]}}, +{"type":"Feature","id":"GBR","properties":{"name":"United Kingdom"},"geometry":{"type":"MultiPolygon","coordinates":[[[[-5.661949,54.554603],[-6.197885,53.867565],[-6.95373,54.073702],[-7.572168,54.059956],[-7.366031,54.595841],[-7.572168,55.131622],[-6.733847,55.17286],[-5.661949,54.554603]]],[[[-3.005005,58.635],[-4.073828,57.553025],[-3.055002,57.690019],[-1.959281,57.6848],[-2.219988,56.870017],[-3.119003,55.973793],[-2.085009,55.909998],[-2.005676,55.804903],[-1.114991,54.624986],[-0.430485,54.464376],[0.184981,53.325014],[0.469977,52.929999],[1.681531,52.73952],[1.559988,52.099998],[1.050562,51.806761],[1.449865,51.289428],[0.550334,50.765739],[-0.787517,50.774989],[-2.489998,50.500019],[-2.956274,50.69688],[-3.617448,50.228356],[-4.542508,50.341837],[-5.245023,49.96],[-5.776567,50.159678],[-4.30999,51.210001],[-3.414851,51.426009],[-3.422719,51.426848],[-4.984367,51.593466],[-5.267296,51.9914],[-4.222347,52.301356],[-4.770013,52.840005],[-4.579999,53.495004],[-3.093831,53.404547],[-3.09208,53.404441],[-2.945009,53.985],[-3.614701,54.600937],[-3.630005,54.615013],[-4.844169,54.790971],[-5.082527,55.061601],[-4.719112,55.508473],[-5.047981,55.783986],[-5.586398,55.311146],[-5.644999,56.275015],[-6.149981,56.78501],[-5.786825,57.818848],[-5.009999,58.630013],[-4.211495,58.550845],[-3.005005,58.635]]]]}}, +{"type":"Feature","id":"GEO","properties":{"name":"Georgia"},"geometry":{"type":"Polygon","coordinates":[[[41.554084,41.535656],[41.703171,41.962943],[41.45347,42.645123],[40.875469,43.013628],[40.321394,43.128634],[39.955009,43.434998],[40.076965,43.553104],[40.922185,43.382159],[42.394395,43.220308],[43.756017,42.740828],[43.9312,42.554974],[44.537623,42.711993],[45.470279,42.502781],[45.77641,42.092444],[46.404951,41.860675],[46.145432,41.722802],[46.637908,41.181673],[46.501637,41.064445],[45.962601,41.123873],[45.217426,41.411452],[44.97248,41.248129],[43.582746,41.092143],[42.619549,41.583173],[41.554084,41.535656]]]}}, +{"type":"Feature","id":"GHA","properties":{"name":"Ghana"},"geometry":{"type":"Polygon","coordinates":[[[1.060122,5.928837],[-0.507638,5.343473],[-1.063625,5.000548],[-1.964707,4.710462],[-2.856125,4.994476],[-2.810701,5.389051],[-3.24437,6.250472],[-2.983585,7.379705],[-2.56219,8.219628],[-2.827496,9.642461],[-2.963896,10.395335],[-2.940409,10.96269],[-1.203358,11.009819],[-0.761576,10.93693],[-0.438702,11.098341],[0.023803,11.018682],[-0.049785,10.706918],[0.36758,10.191213],[0.365901,9.465004],[0.461192,8.677223],[0.712029,8.312465],[0.490957,7.411744],[0.570384,6.914359],[0.836931,6.279979],[1.060122,5.928837]]]}}, +{"type":"Feature","id":"GIN","properties":{"name":"Guinea"},"geometry":{"type":"Polygon","coordinates":[[[-8.439298,7.686043],[-8.722124,7.711674],[-8.926065,7.309037],[-9.208786,7.313921],[-9.403348,7.526905],[-9.33728,7.928534],[-9.755342,8.541055],[-10.016567,8.428504],[-10.230094,8.406206],[-10.505477,8.348896],[-10.494315,8.715541],[-10.65477,8.977178],[-10.622395,9.26791],[-10.839152,9.688246],[-11.117481,10.045873],[-11.917277,10.046984],[-12.150338,9.858572],[-12.425929,9.835834],[-12.596719,9.620188],[-12.711958,9.342712],[-13.24655,8.903049],[-13.685154,9.494744],[-14.074045,9.886167],[-14.330076,10.01572],[-14.579699,10.214467],[-14.693232,10.656301],[-14.839554,10.876572],[-15.130311,11.040412],[-14.685687,11.527824],[-14.382192,11.509272],[-14.121406,11.677117],[-13.9008,11.678719],[-13.743161,11.811269],[-13.828272,12.142644],[-13.718744,12.247186],[-13.700476,12.586183],[-13.217818,12.575874],[-12.499051,12.33209],[-12.278599,12.35444],[-12.203565,12.465648],[-11.658301,12.386583],[-11.513943,12.442988],[-11.456169,12.076834],[-11.297574,12.077971],[-11.036556,12.211245],[-10.87083,12.177887],[-10.593224,11.923975],[-10.165214,11.844084],[-9.890993,12.060479],[-9.567912,12.194243],[-9.327616,12.334286],[-9.127474,12.30806],[-8.905265,12.088358],[-8.786099,11.812561],[-8.376305,11.393646],[-8.581305,11.136246],[-8.620321,10.810891],[-8.407311,10.909257],[-8.282357,10.792597],[-8.335377,10.494812],[-8.029944,10.206535],[-8.229337,10.12902],[-8.309616,9.789532],[-8.079114,9.376224],[-7.8321,8.575704],[-8.203499,8.455453],[-8.299049,8.316444],[-8.221792,8.123329],[-8.280703,7.68718],[-8.439298,7.686043]]]}}, +{"type":"Feature","id":"GMB","properties":{"name":"Gambia"},"geometry":{"type":"Polygon","coordinates":[[[-16.841525,13.151394],[-16.713729,13.594959],[-15.624596,13.623587],[-15.39877,13.860369],[-15.081735,13.876492],[-14.687031,13.630357],[-14.376714,13.62568],[-14.046992,13.794068],[-13.844963,13.505042],[-14.277702,13.280585],[-14.712197,13.298207],[-15.141163,13.509512],[-15.511813,13.27857],[-15.691001,13.270353],[-15.931296,13.130284],[-16.841525,13.151394]]]}}, +{"type":"Feature","id":"GNB","properties":{"name":"Guinea Bissau"},"geometry":{"type":"Polygon","coordinates":[[[-15.130311,11.040412],[-15.66418,11.458474],[-16.085214,11.524594],[-16.314787,11.806515],[-16.308947,11.958702],[-16.613838,12.170911],[-16.677452,12.384852],[-16.147717,12.547762],[-15.816574,12.515567],[-15.548477,12.62817],[-13.700476,12.586183],[-13.718744,12.247186],[-13.828272,12.142644],[-13.743161,11.811269],[-13.9008,11.678719],[-14.121406,11.677117],[-14.382192,11.509272],[-14.685687,11.527824],[-15.130311,11.040412]]]}}, +{"type":"Feature","id":"GNQ","properties":{"name":"Equatorial Guinea"},"geometry":{"type":"Polygon","coordinates":[[[9.492889,1.01012],[9.305613,1.160911],[9.649158,2.283866],[11.276449,2.261051],[11.285079,1.057662],[9.830284,1.067894],[9.492889,1.01012]]]}}, +{"type":"Feature","id":"GRC","properties":{"name":"Greece"},"geometry":{"type":"MultiPolygon","coordinates":[[[[23.69998,35.705004],[24.246665,35.368022],[25.025015,35.424996],[25.769208,35.354018],[25.745023,35.179998],[26.290003,35.29999],[26.164998,35.004995],[24.724982,34.919988],[24.735007,35.084991],[23.514978,35.279992],[23.69998,35.705004]]],[[[26.604196,41.562115],[26.294602,40.936261],[26.056942,40.824123],[25.447677,40.852545],[24.925848,40.947062],[23.714811,40.687129],[24.407999,40.124993],[23.899968,39.962006],[23.342999,39.960998],[22.813988,40.476005],[22.626299,40.256561],[22.849748,39.659311],[23.350027,39.190011],[22.973099,38.970903],[23.530016,38.510001],[24.025025,38.219993],[24.040011,37.655015],[23.115003,37.920011],[23.409972,37.409991],[22.774972,37.30501],[23.154225,36.422506],[22.490028,36.41],[21.670026,36.844986],[21.295011,37.644989],[21.120034,38.310323],[20.730032,38.769985],[20.217712,39.340235],[20.150016,39.624998],[20.615,40.110007],[20.674997,40.435],[20.99999,40.580004],[21.02004,40.842727],[21.674161,40.931275],[22.055378,41.149866],[22.597308,41.130487],[22.76177,41.3048],[22.952377,41.337994],[23.692074,41.309081],[24.492645,41.583896],[25.197201,41.234486],[26.106138,41.328899],[26.117042,41.826905],[26.604196,41.562115]]]]}}, +{"type":"Feature","id":"GRL","properties":{"name":"Greenland"},"geometry":{"type":"Polygon","coordinates":[[[-46.76379,82.62796],[-43.40644,83.22516],[-39.89753,83.18018],[-38.62214,83.54905],[-35.08787,83.64513],[-27.10046,83.51966],[-20.84539,82.72669],[-22.69182,82.34165],[-26.51753,82.29765],[-31.9,82.2],[-31.39646,82.02154],[-27.85666,82.13178],[-24.84448,81.78697],[-22.90328,82.09317],[-22.07175,81.73449],[-23.16961,81.15271],[-20.62363,81.52462],[-15.76818,81.91245],[-12.77018,81.71885],[-12.20855,81.29154],[-16.28533,80.58004],[-16.85,80.35],[-20.04624,80.17708],[-17.73035,80.12912],[-18.9,79.4],[-19.70499,78.75128],[-19.67353,77.63859],[-18.47285,76.98565],[-20.03503,76.94434],[-21.67944,76.62795],[-19.83407,76.09808],[-19.59896,75.24838],[-20.66818,75.15585],[-19.37281,74.29561],[-21.59422,74.22382],[-20.43454,73.81713],[-20.76234,73.46436],[-22.17221,73.30955],[-23.56593,73.30663],[-22.31311,72.62928],[-22.29954,72.18409],[-24.27834,72.59788],[-24.79296,72.3302],[-23.44296,72.08016],[-22.13281,71.46898],[-21.75356,70.66369],[-23.53603,70.471],[-24.30702,70.85649],[-25.54341,71.43094],[-25.20135,70.75226],[-26.36276,70.22646],[-23.72742,70.18401],[-22.34902,70.12946],[-25.02927,69.2588],[-27.74737,68.47046],[-30.67371,68.12503],[-31.77665,68.12078],[-32.81105,67.73547],[-34.20196,66.67974],[-36.35284,65.9789],[-37.04378,65.93768],[-38.37505,65.69213],[-39.81222,65.45848],[-40.66899,64.83997],[-40.68281,64.13902],[-41.1887,63.48246],[-42.81938,62.68233],[-42.41666,61.90093],[-42.86619,61.07404],[-43.3784,60.09772],[-44.7875,60.03676],[-46.26364,60.85328],[-48.26294,60.85843],[-49.23308,61.40681],[-49.90039,62.38336],[-51.63325,63.62691],[-52.14014,64.27842],[-52.27659,65.1767],[-53.66166,66.09957],[-53.30161,66.8365],[-53.96911,67.18899],[-52.9804,68.35759],[-51.47536,68.72958],[-51.08041,69.14781],[-50.87122,69.9291],[-52.013585,69.574925],[-52.55792,69.42616],[-53.45629,69.283625],[-54.68336,69.61003],[-54.75001,70.28932],[-54.35884,70.821315],[-53.431315,70.835755],[-51.39014,70.56978],[-53.10937,71.20485],[-54.00422,71.54719],[-55,71.406537],[-55.83468,71.65444],[-54.71819,72.58625],[-55.32634,72.95861],[-56.12003,73.64977],[-57.32363,74.71026],[-58.59679,75.09861],[-58.58516,75.51727],[-61.26861,76.10238],[-63.39165,76.1752],[-66.06427,76.13486],[-68.50438,76.06141],[-69.66485,76.37975],[-71.40257,77.00857],[-68.77671,77.32312],[-66.76397,77.37595],[-71.04293,77.63595],[-73.297,78.04419],[-73.15938,78.43271],[-69.37345,78.91388],[-65.7107,79.39436],[-65.3239,79.75814],[-68.02298,80.11721],[-67.15129,80.51582],[-63.68925,81.21396],[-62.23444,81.3211],[-62.65116,81.77042],[-60.28249,82.03363],[-57.20744,82.19074],[-54.13442,82.19962],[-53.04328,81.88833],[-50.39061,82.43883],[-48.00386,82.06481],[-46.59984,81.985945],[-44.523,81.6607],[-46.9007,82.19979],[-46.76379,82.62796]]]}}, +{"type":"Feature","id":"GTM","properties":{"name":"Guatemala"},"geometry":{"type":"Polygon","coordinates":[[[-90.095555,13.735338],[-90.608624,13.909771],[-91.23241,13.927832],[-91.689747,14.126218],[-92.22775,14.538829],[-92.20323,14.830103],[-92.087216,15.064585],[-92.229249,15.251447],[-91.74796,16.066565],[-90.464473,16.069562],[-90.438867,16.41011],[-90.600847,16.470778],[-90.711822,16.687483],[-91.08167,16.918477],[-91.453921,17.252177],[-91.002269,17.254658],[-91.00152,17.817595],[-90.067934,17.819326],[-89.14308,17.808319],[-89.150806,17.015577],[-89.229122,15.886938],[-88.930613,15.887273],[-88.604586,15.70638],[-88.518364,15.855389],[-88.225023,15.727722],[-88.68068,15.346247],[-89.154811,15.066419],[-89.22522,14.874286],[-89.145535,14.678019],[-89.353326,14.424133],[-89.587343,14.362586],[-89.534219,14.244816],[-89.721934,14.134228],[-90.064678,13.88197],[-90.095555,13.735338]]]}}, +{"type":"Feature","id":"GUF","properties":{"name":"French Guiana"},"geometry":{"type":"Polygon","coordinates":[[[-52.556425,2.504705],[-52.939657,2.124858],[-53.418465,2.053389],[-53.554839,2.334897],[-53.778521,2.376703],[-54.088063,2.105557],[-54.524754,2.311849],[-54.27123,2.738748],[-54.184284,3.194172],[-54.011504,3.62257],[-54.399542,4.212611],[-54.478633,4.896756],[-53.958045,5.756548],[-53.618453,5.646529],[-52.882141,5.409851],[-51.823343,4.565768],[-51.657797,4.156232],[-52.249338,3.241094],[-52.556425,2.504705]]]}}, +{"type":"Feature","id":"GUY","properties":{"name":"Guyana"},"geometry":{"type":"Polygon","coordinates":[[[-59.758285,8.367035],[-59.101684,7.999202],[-58.482962,7.347691],[-58.454876,6.832787],[-58.078103,6.809094],[-57.542219,6.321268],[-57.147436,5.97315],[-57.307246,5.073567],[-57.914289,4.812626],[-57.86021,4.576801],[-58.044694,4.060864],[-57.601569,3.334655],[-57.281433,3.333492],[-57.150098,2.768927],[-56.539386,1.899523],[-56.782704,1.863711],[-57.335823,1.948538],[-57.660971,1.682585],[-58.11345,1.507195],[-58.429477,1.463942],[-58.540013,1.268088],[-59.030862,1.317698],[-59.646044,1.786894],[-59.718546,2.24963],[-59.974525,2.755233],[-59.815413,3.606499],[-59.53804,3.958803],[-59.767406,4.423503],[-60.111002,4.574967],[-59.980959,5.014061],[-60.213683,5.244486],[-60.733574,5.200277],[-61.410303,5.959068],[-61.139415,6.234297],[-61.159336,6.696077],[-60.543999,6.856584],[-60.295668,7.043911],[-60.637973,7.415],[-60.550588,7.779603],[-59.758285,8.367035]]]}}, +{"type":"Feature","id":"HND","properties":{"name":"Honduras"},"geometry":{"type":"Polygon","coordinates":[[[-87.316654,12.984686],[-87.489409,13.297535],[-87.793111,13.38448],[-87.723503,13.78505],[-87.859515,13.893312],[-88.065343,13.964626],[-88.503998,13.845486],[-88.541231,13.980155],[-88.843073,14.140507],[-89.058512,14.340029],[-89.353326,14.424133],[-89.145535,14.678019],[-89.22522,14.874286],[-89.154811,15.066419],[-88.68068,15.346247],[-88.225023,15.727722],[-88.121153,15.688655],[-87.901813,15.864458],[-87.61568,15.878799],[-87.522921,15.797279],[-87.367762,15.84694],[-86.903191,15.756713],[-86.440946,15.782835],[-86.119234,15.893449],[-86.001954,16.005406],[-85.683317,15.953652],[-85.444004,15.885749],[-85.182444,15.909158],[-84.983722,15.995923],[-84.52698,15.857224],[-84.368256,15.835158],[-84.063055,15.648244],[-83.773977,15.424072],[-83.410381,15.270903],[-83.147219,14.995829],[-83.489989,15.016267],[-83.628585,14.880074],[-83.975721,14.749436],[-84.228342,14.748764],[-84.449336,14.621614],[-84.649582,14.666805],[-84.820037,14.819587],[-84.924501,14.790493],[-85.052787,14.551541],[-85.148751,14.560197],[-85.165365,14.35437],[-85.514413,14.079012],[-85.698665,13.960078],[-85.801295,13.836055],[-86.096264,14.038187],[-86.312142,13.771356],[-86.520708,13.778487],[-86.755087,13.754845],[-86.733822,13.263093],[-86.880557,13.254204],[-87.005769,13.025794],[-87.316654,12.984686]]]}}, +{"type":"Feature","id":"HRV","properties":{"name":"Croatia"},"geometry":{"type":"Polygon","coordinates":[[[18.829838,45.908878],[19.072769,45.521511],[19.390476,45.236516],[19.005486,44.860234],[18.553214,45.08159],[17.861783,45.06774],[17.002146,45.233777],[16.534939,45.211608],[16.318157,45.004127],[15.959367,45.233777],[15.750026,44.818712],[16.23966,44.351143],[16.456443,44.04124],[16.916156,43.667722],[17.297373,43.446341],[17.674922,43.028563],[18.56,42.65],[18.450016,42.479991],[17.50997,42.849995],[16.930006,43.209998],[16.015385,43.507215],[15.174454,44.243191],[15.37625,44.317915],[14.920309,44.738484],[14.901602,45.07606],[14.258748,45.233777],[13.952255,44.802124],[13.656976,45.136935],[13.679403,45.484149],[13.71506,45.500324],[14.411968,45.466166],[14.595109,45.634941],[14.935244,45.471695],[15.327675,45.452316],[15.323954,45.731783],[15.67153,45.834154],[15.768733,46.238108],[16.564808,46.503751],[16.882515,46.380632],[17.630066,45.951769],[18.456062,45.759481],[18.829838,45.908878]]]}}, +{"type":"Feature","id":"HTI","properties":{"name":"Haiti"},"geometry":{"type":"Polygon","coordinates":[[[-73.189791,19.915684],[-72.579673,19.871501],[-71.712361,19.714456],[-71.624873,19.169838],[-71.701303,18.785417],[-71.945112,18.6169],[-71.687738,18.31666],[-71.708305,18.044997],[-72.372476,18.214961],[-72.844411,18.145611],[-73.454555,18.217906],[-73.922433,18.030993],[-74.458034,18.34255],[-74.369925,18.664908],[-73.449542,18.526053],[-72.694937,18.445799],[-72.334882,18.668422],[-72.79165,19.101625],[-72.784105,19.483591],[-73.415022,19.639551],[-73.189791,19.915684]]]}}, +{"type":"Feature","id":"HUN","properties":{"name":"Hungary"},"geometry":{"type":"Polygon","coordinates":[[[16.202298,46.852386],[16.534268,47.496171],[16.340584,47.712902],[16.903754,47.714866],[16.979667,48.123497],[17.488473,47.867466],[17.857133,47.758429],[18.696513,47.880954],[18.777025,48.081768],[19.174365,48.111379],[19.661364,48.266615],[19.769471,48.202691],[20.239054,48.327567],[20.473562,48.56285],[20.801294,48.623854],[21.872236,48.319971],[22.085608,48.422264],[22.64082,48.15024],[22.710531,47.882194],[22.099768,47.672439],[21.626515,46.994238],[21.021952,46.316088],[20.220192,46.127469],[19.596045,46.17173],[18.829838,45.908878],[18.456062,45.759481],[17.630066,45.951769],[16.882515,46.380632],[16.564808,46.503751],[16.370505,46.841327],[16.202298,46.852386]]]}}, +{"type":"Feature","id":"IDN","properties":{"name":"Indonesia"},"geometry":{"type":"MultiPolygon","coordinates":[[[[120.715609,-10.239581],[120.295014,-10.25865],[118.967808,-9.557969],[119.90031,-9.36134],[120.425756,-9.665921],[120.775502,-9.969675],[120.715609,-10.239581]]],[[[124.43595,-10.140001],[123.579982,-10.359987],[123.459989,-10.239995],[123.550009,-9.900016],[123.980009,-9.290027],[124.968682,-8.89279],[125.07002,-9.089987],[125.08852,-9.393173],[124.43595,-10.140001]]],[[[117.900018,-8.095681],[118.260616,-8.362383],[118.87846,-8.280683],[119.126507,-8.705825],[117.970402,-8.906639],[117.277731,-9.040895],[116.740141,-9.032937],[117.083737,-8.457158],[117.632024,-8.449303],[117.900018,-8.095681]]],[[[122.903537,-8.094234],[122.756983,-8.649808],[121.254491,-8.933666],[119.924391,-8.810418],[119.920929,-8.444859],[120.715092,-8.236965],[121.341669,-8.53674],[122.007365,-8.46062],[122.903537,-8.094234]]],[[[108.623479,-6.777674],[110.539227,-6.877358],[110.759576,-6.465186],[112.614811,-6.946036],[112.978768,-7.594213],[114.478935,-7.776528],[115.705527,-8.370807],[114.564511,-8.751817],[113.464734,-8.348947],[112.559672,-8.376181],[111.522061,-8.302129],[110.58615,-8.122605],[109.427667,-7.740664],[108.693655,-7.6416],[108.277763,-7.766657],[106.454102,-7.3549],[106.280624,-6.9249],[105.365486,-6.851416],[106.051646,-5.895919],[107.265009,-5.954985],[108.072091,-6.345762],[108.486846,-6.421985],[108.623479,-6.777674]]],[[[134.724624,-6.214401],[134.210134,-6.895238],[134.112776,-6.142467],[134.290336,-5.783058],[134.499625,-5.445042],[134.727002,-5.737582],[134.724624,-6.214401]]],[[[127.249215,-3.459065],[126.874923,-3.790983],[126.183802,-3.607376],[125.989034,-3.177273],[127.000651,-3.129318],[127.249215,-3.459065]]],[[[130.471344,-3.093764],[130.834836,-3.858472],[129.990547,-3.446301],[129.155249,-3.362637],[128.590684,-3.428679],[127.898891,-3.393436],[128.135879,-2.84365],[129.370998,-2.802154],[130.471344,-3.093764]]],[[[134.143368,-1.151867],[134.422627,-2.769185],[135.457603,-3.367753],[136.293314,-2.307042],[137.440738,-1.703513],[138.329727,-1.702686],[139.184921,-2.051296],[139.926684,-2.409052],[141.00021,-2.600151],[141.017057,-5.859022],[141.033852,-9.117893],[140.143415,-8.297168],[139.127767,-8.096043],[138.881477,-8.380935],[137.614474,-8.411683],[138.039099,-7.597882],[138.668621,-7.320225],[138.407914,-6.232849],[137.92784,-5.393366],[135.98925,-4.546544],[135.164598,-4.462931],[133.66288,-3.538853],[133.367705,-4.024819],[132.983956,-4.112979],[132.756941,-3.746283],[132.753789,-3.311787],[131.989804,-2.820551],[133.066845,-2.460418],[133.780031,-2.479848],[133.696212,-2.214542],[132.232373,-2.212526],[131.836222,-1.617162],[130.94284,-1.432522],[130.519558,-0.93772],[131.867538,-0.695461],[132.380116,-0.369538],[133.985548,-0.78021],[134.143368,-1.151867]]],[[[125.240501,1.419836],[124.437035,0.427881],[123.685505,0.235593],[122.723083,0.431137],[121.056725,0.381217],[120.183083,0.237247],[120.04087,-0.519658],[120.935905,-1.408906],[121.475821,-0.955962],[123.340565,-0.615673],[123.258399,-1.076213],[122.822715,-0.930951],[122.38853,-1.516858],[121.508274,-1.904483],[122.454572,-3.186058],[122.271896,-3.5295],[123.170963,-4.683693],[123.162333,-5.340604],[122.628515,-5.634591],[122.236394,-5.282933],[122.719569,-4.464172],[121.738234,-4.851331],[121.489463,-4.574553],[121.619171,-4.188478],[120.898182,-3.602105],[120.972389,-2.627643],[120.305453,-2.931604],[120.390047,-4.097579],[120.430717,-5.528241],[119.796543,-5.6734],[119.366906,-5.379878],[119.653606,-4.459417],[119.498835,-3.494412],[119.078344,-3.487022],[118.767769,-2.801999],[119.180974,-2.147104],[119.323394,-1.353147],[119.825999,0.154254],[120.035702,0.566477],[120.885779,1.309223],[121.666817,1.013944],[122.927567,0.875192],[124.077522,0.917102],[125.065989,1.643259],[125.240501,1.419836]]],[[[128.688249,1.132386],[128.635952,0.258486],[128.12017,0.356413],[127.968034,-0.252077],[128.379999,-0.780004],[128.100016,-0.899996],[127.696475,-0.266598],[127.39949,1.011722],[127.600512,1.810691],[127.932378,2.174596],[128.004156,1.628531],[128.594559,1.540811],[128.688249,1.132386]]],[[[117.875627,1.827641],[118.996747,0.902219],[117.811858,0.784242],[117.478339,0.102475],[117.521644,-0.803723],[116.560048,-1.487661],[116.533797,-2.483517],[116.148084,-4.012726],[116.000858,-3.657037],[114.864803,-4.106984],[114.468652,-3.495704],[113.755672,-3.43917],[113.256994,-3.118776],[112.068126,-3.478392],[111.703291,-2.994442],[111.04824,-3.049426],[110.223846,-2.934032],[110.070936,-1.592874],[109.571948,-1.314907],[109.091874,-0.459507],[108.952658,0.415375],[109.069136,1.341934],[109.66326,2.006467],[109.830227,1.338136],[110.514061,0.773131],[111.159138,0.976478],[111.797548,0.904441],[112.380252,1.410121],[112.859809,1.49779],[113.80585,1.217549],[114.621355,1.430688],[115.134037,2.821482],[115.519078,3.169238],[115.865517,4.306559],[117.015214,4.306094],[117.882035,4.137551],[117.313232,3.234428],[118.04833,2.28769],[117.875627,1.827641]]],[[[105.817655,-5.852356],[104.710384,-5.873285],[103.868213,-5.037315],[102.584261,-4.220259],[102.156173,-3.614146],[101.399113,-2.799777],[100.902503,-2.050262],[100.141981,-0.650348],[99.26374,0.183142],[98.970011,1.042882],[98.601351,1.823507],[97.699598,2.453184],[97.176942,3.308791],[96.424017,3.86886],[95.380876,4.970782],[95.293026,5.479821],[95.936863,5.439513],[97.484882,5.246321],[98.369169,4.26837],[99.142559,3.59035],[99.693998,3.174329],[100.641434,2.099381],[101.658012,2.083697],[102.498271,1.3987],[103.07684,0.561361],[103.838396,0.104542],[103.437645,-0.711946],[104.010789,-1.059212],[104.369991,-1.084843],[104.53949,-1.782372],[104.887893,-2.340425],[105.622111,-2.428844],[106.108593,-3.061777],[105.857446,-4.305525],[105.817655,-5.852356]]]]}}, +{"type":"Feature","id":"IND","properties":{"name":"India"},"geometry":{"type":"Polygon","coordinates":[[[77.837451,35.49401],[78.912269,34.321936],[78.811086,33.506198],[79.208892,32.994395],[79.176129,32.48378],[78.458446,32.618164],[78.738894,31.515906],[79.721367,30.882715],[81.111256,30.183481],[80.476721,29.729865],[80.088425,28.79447],[81.057203,28.416095],[81.999987,27.925479],[83.304249,27.364506],[84.675018,27.234901],[85.251779,26.726198],[86.024393,26.630985],[87.227472,26.397898],[88.060238,26.414615],[88.174804,26.810405],[88.043133,27.445819],[88.120441,27.876542],[88.730326,28.086865],[88.814248,27.299316],[88.835643,27.098966],[89.744528,26.719403],[90.373275,26.875724],[91.217513,26.808648],[92.033484,26.83831],[92.103712,27.452614],[91.696657,27.771742],[92.503119,27.896876],[93.413348,28.640629],[94.56599,29.277438],[95.404802,29.031717],[96.117679,29.452802],[96.586591,28.83098],[96.248833,28.411031],[97.327114,28.261583],[97.402561,27.882536],[97.051989,27.699059],[97.133999,27.083774],[96.419366,27.264589],[95.124768,26.573572],[95.155153,26.001307],[94.603249,25.162495],[94.552658,24.675238],[94.106742,23.850741],[93.325188,24.078556],[93.286327,23.043658],[93.060294,22.703111],[93.166128,22.27846],[92.672721,22.041239],[92.146035,23.627499],[91.869928,23.624346],[91.706475,22.985264],[91.158963,23.503527],[91.46773,24.072639],[91.915093,24.130414],[92.376202,24.976693],[91.799596,25.147432],[90.872211,25.132601],[89.920693,25.26975],[89.832481,25.965082],[89.355094,26.014407],[88.563049,26.446526],[88.209789,25.768066],[88.931554,25.238692],[88.306373,24.866079],[88.084422,24.501657],[88.69994,24.233715],[88.52977,23.631142],[88.876312,22.879146],[89.031961,22.055708],[88.888766,21.690588],[88.208497,21.703172],[86.975704,21.495562],[87.033169,20.743308],[86.499351,20.151638],[85.060266,19.478579],[83.941006,18.30201],[83.189217,17.671221],[82.192792,17.016636],[82.191242,16.556664],[81.692719,16.310219],[80.791999,15.951972],[80.324896,15.899185],[80.025069,15.136415],[80.233274,13.835771],[80.286294,13.006261],[79.862547,12.056215],[79.857999,10.357275],[79.340512,10.308854],[78.885345,9.546136],[79.18972,9.216544],[78.277941,8.933047],[77.941165,8.252959],[77.539898,7.965535],[76.592979,8.899276],[76.130061,10.29963],[75.746467,11.308251],[75.396101,11.781245],[74.864816,12.741936],[74.616717,13.992583],[74.443859,14.617222],[73.534199,15.990652],[73.119909,17.92857],[72.820909,19.208234],[72.824475,20.419503],[72.630533,21.356009],[71.175273,20.757441],[70.470459,20.877331],[69.16413,22.089298],[69.644928,22.450775],[69.349597,22.84318],[68.176645,23.691965],[68.842599,24.359134],[71.04324,24.356524],[70.844699,25.215102],[70.282873,25.722229],[70.168927,26.491872],[69.514393,26.940966],[70.616496,27.989196],[71.777666,27.91318],[72.823752,28.961592],[73.450638,29.976413],[74.42138,30.979815],[74.405929,31.692639],[75.258642,32.271105],[74.451559,32.7649],[74.104294,33.441473],[73.749948,34.317699],[74.240203,34.748887],[75.757061,34.504923],[76.871722,34.653544],[77.837451,35.49401]]]}}, +{"type":"Feature","id":"IRL","properties":{"name":"Ireland"},"geometry":{"type":"Polygon","coordinates":[[[-6.197885,53.867565],[-6.032985,53.153164],[-6.788857,52.260118],[-8.561617,51.669301],[-9.977086,51.820455],[-9.166283,52.864629],[-9.688525,53.881363],[-8.327987,54.664519],[-7.572168,55.131622],[-7.366031,54.595841],[-7.572168,54.059956],[-6.95373,54.073702],[-6.197885,53.867565]]]}}, +{"type":"Feature","id":"IRN","properties":{"name":"Iran"},"geometry":{"type":"Polygon","coordinates":[[[53.921598,37.198918],[54.800304,37.392421],[55.511578,37.964117],[56.180375,37.935127],[56.619366,38.121394],[57.330434,38.029229],[58.436154,37.522309],[59.234762,37.412988],[60.377638,36.527383],[61.123071,36.491597],[61.210817,35.650072],[60.803193,34.404102],[60.52843,33.676446],[60.9637,33.528832],[60.536078,32.981269],[60.863655,32.18292],[60.941945,31.548075],[61.699314,31.379506],[61.781222,30.73585],[60.874248,29.829239],[61.369309,29.303276],[61.771868,28.699334],[62.72783,28.259645],[62.755426,27.378923],[63.233898,27.217047],[63.316632,26.756532],[61.874187,26.239975],[61.497363,25.078237],[59.616134,25.380157],[58.525761,25.609962],[57.397251,25.739902],[56.970766,26.966106],[56.492139,27.143305],[55.72371,26.964633],[54.71509,26.480658],[53.493097,26.812369],[52.483598,27.580849],[51.520763,27.86569],[50.852948,28.814521],[50.115009,30.147773],[49.57685,29.985715],[48.941333,30.31709],[48.567971,29.926778],[48.014568,30.452457],[48.004698,30.985137],[47.685286,30.984853],[47.849204,31.709176],[47.334661,32.469155],[46.109362,33.017287],[45.416691,33.967798],[45.64846,34.748138],[46.151788,35.093259],[46.07634,35.677383],[45.420618,35.977546],[44.77267,37.17045],[44.225756,37.971584],[44.421403,38.281281],[44.109225,39.428136],[44.79399,39.713003],[44.952688,39.335765],[45.457722,38.874139],[46.143623,38.741201],[46.50572,38.770605],[47.685079,39.508364],[48.060095,39.582235],[48.355529,39.288765],[48.010744,38.794015],[48.634375,38.270378],[48.883249,38.320245],[49.199612,37.582874],[50.147771,37.374567],[50.842354,36.872814],[52.264025,36.700422],[53.82579,36.965031],[53.921598,37.198918]]]}}, +{"type":"Feature","id":"IRQ","properties":{"name":"Iraq"},"geometry":{"type":"Polygon","coordinates":[[[45.420618,35.977546],[46.07634,35.677383],[46.151788,35.093259],[45.64846,34.748138],[45.416691,33.967798],[46.109362,33.017287],[47.334661,32.469155],[47.849204,31.709176],[47.685286,30.984853],[48.004698,30.985137],[48.014568,30.452457],[48.567971,29.926778],[47.974519,29.975819],[47.302622,30.05907],[46.568713,29.099025],[44.709499,29.178891],[41.889981,31.190009],[40.399994,31.889992],[39.195468,32.161009],[38.792341,33.378686],[41.006159,34.419372],[41.383965,35.628317],[41.289707,36.358815],[41.837064,36.605854],[42.349591,37.229873],[42.779126,37.385264],[43.942259,37.256228],[44.293452,37.001514],[44.772699,37.170445],[45.420618,35.977546]]]}}, +{"type":"Feature","id":"ISL","properties":{"name":"Iceland"},"geometry":{"type":"Polygon","coordinates":[[[-14.508695,66.455892],[-14.739637,65.808748],[-13.609732,65.126671],[-14.909834,64.364082],[-17.794438,63.678749],[-18.656246,63.496383],[-19.972755,63.643635],[-22.762972,63.960179],[-21.778484,64.402116],[-23.955044,64.89113],[-22.184403,65.084968],[-22.227423,65.378594],[-24.326184,65.611189],[-23.650515,66.262519],[-22.134922,66.410469],[-20.576284,65.732112],[-19.056842,66.276601],[-17.798624,65.993853],[-16.167819,66.526792],[-14.508695,66.455892]]]}}, +{"type":"Feature","id":"ISR","properties":{"name":"Israel"},"geometry":{"type":"Polygon","coordinates":[[[35.719918,32.709192],[35.545665,32.393992],[35.18393,32.532511],[34.974641,31.866582],[35.225892,31.754341],[34.970507,31.616778],[34.927408,31.353435],[35.397561,31.489086],[35.420918,31.100066],[34.922603,29.501326],[34.265433,31.219361],[34.556372,31.548824],[34.488107,31.605539],[34.752587,32.072926],[34.955417,32.827376],[35.098457,33.080539],[35.126053,33.0909],[35.460709,33.08904],[35.552797,33.264275],[35.821101,33.277426],[35.836397,32.868123],[35.700798,32.716014],[35.719918,32.709192]]]}}, +{"type":"Feature","id":"ITA","properties":{"name":"Italy"},"geometry":{"type":"MultiPolygon","coordinates":[[[[15.520376,38.231155],[15.160243,37.444046],[15.309898,37.134219],[15.099988,36.619987],[14.335229,36.996631],[13.826733,37.104531],[12.431004,37.61295],[12.570944,38.126381],[13.741156,38.034966],[14.761249,38.143874],[15.520376,38.231155]]],[[[9.210012,41.209991],[9.809975,40.500009],[9.669519,39.177376],[9.214818,39.240473],[8.806936,38.906618],[8.428302,39.171847],[8.388253,40.378311],[8.159998,40.950007],[8.709991,40.899984],[9.210012,41.209991]]],[[[12.376485,46.767559],[13.806475,46.509306],[13.69811,46.016778],[13.93763,45.591016],[13.141606,45.736692],[12.328581,45.381778],[12.383875,44.885374],[12.261453,44.600482],[12.589237,44.091366],[13.526906,43.587727],[14.029821,42.761008],[15.14257,41.95514],[15.926191,41.961315],[16.169897,41.740295],[15.889346,41.541082],[16.785002,41.179606],[17.519169,40.877143],[18.376687,40.355625],[18.480247,40.168866],[18.293385,39.810774],[17.73838,40.277671],[16.869596,40.442235],[16.448743,39.795401],[17.17149,39.4247],[17.052841,38.902871],[16.635088,38.843572],[16.100961,37.985899],[15.684087,37.908849],[15.687963,38.214593],[15.891981,38.750942],[16.109332,38.964547],[15.718814,39.544072],[15.413613,40.048357],[14.998496,40.172949],[14.703268,40.60455],[14.060672,40.786348],[13.627985,41.188287],[12.888082,41.25309],[12.106683,41.704535],[11.191906,42.355425],[10.511948,42.931463],[10.200029,43.920007],[9.702488,44.036279],[8.888946,44.366336],[8.428561,44.231228],[7.850767,43.767148],[7.435185,43.693845],[7.549596,44.127901],[7.007562,44.254767],[6.749955,45.028518],[7.096652,45.333099],[6.802355,45.70858],[6.843593,45.991147],[7.273851,45.776948],[7.755992,45.82449],[8.31663,46.163642],[8.489952,46.005151],[8.966306,46.036932],[9.182882,46.440215],[9.922837,46.314899],[10.363378,46.483571],[10.442701,46.893546],[11.048556,46.751359],[11.164828,46.941579],[12.153088,47.115393],[12.376485,46.767559]]]]}}, +{"type":"Feature","id":"JAM","properties":{"name":"Jamaica"},"geometry":{"type":"Polygon","coordinates":[[[-77.569601,18.490525],[-76.896619,18.400867],[-76.365359,18.160701],[-76.199659,17.886867],[-76.902561,17.868238],[-77.206341,17.701116],[-77.766023,17.861597],[-78.337719,18.225968],[-78.217727,18.454533],[-77.797365,18.524218],[-77.569601,18.490525]]]}}, +{"type":"Feature","id":"JOR","properties":{"name":"Jordan"},"geometry":{"type":"Polygon","coordinates":[[[35.545665,32.393992],[35.719918,32.709192],[36.834062,32.312938],[38.792341,33.378686],[39.195468,32.161009],[39.004886,32.010217],[37.002166,31.508413],[37.998849,30.5085],[37.66812,30.338665],[37.503582,30.003776],[36.740528,29.865283],[36.501214,29.505254],[36.068941,29.197495],[34.956037,29.356555],[34.922603,29.501326],[35.420918,31.100066],[35.397561,31.489086],[35.545252,31.782505],[35.545665,32.393992]]]}}, +{"type":"Feature","id":"JPN","properties":{"name":"Japan"},"geometry":{"type":"MultiPolygon","coordinates":[[[[134.638428,34.149234],[134.766379,33.806335],[134.203416,33.201178],[133.79295,33.521985],[133.280268,33.28957],[133.014858,32.704567],[132.363115,32.989382],[132.371176,33.463642],[132.924373,34.060299],[133.492968,33.944621],[133.904106,34.364931],[134.638428,34.149234]]],[[[140.976388,37.142074],[140.59977,36.343983],[140.774074,35.842877],[140.253279,35.138114],[138.975528,34.6676],[137.217599,34.606286],[135.792983,33.464805],[135.120983,33.849071],[135.079435,34.596545],[133.340316,34.375938],[132.156771,33.904933],[130.986145,33.885761],[132.000036,33.149992],[131.33279,31.450355],[130.686318,31.029579],[130.20242,31.418238],[130.447676,32.319475],[129.814692,32.61031],[129.408463,33.296056],[130.353935,33.604151],[130.878451,34.232743],[131.884229,34.749714],[132.617673,35.433393],[134.608301,35.731618],[135.677538,35.527134],[136.723831,37.304984],[137.390612,36.827391],[138.857602,37.827485],[139.426405,38.215962],[140.05479,39.438807],[139.883379,40.563312],[140.305783,41.195005],[141.368973,41.37856],[141.914263,39.991616],[141.884601,39.180865],[140.959489,38.174001],[140.976388,37.142074]]],[[[143.910162,44.1741],[144.613427,43.960883],[145.320825,44.384733],[145.543137,43.262088],[144.059662,42.988358],[143.18385,41.995215],[141.611491,42.678791],[141.067286,41.584594],[139.955106,41.569556],[139.817544,42.563759],[140.312087,43.333273],[141.380549,43.388825],[141.671952,44.772125],[141.967645,45.551483],[143.14287,44.510358],[143.910162,44.1741]]]]}}, +{"type":"Feature","id":"KAZ","properties":{"name":"Kazakhstan"},"geometry":{"type":"Polygon","coordinates":[[[70.962315,42.266154],[70.388965,42.081308],[69.070027,41.384244],[68.632483,40.668681],[68.259896,40.662325],[67.985856,41.135991],[66.714047,41.168444],[66.510649,41.987644],[66.023392,41.994646],[66.098012,42.99766],[64.900824,43.728081],[63.185787,43.650075],[62.0133,43.504477],[61.05832,44.405817],[60.239972,44.784037],[58.689989,45.500014],[58.503127,45.586804],[55.928917,44.995858],[55.968191,41.308642],[55.455251,41.259859],[54.755345,42.043971],[54.079418,42.324109],[52.944293,42.116034],[52.50246,41.783316],[52.446339,42.027151],[52.692112,42.443895],[52.501426,42.792298],[51.342427,43.132975],[50.891292,44.031034],[50.339129,44.284016],[50.305643,44.609836],[51.278503,44.514854],[51.316899,45.245998],[52.16739,45.408391],[53.040876,45.259047],[53.220866,46.234646],[53.042737,46.853006],[52.042023,46.804637],[51.191945,47.048705],[50.034083,46.60899],[49.10116,46.39933],[48.593241,46.561034],[48.694734,47.075628],[48.057253,47.743753],[47.315231,47.715847],[46.466446,48.394152],[47.043672,49.152039],[46.751596,49.356006],[47.54948,50.454698],[48.577841,49.87476],[48.702382,50.605128],[50.766648,51.692762],[52.328724,51.718652],[54.532878,51.02624],[55.716941,50.621717],[56.777961,51.043551],[58.363291,51.063653],[59.642282,50.545442],[59.932807,50.842194],[61.337424,50.79907],[61.588003,51.272659],[59.967534,51.96042],[60.927269,52.447548],[60.739993,52.719986],[61.699986,52.979996],[60.978066,53.664993],[61.436591,54.006265],[65.178534,54.354228],[65.666876,54.601267],[68.1691,54.970392],[69.068167,55.38525],[70.865267,55.169734],[71.180131,54.133285],[72.22415,54.376655],[73.508516,54.035617],[73.425679,53.48981],[74.384845,53.546861],[76.8911,54.490524],[76.525179,54.177003],[77.800916,53.404415],[80.03556,50.864751],[80.568447,51.388336],[81.945986,50.812196],[83.383004,51.069183],[83.935115,50.889246],[84.416377,50.3114],[85.11556,50.117303],[85.54127,49.692859],[86.829357,49.826675],[87.35997,49.214981],[86.598776,48.549182],[85.768233,48.455751],[85.720484,47.452969],[85.16429,47.000956],[83.180484,47.330031],[82.458926,45.53965],[81.947071,45.317027],[79.966106,44.917517],[80.866206,43.180362],[80.18015,42.920068],[80.25999,42.349999],[79.643645,42.496683],[79.142177,42.856092],[77.658392,42.960686],[76.000354,42.988022],[75.636965,42.8779],[74.212866,43.298339],[73.645304,43.091272],[73.489758,42.500894],[71.844638,42.845395],[71.186281,42.704293],[70.962315,42.266154]]]}}, +{"type":"Feature","id":"KEN","properties":{"name":"Kenya"},"geometry":{"type":"Polygon","coordinates":[[[40.993,-0.85829],[41.58513,-1.68325],[40.88477,-2.08255],[40.63785,-2.49979],[40.26304,-2.57309],[40.12119,-3.27768],[39.80006,-3.68116],[39.60489,-4.34653],[39.20222,-4.67677],[37.7669,-3.67712],[37.69869,-3.09699],[34.07262,-1.05982],[33.903711,-0.95],[33.893569,0.109814],[34.18,0.515],[34.6721,1.17694],[35.03599,1.90584],[34.59607,3.05374],[34.47913,3.5556],[34.005,4.249885],[34.620196,4.847123],[35.298007,5.506],[35.817448,5.338232],[35.817448,4.776966],[36.159079,4.447864],[36.855093,4.447864],[38.120915,3.598605],[38.43697,3.58851],[38.67114,3.61607],[38.89251,3.50074],[39.559384,3.42206],[39.85494,3.83879],[40.76848,4.25702],[41.1718,3.91909],[41.855083,3.918912],[40.98105,2.78452],[40.993,-0.85829]]]}}, +{"type":"Feature","id":"KGZ","properties":{"name":"Kyrgyzstan"},"geometry":{"type":"Polygon","coordinates":[[[70.962315,42.266154],[71.186281,42.704293],[71.844638,42.845395],[73.489758,42.500894],[73.645304,43.091272],[74.212866,43.298339],[75.636965,42.8779],[76.000354,42.988022],[77.658392,42.960686],[79.142177,42.856092],[79.643645,42.496683],[80.25999,42.349999],[80.11943,42.123941],[78.543661,41.582243],[78.187197,41.185316],[76.904484,41.066486],[76.526368,40.427946],[75.467828,40.562072],[74.776862,40.366425],[73.822244,39.893973],[73.960013,39.660008],[73.675379,39.431237],[71.784694,39.279463],[70.549162,39.604198],[69.464887,39.526683],[69.55961,40.103211],[70.648019,39.935754],[71.014198,40.244366],[71.774875,40.145844],[73.055417,40.866033],[71.870115,41.3929],[71.157859,41.143587],[70.420022,41.519998],[71.259248,42.167711],[70.962315,42.266154]]]}}, +{"type":"Feature","id":"KHM","properties":{"name":"Cambodia"},"geometry":{"type":"Polygon","coordinates":[[[103.49728,10.632555],[103.09069,11.153661],[102.584932,12.186595],[102.348099,13.394247],[102.988422,14.225721],[104.281418,14.416743],[105.218777,14.273212],[106.043946,13.881091],[106.496373,14.570584],[107.382727,14.202441],[107.614548,13.535531],[107.491403,12.337206],[105.810524,11.567615],[106.24967,10.961812],[105.199915,10.88931],[104.334335,10.486544],[103.49728,10.632555]]]}}, +{"type":"Feature","id":"KOR","properties":{"name":"South Korea"},"geometry":{"type":"Polygon","coordinates":[[[128.349716,38.612243],[129.21292,37.432392],[129.46045,36.784189],[129.468304,35.632141],[129.091377,35.082484],[128.18585,34.890377],[127.386519,34.475674],[126.485748,34.390046],[126.37392,34.93456],[126.559231,35.684541],[126.117398,36.725485],[126.860143,36.893924],[126.174759,37.749686],[126.237339,37.840378],[126.68372,37.804773],[127.073309,38.256115],[127.780035,38.304536],[128.205746,38.370397],[128.349716,38.612243]]]}}, +{"type":"Feature","id":"CS-KM","properties":{"name":"Kosovo"},"geometry":{"type":"Polygon","coordinates":[[[20.76216,42.05186],[20.71731,41.84711],[20.59023,41.85541],[20.52295,42.21787],[20.28374,42.32025],[20.0707,42.58863],[20.25758,42.81275],[20.49679,42.88469],[20.63508,43.21671],[20.81448,43.27205],[20.95651,43.13094],[21.143395,43.068685],[21.27421,42.90959],[21.43866,42.86255],[21.63302,42.67717],[21.77505,42.6827],[21.66292,42.43922],[21.54332,42.32025],[21.576636,42.245224],[21.3527,42.2068],[20.76216,42.05186]]]}}, +{"type":"Feature","id":"KWT","properties":{"name":"Kuwait"},"geometry":{"type":"Polygon","coordinates":[[[47.974519,29.975819],[48.183189,29.534477],[48.093943,29.306299],[48.416094,28.552004],[47.708851,28.526063],[47.459822,29.002519],[46.568713,29.099025],[47.302622,30.05907],[47.974519,29.975819]]]}}, +{"type":"Feature","id":"LAO","properties":{"name":"Laos"},"geometry":{"type":"Polygon","coordinates":[[[105.218777,14.273212],[105.544338,14.723934],[105.589039,15.570316],[104.779321,16.441865],[104.716947,17.428859],[103.956477,18.240954],[103.200192,18.309632],[102.998706,17.961695],[102.413005,17.932782],[102.113592,18.109102],[101.059548,17.512497],[101.035931,18.408928],[101.282015,19.462585],[100.606294,19.508344],[100.548881,20.109238],[100.115988,20.41785],[100.329101,20.786122],[101.180005,21.436573],[101.270026,21.201652],[101.80312,21.174367],[101.652018,22.318199],[102.170436,22.464753],[102.754896,21.675137],[103.203861,20.766562],[104.435,20.758733],[104.822574,19.886642],[104.183388,19.624668],[103.896532,19.265181],[105.094598,18.666975],[105.925762,17.485315],[106.556008,16.604284],[107.312706,15.908538],[107.564525,15.202173],[107.382727,14.202441],[106.496373,14.570584],[106.043946,13.881091],[105.218777,14.273212]]]}}, +{"type":"Feature","id":"LBN","properties":{"name":"Lebanon"},"geometry":{"type":"Polygon","coordinates":[[[35.821101,33.277426],[35.552797,33.264275],[35.460709,33.08904],[35.126053,33.0909],[35.482207,33.90545],[35.979592,34.610058],[35.998403,34.644914],[36.448194,34.593935],[36.61175,34.201789],[36.06646,33.824912],[35.821101,33.277426]]]}}, +{"type":"Feature","id":"LBR","properties":{"name":"Liberia"},"geometry":{"type":"Polygon","coordinates":[[[-7.712159,4.364566],[-7.974107,4.355755],[-9.004794,4.832419],[-9.91342,5.593561],[-10.765384,6.140711],[-11.438779,6.785917],[-11.199802,7.105846],[-11.146704,7.396706],[-10.695595,7.939464],[-10.230094,8.406206],[-10.016567,8.428504],[-9.755342,8.541055],[-9.33728,7.928534],[-9.403348,7.526905],[-9.208786,7.313921],[-8.926065,7.309037],[-8.722124,7.711674],[-8.439298,7.686043],[-8.485446,7.395208],[-8.385452,6.911801],[-8.60288,6.467564],[-8.311348,6.193033],[-7.993693,6.12619],[-7.570153,5.707352],[-7.539715,5.313345],[-7.635368,5.188159],[-7.712159,4.364566]]]}}, +{"type":"Feature","id":"LBY","properties":{"name":"Libya"},"geometry":{"type":"Polygon","coordinates":[[[14.8513,22.86295],[14.143871,22.491289],[13.581425,23.040506],[11.999506,23.471668],[11.560669,24.097909],[10.771364,24.562532],[10.303847,24.379313],[9.948261,24.936954],[9.910693,25.365455],[9.319411,26.094325],[9.716286,26.512206],[9.629056,27.140953],[9.756128,27.688259],[9.683885,28.144174],[9.859998,28.95999],[9.805634,29.424638],[9.48214,30.307556],[9.970017,30.539325],[10.056575,30.961831],[9.950225,31.37607],[10.636901,31.761421],[10.94479,32.081815],[11.432253,32.368903],[11.488787,33.136996],[12.66331,32.79278],[13.08326,32.87882],[13.91868,32.71196],[15.24563,32.26508],[15.71394,31.37626],[16.61162,31.18218],[18.02109,30.76357],[19.08641,30.26639],[19.57404,30.52582],[20.05335,30.98576],[19.82033,31.75179],[20.13397,32.2382],[20.85452,32.7068],[21.54298,32.8432],[22.89576,32.63858],[23.2368,32.19149],[23.60913,32.18726],[23.9275,32.01667],[24.92114,31.89936],[25.16482,31.56915],[24.80287,31.08929],[24.95762,30.6616],[24.70007,30.04419],[25,29.238655],[25,25.6825],[25,22],[25,20.00304],[23.85,20],[23.83766,19.58047],[19.84926,21.49509],[15.86085,23.40972],[14.8513,22.86295]]]}}, +{"type":"Feature","id":"LKA","properties":{"name":"Sri Lanka"},"geometry":{"type":"Polygon","coordinates":[[[81.787959,7.523055],[81.637322,6.481775],[81.21802,6.197141],[80.348357,5.96837],[79.872469,6.763463],[79.695167,8.200843],[80.147801,9.824078],[80.838818,9.268427],[81.304319,8.564206],[81.787959,7.523055]]]}}, +{"type":"Feature","id":"LSO","properties":{"name":"Lesotho"},"geometry":{"type":"Polygon","coordinates":[[[28.978263,-28.955597],[29.325166,-29.257387],[29.018415,-29.743766],[28.8484,-30.070051],[28.291069,-30.226217],[28.107205,-30.545732],[27.749397,-30.645106],[26.999262,-29.875954],[27.532511,-29.242711],[28.074338,-28.851469],[28.5417,-28.647502],[28.978263,-28.955597]]]}}, +{"type":"Feature","id":"LTU","properties":{"name":"Lithuania"},"geometry":{"type":"Polygon","coordinates":[[[22.731099,54.327537],[22.651052,54.582741],[22.757764,54.856574],[22.315724,55.015299],[21.268449,55.190482],[21.0558,56.031076],[22.201157,56.337802],[23.878264,56.273671],[24.860684,56.372528],[25.000934,56.164531],[25.533047,56.100297],[26.494331,55.615107],[26.588279,55.167176],[25.768433,54.846963],[25.536354,54.282423],[24.450684,53.905702],[23.484128,53.912498],[23.243987,54.220567],[22.731099,54.327537]]]}}, +{"type":"Feature","id":"LUX","properties":{"name":"Luxembourg"},"geometry":{"type":"Polygon","coordinates":[[[6.043073,50.128052],[6.242751,49.902226],[6.18632,49.463803],[5.897759,49.442667],[5.674052,49.529484],[5.782417,50.090328],[6.043073,50.128052]]]}}, +{"type":"Feature","id":"LVA","properties":{"name":"Latvia"},"geometry":{"type":"Polygon","coordinates":[[[21.0558,56.031076],[21.090424,56.783873],[21.581866,57.411871],[22.524341,57.753374],[23.318453,57.006236],[24.12073,57.025693],[24.312863,57.793424],[25.164594,57.970157],[25.60281,57.847529],[26.463532,57.476389],[27.288185,57.474528],[27.770016,57.244258],[27.855282,56.759326],[28.176709,56.16913],[27.10246,55.783314],[26.494331,55.615107],[25.533047,56.100297],[25.000934,56.164531],[24.860684,56.372528],[23.878264,56.273671],[22.201157,56.337802],[21.0558,56.031076]]]}}, +{"type":"Feature","id":"MAR","properties":{"name":"Morocco"},"geometry":{"type":"Polygon","coordinates":[[[-5.193863,35.755182],[-4.591006,35.330712],[-3.640057,35.399855],[-2.604306,35.179093],[-2.169914,35.168396],[-1.792986,34.527919],[-1.733455,33.919713],[-1.388049,32.864015],[-1.124551,32.651522],[-1.307899,32.262889],[-2.616605,32.094346],[-3.06898,31.724498],[-3.647498,31.637294],[-3.690441,30.896952],[-4.859646,30.501188],[-5.242129,30.000443],[-6.060632,29.7317],[-7.059228,29.579228],[-8.674116,28.841289],[-8.66559,27.656426],[-8.817809,27.656426],[-8.817828,27.656426],[-8.794884,27.120696],[-9.413037,27.088476],[-9.735343,26.860945],[-10.189424,26.860945],[-10.551263,26.990808],[-11.392555,26.883424],[-11.71822,26.104092],[-12.030759,26.030866],[-12.500963,24.770116],[-13.89111,23.691009],[-14.221168,22.310163],[-14.630833,21.86094],[-14.750955,21.5006],[-17.002962,21.420734],[-17.020428,21.42231],[-16.973248,21.885745],[-16.589137,22.158234],[-16.261922,22.67934],[-16.326414,23.017768],[-15.982611,23.723358],[-15.426004,24.359134],[-15.089332,24.520261],[-14.824645,25.103533],[-14.800926,25.636265],[-14.43994,26.254418],[-13.773805,26.618892],[-13.139942,27.640148],[-13.121613,27.654148],[-12.618837,28.038186],[-11.688919,28.148644],[-10.900957,28.832142],[-10.399592,29.098586],[-9.564811,29.933574],[-9.814718,31.177736],[-9.434793,32.038096],[-9.300693,32.564679],[-8.657476,33.240245],[-7.654178,33.697065],[-6.912544,34.110476],[-6.244342,35.145865],[-5.929994,35.759988],[-5.193863,35.755182]]]}}, +{"type":"Feature","id":"MDA","properties":{"name":"Moldova"},"geometry":{"type":"Polygon","coordinates":[[[26.619337,48.220726],[26.857824,48.368211],[27.522537,48.467119],[28.259547,48.155562],[28.670891,48.118149],[29.122698,47.849095],[29.050868,47.510227],[29.415135,47.346645],[29.559674,46.928583],[29.908852,46.674361],[29.83821,46.525326],[30.024659,46.423937],[29.759972,46.349988],[29.170654,46.379262],[29.072107,46.517678],[28.862972,46.437889],[28.933717,46.25883],[28.659987,45.939987],[28.485269,45.596907],[28.233554,45.488283],[28.054443,45.944586],[28.160018,46.371563],[28.12803,46.810476],[27.551166,47.405117],[27.233873,47.826771],[26.924176,48.123264],[26.619337,48.220726]]]}}, +{"type":"Feature","id":"MDG","properties":{"name":"Madagascar"},"geometry":{"type":"Polygon","coordinates":[[[49.543519,-12.469833],[49.808981,-12.895285],[50.056511,-13.555761],[50.217431,-14.758789],[50.476537,-15.226512],[50.377111,-15.706069],[50.200275,-16.000263],[49.860606,-15.414253],[49.672607,-15.710204],[49.863344,-16.451037],[49.774564,-16.875042],[49.498612,-17.106036],[49.435619,-17.953064],[49.041792,-19.118781],[48.548541,-20.496888],[47.930749,-22.391501],[47.547723,-23.781959],[47.095761,-24.94163],[46.282478,-25.178463],[45.409508,-25.601434],[44.833574,-25.346101],[44.03972,-24.988345],[43.763768,-24.460677],[43.697778,-23.574116],[43.345654,-22.776904],[43.254187,-22.057413],[43.433298,-21.336475],[43.893683,-21.163307],[43.89637,-20.830459],[44.374325,-20.072366],[44.464397,-19.435454],[44.232422,-18.961995],[44.042976,-18.331387],[43.963084,-17.409945],[44.312469,-16.850496],[44.446517,-16.216219],[44.944937,-16.179374],[45.502732,-15.974373],[45.872994,-15.793454],[46.312243,-15.780018],[46.882183,-15.210182],[47.70513,-14.594303],[48.005215,-14.091233],[47.869047,-13.663869],[48.293828,-13.784068],[48.84506,-13.089175],[48.863509,-12.487868],[49.194651,-12.040557],[49.543519,-12.469833]]]}}, +{"type":"Feature","id":"MEX","properties":{"name":"Mexico"},"geometry":{"type":"Polygon","coordinates":[[[-97.140008,25.869997],[-97.528072,24.992144],[-97.702946,24.272343],[-97.776042,22.93258],[-97.872367,22.444212],[-97.699044,21.898689],[-97.38896,21.411019],[-97.189333,20.635433],[-96.525576,19.890931],[-96.292127,19.320371],[-95.900885,18.828024],[-94.839063,18.562717],[-94.42573,18.144371],[-93.548651,18.423837],[-92.786114,18.524839],[-92.037348,18.704569],[-91.407903,18.876083],[-90.77187,19.28412],[-90.53359,19.867418],[-90.451476,20.707522],[-90.278618,20.999855],[-89.601321,21.261726],[-88.543866,21.493675],[-87.658417,21.458846],[-87.05189,21.543543],[-86.811982,21.331515],[-86.845908,20.849865],[-87.383291,20.255405],[-87.621054,19.646553],[-87.43675,19.472403],[-87.58656,19.04013],[-87.837191,18.259816],[-88.090664,18.516648],[-88.300031,18.499982],[-88.490123,18.486831],[-88.848344,17.883198],[-89.029857,18.001511],[-89.150909,17.955468],[-89.14308,17.808319],[-90.067934,17.819326],[-91.00152,17.817595],[-91.002269,17.254658],[-91.453921,17.252177],[-91.08167,16.918477],[-90.711822,16.687483],[-90.600847,16.470778],[-90.438867,16.41011],[-90.464473,16.069562],[-91.74796,16.066565],[-92.229249,15.251447],[-92.087216,15.064585],[-92.20323,14.830103],[-92.22775,14.538829],[-93.359464,15.61543],[-93.875169,15.940164],[-94.691656,16.200975],[-95.250227,16.128318],[-96.053382,15.752088],[-96.557434,15.653515],[-97.263592,15.917065],[-98.01303,16.107312],[-98.947676,16.566043],[-99.697397,16.706164],[-100.829499,17.171071],[-101.666089,17.649026],[-101.918528,17.91609],[-102.478132,17.975751],[-103.50099,18.292295],[-103.917527,18.748572],[-104.99201,19.316134],[-105.493038,19.946767],[-105.731396,20.434102],[-105.397773,20.531719],[-105.500661,20.816895],[-105.270752,21.076285],[-105.265817,21.422104],[-105.603161,21.871146],[-105.693414,22.26908],[-106.028716,22.773752],[-106.90998,23.767774],[-107.915449,24.548915],[-108.401905,25.172314],[-109.260199,25.580609],[-109.444089,25.824884],[-109.291644,26.442934],[-109.801458,26.676176],[-110.391732,27.162115],[-110.641019,27.859876],[-111.178919,27.941241],[-111.759607,28.467953],[-112.228235,28.954409],[-112.271824,29.266844],[-112.809594,30.021114],[-113.163811,30.786881],[-113.148669,31.170966],[-113.871881,31.567608],[-114.205737,31.524045],[-114.776451,31.799532],[-114.9367,31.393485],[-114.771232,30.913617],[-114.673899,30.162681],[-114.330974,29.750432],[-113.588875,29.061611],[-113.424053,28.826174],[-113.271969,28.754783],[-113.140039,28.411289],[-112.962298,28.42519],[-112.761587,27.780217],[-112.457911,27.525814],[-112.244952,27.171727],[-111.616489,26.662817],[-111.284675,25.73259],[-110.987819,25.294606],[-110.710007,24.826004],[-110.655049,24.298595],[-110.172856,24.265548],[-109.771847,23.811183],[-109.409104,23.364672],[-109.433392,23.185588],[-109.854219,22.818272],[-110.031392,22.823078],[-110.295071,23.430973],[-110.949501,24.000964],[-111.670568,24.484423],[-112.182036,24.738413],[-112.148989,25.470125],[-112.300711,26.012004],[-112.777297,26.32196],[-113.464671,26.768186],[-113.59673,26.63946],[-113.848937,26.900064],[-114.465747,27.14209],[-115.055142,27.722727],[-114.982253,27.7982],[-114.570366,27.741485],[-114.199329,28.115003],[-114.162018,28.566112],[-114.931842,29.279479],[-115.518654,29.556362],[-115.887365,30.180794],[-116.25835,30.836464],[-116.721526,31.635744],[-117.12776,32.53534],[-115.99135,32.61239],[-114.72139,32.72083],[-114.815,32.52528],[-113.30498,32.03914],[-111.02361,31.33472],[-109.035,31.34194],[-108.24194,31.34222],[-108.24,31.754854],[-106.50759,31.75452],[-106.1429,31.39995],[-105.63159,31.08383],[-105.03737,30.64402],[-104.70575,30.12173],[-104.45697,29.57196],[-103.94,29.27],[-103.11,28.97],[-102.48,29.76],[-101.6624,29.7793],[-100.9576,29.38071],[-100.45584,28.69612],[-100.11,28.11],[-99.52,27.54],[-99.3,26.84],[-99.02,26.37],[-98.24,26.06],[-97.53,25.84],[-97.140008,25.869997]]]}}, +{"type":"Feature","id":"MKD","properties":{"name":"Macedonia"},"geometry":{"type":"Polygon","coordinates":[[[20.59023,41.85541],[20.71731,41.84711],[20.76216,42.05186],[21.3527,42.2068],[21.576636,42.245224],[21.91708,42.30364],[22.380526,42.32026],[22.881374,41.999297],[22.952377,41.337994],[22.76177,41.3048],[22.597308,41.130487],[22.055378,41.149866],[21.674161,40.931275],[21.02004,40.842727],[20.60518,41.08622],[20.46315,41.51509],[20.59023,41.85541]]]}}, +{"type":"Feature","id":"MLI","properties":{"name":"Mali"},"geometry":{"type":"Polygon","coordinates":[[[-12.17075,14.616834],[-11.834208,14.799097],[-11.666078,15.388208],[-11.349095,15.411256],[-10.650791,15.132746],[-10.086846,15.330486],[-9.700255,15.264107],[-9.550238,15.486497],[-5.537744,15.50169],[-5.315277,16.201854],[-5.488523,16.325102],[-5.971129,20.640833],[-6.453787,24.956591],[-4.923337,24.974574],[-1.550055,22.792666],[1.823228,20.610809],[2.060991,20.142233],[2.683588,19.85623],[3.146661,19.693579],[3.158133,19.057364],[4.267419,19.155265],[4.27021,16.852227],[3.723422,16.184284],[3.638259,15.56812],[2.749993,15.409525],[1.385528,15.323561],[1.015783,14.968182],[0.374892,14.928908],[-0.266257,14.924309],[-0.515854,15.116158],[-1.066363,14.973815],[-2.001035,14.559008],[-2.191825,14.246418],[-2.967694,13.79815],[-3.103707,13.541267],[-3.522803,13.337662],[-4.006391,13.472485],[-4.280405,13.228444],[-4.427166,12.542646],[-5.220942,11.713859],[-5.197843,11.375146],[-5.470565,10.95127],[-5.404342,10.370737],[-5.816926,10.222555],[-6.050452,10.096361],[-6.205223,10.524061],[-6.493965,10.411303],[-6.666461,10.430811],[-6.850507,10.138994],[-7.622759,10.147236],[-7.89959,10.297382],[-8.029944,10.206535],[-8.335377,10.494812],[-8.282357,10.792597],[-8.407311,10.909257],[-8.620321,10.810891],[-8.581305,11.136246],[-8.376305,11.393646],[-8.786099,11.812561],[-8.905265,12.088358],[-9.127474,12.30806],[-9.327616,12.334286],[-9.567912,12.194243],[-9.890993,12.060479],[-10.165214,11.844084],[-10.593224,11.923975],[-10.87083,12.177887],[-11.036556,12.211245],[-11.297574,12.077971],[-11.456169,12.076834],[-11.513943,12.442988],[-11.467899,12.754519],[-11.553398,13.141214],[-11.927716,13.422075],[-12.124887,13.994727],[-12.17075,14.616834]]]}}, +{"type":"Feature","id":"MMR","properties":{"name":"Myanmar"},"geometry":{"type":"Polygon","coordinates":[[[99.543309,20.186598],[98.959676,19.752981],[98.253724,19.708203],[97.797783,18.62708],[97.375896,18.445438],[97.859123,17.567946],[98.493761,16.837836],[98.903348,16.177824],[98.537376,15.308497],[98.192074,15.123703],[98.430819,14.622028],[99.097755,13.827503],[99.212012,13.269294],[99.196354,12.804748],[99.587286,11.892763],[99.038121,10.960546],[98.553551,9.93296],[98.457174,10.675266],[98.764546,11.441292],[98.428339,12.032987],[98.509574,13.122378],[98.103604,13.64046],[97.777732,14.837286],[97.597072,16.100568],[97.16454,16.928734],[96.505769,16.427241],[95.369352,15.71439],[94.808405,15.803454],[94.188804,16.037936],[94.533486,17.27724],[94.324817,18.213514],[93.540988,19.366493],[93.663255,19.726962],[93.078278,19.855145],[92.368554,20.670883],[92.303234,21.475485],[92.652257,21.324048],[92.672721,22.041239],[93.166128,22.27846],[93.060294,22.703111],[93.286327,23.043658],[93.325188,24.078556],[94.106742,23.850741],[94.552658,24.675238],[94.603249,25.162495],[95.155153,26.001307],[95.124768,26.573572],[96.419366,27.264589],[97.133999,27.083774],[97.051989,27.699059],[97.402561,27.882536],[97.327114,28.261583],[97.911988,28.335945],[98.246231,27.747221],[98.68269,27.508812],[98.712094,26.743536],[98.671838,25.918703],[97.724609,25.083637],[97.60472,23.897405],[98.660262,24.063286],[98.898749,23.142722],[99.531992,22.949039],[99.240899,22.118314],[99.983489,21.742937],[100.416538,21.558839],[101.150033,21.849984],[101.180005,21.436573],[100.329101,20.786122],[100.115988,20.41785],[99.543309,20.186598]]]}}, +{"type":"Feature","id":"MNE","properties":{"name":"Montenegro"},"geometry":{"type":"Polygon","coordinates":[[[19.801613,42.500093],[19.738051,42.688247],[19.30449,42.19574],[19.37177,41.87755],[19.16246,41.95502],[18.88214,42.28151],[18.45,42.48],[18.56,42.65],[18.70648,43.20011],[19.03165,43.43253],[19.21852,43.52384],[19.48389,43.35229],[19.63,43.21378],[19.95857,43.10604],[20.3398,42.89852],[20.25758,42.81275],[20.0707,42.58863],[19.801613,42.500093]]]}}, +{"type":"Feature","id":"MNG","properties":{"name":"Mongolia"},"geometry":{"type":"Polygon","coordinates":[[[87.751264,49.297198],[88.805567,49.470521],[90.713667,50.331812],[92.234712,50.802171],[93.104219,50.49529],[94.147566,50.480537],[94.815949,50.013433],[95.814028,49.977467],[97.259728,49.726061],[98.231762,50.422401],[97.82574,51.010995],[98.861491,52.047366],[99.981732,51.634006],[100.88948,51.516856],[102.065223,51.259921],[102.255909,50.510561],[103.676545,50.089966],[104.621552,50.275329],[105.886591,50.406019],[106.888804,50.274296],[107.868176,49.793705],[108.475167,49.282548],[109.402449,49.292961],[110.662011,49.130128],[111.581231,49.377968],[112.89774,49.543565],[114.362456,50.248303],[114.96211,50.140247],[115.485695,49.805177],[116.678801,49.888531],[116.191802,49.134598],[115.485282,48.135383],[115.742837,47.726545],[116.308953,47.85341],[117.295507,47.697709],[118.064143,48.06673],[118.866574,47.74706],[119.772824,47.048059],[119.66327,46.69268],[118.874326,46.805412],[117.421701,46.672733],[116.717868,46.388202],[115.985096,45.727235],[114.460332,45.339817],[113.463907,44.808893],[112.436062,45.011646],[111.873306,45.102079],[111.348377,44.457442],[111.667737,44.073176],[111.829588,43.743118],[111.129682,43.406834],[110.412103,42.871234],[109.243596,42.519446],[107.744773,42.481516],[106.129316,42.134328],[104.964994,41.59741],[104.522282,41.908347],[103.312278,41.907468],[101.83304,42.514873],[100.845866,42.663804],[99.515817,42.524691],[97.451757,42.74889],[96.349396,42.725635],[95.762455,43.319449],[95.306875,44.241331],[94.688929,44.352332],[93.480734,44.975472],[92.133891,45.115076],[90.94554,45.286073],[90.585768,45.719716],[90.970809,46.888146],[90.280826,47.693549],[88.854298,48.069082],[88.013832,48.599463],[87.751264,49.297198]]]}}, +{"type":"Feature","id":"MOZ","properties":{"name":"Mozambique"},"geometry":{"type":"Polygon","coordinates":[[[34.559989,-11.52002],[35.312398,-11.439146],[36.514082,-11.720938],[36.775151,-11.594537],[37.471284,-11.568751],[37.827645,-11.268769],[38.427557,-11.285202],[39.52103,-10.896854],[40.316589,-10.317096],[40.478387,-10.765441],[40.437253,-11.761711],[40.560811,-12.639177],[40.59962,-14.201975],[40.775475,-14.691764],[40.477251,-15.406294],[40.089264,-16.100774],[39.452559,-16.720891],[38.538351,-17.101023],[37.411133,-17.586368],[36.281279,-18.659688],[35.896497,-18.84226],[35.1984,-19.552811],[34.786383,-19.784012],[34.701893,-20.497043],[35.176127,-21.254361],[35.373428,-21.840837],[35.385848,-22.14],[35.562546,-22.09],[35.533935,-23.070788],[35.371774,-23.535359],[35.60747,-23.706563],[35.458746,-24.12261],[35.040735,-24.478351],[34.215824,-24.816314],[33.01321,-25.357573],[32.574632,-25.727318],[32.660363,-26.148584],[32.915955,-26.215867],[32.83012,-26.742192],[32.071665,-26.73382],[31.985779,-26.29178],[31.837778,-25.843332],[31.752408,-25.484284],[31.930589,-24.369417],[31.670398,-23.658969],[31.191409,-22.25151],[32.244988,-21.116489],[32.508693,-20.395292],[32.659743,-20.30429],[32.772708,-19.715592],[32.611994,-19.419383],[32.654886,-18.67209],[32.849861,-17.979057],[32.847639,-16.713398],[32.328239,-16.392074],[31.852041,-16.319417],[31.636498,-16.07199],[31.173064,-15.860944],[30.338955,-15.880839],[30.274256,-15.507787],[30.179481,-14.796099],[33.214025,-13.97186],[33.7897,-14.451831],[34.064825,-14.35995],[34.459633,-14.61301],[34.517666,-15.013709],[34.307291,-15.478641],[34.381292,-16.18356],[35.03381,-16.8013],[35.339063,-16.10744],[35.771905,-15.896859],[35.686845,-14.611046],[35.267956,-13.887834],[34.907151,-13.565425],[34.559989,-13.579998],[34.280006,-12.280025],[34.559989,-11.52002]]]}}, +{"type":"Feature","id":"MRT","properties":{"name":"Mauritania"},"geometry":{"type":"Polygon","coordinates":[[[-12.17075,14.616834],[-12.830658,15.303692],[-13.435738,16.039383],[-14.099521,16.304302],[-14.577348,16.598264],[-15.135737,16.587282],[-15.623666,16.369337],[-16.12069,16.455663],[-16.463098,16.135036],[-16.549708,16.673892],[-16.270552,17.166963],[-16.146347,18.108482],[-16.256883,19.096716],[-16.377651,19.593817],[-16.277838,20.092521],[-16.536324,20.567866],[-17.063423,20.999752],[-16.845194,21.333323],[-12.929102,21.327071],[-13.118754,22.77122],[-12.874222,23.284832],[-11.937224,23.374594],[-11.969419,25.933353],[-8.687294,25.881056],[-8.6844,27.395744],[-4.923337,24.974574],[-6.453787,24.956591],[-5.971129,20.640833],[-5.488523,16.325102],[-5.315277,16.201854],[-5.537744,15.50169],[-9.550238,15.486497],[-9.700255,15.264107],[-10.086846,15.330486],[-10.650791,15.132746],[-11.349095,15.411256],[-11.666078,15.388208],[-11.834208,14.799097],[-12.17075,14.616834]]]}}, +{"type":"Feature","id":"MWI","properties":{"name":"Malawi"},"geometry":{"type":"Polygon","coordinates":[[[34.559989,-11.52002],[34.280006,-12.280025],[34.559989,-13.579998],[34.907151,-13.565425],[35.267956,-13.887834],[35.686845,-14.611046],[35.771905,-15.896859],[35.339063,-16.10744],[35.03381,-16.8013],[34.381292,-16.18356],[34.307291,-15.478641],[34.517666,-15.013709],[34.459633,-14.61301],[34.064825,-14.35995],[33.7897,-14.451831],[33.214025,-13.97186],[32.688165,-13.712858],[32.991764,-12.783871],[33.306422,-12.435778],[33.114289,-11.607198],[33.31531,-10.79655],[33.485688,-10.525559],[33.231388,-9.676722],[32.759375,-9.230599],[33.739729,-9.417151],[33.940838,-9.693674],[34.280006,-10.16],[34.559989,-11.52002]]]}}, +{"type":"Feature","id":"MYS","properties":{"name":"Malaysia"},"geometry":{"type":"MultiPolygon","coordinates":[[[[101.075516,6.204867],[101.154219,5.691384],[101.814282,5.810808],[102.141187,6.221636],[102.371147,6.128205],[102.961705,5.524495],[103.381215,4.855001],[103.438575,4.181606],[103.332122,3.726698],[103.429429,3.382869],[103.502448,2.791019],[103.854674,2.515454],[104.247932,1.631141],[104.228811,1.293048],[103.519707,1.226334],[102.573615,1.967115],[101.390638,2.760814],[101.27354,3.270292],[100.695435,3.93914],[100.557408,4.76728],[100.196706,5.312493],[100.30626,6.040562],[100.085757,6.464489],[100.259596,6.642825],[101.075516,6.204867]]],[[[118.618321,4.478202],[117.882035,4.137551],[117.015214,4.306094],[115.865517,4.306559],[115.519078,3.169238],[115.134037,2.821482],[114.621355,1.430688],[113.80585,1.217549],[112.859809,1.49779],[112.380252,1.410121],[111.797548,0.904441],[111.159138,0.976478],[110.514061,0.773131],[109.830227,1.338136],[109.66326,2.006467],[110.396135,1.663775],[111.168853,1.850637],[111.370081,2.697303],[111.796928,2.885897],[112.995615,3.102395],[113.712935,3.893509],[114.204017,4.525874],[114.659596,4.007637],[114.869557,4.348314],[115.347461,4.316636],[115.4057,4.955228],[115.45071,5.44773],[116.220741,6.143191],[116.725103,6.924771],[117.129626,6.928053],[117.643393,6.422166],[117.689075,5.98749],[118.347691,5.708696],[119.181904,5.407836],[119.110694,5.016128],[118.439727,4.966519],[118.618321,4.478202]]]]}}, +{"type":"Feature","id":"NAM","properties":{"name":"Namibia"},"geometry":{"type":"Polygon","coordinates":[[[16.344977,-28.576705],[15.601818,-27.821247],[15.210472,-27.090956],[14.989711,-26.117372],[14.743214,-25.39292],[14.408144,-23.853014],[14.385717,-22.656653],[14.257714,-22.111208],[13.868642,-21.699037],[13.352498,-20.872834],[12.826845,-19.673166],[12.608564,-19.045349],[11.794919,-18.069129],[11.734199,-17.301889],[12.215461,-17.111668],[12.814081,-16.941343],[13.462362,-16.971212],[14.058501,-17.423381],[14.209707,-17.353101],[18.263309,-17.309951],[18.956187,-17.789095],[21.377176,-17.930636],[23.215048,-17.523116],[24.033862,-17.295843],[24.682349,-17.353411],[25.07695,-17.578823],[25.084443,-17.661816],[24.520705,-17.887125],[24.217365,-17.889347],[23.579006,-18.281261],[23.196858,-17.869038],[21.65504,-18.219146],[20.910641,-18.252219],[20.881134,-21.814327],[19.895458,-21.849157],[19.895768,-24.76779],[19.894734,-28.461105],[19.002127,-28.972443],[18.464899,-29.045462],[17.836152,-28.856378],[17.387497,-28.783514],[17.218929,-28.355943],[16.824017,-28.082162],[16.344977,-28.576705]]]}}, +{"type":"Feature","id":"NCL","properties":{"name":"New Caledonia"},"geometry":{"type":"Polygon","coordinates":[[[165.77999,-21.080005],[166.599991,-21.700019],[167.120011,-22.159991],[166.740035,-22.399976],[166.189732,-22.129708],[165.474375,-21.679607],[164.829815,-21.14982],[164.167995,-20.444747],[164.029606,-20.105646],[164.459967,-20.120012],[165.020036,-20.459991],[165.460009,-20.800022],[165.77999,-21.080005]]]}}, +{"type":"Feature","id":"NER","properties":{"name":"Niger"},"geometry":{"type":"Polygon","coordinates":[[[2.154474,11.94015],[2.177108,12.625018],[1.024103,12.851826],[0.993046,13.33575],[0.429928,13.988733],[0.295646,14.444235],[0.374892,14.928908],[1.015783,14.968182],[1.385528,15.323561],[2.749993,15.409525],[3.638259,15.56812],[3.723422,16.184284],[4.27021,16.852227],[4.267419,19.155265],[5.677566,19.601207],[8.572893,21.565661],[11.999506,23.471668],[13.581425,23.040506],[14.143871,22.491289],[14.8513,22.86295],[15.096888,21.308519],[15.471077,21.048457],[15.487148,20.730415],[15.903247,20.387619],[15.685741,19.95718],[15.300441,17.92795],[15.247731,16.627306],[13.972202,15.684366],[13.540394,14.367134],[13.956699,13.996691],[13.954477,13.353449],[14.595781,13.330427],[14.495787,12.859396],[14.213531,12.802035],[14.181336,12.483657],[13.995353,12.461565],[13.318702,13.556356],[13.083987,13.596147],[12.302071,13.037189],[11.527803,13.32898],[10.989593,13.387323],[10.701032,13.246918],[10.114814,13.277252],[9.524928,12.851102],[9.014933,12.826659],[7.804671,13.343527],[7.330747,13.098038],[6.820442,13.115091],[6.445426,13.492768],[5.443058,13.865924],[4.368344,13.747482],[4.107946,13.531216],[3.967283,12.956109],[3.680634,12.552903],[3.61118,11.660167],[2.848643,12.235636],[2.490164,12.233052],[2.154474,11.94015]]]}}, +{"type":"Feature","id":"NGA","properties":{"name":"Nigeria"},"geometry":{"type":"Polygon","coordinates":[[[8.500288,4.771983],[7.462108,4.412108],[7.082596,4.464689],[6.698072,4.240594],[5.898173,4.262453],[5.362805,4.887971],[5.033574,5.611802],[4.325607,6.270651],[3.57418,6.2583],[2.691702,6.258817],[2.749063,7.870734],[2.723793,8.506845],[2.912308,9.137608],[3.220352,9.444153],[3.705438,10.06321],[3.60007,10.332186],[3.797112,10.734746],[3.572216,11.327939],[3.61118,11.660167],[3.680634,12.552903],[3.967283,12.956109],[4.107946,13.531216],[4.368344,13.747482],[5.443058,13.865924],[6.445426,13.492768],[6.820442,13.115091],[7.330747,13.098038],[7.804671,13.343527],[9.014933,12.826659],[9.524928,12.851102],[10.114814,13.277252],[10.701032,13.246918],[10.989593,13.387323],[11.527803,13.32898],[12.302071,13.037189],[13.083987,13.596147],[13.318702,13.556356],[13.995353,12.461565],[14.181336,12.483657],[14.577178,12.085361],[14.468192,11.904752],[14.415379,11.572369],[13.57295,10.798566],[13.308676,10.160362],[13.1676,9.640626],[12.955468,9.417772],[12.753672,8.717763],[12.218872,8.305824],[12.063946,7.799808],[11.839309,7.397042],[11.745774,6.981383],[11.058788,6.644427],[10.497375,7.055358],[10.118277,7.03877],[9.522706,6.453482],[9.233163,6.444491],[8.757533,5.479666],[8.500288,4.771983]]]}}, +{"type":"Feature","id":"NIC","properties":{"name":"Nicaragua"},"geometry":{"type":"Polygon","coordinates":[[[-85.71254,11.088445],[-86.058488,11.403439],[-86.52585,11.806877],[-86.745992,12.143962],[-87.167516,12.458258],[-87.668493,12.90991],[-87.557467,13.064552],[-87.392386,12.914018],[-87.316654,12.984686],[-87.005769,13.025794],[-86.880557,13.254204],[-86.733822,13.263093],[-86.755087,13.754845],[-86.520708,13.778487],[-86.312142,13.771356],[-86.096264,14.038187],[-85.801295,13.836055],[-85.698665,13.960078],[-85.514413,14.079012],[-85.165365,14.35437],[-85.148751,14.560197],[-85.052787,14.551541],[-84.924501,14.790493],[-84.820037,14.819587],[-84.649582,14.666805],[-84.449336,14.621614],[-84.228342,14.748764],[-83.975721,14.749436],[-83.628585,14.880074],[-83.489989,15.016267],[-83.147219,14.995829],[-83.233234,14.899866],[-83.284162,14.676624],[-83.182126,14.310703],[-83.4125,13.970078],[-83.519832,13.567699],[-83.552207,13.127054],[-83.498515,12.869292],[-83.473323,12.419087],[-83.626104,12.32085],[-83.719613,11.893124],[-83.650858,11.629032],[-83.85547,11.373311],[-83.808936,11.103044],[-83.655612,10.938764],[-83.895054,10.726839],[-84.190179,10.79345],[-84.355931,10.999226],[-84.673069,11.082657],[-84.903003,10.952303],[-85.561852,11.217119],[-85.71254,11.088445]]]}}, +{"type":"Feature","id":"NLD","properties":{"name":"Netherlands"},"geometry":{"type":"Polygon","coordinates":[[[6.074183,53.510403],[6.90514,53.482162],[7.092053,53.144043],[6.84287,52.22844],[6.589397,51.852029],[5.988658,51.851616],[6.156658,50.803721],[5.606976,51.037298],[4.973991,51.475024],[4.047071,51.267259],[3.314971,51.345755],[3.830289,51.620545],[4.705997,53.091798],[6.074183,53.510403]]]}}, +{"type":"Feature","id":"NOR","properties":{"name":"Norway"},"geometry":{"type":"MultiPolygon","coordinates":[[[[28.165547,71.185474],[31.293418,70.453788],[30.005435,70.186259],[31.101079,69.55808],[29.399581,69.156916],[28.59193,69.064777],[29.015573,69.766491],[27.732292,70.164193],[26.179622,69.825299],[25.689213,69.092114],[24.735679,68.649557],[23.66205,68.891247],[22.356238,68.841741],[21.244936,69.370443],[20.645593,69.106247],[20.025269,69.065139],[19.87856,68.407194],[17.993868,68.567391],[17.729182,68.010552],[16.768879,68.013937],[16.108712,67.302456],[15.108411,66.193867],[13.55569,64.787028],[13.919905,64.445421],[13.571916,64.049114],[12.579935,64.066219],[11.930569,63.128318],[11.992064,61.800362],[12.631147,61.293572],[12.300366,60.117933],[11.468272,59.432393],[11.027369,58.856149],[10.356557,59.469807],[8.382,58.313288],[7.048748,58.078884],[5.665835,58.588155],[5.308234,59.663232],[4.992078,61.970998],[5.9129,62.614473],[8.553411,63.454008],[10.527709,64.486038],[12.358347,65.879726],[14.761146,67.810642],[16.435927,68.563205],[19.184028,69.817444],[21.378416,70.255169],[23.023742,70.202072],[24.546543,71.030497],[26.37005,70.986262],[28.165547,71.185474]]],[[[24.72412,77.85385],[22.49032,77.44493],[20.72601,77.67704],[21.41611,77.93504],[20.8119,78.25463],[22.88426,78.45494],[23.28134,78.07954],[24.72412,77.85385]]],[[[18.25183,79.70175],[21.54383,78.95611],[19.02737,78.5626],[18.47172,77.82669],[17.59441,77.63796],[17.1182,76.80941],[15.91315,76.77045],[13.76259,77.38035],[14.66956,77.73565],[13.1706,78.02493],[11.22231,78.8693],[10.44453,79.65239],[13.17077,80.01046],[13.71852,79.66039],[15.14282,79.67431],[15.52255,80.01608],[16.99085,80.05086],[18.25183,79.70175]]],[[[25.447625,80.40734],[27.407506,80.056406],[25.924651,79.517834],[23.024466,79.400012],[20.075188,79.566823],[19.897266,79.842362],[18.462264,79.85988],[17.368015,80.318896],[20.455992,80.598156],[21.907945,80.357679],[22.919253,80.657144],[25.447625,80.40734]]]]}}, +{"type":"Feature","id":"NPL","properties":{"name":"Nepal"},"geometry":{"type":"Polygon","coordinates":[[[88.120441,27.876542],[88.043133,27.445819],[88.174804,26.810405],[88.060238,26.414615],[87.227472,26.397898],[86.024393,26.630985],[85.251779,26.726198],[84.675018,27.234901],[83.304249,27.364506],[81.999987,27.925479],[81.057203,28.416095],[80.088425,28.79447],[80.476721,29.729865],[81.111256,30.183481],[81.525804,30.422717],[82.327513,30.115268],[83.337115,29.463732],[83.898993,29.320226],[84.23458,28.839894],[85.011638,28.642774],[85.82332,28.203576],[86.954517,27.974262],[88.120441,27.876542]]]}}, +{"type":"Feature","id":"NZL","properties":{"name":"New Zealand"},"geometry":{"type":"MultiPolygon","coordinates":[[[[173.020375,-40.919052],[173.247234,-41.331999],[173.958405,-40.926701],[174.247587,-41.349155],[174.248517,-41.770008],[173.876447,-42.233184],[173.22274,-42.970038],[172.711246,-43.372288],[173.080113,-43.853344],[172.308584,-43.865694],[171.452925,-44.242519],[171.185138,-44.897104],[170.616697,-45.908929],[169.831422,-46.355775],[169.332331,-46.641235],[168.411354,-46.619945],[167.763745,-46.290197],[166.676886,-46.219917],[166.509144,-45.852705],[167.046424,-45.110941],[168.303763,-44.123973],[168.949409,-43.935819],[169.667815,-43.555326],[170.52492,-43.031688],[171.12509,-42.512754],[171.569714,-41.767424],[171.948709,-41.514417],[172.097227,-40.956104],[172.79858,-40.493962],[173.020375,-40.919052]]],[[[174.612009,-36.156397],[175.336616,-37.209098],[175.357596,-36.526194],[175.808887,-36.798942],[175.95849,-37.555382],[176.763195,-37.881253],[177.438813,-37.961248],[178.010354,-37.579825],[178.517094,-37.695373],[178.274731,-38.582813],[177.97046,-39.166343],[177.206993,-39.145776],[176.939981,-39.449736],[177.032946,-39.879943],[176.885824,-40.065978],[176.508017,-40.604808],[176.01244,-41.289624],[175.239567,-41.688308],[175.067898,-41.425895],[174.650973,-41.281821],[175.22763,-40.459236],[174.900157,-39.908933],[173.824047,-39.508854],[173.852262,-39.146602],[174.574802,-38.797683],[174.743474,-38.027808],[174.697017,-37.381129],[174.292028,-36.711092],[174.319004,-36.534824],[173.840997,-36.121981],[173.054171,-35.237125],[172.636005,-34.529107],[173.007042,-34.450662],[173.551298,-35.006183],[174.32939,-35.265496],[174.612009,-36.156397]]]]}}, +{"type":"Feature","id":"OMN","properties":{"name":"Oman"},"geometry":{"type":"MultiPolygon","coordinates":[[[[58.861141,21.114035],[58.487986,20.428986],[58.034318,20.481437],[57.826373,20.243002],[57.665762,19.736005],[57.7887,19.06757],[57.694391,18.94471],[57.234264,18.947991],[56.609651,18.574267],[56.512189,18.087113],[56.283521,17.876067],[55.661492,17.884128],[55.269939,17.632309],[55.2749,17.228354],[54.791002,16.950697],[54.239253,17.044981],[53.570508,16.707663],[53.108573,16.651051],[52.782184,17.349742],[52.00001,19.000003],[54.999982,19.999994],[55.666659,22.000001],[55.208341,22.70833],[55.234489,23.110993],[55.525841,23.524869],[55.528632,23.933604],[55.981214,24.130543],[55.804119,24.269604],[55.886233,24.920831],[56.396847,24.924732],[56.84514,24.241673],[57.403453,23.878594],[58.136948,23.747931],[58.729211,23.565668],[59.180502,22.992395],[59.450098,22.660271],[59.80806,22.533612],[59.806148,22.310525],[59.442191,21.714541],[59.282408,21.433886],[58.861141,21.114035]]],[[[56.391421,25.895991],[56.261042,25.714606],[56.070821,26.055464],[56.362017,26.395934],[56.485679,26.309118],[56.391421,25.895991]]]]}}, +{"type":"Feature","id":"PAK","properties":{"name":"Pakistan"},"geometry":{"type":"Polygon","coordinates":[[[75.158028,37.133031],[75.896897,36.666806],[76.192848,35.898403],[77.837451,35.49401],[76.871722,34.653544],[75.757061,34.504923],[74.240203,34.748887],[73.749948,34.317699],[74.104294,33.441473],[74.451559,32.7649],[75.258642,32.271105],[74.405929,31.692639],[74.42138,30.979815],[73.450638,29.976413],[72.823752,28.961592],[71.777666,27.91318],[70.616496,27.989196],[69.514393,26.940966],[70.168927,26.491872],[70.282873,25.722229],[70.844699,25.215102],[71.04324,24.356524],[68.842599,24.359134],[68.176645,23.691965],[67.443667,23.944844],[67.145442,24.663611],[66.372828,25.425141],[64.530408,25.237039],[62.905701,25.218409],[61.497363,25.078237],[61.874187,26.239975],[63.316632,26.756532],[63.233898,27.217047],[62.755426,27.378923],[62.72783,28.259645],[61.771868,28.699334],[61.369309,29.303276],[60.874248,29.829239],[62.549857,29.318572],[63.550261,29.468331],[64.148002,29.340819],[64.350419,29.560031],[65.046862,29.472181],[66.346473,29.887943],[66.381458,30.738899],[66.938891,31.304911],[67.683394,31.303154],[67.792689,31.58293],[68.556932,31.71331],[68.926677,31.620189],[69.317764,31.901412],[69.262522,32.501944],[69.687147,33.105499],[70.323594,33.358533],[69.930543,34.02012],[70.881803,33.988856],[71.156773,34.348911],[71.115019,34.733126],[71.613076,35.153203],[71.498768,35.650563],[71.262348,36.074388],[71.846292,36.509942],[72.920025,36.720007],[74.067552,36.836176],[74.575893,37.020841],[75.158028,37.133031]]]}}, +{"type":"Feature","id":"PAN","properties":{"name":"Panama"},"geometry":{"type":"Polygon","coordinates":[[[-77.881571,7.223771],[-78.214936,7.512255],[-78.429161,8.052041],[-78.182096,8.319182],[-78.435465,8.387705],[-78.622121,8.718124],[-79.120307,8.996092],[-79.557877,8.932375],[-79.760578,8.584515],[-80.164481,8.333316],[-80.382659,8.298409],[-80.480689,8.090308],[-80.00369,7.547524],[-80.276671,7.419754],[-80.421158,7.271572],[-80.886401,7.220541],[-81.059543,7.817921],[-81.189716,7.647906],[-81.519515,7.70661],[-81.721311,8.108963],[-82.131441,8.175393],[-82.390934,8.292362],[-82.820081,8.290864],[-82.850958,8.073823],[-82.965783,8.225028],[-82.913176,8.423517],[-82.829771,8.626295],[-82.868657,8.807266],[-82.719183,8.925709],[-82.927155,9.07433],[-82.932891,9.476812],[-82.546196,9.566135],[-82.187123,9.207449],[-82.207586,8.995575],[-81.808567,8.950617],[-81.714154,9.031955],[-81.439287,8.786234],[-80.947302,8.858504],[-80.521901,9.111072],[-79.9146,9.312765],[-79.573303,9.61161],[-79.021192,9.552931],[-79.05845,9.454565],[-78.500888,9.420459],[-78.055928,9.24773],[-77.729514,8.946844],[-77.353361,8.670505],[-77.474723,8.524286],[-77.242566,7.935278],[-77.431108,7.638061],[-77.753414,7.70984],[-77.881571,7.223771]]]}}, +{"type":"Feature","id":"PER","properties":{"name":"Peru"},"geometry":{"type":"Polygon","coordinates":[[[-69.590424,-17.580012],[-69.858444,-18.092694],[-70.372572,-18.347975],[-71.37525,-17.773799],[-71.462041,-17.363488],[-73.44453,-16.359363],[-75.237883,-15.265683],[-76.009205,-14.649286],[-76.423469,-13.823187],[-76.259242,-13.535039],[-77.106192,-12.222716],[-78.092153,-10.377712],[-79.036953,-8.386568],[-79.44592,-7.930833],[-79.760578,-7.194341],[-80.537482,-6.541668],[-81.249996,-6.136834],[-80.926347,-5.690557],[-81.410943,-4.736765],[-81.09967,-4.036394],[-80.302561,-3.404856],[-80.184015,-3.821162],[-80.469295,-4.059287],[-80.442242,-4.425724],[-80.028908,-4.346091],[-79.624979,-4.454198],[-79.205289,-4.959129],[-78.639897,-4.547784],[-78.450684,-3.873097],[-77.837905,-3.003021],[-76.635394,-2.608678],[-75.544996,-1.56161],[-75.233723,-0.911417],[-75.373223,-0.152032],[-75.106625,-0.057205],[-74.441601,-0.53082],[-74.122395,-1.002833],[-73.659504,-1.260491],[-73.070392,-2.308954],[-72.325787,-2.434218],[-71.774761,-2.16979],[-71.413646,-2.342802],[-70.813476,-2.256865],[-70.047709,-2.725156],[-70.692682,-3.742872],[-70.394044,-3.766591],[-69.893635,-4.298187],[-70.794769,-4.251265],[-70.928843,-4.401591],[-71.748406,-4.593983],[-72.891928,-5.274561],[-72.964507,-5.741251],[-73.219711,-6.089189],[-73.120027,-6.629931],[-73.724487,-6.918595],[-73.723401,-7.340999],[-73.987235,-7.52383],[-73.571059,-8.424447],[-73.015383,-9.032833],[-73.226713,-9.462213],[-72.563033,-9.520194],[-72.184891,-10.053598],[-71.302412,-10.079436],[-70.481894,-9.490118],[-70.548686,-11.009147],[-70.093752,-11.123972],[-69.529678,-10.951734],[-68.66508,-12.5613],[-68.88008,-12.899729],[-68.929224,-13.602684],[-68.948887,-14.453639],[-69.339535,-14.953195],[-69.160347,-15.323974],[-69.389764,-15.660129],[-68.959635,-16.500698],[-69.590424,-17.580012]]]}}, +{"type":"Feature","id":"PHL","properties":{"name":"Philippines"},"geometry":{"type":"MultiPolygon","coordinates":[[[[126.376814,8.414706],[126.478513,7.750354],[126.537424,7.189381],[126.196773,6.274294],[125.831421,7.293715],[125.363852,6.786485],[125.683161,6.049657],[125.396512,5.581003],[124.219788,6.161355],[123.93872,6.885136],[124.243662,7.36061],[123.610212,7.833527],[123.296071,7.418876],[122.825506,7.457375],[122.085499,6.899424],[121.919928,7.192119],[122.312359,8.034962],[122.942398,8.316237],[123.487688,8.69301],[123.841154,8.240324],[124.60147,8.514158],[124.764612,8.960409],[125.471391,8.986997],[125.412118,9.760335],[126.222714,9.286074],[126.306637,8.782487],[126.376814,8.414706]]],[[[123.982438,10.278779],[123.623183,9.950091],[123.309921,9.318269],[122.995883,9.022189],[122.380055,9.713361],[122.586089,9.981045],[122.837081,10.261157],[122.947411,10.881868],[123.49885,10.940624],[123.337774,10.267384],[124.077936,11.232726],[123.982438,10.278779]]],[[[118.504581,9.316383],[117.174275,8.3675],[117.664477,9.066889],[118.386914,9.6845],[118.987342,10.376292],[119.511496,11.369668],[119.689677,10.554291],[119.029458,10.003653],[118.504581,9.316383]]],[[[121.883548,11.891755],[122.483821,11.582187],[123.120217,11.58366],[123.100838,11.165934],[122.637714,10.741308],[122.00261,10.441017],[121.967367,10.905691],[122.03837,11.415841],[121.883548,11.891755]]],[[[125.502552,12.162695],[125.783465,11.046122],[125.011884,11.311455],[125.032761,10.975816],[125.277449,10.358722],[124.801819,10.134679],[124.760168,10.837995],[124.459101,10.88993],[124.302522,11.495371],[124.891013,11.415583],[124.87799,11.79419],[124.266762,12.557761],[125.227116,12.535721],[125.502552,12.162695]]],[[[121.527394,13.06959],[121.26219,12.20556],[120.833896,12.704496],[120.323436,13.466413],[121.180128,13.429697],[121.527394,13.06959]]],[[[121.321308,18.504065],[121.937601,18.218552],[122.246006,18.47895],[122.336957,18.224883],[122.174279,17.810283],[122.515654,17.093505],[122.252311,16.262444],[121.662786,15.931018],[121.50507,15.124814],[121.728829,14.328376],[122.258925,14.218202],[122.701276,14.336541],[123.950295,13.782131],[123.855107,13.237771],[124.181289,12.997527],[124.077419,12.536677],[123.298035,13.027526],[122.928652,13.55292],[122.671355,13.185836],[122.03465,13.784482],[121.126385,13.636687],[120.628637,13.857656],[120.679384,14.271016],[120.991819,14.525393],[120.693336,14.756671],[120.564145,14.396279],[120.070429,14.970869],[119.920929,15.406347],[119.883773,16.363704],[120.286488,16.034629],[120.390047,17.599081],[120.715867,18.505227],[121.321308,18.504065]]]]}}, +{"type":"Feature","id":"PNG","properties":{"name":"Papua New Guinea"},"geometry":{"type":"MultiPolygon","coordinates":[[[[155.880026,-6.819997],[155.599991,-6.919991],[155.166994,-6.535931],[154.729192,-5.900828],[154.514114,-5.139118],[154.652504,-5.042431],[154.759991,-5.339984],[155.062918,-5.566792],[155.547746,-6.200655],[156.019965,-6.540014],[155.880026,-6.819997]]],[[[151.982796,-5.478063],[151.459107,-5.56028],[151.30139,-5.840728],[150.754447,-6.083763],[150.241197,-6.317754],[149.709963,-6.316513],[148.890065,-6.02604],[148.318937,-5.747142],[148.401826,-5.437756],[149.298412,-5.583742],[149.845562,-5.505503],[149.99625,-5.026101],[150.139756,-5.001348],[150.236908,-5.53222],[150.807467,-5.455842],[151.089672,-5.113693],[151.647881,-4.757074],[151.537862,-4.167807],[152.136792,-4.14879],[152.338743,-4.312966],[152.318693,-4.867661],[151.982796,-5.478063]]],[[[147.191874,-7.388024],[148.084636,-8.044108],[148.734105,-9.104664],[149.306835,-9.071436],[149.266631,-9.514406],[150.038728,-9.684318],[149.738798,-9.872937],[150.801628,-10.293687],[150.690575,-10.582713],[150.028393,-10.652476],[149.78231,-10.393267],[148.923138,-10.280923],[147.913018,-10.130441],[147.135443,-9.492444],[146.567881,-8.942555],[146.048481,-8.067414],[144.744168,-7.630128],[143.897088,-7.91533],[143.286376,-8.245491],[143.413913,-8.983069],[142.628431,-9.326821],[142.068259,-9.159596],[141.033852,-9.117893],[141.017057,-5.859022],[141.00021,-2.600151],[142.735247,-3.289153],[144.583971,-3.861418],[145.27318,-4.373738],[145.829786,-4.876498],[145.981922,-5.465609],[147.648073,-6.083659],[147.891108,-6.614015],[146.970905,-6.721657],[147.191874,-7.388024]]],[[[153.140038,-4.499983],[152.827292,-4.766427],[152.638673,-4.176127],[152.406026,-3.789743],[151.953237,-3.462062],[151.384279,-3.035422],[150.66205,-2.741486],[150.939965,-2.500002],[151.479984,-2.779985],[151.820015,-2.999972],[152.239989,-3.240009],[152.640017,-3.659983],[153.019994,-3.980015],[153.140038,-4.499983]]]]}}, +{"type":"Feature","id":"POL","properties":{"name":"Poland"},"geometry":{"type":"Polygon","coordinates":[[[15.016996,51.106674],[14.607098,51.745188],[14.685026,52.089947],[14.4376,52.62485],[14.074521,52.981263],[14.353315,53.248171],[14.119686,53.757029],[14.8029,54.050706],[16.363477,54.513159],[17.622832,54.851536],[18.620859,54.682606],[18.696255,54.438719],[19.66064,54.426084],[20.892245,54.312525],[22.731099,54.327537],[23.243987,54.220567],[23.484128,53.912498],[23.527536,53.470122],[23.804935,53.089731],[23.799199,52.691099],[23.199494,52.486977],[23.508002,52.023647],[23.527071,51.578454],[24.029986,50.705407],[23.922757,50.424881],[23.426508,50.308506],[22.51845,49.476774],[22.776419,49.027395],[22.558138,49.085738],[21.607808,49.470107],[20.887955,49.328772],[20.415839,49.431453],[19.825023,49.217125],[19.320713,49.571574],[18.909575,49.435846],[18.853144,49.49623],[18.392914,49.988629],[17.649445,50.049038],[17.554567,50.362146],[16.868769,50.473974],[16.719476,50.215747],[16.176253,50.422607],[16.238627,50.697733],[15.490972,50.78473],[15.016996,51.106674]]]}}, +{"type":"Feature","id":"PRI","properties":{"name":"Puerto Rico"},"geometry":{"type":"Polygon","coordinates":[[[-66.282434,18.514762],[-65.771303,18.426679],[-65.591004,18.228035],[-65.847164,17.975906],[-66.599934,17.981823],[-67.184162,17.946553],[-67.242428,18.37446],[-67.100679,18.520601],[-66.282434,18.514762]]]}}, +{"type":"Feature","id":"PRK","properties":{"name":"North Korea"},"geometry":{"type":"Polygon","coordinates":[[[130.640016,42.395009],[130.780007,42.220007],[130.400031,42.280004],[129.965949,41.941368],[129.667362,41.601104],[129.705189,40.882828],[129.188115,40.661808],[129.0104,40.485436],[128.633368,40.189847],[127.967414,40.025413],[127.533436,39.75685],[127.50212,39.323931],[127.385434,39.213472],[127.783343,39.050898],[128.349716,38.612243],[128.205746,38.370397],[127.780035,38.304536],[127.073309,38.256115],[126.68372,37.804773],[126.237339,37.840378],[126.174759,37.749686],[125.689104,37.94001],[125.568439,37.752089],[125.27533,37.669071],[125.240087,37.857224],[124.981033,37.948821],[124.712161,38.108346],[124.985994,38.548474],[125.221949,38.665857],[125.132859,38.848559],[125.38659,39.387958],[125.321116,39.551385],[124.737482,39.660344],[124.265625,39.928493],[125.079942,40.569824],[126.182045,41.107336],[126.869083,41.816569],[127.343783,41.503152],[128.208433,41.466772],[128.052215,41.994285],[129.596669,42.424982],[129.994267,42.985387],[130.640016,42.395009]]]}}, +{"type":"Feature","id":"PRT","properties":{"name":"Portugal"},"geometry":{"type":"Polygon","coordinates":[[[-9.034818,41.880571],[-8.671946,42.134689],[-8.263857,42.280469],[-8.013175,41.790886],[-7.422513,41.792075],[-7.251309,41.918346],[-6.668606,41.883387],[-6.389088,41.381815],[-6.851127,41.111083],[-6.86402,40.330872],[-7.026413,40.184524],[-7.066592,39.711892],[-7.498632,39.629571],[-7.098037,39.030073],[-7.374092,38.373059],[-7.029281,38.075764],[-7.166508,37.803894],[-7.537105,37.428904],[-7.453726,37.097788],[-7.855613,36.838269],[-8.382816,36.97888],[-8.898857,36.868809],[-8.746101,37.651346],[-8.839998,38.266243],[-9.287464,38.358486],[-9.526571,38.737429],[-9.446989,39.392066],[-9.048305,39.755093],[-8.977353,40.159306],[-8.768684,40.760639],[-8.790853,41.184334],[-8.990789,41.543459],[-9.034818,41.880571]]]}}, +{"type":"Feature","id":"PRY","properties":{"name":"Paraguay"},"geometry":{"type":"Polygon","coordinates":[[[-62.685057,-22.249029],[-62.291179,-21.051635],[-62.265961,-20.513735],[-61.786326,-19.633737],[-60.043565,-19.342747],[-59.115042,-19.356906],[-58.183471,-19.868399],[-58.166392,-20.176701],[-57.870674,-20.732688],[-57.937156,-22.090176],[-56.88151,-22.282154],[-56.473317,-22.0863],[-55.797958,-22.35693],[-55.610683,-22.655619],[-55.517639,-23.571998],[-55.400747,-23.956935],[-55.027902,-24.001274],[-54.652834,-23.839578],[-54.29296,-24.021014],[-54.293476,-24.5708],[-54.428946,-25.162185],[-54.625291,-25.739255],[-54.788795,-26.621786],[-55.695846,-27.387837],[-56.486702,-27.548499],[-57.60976,-27.395899],[-58.618174,-27.123719],[-57.63366,-25.603657],[-57.777217,-25.16234],[-58.807128,-24.771459],[-60.028966,-24.032796],[-60.846565,-23.880713],[-62.685057,-22.249029]]]}}, +{"type":"Feature","id":"QAT","properties":{"name":"Qatar"},"geometry":{"type":"Polygon","coordinates":[[[50.810108,24.754743],[50.743911,25.482424],[51.013352,26.006992],[51.286462,26.114582],[51.589079,25.801113],[51.6067,25.21567],[51.389608,24.627386],[51.112415,24.556331],[50.810108,24.754743]]]}}, +{"type":"Feature","id":"ROU","properties":{"name":"Romania"},"geometry":{"type":"Polygon","coordinates":[[[22.710531,47.882194],[23.142236,48.096341],[23.760958,47.985598],[24.402056,47.981878],[24.866317,47.737526],[25.207743,47.891056],[25.945941,47.987149],[26.19745,48.220881],[26.619337,48.220726],[26.924176,48.123264],[27.233873,47.826771],[27.551166,47.405117],[28.12803,46.810476],[28.160018,46.371563],[28.054443,45.944586],[28.233554,45.488283],[28.679779,45.304031],[29.149725,45.464925],[29.603289,45.293308],[29.626543,45.035391],[29.141612,44.82021],[28.837858,44.913874],[28.558081,43.707462],[27.970107,43.812468],[27.2424,44.175986],[26.065159,43.943494],[25.569272,43.688445],[24.100679,43.741051],[23.332302,43.897011],[22.944832,43.823785],[22.65715,44.234923],[22.474008,44.409228],[22.705726,44.578003],[22.459022,44.702517],[22.145088,44.478422],[21.562023,44.768947],[21.483526,45.18117],[20.874313,45.416375],[20.762175,45.734573],[20.220192,46.127469],[21.021952,46.316088],[21.626515,46.994238],[22.099768,47.672439],[22.710531,47.882194]]]}}, +{"type":"Feature","id":"RUS","properties":{"name":"Russia"},"geometry":{"type":"MultiPolygon","coordinates":[[[[143.648007,50.7476],[144.654148,48.976391],[143.173928,49.306551],[142.558668,47.861575],[143.533492,46.836728],[143.505277,46.137908],[142.747701,46.740765],[142.09203,45.966755],[141.906925,46.805929],[142.018443,47.780133],[141.904445,48.859189],[142.1358,49.615163],[142.179983,50.952342],[141.594076,51.935435],[141.682546,53.301966],[142.606934,53.762145],[142.209749,54.225476],[142.654786,54.365881],[142.914616,53.704578],[143.260848,52.74076],[143.235268,51.75666],[143.648007,50.7476]]],[[[22.731099,54.327537],[20.892245,54.312525],[19.66064,54.426084],[19.888481,54.86616],[21.268449,55.190482],[22.315724,55.015299],[22.757764,54.856574],[22.651052,54.582741],[22.731099,54.327537]]],[[[-175.01425,66.58435],[-174.33983,66.33556],[-174.57182,67.06219],[-171.85731,66.91308],[-169.89958,65.97724],[-170.89107,65.54139],[-172.53025,65.43791],[-172.555,64.46079],[-172.95533,64.25269],[-173.89184,64.2826],[-174.65392,64.63125],[-175.98353,64.92288],[-176.20716,65.35667],[-177.22266,65.52024],[-178.35993,65.39052],[-178.90332,65.74044],[-178.68611,66.11211],[-179.88377,65.87456],[-179.43268,65.40411],[-180,64.979709],[-180,68.963636],[-177.55,68.2],[-174.92825,67.20589],[-175.01425,66.58435]]],[[[180,70.832199],[178.903425,70.78114],[178.7253,71.0988],[180,71.515714],[180,70.832199]]],[[[-178.69378,70.89302],[-180,70.832199],[-180,71.515714],[-179.871875,71.55762],[-179.02433,71.55553],[-177.577945,71.26948],[-177.663575,71.13277],[-178.69378,70.89302]]],[[[143.60385,73.21244],[142.08763,73.20544],[140.038155,73.31692],[139.86312,73.36983],[140.81171,73.76506],[142.06207,73.85758],[143.48283,73.47525],[143.60385,73.21244]]],[[[150.73167,75.08406],[149.575925,74.68892],[147.977465,74.778355],[146.11919,75.17298],[146.358485,75.49682],[148.22223,75.345845],[150.73167,75.08406]]],[[[145.086285,75.562625],[144.3,74.82],[140.61381,74.84768],[138.95544,74.61148],[136.97439,75.26167],[137.51176,75.94917],[138.831075,76.13676],[141.471615,76.09289],[145.086285,75.562625]]],[[[57.535693,70.720464],[56.944979,70.632743],[53.677375,70.762658],[53.412017,71.206662],[51.601895,71.474759],[51.455754,72.014881],[52.478275,72.229442],[52.444169,72.774731],[54.427614,73.627548],[53.50829,73.749814],[55.902459,74.627486],[55.631933,75.081412],[57.868644,75.60939],[61.170044,76.251883],[64.498368,76.439055],[66.210977,76.809782],[68.15706,76.939697],[68.852211,76.544811],[68.180573,76.233642],[64.637326,75.737755],[61.583508,75.260885],[58.477082,74.309056],[56.986786,73.333044],[55.419336,72.371268],[55.622838,71.540595],[57.535693,70.720464]]],[[[106.97013,76.97419],[107.24,76.48],[108.1538,76.72335],[111.07726,76.71],[113.33151,76.22224],[114.13417,75.84764],[113.88539,75.32779],[112.77918,75.03186],[110.15125,74.47673],[109.4,74.18],[110.64,74.04],[112.11919,73.78774],[113.01954,73.97693],[113.52958,73.33505],[113.96881,73.59488],[115.56782,73.75285],[118.77633,73.58772],[119.02,73.12],[123.20066,72.97122],[123.25777,73.73503],[125.38,73.56],[126.97644,73.56549],[128.59126,73.03871],[129.05157,72.39872],[128.46,71.98],[129.71599,71.19304],[131.28858,70.78699],[132.2535,71.8363],[133.85766,71.38642],[135.56193,71.65525],[137.49755,71.34763],[138.23409,71.62803],[139.86983,71.48783],[139.14791,72.41619],[140.46817,72.84941],[149.5,72.2],[150.35118,71.60643],[152.9689,70.84222],[157.00688,71.03141],[158.99779,70.86672],[159.83031,70.45324],[159.70866,69.72198],[160.94053,69.43728],[162.27907,69.64204],[164.05248,69.66823],[165.94037,69.47199],[167.83567,69.58269],[169.57763,68.6938],[170.81688,69.01363],[170.0082,69.65276],[170.45345,70.09703],[173.64391,69.81743],[175.72403,69.87725],[178.6,69.4],[180,68.963636],[180,64.979709],[179.99281,64.97433],[178.7072,64.53493],[177.41128,64.60821],[178.313,64.07593],[178.90825,63.25197],[179.37034,62.98262],[179.48636,62.56894],[179.22825,62.3041],[177.3643,62.5219],[174.56929,61.76915],[173.68013,61.65261],[172.15,60.95],[170.6985,60.33618],[170.33085,59.88177],[168.90046,60.57355],[166.29498,59.78855],[165.84,60.16],[164.87674,59.7316],[163.53929,59.86871],[163.21711,59.21101],[162.01733,58.24328],[162.05297,57.83912],[163.19191,57.61503],[163.05794,56.15924],[162.12958,56.12219],[161.70146,55.28568],[162.11749,54.85514],[160.36877,54.34433],[160.02173,53.20257],[158.53094,52.95868],[158.23118,51.94269],[156.78979,51.01105],[156.42,51.7],[155.99182,53.15895],[155.43366,55.38103],[155.91442,56.76792],[156.75815,57.3647],[156.81035,57.83204],[158.36433,58.05575],[160.15064,59.31477],[161.87204,60.343],[163.66969,61.1409],[164.47355,62.55061],[163.25842,62.46627],[162.65791,61.6425],[160.12148,60.54423],[159.30232,61.77396],[156.72068,61.43442],[154.21806,59.75818],[155.04375,59.14495],[152.81185,58.88385],[151.26573,58.78089],[151.33815,59.50396],[149.78371,59.65573],[148.54481,59.16448],[145.48722,59.33637],[142.19782,59.03998],[138.95848,57.08805],[135.12619,54.72959],[136.70171,54.60355],[137.19342,53.97732],[138.1647,53.75501],[138.80463,54.25455],[139.90151,54.18968],[141.34531,53.08957],[141.37923,52.23877],[140.59742,51.23967],[140.51308,50.04553],[140.06193,48.44671],[138.55472,46.99965],[138.21971,46.30795],[136.86232,45.1435],[135.51535,43.989],[134.86939,43.39821],[133.53687,42.81147],[132.90627,42.79849],[132.27807,43.28456],[130.93587,42.55274],[130.78,42.22],[130.64,42.395],[130.633866,42.903015],[131.144688,42.92999],[131.288555,44.11152],[131.02519,44.96796],[131.883454,45.321162],[133.09712,45.14409],[133.769644,46.116927],[134.11235,47.21248],[134.50081,47.57845],[135.026311,48.47823],[133.373596,48.183442],[132.50669,47.78896],[130.98726,47.79013],[130.582293,48.729687],[129.397818,49.4406],[127.6574,49.76027],[127.287456,50.739797],[126.939157,51.353894],[126.564399,51.784255],[125.946349,52.792799],[125.068211,53.161045],[123.57147,53.4588],[122.245748,53.431726],[121.003085,53.251401],[120.177089,52.753886],[120.725789,52.516226],[120.7382,51.96411],[120.18208,51.64355],[119.27939,50.58292],[119.288461,50.142883],[117.879244,49.510983],[116.678801,49.888531],[115.485695,49.805177],[114.96211,50.140247],[114.362456,50.248303],[112.89774,49.543565],[111.581231,49.377968],[110.662011,49.130128],[109.402449,49.292961],[108.475167,49.282548],[107.868176,49.793705],[106.888804,50.274296],[105.886591,50.406019],[104.62158,50.27532],[103.676545,50.089966],[102.25589,50.51056],[102.06521,51.25991],[100.88948,51.516856],[99.981732,51.634006],[98.861491,52.047366],[97.82574,51.010995],[98.231762,50.422401],[97.25976,49.72605],[95.81402,49.97746],[94.815949,50.013433],[94.147566,50.480537],[93.10421,50.49529],[92.234712,50.802171],[90.713667,50.331812],[88.805567,49.470521],[87.751264,49.297198],[87.35997,49.214981],[86.829357,49.826675],[85.54127,49.692859],[85.11556,50.117303],[84.416377,50.3114],[83.935115,50.889246],[83.383004,51.069183],[81.945986,50.812196],[80.568447,51.388336],[80.03556,50.864751],[77.800916,53.404415],[76.525179,54.177003],[76.8911,54.490524],[74.38482,53.54685],[73.425679,53.48981],[73.508516,54.035617],[72.22415,54.376655],[71.180131,54.133285],[70.865267,55.169734],[69.068167,55.38525],[68.1691,54.970392],[65.66687,54.60125],[65.178534,54.354228],[61.4366,54.00625],[60.978066,53.664993],[61.699986,52.979996],[60.739993,52.719986],[60.927269,52.447548],[59.967534,51.96042],[61.588003,51.272659],[61.337424,50.79907],[59.932807,50.842194],[59.642282,50.545442],[58.36332,51.06364],[56.77798,51.04355],[55.71694,50.62171],[54.532878,51.02624],[52.328724,51.718652],[50.766648,51.692762],[48.702382,50.605128],[48.577841,49.87476],[47.54948,50.454698],[46.751596,49.356006],[47.043672,49.152039],[46.466446,48.394152],[47.31524,47.71585],[48.05725,47.74377],[48.694734,47.075628],[48.59325,46.56104],[49.10116,46.39933],[48.64541,45.80629],[47.67591,45.64149],[46.68201,44.6092],[47.59094,43.66016],[47.49252,42.98658],[48.58437,41.80888],[47.987283,41.405819],[47.815666,41.151416],[47.373315,41.219732],[46.686071,41.827137],[46.404951,41.860675],[45.7764,42.09244],[45.470279,42.502781],[44.537623,42.711993],[43.93121,42.55496],[43.75599,42.74083],[42.3944,43.2203],[40.92219,43.38215],[40.076965,43.553104],[39.955009,43.434998],[38.68,44.28],[37.53912,44.65721],[36.67546,45.24469],[37.40317,45.40451],[38.23295,46.24087],[37.67372,46.63657],[39.14767,47.04475],[39.1212,47.26336],[38.223538,47.10219],[38.255112,47.5464],[38.77057,47.82562],[39.738278,47.898937],[39.89562,48.23241],[39.67465,48.78382],[40.080789,49.30743],[40.06904,49.60105],[38.594988,49.926462],[38.010631,49.915662],[37.39346,50.383953],[36.626168,50.225591],[35.356116,50.577197],[35.37791,50.77394],[35.022183,51.207572],[34.224816,51.255993],[34.141978,51.566413],[34.391731,51.768882],[33.7527,52.335075],[32.715761,52.238465],[32.412058,52.288695],[32.15944,52.06125],[31.78597,52.10168],[31.540018,52.742052],[31.305201,53.073996],[31.49764,53.16743],[32.304519,53.132726],[32.693643,53.351421],[32.405599,53.618045],[31.731273,53.794029],[31.791424,53.974639],[31.384472,54.157056],[30.757534,54.811771],[30.971836,55.081548],[30.873909,55.550976],[29.896294,55.789463],[29.371572,55.670091],[29.229513,55.918344],[28.176709,56.16913],[27.855282,56.759326],[27.770016,57.244258],[27.288185,57.474528],[27.716686,57.791899],[27.42015,58.72457],[28.131699,59.300825],[27.98112,59.47537],[29.1177,60.02805],[28.07,60.50352],[30.211107,61.780028],[31.139991,62.357693],[31.516092,62.867687],[30.035872,63.552814],[30.444685,64.204453],[29.54443,64.948672],[30.21765,65.80598],[29.054589,66.944286],[29.977426,67.698297],[28.445944,68.364613],[28.59193,69.064777],[29.39955,69.15692],[31.10108,69.55811],[32.13272,69.90595],[33.77547,69.30142],[36.51396,69.06342],[40.29234,67.9324],[41.05987,67.45713],[41.12595,66.79158],[40.01583,66.26618],[38.38295,65.99953],[33.91871,66.75961],[33.18444,66.63253],[34.81477,65.90015],[34.878574,65.436213],[34.94391,64.41437],[36.23129,64.10945],[37.01273,63.84983],[37.14197,64.33471],[36.539579,64.76446],[37.17604,65.14322],[39.59345,64.52079],[40.4356,64.76446],[39.7626,65.49682],[42.09309,66.47623],[43.01604,66.41858],[43.94975,66.06908],[44.53226,66.75634],[43.69839,67.35245],[44.18795,67.95051],[43.45282,68.57079],[46.25,68.25],[46.82134,67.68997],[45.55517,67.56652],[45.56202,67.01005],[46.34915,66.66767],[47.89416,66.88455],[48.13876,67.52238],[50.22766,67.99867],[53.71743,68.85738],[54.47171,68.80815],[53.48582,68.20131],[54.72628,68.09702],[55.44268,68.43866],[57.31702,68.46628],[58.802,68.88082],[59.94142,68.27844],[61.07784,68.94069],[60.03,69.52],[60.55,69.85],[63.504,69.54739],[64.888115,69.234835],[68.51216,68.09233],[69.18068,68.61563],[68.16444,69.14436],[68.13522,69.35649],[66.93008,69.45461],[67.25976,69.92873],[66.72492,70.70889],[66.69466,71.02897],[68.54006,71.9345],[69.19636,72.84336],[69.94,73.04],[72.58754,72.77629],[72.79603,72.22006],[71.84811,71.40898],[72.47011,71.09019],[72.79188,70.39114],[72.5647,69.02085],[73.66787,68.4079],[73.2387,67.7404],[71.28,66.32],[72.42301,66.17267],[72.82077,66.53267],[73.92099,66.78946],[74.18651,67.28429],[75.052,67.76047],[74.46926,68.32899],[74.93584,68.98918],[73.84236,69.07146],[73.60187,69.62763],[74.3998,70.63175],[73.1011,71.44717],[74.89082,72.12119],[74.65926,72.83227],[75.15801,72.85497],[75.68351,72.30056],[75.28898,71.33556],[76.35911,71.15287],[75.90313,71.87401],[77.57665,72.26717],[79.65202,72.32011],[81.5,71.75],[80.61071,72.58285],[80.51109,73.6482],[82.25,73.85],[84.65526,73.80591],[86.8223,73.93688],[86.00956,74.45967],[87.16682,75.11643],[88.31571,75.14393],[90.26,75.64],[92.90058,75.77333],[93.23421,76.0472],[95.86,76.14],[96.67821,75.91548],[98.92254,76.44689],[100.75967,76.43028],[101.03532,76.86189],[101.99084,77.28754],[104.3516,77.69792],[106.06664,77.37389],[104.705,77.1274],[106.97013,76.97419]]],[[[105.07547,78.30689],[99.43814,77.921],[101.2649,79.23399],[102.08635,79.34641],[102.837815,79.28129],[105.37243,78.71334],[105.07547,78.30689]]],[[[51.136187,80.54728],[49.793685,80.415428],[48.894411,80.339567],[48.754937,80.175468],[47.586119,80.010181],[46.502826,80.247247],[47.072455,80.559424],[44.846958,80.58981],[46.799139,80.771918],[48.318477,80.78401],[48.522806,80.514569],[49.09719,80.753986],[50.039768,80.918885],[51.522933,80.699726],[51.136187,80.54728]]],[[[99.93976,78.88094],[97.75794,78.7562],[94.97259,79.044745],[93.31288,79.4265],[92.5454,80.14379],[91.18107,80.34146],[93.77766,81.0246],[95.940895,81.2504],[97.88385,80.746975],[100.186655,79.780135],[99.93976,78.88094]]]]}}, +{"type":"Feature","id":"RWA","properties":{"name":"Rwanda"},"geometry":{"type":"Polygon","coordinates":[[[30.419105,-1.134659],[30.816135,-1.698914],[30.758309,-2.28725],[30.469696,-2.413858],[29.938359,-2.348487],[29.632176,-2.917858],[29.024926,-2.839258],[29.117479,-2.292211],[29.254835,-2.21511],[29.291887,-1.620056],[29.579466,-1.341313],[29.821519,-1.443322],[30.419105,-1.134659]]]}}, +{"type":"Feature","id":"ESH","properties":{"name":"Western Sahara"},"geometry":{"type":"Polygon","coordinates":[[[-8.794884,27.120696],[-8.817828,27.656426],[-8.66559,27.656426],[-8.665124,27.589479],[-8.6844,27.395744],[-8.687294,25.881056],[-11.969419,25.933353],[-11.937224,23.374594],[-12.874222,23.284832],[-13.118754,22.77122],[-12.929102,21.327071],[-16.845194,21.333323],[-17.063423,20.999752],[-17.020428,21.42231],[-17.002962,21.420734],[-14.750955,21.5006],[-14.630833,21.86094],[-14.221168,22.310163],[-13.89111,23.691009],[-12.500963,24.770116],[-12.030759,26.030866],[-11.71822,26.104092],[-11.392555,26.883424],[-10.551263,26.990808],[-10.189424,26.860945],[-9.735343,26.860945],[-9.413037,27.088476],[-8.794884,27.120696]]]}}, +{"type":"Feature","id":"SAU","properties":{"name":"Saudi Arabia"},"geometry":{"type":"Polygon","coordinates":[[[42.779332,16.347891],[42.649573,16.774635],[42.347989,17.075806],[42.270888,17.474722],[41.754382,17.833046],[41.221391,18.6716],[40.939341,19.486485],[40.247652,20.174635],[39.801685,20.338862],[39.139399,21.291905],[39.023696,21.986875],[39.066329,22.579656],[38.492772,23.688451],[38.02386,24.078686],[37.483635,24.285495],[37.154818,24.858483],[37.209491,25.084542],[36.931627,25.602959],[36.639604,25.826228],[36.249137,26.570136],[35.640182,27.37652],[35.130187,28.063352],[34.632336,28.058546],[34.787779,28.607427],[34.83222,28.957483],[34.956037,29.356555],[36.068941,29.197495],[36.501214,29.505254],[36.740528,29.865283],[37.503582,30.003776],[37.66812,30.338665],[37.998849,30.5085],[37.002166,31.508413],[39.004886,32.010217],[39.195468,32.161009],[40.399994,31.889992],[41.889981,31.190009],[44.709499,29.178891],[46.568713,29.099025],[47.459822,29.002519],[47.708851,28.526063],[48.416094,28.552004],[48.807595,27.689628],[49.299554,27.461218],[49.470914,27.109999],[50.152422,26.689663],[50.212935,26.277027],[50.113303,25.943972],[50.239859,25.60805],[50.527387,25.327808],[50.660557,24.999896],[50.810108,24.754743],[51.112415,24.556331],[51.389608,24.627386],[51.579519,24.245497],[51.617708,24.014219],[52.000733,23.001154],[55.006803,22.496948],[55.208341,22.70833],[55.666659,22.000001],[54.999982,19.999994],[52.00001,19.000003],[49.116672,18.616668],[48.183344,18.166669],[47.466695,17.116682],[47.000005,16.949999],[46.749994,17.283338],[46.366659,17.233315],[45.399999,17.333335],[45.216651,17.433329],[44.062613,17.410359],[43.791519,17.319977],[43.380794,17.579987],[43.115798,17.08844],[43.218375,16.66689],[42.779332,16.347891]]]}}, +{"type":"Feature","id":"SDN","properties":{"name":"Sudan"},"geometry":{"type":"Polygon","coordinates":[[[33.963393,9.464285],[33.824963,9.484061],[33.842131,9.981915],[33.721959,10.325262],[33.206938,10.720112],[33.086766,11.441141],[33.206938,12.179338],[32.743419,12.248008],[32.67475,12.024832],[32.073892,11.97333],[32.314235,11.681484],[32.400072,11.080626],[31.850716,10.531271],[31.352862,9.810241],[30.837841,9.707237],[29.996639,10.290927],[29.618957,10.084919],[29.515953,9.793074],[29.000932,9.604232],[28.966597,9.398224],[27.97089,9.398224],[27.833551,9.604232],[27.112521,9.638567],[26.752006,9.466893],[26.477328,9.55273],[25.962307,10.136421],[25.790633,10.411099],[25.069604,10.27376],[24.794926,9.810241],[24.537415,8.917538],[24.194068,8.728696],[23.88698,8.61973],[23.805813,8.666319],[23.459013,8.954286],[23.394779,9.265068],[23.55725,9.681218],[23.554304,10.089255],[22.977544,10.714463],[22.864165,11.142395],[22.87622,11.38461],[22.50869,11.67936],[22.49762,12.26024],[22.28801,12.64605],[21.93681,12.58818],[22.03759,12.95546],[22.29658,13.37232],[22.18329,13.78648],[22.51202,14.09318],[22.30351,14.32682],[22.56795,14.94429],[23.02459,15.68072],[23.88689,15.61084],[23.83766,19.58047],[23.85,20],[25,20.00304],[25,22],[29.02,22],[32.9,22],[36.86623,22],[37.18872,21.01885],[36.96941,20.83744],[37.1147,19.80796],[37.48179,18.61409],[37.86276,18.36786],[38.41009,17.998307],[37.904,17.42754],[37.16747,17.26314],[36.85253,16.95655],[36.75389,16.29186],[36.32322,14.82249],[36.42951,14.42211],[36.27022,13.56333],[35.86363,12.57828],[35.26049,12.08286],[34.83163,11.31896],[34.73115,10.91017],[34.25745,10.63009],[33.96162,9.58358],[33.963393,9.464285]]]}}, +{"type":"Feature","id":"SDS","properties":{"name":"South Sudan"},"geometry":{"type":"Polygon","coordinates":[[[33.963393,9.464285],[33.97498,8.68456],[33.8255,8.37916],[33.2948,8.35458],[32.95418,7.78497],[33.56829,7.71334],[34.0751,7.22595],[34.25032,6.82607],[34.70702,6.59422],[35.298007,5.506],[34.620196,4.847123],[34.005,4.249885],[33.39,3.79],[32.68642,3.79232],[31.88145,3.55827],[31.24556,3.7819],[30.83385,3.50917],[29.95349,4.1737],[29.715995,4.600805],[29.159078,4.389267],[28.696678,4.455077],[28.428994,4.287155],[27.979977,4.408413],[27.374226,5.233944],[27.213409,5.550953],[26.465909,5.946717],[26.213418,6.546603],[25.796648,6.979316],[25.124131,7.500085],[25.114932,7.825104],[24.567369,8.229188],[23.88698,8.61973],[24.194068,8.728696],[24.537415,8.917538],[24.794926,9.810241],[25.069604,10.27376],[25.790633,10.411099],[25.962307,10.136421],[26.477328,9.55273],[26.752006,9.466893],[27.112521,9.638567],[27.833551,9.604232],[27.97089,9.398224],[28.966597,9.398224],[29.000932,9.604232],[29.515953,9.793074],[29.618957,10.084919],[29.996639,10.290927],[30.837841,9.707237],[31.352862,9.810241],[31.850716,10.531271],[32.400072,11.080626],[32.314235,11.681484],[32.073892,11.97333],[32.67475,12.024832],[32.743419,12.248008],[33.206938,12.179338],[33.086766,11.441141],[33.206938,10.720112],[33.721959,10.325262],[33.842131,9.981915],[33.824963,9.484061],[33.963393,9.464285]]]}}, +{"type":"Feature","id":"SEN","properties":{"name":"Senegal"},"geometry":{"type":"Polygon","coordinates":[[[-16.713729,13.594959],[-17.126107,14.373516],[-17.625043,14.729541],[-17.185173,14.919477],[-16.700706,15.621527],[-16.463098,16.135036],[-16.12069,16.455663],[-15.623666,16.369337],[-15.135737,16.587282],[-14.577348,16.598264],[-14.099521,16.304302],[-13.435738,16.039383],[-12.830658,15.303692],[-12.17075,14.616834],[-12.124887,13.994727],[-11.927716,13.422075],[-11.553398,13.141214],[-11.467899,12.754519],[-11.513943,12.442988],[-11.658301,12.386583],[-12.203565,12.465648],[-12.278599,12.35444],[-12.499051,12.33209],[-13.217818,12.575874],[-13.700476,12.586183],[-15.548477,12.62817],[-15.816574,12.515567],[-16.147717,12.547762],[-16.677452,12.384852],[-16.841525,13.151394],[-15.931296,13.130284],[-15.691001,13.270353],[-15.511813,13.27857],[-15.141163,13.509512],[-14.712197,13.298207],[-14.277702,13.280585],[-13.844963,13.505042],[-14.046992,13.794068],[-14.376714,13.62568],[-14.687031,13.630357],[-15.081735,13.876492],[-15.39877,13.860369],[-15.624596,13.623587],[-16.713729,13.594959]]]}}, +{"type":"Feature","id":"SLB","properties":{"name":"Solomon Islands"},"geometry":{"type":"MultiPolygon","coordinates":[[[[162.119025,-10.482719],[162.398646,-10.826367],[161.700032,-10.820011],[161.319797,-10.204751],[161.917383,-10.446701],[162.119025,-10.482719]]],[[[160.852229,-9.872937],[160.462588,-9.89521],[159.849447,-9.794027],[159.640003,-9.63998],[159.702945,-9.24295],[160.362956,-9.400304],[160.688518,-9.610162],[160.852229,-9.872937]]],[[[161.679982,-9.599982],[161.529397,-9.784312],[160.788253,-8.917543],[160.579997,-8.320009],[160.920028,-8.320009],[161.280006,-9.120011],[161.679982,-9.599982]]],[[[159.875027,-8.33732],[159.917402,-8.53829],[159.133677,-8.114181],[158.586114,-7.754824],[158.21115,-7.421872],[158.359978,-7.320018],[158.820001,-7.560003],[159.640003,-8.020027],[159.875027,-8.33732]]],[[[157.538426,-7.34782],[157.33942,-7.404767],[156.90203,-7.176874],[156.491358,-6.765943],[156.542828,-6.599338],[157.14,-7.021638],[157.538426,-7.34782]]]]}}, +{"type":"Feature","id":"SLE","properties":{"name":"Sierra Leone"},"geometry":{"type":"Polygon","coordinates":[[[-11.438779,6.785917],[-11.708195,6.860098],[-12.428099,7.262942],[-12.949049,7.798646],[-13.124025,8.163946],[-13.24655,8.903049],[-12.711958,9.342712],[-12.596719,9.620188],[-12.425929,9.835834],[-12.150338,9.858572],[-11.917277,10.046984],[-11.117481,10.045873],[-10.839152,9.688246],[-10.622395,9.26791],[-10.65477,8.977178],[-10.494315,8.715541],[-10.505477,8.348896],[-10.230094,8.406206],[-10.695595,7.939464],[-11.146704,7.396706],[-11.199802,7.105846],[-11.438779,6.785917]]]}}, +{"type":"Feature","id":"SLV","properties":{"name":"El Salvador"},"geometry":{"type":"Polygon","coordinates":[[[-87.793111,13.38448],[-87.904112,13.149017],[-88.483302,13.163951],[-88.843228,13.259734],[-89.256743,13.458533],[-89.812394,13.520622],[-90.095555,13.735338],[-90.064678,13.88197],[-89.721934,14.134228],[-89.534219,14.244816],[-89.587343,14.362586],[-89.353326,14.424133],[-89.058512,14.340029],[-88.843073,14.140507],[-88.541231,13.980155],[-88.503998,13.845486],[-88.065343,13.964626],[-87.859515,13.893312],[-87.723503,13.78505],[-87.793111,13.38448]]]}}, +{"type":"Feature","id":"-99","properties":{"name":"Somaliland"},"geometry":{"type":"Polygon","coordinates":[[[48.93813,9.451749],[48.486736,8.837626],[47.78942,8.003],[46.948328,7.996877],[43.67875,9.18358],[43.296975,9.540477],[42.92812,10.02194],[42.55876,10.57258],[42.776852,10.926879],[43.145305,11.46204],[43.47066,11.27771],[43.666668,10.864169],[44.117804,10.445538],[44.614259,10.442205],[45.556941,10.698029],[46.645401,10.816549],[47.525658,11.127228],[48.021596,11.193064],[48.378784,11.375482],[48.948206,11.410622],[48.942005,11.394266],[48.938491,10.982327],[48.938233,9.9735],[48.93813,9.451749]]]}}, +{"type":"Feature","id":"SOM","properties":{"name":"Somalia"},"geometry":{"type":"Polygon","coordinates":[[[49.72862,11.5789],[50.25878,11.67957],[50.73202,12.0219],[51.1112,12.02464],[51.13387,11.74815],[51.04153,11.16651],[51.04531,10.6409],[50.83418,10.27972],[50.55239,9.19874],[50.07092,8.08173],[49.4527,6.80466],[48.59455,5.33911],[47.74079,4.2194],[46.56476,2.85529],[45.56399,2.04576],[44.06815,1.05283],[43.13597,0.2922],[42.04157,-0.91916],[41.81095,-1.44647],[41.58513,-1.68325],[40.993,-0.85829],[40.98105,2.78452],[41.855083,3.918912],[42.12861,4.23413],[42.76967,4.25259],[43.66087,4.95755],[44.9636,5.00162],[47.78942,8.003],[48.486736,8.837626],[48.93813,9.451749],[48.938233,9.9735],[48.938491,10.982327],[48.942005,11.394266],[48.948205,11.410617],[49.26776,11.43033],[49.72862,11.5789]]]}}, +{"type":"Feature","id":"SRB","properties":{"name":"Republic of Serbia"},"geometry":{"type":"Polygon","coordinates":[[[20.874313,45.416375],[21.483526,45.18117],[21.562023,44.768947],[22.145088,44.478422],[22.459022,44.702517],[22.705726,44.578003],[22.474008,44.409228],[22.65715,44.234923],[22.410446,44.008063],[22.500157,43.642814],[22.986019,43.211161],[22.604801,42.898519],[22.436595,42.580321],[22.545012,42.461362],[22.380526,42.32026],[21.91708,42.30364],[21.576636,42.245224],[21.54332,42.32025],[21.66292,42.43922],[21.77505,42.6827],[21.63302,42.67717],[21.43866,42.86255],[21.27421,42.90959],[21.143395,43.068685],[20.95651,43.13094],[20.81448,43.27205],[20.63508,43.21671],[20.49679,42.88469],[20.25758,42.81275],[20.3398,42.89852],[19.95857,43.10604],[19.63,43.21378],[19.48389,43.35229],[19.21852,43.52384],[19.454,43.5681],[19.59976,44.03847],[19.11761,44.42307],[19.36803,44.863],[19.00548,44.86023],[19.390476,45.236516],[19.072769,45.521511],[18.82982,45.90888],[19.596045,46.17173],[20.220192,46.127469],[20.762175,45.734573],[20.874313,45.416375]]]}}, +{"type":"Feature","id":"SUR","properties":{"name":"Suriname"},"geometry":{"type":"Polygon","coordinates":[[[-57.147436,5.97315],[-55.949318,5.772878],[-55.84178,5.953125],[-55.03325,6.025291],[-53.958045,5.756548],[-54.478633,4.896756],[-54.399542,4.212611],[-54.006931,3.620038],[-54.181726,3.18978],[-54.269705,2.732392],[-54.524754,2.311849],[-55.097587,2.523748],[-55.569755,2.421506],[-55.973322,2.510364],[-56.073342,2.220795],[-55.9056,2.021996],[-55.995698,1.817667],[-56.539386,1.899523],[-57.150098,2.768927],[-57.281433,3.333492],[-57.601569,3.334655],[-58.044694,4.060864],[-57.86021,4.576801],[-57.914289,4.812626],[-57.307246,5.073567],[-57.147436,5.97315]]]}}, +{"type":"Feature","id":"SVK","properties":{"name":"Slovakia"},"geometry":{"type":"Polygon","coordinates":[[[18.853144,49.49623],[18.909575,49.435846],[19.320713,49.571574],[19.825023,49.217125],[20.415839,49.431453],[20.887955,49.328772],[21.607808,49.470107],[22.558138,49.085738],[22.280842,48.825392],[22.085608,48.422264],[21.872236,48.319971],[20.801294,48.623854],[20.473562,48.56285],[20.239054,48.327567],[19.769471,48.202691],[19.661364,48.266615],[19.174365,48.111379],[18.777025,48.081768],[18.696513,47.880954],[17.857133,47.758429],[17.488473,47.867466],[16.979667,48.123497],[16.879983,48.470013],[16.960288,48.596982],[17.101985,48.816969],[17.545007,48.800019],[17.886485,48.903475],[17.913512,48.996493],[18.104973,49.043983],[18.170498,49.271515],[18.399994,49.315001],[18.554971,49.495015],[18.853144,49.49623]]]}}, +{"type":"Feature","id":"SVN","properties":{"name":"Slovenia"},"geometry":{"type":"Polygon","coordinates":[[[13.806475,46.509306],[14.632472,46.431817],[15.137092,46.658703],[16.011664,46.683611],[16.202298,46.852386],[16.370505,46.841327],[16.564808,46.503751],[15.768733,46.238108],[15.67153,45.834154],[15.323954,45.731783],[15.327675,45.452316],[14.935244,45.471695],[14.595109,45.634941],[14.411968,45.466166],[13.71506,45.500324],[13.93763,45.591016],[13.69811,46.016778],[13.806475,46.509306]]]}}, +{"type":"Feature","id":"SWE","properties":{"name":"Sweden"},"geometry":{"type":"Polygon","coordinates":[[[22.183173,65.723741],[21.213517,65.026005],[21.369631,64.413588],[19.778876,63.609554],[17.847779,62.7494],[17.119555,61.341166],[17.831346,60.636583],[18.787722,60.081914],[17.869225,58.953766],[16.829185,58.719827],[16.44771,57.041118],[15.879786,56.104302],[14.666681,56.200885],[14.100721,55.407781],[12.942911,55.361737],[12.625101,56.30708],[11.787942,57.441817],[11.027369,58.856149],[11.468272,59.432393],[12.300366,60.117933],[12.631147,61.293572],[11.992064,61.800362],[11.930569,63.128318],[12.579935,64.066219],[13.571916,64.049114],[13.919905,64.445421],[13.55569,64.787028],[15.108411,66.193867],[16.108712,67.302456],[16.768879,68.013937],[17.729182,68.010552],[17.993868,68.567391],[19.87856,68.407194],[20.025269,69.065139],[20.645593,69.106247],[21.978535,68.616846],[23.539473,67.936009],[23.56588,66.396051],[23.903379,66.006927],[22.183173,65.723741]]]}}, +{"type":"Feature","id":"SWZ","properties":{"name":"Swaziland"},"geometry":{"type":"Polygon","coordinates":[[[32.071665,-26.73382],[31.86806,-27.177927],[31.282773,-27.285879],[30.685962,-26.743845],[30.676609,-26.398078],[30.949667,-26.022649],[31.04408,-25.731452],[31.333158,-25.660191],[31.837778,-25.843332],[31.985779,-26.29178],[32.071665,-26.73382]]]}}, +{"type":"Feature","id":"SYR","properties":{"name":"Syria"},"geometry":{"type":"Polygon","coordinates":[[[38.792341,33.378686],[36.834062,32.312938],[35.719918,32.709192],[35.700798,32.716014],[35.836397,32.868123],[35.821101,33.277426],[36.06646,33.824912],[36.61175,34.201789],[36.448194,34.593935],[35.998403,34.644914],[35.905023,35.410009],[36.149763,35.821535],[36.41755,36.040617],[36.685389,36.259699],[36.739494,36.81752],[37.066761,36.623036],[38.167727,36.90121],[38.699891,36.712927],[39.52258,36.716054],[40.673259,37.091276],[41.212089,37.074352],[42.349591,37.229873],[41.837064,36.605854],[41.289707,36.358815],[41.383965,35.628317],[41.006159,34.419372],[38.792341,33.378686]]]}}, +{"type":"Feature","id":"TCD","properties":{"name":"Chad"},"geometry":{"type":"Polygon","coordinates":[[[14.495787,12.859396],[14.595781,13.330427],[13.954477,13.353449],[13.956699,13.996691],[13.540394,14.367134],[13.97217,15.68437],[15.247731,16.627306],[15.300441,17.92795],[15.685741,19.95718],[15.903247,20.387619],[15.487148,20.730415],[15.47106,21.04845],[15.096888,21.308519],[14.8513,22.86295],[15.86085,23.40972],[19.84926,21.49509],[23.83766,19.58047],[23.88689,15.61084],[23.02459,15.68072],[22.56795,14.94429],[22.30351,14.32682],[22.51202,14.09318],[22.18329,13.78648],[22.29658,13.37232],[22.03759,12.95546],[21.93681,12.58818],[22.28801,12.64605],[22.49762,12.26024],[22.50869,11.67936],[22.87622,11.38461],[22.864165,11.142395],[22.231129,10.971889],[21.723822,10.567056],[21.000868,9.475985],[20.059685,9.012706],[19.094008,9.074847],[18.81201,8.982915],[18.911022,8.630895],[18.389555,8.281304],[17.96493,7.890914],[16.705988,7.508328],[16.456185,7.734774],[16.290562,7.754307],[16.106232,7.497088],[15.27946,7.421925],[15.436092,7.692812],[15.120866,8.38215],[14.979996,8.796104],[14.544467,8.965861],[13.954218,9.549495],[14.171466,10.021378],[14.627201,9.920919],[14.909354,9.992129],[15.467873,9.982337],[14.923565,10.891325],[14.960152,11.555574],[14.89336,12.21905],[14.495787,12.859396]]]}}, +{"type":"Feature","id":"TGO","properties":{"name":"Togo"},"geometry":{"type":"Polygon","coordinates":[[[1.865241,6.142158],[1.060122,5.928837],[0.836931,6.279979],[0.570384,6.914359],[0.490957,7.411744],[0.712029,8.312465],[0.461192,8.677223],[0.365901,9.465004],[0.36758,10.191213],[-0.049785,10.706918],[0.023803,11.018682],[0.899563,10.997339],[0.772336,10.470808],[1.077795,10.175607],[1.425061,9.825395],[1.463043,9.334624],[1.664478,9.12859],[1.618951,6.832038],[1.865241,6.142158]]]}}, +{"type":"Feature","id":"THA","properties":{"name":"Thailand"},"geometry":{"type":"Polygon","coordinates":[[[102.584932,12.186595],[101.687158,12.64574],[100.83181,12.627085],[100.978467,13.412722],[100.097797,13.406856],[100.018733,12.307001],[99.478921,10.846367],[99.153772,9.963061],[99.222399,9.239255],[99.873832,9.207862],[100.279647,8.295153],[100.459274,7.429573],[101.017328,6.856869],[101.623079,6.740622],[102.141187,6.221636],[101.814282,5.810808],[101.154219,5.691384],[101.075516,6.204867],[100.259596,6.642825],[100.085757,6.464489],[99.690691,6.848213],[99.519642,7.343454],[98.988253,7.907993],[98.503786,8.382305],[98.339662,7.794512],[98.150009,8.350007],[98.25915,8.973923],[98.553551,9.93296],[99.038121,10.960546],[99.587286,11.892763],[99.196354,12.804748],[99.212012,13.269294],[99.097755,13.827503],[98.430819,14.622028],[98.192074,15.123703],[98.537376,15.308497],[98.903348,16.177824],[98.493761,16.837836],[97.859123,17.567946],[97.375896,18.445438],[97.797783,18.62708],[98.253724,19.708203],[98.959676,19.752981],[99.543309,20.186598],[100.115988,20.41785],[100.548881,20.109238],[100.606294,19.508344],[101.282015,19.462585],[101.035931,18.408928],[101.059548,17.512497],[102.113592,18.109102],[102.413005,17.932782],[102.998706,17.961695],[103.200192,18.309632],[103.956477,18.240954],[104.716947,17.428859],[104.779321,16.441865],[105.589039,15.570316],[105.544338,14.723934],[105.218777,14.273212],[104.281418,14.416743],[102.988422,14.225721],[102.348099,13.394247],[102.584932,12.186595]]]}}, +{"type":"Feature","id":"TJK","properties":{"name":"Tajikistan"},"geometry":{"type":"Polygon","coordinates":[[[71.014198,40.244366],[70.648019,39.935754],[69.55961,40.103211],[69.464887,39.526683],[70.549162,39.604198],[71.784694,39.279463],[73.675379,39.431237],[73.928852,38.505815],[74.257514,38.606507],[74.864816,38.378846],[74.829986,37.990007],[74.980002,37.41999],[73.948696,37.421566],[73.260056,37.495257],[72.63689,37.047558],[72.193041,36.948288],[71.844638,36.738171],[71.448693,37.065645],[71.541918,37.905774],[71.239404,37.953265],[71.348131,38.258905],[70.806821,38.486282],[70.376304,38.138396],[70.270574,37.735165],[70.116578,37.588223],[69.518785,37.608997],[69.196273,37.151144],[68.859446,37.344336],[68.135562,37.023115],[67.83,37.144994],[68.392033,38.157025],[68.176025,38.901553],[67.44222,39.140144],[67.701429,39.580478],[68.536416,39.533453],[69.011633,40.086158],[69.329495,40.727824],[70.666622,40.960213],[70.45816,40.496495],[70.601407,40.218527],[71.014198,40.244366]]]}}, +{"type":"Feature","id":"TKM","properties":{"name":"Turkmenistan"},"geometry":{"type":"Polygon","coordinates":[[[61.210817,35.650072],[61.123071,36.491597],[60.377638,36.527383],[59.234762,37.412988],[58.436154,37.522309],[57.330434,38.029229],[56.619366,38.121394],[56.180375,37.935127],[55.511578,37.964117],[54.800304,37.392421],[53.921598,37.198918],[53.735511,37.906136],[53.880929,38.952093],[53.101028,39.290574],[53.357808,39.975286],[52.693973,40.033629],[52.915251,40.876523],[53.858139,40.631034],[54.736845,40.951015],[54.008311,41.551211],[53.721713,42.123191],[52.91675,41.868117],[52.814689,41.135371],[52.50246,41.783316],[52.944293,42.116034],[54.079418,42.324109],[54.755345,42.043971],[55.455251,41.259859],[55.968191,41.308642],[57.096391,41.32231],[56.932215,41.826026],[57.78653,42.170553],[58.629011,42.751551],[59.976422,42.223082],[60.083341,41.425146],[60.465953,41.220327],[61.547179,41.26637],[61.882714,41.084857],[62.37426,40.053886],[63.518015,39.363257],[64.170223,38.892407],[65.215999,38.402695],[66.54615,37.974685],[66.518607,37.362784],[66.217385,37.39379],[65.745631,37.661164],[65.588948,37.305217],[64.746105,37.111818],[64.546479,36.312073],[63.982896,36.007957],[63.193538,35.857166],[62.984662,35.404041],[62.230651,35.270664],[61.210817,35.650072]]]}}, +{"type":"Feature","id":"TLS","properties":{"name":"East Timor"},"geometry":{"type":"Polygon","coordinates":[[[124.968682,-8.89279],[125.086246,-8.656887],[125.947072,-8.432095],[126.644704,-8.398247],[126.957243,-8.273345],[127.335928,-8.397317],[126.967992,-8.668256],[125.925885,-9.106007],[125.08852,-9.393173],[125.07002,-9.089987],[124.968682,-8.89279]]]}}, +{"type":"Feature","id":"TTO","properties":{"name":"Trinidad and Tobago"},"geometry":{"type":"Polygon","coordinates":[[[-61.68,10.76],[-61.105,10.89],[-60.895,10.855],[-60.935,10.11],[-61.77,10],[-61.95,10.09],[-61.66,10.365],[-61.68,10.76]]]}}, +{"type":"Feature","id":"TUN","properties":{"name":"Tunisia"},"geometry":{"type":"Polygon","coordinates":[[[9.48214,30.307556],[9.055603,32.102692],[8.439103,32.506285],[8.430473,32.748337],[7.612642,33.344115],[7.524482,34.097376],[8.140981,34.655146],[8.376368,35.479876],[8.217824,36.433177],[8.420964,36.946427],[9.509994,37.349994],[10.210002,37.230002],[10.18065,36.724038],[11.028867,37.092103],[11.100026,36.899996],[10.600005,36.41],[10.593287,35.947444],[10.939519,35.698984],[10.807847,34.833507],[10.149593,34.330773],[10.339659,33.785742],[10.856836,33.76874],[11.108501,33.293343],[11.488787,33.136996],[11.432253,32.368903],[10.94479,32.081815],[10.636901,31.761421],[9.950225,31.37607],[10.056575,30.961831],[9.970017,30.539325],[9.48214,30.307556]]]}}, +{"type":"Feature","id":"TUR","properties":{"name":"Turkey"},"geometry":{"type":"MultiPolygon","coordinates":[[[[36.913127,41.335358],[38.347665,40.948586],[39.512607,41.102763],[40.373433,41.013673],[41.554084,41.535656],[42.619549,41.583173],[43.582746,41.092143],[43.752658,40.740201],[43.656436,40.253564],[44.400009,40.005],[44.79399,39.713003],[44.109225,39.428136],[44.421403,38.281281],[44.225756,37.971584],[44.772699,37.170445],[44.293452,37.001514],[43.942259,37.256228],[42.779126,37.385264],[42.349591,37.229873],[41.212089,37.074352],[40.673259,37.091276],[39.52258,36.716054],[38.699891,36.712927],[38.167727,36.90121],[37.066761,36.623036],[36.739494,36.81752],[36.685389,36.259699],[36.41755,36.040617],[36.149763,35.821535],[35.782085,36.274995],[36.160822,36.650606],[35.550936,36.565443],[34.714553,36.795532],[34.026895,36.21996],[32.509158,36.107564],[31.699595,36.644275],[30.621625,36.677865],[30.391096,36.262981],[29.699976,36.144357],[28.732903,36.676831],[27.641187,36.658822],[27.048768,37.653361],[26.318218,38.208133],[26.8047,38.98576],[26.170785,39.463612],[27.28002,40.420014],[28.819978,40.460011],[29.240004,41.219991],[31.145934,41.087622],[32.347979,41.736264],[33.513283,42.01896],[35.167704,42.040225],[36.913127,41.335358]]],[[[27.192377,40.690566],[26.358009,40.151994],[26.043351,40.617754],[26.056942,40.824123],[26.294602,40.936261],[26.604196,41.562115],[26.117042,41.826905],[27.135739,42.141485],[27.99672,42.007359],[28.115525,41.622886],[28.988443,41.299934],[28.806438,41.054962],[27.619017,40.999823],[27.192377,40.690566]]]]}}, +{"type":"Feature","id":"TWN","properties":{"name":"Taiwan"},"geometry":{"type":"Polygon","coordinates":[[[121.777818,24.394274],[121.175632,22.790857],[120.74708,21.970571],[120.220083,22.814861],[120.106189,23.556263],[120.69468,24.538451],[121.495044,25.295459],[121.951244,24.997596],[121.777818,24.394274]]]}}, +{"type":"Feature","id":"TZA","properties":{"name":"United Republic of Tanzania"},"geometry":{"type":"Polygon","coordinates":[[[33.903711,-0.95],[34.07262,-1.05982],[37.69869,-3.09699],[37.7669,-3.67712],[39.20222,-4.67677],[38.74054,-5.90895],[38.79977,-6.47566],[39.44,-6.84],[39.47,-7.1],[39.19469,-7.7039],[39.25203,-8.00781],[39.18652,-8.48551],[39.53574,-9.11237],[39.9496,-10.0984],[40.31659,-10.3171],[39.521,-10.89688],[38.427557,-11.285202],[37.82764,-11.26879],[37.47129,-11.56876],[36.775151,-11.594537],[36.514082,-11.720938],[35.312398,-11.439146],[34.559989,-11.52002],[34.28,-10.16],[33.940838,-9.693674],[33.73972,-9.41715],[32.759375,-9.230599],[32.191865,-8.930359],[31.556348,-8.762049],[31.157751,-8.594579],[30.74,-8.34],[30.2,-7.08],[29.62,-6.52],[29.419993,-5.939999],[29.519987,-5.419979],[29.339998,-4.499983],[29.753512,-4.452389],[30.11632,-4.09012],[30.50554,-3.56858],[30.75224,-3.35931],[30.74301,-3.03431],[30.52766,-2.80762],[30.46967,-2.41383],[30.758309,-2.28725],[30.816135,-1.698914],[30.419105,-1.134659],[30.76986,-1.01455],[31.86617,-1.02736],[33.903711,-0.95]]]}}, +{"type":"Feature","id":"UGA","properties":{"name":"Uganda"},"geometry":{"type":"Polygon","coordinates":[[[31.86617,-1.02736],[30.76986,-1.01455],[30.419105,-1.134659],[29.821519,-1.443322],[29.579466,-1.341313],[29.587838,-0.587406],[29.8195,-0.2053],[29.875779,0.59738],[30.086154,1.062313],[30.468508,1.583805],[30.85267,1.849396],[31.174149,2.204465],[30.77332,2.33989],[30.83385,3.50917],[31.24556,3.7819],[31.88145,3.55827],[32.68642,3.79232],[33.39,3.79],[34.005,4.249885],[34.47913,3.5556],[34.59607,3.05374],[35.03599,1.90584],[34.6721,1.17694],[34.18,0.515],[33.893569,0.109814],[33.903711,-0.95],[31.86617,-1.02736]]]}}, +{"type":"Feature","id":"UKR","properties":{"name":"Ukraine"},"geometry":{"type":"Polygon","coordinates":[[[31.785998,52.101678],[32.159412,52.061267],[32.412058,52.288695],[32.715761,52.238465],[33.7527,52.335075],[34.391731,51.768882],[34.141978,51.566413],[34.224816,51.255993],[35.022183,51.207572],[35.377924,50.773955],[35.356116,50.577197],[36.626168,50.225591],[37.39346,50.383953],[38.010631,49.915662],[38.594988,49.926462],[40.069058,49.601055],[40.080789,49.30743],[39.674664,48.783818],[39.895632,48.232405],[39.738278,47.898937],[38.770585,47.825608],[38.255112,47.5464],[38.223538,47.10219],[37.425137,47.022221],[36.759855,46.6987],[35.823685,46.645964],[34.962342,46.273197],[35.020788,45.651219],[35.510009,45.409993],[36.529998,45.46999],[36.334713,45.113216],[35.239999,44.939996],[33.882511,44.361479],[33.326421,44.564877],[33.546924,45.034771],[32.454174,45.327466],[32.630804,45.519186],[33.588162,45.851569],[33.298567,46.080598],[31.74414,46.333348],[31.675307,46.706245],[30.748749,46.5831],[30.377609,46.03241],[29.603289,45.293308],[29.149725,45.464925],[28.679779,45.304031],[28.233554,45.488283],[28.485269,45.596907],[28.659987,45.939987],[28.933717,46.25883],[28.862972,46.437889],[29.072107,46.517678],[29.170654,46.379262],[29.759972,46.349988],[30.024659,46.423937],[29.83821,46.525326],[29.908852,46.674361],[29.559674,46.928583],[29.415135,47.346645],[29.050868,47.510227],[29.122698,47.849095],[28.670891,48.118149],[28.259547,48.155562],[27.522537,48.467119],[26.857824,48.368211],[26.619337,48.220726],[26.19745,48.220881],[25.945941,47.987149],[25.207743,47.891056],[24.866317,47.737526],[24.402056,47.981878],[23.760958,47.985598],[23.142236,48.096341],[22.710531,47.882194],[22.64082,48.15024],[22.085608,48.422264],[22.280842,48.825392],[22.558138,49.085738],[22.776419,49.027395],[22.51845,49.476774],[23.426508,50.308506],[23.922757,50.424881],[24.029986,50.705407],[23.527071,51.578454],[24.005078,51.617444],[24.553106,51.888461],[25.327788,51.910656],[26.337959,51.832289],[27.454066,51.592303],[28.241615,51.572227],[28.617613,51.427714],[28.992835,51.602044],[29.254938,51.368234],[30.157364,51.416138],[30.555117,51.319503],[30.619454,51.822806],[30.927549,52.042353],[31.785998,52.101678]]]}}, +{"type":"Feature","id":"URY","properties":{"name":"Uruguay"},"geometry":{"type":"Polygon","coordinates":[[[-57.625133,-30.216295],[-56.976026,-30.109686],[-55.973245,-30.883076],[-55.60151,-30.853879],[-54.572452,-31.494511],[-53.787952,-32.047243],[-53.209589,-32.727666],[-53.650544,-33.202004],[-53.373662,-33.768378],[-53.806426,-34.396815],[-54.935866,-34.952647],[-55.67409,-34.752659],[-56.215297,-34.859836],[-57.139685,-34.430456],[-57.817861,-34.462547],[-58.427074,-33.909454],[-58.349611,-33.263189],[-58.132648,-33.040567],[-58.14244,-32.044504],[-57.874937,-31.016556],[-57.625133,-30.216295]]]}}, +{"type":"Feature","id":"USA","properties":{"name":"United States of America"},"geometry":{"type":"MultiPolygon","coordinates":[[[[-155.54211,19.08348],[-155.68817,18.91619],[-155.93665,19.05939],[-155.90806,19.33888],[-156.07347,19.70294],[-156.02368,19.81422],[-155.85008,19.97729],[-155.91907,20.17395],[-155.86108,20.26721],[-155.78505,20.2487],[-155.40214,20.07975],[-155.22452,19.99302],[-155.06226,19.8591],[-154.80741,19.50871],[-154.83147,19.45328],[-155.22217,19.23972],[-155.54211,19.08348]]],[[[-156.07926,20.64397],[-156.41445,20.57241],[-156.58673,20.783],[-156.70167,20.8643],[-156.71055,20.92676],[-156.61258,21.01249],[-156.25711,20.91745],[-155.99566,20.76404],[-156.07926,20.64397]]],[[[-156.75824,21.17684],[-156.78933,21.06873],[-157.32521,21.09777],[-157.25027,21.21958],[-156.75824,21.17684]]],[[[-157.65283,21.32217],[-157.70703,21.26442],[-157.7786,21.27729],[-158.12667,21.31244],[-158.2538,21.53919],[-158.29265,21.57912],[-158.0252,21.71696],[-157.94161,21.65272],[-157.65283,21.32217]]],[[[-159.34512,21.982],[-159.46372,21.88299],[-159.80051,22.06533],[-159.74877,22.1382],[-159.5962,22.23618],[-159.36569,22.21494],[-159.34512,21.982]]],[[[-94.81758,49.38905],[-94.64,48.84],[-94.32914,48.67074],[-93.63087,48.60926],[-92.61,48.45],[-91.64,48.14],[-90.83,48.27],[-89.6,48.01],[-89.272917,48.019808],[-88.378114,48.302918],[-87.439793,47.94],[-86.461991,47.553338],[-85.652363,47.220219],[-84.87608,46.900083],[-84.779238,46.637102],[-84.543749,46.538684],[-84.6049,46.4396],[-84.3367,46.40877],[-84.14212,46.512226],[-84.091851,46.275419],[-83.890765,46.116927],[-83.616131,46.116927],[-83.469551,45.994686],[-83.592851,45.816894],[-82.550925,45.347517],[-82.337763,44.44],[-82.137642,43.571088],[-82.43,42.98],[-82.9,42.43],[-83.12,42.08],[-83.142,41.975681],[-83.02981,41.832796],[-82.690089,41.675105],[-82.439278,41.675105],[-81.277747,42.209026],[-80.247448,42.3662],[-78.939362,42.863611],[-78.92,42.965],[-79.01,43.27],[-79.171674,43.466339],[-78.72028,43.625089],[-77.737885,43.629056],[-76.820034,43.628784],[-76.5,44.018459],[-76.375,44.09631],[-75.31821,44.81645],[-74.867,45.00048],[-73.34783,45.00738],[-71.50506,45.0082],[-71.405,45.255],[-71.08482,45.30524],[-70.66,45.46],[-70.305,45.915],[-69.99997,46.69307],[-69.237216,47.447781],[-68.905,47.185],[-68.23444,47.35486],[-67.79046,47.06636],[-67.79134,45.70281],[-67.13741,45.13753],[-66.96466,44.8097],[-68.03252,44.3252],[-69.06,43.98],[-70.11617,43.68405],[-70.645476,43.090238],[-70.81489,42.8653],[-70.825,42.335],[-70.495,41.805],[-70.08,41.78],[-70.185,42.145],[-69.88497,41.92283],[-69.96503,41.63717],[-70.64,41.475],[-71.12039,41.49445],[-71.86,41.32],[-72.295,41.27],[-72.87643,41.22065],[-73.71,40.931102],[-72.24126,41.11948],[-71.945,40.93],[-73.345,40.63],[-73.982,40.628],[-73.952325,40.75075],[-74.25671,40.47351],[-73.96244,40.42763],[-74.17838,39.70926],[-74.90604,38.93954],[-74.98041,39.1964],[-75.20002,39.24845],[-75.52805,39.4985],[-75.32,38.96],[-75.071835,38.782032],[-75.05673,38.40412],[-75.37747,38.01551],[-75.94023,37.21689],[-76.03127,37.2566],[-75.72205,37.93705],[-76.23287,38.319215],[-76.35,39.15],[-76.542725,38.717615],[-76.32933,38.08326],[-76.989998,38.239992],[-76.30162,37.917945],[-76.25874,36.9664],[-75.9718,36.89726],[-75.86804,36.55125],[-75.72749,35.55074],[-76.36318,34.80854],[-77.397635,34.51201],[-78.05496,33.92547],[-78.55435,33.86133],[-79.06067,33.49395],[-79.20357,33.15839],[-80.301325,32.509355],[-80.86498,32.0333],[-81.33629,31.44049],[-81.49042,30.72999],[-81.31371,30.03552],[-80.98,29.18],[-80.535585,28.47213],[-80.53,28.04],[-80.056539,26.88],[-80.088015,26.205765],[-80.13156,25.816775],[-80.38103,25.20616],[-80.68,25.08],[-81.17213,25.20126],[-81.33,25.64],[-81.71,25.87],[-82.24,26.73],[-82.70515,27.49504],[-82.85526,27.88624],[-82.65,28.55],[-82.93,29.1],[-83.70959,29.93656],[-84.1,30.09],[-85.10882,29.63615],[-85.28784,29.68612],[-85.7731,30.15261],[-86.4,30.4],[-87.53036,30.27433],[-88.41782,30.3849],[-89.18049,30.31598],[-89.593831,30.159994],[-89.413735,29.89419],[-89.43,29.48864],[-89.21767,29.29108],[-89.40823,29.15961],[-89.77928,29.30714],[-90.15463,29.11743],[-90.880225,29.148535],[-91.626785,29.677],[-92.49906,29.5523],[-93.22637,29.78375],[-93.84842,29.71363],[-94.69,29.48],[-95.60026,28.73863],[-96.59404,28.30748],[-97.14,27.83],[-97.37,27.38],[-97.38,26.69],[-97.33,26.21],[-97.14,25.87],[-97.53,25.84],[-98.24,26.06],[-99.02,26.37],[-99.3,26.84],[-99.52,27.54],[-100.11,28.11],[-100.45584,28.69612],[-100.9576,29.38071],[-101.6624,29.7793],[-102.48,29.76],[-103.11,28.97],[-103.94,29.27],[-104.45697,29.57196],[-104.70575,30.12173],[-105.03737,30.64402],[-105.63159,31.08383],[-106.1429,31.39995],[-106.50759,31.75452],[-108.24,31.754854],[-108.24194,31.34222],[-109.035,31.34194],[-111.02361,31.33472],[-113.30498,32.03914],[-114.815,32.52528],[-114.72139,32.72083],[-115.99135,32.61239],[-117.12776,32.53534],[-117.295938,33.046225],[-117.944,33.621236],[-118.410602,33.740909],[-118.519895,34.027782],[-119.081,34.078],[-119.438841,34.348477],[-120.36778,34.44711],[-120.62286,34.60855],[-120.74433,35.15686],[-121.71457,36.16153],[-122.54747,37.55176],[-122.51201,37.78339],[-122.95319,38.11371],[-123.7272,38.95166],[-123.86517,39.76699],[-124.39807,40.3132],[-124.17886,41.14202],[-124.2137,41.99964],[-124.53284,42.76599],[-124.14214,43.70838],[-124.020535,44.615895],[-123.89893,45.52341],[-124.079635,46.86475],[-124.39567,47.72017],[-124.68721,48.184433],[-124.566101,48.379715],[-123.12,48.04],[-122.58736,47.096],[-122.34,47.36],[-122.5,48.18],[-122.84,49],[-120,49],[-117.03121,49],[-116.04818,49],[-113,49],[-110.05,49],[-107.05,49],[-104.04826,48.99986],[-100.65,49],[-97.22872,49.0007],[-95.15907,49],[-95.15609,49.38425],[-94.81758,49.38905]]],[[[-153.006314,57.115842],[-154.00509,56.734677],[-154.516403,56.992749],[-154.670993,57.461196],[-153.76278,57.816575],[-153.228729,57.968968],[-152.564791,57.901427],[-152.141147,57.591059],[-153.006314,57.115842]]],[[[-165.579164,59.909987],[-166.19277,59.754441],[-166.848337,59.941406],[-167.455277,60.213069],[-166.467792,60.38417],[-165.67443,60.293607],[-165.579164,59.909987]]],[[[-171.731657,63.782515],[-171.114434,63.592191],[-170.491112,63.694975],[-169.682505,63.431116],[-168.689439,63.297506],[-168.771941,63.188598],[-169.52944,62.976931],[-170.290556,63.194438],[-170.671386,63.375822],[-171.553063,63.317789],[-171.791111,63.405846],[-171.731657,63.782515]]],[[[-155.06779,71.147776],[-154.344165,70.696409],[-153.900006,70.889989],[-152.210006,70.829992],[-152.270002,70.600006],[-150.739992,70.430017],[-149.720003,70.53001],[-147.613362,70.214035],[-145.68999,70.12001],[-144.920011,69.989992],[-143.589446,70.152514],[-142.07251,69.851938],[-140.985988,69.711998],[-140.985988,69.711998],[-140.992499,66.000029],[-140.99777,60.306397],[-140.012998,60.276838],[-139.039,60.000007],[-138.34089,59.56211],[-137.4525,58.905],[-136.47972,59.46389],[-135.47583,59.78778],[-134.945,59.27056],[-134.27111,58.86111],[-133.355549,58.410285],[-132.73042,57.69289],[-131.70781,56.55212],[-130.00778,55.91583],[-129.979994,55.284998],[-130.53611,54.802753],[-131.085818,55.178906],[-131.967211,55.497776],[-132.250011,56.369996],[-133.539181,57.178887],[-134.078063,58.123068],[-135.038211,58.187715],[-136.628062,58.212209],[-137.800006,58.499995],[-139.867787,59.537762],[-140.825274,59.727517],[-142.574444,60.084447],[-143.958881,59.99918],[-145.925557,60.45861],[-147.114374,60.884656],[-148.224306,60.672989],[-148.018066,59.978329],[-148.570823,59.914173],[-149.727858,59.705658],[-150.608243,59.368211],[-151.716393,59.155821],[-151.859433,59.744984],[-151.409719,60.725803],[-150.346941,61.033588],[-150.621111,61.284425],[-151.895839,60.727198],[-152.57833,60.061657],[-154.019172,59.350279],[-153.287511,58.864728],[-154.232492,58.146374],[-155.307491,57.727795],[-156.308335,57.422774],[-156.556097,56.979985],[-158.117217,56.463608],[-158.433321,55.994154],[-159.603327,55.566686],[-160.28972,55.643581],[-161.223048,55.364735],[-162.237766,55.024187],[-163.069447,54.689737],[-164.785569,54.404173],[-164.942226,54.572225],[-163.84834,55.039431],[-162.870001,55.348043],[-161.804175,55.894986],[-160.563605,56.008055],[-160.07056,56.418055],[-158.684443,57.016675],[-158.461097,57.216921],[-157.72277,57.570001],[-157.550274,58.328326],[-157.041675,58.918885],[-158.194731,58.615802],[-158.517218,58.787781],[-159.058606,58.424186],[-159.711667,58.93139],[-159.981289,58.572549],[-160.355271,59.071123],[-161.355003,58.670838],[-161.968894,58.671665],[-162.054987,59.266925],[-161.874171,59.633621],[-162.518059,59.989724],[-163.818341,59.798056],[-164.662218,60.267484],[-165.346388,60.507496],[-165.350832,61.073895],[-166.121379,61.500019],[-165.734452,62.074997],[-164.919179,62.633076],[-164.562508,63.146378],[-163.753332,63.219449],[-163.067224,63.059459],[-162.260555,63.541936],[-161.53445,63.455817],[-160.772507,63.766108],[-160.958335,64.222799],[-161.518068,64.402788],[-160.777778,64.788604],[-161.391926,64.777235],[-162.45305,64.559445],[-162.757786,64.338605],[-163.546394,64.55916],[-164.96083,64.446945],[-166.425288,64.686672],[-166.845004,65.088896],[-168.11056,65.669997],[-166.705271,66.088318],[-164.47471,66.57666],[-163.652512,66.57666],[-163.788602,66.077207],[-161.677774,66.11612],[-162.489715,66.735565],[-163.719717,67.116395],[-164.430991,67.616338],[-165.390287,68.042772],[-166.764441,68.358877],[-166.204707,68.883031],[-164.430811,68.915535],[-163.168614,69.371115],[-162.930566,69.858062],[-161.908897,70.33333],[-160.934797,70.44769],[-159.039176,70.891642],[-158.119723,70.824721],[-156.580825,71.357764],[-155.06779,71.147776]]]]}}, +{"type":"Feature","id":"UZB","properties":{"name":"Uzbekistan"},"geometry":{"type":"Polygon","coordinates":[[[66.518607,37.362784],[66.54615,37.974685],[65.215999,38.402695],[64.170223,38.892407],[63.518015,39.363257],[62.37426,40.053886],[61.882714,41.084857],[61.547179,41.26637],[60.465953,41.220327],[60.083341,41.425146],[59.976422,42.223082],[58.629011,42.751551],[57.78653,42.170553],[56.932215,41.826026],[57.096391,41.32231],[55.968191,41.308642],[55.928917,44.995858],[58.503127,45.586804],[58.689989,45.500014],[60.239972,44.784037],[61.05832,44.405817],[62.0133,43.504477],[63.185787,43.650075],[64.900824,43.728081],[66.098012,42.99766],[66.023392,41.994646],[66.510649,41.987644],[66.714047,41.168444],[67.985856,41.135991],[68.259896,40.662325],[68.632483,40.668681],[69.070027,41.384244],[70.388965,42.081308],[70.962315,42.266154],[71.259248,42.167711],[70.420022,41.519998],[71.157859,41.143587],[71.870115,41.3929],[73.055417,40.866033],[71.774875,40.145844],[71.014198,40.244366],[70.601407,40.218527],[70.45816,40.496495],[70.666622,40.960213],[69.329495,40.727824],[69.011633,40.086158],[68.536416,39.533453],[67.701429,39.580478],[67.44222,39.140144],[68.176025,38.901553],[68.392033,38.157025],[67.83,37.144994],[67.075782,37.356144],[66.518607,37.362784]]]}}, +{"type":"Feature","id":"VEN","properties":{"name":"Venezuela"},"geometry":{"type":"Polygon","coordinates":[[[-71.331584,11.776284],[-71.360006,11.539994],[-71.94705,11.423282],[-71.620868,10.96946],[-71.633064,10.446494],[-72.074174,9.865651],[-71.695644,9.072263],[-71.264559,9.137195],[-71.039999,9.859993],[-71.350084,10.211935],[-71.400623,10.968969],[-70.155299,11.375482],[-70.293843,11.846822],[-69.943245,12.162307],[-69.5843,11.459611],[-68.882999,11.443385],[-68.233271,10.885744],[-68.194127,10.554653],[-67.296249,10.545868],[-66.227864,10.648627],[-65.655238,10.200799],[-64.890452,10.077215],[-64.329479,10.389599],[-64.318007,10.641418],[-63.079322,10.701724],[-61.880946,10.715625],[-62.730119,10.420269],[-62.388512,9.948204],[-61.588767,9.873067],[-60.830597,9.38134],[-60.671252,8.580174],[-60.150096,8.602757],[-59.758285,8.367035],[-60.550588,7.779603],[-60.637973,7.415],[-60.295668,7.043911],[-60.543999,6.856584],[-61.159336,6.696077],[-61.139415,6.234297],[-61.410303,5.959068],[-60.733574,5.200277],[-60.601179,4.918098],[-60.966893,4.536468],[-62.08543,4.162124],[-62.804533,4.006965],[-63.093198,3.770571],[-63.888343,4.02053],[-64.628659,4.148481],[-64.816064,4.056445],[-64.368494,3.79721],[-64.408828,3.126786],[-64.269999,2.497006],[-63.422867,2.411068],[-63.368788,2.2009],[-64.083085,1.916369],[-64.199306,1.492855],[-64.611012,1.328731],[-65.354713,1.095282],[-65.548267,0.789254],[-66.325765,0.724452],[-66.876326,1.253361],[-67.181294,2.250638],[-67.447092,2.600281],[-67.809938,2.820655],[-67.303173,3.318454],[-67.337564,3.542342],[-67.621836,3.839482],[-67.823012,4.503937],[-67.744697,5.221129],[-67.521532,5.55687],[-67.34144,6.095468],[-67.695087,6.267318],[-68.265052,6.153268],[-68.985319,6.206805],[-69.38948,6.099861],[-70.093313,6.960376],[-70.674234,7.087785],[-71.960176,6.991615],[-72.198352,7.340431],[-72.444487,7.423785],[-72.479679,7.632506],[-72.360901,8.002638],[-72.439862,8.405275],[-72.660495,8.625288],[-72.78873,9.085027],[-73.304952,9.152],[-73.027604,9.73677],[-72.905286,10.450344],[-72.614658,10.821975],[-72.227575,11.108702],[-71.973922,11.608672],[-71.331584,11.776284]]]}}, +{"type":"Feature","id":"VNM","properties":{"name":"Vietnam"},"geometry":{"type":"Polygon","coordinates":[[[108.05018,21.55238],[106.715068,20.696851],[105.881682,19.75205],[105.662006,19.058165],[106.426817,18.004121],[107.361954,16.697457],[108.269495,16.079742],[108.877107,15.276691],[109.33527,13.426028],[109.200136,11.666859],[108.36613,11.008321],[107.220929,10.364484],[106.405113,9.53084],[105.158264,8.59976],[104.795185,9.241038],[105.076202,9.918491],[104.334335,10.486544],[105.199915,10.88931],[106.24967,10.961812],[105.810524,11.567615],[107.491403,12.337206],[107.614548,13.535531],[107.382727,14.202441],[107.564525,15.202173],[107.312706,15.908538],[106.556008,16.604284],[105.925762,17.485315],[105.094598,18.666975],[103.896532,19.265181],[104.183388,19.624668],[104.822574,19.886642],[104.435,20.758733],[103.203861,20.766562],[102.754896,21.675137],[102.170436,22.464753],[102.706992,22.708795],[103.504515,22.703757],[104.476858,22.81915],[105.329209,23.352063],[105.811247,22.976892],[106.725403,22.794268],[106.567273,22.218205],[107.04342,21.811899],[108.05018,21.55238]]]}}, +{"type":"Feature","id":"VUT","properties":{"name":"Vanuatu"},"geometry":{"type":"MultiPolygon","coordinates":[[[[167.844877,-16.466333],[167.515181,-16.59785],[167.180008,-16.159995],[167.216801,-15.891846],[167.844877,-16.466333]]],[[[167.107712,-14.93392],[167.270028,-15.740021],[167.001207,-15.614602],[166.793158,-15.668811],[166.649859,-15.392704],[166.629137,-14.626497],[167.107712,-14.93392]]]]}}, +{"type":"Feature","id":"PSE","properties":{"name":"West Bank"},"geometry":{"type":"Polygon","coordinates":[[[35.545665,32.393992],[35.545252,31.782505],[35.397561,31.489086],[34.927408,31.353435],[34.970507,31.616778],[35.225892,31.754341],[34.974641,31.866582],[35.18393,32.532511],[35.545665,32.393992]]]}}, +{"type":"Feature","id":"YEM","properties":{"name":"Yemen"},"geometry":{"type":"Polygon","coordinates":[[[53.108573,16.651051],[52.385206,16.382411],[52.191729,15.938433],[52.168165,15.59742],[51.172515,15.17525],[49.574576,14.708767],[48.679231,14.003202],[48.238947,13.94809],[47.938914,14.007233],[47.354454,13.59222],[46.717076,13.399699],[45.877593,13.347764],[45.62505,13.290946],[45.406459,13.026905],[45.144356,12.953938],[44.989533,12.699587],[44.494576,12.721653],[44.175113,12.58595],[43.482959,12.6368],[43.222871,13.22095],[43.251448,13.767584],[43.087944,14.06263],[42.892245,14.802249],[42.604873,15.213335],[42.805015,15.261963],[42.702438,15.718886],[42.823671,15.911742],[42.779332,16.347891],[43.218375,16.66689],[43.115798,17.08844],[43.380794,17.579987],[43.791519,17.319977],[44.062613,17.410359],[45.216651,17.433329],[45.399999,17.333335],[46.366659,17.233315],[46.749994,17.283338],[47.000005,16.949999],[47.466695,17.116682],[48.183344,18.166669],[49.116672,18.616668],[52.00001,19.000003],[52.782184,17.349742],[53.108573,16.651051]]]}}, +{"type":"Feature","id":"ZAF","properties":{"name":"South Africa"},"geometry":{"type":"Polygon","coordinates":[[[31.521001,-29.257387],[31.325561,-29.401978],[30.901763,-29.909957],[30.622813,-30.423776],[30.055716,-31.140269],[28.925553,-32.172041],[28.219756,-32.771953],[27.464608,-33.226964],[26.419452,-33.61495],[25.909664,-33.66704],[25.780628,-33.944646],[25.172862,-33.796851],[24.677853,-33.987176],[23.594043,-33.794474],[22.988189,-33.916431],[22.574157,-33.864083],[21.542799,-34.258839],[20.689053,-34.417175],[20.071261,-34.795137],[19.616405,-34.819166],[19.193278,-34.462599],[18.855315,-34.444306],[18.424643,-33.997873],[18.377411,-34.136521],[18.244499,-33.867752],[18.25008,-33.281431],[17.92519,-32.611291],[18.24791,-32.429131],[18.221762,-31.661633],[17.566918,-30.725721],[17.064416,-29.878641],[17.062918,-29.875954],[16.344977,-28.576705],[16.824017,-28.082162],[17.218929,-28.355943],[17.387497,-28.783514],[17.836152,-28.856378],[18.464899,-29.045462],[19.002127,-28.972443],[19.894734,-28.461105],[19.895768,-24.76779],[20.165726,-24.917962],[20.758609,-25.868136],[20.66647,-26.477453],[20.889609,-26.828543],[21.605896,-26.726534],[22.105969,-26.280256],[22.579532,-25.979448],[22.824271,-25.500459],[23.312097,-25.26869],[23.73357,-25.390129],[24.211267,-25.670216],[25.025171,-25.71967],[25.664666,-25.486816],[25.765849,-25.174845],[25.941652,-24.696373],[26.485753,-24.616327],[26.786407,-24.240691],[27.11941,-23.574323],[28.017236,-22.827754],[29.432188,-22.091313],[29.839037,-22.102216],[30.322883,-22.271612],[30.659865,-22.151567],[31.191409,-22.25151],[31.670398,-23.658969],[31.930589,-24.369417],[31.752408,-25.484284],[31.837778,-25.843332],[31.333158,-25.660191],[31.04408,-25.731452],[30.949667,-26.022649],[30.676609,-26.398078],[30.685962,-26.743845],[31.282773,-27.285879],[31.86806,-27.177927],[32.071665,-26.73382],[32.83012,-26.742192],[32.580265,-27.470158],[32.462133,-28.301011],[32.203389,-28.752405],[31.521001,-29.257387]],[[28.978263,-28.955597],[28.5417,-28.647502],[28.074338,-28.851469],[27.532511,-29.242711],[26.999262,-29.875954],[27.749397,-30.645106],[28.107205,-30.545732],[28.291069,-30.226217],[28.8484,-30.070051],[29.018415,-29.743766],[29.325166,-29.257387],[28.978263,-28.955597]]]}}, +{"type":"Feature","id":"ZMB","properties":{"name":"Zambia"},"geometry":{"type":"Polygon","coordinates":[[[32.759375,-9.230599],[33.231388,-9.676722],[33.485688,-10.525559],[33.31531,-10.79655],[33.114289,-11.607198],[33.306422,-12.435778],[32.991764,-12.783871],[32.688165,-13.712858],[33.214025,-13.97186],[30.179481,-14.796099],[30.274256,-15.507787],[29.516834,-15.644678],[28.947463,-16.043051],[28.825869,-16.389749],[28.467906,-16.4684],[27.598243,-17.290831],[27.044427,-17.938026],[26.706773,-17.961229],[26.381935,-17.846042],[25.264226,-17.73654],[25.084443,-17.661816],[25.07695,-17.578823],[24.682349,-17.353411],[24.033862,-17.295843],[23.215048,-17.523116],[22.562478,-16.898451],[21.887843,-16.08031],[21.933886,-12.898437],[24.016137,-12.911046],[23.930922,-12.565848],[24.079905,-12.191297],[23.904154,-11.722282],[24.017894,-11.237298],[23.912215,-10.926826],[24.257155,-10.951993],[24.314516,-11.262826],[24.78317,-11.238694],[25.418118,-11.330936],[25.75231,-11.784965],[26.553088,-11.92444],[27.16442,-11.608748],[27.388799,-12.132747],[28.155109,-12.272481],[28.523562,-12.698604],[28.934286,-13.248958],[29.699614,-13.257227],[29.616001,-12.178895],[29.341548,-12.360744],[28.642417,-11.971569],[28.372253,-11.793647],[28.49607,-10.789884],[28.673682,-9.605925],[28.449871,-9.164918],[28.734867,-8.526559],[29.002912,-8.407032],[30.346086,-8.238257],[30.740015,-8.340007],[31.157751,-8.594579],[31.556348,-8.762049],[32.191865,-8.930359],[32.759375,-9.230599]]]}}, +{"type":"Feature","id":"ZWE","properties":{"name":"Zimbabwe"},"geometry":{"type":"Polygon","coordinates":[[[31.191409,-22.25151],[30.659865,-22.151567],[30.322883,-22.271612],[29.839037,-22.102216],[29.432188,-22.091313],[28.794656,-21.639454],[28.02137,-21.485975],[27.727228,-20.851802],[27.724747,-20.499059],[27.296505,-20.39152],[26.164791,-19.293086],[25.850391,-18.714413],[25.649163,-18.536026],[25.264226,-17.73654],[26.381935,-17.846042],[26.706773,-17.961229],[27.044427,-17.938026],[27.598243,-17.290831],[28.467906,-16.4684],[28.825869,-16.389749],[28.947463,-16.043051],[29.516834,-15.644678],[30.274256,-15.507787],[30.338955,-15.880839],[31.173064,-15.860944],[31.636498,-16.07199],[31.852041,-16.319417],[32.328239,-16.392074],[32.847639,-16.713398],[32.849861,-17.979057],[32.654886,-18.67209],[32.611994,-19.419383],[32.772708,-19.715592],[32.659743,-20.30429],[32.508693,-20.395292],[32.244988,-21.116489],[31.191409,-22.25151]]]}} +]} diff --git a/float-no-zero/examples/data/gml/topp-states-wfs.xml b/float-no-zero/examples/data/gml/topp-states-wfs.xml new file mode 100644 index 0000000000..29edac4510 --- /dev/null +++ b/float-no-zero/examples/data/gml/topp-states-wfs.xml @@ -0,0 +1,2 @@ + +24.955967 -124.7314220000000149.371735 -66.96984936.986771000000005 -91.51612942.50936100000001 -87.50788937.51099000000001 -88.071564 37.476273000000006 -88.087883 37.442852 -88.311707 37.40930899999999 -88.359177 37.420292 -88.419853 37.400757 -88.467644 37.296852 -88.511322 37.257782000000006 -88.501427 37.205669 -88.450699 37.156909999999996 -88.422516 37.098670999999996 -88.45047 37.072143999999994 -88.476799 37.06818 -88.4907 37.064769999999996 -88.517273 37.072815000000006 -88.559273 37.109047000000004 -88.61422 37.13540999999999 -88.68837 37.141182 -88.739113 37.152107 -88.746506 37.202194000000006 -88.863289 37.218407 -88.932503 37.22003599999999 -88.993172 37.185860000000005 -89.065033 37.112137000000004 -89.116821 37.093185000000005 -89.146347 37.064235999999994 -89.169548 37.025711 -89.174332 36.99844 -89.150246 36.988113 -89.12986 36.986771000000005 -89.193512 37.02897299999999 -89.210052 37.041732999999994 -89.237679 37.087124 -89.264053 37.091244 -89.284233 37.085384000000005 -89.303291 37.060908999999995 -89.3097 37.027733 -89.264244 37.008686 -89.262001 36.999207 -89.282768 37.009682 -89.310982 37.049212999999995 -89.38295 37.09908299999999 -89.37999 37.137203 -89.423798 37.165318 -89.440521 37.224266 -89.468216 37.253731 -89.465309 37.256001 -89.489594 37.276402000000004 -89.513885 37.304962 -89.513885 37.329441 -89.50058 37.339409 -89.468742 37.355717 -89.435738 37.411018 -89.427574 37.453186 -89.453621 37.491726 -89.494781 37.571957 -89.524971 37.615928999999994 -89.513367 37.650375 -89.51918 37.67984 -89.513374 37.694798000000006 -89.521523 37.706103999999996 -89.581436 37.745453 -89.666458 37.78397 -89.675858 37.804794 -89.691055 37.840992 -89.728447 37.905063999999996 -89.851715 37.905486999999994 -89.861046 37.891875999999996 -89.866814 37.875904000000006 -89.900551 37.878044 -89.937874 37.911884 -89.978912 37.963634 -89.958229 37.969318 -90.010811 37.993206 -90.041924 38.032272000000006 -90.119339 38.05395100000001 -90.134712 38.08890500000001 -90.207527 38.122169000000014 -90.254059 38.16681700000001 -90.289635 38.18871300000001 -90.336716 38.23429899999999 -90.364769 38.32355899999999 -90.369347 38.36533 -90.358688 38.39084600000001 -90.339607 38.427357 -90.301842 38.518688 -90.265785 38.532768000000004 -90.26123 38.562805 -90.240944 38.61027100000001 -90.183708 38.658772 -90.183578 38.70036300000001 -90.20224 38.72396499999999 -90.196571 38.773098000000005 -90.163399 38.785484 -90.135178 38.80051 -90.121727 38.830467 -90.113121 38.85303099999999 -90.132812 38.91450900000001 -90.243927 38.92471699999999 -90.278931 38.92490799999999 -90.31974 38.96233000000001 -90.413071 38.959179000000006 -90.469841 38.89160899999999 -90.530426 38.87132600000001 -90.570328 38.880795000000006 -90.627213 38.93525299999999 -90.668877 39.037791999999996 -90.70607 39.058178 -90.707588 39.09370000000001 -90.690399 39.14421100000001 -90.716736 39.195873000000006 -90.718193 39.22474700000001 -90.732338 39.24780999999999 -90.738083 39.29680300000001 -90.779343 39.35045199999999 -90.850494 39.40058500000001 -90.947891 39.444412 -91.036339 39.473984 -91.064384 39.52892700000001 -91.093613 39.552593 -91.156189 39.600021 -91.203247 39.68591699999999 -91.317665 39.724639999999994 -91.367088 39.76127199999999 -91.373421 39.80377200000001 -91.381714 39.86304899999999 -91.449188 39.885242000000005 -91.450989 39.90182899999999 -91.434052 39.92183700000001 -91.430389 39.94606400000001 -91.447243 40.005753 -91.487289 40.066711 -91.504005 40.134544000000005 -91.516129 40.200458999999995 -91.506546 40.25137699999999 -91.498932 40.309624000000014 -91.486694 40.371902000000006 -91.448593 40.386875 -91.418816 40.392360999999994 -91.385757 40.40298799999999 -91.372757 40.44725 -91.385399 40.50365400000001 -91.374794 40.52849599999999 -91.382103 40.54799299999999 -91.412872 40.572970999999995 -91.411118 40.60343900000001 -91.37561 40.639545 -91.262062 40.64381800000001 -91.214912 40.65631099999999 -91.162498 40.68214800000001 -91.129158 40.70540199999999 -91.119987 40.76154700000001 -91.092751 40.833729000000005 -91.088905 40.87958499999999 -91.04921 40.92392699999999 -90.983276 40.950503999999995 -90.960709 41.07036199999999 -90.954651 41.10435899999999 -90.957787 41.14437100000001 -90.990341 41.16582500000001 -91.018257 41.17625799999999 -91.05632 41.23152200000001 -91.101524 41.267818000000005 -91.102348 41.334895999999986 -91.07328 41.40137899999999 -91.055786 41.423508 -91.027489 41.431084 -91.000694 41.421234 -90.949654 41.44462200000001 -90.844139 41.449820999999986 -90.7799 41.450062 -90.708214 41.46231800000001 -90.658791 41.50958600000001 -90.6007 41.52597 -90.54084 41.527546 -90.454994 41.543578999999994 -90.434967 41.567272 -90.423004 41.586849 -90.348366 41.60279800000001 -90.339348 41.64909 -90.341133 41.722736 -90.326027 41.75646599999999 -90.304886 41.78173799999999 -90.25531 41.80613700000001 -90.195839 41.93077500000001 -90.154518 41.98396299999999 -90.14267 42.03342799999999 -90.150536 42.06104300000001 -90.168098 42.103745 -90.166649 42.12050199999999 -90.176086 42.12268800000001 -90.191574 42.15972099999999 -90.230934 42.19731899999999 -90.323601 42.21020899999999 -90.367729 42.24264500000001 -90.407173 42.263924 -90.417984 42.340633 -90.427681 42.360073 -90.441597 42.38878299999999 -90.491043 42.42183700000001 -90.563583 42.46055999999999 -90.605827 42.47564299999999 -90.648346 42.494698 -90.651772 42.50936100000001 -90.638329 42.508362000000005 -90.419975 42.504108 -89.923569 42.50345999999999 -89.834618 42.49749 -89.400497 42.497906 -89.359444 42.49086399999999 -88.939079 42.490905999999995 -88.764954 42.489655 -88.70652 42.49197000000001 -88.297897 42.48961299999999 -88.194702 42.48913200000001 -87.79731 42.314212999999995 -87.836945 42.15645599999999 -87.760239 42.059822 -87.670547 41.847331999999994 -87.612625 41.723591 -87.529861 41.46971500000001 -87.532646 41.30130399999999 -87.532448 41.173756 -87.531731 41.00993 -87.532021 40.74541099999999 -87.532669 40.494609999999994 -87.53717 40.48324600000001 -87.535675 40.16619499999999 -87.535339 39.887302000000005 -87.535774 39.609341 -87.535576 39.47744800000001 -87.538567 39.350525000000005 -87.540215 39.338268 -87.597664 39.30740399999999 -87.625237 39.297661000000005 -87.610619 39.281418 -87.615799 39.258162999999996 -87.606895 39.248752999999994 -87.584564 39.20846599999999 -87.588593 39.198128 -87.594208 39.196068 -87.607925 39.168507000000005 -87.644257 39.146679000000006 -87.670326 39.130652999999995 -87.659454 39.11346800000001 -87.662262 39.10394299999999 -87.631668 39.08897400000001 -87.630867 39.08460600000001 -87.612007 39.062434999999994 -87.58532 38.995743000000004 -87.581749 38.99408299999999 -87.591858 38.97707700000001 -87.547905 38.96370300000001 -87.53347 38.93191899999999 -87.530182 38.90486100000001 -87.5392 38.869811999999996 -87.559059 38.857890999999995 -87.550507 38.795559 -87.507889 38.77669900000001 -87.519028 38.769722 -87.508003 38.73663300000001 -87.508316 38.68597399999999 -87.543892 38.672169 -87.588478 38.642810999999995 -87.625191 38.622917 -87.628647 38.599209 -87.619827 38.593177999999995 -87.640594 38.573871999999994 -87.652855 38.54742400000001 -87.672943 38.51536899999999 -87.65139 38.50044299999999 -87.653534 38.50400500000001 -87.679909 38.48153300000001 -87.692818 38.466125000000005 -87.756096 38.45709600000001 -87.758659 38.44548 -87.738953 38.41796500000001 -87.748428 38.378124000000014 -87.784019 38.35252399999999 -87.834503 38.28609800000001 -87.850082 38.28536199999999 -87.863007 38.316788 -87.874039 38.315552 -87.883446 38.300658999999996 -87.888466 38.281048 -87.914108 38.302345 -87.913651 38.30477099999999 -87.925919 38.241085 -87.980019 38.234814 -87.986008 38.200714000000005 -87.977928 38.171131 -87.932289 38.15752800000001 -87.931992 38.13691299999999 -87.950569 38.131760000000014 -87.973503 38.10330200000001 -88.018547 38.09234599999999 -88.012329 38.09674799999999 -87.964867 38.073307 -87.975296 38.054084999999986 -88.034729 38.04512 -88.043091 38.03830300000001 -88.041473 38.03353100000001 -88.021698 38.00823600000001 -88.029213 37.975055999999995 -88.021706 37.956264000000004 -88.042511 37.934498000000005 -88.041771 37.929783 -88.064621 37.944 -88.078941 37.92366 -88.084 37.917591 -88.030441 37.905758000000006 -88.026588 37.896004000000005 -88.044868 37.90617 -88.100082 37.895306000000005 -88.101456 37.867808999999994 -88.075737 37.843745999999996 -88.034241 37.827522 -88.042137 37.831249 -88.089264 37.817612 -88.086029 37.805683 -88.035576 37.735400999999996 -88.072472 37.700745 -88.133636 37.660686 -88.15937 37.628479 -88.157631 37.583572000000004 -88.134171 37.51099000000001 -88.071564Illinois17E N CenIL143986.611993.3351.1430602E72924880.04202240.05552233.05878369.04199206.03741715.0652603.0538071.05417967.0385040.01360159.0828906.00.4860.5141747776.038.78811999999999 -77.12262738.99343099999999 -76.91120938.966556999999995 -77.008232 38.88998799999999 -76.911209 38.78811999999999 -77.045448 38.81391500000001 -77.035248 38.829364999999996 -77.045189 38.838413 -77.040405 38.86243099999999 -77.039078 38.886101 -77.067886 38.91560000000001 -77.078949 38.93206000000001 -77.122627 38.99343099999999 -77.042389 38.966556999999995 -77.008232District of Columbia11S AtlDC159.05517.991606900.0122087.0249634.0282970.0323930.0229975.0106694.036621.0111422.0303994.023442.065498.022407.00.4660.53472696.038.44949 -75.79143539.84000800000001 -75.04599838.55747600000001 -75.70742 38.649551 -75.71106 38.83017000000001 -75.724937 39.141548 -75.752922 39.24775299999999 -75.761658 39.295849000000004 -75.764664 39.38300699999999 -75.772697 39.72375500000001 -75.791435 39.72444200000001 -75.775269 39.77481800000001 -75.745934 39.820347 -75.695114 39.83819600000001 -75.644341 39.84000800000001 -75.583794 39.826435000000004 -75.470345 39.798869999999994 -75.42083 39.789658 -75.412117 39.778130000000004 -75.428009 39.763248000000004 -75.460754 39.74171799999999 -75.475128 39.71997099999999 -75.476334 39.71474499999999 -75.489639 39.61279300000001 -75.610725 39.566722999999996 -75.562996 39.46376799999999 -75.590187 39.36694 -75.515572 39.25763699999999 -75.402481 39.073036 -75.397728 39.01238599999999 -75.324852 38.945910999999995 -75.307899 38.808670000000006 -75.190941 38.799812 -75.083138 38.44949 -75.045998 38.449963 -75.068298 38.45045099999999 -75.093094 38.455208 -75.350204 38.463066 -75.69915 38.55747600000001 -75.70742Delaware10S AtlDE5062.4561385.022666168.0175867.0247497.0322968.0343200.0247566.0258087.042968.08069.0335147.013945.087973.044140.00.4850.515102776.037.204796 -82.64727840.63713799999999 -77.72775338.480372999999986 -79.231903 38.437183000000005 -79.272598 38.41251 -79.317238 38.46202500000001 -79.48658 38.553687999999994 -79.536743 38.592239000000006 -79.642632 38.55006 -79.669655 38.52065999999999 -79.66584 38.500237 -79.692879 38.43011899999999 -79.684319 38.394566 -79.720261 38.351719 -79.733055 38.35387 -79.764229 38.31420499999999 -79.800552 38.29874799999999 -79.803001 38.28499600000001 -79.786736 38.268542999999994 -79.793846 38.250156000000004 -79.831375 38.17914200000001 -79.916382 38.16248300000001 -79.910561 38.121185 -79.935547 38.10318799999999 -79.928513 38.06724199999999 -79.957733 38.038498000000004 -79.966713 37.989746 -80.000717 37.955524 -80.055023 37.914536 -80.106705 37.891155 -80.118721 37.877106 -80.160217 37.860062 -80.172432 37.842845999999994 -80.171806 37.80224200000001 -80.223946 37.778735999999995 -80.220757 37.757110999999995 -80.254898 37.725928999999994 -80.250244 37.682548999999995 -80.303322 37.671379 -80.295914 37.652122000000006 -80.305077 37.640423 -80.301147 37.640579 -80.254639 37.624142000000006 -80.219147 37.596771000000004 -80.246613 37.566593 -80.31694 37.533276 -80.326126 37.528244 -80.308525 37.53613300000001 -80.280952 37.511024000000006 -80.288139 37.491051 -80.347733 37.475975000000005 -80.352379 37.465599 -80.388527 37.43478 -80.425598 37.422695000000004 -80.474983 37.433735 -80.487015 37.460471999999996 -80.488098 37.47492200000001 -80.50898 37.469086000000004 -80.542969 37.445930000000004 -80.597702 37.388256 -80.705414 37.392596999999995 -80.729942 37.387615 -80.746529 37.378960000000006 -80.747894 37.371292 -80.763199 37.386073999999994 -80.770226 37.391632 -80.799446 37.412941000000004 -80.799812 37.423339999999996 -80.850723 37.388577 -80.877556 37.350821999999994 -80.848618 37.339291 -80.855629 37.301249999999996 -80.93438 37.291672000000005 -80.968086 37.296356 -80.978729 37.306122 -80.98613 37.285942000000006 -81.025124 37.274806999999996 -81.140923 37.240097000000006 -81.223114 37.293591000000006 -81.31205 37.338837 -81.358971 37.311038999999994 -81.391121 37.282509000000005 -81.403519 37.254307 -81.475533 37.252735 -81.495705 37.234257 -81.505707 37.206238 -81.556824 37.204796 -81.666054 37.235321 -81.701897 37.250378 -81.738625 37.272144 -81.752022 37.287041 -81.792824 37.279427 -81.815544 37.285393 -81.83905 37.30691899999999 -81.858841 37.325344 -81.863976 37.34047700000001 -81.897316 37.371616 -81.926979 37.41540500000001 -81.920891 37.466476 -81.988358 37.48279599999999 -81.976578 37.492915999999994 -81.948151 37.506535 -81.935608 37.531063 -81.959732 37.543144 -81.97673 37.530411 -82.026505 37.551345999999995 -82.049286 37.525234 -82.055817 37.548203 -82.084541 37.557345999999995 -82.142654 37.565815 -82.146667 37.56979 -82.137619 37.590430999999995 -82.131927 37.593464 -82.159454 37.640564 -82.185692 37.623913 -82.205582 37.656673 -82.23851 37.668957000000006 -82.295761 37.744072 -82.329536 37.758326999999994 -82.319633 37.784302 -82.339981 37.811623 -82.405937 37.872260999999995 -82.421638 37.894760000000005 -82.437737 37.922169 -82.500336 37.942420999999996 -82.493523 37.95430399999999 -82.480301 37.975815 -82.475906 38.01557199999999 -82.524803 38.10987499999999 -82.59333 38.146243999999996 -82.646248 38.16935000000001 -82.647278 38.178009 -82.613884 38.19374099999999 -82.606766 38.23872800000001 -82.616348 38.245304000000004 -82.589233 38.255889999999994 -82.574699 38.292427 -82.58017 38.307728 -82.572418 38.368382 -82.598358 38.41243700000001 -82.586723 38.403819999999996 -82.575539 38.400429 -82.547668 38.40575000000001 -82.49511 38.430308999999994 -82.415016 38.42838699999999 -82.39489 38.441868 -82.329308 38.46514500000001 -82.314369 38.57999799999999 -82.2901 38.594807 -82.271027 38.58475100000001 -82.213791 38.59494799999999 -82.18438 38.63210699999999 -82.17379 38.67781099999999 -82.18911 38.71021999999999 -82.184105 38.778858000000014 -82.216881 38.804539000000005 -82.197853 38.838707 -82.146233 38.89931899999999 -82.13945 38.95201499999999 -82.101341 38.97711899999999 -82.085152 38.98898700000001 -82.05864 39.014061 -82.043022 39.01518200000001 -81.999817 38.992928000000006 -81.975327 38.991096 -81.937874 38.98419200000001 -81.927971 38.932143999999994 -81.89875 38.89466100000001 -81.931992 38.884365 -81.91539 38.87337099999999 -81.892838 38.885628 -81.866943 38.93780899999999 -81.841057 38.948387 -81.823921 38.92348100000001 -81.783371 38.93009900000001 -81.762444 38.96844899999999 -81.781876 39.01675 -81.775826 39.044028999999995 -81.813606 39.066338 -81.824417 39.07693900000001 -81.81971 39.077179 -81.786507 39.09464299999999 -81.753708 39.125797000000006 -81.74485 39.17567399999999 -81.759056 39.21319199999999 -81.723221 39.219944 -81.698051 39.26015100000001 -81.689674 39.27042 -81.667671 39.26584199999999 -81.572838 39.332581000000005 -81.557541 39.352633999999995 -81.540802 39.40678399999999 -81.465164 39.410954000000004 -81.448112 39.40594899999999 -81.434135 39.34561500000001 -81.376076 39.35356899999999 -81.338997 39.38699700000001 -81.28418 39.388397 -81.237785 39.40828300000001 -81.225113 39.415820999999994 -81.20047 39.437725 -81.180733 39.46770900000001 -81.117256 39.496376 -81.098412 39.532589 -81.037552 39.54406700000001 -81.032738 39.58172999999999 -80.983818 39.606865 -80.932785 39.60727700000001 -80.912766 39.62400400000001 -80.881287 39.66233399999999 -80.872925 39.680274999999995 -80.863594 39.70332300000001 -80.83297 39.71875800000001 -80.832481 39.73625899999999 -80.856636 39.759918 -80.870911 39.808926000000014 -80.81929 39.83959200000001 -80.826103 39.85664700000001 -80.798714 39.87227200000001 -80.791039 39.90482700000001 -80.812325 39.915829 -80.808029 39.91976500000001 -80.796211 39.913239000000004 -80.768318 39.92119199999999 -80.759079 39.94694100000001 -80.763252 39.98340200000001 -80.739082 40.03559100000001 -80.738434 40.15401800000001 -80.702263 40.16811000000001 -80.701088 40.194080000000014 -80.678757 40.245609 -80.650314 40.276432 -80.614891 40.306174999999996 -80.604721 40.37320700000001 -80.609451 40.38859600000001 -80.629448 40.39815899999999 -80.628052 40.48047299999999 -80.602036 40.50439800000001 -80.625458 40.539139000000006 -80.633644 40.56821400000001 -80.668823 40.58207300000001 -80.667931 40.61391800000001 -80.637543 40.61999900000001 -80.611755 40.615910000000014 -80.574623 40.63713799999999 -80.522209 40.478717999999986 -80.524567 40.40296599999999 -80.523773 40.16244900000001 -80.526253 40.022751 -80.525169 39.95834400000001 -80.524857 39.721126999999996 -80.524467 39.719761000000005 -80.429283 39.721588 -79.918488 39.72172900000001 -79.765358 39.72019599999999 -79.481209 39.19728900000001 -79.490089 39.21315799999999 -79.461418 39.21198699999999 -79.449509 39.269195999999994 -79.385078 39.291988 -79.346428 39.300438000000014 -79.295509 39.325142 -79.28006 39.34854100000001 -79.260406 39.39339799999999 -79.163261 39.41386399999999 -79.158371 39.416934999999995 -79.131645 39.44721200000001 -79.104324 39.46453500000001 -79.096962 39.47077899999999 -79.104843 39.47075699999999 -79.070877 39.48573300000001 -79.064659 39.483723 -79.049103 39.43843100000001 -78.970688 39.460364999999996 -78.955643 39.5257 -78.871071 39.56322900000001 -78.838371 39.566734 -78.806808 39.585609000000005 -78.82267 39.61533 -78.798729 39.63074499999999 -78.798409 39.644153999999986 -78.772964 39.62652600000001 -78.767876 39.62687700000001 -78.732643 39.621455999999995 -78.730759 39.60870399999999 -78.736511 39.601528 -78.774002 39.581703000000005 -78.761711 39.57655299999999 -78.732979 39.559483 -78.716576 39.536838999999986 -78.666687 39.53790699999999 -78.649406 39.52985799999999 -78.637344 39.53559100000001 -78.60463 39.520981000000006 -78.564453 39.52506600000001 -78.509048 39.519844000000006 -78.481544 39.533641999999986 -78.456078 39.548225 -78.446136 39.549316000000005 -78.421089 39.58074199999999 -78.462082 39.592613 -78.450897 39.58752100000001 -78.404266 39.62086099999999 -78.432159 39.61440300000001 -78.384903 39.631226 -78.377937 39.632278000000014 -78.357048 39.640499000000005 -78.34819 39.61831699999999 -78.273285 39.641075 -78.257996 39.65847400000001 -78.2295 39.67389700000001 -78.227867 39.67584600000001 -78.204575 39.69454999999999 -78.183243 39.67550700000001 -78.094612 39.622772 -78.026695 39.598873 -77.995483 39.61122900000001 -77.964516 39.585915 -77.945259 39.59184300000001 -77.935738 39.61491799999999 -77.947823 39.618122 -77.938889 39.59602699999999 -77.903534 39.600605 -77.891022 39.61647400000001 -77.888718 39.60207 -77.855804 39.605278 -77.84269 39.572643 -77.840149 39.565357000000006 -77.853241 39.56435400000001 -77.885452 39.557995000000005 -77.890198 39.545815000000005 -77.869843 39.51455300000001 -77.864914 39.531834 -77.844131 39.52551299999999 -77.835747 39.529156 -77.829208 39.51194000000001 -77.825546 39.50190699999999 -77.84816 39.493809 -77.82547 39.49801600000001 -77.771835 39.480728 -77.799782 39.459002999999996 -77.785393 39.46303900000001 -77.804474 39.450817 -77.796082 39.439919 -77.804977 39.43221700000001 -77.802559 39.42506399999999 -77.757271 39.40333899999999 -77.741119 39.396095 -77.737518 39.378376 -77.756508 39.36027100000001 -77.745735 39.338493 -77.754585 39.326717 -77.750374 39.31769600000001 -77.727753 39.28454199999999 -77.759743 39.24644900000001 -77.768517 39.19650300000001 -77.805733 39.14162099999999 -77.820328 39.13207600000001 -77.830963 39.265536999999995 -78.033607 39.39101400000001 -78.229782 39.42336700000001 -78.277153 39.456902000000014 -78.347816 39.38073 -78.350502 39.36158800000001 -78.365746 39.35085699999999 -78.3442 39.341358000000014 -78.341118 39.257439000000005 -78.413818 39.244850000000014 -78.399399 39.21204 -78.42334 39.19752500000001 -78.424339 39.17049 -78.402634 39.14852099999999 -78.43084 39.118931 -78.44825 39.111839 -78.485519 39.09357800000001 -78.501869 39.05702600000001 -78.536919 39.035037999999986 -78.564445 39.02338 -78.549469 39.01382799999999 -78.553474 38.967197 -78.598961 38.979603 -78.631111 38.95044300000001 -78.647232 38.92157399999999 -78.680489 38.90488099999999 -78.719246 38.93021400000001 -78.724403 38.92917299999999 -78.737991 38.911381000000006 -78.749512 38.88010800000001 -78.793312 38.83363299999999 -78.816116 38.76329000000001 -78.866814 38.84664900000001 -78.987701 38.799847 -79.033989 38.79051999999999 -79.055046 38.76194000000001 -79.056801 38.707153000000005 -79.087479 38.659088 -79.088791 38.66365099999999 -79.121307 38.65812700000001 -79.12767 38.480372999999986 -79.231903West Virginia54S AtlWV62384.2375.1991793477.0500259.0688557.0861536.0931941.0661702.0493164.0106918.07237.0671085.071142.0205950.0124172.00.480.52317564.037.970130999999995 -79.49008939.725368 -75.04599838.649551 -75.71106 38.55747600000001 -75.70742 38.463066 -75.69915 38.455208 -75.350204 38.45045099999999 -75.093094 38.36962500000001 -75.155243 38.273765999999995 -75.150986 38.201415999999995 -75.262863 38.06891999999999 -75.373428 38.01671200000001 -75.37278 37.996418000000006 -75.626434 37.970130999999995 -75.648216 37.979656000000006 -75.86573 38.09724800000001 -75.769554 38.17493400000001 -75.897797 38.231594 -75.838074 38.24004400000001 -75.861671 38.26360299999999 -75.794174 38.258872999999994 -75.894958 38.35723100000001 -75.872437 38.375462 -75.886826 38.282055000000014 -75.949928 38.282523999999995 -75.995285 38.32189600000001 -76.020805 38.25893400000001 -76.06546 38.436935000000005 -76.294273 38.47872899999999 -76.291985 38.54334299999999 -76.192215 38.59508099999999 -76.251053 38.571922 -76.031937 38.622005 -76.028061 38.591858 -76.046921 38.610783 -76.075996 38.707977 -76.124039 38.70909499999999 -76.174042 38.76279099999999 -76.223312 38.769886000000014 -76.26712 38.67937499999999 -76.337624 38.69902400000001 -76.350533 38.834 -76.272415 38.765254999999996 -76.195175 38.78860900000001 -76.165855 38.885456000000005 -76.114372 38.88954899999999 -76.075867 38.89801800000001 -76.102898 38.94813199999999 -76.095497 38.920715 -76.113869 38.973354 -76.199669 39.118595 -76.111282 39.092918 -76.221771 39.13082499999999 -76.238892 39.204853000000014 -76.218437 39.32129699999999 -76.112373 39.35836800000001 -76.037422 39.37913900000001 -75.849739 39.39455000000001 -75.978798 39.471180000000004 -75.952637 39.524021000000005 -75.974762 39.56992700000001 -76.03141 39.542362 -76.078506 39.401936000000006 -76.154526 39.374888999999996 -76.226662 39.393280000000004 -76.364029 39.231144 -76.39904 39.24261899999999 -76.531296 39.259354 -76.604027 39.23144500000001 -76.565132 39.19811999999999 -76.576981 39.180983999999995 -76.60733 39.15868800000001 -76.595139 39.19626600000001 -76.563919 39.11835500000001 -76.423935 38.908237000000014 -76.472038 38.758972 -76.549126 38.709633 -76.525253 38.522099 -76.508896 38.39128099999999 -76.385811 38.34602000000001 -76.405457 38.32049900000001 -76.421463 38.33565899999999 -76.471924 38.41013699999999 -76.520081 38.450424 -76.647255 38.21306200000001 -76.343781 38.045704 -76.33017 38.22263699999999 -76.577271 38.23428000000001 -76.760239 38.391346 -76.864182 38.29984999999999 -76.908577 38.331028 -76.97303 38.426852999999994 -77.002396 38.39066299999999 -77.220924 38.41359299999999 -77.255875 38.487099 -77.277756 38.64812499999999 -77.12999 38.67779899999999 -77.125114 38.703982999999994 -77.093147 38.71527900000001 -77.081879 38.71202099999999 -77.057121 38.71878100000001 -77.046471 38.78811999999999 -77.045448 38.88998799999999 -76.911209 38.966556999999995 -77.008232 38.99343099999999 -77.042389 38.93206000000001 -77.122627 38.96477899999999 -77.152046 38.97587999999999 -77.243729 39.02757299999999 -77.255989 39.062588000000005 -77.3246 39.068512 -77.346519 39.066776000000004 -77.433037 39.080837 -77.459694 39.103958000000006 -77.479248 39.116653000000014 -77.513046 39.157444 -77.516617 39.17693299999999 -77.478638 39.218632000000014 -77.461998 39.22905700000001 -77.464958 39.249911999999995 -77.494064 39.268939999999986 -77.542191 39.298393000000004 -77.568962 39.29971699999999 -77.616524 39.31868 -77.679588 39.31769600000001 -77.727753 39.326717 -77.750374 39.338493 -77.754585 39.36027100000001 -77.745735 39.378376 -77.756508 39.396095 -77.737518 39.40333899999999 -77.741119 39.42506399999999 -77.757271 39.43221700000001 -77.802559 39.439919 -77.804977 39.450817 -77.796082 39.46303900000001 -77.804474 39.459002999999996 -77.785393 39.480728 -77.799782 39.49801600000001 -77.771835 39.493809 -77.82547 39.50190699999999 -77.84816 39.51194000000001 -77.825546 39.529156 -77.829208 39.52551299999999 -77.835747 39.531834 -77.844131 39.51455300000001 -77.864914 39.545815000000005 -77.869843 39.557995000000005 -77.890198 39.56435400000001 -77.885452 39.565357000000006 -77.853241 39.572643 -77.840149 39.605278 -77.84269 39.60207 -77.855804 39.61647400000001 -77.888718 39.600605 -77.891022 39.59602699999999 -77.903534 39.618122 -77.938889 39.61491799999999 -77.947823 39.59184300000001 -77.935738 39.585915 -77.945259 39.61122900000001 -77.964516 39.598873 -77.995483 39.622772 -78.026695 39.67550700000001 -78.094612 39.69454999999999 -78.183243 39.67584600000001 -78.204575 39.67389700000001 -78.227867 39.65847400000001 -78.2295 39.641075 -78.257996 39.61831699999999 -78.273285 39.640499000000005 -78.34819 39.632278000000014 -78.357048 39.631226 -78.377937 39.61440300000001 -78.384903 39.62086099999999 -78.432159 39.58752100000001 -78.404266 39.592613 -78.450897 39.58074199999999 -78.462082 39.549316000000005 -78.421089 39.548225 -78.446136 39.533641999999986 -78.456078 39.519844000000006 -78.481544 39.52506600000001 -78.509048 39.520981000000006 -78.564453 39.53559100000001 -78.60463 39.52985799999999 -78.637344 39.53790699999999 -78.649406 39.536838999999986 -78.666687 39.559483 -78.716576 39.57655299999999 -78.732979 39.581703000000005 -78.761711 39.601528 -78.774002 39.60870399999999 -78.736511 39.621455999999995 -78.730759 39.62687700000001 -78.732643 39.62652600000001 -78.767876 39.644153999999986 -78.772964 39.63074499999999 -78.798409 39.61533 -78.798729 39.585609000000005 -78.82267 39.566734 -78.806808 39.56322900000001 -78.838371 39.5257 -78.871071 39.460364999999996 -78.955643 39.43843100000001 -78.970688 39.483723 -79.049103 39.48573300000001 -79.064659 39.47075699999999 -79.070877 39.47077899999999 -79.104843 39.46453500000001 -79.096962 39.44721200000001 -79.104324 39.416934999999995 -79.131645 39.41386399999999 -79.158371 39.39339799999999 -79.163261 39.34854100000001 -79.260406 39.325142 -79.28006 39.300438000000014 -79.295509 39.291988 -79.346428 39.269195999999994 -79.385078 39.21198699999999 -79.449509 39.21315799999999 -79.461418 39.19728900000001 -79.490089 39.72019599999999 -79.481209 39.719234 -79.396851 39.722252 -78.930428 39.723029999999994 -78.818016 39.723659999999995 -78.385048 39.724007 -78.334816 39.725368 -78.096222 39.719528 -77.476082 39.719978 -77.464722 39.72058100000001 -77.221344 39.72079099999999 -76.997108 39.72115299999999 -76.790794 39.72016099999999 -76.570145 39.72174799999999 -76.233444 39.72212200000001 -76.139549 39.72375500000001 -75.791435 39.38300699999999 -75.772697 39.295849000000004 -75.764664 39.24775299999999 -75.761658 39.141548 -75.752922 38.83017000000001 -75.724937 38.649551 -75.7110638.90772200000001 -76.293129 38.967567 -76.29451 38.956661 -76.339066 38.941925 -76.314453 38.91208599999999 -76.322632 38.924057000000005 -76.342545 38.875889 -76.329712 38.85410300000001 -76.375565 38.95818700000001 -76.356796 39.040595999999994 -76.299812 38.97889699999999 -76.248146 38.92357999999999 -76.246735 38.94923 -76.273514 38.90772200000001 -76.29312938.449963 -75.068298 38.44949 -75.045998 38.322945000000004 -75.087692 38.449963 -75.06829838.02758800000001 -75.270721 38.037903 -75.244461 38.094177 -75.209755 38.204845000000006 -75.164742 38.320201999999995 -75.094398 38.124187000000006 -75.17318 38.028526 -75.242584 38.02758800000001 -75.270721Maryland24S AtlMD25316.3456188.7944781468.01245814.01748991.02318671.02462797.01783061.01732837.0376449.0202169.02481342.0111536.0586994.0260308.00.4850.515684773.036.988972000000004 -109.05519941.00341 -102.03675837.641459999999995 -102.043999 37.386261000000005 -102.041557 36.988972000000004 -102.036758 36.998504999999994 -102.997223 36.999741 -103.077377 36.994445999999996 -103.993111 36.993183 -105.145615 36.992580000000004 -105.212532 36.994541 -105.712891 36.99227500000001 -105.991425 36.991493000000006 -106.471588 36.989491 -106.860657 36.999072999999996 -106.889778 36.997519999999994 -107.410217 36.998772 -107.471855 36.999474000000006 -108.371834 36.996643000000006 -109.047821 37.630829000000006 -109.044937 37.887428 -109.042542 38.15294299999999 -109.042801 38.24493000000001 -109.055199 38.494663 -109.053284 39.36098899999999 -109.050751 39.51819599999999 -109.052864 39.65741 -109.051888 40.210544999999996 -109.050591 40.665329000000014 -109.045479 40.99847399999999 -109.047638 41.00341 -107.918037 41.000168 -107.303436 40.998489000000006 -106.864838 41.001316 -106.328545 41.000111000000004 -106.202896 40.996365 -105.278259 40.994305 -104.933968 41.00322700000001 -104.051201 40.999663999999996 -103.571823 41.000331999999986 -103.382469 40.99813499999999 -102.651802 41.000225 -102.620789 40.998076999999995 -102.047279 40.743134 -102.046532 40.69732300000001 -102.04557 40.431084 -102.047157 40.34265099999999 -102.047081 39.99892800000001 -102.051071 39.56869900000001 -102.048981 39.56280899999999 -102.04834 39.12675100000001 -102.047417 39.03699900000001 -102.048515 38.69253900000001 -102.047112 38.615486000000004 -102.047127 38.263329 -102.04509 38.253806999999995 -102.045601 37.734386 -102.043518 37.641459999999995 -102.043999Colorado08MtnCO268659.501960.3643294394.0854214.01282489.01631295.01663099.01233023.01216639.0210274.046983.01633281.099438.0421079.0181760.00.4950.505512677.036.496517 -89.56815339.14200600000001 -81.95973236.655033 -86.510674 36.652058 -86.770538 36.650768 -87.068184 36.651264 -87.112701 36.649231 -87.346603 36.645168 -87.64064 36.64444 -87.693512 36.64147199999999 -87.853516 36.66937299999999 -87.870689 36.67963 -88.071312 36.582668 -88.041061 36.538146999999995 -88.035049 36.496517 -88.042732 36.498149999999995 -88.495979 36.499489 -88.512634 36.498985000000005 -88.810661 36.499847 -88.826302 36.499793999999994 -88.830315 36.502548000000004 -89.346596 36.502617 -89.414711 36.510563000000005 -89.418137 36.616187999999994 -89.373878 36.625702000000004 -89.363548 36.628849 -89.342323 36.622017 -89.322273 36.575249 -89.283424 36.569266999999996 -89.241615 36.581894000000005 -89.21006 36.631298 -89.200119 36.653003999999996 -89.177094 36.67157 -89.167831 36.713367000000005 -89.197495 36.72742100000001 -89.196297 36.760925 -89.1772 36.759040999999996 -89.151367 36.768032000000005 -89.125473 36.792412 -89.125839 36.80441999999999 -89.164375 36.829384000000005 -89.173462 36.843422000000004 -89.166496 36.86644 -89.129585 36.953869 -89.104965 36.977451 -89.107147 36.988113 -89.12986 36.99844 -89.150246 37.025711 -89.174332 37.064235999999994 -89.169548 37.093185000000005 -89.146347 37.112137000000004 -89.116821 37.185860000000005 -89.065033 37.22003599999999 -88.993172 37.218407 -88.932503 37.202194000000006 -88.863289 37.152107 -88.746506 37.141182 -88.739113 37.13540999999999 -88.68837 37.109047000000004 -88.61422 37.072815000000006 -88.559273 37.064769999999996 -88.517273 37.06818 -88.4907 37.072143999999994 -88.476799 37.098670999999996 -88.45047 37.156909999999996 -88.422516 37.205669 -88.450699 37.257782000000006 -88.501427 37.296852 -88.511322 37.400757 -88.467644 37.420292 -88.419853 37.40930899999999 -88.359177 37.442852 -88.311707 37.476273000000006 -88.087883 37.51099000000001 -88.071564 37.583572000000004 -88.134171 37.628479 -88.157631 37.660686 -88.15937 37.700745 -88.133636 37.735400999999996 -88.072472 37.805683 -88.035576 37.801308000000006 -88.011192 37.77618 -87.95871 37.799507000000006 -87.939583 37.809685 -87.920143 37.838570000000004 -87.910202 37.875179 -87.936821 37.904160000000005 -87.934456 37.919865 -87.921867 37.924553 -87.89901 37.890902999999994 -87.857162 37.878212000000005 -87.823624 37.898087000000004 -87.753761 37.894543 -87.72818 37.899711999999994 -87.709389 37.897007 -87.679703 37.836330000000004 -87.6847 37.828132999999994 -87.65168 37.843777 -87.607574 37.864868 -87.59362 37.890724000000006 -87.594704 37.923412 -87.627121 37.971115 -87.604309 37.91558499999999 -87.504791 37.936477999999994 -87.452278 37.93492500000001 -87.387543 37.89367300000001 -87.310555 37.870773 -87.272743 37.84907200000001 -87.226761 37.838593 -87.175781 37.82692 -87.158081 37.789688 -87.131882 37.784203000000005 -87.10643 37.807086999999996 -87.071312 37.907955 -87.036484 37.924713 -87.013161 37.930565 -86.989037 37.937988000000004 -86.93158 37.953644 -86.900085 37.986866000000006 -86.863281 37.991505000000004 -86.826317 37.978745 -86.802826 37.898303999999996 -86.753838 37.894566 -86.728889 37.91179700000001 -86.68914 37.913139 -86.668671 37.902514999999994 -86.660324 37.860584 -86.670685 37.847324 -86.665939 37.845943000000005 -86.645584 37.857918 -86.614799 37.921013 -86.598328 37.925606 -86.581802 37.921454999999995 -86.541107 37.927811000000005 -86.522758 37.942181000000005 -86.516922 37.987415 -86.530869 38.018631 -86.527855 38.046986000000004 -86.519112 38.051585999999986 -86.503136 38.05909700000001 -86.458389 38.075931999999995 -86.44249 38.08863400000001 -86.442543 38.11164500000001 -86.474358 38.12909300000001 -86.464867 38.129692000000006 -86.452545 38.10815400000001 -86.407204 38.12323000000001 -86.3937 38.13420500000001 -86.344063 38.143963000000014 -86.335442 38.155495 -86.343147 38.167957 -86.387123 38.194743999999986 -86.388329 38.19322600000001 -86.364372 38.177223 -86.341629 38.150238 -86.297699 38.07842299999999 -86.291466 38.05810500000001 -86.277725 38.04065299999999 -86.252182 38.01768899999999 -86.190651 38.01126500000001 -86.105019 37.966713 -86.05275 37.992878000000005 -86.031654 38.001693999999986 -86.006699 38.01176799999999 -85.958618 38.03397799999999 -85.930908 38.06480400000001 -85.914787 38.17993200000001 -85.912109 38.23849100000001 -85.852371 38.27622199999999 -85.839943 38.28611000000001 -85.806587 38.28232199999999 -85.786247 38.27024499999999 -85.746964 38.300883999999996 -85.681427 38.33768499999999 -85.654266 38.383621000000005 -85.643631 38.446606 -85.612679 38.47135499999999 -85.50724 38.518112 -85.466423 38.53695300000001 -85.432411 38.56141299999999 -85.417503 38.584778 -85.424446 38.694614 -85.45372 38.72478100000001 -85.446732 38.738358000000005 -85.418228 38.73694599999999 -85.335052 38.744316 -85.271439 38.69575499999999 -85.205208 38.69511399999999 -85.16098 38.714077 -85.119705 38.750361999999996 -85.068504 38.764229 -85.025124 38.78057899999999 -84.975662 38.793346000000014 -84.818832 38.83439999999999 -84.824478 38.866581 -84.787498 38.884322999999995 -84.788719 38.89712900000001 -84.803276 38.901981000000006 -84.859795 38.909369999999996 -84.875305 38.92754400000001 -84.875931 38.95457099999999 -84.846367 38.98271600000001 -84.834496 39.00577200000001 -84.844276 39.032837 -84.876343 39.050591 -84.890045 39.064987 -84.886757 39.10363000000001 -84.827911 39.10252800000001 -84.811531 39.106976 -84.789978 39.14200600000001 -84.742928 39.08956499999999 -84.667542 39.07487499999999 -84.622704 39.07020600000001 -84.593124 39.094134999999994 -84.515358 39.107304 -84.492111 39.111766999999986 -84.444977 39.084663000000006 -84.425743 39.04727600000001 -84.4198 39.035683000000006 -84.391373 39.03774999999999 -84.34584 39.01401100000001 -84.313377 38.94447299999999 -84.290199 38.91741200000001 -84.261589 38.87448900000001 -84.235359 38.812622000000005 -84.228767 38.78842900000001 -84.176819 38.765434 -84.088936 38.763664000000006 -84.053871 38.77757600000001 -83.962234 38.757889000000006 -83.912613 38.744845999999995 -83.857628 38.71180699999999 -83.837608 38.693771 -83.790543 38.650745 -83.770302 38.635479000000004 -83.712906 38.62085300000001 -83.678612 38.623806 -83.655838 38.63578799999999 -83.643272 38.664897999999994 -83.633324 38.677898 -83.618462 38.69603699999999 -83.526642 38.69006300000001 -83.50016 38.663700000000006 -83.453705 38.654922 -83.371513 38.631912 -83.330116 38.60648699999999 -83.320419 38.59624099999999 -83.306625 38.59656100000001 -83.290138 38.60918000000001 -83.27285 38.62409600000001 -83.24511 38.60976400000001 -83.182037 38.61926299999999 -83.14325 38.66475700000001 -83.111343 38.68565000000001 -83.060982 38.714436000000006 -83.027046 38.719565999999986 -82.972588 38.74633800000001 -82.92141 38.74269899999999 -82.890419 38.718929 -82.873299 38.683223999999996 -82.880119 38.65231700000001 -82.860138 38.60038 -82.853966 38.571583000000004 -82.827103 38.557209 -82.802475 38.552986000000004 -82.742058 38.539063 -82.695694 38.50206 -82.669876 38.472588 -82.613861 38.41243700000001 -82.586723 38.368382 -82.598358 38.307728 -82.572418 38.292427 -82.58017 38.255889999999994 -82.574699 38.245304000000004 -82.589233 38.23872800000001 -82.616348 38.19374099999999 -82.606766 38.178009 -82.613884 38.16935000000001 -82.647278 38.146243999999996 -82.646248 38.10987499999999 -82.59333 38.01557199999999 -82.524803 37.975815 -82.475906 37.95430399999999 -82.480301 37.942420999999996 -82.493523 37.922169 -82.500336 37.894760000000005 -82.437737 37.872260999999995 -82.421638 37.811623 -82.405937 37.784302 -82.339981 37.758326999999994 -82.319633 37.744072 -82.329536 37.668957000000006 -82.295761 37.656673 -82.23851 37.623913 -82.205582 37.640564 -82.185692 37.593464 -82.159454 37.590430999999995 -82.131927 37.56979 -82.137619 37.565815 -82.146667 37.557345999999995 -82.142654 37.548203 -82.084541 37.525234 -82.055817 37.551345999999995 -82.049286 37.530411 -82.026505 37.543144 -81.97673 37.531063 -81.959732 37.30475199999999 -82.289085 37.26040999999999 -82.353973 37.250595000000004 -82.406013 37.19927199999999 -82.550163 37.193813000000006 -82.568146 37.109916999999996 -82.719215 37.093018 -82.721497 37.075382000000005 -82.70929 37.065830000000005 -82.720177 37.033894000000004 -82.723717 37.005505 -82.81234 36.974491 -82.866676 36.932068 -82.860748 36.893600000000006 -82.878159 36.863986999999995 -82.95092 36.858704 -83.046745 36.850905999999995 -83.068062 36.779064000000005 -83.128326 36.75108 -83.124496 36.739971 -83.138618 36.734173 -83.203758 36.709446 -83.32148 36.68813299999999 -83.385948 36.672241 -83.404243 36.661747000000005 -83.460312 36.661395999999996 -83.530983 36.616894 -83.646889 36.598620999999994 -83.675262 36.584166999999994 -83.695694 36.591209000000006 -83.935677 36.592006999999995 -84.006821 36.595371 -84.254555 36.595417 -84.256844 36.605002999999996 -84.781929 36.605366000000004 -84.791115 36.620914 -84.998512 36.625553 -85.272537 36.626037999999994 -85.300133 36.618137000000004 -85.437408 36.626628999999994 -85.7855 36.63306 -85.980629 36.643246000000005 -86.199005 36.650890000000004 -86.415451 36.655033 -86.51067436.498108 -89.533195 36.518738 -89.566986 36.541409 -89.568153 36.557743 -89.556137 36.564555999999996 -89.530365 36.559116 -89.493126 36.547775 -89.481674 36.525555 -89.471375 36.504695999999996 -89.481682 36.498547 -89.475822 36.498108 -89.533195Kentucky21E S CenKY103961.9041772.5424551524.01237346.01718663.02195130.02356394.01656590.01502949.0273091.048158.01970934.0148125.0556744.0361621.00.4820.518646517.036.988853000000006 -102.05107140.00297900000001 -94.6009937.001408 -95.071693 37.000538000000006 -95.406372 37.000938000000005 -95.525764 36.998035 -95.785492 37.000011 -95.957703 36.998264000000006 -96.005791 37.000538000000006 -96.518898 37.000134 -96.74839 36.999779000000004 -97.137375 36.996441000000004 -97.46508 36.998543 -97.803917 36.998645999999994 -98.104187 36.999035000000006 -98.346794 36.99834799999999 -98.539864 36.998042999999996 -98.999138 36.99453 -99.43708 36.995434 -99.544243 36.995388000000005 -99.998848 36.997623000000004 -100.088158 36.997806999999995 -100.633812 36.996635 -100.950142 36.99744 -101.071159 36.996666000000005 -101.553238 36.988853000000006 -102.024071 36.988972000000004 -102.036758 37.386261000000005 -102.041557 37.641459999999995 -102.043999 37.734386 -102.043518 38.253806999999995 -102.045601 38.263329 -102.04509 38.615486000000004 -102.047127 38.69253900000001 -102.047112 39.03699900000001 -102.048515 39.12675100000001 -102.047417 39.56280899999999 -102.04834 39.56869900000001 -102.048981 39.99892800000001 -102.051071 40.00100699999999 -101.406952 40.001823 -101.321709 40.00019499999999 -100.754425 39.999168 -100.734619 40.000580000000014 -100.190697 40.000473 -100.180496 40.00297900000001 -99.627472 39.99956499999999 -99.177834 39.998324999999994 -99.064384 39.998447 -98.720284 39.997116000000005 -98.504143 39.99842100000001 -98.26384 39.99843999999999 -97.929268 39.999718 -97.816269 39.997375000000005 -97.361595 39.996151 -96.907982 39.994473 -96.801117 39.994170999999994 -96.453743 39.99450300000001 -96.240311 39.995159 -96.000977 39.99348800000001 -95.780434 39.99259599999999 -95.329445 39.999409000000014 -95.308441 39.94210799999999 -95.240707 39.93817899999999 -95.207344 39.91018299999999 -95.19371 39.90805800000001 -95.150299 39.869868999999994 -95.100471 39.86654300000001 -95.062996 39.877849999999995 -95.033257 39.896984 -95.021523 39.90082899999999 -94.964775 39.89608799999999 -94.937996 39.849391999999995 -94.936264 39.83313799999999 -94.92363 39.828339 -94.898079 39.817406000000005 -94.88826 39.793780999999996 -94.899078 39.78278 -94.933022 39.77543299999999 -94.934868 39.757847 -94.921555 39.760684999999995 -94.876823 39.75412399999999 -94.870941 39.73931099999999 -94.877617 39.72676100000001 -94.905434 39.72703200000001 -94.930611 39.73650699999999 -94.952896 39.732044 -94.96154 39.68499399999999 -94.978325 39.66191900000001 -95.028046 39.62569400000001 -95.055771 39.586781 -95.053368 39.56069600000001 -95.108742 39.53285199999999 -95.101791 39.485332 -95.047356 39.46294399999999 -95.040268 39.43946500000001 -94.985962 39.411449000000005 -94.958252 39.381268000000006 -94.925507 39.380641999999995 -94.898041 39.34012200000001 -94.911102 39.32302899999999 -94.90744 39.286045 -94.880867 39.261765 -94.833237 39.21100200000001 -94.82058 39.19687999999999 -94.78981 39.17125300000001 -94.730293 39.17491899999999 -94.675278 39.158424 -94.646172 39.151646 -94.612419 39.141223999999994 -94.60099 39.112797 -94.607903 39.04466199999999 -94.609047 38.83710099999999 -94.612236 38.737213 -94.612915 38.47145800000001 -94.618484 38.39201399999999 -94.61882 38.05575200000001 -94.617096 38.03035399999999 -94.616501 37.679824999999994 -94.619057 37.65033 -94.618759 37.360714 -94.61853 37.327679 -94.618744 37.060085 -94.620438 36.996983 -94.620155 37.00071 -95.032509 37.001408 -95.071693Kansas20W N CenKS211921.6411188.8652477574.0658600.0944726.01214645.01262929.0907383.0928575.0135598.07585.01172214.057772.0346339.0166429.00.490.51453411.036.541481000000005 -83.67526239.456902000000014 -75.24258436.546059 -79.144325 36.54978199999999 -79.217064 36.547657 -79.5103 36.547889999999995 -79.717445 36.545024999999995 -80.024055 36.547134 -80.048096 36.551044000000005 -80.43531 36.557297000000005 -80.611053 36.563438000000005 -80.838158 36.565212 -80.903442 36.57286499999999 -81.345299 36.589648999999994 -81.669998 36.607555000000005 -81.652435 36.611481 -81.829056 36.613495 -81.918449 36.595837 -81.929459 36.595043000000004 -82.154327 36.593967000000006 -82.216805 36.591697999999994 -82.296997 36.591446000000005 -82.610962 36.590946 -82.849937 36.591198000000006 -82.986809 36.588001000000006 -83.211029 36.589848 -83.248489 36.60038 -83.275131 36.598755 -83.464302 36.598620999999994 -83.675262 36.616894 -83.646889 36.661395999999996 -83.530983 36.661747000000005 -83.460312 36.672241 -83.404243 36.68813299999999 -83.385948 36.709446 -83.32148 36.734173 -83.203758 36.739971 -83.138618 36.75108 -83.124496 36.779064000000005 -83.128326 36.850905999999995 -83.068062 36.858704 -83.046745 36.863986999999995 -82.95092 36.893600000000006 -82.878159 36.932068 -82.860748 36.974491 -82.866676 37.005505 -82.81234 37.033894000000004 -82.723717 37.065830000000005 -82.720177 37.075382000000005 -82.70929 37.093018 -82.721497 37.109916999999996 -82.719215 37.193813000000006 -82.568146 37.19927199999999 -82.550163 37.250595000000004 -82.406013 37.26040999999999 -82.353973 37.30475199999999 -82.289085 37.531063 -81.959732 37.506535 -81.935608 37.492915999999994 -81.948151 37.48279599999999 -81.976578 37.466476 -81.988358 37.41540500000001 -81.920891 37.371616 -81.926979 37.34047700000001 -81.897316 37.325344 -81.863976 37.30691899999999 -81.858841 37.285393 -81.83905 37.279427 -81.815544 37.287041 -81.792824 37.272144 -81.752022 37.250378 -81.738625 37.235321 -81.701897 37.204796 -81.666054 37.206238 -81.556824 37.234257 -81.505707 37.252735 -81.495705 37.254307 -81.475533 37.282509000000005 -81.403519 37.311038999999994 -81.391121 37.338837 -81.358971 37.293591000000006 -81.31205 37.240097000000006 -81.223114 37.274806999999996 -81.140923 37.285942000000006 -81.025124 37.306122 -80.98613 37.296356 -80.978729 37.291672000000005 -80.968086 37.301249999999996 -80.93438 37.339291 -80.855629 37.350821999999994 -80.848618 37.388577 -80.877556 37.423339999999996 -80.850723 37.412941000000004 -80.799812 37.391632 -80.799446 37.386073999999994 -80.770226 37.371292 -80.763199 37.378960000000006 -80.747894 37.387615 -80.746529 37.392596999999995 -80.729942 37.388256 -80.705414 37.445930000000004 -80.597702 37.469086000000004 -80.542969 37.47492200000001 -80.50898 37.460471999999996 -80.488098 37.433735 -80.487015 37.422695000000004 -80.474983 37.43478 -80.425598 37.465599 -80.388527 37.475975000000005 -80.352379 37.491051 -80.347733 37.511024000000006 -80.288139 37.53613300000001 -80.280952 37.528244 -80.308525 37.533276 -80.326126 37.566593 -80.31694 37.596771000000004 -80.246613 37.624142000000006 -80.219147 37.640579 -80.254639 37.640423 -80.301147 37.652122000000006 -80.305077 37.671379 -80.295914 37.682548999999995 -80.303322 37.725928999999994 -80.250244 37.757110999999995 -80.254898 37.778735999999995 -80.220757 37.80224200000001 -80.223946 37.842845999999994 -80.171806 37.860062 -80.172432 37.877106 -80.160217 37.891155 -80.118721 37.914536 -80.106705 37.955524 -80.055023 37.989746 -80.000717 38.038498000000004 -79.966713 38.06724199999999 -79.957733 38.10318799999999 -79.928513 38.121185 -79.935547 38.16248300000001 -79.910561 38.17914200000001 -79.916382 38.250156000000004 -79.831375 38.268542999999994 -79.793846 38.28499600000001 -79.786736 38.29874799999999 -79.803001 38.31420499999999 -79.800552 38.35387 -79.764229 38.351719 -79.733055 38.394566 -79.720261 38.43011899999999 -79.684319 38.500237 -79.692879 38.52065999999999 -79.66584 38.55006 -79.669655 38.592239000000006 -79.642632 38.553687999999994 -79.536743 38.46202500000001 -79.48658 38.41251 -79.317238 38.437183000000005 -79.272598 38.480372999999986 -79.231903 38.65812700000001 -79.12767 38.66365099999999 -79.121307 38.659088 -79.088791 38.707153000000005 -79.087479 38.76194000000001 -79.056801 38.79051999999999 -79.055046 38.799847 -79.033989 38.84664900000001 -78.987701 38.76329000000001 -78.866814 38.83363299999999 -78.816116 38.88010800000001 -78.793312 38.911381000000006 -78.749512 38.92917299999999 -78.737991 38.93021400000001 -78.724403 38.90488099999999 -78.719246 38.92157399999999 -78.680489 38.95044300000001 -78.647232 38.979603 -78.631111 38.967197 -78.598961 39.01382799999999 -78.553474 39.02338 -78.549469 39.035037999999986 -78.564445 39.05702600000001 -78.536919 39.09357800000001 -78.501869 39.111839 -78.485519 39.118931 -78.44825 39.14852099999999 -78.43084 39.17049 -78.402634 39.19752500000001 -78.424339 39.21204 -78.42334 39.244850000000014 -78.399399 39.257439000000005 -78.413818 39.341358000000014 -78.341118 39.35085699999999 -78.3442 39.36158800000001 -78.365746 39.38073 -78.350502 39.456902000000014 -78.347816 39.42336700000001 -78.277153 39.39101400000001 -78.229782 39.265536999999995 -78.033607 39.13207600000001 -77.830963 39.14162099999999 -77.820328 39.19650300000001 -77.805733 39.24644900000001 -77.768517 39.28454199999999 -77.759743 39.31769600000001 -77.727753 39.31868 -77.679588 39.29971699999999 -77.616524 39.298393000000004 -77.568962 39.268939999999986 -77.542191 39.249911999999995 -77.494064 39.22905700000001 -77.464958 39.218632000000014 -77.461998 39.17693299999999 -77.478638 39.157444 -77.516617 39.116653000000014 -77.513046 39.103958000000006 -77.479248 39.080837 -77.459694 39.066776000000004 -77.433037 39.068512 -77.346519 39.062588000000005 -77.3246 39.02757299999999 -77.255989 38.97587999999999 -77.243729 38.96477899999999 -77.152046 38.93206000000001 -77.122627 38.91560000000001 -77.078949 38.886101 -77.067886 38.86243099999999 -77.039078 38.838413 -77.040405 38.829364999999996 -77.045189 38.81391500000001 -77.035248 38.78811999999999 -77.045448 38.71878100000001 -77.046471 38.71202099999999 -77.057121 38.71527900000001 -77.081879 38.703982999999994 -77.093147 38.67779899999999 -77.125114 38.64812499999999 -77.12999 38.62270000000001 -77.197258 38.66076699999999 -77.194748 38.650723 -77.227592 38.50191100000001 -77.303619 38.436825 -77.338486 38.362671000000006 -77.289482 38.34398300000001 -77.321823 38.33137099999999 -77.2407 38.375350999999995 -77.054535 38.280272999999994 -76.999359 38.202473 -76.936462 38.12022400000001 -76.595604 38.074112000000014 -76.549034 38.02533 -76.558044 38.00317000000001 -76.573692 38.012744999999995 -76.524544 37.956951000000004 -76.367744 37.890029999999996 -76.259201 37.850178 -76.251923 37.798812999999996 -76.324539 37.719111999999996 -76.309944 37.70013 -76.357002 37.677814 -76.323059 37.622924999999995 -76.344872 37.656384 -76.507088 37.770115000000004 -76.58046 37.796349000000006 -76.631775 37.916675999999995 -76.771851 37.919506 -76.818504 37.798480999999995 -76.732353 37.774754 -76.681732 37.641907 -76.569496 37.551201000000006 -76.314644 37.52515 -76.34864 37.55257400000001 -76.512856 37.515202 -76.434181 37.515755 -76.355667 37.390190000000004 -76.254593 37.330321999999995 -76.275192 37.334571999999994 -76.300972 37.393547 -76.33902 37.457966 -76.446869 37.418892 -76.463936 37.412136000000004 -76.417084 37.373028000000005 -76.403755 37.377491000000006 -76.455551 37.293426999999994 -76.392738 37.255432 -76.461136 37.412200999999996 -76.653488 37.418491 -76.704681 37.371646999999996 -76.669983 37.291298 -76.595039 37.207297999999994 -76.424667 37.152393000000004 -76.412994 37.173030999999995 -76.396873 37.146427 -76.363785 37.177009999999996 -76.337318 37.122097 -76.285675 37.107708 -76.395691 37.074344999999994 -76.278931 37.020489 -76.293343 36.990414 -76.384552 36.96526 -76.426117 37.067642000000006 -76.53112 37.088367000000005 -76.515266 37.117771000000005 -76.564491 37.080173 -76.568443 37.13227500000001 -76.624916 37.178577000000004 -76.610031 37.225837999999996 -76.648094 37.232521000000006 -76.697151 37.193389999999994 -76.746101 37.240387 -76.795929 37.2439 -76.85717 37.322945000000004 -76.875488 37.259426000000005 -76.878426 37.23661 -76.94149 37.201054 -76.900864 37.207302 -76.797394 37.15066899999999 -76.72921 37.197987 -76.685966 37.147712999999996 -76.671539 37.054134000000005 -76.665642 37.024494000000004 -76.577827 36.994843 -76.613373 37.006195000000005 -76.555046 36.961723000000006 -76.48951 36.912186000000005 -76.517174 36.91908599999999 -76.482178 36.895568999999995 -76.486618 36.841801000000004 -76.560516 36.795615999999995 -76.561852 36.869473 -76.507195 36.901413000000005 -76.410805 36.913342 -76.348145 36.860187999999994 -76.341919 36.835926 -76.394089 36.826138 -76.401184 36.845844 -76.317436 36.828342000000006 -76.292702 36.942001000000005 -76.307617 36.962734 -76.284225 36.935069999999996 -76.202332 36.904442 -76.191666 36.931618 -76.118431 36.923134000000005 -75.995361 36.555874 -75.878166 36.556197999999995 -75.901985 36.599022000000005 -75.892853 36.721565 -75.950798 36.556652 -75.998665 36.556717000000006 -76.027168 36.603592000000006 -76.061859 36.55695299999999 -76.045959 36.557163 -76.127396 36.556056999999996 -76.330254 36.555813 -76.497559 36.555251999999996 -76.563583 36.554157000000004 -76.921631 36.554146 -76.924133 36.556286 -77.177353 36.553917 -77.320053 36.553439999999995 -77.763931 36.552944 -77.898857 36.552475 -78.051666 36.545531999999994 -78.321251 36.541481000000005 -78.458809 36.546074000000004 -78.737389 36.543533 -78.7967 36.546059 -79.14432538.02758800000001 -75.270721 38.028526 -75.242584 37.962875 -75.298859 37.888783000000004 -75.33918 37.875652 -75.386078 37.90191299999999 -75.34481 37.900974000000005 -75.378571 37.918797 -75.346687 38.02758800000001 -75.27072137.552181000000004 -75.867371 37.561554 -75.941101 37.58588399999999 -75.929558 37.580344999999994 -75.887276 37.592175 -75.905991 37.711792 -75.799721 37.789833 -75.7826 37.824516 -75.696083 37.858124000000004 -75.686707 37.930569000000006 -75.733978 37.941181 -75.658447 37.970130999999995 -75.648216 37.996418000000006 -75.626434 38.01671200000001 -75.37278 37.697131999999996 -75.61792 37.677193 -75.589905 37.589512 -75.699493 37.559753 -75.650269 37.558182 -75.727524 37.510540000000006 -75.7565 37.493472999999994 -75.705269 37.469044 -75.813026 37.426204999999996 -75.820488 37.408108 -75.790771 37.418148 -75.826675 37.36739300000001 -75.89711 37.14250199999999 -75.931389 37.126232 -75.970985 37.308780999999996 -76.018471 37.484641999999994 -75.934448 37.479350999999994 -75.965446 37.521832 -75.954704 37.556889 -75.930756 37.552181000000004 -75.867371Virginia51S AtlVA102537.3284263.826180651.01627615.02289067.03030948.03149703.02343200.02278600.0499251.0125792.03025109.0141926.0777181.0420070.00.490.51898089.035.989586 -95.76720440.609748999999994 -89.10496536.953869 -89.104965 36.86644 -89.129585 36.843422000000004 -89.166496 36.829384000000005 -89.173462 36.80441999999999 -89.164375 36.792412 -89.125839 36.768032000000005 -89.125473 36.759040999999996 -89.151367 36.760925 -89.1772 36.72742100000001 -89.196297 36.713367000000005 -89.197495 36.67157 -89.167831 36.653003999999996 -89.177094 36.631298 -89.200119 36.581894000000005 -89.21006 36.569266999999996 -89.241615 36.575249 -89.283424 36.622017 -89.322273 36.628849 -89.342323 36.625702000000004 -89.363548 36.616187999999994 -89.373878 36.510563000000005 -89.418137 36.502617 -89.414711 36.456379 -89.448517 36.445953 -89.470833 36.465462 -89.491989 36.498547 -89.475822 36.504695999999996 -89.481682 36.525555 -89.471375 36.547775 -89.481674 36.559116 -89.493126 36.564555999999996 -89.530365 36.557743 -89.556137 36.541409 -89.568153 36.518738 -89.566986 36.498108 -89.533195 36.47180899999999 -89.516022 36.440960000000004 -89.545181 36.401058000000006 -89.520004 36.35593 -89.519333 36.345721999999995 -89.544556 36.354752000000005 -89.60569 36.334782000000004 -89.622795 36.308037 -89.606766 36.280865000000006 -89.542236 36.264538 -89.535378 36.257278 -89.541649 36.240898 -89.61808 36.25489399999999 -89.670586 36.25213599999999 -89.694542 36.240795000000006 -89.695656 36.220867 -89.676788 36.18374300000001 -89.618561 36.15201999999999 -89.589455 36.129791 -89.589424 36.099316 -89.667389 36.08297 -89.678169 36.025795 -89.688843 35.999877999999995 -89.721756 35.996838 -89.963203 35.991158 -90.283455 35.989586 -90.37896 36.091656 -90.315239 36.115905999999995 -90.284752 36.118763 -90.263702 36.137089 -90.23484 36.161148 -90.232224 36.172565000000006 -90.219223 36.196940999999995 -90.161308 36.21207 -90.131218 36.257996000000006 -90.109917 36.272273999999996 -90.066093 36.300472 -90.049751 36.325333 -90.067635 36.362606 -90.050201 36.382553 -90.052063 36.39738800000001 -90.080177 36.404915 -90.116829 36.422565000000006 -90.123833 36.453896 -90.117226 36.45741700000001 -90.137276 36.491814000000005 -90.150162 36.492751999999996 -90.224373 36.490962999999994 -90.581619 36.489204 -90.804314 36.487953000000005 -91.133827 36.491039 -91.411659 36.490376 -91.45285 36.490955 -91.688416 36.491371 -92.127487 36.491596 -92.146164 36.490855999999994 -92.522888 36.489918 -92.777466 36.489819 -92.852104 36.490616 -93.297142 36.490196 -93.328163 36.489891 -93.59626 36.489716 -93.857323 36.49095199999999 -94.080849 36.489338000000004 -94.617035 36.670471000000006 -94.62085 36.763538 -94.62146 36.996983 -94.620155 37.060085 -94.620438 37.327679 -94.618744 37.360714 -94.61853 37.65033 -94.618759 37.679824999999994 -94.619057 38.03035399999999 -94.616501 38.05575200000001 -94.617096 38.39201399999999 -94.61882 38.47145800000001 -94.618484 38.737213 -94.612915 38.83710099999999 -94.612236 39.04466199999999 -94.609047 39.112797 -94.607903 39.141223999999994 -94.60099 39.151646 -94.612419 39.158424 -94.646172 39.17491899999999 -94.675278 39.17125300000001 -94.730293 39.19687999999999 -94.78981 39.21100200000001 -94.82058 39.261765 -94.833237 39.286045 -94.880867 39.32302899999999 -94.90744 39.34012200000001 -94.911102 39.380641999999995 -94.898041 39.381268000000006 -94.925507 39.411449000000005 -94.958252 39.43946500000001 -94.985962 39.46294399999999 -95.040268 39.485332 -95.047356 39.53285199999999 -95.101791 39.56069600000001 -95.108742 39.586781 -95.053368 39.62569400000001 -95.055771 39.66191900000001 -95.028046 39.68499399999999 -94.978325 39.732044 -94.96154 39.73650699999999 -94.952896 39.72703200000001 -94.930611 39.72676100000001 -94.905434 39.73931099999999 -94.877617 39.75412399999999 -94.870941 39.760684999999995 -94.876823 39.757847 -94.921555 39.77543299999999 -94.934868 39.78278 -94.933022 39.793780999999996 -94.899078 39.817406000000005 -94.88826 39.828339 -94.898079 39.83313799999999 -94.92363 39.849391999999995 -94.936264 39.89608799999999 -94.937996 39.90082899999999 -94.964775 39.896984 -95.021523 39.877849999999995 -95.033257 39.86654300000001 -95.062996 39.869868999999994 -95.100471 39.90805800000001 -95.150299 39.91018299999999 -95.19371 39.93817899999999 -95.207344 39.94210799999999 -95.240707 39.999409000000014 -95.308441 40.02497500000001 -95.34481 40.028751 -95.370987 40.043750999999986 -95.390274 40.048111000000006 -95.413506 40.08037899999999 -95.403526 40.09536399999999 -95.384285 40.11541700000001 -95.392555 40.131744 -95.422218 40.17399599999999 -95.460693 40.213257 -95.466377 40.226856 -95.476562 40.266215999999986 -95.546875 40.309776 -95.595268 40.30910900000001 -95.646561 40.32234600000001 -95.645287 40.33141699999999 -95.617668 40.346497 -95.615936 40.358799000000005 -95.633919 40.396389 -95.636551 40.48533599999999 -95.695091 40.512203 -95.6847 40.53033099999999 -95.657791 40.558727000000005 -95.662674 40.565833999999995 -95.675423 40.56116900000001 -95.687141 40.52412799999999 -95.691795 40.53237200000001 -95.736763 40.549705999999986 -95.763138 40.589045999999996 -95.767204 40.58433500000001 -95.382294 40.581897999999995 -95.217171 40.57722899999999 -94.920364 40.57575600000001 -94.639633 40.57421500000001 -94.484993 40.57097200000001 -94.238159 40.57402400000001 -94.01783 40.57844499999999 -93.786079 40.58080699999999 -93.562691 40.58048199999999 -93.370056 40.58433500000001 -93.100731 40.58964499999999 -92.717621 40.59143800000001 -92.64624 40.599548 -92.361328 40.60006000000001 -92.192993 40.60823400000001 -91.946198 40.609748999999994 -91.741547 40.593399000000005 -91.716812 40.581165 -91.689796 40.55163999999999 -91.691917 40.53286399999999 -91.622375 40.50483299999999 -91.616699 40.484477999999996 -91.585869 40.463718 -91.579224 40.455399 -91.533051 40.44124600000001 -91.538689 40.43504300000001 -91.529449 40.41012599999999 -91.527534 40.40511699999999 -91.500221 40.390761999999995 -91.490158 40.39096799999999 -91.476883 40.371902000000006 -91.448593 40.309624000000014 -91.486694 40.25137699999999 -91.498932 40.200458999999995 -91.506546 40.134544000000005 -91.516129 40.066711 -91.504005 40.005753 -91.487289 39.94606400000001 -91.447243 39.92183700000001 -91.430389 39.90182899999999 -91.434052 39.885242000000005 -91.450989 39.86304899999999 -91.449188 39.80377200000001 -91.381714 39.76127199999999 -91.373421 39.724639999999994 -91.367088 39.68591699999999 -91.317665 39.600021 -91.203247 39.552593 -91.156189 39.52892700000001 -91.093613 39.473984 -91.064384 39.444412 -91.036339 39.40058500000001 -90.947891 39.35045199999999 -90.850494 39.29680300000001 -90.779343 39.24780999999999 -90.738083 39.22474700000001 -90.732338 39.195873000000006 -90.718193 39.14421100000001 -90.716736 39.09370000000001 -90.690399 39.058178 -90.707588 39.037791999999996 -90.70607 38.93525299999999 -90.668877 38.880795000000006 -90.627213 38.87132600000001 -90.570328 38.89160899999999 -90.530426 38.959179000000006 -90.469841 38.96233000000001 -90.413071 38.92490799999999 -90.31974 38.92471699999999 -90.278931 38.91450900000001 -90.243927 38.85303099999999 -90.132812 38.830467 -90.113121 38.80051 -90.121727 38.785484 -90.135178 38.773098000000005 -90.163399 38.72396499999999 -90.196571 38.70036300000001 -90.20224 38.658772 -90.183578 38.61027100000001 -90.183708 38.562805 -90.240944 38.532768000000004 -90.26123 38.518688 -90.265785 38.427357 -90.301842 38.39084600000001 -90.339607 38.36533 -90.358688 38.32355899999999 -90.369347 38.23429899999999 -90.364769 38.18871300000001 -90.336716 38.16681700000001 -90.289635 38.122169000000014 -90.254059 38.08890500000001 -90.207527 38.05395100000001 -90.134712 38.032272000000006 -90.119339 37.993206 -90.041924 37.969318 -90.010811 37.963634 -89.958229 37.911884 -89.978912 37.878044 -89.937874 37.875904000000006 -89.900551 37.891875999999996 -89.866814 37.905486999999994 -89.861046 37.905063999999996 -89.851715 37.840992 -89.728447 37.804794 -89.691055 37.78397 -89.675858 37.745453 -89.666458 37.706103999999996 -89.581436 37.694798000000006 -89.521523 37.67984 -89.513374 37.650375 -89.51918 37.615928999999994 -89.513367 37.571957 -89.524971 37.491726 -89.494781 37.453186 -89.453621 37.411018 -89.427574 37.355717 -89.435738 37.339409 -89.468742 37.329441 -89.50058 37.304962 -89.513885 37.276402000000004 -89.513885 37.256001 -89.489594 37.253731 -89.465309 37.224266 -89.468216 37.165318 -89.440521 37.137203 -89.423798 37.09908299999999 -89.37999 37.049212999999995 -89.38295 37.009682 -89.310982 36.999207 -89.282768 37.008686 -89.262001 37.027733 -89.264244 37.060908999999995 -89.3097 37.085384000000005 -89.303291 37.091244 -89.284233 37.087124 -89.264053 37.041732999999994 -89.237679 37.02897299999999 -89.210052 36.986771000000005 -89.193512 36.988113 -89.12986 36.977451 -89.107147 36.953869 -89.104965Missouri29W N CenMO178445.9512100.1155117073.01368334.01961206.02464315.02652758.01861192.01816079.0312042.047129.02367395.0155388.0659782.0386746.00.4820.518864999.031.335534999999993 -114.82096937.003929 -109.04500633.027668000000006 -114.519844 33.036743 -114.558304 33.026962 -114.609138 33.03352700000001 -114.633179 33.04437299999999 -114.644371 33.038883 -114.663162 33.095344999999995 -114.710564 33.122337 -114.708672 33.167213000000004 -114.67733 33.22456 -114.67926 33.239222999999996 -114.68692 33.267982 -114.676903 33.305676000000005 -114.734634 33.352385999999996 -114.702812 33.41103 -114.724144 33.41908599999999 -114.644302 33.439396 -114.629784 33.468571 -114.6203 33.486098999999996 -114.597298 33.509418 -114.586273 33.560047 -114.528633 33.580482 -114.539459 33.622112 -114.526382 33.665482 -114.524475 33.68271300000001 -114.535645 33.708347 -114.494888 33.743179 -114.509499 33.771694 -114.503769 33.826012000000006 -114.520332 33.84194599999999 -114.510933 33.86290700000001 -114.520172 33.925017999999994 -114.497398 33.95239599999999 -114.524841 33.965046 -114.517418 34.029827 -114.428192 34.078316 -114.423241 34.102638 -114.409378 34.141281000000006 -114.322014 34.171215000000004 -114.284584 34.186206999999996 -114.234993 34.266964 -114.149132 34.272605999999996 -114.124451 34.314533 -114.133347 34.336433 -114.152634 34.36519199999999 -114.181297 34.40547599999999 -114.257057 34.41205600000001 -114.282608 34.43574099999999 -114.302078 34.454860999999994 -114.331848 34.459666999999996 -114.375717 34.477074 -114.383072 34.536552 -114.376038 34.583714 -114.408951 34.598952999999995 -114.43351 34.610885999999994 -114.421478 34.709866000000005 -114.464844 34.744750999999994 -114.497009 34.74890499999999 -114.524757 34.759952999999996 -114.541245 34.831856 -114.56942 34.87553 -114.626465 34.919498000000004 -114.629677 34.943607 -114.620209 34.99764999999999 -114.631477 34.998913 -114.62027 35.041861999999995 -114.63298 35.076057000000006 -114.594833 35.118656 -114.635109 35.133906999999994 -114.625641 35.132560999999995 -114.581818 35.140068 -114.571457 35.174347 -114.560242 35.220184 -114.558784 35.304771 -114.58709 35.358383 -114.588783 35.450768 -114.644592 35.515761999999995 -114.67141 35.546645999999996 -114.648987 35.584843000000006 -114.652328 35.61135899999999 -114.639061 35.646595000000005 -114.653259 35.656409999999994 -114.667679 35.693111 -114.664284 35.732609 -114.688011 35.764717000000005 -114.681931 35.847458 -114.689056 35.870975 -114.661652 35.880489 -114.660789 35.911629000000005 -114.698463 35.987667 -114.735397 36.036777 -114.716858 36.058773 -114.728149 36.085983 -114.727333 36.105202000000006 -114.711945 36.141987 -114.620796 36.138355000000004 -114.598122 36.155108999999996 -114.529762 36.124729 -114.465805 36.121071 -114.443138 36.151009 -114.379997 36.137496999999996 -114.34343 36.111453999999995 -114.315292 36.087124 -114.303055 36.062248 -114.306786 36.018345 -114.232674 36.017269 -114.205971 36.041743999999994 -114.128227 36.121105 -114.106979 36.193993000000006 -114.044312 36.216038 -114.036598 36.84187300000001 -114.042915 36.996562999999995 -114.043137 36.99624300000001 -112.899216 36.998008999999996 -112.541763 36.995506000000006 -112.236511 37.001720000000006 -111.355453 37.002491000000006 -110.739372 37.003929 -110.483398 36.991749 -110.451546 36.992065 -109.996399 36.996643000000006 -109.047821 35.996655000000004 -109.047195 34.954612999999995 -109.045998 34.59174 -109.048012 33.783249 -109.049721 33.205101 -109.049904 32.77948000000001 -109.050728 32.441967000000005 -109.048882 31.343348000000006 -109.045006 31.337559 -110.451942 31.335534999999993 -111.07132 31.431438 -111.368866 32.04356 -113.328377 32.487114000000005 -114.820969 32.615993 -114.808601 32.72081 -114.72126 32.734966 -114.711906 32.741378999999995 -114.693253 32.726237999999995 -114.603157 32.735839999999996 -114.602737 32.737392 -114.571175 32.748783 -114.571426 32.74889 -114.559967 32.760707999999994 -114.560799 32.760704000000004 -114.542221 32.771187 -114.542404 32.771366 -114.529312 32.788002000000006 -114.534294 32.809867999999994 -114.525436 32.845378999999994 -114.460655 32.935867 -114.475662 32.977749 -114.467606 33.027668000000006 -114.519844Arizona04MtnAZ294333.462942.7723665228.0940106.01368843.01810691.01854537.01358263.01178320.0239083.032856.01603896.0123902.0455896.0185109.00.4940.506468178.033.621021 -102.99722337.001408 -94.42833734.929050000000004 -94.439102 34.735504000000006 -94.44574 34.508326999999994 -94.452408 34.19665500000001 -94.461479 33.939198000000005 -94.468376 33.631966000000006 -94.476486 33.623047 -94.50061 33.63081 -94.510559 33.621021 -94.525055 33.643009000000006 -94.51799 33.632694 -94.550194 33.635536 -94.562149 33.642830000000004 -94.562195 33.648247 -94.541931 33.661621 -94.545418 33.652157 -94.576462 33.655449000000004 -94.588387 33.662132 -94.585159 33.66301300000001 -94.565208 33.671913 -94.560722 33.670471000000006 -94.578506 33.678982000000005 -94.585106 33.665606999999994 -94.600945 33.683899 -94.631737 33.67010500000001 -94.638763 33.663737999999995 -94.658539 33.666061 -94.669426 33.671459 -94.667953 33.67765 -94.644325 33.692291 -94.655479 33.696537000000006 -94.668457 33.69028900000001 -94.690987 33.701267 -94.741653 33.707770999999994 -94.754478 33.719048 -94.742111 33.716797 -94.762718 33.736706 -94.749771 33.733665 -94.783157 33.742267999999996 -94.782028 33.752842 -94.764175 33.75326200000001 -94.783508 33.739582 -94.803223 33.749404999999996 -94.81916 33.749320999999995 -94.85788 33.774963 -94.881638 33.789597 -94.913879 33.803478 -94.908546 33.816196000000005 -94.918236 33.81580700000001 -94.940399 33.840824 -94.939888 33.848076000000006 -94.959908 33.866215 -94.968704 33.856182000000004 -94.989281 33.869946 -95.012772 33.866451 -95.037361 33.884445 -95.042862 33.896694 -95.063141 33.917648 -95.063477 33.888462000000004 -95.083603 33.89691500000001 -95.089714 33.918453 -95.082268 33.921738000000005 -95.09536 33.91228099999999 -95.119225 33.917145000000005 -95.126678 33.940867999999995 -95.127968 33.943546 -95.148315 33.964862999999994 -95.234039 33.936443 -95.251289 33.905022 -95.250992 33.897800000000004 -95.263618 33.91793800000001 -95.277351 33.886902000000006 -95.28643 33.886623 -95.301956 33.897114 -95.336227 33.870918 -95.33004 33.865753 -95.451607 33.886433 -95.468124 33.881718000000006 -95.498856 33.897735999999995 -95.512886 33.88574199999999 -95.544037 33.893158 -95.547493 33.897816000000006 -95.526733 33.906643 -95.519577 33.904033999999996 -95.546318 33.93607299999999 -95.562775 33.944553 -95.606071 33.936690999999996 -95.61483 33.920238 -95.612984 33.92010500000001 -95.633492 33.894825 -95.699707 33.903397 -95.746864 33.89344 -95.760696 33.87900500000001 -95.764252 33.85140199999999 -95.768517 33.864673999999994 -95.795479 33.843025 -95.825974 33.841038 -95.846558 33.89053 -95.933075 33.889973 -95.943069 33.86503999999999 -95.958763 33.857952 -95.977394 33.875378 -95.994209 33.87339 -96.002617 33.856978999999995 -96.001793 33.844207999999995 -96.014069 33.856021999999996 -96.026749 33.841278 -96.047974 33.844578 -96.091522 33.829257999999996 -96.109444 33.835589999999996 -96.148964 33.828982999999994 -96.169205 33.815792 -96.183128 33.808434000000005 -96.180725 33.823944 -96.154518 33.820319999999995 -96.141418 33.798229000000006 -96.161316 33.769356 -96.168816 33.758583 -96.187027 33.756691000000004 -96.212547 33.773388 -96.278076 33.761932 -96.28968 33.71405 -96.300789 33.701801 -96.316277 33.705528 -96.347588 33.74039500000001 -96.370819 33.788326 -96.419464 33.778130000000004 -96.487373 33.78809 -96.500748 33.815685 -96.510574 33.825419999999994 -96.562134 33.842957 -96.601196 33.862899999999996 -96.614166 33.896145000000004 -96.584488 33.913544 -96.666237 33.904324 -96.677704 33.847904 -96.693382 33.833870000000005 -96.711678 33.831738 -96.748825 33.869949000000005 -96.797592 33.871769 -96.814117 33.858031999999994 -96.844009 33.861678999999995 -96.861015 33.88400300000001 -96.878937 33.92459100000001 -96.882851 33.950027000000006 -96.898453 33.961772999999994 -96.929565 33.947849000000005 -96.936203 33.937321 -96.968185 33.944202000000004 -96.987862 33.876423 -96.987709 33.85051300000001 -97.005852 33.840560999999994 -97.025597 33.856728000000004 -97.0709 33.851101 -97.082176 33.837811 -97.078247 33.823448 -97.050026 33.807570999999996 -97.087669 33.742413 -97.083466 33.731669999999994 -97.0905 33.725933 -97.115562 33.728668 -97.152473 33.752769 -97.189163 33.819649 -97.208321 33.836158999999995 -97.195015 33.84779399999999 -97.168594 33.863147999999995 -97.164169 33.899204 -97.187767 33.905688999999995 -97.211334 33.894238 -97.246063 33.87297100000001 -97.250687 33.858729999999994 -97.263908 33.872574 -97.272278 33.89584000000001 -97.314087 33.870391999999995 -97.314957 33.861915999999994 -97.341805 33.831024 -97.363319 33.820708999999994 -97.410118 33.836212 -97.452736 33.890429999999995 -97.457062 33.902382 -97.462761 33.907707 -97.477531 33.916771 -97.518204 33.903904 -97.554588 33.902530999999996 -97.575668 33.917885 -97.592354 33.969437 -97.600182 33.988613 -97.671066 33.971546000000004 -97.704262 33.939293000000006 -97.729019 33.932097999999996 -97.756363 33.890457 -97.790207 33.857071000000005 -97.852547 33.855114 -97.869751 33.874022999999994 -97.909065 33.883480000000006 -97.954735 33.90250399999999 -97.976379 33.912052 -97.976128 33.932518 -97.950684 33.94865 -97.962997 33.959751 -97.947754 33.971160999999995 -97.950226 34.00128599999999 -97.982681 33.98698400000001 -98.023491 33.989799000000005 -98.055557 34.005314 -98.086205 34.06982000000001 -98.110687 34.134556 -98.094124 34.148987000000005 -98.114868 34.138431999999995 -98.136864 34.115368000000004 -98.172844 34.122871 -98.277 34.13942 -98.320488 34.142120000000006 -98.350403 34.11578 -98.384254 34.087231 -98.390953 34.082454999999996 -98.407135 34.065830000000005 -98.421341 34.05437499999999 -98.448189 34.066413999999995 -98.499519 34.105335 -98.557579 34.14193 -98.576332 34.151398 -98.607246 34.158435999999995 -98.625992 34.147037999999995 -98.66172 34.149998 -98.682213 34.130714 -98.705292 34.131962 -98.778534 34.145934999999994 -98.811066 34.16082 -98.891342 34.194565 -98.952507 34.209496 -98.996193 34.198921 -99.035217 34.208359 -99.07843 34.201469 -99.127945 34.21272999999999 -99.176155 34.223736 -99.190483 34.255646 -99.204597 34.305122 -99.196304 34.331993 -99.20549 34.368213999999995 -99.254105 34.398285 -99.267174 34.412707999999995 -99.323296 34.450194999999994 -99.364204 34.428993000000006 -99.392792 34.396744 -99.394157 34.369106 -99.409958 34.364704 -99.438377 34.383522 -99.479439 34.404067999999995 -99.502136 34.41518000000001 -99.553864 34.408913 -99.57785 34.384857 -99.58522 34.368556999999996 -99.601448 34.377444999999994 -99.684906 34.443993000000006 -99.777687 34.501778 -99.829933 34.518626999999995 -99.860573 34.548176 -99.8806 34.579109 -99.931908 34.579571 -99.94474 34.561863 -99.972099 34.562321 -99.996094 34.747185 -99.998878 35.030998 -99.996071 35.182182 -99.997185 35.424572 -99.994354 35.618809 -100.0 35.883793 -99.997726 36.057548999999995 -99.997154 36.492519 -100.001144 36.493877 -100.006866 36.48944899999999 -100.549416 36.489609 -100.956909 36.488022 -101.089668 36.492003999999994 -101.620316 36.492954 -102.03421 36.490207999999996 -102.165222 36.492344 -102.996918 36.998504999999994 -102.997223 36.988972000000004 -102.036758 36.988853000000006 -102.024071 36.996666000000005 -101.553238 36.99744 -101.071159 36.996635 -100.950142 36.997806999999995 -100.633812 36.997623000000004 -100.088158 36.995388000000005 -99.998848 36.995434 -99.544243 36.99453 -99.43708 36.998042999999996 -98.999138 36.99834799999999 -98.539864 36.999035000000006 -98.346794 36.998645999999994 -98.104187 36.998543 -97.803917 36.996441000000004 -97.46508 36.999779000000004 -97.137375 37.000134 -96.74839 37.000538000000006 -96.518898 36.998264000000006 -96.005791 37.000011 -95.957703 36.998035 -95.785492 37.000938000000005 -95.525764 37.000538000000006 -95.406372 37.001408 -95.071693 37.00071 -95.032509 36.996983 -94.620155 36.763538 -94.62146 36.670471000000006 -94.62085 36.489338000000004 -94.617035 36.478714 -94.607231 36.164444 -94.552895 36.106753999999995 -94.542198 35.760227 -94.485718 35.641003 -94.468269 35.400454999999994 -94.428337 34.929050000000004 -94.439102Oklahoma40W S CenOK177877.5363170.9983145585.0855321.01206135.01530819.01614766.01146497.01078894.0190902.07817.01369138.0100931.0405802.0205601.00.4870.513528722.033.881992 -84.32385336.589648999999994 -75.45697834.989067000000006 -83.988548 34.988224 -84.11824 34.98900999999999 -84.323853 35.210544999999996 -84.291039 35.261604000000005 -84.225945 35.24099 -84.179726 35.245552 -84.101646 35.272575 -84.042778 35.292522000000005 -84.030861 35.32529100000001 -84.029205 35.37286 -84.00631 35.407623 -84.01265 35.45546 -83.954704 35.476479 -83.910011 35.510586 -83.881226 35.519062000000005 -83.8302 35.552605 -83.775879 35.564972 -83.672874 35.571738999999994 -83.613861 35.555176 -83.561035 35.559551 -83.505798 35.597279 -83.45829 35.625217000000006 -83.387093 35.653259000000006 -83.343025 35.65632600000001 -83.298416 35.691010000000006 -83.259125 35.700706 -83.253304 35.718216 -83.243851 35.728886 -83.185349 35.76268399999999 -83.143661 35.763808999999995 -83.118187 35.782578 -83.059959 35.773990999999995 -82.987007 35.791850999999994 -82.962753 35.872215 -82.906822 35.927868000000004 -82.91407 35.948359999999994 -82.895973 35.94742599999999 -82.85627 35.920872 -82.80867 35.956573000000006 -82.776443 35.987503000000004 -82.773598 35.999545999999995 -82.763229 36.051722999999996 -82.64389 36.054339999999996 -82.628044 36.042987999999994 -82.604401 36.022448999999995 -82.592232 36.003547999999995 -82.605804 35.963299000000006 -82.599304 35.956108 -82.554146 35.972542000000004 -82.506935 35.993176000000005 -82.475197 36.075317 -82.408424 36.098698 -82.373856 36.122150000000005 -82.311928 36.120377000000005 -82.262306 36.147014999999996 -82.207733 36.139622 -82.154053 36.096256 -82.11808 36.100139999999996 -82.077759 36.129711 -82.020454 36.263321000000005 -81.933113 36.290752 -81.911156 36.334655999999995 -81.830574 36.329342 -81.730492 36.333725 -81.709457 36.361858 -81.740379 36.391785 -81.741074 36.471779 -81.69828 36.519341 -81.702797 36.589648999999994 -81.669998 36.57286499999999 -81.345299 36.565212 -80.903442 36.563438000000005 -80.838158 36.557297000000005 -80.611053 36.551044000000005 -80.43531 36.547134 -80.048096 36.545024999999995 -80.024055 36.547889999999995 -79.717445 36.547657 -79.5103 36.54978199999999 -79.217064 36.546059 -79.144325 36.543533 -78.7967 36.546074000000004 -78.737389 36.541481000000005 -78.458809 36.545531999999994 -78.321251 36.552475 -78.051666 36.552944 -77.898857 36.553439999999995 -77.763931 36.553917 -77.320053 36.556286 -77.177353 36.554146 -76.924133 36.554157000000004 -76.921631 36.555251999999996 -76.563583 36.555813 -76.497559 36.556056999999996 -76.330254 36.557163 -76.127396 36.55695299999999 -76.045959 36.514374000000004 -76.033211 36.503567000000004 -76.091064 36.43621400000001 -75.976074 36.415119000000004 -75.969765 36.418915 -76.00161 36.365471 -75.951256 36.423244 -75.928123 36.350948 -75.924591 36.112815999999995 -75.800056 36.072818999999996 -75.798851 36.105667 -75.855164 36.244800999999995 -75.913765 36.25945299999999 -75.957512 36.294337999999996 -75.941933 36.31959500000001 -76.008972 36.193771 -75.957184 36.169726999999995 -75.981339 36.315239000000005 -76.183167 36.296608000000006 -76.218903 36.174419 -76.112709 36.14769 -76.141937 36.163360999999995 -76.234978 36.21423 -76.298927 36.110371 -76.275505 36.079792 -76.48053 36.058605 -76.420425 36.00716799999999 -76.52301 36.010132 -76.594002 36.065708 -76.649017 36.037116999999995 -76.633209 36.04961 -76.690155 36.156822000000005 -76.726509 36.294518 -76.688736 36.358329999999995 -76.776642 36.392444999999995 -76.92408 36.315166000000005 -76.741348 36.266132 -76.707497 36.233917000000005 -76.745064 36.144592 -76.760674 35.99297 -76.693764 35.936626000000004 -76.741127 35.94154399999999 -76.69722 35.977467000000004 -76.40947 35.932343 -76.371483 35.97687500000001 -76.213768 35.962914 -76.089638 35.920424999999994 -76.026047 35.75680199999999 -76.075912 35.683848999999995 -76.043068 35.696842000000004 -76.167305 35.663639 -76.104744 35.669094 -76.02121 35.892708 -75.987854 35.923519 -75.818054 35.869339 -75.748962 35.665172999999996 -75.72937 35.578686000000005 -75.779053 35.631268000000006 -75.891495 35.414604 -76.052979 35.341533999999996 -76.181618 35.416218 -76.498802 35.450199 -76.533752 35.504425 -76.458435 35.550865 -76.446526 35.57764400000001 -76.518944 35.541786 -76.492538 35.520336 -76.638199 35.43789700000001 -76.628769 35.411934 -76.705376 35.550186 -77.103767 35.43650100000001 -76.983185 35.350426 -76.694901 35.272919 -76.614517 35.312079999999995 -76.591209 35.303687999999994 -76.540977 35.248768 -76.507126 35.172520000000006 -76.640091 35.138560999999996 -76.605225 35.064350000000005 -76.624222 35.024086 -76.678009 34.98222 -76.849464 35.027428 -76.94149 35.07003400000001 -76.943245 35.092155000000005 -77.047882 35.087986 -77.104675 35.066036 -77.110588 35.052887 -77.00119 34.93647 -76.913109 34.906334 -76.647049 34.969997000000006 -76.670059 34.974636000000004 -76.529778 35.016659000000004 -76.44503 34.946247 -76.424057 34.943111 -76.364014 34.975956 -76.329407 34.948814 -76.314713 34.785061 -76.469902 34.719753 -76.625313 34.698916999999994 -77.050529 34.764331999999996 -77.148956 34.684914000000006 -77.129395 34.660636999999994 -77.156601 34.457008 -77.538635 34.420936999999995 -77.586761 34.43504299999999 -77.609726 34.412628 -77.602615 34.305046000000004 -77.750526 34.192738000000006 -77.864388 34.06918 -77.894402 34.062034999999995 -77.926758 34.189243000000005 -77.960732 33.992580000000004 -77.958527 33.914291000000006 -78.034805 33.881992 -78.57972 33.948673 -78.655716 34.304573000000005 -79.074501 34.619061 -79.447144 34.63409 -79.455971 34.800663 -79.667503 34.805256 -79.685959 34.807919 -79.919952 34.814762 -80.325279 34.815228000000005 -80.561546 34.816113 -80.800064 34.940639000000004 -80.785652 35.00201800000001 -80.840164 35.059734000000006 -80.894714 35.10124999999999 -80.927795 35.037200999999996 -81.039886 35.066483000000005 -81.065552 35.105408 -81.028442 35.132011000000006 -81.049042 35.151531000000006 -81.049301 35.163757000000004 -81.322823 35.162853 -81.362175 35.182472000000004 -81.765358 35.183116999999996 -81.87059 35.188282 -81.971443 35.193127000000004 -82.210175 35.195007000000004 -82.278328 35.184189 -82.32077 35.192673 -82.350861 35.182948999999994 -82.360123 35.18272399999999 -82.371376 35.208241 -82.38961 35.16955900000001 -82.43792 35.173500000000004 -82.466743 35.154560000000004 -82.524635 35.14949 -82.57003 35.119457 -82.654495 35.121464 -82.68605 35.097801000000004 -82.688034 35.091232000000005 -82.697357 35.085423000000006 -82.771347 35.055369999999996 -82.887695 35.024204 -83.007278 35.000277999999994 -83.106285 34.992023 -83.513008 34.989536 -83.549416 34.989391 -83.937996 34.989067000000006 -83.98854836.556717000000006 -76.027168 36.556652 -75.998665 36.54253 -75.911919 36.47397599999999 -75.924805 36.478016 -75.97728 36.517925000000005 -75.976288 36.556717000000006 -76.02716836.556197999999995 -75.901985 36.555874 -75.878166 36.22925600000001 -75.773155 35.788360999999995 -75.544968 36.049862000000005 -75.702736 36.050323000000006 -75.740868 36.225193000000004 -75.783173 36.556197999999995 -75.90198535.670497999999995 -75.491219 35.768856 -75.533623 35.617397 -75.456978 35.227917000000005 -75.526299 35.189826999999994 -75.74929 35.234989 -75.691566 35.281357 -75.521484 35.564494999999994 -75.475418 35.670497999999995 -75.49121935.069435 -76.017006 35.116184000000004 -75.975693 35.167282 -75.853935 35.192284 -75.763702 35.164021000000005 -75.811539 35.132492 -75.903946 35.069435 -76.002876 35.069435 -76.01700634.58783 -76.544273 34.61066099999999 -76.555145 34.613922 -76.53775 34.697632 -76.484482 34.760684999999995 -76.432297 34.812870000000004 -76.37468 34.87701 -76.287704 34.693282999999994 -76.469261 34.58783 -76.544273North Carolina37S AtlNC126177.63510309.6526628629.01812051.02517024.03214286.03414343.02484061.02527980.0529828.033902.03238414.0163081.0883563.0701142.00.4850.5151013599.034.988682 -90.30535136.67963 -81.65243535.45546 -83.954704 35.407623 -84.01265 35.37286 -84.00631 35.32529100000001 -84.029205 35.292522000000005 -84.030861 35.272575 -84.042778 35.245552 -84.101646 35.24099 -84.179726 35.261604000000005 -84.225945 35.210544999999996 -84.291039 34.98900999999999 -84.323853 34.988682 -84.618752 34.990680999999995 -84.771194 34.992756 -84.800476 34.99260700000001 -84.967911 34.992554 -84.972847 34.989075 -85.267761 34.989902 -85.359985 34.990047000000004 -85.467422 34.990086000000005 -85.608994 34.992301999999995 -85.869591 34.995377000000005 -86.303513 34.995186000000004 -86.313065 34.99699 -86.782372 34.998160999999996 -86.83342 35.00787699999999 -87.207573 35.007262999999995 -87.222748 35.010464 -87.607788 35.015949000000006 -87.986046 35.013458 -88.194923 35.004368 -88.193954 35.00374600000001 -88.351685 35.004954999999995 -88.383102 35.003094000000004 -88.784988 35.00235000000001 -88.812492 35.000145 -89.006134 35.000793 -89.198067 34.999714 -89.3423 35.000641 -89.646477 34.999168 -89.717186 35.000693999999996 -90.305351 35.048458 -90.291809 35.040897 -90.195709 35.077827 -90.169083 35.10864599999999 -90.178345 35.129611999999995 -90.164474 35.13653600000001 -90.14373 35.12505 -90.082924 35.147385 -90.064537 35.166916 -90.062431 35.191833 -90.073303 35.212738 -90.068962 35.254397999999995 -90.090103 35.263847 -90.105942 35.264056999999994 -90.152122 35.282566 -90.169746 35.30624400000001 -90.15699 35.314685999999995 -90.106346 35.345591999999996 -90.098701 35.365982 -90.105621 35.381508 -90.087135 35.406527999999994 -90.075478 35.418282000000005 -90.085159 35.41768999999999 -90.112244 35.4076 -90.132469 35.383044999999996 -90.140167 35.384254 -90.167816 35.423716999999996 -90.172676 35.442524000000006 -90.137276 35.473568 -90.101959 35.478207 -90.08223 35.472342999999995 -90.074844 35.426506 -90.073936 35.41341 -90.060295 35.417103 -90.046783 35.445454 -89.999565 35.51244 -90.041817 35.542846999999995 -90.040901 35.552414 -90.033051 35.561676000000006 -89.989586 35.532291 -89.962273 35.526900999999995 -89.947548 35.52923199999999 -89.931175 35.546059 -89.921661 35.578593999999995 -89.958031 35.603104 -89.957047 35.633335 -89.877441 35.629745 -89.863838 35.645222000000004 -89.849197 35.671062000000006 -89.857246 35.673306 -89.865181 35.655972000000006 -89.893402 35.676266 -89.929741 35.712486 -89.952034 35.734268 -89.951035 35.754836999999995 -89.909782 35.748192 -89.859871 35.758269999999996 -89.827042 35.774223000000006 -89.799904 35.805553 -89.790382 35.817420999999996 -89.759796 35.807036999999994 -89.735939 35.827515000000005 -89.700829 35.842037000000005 -89.701439 35.871418000000006 -89.757713 35.884102 -89.766273 35.896812 -89.762909 35.915012000000004 -89.737976 35.911427 -89.714684 35.885647000000006 -89.66465 35.894287000000006 -89.649338 35.913799 -89.645401 35.93782 -89.664192 35.966324 -89.713135 35.999877999999995 -89.721756 36.025795 -89.688843 36.08297 -89.678169 36.099316 -89.667389 36.129791 -89.589424 36.15201999999999 -89.589455 36.18374300000001 -89.618561 36.220867 -89.676788 36.240795000000006 -89.695656 36.25213599999999 -89.694542 36.25489399999999 -89.670586 36.240898 -89.61808 36.257278 -89.541649 36.264538 -89.535378 36.280865000000006 -89.542236 36.308037 -89.606766 36.334782000000004 -89.622795 36.354752000000005 -89.60569 36.345721999999995 -89.544556 36.35593 -89.519333 36.401058000000006 -89.520004 36.440960000000004 -89.545181 36.47180899999999 -89.516022 36.498108 -89.533195 36.498547 -89.475822 36.465462 -89.491989 36.445953 -89.470833 36.456379 -89.448517 36.502617 -89.414711 36.502548000000004 -89.346596 36.499793999999994 -88.830315 36.499847 -88.826302 36.498985000000005 -88.810661 36.499489 -88.512634 36.498149999999995 -88.495979 36.496517 -88.042732 36.538146999999995 -88.035049 36.582668 -88.041061 36.67963 -88.071312 36.66937299999999 -87.870689 36.64147199999999 -87.853516 36.64444 -87.693512 36.645168 -87.64064 36.649231 -87.346603 36.651264 -87.112701 36.650768 -87.068184 36.652058 -86.770538 36.655033 -86.510674 36.650890000000004 -86.415451 36.643246000000005 -86.199005 36.63306 -85.980629 36.626628999999994 -85.7855 36.618137000000004 -85.437408 36.626037999999994 -85.300133 36.625553 -85.272537 36.620914 -84.998512 36.605366000000004 -84.791115 36.605002999999996 -84.781929 36.595417 -84.256844 36.595371 -84.254555 36.592006999999995 -84.006821 36.591209000000006 -83.935677 36.584166999999994 -83.695694 36.598620999999994 -83.675262 36.598755 -83.464302 36.60038 -83.275131 36.589848 -83.248489 36.588001000000006 -83.211029 36.591198000000006 -82.986809 36.590946 -82.849937 36.591446000000005 -82.610962 36.591697999999994 -82.296997 36.593967000000006 -82.216805 36.595043000000004 -82.154327 36.595837 -81.929459 36.613495 -81.918449 36.611481 -81.829056 36.607555000000005 -81.652435 36.589648999999994 -81.669998 36.519341 -81.702797 36.471779 -81.69828 36.391785 -81.741074 36.361858 -81.740379 36.333725 -81.709457 36.329342 -81.730492 36.334655999999995 -81.830574 36.290752 -81.911156 36.263321000000005 -81.933113 36.129711 -82.020454 36.100139999999996 -82.077759 36.096256 -82.11808 36.139622 -82.154053 36.147014999999996 -82.207733 36.120377000000005 -82.262306 36.122150000000005 -82.311928 36.098698 -82.373856 36.075317 -82.408424 35.993176000000005 -82.475197 35.972542000000004 -82.506935 35.956108 -82.554146 35.963299000000006 -82.599304 36.003547999999995 -82.605804 36.022448999999995 -82.592232 36.042987999999994 -82.604401 36.054339999999996 -82.628044 36.051722999999996 -82.64389 35.999545999999995 -82.763229 35.987503000000004 -82.773598 35.956573000000006 -82.776443 35.920872 -82.80867 35.94742599999999 -82.85627 35.948359999999994 -82.895973 35.927868000000004 -82.91407 35.872215 -82.906822 35.791850999999994 -82.962753 35.773990999999995 -82.987007 35.782578 -83.059959 35.763808999999995 -83.118187 35.76268399999999 -83.143661 35.728886 -83.185349 35.718216 -83.243851 35.700706 -83.253304 35.691010000000006 -83.259125 35.65632600000001 -83.298416 35.653259000000006 -83.343025 35.625217000000006 -83.387093 35.597279 -83.45829 35.559551 -83.505798 35.555176 -83.561035 35.571738999999994 -83.613861 35.564972 -83.672874 35.552605 -83.775879 35.519062000000005 -83.8302 35.510586 -83.881226 35.476479 -83.910011 35.45546 -83.954704Tennessee47E S CenTN105823.5672311.5564829958.01334052.01835272.02326184.02503774.01777371.01747015.0321170.029542.02230659.0152128.0596400.0456189.00.4820.518736654.025.845197999999996 -106.64951336.493877 -93.50721731.393817999999996 -105.99836 31.478127999999998 -106.212753 31.733762999999996 -106.383041 31.786198 -106.538971 31.817728000000002 -106.614441 31.844634999999997 -106.615578 31.895101999999994 -106.643532 31.913998000000007 -106.633202 31.972117999999995 -106.632057 31.980227999999997 -106.649513 32.00098800000001 -106.623077 32.000645000000006 -106.377846 32.001553 -106.002708 32.004268999999994 -104.921799 32.003151 -104.850563 32.007278 -104.018814 32.005889999999994 -103.980896 32.00610399999999 -103.728973 32.004154 -103.332092 32.001900000000006 -103.057968 32.084995000000006 -103.055191 32.515429999999995 -103.059547 32.95353299999999 -103.048836 33.377728000000005 -103.042603 33.565742 -103.038239 33.826088 -103.032761 34.307743 -103.029144 34.745266 -103.022156 34.964718000000005 -103.02475 35.17720799999999 -103.02565 35.623604 -103.021797 35.742287000000005 -103.022118 36.056026 -103.02356 36.491566000000006 -103.026802 36.492344 -102.996918 36.490207999999996 -102.165222 36.492954 -102.03421 36.492003999999994 -101.620316 36.488022 -101.089668 36.489609 -100.956909 36.48944899999999 -100.549416 36.493877 -100.006866 36.492519 -100.001144 36.057548999999995 -99.997154 35.883793 -99.997726 35.618809 -100.0 35.424572 -99.994354 35.182182 -99.997185 35.030998 -99.996071 34.747185 -99.998878 34.562321 -99.996094 34.561863 -99.972099 34.579571 -99.94474 34.579109 -99.931908 34.548176 -99.8806 34.518626999999995 -99.860573 34.501778 -99.829933 34.443993000000006 -99.777687 34.377444999999994 -99.684906 34.368556999999996 -99.601448 34.384857 -99.58522 34.408913 -99.57785 34.41518000000001 -99.553864 34.404067999999995 -99.502136 34.383522 -99.479439 34.364704 -99.438377 34.369106 -99.409958 34.396744 -99.394157 34.428993000000006 -99.392792 34.450194999999994 -99.364204 34.412707999999995 -99.323296 34.398285 -99.267174 34.368213999999995 -99.254105 34.331993 -99.20549 34.305122 -99.196304 34.255646 -99.204597 34.223736 -99.190483 34.21272999999999 -99.176155 34.201469 -99.127945 34.208359 -99.07843 34.198921 -99.035217 34.209496 -98.996193 34.194565 -98.952507 34.16082 -98.891342 34.145934999999994 -98.811066 34.131962 -98.778534 34.130714 -98.705292 34.149998 -98.682213 34.147037999999995 -98.66172 34.158435999999995 -98.625992 34.151398 -98.607246 34.14193 -98.576332 34.105335 -98.557579 34.066413999999995 -98.499519 34.05437499999999 -98.448189 34.065830000000005 -98.421341 34.082454999999996 -98.407135 34.087231 -98.390953 34.11578 -98.384254 34.142120000000006 -98.350403 34.13942 -98.320488 34.122871 -98.277 34.115368000000004 -98.172844 34.138431999999995 -98.136864 34.148987000000005 -98.114868 34.134556 -98.094124 34.06982000000001 -98.110687 34.005314 -98.086205 33.989799000000005 -98.055557 33.98698400000001 -98.023491 34.00128599999999 -97.982681 33.971160999999995 -97.950226 33.959751 -97.947754 33.94865 -97.962997 33.932518 -97.950684 33.912052 -97.976128 33.90250399999999 -97.976379 33.883480000000006 -97.954735 33.874022999999994 -97.909065 33.855114 -97.869751 33.857071000000005 -97.852547 33.890457 -97.790207 33.932097999999996 -97.756363 33.939293000000006 -97.729019 33.971546000000004 -97.704262 33.988613 -97.671066 33.969437 -97.600182 33.917885 -97.592354 33.902530999999996 -97.575668 33.903904 -97.554588 33.916771 -97.518204 33.907707 -97.477531 33.902382 -97.462761 33.890429999999995 -97.457062 33.836212 -97.452736 33.820708999999994 -97.410118 33.831024 -97.363319 33.861915999999994 -97.341805 33.870391999999995 -97.314957 33.89584000000001 -97.314087 33.872574 -97.272278 33.858729999999994 -97.263908 33.87297100000001 -97.250687 33.894238 -97.246063 33.905688999999995 -97.211334 33.899204 -97.187767 33.863147999999995 -97.164169 33.84779399999999 -97.168594 33.836158999999995 -97.195015 33.819649 -97.208321 33.752769 -97.189163 33.728668 -97.152473 33.725933 -97.115562 33.731669999999994 -97.0905 33.742413 -97.083466 33.807570999999996 -97.087669 33.823448 -97.050026 33.837811 -97.078247 33.851101 -97.082176 33.856728000000004 -97.0709 33.840560999999994 -97.025597 33.85051300000001 -97.005852 33.876423 -96.987709 33.944202000000004 -96.987862 33.937321 -96.968185 33.947849000000005 -96.936203 33.961772999999994 -96.929565 33.950027000000006 -96.898453 33.92459100000001 -96.882851 33.88400300000001 -96.878937 33.861678999999995 -96.861015 33.858031999999994 -96.844009 33.871769 -96.814117 33.869949000000005 -96.797592 33.831738 -96.748825 33.833870000000005 -96.711678 33.847904 -96.693382 33.904324 -96.677704 33.913544 -96.666237 33.896145000000004 -96.584488 33.862899999999996 -96.614166 33.842957 -96.601196 33.825419999999994 -96.562134 33.815685 -96.510574 33.78809 -96.500748 33.778130000000004 -96.487373 33.788326 -96.419464 33.74039500000001 -96.370819 33.705528 -96.347588 33.701801 -96.316277 33.71405 -96.300789 33.761932 -96.28968 33.773388 -96.278076 33.756691000000004 -96.212547 33.758583 -96.187027 33.769356 -96.168816 33.798229000000006 -96.161316 33.820319999999995 -96.141418 33.823944 -96.154518 33.808434000000005 -96.180725 33.815792 -96.183128 33.828982999999994 -96.169205 33.835589999999996 -96.148964 33.829257999999996 -96.109444 33.844578 -96.091522 33.841278 -96.047974 33.856021999999996 -96.026749 33.844207999999995 -96.014069 33.856978999999995 -96.001793 33.87339 -96.002617 33.875378 -95.994209 33.857952 -95.977394 33.86503999999999 -95.958763 33.889973 -95.943069 33.89053 -95.933075 33.841038 -95.846558 33.843025 -95.825974 33.864673999999994 -95.795479 33.85140199999999 -95.768517 33.87900500000001 -95.764252 33.89344 -95.760696 33.903397 -95.746864 33.894825 -95.699707 33.92010500000001 -95.633492 33.920238 -95.612984 33.936690999999996 -95.61483 33.944553 -95.606071 33.93607299999999 -95.562775 33.904033999999996 -95.546318 33.906643 -95.519577 33.897816000000006 -95.526733 33.893158 -95.547493 33.88574199999999 -95.544037 33.897735999999995 -95.512886 33.881718000000006 -95.498856 33.886433 -95.468124 33.865753 -95.451607 33.870918 -95.33004 33.897114 -95.336227 33.886623 -95.301956 33.886902000000006 -95.28643 33.91793800000001 -95.277351 33.897800000000004 -95.263618 33.905022 -95.250992 33.936443 -95.251289 33.964862999999994 -95.234039 33.943546 -95.148315 33.940867999999995 -95.127968 33.917145000000005 -95.126678 33.91228099999999 -95.119225 33.921738000000005 -95.09536 33.918453 -95.082268 33.89691500000001 -95.089714 33.888462000000004 -95.083603 33.917648 -95.063477 33.896694 -95.063141 33.884445 -95.042862 33.866451 -95.037361 33.869946 -95.012772 33.856182000000004 -94.989281 33.866215 -94.968704 33.848076000000006 -94.959908 33.840824 -94.939888 33.81580700000001 -94.940399 33.816196000000005 -94.918236 33.803478 -94.908546 33.789597 -94.913879 33.774963 -94.881638 33.749320999999995 -94.85788 33.749404999999996 -94.81916 33.739582 -94.803223 33.75326200000001 -94.783508 33.752842 -94.764175 33.742267999999996 -94.782028 33.733665 -94.783157 33.736706 -94.749771 33.716797 -94.762718 33.719048 -94.742111 33.707770999999994 -94.754478 33.701267 -94.741653 33.69028900000001 -94.690987 33.696537000000006 -94.668457 33.692291 -94.655479 33.67765 -94.644325 33.671459 -94.667953 33.666061 -94.669426 33.663737999999995 -94.658539 33.67010500000001 -94.638763 33.683899 -94.631737 33.665606999999994 -94.600945 33.678982000000005 -94.585106 33.670471000000006 -94.578506 33.671913 -94.560722 33.66301300000001 -94.565208 33.662132 -94.585159 33.655449000000004 -94.588387 33.652157 -94.576462 33.661621 -94.545418 33.648247 -94.541931 33.642830000000004 -94.562195 33.635536 -94.562149 33.632694 -94.550194 33.643009000000006 -94.51799 33.621021 -94.525055 33.63081 -94.510559 33.623047 -94.50061 33.631966000000006 -94.476486 33.636444 -94.435913 33.616844 -94.436333 33.604347000000004 -94.451553 33.596503999999996 -94.443329 33.59714099999999 -94.428467 33.573486 -94.40657 33.57495900000001 -94.393417 33.593327 -94.379112 33.590042 -94.370628 33.572661999999994 -94.372307 33.560303000000005 -94.395264 33.547684000000004 -94.370758 33.57313499999999 -94.328751 33.556934 -94.302383 33.579853 -94.29882 33.589332999999996 -94.278984 33.584605999999994 -94.272079 33.561736999999994 -94.274544 33.592422 -94.237236 33.585719999999995 -94.223038 33.561535000000006 -94.235367 33.557987 -94.210884 33.58507899999999 -94.205345 33.593773 -94.159515 33.567085000000006 -94.155167 33.572998 -94.098701 33.583954000000006 -94.086655 33.577213 -94.061432 33.555912000000006 -94.035927 33.270325 -94.036507 33.023289000000005 -94.03875 32.882346999999996 -94.041603 32.694812999999996 -94.040199 32.389224999999996 -94.035233 32.199448000000004 -94.034767 31.994512999999998 -94.035065 31.989134000000007 -94.009888 31.977942 -94.004395 31.946158999999994 -93.977211 31.923164 -93.969986 31.909456000000006 -93.93573 31.909701999999996 -93.917923 31.892593000000005 -93.923462 31.894454999999994 -93.899261 31.870065999999994 -93.892525 31.87142 -93.881264 31.850112999999993 -93.877403 31.817272000000003 -93.864822 31.802017000000006 -93.834328 31.774637 -93.822067 31.753281 -93.831161 31.730351999999996 -93.80999 31.712350999999998 -93.814949 31.707565000000002 -93.808769 31.711394999999996 -93.792267 31.674566 -93.811844 31.653767000000002 -93.806427 31.647965999999997 -93.814728 31.618092000000004 -93.819588 31.615189 -93.835579 31.590182999999996 -93.832619 31.577110000000005 -93.816322 31.559062999999995 -93.810516 31.533734999999993 -93.780128 31.530724000000006 -93.763306 31.537717999999998 -93.747543 31.521877000000003 -93.731659 31.520568999999995 -93.705795 31.495402999999996 -93.718994 31.490556999999995 -93.750435 31.485500000000002 -93.751244 31.459474999999998 -93.726784 31.461457999999993 -93.698418 31.446251000000004 -93.701927 31.438131 -93.687004 31.427735999999996 -93.696129 31.415921999999995 -93.694443 31.406130000000005 -93.687492 31.398329000000004 -93.664017 31.372394999999997 -93.661072 31.373827000000006 -93.634857 31.328385999999995 -93.67704 31.312679000000003 -93.681587 31.286671 -93.656128 31.290262 -93.645592 31.273903000000004 -93.630829 31.275805000000005 -93.616455 31.270032999999998 -93.611877 31.242188 -93.611 31.229687 -93.590546 31.199066000000002 -93.602921 31.180199 -93.593941 31.17214 -93.576942 31.190928999999997 -93.550591 31.185773999999995 -93.528923 31.178076000000004 -93.526932 31.176339999999996 -93.537018 31.162943 -93.528328 31.159166 -93.544189 31.132441 -93.537506 31.125924999999995 -93.528091 31.116072000000003 -93.535088 31.109342999999996 -93.556679 31.100536000000005 -93.559982 31.094751000000002 -93.543121 31.082373000000004 -93.544106 31.074670999999995 -93.516998 31.056979999999996 -93.525742 31.038908000000006 -93.507217 31.014140999999995 -93.547119 31.018062999999998 -93.564941 31.012923999999998 -93.567894 30.997270999999998 -93.570847 30.991690000000006 -93.560951 30.976177000000007 -93.572456 30.970190000000002 -93.548676 30.956884000000002 -93.537338 30.960731999999993 -93.532188 30.935820000000007 -93.52562 30.926970999999995 -93.529984 30.924885000000003 -93.549622 30.905333999999996 -93.546516 30.901932000000002 -93.564476 30.886234 -93.568497 30.871880000000004 -93.560844 30.860282999999995 -93.552803 30.845147999999995 -93.566444 30.842342000000002 -93.555641 30.828344 -93.550682 30.802040000000005 -93.581871 30.772183999999996 -93.585175 30.745789000000002 -93.618454 30.732010000000002 -93.607651 30.732547999999994 -93.61779 30.710329 -93.612411 30.686802 -93.617607 30.672859000000003 -93.659988 30.639691999999997 -93.677971 30.640040999999997 -93.692879 30.623424999999997 -93.684586 30.615795000000006 -93.692696 30.597831999999997 -93.671585 30.598834999999994 -93.69342 30.587379 -93.717812 30.568152999999995 -93.71788 30.545517000000004 -93.735306 30.522858 -93.70546 30.505114000000006 -93.714638 30.496240999999998 -93.707275 30.488628000000006 -93.714851 30.470046999999994 -93.697975 30.462513 -93.703423 30.442633 -93.696571 30.43298 -93.721535 30.408822999999998 -93.742561 30.381788 -93.754944 30.367411000000004 -93.747833 30.354145000000003 -93.759338 30.340872000000005 -93.759178 30.304916000000006 -93.729774 30.297387999999998 -93.699211 30.239372000000003 -93.707359 30.220305999999994 -93.714844 30.180860999999993 -93.704361 30.175675999999996 -93.696167 30.150807999999998 -93.699661 30.148231999999993 -93.683144 30.141253000000006 -93.685959 30.141226000000003 -93.698639 30.117929000000004 -93.696922 30.114739999999998 -93.708382 30.095669 -93.715858 30.060519999999997 -93.712479 30.005964000000006 -93.760201 29.990654000000006 -93.857277 29.964602 -93.856331 29.818363000000005 -93.951767 29.674570000000003 -93.834961 29.674076 -94.065407 29.5599 -94.356995 29.551969999999997 -94.377007 29.432905000000005 -94.682518 29.363992999999994 -94.766548 29.383261000000005 -94.785248 29.475111 -94.681915 29.533051999999998 -94.572693 29.517522999999997 -94.501282 29.556780000000003 -94.469795 29.545147 -94.510811 29.553984 -94.533699 29.578998999999996 -94.564438 29.538556999999997 -94.788086 29.658516000000006 -94.706421 29.754568000000006 -94.700279 29.792986 -94.735725 29.759856999999997 -94.829414 29.668538999999996 -94.887161 29.682209 -94.932587 29.803979999999996 -95.088264 29.711578000000003 -95.040398 29.679700999999994 -94.989334 29.559264999999996 -95.014122 29.500333999999995 -94.911156 29.460527 -94.982811 29.464681999999996 -94.943756 29.424234 -94.952507 29.420113 -94.913445 29.447823 -94.916992 29.399323999999993 -94.891136 29.370931999999996 -94.815353 29.393831000000006 -94.891472 29.308774999999997 -94.898788 29.325922000000006 -94.951134 29.195876999999996 -95.066368 29.200030999999996 -95.160522 29.117548 -95.16478 29.105222999999995 -95.197342 28.978392 -95.248405 28.803241999999997 -95.526581 28.726954000000006 -95.683029 28.752681999999993 -95.671318 28.738871000000003 -95.786354 28.690454000000003 -95.937309 28.622673000000006 -95.956146 28.718987 -95.702148 28.488386000000006 -96.206581 28.596424 -95.991646 28.653132999999997 -95.983749 28.571320999999998 -96.237587 28.597116 -96.239029 28.611231000000004 -96.157471 28.634859000000006 -96.240456 28.762671999999995 -96.151062 28.686719999999994 -96.212173 28.661724000000007 -96.285973 28.708980999999994 -96.270378 28.634089000000003 -96.326157 28.617981 -96.364159 28.670252000000005 -96.391777 28.726028 -96.392731 28.712013 -96.427086 28.755035000000007 -96.449677 28.697248000000002 -96.432259 28.719493999999997 -96.403397 28.638664000000006 -96.418785 28.610088000000005 -96.375397 28.556944 -96.491203 28.596991000000003 -96.437157 28.655933000000005 -96.454384 28.598055000000002 -96.483269 28.608181000000002 -96.511894 28.649541999999997 -96.511734 28.636267000000004 -96.570396 28.691840999999997 -96.570557 28.808173999999994 -96.572212 28.690689000000006 -96.576485 28.71736 -96.591499 28.714141999999995 -96.646515 28.679074999999997 -96.660011 28.623633999999996 -96.606705 28.558941000000004 -96.610344 28.574099000000004 -96.566704 28.506221999999994 -96.48658 28.469627000000003 -96.563194 28.460826999999995 -96.518501 28.499454 -96.476501 28.434059000000005 -96.390724 28.306263 -96.661308 28.340197000000003 -96.702362 28.395885000000007 -96.703812 28.403458 -96.740768 28.477507000000003 -96.787094 28.449640000000002 -96.823875 28.446254999999994 -96.788338 28.410911999999996 -96.759102 28.391630000000006 -96.77536 28.404996999999995 -96.853493 28.352469999999997 -96.788231 28.312859000000003 -96.78627 28.271372 -96.793335 28.229349 -96.777931 28.211447000000007 -96.803688 28.114355000000003 -96.950905 28.256798000000003 -96.91272 28.210751000000002 -96.975304 28.186770999999993 -96.941071 28.115046000000007 -96.975105 28.137398000000005 -97.033615 28.199797000000004 -97.023567 28.130426 -97.131836 28.161810000000003 -97.135414 28.159459999999996 -97.167992 28.116381000000004 -97.157059 28.064724 -97.260284 28.048653 -97.241234 28.025931999999997 -97.270294 28.04052 -97.236214 28.054266 -97.123077 28.107749999999996 -97.026405 28.020236999999995 -97.023804 27.915385999999998 -97.114624 27.812219999999996 -97.195465 27.822318999999993 -97.247025 27.831109999999995 -97.213341 27.871145 -97.283485 27.839954000000006 -97.361046 27.873177999999996 -97.345619 27.852962000000005 -97.479355 27.875468999999995 -97.496681 27.863625999999996 -97.521698 27.843243 -97.499535 27.820282000000006 -97.479813 27.831427000000005 -97.388542 27.770840000000007 -97.396561 27.712225000000004 -97.317795 27.715328 -97.34951 27.690634000000003 -97.320015 27.6408 -97.353363 27.633185999999995 -97.399216 27.631439 -97.347504 27.707863000000003 -97.309212 27.688830999999993 -97.249794 27.562320999999997 -97.331459 27.321023999999994 -97.412262 27.319667999999993 -97.500435 27.439215000000004 -97.507538 27.344100999999995 -97.528381 27.300134999999997 -97.600113 27.419666000000007 -97.750076 27.294372999999993 -97.680008 27.287719999999993 -97.784744 27.230206999999993 -97.548157 27.265133000000006 -97.427216 27.081541 -97.503502 26.996508000000006 -97.478996 26.977857999999998 -97.568565 26.846052 -97.558052 26.793780999999996 -97.495575 26.600984999999994 -97.451698 26.518225 -97.425858 26.476805 -97.474709 26.385059 -97.421188 26.35906 -97.368698 26.182449000000005 -97.353363 26.068315999999996 -97.25312 26.002274999999997 -97.276321 26.009068 -97.213097 25.954569000000006 -97.172226 25.965124000000003 -97.307144 25.938663000000005 -97.304436 25.917021000000005 -97.380989 25.845361999999994 -97.385643 25.845197999999996 -97.434349 25.933231000000006 -97.590088 25.954172 -97.574936 25.962002 -97.612923 26.023444999999995 -97.647972 26.060141 -97.867432 26.059394999999995 -98.04007 26.034626000000003 -98.076347 26.065758000000002 -98.083214 26.055375999999995 -98.200691 26.098104000000006 -98.291946 26.120895000000004 -98.271355 26.132808999999995 -98.292274 26.111647000000005 -98.327934 26.158680000000004 -98.347191 26.156031 -98.384521 26.220911 -98.453392 26.201544 -98.488518 26.260453999999996 -98.599968 26.242056000000005 -98.677917 26.375071000000005 -98.819832 26.360328999999993 -98.908897 26.395308999999997 -98.93927 26.419531000000006 -99.106728 26.488339999999994 -99.101471 26.545728999999994 -99.168678 26.579888999999994 -99.165817 26.857360999999997 -99.285522 26.94663 -99.390518 26.995549999999994 -99.392715 27.028648000000004 -99.455063 27.199197999999996 -99.437157 27.269884000000005 -99.465271 27.318652999999998 -99.543587 27.490754999999993 -99.490494 27.504284 -99.526741 27.612627000000003 -99.549187 27.661558 -99.714493 27.780107 -99.815727 27.797686 -99.874733 27.986880999999997 -99.941856 28.003460000000004 -99.993309 28.154281999999995 -100.096924 28.201935000000006 -100.214073 28.241456999999997 -100.223465 28.280354000000003 -100.29792 28.320359999999994 -100.292892 28.394182 -100.35157 28.478651 -100.37677 28.500811 -100.345802 28.544190999999998 -100.419533 28.589732999999995 -100.403175 28.660988000000003 -100.49791 28.894222 -100.58979 28.922349999999994 -100.647224 29.080072 -100.66877 29.166571000000005 -100.768608 29.242502 -100.796989 29.373255 -101.009056 29.473552999999995 -101.06736 29.526473999999993 -101.261429 29.628749999999997 -101.254585 29.580910000000003 -101.308929 29.652431000000007 -101.305862 29.657162 -101.368401 29.745434000000003 -101.4161 29.769904999999994 -101.401276 29.760586000000004 -101.448425 29.788691 -101.470467 29.763018000000002 -101.538345 29.810119999999998 -101.543953 29.765150000000006 -101.58149 29.756960000000007 -101.639671 29.787166999999997 -101.759094 29.779999000000004 -101.805206 29.814125000000004 -101.819099 29.788501999999994 -101.924225 29.818772999999993 -101.97332 29.784571 -102.063995 29.880116 -102.324333 29.845288999999994 -102.367561 29.767945999999995 -102.384796 29.785455999999996 -102.503098 29.749499999999998 -102.551949 29.778248000000005 -102.5765 29.732338 -102.637611 29.744225 -102.676361 29.530146000000002 -102.804726 29.411844000000002 -102.822205 29.353370999999996 -102.883011 29.269203000000005 -102.908325 29.229035999999994 -102.866173 29.190862999999993 -102.988098 28.978682000000006 -103.153465 29.007453999999996 -103.266586 28.986373999999998 -103.28035 29.050338999999994 -103.335518 29.032107999999994 -103.37545 29.072134000000005 -103.474075 29.146646000000004 -103.526237 29.190631999999994 -103.720314 29.230349000000004 -103.739853 29.229794999999996 -103.782158 29.281239999999997 -103.767761 29.267259999999993 -103.786995 29.328119 -104.045631 29.400715000000005 -104.164383 29.484041000000005 -104.204735 29.550611000000004 -104.377594 29.679466000000005 -104.535248 29.807935999999998 -104.57756 29.909283000000002 -104.67437 30.057302000000007 -104.696495 30.148964000000007 -104.674759 30.238489 -104.702614 30.35047 -104.813957 30.376447999999996 -104.806473 30.392263 -104.852997 30.570556999999994 -104.890678 30.641324999999995 -104.986931 30.684334000000007 -104.997543 30.687870000000004 -105.060562 30.812085999999994 -105.21434 30.797652999999997 -105.258186 30.831948999999994 -105.287598 30.816507 -105.313782 30.853081000000003 -105.390312 30.902510000000007 -105.409065 30.998284999999996 -105.554382 31.086427999999998 -105.603218 31.170779999999993 -105.76973 31.393817999999996 -105.9983629.257571999999996 -94.913429 29.342450999999997 -94.76738 29.319490000000002 -94.748405 29.096958 -95.105415 29.257571999999996 -94.91342928.345845999999995 -96.397881 28.066322 -96.834625 28.172161000000003 -96.803841 28.183535000000006 -96.738907 28.318245000000005 -96.532135 28.325832000000005 -96.463051 28.391439000000005 -96.422554 28.345845999999995 -96.39788128.045933000000005 -96.939964 28.131405 -96.872421 28.101840999999993 -96.837425 28.049402 -96.853806 27.840953999999996 -97.049606 27.914381000000006 -97.024429 27.984526000000002 -96.949387 28.000853000000006 -96.973 28.045933000000005 -96.93996427.283717999999993 -97.359116 27.210453 -97.379379 27.284643000000003 -97.376091 27.440819000000005 -97.335503 27.581132999999994 -97.248672 27.651748999999995 -97.258682 27.612064000000004 -97.203583 27.707459999999998 -97.170181 27.811273999999997 -97.075294 27.819215999999997 -97.113037 27.830472999999998 -97.053566 27.574006999999995 -97.223717 27.283717999999993 -97.35911626.601022999999998 -97.301132 26.706646000000006 -97.358025 26.820375 -97.381332 26.921988 -97.395309 27.111227 -97.400909 27.201651 -97.388786 27.204448999999997 -97.378532 27.097244000000003 -97.386925 26.949022 -97.381332 26.802663999999993 -97.358025 26.600669999999994 -97.295837 26.418142000000003 -97.232109 26.259241000000003 -97.194992 26.077720999999997 -97.171799 26.071920000000006 -97.179337 26.250541999999996 -97.208916 26.348551 -97.226311 26.419303999999997 -97.251251 26.478904999999997 -97.26725 26.539963 -97.278549 26.601022999999998 -97.301132Texas48W S CenTX688219.0717337.5491.712202E74377106.06115966.08433346.000000018688674.06192585.05860490.01142908.0168814.07687338.0590269.02139266.01042397.00.4930.5072487642.031.343348000000006 -109.05072836.999741 -102.99691832.441967000000005 -109.048882 32.77948000000001 -109.050728 33.205101 -109.049904 33.783249 -109.049721 34.59174 -109.048012 34.954612999999995 -109.045998 35.996655000000004 -109.047195 36.996643000000006 -109.047821 36.999474000000006 -108.371834 36.998772 -107.471855 36.997519999999994 -107.410217 36.999072999999996 -106.889778 36.989491 -106.860657 36.991493000000006 -106.471588 36.99227500000001 -105.991425 36.994541 -105.712891 36.992580000000004 -105.212532 36.993183 -105.145615 36.994445999999996 -103.993111 36.999741 -103.077377 36.998504999999994 -102.997223 36.492344 -102.996918 36.491566000000006 -103.026802 36.056026 -103.02356 35.742287000000005 -103.022118 35.623604 -103.021797 35.17720799999999 -103.02565 34.964718000000005 -103.02475 34.745266 -103.022156 34.307743 -103.029144 33.826088 -103.032761 33.565742 -103.038239 33.377728000000005 -103.042603 32.95353299999999 -103.048836 32.515429999999995 -103.059547 32.084995000000006 -103.055191 32.001900000000006 -103.057968 32.004154 -103.332092 32.00610399999999 -103.728973 32.005889999999994 -103.980896 32.007278 -104.018814 32.003151 -104.850563 32.004268999999994 -104.921799 32.001553 -106.002708 32.000645000000006 -106.377846 32.00098800000001 -106.623077 31.980227999999997 -106.649513 31.972117999999995 -106.632057 31.913998000000007 -106.633202 31.895101999999994 -106.643532 31.844634999999997 -106.615578 31.817728000000002 -106.614441 31.786198 -106.538971 31.784981000000002 -107.282997 31.786804000000004 -108.20266 31.343742000000006 -108.21006 31.343348000000006 -109.045006 32.441967000000005 -109.048882New Mexico35MtnNM304472.805586.0541379559.0358259.0497680.0677870.0701689.0491847.0433150.087085.06019.0576213.049368.0169914.068673.00.4910.509237629.030.233400000000003 -88.47292335.015949000000006 -84.89408931.980545000000006 -85.070137 31.907264999999995 -85.115219 31.854723000000007 -85.135635 31.783651000000006 -85.13163 31.778689999999997 -85.130234 31.731401000000005 -85.115356 31.708405999999997 -85.118744 31.684076000000005 -85.111275 31.621098000000003 -85.059357 31.55422 -85.042793 31.519488999999993 -85.04277 31.475917999999993 -85.066383 31.440490999999994 -85.061478 31.367059999999995 -85.088013 31.332159000000004 -85.082634 31.302903999999998 -85.081299 31.271259 -85.103432 31.226895999999996 -85.093674 31.196742999999998 -85.103027 31.172031000000004 -85.093437 31.162183999999996 -85.068733 31.126531999999997 -85.038139 31.07992 -85.017067 31.001068000000004 -85.001678 31.000820000000004 -85.485077 31.000816 -85.486664 30.993146999999993 -86.031883 30.995045000000005 -86.181534 30.991358000000005 -86.383972 30.997911000000002 -86.701897 30.998011000000005 -86.779404 31.002975000000006 -87.163147 31.002449 -87.598595 30.954178 -87.589882 30.876717 -87.625725 30.848110000000005 -87.615929 30.785506999999996 -87.541916 30.748301999999995 -87.526619 30.705612000000002 -87.460159 30.692618999999993 -87.418915 30.667823999999996 -87.398666 30.619905000000003 -87.393303 30.556298999999996 -87.422089 30.531194999999997 -87.445374 30.481504 -87.418839 30.440163 -87.405273 30.359522 -87.466461 30.319053999999994 -87.587585 30.278214000000006 -87.593422 30.233728 -87.795341 30.233400000000003 -88.002563 30.272436 -87.779953 30.299221000000003 -87.757515 30.421098999999998 -87.903473 30.620993 -87.913391 30.744000999999997 -88.019791 30.336957999999996 -88.135681 30.404094999999998 -88.32032 30.393353000000005 -88.401405 30.736266999999998 -88.417229 31.000511000000003 -88.429184 31.120699000000002 -88.434547 31.435450000000003 -88.450783 31.702084999999997 -88.465073 31.888723 -88.472923 32.22761199999999 -88.437691 32.309082000000004 -88.425758 32.58033399999999 -88.393799 32.924628999999996 -88.348007 32.98737 -88.339432 33.288773000000006 -88.304794 33.538685 -88.274551 33.742615 -88.248161 34.059017 -88.202606 34.090343000000004 -88.19931 34.32404699999999 -88.167572 34.465176 -88.151215 34.58040200000001 -88.13636 34.895542000000006 -88.090431 34.899849 -88.108849 34.93022499999999 -88.143066 35.004368 -88.193954 35.013458 -88.194923 35.015949000000006 -87.986046 35.010464 -87.607788 35.007262999999995 -87.222748 35.00787699999999 -87.207573 34.998160999999996 -86.83342 34.99699 -86.782372 34.995186000000004 -86.313065 34.995377000000005 -86.303513 34.992301999999995 -85.869591 34.990086000000005 -85.608994 34.862244000000004 -85.583092 34.622406 -85.534729 34.584602000000004 -85.525871 34.52293 -85.511894 34.29007 -85.460327 34.086822999999995 -85.416611 33.959728 -85.395782 33.905308000000005 -85.384056 33.654816 -85.335335 33.490482 -85.305031 33.425762000000006 -85.293877 33.129115999999996 -85.233902 33.120018 -85.233559 32.871685 -85.180779 32.807316 -85.162361 32.776939 -85.128151 32.756184000000005 -85.133362 32.744251000000006 -85.124947 32.734257 -85.11393 32.689837999999995 -85.107796 32.676018 -85.090538 32.645775 -85.103867 32.628315 -85.086388 32.602867 -85.084213 32.581115999999994 -85.070839 32.518787 -84.99572 32.454693000000006 -84.989883 32.429306 -84.965454 32.396666999999994 -84.971031 32.386948000000004 -84.984558 32.371357 -84.971733 32.346931 -85.002159 32.32944500000001 -85.005402 32.292987999999994 -84.921143 32.268585 -84.894676 32.259026000000006 -84.894089 32.249404999999996 -84.905434 32.247237999999996 -84.923752 32.228404999999995 -84.916077 32.217827 -84.928444 32.212097 -84.975815 32.191776000000004 -84.960457 32.178726 -85.007896 32.166122 -85.024452 32.126484000000005 -85.053383 32.09074 -85.046257 32.069489000000004 -85.056725 32.049853999999996 -85.06208 32.017219999999995 -85.05677 31.980545000000006 -85.070137Alabama01E S CenAL131443.1194332.2684040587.01103835.01506790.01936162.02104425.01455669.01374395.0267191.013279.01741794.0128587.0474797.0360499.00.4790.521630032.030.194738 -91.64356235.004954999999995 -88.09043131.435450000000003 -88.450783 31.120699000000002 -88.434547 31.000511000000003 -88.429184 30.736266999999998 -88.417229 30.393353000000005 -88.401405 30.352686000000006 -88.399216 30.325875999999994 -88.464226 30.38055 -88.577744 30.342123 -88.683243 30.430079000000006 -88.873756 30.416602999999995 -88.930191 30.398089999999996 -88.885696 30.314644 -89.276077 30.372190000000003 -89.273483 30.380228000000002 -89.334999 30.365088999999998 -89.357483 30.318657 -89.318497 30.256288999999995 -89.415565 30.200768999999994 -89.438072 30.194738 -89.57383 30.241224000000003 -89.609947 30.247632999999993 -89.606255 30.256769000000006 -89.621605 30.290160999999998 -89.625885 30.295635000000004 -89.639114 30.311649000000003 -89.637024 30.323566 -89.61853 30.343235000000007 -89.62014 30.355114 -89.633392 30.355097 -89.646629 30.378872 -89.65461 30.399880999999993 -89.675308 30.44516 -89.6754 30.462525999999997 -89.683388 30.467995000000002 -89.694534 30.478054 -89.695618 30.481223999999997 -89.71312 30.495846 -89.718994 30.497646000000003 -89.732254 30.515429999999995 -89.755112 30.551056000000003 -89.772728 30.553753 -89.790779 30.624081000000004 -89.820236 30.649266999999995 -89.805466 30.651055999999997 -89.819283 30.670685000000006 -89.829453 30.666062999999994 -89.845375 30.675693999999993 -89.83532 30.679331000000005 -89.841713 30.700361 -89.84127 30.703592 -89.83065 30.712236000000004 -89.843979 30.729174 -89.835541 30.732866 -89.823326 30.742459999999994 -89.825493 30.74798 -89.813278 30.789536999999996 -89.824615 30.811511999999993 -89.81086 30.812466 -89.796494 30.828918 -89.796021 30.830344999999994 -89.774727 30.861393000000007 -89.78495 30.861897999999997 -89.765778 30.900285999999994 -89.763237 30.902608999999998 -89.746727 30.909921999999995 -89.745682 30.920857999999996 -89.75798 30.925923999999995 -89.740402 30.949663 -89.748466 30.965215999999998 -89.739449 30.975308999999996 -89.719749 30.984431999999998 -89.726707 31.001340999999996 -89.723549 31.007261 -89.732643 31.007002 -89.833481 31.007191000000006 -90.259285 31.005211000000003 -90.343567 31.002150999999998 -90.542557 31.001527999999993 -90.560158 31.001368 -90.829613 31.000240000000005 -91.056908 31.000283999999994 -91.1791 31.001186000000004 -91.632179 31.011781999999997 -91.627655 31.032471 -91.57267 31.057982999999993 -91.551964 31.081958999999998 -91.564857 31.127517999999995 -91.619995 31.178307000000004 -91.59137 31.213755000000006 -91.600845 31.240928999999994 -91.636879 31.270943000000003 -91.643562 31.277518999999998 -91.634094 31.270296000000002 -91.556801 31.282898000000003 -91.51696 31.298687 -91.502357 31.323285999999996 -91.505638 31.346815000000007 -91.542671 31.368703999999994 -91.544289 31.382580000000004 -91.534454 31.388059999999996 -91.559258 31.421235999999993 -91.567612 31.43293 -91.552353 31.434166000000005 -91.534683 31.409069000000002 -91.53405 31.391921999999994 -91.522896 31.375079999999997 -91.494591 31.377611 -91.480721 31.403899999999993 -91.465805 31.420205999999993 -91.473175 31.452915000000004 -91.507782 31.52552 -91.506363 31.534713999999994 -91.502838 31.542699999999996 -91.464355 31.562579999999997 -91.423462 31.586186999999995 -91.404137 31.602427000000006 -91.415268 31.604192999999995 -91.497032 31.62178 -91.508759 31.643704999999997 -91.50769 31.650729999999996 -91.49765 31.626801 -91.45726 31.625364000000005 -91.408287 31.654439999999994 -91.389069 31.716517999999994 -91.387833 31.751576999999997 -91.36496 31.753310999999997 -91.370384 31.758379000000005 -91.339798 31.749723000000003 -91.282509 31.759600000000006 -91.263878 31.773764 -91.262573 31.763458 -91.336143 31.770703999999995 -91.36702 31.79567 -91.347122 31.843317 -91.334732 31.862983999999997 -91.30336 31.861332000000004 -91.292534 31.827371999999997 -91.276688 31.818658999999997 -91.250618 31.835226000000006 -91.241272 31.865425000000002 -91.26458 31.878511000000003 -91.24437 31.914288999999997 -91.201431 31.988291000000004 -91.163033 31.991827 -91.108002 32.021057 -91.07238 32.031994 -91.073135 32.043655 -91.086884 32.06610499999999 -91.143013 32.085674 -91.145584 32.088245 -91.125618 32.056843 -91.089302 32.058552000000006 -91.06501 32.093993999999995 -91.073814 32.10767 -91.041084 32.134060000000005 -91.011284 32.169262 -91.00383 32.169899 -91.024414 32.184532000000004 -91.054474 32.158671999999996 -91.045311 32.134392000000005 -91.054047 32.148579 -91.083008 32.134991 -91.108711 32.144783000000004 -91.15654 32.171988999999996 -91.166847 32.205864000000005 -91.157265 32.225605 -91.115952 32.21488600000001 -91.100571 32.232388 -91.087914 32.232742 -91.062462 32.249438999999995 -91.041649 32.223404 -90.977219 32.269065999999995 -90.971016 32.287132 -90.983818 32.297653 -90.980766 32.303698999999995 -90.971657 32.297405 -90.929245 32.305317 -90.916374 32.37965 -90.875351 32.381355 -90.885155 32.345898000000005 -90.914925 32.356396000000004 -90.984566 32.366234000000006 -90.998863 32.397082999999995 -91.009209 32.419017999999994 -90.969986 32.440037000000004 -90.965485 32.452965000000006 -90.98745 32.442417000000006 -91.026909 32.446999000000005 -91.05851 32.498569 -91.117683 32.524067 -91.118744 32.548637 -91.088783 32.496956 -91.037201 32.490814 -91.019684 32.495281000000006 -90.99205 32.511641999999995 -90.995071 32.542159999999996 -91.063087 32.561611 -91.073265 32.576389000000006 -91.058868 32.582672 -91.032326 32.615466999999995 -90.998657 32.625977000000006 -90.996132 32.642673 -91.007881 32.641502 -91.027466 32.614352999999994 -91.04763 32.606387999999995 -91.063812 32.597527 -91.110992 32.644852 -91.146263 32.663174 -91.139557 32.723518 -91.059029 32.749397 -91.09771 32.751125 -91.136467 32.76268 -91.156342 32.841212999999996 -91.142151 32.877162999999996 -91.079529 32.953711999999996 -91.075592 32.987621000000004 -91.092674 32.987350000000006 -91.111816 32.975224 -91.132355 32.937466 -91.129936 32.91778600000001 -91.137177 32.905022 -91.169701 32.914162000000005 -91.198311 32.935852 -91.20916 33.000294 -91.161865 33.013039000000006 -91.162132 33.021709 -91.160675 33.040431999999996 -91.156685 33.04727200000001 -91.123985 33.065571000000006 -91.11779 33.090652000000006 -91.14679 33.113224 -91.190536 33.140465000000006 -91.195503 33.150288 -91.177628 33.131069 -91.12133 33.145084 -91.095856 33.161602 -91.086319 33.225697 -91.092003 33.245780999999994 -91.054543 33.281921 -91.040428 33.293575000000004 -91.053833 33.29235799999999 -91.076324 33.249210000000005 -91.102905 33.268505000000005 -91.122505 33.322384 -91.141747 33.359402 -91.130424 33.393406 -91.106941 33.410179 -91.07869 33.431797 -91.061516 33.460010999999994 -91.060982 33.466206 -91.073761 33.462856 -91.0858 33.414897999999994 -91.099129 33.388878000000005 -91.137634 33.39183 -91.184982 33.414299 -91.204163 33.422112 -91.19883 33.443123 -91.130516 33.452831 -91.119713 33.469673 -91.118958 33.493190999999996 -91.128799 33.51178 -91.164978 33.504368 -91.174179 33.466644 -91.17173 33.447388000000004 -91.18177 33.443443 -91.232849 33.459453999999994 -91.22715 33.473395999999994 -91.207642 33.512012 -91.180405 33.52334999999999 -91.182846 33.538506 -91.204102 33.539276 -91.213486 33.55635100000001 -91.227631 33.590481 -91.22673 33.57468 -91.187805 33.57724399999999 -91.168022 33.616161000000005 -91.15065 33.637032000000005 -91.154404 33.669945 -91.205307 33.690723000000006 -91.215141 33.708965000000006 -91.211678 33.718315000000004 -91.1633 33.677527999999995 -91.121048 33.662586000000005 -91.083771 33.683216 -91.037834 33.70549 -91.038826 33.719357 -91.056213 33.70823300000001 -91.104568 33.71244 -91.128944 33.723225 -91.138 33.771820000000005 -91.142891 33.780086999999995 -91.136986 33.776439999999994 -91.105415 33.786525999999995 -91.066391 33.769554 -91.043404 33.76397299999999 -91.018433 33.77154899999999 -90.995377 33.78533899999999 -90.984039 33.798897 -90.990372 33.816586 -91.028854 33.843525 -91.054817 33.867081 -91.061371 33.936306 -91.018463 33.974644 -91.075706 33.994468999999995 -91.088852 34.006096 -91.069695 33.985699 -91.031059 33.990528 -91.009544 33.968372 -91.000259 33.960815 -90.986816 33.967461 -90.96479 33.978874000000005 -90.961128 33.994606000000005 -90.975273 34.010998 -90.973366 34.031288 -90.95047 34.040710000000004 -90.886345 34.10095200000001 -90.866333 34.102749 -90.906311 34.125941999999995 -90.942245 34.155804 -90.953346 34.185649999999995 -90.928917 34.147544999999994 -90.846611 34.148658999999995 -90.828865 34.166172 -90.80751 34.190544 -90.822922 34.20483 -90.921486 34.23467599999999 -90.933708 34.250195000000005 -90.928436 34.219162 -90.863411 34.229534 -90.83136 34.277339999999995 -90.823837 34.299347 -90.806419 34.299957000000006 -90.792526 34.278976 -90.758255 34.317719 -90.747757 34.363913999999994 -90.761856 34.37216600000001 -90.75531 34.377871999999996 -90.687485 34.3634 -90.681137 34.320145 -90.689377 34.31797400000001 -90.679337 34.330006 -90.657814 34.36591 -90.657242 34.40459799999999 -90.60379 34.432998999999995 -90.579124 34.453945000000004 -90.574402 34.496506 -90.59005 34.520222000000004 -90.580345 34.532509000000005 -90.565681 34.543327000000005 -90.537148 34.555649 -90.530617 34.604744 -90.577614 34.627815 -90.58799 34.645611 -90.5793 34.700287 -90.561058 34.685947 -90.539062 34.65180599999999 -90.547546 34.636894 -90.538963 34.638065 -90.508812 34.672039 -90.466225 34.704254000000006 -90.469978 34.702068 -90.513565 34.713252999999995 -90.533279 34.790336999999994 -90.547745 34.807323 -90.52726 34.805603000000005 -90.516045 34.789833 -90.501282 34.765784999999994 -90.498734 34.748371000000006 -90.516968 34.729855 -90.504417 34.726833 -90.485924 34.741198999999995 -90.451431 34.76075 -90.448868 34.79966400000001 -90.466705 34.82521800000001 -90.451904 34.857727 -90.474716 34.88092399999999 -90.470528 34.88618099999999 -90.438087 34.872643 -90.427841 34.835353999999995 -90.433548 34.832268 -90.42231 34.841038 -90.403931 34.860577000000006 -90.341423 34.850266000000005 -90.322823 34.851776 -90.301552 34.864959999999996 -90.299446 34.88269 -90.296272 34.896511000000004 -90.266708 34.920731 -90.242844 34.938903999999994 -90.241898 34.94976 -90.248169 34.978481 -90.299507 35.000693999999996 -90.305351 34.999168 -89.717186 35.000641 -89.646477 34.999714 -89.3423 35.000793 -89.198067 35.000145 -89.006134 35.00235000000001 -88.812492 35.003094000000004 -88.784988 35.004954999999995 -88.383102 35.00374600000001 -88.351685 35.004368 -88.193954 34.93022499999999 -88.143066 34.899849 -88.108849 34.895542000000006 -88.090431 34.58040200000001 -88.13636 34.465176 -88.151215 34.32404699999999 -88.167572 34.090343000000004 -88.19931 34.059017 -88.202606 33.742615 -88.248161 33.538685 -88.274551 33.288773000000006 -88.304794 32.98737 -88.339432 32.924628999999996 -88.348007 32.58033399999999 -88.393799 32.309082000000004 -88.425758 32.22761199999999 -88.437691 31.888723 -88.472923 31.702084999999997 -88.465073 31.435450000000003 -88.450783Mississippi28E S CenMS121506.433598.3372573216.0674378.0911374.01230617.01342599.0890741.0777422.0184019.08020.01028773.094712.0294070.0222644.00.4780.522399625.030.361057000000002 -85.60899435.000277999999994 -80.8949231.778689999999997 -85.130234 31.783651000000006 -85.13163 31.854723000000007 -85.135635 31.907264999999995 -85.115219 31.980545000000006 -85.070137 32.017219999999995 -85.05677 32.049853999999996 -85.06208 32.069489000000004 -85.056725 32.09074 -85.046257 32.126484000000005 -85.053383 32.166122 -85.024452 32.178726 -85.007896 32.191776000000004 -84.960457 32.212097 -84.975815 32.217827 -84.928444 32.228404999999995 -84.916077 32.247237999999996 -84.923752 32.249404999999996 -84.905434 32.259026000000006 -84.894089 32.268585 -84.894676 32.292987999999994 -84.921143 32.32944500000001 -85.005402 32.346931 -85.002159 32.371357 -84.971733 32.386948000000004 -84.984558 32.396666999999994 -84.971031 32.429306 -84.965454 32.454693000000006 -84.989883 32.518787 -84.99572 32.581115999999994 -85.070839 32.602867 -85.084213 32.628315 -85.086388 32.645775 -85.103867 32.676018 -85.090538 32.689837999999995 -85.107796 32.734257 -85.11393 32.744251000000006 -85.124947 32.756184000000005 -85.133362 32.776939 -85.128151 32.807316 -85.162361 32.871685 -85.180779 33.120018 -85.233559 33.129115999999996 -85.233902 33.425762000000006 -85.293877 33.490482 -85.305031 33.654816 -85.335335 33.905308000000005 -85.384056 33.959728 -85.395782 34.086822999999995 -85.416611 34.29007 -85.460327 34.52293 -85.511894 34.584602000000004 -85.525871 34.622406 -85.534729 34.862244000000004 -85.583092 34.990086000000005 -85.608994 34.990047000000004 -85.467422 34.989902 -85.359985 34.989075 -85.267761 34.992554 -84.972847 34.99260700000001 -84.967911 34.992756 -84.800476 34.990680999999995 -84.771194 34.988682 -84.618752 34.98900999999999 -84.323853 34.988224 -84.11824 34.989067000000006 -83.988548 34.989391 -83.937996 34.989536 -83.549416 34.992023 -83.513008 35.000277999999994 -83.106285 34.98407400000001 -83.100578 34.95459700000001 -83.115669 34.960803999999996 -83.121529 34.954285 -83.127441 34.936035000000004 -83.113228 34.940701000000004 -83.125763 34.930386 -83.137688 34.932190000000006 -83.155151 34.917561000000006 -83.158478 34.910557 -83.182304 34.884079 -83.203636 34.88909099999999 -83.219551 34.873729999999995 -83.232925 34.877990999999994 -83.243195 34.862292999999994 -83.235809 34.850075000000004 -83.250427 34.839619 -83.250542 34.839138000000005 -83.267891 34.814987 -83.270233 34.80543900000001 -83.302872 34.787150999999994 -83.322807 34.75214 -83.32354 34.727287000000004 -83.350449 34.709553 -83.3508 34.677597000000006 -83.339905 34.662848999999994 -83.299011 34.613224 -83.237106 34.598839 -83.165001 34.576733000000004 -83.159073 34.567768 -83.137489 34.534915999999996 -83.108246 34.518871000000004 -83.079147 34.489959999999996 -83.055122 34.470726 -83.00808 34.476395 -82.982094 34.477881999999994 -82.90519 34.457438999999994 -82.868179 34.412571 -82.844231 34.370941 -82.836578 34.339794 -82.808723 34.290409 -82.783012 34.28085299999999 -82.764313 34.233265 -82.758171 34.205444 -82.742737 34.169685 -82.735924 34.108242000000004 -82.6605 34.034519 -82.603088 34.013301999999996 -82.596283 33.968784 -82.573753 33.959166999999994 -82.576759 33.930908 -82.517685 33.878101 -82.456779 33.86013 -82.424675 33.854015000000004 -82.390747 33.83588399999999 -82.36586 33.835266000000004 -82.351463 33.803787 -82.311272 33.782520000000005 -82.305664 33.761466999999996 -82.266373 33.690208 -82.235054 33.680603000000005 -82.214363 33.623706999999996 -82.192345 33.615082 -82.16729 33.593773 -82.139137 33.594643000000005 -82.116562 33.57373 -82.065842 33.547371 -82.038704 33.538596999999996 -82.020302 33.520354999999995 -81.996696 33.490601 -81.981079 33.470882 -81.936546 33.451195 -81.916801 33.436004999999994 -81.927437 33.415302 -81.913727 33.408024 -81.940498 33.376419 -81.925972 33.377007000000006 -81.945229 33.350296 -81.936874 33.349354000000005 -81.911575 33.332054 -81.912254 33.335094 -81.893646 33.30669399999999 -81.877037 33.315524999999994 -81.865707 33.308201 -81.840271 33.296947 -81.860878 33.269279 -81.826736 33.273163 -81.840004 33.260468 -81.83696 33.243354999999994 -81.854126 33.22629499999999 -81.810928 33.207779 -81.801727 33.21722 -81.779999 33.213734 -81.770042 33.195232000000004 -81.759758 33.169685 -81.763573 33.144547 -81.74054 33.122787 -81.704445 33.087723 -81.61113 33.070637000000005 -81.595993 33.060660999999996 -81.560204 33.043530000000004 -81.547829 33.043774 -81.52977 33.012637999999995 -81.508919 33.004658000000006 -81.492905 32.959518 -81.49807 32.95526099999999 -81.51001 32.947063 -81.510406 32.897411000000005 -81.477219 32.89756800000001 -81.465202 32.875930999999994 -81.483376 32.871239 -81.45871 32.844414 -81.45549 32.84151799999999 -81.432503 32.831608 -81.424133 32.82014100000001 -81.430481 32.80933 -81.421005 32.785988 -81.430412 32.756561000000005 -81.416245 32.749645 -81.42321 32.741637999999995 -81.407799 32.701397 -81.420708 32.686531 -81.407364 32.650642000000005 -81.399651 32.625434999999996 -81.412277 32.595707000000004 -81.385078 32.588188 -81.36644 32.581801999999996 -81.366875 32.58335099999999 -81.351662 32.57118199999999 -81.340576 32.567108000000005 -81.299156 32.55463399999999 -81.274475 32.533749 -81.268158 32.520432 -81.236412 32.464375000000004 -81.195328 32.420128000000005 -81.200096 32.386639 -81.178421 32.37159 -81.179291 32.338547000000005 -81.157646 32.348274 -81.142052 32.332424 -81.132057 32.276447000000005 -81.124214 32.257515 -81.148338 32.224247000000005 -81.147858 32.190392 -81.114883 32.117408999999995 -81.119278 32.105239999999995 -81.105042 32.005779000000004 -80.89492 31.947711999999996 -80.973724 31.890095000000002 -80.971046 31.864124000000004 -81.140022 31.905677999999995 -81.180168 31.899907999999996 -81.207428 31.919683000000006 -81.197472 31.928220999999994 -81.204079 31.903204000000002 -81.239853 31.949219 -81.284462 31.89448 -81.245117 31.920439000000002 -81.206657 31.892927 -81.220276 31.897458999999998 -81.18042 31.853300000000004 -81.14164 31.823138999999998 -81.039185 31.777321 -81.061218 31.726851999999994 -81.137001 31.799593 -81.174187 31.784626000000003 -81.196541 31.735581999999994 -81.175354 31.799449999999993 -81.289902 31.645847000000003 -81.135117 31.599676000000002 -81.18737 31.639954000000003 -81.240898 31.556662000000003 -81.239326 31.504929000000004 -81.194954 31.466673 -81.208755 31.337370000000007 -81.313248 31.344328000000004 -81.365761 31.311252999999994 -81.410522 31.263861000000006 -81.394951 31.296920999999998 -81.388992 31.275588999999997 -81.301018 31.242464 -81.310432 31.148714 -81.381187 31.130898000000002 -81.528564 31.086316999999994 -81.525436 31.043591000000006 -81.475517 31.076525000000004 -81.535606 30.985579 -81.491035 30.961884999999995 -81.52874 30.944665999999998 -81.485008 30.864543999999995 -81.529449 30.757278 -81.498566 30.721216 -81.528778 30.706340999999995 -81.536774 30.724650999999994 -81.601349 30.716085000000007 -81.60495 30.731538999999998 -81.628159 30.728846000000004 -81.642654 30.745133999999993 -81.716942 30.763655 -81.736847 30.769397999999995 -81.757881 30.761351000000005 -81.776878 30.787851000000003 -81.803368 30.798851 -81.873169 30.828075 -81.899307 30.813242000000002 -81.907684 30.824016999999998 -81.94397 30.820198000000005 -81.953194 30.795773999999994 -81.961716 30.778118000000006 -81.981644 30.791086000000007 -82.015701 30.764022999999995 -82.01313 30.757299000000003 -82.032043 30.650677 -82.045074 30.598455 -82.013817 30.570755000000005 -82.005966 30.477481999999995 -82.022675 30.442642000000006 -82.035286 30.433831999999995 -82.046265 30.378668000000005 -82.038521 30.363557999999998 -82.052933 30.361057000000002 -82.164803 30.368397 -82.180397 30.42362 -82.205727 30.489782000000005 -82.199348 30.502739000000005 -82.219528 30.531214000000006 -82.238556 30.566845 -82.221199 30.577084 -82.412247 30.582468000000006 -82.463287 30.588835000000003 -82.583107 30.595502999999994 -82.696503 30.621129999999994 -83.132576 30.633077999999998 -83.301445 30.634096 -83.31073 30.650582999999997 -83.609177 30.660292 -83.737961 30.675341000000003 -84.000839 30.678381 -84.075668 30.690224 -84.281761 30.693897000000007 -84.374542 30.712473000000003 -84.863083 30.714312000000007 -84.864662 30.743697999999995 -84.888367 30.753899000000004 -84.915421 30.775897999999998 -84.926971 30.802435000000003 -84.93264 30.846733 -84.927002 30.894769999999994 -84.937851 30.926907 -84.969086 30.963477999999995 -84.97364 30.979134000000002 -85.000214 31.001068000000004 -85.001678 31.07992 -85.017067 31.126531999999997 -85.038139 31.162183999999996 -85.068733 31.172031000000004 -85.093437 31.196742999999998 -85.103027 31.226895999999996 -85.093674 31.271259 -85.103432 31.302903999999998 -85.081299 31.332159000000004 -85.082634 31.367059999999995 -85.088013 31.440490999999994 -85.061478 31.475917999999993 -85.066383 31.519488999999993 -85.04277 31.55422 -85.042793 31.621098000000003 -85.059357 31.684076000000005 -85.111275 31.708405999999997 -85.118744 31.731401000000005 -85.115356 31.778689999999997 -85.13023430.903648000000004 -81.485237 30.970366 -81.416588 30.938568000000004 -81.403236 30.716189999999997 -81.455902 30.736647000000005 -81.479645 30.860022999999998 -81.47007 30.881500000000003 -81.503487 30.903648000000004 -81.485237Georgia13S AtlGA148574.8883934.9916457339.01707476.02359351.03134562.03322777.02346478.02372513.0465734.086587.03081555.0187390.0802419.0536597.00.4850.515935083.032.067963000000006 -83.350835.208241 -78.5797233.195232000000004 -81.759758 33.213734 -81.770042 33.21722 -81.779999 33.207779 -81.801727 33.22629499999999 -81.810928 33.243354999999994 -81.854126 33.260468 -81.83696 33.273163 -81.840004 33.269279 -81.826736 33.296947 -81.860878 33.308201 -81.840271 33.315524999999994 -81.865707 33.30669399999999 -81.877037 33.335094 -81.893646 33.332054 -81.912254 33.349354000000005 -81.911575 33.350296 -81.936874 33.377007000000006 -81.945229 33.376419 -81.925972 33.408024 -81.940498 33.415302 -81.913727 33.436004999999994 -81.927437 33.451195 -81.916801 33.470882 -81.936546 33.490601 -81.981079 33.520354999999995 -81.996696 33.538596999999996 -82.020302 33.547371 -82.038704 33.57373 -82.065842 33.594643000000005 -82.116562 33.593773 -82.139137 33.615082 -82.16729 33.623706999999996 -82.192345 33.680603000000005 -82.214363 33.690208 -82.235054 33.761466999999996 -82.266373 33.782520000000005 -82.305664 33.803787 -82.311272 33.835266000000004 -82.351463 33.83588399999999 -82.36586 33.854015000000004 -82.390747 33.86013 -82.424675 33.878101 -82.456779 33.930908 -82.517685 33.959166999999994 -82.576759 33.968784 -82.573753 34.013301999999996 -82.596283 34.034519 -82.603088 34.108242000000004 -82.6605 34.169685 -82.735924 34.205444 -82.742737 34.233265 -82.758171 34.28085299999999 -82.764313 34.290409 -82.783012 34.339794 -82.808723 34.370941 -82.836578 34.412571 -82.844231 34.457438999999994 -82.868179 34.477881999999994 -82.90519 34.476395 -82.982094 34.470726 -83.00808 34.489959999999996 -83.055122 34.518871000000004 -83.079147 34.534915999999996 -83.108246 34.567768 -83.137489 34.576733000000004 -83.159073 34.598839 -83.165001 34.613224 -83.237106 34.662848999999994 -83.299011 34.677597000000006 -83.339905 34.709553 -83.3508 34.727287000000004 -83.350449 34.75214 -83.32354 34.787150999999994 -83.322807 34.80543900000001 -83.302872 34.814987 -83.270233 34.839138000000005 -83.267891 34.839619 -83.250542 34.850075000000004 -83.250427 34.862292999999994 -83.235809 34.877990999999994 -83.243195 34.873729999999995 -83.232925 34.88909099999999 -83.219551 34.884079 -83.203636 34.910557 -83.182304 34.917561000000006 -83.158478 34.932190000000006 -83.155151 34.930386 -83.137688 34.940701000000004 -83.125763 34.936035000000004 -83.113228 34.954285 -83.127441 34.960803999999996 -83.121529 34.95459700000001 -83.115669 34.98407400000001 -83.100578 35.000277999999994 -83.106285 35.024204 -83.007278 35.055369999999996 -82.887695 35.085423000000006 -82.771347 35.091232000000005 -82.697357 35.097801000000004 -82.688034 35.121464 -82.68605 35.119457 -82.654495 35.14949 -82.57003 35.154560000000004 -82.524635 35.173500000000004 -82.466743 35.16955900000001 -82.43792 35.208241 -82.38961 35.18272399999999 -82.371376 35.182948999999994 -82.360123 35.192673 -82.350861 35.184189 -82.32077 35.195007000000004 -82.278328 35.193127000000004 -82.210175 35.188282 -81.971443 35.183116999999996 -81.87059 35.182472000000004 -81.765358 35.162853 -81.362175 35.163757000000004 -81.322823 35.151531000000006 -81.049301 35.132011000000006 -81.049042 35.105408 -81.028442 35.066483000000005 -81.065552 35.037200999999996 -81.039886 35.10124999999999 -80.927795 35.059734000000006 -80.894714 35.00201800000001 -80.840164 34.940639000000004 -80.785652 34.816113 -80.800064 34.815228000000005 -80.561546 34.814762 -80.325279 34.807919 -79.919952 34.805256 -79.685959 34.800663 -79.667503 34.63409 -79.455971 34.619061 -79.447144 34.304573000000005 -79.074501 33.948673 -78.655716 33.881992 -78.57972 33.865536000000006 -78.622856 33.853359 -78.586197 33.71619 -78.855133 33.57246000000001 -79.000938 33.430611 -79.121101 33.317088999999996 -79.150383 33.342265999999995 -79.158348 33.296870999999996 -79.271072 33.183521 -79.202141 33.141338000000005 -79.22979 33.154827 -79.348976 33.138794000000004 -79.298058 33.10453 -79.288101 33.013699 -79.410835 33.015842000000006 -79.582565 32.980796999999995 -79.617439 32.92493399999999 -79.587852 32.899071000000006 -79.607018 32.79406 -79.752518 32.790531 -79.907677 32.929783 -79.800056 32.859215000000006 -79.907333 32.914047 -79.930443 32.904236 -79.962311 32.81062300000001 -79.948174 32.733852 -79.891846 32.67724200000001 -79.896584 32.605605999999995 -79.996803 32.561417000000006 -80.210983 32.503883 -80.290833 32.511768000000004 -80.347351 32.65522 -80.391045 32.668980000000005 -80.416168 32.504772 -80.399979 32.510245999999995 -80.480881 32.557655 -80.550568 32.509677999999994 -80.539055 32.518692 -80.646584 32.498272 -80.64373 32.43084 -80.486244 32.37331399999999 -80.44297 32.318489 -80.460564 32.272621 -80.626198 32.285465 -80.678185 32.360016 -80.742134 32.473118 -80.799553 32.504864 -80.784958 32.516093999999995 -80.830688 32.532509000000005 -80.867348 32.400516999999994 -80.822037 32.247921000000005 -80.780731 32.067963000000006 -80.893082 32.105239999999995 -81.105042 32.117408999999995 -81.119278 32.190392 -81.114883 32.224247000000005 -81.147858 32.257515 -81.148338 32.276447000000005 -81.124214 32.332424 -81.132057 32.348274 -81.142052 32.338547000000005 -81.157646 32.37159 -81.179291 32.386639 -81.178421 32.420128000000005 -81.200096 32.464375000000004 -81.195328 32.520432 -81.236412 32.533749 -81.268158 32.55463399999999 -81.274475 32.567108000000005 -81.299156 32.57118199999999 -81.340576 32.58335099999999 -81.351662 32.581801999999996 -81.366875 32.588188 -81.36644 32.595707000000004 -81.385078 32.625434999999996 -81.412277 32.650642000000005 -81.399651 32.686531 -81.407364 32.701397 -81.420708 32.741637999999995 -81.407799 32.749645 -81.42321 32.756561000000005 -81.416245 32.785988 -81.430412 32.80933 -81.421005 32.82014100000001 -81.430481 32.831608 -81.424133 32.84151799999999 -81.432503 32.844414 -81.45549 32.871239 -81.45871 32.875930999999994 -81.483376 32.89756800000001 -81.465202 32.897411000000005 -81.477219 32.947063 -81.510406 32.95526099999999 -81.51001 32.959518 -81.49807 33.004658000000006 -81.492905 33.012637999999995 -81.508919 33.043774 -81.52977 33.043530000000004 -81.547829 33.060660999999996 -81.560204 33.070637000000005 -81.595993 33.087723 -81.61113 33.122787 -81.704445 33.144547 -81.74054 33.169685 -81.763573 33.195232000000004 -81.75975832.258446000000006 -80.767975 32.272003 -80.719254 32.21991 -80.666786 32.104488 -80.819435 32.258446000000006 -80.767975South Carolina45S AtlSC77987.8234910.6363486703.0928206.01258044.01688510.01798193.01268959.01234700.0277209.018092.01603425.094673.0455692.0337824.00.4840.516506464.033.010025 -94.61703536.492751999999996 -89.64540134.19665500000001 -94.461479 34.508326999999994 -94.452408 34.735504000000006 -94.44574 34.929050000000004 -94.439102 35.400454999999994 -94.428337 35.641003 -94.468269 35.760227 -94.485718 36.106753999999995 -94.542198 36.164444 -94.552895 36.478714 -94.607231 36.489338000000004 -94.617035 36.49095199999999 -94.080849 36.489716 -93.857323 36.489891 -93.59626 36.490196 -93.328163 36.490616 -93.297142 36.489819 -92.852104 36.489918 -92.777466 36.490855999999994 -92.522888 36.491596 -92.146164 36.491371 -92.127487 36.490955 -91.688416 36.490376 -91.45285 36.491039 -91.411659 36.487953000000005 -91.133827 36.489204 -90.804314 36.490962999999994 -90.581619 36.492751999999996 -90.224373 36.491814000000005 -90.150162 36.45741700000001 -90.137276 36.453896 -90.117226 36.422565000000006 -90.123833 36.404915 -90.116829 36.39738800000001 -90.080177 36.382553 -90.052063 36.362606 -90.050201 36.325333 -90.067635 36.300472 -90.049751 36.272273999999996 -90.066093 36.257996000000006 -90.109917 36.21207 -90.131218 36.196940999999995 -90.161308 36.172565000000006 -90.219223 36.161148 -90.232224 36.137089 -90.23484 36.118763 -90.263702 36.115905999999995 -90.284752 36.091656 -90.315239 35.989586 -90.37896 35.991158 -90.283455 35.996838 -89.963203 35.999877999999995 -89.721756 35.966324 -89.713135 35.93782 -89.664192 35.913799 -89.645401 35.894287000000006 -89.649338 35.885647000000006 -89.66465 35.911427 -89.714684 35.915012000000004 -89.737976 35.896812 -89.762909 35.884102 -89.766273 35.871418000000006 -89.757713 35.842037000000005 -89.701439 35.827515000000005 -89.700829 35.807036999999994 -89.735939 35.817420999999996 -89.759796 35.805553 -89.790382 35.774223000000006 -89.799904 35.758269999999996 -89.827042 35.748192 -89.859871 35.754836999999995 -89.909782 35.734268 -89.951035 35.712486 -89.952034 35.676266 -89.929741 35.655972000000006 -89.893402 35.673306 -89.865181 35.671062000000006 -89.857246 35.645222000000004 -89.849197 35.629745 -89.863838 35.633335 -89.877441 35.603104 -89.957047 35.578593999999995 -89.958031 35.546059 -89.921661 35.52923199999999 -89.931175 35.526900999999995 -89.947548 35.532291 -89.962273 35.561676000000006 -89.989586 35.552414 -90.033051 35.542846999999995 -90.040901 35.51244 -90.041817 35.445454 -89.999565 35.417103 -90.046783 35.41341 -90.060295 35.426506 -90.073936 35.472342999999995 -90.074844 35.478207 -90.08223 35.473568 -90.101959 35.442524000000006 -90.137276 35.423716999999996 -90.172676 35.384254 -90.167816 35.383044999999996 -90.140167 35.4076 -90.132469 35.41768999999999 -90.112244 35.418282000000005 -90.085159 35.406527999999994 -90.075478 35.381508 -90.087135 35.365982 -90.105621 35.345591999999996 -90.098701 35.314685999999995 -90.106346 35.30624400000001 -90.15699 35.282566 -90.169746 35.264056999999994 -90.152122 35.263847 -90.105942 35.254397999999995 -90.090103 35.212738 -90.068962 35.191833 -90.073303 35.166916 -90.062431 35.147385 -90.064537 35.12505 -90.082924 35.13653600000001 -90.14373 35.129611999999995 -90.164474 35.10864599999999 -90.178345 35.077827 -90.169083 35.040897 -90.195709 35.048458 -90.291809 35.000693999999996 -90.305351 34.978481 -90.299507 34.94976 -90.248169 34.938903999999994 -90.241898 34.920731 -90.242844 34.896511000000004 -90.266708 34.88269 -90.296272 34.864959999999996 -90.299446 34.851776 -90.301552 34.850266000000005 -90.322823 34.860577000000006 -90.341423 34.841038 -90.403931 34.832268 -90.42231 34.835353999999995 -90.433548 34.872643 -90.427841 34.88618099999999 -90.438087 34.88092399999999 -90.470528 34.857727 -90.474716 34.82521800000001 -90.451904 34.79966400000001 -90.466705 34.76075 -90.448868 34.741198999999995 -90.451431 34.726833 -90.485924 34.729855 -90.504417 34.748371000000006 -90.516968 34.765784999999994 -90.498734 34.789833 -90.501282 34.805603000000005 -90.516045 34.807323 -90.52726 34.790336999999994 -90.547745 34.713252999999995 -90.533279 34.702068 -90.513565 34.704254000000006 -90.469978 34.672039 -90.466225 34.638065 -90.508812 34.636894 -90.538963 34.65180599999999 -90.547546 34.685947 -90.539062 34.700287 -90.561058 34.645611 -90.5793 34.627815 -90.58799 34.604744 -90.577614 34.555649 -90.530617 34.543327000000005 -90.537148 34.532509000000005 -90.565681 34.520222000000004 -90.580345 34.496506 -90.59005 34.453945000000004 -90.574402 34.432998999999995 -90.579124 34.40459799999999 -90.60379 34.36591 -90.657242 34.330006 -90.657814 34.31797400000001 -90.679337 34.320145 -90.689377 34.3634 -90.681137 34.377871999999996 -90.687485 34.37216600000001 -90.75531 34.363913999999994 -90.761856 34.317719 -90.747757 34.278976 -90.758255 34.299957000000006 -90.792526 34.299347 -90.806419 34.277339999999995 -90.823837 34.229534 -90.83136 34.219162 -90.863411 34.250195000000005 -90.928436 34.23467599999999 -90.933708 34.20483 -90.921486 34.190544 -90.822922 34.166172 -90.80751 34.148658999999995 -90.828865 34.147544999999994 -90.846611 34.185649999999995 -90.928917 34.155804 -90.953346 34.125941999999995 -90.942245 34.102749 -90.906311 34.10095200000001 -90.866333 34.040710000000004 -90.886345 34.031288 -90.95047 34.010998 -90.973366 33.994606000000005 -90.975273 33.978874000000005 -90.961128 33.967461 -90.96479 33.960815 -90.986816 33.968372 -91.000259 33.990528 -91.009544 33.985699 -91.031059 34.006096 -91.069695 33.994468999999995 -91.088852 33.974644 -91.075706 33.936306 -91.018463 33.867081 -91.061371 33.843525 -91.054817 33.816586 -91.028854 33.798897 -90.990372 33.78533899999999 -90.984039 33.77154899999999 -90.995377 33.76397299999999 -91.018433 33.769554 -91.043404 33.786525999999995 -91.066391 33.776439999999994 -91.105415 33.780086999999995 -91.136986 33.771820000000005 -91.142891 33.723225 -91.138 33.71244 -91.128944 33.70823300000001 -91.104568 33.719357 -91.056213 33.70549 -91.038826 33.683216 -91.037834 33.662586000000005 -91.083771 33.677527999999995 -91.121048 33.718315000000004 -91.1633 33.708965000000006 -91.211678 33.690723000000006 -91.215141 33.669945 -91.205307 33.637032000000005 -91.154404 33.616161000000005 -91.15065 33.57724399999999 -91.168022 33.57468 -91.187805 33.590481 -91.22673 33.55635100000001 -91.227631 33.539276 -91.213486 33.538506 -91.204102 33.52334999999999 -91.182846 33.512012 -91.180405 33.473395999999994 -91.207642 33.459453999999994 -91.22715 33.443443 -91.232849 33.447388000000004 -91.18177 33.466644 -91.17173 33.504368 -91.174179 33.51178 -91.164978 33.493190999999996 -91.128799 33.469673 -91.118958 33.452831 -91.119713 33.443123 -91.130516 33.422112 -91.19883 33.414299 -91.204163 33.39183 -91.184982 33.388878000000005 -91.137634 33.414897999999994 -91.099129 33.462856 -91.0858 33.466206 -91.073761 33.460010999999994 -91.060982 33.431797 -91.061516 33.410179 -91.07869 33.393406 -91.106941 33.359402 -91.130424 33.322384 -91.141747 33.268505000000005 -91.122505 33.249210000000005 -91.102905 33.29235799999999 -91.076324 33.293575000000004 -91.053833 33.281921 -91.040428 33.245780999999994 -91.054543 33.225697 -91.092003 33.161602 -91.086319 33.145084 -91.095856 33.131069 -91.12133 33.150288 -91.177628 33.140465000000006 -91.195503 33.113224 -91.190536 33.090652000000006 -91.14679 33.065571000000006 -91.11779 33.04727200000001 -91.123985 33.040431999999996 -91.156685 33.021709 -91.160675 33.013039000000006 -91.162132 33.013476999999995 -91.254616 33.013419999999996 -91.427528 33.013874 -91.454353 33.010025 -92.063309 33.016701 -92.717079 33.018135 -92.978828 33.019238 -93.232376 33.021393 -93.478897 33.021152 -93.511742 33.022594 -93.809753 33.023289000000005 -94.03875 33.270325 -94.036507 33.555912000000006 -94.035927 33.577213 -94.061432 33.583954000000006 -94.086655 33.572998 -94.098701 33.567085000000006 -94.155167 33.593773 -94.159515 33.58507899999999 -94.205345 33.557987 -94.210884 33.561535000000006 -94.235367 33.585719999999995 -94.223038 33.592422 -94.237236 33.561736999999994 -94.274544 33.584605999999994 -94.272079 33.589332999999996 -94.278984 33.579853 -94.29882 33.556934 -94.302383 33.57313499999999 -94.328751 33.547684000000004 -94.370758 33.560303000000005 -94.395264 33.572661999999994 -94.372307 33.590042 -94.370628 33.593327 -94.379112 33.57495900000001 -94.393417 33.573486 -94.40657 33.59714099999999 -94.428467 33.596503999999996 -94.443329 33.604347000000004 -94.451553 33.616844 -94.436333 33.636444 -94.435913 33.631966000000006 -94.476486 33.939198000000005 -94.468376 34.19665500000001 -94.461479Arkansas05W S CenAR134875.0752867.3022350725.0651555.0891179.01133076.01217649.0849722.0764635.0153025.05096.0994289.072079.0298794.0210650.00.4820.518414226.028.939419 -94.04160333.023289000000005 -89.02175930.239372000000003 -93.707359 30.297387999999998 -93.699211 30.304916000000006 -93.729774 30.340872000000005 -93.759178 30.354145000000003 -93.759338 30.367411000000004 -93.747833 30.381788 -93.754944 30.408822999999998 -93.742561 30.43298 -93.721535 30.442633 -93.696571 30.462513 -93.703423 30.470046999999994 -93.697975 30.488628000000006 -93.714851 30.496240999999998 -93.707275 30.505114000000006 -93.714638 30.522858 -93.70546 30.545517000000004 -93.735306 30.568152999999995 -93.71788 30.587379 -93.717812 30.598834999999994 -93.69342 30.597831999999997 -93.671585 30.615795000000006 -93.692696 30.623424999999997 -93.684586 30.640040999999997 -93.692879 30.639691999999997 -93.677971 30.672859000000003 -93.659988 30.686802 -93.617607 30.710329 -93.612411 30.732547999999994 -93.61779 30.732010000000002 -93.607651 30.745789000000002 -93.618454 30.772183999999996 -93.585175 30.802040000000005 -93.581871 30.828344 -93.550682 30.842342000000002 -93.555641 30.845147999999995 -93.566444 30.860282999999995 -93.552803 30.871880000000004 -93.560844 30.886234 -93.568497 30.901932000000002 -93.564476 30.905333999999996 -93.546516 30.924885000000003 -93.549622 30.926970999999995 -93.529984 30.935820000000007 -93.52562 30.960731999999993 -93.532188 30.956884000000002 -93.537338 30.970190000000002 -93.548676 30.976177000000007 -93.572456 30.991690000000006 -93.560951 30.997270999999998 -93.570847 31.012923999999998 -93.567894 31.018062999999998 -93.564941 31.014140999999995 -93.547119 31.038908000000006 -93.507217 31.056979999999996 -93.525742 31.074670999999995 -93.516998 31.082373000000004 -93.544106 31.094751000000002 -93.543121 31.100536000000005 -93.559982 31.109342999999996 -93.556679 31.116072000000003 -93.535088 31.125924999999995 -93.528091 31.132441 -93.537506 31.159166 -93.544189 31.162943 -93.528328 31.176339999999996 -93.537018 31.178076000000004 -93.526932 31.185773999999995 -93.528923 31.190928999999997 -93.550591 31.17214 -93.576942 31.180199 -93.593941 31.199066000000002 -93.602921 31.229687 -93.590546 31.242188 -93.611 31.270032999999998 -93.611877 31.275805000000005 -93.616455 31.273903000000004 -93.630829 31.290262 -93.645592 31.286671 -93.656128 31.312679000000003 -93.681587 31.328385999999995 -93.67704 31.373827000000006 -93.634857 31.372394999999997 -93.661072 31.398329000000004 -93.664017 31.406130000000005 -93.687492 31.415921999999995 -93.694443 31.427735999999996 -93.696129 31.438131 -93.687004 31.446251000000004 -93.701927 31.461457999999993 -93.698418 31.459474999999998 -93.726784 31.485500000000002 -93.751244 31.490556999999995 -93.750435 31.495402999999996 -93.718994 31.520568999999995 -93.705795 31.521877000000003 -93.731659 31.537717999999998 -93.747543 31.530724000000006 -93.763306 31.533734999999993 -93.780128 31.559062999999995 -93.810516 31.577110000000005 -93.816322 31.590182999999996 -93.832619 31.615189 -93.835579 31.618092000000004 -93.819588 31.647965999999997 -93.814728 31.653767000000002 -93.806427 31.674566 -93.811844 31.711394999999996 -93.792267 31.707565000000002 -93.808769 31.712350999999998 -93.814949 31.730351999999996 -93.80999 31.753281 -93.831161 31.774637 -93.822067 31.802017000000006 -93.834328 31.817272000000003 -93.864822 31.850112999999993 -93.877403 31.87142 -93.881264 31.870065999999994 -93.892525 31.894454999999994 -93.899261 31.892593000000005 -93.923462 31.909701999999996 -93.917923 31.909456000000006 -93.93573 31.923164 -93.969986 31.946158999999994 -93.977211 31.977942 -94.004395 31.989134000000007 -94.009888 31.994512999999998 -94.035065 32.199448000000004 -94.034767 32.389224999999996 -94.035233 32.694812999999996 -94.040199 32.882346999999996 -94.041603 33.023289000000005 -94.03875 33.022594 -93.809753 33.021152 -93.511742 33.021393 -93.478897 33.019238 -93.232376 33.018135 -92.978828 33.016701 -92.717079 33.010025 -92.063309 33.013874 -91.454353 33.013419999999996 -91.427528 33.013476999999995 -91.254616 33.013039000000006 -91.162132 33.000294 -91.161865 32.935852 -91.20916 32.914162000000005 -91.198311 32.905022 -91.169701 32.91778600000001 -91.137177 32.937466 -91.129936 32.975224 -91.132355 32.987350000000006 -91.111816 32.987621000000004 -91.092674 32.953711999999996 -91.075592 32.877162999999996 -91.079529 32.841212999999996 -91.142151 32.76268 -91.156342 32.751125 -91.136467 32.749397 -91.09771 32.723518 -91.059029 32.663174 -91.139557 32.644852 -91.146263 32.597527 -91.110992 32.606387999999995 -91.063812 32.614352999999994 -91.04763 32.641502 -91.027466 32.642673 -91.007881 32.625977000000006 -90.996132 32.615466999999995 -90.998657 32.582672 -91.032326 32.576389000000006 -91.058868 32.561611 -91.073265 32.542159999999996 -91.063087 32.511641999999995 -90.995071 32.495281000000006 -90.99205 32.490814 -91.019684 32.496956 -91.037201 32.548637 -91.088783 32.524067 -91.118744 32.498569 -91.117683 32.446999000000005 -91.05851 32.442417000000006 -91.026909 32.452965000000006 -90.98745 32.440037000000004 -90.965485 32.419017999999994 -90.969986 32.397082999999995 -91.009209 32.366234000000006 -90.998863 32.356396000000004 -90.984566 32.345898000000005 -90.914925 32.381355 -90.885155 32.37965 -90.875351 32.305317 -90.916374 32.297405 -90.929245 32.303698999999995 -90.971657 32.297653 -90.980766 32.287132 -90.983818 32.269065999999995 -90.971016 32.223404 -90.977219 32.249438999999995 -91.041649 32.232742 -91.062462 32.232388 -91.087914 32.21488600000001 -91.100571 32.225605 -91.115952 32.205864000000005 -91.157265 32.171988999999996 -91.166847 32.144783000000004 -91.15654 32.134991 -91.108711 32.148579 -91.083008 32.134392000000005 -91.054047 32.158671999999996 -91.045311 32.184532000000004 -91.054474 32.169899 -91.024414 32.169262 -91.00383 32.134060000000005 -91.011284 32.10767 -91.041084 32.093993999999995 -91.073814 32.058552000000006 -91.06501 32.056843 -91.089302 32.088245 -91.125618 32.085674 -91.145584 32.06610499999999 -91.143013 32.043655 -91.086884 32.031994 -91.073135 32.021057 -91.07238 31.991827 -91.108002 31.988291000000004 -91.163033 31.914288999999997 -91.201431 31.878511000000003 -91.24437 31.865425000000002 -91.26458 31.835226000000006 -91.241272 31.818658999999997 -91.250618 31.827371999999997 -91.276688 31.861332000000004 -91.292534 31.862983999999997 -91.30336 31.843317 -91.334732 31.79567 -91.347122 31.770703999999995 -91.36702 31.763458 -91.336143 31.773764 -91.262573 31.759600000000006 -91.263878 31.749723000000003 -91.282509 31.758379000000005 -91.339798 31.753310999999997 -91.370384 31.751576999999997 -91.36496 31.716517999999994 -91.387833 31.654439999999994 -91.389069 31.625364000000005 -91.408287 31.626801 -91.45726 31.650729999999996 -91.49765 31.643704999999997 -91.50769 31.62178 -91.508759 31.604192999999995 -91.497032 31.602427000000006 -91.415268 31.586186999999995 -91.404137 31.562579999999997 -91.423462 31.542699999999996 -91.464355 31.534713999999994 -91.502838 31.52552 -91.506363 31.452915000000004 -91.507782 31.420205999999993 -91.473175 31.403899999999993 -91.465805 31.377611 -91.480721 31.375079999999997 -91.494591 31.391921999999994 -91.522896 31.409069000000002 -91.53405 31.434166000000005 -91.534683 31.43293 -91.552353 31.421235999999993 -91.567612 31.388059999999996 -91.559258 31.382580000000004 -91.534454 31.368703999999994 -91.544289 31.346815000000007 -91.542671 31.323285999999996 -91.505638 31.298687 -91.502357 31.282898000000003 -91.51696 31.270296000000002 -91.556801 31.277518999999998 -91.634094 31.270943000000003 -91.643562 31.240928999999994 -91.636879 31.213755000000006 -91.600845 31.178307000000004 -91.59137 31.127517999999995 -91.619995 31.081958999999998 -91.564857 31.057982999999993 -91.551964 31.032471 -91.57267 31.011781999999997 -91.627655 31.001186000000004 -91.632179 31.000283999999994 -91.1791 31.000240000000005 -91.056908 31.001368 -90.829613 31.001527999999993 -90.560158 31.002150999999998 -90.542557 31.005211000000003 -90.343567 31.007191000000006 -90.259285 31.007002 -89.833481 31.007261 -89.732643 31.001340999999996 -89.723549 30.984431999999998 -89.726707 30.975308999999996 -89.719749 30.965215999999998 -89.739449 30.949663 -89.748466 30.925923999999995 -89.740402 30.920857999999996 -89.75798 30.909921999999995 -89.745682 30.902608999999998 -89.746727 30.900285999999994 -89.763237 30.861897999999997 -89.765778 30.861393000000007 -89.78495 30.830344999999994 -89.774727 30.828918 -89.796021 30.812466 -89.796494 30.811511999999993 -89.81086 30.789536999999996 -89.824615 30.74798 -89.813278 30.742459999999994 -89.825493 30.732866 -89.823326 30.729174 -89.835541 30.712236000000004 -89.843979 30.703592 -89.83065 30.700361 -89.84127 30.679331000000005 -89.841713 30.675693999999993 -89.83532 30.666062999999994 -89.845375 30.670685000000006 -89.829453 30.651055999999997 -89.819283 30.649266999999995 -89.805466 30.624081000000004 -89.820236 30.553753 -89.790779 30.551056000000003 -89.772728 30.515429999999995 -89.755112 30.497646000000003 -89.732254 30.495846 -89.718994 30.481223999999997 -89.71312 30.478054 -89.695618 30.467995000000002 -89.694534 30.462525999999997 -89.683388 30.44516 -89.6754 30.399880999999993 -89.675308 30.378872 -89.65461 30.355097 -89.646629 30.355114 -89.633392 30.343235000000007 -89.62014 30.323566 -89.61853 30.311649000000003 -89.637024 30.295635000000004 -89.639114 30.290160999999998 -89.625885 30.256769000000006 -89.621605 30.247632999999993 -89.606255 30.241224000000003 -89.609947 30.194738 -89.57383 30.180817000000005 -89.7285 30.230897999999996 -89.759155 30.269656999999995 -89.943466 30.368784000000005 -90.075485 30.380756000000005 -90.23967 30.303650000000005 -90.308945 30.185677999999996 -90.424446 30.091879000000006 -90.395485 30.061852000000002 -90.275902 30.041409 -90.111473 30.053462999999994 -89.990479 30.155893000000006 -89.891159 30.105172999999994 -89.798203 30.158731000000003 -89.740028 30.120897 -89.724869 30.163185 -89.669144 30.122229000000004 -89.649338 30.055026999999995 -89.716782 30.010485000000003 -89.8489 29.951088 -89.820786 29.969201999999996 -89.714958 29.897323999999998 -89.712143 29.875474999999994 -89.627357 29.897953 -89.585808 30.008758999999998 -89.574326 30.044205000000005 -89.435806 29.985530999999995 -89.453575 29.951083999999994 -89.377747 29.940074999999993 -89.431 29.845741000000004 -89.402153 29.827894 -89.421104 29.796570000000003 -89.363991 29.782731999999996 -89.417374 29.830743999999996 -89.482185 29.754524000000004 -89.540443 29.766693000000004 -89.650528 29.710655000000003 -89.592819 29.697537999999994 -89.611778 29.664406 -89.511887 29.635962000000006 -89.479134 29.664947999999995 -89.597893 29.702751000000006 -89.676643 29.693869000000007 -89.695267 29.626320000000007 -89.635201 29.645964000000006 -89.728256 29.637164999999996 -89.748482 29.605813999999995 -89.723145 29.610033 -89.771713 29.471469999999997 -89.544571 29.401235999999997 -89.537018 29.397722 -89.384468 29.340675000000005 -89.337006 29.350447000000003 -89.264725 29.29759 -89.262505 29.348831000000004 -89.193352 29.290667999999997 -89.12989 29.211662000000004 -89.120178 29.223191999999997 -89.033218 29.163218999999998 -89.098228 29.146894000000003 -89.021759 29.085052000000005 -89.057709 29.135084000000006 -89.126495 29.082790000000003 -89.111359 29.05699 -89.153976 29.016448999999994 -89.144348 29.120942999999997 -89.241112 29.059235 -89.257446 28.939419 -89.394844 29.147987 -89.263237 29.179964 -89.319038 29.104266999999993 -89.339684 29.100149000000002 -89.388611 29.146038000000004 -89.393082 29.216097000000005 -89.467018 29.255514000000005 -89.459061 29.234772000000007 -89.493141 29.279352000000003 -89.61953 29.331536999999997 -89.610657 29.322316999999998 -89.794876 29.374066999999997 -89.753639 29.420692000000003 -89.821678 29.477407 -89.817459 29.472459999999998 -89.966667 29.503325000000004 -89.971855 29.493719 -90.006622 29.553633000000005 -90.113007 29.533593999999994 -90.137215 29.595093000000006 -90.151718 29.544514000000007 -90.208069 29.495723999999996 -90.174057 29.446938000000003 -90.036011 29.428061999999997 -90.055252 29.373985000000005 -90.029869 29.351208 -90.05587 29.308646999999993 -90.032928 29.321500999999998 -90.111565 29.214346000000006 -90.077805 29.223448000000005 -90.043037 29.176212000000007 -90.077728 29.098444 -90.227684 29.184421999999998 -90.263878 29.254514999999998 -90.242836 29.274933000000004 -90.27874 29.245307999999994 -90.284019 29.312726999999995 -90.347565 29.272121 -90.396347 29.325767999999997 -90.406746 29.352219000000005 -90.450432 29.303717000000006 -90.476387 29.304811 -90.611008 29.260701999999995 -90.583046 29.222738000000007 -90.621178 29.254065999999995 -90.649963 29.162341999999995 -90.638031 29.181691999999998 -90.683769 29.140046999999996 -90.676704 29.126712999999995 -90.782806 29.160397000000003 -90.772598 29.182114 -90.839287 29.137184000000005 -90.882545 29.181684000000004 -90.920319 29.220781000000002 -90.814201 29.256578000000005 -90.818459 29.267443 -90.897255 29.343298000000004 -90.936432 29.359800000000007 -91.078285 29.313914999999994 -91.102089 29.405705999999995 -91.213631 29.489372000000003 -91.262619 29.552368 -91.432915 29.531470999999996 -91.547752 29.641918000000004 -91.548378 29.643753000000004 -91.643433 29.768929999999997 -91.615654 29.725629999999995 -91.863136 29.765747000000005 -91.881058 29.808189 -91.846512 29.786683999999994 -91.823814 29.838835000000003 -91.827385 29.841680999999994 -91.966965 29.805848999999995 -91.973206 29.73053 -92.137024 29.773314999999997 -92.129974 29.762908999999993 -92.19957 29.606800000000007 -92.059631 29.541351000000006 -92.297241 29.588403999999997 -92.607285 29.788773000000006 -93.233505 29.758573999999996 -93.721832 29.725645 -93.801659 29.809765 -93.899734 29.850303999999994 -93.79129 30.005964000000006 -93.760201 30.060519999999997 -93.712479 30.095669 -93.715858 30.114739999999998 -93.708382 30.117929000000004 -93.696922 30.141226000000003 -93.698639 30.141253000000006 -93.685959 30.148231999999993 -93.683144 30.150807999999998 -93.699661 30.175675999999996 -93.696167 30.180860999999993 -93.704361 30.220305999999994 -93.714844 30.239372000000003 -93.70735929.596264000000005 -92.016243 29.650718999999995 -91.902428 29.578401999999997 -91.76973 29.577053000000006 -91.7015 29.534039000000007 -91.764847 29.494297000000003 -91.757996 29.486866000000006 -91.848969 29.596264000000005 -92.01624329.341691999999995 -91.341209 29.316238 -91.300385 29.381181999999995 -91.226448 29.297392000000002 -91.189171 29.323502000000005 -91.161461 29.283457 -91.17112 29.284537999999998 -91.18792 29.307766 -91.200356 29.273453000000003 -91.194954 29.266313999999994 -91.152489 29.245047 -91.163559 29.259704999999997 -91.13459 29.226777999999996 -91.128204 29.253806999999995 -91.276054 29.341691999999995 -91.34120929.258872999999994 -90.934479 29.241874999999993 -90.970749 29.272836999999996 -90.953529 29.276128999999997 -90.981285 29.21973 -90.980286 29.226169999999996 -90.944885 29.185575 -90.961929 29.184093000000004 -91.003143 29.224581 -90.994469 29.211037000000005 -91.04435 29.275409999999994 -91.033005 29.252899 -91.067589 29.190692999999996 -91.055458 29.226864000000006 -91.122459 29.293295 -91.127411 29.297325 -91.007271 29.323582000000002 -90.998856 29.258872999999994 -90.934479Louisiana22W S CenLA112836.00819978.724219973.01089882.01499269.02031386.02188587.01468894.01239339.0247348.049252.01641614.0175303.0480026.0243755.00.4810.519628817.024.955967 -87.62572531.002975000000006 -80.05114728.784925 -80.785889 28.736064999999996 -80.762642 28.785916999999998 -80.832329 28.785431000000003 -80.850929 28.398709999999994 -80.747414 27.869877000000002 -80.49247 27.825405000000003 -80.509583 27.845419000000007 -80.482079 27.703277999999997 -80.401604 27.555349000000007 -80.357605 27.264324000000002 -80.239868 27.185357999999994 -80.190323 27.214741000000004 -80.22422 27.241014000000007 -80.289864 27.247938000000005 -80.327019 27.212528000000006 -80.290649 27.202517 -80.221504 27.108739999999997 -80.148201 26.973709 -80.090599 26.973502999999994 -80.114845 26.796858 -80.051147 26.326020999999997 -80.08493 25.977166999999994 -80.128014 25.759654999999995 -80.193329 25.613369000000006 -80.301682 25.489627999999996 -80.330215 25.400810000000007 -80.3022 25.249505999999997 -80.417038 25.191820000000007 -80.421028 25.211920000000006 -80.552094 25.151897000000005 -80.694038 25.185230000000004 -80.85701 25.130098000000004 -80.976082 25.133785000000003 -81.119217 25.164288 -81.14843 25.268479999999997 -81.183983 25.320368000000002 -81.14077 25.214028999999996 -81.011765 25.202136999999993 -80.951233 25.246325999999996 -80.915482 25.322063 -80.974487 25.396433000000002 -81.143524 25.680716000000004 -81.258575 25.710038999999995 -81.20015 25.802723 -81.256409 25.914282 -81.530937 25.923204 -81.718483 25.999798 -81.705887 26.110792000000004 -81.794907 26.284103 -81.814049 26.331834999999998 -81.849541 26.439195999999995 -81.864403 26.467205000000007 -81.942207 26.517027 -81.968307 26.534626000000003 -81.928963 26.642636999999993 -81.884468 26.709919 -81.774109 26.663417999999993 -81.897293 26.550365 -81.944641 26.524323999999993 -82.02166 26.715442999999993 -82.083847 26.766623999999993 -82.068459 26.866366999999997 -82.051956 26.921446000000003 -82.098061 26.962719000000007 -81.991631 27.031345 -81.979385 27.031341999999995 -81.993042 26.976213 -82.012878 26.936725999999993 -82.153397 27.004071999999994 -82.257645 27.024220999999997 -82.282364 26.997569999999996 -82.257767 26.913353 -82.176682 26.789783 -82.154015 26.849542999999997 -82.290024 26.948556999999994 -82.355614 26.998177999999996 -82.398354 26.947598999999997 -82.368851 26.903291999999993 -82.343811 26.946956999999998 -82.380219 27.236664000000005 -82.507111 27.259951 -82.531311 27.210125000000005 -82.514664 27.273954000000003 -82.570137 27.331478000000004 -82.532921 27.386359999999996 -82.565742 27.473528 -82.686104 27.503142999999994 -82.639069 27.493270999999993 -82.666008 27.524114999999995 -82.681885 27.477749000000003 -82.488449 27.511673000000002 -82.514381 27.522543 -82.427361 27.512009000000006 -82.575752 27.536323999999993 -82.638947 27.552398999999994 -82.569786 27.581925999999996 -82.554443 27.554879999999997 -82.626556 27.607794 -82.540222 27.643703000000002 -82.552681 27.791323000000006 -82.404564 27.905918 -82.399002 27.939856000000006 -82.461182 27.821644000000006 -82.483315 27.830928999999998 -82.51078 27.935429 -82.539177 28.028550999999993 -82.645744 28.006866000000002 -82.650864 28.045873999999998 -82.698517 28.010217999999995 -82.672897 27.975055999999995 -82.700844 27.966285999999997 -82.64492 27.940264 -82.725662 27.878159999999994 -82.564445 27.848225 -82.623833 27.715418 -82.644798 27.705280000000002 -82.678505 27.829351000000003 -82.794014 27.717466 -82.72834 27.685559999999995 -82.74118 27.850340000000003 -82.84446 28.172736999999998 -82.77932 28.428231999999994 -82.673653 28.692483999999993 -82.636253 28.808122999999995 -82.681557 28.814018000000004 -82.636696 28.884451 -82.636795 29.008409999999998 -82.755493 29.154886000000005 -82.802322 29.179143999999994 -83.036903 29.265411 -83.074081 29.299412000000004 -83.142357 29.327944000000002 -83.109146 29.343441 -83.174782 29.433701999999997 -83.234474 29.519644 -83.380173 29.669376 -83.405113 29.737100999999996 -83.550583 29.910746000000003 -83.654312 30.077274000000003 -83.971855 30.099740999999995 -84.074738 30.081518000000003 -84.147964 30.107906 -84.233177 30.069419999999994 -84.354027 29.977183999999994 -84.360519 29.991586999999996 -84.43779 29.959339 -84.433205 29.946934 -84.339043 29.909959999999998 -84.347015 29.929419999999993 -84.464638 29.746649000000005 -84.858124 29.777760999999998 -84.928604 29.719708999999995 -84.988373 29.701345000000003 -85.214844 29.682806 -85.36496 29.776556 -85.409683 29.862859999999998 -85.414131 29.875206000000006 -85.393074 29.794155000000003 -85.402626 29.691041999999996 -85.358124 29.701498 -85.306671 29.809586999999993 -85.300606 29.923595000000006 -85.384872 30.092388 -85.628571 30.098090999999997 -85.568604 30.021659999999997 -85.471436 30.031349000000006 -85.415092 30.045551000000003 -85.432465 30.024067000000002 -85.382774 30.036083000000005 -85.382736 30.058364999999995 -85.395752 30.050961 -85.464394 30.131484999999998 -85.529793 30.178572000000003 -85.7099 30.251490000000004 -85.66613 30.250951999999998 -85.60025 30.310806 -85.56955 30.264861999999994 -85.717201 30.296729999999997 -85.752777 30.280158999999998 -85.850487 30.232613 -85.830009 30.228745000000004 -85.757988 30.128639000000007 -85.726463 30.274229000000005 -85.987076 30.387459000000007 -86.387512 30.409773 -86.505363 30.405812999999995 -86.388161 30.399688999999995 -86.240089 30.428329000000005 -86.241623 30.385603000000003 -86.1147 30.426264000000003 -86.122993 30.487657999999996 -86.219666 30.461968999999996 -86.387932 30.501040000000003 -86.45269 30.423451999999997 -86.610283 30.417765000000003 -86.79039 30.355022000000005 -87.193413 30.463367000000005 -86.932549 30.514238000000006 -87.014435 30.590237000000002 -86.986229 30.587272999999996 -87.019615 30.450367 -87.069305 30.564471999999995 -87.124565 30.557541 -87.171585 30.464836000000005 -87.160133 30.357185 -87.273926 30.323470999999998 -87.424103 30.40204 -87.409279 30.431301000000005 -87.346832 30.456971999999993 -87.34742 30.481504 -87.418839 30.531194999999997 -87.445374 30.556298999999996 -87.422089 30.619905000000003 -87.393303 30.667823999999996 -87.398666 30.692618999999993 -87.418915 30.705612000000002 -87.460159 30.748301999999995 -87.526619 30.785506999999996 -87.541916 30.848110000000005 -87.615929 30.876717 -87.625725 30.954178 -87.589882 31.002449 -87.598595 31.002975000000006 -87.163147 30.998011000000005 -86.779404 30.997911000000002 -86.701897 30.991358000000005 -86.383972 30.995045000000005 -86.181534 30.993146999999993 -86.031883 31.000816 -85.486664 31.000820000000004 -85.485077 31.001068000000004 -85.001678 30.979134000000002 -85.000214 30.963477999999995 -84.97364 30.926907 -84.969086 30.894769999999994 -84.937851 30.846733 -84.927002 30.802435000000003 -84.93264 30.775897999999998 -84.926971 30.753899000000004 -84.915421 30.743697999999995 -84.888367 30.714312000000007 -84.864662 30.712473000000003 -84.863083 30.693897000000007 -84.374542 30.690224 -84.281761 30.678381 -84.075668 30.675341000000003 -84.000839 30.660292 -83.737961 30.650582999999997 -83.609177 30.634096 -83.31073 30.633077999999998 -83.301445 30.621129999999994 -83.132576 30.595502999999994 -82.696503 30.588835000000003 -82.583107 30.582468000000006 -82.463287 30.577084 -82.412247 30.566845 -82.221199 30.531214000000006 -82.238556 30.502739000000005 -82.219528 30.489782000000005 -82.199348 30.42362 -82.205727 30.368397 -82.180397 30.361057000000002 -82.164803 30.363557999999998 -82.052933 30.378668000000005 -82.038521 30.433831999999995 -82.046265 30.442642000000006 -82.035286 30.477481999999995 -82.022675 30.570755000000005 -82.005966 30.598455 -82.013817 30.650677 -82.045074 30.757299000000003 -82.032043 30.764022999999995 -82.01313 30.791086000000007 -82.015701 30.778118000000006 -81.981644 30.795773999999994 -81.961716 30.820198000000005 -81.953194 30.824016999999998 -81.94397 30.813242000000002 -81.907684 30.828075 -81.899307 30.798851 -81.873169 30.787851000000003 -81.803368 30.761351000000005 -81.776878 30.769397999999995 -81.757881 30.763655 -81.736847 30.745133999999993 -81.716942 30.728846000000004 -81.642654 30.731538999999998 -81.628159 30.716085000000007 -81.60495 30.724650999999994 -81.601349 30.706340999999995 -81.536774 30.721216 -81.528778 30.598367999999994 -81.49897 30.555975000000004 -81.518303 30.454525000000004 -81.457718 30.380301000000003 -81.480988 30.356947000000005 -81.443451 30.246539999999996 -81.432961 29.912806000000003 -81.302963 29.828992999999997 -81.316696 29.737694000000005 -81.243996 29.668774 -81.233978 29.429985000000002 -81.1101 29.351543000000007 -81.097275 28.784925 -80.78588930.399535999999998 -86.833923 30.403769999999994 -86.791595 30.414351999999994 -86.620872 30.406591000000006 -86.534805 30.400948 -86.52282 30.393187999999995 -86.532692 30.402359000000004 -86.738686 30.390366 -86.793007 30.386838999999995 -86.834625 30.321231999999995 -87.242378 30.321231999999995 -87.267075 30.332520000000002 -87.290352 30.339573 -87.286118 30.334635000000006 -87.202171 30.351566000000005 -87.139381 30.369202 -87.047676 30.381195000000005 -86.929161 30.399535999999998 -86.83392328.788576000000006 -80.736061 28.821799999999996 -80.763557 28.895123999999996 -80.817406 29.013130000000004 -80.891304 29.071560000000005 -80.916512 29.061249000000004 -80.899323 28.991361999999995 -80.862663 28.788576000000006 -80.73606128.784098 -80.726128 28.589879999999994 -80.579918 28.463184 -80.526176 28.408979000000002 -80.587883 28.412378000000004 -80.621857 28.548378 -80.577675 28.603649000000004 -80.599358 28.618378000000007 -80.660271 28.588076 -80.692108 28.618686999999994 -80.78067 28.687444999999997 -80.786156 28.706346999999994 -80.735222 28.736614000000003 -80.754295 28.657073999999994 -80.641426 28.784098 -80.72612828.581490000000002 -80.68885 28.600616000000002 -80.654022 28.573291999999995 -80.609421 28.427130000000005 -80.662956 28.301556000000005 -80.667336 28.144653000000005 -80.605797 28.385118000000006 -80.721268 28.581490000000002 -80.6888526.585724 -82.102127 26.497208 -82.067139 26.493585999999993 -82.097641 26.642279000000002 -82.135895 26.683082999999996 -82.183495 26.693342 -82.128838 26.585724 -82.10212725.354546 -80.24968 25.157832999999997 -80.355888 24.955967 -80.588036 25.211134 -80.353287 25.267585999999994 -80.330521 25.296104 -80.361824 25.354546 -80.24968Florida12S AtlFL139852.12330456.7971.2937926E73511825.05134869.06261719.06676207.04943568.04468021.0818546.0116352.05810467.0356769.01683987.0675050.00.4840.5161603894.041.69744499999999 -90.4080248.173923 -82.41992248.173923 -88.497459 48.033287 -88.625252 47.960361000000006 -88.901466 47.850761000000006 -89.028534 47.82418100000001 -89.139793 47.844719 -89.192825 47.88396499999999 -89.201698 47.93933899999999 -89.156013 48.173923 -88.49745947.290257 -88.500565 47.355976 -88.43779 47.447922000000005 -88.211288 47.47089 -87.78801 47.416045999999994 -87.704269 47.39312000000001 -87.737396 47.35809699999999 -87.916931 47.200829 -88.222168 46.988167000000004 -88.41272 47.111546000000004 -88.470543 47.134838 -88.594139 47.243668000000014 -88.595512 47.290257 -88.50056545.96948599999999 -85.859734 45.95799600000001 -85.914841 45.91820899999999 -85.916992 45.96423300000001 -86.067764 45.946957 -86.259178 45.905708000000004 -86.315498 45.834419 -86.343658 45.762767999999994 -86.458138 45.748980999999986 -86.529251 45.72411299999999 -86.521873 45.710194 -86.575989 45.62125 -86.629654 45.65006600000001 -86.684921 45.692532 -86.696785 45.81390400000001 -86.584595 45.82609600000001 -86.76133 45.71480600000001 -86.901489 45.69627800000001 -87.123627 45.55482900000001 -87.260582 45.42396500000001 -87.332108 45.16274999999999 -87.583755 45.108517000000006 -87.592407 45.140690000000006 -87.672707 45.176624000000004 -87.729561 45.199093000000005 -87.736092 45.211693 -87.721519 45.236794 -87.719559 45.247108 -87.705032 45.27222800000001 -87.704361 45.34819400000001 -87.645248 45.36188100000001 -87.64357 45.39129600000001 -87.689484 45.352924 -87.759926 45.358349000000004 -87.827896 45.346176000000014 -87.841171 45.370193 -87.861984 45.37210099999999 -87.868423 45.36211399999999 -87.873863 45.365883 -87.883499 45.406147000000004 -87.849419 45.44512900000001 -87.860153 45.46649199999999 -87.813499 45.4991 -87.789268 45.54455899999999 -87.805023 45.568625999999995 -87.828484 45.568554000000006 -87.786194 45.60042200000001 -87.774956 45.613235 -87.775925 45.654487999999986 -87.819817 45.66542799999999 -87.816933 45.67595299999999 -87.780823 45.68413899999999 -87.777351 45.701362999999986 -87.801033 45.71143000000001 -87.80143 45.72245799999999 -87.842239 45.75074000000001 -87.873505 45.766491 -87.969055 45.79508999999999 -87.989944 45.786156000000005 -88.051514 45.79157599999999 -88.088608 45.819447 -88.129822 45.834923 -88.121658 45.87368799999999 -88.065292 45.891850000000005 -88.095634 45.92066199999999 -88.093719 45.926334 -88.111259 45.93634 -88.150307 45.953564 -88.180061 45.947948 -88.214859 45.96710200000001 -88.257034 45.961989999999986 -88.299019 45.966758999999996 -88.32119 45.99463299999999 -88.369804 45.98346699999999 -88.403389 46.000805000000014 -88.454185 45.999194999999986 -88.483681 46.013003999999995 -88.49395 46.018654 -88.51548 46.01934399999999 -88.548225 46.00900300000001 -88.575226 46.015559999999994 -88.597404 45.99416400000001 -88.615372 45.99343099999999 -88.643539 46.02018699999999 -88.677254 46.018967 -88.703476 46.02962500000001 -88.72628 46.02119099999999 -88.772888 46.032658 -88.777351 46.036404000000005 -88.793686 46.026848 -88.804268 46.073646999999994 -88.925064 46.100437 -88.985168 46.145691 -89.09967 46.30407700000001 -89.924973 46.34048100000001 -90.111488 46.365207999999996 -90.115005 46.39395099999999 -90.141624 46.442432 -90.161217 46.506348 -90.211349 46.50884199999999 -90.258224 46.52253300000001 -90.269608 46.525104999999996 -90.300003 46.54435000000001 -90.302216 46.55161699999999 -90.31353 46.53971100000001 -90.385345 46.56866500000001 -90.40802 46.678687999999994 -90.018692 46.76899 -89.886086 46.824768000000006 -89.791084 46.850266000000005 -89.386574 46.923439 -89.214455 46.996669999999995 -89.125053 46.997169000000014 -88.994743 47.03099399999999 -88.929558 47.104625999999996 -88.884705 47.225887 -88.629379 47.13118700000001 -88.617981 47.10657900000001 -88.511093 47.03266099999999 -88.512871 46.99080699999999 -88.44104 46.92837499999999 -88.445839 46.855221 -88.476395 46.799465 -88.446487 46.945965 -88.177704 46.90103099999999 -88.189064 46.91194200000001 -88.03656 46.90984 -87.900528 46.836929 -87.663635 46.50805700000001 -87.371399 46.50153700000001 -87.110535 46.53635800000001 -87.006256 46.44442000000001 -86.871231 46.486694 -86.759338 46.42231799999999 -86.638062 46.56113400000001 -86.462227 46.67308399999999 -86.147942 46.65529599999999 -86.096573 46.694828 -85.857376 46.67416800000001 -85.503716 46.75676300000001 -85.22998 46.770927 -84.954681 46.69431700000001 -85.026886 46.549004 -85.01889 46.50555800000001 -85.051567 46.476425000000006 -85.016556 46.48782299999999 -84.931244 46.444035000000014 -84.803589 46.482922 -84.629761 46.407906 -84.572617 46.480637 -84.415924 46.488646999999986 -84.311577 46.248703000000006 -84.181618 46.207291 -84.273102 46.17142899999999 -84.247002 46.17608999999999 -84.119713 46.12892500000001 -84.029564 46.09445199999999 -84.061966 46.02596700000001 -83.989494 46.005882000000014 -83.901947 45.96021999999999 -83.906456 45.978519000000006 -84.113258 45.99917199999999 -84.354454 45.978329 -84.501595 46.038216000000006 -84.616798 46.03590399999999 -84.688972 45.85566700000001 -84.731682 45.890625 -84.851044 46.024742 -85.061562 46.10004799999999 -85.378151 46.101916999999986 -85.509445 45.972881 -85.655281 45.96948599999999 -85.85973446.01401100000001 -83.854675 45.988392000000005 -83.801102 46.02731700000001 -83.756416 46.036170999999996 -83.673592 46.071774000000005 -83.680313 46.08408700000001 -83.732445 46.103950999999995 -83.649887 46.08849699999999 -83.5895 46.01176799999999 -83.533997 45.987526 -83.473198 45.92569399999999 -83.516167 45.91748000000001 -83.579819 45.953575 -83.629707 45.936745 -83.804878 45.99742900000001 -83.852806 45.970833 -83.885887 46.01401100000001 -83.85467541.765465000000006 -86.834801 41.90740600000001 -86.617569 42.126408 -86.49881 42.24938599999999 -86.374252 42.42229499999999 -86.28495 42.77480299999999 -86.217812 43.12102899999999 -86.273781 43.47515899999999 -86.463127 43.66318100000001 -86.541222 43.772659000000004 -86.447731 43.766636000000005 -86.404266 43.781452 -86.434021 43.82011800000001 -86.428734 43.95017999999999 -86.459465 43.94558699999999 -86.438065 44.053616000000005 -86.518517 44.183201 -86.386337 44.351226999999994 -86.271866 44.52227400000001 -86.237946 44.700733000000014 -86.25853 44.734443999999996 -86.108391 44.777930999999995 -86.082825 44.850616 -86.09787 44.89826199999999 -86.06736 44.98597699999999 -85.79567 45.196529 -85.61013 45.18056100000001 -85.56543 44.95836299999999 -85.652924 44.778435 -85.637962 44.763161 -85.526009 44.86053799999999 -85.451279 45.01060100000001 -85.384796 45.21159 -85.390167 45.273537000000005 -85.373177 45.32037700000001 -85.305405 45.370216 -85.092804 45.37316899999999 -84.98584 45.40988899999999 -84.921623 45.464642 -85.081757 45.569771 -85.120384 45.630177 -85.077957 45.683704000000006 -84.983353 45.73773600000001 -84.971977 45.780293 -84.724136 45.653625000000005 -84.46524 45.665595999999994 -84.321434 45.63089400000001 -84.205544 45.57133099999999 -84.135216 45.498737000000006 -84.105896 45.49176 -83.92289 45.409435 -83.782814 45.41238000000001 -83.712326 45.34948700000001 -83.592377 45.36078599999999 -83.49585 45.328922000000006 -83.489616 45.27289200000001 -83.394043 45.25716800000001 -83.420784 45.213627 -83.39872 45.09860599999999 -83.312737 45.052761000000004 -83.444466 45.01111599999999 -83.433998 44.997871 -83.464928 44.92628500000001 -83.429382 44.860634000000005 -83.319756 44.703171 -83.280846 44.515446 -83.320068 44.335117 -83.356995 44.261257 -83.529175 44.17010099999999 -83.56826 44.07047700000001 -83.598427 43.99714700000001 -83.704819 43.96282199999999 -83.873627 43.916977 -83.918388 43.698261 -83.938141 43.59962100000001 -83.699196 43.60739899999999 -83.654648 43.72592499999999 -83.530945 43.70282399999999 -83.494286 43.745723999999996 -83.466446 43.844437 -83.367203 43.94044500000001 -83.326065 44.06994599999999 -82.940208 44.03355400000001 -82.806038 43.97249600000001 -82.727966 43.787848999999994 -82.618561 43.69454999999999 -82.605812 43.172225999999995 -82.503899 42.97243499999999 -82.419922 42.898651 -82.472038 42.76286300000001 -82.473328 42.634018 -82.518272 42.63169500000001 -82.645966 42.66935000000001 -82.634102 42.681194000000005 -82.729889 42.635761 -82.820488 42.61289199999999 -82.802444 42.495720000000006 -82.888222 42.458031000000005 -82.874992 42.36300299999999 -82.929474 42.292666999999994 -83.107666 42.115706999999986 -83.193947 42.03393600000001 -83.19014 41.725081999999986 -83.482758 41.71699100000001 -83.764015 41.71594200000001 -83.868698 41.707989 -84.359261 41.7071 -84.384445 41.69744499999999 -84.790421 41.760909999999996 -84.788521 41.76182600000001 -84.82605 41.76281700000001 -85.193169 41.763531 -85.297234 41.76257699999999 -85.65947 41.763485 -85.799232 41.764579999999995 -86.068298 41.764815999999996 -86.234558 41.76549499999999 -86.525162 41.765465000000006 -86.834801Michigan26E N CenMI147135.82112547.9129295297.02439171.03419331.04512781.04782516.03388716.03327685.0429086.066653.04166196.0374341.01138730.0717162.00.4850.5151735861.044.35372899999999 -116.062549.0 -104.0425844.70223999999999 -111.474632 44.691494000000006 -111.480011 44.67010099999999 -111.4599 44.652634000000006 -111.457474 44.64078900000001 -111.469376 44.637767999999994 -111.506897 44.616051 -111.500954 44.593277 -111.513733 44.55126999999999 -111.492111 44.55002200000001 -111.462036 44.538002000000006 -111.458534 44.536224000000004 -111.481781 44.52877799999999 -111.489449 44.55294799999999 -111.566437 44.543071999999995 -111.604454 44.550835000000006 -111.684067 44.53384399999999 -111.716202 44.51890900000001 -111.766121 44.51854700000001 -111.791809 44.504065999999995 -111.807037 44.55635100000001 -111.871696 44.549812 -111.939575 44.529762000000005 -111.977005 44.53513000000001 -112.022797 44.52293 -112.02626 44.52869799999999 -112.058548 44.518317999999994 -112.099075 44.52833899999999 -112.123367 44.53153599999999 -112.19883 44.53858199999999 -112.216934 44.55957799999999 -112.229568 44.560058999999995 -112.255844 44.54178999999999 -112.281509 44.525188000000014 -112.341675 44.49726899999999 -112.339745 44.44936000000001 -112.366753 44.449375 -112.419922 44.46892500000001 -112.457687 44.463089 -112.501007 44.477588999999995 -112.53849 44.48089200000001 -112.652351 44.49702500000001 -112.713486 44.484409 -112.732872 44.47400999999999 -112.779022 44.458099000000004 -112.795387 44.42117300000001 -112.825851 44.39490900000001 -112.817871 44.364292000000006 -112.816559 44.35372899999999 -112.843437 44.370068 -112.869942 44.39294100000001 -112.886467 44.407279999999986 -112.937439 44.43562700000001 -112.984406 44.43780100000001 -113.011169 44.45270199999999 -113.005814 44.48186100000001 -113.019463 44.510695999999996 -113.006866 44.53304299999999 -113.036972 44.556377 -113.038811 44.582764 -113.082184 44.624371 -113.053436 44.67560599999999 -113.072289 44.69599500000001 -113.098099 44.71525199999999 -113.100845 44.737457000000006 -113.126572 44.761517 -113.137413 44.811916 -113.239471 44.810562000000004 -113.256287 44.780304 -113.31781 44.779076 -113.33976 44.80764400000001 -113.349152 44.833775 -113.420502 44.851315 -113.444695 44.930744000000004 -113.495308 44.939648000000005 -113.486465 44.940848999999986 -113.462532 44.949596000000014 -113.447884 44.998267999999996 -113.440147 45.027523 -113.45797 45.04342299999999 -113.454552 45.05839499999999 -113.48542 45.071293 -113.489273 45.082137999999986 -113.519722 45.107910000000004 -113.509338 45.10762399999999 -113.551384 45.117785999999995 -113.573486 45.13462100000001 -113.570694 45.14981800000001 -113.593208 45.18106800000001 -113.600037 45.20686699999999 -113.644699 45.26236 -113.689224 45.27786599999999 -113.687813 45.321608999999995 -113.738182 45.382464999999996 -113.74041 45.410252000000014 -113.774124 45.44571300000001 -113.78476 45.477787000000006 -113.768265 45.50713300000001 -113.7714 45.51694499999999 -113.780029 45.51498799999999 -113.832809 45.583809 -113.802849 45.600716000000006 -113.821579 45.60964200000001 -113.85112 45.61357100000001 -113.902397 45.63733300000001 -113.901291 45.655204999999995 -113.922623 45.671291 -113.925789 45.67945900000001 -113.963234 45.69745599999999 -113.970238 45.68641299999999 -114.00856 45.672459 -114.018967 45.652592 -114.010078 45.64085399999999 -114.01712 45.625225 -114.055603 45.58645999999999 -114.082054 45.57120900000001 -114.117226 45.550465 -114.131134 45.544005999999996 -114.171753 45.52799999999999 -114.193893 45.53537399999999 -114.241081 45.503029 -114.246964 45.48594299999999 -114.261322 45.45750799999999 -114.325516 45.46346700000001 -114.349327 45.485825000000006 -114.370537 45.49909199999999 -114.418129 45.52771799999999 -114.432632 45.547932 -114.461784 45.54673399999999 -114.495667 45.558277000000004 -114.526466 45.548823999999996 -114.559998 45.59648100000001 -114.540031 45.62435500000001 -114.563751 45.652477000000005 -114.500816 45.67414099999999 -114.509781 45.694484999999986 -114.496635 45.72308000000001 -114.53405 45.746082 -114.541031 45.762482000000006 -114.562614 45.81014999999999 -114.516449 45.84276600000001 -114.498238 45.83955 -114.472878 45.85270299999999 -114.442307 45.84653499999999 -114.406601 45.870968000000005 -114.391914 45.910731999999996 -114.412605 45.921558000000005 -114.428535 45.95406 -114.404366 45.972054000000014 -114.411522 45.98988700000001 -114.483528 46.00984600000001 -114.473602 46.02349100000001 -114.493393 46.050895999999995 -114.464828 46.08231000000001 -114.455101 46.107437000000004 -114.47644 46.11622199999999 -114.505638 46.136143000000004 -114.518013 46.157497000000006 -114.508682 46.15534199999999 -114.466087 46.169048000000004 -114.439949 46.22033300000001 -114.438622 46.24386200000001 -114.471901 46.25304 -114.472862 46.28478999999999 -114.430862 46.39299 -114.408859 46.39962399999999 -114.39608 46.428257 -114.383087 46.487449999999995 -114.409775 46.506203 -114.359528 46.51746700000001 -114.349174 46.58795900000001 -114.342377 46.622917 -114.323769 46.654304999999994 -114.33374 46.661674000000005 -114.383072 46.645793999999995 -114.44059 46.62365299999999 -114.483772 46.637969999999996 -114.539444 46.62912800000001 -114.609879 46.66090399999999 -114.643791 46.67100099999999 -114.644089 46.687186999999994 -114.624977 46.734802 -114.672935 46.73384100000001 -114.697479 46.695212999999995 -114.747154 46.70312100000001 -114.781967 46.755798 -114.776878 46.76661300000001 -114.793076 46.77562 -114.839836 46.79712699999999 -114.865646 46.799515000000014 -114.901367 46.85252800000001 -114.947449 46.89096799999999 -114.939606 46.90724599999999 -114.923164 46.92529300000001 -114.963768 46.958889 -115.00061 46.96308099999999 -115.036369 46.97343799999999 -115.054672 47.02660399999999 -115.080368 47.06362899999999 -115.134537 47.09182000000001 -115.147713 47.09764899999999 -115.171524 47.12410399999999 -115.192101 47.17962600000001 -115.295258 47.24522400000001 -115.324249 47.25509600000001 -115.342682 47.263667999999996 -115.407227 47.27444800000001 -115.425659 47.28171900000001 -115.500946 47.292057 -115.522079 47.334686000000005 -115.554535 47.370075000000014 -115.598549 47.38011599999999 -115.637794 47.399238999999994 -115.665489 47.42254600000001 -115.749336 47.43403599999999 -115.749115 47.44537399999999 -115.731491 47.44924900000001 -115.655098 47.457863 -115.642197 47.475303999999994 -115.639153 47.489609 -115.69178 47.520962 -115.700531 47.53376 -115.741837 47.59079 -115.691093 47.616150000000005 -115.697289 47.63995 -115.73307 47.69562500000001 -115.732666 47.70980499999999 -115.774727 47.744911 -115.789536 47.75635500000001 -115.835739 47.805256000000014 -115.84832 47.827526000000006 -115.868805 47.841148000000004 -115.902916 47.867199 -115.936836 47.925217 -115.997925 47.965014999999994 -116.024307 47.976269 -116.052483 48.208549000000005 -116.054497 48.498726000000005 -116.055679 48.99999600000001 -116.0625 49.0 -114.728333 49.0 -114.0625 48.99999600000001 -112.1875 49.0 -111.281876 49.0 -110.75 48.99999600000001 -109.5 48.99999600000001 -108.25 48.99999600000001 -107.1875 48.99999600000001 -106.125 48.99999600000001 -105.0625 49.0 -104.0625 48.64579800000001 -104.051826 48.390995000000004 -104.05162 48.00006099999999 -104.047935 47.400002 -104.046822 47.33381700000001 -104.045441 46.64293699999999 -104.046951 46.54253 -104.046219 46.280876000000006 -104.047348 45.942993 -104.048416 45.88305299999999 -104.049026 45.212886999999995 -104.043358 44.997817999999995 -104.04258 44.997349000000014 -104.059349 45.001091 -105.04126 44.999832 -105.084465 44.99722700000001 -106.020576 44.996173999999996 -106.258644 44.99981299999999 -107.893715 45.000159999999994 -108.258568 44.99764300000001 -108.624573 44.99958000000001 -109.798653 45.00285299999999 -109.994789 44.99868799999999 -110.392006 44.99234799999999 -110.428894 44.995766 -111.05265 44.66456199999999 -111.050842 44.47339600000001 -111.050789 44.486198 -111.093857 44.500832 -111.128143 44.52797699999999 -111.133583 44.54526100000001 -111.169464 44.564926000000014 -111.177986 44.57324600000001 -111.218727 44.60263800000001 -111.233452 44.61805699999999 -111.219017 44.62698399999999 -111.22319 44.64228800000001 -111.269882 44.673878 -111.269424 44.683013999999986 -111.294884 44.70526899999999 -111.31469 44.72793999999999 -111.318436 44.72625400000001 -111.34919 44.74516299999999 -111.371521 44.73777000000001 -111.384171 44.708946 -111.394295 44.713257 -111.442841 44.70223999999999 -111.474632Montana30MtnMT376990.8943858.589799065.0211666.0306163.0395769.0403296.0293243.0250373.041442.02050.0350723.026217.0123090.043619.00.4950.505150091.043.09096099999999 -71.0879947.45329699999999 -66.96984944.074073999999996 -69.777786 43.99992399999999 -69.860435 43.756001 -69.792038 43.727901 -69.830902 43.74424400000001 -69.852295 43.842262000000005 -69.846664 43.876633 -69.887299 43.790649 -69.903641 43.768764000000004 -69.973412 43.786125 -70.000008 43.84565699999999 -69.987877 43.84551999999999 -70.026909 43.78972999999999 -70.157135 43.68571499999999 -70.236305 43.577156 -70.222748 43.534823999999986 -70.342117 43.430217999999996 -70.366432 43.349383999999986 -70.457481 43.335632000000004 -70.539444 43.09096099999999 -70.666176 43.12178399999999 -70.819168 43.159088 -70.831047 43.235138000000006 -70.813705 43.280936999999994 -70.901581 43.301987 -70.906296 43.366299 -70.970192 43.39610300000001 -70.979591 43.438046000000014 -70.961975 43.47013100000001 -70.971283 43.51630800000001 -70.95977 43.53191000000001 -70.96476 43.54887400000001 -70.950111 43.564064 -70.957016 43.571751000000006 -70.974365 43.791088 -70.984932 44.282082 -71.009079 44.66848400000001 -71.029205 45.301422 -71.08799 45.338818 -70.959862 45.22539499999999 -70.87693 45.278088 -70.843361 45.354629999999986 -70.813148 45.39067800000001 -70.829613 45.42512500000001 -70.797447 45.391918000000004 -70.635414 45.51290900000001 -70.72039 45.660618 -70.55275 45.72200000000001 -70.396866 45.79026400000001 -70.416695 45.89896400000001 -70.254448 45.94458 -70.247948 45.96874199999999 -70.310776 46.05311599999999 -70.280502 46.06662 -70.305328 46.13739799999999 -70.229805 46.190212 -70.283974 46.33480499999999 -70.191536 46.426083000000006 -70.047089 46.57056399999999 -70.014626 46.691329999999994 -69.985458 47.45329699999999 -69.230789 47.421992999999986 -69.047478 47.257328 -69.037231 47.18222 -68.895386 47.29692499999999 -68.515182 47.285056999999995 -68.391769 47.35733400000001 -68.335327 47.35210799999999 -68.231323 47.060959 -67.79155 45.94700599999999 -67.78083 45.91652300000001 -67.756157 45.87841800000001 -67.795113 45.827740000000006 -67.759911 45.794448999999986 -67.803596 45.67805100000001 -67.803978 45.65922499999999 -67.753502 45.68123600000001 -67.718582 45.605132999999995 -67.615692 45.592495000000014 -67.439857 45.50348700000001 -67.416641 45.485748 -67.504662 45.37578199999999 -67.419113 45.28020900000001 -67.478508 45.18951000000001 -67.439995 45.12217699999999 -67.346169 45.18270899999999 -67.274658 45.15618900000001 -67.166473 45.121914000000004 -67.15123 44.959216999999995 -67.065933 44.904503000000005 -67.147278 44.828575 -66.969849 44.78054399999999 -67.008293 44.65370200000001 -67.200935 44.65344200000001 -67.309036 44.691322000000014 -67.389076 44.598254999999995 -67.571556 44.54016100000001 -67.6194 44.553932 -67.811775 44.535999000000004 -67.859116 44.452319999999986 -67.900597 44.471149 -67.968895 44.50524899999999 -67.963989 44.484734 -67.987076 44.38487599999999 -68.016945 44.381294 -68.074928 44.47515899999999 -68.13681 44.49056999999999 -68.246155 44.431309 -68.364304 44.465228999999994 -68.429108 44.398971999999986 -68.552719 44.28975700000001 -68.530609 44.25980799999999 -68.559959 44.34625199999999 -68.740837 44.327354000000014 -68.813377 44.413914000000005 -68.814293 44.507209999999986 -68.741875 44.552246 -68.745804 44.608833000000004 -68.824074 44.664017 -68.824333 44.610896999999994 -68.86113 44.56958 -68.808426 44.494518 -68.812202 44.430256000000014 -68.959702 44.271033999999986 -68.98555 44.24401499999999 -69.022003 44.068985 -69.074974 43.94670500000001 -69.21965 43.94210799999999 -69.294159 44.01588799999999 -69.346962 44.025047 -69.394997 43.887077000000005 -69.483742 43.844779999999986 -69.589836 43.852141999999986 -69.664963 43.98017100000001 -69.655754 44.033535 -69.613441 43.93790100000001 -69.721146 43.893294999999995 -69.749039 43.784392999999994 -69.725182 43.76161999999999 -69.75087 43.79118700000001 -69.778183 44.026791 -69.800522 44.04765699999999 -69.767265 44.074073999999996 -69.77778644.377174 -68.388458 44.39887200000001 -68.350792 44.42877999999999 -68.355988 44.43748500000001 -68.23925 44.33441500000001 -68.165314 44.289951 -68.305244 44.224998 -68.321251 44.27072100000001 -68.403427 44.377174 -68.388458Maine23N EngME79939.20710236.7791227928.0328685.0465312.0597850.0630078.0456299.0424101.079763.05084.0571842.040722.0172830.094926.00.4870.513274322.045.930859 -104.062549.0 -96.55158245.938297000000006 -98.730057 45.939583 -99.006447 45.94278 -99.716949 45.943561999999986 -99.875389 45.940392 -100.514 45.94250500000001 -102.00235 45.94166200000001 -102.945953 45.941113 -102.994377 45.942993 -104.048416 46.280876000000006 -104.047348 46.54253 -104.046219 46.64293699999999 -104.046951 47.33381700000001 -104.045441 47.400002 -104.046822 48.00006099999999 -104.047935 48.390995000000004 -104.05162 48.64579800000001 -104.051826 49.0 -104.0625 48.99999600000001 -102.9375 49.0 -102.02182 49.0 -101.5 48.99999600000001 -100.1875 49.0 -99.53315 49.0 -99.0 48.99999600000001 -97.9375 49.0 -97.229095 48.931842999999986 -97.216026 48.873772 -97.175385 48.835995 -97.17086 48.815552 -97.180077 48.810383 -97.164368 48.80152899999999 -97.173599 48.781184999999994 -97.147171 48.76355699999999 -97.138901 48.75566900000001 -97.147552 48.74723399999999 -97.132156 48.72625400000001 -97.13446 48.70859899999999 -97.109756 48.69525899999999 -97.116394 48.674544999999995 -97.096825 48.629963000000004 -97.107285 48.62980999999999 -97.127098 48.62078500000001 -97.122612 48.61403999999999 -97.144371 48.58692199999999 -97.140465 48.58365599999999 -97.157845 48.57287199999999 -97.151779 48.56227899999999 -97.167595 48.549553 -97.146271 48.545094000000006 -97.160088 48.53841399999999 -97.15519 48.53466399999999 -97.139038 48.517967 -97.14798 48.51732999999999 -97.134247 48.43812600000001 -97.143265 48.437118999999996 -97.119286 48.41612599999999 -97.122253 48.41962799999999 -97.151299 48.41000700000001 -97.149475 48.40790200000001 -97.128777 48.38822200000001 -97.15847 48.38442599999999 -97.134857 48.37247099999999 -97.133438 48.36323200000001 -97.150047 48.36150699999999 -97.130775 48.326008 -97.136787 48.319942 -97.112244 48.310986000000014 -97.132286 48.303635000000014 -97.114403 48.29489899999999 -97.113373 48.29305600000001 -97.130165 48.28616299999999 -97.112335 48.277893000000006 -97.111366 48.2645 -97.136307 48.25918999999999 -97.123436 48.233540000000005 -97.127205 48.22806499999999 -97.108887 48.22177099999999 -97.139404 48.20762300000001 -97.11055 48.20375799999999 -97.130478 48.19507999999999 -97.136925 48.175242999999995 -97.135941 48.16778600000001 -97.137093 48.15924100000001 -97.115715 48.148415 -97.136162 48.142791999999986 -97.120567 48.116386000000006 -97.121521 48.100989999999996 -97.098679 48.07036199999999 -97.092369 48.048182999999995 -97.066719 47.95494500000001 -97.047699 47.917912 -97.014977 47.875590999999986 -97.02021 47.87021999999999 -96.999985 47.82805300000001 -96.976875 47.809685 -96.983536 47.794464000000005 -96.957474 47.763531 -96.931656 47.71411900000001 -96.923302 47.67394999999999 -96.889069 47.61528000000001 -96.872978 47.60117700000001 -96.85186 47.56300400000001 -96.858307 47.54459399999999 -96.848831 47.52138099999999 -96.860329 47.50064499999999 -96.851257 47.46156300000001 -96.866325 47.436779 -96.855469 47.41311300000001 -96.86689 47.408962 -96.849648 47.38414399999999 -96.83947 47.36098100000001 -96.850273 47.34227000000001 -96.838104 47.314629 -96.84639 47.29391100000001 -96.837357 47.25686999999999 -96.849266 47.240486000000004 -96.836708 47.170094000000006 -96.826134 47.151917 -96.838806 47.092636 -96.818794 47.07886500000001 -96.826607 47.03396599999999 -96.82225 47.010265000000004 -96.834938 47.00347099999999 -96.824173 46.969814000000014 -96.816414 46.96967699999999 -96.793068 46.95587900000001 -96.801529 46.948238 -96.789352 46.93222 -96.787567 46.936297999999994 -96.762711 46.92281700000001 -96.756554 46.86738600000001 -96.777702 46.844898 -96.767891 46.81206900000001 -96.796837 46.762348 -96.780022 46.70708099999999 -96.781197 46.678841000000006 -96.793335 46.62980999999999 -96.789886 46.62414899999999 -96.783958 46.600021 -96.770683 46.58865700000001 -96.75087 46.48947100000001 -96.73996 46.46875800000001 -96.714539 46.42720800000001 -96.709328 46.41225800000001 -96.687874 46.359474000000006 -96.651749 46.350853 -96.61451 46.336365 -96.601723 46.23872399999999 -96.597832 46.215453999999994 -96.586105 46.191959 -96.58754 46.17721599999999 -96.570816 46.09557000000001 -96.551582 46.02132 -96.575867 45.947722999999996 -96.561455 45.934151000000014 -96.566574 45.936543 -97.232941 45.930859 -97.97834 45.931534 -98.014328 45.938297000000006 -98.730057North Dakota38W N CenND178695.2134427.798638800.0166270.0240878.0318201.0320599.0237047.0209546.031332.01638.0287558.016083.0104938.033936.00.4980.502155209.042.48846399999999 -104.06054745.943561999999986 -96.43908742.99532300000001 -102.787933 42.99937399999999 -103.005409 42.99865 -103.500984 43.003094000000004 -104.05571 43.47916000000001 -104.05867 43.503738 -104.057426 43.85292799999999 -104.05899 44.14584400000001 -104.059242 44.181842999999986 -104.060547 44.57436799999999 -104.058975 44.997349000000014 -104.059349 44.997817999999995 -104.04258 45.212886999999995 -104.043358 45.88305299999999 -104.049026 45.942993 -104.048416 45.941113 -102.994377 45.94166200000001 -102.945953 45.94250500000001 -102.00235 45.940392 -100.514 45.943561999999986 -99.875389 45.94278 -99.716949 45.939583 -99.006447 45.938297000000006 -98.730057 45.931534 -98.014328 45.930859 -97.97834 45.936543 -97.232941 45.934151000000014 -96.566574 45.817893999999995 -96.587608 45.80830399999999 -96.604263 45.73901000000001 -96.657043 45.65072599999999 -96.832443 45.609161 -96.854637 45.58412899999999 -96.842735 45.517517 -96.768898 45.45823300000001 -96.737686 45.410675 -96.692825 45.39656099999999 -96.604744 45.375168 -96.532211 45.32854499999999 -96.477257 45.29888500000001 -96.457268 45.27522999999999 -96.454163 44.97203099999999 -96.45575 44.80138400000001 -96.454887 44.62884500000001 -96.45639 44.53837999999999 -96.454781 44.199093000000005 -96.457077 43.84877 -96.456284 43.49974399999999 -96.460136 43.499874000000005 -96.597992 43.481944999999996 -96.583473 43.435562000000004 -96.588791 43.40074899999999 -96.557388 43.38424699999999 -96.524734 43.356987000000004 -96.522575 43.30767800000001 -96.540245 43.29009199999999 -96.578812 43.263630000000006 -96.570404 43.25328099999999 -96.55925 43.23965100000001 -96.566673 43.225505999999996 -96.558289 43.217926000000006 -96.486931 43.20909900000001 -96.472801 43.12632400000001 -96.451195 43.087886999999995 -96.460495 43.07559599999999 -96.461784 43.06189699999999 -96.479263 43.05152100000001 -96.519699 43.012061999999986 -96.498711 42.986469 -96.516838 42.952393 -96.514626 42.91387599999999 -96.543953 42.89691500000001 -96.537201 42.846667999999994 -96.555901 42.83435399999999 -96.572815 42.835387999999995 -96.587334 42.799564000000004 -96.600563 42.77683999999999 -96.632668 42.74860799999999 -96.640396 42.708359 -96.626228 42.668518000000006 -96.562729 42.66241099999999 -96.540855 42.629761 -96.512535 42.58048600000001 -96.48819 42.573891 -96.500633 42.56403399999999 -96.489029 42.517135999999994 -96.479935 42.48924600000001 -96.439087 42.48846399999999 -96.494392 42.52050399999999 -96.546906 42.518291000000005 -96.584442 42.507239999999996 -96.605156 42.522696999999994 -96.628983 42.550735 -96.63636 42.61230499999999 -96.713745 42.621910000000014 -96.714958 42.641166999999996 -96.694283 42.657718999999986 -96.698746 42.66859400000001 -96.722343 42.67002099999999 -96.799026 42.681343 -96.81012 42.70408599999999 -96.809822 42.73170099999999 -96.907913 42.721149 -96.970451 42.72730999999999 -96.977547 42.75206800000001 -96.969681 42.75831600000001 -96.979271 42.759544000000005 -97.014816 42.77392599999999 -97.130142 42.798621999999995 -97.161095 42.81257600000001 -97.211502 42.841206 -97.224113 42.85183000000001 -97.242859 42.850018000000006 -97.271126 42.861774 -97.311081 42.867435 -97.388969 42.85044500000001 -97.456924 42.857158999999996 -97.482819 42.860138000000006 -97.505791 42.847992000000005 -97.570312 42.86128600000001 -97.634628 42.836838 -97.68541 42.85800900000001 -97.724907 42.84616500000001 -97.771843 42.849597999999986 -97.796684 42.866589000000005 -97.818298 42.855807999999996 -97.888313 42.83127200000001 -97.889595 42.79232400000001 -97.929131 42.77368899999999 -97.963211 42.76681099999999 -97.994797 42.769192000000004 -98.032791 42.80836099999999 -98.121468 42.82022499999999 -98.122765 42.83579599999999 -98.144516 42.839573 -98.167473 42.881798 -98.309982 42.920139000000006 -98.390846 42.937163999999996 -98.457085 42.991783 -98.497292 42.99239 -99.253593 42.992332000000005 -99.532402 42.99108899999999 -100.197739 42.98683500000001 -101.231308 42.989891 -102.086273 42.99532300000001 -102.787933South Dakota46W N CenSD196575.213169.429696004.0180306.0259034.0342498.0353506.0250825.0233478.032610.0971.0321891.013983.0119594.041921.00.4920.508162746.040.994305 -111.0526545.00285299999999 -104.05120141.69824600000001 -104.053108 41.564246999999995 -104.054993 41.38810699999999 -104.053505 41.00322700000001 -104.051201 40.994305 -104.933968 40.996365 -105.278259 41.000111000000004 -106.202896 41.001316 -106.328545 40.998489000000006 -106.864838 41.000168 -107.303436 41.00341 -107.918037 40.99847399999999 -109.047638 40.997646 -110.001457 40.99794 -110.062477 40.996635 -111.050285 41.25847999999999 -111.050911 41.57864799999999 -111.050323 41.996264999999994 -111.047951 42.503322999999995 -111.046028 43.01996199999999 -111.048447 43.284813000000014 -111.04673 43.51560599999999 -111.045998 43.982631999999995 -111.049629 44.47339600000001 -111.050789 44.66456199999999 -111.050842 44.995766 -111.05265 44.99234799999999 -110.428894 44.99868799999999 -110.392006 45.00285299999999 -109.994789 44.99958000000001 -109.798653 44.99764300000001 -108.624573 45.000159999999994 -108.258568 44.99981299999999 -107.893715 44.996173999999996 -106.258644 44.99722700000001 -106.020576 44.999832 -105.084465 45.001091 -105.04126 44.997349000000014 -104.059349 44.57436799999999 -104.058975 44.181842999999986 -104.060547 44.14584400000001 -104.059242 43.85292799999999 -104.05899 43.503738 -104.057426 43.47916000000001 -104.05867 43.003094000000004 -104.05571 42.61470399999999 -104.055725 41.99985100000001 -104.053009 41.69824600000001 -104.053108Wyoming56MtnWY251500.8011848.149453588.0119825.0168839.0227007.0226581.0164561.0153679.028109.02963.0207868.013112.071419.029157.00.50.583202.042.48913200000001 -92.88518546.952549000000005 -86.96759844.96162799999999 -87.748451 44.927334 -87.83989 44.873356 -87.830917 44.720482000000004 -87.985687 44.677273000000014 -87.983078 44.639126000000005 -88.013184 44.595821 -87.975655 44.622242 -88.012917 44.57145700000001 -88.040314 44.535503000000006 -87.966125 44.53914599999999 -87.926308 44.61691300000001 -87.868683 44.64405400000001 -87.76413 44.68929299999999 -87.723724 44.833054000000004 -87.614365 44.85134099999999 -87.552689 44.82302899999999 -87.551575 44.89110199999999 -87.433647 44.81156899999999 -87.367363 44.79472000000001 -87.314369 44.676918 -87.372978 44.53394700000001 -87.473442 44.327854 -87.537407 44.175758 -87.517242 44.097836 -87.644287 43.89390900000001 -87.726036 43.67318 -87.702644 43.546299000000005 -87.785957 43.458713999999986 -87.802872 43.358588999999995 -87.875244 43.19720799999999 -87.889748 43.075863 -87.859985 43.02576099999999 -87.891899 42.96457699999999 -87.836357 42.841544999999996 -87.819771 42.77752699999999 -87.756729 42.66662199999999 -87.791435 42.48913200000001 -87.79731 42.48961299999999 -88.194702 42.49197000000001 -88.297897 42.489655 -88.70652 42.490905999999995 -88.764954 42.49086399999999 -88.939079 42.497906 -89.359444 42.49749 -89.400497 42.50345999999999 -89.834618 42.504108 -89.923569 42.508362000000005 -90.419975 42.50936100000001 -90.638329 42.528560999999996 -90.62558 42.555713999999995 -90.639091 42.571392 -90.664253 42.637932000000006 -90.694664 42.657005 -90.745483 42.678246 -90.892418 42.68068299999999 -90.919281 42.707066 -90.999054 42.744923 -91.06604 42.78337500000001 -91.081902 42.871452000000005 -91.0933 42.925906999999995 -91.138992 43.00133099999999 -91.152084 43.081199999999995 -91.159622 43.08290500000001 -91.168442 43.147594 -91.161224 43.25791899999999 -91.068924 43.280703999999986 -91.066299 43.313320000000004 -91.078369 43.353970000000004 -91.176918 43.37053700000001 -91.198112 43.424076000000014 -91.210785 43.46471 -91.235771 43.500834999999995 -91.223434 43.54874000000001 -91.240425 43.598918999999995 -91.232857 43.67735300000001 -91.258255 43.72242700000001 -91.258781 43.78810899999999 -91.250969 43.84722500000001 -91.291809 43.947227 -91.373215 43.985657 -91.425758 44.03425200000001 -91.528275 44.03499199999999 -91.569016 44.04085900000001 -91.601639 44.066933000000006 -91.652084 44.13726399999999 -91.753067 44.19122300000001 -91.848587 44.25753 -91.888535 44.288376 -91.922188 44.317554 -91.922592 44.339146 -91.938705 44.364520999999996 -91.972221 44.41562300000001 -92.091164 44.43842699999999 -92.205963 44.456249000000014 -92.248924 44.49221399999999 -92.296509 44.540524000000005 -92.320297 44.55286799999999 -92.340691 44.57519099999999 -92.509026 44.61032499999999 -92.60878 44.642685 -92.630173 44.713627 -92.736946 44.746193000000005 -92.805382 44.835403000000014 -92.760826 44.862267 -92.764061 44.899529 -92.771667 44.91503499999999 -92.753723 44.935688 -92.749565 45.001037999999994 -92.766922 45.022152000000006 -92.762787 45.065642999999994 -92.796555 45.11303699999999 -92.745216 45.15645599999999 -92.744728 45.186645999999996 -92.762375 45.212410000000006 -92.755211 45.297638000000006 -92.746384 45.31823700000001 -92.707176 45.363113 -92.684662 45.39550399999999 -92.648544 45.439491000000004 -92.644768 45.45526100000001 -92.65461 45.47009299999999 -92.685211 45.54728299999999 -92.727943 45.56430399999999 -92.761963 45.56344200000001 -92.834824 45.57887600000001 -92.876617 45.64499699999999 -92.885185 45.71060600000001 -92.85981 45.73093399999999 -92.833427 45.763386 -92.7789 45.83734899999999 -92.748558 45.84502800000001 -92.733894 45.891006000000004 -92.706039 45.915752 -92.666008 45.95132100000001 -92.552475 45.98263499999999 -92.523781 45.981250999999986 -92.462151 46.02555799999999 -92.424805 46.01630399999999 -92.364769 46.022651999999994 -92.346031 46.05693400000001 -92.327179 46.07328799999999 -92.289177 46.15665799999999 -92.28875 46.416042000000004 -92.28849 46.65884399999999 -92.287079 46.646930999999995 -92.208961 46.74268699999999 -92.095779 46.68386100000001 -92.003967 46.680195 -91.921272 46.756924 -91.555588 46.952549000000005 -90.861542 46.92030299999999 -90.7743 46.88319000000001 -90.77726 46.58555999999999 -90.926056 46.645756000000006 -90.73053 46.587582 -90.540695 46.56866500000001 -90.40802 46.53971100000001 -90.385345 46.55161699999999 -90.31353 46.54435000000001 -90.302216 46.525104999999996 -90.300003 46.52253300000001 -90.269608 46.50884199999999 -90.258224 46.506348 -90.211349 46.442432 -90.161217 46.39395099999999 -90.141624 46.365207999999996 -90.115005 46.34048100000001 -90.111488 46.30407700000001 -89.924973 46.145691 -89.09967 46.100437 -88.985168 46.073646999999994 -88.925064 46.026848 -88.804268 46.036404000000005 -88.793686 46.032658 -88.777351 46.02119099999999 -88.772888 46.02962500000001 -88.72628 46.018967 -88.703476 46.02018699999999 -88.677254 45.99343099999999 -88.643539 45.99416400000001 -88.615372 46.015559999999994 -88.597404 46.00900300000001 -88.575226 46.01934399999999 -88.548225 46.018654 -88.51548 46.013003999999995 -88.49395 45.999194999999986 -88.483681 46.000805000000014 -88.454185 45.98346699999999 -88.403389 45.99463299999999 -88.369804 45.966758999999996 -88.32119 45.961989999999986 -88.299019 45.96710200000001 -88.257034 45.947948 -88.214859 45.953564 -88.180061 45.93634 -88.150307 45.926334 -88.111259 45.92066199999999 -88.093719 45.891850000000005 -88.095634 45.87368799999999 -88.065292 45.834923 -88.121658 45.819447 -88.129822 45.79157599999999 -88.088608 45.786156000000005 -88.051514 45.79508999999999 -87.989944 45.766491 -87.969055 45.75074000000001 -87.873505 45.72245799999999 -87.842239 45.71143000000001 -87.80143 45.701362999999986 -87.801033 45.68413899999999 -87.777351 45.67595299999999 -87.780823 45.66542799999999 -87.816933 45.654487999999986 -87.819817 45.613235 -87.775925 45.60042200000001 -87.774956 45.568554000000006 -87.786194 45.568625999999995 -87.828484 45.54455899999999 -87.805023 45.4991 -87.789268 45.46649199999999 -87.813499 45.44512900000001 -87.860153 45.406147000000004 -87.849419 45.365883 -87.883499 45.36211399999999 -87.873863 45.37210099999999 -87.868423 45.370193 -87.861984 45.346176000000014 -87.841171 45.358349000000004 -87.827896 45.352924 -87.759926 45.39129600000001 -87.689484 45.36188100000001 -87.64357 45.34819400000001 -87.645248 45.27222800000001 -87.704361 45.247108 -87.705032 45.236794 -87.719559 45.211693 -87.721519 45.199093000000005 -87.736092 45.176624000000004 -87.729561 45.140690000000006 -87.672707 45.10907 -87.66478 45.09465399999999 -87.581169 45.05681999999999 -87.618416 44.992008 -87.620232 44.96162799999999 -87.74845145.29042100000001 -87.034409 45.29867200000001 -86.986137 45.24028799999999 -86.967598 45.218422000000004 -86.995621 45.249031 -87.044998 45.149981999999994 -87.025337 45.14731599999999 -87.079765 45.09551999999999 -87.044792 45.092186 -87.08757 45.053291 -87.083794 45.06477000000001 -87.11245 44.982811 -87.178589 44.93332699999999 -87.168686 44.87324100000001 -87.205551 44.798775000000006 -87.311028 44.83774600000001 -87.378639 44.911204999999995 -87.405319 45.015221 -87.342056 45.052628 -87.283379 45.17507599999999 -87.230804 45.15498400000001 -87.177803 45.29647800000001 -87.065948 45.29042100000001 -87.034409Wisconsin55E N CenWI139556.5728223.2954796441.01249223.01789141.02345442.02450999.01763163.01710612.0264651.057559.02335941.0129191.0688168.0425748.00.4890.5111180518.041.994698 -117.2359089999999949.0 -111.04599843.67914999999999 -117.025307 43.75381899999999 -117.02280400000001 43.80025900000001 -117.036125 43.831683999999996 -117.026634 43.83988600000001 -117.009514 43.853088000000014 -117.01522800000001 43.859466999999995 -116.984779 43.87358499999999 -116.977158 43.904556000000014 -116.97715 43.92869200000001 -116.958725 43.96331000000001 -116.966965 44.014317000000005 -116.932602 44.07400899999999 -116.975822 44.090411999999986 -116.962448 44.093140000000005 -116.945892 44.14642699999999 -116.90126000000001 44.17741799999999 -116.912056 44.197956000000005 -116.980873 44.225295999999986 -116.975128 44.24717699999999 -116.99170699999999 44.24945099999999 -117.02935 44.23167000000001 -117.05102500000001 44.24396100000001 -117.080383 44.26719299999999 -117.099556 44.26992000000001 -117.111687 44.25074799999999 -117.142273 44.25344799999999 -117.169716 44.28483600000001 -117.212563 44.300781 -117.21644599999999 44.33955399999999 -117.200592 44.39009899999999 -117.23590899999999 44.427971000000014 -117.21620899999999 44.47310300000001 -117.22339600000001 44.48590100000001 -117.20295 44.511921 -117.18637799999999 44.534771000000006 -117.14415 44.559402000000006 -117.14292900000001 44.57263900000001 -117.129494 44.689452999999986 -117.07834600000001 44.697674000000006 -117.065506 44.749233000000004 -117.038567 44.77615399999999 -116.950493 44.82906 -116.908623 44.848674999999986 -116.89636999999999 44.868729 -116.86608100000001 44.920265 -116.834404 44.954971 -116.846565 44.97275500000001 -116.83040600000001 44.97186300000001 -116.84716800000001 44.980087 -116.854897 45.00016400000001 -116.847107 45.017067 -116.853523 45.04987700000001 -116.80632 45.075874 -116.786224 45.099602000000004 -116.777107 45.10642200000001 -116.760284 45.137428 -116.735603 45.26247000000001 -116.687836 45.33552900000001 -116.671288 45.45998 -116.564796 45.493763 -116.553528 45.56617399999999 -116.477577 45.60637299999999 -116.46944400000001 45.66460799999999 -116.513939 45.710846000000004 -116.527298 45.74754300000001 -116.559654 45.78075000000001 -116.653419 45.819289999999995 -116.702202 45.819885 -116.772728 45.845989 -116.790283 45.90372099999999 -116.855492 45.980639999999994 -116.897217 45.995299999999986 -116.91815199999999 46.065811 -116.956741 46.078632 -116.98622900000001 46.097397 -116.960655 46.165604 -116.928444 46.197674000000006 -116.96650700000001 46.249427999999995 -116.97174100000001 46.30256700000001 -117.00065599999999 46.335544999999996 -117.026985 46.348816 -117.06319400000001 46.388690999999994 -117.04348 46.42809700000001 -117.037567 46.53671600000001 -117.040932 47.11942300000001 -117.039963 47.258601999999996 -117.041382 47.361541999999986 -117.040779 47.971191000000005 -117.036438 48.046284000000014 -117.037834 48.83815000000001 -117.028046 49.0 -117.030975 48.99999600000001 -116.0625 48.498726000000005 -116.055679 48.208549000000005 -116.054497 47.976269 -116.052483 47.965014999999994 -116.024307 47.925217 -115.997925 47.867199 -115.936836 47.841148000000004 -115.902916 47.827526000000006 -115.868805 47.805256000000014 -115.84832 47.75635500000001 -115.835739 47.744911 -115.789536 47.70980499999999 -115.774727 47.69562500000001 -115.732666 47.63995 -115.73307 47.616150000000005 -115.697289 47.59079 -115.691093 47.53376 -115.741837 47.520962 -115.700531 47.489609 -115.69178 47.475303999999994 -115.639153 47.457863 -115.642197 47.44924900000001 -115.655098 47.44537399999999 -115.731491 47.43403599999999 -115.749115 47.42254600000001 -115.749336 47.399238999999994 -115.665489 47.38011599999999 -115.637794 47.370075000000014 -115.598549 47.334686000000005 -115.554535 47.292057 -115.522079 47.28171900000001 -115.500946 47.27444800000001 -115.425659 47.263667999999996 -115.407227 47.25509600000001 -115.342682 47.24522400000001 -115.324249 47.17962600000001 -115.295258 47.12410399999999 -115.192101 47.09764899999999 -115.171524 47.09182000000001 -115.147713 47.06362899999999 -115.134537 47.02660399999999 -115.080368 46.97343799999999 -115.054672 46.96308099999999 -115.036369 46.958889 -115.00061 46.92529300000001 -114.963768 46.90724599999999 -114.923164 46.89096799999999 -114.939606 46.85252800000001 -114.947449 46.799515000000014 -114.901367 46.79712699999999 -114.865646 46.77562 -114.839836 46.76661300000001 -114.793076 46.755798 -114.776878 46.70312100000001 -114.781967 46.695212999999995 -114.747154 46.73384100000001 -114.697479 46.734802 -114.672935 46.687186999999994 -114.624977 46.67100099999999 -114.644089 46.66090399999999 -114.643791 46.62912800000001 -114.609879 46.637969999999996 -114.539444 46.62365299999999 -114.483772 46.645793999999995 -114.44059 46.661674000000005 -114.383072 46.654304999999994 -114.33374 46.622917 -114.323769 46.58795900000001 -114.342377 46.51746700000001 -114.349174 46.506203 -114.359528 46.487449999999995 -114.409775 46.428257 -114.383087 46.39962399999999 -114.39608 46.39299 -114.408859 46.28478999999999 -114.430862 46.25304 -114.472862 46.24386200000001 -114.471901 46.22033300000001 -114.438622 46.169048000000004 -114.439949 46.15534199999999 -114.466087 46.157497000000006 -114.508682 46.136143000000004 -114.518013 46.11622199999999 -114.505638 46.107437000000004 -114.47644 46.08231000000001 -114.455101 46.050895999999995 -114.464828 46.02349100000001 -114.493393 46.00984600000001 -114.473602 45.98988700000001 -114.483528 45.972054000000014 -114.411522 45.95406 -114.404366 45.921558000000005 -114.428535 45.910731999999996 -114.412605 45.870968000000005 -114.391914 45.84653499999999 -114.406601 45.85270299999999 -114.442307 45.83955 -114.472878 45.84276600000001 -114.498238 45.81014999999999 -114.516449 45.762482000000006 -114.562614 45.746082 -114.541031 45.72308000000001 -114.53405 45.694484999999986 -114.496635 45.67414099999999 -114.509781 45.652477000000005 -114.500816 45.62435500000001 -114.563751 45.59648100000001 -114.540031 45.548823999999996 -114.559998 45.558277000000004 -114.526466 45.54673399999999 -114.495667 45.547932 -114.461784 45.52771799999999 -114.432632 45.49909199999999 -114.418129 45.485825000000006 -114.370537 45.46346700000001 -114.349327 45.45750799999999 -114.325516 45.48594299999999 -114.261322 45.503029 -114.246964 45.53537399999999 -114.241081 45.52799999999999 -114.193893 45.544005999999996 -114.171753 45.550465 -114.131134 45.57120900000001 -114.117226 45.58645999999999 -114.082054 45.625225 -114.055603 45.64085399999999 -114.01712 45.652592 -114.010078 45.672459 -114.018967 45.68641299999999 -114.00856 45.69745599999999 -113.970238 45.67945900000001 -113.963234 45.671291 -113.925789 45.655204999999995 -113.922623 45.63733300000001 -113.901291 45.61357100000001 -113.902397 45.60964200000001 -113.85112 45.600716000000006 -113.821579 45.583809 -113.802849 45.51498799999999 -113.832809 45.51694499999999 -113.780029 45.50713300000001 -113.7714 45.477787000000006 -113.768265 45.44571300000001 -113.78476 45.410252000000014 -113.774124 45.382464999999996 -113.74041 45.321608999999995 -113.738182 45.27786599999999 -113.687813 45.26236 -113.689224 45.20686699999999 -113.644699 45.18106800000001 -113.600037 45.14981800000001 -113.593208 45.13462100000001 -113.570694 45.117785999999995 -113.573486 45.10762399999999 -113.551384 45.107910000000004 -113.509338 45.082137999999986 -113.519722 45.071293 -113.489273 45.05839499999999 -113.48542 45.04342299999999 -113.454552 45.027523 -113.45797 44.998267999999996 -113.440147 44.949596000000014 -113.447884 44.940848999999986 -113.462532 44.939648000000005 -113.486465 44.930744000000004 -113.495308 44.851315 -113.444695 44.833775 -113.420502 44.80764400000001 -113.349152 44.779076 -113.33976 44.780304 -113.31781 44.810562000000004 -113.256287 44.811916 -113.239471 44.761517 -113.137413 44.737457000000006 -113.126572 44.71525199999999 -113.100845 44.69599500000001 -113.098099 44.67560599999999 -113.072289 44.624371 -113.053436 44.582764 -113.082184 44.556377 -113.038811 44.53304299999999 -113.036972 44.510695999999996 -113.006866 44.48186100000001 -113.019463 44.45270199999999 -113.005814 44.43780100000001 -113.011169 44.43562700000001 -112.984406 44.407279999999986 -112.937439 44.39294100000001 -112.886467 44.370068 -112.869942 44.35372899999999 -112.843437 44.364292000000006 -112.816559 44.39490900000001 -112.817871 44.42117300000001 -112.825851 44.458099000000004 -112.795387 44.47400999999999 -112.779022 44.484409 -112.732872 44.49702500000001 -112.713486 44.48089200000001 -112.652351 44.477588999999995 -112.53849 44.463089 -112.501007 44.46892500000001 -112.457687 44.449375 -112.419922 44.44936000000001 -112.366753 44.49726899999999 -112.339745 44.525188000000014 -112.341675 44.54178999999999 -112.281509 44.560058999999995 -112.255844 44.55957799999999 -112.229568 44.53858199999999 -112.216934 44.53153599999999 -112.19883 44.52833899999999 -112.123367 44.518317999999994 -112.099075 44.52869799999999 -112.058548 44.52293 -112.02626 44.53513000000001 -112.022797 44.529762000000005 -111.977005 44.549812 -111.939575 44.55635100000001 -111.871696 44.504065999999995 -111.807037 44.51854700000001 -111.791809 44.51890900000001 -111.766121 44.53384399999999 -111.716202 44.550835000000006 -111.684067 44.543071999999995 -111.604454 44.55294799999999 -111.566437 44.52877799999999 -111.489449 44.536224000000004 -111.481781 44.538002000000006 -111.458534 44.55002200000001 -111.462036 44.55126999999999 -111.492111 44.593277 -111.513733 44.616051 -111.500954 44.637767999999994 -111.506897 44.64078900000001 -111.469376 44.652634000000006 -111.457474 44.67010099999999 -111.4599 44.691494000000006 -111.480011 44.70223999999999 -111.474632 44.713257 -111.442841 44.708946 -111.394295 44.73777000000001 -111.384171 44.74516299999999 -111.371521 44.72625400000001 -111.34919 44.72793999999999 -111.318436 44.70526899999999 -111.31469 44.683013999999986 -111.294884 44.673878 -111.269424 44.64228800000001 -111.269882 44.62698399999999 -111.22319 44.61805699999999 -111.219017 44.60263800000001 -111.233452 44.57324600000001 -111.218727 44.564926000000014 -111.177986 44.54526100000001 -111.169464 44.52797699999999 -111.133583 44.500832 -111.128143 44.486198 -111.093857 44.47339600000001 -111.050789 43.982631999999995 -111.049629 43.51560599999999 -111.045998 43.284813000000014 -111.04673 43.01996199999999 -111.048447 42.503322999999995 -111.046028 41.996264999999994 -111.047951 42.00023999999999 -111.49382 42.002376999999996 -112.099724 41.99913000000001 -112.146324 42.001228 -112.988754 41.995476 -114.038223 41.99601000000001 -114.268616 41.99659700000001 -115.023979 41.994698 -115.946617 41.99490399999999 -116.991356 41.99490399999999 -117.01790600000001 43.67914999999999 -117.025307Idaho16MtnID214324.9782131.1441006749.0263194.0360723.0500956.0505793.0359136.0329881.052958.08572.0443703.029070.0144809.068391.00.4980.502201595.042.725769000000014 -73.43643245.013306 -71.50584442.745979000000005 -73.258507 42.747401999999994 -73.269722 42.803471 -73.296616 42.83702500000001 -73.280029 42.94021599999999 -73.276451 43.310779999999994 -73.250519 43.512764000000004 -73.238838 43.559315 -73.260429 43.57496599999999 -73.291847 43.593121 -73.282181 43.619586999999996 -73.294548 43.624649000000005 -73.303978 43.61493300000001 -73.364128 43.56907699999999 -73.388557 43.582413 -73.418762 43.63204999999999 -73.423401 43.71421799999999 -73.371429 43.756496 -73.357109 43.778366000000005 -73.359436 43.80444700000001 -73.385178 43.885918000000004 -73.375557 43.914749 -73.405769 43.98813999999999 -73.417839 44.01816600000001 -73.408684 44.045624000000004 -73.436432 44.06384299999999 -73.435646 44.10655600000001 -73.409187 44.136173000000014 -73.408295 44.172054 -73.382492 44.20119500000001 -73.377762 44.26008999999999 -73.305756 44.36734000000001 -73.330215 44.405483000000004 -73.300423 44.432804000000004 -73.293747 44.54428100000001 -73.334877 44.55392499999999 -73.348236 44.57912099999999 -73.371719 44.61976200000001 -73.382248 44.634303999999986 -73.37056 44.66123200000001 -73.37352 44.68032500000001 -73.358574 44.72419400000001 -73.373581 44.799251999999996 -73.327209 44.81907699999999 -73.369476 44.847893 -73.382729 44.93256400000001 -73.336838 44.981933999999995 -73.351181 45.0061 -73.345146 45.00844599999999 -73.188972 45.005325 -72.547668 45.007294 -71.902328 45.013306 -71.505844 44.976517 -71.541397 44.94364899999999 -71.517448 44.89962399999999 -71.506836 44.81597099999999 -71.575569 44.77914799999999 -71.583969 44.74166099999999 -71.631599 44.67781099999999 -71.608147 44.65054699999999 -71.589218 44.637394 -71.568497 44.59653499999999 -71.554573 44.57887600000001 -71.537262 44.551146999999986 -71.592758 44.53881799999999 -71.591911 44.52574899999999 -71.575714 44.49448000000001 -71.58709 44.47444899999999 -71.614693 44.476673000000005 -71.637024 44.469116000000014 -71.648178 44.440079 -71.656868 44.421284000000014 -71.677353 44.39819 -71.767036 44.38411300000001 -71.798195 44.350300000000004 -71.821663 44.34413900000001 -71.835281 44.336051999999995 -71.928825 44.325726 -71.939369 44.32748799999999 -71.994896 44.299374 -72.035957 44.26143300000001 -72.060028 44.234318 -72.044853 44.18211400000001 -72.059746 44.156372000000005 -72.045189 44.12068199999999 -72.035385 44.10038800000001 -72.04998 44.096035 -72.032913 44.083309000000014 -72.035194 44.03197499999999 -72.077385 44.008858000000004 -72.08567 43.98916199999999 -72.110374 43.976448000000005 -72.113274 43.95792399999999 -72.092178 43.939098 -72.11367 43.90914900000001 -72.122116 43.878849 -72.170555 43.801620000000014 -72.185303 43.764565000000005 -72.206558 43.75062199999999 -72.219589 43.735229000000004 -72.260521 43.69846000000001 -72.304504 43.597294000000005 -72.333549 43.572304 -72.373962 43.517483 -72.395462 43.48455799999999 -72.38298 43.41008400000001 -72.396713 43.37705199999999 -72.412605 43.350933 -72.398094 43.32333 -72.410698 43.307308000000006 -72.402885 43.232178000000005 -72.436066 43.155945 -72.452866 43.11619200000001 -72.438072 43.078959999999995 -72.443932 43.046425 -72.462219 42.99952300000001 -72.457626 42.97606300000001 -72.473808 42.96550400000001 -72.50473 42.95159100000001 -72.520683 42.912532999999996 -72.525276 42.86056099999999 -72.553894 42.80765199999999 -72.539383 42.789176999999995 -72.513535 42.76865000000001 -72.507736 42.761505 -72.47979 42.746758 -72.462639 42.725769000000014 -72.456238 42.73728199999999 -72.923454 42.74031400000001 -73.020149 42.745979000000005 -73.258507Vermont50N EngVT23955.748947.04562758.0144895.0210650.0275492.0287266.0209604.0199808.035731.02033.0283146.017600.084759.038046.00.490.51146370.043.49814599999999 -97.22909549.371735 -89.53058643.49960300000001 -91.730217 43.499187000000006 -92.07737 43.49949599999999 -92.452995 43.500294 -92.557831 43.501316 -93.027016 43.501495000000006 -93.054184 43.50053399999999 -93.500618 43.500809000000004 -93.653481 43.50034299999999 -93.973717 43.49899300000001 -94.246544 43.49814599999999 -94.454987 43.50007199999999 -94.859573 43.499413000000004 -94.920197 43.500370000000004 -95.396278 43.49957699999999 -95.464493 43.498977999999994 -95.866615 43.49856600000001 -96.060738 43.49974399999999 -96.460136 43.84877 -96.456284 44.199093000000005 -96.457077 44.53837999999999 -96.454781 44.62884500000001 -96.45639 44.80138400000001 -96.454887 44.97203099999999 -96.45575 45.27522999999999 -96.454163 45.29888500000001 -96.457268 45.32854499999999 -96.477257 45.375168 -96.532211 45.39656099999999 -96.604744 45.410675 -96.692825 45.45823300000001 -96.737686 45.517517 -96.768898 45.58412899999999 -96.842735 45.609161 -96.854637 45.65072599999999 -96.832443 45.73901000000001 -96.657043 45.80830399999999 -96.604263 45.817893999999995 -96.587608 45.934151000000014 -96.566574 45.947722999999996 -96.561455 46.02132 -96.575867 46.09557000000001 -96.551582 46.17721599999999 -96.570816 46.191959 -96.58754 46.215453999999994 -96.586105 46.23872399999999 -96.597832 46.336365 -96.601723 46.350853 -96.61451 46.359474000000006 -96.651749 46.41225800000001 -96.687874 46.42720800000001 -96.709328 46.46875800000001 -96.714539 46.48947100000001 -96.73996 46.58865700000001 -96.75087 46.600021 -96.770683 46.62414899999999 -96.783958 46.62980999999999 -96.789886 46.678841000000006 -96.793335 46.70708099999999 -96.781197 46.762348 -96.780022 46.81206900000001 -96.796837 46.844898 -96.767891 46.86738600000001 -96.777702 46.92281700000001 -96.756554 46.936297999999994 -96.762711 46.93222 -96.787567 46.948238 -96.789352 46.95587900000001 -96.801529 46.96967699999999 -96.793068 46.969814000000014 -96.816414 47.00347099999999 -96.824173 47.010265000000004 -96.834938 47.03396599999999 -96.82225 47.07886500000001 -96.826607 47.092636 -96.818794 47.151917 -96.838806 47.170094000000006 -96.826134 47.240486000000004 -96.836708 47.25686999999999 -96.849266 47.29391100000001 -96.837357 47.314629 -96.84639 47.34227000000001 -96.838104 47.36098100000001 -96.850273 47.38414399999999 -96.83947 47.408962 -96.849648 47.41311300000001 -96.86689 47.436779 -96.855469 47.46156300000001 -96.866325 47.50064499999999 -96.851257 47.52138099999999 -96.860329 47.54459399999999 -96.848831 47.56300400000001 -96.858307 47.60117700000001 -96.85186 47.61528000000001 -96.872978 47.67394999999999 -96.889069 47.71411900000001 -96.923302 47.763531 -96.931656 47.794464000000005 -96.957474 47.809685 -96.983536 47.82805300000001 -96.976875 47.87021999999999 -96.999985 47.875590999999986 -97.02021 47.917912 -97.014977 47.95494500000001 -97.047699 48.048182999999995 -97.066719 48.07036199999999 -97.092369 48.100989999999996 -97.098679 48.116386000000006 -97.121521 48.142791999999986 -97.120567 48.148415 -97.136162 48.15924100000001 -97.115715 48.16778600000001 -97.137093 48.175242999999995 -97.135941 48.19507999999999 -97.136925 48.20375799999999 -97.130478 48.20762300000001 -97.11055 48.22177099999999 -97.139404 48.22806499999999 -97.108887 48.233540000000005 -97.127205 48.25918999999999 -97.123436 48.2645 -97.136307 48.277893000000006 -97.111366 48.28616299999999 -97.112335 48.29305600000001 -97.130165 48.29489899999999 -97.113373 48.303635000000014 -97.114403 48.310986000000014 -97.132286 48.319942 -97.112244 48.326008 -97.136787 48.36150699999999 -97.130775 48.36323200000001 -97.150047 48.37247099999999 -97.133438 48.38442599999999 -97.134857 48.38822200000001 -97.15847 48.40790200000001 -97.128777 48.41000700000001 -97.149475 48.41962799999999 -97.151299 48.41612599999999 -97.122253 48.437118999999996 -97.119286 48.43812600000001 -97.143265 48.51732999999999 -97.134247 48.517967 -97.14798 48.53466399999999 -97.139038 48.53841399999999 -97.15519 48.545094000000006 -97.160088 48.549553 -97.146271 48.56227899999999 -97.167595 48.57287199999999 -97.151779 48.58365599999999 -97.157845 48.58692199999999 -97.140465 48.61403999999999 -97.144371 48.62078500000001 -97.122612 48.62980999999999 -97.127098 48.629963000000004 -97.107285 48.674544999999995 -97.096825 48.69525899999999 -97.116394 48.70859899999999 -97.109756 48.72625400000001 -97.13446 48.74723399999999 -97.132156 48.75566900000001 -97.147552 48.76355699999999 -97.138901 48.781184999999994 -97.147171 48.80152899999999 -97.173599 48.810383 -97.164368 48.815552 -97.180077 48.835995 -97.17086 48.873772 -97.175385 48.931842999999986 -97.216026 49.0 -97.229095 49.0 -96.406616 49.0 -95.276421 49.00000399999999 -95.157516 49.371735 -95.151627 49.33081100000001 -94.83181 48.87717799999999 -94.681038 48.777637 -94.694221 48.71370300000001 -94.570107 48.710815 -94.430435 48.70774499999999 -94.292145 48.652023000000014 -94.230637 48.62478300000001 -93.843735 48.525454999999994 -93.812515 48.511639 -93.780937 48.53432799999999 -93.513985 48.54957999999999 -93.465187 48.59277 -93.457619 48.63722999999999 -93.304092 48.62666300000001 -93.091301 48.62844100000001 -92.946785 48.54030599999999 -92.728851 48.54044300000001 -92.64167 48.502917999999994 -92.626228 48.494815999999986 -92.698669 48.460464 -92.70649 48.440166000000005 -92.497375 48.402264 -92.456192 48.357594000000006 -92.473167 48.22087500000001 -92.369965 48.244438 -92.276772 48.29840899999999 -92.300125 48.352417 -92.275986 48.36685600000001 -92.125824 48.35561000000001 -92.035049 48.25049999999999 -91.979401 48.206249000000014 -91.788689 48.19687999999999 -91.711815 48.11494099999999 -91.703606 48.10456500000001 -91.568657 48.043678 -91.571442 48.08140599999999 -91.239334 48.195449999999994 -91.027039 48.254311 -90.864388 48.08855399999999 -90.743256 48.12181100000001 -90.567352 48.092861 -90.556732 48.112885000000006 -90.14518 48.08619300000001 -90.026611 48.02367000000001 -89.986931 47.99261899999999 -89.900299 48.0266 -89.749222 48.00176999999999 -89.530586 47.99267599999999 -89.625557 47.95950300000001 -89.636284 47.82467299999999 -89.99958 47.71004500000001 -90.509514 47.461151 -91.021317 47.12500800000001 -91.468483 46.92715100000001 -91.800789 46.791957999999994 -92.088303 46.668262 -92.214432 46.66663399999999 -92.302956 46.65884399999999 -92.287079 46.416042000000004 -92.28849 46.15665799999999 -92.28875 46.07328799999999 -92.289177 46.05693400000001 -92.327179 46.022651999999994 -92.346031 46.01630399999999 -92.364769 46.02555799999999 -92.424805 45.981250999999986 -92.462151 45.98263499999999 -92.523781 45.95132100000001 -92.552475 45.915752 -92.666008 45.891006000000004 -92.706039 45.84502800000001 -92.733894 45.83734899999999 -92.748558 45.763386 -92.7789 45.73093399999999 -92.833427 45.71060600000001 -92.85981 45.64499699999999 -92.885185 45.57887600000001 -92.876617 45.56344200000001 -92.834824 45.56430399999999 -92.761963 45.54728299999999 -92.727943 45.47009299999999 -92.685211 45.45526100000001 -92.65461 45.439491000000004 -92.644768 45.39550399999999 -92.648544 45.363113 -92.684662 45.31823700000001 -92.707176 45.297638000000006 -92.746384 45.212410000000006 -92.755211 45.186645999999996 -92.762375 45.15645599999999 -92.744728 45.11303699999999 -92.745216 45.065642999999994 -92.796555 45.022152000000006 -92.762787 45.001037999999994 -92.766922 44.935688 -92.749565 44.91503499999999 -92.753723 44.899529 -92.771667 44.862267 -92.764061 44.835403000000014 -92.760826 44.746193000000005 -92.805382 44.713627 -92.736946 44.642685 -92.630173 44.61032499999999 -92.60878 44.57519099999999 -92.509026 44.55286799999999 -92.340691 44.540524000000005 -92.320297 44.49221399999999 -92.296509 44.456249000000014 -92.248924 44.43842699999999 -92.205963 44.41562300000001 -92.091164 44.364520999999996 -91.972221 44.339146 -91.938705 44.317554 -91.922592 44.288376 -91.922188 44.25753 -91.888535 44.19122300000001 -91.848587 44.13726399999999 -91.753067 44.066933000000006 -91.652084 44.04085900000001 -91.601639 44.03499199999999 -91.569016 44.03425200000001 -91.528275 43.985657 -91.425758 43.947227 -91.373215 43.84722500000001 -91.291809 43.78810899999999 -91.250969 43.72242700000001 -91.258781 43.67735300000001 -91.258255 43.598918999999995 -91.232857 43.54874000000001 -91.240425 43.500834999999995 -91.223434 43.50065599999999 -91.610954 43.49960300000001 -91.730217Minnesota27W N CenMN206207.09912845.4114375099.01130683.01647853.02145183.02229916.01605702.01593019.0246546.077722.02192417.0118919.0606584.0303141.00.490.511043304.041.98778899999999 -124.5583949999999946.23625899999999 -116.4694440000000141.99445700000001 -121.440407 42.0009 -122.28357700000001 42.00234599999999 -123.22094 41.99799300000001 -123.512032 41.99311399999999 -123.81796299999999 41.997814000000005 -124.205246 42.09884299999999 -124.351036 42.246059 -124.41384099999999 42.42977500000001 -124.4366 42.553196000000014 -124.390549 42.62286800000001 -124.39986400000001 42.832626000000005 -124.55839499999999 42.955624 -124.484123 43.26175699999999 -124.38554400000001 43.300365 -124.40484599999999 43.459270000000004 -124.27276599999999 43.605166999999994 -124.224777 43.85727700000001 -124.157097 44.269672000000014 -124.117088 44.66229999999999 -124.053177 44.81490299999999 -124.074341 45.03627399999999 -124.006348 45.293139999999994 -123.955376 45.48526000000001 -123.97931700000001 45.508140999999995 -123.93543199999999 45.47422399999999 -123.89086900000001 45.499256 -123.858269 45.568703 -123.95217099999999 45.703007000000014 -123.93483 45.775654 -123.97538 45.871212000000014 -123.955025 45.942093 -123.995255 46.012493000000006 -123.919937 46.20288099999999 -123.97608199999999 46.11161799999999 -123.792847 46.1446 -123.775833 46.193821000000014 -123.819725 46.210109999999986 -123.76016200000001 46.170063 -123.715912 46.174667 -123.668999 46.23625899999999 -123.515785 46.14432099999999 -123.36232 46.144904999999994 -123.303482 46.144188000000014 -123.247566 46.170174 -123.211205 46.18375399999999 -123.174965 46.17947799999999 -123.117325 46.155902999999995 -123.04937000000001 46.110648999999995 -122.97294600000001 46.07949400000001 -122.898537 46.02734799999999 -122.874199 45.944053999999994 -122.80652599999999 45.904236 -122.805008 45.86805000000001 -122.78286 45.85061300000001 -122.78330199999999 45.80050700000001 -122.786797 45.76073099999999 -122.76307700000001 45.727847999999994 -122.771339 45.64955900000001 -122.759331 45.63120699999999 -122.69511399999999 45.606990999999994 -122.650002 45.594978 -122.564224 45.56493800000001 -122.435951 45.566329999999994 -122.355255 45.543251 -122.30194900000001 45.548271 -122.243721 45.590664000000004 -122.08084099999999 45.617985000000004 -121.998817 45.63593700000001 -121.97146599999999 45.642189 -121.925629 45.677017000000006 -121.887093 45.70084399999999 -121.809853 45.689876999999996 -121.757507 45.688953 -121.705231 45.719727000000006 -121.52787000000001 45.69512599999999 -121.441368 45.69076200000001 -121.420845 45.69984400000001 -121.366631 45.696799999999996 -121.318794 45.67849699999999 -121.27520799999999 45.66580200000001 -121.213089 45.657444 -121.20212599999999 45.61340000000001 -121.190872 45.600674 -121.173134 45.607215999999994 -121.124023 45.64676700000001 -121.07235 45.65299999999999 -121.032303 45.645309 -120.9673 45.65047100000001 -120.947395 45.63563199999999 -120.906761 45.665339999999986 -120.86024499999999 45.71066300000001 -120.695824 45.732765 -120.657234 45.743763 -120.622589 45.74107000000001 -120.568916 45.69578200000001 -120.49799300000001 45.68942999999999 -120.442223 45.71673200000001 -120.282478 45.719933 -120.206291 45.76141000000001 -120.154755 45.78035 -120.067497 45.81128699999999 -119.993172 45.83184399999999 -119.86859100000001 45.841755000000006 -119.832413 45.85268400000001 -119.677307 45.89955499999999 -119.620979 45.913459999999986 -119.58815799999999 45.89934500000001 -119.511086 45.914412999999996 -119.43772899999999 45.917755 -119.378311 45.932807999999994 -119.301636 45.92249699999999 -119.17761999999999 45.92585399999999 -119.13913 45.966419 -119.031105 45.999202999999994 -118.981018 46.001778 -117.991478 46.00001900000001 -117.981628 46.00040100000001 -117.60180700000001 45.999966 -117.48065199999999 45.995299999999986 -116.91815199999999 45.980639999999994 -116.897217 45.90372099999999 -116.855492 45.845989 -116.790283 45.819885 -116.772728 45.819289999999995 -116.702202 45.78075000000001 -116.653419 45.74754300000001 -116.559654 45.710846000000004 -116.527298 45.66460799999999 -116.513939 45.60637299999999 -116.46944400000001 45.56617399999999 -116.477577 45.493763 -116.553528 45.45998 -116.564796 45.33552900000001 -116.671288 45.26247000000001 -116.687836 45.137428 -116.735603 45.10642200000001 -116.760284 45.099602000000004 -116.777107 45.075874 -116.786224 45.04987700000001 -116.80632 45.017067 -116.853523 45.00016400000001 -116.847107 44.980087 -116.854897 44.97186300000001 -116.84716800000001 44.97275500000001 -116.83040600000001 44.954971 -116.846565 44.920265 -116.834404 44.868729 -116.86608100000001 44.848674999999986 -116.89636999999999 44.82906 -116.908623 44.77615399999999 -116.950493 44.749233000000004 -117.038567 44.697674000000006 -117.065506 44.689452999999986 -117.07834600000001 44.57263900000001 -117.129494 44.559402000000006 -117.14292900000001 44.534771000000006 -117.14415 44.511921 -117.18637799999999 44.48590100000001 -117.20295 44.47310300000001 -117.22339600000001 44.427971000000014 -117.21620899999999 44.39009899999999 -117.23590899999999 44.33955399999999 -117.200592 44.300781 -117.21644599999999 44.28483600000001 -117.212563 44.25344799999999 -117.169716 44.25074799999999 -117.142273 44.26992000000001 -117.111687 44.26719299999999 -117.099556 44.24396100000001 -117.080383 44.23167000000001 -117.05102500000001 44.24945099999999 -117.02935 44.24717699999999 -116.99170699999999 44.225295999999986 -116.975128 44.197956000000005 -116.980873 44.17741799999999 -116.912056 44.14642699999999 -116.90126000000001 44.093140000000005 -116.945892 44.090411999999986 -116.962448 44.07400899999999 -116.975822 44.014317000000005 -116.932602 43.96331000000001 -116.966965 43.92869200000001 -116.958725 43.904556000000014 -116.97715 43.87358499999999 -116.977158 43.859466999999995 -116.984779 43.853088000000014 -117.01522800000001 43.83988600000001 -117.009514 43.831683999999996 -117.026634 43.80025900000001 -117.036125 43.75381899999999 -117.02280400000001 43.67914999999999 -117.025307 41.99490399999999 -117.01790600000001 41.99674200000001 -118.184326 41.98924299999999 -119.309906 41.98895999999999 -119.350655 41.989315000000005 -119.992401 41.98778899999999 -120.87082699999999 41.99445700000001 -121.440407Oregon41PacificOR248646.6726172.3312842321.0750844.01103313.01397073.01445248.01063797.0949326.0165256.043435.01319960.087183.0380532.0206287.00.4920.508452821.042.69851299999999 -72.55389445.301422 -70.73464242.720383 -72.280388 42.725769000000014 -72.456238 42.746758 -72.462639 42.761505 -72.47979 42.76865000000001 -72.507736 42.789176999999995 -72.513535 42.80765199999999 -72.539383 42.86056099999999 -72.553894 42.912532999999996 -72.525276 42.95159100000001 -72.520683 42.96550400000001 -72.50473 42.97606300000001 -72.473808 42.99952300000001 -72.457626 43.046425 -72.462219 43.078959999999995 -72.443932 43.11619200000001 -72.438072 43.155945 -72.452866 43.232178000000005 -72.436066 43.307308000000006 -72.402885 43.32333 -72.410698 43.350933 -72.398094 43.37705199999999 -72.412605 43.41008400000001 -72.396713 43.48455799999999 -72.38298 43.517483 -72.395462 43.572304 -72.373962 43.597294000000005 -72.333549 43.69846000000001 -72.304504 43.735229000000004 -72.260521 43.75062199999999 -72.219589 43.764565000000005 -72.206558 43.801620000000014 -72.185303 43.878849 -72.170555 43.90914900000001 -72.122116 43.939098 -72.11367 43.95792399999999 -72.092178 43.976448000000005 -72.113274 43.98916199999999 -72.110374 44.008858000000004 -72.08567 44.03197499999999 -72.077385 44.083309000000014 -72.035194 44.096035 -72.032913 44.10038800000001 -72.04998 44.12068199999999 -72.035385 44.156372000000005 -72.045189 44.18211400000001 -72.059746 44.234318 -72.044853 44.26143300000001 -72.060028 44.299374 -72.035957 44.32748799999999 -71.994896 44.325726 -71.939369 44.336051999999995 -71.928825 44.34413900000001 -71.835281 44.350300000000004 -71.821663 44.38411300000001 -71.798195 44.39819 -71.767036 44.421284000000014 -71.677353 44.440079 -71.656868 44.469116000000014 -71.648178 44.476673000000005 -71.637024 44.47444899999999 -71.614693 44.49448000000001 -71.58709 44.52574899999999 -71.575714 44.53881799999999 -71.591911 44.551146999999986 -71.592758 44.57887600000001 -71.537262 44.59653499999999 -71.554573 44.637394 -71.568497 44.65054699999999 -71.589218 44.67781099999999 -71.608147 44.74166099999999 -71.631599 44.77914799999999 -71.583969 44.81597099999999 -71.575569 44.89962399999999 -71.506836 44.94364899999999 -71.517448 44.976517 -71.541397 45.013306 -71.505844 45.059844999999996 -71.503471 45.11694700000001 -71.430885 45.202758999999986 -71.403 45.23603800000001 -71.447037 45.23488599999999 -71.386856 45.29344900000001 -71.297714 45.237922999999995 -71.153572 45.301422 -71.08799 44.66848400000001 -71.029205 44.282082 -71.009079 43.791088 -70.984932 43.571751000000006 -70.974365 43.564064 -70.957016 43.54887400000001 -70.950111 43.53191000000001 -70.96476 43.51630800000001 -70.95977 43.47013100000001 -70.971283 43.438046000000014 -70.961975 43.39610300000001 -70.979591 43.366299 -70.970192 43.301987 -70.906296 43.280936999999994 -70.901581 43.235138000000006 -70.813705 43.159088 -70.831047 43.12178399999999 -70.819168 43.127621000000005 -70.885246 43.10144 -70.87513 43.083935 -70.905914 43.058796 -70.886993 43.089653 -70.810928 43.058673999999996 -70.734642 42.866974 -70.814384 42.863338 -70.850243 42.886787 -70.898613 42.88505900000001 -70.921837 42.85108199999999 -71.025925 42.80422999999999 -71.066063 42.81819200000001 -71.121101 42.80722800000001 -71.181557 42.73867000000001 -71.186844 42.743464999999986 -71.240974 42.725978999999995 -71.252907 42.69851299999999 -71.287689 42.705291999999986 -71.901421 42.707122999999996 -71.930695 42.720383 -72.280388New Hampshire33N EngNH23230.674875.2651109252.0292601.0411186.0543544.0565708.0415538.0443317.069904.04067.0574237.038108.0148720.078699.00.490.51193338.040.371902000000006 -96.64039643.501495000000006 -90.1426740.70540199999999 -91.119987 40.68214800000001 -91.129158 40.65631099999999 -91.162498 40.64381800000001 -91.214912 40.639545 -91.262062 40.60343900000001 -91.37561 40.572970999999995 -91.411118 40.54799299999999 -91.412872 40.52849599999999 -91.382103 40.50365400000001 -91.374794 40.44725 -91.385399 40.40298799999999 -91.372757 40.392360999999994 -91.385757 40.386875 -91.418816 40.371902000000006 -91.448593 40.39096799999999 -91.476883 40.390761999999995 -91.490158 40.40511699999999 -91.500221 40.41012599999999 -91.527534 40.43504300000001 -91.529449 40.44124600000001 -91.538689 40.455399 -91.533051 40.463718 -91.579224 40.484477999999996 -91.585869 40.50483299999999 -91.616699 40.53286399999999 -91.622375 40.55163999999999 -91.691917 40.581165 -91.689796 40.593399000000005 -91.716812 40.609748999999994 -91.741547 40.60823400000001 -91.946198 40.60006000000001 -92.192993 40.599548 -92.361328 40.59143800000001 -92.64624 40.58964499999999 -92.717621 40.58433500000001 -93.100731 40.58048199999999 -93.370056 40.58080699999999 -93.562691 40.57844499999999 -93.786079 40.57402400000001 -94.01783 40.57097200000001 -94.238159 40.57421500000001 -94.484993 40.57575600000001 -94.639633 40.57722899999999 -94.920364 40.581897999999995 -95.217171 40.58433500000001 -95.382294 40.589045999999996 -95.767204 40.620903 -95.757271 40.64311599999999 -95.767723 40.730434 -95.876335 40.792598999999996 -95.851509 40.848331 -95.846153 40.870299999999986 -95.834114 40.901107999999994 -95.836258 40.97425799999999 -95.837318 41.002650999999986 -95.860611 41.03500399999999 -95.859253 41.06587200000001 -95.878517 41.10918799999999 -95.857986 41.16420400000001 -95.876396 41.166866 -95.859512 41.18053800000001 -95.85891 41.194064999999995 -95.91581 41.207854999999995 -95.921959 41.225246 -95.91069 41.302059000000014 -95.929939 41.308471999999995 -95.910912 41.286865000000006 -95.897301 41.30139199999999 -95.888817 41.34008 -95.942604 41.39481000000001 -95.939766 41.46238700000001 -95.934776 41.47239300000001 -95.952896 41.48195999999999 -96.006607 41.492999999999995 -96.013161 41.51152400000001 -95.996399 41.528110999999996 -95.993675 41.53667100000001 -96.004303 41.52434199999999 -96.049881 41.537529000000006 -96.085548 41.563152 -96.091644 41.576008 -96.080544 41.59901400000001 -96.111015 41.65468999999999 -96.099014 41.68410499999999 -96.119972 41.69492299999999 -96.12191 41.70499799999999 -96.085266 41.73157499999999 -96.09948 41.75298699999999 -96.09903 41.791481000000005 -96.076126 41.86263299999999 -96.13533 41.90416300000001 -96.159676 41.92491899999999 -96.145576 41.96626699999999 -96.147034 41.98069799999999 -96.184921 41.99662799999999 -96.202545 42.001270000000005 -96.235794 42.02844999999999 -96.238426 42.04890800000001 -96.265182 42.12346299999999 -96.284821 42.168194 -96.35186 42.214049999999986 -96.363205 42.22953000000001 -96.337402 42.26031499999999 -96.332352 42.28208900000001 -96.342575 42.29803100000001 -96.368393 42.32879600000001 -96.389473 42.34928500000001 -96.423866 42.38092399999999 -96.411453 42.414783 -96.41732 42.441799 -96.397583 42.46740700000001 -96.395767 42.48924600000001 -96.439087 42.517135999999994 -96.479935 42.56403399999999 -96.489029 42.573891 -96.500633 42.58048600000001 -96.48819 42.629761 -96.512535 42.66241099999999 -96.540855 42.668518000000006 -96.562729 42.708359 -96.626228 42.74860799999999 -96.640396 42.77683999999999 -96.632668 42.799564000000004 -96.600563 42.835387999999995 -96.587334 42.83435399999999 -96.572815 42.846667999999994 -96.555901 42.89691500000001 -96.537201 42.91387599999999 -96.543953 42.952393 -96.514626 42.986469 -96.516838 43.012061999999986 -96.498711 43.05152100000001 -96.519699 43.06189699999999 -96.479263 43.07559599999999 -96.461784 43.087886999999995 -96.460495 43.12632400000001 -96.451195 43.20909900000001 -96.472801 43.217926000000006 -96.486931 43.225505999999996 -96.558289 43.23965100000001 -96.566673 43.25328099999999 -96.55925 43.263630000000006 -96.570404 43.29009199999999 -96.578812 43.30767800000001 -96.540245 43.356987000000004 -96.522575 43.38424699999999 -96.524734 43.40074899999999 -96.557388 43.435562000000004 -96.588791 43.481944999999996 -96.583473 43.499874000000005 -96.597992 43.49974399999999 -96.460136 43.49856600000001 -96.060738 43.498977999999994 -95.866615 43.49957699999999 -95.464493 43.500370000000004 -95.396278 43.499413000000004 -94.920197 43.50007199999999 -94.859573 43.49814599999999 -94.454987 43.49899300000001 -94.246544 43.50034299999999 -93.973717 43.500809000000004 -93.653481 43.50053399999999 -93.500618 43.501495000000006 -93.054184 43.501316 -93.027016 43.500294 -92.557831 43.49949599999999 -92.452995 43.499187000000006 -92.07737 43.49960300000001 -91.730217 43.50065599999999 -91.610954 43.500834999999995 -91.223434 43.46471 -91.235771 43.424076000000014 -91.210785 43.37053700000001 -91.198112 43.353970000000004 -91.176918 43.313320000000004 -91.078369 43.280703999999986 -91.066299 43.25791899999999 -91.068924 43.147594 -91.161224 43.08290500000001 -91.168442 43.081199999999995 -91.159622 43.00133099999999 -91.152084 42.925906999999995 -91.138992 42.871452000000005 -91.0933 42.78337500000001 -91.081902 42.744923 -91.06604 42.707066 -90.999054 42.68068299999999 -90.919281 42.678246 -90.892418 42.657005 -90.745483 42.637932000000006 -90.694664 42.571392 -90.664253 42.555713999999995 -90.639091 42.528560999999996 -90.62558 42.50936100000001 -90.638329 42.494698 -90.651772 42.47564299999999 -90.648346 42.46055999999999 -90.605827 42.42183700000001 -90.563583 42.38878299999999 -90.491043 42.360073 -90.441597 42.340633 -90.427681 42.263924 -90.417984 42.24264500000001 -90.407173 42.21020899999999 -90.367729 42.19731899999999 -90.323601 42.15972099999999 -90.230934 42.12268800000001 -90.191574 42.12050199999999 -90.176086 42.103745 -90.166649 42.06104300000001 -90.168098 42.03342799999999 -90.150536 41.98396299999999 -90.14267 41.93077500000001 -90.154518 41.80613700000001 -90.195839 41.78173799999999 -90.25531 41.75646599999999 -90.304886 41.722736 -90.326027 41.64909 -90.341133 41.60279800000001 -90.339348 41.586849 -90.348366 41.567272 -90.423004 41.543578999999994 -90.434967 41.527546 -90.454994 41.52597 -90.54084 41.50958600000001 -90.6007 41.46231800000001 -90.658791 41.450062 -90.708214 41.449820999999986 -90.7799 41.44462200000001 -90.844139 41.421234 -90.949654 41.431084 -91.000694 41.423508 -91.027489 41.40137899999999 -91.055786 41.334895999999986 -91.07328 41.267818000000005 -91.102348 41.23152200000001 -91.101524 41.17625799999999 -91.05632 41.16582500000001 -91.018257 41.14437100000001 -90.990341 41.10435899999999 -90.957787 41.07036199999999 -90.954651 40.950503999999995 -90.960709 40.92392699999999 -90.983276 40.87958499999999 -91.04921 40.833729000000005 -91.088905 40.76154700000001 -91.092751 40.70540199999999 -91.119987Iowa19W N CenIA144715.9891037.6592776755.0740819.01064325.01344802.01431953.01013757.0970933.0156930.016373.01340242.063641.0429860.0217271.00.4840.516579075.041.238155000000006 -73.49927542.886787 -69.9183241.77209500000001 -71.319832 41.784324999999995 -71.340302 41.813061000000005 -71.345985 41.85780299999999 -71.335045 41.87568300000001 -71.342995 41.89593099999999 -71.333588 41.88834 -71.384453 41.979164 -71.382904 42.01361499999999 -71.379143 42.00915499999999 -71.497925 42.004177 -71.798317 42.01787899999999 -71.802826 42.02570299999999 -72.095451 42.026306000000005 -72.136826 42.030669999999986 -72.508041 42.03002900000001 -72.571693 42.021511000000004 -72.582375 42.022705 -72.608292 42.030440999999996 -72.609993 42.03375199999999 -72.756355 42.002071 -72.768036 41.99708899999999 -72.818138 42.033412999999996 -72.81691 42.03591499999999 -73.006546 42.03621699999999 -73.046082 42.047337 -73.484665 42.07737 -73.499275 42.504673 -73.351273 42.745979000000005 -73.258507 42.74031400000001 -73.020149 42.73728199999999 -72.923454 42.725769000000014 -72.456238 42.720383 -72.280388 42.707122999999996 -71.930695 42.705291999999986 -71.901421 42.69851299999999 -71.287689 42.725978999999995 -71.252907 42.743464999999986 -71.240974 42.73867000000001 -71.186844 42.80722800000001 -71.181557 42.81819200000001 -71.121101 42.80422999999999 -71.066063 42.85108199999999 -71.025925 42.88505900000001 -70.921837 42.886787 -70.898613 42.863338 -70.850243 42.866974 -70.814384 42.66342900000001 -70.740204 42.646209999999996 -70.593712 42.58254600000001 -70.633965 42.54634100000001 -70.813637 42.447970999999995 -70.894112 42.432297000000005 -70.961128 42.285529999999994 -71.034668 42.23441700000001 -70.923714 42.26566700000001 -70.893181 42.26040599999999 -70.825172 42.248538999999994 -70.775108 42.153065 -70.686554 41.968086 -70.619225 41.930847 -70.540863 41.805656 -70.538231 41.743515 -70.424042 41.721554 -70.274368 41.711704 -70.34166 41.712463000000014 -70.205795 41.781409999999994 -70.019753 41.856243000000006 -70.000984 42.00209000000001 -70.101028 42.06001699999999 -70.255676 42.07239200000001 -70.13562 42.026196 -70.051003 41.903988 -69.964706 41.76754399999999 -69.91832 41.67138299999999 -69.954964 41.612460999999996 -70.398148 41.56964500000001 -70.433449 41.53969599999999 -70.637665 41.55601899999999 -70.665413 41.73553100000001 -70.620285 41.626587 -70.839951 41.63380799999999 -70.892647 41.52001999999999 -71.001701 41.49295799999999 -71.117645 41.65517 -71.141724 41.67839799999999 -71.199318 41.707592000000005 -71.229485 41.749641 -71.267136 41.77209500000001 -71.31983241.429550000000006 -70.604858 41.46445499999999 -70.568222 41.41727399999999 -70.55336 41.41017199999999 -70.576385 41.39854399999999 -70.515686 41.341442 -70.486671 41.33404200000001 -70.739204 41.29804999999999 -70.770241 41.348488 -70.844444 41.352406 -70.783051 41.32486700000001 -70.771454 41.382057 -70.752296 41.454826 -70.668015 41.47455199999999 -70.606369 41.429550000000006 -70.60485841.31181000000001 -70.032257 41.32465400000001 -70.00705 41.33708999999999 -70.027161 41.29672600000001 -70.088173 41.349597999999986 -70.035027 41.391842 -70.049805 41.294769 -69.966522 41.251693999999986 -69.968987 41.238155000000006 -70.103645 41.270081000000005 -70.213806 41.29396399999999 -70.207634 41.27750800000001 -70.098412 41.31181000000001 -70.032257Massachusetts25N EngMA20300.3492606.7386016425.01514746.02247110.02888745.03127680.02268095.02148065.0318026.0247381.03027950.0218000.0718354.0345333.00.480.52808423.039.99259599999999 -104.05572543.003094000000004 -95.30844140.00100699999999 -101.406952 39.99892800000001 -102.051071 40.34265099999999 -102.047081 40.431084 -102.047157 40.69732300000001 -102.04557 40.743134 -102.046532 40.998076999999995 -102.047279 41.000225 -102.620789 40.99813499999999 -102.651802 41.000331999999986 -103.382469 40.999663999999996 -103.571823 41.00322700000001 -104.051201 41.38810699999999 -104.053505 41.564246999999995 -104.054993 41.69824600000001 -104.053108 41.99985100000001 -104.053009 42.61470399999999 -104.055725 43.003094000000004 -104.05571 42.99865 -103.500984 42.99937399999999 -103.005409 42.99532300000001 -102.787933 42.989891 -102.086273 42.98683500000001 -101.231308 42.99108899999999 -100.197739 42.992332000000005 -99.532402 42.99239 -99.253593 42.991783 -98.497292 42.937163999999996 -98.457085 42.920139000000006 -98.390846 42.881798 -98.309982 42.839573 -98.167473 42.83579599999999 -98.144516 42.82022499999999 -98.122765 42.80836099999999 -98.121468 42.769192000000004 -98.032791 42.76681099999999 -97.994797 42.77368899999999 -97.963211 42.79232400000001 -97.929131 42.83127200000001 -97.889595 42.855807999999996 -97.888313 42.866589000000005 -97.818298 42.849597999999986 -97.796684 42.84616500000001 -97.771843 42.85800900000001 -97.724907 42.836838 -97.68541 42.86128600000001 -97.634628 42.847992000000005 -97.570312 42.860138000000006 -97.505791 42.857158999999996 -97.482819 42.85044500000001 -97.456924 42.867435 -97.388969 42.861774 -97.311081 42.850018000000006 -97.271126 42.85183000000001 -97.242859 42.841206 -97.224113 42.81257600000001 -97.211502 42.798621999999995 -97.161095 42.77392599999999 -97.130142 42.759544000000005 -97.014816 42.75831600000001 -96.979271 42.75206800000001 -96.969681 42.72730999999999 -96.977547 42.721149 -96.970451 42.73170099999999 -96.907913 42.70408599999999 -96.809822 42.681343 -96.81012 42.67002099999999 -96.799026 42.66859400000001 -96.722343 42.657718999999986 -96.698746 42.641166999999996 -96.694283 42.621910000000014 -96.714958 42.61230499999999 -96.713745 42.550735 -96.63636 42.522696999999994 -96.628983 42.507239999999996 -96.605156 42.518291000000005 -96.584442 42.52050399999999 -96.546906 42.48846399999999 -96.494392 42.48924600000001 -96.439087 42.46740700000001 -96.395767 42.441799 -96.397583 42.414783 -96.41732 42.38092399999999 -96.411453 42.34928500000001 -96.423866 42.32879600000001 -96.389473 42.29803100000001 -96.368393 42.28208900000001 -96.342575 42.26031499999999 -96.332352 42.22953000000001 -96.337402 42.214049999999986 -96.363205 42.168194 -96.35186 42.12346299999999 -96.284821 42.04890800000001 -96.265182 42.02844999999999 -96.238426 42.001270000000005 -96.235794 41.99662799999999 -96.202545 41.98069799999999 -96.184921 41.96626699999999 -96.147034 41.92491899999999 -96.145576 41.90416300000001 -96.159676 41.86263299999999 -96.13533 41.791481000000005 -96.076126 41.75298699999999 -96.09903 41.73157499999999 -96.09948 41.70499799999999 -96.085266 41.69492299999999 -96.12191 41.68410499999999 -96.119972 41.65468999999999 -96.099014 41.59901400000001 -96.111015 41.576008 -96.080544 41.563152 -96.091644 41.537529000000006 -96.085548 41.52434199999999 -96.049881 41.53667100000001 -96.004303 41.528110999999996 -95.993675 41.51152400000001 -95.996399 41.492999999999995 -96.013161 41.48195999999999 -96.006607 41.47239300000001 -95.952896 41.46238700000001 -95.934776 41.39481000000001 -95.939766 41.34008 -95.942604 41.30139199999999 -95.888817 41.286865000000006 -95.897301 41.308471999999995 -95.910912 41.302059000000014 -95.929939 41.225246 -95.91069 41.207854999999995 -95.921959 41.194064999999995 -95.91581 41.18053800000001 -95.85891 41.166866 -95.859512 41.16420400000001 -95.876396 41.10918799999999 -95.857986 41.06587200000001 -95.878517 41.03500399999999 -95.859253 41.002650999999986 -95.860611 40.97425799999999 -95.837318 40.901107999999994 -95.836258 40.870299999999986 -95.834114 40.848331 -95.846153 40.792598999999996 -95.851509 40.730434 -95.876335 40.64311599999999 -95.767723 40.620903 -95.757271 40.589045999999996 -95.767204 40.549705999999986 -95.763138 40.53237200000001 -95.736763 40.52412799999999 -95.691795 40.56116900000001 -95.687141 40.565833999999995 -95.675423 40.558727000000005 -95.662674 40.53033099999999 -95.657791 40.512203 -95.6847 40.48533599999999 -95.695091 40.396389 -95.636551 40.358799000000005 -95.633919 40.346497 -95.615936 40.33141699999999 -95.617668 40.32234600000001 -95.645287 40.30910900000001 -95.646561 40.309776 -95.595268 40.266215999999986 -95.546875 40.226856 -95.476562 40.213257 -95.466377 40.17399599999999 -95.460693 40.131744 -95.422218 40.11541700000001 -95.392555 40.09536399999999 -95.384285 40.08037899999999 -95.403526 40.048111000000006 -95.413506 40.043750999999986 -95.390274 40.028751 -95.370987 40.02497500000001 -95.34481 39.999409000000014 -95.308441 39.99259599999999 -95.329445 39.99348800000001 -95.780434 39.995159 -96.000977 39.99450300000001 -96.240311 39.994170999999994 -96.453743 39.994473 -96.801117 39.996151 -96.907982 39.997375000000005 -97.361595 39.999718 -97.816269 39.99843999999999 -97.929268 39.99842100000001 -98.26384 39.997116000000005 -98.504143 39.998447 -98.720284 39.998324999999994 -99.064384 39.99956499999999 -99.177834 40.00297900000001 -99.627472 40.000473 -100.180496 40.000580000000014 -100.190697 39.999168 -100.734619 40.00019499999999 -100.754425 40.001823 -101.321709 40.00100699999999 -101.406952Nebraska31W N CenNE199113.2031244.9571578385.0415427.0602363.0769439.0808946.0571600.0590216.086820.08988.0772813.029326.0249094.0108841.00.4870.513328831.040.505898 -79.76346645.0061 -71.87047642.267269 -79.763466 42.41930400000001 -79.444252 42.493404 -79.355118 42.574557999999996 -79.142471 42.69918799999999 -79.043991 42.792686 -78.859444 42.974174000000005 -78.93679 43.022301 -78.883034 43.06657000000001 -78.925835 43.09054900000001 -79.061348 43.14468400000001 -79.039558 43.26816199999999 -79.062469 43.371937 -78.464905 43.36551299999999 -77.992271 43.335109999999986 -77.745277 43.24148600000001 -77.575989 43.27565000000001 -77.377602 43.27852999999999 -76.914841 43.342667000000006 -76.737152 43.323375999999996 -76.718796 43.414085 -76.619957 43.500652 -76.454994 43.554084999999986 -76.223114 43.633129 -76.184921 43.68263200000001 -76.206017 43.83506399999999 -76.240341 43.91243 -76.194069 43.93214800000001 -76.129417 44.013172 -76.134872 44.06554399999999 -76.201889 44.04196200000001 -76.297226 44.09830099999999 -76.363213 44.390209 -75.848351 44.51747499999999 -75.758972 44.81057000000001 -75.329201 44.948578 -74.968819 44.99286699999999 -74.736481 44.990803 -74.021935 45.0061 -73.345146 44.981933999999995 -73.351181 44.93256400000001 -73.336838 44.847893 -73.382729 44.81907699999999 -73.369476 44.799251999999996 -73.327209 44.72419400000001 -73.373581 44.68032500000001 -73.358574 44.66123200000001 -73.37352 44.634303999999986 -73.37056 44.61976200000001 -73.382248 44.57912099999999 -73.371719 44.55392499999999 -73.348236 44.54428100000001 -73.334877 44.432804000000004 -73.293747 44.405483000000004 -73.300423 44.36734000000001 -73.330215 44.26008999999999 -73.305756 44.20119500000001 -73.377762 44.172054 -73.382492 44.136173000000014 -73.408295 44.10655600000001 -73.409187 44.06384299999999 -73.435646 44.045624000000004 -73.436432 44.01816600000001 -73.408684 43.98813999999999 -73.417839 43.914749 -73.405769 43.885918000000004 -73.375557 43.80444700000001 -73.385178 43.778366000000005 -73.359436 43.756496 -73.357109 43.71421799999999 -73.371429 43.63204999999999 -73.423401 43.582413 -73.418762 43.56907699999999 -73.388557 43.61493300000001 -73.364128 43.624649000000005 -73.303978 43.619586999999996 -73.294548 43.593121 -73.282181 43.57496599999999 -73.291847 43.559315 -73.260429 43.512764000000004 -73.238838 43.310779999999994 -73.250519 42.94021599999999 -73.276451 42.83702500000001 -73.280029 42.803471 -73.296616 42.747401999999994 -73.269722 42.745979000000005 -73.258507 42.504673 -73.351273 42.07737 -73.499275 42.047337 -73.484665 41.665592000000004 -73.517578 41.522651999999994 -73.530823 41.365204000000006 -73.544724 41.293526000000014 -73.55069 41.21065899999999 -73.478554 41.100258 -73.725662 41.012519999999995 -73.654152 40.99829500000001 -73.65358 40.88658899999999 -73.780464 40.832233 -73.796768 40.802704000000006 -73.92028 40.70389900000001 -74.006599 40.737629 -74.006676 40.79738599999999 -73.977478 40.885941 -73.922813 40.92721599999999 -73.909386 40.96077299999999 -73.896568 40.99843200000001 -73.897118 41.123515999999995 -74.213448 41.137530999999996 -74.242767 41.19575499999999 -74.372383 41.35047900000001 -74.700455 41.374966 -74.705666 41.401543000000004 -74.740829 41.421966999999995 -74.740433 41.43005400000001 -74.755219 41.429824999999994 -74.79319 41.447063000000014 -74.864456 41.44458 -74.895668 41.461803 -74.898949 41.484261000000004 -74.932953 41.48351299999999 -74.972176 41.539467 -75.015274 41.56571199999999 -75.025475 41.604389 -75.070251 41.612990999999994 -75.072838 41.637226 -75.051712 41.714747999999986 -75.065788 41.72662 -75.057358 41.770172 -75.061707 41.778954 -75.097542 41.79711900000001 -75.097214 41.81406000000001 -75.080231 41.83689899999999 -75.118164 41.84909400000001 -75.125137 41.85570100000001 -75.148666 41.867751999999996 -75.171669 41.868786 -75.254898 41.947517000000005 -75.284073 41.96118899999999 -75.324448 41.992760000000004 -75.346039 41.998271999999986 -75.383194 41.996284 -75.48011 41.999424000000005 -76.105186 42.000580000000014 -76.14537 42.002937 -76.564247 42.00246000000001 -76.928711 42.00290699999999 -76.968887 41.998760000000004 -77.613136 41.997265 -77.745293 41.99813499999999 -78.204529 41.99935500000001 -78.305351 41.999786 -78.918777 42.00109900000001 -79.059723 42.00053 -79.612595 42.003052 -79.761887 42.267269 -79.76346640.594482 -73.752632 40.557545000000005 -73.928009 40.618134 -73.761818 40.636829000000006 -73.765358 40.65249600000001 -73.846481 40.63102699999999 -73.916153 40.59016399999999 -73.880234 40.581154 -74.004456 40.63923299999999 -74.028137 40.739281000000005 -73.956024 40.79701600000001 -73.899437 40.78874999999999 -73.754341 40.844898 -73.749901 40.90304599999999 -73.598701 40.87964600000001 -73.478523 40.922459 -73.431084 40.90094400000001 -73.214966 40.95129800000001 -73.141426 40.968334 -73.021721 40.98118600000001 -72.632034 41.149235000000004 -72.317505 41.142437 -72.281624 41.11010400000001 -72.354752 41.02593999999999 -72.416817 40.966080000000005 -72.551437 40.905201000000005 -72.605278 40.92004800000001 -72.476578 41.02391800000001 -72.293556 41.03527500000001 -72.203827 41.000473 -72.077492 41.08476999999999 -71.924187 41.07440600000001 -71.870476 41.030472 -71.919189 40.814941000000005 -72.521629 40.661224000000004 -73.422958 40.594482 -73.75263240.626282 -73.293495 40.63297700000001 -73.29158 40.63297700000001 -73.240875 40.67506800000001 -73.051468 40.737246999999996 -72.877357 40.76403400000001 -72.782654 40.76786000000001 -72.757782 40.75829300000001 -72.764481 40.69994 -72.956764 40.67124200000001 -73.03138 40.625324000000006 -73.249489 40.626282 -73.29349540.505898 -74.23735 40.537800000000004 -74.23735 40.624393 -74.16671 40.649460000000005 -74.07328 40.60160400000001 -74.059608 40.544636 -74.123413 40.510456000000005 -74.194054 40.505898 -74.23735New York36Mid AtlNY120316.1716262.711.8235907E74548344.06746555.08739138.09496769.06763332.04467866.0881693.02113133.08498119.0636280.02104413.01035767.00.4790.5212564485.039.719234 -80.52625342.267269 -74.70045539.719528 -77.476082 39.725368 -78.096222 39.724007 -78.334816 39.723659999999995 -78.385048 39.723029999999994 -78.818016 39.722252 -78.930428 39.719234 -79.396851 39.72019599999999 -79.481209 39.72172900000001 -79.765358 39.721588 -79.918488 39.719761000000005 -80.429283 39.721126999999996 -80.524467 39.95834400000001 -80.524857 40.022751 -80.525169 40.16244900000001 -80.526253 40.40296599999999 -80.523773 40.478717999999986 -80.524567 40.63713799999999 -80.522209 40.854107 -80.520515 40.897209000000004 -80.521133 41.12957 -80.52314 41.48923500000001 -80.520203 41.495048999999995 -80.524132 41.850719 -80.52285 41.986816000000005 -80.520798 42.267269 -79.763466 42.003052 -79.761887 42.00053 -79.612595 42.00109900000001 -79.059723 41.999786 -78.918777 41.99935500000001 -78.305351 41.99813499999999 -78.204529 41.997265 -77.745293 41.998760000000004 -77.613136 42.00290699999999 -76.968887 42.00246000000001 -76.928711 42.002937 -76.564247 42.000580000000014 -76.14537 41.999424000000005 -76.105186 41.996284 -75.48011 41.998271999999986 -75.383194 41.992760000000004 -75.346039 41.96118899999999 -75.324448 41.947517000000005 -75.284073 41.868786 -75.254898 41.867751999999996 -75.171669 41.85570100000001 -75.148666 41.84909400000001 -75.125137 41.83689899999999 -75.118164 41.81406000000001 -75.080231 41.79711900000001 -75.097214 41.778954 -75.097542 41.770172 -75.061707 41.72662 -75.057358 41.714747999999986 -75.065788 41.637226 -75.051712 41.612990999999994 -75.072838 41.604389 -75.070251 41.56571199999999 -75.025475 41.539467 -75.015274 41.48351299999999 -74.972176 41.484261000000004 -74.932953 41.461803 -74.898949 41.44458 -74.895668 41.447063000000014 -74.864456 41.429824999999994 -74.79319 41.43005400000001 -74.755219 41.421966999999995 -74.740433 41.401543000000004 -74.740829 41.374966 -74.705666 41.35047900000001 -74.700455 41.311871 -74.792053 41.29512 -74.794533 41.282612 -74.825584 41.22672299999999 -74.866798 41.20667599999999 -74.863274 41.141009999999994 -74.915154 41.111759000000006 -74.950378 41.09928500000001 -74.984978 41.08166499999999 -74.989265 41.082581000000005 -74.966675 41.062388999999996 -75.001534 41.028107000000006 -75.035637 41.01061999999999 -75.070358 41.00015300000001 -75.116997 40.97743199999999 -75.139679 40.962841 -75.135902 40.90325200000001 -75.080116 40.884528999999986 -75.074066 40.871948 -75.05687 40.85557600000001 -75.055 40.83918800000001 -75.099922 40.821293 -75.089592 40.791561 -75.100922 40.772609999999986 -75.130699 40.774711999999994 -75.170692 40.747906 -75.194023 40.723759 -75.188133 40.68596299999999 -75.205734 40.669692999999995 -75.184441 40.65063900000001 -75.209297 40.634106 -75.198318 40.614643 -75.200768 40.58366799999999 -75.193893 40.570583 -75.197952 40.55669800000001 -75.182663 40.564696999999995 -75.124908 40.545254 -75.08017 40.52090100000001 -75.064064 40.45615000000001 -75.070503 40.42006699999999 -75.057838 40.401218 -75.021652 40.40851599999999 -75.000862 40.40434300000001 -74.973228 40.34536700000001 -74.950577 40.33366799999999 -74.932892 40.31392700000001 -74.921539 40.29948400000001 -74.88105 40.248344 -74.843155 40.177616 -74.73922 40.14919699999999 -74.725876 40.12424899999999 -74.746689 40.116051 -74.829414 40.077946 -74.872314 40.05790300000001 -74.956589 40.033962 -74.983871 40.00752299999999 -75.046059 39.98527899999999 -75.068428 39.97561999999999 -75.084969 39.97657799999999 -75.111343 39.95580699999999 -75.140244 39.934628000000004 -75.147537 39.89677399999999 -75.136185 39.88148899999999 -75.14328 39.87729300000001 -75.185982 39.850291999999996 -75.247368 39.845425000000006 -75.254112 39.84840399999999 -75.346298 39.798869999999994 -75.42083 39.826435000000004 -75.470345 39.84000800000001 -75.583794 39.83819600000001 -75.644341 39.820347 -75.695114 39.77481800000001 -75.745934 39.72444200000001 -75.775269 39.72375500000001 -75.791435 39.72212200000001 -76.139549 39.72174799999999 -76.233444 39.72016099999999 -76.570145 39.72115299999999 -76.790794 39.72079099999999 -76.997108 39.72058100000001 -77.221344 39.719978 -77.464722 39.719528 -77.476082Pennsylvania42Mid AtlPA116082.7371274.5841.1881643E73155989.04495966.05694265.06187378.04416669.03818385.0689656.0343724.05434532.0344795.01426851.0916786.00.4790.5212147891.040.99829500000001 -73.72566242.047337 -71.78873441.522651999999994 -73.530823 41.665592000000004 -73.517578 42.047337 -73.484665 42.03621699999999 -73.046082 42.03591499999999 -73.006546 42.033412999999996 -72.81691 41.99708899999999 -72.818138 42.002071 -72.768036 42.03375199999999 -72.756355 42.030440999999996 -72.609993 42.022705 -72.608292 42.021511000000004 -72.582375 42.03002900000001 -72.571693 42.030669999999986 -72.508041 42.026306000000005 -72.136826 42.02570299999999 -72.095451 42.01787899999999 -71.802826 42.004177 -71.798317 41.72150400000001 -71.788734 41.641659000000004 -71.793091 41.601208000000014 -71.79068 41.415729999999996 -71.80323 41.40375499999999 -71.846481 41.34186199999999 -71.837357 41.325249000000014 -71.848259 41.32266999999999 -71.867165 41.281048 -72.281891 41.28954300000001 -72.326828 41.35825 -72.378883 41.27800400000001 -72.378624 41.26360299999999 -72.52771 41.26996600000001 -72.907188 41.160942000000006 -73.104866 40.99829500000001 -73.65358 41.012519999999995 -73.654152 41.100258 -73.725662 41.21065899999999 -73.478554 41.293526000000014 -73.55069 41.365204000000006 -73.544724 41.522651999999994 -73.530823Connecticut09N EngCT12549.571748.4953287116.0864493.01230479.01592873.01694243.01248972.01300825.0186944.065805.01692874.095819.0402039.0195403.00.4850.515446558.041.32266999999999 -71.86716542.01361499999999 -71.11764541.601208000000014 -71.79068 41.641659000000004 -71.793091 41.72150400000001 -71.788734 42.004177 -71.798317 42.00915499999999 -71.497925 42.01361499999999 -71.379143 41.979164 -71.382904 41.88834 -71.384453 41.89593099999999 -71.333588 41.87568300000001 -71.342995 41.85780299999999 -71.335045 41.813061000000005 -71.345985 41.784324999999995 -71.340302 41.77209500000001 -71.319832 41.749641 -71.267136 41.707592000000005 -71.229485 41.67944700000001 -71.284508 41.74124900000001 -71.367889 41.761055 -71.394081 41.703190000000006 -71.369514 41.65211099999999 -71.419746 41.48658800000001 -71.427818 41.39198300000001 -71.490387 41.32716400000001 -71.722755 41.32266999999999 -71.867165 41.325249000000014 -71.848259 41.34186199999999 -71.837357 41.40375499999999 -71.846481 41.415729999999996 -71.80323 41.601208000000014 -71.7906841.67839799999999 -71.199318 41.65517 -71.141724 41.49295799999999 -71.117645 41.46321499999999 -71.200447 41.67839799999999 -71.19931841.62116599999999 -71.269676 41.63553999999999 -71.219955 41.47474700000001 -71.239182 41.483517000000006 -71.288513 41.44575499999999 -71.350029 41.62116599999999 -71.269676Rhode Island44N EngRI2706.52538.0561003464.0258886.0377977.0481496.0521968.0377122.0375766.058141.012187.0487913.034690.0131213.075612.00.480.52128740.038.95657 -75.57058741.35047900000001 -73.89656839.71474499999999 -75.489639 39.71997099999999 -75.476334 39.74171799999999 -75.475128 39.763248000000004 -75.460754 39.778130000000004 -75.428009 39.789658 -75.412117 39.798869999999994 -75.42083 39.84840399999999 -75.346298 39.845425000000006 -75.254112 39.850291999999996 -75.247368 39.87729300000001 -75.185982 39.88148899999999 -75.14328 39.89677399999999 -75.136185 39.934628000000004 -75.147537 39.95580699999999 -75.140244 39.97657799999999 -75.111343 39.97561999999999 -75.084969 39.98527899999999 -75.068428 40.00752299999999 -75.046059 40.033962 -74.983871 40.05790300000001 -74.956589 40.077946 -74.872314 40.116051 -74.829414 40.12424899999999 -74.746689 40.14919699999999 -74.725876 40.177616 -74.73922 40.248344 -74.843155 40.29948400000001 -74.88105 40.31392700000001 -74.921539 40.33366799999999 -74.932892 40.34536700000001 -74.950577 40.40434300000001 -74.973228 40.40851599999999 -75.000862 40.401218 -75.021652 40.42006699999999 -75.057838 40.45615000000001 -75.070503 40.52090100000001 -75.064064 40.545254 -75.08017 40.564696999999995 -75.124908 40.55669800000001 -75.182663 40.570583 -75.197952 40.58366799999999 -75.193893 40.614643 -75.200768 40.634106 -75.198318 40.65063900000001 -75.209297 40.669692999999995 -75.184441 40.68596299999999 -75.205734 40.723759 -75.188133 40.747906 -75.194023 40.774711999999994 -75.170692 40.772609999999986 -75.130699 40.791561 -75.100922 40.821293 -75.089592 40.83918800000001 -75.099922 40.85557600000001 -75.055 40.871948 -75.05687 40.884528999999986 -75.074066 40.90325200000001 -75.080116 40.962841 -75.135902 40.97743199999999 -75.139679 41.00015300000001 -75.116997 41.01061999999999 -75.070358 41.028107000000006 -75.035637 41.062388999999996 -75.001534 41.082581000000005 -74.966675 41.08166499999999 -74.989265 41.09928500000001 -74.984978 41.111759000000006 -74.950378 41.141009999999994 -74.915154 41.20667599999999 -74.863274 41.22672299999999 -74.866798 41.282612 -74.825584 41.29512 -74.794533 41.311871 -74.792053 41.35047900000001 -74.700455 41.19575499999999 -74.372383 41.137530999999996 -74.242767 41.123515999999995 -74.213448 40.99843200000001 -73.897118 40.96077299999999 -73.896568 40.92721599999999 -73.909386 40.885941 -73.922813 40.79738599999999 -73.977478 40.737629 -74.006676 40.70389900000001 -74.006599 40.64696900000001 -74.129471 40.705524 -74.115944 40.675377 -74.14727 40.591083999999995 -74.208664 40.51419799999999 -74.27932 40.46364199999999 -74.269325 40.443478 -74.224915 40.45135099999999 -74.122299 40.32350500000001 -73.978859 40.10172700000001 -74.03965 40.115971 -74.091843 40.088066 -74.08419 40.091251 -74.034714 40.05673999999999 -74.050209 40.051445 -74.122597 40.042156000000006 -74.077751 39.87848700000001 -74.159645 39.718154999999996 -74.171844 39.62392800000001 -74.238091 39.571968 -74.323753 39.52350999999999 -74.329262 39.54250300000001 -74.412796 39.50251 -74.401527 39.42663999999999 -74.460823 39.38095899999999 -74.447906 39.287136000000004 -74.65863 39.28151700000001 -74.622925 39.25071299999999 -74.624985 39.02626000000001 -74.802681 38.989731000000006 -74.879639 38.95657 -74.876686 38.971625999999986 -74.968506 39.11374699999999 -74.890587 39.170525 -74.917038 39.19825 -75.014786 39.18457799999999 -75.120331 39.37485899999999 -75.416031 39.49040199999999 -75.553116 39.56645599999999 -75.517044 39.61762200000001 -75.570587 39.71474499999999 -75.489639New Jersey34Mid AtlNJ21208.3681128.5957484736.01962314.02687478.03622220.03862516.02817265.02723918.0451438.0266063.03741297.0218598.0846794.0460013.00.4840.5161052748.037.77618 -88.10145641.76549499999999 -84.78749838.177223 -86.341629 38.19322600000001 -86.364372 38.194743999999986 -86.388329 38.167957 -86.387123 38.155495 -86.343147 38.143963000000014 -86.335442 38.13420500000001 -86.344063 38.12323000000001 -86.3937 38.10815400000001 -86.407204 38.129692000000006 -86.452545 38.12909300000001 -86.464867 38.11164500000001 -86.474358 38.08863400000001 -86.442543 38.075931999999995 -86.44249 38.05909700000001 -86.458389 38.051585999999986 -86.503136 38.046986000000004 -86.519112 38.018631 -86.527855 37.987415 -86.530869 37.942181000000005 -86.516922 37.927811000000005 -86.522758 37.921454999999995 -86.541107 37.925606 -86.581802 37.921013 -86.598328 37.857918 -86.614799 37.845943000000005 -86.645584 37.847324 -86.665939 37.860584 -86.670685 37.902514999999994 -86.660324 37.913139 -86.668671 37.91179700000001 -86.68914 37.894566 -86.728889 37.898303999999996 -86.753838 37.978745 -86.802826 37.991505000000004 -86.826317 37.986866000000006 -86.863281 37.953644 -86.900085 37.937988000000004 -86.93158 37.930565 -86.989037 37.924713 -87.013161 37.907955 -87.036484 37.807086999999996 -87.071312 37.784203000000005 -87.10643 37.789688 -87.131882 37.82692 -87.158081 37.838593 -87.175781 37.84907200000001 -87.226761 37.870773 -87.272743 37.89367300000001 -87.310555 37.93492500000001 -87.387543 37.936477999999994 -87.452278 37.91558499999999 -87.504791 37.971115 -87.604309 37.923412 -87.627121 37.890724000000006 -87.594704 37.864868 -87.59362 37.843777 -87.607574 37.828132999999994 -87.65168 37.836330000000004 -87.6847 37.897007 -87.679703 37.899711999999994 -87.709389 37.894543 -87.72818 37.898087000000004 -87.753761 37.878212000000005 -87.823624 37.890902999999994 -87.857162 37.924553 -87.89901 37.919865 -87.921867 37.904160000000005 -87.934456 37.875179 -87.936821 37.838570000000004 -87.910202 37.809685 -87.920143 37.799507000000006 -87.939583 37.77618 -87.95871 37.801308000000006 -88.011192 37.805683 -88.035576 37.817612 -88.086029 37.831249 -88.089264 37.827522 -88.042137 37.843745999999996 -88.034241 37.867808999999994 -88.075737 37.895306000000005 -88.101456 37.90617 -88.100082 37.896004000000005 -88.044868 37.905758000000006 -88.026588 37.917591 -88.030441 37.92366 -88.084 37.944 -88.078941 37.929783 -88.064621 37.934498000000005 -88.041771 37.956264000000004 -88.042511 37.975055999999995 -88.021706 38.00823600000001 -88.029213 38.03353100000001 -88.021698 38.03830300000001 -88.041473 38.04512 -88.043091 38.054084999999986 -88.034729 38.073307 -87.975296 38.09674799999999 -87.964867 38.09234599999999 -88.012329 38.10330200000001 -88.018547 38.131760000000014 -87.973503 38.13691299999999 -87.950569 38.15752800000001 -87.931992 38.171131 -87.932289 38.200714000000005 -87.977928 38.234814 -87.986008 38.241085 -87.980019 38.30477099999999 -87.925919 38.302345 -87.913651 38.281048 -87.914108 38.300658999999996 -87.888466 38.315552 -87.883446 38.316788 -87.874039 38.28536199999999 -87.863007 38.28609800000001 -87.850082 38.35252399999999 -87.834503 38.378124000000014 -87.784019 38.41796500000001 -87.748428 38.44548 -87.738953 38.45709600000001 -87.758659 38.466125000000005 -87.756096 38.48153300000001 -87.692818 38.50400500000001 -87.679909 38.50044299999999 -87.653534 38.51536899999999 -87.65139 38.54742400000001 -87.672943 38.573871999999994 -87.652855 38.593177999999995 -87.640594 38.599209 -87.619827 38.622917 -87.628647 38.642810999999995 -87.625191 38.672169 -87.588478 38.68597399999999 -87.543892 38.73663300000001 -87.508316 38.769722 -87.508003 38.77669900000001 -87.519028 38.795559 -87.507889 38.857890999999995 -87.550507 38.869811999999996 -87.559059 38.90486100000001 -87.5392 38.93191899999999 -87.530182 38.96370300000001 -87.53347 38.97707700000001 -87.547905 38.99408299999999 -87.591858 38.995743000000004 -87.581749 39.062434999999994 -87.58532 39.08460600000001 -87.612007 39.08897400000001 -87.630867 39.10394299999999 -87.631668 39.11346800000001 -87.662262 39.130652999999995 -87.659454 39.146679000000006 -87.670326 39.168507000000005 -87.644257 39.196068 -87.607925 39.198128 -87.594208 39.20846599999999 -87.588593 39.248752999999994 -87.584564 39.258162999999996 -87.606895 39.281418 -87.615799 39.297661000000005 -87.610619 39.30740399999999 -87.625237 39.338268 -87.597664 39.350525000000005 -87.540215 39.47744800000001 -87.538567 39.609341 -87.535576 39.887302000000005 -87.535774 40.16619499999999 -87.535339 40.48324600000001 -87.535675 40.494609999999994 -87.53717 40.74541099999999 -87.532669 41.00993 -87.532021 41.173756 -87.531731 41.30130399999999 -87.532448 41.46971500000001 -87.532646 41.723591 -87.529861 41.67158900000001 -87.463669 41.676331000000005 -87.419266 41.65807699999999 -87.441933 41.63415499999999 -87.394707 41.62615199999999 -87.233818 41.716465 -86.942429 41.765465000000006 -86.834801 41.76549499999999 -86.525162 41.764815999999996 -86.234558 41.764579999999995 -86.068298 41.763485 -85.799232 41.76257699999999 -85.65947 41.763531 -85.297234 41.76281700000001 -85.193169 41.76182600000001 -84.82605 41.760909999999996 -84.788521 41.69744499999999 -84.790421 41.530440999999996 -84.791412 41.42784900000001 -84.791939 41.28376800000001 -84.791016 41.253082000000006 -84.791626 40.988293 -84.790565 40.937659999999994 -84.791061 40.728813 -84.793098 40.58869200000001 -84.793289 40.353004 -84.794594 40.31945400000001 -84.795425 40.01394300000001 -84.803604 39.91711799999999 -84.80619 39.73325 -84.808739 39.563998999999995 -84.811081 39.51311100000001 -84.81115 39.31227899999999 -84.812073 39.302975 -84.812119 39.10252800000001 -84.811531 39.10363000000001 -84.827911 39.064987 -84.886757 39.050591 -84.890045 39.032837 -84.876343 39.00577200000001 -84.844276 38.98271600000001 -84.834496 38.95457099999999 -84.846367 38.92754400000001 -84.875931 38.909369999999996 -84.875305 38.901981000000006 -84.859795 38.89712900000001 -84.803276 38.884322999999995 -84.788719 38.866581 -84.787498 38.83439999999999 -84.824478 38.793346000000014 -84.818832 38.78057899999999 -84.975662 38.764229 -85.025124 38.750361999999996 -85.068504 38.714077 -85.119705 38.69511399999999 -85.16098 38.69575499999999 -85.205208 38.744316 -85.271439 38.73694599999999 -85.335052 38.738358000000005 -85.418228 38.72478100000001 -85.446732 38.694614 -85.45372 38.584778 -85.424446 38.56141299999999 -85.417503 38.53695300000001 -85.432411 38.518112 -85.466423 38.47135499999999 -85.50724 38.446606 -85.612679 38.383621000000005 -85.643631 38.33768499999999 -85.654266 38.300883999999996 -85.681427 38.27024499999999 -85.746964 38.28232199999999 -85.786247 38.28611000000001 -85.806587 38.27622199999999 -85.839943 38.23849100000001 -85.852371 38.17993200000001 -85.912109 38.06480400000001 -85.914787 38.03397799999999 -85.930908 38.01176799999999 -85.958618 38.001693999999986 -86.006699 37.992878000000005 -86.031654 37.966713 -86.05275 38.01126500000001 -86.105019 38.01768899999999 -86.190651 38.04065299999999 -86.252182 38.05810500000001 -86.277725 38.07842299999999 -86.291466 38.150238 -86.297699 38.177223 -86.341629Indiana18E N CenIN92903.666882.3275544159.01480351.02065355.02688281.02855878.02023242.02040232.0332386.034117.02628695.0160143.0746029.0518252.00.4850.515891110.034.998913 -119.99527741.99674200000001 -114.03659838.411883999999986 -119.151466 38.527195000000006 -119.31783300000001 38.703002999999995 -119.57468399999999 38.92234400000001 -119.888329 38.99419800000001 -119.99423999999999 39.063582999999994 -119.994133 39.106224 -119.99352300000001 39.158806 -119.994507 39.31163799999999 -119.99427800000001 39.443591999999995 -119.99498 39.720702999999986 -119.995132 41.177670000000006 -119.995277 41.989315000000005 -119.992401 41.98895999999999 -119.350655 41.98924299999999 -119.309906 41.99674200000001 -118.184326 41.99490399999999 -117.01790600000001 41.99490399999999 -116.991356 41.994698 -115.946617 41.99659700000001 -115.023979 41.99601000000001 -114.268616 41.995476 -114.038223 40.997761 -114.037308 40.111110999999994 -114.03727 39.90884 -114.039009 39.53874200000001 -114.039276 38.67904300000001 -114.043449 38.571140000000014 -114.044273 38.13769099999999 -114.046463 37.598507 -114.046448 36.996562999999995 -114.043137 36.84187300000001 -114.042915 36.216038 -114.036598 36.193993000000006 -114.044312 36.121105 -114.106979 36.041743999999994 -114.128227 36.017269 -114.205971 36.018345 -114.232674 36.062248 -114.306786 36.087124 -114.303055 36.111453999999995 -114.315292 36.137496999999996 -114.34343 36.151009 -114.379997 36.121071 -114.443138 36.124729 -114.465805 36.155108999999996 -114.529762 36.138355000000004 -114.598122 36.141987 -114.620796 36.105202000000006 -114.711945 36.085983 -114.727333 36.058773 -114.728149 36.036777 -114.716858 35.987667 -114.735397 35.911629000000005 -114.698463 35.880489 -114.660789 35.870975 -114.661652 35.847458 -114.689056 35.764717000000005 -114.681931 35.732609 -114.688011 35.693111 -114.664284 35.656409999999994 -114.667679 35.646595000000005 -114.653259 35.61135899999999 -114.639061 35.584843000000006 -114.652328 35.546645999999996 -114.648987 35.515761999999995 -114.67141 35.450768 -114.644592 35.358383 -114.588783 35.304771 -114.58709 35.220184 -114.558784 35.174347 -114.560242 35.140068 -114.571457 35.132560999999995 -114.581818 35.133906999999994 -114.625641 35.118656 -114.635109 35.076057000000006 -114.594833 35.041861999999995 -114.63298 34.998913 -114.62027 35.795722999999995 -115.625359 36.001259000000005 -115.884918 36.959655999999995 -117.15952300000001 37.457367000000005 -117.837761 37.886745000000005 -118.416466 38.411883999999986 -119.151466Nevada32MtnNV284397.1911971.0491201833.0307400.0466297.0611880.0589953.0475643.0443571.093635.016096.0607437.040083.0222792.067743.00.5090.491159997.036.991749 -114.04646342.002376999999996 -109.04254238.13769099999999 -114.046463 38.571140000000014 -114.044273 38.67904300000001 -114.043449 39.53874200000001 -114.039276 39.90884 -114.039009 40.111110999999994 -114.03727 40.997761 -114.037308 41.995476 -114.038223 42.001228 -112.988754 41.99913000000001 -112.146324 42.002376999999996 -112.099724 42.00023999999999 -111.49382 41.996264999999994 -111.047951 41.57864799999999 -111.050323 41.25847999999999 -111.050911 40.996635 -111.050285 40.99794 -110.062477 40.997646 -110.001457 40.99847399999999 -109.047638 40.665329000000014 -109.045479 40.210544999999996 -109.050591 39.65741 -109.051888 39.51819599999999 -109.052864 39.36098899999999 -109.050751 38.494663 -109.053284 38.24493000000001 -109.055199 38.15294299999999 -109.042801 37.887428 -109.042542 37.630829000000006 -109.044937 36.996643000000006 -109.047821 36.992065 -109.996399 36.991749 -110.451546 37.003929 -110.483398 37.002491000000006 -110.739372 37.001720000000006 -111.355453 36.995506000000006 -112.236511 36.998008999999996 -112.541763 36.99624300000001 -112.899216 36.996562999999995 -114.043137 37.598507 -114.046448 38.13769099999999 -114.046463Utah49MtnUT212815.5467086.1521722850.0410862.0537273.0855759.0867091.0564185.0541226.0111197.016971.0736059.041389.0196289.0102232.00.4970.503304592.032.535725 -124.39147242.00234599999999 -114.12445138.16936899999999 -121.664154 38.066856 -121.781296 38.072990000000004 -121.90169499999999 38.13958400000001 -121.983475 38.071158999999994 -122.23116300000001 38.15950000000001 -122.271919 38.206017 -122.314674 38.19366500000001 -122.337822 38.159392999999994 -122.28427099999999 38.097565 -122.27169 38.161418999999995 -122.397377 38.113888 -122.428116 38.113495 -122.48784599999999 38.15075300000001 -122.527557 38.08553699999999 -122.473457 38.018730000000005 -122.505363 37.983031999999994 -122.440697 37.931843 -122.48893699999999 37.834293 -122.457176 37.822177999999994 -122.514641 37.906994 -122.665298 37.894465999999994 -122.690628 38.00774799999999 -122.821091 38.030697 -122.920074 37.990829000000005 -122.95549 37.994536999999994 -123.00962100000001 38.15334300000001 -122.938164 38.29731000000001 -122.993538 38.294224000000014 -123.047684 38.433685 -123.12043 38.547421000000014 -123.29682199999999 38.75774799999999 -123.52276599999999 38.92486199999999 -123.720772 39.041900999999996 -123.68232 39.34791200000001 -123.812592 39.55199400000001 -123.753525 39.687229 -123.78240199999999 39.82652300000001 -123.836975 39.99871400000001 -124.0065 40.10051300000001 -124.093414 40.25257099999999 -124.34414699999999 40.327698 -124.334946 40.435383 -124.391472 40.978363 -124.108269 41.128986 -124.148521 41.313987999999995 -124.070419 41.45832100000001 -124.05677 41.727355999999986 -124.143021 41.77691999999999 -124.241905 41.84849199999999 -124.206306 41.997814000000005 -124.205246 41.99311399999999 -123.81796299999999 41.99799300000001 -123.512032 42.00234599999999 -123.22094 42.0009 -122.28357700000001 41.99445700000001 -121.440407 41.98778899999999 -120.87082699999999 41.989315000000005 -119.992401 41.177670000000006 -119.995277 39.720702999999986 -119.995132 39.443591999999995 -119.99498 39.31163799999999 -119.99427800000001 39.158806 -119.994507 39.106224 -119.99352300000001 39.063582999999994 -119.994133 38.99419800000001 -119.99423999999999 38.92234400000001 -119.888329 38.703002999999995 -119.57468399999999 38.527195000000006 -119.31783300000001 38.411883999999986 -119.151466 37.886745000000005 -118.416466 37.457367000000005 -117.837761 36.959655999999995 -117.15952300000001 36.001259000000005 -115.884918 35.795722999999995 -115.625359 34.998913 -114.62027 34.99764999999999 -114.631477 34.943607 -114.620209 34.919498000000004 -114.629677 34.87553 -114.626465 34.831856 -114.56942 34.759952999999996 -114.541245 34.74890499999999 -114.524757 34.744750999999994 -114.497009 34.709866000000005 -114.464844 34.610885999999994 -114.421478 34.598952999999995 -114.43351 34.583714 -114.408951 34.536552 -114.376038 34.477074 -114.383072 34.459666999999996 -114.375717 34.454860999999994 -114.331848 34.43574099999999 -114.302078 34.41205600000001 -114.282608 34.40547599999999 -114.257057 34.36519199999999 -114.181297 34.336433 -114.152634 34.314533 -114.133347 34.272605999999996 -114.124451 34.266964 -114.149132 34.186206999999996 -114.234993 34.171215000000004 -114.284584 34.141281000000006 -114.322014 34.102638 -114.409378 34.078316 -114.423241 34.029827 -114.428192 33.965046 -114.517418 33.95239599999999 -114.524841 33.925017999999994 -114.497398 33.86290700000001 -114.520172 33.84194599999999 -114.510933 33.826012000000006 -114.520332 33.771694 -114.503769 33.743179 -114.509499 33.708347 -114.494888 33.68271300000001 -114.535645 33.665482 -114.524475 33.622112 -114.526382 33.580482 -114.539459 33.560047 -114.528633 33.509418 -114.586273 33.486098999999996 -114.597298 33.468571 -114.6203 33.439396 -114.629784 33.41908599999999 -114.644302 33.41103 -114.724144 33.352385999999996 -114.702812 33.305676000000005 -114.734634 33.267982 -114.676903 33.239222999999996 -114.68692 33.22456 -114.67926 33.167213000000004 -114.67733 33.122337 -114.708672 33.095344999999995 -114.710564 33.038883 -114.663162 33.04437299999999 -114.644371 33.03352700000001 -114.633179 33.026962 -114.609138 33.036743 -114.558304 33.027668000000006 -114.519844 32.977749 -114.467606 32.935867 -114.475662 32.845378999999994 -114.460655 32.809867999999994 -114.525436 32.788002000000006 -114.534294 32.771366 -114.529312 32.771187 -114.542404 32.760704000000004 -114.542221 32.760707999999994 -114.560799 32.74889 -114.559967 32.748783 -114.571426 32.737392 -114.571175 32.735839999999996 -114.602737 32.726237999999995 -114.603157 32.741378999999995 -114.693253 32.734966 -114.711906 32.72081 -114.72126 32.61940800000001 -116.10612499999999 32.535725 -117.127235 32.718391 -117.198944 32.602818 -117.119743 32.678878999999995 -117.123665 32.738884 -117.197906 32.680042 -117.247337 32.851173 -117.284454 32.888126 -117.253998 33.111442999999994 -117.327568 33.234055 -117.40927099999999 33.394504999999995 -117.596451 33.747547 -118.10582 33.773906999999994 -118.245712 33.703888000000006 -118.285988 33.738434 -118.40418199999999 33.77543300000001 -118.42804699999999 33.812309 -118.387268 33.882954 -118.411201 34.037243000000004 -118.54093900000001 34.018249999999995 -118.787193 34.04007300000001 -118.93843100000001 34.146336000000005 -119.215393 34.238094000000004 -119.265823 34.374866 -119.482056 34.416439 -119.605331 34.404799999999994 -119.868462 34.46167 -120.010521 34.471912 -120.139183 34.442513000000005 -120.455208 34.521389 -120.508408 34.57235300000001 -120.640289 34.704041000000004 -120.60062400000001 34.75992599999999 -120.630669 34.855637 -120.607155 34.903831 -120.66494 34.972660000000005 -120.643333 35.074841000000006 -120.61576099999999 35.140052999999995 -120.637405 35.209278 -120.86032900000001 35.259429999999995 -120.88258400000001 35.364563000000004 -120.848984 35.427792 -120.874199 35.456608 -120.990929 35.629352999999995 -121.145531 35.663567 -121.269226 35.801067 -121.328041 35.879887 -121.444496 36.181171000000006 -121.688751 36.306979999999996 -121.88121000000001 36.582813 -121.954216 36.640468999999996 -121.91035500000001 36.607754 -121.866318 36.648262 -121.807503 36.819035 -121.76033000000001 36.85037199999999 -121.790649 36.962147 -121.882469 36.947556000000006 -122.06025700000001 37.000918999999996 -122.17236299999999 37.106834000000006 -122.273552 37.239182 -122.413551 37.35247 -122.38816800000001 37.479541999999995 -122.440376 37.522964 -122.504593 37.700321 -122.497124 37.783012 -122.497131 37.808696999999995 -122.399849 37.725291999999996 -122.34539000000001 37.702518 -122.36525 37.609852000000004 -122.358589 37.452602 -122.088234 37.460781 -121.974266 37.497375000000005 -122.091949 37.735271 -122.198654 37.77853399999999 -122.31133299999999 37.89183800000001 -122.306473 37.90942 -122.37041500000001 37.973522 -122.378601 38.01487399999999 -122.294441 38.057232 -121.99955 38.023574999999994 -121.697891 38.08618200000001 -121.65668500000001 38.09421900000001 -121.57582099999999 38.063747000000006 -121.56848099999999 38.06355300000001 -121.54641000000001 38.113879999999995 -121.57177 38.13744399999999 -121.55308500000001 38.09654599999999 -121.65851599999999 38.16936899999999 -121.66415434.075226 -119.866859 34.021339 -119.666962 34.055779 -119.571632 34.034588 -119.522141 34.006493000000006 -119.538422 33.965278999999995 -119.711578 33.968410000000006 -119.84631300000001 34.004665 -119.88810000000001 34.03187200000001 -119.873024 34.059177000000005 -119.926727 34.075226 -119.86685933.92416 -120.16642 34.010887 -120.237579 34.04110300000001 -120.045837 33.94775799999999 -119.962425 33.89481000000001 -120.108215 33.92416 -120.1664233.480793000000006 -118.593864 33.410984 -118.36148800000001 33.334419 -118.29368600000001 33.30746499999999 -118.30313100000001 33.324757000000005 -118.454475 33.41952499999999 -118.48043100000001 33.434456 -118.555519 33.480793000000006 -118.59386432.819157000000004 -118.350052 32.806076000000004 -118.419197 32.892039999999994 -118.51076499999999 33.020988 -118.598602 33.035938 -118.570572 32.987350000000006 -118.540672 32.819157000000004 -118.350052California06PacificCA403970.14320023.3682.9760021E77139394.01.0381206E71.4897627E71.4862394E71.1306576E79982242.02036025.0685797.01.3996309E7996502.03664771.01798201.00.5010.4993792553.038.400429 -84.81211941.986816000000005 -80.52020338.60918000000001 -83.27285 38.59656100000001 -83.290138 38.59624099999999 -83.306625 38.60648699999999 -83.320419 38.631912 -83.330116 38.654922 -83.371513 38.663700000000006 -83.453705 38.69006300000001 -83.50016 38.69603699999999 -83.526642 38.677898 -83.618462 38.664897999999994 -83.633324 38.63578799999999 -83.643272 38.623806 -83.655838 38.62085300000001 -83.678612 38.635479000000004 -83.712906 38.650745 -83.770302 38.693771 -83.790543 38.71180699999999 -83.837608 38.744845999999995 -83.857628 38.757889000000006 -83.912613 38.77757600000001 -83.962234 38.763664000000006 -84.053871 38.765434 -84.088936 38.78842900000001 -84.176819 38.812622000000005 -84.228767 38.87448900000001 -84.235359 38.91741200000001 -84.261589 38.94447299999999 -84.290199 39.01401100000001 -84.313377 39.03774999999999 -84.34584 39.035683000000006 -84.391373 39.04727600000001 -84.4198 39.084663000000006 -84.425743 39.111766999999986 -84.444977 39.107304 -84.492111 39.094134999999994 -84.515358 39.07020600000001 -84.593124 39.07487499999999 -84.622704 39.08956499999999 -84.667542 39.14200600000001 -84.742928 39.106976 -84.789978 39.10252800000001 -84.811531 39.302975 -84.812119 39.31227899999999 -84.812073 39.51311100000001 -84.81115 39.563998999999995 -84.811081 39.73325 -84.808739 39.91711799999999 -84.80619 40.01394300000001 -84.803604 40.31945400000001 -84.795425 40.353004 -84.794594 40.58869200000001 -84.793289 40.728813 -84.793098 40.937659999999994 -84.791061 40.988293 -84.790565 41.253082000000006 -84.791626 41.28376800000001 -84.791016 41.42784900000001 -84.791939 41.530440999999996 -84.791412 41.69744499999999 -84.790421 41.7071 -84.384445 41.707989 -84.359261 41.71594200000001 -83.868698 41.71699100000001 -83.764015 41.725081999999986 -83.482758 41.62604099999999 -83.153824 41.53814299999999 -83.003517 41.537598 -82.795921 41.50736599999999 -82.784798 41.45605900000001 -83.07048 41.429417 -82.909019 41.450474000000014 -82.717041 41.391289 -82.548943 41.43145799999999 -82.341499 41.51526999999999 -82.015739 41.50187700000001 -81.962044 41.49110400000001 -81.738647 41.63166799999999 -81.478424 41.72423900000001 -81.362434 41.85020399999999 -80.999954 41.986816000000005 -80.520798 41.850719 -80.52285 41.495048999999995 -80.524132 41.48923500000001 -80.520203 41.12957 -80.52314 40.897209000000004 -80.521133 40.854107 -80.520515 40.63713799999999 -80.522209 40.615910000000014 -80.574623 40.61999900000001 -80.611755 40.61391800000001 -80.637543 40.58207300000001 -80.667931 40.56821400000001 -80.668823 40.539139000000006 -80.633644 40.50439800000001 -80.625458 40.48047299999999 -80.602036 40.39815899999999 -80.628052 40.38859600000001 -80.629448 40.37320700000001 -80.609451 40.306174999999996 -80.604721 40.276432 -80.614891 40.245609 -80.650314 40.194080000000014 -80.678757 40.16811000000001 -80.701088 40.15401800000001 -80.702263 40.03559100000001 -80.738434 39.98340200000001 -80.739082 39.94694100000001 -80.763252 39.92119199999999 -80.759079 39.913239000000004 -80.768318 39.91976500000001 -80.796211 39.915829 -80.808029 39.90482700000001 -80.812325 39.87227200000001 -80.791039 39.85664700000001 -80.798714 39.83959200000001 -80.826103 39.808926000000014 -80.81929 39.759918 -80.870911 39.73625899999999 -80.856636 39.71875800000001 -80.832481 39.70332300000001 -80.83297 39.680274999999995 -80.863594 39.66233399999999 -80.872925 39.62400400000001 -80.881287 39.60727700000001 -80.912766 39.606865 -80.932785 39.58172999999999 -80.983818 39.54406700000001 -81.032738 39.532589 -81.037552 39.496376 -81.098412 39.46770900000001 -81.117256 39.437725 -81.180733 39.415820999999994 -81.20047 39.40828300000001 -81.225113 39.388397 -81.237785 39.38699700000001 -81.28418 39.35356899999999 -81.338997 39.34561500000001 -81.376076 39.40594899999999 -81.434135 39.410954000000004 -81.448112 39.40678399999999 -81.465164 39.352633999999995 -81.540802 39.332581000000005 -81.557541 39.26584199999999 -81.572838 39.27042 -81.667671 39.26015100000001 -81.689674 39.219944 -81.698051 39.21319199999999 -81.723221 39.17567399999999 -81.759056 39.125797000000006 -81.74485 39.09464299999999 -81.753708 39.077179 -81.786507 39.07693900000001 -81.81971 39.066338 -81.824417 39.044028999999995 -81.813606 39.01675 -81.775826 38.96844899999999 -81.781876 38.93009900000001 -81.762444 38.92348100000001 -81.783371 38.948387 -81.823921 38.93780899999999 -81.841057 38.885628 -81.866943 38.87337099999999 -81.892838 38.884365 -81.91539 38.89466100000001 -81.931992 38.932143999999994 -81.89875 38.98419200000001 -81.927971 38.991096 -81.937874 38.992928000000006 -81.975327 39.01518200000001 -81.999817 39.014061 -82.043022 38.98898700000001 -82.05864 38.97711899999999 -82.085152 38.95201499999999 -82.101341 38.89931899999999 -82.13945 38.838707 -82.146233 38.804539000000005 -82.197853 38.778858000000014 -82.216881 38.71021999999999 -82.184105 38.67781099999999 -82.18911 38.63210699999999 -82.17379 38.59494799999999 -82.18438 38.58475100000001 -82.213791 38.594807 -82.271027 38.57999799999999 -82.2901 38.46514500000001 -82.314369 38.441868 -82.329308 38.42838699999999 -82.39489 38.430308999999994 -82.415016 38.40575000000001 -82.49511 38.400429 -82.547668 38.403819999999996 -82.575539 38.41243700000001 -82.586723 38.472588 -82.613861 38.50206 -82.669876 38.539063 -82.695694 38.552986000000004 -82.742058 38.557209 -82.802475 38.571583000000004 -82.827103 38.60038 -82.853966 38.65231700000001 -82.860138 38.683223999999996 -82.880119 38.718929 -82.873299 38.74269899999999 -82.890419 38.74633800000001 -82.92141 38.719565999999986 -82.972588 38.714436000000006 -83.027046 38.68565000000001 -83.060982 38.66475700000001 -83.111343 38.61926299999999 -83.14325 38.60976400000001 -83.182037 38.62409600000001 -83.24511 38.60918000000001 -83.27285Ohio39E N CenOH105012.0732001.6179980887.02673875.03748665.04816445.05164442.03638837.03581182.0477421.098938.04524383.0324867.01206763.0830481.00.4830.5171727359.045.543251 -124.7314220000000149.00000399999999 -116.9181519999999948.22539499999999 -122.40074899999999 48.228542000000004 -122.461586 48.12867399999999 -122.453156 48.060280000000006 -122.36007699999999 48.13415499999999 -122.513245 48.21064000000001 -122.540802 48.25397100000001 -122.507858 48.24677299999999 -122.403137 48.289897999999994 -122.37705199999999 48.414421000000004 -122.563087 48.413071 -122.665749 48.49450300000001 -122.698128 48.51899700000001 -122.60689500000001 48.458575999999994 -122.52195 48.462368 -122.472557 48.559616000000005 -122.504021 48.59956700000001 -122.428268 48.63874100000001 -122.486519 48.711895 -122.52527599999999 48.75809100000001 -122.51557199999999 48.80318500000001 -122.696114 48.910156 -122.75295299999999 48.95089300000001 -122.821129 48.955974999999995 -122.74265299999999 48.999911999999995 -122.76383200000001 48.99997300000001 -120.855827 49.0 -118.842453 49.00000399999999 -118.19923399999999 48.99999600000001 -117.4375 49.0 -117.030975 48.83815000000001 -117.028046 48.046284000000014 -117.037834 47.971191000000005 -117.036438 47.361541999999986 -117.040779 47.258601999999996 -117.041382 47.11942300000001 -117.039963 46.53671600000001 -117.040932 46.42809700000001 -117.037567 46.388690999999994 -117.04348 46.348816 -117.06319400000001 46.335544999999996 -117.026985 46.30256700000001 -117.00065599999999 46.249427999999995 -116.97174100000001 46.197674000000006 -116.96650700000001 46.165604 -116.928444 46.097397 -116.960655 46.078632 -116.98622900000001 46.065811 -116.956741 45.995299999999986 -116.91815199999999 45.999966 -117.48065199999999 46.00040100000001 -117.60180700000001 46.00001900000001 -117.981628 46.001778 -117.991478 45.999202999999994 -118.981018 45.966419 -119.031105 45.92585399999999 -119.13913 45.92249699999999 -119.17761999999999 45.932807999999994 -119.301636 45.917755 -119.378311 45.914412999999996 -119.43772899999999 45.89934500000001 -119.511086 45.913459999999986 -119.58815799999999 45.89955499999999 -119.620979 45.85268400000001 -119.677307 45.841755000000006 -119.832413 45.83184399999999 -119.86859100000001 45.81128699999999 -119.993172 45.78035 -120.067497 45.76141000000001 -120.154755 45.719933 -120.206291 45.71673200000001 -120.282478 45.68942999999999 -120.442223 45.69578200000001 -120.49799300000001 45.74107000000001 -120.568916 45.743763 -120.622589 45.732765 -120.657234 45.71066300000001 -120.695824 45.665339999999986 -120.86024499999999 45.63563199999999 -120.906761 45.65047100000001 -120.947395 45.645309 -120.9673 45.65299999999999 -121.032303 45.64676700000001 -121.07235 45.607215999999994 -121.124023 45.600674 -121.173134 45.61340000000001 -121.190872 45.657444 -121.20212599999999 45.66580200000001 -121.213089 45.67849699999999 -121.27520799999999 45.696799999999996 -121.318794 45.69984400000001 -121.366631 45.69076200000001 -121.420845 45.69512599999999 -121.441368 45.719727000000006 -121.52787000000001 45.688953 -121.705231 45.689876999999996 -121.757507 45.70084399999999 -121.809853 45.677017000000006 -121.887093 45.642189 -121.925629 45.63593700000001 -121.97146599999999 45.617985000000004 -121.998817 45.590664000000004 -122.08084099999999 45.548271 -122.243721 45.543251 -122.30194900000001 45.566329999999994 -122.355255 45.56493800000001 -122.435951 45.594978 -122.564224 45.606990999999994 -122.650002 45.63120699999999 -122.69511399999999 45.64955900000001 -122.759331 45.727847999999994 -122.771339 45.76073099999999 -122.76307700000001 45.80050700000001 -122.786797 45.85061300000001 -122.78330199999999 45.86805000000001 -122.78286 45.904236 -122.805008 45.944053999999994 -122.80652599999999 46.02734799999999 -122.874199 46.07949400000001 -122.898537 46.110648999999995 -122.97294600000001 46.155902999999995 -123.04937000000001 46.17947799999999 -123.117325 46.18375399999999 -123.174965 46.170174 -123.211205 46.144188000000014 -123.247566 46.144904999999994 -123.303482 46.275192000000004 -123.469528 46.258835000000005 -123.61882800000001 46.285595 -123.724205 46.240612 -123.884514 46.310452 -123.992065 46.267437 -124.077843 46.639927 -124.064232 46.583721 -124.021767 46.383858000000004 -124.01173399999999 46.404517999999996 -123.840187 46.481292999999994 -123.939423 46.511257 -123.892296 46.61740499999999 -123.956436 46.67324099999999 -123.925194 46.718468 -123.839691 46.74516700000001 -123.89426399999999 46.716038 -124.041878 46.729206000000005 -124.089767 46.78965400000001 -124.100784 46.900172999999995 -124.137543 46.90833699999999 -124.104477 46.87433200000001 -124.103455 46.82395199999999 -124.02752699999999 46.88744 -124.045647 46.96414899999999 -123.81137799999999 46.976574 -123.994583 47.03122300000001 -124.033112 47.042866000000004 -124.111076 46.929801999999995 -124.160751 47.167174999999986 -124.19144399999999 47.27526499999999 -124.230133 47.349434 -124.31813 47.527107 -124.347778 47.63896199999999 -124.372299 47.80845600000001 -124.482719 47.873940000000005 -124.605362 48.150204 -124.73142200000001 48.232212000000004 -124.703857 48.37777299999999 -124.71582000000001 48.35748699999999 -124.562202 48.159355000000005 -123.98989900000001 48.11121700000001 -123.395561 48.14891800000001 -123.121933 48.09436400000001 -122.920311 48.066981999999996 -122.923561 48.13332 -122.839828 48.14417599999999 -122.767601 48.08550600000001 -122.80165099999999 47.91734299999999 -122.660294 47.86461600000001 -122.652321 47.80917400000001 -122.744598 47.80273399999999 -122.788528 47.85726199999999 -122.808243 47.827515000000005 -122.857529 47.67270300000001 -122.898094 47.605659 -122.981476 47.456458999999995 -123.11264800000001 47.34873200000001 -123.152794 47.35320999999999 -123.009209 47.438648 -122.831993 47.356235999999996 -123.034943 47.37175400000001 -123.11142000000001 47.516121 -123.02507 47.614791999999994 -122.91570300000001 47.66087300000001 -122.751678 47.75708399999999 -122.721794 47.85019299999999 -122.60990100000001 47.936375 -122.611954 47.90964500000001 -122.530632 47.75516099999999 -122.472343 47.69715099999999 -122.620255 47.571372999999994 -122.58521300000001 47.583687 -122.55401599999999 47.52291500000001 -122.541458 47.507397 -122.50322 47.39854399999999 -122.55720500000001 47.37410700000001 -122.542885 47.33411000000001 -122.587013 47.283512 -122.551918 47.25156799999999 -122.57929200000001 47.293578999999994 -122.61030600000001 47.27075199999999 -122.60567499999999 47.29226700000001 -122.69850199999999 47.39873499999999 -122.62751 47.398762000000005 -122.636192 47.341633 -122.740303 47.26633799999999 -122.768463 47.22331199999999 -122.718559 47.162678 -122.759995 47.23500799999999 -122.82386 47.33754300000001 -122.772087 47.36092400000001 -122.800934 47.29941600000001 -122.87912 47.20816400000001 -123.11417399999999 47.090239999999994 -123.07994099999999 47.100956 -123.03009 47.048145000000005 -122.921898 47.12604099999999 -122.788803 47.08262300000001 -122.726944 47.09850700000001 -122.698837 47.180240999999995 -122.590569 47.28763599999999 -122.529526 47.31645599999999 -122.545349 47.25965099999999 -122.422859 47.277901000000014 -122.391609 47.30130399999999 -122.440369 47.31902299999999 -122.419601 47.34450100000001 -122.324142 47.390293000000014 -122.31850399999999 47.510422000000005 -122.391396 47.59558899999999 -122.38098099999999 47.66435999999999 -122.413574 47.77435700000001 -122.39325 47.95039700000001 -122.30167399999999 47.969296000000014 -122.22887399999999 48.007622 -122.215744 48.128322999999995 -122.367073 48.22539499999999 -122.4007489999999948.443974 -122.96669 48.479603 -123.093941 48.52202199999999 -123.158424 48.56274400000001 -123.16860199999999 48.62382500000001 -123.13975500000001 48.608554999999996 -123.102425 48.55765500000001 -123.01080300000001 48.533896999999996 -123.007408 48.52711099999999 -122.96669 48.51353800000001 -123.020981 48.489783999999986 -123.017593 48.443974 -122.9666948.276825 -122.731903 48.396953999999994 -122.66433 48.40496400000001 -122.603104 48.32122000000001 -122.524475 48.28368800000001 -122.52737400000001 48.296527999999995 -122.622231 48.225594 -122.730751 48.206501 -122.60965 48.077042000000006 -122.544937 48.09425400000001 -122.49494899999999 48.03233 -122.378738 47.964068999999995 -122.354149 47.904731999999996 -122.385712 47.91824 -122.441536 47.987694000000005 -122.47036 47.967715999999996 -122.543701 48.031616000000014 -122.607361 48.181366 -122.694275 48.218998 -122.767494 48.276825 -122.731903Washington53PacificWA172447.20512226.634866692.01264934.01872431.02413747.02452945.01830031.01700872.0282240.0104403.02293961.0139216.0637487.0302635.00.4960.504736744.0 \ No newline at end of file diff --git a/float-no-zero/examples/data/gpx/fells_loop.gpx b/float-no-zero/examples/data/gpx/fells_loop.gpx new file mode 100644 index 0000000000..fdfb0d43ce --- /dev/null +++ b/float-no-zero/examples/data/gpx/fells_loop.gpx @@ -0,0 +1,1077 @@ + + + + + + 44.586548 + + 5066 + + Crossing + + + + 57.607200 + + 5067 + + Dot + + + + 44.826904 + + 5096 + + Dot + + + + 50.594727 + + 5142 + + Dot + + + + 127.711200 + + 5156 + + Dot + + + + 96.926400 + + 5224 + + Dot + + + + 82.600800 + + 5229 + + Dot + + + + 82.905600 + + 5237 + + Dot + + + + 66.696655 + + 5254 + + Dot + + + + 74.627442 + + 5258 + + Dot + + + + 65.254761 + + 5264 + + Dot + + + + 77.419200 + + 526708 + + Dot + + + + 74.676000 + + 526750 + + Dot + + + + 78.713135 + + 527614 + + Dot + + + + 78.713135 + + 527631 + + Dot + + + + 68.275200 + + 5278 + + Dot + + + + 64.008000 + + 5289 + + Dot + + + + 52.997925 + + 5374FIRE + + Dot + + + + 56.388000 + + 5376 + + Dot + + + + 56.388000 + + 6006 + + Dot + + + + 46.028564 + + 6006BLUE + + Dot + + + + 37.616943 + + 6014MEADOW + + Dot + + + + 56.388000 + + 6029 + + Dot + + + + 50.292000 + + 6053 + + Dot + + + + 25.603200 + + 6066 + + Dot + + + + 34.442400 + + 6067 + + Dot + + + + 30.480000 + + 6071 + + Dot + + + + 15.240000 + + 6073 + + Dot + + + + 37.795200 + + 6084 + + Dot + + + + 64.008000 + + 6130 + + Dot + + + + 64.008000 + + 6131 + + Dot + + + + 62.788800 + + 6153 + + Dot + + + + 55.473600 + + 6171 + + Dot + + + + 62.484000 + + 6176 + + Dot + + + + 62.179200 + + 6177 + + Dot + + + + 69.799200 + + 6272 + + Dot + + + + 73.152000 + + 6272 + + Dot + + + + 70.104000 + + 6278 + + Dot + + + + 57.564209 + + 6280 + + Dot + + + + 66.696655 + + 6283 + + Dot + + + + 72.945191 + + 6289 + + Dot + + + + 72.847200 + + 6297 + + Dot + + + + 53.644800 + + 6328 + + Dot + + + + 43.891200 + + 6354 + + Dot + + + + 48.768000 + + 635722 + + Dot + + + + 49.072800 + + 635783 + + Dot + + + + 62.484000 + + 6373 + + Dot + + + + 3.962400 + + 6634 + + Dot + + + + 13.411200 + + 6979 + + Dot + + + + 34.012085 + + 6997 + + Dot + + + + 87.782400 + + BEAR HILL + BEAR HILL TOWER + + Tall Tower + + + + 23.469600 + + BELLEVUE + BELLEVUE + + Parking Area + + + + 43.384766 + + 6016 + + Trailhead + + + + 89.916000 + + 5236BRIDGE + + Bridge + + + + 55.473600 + + 5376BRIDGE + + Bridge + + + + 52.730400 + + 6181CROSS + + Crossing + + + + 45.110400 + + 6042CROSS + + Crossing + + + + DARKHOLLPO + + Fishing Area + + + 56.083200 + + 6121DEAD + + Danger Area + + + + 117.043200 + + 5179DEAD + + Danger Area + + + + 69.494400 + + 5299DEAD + + Danger Area + + + + 56.997600 + + 5376DEAD + + Danger Area + + + + 46.939200 + + 6353DEAD + + Danger Area + + + + 61.264800 + + 6155DEAD + + Danger Area + + + + 110.947200 + + GATE14 + + Truck Stop + + + + 77.724000 + + GATE16 + + Truck Stop + + + + 65.836800 + + GATE17 + + Truck Stop + + + + 57.302400 + + GATE19 + + Truck Stop + + + + 49.377600 + + GATE21 + + Truck Stop + + + + 81.076800 + + GATE24 + + Truck Stop + + + + 21.515015 + + GATE5 + + Truck Stop + + + + 26.561890 + + GATE6 + + Trailhead + + + + 32.004000 + + 6077LOGS + + Amusement Park + + + + 119.809082 + + 5148NANEPA + + Trailhead + + + + 73.761600 + + 5267OBSTAC + + Amusement Park + + + + 45.307495 + + PANTHRCAVE + + Tunnel + + + + 77.992066 + + 5252PURPLE + + Summit + + + + 67.970400 + + 5287WATER + + Swimming Area + + + + 81.076800 + + 5239ROAD + + Truck Stop + + + + 67.360800 + + 5278ROAD + + Truck Stop + + + + 53.949600 + + 5058ROAD + ROAD CROSSING + + Dot + + + + 69.799200 + + SHEEPFOLD + + Parking Area + + + + 64.008000 + + SOAPBOX + + Cemetery + + + + 64.533692 + + 5376STREAM + + Bridge + + + + 61.649902 + + 5144SUMMIT + + Summit + + + + 67.360800 + + 5150TANK + WATER TANK + + Museum + + + + BELLEVUE + + 1 + + 23.469600 + + BELLEVUE + BELLEVUE + + Parking Area + + + + 26.561890 + + GATE6 + + Trailhead + + + + 45.307495 + + PANTHRCAVE + + Tunnel + + + + 37.616943 + + 6014MEADOW + + Dot + + + + 56.388000 + + 6006 + + Dot + + + + 46.028564 + + 6006BLUE + + Dot + + + + 44.826904 + + 5096 + + Dot + + + + 44.586548 + + 5066 + + Crossing + + + + 57.607200 + + 5067 + + Dot + + + + 53.949600 + + 5058ROAD + ROAD CROSSING + + Dot + + + + 67.360800 + + 5150TANK + WATER TANK + + Museum + + + + 50.594727 + + 5142 + + Dot + + + + 61.649902 + + 5144SUMMIT + + Summit + + + + 127.711200 + + 5156 + + Dot + + + + 119.809082 + + 5148NANEPA + + Trailhead + + + + 74.627442 + + 5258 + + Dot + + + + 77.992066 + + 5252PURPLE + + Summit + + + + 78.713135 + + 527631 + + Dot + + + + 78.713135 + + 527614 + + Dot + + + + 73.761600 + + 5267OBSTAC + + Amusement Park + + + + 68.275200 + + 5278 + + Dot + + + + 64.008000 + + 5289 + + Dot + + + + 52.997925 + + 5374FIRE + + Dot + + + + 56.388000 + + 5376 + + Dot + + + + 64.533692 + + 5376STREAM + + Bridge + + + + 53.644800 + + 6328 + + Dot + + + + 48.768000 + + 635722 + + Dot + + + + 49.072800 + + 635783 + + Dot + + + + 62.484000 + + 6373 + + Dot + + + + 87.782400 + + BEAR HILL + BEAR HILL TOWER + + Tall Tower + + + + 72.945191 + + 6289 + + Dot + + + + 72.847200 + + 6297 + + Dot + + + + 66.696655 + + 6283 + + Dot + + + + 57.564209 + + 6280 + + Dot + + + + 62.179200 + + 6177 + + Dot + + + + 62.484000 + + 6176 + + Dot + + + + 62.788800 + + 6153 + + Dot + + + + 55.473600 + + 6171 + + Dot + + + + 64.008000 + + 6131 + + Dot + + + + 64.008000 + + 6130 + + Dot + + + + 56.388000 + + 6029 + + Dot + + + + 56.388000 + + 6006 + + Dot + + + + 37.616943 + + 6014MEADOW + + Dot + + + + 45.307495 + + PANTHRCAVE + + Tunnel + + + + 26.561890 + + GATE6 + + Trailhead + + + + 23.469600 + + BELLEVUE + BELLEVUE + + Parking Area + + + + \ No newline at end of file diff --git a/float-no-zero/examples/data/icon.png b/float-no-zero/examples/data/icon.png new file mode 100644 index 0000000000..ed886623d5 Binary files /dev/null and b/float-no-zero/examples/data/icon.png differ diff --git a/float-no-zero/examples/data/igc/Clement-Latour.igc b/float-no-zero/examples/data/igc/Clement-Latour.igc new file mode 100644 index 0000000000..d0eb152483 --- /dev/null +++ b/float-no-zero/examples/data/igc/Clement-Latour.igc @@ -0,0 +1,15585 @@ +AXGD123 6030 SN07172 SW3.32 +HFDTE190411 +HOPLTPILOT: Clement Latour +HOGTYGLIDERTYPE: R10.2 +HOGIDGLIDERID: None +HODTM100GPSDATUM: WGS-84 +HOCIDCOMPETITIONID: +HOCCLCOMPETITION CLASS: None +HOSITSite: Marlens +B0853524556201N00651065EA0200502041 +B0853544556201N00651065EA0200502041 +B0853564556201N00651065EA0200402041 +B0853584556201N00651065EA0200402041 +B0854004556201N00651065EA0200402041 +B0854024556201N00651065EA0200402041 +B0854044556201N00651065EA0200402041 +B0854064556201N00651065EA0200402041 +B0854084556201N00651065EA0200402041 +B0854104556201N00651065EA0200402041 +B0854124556201N00651065EA0200402041 +B0854144556201N00651065EA0200402041 +B0854164556201N00651064EA0200402041 +B0854184556201N00651064EA0200402041 +B0854204556201N00651065EA0200402041 +B0854224556201N00651065EA0200502041 +B0854244556200N00651064EA0200402041 +B0854264556198N00651062EA0200302041 +B0854284556194N00651060EA0199902039 +B0854304556188N00651058EA0199802038 +B0854324556182N00651058EA0199602036 +B0854344556174N00651057EA0199202034 +B0854364556165N00651059EA0199302032 +B0854384556157N00651061EA0199302031 +B0854404556147N00651061EA0199502031 +B0854424556138N00651060EA0200102031 +B0854444556136N00651051EA0200702035 +B0854464556139N00651038EA0201102040 +B0854484556143N00651023EA0201602046 +B0854504556142N00651008EA0202402053 +B0854524556141N00650995EA0203102061 +B0854544556141N00650984EA0203902070 +B0854564556138N00650976EA0204502077 +B0854584556132N00650971EA0205202085 +B0855004556130N00650958EA0205502092 +B0855024556141N00650943EA0205902097 +B0855044556156N00650946EA0206502102 +B0855064556161N00650961EA0206802108 +B0855084556150N00650973EA0207402114 +B0855104556141N00650966EA0208102121 +B0855124556140N00650949EA0208602126 +B0855144556149N00650938EA0209202132 +B0855164556163N00650942EA0209502137 +B0855184556172N00650956EA0210102142 +B0855204556167N00650969EA0210402146 +B0855224556155N00650968EA0211202151 +B0855244556147N00650959EA0212102158 +B0855264556143N00650948EA0212602164 +B0855284556141N00650932EA0212902168 +B0855304556149N00650914EA0213402172 +B0855324556164N00650915EA0213802177 +B0855344556174N00650928EA0214502182 +B0855364556175N00650943EA0215002188 +B0855384556167N00650953EA0215202192 +B0855404556154N00650950EA0215802196 +B0855424556148N00650933EA0216402200 +B0855444556154N00650914EA0216502205 +B0855464556171N00650911EA0216802208 +B0855484556184N00650926EA0217502214 +B0855504556186N00650944EA0218202219 +B0855524556178N00650956EA0218802226 +B0855544556166N00650955EA0219102232 +B0855564556156N00650941EA0219502236 +B0855584556157N00650918EA0219902239 +B0856004556171N00650905EA0220702245 +B0856024556183N00650912EA0220902247 +B0856044556182N00650927EA0221202252 +B0856064556169N00650930EA0221802256 +B0856084556157N00650915EA0222402262 +B0856104556153N00650893EA0223102267 +B0856124556159N00650876EA0223402273 +B0856144556173N00650872EA0223502276 +B0856164556185N00650881EA0223802279 +B0856184556188N00650896EA0224202282 +B0856204556181N00650907EA0224702286 +B0856224556171N00650911EA0225302291 +B0856244556162N00650905EA0225802297 +B0856264556157N00650886EA0226102301 +B0856284556164N00650867EA0226302305 +B0856304556179N00650864EA0226902309 +B0856324556189N00650870EA0227502315 +B0856344556195N00650878EA0228002321 +B0856364556197N00650888EA0228202323 +B0856384556190N00650899EA0228302326 +B0856404556177N00650899EA0228402327 +B0856424556166N00650883EA0228702330 +B0856444556164N00650863EA0229202333 +B0856464556170N00650844EA0229802337 +B0856484556181N00650835EA0230102341 +B0856504556194N00650834EA0230502344 +B0856524556203N00650845EA0230402346 +B0856544556192N00650853EA0230602347 +B0856564556180N00650843EA0231202351 +B0856584556177N00650825EA0231802356 +B0857004556176N00650809EA0232202361 +B0857024556177N00650793EA0232102364 +B0857044556186N00650779EA0231902365 +B0857064556200N00650781EA0232002365 +B0857084556208N00650792EA0232502367 +B0857104556213N00650800EA0232802370 +B0857124556218N00650809EA0232902371 +B0857144556213N00650822EA0233402373 +B0857164556205N00650832EA0234202377 +B0857184556198N00650840EA0234802383 +B0857204556192N00650844EA0235002386 +B0857224556182N00650835EA0235102389 +B0857244556180N00650815EA0235302392 +B0857264556190N00650803EA0235802395 +B0857284556202N00650801EA0236602402 +B0857304556209N00650806EA0237002406 +B0857324556218N00650815EA0237302410 +B0857344556221N00650827EA0237802415 +B0857364556212N00650836EA0238202419 +B0857384556199N00650833EA0238702425 +B0857404556190N00650819EA0238902429 +B0857424556191N00650800EA0239102432 +B0857444556201N00650789EA0239202434 +B0857464556215N00650789EA0239502437 +B0857484556223N00650796EA0239902440 +B0857504556226N00650807EA0240202443 +B0857524556225N00650821EA0240502446 +B0857544556219N00650833EA0241002449 +B0857564556208N00650833EA0241202453 +B0857584556198N00650825EA0241402455 +B0858004556189N00650814EA0241802458 +B0858024556180N00650805EA0242302462 +B0858044556171N00650795EA0242702466 +B0858064556166N00650782EA0243102470 +B0858084556162N00650766EA0243402474 +B0858104556154N00650757EA0243502477 +B0858124556141N00650753EA0243602478 +B0858144556131N00650748EA0243802481 +B0858164556121N00650740EA0243902482 +B0858184556108N00650731EA0244202483 +B0858204556096N00650722EA0244702486 +B0858224556088N00650710EA0244702488 +B0858244556080N00650696EA0244102488 +B0858264556070N00650684EA0243902485 +B0858284556060N00650677EA0243402482 +B0858304556050N00650671EA0242602477 +B0858324556039N00650660EA0241802470 +B0858344556026N00650647EA0241702466 +B0858364556016N00650633EA0242002463 +B0858384556006N00650620EA0242002464 +B0858404555997N00650609EA0241602461 +B0858424555988N00650598EA0241202456 +B0858444555977N00650587EA0240802453 +B0858464555965N00650578EA0240502449 +B0858484555954N00650568EA0240102445 +B0858504555941N00650556EA0239902442 +B0858524555929N00650544EA0240202440 +B0858544555919N00650532EA0240502440 +B0858564555910N00650520EA0240502441 +B0858584555900N00650508EA0240402440 +B0859004555888N00650495EA0240402440 +B0859024555876N00650482EA0240302439 +B0859044555864N00650468EA0240202439 +B0859064555852N00650455EA0240202439 +B0859084555840N00650442EA0240202439 +B0859104555829N00650429EA0240002438 +B0859124555817N00650417EA0239802436 +B0859144555805N00650402EA0239802435 +B0859164555794N00650388EA0240002434 +B0859184555785N00650375EA0239902434 +B0859204555775N00650365EA0239402432 +B0859224555762N00650354EA0239202430 +B0859244555751N00650339EA0239202430 +B0859264555742N00650324EA0239102429 +B0859284555733N00650308EA0238702427 +B0859304555723N00650293EA0238602425 +B0859324555714N00650279EA0238302423 +B0859344555706N00650265EA0238002421 +B0859364555701N00650258EA0237902419 +B0859384555685N00650234EA0237802417 +B0859404555674N00650218EA0237602415 +B0859424555662N00650205EA0237302414 +B0859444555649N00650193EA0237102412 +B0859464555636N00650180EA0236902410 +B0859484555624N00650166EA0237002409 +B0859504555612N00650151EA0237602409 +B0859524555604N00650135EA0238302412 +B0859544555595N00650121EA0238702417 +B0859564555586N00650110EA0238802419 +B0859584555575N00650104EA0239002422 +B0900004555563N00650095EA0239502426 +B0900024555551N00650082EA0240102431 +B0900044555540N00650074EA0240402435 +B0900064555529N00650080EA0240302439 +B0900084555526N00650091EA0240202442 +B0900104555537N00650095EA0240102444 +B0900124555549N00650076EA0240102445 +B0900144555551N00650049EA0240802448 +B0900164555548N00650028EA0241402455 +B0900184555546N00650010EA0241602457 +B0900204555541N00649989EA0242102460 +B0900224555530N00649978EA0242402465 +B0900244555520N00649983EA0242702468 +B0900264555518N00649996EA0243402473 +B0900284555528N00650000EA0243902479 +B0900304555541N00649985EA0244602485 +B0900324555545N00649961EA0245202491 +B0900344555534N00649946EA0245502496 +B0900364555522N00649952EA0246202500 +B0900384555521N00649967EA0247202508 +B0900404555531N00649969EA0247902517 +B0900424555542N00649959EA0248602524 +B0900444555548N00649938EA0249402532 +B0900464555541N00649918EA0249902540 +B0900484555528N00649915EA0250602547 +B0900504555522N00649928EA0251402554 +B0900524555525N00649937EA0252302564 +B0900544555535N00649936EA0253002570 +B0900564555546N00649928EA0253702578 +B0900584555552N00649908EA0254202584 +B0901004555548N00649885EA0254802590 +B0901024555536N00649876EA0255502596 +B0901044555527N00649886EA0256202602 +B0901064555526N00649900EA0257002611 +B0901084555534N00649903EA0257602617 +B0901104555545N00649894EA0258302623 +B0901124555550N00649874EA0258902630 +B0901144555543N00649855EA0259502636 +B0901164555530N00649850EA0260302642 +B0901184555522N00649861EA0261002649 +B0901204555522N00649873EA0261802657 +B0901224555529N00649879EA0262402663 +B0901244555540N00649872EA0263102670 +B0901264555545N00649853EA0263702677 +B0901284555539N00649836EA0264402684 +B0901304555525N00649830EA0265002691 +B0901324555514N00649837EA0265702698 +B0901344555511N00649847EA0266202704 +B0901364555519N00649853EA0266502708 +B0901384555531N00649846EA0267002712 +B0901404555538N00649827EA0267602717 +B0901424555534N00649806EA0268202722 +B0901444555522N00649795EA0268902729 +B0901464555508N00649797EA0269502735 +B0901484555503N00649807EA0269802740 +B0901504555510N00649814EA0270102745 +B0901524555522N00649807EA0270602749 +B0901544555527N00649788EA0271202754 +B0901564555524N00649768EA0271902761 +B0901584555517N00649752EA0272402767 +B0902004555504N00649748EA0272702772 +B0902024555492N00649755EA0273202777 +B0902044555490N00649767EA0273602782 +B0902064555498N00649774EA0274002786 +B0902084555508N00649761EA0274402789 +B0902104555510N00649738EA0275002794 +B0902124555502N00649717EA0275902800 +B0902144555494N00649700EA0276402806 +B0902164555485N00649681EA0276802810 +B0902184555475N00649659EA0277402815 +B0902204555466N00649638EA0278102822 +B0902224555458N00649618EA0278602829 +B0902244555451N00649600EA0278702833 +B0902264555442N00649582EA0278502836 +B0902284555434N00649563EA0278402836 +B0902304555427N00649545EA0278102834 +B0902324555420N00649526EA0277902830 +B0902344555412N00649505EA0278002829 +B0902364555405N00649488EA0278302831 +B0902384555399N00649472EA0278202829 +B0902404555393N00649457EA0278002827 +B0902424555385N00649441EA0277502824 +B0902444555378N00649425EA0277102820 +B0902464555370N00649408EA0276802816 +B0902484555362N00649391EA0276502812 +B0902504555356N00649374EA0276202808 +B0902524555348N00649357EA0275702804 +B0902544555340N00649341EA0275102799 +B0902564555332N00649322EA0274702794 +B0902584555326N00649302EA0274402791 +B0903004555319N00649283EA0274002787 +B0903024555312N00649264EA0273502781 +B0903044555307N00649243EA0273202778 +B0903064555303N00649224EA0273002775 +B0903084555298N00649207EA0272602771 +B0903104555294N00649187EA0271802766 +B0903124555291N00649165EA0271302760 +B0903144555287N00649145EA0270802755 +B0903164555283N00649124EA0270102749 +B0903184555281N00649104EA0269602743 +B0903204555279N00649085EA0269002737 +B0903224555276N00649070EA0268402730 +B0903244555273N00649054EA0267702723 +B0903264555269N00649034EA0267202716 +B0903284555267N00649015EA0267202711 +B0903304555266N00648998EA0267002709 +B0903324555263N00648982EA0266502704 +B0903344555258N00648964EA0266202700 +B0903364555253N00648946EA0266202698 +B0903384555247N00648929EA0266002697 +B0903404555242N00648911EA0266102697 +B0903424555237N00648893EA0266902697 +B0903444555231N00648875EA0267902700 +B0903464555227N00648857EA0268502706 +B0903484555225N00648837EA0268902711 +B0903504555221N00648816EA0269802717 +B0903524555218N00648795EA0270802725 +B0903544555218N00648779EA0271302732 +B0903564555215N00648761EA0271602737 +B0903584555211N00648742EA0272302745 +B0904004555209N00648727EA0273202754 +B0904024555207N00648712EA0273802763 +B0904044555204N00648699EA0274202770 +B0904064555199N00648685EA0274502776 +B0904084555193N00648669EA0274902781 +B0904104555186N00648654EA0275402786 +B0904124555179N00648642EA0275602791 +B0904144555172N00648630EA0275902794 +B0904164555166N00648615EA0276102797 +B0904184555161N00648600EA0276202799 +B0904204555155N00648586EA0276102799 +B0904224555148N00648571EA0276102800 +B0904244555141N00648557EA0275902799 +B0904264555135N00648543EA0275802798 +B0904284555130N00648529EA0275602797 +B0904304555125N00648515EA0275302795 +B0904324555118N00648502EA0275302794 +B0904344555111N00648489EA0275402794 +B0904364555104N00648477EA0275202793 +B0904384555096N00648462EA0275102792 +B0904404555090N00648445EA0275102792 +B0904424555084N00648428EA0274902790 +B0904444555078N00648411EA0274602788 +B0904464555071N00648395EA0274202785 +B0904484555064N00648380EA0274002782 +B0904504555057N00648363EA0273702779 +B0904524555051N00648344EA0274002777 +B0904544555046N00648327EA0274302777 +B0904564555040N00648314EA0274302779 +B0904584555035N00648301EA0274302779 +B0905004555029N00648287EA0274202779 +B0905024555021N00648272EA0274002777 +B0905044555013N00648257EA0273502775 +B0905064555004N00648243EA0273102771 +B0905084554995N00648227EA0272302765 +B0905104554984N00648211EA0271902760 +B0905124554974N00648196EA0271502756 +B0905144554963N00648181EA0271002752 +B0905164554954N00648165EA0270302746 +B0905184554943N00648147EA0269402739 +B0905204554931N00648130EA0268602733 +B0905224554919N00648114EA0268002726 +B0905244554908N00648096EA0267302718 +B0905264554896N00648078EA0266602711 +B0905284554885N00648061EA0266002705 +B0905304554873N00648043EA0265402698 +B0905324554861N00648026EA0264902693 +B0905344554849N00648009EA0264302686 +B0905364554836N00647992EA0263502680 +B0905384554823N00647975EA0263002674 +B0905404554808N00647962EA0262402669 +B0905424554794N00647950EA0262202665 +B0905444554780N00647938EA0262002662 +B0905464554766N00647928EA0261902659 +B0905484554751N00647918EA0261602656 +B0905504554738N00647907EA0261602654 +B0905524554725N00647897EA0261202652 +B0905544554713N00647887EA0260702647 +B0905564554700N00647874EA0260302643 +B0905584554688N00647857EA0260002640 +B0906004554678N00647841EA0259702637 +B0906024554668N00647826EA0259102633 +B0906044554657N00647808EA0258602628 +B0906064554646N00647788EA0258202623 +B0906084554637N00647767EA0257802619 +B0906104554628N00647746EA0257302615 +B0906124554617N00647727EA0257002611 +B0906144554607N00647708EA0256702608 +B0906164554598N00647689EA0256302604 +B0906184554587N00647669EA0256102602 +B0906204554577N00647650EA0256002600 +B0906224554567N00647631EA0255702597 +B0906244554557N00647611EA0255602595 +B0906264554547N00647590EA0255602594 +B0906284554538N00647572EA0255502593 +B0906304554528N00647552EA0255202591 +B0906324554520N00647532EA0254902588 +B0906344554512N00647512EA0254502585 +B0906364554503N00647494EA0254102581 +B0906384554495N00647476EA0253902578 +B0906404554487N00647461EA0253702576 +B0906424554479N00647444EA0253302573 +B0906444554470N00647426EA0253102570 +B0906464554463N00647410EA0253002569 +B0906484554455N00647395EA0252702566 +B0906504554447N00647379EA0252302562 +B0906524554439N00647359EA0251902559 +B0906544554434N00647339EA0251702557 +B0906564554430N00647320EA0251702555 +B0906584554424N00647302EA0251502554 +B0907004554419N00647284EA0251302552 +B0907024554416N00647264EA0250902549 +B0907044554415N00647246EA0250702547 +B0907064554412N00647227EA0250402544 +B0907084554407N00647208EA0250302542 +B0907104554402N00647190EA0250102541 +B0907124554396N00647175EA0249802539 +B0907144554389N00647159EA0249602535 +B0907164554382N00647143EA0249402533 +B0907184554376N00647129EA0249002531 +B0907204554370N00647115EA0248402528 +B0907224554362N00647100EA0248102524 +B0907244554353N00647085EA0247902521 +B0907264554346N00647071EA0247602518 +B0907284554338N00647056EA0247302515 +B0907304554329N00647041EA0247002512 +B0907324554321N00647026EA0246702509 +B0907344554313N00647011EA0246402505 +B0907364554304N00646995EA0246002502 +B0907384554295N00646981EA0245702498 +B0907404554286N00646966EA0245502495 +B0907424554277N00646950EA0245202493 +B0907444554268N00646934EA0245102491 +B0907464554258N00646919EA0245002490 +B0907484554248N00646904EA0244902489 +B0907504554239N00646888EA0244702488 +B0907524554229N00646873EA0244602487 +B0907544554219N00646859EA0244602486 +B0907564554208N00646844EA0244502485 +B0907584554197N00646829EA0244502485 +B0908004554187N00646815EA0244402485 +B0908024554177N00646799EA0244402484 +B0908044554167N00646782EA0244402484 +B0908064554158N00646764EA0244602485 +B0908084554150N00646747EA0244602486 +B0908104554142N00646732EA0244502486 +B0908124554136N00646716EA0244302485 +B0908144554130N00646700EA0243902482 +B0908164554122N00646682EA0243702479 +B0908184554114N00646665EA0243702478 +B0908204554106N00646649EA0243602477 +B0908224554099N00646632EA0243302474 +B0908244554091N00646614EA0243102472 +B0908264554084N00646597EA0243002471 +B0908284554078N00646579EA0242602468 +B0908304554070N00646559EA0242202465 +B0908324554062N00646541EA0242202464 +B0908344554054N00646526EA0242002462 +B0908364554045N00646510EA0241602458 +B0908384554035N00646494EA0241302455 +B0908404554025N00646479EA0241202453 +B0908424554015N00646465EA0240902451 +B0908444554005N00646450EA0240602448 +B0908464553995N00646435EA0240402445 +B0908484553985N00646421EA0240202443 +B0908504553976N00646407EA0239802440 +B0908524553965N00646392EA0239302436 +B0908544553954N00646377EA0239002432 +B0908564553945N00646363EA0238902430 +B0908584553935N00646347EA0238602428 +B0909004553925N00646331EA0238402426 +B0909024553917N00646315EA0238302424 +B0909044553908N00646300EA0238202422 +B0909064553899N00646285EA0237802419 +B0909084553891N00646268EA0237502417 +B0909104553882N00646252EA0237302415 +B0909124553873N00646236EA0237002412 +B0909144553865N00646219EA0236702409 +B0909164553855N00646203EA0236502406 +B0909184553846N00646188EA0236202404 +B0909204553838N00646171EA0235902401 +B0909224553830N00646153EA0235602397 +B0909244553822N00646135EA0235402395 +B0909264553814N00646120EA0235202393 +B0909284553805N00646105EA0234802390 +B0909304553796N00646089EA0234602387 +B0909324553787N00646073EA0234402386 +B0909344553779N00646058EA0234102383 +B0909364553771N00646043EA0233802380 +B0909384553762N00646027EA0233702378 +B0909404553754N00646013EA0233602377 +B0909424553746N00645999EA0233102374 +B0909444553736N00645984EA0232802370 +B0909464553728N00645968EA0232802369 +B0909484553720N00645953EA0232602367 +B0909504553712N00645937EA0232302364 +B0909524553704N00645919EA0232202363 +B0909544553697N00645902EA0232202362 +B0909564553690N00645886EA0231902360 +B0909584553682N00645870EA0231602357 +B0910004553674N00645853EA0231402355 +B0910024553665N00645839EA0231202353 +B0910044553655N00645825EA0230902350 +B0910064553646N00645810EA0230702347 +B0910084553637N00645796EA0230402345 +B0910104553627N00645781EA0230002342 +B0910124553618N00645766EA0229702339 +B0910144553609N00645751EA0229502336 +B0910164553601N00645735EA0229302334 +B0910184553594N00645718EA0229102332 +B0910204553587N00645702EA0228802329 +B0910224553579N00645686EA0228402327 +B0910244553571N00645671EA0228202324 +B0910264553563N00645656EA0228102322 +B0910284553554N00645642EA0227902320 +B0910304553545N00645627EA0227702318 +B0910324553537N00645612EA0227602316 +B0910344553528N00645598EA0227302314 +B0910364553518N00645584EA0227202312 +B0910384553509N00645570EA0226902310 +B0910404553500N00645556EA0226702308 +B0910424553490N00645542EA0226402305 +B0910444553481N00645527EA0226002302 +B0910464553472N00645512EA0225802299 +B0910484553461N00645498EA0225602297 +B0910504553452N00645485EA0225402295 +B0910524553442N00645471EA0225202293 +B0910544553431N00645458EA0225002291 +B0910564553421N00645445EA0224902289 +B0910584553410N00645432EA0224702288 +B0911004553400N00645419EA0224502286 +B0911024553390N00645406EA0224302284 +B0911044553381N00645392EA0224102282 +B0911064553371N00645378EA0223902280 +B0911084553361N00645364EA0223602278 +B0911104553351N00645350EA0223302275 +B0911124553341N00645335EA0223102272 +B0911144553332N00645320EA0222902270 +B0911164553324N00645306EA0222602268 +B0911184553317N00645291EA0222202264 +B0911204553308N00645276EA0221902261 +B0911224553300N00645260EA0221702258 +B0911244553293N00645246EA0221202254 +B0911264553285N00645231EA0220902250 +B0911284553279N00645215EA0221202248 +B0911304553274N00645203EA0221402248 +B0911324553268N00645193EA0221402249 +B0911344553261N00645183EA0221402250 +B0911364553256N00645171EA0221302250 +B0911384553249N00645157EA0221402250 +B0911404553242N00645142EA0221702252 +B0911424553237N00645126EA0222202256 +B0911444553233N00645110EA0222602260 +B0911464553227N00645094EA0223002265 +B0911484553216N00645082EA0223202268 +B0911504553203N00645085EA0223502272 +B0911524553197N00645101EA0223802275 +B0911544553206N00645112EA0224202280 +B0911564553216N00645107EA0224502284 +B0911584553220N00645090EA0224802287 +B0912004553214N00645071EA0225102290 +B0912024553200N00645061EA0225502293 +B0912044553186N00645065EA0225702296 +B0912064553179N00645079EA0226002299 +B0912084553182N00645094EA0226302302 +B0912104553192N00645100EA0226402304 +B0912124553203N00645091EA0226602306 +B0912144553207N00645075EA0226802308 +B0912164553203N00645058EA0227002310 +B0912184553192N00645047EA0227102312 +B0912204553178N00645047EA0227302313 +B0912224553168N00645057EA0227602315 +B0912244553168N00645074EA0227802317 +B0912264553175N00645087EA0228002320 +B0912284553185N00645090EA0228202322 +B0912304553194N00645085EA0228402324 +B0912324553199N00645070EA0228802327 +B0912344553197N00645051EA0229102330 +B0912364553185N00645040EA0229102332 +B0912384553172N00645046EA0229102333 +B0912404553169N00645062EA0229202334 +B0912424553177N00645072EA0229402336 +B0912444553187N00645072EA0229802338 +B0912464553196N00645066EA0230302343 +B0912484553204N00645058EA0230602347 +B0912504553210N00645052EA0230802350 +B0912524553214N00645035EA0230802351 +B0912544553208N00645014EA0231202352 +B0912564553197N00645005EA0231602355 +B0912584553186N00645012EA0231802358 +B0913004553183N00645025EA0231902360 +B0913024553188N00645037EA0232002361 +B0913044553196N00645043EA0232402365 +B0913064553206N00645041EA0232702367 +B0913084553216N00645029EA0233102371 +B0913104553219N00645010EA0233602375 +B0913124553214N00644990EA0234102380 +B0913144553203N00644979EA0234402384 +B0913164553192N00644985EA0234702388 +B0913184553191N00645000EA0235102392 +B0913204553199N00645008EA0235502396 +B0913224553210N00645004EA0235802399 +B0913244553217N00644987EA0236202402 +B0913264553212N00644965EA0236702407 +B0913284553199N00644956EA0237102411 +B0913304553189N00644962EA0237302415 +B0913324553187N00644977EA0237602418 +B0913344553196N00644983EA0237902420 +B0913364553208N00644975EA0238302424 +B0913384553213N00644958EA0238702429 +B0913404553212N00644939EA0239302433 +B0913424553202N00644926EA0239802438 +B0913444553189N00644925EA0240202443 +B0913464553182N00644934EA0240302446 +B0913484553183N00644948EA0240502449 +B0913504553193N00644953EA0240802452 +B0913524553203N00644944EA0241002454 +B0913544553210N00644927EA0241302456 +B0913564553209N00644907EA0241802459 +B0913584553200N00644895EA0242302463 +B0914004553189N00644892EA0243002468 +B0914024553180N00644894EA0243502475 +B0914044553175N00644904EA0243702479 +B0914064553179N00644916EA0243902483 +B0914084553190N00644916EA0243902485 +B0914104553200N00644902EA0244002486 +B0914124553203N00644883EA0244602489 +B0914144553201N00644863EA0245002494 +B0914164553192N00644850EA0245002496 +B0914184553180N00644851EA0245102498 +B0914204553172N00644860EA0245202499 +B0914224553173N00644873EA0245702501 +B0914244553182N00644879EA0246202504 +B0914264553194N00644870EA0246602508 +B0914284553199N00644852EA0246902511 +B0914304553195N00644834EA0246902513 +B0914324553184N00644828EA0246602513 +B0914344553173N00644837EA0246602513 +B0914364553169N00644850EA0247002515 +B0914384553172N00644860EA0247302518 +B0914404553178N00644866EA0247502520 +B0914424553186N00644869EA0247702522 +B0914444553196N00644866EA0247902523 +B0914464553207N00644858EA0248402526 +B0914484553216N00644850EA0249002531 +B0914504553223N00644837EA0249302535 +B0914524553229N00644818EA0249502538 +B0914544553225N00644793EA0249702541 +B0914564553213N00644785EA0249602542 +B0914584553206N00644797EA0249802542 +B0915004553206N00644811EA0250302546 +B0915024553207N00644820EA0250802551 +B0915044553210N00644826EA0251102555 +B0915064553221N00644825EA0251002557 +B0915084553232N00644814EA0251002557 +B0915104553235N00644795EA0251002556 +B0915124553231N00644775EA0251402557 +B0915144553223N00644760EA0251802560 +B0915164553213N00644751EA0252002562 +B0915184553203N00644754EA0251902563 +B0915204553197N00644765EA0251902563 +B0915224553197N00644778EA0252102565 +B0915244553205N00644785EA0252302566 +B0915264553218N00644781EA0252402568 +B0915284553224N00644758EA0252402567 +B0915304553220N00644736EA0252702568 +B0915324553208N00644729EA0252902570 +B0915344553198N00644729EA0253002572 +B0915364553191N00644734EA0252902573 +B0915384553187N00644745EA0252802572 +B0915404553193N00644757EA0252802572 +B0915424553205N00644759EA0252902572 +B0915444553216N00644746EA0252902572 +B0915464553217N00644722EA0252902572 +B0915484553210N00644707EA0253202574 +B0915504553199N00644702EA0253202575 +B0915524553189N00644699EA0253102574 +B0915544553178N00644698EA0252602572 +B0915564553164N00644699EA0252602570 +B0915584553151N00644699EA0252702571 +B0916004553140N00644701EA0252602570 +B0916024553129N00644703EA0252402568 +B0916044553117N00644703EA0252002565 +B0916064553106N00644705EA0251602562 +B0916084553093N00644706EA0251302558 +B0916104553081N00644705EA0251202556 +B0916124553070N00644702EA0250802553 +B0916144553058N00644699EA0250502550 +B0916164553046N00644696EA0250302547 +B0916184553034N00644694EA0250202545 +B0916204553022N00644693EA0250002543 +B0916224553009N00644689EA0250002542 +B0916244552997N00644682EA0250302542 +B0916264552986N00644677EA0250802544 +B0916284552976N00644672EA0251302549 +B0916304552967N00644665EA0251202550 +B0916324552955N00644659EA0250902551 +B0916344552942N00644655EA0251002551 +B0916364552930N00644650EA0251502554 +B0916384552918N00644646EA0251802557 +B0916404552905N00644641EA0252102560 +B0916424552892N00644637EA0252202563 +B0916444552880N00644635EA0252302564 +B0916464552866N00644633EA0252502566 +B0916484552853N00644631EA0252502567 +B0916504552841N00644629EA0252602568 +B0916524552829N00644626EA0252702569 +B0916544552817N00644623EA0252602569 +B0916564552804N00644620EA0252802570 +B0916584552790N00644619EA0253202572 +B0917004552778N00644618EA0253502576 +B0917024552767N00644621EA0253602578 +B0917044552756N00644629EA0253602578 +B0917064552748N00644638EA0253502578 +B0917084552736N00644641EA0253302578 +B0917104552722N00644638EA0252702576 +B0917124552708N00644629EA0252002572 +B0917144552695N00644619EA0251402565 +B0917164552681N00644607EA0251002560 +B0917184552670N00644595EA0250702557 +B0917204552660N00644583EA0250302552 +B0917224552649N00644570EA0249602546 +B0917244552638N00644555EA0249302541 +B0917264552627N00644542EA0248902537 +B0917284552617N00644529EA0248502532 +B0917304552604N00644515EA0248202527 +B0917324552591N00644502EA0248302524 +B0917344552579N00644491EA0248602523 +B0917364552569N00644478EA0249002524 +B0917384552559N00644464EA0249502528 +B0917404552549N00644449EA0250102534 +B0917424552541N00644434EA0250602541 +B0917444552534N00644418EA0251102547 +B0917464552525N00644405EA0251702552 +B0917484552516N00644394EA0252202558 +B0917504552507N00644386EA0252202562 +B0917524552494N00644387EA0251802565 +B0917544552487N00644399EA0251802566 +B0917564552496N00644407EA0252202567 +B0917584552508N00644397EA0252602570 +B0918004552514N00644383EA0253102575 +B0918024552516N00644367EA0253402578 +B0918044552516N00644350EA0253702581 +B0918064552512N00644333EA0254002584 +B0918084552506N00644317EA0254402587 +B0918104552500N00644302EA0254702590 +B0918124552493N00644287EA0254702592 +B0918144552483N00644274EA0254602592 +B0918164552471N00644260EA0254702592 +B0918184552458N00644247EA0254902593 +B0918204552445N00644232EA0255102595 +B0918224552433N00644218EA0255202596 +B0918244552419N00644205EA0255002596 +B0918264552405N00644190EA0255002595 +B0918284552393N00644174EA0255002595 +B0918304552381N00644159EA0254802593 +B0918324552367N00644145EA0254602592 +B0918344552352N00644131EA0254302589 +B0918364552338N00644117EA0254102587 +B0918384552326N00644103EA0254102586 +B0918404552314N00644090EA0253802585 +B0918424552301N00644079EA0253302581 +B0918444552288N00644066EA0252802576 +B0918464552276N00644051EA0252202571 +B0918484552265N00644037EA0251602564 +B0918504552253N00644023EA0250902558 +B0918524552240N00644010EA0250402552 +B0918544552228N00643998EA0250002546 +B0918564552216N00643986EA0249502541 +B0918584552204N00643973EA0249002536 +B0919004552191N00643961EA0248702532 +B0919024552179N00643951EA0248302528 +B0919044552167N00643939EA0247602523 +B0919064552154N00643927EA0247002516 +B0919084552139N00643916EA0246602512 +B0919104552128N00643903EA0246202508 +B0919124552117N00643890EA0245502502 +B0919144552104N00643878EA0245002496 +B0919164552091N00643867EA0244802491 +B0919184552080N00643855EA0244302487 +B0919204552068N00643844EA0243702482 +B0919224552055N00643834EA0243002476 +B0919244552042N00643823EA0242602471 +B0919264552029N00643812EA0242302468 +B0919284552016N00643801EA0241902464 +B0919304552003N00643789EA0241602460 +B0919324551990N00643779EA0241402458 +B0919344551978N00643769EA0240902455 +B0919364551965N00643761EA0240602451 +B0919384551951N00643760EA0240602448 +B0919404551938N00643760EA0240402446 +B0919424551925N00643755EA0239802442 +B0919444551911N00643750EA0239602438 +B0919464551898N00643743EA0239402435 +B0919484551887N00643730EA0239202432 +B0919504551875N00643716EA0238902430 +B0919524551863N00643702EA0238902429 +B0919544551852N00643687EA0238902428 +B0919564551840N00643674EA0238602427 +B0919584551828N00643660EA0238402425 +B0920004551815N00643647EA0238402424 +B0920024551803N00643634EA0238502424 +B0920044551791N00643622EA0238502424 +B0920064551778N00643608EA0238402423 +B0920084551766N00643594EA0238402424 +B0920104551753N00643584EA0238502425 +B0920124551741N00643573EA0238402425 +B0920144551729N00643563EA0238202423 +B0920164551715N00643554EA0238002421 +B0920184551701N00643548EA0238002421 +B0920204551688N00643544EA0237902420 +B0920224551673N00643540EA0237502418 +B0920244551658N00643535EA0237302415 +B0920264551644N00643530EA0237202414 +B0920284551630N00643522EA0237102413 +B0920304551616N00643512EA0237002413 +B0920324551603N00643502EA0236902412 +B0920344551590N00643492EA0236902411 +B0920364551578N00643482EA0236702410 +B0920384551565N00643472EA0236502408 +B0920404551552N00643463EA0236402406 +B0920424551539N00643453EA0236202405 +B0920444551527N00643444EA0236002403 +B0920464551516N00643434EA0235602400 +B0920484551504N00643423EA0235402397 +B0920504551491N00643413EA0235302395 +B0920524551477N00643406EA0235102393 +B0920544551465N00643400EA0234902392 +B0920564551452N00643394EA0234702389 +B0920584551438N00643387EA0234602388 +B0921004551426N00643379EA0234502387 +B0921024551414N00643370EA0234302385 +B0921044551401N00643359EA0234002382 +B0921064551389N00643348EA0233902381 +B0921084551377N00643336EA0233802380 +B0921104551366N00643324EA0233602377 +B0921124551354N00643311EA0233302375 +B0921144551342N00643300EA0233102373 +B0921164551330N00643289EA0232702371 +B0921184551318N00643278EA0232402367 +B0921204551306N00643265EA0232202364 +B0921224551294N00643255EA0232202363 +B0921244551283N00643246EA0232002362 +B0921264551271N00643235EA0231802359 +B0921284551258N00643223EA0231602357 +B0921304551246N00643212EA0231402356 +B0921324551235N00643200EA0231202354 +B0921344551224N00643187EA0230902351 +B0921364551212N00643175EA0230602348 +B0921384551199N00643165EA0230402346 +B0921404551185N00643156EA0230202344 +B0921424551172N00643148EA0229902341 +B0921444551159N00643139EA0229702339 +B0921464551146N00643129EA0229502337 +B0921484551133N00643118EA0229202334 +B0921504551120N00643108EA0229002332 +B0921524551108N00643099EA0228802330 +B0921544551096N00643089EA0228502327 +B0921564551084N00643076EA0228202324 +B0921584551072N00643064EA0227802321 +B0922004551060N00643051EA0227602318 +B0922024551048N00643039EA0227402316 +B0922044551036N00643027EA0227402315 +B0922064551026N00643016EA0227202313 +B0922084551015N00643004EA0226802310 +B0922104551004N00642992EA0226602308 +B0922124550993N00642982EA0226302305 +B0922144550981N00642973EA0226002302 +B0922164550968N00642965EA0225702299 +B0922184550955N00642956EA0225402296 +B0922204550943N00642946EA0225102293 +B0922224550931N00642936EA0224802290 +B0922244550919N00642927EA0224602287 +B0922264550907N00642917EA0224302285 +B0922284550896N00642906EA0224002281 +B0922304550885N00642896EA0223702278 +B0922324550872N00642886EA0223302275 +B0922344550861N00642876EA0222902271 +B0922364550848N00642866EA0222502267 +B0922384550835N00642859EA0222102263 +B0922404550822N00642852EA0221902260 +B0922424550809N00642845EA0221502257 +B0922444550798N00642836EA0220902252 +B0922464550786N00642827EA0220302246 +B0922484550773N00642819EA0219602239 +B0922504550761N00642808EA0219302234 +B0922524550750N00642797EA0219102231 +B0922544550738N00642787EA0219002229 +B0922564550727N00642774EA0218902227 +B0922584550716N00642761EA0218802226 +B0923004550705N00642751EA0218602226 +B0923024550693N00642741EA0218502224 +B0923044550681N00642731EA0218502223 +B0923064550668N00642725EA0218502224 +B0923084550656N00642719EA0218502224 +B0923104550644N00642712EA0218402223 +B0923124550632N00642701EA0218202222 +B0923144550620N00642690EA0218202221 +B0923164550607N00642679EA0217802219 +B0923184550594N00642668EA0217702217 +B0923204550582N00642656EA0217502215 +B0923224550569N00642644EA0217402214 +B0923244550556N00642633EA0217202212 +B0923264550544N00642622EA0217002211 +B0923284550533N00642609EA0216902209 +B0923304550522N00642598EA0216802208 +B0923324550511N00642587EA0216602206 +B0923344550500N00642573EA0216402204 +B0923364550490N00642558EA0216102202 +B0923384550481N00642545EA0215702199 +B0923404550472N00642531EA0215002195 +B0923424550463N00642517EA0214302189 +B0923444550451N00642503EA0213702183 +B0923464550441N00642492EA0213102177 +B0923484550430N00642482EA0212402169 +B0923504550418N00642471EA0211702161 +B0923524550404N00642463EA0211002155 +B0923544550389N00642458EA0210502149 +B0923564550373N00642452EA0210102143 +B0923584550359N00642445EA0209902139 +B0924004550345N00642438EA0209402135 +B0924024550331N00642431EA0208802130 +B0924044550317N00642421EA0208302124 +B0924064550304N00642410EA0208002120 +B0924084550290N00642400EA0207702117 +B0924104550278N00642391EA0207402113 +B0924124550264N00642383EA0207102109 +B0924144550251N00642374EA0206902107 +B0924164550238N00642366EA0206402103 +B0924184550223N00642356EA0205802098 +B0924204550209N00642347EA0205602094 +B0924224550195N00642337EA0205502092 +B0924244550183N00642329EA0205102089 +B0924264550169N00642322EA0204602085 +B0924284550154N00642313EA0204602083 +B0924304550141N00642304EA0204502082 +B0924324550127N00642295EA0204202079 +B0924344550112N00642285EA0204002076 +B0924364550098N00642275EA0203802075 +B0924384550084N00642266EA0203702073 +B0924404550070N00642256EA0203702073 +B0924424550055N00642251EA0203802074 +B0924444550042N00642248EA0203602074 +B0924464550028N00642243EA0203502073 +B0924484550014N00642238EA0203702073 +B0924504550001N00642233EA0203702074 +B0924524549988N00642228EA0203602074 +B0924544549974N00642224EA0203502073 +B0924564549961N00642220EA0203502073 +B0924584549948N00642217EA0203502074 +B0925004549935N00642214EA0203502074 +B0925024549921N00642211EA0203602074 +B0925044549909N00642206EA0203702075 +B0925064549896N00642201EA0203702075 +B0925084549884N00642197EA0203502075 +B0925104549872N00642194EA0203402074 +B0925124549858N00642191EA0203402074 +B0925144549845N00642187EA0203402074 +B0925164549832N00642184EA0203202073 +B0925184549818N00642181EA0203202072 +B0925204549804N00642177EA0203302072 +B0925224549789N00642173EA0203402073 +B0925244549775N00642169EA0203502074 +B0925264549761N00642166EA0203602076 +B0925284549747N00642162EA0203702077 +B0925304549733N00642157EA0203902078 +B0925324549720N00642152EA0204002079 +B0925344549706N00642148EA0204302081 +B0925364549692N00642144EA0204702085 +B0925384549678N00642139EA0205102088 +B0925404549665N00642134EA0205402092 +B0925424549653N00642127EA0205902096 +B0925444549642N00642120EA0206102100 +B0925464549630N00642115EA0206402102 +B0925484549618N00642108EA0206702106 +B0925504549606N00642101EA0206902109 +B0925524549595N00642100EA0207002111 +B0925544549588N00642108EA0207002112 +B0925564549591N00642117EA0207002112 +B0925584549601N00642117EA0207002113 +B0926004549611N00642109EA0207402116 +B0926024549620N00642101EA0207702119 +B0926044549628N00642096EA0207902121 +B0926064549636N00642092EA0208202123 +B0926084549643N00642089EA0208602126 +B0926104549650N00642086EA0209002130 +B0926124549656N00642083EA0209502135 +B0926144549662N00642082EA0209902139 +B0926164549668N00642082EA0210302143 +B0926184549674N00642082EA0210602147 +B0926204549680N00642088EA0210702148 +B0926224549677N00642104EA0210902150 +B0926244549665N00642111EA0211102151 +B0926264549649N00642100EA0211602154 +B0926284549638N00642086EA0211902158 +B0926304549627N00642074EA0212202161 +B0926324549614N00642062EA0212702165 +B0926344549602N00642057EA0212902168 +B0926364549592N00642065EA0212502170 +B0926384549589N00642076EA0212502171 +B0926404549597N00642080EA0212702171 +B0926424549608N00642076EA0213002172 +B0926444549615N00642070EA0213202174 +B0926464549622N00642066EA0213602177 +B0926484549629N00642062EA0214102181 +B0926504549635N00642057EA0214502185 +B0926524549641N00642052EA0215002189 +B0926544549648N00642049EA0215602195 +B0926564549653N00642050EA0216002200 +B0926584549655N00642059EA0216402204 +B0927004549650N00642072EA0216902208 +B0927024549634N00642072EA0217202212 +B0927044549621N00642054EA0217402214 +B0927064549620N00642032EA0217602217 +B0927084549632N00642030EA0217902220 +B0927104549640N00642043EA0218702225 +B0927124549645N00642051EA0219402232 +B0927144549651N00642053EA0220102240 +B0927164549655N00642058EA0220502246 +B0927184549651N00642069EA0220702250 +B0927204549633N00642070EA0221002252 +B0927224549618N00642050EA0221802258 +B0927244549616N00642029EA0222202263 +B0927264549622N00642015EA0222802268 +B0927284549629N00642008EA0223602275 +B0927304549636N00642003EA0224402283 +B0927324549640N00641998EA0224802290 +B0927344549646N00641999EA0225202295 +B0927364549648N00642012EA0225602299 +B0927384549637N00642023EA0225802302 +B0927404549620N00642018EA0226102304 +B0927424549607N00641997EA0226702307 +B0927444549606N00641976EA0227202312 +B0927464549612N00641962EA0227902318 +B0927484549619N00641955EA0228702326 +B0927504549626N00641949EA0229502333 +B0927524549632N00641944EA0230302342 +B0927544549639N00641938EA0231002349 +B0927564549647N00641937EA0231502356 +B0927584549651N00641951EA0231802360 +B0928004549645N00641967EA0232202365 +B0928024549629N00641967EA0232702368 +B0928044549618N00641948EA0233502374 +B0928064549616N00641930EA0234702382 +B0928084549620N00641921EA0235602392 +B0928104549625N00641916EA0236202401 +B0928124549630N00641909EA0236402407 +B0928144549637N00641903EA0236602412 +B0928164549647N00641910EA0237102416 +B0928184549652N00641928EA0237702420 +B0928204549646N00641946EA0237802424 +B0928224549632N00641960EA0238102426 +B0928244549616N00641965EA0238602430 +B0928264549602N00641956EA0239002433 +B0928284549594N00641939EA0239402437 +B0928304549598N00641925EA0240002442 +B0928324549607N00641922EA0240502446 +B0928344549614N00641919EA0240802450 +B0928364549620N00641911EA0241302454 +B0928384549628N00641904EA0242102460 +B0928404549635N00641902EA0242002464 +B0928424549642N00641903EA0241602467 +B0928444549645N00641915EA0240802466 +B0928464549638N00641934EA0240102463 +B0928484549622N00641939EA0239702455 +B0928504549606N00641929EA0240002451 +B0928524549595N00641920EA0240302451 +B0928544549584N00641916EA0240702453 +B0928564549571N00641911EA0241002455 +B0928584549559N00641904EA0241402459 +B0929004549546N00641899EA0241902463 +B0929024549533N00641894EA0242302466 +B0929044549522N00641890EA0242902470 +B0929064549516N00641894EA0243402474 +B0929084549512N00641901EA0243702478 +B0929104549510N00641910EA0243602481 +B0929124549511N00641920EA0243402481 +B0929144549517N00641931EA0243702483 +B0929164549525N00641933EA0244402486 +B0929184549529N00641928EA0245102492 +B0929204549532N00641923EA0245602496 +B0929224549535N00641919EA0245902500 +B0929244549537N00641911EA0246302504 +B0929264549536N00641901EA0246402506 +B0929284549528N00641891EA0246402508 +B0929304549516N00641886EA0246702510 +B0929324549507N00641881EA0246702512 +B0929344549497N00641876EA0246402512 +B0929364549482N00641880EA0246802511 +B0929384549474N00641896EA0247302513 +B0929404549476N00641910EA0247602515 +B0929424549482N00641916EA0247502516 +B0929444549488N00641915EA0247602517 +B0929464549493N00641912EA0248102521 +B0929484549497N00641912EA0247802521 +B0929504549500N00641910EA0247302521 +B0929524549506N00641904EA0247202519 +B0929544549511N00641900EA0246902517 +B0929564549516N00641897EA0246102513 +B0929584549521N00641893EA0245602508 +B0930004549526N00641884EA0245202504 +B0930024549522N00641868EA0244602498 +B0930044549511N00641855EA0244202492 +B0930064549498N00641844EA0244302488 +B0930084549486N00641834EA0244702486 +B0930104549478N00641829EA0244602485 +B0930124549466N00641826EA0244102482 +B0930144549455N00641817EA0244102479 +B0930164549446N00641806EA0244202479 +B0930184549439N00641794EA0243902478 +B0930204549428N00641782EA0243602475 +B0930224549416N00641768EA0244402475 +B0930244549407N00641753EA0245102477 +B0930264549398N00641741EA0245102479 +B0930284549383N00641737EA0245102479 +B0930304549371N00641739EA0245602483 +B0930324549362N00641741EA0245802487 +B0930344549355N00641745EA0245202488 +B0930364549349N00641760EA0244902489 +B0930384549353N00641773EA0245002490 +B0930404549365N00641771EA0245002490 +B0930424549372N00641753EA0244902491 +B0930444549371N00641733EA0245002492 +B0930464549365N00641716EA0245002493 +B0930484549356N00641702EA0244802492 +B0930504549347N00641688EA0244902491 +B0930524549338N00641675EA0244702490 +B0930544549331N00641661EA0244302488 +B0930564549325N00641645EA0243702485 +B0930584549316N00641631EA0243102479 +B0931004549305N00641619EA0242602474 +B0931024549296N00641607EA0242502471 +B0931044549286N00641596EA0242402469 +B0931064549275N00641587EA0242402468 +B0931084549264N00641577EA0242402467 +B0931104549253N00641564EA0242402466 +B0931124549242N00641551EA0242702467 +B0931144549230N00641542EA0242802468 +B0931164549220N00641532EA0242502467 +B0931184549210N00641516EA0242502467 +B0931204549199N00641499EA0242702467 +B0931224549190N00641483EA0242902469 +B0931244549181N00641470EA0242802469 +B0931264549170N00641453EA0243202470 +B0931284549160N00641437EA0243502473 +B0931304549152N00641421EA0243602475 +B0931324549145N00641405EA0243602476 +B0931344549137N00641393EA0243402476 +B0931364549129N00641383EA0243302474 +B0931384549120N00641371EA0243202473 +B0931404549113N00641358EA0243502474 +B0931424549104N00641346EA0243802475 +B0931444549095N00641335EA0244102478 +B0931464549086N00641324EA0244302482 +B0931484549076N00641312EA0244402483 +B0931504549064N00641306EA0244302484 +B0931524549053N00641303EA0243902483 +B0931544549041N00641298EA0243502481 +B0931564549029N00641287EA0243202478 +B0931584549016N00641272EA0242902474 +B0932004549004N00641253EA0242702471 +B0932024548990N00641238EA0242502469 +B0932044548977N00641228EA0242302467 +B0932064548965N00641218EA0242002464 +B0932084548952N00641210EA0241602461 +B0932104548939N00641198EA0241302457 +B0932124548928N00641182EA0241002454 +B0932144548919N00641165EA0240702452 +B0932164548909N00641149EA0240502448 +B0932184548898N00641135EA0240702447 +B0932204548889N00641124EA0241202446 +B0932224548880N00641116EA0241502449 +B0932244548869N00641108EA0241702452 +B0932264548858N00641109EA0241602453 +B0932284548851N00641122EA0241702455 +B0932304548854N00641131EA0242302459 +B0932324548862N00641132EA0242602464 +B0932344548870N00641128EA0242702466 +B0932364548876N00641119EA0242502468 +B0932384548881N00641100EA0242202467 +B0932404548877N00641077EA0242102466 +B0932424548865N00641062EA0242502466 +B0932444548854N00641060EA0242702466 +B0932464548845N00641064EA0242602466 +B0932484548837N00641071EA0242602466 +B0932504548834N00641085EA0242702467 +B0932524548841N00641095EA0243002470 +B0932544548849N00641101EA0243402474 +B0932564548854N00641107EA0243702478 +B0932584548858N00641112EA0243702480 +B0933004548865N00641111EA0243602480 +B0933024548875N00641099EA0243802480 +B0933044548877N00641076EA0243902482 +B0933064548870N00641057EA0243902483 +B0933084548862N00641043EA0243902483 +B0933104548850N00641036EA0243702482 +B0933124548838N00641043EA0243402481 +B0933144548833N00641058EA0243602480 +B0933164548839N00641068EA0243802481 +B0933184548847N00641074EA0243802481 +B0933204548856N00641078EA0243802481 +B0933224548865N00641084EA0243902482 +B0933244548874N00641090EA0244202484 +B0933264548880N00641095EA0244402487 +B0933284548888N00641097EA0244502489 +B0933304548897N00641101EA0244502489 +B0933324548906N00641110EA0244902491 +B0933344548914N00641120EA0245402494 +B0933364548918N00641130EA0245702498 +B0933384548922N00641138EA0245702500 +B0933404548931N00641138EA0245702502 +B0933424548945N00641125EA0245802503 +B0933444548950N00641104EA0246102505 +B0933464548944N00641090EA0246502506 +B0933484548933N00641088EA0247002510 +B0933504548928N00641094EA0247202514 +B0933524548928N00641102EA0247502517 +B0933544548933N00641110EA0248002520 +B0933564548939N00641115EA0248502525 +B0933584548946N00641115EA0248802529 +B0934004548953N00641119EA0248902532 +B0934024548960N00641126EA0248902534 +B0934044548969N00641117EA0248802535 +B0934064548970N00641094EA0248802534 +B0934084548957N00641074EA0249102534 +B0934104548945N00641068EA0250002537 +B0934124548936N00641067EA0250802543 +B0934144548929N00641065EA0251202548 +B0934164548923N00641070EA0251002551 +B0934184548927N00641078EA0251002553 +B0934204548937N00641068EA0251002554 +B0934224548945N00641054EA0251502559 +B0934244548950N00641045EA0251702562 +B0934264548953N00641030EA0251602564 +B0934284548954N00641008EA0251902565 +B0934304548947N00640993EA0252402568 +B0934324548937N00640993EA0252602571 +B0934344548932N00641002EA0253102574 +B0934364548931N00641014EA0253902580 +B0934384548934N00641022EA0254302585 +B0934404548941N00641024EA0254402587 +B0934424548951N00641013EA0254302589 +B0934444548954N00640992EA0254502589 +B0934464548947N00640976EA0255202592 +B0934484548938N00640977EA0255902595 +B0934504548929N00640985EA0256702603 +B0934524548926N00640991EA0256902608 +B0934544548928N00640996EA0256802611 +B0934564548939N00640993EA0256702613 +B0934584548949N00640974EA0256702614 +B0935004548948N00640949EA0257002615 +B0935024548938N00640931EA0257902619 +B0935044548929N00640922EA0258702626 +B0935064548923N00640914EA0258902630 +B0935084548915N00640902EA0258602632 +B0935104548904N00640896EA0258302632 +B0935124548897N00640903EA0258402633 +B0935144548899N00640912EA0258602634 +B0935164548909N00640913EA0258802635 +B0935184548919N00640904EA0259102636 +B0935204548926N00640887EA0259402639 +B0935224548925N00640865EA0259802642 +B0935244548916N00640850EA0260202646 +B0935264548906N00640848EA0260402649 +B0935284548902N00640857EA0260802652 +B0935304548909N00640863EA0261002655 +B0935324548922N00640855EA0261202658 +B0935344548928N00640837EA0261502661 +B0935364548927N00640818EA0261702663 +B0935384548922N00640802EA0262102666 +B0935404548911N00640792EA0262502670 +B0935424548900N00640785EA0262802673 +B0935444548891N00640776EA0263002675 +B0935464548883N00640766EA0263302678 +B0935484548874N00640757EA0263602681 +B0935504548865N00640755EA0263602684 +B0935524548857N00640764EA0263602685 +B0935544548850N00640773EA0263702686 +B0935564548840N00640770EA0263702685 +B0935584548829N00640762EA0263902686 +B0936004548818N00640756EA0264402688 +B0936024548807N00640749EA0264902691 +B0936044548796N00640743EA0265202695 +B0936064548786N00640736EA0265502699 +B0936084548777N00640727EA0265602701 +B0936104548768N00640717EA0265502702 +B0936124548758N00640708EA0265502702 +B0936144548749N00640698EA0265602703 +B0936164548740N00640685EA0265902703 +B0936184548733N00640669EA0266602705 +B0936204548731N00640656EA0267502709 +B0936224548727N00640648EA0268202715 +B0936244548721N00640640EA0268602721 +B0936264548715N00640630EA0268602725 +B0936284548706N00640620EA0268902728 +B0936304548696N00640608EA0269502734 +B0936324548687N00640597EA0270202740 +B0936344548678N00640587EA0270802747 +B0936364548669N00640577EA0271402754 +B0936384548660N00640567EA0272002760 +B0936404548652N00640559EA0272302766 +B0936424548643N00640552EA0272402770 +B0936444548633N00640544EA0272402772 +B0936464548622N00640534EA0273002775 +B0936484548612N00640525EA0273702780 +B0936504548603N00640514EA0274302786 +B0936524548595N00640498EA0274902791 +B0936544548586N00640485EA0275402797 +B0936564548576N00640476EA0275902802 +B0936584548565N00640464EA0276602808 +B0937004548554N00640454EA0277002814 +B0937024548543N00640448EA0277102818 +B0937044548530N00640439EA0277102820 +B0937064548518N00640426EA0277302822 +B0937084548508N00640417EA0277302824 +B0937104548496N00640412EA0277002824 +B0937124548484N00640403EA0276802822 +B0937144548473N00640392EA0276802822 +B0937164548463N00640383EA0276902821 +B0937184548453N00640372EA0277002822 +B0937204548445N00640361EA0277302823 +B0937224548436N00640351EA0277402825 +B0937244548427N00640341EA0277302824 +B0937264548417N00640327EA0277202823 +B0937284548408N00640312EA0277302823 +B0937304548400N00640300EA0277102823 +B0937324548391N00640289EA0277002821 +B0937344548383N00640276EA0277002821 +B0937364548375N00640264EA0276802820 +B0937384548366N00640254EA0276702818 +B0937404548359N00640241EA0276602817 +B0937424548351N00640227EA0276502815 +B0937444548343N00640214EA0276602814 +B0937464548334N00640200EA0276802815 +B0937484548327N00640184EA0277002817 +B0937504548319N00640169EA0277202819 +B0937524548310N00640156EA0277202819 +B0937544548303N00640138EA0277502821 +B0937564548297N00640121EA0277802823 +B0937584548292N00640107EA0278002825 +B0938004548284N00640091EA0278202826 +B0938024548276N00640075EA0278802829 +B0938044548269N00640061EA0279202834 +B0938064548264N00640048EA0279202836 +B0938084548258N00640032EA0279102837 +B0938104548252N00640014EA0279402839 +B0938124548247N00639999EA0279702842 +B0938144548243N00639985EA0279802843 +B0938164548237N00639969EA0279902844 +B0938184548230N00639953EA0280202846 +B0938204548225N00639938EA0280402849 +B0938224548219N00639923EA0280502850 +B0938244548213N00639906EA0280602851 +B0938264548210N00639888EA0280802853 +B0938284548206N00639872EA0280802854 +B0938304548202N00639856EA0280802854 +B0938324548198N00639840EA0280802854 +B0938344548194N00639824EA0280702853 +B0938364548190N00639809EA0280702853 +B0938384548185N00639794EA0280602852 +B0938404548180N00639779EA0280302851 +B0938424548175N00639764EA0280302849 +B0938444548165N00639760EA0279902848 +B0938464548150N00639762EA0279602845 +B0938484548143N00639746EA0278602840 +B0938504548149N00639719EA0278802836 +B0938524548154N00639702EA0279102835 +B0938544548152N00639690EA0278702833 +B0938564548150N00639671EA0278002828 +B0938584548149N00639650EA0278102827 +B0939004548148N00639633EA0278102827 +B0939024548145N00639616EA0277602823 +B0939044548142N00639594EA0277202820 +B0939064548142N00639572EA0277102818 +B0939084548146N00639552EA0276602814 +B0939104548154N00639532EA0276402810 +B0939124548161N00639512EA0276402808 +B0939144548165N00639494EA0276302807 +B0939164548166N00639474EA0275902804 +B0939184548165N00639453EA0275702801 +B0939204548164N00639433EA0275802800 +B0939224548164N00639415EA0275602799 +B0939244548162N00639397EA0275202796 +B0939264548159N00639378EA0274902793 +B0939284548155N00639361EA0274802792 +B0939304548152N00639344EA0274502789 +B0939324548148N00639329EA0274102786 +B0939344548142N00639312EA0273702782 +B0939364548137N00639294EA0273402779 +B0939384548132N00639276EA0273102775 +B0939404548127N00639258EA0272902773 +B0939424548124N00639240EA0272902772 +B0939444548120N00639224EA0272702771 +B0939464548114N00639207EA0272802770 +B0939484548109N00639192EA0272902771 +B0939504548102N00639178EA0272702770 +B0939524548096N00639163EA0272502768 +B0939544548090N00639148EA0272302767 +B0939564548083N00639135EA0272202766 +B0939584548077N00639121EA0271902764 +B0940004548070N00639106EA0271702762 +B0940024548063N00639092EA0271702761 +B0940044548056N00639078EA0271602760 +B0940064548049N00639063EA0271402758 +B0940084548041N00639048EA0271402757 +B0940104548032N00639034EA0271302757 +B0940124548025N00639021EA0271002755 +B0940144548017N00639005EA0270702752 +B0940164548010N00638990EA0270702751 +B0940184548003N00638977EA0270402750 +B0940204547996N00638964EA0270202747 +B0940224547989N00638950EA0270102746 +B0940244547983N00638937EA0270102745 +B0940264547977N00638923EA0269902744 +B0940284547970N00638908EA0269702742 +B0940304547964N00638893EA0269502740 +B0940324547958N00638877EA0269202738 +B0940344547952N00638861EA0268802734 +B0940364547947N00638843EA0268502731 +B0940384547942N00638827EA0268302729 +B0940404547937N00638811EA0268002726 +B0940424547932N00638794EA0267602722 +B0940444547927N00638777EA0267302718 +B0940464547921N00638761EA0266902715 +B0940484547915N00638744EA0266502711 +B0940504547909N00638727EA0266002707 +B0940524547901N00638709EA0265702703 +B0940544547893N00638693EA0265402700 +B0940564547886N00638678EA0265202696 +B0940584547880N00638660EA0265002693 +B0941004547876N00638643EA0264902691 +B0941024547874N00638626EA0264702689 +B0941044547873N00638609EA0264302685 +B0941064547874N00638588EA0264302683 +B0941084547873N00638571EA0264602683 +B0941104547869N00638558EA0264402682 +B0941124547862N00638544EA0264002680 +B0941144547856N00638528EA0263702678 +B0941164547850N00638511EA0263702678 +B0941184547846N00638496EA0263602677 +B0941204547842N00638480EA0263702677 +B0941224547839N00638466EA0263702678 +B0941244547837N00638453EA0263302676 +B0941264547833N00638436EA0262902674 +B0941284547830N00638420EA0263102673 +B0941304547826N00638409EA0263002674 +B0941324547820N00638400EA0262702672 +B0941344547813N00638387EA0262502670 +B0941364547805N00638374EA0262602669 +B0941384547798N00638363EA0262402668 +B0941404547789N00638351EA0262002666 +B0941424547783N00638336EA0261602663 +B0941444547778N00638322EA0261402661 +B0941464547772N00638309EA0261102658 +B0941484547767N00638294EA0260902654 +B0941504547763N00638277EA0260802653 +B0941524547759N00638260EA0260602651 +B0941544547753N00638246EA0260302649 +B0941564547748N00638230EA0260002646 +B0941584547744N00638215EA0259802643 +B0942004547741N00638200EA0259602640 +B0942024547737N00638184EA0259502639 +B0942044547734N00638170EA0259302637 +B0942064547731N00638154EA0259302636 +B0942084547728N00638137EA0259402637 +B0942104547725N00638122EA0259402637 +B0942124547722N00638105EA0259202635 +B0942144547718N00638089EA0259202635 +B0942164547712N00638075EA0259102634 +B0942184547706N00638061EA0259102634 +B0942204547700N00638048EA0259302635 +B0942224547693N00638036EA0259402636 +B0942244547687N00638024EA0259402636 +B0942264547682N00638012EA0259502637 +B0942284547677N00638000EA0259402637 +B0942304547673N00637986EA0259402637 +B0942324547669N00637974EA0259502638 +B0942344547664N00637964EA0259502638 +B0942364547660N00637952EA0259402638 +B0942384547653N00637939EA0259502638 +B0942404547645N00637926EA0259702640 +B0942424547637N00637914EA0259802641 +B0942444547631N00637901EA0259902642 +B0942464547625N00637889EA0259702642 +B0942484547619N00637876EA0259602641 +B0942504547612N00637862EA0259602641 +B0942524547607N00637848EA0259602641 +B0942544547602N00637834EA0259502641 +B0942564547595N00637821EA0259502640 +B0942584547588N00637810EA0259502640 +B0943004547582N00637798EA0259302639 +B0943024547576N00637783EA0259202637 +B0943044547570N00637769EA0259102636 +B0943064547565N00637756EA0259102636 +B0943084547560N00637742EA0259002635 +B0943104547555N00637725EA0259202636 +B0943124547551N00637709EA0259402637 +B0943144547546N00637696EA0259502637 +B0943164547541N00637680EA0259602639 +B0943184547537N00637666EA0259902641 +B0943204547534N00637655EA0259802642 +B0943224547529N00637642EA0259402641 +B0943244547523N00637629EA0259202639 +B0943264547517N00637616EA0259102638 +B0943284547513N00637601EA0259002636 +B0943304547509N00637586EA0258902635 +B0943324547504N00637574EA0258902635 +B0943344547499N00637562EA0258702633 +B0943364547494N00637549EA0258102630 +B0943384547486N00637537EA0257502626 +B0943404547478N00637524EA0257202622 +B0943424547472N00637511EA0256902619 +B0943444547464N00637501EA0256302614 +B0943464547456N00637490EA0256002609 +B0943484547448N00637478EA0255702605 +B0943504547439N00637470EA0255002600 +B0943524547430N00637461EA0254102595 +B0943544547421N00637447EA0253602588 +B0943564547413N00637432EA0253402584 +B0943584547406N00637419EA0253202581 +B0944004547401N00637406EA0252902577 +B0944024547395N00637392EA0252802574 +B0944044547390N00637374EA0253202571 +B0944064547390N00637356EA0253902571 +B0944084547388N00637342EA0254202573 +B0944104547385N00637329EA0254502576 +B0944124547381N00637315EA0254602578 +B0944144547374N00637300EA0254802580 +B0944164547367N00637284EA0255202584 +B0944184547361N00637269EA0255602588 +B0944204547356N00637256EA0256002593 +B0944224547351N00637243EA0256302597 +B0944244547345N00637230EA0256602601 +B0944264547340N00637218EA0256902604 +B0944284547335N00637207EA0256802606 +B0944304547328N00637194EA0256702607 +B0944324547320N00637179EA0257002609 +B0944344547313N00637165EA0257402612 +B0944364547307N00637155EA0257502615 +B0944384547299N00637145EA0257202616 +B0944404547291N00637132EA0257002615 +B0944424547283N00637117EA0257002616 +B0944444547277N00637104EA0256802614 +B0944464547270N00637091EA0256302612 +B0944484547262N00637075EA0256202610 +B0944504547255N00637058EA0256402609 +B0944524547250N00637042EA0256502611 +B0944544547244N00637026EA0256602611 +B0944564547237N00637008EA0256702612 +B0944584547229N00636991EA0257002613 +B0945004547222N00636976EA0257202615 +B0945024547216N00636961EA0257802617 +B0945044547212N00636946EA0259002621 +B0945064547209N00636935EA0259602628 +B0945084547204N00636922EA0260102633 +B0945104547196N00636908EA0261002639 +B0945124547188N00636897EA0262002647 +B0945144547178N00636888EA0263002657 +B0945164547167N00636881EA0263902668 +B0945184547155N00636876EA0264902680 +B0945204547143N00636872EA0265502689 +B0945224547129N00636866EA0266002696 +B0945244547116N00636857EA0266902705 +B0945264547105N00636847EA0268002715 +B0945284547095N00636842EA0268502724 +B0945304547083N00636837EA0268602731 +B0945324547072N00636828EA0268602735 +B0945344547061N00636820EA0268402739 +B0945364547050N00636811EA0267902740 +B0945384547040N00636798EA0267702737 +B0945404547030N00636784EA0267602735 +B0945424547019N00636772EA0267602734 +B0945444547009N00636759EA0267302731 +B0945464546998N00636745EA0267002728 +B0945484546988N00636730EA0266702724 +B0945504546979N00636714EA0266402720 +B0945524546970N00636697EA0266202717 +B0945544546962N00636680EA0266002714 +B0945564546954N00636662EA0265702710 +B0945584546947N00636643EA0265602708 +B0946004546940N00636626EA0265302706 +B0946024546934N00636610EA0264702702 +B0946044546926N00636594EA0264102697 +B0946064546917N00636578EA0263902693 +B0946084546909N00636564EA0263602690 +B0946104546902N00636550EA0263102686 +B0946124546895N00636536EA0262702681 +B0946144546886N00636522EA0262702677 +B0946164546877N00636507EA0262702675 +B0946184546871N00636492EA0262502673 +B0946204546865N00636476EA0262302670 +B0946224546859N00636459EA0262302669 +B0946244546852N00636444EA0262302669 +B0946264546844N00636430EA0262302668 +B0946284546836N00636414EA0262302668 +B0946304546828N00636397EA0262702668 +B0946324546820N00636383EA0263102670 +B0946344546812N00636371EA0263302672 +B0946364546801N00636359EA0263602674 +B0946384546791N00636349EA0264002677 +B0946404546781N00636340EA0264202681 +B0946424546771N00636329EA0264002682 +B0946444546761N00636317EA0264102682 +B0946464546752N00636302EA0264302684 +B0946484546745N00636288EA0264402686 +B0946504546738N00636274EA0264502687 +B0946524546731N00636260EA0264502688 +B0946544546723N00636244EA0264602689 +B0946564546716N00636228EA0264702690 +B0946584546709N00636212EA0264802691 +B0947004546701N00636198EA0265102693 +B0947024546694N00636185EA0265402696 +B0947044546689N00636172EA0265402697 +B0947064546682N00636158EA0265302697 +B0947084546675N00636144EA0265302697 +B0947104546670N00636129EA0265302697 +B0947124546665N00636114EA0265002696 +B0947144546660N00636096EA0265002695 +B0947164546655N00636078EA0265202695 +B0947184546650N00636064EA0265202695 +B0947204546644N00636050EA0265002694 +B0947224546637N00636031EA0264902694 +B0947244546631N00636013EA0265102695 +B0947264546627N00635998EA0265002696 +B0947284546623N00635981EA0264802694 +B0947304546616N00635962EA0264802693 +B0947324546610N00635945EA0264902694 +B0947344546604N00635929EA0264702693 +B0947364546598N00635911EA0264302690 +B0947384546591N00635892EA0264202688 +B0947404546586N00635873EA0264102687 +B0947424546582N00635855EA0263702685 +B0947444546576N00635838EA0263402681 +B0947464546569N00635819EA0263302680 +B0947484546564N00635803EA0263302679 +B0947504546557N00635787EA0263202677 +B0947524546551N00635772EA0263302677 +B0947544546545N00635757EA0263602678 +B0947564546538N00635745EA0264102680 +B0947584546531N00635733EA0264502684 +B0948004546524N00635722EA0265102690 +B0948024546516N00635714EA0265502695 +B0948044546508N00635707EA0265902699 +B0948064546500N00635699EA0266202702 +B0948084546491N00635689EA0266602706 +B0948104546481N00635680EA0267102711 +B0948124546471N00635677EA0267502716 +B0948144546462N00635675EA0267602719 +B0948164546451N00635675EA0267702721 +B0948184546439N00635672EA0268002723 +B0948204546427N00635667EA0268502727 +B0948224546415N00635664EA0268702731 +B0948244546402N00635662EA0269002733 +B0948264546389N00635657EA0269202736 +B0948284546377N00635649EA0269402738 +B0948304546366N00635639EA0269502739 +B0948324546356N00635625EA0269602740 +B0948344546348N00635607EA0269602741 +B0948364546341N00635589EA0269702742 +B0948384546335N00635573EA0269702742 +B0948404546330N00635555EA0269702742 +B0948424546329N00635537EA0269702742 +B0948444546328N00635518EA0269702742 +B0948464546327N00635499EA0269802742 +B0948484546326N00635480EA0270002743 +B0948504546323N00635461EA0269902744 +B0948524546317N00635445EA0269702744 +B0948544546311N00635429EA0269102742 +B0948564546306N00635410EA0269002740 +B0948584546301N00635392EA0268902739 +B0949004546297N00635377EA0268602737 +B0949024546293N00635360EA0268202733 +B0949044546291N00635340EA0268102731 +B0949064546289N00635322EA0268002730 +B0949084546286N00635306EA0267602727 +B0949104546282N00635288EA0267102722 +B0949124546279N00635268EA0267002719 +B0949144546276N00635250EA0266802717 +B0949164546273N00635233EA0266502713 +B0949184546269N00635215EA0266102710 +B0949204546263N00635197EA0266002707 +B0949224546258N00635181EA0265702705 +B0949244546252N00635166EA0265402702 +B0949264546246N00635149EA0265202699 +B0949284546241N00635131EA0264902696 +B0949304546236N00635114EA0264602693 +B0949324546231N00635097EA0264202689 +B0949344546226N00635079EA0263902686 +B0949364546222N00635062EA0263502682 +B0949384546217N00635046EA0263002678 +B0949404546212N00635028EA0262502673 +B0949424546208N00635010EA0262102668 +B0949444546203N00634992EA0261702664 +B0949464546198N00634975EA0261302660 +B0949484546191N00634956EA0260902656 +B0949504546186N00634938EA0260802654 +B0949524546181N00634923EA0260302650 +B0949544546176N00634905EA0259902645 +B0949564546171N00634887EA0259802642 +B0949584546165N00634871EA0259602641 +B0950004546159N00634857EA0259202637 +B0950024546153N00634840EA0258802633 +B0950044546147N00634823EA0258702631 +B0950064546141N00634808EA0258502629 +B0950084546136N00634792EA0258202626 +B0950104546130N00634775EA0257902623 +B0950124546125N00634760EA0257602621 +B0950144546118N00634745EA0257302618 +B0950164546112N00634728EA0257002614 +B0950184546105N00634711EA0257002613 +B0950204546099N00634695EA0256802611 +B0950224546092N00634679EA0256602610 +B0950244546087N00634663EA0256502609 +B0950264546082N00634647EA0256202607 +B0950284546076N00634631EA0256002604 +B0950304546068N00634615EA0256002603 +B0950324546060N00634598EA0256202602 +B0950344546053N00634581EA0256102602 +B0950364546047N00634563EA0255802600 +B0950384546040N00634542EA0255502597 +B0950404546034N00634522EA0255402596 +B0950424546029N00634504EA0255302596 +B0950444546025N00634485EA0255002593 +B0950464546020N00634465EA0255002591 +B0950484546016N00634448EA0255102591 +B0950504546013N00634432EA0254902590 +B0950524546009N00634414EA0254802588 +B0950544546005N00634396EA0255002588 +B0950564546001N00634382EA0254902588 +B0950584545996N00634370EA0254802586 +B0951004545991N00634357EA0254502584 +B0951024545986N00634343EA0254302582 +B0951044545980N00634329EA0254302581 +B0951064545975N00634314EA0254502581 +B0951084545970N00634299EA0254802583 +B0951104545965N00634285EA0255002586 +B0951124545960N00634272EA0255202587 +B0951144545953N00634257EA0255602591 +B0951164545947N00634243EA0256202595 +B0951184545941N00634229EA0256602600 +B0951204545936N00634217EA0256802604 +B0951224545929N00634206EA0256602606 +B0951244545923N00634192EA0256302607 +B0951264545918N00634176EA0255902605 +B0951284545912N00634159EA0255702603 +B0951304545906N00634143EA0255502601 +B0951324545902N00634127EA0255302599 +B0951344545897N00634109EA0255202597 +B0951364545893N00634090EA0255602596 +B0951384545893N00634071EA0256202597 +B0951404545893N00634053EA0256902599 +B0951424545889N00634035EA0257602605 +B0951444545886N00634018EA0258402612 +B0951464545885N00634003EA0258902620 +B0951484545884N00633991EA0258902625 +B0951504545882N00633978EA0258802628 +B0951524545879N00633963EA0258602629 +B0951544545875N00633946EA0258502627 +B0951564545871N00633928EA0258502627 +B0951584545867N00633910EA0258702628 +B0952004545864N00633893EA0258702629 +B0952024545860N00633878EA0258602628 +B0952044545855N00633862EA0258302627 +B0952064545850N00633845EA0258102625 +B0952084545846N00633828EA0258002624 +B0952104545842N00633812EA0257702622 +B0952124545837N00633797EA0257502619 +B0952144545833N00633780EA0257102616 +B0952164545829N00633764EA0256802613 +B0952184545826N00633747EA0256602611 +B0952204545822N00633730EA0256502609 +B0952224545816N00633713EA0256502607 +B0952244545812N00633696EA0256502608 +B0952264545808N00633680EA0256402607 +B0952284545804N00633663EA0256302606 +B0952304545799N00633646EA0256602606 +B0952324545795N00633630EA0256802607 +B0952344545790N00633615EA0256902608 +B0952364545785N00633598EA0256902609 +B0952384545779N00633581EA0256902609 +B0952404545774N00633564EA0256702609 +B0952424545769N00633545EA0256502607 +B0952444545763N00633526EA0256702607 +B0952464545757N00633509EA0256702608 +B0952484545752N00633495EA0256702608 +B0952504545745N00633480EA0256802608 +B0952524545740N00633464EA0257102609 +B0952544545737N00633450EA0257302611 +B0952564545732N00633434EA0257302611 +B0952584545725N00633415EA0257202611 +B0953004545718N00633398EA0257102612 +B0953024545713N00633383EA0256502611 +B0953044545706N00633367EA0256002608 +B0953064545697N00633348EA0255902606 +B0953084545690N00633332EA0255802605 +B0953104545683N00633316EA0255502602 +B0953124545675N00633297EA0255502600 +B0953144545669N00633280EA0255602600 +B0953164545665N00633264EA0255302598 +B0953184545658N00633247EA0255102595 +B0953204545649N00633233EA0255102594 +B0953224545641N00633220EA0255102594 +B0953244545635N00633203EA0255102594 +B0953264545629N00633187EA0255002594 +B0953284545623N00633173EA0254702592 +B0953304545615N00633158EA0254502590 +B0953324545607N00633144EA0254402589 +B0953344545602N00633130EA0254002587 +B0953364545595N00633117EA0253502583 +B0953384545589N00633102EA0253002578 +B0953404545582N00633086EA0252502573 +B0953424545577N00633070EA0252202570 +B0953444545573N00633055EA0251902566 +B0953464545569N00633040EA0251602563 +B0953484545565N00633026EA0251202559 +B0953504545560N00633014EA0250802555 +B0953524545555N00633001EA0250402551 +B0953544545550N00632988EA0250002547 +B0953564545545N00632977EA0249602544 +B0953584545540N00632966EA0249102539 +B0954004545534N00632954EA0248602534 +B0954024545527N00632944EA0248202529 +B0954044545521N00632932EA0247802523 +B0954064545514N00632919EA0247302519 +B0954084545507N00632905EA0247102515 +B0954104545500N00632891EA0247002513 +B0954124545494N00632877EA0246902512 +B0954144545489N00632862EA0246802511 +B0954164545484N00632847EA0246702509 +B0954184545480N00632831EA0246502508 +B0954204545475N00632816EA0246202505 +B0954224545469N00632804EA0245902503 +B0954244545462N00632791EA0245502500 +B0954264545455N00632778EA0245302497 +B0954284545449N00632766EA0245102495 +B0954304545442N00632753EA0244802492 +B0954324545436N00632740EA0244502489 +B0954344545430N00632725EA0244402487 +B0954364545425N00632710EA0244102485 +B0954384545419N00632696EA0243902483 +B0954404545413N00632680EA0243802481 +B0954424545407N00632666EA0243602479 +B0954444545401N00632653EA0243302477 +B0954464545395N00632638EA0243102474 +B0954484545388N00632622EA0242802471 +B0954504545382N00632606EA0242702470 +B0954524545376N00632591EA0242502468 +B0954544545371N00632576EA0242202465 +B0954564545365N00632560EA0242002462 +B0954584545360N00632544EA0241702460 +B0955004545355N00632529EA0241402458 +B0955024545349N00632514EA0241002454 +B0955044545344N00632499EA0240702451 +B0955064545338N00632483EA0240402447 +B0955084545332N00632469EA0240102444 +B0955104545326N00632454EA0239802441 +B0955124545321N00632439EA0239402437 +B0955144545316N00632424EA0239102435 +B0955164545311N00632409EA0238802432 +B0955184545308N00632393EA0238702430 +B0955204545305N00632379EA0238402427 +B0955224545303N00632364EA0238102424 +B0955244545301N00632348EA0237902421 +B0955264545299N00632333EA0237702420 +B0955284545298N00632319EA0237202417 +B0955304545295N00632304EA0236702412 +B0955324545289N00632290EA0236502410 +B0955344545283N00632279EA0236302408 +B0955364545278N00632267EA0235902404 +B0955384545271N00632254EA0235602401 +B0955404545264N00632242EA0235302398 +B0955424545259N00632228EA0235002395 +B0955444545253N00632214EA0234702392 +B0955464545246N00632199EA0234702390 +B0955484545241N00632184EA0234602389 +B0955504545237N00632170EA0234302388 +B0955524545231N00632158EA0233702385 +B0955544545224N00632144EA0233202380 +B0955564545219N00632127EA0233002377 +B0955584545214N00632111EA0232902376 +B0956004545210N00632097EA0232802374 +B0956024545207N00632081EA0232802373 +B0956044545202N00632066EA0233002373 +B0956064545198N00632053EA0232802373 +B0956084545194N00632038EA0232602371 +B0956104545188N00632023EA0232502369 +B0956124545182N00632010EA0232402369 +B0956144545177N00631996EA0232202367 +B0956164545172N00631982EA0231802364 +B0956184545166N00631969EA0231402359 +B0956204545161N00631954EA0231002355 +B0956224545156N00631939EA0230902352 +B0956244545153N00631925EA0231102351 +B0956264545150N00631912EA0231202351 +B0956284545147N00631897EA0231102350 +B0956304545144N00631881EA0231202351 +B0956324545141N00631865EA0231302351 +B0956344545138N00631849EA0231302352 +B0956364545134N00631833EA0231402352 +B0956384545132N00631817EA0231702355 +B0956404545130N00631803EA0231802357 +B0956424545127N00631789EA0231802357 +B0956444545123N00631775EA0231902358 +B0956464545119N00631759EA0232302360 +B0956484545114N00631745EA0232402363 +B0956504545110N00631732EA0232102363 +B0956524545106N00631718EA0231902362 +B0956544545103N00631703EA0231602359 +B0956564545099N00631687EA0231402356 +B0956584545094N00631671EA0231302355 +B0957004545091N00631656EA0231102354 +B0957024545088N00631641EA0230902352 +B0957044545085N00631626EA0230902351 +B0957064545082N00631613EA0230802350 +B0957084545079N00631599EA0230502347 +B0957104545077N00631583EA0230902346 +B0957124545075N00631569EA0231102346 +B0957144545073N00631556EA0231302348 +B0957164545072N00631543EA0231402350 +B0957184545070N00631527EA0231602352 +B0957204545068N00631512EA0231902355 +B0957224545066N00631496EA0232102357 +B0957244545063N00631481EA0232202359 +B0957264545060N00631465EA0232502362 +B0957284545058N00631449EA0232802365 +B0957304545056N00631435EA0232902367 +B0957324545052N00631422EA0233002369 +B0957344545048N00631407EA0233202370 +B0957364545045N00631392EA0233302372 +B0957384545042N00631375EA0233502373 +B0957404545040N00631357EA0234002376 +B0957424545037N00631341EA0234602380 +B0957444545033N00631326EA0235102385 +B0957464545030N00631312EA0235602390 +B0957484545027N00631297EA0236102395 +B0957504545023N00631281EA0236802402 +B0957524545021N00631266EA0237302408 +B0957544545020N00631252EA0237502413 +B0957564545020N00631236EA0237802416 +B0957584545018N00631219EA0237902418 +B0958004545015N00631202EA0238002419 +B0958024545011N00631183EA0238002420 +B0958044545009N00631165EA0238002421 +B0958064545007N00631150EA0237902420 +B0958084545006N00631134EA0237902420 +B0958104545007N00631118EA0237702420 +B0958124545004N00631104EA0237702419 +B0958144545002N00631090EA0237902420 +B0958164545001N00631077EA0237902421 +B0958184544999N00631063EA0238002421 +B0958204544997N00631048EA0238102422 +B0958224544995N00631033EA0238402424 +B0958244544992N00631018EA0238702427 +B0958264544988N00631003EA0239502431 +B0958284544986N00630989EA0240402437 +B0958304544985N00630978EA0241202445 +B0958324544983N00630970EA0241802452 +B0958344544976N00630965EA0242202458 +B0958364544966N00630975EA0242802464 +B0958384544966N00630991EA0243402471 +B0958404544978N00631001EA0244102478 +B0958424544991N00630994EA0244902486 +B0958444544995N00630978EA0245802496 +B0958464544994N00630966EA0246602505 +B0958484544990N00630957EA0247002511 +B0958504544981N00630954EA0247302517 +B0958524544973N00630968EA0247602521 +B0958544544977N00630985EA0248202525 +B0958564544991N00630991EA0248902531 +B0958584545004N00630984EA0249702538 +B0959004545010N00630969EA0250302544 +B0959024545011N00630952EA0251002551 +B0959044545011N00630939EA0251602558 +B0959064545010N00630927EA0251902563 +B0959084545007N00630914EA0252202566 +B0959104545002N00630899EA0252502569 +B0959124545000N00630885EA0252602572 +B0959144544998N00630871EA0252602573 +B0959164544995N00630855EA0252602573 +B0959184544992N00630838EA0252702574 +B0959204544990N00630824EA0252602574 +B0959224544985N00630809EA0252302572 +B0959244544980N00630795EA0252302571 +B0959264544975N00630782EA0252302571 +B0959284544970N00630770EA0252302570 +B0959304544964N00630758EA0252302570 +B0959324544957N00630746EA0252402570 +B0959344544951N00630731EA0252202570 +B0959364544948N00630716EA0252002568 +B0959384544944N00630703EA0251702565 +B0959404544942N00630690EA0251302562 +B0959424544940N00630675EA0250802557 +B0959444544937N00630660EA0250302552 +B0959464544931N00630645EA0249902547 +B0959484544925N00630630EA0249302542 +B0959504544919N00630614EA0248802536 +B0959524544912N00630599EA0248402532 +B0959544544906N00630584EA0248102527 +B0959564544902N00630567EA0248102524 +B0959584544897N00630552EA0248202523 +B1000004544891N00630540EA0248302524 +B1000024544887N00630527EA0248302524 +B1000044544883N00630512EA0248302524 +B1000064544879N00630495EA0248802525 +B1000084544875N00630480EA0249502527 +B1000104544872N00630470EA0249802531 +B1000124544869N00630457EA0250202534 +B1000144544865N00630444EA0250902540 +B1000164544861N00630432EA0251202545 +B1000184544858N00630421EA0250902549 +B1000204544854N00630405EA0250902551 +B1000224544852N00630388EA0251302556 +B1000244544848N00630375EA0251502559 +B1000264544845N00630362EA0251602560 +B1000284544841N00630348EA0251502560 +B1000304544836N00630331EA0251402560 +B1000324544830N00630313EA0251602560 +B1000344544825N00630294EA0252302562 +B1000364544821N00630280EA0252702565 +B1000384544817N00630270EA0252802567 +B1000404544813N00630258EA0252902568 +B1000424544810N00630242EA0253002570 +B1000444544808N00630226EA0253102571 +B1000464544806N00630210EA0253002571 +B1000484544804N00630194EA0252902571 +B1000504544799N00630178EA0252802570 +B1000524544794N00630164EA0252602569 +B1000544544789N00630148EA0252302566 +B1000564544785N00630130EA0252202565 +B1000584544781N00630113EA0252102564 +B1001004544776N00630097EA0251802562 +B1001024544771N00630081EA0251402559 +B1001044544765N00630066EA0250902555 +B1001064544759N00630049EA0250602551 +B1001084544754N00630032EA0250402548 +B1001104544749N00630015EA0250202546 +B1001124544745N00629999EA0249902543 +B1001144544740N00629982EA0249702541 +B1001164544735N00629964EA0249502539 +B1001184544731N00629947EA0249302537 +B1001204544728N00629930EA0249202535 +B1001224544724N00629913EA0249102534 +B1001244544720N00629895EA0249102534 +B1001264544716N00629879EA0249002533 +B1001284544712N00629863EA0248602531 +B1001304544708N00629845EA0248702531 +B1001324544705N00629828EA0248802531 +B1001344544703N00629815EA0248702530 +B1001364544701N00629800EA0248802530 +B1001384544699N00629782EA0249402530 +B1001404544697N00629765EA0250302533 +B1001424544695N00629748EA0251002538 +B1001444544693N00629731EA0251402543 +B1001464544689N00629713EA0251902550 +B1001484544687N00629694EA0252402555 +B1001504544686N00629675EA0252602559 +B1001524544685N00629654EA0252802562 +B1001544544683N00629634EA0253002566 +B1001564544681N00629613EA0253602569 +B1001584544682N00629590EA0254402574 +B1002004544684N00629570EA0254902580 +B1002024544684N00629553EA0255102584 +B1002044544683N00629534EA0255402587 +B1002064544679N00629515EA0255902592 +B1002084544675N00629496EA0256502599 +B1002104544669N00629480EA0256502603 +B1002124544664N00629463EA0256402606 +B1002144544661N00629445EA0256502607 +B1002164544659N00629430EA0256702610 +B1002184544655N00629417EA0256702611 +B1002204544652N00629404EA0256302611 +B1002224544647N00629388EA0256002609 +B1002244544642N00629371EA0255902607 +B1002264544637N00629355EA0255702606 +B1002284544633N00629340EA0255602604 +B1002304544627N00629324EA0255502602 +B1002324544621N00629309EA0255502601 +B1002344544616N00629295EA0255502601 +B1002364544612N00629282EA0255202599 +B1002384544606N00629268EA0254902597 +B1002404544601N00629251EA0254902595 +B1002424544598N00629235EA0255002595 +B1002444544594N00629222EA0254902594 +B1002464544590N00629208EA0254702592 +B1002484544584N00629193EA0254602591 +B1002504544579N00629179EA0254702591 +B1002524544574N00629165EA0254702591 +B1002544544569N00629150EA0254602590 +B1002564544565N00629136EA0254602590 +B1002584544560N00629122EA0254502589 +B1003004544555N00629107EA0254502589 +B1003024544551N00629093EA0254402588 +B1003044544546N00629078EA0254302587 +B1003064544541N00629063EA0254202586 +B1003084544537N00629049EA0254002585 +B1003104544532N00629035EA0253802583 +B1003124544528N00629020EA0253602581 +B1003144544523N00629005EA0253402579 +B1003164544518N00628990EA0253302577 +B1003184544513N00628975EA0253102575 +B1003204544508N00628960EA0252802572 +B1003224544503N00628944EA0252402569 +B1003244544498N00628928EA0252002566 +B1003264544494N00628912EA0251302561 +B1003284544490N00628894EA0250502555 +B1003304544486N00628876EA0250102550 +B1003324544485N00628860EA0249302544 +B1003344544484N00628844EA0248202537 +B1003364544481N00628826EA0247502529 +B1003384544479N00628810EA0246902522 +B1003404544478N00628794EA0246102514 +B1003424544476N00628777EA0245602507 +B1003444544472N00628760EA0245502502 +B1003464544466N00628746EA0245202498 +B1003484544460N00628732EA0244802493 +B1003504544453N00628717EA0244302489 +B1003524544446N00628700EA0244002485 +B1003544544442N00628683EA0243502480 +B1003564544439N00628666EA0242902475 +B1003584544434N00628648EA0242502470 +B1004004544430N00628630EA0242202466 +B1004024544427N00628612EA0241802462 +B1004044544422N00628594EA0241302457 +B1004064544417N00628575EA0240902454 +B1004084544412N00628557EA0240602451 +B1004104544407N00628540EA0240202446 +B1004124544403N00628522EA0239702441 +B1004144544398N00628502EA0239602438 +B1004164544394N00628484EA0239402436 +B1004184544390N00628467EA0238902432 +B1004204544386N00628450EA0238202427 +B1004224544383N00628429EA0237702422 +B1004244544378N00628410EA0237602419 +B1004264544375N00628393EA0237202416 +B1004284544371N00628375EA0236602411 +B1004304544365N00628357EA0236202406 +B1004324544359N00628338EA0236002404 +B1004344544354N00628321EA0235702401 +B1004364544349N00628303EA0235302396 +B1004384544344N00628285EA0234902393 +B1004404544339N00628265EA0234702390 +B1004424544335N00628247EA0234202386 +B1004444544330N00628228EA0233802382 +B1004464544326N00628208EA0233402378 +B1004484544323N00628189EA0233002374 +B1004504544320N00628169EA0232602370 +B1004524544317N00628150EA0232202366 +B1004544544314N00628129EA0231802362 +B1004564544311N00628109EA0231502359 +B1004584544308N00628089EA0231202356 +B1005004544306N00628069EA0230802352 +B1005024544303N00628049EA0230402348 +B1005044544300N00628029EA0230002344 +B1005064544297N00628007EA0229702340 +B1005084544294N00627987EA0229402337 +B1005104544290N00627967EA0229102333 +B1005124544285N00627947EA0228602329 +B1005144544281N00627927EA0228302326 +B1005164544277N00627907EA0228002323 +B1005184544273N00627887EA0227702319 +B1005204544269N00627867EA0227402317 +B1005224544265N00627847EA0227102313 +B1005244544261N00627827EA0226902310 +B1005264544258N00627806EA0226702308 +B1005284544255N00627787EA0226402306 +B1005304544252N00627767EA0226102303 +B1005324544249N00627746EA0225802300 +B1005344544247N00627724EA0225602298 +B1005364544245N00627704EA0225402296 +B1005384544243N00627683EA0225102293 +B1005404544241N00627661EA0224902290 +B1005424544240N00627639EA0224802288 +B1005444544239N00627618EA0224602286 +B1005464544238N00627598EA0224302284 +B1005484544237N00627577EA0224002281 +B1005504544236N00627555EA0223802279 +B1005524544235N00627534EA0223702277 +B1005544544233N00627513EA0223502275 +B1005564544231N00627491EA0223402273 +B1005584544230N00627470EA0223202272 +B1006004544227N00627449EA0222902270 +B1006024544223N00627429EA0222702268 +B1006044544219N00627408EA0222602266 +B1006064544216N00627387EA0222402265 +B1006084544211N00627366EA0222302263 +B1006104544207N00627345EA0222102262 +B1006124544202N00627324EA0222102261 +B1006144544198N00627303EA0221902260 +B1006164544193N00627283EA0221702258 +B1006184544188N00627263EA0221502256 +B1006204544182N00627242EA0221402255 +B1006224544179N00627221EA0221202253 +B1006244544174N00627200EA0221002251 +B1006264544169N00627179EA0220802249 +B1006284544165N00627158EA0220602247 +B1006304544159N00627138EA0220402245 +B1006324544153N00627119EA0220202243 +B1006344544148N00627098EA0219802240 +B1006364544144N00627077EA0219702238 +B1006384544141N00627055EA0219402236 +B1006404544141N00627032EA0219102233 +B1006424544141N00627009EA0219002231 +B1006444544141N00626986EA0218702229 +B1006464544141N00626964EA0218502226 +B1006484544141N00626942EA0218302224 +B1006504544141N00626919EA0218102222 +B1006524544141N00626897EA0217902220 +B1006544544140N00626874EA0217702218 +B1006564544140N00626852EA0217502216 +B1006584544140N00626829EA0217302214 +B1007004544139N00626807EA0217102212 +B1007024544138N00626785EA0216902210 +B1007044544138N00626763EA0216702208 +B1007064544139N00626740EA0216502205 +B1007084544139N00626717EA0216302203 +B1007104544140N00626695EA0216102202 +B1007124544140N00626672EA0215902200 +B1007144544139N00626650EA0215802197 +B1007164544138N00626628EA0215602196 +B1007184544138N00626605EA0215402193 +B1007204544138N00626583EA0215102191 +B1007224544137N00626561EA0214902189 +B1007244544137N00626538EA0214702187 +B1007264544137N00626516EA0214502184 +B1007284544136N00626494EA0214202182 +B1007304544135N00626471EA0214102180 +B1007324544134N00626449EA0213802177 +B1007344544133N00626427EA0213602175 +B1007364544132N00626405EA0213402173 +B1007384544131N00626383EA0213102170 +B1007404544129N00626361EA0212902168 +B1007424544128N00626340EA0212702166 +B1007444544126N00626318EA0212502164 +B1007464544124N00626297EA0212302161 +B1007484544121N00626276EA0212002159 +B1007504544119N00626254EA0211802157 +B1007524544117N00626233EA0211602154 +B1007544544115N00626211EA0211302152 +B1007564544113N00626190EA0211002150 +B1007584544111N00626169EA0210702147 +B1008004544109N00626147EA0210402144 +B1008024544106N00626126EA0210102141 +B1008044544103N00626106EA0209902138 +B1008064544100N00626085EA0209602135 +B1008084544097N00626064EA0209302132 +B1008104544093N00626043EA0209002129 +B1008124544090N00626022EA0208702126 +B1008144544087N00626001EA0208502123 +B1008164544085N00625980EA0208302121 +B1008184544082N00625958EA0208002118 +B1008204544080N00625938EA0207702116 +B1008224544077N00625917EA0207502113 +B1008244544075N00625896EA0207302111 +B1008264544072N00625875EA0207002109 +B1008284544069N00625854EA0206802106 +B1008304544068N00625833EA0206602104 +B1008324544066N00625812EA0206302101 +B1008344544064N00625791EA0206102099 +B1008364544062N00625770EA0205902097 +B1008384544061N00625749EA0205702095 +B1008404544059N00625728EA0205502093 +B1008424544057N00625708EA0205202091 +B1008444544055N00625687EA0205002088 +B1008464544053N00625667EA0204802086 +B1008484544050N00625647EA0204602084 +B1008504544047N00625626EA0204402082 +B1008524544044N00625607EA0204202080 +B1008544544040N00625587EA0203902077 +B1008564544037N00625567EA0203702074 +B1008584544034N00625547EA0203302072 +B1009004544031N00625528EA0203102070 +B1009024544027N00625508EA0202902068 +B1009044544023N00625488EA0202802065 +B1009064544019N00625469EA0202602063 +B1009084544014N00625450EA0202302061 +B1009104544010N00625430EA0202102059 +B1009124544006N00625410EA0202002057 +B1009144544002N00625391EA0201702055 +B1009164543997N00625372EA0201502053 +B1009184543991N00625353EA0201302050 +B1009204543985N00625335EA0201102049 +B1009224543978N00625317EA0200902047 +B1009244543972N00625299EA0200602044 +B1009264543967N00625279EA0200402042 +B1009284543962N00625260EA0200302040 +B1009304543959N00625240EA0200102038 +B1009324543956N00625221EA0199902036 +B1009344543953N00625201EA0199602034 +B1009364543950N00625180EA0199402032 +B1009384543948N00625161EA0199202030 +B1009404543946N00625141EA0199002028 +B1009424543944N00625122EA0198802025 +B1009444543942N00625102EA0198502023 +B1009464543940N00625082EA0198302022 +B1009484543938N00625062EA0198102020 +B1009504543936N00625042EA0197802017 +B1009524543934N00625022EA0197502014 +B1009544543931N00625002EA0197402012 +B1009564543927N00624982EA0197202010 +B1009584543924N00624962EA0196902008 +B1010004543920N00624942EA0196702006 +B1010024543916N00624923EA0196502004 +B1010044543913N00624904EA0196402002 +B1010064543908N00624885EA0196202000 +B1010084543904N00624866EA0196001998 +B1010104543901N00624847EA0195701995 +B1010124543897N00624827EA0195501992 +B1010144543893N00624808EA0195301990 +B1010164543890N00624790EA0195101988 +B1010184543886N00624772EA0194701985 +B1010204543883N00624753EA0194601983 +B1010224543879N00624734EA0194401981 +B1010244543875N00624716EA0194201979 +B1010264543871N00624698EA0194001976 +B1010284543867N00624679EA0193901975 +B1010304543862N00624661EA0193701973 +B1010324543858N00624643EA0193501972 +B1010344543854N00624625EA0193401970 +B1010364543849N00624607EA0193201968 +B1010384543845N00624589EA0193001967 +B1010404543840N00624571EA0192901965 +B1010424543836N00624553EA0192701963 +B1010444543833N00624534EA0192501961 +B1010464543829N00624516EA0192301959 +B1010484543825N00624498EA0192001957 +B1010504543822N00624480EA0191801955 +B1010524543818N00624462EA0191601953 +B1010544543815N00624444EA0191401951 +B1010564543811N00624426EA0191201949 +B1010584543806N00624408EA0191001947 +B1011004543802N00624390EA0190901945 +B1011024543798N00624373EA0190601943 +B1011044543793N00624355EA0190401941 +B1011064543789N00624337EA0190201938 +B1011084543784N00624319EA0190001936 +B1011104543780N00624301EA0189801934 +B1011124543776N00624283EA0189501932 +B1011144543772N00624266EA0189201930 +B1011164543768N00624248EA0189001927 +B1011184543762N00624231EA0188801925 +B1011204543755N00624215EA0188701923 +B1011224543750N00624197EA0188401921 +B1011244543745N00624180EA0188201919 +B1011264543739N00624163EA0188001917 +B1011284543734N00624145EA0187801914 +B1011304543730N00624128EA0187501912 +B1011324543725N00624110EA0187301910 +B1011344543721N00624092EA0187101907 +B1011364543717N00624074EA0186901905 +B1011384543712N00624056EA0186601903 +B1011404543708N00624038EA0186401900 +B1011424543703N00624020EA0186201898 +B1011444543698N00624003EA0185901895 +B1011464543693N00623984EA0185701893 +B1011484543688N00623966EA0185501891 +B1011504543684N00623948EA0185301889 +B1011524543679N00623930EA0185001887 +B1011544543675N00623912EA0184801884 +B1011564543670N00623894EA0184601882 +B1011584543665N00623876EA0184401880 +B1012004543660N00623858EA0184201877 +B1012024543654N00623840EA0183901875 +B1012044543650N00623822EA0183701873 +B1012064543645N00623804EA0183501871 +B1012084543640N00623786EA0183301868 +B1012104543635N00623768EA0183001866 +B1012124543631N00623750EA0182801864 +B1012144543626N00623732EA0182601862 +B1012164543621N00623714EA0182401860 +B1012184543616N00623697EA0182201858 +B1012204543612N00623679EA0182001856 +B1012224543607N00623661EA0181801854 +B1012244543603N00623643EA0181601852 +B1012264543599N00623626EA0181401850 +B1012284543594N00623608EA0181201848 +B1012304543589N00623591EA0181001846 +B1012324543585N00623573EA0180801844 +B1012344543582N00623555EA0180601842 +B1012364543578N00623536EA0180401840 +B1012384543575N00623518EA0180201838 +B1012404543571N00623499EA0180101836 +B1012424543568N00623481EA0179901834 +B1012444543565N00623462EA0179701833 +B1012464543562N00623444EA0179401830 +B1012484543558N00623426EA0179301828 +B1012504543554N00623408EA0179101827 +B1012524543551N00623390EA0178901825 +B1012544543547N00623372EA0178701822 +B1012564543544N00623354EA0178501821 +B1012584543540N00623336EA0178301819 +B1013004543536N00623319EA0178101817 +B1013024543532N00623301EA0178001815 +B1013044543528N00623283EA0177801813 +B1013064543523N00623265EA0177701812 +B1013084543519N00623247EA0177501810 +B1013104543514N00623229EA0177401808 +B1013124543509N00623212EA0177201807 +B1013144543504N00623195EA0177001805 +B1013164543499N00623177EA0176701803 +B1013184543493N00623160EA0176501801 +B1013204543489N00623142EA0176301798 +B1013224543484N00623125EA0176001796 +B1013244543479N00623108EA0175901794 +B1013264543474N00623091EA0175601791 +B1013284543469N00623074EA0175401789 +B1013304543464N00623057EA0175101786 +B1013324543459N00623039EA0174901784 +B1013344543454N00623022EA0174701782 +B1013364543450N00623005EA0174501779 +B1013384543445N00622988EA0174301777 +B1013404543441N00622970EA0174001775 +B1013424543437N00622953EA0173801772 +B1013444543433N00622935EA0173601770 +B1013464543428N00622918EA0173301768 +B1013484543424N00622901EA0173101765 +B1013504543420N00622883EA0172901763 +B1013524543416N00622866EA0172701761 +B1013544543413N00622848EA0172501758 +B1013564543409N00622831EA0172301756 +B1013584543406N00622814EA0172101754 +B1014004543402N00622796EA0171901752 +B1014024543398N00622779EA0171701750 +B1014044543395N00622761EA0171501748 +B1014064543392N00622744EA0171301746 +B1014084543388N00622727EA0171001744 +B1014104543384N00622709EA0170801742 +B1014124543380N00622691EA0170601740 +B1014144543376N00622673EA0170501738 +B1014164543373N00622656EA0170201736 +B1014184543369N00622638EA0170001734 +B1014204543366N00622621EA0169801732 +B1014224543363N00622603EA0169601730 +B1014244543359N00622585EA0169401728 +B1014264543356N00622568EA0169101725 +B1014284543353N00622550EA0168901723 +B1014304543350N00622532EA0168601720 +B1014324543347N00622515EA0168501718 +B1014344543344N00622497EA0168201716 +B1014364543340N00622479EA0168001714 +B1014384543338N00622461EA0167701711 +B1014404543335N00622444EA0167501708 +B1014424543332N00622426EA0167201706 +B1014444543330N00622408EA0167001703 +B1014464543327N00622390EA0166701701 +B1014484543324N00622372EA0166501699 +B1014504543322N00622355EA0166301696 +B1014524543320N00622337EA0166001694 +B1014544543317N00622319EA0165801691 +B1014564543314N00622302EA0165601689 +B1014584543311N00622285EA0165301687 +B1015004543307N00622267EA0165201684 +B1015024543304N00622250EA0164901682 +B1015044543300N00622234EA0164701680 +B1015064543296N00622217EA0164401677 +B1015084543292N00622201EA0164101674 +B1015104543288N00622184EA0163801671 +B1015124543284N00622168EA0163601669 +B1015144543280N00622151EA0163301666 +B1015164543275N00622135EA0163001663 +B1015184543271N00622119EA0162801660 +B1015204543266N00622103EA0162401657 +B1015224543262N00622086EA0162101655 +B1015244543258N00622069EA0162301654 +B1015264543253N00622055EA0162201654 +B1015284543247N00622042EA0161901651 +B1015304543242N00622028EA0161601649 +B1015324543237N00622014EA0161501648 +B1015344543232N00622000EA0161201646 +B1015364543228N00621986EA0160701642 +B1015384543228N00621970EA0160501639 +B1015404543227N00621954EA0160201637 +B1015424543225N00621939EA0159801633 +B1015444543224N00621923EA0159501630 +B1015464543223N00621907EA0159201627 +B1015484543221N00621890EA0158901624 +B1015504543219N00621874EA0158701621 +B1015524543217N00621856EA0158501619 +B1015544543215N00621839EA0158401618 +B1015564543212N00621822EA0158201616 +B1015584543210N00621805EA0158001614 +B1016004543208N00621788EA0157801612 +B1016024543205N00621773EA0157301609 +B1016044543200N00621756EA0156901605 +B1016064543196N00621737EA0157001603 +B1016084543191N00621721EA0156901602 +B1016104543186N00621708EA0156401599 +B1016124543181N00621691EA0156001595 +B1016144543176N00621673EA0155801592 +B1016164543171N00621654EA0155801591 +B1016184543168N00621637EA0155901591 +B1016204543168N00621620EA0156001591 +B1016224543167N00621607EA0156001593 +B1016244543166N00621594EA0156301594 +B1016264543167N00621581EA0156601596 +B1016284543169N00621570EA0157001600 +B1016304543169N00621559EA0157101602 +B1016324543168N00621548EA0157201604 +B1016344543170N00621535EA0157501606 +B1016364543176N00621523EA0157701608 +B1016384543184N00621515EA0157801610 +B1016404543192N00621507EA0157801611 +B1016424543196N00621495EA0157601611 +B1016444543188N00621488EA0157601611 +B1016464543178N00621496EA0157601611 +B1016484543176N00621515EA0157901611 +B1016504543176N00621530EA0158301615 +B1016524543174N00621542EA0158501617 +B1016544543171N00621555EA0158701619 +B1016564543165N00621565EA0158801621 +B1016584543154N00621562EA0159201623 +B1017004543151N00621546EA0159301626 +B1017024543157N00621530EA0159401627 +B1017044543170N00621523EA0159501628 +B1017064543182N00621531EA0159701629 +B1017084543183N00621548EA0159801630 +B1017104543174N00621561EA0160101633 +B1017124543164N00621567EA0160401636 +B1017144543154N00621567EA0160801639 +B1017164543146N00621562EA0160901642 +B1017184543142N00621552EA0160701643 +B1017204543148N00621534EA0160501642 +B1017224543162N00621526EA0160501641 +B1017244543175N00621534EA0160701641 +B1017264543181N00621548EA0161101644 +B1017284543186N00621561EA0161401647 +B1017304543192N00621573EA0161701650 +B1017324543193N00621588EA0161801651 +B1017344543183N00621594EA0161801653 +B1017364543175N00621585EA0161901654 +B1017384543176N00621570EA0162001655 +B1017404543187N00621560EA0162501657 +B1017424543198N00621557EA0163001661 +B1017444543206N00621554EA0163201664 +B1017464543211N00621547EA0162701665 +B1017484543204N00621532EA0162401666 +B1017504543190N00621529EA0162601665 +B1017524543183N00621544EA0162701665 +B1017544543189N00621559EA0162901664 +B1017564543202N00621563EA0163301667 +B1017584543211N00621554EA0163301668 +B1018004543213N00621541EA0163401669 +B1018024543209N00621529EA0163301669 +B1018044543201N00621518EA0163301669 +B1018064543193N00621506EA0163501670 +B1018084543189N00621493EA0163401669 +B1018104543186N00621478EA0163101668 +B1018124543181N00621461EA0163001666 +B1018144543176N00621444EA0163101666 +B1018164543171N00621429EA0163201667 +B1018184543165N00621414EA0163201667 +B1018204543159N00621399EA0163201667 +B1018224543153N00621385EA0163201667 +B1018244543147N00621374EA0162901666 +B1018264543141N00621362EA0162401663 +B1018284543135N00621347EA0162201660 +B1018304543129N00621331EA0162101658 +B1018324543126N00621316EA0161801656 +B1018344543121N00621303EA0161401653 +B1018364543114N00621288EA0161101650 +B1018384543108N00621273EA0160901648 +B1018404543102N00621260EA0160701645 +B1018424543096N00621246EA0160301641 +B1018444543090N00621232EA0160201639 +B1018464543085N00621218EA0159901636 +B1018484543080N00621203EA0159601633 +B1018504543075N00621187EA0159401631 +B1018524543069N00621173EA0159301629 +B1018544543063N00621160EA0159001627 +B1018564543057N00621147EA0158601623 +B1018584543051N00621133EA0158301619 +B1019004543044N00621118EA0158101617 +B1019024543038N00621103EA0157901615 +B1019044543034N00621089EA0157401611 +B1019064543028N00621073EA0156901607 +B1019084543020N00621054EA0157301605 +B1019104543015N00621037EA0158001605 +B1019124543012N00621024EA0158401608 +B1019144543007N00621011EA0158701612 +B1019164543002N00620998EA0159401617 +B1019184542996N00620985EA0159901623 +B1019204542988N00620978EA0159901626 +B1019224542977N00620986EA0159701628 +B1019244542976N00621006EA0159801630 +B1019264542988N00621013EA0160101632 +B1019284543000N00621003EA0160401635 +B1019304543006N00620985EA0161101639 +B1019324543008N00620968EA0161701647 +B1019344543008N00620956EA0161801650 +B1019364543003N00620947EA0161601652 +B1019384542992N00620942EA0161301652 +B1019404542982N00620954EA0160901651 +B1019424542983N00620972EA0160701647 +B1019444542996N00620978EA0160501644 +B1019464543006N00620966EA0160501641 +B1019484543006N00620948EA0160501641 +B1019504542999N00620932EA0160601640 +B1019524542990N00620921EA0160801641 +B1019544542982N00620912EA0160601642 +B1019564542975N00620905EA0160001640 +B1019584542965N00620899EA0159501636 +B1020004542955N00620889EA0159101632 +B1020024542946N00620878EA0158801627 +B1020044542935N00620867EA0158901624 +B1020064542924N00620859EA0159101623 +B1020084542916N00620852EA0159101622 +B1020104542906N00620848EA0158601619 +B1020124542895N00620842EA0158501617 +B1020144542886N00620834EA0158401616 +B1020164542878N00620827EA0158201615 +B1020184542870N00620820EA0157901612 +B1020204542861N00620811EA0157801610 +B1020224542853N00620801EA0157801609 +B1020244542844N00620791EA0157901610 +B1020264542836N00620783EA0158101611 +B1020284542827N00620775EA0158301613 +B1020304542819N00620765EA0158601616 +B1020324542811N00620755EA0158901618 +B1020344542802N00620746EA0159401622 +B1020364542794N00620738EA0160001627 +B1020384542787N00620729EA0160201631 +B1020404542778N00620727EA0159901634 +B1020424542771N00620739EA0159501636 +B1020444542778N00620754EA0159201636 +B1020464542795N00620753EA0159701637 +B1020484542807N00620749EA0160201640 +B1020504542816N00620749EA0160401641 +B1020524542827N00620749EA0160901645 +B1020544542838N00620749EA0161401649 +B1020564542845N00620758EA0161201652 +B1020584542843N00620773EA0161001652 +B1021004542831N00620776EA0161301653 +B1021024542822N00620766EA0161801655 +B1021044542818N00620754EA0162201659 +B1021064542813N00620744EA0162101661 +B1021084542804N00620733EA0162401663 +B1021104542795N00620720EA0163001667 +B1021124542788N00620711EA0163201670 +B1021144542781N00620703EA0163201671 +B1021164542771N00620694EA0163401673 +B1021184542763N00620682EA0163901676 +B1021204542758N00620669EA0164001679 +B1021224542752N00620658EA0163801680 +B1021244542742N00620651EA0163701679 +B1021264542733N00620662EA0163901679 +B1021284542738N00620677EA0164401680 +B1021304542749N00620681EA0164901683 +B1021324542759N00620682EA0165101686 +B1021344542766N00620690EA0165101686 +B1021364542764N00620703EA0165301687 +B1021384542753N00620700EA0165201687 +B1021404542745N00620685EA0165501689 +B1021424542743N00620667EA0165901692 +B1021454542740N00620644EA0166401697 +B1021474542736N00620633EA0166501699 +B1021494542728N00620631EA0166401700 +B1021514542721N00620644EA0166501699 +B1021534542724N00620659EA0167101701 +B1021554542731N00620666EA0167601706 +B1021574542741N00620665EA0167701708 +B1021594542753N00620662EA0168101712 +B1022014542763N00620661EA0168301716 +B1022034542772N00620662EA0168401717 +B1022054542782N00620666EA0168401718 +B1022074542786N00620677EA0168301718 +B1022094542780N00620688EA0168201717 +B1022114542769N00620683EA0168501718 +B1022134542763N00620666EA0169101720 +B1022154542759N00620652EA0169401724 +B1022174542754N00620641EA0169501725 +B1022194542748N00620626EA0169701727 +B1022214542742N00620615EA0170101731 +B1022234542736N00620608EA0170101732 +B1022254542730N00620601EA0170101733 +B1022274542725N00620590EA0170401735 +B1022294542720N00620579EA0171001738 +B1022314542715N00620570EA0171301743 +B1022334542710N00620565EA0171301746 +B1022354542701N00620572EA0171101746 +B1022374542699N00620592EA0171201746 +B1022394542711N00620604EA0171701747 +B1022414542725N00620602EA0172301751 +B1022434542735N00620603EA0172601755 +B1022454542746N00620607EA0172501756 +B1022474542754N00620616EA0172401756 +B1022494542751N00620632EA0172501755 +B1022514542740N00620635EA0172801757 +B1022534542733N00620623EA0173001760 +B1022554542730N00620609EA0173201763 +B1022574542725N00620600EA0173301764 +B1022594542715N00620600EA0173401766 +B1023014542709N00620613EA0173401767 +B1023034542712N00620630EA0173601768 +B1023054542722N00620637EA0173801770 +B1023074542734N00620629EA0173801772 +B1023094542741N00620611EA0173901773 +B1023114542738N00620595EA0174201776 +B1023134542732N00620582EA0174601779 +B1023154542725N00620571EA0174901782 +B1023174542716N00620563EA0175401787 +B1023194542707N00620564EA0175401789 +B1023214542701N00620578EA0175001791 +B1023234542707N00620593EA0174901790 +B1023254542719N00620598EA0175101792 +B1023274542730N00620596EA0175301792 +B1023294542740N00620593EA0175401792 +B1023314542751N00620593EA0175601794 +B1023334542761N00620594EA0175901796 +B1023354542771N00620597EA0176101798 +B1023374542781N00620601EA0176301800 +B1023394542790N00620604EA0176501801 +B1023414542797N00620610EA0176601803 +B1023434542801N00620621EA0176701804 +B1023454542793N00620633EA0176901804 +B1023474542783N00620628EA0177101806 +B1023494542778N00620612EA0177501809 +B1023514542774N00620598EA0177901813 +B1023534542770N00620587EA0178001815 +B1023554542764N00620578EA0178301817 +B1023574542758N00620568EA0178701821 +B1023594542750N00620568EA0178901823 +B1024014542744N00620583EA0179101826 +B1024034542750N00620596EA0179401827 +B1024054542764N00620595EA0179801831 +B1024074542776N00620589EA0180201835 +B1024094542786N00620585EA0180201837 +B1024114542796N00620595EA0180101838 +B1024134542795N00620612EA0180101839 +B1024154542785N00620613EA0180001839 +B1024174542775N00620597EA0180401841 +B1024194542769N00620582EA0180901845 +B1024214542763N00620572EA0181201848 +B1024234542757N00620560EA0181601852 +B1024254542751N00620548EA0182201857 +B1024274542746N00620537EA0182801863 +B1024294542740N00620529EA0182801867 +B1024314542730N00620532EA0182601870 +B1024334542724N00620549EA0182701870 +B1024354542732N00620561EA0183201871 +B1024374542744N00620553EA0183501873 +B1024394542749N00620531EA0184201876 +B1024414542744N00620514EA0184701881 +B1024434542735N00620509EA0184601883 +B1024454542725N00620507EA0184301882 +B1024474542714N00620503EA0184001879 +B1024494542703N00620497EA0183801877 +B1024514542692N00620494EA0183501874 +B1024534542681N00620492EA0183401871 +B1024554542671N00620489EA0183601871 +B1024574542662N00620489EA0183801872 +B1024594542653N00620492EA0183801873 +B1025014542644N00620494EA0183801873 +B1025034542635N00620492EA0183801873 +B1025054542625N00620488EA0183901874 +B1025074542615N00620484EA0184201875 +B1025094542604N00620479EA0185101878 +B1025114542597N00620475EA0185801883 +B1025134542589N00620473EA0186101887 +B1025154542580N00620483EA0186501891 +B1025174542580N00620503EA0186601895 +B1025194542592N00620510EA0186401897 +B1025214542606N00620499EA0186901901 +B1025234542611N00620485EA0187501906 +B1025254542610N00620471EA0188101912 +B1025274542602N00620457EA0188601918 +B1025294542590N00620457EA0189001923 +B1025314542584N00620471EA0189401928 +B1025334542582N00620488EA0190101935 +B1025354542591N00620502EA0190301939 +B1025374542607N00620504EA0190601942 +B1025394542616N00620492EA0191201946 +B1025414542610N00620477EA0191801951 +B1025434542597N00620472EA0192601957 +B1025454542586N00620469EA0193101964 +B1025474542578N00620463EA0193301968 +B1025494542568N00620456EA0193701971 +B1025514542558N00620449EA0194301977 +B1025534542550N00620442EA0194701982 +B1025554542541N00620436EA0194901984 +B1025574542531N00620429EA0195001986 +B1025594542521N00620420EA0195201987 +B1026014542511N00620411EA0195301988 +B1026034542501N00620401EA0195401990 +B1026054542491N00620391EA0195601992 +B1026074542482N00620381EA0195701993 +B1026094542472N00620372EA0195601993 +B1026114542463N00620363EA0195401992 +B1026134542453N00620353EA0195101989 +B1026154542442N00620344EA0195001988 +B1026174542431N00620336EA0194801986 +B1026194542421N00620326EA0194701984 +B1026214542409N00620315EA0194801984 +B1026234542399N00620303EA0194701984 +B1026254542388N00620293EA0194801984 +B1026274542376N00620287EA0194901985 +B1026294542365N00620283EA0195101987 +B1026314542354N00620280EA0195201988 +B1026334542343N00620275EA0195201988 +B1026354542331N00620269EA0195301988 +B1026374542319N00620260EA0195401989 +B1026394542308N00620249EA0195501991 +B1026414542297N00620237EA0195601992 +B1026434542286N00620229EA0195601993 +B1026454542275N00620224EA0195701993 +B1026474542264N00620218EA0195401992 +B1026494542254N00620213EA0194901990 +B1026514542239N00620208EA0195201989 +B1026534542226N00620204EA0195501990 +B1026554542217N00620199EA0195601990 +B1026574542208N00620192EA0195701991 +B1026594542199N00620185EA0196001994 +B1027014542191N00620175EA0196201996 +B1027034542182N00620166EA0196501998 +B1027054542173N00620158EA0196702001 +B1027074542164N00620151EA0196702002 +B1027094542155N00620145EA0196602001 +B1027114542146N00620139EA0196602001 +B1027134542138N00620131EA0196502002 +B1027154542132N00620123EA0196202001 +B1027174542123N00620115EA0196302000 +B1027194542113N00620107EA0196502000 +B1027214542106N00620100EA0196502001 +B1027234542098N00620094EA0196201999 +B1027254542090N00620088EA0196201998 +B1027274542080N00620084EA0196001997 +B1027294542070N00620079EA0195801995 +B1027314542060N00620072EA0195501993 +B1027334542050N00620064EA0195301990 +B1027354542040N00620057EA0195101989 +B1027374542032N00620049EA0194701986 +B1027394542022N00620043EA0194201981 +B1027414542012N00620036EA0193701976 +B1027434542002N00620027EA0193301973 +B1027454541994N00620019EA0192801967 +B1027474541984N00620011EA0192301962 +B1027494541974N00620003EA0192001958 +B1027514541964N00619995EA0191601955 +B1027534541955N00619989EA0191201950 +B1027554541945N00619982EA0190801946 +B1027574541936N00619974EA0190401942 +B1027594541927N00619968EA0190101938 +B1028014541916N00619961EA0190201936 +B1028034541904N00619952EA0190901935 +B1028054541894N00619945EA0191401936 +B1028074541885N00619941EA0191601940 +B1028094541876N00619936EA0191601940 +B1028114541866N00619930EA0191601941 +B1028134541855N00619925EA0191701942 +B1028154541844N00619922EA0191601943 +B1028174541833N00619919EA0191401943 +B1028194541823N00619912EA0191101941 +B1028214541813N00619905EA0190601939 +B1028234541803N00619899EA0190201934 +B1028254541792N00619891EA0190201933 +B1028274541782N00619885EA0190301932 +B1028294541773N00619878EA0190301932 +B1028314541763N00619872EA0190201931 +B1028334541751N00619865EA0190601932 +B1028354541740N00619859EA0190901935 +B1028374541731N00619852EA0191101938 +B1028394541722N00619843EA0191401941 +B1028414541713N00619831EA0192201945 +B1028434541705N00619822EA0192901951 +B1028454541699N00619813EA0193201956 +B1028474541693N00619805EA0193401959 +B1028494541686N00619796EA0193801963 +B1028514541679N00619788EA0194301969 +B1028534541674N00619780EA0194601974 +B1028554541667N00619777EA0194601977 +B1028574541658N00619789EA0194801979 +B1028594541658N00619807EA0195001983 +B1029014541667N00619817EA0195301986 +B1029034541676N00619824EA0195701990 +B1029054541685N00619831EA0196001994 +B1029074541696N00619827EA0196301997 +B1029094541704N00619812EA0196702002 +B1029114541705N00619795EA0197102006 +B1029134541701N00619781EA0197302009 +B1029154541693N00619771EA0197702012 +B1029174541683N00619767EA0198202016 +B1029194541673N00619767EA0198802022 +B1029214541665N00619773EA0199402029 +B1029234541661N00619785EA0199702033 +B1029254541664N00619797EA0199602037 +B1029274541673N00619804EA0199602039 +B1029294541689N00619802EA0200102041 +B1029314541698N00619789EA0200602045 +B1029334541696N00619772EA0201002048 +B1029354541690N00619758EA0201702054 +B1029374541683N00619752EA0202202059 +B1029394541675N00619750EA0202602063 +B1029414541667N00619748EA0203102068 +B1029434541660N00619758EA0203402072 +B1029454541662N00619771EA0203602075 +B1029474541672N00619777EA0203802077 +B1029494541686N00619772EA0204302079 +B1029514541694N00619754EA0204902083 +B1029534541693N00619734EA0205402089 +B1029554541690N00619720EA0205702093 +B1029574541685N00619709EA0205802096 +B1029594541678N00619700EA0205802097 +B1030014541668N00619699EA0205802097 +B1030034541659N00619713EA0205602096 +B1030054541662N00619733EA0206102096 +B1030074541669N00619746EA0207002099 +B1030094541673N00619755EA0207702105 +B1030114541676N00619765EA0208002109 +B1030134541685N00619774EA0208302112 +B1030154541698N00619768EA0208702117 +B1030174541704N00619748EA0209302123 +B1030194541698N00619730EA0209902128 +B1030214541689N00619721EA0210602136 +B1030234541681N00619723EA0211002143 +B1030254541675N00619733EA0211402147 +B1030274541676N00619749EA0211502151 +B1030294541689N00619754EA0211902154 +B1030314541702N00619744EA0212502159 +B1030334541704N00619723EA0213002164 +B1030354541700N00619702EA0213602171 +B1030374541693N00619686EA0214002176 +B1030394541685N00619676EA0214202180 +B1030414541676N00619671EA0214402182 +B1030434541665N00619667EA0214702185 +B1030454541654N00619664EA0215002189 +B1030474541643N00619662EA0215302192 +B1030494541632N00619658EA0215502194 +B1030514541621N00619655EA0215702196 +B1030534541609N00619654EA0215802198 +B1030554541597N00619653EA0215902199 +B1030574541586N00619649EA0216102200 +B1030594541576N00619645EA0216002201 +B1031014541566N00619643EA0215802200 +B1031034541557N00619640EA0215402198 +B1031054541548N00619633EA0215102195 +B1031074541539N00619623EA0214902192 +B1031094541530N00619614EA0214602190 +B1031114541520N00619606EA0214302186 +B1031134541510N00619598EA0214002183 +B1031154541499N00619591EA0213902180 +B1031174541488N00619586EA0213602178 +B1031194541478N00619580EA0213302175 +B1031214541468N00619572EA0213002171 +B1031234541460N00619560EA0212602167 +B1031254541453N00619547EA0212102163 +B1031274541444N00619535EA0211802159 +B1031294541435N00619522EA0211602156 +B1031314541428N00619509EA0211202152 +B1031334541421N00619495EA0210802148 +B1031354541414N00619480EA0210402145 +B1031374541407N00619464EA0210102141 +B1031394541401N00619449EA0209702138 +B1031414541395N00619435EA0209302134 +B1031434541388N00619419EA0208802129 +B1031454541381N00619403EA0208602126 +B1031474541375N00619389EA0208402123 +B1031494541367N00619376EA0207802119 +B1031514541358N00619363EA0207302114 +B1031534541348N00619351EA0206802110 +B1031554541337N00619341EA0206302105 +B1031574541325N00619332EA0206002101 +B1031594541314N00619322EA0205602097 +B1032014541304N00619312EA0205202092 +B1032034541293N00619300EA0204902088 +B1032054541283N00619287EA0204802085 +B1032074541273N00619276EA0204802084 +B1032094541263N00619266EA0204702084 +B1032114541253N00619255EA0204702084 +B1032134541245N00619243EA0204602083 +B1032154541237N00619231EA0204402082 +B1032174541228N00619220EA0204002079 +B1032194541219N00619207EA0203602075 +B1032214541211N00619192EA0203102070 +B1032234541203N00619177EA0202602065 +B1032254541196N00619161EA0201902060 +B1032274541189N00619146EA0201302053 +B1032294541181N00619131EA0200802047 +B1032314541172N00619115EA0200502042 +B1032334541164N00619101EA0200102039 +B1032354541155N00619088EA0199702035 +B1032374541146N00619074EA0199302031 +B1032394541136N00619059EA0199202028 +B1032414541128N00619044EA0199202027 +B1032434541121N00619029EA0199002024 +B1032454541114N00619011EA0198902023 +B1032474541108N00618993EA0198902023 +B1032494541101N00618977EA0198602021 +B1032514541094N00618962EA0198302018 +B1032534541085N00618945EA0197902015 +B1032554541077N00618929EA0197502012 +B1032574541069N00618914EA0197102008 +B1032594541061N00618897EA0196602003 +B1033014541053N00618881EA0196302000 +B1033034541045N00618865EA0195901996 +B1033054541038N00618849EA0195501992 +B1033074541031N00618831EA0195301988 +B1033094541025N00618814EA0195101986 +B1033114541018N00618797EA0194901984 +B1033134541011N00618779EA0194601981 +B1033154541005N00618761EA0194501980 +B1033174541000N00618744EA0194301979 +B1033194540995N00618726EA0194101977 +B1033214540989N00618709EA0193801975 +B1033234540983N00618692EA0193601973 +B1033254540978N00618675EA0193501971 +B1033274540972N00618657EA0193301970 +B1033294540966N00618641EA0193201968 +B1033314540961N00618624EA0192901966 +B1033334540955N00618608EA0192601963 +B1033354540949N00618591EA0192401961 +B1033374540942N00618574EA0192201960 +B1033394540936N00618558EA0192001958 +B1033414540930N00618540EA0192001956 +B1033434540925N00618523EA0191901955 +B1033454540922N00618506EA0191601953 +B1033474540919N00618490EA0191401951 +B1033494540913N00618473EA0191201948 +B1033514540908N00618456EA0191001947 +B1033534540902N00618440EA0190901945 +B1033554540896N00618424EA0190601943 +B1033574540889N00618407EA0190501941 +B1033594540884N00618391EA0190301940 +B1034014540879N00618375EA0190101938 +B1034034540874N00618358EA0189801935 +B1034054540870N00618340EA0189601933 +B1034074540864N00618323EA0189501931 +B1034094540859N00618307EA0189301929 +B1034114540853N00618290EA0189101928 +B1034134540848N00618274EA0188901926 +B1034154540842N00618258EA0188601923 +B1034174540837N00618241EA0188501920 +B1034194540831N00618224EA0188301919 +B1034214540825N00618208EA0188001916 +B1034234540820N00618191EA0187701913 +B1034254540814N00618174EA0187401910 +B1034274540808N00618156EA0187201908 +B1034294540802N00618139EA0187001906 +B1034314540796N00618122EA0186601903 +B1034334540790N00618105EA0186501900 +B1034354540784N00618088EA0186101898 +B1034374540779N00618071EA0185901896 +B1034394540773N00618054EA0185701893 +B1034414540767N00618037EA0185301890 +B1034434540762N00618020EA0185001887 +B1034454540756N00618003EA0184701884 +B1034474540750N00617986EA0184401880 +B1034494540743N00617970EA0184201877 +B1034514540737N00617953EA0183901875 +B1034534540731N00617936EA0183601872 +B1034554540725N00617919EA0183301869 +B1034574540719N00617902EA0183001866 +B1034594540713N00617885EA0182701863 +B1035014540706N00617868EA0182401860 +B1035034540700N00617851EA0182101857 +B1035054540694N00617834EA0181801854 +B1035074540688N00617818EA0181601851 +B1035094540682N00617800EA0181301848 +B1035114540676N00617783EA0181001845 +B1035134540671N00617765EA0180501841 +B1035154540665N00617747EA0180201838 +B1035174540660N00617730EA0179901834 +B1035194540654N00617713EA0179401831 +B1035214540649N00617698EA0178901827 +B1035234540644N00617682EA0178301821 +B1035254540639N00617664EA0177801815 +B1035274540634N00617648EA0177501811 +B1035294540630N00617631EA0177101806 +B1035314540625N00617613EA0177101803 +B1035334540619N00617596EA0177301802 +B1035354540615N00617580EA0177501803 +B1035374540610N00617564EA0177701805 +B1035394540604N00617548EA0178101808 +B1035414540599N00617531EA0178501813 +B1035434540596N00617516EA0178601815 +B1035454540592N00617499EA0178801817 +B1035474540586N00617481EA0179201821 +B1035494540581N00617461EA0179701825 +B1035514540578N00617442EA0180301830 +B1035534540575N00617423EA0181101837 +B1035554540571N00617409EA0181801845 +B1035574540566N00617396EA0182001850 +B1035594540553N00617391EA0182101855 +B1036014540540N00617400EA0182501859 +B1036034540538N00617416EA0182801863 +B1036054540546N00617427EA0183401869 +B1036074540552N00617433EA0184001875 +B1036094540560N00617427EA0184301880 +B1036114540564N00617409EA0184701884 +B1036134540559N00617391EA0185201888 +B1036154540548N00617381EA0185701893 +B1036174540536N00617382EA0185701896 +B1036194540527N00617396EA0185601897 +B1036214540530N00617412EA0185801897 +B1036234540541N00617419EA0186201899 +B1036254540552N00617413EA0186801904 +B1036274540558N00617401EA0187201908 +B1036294540561N00617385EA0187601912 +B1036314540563N00617369EA0188001916 +B1036334540565N00617354EA0188301919 +B1036354540566N00617339EA0188501922 +B1036374540569N00617327EA0188001923 +B1036394540572N00617314EA0187301923 +B1036414540574N00617295EA0186901920 +B1036434540574N00617277EA0186601915 +B1036454540572N00617258EA0186301911 +B1036474540569N00617239EA0186101907 +B1036494540567N00617220EA0186501905 +B1036514540563N00617201EA0187001904 +B1036534540562N00617188EA0187301905 +B1036554540563N00617174EA0187501908 +B1036574540564N00617161EA0187701911 +B1036594540564N00617150EA0187601911 +B1037014540560N00617136EA0187701912 +B1037034540555N00617117EA0188501915 +B1037054540553N00617100EA0189101920 +B1037074540549N00617087EA0189501925 +B1037094540539N00617082EA0190001929 +B1037114540531N00617089EA0190401935 +B1037134540532N00617103EA0190501939 +B1037154540544N00617107EA0191001943 +B1037174540556N00617095EA0191301948 +B1037194540563N00617079EA0191701952 +B1037214540569N00617060EA0191901955 +B1037234540565N00617042EA0191701957 +B1037254540556N00617030EA0191701957 +B1037274540544N00617030EA0191801957 +B1037294540536N00617042EA0192001957 +B1037314540535N00617058EA0192401959 +B1037334540538N00617072EA0193001964 +B1037354540540N00617083EA0193601969 +B1037374540542N00617095EA0194501976 +B1037394540544N00617106EA0195201984 +B1037414540546N00617115EA0195301990 +B1037434540559N00617118EA0195101990 +B1037454540571N00617107EA0195301993 +B1037474540569N00617088EA0195501994 +B1037494540562N00617072EA0196501997 +B1037514540558N00617057EA0197302003 +B1037534540553N00617046EA0197602008 +B1037554540543N00617041EA0197702012 +B1037574540533N00617052EA0197902014 +B1037594540538N00617068EA0198602018 +B1038014540553N00617065EA0199102023 +B1038034540560N00617043EA0199802028 +B1038054540552N00617026EA0200402035 +B1038074540541N00617026EA0200602039 +B1038094540535N00617039EA0200902043 +B1038114540543N00617051EA0201302047 +B1038134540557N00617047EA0201902051 +B1038154540563N00617025EA0202502056 +B1038174540557N00617006EA0203102062 +B1038194540547N00617004EA0203302066 +B1038214540541N00617016EA0203502069 +B1038234540547N00617030EA0203902072 +B1038254540561N00617025EA0204602077 +B1038274540571N00617011EA0205402083 +B1038294540579N00616999EA0206002090 +B1038314540582N00616984EA0206102095 +B1038334540576N00616968EA0206002099 +B1038354540564N00616969EA0206002102 +B1038374540557N00616983EA0206202102 +B1038394540560N00617000EA0206502104 +B1038414540570N00617009EA0207202108 +B1038434540580N00617008EA0207602113 +B1038454540588N00616997EA0207902116 +B1038474540588N00616979EA0208202119 +B1038494540579N00616968EA0208502122 +B1038514540568N00616971EA0208702125 +B1038534540565N00616988EA0209102128 +B1038554540573N00617000EA0209302130 +B1038574540586N00616997EA0209602133 +B1038594540595N00616984EA0210002136 +B1039014540596N00616966EA0210402141 +B1039034540590N00616953EA0210702144 +B1039054540581N00616948EA0211102148 +B1039074540572N00616956EA0211402150 +B1039094540568N00616971EA0211702153 +B1039114540575N00616980EA0212002156 +B1039134540588N00616975EA0212202159 +B1039154540594N00616955EA0212502162 +B1039174540592N00616937EA0212802166 +B1039194540587N00616923EA0213102170 +B1039214540579N00616911EA0213302172 +B1039234540570N00616900EA0213502174 +B1039254540560N00616890EA0213602176 +B1039274540552N00616881EA0213502176 +B1039294540541N00616872EA0213502176 +B1039314540532N00616863EA0213602176 +B1039334540524N00616853EA0213402176 +B1039354540517N00616844EA0213102174 +B1039374540508N00616833EA0212602170 +B1039394540500N00616822EA0212102165 +B1039414540489N00616812EA0211802161 +B1039434540479N00616803EA0211402157 +B1039454540469N00616793EA0210902153 +B1039474540458N00616785EA0210502148 +B1039494540446N00616778EA0210202144 +B1039514540435N00616770EA0210002141 +B1039534540425N00616762EA0209602138 +B1039554540414N00616751EA0209202133 +B1039574540402N00616739EA0209002130 +B1039594540390N00616731EA0208802128 +B1040014540379N00616723EA0208302124 +B1040034540368N00616712EA0207802119 +B1040054540356N00616699EA0207502116 +B1040074540346N00616686EA0207102112 +B1040094540338N00616672EA0206602108 +B1040114540329N00616659EA0206202103 +B1040134540318N00616647EA0205802099 +B1040154540307N00616636EA0205602096 +B1040174540296N00616626EA0205302093 +B1040194540286N00616616EA0205002090 +B1040214540275N00616606EA0204502085 +B1040234540264N00616594EA0204202082 +B1040254540254N00616583EA0203902079 +B1040274540245N00616571EA0203502075 +B1040294540235N00616560EA0203102071 +B1040314540224N00616549EA0202702067 +B1040334540215N00616537EA0202402063 +B1040354540205N00616525EA0202002059 +B1040374540195N00616514EA0201702056 +B1040394540185N00616503EA0201402052 +B1040414540175N00616493EA0201102049 +B1040434540165N00616483EA0200702046 +B1040454540155N00616474EA0200402043 +B1040474540145N00616464EA0200002039 +B1040494540135N00616452EA0199702036 +B1040514540126N00616440EA0199502033 +B1040534540116N00616428EA0199202030 +B1040554540106N00616417EA0198902027 +B1040574540096N00616405EA0198602024 +B1040594540086N00616395EA0198402022 +B1041014540076N00616384EA0198002019 +B1041034540065N00616373EA0197702015 +B1041054540055N00616363EA0197402012 +B1041074540044N00616352EA0197002009 +B1041094540034N00616342EA0196602006 +B1041114540023N00616332EA0196402002 +B1041134540012N00616323EA0196102000 +B1041154540002N00616313EA0195701996 +B1041174539992N00616302EA0195401992 +B1041194539982N00616290EA0195101989 +B1041214539972N00616279EA0194901987 +B1041234539962N00616268EA0194601983 +B1041254539952N00616258EA0194301980 +B1041274539942N00616248EA0194001977 +B1041294539932N00616237EA0193801975 +B1041314539922N00616226EA0193501972 +B1041334539911N00616216EA0193201969 +B1041354539901N00616206EA0192901966 +B1041374539890N00616197EA0192601963 +B1041394539880N00616187EA0192301960 +B1041414539869N00616178EA0192001957 +B1041434539859N00616168EA0191801954 +B1041454539849N00616158EA0191501952 +B1041474539839N00616149EA0191101948 +B1041494539828N00616140EA0190901946 +B1041514539818N00616131EA0190501943 +B1041534539807N00616123EA0190201940 +B1041554539797N00616115EA0189901937 +B1041574539786N00616107EA0189601934 +B1041594539776N00616098EA0189401931 +B1042014539765N00616090EA0189101928 +B1042034539755N00616082EA0188801925 +B1042054539744N00616073EA0188501922 +B1042074539734N00616065EA0188201919 +B1042094539723N00616057EA0187901917 +B1042114539712N00616049EA0187701914 +B1042134539701N00616042EA0187401911 +B1042154539691N00616035EA0187101908 +B1042174539680N00616027EA0186901906 +B1042194539669N00616019EA0186601903 +B1042214539658N00616012EA0186401900 +B1042234539648N00616004EA0186101898 +B1042254539636N00615998EA0185701894 +B1042274539625N00615991EA0185401892 +B1042294539615N00615983EA0185201889 +B1042314539604N00615975EA0184901885 +B1042334539593N00615967EA0184601882 +B1042354539583N00615959EA0184401880 +B1042374539572N00615952EA0184301879 +B1042394539562N00615945EA0183901876 +B1042414539551N00615939EA0183601873 +B1042434539539N00615931EA0183401870 +B1042454539527N00615923EA0183301869 +B1042474539516N00615917EA0183301869 +B1042494539505N00615910EA0183301868 +B1042514539494N00615903EA0183401869 +B1042534539483N00615896EA0183501870 +B1042554539473N00615890EA0183601871 +B1042574539461N00615884EA0183701872 +B1042594539450N00615879EA0183701873 +B1043014539439N00615874EA0183801873 +B1043034539429N00615870EA0183501872 +B1043054539418N00615868EA0183201870 +B1043074539405N00615863EA0183101868 +B1043094539394N00615859EA0183201867 +B1043114539385N00615857EA0183601869 +B1043134539377N00615854EA0184101873 +B1043154539369N00615851EA0184401877 +B1043174539363N00615852EA0184301879 +B1043194539356N00615857EA0184301879 +B1043214539346N00615860EA0184401880 +B1043234539335N00615859EA0184601882 +B1043254539326N00615860EA0184801884 +B1043274539317N00615860EA0184901886 +B1043294539308N00615859EA0185001887 +B1043314539299N00615858EA0185001888 +B1043334539289N00615861EA0185001888 +B1043354539279N00615862EA0184901888 +B1043374539267N00615863EA0184801887 +B1043394539256N00615864EA0184801886 +B1043414539244N00615863EA0184801886 +B1043434539234N00615860EA0184701886 +B1043454539225N00615858EA0184401885 +B1043474539213N00615855EA0184201882 +B1043494539202N00615850EA0184101881 +B1043514539191N00615847EA0183601878 +B1043534539181N00615845EA0183301874 +B1043554539170N00615842EA0183201873 +B1043574539161N00615841EA0182901870 +B1043594539153N00615840EA0182501867 +B1044014539143N00615838EA0182201862 +B1044034539132N00615837EA0182001859 +B1044054539121N00615837EA0181901857 +B1044074539110N00615835EA0182101857 +B1044094539100N00615831EA0182401858 +B1044114539091N00615827EA0182701861 +B1044134539081N00615824EA0183001863 +B1044154539072N00615819EA0183301866 +B1044174539062N00615814EA0183501869 +B1044194539052N00615810EA0183501870 +B1044214539042N00615807EA0183601872 +B1044234539032N00615802EA0183601872 +B1044254539023N00615796EA0183401871 +B1044274539011N00615788EA0183401871 +B1044294539000N00615781EA0183501871 +B1044314538990N00615777EA0183401871 +B1044334538980N00615772EA0183101869 +B1044354538970N00615766EA0182701866 +B1044374538961N00615757EA0182501863 +B1044394538952N00615747EA0182701861 +B1044414538947N00615736EA0183001861 +B1044434538941N00615725EA0183101863 +B1044454538933N00615714EA0183401865 +B1044474538927N00615703EA0183801869 +B1044494538921N00615692EA0183901870 +B1044514538913N00615680EA0183801870 +B1044534538906N00615672EA0183801871 +B1044554538898N00615668EA0183701871 +B1044574538890N00615663EA0183301870 +B1044594538882N00615654EA0183001867 +B1045014538872N00615645EA0182801865 +B1045034538863N00615636EA0182601863 +B1045054538854N00615627EA0182301860 +B1045074538845N00615616EA0182001857 +B1045094538836N00615606EA0181801855 +B1045114538827N00615597EA0181601853 +B1045134538818N00615588EA0181101849 +B1045154538808N00615578EA0180701845 +B1045174538797N00615569EA0180201841 +B1045194538787N00615560EA0179701836 +B1045214538776N00615551EA0179201830 +B1045234538766N00615541EA0178701826 +B1045254538755N00615533EA0178401822 +B1045274538744N00615526EA0178101818 +B1045294538732N00615519EA0177801815 +B1045314538721N00615511EA0177701813 +B1045334538710N00615505EA0177401811 +B1045354538699N00615499EA0177101808 +B1045374538688N00615492EA0176901805 +B1045394538676N00615487EA0176701803 +B1045414538665N00615481EA0176401800 +B1045434538653N00615474EA0176101797 +B1045454538642N00615469EA0175801794 +B1045474538630N00615465EA0175401791 +B1045494538617N00615461EA0175101787 +B1045514538606N00615456EA0174901785 +B1045534538594N00615451EA0174601782 +B1045554538582N00615445EA0174401780 +B1045574538571N00615439EA0174201778 +B1045594538560N00615431EA0174001776 +B1046014538548N00615426EA0173901774 +B1046034538536N00615421EA0173901774 +B1046054538525N00615414EA0173801773 +B1046074538513N00615409EA0173501771 +B1046094538500N00615405EA0173401769 +B1046114538488N00615400EA0173301768 +B1046134538476N00615397EA0173101767 +B1046154538464N00615393EA0173001765 +B1046174538452N00615389EA0173001765 +B1046194538440N00615386EA0172801763 +B1046214538428N00615383EA0172701762 +B1046234538417N00615380EA0172601761 +B1046254538405N00615376EA0172401760 +B1046274538393N00615374EA0172301758 +B1046294538381N00615374EA0172101757 +B1046314538369N00615373EA0171801754 +B1046334538356N00615370EA0171601752 +B1046354538344N00615367EA0171601751 +B1046374538333N00615366EA0171401749 +B1046394538321N00615365EA0171201747 +B1046414538308N00615366EA0171201745 +B1046434538295N00615365EA0171501745 +B1046454538284N00615364EA0171701746 +B1046474538273N00615362EA0172001749 +B1046494538261N00615358EA0172501753 +B1046514538250N00615354EA0173101758 +B1046534538241N00615351EA0173401763 +B1046554538236N00615360EA0173401766 +B1046574538237N00615373EA0173401769 +B1046594538248N00615376EA0173701771 +B1047014538257N00615367EA0174301774 +B1047034538264N00615352EA0174801778 +B1047054538270N00615339EA0175101783 +B1047074538279N00615333EA0175201785 +B1047094538286N00615340EA0175201786 +B1047114538281N00615351EA0175201787 +B1047134538268N00615352EA0175501788 +B1047154538257N00615343EA0176101792 +B1047174538248N00615334EA0176601798 +B1047194538242N00615322EA0176801801 +B1047214538237N00615304EA0177201804 +B1047234538230N00615290EA0177401808 +B1047254538221N00615293EA0177501809 +B1047274538218N00615306EA0177701811 +B1047294538224N00615315EA0178201815 +B1047314538234N00615309EA0178501819 +B1047334538240N00615293EA0178701821 +B1047354538238N00615272EA0179001824 +B1047374538228N00615260EA0179001827 +B1047394538215N00615267EA0179201828 +B1047414538214N00615282EA0179401830 +B1047434538224N00615290EA0179801832 +B1047454538234N00615287EA0180201837 +B1047474538242N00615280EA0180601840 +B1047494538250N00615273EA0180801844 +B1047514538257N00615268EA0180801846 +B1047534538266N00615266EA0180801846 +B1047554538274N00615274EA0180801846 +B1047574538273N00615288EA0181001846 +B1047594538265N00615298EA0181301848 +B1048014538254N00615301EA0181601851 +B1048034538243N00615302EA0182201855 +B1048054538233N00615301EA0182601859 +B1048074538224N00615302EA0182601863 +B1048094538214N00615303EA0182401864 +B1048114538204N00615301EA0182301863 +B1048134538194N00615298EA0182201862 +B1048154538185N00615294EA0182201861 +B1048174538177N00615290EA0182301861 +B1048194538168N00615285EA0182501862 +B1048214538158N00615281EA0182801864 +B1048234538148N00615278EA0183001866 +B1048254538137N00615274EA0183101867 +B1048274538125N00615271EA0182901867 +B1048294538113N00615267EA0182701866 +B1048314538102N00615262EA0182601864 +B1048334538092N00615257EA0182701864 +B1048354538082N00615251EA0182901865 +B1048374538072N00615246EA0183201867 +B1048394538061N00615240EA0183601870 +B1048414538051N00615234EA0183901874 +B1048434538041N00615232EA0183701875 +B1048454538030N00615233EA0183201875 +B1048474538017N00615234EA0182901872 +B1048494538005N00615235EA0182801870 +B1048514537995N00615237EA0182501867 +B1048534537984N00615238EA0182101863 +B1048554537972N00615238EA0181801860 +B1048574537961N00615238EA0181601857 +B1048594537951N00615239EA0181401854 +B1049014537938N00615240EA0181401852 +B1049034537925N00615241EA0181401851 +B1049054537915N00615245EA0181301850 +B1049074537903N00615248EA0181301849 +B1049094537892N00615251EA0181401849 +B1049114537881N00615253EA0181701851 +B1049134537872N00615252EA0182401854 +B1049154537865N00615251EA0182901859 +B1049174537857N00615252EA0183201863 +B1049194537848N00615254EA0183401866 +B1049214537839N00615248EA0183601868 +B1049234537830N00615239EA0183901871 +B1049254537821N00615229EA0184001873 +B1049274537813N00615218EA0184201874 +B1049294537805N00615205EA0184301876 +B1049314537799N00615193EA0184101876 +B1049334537792N00615184EA0183601876 +B1049354537783N00615177EA0183201873 +B1049374537771N00615171EA0183101871 +B1049394537760N00615165EA0183101870 +B1049414537751N00615159EA0182801868 +B1049434537742N00615155EA0182801865 +B1049454537732N00615149EA0183301864 +B1049474537725N00615142EA0183401864 +B1049494537717N00615134EA0183201864 +B1049514537707N00615129EA0183301863 +B1049534537697N00615130EA0183901865 +B1049554537688N00615130EA0184601872 +B1049574537680N00615129EA0185101878 +B1049594537672N00615129EA0185701884 +B1050014537665N00615136EA0186001889 +B1050034537663N00615153EA0186401894 +B1050054537673N00615163EA0186401897 +B1050074537685N00615154EA0186301899 +B1050094537690N00615138EA0186401899 +B1050114537686N00615123EA0186601901 +B1050134537678N00615113EA0187101904 +B1050154537670N00615110EA0187801909 +B1050174537662N00615108EA0188101914 +B1050194537653N00615108EA0188201917 +B1050214537644N00615118EA0188301918 +B1050234537643N00615135EA0188601920 +B1050254537653N00615142EA0188901922 +B1050274537663N00615131EA0188901925 +B1050294537666N00615110EA0189201927 +B1050314537661N00615091EA0190001930 +B1050334537654N00615084EA0190601936 +B1050354537646N00615081EA0190901942 +B1050374537637N00615083EA0191101945 +B1050394537631N00615097EA0191101946 +B1050414537634N00615117EA0191301947 +B1050434537647N00615118EA0191701950 +B1050454537654N00615101EA0191901952 +B1050474537652N00615080EA0192501955 +B1050494537647N00615064EA0193101962 +B1050514537643N00615054EA0193601968 +B1050534537636N00615046EA0193801972 +B1050554537625N00615048EA0193601974 +B1050574537618N00615063EA0193401974 +B1050594537623N00615078EA0193301973 +B1051014537636N00615080EA0193501973 +B1051034537645N00615070EA0193901976 +B1051054537650N00615056EA0194201979 +B1051074537652N00615040EA0194701982 +B1051094537651N00615024EA0195201987 +B1051114537651N00615009EA0195201990 +B1051134537648N00614996EA0194901992 +B1051154537641N00614983EA0194701991 +B1051174537634N00614968EA0194501989 +B1051194537628N00614953EA0194101986 +B1051214537621N00614937EA0193501982 +B1051234537614N00614919EA0193201978 +B1051254537608N00614902EA0193001975 +B1051274537601N00614887EA0192601971 +B1051294537595N00614871EA0192301967 +B1051314537588N00614857EA0192701964 +B1051334537580N00614846EA0193101968 +B1051354537575N00614835EA0193001969 +B1051374537569N00614821EA0192701968 +B1051394537562N00614803EA0193001969 +B1051414537558N00614786EA0193401972 +B1051434537556N00614772EA0193601974 +B1051454537551N00614759EA0193501975 +B1051474537545N00614745EA0193801976 +B1051494537540N00614732EA0194001978 +B1051514537534N00614720EA0194201980 +B1051534537528N00614709EA0194401982 +B1051554537523N00614697EA0194401984 +B1051574537517N00614687EA0194201983 +B1051594537510N00614677EA0193701982 +B1052014537502N00614664EA0193501979 +B1052034537494N00614650EA0193401978 +B1052054537486N00614638EA0192901975 +B1052074537477N00614626EA0192601970 +B1052094537468N00614612EA0192401968 +B1052114537461N00614598EA0192401966 +B1052134537456N00614584EA0192301965 +B1052154537451N00614570EA0192201963 +B1052174537446N00614558EA0192501962 +B1052194537438N00614548EA0192901963 +B1052214537431N00614538EA0193301967 +B1052234537427N00614528EA0193401968 +B1052254537421N00614519EA0193401968 +B1052274537416N00614510EA0193501969 +B1052294537410N00614500EA0193801971 +B1052314537403N00614489EA0194401974 +B1052334537397N00614479EA0195101979 +B1052354537391N00614471EA0195501984 +B1052374537383N00614466EA0195601987 +B1052394537374N00614474EA0195701990 +B1052414537372N00614487EA0195901992 +B1052434537376N00614498EA0196101994 +B1052454537387N00614505EA0196501996 +B1052474537403N00614500EA0197302001 +B1052494537413N00614490EA0198202007 +B1052514537417N00614478EA0198602014 +B1052534537414N00614463EA0198802018 +B1052554537402N00614457EA0199002023 +B1052574537394N00614465EA0199202026 +B1052594537392N00614480EA0199502029 +B1053014537392N00614492EA0200102035 +B1053034537390N00614500EA0200302039 +B1053054537392N00614512EA0200102042 +B1053074537404N00614524EA0200302044 +B1053094537418N00614523EA0200602047 +B1053114537428N00614513EA0200902049 +B1053134537436N00614500EA0201302052 +B1053154537440N00614484EA0201702055 +B1053174537439N00614470EA0202202060 +B1053194537433N00614460EA0202602063 +B1053214537425N00614453EA0203102069 +B1053234537418N00614448EA0203302073 +B1053254537411N00614452EA0203102075 +B1053274537408N00614467EA0203102074 +B1053294537416N00614479EA0203302074 +B1053314537427N00614485EA0203702077 +B1053334537440N00614480EA0203902079 +B1053354537450N00614464EA0204102080 +B1053374537452N00614446EA0204702083 +B1053394537449N00614432EA0205202088 +B1053414537442N00614421EA0205502092 +B1053434537434N00614417EA0205702095 +B1053454537427N00614426EA0205502096 +B1053474537427N00614442EA0205502096 +B1053494537436N00614451EA0205702096 +B1053514537450N00614454EA0206302098 +B1053534537461N00614449EA0206602102 +B1053554537469N00614435EA0207002105 +B1053574537471N00614416EA0207302108 +B1053594537463N00614402EA0207602111 +B1054014537456N00614392EA0208102117 +B1054034537456N00614376EA0208002120 +B1054054537462N00614358EA0208102121 +B1054074537474N00614345EA0208402123 +B1054094537487N00614343EA0208902126 +B1054114537497N00614348EA0209602131 +B1054134537503N00614358EA0210002135 +B1054154537507N00614369EA0210302139 +B1054174537509N00614379EA0210502143 +B1054194537506N00614388EA0210402145 +B1054214537494N00614394EA0210602146 +B1054234537485N00614387EA0211002148 +B1054254537478N00614379EA0211002150 +B1054274537471N00614373EA0211102149 +B1054294537464N00614366EA0211102150 +B1054314537456N00614357EA0211102150 +B1054334537449N00614350EA0211002149 +B1054354537439N00614342EA0210802147 +B1054374537430N00614332EA0210702146 +B1054394537421N00614321EA0210702146 +B1054414537413N00614311EA0210602145 +B1054434537406N00614298EA0210502143 +B1054454537399N00614286EA0210402142 +B1054474537390N00614278EA0210102140 +B1054494537382N00614269EA0209802137 +B1054514537372N00614259EA0209702135 +B1054534537362N00614248EA0209802134 +B1054554537353N00614238EA0209602133 +B1054574537345N00614230EA0209102131 +B1054594537336N00614219EA0208602127 +B1055014537326N00614207EA0208202123 +B1055034537317N00614195EA0207902119 +B1055054537307N00614183EA0207502115 +B1055074537296N00614172EA0207202112 +B1055094537286N00614161EA0206902109 +B1055114537275N00614152EA0206502106 +B1055134537264N00614143EA0206202102 +B1055154537253N00614132EA0206002099 +B1055174537242N00614121EA0205702097 +B1055194537232N00614111EA0205402093 +B1055214537222N00614100EA0205202091 +B1055234537212N00614088EA0205102089 +B1055254537204N00614076EA0204902088 +B1055274537195N00614063EA0204802086 +B1055294537185N00614049EA0204702085 +B1055314537176N00614038EA0204602084 +B1055334537166N00614027EA0204502083 +B1055354537156N00614016EA0204302081 +B1055374537146N00614004EA0204402081 +B1055394537135N00613992EA0204602082 +B1055414537127N00613982EA0204602083 +B1055434537118N00613972EA0204402082 +B1055454537108N00613962EA0204102080 +B1055474537098N00613951EA0203802077 +B1055494537088N00613940EA0203502074 +B1055514537076N00613930EA0203202071 +B1055534537066N00613922EA0203002069 +B1055554537055N00613914EA0202702066 +B1055574537046N00613904EA0202402063 +B1055594537036N00613893EA0202502062 +B1056014537028N00613882EA0203202062 +B1056034537020N00613871EA0203802064 +B1056054537013N00613860EA0204302069 +B1056074537008N00613851EA0204502073 +B1056094537001N00613843EA0204402074 +B1056114536992N00613834EA0204402075 +B1056134536985N00613823EA0204402076 +B1056154536978N00613809EA0204302076 +B1056174536970N00613796EA0204302076 +B1056194536963N00613783EA0204402077 +B1056214536957N00613770EA0204402077 +B1056234536952N00613757EA0204302077 +B1056254536946N00613743EA0204402078 +B1056274536940N00613728EA0204602079 +B1056294536934N00613715EA0204702081 +B1056314536928N00613704EA0204602081 +B1056334536921N00613693EA0204202080 +B1056354536915N00613679EA0204102078 +B1056374536910N00613666EA0204202078 +B1056394536905N00613654EA0204202078 +B1056414536899N00613644EA0204002076 +B1056434536892N00613633EA0204102076 +B1056454536884N00613624EA0204302077 +B1056474536876N00613615EA0204602079 +B1056494536869N00613606EA0205002083 +B1056514536862N00613596EA0205302086 +B1056534536855N00613586EA0205702090 +B1056554536849N00613575EA0205902093 +B1056574536842N00613563EA0206102095 +B1056594536835N00613551EA0206402097 +B1057014536829N00613541EA0206602101 +B1057034536823N00613533EA0206602103 +B1057054536815N00613522EA0206202103 +B1057074536807N00613511EA0206002101 +B1057094536799N00613499EA0205702098 +B1057114536791N00613486EA0205402095 +B1057134536783N00613473EA0205202093 +B1057154536775N00613460EA0204902090 +B1057174536768N00613447EA0204502086 +B1057194536760N00613432EA0204202082 +B1057214536753N00613416EA0204202080 +B1057234536747N00613401EA0204102080 +B1057254536740N00613387EA0204102079 +B1057274536732N00613374EA0204202079 +B1057294536725N00613361EA0204302080 +B1057314536719N00613345EA0204702082 +B1057334536715N00613329EA0205202086 +B1057354536710N00613316EA0205302088 +B1057374536704N00613302EA0205102090 +B1057394536698N00613287EA0204702089 +B1057414536692N00613275EA0204602087 +B1057434536685N00613265EA0204402085 +B1057454536679N00613253EA0204002082 +B1057474536672N00613239EA0203902079 +B1057494536666N00613224EA0203902077 +B1057514536661N00613208EA0203902077 +B1057534536654N00613192EA0204202078 +B1057554536647N00613175EA0204802080 +B1057574536641N00613160EA0205502085 +B1057594536633N00613147EA0206302091 +B1058014536623N00613141EA0207002098 +B1058034536613N00613151EA0207402104 +B1058054536610N00613168EA0207202108 +B1058074536620N00613179EA0206602110 +B1058094536634N00613172EA0206502112 +B1058114536641N00613150EA0206802113 +B1058134536640N00613124EA0207702117 +B1058154536639N00613105EA0208802125 +B1058174536637N00613091EA0209502132 +B1058194536632N00613081EA0209902137 +B1058214536621N00613084EA0210402141 +B1058234536615N00613101EA0211202147 +B1058254536617N00613111EA0212002155 +B1058274536627N00613112EA0212502160 +B1058294536637N00613103EA0213102167 +B1058314536639N00613085EA0213602172 +B1058334536631N00613070EA0214502179 +B1058354536622N00613070EA0215102186 +B1058374536614N00613077EA0215802193 +B1058394536609N00613087EA0216302200 +B1058414536608N00613099EA0216602204 +B1058434536613N00613114EA0216502208 +B1058454536624N00613122EA0216602209 +B1058474536638N00613118EA0216602209 +B1058494536648N00613102EA0216802209 +B1058514536653N00613079EA0217302213 +B1058534536657N00613059EA0217902217 +B1058554536659N00613041EA0218402221 +B1058574536661N00613020EA0219302227 +B1058594536661N00613004EA0220102234 +B1059014536659N00612994EA0220402239 +B1059034536654N00612984EA0220802243 +B1059054536645N00612978EA0221202248 +B1059074536635N00612986EA0221602252 +B1059094536632N00613001EA0222202257 +B1059114536639N00613009EA0222602262 +B1059134536652N00612995EA0223102267 +B1059154536655N00612973EA0224002273 +B1059174536648N00612958EA0224502279 +B1059194536638N00612953EA0225102286 +B1059214536628N00612953EA0225402291 +B1059234536623N00612964EA0225802295 +B1059254536627N00612976EA0226302300 +B1059274536638N00612975EA0226702304 +B1059294536647N00612957EA0227302309 +B1059314536647N00612935EA0227702313 +B1059334536641N00612917EA0228202318 +B1059354536631N00612908EA0228702323 +B1059374536622N00612908EA0229102326 +B1059394536619N00612919EA0229202330 +B1059414536630N00612927EA0229402331 +B1059434536643N00612922EA0230002336 +B1059454536650N00612906EA0230302340 +B1059474536654N00612887EA0230702343 +B1059494536655N00612869EA0230802346 +B1059514536655N00612851EA0230902348 +B1059534536652N00612833EA0231102350 +B1059554536649N00612817EA0231102351 +B1059574536645N00612804EA0230802351 +B1059594536639N00612792EA0230602350 +B1100014536635N00612777EA0230302347 +B1100034536631N00612762EA0230002344 +B1100054536626N00612747EA0229502341 +B1100074536619N00612732EA0229302338 +B1100094536614N00612718EA0228702334 +B1100114536607N00612704EA0228102328 +B1100134536600N00612689EA0227702323 +B1100154536593N00612674EA0227202318 +B1100174536587N00612659EA0226702312 +B1100194536580N00612643EA0226302307 +B1100214536575N00612625EA0226102303 +B1100234536570N00612608EA0226102301 +B1100254536563N00612595EA0226102301 +B1100274536558N00612582EA0226002299 +B1100294536551N00612569EA0226302300 +B1100314536544N00612558EA0226802301 +B1100334536538N00612550EA0227102305 +B1100354536531N00612543EA0227302307 +B1100374536522N00612535EA0227902311 +B1100394536514N00612528EA0228502316 +B1100414536506N00612521EA0228902321 +B1100434536499N00612513EA0229302326 +B1100454536491N00612507EA0229902332 +B1100474536482N00612508EA0230202336 +B1100494536476N00612520EA0230202340 +B1100514536479N00612539EA0230402343 +B1100534536491N00612543EA0230602346 +B1100554536504N00612533EA0230902349 +B1100574536512N00612518EA0231602354 +B1100594536516N00612498EA0232202360 +B1101014536516N00612481EA0232602365 +B1101034536513N00612465EA0232902368 +B1101054536504N00612455EA0232902371 +B1101074536493N00612451EA0232902372 +B1101094536483N00612448EA0232902372 +B1101114536474N00612445EA0233002372 +B1101134536466N00612438EA0233102373 +B1101154536459N00612430EA0233402375 +B1101174536453N00612422EA0233502377 +B1101194536447N00612411EA0233402377 +B1101214536442N00612397EA0233502377 +B1101234536435N00612384EA0233902379 +B1101254536429N00612372EA0234002382 +B1101274536423N00612363EA0233502382 +B1101294536415N00612352EA0233002380 +B1101314536408N00612339EA0232902378 +B1101334536401N00612326EA0232702376 +B1101354536394N00612315EA0232402372 +B1101374536387N00612303EA0232102369 +B1101394536380N00612291EA0232202367 +B1101414536373N00612278EA0232702366 +B1101434536367N00612268EA0233202368 +B1101454536360N00612260EA0233502372 +B1101474536353N00612252EA0233602373 +B1101494536345N00612241EA0233602374 +B1101514536336N00612229EA0234102376 +B1101534536329N00612217EA0234702381 +B1101554536324N00612204EA0235002386 +B1101574536319N00612191EA0235102388 +B1101594536312N00612180EA0235302390 +B1102014536305N00612169EA0235402392 +B1102034536298N00612158EA0235202392 +B1102054536289N00612146EA0234802391 +B1102074536280N00612136EA0234602388 +B1102094536271N00612124EA0234502387 +B1102114536264N00612110EA0234302385 +B1102134536256N00612094EA0234202384 +B1102154536249N00612080EA0234302384 +B1102174536242N00612067EA0234302384 +B1102194536236N00612054EA0234102383 +B1102214536228N00612042EA0233802381 +B1102234536220N00612029EA0233702379 +B1102254536211N00612015EA0233702378 +B1102274536203N00612002EA0233702378 +B1102294536196N00611989EA0233702378 +B1102314536188N00611976EA0233702378 +B1102334536181N00611963EA0233502377 +B1102354536174N00611950EA0233302374 +B1102374536166N00611935EA0233002372 +B1102394536158N00611921EA0232902370 +B1102414536149N00611907EA0232702368 +B1102434536139N00611894EA0232502367 +B1102454536129N00611882EA0232302365 +B1102474536118N00611869EA0232102363 +B1102494536108N00611855EA0232002361 +B1102514536099N00611840EA0231702359 +B1102534536090N00611824EA0231502356 +B1102554536081N00611806EA0231302354 +B1102574536073N00611790EA0231002351 +B1102594536066N00611772EA0230602348 +B1103014536058N00611754EA0230502345 +B1103034536051N00611737EA0230402344 +B1103054536045N00611720EA0230202342 +B1103074536038N00611704EA0230002340 +B1103094536030N00611686EA0229902338 +B1103114536022N00611670EA0229902338 +B1103134536014N00611654EA0229802337 +B1103154536006N00611637EA0229602335 +B1103174536000N00611619EA0229402334 +B1103194535993N00611601EA0229202332 +B1103214535986N00611582EA0228802329 +B1103234535980N00611562EA0228702326 +B1103254535974N00611541EA0228602325 +B1103274535969N00611521EA0228502324 +B1103294535964N00611501EA0228202322 +B1103314535959N00611481EA0227902319 +B1103334535952N00611460EA0227802317 +B1103354535947N00611440EA0227602315 +B1103374535941N00611421EA0227502313 +B1103394535935N00611401EA0227402312 +B1103414535929N00611382EA0227202311 +B1103434535924N00611363EA0227102310 +B1103454535918N00611344EA0227002309 +B1103474535912N00611324EA0227102308 +B1103494535905N00611305EA0227302309 +B1103514535900N00611288EA0227302310 +B1103534535894N00611272EA0227102309 +B1103554535888N00611255EA0226902308 +B1103574535882N00611238EA0226802306 +B1103594535876N00611220EA0226702305 +B1104014535870N00611202EA0226502303 +B1104034535865N00611183EA0226302302 +B1104054535860N00611165EA0226202300 +B1104074535855N00611147EA0226002298 +B1104094535851N00611129EA0225802297 +B1104114535847N00611110EA0225602295 +B1104134535842N00611093EA0225402293 +B1104154535837N00611074EA0225202291 +B1104174535832N00611056EA0224902288 +B1104194535828N00611038EA0224602285 +B1104214535824N00611020EA0224202281 +B1104234535819N00611001EA0224002278 +B1104254535815N00610982EA0223902277 +B1104274535812N00610964EA0223602275 +B1104294535809N00610947EA0223202272 +B1104314535805N00610927EA0223002269 +B1104334535802N00610909EA0222902267 +B1104354535799N00610892EA0222602265 +B1104374535794N00610874EA0222502262 +B1104394535790N00610856EA0222502261 +B1104414535787N00610840EA0222502261 +B1104434535785N00610825EA0222202260 +B1104454535781N00610810EA0221702257 +B1104474535775N00610793EA0221502254 +B1104494535769N00610775EA0221602252 +B1104514535765N00610758EA0221702253 +B1104534535762N00610743EA0221602253 +B1104554535758N00610727EA0221702253 +B1104574535756N00610711EA0221702253 +B1104594535754N00610697EA0221602253 +B1105014535750N00610680EA0221602253 +B1105034535746N00610663EA0221702253 +B1105054535741N00610648EA0221602254 +B1105074535735N00610635EA0221602253 +B1105094535729N00610620EA0221502252 +B1105114535724N00610603EA0221502252 +B1105134535718N00610588EA0221602253 +B1105154535713N00610572EA0221602253 +B1105174535707N00610554EA0221602253 +B1105194535701N00610536EA0221802254 +B1105214535694N00610518EA0222002256 +B1105234535687N00610502EA0222002257 +B1105254535680N00610485EA0222002257 +B1105274535673N00610467EA0222102258 +B1105294535667N00610450EA0222302259 +B1105314535661N00610433EA0222502261 +B1105334535654N00610416EA0222802263 +B1105354535646N00610399EA0223302267 +B1105374535638N00610385EA0223602271 +B1105394535630N00610371EA0223802273 +B1105414535622N00610358EA0223902275 +B1105434535616N00610343EA0223802275 +B1105454535611N00610327EA0223702275 +B1105474535606N00610312EA0223602274 +B1105494535601N00610295EA0223302271 +B1105514535596N00610277EA0223202269 +B1105534535591N00610259EA0223002268 +B1105554535588N00610240EA0222902266 +B1105574535585N00610221EA0222602264 +B1105594535581N00610204EA0222302262 +B1106014535577N00610187EA0222002258 +B1106034535573N00610170EA0221502254 +B1106054535568N00610153EA0221102250 +B1106074535563N00610135EA0220602245 +B1106094535559N00610117EA0220302241 +B1106114535554N00610100EA0219902237 +B1106134535550N00610082EA0219402232 +B1106154535546N00610064EA0219102228 +B1106174535543N00610046EA0218802225 +B1106194535538N00610028EA0218502222 +B1106214535533N00610011EA0218102218 +B1106234535526N00609994EA0217902215 +B1106254535519N00609978EA0217702213 +B1106274535514N00609960EA0217502211 +B1106294535507N00609943EA0217202208 +B1106314535499N00609927EA0216802205 +B1106334535493N00609907EA0216402201 +B1106354535488N00609885EA0216202198 +B1106374535483N00609863EA0216002196 +B1106394535480N00609842EA0215802194 +B1106414535477N00609821EA0215402191 +B1106434535475N00609800EA0215202188 +B1106454535472N00609780EA0214902185 +B1106474535468N00609760EA0214302181 +B1106494535464N00609739EA0214002177 +B1106514535461N00609716EA0213902174 +B1106534535457N00609695EA0213602172 +B1106554535455N00609675EA0213002169 +B1106574535455N00609653EA0212502163 +B1106594535455N00609630EA0212202160 +B1107014535457N00609608EA0211902156 +B1107034535457N00609586EA0211502153 +B1107054535456N00609563EA0211202149 +B1107074535456N00609540EA0210802146 +B1107094535457N00609517EA0210502142 +B1107114535456N00609493EA0210102139 +B1107134535456N00609469EA0210002136 +B1107154535457N00609445EA0209902135 +B1107174535457N00609423EA0209602133 +B1107194535459N00609400EA0209202129 +B1107214535462N00609376EA0208902126 +B1107234535465N00609352EA0208802124 +B1107254535468N00609330EA0208602122 +B1107274535471N00609308EA0208402119 +B1107294535474N00609285EA0208202117 +B1107314535477N00609261EA0208102116 +B1107334535478N00609238EA0207902115 +B1107354535479N00609216EA0207702113 +B1107374535480N00609193EA0207402110 +B1107394535479N00609170EA0207202108 +B1107414535479N00609148EA0207102107 +B1107434535477N00609126EA0206802105 +B1107454535475N00609104EA0206602102 +B1107474535475N00609081EA0206402100 +B1107494535477N00609061EA0206302098 +B1107514535477N00609043EA0205802095 +B1107534535477N00609023EA0205302091 +B1107554535474N00609002EA0205002087 +B1107574535472N00608982EA0204802085 +B1107594535470N00608963EA0204502082 +B1108014535468N00608942EA0204302079 +B1108034535465N00608922EA0204002076 +B1108054535463N00608902EA0203702073 +B1108074535463N00608881EA0203502071 +B1108094535461N00608861EA0203302069 +B1108114535458N00608842EA0203102067 +B1108134535457N00608823EA0202902064 +B1108154535455N00608803EA0202702062 +B1108174535453N00608783EA0202402060 +B1108194535451N00608764EA0202102058 +B1108214535449N00608744EA0201902055 +B1108234535447N00608724EA0201702053 +B1108254535445N00608705EA0201502051 +B1108274535444N00608686EA0201202048 +B1108294535442N00608665EA0200902045 +B1108314535440N00608644EA0200802044 +B1108334535438N00608626EA0200602042 +B1108354535437N00608606EA0200302039 +B1108374535436N00608585EA0200202037 +B1108394535435N00608565EA0200102035 +B1108414535434N00608546EA0199902034 +B1108434535433N00608527EA0199602031 +B1108454535433N00608507EA0199502030 +B1108474535433N00608488EA0199402028 +B1108494535433N00608469EA0199202026 +B1108514535434N00608450EA0199002025 +B1108534535434N00608431EA0198802024 +B1108554535432N00608412EA0198602022 +B1108574535429N00608393EA0198402020 +B1108594535427N00608374EA0198202018 +B1109014535424N00608356EA0197902015 +B1109034535419N00608338EA0197602012 +B1109054535413N00608320EA0197302009 +B1109074535406N00608303EA0197102006 +B1109094535401N00608284EA0196702002 +B1109114535395N00608265EA0196502000 +B1109134535389N00608247EA0196301998 +B1109154535383N00608230EA0195801994 +B1109174535378N00608211EA0195401990 +B1109194535372N00608190EA0195201987 +B1109214535367N00608170EA0195101984 +B1109234535364N00608150EA0194801982 +B1109254535360N00608129EA0194601979 +B1109274535355N00608107EA0194401978 +B1109294535351N00608088EA0194401977 +B1109314535347N00608068EA0194101975 +B1109334535345N00608048EA0194001973 +B1109354535345N00608027EA0193801972 +B1109374535346N00608007EA0193601970 +B1109394535348N00607987EA0193201967 +B1109414535349N00607966EA0192901963 +B1109434535352N00607945EA0192601961 +B1109454535354N00607925EA0192501959 +B1109474535356N00607906EA0192301957 +B1109494535357N00607886EA0192101955 +B1109514535358N00607867EA0191801952 +B1109534535359N00607847EA0191401949 +B1109554535361N00607827EA0191101945 +B1109574535362N00607807EA0190701941 +B1109594535362N00607787EA0190301938 +B1110014535364N00607767EA0190001934 +B1110034535364N00607748EA0189701932 +B1110054535365N00607728EA0189501929 +B1110074535365N00607709EA0189201926 +B1110094535365N00607689EA0189001924 +B1110114535364N00607669EA0188901922 +B1110134535365N00607651EA0188601920 +B1110154535366N00607633EA0188201916 +B1110174535367N00607614EA0188001914 +B1110194535368N00607595EA0187801912 +B1110214535369N00607578EA0187401909 +B1110234535370N00607559EA0187101905 +B1110254535372N00607539EA0186901902 +B1110274535372N00607521EA0186601900 +B1110294535372N00607503EA0186301897 +B1110314535372N00607485EA0186001894 +B1110334535372N00607467EA0185701891 +B1110354535373N00607448EA0185401888 +B1110374535373N00607430EA0185001885 +B1110394535372N00607412EA0184601881 +B1110414535370N00607393EA0184101876 +B1110434535368N00607374EA0183701872 +B1110454535367N00607355EA0183401868 +B1110474535366N00607338EA0183001865 +B1110494535365N00607320EA0182701861 +B1110514535365N00607301EA0182401857 +B1110534535367N00607283EA0182201855 +B1110554535368N00607266EA0182001853 +B1110574535370N00607249EA0181701850 +B1110594535372N00607232EA0181401847 +B1111014535375N00607215EA0181201845 +B1111034535377N00607198EA0180901842 +B1111054535379N00607181EA0180601840 +B1111074535382N00607164EA0180301837 +B1111094535386N00607147EA0180001834 +B1111114535388N00607130EA0179701831 +B1111134535389N00607113EA0179301827 +B1111154535391N00607095EA0179001823 +B1111174535395N00607078EA0178801821 +B1111194535399N00607063EA0178701819 +B1111214535402N00607050EA0178401816 +B1111234535405N00607035EA0178001813 +B1111254535409N00607019EA0177601809 +B1111274535410N00607003EA0177201806 +B1111294535412N00606986EA0176901802 +B1111314535416N00606971EA0176401798 +B1111334535420N00606955EA0176001793 +B1111354535423N00606937EA0175601790 +B1111374535427N00606920EA0175301786 +B1111394535432N00606904EA0174901782 +B1111414535438N00606888EA0174601779 +B1111434535444N00606873EA0174301776 +B1111454535450N00606857EA0173901772 +B1111474535455N00606840EA0173601769 +B1111494535460N00606824EA0173401766 +B1111514535466N00606809EA0173101764 +B1111534535470N00606793EA0172801761 +B1111554535475N00606776EA0172501758 +B1111574535480N00606761EA0172101755 +B1111594535486N00606747EA0171601750 +B1112014535494N00606733EA0171101746 +B1112034535503N00606720EA0170701741 +B1112054535513N00606710EA0170301738 +B1112074535524N00606705EA0169901733 +B1112094535535N00606699EA0169401728 +B1112114535547N00606689EA0169101724 +B1112134535557N00606677EA0168801721 +B1112154535567N00606666EA0168501717 +B1112174535578N00606657EA0168301715 +B1112194535588N00606652EA0167901711 +B1112214535599N00606656EA0167401706 +B1112234535608N00606665EA0167001702 +B1112254535615N00606675EA0166501698 +B1112274535623N00606687EA0166101693 +B1112294535631N00606700EA0166201689 +B1112314535639N00606711EA0166401688 +B1112334535645N00606721EA0166301688 +B1112354535653N00606728EA0166001686 +B1112374535662N00606736EA0165501683 +B1112394535672N00606745EA0165201680 +B1112414535682N00606755EA0165201679 +B1112434535691N00606765EA0165301679 +B1112454535700N00606773EA0165401679 +B1112474535710N00606783EA0165601680 +B1112494535719N00606794EA0166001683 +B1112514535728N00606805EA0166801687 +B1112534535737N00606814EA0167401694 +B1112554535745N00606822EA0168101700 +B1112574535753N00606827EA0168801707 +B1112594535760N00606825EA0168901713 +B1113014535760N00606810EA0169001718 +B1113034535750N00606799EA0169401723 +B1113054535736N00606807EA0169901727 +B1113074535732N00606826EA0170801735 +B1113094535733N00606843EA0171601744 +B1113114535738N00606857EA0172201751 +B1113134535746N00606869EA0172901757 +B1113154535757N00606877EA0173601764 +B1113174535767N00606872EA0174301771 +B1113194535768N00606861EA0174801777 +B1113214535761N00606850EA0175501784 +B1113234535751N00606846EA0176101791 +B1113254535741N00606859EA0176501797 +B1113274535737N00606882EA0177301803 +B1113294535744N00606899EA0178101810 +B1113314535755N00606906EA0178701816 +B1113334535766N00606904EA0179201823 +B1113354535772N00606893EA0179501828 +B1113374535771N00606879EA0180001833 +B1113394535763N00606872EA0180401838 +B1113414535753N00606870EA0181001843 +B1113434535742N00606875EA0181501847 +B1113454535736N00606894EA0182101852 +B1113474535738N00606914EA0183001858 +B1113494535748N00606926EA0183801866 +B1113514535756N00606933EA0184301874 +B1113534535760N00606946EA0184401879 +B1113554535753N00606962EA0184501884 +B1113574535741N00606966EA0184501886 +B1113594535731N00606956EA0184301887 +B1114014535722N00606943EA0184201885 +B1114034535712N00606935EA0184001883 +B1114054535702N00606926EA0183701879 +B1114074535699N00606906EA0183301875 +B1114094535706N00606887EA0183601872 +B1114114535717N00606875EA0184401873 +B1114134535725N00606866EA0185201876 +B1114154535730N00606856EA0185601880 +B1114174535735N00606846EA0186001885 +B1114194535743N00606844EA0186601890 +B1114214535751N00606849EA0187201897 +B1114234535754N00606859EA0187301901 +B1114254535752N00606878EA0187401904 +B1114274535742N00606894EA0188101909 +B1114294535730N00606895EA0188701914 +B1114314535723N00606881EA0189301920 +B1114334535726N00606865EA0189701926 +B1114354535737N00606860EA0189801930 +B1114374535750N00606870EA0190301933 +B1114394535757N00606884EA0191101939 +B1114414535761N00606896EA0191601945 +B1114434535767N00606910EA0192201950 +B1114454535766N00606928EA0193101956 +B1114474535755N00606937EA0193501963 +B1114494535745N00606927EA0194101968 +B1114514535746N00606908EA0195001976 +B1114534535757N00606903EA0195801984 +B1114554535768N00606914EA0196501992 +B1114574535769N00606933EA0197301999 +B1114594535760N00606944EA0197802007 +B1115014535749N00606941EA0198202011 +B1115034535739N00606933EA0198702015 +B1115054535732N00606920EA0199302021 +B1115074535728N00606904EA0199902027 +B1115094535731N00606892EA0200502033 +B1115114535737N00606887EA0200702038 +B1115134535745N00606887EA0201002041 +B1115154535755N00606895EA0201502045 +B1115174535756N00606911EA0202002050 +B1115194535749N00606925EA0202802056 +B1115214535739N00606933EA0203602064 +B1115234535730N00606940EA0204002070 +B1115254535718N00606938EA0204302075 +B1115274535708N00606923EA0204702080 +B1115294535705N00606906EA0205102084 +B1115314535708N00606891EA0205202086 +B1115334535717N00606878EA0205302088 +B1115354535731N00606877EA0205402088 +B1115374535744N00606883EA0205802091 +B1115394535751N00606894EA0206002093 +B1115414535754N00606911EA0206102094 +B1115434535751N00606932EA0207002097 +B1115454535745N00606949EA0208002103 +B1115474535742N00606961EA0208502109 +B1115494535739N00606970EA0208602114 +B1115514535733N00606978EA0208302116 +B1115534535723N00606983EA0208402117 +B1115554535713N00606981EA0208302117 +B1115574535703N00606973EA0208302116 +B1115594535693N00606964EA0208802117 +B1116014535686N00606955EA0209302120 +B1116034535679N00606946EA0209602124 +B1116054535672N00606936EA0209802127 +B1116074535668N00606918EA0209702128 +B1116094535676N00606902EA0209902129 +B1116114535688N00606900EA0210202131 +B1116134535696N00606910EA0210402134 +B1116154535699N00606926EA0210902137 +B1116174535696N00606941EA0211602142 +B1116194535690N00606954EA0211902148 +B1116214535682N00606961EA0211902151 +B1116234535667N00606958EA0211802153 +B1116254535655N00606947EA0212202155 +B1116274535651N00606932EA0212402157 +B1116294535655N00606920EA0212502159 +B1116314535663N00606916EA0212402158 +B1116334535673N00606922EA0212702158 +B1116354535683N00606926EA0213102161 +B1116374535691N00606925EA0213302164 +B1116394535700N00606922EA0213202166 +B1116414535710N00606916EA0213502167 +B1116434535719N00606908EA0214002171 +B1116454535725N00606900EA0214302175 +B1116474535730N00606890EA0214402177 +B1116494535734N00606877EA0214802180 +B1116514535735N00606862EA0215202184 +B1116534535738N00606853EA0215402188 +B1116554535747N00606848EA0215302190 +B1116574535758N00606856EA0215502191 +B1116594535761N00606873EA0215702193 +B1117014535758N00606889EA0216002196 +B1117034535749N00606898EA0216402199 +B1117054535738N00606896EA0216902202 +B1117074535730N00606885EA0217202206 +B1117094535729N00606870EA0217602209 +B1117114535733N00606859EA0217902213 +B1117134535741N00606853EA0218202216 +B1117154535751N00606855EA0218402219 +B1117174535761N00606863EA0218502221 +B1117194535767N00606881EA0218502222 +B1117214535762N00606900EA0218702223 +B1117234535752N00606912EA0219102226 +B1117254535741N00606921EA0219702231 +B1117274535732N00606928EA0219902235 +B1117294535723N00606932EA0219802236 +B1117314535712N00606933EA0219702237 +B1117334535701N00606926EA0219802236 +B1117354535693N00606913EA0220102238 +B1117374535689N00606900EA0220402241 +B1117394535688N00606888EA0220602242 +B1117414535685N00606875EA0220802244 +B1117434535682N00606862EA0221002246 +B1117454535682N00606849EA0221102248 +B1117474535687N00606838EA0221302249 +B1117494535694N00606830EA0221402251 +B1117514535702N00606825EA0221402251 +B1117534535711N00606820EA0221302251 +B1117554535722N00606821EA0221402251 +B1117574535732N00606831EA0221502252 +B1117594535741N00606842EA0221602253 +B1118014535749N00606854EA0221602254 +B1118034535756N00606867EA0221602254 +B1118054535759N00606883EA0221702254 +B1118074535753N00606900EA0222102255 +B1118094535746N00606910EA0222302257 +B1118114535741N00606920EA0222202256 +B1118134535736N00606929EA0222102256 +B1118154535727N00606931EA0221702254 +B1118174535715N00606927EA0221602252 +B1118194535703N00606922EA0221802252 +B1118214535691N00606919EA0222002254 +B1118234535680N00606916EA0222202256 +B1118254535671N00606910EA0222302257 +B1118274535661N00606903EA0222402258 +B1118294535651N00606896EA0222702261 +B1118314535641N00606889EA0222802263 +B1118334535631N00606882EA0222902264 +B1118354535620N00606874EA0222902264 +B1118374535612N00606864EA0223002265 +B1118394535606N00606851EA0222902265 +B1118414535600N00606836EA0223002265 +B1118434535595N00606821EA0223002265 +B1118454535590N00606804EA0223002265 +B1118474535585N00606787EA0222802264 +B1118494535582N00606770EA0222502263 +B1118514535578N00606751EA0222102260 +B1118534535574N00606731EA0221802256 +B1118554535569N00606711EA0221502253 +B1118574535565N00606691EA0221302250 +B1118594535562N00606670EA0220902247 +B1119014535557N00606650EA0220602244 +B1119034535551N00606631EA0220402242 +B1119054535546N00606613EA0220002238 +B1119074535539N00606594EA0219602234 +B1119094535532N00606574EA0219102230 +B1119114535523N00606556EA0218902227 +B1119134535513N00606540EA0218502223 +B1119154535503N00606523EA0218002218 +B1119174535495N00606504EA0217502213 +B1119194535486N00606486EA0217102209 +B1119214535476N00606469EA0216502203 +B1119234535466N00606451EA0216002197 +B1119254535455N00606432EA0215902193 +B1119274535447N00606415EA0215802191 +B1119294535438N00606400EA0215502188 +B1119314535428N00606383EA0215202184 +B1119334535417N00606367EA0215002183 +B1119354535406N00606354EA0214702181 +B1119374535395N00606340EA0214502178 +B1119394535385N00606325EA0214202175 +B1119414535374N00606309EA0213902172 +B1119434535363N00606292EA0213702169 +B1119454535353N00606275EA0213502168 +B1119474535344N00606259EA0213302166 +B1119494535334N00606242EA0213102163 +B1119514535325N00606226EA0212802161 +B1119534535316N00606207EA0212602159 +B1119554535308N00606188EA0212602158 +B1119574535300N00606170EA0212402157 +B1119594535292N00606152EA0212202155 +B1120014535283N00606133EA0212202154 +B1120034535274N00606116EA0212002153 +B1120054535266N00606100EA0211802151 +B1120074535257N00606082EA0211602149 +B1120094535247N00606064EA0211502148 +B1120114535237N00606047EA0211302147 +B1120134535229N00606030EA0211102145 +B1120154535220N00606012EA0210902142 +B1120174535210N00605995EA0210802141 +B1120194535200N00605979EA0210602140 +B1120214535191N00605962EA0210502138 +B1120234535182N00605946EA0210202137 +B1120254535172N00605929EA0210002136 +B1120274535162N00605914EA0209602134 +B1120294535152N00605898EA0209502133 +B1120314535142N00605883EA0209302131 +B1120334535132N00605868EA0209002129 +B1120354535122N00605852EA0208902127 +B1120374535112N00605837EA0208802126 +B1120394535102N00605823EA0208602124 +B1120414535092N00605807EA0208402122 +B1120434535082N00605791EA0208202120 +B1120454535073N00605775EA0208102118 +B1120474535064N00605759EA0207902116 +B1120494535055N00605743EA0207702114 +B1120514535045N00605727EA0207402111 +B1120534535036N00605710EA0207202109 +B1120554535028N00605693EA0207102107 +B1120574535019N00605676EA0206902105 +B1120594535011N00605659EA0206602103 +B1121014535002N00605643EA0206402100 +B1121034534993N00605626EA0206102097 +B1121054534984N00605609EA0205802094 +B1121074534975N00605592EA0205402091 +B1121094534966N00605574EA0205602088 +B1121114534957N00605556EA0205002085 +B1121134534947N00605539EA0204802083 +B1121154534938N00605522EA0204602080 +B1121174534930N00605504EA0204302078 +B1121194534920N00605488EA0204102075 +B1121214534911N00605472EA0203802073 +B1121234534901N00605456EA0203602071 +B1121254534890N00605442EA0203302069 +B1121274534878N00605428EA0203202066 +B1121294534868N00605414EA0202902064 +B1121314534856N00605401EA0202702062 +B1121334534844N00605388EA0202602060 +B1121354534833N00605375EA0202402059 +B1121374534822N00605361EA0202202057 +B1121394534811N00605347EA0202002055 +B1121414534800N00605334EA0201902053 +B1121434534789N00605322EA0201702052 +B1121454534778N00605310EA0201402050 +B1121474534768N00605294EA0201502048 +B1121494534758N00605278EA0201402048 +B1121514534749N00605263EA0201402047 +B1121534534738N00605250EA0201202046 +B1121554534727N00605238EA0201102045 +B1121574534715N00605227EA0201102045 +B1121594534705N00605215EA0201102044 +B1122014534694N00605202EA0200902042 +B1122034534683N00605188EA0200902041 +B1122054534673N00605175EA0200702041 +B1122074534663N00605161EA0200502039 +B1122094534653N00605147EA0200302037 +B1122114534644N00605131EA0200102035 +B1122134534635N00605115EA0199802033 +B1122154534626N00605098EA0199602031 +B1122174534617N00605080EA0199402029 +B1122194534608N00605063EA0199302028 +B1122214534599N00605046EA0199302027 +B1122234534591N00605030EA0199202026 +B1122254534581N00605014EA0199002025 +B1122274534571N00605000EA0199002024 +B1122294534561N00604986EA0198802022 +B1122314534551N00604971EA0198702021 +B1122334534541N00604956EA0198602019 +B1122354534531N00604942EA0198402018 +B1122374534521N00604928EA0198402017 +B1122394534511N00604914EA0198302016 +B1122414534501N00604900EA0198202015 +B1122434534490N00604886EA0198102014 +B1122454534479N00604873EA0198002013 +B1122474534469N00604860EA0197802011 +B1122494534459N00604847EA0197602009 +B1122514534448N00604835EA0197302007 +B1122534534437N00604823EA0197102005 +B1122554534426N00604811EA0196902003 +B1122574534416N00604799EA0196702000 +B1122594534405N00604786EA0196601998 +B1123014534395N00604773EA0196301996 +B1123034534385N00604760EA0196001994 +B1123054534375N00604748EA0195701991 +B1123074534364N00604734EA0195401987 +B1123094534354N00604721EA0195201985 +B1123114534344N00604708EA0195001983 +B1123134534336N00604694EA0194801981 +B1123154534327N00604680EA0194601979 +B1123174534318N00604667EA0194401977 +B1123194534308N00604658EA0194101974 +B1123214534298N00604647EA0193801971 +B1123234534287N00604635EA0193601969 +B1123254534277N00604623EA0193401967 +B1123274534268N00604609EA0193301965 +B1123294534259N00604594EA0193101963 +B1123314534249N00604581EA0192901961 +B1123334534239N00604568EA0192701958 +B1123354534228N00604556EA0192501957 +B1123374534218N00604544EA0192301955 +B1123394534208N00604534EA0191901952 +B1123414534198N00604523EA0191601948 +B1123434534187N00604509EA0191301946 +B1123454534178N00604493EA0191101943 +B1123474534170N00604478EA0190901941 +B1123494534160N00604464EA0190801939 +B1123514534152N00604451EA0190501937 +B1123534534143N00604438EA0190301934 +B1123554534133N00604427EA0190101932 +B1123574534123N00604415EA0189901931 +B1123594534114N00604404EA0189701929 +B1124014534105N00604394EA0189501926 +B1124034534096N00604383EA0189501924 +B1124054534085N00604373EA0189801924 +B1124074534076N00604366EA0189901925 +B1124094534070N00604359EA0189701924 +B1124114534062N00604352EA0189701923 +B1124134534052N00604344EA0190001925 +B1124154534045N00604332EA0190401928 +B1124174534040N00604321EA0190601932 +B1124194534033N00604311EA0190501933 +B1124214534023N00604301EA0190101933 +B1124234534013N00604290EA0190101932 +B1124254534004N00604281EA0190401934 +B1124274533996N00604273EA0190801938 +B1124294533990N00604265EA0191001941 +B1124314533984N00604255EA0191201943 +B1124334533976N00604246EA0191401945 +B1124354533967N00604242EA0191601947 +B1124374533960N00604253EA0191601948 +B1124394533962N00604268EA0191701949 +B1124414533972N00604275EA0192001951 +B1124434533981N00604269EA0192101953 +B1124454533987N00604255EA0192401955 +B1124474533989N00604241EA0193001959 +B1124494533988N00604229EA0193301962 +B1124514533985N00604217EA0193601964 +B1124534533977N00604208EA0194001967 +B1124554533968N00604219EA0194301971 +B1124574533971N00604236EA0194401974 +B1124594533984N00604235EA0194401975 +B1125014533994N00604223EA0194801978 +B1125034533997N00604209EA0195101981 +B1125054533996N00604193EA0195501984 +B1125074533991N00604176EA0196201989 +B1125094533984N00604163EA0196801996 +B1125114533976N00604153EA0197302001 +B1125134533966N00604147EA0197702006 +B1125154533954N00604157EA0198102009 +B1125174533954N00604173EA0198502013 +B1125194533965N00604181EA0199102017 +B1125214533975N00604181EA0199802023 +B1125234533981N00604170EA0200202028 +B1125254533983N00604155EA0200902034 +B1125274533979N00604139EA0201302040 +B1125294533969N00604131EA0201502044 +B1125314533958N00604131EA0201902048 +B1125334533950N00604139EA0202302054 +B1125354533951N00604151EA0202602057 +B1125374533958N00604159EA0203102062 +B1125394533968N00604159EA0203602067 +B1125414533975N00604147EA0204102072 +B1125434533978N00604132EA0204602078 +B1125454533975N00604118EA0204702082 +B1125474533969N00604104EA0204902084 +B1125494533959N00604095EA0205202087 +B1125514533949N00604094EA0205402089 +B1125534533941N00604100EA0205502091 +B1125554533938N00604109EA0205602093 +B1125574533940N00604120EA0205802095 +B1125594533944N00604127EA0205902096 +B1126014533951N00604133EA0206302098 +B1126034533957N00604141EA0206902102 +B1126054533960N00604149EA0207202106 +B1126074533963N00604155EA0207102108 +B1126094533971N00604157EA0206702109 +B1126114533982N00604150EA0206602109 +B1126134533987N00604132EA0206602107 +B1126154533986N00604114EA0206902107 +B1126174533983N00604098EA0207102108 +B1126194533977N00604084EA0207202109 +B1126214533967N00604074EA0207102108 +B1126234533956N00604069EA0207302110 +B1126254533946N00604068EA0207402111 +B1126274533936N00604071EA0207402110 +B1126294533925N00604074EA0207302109 +B1126314533914N00604061EA0207102108 +B1126334533913N00604041EA0207102106 +B1126354533921N00604028EA0207002104 +B1126374533931N00604022EA0207002103 +B1126394533941N00604024EA0206902102 +B1126414533948N00604035EA0206802100 +B1126434533952N00604048EA0206902100 +B1126454533956N00604060EA0206802100 +B1126474533958N00604071EA0206802099 +B1126494533960N00604083EA0207002100 +B1126514533961N00604093EA0207102101 +B1126534533963N00604102EA0207302103 +B1126554533964N00604111EA0207302104 +B1126574533966N00604121EA0207302104 +B1126594533967N00604130EA0207102103 +B1127014533964N00604139EA0206802102 +B1127034533956N00604147EA0206602099 +B1127054533943N00604148EA0206502097 +B1127074533930N00604143EA0206402096 +B1127094533917N00604135EA0206302094 +B1127114533903N00604127EA0206202092 +B1127134533890N00604118EA0206002091 +B1127154533877N00604108EA0205702088 +B1127174533864N00604099EA0205402084 +B1127194533849N00604088EA0205202082 +B1127214533835N00604079EA0205102080 +B1127234533821N00604069EA0204902079 +B1127254533808N00604059EA0204702076 +B1127274533794N00604048EA0204502074 +B1127294533781N00604038EA0204102072 +B1127314533768N00604027EA0203602068 +B1127334533754N00604017EA0203302064 +B1127354533741N00604006EA0203002062 +B1127374533729N00603995EA0202602058 +B1127394533716N00603985EA0202102053 +B1127414533703N00603973EA0201802049 +B1127434533691N00603963EA0201602046 +B1127454533679N00603952EA0201302044 +B1127474533668N00603941EA0201002041 +B1127494533656N00603931EA0200702038 +B1127514533644N00603921EA0200602036 +B1127534533633N00603911EA0200302034 +B1127554533622N00603902EA0200102031 +B1127574533610N00603892EA0199802029 +B1127594533599N00603883EA0199502027 +B1128014533587N00603874EA0199102023 +B1128034533576N00603866EA0198802020 +B1128054533565N00603856EA0198602018 +B1128074533555N00603844EA0198202014 +B1128094533544N00603836EA0197702010 +B1128114533532N00603828EA0197202006 +B1128134533521N00603819EA0196902002 +B1128154533509N00603809EA0196701999 +B1128174533498N00603800EA0196401996 +B1128194533486N00603791EA0196001993 +B1128214533474N00603781EA0195701989 +B1128234533461N00603771EA0195601987 +B1128254533449N00603761EA0195701986 +B1128274533438N00603749EA0195601986 +B1128294533427N00603738EA0195501984 +B1128314533414N00603729EA0195501984 +B1128334533402N00603720EA0195501984 +B1128354533390N00603711EA0195401984 +B1128374533380N00603703EA0195501984 +B1128394533370N00603694EA0195401985 +B1128414533362N00603686EA0195101984 +B1128434533352N00603676EA0194801981 +B1128454533341N00603666EA0194601979 +B1128474533331N00603657EA0194401977 +B1128494533322N00603649EA0194201974 +B1128514533312N00603640EA0194201973 +B1128534533303N00603633EA0194301973 +B1128554533295N00603625EA0194401974 +B1128574533287N00603617EA0194501975 +B1128594533280N00603609EA0194401974 +B1129014533272N00603601EA0194401974 +B1129034533264N00603595EA0194301974 +B1129054533257N00603591EA0194101973 +B1129074533249N00603588EA0194001972 +B1129094533242N00603585EA0194001971 +B1129114533235N00603583EA0193701970 +B1129134533226N00603580EA0193501968 +B1129154533218N00603578EA0193301966 +B1129174533208N00603577EA0193301965 +B1129194533200N00603575EA0193301964 +B1129214533191N00603572EA0193101963 +B1129234533181N00603568EA0193001962 +B1129254533172N00603563EA0193101962 +B1129274533164N00603558EA0193301963 +B1129294533155N00603553EA0193801965 +B1129314533147N00603548EA0194401969 +B1129334533141N00603540EA0194901974 +B1129354533133N00603536EA0195401979 +B1129374533125N00603548EA0195901984 +B1129394533130N00603566EA0196401989 +B1129414533144N00603568EA0196801994 +B1129434533154N00603554EA0197201999 +B1129454533152N00603537EA0197702004 +B1129474533143N00603530EA0198002010 +B1129494533132N00603534EA0198602015 +B1129514533122N00603538EA0199202021 +B1129534533116N00603546EA0199702026 +B1129554533116N00603564EA0200202031 +B1129574533126N00603573EA0200702035 +B1129594533139N00603567EA0201002039 +B1130014533146N00603552EA0201302042 +B1130034533146N00603537EA0201702046 +B1130054533138N00603528EA0202102050 +B1130074533126N00603533EA0202402052 +B1130094533120N00603549EA0202902055 +B1130114533125N00603564EA0203602060 +B1130134533134N00603572EA0204202066 +B1130154533144N00603572EA0204302070 +B1130174533154N00603562EA0204602074 +B1130194533156N00603545EA0204902077 +B1130214533151N00603531EA0205202080 +B1130234533142N00603526EA0205602084 +B1130254533133N00603530EA0206002087 +B1130274533129N00603546EA0206402091 +B1130294533130N00603559EA0206902097 +B1130314533134N00603569EA0207102101 +B1130334533142N00603571EA0206902104 +B1130354533154N00603560EA0207002105 +B1130374533158N00603544EA0207302108 +B1130394533156N00603527EA0207602109 +B1130414533151N00603513EA0207902112 +B1130434533141N00603505EA0208102114 +B1130454533130N00603500EA0208602118 +B1130474533120N00603500EA0209102123 +B1130494533110N00603504EA0209502127 +B1130514533103N00603513EA0209802131 +B1130534533104N00603525EA0210002134 +B1130554533109N00603534EA0210402137 +B1130574533117N00603534EA0210702141 +B1130594533124N00603522EA0210802144 +B1131014533126N00603501EA0211102146 +B1131034533121N00603482EA0211402149 +B1131054533107N00603474EA0211702152 +B1131074533097N00603481EA0211902154 +B1131094533093N00603494EA0212102156 +B1131114533093N00603506EA0212602160 +B1131134533097N00603513EA0212802163 +B1131154533105N00603513EA0212702165 +B1131174533113N00603499EA0212502165 +B1131194533115N00603477EA0212502163 +B1131214533111N00603457EA0212802164 +B1131234533102N00603443EA0213202167 +B1131254533093N00603434EA0213402169 +B1131274533083N00603429EA0213402170 +B1131294533072N00603431EA0213302169 +B1131314533065N00603444EA0213202168 +B1131334533067N00603456EA0213302168 +B1131354533073N00603461EA0213402169 +B1131374533079N00603462EA0213502170 +B1131394533086N00603460EA0213202169 +B1131414533093N00603454EA0212802167 +B1131434533100N00603435EA0212902166 +B1131454533103N00603416EA0213102167 +B1131474533099N00603399EA0213102166 +B1131494533092N00603382EA0213002165 +B1131514533084N00603367EA0212802163 +B1131534533075N00603353EA0212502160 +B1131554533065N00603342EA0212102157 +B1131574533054N00603331EA0211302152 +B1131594533043N00603317EA0210602145 +B1132014533033N00603303EA0210102139 +B1132034533023N00603290EA0209602133 +B1132054533013N00603276EA0209102127 +B1132074533003N00603261EA0208702122 +B1132094532993N00603246EA0208402118 +B1132114532984N00603232EA0207902113 +B1132134532974N00603217EA0207402107 +B1132154532965N00603200EA0206902102 +B1132174532956N00603181EA0206502098 +B1132194532948N00603164EA0206102094 +B1132214532939N00603148EA0205602089 +B1132234532930N00603130EA0205302085 +B1132254532920N00603113EA0205102081 +B1132274532911N00603098EA0204802078 +B1132294532901N00603082EA0204302074 +B1132314532891N00603068EA0203902070 +B1132334532880N00603053EA0203802067 +B1132354532870N00603037EA0203402063 +B1132374532860N00603021EA0203102060 +B1132394532850N00603005EA0202702056 +B1132414532841N00602988EA0202302052 +B1132434532832N00602970EA0202002048 +B1132454532823N00602953EA0201602044 +B1132474532814N00602936EA0201202040 +B1132494532806N00602918EA0200802036 +B1132514532797N00602900EA0200402032 +B1132534532789N00602882EA0200002029 +B1132554532783N00602861EA0199602025 +B1132574532778N00602841EA0199402023 +B1132594532772N00602822EA0198802019 +B1133014532765N00602804EA0198202015 +B1133034532756N00602785EA0197702010 +B1133054532747N00602769EA0197402006 +B1133074532736N00602754EA0196902002 +B1133094532726N00602741EA0196401998 +B1133114532715N00602729EA0196001993 +B1133134532704N00602716EA0195601988 +B1133154532693N00602702EA0195201984 +B1133174532683N00602688EA0194801980 +B1133194532674N00602673EA0194301975 +B1133214532664N00602659EA0193801970 +B1133234532654N00602644EA0193301965 +B1133254532644N00602629EA0192901961 +B1133274532636N00602614EA0192601958 +B1133294532628N00602598EA0192201954 +B1133314532619N00602583EA0191901950 +B1133334532610N00602568EA0191601947 +B1133354532601N00602554EA0191201944 +B1133374532591N00602540EA0190901940 +B1133394532581N00602526EA0190601937 +B1133414532571N00602513EA0190301934 +B1133434532561N00602499EA0190001931 +B1133454532550N00602485EA0189801928 +B1133474532540N00602472EA0189501926 +B1133494532530N00602458EA0189201923 +B1133514532520N00602443EA0188901920 +B1133534532510N00602429EA0188501916 +B1133554532498N00602416EA0188301914 +B1133574532489N00602402EA0187901911 +B1133594532479N00602389EA0187701907 +B1134014532468N00602375EA0187501905 +B1134034532459N00602361EA0187401904 +B1134054532449N00602347EA0187201902 +B1134074532440N00602333EA0187001900 +B1134094532430N00602319EA0186801898 +B1134114532420N00602306EA0186701896 +B1134134532410N00602293EA0186401894 +B1134154532400N00602280EA0186201892 +B1134174532390N00602267EA0186001891 +B1134194532380N00602254EA0185901889 +B1134214532370N00602241EA0185801887 +B1134234532359N00602227EA0185601885 +B1134254532349N00602213EA0185401883 +B1134274532339N00602200EA0185201881 +B1134294532329N00602186EA0185001879 +B1134314532319N00602173EA0184801877 +B1134334532309N00602160EA0184601875 +B1134354532298N00602148EA0184401873 +B1134374532288N00602136EA0184201871 +B1134394532277N00602123EA0184001869 +B1134414532266N00602111EA0183801867 +B1134434532256N00602098EA0183601865 +B1134454532245N00602086EA0183401863 +B1134474532235N00602074EA0183201861 +B1134494532224N00602061EA0183001859 +B1134514532214N00602049EA0182801857 +B1134534532204N00602036EA0182501855 +B1134554532193N00602024EA0182401852 +B1134574532183N00602011EA0182201851 +B1134594532172N00601999EA0182001849 +B1135014532162N00601986EA0181801847 +B1135034532152N00601973EA0181501845 +B1135054532141N00601961EA0181301843 +B1135074532131N00601950EA0181101841 +B1135094532122N00601938EA0181001839 +B1135114532112N00601928EA0181201839 +B1135134532104N00601921EA0181201839 +B1135154532097N00601915EA0181101838 +B1135174532090N00601908EA0181001837 +B1135194532082N00601900EA0181201838 +B1135214532074N00601897EA0181401839 +B1135234532067N00601893EA0181401841 +B1135254532062N00601888EA0181101840 +B1135274532055N00601881EA0180801839 +B1135294532044N00601875EA0181001839 +B1135314532034N00601872EA0181101840 +B1135334532025N00601868EA0180901840 +B1135354532018N00601862EA0180501838 +B1135374532010N00601853EA0180201835 +B1135394532002N00601845EA0179901832 +B1135414531994N00601837EA0179601828 +B1135434531985N00601827EA0179501826 +B1135454531976N00601818EA0179401825 +B1135474531967N00601809EA0179301824 +B1135494531959N00601799EA0179101822 +B1135514531951N00601789EA0178801820 +B1135534531942N00601779EA0178501817 +B1135554531934N00601768EA0178001813 +B1135574531925N00601755EA0177501809 +B1135594531916N00601743EA0177001804 +B1136014531907N00601730EA0176401798 +B1136034531898N00601718EA0175801792 +B1136054531887N00601706EA0175101786 +B1136074531876N00601695EA0174601779 +B1136094531865N00601684EA0174301774 +B1136114531856N00601673EA0173801769 +B1136134531846N00601663EA0173301764 +B1136154531834N00601654EA0172801759 +B1136174531823N00601645EA0172301754 +B1136194531813N00601637EA0171601748 +B1136214531801N00601631EA0170801741 +B1136234531788N00601629EA0170201734 +B1136254531775N00601626EA0169701728 +B1136274531763N00601624EA0169401724 +B1136294531752N00601623EA0168801718 +B1136314531741N00601622EA0168301712 +B1136334531729N00601622EA0167801707 +B1136354531717N00601624EA0167301702 +B1136374531704N00601627EA0166701697 +B1136394531691N00601631EA0166101691 +B1136414531677N00601632EA0165401685 +B1136434531664N00601632EA0164701678 +B1136454531649N00601633EA0164101670 +B1136474531635N00601635EA0163701665 +B1136494531621N00601637EA0163401660 +B1136514531608N00601640EA0163101656 +B1136534531595N00601641EA0162801654 +B1136554531582N00601643EA0162801652 +B1136574531570N00601648EA0162801651 +B1136594531560N00601651EA0162601650 +B1137014531547N00601654EA0162401648 +B1137034531533N00601658EA0162301647 +B1137054531522N00601661EA0161901645 +B1137074531511N00601664EA0161201642 +B1137094531498N00601669EA0160801637 +B1137114531484N00601674EA0160501634 +B1137134531472N00601677EA0159901629 +B1137154531459N00601681EA0159201623 +B1137174531444N00601687EA0158701618 +B1137194531430N00601689EA0158401614 +B1137214531417N00601686EA0157801608 +B1137234531403N00601682EA0157301603 +B1137254531387N00601677EA0157101598 +B1137274531374N00601669EA0156701595 +B1137294531360N00601660EA0156301591 +B1137314531347N00601650EA0156101587 +B1137334531334N00601639EA0155801585 +B1137354531323N00601627EA0155501582 +B1137374531313N00601617EA0155001578 +B1137394531303N00601605EA0154601574 +B1137414531293N00601593EA0154301571 +B1137434531283N00601584EA0153701566 +B1137454531272N00601575EA0153101560 +B1137474531260N00601565EA0152601555 +B1137494531248N00601555EA0152201550 +B1137514531236N00601546EA0152001547 +B1137534531226N00601535EA0151701544 +B1137554531215N00601525EA0151401540 +B1137574531203N00601515EA0151301538 +B1137594531192N00601505EA0151001536 +B1138014531181N00601494EA0150701533 +B1138034531170N00601484EA0150501530 +B1138054531158N00601475EA0150301529 +B1138074531147N00601465EA0150001527 +B1138094531136N00601456EA0149801524 +B1138114531124N00601447EA0149501521 +B1138134531114N00601436EA0149201518 +B1138154531103N00601425EA0148801515 +B1138174531091N00601415EA0148601512 +B1138194531079N00601403EA0148401510 +B1138214531068N00601393EA0148101508 +B1138234531056N00601383EA0147801504 +B1138254531045N00601371EA0147501502 +B1138274531033N00601359EA0147301499 +B1138294531022N00601348EA0146901496 +B1138314531010N00601336EA0146701493 +B1138334530998N00601325EA0146501491 +B1138354530986N00601315EA0146201488 +B1138374530975N00601304EA0145901486 +B1138394530963N00601293EA0145601482 +B1138414530950N00601283EA0145301480 +B1138434530937N00601273EA0145101477 +B1138454530924N00601263EA0144801474 +B1138474530912N00601253EA0144501471 +B1138494530900N00601241EA0144201468 +B1138514530888N00601229EA0144001466 +B1138534530876N00601216EA0143801464 +B1138554530865N00601202EA0143601462 +B1138574530854N00601189EA0143301459 +B1138594530843N00601177EA0143001455 +B1139014530831N00601165EA0142701453 +B1139034530818N00601154EA0142501450 +B1139054530805N00601146EA0142201447 +B1139074530791N00601137EA0142001444 +B1139094530778N00601127EA0141801443 +B1139114530766N00601118EA0141401440 +B1139134530754N00601108EA0141201437 +B1139154530740N00601098EA0141101436 +B1139174530728N00601089EA0140901434 +B1139194530716N00601079EA0140501431 +B1139214530703N00601069EA0140201428 +B1139234530690N00601060EA0140001425 +B1139254530677N00601050EA0139901424 +B1139274530664N00601040EA0139701422 +B1139294530652N00601031EA0139501420 +B1139314530639N00601020EA0139201417 +B1139334530627N00601009EA0139001415 +B1139354530614N00600999EA0138901413 +B1139374530602N00600989EA0138701411 +B1139394530590N00600979EA0138501409 +B1139414530577N00600970EA0138201406 +B1139434530565N00600958EA0138001404 +B1139454530554N00600947EA0137601402 +B1139474530542N00600936EA0137301399 +B1139494530530N00600925EA0136901395 +B1139514530518N00600913EA0136601391 +B1139534530504N00600903EA0136401388 +B1139554530491N00600893EA0136101386 +B1139574530479N00600883EA0135801383 +B1139594530467N00600872EA0135701380 +B1140014530456N00600861EA0135501378 +B1140034530445N00600850EA0135201376 +B1140054530436N00600838EA0135001374 +B1140074530425N00600827EA0134901373 +B1140094530415N00600817EA0134601371 +B1140114530404N00600807EA0134401368 +B1140134530392N00600795EA0134401367 +B1140154530381N00600784EA0134401367 +B1140174530371N00600773EA0134101365 +B1140194530361N00600763EA0133901363 +B1140214530350N00600753EA0133701361 +B1140234530339N00600743EA0133501358 +B1140254530328N00600734EA0133301357 +B1140274530317N00600724EA0133101355 +B1140294530307N00600715EA0132901352 +B1140314530296N00600707EA0132701350 +B1140334530285N00600699EA0132501348 +B1140354530274N00600691EA0132201346 +B1140374530263N00600683EA0131901343 +B1140394530252N00600675EA0131801341 +B1140414530240N00600670EA0131601339 +B1140434530228N00600666EA0131201336 +B1140454530216N00600663EA0131001334 +B1140474530203N00600660EA0130801332 +B1140494530191N00600655EA0130601329 +B1140514530180N00600650EA0130401327 +B1140534530168N00600644EA0130101324 +B1140554530157N00600636EA0129901322 +B1140574530147N00600629EA0129601319 +B1140594530137N00600620EA0129401317 +B1141014530127N00600611EA0129101314 +B1141034530117N00600602EA0128901312 +B1141054530108N00600592EA0128701310 +B1141074530097N00600584EA0128501307 +B1141094530087N00600575EA0128301306 +B1141114530077N00600568EA0128101304 +B1141134530066N00600560EA0127801302 +B1141154530056N00600552EA0127701300 +B1141174530046N00600543EA0127601298 +B1141194530036N00600535EA0127501297 +B1141214530026N00600527EA0127201295 +B1141234530015N00600520EA0127001292 +B1141254530005N00600511EA0126801290 +B1141274529995N00600502EA0126601288 +B1141294529985N00600494EA0126501287 +B1141314529976N00600485EA0126201285 +B1141334529967N00600476EA0126001283 +B1141354529958N00600466EA0125901281 +B1141374529949N00600457EA0125701279 +B1141394529940N00600447EA0125501277 +B1141414529931N00600438EA0125301275 +B1141434529923N00600428EA0125101273 +B1141454529914N00600418EA0124901271 +B1141474529905N00600409EA0124601268 +B1141494529896N00600399EA0124301265 +B1141514529887N00600390EA0124101263 +B1141534529878N00600381EA0123801260 +B1141554529869N00600372EA0123501257 +B1141574529859N00600364EA0123201254 +B1141594529849N00600356EA0122901251 +B1142014529839N00600348EA0122601248 +B1142034529830N00600341EA0122301246 +B1142054529820N00600333EA0122001242 +B1142074529810N00600325EA0121701239 +B1142094529800N00600317EA0121401236 +B1142114529791N00600309EA0121101233 +B1142134529782N00600301EA0120801230 +B1142154529773N00600292EA0120601227 +B1142174529765N00600283EA0120201225 +B1142194529756N00600275EA0119801222 +B1142214529747N00600266EA0119501218 +B1142234529738N00600258EA0119301215 +B1142254529729N00600250EA0119001212 +B1142274529719N00600243EA0118601208 +B1142294529710N00600234EA0118201204 +B1142314529701N00600224EA0117901200 +B1142334529693N00600214EA0117601197 +B1142354529684N00600204EA0117201194 +B1142374529676N00600194EA0117001191 +B1142394529667N00600183EA0116601188 +B1142414529659N00600173EA0116201184 +B1142434529651N00600163EA0115801180 +B1142454529642N00600152EA0115401176 +B1142474529633N00600142EA0115201172 +B1142494529624N00600133EA0114801169 +B1142514529615N00600123EA0114401165 +B1142534529606N00600112EA0114001161 +B1142554529596N00600102EA0113701158 +B1142574529587N00600091EA0113401154 +B1142594529578N00600080EA0113101151 +B1143014529569N00600071EA0112901149 +B1143034529560N00600062EA0112501145 +B1143054529551N00600052EA0112101142 +B1143074529542N00600041EA0111801138 +B1143094529533N00600031EA0111401135 +B1143114529524N00600021EA0111101132 +B1143134529514N00600012EA0110901129 +B1143154529505N00600004EA0110801127 +B1143174529496N00559995EA0110401125 +B1143194529486N00559986EA0110201122 +B1143214529477N00559978EA0110101121 +B1143234529468N00559971EA0109901119 +B1143254529458N00559963EA0109601116 +B1143274529448N00559956EA0109401114 +B1143294529439N00559949EA0109301112 +B1143314529429N00559942EA0109001110 +B1143334529419N00559936EA0108801107 +B1143354529408N00559928EA0108601105 +B1143374529397N00559921EA0108601104 +B1143394529386N00559914EA0108501104 +B1143414529376N00559908EA0108501103 +B1143434529367N00559901EA0108501103 +B1143454529359N00559895EA0108501103 +B1143474529350N00559889EA0108401103 +B1143494529342N00559883EA0108201102 +B1143514529333N00559878EA0108101101 +B1143534529324N00559874EA0108001099 +B1143554529314N00559868EA0108001098 +B1143574529305N00559862EA0107901098 +B1143594529297N00559856EA0107701097 +B1144014529289N00559849EA0107601095 +B1144034529280N00559841EA0107401094 +B1144054529271N00559833EA0107301093 +B1144074529261N00559824EA0107201091 +B1144094529252N00559817EA0107201091 +B1144114529242N00559809EA0107101090 +B1144134529233N00559801EA0107001089 +B1144154529223N00559793EA0106901088 +B1144174529212N00559784EA0106801087 +B1144194529202N00559774EA0106801087 +B1144214529192N00559766EA0106801087 +B1144234529182N00559757EA0106701086 +B1144254529172N00559749EA0106601085 +B1144274529163N00559740EA0106501085 +B1144294529153N00559731EA0106501084 +B1144314529144N00559721EA0106501083 +B1144334529135N00559712EA0106401083 +B1144354529126N00559704EA0106201082 +B1144374529117N00559695EA0105901080 +B1144394529108N00559686EA0105801078 +B1144414529099N00559677EA0105701077 +B1144434529089N00559668EA0105501075 +B1144454529079N00559658EA0105301074 +B1144474529068N00559650EA0105301073 +B1144494529059N00559641EA0105201072 +B1144514529050N00559632EA0105001070 +B1144534529039N00559624EA0105001070 +B1144554529029N00559616EA0105001069 +B1144574529019N00559607EA0104901069 +B1144594529009N00559599EA0104801068 +B1145014528999N00559591EA0104601066 +B1145034528989N00559582EA0104501065 +B1145054528978N00559573EA0104401064 +B1145074528969N00559564EA0104301063 +B1145094528959N00559557EA0104201062 +B1145114528949N00559548EA0104001060 +B1145134528940N00559540EA0104001059 +B1145154528929N00559532EA0103901059 +B1145174528918N00559525EA0103901058 +B1145194528908N00559516EA0104001058 +B1145214528898N00559509EA0103901058 +B1145234528889N00559500EA0103701057 +B1145254528879N00559490EA0103701056 +B1145274528869N00559481EA0103701056 +B1145294528861N00559471EA0103601056 +B1145314528852N00559462EA0103401054 +B1145334528842N00559451EA0103601054 +B1145354528832N00559442EA0103601055 +B1145374528823N00559433EA0103401053 +B1145394528813N00559421EA0103501053 +B1145414528804N00559413EA0103501054 +B1145434528795N00559407EA0103201053 +B1145454528785N00559399EA0103001051 +B1145474528776N00559390EA0102901050 +B1145494528768N00559381EA0102801048 +B1145514528759N00559372EA0102901047 +B1145534528750N00559365EA0103001048 +B1145554528743N00559357EA0102801047 +B1145574528736N00559346EA0102801046 +B1145594528727N00559336EA0102901046 +B1146014528718N00559327EA0103001048 +B1146034528711N00559318EA0103001048 +B1146054528702N00559309EA0103201049 +B1146074528694N00559304EA0103301051 +B1146094528686N00559300EA0103401053 +B1146114528677N00559298EA0103401053 +B1146134528667N00559296EA0103501054 +B1146154528658N00559294EA0103601055 +B1146174528649N00559292EA0103601056 +B1146194528639N00559290EA0103701056 +B1146214528630N00559288EA0103701057 +B1146234528621N00559288EA0103501056 +B1146254528611N00559287EA0103201054 +B1146274528601N00559284EA0103001052 +B1146294528592N00559281EA0102501049 +B1146314528583N00559277EA0101901044 +B1146334528574N00559272EA0101501039 +B1146354528562N00559267EA0101401035 +B1146374528550N00559265EA0101201033 +B1146394528539N00559265EA0100801029 +B1146414528527N00559264EA0100301024 +B1146434528514N00559262EA0100201021 +B1146454528502N00559260EA0099901019 +B1146474528491N00559258EA0099501016 +B1146494528479N00559253EA0099101011 +B1146514528467N00559247EA0099001007 +B1146534528455N00559241EA0099101006 +B1146554528446N00559235EA0098901005 +B1146574528437N00559230EA0098501002 +B1146594528426N00559223EA0098200999 +B1147014528416N00559214EA0098200998 +B1147034528405N00559206EA0098200997 +B1147054528395N00559198EA0098100997 +B1147074528385N00559189EA0098100996 +B1147094528376N00559181EA0098200997 +B1147114528367N00559174EA0098100997 +B1147134528358N00559165EA0098000996 +B1147154528349N00559155EA0098000996 +B1147174528340N00559148EA0097900996 +B1147194528332N00559140EA0097700994 +B1147214528323N00559130EA0097700994 +B1147234528313N00559122EA0097800995 +B1147254528306N00559115EA0097700994 +B1147274528298N00559107EA0097600993 +B1147294528291N00559099EA0097500992 +B1147314528283N00559091EA0097500992 +B1147334528273N00559084EA0097400991 +B1147354528264N00559077EA0097300990 +B1147374528253N00559070EA0097100989 +B1147394528242N00559062EA0097100988 +B1147414528231N00559055EA0097100988 +B1147434528221N00559048EA0097000988 +B1147454528211N00559041EA0096800986 +B1147474528200N00559033EA0096700985 +B1147494528190N00559025EA0096700985 +B1147514528181N00559017EA0096500983 +B1147534528172N00559006EA0096500982 +B1147554528162N00558998EA0096700982 +B1147574528152N00558992EA0096600982 +B1147594528143N00558983EA0096400981 +B1148014528133N00558974EA0096500981 +B1148034528123N00558966EA0096500981 +B1148054528114N00558957EA0096300980 +B1148074528104N00558947EA0096000978 +B1148094528094N00558936EA0095700975 +B1148114528085N00558926EA0095200972 +B1148134528074N00558914EA0095000968 +B1148154528064N00558904EA0094800966 +B1148174528055N00558895EA0094300963 +B1148194528044N00558885EA0094100959 +B1148214528032N00558875EA0094000957 +B1148234528022N00558866EA0093600955 +B1148254528011N00558857EA0093200950 +B1148274527999N00558845EA0093300948 +B1148294527988N00558835EA0093300947 +B1148314527978N00558827EA0093200947 +B1148334527967N00558818EA0093200946 +B1148354527956N00558810EA0093200946 +B1148374527945N00558802EA0093100946 +B1148394527935N00558794EA0093100946 +B1148414527926N00558785EA0093000945 +B1148434527917N00558774EA0093100945 +B1148454527910N00558764EA0093000945 +B1148474527902N00558755EA0092800944 +B1148494527893N00558746EA0092700943 +B1148514527883N00558740EA0092500942 +B1148534527874N00558733EA0092200939 +B1148554527864N00558725EA0092100937 +B1148574527853N00558716EA0092000935 +B1148594527843N00558707EA0092000935 +B1149014527833N00558699EA0092000935 +B1149034527824N00558689EA0092100936 +B1149054527815N00558679EA0092100936 +B1149074527806N00558669EA0092100937 +B1149094527797N00558660EA0091800935 +B1149114527788N00558648EA0091600933 +B1149134527778N00558636EA0091800932 +B1149154527770N00558627EA0091900933 +B1149174527763N00558618EA0091800933 +B1149194527755N00558607EA0091700932 +B1149214527746N00558597EA0091600931 +B1149234527738N00558587EA0091400930 +B1149254527730N00558576EA0091100927 +B1149274527720N00558564EA0090900925 +B1149294527710N00558552EA0090800923 +B1149314527700N00558541EA0090700923 +B1149334527690N00558529EA0090700922 +B1149354527680N00558515EA0090700921 +B1149374527672N00558500EA0090900922 +B1149394527665N00558488EA0091000924 +B1149414527656N00558477EA0091200925 +B1149434527649N00558465EA0091300927 +B1149454527642N00558452EA0091400929 +B1149474527636N00558439EA0091500929 +B1149494527629N00558425EA0091500930 +B1149514527622N00558411EA0091500930 +B1149534527615N00558397EA0091400930 +B1149554527609N00558382EA0091300929 +B1149574527601N00558368EA0091300929 +B1149594527592N00558355EA0091100928 +B1150014527582N00558341EA0090800926 +B1150034527574N00558325EA0090700924 +B1150054527566N00558310EA0090600924 +B1150074527558N00558296EA0090400922 +B1150094527551N00558280EA0090100920 +B1150114527543N00558262EA0090000918 +B1150134527536N00558245EA0090000917 +B1150154527531N00558228EA0089900916 +B1150174527526N00558211EA0089800915 +B1150194527521N00558194EA0089700914 +B1150214527515N00558178EA0089600913 +B1150234527510N00558162EA0089400911 +B1150254527504N00558145EA0089100909 +B1150274527496N00558128EA0089000907 +B1150294527488N00558111EA0089000906 +B1150314527483N00558094EA0089000906 +B1150334527480N00558078EA0089100907 +B1150354527475N00558061EA0089100907 +B1150374527469N00558046EA0089000906 +B1150394527461N00558032EA0088800905 +B1150414527450N00558019EA0089000905 +B1150434527436N00558010EA0089200906 +B1150454527424N00558001EA0089200907 +B1150474527412N00557995EA0089100907 +B1150494527398N00557991EA0089200907 +B1150514527384N00557989EA0089500909 +B1150534527371N00557985EA0089600911 +B1150554527361N00557990EA0089600911 +B1150574527356N00558004EA0089600912 +B1150594527362N00558010EA0089600912 +B1151014527370N00557999EA0089700912 +B1151034527371N00557977EA0089900913 +B1151054527366N00557957EA0090100915 +B1151074527356N00557944EA0090300917 +B1151094527344N00557942EA0090400919 +B1151114527334N00557947EA0090500920 +B1151134527330N00557961EA0090400920 +B1151154527335N00557972EA0090400920 +B1151174527342N00557975EA0090700922 +B1151194527349N00557975EA0090700923 +B1151214527358N00557970EA0090700923 +B1151234527367N00557959EA0091000924 +B1151254527374N00557942EA0091400926 +B1151274527375N00557923EA0091800930 +B1151294527372N00557907EA0091900934 +B1151314527371N00557889EA0091700935 +B1151334527370N00557869EA0091700936 +B1151354527361N00557854EA0091400936 +B1151374527347N00557856EA0091200934 +B1151394527338N00557866EA0091100933 +B1151414527338N00557879EA0091000931 +B1151434527344N00557889EA0091300931 +B1151454527354N00557893EA0091600932 +B1151474527365N00557891EA0091900936 +B1151494527374N00557887EA0092100938 +B1151514527383N00557885EA0092300940 +B1151534527391N00557883EA0092400942 +B1151554527398N00557883EA0092400943 +B1151574527407N00557879EA0092300943 +B1151594527412N00557862EA0092200943 +B1152014527410N00557845EA0092200943 +B1152034527401N00557834EA0092200943 +B1152054527391N00557834EA0092200942 +B1152074527384N00557845EA0092200942 +B1152094527382N00557857EA0092400943 +B1152114527386N00557864EA0092500944 +B1152134527391N00557868EA0092500945 +B1152154527397N00557871EA0092500944 +B1152174527404N00557873EA0092500944 +B1152194527413N00557874EA0092700944 +B1152214527422N00557874EA0092800946 +B1152234527432N00557875EA0093100947 +B1152254527442N00557877EA0093400950 +B1152274527451N00557879EA0093700953 +B1152294527459N00557882EA0094100957 +B1152314527466N00557884EA0094600961 +B1152334527473N00557885EA0094800964 +B1152354527480N00557879EA0094900967 +B1152374527483N00557862EA0094900969 +B1152394527477N00557847EA0095000970 +B1152414527462N00557846EA0095200971 +B1152434527457N00557857EA0095300972 +B1152454527458N00557868EA0095700974 +B1152474527463N00557873EA0095900977 +B1152494527470N00557873EA0095800978 +B1152514527477N00557865EA0095900978 +B1152534527480N00557847EA0096000978 +B1152554527476N00557829EA0096400981 +B1152574527470N00557818EA0096700985 +B1152594527461N00557814EA0096800987 +B1153014527453N00557817EA0096900988 +B1153034527449N00557826EA0097000989 +B1153054527450N00557836EA0097200990 +B1153074527455N00557843EA0097500992 +B1153094527462N00557843EA0097900995 +B1153114527469N00557845EA0098300999 +B1153134527475N00557850EA0098501002 +B1153154527480N00557854EA0098501005 +B1153174527488N00557850EA0098201006 +B1153194527492N00557833EA0098101006 +B1153214527487N00557816EA0098101006 +B1153234527476N00557811EA0098201005 +B1153254527465N00557819EA0098301004 +B1153274527456N00557828EA0098701006 +B1153294527449N00557835EA0099101010 +B1153314527445N00557844EA0099501013 +B1153334527444N00557854EA0099901017 +B1153354527443N00557865EA0100301021 +B1153374527442N00557875EA0100601024 +B1153394527450N00557878EA0100801027 +B1153414527456N00557866EA0101301029 +B1153434527455N00557848EA0101601033 +B1153454527443N00557838EA0101801035 +B1153474527431N00557846EA0102201039 +B1153494527430N00557861EA0102501041 +B1153514527437N00557869EA0103001047 +B1153534527444N00557862EA0103301051 +B1153554527445N00557848EA0103701055 +B1153574527439N00557835EA0104001059 +B1153594527428N00557830EA0104201062 +B1154014527416N00557840EA0104601065 +B1154034527409N00557853EA0104701067 +B1154054527409N00557866EA0104901069 +B1154074527418N00557869EA0105301071 +B1154094527424N00557862EA0105901075 +B1154114527429N00557858EA0106401081 +B1154134527434N00557855EA0106701085 +B1154154527437N00557845EA0106801088 +B1154174527438N00557831EA0107301091 +B1154194527435N00557819EA0107501095 +B1154214527425N00557811EA0107701097 +B1154234527411N00557811EA0107901099 +B1154254527401N00557823EA0108001101 +B1154274527398N00557839EA0108201102 +B1154294527402N00557849EA0108401104 +B1154314527408N00557850EA0108401105 +B1154334527415N00557843EA0108501105 +B1154354527418N00557832EA0108901107 +B1154374527417N00557819EA0109201110 +B1154394527415N00557807EA0109101111 +B1154414527410N00557795EA0108701111 +B1154434527395N00557785EA0108901112 +B1154454527380N00557789EA0109201112 +B1154474527375N00557803EA0109001112 +B1154494527374N00557816EA0108901109 +B1154514527378N00557829EA0108901108 +B1154534527387N00557835EA0109101109 +B1154554527396N00557834EA0109401111 +B1154574527403N00557831EA0109601113 +B1154594527410N00557827EA0109801115 +B1155014527418N00557823EA0110301118 +B1155034527426N00557820EA0110701123 +B1155054527431N00557816EA0110701126 +B1155074527435N00557809EA0110201128 +B1155094527434N00557791EA0109801129 +B1155114527426N00557776EA0109901128 +B1155134527413N00557773EA0110101128 +B1155154527404N00557782EA0110301129 +B1155174527402N00557796EA0110501130 +B1155194527404N00557809EA0110801131 +B1155214527411N00557816EA0110801133 +B1155234527418N00557816EA0110501133 +B1155254527422N00557802EA0110101130 +B1155274527419N00557785EA0109901128 +B1155294527409N00557774EA0109801126 +B1155314527398N00557771EA0110001126 +B1155334527387N00557773EA0110301128 +B1155354527378N00557777EA0110401129 +B1155374527369N00557782EA0110301130 +B1155394527364N00557796EA0110301130 +B1155414527364N00557811EA0110301129 +B1155434527372N00557820EA0110301128 +B1155454527381N00557819EA0110201128 +B1155474527388N00557810EA0110301129 +B1155494527392N00557801EA0110101128 +B1155514527394N00557790EA0109601126 +B1155534527392N00557775EA0109201123 +B1155554527385N00557759EA0109101120 +B1155574527373N00557748EA0109201120 +B1155594527362N00557740EA0109101119 +B1156014527352N00557731EA0109101118 +B1156034527342N00557722EA0109101117 +B1156054527333N00557715EA0109101117 +B1156074527324N00557709EA0109201117 +B1156094527314N00557708EA0109401118 +B1156114527305N00557706EA0109701120 +B1156134527298N00557706EA0109901122 +B1156154527293N00557719EA0110001123 +B1156174527298N00557734EA0110201124 +B1156194527311N00557735EA0110401127 +B1156214527317N00557724EA0110401128 +B1156234527317N00557707EA0110401129 +B1156254527312N00557691EA0110601130 +B1156274527304N00557683EA0110701130 +B1156294527293N00557684EA0111001132 +B1156314527283N00557687EA0111201134 +B1156334527276N00557691EA0111301136 +B1156354527273N00557704EA0111501137 +B1156374527276N00557715EA0111701139 +B1156394527286N00557714EA0111401140 +B1156414527295N00557699EA0111701140 +B1156434527295N00557682EA0112001141 +B1156454527288N00557671EA0112101142 +B1156474527278N00557666EA0112201144 +B1156494527269N00557672EA0112201144 +B1156514527264N00557684EA0112401144 +B1156534527263N00557696EA0112601146 +B1156554527265N00557702EA0112201146 +B1156574527272N00557706EA0111701144 +B1156594527281N00557704EA0111401141 +B1157014527289N00557689EA0111101137 +B1157034527289N00557669EA0111301134 +B1157054527285N00557654EA0111501134 +B1157074527278N00557645EA0111601135 +B1157094527268N00557638EA0111701136 +B1157114527256N00557635EA0112001139 +B1157134527245N00557635EA0112201141 +B1157154527236N00557636EA0112201142 +B1157174527228N00557642EA0112101142 +B1157194527227N00557651EA0111901141 +B1157214527233N00557655EA0111701140 +B1157234527241N00557649EA0111601139 +B1157254527247N00557635EA0111601138 +B1157274527248N00557617EA0111701137 +B1157294527241N00557597EA0111901138 +B1157314527231N00557586EA0112101139 +B1157334527221N00557581EA0112001139 +B1157354527211N00557582EA0111701138 +B1157374527207N00557593EA0111701137 +B1157394527210N00557602EA0111801138 +B1157414527217N00557601EA0111801138 +B1157434527224N00557587EA0111801137 +B1157454527225N00557568EA0111901138 +B1157474527221N00557551EA0111801137 +B1157494527212N00557540EA0111601136 +B1157514527200N00557537EA0111301134 +B1157534527192N00557546EA0111201132 +B1157554527188N00557557EA0111301132 +B1157574527181N00557566EA0111201131 +B1157594527172N00557572EA0111101130 +B1158014527163N00557579EA0110901128 +B1158034527155N00557588EA0110801127 +B1158054527147N00557594EA0110601125 +B1158074527137N00557599EA0110601124 +B1158094527128N00557604EA0110601123 +B1158114527120N00557611EA0110301122 +B1158134527111N00557617EA0110001119 +B1158154527101N00557624EA0109701116 +B1158174527092N00557633EA0109901115 +B1158194527083N00557642EA0110101115 +B1158214527075N00557649EA0110101116 +B1158234527068N00557657EA0110201116 +B1158254527059N00557664EA0110601118 +B1158274527052N00557668EA0110801121 +B1158294527047N00557673EA0110801122 +B1158314527046N00557681EA0110901123 +B1158334527052N00557688EA0110901124 +B1158354527063N00557684EA0110801125 +B1158374527072N00557669EA0110701124 +B1158394527073N00557649EA0110801124 +B1158414527068N00557633EA0110901125 +B1158434527058N00557623EA0111001126 +B1158454527048N00557620EA0111201128 +B1158474527040N00557620EA0111201129 +B1158494527034N00557626EA0111001128 +B1158514527027N00557636EA0111101128 +B1158534527019N00557644EA0111301129 +B1158554527011N00557649EA0111501132 +B1158574527003N00557652EA0111701134 +B1158594526997N00557656EA0111901136 +B1159014526995N00557663EA0111801137 +B1159034526997N00557673EA0112001138 +B1159054527005N00557680EA0112201139 +B1159074527015N00557677EA0112301140 +B1159094527023N00557666EA0112101141 +B1159114527027N00557644EA0112201141 +B1159134527024N00557625EA0112201142 +B1159154527015N00557614EA0112301141 +B1159174527004N00557612EA0112401143 +B1159194526994N00557614EA0112701145 +B1159214526984N00557615EA0112801147 +B1159234526975N00557613EA0112901148 +B1159254526966N00557612EA0112901149 +B1159274526958N00557614EA0113001150 +B1159294526951N00557617EA0112901150 +B1159314526947N00557624EA0112801150 +B1159334526944N00557634EA0112801149 +B1159354526938N00557644EA0112801148 +B1159374526932N00557652EA0112801148 +B1159394526925N00557659EA0112701147 +B1159414526918N00557667EA0112601146 +B1159434526911N00557676EA0112401145 +B1159454526904N00557683EA0112301144 +B1159474526895N00557691EA0112201143 +B1159494526887N00557698EA0112201143 +B1159514526878N00557704EA0112101142 +B1159534526869N00557710EA0112001141 +B1159554526860N00557716EA0111801140 +B1159574526851N00557722EA0111501137 +B1159594526841N00557727EA0111101135 +B1200014526832N00557731EA0110701131 +B1200034526821N00557733EA0110401127 +B1200054526810N00557737EA0110201124 +B1200074526799N00557741EA0110001122 +B1200094526789N00557742EA0109601119 +B1200114526777N00557744EA0109301115 +B1200134526765N00557746EA0109201113 +B1200154526753N00557748EA0108901111 +B1200174526743N00557753EA0108601108 +B1200194526731N00557758EA0108301104 +B1200214526720N00557763EA0108101102 +B1200234526708N00557767EA0107601099 +B1200254526696N00557770EA0107301095 +B1200274526684N00557773EA0107001092 +B1200294526673N00557776EA0106601088 +B1200314526661N00557778EA0106001084 +B1200334526647N00557782EA0105801080 +B1200354526634N00557783EA0105501077 +B1200374526621N00557783EA0105101073 +B1200394526607N00557783EA0105501069 +B1200414526593N00557778EA0106101067 +B1200434526583N00557775EA0106301067 +B1200454526574N00557779EA0106501068 +B1200474526569N00557794EA0106801070 +B1200494526575N00557802EA0107101073 +B1200514526584N00557796EA0107501079 +B1200534526587N00557782EA0107801085 +B1200554526581N00557767EA0107901090 +B1200574526569N00557760EA0108001094 +B1200594526556N00557771EA0108201097 +B1201014526553N00557786EA0108401100 +B1201044526559N00557794EA0108901106 +B1201064526566N00557793EA0109201109 +B1201084526573N00557789EA0109601113 +B1201104526580N00557782EA0110101117 +B1201124526583N00557769EA0110201119 +B1201144526577N00557754EA0110201121 +B1201164526565N00557754EA0110301123 +B1201184526556N00557770EA0110701125 +B1201204526559N00557786EA0111201128 +B1201224526567N00557787EA0111601132 +B1201244526574N00557780EA0112001137 +B1201264526579N00557769EA0112201140 +B1201284526578N00557755EA0111901142 +B1201304526566N00557744EA0111701142 +B1201324526554N00557754EA0111801143 +B1201344526551N00557772EA0112401144 +B1201364526555N00557782EA0112901147 +B1201384526563N00557783EA0113101150 +B1201404526573N00557781EA0113401152 +B1201424526583N00557779EA0113801156 +B1201444526592N00557773EA0113801158 +B1201464526595N00557756EA0113701160 +B1201484526590N00557734EA0113401162 +B1201504526576N00557727EA0113001160 +B1201524526564N00557737EA0112901160 +B1201544526561N00557751EA0112701159 +B1201564526568N00557763EA0112701157 +B1201584526578N00557763EA0112601156 +B1202004526584N00557751EA0112601153 +B1202024526586N00557736EA0112401150 +B1202044526584N00557717EA0112101146 +B1202064526577N00557700EA0111801143 +B1202084526567N00557690EA0111301140 +B1202104526553N00557686EA0110801135 +B1202124526539N00557683EA0110901133 +B1202144526526N00557681EA0111101132 +B1202164526514N00557681EA0111301134 +B1202184526502N00557680EA0111801136 +B1202204526492N00557678EA0112301140 +B1202224526484N00557678EA0112201143 +B1202244526480N00557688EA0112001145 +B1202264526486N00557700EA0112001147 +B1202284526498N00557697EA0112301148 +B1202304526508N00557693EA0112601150 +B1202324526514N00557700EA0112601151 +B1202344526511N00557715EA0112901152 +B1202364526498N00557721EA0113101153 +B1202384526487N00557710EA0113301154 +B1202404526483N00557691EA0113501156 +B1202424526490N00557677EA0113601158 +B1202444526501N00557676EA0113901160 +B1202464526506N00557684EA0114101161 +B1202484526504N00557696EA0114201163 +B1202504526493N00557706EA0114501165 +B1202524526478N00557700EA0114701167 +B1202544526470N00557685EA0114901169 +B1202564526470N00557667EA0115201172 +B1202584526477N00557654EA0115401176 +B1203004526486N00557652EA0115401178 +B1203024526494N00557661EA0115601179 +B1203044526489N00557673EA0115801180 +B1203064526477N00557678EA0116301182 +B1203084526464N00557677EA0116501186 +B1203104526453N00557669EA0116401187 +B1203124526447N00557654EA0116201186 +B1203144526451N00557632EA0116401186 +B1203164526460N00557621EA0116601186 +B1203184526470N00557620EA0116901187 +B1203204526477N00557627EA0117001188 +B1203224526476N00557638EA0117301191 +B1203244526468N00557648EA0117901194 +B1203264526460N00557654EA0118301198 +B1203284526455N00557662EA0118301201 +B1203304526457N00557672EA0118401203 +B1203324526468N00557667EA0118701206 +B1203344526473N00557651EA0118801209 +B1203364526472N00557631EA0119001211 +B1203384526466N00557615EA0119101212 +B1203404526451N00557613EA0119601216 +B1203424526441N00557621EA0120001220 +B1203444526437N00557632EA0120301223 +B1203464526437N00557641EA0120701226 +B1203484526443N00557648EA0121001229 +B1203504526452N00557641EA0121101233 +B1203524526454N00557624EA0121301235 +B1203544526448N00557603EA0121701238 +B1203564526433N00557602EA0122001240 +B1203584526423N00557612EA0122201242 +B1204004526422N00557624EA0122701245 +B1204024526429N00557628EA0123101249 +B1204044526436N00557619EA0123401253 +B1204064526439N00557604EA0123601256 +B1204084526436N00557587EA0123801259 +B1204104526428N00557572EA0123901261 +B1204124526414N00557568EA0124101262 +B1204144526403N00557576EA0124301265 +B1204164526401N00557589EA0124501267 +B1204184526406N00557598EA0124901269 +B1204204526415N00557600EA0125301273 +B1204224526423N00557597EA0125501275 +B1204244526429N00557590EA0125601276 +B1204264526430N00557573EA0125501278 +B1204284526425N00557556EA0125501279 +B1204304526414N00557551EA0125601279 +B1204324526401N00557555EA0125901282 +B1204344526393N00557566EA0126301285 +B1204364526387N00557576EA0126701289 +B1204384526380N00557586EA0127101293 +B1204404526375N00557597EA0127501296 +B1204424526377N00557606EA0127401299 +B1204444526386N00557605EA0127301300 +B1204464526391N00557590EA0127401301 +B1204484526386N00557571EA0127701302 +B1204504526376N00557558EA0128101305 +B1204524526363N00557551EA0128401309 +B1204544526351N00557552EA0128401311 +B1204564526340N00557560EA0128401311 +B1204584526333N00557570EA0128701312 +B1205004526328N00557581EA0128601312 +B1205024526325N00557593EA0128301311 +B1205044526328N00557604EA0127801309 +B1205064526336N00557601EA0127701306 +B1205084526340N00557583EA0128201304 +B1205104526335N00557567EA0128301304 +B1205124526327N00557555EA0128301305 +B1205144526318N00557547EA0128001303 +B1205164526306N00557541EA0127801301 +B1205184526293N00557541EA0127801300 +B1205204526280N00557542EA0127701300 +B1205224526267N00557542EA0127601299 +B1205244526253N00557542EA0127401297 +B1205264526241N00557540EA0127101295 +B1205284526228N00557538EA0126701291 +B1205304526215N00557537EA0126401288 +B1205324526202N00557536EA0126301286 +B1205344526190N00557536EA0126001284 +B1205364526178N00557537EA0125601280 +B1205384526165N00557537EA0125401277 +B1205404526151N00557537EA0125201274 +B1205424526139N00557538EA0125001272 +B1205444526127N00557541EA0124901270 +B1205464526114N00557542EA0124801268 +B1205484526102N00557541EA0124401266 +B1205504526091N00557543EA0123801263 +B1205524526079N00557548EA0123401260 +B1205544526066N00557555EA0123101257 +B1205564526055N00557561EA0122601254 +B1205584526044N00557567EA0121801249 +B1206004526031N00557574EA0121301243 +B1206024526017N00557581EA0120901238 +B1206044526003N00557587EA0120401234 +B1206064525991N00557596EA0119901228 +B1206084525977N00557606EA0119501223 +B1206104525964N00557615EA0119201219 +B1206124525950N00557624EA0118901216 +B1206144525937N00557633EA0118601212 +B1206164525925N00557641EA0118401209 +B1206184525912N00557648EA0118001206 +B1206204525899N00557655EA0117701203 +B1206224525887N00557661EA0117401199 +B1206244525874N00557666EA0117101196 +B1206264525861N00557671EA0117001193 +B1206284525848N00557676EA0116901192 +B1206304525838N00557681EA0116501189 +B1206324525825N00557685EA0116101185 +B1206344525812N00557687EA0115801183 +B1206364525799N00557689EA0115501180 +B1206384525788N00557693EA0115101176 +B1206404525776N00557696EA0114701173 +B1206424525764N00557700EA0114301168 +B1206444525750N00557704EA0114201164 +B1206464525737N00557704EA0114301161 +B1206484525726N00557705EA0114101160 +B1206504525716N00557707EA0113801157 +B1206524525703N00557710EA0113701155 +B1206544525691N00557713EA0113601155 +B1206564525680N00557716EA0113401153 +B1206584525668N00557718EA0113101150 +B1207004525655N00557720EA0112701147 +B1207024525641N00557721EA0112401144 +B1207044525626N00557720EA0112401142 +B1207064525612N00557719EA0112501141 +B1207084525599N00557718EA0112701142 +B1207104525587N00557716EA0112701143 +B1207124525576N00557714EA0112501143 +B1207144525564N00557713EA0112201142 +B1207164525551N00557712EA0112001140 +B1207184525538N00557710EA0111901139 +B1207204525527N00557708EA0111601137 +B1207224525515N00557707EA0111101135 +B1207244525502N00557706EA0110801132 +B1207264525490N00557706EA0110801130 +B1207284525479N00557707EA0110901130 +B1207304525469N00557707EA0111201131 +B1207324525460N00557707EA0111101131 +B1207344525451N00557709EA0110701129 +B1207364525441N00557710EA0110301126 +B1207384525430N00557711EA0110001122 +B1207404525419N00557712EA0109501119 +B1207424525407N00557712EA0108901114 +B1207444525395N00557712EA0108701109 +B1207464525383N00557709EA0108601107 +B1207484525374N00557703EA0108601106 +B1207504525364N00557696EA0108601105 +B1207524525354N00557689EA0109301105 +B1207544525346N00557684EA0109801107 +B1207564525342N00557680EA0109901109 +B1207584525335N00557682EA0109901111 +B1208004525336N00557695EA0110001112 +B1208024525349N00557702EA0110201114 +B1208044525363N00557690EA0110601116 +B1208064525364N00557670EA0110801120 +B1208084525356N00557654EA0111201126 +B1208104525347N00557651EA0111601132 +B1208124525341N00557658EA0111801136 +B1208144525339N00557670EA0112001140 +B1208164525347N00557678EA0112101141 +B1208184525362N00557669EA0112601144 +B1208204525369N00557653EA0112601146 +B1208224525369N00557633EA0112601147 +B1208244525364N00557618EA0112801148 +B1208264525354N00557616EA0113001149 +B1208284525343N00557620EA0113701153 +B1208304525335N00557622EA0114401159 +B1208324525328N00557621EA0114801164 +B1208344525324N00557628EA0114701168 +B1208364525330N00557641EA0114801171 +B1208384525343N00557637EA0115001173 +B1208404525350N00557617EA0115401175 +B1208424525347N00557600EA0115801179 +B1208444525339N00557597EA0116001181 +B1208464525330N00557606EA0116501186 +B1208484525330N00557617EA0116501189 +B1208504525340N00557624EA0116501192 +B1208524525353N00557614EA0116701193 +B1208544525359N00557596EA0117201195 +B1208564525354N00557581EA0117601198 +B1208584525344N00557576EA0117901201 +B1209004525335N00557580EA0118201204 +B1209024525333N00557594EA0118201206 +B1209044525342N00557603EA0118201207 +B1209064525355N00557598EA0118301207 +B1209084525362N00557582EA0118301207 +B1209104525359N00557563EA0118901209 +B1209124525354N00557551EA0119701214 +B1209144525350N00557541EA0119901219 +B1209164525343N00557531EA0120101221 +B1209184525330N00557530EA0120401224 +B1209204525324N00557543EA0120601226 +B1209224525330N00557556EA0121001228 +B1209244525341N00557555EA0121401232 +B1209264525349N00557542EA0121701236 +B1209284525348N00557525EA0122101240 +B1209304525338N00557514EA0122501244 +B1209324525327N00557519EA0122701248 +B1209344525324N00557533EA0122901251 +B1209364525332N00557542EA0123001253 +B1209384525343N00557538EA0123101255 +B1209404525348N00557521EA0123501257 +B1209424525346N00557502EA0124201262 +B1209444525341N00557487EA0124701268 +B1209464525331N00557481EA0125301274 +B1209484525321N00557482EA0125601279 +B1209504525315N00557492EA0125501282 +B1209524525321N00557505EA0125501285 +B1209544525331N00557499EA0125601286 +B1209564525336N00557478EA0126201288 +B1209584525333N00557460EA0126701292 +B1210004525324N00557449EA0127201297 +B1210024525316N00557440EA0127501300 +B1210044525307N00557437EA0127501303 +B1210064525299N00557448EA0127601304 +B1210084525302N00557461EA0128001307 +B1210104525312N00557457EA0128201309 +B1210124525319N00557442EA0128801312 +B1210144525319N00557425EA0129201316 +B1210164525314N00557412EA0129401318 +B1210184525305N00557405EA0129601320 +B1210204525297N00557413EA0129701321 +B1210224525298N00557426EA0129801322 +B1210244525307N00557431EA0130201324 +B1210264525316N00557421EA0130501326 +B1210284525319N00557403EA0130701328 +B1210304525312N00557388EA0130901331 +B1210324525302N00557382EA0131101334 +B1210344525294N00557385EA0131201336 +B1210364525291N00557397EA0131301338 +B1210384525297N00557407EA0131401339 +B1210404525307N00557404EA0131501341 +B1210424525313N00557390EA0131701343 +B1210444525315N00557374EA0131801345 +B1210464525313N00557360EA0132001347 +B1210484525308N00557347EA0132101348 +B1210504525300N00557339EA0132201349 +B1210524525291N00557339EA0132301350 +B1210544525284N00557349EA0132301351 +B1210564525287N00557363EA0132501351 +B1210584525296N00557362EA0132701352 +B1211004525302N00557346EA0132801353 +B1211024525300N00557329EA0132801354 +B1211044525292N00557315EA0132901355 +B1211064525281N00557309EA0132901355 +B1211084525272N00557314EA0132701355 +B1211104525271N00557329EA0132501353 +B1211124525282N00557330EA0132401352 +B1211144525291N00557317EA0132401352 +B1211164525295N00557301EA0132401352 +B1211184525296N00557282EA0132401352 +B1211204525292N00557264EA0132401352 +B1211224525284N00557251EA0132201351 +B1211244525274N00557243EA0131801348 +B1211264525261N00557238EA0131501345 +B1211284525248N00557231EA0131401342 +B1211304525235N00557224EA0131401341 +B1211324525224N00557219EA0131401341 +B1211344525214N00557211EA0131101339 +B1211364525203N00557200EA0130901337 +B1211384525192N00557188EA0131001336 +B1211404525182N00557177EA0131001336 +B1211424525173N00557168EA0131001337 +B1211444525164N00557162EA0130901337 +B1211464525155N00557154EA0130801335 +B1211484525145N00557146EA0130601333 +B1211504525133N00557137EA0130501332 +B1211524525123N00557127EA0130401331 +B1211544525112N00557115EA0130201330 +B1211564525100N00557104EA0130101328 +B1211584525088N00557094EA0129801327 +B1212004525076N00557084EA0129601325 +B1212024525063N00557074EA0129401323 +B1212044525051N00557063EA0129101321 +B1212064525040N00557054EA0128601317 +B1212084525027N00557043EA0128001312 +B1212104525015N00557031EA0127701308 +B1212124525003N00557022EA0127401305 +B1212144524991N00557015EA0127001300 +B1212164524977N00557010EA0126501295 +B1212184524964N00557007EA0126201291 +B1212204524950N00557005EA0125701287 +B1212224524936N00557004EA0125301282 +B1212244524922N00557003EA0124901277 +B1212264524911N00557000EA0124301272 +B1212284524899N00557000EA0123801266 +B1212304524886N00557001EA0123501260 +B1212324524875N00557001EA0123501256 +B1212344524865N00557000EA0123401253 +B1212364524853N00557001EA0123401253 +B1212384524841N00557002EA0123501254 +B1212404524830N00557004EA0123501255 +B1212424524817N00557006EA0123601256 +B1212444524805N00557007EA0123901258 +B1212464524794N00557009EA0124301261 +B1212484524784N00557010EA0124601264 +B1212504524777N00557019EA0124701267 +B1212524524778N00557036EA0125101269 +B1212544524787N00557044EA0125401272 +B1212564524798N00557033EA0125601274 +B1212584524797N00557012EA0125701278 +B1213004524784N00557007EA0125901281 +B1213024524775N00557019EA0126401285 +B1213044524777N00557034EA0126801288 +B1213064524786N00557040EA0127201293 +B1213084524796N00557037EA0127501297 +B1213104524801N00557024EA0127601301 +B1213124524799N00557006EA0127601303 +B1213144524787N00557000EA0127901305 +B1213164524777N00557009EA0128201308 +B1213184524778N00557022EA0128601310 +B1213204524788N00557031EA0129101315 +B1213224524798N00557029EA0129401319 +B1213244524806N00557017EA0129801322 +B1213264524805N00556999EA0130101326 +B1213284524796N00556987EA0130301328 +B1213304524784N00556992EA0130501330 +B1213324524781N00557006EA0130901331 +B1213344524791N00557018EA0131401337 +B1213364524800N00557019EA0131901342 +B1213384524807N00557012EA0132101345 +B1213404524805N00556993EA0132201348 +B1213424524793N00556982EA0132701352 +B1213444524783N00556990EA0132901355 +B1213464524785N00557006EA0133201358 +B1213484524796N00557012EA0133601362 +B1213504524805N00557001EA0134001364 +B1213524524807N00556982EA0134501368 +B1213544524801N00556963EA0134701372 +B1213564524787N00556959EA0135001375 +B1213584524779N00556972EA0135101377 +B1214004524784N00556985EA0135301380 +B1214024524795N00556986EA0135701382 +B1214044524802N00556973EA0136201386 +B1214064524801N00556956EA0136501390 +B1214084524793N00556942EA0136801394 +B1214104524782N00556939EA0136901396 +B1214124524773N00556950EA0137001398 +B1214144524776N00556964EA0137201400 +B1214164524787N00556968EA0137701402 +B1214184524798N00556963EA0138301407 +B1214204524807N00556956EA0138701412 +B1214224524814N00556946EA0138801415 +B1214244524815N00556927EA0138701417 +B1214264524807N00556909EA0139101419 +B1214284524793N00556911EA0139401421 +B1214304524787N00556921EA0139501423 +B1214324524792N00556933EA0139801425 +B1214344524802N00556933EA0140101428 +B1214364524809N00556920EA0140201431 +B1214384524811N00556903EA0140401431 +B1214404524805N00556886EA0140601433 +B1214424524793N00556881EA0140701435 +B1214444524784N00556890EA0140901436 +B1214464524783N00556903EA0141101439 +B1214484524789N00556913EA0141301441 +B1214504524800N00556915EA0141601443 +B1214524524811N00556909EA0141901446 +B1214544524818N00556896EA0141901448 +B1214564524818N00556877EA0141701449 +B1214584524810N00556862EA0141701449 +B1215004524797N00556864EA0141901449 +B1215024524792N00556876EA0142101450 +B1215044524797N00556888EA0142301451 +B1215064524808N00556891EA0142501453 +B1215084524819N00556885EA0142601454 +B1215104524826N00556876EA0142501454 +B1215124524829N00556862EA0142201453 +B1215144524827N00556845EA0141901451 +B1215164524815N00556837EA0141701448 +B1215184524803N00556841EA0141701447 +B1215204524798N00556850EA0141801446 +B1215224524798N00556860EA0141901447 +B1215244524800N00556870EA0142001447 +B1215264524803N00556881EA0142101449 +B1215284524804N00556891EA0142101449 +B1215304524806N00556898EA0142001448 +B1215324524816N00556898EA0142201448 +B1215344524824N00556885EA0142101448 +B1215364524824N00556870EA0141701447 +B1215384524818N00556855EA0141401444 +B1215404524809N00556840EA0141501443 +B1215424524803N00556823EA0141701443 +B1215444524798N00556807EA0141801445 +B1215464524793N00556789EA0141901446 +B1215484524787N00556771EA0142201447 +B1215504524783N00556755EA0142401450 +B1215524524779N00556741EA0142201451 +B1215544524773N00556725EA0141901451 +B1215564524766N00556709EA0141801450 +B1215584524759N00556693EA0141601448 +B1216004524751N00556679EA0141101445 +B1216024524744N00556664EA0140601440 +B1216044524737N00556648EA0140101435 +B1216064524731N00556632EA0139701431 +B1216084524725N00556617EA0139201425 +B1216104524717N00556601EA0138801420 +B1216124524710N00556584EA0138501416 +B1216144524703N00556567EA0138301413 +B1216164524696N00556550EA0137901409 +B1216184524690N00556532EA0137601405 +B1216204524682N00556516EA0137501403 +B1216224524676N00556502EA0137401402 +B1216244524669N00556487EA0137401401 +B1216264524663N00556471EA0137601401 +B1216284524659N00556455EA0137601402 +B1216304524654N00556440EA0137501401 +B1216324524647N00556424EA0137401400 +B1216344524640N00556407EA0137401400 +B1216364524634N00556392EA0137301400 +B1216384524628N00556380EA0137101399 +B1216404524621N00556367EA0136701397 +B1216424524613N00556354EA0136201393 +B1216444524606N00556340EA0135801388 +B1216464524600N00556325EA0135601385 +B1216484524592N00556311EA0135501382 +B1216504524585N00556296EA0135501381 +B1216524524578N00556281EA0135801381 +B1216544524572N00556267EA0136001382 +B1216564524567N00556253EA0136101384 +B1216584524563N00556238EA0136201385 +B1217004524560N00556221EA0136501387 +B1217024524558N00556205EA0137101391 +B1217044524554N00556192EA0137501395 +B1217064524545N00556190EA0137701399 +B1217084524537N00556203EA0138101403 +B1217104524538N00556217EA0138501407 +B1217124524548N00556220EA0138701411 +B1217144524558N00556205EA0138901414 +B1217164524560N00556187EA0139201417 +B1217184524558N00556170EA0139701422 +B1217204524556N00556155EA0140301427 +B1217224524549N00556144EA0140801432 +B1217244524540N00556138EA0141101437 +B1217264524531N00556148EA0141101440 +B1217284524533N00556164EA0141401444 +B1217304524545N00556164EA0141901447 +B1217324524554N00556148EA0142501452 +B1217344524553N00556133EA0142901456 +B1217364524546N00556123EA0143201459 +B1217384524536N00556128EA0143401463 +B1217404524536N00556142EA0143601465 +B1217424524546N00556150EA0144101467 +B1217444524558N00556143EA0144501470 +B1217464524563N00556129EA0144801473 +B1217484524566N00556114EA0145101476 +B1217504524565N00556102EA0145101478 +B1217524524561N00556090EA0145201478 +B1217544524551N00556082EA0145601480 +B1217564524540N00556085EA0146201482 +B1217584524531N00556091EA0146801487 +B1218004524525N00556098EA0147101492 +B1218024524526N00556112EA0147101496 +B1218044524537N00556122EA0147401499 +B1218064524549N00556114EA0147701502 +B1218084524554N00556095EA0148101506 +B1218104524548N00556080EA0148701510 +B1218124524537N00556078EA0149201515 +B1218144524529N00556088EA0149501519 +B1218164524528N00556103EA0149801523 +B1218184524536N00556113EA0150001526 +B1218204524548N00556106EA0150201529 +B1218224524555N00556088EA0150801532 +B1218244524551N00556071EA0151301538 +B1218264524543N00556059EA0152001545 +B1218284524536N00556049EA0152701552 +B1218304524528N00556043EA0153201558 +B1218324524519N00556050EA0153501563 +B1218344524518N00556064EA0153901568 +B1218364524529N00556075EA0154401572 +B1218384524540N00556064EA0154801576 +B1218404524544N00556045EA0155501581 +B1218424524540N00556030EA0156201589 +B1218444524534N00556019EA0156801595 +B1218464524526N00556013EA0156901600 +B1218484524516N00556022EA0157101604 +B1218504524517N00556039EA0157301608 +B1218524524529N00556045EA0157701612 +B1218544524544N00556037EA0158301615 +B1218564524553N00556021EA0159101621 +B1218584524554N00556004EA0159501627 +B1219004524550N00555991EA0159701632 +B1219024524542N00555987EA0159701634 +B1219044524535N00555999EA0159801636 +B1219064524540N00556016EA0160201638 +B1219084524556N00556020EA0160701640 +B1219104524573N00556015EA0161501646 +B1219124524586N00556007EA0162301653 +B1219144524592N00555995EA0162701658 +B1219164524588N00555980EA0163001662 +B1219184524579N00555980EA0163401666 +B1219204524575N00555997EA0163701669 +B1219224524587N00556013EA0164101672 +B1219244524603N00556012EA0164801676 +B1219264524613N00556004EA0165001681 +B1219284524619N00555994EA0164901683 +B1219304524618N00555980EA0164701683 +B1219324524610N00555971EA0164701682 +B1219344524597N00555974EA0165401684 +B1219364524587N00555979EA0166301688 +B1219384524581N00555981EA0166701694 +B1219404524577N00555983EA0166701697 +B1219424524576N00555998EA0167001698 +B1219444524585N00556015EA0167701702 +B1219464524599N00556014EA0168201705 +B1219484524606N00556002EA0168301709 +B1219504524601N00555987EA0168901714 +B1219524524593N00555980EA0169601721 +B1219544524586N00555987EA0169901726 +B1219564524583N00556000EA0170101730 +B1219584524586N00556015EA0170301733 +B1220004524596N00556026EA0170901736 +B1220024524608N00556023EA0171501742 +B1220044524613N00556013EA0171901746 +B1220064524610N00556001EA0172501753 +B1220084524600N00556000EA0172801758 +B1220104524591N00556012EA0173101762 +B1220124524590N00556031EA0173701766 +B1220144524600N00556043EA0174101770 +B1220164524611N00556042EA0174501775 +B1220184524617N00556031EA0174801778 +B1220204524614N00556018EA0175201783 +B1220224524603N00556016EA0175401786 +B1220244524593N00556027EA0175901790 +B1220264524586N00556043EA0176501795 +B1220284524586N00556060EA0176801799 +B1220304524592N00556075EA0177101802 +B1220324524603N00556079EA0177201805 +B1220344524611N00556068EA0177501808 +B1220364524612N00556054EA0178001811 +B1220384524603N00556047EA0178401815 +B1220404524592N00556048EA0179001821 +B1220424524582N00556052EA0179201825 +B1220444524574N00556063EA0179201827 +B1220464524572N00556083EA0179301829 +B1220484524581N00556097EA0179501831 +B1220504524593N00556093EA0179601832 +B1220524524599N00556081EA0179901834 +B1220544524598N00556068EA0180301837 +B1220564524594N00556057EA0180601841 +B1220584524588N00556048EA0180701843 +B1221004524582N00556037EA0181001844 +B1221024524578N00556025EA0181301848 +B1221044524575N00556013EA0181801851 +B1221064524573N00556000EA0182201856 +B1221084524569N00555989EA0182401859 +B1221104524562N00555981EA0182601861 +B1221124524553N00555983EA0182901863 +B1221144524548N00555994EA0183101865 +B1221164524551N00556008EA0183101867 +B1221184524560N00556018EA0183101867 +B1221204524573N00556019EA0183101867 +B1221224524584N00556013EA0183201867 +B1221244524591N00556001EA0183301868 +B1221264524596N00555987EA0183501869 +B1221284524600N00555976EA0183701871 +B1221304524601N00555965EA0183601871 +B1221324524602N00555952EA0183501870 +B1221344524608N00555936EA0183801870 +B1221364524613N00555919EA0184201872 +B1221384524615N00555907EA0184601876 +B1221404524617N00555896EA0184601878 +B1221424524620N00555881EA0184701879 +B1221444524623N00555865EA0184801880 +B1221464524626N00555850EA0184901881 +B1221484524628N00555834EA0185101883 +B1221504524631N00555818EA0185301886 +B1221524524633N00555801EA0185401887 +B1221544524634N00555785EA0185301888 +B1221564524635N00555769EA0185201887 +B1221584524634N00555752EA0185101886 +B1222004524633N00555734EA0185001885 +B1222024524633N00555715EA0185101885 +B1222044524631N00555697EA0185301886 +B1222064524629N00555683EA0185301887 +B1222084524628N00555670EA0185101886 +B1222104524625N00555654EA0185001885 +B1222124524621N00555640EA0185201885 +B1222144524617N00555627EA0185801887 +B1222164524614N00555616EA0186301890 +B1222184524611N00555605EA0186501894 +B1222204524609N00555592EA0186601896 +B1222224524605N00555575EA0186701897 +B1222244524600N00555557EA0187301901 +B1222264524594N00555541EA0187801906 +B1222284524590N00555526EA0188001910 +B1222304524584N00555510EA0187801912 +B1222324524576N00555492EA0187801912 +B1222344524567N00555472EA0188401916 +B1222364524560N00555455EA0188701921 +B1222384524554N00555442EA0188601923 +B1222404524546N00555429EA0188501923 +B1222424524537N00555416EA0188401922 +B1222444524529N00555403EA0188301920 +B1222464524521N00555390EA0188201919 +B1222484524512N00555377EA0188201918 +B1222504524504N00555366EA0188101918 +B1222524524495N00555354EA0188101917 +B1222544524485N00555342EA0188301917 +B1222564524476N00555329EA0188601919 +B1222584524466N00555316EA0189001921 +B1223004524455N00555307EA0189601925 +B1223024524444N00555308EA0190901930 +B1223044524439N00555303EA0191601938 +B1223064524434N00555296EA0192201945 +B1223084524424N00555302EA0192901952 +B1223104524423N00555317EA0193501958 +B1223124524439N00555319EA0194301966 +B1223144524451N00555307EA0195501976 +B1223164524449N00555293EA0196001986 +B1223184524441N00555283EA0196701994 +B1223204524432N00555278EA0197302002 +B1223224524424N00555290EA0197902009 +B1223244524427N00555307EA0198602016 +B1223264524440N00555311EA0199602023 +B1223284524449N00555297EA0200302031 +B1223304524449N00555283EA0200802038 +B1223324524446N00555270EA0201102042 +B1223344524436N00555262EA0201702047 +B1223364524427N00555269EA0202402053 +B1223384524426N00555283EA0203002060 +B1223404524435N00555291EA0203602066 +B1223424524448N00555286EA0204502074 +B1223444524453N00555272EA0205102081 +B1223464524451N00555256EA0205602088 +B1223484524447N00555243EA0206102094 +B1223504524440N00555235EA0206502099 +B1223524524431N00555238EA0207302105 +B1223544524427N00555252EA0207802110 +B1223564524436N00555267EA0208502116 +B1223584524449N00555264EA0209202124 +B1224004524454N00555246EA0209602129 +B1224024524452N00555229EA0210402137 +B1224044524446N00555222EA0211002143 +B1224064524437N00555223EA0211602149 +B1224084524435N00555236EA0212002155 +B1224104524440N00555251EA0212702160 +B1224124524452N00555256EA0213402166 +B1224144524464N00555244EA0213902171 +B1224164524470N00555229EA0214402178 +B1224184524467N00555215EA0214902184 +B1224204524461N00555207EA0215402188 +B1224224524453N00555208EA0215802193 +B1224244524448N00555220EA0216102197 +B1224264524455N00555235EA0216702201 +B1224284524469N00555240EA0217402206 +B1224304524483N00555234EA0218002213 +B1224324524493N00555224EA0218402219 +B1224344524497N00555211EA0218602223 +B1224364524495N00555196EA0218802226 +B1224384524487N00555188EA0219102228 +B1224404524479N00555180EA0219902233 +B1224424524473N00555171EA0220902239 +B1224444524468N00555164EA0221402246 +B1224464524461N00555155EA0221802251 +B1224484524452N00555144EA0222102255 +B1224504524444N00555136EA0222302259 +B1224524524434N00555130EA0222502261 +B1224544524423N00555123EA0222702263 +B1224564524413N00555117EA0222702265 +B1224584524403N00555113EA0222702266 +B1225004524392N00555109EA0222902267 +B1225024524382N00555103EA0223002268 +B1225044524371N00555097EA0223202270 +B1225064524361N00555091EA0223402271 +B1225084524350N00555085EA0223502273 +B1225104524340N00555078EA0223602274 +B1225124524330N00555073EA0223702276 +B1225144524320N00555066EA0223802277 +B1225164524310N00555059EA0223902278 +B1225184524299N00555052EA0224102279 +B1225204524288N00555045EA0224302282 +B1225224524279N00555037EA0224402283 +B1225244524269N00555028EA0224502284 +B1225264524258N00555018EA0224602285 +B1225284524248N00555007EA0224702287 +B1225304524238N00554995EA0224602287 +B1225324524226N00554984EA0224302286 +B1225344524215N00554974EA0224102284 +B1225364524204N00554966EA0223602281 +B1225384524193N00554958EA0223202277 +B1225404524181N00554949EA0223002274 +B1225424524170N00554940EA0222902271 +B1225444524158N00554933EA0222602269 +B1225464524148N00554925EA0222502267 +B1225484524138N00554917EA0222402265 +B1225504524128N00554909EA0222202263 +B1225524524117N00554900EA0222302262 +B1225544524107N00554892EA0222302262 +B1225564524097N00554885EA0222502263 +B1225584524087N00554876EA0222502263 +B1226004524077N00554867EA0222502263 +B1226024524066N00554858EA0222402263 +B1226044524055N00554850EA0222402263 +B1226064524044N00554841EA0222202262 +B1226084524032N00554833EA0222202261 +B1226104524022N00554826EA0222002260 +B1226124524011N00554820EA0221602257 +B1226144523999N00554813EA0221502255 +B1226164523988N00554805EA0221502254 +B1226184523978N00554799EA0221402253 +B1226204523967N00554793EA0221202251 +B1226224523955N00554786EA0221102249 +B1226244523944N00554778EA0221402248 +B1226264523936N00554775EA0221602249 +B1226284523928N00554770EA0221802250 +B1226304523919N00554762EA0222102253 +B1226324523909N00554755EA0222502257 +B1226344523901N00554750EA0223002261 +B1226364523895N00554745EA0223102264 +B1226384523887N00554739EA0223202266 +B1226404523878N00554730EA0223502268 +B1226424523870N00554722EA0223802272 +B1226444523861N00554714EA0224002274 +B1226464523852N00554706EA0224202277 +B1226484523843N00554696EA0224502280 +B1226504523836N00554684EA0224702283 +B1226524523828N00554675EA0224902285 +B1226544523819N00554666EA0224902286 +B1226564523811N00554658EA0225002288 +B1226584523803N00554651EA0225102288 +B1227004523795N00554646EA0225002289 +B1227024523786N00554643EA0224902288 +B1227044523776N00554640EA0224902287 +B1227064523765N00554636EA0225002288 +B1227084523756N00554634EA0225102289 +B1227104523746N00554635EA0224902288 +B1227124523734N00554634EA0224802287 +B1227144523722N00554633EA0224902287 +B1227164523713N00554631EA0224902288 +B1227184523703N00554626EA0224902287 +B1227204523693N00554623EA0225102288 +B1227224523684N00554621EA0225302290 +B1227244523674N00554618EA0225202290 +B1227264523663N00554616EA0225102289 +B1227284523651N00554614EA0225002288 +B1227304523639N00554609EA0224902287 +B1227324523628N00554606EA0224902287 +B1227344523616N00554602EA0224802286 +B1227364523603N00554597EA0224802285 +B1227384523589N00554594EA0225002286 +B1227404523576N00554591EA0225002286 +B1227424523562N00554587EA0225202287 +B1227444523548N00554584EA0225302289 +B1227464523536N00554581EA0225302289 +B1227484523522N00554576EA0225302289 +B1227504523509N00554569EA0225502290 +B1227524523497N00554563EA0225702292 +B1227544523485N00554556EA0225702293 +B1227564523473N00554551EA0225702293 +B1227584523460N00554546EA0225702293 +B1228004523447N00554541EA0225802294 +B1228024523434N00554535EA0225802294 +B1228044523421N00554529EA0225802294 +B1228064523405N00554524EA0225902295 +B1228084523392N00554520EA0226002296 +B1228104523379N00554516EA0226002296 +B1228124523365N00554511EA0226202297 +B1228144523352N00554507EA0226302299 +B1228164523339N00554505EA0226402300 +B1228184523327N00554502EA0226302301 +B1228204523314N00554499EA0226102300 +B1228224523300N00554496EA0226102300 +B1228244523287N00554493EA0226002299 +B1228264523274N00554489EA0225902298 +B1228284523260N00554485EA0226002298 +B1228304523246N00554482EA0225902298 +B1228324523232N00554478EA0225902298 +B1228344523219N00554476EA0225902297 +B1228364523204N00554473EA0225902297 +B1228384523191N00554468EA0225902297 +B1228404523177N00554463EA0226002297 +B1228424523164N00554459EA0225902297 +B1228444523152N00554455EA0225802297 +B1228464523139N00554450EA0225802296 +B1228484523125N00554446EA0225802297 +B1228504523112N00554442EA0225902297 +B1228524523099N00554440EA0225802297 +B1228544523085N00554437EA0225802296 +B1228564523072N00554435EA0225802297 +B1228584523059N00554432EA0225902297 +B1229004523046N00554430EA0225802297 +B1229024523033N00554429EA0225702296 +B1229044523020N00554425EA0225702295 +B1229064523007N00554421EA0225902296 +B1229084522995N00554418EA0226302298 +B1229104522983N00554416EA0226502300 +B1229124522972N00554413EA0226502302 +B1229144522959N00554408EA0226502302 +B1229164522945N00554404EA0226602303 +B1229184522932N00554402EA0226702304 +B1229204522918N00554398EA0226702305 +B1229224522904N00554395EA0226702305 +B1229244522893N00554392EA0226402304 +B1229264522880N00554386EA0226202302 +B1229284522867N00554380EA0226602302 +B1229304522856N00554375EA0226902303 +B1229324522845N00554371EA0226902303 +B1229344522830N00554366EA0227002304 +B1229364522816N00554361EA0227202306 +B1229384522802N00554357EA0227302308 +B1229404522788N00554356EA0227302309 +B1229424522774N00554356EA0227302309 +B1229444522761N00554354EA0227202309 +B1229464522748N00554353EA0226802308 +B1229484522733N00554350EA0226402305 +B1229504522719N00554345EA0226202303 +B1229524522706N00554339EA0225902300 +B1229544522694N00554331EA0225702297 +B1229564522681N00554324EA0225502294 +B1229584522667N00554317EA0225302292 +B1230004522654N00554310EA0225002290 +B1230024522640N00554305EA0224602286 +B1230044522626N00554299EA0224302283 +B1230064522613N00554293EA0224202280 +B1230084522599N00554287EA0224202279 +B1230104522586N00554284EA0224302279 +B1230124522573N00554281EA0224302279 +B1230144522561N00554275EA0224202278 +B1230164522550N00554267EA0224002277 +B1230184522537N00554260EA0223802275 +B1230204522524N00554255EA0223602274 +B1230224522511N00554253EA0223302272 +B1230244522498N00554249EA0223002269 +B1230264522484N00554246EA0222802266 +B1230284522470N00554243EA0222602264 +B1230304522457N00554238EA0222602263 +B1230324522445N00554234EA0222402261 +B1230344522432N00554230EA0222102259 +B1230364522419N00554226EA0221902257 +B1230384522405N00554221EA0221802255 +B1230404522392N00554217EA0221702254 +B1230424522380N00554212EA0221602253 +B1230444522366N00554207EA0221502252 +B1230464522353N00554202EA0221502251 +B1230484522341N00554197EA0221502251 +B1230504522329N00554192EA0221302250 +B1230524522316N00554187EA0221202248 +B1230544522303N00554182EA0221102248 +B1230564522291N00554177EA0220902246 +B1230584522278N00554174EA0220702245 +B1231004522266N00554171EA0220702243 +B1231024522253N00554166EA0220702243 +B1231044522240N00554162EA0220602243 +B1231064522228N00554158EA0220602242 +B1231084522216N00554154EA0220702242 +B1231104522204N00554151EA0220802244 +B1231124522192N00554148EA0220702244 +B1231144522180N00554144EA0220402243 +B1231164522166N00554140EA0220302241 +B1231184522153N00554137EA0220302241 +B1231204522141N00554132EA0220402241 +B1231224522129N00554126EA0220502242 +B1231244522117N00554122EA0220502242 +B1231264522105N00554118EA0220402241 +B1231284522092N00554114EA0220402241 +B1231304522079N00554110EA0220602241 +B1231324522067N00554106EA0221102243 +B1231344522058N00554100EA0221202245 +B1231364522050N00554091EA0221102245 +B1231384522038N00554084EA0221202245 +B1231404522027N00554077EA0221402247 +B1231424522018N00554071EA0221302248 +B1231444522010N00554065EA0221002248 +B1231464522000N00554057EA0220602246 +B1231484521988N00554050EA0220302244 +B1231504521976N00554043EA0220202242 +B1231524521965N00554035EA0220102240 +B1231544521954N00554026EA0220102239 +B1231564521943N00554018EA0220402239 +B1231584521934N00554012EA0220802241 +B1232004521926N00554008EA0221202244 +B1232024521917N00554002EA0221502247 +B1232044521908N00553995EA0221702250 +B1232064521899N00553989EA0222202254 +B1232084521891N00553984EA0222502258 +B1232104521883N00553979EA0222802261 +B1232124521873N00553975EA0223102264 +B1232144521862N00553971EA0223502268 +B1232164521851N00553965EA0223902273 +B1232184521841N00553957EA0224402277 +B1232204521832N00553952EA0224702281 +B1232224521823N00553947EA0224902284 +B1232244521813N00553939EA0225102287 +B1232264521802N00553933EA0225402289 +B1232284521792N00553926EA0226002293 +B1232304521782N00553916EA0226402297 +B1232324521772N00553909EA0226902302 +B1232344521761N00553903EA0227502307 +B1232364521753N00553894EA0228302314 +B1232384521746N00553883EA0229302321 +B1232404521740N00553873EA0230302331 +B1232424521732N00553865EA0231102340 +B1232444521724N00553858EA0231902349 +B1232464521716N00553850EA0232702358 +B1232484521707N00553844EA0233302366 +B1232504521698N00553836EA0233702372 +B1232524521689N00553829EA0234102378 +B1232544521679N00553821EA0234502382 +B1232564521669N00553811EA0235302388 +B1232584521661N00553800EA0236002395 +B1233004521653N00553790EA0236102400 +B1233024521643N00553780EA0236302403 +B1233044521634N00553771EA0236602407 +B1233064521626N00553763EA0236502409 +B1233084521617N00553753EA0236502409 +B1233104521607N00553741EA0237102411 +B1233124521599N00553731EA0237702415 +B1233144521592N00553724EA0237902418 +B1233164521583N00553716EA0238202420 +B1233184521573N00553708EA0238802424 +B1233204521563N00553698EA0239302429 +B1233224521554N00553688EA0239602433 +B1233244521543N00553678EA0240002437 +B1233264521534N00553667EA0240202440 +B1233284521524N00553655EA0240302443 +B1233304521514N00553641EA0240902446 +B1233324521509N00553623EA0241502450 +B1233344521503N00553609EA0241802454 +B1233364521495N00553597EA0242202458 +B1233384521490N00553582EA0242602462 +B1233404521487N00553567EA0242702465 +B1233424521483N00553550EA0242802467 +B1233444521475N00553535EA0242902469 +B1233464521469N00553520EA0243002470 +B1233484521464N00553502EA0243102471 +B1233504521458N00553486EA0243302473 +B1233524521450N00553471EA0243502475 +B1233544521443N00553457EA0243402476 +B1233564521433N00553444EA0243102476 +B1233584521421N00553430EA0243002475 +B1234004521408N00553416EA0243402475 +B1234024521399N00553404EA0243402477 +B1234044521391N00553393EA0243002476 +B1234064521382N00553380EA0243002475 +B1234084521372N00553369EA0243102476 +B1234104521362N00553364EA0242902475 +B1234124521349N00553360EA0243202474 +B1234144521336N00553360EA0243502476 +B1234164521325N00553365EA0243502477 +B1234184521314N00553369EA0243102477 +B1234204521301N00553369EA0242802474 +B1234224521289N00553364EA0242402470 +B1234244521279N00553359EA0242002466 +B1234264521266N00553355EA0241602461 +B1234284521254N00553350EA0241502458 +B1234304521242N00553345EA0241502457 +B1234324521231N00553341EA0241302456 +B1234344521221N00553336EA0240802453 +B1234364521211N00553330EA0240202449 +B1234384521199N00553324EA0239802444 +B1234404521189N00553320EA0239302440 +B1234424521179N00553318EA0238602434 +B1234444521168N00553316EA0238002426 +B1234464521156N00553312EA0237602420 +B1234484521144N00553306EA0237502416 +B1234504521135N00553300EA0237002411 +B1234524521125N00553292EA0236402405 +B1234544521114N00553284EA0236102400 +B1234564521102N00553281EA0235802396 +B1234584521092N00553278EA0235502393 +B1235004521082N00553273EA0235002389 +B1235024521071N00553267EA0234702384 +B1235044521060N00553263EA0234402382 +B1235064521050N00553261EA0234002379 +B1235084521040N00553260EA0233402374 +B1235104521028N00553257EA0233002369 +B1235124521017N00553252EA0232702366 +B1235144521009N00553247EA0232302362 +B1235164520999N00553241EA0231802357 +B1235184520989N00553234EA0231502353 +B1235204520978N00553229EA0231502350 +B1235224520969N00553224EA0231302349 +B1235244520960N00553219EA0231002345 +B1235264520948N00553213EA0230802343 +B1235284520938N00553210EA0230802343 +B1235304520928N00553206EA0230602341 +B1235324520918N00553201EA0230502340 +B1235344520908N00553196EA0230302339 +B1235364520899N00553191EA0229902337 +B1235384520890N00553184EA0229502333 +B1235404520879N00553178EA0229102329 +B1235424520869N00553173EA0228702326 +B1235444520861N00553167EA0228002322 +B1235464520852N00553161EA0227202315 +B1235484520841N00553155EA0226802310 +B1235504520832N00553148EA0226602307 +B1235524520824N00553143EA0226002301 +B1235544520814N00553135EA0225702297 +B1235564520804N00553130EA0225402293 +B1235584520795N00553127EA0225202290 +B1236004520786N00553120EA0224902286 +B1236024520777N00553113EA0225102285 +B1236044520769N00553106EA0225102284 +B1236064520760N00553099EA0225102284 +B1236084520749N00553091EA0225102285 +B1236104520740N00553083EA0225302286 +B1236124520731N00553075EA0225102286 +B1236144520721N00553067EA0224802285 +B1236164520712N00553058EA0224602283 +B1236184520704N00553050EA0224302280 +B1236204520695N00553041EA0224202279 +B1236224520686N00553034EA0224302279 +B1236244520678N00553027EA0224202278 +B1236264520670N00553020EA0223802276 +B1236284520659N00553014EA0223702274 +B1236304520648N00553007EA0223902274 +B1236324520639N00552999EA0224002275 +B1236344520629N00552991EA0224202277 +B1236364520619N00552983EA0224602279 +B1236384520611N00552975EA0224902282 +B1236404520603N00552969EA0225002284 +B1236424520594N00552965EA0224602285 +B1236444520585N00552961EA0224102283 +B1236464520576N00552956EA0223702279 +B1236484520567N00552950EA0223102274 +B1236504520555N00552944EA0222802269 +B1236524520543N00552936EA0223002265 +B1236544520534N00552927EA0223202264 +B1236564520525N00552921EA0223402264 +B1236584520515N00552915EA0223302265 +B1237004520503N00552909EA0223202264 +B1237024520491N00552904EA0223302265 +B1237044520480N00552898EA0223302266 +B1237064520470N00552892EA0223302266 +B1237084520459N00552885EA0223502267 +B1237104520448N00552877EA0223902269 +B1237124520440N00552869EA0224202273 +B1237144520433N00552862EA0224002275 +B1237164520424N00552856EA0223702276 +B1237184520415N00552850EA0223502274 +B1237204520405N00552842EA0223502274 +B1237224520396N00552834EA0223602275 +B1237244520387N00552825EA0223902276 +B1237264520377N00552816EA0224402278 +B1237284520369N00552807EA0224802282 +B1237304520362N00552796EA0225202286 +B1237324520354N00552783EA0225902291 +B1237344520344N00552774EA0226702297 +B1237364520336N00552768EA0227002303 +B1237384520328N00552765EA0227402307 +B1237404520319N00552759EA0228002312 +B1237424520310N00552752EA0228702319 +B1237444520301N00552748EA0229202325 +B1237464520292N00552743EA0229902331 +B1237484520283N00552740EA0230402338 +B1237504520275N00552736EA0230802343 +B1237524520265N00552731EA0231202347 +B1237544520253N00552725EA0231802353 +B1237564520243N00552720EA0232202359 +B1237584520233N00552719EA0232502363 +B1238004520223N00552717EA0232802366 +B1238024520214N00552711EA0233102369 +B1238044520205N00552704EA0233402372 +B1238064520197N00552694EA0233602374 +B1238084520189N00552684EA0233902378 +B1238104520180N00552675EA0234102380 +B1238124520170N00552668EA0234102382 +B1238144520160N00552659EA0234002382 +B1238164520147N00552650EA0234102382 +B1238184520135N00552642EA0234602383 +B1238204520123N00552636EA0235002386 +B1238224520112N00552630EA0235302389 +B1238244520101N00552621EA0236002394 +B1238264520091N00552613EA0236702399 +B1238284520081N00552606EA0237302406 +B1238304520072N00552599EA0237802411 +B1238324520063N00552593EA0238102416 +B1238344520054N00552587EA0238002419 +B1238364520045N00552581EA0237702421 +B1238384520034N00552573EA0237602421 +B1238404520025N00552569EA0237502420 +B1238424520018N00552565EA0237202418 +B1238444520009N00552560EA0237002415 +B1238464519998N00552551EA0237002413 +B1238484519989N00552542EA0237302413 +B1238504519982N00552534EA0237402413 +B1238524519974N00552527EA0237502413 +B1238544519965N00552519EA0237702414 +B1238564519957N00552512EA0237902416 +B1238584519949N00552507EA0237902418 +B1239004519939N00552503EA0237802417 +B1239024519928N00552496EA0238702419 +B1239044519920N00552489EA0239802423 +B1239064519912N00552484EA0240302430 +B1239084519903N00552480EA0240502433 +B1239104519893N00552475EA0240502436 +B1239124519882N00552469EA0240402437 +B1239144519873N00552462EA0240202437 +B1239164519863N00552455EA0239902436 +B1239184519855N00552446EA0239702433 +B1239204519845N00552437EA0239602432 +B1239224519835N00552429EA0239602432 +B1239244519825N00552422EA0239402431 +B1239264519815N00552413EA0239102429 +B1239284519804N00552404EA0238802427 +B1239304519793N00552395EA0238602425 +B1239324519785N00552387EA0238002422 +B1239344519775N00552378EA0237302418 +B1239364519763N00552369EA0237002412 +B1239384519752N00552360EA0236702409 +B1239404519742N00552352EA0236302405 +B1239424519733N00552345EA0235802400 +B1239444519722N00552337EA0235402396 +B1239464519712N00552328EA0235302393 +B1239484519703N00552320EA0235402391 +B1239504519693N00552313EA0235202390 +B1239524519680N00552307EA0234902387 +B1239544519666N00552300EA0234702385 +B1239564519654N00552293EA0234502384 +B1239584519644N00552285EA0234502382 +B1240004519632N00552275EA0234802382 +B1240024519621N00552268EA0235002383 +B1240044519610N00552264EA0234902383 +B1240064519598N00552257EA0234502381 +B1240084519586N00552247EA0234302380 +B1240104519574N00552239EA0234002377 +B1240124519562N00552233EA0233502374 +B1240144519549N00552226EA0233002369 +B1240164519537N00552218EA0232502364 +B1240184519524N00552208EA0232102359 +B1240204519513N00552199EA0231802356 +B1240224519504N00552191EA0231502353 +B1240244519493N00552183EA0231002348 +B1240264519481N00552174EA0230502343 +B1240284519469N00552164EA0230202339 +B1240304519459N00552154EA0230302337 +B1240324519449N00552146EA0230502335 +B1240344519440N00552139EA0230202335 +B1240364519431N00552134EA0229802332 +B1240384519420N00552126EA0229402329 +B1240404519409N00552117EA0229302328 +B1240424519399N00552109EA0229002325 +B1240444519388N00552100EA0228802323 +B1240464519377N00552090EA0228902322 +B1240484519367N00552081EA0228802322 +B1240504519357N00552071EA0228402319 +B1240524519345N00552059EA0228102317 +B1240544519334N00552050EA0228202317 +B1240564519325N00552040EA0228202317 +B1240584519317N00552031EA0228002316 +B1241004519307N00552022EA0227802314 +B1241024519297N00552013EA0227702313 +B1241044519288N00552005EA0227502312 +B1241064519278N00551997EA0227102309 +B1241084519268N00551989EA0226902306 +B1241104519258N00551982EA0226602304 +B1241124519248N00551975EA0226402301 +B1241144519237N00551967EA0226102299 +B1241164519228N00551959EA0225702296 +B1241184519218N00551952EA0225202292 +B1241204519207N00551943EA0224702287 +B1241224519196N00551933EA0224602285 +B1241244519186N00551927EA0224402283 +B1241264519176N00551922EA0224002280 +B1241284519166N00551915EA0223502275 +B1241304519154N00551910EA0223302271 +B1241324519143N00551904EA0223002269 +B1241344519134N00551897EA0222702265 +B1241364519124N00551889EA0222402262 +B1241384519114N00551880EA0222402259 +B1241404519105N00551872EA0222302258 +B1241424519095N00551863EA0222202257 +B1241444519086N00551853EA0222302256 +B1241464519076N00551844EA0222402257 +B1241484519069N00551835EA0222502258 +B1241504519060N00551826EA0222502258 +B1241524519051N00551815EA0222802260 +B1241544519043N00551804EA0223402263 +B1241564519036N00551794EA0223602267 +B1241584519028N00551786EA0223502269 +B1242004519020N00551777EA0223502270 +B1242024519011N00551768EA0223702271 +B1242044519002N00551759EA0224002274 +B1242064518993N00551749EA0224102276 +B1242084518984N00551740EA0224002277 +B1242104518977N00551732EA0223702277 +B1242124518968N00551724EA0223402275 +B1242144518959N00551716EA0223202272 +B1242164518950N00551710EA0223102271 +B1242184518941N00551702EA0223102270 +B1242204518933N00551691EA0223202270 +B1242224518925N00551684EA0223202270 +B1242244518918N00551675EA0223002268 +B1242264518909N00551665EA0223102268 +B1242284518898N00551654EA0223602268 +B1242304518890N00551644EA0224202271 +B1242324518882N00551634EA0224902275 +B1242344518873N00551624EA0225702282 +B1242364518864N00551614EA0226302291 +B1242384518854N00551606EA0226802298 +B1242404518845N00551598EA0227002303 +B1242424518836N00551588EA0227102306 +B1242444518824N00551579EA0227402310 +B1242464518812N00551570EA0228002315 +B1242484518804N00551559EA0228802320 +B1242504518798N00551549EA0229402327 +B1242524518792N00551538EA0229802331 +B1242544518784N00551527EA0230302337 +B1242564518776N00551518EA0230502342 +B1242584518765N00551509EA0230602345 +B1243004518754N00551499EA0230802348 +B1243024518744N00551492EA0230502350 +B1243044518735N00551487EA0229902351 +B1243064518723N00551476EA0230102351 +B1243084518714N00551464EA0230702353 +B1243104518708N00551455EA0230802354 +B1243124518701N00551445EA0231202356 +B1243144518695N00551434EA0231702359 +B1243164518690N00551421EA0232502364 +B1243184518685N00551408EA0233202370 +B1243204518679N00551395EA0233902377 +B1243224518671N00551388EA0234002383 +B1243244518658N00551394EA0234102386 +B1243264518651N00551412EA0234502389 +B1243284518653N00551430EA0235302393 +B1243304518665N00551435EA0236002398 +B1243324518676N00551424EA0236802405 +B1243344518679N00551408EA0237402412 +B1243364518672N00551395EA0237502416 +B1243384518659N00551396EA0237402418 +B1243404518648N00551414EA0237302420 +B1243424518649N00551434EA0237702421 +B1243444518662N00551444EA0238502425 +B1243464518674N00551444EA0239302432 +B1243484518682N00551443EA0239702437 +B1243504518691N00551440EA0240102441 +B1243524518698N00551426EA0240402444 +B1243544518700N00551409EA0240802447 +B1243564518696N00551396EA0241002451 +B1243584518690N00551387EA0241202453 +B1244004518683N00551376EA0241102454 +B1244024518676N00551365EA0241202453 +B1244044518668N00551354EA0241402454 +B1244064518663N00551343EA0241402456 +B1244084518657N00551331EA0241402456 +B1244104518652N00551321EA0241102455 +B1244124518648N00551309EA0240602452 +B1244144518641N00551297EA0240302449 +B1244164518635N00551283EA0240202446 +B1244184518630N00551270EA0240002445 +B1244204518624N00551259EA0239802442 +B1244224518619N00551247EA0239502440 +B1244244518614N00551235EA0239302437 +B1244264518608N00551222EA0239102434 +B1244284518603N00551211EA0238802432 +B1244304518597N00551199EA0238602429 +B1244324518592N00551185EA0238502427 +B1244344518588N00551171EA0238402426 +B1244364518583N00551160EA0238102424 +B1244384518577N00551148EA0237702420 +B1244404518571N00551135EA0237402417 +B1244424518565N00551123EA0237302415 +B1244444518559N00551110EA0237202413 +B1244464518553N00551096EA0237102412 +B1244484518547N00551083EA0237002411 +B1244504518541N00551071EA0236702409 +B1244524518536N00551060EA0236402406 +B1244544518531N00551048EA0236002403 +B1244564518526N00551036EA0235602399 +B1244584518522N00551023EA0235202395 +B1245004518518N00551009EA0234702390 +B1245024518514N00550995EA0234302386 +B1245044518509N00550981EA0233902382 +B1245064518505N00550967EA0233502378 +B1245084518501N00550953EA0233102373 +B1245104518496N00550940EA0232802369 +B1245124518490N00550927EA0232402365 +B1245144518484N00550917EA0232002362 +B1245164518477N00550906EA0231502357 +B1245184518472N00550893EA0231302354 +B1245204518467N00550881EA0230902351 +B1245224518462N00550870EA0230502347 +B1245244518457N00550857EA0230202343 +B1245264518451N00550845EA0229902340 +B1245284518446N00550833EA0229502336 +B1245304518441N00550820EA0229402334 +B1245324518435N00550809EA0229102332 +B1245344518430N00550799EA0228802329 +B1245364518425N00550788EA0228402325 +B1245384518418N00550776EA0228102322 +B1245404518412N00550765EA0227802318 +B1245424518406N00550756EA0227402315 +B1245444518399N00550746EA0227002311 +B1245464518393N00550735EA0226602307 +B1245484518386N00550723EA0226302304 +B1245504518380N00550713EA0226102301 +B1245524518374N00550702EA0225802298 +B1245544518368N00550692EA0225702296 +B1245564518362N00550684EA0225402294 +B1245584518356N00550676EA0225002291 +B1246004518350N00550665EA0224502287 +B1246024518343N00550656EA0224202283 +B1246044518336N00550647EA0223902281 +B1246064518330N00550638EA0223502277 +B1246084518324N00550628EA0223002272 +B1246104518318N00550617EA0222502267 +B1246124518313N00550605EA0222102263 +B1246144518307N00550595EA0221602258 +B1246164518300N00550584EA0221202253 +B1246184518293N00550570EA0221002249 +B1246204518288N00550556EA0221002246 +B1246224518283N00550543EA0220902246 +B1246244518278N00550529EA0220802244 +B1246264518273N00550513EA0220702242 +B1246284518269N00550498EA0220602242 +B1246304518265N00550482EA0220502241 +B1246324518261N00550466EA0220502241 +B1246344518257N00550451EA0220602241 +B1246364518253N00550437EA0220602241 +B1246384518249N00550422EA0220602242 +B1246404518245N00550408EA0220402242 +B1246424518240N00550395EA0220502242 +B1246444518236N00550381EA0220502242 +B1246464518234N00550366EA0220402242 +B1246484518232N00550353EA0220302241 +B1246504518229N00550339EA0220202240 +B1246524518226N00550324EA0220302240 +B1246544518222N00550311EA0220302241 +B1246564518219N00550300EA0220202241 +B1246584518214N00550288EA0220102239 +B1247004518210N00550277EA0219902238 +B1247024518205N00550265EA0219902237 +B1247044518200N00550255EA0219702236 +B1247064518196N00550245EA0219502234 +B1247084518190N00550235EA0219102232 +B1247104518182N00550226EA0219002230 +B1247124518174N00550218EA0218902229 +B1247144518168N00550211EA0218702227 +B1247164518161N00550203EA0218502224 +B1247184518154N00550193EA0218202221 +B1247204518147N00550184EA0218102219 +B1247224518139N00550175EA0218102218 +B1247244518132N00550165EA0218102218 +B1247264518127N00550154EA0218102219 +B1247284518123N00550146EA0218002219 +B1247304518117N00550137EA0217802217 +B1247324518112N00550128EA0217702215 +B1247344518105N00550119EA0217502213 +B1247364518099N00550108EA0217302211 +B1247384518094N00550098EA0217102209 +B1247404518088N00550088EA0216902207 +B1247424518082N00550078EA0216802205 +B1247444518075N00550067EA0217202204 +B1247464518068N00550059EA0217502205 +B1247484518063N00550051EA0217702209 +B1247504518057N00550043EA0217702211 +B1247524518052N00550036EA0217402211 +B1247544518045N00550027EA0217002209 +B1247564518037N00550017EA0216902207 +B1247584518029N00550007EA0216702206 +B1248004518021N00549997EA0216602204 +B1248024518014N00549989EA0216502203 +B1248044518007N00549986EA0216402201 +B1248064517998N00549984EA0216802201 +B1248084517991N00549981EA0217302202 +B1248104517985N00549979EA0218002205 +B1248124517979N00549978EA0218702210 +B1248144517974N00549976EA0218902215 +B1248164517968N00549972EA0219102218 +B1248184517959N00549968EA0219502222 +B1248204517951N00549962EA0220102228 +B1248224517943N00549959EA0220102233 +B1248244517933N00549963EA0219802236 +B1248264517923N00549965EA0219302237 +B1248284517912N00549962EA0219302235 +B1248304517905N00549957EA0219002233 +B1248324517899N00549953EA0218602231 +B1248344517890N00549948EA0218102226 +B1248364517880N00549943EA0217902223 +B1248384517870N00549939EA0217702220 +B1248404517861N00549933EA0217402217 +B1248424517853N00549925EA0217102213 +B1248444517845N00549916EA0217002211 +B1248464517837N00549907EA0216702209 +B1248484517829N00549898EA0216402206 +B1248504517820N00549891EA0216002203 +B1248524517810N00549883EA0215802199 +B1248544517801N00549876EA0215402195 +B1248564517790N00549873EA0214902191 +B1248584517780N00549868EA0214402186 +B1249004517769N00549861EA0214002181 +B1249024517759N00549855EA0213702178 +B1249044517748N00549850EA0213402174 +B1249064517738N00549844EA0213102171 +B1249084517728N00549837EA0212802168 +B1249104517720N00549831EA0212202164 +B1249124517711N00549825EA0211502158 +B1249144517700N00549819EA0210902152 +B1249164517690N00549813EA0210502147 +B1249184517681N00549807EA0210102143 +B1249204517672N00549803EA0209702138 +B1249224517663N00549797EA0209102133 +B1249244517655N00549790EA0208602127 +B1249264517645N00549783EA0208102122 +B1249284517636N00549776EA0207702117 +B1249304517626N00549770EA0207202113 +B1249324517617N00549764EA0206702107 +B1249344517607N00549756EA0206402103 +B1249364517597N00549749EA0206002099 +B1249384517589N00549740EA0205602095 +B1249404517580N00549731EA0205102090 +B1249424517569N00549722EA0204902086 +B1249444517559N00549712EA0204802084 +B1249464517550N00549702EA0204702083 +B1249484517541N00549694EA0204602082 +B1249504517531N00549685EA0204602081 +B1249524517521N00549677EA0204502080 +B1249544517511N00549670EA0204402080 +B1249564517501N00549661EA0204302079 +B1249584517492N00549653EA0204202077 +B1250004517482N00549644EA0204002076 +B1250024517472N00549635EA0204002075 +B1250044517463N00549626EA0203902075 +B1250064517453N00549618EA0203802074 +B1250084517443N00549610EA0203702073 +B1250104517433N00549602EA0203602072 +B1250124517423N00549594EA0203402071 +B1250144517413N00549585EA0203302070 +B1250164517402N00549576EA0203302069 +B1250184517392N00549567EA0203202069 +B1250204517382N00549557EA0203202068 +B1250224517371N00549548EA0203202068 +B1250244517361N00549540EA0203202068 +B1250264517351N00549533EA0203102067 +B1250284517341N00549525EA0203002067 +B1250304517331N00549517EA0203002066 +B1250324517321N00549510EA0202902066 +B1250344517310N00549502EA0202702064 +B1250364517300N00549492EA0202702063 +B1250384517290N00549483EA0202602063 +B1250404517280N00549474EA0202302061 +B1250424517270N00549465EA0202102059 +B1250444517258N00549457EA0202002057 +B1250464517247N00549450EA0201802056 +B1250484517238N00549442EA0201402053 +B1250504517227N00549432EA0201102050 +B1250524517216N00549422EA0201102048 +B1250544517206N00549415EA0200902047 +B1250564517197N00549407EA0200402044 +B1250584517188N00549396EA0200202040 +B1251004517179N00549386EA0200002038 +B1251024517170N00549379EA0199602035 +B1251044517159N00549372EA0199202031 +B1251064517150N00549360EA0198902028 +B1251084517142N00549350EA0198502025 +B1251104517134N00549340EA0197902021 +B1251124517125N00549329EA0197602016 +B1251144517116N00549319EA0197402012 +B1251164517108N00549312EA0196902008 +B1251184517097N00549305EA0196402002 +B1251204517086N00549297EA0196201999 +B1251224517077N00549290EA0195801995 +B1251244517068N00549284EA0195101989 +B1251264517058N00549277EA0194501983 +B1251284517048N00549271EA0194101979 +B1251304517040N00549267EA0193601974 +B1251324517030N00549261EA0192701968 +B1251344517018N00549253EA0192201961 +B1251364517009N00549244EA0192001957 +B1251384517002N00549236EA0191301952 +B1251404516993N00549226EA0190601945 +B1251424516984N00549215EA0190301940 +B1251444516975N00549207EA0190101937 +B1251464516967N00549201EA0189701933 +B1251484516958N00549194EA0189301928 +B1251504516948N00549187EA0188901924 +B1251524516939N00549179EA0188601921 +B1251544516929N00549172EA0188101917 +B1251564516919N00549167EA0187501912 +B1251584516909N00549158EA0186801906 +B1252004516900N00549145EA0186501902 +B1252024516891N00549136EA0185901898 +B1252044516883N00549126EA0185101891 +B1252064516873N00549115EA0184501885 +B1252084516863N00549104EA0184201881 +B1252104516854N00549093EA0184001877 +B1252124516846N00549083EA0183901874 +B1252144516836N00549073EA0183701873 +B1252164516828N00549062EA0183601871 +B1252184516821N00549052EA0183301869 +B1252204516813N00549043EA0182901865 +B1252224516804N00549034EA0182601862 +B1252244516795N00549024EA0182501860 +B1252264516786N00549016EA0182401858 +B1252284516778N00549008EA0182101856 +B1252304516769N00549000EA0181601853 +B1252324516760N00548991EA0181101848 +B1252344516751N00548982EA0180701845 +B1252364516743N00548974EA0180301840 +B1252384516733N00548967EA0180101836 +B1252404516724N00548958EA0179901834 +B1252424516715N00548952EA0179601831 +B1252444516705N00548944EA0179401827 +B1252464516695N00548935EA0179501826 +B1252484516687N00548928EA0179701825 +B1252504516678N00548921EA0179801826 +B1252524516670N00548913EA0179901827 +B1252544516661N00548905EA0180301829 +B1252564516652N00548900EA0180701832 +B1252584516643N00548893EA0181101837 +B1253004516635N00548885EA0181501842 +B1253024516625N00548879EA0181901846 +B1253044516616N00548873EA0182101850 +B1253064516608N00548864EA0182001852 +B1253084516599N00548853EA0182101854 +B1253104516589N00548843EA0182501857 +B1253124516583N00548833EA0182901860 +B1253144516578N00548821EA0183401865 +B1253164516571N00548811EA0184101870 +B1253184516564N00548801EA0184901877 +B1253204516556N00548792EA0185201884 +B1253224516549N00548785EA0185301889 +B1253244516540N00548777EA0185301892 +B1253264516530N00548768EA0186101896 +B1253284516521N00548761EA0187001901 +B1253304516517N00548751EA0187501907 +B1253324516511N00548743EA0187901911 +B1253344516503N00548734EA0188501917 +B1253364516497N00548723EA0189101923 +B1253384516491N00548714EA0189601928 +B1253404516484N00548705EA0190201934 +B1253424516479N00548693EA0190401939 +B1253444516476N00548681EA0190201942 +B1253464516471N00548671EA0189701944 +B1253484516464N00548663EA0189501943 +B1253504516457N00548654EA0189201940 +B1253524516450N00548645EA0189501937 +B1253544516445N00548635EA0189801938 +B1253564516439N00548628EA0189801938 +B1253584516432N00548622EA0189701938 +B1254004516425N00548615EA0189401936 +B1254024516416N00548607EA0188901933 +B1254044516408N00548598EA0188601929 +B1254064516400N00548589EA0188501926 +B1254084516391N00548580EA0188501924 +B1254104516383N00548571EA0188501923 +B1254124516375N00548564EA0188401923 +B1254144516367N00548558EA0188201921 +B1254164516357N00548550EA0188301920 +B1254184516349N00548543EA0188901919 +B1254204516343N00548537EA0189401922 +B1254224516337N00548532EA0189601925 +B1254244516330N00548525EA0189701926 +B1254264516322N00548518EA0190001929 +B1254284516314N00548514EA0190401933 +B1254304516307N00548509EA0190501937 +B1254324516300N00548499EA0190601939 +B1254344516292N00548488EA0191101942 +B1254364516283N00548480EA0191701946 +B1254384516277N00548474EA0192001951 +B1254404516271N00548467EA0191701954 +B1254424516263N00548459EA0191401956 +B1254444516253N00548449EA0191201956 +B1254464516244N00548434EA0191201955 +B1254484516235N00548417EA0191601956 +B1254504516226N00548406EA0192101958 +B1254524516217N00548399EA0192001960 +B1254544516207N00548389EA0191501960 +B1254564516196N00548377EA0191501959 +B1254584516186N00548365EA0191501959 +B1255004516175N00548358EA0191401957 +B1255024516163N00548352EA0191601956 +B1255044516153N00548342EA0191801957 +B1255064516145N00548331EA0192001958 +B1255084516136N00548322EA0192301960 +B1255104516127N00548313EA0192601963 +B1255124516120N00548303EA0192501964 +B1255144516111N00548293EA0192301964 +B1255164516099N00548282EA0192601964 +B1255184516089N00548272EA0192901967 +B1255204516080N00548263EA0192901968 +B1255224516070N00548254EA0192901968 +B1255244516060N00548245EA0192901967 +B1255264516050N00548236EA0192901966 +B1255284516040N00548224EA0193101967 +B1255304516031N00548211EA0193601968 +B1255324516024N00548201EA0194201971 +B1255344516018N00548192EA0194501975 +B1255364516013N00548184EA0194301977 +B1255384516005N00548175EA0194101977 +B1255404515996N00548166EA0193901976 +B1255424515988N00548158EA0193701975 +B1255444515981N00548150EA0193401972 +B1255464515973N00548141EA0193101969 +B1255484515965N00548132EA0192901966 +B1255504515956N00548122EA0192601963 +B1255524515948N00548113EA0192401961 +B1255544515938N00548104EA0192201958 +B1255564515929N00548096EA0192001956 +B1255584515920N00548087EA0191801954 +B1256004515910N00548076EA0191601952 +B1256024515901N00548066EA0191401950 +B1256044515893N00548056EA0191101947 +B1256064515883N00548046EA0191001945 +B1256084515874N00548039EA0190701943 +B1256104515865N00548030EA0190201940 +B1256124515855N00548020EA0189901936 +B1256144515845N00548011EA0189701934 +B1256164515835N00548002EA0189301931 +B1256184515824N00547994EA0189101927 +B1256204515812N00547986EA0189301925 +B1256224515802N00547977EA0189901925 +B1256244515794N00547966EA0190501926 +B1256264515786N00547955EA0191401931 +B1256284515777N00547944EA0192301938 +B1256304515770N00547936EA0193001947 +B1256324515763N00547939EA0193301954 +B1256344515757N00547956EA0193801961 +B1256364515762N00547971EA0194301967 +B1256384515773N00547971EA0194901975 +B1256404515779N00547955EA0195401981 +B1256424515770N00547940EA0196101989 +B1256444515758N00547942EA0196401996 +B1256464515752N00547957EA0196502001 +B1256484515755N00547971EA0196902005 +B1256504515769N00547975EA0197302009 +B1256524515778N00547961EA0197802014 +B1256544515774N00547943EA0198402019 +B1256564515764N00547938EA0198602024 +B1256584515754N00547946EA0198702027 +B1257004515752N00547964EA0198902030 +B1257024515761N00547976EA0199202032 +B1257044515773N00547976EA0199702035 +B1257064515782N00547964EA0200202038 +B1257084515786N00547949EA0200602043 +B1257104515784N00547935EA0200802046 +B1257124515775N00547927EA0201002048 +B1257144515764N00547934EA0201002050 +B1257164515761N00547949EA0201002051 +B1257184515769N00547964EA0201202052 +B1257204515783N00547967EA0201502053 +B1257224515793N00547959EA0201802055 +B1257244515797N00547946EA0202002057 +B1257264515798N00547930EA0202302060 +B1257284515794N00547919EA0202402062 +B1257304515787N00547909EA0202702063 +B1257324515779N00547899EA0203002066 +B1257344515770N00547889EA0203602070 +B1257364515763N00547882EA0203802074 +B1257384515755N00547876EA0203902076 +B1257404515746N00547869EA0204102078 +B1257424515737N00547860EA0204102079 +B1257444515729N00547850EA0204002079 +B1257464515719N00547842EA0203802078 +B1257484515709N00547832EA0203802077 +B1257504515698N00547821EA0203902077 +B1257524515688N00547811EA0204002078 +B1257544515679N00547801EA0204102078 +B1257564515671N00547789EA0204102079 +B1257584515663N00547778EA0204102079 +B1258004515654N00547768EA0204302079 +B1258024515647N00547758EA0204402080 +B1258044515641N00547748EA0204402080 +B1258064515634N00547739EA0204402081 +B1258084515627N00547732EA0204302080 +B1258104515619N00547725EA0204002079 +B1258124515611N00547717EA0203702077 +B1258144515603N00547710EA0203402073 +B1258164515593N00547700EA0203302070 +B1258184515584N00547690EA0203202069 +B1258204515576N00547680EA0202902068 +B1258224515569N00547669EA0202402065 +B1258244515560N00547658EA0202202061 +B1258264515552N00547647EA0202102059 +B1258284515544N00547636EA0201802057 +B1258304515537N00547624EA0201702054 +B1258324515530N00547612EA0201702053 +B1258344515524N00547602EA0201702053 +B1258364515515N00547593EA0201502052 +B1258384515506N00547583EA0201502051 +B1258404515497N00547573EA0201602052 +B1258424515490N00547561EA0201702053 +B1258444515484N00547549EA0201702053 +B1258464515475N00547538EA0201902054 +B1258484515467N00547526EA0202002055 +B1258504515460N00547515EA0202002056 +B1258524515453N00547504EA0202002056 +B1258544515445N00547493EA0201902056 +B1258564515437N00547483EA0201902055 +B1258584515430N00547473EA0201902055 +B1259004515422N00547464EA0201802055 +B1259024515414N00547454EA0201602054 +B1259044515407N00547444EA0201402052 +B1259064515398N00547435EA0201102049 +B1259084515387N00547428EA0201102048 +B1259104515379N00547420EA0201102048 +B1259124515372N00547412EA0200502046 +B1259144515361N00547404EA0200502043 +B1259164515351N00547393EA0200502043 +B1259184515342N00547384EA0200402042 +B1259204515332N00547378EA0200202040 +B1259224515322N00547369EA0200502039 +B1259244515312N00547359EA0201202040 +B1259264515305N00547351EA0202002042 +B1259284515298N00547344EA0202402047 +B1259304515292N00547335EA0202502050 +B1259324515284N00547325EA0202602052 +B1259344515278N00547313EA0202802054 +B1259364515272N00547300EA0203102057 +B1259384515265N00547288EA0203402061 +B1259404515258N00547276EA0203902065 +B1259424515251N00547265EA0204802071 +B1259444515247N00547255EA0205302077 +B1259464515245N00547244EA0205602081 +B1259484515241N00547233EA0205602085 +B1259504515236N00547223EA0205602087 +B1259524515231N00547216EA0205602088 +B1259544515225N00547209EA0205602087 +B1259564515221N00547201EA0206102089 +B1259584515218N00547193EA0206402093 +B1300004515214N00547185EA0206502095 +B1300024515208N00547177EA0206602096 +B1300044515201N00547170EA0206902099 +B1300064515194N00547164EA0206702101 +B1300084515186N00547158EA0206702101 +B1300104515178N00547150EA0207202103 +B1300124515173N00547148EA0207402105 +B1300144515166N00547148EA0207502107 +B1300164515157N00547141EA0207502108 +B1300184515149N00547139EA0207402110 +B1300204515143N00547141EA0206702110 +B1300224515137N00547142EA0206202107 +B1300244515130N00547139EA0205702103 +B1300264515124N00547136EA0205002099 +B1300284515117N00547130EA0204102092 +B1300304515110N00547122EA0203402083 +B1300324515105N00547113EA0202802076 +B1300344515100N00547104EA0202202069 +B1300364515094N00547099EA0201502062 +B1300384515087N00547091EA0201102055 +B1300404515081N00547078EA0201002050 +B1300424515073N00547069EA0200902046 +B1300444515064N00547062EA0200802045 +B1300464515056N00547052EA0200702043 +B1300484515047N00547042EA0200602042 +B1300504515039N00547032EA0200502041 +B1300524515033N00547020EA0200602041 +B1300544515028N00547006EA0200602041 +B1300564515022N00546994EA0200402041 +B1300584515014N00546982EA0200402039 +B1301004515004N00546967EA0200802040 +B1301024514996N00546954EA0201002041 +B1301044514989N00546943EA0200702041 +B1301064514979N00546932EA0200602040 +B1301084514968N00546921EA0201002041 +B1301104514959N00546910EA0201202044 +B1301124514950N00546901EA0201402045 +B1301144514940N00546892EA0201902048 +B1301164514932N00546883EA0202302052 +B1301184514924N00546874EA0202602055 +B1301204514915N00546864EA0203302060 +B1301224514906N00546851EA0204402066 +B1301244514900N00546838EA0204702072 +B1301264514895N00546829EA0204602076 +B1301284514887N00546821EA0204702078 +B1301304514878N00546813EA0205002082 +B1301324514873N00546803EA0205102085 +B1301344514868N00546794EA0205102087 +B1301364514861N00546785EA0204902088 +B1301384514854N00546774EA0204702087 +B1301404514845N00546762EA0204402085 +B1301424514836N00546751EA0204502085 +B1301444514828N00546742EA0204102083 +B1301464514820N00546734EA0203402080 +B1301484514809N00546726EA0202902075 +B1301504514798N00546718EA0202802073 +B1301524514789N00546711EA0202602071 +B1301544514780N00546704EA0202302067 +B1301564514769N00546696EA0202802064 +B1301584514759N00546688EA0204002063 +B1302004514753N00546683EA0204302065 +B1302024514747N00546678EA0204202066 +B1302044514738N00546671EA0204302067 +B1302064514730N00546662EA0204602069 +B1302084514723N00546653EA0204702072 +B1302104514717N00546647EA0204702074 +B1302124514712N00546637EA0204702075 +B1302144514707N00546625EA0204702075 +B1302164514700N00546613EA0204702076 +B1302184514693N00546601EA0204702076 +B1302204514688N00546589EA0204602076 +B1302224514682N00546579EA0204602076 +B1302244514676N00546571EA0204402076 +B1302264514670N00546562EA0204102074 +B1302284514664N00546552EA0204102073 +B1302304514658N00546543EA0203902072 +B1302324514653N00546534EA0203702071 +B1302344514647N00546524EA0203502069 +B1302364514641N00546515EA0203402067 +B1302384514636N00546506EA0203202066 +B1302404514630N00546499EA0203002065 +B1302424514625N00546492EA0202902063 +B1302444514619N00546486EA0202802063 +B1302464514614N00546481EA0202702062 +B1302484514607N00546475EA0202502060 +B1302504514602N00546468EA0202402059 +B1302524514597N00546459EA0202402058 +B1302544514590N00546453EA0202402058 +B1302564514583N00546447EA0202902058 +B1302584514577N00546439EA0203402061 +B1303004514572N00546427EA0203702065 +B1303024514565N00546415EA0204102068 +B1303044514558N00546401EA0204702073 +B1303064514553N00546388EA0205102079 +B1303084514547N00546377EA0205402083 +B1303104514541N00546366EA0205502086 +B1303124514535N00546356EA0205502088 +B1303144514530N00546345EA0205302088 +B1303164514523N00546335EA0205102087 +B1303184514515N00546327EA0205102086 +B1303204514508N00546319EA0204902085 +B1303224514502N00546311EA0204602083 +B1303244514494N00546304EA0204402081 +B1303264514487N00546297EA0204202079 +B1303284514481N00546290EA0204002076 +B1303304514474N00546283EA0203602073 +B1303324514468N00546275EA0203302070 +B1303344514460N00546267EA0203002067 +B1303364514454N00546260EA0202602064 +B1303384514448N00546253EA0202302060 +B1303404514441N00546245EA0201902056 +B1303424514435N00546237EA0201602053 +B1303444514429N00546230EA0201202049 +B1303464514422N00546224EA0200902045 +B1303484514416N00546219EA0200502042 +B1303504514409N00546212EA0200202038 +B1303524514403N00546205EA0199802035 +B1303544514396N00546198EA0199402031 +B1303564514389N00546190EA0199002027 +B1303584514381N00546182EA0198802023 +B1304004514374N00546173EA0198802021 +B1304024514368N00546164EA0199202020 +B1304044514363N00546155EA0199402021 +B1304064514359N00546148EA0199402022 +B1304084514353N00546141EA0199102021 +B1304104514348N00546133EA0198802019 +B1304124514342N00546123EA0198502016 +B1304144514337N00546113EA0198402015 +B1304164514332N00546106EA0198102013 +B1304184514326N00546098EA0197802010 +B1304204514320N00546089EA0197702008 +B1304224514315N00546081EA0197402006 +B1304244514311N00546072EA0197002003 +B1304264514305N00546061EA0197002001 +B1304284514297N00546051EA0197202001 +B1304304514289N00546042EA0197302001 +B1304324514283N00546032EA0197202001 +B1304344514274N00546021EA0197102000 +B1304364514266N00546009EA0197102001 +B1304384514260N00546000EA0196902000 +B1304404514254N00545990EA0196801999 +B1304424514246N00545977EA0197101999 +B1304444514239N00545963EA0197602000 +B1304464514234N00545952EA0197602001 +B1304484514228N00545942EA0197502000 +B1304504514223N00545931EA0197402001 +B1304524514218N00545921EA0197302001 +B1304544514213N00545910EA0197202001 +B1304564514207N00545899EA0197102000 +B1304584514202N00545886EA0197102001 +B1305004514198N00545875EA0197002000 +B1305024514193N00545864EA0196901999 +B1305044514187N00545854EA0196901999 +B1305064514181N00545844EA0196801999 +B1305084514176N00545836EA0196601998 +B1305104514170N00545827EA0196501997 +B1305124514165N00545817EA0196301996 +B1305144514160N00545810EA0196101994 +B1305164514153N00545802EA0195901992 +B1305184514147N00545794EA0195901992 +B1305204514141N00545788EA0195801991 +B1305224514135N00545780EA0195601990 +B1305244514129N00545772EA0195501988 +B1305264514123N00545763EA0195501987 +B1305284514118N00545754EA0195401987 +B1305304514113N00545745EA0195201986 +B1305324514107N00545737EA0195101985 +B1305344514100N00545730EA0195001984 +B1305364514095N00545722EA0194801983 +B1305384514088N00545715EA0194501981 +B1305404514081N00545709EA0194501979 +B1305424514074N00545707EA0194301978 +B1305444514069N00545719EA0193901976 +B1305464514069N00545740EA0193901974 +B1305484514073N00545757EA0193801974 +B1305504514079N00545773EA0193501972 +B1305524514087N00545792EA0193301969 +B1305544514096N00545810EA0193301968 +B1305564514104N00545826EA0193101967 +B1305584514113N00545842EA0192801965 +B1306004514121N00545861EA0192901963 +B1306024514129N00545878EA0193001963 +B1306044514137N00545894EA0192801962 +B1306064514147N00545910EA0192601960 +B1306084514158N00545927EA0192601959 +B1306104514168N00545943EA0192601959 +B1306124514180N00545957EA0192401958 +B1306144514191N00545972EA0192201956 +B1306164514202N00545988EA0192101955 +B1306184514213N00546003EA0192101954 +B1306204514223N00546018EA0191901953 +B1306224514234N00546034EA0191801952 +B1306244514244N00546050EA0191801951 +B1306264514254N00546065EA0191801951 +B1306284514263N00546080EA0191701951 +B1306304514270N00546094EA0191601951 +B1306324514275N00546104EA0191501949 +B1306344514280N00546116EA0191601949 +B1306364514285N00546128EA0191801950 +B1306384514290N00546139EA0191801951 +B1306404514297N00546151EA0191801951 +B1306424514305N00546165EA0191801951 +B1306444514312N00546178EA0191601951 +B1306464514320N00546190EA0191301949 +B1306484514327N00546203EA0191101947 +B1306504514336N00546215EA0191101947 +B1306524514345N00546225EA0191101946 +B1306544514353N00546236EA0190701945 +B1306564514362N00546248EA0190501942 +B1306584514370N00546261EA0190101940 +B1307004514377N00546275EA0189901936 +B1307024514385N00546290EA0189801934 +B1307044514394N00546306EA0189801933 +B1307064514402N00546321EA0190201932 +B1307084514410N00546336EA0190601934 +B1307104514417N00546350EA0190901936 +B1307124514425N00546364EA0191401940 +B1307144514432N00546380EA0191601943 +B1307164514437N00546395EA0190901945 +B1307184514444N00546413EA0190101945 +B1307204514453N00546431EA0189701942 +B1307224514461N00546447EA0189401939 +B1307244514467N00546462EA0189001934 +B1307264514475N00546476EA0188501929 +B1307284514484N00546492EA0188201924 +B1307304514493N00546506EA0187801921 +B1307324514503N00546520EA0187501916 +B1307344514513N00546533EA0187201913 +B1307364514523N00546546EA0187001910 +B1307384514533N00546559EA0186801907 +B1307404514542N00546572EA0186601905 +B1307424514550N00546586EA0186401902 +B1307444514557N00546599EA0186301900 +B1307464514565N00546610EA0186201899 +B1307484514573N00546618EA0186001898 +B1307504514581N00546627EA0185701895 +B1307524514590N00546636EA0185501893 +B1307544514597N00546646EA0185101890 +B1307564514604N00546657EA0184801887 +B1307584514614N00546667EA0184601884 +B1308004514624N00546679EA0184501882 +B1308024514634N00546692EA0184601880 +B1308044514644N00546706EA0185601880 +B1308064514654N00546720EA0186501881 +B1308084514661N00546733EA0186901885 +B1308104514668N00546744EA0187101889 +B1308124514673N00546757EA0187601893 +B1308144514678N00546773EA0188401899 +B1308164514683N00546787EA0189301906 +B1308184514690N00546800EA0189901915 +B1308204514696N00546811EA0190201921 +B1308224514703N00546823EA0190301927 +B1308244514713N00546837EA0190501930 +B1308264514723N00546853EA0191001935 +B1308284514731N00546869EA0190901939 +B1308304514740N00546883EA0190501941 +B1308324514749N00546896EA0189801942 +B1308344514759N00546910EA0189401940 +B1308364514770N00546923EA0189101936 +B1308384514780N00546934EA0188801931 +B1308404514790N00546946EA0188401927 +B1308424514799N00546959EA0188101923 +B1308444514808N00546972EA0187801919 +B1308464514816N00546986EA0187501916 +B1308484514823N00547000EA0187301913 +B1308504514830N00547011EA0186901909 +B1308524514837N00547023EA0186401904 +B1308544514843N00547038EA0186401901 +B1308564514850N00547051EA0186501898 +B1308584514856N00547058EA0186401897 +B1309004514863N00547067EA0186101894 +B1309024514870N00547077EA0185901892 +B1309044514878N00547087EA0185701890 +B1309064514888N00547095EA0185501888 +B1309084514897N00547105EA0185201886 +B1309104514905N00547115EA0184801883 +B1309124514913N00547126EA0184401879 +B1309144514923N00547138EA0184701876 +B1309164514932N00547150EA0185301874 +B1309184514940N00547162EA0185501874 +B1309204514948N00547174EA0185601876 +B1309224514958N00547186EA0185801880 +B1309244514967N00547197EA0186001883 +B1309264514975N00547208EA0186301887 +B1309284514983N00547219EA0186801891 +B1309304514993N00547232EA0187501896 +B1309324515003N00547245EA0188501902 +B1309344515010N00547255EA0189201910 +B1309364515014N00547267EA0189701916 +B1309384515010N00547278EA0189801923 +B1309404514998N00547280EA0190101928 +B1309424514989N00547268EA0190601933 +B1309444514994N00547254EA0191201939 +B1309464515008N00547250EA0192101946 +B1309484515020N00547252EA0193201956 +B1309504515030N00547253EA0193901965 +B1309524515039N00547256EA0194201972 +B1309544515047N00547274EA0194901979 +B1309564515045N00547295EA0195501986 +B1309584515033N00547299EA0196001992 +B1310004515026N00547287EA0196501999 +B1310024515029N00547272EA0197002005 +B1310044515042N00547267EA0197902010 +B1310064515055N00547273EA0198802018 +B1310084515065N00547282EA0199602028 +B1310104515073N00547290EA0200002034 +B1310124515075N00547308EA0200002039 +B1310144515067N00547325EA0200102043 +B1310164515053N00547327EA0200602046 +B1310184515045N00547311EA0201102049 +B1310204515046N00547295EA0201802054 +B1310224515049N00547284EA0202602060 +B1310244515055N00547274EA0203602067 +B1310264515063N00547267EA0204402075 +B1310284515074N00547267EA0205302082 +B1310304515082N00547277EA0205902090 +B1310324515088N00547294EA0206202096 +B1310344515087N00547316EA0206202100 +B1310364515075N00547324EA0206202103 +B1310384515064N00547313EA0206402105 +B1310404515066N00547298EA0206802106 +B1310424515076N00547291EA0207402110 +B1310444515086N00547288EA0208202117 +B1310464515097N00547286EA0208902123 +B1310484515109N00547287EA0209902131 +B1310504515120N00547290EA0210802141 +B1310524515130N00547293EA0211502149 +B1310544515138N00547288EA0211502156 +B1310564515132N00547275EA0211802161 +B1310584515120N00547274EA0212602165 +B1311004515113N00547289EA0213602171 +B1311024515115N00547307EA0214602179 +B1311044515127N00547316EA0215302186 +B1311064515138N00547312EA0215902194 +B1311084515142N00547301EA0216302199 +B1311104515140N00547290EA0216802204 +B1311124515130N00547289EA0217202208 +B1311144515119N00547303EA0218402213 +B1311164515116N00547324EA0219502221 +B1311184515120N00547343EA0220402230 +B1311204515131N00547359EA0221102240 +B1311224515145N00547362EA0221802248 +B1311244515152N00547350EA0222402256 +B1311264515146N00547337EA0222902263 +B1311284515132N00547336EA0223702270 +B1311304515123N00547351EA0224702278 +B1311324515123N00547372EA0225502287 +B1311344515133N00547389EA0226102295 +B1311364515148N00547395EA0226802302 +B1311384515158N00547387EA0227502309 +B1311404515155N00547374EA0228102316 +B1311424515143N00547370EA0228802322 +B1311444515132N00547381EA0229602330 +B1311464515130N00547401EA0230202338 +B1311484515140N00547418EA0230702345 +B1311504515153N00547424EA0230902350 +B1311524515167N00547420EA0231602355 +B1311544515176N00547410EA0232402362 +B1311564515178N00547398EA0233102370 +B1311584515178N00547387EA0234002378 +B1312004515178N00547379EA0234702386 +B1312024515172N00547380EA0235002393 +B1312044515165N00547394EA0235302398 +B1312064515167N00547413EA0235802404 +B1312084515178N00547430EA0236402408 +B1312104515194N00547437EA0236902414 +B1312124515207N00547431EA0237402419 +B1312144515214N00547419EA0238102425 +B1312164515215N00547409EA0238802431 +B1312184515210N00547404EA0239402437 +B1312204515205N00547403EA0239802442 +B1312224515200N00547411EA0240002446 +B1312244515198N00547428EA0240202448 +B1312264515204N00547448EA0240502451 +B1312284515216N00547464EA0241002455 +B1312304515231N00547474EA0241702460 +B1312324515244N00547479EA0242102465 +B1312344515258N00547483EA0242202469 +B1312364515272N00547488EA0242102471 +B1312384515286N00547499EA0242102470 +B1312404515298N00547511EA0241602469 +B1312424515312N00547520EA0241302466 +B1312444515328N00547530EA0240902461 +B1312464515341N00547543EA0240302455 +B1312484515354N00547556EA0239702449 +B1312504515369N00547568EA0239302443 +B1312524515382N00547582EA0238802438 +B1312544515394N00547595EA0238402433 +B1312564515408N00547607EA0238102429 +B1312584515421N00547619EA0237802425 +B1313004515432N00547634EA0237502422 +B1313024515443N00547649EA0237402419 +B1313044515454N00547665EA0237302418 +B1313064515465N00547679EA0237202416 +B1313084515476N00547693EA0236902413 +B1313104515489N00547706EA0236602411 +B1313124515501N00547719EA0236402408 +B1313144515513N00547732EA0236002405 +B1313164515524N00547745EA0235602401 +B1313184515537N00547758EA0235102397 +B1313204515549N00547770EA0234602391 +B1313224515561N00547781EA0234002386 +B1313244515574N00547791EA0233502380 +B1313264515587N00547802EA0233102375 +B1313284515600N00547815EA0232702371 +B1313304515611N00547829EA0232302367 +B1313324515622N00547842EA0232102363 +B1313344515633N00547853EA0231802361 +B1313364515643N00547863EA0231402357 +B1313384515653N00547874EA0231002353 +B1313404515664N00547884EA0230702349 +B1313424515675N00547895EA0230302346 +B1313444515685N00547906EA0229902342 +B1313464515695N00547917EA0229402338 +B1313484515707N00547928EA0229102334 +B1313504515718N00547940EA0228902331 +B1313524515729N00547951EA0228502327 +B1313544515740N00547961EA0228102323 +B1313564515752N00547971EA0227702319 +B1313594515763N00547982EA0227302315 +B1314014515775N00547994EA0227002312 +B1314034515787N00548006EA0227102310 +B1314054515798N00548019EA0227302309 +B1314074515807N00548030EA0227002308 +B1314094515817N00548040EA0226302304 +B1314114515828N00548053EA0226002301 +B1314134515840N00548066EA0226002299 +B1314154515850N00548077EA0225602296 +B1314174515860N00548090EA0225202292 +B1314194515871N00548105EA0224902289 +B1314214515884N00548117EA0224602286 +B1314234515895N00548129EA0224202282 +B1314254515906N00548141EA0223602278 +B1314274515916N00548152EA0223002273 +B1314294515927N00548163EA0222602268 +B1314314515938N00548173EA0222102264 +B1314334515949N00548184EA0221502258 +B1314354515959N00548195EA0221002252 +B1314374515971N00548206EA0220802247 +B1314394515981N00548219EA0220702244 +B1314414515989N00548231EA0220402242 +B1314434515998N00548243EA0220002237 +B1314454516007N00548257EA0219902235 +B1314474516017N00548270EA0219902234 +B1314494516027N00548282EA0219702232 +B1314514516037N00548295EA0219602231 +B1314534516047N00548306EA0219402230 +B1314554516055N00548316EA0218902228 +B1314574516064N00548329EA0218302224 +B1314594516074N00548342EA0217902219 +B1315014516084N00548353EA0217702217 +B1315034516094N00548363EA0217302213 +B1315054516105N00548373EA0217002210 +B1315074516116N00548383EA0216602206 +B1315094516128N00548393EA0216202202 +B1315114516140N00548401EA0215702198 +B1315134516152N00548411EA0215302194 +B1315154516163N00548423EA0215102191 +B1315174516175N00548434EA0214802188 +B1315194516185N00548446EA0214402185 +B1315214516195N00548458EA0214002181 +B1315234516204N00548468EA0213402176 +B1315254516215N00548480EA0213002171 +B1315274516226N00548492EA0212602167 +B1315294516237N00548501EA0211902162 +B1315314516250N00548509EA0211402155 +B1315334516264N00548516EA0211302151 +B1315354516275N00548527EA0211002148 +B1315374516284N00548538EA0210702144 +B1315394516295N00548548EA0210502142 +B1315414516305N00548557EA0210302140 +B1315434516314N00548567EA0209802137 +B1315454516324N00548577EA0209302132 +B1315474516336N00548588EA0209102130 +B1315494516346N00548598EA0209002128 +B1315514516356N00548607EA0208802126 +B1315534516367N00548616EA0208602124 +B1315554516379N00548625EA0208702123 +B1315574516390N00548633EA0208502123 +B1315594516401N00548641EA0208202121 +B1316014516414N00548650EA0208202120 +B1316034516428N00548660EA0208302119 +B1316054516439N00548672EA0208202119 +B1316074516450N00548682EA0208102118 +B1316094516463N00548691EA0208102118 +B1316114516475N00548700EA0208002118 +B1316134516486N00548709EA0207802116 +B1316154516498N00548719EA0207802115 +B1316174516510N00548729EA0207902116 +B1316194516522N00548739EA0207902117 +B1316214516533N00548749EA0208102117 +B1316234516546N00548759EA0208602119 +B1316254516558N00548769EA0208902121 +B1316274516568N00548779EA0209302123 +B1316294516580N00548789EA0210002128 +B1316314516591N00548799EA0210502134 +B1316334516603N00548811EA0210802138 +B1316354516617N00548820EA0211302142 +B1316374516630N00548828EA0211902148 +B1316394516640N00548838EA0212202153 +B1316414516650N00548847EA0212402157 +B1316434516661N00548855EA0212402159 +B1316454516672N00548862EA0212402160 +B1316474516684N00548872EA0212502160 +B1316494516696N00548881EA0212602161 +B1316514516709N00548888EA0212602162 +B1316534516721N00548895EA0212502162 +B1316554516733N00548903EA0212402161 +B1316574516745N00548911EA0212302160 +B1316594516757N00548921EA0212402160 +B1317014516768N00548931EA0212602161 +B1317034516780N00548942EA0212802163 +B1317054516791N00548954EA0213202166 +B1317074516802N00548966EA0213402169 +B1317094516814N00548977EA0213602171 +B1317114516827N00548987EA0213802173 +B1317134516839N00548997EA0213802175 +B1317154516851N00549007EA0213602175 +B1317174516864N00549018EA0213502174 +B1317194516877N00549031EA0213502174 +B1317214516889N00549042EA0213202173 +B1317234516900N00549055EA0212902170 +B1317254516912N00549072EA0212402166 +B1317274516923N00549087EA0212102162 +B1317294516933N00549099EA0212002160 +B1317314516942N00549110EA0211402156 +B1317334516952N00549122EA0210702152 +B1317354516964N00549131EA0210002146 +B1317374516975N00549139EA0209202138 +B1317394516987N00549148EA0208402129 +B1317414516999N00549158EA0207602121 +B1317434517012N00549167EA0207002114 +B1317454517024N00549176EA0206302107 +B1317474517038N00549183EA0205702099 +B1317494517054N00549191EA0205402092 +B1317514517069N00549200EA0205602087 +B1317534517082N00549208EA0205502083 +B1317554517091N00549217EA0205102080 +B1317574517102N00549227EA0204902077 +B1317594517112N00549238EA0204702075 +B1318014517122N00549248EA0204402073 +B1318034517134N00549258EA0204002070 +B1318054517146N00549268EA0203702067 +B1318074517158N00549278EA0203402064 +B1318094517170N00549287EA0203302062 +B1318114517180N00549297EA0202902060 +B1318134517189N00549307EA0202602057 +B1318154517199N00549316EA0202402055 +B1318174517210N00549324EA0202202053 +B1318194517220N00549332EA0201902051 +B1318214517230N00549340EA0201602048 +B1318234517240N00549350EA0201502046 +B1318254517250N00549359EA0201202044 +B1318274517260N00549367EA0200802041 +B1318294517270N00549375EA0200302037 +B1318314517281N00549383EA0200102034 +B1318334517293N00549390EA0200002031 +B1318354517301N00549396EA0199602029 +B1318374517311N00549400EA0199002025 +B1318394517324N00549407EA0198902021 +B1318414517337N00549417EA0199202018 +B1318434517348N00549424EA0199002017 +B1318454517357N00549431EA0198602014 +B1318474517368N00549441EA0198302011 +B1318494517378N00549452EA0198102010 +B1318514517387N00549461EA0197802008 +B1318534517396N00549471EA0197202003 +B1318554517406N00549483EA0196901999 +B1318574517417N00549493EA0196801997 +B1318594517427N00549503EA0196701996 +B1319014517437N00549513EA0196501994 +B1319034517448N00549522EA0196301993 +B1319054517459N00549531EA0196201992 +B1319074517470N00549541EA0196201991 +B1319094517482N00549550EA0196101991 +B1319114517492N00549560EA0195701989 +B1319134517502N00549570EA0195201986 +B1319154517514N00549581EA0195001983 +B1319174517526N00549592EA0194901981 +B1319194517538N00549600EA0194801980 +B1319214517549N00549607EA0194501977 +B1319234517561N00549618EA0194601976 +B1319254517571N00549630EA0194701977 +B1319274517580N00549641EA0194601977 +B1319294517590N00549652EA0194501976 +B1319314517599N00549664EA0194401975 +B1319334517609N00549677EA0194401975 +B1319354517618N00549691EA0194301975 +B1319374517627N00549703EA0194001973 +B1319394517637N00549714EA0193701970 +B1319414517647N00549726EA0193501968 +B1319434517657N00549738EA0193301966 +B1319454517666N00549750EA0193401965 +B1319474517675N00549762EA0193401965 +B1319494517682N00549775EA0193201964 +B1319514517690N00549786EA0192901962 +B1319534517698N00549798EA0192601960 +B1319554517707N00549810EA0192301957 +B1319574517715N00549823EA0192201954 +B1319594517722N00549837EA0192101953 +B1320014517728N00549851EA0192001952 +B1320034517734N00549864EA0191701950 +B1320054517741N00549880EA0191701948 +B1320074517750N00549896EA0191701948 +B1320094517758N00549912EA0191901948 +B1320114517766N00549928EA0192101950 +B1320134517774N00549944EA0192301952 +B1320154517781N00549958EA0192501955 +B1320174517787N00549972EA0192801957 +B1320194517795N00549981EA0192701959 +B1320214517808N00549978EA0192601959 +B1320234517818N00549964EA0192801960 +B1320254517816N00549950EA0192801960 +B1320274517806N00549944EA0192901960 +B1320294517797N00549954EA0192901961 +B1320314517794N00549972EA0193001960 +B1320334517797N00549991EA0193201962 +B1320354517802N00550009EA0193401963 +B1320374517806N00550026EA0193601966 +B1320394517812N00550042EA0194001969 +B1320414517818N00550056EA0194401973 +B1320434517822N00550069EA0194801977 +B1320454517824N00550083EA0195101980 +B1320474517819N00550095EA0195301983 +B1320494517808N00550094EA0195601986 +B1320514517802N00550080EA0195801989 +B1320534517808N00550063EA0195901991 +B1320554517823N00550063EA0196101993 +B1320574517834N00550080EA0196601996 +B1320594517838N00550096EA0197102001 +B1321014517844N00550109EA0197702007 +B1321034517849N00550123EA0198102012 +B1321054517850N00550137EA0198702017 +B1321074517843N00550148EA0199002021 +B1321094517832N00550148EA0199202024 +B1321114517825N00550138EA0199302026 +B1321134517826N00550121EA0199402028 +B1321154517838N00550110EA0199702030 +B1321174517852N00550116EA0200102032 +B1321194517862N00550131EA0200702035 +B1321214517868N00550145EA0201302041 +B1321234517876N00550155EA0201702046 +B1321254517885N00550163EA0201902050 +B1321274517894N00550172EA0202002052 +B1321294517902N00550183EA0202002053 +B1321314517910N00550194EA0201902053 +B1321334517918N00550207EA0202002053 +B1321354517926N00550220EA0201902053 +B1321374517933N00550235EA0201902053 +B1321394517940N00550250EA0202102054 +B1321414517947N00550263EA0202202055 +B1321434517954N00550277EA0202002055 +B1321454517961N00550291EA0202002054 +B1321474517970N00550306EA0202102054 +B1321494517978N00550318EA0202202055 +B1321514517984N00550330EA0202102055 +B1321534517991N00550342EA0202002054 +B1321554517999N00550354EA0201902052 +B1321574518007N00550365EA0201902052 +B1321594518017N00550377EA0201802052 +B1322014518027N00550388EA0201702051 +B1322034518036N00550400EA0201402049 +B1322054518045N00550413EA0201102047 +B1322074518055N00550427EA0201102045 +B1322094518064N00550441EA0201102044 +B1322114518072N00550454EA0201002044 +B1322134518081N00550467EA0200902043 +B1322154518090N00550481EA0201002043 +B1322174518098N00550496EA0201102044 +B1322194518105N00550510EA0201002044 +B1322214518113N00550523EA0200702043 +B1322234518121N00550538EA0200502040 +B1322254518128N00550553EA0200302039 +B1322274518135N00550566EA0200002037 +B1322294518143N00550579EA0199502033 +B1322314518151N00550593EA0199102028 +B1322334518160N00550606EA0198802025 +B1322354518169N00550618EA0198502021 +B1322374518178N00550632EA0198202018 +B1322394518186N00550645EA0197802015 +B1322414518194N00550658EA0197502011 +B1322434518203N00550671EA0197302008 +B1322454518213N00550683EA0197002006 +B1322474518221N00550695EA0196602002 +B1322494518230N00550707EA0196201998 +B1322514518240N00550720EA0195801994 +B1322534518249N00550734EA0195601991 +B1322554518257N00550747EA0195401989 +B1322574518264N00550761EA0195101986 +B1322594518271N00550775EA0194601982 +B1323014518280N00550790EA0194201978 +B1323034518288N00550804EA0194001975 +B1323054518296N00550818EA0193601972 +B1323074518304N00550831EA0193101968 +B1323094518312N00550845EA0192701963 +B1323114518321N00550861EA0192401959 +B1323134518329N00550875EA0192101956 +B1323154518337N00550888EA0191901953 +B1323174518346N00550901EA0191501951 +B1323194518354N00550916EA0191001946 +B1323214518362N00550932EA0190601942 +B1323234518368N00550950EA0190201938 +B1323254518374N00550967EA0190001934 +B1323274518379N00550983EA0189601931 +B1323294518384N00550999EA0189301928 +B1323314518389N00551015EA0189101925 +B1323334518394N00551031EA0188901923 +B1323354518402N00551044EA0188501920 +B1323374518411N00551055EA0188101916 +B1323394518424N00551062EA0187901912 +B1323414518437N00551064EA0187701910 +B1323434518450N00551062EA0187501908 +B1323454518463N00551062EA0187501907 +B1323474518475N00551060EA0187701907 +B1323494518487N00551058EA0187701908 +B1323514518499N00551058EA0187801908 +B1323534518512N00551057EA0187901909 +B1323554518524N00551055EA0187901911 +B1323574518535N00551053EA0187601911 +B1323594518546N00551050EA0187201910 +B1324014518559N00551045EA0187101908 +B1324034518572N00551042EA0187001907 +B1324054518585N00551039EA0187101907 +B1324074518599N00551034EA0187201907 +B1324094518613N00551029EA0187601909 +B1324114518625N00551023EA0187901911 +B1324134518635N00551015EA0187901912 +B1324154518645N00551007EA0187801913 +B1324174518655N00551004EA0187601913 +B1324194518666N00550995EA0187501912 +B1324214518671N00550979EA0187401911 +B1324234518659N00550964EA0187301911 +B1324254518651N00550964EA0187301910 +B1324274518644N00550970EA0187101908 +B1324294518635N00550976EA0187001906 +B1324314518627N00550984EA0187001905 +B1324334518620N00550993EA0186901905 +B1324354518614N00550997EA0186501903 +B1324374518605N00551002EA0186201900 +B1324394518596N00551009EA0186001898 +B1324414518588N00551015EA0185901897 +B1324434518581N00551021EA0185701894 +B1324454518572N00551027EA0185601892 +B1324474518563N00551033EA0185501890 +B1324494518555N00551038EA0185401889 +B1324514518546N00551043EA0185401888 +B1324534518537N00551050EA0185401888 +B1324554518528N00551056EA0185401888 +B1324574518519N00551061EA0185201887 +B1324594518510N00551067EA0184901885 +B1325014518500N00551074EA0184701883 +B1325034518491N00551082EA0184601882 +B1325054518481N00551089EA0184401880 +B1325074518471N00551095EA0184301878 +B1325094518460N00551100EA0184301877 +B1325114518450N00551105EA0184401877 +B1325134518440N00551110EA0184601878 +B1325154518431N00551112EA0184901880 +B1325174518421N00551110EA0185601883 +B1325194518413N00551109EA0185801887 +B1325214518406N00551113EA0185401889 +B1325234518399N00551119EA0185201888 +B1325254518390N00551125EA0185201887 +B1325274518382N00551131EA0185101887 +B1325294518375N00551137EA0184901885 +B1325314518365N00551129EA0185101884 +B1325334518356N00551115EA0186101884 +B1325354518349N00551103EA0186901887 +B1325374518343N00551094EA0187401893 +B1325394518336N00551085EA0187901900 +B1325414518328N00551074EA0188401906 +B1325434518321N00551066EA0188901912 +B1325454518312N00551064EA0188901917 +B1325474518305N00551075EA0188901921 +B1325494518305N00551092EA0189201924 +B1325514518315N00551106EA0190001928 +B1325534518329N00551110EA0190701935 +B1325554518345N00551105EA0191601942 +B1325574518357N00551091EA0192401950 +B1325594518365N00551073EA0193101959 +B1326014518370N00551056EA0193401966 +B1326034518369N00551041EA0193401972 +B1326054518358N00551031EA0193301976 +B1326074518347N00551041EA0193601978 +B1326094518350N00551058EA0193901981 +B1326114518364N00551067EA0194501983 +B1326134518381N00551064EA0194701985 +B1326154518392N00551051EA0194401986 +B1326174518390N00551035EA0194001987 +B1326194518378N00551029EA0193901985 +B1326214518366N00551036EA0194101984 +B1326234518361N00551050EA0194701984 +B1326254518361N00551063EA0195701986 +B1326274518359N00551072EA0196501992 +B1326294518354N00551083EA0197301999 +B1326314518350N00551098EA0198202007 +B1326334518358N00551111EA0198902014 +B1326354518371N00551106EA0199602021 +B1326374518371N00551087EA0200602029 +B1326394518360N00551086EA0201502037 +B1326414518357N00551107EA0202402045 +B1326434518366N00551119EA0203702057 +B1326454518378N00551118EA0204402066 +B1326474518386N00551101EA0205302076 +B1326494518380N00551086EA0206002085 +B1326514518367N00551088EA0207302094 +B1326534518362N00551102EA0208402107 +B1326554518362N00551115EA0209302120 +B1326574518366N00551125EA0209902130 +B1326594518380N00551129EA0210602139 +B1327014518395N00551119EA0211802147 +B1327034518399N00551104EA0212602155 +B1327054518383N00551092EA0213602166 +B1327074518371N00551099EA0214502176 +B1327094518370N00551115EA0215302185 +B1327114518379N00551125EA0216002193 +B1327134518394N00551118EA0216802201 +B1327154518400N00551100EA0218102210 +B1327174518395N00551086EA0219002221 +B1327194518383N00551081EA0219902230 +B1327214518375N00551087EA0220702241 +B1327234518375N00551103EA0221402248 +B1327254518385N00551116EA0222402257 +B1327274518400N00551112EA0223202265 +B1327294518408N00551096EA0224302275 +B1327314518404N00551078EA0225102286 +B1327334518392N00551075EA0225902293 +B1327354518387N00551089EA0226702301 +B1327374518394N00551105EA0227302309 +B1327394518408N00551101EA0228202315 +B1327414518415N00551079EA0229302325 +B1327434518406N00551066EA0230202335 +B1327454518396N00551068EA0231102344 +B1327474518393N00551080EA0231802352 +B1327494518400N00551092EA0232402358 +B1327514518413N00551090EA0233202367 +B1327534518422N00551073EA0234102375 +B1327554518425N00551052EA0235302385 +B1327574518424N00551035EA0236002395 +B1327594518419N00551022EA0236302403 +B1328014518406N00551027EA0236502410 +B1328034518400N00551046EA0237202416 +B1328054518405N00551063EA0238302423 +B1328074518412N00551071EA0238802430 +B1328094518422N00551076EA0239002434 +B1328114518436N00551077EA0239502437 +B1328134518448N00551065EA0240102441 +B1328154518444N00551047EA0240802447 +B1328174518432N00551041EA0241702453 +B1328194518423N00551050EA0242502461 +B1328214518421N00551067EA0242802468 +B1328234518427N00551081EA0243302472 +B1328254518436N00551093EA0243902478 +B1328274518445N00551108EA0244602485 +B1328294518452N00551122EA0245502492 +B1328314518461N00551136EA0246302500 +B1328334518471N00551150EA0247102508 +B1328354518481N00551164EA0247802515 +B1328374518488N00551181EA0248302522 +B1328394518494N00551200EA0248802527 +B1328414518500N00551219EA0249302533 +B1328434518508N00551238EA0249502537 +B1328454518516N00551258EA0249502539 +B1328474518524N00551279EA0249402540 +B1328494518533N00551298EA0249402540 +B1328514518541N00551315EA0249302540 +B1328534518548N00551331EA0249102539 +B1328554518557N00551346EA0248802536 +B1328574518566N00551359EA0248602533 +B1328594518577N00551371EA0248502531 +B1329014518587N00551383EA0248302529 +B1329034518599N00551395EA0248102526 +B1329054518611N00551407EA0247902524 +B1329074518620N00551421EA0247802523 +B1329094518629N00551435EA0247402520 +B1329114518639N00551449EA0246902516 +B1329134518650N00551464EA0246502511 +B1329154518662N00551479EA0246202507 +B1329174518674N00551492EA0246102504 +B1329194518687N00551505EA0246102502 +B1329214518699N00551516EA0246402502 +B1329234518710N00551527EA0246202501 +B1329254518722N00551538EA0246002499 +B1329274518735N00551550EA0246102499 +B1329294518747N00551561EA0246202499 +B1329314518759N00551571EA0246202499 +B1329334518771N00551581EA0246302500 +B1329354518782N00551592EA0246302500 +B1329374518795N00551604EA0246402500 +B1329394518807N00551615EA0246602502 +B1329414518817N00551625EA0246702503 +B1329434518827N00551633EA0246402503 +B1329454518839N00551641EA0246202502 +B1329474518850N00551649EA0246302501 +B1329494518861N00551657EA0246202501 +B1329514518872N00551664EA0246102501 +B1329534518883N00551672EA0245802499 +B1329554518894N00551679EA0245602496 +B1329574518906N00551685EA0245402494 +B1329594518917N00551693EA0245102492 +B1330014518928N00551700EA0244802489 +B1330034518940N00551708EA0244602485 +B1330054518952N00551718EA0244502484 +B1330074518963N00551726EA0244302483 +B1330094518973N00551734EA0244002480 +B1330114518984N00551741EA0243702477 +B1330134518994N00551750EA0243302474 +B1330154519005N00551757EA0242902470 +B1330174519017N00551765EA0242602466 +B1330194519028N00551774EA0242502464 +B1330214519039N00551780EA0242102461 +B1330234519049N00551789EA0241802457 +B1330254519060N00551800EA0241902455 +B1330274519069N00551807EA0241802455 +B1330294519078N00551814EA0241602453 +B1330314519089N00551823EA0241602452 +B1330334519099N00551830EA0241502452 +B1330354519109N00551836EA0241002450 +B1330374519118N00551845EA0240402447 +B1330394519130N00551855EA0240202444 +B1330414519142N00551865EA0240102442 +B1330434519151N00551874EA0239502438 +B1330454519161N00551882EA0238702433 +B1330474519173N00551891EA0238002426 +B1330494519186N00551899EA0237702421 +B1330514519198N00551906EA0237302417 +B1330534519210N00551913EA0236602410 +B1330554519222N00551921EA0236002404 +B1330574519236N00551929EA0235602398 +B1330594519248N00551935EA0234902393 +B1331014519260N00551942EA0234302386 +B1331034519273N00551948EA0234002380 +B1331054519285N00551955EA0233902375 +B1331074519295N00551963EA0233802373 +B1331094519305N00551970EA0233302369 +B1331114519316N00551979EA0232902365 +B1331134519327N00551988EA0232802361 +B1331154519337N00551996EA0232802360 +B1331174519346N00552004EA0232502358 +B1331194519357N00552012EA0232302355 +B1331214519368N00552021EA0232302354 +B1331234519378N00552030EA0232202354 +B1331254519387N00552038EA0232002352 +B1331274519397N00552047EA0231802350 +B1331294519408N00552054EA0231902350 +B1331314519418N00552063EA0231702349 +B1331334519427N00552072EA0231502348 +B1331354519437N00552081EA0231402347 +B1331374519447N00552090EA0231302346 +B1331394519456N00552100EA0231102344 +B1331414519466N00552109EA0231002343 +B1331434519477N00552117EA0230902342 +B1331454519487N00552123EA0230802341 +B1331474519497N00552130EA0230702340 +B1331494519508N00552137EA0230602339 +B1331514519518N00552144EA0230602339 +B1331534519528N00552151EA0230402338 +B1331554519538N00552158EA0230202336 +B1331574519548N00552166EA0230102334 +B1331594519559N00552174EA0230002333 +B1332014519568N00552183EA0229702332 +B1332034519578N00552192EA0229302329 +B1332054519589N00552201EA0229002326 +B1332074519599N00552206EA0228902324 +B1332094519608N00552210EA0228602322 +B1332114519618N00552215EA0228002319 +B1332134519629N00552221EA0227802316 +B1332154519640N00552226EA0227702314 +B1332174519647N00552233EA0227202311 +B1332194519656N00552240EA0226602307 +B1332214519667N00552248EA0226502304 +B1332234519676N00552254EA0226202301 +B1332254519686N00552258EA0225702297 +B1332274519696N00552264EA0225502293 +B1332294519706N00552271EA0225402291 +B1332314519714N00552277EA0225102288 +B1332334519721N00552285EA0224602284 +B1332354519730N00552292EA0224302280 +B1332374519739N00552297EA0224102278 +B1332394519747N00552302EA0223802275 +B1332414519756N00552306EA0223502272 +B1332434519766N00552311EA0223202269 +B1332454519775N00552317EA0223002266 +B1332474519784N00552322EA0222702264 +B1332494519794N00552327EA0222402261 +B1332514519804N00552331EA0222202258 +B1332534519814N00552337EA0222202257 +B1332554519824N00552344EA0222402256 +B1332574519833N00552352EA0222802256 +B1332594519842N00552358EA0223302259 +B1333014519850N00552365EA0223502262 +B1333034519858N00552372EA0223602264 +B1333054519868N00552377EA0223902267 +B1333074519877N00552384EA0224202270 +B1333094519885N00552392EA0224402273 +B1333114519893N00552399EA0224602276 +B1333134519903N00552405EA0224902278 +B1333154519913N00552408EA0225202281 +B1333174519924N00552410EA0225402285 +B1333194519934N00552413EA0225402287 +B1333214519944N00552418EA0225302288 +B1333234519956N00552421EA0225402288 +B1333254519968N00552424EA0225502289 +B1333274519978N00552429EA0225802291 +B1333294519987N00552433EA0226002294 +B1333314519996N00552437EA0226202296 +B1333334520004N00552443EA0226402298 +B1333354520012N00552449EA0226702301 +B1333374520020N00552456EA0226902304 +B1333394520027N00552463EA0227002306 +B1333414520036N00552473EA0227002307 +B1333434520044N00552482EA0227002307 +B1333454520053N00552491EA0227202307 +B1333474520061N00552501EA0227402309 +B1333494520069N00552511EA0227502310 +B1333514520078N00552521EA0227602312 +B1333534520087N00552535EA0228002314 +B1333554520094N00552548EA0228702317 +B1333574520101N00552562EA0229102322 +B1333594520106N00552574EA0229402326 +B1334014520113N00552584EA0229502329 +B1334034520124N00552590EA0230002332 +B1334054520133N00552598EA0230302336 +B1334074520142N00552607EA0230502340 +B1334094520153N00552612EA0230802342 +B1334114520164N00552616EA0231202346 +B1334134520175N00552621EA0231602351 +B1334154520186N00552626EA0232002354 +B1334174520197N00552631EA0232502359 +B1334194520208N00552634EA0232802363 +B1334214520219N00552636EA0233002366 +B1334234520231N00552637EA0233202369 +B1334254520242N00552635EA0233302371 +B1334274520253N00552635EA0233302372 +B1334294520265N00552635EA0233302372 +B1334314520276N00552634EA0233402373 +B1334334520288N00552633EA0233402373 +B1334354520299N00552630EA0233302373 +B1334374520311N00552627EA0233302373 +B1334394520322N00552623EA0233202372 +B1334414520333N00552617EA0233102371 +B1334434520343N00552610EA0233002370 +B1334454520353N00552604EA0232802369 +B1334474520364N00552599EA0232602367 +B1334494520376N00552597EA0232502365 +B1334514520388N00552598EA0232402364 +B1334534520400N00552600EA0232302363 +B1334554520412N00552601EA0232002361 +B1334574520424N00552603EA0231902359 +B1334594520436N00552602EA0231802357 +B1335014520448N00552601EA0231602356 +B1335034520459N00552600EA0231402354 +B1335054520470N00552599EA0231302352 +B1335074520481N00552600EA0231102350 +B1335094520492N00552601EA0230802348 +B1335114520503N00552604EA0230502345 +B1335134520515N00552606EA0230502343 +B1335154520527N00552607EA0230502342 +B1335174520537N00552609EA0230402342 +B1335194520548N00552610EA0230402341 +B1335214520560N00552610EA0230602342 +B1335234520570N00552610EA0230702343 +B1335254520580N00552609EA0230702343 +B1335274520592N00552609EA0230802344 +B1335294520603N00552611EA0230902346 +B1335314520612N00552611EA0230602346 +B1335334520623N00552610EA0230302345 +B1335354520636N00552608EA0230402344 +B1335374520647N00552607EA0230502345 +B1335394520657N00552606EA0230202344 +B1335414520667N00552606EA0230102342 +B1335434520679N00552606EA0230302341 +B1335454520690N00552606EA0230602342 +B1335474520702N00552606EA0230702344 +B1335494520714N00552605EA0231002346 +B1335514520726N00552604EA0231202349 +B1335534520738N00552604EA0231402350 +B1335554520751N00552604EA0231602352 +B1335574520765N00552605EA0231802355 +B1335594520777N00552607EA0232002357 +B1336014520790N00552609EA0232202358 +B1336034520803N00552612EA0232302360 +B1336054520817N00552615EA0232402361 +B1336074520831N00552617EA0232602362 +B1336094520846N00552618EA0233102364 +B1336114520857N00552617EA0233202367 +B1336134520866N00552618EA0232902368 +B1336154520878N00552617EA0232702367 +B1336174520890N00552615EA0232402364 +B1336194520901N00552613EA0232002361 +B1336214520911N00552613EA0231502356 +B1336234520923N00552615EA0231202353 +B1336254520932N00552619EA0231002350 +B1336274520940N00552623EA0230502346 +B1336294520949N00552626EA0230102341 +B1336314520961N00552627EA0230002338 +B1336334520969N00552631EA0229802336 +B1336354520976N00552636EA0229202331 +B1336374520986N00552637EA0228902327 +B1336394520998N00552639EA0229102324 +B1336414521010N00552640EA0229302323 +B1336434521019N00552639EA0229302322 +B1336454521029N00552638EA0229202322 +B1336474521040N00552638EA0229302324 +B1336494521049N00552638EA0229102323 +B1336514521059N00552638EA0228902321 +B1336534521071N00552637EA0229002321 +B1336554521082N00552639EA0229102322 +B1336574521090N00552641EA0228902322 +B1336594521101N00552644EA0228702320 +B1337014521114N00552648EA0228802320 +B1337034521125N00552650EA0228902322 +B1337054521136N00552650EA0228902322 +B1337074521149N00552650EA0229102322 +B1337094521161N00552650EA0229302323 +B1337114521172N00552650EA0229302324 +B1337134521184N00552650EA0229402325 +B1337154521198N00552650EA0229702327 +B1337174521210N00552650EA0229702329 +B1337194521221N00552650EA0229602329 +B1337214521233N00552648EA0229502328 +B1337234521247N00552646EA0229802329 +B1337254521259N00552646EA0230102332 +B1337274521270N00552645EA0230502335 +B1337294521281N00552645EA0230802339 +B1337314521290N00552649EA0230902342 +B1337334521299N00552651EA0230902345 +B1337354521310N00552651EA0231002345 +B1337374521321N00552653EA0231202347 +B1337394521332N00552655EA0231402349 +B1337414521342N00552656EA0231502350 +B1337434521354N00552657EA0231502351 +B1337454521367N00552658EA0231602351 +B1337474521379N00552656EA0231802353 +B1337494521390N00552654EA0231802354 +B1337514521401N00552652EA0231702353 +B1337534521412N00552651EA0231702354 +B1337554521423N00552651EA0231702353 +B1337574521435N00552653EA0231902354 +B1337594521446N00552653EA0232202355 +B1338014521456N00552654EA0232302357 +B1338034521466N00552657EA0232302357 +B1338054521478N00552661EA0232602358 +B1338074521490N00552666EA0233002360 +B1338094521501N00552668EA0233302363 +B1338114521512N00552669EA0233802366 +B1338134521523N00552671EA0234202371 +B1338154521533N00552671EA0234702375 +B1338174521543N00552670EA0235402380 +B1338194521552N00552669EA0236002387 +B1338214521561N00552668EA0236602394 +B1338234521569N00552663EA0237002400 +B1338254521575N00552653EA0237302405 +B1338274521569N00552636EA0237302409 +B1338294521556N00552626EA0237402412 +B1338314521542N00552631EA0237702415 +B1338334521535N00552645EA0237902418 +B1338354521536N00552662EA0238602422 +B1338374521543N00552675EA0239202428 +B1338394521552N00552685EA0239802435 +B1338414521561N00552694EA0240402441 +B1338434521571N00552701EA0240902446 +B1338454521582N00552706EA0241302450 +B1338474521593N00552711EA0241602454 +B1338494521604N00552717EA0241602457 +B1338514521615N00552722EA0241502458 +B1338534521626N00552730EA0241402458 +B1338554521637N00552740EA0241102456 +B1338574521649N00552747EA0240802453 +B1338594521661N00552754EA0240802451 +B1339014521674N00552760EA0241002450 +B1339034521686N00552766EA0241202450 +B1339054521696N00552769EA0240902450 +B1339074521706N00552770EA0240502447 +B1339094521717N00552772EA0240102443 +B1339114521728N00552773EA0239902439 +B1339134521740N00552774EA0240202437 +B1339154521749N00552775EA0240302436 +B1339174521757N00552777EA0240202435 +B1339194521767N00552778EA0240302434 +B1339214521778N00552779EA0240402435 +B1339234521788N00552782EA0240402436 +B1339254521797N00552785EA0240202436 +B1339274521808N00552785EA0240102435 +B1339294521818N00552787EA0239802433 +B1339314521829N00552788EA0239702432 +B1339334521839N00552791EA0239602430 +B1339354521848N00552795EA0239502430 +B1339374521859N00552797EA0239902430 +B1339394521870N00552799EA0240402431 +B1339414521880N00552802EA0240802435 +B1339434521889N00552804EA0241102440 +B1339454521898N00552806EA0241102442 +B1339474521907N00552809EA0241102443 +B1339494521919N00552811EA0241402444 +B1339514521929N00552812EA0241202446 +B1339534521938N00552814EA0241002447 +B1339554521950N00552816EA0241202446 +B1339574521963N00552817EA0241702448 +B1339594521973N00552818EA0242102451 +B1340014521982N00552819EA0242302453 +B1340034521993N00552818EA0243002457 +B1340054522003N00552819EA0243602462 +B1340074522013N00552820EA0243802465 +B1340094522023N00552820EA0243802467 +B1340114522035N00552819EA0244102469 +B1340134522046N00552818EA0244502472 +B1340154522056N00552819EA0244902476 +B1340174522065N00552821EA0245402480 +B1340194522075N00552820EA0245902485 +B1340214522083N00552818EA0246502493 +B1340234522093N00552817EA0246902497 +B1340254522100N00552816EA0247202500 +B1340274522110N00552815EA0247702504 +B1340294522119N00552814EA0247902508 +B1340314522129N00552812EA0248302511 +B1340334522140N00552811EA0248902515 +B1340354522151N00552814EA0249802521 +B1340374522160N00552818EA0250202528 +B1340394522169N00552822EA0250402533 +B1340414522178N00552827EA0250402536 +B1340434522190N00552833EA0250602538 +B1340454522202N00552840EA0250802540 +B1340474522213N00552848EA0251202544 +B1340494522224N00552856EA0251302546 +B1340514522235N00552865EA0251302548 +B1340534522246N00552873EA0251302548 +B1340554522257N00552879EA0251202548 +B1340574522268N00552884EA0250802547 +B1340594522279N00552890EA0250302544 +B1341014522290N00552894EA0249702540 +B1341034522301N00552899EA0249102534 +B1341054522313N00552903EA0248702529 +B1341074522325N00552906EA0248502526 +B1341094522337N00552910EA0248102523 +B1341114522348N00552914EA0247802519 +B1341134522360N00552920EA0247602516 +B1341154522371N00552926EA0247402514 +B1341174522381N00552932EA0247102511 +B1341194522393N00552942EA0246902507 +B1341214522405N00552954EA0247502505 +B1341234522416N00552961EA0248002505 +B1341254522426N00552968EA0248202508 +B1341274522438N00552976EA0248602512 +B1341294522450N00552982EA0249402517 +B1341314522461N00552989EA0249902524 +B1341334522471N00552997EA0250502530 +B1341354522481N00553003EA0251102537 +B1341374522492N00553012EA0251602543 +B1341394522502N00553024EA0252202550 +B1341414522512N00553034EA0252402555 +B1341434522522N00553044EA0252402559 +B1341454522533N00553053EA0252602561 +B1341474522545N00553060EA0252802564 +B1341494522556N00553066EA0253002566 +B1341514522565N00553074EA0253102568 +B1341534522576N00553081EA0253202570 +B1341554522588N00553088EA0253302570 +B1341574522601N00553095EA0253502572 +B1341594522613N00553105EA0253802575 +B1342014522625N00553115EA0253802577 +B1342034522637N00553125EA0253702578 +B1342054522650N00553137EA0253502577 +B1342074522661N00553152EA0253402575 +B1342094522673N00553166EA0253202574 +B1342114522683N00553180EA0252802572 +B1342134522694N00553196EA0252402568 +B1342154522706N00553207EA0251902564 +B1342174522718N00553218EA0251202558 +B1342194522730N00553230EA0250602552 +B1342214522744N00553240EA0250202547 +B1342234522757N00553250EA0249702542 +B1342254522771N00553259EA0249102536 +B1342274522785N00553270EA0248402529 +B1342294522798N00553279EA0248002524 +B1342314522811N00553284EA0247702520 +B1342334522824N00553288EA0247502516 +B1342354522837N00553293EA0247202513 +B1342374522850N00553299EA0246902510 +B1342394522863N00553305EA0246702507 +B1342414522874N00553312EA0246402505 +B1342434522887N00553316EA0246002501 +B1342454522900N00553321EA0245802498 +B1342474522912N00553327EA0245502496 +B1342494522924N00553333EA0245102492 +B1342514522937N00553338EA0245002489 +B1342534522950N00553344EA0245102487 +B1342554522961N00553351EA0244902486 +B1342574522973N00553359EA0244702483 +B1342594522985N00553366EA0244602482 +B1343014522998N00553372EA0244502481 +B1343034523011N00553376EA0244202479 +B1343054523023N00553380EA0243902478 +B1343074523036N00553386EA0243702477 +B1343094523047N00553393EA0243602476 +B1343114523060N00553399EA0243402475 +B1343134523072N00553404EA0243402474 +B1343154523085N00553408EA0243202472 +B1343174523098N00553411EA0243202471 +B1343194523111N00553413EA0243102471 +B1343214523124N00553415EA0242902470 +B1343234523137N00553419EA0242702467 +B1343254523150N00553422EA0242502465 +B1343274523163N00553426EA0242502464 +B1343294523175N00553430EA0242202463 +B1343314523187N00553435EA0241902460 +B1343334523200N00553441EA0241702458 +B1343354523211N00553449EA0241502456 +B1343374523222N00553455EA0241002453 +B1343394523234N00553460EA0240502449 +B1343414523246N00553467EA0240302446 +B1343434523257N00553476EA0240002443 +B1343454523268N00553479EA0239502439 +B1343474523281N00553480EA0239302436 +B1343494523292N00553485EA0239002433 +B1343514523302N00553490EA0238602429 +B1343534523314N00553494EA0238402426 +B1343554523326N00553498EA0238202424 +B1343574523337N00553503EA0237902421 +B1343594523348N00553511EA0237802418 +B1344014523358N00553520EA0237602414 +B1344034523369N00553529EA0237102410 +B1344054523379N00553537EA0236902408 +B1344074523389N00553546EA0236602406 +B1344094523399N00553556EA0236402403 +B1344114523410N00553564EA0236202401 +B1344134523421N00553572EA0236002399 +B1344154523432N00553578EA0235702396 +B1344174523443N00553583EA0235502394 +B1344194523455N00553588EA0235402392 +B1344214523466N00553592EA0235202390 +B1344234523478N00553595EA0235102388 +B1344254523490N00553600EA0235002387 +B1344274523501N00553606EA0234902385 +B1344294523512N00553613EA0234602383 +B1344314523523N00553620EA0234602382 +B1344334523534N00553627EA0234602381 +B1344354523544N00553633EA0234402379 +B1344374523555N00553640EA0234102377 +B1344394523566N00553645EA0234002375 +B1344414523577N00553650EA0233702373 +B1344434523588N00553655EA0233402371 +B1344454523599N00553660EA0233302369 +B1344474523611N00553665EA0233202368 +B1344494523621N00553668EA0232802365 +B1344514523633N00553672EA0232402362 +B1344534523644N00553677EA0232202359 +B1344554523657N00553681EA0232102356 +B1344574523669N00553683EA0232002355 +B1344594523679N00553686EA0231702353 +B1345014523691N00553689EA0231502350 +B1345034523704N00553691EA0231402349 +B1345054523715N00553694EA0231202348 +B1345074523726N00553698EA0230902345 +B1345094523737N00553704EA0230702343 +B1345114523748N00553711EA0230802342 +B1345134523757N00553719EA0230502340 +B1345154523767N00553727EA0230102337 +B1345174523777N00553737EA0230002335 +B1345194523787N00553746EA0229802333 +B1345214523799N00553751EA0229402330 +B1345234523811N00553755EA0229202327 +B1345254523823N00553760EA0229002324 +B1345274523835N00553764EA0228802322 +B1345294523847N00553768EA0228302319 +B1345314523860N00553771EA0228102316 +B1345334523872N00553775EA0227902314 +B1345354523884N00553779EA0227602311 +B1345374523896N00553783EA0227302308 +B1345394523908N00553787EA0227002305 +B1345414523920N00553791EA0226702302 +B1345434523932N00553795EA0226302299 +B1345454523945N00553798EA0226002296 +B1345474523957N00553801EA0225702293 +B1345494523970N00553804EA0225502290 +B1345514523982N00553807EA0225302288 +B1345534523994N00553809EA0225002286 +B1345554524006N00553812EA0224802283 +B1345574524018N00553816EA0224702281 +B1345594524030N00553818EA0224502280 +B1346014524041N00553821EA0224302279 +B1346034524052N00553825EA0224002276 +B1346054524064N00553829EA0223802273 +B1346074524076N00553832EA0223702272 +B1346094524087N00553835EA0223402270 +B1346114524099N00553838EA0223302267 +B1346134524111N00553841EA0223102266 +B1346154524123N00553844EA0222902264 +B1346174524135N00553849EA0222602262 +B1346194524146N00553853EA0222502260 +B1346214524158N00553858EA0222402259 +B1346234524170N00553862EA0222302258 +B1346254524181N00553867EA0222102257 +B1346274524192N00553871EA0222002256 +B1346294524204N00553876EA0221902255 +B1346314524216N00553880EA0221802254 +B1346334524227N00553885EA0221602252 +B1346354524239N00553889EA0221402251 +B1346374524251N00553894EA0221102248 +B1346394524263N00553899EA0220802245 +B1346414524275N00553903EA0220602243 +B1346434524286N00553907EA0220402240 +B1346454524297N00553911EA0220102238 +B1346474524307N00553915EA0219602234 +B1346494524318N00553919EA0219502231 +B1346514524329N00553924EA0219402229 +B1346534524339N00553928EA0219002227 +B1346554524350N00553933EA0218702224 +B1346574524362N00553938EA0218602222 +B1346594524374N00553940EA0218602222 +B1347014524385N00553942EA0218502220 +B1347034524397N00553946EA0218602219 +B1347054524409N00553950EA0218502220 +B1347074524420N00553951EA0218302219 +B1347094524430N00553952EA0218002217 +B1347114524441N00553955EA0217902215 +B1347134524451N00553957EA0217602213 +B1347154524461N00553957EA0217202210 +B1347174524471N00553960EA0217002207 +B1347194524480N00553963EA0216602204 +B1347214524487N00553967EA0216102200 +B1347234524496N00553973EA0215602195 +B1347254524505N00553977EA0215302192 +B1347274524513N00553981EA0214802187 +B1347294524521N00553986EA0214102182 +B1347314524530N00553989EA0213402175 +B1347334524540N00553991EA0212702168 +B1347354524548N00553993EA0212002161 +B1347374524558N00553996EA0211302153 +B1347394524568N00554000EA0210702146 +B1347414524578N00554005EA0210202140 +B1347434524589N00554009EA0209802135 +B1347454524600N00554011EA0209402130 +B1347474524608N00554014EA0208902126 +B1347494524618N00554017EA0208302121 +B1347514524629N00554019EA0208002116 +B1347534524639N00554022EA0207802113 +B1347554524647N00554025EA0207202109 +B1347574524656N00554027EA0206502103 +B1347594524667N00554032EA0206302098 +B1348014524677N00554036EA0206302095 +B1348034524686N00554040EA0206002093 +B1348054524696N00554044EA0205502088 +B1348074524708N00554046EA0205302085 +B1348094524719N00554046EA0204902082 +B1348114524730N00554047EA0204502078 +B1348134524742N00554048EA0204302075 +B1348154524755N00554050EA0204202073 +B1348174524766N00554050EA0204002072 +B1348194524778N00554052EA0203602069 +B1348214524790N00554055EA0203402067 +B1348234524802N00554057EA0203302066 +B1348254524813N00554057EA0202902063 +B1348274524824N00554060EA0202502059 +B1348294524836N00554063EA0202302056 +B1348314524848N00554065EA0202102054 +B1348334524859N00554068EA0201802052 +B1348354524870N00554069EA0201802050 +B1348374524882N00554071EA0202302049 +B1348394524893N00554073EA0202802049 +B1348414524903N00554076EA0202802051 +B1348434524913N00554079EA0202502051 +B1348454524925N00554082EA0202402050 +B1348474524936N00554086EA0202302050 +B1348494524946N00554090EA0202302050 +B1348514524957N00554094EA0202502050 +B1348534524967N00554102EA0203102052 +B1348554524975N00554111EA0203802055 +B1348574524983N00554119EA0204402061 +B1348594524993N00554121EA0204902067 +B1349014525000N00554106EA0205202074 +B1349034524991N00554090EA0205602080 +B1349054524978N00554092EA0206002086 +B1349074524971N00554107EA0206502091 +B1349094524975N00554124EA0207202098 +B1349114524985N00554130EA0207902106 +B1349134524996N00554124EA0208602114 +B1349154525000N00554109EA0209002121 +B1349174524995N00554094EA0209402127 +B1349194524985N00554090EA0209402131 +B1349214524974N00554099EA0209802134 +B1349234524972N00554117EA0210302137 +B1349254524976N00554134EA0211102144 +B1349274524980N00554148EA0211702152 +B1349294524988N00554157EA0212002155 +B1349314525001N00554157EA0212502160 +B1349334525008N00554143EA0212602163 +B1349354525002N00554123EA0213102166 +B1349374524988N00554119EA0213602170 +B1349394524978N00554130EA0214002174 +B1349414524977N00554149EA0214502178 +B1349434524985N00554165EA0214902183 +B1349454524998N00554169EA0215402188 +B1349474525008N00554163EA0215802192 +B1349494525015N00554149EA0216002196 +B1349514525014N00554131EA0216602199 +B1349534525004N00554120EA0217302204 +B1349554524994N00554128EA0217702208 +B1349574524992N00554146EA0218302212 +B1349594525002N00554156EA0218602216 +B1350014525014N00554150EA0218802220 +B1350034525020N00554133EA0219202225 +B1350054525015N00554115EA0219802229 +B1350074525004N00554106EA0220502236 +B1350094524994N00554111EA0221002241 +B1350114524987N00554124EA0221302246 +B1350134524984N00554139EA0221702250 +B1350154524989N00554155EA0222102255 +B1350174525000N00554159EA0222402259 +B1350194525011N00554152EA0222802262 +B1350214525018N00554138EA0223102266 +B1350234525019N00554119EA0223802270 +B1350254525012N00554101EA0224502276 +B1350274525007N00554089EA0225102283 +B1350294525002N00554082EA0225002288 +B1350314524990N00554086EA0224802291 +B1350334524980N00554100EA0224902293 +B1350354524979N00554118EA0225202295 +B1350374524987N00554131EA0225802298 +B1350394524996N00554134EA0226202302 +B1350414525007N00554132EA0226502305 +B1350434525017N00554123EA0226802307 +B1350454525024N00554108EA0226902309 +B1350474525023N00554088EA0227002311 +B1350494525013N00554077EA0227002312 +B1350514525004N00554079EA0226802310 +B1350534524996N00554085EA0226302306 +B1350554524990N00554100EA0226202302 +B1350574524994N00554115EA0226502300 +B1350594525001N00554124EA0226802300 +B1351014525010N00554129EA0227202303 +B1351034525019N00554133EA0227302305 +B1351054525027N00554140EA0227502307 +B1351074525036N00554149EA0227902309 +B1351094525046N00554154EA0228702314 +B1351114525055N00554156EA0229302320 +B1351134525063N00554159EA0229502324 +B1351154525074N00554154EA0229402327 +B1351174525076N00554139EA0229102329 +B1351194525067N00554127EA0229202330 +B1351214525056N00554131EA0229002331 +B1351234525047N00554143EA0229002330 +B1351254525045N00554161EA0229102330 +B1351274525051N00554180EA0229302330 +B1351294525061N00554194EA0229802333 +B1351314525073N00554199EA0230202337 +B1351334525084N00554202EA0230802343 +B1351354525092N00554209EA0231202348 +B1351374525100N00554211EA0231302352 +B1351394525104N00554202EA0231402354 +B1351414525099N00554189EA0231902355 +B1351434525087N00554187EA0232202358 +B1351454525075N00554200EA0232402360 +B1351474525068N00554219EA0232602362 +B1351494525069N00554241EA0233002365 +B1351514525076N00554257EA0233202368 +B1351534525088N00554265EA0233302369 +B1351554525101N00554260EA0233802371 +B1351574525104N00554246EA0234402373 +B1351594525093N00554235EA0234802378 +B1352014525080N00554243EA0234902380 +B1352034525075N00554264EA0234902382 +B1352054525078N00554285EA0235102383 +B1352074525091N00554298EA0235602389 +B1352094525104N00554296EA0236202393 +B1352114525112N00554283EA0236702399 +B1352134525113N00554268EA0237402405 +B1352154525103N00554261EA0237602410 +B1352174525091N00554268EA0237902414 +B1352194525085N00554288EA0238002417 +B1352214525090N00554307EA0238202418 +B1352234525105N00554313EA0238902422 +B1352254525118N00554312EA0239602429 +B1352274525128N00554306EA0240402437 +B1352294525134N00554298EA0241102445 +B1352314525133N00554287EA0241502451 +B1352334525121N00554279EA0242002456 +B1352354525110N00554291EA0242402460 +B1352374525109N00554312EA0243002464 +B1352394525119N00554326EA0243702470 +B1352414525129N00554333EA0244302476 +B1352434525139N00554337EA0244902482 +B1352454525152N00554343EA0245502488 +B1352474525166N00554349EA0246102493 +B1352494525180N00554352EA0246702499 +B1352514525193N00554352EA0247202505 +B1352534525205N00554355EA0247602510 +B1352554525217N00554358EA0248002514 +B1352574525228N00554363EA0248602520 +B1352594525234N00554375EA0248602524 +B1353014525240N00554393EA0249002527 +B1353034525248N00554410EA0249502533 +B1353054525257N00554421EA0249702537 +B1353074525267N00554433EA0249802540 +B1353094525277N00554447EA0250202543 +B1353114525288N00554459EA0250502547 +B1353134525297N00554469EA0250602549 +B1353154525307N00554480EA0250602550 +B1353174525318N00554490EA0250402549 +B1353194525329N00554500EA0250302548 +B1353214525340N00554508EA0250102546 +B1353234525353N00554513EA0249902544 +B1353254525366N00554519EA0250002543 +B1353274525379N00554527EA0250102543 +B1353294525392N00554534EA0250002543 +B1353314525406N00554537EA0249802542 +B1353334525420N00554546EA0249902541 +B1353354525433N00554556EA0249902541 +B1353374525445N00554562EA0249802541 +B1353394525459N00554567EA0249702539 +B1353414525473N00554574EA0249702539 +B1353434525486N00554581EA0249602538 +B1353454525500N00554587EA0249502537 +B1353474525515N00554594EA0249402537 +B1353494525529N00554600EA0249402536 +B1353514525544N00554604EA0249302535 +B1353534525558N00554609EA0249202534 +B1353554525573N00554612EA0249102533 +B1353574525587N00554615EA0248802532 +B1353594525600N00554618EA0248602530 +B1354014525613N00554620EA0248402527 +B1354034525625N00554620EA0248202525 +B1354054525635N00554619EA0247902523 +B1354074525645N00554619EA0247502520 +B1354094525656N00554618EA0247102515 +B1354114525668N00554618EA0246802512 +B1354134525680N00554620EA0246502509 +B1354154525693N00554620EA0246202506 +B1354174525705N00554618EA0246002502 +B1354194525719N00554616EA0245902500 +B1354214525732N00554614EA0245902499 +B1354234525745N00554612EA0246002499 +B1354254525758N00554609EA0246302500 +B1354274525771N00554608EA0246802502 +B1354294525783N00554610EA0247202506 +B1354314525794N00554612EA0247402509 +B1354334525805N00554614EA0247702511 +B1354354525817N00554619EA0247902513 +B1354374525828N00554619EA0248102516 +B1354394525841N00554621EA0248402519 +B1354414525853N00554628EA0248702522 +B1354434525865N00554637EA0248802525 +B1354454525878N00554645EA0248902526 +B1354474525891N00554652EA0249002527 +B1354494525905N00554660EA0249102528 +B1354514525916N00554664EA0248802528 +B1354534525927N00554667EA0248202527 +B1354554525939N00554671EA0247802524 +B1354574525952N00554675EA0247702522 +B1354594525963N00554677EA0247502522 +B1355014525973N00554680EA0247202519 +B1355034525984N00554683EA0247002516 +B1355054525997N00554686EA0246702513 +B1355074526009N00554689EA0246502510 +B1355094526021N00554694EA0246202507 +B1355114526034N00554700EA0246002505 +B1355134526046N00554706EA0245802503 +B1355154526058N00554711EA0245502500 +B1355174526071N00554719EA0245302497 +B1355194526083N00554725EA0245202495 +B1355214526095N00554728EA0244802492 +B1355234526108N00554732EA0244602489 +B1355254526120N00554739EA0244202486 +B1355274526132N00554744EA0243902483 +B1355294526143N00554749EA0243502479 +B1355314526154N00554756EA0242902474 +B1355334526164N00554764EA0242302469 +B1355354526175N00554772EA0241902463 +B1355374526186N00554782EA0241602460 +B1355394526197N00554790EA0241202455 +B1355414526209N00554796EA0241102451 +B1355434526223N00554803EA0241602449 +B1355454526234N00554809EA0241902448 +B1355474526242N00554816EA0241702448 +B1355494526251N00554818EA0241302446 +B1355514526261N00554817EA0241402445 +B1355534526272N00554820EA0241502446 +B1355554526283N00554823EA0241402447 +B1355574526295N00554825EA0241302446 +B1355594526309N00554827EA0241502446 +B1356014526323N00554825EA0241802448 +B1356034526334N00554824EA0241802450 +B1356054526346N00554824EA0241602450 +B1356074526358N00554823EA0241502449 +B1356094526372N00554824EA0241502449 +B1356114526386N00554828EA0241302449 +B1356134526399N00554831EA0241102448 +B1356154526413N00554832EA0241002446 +B1356174526426N00554831EA0240802445 +B1356194526439N00554834EA0240602443 +B1356214526453N00554839EA0240502441 +B1356234526468N00554844EA0240402440 +B1356254526482N00554850EA0240202439 +B1356274526495N00554856EA0239702436 +B1356294526510N00554862EA0239202432 +B1356314526523N00554867EA0238802427 +B1356334526537N00554871EA0238302423 +B1356354526551N00554876EA0238002419 +B1356374526564N00554879EA0237602415 +B1356394526577N00554881EA0237102411 +B1356414526590N00554882EA0236802407 +B1356434526603N00554883EA0236402403 +B1356454526616N00554883EA0236002399 +B1356474526630N00554882EA0235602396 +B1356494526643N00554881EA0235202392 +B1356514526657N00554882EA0234802388 +B1356534526671N00554882EA0234602384 +B1356554526685N00554884EA0234302382 +B1356574526698N00554887EA0234002378 +B1356594526712N00554890EA0233602374 +B1357014526727N00554893EA0233202371 +B1357034526742N00554897EA0233002368 +B1357054526756N00554901EA0232702365 +B1357074526770N00554906EA0232302361 +B1357094526784N00554910EA0232002358 +B1357114526798N00554915EA0231702355 +B1357134526812N00554921EA0231402352 +B1357154526826N00554926EA0231102349 +B1357174526840N00554931EA0230902346 +B1357194526854N00554936EA0230702344 +B1357214526868N00554941EA0230402342 +B1357234526882N00554945EA0230202339 +B1357254526896N00554950EA0229902337 +B1357274526910N00554955EA0229702334 +B1357294526925N00554960EA0229502331 +B1357314526939N00554965EA0229402330 +B1357334526951N00554971EA0229202328 +B1357354526964N00554978EA0228802325 +B1357374526978N00554985EA0228502322 +B1357394526992N00554991EA0228202319 +B1357414527005N00554997EA0227802315 +B1357434527019N00555005EA0227502312 +B1357454527032N00555012EA0227102309 +B1357474527045N00555018EA0226602305 +B1357494527058N00555024EA0226202300 +B1357514527071N00555030EA0225702295 +B1357534527084N00555037EA0225202290 +B1357554527097N00555044EA0224702285 +B1357574527111N00555053EA0224402280 +B1357594527124N00555061EA0224302277 +B1358014527136N00555071EA0224102275 +B1358034527149N00555080EA0223902273 +B1358054527161N00555088EA0223702272 +B1358074527173N00555098EA0223602270 +B1358094527186N00555107EA0223602269 +B1358114527197N00555113EA0223402269 +B1358134527209N00555119EA0223102267 +B1358154527222N00555126EA0223002265 +B1358174527235N00555135EA0222902265 +B1358194527245N00555144EA0222402263 +B1358214527257N00555153EA0222002260 +B1358234527271N00555161EA0221902258 +B1358254527283N00555172EA0221902257 +B1358274527293N00555181EA0221702255 +B1358294527306N00555189EA0221402252 +B1358314527318N00555197EA0221302250 +B1358334527331N00555203EA0221002248 +B1358354527344N00555208EA0220902246 +B1358374527357N00555212EA0220702245 +B1358394527370N00555216EA0220402242 +B1358414527384N00555220EA0220202240 +B1358434527397N00555223EA0220102237 +B1358454527412N00555228EA0220002236 +B1358474527426N00555232EA0219902235 +B1358494527439N00555236EA0219802234 +B1358514527453N00555239EA0219602232 +B1358534527467N00555242EA0219402230 +B1358554527481N00555248EA0219202229 +B1358574527494N00555255EA0219002227 +B1358594527507N00555261EA0218702224 +B1359014527520N00555268EA0218402222 +B1359034527533N00555274EA0218202219 +B1359054527546N00555280EA0217902216 +B1359074527560N00555286EA0217502213 +B1359094527573N00555291EA0217202209 +B1359114527587N00555294EA0216902206 +B1359134527600N00555297EA0216602203 +B1359154527614N00555302EA0216302200 +B1359174527628N00555306EA0215902196 +B1359194527641N00555310EA0215502193 +B1359214527655N00555314EA0215202189 +B1359234527668N00555317EA0214802185 +B1359254527682N00555321EA0214602182 +B1359274527695N00555326EA0214202178 +B1359294527708N00555330EA0213802174 +B1359314527721N00555335EA0213602171 +B1359334527734N00555341EA0213302168 +B1359354527747N00555347EA0212902164 +B1359374527760N00555353EA0212702161 +B1359394527773N00555360EA0212502158 +B1359414527786N00555367EA0212202156 +B1359434527799N00555374EA0211802152 +B1359454527812N00555381EA0211602150 +B1359474527825N00555387EA0211402148 +B1359494527837N00555392EA0211202146 +B1359514527848N00555400EA0211002144 +B1359534527859N00555407EA0210702142 +B1359554527869N00555413EA0210502139 +B1359574527879N00555419EA0210202137 +B1359594527890N00555427EA0210102135 +B1400014527900N00555434EA0210102134 +B1400034527910N00555438EA0209902133 +B1400054527920N00555442EA0209802132 +B1400074527930N00555448EA0209702131 +B1400094527940N00555453EA0209702131 +B1400114527949N00555457EA0209402130 +B1400134527960N00555464EA0209002128 +B1400154527972N00555473EA0209002126 +B1400174527984N00555481EA0208802125 +B1400194527994N00555489EA0208402122 +B1400214528007N00555496EA0207902117 +B1400234528020N00555501EA0207702115 +B1400254528032N00555505EA0207302112 +B1400274528045N00555509EA0206902107 +B1400294528058N00555516EA0206702104 +B1400314528071N00555523EA0206702102 +B1400334528082N00555528EA0206502100 +B1400354528094N00555532EA0206102097 +B1400374528107N00555535EA0205902094 +B1400394528119N00555538EA0205702092 +B1400414528131N00555544EA0205502090 +B1400434528143N00555550EA0205402088 +B1400454528154N00555556EA0205202087 +B1400474528165N00555563EA0205002085 +B1400494528176N00555572EA0204802083 +B1400514528186N00555582EA0204402081 +B1400534528195N00555591EA0204002077 +B1400554528207N00555603EA0204002074 +B1400574528217N00555617EA0204202073 +B1400594528225N00555628EA0204202073 +B1401014528234N00555638EA0204002072 +B1401034528242N00555650EA0203902070 +B1401054528251N00555662EA0203802068 +B1401074528260N00555674EA0203702068 +B1401094528269N00555686EA0203402066 +B1401114528278N00555698EA0203202064 +B1401134528289N00555711EA0203202063 +B1401154528297N00555726EA0203002062 +B1401174528305N00555741EA0202702060 +B1401194528313N00555758EA0202402057 +B1401214528321N00555774EA0202202055 +B1401234528330N00555789EA0201902053 +B1401254528338N00555804EA0201602049 +B1401274528347N00555819EA0201502047 +B1401294528356N00555833EA0201402045 +B1401314528365N00555847EA0201302044 +B1401334528374N00555861EA0201302043 +B1401354528383N00555875EA0201302043 +B1401374528392N00555888EA0201202043 +B1401394528402N00555901EA0201002042 +B1401414528412N00555914EA0200902041 +B1401434528422N00555927EA0200902040 +B1401454528433N00555939EA0200902041 +B1401474528443N00555952EA0200902041 +B1401494528453N00555964EA0200702040 +B1401514528465N00555976EA0200602039 +B1401534528476N00555988EA0200402037 +B1401554528487N00556000EA0200102035 +B1401574528498N00556014EA0200002033 +B1401594528508N00556027EA0199802032 +B1402014528518N00556039EA0199402029 +B1402034528529N00556051EA0199102026 +B1402054528540N00556063EA0199002024 +B1402074528550N00556073EA0198602022 +B1402094528561N00556083EA0198202018 +B1402114528573N00556092EA0197902015 +B1402134528585N00556101EA0197602012 +B1402154528595N00556112EA0197202009 +B1402174528605N00556123EA0196602004 +B1402194528616N00556136EA0196301999 +B1402214528627N00556149EA0196001996 +B1402234528637N00556161EA0195601992 +B1402254528647N00556173EA0195001987 +B1402274528657N00556188EA0194701982 +B1402294528668N00556202EA0194401979 +B1402314528678N00556215EA0194001975 +B1402334528689N00556229EA0193601971 +B1402354528700N00556243EA0193301968 +B1402374528710N00556257EA0193001965 +B1402394528720N00556272EA0192501961 +B1402414528730N00556287EA0192201956 +B1402434528741N00556301EA0191901953 +B1402454528750N00556315EA0191501949 +B1402474528759N00556329EA0191001944 +B1402494528771N00556344EA0190601940 +B1402514528781N00556359EA0190401938 +B1402534528790N00556373EA0190001934 +B1402554528800N00556388EA0189601930 +B1402574528811N00556404EA0189301927 +B1402594528821N00556421EA0189101924 +B1403014528832N00556436EA0188901922 +B1403034528842N00556450EA0188801920 +B1403054528852N00556466EA0188501917 +B1403074528862N00556480EA0188301915 +B1403094528873N00556494EA0188101912 +B1403114528882N00556508EA0187801911 +B1403134528892N00556522EA0187601908 +B1403154528903N00556534EA0187301905 +B1403174528912N00556548EA0187101903 +B1403194528921N00556562EA0186801900 +B1403214528930N00556575EA0186501897 +B1403234528940N00556589EA0186201894 +B1403254528949N00556603EA0185901891 +B1403274528958N00556617EA0185601888 +B1403294528966N00556632EA0185201884 +B1403314528975N00556647EA0184801880 +B1403334528984N00556661EA0184401876 +B1403354528992N00556676EA0184001872 +B1403374529002N00556690EA0183601868 +B1403394529011N00556705EA0183301864 +B1403414529021N00556721EA0183101861 +B1403434529029N00556736EA0182701859 +B1403454529038N00556750EA0182301855 +B1403474529048N00556766EA0182001851 +B1403494529057N00556782EA0181701848 +B1403514529067N00556796EA0181301844 +B1403534529077N00556810EA0180901840 +B1403554529088N00556825EA0180601836 +B1403574529098N00556840EA0180301833 +B1403594529108N00556854EA0180001830 +B1404014529119N00556867EA0179701827 +B1404034529129N00556880EA0179401824 +B1404054529139N00556893EA0179001821 +B1404074529149N00556908EA0178701817 +B1404094529159N00556923EA0178401814 +B1404114529169N00556937EA0178001811 +B1404134529179N00556951EA0177701807 +B1404154529189N00556966EA0177401804 +B1404174529199N00556981EA0177101801 +B1404194529208N00556996EA0176701798 +B1404214529219N00557011EA0176401794 +B1404234529229N00557026EA0176101791 +B1404254529238N00557042EA0175801788 +B1404274529248N00557058EA0175501784 +B1404294529258N00557074EA0175201781 +B1404314529269N00557090EA0174901778 +B1404334529279N00557105EA0174701776 +B1404354529288N00557120EA0174401773 +B1404374529299N00557135EA0174101769 +B1404394529309N00557150EA0173801767 +B1404414529319N00557164EA0173601765 +B1404434529329N00557178EA0173301762 +B1404454529339N00557193EA0173101759 +B1404484529350N00557207EA0173001758 +B1404504529359N00557219EA0172701756 +B1404524529369N00557233EA0172401754 +B1404544529379N00557247EA0172301751 +B1404564529390N00557261EA0172201750 +B1404584529399N00557272EA0172001749 +B1405004529409N00557284EA0171601746 +B1405024529420N00557297EA0171401744 +B1405044529431N00557309EA0171201742 +B1405064529441N00557321EA0171001740 +B1405084529451N00557333EA0170701737 +B1405104529461N00557346EA0170401733 +B1405124529471N00557359EA0170101731 +B1405144529481N00557372EA0170001729 +B1405164529490N00557385EA0169801727 +B1405184529500N00557397EA0169501724 +B1405204529509N00557410EA0169301721 +B1405224529519N00557423EA0169201720 +B1405244529528N00557436EA0168901717 +B1405264529538N00557448EA0168501714 +B1405284529548N00557463EA0168201710 +B1405304529557N00557478EA0167901708 +B1405324529567N00557492EA0167501704 +B1405344529576N00557508EA0167201701 +B1405364529585N00557523EA0167001698 +B1405384529595N00557538EA0166801696 +B1405404529604N00557551EA0166701694 +B1405424529612N00557564EA0166501692 +B1405444529621N00557578EA0166301690 +B1405464529629N00557592EA0166001688 +B1405484529638N00557606EA0165801685 +B1405504529645N00557620EA0165601683 +B1405524529654N00557635EA0165401681 +B1405544529662N00557650EA0165201679 +B1405564529669N00557666EA0165101677 +B1405584529677N00557679EA0164801675 +B1406004529686N00557693EA0164601673 +B1406024529695N00557706EA0164401670 +B1406044529704N00557717EA0164201668 +B1406064529713N00557730EA0163901666 +B1406084529722N00557743EA0163701663 +B1406104529732N00557755EA0163601662 +B1406124529740N00557768EA0163501661 +B1406144529748N00557780EA0163301658 +B1406164529757N00557793EA0163101656 +B1406184529766N00557806EA0162901655 +B1406204529774N00557817EA0162701653 +B1406224529783N00557829EA0162401650 +B1406244529792N00557841EA0162301648 +B1406264529801N00557851EA0162101647 +B1406284529810N00557861EA0161801644 +B1406304529819N00557872EA0161601642 +B1406324529829N00557883EA0161501640 +B1406344529837N00557894EA0161201638 +B1406364529846N00557905EA0160901635 +B1406384529855N00557917EA0160701633 +B1406404529864N00557929EA0160401631 +B1406424529872N00557941EA0160101628 +B1406444529882N00557952EA0159901625 +B1406464529892N00557964EA0159701622 +B1406484529900N00557976EA0159401620 +B1406504529910N00557988EA0159001617 +B1406524529920N00557999EA0158801614 +B1406544529929N00558011EA0158601612 +B1406564529939N00558022EA0158401609 +B1406584529948N00558033EA0158101607 +B1407004529958N00558045EA0157901605 +B1407024529967N00558056EA0157701603 +B1407044529976N00558068EA0157401600 +B1407064529986N00558079EA0157101597 +B1407084529996N00558090EA0156901594 +B1407104530005N00558102EA0156601591 +B1407124530014N00558114EA0156301588 +B1407144530024N00558127EA0156101586 +B1407164530033N00558140EA0155901584 +B1407184530042N00558154EA0155701582 +B1407204530051N00558167EA0155501580 +B1407224530059N00558180EA0155201577 +B1407244530068N00558193EA0155001575 +B1407264530077N00558206EA0154801573 +B1407284530086N00558218EA0154601571 +B1407304530096N00558230EA0154301568 +B1407324530105N00558242EA0154101565 +B1407344530114N00558255EA0153901564 +B1407364530123N00558267EA0153701561 +B1407384530132N00558280EA0153401559 +B1407404530141N00558294EA0153301557 +B1407424530150N00558306EA0153101555 +B1407444530158N00558319EA0152901553 +B1407464530167N00558332EA0152701551 +B1407484530176N00558344EA0152501549 +B1407504530184N00558356EA0152201547 +B1407524530193N00558369EA0152001544 +B1407544530202N00558382EA0151701542 +B1407564530210N00558395EA0151501539 +B1407584530219N00558407EA0151301537 +B1408004530227N00558420EA0151101535 +B1408024530236N00558433EA0151001534 +B1408044530244N00558445EA0150801532 +B1408064530253N00558457EA0150601530 +B1408084530261N00558470EA0150401528 +B1408104530269N00558482EA0150201526 +B1408124530277N00558494EA0150001523 +B1408144530285N00558506EA0149701521 +B1408164530294N00558518EA0149601519 +B1408184530302N00558529EA0149401517 +B1408204530311N00558541EA0149101515 +B1408224530320N00558552EA0148901512 +B1408244530329N00558564EA0148701510 +B1408264530338N00558575EA0148501509 +B1408284530347N00558587EA0148301507 +B1408304530356N00558598EA0148101504 +B1408324530365N00558610EA0147901503 +B1408344530373N00558622EA0147801501 +B1408364530382N00558633EA0147501499 +B1408384530391N00558645EA0147401497 +B1408404530400N00558657EA0147201495 +B1408424530408N00558669EA0147001493 +B1408444530418N00558681EA0146801491 +B1408464530426N00558693EA0146601489 +B1408484530435N00558704EA0146501488 +B1408504530443N00558717EA0146301486 +B1408524530452N00558729EA0146101484 +B1408544530461N00558740EA0145901482 +B1408564530470N00558752EA0145701480 +B1408584530478N00558764EA0145501478 +B1409004530487N00558776EA0145301476 +B1409024530496N00558787EA0145101474 +B1409044530505N00558798EA0144901472 +B1409064530514N00558809EA0144701470 +B1409084530523N00558821EA0144501468 +B1409104530531N00558832EA0144201465 +B1409124530540N00558844EA0144001463 +B1409144530549N00558856EA0143801461 +B1409164530557N00558868EA0143501458 +B1409184530566N00558880EA0143201455 +B1409204530574N00558893EA0143001453 +B1409224530583N00558905EA0142801451 +B1409244530591N00558917EA0142601448 +B1409264530600N00558928EA0142401446 +B1409284530609N00558940EA0142201444 +B1409304530617N00558951EA0141901441 +B1409324530626N00558963EA0141601439 +B1409344530635N00558975EA0141401436 +B1409364530643N00558987EA0141201434 +B1409384530651N00558999EA0140901431 +B1409404530660N00559010EA0140601428 +B1409424530669N00559022EA0140401426 +B1409444530677N00559033EA0140101423 +B1409464530686N00559044EA0139701420 +B1409484530695N00559056EA0139401417 +B1409504530703N00559067EA0139101414 +B1409524530712N00559079EA0138701411 +B1409544530721N00559090EA0138401407 +B1409564530730N00559102EA0138101404 +B1409584530739N00559113EA0137801401 +B1410004530747N00559124EA0137501398 +B1410024530756N00559137EA0137201395 +B1410044530764N00559149EA0136901392 +B1410064530773N00559161EA0136601389 +B1410084530781N00559173EA0136401386 +B1410104530789N00559185EA0136101383 +B1410124530798N00559197EA0135801380 +B1410144530806N00559209EA0135401377 +B1410164530815N00559220EA0135101374 +B1410184530823N00559232EA0134801371 +B1410204530831N00559244EA0134501367 +B1410224530840N00559256EA0134201364 +B1410244530848N00559268EA0133901361 +B1410264530856N00559281EA0133701359 +B1410284530864N00559293EA0133401356 +B1410304530871N00559306EA0133101353 +B1410324530879N00559319EA0132901350 +B1410344530886N00559332EA0132601348 +B1410364530894N00559345EA0132401345 +B1410384530902N00559358EA0132101342 +B1410404530909N00559371EA0131901340 +B1410424530917N00559384EA0131701337 +B1410444530924N00559397EA0131401334 +B1410464530932N00559410EA0131201332 +B1410484530939N00559423EA0131001330 +B1410504530947N00559435EA0130801328 +B1410524530955N00559448EA0130701326 +B1410544530963N00559460EA0130401324 +B1410564530970N00559473EA0130301322 +B1410584530977N00559485EA0130001320 +B1411004530984N00559498EA0129801317 +B1411024530992N00559511EA0129601315 +B1411044530999N00559523EA0129401314 +B1411064531006N00559535EA0129101311 +B1411084531014N00559548EA0129001309 +B1411104531021N00559561EA0128801308 +B1411124531028N00559574EA0128601305 +B1411144531034N00559587EA0128301302 +B1411164531041N00559602EA0128101300 +B1411184531047N00559615EA0127801298 +B1411204531054N00559628EA0127501294 +B1411224531061N00559642EA0127201291 +B1411244531068N00559655EA0126901289 +B1411264531074N00559668EA0126601286 +B1411284531080N00559682EA0126301283 +B1411304531087N00559695EA0126001280 +B1411324531093N00559709EA0125701277 +B1411344531100N00559723EA0125401273 +B1411364531107N00559737EA0125201271 +B1411384531114N00559750EA0124901268 +B1411404531119N00559764EA0124701266 +B1411424531126N00559779EA0124601264 +B1411444531132N00559793EA0124501263 +B1411464531138N00559806EA0124301262 +B1411484531144N00559820EA0124101260 +B1411504531151N00559834EA0124001259 +B1411524531157N00559848EA0123701257 +B1411544531163N00559861EA0123401254 +B1411564531170N00559874EA0123001251 +B1411584531177N00559885EA0122801248 +B1412004531183N00559898EA0122601245 +B1412024531189N00559912EA0122501243 +B1412044531193N00559927EA0122201242 +B1412064531197N00559940EA0121601239 +B1412084531203N00559949EA0121201234 +B1412104531210N00559959EA0121001231 +B1412124531215N00559970EA0120601229 +B1412144531221N00559979EA0120201224 +B1412164531228N00559988EA0119901220 +B1412184531234N00559998EA0119601218 +B1412204531240N00600008EA0119101214 +B1412224531246N00600019EA0118801209 +B1412244531253N00600031EA0118501206 +B1412264531259N00600042EA0118201203 +B1412284531265N00600052EA0117801199 +B1412304531271N00600064EA0117501195 +B1412324531277N00600075EA0117201192 +B1412344531284N00600085EA0116801188 +B1412364531290N00600094EA0116401184 +B1412384531298N00600104EA0116001180 +B1412404531305N00600114EA0115701176 +B1412424531312N00600123EA0115301172 +B1412444531319N00600133EA0115101169 +B1412464531327N00600143EA0114901166 +B1412484531334N00600153EA0114601163 +B1412504531342N00600161EA0114401161 +B1412524531350N00600169EA0114501160 +B1412544531357N00600177EA0114401160 +B1412564531365N00600185EA0114401160 +B1412584531371N00600194EA0114301159 +B1413004531377N00600203EA0114001157 +B1413024531384N00600214EA0113801155 +B1413044531389N00600227EA0113701154 +B1413064531396N00600239EA0113601152 +B1413084531402N00600251EA0113401151 +B1413104531409N00600262EA0113301149 +B1413124531416N00600271EA0113101148 +B1413144531423N00600280EA0112901146 +B1413164531430N00600290EA0112601144 +B1413184531438N00600300EA0112401141 +B1413204531445N00600309EA0112101138 +B1413224531453N00600320EA0112101136 +B1413244531461N00600331EA0112001135 +B1413264531469N00600342EA0111901135 +B1413284531476N00600353EA0111701133 +B1413304531485N00600363EA0111601132 +B1413324531492N00600373EA0111501131 +B1413344531499N00600383EA0111301129 +B1413364531507N00600391EA0111001127 +B1413384531513N00600400EA0110801125 +B1413404531519N00600410EA0110401122 +B1413424531525N00600419EA0109901118 +B1413444531532N00600429EA0109501113 +B1413464531539N00600440EA0109301110 +B1413484531545N00600452EA0109001108 +B1413504531551N00600465EA0108701104 +B1413524531559N00600476EA0108401101 +B1413544531565N00600488EA0108201099 +B1413564531571N00600502EA0108001096 +B1413584531577N00600517EA0107701094 +B1414004531584N00600531EA0107501091 +B1414024531590N00600546EA0107301089 +B1414044531596N00600560EA0107101087 +B1414064531602N00600575EA0106901085 +B1414084531609N00600590EA0106801083 +B1414104531616N00600606EA0106701082 +B1414124531623N00600622EA0106701081 +B1414144531629N00600638EA0106601081 +B1414164531636N00600653EA0106401080 +B1414184531642N00600668EA0106301078 +B1414204531650N00600684EA0106201077 +B1414224531656N00600701EA0106101077 +B1414244531661N00600716EA0106001076 +B1414264531668N00600731EA0105701073 +B1414284531675N00600747EA0105501071 +B1414304531682N00600760EA0105401069 +B1414324531689N00600773EA0105101068 +B1414344531693N00600787EA0105001066 +B1414364531698N00600802EA0104701063 +B1414384531703N00600815EA0104501060 +B1414404531709N00600829EA0104201058 +B1414424531715N00600842EA0104001055 +B1414444531723N00600853EA0103901053 +B1414464531729N00600864EA0103701052 +B1414484531735N00600877EA0103501050 +B1414504531742N00600890EA0103601049 +B1414524531746N00600902EA0103601050 +B1414544531748N00600914EA0103301049 +B1414564531753N00600926EA0103201047 +B1414584531758N00600939EA0103301047 +B1415004531760N00600952EA0103001047 +B1415024531765N00600964EA0102801045 +B1415044531770N00600978EA0102901045 +B1415064531774N00600993EA0102901045 +B1415084531778N00601004EA0102901045 +B1415104531784N00601015EA0102801044 +B1415124531789N00601026EA0102901044 +B1415144531795N00601038EA0103001045 +B1415164531800N00601050EA0103001045 +B1415184531805N00601064EA0102901044 +B1415204531810N00601077EA0103001044 +B1415224531814N00601090EA0103101044 +B1415244531818N00601102EA0103101044 +B1415264531824N00601114EA0103101044 +B1415284531828N00601124EA0103201045 +B1415304531833N00601131EA0103301045 +B1415324531838N00601140EA0103501046 +B1415344531843N00601150EA0103701049 +B1415364531847N00601160EA0103901050 +B1415384531852N00601168EA0104001051 +B1415404531857N00601176EA0104201053 +B1415424531863N00601184EA0104401055 +B1415444531868N00601193EA0104601056 +B1415464531874N00601201EA0104601058 +B1415484531879N00601208EA0104301058 +B1415504531885N00601215EA0104001057 +B1415524531892N00601222EA0103801055 +B1415544531899N00601226EA0103801053 +B1415564531906N00601229EA0103901053 +B1415584531914N00601233EA0103801053 +B1416004531921N00601234EA0103801051 +B1416024531930N00601234EA0104001052 +B1416044531939N00601235EA0104401053 +B1416064531947N00601236EA0104701056 +B1416084531954N00601237EA0104901059 +B1416104531959N00601237EA0105001060 +B1416124531965N00601237EA0105001061 +B1416144531971N00601237EA0105001061 +B1416164531977N00601236EA0105301063 +B1416184531983N00601235EA0105601066 +B1416204531989N00601234EA0105901069 +B1416224531994N00601235EA0106101071 +B1416244532000N00601234EA0106401074 +B1416264532006N00601233EA0106801079 +B1416284532010N00601232EA0107301083 +B1416304532014N00601233EA0107501086 +B1416324532018N00601232EA0107701089 +B1416344532021N00601230EA0107901091 +B1416364532025N00601230EA0108201094 +B1416384532026N00601227EA0108401095 +B1416404532025N00601221EA0108601097 +B1416424532013N00601217EA0108801099 +B1416444531997N00601226EA0109101101 +B1416464531988N00601245EA0109201103 +B1416484531988N00601267EA0109501105 +B1416504531994N00601285EA0109801109 +B1416524532002N00601290EA0110001112 +B1416544532007N00601288EA0110301113 +B1416564532010N00601283EA0110601116 +B1416584532011N00601278EA0111101121 +B1417004532012N00601277EA0111401125 +B1417024532015N00601278EA0111501128 +B1417044532015N00601276EA0111501130 +B1417064532010N00601271EA0111501132 +B1417084531996N00601274EA0111701134 +B1417104531981N00601285EA0112101137 +B1417124531972N00601305EA0112301140 +B1417144531970N00601329EA0112701143 +B1417164531976N00601345EA0113101146 +B1417184531982N00601347EA0113401150 +B1417204531985N00601347EA0113501152 +B1417224531988N00601348EA0113201153 +B1417244531992N00601347EA0113201152 +B1417264531997N00601343EA0113501154 +B1417284532000N00601342EA0113601156 +B1417304532002N00601341EA0113601156 +B1417324532004N00601337EA0113801157 +B1417344532007N00601334EA0113901159 +B1417364532010N00601331EA0113901159 +B1417384532012N00601326EA0113901158 +B1417404532016N00601320EA0114001159 +B1417424532021N00601314EA0114501161 +B1417444532024N00601310EA0114901164 +B1417464532026N00601309EA0114901166 +B1417484532027N00601308EA0114901167 +B1417504532030N00601303EA0115401169 +B1417524532032N00601299EA0116001173 +B1417544532033N00601298EA0116201177 +B1417564532035N00601298EA0116201179 +B1417584532038N00601297EA0116301180 +B1418004532040N00601294EA0116501181 +B1418024532042N00601292EA0116501183 +B1418044532045N00601290EA0116401184 +B1418064532048N00601288EA0116501183 +B1418084532051N00601285EA0116601185 +B1418104532054N00601283EA0116801186 +B1418124532058N00601280EA0117201188 +B1418144532063N00601278EA0117701192 +B1418164532065N00601274EA0118001195 +B1418184532061N00601267EA0118101198 +B1418204532048N00601266EA0118301200 +B1418224532036N00601278EA0118601202 +B1418244532031N00601301EA0118801205 +B1418264532032N00601324EA0119301210 +B1418284532039N00601337EA0119701214 +B1418304532045N00601337EA0120001218 +B1418324532046N00601331EA0120101221 +B1418344532042N00601324EA0120201223 +B1418364532031N00601321EA0120201224 +B1418384532016N00601330EA0120401225 +B1418404532006N00601349EA0120601227 +B1418424532002N00601371EA0121001230 +B1418444532004N00601390EA0121501234 +B1418464532009N00601403EA0121701236 +B1418484532017N00601411EA0122001239 +B1418504532023N00601413EA0122801243 +B1418524532026N00601409EA0123201248 +B1418544532027N00601406EA0123101251 +B1418564532031N00601404EA0123001253 +B1418584532035N00601400EA0122901254 +B1419004532031N00601391EA0122501252 +B1419024532018N00601389EA0122301250 +B1419044532002N00601401EA0122301249 +B1419064531993N00601423EA0122301247 +B1419084531992N00601447EA0122401246 +B1419104531997N00601464EA0122701247 +B1419124532003N00601471EA0122901248 +B1419144532007N00601473EA0122801249 +B1419164532011N00601473EA0122601247 +B1419184532016N00601471EA0123001247 +B1419204532021N00601471EA0123401250 +B1419224532024N00601471EA0123501253 +B1419244532026N00601471EA0123601253 +B1419264532030N00601469EA0123901255 +B1419284532033N00601467EA0124101259 +B1419304532034N00601466EA0124101260 +B1419324532037N00601464EA0124201260 +B1419344532041N00601462EA0124401262 +B1419364532045N00601460EA0124401264 +B1419384532049N00601458EA0124501264 +B1419404532055N00601455EA0124801266 +B1419424532061N00601453EA0125101269 +B1419444532067N00601449EA0125401272 +B1419464532072N00601446EA0125601275 +B1419484532076N00601444EA0125401277 +B1419504532080N00601441EA0125101277 +B1419524532084N00601438EA0125001274 +B1419544532090N00601437EA0125201275 +B1419564532095N00601435EA0125501277 +B1419584532098N00601433EA0125801279 +B1420004532103N00601430EA0126401282 +B1420024532107N00601427EA0126901285 +B1420044532111N00601427EA0126801288 +B1420064532115N00601426EA0126601289 +B1420084532123N00601422EA0126801290 +B1420104532131N00601420EA0127101292 +B1420124532137N00601419EA0127301294 +B1420144532142N00601419EA0127401295 +B1420164532148N00601417EA0127801297 +B1420184532152N00601415EA0128301301 +B1420204532156N00601414EA0128401304 +B1420224532159N00601414EA0128401305 +B1420244532158N00601410EA0128601305 +B1420264532152N00601401EA0129201307 +B1420284532140N00601403EA0129501310 +B1420304532128N00601414EA0129801313 +B1420324532117N00601432EA0129901317 +B1420344532114N00601455EA0129801318 +B1420364532123N00601471EA0130001319 +B1420384532134N00601474EA0130501323 +B1420404532138N00601473EA0131201328 +B1420424532141N00601472EA0131701334 +B1420444532145N00601472EA0132201339 +B1420464532149N00601471EA0132701345 +B1420484532148N00601465EA0132801348 +B1420504532137N00601459EA0133201352 +B1420524532124N00601467EA0133501356 +B1420544532114N00601489EA0133901359 +B1420564532114N00601514EA0134701364 +B1420584532123N00601530EA0135501371 +B1421004532131N00601535EA0136101379 +B1421024532134N00601537EA0136401385 +B1421044532138N00601536EA0136801389 +B1421064532138N00601530EA0137101394 +B1421084532130N00601526EA0137301398 +B1421104532117N00601529EA0137601402 +B1421124532104N00601544EA0138001405 +B1421144532098N00601570EA0138301408 +B1421164532100N00601594EA0138801412 +B1421184532107N00601608EA0139201416 +B1421204532114N00601610EA0139601420 +B1421224532118N00601609EA0140001423 +B1421244532122N00601609EA0139701425 +B1421264532127N00601608EA0138901426 +B1421284532132N00601604EA0138301424 +B1421304532134N00601598EA0138101420 +B1421324532136N00601599EA0137801416 +B1421344532141N00601601EA0137201411 +B1421364532148N00601598EA0137101407 +B1421384532152N00601594EA0136901405 +B1421404532156N00601590EA0136601402 +B1421424532160N00601588EA0136301398 +B1421444532165N00601585EA0136301395 +B1421464532170N00601581EA0136301393 +B1421484532175N00601578EA0136401392 +B1421504532180N00601576EA0136601392 +B1421524532185N00601572EA0136901393 +B1421544532190N00601568EA0137001394 +B1421564532193N00601564EA0136401393 +B1421584532194N00601558EA0135601391 +B1422004532197N00601550EA0135401388 +B1422024532200N00601544EA0135401386 +B1422044532205N00601539EA0135401385 +B1422064532210N00601537EA0135401384 +B1422084532216N00601538EA0135301383 +B1422104532221N00601536EA0135201382 +B1422124532226N00601531EA0135301381 +B1422144532232N00601526EA0135601381 +B1422164532237N00601524EA0135901383 +B1422184532243N00601522EA0136001384 +B1422204532249N00601518EA0135701383 +B1422224532257N00601516EA0135001381 +B1422244532265N00601513EA0134501377 +B1422264532273N00601510EA0134301374 +B1422284532282N00601510EA0134201372 +B1422304532291N00601510EA0134201371 +B1422324532301N00601513EA0134101370 +B1422344532311N00601514EA0134001368 +B1422364532321N00601516EA0134101367 +B1422384532331N00601517EA0134301367 +B1422404532340N00601518EA0134601369 +B1422424532347N00601517EA0134901371 +B1422444532353N00601514EA0135301374 +B1422464532358N00601510EA0135701378 +B1422484532364N00601506EA0135901381 +B1422504532371N00601503EA0136101384 +B1422524532376N00601500EA0136101386 +B1422544532377N00601494EA0135701387 +B1422564532373N00601489EA0135401386 +B1422584532365N00601490EA0135201384 +B1423004532355N00601498EA0135301381 +B1423024532345N00601510EA0135601382 +B1423044532336N00601522EA0135901384 +B1423064532328N00601532EA0136101386 +B1423084532319N00601544EA0136101386 +B1423104532309N00601554EA0136101386 +B1423124532300N00601553EA0136101385 +B1423144532300N00601546EA0136201385 +B1423164532305N00601541EA0136301386 +B1423184532313N00601540EA0136201385 +B1423204532321N00601537EA0136101384 +B1423224532329N00601535EA0135801382 +B1423244532336N00601532EA0135401380 +B1423264532341N00601527EA0135101377 +B1423284532341N00601519EA0134801374 +B1423304532338N00601510EA0134501370 +B1423324532335N00601501EA0134301367 +B1423344532332N00601492EA0134201365 +B1423364532328N00601485EA0133901362 +B1423384532322N00601477EA0133601359 +B1423404532316N00601466EA0133601357 +B1423424532314N00601456EA0133401356 +B1423444532312N00601446EA0133001353 +B1423464532309N00601437EA0132601350 +B1423484532307N00601427EA0132301346 +B1423504532306N00601416EA0132001343 +B1423524532303N00601406EA0131801340 +B1423544532301N00601397EA0131501338 +B1423564532300N00601386EA0131301334 +B1423584532299N00601374EA0131101332 +B1424004532297N00601363EA0130901330 +B1424024532297N00601351EA0130601327 +B1424044532298N00601338EA0130501325 +B1424064532300N00601326EA0130401324 +B1424084532304N00601316EA0130201322 +B1424104532307N00601305EA0130201321 +B1424124532310N00601293EA0130301321 +B1424144532313N00601283EA0130601323 +B1424164532316N00601274EA0130801325 +B1424184532317N00601267EA0130801327 +B1424204532319N00601261EA0130901327 +B1424224532321N00601255EA0131001328 +B1424244532324N00601248EA0130901328 +B1424264532328N00601242EA0131001328 +B1424284532331N00601235EA0131101329 +B1424304532333N00601228EA0131101330 +B1424324532336N00601222EA0131001330 +B1424344532339N00601217EA0130901329 +B1424364532343N00601211EA0130801328 +B1424384532347N00601203EA0130701327 +B1424404532350N00601196EA0130601326 +B1424424532355N00601191EA0130601326 +B1424444532359N00601187EA0130301325 +B1424464532360N00601178EA0130201323 +B1424484532355N00601169EA0130101323 +B1424504532351N00601162EA0129901321 +B1424524532354N00601157EA0129401319 +B1424544532364N00601160EA0128901316 +B1424564532374N00601174EA0128701312 +B1424584532380N00601192EA0128501309 +B1425004532385N00601212EA0128301307 +B1425024532390N00601232EA0128301305 +B1425044532394N00601252EA0128401304 +B1425064532399N00601271EA0128501304 +B1425084532404N00601289EA0128801306 +B1425104532408N00601307EA0128701307 +B1425124532412N00601322EA0128201308 +B1425144532418N00601338EA0127801307 +B1425164532425N00601356EA0127901306 +B1425184532430N00601373EA0127801305 +B1425204532434N00601391EA0127801303 +B1425224532440N00601408EA0127701302 +B1425244532446N00601424EA0127701301 +B1425264532453N00601440EA0127801301 +B1425284532458N00601456EA0128001302 +B1425304532464N00601471EA0128201304 +B1425324532470N00601486EA0128301305 +B1425344532475N00601500EA0128501307 +B1425364532480N00601515EA0128601308 +B1425384532487N00601527EA0128701308 +B1425404532494N00601536EA0128701308 +B1425424532501N00601536EA0128601308 +B1425444532505N00601523EA0128601307 +B1425464532499N00601515EA0128601306 +B1425484532486N00601516EA0128801306 +B1425504532474N00601521EA0129001309 +B1425524532463N00601524EA0129101310 +B1425544532453N00601525EA0129301311 +B1425564532442N00601526EA0129401314 +B1425584532433N00601526EA0129501315 +B1426004532425N00601522EA0129501315 +B1426024532420N00601514EA0129501315 +B1426044532417N00601504EA0129501314 +B1426064532415N00601493EA0129401314 +B1426084532412N00601482EA0129401314 +B1426104532409N00601473EA0129301314 +B1426124532406N00601462EA0129201313 +B1426144532403N00601452EA0129101312 +B1426164532399N00601442EA0129101311 +B1426184532395N00601431EA0129201311 +B1426204532394N00601420EA0129301312 +B1426224532393N00601411EA0129401313 +B1426244532391N00601403EA0129301313 +B1426264532387N00601396EA0129101312 +B1426284532383N00601386EA0128901310 +B1426304532380N00601375EA0128801308 +B1426324532377N00601364EA0128801307 +B1426344532374N00601353EA0128801307 +B1426364532372N00601344EA0128801307 +B1426384532372N00601334EA0128901308 +B1426404532372N00601326EA0129001310 +B1426424532373N00601318EA0129001310 +B1426444532373N00601309EA0129201311 +B1426464532374N00601298EA0129601312 +B1426484532376N00601288EA0129901316 +B1426504532377N00601280EA0130101318 +B1426524532379N00601271EA0130001319 +B1426544532389N00601269EA0130001319 +B1426564532397N00601282EA0130101319 +B1426584532395N00601301EA0130101320 +B1427004532386N00601316EA0130401321 +B1427024532376N00601323EA0130701323 +B1427044532366N00601321EA0131001327 +B1427064532357N00601317EA0131201330 +B1427084532351N00601311EA0131201332 +B1427104532346N00601303EA0131101332 +B1427124532344N00601294EA0131101333 +B1427144532346N00601289EA0131101332 +B1427164532352N00601290EA0131101332 +B1427184532359N00601303EA0131201331 +B1427204532360N00601321EA0131201332 +B1427224532357N00601338EA0131101332 +B1427244532354N00601355EA0131201331 +B1427264532348N00601372EA0131401332 +B1427284532339N00601385EA0131601333 +B1427304532330N00601396EA0131701335 +B1427324532320N00601408EA0132101337 +B1427344532310N00601419EA0132701341 +B1427364532302N00601431EA0133001346 +B1427384532293N00601441EA0132801349 +B1427404532280N00601440EA0132701351 +B1427424532269N00601431EA0133001352 +B1427444532266N00601420EA0133301355 +B1427464532269N00601412EA0133601358 +B1427484532275N00601409EA0133701360 +B1427504532285N00601414EA0133901361 +B1427524532291N00601432EA0134101362 +B1427544532287N00601454EA0134701365 +B1427564532277N00601466EA0135101369 +B1427584532266N00601469EA0135301371 +B1428004532255N00601464EA0135601374 +B1428024532251N00601452EA0135901376 +B1428044532255N00601443EA0136201380 +B1428064532264N00601445EA0136201382 +B1428084532273N00601457EA0136301383 +B1428104532276N00601479EA0136601385 +B1428124532268N00601495EA0136901388 +B1428144532256N00601502EA0137201391 +B1428164532244N00601503EA0137301392 +B1428184532232N00601500EA0137501393 +B1428204532224N00601487EA0137901395 +B1428224532227N00601477EA0138101398 +B1428244532235N00601478EA0138201401 +B1428264532242N00601489EA0138101402 +B1428284532247N00601510EA0138201402 +B1428304532243N00601532EA0138501404 +B1428324532231N00601545EA0138801405 +B1428344532219N00601550EA0138801406 +B1428364532207N00601551EA0138801405 +B1428384532193N00601550EA0139001404 +B1428404532184N00601538EA0139301404 +B1428424532184N00601527EA0139601406 +B1428444532187N00601520EA0139701409 +B1428464532189N00601515EA0139501410 +B1428484532192N00601511EA0139101410 +B1428504532203N00601516EA0138901408 +B1428524532214N00601524EA0138901408 +B1428544532223N00601532EA0138801408 +B1428564532231N00601539EA0138701406 +B1428584532240N00601545EA0138501404 +B1429004532250N00601550EA0138201402 +B1429024532260N00601554EA0138001400 +B1429044532271N00601554EA0138401398 +B1429064532279N00601554EA0138701398 +B1429084532286N00601556EA0138801399 +B1429104532293N00601557EA0138701398 +B1429124532302N00601556EA0138901398 +B1429144532311N00601559EA0139401399 +B1429164532319N00601560EA0139601403 +B1429184532324N00601559EA0139901406 +B1429204532330N00601556EA0140301410 +B1429224532335N00601552EA0140301413 +B1429244532336N00601545EA0139901415 +B1429264532325N00601534EA0139601415 +B1429284532309N00601534EA0139501414 +B1429304532296N00601553EA0139301414 +B1429324532297N00601575EA0139301413 +B1429344532305N00601586EA0139501413 +B1429364532313N00601586EA0139501414 +B1429384532319N00601586EA0139401413 +B1429404532327N00601587EA0139301412 +B1429424532333N00601585EA0139001411 +B1429444532341N00601583EA0138701409 +B1429464532349N00601582EA0138601406 +B1429484532359N00601584EA0138801404 +B1429504532367N00601587EA0139301404 +B1429524532374N00601590EA0139501405 +B1429544532380N00601591EA0139401405 +B1429564532387N00601591EA0139101404 +B1429584532396N00601591EA0138801401 +B1430004532406N00601594EA0138901401 +B1430024532415N00601597EA0138901400 +B1430044532422N00601598EA0138701399 +B1430064532430N00601600EA0138301397 +B1430084532439N00601601EA0137701393 +B1430104532448N00601600EA0137601390 +B1430124532457N00601600EA0137701388 +B1430144532466N00601603EA0137601387 +B1430164532477N00601603EA0137601386 +B1430184532488N00601605EA0138001385 +B1430204532498N00601608EA0138001386 +B1430224532504N00601610EA0137601385 +B1430244532512N00601610EA0137401383 +B1430264532522N00601610EA0137501383 +B1430284532530N00601610EA0137701385 +B1430304532540N00601612EA0137601385 +B1430324532549N00601615EA0137301385 +B1430344532557N00601617EA0136701383 +B1430364532565N00601619EA0136301380 +B1430384532574N00601620EA0135801376 +B1430404532582N00601617EA0135701372 +B1430424532589N00601614EA0135701371 +B1430444532597N00601613EA0135601369 +B1430464532607N00601614EA0135701369 +B1430484532615N00601615EA0135601370 +B1430504532622N00601618EA0135301368 +B1430524532631N00601623EA0135001366 +B1430544532640N00601632EA0135001365 +B1430564532648N00601645EA0134901364 +B1430584532655N00601659EA0134601362 +B1431004532662N00601672EA0134101359 +B1431024532670N00601690EA0133901356 +B1431044532677N00601709EA0133701354 +B1431064532682N00601730EA0133301351 +B1431084532687N00601751EA0133101347 +B1431104532693N00601773EA0132901345 +B1431124532697N00601793EA0132501342 +B1431144532703N00601815EA0132201338 +B1431164532708N00601837EA0132101336 +B1431184532713N00601858EA0132001334 +B1431204532719N00601873EA0131501332 +B1431224532727N00601891EA0130901328 +B1431244532734N00601912EA0130701324 +B1431264532736N00601934EA0130401321 +B1431284532736N00601951EA0129601317 +B1431304532738N00601970EA0128801312 +B1431324532741N00601991EA0128201305 +B1431344532742N00602010EA0127401299 +B1431364532744N00602028EA0126301291 +B1431384532749N00602050EA0125901284 +B1431404532754N00602073EA0125701277 +B1431424532757N00602091EA0125301273 +B1431444532762N00602109EA0125201268 +B1431464532768N00602128EA0125601264 +B1431484532771N00602148EA0126101262 +B1431504532773N00602164EA0126201263 +B1431524532776N00602181EA0126501265 +B1431544532778N00602198EA0126501267 +B1431564532779N00602214EA0126201267 +B1431584532781N00602231EA0125701266 +B1432004532784N00602251EA0125501263 +B1432024532787N00602270EA0125201261 +B1432044532789N00602289EA0124801258 +B1432064532790N00602310EA0124601255 +B1432084532792N00602331EA0124501254 +B1432104532793N00602349EA0124101252 +B1432124532794N00602369EA0123701249 +B1432144532794N00602389EA0123501246 +B1432164532797N00602408EA0123201244 +B1432184532798N00602428EA0122801242 +B1432204532799N00602449EA0122501238 +B1432224532801N00602470EA0122201235 +B1432244532801N00602491EA0122001234 +B1432264532802N00602511EA0121801231 +B1432284532805N00602531EA0121601229 +B1432304532807N00602551EA0121301226 +B1432324532809N00602571EA0120901223 +B1432344532812N00602590EA0120801221 +B1432364532814N00602610EA0120701220 +B1432384532817N00602628EA0120501218 +B1432404532820N00602645EA0120201216 +B1432424532822N00602663EA0120201214 +B1432444532824N00602681EA0120101214 +B1432464532826N00602698EA0119801212 +B1432484532829N00602716EA0119501209 +B1432504532833N00602734EA0119301207 +B1432524532838N00602751EA0119201206 +B1432544532843N00602767EA0119101204 +B1432564532852N00602791EA0119101203 +B1432584532855N00602799EA0119201203 +B1433004532861N00602813EA0119201204 +B1433024532865N00602827EA0119201204 +B1433044532870N00602839EA0119001203 +B1433064532876N00602850EA0118901202 +B1433084532884N00602859EA0118801201 +B1433104532894N00602867EA0119001201 +B1433124532904N00602873EA0119101202 +B1433144532914N00602879EA0119401204 +B1433164532922N00602885EA0119501206 +B1433184532929N00602892EA0119601208 +B1433204532937N00602897EA0119401208 +B1433224532944N00602899EA0119001208 +B1433244532953N00602900EA0118901206 +B1433264532963N00602902EA0119001204 +B1433284532972N00602904EA0119301205 +B1433304532981N00602904EA0119701207 +B1433324532989N00602904EA0120301211 +B1433344532995N00602908EA0120801217 +B1433364532999N00602907EA0120801221 +B1433384533000N00602896EA0120701224 +B1433404532990N00602884EA0121001226 +B1433424532975N00602891EA0121501230 +B1433444532966N00602910EA0122001234 +B1433464532967N00602928EA0122401239 +B1433484532974N00602940EA0122701243 +B1433504532982N00602939EA0122801244 +B1433524532984N00602927EA0122801245 +B1433544532976N00602917EA0123101246 +B1433564532957N00602918EA0123501251 +B1433584532951N00602924EA0123801252 +B1434004532942N00602941EA0124101256 +B1434024532939N00602961EA0124501259 +B1434044532943N00602977EA0124901263 +B1434064532951N00602985EA0125401268 +B1434084532958N00602983EA0125601271 +B1434104532958N00602970EA0125701274 +B1434124532948N00602961EA0126001276 +B1434144532934N00602968EA0126401280 +B1434164532924N00602986EA0126801283 +B1434184532923N00603006EA0127201286 +B1434204532929N00603021EA0127401289 +B1434224532938N00603024EA0127601291 +B1434244532942N00603016EA0127601292 +B1434264532934N00603005EA0127701294 +B1434284532919N00603006EA0128101296 +B1434304532908N00603021EA0128601299 +B1434324532902N00603039EA0129001302 +B1434344532903N00603057EA0129401307 +B1434364532908N00603072EA0129801312 +B1434384532917N00603078EA0129901315 +B1434404532925N00603074EA0129901318 +B1434424532922N00603055EA0129701319 +B1434444532908N00603053EA0129701319 +B1434464532900N00603059EA0130001320 +B1434484532888N00603072EA0130301323 +B1434504532879N00603087EA0130901327 +B1434524532869N00603111EA0131501335 +B1434544532866N00603117EA0131701337 +B1434564532861N00603131EA0131601340 +B1434584532871N00603152EA0131901344 +B1435004532877N00603146EA0132201346 +B1435024532878N00603140EA0132601348 +B1435044532864N00603125EA0132801351 +B1435064532856N00603125EA0133101352 +B1435084532835N00603142EA0133501356 +B1435104532830N00603160EA0133801359 +B1435124532832N00603177EA0134001361 +B1435144532840N00603185EA0134101361 +B1435164532846N00603182EA0134201363 +B1435184532844N00603169EA0134401365 +B1435204532832N00603160EA0134901368 +B1435224532824N00603161EA0135201369 +B1435244532808N00603168EA0135701374 +B1435264532787N00603167EA0135801379 +B1435284532780N00603153EA0135801381 +B1435304532785N00603146EA0136101383 +B1435324532789N00603149EA0136401384 +B1435344532796N00603172EA0136901390 +B1435364532799N00603183EA0137401395 +B1435384532801N00603193EA0137601397 +B1435404532803N00603200EA0137701397 +B1435424532807N00603221EA0138101401 +B1435444532812N00603234EA0138701406 +B1435464532818N00603243EA0139301412 +B1435484532821N00603246EA0139701414 +B1435504532828N00603236EA0139701419 +B1435524532821N00603221EA0140001422 +B1435544532806N00603217EA0140401426 +B1435564532791N00603224EA0140701429 +B1435584532779N00603228EA0140701431 +B1436004532766N00603218EA0140401431 +B1436024532761N00603204EA0140401431 +B1436044532764N00603197EA0139901429 +B1436064532771N00603198EA0139501425 +B1436084532778N00603205EA0139101420 +B1436104532782N00603209EA0138901417 +B1436124532794N00603222EA0138901414 +B1436144532800N00603233EA0139001414 +B1436164532806N00603244EA0139301415 +B1436184532812N00603254EA0139701417 +B1436204532817N00603261EA0140101420 +B1436224532823N00603268EA0140401423 +B1436244532829N00603276EA0140701426 +B1436264532835N00603284EA0140801428 +B1436284532841N00603290EA0141001430 +B1436304532847N00603297EA0141201432 +B1436324532854N00603304EA0141301433 +B1436344532862N00603312EA0141501435 +B1436364532869N00603320EA0141701437 +B1436384532876N00603325EA0141901439 +B1436404532883N00603330EA0142001441 +B1436424532890N00603336EA0142301444 +B1436444532897N00603341EA0142601447 +B1436464532904N00603346EA0143001451 +B1436484532911N00603349EA0143101453 +B1436504532917N00603352EA0143201455 +B1436524532925N00603354EA0143201456 +B1436544532933N00603357EA0143401457 +B1436564532940N00603357EA0143401457 +B1436584532947N00603355EA0143501458 +B1437004532950N00603347EA0143301457 +B1437024532946N00603333EA0142901456 +B1437044532934N00603326EA0143001456 +B1437064532922N00603325EA0143201457 +B1437084532911N00603322EA0143201457 +B1437104532900N00603318EA0143301457 +B1437124532889N00603317EA0143201457 +B1437144532878N00603319EA0143101455 +B1437164532866N00603320EA0143201456 +B1437184532853N00603319EA0143601458 +B1437204532842N00603318EA0144201461 +B1437224532830N00603316EA0144701466 +B1437244532821N00603310EA0145101471 +B1437264532822N00603300EA0145301474 +B1437284532829N00603296EA0145701478 +B1437304532832N00603296EA0146101481 +B1437324532837N00603299EA0146301484 +B1437344532845N00603311EA0146401488 +B1437364532851N00603323EA0146901492 +B1437384532856N00603334EA0147101494 +B1437404532862N00603342EA0147001495 +B1437424532866N00603346EA0146801495 +B1437444532876N00603354EA0146701492 +B1437464532882N00603349EA0146401490 +B1437484532879N00603333EA0146101487 +B1437504532867N00603320EA0146501485 +B1437524532856N00603315EA0147201487 +B1437544532848N00603312EA0147101488 +B1437564532838N00603308EA0147001487 +B1437584532831N00603305EA0147201488 +B1438004532818N00603302EA0147301490 +B1438024532800N00603296EA0147101490 +B1438044532791N00603286EA0147101490 +B1438064532792N00603273EA0147001489 +B1438084532802N00603273EA0146901489 +B1438104532810N00603286EA0147301491 +B1438124532814N00603295EA0147701494 +B1438144532817N00603301EA0147701495 +B1438164532823N00603310EA0147901497 +B1438184532828N00603319EA0148301500 +B1438204532833N00603326EA0148701504 +B1438224532839N00603331EA0148801506 +B1438244532847N00603337EA0149101510 +B1438264532853N00603345EA0149601514 +B1438284532859N00603353EA0150201520 +B1438304532862N00603359EA0150501524 +B1438324532871N00603363EA0150801527 +B1438344532879N00603367EA0151301532 +B1438364532886N00603367EA0151301535 +B1438384532893N00603364EA0150801537 +B1438404532901N00603366EA0150501536 +B1438424532908N00603371EA0150401534 +B1438444532915N00603375EA0150401534 +B1438464532921N00603377EA0150101531 +B1438484532928N00603377EA0149801528 +B1438504532937N00603375EA0149701526 +B1438524532945N00603375EA0149801525 +B1438544532952N00603373EA0149901525 +B1438564532961N00603370EA0150001525 +B1438584532969N00603369EA0150501526 +B1439004532977N00603370EA0150701528 +B1439024532985N00603371EA0150801529 +B1439044532992N00603369EA0151001531 +B1439064532999N00603365EA0150601531 +B1439084533006N00603360EA0150001530 +B1439104533014N00603355EA0149601527 +B1439124533022N00603351EA0149301523 +B1439144533030N00603345EA0149301521 +B1439164533039N00603343EA0149801520 +B1439184533044N00603345EA0150201520 +B1439204533049N00603344EA0150101519 +B1439224533057N00603340EA0150201520 +B1439244533064N00603339EA0150501522 +B1439264533070N00603336EA0150601523 +B1439284533078N00603331EA0150701525 +B1439304533085N00603325EA0150901527 +B1439324533093N00603320EA0151201531 +B1439344533101N00603315EA0151501534 +B1439364533109N00603315EA0151701536 +B1439384533116N00603321EA0151801538 +B1439404533123N00603329EA0151801538 +B1439424533130N00603334EA0151601537 +B1439444533138N00603339EA0151301535 +B1439464533146N00603347EA0151101533 +B1439484533154N00603356EA0150901531 +B1439504533161N00603364EA0150601528 +B1439524533168N00603373EA0150201524 +B1439544533176N00603382EA0149801521 +B1439564533185N00603391EA0149601518 +B1439584533194N00603399EA0149401515 +B1440004533203N00603406EA0149101512 +B1440024533212N00603414EA0148901510 +B1440044533221N00603423EA0148801509 +B1440064533229N00603431EA0148601507 +B1440084533237N00603440EA0148401505 +B1440104533245N00603449EA0148101502 +B1440124533254N00603458EA0147901500 +B1440144533262N00603466EA0147801498 +B1440164533270N00603474EA0147501495 +B1440184533279N00603483EA0147201493 +B1440204533287N00603492EA0147001491 +B1440224533295N00603500EA0146801488 +B1440244533304N00603506EA0146401485 +B1440264533313N00603512EA0146201483 +B1440284533322N00603519EA0146001481 +B1440304533330N00603527EA0145801479 +B1440324533338N00603538EA0145801478 +B1440344533343N00603550EA0145701477 +B1440364533350N00603562EA0145601476 +B1440384533357N00603574EA0145401475 +B1440404533364N00603587EA0145601475 +B1440424533369N00603601EA0145701476 +B1440444533372N00603615EA0145401475 +B1440464533379N00603628EA0144901473 +B1440484533386N00603641EA0144701471 +B1440504533394N00603655EA0144701471 +B1440524533401N00603668EA0144901471 +B1440544533409N00603679EA0145101473 +B1440564533416N00603691EA0145001473 +B1440584533424N00603704EA0144801471 +B1441004533433N00603718EA0144701470 +B1441024533442N00603731EA0144601469 +B1441044533451N00603744EA0144401467 +B1441064533461N00603756EA0144201465 +B1441084533472N00603768EA0144301465 +B1441104533483N00603778EA0144601466 +B1441124533493N00603786EA0145101469 +B1441144533501N00603796EA0145401472 +B1441164533510N00603807EA0145401473 +B1441184533521N00603818EA0145801476 +B1441204533529N00603830EA0146201479 +B1441224533537N00603844EA0146401481 +B1441244533547N00603858EA0146601483 +B1441264533558N00603873EA0147201487 +B1441284533568N00603878EA0147701492 +B1441304533571N00603871EA0148101496 +B1441324533568N00603862EA0148501502 +B1441344533562N00603856EA0149001508 +B1441364533558N00603850EA0149801515 +B1441384533559N00603843EA0150301520 +B1441404533565N00603836EA0150601524 +B1441424533577N00603835EA0151001529 +B1441444533587N00603854EA0151101532 +B1441464533579N00603878EA0151401536 +B1441484533565N00603879EA0151801540 +B1441504533556N00603877EA0152601546 +B1441524533550N00603875EA0153001551 +B1441544533546N00603868EA0153201554 +B1441564533549N00603856EA0153601557 +B1441584533562N00603857EA0154101561 +B1442004533572N00603874EA0154501564 +B1442024533571N00603895EA0154801567 +B1442044533559N00603907EA0155001569 +B1442064533546N00603906EA0155501574 +B1442084533540N00603897EA0156001579 +B1442104533539N00603888EA0156601586 +B1442124533543N00603883EA0156901590 +B1442144533553N00603886EA0157001592 +B1442164533565N00603900EA0157201593 +B1442184533567N00603922EA0157501596 +B1442204533559N00603940EA0157701598 +B1442224533546N00603947EA0158101601 +B1442244533537N00603944EA0158401604 +B1442264533533N00603937EA0158801609 +B1442284533533N00603930EA0159201613 +B1442304533540N00603927EA0159601617 +B1442324533550N00603935EA0159601618 +B1442344533556N00603958EA0159501618 +B1442364533550N00603981EA0159501618 +B1442384533536N00603988EA0159601617 +B1442404533525N00603985EA0159901619 +B1442424533516N00603982EA0160301623 +B1442444533508N00603980EA0160701627 +B1442464533499N00603977EA0161301632 +B1442484533490N00603975EA0162101639 +B1442504533484N00603974EA0162701645 +B1442524533479N00603970EA0162401648 +B1442544533486N00603964EA0162201649 +B1442564533497N00603965EA0162101650 +B1442584533508N00603978EA0162301649 +B1443004533514N00603997EA0162601651 +B1443024533509N00604019EA0162901655 +B1443044533496N00604030EA0163201658 +B1443064533481N00604032EA0163801662 +B1443084533471N00604031EA0164601668 +B1443104533464N00604029EA0164901672 +B1443124533458N00604025EA0164601674 +B1443144533461N00604013EA0164001673 +B1443164533471N00604008EA0163601673 +B1443184533480N00604008EA0163401670 +B1443204533490N00604009EA0163001663 +B1443224533500N00604011EA0162701659 +B1443244533510N00604012EA0162701657 +B1443264533519N00604012EA0162801656 +B1443284533526N00604012EA0162801655 +B1443304533535N00604012EA0162801653 +B1443324533543N00604010EA0162701652 +B1443344533550N00604007EA0162701651 +B1443364533558N00604005EA0162601650 +B1443384533565N00604002EA0162401648 +B1443404533572N00603999EA0161901644 +B1443424533580N00603998EA0161701641 +B1443444533588N00603996EA0161401638 +B1443464533595N00603995EA0161001634 +B1443484533603N00603993EA0160801631 +B1443504533611N00603994EA0160501628 +B1443524533620N00603993EA0160201625 +B1443544533629N00603990EA0160001622 +B1443564533637N00603989EA0159801620 +B1443584533645N00603987EA0159501617 +B1444004533654N00603985EA0159201614 +B1444024533662N00603983EA0158801611 +B1444044533672N00603981EA0158501608 +B1444064533682N00603978EA0158401606 +B1444084533690N00603974EA0158301604 +B1444104533698N00603971EA0158001601 +B1444124533708N00603966EA0157501597 +B1444144533717N00603959EA0157001594 +B1444164533726N00603953EA0156601590 +B1444184533735N00603945EA0156101585 +B1444204533746N00603937EA0155801580 +B1444224533755N00603930EA0155701578 +B1444244533764N00603925EA0155701576 +B1444264533773N00603921EA0156001577 +B1444284533780N00603917EA0156301579 +B1444304533785N00603912EA0156401580 +B1444324533792N00603905EA0156601583 +B1444344533798N00603899EA0157201587 +B1444364533806N00603896EA0157901593 +B1444384533810N00603894EA0158001596 +B1444404533816N00603888EA0158101599 +B1444424533824N00603882EA0158501604 +B1444444533830N00603878EA0158801607 +B1444464533836N00603874EA0158701608 +B1444484533845N00603870EA0158801609 +B1444504533854N00603867EA0158901610 +B1444524533863N00603863EA0158901610 +B1444544533872N00603860EA0159001611 +B1444564533883N00603859EA0159401613 +B1444584533892N00603858EA0159601616 +B1445004533901N00603857EA0159701617 +B1445024533912N00603855EA0159801619 +B1445044533924N00603856EA0160201621 +B1445064533934N00603858EA0160501625 +B1445084533945N00603857EA0160801628 +B1445104533957N00603859EA0161501633 +B1445124533965N00603866EA0161901637 +B1445144533973N00603876EA0162001640 +B1445164533983N00603889EA0162301643 +B1445184533991N00603902EA0163001648 +B1445204533999N00603911EA0163501653 +B1445224534008N00603922EA0163901658 +B1445244534017N00603925EA0164301663 +B1445264534018N00603917EA0164301667 +B1445284534008N00603911EA0164501673 +B1445304533998N00603916EA0165001678 +B1445324533989N00603919EA0165301681 +B1445344533980N00603917EA0165801685 +B1445364533972N00603911EA0166301690 +B1445384533967N00603905EA0166801695 +B1445404533965N00603896EA0167201699 +B1445424533972N00603886EA0167501702 +B1445444533985N00603888EA0167901706 +B1445464533994N00603905EA0168001708 +B1445484533992N00603929EA0167901710 +B1445504533980N00603941EA0168101710 +B1445524533967N00603941EA0168701714 +B1445544533958N00603939EA0169401721 +B1445564533947N00603940EA0170001727 +B1445584533936N00603939EA0170601733 +B1446004533930N00603933EA0171201739 +B1446024533930N00603924EA0171601744 +B1446044533940N00603922EA0171901748 +B1446064533951N00603935EA0172301752 +B1446084533954N00603956EA0172701755 +B1446104533944N00603972EA0173201760 +B1446124533930N00603976EA0173901764 +B1446144533922N00603971EA0174401770 +B1446164533921N00603963EA0174601773 +B1446184533929N00603957EA0174901775 +B1446204533941N00603963EA0175201778 +B1446224533950N00603982EA0175501782 +B1446244533952N00604004EA0176101787 +B1446264533946N00604024EA0176701793 +B1446284533937N00604040EA0177401800 +B1446304533927N00604048EA0178101808 +B1446324533916N00604044EA0178601813 +B1446344533911N00604035EA0179101818 +B1446364533918N00604027EA0179301822 +B1446384533930N00604032EA0179601826 +B1446404533940N00604048EA0180001830 +B1446424533946N00604066EA0180601836 +B1446444533950N00604084EA0181101841 +B1446464533951N00604106EA0181101845 +B1446484533942N00604129EA0181101847 +B1446504533925N00604141EA0181101848 +B1446524533909N00604137EA0181601849 +B1446544533898N00604129EA0182401854 +B1446564533888N00604121EA0183001859 +B1446584533879N00604113EA0183401864 +B1447004533878N00604102EA0183901867 +B1447024533888N00604102EA0184501873 +B1447044533896N00604113EA0185101878 +B1447064533899N00604131EA0185301882 +B1447084533894N00604151EA0185601885 +B1447104533880N00604160EA0186001889 +B1447124533867N00604157EA0186601895 +B1447144533859N00604147EA0187101900 +B1447164533856N00604138EA0187801907 +B1447184533858N00604132EA0188301912 +B1447204533866N00604131EA0188701916 +B1447224533877N00604140EA0189201921 +B1447244533883N00604156EA0189601926 +B1447264533880N00604175EA0190001930 +B1447284533871N00604192EA0190601935 +B1447304533857N00604198EA0191101940 +B1447324533844N00604195EA0191601945 +B1447344533834N00604186EA0192201950 +B1447364533834N00604173EA0192701955 +B1447384533840N00604170EA0193301961 +B1447404533850N00604176EA0193601965 +B1447424533858N00604188EA0194001970 +B1447444533861N00604205EA0194401975 +B1447464533859N00604224EA0194601978 +B1447484533853N00604246EA0195001983 +B1447504533838N00604258EA0195601987 +B1447524533823N00604255EA0196001991 +B1447544533814N00604244EA0196501996 +B1447564533811N00604232EA0196901999 +B1447584533814N00604222EA0197502004 +B1448004533822N00604223EA0197802008 +B1448024533831N00604233EA0198102012 +B1448044533836N00604249EA0198402016 +B1448064533834N00604269EA0198602018 +B1448084533820N00604284EA0198702020 +B1448104533803N00604286EA0199202023 +B1448124533791N00604282EA0199702028 +B1448144533781N00604276EA0200202033 +B1448164533770N00604272EA0200902039 +B1448184533761N00604269EA0201402044 +B1448204533752N00604261EA0201802049 +B1448224533749N00604249EA0201902052 +B1448244533757N00604245EA0201902053 +B1448264533766N00604255EA0202102055 +B1448284533769N00604272EA0202202056 +B1448304533765N00604293EA0202502059 +B1448324533755N00604308EA0203002062 +B1448344533744N00604321EA0203602067 +B1448364533738N00604337EA0203902070 +B1448384533736N00604353EA0204202073 +B1448404533740N00604366EA0204502076 +B1448424533747N00604370EA0204702078 +B1448444533753N00604360EA0204602079 +B1448464533751N00604344EA0204802081 +B1448484533743N00604333EA0205402085 +B1448504533733N00604325EA0205802089 +B1448524533724N00604318EA0206202093 +B1448544533714N00604314EA0206302095 +B1448564533699N00604321EA0206502097 +B1448584533690N00604338EA0206702099 +B1449004533693N00604353EA0206902101 +B1449024533701N00604356EA0207202104 +B1449044533704N00604343EA0207402107 +B1449064533701N00604330EA0207702110 +B1449084533692N00604320EA0207802111 +B1449104533679N00604314EA0207802112 +B1449124533664N00604319EA0208002114 +B1449144533653N00604330EA0208202115 +B1449164533644N00604341EA0208402118 +B1449184533640N00604354EA0208602119 +B1449204533639N00604368EA0208702121 +B1449224533644N00604377EA0208802121 +B1449244533653N00604372EA0208902122 +B1449264533657N00604357EA0209102123 +B1449284533652N00604341EA0209202124 +B1449304533640N00604330EA0209102124 +B1449324533623N00604330EA0209102124 +B1449344533608N00604338EA0209102124 +B1449364533596N00604348EA0209402126 +B1449384533585N00604358EA0209602128 +B1449404533578N00604369EA0209502129 +B1449424533575N00604384EA0209302128 +B1449444533577N00604397EA0209002126 +B1449464533582N00604405EA0208702123 +B1449484533589N00604408EA0208702122 +B1449504533596N00604408EA0208702122 +B1449524533602N00604409EA0208602120 +B1449544533608N00604415EA0208302117 +B1449564533613N00604423EA0208002113 +B1449584533619N00604436EA0207702110 +B1450004533623N00604450EA0207402107 +B1450024533625N00604464EA0206902103 +B1450044533626N00604480EA0206402098 +B1450064533627N00604499EA0206002094 +B1450084533627N00604515EA0205702091 +B1450104533627N00604528EA0205402087 +B1450124533629N00604543EA0204902082 +B1450144533631N00604558EA0204702079 +B1450164533631N00604572EA0204602078 +B1450184533631N00604586EA0204302074 +B1450204533632N00604601EA0204202072 +B1450224533633N00604615EA0204102071 +B1450244533633N00604629EA0204102071 +B1450264533634N00604641EA0204002069 +B1450284533635N00604656EA0203802068 +B1450304533636N00604670EA0204002068 +B1450324533635N00604684EA0204002068 +B1450344533634N00604698EA0203902067 +B1450364533635N00604712EA0203802067 +B1450384533635N00604727EA0203702066 +B1450404533634N00604741EA0203702066 +B1450424533632N00604756EA0203702065 +B1450444533630N00604771EA0203502065 +B1450464533628N00604785EA0203402063 +B1450484533627N00604799EA0203202062 +B1450504533626N00604814EA0203002060 +B1450524533626N00604829EA0202802058 +B1450544533627N00604843EA0202702057 +B1450564533627N00604857EA0202602055 +B1450584533627N00604871EA0202302053 +B1451004533627N00604885EA0202002050 +B1451024533628N00604900EA0201802048 +B1451044533630N00604915EA0201602046 +B1451064533631N00604931EA0201502045 +B1451084533633N00604946EA0201302043 +B1451104533634N00604961EA0201102041 +B1451124533635N00604976EA0200902038 +B1451144533636N00604992EA0200602036 +B1451164533638N00605006EA0200302033 +B1451184533640N00605021EA0200002030 +B1451204533643N00605037EA0199702026 +B1451224533646N00605052EA0199502024 +B1451244533649N00605067EA0199302022 +B1451264533652N00605081EA0198902019 +B1451284533656N00605096EA0198702016 +B1451304533660N00605111EA0198702015 +B1451324533662N00605124EA0198502014 +B1451344533665N00605139EA0198302012 +B1451364533667N00605154EA0198202011 +B1451384533669N00605167EA0198102010 +B1451404533673N00605180EA0197902008 +B1451424533676N00605194EA0197802006 +B1451444533679N00605208EA0198002007 +B1451464533680N00605220EA0197902006 +B1451484533681N00605232EA0197502004 +B1451504533683N00605247EA0197302001 +B1451524533687N00605261EA0197202001 +B1451544533690N00605274EA0197102000 +B1451564533695N00605286EA0197001998 +B1451584533700N00605298EA0196801997 +B1452004533704N00605310EA0196701997 +B1452024533710N00605321EA0196601996 +B1452044533716N00605331EA0196601995 +B1452064533722N00605339EA0196501995 +B1452084533729N00605346EA0196301993 +B1452104533736N00605353EA0196101991 +B1452124533743N00605362EA0195901989 +B1452144533749N00605371EA0195801987 +B1452164533755N00605382EA0195501985 +B1452184533761N00605392EA0195301982 +B1452204533768N00605402EA0195201980 +B1452224533775N00605410EA0194901978 +B1452244533783N00605418EA0194501975 +B1452264533791N00605426EA0194201972 +B1452284533799N00605432EA0194001969 +B1452304533806N00605439EA0193601966 +B1452324533813N00605447EA0193401963 +B1452344533820N00605455EA0193101960 +B1452364533827N00605462EA0192801957 +B1452384533835N00605470EA0192601955 +B1452404533842N00605477EA0192601954 +B1452424533849N00605483EA0192501953 +B1452444533857N00605489EA0192301951 +B1452464533865N00605495EA0192301950 +B1452484533872N00605502EA0192201949 +B1452504533879N00605510EA0192201950 +B1452524533885N00605518EA0192201950 +B1452544533893N00605527EA0192201950 +B1452564533900N00605536EA0192101950 +B1452584533906N00605547EA0192101949 +B1453004533911N00605559EA0192201949 +B1453024533917N00605571EA0192301951 +B1453044533921N00605581EA0192401952 +B1453064533926N00605592EA0192401952 +B1453084533932N00605603EA0192301951 +B1453104533939N00605613EA0192201951 +B1453124533943N00605624EA0192001949 +B1453144533948N00605635EA0191701946 +B1453164533954N00605647EA0191401943 +B1453184533959N00605659EA0191201941 +B1453204533963N00605669EA0191001939 +B1453224533967N00605682EA0190501935 +B1453244533974N00605693EA0190101931 +B1453264533980N00605704EA0189701927 +B1453284533985N00605717EA0189501924 +B1453304533991N00605728EA0189201921 +B1453324533997N00605738EA0188801917 +B1453344534004N00605748EA0188501914 +B1453364534011N00605757EA0188301911 +B1453384534020N00605765EA0188101909 +B1453404534027N00605773EA0187901906 +B1453424534035N00605781EA0187401903 +B1453444534044N00605789EA0187101899 +B1453464534054N00605797EA0186901897 +B1453484534063N00605804EA0186601894 +B1453504534072N00605809EA0186201891 +B1453524534082N00605816EA0185901887 +B1453544534092N00605823EA0185701884 +B1453564534102N00605830EA0185501882 +B1453584534111N00605836EA0185301880 +B1454004534121N00605843EA0185201878 +B1454024534131N00605849EA0184901876 +B1454044534142N00605855EA0185001875 +B1454064534151N00605860EA0185301877 +B1454084534159N00605865EA0185201876 +B1454104534167N00605867EA0184801875 +B1454124534178N00605873EA0184301871 +B1454144534190N00605879EA0184101869 +B1454164534199N00605884EA0183801866 +B1454184534209N00605890EA0183401862 +B1454204534219N00605897EA0182901857 +B1454224534229N00605903EA0182601854 +B1454244534239N00605909EA0182201850 +B1454264534248N00605915EA0181801845 +B1454284534258N00605921EA0181301841 +B1454304534268N00605928EA0181101839 +B1454324534278N00605935EA0180701835 +B1454344534288N00605944EA0180201830 +B1454364534300N00605954EA0180001826 +B1454384534310N00605962EA0179901824 +B1454404534320N00605969EA0179401819 +B1454424534331N00605978EA0179001815 +B1454444534344N00605987EA0179101813 +B1454464534354N00605994EA0179201813 +B1454484534364N00605999EA0178801810 +B1454504534375N00606005EA0178401806 +B1454524534386N00606013EA0178301804 +B1454544534397N00606021EA0178101803 +B1454564534408N00606028EA0177801801 +B1454584534418N00606036EA0177601799 +B1455004534428N00606043EA0177301797 +B1455024534440N00606048EA0177101794 +B1455044534452N00606055EA0177101792 +B1455064534463N00606064EA0177201792 +B1455084534473N00606071EA0177201793 +B1455104534483N00606078EA0177201793 +B1455124534494N00606084EA0177301794 +B1455144534505N00606089EA0177501794 +B1455164534517N00606091EA0177301794 +B1455184534529N00606096EA0177401795 +B1455204534540N00606103EA0177501795 +B1455224534552N00606110EA0177401795 +B1455244534565N00606119EA0177401796 +B1455264534577N00606128EA0177601797 +B1455284534589N00606134EA0177801799 +B1455304534601N00606140EA0178101802 +B1455324534613N00606147EA0178201804 +B1455344534625N00606155EA0178401805 +B1455364534636N00606162EA0178801809 +B1455384534646N00606169EA0179001811 +B1455404534657N00606178EA0179301815 +B1455424534669N00606188EA0180101819 +B1455444534678N00606196EA0181101826 +B1455464534685N00606202EA0181801833 +B1455484534694N00606205EA0182301839 +B1455504534703N00606195EA0182901847 +B1455524534707N00606183EA0183501854 +B1455544534705N00606170EA0183901859 +B1455564534698N00606158EA0184101863 +B1455584534685N00606154EA0184301867 +B1456004534672N00606161EA0184801872 +B1456024534663N00606174EA0185801878 +B1456044534659N00606189EA0186601887 +B1456064534659N00606203EA0187401896 +B1456084534661N00606218EA0188101903 +B1456104534666N00606232EA0188801911 +B1456124534678N00606236EA0189601920 +B1456144534686N00606227EA0189901926 +B1456164534684N00606209EA0190101932 +B1456184534670N00606203EA0190501937 +B1456204534656N00606215EA0191301944 +B1456224534644N00606227EA0192501955 +B1456244534635N00606236EA0193401965 +B1456264534631N00606249EA0193801973 +B1456284534633N00606267EA0194201979 +B1456304534643N00606278EA0195001985 +B1456324534653N00606276EA0195901993 +B1456344534659N00606265EA0196501999 +B1456364534655N00606251EA0197102005 +B1456384534643N00606248EA0197802011 +B1456404534632N00606255EA0198702018 +B1456424534624N00606269EA0199302024 +B1456444534620N00606285EA0200002030 +B1456464534625N00606301EA0200602036 +B1456484534638N00606306EA0201302042 +B1456504534646N00606296EA0202102048 +B1456524534645N00606280EA0202802055 +B1456544534636N00606272EA0203502062 +B1456564534624N00606271EA0204102069 +B1456584534613N00606279EA0204902076 +B1457004534606N00606294EA0205702084 +B1457024534609N00606309EA0206602092 +B1457044534619N00606317EA0207502102 +B1457064534627N00606310EA0208102110 +B1457084534627N00606293EA0208802117 +B1457104534617N00606284EA0209402125 +B1457124534603N00606286EA0210202133 +B1457144534593N00606297EA0211102141 +B1457164534587N00606313EA0211802149 +B1457184534586N00606329EA0212602156 +B1457204534594N00606341EA0213202163 +B1457224534604N00606341EA0214002171 +B1457244534612N00606332EA0215002179 +B1457264534611N00606317EA0216002188 +B1457284534600N00606309EA0216802198 +B1457304534587N00606318EA0217602206 +B1457324534581N00606335EA0218302215 +B1457344534583N00606354EA0219302226 +B1457364534590N00606366EA0220402237 +B1457384534600N00606368EA0221302247 +B1457404534608N00606362EA0222202257 +B1457424534609N00606349EA0222802265 +B1457444534600N00606337EA0223502274 +B1457464534589N00606335EA0224302282 +B1457484534576N00606347EA0225002290 +B1457504534570N00606365EA0226202300 +B1457524534573N00606381EA0227202309 +B1457544534583N00606389EA0228102318 +B1457564534592N00606384EA0228902327 +B1457584534592N00606370EA0229602334 +B1458004534584N00606359EA0230302342 +B1458024534571N00606360EA0231102349 +B1458044534558N00606370EA0232102359 +B1458064534551N00606386EA0233102369 +B1458084534551N00606403EA0234002378 +B1458104534560N00606415EA0234902387 +B1458124534570N00606416EA0235702395 +B1458144534576N00606406EA0236402403 +B1458164534575N00606391EA0237102410 +B1458184534566N00606381EA0237802417 +B1458204534556N00606376EA0238602425 +B1458224534543N00606378EA0239302432 +B1458244534532N00606395EA0239902439 +B1458264534532N00606414EA0240702446 +B1458284534541N00606421EA0241602453 +B1458304534549N00606414EA0242302460 +B1458324534549N00606401EA0242802466 +B1458344534540N00606388EA0243502474 +B1458364534526N00606387EA0244302483 +B1458384534511N00606393EA0245302492 +B1458404534501N00606408EA0246202502 +B1458424534497N00606424EA0247102510 +B1458444534503N00606438EA0247902519 +B1458464534511N00606443EA0248902528 +B1458484534519N00606436EA0249602537 +B1458504534522N00606423EA0250402545 +B1458524534516N00606410EA0251202553 +B1458544534502N00606406EA0252002561 +B1458564534488N00606413EA0252802569 +B1458584534480N00606426EA0253702578 +B1459004534478N00606440EA0254402586 +B1459024534480N00606453EA0255402595 +B1459044534488N00606458EA0256102603 +B1459064534497N00606456EA0256902612 +B1459084534504N00606451EA0257802620 +B1459104534508N00606441EA0258402628 +B1459124534508N00606426EA0258902634 +B1459144534499N00606410EA0259502639 +B1459164534484N00606408EA0260102645 +B1459184534471N00606417EA0260702650 +B1459204534463N00606431EA0261302655 +B1459224534459N00606447EA0262102662 +B1459244534458N00606462EA0262802669 +B1459264534457N00606479EA0263602676 +B1459284534453N00606495EA0264502684 +B1459304534446N00606509EA0265202691 +B1459324534440N00606526EA0265702697 +B1459344534431N00606543EA0266302703 +B1459364534423N00606560EA0266802709 +B1459384534415N00606575EA0267302714 +B1459404534407N00606589EA0267502718 +B1459424534400N00606603EA0267402720 +B1459444534390N00606619EA0267502720 +B1459464534381N00606636EA0267802722 +B1459484534372N00606650EA0267802722 +B1459504534361N00606664EA0267502721 +B1459524534349N00606678EA0267502720 +B1459544534337N00606694EA0267702721 +B1459564534326N00606708EA0267802722 +B1459584534313N00606721EA0267802722 +B1500004534302N00606735EA0267802722 +B1500024534292N00606747EA0267402720 +B1500044534281N00606762EA0267002717 +B1500064534271N00606781EA0266902716 +B1500084534264N00606797EA0266702715 +B1500104534259N00606813EA0266202711 +B1500124534257N00606832EA0265602706 +B1500144534260N00606850EA0265102701 +B1500164534263N00606864EA0264802697 +B1500184534266N00606877EA0264302691 +B1500204534271N00606891EA0263802684 +B1500224534276N00606903EA0263202678 +B1500244534282N00606915EA0262602671 +B1500264534289N00606930EA0262102664 +B1500284534295N00606945EA0261802659 +B1500304534301N00606960EA0261502656 +B1500324534307N00606974EA0261202652 +B1500344534315N00606989EA0261102649 +B1500364534324N00607001EA0261102648 +B1500384534331N00607008EA0260702645 +B1500404534335N00607016EA0259502641 +B1500424534341N00607028EA0258402635 +B1500444534353N00607046EA0258002628 +B1500464534362N00607062EA0258202625 +B1500484534369N00607072EA0258202624 +B1500504534377N00607081EA0257902620 +B1500524534386N00607092EA0257702618 +B1500544534395N00607103EA0257602616 +B1500564534404N00607114EA0257402613 +B1500584534414N00607123EA0257202611 +B1501004534425N00607130EA0256902609 +B1501024534436N00607133EA0256702606 +B1501044534448N00607135EA0256302602 +B1501064534461N00607136EA0256002598 +B1501084534474N00607140EA0255602595 +B1501104534488N00607144EA0255302591 +B1501124534501N00607148EA0255002588 +B1501144534514N00607152EA0254702585 +B1501164534528N00607155EA0254502582 +B1501184534541N00607158EA0254302580 +B1501204534555N00607160EA0254102578 +B1501224534568N00607162EA0254002577 +B1501244534582N00607163EA0253802575 +B1501264534596N00607165EA0253702574 +B1501284534610N00607166EA0253602573 +B1501304534623N00607167EA0253502572 +B1501324534637N00607168EA0253402571 +B1501344534651N00607168EA0253302569 +B1501364534665N00607168EA0253102568 +B1501384534678N00607167EA0253002566 +B1501404534691N00607165EA0252802565 +B1501424534704N00607161EA0252702563 +B1501444534718N00607158EA0252402561 +B1501464534731N00607153EA0252202559 +B1501484534744N00607148EA0252102557 +B1501504534757N00607143EA0251902555 +B1501524534771N00607139EA0251702554 +B1501544534784N00607135EA0251602552 +B1501564534798N00607132EA0251402550 +B1501584534811N00607129EA0251202548 +B1502004534824N00607127EA0250902546 +B1502024534838N00607124EA0250702544 +B1502044534852N00607122EA0250602542 +B1502064534865N00607121EA0250602542 +B1502084534878N00607122EA0250502541 +B1502104534891N00607121EA0250202539 +B1502124534905N00607120EA0249902536 +B1502144534920N00607121EA0249702534 +B1502164534933N00607122EA0249502532 +B1502184534947N00607125EA0249202530 +B1502204534962N00607132EA0249102528 +B1502224534975N00607141EA0249102527 +B1502244534988N00607150EA0249102527 +B1502264535000N00607158EA0248902526 +B1502284535012N00607166EA0248602524 +B1502304535024N00607174EA0248302520 +B1502324535036N00607186EA0247902516 +B1502344535047N00607198EA0247602513 +B1502364535057N00607211EA0247202509 +B1502384535067N00607224EA0246802505 +B1502404535076N00607237EA0246402501 +B1502424535085N00607250EA0245902496 +B1502444535094N00607264EA0245202489 +B1502464535105N00607278EA0245002485 +B1502484535114N00607293EA0244802481 +B1502504535122N00607307EA0244502477 +B1502524535130N00607322EA0244202473 +B1502544535140N00607337EA0243902471 +B1502564535147N00607351EA0243702468 +B1502584535154N00607365EA0243302464 +B1503004535162N00607379EA0242902460 +B1503024535170N00607394EA0242602458 +B1503044535176N00607411EA0242302455 +B1503064535183N00607426EA0242102453 +B1503084535190N00607441EA0241802450 +B1503104535197N00607455EA0241502447 +B1503124535204N00607469EA0241302446 +B1503144535210N00607484EA0241102443 +B1503164535216N00607499EA0240802440 +B1503184535222N00607514EA0240502438 +B1503204535228N00607530EA0240302436 +B1503224535232N00607547EA0240102433 +B1503244535238N00607564EA0239902432 +B1503264535245N00607580EA0239702430 +B1503284535251N00607595EA0239602429 +B1503304535258N00607610EA0239402427 +B1503324535266N00607624EA0239202425 +B1503344535273N00607640EA0238902422 +B1503364535281N00607656EA0238702420 +B1503384535288N00607673EA0238702419 +B1503404535295N00607688EA0238802419 +B1503424535302N00607702EA0238702418 +B1503444535309N00607718EA0238402416 +B1503464535317N00607735EA0238302416 +B1503484535325N00607750EA0238302415 +B1503504535333N00607765EA0238102414 +B1503524535341N00607780EA0237902412 +B1503544535350N00607796EA0237702410 +B1503564535358N00607810EA0237602409 +B1503584535365N00607822EA0237402407 +B1504004535373N00607836EA0237002404 +B1504024535381N00607850EA0236802402 +B1504044535388N00607863EA0236602399 +B1504064535395N00607875EA0236202396 +B1504084535403N00607888EA0235902393 +B1504104535411N00607900EA0235702391 +B1504124535419N00607912EA0235402388 +B1504144535427N00607926EA0235102385 +B1504164535435N00607940EA0234902383 +B1504184535444N00607953EA0234602380 +B1504204535452N00607967EA0234302377 +B1504224535460N00607982EA0233902373 +B1504244535467N00607996EA0233702371 +B1504264535473N00608010EA0233402368 +B1504284535480N00608026EA0232902364 +B1504304535486N00608043EA0232802361 +B1504324535492N00608059EA0232502359 +B1504344535498N00608075EA0232202355 +B1504364535505N00608092EA0231902353 +B1504384535512N00608107EA0231802351 +B1504404535518N00608121EA0231602349 +B1504424535525N00608136EA0231302346 +B1504444535533N00608150EA0231002344 +B1504464535540N00608165EA0230702340 +B1504484535547N00608183EA0230402337 +B1504504535553N00608200EA0230302336 +B1504524535559N00608215EA0230002333 +B1504544535565N00608232EA0229702330 +B1504564535573N00608249EA0229302327 +B1504584535580N00608265EA0229302325 +B1505004535587N00608281EA0229102324 +B1505024535593N00608296EA0229002322 +B1505044535600N00608312EA0228702320 +B1505064535606N00608327EA0228602318 +B1505084535613N00608341EA0228302316 +B1505104535620N00608356EA0228002313 +B1505124535627N00608371EA0227702310 +B1505144535634N00608386EA0227502308 +B1505164535639N00608402EA0227302305 +B1505184535644N00608417EA0226902302 +B1505204535651N00608433EA0226602299 +B1505224535658N00608448EA0226502298 +B1505244535663N00608462EA0226102294 +B1505264535671N00608476EA0225702290 +B1505284535679N00608492EA0225402288 +B1505304535685N00608508EA0225402286 +B1505324535690N00608523EA0225302285 +B1505344535694N00608539EA0225002282 +B1505364535701N00608554EA0224702279 +B1505384535708N00608567EA0224602278 +B1505404535713N00608582EA0224502277 +B1505424535718N00608596EA0224202274 +B1505444535725N00608611EA0224002272 +B1505464535731N00608625EA0223902271 +B1505484535736N00608638EA0223602269 +B1505504535743N00608652EA0223202265 +B1505524535750N00608667EA0223002263 +B1505544535757N00608679EA0222802262 +B1505564535763N00608692EA0222502258 +B1505584535771N00608705EA0222202256 +B1506004535777N00608719EA0221902253 +B1506024535782N00608733EA0221602250 +B1506044535787N00608748EA0221302247 +B1506064535792N00608763EA0221002244 +B1506084535798N00608776EA0220702240 +B1506104535802N00608790EA0220302236 +B1506124535807N00608805EA0220002233 +B1506144535811N00608820EA0219802230 +B1506164535812N00608835EA0219502227 +B1506184535814N00608851EA0219202223 +B1506204535818N00608866EA0219002221 +B1506224535822N00608883EA0219102220 +B1506244535824N00608899EA0219202221 +B1506264535826N00608910EA0219102221 +B1506284535828N00608919EA0218702220 +B1506304535830N00608933EA0218602219 +B1506324535831N00608946EA0218902220 +B1506344535831N00608957EA0218902219 +B1506364535834N00608968EA0218502217 +B1506384535838N00608981EA0218502216 +B1506404535842N00608995EA0218802216 +B1506424535845N00609008EA0219202218 +B1506444535849N00609019EA0219402222 +B1506464535852N00609031EA0219602224 +B1506484535858N00609041EA0219802226 +B1506504535864N00609052EA0220102229 +B1506524535870N00609063EA0220402232 +B1506544535876N00609075EA0220702235 +B1506564535882N00609086EA0221002239 +B1506584535889N00609095EA0221302242 +B1507004535896N00609104EA0221402244 +B1507024535904N00609113EA0221602246 +B1507044535910N00609123EA0222002250 +B1507064535917N00609132EA0222202252 +B1507084535924N00609141EA0222402255 +B1507104535932N00609148EA0222902259 +B1507124535938N00609156EA0223402264 +B1507144535944N00609163EA0224202271 +B1507164535949N00609172EA0225102279 +B1507184535956N00609181EA0226002288 +B1507204535962N00609188EA0226702296 +B1507224535969N00609193EA0227402304 +B1507244535976N00609202EA0228202312 +B1507264535981N00609210EA0229302322 +B1507284535987N00609212EA0230102331 +B1507304535993N00609214EA0230402339 +B1507324536000N00609222EA0230902345 +B1507344536007N00609231EA0231802353 +B1507364536013N00609237EA0232602362 +B1507384536019N00609243EA0233002368 +B1507404536024N00609251EA0233002372 +B1507424536031N00609259EA0233002374 +B1507444536038N00609268EA0233102374 +B1507464536046N00609278EA0233002373 +B1507484536054N00609286EA0233102373 +B1507504536063N00609294EA0233202374 +B1507524536070N00609304EA0233202373 +B1507544536077N00609314EA0233202373 +B1507564536084N00609325EA0233102372 +B1507584536091N00609337EA0233102371 +B1508004536098N00609348EA0233002370 +B1508024536105N00609359EA0232802368 +B1508044536113N00609369EA0232602366 +B1508064536122N00609380EA0232502365 +B1508084536130N00609391EA0232502365 +B1508104536137N00609402EA0232502364 +B1508124536144N00609414EA0232302362 +B1508144536151N00609426EA0232102361 +B1508164536156N00609439EA0231902359 +B1508184536161N00609452EA0231602355 +B1508204536168N00609466EA0231302353 +B1508224536174N00609480EA0231302351 +B1508244536180N00609494EA0231302350 +B1508264536186N00609507EA0231102348 +B1508284536192N00609520EA0231002347 +B1508304536197N00609535EA0230902346 +B1508324536202N00609549EA0230802344 +B1508344536207N00609565EA0230702343 +B1508364536211N00609581EA0230802343 +B1508384536214N00609596EA0230802342 +B1508404536216N00609612EA0230602341 +B1508424536219N00609628EA0230502340 +B1508444536221N00609644EA0230502339 +B1508464536223N00609660EA0230402338 +B1508484536226N00609674EA0230302337 +B1508504536229N00609689EA0230202337 +B1508524536229N00609706EA0230102336 +B1508544536226N00609723EA0230002335 +B1508564536221N00609738EA0229902334 +B1508584536216N00609754EA0229802333 +B1509004536209N00609769EA0229602332 +B1509024536202N00609785EA0229602331 +B1509044536194N00609801EA0229502331 +B1509064536187N00609817EA0229502330 +B1509084536180N00609833EA0229402330 +B1509104536173N00609849EA0229302329 +B1509124536166N00609865EA0229302329 +B1509144536159N00609882EA0229302329 +B1509164536152N00609897EA0229202329 +B1509184536146N00609913EA0229102328 +B1509204536140N00609929EA0228902326 +B1509224536133N00609946EA0229002326 +B1509244536126N00609963EA0229002326 +B1509264536118N00609978EA0229002326 +B1509284536111N00609995EA0228902325 +B1509304536103N00610011EA0228902325 +B1509324536096N00610027EA0229002326 +B1509344536087N00610043EA0229002327 +B1509364536080N00610058EA0229102327 +B1509384536073N00610073EA0229102327 +B1509404536067N00610090EA0229102327 +B1509424536059N00610106EA0229102328 +B1509444536052N00610123EA0229302329 +B1509464536045N00610138EA0229502331 +B1509484536038N00610153EA0229602332 +B1509504536031N00610169EA0229802334 +B1509524536024N00610183EA0229802335 +B1509544536016N00610197EA0229802335 +B1509564536008N00610212EA0229802335 +B1509584535999N00610226EA0229802335 +B1510004535990N00610241EA0229702334 +B1510024535981N00610258EA0229602333 +B1510044535971N00610274EA0229702333 +B1510064535962N00610290EA0229802335 +B1510084535953N00610305EA0229902336 +B1510104535945N00610320EA0230102337 +B1510124535936N00610335EA0230302339 +B1510144535926N00610348EA0230502341 +B1510164535917N00610360EA0230602343 +B1510184535907N00610371EA0230802345 +B1510204535897N00610382EA0231002346 +B1510224535887N00610393EA0231402349 +B1510244535876N00610402EA0231802353 +B1510264535866N00610410EA0232302358 +B1510284535855N00610419EA0233002364 +B1510304535844N00610425EA0233802371 +B1510324535835N00610432EA0234502378 +B1510344535830N00610447EA0234902384 +B1510364535832N00610465EA0235602390 +B1510384535843N00610470EA0236302397 +B1510404535850N00610458EA0237002404 +B1510424535847N00610444EA0237802411 +B1510444535835N00610435EA0238302418 +B1510464535820N00610439EA0238902426 +B1510484535809N00610453EA0239802434 +B1510504535808N00610469EA0240402442 +B1510524535813N00610484EA0241102448 +B1510544535821N00610495EA0241802456 +B1510564535830N00610493EA0242402462 +B1510584535835N00610482EA0243102469 +B1511004535831N00610468EA0243902477 +B1511024535818N00610463EA0244502484 +B1511044535805N00610471EA0245402493 +B1511064535798N00610488EA0246002501 +B1511084535799N00610506EA0246502507 +B1511104535804N00610521EA0247002512 +B1511124535813N00610529EA0247602517 +B1511144535824N00610527EA0248302523 +B1511164535829N00610518EA0249002530 +B1511184535828N00610505EA0249802538 +B1511204535820N00610492EA0250602546 +B1511224535806N00610490EA0251202552 +B1511244535792N00610497EA0252302561 +B1511264535785N00610513EA0253102570 +B1511284535783N00610530EA0253402577 +B1511304535785N00610549EA0253802582 +B1511324535793N00610565EA0254102585 +B1511344535805N00610570EA0254602589 +B1511364535814N00610568EA0255202595 +B1511384535819N00610559EA0256102601 +B1511404535818N00610548EA0256902608 +B1511424535813N00610538EA0257602615 +B1511444535802N00610531EA0258202622 +B1511464535786N00610534EA0258902628 +B1511484535776N00610551EA0259702635 +B1511504535775N00610573EA0260302642 +B1511524535783N00610589EA0260602648 +B1511544535793N00610599EA0261002651 +B1511564535805N00610598EA0261702657 +B1511584535809N00610589EA0262302663 +B1512004535803N00610576EA0262602667 +B1512024535787N00610573EA0263102672 +B1512044535772N00610588EA0263902679 +B1512064535763N00610607EA0264802687 +B1512084535758N00610622EA0265202693 +B1512104535755N00610638EA0265002697 +B1512124535751N00610659EA0264902699 +B1512144535746N00610681EA0265102698 +B1512164535742N00610703EA0265202700 +B1512184535739N00610723EA0265402701 +B1512204535735N00610740EA0265602702 +B1512224535730N00610757EA0265602702 +B1512244535724N00610776EA0265802703 +B1512264535717N00610794EA0265702702 +B1512284535710N00610812EA0265402700 +B1512304535703N00610831EA0265102698 +B1512324535699N00610853EA0264602693 +B1512344535697N00610875EA0264202688 +B1512364535693N00610895EA0263502682 +B1512384535688N00610914EA0262902675 +B1512404535688N00610934EA0262302668 +B1512424535693N00610954EA0261902662 +B1512444535698N00610973EA0261502657 +B1512464535702N00610991EA0260702650 +B1512484535706N00611008EA0259802642 +B1512504535713N00611028EA0259002634 +B1512524535717N00611048EA0258402627 +B1512544535722N00611065EA0257702619 +B1512564535728N00611079EA0256902611 +B1512584535736N00611095EA0256002602 +B1513004535744N00611111EA0255302594 +B1513024535752N00611128EA0254702587 +B1513044535760N00611144EA0254102580 +B1513064535768N00611161EA0253702575 +B1513084535774N00611177EA0253202569 +B1513104535779N00611193EA0252302562 +B1513124535788N00611210EA0251502555 +B1513144535797N00611228EA0251202549 +B1513164535806N00611244EA0251302544 +B1513184535812N00611258EA0251202541 +B1513204535818N00611273EA0250902537 +B1513224535826N00611289EA0250602535 +B1513244535833N00611305EA0250402533 +B1513264535841N00611320EA0250202531 +B1513284535848N00611334EA0250002530 +B1513304535855N00611348EA0249802528 +B1513324535862N00611362EA0249302524 +B1513344535871N00611378EA0249002521 +B1513364535879N00611395EA0248802519 +B1513384535888N00611411EA0248402515 +B1513404535897N00611427EA0248102512 +B1513424535906N00611444EA0248102511 +B1513444535914N00611459EA0248002510 +B1513464535921N00611473EA0247702507 +B1513484535930N00611488EA0247302503 +B1513504535940N00611504EA0247102501 +B1513524535948N00611520EA0247302500 +B1513544535955N00611533EA0247502501 +B1513564535960N00611546EA0247502501 +B1513584535965N00611558EA0247402501 +B1514004535971N00611571EA0247302500 +B1514024535976N00611584EA0247202500 +B1514044535982N00611595EA0247102499 +B1514064535988N00611608EA0247002499 +B1514084535994N00611622EA0246902498 +B1514104536000N00611635EA0246802497 +B1514124536007N00611649EA0246602496 +B1514144536013N00611663EA0246502495 +B1514164536019N00611677EA0246402494 +B1514184536025N00611691EA0246102491 +B1514204536032N00611705EA0245702488 +B1514224536039N00611721EA0245302484 +B1514244536045N00611736EA0244802480 +B1514264536053N00611751EA0244502477 +B1514284536060N00611764EA0244302474 +B1514304536067N00611777EA0243902471 +B1514324536075N00611789EA0243502467 +B1514344536083N00611803EA0243202463 +B1514364536091N00611816EA0243002461 +B1514384536098N00611827EA0242702459 +B1514404536105N00611840EA0242302456 +B1514424536112N00611855EA0242002453 +B1514444536119N00611868EA0241702451 +B1514464536126N00611879EA0241502448 +B1514484536134N00611889EA0241102445 +B1514504536142N00611898EA0240802442 +B1514524536148N00611907EA0240302438 +B1514544536154N00611919EA0239802433 +B1514564536161N00611933EA0239602429 +B1514584536168N00611943EA0239402427 +B1515004536174N00611952EA0238902423 +B1515024536182N00611964EA0238602419 +B1515044536189N00611975EA0238502417 +B1515064536195N00611986EA0238302415 +B1515084536201N00611998EA0237902411 +B1515104536207N00612011EA0237502408 +B1515124536214N00612021EA0237202405 +B1515144536221N00612028EA0236702401 +B1515164536228N00612038EA0236302397 +B1515184536234N00612048EA0236102395 +B1515204536240N00612057EA0235702391 +B1515224536246N00612068EA0235202387 +B1515244536253N00612078EA0234902384 +B1515264536259N00612087EA0234702381 +B1515284536264N00612096EA0234402378 +B1515304536271N00612106EA0234102375 +B1515324536278N00612116EA0233902373 +B1515344536285N00612125EA0233602370 +B1515364536291N00612135EA0233302367 +B1515384536298N00612146EA0233002365 +B1515404536305N00612157EA0232802363 +B1515424536312N00612168EA0232602361 +B1515444536318N00612179EA0232402359 +B1515464536324N00612191EA0232202356 +B1515484536331N00612204EA0232002354 +B1515504536336N00612218EA0231702352 +B1515524536342N00612231EA0231402349 +B1515544536349N00612245EA0231202347 +B1515564536355N00612260EA0231102346 +B1515584536362N00612273EA0231102345 +B1516004536368N00612287EA0231002344 +B1516024536374N00612302EA0230802342 +B1516044536380N00612315EA0230502339 +B1516064536387N00612331EA0230302337 +B1516084536394N00612346EA0230402337 +B1516104536400N00612357EA0230202335 +B1516124536406N00612370EA0229802332 +B1516144536413N00612383EA0229802332 +B1516164536420N00612395EA0229902332 +B1516184536425N00612407EA0229702331 +B1516204536432N00612418EA0229402328 +B1516224536440N00612428EA0229302328 +B1516244536446N00612439EA0229302327 +B1516264536452N00612451EA0229002325 +B1516284536459N00612465EA0228902323 +B1516304536464N00612479EA0228802323 +B1516324536468N00612494EA0228702322 +B1516344536473N00612507EA0228502320 +B1516364536478N00612521EA0228302318 +B1516384536485N00612535EA0228202316 +B1516404536491N00612547EA0228102316 +B1516424536498N00612559EA0228102315 +B1516444536505N00612570EA0227902314 +B1516464536511N00612582EA0227702312 +B1516484536518N00612594EA0227502310 +B1516504536525N00612607EA0227202307 +B1516524536533N00612621EA0227102306 +B1516544536540N00612633EA0226902304 +B1516564536548N00612644EA0226802302 +B1516584536555N00612657EA0226702301 +B1517004536562N00612669EA0226602301 +B1517024536569N00612681EA0226502299 +B1517044536576N00612695EA0226402298 +B1517064536583N00612708EA0226402298 +B1517084536589N00612722EA0226302298 +B1517104536595N00612735EA0226002296 +B1517124536602N00612747EA0225502293 +B1517144536610N00612759EA0225302291 +B1517164536615N00612774EA0225102288 +B1517184536621N00612788EA0224802285 +B1517204536628N00612801EA0224502281 +B1517224536634N00612815EA0224102278 +B1517244536640N00612827EA0223702274 +B1517264536646N00612840EA0223202268 +B1517284536652N00612854EA0222702264 +B1517304536658N00612867EA0222302259 +B1517324536664N00612879EA0221802254 +B1517344536671N00612892EA0221302249 +B1517364536677N00612904EA0220902245 +B1517384536683N00612914EA0220402240 +B1517404536689N00612926EA0219802234 +B1517424536695N00612940EA0219402229 +B1517444536701N00612954EA0219202225 +B1517464536705N00612968EA0218902222 +B1517484536710N00612981EA0218602219 +B1517504536716N00612993EA0218502218 +B1517524536722N00613005EA0218402216 +B1517544536727N00613018EA0218302215 +B1517564536732N00613032EA0218202214 +B1517584536737N00613045EA0218102214 +B1518004536742N00613058EA0218102213 +B1518024536748N00613072EA0218102214 +B1518044536756N00613084EA0218102214 +B1518064536763N00613097EA0218302215 +B1518084536771N00613109EA0218202215 +B1518104536778N00613121EA0218202215 +B1518124536785N00613133EA0218202215 +B1518144536793N00613145EA0218102214 +B1518164536802N00613157EA0218102215 +B1518184536811N00613171EA0218102215 +B1518204536819N00613184EA0218202215 +B1518224536827N00613196EA0218202215 +B1518244536835N00613208EA0217902213 +B1518264536844N00613220EA0217902212 +B1518284536854N00613230EA0217902213 +B1518304536863N00613240EA0217902212 +B1518324536871N00613252EA0217702211 +B1518344536880N00613263EA0217602210 +B1518364536888N00613275EA0217502209 +B1518384536897N00613287EA0217302208 +B1518404536906N00613300EA0217302207 +B1518424536913N00613314EA0217302207 +B1518444536921N00613327EA0217102205 +B1518464536930N00613341EA0217002204 +B1518484536938N00613353EA0217102204 +B1518504536947N00613365EA0217102204 +B1518524536955N00613376EA0217002203 +B1518544536964N00613389EA0216902202 +B1518564536973N00613402EA0216902202 +B1518584536982N00613416EA0216802201 +B1519004536990N00613429EA0216802202 +B1519024536999N00613441EA0216802201 +B1519044537007N00613455EA0216702200 +B1519064537016N00613468EA0216602200 +B1519084537025N00613479EA0216702200 +B1519104537034N00613492EA0216602199 +B1519124537043N00613504EA0216402198 +B1519144537052N00613517EA0216302197 +B1519164537060N00613530EA0216202196 +B1519184537069N00613543EA0216102194 +B1519204537078N00613558EA0215902192 +B1519224537087N00613572EA0215802191 +B1519244537095N00613584EA0215602190 +B1519264537104N00613597EA0215302187 +B1519284537112N00613611EA0215002184 +B1519304537120N00613623EA0214802182 +B1519324537128N00613636EA0214502178 +B1519344537137N00613649EA0214102175 +B1519364537145N00613664EA0213902173 +B1519384537153N00613677EA0213702171 +B1519404537162N00613690EA0213502167 +B1519434537174N00613709EA0213202165 +B1519454537183N00613722EA0212802162 +B1519474537191N00613736EA0212502159 +B1519494537200N00613749EA0212402157 +B1519514537207N00613761EA0212202154 +B1519534537215N00613772EA0211802151 +B1519554537224N00613783EA0211302147 +B1519574537234N00613794EA0211202144 +B1519594537242N00613804EA0211102142 +B1520014537249N00613816EA0210502138 +B1520034537258N00613829EA0210102135 +B1520054537267N00613840EA0209902133 +B1520074537276N00613850EA0209602129 +B1520094537287N00613860EA0209302125 +B1520114537297N00613870EA0209102123 +B1520134537306N00613878EA0208902120 +B1520154537315N00613887EA0208502117 +B1520174537326N00613898EA0208002113 +B1520194537337N00613909EA0207802111 +B1520214537347N00613919EA0207702110 +B1520234537357N00613927EA0207502108 +B1520254537366N00613936EA0207302105 +B1520274537377N00613947EA0207102103 +B1520294537387N00613956EA0206902101 +B1520314537397N00613964EA0206602098 +B1520334537408N00613971EA0206202095 +B1520354537419N00613979EA0206002093 +B1520374537431N00613987EA0206002092 +B1520394537441N00613997EA0205802091 +B1520414537453N00614005EA0205802090 +B1520434537464N00614014EA0205702090 +B1520454537476N00614022EA0205602088 +B1520474537488N00614030EA0205502088 +B1520494537501N00614036EA0205402087 +B1520514537513N00614043EA0205402086 +B1520534537526N00614050EA0205302086 +B1520554537538N00614056EA0205402086 +B1520574537551N00614062EA0205602088 +B1520594537562N00614068EA0205802090 +B1521014537573N00614074EA0206102092 +B1521034537584N00614081EA0206402095 +B1521054537595N00614088EA0206702098 +B1521074537605N00614094EA0207002101 +B1521094537616N00614101EA0207202103 +B1521114537627N00614108EA0207402105 +B1521134537637N00614112EA0207702107 +B1521154537647N00614115EA0207802108 +B1521174537656N00614116EA0208002109 +B1521194537667N00614116EA0208302110 +B1521214537677N00614116EA0208602112 +B1521234537686N00614114EA0209202117 +B1521254537692N00614108EA0209802122 +B1521274537690N00614098EA0210502128 +B1521294537680N00614102EA0211002134 +B1521314537671N00614121EA0211402139 +B1521334537671N00614147EA0211902144 +B1521354537686N00614162EA0212402150 +B1521374537700N00614161EA0212902156 +B1521394537708N00614154EA0213702163 +B1521414537714N00614147EA0214602172 +B1521434537719N00614142EA0215102179 +B1521454537721N00614136EA0215402184 +B1521474537716N00614129EA0215602188 +B1521494537705N00614133EA0215702191 +B1521514537697N00614152EA0215902194 +B1521534537698N00614175EA0216302196 +B1521554537708N00614186EA0216602199 +B1521574537724N00614183EA0217102202 +B1521594537733N00614176EA0217702207 +B1522014537739N00614171EA0218002210 +B1522034537745N00614164EA0218302213 +B1522054537749N00614154EA0218702216 +B1522074537748N00614144EA0218902219 +B1522094537740N00614136EA0218902220 +B1522114537728N00614140EA0219202223 +B1522134537722N00614156EA0219402226 +B1522154537723N00614177EA0219502228 +B1522174537731N00614191EA0219602229 +B1522194537743N00614198EA0219702229 +B1522214537755N00614194EA0220102231 +B1522234537761N00614185EA0220402234 +B1522254537762N00614176EA0220602236 +B1522274537763N00614166EA0220902238 +B1522294537765N00614155EA0221102240 +B1522314537766N00614145EA0221502243 +B1522334537766N00614136EA0222202248 +B1522354537766N00614127EA0222702254 +B1522374537767N00614118EA0223302260 +B1522394537764N00614111EA0223902266 +B1522414537753N00614113EA0224202272 +B1522434537742N00614132EA0224702278 +B1522454537739N00614155EA0225302283 +B1522474537748N00614166EA0225702288 +B1522494537763N00614162EA0226202293 +B1522514537763N00614148EA0226602297 +B1522534537756N00614142EA0227202303 +B1522554537747N00614142EA0227802310 +B1522574537738N00614154EA0228402316 +B1522594537730N00614173EA0228902323 +B1523014537730N00614193EA0229402328 +B1523034537739N00614208EA0230002333 +B1523054537751N00614212EA0230502339 +B1523074537758N00614205EA0231002343 +B1523094537758N00614194EA0231402348 +B1523114537752N00614186EA0232102354 +B1523134537743N00614186EA0232902361 +B1523154537733N00614197EA0233602368 +B1523174537726N00614217EA0234002373 +B1523194537727N00614239EA0234602379 +B1523214537738N00614248EA0235202385 +B1523234537749N00614243EA0235602391 +B1523254537754N00614232EA0236002394 +B1523274537756N00614223EA0236602400 +B1523294537755N00614215EA0237402408 +B1523314537749N00614207EA0238202416 +B1523334537740N00614201EA0238802422 +B1523354537724N00614206EA0238902427 +B1523374537709N00614227EA0239602433 +B1523394537704N00614251EA0240502439 +B1523414537711N00614263EA0240902444 +B1523434537724N00614269EA0241202449 +B1523454537736N00614269EA0241602453 +B1523474537745N00614258EA0242202458 +B1523494537750N00614247EA0243402464 +B1523514537747N00614239EA0243902471 +B1523534537744N00614234EA0243702474 +B1523554537740N00614221EA0243102475 +B1523574537728N00614212EA0243002473 +B1523594537717N00614220EA0242802472 +B1524014537708N00614235EA0242402469 +B1524034537702N00614253EA0242202465 +B1524054537698N00614273EA0242702465 +B1524074537696N00614293EA0243502466 +B1524094537693N00614308EA0244302471 +B1524114537691N00614324EA0244702476 +B1524134537694N00614342EA0245002479 +B1524154537703N00614358EA0245402484 +B1524174537714N00614360EA0245802488 +B1524194537720N00614350EA0246202493 +B1524214537718N00614339EA0246902498 +B1524234537708N00614337EA0247402504 +B1524254537696N00614347EA0247802510 +B1524274537689N00614365EA0248602517 +B1524294537690N00614384EA0248902523 +B1524314537695N00614403EA0249102527 +B1524334537706N00614416EA0249502531 +B1524354537719N00614419EA0249902535 +B1524374537723N00614416EA0250202536 +B1524394537731N00614402EA0250902543 +B1524414537729N00614392EA0251602550 +B1524434537723N00614388EA0252002555 +B1524454537710N00614396EA0252402559 +B1524474537700N00614413EA0253202567 +B1524494537700N00614433EA0253702573 +B1524514537704N00614442EA0253902575 +B1524534537721N00614455EA0254202581 +B1524554537730N00614447EA0254502584 +B1524574537734N00614437EA0255302591 +B1524594537734N00614428EA0255602595 +B1525014537728N00614421EA0255802598 +B1525034537716N00614419EA0256002600 +B1525054537710N00614423EA0256402601 +B1525074537699N00614448EA0257002608 +B1525094537695N00614464EA0257802615 +B1525114537694N00614481EA0258202619 +B1525134537696N00614501EA0258202623 +B1525154537707N00614516EA0258202624 +B1525174537719N00614514EA0258002624 +B1525194537724N00614501EA0258002623 +B1525214537720N00614490EA0258602626 +B1525234537714N00614482EA0259502631 +B1525254537708N00614477EA0260202637 +B1525274537704N00614470EA0260502640 +B1525294537697N00614462EA0260702643 +B1525314537686N00614461EA0261302647 +B1525334537678N00614473EA0261902651 +B1525354537677N00614489EA0262302656 +B1525374537684N00614508EA0263002663 +B1525394537688N00614528EA0263502669 +B1525414537689N00614547EA0263702673 +B1525434537692N00614565EA0263602675 +B1525454537695N00614585EA0263202676 +B1525474537699N00614606EA0262802674 +B1525494537705N00614627EA0262602671 +B1525514537711N00614643EA0262502669 +B1525534537717N00614658EA0262202666 +B1525554537722N00614674EA0261702662 +B1525574537730N00614686EA0261202656 +B1525594537740N00614698EA0260702651 +B1526014537750N00614709EA0260402648 +B1526034537760N00614717EA0260102644 +B1526054537770N00614727EA0259702639 +B1526074537781N00614737EA0259302635 +B1526094537792N00614745EA0259102632 +B1526114537804N00614752EA0258902631 +B1526134537815N00614758EA0258702627 +B1526154537826N00614760EA0258402625 +B1526174537837N00614762EA0258202623 +B1526194537847N00614764EA0257902620 +B1526214537859N00614766EA0257502617 +B1526234537871N00614767EA0257502615 +B1526254537883N00614769EA0257502615 +B1526274537895N00614771EA0257302614 +B1526294537906N00614775EA0257302614 +B1526314537915N00614779EA0257202613 +B1526334537925N00614784EA0256802610 +B1526354537935N00614788EA0256602609 +B1526374537945N00614791EA0256402606 +B1526394537954N00614795EA0256002603 +B1526414537965N00614799EA0255602599 +B1526434537975N00614801EA0255402597 +B1526454537985N00614802EA0255102594 +B1526474537995N00614804EA0254702590 +B1526494538006N00614805EA0254402587 +B1526514538017N00614806EA0254202584 +B1526534538027N00614807EA0253902580 +B1526554538038N00614810EA0253502577 +B1526574538050N00614813EA0253302574 +B1526594538060N00614817EA0253202572 +B1527014538070N00614821EA0252802569 +B1527034538081N00614824EA0252402565 +B1527054538093N00614826EA0252102561 +B1527074538105N00614828EA0251902559 +B1527094538116N00614830EA0251702557 +B1527114538128N00614831EA0251402554 +B1527134538139N00614830EA0251002550 +B1527154538150N00614829EA0250702548 +B1527174538160N00614829EA0250402544 +B1527194538170N00614829EA0250002540 +B1527214538180N00614830EA0249602536 +B1527234538190N00614831EA0249302533 +B1527254538200N00614833EA0248902529 +B1527274538212N00614833EA0248502525 +B1527294538224N00614835EA0248202521 +B1527314538237N00614837EA0248102519 +B1527334538248N00614839EA0248002518 +B1527354538260N00614841EA0247902516 +B1527374538271N00614845EA0247702515 +B1527394538281N00614847EA0247402512 +B1527414538291N00614849EA0247002509 +B1527434538303N00614853EA0246802507 +B1527454538313N00614858EA0246502504 +B1527474538323N00614863EA0246102500 +B1527494538334N00614868EA0245902498 +B1527514538345N00614872EA0245702495 +B1527534538356N00614874EA0245302491 +B1527554538368N00614876EA0244902488 +B1527574538380N00614880EA0244802486 +B1527594538391N00614883EA0244602483 +B1528014538403N00614886EA0244302480 +B1528034538414N00614889EA0244002477 +B1528054538424N00614890EA0243702474 +B1528074538436N00614892EA0243202470 +B1528094538448N00614892EA0242902467 +B1528114538460N00614893EA0242602464 +B1528134538472N00614896EA0242202460 +B1528154538484N00614899EA0241802456 +B1528174538495N00614906EA0241502453 +B1528194538506N00614913EA0241202450 +B1528214538519N00614921EA0241002447 +B1528234538530N00614926EA0240802446 +B1528254538541N00614929EA0240602444 +B1528274538551N00614932EA0240202440 +B1528294538563N00614935EA0239802436 +B1528314538574N00614936EA0239502433 +B1528334538584N00614937EA0239002429 +B1528354538593N00614934EA0238402424 +B1528374538604N00614933EA0237902418 +B1528394538616N00614935EA0237702415 +B1528414538627N00614937EA0237402412 +B1528434538637N00614938EA0236802407 +B1528454538647N00614937EA0236202401 +B1528474538658N00614939EA0235702395 +B1528494538670N00614942EA0235302390 +B1528514538682N00614946EA0235002386 +B1528534538694N00614949EA0234902384 +B1528554538704N00614951EA0234702381 +B1528574538716N00614951EA0234302377 +B1528594538728N00614949EA0234002375 +B1529014538739N00614945EA0233902373 +B1529034538749N00614942EA0233802372 +B1529054538759N00614939EA0233602370 +B1529074538769N00614940EA0233202366 +B1529094538780N00614940EA0232902363 +B1529114538791N00614936EA0232602361 +B1529134538803N00614936EA0232502360 +B1529154538814N00614937EA0232502360 +B1529174538825N00614938EA0232602360 +B1529194538834N00614938EA0232602359 +B1529214538844N00614936EA0232402358 +B1529234538854N00614932EA0232502358 +B1529254538865N00614930EA0232702359 +B1529274538873N00614931EA0232902361 +B1529294538881N00614931EA0233202364 +B1529314538887N00614930EA0233302366 +B1529334538893N00614928EA0233302367 +B1529354538900N00614926EA0233302367 +B1529374538909N00614926EA0233202367 +B1529394538919N00614930EA0233202366 +B1529414538930N00614937EA0233102366 +B1529434538941N00614944EA0233002365 +B1529454538954N00614950EA0232902365 +B1529474538966N00614958EA0233002365 +B1529494538977N00614964EA0233002365 +B1529514538988N00614971EA0232702364 +B1529534539001N00614977EA0232702363 +B1529554539014N00614981EA0232802364 +B1529574539025N00614985EA0232802364 +B1529594539037N00614990EA0232802364 +B1530014539049N00614995EA0232902365 +B1530034539059N00615002EA0233002366 +B1530054539068N00615007EA0232702365 +B1530074539079N00615012EA0232302363 +B1530094539090N00615019EA0232002360 +B1530114539102N00615027EA0231902359 +B1530134539113N00615035EA0231802358 +B1530154539124N00615041EA0231802357 +B1530174539134N00615048EA0231702356 +B1530194539145N00615055EA0231402353 +B1530214539156N00615062EA0231102350 +B1530234539167N00615070EA0230902348 +B1530254539177N00615077EA0230602345 +B1530274539188N00615086EA0230202341 +B1530294539198N00615098EA0229802336 +B1530314539208N00615107EA0229302332 +B1530334539219N00615116EA0228902327 +B1530354539230N00615125EA0228502323 +B1530374539241N00615134EA0228102318 +B1530394539252N00615143EA0227702315 +B1530414539262N00615152EA0227402311 +B1530434539273N00615160EA0227002307 +B1530454539284N00615168EA0226602303 +B1530474539296N00615178EA0226402300 +B1530494539306N00615187EA0226202297 +B1530514539316N00615197EA0225802293 +B1530534539328N00615207EA0225402289 +B1530554539341N00615215EA0225302287 +B1530574539352N00615220EA0225102284 +B1530594539363N00615227EA0224702281 +B1531014539376N00615235EA0224602279 +B1531034539387N00615247EA0224502278 +B1531054539398N00615257EA0224402276 +B1531074539409N00615268EA0224002273 +B1531094539420N00615279EA0223602269 +B1531114539432N00615288EA0223302266 +B1531134539443N00615298EA0222902262 +B1531154539454N00615309EA0222502258 +B1531174539466N00615319EA0222202255 +B1531194539477N00615330EA0221902251 +B1531214539488N00615341EA0221502248 +B1531234539500N00615352EA0221202244 +B1531254539512N00615364EA0220802240 +B1531274539524N00615375EA0220602238 +B1531294539535N00615387EA0220602237 +B1531314539547N00615399EA0220402236 +B1531334539558N00615410EA0220302234 +B1531354539571N00615421EA0220102233 +B1531374539583N00615433EA0220102233 +B1531394539594N00615446EA0220202233 +B1531414539605N00615459EA0220102233 +B1531434539616N00615472EA0220002231 +B1531454539628N00615486EA0219902231 +B1531474539638N00615499EA0220002231 +B1531494539648N00615511EA0219902230 +B1531514539660N00615524EA0219802229 +B1531534539671N00615536EA0219702229 +B1531554539681N00615546EA0219402227 +B1531574539693N00615557EA0219202225 +B1531594539706N00615569EA0219302225 +B1532014539718N00615580EA0219402225 +B1532034539728N00615590EA0219202223 +B1532054539740N00615603EA0218802220 +B1532074539752N00615616EA0218802220 +B1532094539763N00615626EA0218702219 +B1532114539774N00615636EA0218402217 +B1532134539785N00615646EA0218202215 +B1532154539797N00615657EA0218102214 +B1532174539808N00615667EA0218002213 +B1532194539819N00615677EA0217702210 +B1532214539831N00615689EA0217402207 +B1532234539842N00615701EA0217202205 +B1532254539853N00615712EA0217002203 +B1532274539864N00615723EA0216602200 +B1532294539875N00615733EA0216102195 +B1532314539888N00615743EA0215702191 +B1532334539901N00615753EA0215302187 +B1532354539914N00615765EA0214902183 +B1532374539927N00615779EA0214702180 +B1532394539940N00615791EA0214602178 +B1532414539951N00615803EA0214202175 +B1532434539963N00615815EA0213902171 +B1532454539975N00615825EA0213602169 +B1532474539985N00615835EA0213302166 +B1532494539993N00615846EA0212702161 +B1532514540003N00615856EA0212002155 +B1532534540013N00615868EA0211602151 +B1532554540022N00615878EA0211202146 +B1532574540030N00615888EA0210502140 +B1532594540040N00615899EA0210002134 +B1533014540051N00615911EA0209502129 +B1533034540060N00615924EA0209302125 +B1533054540067N00615934EA0208802121 +B1533074540076N00615944EA0208202115 +B1533094540086N00615953EA0207902111 +B1533114540096N00615961EA0207502107 +B1533134540107N00615969EA0207102103 +B1533154540118N00615977EA0206702099 +B1533174540128N00615984EA0206502097 +B1533194540139N00615992EA0206302094 +B1533214540149N00616002EA0206002091 +B1533234540159N00616013EA0205802088 +B1533254540170N00616024EA0205602086 +B1533274540180N00616033EA0205302083 +B1533294540190N00616043EA0205002080 +B1533314540201N00616053EA0204702077 +B1533334540211N00616062EA0204502075 +B1533354540222N00616071EA0204302072 +B1533374540233N00616080EA0204002070 +B1533394540243N00616090EA0203802068 +B1533414540253N00616099EA0203502065 +B1533434540263N00616109EA0203102062 +B1533454540274N00616117EA0203102060 +B1533474540285N00616126EA0202902058 +B1533494540296N00616137EA0202702056 +B1533514540307N00616148EA0202702056 +B1533534540319N00616159EA0203002056 +B1533554540330N00616169EA0203202058 +B1533574540340N00616176EA0203202059 +B1533594540350N00616183EA0203102058 +B1534014540360N00616194EA0203002058 +B1534034540370N00616204EA0203002058 +B1534054540380N00616213EA0202902057 +B1534074540390N00616222EA0202802056 +B1534094540400N00616232EA0202802056 +B1534114540409N00616242EA0202702056 +B1534134540418N00616251EA0202502054 +B1534154540428N00616261EA0202502055 +B1534174540438N00616270EA0202502055 +B1534194540447N00616279EA0202402054 +B1534214540457N00616289EA0202302053 +B1534234540464N00616304EA0202202051 +B1534254540470N00616321EA0202202051 +B1534274540475N00616338EA0202302051 +B1534294540479N00616355EA0202202051 +B1534314540482N00616373EA0202202050 +B1534334540485N00616392EA0202202051 +B1534354540490N00616409EA0202502052 +B1534374540494N00616423EA0202902055 +B1534394540497N00616436EA0203402059 +B1534414540503N00616446EA0203602062 +B1534434540513N00616442EA0204002066 +B1534454540517N00616436EA0204402068 +B1534474540512N00616411EA0204802074 +B1534494540499N00616409EA0205202079 +B1534514540489N00616419EA0205502084 +B1534534540486N00616433EA0205702087 +B1534554540493N00616447EA0205902090 +B1534574540506N00616450EA0206402094 +B1534594540517N00616449EA0207302101 +B1535014540525N00616447EA0207802107 +B1535034540532N00616438EA0208002111 +B1535054540531N00616419EA0208102113 +B1535074540521N00616405EA0208402116 +B1535094540509N00616404EA0208702119 +B1535114540500N00616415EA0209002122 +B1535134540498N00616429EA0209302126 +B1535154540502N00616442EA0209702129 +B1535174540512N00616449EA0210202135 +B1535194540522N00616450EA0210902141 +B1535214540532N00616447EA0211402147 +B1535234540541N00616445EA0211802151 +B1535254540548N00616442EA0211902154 +B1535274540554N00616427EA0211902156 +B1535294540552N00616408EA0212302160 +B1535314540541N00616400EA0212502162 +B1535334540528N00616405EA0212702164 +B1535354540521N00616416EA0213202167 +B1535374540521N00616430EA0213702172 +B1535394540527N00616440EA0214202177 +B1535414540537N00616437EA0214202179 +B1535434540544N00616422EA0214402181 +B1535454540542N00616406EA0214802185 +B1535474540534N00616395EA0215102187 +B1535494540524N00616388EA0215302190 +B1535514540512N00616386EA0215502191 +B1535534540501N00616392EA0215802193 +B1535554540493N00616403EA0216102196 +B1535574540491N00616419EA0216602200 +B1535594540493N00616435EA0217202205 +B1536014540495N00616447EA0217902212 +B1536034540498N00616458EA0218402218 +B1536054540503N00616464EA0218502222 +B1536074540516N00616459EA0218802225 +B1536094540522N00616443EA0219202229 +B1536114540518N00616428EA0219602232 +B1536134540507N00616421EA0220102237 +B1536154540497N00616427EA0220702241 +B1536174540494N00616434EA0221202244 +B1536194540493N00616449EA0221802250 +B1536214540498N00616461EA0222102255 +B1536234540508N00616463EA0222202258 +B1536254540519N00616456EA0222502261 +B1536274540526N00616444EA0222802264 +B1536294540530N00616427EA0223202265 +B1536314540530N00616408EA0223602269 +B1536334540521N00616395EA0224102274 +B1536354540511N00616386EA0224502279 +B1536374540499N00616389EA0224702282 +B1536394540492N00616404EA0225002284 +B1536414540492N00616421EA0225602287 +B1536434540500N00616433EA0226102292 +B1536454540507N00616438EA0226502296 +B1536474540515N00616437EA0226702299 +B1536494540525N00616425EA0226902302 +B1536514540527N00616407EA0227302306 +B1536534540522N00616391EA0227602310 +B1536554540512N00616379EA0228002314 +B1536574540500N00616378EA0228302317 +B1536594540490N00616388EA0228602320 +B1537014540487N00616404EA0229002324 +B1537034540492N00616416EA0229102327 +B1537054540500N00616423EA0229302329 +B1537074540508N00616429EA0229802332 +B1537094540523N00616427EA0230502338 +B1537114540528N00616424EA0231302341 +B1537134540537N00616420EA0231902348 +B1537154540552N00616411EA0232502357 +B1537174540555N00616401EA0232902360 +B1537194540553N00616383EA0233202367 +B1537214540541N00616377EA0233602371 +B1537234540530N00616390EA0234002375 +B1537254540531N00616408EA0234702381 +B1537274540541N00616413EA0235402386 +B1537294540553N00616401EA0235802392 +B1537314540554N00616382EA0236202396 +B1537334540542N00616373EA0236502401 +B1537354540529N00616380EA0237102408 +B1537374540522N00616393EA0237502413 +B1537394540523N00616409EA0238102417 +B1537414540533N00616420EA0238902424 +B1537434540544N00616420EA0239702431 +B1537454540554N00616414EA0240402438 +B1537474540559N00616405EA0240902445 +B1537494540557N00616390EA0241302451 +B1537514540549N00616377EA0241902457 +B1537534540535N00616377EA0242202462 +B1537554540525N00616389EA0242702467 +B1537574540523N00616406EA0243402472 +B1537594540530N00616416EA0244002478 +B1538014540541N00616415EA0244702484 +B1538034540549N00616408EA0245302490 +B1538054540551N00616395EA0245902496 +B1538074540546N00616380EA0246502502 +B1538094540536N00616369EA0247102508 +B1538114540523N00616371EA0247402513 +B1538134540514N00616385EA0248002519 +B1538154540513N00616400EA0248602525 +B1538174540520N00616411EA0249202530 +B1538194540530N00616413EA0249802535 +B1538214540539N00616409EA0250302541 +B1538234540545N00616401EA0251002547 +B1538254540548N00616390EA0251602554 +B1538274540547N00616376EA0252002559 +B1538294540537N00616362EA0252602564 +B1538314540522N00616359EA0253102570 +B1538334540513N00616371EA0253602574 +B1538354540513N00616387EA0254102579 +B1538374540521N00616397EA0254602583 +B1538394540530N00616399EA0255102587 +B1538414540538N00616392EA0255602592 +B1538434540538N00616377EA0256102595 +B1538454540525N00616366EA0256702600 +B1538474540514N00616368EA0257102605 +B1538494540507N00616381EA0257602610 +B1538514540505N00616396EA0258002615 +B1538534540509N00616409EA0258402619 +B1538554540517N00616417EA0258902624 +B1538574540528N00616417EA0259202627 +B1538594540538N00616406EA0259702631 +B1539014540541N00616392EA0260302637 +B1539034540536N00616377EA0260802641 +B1539054540524N00616371EA0261402647 +B1539074540512N00616375EA0261902652 +B1539094540505N00616388EA0262402657 +B1539114540505N00616404EA0262802662 +B1539134540513N00616416EA0263402668 +B1539154540525N00616419EA0263902673 +B1539174540536N00616416EA0264402678 +B1539194540544N00616406EA0264902683 +B1539214540544N00616389EA0265202688 +B1539234540535N00616376EA0265802692 +B1539254540522N00616377EA0266202697 +B1539274540514N00616393EA0266502700 +B1539294540517N00616414EA0267102706 +B1539314540522N00616430EA0267802714 +B1539334540526N00616444EA0268102719 +B1539354540528N00616457EA0268502723 +B1539374540533N00616469EA0268802726 +B1539394540539N00616480EA0269302730 +B1539414540545N00616492EA0269802735 +B1539434540552N00616502EA0270402740 +B1539454540557N00616514EA0270802746 +B1539474540561N00616528EA0271202750 +B1539494540565N00616543EA0271702755 +B1539514540569N00616556EA0271902759 +B1539534540573N00616570EA0271802762 +B1539554540576N00616587EA0271702763 +B1539574540581N00616603EA0271502762 +B1539594540587N00616619EA0271502760 +B1540014540594N00616635EA0271602761 +B1540034540598N00616651EA0271702762 +B1540054540602N00616666EA0271602762 +B1540074540607N00616680EA0271202761 +B1540094540612N00616695EA0270602759 +B1540114540620N00616710EA0270002755 +B1540134540629N00616725EA0269602749 +B1540154540638N00616742EA0269302745 +B1540174540648N00616756EA0269002741 +B1540194540660N00616768EA0268802737 +B1540214540672N00616780EA0268602734 +B1540234540684N00616790EA0268102731 +B1540254540697N00616801EA0267602726 +B1540274540710N00616814EA0267402722 +B1540294540724N00616827EA0267402720 +B1540314540736N00616838EA0267202718 +B1540334540747N00616848EA0267002716 +B1540354540759N00616858EA0266702713 +B1540374540770N00616868EA0266502710 +B1540394540782N00616878EA0266302707 +B1540414540793N00616888EA0266102705 +B1540434540804N00616898EA0265802702 +B1540454540815N00616909EA0265602699 +B1540474540826N00616919EA0265302697 +B1540494540837N00616929EA0265102694 +B1540514540848N00616939EA0264802691 +B1540534540859N00616950EA0264502688 +B1540554540871N00616961EA0264302686 +B1540574540882N00616973EA0264102683 +B1540594540893N00616985EA0264002682 +B1541014540904N00616997EA0263902681 +B1541034540914N00617007EA0263802680 +B1541054540925N00617018EA0263502678 +B1541074540936N00617030EA0263302675 +B1541094540947N00617042EA0263102673 +B1541114540958N00617053EA0262802671 +B1541134540968N00617064EA0262502668 +B1541154540977N00617077EA0262202665 +B1541174540987N00617089EA0261902663 +B1541194540996N00617100EA0261502659 +B1541214541006N00617113EA0261102655 +B1541234541017N00617126EA0260902651 +B1541254541027N00617140EA0260702649 +B1541274541035N00617155EA0260402646 +B1541294541044N00617169EA0260202642 +B1541314541055N00617183EA0260002641 +B1541334541063N00617199EA0259902640 +B1541354541072N00617214EA0259802639 +B1541374541085N00617236EA0259602635 +B1541394541089N00617244EA0259502635 +B1541414541096N00617259EA0259502634 +B1541434541102N00617272EA0259102632 +B1541454541109N00617287EA0258602629 +B1541474541116N00617302EA0258302626 +B1541494541126N00617325EA0257902620 +B1541514541132N00617341EA0257502616 +B1541534541139N00617359EA0257202612 +B1541554541141N00617367EA0257002611 +B1541574541146N00617382EA0256602608 +B1541594541154N00617408EA0256202602 +B1542014541157N00617418EA0256002600 +B1542034541162N00617435EA0255902599 +B1542054541170N00617461EA0255702595 +B1542074541173N00617470EA0255602594 +B1542094541179N00617487EA0255602594 +B1542114541188N00617512EA0255402591 +B1542134541194N00617530EA0255202589 +B1542154541197N00617538EA0255002588 +B1542174541206N00617564EA0254802585 +B1542194541212N00617580EA0254502582 +B1542214541219N00617597EA0254302579 +B1542234541226N00617613EA0254302578 +B1542254541233N00617627EA0254202577 +B1542274541237N00617635EA0253902576 +B1542294541248N00617659EA0253702573 +B1542314541252N00617668EA0253702572 +B1542334541264N00617690EA0253602571 +B1542354541273N00617705EA0253402569 +B1542374541282N00617719EA0253302568 +B1542394541286N00617726EA0253102568 +B1542414541300N00617748EA0252802565 +B1542434541309N00617763EA0252602563 +B1542454541320N00617777EA0252602562 +B1542474541329N00617790EA0252402560 +B1542494541339N00617804EA0252202558 +B1542514541345N00617812EA0252202557 +B1542534541359N00617833EA0252202557 +B1542554541367N00617847EA0252002556 +B1542574541372N00617861EA0251802554 +B1542594541386N00617877EA0251702553 +B1543014541394N00617891EA0251502552 +B1543034541398N00617899EA0251202550 +B1543054541410N00617923EA0251002547 +B1543074541419N00617938EA0250802545 +B1543094541426N00617953EA0250502542 +B1543114541435N00617968EA0250202539 +B1543134541443N00617984EA0250002537 +B1543154541450N00617999EA0249702535 +B1543174541457N00618015EA0249402531 +B1543194541465N00618031EA0249102528 +B1543214541472N00618047EA0248802525 +B1543234541478N00618063EA0248402521 +B1543254541485N00618080EA0248102518 +B1543274541492N00618099EA0247902515 +B1543294541499N00618115EA0247602513 +B1543314541506N00618131EA0247302510 +B1543334541512N00618149EA0247002507 +B1543354541520N00618166EA0246802505 +B1543374541526N00618183EA0246602503 +B1543394541533N00618199EA0246402500 +B1543414541540N00618216EA0246202498 +B1543434541547N00618233EA0246002496 +B1543454541554N00618249EA0245802494 +B1543474541562N00618265EA0245602493 +B1543494541569N00618281EA0245502491 +B1543514541577N00618297EA0245202488 +B1543534541585N00618313EA0244902485 +B1543554541593N00618328EA0244702483 +B1543574541601N00618343EA0244402481 +B1543594541609N00618358EA0244202478 +B1544014541617N00618373EA0244102477 +B1544034541626N00618387EA0244002476 +B1544054541634N00618399EA0243902475 +B1544074541643N00618413EA0243802473 +B1544094541651N00618428EA0243702473 +B1544114541658N00618442EA0243602472 +B1544134541665N00618457EA0243402470 +B1544154541673N00618473EA0243302469 +B1544174541680N00618490EA0243302469 +B1544194541686N00618505EA0243302468 +B1544214541692N00618522EA0243102467 +B1544234541699N00618539EA0243002465 +B1544254541706N00618556EA0242902465 +B1544274541712N00618572EA0242802464 +B1544294541719N00618588EA0242602462 +B1544314541726N00618605EA0242502461 +B1544334541733N00618621EA0242302460 +B1544354541740N00618637EA0242202458 +B1544374541746N00618654EA0242002456 +B1544394541753N00618670EA0241802454 +B1544414541760N00618686EA0241602452 +B1544434541767N00618702EA0241302450 +B1544454541774N00618717EA0241102448 +B1544474541780N00618733EA0240802445 +B1544494541787N00618749EA0240602442 +B1544514541794N00618765EA0240302439 +B1544534541801N00618781EA0240002437 +B1544554541808N00618798EA0239802434 +B1544574541815N00618813EA0239702432 +B1544594541822N00618828EA0239402430 +B1545014541829N00618844EA0239102428 +B1545034541835N00618861EA0238902425 +B1545054541842N00618878EA0238702423 +B1545074541848N00618895EA0238402420 +B1545094541853N00618912EA0238202418 +B1545114541860N00618928EA0238002416 +B1545134541866N00618944EA0237702414 +B1545154541871N00618959EA0237402411 +B1545174541878N00618975EA0237002407 +B1545194541884N00618991EA0236702404 +B1545214541889N00619007EA0236502401 +B1545234541896N00619021EA0236202398 +B1545254541902N00619036EA0236002395 +B1545274541909N00619051EA0235802394 +B1545294541914N00619064EA0235502391 +B1545314541920N00619078EA0235102387 +B1545334541926N00619093EA0234702384 +B1545354541931N00619109EA0234502382 +B1545374541934N00619124EA0234302379 +B1545394541939N00619139EA0233902375 +B1545414541944N00619154EA0233602373 +B1545434541949N00619168EA0233402369 +B1545454541954N00619182EA0233002365 +B1545474541960N00619197EA0232602362 +B1545494541966N00619212EA0232402359 +B1545514541972N00619224EA0232102356 +B1545534541978N00619236EA0231702353 +B1545554541986N00619248EA0231502351 +B1545574541993N00619258EA0231302349 +B1545594542001N00619268EA0231102347 +B1546014542009N00619278EA0230902345 +B1546034542017N00619289EA0230802344 +B1546054542024N00619300EA0230702342 +B1546074542031N00619313EA0230502341 +B1546094542038N00619325EA0230402339 +B1546114542045N00619336EA0230302338 +B1546134542051N00619349EA0230202337 +B1546154542057N00619363EA0230202336 +B1546174542064N00619376EA0230002335 +B1546194542070N00619389EA0229802333 +B1546214542076N00619401EA0229502331 +B1546234542083N00619413EA0229302329 +B1546254542090N00619425EA0229102327 +B1546274542096N00619438EA0229002325 +B1546294542103N00619449EA0228802324 +B1546314542110N00619460EA0228702322 +B1546334542118N00619471EA0228602321 +B1546354542125N00619479EA0228502321 +B1546374542133N00619487EA0228402319 +B1546394542141N00619496EA0228202317 +B1546414542149N00619504EA0228102315 +B1546434542156N00619511EA0227802314 +B1546454542164N00619518EA0227502311 +B1546474542171N00619527EA0227202308 +B1546494542179N00619534EA0227002305 +B1546514542186N00619544EA0226702302 +B1546534542193N00619554EA0226402299 +B1546554542200N00619564EA0226102296 +B1546574542207N00619575EA0225802293 +B1546594542215N00619585EA0225602291 +B1547014542222N00619595EA0225302288 +B1547034542230N00619605EA0225102286 +B1547054542237N00619615EA0224902284 +B1547074542244N00619625EA0224702281 +B1547094542251N00619635EA0224502279 +B1547114542260N00619644EA0224302278 +B1547134542268N00619654EA0224302277 +B1547154542275N00619663EA0224102276 +B1547174542284N00619672EA0223902274 +B1547194542293N00619681EA0223702272 +B1547214542301N00619689EA0223502270 +B1547234542309N00619698EA0223302268 +B1547254542317N00619710EA0223202266 +B1547274542325N00619720EA0223102265 +B1547294542332N00619729EA0223002264 +B1547314542340N00619739EA0222702261 +B1547334542349N00619749EA0222602260 +B1547354542357N00619759EA0222402259 +B1547374542365N00619768EA0222302257 +B1547394542374N00619777EA0222002254 +B1547414542382N00619785EA0221802252 +B1547434542391N00619794EA0221602250 +B1547454542400N00619802EA0221402248 +B1547474542409N00619809EA0221302246 +B1547494542414N00619814EA0221102245 +B1547514542426N00619827EA0220902243 +B1547534542434N00619836EA0220702241 +B1547554542442N00619845EA0220502238 +B1547574542450N00619855EA0220202236 +B1547594542457N00619865EA0220102234 +B1548014542465N00619875EA0219702232 +B1548034542473N00619885EA0219602230 +B1548054542481N00619895EA0219402228 +B1548074542489N00619905EA0219102225 +B1548094542497N00619915EA0218802222 +B1548114542505N00619926EA0218502219 +B1548134542513N00619936EA0218502218 +B1548154542520N00619945EA0218402217 +B1548174542527N00619955EA0218202215 +B1548194542534N00619966EA0217902212 +B1548214542541N00619977EA0217702211 +B1548234542548N00619989EA0217402208 +B1548254542555N00620001EA0217202206 +B1548274542562N00620014EA0217002204 +B1548294542569N00620025EA0216802202 +B1548314542577N00620035EA0216502199 +B1548334542585N00620044EA0216302197 +B1548354542593N00620052EA0216202195 +B1548374542601N00620059EA0216102194 +B1548394542610N00620063EA0215902192 +B1548414542618N00620069EA0215602190 +B1548434542626N00620077EA0215502189 +B1548454542634N00620085EA0215402187 +B1548474542642N00620093EA0215302185 +B1548494542651N00620100EA0215102183 +B1548514542660N00620106EA0214902182 +B1548534542668N00620112EA0214602180 +B1548554542676N00620119EA0214502178 +B1548574542684N00620128EA0214202176 +B1548594542692N00620137EA0214002174 +B1549014542700N00620145EA0213802172 +B1549034542708N00620154EA0213602170 +B1549054542716N00620163EA0213302167 +B1549074542724N00620172EA0213002164 +B1549094542732N00620181EA0212802162 +B1549114542740N00620189EA0212502159 +B1549134542748N00620197EA0212302157 +B1549154542756N00620205EA0212002154 +B1549174542764N00620213EA0211802152 +B1549194542773N00620221EA0211602149 +B1549214542781N00620230EA0211302147 +B1549234542789N00620238EA0211102144 +B1549254542798N00620246EA0210902143 +B1549274542806N00620255EA0210802141 +B1549294542814N00620262EA0210602139 +B1549314542822N00620271EA0210402137 +B1549334542831N00620279EA0210202136 +B1549354542839N00620288EA0210002133 +B1549374542847N00620297EA0209702130 +B1549394542856N00620307EA0209502128 +B1549414542865N00620318EA0209502127 +B1549434542874N00620327EA0209402126 +B1549454542882N00620336EA0209102123 +B1549474542891N00620345EA0209002122 +B1549494542899N00620354EA0209302123 +B1549514542906N00620361EA0209202123 +B1549534542913N00620368EA0208902121 +B1549554542922N00620375EA0208702120 +B1549574542929N00620382EA0208902121 +B1549594542935N00620390EA0209002122 +B1550014542941N00620398EA0209202124 +B1550034542948N00620404EA0209402127 +B1550054542955N00620411EA0209702129 +B1550074542962N00620419EA0210202134 +B1550094542968N00620424EA0210702139 +B1550114542974N00620429EA0211202144 +B1550134542980N00620434EA0211902151 +B1550154542986N00620439EA0212602158 +B1550174542991N00620444EA0213002164 +B1550194542993N00620436EA0213102169 +B1550214542987N00620425EA0213502173 +B1550234542972N00620429EA0213802176 +B1550254542958N00620450EA0214002180 +B1550274542958N00620474EA0214902186 +B1550294542963N00620487EA0215902194 +B1550314542969N00620493EA0216702201 +B1550334542976N00620499EA0217402209 +B1550354542984N00620500EA0217902215 +B1550374542987N00620493EA0218002220 +B1550394542979N00620487EA0218302223 +B1550414542965N00620490EA0218602224 +B1550434542953N00620501EA0219002228 +B1550454542945N00620517EA0219602233 +B1550474542938N00620535EA0220402240 +B1550494542936N00620553EA0221102246 +B1550514542939N00620568EA0221702252 +B1550534542947N00620573EA0222302257 +B1550554542950N00620566EA0222602263 +B1550574542942N00620558EA0222902268 +B1550594542927N00620559EA0223702273 +B1551014542913N00620568EA0224402281 +B1551034542903N00620579EA0224902287 +B1551054542895N00620596EA0225302292 +B1551074542894N00620614EA0225602296 +B1551094542902N00620620EA0225802299 +B1551114542906N00620610EA0226202302 +B1551134542899N00620597EA0226802306 +B1551154542888N00620590EA0227502314 +B1551174542880N00620586EA0228002318 +B1551194542872N00620582EA0228402323 +B1551214542861N00620581EA0228902327 +B1551234542849N00620593EA0229202331 +B1551254542844N00620614EA0229502334 +B1551274542848N00620630EA0229902338 +B1551294542859N00620628EA0229902340 +B1551314542862N00620615EA0230202344 +B1551334542856N00620603EA0231002349 +B1551354542848N00620598EA0231302351 +B1551374542842N00620590EA0231402353 +B1551394542835N00620585EA0231602355 +B1551414542823N00620586EA0231702356 +B1551434542810N00620600EA0231802357 +B1551454542803N00620619EA0232002357 +B1551474542805N00620638EA0232302359 +B1551494542815N00620644EA0232302360 +B1551514542825N00620641EA0232302361 +B1551534542834N00620641EA0232502362 +B1551554542843N00620641EA0232402362 +B1551574542850N00620639EA0231802361 +B1551594542858N00620637EA0230802359 +B1552014542869N00620635EA0230402356 +B1552034542877N00620633EA0230502354 +B1552054542881N00620632EA0230202350 +B1552074542887N00620628EA0229402344 +B1552094542896N00620624EA0229102339 +B1552114542904N00620624EA0229102336 +B1552134542911N00620624EA0228802332 +B1552154542919N00620622EA0228302326 +B1552174542929N00620621EA0228002322 +B1552194542938N00620622EA0227902320 +B1552214542946N00620624EA0227602316 +B1552234542956N00620626EA0227202312 +B1552254542966N00620627EA0227002309 +B1552274542975N00620629EA0226902307 +B1552294542985N00620631EA0226702304 +B1552314542994N00620634EA0226202300 +B1552334543004N00620637EA0225802295 +B1552354543013N00620640EA0225502292 +B1552374543022N00620644EA0225202288 +B1552394543032N00620648EA0224702283 +B1552414543042N00620652EA0224202279 +B1552434543051N00620656EA0223902275 +B1552454543061N00620658EA0223502271 +B1552474543070N00620661EA0223102266 +B1552494543080N00620663EA0222702262 +B1552514543091N00620665EA0222402259 +B1552534543101N00620668EA0221902255 +B1552554543111N00620672EA0221502251 +B1552574543121N00620675EA0221102246 +B1552594543131N00620678EA0220702242 +B1553014543142N00620680EA0220302238 +B1553034543152N00620682EA0219902234 +B1553054543162N00620686EA0219602231 +B1553074543172N00620690EA0219302228 +B1553094543182N00620694EA0219002225 +B1553114543192N00620698EA0218702221 +B1553134543202N00620703EA0218502219 +B1553154543212N00620709EA0218202216 +B1553174543222N00620716EA0217902214 +B1553194543233N00620722EA0217802212 +B1553214543242N00620729EA0217502209 +B1553234543251N00620737EA0217202207 +B1553254543260N00620743EA0216802203 +B1553274543270N00620749EA0216402199 +B1553294543280N00620756EA0216402198 +B1553314543289N00620761EA0216202196 +B1553334543298N00620766EA0216002193 +B1553354543308N00620770EA0215802191 +B1553374543317N00620774EA0215502189 +B1553394543326N00620778EA0215202186 +B1553414543336N00620781EA0215102184 +B1553434543346N00620783EA0215002183 +B1553454543354N00620784EA0214802182 +B1553474543361N00620784EA0214602179 +B1553494543370N00620788EA0214302176 +B1553514543381N00620793EA0214102175 +B1553534543392N00620799EA0214602174 +B1553554543400N00620805EA0215202175 +B1553574543409N00620811EA0215502179 +B1553594543418N00620816EA0215802183 +B1554014543428N00620821EA0216302188 +B1554034543437N00620826EA0216602193 +B1554054543445N00620828EA0216402196 +B1554074543453N00620824EA0216202197 +B1554094543463N00620822EA0216302198 +B1554114543472N00620823EA0216102198 +B1554134543482N00620822EA0215802197 +B1554154543493N00620824EA0215602195 +B1554174543504N00620826EA0215402193 +B1554194543515N00620827EA0215302192 +B1554214543527N00620828EA0215302191 +B1554234543539N00620828EA0215202190 +B1554254543550N00620830EA0215102189 +B1554274543561N00620834EA0215002188 +B1554294543573N00620838EA0214902187 +B1554314543584N00620843EA0214902187 +B1554334543595N00620847EA0214902187 +B1554354543606N00620850EA0214702185 +B1554374543618N00620852EA0214702184 +B1554394543630N00620854EA0214702184 +B1554414543641N00620856EA0214702184 +B1554434543652N00620859EA0214702184 +B1554454543663N00620862EA0214702184 +B1554474543674N00620864EA0214802184 +B1554494543685N00620866EA0214802185 +B1554514543696N00620868EA0214802185 +B1554534543708N00620871EA0214802185 +B1554554543720N00620874EA0214802185 +B1554574543732N00620878EA0214902185 +B1554594543744N00620882EA0215002186 +B1555014543756N00620887EA0215202188 +B1555034543768N00620893EA0215302189 +B1555054543781N00620898EA0215302189 +B1555074543794N00620902EA0215402190 +B1555094543806N00620905EA0215402190 +B1555114543819N00620909EA0215402190 +B1555134543832N00620913EA0215302190 +B1555154543845N00620916EA0215302190 +B1555174543858N00620919EA0215302190 +B1555194543870N00620921EA0215202189 +B1555214543883N00620923EA0215102188 +B1555234543896N00620926EA0215002187 +B1555254543908N00620930EA0214902186 +B1555274543921N00620933EA0214802184 +B1555294543933N00620936EA0214602183 +B1555314543944N00620941EA0214402181 +B1555334543956N00620947EA0214002177 +B1555354543968N00620952EA0213702174 +B1555374543981N00620957EA0213502171 +B1555394543993N00620963EA0213402170 +B1555414544004N00620970EA0213102167 +B1555434544016N00620979EA0212702163 +B1555454544028N00620988EA0212602161 +B1555474544040N00620995EA0212302159 +B1555494544052N00621001EA0211902156 +B1555514544065N00621006EA0211802154 +B1555534544078N00621011EA0211902153 +B1555554544090N00621016EA0212202153 +B1555574544101N00621022EA0212302154 +B1555594544113N00621026EA0212302155 +B1556014544126N00621031EA0212402156 +B1556034544138N00621034EA0212502157 +B1556054544150N00621036EA0212502158 +B1556074544162N00621038EA0212402157 +B1556094544175N00621040EA0212202156 +B1556114544188N00621043EA0212202156 +B1556134544199N00621046EA0211902153 +B1556154544212N00621050EA0211502150 +B1556174544226N00621056EA0211302148 +B1556194544238N00621063EA0211302147 +B1556214544252N00621068EA0211102145 +B1556234544266N00621073EA0211102145 +B1556254544280N00621077EA0211402145 +B1556274544292N00621081EA0211502146 +B1556294544303N00621086EA0211202146 +B1556314544316N00621090EA0210902144 +B1556334544330N00621093EA0210802143 +B1556354544342N00621098EA0210602142 +B1556374544355N00621102EA0210302139 +B1556394544370N00621108EA0210002136 +B1556414544383N00621114EA0209802134 +B1556434544396N00621121EA0209502131 +B1556454544409N00621128EA0209102127 +B1556474544424N00621134EA0208702123 +B1556494544438N00621140EA0208702121 +B1556514544451N00621144EA0208402119 +B1556534544463N00621147EA0207902115 +B1556554544478N00621151EA0207502110 +B1556574544492N00621155EA0207302108 +B1556594544506N00621159EA0207002105 +B1557014544520N00621164EA0206702103 +B1557034544535N00621169EA0206702101 +B1557054544549N00621175EA0206502100 +B1557074544562N00621182EA0206202097 +B1557094544576N00621187EA0205902094 +B1557114544591N00621192EA0205802092 +B1557134544604N00621199EA0205602090 +B1557154544618N00621205EA0205402088 +B1557174544632N00621211EA0205402088 +B1557194544644N00621218EA0205202086 +B1557214544657N00621225EA0205002084 +B1557234544671N00621231EA0204702081 +B1557254544684N00621238EA0204702081 +B1557274544696N00621244EA0204702080 +B1557294544709N00621251EA0204502078 +B1557314544723N00621258EA0204402077 +B1557334544735N00621266EA0204302077 +B1557354544747N00621274EA0204102074 +B1557374544760N00621282EA0203802072 +B1557394544774N00621289EA0203802071 +B1557414544786N00621297EA0203702070 +B1557434544799N00621306EA0203502068 +B1557454544812N00621315EA0203302066 +B1557474544825N00621324EA0203102065 +B1557494544837N00621332EA0203002063 +B1557514544850N00621341EA0202702060 +B1557534544863N00621350EA0202502059 +B1557554544877N00621357EA0202502057 +B1557574544890N00621366EA0202402056 +B1557594544905N00621373EA0202202055 +B1558014544919N00621380EA0202202054 +B1558034544932N00621387EA0202102054 +B1558054544946N00621393EA0202002052 +B1558074544959N00621399EA0201802051 +B1558094544973N00621405EA0201702050 +B1558114544986N00621412EA0201602049 +B1558134544999N00621419EA0201502048 +B1558154545012N00621429EA0201302046 +B1558174545024N00621439EA0201202045 +B1558194545038N00621447EA0201002043 +B1558214545051N00621455EA0201002043 +B1558234545064N00621461EA0200902042 +B1558254545077N00621466EA0200802041 +B1558274545090N00621472EA0200702040 +B1558294545103N00621478EA0200602039 +B1558314545116N00621483EA0200602038 +B1558334545130N00621487EA0200502037 +B1558354545142N00621491EA0200402036 +B1558374545155N00621495EA0200302035 +B1558394545168N00621499EA0200102033 +B1558414545182N00621503EA0199902031 +B1558434545195N00621506EA0199602029 +B1558454545208N00621509EA0199402026 +B1558474545222N00621512EA0199102023 +B1558494545235N00621516EA0198902021 +B1558514545247N00621521EA0198602018 +B1558534545260N00621527EA0198402016 +B1558554545273N00621534EA0198402015 +B1558574545284N00621538EA0198102013 +B1558594545295N00621540EA0197602010 +B1559014545308N00621541EA0197202006 +B1559034545321N00621542EA0197002005 +B1559054545333N00621543EA0196802002 +B1559074545346N00621543EA0196702000 +B1559094545358N00621544EA0196701999 +B1559114545369N00621544EA0196601998 +B1559134545379N00621543EA0196301996 +B1559154545390N00621541EA0196201995 +B1559174545401N00621538EA0196301995 +B1559194545411N00621535EA0196201994 +B1559214545421N00621532EA0195901992 +B1559234545433N00621531EA0195801991 +B1559254545444N00621533EA0195601990 +B1559274545456N00621536EA0195401988 +B1559294545467N00621539EA0195201985 +B1559314545479N00621543EA0195101983 +B1559334545491N00621546EA0194901982 +B1559354545502N00621550EA0194801980 +B1559374545513N00621555EA0194801980 +B1559394545523N00621560EA0194701979 +B1559414545534N00621564EA0194501978 +B1559434545546N00621568EA0194501977 +B1559454545557N00621572EA0194601977 +B1559474545569N00621576EA0194501977 +B1559494545580N00621580EA0194401976 +B1559514545593N00621583EA0194301975 +B1559534545604N00621585EA0194201974 +B1559554545616N00621587EA0194201974 +B1559574545628N00621590EA0194201973 +B1559594545639N00621593EA0194201973 +B1600014545651N00621596EA0194101972 +B1600034545662N00621599EA0193901971 +B1600054545673N00621603EA0193701969 +B1600074545685N00621606EA0193601968 +B1600094545696N00621609EA0193501967 +B1600114545708N00621613EA0193401965 +B1600134545720N00621617EA0193301964 +B1600154545732N00621622EA0193201963 +B1600174545743N00621624EA0193101962 +B1600194545754N00621628EA0192901961 +B1600214545766N00621632EA0192801958 +B1600234545778N00621639EA0192601957 +B1600254545788N00621647EA0192501956 +B1600274545799N00621653EA0192301954 +B1600294545810N00621660EA0192101952 +B1600314545821N00621666EA0192001950 +B1600334545832N00621671EA0191801949 +B1600354545844N00621677EA0191601947 +B1600374545855N00621683EA0191501945 +B1600394545865N00621688EA0191301944 +B1600414545876N00621694EA0191101942 +B1600434545887N00621699EA0190901940 +B1600454545898N00621703EA0190801938 +B1600474545908N00621707EA0190501936 +B1600494545918N00621712EA0190201933 +B1600514545928N00621716EA0189901930 +B1600534545938N00621722EA0189501926 +B1600554545948N00621727EA0189101922 +B1600574545958N00621734EA0188801919 +B1600594545967N00621740EA0188501916 +B1601014545977N00621743EA0188201912 +B1601034545987N00621745EA0187801909 +B1601054545997N00621747EA0187501906 +B1601074546008N00621748EA0187301903 +B1601094546018N00621749EA0187101901 +B1601114546028N00621752EA0186901898 +B1601134546037N00621757EA0186401894 +B1601154546048N00621764EA0185901890 +B1601174546058N00621769EA0185801888 +B1601194546067N00621773EA0185701886 +B1601214546077N00621780EA0185501883 +B1601234546087N00621788EA0185301881 +B1601254546096N00621795EA0185101880 +B1601274546106N00621802EA0185101879 +B1601294546115N00621806EA0184901878 +B1601314546123N00621810EA0184401876 +B1601334546134N00621815EA0183801872 +B1601354546146N00621821EA0183501868 +B1601374546158N00621826EA0183501867 +B1601394546169N00621829EA0183301866 +B1601414546180N00621832EA0183101863 +B1601434546190N00621834EA0183001862 +B1601454546200N00621835EA0182901860 +B1601474546211N00621840EA0182601857 +B1601494546223N00621844EA0182501856 +B1601514546234N00621849EA0182501855 +B1601534546244N00621853EA0182501855 +B1601554546253N00621856EA0182301853 +B1601574546265N00621858EA0182201852 +B1601594546276N00621860EA0182301853 +B1602014546285N00621861EA0182301852 +B1602034546294N00621863EA0182101851 +B1602054546303N00621866EA0181901848 +B1602074546314N00621871EA0181701847 +B1602094546323N00621875EA0181501844 +B1602114546333N00621878EA0181201841 +B1602134546344N00621882EA0181001839 +B1602154546355N00621887EA0180901838 +B1602174546366N00621891EA0180701836 +B1602194546376N00621896EA0180501834 +B1602214546388N00621901EA0180501833 +B1602234546398N00621906EA0180401833 +B1602254546407N00621913EA0180301831 +B1602274546417N00621918EA0180001829 +B1602294546428N00621923EA0179901827 +B1602314546438N00621929EA0180001827 +B1602334546447N00621934EA0179801826 +B1602354546457N00621938EA0179601824 +B1602374546466N00621940EA0179601824 +B1602394546474N00621944EA0179601823 +B1602414546484N00621949EA0179401822 +B1602434546494N00621955EA0179501822 +B1602454546503N00621960EA0179601823 +B1602474546513N00621967EA0179701825 +B1602494546522N00621973EA0180101827 +B1602514546530N00621977EA0180401831 +B1602534546538N00621982EA0180801835 +B1602554546545N00621985EA0181001838 +B1602574546548N00621978EA0181001840 +B1602594546545N00621966EA0181101841 +B1603014546535N00621961EA0181301842 +B1603034546521N00621969EA0181501844 +B1603054546514N00621988EA0181601845 +B1603074546515N00622008EA0181701846 +B1603094546522N00622021EA0181801847 +B1603114546530N00622028EA0182001848 +B1603134546538N00622030EA0182001849 +B1603154546547N00622031EA0182301851 +B1603174546557N00622034EA0182901854 +B1603194546565N00622036EA0183301859 +B1603214546571N00622039EA0183601862 +B1603234546577N00622038EA0183601864 +B1603254546577N00622028EA0183601865 +B1603274546568N00622020EA0183701865 +B1603294546553N00622026EA0183701866 +B1603314546542N00622044EA0183701867 +B1603334546539N00622066EA0183701867 +B1603354546545N00622084EA0183801868 +B1603374546553N00622096EA0184001869 +B1603394546562N00622106EA0184201871 +B1603414546571N00622115EA0184401872 +B1603434546581N00622123EA0184601875 +B1603454546590N00622128EA0184901877 +B1603474546600N00622133EA0185201880 +B1603494546610N00622137EA0185601884 +B1603514546618N00622142EA0186001888 +B1603534546624N00622145EA0186201892 +B1603554546630N00622146EA0186301894 +B1603574546632N00622140EA0186401895 +B1603594546626N00622133EA0186501897 +B1604014546612N00622133EA0186601897 +B1604034546599N00622147EA0186501896 +B1604054546591N00622168EA0186601897 +B1604074546591N00622190EA0186801898 +B1604094546597N00622207EA0187101901 +B1604114546604N00622220EA0187401904 +B1604134546612N00622231EA0187701907 +B1604154546621N00622239EA0188001909 +B1604174546630N00622243EA0188201912 +B1604194546640N00622247EA0188501914 +B1604214546651N00622251EA0188901918 +B1604234546661N00622254EA0189301922 +B1604254546671N00622252EA0189801926 +B1604274546679N00622249EA0190301932 +B1604294546687N00622250EA0190601935 +B1604314546696N00622251EA0190901939 +B1604334546705N00622251EA0191401944 +B1604354546713N00622249EA0191901949 +B1604374546719N00622247EA0192501955 +B1604394546726N00622248EA0193201962 +B1604414546733N00622251EA0193901969 +B1604434546740N00622251EA0194701977 +B1604454546745N00622251EA0195301984 +B1604474546747N00622243EA0195701990 +B1604494546740N00622229EA0196101995 +B1604514546725N00622227EA0196802001 +B1604534546713N00622241EA0197302006 +B1604554546709N00622262EA0197902011 +B1604574546714N00622276EA0198502017 +B1604594546723N00622276EA0199002023 +B1605014546728N00622266EA0199802029 +B1605034546721N00622253EA0200402035 +B1605054546707N00622250EA0200902041 +B1605074546692N00622261EA0201402046 +B1605094546686N00622283EA0202002052 +B1605114546689N00622301EA0202702058 +B1605134546696N00622311EA0203302065 +B1605154546704N00622315EA0204002072 +B1605174546711N00622314EA0204802080 +B1605194546714N00622307EA0205402087 +B1605214546714N00622297EA0206202094 +B1605234546706N00622286EA0206802101 +B1605254546693N00622285EA0207302108 +B1605274546679N00622295EA0207802113 +B1605294546672N00622314EA0208202118 +B1605314546674N00622334EA0208902124 +B1605334546681N00622345EA0209602131 +B1605354546688N00622348EA0210202137 +B1605374546693N00622346EA0210902144 +B1605394546695N00622337EA0211402149 +B1605414546688N00622326EA0212002155 +B1605434546678N00622319EA0212702161 +B1605454546665N00622323EA0213102167 +B1605474546652N00622339EA0213602172 +B1605494546646N00622358EA0214202178 +B1605514546646N00622376EA0214702184 +B1605534546649N00622391EA0215102188 +B1605554546656N00622400EA0215302191 +B1605574546666N00622403EA0215602194 +B1605594546676N00622399EA0216302199 +B1606014546681N00622394EA0217102206 +B1606034546686N00622392EA0217802213 +B1606054546690N00622390EA0218202219 +B1606074546691N00622384EA0218502223 +B1606094546685N00622374EA0218702226 +B1606114546672N00622365EA0219002229 +B1606134546656N00622370EA0219502233 +B1606154546646N00622387EA0219902236 +B1606174546645N00622406EA0220302241 +B1606194546651N00622420EA0220802245 +B1606214546660N00622424EA0221302250 +B1606234546667N00622421EA0222002256 +B1606254546668N00622413EA0222402262 +B1606274546663N00622406EA0222602266 +B1606294546652N00622398EA0222802268 +B1606314546635N00622397EA0223302272 +B1606334546620N00622410EA0223602275 +B1606354546613N00622429EA0224002279 +B1606374546611N00622447EA0224402283 +B1606394546615N00622462EA0224702286 +B1606414546624N00622473EA0225002289 +B1606434546634N00622479EA0225602293 +B1606454546642N00622481EA0226302299 +B1606474546649N00622481EA0226902306 +B1606494546654N00622482EA0227502312 +B1606514546660N00622482EA0227802317 +B1606534546665N00622478EA0227602321 +B1606554546664N00622465EA0227002322 +B1606574546654N00622450EA0226902320 +B1606594546639N00622449EA0227102320 +B1607014546626N00622462EA0227102318 +B1607034546620N00622480EA0227102316 +B1607054546619N00622499EA0227202315 +B1607074546623N00622516EA0227502317 +B1607094546630N00622530EA0228002320 +B1607114546637N00622542EA0228402325 +B1607134546642N00622555EA0228902329 +B1607154546649N00622567EA0229402334 +B1607174546656N00622570EA0230002339 +B1607194546662N00622563EA0230302343 +B1607214546660N00622549EA0230502346 +B1607234546648N00622542EA0230702348 +B1607254546633N00622547EA0231002352 +B1607274546622N00622564EA0231302354 +B1607294546620N00622584EA0231602357 +B1607314546624N00622601EA0232002360 +B1607334546631N00622612EA0232402364 +B1607354546638N00622618EA0232802368 +B1607374546645N00622613EA0233102372 +B1607394546647N00622603EA0233302373 +B1607414546644N00622592EA0233602376 +B1607434546633N00622585EA0233702378 +B1607454546618N00622587EA0233802380 +B1607474546606N00622601EA0234202382 +B1607494546602N00622621EA0234502385 +B1607514546604N00622637EA0234702388 +B1607534546610N00622650EA0235002391 +B1607554546616N00622661EA0235402394 +B1607574546621N00622669EA0235702397 +B1607594546627N00622674EA0235802399 +B1608014546634N00622675EA0236002401 +B1608034546642N00622674EA0236102402 +B1608054546650N00622673EA0236102402 +B1608074546657N00622672EA0236202402 +B1608094546664N00622671EA0236202402 +B1608114546672N00622668EA0236302403 +B1608134546679N00622664EA0236702405 +B1608154546685N00622663EA0237202409 +B1608174546692N00622662EA0237702414 +B1608194546699N00622661EA0238002417 +B1608214546707N00622660EA0238302421 +B1608234546714N00622657EA0238702425 +B1608254546717N00622649EA0238802428 +B1608274546712N00622639EA0238802430 +B1608294546700N00622635EA0238702431 +B1608314546684N00622642EA0238902432 +B1608334546673N00622659EA0239302433 +B1608354546669N00622679EA0239702437 +B1608374546669N00622697EA0240102442 +B1608394546672N00622712EA0240502446 +B1608414546677N00622723EA0240902449 +B1608434546683N00622731EA0241102452 +B1608454546690N00622737EA0241402454 +B1608474546698N00622738EA0241502455 +B1608494546707N00622741EA0241502456 +B1608514546716N00622746EA0241502456 +B1608534546725N00622750EA0241302455 +B1608554546736N00622751EA0241302454 +B1608574546748N00622749EA0241602455 +B1608594546758N00622748EA0242302456 +B1609014546769N00622748EA0242802460 +B1609034546780N00622743EA0243202464 +B1609054546791N00622739EA0243902470 +B1609074546802N00622738EA0244602477 +B1609094546813N00622736EA0245002482 +B1609114546825N00622733EA0245602488 +B1609134546837N00622732EA0246402495 +B1609154546850N00622733EA0247502504 +B1609174546862N00622733EA0248402514 +B1609194546874N00622732EA0249302523 +B1609214546886N00622729EA0250102533 +B1609234546897N00622725EA0250702541 +B1609254546908N00622723EA0251202547 +B1609274546920N00622719EA0251402552 +B1609294546933N00622711EA0251702556 +B1609314546944N00622704EA0252002559 +B1609334546956N00622698EA0252302563 +B1609354546966N00622694EA0252802568 +B1609374546975N00622692EA0253102572 +B1609394546984N00622688EA0253202574 +B1609414546993N00622681EA0253302575 +B1609434547002N00622677EA0253302576 +B1609454547010N00622674EA0253302577 +B1609474547017N00622670EA0253202576 +B1609494547025N00622665EA0253002574 +B1609514547033N00622661EA0252702572 +B1609534547044N00622656EA0252302568 +B1609554547054N00622652EA0251902564 +B1609574547064N00622649EA0251602560 +B1609594547075N00622647EA0251202555 +B1610014547086N00622647EA0250702550 +B1610034547097N00622645EA0250402546 +B1610054547109N00622641EA0250402543 +B1610074547119N00622637EA0250402542 +B1610094547129N00622633EA0250202540 +B1610114547140N00622627EA0250502540 +B1610134547150N00622620EA0251102541 +B1610154547158N00622615EA0251502545 +B1610174547167N00622611EA0251702547 +B1610194547177N00622609EA0251802549 +B1610214547187N00622610EA0251802550 +B1610234547198N00622610EA0251902552 +B1610254547210N00622611EA0252202554 +B1610274547221N00622612EA0252702558 +B1610294547231N00622612EA0253202563 +B1610314547240N00622609EA0253602568 +B1610334547249N00622607EA0254202574 +B1610354547257N00622604EA0254502579 +B1610374547266N00622603EA0254402583 +B1610394547276N00622602EA0254402585 +B1610414547288N00622600EA0254602587 +B1610434547297N00622598EA0254802590 +B1610454547307N00622598EA0255002591 +B1610474547315N00622594EA0255202594 +B1610494547324N00622591EA0255602597 +B1610514547331N00622589EA0255802600 +B1610534547340N00622587EA0256202603 +B1610554547350N00622587EA0256902608 +B1610574547359N00622590EA0257602614 +B1610594547368N00622592EA0258002618 +B1611014547377N00622595EA0258402623 +B1611034547386N00622600EA0258702627 +B1611054547396N00622605EA0258902629 +B1611074547405N00622608EA0259202632 +B1611094547414N00622608EA0259402635 +B1611114547424N00622609EA0259702638 +B1611134547434N00622611EA0260002641 +B1611154547444N00622612EA0260502645 +B1611174547453N00622612EA0261002650 +B1611194547461N00622613EA0261202653 +B1611214547469N00622612EA0261002655 +B1611234547480N00622610EA0260802655 +B1611254547491N00622612EA0260902657 +B1611274547502N00622615EA0261402659 +B1611294547512N00622616EA0262002664 +B1611314547523N00622618EA0262602670 +B1611334547533N00622621EA0263302676 +B1611354547544N00622625EA0263702681 +B1611374547556N00622630EA0263802684 +B1611394547568N00622637EA0263902686 +B1611414547578N00622647EA0264302688 +B1611434547587N00622657EA0264602691 +B1611454547596N00622665EA0264802693 +B1611474547603N00622675EA0265002695 +B1611494547607N00622690EA0265102696 +B1611514547612N00622704EA0265302698 +B1611534547616N00622718EA0265402699 +B1611554547619N00622733EA0265602700 +B1611574547623N00622748EA0265702701 +B1611594547628N00622763EA0266002703 +B1612014547633N00622777EA0266202706 +B1612034547638N00622790EA0266202707 +B1612054547645N00622805EA0265902706 +B1612074547650N00622820EA0265802705 +B1612094547655N00622834EA0265602703 +B1612114547660N00622850EA0265002700 +B1612134547666N00622868EA0264302695 +B1612154547670N00622885EA0263702688 +B1612174547677N00622901EA0263302683 +B1612194547687N00622912EA0262802677 +B1612214547699N00622919EA0262302672 +B1612234547712N00622926EA0261702666 +B1612254547725N00622934EA0261102659 +B1612274547738N00622942EA0260502653 +B1612294547751N00622950EA0259902646 +B1612314547764N00622955EA0259402641 +B1612334547776N00622959EA0258802634 +B1612354547790N00622965EA0258202627 +B1612374547803N00622972EA0258002622 +B1612394547814N00622981EA0257702618 +B1612414547823N00622989EA0257302613 +B1612434547834N00622995EA0256802608 +B1612454547845N00623001EA0256502604 +B1612474547857N00623006EA0256402601 +B1612494547866N00623010EA0256902599 +B1612514547872N00623011EA0256702597 +B1612534547879N00623008EA0256002594 +B1612554547890N00623009EA0255302589 +B1612574547901N00623014EA0255302587 +B1612594547911N00623018EA0255502587 +B1613014547922N00623024EA0255702589 +B1613034547931N00623033EA0256202592 +B1613054547940N00623039EA0256902598 +B1613074547948N00623043EA0257502605 +B1613094547957N00623039EA0258002612 +B1613114547963N00623025EA0258302617 +B1613134547963N00623007EA0258502620 +B1613154547955N00622992EA0258902624 +B1613174547941N00622992EA0259402628 +B1613194547931N00623004EA0259802634 +B1613214547928N00623019EA0260202638 +B1613234547931N00623034EA0260702644 +B1613254547936N00623047EA0261202649 +B1613274547941N00623061EA0261702655 +B1613294547946N00623073EA0262102659 +B1613314547951N00623087EA0262402663 +B1613334547956N00623101EA0262702666 +B1613354547961N00623115EA0263002669 +B1613374547967N00623129EA0263402672 +B1613394547972N00623143EA0263702676 +B1613414547977N00623158EA0263902678 +B1613434547982N00623173EA0264002680 +B1613454547987N00623188EA0264102681 +B1613474547992N00623203EA0264102681 +B1613494547998N00623218EA0264002680 +B1613514548004N00623236EA0263902680 +B1613534548010N00623250EA0263702679 +B1613554548015N00623266EA0263102676 +B1613574548021N00623284EA0262502672 +B1613594548029N00623299EA0262102668 +B1614014548036N00623313EA0261702663 +B1614034548042N00623331EA0261202658 +B1614054548048N00623349EA0261002654 +B1614074548053N00623365EA0260602651 +B1614094548060N00623383EA0259802645 +B1614114548068N00623402EA0259302640 +B1614134548074N00623419EA0259202636 +B1614154548080N00623435EA0258902633 +B1614174548086N00623453EA0258502629 +B1614194548092N00623470EA0258302626 +B1614214548098N00623487EA0258102623 +B1614234548103N00623504EA0257802621 +B1614254548108N00623522EA0257702619 +B1614274548114N00623539EA0257602618 +B1614294548119N00623555EA0257402616 +B1614314548125N00623573EA0257402614 +B1614334548131N00623590EA0257302613 +B1614354548137N00623607EA0257202613 +B1614374548142N00623625EA0256902611 +B1614394548149N00623643EA0256602608 +B1614414548156N00623661EA0256502606 +B1614434548162N00623678EA0256302604 +B1614454548169N00623696EA0256002601 +B1614474548175N00623715EA0255802599 +B1614494548181N00623733EA0255602597 +B1614514548187N00623751EA0255302595 +B1614534548193N00623769EA0255102592 +B1614554548200N00623787EA0254902590 +B1614574548206N00623804EA0254702588 +B1614594548212N00623822EA0254302584 +B1615014548219N00623840EA0254102582 +B1615034548226N00623858EA0254002580 +B1615054548232N00623875EA0253802578 +B1615074548238N00623893EA0253602576 +B1615094548245N00623911EA0253402575 +B1615114548251N00623928EA0253202573 +B1615134548258N00623946EA0253002570 +B1615154548263N00623965EA0252702567 +B1615174548267N00623984EA0252402564 +B1615194548271N00624003EA0252102561 +B1615214548275N00624021EA0251902558 +B1615234548278N00624040EA0251702556 +B1615254548279N00624059EA0251602555 +B1615274548281N00624077EA0251502553 +B1615294548283N00624098EA0251102550 +B1615314548285N00624120EA0250902548 +B1615334548288N00624140EA0250902547 +B1615354548291N00624159EA0250802546 +B1615374548292N00624179EA0250602544 +B1615394548295N00624198EA0250402543 +B1615414548299N00624217EA0250302542 +B1615434548303N00624236EA0250202540 +B1615454548306N00624256EA0250102539 +B1615474548310N00624274EA0249802538 +B1615494548316N00624292EA0249702536 +B1615514548321N00624310EA0249402533 +B1615534548327N00624328EA0249102530 +B1615554548332N00624347EA0249002529 +B1615574548337N00624364EA0248802527 +B1615594548343N00624382EA0248602524 +B1616014548348N00624401EA0248402522 +B1616034548352N00624419EA0248202520 +B1616054548357N00624437EA0247902518 +B1616074548361N00624455EA0248002517 +B1616094548365N00624472EA0248102517 +B1616114548369N00624486EA0247902515 +B1616134548374N00624501EA0247702514 +B1616154548377N00624516EA0247702513 +B1616174548380N00624531EA0247302511 +B1616194548386N00624547EA0246902507 +B1616214548391N00624563EA0246702505 +B1616234548396N00624579EA0246402503 +B1616254548402N00624593EA0246102500 +B1616274548408N00624610EA0245702496 +B1616294548413N00624627EA0245602494 +B1616314548418N00624644EA0245402492 +B1616334548423N00624660EA0245202490 +B1616354548429N00624676EA0245102489 +B1616374548435N00624691EA0244902487 +B1616394548442N00624706EA0244602484 +B1616414548449N00624721EA0244402483 +B1616434548456N00624735EA0244202480 +B1616454548465N00624748EA0243802476 +B1616474548473N00624762EA0243502473 +B1616494548481N00624774EA0243202471 +B1616514548490N00624786EA0242802467 +B1616534548497N00624801EA0242402463 +B1616554548504N00624817EA0242002459 +B1616574548511N00624832EA0241902457 +B1616594548517N00624847EA0241702455 +B1617014548523N00624861EA0241502453 +B1617034548530N00624874EA0241302451 +B1617054548537N00624887EA0241102448 +B1617074548543N00624901EA0240902446 +B1617094548550N00624914EA0240602443 +B1617114548557N00624927EA0240302440 +B1617134548563N00624942EA0240002437 +B1617154548571N00624956EA0239602433 +B1617174548579N00624969EA0239302430 +B1617194548587N00624981EA0239102428 +B1617214548595N00624994EA0238802425 +B1617234548602N00625006EA0238502422 +B1617254548610N00625019EA0237902418 +B1617274548619N00625031EA0237502413 +B1617294548628N00625043EA0237102409 +B1617314548637N00625055EA0236602405 +B1617334548646N00625069EA0236202400 +B1617354548653N00625083EA0235902397 +B1617374548660N00625098EA0235502393 +B1617394548668N00625112EA0235102388 +B1617414548675N00625128EA0234902385 +B1617434548681N00625144EA0234802383 +B1617454548687N00625159EA0234802382 +B1617474548693N00625172EA0234502379 +B1617494548700N00625184EA0234202377 +B1617514548708N00625196EA0234002375 +B1617534548715N00625207EA0233702372 +B1617554548723N00625219EA0233402369 +B1617574548731N00625230EA0233102366 +B1617594548738N00625241EA0232802363 +B1618014548746N00625253EA0232602361 +B1618034548755N00625263EA0232402358 +B1618054548763N00625274EA0232602358 +B1618074548769N00625288EA0232602359 +B1618094548775N00625299EA0232302358 +B1618114548783N00625313EA0232102355 +B1618134548790N00625329EA0232002355 +B1618154548795N00625342EA0231902354 +B1618174548802N00625354EA0231602351 +B1618194548811N00625367EA0231302348 +B1618214548819N00625378EA0231102346 +B1618234548826N00625388EA0230902344 +B1618254548835N00625398EA0230702342 +B1618274548845N00625408EA0230602341 +B1618294548853N00625417EA0230402339 +B1618314548862N00625426EA0230102336 +B1618334548871N00625437EA0229902334 +B1618354548880N00625447EA0229902334 +B1618374548888N00625458EA0229802333 +B1618394548897N00625467EA0229602331 +B1618414548907N00625477EA0229302328 +B1618434548916N00625487EA0229202327 +B1618454548925N00625497EA0229102326 +B1618474548933N00625508EA0228902324 +B1618494548941N00625519EA0228802323 +B1618514548949N00625529EA0228502321 +B1618534548957N00625539EA0228202318 +B1618554548966N00625549EA0227902315 +B1618574548974N00625562EA0227702312 +B1618594548982N00625574EA0227502310 +B1619014548991N00625584EA0227402308 +B1619034548999N00625595EA0227202306 +B1619054549007N00625605EA0227002304 +B1619074549015N00625614EA0226702302 +B1619094549023N00625625EA0226402299 +B1619114549031N00625634EA0226202297 +B1619134549040N00625643EA0226002295 +B1619154549048N00625652EA0225802292 +B1619174549057N00625660EA0225402288 +B1619194549066N00625668EA0225102286 +B1619214549075N00625677EA0225002284 +B1619234549083N00625687EA0224802282 +B1619254549091N00625699EA0224602280 +B1619274549100N00625712EA0224402278 +B1619294549108N00625723EA0224302276 +B1619314549117N00625734EA0224002274 +B1619334549126N00625744EA0224002273 +B1619354549134N00625753EA0223802272 +B1619374549143N00625762EA0223802271 +B1619394549152N00625771EA0223702271 +B1619414549161N00625779EA0223702270 +B1619434549170N00625787EA0223702270 +B1619454549178N00625794EA0223702270 +B1619474549186N00625801EA0223802271 +B1619494549194N00625809EA0224002272 +B1619514549202N00625817EA0224002272 +B1619534549209N00625825EA0224302274 +B1619554549216N00625832EA0224502277 +B1619574549222N00625838EA0224502279 +B1619594549230N00625844EA0224302279 +B1620014549239N00625849EA0224102277 +B1620034549248N00625856EA0223902275 +B1620054549256N00625864EA0223702273 +B1620074549266N00625873EA0223502270 +B1620094549275N00625882EA0223302268 +B1620114549284N00625892EA0223102266 +B1620134549294N00625901EA0222902264 +B1620154549303N00625910EA0222802262 +B1620174549310N00625921EA0222602260 +B1620194549318N00625931EA0222102257 +B1620214549328N00625938EA0221602252 +B1620234549337N00625947EA0221302249 +B1620254549346N00625957EA0221002245 +B1620274549355N00625965EA0220702242 +B1620294549365N00625975EA0220502239 +B1620314549373N00625986EA0220302237 +B1620334549382N00625997EA0220102234 +B1620354549391N00626008EA0220002233 +B1620374549400N00626018EA0219802231 +B1620394549409N00626026EA0219602229 +B1620414549418N00626037EA0219402226 +B1620434549429N00626047EA0219302225 +B1620454549438N00626054EA0219302225 +B1620474549447N00626061EA0219002223 +B1620494549456N00626068EA0218802221 +B1620514549465N00626075EA0218602218 +B1620534549474N00626081EA0218302215 +B1620554549484N00626089EA0218002212 +B1620574549492N00626095EA0218102211 +B1620594549499N00626101EA0218002210 +B1621014549506N00626110EA0217602208 +B1621034549513N00626120EA0217302205 +B1621054549521N00626129EA0217302204 +B1621074549528N00626139EA0217302204 +B1621094549535N00626149EA0217102202 +B1621114549542N00626158EA0216902200 +B1621134549550N00626166EA0216502197 +B1621154549559N00626174EA0216202194 +B1621174549568N00626180EA0216102192 +B1621194549575N00626185EA0215802190 +B1621214549583N00626189EA0215502187 +B1621234549592N00626193EA0215202184 +B1621254549601N00626200EA0215002182 +B1621274549608N00626207EA0214702179 +B1621294549616N00626212EA0214102175 +B1621314549624N00626218EA0213602170 +B1621334549632N00626224EA0213302167 +B1621354549639N00626228EA0212902163 +B1621374549647N00626230EA0212402158 +B1621394549655N00626231EA0211902153 +B1621414549663N00626233EA0211402148 +B1621434549670N00626230EA0210902143 +B1621454549677N00626224EA0210502138 +B1621474549685N00626218EA0210402134 +B1621494549692N00626214EA0210302132 +B1621514549697N00626211EA0210502131 +B1621534549701N00626207EA0210702134 +B1621554549704N00626204EA0210702135 +B1621574549709N00626201EA0210702135 +B1621594549714N00626200EA0210702136 +B1622014549720N00626200EA0210902138 +B1622034549726N00626203EA0211002139 +B1622054549733N00626206EA0211202142 +B1622074549739N00626211EA0211402144 +B1622094549746N00626216EA0211402145 +B1622114549752N00626222EA0211602147 +B1622134549758N00626229EA0211702148 +B1622154549764N00626235EA0211602149 +B1622174549770N00626241EA0211602149 +B1622194549777N00626247EA0211702149 +B1622214549784N00626254EA0211802150 +B1622234549791N00626261EA0211902150 +B1622254549798N00626268EA0211902151 +B1622274549805N00626275EA0212002152 +B1622294549812N00626282EA0212202154 +B1622314549819N00626289EA0212402156 +B1622334549825N00626298EA0212702158 +B1622354549831N00626307EA0213002161 +B1622374549837N00626317EA0213302164 +B1622394549843N00626328EA0213602167 +B1622414549849N00626338EA0213802169 +B1622434549855N00626348EA0214002172 +B1622454549862N00626358EA0214302174 +B1622474549867N00626369EA0214602177 +B1622494549873N00626379EA0215102182 +B1622514549879N00626390EA0215502185 +B1622534549884N00626403EA0215802189 +B1622554549891N00626414EA0216102192 +B1622574549898N00626418EA0216502196 +B1622594549905N00626411EA0216602199 +B1623014549903N00626396EA0216902202 +B1623034549892N00626390EA0217302206 +B1623054549878N00626392EA0217402208 +B1623074549867N00626392EA0217602209 +B1623094549857N00626384EA0217602210 +B1623114549852N00626374EA0217802211 +B1623134549854N00626366EA0217702212 +B1623154549864N00626368EA0217602212 +B1623174549873N00626381EA0217702212 +B1623194549879N00626398EA0217902214 +B1623214549884N00626412EA0218102216 +B1623234549889N00626425EA0218202217 +B1623254549894N00626439EA0218602219 +B1623274549898N00626455EA0219102223 +B1623294549902N00626470EA0219602227 +B1623314549909N00626480EA0219702230 +B1623334549919N00626479EA0219802232 +B1623354549920N00626468EA0219702232 +B1623374549911N00626459EA0219502233 +B1623394549899N00626454EA0219502233 +B1623414549891N00626444EA0219502231 +B1623434549889N00626431EA0219702232 +B1623454549892N00626424EA0219702232 +B1623474549897N00626420EA0219602231 +B1623494549907N00626424EA0219302228 +B1623514549915N00626443EA0219102226 +B1623534549914N00626465EA0219202226 +B1623554549911N00626483EA0219202226 +B1623574549911N00626502EA0219002224 +B1623594549913N00626523EA0218802222 +B1624014549916N00626544EA0219102222 +B1624034549919N00626563EA0219602224 +B1624054549922N00626580EA0219902226 +B1624074549926N00626598EA0220002228 +B1624094549933N00626614EA0220202230 +B1624114549941N00626622EA0220402232 +B1624134549952N00626619EA0220302232 +B1624154549952N00626608EA0220402234 +B1624174549942N00626601EA0220502235 +B1624194549931N00626598EA0220602238 +B1624214549922N00626593EA0220802239 +B1624234549916N00626587EA0221102241 +B1624254549910N00626581EA0221202243 +B1624274549904N00626574EA0221302244 +B1624294549899N00626565EA0221502246 +B1624314549896N00626556EA0221802249 +B1624334549892N00626548EA0222002251 +B1624354549888N00626539EA0222102253 +B1624374549889N00626531EA0221902253 +B1624394549901N00626533EA0221602252 +B1624414549907N00626555EA0221602251 +B1624434549906N00626578EA0222102253 +B1624454549905N00626596EA0222502255 +B1624474549907N00626612EA0222702258 +B1624494549910N00626627EA0222802259 +B1624514549917N00626641EA0222702259 +B1624534549928N00626642EA0222602258 +B1624554549933N00626632EA0222502257 +B1624574549926N00626620EA0222602257 +B1624594549916N00626613EA0223102259 +B1625014549907N00626607EA0223402263 +B1625034549900N00626599EA0223602266 +B1625054549893N00626592EA0223702267 +B1625074549886N00626583EA0224002270 +B1625094549880N00626575EA0224202272 +B1625114549875N00626566EA0224302273 +B1625134549870N00626556EA0224302274 +B1625154549867N00626547EA0224302275 +B1625174549870N00626538EA0224202274 +B1625194549880N00626541EA0224202274 +B1625214549887N00626563EA0224502274 +B1625234549887N00626585EA0225102278 +B1625254549889N00626600EA0225302281 +B1625274549893N00626616EA0225502283 +B1625294549896N00626633EA0225802286 +B1625314549901N00626646EA0226002290 +B1625334549910N00626649EA0226002292 +B1625354549916N00626642EA0226102293 +B1625374549915N00626631EA0226302296 +B1625394549906N00626622EA0226502298 +B1625414549897N00626615EA0226802300 +B1625434549890N00626606EA0227102303 +B1625454549883N00626597EA0227402307 +B1625474549875N00626590EA0227702310 +B1625494549870N00626582EA0227702311 +B1625514549869N00626575EA0227602311 +B1625534549878N00626576EA0227502310 +B1625554549887N00626589EA0227502310 +B1625574549894N00626606EA0227702311 +B1625594549901N00626618EA0227802312 +B1626014549909N00626628EA0228002313 +B1626034549917N00626637EA0228202315 +B1626054549925N00626642EA0228302316 +B1626074549934N00626647EA0228402317 +B1626094549943N00626652EA0228502318 +B1626114549950N00626659EA0228402318 +B1626134549958N00626667EA0228302317 +B1626154549966N00626674EA0228202316 +B1626174549975N00626684EA0228102314 +B1626194549984N00626693EA0228202314 +B1626214549994N00626702EA0228202314 +B1626234550003N00626710EA0228202314 +B1626254550012N00626718EA0228102313 +B1626274550022N00626725EA0228102312 +B1626294550032N00626732EA0228202313 +B1626314550041N00626737EA0228402314 +B1626334550049N00626740EA0228502315 +B1626354550057N00626743EA0228502316 +B1626374550066N00626746EA0228402316 +B1626394550075N00626750EA0228102314 +B1626414550084N00626754EA0227902312 +B1626434550093N00626758EA0227602309 +B1626454550103N00626761EA0227302306 +B1626474550113N00626764EA0226902302 +B1626494550123N00626764EA0226702299 +B1626514550134N00626765EA0226602297 +B1626534550144N00626769EA0226602297 +B1626554550152N00626772EA0226502296 +B1626574550162N00626776EA0226102293 +B1626594550174N00626780EA0225902291 +B1627014550184N00626784EA0225902290 +B1627034550193N00626789EA0225702289 +B1627054550202N00626795EA0225402287 +B1627074550213N00626798EA0225102284 +B1627094550223N00626800EA0224902282 +B1627114550232N00626800EA0224602279 +B1627134550242N00626802EA0224302276 +B1627154550252N00626805EA0224002273 +B1627174550261N00626806EA0223602269 +B1627194550271N00626807EA0223202265 +B1627214550281N00626807EA0222802261 +B1627234550290N00626809EA0222302256 +B1627254550301N00626814EA0221702250 +B1627274550311N00626822EA0221302246 +B1627294550320N00626832EA0221102242 +B1627314550328N00626843EA0220702239 +B1627334550336N00626852EA0220402235 +B1627354550345N00626858EA0220102232 +B1627374550352N00626865EA0219702229 +B1627394550357N00626878EA0219302225 +B1627414550356N00626895EA0218902221 +B1627434550351N00626913EA0218702218 +B1627454550343N00626929EA0218602216 +B1627474550334N00626943EA0218502214 +B1627494550324N00626956EA0218402213 +B1627514550312N00626964EA0218302211 +B1627534550299N00626971EA0218202210 +B1627554550287N00626976EA0218102209 +B1627574550275N00626982EA0218002209 +B1627594550263N00626987EA0217802207 +B1628014550251N00626989EA0217602205 +B1628034550239N00626986EA0217402204 +B1628054550229N00626982EA0217302203 +B1628074550219N00626976EA0217102202 +B1628094550210N00626968EA0217102201 +B1628114550201N00626960EA0217302201 +B1628134550193N00626952EA0217702204 +B1628154550187N00626945EA0218002207 +B1628174550179N00626939EA0218202210 +B1628194550170N00626934EA0218402212 +B1628214550163N00626928EA0218602214 +B1628234550161N00626919EA0218602216 +B1628254550170N00626915EA0218602216 +B1628274550179N00626927EA0218402216 +B1628294550185N00626941EA0218402216 +B1628314550192N00626948EA0218202216 +B1628334550199N00626946EA0217802214 +B1628354550201N00626933EA0217502211 +B1628374550194N00626921EA0217302209 +B1628394550184N00626913EA0217202207 +B1628414550172N00626906EA0217202206 +B1628434550162N00626898EA0217302207 +B1628454550152N00626888EA0217202206 +B1628474550142N00626878EA0217002204 +B1628494550134N00626868EA0216902203 +B1628514550128N00626857EA0216802203 +B1628534550122N00626847EA0216702202 +B1628554550117N00626837EA0216502201 +B1628574550111N00626825EA0216402199 +B1628594550105N00626813EA0216302198 +B1629014550099N00626802EA0216302198 +B1629034550094N00626792EA0216402199 +B1629054550088N00626783EA0216602201 +B1629074550081N00626776EA0216802203 +B1629094550075N00626771EA0216902204 +B1629114550069N00626763EA0217102206 +B1629134550062N00626756EA0217302207 +B1629154550054N00626750EA0217402210 +B1629174550046N00626744EA0217502211 +B1629194550039N00626738EA0217702212 +B1629214550032N00626729EA0218002214 +B1629234550025N00626722EA0218402218 +B1629254550019N00626716EA0218802222 +B1629274550017N00626707EA0219202226 +B1629294550017N00626699EA0219502230 +B1629314550019N00626692EA0219702233 +B1629334550028N00626691EA0219702235 +B1629354550040N00626704EA0220102237 +B1629374550042N00626722EA0220502241 +B1629394550042N00626739EA0220602243 +B1629414550050N00626750EA0220402244 +B1629434550061N00626747EA0220202243 +B1629454550063N00626734EA0220102243 +B1629474550050N00626725EA0220102243 +B1629494550037N00626724EA0220402244 +B1629514550027N00626724EA0220802247 +B1629534550018N00626722EA0220902248 +B1629554550010N00626719EA0220902248 +B1629574550002N00626715EA0221002248 +B1629594549994N00626711EA0221202250 +B1630014549986N00626708EA0221402251 +B1630034549977N00626707EA0221502253 +B1630054549967N00626705EA0221602254 +B1630074549958N00626702EA0221702255 +B1630094549949N00626698EA0221902256 +B1630114549941N00626691EA0222002257 +B1630134549932N00626684EA0222202259 +B1630154549924N00626676EA0222702262 +B1630174549917N00626668EA0223002266 +B1630194549912N00626661EA0223202267 +B1630214549911N00626652EA0223102268 +B1630234549920N00626648EA0223102269 +B1630254549930N00626660EA0223102269 +B1630274549937N00626675EA0223202271 +B1630294549944N00626686EA0223402272 +B1630314549951N00626695EA0223502272 +B1630334549958N00626702EA0223402272 +B1630354549966N00626708EA0223402271 +B1630374549974N00626714EA0223402271 +B1630394549982N00626718EA0223402270 +B1630414549990N00626722EA0223402271 +B1630434549998N00626726EA0223402270 +B1630454550006N00626729EA0223302270 +B1630474550013N00626731EA0223102268 +B1630494550017N00626727EA0222802265 +B1630514550014N00626715EA0222502262 +B1630534550004N00626708EA0222502260 +B1630554549992N00626708EA0222702260 +B1630574549980N00626710EA0222702260 +B1630594549970N00626709EA0222802261 +B1631014549960N00626707EA0222902263 +B1631034549951N00626705EA0222802263 +B1631054549943N00626700EA0222802263 +B1631074549935N00626692EA0222802264 +B1631094549930N00626683EA0222702263 +B1631114549925N00626672EA0222602262 +B1631134549921N00626662EA0222502262 +B1631154549917N00626651EA0222502261 +B1631174549912N00626640EA0222502261 +B1631194549908N00626629EA0222702262 +B1631214549904N00626619EA0222602262 +B1631234549901N00626607EA0222602261 +B1631254549897N00626594EA0222502260 +B1631274549893N00626579EA0222502260 +B1631294549887N00626566EA0222602261 +B1631314549882N00626554EA0222702262 +B1631334549877N00626540EA0222802263 +B1631354549872N00626528EA0223002265 +B1631374549865N00626518EA0223202266 +B1631394549855N00626510EA0223302268 +B1631414549849N00626499EA0223402269 +B1631434549853N00626491EA0223602271 +B1631454549859N00626492EA0223802273 +B1631474549866N00626500EA0223902275 +B1631494549869N00626514EA0224102276 +B1631514549871N00626531EA0224302279 +B1631534549874N00626546EA0224602281 +B1631554549882N00626548EA0224702283 +B1631574549888N00626542EA0225102286 +B1631594549889N00626531EA0225502291 +B1632014549890N00626520EA0225902295 +B1632034549894N00626513EA0226102297 +B1632054549890N00626503EA0226002299 +B1632074549877N00626503EA0225802301 +B1632094549865N00626520EA0225702301 +B1632114549867N00626542EA0225602300 +B1632134549871N00626563EA0226102303 +B1632154549875N00626578EA0226602307 +B1632174549880N00626591EA0226802309 +B1632194549885N00626603EA0226902309 +B1632214549893N00626606EA0226702309 +B1632234549897N00626597EA0226502306 +B1632254549896N00626584EA0226502305 +B1632274549887N00626573EA0226602305 +B1632294549880N00626563EA0226702305 +B1632314549876N00626551EA0226702305 +B1632334549872N00626540EA0226902305 +B1632354549865N00626531EA0227002306 +B1632374549860N00626521EA0227002306 +B1632394549854N00626511EA0227202307 +B1632414549846N00626504EA0227102307 +B1632434549837N00626499EA0226802306 +B1632454549830N00626489EA0226202303 +B1632474549829N00626477EA0225802299 +B1632494549839N00626474EA0225602296 +B1632514549847N00626482EA0225502293 +B1632534549853N00626497EA0225602293 +B1632554549858N00626513EA0225702293 +B1632574549862N00626530EA0226002294 +B1632594549865N00626544EA0226402297 +B1633014549869N00626554EA0226702299 +B1633034549875N00626561EA0226802301 +B1633054549881N00626555EA0226702301 +B1633074549879N00626544EA0226902302 +B1633094549870N00626537EA0227102304 +B1633114549859N00626533EA0227402306 +B1633134549850N00626526EA0227702310 +B1633154549844N00626518EA0227602311 +B1633174549842N00626508EA0227202311 +B1633194549851N00626508EA0226902308 +B1633214549860N00626523EA0226802307 +B1633234549863N00626540EA0226902307 +B1633254549865N00626555EA0226802305 +B1633274549870N00626569EA0226702303 +B1633294549875N00626583EA0226702303 +B1633314549882N00626597EA0226802303 +B1633334549889N00626605EA0227002304 +B1633354549895N00626600EA0227002304 +B1633374549895N00626588EA0227002305 +B1633394549893N00626577EA0227102305 +B1633414549891N00626566EA0227102305 +B1633434549887N00626555EA0227102305 +B1633454549883N00626543EA0227202306 +B1633474549878N00626532EA0227102307 +B1633494549872N00626522EA0227002306 +B1633514549861N00626514EA0227002306 +B1633534549850N00626508EA0227002305 +B1633554549840N00626502EA0226902305 +B1633574549829N00626495EA0226802303 +B1633594549824N00626485EA0226502301 +B1634014549824N00626474EA0226302299 +B1634034549830N00626469EA0226302298 +B1634054549839N00626477EA0226302298 +B1634074549845N00626490EA0226202297 +B1634094549850N00626507EA0226202297 +B1634114549855N00626523EA0226102296 +B1634134549860N00626538EA0226102296 +B1634154549865N00626554EA0226002295 +B1634174549870N00626568EA0225902295 +B1634194549876N00626582EA0226002295 +B1634214549882N00626596EA0226302296 +B1634234549886N00626609EA0226702300 +B1634254549890N00626619EA0226802302 +B1634274549897N00626625EA0226702302 +B1634294549906N00626621EA0226402301 +B1634314549906N00626607EA0226402300 +B1634334549896N00626596EA0226502300 +B1634354549885N00626590EA0226802302 +B1634374549874N00626586EA0227002303 +B1634394549864N00626581EA0226902303 +B1634414549857N00626572EA0226802303 +B1634434549856N00626561EA0226802302 +B1634454549863N00626559EA0226702301 +B1634474549871N00626569EA0226702301 +B1634494549877N00626585EA0226902303 +B1634514549880N00626601EA0227102305 +B1634534549884N00626616EA0227402308 +B1634554549890N00626631EA0227702311 +B1634574549895N00626645EA0228002314 +B1634594549902N00626654EA0228002316 +B1635014549909N00626651EA0227702316 +B1635034549909N00626637EA0227602316 +B1635054549899N00626627EA0227702316 +B1635074549887N00626624EA0228102318 +B1635094549876N00626623EA0228102319 +B1635114549868N00626619EA0227802319 +B1635134549863N00626609EA0227702317 +B1635154549864N00626601EA0227802316 +B1635174549870N00626599EA0227802316 +B1635194549879N00626604EA0227902316 +B1635214549888N00626612EA0228102317 +B1635234549895N00626620EA0228302319 +B1635254549902N00626623EA0228302320 +B1635274549907N00626619EA0228302319 +B1635294549910N00626609EA0228302319 +B1635314549913N00626599EA0228202319 +B1635334549916N00626590EA0228202318 +B1635354549918N00626579EA0228102316 +B1635374549921N00626568EA0228002316 +B1635394549925N00626556EA0228002315 +B1635414549927N00626544EA0227802314 +B1635434549925N00626532EA0227702313 +B1635454549913N00626525EA0227302311 +B1635474549898N00626529EA0227102310 +B1635494549887N00626543EA0227002308 +B1635514549881N00626562EA0226802306 +B1635534549880N00626583EA0226802305 +B1635554549884N00626603EA0226902305 +B1635574549890N00626619EA0227102307 +B1635594549897N00626631EA0227302308 +B1636014549905N00626640EA0227302309 +B1636034549913N00626648EA0227402310 +B1636054549921N00626657EA0227502311 +B1636074549928N00626665EA0227702313 +B1636094549934N00626672EA0227702314 +B1636114549940N00626678EA0227602313 +B1636134549947N00626690EA0227502312 +B1636154549953N00626709EA0227402311 +B1636174549955N00626730EA0227302310 +B1636194549957N00626752EA0227202308 +B1636214549957N00626776EA0226902306 +B1636234549956N00626802EA0226802304 +B1636254549956N00626828EA0226702302 +B1636274549955N00626854EA0226802302 +B1636294549954N00626880EA0226802302 +B1636314549952N00626907EA0226802301 +B1636334549949N00626935EA0226602300 +B1636354549946N00626961EA0226202298 +B1636374549941N00626987EA0225402295 +B1636394549934N00627014EA0225002292 +B1636414549929N00627035EA0224602287 +B1636434549926N00627056EA0223502282 +B1636454549923N00627081EA0222402275 +B1636474549920N00627105EA0221702268 +B1636494549919N00627126EA0220802259 +B1636514549917N00627147EA0219802247 +B1636534549918N00627169EA0219002237 +B1636554549920N00627192EA0218202228 +B1636574549920N00627213EA0217402219 +B1636594549921N00627233EA0216802211 +B1637014549923N00627252EA0216102203 +B1637034549925N00627271EA0215302193 +B1637054549927N00627292EA0214802186 +B1637074549930N00627309EA0214502179 +B1637094549933N00627325EA0213802171 +B1637114549937N00627345EA0213402164 +B1637134549941N00627365EA0213102159 +B1637154549944N00627384EA0212602154 +B1637174549946N00627403EA0212102150 +B1637194549947N00627420EA0211602145 +B1637214549947N00627439EA0211102139 +B1637234549947N00627458EA0211002135 +B1637254549947N00627474EA0210802133 +B1637274549948N00627490EA0210502129 +B1637294549949N00627509EA0210202127 +B1637314549950N00627526EA0210202126 +B1637334549954N00627542EA0210002125 +B1637354549957N00627558EA0209602122 +B1637374549961N00627576EA0209402120 +B1637394549964N00627592EA0209102117 +B1637414549967N00627609EA0208702114 +B1637434549970N00627626EA0208302111 +B1637454549973N00627641EA0208002108 +B1637474549977N00627656EA0207502103 +B1637494549982N00627671EA0207202100 +B1637514549986N00627685EA0206902097 +B1637534549989N00627699EA0206502093 +B1637554549992N00627715EA0206002089 +B1637574549997N00627732EA0205702086 +B1637594550000N00627748EA0205502083 +B1638014550002N00627765EA0205102080 +B1638034550007N00627780EA0204802076 +B1638054550011N00627796EA0204302072 +B1638074550014N00627813EA0204002068 +B1638094550018N00627830EA0203902065 +B1638114550022N00627844EA0203702063 +B1638134550024N00627858EA0203402060 +B1638154550027N00627873EA0203102057 +B1638174550032N00627887EA0202902055 +B1638194550036N00627899EA0202502052 +B1638214550041N00627913EA0202102048 +B1638234550045N00627929EA0201902046 +B1638254550047N00627945EA0201802044 +B1638274550050N00627959EA0201502042 +B1638294550054N00627974EA0201102038 +B1638314550058N00627990EA0201002037 +B1638334550062N00628005EA0201002036 +B1638354550063N00628021EA0200702034 +B1638374550066N00628037EA0200402032 +B1638394550071N00628054EA0200402031 +B1638414550073N00628069EA0200302030 +B1638434550074N00628085EA0199902028 +B1638454550076N00628102EA0199702026 +B1638474550079N00628118EA0199702025 +B1638494550080N00628132EA0199702024 +B1638514550083N00628147EA0199402021 +B1638534550086N00628163EA0199102019 +B1638554550087N00628181EA0198902017 +B1638574550089N00628199EA0198502013 +B1638594550091N00628217EA0198202011 +B1639014550093N00628234EA0198002009 +B1639034550095N00628250EA0197802006 +B1639054550096N00628267EA0197402003 +B1639074550098N00628285EA0197202000 +B1639094550101N00628302EA0197001998 +B1639114550103N00628318EA0196701996 +B1639134550106N00628336EA0196501993 +B1639154550108N00628354EA0196301991 +B1639174550110N00628370EA0196001988 +B1639194550111N00628388EA0195601984 +B1639214550113N00628407EA0195201981 +B1639234550115N00628425EA0195001978 +B1639254550118N00628443EA0194701976 +B1639274550120N00628461EA0194401973 +B1639294550120N00628481EA0194301971 +B1639314550121N00628500EA0194101969 +B1639334550123N00628519EA0193901967 +B1639354550125N00628539EA0193701965 +B1639374550129N00628557EA0193801965 +B1639394550134N00628573EA0193901966 +B1639414550139N00628589EA0194001968 +B1639434550145N00628604EA0194101969 +B1639454550151N00628618EA0194301970 +B1639474550156N00628633EA0194401972 +B1639494550161N00628647EA0194601974 +B1639514550168N00628657EA0194601975 +B1639534550178N00628653EA0194301975 +B1639554550184N00628642EA0194301974 +B1639574550182N00628630EA0194501975 +B1639594550172N00628622EA0194501976 +B1640014550160N00628626EA0194601977 +B1640034550151N00628638EA0194701978 +B1640054550146N00628656EA0194901980 +B1640074550147N00628674EA0195001981 +B1640094550154N00628689EA0195101982 +B1640114550165N00628695EA0195201983 +B1640134550175N00628689EA0195201984 +B1640154550179N00628678EA0195201984 +B1640174550174N00628666EA0195301984 +B1640194550162N00628664EA0195301984 +B1640214550150N00628675EA0195301984 +B1640234550143N00628691EA0195501985 +B1640254550138N00628708EA0195501985 +B1640274550134N00628727EA0195501985 +B1640294550130N00628749EA0195801987 +B1640314550128N00628768EA0196001989 +B1640334550127N00628783EA0196001989 +B1640354550125N00628801EA0196001990 +B1640374550122N00628817EA0196301992 +B1640394550117N00628829EA0196301994 +B1640414550113N00628841EA0196401994 +B1640434550108N00628855EA0196401995 +B1640454550105N00628868EA0196701997 +B1640474550104N00628882EA0196801998 +B1640494550113N00628891EA0196701998 +B1640514550126N00628890EA0196701998 +B1640534550134N00628877EA0196801999 +B1640554550132N00628862EA0196902000 +B1640574550122N00628854EA0196902000 +B1640594550111N00628860EA0197002000 +B1641014550104N00628872EA0197302002 +B1641034550102N00628885EA0197502005 +B1641054550102N00628897EA0197502006 +B1641074550105N00628911EA0197402005 +B1641094550116N00628919EA0197402004 +B1641114550129N00628916EA0197502004 +B1641134550138N00628904EA0197602006 +B1641154550140N00628889EA0197702007 +B1641174550135N00628876EA0197702007 +B1641194550123N00628873EA0197702007 +B1641214550112N00628882EA0197802009 +B1641234550109N00628898EA0198002010 +B1641254550112N00628913EA0198002011 +B1641274550122N00628923EA0198102011 +B1641294550135N00628921EA0198202012 +B1641314550144N00628909EA0198202013 +B1641334550146N00628894EA0198402014 +B1641354550138N00628882EA0198602016 +B1641374550127N00628883EA0198802018 +B1641394550120N00628895EA0199002020 +B1641414550121N00628911EA0199002022 +B1641434550130N00628923EA0199002022 +B1641454550144N00628925EA0199102023 +B1641474550155N00628917EA0199202024 +B1641494550160N00628903EA0199402026 +B1641514550160N00628889EA0199502027 +B1641534550156N00628875EA0199502028 +B1641554550147N00628866EA0199502029 +B1641574550134N00628868EA0199602029 +B1641594550123N00628876EA0199702029 +B1642014550114N00628888EA0200002032 +B1642034550110N00628901EA0200302035 +B1642054550107N00628913EA0200402036 +B1642074550107N00628927EA0200302036 +B1642094550114N00628942EA0200202036 +B1642114550129N00628946EA0200202036 +B1642134550139N00628937EA0200202036 +B1642154550143N00628923EA0200302036 +B1642174550139N00628910EA0200502038 +B1642194550129N00628902EA0200702040 +B1642214550119N00628900EA0200902042 +B1642234550109N00628901EA0201102045 +B1642254550100N00628904EA0201302047 +B1642274550092N00628908EA0201202048 +B1642294550086N00628919EA0201102047 +B1642314550084N00628935EA0201102047 +B1642334550094N00628948EA0200902045 +B1642354550105N00628951EA0200802043 +B1642374550116N00628943EA0200702041 +B1642394550120N00628928EA0200702041 +B1642414550113N00628916EA0200802041 +B1642434550104N00628910EA0201002043 +B1642454550096N00628908EA0201102044 +B1642474550086N00628910EA0201102044 +B1642494550078N00628920EA0201202044 +B1642514550074N00628934EA0201102044 +B1642534550073N00628949EA0201002043 +B1642554550071N00628966EA0200902042 +B1642574550069N00628984EA0201002043 +B1642594550067N00628999EA0200902043 +B1643014550064N00629015EA0200602041 +B1643034550062N00629032EA0200502039 +B1643054550060N00629049EA0200402039 +B1643074550057N00629065EA0200202036 +B1643094550053N00629082EA0200102034 +B1643114550049N00629099EA0200102034 +B1643134550045N00629113EA0200002033 +B1643154550041N00629128EA0199702030 +B1643174550038N00629145EA0199502028 +B1643194550036N00629160EA0199402027 +B1643214550034N00629175EA0199202025 +B1643234550032N00629191EA0199102023 +B1643254550030N00629208EA0199002022 +B1643274550027N00629225EA0199102022 +B1643294550024N00629241EA0199102022 +B1643314550020N00629257EA0199002021 +B1643334550016N00629274EA0199202022 +B1643354550014N00629290EA0199702025 +B1643374550012N00629303EA0200002028 +B1643394550008N00629314EA0200202031 +B1643414550002N00629320EA0200102032 +B1643434549993N00629310EA0199802030 +B1643454549990N00629292EA0199702029 +B1643474549997N00629276EA0199702029 +B1643494550010N00629272EA0199802029 +B1643514550022N00629280EA0199802029 +B1643534550030N00629294EA0200002030 +B1643554550034N00629310EA0200402033 +B1643574550037N00629324EA0200702037 +B1643594550040N00629337EA0200902039 +B1644014550041N00629352EA0201102041 +B1644034550042N00629369EA0201402044 +B1644054550042N00629383EA0201702047 +B1644074550048N00629394EA0201702049 +B1644094550061N00629396EA0201702050 +B1644114550070N00629386EA0201802051 +B1644134550073N00629370EA0201702051 +B1644154550068N00629356EA0201802051 +B1644174550058N00629352EA0201802051 +B1644194550047N00629359EA0201902052 +B1644214550040N00629371EA0202302054 +B1644234550035N00629385EA0202702058 +B1644254550030N00629398EA0203002061 +B1644274550026N00629410EA0203302064 +B1644294550021N00629422EA0203602067 +B1644314550016N00629432EA0204002071 +B1644334550011N00629442EA0204302074 +B1644354550007N00629454EA0204702078 +B1644374550004N00629464EA0205002082 +B1644394550003N00629475EA0205202085 +B1644414550007N00629488EA0205302086 +B1644434550019N00629494EA0205502088 +B1644454550030N00629486EA0205602089 +B1644474550035N00629472EA0205802091 +B1644494550031N00629457EA0205902092 +B1644514550024N00629446EA0206202095 +B1644534550016N00629438EA0206502098 +B1644554550007N00629434EA0206802101 +B1644574549996N00629434EA0207202104 +B1644594549986N00629434EA0207602108 +B1645014549976N00629435EA0207902112 +B1645034549967N00629439EA0208302116 +B1645054549961N00629454EA0208502118 +B1645074549962N00629470EA0208602120 +B1645094549971N00629483EA0208802122 +B1645114549984N00629487EA0209102125 +B1645134549993N00629477EA0209202127 +B1645154549992N00629463EA0209402128 +B1645174549982N00629455EA0209602130 +B1645194549972N00629458EA0209802132 +B1645214549963N00629464EA0210002134 +B1645234549957N00629474EA0210102135 +B1645254549953N00629488EA0210102135 +B1645274549957N00629504EA0210202136 +B1645294549969N00629516EA0210402138 +B1645314549983N00629515EA0210602140 +B1645334549991N00629504EA0210702141 +B1645354549992N00629490EA0210802143 +B1645374549988N00629480EA0210902143 +B1645394549981N00629473EA0211002145 +B1645414549974N00629471EA0211102145 +B1645434549965N00629472EA0211202146 +B1645454549956N00629476EA0211202147 +B1645474549948N00629482EA0211102146 +B1645494549940N00629492EA0210802144 +B1645514549935N00629508EA0210902143 +B1645534549930N00629528EA0211302144 +B1645554549927N00629545EA0211402146 +B1645574549925N00629560EA0211102145 +B1645594549923N00629578EA0210702143 +B1646014549919N00629597EA0210502141 +B1646034549916N00629614EA0210502141 +B1646054549912N00629630EA0210302139 +B1646074549908N00629649EA0210102136 +B1646094549905N00629669EA0210202136 +B1646114549902N00629687EA0210102135 +B1646134549899N00629706EA0209902133 +B1646154549896N00629724EA0209902132 +B1646174549894N00629743EA0209802131 +B1646194549892N00629763EA0209802130 +B1646214549888N00629783EA0209902131 +B1646234549885N00629802EA0210102132 +B1646254549880N00629817EA0210002133 +B1646274549875N00629833EA0209802132 +B1646294549871N00629853EA0209602130 +B1646314549866N00629870EA0209502129 +B1646334549860N00629885EA0209202127 +B1646354549855N00629901EA0208702123 +B1646374549850N00629919EA0208502120 +B1646394549847N00629936EA0208002116 +B1646414549843N00629953EA0207602111 +B1646434549839N00629971EA0207402107 +B1646454549834N00629987EA0207202105 +B1646474549830N00630002EA0206802101 +B1646494549828N00630020EA0206402097 +B1646514549824N00630037EA0206002093 +B1646534549821N00630054EA0205702090 +B1646554549818N00630072EA0205402086 +B1646574549815N00630089EA0205102083 +B1646594549813N00630107EA0204802079 +B1647014549810N00630125EA0204302075 +B1647034549807N00630143EA0204102072 +B1647054549804N00630160EA0203802069 +B1647074549800N00630177EA0203402066 +B1647094549797N00630194EA0203102062 +B1647114549794N00630211EA0202902060 +B1647134549791N00630227EA0202702058 +B1647154549789N00630243EA0202402054 +B1647174549786N00630260EA0202202052 +B1647194549784N00630277EA0202102051 +B1647214549782N00630293EA0202002049 +B1647234549779N00630310EA0201902048 +B1647254549776N00630326EA0201902048 +B1647274549772N00630343EA0201802047 +B1647294549769N00630359EA0201602045 +B1647314549766N00630376EA0201402044 +B1647334549763N00630394EA0201402043 +B1647354549760N00630410EA0201202042 +B1647374549756N00630427EA0201102040 +B1647394549751N00630444EA0201002039 +B1647414549746N00630461EA0201002039 +B1647434549742N00630476EA0200902038 +B1647454549738N00630492EA0200802037 +B1647474549734N00630509EA0200602035 +B1647494549731N00630527EA0200502035 +B1647514549728N00630545EA0200502034 +B1647534549725N00630561EA0200402033 +B1647554549720N00630579EA0200202031 +B1647574549715N00630597EA0200102031 +B1647594549712N00630614EA0200102030 +B1648014549708N00630632EA0200002029 +B1648034549704N00630649EA0200102029 +B1648054549701N00630665EA0200002029 +B1648074549698N00630681EA0199802027 +B1648094549695N00630700EA0199502025 +B1648114549692N00630718EA0199502025 +B1648134549689N00630734EA0199502024 +B1648154549686N00630751EA0199302022 +B1648174549683N00630768EA0199202021 +B1648194549681N00630786EA0199102020 +B1648214549680N00630804EA0199002019 +B1648234549676N00630822EA0198802017 +B1648254549673N00630841EA0198702016 +B1648274549670N00630860EA0198602015 +B1648294549666N00630879EA0198602014 +B1648314549663N00630896EA0198302012 +B1648334549659N00630914EA0197802008 +B1648354549655N00630932EA0197202004 +B1648374549651N00630950EA0196801999 +B1648394549646N00630969EA0196401994 +B1648414549641N00630987EA0196001990 +B1648434549636N00631005EA0195801987 +B1648454549633N00631023EA0195501984 +B1648474549630N00631042EA0195101981 +B1648494549626N00631061EA0194801977 +B1648514549621N00631079EA0194401974 +B1648534549616N00631096EA0194001970 +B1648554549611N00631113EA0193501964 +B1648574549607N00631132EA0192901959 +B1648594549603N00631150EA0192401954 +B1649014549599N00631167EA0191901948 +B1649034549595N00631185EA0191301942 +B1649054549591N00631204EA0190801937 +B1649074549588N00631223EA0190401932 +B1649094549584N00631241EA0190001928 +B1649114549579N00631259EA0189701924 +B1649134549574N00631277EA0189201920 +B1649154549568N00631294EA0188901916 +B1649174549561N00631309EA0188501912 +B1649194549555N00631326EA0188101908 +B1649214549549N00631343EA0187601904 +B1649234549543N00631361EA0187301900 +B1649254549538N00631379EA0186901896 +B1649274549533N00631397EA0186601892 +B1649294549531N00631416EA0186201889 +B1649314549528N00631434EA0185801885 +B1649334549525N00631453EA0185401881 +B1649354549522N00631473EA0185201878 +B1649374549519N00631489EA0185001875 +B1649394549516N00631505EA0184601871 +B1649414549513N00631524EA0184401869 +B1649434549511N00631542EA0184301867 +B1649454549509N00631558EA0183901864 +B1649474549506N00631576EA0183601861 +B1649494549504N00631594EA0183301859 +B1649514549501N00631611EA0183101856 +B1649534549497N00631627EA0182701853 +B1649554549493N00631645EA0182301849 +B1649574549489N00631662EA0182001846 +B1649594549486N00631679EA0181801844 +B1650014549482N00631695EA0181401840 +B1650034549478N00631712EA0181001836 +B1650054549475N00631731EA0180801834 +B1650074549472N00631748EA0180701832 +B1650094549469N00631763EA0180301829 +B1650114549466N00631780EA0180001826 +B1650134549462N00631797EA0179901824 +B1650154549459N00631813EA0179701822 +B1650174549455N00631830EA0179401819 +B1650194549450N00631847EA0179101817 +B1650214549445N00631863EA0178701813 +B1650234549439N00631880EA0178301809 +B1650254549432N00631898EA0178001805 +B1650274549426N00631916EA0178001802 +B1650294549421N00631930EA0177801801 +B1650314549415N00631945EA0177401797 +B1650334549408N00631961EA0177101795 +B1650354549401N00631977EA0177001793 +B1650374549395N00631991EA0176701790 +B1650394549389N00632008EA0176301787 +B1650414549383N00632024EA0176201785 +B1650434549378N00632040EA0176001784 +B1650454549372N00632056EA0175701781 +B1650474549367N00632073EA0175601780 +B1650494549362N00632089EA0175401778 +B1650514549356N00632105EA0175201776 +B1650534549350N00632121EA0175001774 +B1650554549345N00632138EA0174801772 +B1650574549339N00632153EA0174501769 +B1650594549334N00632169EA0174101766 +B1651014549329N00632186EA0173801762 +B1651034549323N00632202EA0173501759 +B1651054549318N00632219EA0173201757 +B1651074549312N00632235EA0172901754 +B1651094549307N00632252EA0172501750 +B1651114549302N00632270EA0172201746 +B1651134549297N00632289EA0172001743 +B1651154549292N00632308EA0171801742 +B1651174549287N00632326EA0171801741 +B1651194549282N00632343EA0171701740 +B1651214549276N00632361EA0171501738 +B1651234549271N00632379EA0171501737 +B1651254549267N00632397EA0171401737 +B1651274549262N00632414EA0171301735 +B1651294549258N00632433EA0171101734 +B1651314549254N00632451EA0171001733 +B1651334549250N00632468EA0170801731 +B1651354549246N00632486EA0170601729 +B1651374549241N00632503EA0170401728 +B1651394549237N00632521EA0170301726 +B1651414549232N00632539EA0170101724 +B1651434549228N00632556EA0169901722 +B1651454549224N00632574EA0169701720 +B1651474549220N00632592EA0169501718 +B1651494549216N00632610EA0169301716 +B1651514549211N00632628EA0169001714 +B1651534549207N00632646EA0168901712 +B1651554549203N00632663EA0168501709 +B1651574549199N00632681EA0168201706 +B1651594549195N00632698EA0168001703 +B1652014549191N00632716EA0167801701 +B1652034549186N00632734EA0167501698 +B1652054549180N00632751EA0167301696 +B1652074549175N00632767EA0167101693 +B1652094549170N00632785EA0166701690 +B1652114549164N00632802EA0166501688 +B1652134549158N00632818EA0166301686 +B1652154549152N00632834EA0166101683 +B1652174549146N00632851EA0165801681 +B1652194549140N00632868EA0165501678 +B1652214549135N00632885EA0165301675 +B1652234549130N00632903EA0165001673 +B1652254549125N00632921EA0164701670 +B1652274549120N00632938EA0164301666 +B1652294549115N00632957EA0164001662 +B1652314549111N00632976EA0163801660 +B1652334549106N00632995EA0163701658 +B1652354549102N00633014EA0163301656 +B1652374549099N00633035EA0163101653 +B1652394549094N00633056EA0163001652 +B1652414549090N00633076EA0162901650 +B1652434549085N00633096EA0162701649 +B1652454549080N00633115EA0162601647 +B1652474549074N00633133EA0162301645 +B1652494549067N00633151EA0162101642 +B1652514549061N00633170EA0161801640 +B1652534549056N00633188EA0161401637 +B1652554549050N00633206EA0161101633 +B1652574549044N00633225EA0160801630 +B1652594549037N00633242EA0160401627 +B1653014549028N00633259EA0160101623 +B1653034549020N00633277EA0160001621 +B1653054549011N00633292EA0159801619 +B1653074549003N00633306EA0159501616 +B1653094548994N00633323EA0159301614 +B1653114548986N00633341EA0159301613 +B1653134548980N00633358EA0159201611 +B1653154548975N00633377EA0158901610 +B1653174548968N00633398EA0159001610 +B1653194548961N00633415EA0159401612 +B1653214548954N00633428EA0159601615 +B1653234548947N00633440EA0159601615 +B1653254548940N00633454EA0159301615 +B1653274548931N00633469EA0159101613 +B1653294548923N00633483EA0159001612 +B1653314548917N00633500EA0158701610 +B1653334548915N00633520EA0158501608 +B1653354548916N00633542EA0158201605 +B1653374548917N00633564EA0158001603 +B1653394548919N00633586EA0157801600 +B1653414548921N00633609EA0157701599 +B1653434548922N00633630EA0157601598 +B1653454548924N00633651EA0157501596 +B1653474548927N00633675EA0157501595 +B1653494548929N00633697EA0157901596 +B1653514548930N00633714EA0158201598 +B1653534548932N00633730EA0158301599 +B1653554548939N00633735EA0158201600 +B1653574548947N00633731EA0158301602 +B1653594548946N00633720EA0158401603 +B1654014548938N00633709EA0158501604 +B1654034548925N00633706EA0158701606 +B1654054548914N00633714EA0158601607 +B1654074548903N00633730EA0158601607 +B1654094548897N00633749EA0158901609 +B1654114548896N00633765EA0159301613 +B1654134548898N00633778EA0159701617 +B1654154548901N00633790EA0160101621 +B1654174548904N00633800EA0160301623 +B1654194548912N00633798EA0160201625 +B1654214548914N00633786EA0160401627 +B1654234548902N00633777EA0160501628 +B1654254548885N00633780EA0160901631 +B1654274548874N00633791EA0161401636 +B1654294548870N00633807EA0161601639 +B1654314548875N00633821EA0162001642 +B1654334548882N00633822EA0162101645 +B1654354548886N00633811EA0162301647 +B1654374548883N00633797EA0162701650 +B1654394548870N00633789EA0163001654 +B1654414548856N00633793EA0163401657 +B1654434548845N00633808EA0163601660 +B1654454548842N00633824EA0163901664 +B1654474548848N00633834EA0164101666 +B1654494548855N00633835EA0164401669 +B1654514548859N00633828EA0164701672 +B1654534548859N00633818EA0165001675 +B1654554548856N00633807EA0165301679 +B1654574548851N00633799EA0165301681 +B1654594548843N00633791EA0165401682 +B1655014548838N00633781EA0165301682 +B1655034548844N00633774EA0165301682 +B1655054548852N00633781EA0165501682 +B1655074548857N00633795EA0165501682 +B1655094548858N00633813EA0165501681 +B1655114548860N00633832EA0165501681 +B1655134548865N00633847EA0165501680 +B1655154548871N00633862EA0165501680 +B1655174548875N00633879EA0165701682 +B1655194548879N00633893EA0166001684 +B1655214548885N00633905EA0166301686 +B1655234548891N00633915EA0166501689 +B1655254548897N00633926EA0166801692 +B1655274548901N00633938EA0167001695 +B1655294548907N00633950EA0167101697 +B1655314548917N00633949EA0167301698 +B1655334548924N00633937EA0167701701 +B1655354548920N00633924EA0168001705 +B1655374548908N00633920EA0168301707 +B1655394548896N00633930EA0168701710 +B1655414548891N00633947EA0169101714 +B1655434548892N00633962EA0169401718 +B1655454548899N00633974EA0169701721 +B1655474548910N00633974EA0170101725 +B1655494548916N00633964EA0170501729 +B1655514548917N00633951EA0170801733 +B1655534548913N00633939EA0171201737 +B1655554548902N00633934EA0171301740 +B1655574548890N00633941EA0171401742 +B1655594548881N00633956EA0171901746 +B1656014548879N00633972EA0172401750 +B1656034548885N00633983EA0172701753 +B1656054548895N00633992EA0173001756 +B1656074548906N00633996EA0173401760 +B1656094548912N00633987EA0173701764 +B1656114548912N00633971EA0174001767 +B1656134548902N00633962EA0174301770 +B1656154548890N00633970EA0174601773 +B1656174548880N00633983EA0175401778 +B1656194548877N00633998EA0176001784 +B1656214548879N00634013EA0176301788 +B1656234548886N00634028EA0176401791 +B1656254548900N00634035EA0176901795 +B1656274548909N00634029EA0177301800 +B1656294548909N00634017EA0177801805 +B1656314548900N00634008EA0178201809 +B1656334548888N00634012EA0178601814 +B1656354548882N00634027EA0179201819 +B1656374548882N00634044EA0179501824 +B1656394548887N00634060EA0179901828 +B1656414548897N00634067EA0180401832 +B1656434548906N00634063EA0180701836 +B1656454548909N00634051EA0180901839 +B1656474548904N00634039EA0181201842 +B1656494548893N00634035EA0181601845 +B1656514548880N00634040EA0182101850 +B1656534548871N00634052EA0182601855 +B1656554548868N00634069EA0183001859 +B1656574548868N00634088EA0183401863 +B1656594548876N00634101EA0183701866 +B1657014548888N00634101EA0183801869 +B1657034548896N00634090EA0184101872 +B1657054548894N00634076EA0184401875 +B1657074548884N00634066EA0184701878 +B1657094548871N00634069EA0185101882 +B1657114548861N00634081EA0185501886 +B1657134548854N00634097EA0185801889 +B1657154548852N00634115EA0186001892 +B1657174548857N00634129EA0186101893 +B1657194548868N00634137EA0185801892 +B1657214548878N00634134EA0185501889 +B1657234548886N00634121EA0185401887 +B1657254548888N00634107EA0185601887 +B1657274548886N00634093EA0186001889 +B1657294548881N00634079EA0186701893 +B1657314548877N00634067EA0187201899 +B1657334548871N00634056EA0187401902 +B1657354548859N00634052EA0187501904 +B1657374548845N00634058EA0187801907 +B1657394548840N00634071EA0188001910 +B1657414548846N00634083EA0188401914 +B1657434548855N00634082EA0188901919 +B1657454548862N00634070EA0189301924 +B1657474548866N00634057EA0189801930 +B1657494548864N00634044EA0190201934 +B1657514548855N00634031EA0190601938 +B1657534548840N00634030EA0190901942 +B1657554548829N00634042EA0191201945 +B1657574548828N00634055EA0191301946 +B1657594548836N00634064EA0191501947 +B1658014548845N00634065EA0191901950 +B1658034548851N00634057EA0192201953 +B1658054548853N00634043EA0192501955 +B1658074548847N00634029EA0192801957 +B1658094548836N00634020EA0193101960 +B1658114548823N00634018EA0193501964 +B1658134548812N00634025EA0193901967 +B1658154548805N00634037EA0194101970 +B1658174548806N00634051EA0194401973 +B1658194548814N00634060EA0194801977 +B1658214548822N00634054EA0195201981 +B1658234548825N00634042EA0195401984 +B1658254548822N00634028EA0195701986 +B1658274548812N00634016EA0196001989 +B1658294548799N00634012EA0196301992 +B1658314548786N00634015EA0196601995 +B1658334548777N00634025EA0196901998 +B1658354548773N00634040EA0197202001 +B1658374548776N00634052EA0197502004 +B1658394548784N00634056EA0197802007 +B1658414548790N00634051EA0198102010 +B1658434548793N00634038EA0198202012 +B1658454548789N00634024EA0198502014 +B1658474548776N00634013EA0198802016 +B1658494548762N00634012EA0199102020 +B1658514548750N00634018EA0199502024 +B1658534548742N00634030EA0199702027 +B1658554548740N00634043EA0200002029 +B1658574548744N00634054EA0200102030 +B1658594548751N00634057EA0200402033 +B1659014548759N00634049EA0200602035 +B1659034548762N00634035EA0200802037 +B1659054548760N00634020EA0201202040 +B1659074548752N00634008EA0201502042 +B1659094548736N00634004EA0201902046 +B1659114548722N00634009EA0202302051 +B1659134548713N00634020EA0202502056 +B1659154548709N00634034EA0202702058 +B1659174548709N00634048EA0202802060 +B1659194548719N00634058EA0202902062 +B1659214548730N00634060EA0203402065 +B1659234548735N00634053EA0203602069 +B1659254548736N00634039EA0203802071 +B1659274548730N00634022EA0204102074 +B1659294548714N00634010EA0204702077 +B1659314548700N00634012EA0204902081 +B1659334548689N00634023EA0205302084 +B1659354548684N00634038EA0205502088 +B1659374548686N00634052EA0205702090 +B1659394548694N00634058EA0206002093 +B1659414548701N00634056EA0206302096 +B1659434548707N00634048EA0206702100 +B1659454548710N00634036EA0207102104 +B1659474548712N00634025EA0207502108 +B1659494548715N00634013EA0207902112 +B1659514548715N00634000EA0208302115 +B1659534548709N00633989EA0208402119 +B1659554548694N00633988EA0208602122 +B1659574548683N00633998EA0208902125 +B1659594548678N00634013EA0209402128 +B1700014548681N00634026EA0209702131 +B1700034548687N00634034EA0210102135 +B1700054548696N00634038EA0210602139 +B1700074548705N00634035EA0211002144 +B1700094548711N00634026EA0211402148 +B1700114548712N00634013EA0211802152 +B1700134548708N00634000EA0212102156 +B1700154548700N00633993EA0212402159 +B1700174548687N00633995EA0212902163 +B1700194548676N00634006EA0213202167 +B1700214548667N00634019EA0213502170 +B1700234548661N00634033EA0213902173 +B1700254548660N00634050EA0214402177 +B1700274548663N00634065EA0214902182 +B1700294548667N00634075EA0215402187 +B1700314548674N00634079EA0215702191 +B1700334548682N00634071EA0216002195 +B1700354548684N00634060EA0216402199 +B1700374548680N00634048EA0216702202 +B1700394548668N00634044EA0217102205 +B1700414548657N00634049EA0217502209 +B1700434548648N00634062EA0217902214 +B1700454548644N00634077EA0218302218 +B1700474548642N00634091EA0218702222 +B1700494548642N00634101EA0218902225 +B1700514548647N00634106EA0218802226 +B1700534548653N00634106EA0218902226 +B1700554548658N00634100EA0219202227 +B1700574548661N00634089EA0219602229 +B1700594548660N00634078EA0220002233 +B1701014548653N00634068EA0220302236 +B1701034548642N00634063EA0220602239 +B1701054548629N00634066EA0220802241 +B1701074548618N00634075EA0221402245 +B1701094548608N00634088EA0221902250 +B1701114548601N00634100EA0222302255 +B1701134548598N00634111EA0222402258 +B1701154548602N00634121EA0222502259 +B1701174548612N00634121EA0222802262 +B1701194548618N00634113EA0223302265 +B1701214548620N00634100EA0223802270 +B1701234548617N00634087EA0224402275 +B1701254548607N00634078EA0224802280 +B1701274548593N00634083EA0225202285 +B1701294548587N00634099EA0225502290 +B1701314548591N00634112EA0225802294 +B1701334548600N00634118EA0226302299 +B1701354548609N00634117EA0226902305 +B1701374548617N00634112EA0227402311 +B1701394548621N00634103EA0227902316 +B1701414548621N00634091EA0228402321 +B1701434548614N00634081EA0228802325 +B1701454548599N00634079EA0229102329 +B1701474548587N00634089EA0229502332 +B1701494548581N00634104EA0229802336 +B1701514548581N00634120EA0230102339 +B1701534548585N00634135EA0230702344 +B1701554548594N00634141EA0231302350 +B1701574548604N00634136EA0232002355 +B1701594548611N00634127EA0232802363 +B1702014548614N00634116EA0233402370 +B1702034548609N00634102EA0233802376 +B1702054548596N00634094EA0234102381 +B1702074548582N00634101EA0234402384 +B1702094548574N00634117EA0234902389 +B1702114548572N00634135EA0235602394 +B1702134548573N00634151EA0236202400 +B1702154548578N00634164EA0236902407 +B1702174548585N00634172EA0237502414 +B1702194548592N00634174EA0238002418 +B1702214548600N00634167EA0238602424 +B1702234548601N00634150EA0239102429 +B1702254548592N00634140EA0239602434 +B1702274548579N00634144EA0240102440 +B1702294548570N00634156EA0240702445 +B1702314548564N00634172EA0241402452 +B1702334548562N00634189EA0242002458 +B1702354548566N00634202EA0242602465 +B1702374548574N00634204EA0243002469 +B1702394548582N00634198EA0243502473 +B1702414548586N00634190EA0244102479 +B1702434548583N00634178EA0244502484 +B1702454548574N00634167EA0245002489 +B1702474548563N00634163EA0245402494 +B1702494548551N00634167EA0245802498 +B1702514548539N00634176EA0246402504 +B1702534548533N00634190EA0246902508 +B1702554548535N00634205EA0247402513 +B1702574548540N00634216EA0248002519 +B1702594548545N00634222EA0248602525 +B1703014548552N00634219EA0249102531 +B1703034548556N00634207EA0249702537 +B1703054548552N00634192EA0250302543 +B1703074548538N00634187EA0250802548 +B1703094548524N00634193EA0251402555 +B1703114548515N00634209EA0251902561 +B1703134548512N00634226EA0252702568 +B1703154548512N00634238EA0253402575 +B1703174548519N00634242EA0253802580 +B1703194548526N00634235EA0254402585 +B1703214548527N00634221EA0255202591 +B1703234548519N00634208EA0255702597 +B1703254548508N00634202EA0256402603 +B1703274548494N00634205EA0256902610 +B1703294548483N00634216EA0257302614 +B1703314548477N00634234EA0257902619 +B1703334548476N00634251EA0258402625 +B1703354548478N00634266EA0258702629 +B1703374548480N00634281EA0258902633 +B1703394548483N00634297EA0259102635 +B1703414548485N00634313EA0259402638 +B1703434548487N00634329EA0259502639 +B1703454548489N00634345EA0259602640 +B1703474548490N00634362EA0259702641 +B1703494548490N00634378EA0259602641 +B1703514548491N00634394EA0259302640 +B1703534548491N00634414EA0259502639 +B1703554548489N00634434EA0259902639 +B1703574548488N00634452EA0260202642 +B1703594548486N00634468EA0260602644 +B1704014548483N00634487EA0261002647 +B1704034548477N00634503EA0261402651 +B1704054548473N00634518EA0261502654 +B1704074548471N00634535EA0261702655 +B1704094548472N00634551EA0261902658 +B1704114548473N00634567EA0262002660 +B1704134548474N00634583EA0262002661 +B1704154548476N00634601EA0262202663 +B1704174548476N00634617EA0262402665 +B1704194548477N00634632EA0262402665 +B1704214548476N00634650EA0262302664 +B1704234548476N00634669EA0262402665 +B1704254548476N00634687EA0262402666 +B1704274548477N00634704EA0262402666 +B1704294548478N00634723EA0262402666 +B1704314548479N00634741EA0262202665 +B1704334548481N00634758EA0261902663 +B1704354548483N00634778EA0261802662 +B1704374548486N00634796EA0261602660 +B1704394548490N00634812EA0261202657 +B1704414548492N00634831EA0261002653 +B1704434548494N00634852EA0261002652 +B1704454548495N00634870EA0260802650 +B1704474548496N00634888EA0260402647 +B1704494548500N00634908EA0260102643 +B1704514548505N00634927EA0260102641 +B1704534548510N00634945EA0260202640 +B1704554548516N00634962EA0260702641 +B1704574548523N00634977EA0261202644 +B1704594548529N00634992EA0261502648 +B1705014548536N00635007EA0261802650 +B1705034548545N00635025EA0262002654 +B1705054548553N00635042EA0262402658 +B1705074548561N00635058EA0262902662 +B1705094548570N00635072EA0263202666 +B1705114548577N00635086EA0263602671 +B1705134548584N00635101EA0264102675 +B1705154548592N00635116EA0264702681 +B1705174548600N00635131EA0265302687 +B1705194548607N00635147EA0265902694 +B1705214548614N00635163EA0266402699 +B1705234548622N00635180EA0266802704 +B1705254548631N00635197EA0267502710 +B1705274548641N00635212EA0268102717 +B1705294548650N00635226EA0268602723 +B1705314548658N00635239EA0268802729 +B1705334548668N00635251EA0268802733 +B1705354548679N00635265EA0268902735 +B1705374548691N00635278EA0269102737 +B1705394548701N00635289EA0269002738 +B1705414548712N00635303EA0269002738 +B1705434548722N00635317EA0269202739 +B1705454548729N00635331EA0269102740 +B1705474548733N00635346EA0268802739 +B1705494548737N00635364EA0268502736 +B1705514548740N00635384EA0268502734 +B1705534548740N00635403EA0268602733 +B1705554548740N00635420EA0268302731 +B1705574548741N00635437EA0268102729 +B1705594548741N00635455EA0268002727 +B1706014548741N00635472EA0268102726 +B1706034548742N00635486EA0268102726 +B1706054548745N00635499EA0267802725 +B1706074548748N00635514EA0267602722 +B1706094548751N00635530EA0267502721 +B1706114548757N00635542EA0267102718 +B1706134548765N00635554EA0266702713 +B1706154548773N00635566EA0266402709 +B1706174548780N00635579EA0266102706 +B1706194548788N00635592EA0265902703 +B1706214548796N00635605EA0265602700 +B1706234548801N00635620EA0265302696 +B1706254548805N00635636EA0265002693 +B1706274548809N00635652EA0264702690 +B1706294548812N00635668EA0264402687 +B1706314548814N00635685EA0264102684 +B1706334548816N00635701EA0263702680 +B1706354548819N00635718EA0263402677 +B1706374548821N00635735EA0263202674 +B1706394548824N00635751EA0263002672 +B1706414548826N00635767EA0262802669 +B1706434548828N00635783EA0262602667 +B1706454548830N00635800EA0262402665 +B1706474548831N00635817EA0262102663 +B1706494548833N00635834EA0261902661 +B1706514548836N00635850EA0261802659 +B1706534548838N00635866EA0261602657 +B1706554548841N00635881EA0261402655 +B1706574548845N00635896EA0261102652 +B1706594548847N00635912EA0261002650 +B1707014548849N00635927EA0260802648 +B1707034548850N00635942EA0260402645 +B1707054548850N00635959EA0260102641 +B1707074548851N00635975EA0259902639 +B1707094548854N00635991EA0259702637 +B1707114548857N00636006EA0259602636 +B1707134548862N00636021EA0259302633 +B1707154548867N00636035EA0259002631 +B1707174548872N00636050EA0258802628 +B1707194548877N00636065EA0258702627 +B1707214548882N00636080EA0258502625 +B1707234548888N00636095EA0258402623 +B1707254548893N00636111EA0258302622 +B1707274548898N00636126EA0258202621 +B1707294548903N00636141EA0257902619 +B1707314548908N00636156EA0257702616 +B1707334548914N00636172EA0257602615 +B1707354548919N00636188EA0257502614 +B1707374548924N00636203EA0257402613 +B1707394548929N00636218EA0257202611 +B1707414548934N00636234EA0257002609 +B1707434548939N00636249EA0256802607 +B1707454548944N00636264EA0256602605 +B1707474548949N00636280EA0256402603 +B1707494548954N00636296EA0256202601 +B1707514548960N00636311EA0256002599 +B1707534548965N00636326EA0255702597 +B1707554548969N00636342EA0255502594 +B1707574548973N00636359EA0255302592 +B1707594548977N00636374EA0255202591 +B1708014548980N00636390EA0255002589 +B1708034548983N00636406EA0254802587 +B1708054548986N00636422EA0254602585 +B1708074548989N00636438EA0254502583 +B1708094548993N00636454EA0254302582 +B1708114548996N00636470EA0254202580 +B1708134549000N00636486EA0254102579 +B1708154549003N00636503EA0253902577 +B1708174549006N00636519EA0253702575 +B1708194549009N00636536EA0253502573 +B1708214549012N00636553EA0253402572 +B1708234549015N00636570EA0253202570 +B1708254549019N00636586EA0253102569 +B1708274549023N00636602EA0252902567 +B1708294549027N00636618EA0252802566 +B1708314549031N00636635EA0252602564 +B1708334549035N00636651EA0252402562 +B1708354549039N00636667EA0252302561 +B1708374549043N00636683EA0252102559 +B1708394549046N00636698EA0251802557 +B1708414549049N00636715EA0251602554 +B1708434549053N00636733EA0251602552 +B1708454549055N00636750EA0251402551 +B1708474549057N00636766EA0251102549 +B1708494549058N00636783EA0250902547 +B1708514549058N00636801EA0250802545 +B1708534549058N00636817EA0250602543 +B1708554549058N00636833EA0250302540 +B1708574549059N00636849EA0250102537 +B1708594549062N00636866EA0249902535 +B1709014549064N00636882EA0249802533 +B1709034549068N00636898EA0249602531 +B1709054549071N00636914EA0249402530 +B1709074549075N00636930EA0249302528 +B1709094549078N00636946EA0249002526 +B1709114549081N00636962EA0248802523 +B1709134549084N00636979EA0248602522 +B1709154549087N00636995EA0248502520 +B1709174549090N00637012EA0248202518 +B1709194549092N00637029EA0248002516 +B1709214549094N00637046EA0247902514 +B1709234549097N00637062EA0247702513 +B1709254549100N00637079EA0247502511 +B1709274549103N00637096EA0247302508 +B1709294549106N00637113EA0247102506 +B1709314549110N00637129EA0246802504 +B1709334549114N00637145EA0246602502 +B1709354549119N00637162EA0246402499 +B1709374549123N00637179EA0246202497 +B1709394549127N00637195EA0245902495 +B1709414549131N00637213EA0245702493 +B1709434549134N00637230EA0245502490 +B1709454549136N00637248EA0245202488 +B1709474549138N00637265EA0244902485 +B1709494549139N00637283EA0244602483 +B1709514549138N00637301EA0244402480 +B1709534549139N00637318EA0244202478 +B1709554549140N00637336EA0243902475 +B1709574549142N00637353EA0243702473 +B1709594549146N00637370EA0243502470 +B1710014549150N00637387EA0243202468 +B1710034549154N00637404EA0243002466 +B1710054549158N00637420EA0242802463 +B1710074549162N00637437EA0242602462 +B1710094549167N00637453EA0242402459 +B1710114549171N00637470EA0242102456 +B1710134549176N00637487EA0241802454 +B1710154549181N00637503EA0241602451 +B1710174549186N00637520EA0241402449 +B1710194549192N00637536EA0241102447 +B1710214549196N00637552EA0240902444 +B1710234549202N00637568EA0240602441 +B1710254549207N00637585EA0240302438 +B1710274549211N00637602EA0240002436 +B1710294549215N00637619EA0239802433 +B1710314549219N00637635EA0239502430 +B1710334549224N00637652EA0239302428 +B1710354549228N00637669EA0239002425 +B1710374549232N00637686EA0238802423 +B1710394549236N00637702EA0238602421 +B1710414549240N00637719EA0238402419 +B1710434549244N00637735EA0238202417 +B1710454549247N00637751EA0237902414 +B1710474549251N00637767EA0237602411 +B1710494549255N00637783EA0237402409 +B1710514549258N00637799EA0237102407 +B1710534549262N00637815EA0236802403 +B1710554549266N00637832EA0236602401 +B1710574549271N00637847EA0236402399 +B1710594549275N00637862EA0236002396 +B1711014549279N00637879EA0235602392 +B1711034549284N00637895EA0235302389 +B1711054549288N00637911EA0235002385 +B1711074549294N00637927EA0234702382 +B1711094549299N00637943EA0234502379 +B1711114549303N00637959EA0234202376 +B1711134549307N00637975EA0233802373 +B1711154549310N00637992EA0233502370 +B1711174549314N00638008EA0233202366 +B1711194549318N00638025EA0232802363 +B1711214549321N00638041EA0232502360 +B1711234549325N00638058EA0232302357 +B1711254549328N00638074EA0232002355 +B1711274549330N00638090EA0231602351 +B1711294549335N00638107EA0231302348 +B1711314549339N00638125EA0230902344 +B1711334549342N00638142EA0230702342 +B1711354549346N00638159EA0230402339 +B1711374549349N00638177EA0230102335 +B1711394549353N00638194EA0229902333 +B1711414549356N00638211EA0229702331 +B1711434549358N00638229EA0229402328 +B1711454549361N00638247EA0229102325 +B1711474549364N00638264EA0229002323 +B1711494549367N00638282EA0228802321 +B1711514549369N00638299EA0228502319 +B1711534549372N00638317EA0228202316 +B1711554549375N00638335EA0228002314 +B1711574549378N00638353EA0227802312 +B1711594549380N00638371EA0227602310 +B1712014549382N00638389EA0227402308 +B1712034549382N00638408EA0227302306 +B1712054549383N00638427EA0227202305 +B1712074549384N00638444EA0227002303 +B1712094549385N00638463EA0226702301 +B1712114549386N00638482EA0226502298 +B1712134549388N00638501EA0226402297 +B1712154549389N00638519EA0226202295 +B1712174549392N00638537EA0225902292 +B1712194549395N00638555EA0225602290 +B1712214549399N00638573EA0225402288 +B1712234549401N00638591EA0225202285 +B1712254549404N00638609EA0224902283 +B1712274549406N00638626EA0224602280 +B1712294549408N00638644EA0224202277 +B1712314549410N00638662EA0224002274 +B1712334549411N00638681EA0223802271 +B1712354549412N00638699EA0223602269 +B1712374549413N00638717EA0223402267 +B1712394549415N00638735EA0223202265 +B1712414549416N00638752EA0223002263 +B1712434549418N00638770EA0222802261 +B1712454549420N00638788EA0222602259 +B1712474549423N00638807EA0222402258 +B1712494549425N00638824EA0222302256 +B1712514549428N00638842EA0222102254 +B1712534549431N00638860EA0222002252 +B1712554549432N00638878EA0221802251 +B1712574549434N00638896EA0221602249 +B1712594549436N00638914EA0221402247 +B1713014549439N00638933EA0221202245 +B1713034549442N00638951EA0221102244 +B1713054549444N00638969EA0220802242 +B1713074549447N00638987EA0220502239 +B1713094549450N00639005EA0220302236 +B1713114549452N00639025EA0220302235 +B1713134549455N00639041EA0220202234 +B1713154549458N00639057EA0220102232 +B1713174549461N00639073EA0220002232 +B1713194549464N00639089EA0219902231 +B1713214549467N00639104EA0219702229 +B1713234549470N00639120EA0219502227 +B1713254549473N00639136EA0219302226 +B1713274549476N00639151EA0219002223 +B1713294549479N00639168EA0218802221 +B1713314549482N00639185EA0218802220 +B1713334549484N00639202EA0218802219 +B1713354549486N00639219EA0218602218 +B1713374549488N00639237EA0218402216 +B1713394549490N00639255EA0218302214 +B1713414549491N00639272EA0218202213 +B1713434549493N00639289EA0218002212 +B1713454549495N00639305EA0217702209 +B1713474549498N00639322EA0217502207 +B1713494549501N00639338EA0217402206 +B1713514549504N00639354EA0217202204 +B1713534549507N00639369EA0217102203 +B1713554549511N00639385EA0217002202 +B1713574549513N00639401EA0216802200 +B1713594549516N00639417EA0216602198 +B1714014549519N00639434EA0216502197 +B1714034549522N00639451EA0216502197 +B1714054549526N00639467EA0216402196 +B1714074549529N00639483EA0216202194 +B1714094549533N00639500EA0216102193 +B1714114549537N00639515EA0215902192 +B1714134549541N00639530EA0215702190 +B1714154549545N00639547EA0215702189 +B1714174549549N00639564EA0215702188 +B1714194549552N00639580EA0215502187 +B1714214549555N00639597EA0215302185 +B1714234549559N00639616EA0215302184 +B1714254549562N00639634EA0215202184 +B1714274549564N00639650EA0215002182 +B1714294549567N00639668EA0214702180 +B1714314549571N00639685EA0214602178 +B1714334549575N00639702EA0214402177 +B1714354549579N00639718EA0214202174 +B1714374549583N00639735EA0214002172 +B1714394549588N00639751EA0213802170 +B1714414549594N00639767EA0213602169 +B1714434549599N00639782EA0213302166 +B1714454549604N00639798EA0213002163 +B1714474549610N00639814EA0212802160 +B1714494549615N00639830EA0212502158 +B1714514549620N00639845EA0212202155 +B1714534549625N00639861EA0212002152 +B1714554549630N00639876EA0211802150 +B1714574549634N00639891EA0211402147 +B1714594549638N00639907EA0211002143 +B1715014549643N00639923EA0210802140 +B1715034549648N00639938EA0210602138 +B1715054549652N00639953EA0210402135 +B1715074549657N00639968EA0210202133 +B1715094549661N00639984EA0210102131 +B1715114549667N00639999EA0209902130 +B1715134549672N00640013EA0209602128 +B1715154549678N00640027EA0209202124 +B1715174549685N00640043EA0209002122 +B1715194549691N00640057EA0208902120 +B1715214549697N00640071EA0208602117 +B1715234549703N00640086EA0208402114 +B1715254549710N00640101EA0208302113 +B1715274549716N00640115EA0208102112 +B1715294549723N00640130EA0207902110 +B1715314549728N00640145EA0207802108 +B1715334549734N00640160EA0207602106 +B1715354549739N00640176EA0207402104 +B1715374549744N00640192EA0207302102 +B1715394549748N00640209EA0207202101 +B1715414549752N00640225EA0207002100 +B1715434549755N00640242EA0206902099 +B1715454549759N00640259EA0206802098 +B1715474549762N00640277EA0206702097 +B1715494549764N00640295EA0206702096 +B1715514549766N00640313EA0206602095 +B1715534549767N00640331EA0206402095 +B1715554549767N00640349EA0206302093 +B1715574549768N00640367EA0206202091 +B1715594549769N00640386EA0206102091 +B1716014549769N00640403EA0205902090 +B1716034549770N00640421EA0205702088 +B1716054549771N00640440EA0205602087 +B1716074549772N00640458EA0205602086 +B1716094549774N00640476EA0205302084 +B1716114549775N00640494EA0205002082 +B1716134549778N00640512EA0204902080 +B1716154549781N00640529EA0204702078 +B1716174549783N00640547EA0204502076 +B1716194549787N00640564EA0204302074 +B1716214549793N00640580EA0204202073 +B1716234549799N00640595EA0204002071 +B1716254549806N00640610EA0203802069 +B1716274549814N00640625EA0203602067 +B1716294549821N00640639EA0203402065 +B1716314549827N00640654EA0203102062 +B1716334549833N00640670EA0202902060 +B1716354549839N00640687EA0202702058 +B1716374549845N00640703EA0202502056 +B1716394549851N00640719EA0202202053 +B1716414549858N00640735EA0201902051 +B1716434549865N00640750EA0201802048 +B1716454549872N00640765EA0201502046 +B1716474549880N00640780EA0201202043 +B1716494549888N00640794EA0200902040 +B1716514549897N00640808EA0200702038 +B1716534549906N00640821EA0200402035 +B1716554549916N00640833EA0200102032 +B1716574549926N00640845EA0200002030 +B1716594549936N00640857EA0199802029 +B1717014549946N00640868EA0199402026 +B1717034549956N00640879EA0199102023 +B1717054549965N00640893EA0199002020 +B1717074549973N00640906EA0198802019 +B1717094549982N00640919EA0198502017 +B1717114549991N00640932EA0198302014 +B1717134550000N00640944EA0198202012 +B1717154550010N00640956EA0198302011 +B1717174550019N00640969EA0198402012 +B1717194550027N00640982EA0198402013 +B1717214550033N00640993EA0198302013 +B1717234550040N00641003EA0198102012 +B1717254550048N00641015EA0197902010 +B1717274550055N00641026EA0197702008 +B1717294550063N00641037EA0197502006 +B1717314550071N00641048EA0197302004 +B1717334550079N00641060EA0197202003 +B1717354550085N00641071EA0197002001 +B1717374550093N00641081EA0196801999 +B1717394550102N00641092EA0196801998 +B1717414550110N00641102EA0196601997 +B1717434550118N00641112EA0196501996 +B1717454550127N00641120EA0196601995 +B1717474550135N00641128EA0196501995 +B1717494550143N00641135EA0196401994 +B1717514550152N00641139EA0196201992 +B1717534550159N00641131EA0195901990 +B1717554550161N00641116EA0195601988 +B1717574550154N00641102EA0195501986 +B1717594550144N00641095EA0195401984 +B1718014550134N00641090EA0195301983 +B1718034550126N00641082EA0195201981 +B1718054550117N00641073EA0195101981 +B1718074550108N00641067EA0194901980 +B1718094550098N00641059EA0194701978 +B1718114550089N00641049EA0194601977 +B1718134550081N00641039EA0194601977 +B1718154550074N00641029EA0194401975 +B1718174550066N00641019EA0194101972 +B1718194550061N00641005EA0194001970 +B1718214550059N00640990EA0193801968 +B1718234550058N00640975EA0193501965 +B1718254550060N00640959EA0193201962 +B1718274550061N00640943EA0193101959 +B1718294550065N00640928EA0193001958 +B1718314550070N00640915EA0193001958 +B1718334550073N00640902EA0192901957 +B1718354550074N00640889EA0192901957 +B1718374550075N00640877EA0192901957 +B1718394550073N00640864EA0192801956 +B1718414550069N00640851EA0192501954 +B1718434550067N00640837EA0192301952 +B1718454550065N00640823EA0192101949 +B1718474550062N00640809EA0191801946 +B1718494550060N00640793EA0191501943 +B1718514550058N00640777EA0191501941 +B1718534550055N00640760EA0191601941 +B1718554550053N00640743EA0191601941 +B1718574550050N00640729EA0191501941 +B1718594550046N00640715EA0191201940 +B1719014550042N00640702EA0190801937 +B1719034550038N00640688EA0190401934 +B1719054550034N00640672EA0190101930 +B1719074550031N00640656EA0189701926 +B1719094550027N00640641EA0189501923 +B1719114550024N00640626EA0189201919 +B1719134550021N00640610EA0189001917 +B1719154550020N00640593EA0189001915 +B1719174550020N00640578EA0189101915 +B1719194550021N00640564EA0189101915 +B1719214550023N00640549EA0189001915 +B1719234550025N00640534EA0189001915 +B1719254550026N00640519EA0188901914 +B1719274550028N00640504EA0188701912 +B1719294550030N00640487EA0188501911 +B1719314550031N00640472EA0188301909 +B1719334550032N00640456EA0188001907 +B1719354550033N00640440EA0187901905 +B1719374550033N00640424EA0187701903 +B1719394550034N00640408EA0187401900 +B1719414550035N00640391EA0187301898 +B1719434550036N00640376EA0187101897 +B1719454550038N00640362EA0186601895 +B1719474550039N00640346EA0186101891 +B1719494550040N00640328EA0185801887 +B1719514550040N00640311EA0185501884 +B1719534550040N00640295EA0185101880 +B1719554550041N00640278EA0184801876 +B1719574550041N00640261EA0184301873 +B1719594550042N00640245EA0184001869 +B1720014550041N00640229EA0183601865 +B1720034550040N00640213EA0183101861 +B1720054550039N00640198EA0182601856 +B1720074550036N00640181EA0182301852 +B1720094550034N00640165EA0181901848 +B1720114550033N00640151EA0181401843 +B1720134550033N00640134EA0181001839 +B1720154550032N00640117EA0180701835 +B1720174550032N00640102EA0180301832 +B1720194550034N00640087EA0179801827 +B1720214550036N00640070EA0179401823 +B1720234550038N00640054EA0179101819 +B1720254550040N00640039EA0178601815 +B1720274550043N00640022EA0178101809 +B1720294550045N00640005EA0177901806 +B1720314550046N00639989EA0177501802 +B1720334550046N00639973EA0177101798 +B1720354550047N00639956EA0177001794 +B1720374550049N00639939EA0176901792 +B1720394550051N00639923EA0176801791 +B1720414550054N00639907EA0176701790 +B1720434550057N00639892EA0176501789 +B1720454550060N00639876EA0176301788 +B1720474550062N00639859EA0176001785 +B1720494550066N00639843EA0175701783 +B1720514550069N00639827EA0175301779 +B1720534550072N00639810EA0175101776 +B1720554550075N00639793EA0174901775 +B1720574550078N00639778EA0174601772 +B1720594550081N00639762EA0174401769 +B1721014550084N00639744EA0174301767 +B1721034550088N00639728EA0174201766 +B1721054550091N00639712EA0174201766 +B1721074550095N00639697EA0174201766 +B1721094550100N00639682EA0174301767 +B1721114550105N00639668EA0174201767 +B1721134550110N00639654EA0174101766 +B1721154550116N00639639EA0174101765 +B1721174550121N00639626EA0174101766 +B1721194550126N00639612EA0173901765 +B1721214550131N00639597EA0173601764 +B1721234550136N00639582EA0173501762 +B1721254550143N00639568EA0173401761 +B1721274550151N00639555EA0173401760 +B1721294550158N00639543EA0173301760 +B1721314550166N00639531EA0173301759 +B1721334550175N00639521EA0173401759 +B1721354550183N00639511EA0173601761 +B1721374550190N00639503EA0173501761 +B1721394550197N00639495EA0173301761 +B1721414550204N00639484EA0172901759 +B1721434550211N00639471EA0172601756 +B1721454550218N00639457EA0172401753 +B1721474550225N00639444EA0172301752 +B1721494550231N00639431EA0172201751 +B1721514550238N00639418EA0172101749 +B1721534550244N00639405EA0171901747 +B1721554550250N00639393EA0171801746 +B1721574550255N00639380EA0171601744 +B1721594550260N00639366EA0171501742 +B1722014550263N00639351EA0171401740 +B1722034550267N00639336EA0171201738 +B1722054550270N00639320EA0171001737 +B1722074550273N00639305EA0170901735 +B1722094550276N00639289EA0170601733 +B1722114550280N00639274EA0170301730 +B1722134550286N00639259EA0170101728 +B1722154550293N00639246EA0170101726 +B1722174550301N00639236EA0169901725 +B1722194550309N00639228EA0169701723 +B1722214550319N00639221EA0169401719 +B1722234550330N00639215EA0169301718 +B1722254550339N00639210EA0169101717 +B1722274550349N00639205EA0169001715 +B1722294550360N00639200EA0169101714 +B1722314550370N00639197EA0169101715 +B1722334550379N00639196EA0169001714 +B1722354550389N00639192EA0168901713 +B1722374550399N00639187EA0168901712 +B1722394550411N00639188EA0168901712 +B1722414550421N00639190EA0169201713 +B1722434550429N00639191EA0169301714 +B1722454550435N00639198EA0169101715 +B1722474550439N00639211EA0169101715 +B1722494550444N00639224EA0169201715 +B1722514550449N00639236EA0169101715 +B1722534550454N00639251EA0169101714 +B1722554550457N00639267EA0169101714 +B1722574550460N00639283EA0169201715 +B1722594550464N00639295EA0169201715 +B1723014550468N00639304EA0169001715 +B1723034550475N00639311EA0169001714 +B1723054550482N00639318EA0169201715 +B1723074550488N00639325EA0169101715 +B1723094550494N00639333EA0169001714 +B1723114550500N00639341EA0168801713 +B1723134550507N00639350EA0168801712 +B1723154550514N00639360EA0168901712 +B1723174550519N00639369EA0168801712 +B1723194550524N00639376EA0168701711 +B1723214550531N00639382EA0168501710 +B1723234550538N00639388EA0168401709 +B1723254550544N00639393EA0168301708 +B1723274550551N00639396EA0168201707 +B1723294550559N00639399EA0168201706 +B1723314550566N00639400EA0168101705 +B1723334550573N00639398EA0167901703 +B1723354550581N00639394EA0167801702 +B1723374550589N00639390EA0167801702 +B1723394550596N00639385EA0167601702 +B1723414550603N00639380EA0167401700 +B1723434550611N00639373EA0167201699 +B1723454550618N00639366EA0167201699 +B1723474550624N00639359EA0167001698 +B1723494550634N00639346EA0166801697 +B1723524550641N00639337EA0166901697 +B1723544550648N00639330EA0166701696 +B1723564550655N00639323EA0166601694 +B1723584550664N00639316EA0166501694 +B1724004550671N00639310EA0166501694 +B1724024550677N00639302EA0166401693 +B1724044550684N00639294EA0166301692 +B1724064550691N00639289EA0166201691 +B1724084550697N00639282EA0166101690 +B1724104550703N00639274EA0166001689 +B1724124550709N00639266EA0165901688 +B1724144550716N00639259EA0165701687 +B1724164550722N00639252EA0165501685 +B1724184550729N00639243EA0165401683 +B1724204550736N00639233EA0165401682 +B1724224550742N00639225EA0165401683 +B1724244550748N00639218EA0165401683 +B1724264550754N00639210EA0165201681 +B1724284550762N00639203EA0165101680 +B1724304550768N00639196EA0164901678 +B1724324550774N00639188EA0164601676 +B1724344550780N00639182EA0164301672 +B1724364550787N00639175EA0163901669 +B1724384550793N00639168EA0163601666 +B1724404550800N00639160EA0163401663 +B1724424550806N00639151EA0163201661 +B1724444550812N00639144EA0162901658 +B1724464550817N00639135EA0162501654 +B1724484550823N00639125EA0162201651 +B1724504550829N00639116EA0162001649 +B1724524550833N00639108EA0161701645 +B1724544550839N00639098EA0161401642 +B1724564550846N00639090EA0161101640 +B1724584550851N00639081EA0160801638 +B1725004550855N00639071EA0160401635 +B1725024550861N00639061EA0160101632 +B1725044550865N00639051EA0159801628 +B1725064550870N00639040EA0159501625 +B1725084550874N00639028EA0159101622 +B1725104550877N00639017EA0158801618 +B1725124550881N00639005EA0158201614 +B1725144550885N00638992EA0157601610 +B1725164550888N00638977EA0157101605 +B1725184550889N00638961EA0156501599 +B1725204550890N00638944EA0156101594 +B1725224550892N00638929EA0155701589 +B1725244550893N00638913EA0155401585 +B1725264550894N00638898EA0155101580 +B1725284550895N00638882EA0154701575 +B1725304550895N00638865EA0154401572 +B1725324550893N00638848EA0154101568 +B1725344550892N00638833EA0153801565 +B1725364550892N00638818EA0153501561 +B1725384550893N00638803EA0153201558 +B1725404550892N00638787EA0152901555 +B1725424550892N00638771EA0152601552 +B1725444550892N00638755EA0152501550 +B1725464550892N00638739EA0152201547 +B1725484550892N00638723EA0151901544 +B1725504550893N00638706EA0151601541 +B1725524550894N00638690EA0151601539 +B1725544550895N00638674EA0151301537 +B1725564550898N00638659EA0151101535 +B1725584550902N00638645EA0151001533 +B1726004550906N00638633EA0150901532 +B1726024550911N00638621EA0150601530 +B1726044550916N00638609EA0150301527 +B1726064550921N00638598EA0150001524 +B1726084550926N00638586EA0149601521 +B1726104550931N00638572EA0149401519 +B1726124550935N00638559EA0149101518 +B1726144550939N00638546EA0148901517 +B1726164550942N00638533EA0148601514 +B1726184550945N00638518EA0148401512 +B1726204550949N00638505EA0148201510 +B1726224550952N00638494EA0148001507 +B1726244550956N00638482EA0147501504 +B1726264550961N00638469EA0147201500 +B1726284550966N00638455EA0147101497 +B1726304550970N00638443EA0147001495 +B1726324550973N00638430EA0146701493 +B1726344550978N00638417EA0146501490 +B1726364550983N00638404EA0146401488 +B1726384550987N00638393EA0146201486 +B1726404550992N00638381EA0146001483 +B1726424550998N00638370EA0145801480 +B1726444551004N00638361EA0145601478 +B1726464551010N00638351EA0145301476 +B1726484551016N00638340EA0145001473 +B1726504551022N00638330EA0144801471 +B1726524551028N00638320EA0144601468 +B1726544551034N00638311EA0144301466 +B1726564551040N00638300EA0143901462 +B1726584551046N00638288EA0143901461 +B1727004551052N00638277EA0143701460 +B1727024551058N00638266EA0143501457 +B1727044551065N00638254EA0143301457 +B1727064551071N00638243EA0143101455 +B1727084551076N00638232EA0142901453 +B1727104551081N00638220EA0142601450 +B1727124551087N00638208EA0142301448 +B1727144551093N00638197EA0142001445 +B1727164551099N00638185EA0141701442 +B1727184551105N00638174EA0141501438 +B1727204551112N00638163EA0141201436 +B1727224551118N00638151EA0141001434 +B1727244551124N00638140EA0140601431 +B1727264551130N00638127EA0140301428 +B1727284551136N00638115EA0140101426 +B1727304551142N00638102EA0139901425 +B1727324551147N00638090EA0139601424 +B1727344551153N00638077EA0139301422 +B1727364551159N00638064EA0139001422 +B1727384551164N00638050EA0138701421 +B1727404551169N00638037EA0138301419 +B1727424551176N00638025EA0138001417 +B1727444551181N00638012EA0137701415 +B1727464551188N00638000EA0137301411 +B1727484551194N00637990EA0137001406 +B1727504551200N00637979EA0136501401 +B1727524551207N00637967EA0136201396 +B1727544551215N00637955EA0136001393 +B1727564551222N00637945EA0135801391 +B1727584551229N00637935EA0135401388 +B1728004551237N00637924EA0135201385 +B1728024551245N00637914EA0135101383 +B1728044551251N00637905EA0134801380 +B1728064551259N00637896EA0134601378 +B1728084551267N00637886EA0134401376 +B1728104551274N00637876EA0134001373 +B1728124551282N00637866EA0133701369 +B1728144551290N00637856EA0133501366 +B1728164551298N00637847EA0133301363 +B1728184551306N00637837EA0132901359 +B1728204551315N00637826EA0132701356 +B1728224551323N00637816EA0132501353 +B1728244551331N00637807EA0132101349 +B1728264551339N00637796EA0131901346 +B1728284551347N00637784EA0131801344 +B1728304551353N00637773EA0131601342 +B1728324551361N00637763EA0131301339 +B1728344551369N00637753EA0131001337 +B1728364551377N00637745EA0130901335 +B1728384551385N00637737EA0130601333 +B1728404551393N00637727EA0130401330 +B1728424551400N00637717EA0130101327 +B1728444551408N00637706EA0129801324 +B1728464551417N00637696EA0129701321 +B1728484551425N00637689EA0129501319 +B1728504551433N00637681EA0129201317 +B1728524551442N00637672EA0128901313 +B1728544551450N00637662EA0128701311 +B1728564551458N00637651EA0128401309 +B1728584551466N00637639EA0128201307 +B1729004551473N00637628EA0128001306 +B1729024551481N00637617EA0127701304 +B1729044551490N00637609EA0127401300 +B1729064551499N00637603EA0127201297 +B1729084551508N00637599EA0127001294 +B1729104551517N00637594EA0126701291 +B1729124551526N00637587EA0126401287 +B1729144551534N00637579EA0126101285 +B1729164551542N00637570EA0125801282 +B1729184551551N00637561EA0125401278 +B1729204551560N00637551EA0125201275 +B1729224551569N00637542EA0125101273 +B1729244551577N00637536EA0124801270 +B1729264551587N00637529EA0124701267 +B1729284551596N00637525EA0124501266 +B1729304551605N00637520EA0124101264 +B1729324551616N00637516EA0124001261 +B1729344551626N00637511EA0124101261 +B1729364551634N00637506EA0124101260 +B1729384551643N00637500EA0124001258 +B1729404551653N00637497EA0123901257 +B1729424551662N00637496EA0123801255 +B1729444551671N00637497EA0123701254 +B1729464551680N00637499EA0123701253 +B1729484551688N00637499EA0123501252 +B1729504551697N00637499EA0123301250 +B1729524551707N00637500EA0123101248 +B1729544551716N00637502EA0123001246 +B1729564551724N00637505EA0122701244 +B1729584551732N00637498EA0122001241 +B1730004551733N00637477EA0121501237 +B1730024551727N00637458EA0121901234 +B1730044551723N00637448EA0121401232 +B1730064551715N00637431EA0120601226 +B1730084551703N00637413EA0120701223 +B1730104551695N00637401EA0120801221 +B1730124551690N00637388EA0120301217 +B1730144551683N00637371EA0119801213 +B1730164551674N00637354EA0119901212 +B1730184551667N00637340EA0119701210 +B1730204551664N00637325EA0119201208 +B1730224551672N00637314EA0118601204 +B1730244551685N00637317EA0117801198 +B1730264551675N00637333EA0116901191 +B1730284551659N00637320EA0116501184 +B1730304551659N00637301EA0116801181 +B1730324551660N00637287EA0116601180 +B1730344551653N00637272EA0116001175 +B1730364551642N00637257EA0115801173 +B1730384551632N00637247EA0115901173 +B1730404551623N00637238EA0115401170 +B1730424551612N00637226EA0115201167 +B1730444551602N00637213EA0115301166 +B1730464551600N00637199EA0114801163 +B1730484551605N00637178EA0114401161 +B1730504551614N00637165EA0114401161 +B1730524551620N00637156EA0114101159 +B1730544551626N00637144EA0113501157 +B1730564551634N00637131EA0113501155 +B1730584551642N00637122EA0113501154 +B1731004551648N00637114EA0113201151 +B1731024551657N00637112EA0113001148 +B1731044551667N00637124EA0112301143 +B1731064551657N00637145EA0111801137 +B1731084551640N00637149EA0111901133 +B1731104551631N00637154EA0111401130 +B1731124551633N00637169EA0110701124 +B1731144551644N00637176EA0110501119 +B1731164551653N00637178EA0110501117 +B1731184551661N00637185EA0110001114 +B1731204551667N00637196EA0110101112 +B1731224551672N00637205EA0109701111 +B1731244551675N00637214EA0108701108 +B1731264551680N00637224EA0108701104 +B1731284551687N00637234EA0109001102 +B1731304551692N00637241EA0109001101 +B1731324551693N00637243EA0109001100 +B1731344551694N00637244EA0109001100 +B1731364551694N00637244EA0109101100 +B1731384551694N00637244EA0109001100 +B1731404551694N00637244EA0109001100 +B1731424551694N00637244EA0109001100 +B1731444551694N00637244EA0109101100 +B1731464551694N00637244EA0109001100 +B1731484551694N00637244EA0109001100 +B1731504551694N00637244EA0109001100 +B1731524551694N00637244EA0109001100 +B1731544551694N00637244EA0109001100 +B1731564551694N00637244EA0109001100 +B1731584551694N00637244EA0109001100 +B1732004551694N00637244EA0109001100 +B1732024551694N00637244EA0109001100 +B1732044551694N00637244EA0109001100 +B1732064551694N00637244EA0109001100 +B1732084551694N00637244EA0109001100 +B1732104551694N00637244EA0109001100 +B1732124551694N00637244EA0109001100 +B1732144551694N00637244EA0109001100 +B1732164551694N00637244EA0109001100 +B1732184551694N00637244EA0109001100 +B1732204551694N00637244EA0109001100 +B1732224551694N00637244EA0109001100 +B1732244551694N00637244EA0109001100 +B1732264551694N00637244EA0109001100 +B1732284551694N00637244EA0109001100 +B1732304551694N00637244EA0109001100 +B1732324551694N00637244EA0109001100 +B1732344551694N00637244EA0109001100 +B1732364551694N00637244EA0109001098 +B1732384551694N00637244EA0109001098 +B1732404551694N00637244EA0109001099 +B1732424551694N00637244EA0109001100 +B1732444551694N00637244EA0109001100 +B1732464551694N00637244EA0109001101 +B1732484551694N00637244EA0109001101 +B1732504551694N00637244EA0109001101 +B1732524551694N00637244EA0109001101 +B1732544551694N00637244EA0109001101 +B1732564551694N00637244EA0109001101 +B1732584551694N00637244EA0109001101 +B1733004551694N00637244EA0109001101 +B1733024551694N00637244EA0109001101 +B1733044551694N00637244EA0109001101 +B1733064551694N00637244EA0109001101 +B1733084551694N00637245EA0109001101 diff --git a/float-no-zero/examples/data/igc/Damien-de-Baenst.igc b/float-no-zero/examples/data/igc/Damien-de-Baenst.igc new file mode 100644 index 0000000000..d6fa2fe39d --- /dev/null +++ b/float-no-zero/examples/data/igc/Damien-de-Baenst.igc @@ -0,0 +1,3319 @@ +ABRA00326 +HFDTE190411 +HFFXA100 +HFPLTPILOT:Damien de Baesnt +HFGTYGLIDERTYPE:Ozone R10.2 +HFGIDGLIDERID:1111 +HFDTM100GPSDATUM:WGS84 +HFGPSGPS:FURUNO GH-80 +HFRFWFIRMWAREVERSION:2.27 +HFRHWHARDWAREVERSION:1.00 +HFFTYFRTYPE:BRAUNIGER,COMPEO +I013638TAS +B0844164556194N00651071EA0203502037000 +B0844264556194N00651071EA0203502038000 +B0844364556194N00651071EA0203502039000 +B0844464556194N00651070EA0203602040000 +B0844564556193N00651071EA0203502040000 +B0845064556193N00651071EA0203602041000 +B0845164556193N00651071EA0203502042000 +B0845264556193N00651070EA0203602042000 +B0845364556193N00651071EA0203502041000 +B0845464556194N00651071EA0203502041000 +B0845564556194N00651071EA0203602040000 +B0846064556195N00651071EA0203602039000 +B0846164556195N00651072EA0203602039000 +B0846264556195N00651072EA0203602039000 +B0846364556195N00651072EA0203602040000 +B0846464556195N00651072EA0203502040001 +B0846564556195N00651071EA0203502040001 +B0847064556195N00651071EA0203502039000 +B0847164556194N00651071EA0203502038000 +B0847264556193N00651071EA0203502036000 +B0847364556193N00651071EA0203502033000 +B0847464556193N00651071EA0203502033000 +B0847564556194N00651070EA0203502033000 +B0848064556194N00651070EA0203502033000 +B0848164556194N00651070EA0203502034000 +B0848264556194N00651070EA0203502035000 +B0848364556194N00651070EA0203502036000 +B0848464556184N00651068EA0202802036003 +B0848564556147N00651045EA0203302035000 +B0849064556120N00651002EA0203902037000 +B0849174556106N00650925EA0204402041000 +B0849274556084N00650863EA0203502042000 +B0849374556056N00650807EA0203502042000 +B0849474556028N00650751EA0205202043000 +B0849574555997N00650710EA0206902048000 +B0850074555959N00650698EA0206402056000 +B0850174555995N00650719EA0206502061000 +B0850274556007N00650753EA0207002065000 +B0850374555968N00650704EA0208202071000 +B0850474555923N00650661EA0206802074000 +B0850574555877N00650603EA0207802076000 +B0851074555827N00650572EA0209402080000 +B0851174555840N00650598EA0209502086000 +B0851274555894N00650558EA0210402091000 +B0851374555916N00650579EA0210202098000 +B0851484555864N00650522EA0210902103000 +B0851584555808N00650494EA0211802108000 +B0852084555781N00650531EA0213102115000 +B0852184555750N00650535EA0212702121000 +B0852284555774N00650500EA0213302126000 +B0852384555725N00650478EA0213902130000 +B0852484555694N00650496EA0215702137000 +B0852584555702N00650445EA0215902144000 +B0853084555664N00650396EA0217802153000 +B0853184555661N00650439EA0221002165000 +B0853284555615N00650432EA0223102184000 +B0853384555639N00650429EA0225202204000 +B0853484555599N00650406EA0226002222000 +B0853584555629N00650372EA0227502237000 +B0854084555661N00650403EA0227202252000 +B0854184555696N00650447EA0225602257000 +B0854284555733N00650486EA0224502258000 +B0854384555779N00650521EA0223602255000 +B0854484555811N00650573EA0222902249000 +B0854584555839N00650630EA0222502243000 +B0855084555858N00650693EA0221502237000 +B0855184555884N00650741EA0220602230000 +B0855284555906N00650786EA0219702223047 +B0855384555924N00650838EA0219002214041 +B0855484555949N00650883EA0217602205042 +B0855584555968N00650908EA0217202199038 +B0856084555985N00650944EA0216602192042 +B0856184555995N00650972EA0218202188027 +B0856284555993N00650995EA0217802187041 +B0856384556001N00651028EA0217602185041 +B0856484556012N00651058EA0216302183041 +B0856584556025N00651094EA0214802177046 +B0857084556041N00651125EA0214702170045 +B0857184556066N00651153EA0214002163041 +B0857284556092N00651182EA0214202157041 +B0857384556133N00651191EA0215702155038 +B0857484556139N00651216EA0217502161045 +B0857584556148N00651179EA0220102172045 +B0858084556123N00651139EA0222202185044 +B0858184556119N00651134EA0224702203045 +B0858284556145N00651090EA0228202224042 +B0858384556123N00651077EA0230102247038 +B0858484556136N00651065EA0232702271048 +B0858584556123N00651015EA0236202298042 +B0859084556107N00651035EA0239002326030 +B0859184556099N00650985EA0242602354052 +B0859294556053N00650995EA0245402386038 +B0859394556068N00650969EA0248602415032 +B0859494556014N00650971EA0250302444040 +B0859594556014N00650890EA0250202467046 +B0900094556012N00650932EA0253002488045 +B0900194556004N00650877EA0252802504042 +B0900294556038N00650897EA0257102520043 +B0900394556007N00650870EA0259602544042 +B0900494556015N00650893EA0263102571046 +B0900594555992N00650859EA0266002597048 +B0901094555972N00650895EA0268102623046 +B0901194555977N00650853EA0270702646038 +B0901294555973N00650904EA0272702673044 +B0901394555923N00650867EA0273402695042 +B0901494555899N00650786EA0274602712044 +B0901594555871N00650704EA0275402727041 +B0902094555840N00650618EA0275502738047 +B0902194555809N00650533EA0274202743044 +B0902294555784N00650449EA0272402742045 +B0902394555764N00650371EA0272002739044 +B0902494555747N00650293EA0272302734038 +B0902594555729N00650215EA0273302733036 +B0903094555714N00650135EA0274302737045 +B0903194555681N00650062EA0274102742045 +B0903294555637N00649978EA0272802743044 +B0903394555599N00649881EA0272702738044 +B0903494555576N00649799EA0275402742038 +B0903594555585N00649806EA0279202752047 +B0904094555601N00649797EA0282102771040 +B0904194555583N00649764EA0284802794044 +B0904294555575N00649796EA0287502820038 +B0904394555571N00649728EA0289802844051 +B0904494555569N00649759EA0292402869042 +B0904594555554N00649715EA0294802893051 +B0905094555502N00649727EA0296002916035 +B0905194555428N00649711EA0295902932044 +B0905294555362N00649670EA0295302942047 +B0905394555322N00649577EA0293902947042 +B0905494555297N00649476EA0291402943046 +B0905594555267N00649374EA0289102931048 +B0906094555242N00649277EA0286402915043 +B0906194555213N00649195EA0283302894038 +B0906294555187N00649115EA0281002872040 +B0906394555149N00649030EA0280202850044 +B0906494555115N00648943EA0279402834048 +B0906594555080N00648866EA0278102820044 +B0907094555041N00648772EA0277902806042 +B0907204555008N00648670EA0278102798044 +B0907304554951N00648603EA0280302797037 +B0907404554910N00648557EA0281002803042 +B0907504554876N00648454EA0278902802061 +B0908004554827N00648342EA0276102793065 +B0908104554778N00648226EA0274202779061 +B0908204554725N00648116EA0272702765058 +B0908304554658N00648001EA0270002747061 +B0908404554595N00647879EA0267402726062 +B0908504554535N00647774EA0265702705057 +B0909004554480N00647669EA0263502684058 +B0909104554424N00647568EA0261102663057 +B0909204554371N00647442EA0259202641060 +B0909304554316N00647324EA0256702620061 +B0909404554268N00647221EA0255602601057 +B0909504554220N00647115EA0254502585057 +B0910004554173N00647009EA0253202570055 +B0910104554120N00646906EA0251202554056 +B0910204554071N00646799EA0249702537058 +B0910304554018N00646700EA0248402522056 +B0910404553972N00646589EA0246902506058 +B0910504553924N00646479EA0245202491061 +B0911004553875N00646370EA0244002476060 +B0911104553827N00646265EA0242002461059 +B0911204553777N00646154EA0240002443060 +B0911304553730N00646048EA0237102424066 +B0911404553677N00645931EA0234602402066 +B0911504553626N00645814EA0232702379067 +B0912004553572N00645703EA0230402358067 +B0912104553517N00645593EA0228102336067 +B0912204553460N00645486EA0226302314065 +B0912304553406N00645393EA0224702294060 +B0912404553349N00645304EA0223002275057 +B0912504553299N00645239EA0222902261044 +B0913004553251N00645165EA0221602248042 +B0913104553216N00645081EA0222102238039 +B0913204553182N00645000EA0223102234037 +B0913304553142N00645006EA0224302236036 +B0913404553177N00645023EA0225402242040 +B0913504553172N00645035EA0227202250051 +B0914004553178N00645007EA0229702260036 +B0914104553137N00644991EA0231402277040 +B0914204553176N00644962EA0233402292036 +B0914304553178N00644893EA0235102311048 +B0914414553153N00644941EA0237402333043 +B0914514553184N00644943EA0239402354040 +B0915014553219N00644878EA0242702378039 +B0915114553188N00644839EA0243702401042 +B0915214553163N00644895EA0245802420036 +B0915314553188N00644920EA0246202438041 +B0915414553223N00644863EA0249302454043 +B0915514553184N00644863EA0251602475041 +B0916014553222N00644851EA0254002496037 +B0916114553214N00644772EA0256302519035 +B0916214553166N00644726EA0256802539042 +B0916314553100N00644689EA0256202552058 +B0916414553035N00644646EA0254402555058 +B0916514552959N00644604EA0255402554047 +B0917014552887N00644569EA0256302556034 +B0917114552878N00644488EA0257402563042 +B0917214552863N00644504EA0258402571040 +B0917314552857N00644430EA0258602579048 +B0917414552819N00644439EA0258602585050 +B0917514552732N00644399EA0257402585055 +B0918014552651N00644360EA0254602577052 +B0918114552575N00644352EA0252502562054 +B0918214552524N00644375EA0255302555038 +B0918314552504N00644332EA0256302558047 +B0918414552509N00644358EA0257902564035 +B0918514552447N00644356EA0259702574039 +B0919014552451N00644356EA0261702586044 +B0919114552426N00644259EA0263302603042 +B0919214552377N00644220EA0265402621039 +B0919314552380N00644262EA0266502636042 +B0919414552403N00644193EA0267402650041 +B0919514552346N00644122EA0268202662044 +B0920014552282N00644059EA0267202670047 +B0920114552210N00643999EA0262702666064 +B0920214552131N00643912EA0259502649062 +B0920314552057N00643833EA0257402628061 +B0920414551982N00643763EA0255002607059 +B0920514551906N00643697EA0252702584059 +B0921014551832N00643622EA0251302562058 +B0921114551759N00643536EA0250002543059 +B0921214551684N00643456EA0248902526060 +B0921314551608N00643379EA0247402512060 +B0921414551529N00643303EA0245802496058 +B0921514551447N00643238EA0243502480062 +B0922014551366N00643175EA0241402461060 +B0922114551283N00643119EA0239502441060 +B0922214551203N00643060EA0237402422058 +B0922324551119N00642981EA0235402399058 +B0922424551041N00642907EA0233302379060 +B0922524550959N00642858EA0231002358060 +B0923024550879N00642814EA0228802337060 +B0923124550805N00642760EA0225902315058 +B0923224550729N00642706EA0224202291055 +B0923324550677N00642660EA0224102275041 +B0923424550637N00642614EA0224202264038 +B0923524550633N00642546EA0224402258044 +B0924024550666N00642504EA0223902255042 +B0924124550651N00642567EA0224002251042 +B0924224550602N00642526EA0224102249039 +B0924324550566N00642458EA0223302247040 +B0924424550541N00642378EA0224402246043 +B0924524550537N00642406EA0224602248043 +B0925024550477N00642362EA0225902251041 +B0925124550467N00642374EA0227002257055 +B0925224550431N00642320EA0228202264037 +B0925324550420N00642371EA0228602270032 +B0925424550353N00642348EA0229402279037 +B0925524550311N00642259EA0230502289043 +B0926024550279N00642168EA0231602299047 +B0926124550288N00642118EA0232802311048 +B0926224550254N00642175EA0234102322046 +B0926324550202N00642129EA0235402333037 +B0926424550184N00642044EA0236102343034 +B0926524550163N00641960EA0235902350041 +B0927024550152N00641871EA0236802356042 +B0927124550135N00641805EA0238802365037 +B0927224550154N00641779EA0239702377039 +B0927324550110N00641802EA0240902387044 +B0927424550121N00641771EA0243102401044 +B0927524550074N00641787EA0245102415042 +B0928024550083N00641766EA0247602433041 +B0928124550040N00641746EA0250002453046 +B0928224550036N00641772EA0252502473037 +B0928324549996N00641728EA0253502493039 +B0928424550019N00641715EA0255902514048 +B0928524550003N00641683EA0258302535048 +B0929024549978N00641715EA0260802557044 +B0929124549989N00641690EA0263102579044 +B0929224549952N00641675EA0265002601046 +B0929324549964N00641695EA0266802622043 +B0929424549903N00641708EA0267202640042 +B0929524549840N00641685EA0267702654042 +B0930024549776N00641655EA0267802665042 +B0930134549713N00641613EA0267602671040 +B0930234549648N00641578EA0266102671045 +B0930334549586N00641551EA0265102667042 +B0930434549523N00641520EA0264902662044 +B0930534549465N00641496EA0265902659038 +B0931034549398N00641467EA0266902662043 +B0931134549329N00641429EA0269902672043 +B0931234549253N00641403EA0271402685043 +B0931334549184N00641372EA0271702698044 +B0931434549115N00641338EA0271402706049 +B0931534549047N00641292EA0270102707044 +B0932034548989N00641228EA0269202704043 +B0932134548931N00641152EA0269502701043 +B0932234548860N00641102EA0268802699043 +B0932334548802N00641031EA0268502696043 +B0932434548746N00640961EA0268702693046 +B0932534548687N00640908EA0269202693039 +B0933034548617N00640840EA0268302691053 +B0933134548546N00640765EA0266902685054 +B0933234548488N00640679EA0266202679050 +B0933334548441N00640602EA0265702672042 +B0933434548392N00640537EA0265602667045 +B0933534548334N00640469EA0263902661055 +B0934034548266N00640403EA0262902650061 +B0934134548209N00640378EA0265302645038 +B0934234548151N00640360EA0264602647051 +B0934334548083N00640321EA0263002645056 +B0934434548032N00640232EA0261502638057 +B0934534547992N00640133EA0260302628059 +B0935034547953N00640047EA0258102616057 +B0935134547920N00639950EA0257002602058 +B0935234547887N00639852EA0255702589057 +B0935334547863N00639744EA0254002575056 +B0935434547845N00639628EA0252302560060 +B0935534547844N00639522EA0254102550043 +B0936034547832N00639443EA0256802552045 +B0936134547809N00639369EA0257102559042 +B0936234547791N00639287EA0257202564046 +B0936334547767N00639201EA0256002565048 +B0936434547735N00639111EA0252302558057 +B0936534547713N00638988EA0249502543061 +B0937034547695N00638872EA0247002524057 +B0937134547682N00638757EA0244602502059 +B0937234547673N00638650EA0242102480058 +B0937334547668N00638544EA0240502458046 +B0937434547665N00638440EA0239002438056 +B0937534547665N00638335EA0239102423049 +B0938034547661N00638257EA0240402416040 +B0938144547652N00638167EA0239402411039 +B0938244547631N00638089EA0238302405045 +B0938344547618N00638012EA0238702399044 +B0938444547603N00637933EA0238602396047 +B0938544547584N00637862EA0238602394044 +B0939044547569N00637804EA0238502393038 +B0939144547554N00637738EA0239102391043 +B0939244547536N00637672EA0240802395039 +B0939344547519N00637616EA0241102402043 +B0939444547502N00637552EA0239402403045 +B0939544547472N00637479EA0236002395060 +B0940044547431N00637404EA0234102379059 +B0940144547394N00637342EA0233702365053 +B0940244547352N00637289EA0232802355042 +B0940344547318N00637236EA0231102344052 +B0940444547300N00637170EA0232102335040 +B0940544547258N00637146EA0234602334034 +B0941044547236N00637114EA0238202346042 +B0941144547264N00637148EA0240302363039 +B0941244547223N00637134EA0243802384035 +B0941344547206N00637070EA0247602409041 +B0941444547186N00637000EA0251002439039 +B0941544547154N00636909EA0251102464050 +B0942044547124N00636805EA0250602481054 +B0942144547080N00636719EA0250602492055 +B0942244547030N00636627EA0248502495056 +B0942344546971N00636542EA0246702490058 +B0942444546920N00636449EA0245002480057 +B0942544546873N00636354EA0245002470044 +B0943044546833N00636264EA0246202466049 +B0943144546795N00636202EA0249902472040 +B0943244546748N00636155EA0251302485041 +B0943344546706N00636089EA0251702495036 +B0943444546671N00636024EA0250902502044 +B0943544546641N00635946EA0249102503038 +B0944044546610N00635869EA0247102497046 +B0944144546584N00635786EA0247402490047 +B0944244546564N00635703EA0249802488043 +B0944344546541N00635627EA0250802494047 +B0944444546518N00635543EA0253002503040 +B0944544546490N00635463EA0253402513046 +B0945044546466N00635381EA0253302521048 +B0945144546441N00635301EA0252802526045 +B0945244546422N00635225EA0253002529042 +B0945344546400N00635146EA0254002530038 +B0945444546383N00635073EA0256202537044 +B0945544546361N00634998EA0256702547044 +B0946054546337N00634908EA0255702554045 +B0946154546318N00634818EA0256002556043 +B0946254546295N00634735EA0255602558045 +B0946354546281N00634647EA0256402559045 +B0946454546259N00634566EA0257102562042 +B0946554546232N00634487EA0256702564039 +B0947054546207N00634421EA0259202570043 +B0947154546176N00634349EA0259702578048 +B0947254546133N00634273EA0260902587044 +B0947354546096N00634197EA0261302596043 +B0947454546059N00634129EA0260202600041 +B0947554546031N00634044EA0259802601045 +B0948054546006N00633951EA0261702604048 +B0948154545974N00633884EA0262702611038 +B0948254545938N00633807EA0263002618048 +B0948354545898N00633726EA0265302625048 +B0948454545849N00633687EA0264102634050 +B0948554545806N00633610EA0262302633050 +B0949054545781N00633514EA0261502629058 +B0949154545756N00633416EA0262702627052 +B0949254545729N00633334EA0263002629053 +B0949354545704N00633240EA0261402629057 +B0949454545675N00633143EA0259102621055 +B0949554545641N00633047EA0257502609063 +B0950054545602N00632965EA0255502596058 +B0950154545566N00632890EA0253402580054 +B0950254545542N00632801EA0251102563056 +B0950354545519N00632702EA0248702543059 +B0950454545492N00632603EA0246402523056 +B0950554545448N00632506EA0243802500061 +B0951054545410N00632407EA0242002478057 +B0951154545383N00632302EA0240302457058 +B0951254545354N00632197EA0238302437060 +B0951354545326N00632094EA0236302417060 +B0951454545297N00631992EA0234502397057 +B0951554545270N00631892EA0231702376058 +B0952054545241N00631796EA0229502355055 +B0952154545219N00631698EA0227102332059 +B0952254545187N00631613EA0225202310057 +B0952354545154N00631522EA0222902288056 +B0952454545108N00631438EA0219602264059 +B0952554545067N00631341EA0217502238057 +B0953054545055N00631252EA0218802218040 +B0953154545034N00631207EA0220702212036 +B0953254545021N00631265EA0222902214039 +B0953354545017N00631245EA0225802223042 +B0953454545015N00631268EA0228102239047 +B0953554545035N00631269EA0230502256043 +B0954064544999N00631240EA0232502276037 +B0954164545039N00631260EA0233502294044 +B0954264545011N00631258EA0235202313047 +B0954364545039N00631286EA0237502330046 +B0954464545045N00631255EA0239402349047 +B0954564545044N00631311EA0241802369043 +B0955064545064N00631294EA0244202390048 +B0955164545041N00631293EA0246802412043 +B0955264545073N00631274EA0248702434049 +B0955364545055N00631275EA0251402457044 +B0955464545075N00631313EA0253802480046 +B0955564545060N00631253EA0255602504041 +B0956064545060N00631170EA0256602524046 +B0956164545059N00631097EA0257902542043 +B0956264545052N00631020EA0257702557046 +B0956364545044N00630941EA0258002566046 +B0956464545035N00630852EA0259002574047 +B0956564545027N00630778EA0260802584037 +B0957064545019N00630698EA0258902591046 +B0957164545006N00630610EA0257302590048 +B0957264544996N00630516EA0257102585042 +B0957364544989N00630423EA0255402579040 +B0957464544979N00630347EA0255202571046 +B0957564544966N00630268EA0256702568046 +B0958064544937N00630218EA0256602568040 +B0958164544889N00630234EA0258802571040 +B0958264544851N00630215EA0261002581038 +B0958364544820N00630159EA0260402591044 +B0958464544790N00630103EA0260002597040 +B0958564544757N00630040EA0258102596041 +B0959064544727N00629965EA0255802589043 +B0959164544699N00629887EA0254202578044 +B0959264544671N00629820EA0253902567038 +B0959364544649N00629750EA0255102559036 +B0959464544636N00629693EA0257402560038 +B0959564544629N00629625EA0256602563046 +B1000064544661N00629540EA0259102567047 +B1000164544700N00629439EA0261502579045 +B1000264544722N00629325EA0261802592047 +B1000364544732N00629214EA0262502602030 +B1000464544731N00629111EA0261702608044 +B1000564544708N00629022EA0259802610044 +B1001064544670N00628946EA0256902603058 +B1001164544631N00628853EA0254202590059 +B1001264544582N00628767EA0252102574060 +B1001364544541N00628679EA0251602557048 +B1001474544501N00628592EA0250702542051 +B1001574544467N00628505EA0249502529052 +B1002074544435N00628409EA0248302516055 +B1002174544406N00628307EA0246802503055 +B1002274544379N00628202EA0244302488056 +B1002374544359N00628082EA0242002470056 +B1002474544345N00627960EA0240102452056 +B1002574544335N00627837EA0238102433057 +B1003074544326N00627709EA0236702415056 +B1003174544313N00627585EA0235302398059 +B1003274544290N00627465EA0233902381059 +B1003374544269N00627346EA0232602365051 +B1003474544247N00627240EA0231602352049 +B1003574544226N00627136EA0230502339048 +B1004074544208N00627031EA0229402328047 +B1004174544195N00626925EA0228202316047 +B1004274544176N00626822EA0227102305048 +B1004374544152N00626721EA0226102293047 +B1004474544130N00626617EA0224802281048 +B1004574544110N00626510EA0223702270047 +B1005074544092N00626401EA0222302258047 +B1005174544080N00626290EA0220502245048 +B1005274544069N00626180EA0218602230047 +B1005374544061N00626069EA0217102215047 +B1005474544051N00625960EA0215702199047 +B1005574544044N00625850EA0214202184049 +B1006074544036N00625744EA0212702169047 +B1006174544028N00625641EA0211102154047 +B1006274544019N00625537EA0209602138047 +B1006374544007N00625433EA0208202123047 +B1006474543995N00625329EA0207002109047 +B1006574543984N00625225EA0205902095049 +B1007074543974N00625121EA0204702083046 +B1007174543955N00625023EA0203402070047 +B1007274543938N00624923EA0202202057047 +B1007374543922N00624824EA0201202045047 +B1007474543911N00624725EA0200302034049 +B1007574543894N00624628EA0199202024047 +B1008074543871N00624533EA0198102013048 +B1008174543848N00624440EA0196802001047 +B1008274543827N00624348EA0195501989048 +B1008374543810N00624256EA0194301977046 +B1008474543794N00624162EA0193201965046 +B1008574543779N00624066EA0192101953047 +B1009074543760N00623970EA0191101942046 +B1009174543739N00623874EA0190101931047 +B1009274543716N00623782EA0189101920045 +B1009384543687N00623682EA0188001908047 +B1009484543664N00623590EA0186901897047 +B1009584543641N00623498EA0185601887048 +B1010084543601N00623399EA0184201875057 +B1010184543561N00623310EA0183301863043 +B1010284543541N00623220EA0182001851048 +B1010384543526N00623127EA0180801839048 +B1010484543511N00623025EA0179401827052 +B1010584543490N00622923EA0178101814053 +B1011084543470N00622820EA0176701801053 +B1011184543453N00622717EA0175201787053 +B1011284543430N00622614EA0173801773053 +B1011384543409N00622510EA0172201758053 +B1011484543389N00622406EA0170701744053 +B1011584543370N00622302EA0169101729053 +B1012084543348N00622201EA0167801714053 +B1012184543326N00622100EA0166501699053 +B1012284543301N00622002EA0164901685053 +B1012384543280N00621912EA0165001672035 +B1012484543279N00621841EA0165401666036 +B1012584543297N00621860EA0165001661043 +B1013084543262N00621827EA0165401658037 +B1013184543292N00621823EA0164801656037 +B1013284543255N00621815EA0164101652039 +B1013384543232N00621736EA0163201649039 +B1013484543186N00621678EA0161401642040 +B1013584543156N00621609EA0160701632032 +B1014084543127N00621576EA0162801627041 +B1014184543159N00621585EA0164501628040 +B1014284543132N00621566EA0165401633039 +B1014384543140N00621629EA0165401640037 +B1014484543160N00621584EA0165901644035 +B1014584543132N00621522EA0167001649042 +B1015084543120N00621556EA0168701657032 +B1015184543154N00621528EA0170301666040 +B1015284543119N00621527EA0171201678036 +B1015384543142N00621581EA0172501689037 +B1015484543169N00621541EA0173301701041 +B1015584543126N00621524EA0174201711042 +B1016084543121N00621593EA0175401722037 +B1016184543153N00621569EA0175201731042 +B1016284543155N00621497EA0175301738039 +B1016384543155N00621420EA0175701744035 +B1016484543183N00621445EA0176301750035 +B1016584543165N00621426EA0176601756043 +B1017084543208N00621466EA0177101760037 +B1017184543184N00621524EA0177901765039 +B1017294543189N00621478EA0178501771038 +B1017394543238N00621506EA0179501778041 +B1017494543226N00621547EA0179901786043 +B1017594543245N00621502EA0181301793039 +B1018094543255N00621535EA0182801802043 +B1018194543220N00621493EA0183601811039 +B1018294543191N00621428EA0184001819045 +B1018394543159N00621362EA0183601824041 +B1018494543125N00621299EA0181601825045 +B1018594543096N00621231EA0180201821043 +B1019094543052N00621148EA0177701811053 +B1019194543007N00621060EA0176001797058 +B1019294542959N00620976EA0174101783056 +B1019394542903N00620899EA0172201767047 +B1019494542857N00620842EA0171201750036 +B1019594542830N00620787EA0173101739033 +B1020094542816N00620810EA0173301735033 +B1020194542871N00620802EA0174101736038 +B1020294542855N00620741EA0174801739041 +B1020394542817N00620716EA0174701742041 +B1020494542782N00620681EA0174601745026 +B1020594542738N00620638EA0174801745040 +B1021094542704N00620585EA0178101749036 +B1021194542687N00620624EA0179701761036 +B1021294542732N00620634EA0181101774038 +B1021394542715N00620657EA0182601789034 +B1021494542720N00620595EA0184501804038 +B1021594542723N00620627EA0186701821040 +B1022094542699N00620575EA0188301839044 +B1022194542708N00620610EA0190601856044 +B1022294542714N00620590EA0192201874048 +B1022394542693N00620567EA0193601890045 +B1022494542701N00620601EA0194601906037 +B1022594542651N00620579EA0195401920044 +B1023094542681N00620541EA0196001932039 +B1023194542670N00620580EA0196501942041 +B1023294542610N00620558EA0196701951039 +B1023394542552N00620521EA0194701955045 +B1023494542494N00620482EA0193201952041 +B1023594542437N00620444EA0192201945044 +B1024094542384N00620394EA0192901938041 +B1024194542334N00620340EA0193601936048 +B1024294542285N00620294EA0193301935050 +B1024394542230N00620253EA0193201933043 +B1024494542188N00620203EA0194501933034 +B1024594542148N00620171EA0195201937047 +B1025094542101N00620135EA0194901941044 +B1025204542051N00620090EA0193901941048 +B1025304542009N00620057EA0193201939043 +B1025404541959N00620029EA0191701934042 +B1025504541907N00620007EA0190101925049 +B1026004541861N00619979EA0190401917036 +B1026104541813N00619954EA0191001913040 +B1026204541765N00619928EA0190501910038 +B1026304541715N00619887EA0190201907038 +B1026404541669N00619851EA0191301905031 +B1026504541627N00619806EA0191101907038 +B1027004541589N00619757EA0191901908042 +B1027104541578N00619700EA0195401915041 +B1027204541578N00619720EA0198901932047 +B1027304541585N00619726EA0201901953051 +B1027404541597N00619719EA0205401978046 +B1027504541578N00619683EA0208402005040 +B1028004541609N00619704EA0210902033040 +B1028104541587N00619680EA0213502061044 +B1028204541596N00619718EA0216402087035 +B1028304541549N00619700EA0218402114037 +B1028404541576N00619671EA0219602138041 +B1028504541618N00619666EA0222202161037 +B1029004541585N00619609EA0223202183045 +B1029104541547N00619546EA0222202199042 +B1029204541515N00619471EA0219702203051 +B1029304541480N00619388EA0217602198062 +B1029404541444N00619290EA0216102188058 +B1029504541420N00619186EA0214902176057 +B1030004541395N00619084EA0212502163056 +B1030104541363N00618972EA0210302146058 +B1030204541333N00618890EA0209402130045 +B1030304541306N00618814EA0208002117046 +B1030404541279N00618723EA0205502103051 +B1030504541271N00618634EA0203902087041 +B1031004541239N00618560EA0202502071051 +B1031104541208N00618485EA0201302056049 +B1031204541182N00618406EA0200002041046 +B1031304541159N00618325EA0199102026042 +B1031404541138N00618245EA0197902013047 +B1031504541105N00618176EA0196802000044 +B1032004541070N00618108EA0195001987056 +B1032104541033N00618019EA0193501972056 +B1032204540994N00617933EA0191701956058 +B1032304540946N00617850EA0189901938055 +B1032404540902N00617765EA0187901920056 +B1032504540857N00617678EA0186201902055 +B1033004540812N00617589EA0184301884056 +B1033114540758N00617500EA0181701863057 +B1033214540709N00617432EA0180201844053 +B1033314540670N00617376EA0179801828042 +B1033414540625N00617311EA0180401817038 +B1033514540581N00617238EA0181201814043 +B1034014540552N00617158EA0180401811043 +B1034114540533N00617082EA0182001811039 +B1034214540493N00617088EA0183301816037 +B1034314540506N00617129EA0184701823035 +B1034414540518N00617073EA0186601835039 +B1034514540482N00617086EA0188301849030 +B1035014540505N00617136EA0190101863039 +B1035114540516N00617085EA0192801880038 +B1035214540486N00617110EA0195401901041 +B1035314540518N00617152EA0198601926034 +B1035414540551N00617094EA0199201950037 +B1035514540513N00617033EA0201001968037 +B1036014540505N00617064EA0204201987042 +B1036114540491N00617029EA0207202011048 +B1036214540520N00617033EA0210302037041 +B1036314540489N00617024EA0213002064041 +B1036414540530N00617038EA0215402090044 +B1036514540535N00616968EA0216402117036 +B1037014540477N00616977EA0217402135039 +B1037114540459N00616936EA0218402151042 +B1037214540457N00616964EA0219602166045 +B1037314540416N00616897EA0218702176045 +B1037414540372N00616831EA0216402177054 +B1037514540317N00616745EA0214302169060 +B1038014540263N00616658EA0212302157057 +B1038114540203N00616580EA0210102142057 +B1038214540150N00616495EA0207302123065 +B1038314540089N00616404EA0205002102065 +B1038414540022N00616322EA0202502079064 +B1038514539954N00616242EA0200302056063 +B1039014539890N00616162EA0198002033061 +B1039114539830N00616097EA0196402011055 +B1039214539771N00616037EA0194401990055 +B1039314539711N00615981EA0192801970051 +B1039414539666N00615942EA0191701954042 +B1039514539621N00615900EA0190501938043 +B1040014539573N00615876EA0189901924040 +B1040114539526N00615848EA0191301916032 +B1040214539501N00615864EA0190601914036 +B1040314539546N00615838EA0191801913032 +B1040424539562N00615861EA0191601915040 +B1040524539550N00615815EA0192401919048 +B1041024539546N00615859EA0192901923038 +B1041124539526N00615823EA0192901927039 +B1041224539556N00615848EA0193801931042 +B1041324539547N00615813EA0193501934043 +B1041424539557N00615851EA0193801936039 +B1041524539511N00615868EA0192901937040 +B1042024539458N00615844EA0193101935038 +B1042124539421N00615797EA0193701936042 +B1042224539433N00615816EA0194001937044 +B1042324539388N00615829EA0195201941041 +B1042424539392N00615862EA0195301946037 +B1042524539403N00615788EA0195601949034 +B1043024539357N00615746EA0195401952041 +B1043124539301N00615740EA0192801949045 +B1043224539236N00615751EA0190501938052 +B1043324539173N00615758EA0189501924048 +B1043424539124N00615764EA0190501916037 +B1043524539077N00615773EA0189001911042 +B1044024539019N00615778EA0188601903040 +B1044124538962N00615772EA0187801896039 +B1044224538918N00615741EA0188901893041 +B1044324538904N00615659EA0189901893035 +B1044424538868N00615630EA0190101896041 +B1044524538852N00615675EA0189901898038 +B1045024538894N00615711EA0189901899044 +B1045124538878N00615745EA0189701901039 +B1045224538874N00615675EA0190101902045 +B1045324538877N00615705EA0190801904037 +B1045424538831N00615724EA0190901907041 +B1045524538794N00615668EA0191001908038 +B1046024538843N00615666EA0190101907039 +B1046124538865N00615722EA0189401905042 +B1046224538877N00615784EA0188601900036 +B1046324538850N00615787EA0188301896043 +B1046424538895N00615772EA0188401891041 +B1046524538935N00615800EA0189201891043 +B1047024538914N00615741EA0191101895040 +B1047124538901N00615791EA0191501902039 +B1047224538935N00615760EA0191801905042 +B1047324538907N00615700EA0193301912032 +B1047424538882N00615734EA0192601918040 +B1047524538920N00615762EA0192801923036 +B1048024538938N00615688EA0193901927035 +B1048124538913N00615674EA0194901933043 +B1048224538949N00615662EA0196201942041 +B1048334538918N00615623EA0197001952042 +B1048434538942N00615649EA0197701960036 +B1048534538952N00615573EA0198201967037 +B1049034538905N00615535EA0196701971042 +B1049134538836N00615492EA0193501964058 +B1049234538763N00615447EA0190601949054 +B1049334538691N00615412EA0188901932057 +B1049434538619N00615382EA0187901915056 +B1049534538542N00615355EA0186401900061 +B1050034538469N00615336EA0184501883055 +B1050134538392N00615329EA0183501867053 +B1050234538315N00615324EA0182201853056 +B1050334538238N00615323EA0181901839046 +B1050434538183N00615317EA0183001834036 +B1050534538126N00615314EA0182301831044 +B1051034538070N00615306EA0183601829039 +B1051134538013N00615305EA0181801826042 +B1051234537950N00615315EA0181401821041 +B1051334537893N00615309EA0181301817043 +B1051434537845N00615286EA0183401817031 +B1051534537800N00615254EA0183001821040 +B1052034537748N00615218EA0183301824041 +B1052134537703N00615166EA0184601827037 +B1052234537669N00615103EA0187401834039 +B1052334537642N00615039EA0187901844037 +B1052434537620N00614968EA0188101853037 +B1052534537591N00614898EA0186801859040 +B1053034537555N00614827EA0185501860044 +B1053134537522N00614755EA0187101860035 +B1053234537489N00614693EA0187101863039 +B1053334537450N00614632EA0185701864043 +B1053434537409N00614575EA0183701859037 +B1053534537365N00614512EA0184601851029 +B1054034537332N00614485EA0185201850040 +B1054134537355N00614537EA0188201853046 +B1054234537353N00614516EA0190401863039 +B1054334537347N00614536EA0192701880043 +B1054434537379N00614500EA0194601898043 +B1054534537353N00614526EA0196201917041 +B1055034537378N00614523EA0198001936041 +B1055134537380N00614481EA0199801953039 +B1055234537399N00614505EA0200601973045 +B1055334537365N00614458EA0201401985041 +B1055434537324N00614405EA0201601997039 +B1055534537273N00614338EA0200702003042 +B1056034537225N00614287EA0199002003045 +B1056144537171N00614228EA0197401995042 +B1056244537126N00614168EA0196801986045 +B1056344537095N00614108EA0198601981040 +B1056444537058N00614046EA0199601984042 +B1056544537024N00613980EA0199601987038 +B1057044536995N00613922EA0198901989043 +B1057144536963N00613860EA0198401987042 +B1057244536930N00613802EA0199401986039 +B1057344536898N00613745EA0199501988043 +B1057444536870N00613687EA0200501989034 +B1057544536846N00613623EA0200501991038 +B1058044536823N00613553EA0202101997044 +B1058144536794N00613487EA0203102004038 +B1058244536764N00613423EA0201702010043 +B1058344536727N00613357EA0201802011041 +B1058444536699N00613296EA0202602013038 +B1058544536672N00613243EA0204902019034 +B1059044536642N00613221EA0206802031043 +B1059144536670N00613252EA0209002045042 +B1059244536656N00613199EA0210802064044 +B1059344536646N00613249EA0212102081040 +B1059444536686N00613251EA0213502098040 +B1059544536681N00613177EA0216002114040 +B1100044536661N00613116EA0219202134037 +B1100144536632N00613049EA0221802158040 +B1100244536604N00612961EA0219802174045 +B1100344536575N00612887EA0217902180036 +B1100444536541N00612814EA0215902176044 +B1100544536510N00612736EA0214602168043 +B1101044536480N00612656EA0215302160036 +B1101144536457N00612598EA0219102162034 +B1101244536450N00612631EA0221702174041 +B1101344536480N00612572EA0225802193039 +B1101444536448N00612562EA0229702220037 +B1101544536478N00612606EA0231302249035 +B1102044536514N00612547EA0233802272028 +B1102144536534N00612498EA0236902299052 +B1102244536516N00612499EA0242002327034 +B1102344536550N00612492EA0244202359043 +B1102444536552N00612469EA0246702391055 +B1102544536531N00612459EA0250202423043 +B1103044536545N00612466EA0253502453039 +B1103144536561N00612397EA0255702483045 +B1103244536558N00612417EA0258702511034 +B1103344536532N00612337EA0260602539042 +B1103454536502N00612239EA0259202561041 +B1103554536476N00612143EA0258502570043 +B1104054536449N00612051EA0258702574053 +B1104154536425N00611960EA0259102579039 +B1104254536383N00611881EA0257602581056 +B1104354536324N00611801EA0256402576057 +B1104454536272N00611719EA0254702569057 +B1104554536228N00611627EA0254802561045 +B1105054536190N00611525EA0253402554054 +B1105154536152N00611420EA0252402545053 +B1105254536111N00611321EA0252102536048 +B1105354536074N00611228EA0251802530049 +B1105454536038N00611122EA0250202523056 +B1105554536002N00611015EA0248602512057 +B1106054535965N00610906EA0247402499053 +B1106154535938N00610799EA0246402488056 +B1106254535907N00610690EA0245402476054 +B1106354535882N00610610EA0247002469041 +B1106454535922N00610596EA0247102468048 +B1106554535881N00610577EA0248002469041 +B1107054535860N00610495EA0247202470042 +B1107154535851N00610407EA0247802470043 +B1107254535835N00610306EA0248002473042 +B1107354535852N00610220EA0249402476048 +B1107454535836N00610222EA0250402481043 +B1107554535793N00610140EA0251202490044 +B1108054535771N00610043EA0251802498041 +B1108154535752N00609942EA0251602504042 +B1108254535736N00609853EA0249802507036 +B1108354535718N00609754EA0248002503044 +B1108454535702N00609660EA0245702494043 +B1108554535700N00609560EA0242602479046 +B1109054535695N00609447EA0239802459057 +B1109154535682N00609314EA0236702437063 +B1109254535640N00609200EA0234202412059 +B1109354535619N00609071EA0231802388058 +B1109454535614N00608929EA0229702363057 +B1109554535626N00608794EA0227502339058 +B1110054535637N00608657EA0225502315054 +B1110154535648N00608522EA0223502292057 +B1110254535661N00608389EA0221602269059 +B1110354535672N00608259EA0219702248058 +B1110454535667N00608125EA0217302227054 +B1110554535670N00607998EA0215502206059 +B1111054535664N00607874EA0213802187054 +B1111154535667N00607748EA0211302166058 +B1111264535671N00607611EA0209202143060 +B1111364535684N00607486EA0206502121060 +B1111464535691N00607360EA0205002098059 +B1111564535683N00607266EA0204302080043 +B1112064535684N00607178EA0202402063043 +B1112164535690N00607090EA0199102044053 +B1112264535700N00606994EA0196902022047 +B1112364535726N00606957EA0198102005037 +B1112464535755N00607008EA0199701999043 +B1112564535715N00606994EA0199101996028 +B1113064535689N00606935EA0200901992031 +B1113164535698N00606942EA0203301998048 +B1113264535665N00606926EA0205302010037 +B1113364535679N00606978EA0205902023048 +B1113464535631N00606982EA0205702034042 +B1113564535638N00606925EA0205302041037 +B1114064535658N00606871EA0205802044034 +B1114164535680N00606833EA0207102051036 +B1114264535668N00606858EA0209602060046 +B1114364535694N00606841EA0212102073043 +B1114464535658N00606852EA0214002090041 +B1114564535687N00606824EA0216402109036 +B1115064535668N00606867EA0218002129042 +B1115164535664N00606819EA0219302145038 +B1115264535696N00606859EA0220602164039 +B1115364535730N00606910EA0222902182035 +B1115464535700N00606932EA0223802199040 +B1115564535724N00606892EA0226102213035 +B1116064535709N00606926EA0227702231039 +B1116164535731N00606882EA0229902249034 +B1116264535718N00606929EA0231702268038 +B1116364535723N00606872EA0232502285042 +B1116464535727N00606920EA0233702300044 +B1116564535723N00606872EA0234002312042 +B1117064535749N00606906EA0236502324046 +B1117164535707N00606904EA0236902338040 +B1117264535747N00606863EA0237602348039 +B1117364535743N00606907EA0238802358047 +B1117464535734N00606854EA0240402370039 +B1117564535740N00606896EA0241502382046 +B1118064535696N00606846EA0240802393047 +B1118164535668N00606749EA0239502397044 +B1118264535640N00606654EA0238702396043 +B1118364535610N00606552EA0236402391044 +B1118464535551N00606475EA0234902382045 +B1118574535484N00606385EA0233002367056 +B1119074535415N00606310EA0231502352059 +B1119174535346N00606227EA0230502338060 +B1119274535277N00606139EA0229302325058 +B1119374535213N00606051EA0227702310058 +B1119474535143N00605977EA0226102296058 +B1119574535077N00605889EA0224802281058 +B1120074535017N00605795EA0223302266058 +B1120174534958N00605699EA0221702251058 +B1120274534899N00605605EA0220002236059 +B1120374534838N00605509EA0218402220058 +B1120474534772N00605421EA0217002204058 +B1120574534710N00605326EA0215802189058 +B1121074534646N00605234EA0214902175058 +B1121174534583N00605140EA0214002162058 +B1121274534523N00605043EA0212802150058 +B1121374534459N00604954EA0211402137057 +B1121474534396N00604861EA0210002124058 +B1121574534334N00604767EA0208502111057 +B1122074534280N00604691EA0207802098045 +B1122174534235N00604618EA0207202087044 +B1122274534192N00604537EA0206002077043 +B1122374534146N00604457EA0204502066044 +B1122474534098N00604385EA0203502054044 +B1122574534044N00604327EA0202802044045 +B1123074533989N00604267EA0202702035042 +B1123174533944N00604202EA0203302030034 +B1123274533969N00604164EA0205002030040 +B1123374533940N00604186EA0206202036037 +B1123474533955N00604135EA0206702043040 +B1123574533983N00604176EA0208902052035 +B1124074533936N00604161EA0210402063045 +B1124174533953N00604160EA0212302076036 +B1124274533916N00604131EA0212602089040 +B1124374533959N00604100EA0214202101042 +B1124474533937N00604104EA0215502113045 +B1124574533954N00604098EA0216802127040 +B1125074533919N00604039EA0217202139039 +B1125174533891N00603953EA0216402149042 +B1125274533862N00603958EA0213202150048 +B1125374533902N00604017EA0212402142050 +B1125474533929N00604082EA0212002134048 +B1125574533949N00604148EA0213802130037 +B1126074533982N00604169EA0213402132042 +B1126174533973N00604087EA0213302131041 +B1126274533918N00604058EA0213202130048 +B1126374533951N00604042EA0213402130039 +B1126484533912N00604085EA0213602131040 +B1126584533848N00604084EA0212602131042 +B1127084533778N00604050EA0211102126044 +B1127184533719N00603990EA0209102117046 +B1127284533662N00603930EA0207602105043 +B1127384533608N00603873EA0205902091045 +B1127484533551N00603827EA0204402076042 +B1127584533491N00603793EA0202602061045 +B1128084533430N00603750EA0202202046040 +B1128184533376N00603707EA0201602035043 +B1128284533324N00603658EA0201002025044 +B1128384533276N00603621EA0201702017033 +B1128484533244N00603628EA0202402016037 +B1128584533287N00603645EA0203802019040 +B1129084533284N00603565EA0204402023035 +B1129184533241N00603517EA0203702027042 +B1129284533189N00603502EA0202802027033 +B1129384533136N00603499EA0202702025040 +B1129484533083N00603520EA0203702024037 +B1129584533083N00603576EA0202702025046 +B1130084533134N00603610EA0204302027044 +B1130184533170N00603567EA0205302032039 +B1130284533145N00603511EA0206802038037 +B1130384533099N00603522EA0208702048034 +B1130484533114N00603564EA0210102060038 +B1130584533138N00603507EA0211002073043 +B1131084533095N00603455EA0212402085039 +B1131184533077N00603497EA0212802096039 +B1131284533111N00603510EA0213402106029 +B1131384533143N00603435EA0213102113039 +B1131484533107N00603361EA0213002118041 +B1131584533063N00603296EA0209802117045 +B1132084533021N00603192EA0206702105056 +B1132184532968N00603086EA0203702087062 +B1132284532922N00602971EA0201302066060 +B1132384532876N00602857EA0198902043059 +B1132484532814N00602764EA0196402019058 +B1132584532746N00602684EA0193801995057 +B1133084532683N00602603EA0190601970056 +B1133184532630N00602511EA0189501944046 +B1133284532588N00602446EA0188301923041 +B1133384532542N00602385EA0187901906043 +B1133484532492N00602325EA0187301893044 +B1133584532447N00602260EA0186601882043 +B1134084532405N00602189EA0185801872042 +B1134184532363N00602117EA0184901862042 +B1134294532312N00602051EA0184101852043 +B1134394532261N00602001EA0182901843045 +B1134494532211N00601941EA0182001833043 +B1134594532161N00601886EA0180701824042 +B1135094532112N00601857EA0179901814043 +B1135194532078N00601826EA0179701806040 +B1135294532054N00601786EA0179201799041 +B1135394532036N00601718EA0178701794045 +B1135494532064N00601677EA0177001788039 +B1135594532027N00601698EA0175101776037 +B1136094531982N00601669EA0173301763045 +B1136194531931N00601620EA0171101748042 +B1136294531867N00601565EA0167801729056 +B1136394531796N00601520EA0164901707056 +B1136494531729N00601454EA0162701682058 +B1136594531666N00601381EA0160901660057 +B1137094531607N00601321EA0159901640047 +B1137194531559N00601265EA0159201624043 +B1137294531516N00601199EA0158401610043 +B1137394531469N00601142EA0157101598042 +B1137494531425N00601077EA0155701584044 +B1137594531385N00600999EA0154901571047 +B1138094531338N00600930EA0153901559045 +B1138194531289N00600860EA0152501546046 +B1138294531247N00600787EA0150901533046 +B1138394531203N00600713EA0149601519048 +B1138494531158N00600641EA0148201506042 +B1138594531110N00600583EA0146701495046 +B1139094531063N00600521EA0145301482047 +B1139194531014N00600450EA0143001466059 +B1139294530957N00600368EA0140901447059 +B1139394530897N00600298EA0138901428058 +B1139494530838N00600225EA0137001408057 +B1139594530785N00600155EA0135401389057 +B1140094530729N00600080EA0133701371058 +B1140194530669N00600014EA0132001353058 +B1140294530609N00559952EA0130301339056 +B1140394530548N00559889EA0128801321057 +B1140494530492N00559822EA0127601303053 +B1140594530445N00559754EA0126301286052 +B1141094530397N00559688EA0124901271051 +B1141194530345N00559628EA0123201255053 +B1141294530293N00559569EA0121601239051 +B1141394530240N00559508EA0120301224052 +B1141494530179N00559458EA0118501209053 +B1141594530118N00559406EA0117001193054 +B1142094530063N00559344EA0115401177050 +B1142204530002N00559281EA0114301161053 +B1142304529945N00559229EA0113301148051 +B1142404529886N00559179EA0112001135052 +B1142504529825N00559129EA0110701122052 +B1143004529768N00559076EA0109401109050 +B1143104529714N00559019EA0108101096052 +B1143204529658N00558962EA0106801083051 +B1143304529602N00558904EA0105101069049 +B1143404529535N00558863EA0103801054052 +B1143504529477N00558814EA0102001039051 +B1144004529421N00558765EA0099701022052 +B1144104529367N00558729EA0097501004040 +B1144204529314N00558680EA0094400982046 +B1144304529258N00558634EA0091600959050 +B1144404529200N00558584EA0088800933045 +B1144504529141N00558540EA0085900906046 +B1145004529081N00558486EA0084600881048 +B1145104529024N00558440EA0084300863034 +B1145204528974N00558406EA0082900850040 +B1145304528923N00558360EA0081600835040 +B1145404528868N00558318EA0079900820038 +B1145504528815N00558267EA0078500804038 +B1146004528763N00558210EA0077900791038 +B1146104528711N00558155EA0077200780040 +B1146204528676N00558096EA0077600773033 +B1146304528678N00558124EA0077500769038 +B1146404528617N00558125EA0078100766035 +B1146504528619N00558086EA0078300766035 +B1147004528618N00558136EA0078600767037 +B1147104528564N00558120EA0078900768031 +B1147204528570N00558088EA0079300770035 +B1147304528564N00558145EA0080500775037 +B1147404528519N00558117EA0080800781031 +B1147504528533N00558108EA0081700785036 +B1148004528488N00558144EA0082600794035 +B1148104528468N00558089EA0083200800037 +B1148204528486N00558101EA0083900805031 +B1148304528444N00558148EA0084400813037 +B1148404528417N00558096EA0085800819034 +B1148504528405N00558134EA0086600826040 +B1149004528370N00558088EA0087700834036 +B1149104528384N00558078EA0088700841039 +B1149204528335N00558089EA0089800853035 +B1149304528336N00558042EA0090300862037 +B1149404528327N00558092EA0091900873041 +B1149504528281N00558062EA0091800883037 +B1150014528308N00558033EA0092500889041 +B1150114528317N00558001EA0094900898037 +B1150214528268N00558002EA0096400911036 +B1150314528278N00558043EA0098000926042 +B1150414528291N00557997EA0098700941036 +B1150514528273N00557930EA0099300953039 +B1151014528286N00557938EA0101100966037 +B1151114528243N00557923EA0102800979034 +B1151214528262N00557933EA0104800995040 +B1151314528218N00557926EA0107101011031 +B1151414528245N00557895EA0107501027039 +B1151514528244N00557951EA0108701041032 +B1152014528201N00557933EA0110801055035 +B1152114528226N00557905EA0111001068038 +B1152214528225N00557963EA0112301079037 +B1152314528192N00557941EA0113901091036 +B1152414528221N00557977EA0114501101045 +B1152514528186N00557993EA0116101114042 +B1153014528217N00557981EA0116401125044 +B1153114528202N00558050EA0117201135047 +B1153214528178N00558007EA0118301143038 +B1153314528211N00558036EA0118401152046 +B1153414528175N00558063EA0119001159042 +B1153514528151N00558011EA0119701165039 +B1154014528173N00558029EA0120401172043 +B1154114528136N00558017EA0120901178043 +B1154214528111N00557964EA0120201183038 +B1154314528075N00557915EA0118901183040 +B1154414528039N00557868EA0116801179042 +B1154514527990N00557836EA0113201167054 +B1155014527920N00557822EA0110101147055 +B1155114527846N00557802EA0109601125044 +B1155214527816N00557753EA0110501110033 +B1155314527837N00557747EA0110001102042 +B1155414527797N00557785EA0109701096035 +B1155514527743N00557757EA0111001091035 +B1156014527734N00557719EA0111501092043 +B1156114527723N00557778EA0112701096036 +B1156214527684N00557744EA0113301102039 +B1156314527676N00557679EA0113501109039 +B1156414527677N00557603EA0115201115032 +B1156514527679N00557636EA0115401123042 +B1157014527662N00557573EA0117101130039 +B1157114527665N00557610EA0117401137033 +B1157214527630N00557553EA0119701146034 +B1157314527593N00557523EA0120501159037 +B1157424527625N00557529EA0122001173037 +B1157524527619N00557463EA0124001189040 +B1158024527631N00557490EA0125701205037 +B1158124527664N00557437EA0126901222040 +B1158224527628N00557397EA0126501233038 +B1158324527574N00557397EA0128101242041 +B1158424527570N00557331EA0129101252043 +B1158524527586N00557345EA0128801262042 +B1159024527544N00557305EA0129601268035 +B1159124527542N00557215EA0129501274044 +B1159224527548N00557118EA0126201274056 +B1159324527553N00557000EA0125001263053 +B1159424527567N00556915EA0126401258037 +B1159524527570N00556933EA0127901257035 +B1200024527574N00556858EA0129301261038 +B1200124527613N00556867EA0131001270037 +B1200224527587N00556855EA0132301282045 +B1200324527622N00556845EA0134501295045 +B1200424527624N00556811EA0136601308038 +B1200524527655N00556835EA0138201324042 +B1201024527625N00556811EA0140001340038 +B1201124527660N00556804EA0142001356039 +B1201224527623N00556798EA0144301373041 +B1201324527652N00556765EA0146501392039 +B1201424527634N00556778EA0148501414047 +B1201524527661N00556787EA0150801435037 +B1202024527641N00556762EA0152801457036 +B1202124527662N00556783EA0154601479041 +B1202224527629N00556754EA0156001500039 +B1202324527656N00556754EA0157401518045 +B1202424527620N00556708EA0158801535041 +B1202524527597N00556622EA0160501551037 +B1203024527558N00556567EA0160801566045 +B1203124527518N00556517EA0159301575043 +B1203224527479N00556466EA0158901578033 +B1203324527436N00556414EA0159401580038 +B1203424527391N00556383EA0160201584040 +B1203524527419N00556423EA0159401587043 +B1204024527469N00556456EA0159201588041 +B1204124527512N00556502EA0157601587040 +B1204224527553N00556546EA0157101582039 +B1204324527597N00556589EA0157901576038 +B1204424527640N00556621EA0160701575040 +B1204524527624N00556599EA0163501583036 +B1205034527629N00556608EA0165701600046 +B1205134527647N00556575EA0168401618046 +B1205234527624N00556565EA0171301640040 +B1205334527655N00556571EA0174601665043 +B1205434527659N00556547EA0178401694050 +B1205534527638N00556548EA0182301727050 +B1206034527644N00556556EA0185501760051 +B1206134527663N00556534EA0189201793047 +B1206234527643N00556508EA0192301827040 +B1206334527672N00556486EA0195401858044 +B1206434527634N00556465EA0198101890044 +B1206534527656N00556457EA0201801922042 +B1207034527634N00556420EA0203501952042 +B1207134527631N00556458EA0205301980037 +B1207234527575N00556443EA0203802001042 +B1207334527517N00556435EA0202602011042 +B1207434527453N00556430EA0200502011053 +B1207534527382N00556415EA0198602005056 +B1208034527311N00556406EA0196401994059 +B1208134527240N00556395EA0194101980056 +B1208234527169N00556398EA0192301963057 +B1208334527103N00556404EA0190801946059 +B1208434527036N00556407EA0189601931055 +B1208534526967N00556413EA0188201916056 +B1209034526901N00556426EA0187101902057 +B1209134526834N00556445EA0186101889048 +B1209234526768N00556449EA0184301875047 +B1209334526706N00556451EA0185501863044 +B1209434526652N00556448EA0188001861045 +B1209534526634N00556488EA0188801866040 +B1210034526682N00556473EA0191001873039 +B1210134526660N00556433EA0192901888039 +B1210234526607N00556422EA0194601904045 +B1210334526556N00556406EA0195101919041 +B1210434526497N00556398EA0195401931044 +B1210534526431N00556390EA0196301938045 +B1211034526372N00556374EA0197901948050 +B1211134526305N00556353EA0198901960052 +B1211234526234N00556335EA0199701969046 +B1211334526169N00556313EA0200001978052 +B1211434526103N00556282EA0200901986057 +B1211534526035N00556252EA0200601994055 +B1212034525963N00556220EA0200901997044 +B1212134525899N00556181EA0201002000060 +B1212234525844N00556141EA0203102006050 +B1212334525801N00556111EA0204502015037 +B1212434525756N00556086EA0207302027031 +B1212544525709N00556058EA0207002044045 +B1213044525643N00556019EA0205702051057 +B1213144525573N00555984EA0203902049044 +B1213244525506N00555970EA0203702045050 +B1213344525447N00555935EA0202402040057 +B1213444525384N00555906EA0202902035038 +B1213544525334N00555873EA0202002031043 +B1214044525280N00555840EA0200802024047 +B1214144525226N00555824EA0200802017039 +B1214244525174N00555795EA0199802012044 +B1214344525122N00555755EA0198902005047 +B1214444525061N00555723EA0198201998041 +B1214544525004N00555698EA0199201993041 +B1215044524948N00555654EA0201801996044 +B1215144524897N00555620EA0203702005044 +B1215244524846N00555583EA0205202018042 +B1215344524787N00555536EA0205502029045 +B1215444524741N00555489EA0206102038040 +B1215544524687N00555459EA0207802048051 +B1216044524638N00555411EA0209702061040 +B1216144524586N00555364EA0209102072042 +B1216244524519N00555315EA0208302075052 +B1216344524455N00555267EA0208102075046 +B1216444524396N00555228EA0212502083036 +B1216544524356N00555176EA0213502099041 +B1217044524307N00555125EA0214102112046 +B1217144524259N00555081EA0214002122051 +B1217244524198N00555029EA0215202129045 +B1217344524132N00554977EA0215602136040 +B1217444524071N00554924EA0215202140053 +B1217544524012N00554874EA0216402145050 +B1218044523950N00554815EA0217002150051 +B1218144523888N00554770EA0217802157047 +B1218244523829N00554731EA0218602163047 +B1218344523772N00554696EA0218402170046 +B1218444523700N00554653EA0216502169056 +B1218544523626N00554599EA0217402167058 +B1219044523551N00554560EA0218302169057 +B1219144523478N00554530EA0220302175051 +B1219244523420N00554505EA0221302185047 +B1219344523359N00554498EA0220402192050 +B1219444523300N00554503EA0220202195041 +B1219544523237N00554479EA0220302196051 +B1220044523167N00554449EA0220802198050 +B1220144523095N00554424EA0219602198055 +B1220244523010N00554392EA0219002195057 +B1220344522929N00554354EA0218102191055 +B1220454522842N00554321EA0217302184060 +B1220554522762N00554298EA0216202176057 +B1221054522681N00554272EA0216102170057 +B1221154522598N00554249EA0215302163055 +B1221254522518N00554218EA0215102157055 +B1221354522444N00554194EA0214002151052 +B1221454522369N00554181EA0213002144057 +B1221554522292N00554153EA0212002136057 +B1222054522216N00554124EA0211202128054 +B1222154522138N00554109EA0211202120061 +B1222254522073N00554103EA0212702117048 +B1222354522021N00554093EA0214402121030 +B1222454521976N00554048EA0215402128045 +B1222554521929N00554012EA0217802139043 +B1223054521880N00553981EA0219102153040 +B1223154521827N00553944EA0219802167039 +B1223254521771N00553912EA0219302175040 +B1223354521717N00553878EA0218802179042 +B1223454521664N00553827EA0219502181045 +B1223554521615N00553773EA0220802186033 +B1224054521571N00553742EA0221802193043 +B1224154521536N00553706EA0225002204040 +B1224254521494N00553676EA0228802225044 +B1224354521443N00553645EA0230902249038 +B1224454521400N00553598EA0232402269038 +B1224554521354N00553554EA0235302290037 +B1225054521305N00553507EA0237102313045 +B1225154521248N00553446EA0237602332052 +B1225254521192N00553398EA0235602343051 +B1225354521131N00553345EA0233502343053 +B1225454521071N00553299EA0230302335059 +B1225554521013N00553254EA0228402321055 +B1226054520966N00553200EA0229202308052 +B1226154520921N00553164EA0227602300046 +B1226254520882N00553121EA0227802290037 +B1226354520843N00553081EA0228702286048 +B1226454520795N00553045EA0228602285045 +B1226554520750N00553018EA0228702285042 +B1227054520707N00552985EA0227402282047 +B1227154520655N00552947EA0227302277046 +B1227254520606N00552910EA0228802276042 +B1227354520560N00552864EA0229002279048 +B1227454520512N00552817EA0229502283047 +B1227554520462N00552780EA0229802285040 +B1228054520411N00552735EA0229502287044 +B1228164520363N00552690EA0231602290044 +B1228264520322N00552656EA0233602300036 +B1228364520270N00552618EA0235602313048 +B1228464520218N00552587EA0238902332044 +B1228564520184N00552541EA0240902353032 +B1229064520140N00552508EA0240802370041 +B1229164520081N00552484EA0240502381046 +B1229264520030N00552439EA0241902388041 +B1229364519980N00552394EA0242502398044 +B1229464519923N00552350EA0244102408048 +B1229564519874N00552310EA0246302420047 +B1230064519818N00552274EA0246602434042 +B1230164519762N00552239EA0245102441046 +B1230264519706N00552208EA0244102441045 +B1230364519651N00552167EA0241502436043 +B1230464519598N00552116EA0240502426046 +B1230564519546N00552063EA0239102416043 +B1231064519484N00552023EA0236202402054 +B1231164519419N00551987EA0235702386049 +B1231264519358N00551956EA0235802376047 +B1231364519306N00551923EA0234302365048 +B1231464519260N00551892EA0234302356050 +B1231564519214N00551853EA0234302350038 +B1232064519168N00551821EA0232802345046 +B1232164519106N00551782EA0231302336052 +B1232264519044N00551748EA0231102326052 +B1232364518983N00551719EA0231002321055 +B1232464518920N00551684EA0230502316055 +B1232564518867N00551644EA0231602312036 +B1233064518818N00551601EA0232202314034 +B1233164518762N00551567EA0232202315045 +B1233264518708N00551535EA0231702316042 +B1233364518654N00551503EA0231702316038 +B1233464518621N00551457EA0232102316040 +B1233564518603N00551408EA0233902319040 +B1234064518591N00551350EA0235502326034 +B1234164518576N00551278EA0236302335048 +B1234264518555N00551211EA0237102345043 +B1234364518537N00551135EA0235402351046 +B1234464518515N00551055EA0234202350044 +B1234564518488N00550976EA0233302346044 +B1235064518465N00550903EA0232502340044 +B1235164518442N00550818EA0231102332055 +B1235264518419N00550732EA0230002324052 +B1235364518401N00550649EA0227602313050 +B1235464518379N00550561EA0224902296057 +B1235564518362N00550474EA0222602277055 +B1236064518345N00550384EA0220602257051 +B1236174518322N00550286EA0218602234048 +B1236274518302N00550193EA0218102216056 +B1236374518290N00550128EA0218002204038 +B1236474518277N00550057EA0216702193042 +B1236574518255N00549997EA0215002181045 +B1237074518234N00549943EA0214802170040 +B1237174518217N00549886EA0213302161041 +B1237274518201N00549822EA0212302149040 +B1237374518237N00549762EA0212502139046 +B1237474518284N00549716EA0212302134040 +B1237574518323N00549757EA0211202128044 +B1238074518284N00549832EA0209702120038 +B1238174518222N00549828EA0209302111044 +B1238274518170N00549833EA0208502104040 +B1238374518118N00549820EA0208102097040 +B1238474518069N00549800EA0207202089043 +B1238574518042N00549799EA0207002083041 +B1239074518017N00549787EA0209102081039 +B1239174518060N00549789EA0210802085042 +B1239274518047N00549814EA0212902093034 +B1239374518094N00549809EA0214602108038 +B1239474518088N00549869EA0216502122029 +B1239574518097N00549841EA0218602140042 +B1240074518106N00549890EA0221402158035 +B1240174518146N00549867EA0222802179040 +B1240274518150N00549940EA0223102197041 +B1240374518121N00549929EA0224202208032 +B1240474518160N00549900EA0224302221044 +B1240574518167N00549969EA0226002232041 +B1241074518166N00549933EA0226602244037 +B1241174518223N00549975EA0225202249042 +B1241274518209N00550061EA0226102252042 +B1241374518174N00550110EA0227302258037 +B1241474518136N00550110EA0228102264039 +B1241574518097N00550076EA0228602271043 +B1242074518066N00550021EA0230402278039 +B1242174518042N00550052EA0232402288044 +B1242274518072N00550030EA0234402303043 +B1242374518039N00550009EA0234102317039 +B1242474518013N00549975EA0236602329039 +B1242574518030N00550007EA0238802346044 +B1243074517991N00550006EA0240102362039 +B1243174517966N00549964EA0242402379041 +B1243274517943N00549911EA0245102399045 +B1243374517918N00549866EA0246902420041 +B1243474517897N00549811EA0245102436050 +B1243584517883N00549726EA0242502439058 +B1244084517882N00549650EA0240902435053 +B1244184517877N00549565EA0238602425058 +B1244284517880N00549485EA0239902414046 +B1244384517892N00549428EA0241202410039 +B1244484517882N00549385EA0242602412043 +B1244584517865N00549321EA0242802416042 +B1245084517843N00549245EA0240302417049 +B1245184517826N00549167EA0238602411056 +B1245284517810N00549076EA0237202400055 +B1245384517791N00548986EA0235802389061 +B1245484517773N00548897EA0235102377056 +B1245584517756N00548804EA0234002367058 +B1246084517742N00548708EA0232302356059 +B1246184517727N00548615EA0230602342062 +B1246284517714N00548517EA0230002329059 +B1246384517700N00548422EA0230202319058 +B1246484517699N00548343EA0232702317033 +B1246584517673N00548360EA0233302320042 +B1247084517726N00548394EA0233702325044 +B1247184517742N00548328EA0234502332040 +B1247284517731N00548247EA0233602335052 +B1247384517718N00548155EA0233002334048 +B1247484517699N00548070EA0232202331054 +B1247584517680N00547982EA0233002329051 +B1248084517657N00547896EA0233102330054 +B1248184517631N00547808EA0233002330050 +B1248284517608N00547739EA0235302332035 +B1248384517603N00547677EA0238402344036 +B1248484517580N00547637EA0239902359037 +B1248584517604N00547668EA0242702377038 +B1249084517634N00547594EA0244702397040 +B1249184517622N00547520EA0248602420036 +B1249284517594N00547474EA0252302450039 +B1249384517616N00547494EA0255602479042 +B1249484517582N00547480EA0258202509038 +B1249584517552N00547511EA0261102538041 +B1250084517588N00547511EA0264302568043 +B1250184517561N00547468EA0265702596045 +B1250284517519N00547423EA0268002617040 +B1250384517489N00547384EA0270302640039 +B1250484517460N00547335EA0271102662048 +B1250584517428N00547264EA0272902680058 +B1251084517407N00547189EA0274602699045 +B1251184517383N00547120EA0275002715046 +B1251284517361N00547051EA0275302727048 +B1251384517338N00546978EA0276602738045 +B1251494517307N00546886EA0276202749045 +B1251594517267N00546786EA0274502750054 +B1252094517225N00546690EA0272602745054 +B1252194517178N00546600EA0270402735057 +B1252294517127N00546515EA0268302721061 +B1252394517076N00546434EA0266202705060 +B1252494517027N00546357EA0264202688059 +B1252594516983N00546272EA0262002669056 +B1253094516939N00546187EA0260402649057 +B1253194516891N00546105EA0259102631058 +B1253294516839N00546033EA0257802615058 +B1253394516787N00545957EA0256202599059 +B1253494516735N00545886EA0254602583059 +B1253594516680N00545819EA0252702566060 +B1254094516626N00545747EA0250802549059 +B1254194516568N00545684EA0248702531056 +B1254294516510N00545620EA0245902511057 +B1254394516450N00545563EA0243102488058 +B1254494516393N00545511EA0240202463056 +B1254594516338N00545466EA0237002437056 +B1255094516283N00545423EA0234402409055 +B1255194516235N00545392EA0231602382057 +B1255294516186N00545372EA0229702356056 +B1255394516134N00545353EA0227902332056 +B1255494516075N00545343EA0226302310058 +B1255594516024N00545337EA0222302287054 +B1256094515966N00545334EA0218702259050 +B1256194515911N00545333EA0215202228051 +B1256294515861N00545346EA0211102195054 +B1256394515807N00545365EA0206902160056 +B1256494515745N00545362EA0205302125050 +B1256594515684N00545364EA0204502098052 +B1257094515635N00545362EA0204702079046 +B1257194515595N00545369EA0204502067041 +B1257294515558N00545376EA0204702059049 +B1257394515525N00545386EA0202602051039 +B1257494515554N00545332EA0200002040039 +B1257594515589N00545410EA0197602023041 +B1258094515613N00545495EA0196402005039 +B1258194515633N00545562EA0196101991037 +B1258294515612N00545529EA0196801980041 +B1258394515655N00545546EA0195801975038 +B1258494515682N00545605EA0196301968035 +B1258594515680N00545658EA0197801968044 +B1259094515691N00545636EA0199101972046 +B1259194515677N00545615EA0200701979040 +B1259304515714N00545642EA0202101989043 +B1259404515699N00545615EA0203702001048 +B1259504515704N00545652EA0206102015041 +B1300004515722N00545607EA0207802032042 +B1300104515720N00545639EA0210102050038 +B1300204515726N00545586EA0211702069045 +B1300304515726N00545613EA0213602088039 +B1300404515742N00545565EA0214902105042 +B1300504515762N00545626EA0215302119044 +B1301004515725N00545628EA0216602133040 +B1301104515754N00545584EA0217202143042 +B1301204515792N00545615EA0216402152043 +B1301304515834N00545651EA0215702155039 +B1301404515871N00545685EA0214802155042 +B1301504515915N00545737EA0215002153048 +B1302004515969N00545787EA0215102152043 +B1302104516021N00545843EA0215002151042 +B1302204516073N00545901EA0216202151043 +B1302304516119N00545966EA0218002155044 +B1302404516102N00545994EA0217902161044 +B1302504516140N00545951EA0219502169042 +B1303004516196N00545999EA0219202177041 +B1303104516240N00546060EA0217402179044 +B1303204516286N00546119EA0215102175042 +B1303304516333N00546196EA0213102165049 +B1303404516384N00546272EA0210802150050 +B1303504516448N00546324EA0211202136036 +B1304004516503N00546373EA0213402130036 +B1304104516528N00546432EA0215702135049 +B1304204516548N00546408EA0218302146041 +B1304304516538N00546425EA0220202161046 +B1304404516599N00546429EA0222302178043 +B1304504516659N00546462EA0222902195041 +B1305004516716N00546510EA0220302204045 +B1305104516777N00546562EA0218402203041 +B1305204516840N00546601EA0216202195042 +B1305304516905N00546649EA0214102183045 +B1305404516979N00546686EA0212102167041 +B1305504517056N00546725EA0210202150045 +B1306004517145N00546762EA0210202134036 +B1306104517224N00546788EA0211102124039 +B1306204517283N00546829EA0210002119041 +B1306304517263N00546845EA0210002113042 +B1306404517273N00546785EA0210402108044 +B1306504517307N00546713EA0210902108039 +B1307004517289N00546716EA0211102108038 +B1307114517343N00546788EA0211902111038 +B1307214517361N00546758EA0212902114033 +B1307314517364N00546812EA0214402120036 +B1307414517422N00546786EA0215302130040 +B1307514517406N00546758EA0216602140036 +B1308014517416N00546836EA0217902150035 +B1308114517484N00546846EA0219302163037 +B1308214517461N00546833EA0221002176037 +B1308314517453N00546829EA0222502189043 +B1308414517472N00546891EA0224702205043 +B1308514517492N00546886EA0226702221044 +B1309014517471N00546924EA0228402239041 +B1309114517493N00546883EA0230202256041 +B1309214517490N00546934EA0231502272043 +B1309314517444N00546938EA0232902288042 +B1309414517392N00546950EA0233302301043 +B1309514517350N00546963EA0233802312037 +B1310014517311N00546961EA0232702319041 +B1310114517274N00546953EA0232302321042 +B1310214517236N00546966EA0233602322043 +B1310314517210N00546967EA0235702329042 +B1310414517256N00547008EA0238202340038 +B1310514517273N00547001EA0240002353043 +B1311014517286N00547075EA0243102372046 +B1311114517324N00547067EA0244702392040 +B1311214517327N00547095EA0247302412039 +B1311314517381N00547120EA0249402435045 +B1311414517383N00547113EA0251902455041 +B1311514517445N00547150EA0253602478039 +B1312014517475N00547251EA0256602501045 +B1312114517502N00547234EA0258102520037 +B1312214517503N00547204EA0260802540043 +B1312314517534N00547277EA0263402566044 +B1312414517538N00547379EA0266002592043 +B1312514517547N00547483EA0269502620037 +B1313014517557N00547583EA0270502646054 +B1313114517571N00547694EA0270202665052 +B1313214517587N00547806EA0270002680054 +B1313314517592N00547925EA0267902684054 +B1313414517591N00548048EA0264802678057 +B1313514517601N00548175EA0261602664058 +B1314014517617N00548274EA0260402648058 +B1314114517628N00548379EA0260102633051 +B1314214517642N00548472EA0258602620040 +B1314314517659N00548558EA0257202607045 +B1314414517673N00548651EA0256302596045 +B1314514517689N00548739EA0255002584045 +B1315024517706N00548845EA0253602571047 +B1315124517720N00548942EA0252402559048 +B1315224517722N00549031EA0251102548043 +B1315324517721N00549114EA0249302534044 +B1315424517724N00549196EA0247402518040 +B1315524517747N00549279EA0247402503046 +B1316024517762N00549352EA0248902495042 +B1316124517772N00549422EA0249902494039 +B1316224517783N00549491EA0250502497040 +B1316324517791N00549570EA0251602501057 +B1316424517805N00549650EA0253902509045 +B1316524517830N00549707EA0254402519047 +B1317024517841N00549787EA0253802526043 +B1317124517850N00549876EA0253202530049 +B1317224517864N00549979EA0252902531054 +B1317324517892N00550087EA0253202531057 +B1317424517920N00550197EA0252002530056 +B1317524517962N00550313EA0250502522055 +B1318024518002N00550430EA0249402513057 +B1318124518037N00550555EA0247502502055 +B1318224518082N00550672EA0246402490054 +B1318324518128N00550786EA0245002477053 +B1318424518182N00550891EA0242802463059 +B1318524518235N00550984EA0240402445057 +B1319024518288N00551085EA0238302425059 +B1319124518357N00551157EA0237402407055 +B1319224518420N00551233EA0237402393050 +B1319324518472N00551295EA0240002389039 +B1319424518522N00551361EA0242402396052 +B1319524518570N00551426EA0245102409049 +B1320024518617N00551498EA0246702425048 +B1320124518671N00551559EA0247502441046 +B1320224518738N00551598EA0247702450055 +B1320324518811N00551641EA0247702458060 +B1320424518889N00551682EA0248702464057 +B1320524518958N00551719EA0249502472052 +B1321024519020N00551751EA0251202482042 +B1321124519070N00551759EA0250602491047 +B1321224519118N00551774EA0249002493040 +B1321324519163N00551819EA0247802488044 +B1321434519210N00551882EA0245802482056 +B1321534519277N00551936EA0244702470059 +B1322034519338N00552000EA0243102459053 +B1322134519398N00552058EA0241502445053 +B1322234519451N00552122EA0239902431055 +B1322334519507N00552181EA0238402417051 +B1322434519553N00552223EA0236102401041 +B1322534519599N00552270EA0233702382046 +B1323034519657N00552326EA0231502361054 +B1323134519711N00552367EA0229402339049 +B1323234519781N00552410EA0229702323053 +B1323334519840N00552450EA0229202313045 +B1323434519891N00552500EA0231402307055 +B1323534519942N00552560EA0232802310050 +B1324034519985N00552609EA0235302320041 +B1324134520031N00552653EA0238302335040 +B1324234520092N00552706EA0240802355048 +B1324334520153N00552763EA0243502377044 +B1324434520206N00552810EA0244902398044 +B1324544520265N00552870EA0246802419046 +B1325044520321N00552921EA0245602433055 +B1325144520377N00552995EA0243702435057 +B1325244520436N00553060EA0243002432057 +B1325344520497N00553121EA0241502427055 +B1325444520554N00553175EA0240302420047 +B1325544520613N00553224EA0238502408042 +B1326044520671N00553276EA0236202395049 +B1326144520736N00553336EA0234202377056 +B1326244520808N00553406EA0232502360059 +B1326344520876N00553476EA0230602343055 +B1326444520940N00553547EA0228902325053 +B1326544521006N00553586EA0226902307054 +B1327044521064N00553628EA0224202286053 +B1327144521115N00553664EA0223402266041 +B1327244521160N00553682EA0223202252045 +B1327344521211N00553695EA0223602244041 +B1327444521262N00553727EA0224802242033 +B1327544521307N00553781EA0225302243044 +B1328044521354N00553831EA0227702248036 +B1328144521393N00553870EA0226902255038 +B1328244521443N00553928EA0226502257047 +B1328344521476N00553991EA0227002259042 +B1328444521469N00554034EA0225902261040 +B1328544521486N00553977EA0225602259040 +B1329044521548N00553955EA0225502259045 +B1329144521612N00553965EA0224502256044 +B1329244521674N00553984EA0224002250037 +B1329344521729N00554021EA0225102247048 +B1329444521782N00554048EA0224902248041 +B1329544521836N00554059EA0224002245043 +B1330044521891N00554060EA0223802242045 +B1330144521951N00554094EA0221802235057 +B1330244522022N00554129EA0220402225056 +B1330344522094N00554164EA0219402214057 +B1330444522158N00554224EA0217502202058 +B1330544522228N00554264EA0215802187058 +B1331044522301N00554291EA0214202172055 +B1331144522374N00554315EA0212802156057 +B1331244522449N00554344EA0211502142057 +B1331344522525N00554365EA0210202127060 +B1331444522596N00554387EA0208802114056 +B1331544522665N00554403EA0207302100055 +B1332044522734N00554420EA0205602085057 +B1332144522801N00554441EA0204202071054 +B1332244522856N00554452EA0205002061047 +B1332344522905N00554461EA0205502058043 +B1332444522953N00554473EA0204902055043 +B1332554523006N00554481EA0203902050041 +B1333054523062N00554493EA0203502044042 +B1333154523115N00554494EA0203302040043 +B1333254523166N00554497EA0204402038037 +B1333354523177N00554527EA0205802043041 +B1333454523177N00554471EA0207602050043 +B1333554523164N00554475EA0209602061042 +B1334054523199N00554419EA0211202076038 +B1334154523217N00554462EA0213302091039 +B1334254523196N00554414EA0214802107039 +B1334354523244N00554415EA0217102125040 +B1334454523226N00554424EA0219802145045 +B1334554523245N00554420EA0222702166046 +B1335054523223N00554366EA0225102190042 +B1335154523222N00554383EA0226802212043 +B1335254523234N00554318EA0228302233040 +B1335354523272N00554355EA0229102251040 +B1335454523276N00554420EA0230002265037 +B1335554523251N00554380EA0231402279044 +B1336054523267N00554414EA0232402292044 +B1336154523244N00554472EA0233402305039 +B1336254523222N00554438EA0233602316043 +B1336354523275N00554404EA0234502324040 +B1336454523327N00554411EA0236002334043 +B1336554523306N00554397EA0237602347049 +B1337054523364N00554349EA0239202360043 +B1337154523427N00554333EA0237902371041 +B1337254523490N00554336EA0235202371053 +B1337354523564N00554343EA0233402362054 +B1337454523635N00554351EA0231502350056 +B1337554523704N00554354EA0230002337056 +B1338054523774N00554357EA0228802323053 +B1338154523842N00554360EA0227602310053 +B1338254523916N00554356EA0226002296055 +B1338354523992N00554342EA0224202281054 +B1338454524063N00554339EA0222802266053 +B1338554524136N00554340EA0221602251056 +B1339054524213N00554322EA0220502237057 +B1339154524286N00554307EA0220102225056 +B1339254524343N00554303EA0219902216047 +B1339354524395N00554291EA0219802209042 +B1339454524447N00554289EA0219202203043 +B1339554524504N00554282EA0218402197042 +B1340054524563N00554280EA0217702190044 +B1340154524620N00554267EA0216302183044 +B1340254524678N00554252EA0214502172051 +B1340354524738N00554268EA0214902162035 +B1340464524795N00554239EA0216102155038 +B1340564524839N00554263EA0218902161037 +B1341064524810N00554289EA0222202174042 +B1341164524837N00554319EA0224602193050 +B1341264524808N00554314EA0227402216042 +B1341364524833N00554324EA0230502242043 +B1341464524784N00554334EA0232902266041 +B1341564524805N00554282EA0235002291042 +B1342064524826N00554317EA0236102314044 +B1342164524772N00554327EA0239002334040 +B1342264524794N00554289EA0241002354041 +B1342364524766N00554332EA0242902374030 +B1342464524749N00554273EA0242602391035 +B1342564524789N00554238EA0243302404041 +B1343064524841N00554238EA0245502417043 +B1343164524903N00554240EA0247702433042 +B1343264524960N00554241EA0249002450042 +B1343364525016N00554242EA0249202464050 +B1343464525090N00554255EA0252002476050 +B1343564525164N00554262EA0253802493058 +B1344064525235N00554280EA0256402512057 +B1344164525310N00554296EA0258202531055 +B1344264525391N00554328EA0259902550051 +B1344364525461N00554376EA0260202565057 +B1344464525523N00554427EA0260402577055 +B1344564525573N00554489EA0261502587053 +B1345064525587N00554516EA0258602594080 +B1345174525578N00554517EV0251002593103 +B1345264525520N00554541EA0247402585078 +B1345364525580N00554517EA0246702561047 +B1345464525652N00554526EA0245002529054 +B1345564525719N00554564EA0243802501055 +B1346064525788N00554621EA0245802482058 +B1346164525857N00554692EA0247002474051 +B1346264525925N00554744EA0246602470056 +B1346364525990N00554789EA0245502466052 +B1346464526061N00554821EA0244302458056 +B1346564526132N00554844EA0242802450058 +B1347064526199N00554866EA0240502439057 +B1347164526268N00554898EA0238502423060 +B1347264526337N00554903EA0236602407063 +B1347364526395N00554919EA0234002387054 +B1347464526461N00554936EA0232602367053 +B1347564526532N00554948EA0231702349050 +B1348064526588N00554941EA0231002336038 +B1348164526644N00554951EA0227802321043 +B1348274526726N00554964EA0224002296056 +B1348374526807N00554988EA0221602271054 +B1348474526879N00555041EA0218402246056 +B1348574526952N00555083EA0216702221052 +B1349074527024N00555119EA0216402201051 +B1349174527094N00555155EA0216202186052 +B1349274527163N00555193EA0214902175055 +B1349374527237N00555231EA0213202162057 +B1349474527306N00555266EA0211802148053 +B1349574527376N00555297EA0210702134056 +B1350074527442N00555323EA0209402122052 +B1350174527514N00555343EA0206902106055 +B1350274527589N00555371EA0205702089056 +B1350374527659N00555393EA0204302074057 +B1350474527728N00555404EA0203202059054 +B1350574527797N00555418EA0202402047051 +B1351074527865N00555432EA0201902035046 +B1351174527927N00555451EA0202002027050 +B1351274527985N00555464EA0203102024037 +B1351374528010N00555427EA0202202023041 +B1351474528062N00555438EA0201902020036 +B1351574528098N00555517EA0200802017044 +B1352074528105N00555623EA0199202010041 +B1352174528132N00555705EA0197502000045 +B1352274528184N00555744EA0196701989040 +B1352374528207N00555712EA0195401978044 +B1352474528186N00555637EA0193801965055 +B1352574528160N00555555EA0192101952054 +B1353074528122N00555479EA0190701937055 +B1353174528071N00555420EA0190101923046 +B1353274528013N00555415EA0189601913039 +B1353374527948N00555420EA0190301906034 +B1353474527944N00555396EA0190901903037 +B1353574527979N00555441EA0191501905034 +B1354074527957N00555419EA0191401905038 +B1354174527896N00555433EA0192701907035 +B1354274527873N00555398EA0194001914042 +B1354374527856N00555437EA0195201923038 +B1354474527844N00555386EA0196001932039 +B1354574527872N00555410EA0197901942044 +B1355074527844N00555384EA0199501954041 +B1355174527874N00555390EA0200201967044 +B1355274527842N00555398EA0202001979042 +B1355374527874N00555408EA0202701991043 +B1355474527833N00555439EA0204502004040 +B1355574527846N00555399EA0205102016039 +B1356074527880N00555455EA0206802028043 +B1356184527847N00555456EA0208502044043 +B1356284527880N00555494EA0210502059043 +B1356384527841N00555494EA0212702075040 +B1356484527870N00555509EA0214102092046 +B1356584527829N00555507EA0216002110038 +B1357084527861N00555521EA0217502127039 +B1357184527827N00555529EA0219002144042 +B1357284527865N00555501EA0220202159036 +B1357384527846N00555462EA0219002170042 +B1357484527791N00555499EA0220102177039 +B1357584527745N00555483EA0219502183041 +B1358084527792N00555463EA0218402183041 +B1358184527844N00555514EA0218102181045 +B1358284527877N00555605EA0218402181040 +B1358384527916N00555681EA0217902180042 +B1358484527962N00555746EA0216602177043 +B1358584528007N00555816EA0214902169042 +B1359084528054N00555899EA0211402156062 +B1359184528113N00555992EA0209102137058 +B1359284528176N00556079EA0206102115059 +B1359384528239N00556172EA0203602090059 +B1359484528296N00556261EA0201402067056 +B1359584528356N00556336EA0198802043056 +B1400084528417N00556414EA0196702018059 +B1400184528483N00556489EA0195101996057 +B1400284528543N00556559EA0194201976039 +B1400384528597N00556612EA0192501960045 +B1400484528654N00556666EA0191501947048 +B1400584528714N00556706EA0190201935044 +B1401084528777N00556740EA0189001922048 +B1401184528839N00556758EA0187501910047 +B1401284528897N00556783EA0186001896046 +B1401384528955N00556812EA0184501882046 +B1401484529011N00556853EA0182401866043 +B1401584529064N00556905EA0181001849044 +B1402084529113N00556974EA0179101831046 +B1402184529160N00557055EA0177001813046 +B1402284529214N00557133EA0175601801046 +B1402384529265N00557210EA0174601784046 +B1402484529314N00557289EA0173501769047 +B1402584529361N00557368EA0172101755046 +B1403084529405N00557445EA0170801741044 +B1403184529447N00557515EA0169301729047 +B1403284529496N00557583EA0168401714046 +B1403384529548N00557645EA0166601701047 +B1403484529599N00557715EA0164801685047 +B1403594529653N00557794EA0164101667045 +B1404094529703N00557856EA0163101654046 +B1404194529752N00557915EA0161901642045 +B1404294529797N00557981EA0160501629047 +B1404394529844N00558041EA0159201617046 +B1404494529893N00558102EA0157601604046 +B1404594529959N00558148EA0155701591055 +B1405094530021N00558214EA0154101575054 +B1405194530078N00558288EA0152301558056 +B1405294530128N00558377EA0150201540057 +B1405394530175N00558467EA0148401522058 +B1405494530228N00558546EA0146301503057 +B1405594530282N00558620EA0144501483054 +B1406094530334N00558687EA0142701464051 +B1406194530385N00558755EA0140801444053 +B1406294530432N00558825EA0138801428054 +B1406394530468N00558916EA0137201410054 +B1406494530501N00559002EA0135301391053 +B1406594530548N00559069EA0133701371055 +B1407094530595N00559136EA0132501352055 +B1407194530634N00559211EA0130701335052 +B1407294530676N00559283EA0129101318052 +B1407394530717N00559360EA0127401301052 +B1407494530759N00559438EA0125601284055 +B1407594530804N00559510EA0124101267054 +B1408094530849N00559580EA0122401250054 +B1408194530894N00559651EA0121101233055 +B1408294530935N00559723EA0119501217054 +B1408394530977N00559796EA0117901201052 +B1408494531019N00559871EA0115901184053 +B1408594531067N00559937EA0115001168053 +B1409094531108N00600013EA0113101153056 +B1409194531147N00600088EA0111901137049 +B1409294531181N00600159EA0109901121052 +B1409394531216N00600220EA0108101103050 +B1409494531257N00600276EA0106101086056 +B1409594531305N00600341EA0103601067057 +B1410094531349N00600407EA0102101047054 +B1410194531388N00600471EA0100201028057 +B1410294531428N00600537EA0098001009055 +B1410394531468N00600608EA0095600989054 +B1410494531516N00600678EA0094000967054 +B1410594531550N00600726EA0092200948048 +B1411094531592N00600774EA0090000929054 +B1411194531634N00600839EA0088100909051 +B1411294531679N00600899EA0086900889046 +B1411394531718N00600961EA0085000873050 +B1411494531754N00601023EA0083800856049 +B1412004531794N00601077EA0083600841038 +B1412104531832N00601099EA0083300831035 +B1412204531875N00601103EA0083300824037 +B1412304531921N00601088EA0083300818040 +B1412404531953N00601074EA0085200817034 +B1412504531984N00601061EA0086600821038 +B1413004532013N00601060EA0088000828034 +B1413104531989N00601054EA0088700837035 +B1413204531934N00601080EA0089600847036 +B1413304531932N00601074EA0092500857029 +B1413404531929N00601067EA0095300872039 +B1413504531909N00601137EA0098100895038 +B1414004531926N00601143EA0101200914038 +B1414104531885N00601193EA0104300946039 +B1414204531907N00601225EA0107400973038 +B1414304531865N00601251EA0110201004040 +B1414404531888N00601298EA0112601033037 +B1414504531866N00601275EA0113601057038 +B1415004531814N00601298EA0115301081037 +B1415104531843N00601295EA0116501100040 +B1415204531888N00601331EA0116201116039 +B1415304531925N00601353EA0115601125041 +B1415404531951N00601343EA0116201129038 +B1415504531983N00601328EA0117901135034 +B1416004531992N00601325EA0118501142038 +B1416104531932N00601358EA0120101153038 +B1416204531944N00601357EA0121601165044 +B1416304531917N00601404EA0123101179042 +B1416404531936N00601415EA0123501192042 +B1416504531890N00601473EA0125601206041 +B1417004531886N00601518EA0127101219049 +B1417104531882N00601508EA0128501229042 +B1417204531876N00601578EA0130401247044 +B1417304531871N00601559EA0132101259038 +B1417404531907N00601547EA0133001277041 +B1417504531924N00601538EA0135601289041 +B1418004531901N00601605EA0138101312040 +B1418104531930N00601607EA0141401329034 +B1418204531907N00601599EA0143301355033 +B1418304531908N00601674EA0145101380043 +B1418404531940N00601665EA0146001399036 +B1418504531954N00601628EA0146401413042 +B1419004531991N00601609EA0147801429040 +B1419104532024N00601596EA0149601443041 +B1419204532059N00601579EA0150601458040 +B1419314532104N00601576EA0150201470044 +B1419414532139N00601571EA0150301477044 +B1419514532176N00601563EA0150101481041 +B1420014532214N00601559EA0150101483041 +B1420114532256N00601554EA0150301484039 +B1420214532296N00601550EA0150601486043 +B1420314532338N00601539EA0151701489038 +B1420414532384N00601528EA0152501495041 +B1420514532430N00601524EA0153501502039 +B1421014532474N00601516EA0155101510038 +B1421114532503N00601486EA0156401521032 +B1421214532492N00601429EA0156501531035 +B1421314532438N00601467EA0155901536039 +B1421414532391N00601510EA0155701539044 +B1421514532358N00601457EA0155501540036 +B1422014532338N00601400EA0152601536038 +B1422114532369N00601386EA0149901524044 +B1422214532434N00601396EA0148201508043 +B1422314532499N00601410EA0147401493040 +B1422414532548N00601406EA0145401479038 +B1422514532514N00601451EA0144001464042 +B1423014532460N00601458EA0143601451036 +B1423114532409N00601467EA0140401437041 +B1423214532363N00601443EA0137801416039 +B1423314532315N00601410EA0136501396044 +B1423414532276N00601373EA0135501380040 +B1423514532242N00601327EA0134201365039 +B1424014532191N00601292EA0134001352037 +B1424114532159N00601261EA0135801346039 +B1424214532162N00601312EA0134501344038 +B1424314532097N00601386EA0136201342035 +B1424414532079N00601392EA0137701345049 +B1424514532036N00601423EA0139701353036 +B1425014532006N00601464EA0141301365048 +B1425114531978N00601525EA0143501379035 +B1425214531943N00601512EA0144801393036 +B1425314531919N00601536EA0146201410051 +B1425414531897N00601579EA0148701426042 +B1425514531892N00601558EA0150401440037 +B1426014531855N00601594EA0151801461043 +B1426114531851N00601626EA0152601476045 +B1426214531799N00601629EA0153601492040 +B1426314531820N00601611EA0155801501043 +B1426414531802N00601654EA0157601519042 +B1426514531792N00601620EA0159601536045 +B1427024531776N00601670EA0161101558040 +B1427124531782N00601666EA0163501573042 +B1427224531742N00601700EA0165301591034 +B1427324531753N00601730EA0167101609046 +B1427424531724N00601728EA0168901627039 +B1427524531725N00601770EA0170601647047 +B1428024531704N00601738EA0172601665039 +B1428124531721N00601783EA0173401685042 +B1428224531688N00601772EA0174401700040 +B1428324531721N00601765EA0173601713042 +B1428424531766N00601790EA0173001715040 +B1428524531817N00601836EA0172701715053 +B1429024531869N00601894EA0171801713058 +B1429124531920N00601967EA0170801709062 +B1429224531968N00602043EA0169801702055 +B1429324532021N00602113EA0168201693057 +B1429424532072N00602185EA0166701681058 +B1429524532131N00602243EA0164201666060 +B1430024532183N00602311EA0161701649060 +B1430124532230N00602381EA0159301629060 +B1430224532280N00602449EA0157601609059 +B1430324532329N00602521EA0156001589058 +B1430424532377N00602601EA0153801570059 +B1430524532426N00602667EA0150601548056 +B1431024532473N00602726EA0147001522057 +B1431124532521N00602783EA0143301492059 +B1431224532573N00602829EA0140101460060 +B1431324532630N00602885EA0137501430059 +B1431424532686N00602942EA0135301402056 +B1431524532733N00602996EA0135301379052 +B1432024532769N00603042EA0135901365040 +B1432124532796N00603105EA0136601357040 +B1432224532824N00603161EA0136801356041 +B1432324532858N00603206EA0137201357038 +B1432424532900N00603237EA0137901359042 +B1432524532945N00603248EA0138001361038 +B1433024532989N00603239EA0138201363039 +B1433124533028N00603234EA0139701365038 +B1433224532984N00603234EA0139801369037 +B1433324532982N00603213EA0140201374034 +B1433424533024N00603227EA0141801380038 +B1433524533038N00603217EA0144601389044 +B1434024533043N00603281EA0147201405038 +B1434124533062N00603272EA0149201421042 +B1434224533010N00603314EA0152001442044 +B1434324533005N00603285EA0154201459047 +B1434424532982N00603340EA0156301486044 +B1434534532985N00603365EA0157701509046 +B1435034532958N00603370EA0159701527038 +B1435134532994N00603393EA0160801551036 +B1435234533034N00603405EA0160901568040 +B1435334533075N00603401EA0163001580035 +B1435434533098N00603404EA0165501593037 +B1435534533059N00603393EA0166801615042 +B1436034533058N00603471EA0169301634036 +B1436134533081N00603492EA0172801653039 +B1436234533042N00603484EA0176601684044 +B1436334533056N00603498EA0180101709044 +B1436434533019N00603468EA0183101743045 +B1436534533011N00603521EA0186301777042 +B1437034533000N00603494EA0189001802034 +B1437134532984N00603557EA0192001837047 +B1437234532977N00603568EA0195401866042 +B1437334532938N00603579EA0198501898040 +B1437434532951N00603618EA0201701929048 +B1437534532910N00603618EA0205301963029 +B1438034532930N00603650EA0208001995030 +B1438134532896N00603716EA0210502030036 +B1438234532893N00603675EA0213902058036 +B1438334532908N00603732EA0216402092043 +B1438434532862N00603736EA0218902122036 +B1438534532881N00603705EA0221402150036 +B1439034532859N00603741EA0223902176047 +B1439134532869N00603706EA0224602199046 +B1439234532825N00603731EA0227302218039 +B1439334532836N00603678EA0227302237040 +B1439434532867N00603711EA0226402247039 +B1439534532892N00603773EA0225702249041 +B1440034532928N00603825EA0224602248041 +B1440134532961N00603877EA0223202244036 +B1440234532989N00603934EA0220202234053 +B1440334533015N00604030EA0217602216062 +B1440434533041N00604119EA0216002196058 +B1440534533064N00604210EA0214202178059 +B1441034533095N00604303EA0212302160057 +B1441134533126N00604394EA0209702139054 +B1441234533156N00604482EA0207202117057 +B1441334533186N00604569EA0204602094057 +B1441434533202N00604660EA0201602070052 +B1441534533208N00604749EA0198102041052 +B1442034533216N00604841EA0195002011054 +B1442134533226N00604936EA0192601982052 +B1442244533241N00605048EA0191001952049 +B1442344533253N00605146EA0189501930049 +B1442444533278N00605231EA0189101913042 +B1442544533311N00605294EA0189501903039 +B1443044533345N00605348EA0188401895042 +B1443144533385N00605403EA0188301887038 +B1443244533430N00605443EA0186901879044 +B1443344533475N00605480EA0187101872034 +B1443444533507N00605519EA0188101870038 +B1443544533543N00605538EA0189701873037 +B1444044533584N00605557EA0191001879040 +B1444144533614N00605596EA0192501889040 +B1444244533573N00605610EA0194401901041 +B1444344533578N00605556EA0195701917041 +B1444444533602N00605598EA0196601931041 +B1444544533557N00605657EA0198001943038 +B1445044533536N00605606EA0199401957040 +B1445144533568N00605587EA0200701970044 +B1445244533584N00605605EA0200901980038 +B1445344533530N00605610EA0201601990040 +B1445444533542N00605572EA0202201998039 +B1445544533574N00605572EA0204202006039 +B1446044533536N00605540EA0206002019040 +B1446144533518N00605619EA0208202035036 +B1446244533553N00605655EA0209502052041 +B1446344533587N00605643EA0211402068040 +B1446444533565N00605689EA0212902085039 +B1446544533563N00605650EA0215202102037 +B1447044533533N00605688EA0216902120042 +B1447144533548N00605658EA0219102138040 +B1447244533522N00605707EA0220502158046 +B1447344533530N00605658EA0222902176045 +B1447444533513N00605716EA0225002195040 +B1447544533520N00605686EA0226902215042 +B1448044533523N00605747EA0229102235039 +B1448144533489N00605718EA0230802255041 +B1448244533520N00605686EA0232702274036 +B1448344533506N00605738EA0233802292047 +B1448444533514N00605692EA0235402308037 +B1448544533538N00605737EA0237702325040 +B1449044533496N00605729EA0238102342045 +B1449144533534N00605704EA0240502357046 +B1449244533528N00605776EA0243302377041 +B1449344533489N00605736EA0245202398042 +B1449444533520N00605675EA0247902420036 +B1449554533523N00605713EA0250302445043 +B1450054533540N00605688EA0252902470040 +B1450154533517N00605699EA0254402491047 +B1450254533558N00605691EA0256702512035 +B1450354533547N00605732EA0258402532039 +B1450454533551N00605674EA0259802552044 +B1450554533602N00605680EA0262302571044 +B1451054533651N00605717EA0263302591043 +B1451154533695N00605761EA0264102607036 +B1451254533737N00605797EA0263002616046 +B1451354533788N00605831EA0262502620040 +B1451454533834N00605879EA0260202616043 +B1451554533879N00605927EA0258802607047 +B1452054533916N00605983EA0257702597047 +B1452154533947N00606035EA0257002587039 +B1452254533977N00606095EA0256902578046 +B1452354534004N00606150EA0257002573046 +B1452454534025N00606206EA0257002570040 +B1452554534047N00606259EA0256302566045 +B1453054534069N00606312EA0256102563041 +B1453154534098N00606361EA0251902553045 +B1453254534139N00606433EA0248302532051 +B1453354534181N00606515EA0245402507054 +B1453454534230N00606607EA0244402484051 +B1453554534278N00606699EA0244002466061 +B1454054534311N00606789EA0246702459035 +B1454154534338N00606828EA0247802464038 +B1454254534366N00606794EA0248302468037 +B1454354534348N00606753EA0247902470042 +B1454454534385N00606774EA0247702471043 +B1454554534427N00606807EA0247702472044 +B1455054534466N00606856EA0244602466046 +B1455154534509N00606888EA0242102452042 +B1455254534550N00606917EA0240902436042 +B1455354534592N00606951EA0239302421042 +B1455454534634N00606980EA0236802403043 +B1455554534681N00607010EA0234202384041 +B1456054534731N00607038EA0232702363041 +B1456154534778N00607066EA0230902344047 +B1456254534813N00607111EA0229502326041 +B1456354534843N00607182EA0228802311057 +B1456454534874N00607271EA0227302298051 +B1456554534901N00607361EA0225402284055 +B1457054534933N00607461EA0223502266051 +B1457154534969N00607559EA0221602247054 +B1457254534997N00607656EA0220102230056 +B1457354535019N00607753EA0218302213055 +B1457464535049N00607859EA0216702194055 +B1457564535079N00607958EA0214702177057 +B1458064535109N00608055EA0212702158056 +B1458164535139N00608151EA0210402139057 +B1458264535162N00608250EA0208202118058 +B1458364535189N00608346EA0206302098058 +B1458464535213N00608443EA0204502078059 +B1458564535231N00608547EA0203202059055 +B1459064535256N00608642EA0202602045056 +B1459164535280N00608728EA0201702034059 +B1459264535297N00608828EA0202002024050 +B1459364535317N00608932EA0202802021055 +B1459464535335N00609021EA0204802025039 +B1459564535363N00609087EA0205202032036 +B1500064535400N00609139EA0204502035040 +B1500164535404N00609223EA0203602034039 +B1500264535406N00609313EA0202302029041 +B1500364535405N00609401EA0201202022038 +B1500464535403N00609486EA0200002013042 +B1500564535416N00609570EA0199502004039 +B1501064535446N00609648EA0198701996041 +B1501164535476N00609727EA0197901988040 +B1501264535488N00609806EA0196901979038 +B1501364535494N00609896EA0196001970040 +B1501464535494N00609992EA0194601960045 +B1501564535487N00610091EA0193801950040 +B1502064535480N00610189EA0191901938040 +B1502164535483N00610286EA0191201925044 +B1502264535490N00610379EA0193601923037 +B1502364535448N00610402EA0194101925039 +B1502464535475N00610400EA0197501932040 +B1502564535439N00610435EA0198801945046 +B1503064535451N00610409EA0201701962039 +B1503164535428N00610448EA0204201982036 +B1503264535418N00610418EA0205302001042 +B1503364535430N00610477EA0206602019038 +B1503464535401N00610454EA0207602034038 +B1503564535431N00610460EA0208002046047 +B1504064535426N00610536EA0209802058045 +B1504164535429N00610497EA0211702070039 +B1504264535442N00610536EA0215402087042 +B1504364535411N00610505EA0218302112044 +B1504464535425N00610546EA0222202140047 +B1504564535405N00610519EA0225502171046 +B1505064535384N00610584EA0229202204034 +B1505164535369N00610541EA0231902235045 +B1505264535360N00610605EA0234602266041 +B1505374535343N00610572EA0237302296044 +B1505474535321N00610628EA0239902327047 +B1505574535330N00610608EA0243102354040 +B1506074535300N00610669EA0244102383040 +B1506174535266N00610608EA0245902404038 +B1506274535273N00610641EA0247902424043 +B1506374535216N00610622EA0248902444043 +B1506474535230N00610600EA0249402458044 +B1506574535206N00610697EA0250702471040 +B1507074535178N00610783EA0247902476039 +B1507174535147N00610878EA0245102471041 +B1507274535119N00610978EA0243302459048 +B1507374535088N00611073EA0241202444042 +B1507474535058N00611161EA0238102425043 +B1507574535025N00611256EA0235502403045 +B1508074534998N00611349EA0233202380038 +B1508174534966N00611446EA0230802356040 +B1508274534937N00611542EA0229102334045 +B1508374534923N00611638EA0227302313041 +B1508474534926N00611733EA0225402294041 +B1508574534932N00611827EA0223502274042 +B1509074534944N00611918EA0221802254045 +B1509174534969N00611999EA0220602238044 +B1509274535023N00612049EA0218502221055 +B1509374535084N00612097EA0216702202055 +B1509474535144N00612143EA0214902184057 +B1509574535206N00612186EA0213102166057 +B1510074535266N00612228EA0211302147058 +B1510174535297N00612313EA0209402129053 +B1510274535291N00612431EA0207102109051 +B1510374535250N00612554EA0204402087058 +B1510474535203N00612677EA0202002064059 +B1510574535160N00612804EA0199602041059 +B1511074535104N00612925EA0197402016056 +B1511174535049N00613044EA0195301993055 +B1511274535006N00613156EA0192901971057 +B1511374534967N00613281EA0191601948056 +B1511474534924N00613390EA0191501931053 +B1511574534891N00613480EA0191601921045 +B1512074534863N00613575EA0190501912043 +B1512174534835N00613665EA0189501903042 +B1512274534805N00613756EA0188101893040 +B1512374534768N00613847EA0187401883044 +B1512474534736N00613935EA0186301874042 +B1512584534704N00614037EA0184801862048 +B1513084534674N00614132EA0183801851042 +B1513184534646N00614229EA0183001840046 +B1513284534620N00614328EA0182001830040 +B1513384534594N00614423EA0180301819045 +B1513484534567N00614522EA0178601807044 +B1513584534546N00614618EA0176801794043 +B1514084534514N00614712EA0175101779044 +B1514184534493N00614808EA0173401763042 +B1514284534481N00614901EA0172101747043 +B1514384534476N00614993EA0170901732043 +B1514484534462N00615086EA0170001718045 +B1514584534448N00615181EA0169201706045 +B1515084534431N00615273EA0168001694043 +B1515184534411N00615363EA0166601682043 +B1515284534385N00615452EA0165701670044 +B1515384534357N00615538EA0164401658044 +B1515484534334N00615638EA0162801645053 +B1515584534314N00615747EA0161601632055 +B1516084534290N00615849EA0160401619053 +B1516184534267N00615957EA0158701605054 +B1516284534241N00616067EA0157401591056 +B1516384534221N00616186EA0156501578053 +B1516484534207N00616298EA0155001566055 +B1516584534190N00616407EA0153401552054 +B1517084534178N00616512EA0151601537053 +B1517184534170N00616620EA0149701520053 +B1517284534171N00616727EA0148001503056 +B1517384534177N00616837EA0146401486055 +B1517484534169N00616949EA0144901469055 +B1517584534160N00617061EA0143401453053 +B1518084534149N00617170EA0141801437054 +B1518184534145N00617281EA0140201421053 +B1518284534145N00617394EA0138901405051 +B1518384534146N00617502EA0137401389042 +B1518484534143N00617616EA0137701376038 +B1518584534139N00617728EA0138101369041 +B1519084534160N00617815EA0139001367034 +B1519184534189N00617821EA0139801369040 +B1519284534136N00617830EA0140801375036 +B1519384534105N00617927EA0141401382037 +B1519484534119N00618029EA0141801389038 +B1519584534161N00618087EA0141501393041 +B1520084534210N00618082EA0141901397038 +B1520184534246N00618124EA0142501400038 +B1520284534232N00618222EA0142301403045 +B1520384534209N00618314EA0141401404039 +B1520484534198N00618400EA0139701399037 +B1520594534200N00618498EA0138701390039 +B1521094534192N00618588EA0137701380042 +B1521194534173N00618676EA0137001371042 +B1521294534137N00618762EA0137601364042 +B1521394534106N00618755EA0138301363044 +B1521494534133N00618766EA0140001366035 +B1521594534113N00618824EA0141301373043 +B1522094534136N00618817EA0142801383041 +B1522194534102N00618864EA0144001394040 +B1522294534127N00618843EA0144901405038 +B1522394534118N00618901EA0146101418044 +B1522494534129N00618871EA0147901430038 +B1522594534114N00618930EA0149101444038 +B1523094534122N00618898EA0150301456040 +B1523194534112N00618973EA0151301467031 +B1523294534079N00618975EA0152201479046 +B1523394534108N00619018EA0153901491036 +B1523494534069N00619092EA0154301502041 +B1523594534069N00619062EA0155001511040 +B1524094534108N00619120EA0155601520036 +B1524194534093N00619219EA0155401526042 +B1524294534050N00619299EA0154701528045 +B1524394534007N00619371EA0155101529040 +B1524494533962N00619412EA0155601531041 +B1524594533993N00619411EA0156401534040 +B1525094533999N00619490EA0157201540039 +B1525194533946N00619517EA0157601546041 +B1525294533897N00619554EA0157001550033 +B1525394533923N00619612EA0155301548043 +B1525494533964N00619588EA0155801544033 +B1525594534008N00619578EA0156001544042 +B1526094534058N00619577EA0157001545037 +B1526194534114N00619587EA0157501549038 +B1526294534170N00619582EA0158301554037 +B1526394534225N00619574EA0158601559039 +B1526494534273N00619554EA0159801565038 +B1526594534312N00619547EA0162201575050 +B1527094534290N00619550EA0164901589039 +B1527194534293N00619579EA0167801608049 +B1527294534298N00619600EA0170701632046 +B1527394534306N00619593EA0174201658049 +B1527494534287N00619588EA0178301688046 +B1527594534291N00619634EA0181901721043 +B1528094534293N00619616EA0185801756037 +B1528194534265N00619661EA0189501792052 +B1528294534286N00619648EA0193401829043 +B1528404534258N00619655EA0197901871041 +B1528504534271N00619687EA0201801910042 +B1529004534277N00619665EA0206001950040 +B1529104534248N00619696EA0209801991048 +B1529204534280N00619697EA0213902030041 +B1529304534245N00619700EA0217902071044 +B1529404534277N00619712EA0222102111037 +B1529504534240N00619714EA0225602151048 +B1530004534281N00619716EA0229402190045 +B1530104534253N00619785EA0232702227046 +B1530204534262N00619745EA0235702263042 +B1530304534263N00619806EA0238402297041 +B1530404534258N00619763EA0240602328040 +B1530504534275N00619822EA0242602356043 +B1531004534254N00619805EA0243302379046 +B1531104534288N00619851EA0244402397045 +B1531204534266N00619922EA0245802413039 +B1531304534264N00619886EA0245302425046 +B1531404534302N00619948EA0245802433039 +B1531504534321N00620028EA0244702437042 +B1532004534339N00620112EA0243302435044 +B1532104534353N00620199EA0241702429046 +B1532204534375N00620282EA0240602421044 +B1532304534402N00620359EA0239502412044 +B1532404534426N00620437EA0238602403043 +B1532504534449N00620517EA0237502393045 +B1533004534473N00620598EA0236502383044 +B1533104534492N00620691EA0233902370056 +B1533204534518N00620801EA0233002354058 +B1533304534543N00620897EA0235002345035 +B1533404534520N00620929EA0235902345046 +B1533504534557N00620931EA0238602349045 +B1534004534525N00620935EA0240402362048 +B1534104534558N00620958EA0243402378043 +B1534204534525N00620985EA0245502398043 +B1534304534562N00621017EA0247702418040 +B1534404534533N00621037EA0249002437044 +B1534504534576N00621059EA0250002454041 +B1535004534611N00621126EA0249002468043 +B1535104534642N00621196EA0247202471046 +B1535204534672N00621274EA0246402468043 +B1535304534702N00621350EA0245002462043 +B1535404534726N00621432EA0243802453046 +B1535504534752N00621506EA0242402444047 +B1536004534771N00621590EA0240802433044 +B1536104534793N00621667EA0238902419043 +B1536214534816N00621754EA0237502404043 +B1536314534844N00621843EA0235002387057 +B1536414534878N00621945EA0233702369053 +B1536514534917N00622043EA0233402354047 +B1537014534958N00622130EA0233102343046 +B1537114534990N00622219EA0233102336045 +B1537214535021N00622298EA0235102335039 +B1537314534993N00622308EA0237102341045 +B1537414535022N00622336EA0238702351043 +B1537514534992N00622341EA0240702363043 +B1538014535001N00622390EA0242502378045 +B1538114534982N00622362EA0244102394044 +B1538214535022N00622406EA0244802408040 +B1538314535058N00622472EA0244202418045 +B1538414535097N00622533EA0243402422044 +B1538514535137N00622583EA0243302423041 +B1539014535179N00622626EA0241402421037 +B1539114535221N00622674EA0238002411046 +B1539214535270N00622727EA0235602395045 +B1539314535319N00622783EA0234502378042 +B1539414535366N00622845EA0233002362044 +B1539514535408N00622906EA0231102347046 +B1540014535458N00622954EA0230602331036 +B1540114535504N00622996EA0230902321044 +B1540214535547N00623034EA0231702316037 +B1540314535601N00623068EA0231402313040 +B1540414535656N00623086EA0231702311038 +B1540514535699N00623086EA0231302311044 +B1541014535748N00623089EA0232202310046 +B1541114535788N00623093EA0233202313040 +B1541214535776N00623056EA0234402319040 +B1541314535748N00623138EA0235202326040 +B1541414535791N00623186EA0235702334042 +B1541514535838N00623183EA0235402340044 +B1542014535883N00623177EA0236202345041 +B1542114535933N00623184EA0236202350046 +B1542214535980N00623200EA0235302352043 +B1542314536029N00623215EA0234902349041 +B1542414536077N00623202EA0235102347047 +B1542514536123N00623172EA0236802348040 +B1543014536142N00623125EA0236702353036 +B1543114536094N00623147EA0235202354040 +B1543214536128N00623205EA0234602350045 +B1543314536177N00623201EA0233702346042 +B1543414536234N00623201EA0232402340044 +B1543514536296N00623220EA0231702332047 +B1544014536361N00623250EA0231302325042 +B1544124536431N00623284EA0228902315058 +B1544224536505N00623298EA0227402301055 +B1544324536580N00623326EA0226402288057 +B1544424536653N00623360EA0225402276058 +B1544524536719N00623378EA0224302263047 +B1545024536770N00623411EA0223202253056 +B1545124536845N00623449EA0221602241052 +B1545224536922N00623485EA0219202227057 +B1545324536999N00623528EA0217102209058 +B1545424537076N00623574EA0214302189058 +B1545524537147N00623613EA0210702165054 +B1546024537213N00623641EA0210102140038 +B1546124537262N00623646EA0211102127035 +B1546224537225N00623663EA0211802119039 +B1546324537252N00623736EA0212502118036 +B1546424537246N00623700EA0212602117039 +B1546524537258N00623671EA0212502118039 +B1547024537222N00623730EA0213502117041 +B1547124537233N00623732EA0213802121039 +B1547224537187N00623774EA0214302123040 +B1547324537209N00623833EA0215902130046 +B1547424537179N00623891EA0217502139036 +B1547524537202N00623908EA0218802151047 +B1548024537189N00623979EA0220202163043 +B1548124537173N00623969EA0220102174041 +B1548224537185N00624054EA0221802185034 +B1548324537238N00624064EA0219002191048 +B1548424537314N00624089EA0216302186061 +B1548524537385N00624112EA0213502173045 +B1549024537452N00624120EA0210202153056 +B1549124537525N00624151EA0207302129055 +B1549224537596N00624188EA0204402104055 +B1549324537665N00624239EA0200702076056 +B1549424537731N00624278EA0196402044054 +B1549524537793N00624290EA0195602011051 +B1550024537851N00624301EA0195501989050 +B1550124537907N00624316EA0194501972048 +B1550224537969N00624342EA0193801958052 +B1550324538033N00624375EA0191601946048 +B1550424538097N00624392EA0187701926054 +B1550524538169N00624417EA0184301900060 +B1551024538246N00624445EA0181001871063 +B1551124538324N00624474EA0178101842060 +B1551224538399N00624504EA0174801813061 +B1551324538482N00624550EA0171901783061 +B1551424538567N00624594EA0168801753062 +B1551524538650N00624635EA0165901723060 +B1552034538728N00624671EA0164201692052 +B1552134538797N00624709EA0162301668055 +B1552234538872N00624743EA0159801644060 +B1552334538943N00624781EA0157801620058 +B1552434539011N00624794EA0155901598055 +B1552534539076N00624809EA0154501578055 +B1553034539140N00624851EA0153401559056 +B1553134539204N00624894EA0152201543058 +B1553234539270N00624943EA0150901528057 +B1553334539335N00624983EA0149701513055 +B1553434539399N00625016EA0148301500054 +B1553534539463N00625053EA0147301488054 +B1554034539526N00625101EA0146201475054 +B1554134539594N00625141EA0145001463055 +B1554234539663N00625169EA0143801451055 +B1554334539731N00625203EA0142401438054 +B1554434539796N00625250EA0141201426055 +B1554534539861N00625290EA0139801412054 +B1555034539929N00625323EA0138601399055 +B1555134539996N00625354EA0137201386055 +B1555234540063N00625388EA0135701373055 +B1555334540131N00625421EA0133801358054 +B1555434540198N00625462EA0132001342056 +B1555534540263N00625495EA0130401326056 +B1556034540333N00625537EA0129701310051 +B1556134540402N00625582EA0128101296046 +B1556234540461N00625615EA0127501284041 +B1556334540520N00625652EA0127101274040 +B1556434540577N00625715EA0127501267039 +B1556534540615N00625802EA0127201263038 +B1557034540621N00625912EA0126801259040 +B1557134540611N00626010EA0127601257039 +B1557234540581N00626081EA0127601256040 +B1557334540548N00626150EA0127901257041 +B1557434540506N00626206EA0128601260036 +B1557534540467N00626262EA0130001264034 +B1558034540449N00626261EA0130501270039 +B1558134540497N00626264EA0131401279040 +B1558234540479N00626247EA0133301287030 +B1558334540449N00626311EA0134601299045 +B1558434540454N00626282EA0137201311047 +B1558534540441N00626300EA0139801329036 +B1559034540453N00626334EA0142001349043 +B1559134540448N00626298EA0143301369041 +B1559234540469N00626374EA0144001386038 +B1559334540432N00626395EA0145701398040 +B1559434540462N00626424EA0146001412038 +B1559534540440N00626440EA0146801424039 +B1600044540481N00626425EA0147601435038 +B1600144540525N00626407EA0147501443044 +B1600244540578N00626404EA0148201450041 +B1600344540635N00626406EA0149201457042 +B1600444540687N00626393EA0148901463042 +B1600544540739N00626369EA0150201468034 +B1601044540730N00626365EA0151201474039 +B1601144540696N00626407EA0151701483039 +B1601244540734N00626389EA0151901490040 +B1601344540796N00626398EA0153701499036 +B1601444540770N00626413EA0155301509039 +B1601544540772N00626399EA0156701521041 +B1602044540773N00626461EA0158301534036 +B1602144540760N00626436EA0159501546040 +B1602244540784N00626493EA0160401560041 +B1602344540745N00626500EA0161801573044 +B1602444540760N00626479EA0163801586044 +B1602544540759N00626556EA0165201601034 +B1603044540721N00626553EA0166601615040 +B1603144540753N00626549EA0169001631043 +B1603244540728N00626602EA0170201648040 +B1603344540705N00626583EA0172601662039 +B1603444540737N00626626EA0174401683037 +B1603544540701N00626636EA0176401700040 +B1604044540728N00626655EA0178301721047 +B1604144540716N00626645EA0180501737041 +B1604244540729N00626693EA0181601758041 +B1604344540717N00626668EA0182901775043 +B1604444540732N00626726EA0183801791042 +B1604544540689N00626783EA0185101805036 +B1605044540664N00626874EA0187001819037 +B1605144540659N00626870EA0188901835032 +B1605244540665N00626942EA0190701852038 +B1605344540669N00626921EA0192001868039 +B1605444540660N00626993EA0193401885042 +B1605544540643N00626986EA0195401901044 +B1606044540640N00627058EA0197401920036 +B1606144540663N00627058EA0198801938042 +B1606244540636N00627121EA0199901956039 +B1606344540658N00627103EA0201001969034 +B1606444540656N00627177EA0201501981041 +B1606544540632N00627161EA0202901991040 +B1607044540666N00627184EA0203302003041 +B1607144540637N00627206EA0204702011036 +B1607244540646N00627177EA0205802020046 +B1607354540644N00627233EA0207302034044 +B1607454540686N00627237EA0208402047037 +B1607554540733N00627258EA0209902060038 +B1608054540774N00627261EA0211402074042 +B1608154540744N00627282EA0213002090035 +B1608254540781N00627350EA0214102104036 +B1608354540827N00627380EA0215502117038 +B1608454540868N00627422EA0217702132038 +B1608554540906N00627455EA0219102149035 +B1609054540883N00627526EA0218802162045 +B1609154540890N00627497EA0219902169041 +B1609254540928N00627520EA0219202178042 +B1609354540968N00627569EA0219002181041 +B1609454540980N00627654EA0219702183044 +B1609554540956N00627710EA0224002193040 +B1610054540947N00627683EA0226702210047 +B1610154540910N00627724EA0229802236043 +B1610254540907N00627703EA0230002254042 +B1610354540936N00627752EA0233402274040 +B1610454540894N00627795EA0238302301037 +B1610554540885N00627780EA0240202323042 +B1611054540889N00627850EA0244502361036 +B1611154540856N00627848EA0247902391034 +B1611254540860N00627903EA0250402427041 +B1611354540829N00627884EA0253502452035 +B1611454540840N00627911EA0255702480031 +B1611554540795N00627953EA0257402510034 +B1612054540782N00627903EA0258602532040 +B1612154540770N00627845EA0260302551037 +B1612254540756N00627794EA0260202568037 +B1612354540785N00627761EA0259902577040 +B1612454540830N00627793EA0260002584041 +B1612554540856N00627848EA0262102592041 +B1613054540827N00627885EA0264102605047 +B1613154540839N00627867EA0267602620042 +B1613254540859N00627916EA0269202643037 +B1613354540903N00627934EA0271102664044 +B1613454540951N00627961EA0272202683041 +B1613554541001N00627985EA0274702699036 +B1614054541051N00628010EA0278202721040 +B1614154541105N00628038EA0280802748044 +B1614254541166N00628076EA0284002772032 +B1614354541215N00628084EA0285002797041 +B1614454541266N00628113EA0284302814042 +B1614554541317N00628144EA0284002822041 +B1615054541364N00628172EA0282402826045 +B1615164541422N00628209EA0280202821044 +B1615264541481N00628245EA0277802810044 +B1615364541538N00628284EA0275702795046 +B1615464541594N00628327EA0274202779044 +B1615564541654N00628357EA0273402766044 +B1616064541717N00628388EA0271702752054 +B1616164541794N00628440EA0270402737061 +B1616264541872N00628491EA0269402724058 +B1616364541952N00628538EA0268502711055 +B1616464542032N00628583EA0266402698054 +B1616564542117N00628623EA0263402680061 +B1617064542194N00628617EA0262202661045 +B1617164542263N00628641EA0260702645055 +B1617264542337N00628695EA0258502627061 +B1617364542413N00628746EA0256602608054 +B1617464542493N00628796EA0254802589055 +B1617564542568N00628851EA0253402572055 +B1618064542645N00628904EA0252102556055 +B1618164542715N00628962EA0250302540059 +B1618264542787N00629023EA0248602523057 +B1618364542857N00629082EA0247202507056 +B1618464542926N00629144EA0245802492057 +B1618564542999N00629205EA0244402477058 +B1619064543070N00629269EA0243202463057 +B1619164543135N00629342EA0242102449056 +B1619264543202N00629415EA0240802436057 +B1619364543266N00629490EA0239602423057 +B1619464543334N00629561EA0238302410057 +B1619564543401N00629629EA0236802396055 +B1620064543468N00629697EA0235202382056 +B1620164543533N00629764EA0233102366057 +B1620264543589N00629828EA0233202350045 +B1620364543615N00629886EA0232002341044 +B1620464543653N00629948EA0231002331042 +B1620564543692N00630015EA0230902321038 +B1621064543731N00630061EA0229402314047 +B1621164543770N00630107EA0228102304044 +B1621264543815N00630122EA0225802292053 +B1621364543868N00630138EA0223502275056 +B1621464543915N00630213EA0221602258054 +B1621564543951N00630307EA0218902239056 +B1622064543983N00630421EA0216602219055 +B1622164544013N00630539EA0213602198058 +B1622264544038N00630667EA0210302174057 +B1622364544055N00630795EA0208102148058 +B1622464544071N00630923EA0205302123058 +B1622564544097N00631040EA0203302097058 +B1623064544124N00631149EA0200802073056 +B1623164544142N00631272EA0198302048054 +B1623274544162N00631402EA0196202021054 +B1623374544186N00631513EA0193901998052 +B1623474544212N00631639EA0191601974056 +B1623574544235N00631766EA0189001951057 +B1624074544260N00631887EA0186101926057 +B1624174544286N00632017EA0183101900055 +B1624274544300N00632157EA0180501872055 +B1624374544320N00632261EA0181701850036 +B1624474544359N00632318EA0182001836036 +B1624574544411N00632345EA0184001830034 +B1625074544434N00632324EA0185001832040 +B1625174544398N00632376EA0186101836032 +B1625274544434N00632444EA0187301843037 +B1625374544485N00632453EA0188401853032 +B1625474544500N00632405EA0188501861039 +B1625574544537N00632391EA0189701869038 +B1626074544530N00632467EA0190501877038 +B1626174544539N00632437EA0191501885036 +B1626274544576N00632510EA0192401893039 +B1626374544541N00632540EA0192801902039 +B1626474544533N00632487EA0193501911039 +B1626574544554N00632446EA0194501918038 +B1627074544575N00632494EA0195701927038 +B1627174544550N00632467EA0197301936035 +B1627274544577N00632492EA0198201948039 +B1627374544546N00632510EA0200101958037 +B1627474544573N00632519EA0200501971038 +B1627574544556N00632590EA0202101981036 +B1628074544541N00632546EA0203201993035 +B1628174544569N00632561EA0204102004040 +B1628274544546N00632618EA0205302016038 +B1628374544540N00632565EA0206302028040 +B1628474544536N00632508EA0206702039042 +B1628574544492N00632566EA0206202045036 +B1629074544523N00632629EA0206902048035 +B1629174544552N00632679EA0208302055042 +B1629274544522N00632663EA0209802064038 +B1629374544553N00632678EA0211602076043 +B1629474544518N00632676EA0212902088039 +B1629574544543N00632664EA0214302100040 +B1630074544524N00632711EA0216102115039 +B1630174544532N00632669EA0217402131043 +B1630274544549N00632727EA0218502144039 +B1630374544500N00632733EA0220502158036 +B1630474544529N00632711EA0221402172040 +B1630574544527N00632779EA0222202184039 +B1631084544477N00632849EA0225002199035 +B1631184544503N00632886EA0227302217034 +B1631284544478N00632847EA0228702236041 +B1631384544430N00632907EA0230402253037 +B1631484544455N00632965EA0232602271036 +B1631584544448N00632937EA0234002291039 +B1632084544411N00633008EA0236102309035 +B1632184544447N00633049EA0237602328040 +B1632284544459N00633007EA0239402346038 +B1632384544403N00633038EA0240302363040 +B1632484544404N00633127EA0241202377042 +B1632584544441N00633121EA0242302390037 +B1633084544459N00633088EA0243602401040 +B1633184544451N00633149EA0244502414040 +B1633284544438N00633109EA0245602425038 +B1633384544474N00633139EA0246702437045 +B1633484544438N00633140EA0247602448038 +B1633584544460N00633097EA0248202457039 +B1634084544498N00633153EA0248802465039 +B1634184544472N00633202EA0249602472039 +B1634284544478N00633149EA0250702481037 +B1634384544513N00633188EA0251302489037 +B1634484544546N00633242EA0251602497038 +B1634584544590N00633208EA0252102504038 +B1635084544603N00633139EA0252602509041 +B1635184544597N00633070EA0253002515037 +B1635284544552N00633073EA0252102518038 +B1635384544553N00633149EA0251502517042 +B1635484544599N00633201EA0251602516043 +B1635584544651N00633252EA0252202516046 +B1636084544706N00633302EA0253002519044 +B1636184544759N00633360EA0253202522047 +B1636284544813N00633416EA0253402525043 +B1636384544867N00633476EA0251502525044 +B1636484544927N00633525EA0249402517042 +B1636584544989N00633559EA0247902506044 +B1637084545051N00633596EA0246702494045 +B1637184545103N00633636EA0245502482044 +B1637284545152N00633691EA0244402469045 +B1637384545198N00633746EA0244102458042 +B1637484545241N00633805EA0243602450043 +B1637584545290N00633850EA0243102443044 +B1638084545337N00633907EA0242602437041 +B1638184545384N00633952EA0241802430044 +B1638284545433N00633997EA0241602424043 +B1638394545489N00634054EA0241702419042 +B1638494545538N00634106EA0241202416043 +B1638594545590N00634143EA0242402415046 +B1639094545644N00634179EA0243202418043 +B1639194545699N00634217EA0243502421043 +B1639294545755N00634261EA0242402424045 +B1639394545805N00634322EA0241802422041 +B1639494545858N00634370EA0240302417045 +B1639594545907N00634420EA0239602409043 +B1640094545954N00634471EA0239102402041 +B1640194546001N00634510EA0238202395045 +B1640294546050N00634553EA0237502388043 +B1640394546100N00634595EA0236802381044 +B1640494546151N00634642EA0236002374043 +B1640594546202N00634682EA0234702366045 +B1641094546258N00634704EA0233302356044 +B1641194546314N00634727EA0232002344046 +B1641294546371N00634748EA0230702332043 +B1641394546430N00634765EA0229102319044 +B1641494546493N00634778EA0227402305053 +B1641594546565N00634791EA0226302291053 +B1642094546634N00634802EA0226102278043 +B1642194546692N00634817EA0225802270041 +B1642294546747N00634838EA0225002262044 +B1642394546806N00634874EA0224202255047 +B1642494546862N00634902EA0223102246044 +B1642594546914N00634915EA0221902237042 +B1643094546968N00634926EA0221202228045 +B1643194547022N00634923EA0220502219042 +B1643294547080N00634935EA0220102211044 +B1643394547135N00634958EA0220302204040 +B1643494547185N00634970EA0221902203036 +B1643594547205N00634940EA0222402206036 +B1644094547159N00634967EA0222902209041 +B1644194547171N00635054EA0223902214036 +B1644294547216N00635060EA0224702222038 +B1644394547224N00635014EA0225202229040 +B1644494547179N00635001EA0226402236038 +B1644594547193N00634972EA0226802244038 +B1645094547218N00635038EA0226702251042 +B1645194547175N00635051EA0227502255043 +B1645294547191N00635013EA0228502261040 +B1645394547200N00635085EA0228502267040 +B1645494547165N00635073EA0229202271042 +B1645594547184N00635034EA0229602276040 +B1646094547210N00635081EA0230202281040 +B1646194547160N00635119EA0230402286036 +B1646304547143N00635069EA0231202290038 +B1646404547162N00635113EA0231302295040 +B1646504547122N00635095EA0231602298037 +B1647004547146N00635046EA0232702302041 +B1647104547155N00635105EA0232902309042 +B1647204547124N00635066EA0234102314035 +B1647304547153N00635087EA0234702321046 +B1647404547116N00635088EA0235902329039 +B1647504547145N00635048EA0236102336037 +B1648004547198N00635084EA0236202341037 +B1648104547243N00635090EA0236902347037 +B1648204547235N00635038EA0236602351043 +B1648304547180N00635044EA0236402354039 +B1648404547167N00635119EA0235402353040 +B1648504547226N00635129EA0235202352041 +B1649004547282N00635120EA0235002351044 +B1649104547336N00635105EA0234902349044 +B1649204547389N00635098EA0235402349044 +B1649304547436N00635098EA0235002349042 +B1649404547490N00635102EA0235002347041 +B1649504547540N00635090EA0235402347042 +B1650004547592N00635071EA0235102347043 +B1650104547638N00635041EA0235202347042 +B1650204547686N00635022EA0234502346043 +B1650304547736N00634996EA0233702342044 +B1650404547784N00634974EA0232602337043 +B1650504547835N00634950EA0232002330042 +B1651004547885N00634923EA0231502323046 +B1651104547927N00634890EA0232602320039 +B1651204547971N00634849EA0232002319042 +B1651304548021N00634818EA0232002317047 +B1651404548075N00634801EA0232302316036 +B1651504548129N00634807EA0231802316041 +B1652004548184N00634795EA0230502313043 +B1652104548237N00634772EA0229502306044 +B1652204548282N00634735EA0229102299038 +B1652304548325N00634699EA0229002291041 +B1652404548361N00634675EA0230202290034 +B1652504548368N00634629EA0230602292038 +B1653004548337N00634582EA0230802295037 +B1653104548286N00634627EA0231202297036 +B1653204548279N00634711EA0232602302033 +B1653304548320N00634764EA0233102309037 +B1653404548331N00634729EA0232802314040 +B1653504548279N00634744EA0233102318038 +B1654004548248N00634820EA0233102321037 +B1654114548217N00634799EA0232202322040 +B1654214548261N00634762EA0231702320044 +B1654314548307N00634732EA0231902319044 +B1654414548348N00634702EA0231502317040 +B1654514548386N00634667EA0231202315040 +B1655014548423N00634626EA0231202312045 +B1655114548453N00634594EA0233002313036 +B1655214548441N00634557EA0234702318040 +B1655314548416N00634639EA0235402327038 +B1655414548453N00634689EA0237602337038 +B1655514548456N00634624EA0237302348039 +B1656014548399N00634611EA0239602359040 +B1656114548391N00634701EA0240702371039 +B1656214548423N00634733EA0242402385036 +B1656314548422N00634673EA0241002394038 +B1656414548365N00634650EA0242202399032 +B1656514548331N00634647EA0242702406043 +B1657014548358N00634680EA0244802416036 +B1657114548317N00634709EA0245302425041 +B1657214548341N00634688EA0246602434034 +B1657314548304N00634737EA0246802443045 +B1657414548288N00634691EA0246902449037 +B1657514548312N00634651EA0246102453046 +B1658014548332N00634687EA0246702456037 +B1658114548294N00634718EA0246202457043 +B1658214548320N00634691EA0245702457034 +B1658314548367N00634716EA0244602453040 +B1658414548400N00634769EA0245902450039 +B1658514548356N00634791EA0246202451043 +B1659014548386N00634778EA0247602454041 +B1659114548400N00634830EA0246702458038 +B1659214548347N00634862EA0247202458043 +B1659314548367N00634840EA0246802461044 +B1659414548403N00634893EA0246702461035 +B1659514548406N00634972EA0248002463042 +B1700014548397N00634955EA0249502469037 +B1700114548382N00635035EA0251002477035 +B1700214548364N00635009EA0253002488035 +B1700314548357N00635064EA0254202501042 +B1700414548364N00635038EA0255802514039 +B1700514548346N00635092EA0257602529044 +B1701014548357N00635062EA0259402545042 +B1701114548333N00635108EA0261302561040 +B1701214548357N00635092EA0263302579043 +B1701314548328N00635131EA0265202597039 +B1701424548372N00635130EA0267402618040 +B1701524548417N00635200EA0269002638043 +B1702024548457N00635281EA0270302658045 +B1702124548497N00635353EA0270302673045 +B1702224548534N00635449EA0269602681054 +B1702324548564N00635560EA0268502683058 +B1702424548588N00635671EA0267402681056 +B1702524548610N00635781EA0266002675058 +B1703024548635N00635885EA0265002667055 +B1703124548661N00635992EA0264502659055 +B1703224548694N00636084EA0263602651045 +B1703324548717N00636173EA0261302640056 +B1703424548738N00636272EA0259602627062 +B1703524548766N00636372EA0257902613057 +B1704024548787N00636475EA0256502598057 +B1704124548808N00636574EA0254902583058 +B1704224548830N00636671EA0253402568057 +B1704324548862N00636767EA0252002552056 +B1704424548882N00636864EA0250902538055 +B1704524548907N00636961EA0249702525057 +B1705024548928N00637062EA0248602512057 +B1705124548951N00637161EA0247402500055 +B1705224548973N00637262EA0246102489057 +B1705324548994N00637364EA0245002477057 +B1705424549018N00637464EA0243902465057 +B1705524549042N00637565EA0242602453057 +B1706024549069N00637667EA0241102441056 +B1706124549091N00637770EA0239802428057 +B1706224549113N00637872EA0238302414056 +B1706324549136N00637974EA0236902399056 +B1706424549160N00638075EA0235702385055 +B1706524549185N00638175EA0234702372055 +B1707024549206N00638273EA0233702360055 +B1707124549228N00638373EA0232502348056 +B1707224549250N00638471EA0231702338056 +B1707324549270N00638568EA0230902327054 +B1707424549293N00638665EA0230102317049 +B1707524549313N00638750EA0229302308046 +B1708024549328N00638838EA0228602300046 +B1708124549340N00638926EA0227702292047 +B1708224549353N00639014EA0226602284048 +B1708324549361N00639114EA0225202274054 +B1708424549374N00639217EA0224002263054 +B1708524549393N00639317EA0222702252053 +B1709024549409N00639422EA0221602240053 +B1709124549423N00639528EA0220702229051 +B1709224549439N00639633EA0219502218052 +B1709324549461N00639737EA0218602207052 +B1709424549482N00639845EA0217202194052 +B1709534549506N00639950EA0215802183055 +B1710034549532N00640057EA0214902171052 +B1710134549549N00640163EA0213702160055 +B1710234549563N00640270EA0212402148055 +B1710334549580N00640367EA0211802137049 +B1710434549598N00640461EA0211202128048 +B1710534549621N00640555EA0210802119046 +B1711034549645N00640647EA0210102112047 +B1711134549674N00640730EA0210002105042 +B1711234549697N00640804EA0209902101040 +B1711334549713N00640877EA0209402098038 +B1711434549741N00640943EA0208402093044 +B1711534549779N00641000EA0207902088042 +B1712034549823N00641046EA0207002081043 +B1712134549874N00641073EA0206002074040 +B1712234549929N00641088EA0205502067045 +B1712334549984N00641103EA0205502061043 +B1712434550039N00641126EA0204802056042 +B1712534550088N00641170EA0204802052040 +B1713034550128N00641233EA0204302049043 +B1713134550178N00641283EA0203202043041 +B1713234550231N00641319EA0202202036041 +B1713334550293N00641338EA0201202028044 +B1713434550351N00641353EA0200802020042 +B1713534550406N00641381EA0200602013039 +B1714034550452N00641447EA0200502008042 +B1714134550466N00641542EA0199902004041 +B1714234550465N00641647EA0199402000044 +B1714334550467N00641756EA0199201996043 +B1714434550478N00641859EA0199301993042 +B1714534550504N00641948EA0199001990042 +B1715034550542N00642020EA0198401987045 +B1715134550584N00642086EA0197101983043 +B1715234550628N00642145EA0195001974043 +B1715334550681N00642202EA0192801959050 +B1715434550740N00642251EA0192701945036 +B1715534550793N00642288EA0191501935044 +B1716034550840N00642329EA0191001923037 +B1716134550842N00642321EA0190301915042 +B1716234550829N00642399EA0189201907043 +B1716334550861N00642482EA0187801897042 +B1716434550884N00642575EA0186201886042 +B1716534550893N00642680EA0183401872053 +B1717034550908N00642805EA0180601853056 +B1717134550924N00642930EA0177701830063 +B1717234550940N00643065EA0174801805062 +B1717334550945N00643204EA0171601777061 +B1717434550948N00643343EA0168401748060 +B1717544550948N00643492EA0165701716059 +B1718044550949N00643629EA0163201687061 +B1718144550957N00643750EA0162401662040 +B1718244550965N00643841EA0161501643041 +B1718344550985N00643923EA0160601628044 +B1718444551009N00643998EA0159501615050 +B1718544551038N00644083EA0158901603050 +B1719044551075N00644164EA0157501592053 +B1719144551118N00644235EA0156501579050 +B1719244551164N00644299EA0155001567046 +B1719344551207N00644352EA0155101556035 +B1719444551234N00644401EA0155301551036 +B1719544551269N00644455EA0155001546039 +B1720044551303N00644510EA0154501542040 +B1720144551349N00644548EA0153801536041 +B1720244551393N00644576EA0154101531038 +B1720344551437N00644610EA0154101529036 +B1720444551479N00644604EA0154301527032 +B1720544551472N00644544EA0154201528037 +B1721044551496N00644545EA0153101526039 +B1721144551447N00644576EA0152501523039 +B1721244551401N00644546EA0150801518042 +B1721344551438N00644516EA0149501510042 +B1721444551482N00644489EA0149101500043 +B1721544551512N00644455EA0149201494044 +B1722044551483N00644488EA0150601491030 +B1722144551515N00644488EA0150301492039 +B1722244551485N00644435EA0150501492035 +B1722344551454N00644491EA0151801493029 +B1722444551476N00644507EA0152601499036 +B1722544551434N00644500EA0153401505037 +B1723044551442N00644558EA0154501512037 +B1723144551438N00644515EA0154701519039 +B1723244551389N00644542EA0155301526036 +B1723344551412N00644603EA0156101533033 +B1723444551432N00644580EA0155501538041 +B1723544551386N00644604EA0155801541032 +B1724044551402N00644661EA0155401544038 +B1724144551444N00644662EA0155201544040 +B1724244551475N00644668EA0155001543033 +B1724344551495N00644730EA0154401541036 +B1724444551516N00644689EA0155101539035 +B1724544551536N00644676EA0155801541040 +B1725044551499N00644701EA0156601543035 +B1725144551496N00644659EA0156801547034 +B1725244551498N00644713EA0156701549038 +B1725354551463N00644676EA0157201551035 +B1725454551470N00644629EA0157201554039 +B1725554551488N00644673EA0156201554037 +B1726054551436N00644668EA0155601551038 +B1726154551424N00644613EA0154601546039 +B1726254551457N00644573EA0154101540040 +B1726354551488N00644528EA0153801535041 +B1726454551505N00644467EA0153501531040 +B1726554551533N00644421EA0151901526041 +B1727054551566N00644373EA0149801515042 +B1727154551615N00644322EA0148001501055 +B1727254551663N00644275EA0146401486052 +B1727354551727N00644255EA0144601470051 +B1727454551790N00644239EA0143501453051 +B1727554551830N00644228EA0142601439039 +B1728054551869N00644211EA0141201428045 +B1728154551912N00644200EA0139801416052 +B1728254551963N00644178EA0138501403050 +B1728354552012N00644146EA0137101389048 +B1728454552054N00644095EA0136601377045 +B1728554552101N00644068EA0136301367045 +B1729054552141N00644053EA0136301360040 +B1729154552180N00644021EA0136701356037 +B1729254552174N00643997EA0137201355041 +B1729354552129N00644032EA0137201355041 +B1729454552153N00644007EA0137401356036 +B1729554552200N00644014EA0137501359041 +B1730054552241N00643985EA0138701363041 +B1730154552280N00643975EA0138401366038 +B1730254552325N00643966EA0138101367037 +B1730354552376N00643955EA0138401368040 +B1730454552425N00643934EA0139001369038 +B1730554552471N00643907EA0138801370037 +B1731054552518N00643879EA0138801370040 +B1731154552558N00643846EA0138801370038 +B1731254552590N00643808EA0138701370033 +B1731354552624N00643774EA0139101370033 +B1731454552639N00643734EA0139901374040 +B1731554552586N00643762EA0139401376043 +B1732054552605N00643737EA0139101376041 +B1732154552650N00643728EA0139201375040 +B1732254552688N00643710EA0139501375038 +B1732354552728N00643689EA0139601376039 +B1732454552763N00643662EA0139801377042 +B1732554552803N00643642EA0139801378037 +B1733064552854N00643617EA0140301379037 +B1733164552902N00643599EA0140401381039 +B1733264552960N00643590EA0140501382037 +B1733364553015N00643580EA0140201383038 +B1733464553071N00643568EA0139201380043 +B1733564553131N00643574EA0139401377038 +B1734064553181N00643584EA0138901374044 +B1734164553235N00643593EA0138301371039 +B1734264553293N00643591EA0137801367048 +B1734364553353N00643601EA0137601363039 +B1734464553408N00643610EA0137801361037 +B1734564553465N00643611EA0137301358044 +B1735064553518N00643608EA0136801355038 +B1735164553575N00643615EA0136301352045 +B1735264553634N00643603EA0136501349038 +B1735364553702N00643632EA0136201347040 +B1735464553774N00643674EA0134801342045 +B1735564553833N00643701EA0134401336040 +B1736064553891N00643719EA0134101331037 +B1736164553951N00643738EA0133301326043 +B1736264554013N00643764EA0133301322036 +B1736364554075N00643782EA0132501317043 +B1736464554139N00643786EA0131701311037 +B1736564554201N00643814EA0130001303035 +B1737064554268N00643844EA0128001291042 +B1737164554340N00643859EA0126201276046 +B1737264554411N00643870EA0124201261041 +B1737364554482N00643882EA0122301244037 +B1737464554550N00643910EA0120301226045 +B1737564554619N00643915EA0118001207044 +B1738064554675N00643854EA0116701189043 +B1738164554706N00643785EA0115101171042 +B1738264554704N00643719EA0114001155042 +B1738364554716N00643648EA0112701139037 +B1738464554720N00643586EA0111901126044 +B1738564554698N00643549EA0111201115043 +B1739064554675N00643515EA0111001106037 +B1739164554646N00643487EA0110401099044 +B1739264554613N00643454EA0110001092034 +B1739364554593N00643430EA0110101088037 +B1739464554573N00643413EA0109701085039 +B1739564554543N00643400EA0110101081038 +B1740064554513N00643385EA0110601080035 +B1740164554485N00643369EA0111001081034 +B1740264554513N00643366EA0110901083036 +B1740364554510N00643428EA0110801084038 +B1740464554478N00643400EA0109901083040 +B1740574554439N00643367EA0109101079038 +B1741074554418N00643315EA0107301072038 +B1741174554423N00643257EA0106601061033 +B1741274554472N00643275EA0106301054036 +B1741374554458N00643328EA0105301048033 +B1741474554429N00643287EA0103801039042 +B1741574554416N00643236EA0102501029037 +B1742074554411N00643190EA0100601018038 +B1742174554466N00643227EA0099601003036 +B1742274554500N00643298EA0098500990035 +B1742374554505N00643363EA0098200980035 +B1742474554491N00643316EA0096200969036 +B1742574554504N00643244EA0094700956040 +B1743074554534N00643189EA0093400943038 +B1743174554557N00643137EA0092100929036 +B1743274554581N00643084EA0091200916044 +B1743374554606N00643034EA0090200904034 +B1743474554633N00642986EA0090900894038 +B1743574554619N00642995EA0091500891041 +B1744074554657N00643053EA0092000891030 +B1744174554678N00643029EA0092400892036 +B1744274554647N00643070EA0093100896033 +B1744374554678N00643125EA0094000901031 +B1744474554703N00643105EA0094100905038 +B1744574554672N00643129EA0094500909033 +B1745074554680N00643128EA0094400912033 +B1745174554713N00643204EA0094200914041 +B1745274554685N00643212EA0093700914044 +B1745374554692N00643163EA0094000913036 +B1745474554739N00643165EA0093500912037 +B1745574554733N00643235EA0092900909038 +B1746074554710N00643256EA0092100905036 +B1746174554735N00643214EA0091700900037 +B1746274554793N00643257EA0091000894038 +B1746374554787N00643263EA0090300889037 +B1746474554825N00643213EA0088700881036 +B1746574554862N00643161EA0087200870035 +B1747074554912N00643115EA0086900859036 +B1747174554934N00643073EA0087200853038 +B1747274554932N00643033EA0087000849040 +B1747374554937N00642991EA0087700847034 +B1747474554922N00643052EA0087500846040 +B1747574554986N00643097EA0087600847038 +B1748074555037N00643065EA0087300847037 +B1748174555021N00643025EA0087000846038 +B1748274555017N00642975EA0086600844038 +B1748374555026N00642931EA0086500842037 +B1748484555038N00642887EA0087200841035 +B1748584555024N00642947EA0087300841039 +B1749084555076N00642986EA0087900842034 +B1749184555124N00642954EA0087100843031 +B1749284555136N00642891EA0087400843037 +B1749384555112N00642903EA0086700841038 +B1749484555147N00642965EA0087000841032 +B1749584555137N00643003EA0086600840039 +B1750084555128N00642971EA0087200840032 +B1750184555167N00643005EA0087000841033 +B1750284555147N00643051EA0086300840036 +B1750384555128N00643016EA0085200836036 +B1750484555110N00642958EA0084900830041 +B1750584555096N00642907EA0084900826040 +B1751084555088N00642868EA0084800824038 +B1751184555092N00642816EA0084500821040 +B1751284555077N00642772EA0084100818038 +B1751384555063N00642722EA0083100814037 +B1751484555053N00642675EA0081900808039 +B1751584555041N00642624EA0081600800036 +B1752084555023N00642582EA0080500793042 +B1752184555027N00642525EA0080000785037 +B1752284555028N00642471EA0079300777040 +B1752384555039N00642410EA0078800771041 +B1752484555046N00642346EA0078700765038 +B1752584555028N00642289EA0077800760043 +B1753084554983N00642269EA0076800753043 +B1753184554936N00642304EA0076000745037 +B1753284554914N00642384EA0074800737040 +B1753384554927N00642482EA0073600728041 +B1753484554964N00642576EA0072000718005 +B1753584555033N00642625EA0071800707002 +B1754084555093N00642588EA0070400697000 +B1754184555113N00642503EA0069400686001 +B1754284555110N00642430EA0068500676000 +B1754384555080N00642396EA0067600665000 +B1754484555043N00642363EA0066800656000 +B1754584555012N00642323EA0065800646000 +B1755084554984N00642342EA0064300636000 +B1755184555015N00642412EA0063300625000 +B1755284554990N00642377EA0062000615002 +B1755384554962N00642364EA0061600606000 +B1755484554962N00642363EA0061600601000 +B1755584554963N00642364EA0061600596000 +B1756084554963N00642365EA0061600591000 +B1756184554964N00642366EA0061600587000 +B1756294554965N00642366EA0061600584000 diff --git a/float-no-zero/examples/data/igc/Sylvain-Dhonneur.igc b/float-no-zero/examples/data/igc/Sylvain-Dhonneur.igc new file mode 100644 index 0000000000..524f7e2325 --- /dev/null +++ b/float-no-zero/examples/data/igc/Sylvain-Dhonneur.igc @@ -0,0 +1,16374 @@ +AXGD111 6030, SN07178, SW3.29 +HFDTE190411 +HOPLTPILOT: Sylvain Dhonneur +HOGTYGLIDERTYPE: R10 +HOGTYGLIDERID: None +HOCIDCOMPETITIONID: +HODTM100GPSDATUM: WGS-84 +HOCCLCOMPETITION CLASS: None +HOSITSite: None +B0851014556248N00651105EA0000002045 +B0851034556248N00651105EA0000002045 +B0851054556248N00651105EA0000002045 +B0851074556248N00651105EA0000002045 +B0851094556248N00651105EA0000002045 +B0851114556248N00651105EA0000002045 +B0851134556248N00651105EA0000002045 +B0851154556248N00651105EA0000002045 +B0851174556248N00651105EA0000002045 +B0851194556248N00651105EA0000002045 +B0851214556248N00651105EA0000002045 +B0851234556248N00651105EA0000002045 +B0851254556248N00651105EA0000002045 +B0851274556248N00651105EA0000002045 +B0851294556248N00651105EA0000002045 +B0851314556248N00651105EA0000002045 +B0851334556248N00651105EA0000002045 +B0851354556251N00651107EA0000002045 +B0851374556254N00651109EA0000002045 +B0851394556258N00651111EA0000002045 +B0851414556265N00651116EA0000002045 +B0851434556275N00651124EA0000002044 +B0851454556282N00651135EA0000002041 +B0851474556289N00651146EA0000002039 +B0851494556295N00651156EA0000002036 +B0851514556299N00651169EA0000002032 +B0851534556302N00651185EA0000002028 +B0851554556305N00651199EA0000002025 +B0851574556307N00651211EA0000002023 +B0851594556306N00651224EA0000002021 +B0852024556305N00651235EA0000002020 +B0852044556306N00651241EA0000002021 +B0852064556310N00651247EA0000002022 +B0852084556311N00651254EA0000002024 +B0852104556307N00651258EA0000002027 +B0852124556304N00651261EA0000002031 +B0852144556303N00651267EA0000002035 +B0852164556300N00651274EA0000002037 +B0852184556296N00651281EA0000002039 +B0852204556290N00651286EA0000002040 +B0852224556282N00651290EA0000002041 +B0852244556274N00651291EA0000002043 +B0852264556270N00651293EA0000002045 +B0852284556264N00651297EA0000002046 +B0852304556256N00651300EA0000002049 +B0852324556250N00651301EA0000002052 +B0852344556243N00651301EA0000002057 +B0852364556234N00651303EA0000002061 +B0852384556224N00651305EA0000002067 +B0852404556214N00651303EA0000002072 +B0852424556204N00651298EA0000002077 +B0852444556192N00651294EA0000002081 +B0852464556179N00651294EA0000002084 +B0852484556171N00651300EA0000002086 +B0852504556170N00651308EA0000002089 +B0852524556173N00651313EA0000002091 +B0852544556181N00651312EA0000002092 +B0852564556189N00651302EA0000002094 +B0852584556192N00651284EA0000002094 +B0853004556193N00651265EA0000002095 +B0853024556193N00651243EA0000002095 +B0853044556184N00651214EA0000002096 +B0853064556175N00651201EA0000002099 +B0853084556165N00651190EA0000002102 +B0853104556157N00651178EA0000002106 +B0853124556149N00651163EA0000002111 +B0853144556144N00651150EA0000002117 +B0853164556136N00651140EA0000002122 +B0853184556125N00651133EA0000002128 +B0853204556115N00651140EA0000002137 +B0853224556111N00651149EA0000002144 +B0853254556108N00651158EA0000002151 +B0853274556111N00651165EA0000002157 +B0853294556118N00651164EA0000002162 +B0853314556126N00651154EA0000002165 +B0853334556128N00651132EA0000002167 +B0853354556124N00651110EA0000002172 +B0853374556122N00651094EA0000002179 +B0853394556121N00651083EA0000002186 +B0853414556118N00651070EA0000002192 +B0853434556110N00651056EA0000002197 +B0853454556098N00651058EA0000002204 +B0853474556088N00651067EA0000002213 +B0853494556085N00651076EA0000002220 +B0853514556086N00651085EA0000002227 +B0853534556086N00651085EA0000002235 +B0853554556099N00651084EA0000002241 +B0853574556103N00651068EA0000002246 +B0853594556104N00651049EA0000002254 +B0854014556099N00651031EA0000002261 +B0854034556088N00651018EA0000002270 +B0854054556076N00651010EA0000002278 +B0854074556065N00651011EA0000002284 +B0854094556056N00651016EA0000002291 +B0854114556049N00651024EA0000002299 +B0854134556047N00651031EA0000002306 +B0854154556050N00651035EA0000002311 +B0854174556057N00651032EA0000002315 +B0854194556065N00651019EA0000002319 +B0854214556070N00650999EA0000002324 +B0854234556070N00650978EA0000002330 +B0854254556066N00650962EA0000002337 +B0854274556060N00650946EA0000002344 +B0854294556052N00650928EA0000002350 +B0854314556038N00650920EA0000002356 +B0854334556026N00650914EA0000002360 +B0854354556014N00650910EA0000002363 +B0854374556003N00650911EA0000002365 +B0854394555996N00650918EA0000002368 +B0854414555995N00650926EA0000002372 +B0854434555999N00650931EA0000002377 +B0854454556008N00650931EA0000002385 +B0854474556013N00650929EA0000002390 +B0854494556019N00650927EA0000002394 +B0854514556026N00650921EA0000002397 +B0854534556034N00650915EA0000002401 +B0854554556040N00650914EA0000002406 +B0854574556046N00650917EA0000002411 +B0854594556052N00650920EA0000002416 +B0855014556058N00650920EA0000002420 +B0855034556064N00650923EA0000002424 +B0855064556069N00650931EA0000002427 +B0855084556074N00650938EA0000002430 +B0855104556079N00650943EA0000002435 +B0855124556085N00650947EA0000002441 +B0855144556092N00650947EA0000002446 +B0855164556100N00650941EA0000002450 +B0855184556104N00650930EA0000002453 +B0855204556107N00650917EA0000002456 +B0855224556108N00650901EA0000002457 +B0855244556102N00650887EA0000002458 +B0855264556089N00650881EA0000002459 +B0855284556078N00650885EA0000002460 +B0855304556071N00650893EA0000002460 +B0855324556065N00650903EA0000002459 +B0855344556060N00650915EA0000002459 +B0855364556055N00650927EA0000002459 +B0855384556053N00650938EA0000002461 +B0855404556050N00650950EA0000002465 +B0855424556046N00650962EA0000002469 +B0855444556040N00650971EA0000002474 +B0855464556032N00650980EA0000002479 +B0855484556023N00650991EA0000002483 +B0855504556015N00651002EA0000002488 +B0855524556011N00651015EA0000002492 +B0855544556013N00651027EA0000002496 +B0855564556019N00651029EA0000002500 +B0855584556026N00651024EA0000002504 +B0856004556032N00651016EA0000002508 +B0856024556035N00651003EA0000002512 +B0856044556034N00650987EA0000002515 +B0856064556030N00650971EA0000002519 +B0856084556023N00650959EA0000002523 +B0856104556014N00650947EA0000002527 +B0856124556003N00650936EA0000002530 +B0856144555991N00650929EA0000002533 +B0856164555979N00650924EA0000002536 +B0856184555967N00650920EA0000002539 +B0856204555956N00650922EA0000002541 +B0856224555946N00650928EA0000002542 +B0856244555941N00650939EA0000002543 +B0856264555943N00650955EA0000002543 +B0856284555948N00650961EA0000002544 +B0856304555954N00650962EA0000002545 +B0856324555962N00650959EA0000002546 +B0856344555967N00650953EA0000002548 +B0856364555971N00650943EA0000002550 +B0856384555976N00650932EA0000002551 +B0856404555978N00650923EA0000002553 +B0856424555980N00650915EA0000002555 +B0856454555983N00650906EA0000002556 +B0856474555986N00650895EA0000002557 +B0856494555985N00650882EA0000002557 +B0856514555984N00650868EA0000002558 +B0856534555983N00650853EA0000002560 +B0856554555981N00650839EA0000002562 +B0856574555981N00650827EA0000002565 +B0856594555983N00650815EA0000002568 +B0857014555983N00650800EA0000002569 +B0857034555979N00650786EA0000002568 +B0857054555968N00650778EA0000002566 +B0857074555959N00650774EA0000002564 +B0857094555949N00650770EA0000002562 +B0857114555938N00650765EA0000002560 +B0857134555927N00650758EA0000002557 +B0857154555917N00650751EA0000002554 +B0857174555907N00650743EA0000002551 +B0857194555897N00650733EA0000002547 +B0857214555887N00650721EA0000002543 +B0857234555876N00650709EA0000002539 +B0857254555867N00650697EA0000002537 +B0857274555860N00650688EA0000002536 +B0857294555852N00650681EA0000002536 +B0857314555844N00650676EA0000002536 +B0857334555835N00650669EA0000002535 +B0857354555824N00650658EA0000002530 +B0857374555814N00650646EA0000002529 +B0857394555805N00650635EA0000002525 +B0857414555796N00650623EA0000002520 +B0857434555785N00650610EA0000002517 +B0857454555775N00650599EA0000002514 +B0857474555766N00650588EA0000002509 +B0857494555756N00650575EA0000002504 +B0857514555746N00650561EA0000002500 +B0857534555737N00650546EA0000002497 +B0857554555728N00650531EA0000002493 +B0857574555718N00650516EA0000002490 +B0857594555708N00650501EA0000002486 +B0858014555699N00650485EA0000002483 +B0858034555684N00650461EA0000002478 +B0858054555675N00650445EA0000002476 +B0858074555666N00650430EA0000002473 +B0858094555656N00650416EA0000002469 +B0858114555645N00650400EA0000002464 +B0858134555634N00650385EA0000002459 +B0858154555622N00650372EA0000002455 +B0858174555609N00650359EA0000002450 +B0858194555596N00650346EA0000002447 +B0858214555585N00650333EA0000002444 +B0858244555574N00650319EA0000002440 +B0858264555563N00650304EA0000002436 +B0858284555554N00650289EA0000002433 +B0858304555545N00650273EA0000002429 +B0858324555537N00650256EA0000002425 +B0858344555531N00650236EA0000002421 +B0858364555524N00650216EA0000002419 +B0858384555517N00650196EA0000002418 +B0858404555511N00650178EA0000002419 +B0858424555507N00650160EA0000002419 +B0858444555502N00650142EA0000002419 +B0858464555498N00650124EA0000002420 +B0858484555492N00650107EA0000002420 +B0858504555487N00650089EA0000002419 +B0858524555483N00650070EA0000002418 +B0858544555479N00650050EA0000002418 +B0858564555475N00650031EA0000002419 +B0858584555471N00650012EA0000002421 +B0859004555466N00649995EA0000002424 +B0859024555462N00649982EA0000002426 +B0859044555458N00649968EA0000002427 +B0859064555453N00649950EA0000002425 +B0859084555448N00649930EA0000002426 +B0859104555442N00649911EA0000002427 +B0859124555437N00649895EA0000002428 +B0859144555434N00649881EA0000002427 +B0859164555431N00649862EA0000002424 +B0859184555427N00649842EA0000002424 +B0859204555423N00649825EA0000002425 +B0859224555419N00649812EA0000002429 +B0859244555416N00649799EA0000002430 +B0859264555413N00649784EA0000002430 +B0859284555412N00649765EA0000002430 +B0859304555420N00649750EA0000002429 +B0859324555431N00649745EA0000002427 +B0859344555440N00649752EA0000002424 +B0859364555438N00649764EA0000002424 +B0859384555423N00649765EA0000002425 +B0859404555411N00649757EA0000002428 +B0859424555403N00649745EA0000002431 +B0859444555397N00649734EA0000002432 +B0859464555390N00649719EA0000002432 +B0859484555382N00649704EA0000002433 +B0859504555377N00649689EA0000002435 +B0859524555373N00649676EA0000002436 +B0859544555365N00649660EA0000002437 +B0859564555360N00649644EA0000002440 +B0859594555355N00649633EA0000002441 +B0900014555348N00649621EA0000002442 +B0900034555341N00649606EA0000002443 +B0900054555334N00649593EA0000002446 +B0900074555327N00649583EA0000002448 +B0900094555319N00649573EA0000002449 +B0900114555310N00649561EA0000002449 +B0900134555303N00649549EA0000002451 +B0900154555296N00649538EA0000002451 +B0900174555289N00649526EA0000002449 +B0900194555281N00649512EA0000002446 +B0900214555273N00649497EA0000002443 +B0900234555266N00649483EA0000002439 +B0900254555259N00649467EA0000002436 +B0900274555254N00649451EA0000002434 +B0900294555249N00649436EA0000002433 +B0900314555245N00649421EA0000002431 +B0900334555240N00649404EA0000002430 +B0900354555235N00649389EA0000002429 +B0900374555232N00649374EA0000002428 +B0900394555227N00649358EA0000002425 +B0900414555222N00649341EA0000002423 +B0900434555217N00649324EA0000002420 +B0900454555212N00649309EA0000002416 +B0900474555208N00649296EA0000002412 +B0900494555202N00649281EA0000002408 +B0900514555194N00649265EA0000002406 +B0900534555190N00649252EA0000002405 +B0900554555187N00649237EA0000002405 +B0900574555182N00649219EA0000002406 +B0900594555179N00649203EA0000002410 +B0901014555176N00649188EA0000002414 +B0901034555171N00649170EA0000002420 +B0901054555167N00649152EA0000002426 +B0901074555165N00649134EA0000002433 +B0901094555165N00649121EA0000002440 +B0901114555163N00649111EA0000002445 +B0901134555161N00649102EA0000002448 +B0901154555153N00649083EA0000002449 +B0901174555146N00649071EA0000002453 +B0901194555136N00649060EA0000002455 +B0901214555126N00649051EA0000002458 +B0901234555118N00649048EA0000002461 +B0901254555112N00649054EA0000002464 +B0901274555111N00649061EA0000002466 +B0901294555115N00649068EA0000002468 +B0901324555121N00649073EA0000002470 +B0901344555127N00649078EA0000002470 +B0901364555134N00649084EA0000002470 +B0901384555141N00649091EA0000002470 +B0901404555147N00649098EA0000002471 +B0901424555152N00649107EA0000002471 +B0901444555157N00649115EA0000002472 +B0901464555161N00649122EA0000002474 +B0901484555166N00649128EA0000002475 +B0901504555170N00649136EA0000002477 +B0901524555173N00649145EA0000002479 +B0901544555176N00649153EA0000002480 +B0901564555177N00649161EA0000002483 +B0901584555177N00649161EA0000002484 +B0902004555175N00649182EA0000002485 +B0902024555171N00649192EA0000002487 +B0902044555164N00649200EA0000002488 +B0902064555155N00649201EA0000002489 +B0902084555144N00649192EA0000002489 +B0902104555136N00649174EA0000002488 +B0902124555133N00649155EA0000002489 +B0902144555134N00649136EA0000002490 +B0902164555135N00649115EA0000002491 +B0902184555136N00649094EA0000002491 +B0902204555137N00649074EA0000002491 +B0902224555139N00649054EA0000002490 +B0902244555140N00649034EA0000002489 +B0902264555140N00649019EA0000002490 +B0902284555141N00649001EA0000002489 +B0902304555142N00648981EA0000002489 +B0902324555142N00648961EA0000002490 +B0902344555144N00648941EA0000002492 +B0902364555146N00648921EA0000002495 +B0902384555147N00648901EA0000002498 +B0902404555149N00648881EA0000002500 +B0902424555156N00648862EA0000002501 +B0902444555168N00648850EA0000002502 +B0902464555182N00648850EA0000002504 +B0902484555191N00648857EA0000002506 +B0902504555185N00648863EA0000002511 +B0902524555178N00648857EA0000002516 +B0902544555176N00648839EA0000002522 +B0902564555182N00648818EA0000002526 +B0902584555196N00648817EA0000002532 +B0903004555207N00648827EA0000002537 +B0903024555210N00648836EA0000002543 +B0903044555204N00648840EA0000002550 +B0903064555196N00648837EA0000002557 +B0903084555191N00648825EA0000002563 +B0903114555191N00648808EA0000002571 +B0903134555197N00648794EA0000002578 +B0903154555207N00648782EA0000002586 +B0903174555219N00648776EA0000002594 +B0903194555232N00648779EA0000002602 +B0903214555242N00648788EA0000002610 +B0903234555247N00648799EA0000002618 +B0903254555244N00648807EA0000002625 +B0903274555237N00648812EA0000002632 +B0903294555231N00648813EA0000002640 +B0903314555227N00648810EA0000002649 +B0903334555223N00648802EA0000002656 +B0903354555222N00648785EA0000002662 +B0903374555228N00648767EA0000002669 +B0903394555240N00648758EA0000002677 +B0903414555255N00648763EA0000002687 +B0903434555264N00648774EA0000002698 +B0903454555267N00648785EA0000002708 +B0903474555259N00648787EA0000002718 +B0903494555253N00648780EA0000002728 +B0903514555252N00648769EA0000002739 +B0903534555252N00648755EA0000002748 +B0903554555250N00648743EA0000002759 +B0903574555248N00648731EA0000002770 +B0903594555245N00648719EA0000002780 +B0904014555240N00648707EA0000002789 +B0904034555235N00648695EA0000002797 +B0904054555229N00648684EA0000002804 +B0904074555222N00648673EA0000002810 +B0904094555215N00648661EA0000002814 +B0904114555207N00648648EA0000002816 +B0904134555199N00648635EA0000002819 +B0904154555193N00648625EA0000002823 +B0904174555187N00648616EA0000002826 +B0904194555179N00648605EA0000002828 +B0904214555173N00648593EA0000002830 +B0904234555167N00648583EA0000002832 +B0904254555161N00648572EA0000002832 +B0904274555152N00648552EA0000002830 +B0904294555146N00648543EA0000002829 +B0904314555139N00648538EA0000002827 +B0904334555130N00648531EA0000002824 +B0904354555124N00648518EA0000002816 +B0904374555119N00648505EA0000002815 +B0904394555114N00648494EA0000002815 +B0904414555109N00648484EA0000002812 +B0904434555103N00648471EA0000002811 +B0904454555098N00648457EA0000002810 +B0904474555092N00648443EA0000002807 +B0904504555085N00648427EA0000002804 +B0904524555079N00648411EA0000002802 +B0904544555074N00648394EA0000002800 +B0904564555068N00648380EA0000002797 +B0904584555061N00648366EA0000002794 +B0905004555055N00648351EA0000002791 +B0905024555050N00648335EA0000002790 +B0905044555045N00648321EA0000002790 +B0905064555039N00648309EA0000002789 +B0905084555034N00648295EA0000002788 +B0905104555028N00648280EA0000002787 +B0905124555021N00648267EA0000002786 +B0905144555014N00648255EA0000002783 +B0905164555005N00648241EA0000002779 +B0905184554996N00648227EA0000002773 +B0905204554987N00648212EA0000002766 +B0905224554978N00648197EA0000002760 +B0905244554968N00648181EA0000002754 +B0905264554958N00648166EA0000002749 +B0905284554948N00648150EA0000002743 +B0905304554939N00648133EA0000002736 +B0905324554928N00648116EA0000002730 +B0905344554918N00648100EA0000002723 +B0905364554907N00648083EA0000002715 +B0905384554895N00648063EA0000002707 +B0905404554884N00648044EA0000002701 +B0905424554873N00648030EA0000002695 +B0905444554859N00648018EA0000002688 +B0905464554845N00648004EA0000002683 +B0905484554832N00647991EA0000002678 +B0905504554819N00647978EA0000002671 +B0905524554804N00647964EA0000002665 +B0905544554790N00647950EA0000002661 +B0905564554777N00647936EA0000002658 +B0905584554765N00647923EA0000002655 +B0906004554752N00647910EA0000002653 +B0906024554740N00647896EA0000002651 +B0906044554729N00647881EA0000002648 +B0906064554718N00647867EA0000002645 +B0906084554700N00647848EA0000002638 +B0906104554688N00647834EA0000002634 +B0906124554678N00647818EA0000002630 +B0906144554667N00647804EA0000002626 +B0906164554655N00647792EA0000002622 +B0906184554643N00647778EA0000002617 +B0906204554631N00647761EA0000002614 +B0906224554619N00647745EA0000002610 +B0906244554608N00647729EA0000002607 +B0906264554596N00647713EA0000002604 +B0906284554585N00647699EA0000002602 +B0906314554572N00647686EA0000002600 +B0906334554560N00647674EA0000002597 +B0906354554549N00647659EA0000002593 +B0906374554537N00647644EA0000002590 +B0906394554525N00647627EA0000002587 +B0906414554514N00647608EA0000002584 +B0906434554504N00647590EA0000002582 +B0906454554495N00647570EA0000002579 +B0906474554486N00647550EA0000002577 +B0906494554479N00647532EA0000002573 +B0906514554471N00647512EA0000002568 +B0906534554464N00647489EA0000002564 +B0906554554457N00647467EA0000002561 +B0906574554449N00647446EA0000002557 +B0906594554442N00647423EA0000002554 +B0907014554435N00647401EA0000002552 +B0907034554428N00647380EA0000002548 +B0907054554421N00647356EA0000002546 +B0907074554414N00647335EA0000002544 +B0907094554408N00647315EA0000002541 +B0907114554403N00647295EA0000002538 +B0907134554398N00647274EA0000002536 +B0907154554392N00647255EA0000002534 +B0907174554385N00647238EA0000002532 +B0907194554378N00647221EA0000002530 +B0907214554371N00647205EA0000002528 +B0907234554366N00647190EA0000002526 +B0907254554360N00647173EA0000002522 +B0907274554355N00647156EA0000002519 +B0907294554347N00647139EA0000002515 +B0907314554339N00647121EA0000002511 +B0907334554331N00647103EA0000002508 +B0907354554322N00647087EA0000002506 +B0907374554312N00647072EA0000002504 +B0907394554303N00647057EA0000002501 +B0907414554295N00647042EA0000002499 +B0907434554288N00647025EA0000002496 +B0907454554281N00647008EA0000002492 +B0907474554273N00646992EA0000002489 +B0907494554261N00646968EA0000002482 +B0907514554252N00646951EA0000002478 +B0907534554242N00646933EA0000002474 +B0907554554233N00646914EA0000002471 +B0907574554223N00646895EA0000002467 +B0907594554213N00646877EA0000002465 +B0908014554201N00646860EA0000002463 +B0908034554190N00646844EA0000002462 +B0908054554181N00646830EA0000002462 +B0908074554172N00646815EA0000002460 +B0908104554161N00646799EA0000002458 +B0908124554152N00646782EA0000002458 +B0908144554144N00646766EA0000002459 +B0908164554135N00646749EA0000002458 +B0908184554127N00646731EA0000002458 +B0908204554120N00646713EA0000002457 +B0908224554114N00646695EA0000002456 +B0908244554107N00646677EA0000002453 +B0908264554099N00646659EA0000002452 +B0908284554092N00646642EA0000002451 +B0908304554084N00646626EA0000002449 +B0908324554076N00646610EA0000002447 +B0908344554069N00646594EA0000002445 +B0908364554062N00646577EA0000002443 +B0908384554062N00646577EA0000002441 +B0908404554048N00646543EA0000002439 +B0908424554040N00646527EA0000002437 +B0908444554032N00646511EA0000002434 +B0908464554023N00646496EA0000002431 +B0908484554015N00646480EA0000002429 +B0908504554007N00646464EA0000002427 +B0908524553999N00646448EA0000002424 +B0908544553991N00646432EA0000002420 +B0908564553982N00646415EA0000002417 +B0908584553973N00646398EA0000002414 +B0909004553964N00646383EA0000002411 +B0909024553954N00646368EA0000002408 +B0909044553945N00646351EA0000002404 +B0909064553936N00646333EA0000002402 +B0909084553928N00646319EA0000002401 +B0909104553920N00646304EA0000002397 +B0909124553911N00646288EA0000002394 +B0909144553902N00646272EA0000002393 +B0909164553894N00646257EA0000002391 +B0909184553886N00646241EA0000002387 +B0909204553877N00646225EA0000002385 +B0909224553868N00646209EA0000002382 +B0909244553859N00646195EA0000002379 +B0909264553849N00646180EA0000002376 +B0909284553838N00646165EA0000002373 +B0909304553824N00646143EA0000002369 +B0909324553814N00646128EA0000002366 +B0909344553805N00646114EA0000002364 +B0909364553796N00646100EA0000002361 +B0909384553787N00646085EA0000002357 +B0909404553778N00646068EA0000002355 +B0909424553770N00646053EA0000002353 +B0909444553762N00646039EA0000002350 +B0909464553753N00646023EA0000002346 +B0909484553744N00646008EA0000002344 +B0909514553735N00645995EA0000002342 +B0909534553727N00645980EA0000002339 +B0909554553717N00645965EA0000002337 +B0909574553708N00645951EA0000002336 +B0909594553699N00645938EA0000002334 +B0910014553689N00645924EA0000002332 +B0910034553680N00645910EA0000002331 +B0910054553671N00645897EA0000002329 +B0910074553662N00645883EA0000002327 +B0910094553653N00645869EA0000002325 +B0910114553643N00645856EA0000002323 +B0910134553633N00645844EA0000002320 +B0910154553622N00645831EA0000002318 +B0910174553612N00645819EA0000002315 +B0910194553602N00645806EA0000002313 +B0910214553592N00645792EA0000002311 +B0910234553583N00645777EA0000002308 +B0910254553575N00645762EA0000002306 +B0910274553567N00645747EA0000002303 +B0910294553559N00645731EA0000002301 +B0910314553550N00645715EA0000002298 +B0910334553542N00645699EA0000002296 +B0910354553534N00645683EA0000002294 +B0910374553526N00645668EA0000002292 +B0910394553518N00645653EA0000002289 +B0910414553510N00645637EA0000002286 +B0910434553504N00645619EA0000002283 +B0910454553500N00645601EA0000002281 +B0910474553496N00645583EA0000002278 +B0910494553490N00645565EA0000002275 +B0910514553484N00645548EA0000002274 +B0910534553478N00645531EA0000002272 +B0910554553472N00645514EA0000002269 +B0910574553468N00645495EA0000002266 +B0910594553465N00645477EA0000002265 +B0911014553463N00645459EA0000002263 +B0911034553459N00645441EA0000002260 +B0911054553454N00645423EA0000002258 +B0911074553447N00645406EA0000002257 +B0911094553440N00645391EA0000002256 +B0911114553430N00645367EA0000002253 +B0911134553422N00645352EA0000002251 +B0911154553413N00645339EA0000002248 +B0911174553405N00645324EA0000002245 +B0911194553396N00645307EA0000002242 +B0911214553386N00645294EA0000002240 +B0911234553378N00645285EA0000002239 +B0911254553370N00645274EA0000002235 +B0911274553357N00645261EA0000002230 +B0911294553343N00645248EA0000002228 +B0911324553331N00645239EA0000002225 +B0911344553319N00645228EA0000002219 +B0911364553304N00645214EA0000002216 +B0911384553294N00645205EA0000002215 +B0911404553286N00645197EA0000002215 +B0911424553276N00645187EA0000002215 +B0911444553264N00645177EA0000002216 +B0911464553253N00645167EA0000002219 +B0911484553243N00645156EA0000002223 +B0911504553233N00645144EA0000002228 +B0911524553224N00645131EA0000002234 +B0911544553218N00645118EA0000002240 +B0911564553212N00645106EA0000002245 +B0911584553204N00645094EA0000002249 +B0912004553194N00645086EA0000002252 +B0912024553188N00645087EA0000002255 +B0912044553176N00645102EA0000002258 +B0912064553176N00645118EA0000002260 +B0912084553179N00645129EA0000002263 +B0912104553186N00645135EA0000002264 +B0912124553195N00645136EA0000002265 +B0912144553201N00645125EA0000002267 +B0912164553204N00645113EA0000002270 +B0912184553205N00645100EA0000002274 +B0912204553204N00645084EA0000002278 +B0912224553198N00645069EA0000002282 +B0912244553191N00645058EA0000002286 +B0912264553180N00645057EA0000002289 +B0912284553171N00645065EA0000002291 +B0912304553169N00645080EA0000002292 +B0912324553174N00645095EA0000002292 +B0912344553184N00645102EA0000002296 +B0912364553193N00645097EA0000002298 +B0912384553201N00645090EA0000002301 +B0912404553206N00645079EA0000002306 +B0912424553206N00645064EA0000002308 +B0912444553204N00645048EA0000002312 +B0912464553198N00645033EA0000002316 +B0912484553187N00645025EA0000002319 +B0912504553177N00645028EA0000002322 +B0912524553167N00645042EA0000002325 +B0912544553166N00645055EA0000002326 +B0912564553173N00645066EA0000002326 +B0912584553184N00645070EA0000002327 +B0913004553193N00645071EA0000002329 +B0913024553201N00645068EA0000002331 +B0913044553209N00645060EA0000002332 +B0913064553215N00645049EA0000002333 +B0913084553218N00645033EA0000002334 +B0913104553216N00645015EA0000002336 +B0913134553212N00645000EA0000002338 +B0913154553205N00644987EA0000002341 +B0913174553198N00644976EA0000002345 +B0913194553189N00644969EA0000002349 +B0913214553180N00644971EA0000002352 +B0913234553173N00644980EA0000002354 +B0913254553174N00644991EA0000002356 +B0913274553179N00644998EA0000002358 +B0913294553186N00645001EA0000002361 +B0913314553194N00644998EA0000002364 +B0913334553201N00644989EA0000002367 +B0913354553207N00644976EA0000002370 +B0913374553209N00644961EA0000002374 +B0913394553206N00644944EA0000002376 +B0913414553197N00644932EA0000002380 +B0913434553186N00644934EA0000002385 +B0913454553180N00644945EA0000002389 +B0913474553182N00644956EA0000002393 +B0913494553190N00644960EA0000002396 +B0913514553199N00644954EA0000002399 +B0913534553206N00644942EA0000002402 +B0913554553209N00644924EA0000002405 +B0913574553205N00644906EA0000002408 +B0913594553196N00644897EA0000002412 +B0914014553188N00644899EA0000002417 +B0914034553180N00644905EA0000002421 +B0914054553172N00644913EA0000002427 +B0914074553167N00644922EA0000002431 +B0914094553170N00644933EA0000002434 +B0914114553180N00644937EA0000002436 +B0914134553191N00644930EA0000002437 +B0914154553200N00644919EA0000002441 +B0914174553207N00644905EA0000002445 +B0914194553210N00644889EA0000002450 +B0914214553212N00644872EA0000002454 +B0914234553208N00644856EA0000002458 +B0914254553198N00644848EA0000002461 +B0914274553189N00644853EA0000002464 +B0914294553185N00644864EA0000002468 +B0914314553187N00644874EA0000002472 +B0914334553200N00644878EA0000002477 +B0914354553209N00644868EA0000002480 +B0914374553214N00644850EA0000002484 +B0914394553214N00644833EA0000002486 +B0914414553206N00644822EA0000002490 +B0914434553195N00644817EA0000002492 +B0914454553186N00644818EA0000002495 +B0914474553178N00644821EA0000002496 +B0914504553172N00644830EA0000002496 +B0914524553170N00644844EA0000002498 +B0914544553175N00644854EA0000002502 +B0914564553184N00644858EA0000002504 +B0914584553194N00644860EA0000002505 +B0915004553205N00644858EA0000002507 +B0915024553215N00644852EA0000002509 +B0915044553225N00644840EA0000002511 +B0915064553230N00644824EA0000002513 +B0915084553231N00644805EA0000002514 +B0915104553226N00644787EA0000002516 +B0915124553216N00644777EA0000002517 +B0915144553204N00644780EA0000002518 +B0915164553195N00644788EA0000002521 +B0915184553188N00644796EA0000002525 +B0915204553183N00644801EA0000002530 +B0915224553179N00644807EA0000002534 +B0915244553179N00644816EA0000002537 +B0915264553183N00644826EA0000002538 +B0915284553189N00644832EA0000002539 +B0915304553199N00644829EA0000002540 +B0915324553206N00644818EA0000002543 +B0915344553211N00644802EA0000002543 +B0915364553215N00644780EA0000002542 +B0915384553214N00644760EA0000002544 +B0915404553210N00644744EA0000002546 +B0915424553202N00644734EA0000002546 +B0915444553192N00644730EA0000002547 +B0915464553185N00644733EA0000002547 +B0915484553179N00644741EA0000002546 +B0915504553176N00644755EA0000002546 +B0915524553175N00644769EA0000002547 +B0915544553176N00644781EA0000002548 +B0915564553178N00644794EA0000002549 +B0915584553179N00644808EA0000002551 +B0916004553177N00644818EA0000002553 +B0916024553175N00644828EA0000002557 +B0916044553172N00644836EA0000002562 +B0916064553170N00644842EA0000002566 +B0916084553172N00644850EA0000002569 +B0916104553180N00644856EA0000002572 +B0916124553194N00644850EA0000002577 +B0916144553202N00644842EA0000002582 +B0916164553206N00644827EA0000002586 +B0916184553207N00644810EA0000002590 +B0916204553203N00644796EA0000002593 +B0916224553194N00644786EA0000002597 +B0916244553184N00644781EA0000002601 +B0916264553174N00644779EA0000002605 +B0916284553165N00644778EA0000002608 +B0916314553154N00644771EA0000002611 +B0916334553143N00644762EA0000002612 +B0916354553130N00644753EA0000002615 +B0916374553119N00644749EA0000002619 +B0916394553110N00644747EA0000002621 +B0916414553100N00644747EA0000002621 +B0916434553086N00644746EA0000002622 +B0916454553073N00644743EA0000002626 +B0916474553061N00644738EA0000002627 +B0916494553049N00644734EA0000002627 +B0916514553036N00644728EA0000002625 +B0916534553023N00644722EA0000002625 +B0916554553010N00644716EA0000002624 +B0916574552997N00644707EA0000002624 +B0916594552986N00644696EA0000002626 +B0917014552975N00644688EA0000002628 +B0917034552962N00644681EA0000002631 +B0917054552950N00644675EA0000002635 +B0917074552940N00644676EA0000002639 +B0917094552930N00644680EA0000002641 +B0917114552918N00644683EA0000002640 +B0917134552905N00644677EA0000002639 +B0917154552894N00644660EA0000002636 +B0917174552888N00644641EA0000002633 +B0917194552881N00644622EA0000002630 +B0917214552871N00644605EA0000002628 +B0917234552860N00644591EA0000002627 +B0917254552846N00644580EA0000002627 +B0917274552832N00644568EA0000002627 +B0917294552820N00644555EA0000002626 +B0917314552805N00644544EA0000002623 +B0917334552789N00644533EA0000002621 +B0917354552775N00644522EA0000002621 +B0917374552762N00644511EA0000002618 +B0917394552755N00644506EA0000002614 +B0917414552732N00644491EA0000002611 +B0917434552714N00644481EA0000002607 +B0917454552696N00644471EA0000002602 +B0917474552679N00644459EA0000002598 +B0917494552665N00644447EA0000002595 +B0917514552646N00644436EA0000002590 +B0917534552632N00644427EA0000002588 +B0917554552623N00644420EA0000002587 +B0917574552613N00644415EA0000002583 +B0917594552600N00644405EA0000002580 +B0918014552588N00644395EA0000002580 +B0918034552581N00644390EA0000002583 +B0918054552573N00644386EA0000002584 +B0918074552561N00644382EA0000002585 +B0918104552549N00644377EA0000002588 +B0918124552539N00644368EA0000002593 +B0918144552530N00644358EA0000002599 +B0918164552524N00644341EA0000002603 +B0918184552525N00644323EA0000002608 +B0918204552533N00644320EA0000002611 +B0918224552539N00644333EA0000002614 +B0918244552533N00644345EA0000002617 +B0918264552521N00644345EA0000002621 +B0918284552511N00644333EA0000002624 +B0918304552508N00644314EA0000002626 +B0918324552516N00644302EA0000002628 +B0918344552526N00644311EA0000002631 +B0918364552528N00644325EA0000002634 +B0918384552520N00644333EA0000002637 +B0918404552509N00644333EA0000002640 +B0918424552497N00644325EA0000002641 +B0918444552487N00644311EA0000002643 +B0918464552479N00644300EA0000002645 +B0918484552471N00644290EA0000002647 +B0918504552462N00644276EA0000002648 +B0918524552452N00644261EA0000002648 +B0918544552442N00644245EA0000002651 +B0918564552435N00644231EA0000002655 +B0918584552426N00644220EA0000002657 +B0919004552415N00644212EA0000002658 +B0919024552404N00644209EA0000002660 +B0919044552395N00644212EA0000002660 +B0919064552386N00644218EA0000002661 +B0919084552376N00644223EA0000002664 +B0919104552368N00644229EA0000002666 +B0919124552361N00644234EA0000002667 +B0919144552352N00644239EA0000002669 +B0919164552343N00644244EA0000002673 +B0919184552337N00644250EA0000002674 +B0919204552331N00644256EA0000002674 +B0919224552325N00644262EA0000002674 +B0919244552316N00644266EA0000002672 +B0919264552303N00644264EA0000002670 +B0919284552293N00644255EA0000002670 +B0919304552278N00644243EA0000002667 +B0919324552265N00644234EA0000002662 +B0919344552252N00644223EA0000002656 +B0919364552240N00644212EA0000002648 +B0919384552225N00644199EA0000002639 +B0919404552209N00644184EA0000002633 +B0919424552195N00644171EA0000002628 +B0919444552181N00644157EA0000002621 +B0919464552167N00644143EA0000002616 +B0919484552153N00644128EA0000002609 +B0919514552138N00644112EA0000002603 +B0919534552123N00644097EA0000002598 +B0919554552109N00644083EA0000002592 +B0919574552096N00644068EA0000002586 +B0919594552082N00644054EA0000002579 +B0920014552068N00644040EA0000002573 +B0920034552055N00644026EA0000002567 +B0920054552042N00644012EA0000002561 +B0920074552029N00643997EA0000002556 +B0920094552017N00643980EA0000002552 +B0920114552004N00643965EA0000002547 +B0920134551991N00643950EA0000002541 +B0920154551978N00643934EA0000002535 +B0920174551964N00643917EA0000002528 +B0920194551950N00643900EA0000002521 +B0920214551935N00643881EA0000002514 +B0920234551919N00643863EA0000002508 +B0920254551904N00643846EA0000002503 +B0920274551888N00643829EA0000002497 +B0920294551872N00643812EA0000002492 +B0920314551856N00643795EA0000002487 +B0920334551839N00643779EA0000002482 +B0920354551823N00643763EA0000002479 +B0920374551807N00643747EA0000002475 +B0920394551790N00643731EA0000002472 +B0920414551773N00643715EA0000002469 +B0920434551757N00643700EA0000002465 +B0920454551739N00643685EA0000002461 +B0920474551722N00643670EA0000002458 +B0920494551704N00643655EA0000002454 +B0920514551687N00643640EA0000002451 +B0920534551671N00643624EA0000002446 +B0920554551653N00643608EA0000002442 +B0920574551635N00643593EA0000002439 +B0920594551619N00643577EA0000002438 +B0921014551602N00643562EA0000002437 +B0921034551586N00643547EA0000002434 +B0921054551571N00643530EA0000002430 +B0921074551554N00643514EA0000002426 +B0921094551536N00643500EA0000002422 +B0921114551509N00643482EA0000002419 +B0921134551493N00643469EA0000002416 +B0921154551476N00643458EA0000002413 +B0921174551459N00643445EA0000002409 +B0921194551442N00643432EA0000002405 +B0921214551426N00643419EA0000002402 +B0921234551410N00643406EA0000002399 +B0921254551394N00643392EA0000002395 +B0921274551379N00643378EA0000002392 +B0921294551364N00643363EA0000002388 +B0921324551349N00643349EA0000002385 +B0921344551335N00643335EA0000002384 +B0921364551323N00643322EA0000002382 +B0921384551311N00643310EA0000002378 +B0921404551296N00643298EA0000002375 +B0921424551283N00643286EA0000002374 +B0921444551271N00643273EA0000002371 +B0921464551257N00643261EA0000002368 +B0921484551244N00643248EA0000002365 +B0921504551231N00643235EA0000002363 +B0921524551218N00643223EA0000002360 +B0921544551205N00643210EA0000002357 +B0921564551192N00643197EA0000002355 +B0921584551179N00643184EA0000002352 +B0922004551165N00643173EA0000002349 +B0922024551151N00643163EA0000002346 +B0922044551137N00643151EA0000002344 +B0922064551123N00643140EA0000002341 +B0922084551110N00643127EA0000002338 +B0922104551097N00643113EA0000002336 +B0922124551084N00643099EA0000002333 +B0922144551072N00643086EA0000002330 +B0922164551060N00643071EA0000002327 +B0922184551047N00643058EA0000002324 +B0922204551034N00643045EA0000002322 +B0922224551022N00643032EA0000002319 +B0922244551009N00643020EA0000002316 +B0922264550996N00643009EA0000002314 +B0922284550982N00642999EA0000002312 +B0922304550970N00642989EA0000002309 +B0922324550957N00642978EA0000002305 +B0922344550943N00642966EA0000002301 +B0922364550931N00642952EA0000002299 +B0922384550919N00642938EA0000002295 +B0922404550908N00642923EA0000002292 +B0922424550896N00642908EA0000002289 +B0922444550886N00642894EA0000002286 +B0922464550876N00642878EA0000002281 +B0922484550865N00642862EA0000002277 +B0922504550853N00642846EA0000002273 +B0922524550838N00642824EA0000002267 +B0922544550828N00642808EA0000002262 +B0922564550818N00642791EA0000002258 +B0922584550808N00642777EA0000002254 +B0923004550797N00642765EA0000002248 +B0923024550784N00642752EA0000002242 +B0923044550773N00642740EA0000002239 +B0923064550764N00642732EA0000002237 +B0923084550754N00642723EA0000002233 +B0923114550742N00642713EA0000002231 +B0923134550729N00642704EA0000002231 +B0923154550718N00642695EA0000002230 +B0923174550707N00642683EA0000002231 +B0923194550698N00642675EA0000002233 +B0923214550690N00642668EA0000002233 +B0923234550682N00642661EA0000002231 +B0923254550673N00642650EA0000002229 +B0923274550663N00642639EA0000002230 +B0923294550653N00642631EA0000002232 +B0923314550645N00642623EA0000002233 +B0923334550638N00642613EA0000002233 +B0923354550631N00642603EA0000002234 +B0923374550623N00642594EA0000002234 +B0923394550616N00642584EA0000002234 +B0923414550609N00642575EA0000002232 +B0923434550601N00642565EA0000002229 +B0923454550593N00642552EA0000002225 +B0923474550587N00642537EA0000002221 +B0923494550580N00642522EA0000002219 +B0923514550575N00642508EA0000002217 +B0923534550570N00642493EA0000002216 +B0923554550564N00642478EA0000002217 +B0923574550558N00642464EA0000002217 +B0923594550553N00642451EA0000002217 +B0924014550549N00642437EA0000002215 +B0924034550543N00642420EA0000002213 +B0924054550537N00642403EA0000002212 +B0924074550531N00642388EA0000002214 +B0924094550526N00642374EA0000002218 +B0924114550520N00642360EA0000002221 +B0924134550514N00642346EA0000002224 +B0924154550508N00642333EA0000002227 +B0924174550505N00642320EA0000002232 +B0924194550507N00642311EA0000002235 +B0924214550516N00642311EA0000002238 +B0924234550520N00642324EA0000002240 +B0924254550512N00642340EA0000002241 +B0924274550496N00642341EA0000002242 +B0924294550483N00642327EA0000002244 +B0924314550475N00642313EA0000002248 +B0924334550463N00642296EA0000002251 +B0924354550456N00642282EA0000002251 +B0924374550447N00642268EA0000002251 +B0924394550434N00642257EA0000002251 +B0924414550422N00642246EA0000002250 +B0924434550410N00642231EA0000002251 +B0924454550398N00642219EA0000002252 +B0924474550388N00642209EA0000002256 +B0924504550379N00642200EA0000002259 +B0924524550370N00642188EA0000002262 +B0924544550362N00642178EA0000002266 +B0924564550354N00642169EA0000002271 +B0924584550346N00642158EA0000002276 +B0925004550342N00642145EA0000002280 +B0925024550343N00642132EA0000002284 +B0925044550352N00642127EA0000002287 +B0925064550360N00642133EA0000002291 +B0925084550362N00642145EA0000002295 +B0925104550356N00642157EA0000002299 +B0925124550344N00642161EA0000002304 +B0925144550333N00642156EA0000002310 +B0925164550326N00642146EA0000002315 +B0925184550322N00642133EA0000002319 +B0925204550324N00642119EA0000002322 +B0925224550332N00642114EA0000002325 +B0925244550340N00642120EA0000002328 +B0925264550342N00642135EA0000002331 +B0925284550337N00642147EA0000002334 +B0925304550325N00642153EA0000002337 +B0925324550313N00642148EA0000002341 +B0925344550305N00642138EA0000002346 +B0925364550299N00642128EA0000002350 +B0925384550295N00642115EA0000002353 +B0925404550296N00642101EA0000002356 +B0925424550302N00642091EA0000002358 +B0925444550310N00642091EA0000002361 +B0925464550315N00642101EA0000002364 +B0925484550314N00642115EA0000002366 +B0925504550306N00642126EA0000002369 +B0925524550293N00642128EA0000002372 +B0925544550283N00642119EA0000002375 +B0925564550277N00642107EA0000002379 +B0925584550272N00642097EA0000002383 +B0926004550268N00642087EA0000002385 +B0926024550266N00642073EA0000002387 +B0926044550270N00642061EA0000002389 +B0926064550279N00642059EA0000002391 +B0926084550285N00642075EA0000002393 +B0926104550280N00642087EA0000002394 +B0926124550268N00642089EA0000002396 +B0926144550259N00642078EA0000002399 +B0926164550252N00642068EA0000002402 +B0926184550243N00642058EA0000002405 +B0926204550237N00642047EA0000002408 +B0926224550231N00642036EA0000002410 +B0926244550225N00642025EA0000002412 +B0926264550217N00642013EA0000002414 +B0926294550209N00642001EA0000002416 +B0926314550203N00641990EA0000002419 +B0926334550195N00641982EA0000002422 +B0926354550186N00641973EA0000002422 +B0926374550179N00641963EA0000002421 +B0926394550177N00641953EA0000002420 +B0926414550180N00641944EA0000002418 +B0926434550189N00641945EA0000002416 +B0926454550196N00641957EA0000002415 +B0926474550197N00641975EA0000002414 +B0926494550191N00641992EA0000002414 +B0926514550179N00642006EA0000002413 +B0926534550166N00642007EA0000002412 +B0926554550157N00641997EA0000002410 +B0926574550149N00641986EA0000002410 +B0926594550141N00641974EA0000002410 +B0927014550135N00641961EA0000002410 +B0927034550127N00641948EA0000002411 +B0927054550120N00641935EA0000002412 +B0927074550114N00641921EA0000002414 +B0927094550110N00641907EA0000002415 +B0927114550106N00641893EA0000002417 +B0927134550103N00641880EA0000002419 +B0927154550099N00641865EA0000002422 +B0927174550099N00641850EA0000002425 +B0927194550097N00641834EA0000002429 +B0927214550096N00641818EA0000002433 +B0927234550096N00641804EA0000002439 +B0927254550097N00641794EA0000002446 +B0927274550102N00641787EA0000002452 +B0927294550110N00641797EA0000002458 +B0927314550114N00641814EA0000002464 +B0927334550108N00641827EA0000002472 +B0927354550096N00641829EA0000002479 +B0927374550083N00641821EA0000002485 +B0927394550075N00641807EA0000002492 +B0927414550070N00641793EA0000002501 +B0927434550066N00641774EA0000002511 +B0927454550068N00641762EA0000002517 +B0927474550073N00641758EA0000002522 +B0927494550079N00641764EA0000002527 +B0927514550082N00641777EA0000002531 +B0927534550077N00641792EA0000002535 +B0927554550064N00641801EA0000002539 +B0927574550054N00641799EA0000002546 +B0928004550043N00641797EA0000002551 +B0928024550031N00641792EA0000002555 +B0928044550023N00641777EA0000002558 +B0928064550022N00641757EA0000002561 +B0928084550029N00641744EA0000002564 +B0928104550038N00641746EA0000002569 +B0928124550041N00641759EA0000002574 +B0928144550037N00641772EA0000002579 +B0928164550027N00641784EA0000002584 +B0928184550014N00641788EA0000002589 +B0928204550002N00641781EA0000002593 +B0928224549993N00641767EA0000002597 +B0928244549990N00641748EA0000002601 +B0928264549994N00641733EA0000002606 +B0928284550002N00641727EA0000002610 +B0928304550009N00641732EA0000002613 +B0928324550012N00641747EA0000002617 +B0928344550006N00641760EA0000002621 +B0928364549995N00641768EA0000002627 +B0928384549983N00641769EA0000002631 +B0928404549971N00641763EA0000002634 +B0928424549961N00641753EA0000002637 +B0928444549955N00641735EA0000002640 +B0928464549955N00641718EA0000002643 +B0928484549959N00641708EA0000002647 +B0928504549965N00641704EA0000002650 +B0928524549972N00641706EA0000002653 +B0928544549975N00641717EA0000002655 +B0928564549971N00641731EA0000002657 +B0928584549960N00641738EA0000002659 +B0929004549947N00641738EA0000002662 +B0929024549934N00641735EA0000002664 +B0929044549922N00641731EA0000002666 +B0929064549908N00641727EA0000002668 +B0929084549895N00641724EA0000002671 +B0929104549883N00641719EA0000002673 +B0929124549872N00641716EA0000002676 +B0929144549860N00641714EA0000002677 +B0929164549848N00641712EA0000002676 +B0929184549831N00641707EA0000002675 +B0929204549819N00641702EA0000002674 +B0929224549805N00641696EA0000002673 +B0929244549793N00641691EA0000002672 +B0929264549780N00641687EA0000002671 +B0929284549767N00641684EA0000002669 +B0929304549753N00641681EA0000002666 +B0929324549740N00641674EA0000002663 +B0929344549728N00641666EA0000002661 +B0929374549716N00641662EA0000002660 +B0929394549702N00641658EA0000002657 +B0929414549687N00641652EA0000002654 +B0929434549674N00641647EA0000002652 +B0929454549661N00641644EA0000002650 +B0929474549648N00641639EA0000002647 +B0929494549636N00641635EA0000002645 +B0929514549623N00641631EA0000002641 +B0929534549610N00641628EA0000002639 +B0929554549598N00641624EA0000002637 +B0929574549587N00641618EA0000002635 +B0929594549576N00641614EA0000002633 +B0930014549564N00641610EA0000002632 +B0930034549551N00641604EA0000002632 +B0930054549540N00641600EA0000002633 +B0930074549528N00641596EA0000002632 +B0930094549514N00641588EA0000002630 +B0930114549500N00641579EA0000002631 +B0930134549486N00641573EA0000002630 +B0930154549471N00641565EA0000002628 +B0930174549454N00641556EA0000002627 +B0930194549438N00641547EA0000002628 +B0930214549422N00641537EA0000002629 +B0930234549407N00641525EA0000002630 +B0930254549394N00641513EA0000002633 +B0930274549385N00641505EA0000002638 +B0930294549376N00641498EA0000002642 +B0930314549365N00641493EA0000002646 +B0930334549353N00641486EA0000002651 +B0930354549342N00641477EA0000002656 +B0930374549330N00641467EA0000002659 +B0930394549319N00641458EA0000002662 +B0930414549307N00641448EA0000002664 +B0930434549295N00641435EA0000002667 +B0930454549283N00641424EA0000002671 +B0930474549271N00641415EA0000002676 +B0930494549258N00641407EA0000002680 +B0930514549244N00641400EA0000002683 +B0930534549231N00641387EA0000002685 +B0930554549221N00641375EA0000002687 +B0930574549210N00641365EA0000002687 +B0930594549192N00641345EA0000002690 +B0931014549180N00641335EA0000002693 +B0931034549170N00641327EA0000002697 +B0931054549159N00641319EA0000002699 +B0931074549149N00641311EA0000002700 +B0931094549137N00641301EA0000002700 +B0931114549125N00641290EA0000002697 +B0931134549113N00641275EA0000002697 +B0931154549104N00641261EA0000002697 +B0931184549094N00641249EA0000002696 +B0931204549083N00641238EA0000002696 +B0931224549074N00641227EA0000002697 +B0931244549066N00641218EA0000002700 +B0931264549056N00641208EA0000002701 +B0931284549046N00641196EA0000002705 +B0931304549037N00641183EA0000002710 +B0931324549030N00641171EA0000002716 +B0931344549019N00641163EA0000002720 +B0931364549007N00641159EA0000002725 +B0931384548996N00641156EA0000002728 +B0931404548984N00641151EA0000002731 +B0931424548972N00641141EA0000002733 +B0931444548961N00641131EA0000002734 +B0931464548949N00641122EA0000002734 +B0931484548936N00641112EA0000002734 +B0931504548925N00641102EA0000002735 +B0931524548913N00641093EA0000002735 +B0931544548900N00641082EA0000002734 +B0931564548886N00641069EA0000002735 +B0931584548872N00641056EA0000002737 +B0932004548862N00641047EA0000002741 +B0932024548853N00641042EA0000002742 +B0932044548843N00641035EA0000002742 +B0932064548828N00641021EA0000002743 +B0932084548816N00641008EA0000002745 +B0932104548809N00641003EA0000002749 +B0932124548800N00640997EA0000002751 +B0932144548786N00640988EA0000002754 +B0932164548775N00640977EA0000002759 +B0932184548766N00640967EA0000002761 +B0932204548755N00640958EA0000002762 +B0932224548744N00640947EA0000002764 +B0932244548735N00640936EA0000002765 +B0932264548725N00640925EA0000002764 +B0932284548712N00640912EA0000002762 +B0932304548700N00640896EA0000002763 +B0932324548690N00640883EA0000002763 +B0932344548680N00640870EA0000002762 +B0932364548665N00640848EA0000002761 +B0932384548655N00640833EA0000002760 +B0932404548646N00640820EA0000002760 +B0932424548637N00640807EA0000002758 +B0932444548629N00640793EA0000002756 +B0932464548620N00640778EA0000002753 +B0932484548610N00640764EA0000002751 +B0932504548601N00640749EA0000002748 +B0932524548592N00640733EA0000002746 +B0932544548584N00640719EA0000002745 +B0932574548575N00640707EA0000002743 +B0932594548565N00640692EA0000002742 +B0933014548556N00640676EA0000002741 +B0933034548547N00640661EA0000002740 +B0933054548536N00640647EA0000002738 +B0933074548525N00640631EA0000002737 +B0933094548514N00640617EA0000002738 +B0933114548503N00640605EA0000002740 +B0933134548493N00640592EA0000002741 +B0933154548482N00640579EA0000002740 +B0933174548471N00640564EA0000002740 +B0933194548462N00640549EA0000002740 +B0933214548454N00640534EA0000002738 +B0933234548445N00640518EA0000002737 +B0933254548437N00640501EA0000002736 +B0933274548428N00640487EA0000002735 +B0933294548418N00640473EA0000002733 +B0933314548409N00640458EA0000002733 +B0933334548402N00640447EA0000002734 +B0933354548394N00640438EA0000002732 +B0933374548385N00640426EA0000002729 +B0933394548376N00640410EA0000002728 +B0933414548367N00640398EA0000002727 +B0933434548359N00640386EA0000002726 +B0933454548351N00640373EA0000002725 +B0933474548344N00640361EA0000002723 +B0933494548335N00640348EA0000002722 +B0933514548326N00640335EA0000002722 +B0933534548317N00640324EA0000002724 +B0933554548311N00640318EA0000002727 +B0933574548302N00640314EA0000002730 +B0933594548293N00640307EA0000002734 +B0934014548285N00640301EA0000002738 +B0934034548277N00640295EA0000002740 +B0934054548269N00640289EA0000002742 +B0934074548260N00640283EA0000002745 +B0934094548252N00640279EA0000002747 +B0934114548243N00640274EA0000002747 +B0934134548235N00640267EA0000002748 +B0934154548226N00640260EA0000002749 +B0934174548213N00640248EA0000002751 +B0934194548203N00640242EA0000002754 +B0934214548196N00640240EA0000002756 +B0934234548188N00640237EA0000002757 +B0934254548179N00640233EA0000002757 +B0934274548168N00640227EA0000002753 +B0934294548158N00640218EA0000002750 +B0934314548150N00640205EA0000002745 +B0934334548140N00640191EA0000002740 +B0934354548130N00640174EA0000002733 +B0934384548119N00640154EA0000002728 +B0934404548111N00640136EA0000002724 +B0934424548103N00640124EA0000002721 +B0934444548094N00640114EA0000002715 +B0934464548083N00640101EA0000002711 +B0934484548074N00640087EA0000002709 +B0934504548067N00640072EA0000002705 +B0934524548059N00640055EA0000002701 +B0934544548051N00640036EA0000002699 +B0934564548044N00640022EA0000002698 +B0934584548034N00640011EA0000002694 +B0935004548023N00639998EA0000002690 +B0935024548017N00639989EA0000002685 +B0935044547999N00639962EA0000002683 +B0935064547995N00639954EA0000002684 +B0935084547984N00639943EA0000002682 +B0935104547974N00639932EA0000002680 +B0935124547966N00639919EA0000002681 +B0935144547960N00639905EA0000002682 +B0935164547956N00639890EA0000002681 +B0935184547953N00639870EA0000002679 +B0935204547948N00639848EA0000002677 +B0935224547945N00639827EA0000002677 +B0935244547942N00639808EA0000002676 +B0935264547939N00639787EA0000002672 +B0935284547936N00639765EA0000002669 +B0935304547934N00639743EA0000002667 +B0935324547933N00639723EA0000002664 +B0935344547932N00639701EA0000002660 +B0935364547933N00639678EA0000002656 +B0935384547933N00639656EA0000002654 +B0935404547934N00639635EA0000002650 +B0935424547935N00639613EA0000002647 +B0935444547937N00639590EA0000002645 +B0935464547936N00639570EA0000002643 +B0935484547936N00639551EA0000002642 +B0935504547936N00639533EA0000002641 +B0935524547932N00639519EA0000002640 +B0935544547926N00639502EA0000002639 +B0935564547923N00639483EA0000002637 +B0935584547916N00639449EA0000002633 +B0936004547914N00639424EA0000002633 +B0936024547913N00639398EA0000002634 +B0936044547912N00639377EA0000002638 +B0936064547908N00639365EA0000002643 +B0936084547899N00639352EA0000002646 +B0936104547891N00639333EA0000002649 +B0936124547883N00639314EA0000002651 +B0936144547873N00639295EA0000002651 +B0936164547864N00639275EA0000002652 +B0936194547856N00639253EA0000002652 +B0936214547849N00639232EA0000002652 +B0936234547842N00639211EA0000002652 +B0936254547837N00639188EA0000002650 +B0936274547832N00639165EA0000002650 +B0936294547827N00639143EA0000002650 +B0936314547822N00639121EA0000002648 +B0936334547818N00639097EA0000002646 +B0936354547816N00639073EA0000002645 +B0936374547816N00639051EA0000002645 +B0936394547816N00639041EA0000002642 +B0936414547814N00639010EA0000002639 +B0936434547814N00638988EA0000002636 +B0936454547811N00638971EA0000002635 +B0936474547805N00638960EA0000002633 +B0936494547801N00638944EA0000002628 +B0936514547799N00638921EA0000002622 +B0936534547798N00638896EA0000002618 +B0936554547796N00638876EA0000002615 +B0936574547793N00638857EA0000002611 +B0936594547790N00638839EA0000002609 +B0937014547789N00638822EA0000002605 +B0937034547788N00638803EA0000002600 +B0937054547789N00638781EA0000002597 +B0937074547793N00638763EA0000002595 +B0937094547795N00638748EA0000002590 +B0937114547797N00638731EA0000002585 +B0937134547801N00638711EA0000002580 +B0937154547804N00638691EA0000002577 +B0937174547805N00638672EA0000002574 +B0937194547805N00638654EA0000002570 +B0937214547806N00638636EA0000002568 +B0937234547806N00638618EA0000002567 +B0937254547804N00638602EA0000002566 +B0937274547801N00638584EA0000002563 +B0937294547799N00638564EA0000002562 +B0937314547798N00638543EA0000002560 +B0937334547796N00638524EA0000002558 +B0937354547794N00638506EA0000002556 +B0937374547794N00638488EA0000002555 +B0937394547791N00638462EA0000002555 +B0937414547791N00638449EA0000002556 +B0937434547790N00638432EA0000002556 +B0937454547789N00638412EA0000002558 +B0937474547792N00638394EA0000002561 +B0937494547793N00638378EA0000002563 +B0937514547791N00638360EA0000002563 +B0937534547790N00638341EA0000002565 +B0937554547790N00638323EA0000002567 +B0937584547789N00638306EA0000002568 +B0938004547789N00638287EA0000002568 +B0938024547788N00638266EA0000002569 +B0938044547785N00638250EA0000002572 +B0938064547781N00638235EA0000002573 +B0938084547776N00638220EA0000002575 +B0938104547771N00638205EA0000002578 +B0938124547766N00638190EA0000002579 +B0938144547761N00638174EA0000002579 +B0938164547757N00638166EA0000002580 +B0938184547748N00638141EA0000002581 +B0938204547745N00638126EA0000002582 +B0938224547741N00638110EA0000002581 +B0938244547734N00638095EA0000002580 +B0938264547729N00638080EA0000002578 +B0938284547724N00638065EA0000002576 +B0938304547720N00638048EA0000002573 +B0938324547717N00638031EA0000002572 +B0938344547712N00638014EA0000002572 +B0938364547708N00637997EA0000002574 +B0938384547703N00637981EA0000002576 +B0938404547697N00637965EA0000002577 +B0938424547689N00637950EA0000002578 +B0938444547682N00637937EA0000002578 +B0938464547675N00637923EA0000002576 +B0938484547667N00637904EA0000002574 +B0938504547660N00637884EA0000002574 +B0938524547655N00637864EA0000002576 +B0938544547650N00637846EA0000002577 +B0938564547645N00637828EA0000002578 +B0938584547639N00637810EA0000002577 +B0939004547632N00637790EA0000002577 +B0939024547626N00637777EA0000002580 +B0939044547623N00637772EA0000002583 +B0939064547619N00637764EA0000002584 +B0939084547614N00637750EA0000002587 +B0939104547610N00637738EA0000002592 +B0939124547608N00637730EA0000002598 +B0939144547607N00637720EA0000002603 +B0939164547607N00637706EA0000002607 +B0939184547605N00637692EA0000002611 +B0939204547602N00637671EA0000002616 +B0939224547599N00637657EA0000002618 +B0939244547596N00637641EA0000002619 +B0939264547593N00637625EA0000002618 +B0939284547590N00637608EA0000002616 +B0939304547586N00637591EA0000002613 +B0939324547582N00637572EA0000002611 +B0939344547580N00637554EA0000002609 +B0939364547576N00637540EA0000002607 +B0939394547570N00637526EA0000002603 +B0939414547564N00637509EA0000002599 +B0939434547561N00637491EA0000002598 +B0939454547556N00637476EA0000002596 +B0939474547550N00637461EA0000002592 +B0939494547544N00637445EA0000002588 +B0939514547539N00637428EA0000002584 +B0939534547534N00637412EA0000002582 +B0939554547528N00637396EA0000002578 +B0939574547523N00637381EA0000002573 +B0939594547519N00637362EA0000002568 +B0940014547516N00637343EA0000002565 +B0940034547512N00637327EA0000002562 +B0940054547508N00637310EA0000002558 +B0940074547505N00637294EA0000002555 +B0940094547502N00637281EA0000002552 +B0940114547496N00637266EA0000002547 +B0940134547491N00637250EA0000002545 +B0940154547484N00637234EA0000002542 +B0940174547475N00637219EA0000002539 +B0940194547467N00637203EA0000002537 +B0940214547460N00637188EA0000002536 +B0940234547454N00637174EA0000002533 +B0940254547445N00637160EA0000002529 +B0940274547436N00637145EA0000002526 +B0940294547426N00637131EA0000002525 +B0940314547417N00637118EA0000002522 +B0940334547407N00637104EA0000002518 +B0940354547397N00637088EA0000002516 +B0940374547386N00637074EA0000002514 +B0940394547377N00637061EA0000002512 +B0940414547369N00637047EA0000002509 +B0940434547359N00637034EA0000002504 +B0940454547348N00637022EA0000002500 +B0940474547337N00637011EA0000002495 +B0940494547326N00637000EA0000002491 +B0940514547314N00636990EA0000002488 +B0940534547304N00636980EA0000002486 +B0940554547294N00636971EA0000002485 +B0940574547283N00636962EA0000002485 +B0940594547275N00636953EA0000002487 +B0941014547260N00636941EA0000002486 +B0941034547250N00636932EA0000002486 +B0941054547242N00636923EA0000002485 +B0941074547235N00636913EA0000002483 +B0941094547225N00636900EA0000002482 +B0941114547215N00636889EA0000002483 +B0941134547206N00636879EA0000002482 +B0941154547197N00636868EA0000002483 +B0941174547186N00636859EA0000002485 +B0941204547178N00636849EA0000002485 +B0941224547170N00636836EA0000002486 +B0941244547162N00636824EA0000002488 +B0941264547155N00636812EA0000002489 +B0941284547147N00636799EA0000002490 +B0941304547140N00636785EA0000002490 +B0941324547133N00636770EA0000002491 +B0941344547126N00636755EA0000002491 +B0941364547117N00636743EA0000002491 +B0941384547107N00636731EA0000002491 +B0941404547099N00636719EA0000002489 +B0941424547090N00636707EA0000002486 +B0941444547080N00636692EA0000002482 +B0941464547070N00636673EA0000002479 +B0941484547062N00636657EA0000002477 +B0941504547058N00636649EA0000002473 +B0941524547045N00636623EA0000002467 +B0941544547036N00636605EA0000002464 +B0941564547026N00636590EA0000002460 +B0941584547016N00636574EA0000002456 +B0942004547008N00636555EA0000002452 +B0942024547000N00636536EA0000002450 +B0942044546992N00636518EA0000002446 +B0942064546985N00636499EA0000002442 +B0942084546977N00636479EA0000002439 +B0942104546968N00636461EA0000002437 +B0942124546959N00636444EA0000002436 +B0942144546949N00636427EA0000002434 +B0942164546939N00636410EA0000002433 +B0942184546928N00636393EA0000002433 +B0942204546918N00636377EA0000002433 +B0942224546907N00636361EA0000002432 +B0942244546897N00636346EA0000002433 +B0942264546887N00636333EA0000002436 +B0942284546879N00636321EA0000002440 +B0942304546873N00636311EA0000002446 +B0942324546865N00636305EA0000002450 +B0942344546858N00636295EA0000002455 +B0942364546853N00636281EA0000002461 +B0942384546846N00636271EA0000002469 +B0942404546838N00636264EA0000002475 +B0942424546826N00636252EA0000002483 +B0942444546816N00636242EA0000002487 +B0942464546808N00636232EA0000002490 +B0942484546799N00636219EA0000002492 +B0942504546791N00636203EA0000002496 +B0942524546784N00636188EA0000002501 +B0942544546778N00636176EA0000002507 +B0942564546772N00636164EA0000002510 +B0942584546766N00636150EA0000002513 +B0943014546759N00636136EA0000002517 +B0943034546751N00636125EA0000002519 +B0943054546743N00636111EA0000002520 +B0943074546734N00636096EA0000002523 +B0943094546726N00636088EA0000002526 +B0943114546719N00636083EA0000002528 +B0943134546713N00636075EA0000002527 +B0943154546704N00636062EA0000002526 +B0943174546696N00636049EA0000002526 +B0943194546689N00636037EA0000002525 +B0943214546683N00636024EA0000002523 +B0943234546676N00636009EA0000002520 +B0943254546668N00635993EA0000002517 +B0943274546660N00635978EA0000002515 +B0943294546654N00635965EA0000002513 +B0943314546648N00635950EA0000002509 +B0943334546642N00635935EA0000002507 +B0943354546636N00635921EA0000002506 +B0943374546631N00635906EA0000002502 +B0943394546624N00635889EA0000002497 +B0943414546618N00635873EA0000002495 +B0943434546615N00635860EA0000002494 +B0943454546610N00635848EA0000002492 +B0943474546605N00635834EA0000002490 +B0943494546599N00635820EA0000002490 +B0943514546594N00635808EA0000002487 +B0943534546587N00635792EA0000002484 +B0943554546578N00635774EA0000002483 +B0943574546570N00635757EA0000002483 +B0943594546564N00635738EA0000002482 +B0944014546556N00635718EA0000002483 +B0944034546548N00635700EA0000002485 +B0944054546542N00635687EA0000002490 +B0944074546536N00635678EA0000002494 +B0944094546530N00635667EA0000002496 +B0944114546523N00635654EA0000002498 +B0944134546517N00635641EA0000002500 +B0944154546511N00635629EA0000002502 +B0944174546503N00635615EA0000002503 +B0944194546498N00635599EA0000002506 +B0944214546492N00635588EA0000002509 +B0944234546483N00635569EA0000002509 +B0944254546477N00635554EA0000002510 +B0944274546470N00635541EA0000002510 +B0944294546464N00635527EA0000002509 +B0944314546459N00635509EA0000002508 +B0944334546453N00635491EA0000002508 +B0944354546448N00635472EA0000002509 +B0944374546444N00635455EA0000002511 +B0944404546440N00635441EA0000002511 +B0944424546435N00635427EA0000002510 +B0944444546430N00635411EA0000002508 +B0944464546422N00635392EA0000002506 +B0944484546413N00635373EA0000002507 +B0944504546406N00635357EA0000002505 +B0944524546398N00635339EA0000002503 +B0944544546391N00635320EA0000002500 +B0944564546384N00635303EA0000002499 +B0944584546378N00635287EA0000002496 +B0945004546371N00635269EA0000002492 +B0945024546363N00635251EA0000002490 +B0945044546354N00635235EA0000002490 +B0945064546347N00635222EA0000002491 +B0945084546340N00635208EA0000002491 +B0945104546332N00635192EA0000002493 +B0945124546324N00635177EA0000002495 +B0945144546317N00635164EA0000002496 +B0945164546309N00635149EA0000002495 +B0945184546301N00635134EA0000002495 +B0945204546294N00635121EA0000002494 +B0945224546287N00635108EA0000002493 +B0945244546282N00635094EA0000002490 +B0945264546275N00635080EA0000002488 +B0945284546268N00635065EA0000002485 +B0945304546259N00635048EA0000002482 +B0945324546251N00635031EA0000002480 +B0945344546244N00635015EA0000002478 +B0945364546236N00634999EA0000002475 +B0945384546227N00634982EA0000002472 +B0945404546219N00634965EA0000002468 +B0945424546210N00634949EA0000002464 +B0945444546200N00634933EA0000002461 +B0945464546191N00634917EA0000002459 +B0945484546182N00634903EA0000002456 +B0945504546173N00634888EA0000002453 +B0945524546165N00634872EA0000002450 +B0945544546156N00634856EA0000002447 +B0945564546148N00634839EA0000002445 +B0945584546141N00634823EA0000002442 +B0946004546129N00634799EA0000002439 +B0946024546121N00634783EA0000002437 +B0946044546112N00634768EA0000002434 +B0946064546103N00634754EA0000002433 +B0946084546093N00634739EA0000002431 +B0946104546083N00634726EA0000002430 +B0946124546073N00634713EA0000002428 +B0946144546064N00634701EA0000002428 +B0946164546055N00634690EA0000002426 +B0946194546045N00634678EA0000002423 +B0946214546034N00634662EA0000002421 +B0946234546025N00634647EA0000002421 +B0946254546015N00634633EA0000002419 +B0946274546005N00634617EA0000002418 +B0946294545995N00634601EA0000002418 +B0946314545985N00634585EA0000002420 +B0946334545976N00634572EA0000002424 +B0946354545969N00634561EA0000002432 +B0946374545963N00634551EA0000002438 +B0946394545957N00634538EA0000002445 +B0946414545955N00634521EA0000002450 +B0946434545960N00634505EA0000002456 +B0946454545970N00634499EA0000002461 +B0946474545980N00634510EA0000002466 +B0946494545983N00634525EA0000002471 +B0946514545974N00634533EA0000002477 +B0946534545961N00634523EA0000002485 +B0946554545954N00634510EA0000002492 +B0946574545949N00634496EA0000002498 +B0946594545946N00634480EA0000002503 +B0947014545941N00634464EA0000002508 +B0947034545937N00634451EA0000002515 +B0947054545933N00634440EA0000002519 +B0947074545927N00634428EA0000002522 +B0947094545920N00634415EA0000002523 +B0947114545914N00634403EA0000002523 +B0947134545909N00634391EA0000002523 +B0947154545903N00634375EA0000002520 +B0947174545897N00634357EA0000002514 +B0947194545889N00634338EA0000002506 +B0947214545882N00634316EA0000002501 +B0947234545874N00634296EA0000002498 +B0947254545867N00634276EA0000002495 +B0947274545860N00634256EA0000002491 +B0947294545853N00634237EA0000002489 +B0947314545845N00634219EA0000002487 +B0947334545840N00634200EA0000002484 +B0947354545835N00634180EA0000002482 +B0947374545830N00634161EA0000002480 +B0947394545825N00634142EA0000002479 +B0947414545818N00634112EA0000002477 +B0947434545812N00634089EA0000002478 +B0947454545808N00634078EA0000002482 +B0947474545804N00634073EA0000002489 +B0947494545797N00634065EA0000002496 +B0947514545790N00634052EA0000002503 +B0947534545787N00634042EA0000002511 +B0947554545784N00634033EA0000002517 +B0947574545778N00634022EA0000002522 +B0948004545769N00634013EA0000002530 +B0948024545764N00634008EA0000002538 +B0948044545759N00634000EA0000002543 +B0948064545753N00633988EA0000002549 +B0948084545748N00633975EA0000002557 +B0948104545746N00633962EA0000002562 +B0948124545744N00633949EA0000002566 +B0948144545741N00633936EA0000002568 +B0948164545738N00633923EA0000002568 +B0948184545736N00633909EA0000002567 +B0948204545734N00633894EA0000002563 +B0948224545731N00633877EA0000002560 +B0948244545728N00633859EA0000002557 +B0948264545725N00633840EA0000002552 +B0948284545721N00633819EA0000002550 +B0948304545719N00633809EA0000002548 +B0948324545714N00633782EA0000002545 +B0948344545711N00633762EA0000002543 +B0948364545708N00633742EA0000002542 +B0948384545706N00633722EA0000002540 +B0948404545703N00633701EA0000002538 +B0948424545700N00633679EA0000002537 +B0948444545697N00633658EA0000002537 +B0948464545695N00633636EA0000002535 +B0948484545692N00633614EA0000002533 +B0948504545688N00633592EA0000002532 +B0948524545682N00633570EA0000002532 +B0948544545677N00633552EA0000002533 +B0948564545671N00633544EA0000002538 +B0948584545664N00633535EA0000002539 +B0949004545655N00633523EA0000002541 +B0949024545648N00633509EA0000002545 +B0949044545641N00633498EA0000002550 +B0949064545634N00633489EA0000002554 +B0949084545626N00633482EA0000002558 +B0949104545620N00633476EA0000002561 +B0949124545613N00633470EA0000002562 +B0949144545604N00633461EA0000002561 +B0949164545596N00633448EA0000002560 +B0949184545589N00633437EA0000002562 +B0949204545582N00633429EA0000002562 +B0949224545571N00633413EA0000002559 +B0949244545562N00633399EA0000002558 +B0949264545554N00633383EA0000002556 +B0949284545549N00633363EA0000002555 +B0949304545546N00633344EA0000002556 +B0949324545543N00633323EA0000002559 +B0949344545542N00633305EA0000002564 +B0949364545538N00633295EA0000002570 +B0949384545530N00633283EA0000002574 +B0949414545522N00633268EA0000002579 +B0949434545515N00633254EA0000002585 +B0949454545509N00633242EA0000002590 +B0949474545501N00633230EA0000002593 +B0949494545493N00633217EA0000002596 +B0949514545485N00633200EA0000002596 +B0949534545479N00633184EA0000002598 +B0949554545472N00633170EA0000002598 +B0949574545464N00633157EA0000002597 +B0949594545456N00633142EA0000002595 +B0950014545447N00633125EA0000002594 +B0950034545440N00633110EA0000002594 +B0950054545433N00633095EA0000002591 +B0950074545429N00633088EA0000002587 +B0950094545416N00633063EA0000002583 +B0950114545413N00633054EA0000002580 +B0950134545403N00633029EA0000002576 +B0950154545397N00633011EA0000002571 +B0950174545390N00632993EA0000002567 +B0950194545384N00632974EA0000002564 +B0950214545380N00632956EA0000002563 +B0950234545376N00632941EA0000002561 +B0950254545371N00632925EA0000002558 +B0950274545366N00632906EA0000002556 +B0950294545362N00632890EA0000002553 +B0950314545359N00632873EA0000002549 +B0950334545355N00632854EA0000002544 +B0950354545351N00632835EA0000002541 +B0950374545347N00632818EA0000002536 +B0950394545342N00632801EA0000002531 +B0950414545337N00632783EA0000002525 +B0950434545330N00632766EA0000002520 +B0950454545324N00632749EA0000002515 +B0950474545319N00632731EA0000002511 +B0950494545314N00632714EA0000002507 +B0950514545309N00632696EA0000002501 +B0950534545304N00632677EA0000002497 +B0950554545299N00632660EA0000002493 +B0950574545294N00632643EA0000002488 +B0950594545290N00632625EA0000002484 +B0951014545285N00632608EA0000002481 +B0951034545278N00632583EA0000002474 +B0951054545272N00632566EA0000002469 +B0951074545267N00632547EA0000002465 +B0951094545263N00632529EA0000002461 +B0951114545259N00632511EA0000002457 +B0951134545255N00632493EA0000002453 +B0951154545250N00632475EA0000002449 +B0951174545245N00632457EA0000002445 +B0951194545239N00632440EA0000002442 +B0951224545233N00632424EA0000002439 +B0951244545228N00632406EA0000002435 +B0951264545222N00632384EA0000002429 +B0951284545217N00632362EA0000002425 +B0951304545212N00632341EA0000002422 +B0951324545207N00632323EA0000002416 +B0951344545201N00632302EA0000002411 +B0951364545195N00632281EA0000002407 +B0951384545191N00632262EA0000002405 +B0951404545188N00632250EA0000002405 +B0951424545186N00632237EA0000002402 +B0951444545184N00632230EA0000002401 +B0951464545178N00632208EA0000002402 +B0951484545173N00632195EA0000002400 +B0951504545167N00632179EA0000002397 +B0951524545167N00632179EA0000002396 +B0951544545156N00632149EA0000002394 +B0951564545151N00632133EA0000002391 +B0951584545145N00632117EA0000002390 +B0952004545140N00632102EA0000002390 +B0952024545137N00632086EA0000002389 +B0952044545133N00632070EA0000002387 +B0952064545126N00632054EA0000002387 +B0952084545120N00632038EA0000002387 +B0952104545115N00632021EA0000002387 +B0952124545112N00632003EA0000002388 +B0952144545107N00631985EA0000002389 +B0952164545102N00631969EA0000002389 +B0952184545099N00631951EA0000002390 +B0952204545095N00631935EA0000002393 +B0952224545088N00631921EA0000002396 +B0952244545081N00631910EA0000002397 +B0952264545073N00631897EA0000002398 +B0952284545066N00631882EA0000002401 +B0952304545060N00631868EA0000002403 +B0952324545054N00631855EA0000002404 +B0952344545047N00631839EA0000002405 +B0952364545039N00631823EA0000002408 +B0952384545030N00631807EA0000002410 +B0952404545022N00631789EA0000002412 +B0952424545015N00631769EA0000002415 +B0952444545007N00631740EA0000002420 +B0952464545000N00631723EA0000002422 +B0952484544993N00631704EA0000002425 +B0952504544988N00631684EA0000002428 +B0952524544985N00631665EA0000002432 +B0952544544980N00631645EA0000002435 +B0952564544975N00631626EA0000002440 +B0952584544972N00631609EA0000002447 +B0953014544969N00631594EA0000002452 +B0953034544965N00631578EA0000002457 +B0953054544962N00631561EA0000002464 +B0953074544961N00631548EA0000002470 +B0953094544958N00631538EA0000002475 +B0953114544953N00631530EA0000002478 +B0953134544946N00631524EA0000002480 +B0953154544939N00631518EA0000002481 +B0953174544933N00631510EA0000002483 +B0953194544927N00631503EA0000002485 +B0953214544924N00631500EA0000002486 +B0953234544916N00631486EA0000002486 +B0953254544912N00631475EA0000002486 +B0953274544908N00631464EA0000002485 +B0953294544904N00631451EA0000002483 +B0953314544899N00631438EA0000002480 +B0953334544896N00631421EA0000002478 +B0953354544894N00631405EA0000002478 +B0953374544890N00631392EA0000002476 +B0953394544886N00631376EA0000002474 +B0953414544882N00631360EA0000002472 +B0953434544878N00631345EA0000002470 +B0953454544876N00631332EA0000002468 +B0953474544872N00631317EA0000002463 +B0953494544868N00631302EA0000002460 +B0953514544864N00631287EA0000002456 +B0953534544860N00631271EA0000002452 +B0953554544856N00631255EA0000002448 +B0953574544853N00631240EA0000002443 +B0953594544850N00631225EA0000002439 +B0954014544847N00631210EA0000002435 +B0954034544845N00631196EA0000002432 +B0954054544842N00631181EA0000002430 +B0954074544841N00631166EA0000002429 +B0954094544840N00631151EA0000002426 +B0954114544838N00631134EA0000002424 +B0954134544837N00631117EA0000002423 +B0954154544837N00631102EA0000002425 +B0954174544835N00631088EA0000002425 +B0954194544834N00631073EA0000002424 +B0954214544834N00631058EA0000002423 +B0954234544834N00631038EA0000002418 +B0954254544833N00631022EA0000002414 +B0954274544832N00631006EA0000002413 +B0954294544832N00630992EA0000002412 +B0954314544831N00630980EA0000002413 +B0954334544830N00630968EA0000002414 +B0954354544828N00630956EA0000002416 +B0954374544825N00630943EA0000002417 +B0954394544822N00630929EA0000002418 +B0954424544819N00630914EA0000002419 +B0954444544818N00630898EA0000002419 +B0954464544818N00630884EA0000002419 +B0954484544817N00630870EA0000002417 +B0954504544815N00630854EA0000002413 +B0954524544812N00630837EA0000002409 +B0954544544809N00630819EA0000002406 +B0954564544807N00630803EA0000002402 +B0954584544806N00630795EA0000002398 +B0955004544803N00630768EA0000002395 +B0955024544801N00630751EA0000002392 +B0955044544800N00630737EA0000002388 +B0955064544798N00630719EA0000002383 +B0955084544798N00630699EA0000002380 +B0955104544797N00630681EA0000002380 +B0955124544796N00630666EA0000002382 +B0955144544794N00630644EA0000002385 +B0955174544791N00630630EA0000002388 +B0955194544789N00630616EA0000002391 +B0955214544787N00630604EA0000002393 +B0955234544784N00630593EA0000002393 +B0955254544781N00630579EA0000002392 +B0955274544777N00630563EA0000002388 +B0955294544772N00630548EA0000002385 +B0955314544771N00630540EA0000002382 +B0955334544772N00630516EA0000002378 +B0955354544772N00630498EA0000002375 +B0955374544772N00630481EA0000002371 +B0955394544773N00630462EA0000002367 +B0955414544772N00630443EA0000002365 +B0955434544771N00630424EA0000002362 +B0955454544771N00630405EA0000002360 +B0955474544772N00630385EA0000002359 +B0955494544773N00630370EA0000002361 +B0955514544774N00630359EA0000002363 +B0955534544774N00630346EA0000002361 +B0955554544776N00630333EA0000002362 +B0955574544781N00630323EA0000002362 +B0955594544789N00630315EA0000002363 +B0956014544795N00630306EA0000002363 +B0956034544802N00630296EA0000002364 +B0956054544808N00630285EA0000002365 +B0956074544815N00630276EA0000002365 +B0956094544825N00630266EA0000002367 +B0956114544835N00630257EA0000002370 +B0956134544844N00630248EA0000002375 +B0956154544850N00630240EA0000002380 +B0956174544858N00630230EA0000002385 +B0956194544872N00630229EA0000002390 +B0956214544884N00630239EA0000002397 +B0956234544891N00630254EA0000002403 +B0956254544889N00630275EA0000002414 +B0956274544879N00630278EA0000002422 +B0956294544872N00630273EA0000002431 +B0956314544870N00630265EA0000002438 +B0956334544870N00630252EA0000002443 +B0956354544876N00630240EA0000002448 +B0956374544887N00630233EA0000002454 +B0956394544898N00630237EA0000002460 +B0956424544908N00630250EA0000002465 +B0956444544910N00630266EA0000002469 +B0956464544904N00630273EA0000002475 +B0956484544897N00630270EA0000002481 +B0956504544892N00630264EA0000002488 +B0956524544889N00630257EA0000002494 +B0956544544884N00630247EA0000002498 +B0956564544884N00630234EA0000002503 +B0956584544892N00630225EA0000002507 +B0957004544905N00630221EA0000002512 +B0957024544916N00630226EA0000002517 +B0957044544922N00630239EA0000002521 +B0957064544919N00630253EA0000002526 +B0957084544913N00630250EA0000002530 +B0957104544908N00630241EA0000002536 +B0957124544907N00630231EA0000002542 +B0957144544910N00630218EA0000002547 +B0957164544919N00630208EA0000002552 +B0957184544930N00630209EA0000002556 +B0957204544937N00630221EA0000002560 +B0957224544939N00630236EA0000002563 +B0957244544935N00630248EA0000002566 +B0957264544927N00630252EA0000002570 +B0957284544921N00630252EA0000002574 +B0957304544915N00630248EA0000002578 +B0957324544911N00630238EA0000002580 +B0957344544911N00630223EA0000002582 +B0957364544917N00630211EA0000002584 +B0957384544929N00630204EA0000002584 +B0957404544941N00630207EA0000002585 +B0957424544949N00630219EA0000002585 +B0957444544949N00630236EA0000002581 +B0957464544944N00630246EA0000002583 +B0957484544934N00630243EA0000002585 +B0957504544927N00630236EA0000002587 +B0957524544919N00630233EA0000002588 +B0957544544911N00630230EA0000002589 +B0957564544903N00630225EA0000002592 +B0957584544896N00630224EA0000002596 +B0958004544882N00630221EA0000002603 +B0958024544873N00630218EA0000002609 +B0958044544865N00630216EA0000002616 +B0958064544858N00630216EA0000002622 +B0958084544849N00630214EA0000002627 +B0958104544840N00630209EA0000002631 +B0958124544833N00630200EA0000002633 +B0958144544826N00630188EA0000002633 +B0958164544818N00630175EA0000002631 +B0958194544813N00630165EA0000002630 +B0958214544809N00630153EA0000002627 +B0958234544804N00630142EA0000002625 +B0958254544799N00630133EA0000002626 +B0958274544794N00630123EA0000002627 +B0958294544789N00630113EA0000002629 +B0958314544784N00630107EA0000002629 +B0958334544779N00630101EA0000002628 +B0958354544774N00630092EA0000002625 +B0958374544768N00630080EA0000002621 +B0958394544762N00630067EA0000002617 +B0958414544756N00630054EA0000002615 +B0958434544751N00630041EA0000002612 +B0958454544748N00630034EA0000002606 +B0958474544742N00630010EA0000002600 +B0958494544742N00630010EA0000002596 +B0958514544734N00629981EA0000002593 +B0958534544730N00629966EA0000002587 +B0958554544724N00629950EA0000002582 +B0958574544718N00629934EA0000002578 +B0958594544713N00629919EA0000002576 +B0959014544707N00629906EA0000002572 +B0959034544702N00629892EA0000002569 +B0959054544697N00629877EA0000002567 +B0959074544691N00629863EA0000002565 +B0959094544686N00629850EA0000002563 +B0959114544680N00629837EA0000002561 +B0959134544673N00629823EA0000002560 +B0959154544667N00629811EA0000002558 +B0959174544660N00629798EA0000002556 +B0959194544653N00629785EA0000002554 +B0959214544645N00629771EA0000002553 +B0959234544639N00629761EA0000002556 +B0959254544633N00629754EA0000002560 +B0959274544626N00629747EA0000002566 +B0959294544619N00629740EA0000002573 +B0959314544613N00629731EA0000002576 +B0959334544607N00629722EA0000002581 +B0959354544604N00629715EA0000002585 +B0959374544601N00629712EA0000002588 +B0959394544596N00629703EA0000002587 +B0959414544593N00629681EA0000002583 +B0959434544591N00629668EA0000002579 +B0959454544588N00629653EA0000002578 +B0959474544584N00629638EA0000002578 +B0959494544583N00629626EA0000002582 +B0959514544584N00629614EA0000002589 +B0959534544583N00629599EA0000002597 +B0959564544582N00629579EA0000002603 +B0959584544583N00629558EA0000002610 +B1000004544582N00629538EA0000002616 +B1000024544580N00629522EA0000002620 +B1000044544578N00629504EA0000002624 +B1000064544575N00629484EA0000002626 +B1000084544568N00629468EA0000002629 +B1000104544562N00629454EA0000002632 +B1000124544556N00629438EA0000002633 +B1000144544553N00629416EA0000002633 +B1000164544549N00629400EA0000002635 +B1000184544546N00629385EA0000002635 +B1000204544542N00629366EA0000002636 +B1000224544539N00629357EA0000002638 +B1000244544539N00629357EA0000002639 +B1000264544524N00629312EA0000002639 +B1000284544519N00629291EA0000002639 +B1000304544516N00629273EA0000002639 +B1000324544513N00629256EA0000002638 +B1000344544511N00629238EA0000002635 +B1000364544507N00629219EA0000002632 +B1000384544503N00629199EA0000002630 +B1000404544500N00629180EA0000002629 +B1000424544496N00629163EA0000002629 +B1000444544493N00629147EA0000002628 +B1000464544490N00629130EA0000002626 +B1000484544486N00629114EA0000002625 +B1000504544482N00629098EA0000002623 +B1000524544478N00629082EA0000002621 +B1000544544474N00629065EA0000002617 +B1000564544470N00629049EA0000002613 +B1000584544464N00629031EA0000002607 +B1001004544456N00629015EA0000002601 +B1001024544447N00628998EA0000002594 +B1001044544440N00628978EA0000002587 +B1001064544434N00628958EA0000002580 +B1001084544430N00628938EA0000002575 +B1001104544429N00628922EA0000002571 +B1001124544426N00628904EA0000002566 +B1001144544419N00628875EA0000002560 +B1001164544415N00628858EA0000002556 +B1001184544413N00628841EA0000002551 +B1001204544409N00628821EA0000002544 +B1001224544403N00628801EA0000002538 +B1001244544398N00628780EA0000002533 +B1001264544393N00628759EA0000002529 +B1001284544390N00628740EA0000002527 +B1001304544387N00628720EA0000002524 +B1001334544385N00628699EA0000002521 +B1001354544381N00628678EA0000002518 +B1001374544377N00628658EA0000002515 +B1001394544372N00628637EA0000002510 +B1001414544369N00628616EA0000002507 +B1001434544366N00628595EA0000002504 +B1001454544363N00628573EA0000002500 +B1001474544361N00628551EA0000002497 +B1001494544359N00628529EA0000002495 +B1001514544356N00628509EA0000002491 +B1001534544355N00628487EA0000002487 +B1001554544354N00628466EA0000002484 +B1001574544352N00628445EA0000002481 +B1001594544351N00628434EA0000002478 +B1002014544347N00628402EA0000002474 +B1002034544344N00628380EA0000002471 +B1002054544340N00628358EA0000002468 +B1002074544336N00628337EA0000002465 +B1002094544331N00628316EA0000002461 +B1002114544327N00628295EA0000002458 +B1002134544322N00628274EA0000002454 +B1002154544318N00628253EA0000002451 +B1002174544314N00628232EA0000002447 +B1002194544310N00628210EA0000002443 +B1002214544306N00628189EA0000002439 +B1002234544302N00628166EA0000002436 +B1002254544299N00628144EA0000002433 +B1002274544296N00628121EA0000002429 +B1002294544293N00628099EA0000002425 +B1002314544290N00628077EA0000002421 +B1002334544286N00628055EA0000002417 +B1002354544284N00628033EA0000002413 +B1002374544280N00628010EA0000002410 +B1002394544277N00627988EA0000002407 +B1002414544275N00627965EA0000002403 +B1002434544273N00627943EA0000002400 +B1002454544271N00627920EA0000002397 +B1002474544269N00627897EA0000002393 +B1002494544266N00627874EA0000002390 +B1002514544264N00627852EA0000002388 +B1002534544261N00627829EA0000002385 +B1002554544256N00627795EA0000002382 +B1002574544253N00627773EA0000002380 +B1002594544250N00627750EA0000002378 +B1003014544247N00627728EA0000002375 +B1003034544244N00627705EA0000002372 +B1003054544242N00627682EA0000002370 +B1003074544240N00627660EA0000002367 +B1003094544236N00627636EA0000002364 +B1003114544234N00627613EA0000002362 +B1003144544232N00627591EA0000002360 +B1003164544230N00627570EA0000002357 +B1003184544229N00627547EA0000002354 +B1003204544228N00627524EA0000002352 +B1003224544226N00627502EA0000002350 +B1003244544224N00627480EA0000002348 +B1003264544223N00627457EA0000002345 +B1003284544221N00627434EA0000002343 +B1003304544218N00627412EA0000002341 +B1003324544216N00627390EA0000002339 +B1003344544213N00627367EA0000002337 +B1003364544211N00627356EA0000002335 +B1003384544206N00627321EA0000002333 +B1003404544204N00627298EA0000002332 +B1003424544200N00627276EA0000002329 +B1003444544197N00627254EA0000002327 +B1003464544194N00627231EA0000002325 +B1003484544191N00627208EA0000002323 +B1003504544189N00627185EA0000002320 +B1003524544186N00627162EA0000002318 +B1003544544183N00627139EA0000002316 +B1003564544180N00627116EA0000002313 +B1003584544178N00627093EA0000002311 +B1004004544175N00627070EA0000002308 +B1004024544172N00627048EA0000002305 +B1004044544170N00627025EA0000002302 +B1004064544167N00627002EA0000002300 +B1004084544164N00626979EA0000002297 +B1004104544161N00626956EA0000002294 +B1004124544157N00626934EA0000002292 +B1004144544154N00626912EA0000002289 +B1004164544150N00626889EA0000002287 +B1004184544145N00626868EA0000002284 +B1004204544141N00626846EA0000002281 +B1004224544136N00626824EA0000002279 +B1004244544132N00626802EA0000002276 +B1004264544128N00626780EA0000002273 +B1004284544123N00626758EA0000002270 +B1004304544120N00626735EA0000002267 +B1004324544116N00626712EA0000002264 +B1004344544114N00626688EA0000002261 +B1004364544110N00626652EA0000002256 +B1004384544108N00626628EA0000002254 +B1004404544106N00626604EA0000002252 +B1004424544104N00626580EA0000002249 +B1004444544102N00626557EA0000002246 +B1004464544100N00626533EA0000002244 +B1004484544098N00626509EA0000002241 +B1004504544095N00626485EA0000002238 +B1004524544093N00626461EA0000002235 +B1004554544092N00626437EA0000002233 +B1004574544089N00626413EA0000002230 +B1004594544088N00626390EA0000002226 +B1005014544086N00626366EA0000002223 +B1005034544083N00626342EA0000002220 +B1005054544081N00626319EA0000002217 +B1005074544079N00626295EA0000002214 +B1005094544076N00626272EA0000002211 +B1005114544074N00626248EA0000002208 +B1005134544073N00626236EA0000002204 +B1005154544070N00626201EA0000002201 +B1005174544069N00626177EA0000002198 +B1005194544067N00626154EA0000002195 +B1005214544065N00626130EA0000002191 +B1005234544063N00626107EA0000002188 +B1005254544061N00626083EA0000002185 +B1005274544059N00626060EA0000002182 +B1005294544058N00626037EA0000002179 +B1005314544056N00626013EA0000002176 +B1005334544054N00625990EA0000002173 +B1005354544053N00625966EA0000002170 +B1005374544051N00625943EA0000002167 +B1005394544049N00625920EA0000002164 +B1005414544048N00625896EA0000002161 +B1005434544047N00625873EA0000002158 +B1005454544045N00625850EA0000002156 +B1005474544043N00625827EA0000002153 +B1005494544041N00625805EA0000002150 +B1005514544039N00625783EA0000002146 +B1005534544037N00625760EA0000002143 +B1005554544036N00625738EA0000002140 +B1005574544034N00625716EA0000002137 +B1005594544032N00625694EA0000002133 +B1006014544031N00625672EA0000002130 +B1006034544029N00625650EA0000002127 +B1006054544027N00625628EA0000002124 +B1006074544025N00625606EA0000002120 +B1006094544024N00625584EA0000002117 +B1006114544021N00625562EA0000002114 +B1006134544020N00625540EA0000002111 +B1006154544018N00625517EA0000002108 +B1006174544016N00625484EA0000002104 +B1006194544014N00625462EA0000002101 +B1006214544012N00625440EA0000002098 +B1006234544010N00625417EA0000002095 +B1006254544009N00625394EA0000002092 +B1006274544008N00625372EA0000002089 +B1006294544006N00625350EA0000002086 +B1006314544005N00625327EA0000002083 +B1006334544003N00625305EA0000002081 +B1006364544002N00625282EA0000002078 +B1006384544000N00625260EA0000002075 +B1006404543999N00625237EA0000002072 +B1006424543997N00625215EA0000002069 +B1006444543996N00625193EA0000002066 +B1006464543995N00625171EA0000002063 +B1006484543994N00625148EA0000002060 +B1006504543993N00625126EA0000002057 +B1006524543992N00625104EA0000002054 +B1006544543992N00625081EA0000002051 +B1006564543991N00625059EA0000002049 +B1006584543990N00625037EA0000002046 +B1007004543989N00625014EA0000002043 +B1007024543988N00624992EA0000002041 +B1007044543987N00624970EA0000002038 +B1007064543986N00624959EA0000002036 +B1007084543984N00624927EA0000002034 +B1007104543983N00624906EA0000002031 +B1007124543981N00624885EA0000002027 +B1007144543979N00624863EA0000002025 +B1007164543976N00624842EA0000002023 +B1007184543972N00624822EA0000002020 +B1007204543969N00624801EA0000002016 +B1007224543965N00624779EA0000002013 +B1007244543961N00624759EA0000002011 +B1007264543957N00624738EA0000002007 +B1007284543954N00624717EA0000002004 +B1007304543949N00624695EA0000002001 +B1007324543945N00624675EA0000001998 +B1007344543941N00624654EA0000001995 +B1007364543937N00624633EA0000001992 +B1007384543934N00624612EA0000001989 +B1007404543931N00624590EA0000001986 +B1007424543928N00624570EA0000001983 +B1007444543926N00624550EA0000001980 +B1007464543924N00624529EA0000001977 +B1007484543922N00624509EA0000001974 +B1007504543920N00624489EA0000001971 +B1007524543918N00624468EA0000001968 +B1007544543916N00624448EA0000001966 +B1007564543914N00624428EA0000001962 +B1007584543910N00624397EA0000001958 +B1008004543908N00624377EA0000001955 +B1008024543905N00624357EA0000001952 +B1008044543902N00624337EA0000001949 +B1008064543900N00624317EA0000001946 +B1008084543897N00624296EA0000001943 +B1008104543894N00624276EA0000001940 +B1008124543891N00624256EA0000001937 +B1008154543888N00624235EA0000001933 +B1008174543885N00624214EA0000001930 +B1008194543882N00624194EA0000001928 +B1008214543879N00624173EA0000001925 +B1008234543877N00624152EA0000001922 +B1008254543874N00624132EA0000001920 +B1008274543872N00624111EA0000001917 +B1008294543869N00624091EA0000001914 +B1008314543867N00624070EA0000001912 +B1008334543865N00624049EA0000001910 +B1008354543862N00624028EA0000001908 +B1008374543859N00624008EA0000001905 +B1008394543857N00623987EA0000001903 +B1008414543854N00623966EA0000001900 +B1008434543851N00623945EA0000001897 +B1008454543848N00623924EA0000001894 +B1008474543845N00623903EA0000001891 +B1008494543842N00623882EA0000001888 +B1008514543839N00623862EA0000001885 +B1008534543836N00623841EA0000001883 +B1008554543833N00623820EA0000001880 +B1008574543829N00623799EA0000001877 +B1008594543826N00623779EA0000001874 +B1009014543822N00623758EA0000001871 +B1009034543819N00623737EA0000001869 +B1009054543815N00623717EA0000001867 +B1009074543810N00623697EA0000001864 +B1009094543805N00623677EA0000001861 +B1009114543800N00623656EA0000001858 +B1009134543794N00623637EA0000001856 +B1009154543789N00623617EA0000001853 +B1009174543783N00623597EA0000001850 +B1009194543777N00623577EA0000001847 +B1009214543771N00623557EA0000001844 +B1009234543765N00623537EA0000001842 +B1009254543759N00623518EA0000001840 +B1009274543753N00623498EA0000001836 +B1009294543748N00623478EA0000001833 +B1009314543743N00623458EA0000001830 +B1009334543737N00623438EA0000001828 +B1009354543729N00623409EA0000001824 +B1009374543724N00623389EA0000001821 +B1009394543719N00623370EA0000001818 +B1009414543712N00623351EA0000001815 +B1009434543706N00623332EA0000001812 +B1009454543698N00623313EA0000001810 +B1009474543691N00623294EA0000001807 +B1009494543683N00623276EA0000001805 +B1009514543676N00623258EA0000001802 +B1009534543668N00623239EA0000001800 +B1009564543661N00623221EA0000001797 +B1009584543653N00623203EA0000001794 +B1010004543646N00623185EA0000001792 +B1010024543638N00623167EA0000001789 +B1010044543630N00623150EA0000001786 +B1010064543623N00623131EA0000001783 +B1010084543616N00623113EA0000001781 +B1010104543608N00623094EA0000001778 +B1010124543601N00623076EA0000001776 +B1010144543594N00623058EA0000001773 +B1010164543586N00623040EA0000001770 +B1010184543579N00623021EA0000001767 +B1010204543576N00623012EA0000001765 +B1010224543566N00622984EA0000001762 +B1010244543560N00622965EA0000001759 +B1010264543554N00622946EA0000001756 +B1010284543547N00622927EA0000001753 +B1010304543540N00622909EA0000001751 +B1010324543533N00622891EA0000001748 +B1010344543526N00622873EA0000001745 +B1010364543518N00622855EA0000001743 +B1010384543511N00622837EA0000001740 +B1010404543504N00622820EA0000001737 +B1010424543497N00622802EA0000001734 +B1010444543489N00622784EA0000001732 +B1010464543481N00622766EA0000001729 +B1010484543473N00622749EA0000001727 +B1010504543465N00622731EA0000001724 +B1010524543458N00622712EA0000001721 +B1010544543450N00622694EA0000001718 +B1010564543442N00622675EA0000001715 +B1010584543436N00622656EA0000001712 +B1011004543428N00622638EA0000001709 +B1011024543421N00622619EA0000001706 +B1011044543414N00622601EA0000001703 +B1011064543407N00622582EA0000001700 +B1011084543400N00622563EA0000001696 +B1011104543393N00622544EA0000001693 +B1011124543383N00622516EA0000001688 +B1011144543377N00622497EA0000001685 +B1011164543371N00622478EA0000001682 +B1011184543365N00622459EA0000001679 +B1011204543359N00622440EA0000001676 +B1011224543354N00622421EA0000001672 +B1011244543348N00622402EA0000001669 +B1011264543342N00622382EA0000001666 +B1011284543336N00622364EA0000001663 +B1011304543330N00622344EA0000001660 +B1011324543325N00622325EA0000001657 +B1011344543319N00622307EA0000001654 +B1011374543313N00622288EA0000001651 +B1011394543307N00622269EA0000001648 +B1011414543301N00622250EA0000001645 +B1011434543295N00622231EA0000001642 +B1011454543289N00622213EA0000001639 +B1011474543282N00622194EA0000001636 +B1011494543277N00622176EA0000001633 +B1011514543271N00622158EA0000001630 +B1011534543264N00622141EA0000001626 +B1011554543258N00622123EA0000001623 +B1011574543251N00622106EA0000001620 +B1011594543244N00622089EA0000001617 +B1012014543240N00622081EA0000001615 +B1012034543231N00622055EA0000001613 +B1012054543227N00622038EA0000001610 +B1012074543223N00622020EA0000001607 +B1012094543220N00622001EA0000001604 +B1012114543219N00621981EA0000001601 +B1012134543218N00621961EA0000001599 +B1012154543216N00621938EA0000001597 +B1012174543213N00621919EA0000001596 +B1012194543208N00621907EA0000001594 +B1012214543203N00621893EA0000001590 +B1012234543200N00621875EA0000001586 +B1012254543196N00621860EA0000001582 +B1012274543190N00621846EA0000001579 +B1012294543186N00621831EA0000001576 +B1012314543182N00621816EA0000001573 +B1012334543176N00621800EA0000001571 +B1012354543171N00621789EA0000001569 +B1012374543164N00621776EA0000001566 +B1012394543159N00621761EA0000001564 +B1012414543153N00621749EA0000001563 +B1012434543146N00621735EA0000001559 +B1012454543138N00621720EA0000001557 +B1012474543129N00621707EA0000001556 +B1012494543121N00621694EA0000001555 +B1012514543114N00621681EA0000001555 +B1012534543105N00621665EA0000001553 +B1012554543100N00621648EA0000001551 +B1012574543098N00621630EA0000001550 +B1012594543098N00621614EA0000001547 +B1013014543096N00621601EA0000001543 +B1013034543095N00621585EA0000001539 +B1013054543096N00621567EA0000001536 +B1013074543098N00621549EA0000001534 +B1013094543097N00621536EA0000001535 +B1013114543097N00621521EA0000001534 +B1013134543100N00621504EA0000001534 +B1013154543107N00621490EA0000001535 +B1013184543114N00621476EA0000001536 +B1013204543120N00621461EA0000001536 +B1013224543125N00621445EA0000001537 +B1013244543128N00621431EA0000001538 +B1013264543130N00621418EA0000001539 +B1013284543130N00621405EA0000001539 +B1013304543128N00621392EA0000001539 +B1013324543124N00621380EA0000001540 +B1013344543122N00621369EA0000001540 +B1013364543120N00621357EA0000001539 +B1013384543118N00621344EA0000001539 +B1013404543117N00621332EA0000001538 +B1013424543113N00621320EA0000001536 +B1013444543110N00621307EA0000001535 +B1013464543110N00621295EA0000001534 +B1013484543111N00621282EA0000001532 +B1013504543111N00621267EA0000001529 +B1013524543111N00621251EA0000001527 +B1013544543110N00621236EA0000001524 +B1013564543106N00621222EA0000001521 +B1013584543099N00621209EA0000001519 +B1014004543092N00621197EA0000001518 +B1014024543085N00621185EA0000001517 +B1014044543077N00621175EA0000001517 +B1014064543068N00621165EA0000001518 +B1014084543061N00621157EA0000001519 +B1014104543054N00621150EA0000001518 +B1014124543046N00621141EA0000001515 +B1014144543038N00621130EA0000001514 +B1014164543030N00621119EA0000001513 +B1014184543021N00621110EA0000001512 +B1014204543013N00621099EA0000001511 +B1014224543004N00621084EA0000001511 +B1014244542997N00621069EA0000001512 +B1014264542990N00621058EA0000001515 +B1014284542984N00621051EA0000001518 +B1014304542979N00621044EA0000001522 +B1014324542971N00621033EA0000001525 +B1014344542964N00621029EA0000001526 +B1014364542955N00621030EA0000001527 +B1014384542947N00621037EA0000001527 +B1014404542946N00621052EA0000001526 +B1014424542954N00621062EA0000001525 +B1014444542968N00621061EA0000001524 +B1014464542977N00621051EA0000001525 +B1014484542981N00621038EA0000001526 +B1014504542981N00621024EA0000001526 +B1014524542979N00621011EA0000001529 +B1014544542975N00621001EA0000001531 +B1014564542971N00620993EA0000001531 +B1014594542965N00620983EA0000001530 +B1015014542959N00620973EA0000001528 +B1015034542951N00620964EA0000001525 +B1015054542943N00620954EA0000001522 +B1015074542935N00620944EA0000001520 +B1015094542927N00620935EA0000001518 +B1015114542917N00620927EA0000001517 +B1015134542908N00620921EA0000001516 +B1015154542899N00620915EA0000001515 +B1015174542888N00620910EA0000001514 +B1015194542878N00620904EA0000001515 +B1015214542868N00620898EA0000001516 +B1015234542858N00620893EA0000001515 +B1015254542849N00620890EA0000001513 +B1015274542838N00620886EA0000001512 +B1015294542827N00620882EA0000001513 +B1015314542822N00620881EA0000001514 +B1015334542816N00620880EA0000001514 +B1015354542807N00620877EA0000001514 +B1015374542800N00620872EA0000001516 +B1015394542795N00620870EA0000001520 +B1015414542790N00620875EA0000001523 +B1015434542789N00620884EA0000001525 +B1015454542792N00620895EA0000001526 +B1015474542800N00620901EA0000001528 +B1015494542811N00620897EA0000001529 +B1015514542821N00620886EA0000001529 +B1015534542824N00620869EA0000001530 +B1015554542820N00620852EA0000001530 +B1015574542813N00620843EA0000001531 +B1015594542806N00620838EA0000001533 +B1016014542800N00620836EA0000001536 +B1016034542793N00620836EA0000001537 +B1016054542784N00620835EA0000001537 +B1016074542774N00620832EA0000001537 +B1016094542767N00620829EA0000001536 +B1016114542758N00620827EA0000001534 +B1016134542741N00620825EA0000001531 +B1016154542731N00620823EA0000001529 +B1016174542720N00620821EA0000001526 +B1016194542709N00620817EA0000001524 +B1016214542699N00620812EA0000001523 +B1016234542689N00620805EA0000001522 +B1016254542681N00620798EA0000001523 +B1016274542677N00620795EA0000001526 +B1016294542670N00620795EA0000001527 +B1016314542665N00620801EA0000001529 +B1016334542667N00620812EA0000001531 +B1016354542678N00620815EA0000001533 +B1016384542689N00620810EA0000001536 +B1016404542693N00620794EA0000001539 +B1016424542693N00620775EA0000001544 +B1016444542689N00620760EA0000001548 +B1016464542682N00620754EA0000001552 +B1016484542676N00620760EA0000001556 +B1016504542677N00620771EA0000001559 +B1016524542685N00620775EA0000001563 +B1016544542696N00620766EA0000001567 +B1016564542703N00620750EA0000001572 +B1016584542701N00620733EA0000001576 +B1017004542696N00620720EA0000001580 +B1017024542689N00620713EA0000001584 +B1017044542684N00620720EA0000001588 +B1017064542681N00620737EA0000001596 +B1017084542686N00620744EA0000001598 +B1017104542694N00620750EA0000001600 +B1017124542705N00620748EA0000001602 +B1017144542717N00620738EA0000001606 +B1017164542724N00620722EA0000001609 +B1017184542718N00620704EA0000001611 +B1017204542708N00620692EA0000001614 +B1017224542700N00620689EA0000001620 +B1017244542692N00620685EA0000001623 +B1017264542683N00620682EA0000001627 +B1017284542676N00620686EA0000001632 +B1017304542674N00620694EA0000001636 +B1017324542673N00620704EA0000001637 +B1017344542674N00620717EA0000001639 +B1017364542684N00620725EA0000001640 +B1017384542696N00620723EA0000001641 +B1017404542703N00620710EA0000001642 +B1017424542703N00620691EA0000001644 +B1017444542698N00620679EA0000001646 +B1017464542691N00620671EA0000001649 +B1017484542684N00620663EA0000001652 +B1017504542676N00620657EA0000001656 +B1017524542669N00620653EA0000001661 +B1017544542661N00620657EA0000001666 +B1017564542658N00620667EA0000001668 +B1017584542661N00620679EA0000001672 +B1018004542669N00620684EA0000001676 +B1018024542679N00620683EA0000001677 +B1018044542689N00620677EA0000001678 +B1018064542696N00620659EA0000001679 +B1018084542692N00620641EA0000001680 +B1018104542684N00620631EA0000001685 +B1018124542677N00620626EA0000001688 +B1018144542671N00620618EA0000001690 +B1018164542663N00620615EA0000001691 +B1018194542656N00620620EA0000001691 +B1018214542653N00620631EA0000001691 +B1018234542656N00620643EA0000001691 +B1018254542665N00620644EA0000001692 +B1018274542675N00620633EA0000001694 +B1018294542678N00620618EA0000001698 +B1018314542675N00620605EA0000001703 +B1018334542668N00620597EA0000001706 +B1018354542661N00620593EA0000001709 +B1018374542653N00620597EA0000001711 +B1018394542648N00620607EA0000001712 +B1018414542647N00620618EA0000001713 +B1018434542652N00620630EA0000001714 +B1018454542662N00620635EA0000001714 +B1018474542672N00620629EA0000001715 +B1018494542678N00620615EA0000001716 +B1018514542675N00620601EA0000001717 +B1018534542668N00620591EA0000001719 +B1018554542662N00620583EA0000001721 +B1018574542656N00620575EA0000001723 +B1018594542648N00620567EA0000001725 +B1019014542640N00620564EA0000001729 +B1019034542634N00620570EA0000001733 +B1019054542629N00620582EA0000001737 +B1019074542629N00620597EA0000001739 +B1019094542635N00620606EA0000001741 +B1019114542644N00620609EA0000001741 +B1019134542653N00620606EA0000001740 +B1019154542659N00620592EA0000001739 +B1019174542658N00620575EA0000001738 +B1019194542651N00620561EA0000001737 +B1019214542642N00620551EA0000001737 +B1019234542635N00620543EA0000001739 +B1019254542629N00620537EA0000001742 +B1019274542623N00620531EA0000001745 +B1019294542619N00620525EA0000001748 +B1019314542608N00620519EA0000001750 +B1019334542599N00620523EA0000001749 +B1019354542595N00620532EA0000001748 +B1019374542596N00620544EA0000001746 +B1019394542605N00620553EA0000001744 +B1019414542616N00620553EA0000001742 +B1019434542628N00620549EA0000001739 +B1019454542640N00620549EA0000001736 +B1019474542651N00620552EA0000001734 +B1019494542662N00620557EA0000001732 +B1019514542673N00620564EA0000001732 +B1019534542680N00620570EA0000001733 +B1019564542684N00620576EA0000001735 +B1019584542689N00620583EA0000001736 +B1020004542696N00620589EA0000001739 +B1020024542700N00620598EA0000001743 +B1020044542699N00620608EA0000001746 +B1020064542693N00620616EA0000001749 +B1020084542684N00620610EA0000001751 +B1020104542678N00620594EA0000001753 +B1020124542681N00620588EA0000001755 +B1020144542688N00620595EA0000001757 +B1020164542688N00620606EA0000001760 +B1020184542681N00620611EA0000001763 +B1020204542676N00620610EA0000001767 +B1020224542667N00620593EA0000001769 +B1020244542670N00620577EA0000001772 +B1020264542679N00620569EA0000001774 +B1020284542688N00620572EA0000001777 +B1020304542693N00620580EA0000001781 +B1020324542696N00620589EA0000001785 +B1020344542693N00620601EA0000001788 +B1020364542684N00620606EA0000001791 +B1020384542673N00620598EA0000001795 +B1020404542667N00620584EA0000001798 +B1020424542670N00620572EA0000001801 +B1020444542679N00620562EA0000001804 +B1020464542690N00620562EA0000001805 +B1020484542699N00620567EA0000001807 +B1020504542707N00620572EA0000001811 +B1020524542714N00620573EA0000001816 +B1020544542720N00620575EA0000001820 +B1020564542724N00620582EA0000001824 +B1020584542723N00620592EA0000001827 +B1021004542714N00620593EA0000001830 +B1021024542704N00620583EA0000001832 +B1021044542700N00620568EA0000001835 +B1021064542706N00620558EA0000001837 +B1021084542717N00620562EA0000001840 +B1021104542722N00620569EA0000001842 +B1021124542709N00620567EA0000001847 +B1021144542700N00620557EA0000001850 +B1021164542696N00620543EA0000001852 +B1021184542701N00620531EA0000001855 +B1021204542714N00620531EA0000001856 +B1021224542725N00620538EA0000001859 +B1021244542733N00620546EA0000001863 +B1021264542738N00620550EA0000001869 +B1021284542742N00620557EA0000001873 +B1021304542746N00620568EA0000001878 +B1021324542747N00620578EA0000001883 +B1021344542741N00620585EA0000001888 +B1021374542731N00620583EA0000001893 +B1021394542725N00620571EA0000001898 +B1021414542726N00620555EA0000001903 +B1021434542736N00620549EA0000001909 +B1021454542746N00620550EA0000001915 +B1021474542754N00620556EA0000001921 +B1021494542756N00620567EA0000001925 +B1021514542750N00620579EA0000001927 +B1021534542739N00620578EA0000001929 +B1021554542731N00620564EA0000001932 +B1021574542730N00620555EA0000001934 +B1021594542737N00620535EA0000001937 +B1022014542747N00620535EA0000001940 +B1022034542753N00620543EA0000001942 +B1022054542754N00620554EA0000001943 +B1022074542748N00620565EA0000001943 +B1022094542742N00620573EA0000001944 +B1022114542737N00620577EA0000001946 +B1022134542729N00620581EA0000001946 +B1022154542720N00620577EA0000001947 +B1022174542714N00620562EA0000001948 +B1022194542716N00620545EA0000001949 +B1022214542725N00620544EA0000001952 +B1022234542735N00620552EA0000001954 +B1022254542735N00620560EA0000001958 +B1022274542728N00620566EA0000001961 +B1022294542718N00620566EA0000001962 +B1022314542707N00620557EA0000001964 +B1022334542702N00620542EA0000001967 +B1022354542707N00620535EA0000001969 +B1022374542716N00620539EA0000001972 +B1022394542722N00620549EA0000001976 +B1022414542721N00620558EA0000001980 +B1022434542716N00620569EA0000001982 +B1022454542708N00620576EA0000001983 +B1022474542697N00620573EA0000001985 +B1022494542691N00620561EA0000001988 +B1022514542690N00620547EA0000001991 +B1022534542703N00620535EA0000001995 +B1022554542713N00620539EA0000001997 +B1022574542716N00620551EA0000002001 +B1022594542713N00620564EA0000002004 +B1023014542706N00620574EA0000002006 +B1023034542695N00620576EA0000002008 +B1023054542686N00620569EA0000002011 +B1023074542679N00620556EA0000002014 +B1023094542679N00620541EA0000002017 +B1023114542683N00620530EA0000002021 +B1023134542691N00620523EA0000002025 +B1023164542701N00620521EA0000002029 +B1023184542708N00620529EA0000002032 +B1023204542709N00620544EA0000002035 +B1023224542703N00620556EA0000002039 +B1023244542693N00620558EA0000002042 +B1023264542684N00620548EA0000002044 +B1023284542682N00620532EA0000002046 +B1023304542689N00620525EA0000002049 +B1023324542698N00620530EA0000002052 +B1023344542701N00620536EA0000002055 +B1023364542699N00620557EA0000002057 +B1023384542689N00620565EA0000002060 +B1023404542679N00620562EA0000002062 +B1023424542673N00620551EA0000002063 +B1023444542673N00620536EA0000002064 +B1023464542682N00620529EA0000002065 +B1023484542692N00620535EA0000002066 +B1023504542696N00620548EA0000002067 +B1023524542691N00620559EA0000002069 +B1023544542682N00620565EA0000002070 +B1023564542671N00620563EA0000002070 +B1023584542662N00620554EA0000002070 +B1024004542653N00620547EA0000002071 +B1024024542647N00620546EA0000002074 +B1024044542640N00620551EA0000002078 +B1024064542632N00620558EA0000002082 +B1024084542629N00620569EA0000002087 +B1024104542629N00620584EA0000002090 +B1024124542634N00620596EA0000002094 +B1024144542642N00620599EA0000002096 +B1024164542649N00620591EA0000002098 +B1024184542648N00620580EA0000002100 +B1024204542643N00620568EA0000002101 +B1024224542636N00620560EA0000002104 +B1024244542629N00620554EA0000002107 +B1024264542620N00620549EA0000002112 +B1024284542607N00620543EA0000002119 +B1024304542599N00620536EA0000002122 +B1024324542590N00620529EA0000002124 +B1024344542580N00620522EA0000002124 +B1024364542568N00620513EA0000002123 +B1024384542557N00620503EA0000002120 +B1024404542546N00620494EA0000002117 +B1024424542536N00620486EA0000002114 +B1024444542525N00620476EA0000002110 +B1024464542514N00620466EA0000002106 +B1024484542504N00620457EA0000002103 +B1024504542494N00620447EA0000002099 +B1024534542483N00620439EA0000002095 +B1024554542471N00620430EA0000002091 +B1024574542460N00620421EA0000002087 +B1024594542449N00620410EA0000002084 +B1025014542440N00620401EA0000002082 +B1025034542430N00620391EA0000002080 +B1025054542419N00620380EA0000002077 +B1025074542408N00620372EA0000002076 +B1025094542396N00620366EA0000002075 +B1025114542391N00620363EA0000002076 +B1025134542377N00620351EA0000002077 +B1025154542366N00620340EA0000002078 +B1025174542355N00620329EA0000002080 +B1025194542345N00620319EA0000002081 +B1025214542335N00620308EA0000002081 +B1025234542323N00620297EA0000002082 +B1025254542312N00620289EA0000002083 +B1025274542302N00620281EA0000002083 +B1025294542292N00620274EA0000002081 +B1025314542282N00620265EA0000002079 +B1025334542272N00620254EA0000002079 +B1025354542263N00620245EA0000002079 +B1025374542254N00620237EA0000002079 +B1025394542246N00620228EA0000002079 +B1025414542237N00620218EA0000002080 +B1025434542227N00620209EA0000002083 +B1025454542219N00620200EA0000002084 +B1025474542211N00620191EA0000002085 +B1025494542201N00620181EA0000002088 +B1025514542192N00620174EA0000002092 +B1025534542184N00620171EA0000002097 +B1025554542178N00620168EA0000002100 +B1025574542171N00620164EA0000002102 +B1025594542164N00620157EA0000002102 +B1026014542161N00620148EA0000002102 +B1026034542164N00620133EA0000002103 +B1026054542168N00620119EA0000002105 +B1026074542174N00620110EA0000002105 +B1026094542194N00620107EA0000002105 +B1026114542204N00620121EA0000002107 +B1026134542202N00620135EA0000002110 +B1026154542189N00620144EA0000002114 +B1026174542180N00620140EA0000002120 +B1026194542175N00620129EA0000002125 +B1026214542175N00620117EA0000002128 +B1026234542182N00620106EA0000002129 +B1026254542195N00620103EA0000002130 +B1026274542206N00620114EA0000002131 +B1026294542204N00620128EA0000002132 +B1026324542195N00620133EA0000002134 +B1026344542186N00620130EA0000002136 +B1026364542179N00620126EA0000002140 +B1026384542173N00620122EA0000002141 +B1026404542165N00620116EA0000002143 +B1026424542158N00620109EA0000002145 +B1026444542152N00620104EA0000002147 +B1026464542145N00620100EA0000002148 +B1026484542140N00620098EA0000002149 +B1026504542125N00620090EA0000002150 +B1026524542117N00620085EA0000002150 +B1026544542107N00620078EA0000002149 +B1026564542096N00620070EA0000002148 +B1026584542086N00620064EA0000002147 +B1027004542076N00620058EA0000002145 +B1027024542064N00620049EA0000002141 +B1027044542051N00620040EA0000002138 +B1027064542040N00620030EA0000002130 +B1027084542029N00620022EA0000002126 +B1027104542018N00620015EA0000002121 +B1027124542006N00620007EA0000002117 +B1027144541994N00620000EA0000002113 +B1027164541981N00619993EA0000002108 +B1027184541968N00619990EA0000002102 +B1027204541954N00619985EA0000002097 +B1027224541941N00619975EA0000002091 +B1027244541929N00619965EA0000002086 +B1027264541916N00619957EA0000002082 +B1027284541904N00619948EA0000002079 +B1027304541891N00619940EA0000002075 +B1027324541878N00619933EA0000002071 +B1027344541865N00619925EA0000002069 +B1027364541853N00619916EA0000002067 +B1027384541839N00619907EA0000002064 +B1027404541825N00619896EA0000002061 +B1027424541813N00619885EA0000002060 +B1027444541800N00619876EA0000002058 +B1027464541786N00619867EA0000002055 +B1027484541765N00619853EA0000002052 +B1027504541751N00619844EA0000002050 +B1027524541738N00619833EA0000002047 +B1027544541724N00619822EA0000002045 +B1027564541711N00619812EA0000002044 +B1027584541697N00619800EA0000002043 +B1028004541684N00619788EA0000002043 +B1028024541674N00619779EA0000002045 +B1028044541666N00619773EA0000002047 +B1028064541657N00619766EA0000002049 +B1028084541648N00619758EA0000002052 +B1028104541641N00619751EA0000002058 +B1028134541633N00619746EA0000002066 +B1028154541626N00619742EA0000002071 +B1028174541618N00619738EA0000002076 +B1028194541610N00619735EA0000002082 +B1028214541604N00619729EA0000002089 +B1028234541598N00619720EA0000002096 +B1028254541595N00619716EA0000002105 +B1028274541585N00619710EA0000002113 +B1028294541576N00619711EA0000002119 +B1028314541568N00619720EA0000002126 +B1028334541566N00619734EA0000002134 +B1028354541570N00619745EA0000002143 +B1028374541577N00619753EA0000002152 +B1028394541586N00619759EA0000002161 +B1028414541595N00619758EA0000002168 +B1028434541602N00619749EA0000002174 +B1028454541608N00619738EA0000002177 +B1028474541614N00619727EA0000002180 +B1028494541617N00619712EA0000002184 +B1028514541618N00619696EA0000002188 +B1028534541615N00619682EA0000002192 +B1028554541608N00619671EA0000002195 +B1028574541598N00619664EA0000002198 +B1028594541590N00619660EA0000002200 +B1029014541581N00619657EA0000002200 +B1029034541572N00619653EA0000002202 +B1029054541564N00619648EA0000002204 +B1029074541556N00619644EA0000002204 +B1029094541547N00619640EA0000002203 +B1029114541537N00619633EA0000002203 +B1029134541528N00619627EA0000002204 +B1029154541520N00619623EA0000002203 +B1029174541511N00619618EA0000002200 +B1029194541501N00619611EA0000002195 +B1029214541490N00619604EA0000002190 +B1029234541479N00619593EA0000002184 +B1029254541467N00619579EA0000002179 +B1029274541457N00619568EA0000002176 +B1029294541441N00619554EA0000002167 +B1029314541429N00619543EA0000002163 +B1029334541418N00619532EA0000002160 +B1029354541408N00619523EA0000002157 +B1029374541396N00619513EA0000002153 +B1029394541382N00619505EA0000002151 +B1029414541371N00619498EA0000002149 +B1029434541358N00619491EA0000002146 +B1029454541345N00619483EA0000002141 +B1029474541333N00619474EA0000002138 +B1029494541323N00619463EA0000002136 +B1029514541312N00619451EA0000002132 +B1029544541301N00619438EA0000002130 +B1029564541289N00619427EA0000002128 +B1029584541278N00619415EA0000002125 +B1030004541267N00619400EA0000002123 +B1030024541257N00619386EA0000002123 +B1030044541249N00619374EA0000002122 +B1030064541240N00619362EA0000002120 +B1030084541231N00619347EA0000002117 +B1030104541221N00619333EA0000002117 +B1030124541213N00619320EA0000002117 +B1030144541205N00619306EA0000002114 +B1030164541197N00619288EA0000002110 +B1030184541188N00619269EA0000002106 +B1030204541183N00619260EA0000002103 +B1030224541169N00619236EA0000002097 +B1030244541158N00619222EA0000002091 +B1030264541146N00619206EA0000002086 +B1030284541135N00619190EA0000002082 +B1030304541127N00619176EA0000002077 +B1030324541118N00619159EA0000002070 +B1030344541109N00619139EA0000002066 +B1030364541100N00619121EA0000002063 +B1030384541092N00619103EA0000002060 +B1030404541084N00619084EA0000002059 +B1030424541077N00619067EA0000002057 +B1030444541069N00619049EA0000002053 +B1030464541061N00619030EA0000002050 +B1030484541053N00619012EA0000002048 +B1030504541046N00618993EA0000002044 +B1030524541038N00618975EA0000002039 +B1030544541029N00618958EA0000002033 +B1030564541019N00618940EA0000002028 +B1030584541010N00618923EA0000002024 +B1031004541002N00618907EA0000002020 +B1031024540993N00618889EA0000002016 +B1031044540984N00618870EA0000002013 +B1031064540976N00618852EA0000002011 +B1031084540969N00618833EA0000002008 +B1031104540958N00618805EA0000002004 +B1031124540949N00618788EA0000002002 +B1031144540941N00618771EA0000001998 +B1031164540933N00618752EA0000001993 +B1031184540924N00618734EA0000001989 +B1031204540915N00618717EA0000001986 +B1031224540908N00618699EA0000001983 +B1031244540900N00618681EA0000001979 +B1031264540892N00618663EA0000001977 +B1031284540885N00618644EA0000001974 +B1031304540877N00618627EA0000001971 +B1031334540869N00618609EA0000001968 +B1031354540861N00618590EA0000001965 +B1031374540853N00618573EA0000001962 +B1031394540844N00618556EA0000001959 +B1031414540835N00618538EA0000001956 +B1031434540829N00618519EA0000001954 +B1031454540821N00618501EA0000001951 +B1031474540814N00618483EA0000001948 +B1031494540808N00618465EA0000001946 +B1031514540801N00618446EA0000001944 +B1031534540795N00618428EA0000001942 +B1031554540787N00618410EA0000001940 +B1031574540780N00618392EA0000001937 +B1031594540774N00618373EA0000001934 +B1032014540768N00618354EA0000001931 +B1032034540762N00618334EA0000001929 +B1032054540757N00618315EA0000001925 +B1032074540751N00618295EA0000001922 +B1032094540745N00618276EA0000001919 +B1032114540739N00618256EA0000001916 +B1032134540734N00618237EA0000001913 +B1032154540728N00618218EA0000001909 +B1032174540721N00618200EA0000001905 +B1032194540715N00618179EA0000001900 +B1032214540709N00618156EA0000001895 +B1032234540703N00618134EA0000001891 +B1032254540698N00618112EA0000001887 +B1032274540694N00618089EA0000001882 +B1032294540690N00618066EA0000001877 +B1032314540686N00618043EA0000001872 +B1032334540683N00618020EA0000001868 +B1032354540679N00617997EA0000001865 +B1032374540675N00617974EA0000001862 +B1032394540672N00617952EA0000001858 +B1032414540668N00617930EA0000001855 +B1032434540664N00617908EA0000001851 +B1032454540660N00617886EA0000001847 +B1032474540657N00617862EA0000001843 +B1032494540653N00617840EA0000001840 +B1032514540649N00617817EA0000001836 +B1032534540644N00617783EA0000001831 +B1032554540641N00617760EA0000001828 +B1032574540638N00617739EA0000001825 +B1032594540636N00617717EA0000001824 +B1033014540635N00617701EA0000001823 +B1033034540634N00617689EA0000001821 +B1033054540630N00617675EA0000001817 +B1033074540627N00617660EA0000001817 +B1033094540624N00617647EA0000001817 +B1033114540620N00617633EA0000001815 +B1033144540616N00617615EA0000001813 +B1033164540613N00617596EA0000001812 +B1033184540609N00617576EA0000001810 +B1033204540606N00617556EA0000001807 +B1033224540603N00617536EA0000001805 +B1033244540599N00617514EA0000001802 +B1033264540598N00617494EA0000001800 +B1033284540600N00617479EA0000001800 +B1033304540600N00617462EA0000001798 +B1033324540600N00617441EA0000001798 +B1033344540600N00617421EA0000001800 +B1033364540598N00617407EA0000001801 +B1033384540596N00617392EA0000001800 +B1033404540594N00617375EA0000001798 +B1033424540592N00617355EA0000001797 +B1033444540593N00617335EA0000001798 +B1033464540594N00617318EA0000001799 +B1033484540596N00617302EA0000001798 +B1033504540598N00617282EA0000001799 +B1033524540597N00617261EA0000001800 +B1033544540594N00617243EA0000001802 +B1033564540592N00617227EA0000001803 +B1033584540590N00617209EA0000001802 +B1034004540589N00617193EA0000001801 +B1034024540587N00617178EA0000001799 +B1034044540585N00617162EA0000001796 +B1034064540584N00617147EA0000001795 +B1034084540581N00617134EA0000001793 +B1034104540576N00617120EA0000001793 +B1034124540571N00617107EA0000001794 +B1034144540569N00617094EA0000001795 +B1034164540564N00617080EA0000001797 +B1034184540558N00617066EA0000001800 +B1034204540554N00617054EA0000001803 +B1034224540551N00617042EA0000001804 +B1034244540544N00617031EA0000001805 +B1034264540533N00617032EA0000001804 +B1034284540525N00617038EA0000001801 +B1034304540520N00617047EA0000001799 +B1034324540516N00617059EA0000001797 +B1034344540512N00617070EA0000001797 +B1034364540505N00617083EA0000001801 +B1034384540501N00617090EA0000001805 +B1034404540496N00617096EA0000001809 +B1034424540491N00617103EA0000001812 +B1034444540488N00617111EA0000001815 +B1034464540488N00617122EA0000001817 +B1034484540494N00617130EA0000001819 +B1034504540505N00617132EA0000001822 +B1034524540514N00617121EA0000001826 +B1034554540516N00617104EA0000001831 +B1034574540513N00617089EA0000001836 +B1034594540507N00617075EA0000001841 +B1035014540499N00617067EA0000001845 +B1035034540490N00617063EA0000001849 +B1035054540483N00617061EA0000001851 +B1035074540477N00617066EA0000001853 +B1035094540473N00617075EA0000001855 +B1035114540472N00617086EA0000001858 +B1035134540476N00617097EA0000001863 +B1035154540483N00617104EA0000001868 +B1035174540489N00617109EA0000001875 +B1035194540494N00617115EA0000001882 +B1035214540499N00617122EA0000001886 +B1035234540503N00617133EA0000001893 +B1035254540503N00617145EA0000001900 +B1035274540499N00617156EA0000001907 +B1035294540493N00617164EA0000001913 +B1035314540486N00617164EA0000001917 +B1035334540477N00617155EA0000001920 +B1035354540476N00617136EA0000001921 +B1035374540485N00617121EA0000001924 +B1035394540496N00617118EA0000001927 +B1035414540507N00617118EA0000001932 +B1035434540517N00617120EA0000001936 +B1035454540527N00617124EA0000001942 +B1035474540536N00617123EA0000001950 +B1035494540543N00617116EA0000001956 +B1035514540551N00617107EA0000001960 +B1035534540560N00617099EA0000001962 +B1035554540566N00617088EA0000001962 +B1035574540569N00617072EA0000001964 +B1035594540567N00617056EA0000001965 +B1036014540559N00617045EA0000001966 +B1036034540547N00617044EA0000001967 +B1036054540538N00617048EA0000001969 +B1036074540532N00617051EA0000001973 +B1036094540525N00617056EA0000001976 +B1036114540517N00617062EA0000001980 +B1036134540508N00617069EA0000001985 +B1036154540504N00617074EA0000001992 +B1036174540494N00617076EA0000002000 +B1036194540485N00617070EA0000002004 +B1036214540480N00617057EA0000002006 +B1036234540482N00617040EA0000002008 +B1036254540491N00617028EA0000002009 +B1036274540502N00617021EA0000002010 +B1036294540510N00617019EA0000002013 +B1036314540517N00617020EA0000002017 +B1036344540521N00617025EA0000002020 +B1036364540523N00617034EA0000002024 +B1036384540524N00617044EA0000002027 +B1036404540522N00617056EA0000002030 +B1036424540518N00617066EA0000002035 +B1036444540509N00617070EA0000002040 +B1036464540498N00617065EA0000002045 +B1036484540490N00617053EA0000002051 +B1036504540489N00617037EA0000002056 +B1036524540495N00617025EA0000002060 +B1036544540506N00617023EA0000002063 +B1036564540516N00617026EA0000002067 +B1036584540525N00617029EA0000002070 +B1037004540537N00617034EA0000002070 +B1037024540543N00617040EA0000002074 +B1037044540548N00617044EA0000002079 +B1037064540552N00617052EA0000002083 +B1037084540555N00617065EA0000002085 +B1037104540549N00617076EA0000002088 +B1037124540539N00617076EA0000002091 +B1037144540530N00617070EA0000002094 +B1037164540526N00617053EA0000002097 +B1037184540529N00617035EA0000002100 +B1037204540538N00617023EA0000002104 +B1037224540549N00617017EA0000002109 +B1037244540558N00617025EA0000002113 +B1037264540557N00617038EA0000002116 +B1037284540548N00617045EA0000002120 +B1037304540538N00617042EA0000002123 +B1037324540531N00617034EA0000002126 +B1037344540525N00617020EA0000002130 +B1037364540526N00617003EA0000002134 +B1037384540534N00616991EA0000002138 +B1037404540546N00616986EA0000002141 +B1037424540554N00616995EA0000002145 +B1037444540551N00617010EA0000002149 +B1037464540540N00617014EA0000002154 +B1037484540530N00617004EA0000002158 +B1037504540523N00616984EA0000002165 +B1037524540527N00616969EA0000002169 +B1037544540536N00616956EA0000002173 +B1037564540547N00616951EA0000002178 +B1037584540554N00616958EA0000002182 +B1038004540555N00616969EA0000002185 +B1038024540548N00616980EA0000002187 +B1038044540537N00616984EA0000002191 +B1038064540529N00616983EA0000002195 +B1038094540519N00616983EA0000002199 +B1038114540509N00616983EA0000002204 +B1038134540501N00616983EA0000002209 +B1038154540493N00616982EA0000002212 +B1038174540483N00616983EA0000002213 +B1038194540472N00616980EA0000002215 +B1038214540463N00616973EA0000002218 +B1038234540455N00616963EA0000002219 +B1038254540445N00616952EA0000002220 +B1038274540436N00616940EA0000002220 +B1038294540428N00616928EA0000002220 +B1038314540419N00616917EA0000002220 +B1038334540411N00616905EA0000002219 +B1038354540403N00616893EA0000002216 +B1038374540393N00616879EA0000002213 +B1038394540383N00616865EA0000002211 +B1038414540375N00616853EA0000002208 +B1038434540366N00616843EA0000002204 +B1038454540357N00616830EA0000002199 +B1038474540348N00616816EA0000002196 +B1038494540339N00616805EA0000002190 +B1038514540328N00616792EA0000002184 +B1038534540319N00616773EA0000002180 +B1038554540310N00616756EA0000002177 +B1038574540301N00616741EA0000002172 +B1038594540292N00616724EA0000002167 +B1039014540283N00616707EA0000002163 +B1039034540272N00616693EA0000002160 +B1039054540262N00616679EA0000002155 +B1039074540251N00616665EA0000002151 +B1039094540239N00616652EA0000002147 +B1039114540228N00616639EA0000002143 +B1039134540217N00616627EA0000002139 +B1039154540205N00616614EA0000002134 +B1039174540194N00616600EA0000002130 +B1039194540183N00616586EA0000002127 +B1039214540173N00616572EA0000002123 +B1039234540158N00616550EA0000002117 +B1039254540147N00616536EA0000002113 +B1039274540136N00616521EA0000002109 +B1039294540126N00616508EA0000002106 +B1039314540115N00616494EA0000002101 +B1039334540103N00616478EA0000002094 +B1039354540089N00616462EA0000002089 +B1039374540076N00616447EA0000002085 +B1039394540064N00616431EA0000002081 +B1039414540052N00616416EA0000002075 +B1039434540039N00616400EA0000002070 +B1039454540026N00616384EA0000002065 +B1039484540013N00616369EA0000002060 +B1039504540000N00616353EA0000002055 +B1039524539988N00616337EA0000002050 +B1039544539975N00616322EA0000002045 +B1039564539963N00616306EA0000002040 +B1039584539950N00616290EA0000002035 +B1040004539937N00616274EA0000002031 +B1040024539925N00616259EA0000002026 +B1040044539912N00616244EA0000002022 +B1040064539899N00616230EA0000002017 +B1040084539885N00616216EA0000002012 +B1040104539871N00616202EA0000002007 +B1040124539858N00616188EA0000002003 +B1040144539845N00616175EA0000001998 +B1040164539831N00616161EA0000001993 +B1040184539817N00616148EA0000001988 +B1040204539804N00616135EA0000001983 +B1040224539790N00616122EA0000001978 +B1040244539776N00616109EA0000001973 +B1040264539763N00616097EA0000001968 +B1040284539749N00616084EA0000001963 +B1040304539735N00616071EA0000001959 +B1040324539722N00616058EA0000001954 +B1040344539709N00616045EA0000001949 +B1040364539696N00616031EA0000001944 +B1040384539682N00616018EA0000001939 +B1040404539669N00616004EA0000001934 +B1040424539656N00615991EA0000001929 +B1040444539643N00615977EA0000001925 +B1040464539631N00615964EA0000001921 +B1040484539621N00615950EA0000001919 +B1040504539614N00615937EA0000001916 +B1040524539605N00615925EA0000001914 +B1040544539596N00615915EA0000001914 +B1040564539589N00615907EA0000001913 +B1040584539580N00615899EA0000001912 +B1041004539571N00615892EA0000001913 +B1041024539566N00615889EA0000001915 +B1041044539548N00615880EA0000001918 +B1041064539540N00615876EA0000001920 +B1041084539533N00615872EA0000001921 +B1041104539526N00615868EA0000001921 +B1041124539520N00615861EA0000001920 +B1041144539513N00615856EA0000001919 +B1041164539504N00615853EA0000001917 +B1041184539494N00615852EA0000001914 +B1041204539484N00615849EA0000001911 +B1041224539475N00615846EA0000001910 +B1041244539465N00615844EA0000001908 +B1041264539455N00615839EA0000001907 +B1041294539444N00615835EA0000001906 +B1041314539433N00615833EA0000001906 +B1041334539422N00615831EA0000001906 +B1041354539410N00615826EA0000001908 +B1041374539399N00615822EA0000001910 +B1041394539389N00615818EA0000001911 +B1041414539380N00615811EA0000001911 +B1041434539371N00615803EA0000001911 +B1041454539361N00615801EA0000001911 +B1041474539352N00615799EA0000001910 +B1041494539343N00615796EA0000001909 +B1041514539333N00615793EA0000001909 +B1041534539324N00615791EA0000001907 +B1041554539313N00615788EA0000001905 +B1041574539303N00615785EA0000001902 +B1041594539294N00615783EA0000001898 +B1042014539283N00615783EA0000001893 +B1042034539272N00615783EA0000001889 +B1042054539261N00615785EA0000001885 +B1042074539250N00615786EA0000001881 +B1042094539239N00615789EA0000001876 +B1042114539228N00615791EA0000001871 +B1042134539217N00615793EA0000001867 +B1042154539206N00615796EA0000001863 +B1042174539196N00615797EA0000001859 +B1042194539188N00615798EA0000001856 +B1042214539178N00615797EA0000001852 +B1042234539169N00615796EA0000001849 +B1042254539163N00615800EA0000001847 +B1042274539159N00615804EA0000001848 +B1042294539153N00615804EA0000001850 +B1042314539148N00615806EA0000001851 +B1042334539141N00615807EA0000001852 +B1042354539132N00615803EA0000001854 +B1042374539126N00615793EA0000001856 +B1042394539124N00615779EA0000001859 +B1042414539134N00615758EA0000001862 +B1042434539148N00615755EA0000001863 +B1042454539157N00615762EA0000001865 +B1042474539160N00615772EA0000001868 +B1042494539158N00615781EA0000001870 +B1042514539152N00615785EA0000001871 +B1042534539146N00615787EA0000001873 +B1042554539141N00615790EA0000001875 +B1042574539134N00615793EA0000001877 +B1042594539125N00615794EA0000001877 +B1043014539115N00615796EA0000001875 +B1043034539107N00615800EA0000001873 +B1043064539098N00615803EA0000001870 +B1043084539087N00615804EA0000001866 +B1043104539076N00615804EA0000001864 +B1043124539065N00615802EA0000001862 +B1043144539054N00615801EA0000001859 +B1043164539043N00615801EA0000001857 +B1043184539031N00615800EA0000001854 +B1043204539020N00615797EA0000001851 +B1043224539008N00615792EA0000001850 +B1043244538997N00615787EA0000001848 +B1043264538986N00615781EA0000001847 +B1043284538975N00615774EA0000001847 +B1043304538965N00615767EA0000001848 +B1043324538956N00615760EA0000001847 +B1043344538947N00615751EA0000001847 +B1043364538939N00615743EA0000001848 +B1043384538934N00615735EA0000001850 +B1043404538928N00615724EA0000001852 +B1043424538921N00615718EA0000001854 +B1043444538915N00615717EA0000001857 +B1043464538908N00615719EA0000001859 +B1043484538902N00615723EA0000001863 +B1043504538897N00615733EA0000001867 +B1043524538895N00615746EA0000001870 +B1043544538902N00615761EA0000001873 +B1043564538913N00615765EA0000001875 +B1043584538923N00615759EA0000001877 +B1044004538929N00615744EA0000001878 +B1044024538928N00615727EA0000001881 +B1044044538924N00615716EA0000001884 +B1044064538919N00615706EA0000001887 +B1044084538914N00615695EA0000001890 +B1044104538910N00615685EA0000001892 +B1044124538905N00615678EA0000001896 +B1044144538900N00615671EA0000001900 +B1044164538894N00615669EA0000001904 +B1044184538887N00615672EA0000001905 +B1044204538880N00615690EA0000001907 +B1044224538882N00615704EA0000001909 +B1044244538889N00615714EA0000001910 +B1044264538899N00615718EA0000001910 +B1044284538908N00615712EA0000001910 +B1044304538916N00615698EA0000001910 +B1044324538917N00615681EA0000001911 +B1044344538914N00615667EA0000001913 +B1044364538909N00615655EA0000001915 +B1044384538903N00615647EA0000001916 +B1044404538895N00615642EA0000001917 +B1044424538887N00615636EA0000001919 +B1044454538880N00615639EA0000001920 +B1044474538872N00615645EA0000001920 +B1044494538864N00615649EA0000001922 +B1044514538859N00615654EA0000001922 +B1044534538856N00615661EA0000001920 +B1044554538855N00615670EA0000001918 +B1044574538859N00615679EA0000001917 +B1044594538864N00615685EA0000001916 +B1045014538867N00615692EA0000001914 +B1045034538866N00615703EA0000001913 +B1045054538862N00615712EA0000001912 +B1045074538858N00615718EA0000001913 +B1045094538853N00615725EA0000001914 +B1045114538847N00615732EA0000001915 +B1045134538842N00615740EA0000001916 +B1045154538836N00615746EA0000001918 +B1045174538827N00615747EA0000001919 +B1045194538817N00615737EA0000001920 +B1045214538813N00615720EA0000001920 +B1045234538818N00615704EA0000001920 +B1045254538828N00615699EA0000001920 +B1045274538834N00615705EA0000001921 +B1045294538829N00615714EA0000001922 +B1045314538820N00615717EA0000001925 +B1045334538811N00615712EA0000001927 +B1045354538804N00615698EA0000001928 +B1045374538804N00615682EA0000001929 +B1045394538813N00615672EA0000001931 +B1045414538824N00615675EA0000001932 +B1045434538828N00615685EA0000001934 +B1045454538826N00615694EA0000001936 +B1045474538818N00615700EA0000001937 +B1045494538809N00615700EA0000001939 +B1045514538801N00615691EA0000001940 +B1045534538796N00615676EA0000001941 +B1045554538796N00615660EA0000001942 +B1045574538804N00615648EA0000001941 +B1045594538816N00615645EA0000001940 +B1046014538827N00615657EA0000001939 +B1046034538831N00615666EA0000001940 +B1046054538835N00615675EA0000001941 +B1046074538839N00615682EA0000001943 +B1046094538842N00615688EA0000001944 +B1046114538841N00615699EA0000001944 +B1046134538834N00615708EA0000001943 +B1046154538822N00615707EA0000001940 +B1046174538811N00615700EA0000001938 +B1046194538799N00615694EA0000001936 +B1046214538788N00615690EA0000001936 +B1046234538777N00615684EA0000001936 +B1046264538766N00615676EA0000001935 +B1046284538753N00615667EA0000001935 +B1046304538742N00615660EA0000001936 +B1046324538733N00615654EA0000001935 +B1046344538723N00615650EA0000001934 +B1046364538711N00615645EA0000001927 +B1046384538698N00615639EA0000001924 +B1046404538686N00615634EA0000001921 +B1046424538675N00615629EA0000001916 +B1046444538662N00615621EA0000001910 +B1046464538649N00615614EA0000001904 +B1046484538635N00615605EA0000001900 +B1046504538622N00615598EA0000001896 +B1046524538609N00615591EA0000001891 +B1046544538595N00615582EA0000001888 +B1046564538582N00615574EA0000001886 +B1046584538570N00615567EA0000001883 +B1047004538557N00615559EA0000001880 +B1047024538544N00615551EA0000001876 +B1047044538532N00615543EA0000001873 +B1047064538519N00615535EA0000001870 +B1047084538507N00615526EA0000001866 +B1047104538494N00615517EA0000001863 +B1047124538482N00615507EA0000001860 +B1047144538469N00615497EA0000001857 +B1047164538457N00615487EA0000001853 +B1047184538444N00615478EA0000001850 +B1047204538432N00615468EA0000001847 +B1047224538419N00615459EA0000001844 +B1047244538407N00615449EA0000001841 +B1047264538394N00615439EA0000001838 +B1047284538381N00615428EA0000001837 +B1047304538370N00615417EA0000001837 +B1047324538361N00615406EA0000001839 +B1047344538351N00615396EA0000001842 +B1047364538342N00615385EA0000001845 +B1047384538333N00615375EA0000001848 +B1047404538325N00615365EA0000001850 +B1047424538316N00615354EA0000001850 +B1047444538303N00615338EA0000001851 +B1047464538293N00615328EA0000001852 +B1047484538282N00615319EA0000001854 +B1047504538273N00615308EA0000001857 +B1047524538266N00615300EA0000001861 +B1047544538258N00615294EA0000001862 +B1047564538248N00615288EA0000001865 +B1047584538239N00615283EA0000001867 +B1048004538228N00615284EA0000001869 +B1048024538216N00615285EA0000001873 +B1048054538206N00615283EA0000001878 +B1048074538199N00615282EA0000001880 +B1048094538190N00615281EA0000001882 +B1048114538180N00615278EA0000001884 +B1048134538173N00615274EA0000001885 +B1048154538165N00615272EA0000001885 +B1048174538155N00615268EA0000001883 +B1048194538144N00615265EA0000001881 +B1048214538132N00615263EA0000001878 +B1048234538120N00615261EA0000001876 +B1048254538108N00615258EA0000001875 +B1048274538108N00615258EA0000001875 +B1048294538088N00615254EA0000001876 +B1048314538079N00615254EA0000001878 +B1048334538069N00615252EA0000001882 +B1048354538061N00615250EA0000001885 +B1048374538051N00615249EA0000001886 +B1048394538040N00615247EA0000001887 +B1048414538029N00615248EA0000001887 +B1048434538017N00615249EA0000001884 +B1048454538007N00615252EA0000001879 +B1048474537997N00615255EA0000001874 +B1048494537986N00615258EA0000001869 +B1048514537976N00615264EA0000001863 +B1048534537965N00615269EA0000001858 +B1048554537953N00615274EA0000001854 +B1048574537942N00615279EA0000001850 +B1048594537930N00615284EA0000001848 +B1049014537918N00615286EA0000001845 +B1049034537905N00615286EA0000001844 +B1049054537892N00615285EA0000001843 +B1049074537880N00615282EA0000001842 +B1049094537868N00615276EA0000001842 +B1049114537857N00615268EA0000001843 +B1049134537850N00615261EA0000001845 +B1049154537844N00615258EA0000001848 +B1049174537836N00615251EA0000001849 +B1049194537824N00615239EA0000001855 +B1049214537815N00615240EA0000001859 +B1049234537808N00615244EA0000001862 +B1049254537803N00615252EA0000001864 +B1049274537803N00615262EA0000001866 +B1049294537810N00615271EA0000001866 +B1049314537820N00615267EA0000001868 +B1049334537827N00615255EA0000001870 +B1049354537830N00615242EA0000001873 +B1049374537828N00615230EA0000001874 +B1049394537822N00615219EA0000001874 +B1049424537813N00615208EA0000001874 +B1049444537804N00615198EA0000001875 +B1049464537796N00615192EA0000001874 +B1049484537786N00615189EA0000001872 +B1049504537776N00615185EA0000001870 +B1049524537767N00615182EA0000001870 +B1049544537758N00615182EA0000001868 +B1049564537748N00615182EA0000001866 +B1049584537738N00615178EA0000001864 +B1050004537728N00615173EA0000001864 +B1050024537720N00615169EA0000001865 +B1050044537711N00615165EA0000001863 +B1050064537701N00615156EA0000001862 +B1050084537701N00615156EA0000001862 +B1050104537687N00615137EA0000001862 +B1050124537681N00615126EA0000001862 +B1050144537674N00615113EA0000001864 +B1050164537668N00615102EA0000001867 +B1050184537662N00615092EA0000001873 +B1050204537657N00615086EA0000001878 +B1050224537651N00615082EA0000001881 +B1050244537643N00615079EA0000001885 +B1050264537636N00615081EA0000001888 +B1050284537631N00615092EA0000001889 +B1050304537630N00615104EA0000001890 +B1050324537633N00615116EA0000001888 +B1050344537642N00615128EA0000001889 +B1050364537650N00615128EA0000001892 +B1050384537657N00615122EA0000001894 +B1050404537665N00615113EA0000001898 +B1050424537669N00615097EA0000001900 +B1050444537667N00615080EA0000001903 +B1050464537659N00615069EA0000001907 +B1050484537651N00615063EA0000001911 +B1050504537643N00615065EA0000001915 +B1050524537636N00615074EA0000001918 +B1050544537632N00615086EA0000001921 +B1050564537634N00615097EA0000001924 +B1050584537641N00615102EA0000001925 +B1051004537655N00615093EA0000001926 +B1051024537661N00615079EA0000001928 +B1051044537661N00615061EA0000001931 +B1051064537657N00615050EA0000001934 +B1051084537654N00615040EA0000001937 +B1051104537650N00615028EA0000001939 +B1051124537647N00615017EA0000001943 +B1051144537644N00615005EA0000001945 +B1051164537642N00614994EA0000001946 +B1051184537638N00614980EA0000001945 +B1051204537633N00614966EA0000001943 +B1051234537629N00614950EA0000001940 +B1051254537625N00614934EA0000001937 +B1051274537619N00614918EA0000001934 +B1051294537613N00614903EA0000001931 +B1051314537606N00614889EA0000001928 +B1051334537599N00614875EA0000001925 +B1051354537592N00614861EA0000001923 +B1051374537584N00614846EA0000001922 +B1051394537576N00614832EA0000001923 +B1051414537571N00614819EA0000001924 +B1051434537564N00614806EA0000001924 +B1051454537557N00614793EA0000001926 +B1051474537551N00614781EA0000001928 +B1051494537545N00614767EA0000001929 +B1051514537540N00614753EA0000001931 +B1051534537534N00614741EA0000001934 +B1051554537530N00614729EA0000001935 +B1051574537525N00614715EA0000001935 +B1051594537520N00614701EA0000001935 +B1052014537513N00614688EA0000001936 +B1052034537507N00614677EA0000001935 +B1052054537500N00614665EA0000001933 +B1052074537491N00614653EA0000001929 +B1052094537481N00614641EA0000001926 +B1052114537472N00614628EA0000001923 +B1052134537464N00614617EA0000001921 +B1052154537456N00614605EA0000001918 +B1052174537448N00614593EA0000001917 +B1052194537439N00614579EA0000001916 +B1052214537432N00614569EA0000001917 +B1052234537425N00614559EA0000001915 +B1052254537416N00614549EA0000001916 +B1052274537409N00614539EA0000001919 +B1052294537404N00614528EA0000001921 +B1052314537397N00614515EA0000001924 +B1052334537393N00614508EA0000001928 +B1052354537389N00614505EA0000001937 +B1052374537379N00614497EA0000001949 +B1052394537375N00614504EA0000001956 +B1052414537374N00614519EA0000001963 +B1052434537379N00614531EA0000001969 +B1052454537390N00614535EA0000001973 +B1052474537402N00614531EA0000001977 +B1052494537409N00614521EA0000001982 +B1052514537411N00614505EA0000001989 +B1052534537410N00614492EA0000001997 +B1052554537405N00614487EA0000002004 +B1052584537398N00614490EA0000002009 +B1053004537395N00614503EA0000002015 +B1053024537399N00614514EA0000002020 +B1053044537410N00614519EA0000002024 +B1053064537424N00614516EA0000002028 +B1053084537433N00614501EA0000002032 +B1053104537434N00614485EA0000002036 +B1053124537431N00614472EA0000002042 +B1053144537425N00614465EA0000002047 +B1053164537418N00614464EA0000002053 +B1053184537413N00614473EA0000002056 +B1053204537413N00614485EA0000002059 +B1053224537418N00614498EA0000002062 +B1053244537430N00614501EA0000002065 +B1053264537442N00614494EA0000002068 +B1053284537448N00614481EA0000002072 +B1053304537451N00614465EA0000002076 +B1053324537450N00614452EA0000002081 +B1053344537446N00614439EA0000002086 +B1053364537437N00614432EA0000002090 +B1053384537430N00614436EA0000002092 +B1053404537427N00614447EA0000002094 +B1053424537432N00614459EA0000002096 +B1053444537441N00614468EA0000002098 +B1053464537454N00614468EA0000002099 +B1053484537467N00614456EA0000002100 +B1053504537469N00614438EA0000002102 +B1053524537462N00614424EA0000002107 +B1053544537458N00614414EA0000002113 +B1053564537457N00614402EA0000002116 +B1053584537461N00614384EA0000002120 +B1054004537472N00614370EA0000002126 +B1054024537484N00614368EA0000002132 +B1054044537494N00614373EA0000002138 +B1054064537497N00614384EA0000002142 +B1054084537495N00614394EA0000002148 +B1054104537490N00614399EA0000002153 +B1054124537479N00614395EA0000002156 +B1054144537471N00614383EA0000002161 +B1054164537476N00614358EA0000002165 +B1054184537489N00614349EA0000002168 +B1054204537500N00614356EA0000002172 +B1054224537499N00614367EA0000002176 +B1054244537488N00614373EA0000002179 +B1054264537479N00614360EA0000002184 +B1054284537480N00614340EA0000002186 +B1054304537492N00614327EA0000002188 +B1054324537505N00614331EA0000002190 +B1054354537507N00614343EA0000002191 +B1054374537499N00614350EA0000002193 +B1054394537490N00614345EA0000002195 +B1054414537484N00614332EA0000002197 +B1054434537484N00614312EA0000002191 +B1054454537497N00614301EA0000002189 +B1054474537510N00614312EA0000002188 +B1054494537507N00614327EA0000002187 +B1054514537495N00614329EA0000002187 +B1054534537486N00614326EA0000002189 +B1054554537478N00614325EA0000002188 +B1054574537468N00614320EA0000002186 +B1054594537457N00614313EA0000002186 +B1055014537449N00614307EA0000002186 +B1055034537439N00614300EA0000002185 +B1055054537428N00614293EA0000002183 +B1055074537416N00614286EA0000002181 +B1055094537403N00614277EA0000002178 +B1055114537389N00614268EA0000002176 +B1055134537377N00614262EA0000002175 +B1055154537364N00614257EA0000002172 +B1055174537351N00614247EA0000002170 +B1055194537341N00614242EA0000002169 +B1055214537332N00614237EA0000002166 +B1055234537321N00614228EA0000002162 +B1055254537307N00614215EA0000002158 +B1055274537297N00614201EA0000002154 +B1055294537288N00614188EA0000002149 +B1055314537276N00614176EA0000002144 +B1055334537264N00614161EA0000002139 +B1055354537253N00614148EA0000002135 +B1055374537242N00614136EA0000002130 +B1055394537230N00614122EA0000002126 +B1055414537218N00614109EA0000002122 +B1055434537207N00614097EA0000002120 +B1055454537199N00614086EA0000002120 +B1055474537190N00614077EA0000002119 +B1055494537178N00614067EA0000002118 +B1055514537167N00614056EA0000002118 +B1055534537159N00614045EA0000002120 +B1055554537147N00614030EA0000002124 +B1055574537138N00614019EA0000002126 +B1055594537128N00614009EA0000002127 +B1056014537117N00613997EA0000002126 +B1056034537107N00613983EA0000002125 +B1056054537097N00613969EA0000002125 +B1056074537088N00613954EA0000002124 +B1056094537079N00613939EA0000002123 +B1056114537067N00613925EA0000002121 +B1056144537056N00613910EA0000002120 +B1056164537046N00613897EA0000002120 +B1056184537038N00613886EA0000002120 +B1056204537031N00613872EA0000002122 +B1056224537024N00613860EA0000002128 +B1056244537016N00613849EA0000002133 +B1056264537009N00613838EA0000002137 +B1056284537005N00613825EA0000002141 +B1056304537002N00613811EA0000002143 +B1056324536997N00613798EA0000002144 +B1056344536989N00613785EA0000002145 +B1056364536982N00613773EA0000002145 +B1056384536977N00613760EA0000002145 +B1056404536971N00613746EA0000002144 +B1056424536965N00613731EA0000002144 +B1056444536959N00613715EA0000002144 +B1056464536953N00613701EA0000002145 +B1056484536947N00613687EA0000002144 +B1056504536940N00613674EA0000002142 +B1056524536933N00613661EA0000002139 +B1056544536925N00613647EA0000002136 +B1056564536917N00613635EA0000002134 +B1056584536908N00613625EA0000002132 +B1057004536900N00613615EA0000002131 +B1057024536892N00613607EA0000002132 +B1057044536884N00613601EA0000002135 +B1057064536878N00613592EA0000002137 +B1057084536870N00613582EA0000002141 +B1057104536864N00613574EA0000002146 +B1057124536858N00613565EA0000002149 +B1057144536852N00613557EA0000002152 +B1057164536845N00613546EA0000002156 +B1057184536839N00613535EA0000002161 +B1057204536837N00613524EA0000002165 +B1057224536836N00613510EA0000002167 +B1057244536835N00613495EA0000002168 +B1057264536831N00613482EA0000002168 +B1057284536825N00613470EA0000002166 +B1057304536817N00613457EA0000002163 +B1057324536810N00613442EA0000002161 +B1057344536799N00613423EA0000002159 +B1057364536792N00613412EA0000002156 +B1057384536785N00613400EA0000002153 +B1057404536779N00613388EA0000002151 +B1057424536771N00613374EA0000002149 +B1057444536763N00613361EA0000002147 +B1057464536756N00613346EA0000002145 +B1057484536749N00613332EA0000002145 +B1057504536743N00613319EA0000002145 +B1057524536738N00613306EA0000002147 +B1057554536732N00613293EA0000002148 +B1057574536727N00613280EA0000002147 +B1057594536720N00613266EA0000002146 +B1058014536712N00613250EA0000002145 +B1058034536705N00613235EA0000002144 +B1058054536698N00613221EA0000002144 +B1058074536692N00613210EA0000002145 +B1058094536685N00613200EA0000002144 +B1058114536678N00613186EA0000002145 +B1058134536669N00613173EA0000002147 +B1058154536662N00613162EA0000002149 +B1058174536656N00613148EA0000002149 +B1058194536648N00613131EA0000002151 +B1058214536640N00613115EA0000002155 +B1058234536636N00613104EA0000002162 +B1058254536631N00613094EA0000002169 +B1058274536624N00613083EA0000002175 +B1058294536617N00613083EA0000002183 +B1058314536610N00613088EA0000002190 +B1058334536605N00613094EA0000002197 +B1058354536603N00613106EA0000002202 +B1058374536607N00613117EA0000002206 +B1058394536614N00613127EA0000002208 +B1058414536625N00613131EA0000002211 +B1058434536637N00613126EA0000002214 +B1058454536645N00613115EA0000002215 +B1058474536649N00613099EA0000002215 +B1058494536649N00613077EA0000002217 +B1058514536647N00613058EA0000002221 +B1058534536645N00613049EA0000002227 +B1058554536644N00613040EA0000002232 +B1058574536640N00613024EA0000002238 +B1058594536635N00613008EA0000002247 +B1059014536629N00613002EA0000002254 +B1059034536622N00613000EA0000002259 +B1059054536611N00612999EA0000002266 +B1059074536604N00613010EA0000002273 +B1059094536605N00613021EA0000002279 +B1059114536616N00613030EA0000002288 +B1059134536621N00613028EA0000002292 +B1059154536629N00613021EA0000002300 +B1059174536638N00613002EA0000002310 +B1059194536641N00612985EA0000002316 +B1059214536643N00612965EA0000002323 +B1059234536642N00612947EA0000002330 +B1059254536639N00612932EA0000002335 +B1059274536635N00612918EA0000002339 +B1059294536628N00612906EA0000002341 +B1059314536618N00612901EA0000002341 +B1059344536610N00612905EA0000002337 +B1059364536603N00612910EA0000002333 +B1059384536595N00612913EA0000002327 +B1059404536585N00612911EA0000002322 +B1059424536577N00612897EA0000002317 +B1059444536579N00612879EA0000002312 +B1059464536590N00612866EA0000002305 +B1059484536604N00612866EA0000002299 +B1059504536614N00612875EA0000002295 +B1059524536624N00612883EA0000002293 +B1059544536634N00612889EA0000002293 +B1059564536645N00612896EA0000002294 +B1059584536656N00612900EA0000002296 +B1100004536666N00612903EA0000002300 +B1100024536675N00612906EA0000002304 +B1100044536684N00612909EA0000002307 +B1100064536696N00612909EA0000002311 +B1100084536706N00612904EA0000002315 +B1100104536716N00612894EA0000002319 +B1100124536723N00612882EA0000002323 +B1100144536723N00612869EA0000002327 +B1100164536720N00612856EA0000002328 +B1100184536716N00612839EA0000002331 +B1100204536711N00612825EA0000002335 +B1100224536707N00612816EA0000002339 +B1100244536703N00612806EA0000002341 +B1100264536697N00612795EA0000002344 +B1100284536693N00612784EA0000002346 +B1100304536688N00612773EA0000002346 +B1100324536683N00612764EA0000002346 +B1100344536678N00612754EA0000002344 +B1100364536672N00612743EA0000002342 +B1100384536666N00612730EA0000002338 +B1100404536660N00612717EA0000002333 +B1100424536653N00612705EA0000002329 +B1100444536647N00612694EA0000002325 +B1100464536641N00612681EA0000002320 +B1100484536634N00612670EA0000002315 +B1100504536626N00612658EA0000002308 +B1100524536617N00612645EA0000002302 +B1100544536607N00612632EA0000002295 +B1100564536596N00612617EA0000002289 +B1100584536580N00612595EA0000002282 +B1101004536571N00612583EA0000002278 +B1101024536561N00612570EA0000002276 +B1101044536555N00612560EA0000002276 +B1101064536548N00612550EA0000002278 +B1101084536540N00612539EA0000002283 +B1101104536535N00612532EA0000002292 +B1101124536529N00612523EA0000002299 +B1101154536524N00612512EA0000002307 +B1101174536520N00612503EA0000002315 +B1101194536517N00612495EA0000002320 +B1101214536512N00612488EA0000002324 +B1101234536506N00612480EA0000002326 +B1101254536500N00612471EA0000002329 +B1101274536494N00612463EA0000002330 +B1101294536487N00612454EA0000002330 +B1101314536480N00612442EA0000002329 +B1101334536474N00612430EA0000002331 +B1101354536468N00612420EA0000002334 +B1101374536465N00612411EA0000002335 +B1101394536462N00612400EA0000002335 +B1101414536456N00612389EA0000002334 +B1101434536450N00612378EA0000002334 +B1101454536443N00612366EA0000002334 +B1101474536435N00612355EA0000002333 +B1101494536428N00612343EA0000002332 +B1101514536420N00612331EA0000002330 +B1101534536412N00612319EA0000002328 +B1101554536404N00612306EA0000002325 +B1101574536395N00612293EA0000002322 +B1101594536385N00612280EA0000002317 +B1102014536374N00612264EA0000002315 +B1102034536364N00612250EA0000002315 +B1102054536357N00612239EA0000002318 +B1102074536352N00612228EA0000002324 +B1102094536346N00612218EA0000002330 +B1102114536339N00612207EA0000002335 +B1102134536332N00612196EA0000002340 +B1102154536328N00612184EA0000002345 +B1102174536326N00612170EA0000002348 +B1102194536322N00612158EA0000002350 +B1102214536315N00612147EA0000002351 +B1102234536308N00612136EA0000002351 +B1102254536301N00612124EA0000002349 +B1102274536293N00612112EA0000002349 +B1102294536286N00612100EA0000002349 +B1102314536276N00612080EA0000002347 +B1102334536268N00612070EA0000002347 +B1102354536261N00612060EA0000002346 +B1102374536257N00612054EA0000002345 +B1102394536245N00612037EA0000002344 +B1102414536236N00612027EA0000002343 +B1102434536227N00612015EA0000002343 +B1102454536219N00612003EA0000002345 +B1102474536212N00611993EA0000002345 +B1102494536204N00611985EA0000002344 +B1102514536194N00611974EA0000002340 +B1102534536184N00611960EA0000002336 +B1102564536174N00611945EA0000002333 +B1102584536164N00611930EA0000002330 +B1103004536156N00611913EA0000002327 +B1103024536147N00611896EA0000002325 +B1103044536140N00611884EA0000002325 +B1103064536135N00611874EA0000002322 +B1103084536127N00611862EA0000002319 +B1103104536117N00611848EA0000002318 +B1103124536109N00611836EA0000002316 +B1103144536100N00611821EA0000002313 +B1103164536092N00611804EA0000002312 +B1103184536084N00611788EA0000002310 +B1103204536075N00611771EA0000002305 +B1103224536065N00611751EA0000002303 +B1103244536055N00611733EA0000002300 +B1103264536045N00611715EA0000002296 +B1103284536036N00611696EA0000002292 +B1103304536026N00611675EA0000002290 +B1103324536018N00611656EA0000002288 +B1103344536011N00611634EA0000002285 +B1103364536003N00611611EA0000002282 +B1103384535996N00611587EA0000002281 +B1103404535989N00611565EA0000002281 +B1103424535982N00611545EA0000002282 +B1103444535977N00611525EA0000002284 +B1103464535971N00611509EA0000002284 +B1103484535963N00611493EA0000002283 +B1103504535953N00611474EA0000002279 +B1103524535945N00611451EA0000002278 +B1103544535937N00611430EA0000002277 +B1103564535930N00611411EA0000002274 +B1103584535921N00611388EA0000002269 +B1104004535911N00611365EA0000002267 +B1104024535903N00611345EA0000002265 +B1104044535893N00611328EA0000002263 +B1104064535883N00611312EA0000002263 +B1104084535876N00611299EA0000002261 +B1104104535867N00611284EA0000002259 +B1104124535857N00611269EA0000002258 +B1104144535843N00611245EA0000002254 +B1104164535833N00611227EA0000002253 +B1104184535825N00611210EA0000002253 +B1104204535819N00611192EA0000002251 +B1104224535813N00611173EA0000002248 +B1104244535806N00611153EA0000002247 +B1104264535801N00611134EA0000002244 +B1104284535796N00611115EA0000002241 +B1104304535789N00611095EA0000002239 +B1104324535783N00611076EA0000002237 +B1104344535778N00611057EA0000002235 +B1104374535772N00611038EA0000002233 +B1104394535768N00611018EA0000002230 +B1104414535763N00610998EA0000002226 +B1104434535759N00610976EA0000002223 +B1104454535754N00610955EA0000002220 +B1104474535750N00610935EA0000002216 +B1104494535744N00610913EA0000002212 +B1104514535738N00610893EA0000002209 +B1104534535734N00610874EA0000002207 +B1104554535731N00610855EA0000002203 +B1104574535726N00610833EA0000002200 +B1104594535721N00610812EA0000002199 +B1105014535721N00610812EA0000002200 +B1105034535717N00610778EA0000002203 +B1105054535715N00610765EA0000002208 +B1105074535712N00610749EA0000002214 +B1105094535708N00610734EA0000002218 +B1105114535705N00610719EA0000002221 +B1105134535702N00610701EA0000002222 +B1105154535698N00610682EA0000002224 +B1105174535695N00610664EA0000002227 +B1105194535691N00610647EA0000002228 +B1105214535687N00610629EA0000002232 +B1105234535682N00610611EA0000002235 +B1105254535678N00610596EA0000002238 +B1105274535674N00610580EA0000002238 +B1105294535669N00610562EA0000002238 +B1105314535663N00610544EA0000002239 +B1105334535656N00610526EA0000002240 +B1105354535651N00610508EA0000002240 +B1105374535646N00610489EA0000002241 +B1105394535641N00610471EA0000002242 +B1105414535636N00610453EA0000002243 +B1105434535631N00610434EA0000002243 +B1105454535627N00610413EA0000002244 +B1105474535624N00610391EA0000002246 +B1105494535620N00610371EA0000002249 +B1105514535617N00610347EA0000002251 +B1105534535615N00610329EA0000002250 +B1105554535613N00610311EA0000002251 +B1105574535611N00610297EA0000002251 +B1105594535608N00610282EA0000002249 +B1106014535604N00610263EA0000002246 +B1106034535602N00610246EA0000002246 +B1106054535600N00610231EA0000002243 +B1106074535597N00610215EA0000002240 +B1106094535593N00610197EA0000002235 +B1106124535590N00610178EA0000002232 +B1106144535586N00610162EA0000002228 +B1106164535581N00610148EA0000002223 +B1106184535576N00610131EA0000002218 +B1106204535571N00610115EA0000002214 +B1106224535568N00610099EA0000002209 +B1106244535568N00610083EA0000002204 +B1106264535567N00610066EA0000002198 +B1106284535563N00610049EA0000002194 +B1106304535558N00610031EA0000002190 +B1106324535555N00610023EA0000002188 +B1106344535549N00610000EA0000002185 +B1106364535545N00609984EA0000002180 +B1106384535540N00609966EA0000002177 +B1106404535537N00609949EA0000002175 +B1106424535532N00609934EA0000002172 +B1106444535527N00609917EA0000002167 +B1106464535519N00609899EA0000002165 +B1106484535513N00609882EA0000002163 +B1106504535508N00609865EA0000002160 +B1106524535503N00609845EA0000002158 +B1106544535499N00609825EA0000002158 +B1106564535495N00609808EA0000002156 +B1106584535491N00609790EA0000002155 +B1107004535487N00609770EA0000002154 +B1107024535486N00609752EA0000002154 +B1107044535484N00609735EA0000002153 +B1107064535482N00609715EA0000002150 +B1107084535480N00609692EA0000002149 +B1107104535478N00609672EA0000002149 +B1107124535477N00609653EA0000002147 +B1107144535475N00609632EA0000002144 +B1107164535473N00609608EA0000002143 +B1107184535473N00609588EA0000002142 +B1107204535473N00609568EA0000002138 +B1107224535472N00609545EA0000002135 +B1107244535471N00609513EA0000002130 +B1107264535471N00609492EA0000002125 +B1107284535470N00609470EA0000002121 +B1107304535470N00609447EA0000002118 +B1107324535471N00609425EA0000002115 +B1107344535471N00609404EA0000002113 +B1107364535471N00609382EA0000002110 +B1107384535470N00609360EA0000002107 +B1107404535471N00609339EA0000002104 +B1107424535471N00609317EA0000002101 +B1107444535470N00609295EA0000002099 +B1107464535469N00609273EA0000002098 +B1107494535467N00609253EA0000002096 +B1107514535466N00609231EA0000002095 +B1107534535465N00609209EA0000002094 +B1107554535464N00609188EA0000002093 +B1107574535462N00609167EA0000002091 +B1107594535461N00609146EA0000002088 +B1108014535461N00609125EA0000002086 +B1108034535459N00609104EA0000002084 +B1108054535459N00609084EA0000002084 +B1108074535459N00609065EA0000002084 +B1108094535459N00609048EA0000002082 +B1108114535459N00609031EA0000002078 +B1108134535460N00609022EA0000002076 +B1108154535462N00608991EA0000002071 +B1108174535463N00608972EA0000002069 +B1108194535463N00608955EA0000002066 +B1108214535464N00608936EA0000002062 +B1108234535466N00608917EA0000002060 +B1108254535468N00608898EA0000002057 +B1108274535469N00608880EA0000002055 +B1108294535470N00608863EA0000002053 +B1108314535471N00608845EA0000002051 +B1108334535470N00608827EA0000002048 +B1108354535469N00608808EA0000002046 +B1108374535468N00608789EA0000002044 +B1108394535467N00608771EA0000002042 +B1108414535466N00608753EA0000002040 +B1108434535464N00608734EA0000002038 +B1108454535463N00608716EA0000002035 +B1108474535461N00608697EA0000002032 +B1108494535460N00608679EA0000002030 +B1108514535457N00608661EA0000002029 +B1108534535454N00608644EA0000002026 +B1108554535451N00608625EA0000002023 +B1108574535449N00608606EA0000002022 +B1108594535447N00608589EA0000002020 +B1109014535444N00608571EA0000002018 +B1109034535442N00608552EA0000002016 +B1109054535439N00608525EA0000002014 +B1109074535436N00608506EA0000002012 +B1109094535433N00608489EA0000002010 +B1109114535431N00608471EA0000002007 +B1109134535429N00608452EA0000002006 +B1109154535428N00608434EA0000002005 +B1109174535427N00608416EA0000002003 +B1109194535426N00608399EA0000002001 +B1109214535425N00608380EA0000002000 +B1109234535426N00608362EA0000001999 +B1109254535426N00608345EA0000001997 +B1109284535425N00608327EA0000001996 +B1109304535425N00608309EA0000001994 +B1109324535425N00608291EA0000001993 +B1109344535424N00608274EA0000001992 +B1109364535424N00608256EA0000001990 +B1109384535424N00608238EA0000001988 +B1109404535423N00608219EA0000001985 +B1109424535423N00608197EA0000001982 +B1109444535423N00608176EA0000001980 +B1109464535422N00608156EA0000001977 +B1109484535423N00608135EA0000001973 +B1109504535424N00608113EA0000001970 +B1109524535425N00608091EA0000001968 +B1109544535426N00608070EA0000001965 +B1109564535428N00608048EA0000001962 +B1109584535431N00608026EA0000001960 +B1110004535434N00608004EA0000001957 +B1110024535436N00607984EA0000001954 +B1110044535439N00607962EA0000001949 +B1110064535442N00607940EA0000001946 +B1110084535446N00607919EA0000001943 +B1110104535448N00607899EA0000001940 +B1110124535450N00607879EA0000001936 +B1110144535453N00607857EA0000001932 +B1110164535455N00607835EA0000001929 +B1110184535456N00607814EA0000001925 +B1110204535457N00607792EA0000001920 +B1110224535458N00607768EA0000001917 +B1110244535458N00607746EA0000001915 +B1110264535458N00607724EA0000001913 +B1110284535460N00607702EA0000001909 +B1110304535463N00607680EA0000001906 +B1110324535467N00607658EA0000001905 +B1110344535469N00607639EA0000001903 +B1110364535471N00607619EA0000001899 +B1110384535474N00607598EA0000001895 +B1110404535479N00607567EA0000001891 +B1110424535482N00607549EA0000001887 +B1110444535485N00607529EA0000001882 +B1110464535488N00607509EA0000001879 +B1110484535491N00607490EA0000001875 +B1110504535494N00607472EA0000001871 +B1110524535497N00607454EA0000001866 +B1110544535500N00607435EA0000001862 +B1110564535504N00607418EA0000001857 +B1110584535509N00607399EA0000001852 +B1111004535513N00607379EA0000001849 +B1111024535518N00607363EA0000001847 +B1111044535522N00607346EA0000001844 +B1111074535527N00607326EA0000001841 +B1111094535532N00607306EA0000001840 +B1111114535535N00607289EA0000001839 +B1111134535539N00607271EA0000001836 +B1111154535544N00607251EA0000001834 +B1111174535549N00607232EA0000001834 +B1111194535554N00607215EA0000001832 +B1111214535559N00607200EA0000001828 +B1111234535563N00607182EA0000001827 +B1111254535566N00607167EA0000001826 +B1111274535568N00607153EA0000001823 +B1111294535571N00607136EA0000001820 +B1111314535574N00607120EA0000001819 +B1111334535576N00607107EA0000001816 +B1111354535579N00607091EA0000001812 +B1111374535582N00607074EA0000001810 +B1111394535585N00607060EA0000001808 +B1111414535588N00607048EA0000001804 +B1111434535591N00607033EA0000001799 +B1111454535593N00607015EA0000001794 +B1111474535596N00606994EA0000001790 +B1111494535599N00606978EA0000001788 +B1111514535601N00606962EA0000001785 +B1111534535604N00606943EA0000001782 +B1111554535609N00606925EA0000001780 +B1111574535615N00606909EA0000001778 +B1111594535621N00606893EA0000001775 +B1112014535626N00606876EA0000001773 +B1112034535632N00606859EA0000001771 +B1112054535639N00606844EA0000001771 +B1112074535643N00606829EA0000001770 +B1112094535648N00606814EA0000001767 +B1112114535654N00606798EA0000001766 +B1112134535659N00606784EA0000001765 +B1112154535666N00606773EA0000001765 +B1112174535673N00606763EA0000001765 +B1112194535679N00606752EA0000001767 +B1112214535683N00606741EA0000001771 +B1112234535685N00606733EA0000001771 +B1112254535689N00606721EA0000001773 +B1112274535696N00606718EA0000001777 +B1112294535702N00606720EA0000001779 +B1112314535710N00606724EA0000001779 +B1112334535717N00606734EA0000001780 +B1112354535720N00606749EA0000001781 +B1112374535719N00606762EA0000001783 +B1112394535715N00606773EA0000001788 +B1112414535710N00606784EA0000001794 +B1112434535702N00606792EA0000001800 +B1112464535693N00606791EA0000001805 +B1112484535686N00606783EA0000001808 +B1112504535685N00606770EA0000001812 +B1112524535690N00606760EA0000001816 +B1112544535696N00606758EA0000001819 +B1112564535704N00606761EA0000001821 +B1112584535712N00606770EA0000001824 +B1113004535715N00606785EA0000001827 +B1113024535713N00606799EA0000001832 +B1113044535710N00606809EA0000001840 +B1113064535704N00606817EA0000001846 +B1113084535695N00606822EA0000001852 +B1113104535687N00606820EA0000001856 +B1113124535681N00606815EA0000001859 +B1113144535678N00606807EA0000001861 +B1113164535679N00606796EA0000001862 +B1113184535690N00606788EA0000001863 +B1113204535699N00606791EA0000001864 +B1113224535706N00606799EA0000001865 +B1113244535714N00606806EA0000001866 +B1113264535723N00606813EA0000001869 +B1113284535729N00606819EA0000001875 +B1113304535733N00606823EA0000001880 +B1113324535739N00606833EA0000001885 +B1113344535738N00606848EA0000001890 +B1113364535727N00606862EA0000001895 +B1113384535715N00606862EA0000001901 +B1113404535707N00606852EA0000001907 +B1113424535706N00606836EA0000001913 +B1113444535714N00606829EA0000001919 +B1113464535722N00606829EA0000001925 +B1113484535728N00606840EA0000001932 +B1113504535727N00606855EA0000001936 +B1113524535719N00606869EA0000001941 +B1113544535705N00606873EA0000001946 +B1113564535693N00606866EA0000001952 +B1113584535686N00606854EA0000001957 +B1114004535689N00606839EA0000001962 +B1114024535695N00606832EA0000001964 +B1114044535704N00606835EA0000001967 +B1114064535707N00606851EA0000001969 +B1114084535698N00606866EA0000001973 +B1114104535686N00606868EA0000001978 +B1114124535677N00606862EA0000001980 +B1114144535670N00606855EA0000001981 +B1114164535666N00606844EA0000001981 +B1114184535666N00606831EA0000001980 +B1114204535675N00606820EA0000001980 +B1114224535687N00606821EA0000001979 +B1114254535694N00606828EA0000001980 +B1114274535699N00606835EA0000001982 +B1114294535703N00606842EA0000001981 +B1114314535710N00606853EA0000001982 +B1114334535720N00606864EA0000001984 +B1114354535728N00606872EA0000001988 +B1114374535735N00606881EA0000001995 +B1114394535739N00606893EA0000002003 +B1114414535736N00606908EA0000002008 +B1114434535730N00606924EA0000002014 +B1114454535720N00606933EA0000002021 +B1114474535708N00606934EA0000002027 +B1114494535700N00606927EA0000002034 +B1114514535699N00606916EA0000002040 +B1114534535702N00606907EA0000002046 +B1114554535707N00606901EA0000002055 +B1114574535711N00606898EA0000002062 +B1114594535718N00606898EA0000002069 +B1115014535726N00606906EA0000002074 +B1115034535730N00606923EA0000002079 +B1115054535727N00606939EA0000002085 +B1115074535721N00606951EA0000002093 +B1115094535712N00606956EA0000002101 +B1115114535702N00606958EA0000002108 +B1115134535693N00606957EA0000002114 +B1115154535685N00606950EA0000002120 +B1115174535683N00606939EA0000002125 +B1115194535685N00606929EA0000002131 +B1115214535692N00606924EA0000002135 +B1115234535698N00606920EA0000002140 +B1115254535707N00606917EA0000002144 +B1115274535717N00606915EA0000002150 +B1115294535726N00606917EA0000002156 +B1115314535731N00606927EA0000002162 +B1115334535732N00606941EA0000002169 +B1115354535732N00606956EA0000002176 +B1115374535728N00606972EA0000002182 +B1115394535720N00606982EA0000002187 +B1115414535708N00606984EA0000002189 +B1115434535703N00606975EA0000002189 +B1115454535702N00606964EA0000002192 +B1115474535703N00606954EA0000002195 +B1115494535704N00606944EA0000002199 +B1115514535707N00606933EA0000002203 +B1115534535712N00606923EA0000002207 +B1115554535718N00606914EA0000002213 +B1115574535724N00606912EA0000002217 +B1115594535732N00606911EA0000002220 +B1116014535743N00606913EA0000002226 +B1116034535747N00606923EA0000002232 +B1116064535749N00606937EA0000002238 +B1116084535747N00606948EA0000002243 +B1116104535740N00606956EA0000002248 +B1116124535731N00606960EA0000002251 +B1116144535720N00606961EA0000002252 +B1116164535711N00606952EA0000002253 +B1116184535707N00606938EA0000002256 +B1116204535707N00606925EA0000002258 +B1116224535708N00606912EA0000002260 +B1116244535712N00606900EA0000002261 +B1116264535718N00606891EA0000002261 +B1116284535727N00606886EA0000002261 +B1116304535732N00606885EA0000002262 +B1116324535747N00606889EA0000002265 +B1116344535755N00606893EA0000002269 +B1116364535763N00606894EA0000002276 +B1116384535771N00606894EA0000002283 +B1116404535777N00606892EA0000002290 +B1116424535783N00606893EA0000002295 +B1116444535789N00606900EA0000002298 +B1116464535793N00606913EA0000002300 +B1116484535788N00606929EA0000002301 +B1116504535776N00606941EA0000002304 +B1116524535765N00606940EA0000002308 +B1116544535756N00606935EA0000002313 +B1116564535748N00606929EA0000002317 +B1116584535741N00606920EA0000002321 +B1117004535736N00606910EA0000002325 +B1117024535733N00606898EA0000002329 +B1117044535733N00606886EA0000002334 +B1117064535736N00606876EA0000002338 +B1117084535744N00606870EA0000002341 +B1117104535753N00606876EA0000002345 +B1117124535758N00606889EA0000002349 +B1117144535758N00606903EA0000002353 +B1117164535751N00606914EA0000002357 +B1117184535740N00606918EA0000002362 +B1117204535730N00606914EA0000002367 +B1117224535721N00606900EA0000002371 +B1117244535720N00606886EA0000002373 +B1117264535725N00606873EA0000002376 +B1117284535731N00606865EA0000002378 +B1117304535737N00606858EA0000002380 +B1117324535744N00606849EA0000002382 +B1117344535751N00606844EA0000002383 +B1117364535760N00606846EA0000002384 +B1117384535768N00606852EA0000002386 +B1117404535770N00606864EA0000002388 +B1117424535765N00606878EA0000002390 +B1117444535753N00606884EA0000002394 +B1117474535742N00606882EA0000002398 +B1117494535734N00606874EA0000002400 +B1117514535730N00606862EA0000002402 +B1117534535732N00606847EA0000002403 +B1117554535736N00606835EA0000002404 +B1117574535742N00606822EA0000002406 +B1117594535747N00606810EA0000002409 +B1118014535752N00606797EA0000002412 +B1118034535757N00606785EA0000002415 +B1118054535761N00606775EA0000002418 +B1118074535766N00606765EA0000002421 +B1118094535770N00606754EA0000002423 +B1118114535775N00606745EA0000002425 +B1118134535782N00606739EA0000002426 +B1118154535792N00606742EA0000002428 +B1118174535798N00606751EA0000002432 +B1118194535800N00606762EA0000002435 +B1118214535797N00606774EA0000002438 +B1118234535792N00606784EA0000002442 +B1118254535784N00606788EA0000002444 +B1118274535774N00606790EA0000002446 +B1118294535762N00606786EA0000002448 +B1118314535754N00606774EA0000002449 +B1118334535751N00606759EA0000002450 +B1118354535754N00606745EA0000002452 +B1118374535758N00606732EA0000002452 +B1118394535763N00606721EA0000002453 +B1118414535767N00606709EA0000002453 +B1118434535770N00606697EA0000002453 +B1118454535774N00606683EA0000002452 +B1118474535775N00606668EA0000002451 +B1118494535774N00606653EA0000002451 +B1118514535773N00606638EA0000002450 +B1118534535774N00606621EA0000002449 +B1118554535775N00606605EA0000002448 +B1118574535775N00606590EA0000002447 +B1118594535774N00606575EA0000002444 +B1119014535777N00606548EA0000002441 +B1119034535779N00606531EA0000002441 +B1119054535780N00606516EA0000002438 +B1119074535781N00606500EA0000002436 +B1119094535780N00606484EA0000002435 +B1119114535780N00606468EA0000002434 +B1119134535780N00606453EA0000002434 +B1119154535779N00606439EA0000002435 +B1119174535776N00606426EA0000002434 +B1119194535772N00606413EA0000002433 +B1119214535768N00606399EA0000002433 +B1119234535763N00606386EA0000002431 +B1119254535759N00606372EA0000002429 +B1119284535756N00606353EA0000002426 +B1119304535752N00606335EA0000002425 +B1119324535747N00606320EA0000002422 +B1119344535742N00606303EA0000002419 +B1119364535736N00606286EA0000002417 +B1119384535731N00606270EA0000002414 +B1119404535726N00606253EA0000002412 +B1119424535721N00606235EA0000002409 +B1119444535714N00606219EA0000002408 +B1119464535710N00606202EA0000002407 +B1119484535704N00606185EA0000002404 +B1119504535697N00606166EA0000002401 +B1119524535688N00606145EA0000002399 +B1119544535681N00606123EA0000002398 +B1119564535675N00606102EA0000002395 +B1119584535667N00606083EA0000002393 +B1120004535659N00606066EA0000002391 +B1120024535651N00606047EA0000002387 +B1120044535643N00606027EA0000002381 +B1120064535633N00606006EA0000002378 +B1120084535623N00605989EA0000002375 +B1120104535612N00605974EA0000002372 +B1120124535600N00605958EA0000002367 +B1120144535586N00605943EA0000002365 +B1120164535573N00605932EA0000002364 +B1120184535562N00605918EA0000002362 +B1120204535552N00605901EA0000002358 +B1120224535539N00605886EA0000002354 +B1120244535525N00605873EA0000002352 +B1120264535514N00605857EA0000002348 +B1120284535504N00605841EA0000002343 +B1120304535491N00605827EA0000002339 +B1120324535478N00605812EA0000002336 +B1120344535467N00605797EA0000002332 +B1120364535454N00605784EA0000002328 +B1120384535441N00605770EA0000002325 +B1120404535428N00605756EA0000002322 +B1120424535409N00605736EA0000002316 +B1120444535396N00605723EA0000002312 +B1120464535384N00605709EA0000002308 +B1120484535371N00605697EA0000002304 +B1120504535358N00605685EA0000002300 +B1120524535346N00605671EA0000002296 +B1120544535335N00605656EA0000002292 +B1120564535324N00605642EA0000002288 +B1120584535313N00605626EA0000002283 +B1121004535301N00605609EA0000002279 +B1121024535289N00605593EA0000002277 +B1121044535279N00605577EA0000002274 +B1121074535267N00605561EA0000002271 +B1121094535255N00605545EA0000002269 +B1121114535243N00605530EA0000002267 +B1121134535232N00605514EA0000002265 +B1121154535220N00605499EA0000002264 +B1121174535208N00605483EA0000002264 +B1121194535197N00605467EA0000002262 +B1121214535187N00605449EA0000002260 +B1121234535176N00605431EA0000002259 +B1121254535164N00605414EA0000002259 +B1121274535152N00605398EA0000002258 +B1121294535141N00605381EA0000002257 +B1121314535128N00605364EA0000002258 +B1121334535115N00605349EA0000002258 +B1121354535103N00605333EA0000002257 +B1121374535090N00605317EA0000002256 +B1121394535075N00605302EA0000002256 +B1121414535062N00605287EA0000002256 +B1121434535050N00605271EA0000002255 +B1121454535036N00605255EA0000002252 +B1121474535022N00605240EA0000002252 +B1121494535009N00605224EA0000002251 +B1121514534996N00605209EA0000002248 +B1121534534982N00605194EA0000002245 +B1121554534969N00605179EA0000002242 +B1121574534955N00605164EA0000002240 +B1121594534942N00605151EA0000002238 +B1122014534929N00605137EA0000002235 +B1122034534915N00605123EA0000002231 +B1122054534901N00605108EA0000002228 +B1122074534888N00605093EA0000002226 +B1122094534874N00605079EA0000002223 +B1122114534861N00605065EA0000002220 +B1122134534847N00605050EA0000002217 +B1122154534834N00605033EA0000002214 +B1122174534821N00605019EA0000002212 +B1122194534807N00605005EA0000002208 +B1122214534793N00604990EA0000002205 +B1122234534779N00604976EA0000002203 +B1122254534759N00604956EA0000002198 +B1122274534745N00604942EA0000002196 +B1122294534731N00604928EA0000002193 +B1122314534718N00604914EA0000002190 +B1122334534704N00604901EA0000002187 +B1122354534691N00604887EA0000002184 +B1122374534677N00604873EA0000002182 +B1122394534664N00604859EA0000002179 +B1122414534651N00604845EA0000002177 +B1122434534637N00604831EA0000002174 +B1122454534624N00604818EA0000002172 +B1122484534611N00604805EA0000002169 +B1122504534598N00604792EA0000002166 +B1122524534584N00604778EA0000002164 +B1122544534571N00604764EA0000002161 +B1122564534558N00604750EA0000002158 +B1122584534545N00604736EA0000002155 +B1123004534531N00604723EA0000002152 +B1123024534518N00604709EA0000002149 +B1123044534505N00604696EA0000002146 +B1123064534492N00604683EA0000002143 +B1123084534478N00604671EA0000002140 +B1123104534465N00604658EA0000002136 +B1123124534452N00604645EA0000002133 +B1123144534445N00604638EA0000002131 +B1123164534426N00604619EA0000002128 +B1123184534413N00604607EA0000002125 +B1123204534400N00604594EA0000002123 +B1123224534386N00604582EA0000002120 +B1123244534373N00604570EA0000002118 +B1123264534359N00604558EA0000002115 +B1123284534346N00604545EA0000002113 +B1123304534333N00604532EA0000002110 +B1123324534320N00604519EA0000002108 +B1123344534307N00604507EA0000002105 +B1123364534294N00604495EA0000002102 +B1123384534280N00604483EA0000002099 +B1123404534266N00604471EA0000002096 +B1123424534252N00604460EA0000002093 +B1123444534239N00604448EA0000002091 +B1123464534226N00604437EA0000002089 +B1123484534213N00604426EA0000002086 +B1123504534200N00604414EA0000002083 +B1123524534187N00604402EA0000002079 +B1123544534174N00604388EA0000002076 +B1123564534162N00604376EA0000002072 +B1123584534149N00604363EA0000002070 +B1124004534137N00604350EA0000002067 +B1124024534125N00604337EA0000002065 +B1124044534113N00604326EA0000002063 +B1124064534094N00604309EA0000002060 +B1124084534080N00604299EA0000002059 +B1124104534067N00604288EA0000002057 +B1124124534052N00604277EA0000002055 +B1124144534039N00604267EA0000002054 +B1124164534025N00604256EA0000002052 +B1124184534012N00604246EA0000002050 +B1124204533997N00604238EA0000002048 +B1124224533986N00604233EA0000002048 +B1124244533979N00604228EA0000002049 +B1124264533970N00604221EA0000002050 +B1124294533959N00604212EA0000002051 +B1124314533949N00604204EA0000002053 +B1124334533939N00604197EA0000002059 +B1124354533930N00604187EA0000002061 +B1124374533924N00604171EA0000002064 +B1124394533918N00604158EA0000002066 +B1124414533912N00604146EA0000002066 +B1124434533908N00604129EA0000002067 +B1124454533911N00604111EA0000002069 +B1124474533921N00604101EA0000002070 +B1124494533932N00604100EA0000002071 +B1124514533942N00604104EA0000002072 +B1124534533951N00604109EA0000002074 +B1124554533958N00604112EA0000002075 +B1124574533966N00604116EA0000002077 +B1124594533972N00604122EA0000002081 +B1125014533975N00604130EA0000002086 +B1125034533978N00604136EA0000002090 +B1125054533979N00604145EA0000002092 +B1125074533974N00604156EA0000002097 +B1125094533962N00604158EA0000002101 +B1125114533953N00604148EA0000002105 +B1125134533952N00604128EA0000002109 +B1125154533961N00604114EA0000002111 +B1125174533973N00604116EA0000002114 +B1125194533979N00604122EA0000002118 +B1125214533977N00604133EA0000002124 +B1125234533973N00604138EA0000002128 +B1125254533967N00604141EA0000002131 +B1125274533955N00604139EA0000002133 +B1125294533944N00604126EA0000002136 +B1125314533943N00604107EA0000002140 +B1125334533952N00604093EA0000002143 +B1125354533964N00604091EA0000002147 +B1125374533970N00604099EA0000002151 +B1125394533970N00604107EA0000002154 +B1125414533963N00604113EA0000002157 +B1125434533950N00604109EA0000002159 +B1125454533936N00604089EA0000002162 +B1125474533937N00604069EA0000002164 +B1125494533944N00604053EA0000002167 +B1125514533954N00604050EA0000002168 +B1125534533962N00604058EA0000002170 +B1125554533962N00604068EA0000002173 +B1125574533958N00604075EA0000002177 +B1125594533955N00604082EA0000002180 +B1126014533955N00604089EA0000002183 +B1126034533953N00604095EA0000002184 +B1126054533947N00604100EA0000002184 +B1126074533937N00604104EA0000002184 +B1126104533926N00604097EA0000002185 +B1126124533916N00604082EA0000002185 +B1126144533914N00604063EA0000002183 +B1126164533921N00604051EA0000002181 +B1126184533932N00604052EA0000002179 +B1126204533936N00604058EA0000002177 +B1126224533938N00604065EA0000002176 +B1126244533938N00604072EA0000002177 +B1126264533937N00604079EA0000002178 +B1126284533936N00604088EA0000002180 +B1126304533929N00604092EA0000002181 +B1126324533920N00604092EA0000002182 +B1126344533908N00604083EA0000002181 +B1126364533901N00604067EA0000002180 +B1126384533903N00604049EA0000002178 +B1126404533913N00604038EA0000002175 +B1126424533923N00604033EA0000002173 +B1126444533931N00604033EA0000002172 +B1126464533936N00604034EA0000002171 +B1126484533941N00604038EA0000002170 +B1126504533945N00604045EA0000002169 +B1126524533944N00604053EA0000002169 +B1126544533938N00604059EA0000002168 +B1126564533929N00604059EA0000002167 +B1126584533919N00604056EA0000002165 +B1127004533907N00604051EA0000002163 +B1127024533894N00604046EA0000002161 +B1127044533883N00604041EA0000002161 +B1127064533873N00604035EA0000002160 +B1127084533861N00604027EA0000002158 +B1127104533850N00604020EA0000002153 +B1127124533837N00604013EA0000002149 +B1127144533825N00604002EA0000002144 +B1127164533812N00603992EA0000002139 +B1127184533799N00603984EA0000002135 +B1127204533786N00603975EA0000002133 +B1127224533773N00603968EA0000002130 +B1127244533762N00603961EA0000002127 +B1127264533743N00603947EA0000002121 +B1127284533730N00603939EA0000002118 +B1127304533717N00603929EA0000002115 +B1127324533706N00603920EA0000002112 +B1127344533694N00603913EA0000002108 +B1127364533681N00603905EA0000002104 +B1127384533668N00603896EA0000002102 +B1127404533657N00603888EA0000002100 +B1127424533646N00603881EA0000002096 +B1127444533634N00603872EA0000002093 +B1127474533622N00603862EA0000002091 +B1127494533612N00603853EA0000002087 +B1127514533601N00603844EA0000002082 +B1127534533588N00603834EA0000002079 +B1127554533577N00603825EA0000002076 +B1127574533566N00603816EA0000002073 +B1127594533555N00603807EA0000002069 +B1128014533544N00603799EA0000002066 +B1128034533534N00603792EA0000002062 +B1128054533523N00603785EA0000002057 +B1128074533510N00603779EA0000002054 +B1128094533498N00603771EA0000002051 +B1128114533488N00603764EA0000002048 +B1128134533476N00603759EA0000002046 +B1128154533465N00603752EA0000002044 +B1128174533454N00603745EA0000002043 +B1128194533441N00603739EA0000002042 +B1128214533429N00603733EA0000002042 +B1128234533418N00603727EA0000002041 +B1128254533407N00603720EA0000002040 +B1128274533395N00603711EA0000002041 +B1128294533384N00603702EA0000002040 +B1128314533374N00603694EA0000002038 +B1128334533362N00603685EA0000002037 +B1128354533351N00603676EA0000002037 +B1128374533341N00603669EA0000002035 +B1128394533331N00603661EA0000002032 +B1128414533321N00603653EA0000002032 +B1128434533312N00603646EA0000002032 +B1128454533305N00603640EA0000002031 +B1128474533296N00603633EA0000002031 +B1128494533287N00603623EA0000002033 +B1128514533278N00603613EA0000002036 +B1128534533271N00603607EA0000002041 +B1128554533266N00603607EA0000002045 +B1128574533262N00603611EA0000002047 +B1128594533264N00603622EA0000002048 +B1129014533271N00603633EA0000002050 +B1129034533286N00603637EA0000002054 +B1129054533298N00603628EA0000002056 +B1129074533306N00603614EA0000002059 +B1129094533309N00603596EA0000002060 +B1129114533306N00603578EA0000002062 +B1129134533301N00603566EA0000002063 +B1129154533294N00603556EA0000002064 +B1129174533288N00603547EA0000002063 +B1129194533281N00603540EA0000002062 +B1129214533273N00603533EA0000002061 +B1129234533265N00603527EA0000002060 +B1129264533257N00603523EA0000002058 +B1129284533247N00603520EA0000002056 +B1129304533237N00603515EA0000002055 +B1129324533228N00603509EA0000002053 +B1129344533219N00603503EA0000002051 +B1129364533210N00603499EA0000002050 +B1129384533201N00603497EA0000002049 +B1129404533194N00603497EA0000002046 +B1129424533185N00603501EA0000002043 +B1129444533175N00603510EA0000002042 +B1129464533165N00603517EA0000002043 +B1129484533159N00603518EA0000002045 +B1129504533154N00603519EA0000002045 +B1129524533145N00603520EA0000002046 +B1129544533137N00603523EA0000002048 +B1129564533132N00603532EA0000002050 +B1129584533127N00603542EA0000002053 +B1130004533124N00603554EA0000002056 +B1130024533126N00603566EA0000002062 +B1130044533133N00603576EA0000002068 +B1130064533142N00603582EA0000002073 +B1130084533155N00603576EA0000002077 +B1130104533162N00603562EA0000002082 +B1130124533161N00603548EA0000002087 +B1130144533155N00603539EA0000002092 +B1130164533146N00603538EA0000002097 +B1130184533138N00603545EA0000002104 +B1130204533135N00603555EA0000002110 +B1130224533137N00603566EA0000002115 +B1130244533142N00603575EA0000002118 +B1130264533151N00603577EA0000002121 +B1130284533162N00603565EA0000002123 +B1130304533164N00603549EA0000002126 +B1130324533160N00603535EA0000002129 +B1130344533152N00603526EA0000002134 +B1130364533145N00603521EA0000002138 +B1130384533137N00603516EA0000002141 +B1130404533127N00603512EA0000002146 +B1130424533119N00603521EA0000002149 +B1130444533114N00603539EA0000002158 +B1130464533118N00603545EA0000002164 +B1130484533127N00603548EA0000002167 +B1130504533138N00603542EA0000002169 +B1130524533144N00603527EA0000002171 +B1130544533146N00603509EA0000002172 +B1130564533141N00603493EA0000002175 +B1130584533131N00603485EA0000002179 +B1131004533122N00603481EA0000002184 +B1131024533115N00603478EA0000002187 +B1131054533106N00603479EA0000002189 +B1131074533100N00603489EA0000002191 +B1131094533102N00603499EA0000002194 +B1131114533110N00603503EA0000002196 +B1131134533120N00603493EA0000002197 +B1131154533125N00603474EA0000002198 +B1131174533120N00603454EA0000002199 +B1131194533110N00603440EA0000002201 +B1131214533099N00603431EA0000002205 +B1131234533092N00603422EA0000002206 +B1131254533083N00603414EA0000002206 +B1131274533072N00603414EA0000002205 +B1131294533066N00603422EA0000002202 +B1131314533063N00603430EA0000002198 +B1131334533062N00603439EA0000002195 +B1131354533066N00603447EA0000002193 +B1131374533072N00603452EA0000002193 +B1131394533076N00603455EA0000002193 +B1131414533080N00603459EA0000002191 +B1131434533087N00603459EA0000002189 +B1131454533096N00603446EA0000002186 +B1131474533101N00603429EA0000002185 +B1131494533100N00603409EA0000002184 +B1131514533096N00603391EA0000002183 +B1131534533086N00603379EA0000002182 +B1131554533075N00603370EA0000002180 +B1131574533063N00603359EA0000002177 +B1131594533051N00603348EA0000002173 +B1132014533038N00603337EA0000002168 +B1132034533027N00603324EA0000002162 +B1132054533017N00603311EA0000002155 +B1132074533006N00603300EA0000002149 +B1132094532996N00603285EA0000002143 +B1132114532986N00603269EA0000002139 +B1132134532977N00603254EA0000002135 +B1132154532967N00603238EA0000002130 +B1132174532957N00603221EA0000002124 +B1132194532937N00603199EA0000002116 +B1132214532923N00603187EA0000002112 +B1132234532910N00603175EA0000002106 +B1132254532897N00603160EA0000002101 +B1132274532883N00603146EA0000002097 +B1132294532871N00603133EA0000002093 +B1132314532858N00603120EA0000002087 +B1132334532844N00603105EA0000002083 +B1132354532832N00603091EA0000002079 +B1132374532819N00603077EA0000002075 +B1132394532806N00603064EA0000002070 +B1132414532792N00603050EA0000002065 +B1132444532779N00603037EA0000002059 +B1132464532766N00603021EA0000002054 +B1132484532754N00603008EA0000002049 +B1132504532741N00602995EA0000002043 +B1132524532727N00602980EA0000002038 +B1132544532714N00602966EA0000002034 +B1132564532701N00602953EA0000002030 +B1132584532688N00602939EA0000002026 +B1133004532675N00602925EA0000002023 +B1133024532661N00602913EA0000002019 +B1133044532648N00602899EA0000002015 +B1133064532635N00602884EA0000002011 +B1133084532622N00602871EA0000002007 +B1133104532609N00602857EA0000002003 +B1133124532596N00602846EA0000001998 +B1133144532583N00602834EA0000001994 +B1133164532569N00602821EA0000001990 +B1133184532557N00602807EA0000001986 +B1133204532546N00602790EA0000001983 +B1133224532537N00602772EA0000001980 +B1133244532526N00602756EA0000001975 +B1133264532515N00602739EA0000001972 +B1133284532504N00602723EA0000001968 +B1133304532492N00602709EA0000001964 +B1133324532481N00602693EA0000001960 +B1133344532470N00602676EA0000001956 +B1133364532459N00602661EA0000001953 +B1133384532448N00602644EA0000001949 +B1133404532437N00602628EA0000001946 +B1133424532426N00602612EA0000001943 +B1133444532414N00602596EA0000001939 +B1133464532403N00602580EA0000001936 +B1133484532391N00602565EA0000001933 +B1133504532379N00602551EA0000001930 +B1133524532367N00602536EA0000001928 +B1133544532355N00602521EA0000001925 +B1133564532343N00602508EA0000001923 +B1133584532330N00602495EA0000001920 +B1134004532311N00602476EA0000001916 +B1134024532298N00602464EA0000001913 +B1134044532286N00602451EA0000001910 +B1134064532274N00602437EA0000001907 +B1134084532262N00602421EA0000001904 +B1134104532251N00602406EA0000001901 +B1134124532239N00602390EA0000001897 +B1134144532228N00602374EA0000001894 +B1134164532217N00602357EA0000001891 +B1134184532206N00602341EA0000001888 +B1134204532195N00602326EA0000001885 +B1134234532183N00602311EA0000001882 +B1134254532172N00602295EA0000001879 +B1134274532160N00602281EA0000001876 +B1134294532147N00602268EA0000001873 +B1134314532135N00602254EA0000001870 +B1134334532123N00602240EA0000001867 +B1134354532111N00602225EA0000001865 +B1134374532099N00602211EA0000001862 +B1134394532087N00602197EA0000001860 +B1134414532074N00602183EA0000001857 +B1134434532062N00602169EA0000001854 +B1134454532049N00602156EA0000001852 +B1134474532036N00602144EA0000001850 +B1134494532023N00602132EA0000001847 +B1134514532010N00602120EA0000001845 +B1134534531997N00602108EA0000001843 +B1134554531984N00602096EA0000001841 +B1134574531972N00602085EA0000001839 +B1134594531959N00602075EA0000001837 +B1135014531946N00602064EA0000001834 +B1135034531932N00602054EA0000001831 +B1135054531919N00602043EA0000001827 +B1135074531908N00602030EA0000001825 +B1135094531901N00602017EA0000001821 +B1135114531893N00602004EA0000001818 +B1135134531889N00601988EA0000001815 +B1135154531887N00601972EA0000001812 +B1135174531882N00601957EA0000001810 +B1135194531878N00601942EA0000001809 +B1135214531874N00601929EA0000001806 +B1135234531868N00601917EA0000001803 +B1135254531858N00601907EA0000001802 +B1135274531849N00601899EA0000001799 +B1135294531841N00601892EA0000001796 +B1135314531831N00601886EA0000001794 +B1135334531820N00601877EA0000001790 +B1135364531803N00601870EA0000001789 +B1135384531792N00601864EA0000001789 +B1135404531782N00601861EA0000001788 +B1135424531772N00601858EA0000001786 +B1135444531761N00601855EA0000001782 +B1135464531747N00601852EA0000001778 +B1135484531735N00601850EA0000001777 +B1135504531723N00601848EA0000001775 +B1135524531712N00601849EA0000001771 +B1135544531700N00601849EA0000001767 +B1135564531686N00601848EA0000001763 +B1135584531666N00601846EA0000001761 +B1136004531654N00601845EA0000001759 +B1136024531642N00601842EA0000001758 +B1136044531630N00601838EA0000001757 +B1136064531618N00601833EA0000001754 +B1136084531605N00601824EA0000001751 +B1136104531593N00601816EA0000001750 +B1136124531580N00601809EA0000001748 +B1136144531568N00601801EA0000001747 +B1136164531555N00601790EA0000001745 +B1136184531543N00601779EA0000001743 +B1136214531530N00601769EA0000001740 +B1136234531517N00601757EA0000001738 +B1136254531504N00601746EA0000001737 +B1136274531493N00601737EA0000001734 +B1136294531482N00601728EA0000001730 +B1136314531469N00601719EA0000001728 +B1136334531457N00601714EA0000001727 +B1136354531445N00601710EA0000001725 +B1136374531433N00601706EA0000001722 +B1136394531421N00601702EA0000001721 +B1136414531410N00601695EA0000001720 +B1136434531401N00601689EA0000001718 +B1136454531392N00601683EA0000001715 +B1136474531381N00601676EA0000001711 +B1136494531375N00601672EA0000001709 +B1136514531358N00601664EA0000001706 +B1136534531348N00601658EA0000001703 +B1136554531337N00601653EA0000001699 +B1136574531325N00601646EA0000001696 +B1136594531314N00601637EA0000001694 +B1137014531304N00601629EA0000001692 +B1137034531294N00601621EA0000001689 +B1137054531283N00601613EA0000001687 +B1137074531273N00601604EA0000001683 +B1137094531261N00601595EA0000001679 +B1137114531247N00601585EA0000001676 +B1137134531235N00601577EA0000001673 +B1137154531223N00601568EA0000001669 +B1137174531210N00601559EA0000001664 +B1137194531197N00601550EA0000001661 +B1137214531185N00601540EA0000001657 +B1137234531174N00601531EA0000001653 +B1137254531162N00601522EA0000001649 +B1137274531150N00601513EA0000001647 +B1137294531139N00601505EA0000001644 +B1137314531127N00601495EA0000001641 +B1137334531116N00601485EA0000001638 +B1137354531104N00601476EA0000001635 +B1137374531093N00601467EA0000001632 +B1137394531080N00601459EA0000001628 +B1137414531061N00601446EA0000001624 +B1137434531048N00601437EA0000001622 +B1137454531036N00601430EA0000001620 +B1137474531023N00601422EA0000001616 +B1137494531010N00601414EA0000001613 +B1137514530996N00601405EA0000001612 +B1137534530985N00601395EA0000001611 +B1137554530975N00601385EA0000001608 +B1137574530964N00601374EA0000001605 +B1137594530953N00601364EA0000001604 +B1138024530943N00601354EA0000001602 +B1138044530932N00601343EA0000001599 +B1138064530921N00601332EA0000001596 +B1138084530910N00601322EA0000001595 +B1138104530899N00601312EA0000001592 +B1138124530888N00601301EA0000001589 +B1138144530878N00601290EA0000001585 +B1138164530866N00601279EA0000001582 +B1138184530854N00601269EA0000001579 +B1138204530843N00601258EA0000001576 +B1138224530832N00601248EA0000001573 +B1138244530820N00601237EA0000001570 +B1138264530808N00601227EA0000001568 +B1138284530797N00601217EA0000001565 +B1138304530785N00601207EA0000001561 +B1138324530773N00601197EA0000001558 +B1138344530761N00601187EA0000001554 +B1138364530749N00601177EA0000001552 +B1138384530739N00601167EA0000001550 +B1138404530727N00601157EA0000001547 +B1138424530715N00601146EA0000001543 +B1138444530703N00601134EA0000001540 +B1138464530692N00601122EA0000001537 +B1138484530680N00601111EA0000001534 +B1138504530668N00601099EA0000001532 +B1138524530658N00601086EA0000001530 +B1138544530647N00601073EA0000001527 +B1138564530636N00601059EA0000001523 +B1138584530624N00601045EA0000001521 +B1139004530612N00601032EA0000001519 +B1139024530600N00601021EA0000001516 +B1139044530587N00601009EA0000001513 +B1139064530574N00600999EA0000001511 +B1139084530560N00600991EA0000001508 +B1139104530546N00600982EA0000001505 +B1139124530532N00600972EA0000001504 +B1139144530520N00600964EA0000001503 +B1139164530508N00600957EA0000001501 +B1139184530495N00600949EA0000001497 +B1139204530475N00600938EA0000001494 +B1139224530462N00600932EA0000001491 +B1139244530449N00600926EA0000001487 +B1139264530435N00600919EA0000001484 +B1139284530422N00600912EA0000001482 +B1139304530409N00600905EA0000001479 +B1139324530396N00600898EA0000001475 +B1139344530383N00600890EA0000001472 +B1139364530370N00600882EA0000001470 +B1139384530357N00600874EA0000001467 +B1139404530344N00600865EA0000001464 +B1139434530331N00600855EA0000001461 +B1139454530319N00600844EA0000001459 +B1139474530307N00600834EA0000001456 +B1139494530294N00600824EA0000001453 +B1139514530281N00600814EA0000001450 +B1139534530268N00600806EA0000001448 +B1139554530255N00600798EA0000001445 +B1139574530241N00600790EA0000001443 +B1139594530227N00600783EA0000001440 +B1140014530213N00600777EA0000001437 +B1140034530199N00600770EA0000001435 +B1140054530185N00600762EA0000001431 +B1140074530172N00600753EA0000001428 +B1140094530158N00600745EA0000001426 +B1140114530144N00600737EA0000001423 +B1140134530131N00600729EA0000001420 +B1140154530117N00600721EA0000001416 +B1140174530103N00600713EA0000001414 +B1140194530089N00600705EA0000001411 +B1140214530075N00600698EA0000001408 +B1140234530061N00600690EA0000001405 +B1140254530047N00600683EA0000001403 +B1140274530033N00600676EA0000001401 +B1140294530019N00600670EA0000001398 +B1140314530005N00600662EA0000001396 +B1140334529991N00600654EA0000001394 +B1140354529977N00600646EA0000001392 +B1140374529963N00600637EA0000001389 +B1140394529949N00600630EA0000001387 +B1140414529935N00600622EA0000001385 +B1140434529922N00600614EA0000001383 +B1140454529909N00600605EA0000001380 +B1140474529895N00600596EA0000001378 +B1140494529883N00600586EA0000001375 +B1140514529871N00600575EA0000001373 +B1140534529860N00600564EA0000001371 +B1140554529849N00600553EA0000001368 +B1140574529838N00600543EA0000001365 +B1140594529826N00600533EA0000001363 +B1141014529809N00600519EA0000001358 +B1141034529798N00600509EA0000001355 +B1141054529786N00600500EA0000001352 +B1141074529774N00600491EA0000001349 +B1141094529763N00600483EA0000001346 +B1141114529751N00600473EA0000001343 +B1141134529741N00600463EA0000001341 +B1141154529730N00600454EA0000001337 +B1141174529719N00600444EA0000001334 +B1141194529708N00600434EA0000001331 +B1141224529697N00600425EA0000001328 +B1141244529685N00600416EA0000001325 +B1141264529674N00600407EA0000001321 +B1141284529661N00600399EA0000001318 +B1141304529650N00600390EA0000001315 +B1141324529639N00600380EA0000001312 +B1141344529628N00600371EA0000001308 +B1141364529616N00600362EA0000001305 +B1141384529605N00600353EA0000001303 +B1141404529595N00600345EA0000001300 +B1141424529583N00600336EA0000001297 +B1141444529573N00600327EA0000001294 +B1141464529562N00600318EA0000001292 +B1141484529551N00600310EA0000001290 +B1141504529540N00600301EA0000001287 +B1141524529530N00600293EA0000001285 +B1141544529519N00600285EA0000001282 +B1141564529508N00600275EA0000001279 +B1141584529497N00600264EA0000001276 +B1142004529487N00600256EA0000001274 +B1142024529477N00600247EA0000001271 +B1142044529466N00600238EA0000001268 +B1142064529456N00600229EA0000001265 +B1142084529446N00600221EA0000001263 +B1142104529436N00600212EA0000001260 +B1142124529426N00600204EA0000001257 +B1142144529415N00600196EA0000001255 +B1142164529405N00600188EA0000001252 +B1142184529395N00600180EA0000001249 +B1142204529384N00600172EA0000001246 +B1142224529373N00600164EA0000001244 +B1142244529363N00600156EA0000001242 +B1142264529353N00600148EA0000001239 +B1142284529342N00600139EA0000001236 +B1142304529332N00600131EA0000001234 +B1142324529321N00600122EA0000001231 +B1142344529311N00600113EA0000001228 +B1142364529301N00600102EA0000001226 +B1142384529290N00600092EA0000001224 +B1142404529274N00600078EA0000001221 +B1142424529263N00600070EA0000001219 +B1142444529252N00600061EA0000001217 +B1142464529241N00600053EA0000001215 +B1142484529230N00600045EA0000001212 +B1142504529218N00600037EA0000001210 +B1142524529208N00600028EA0000001209 +B1142544529197N00600019EA0000001207 +B1142564529186N00600011EA0000001205 +B1142584529175N00600001EA0000001204 +B1143014529164N00559993EA0000001202 +B1143034529153N00559985EA0000001201 +B1143054529143N00559976EA0000001199 +B1143074529132N00559967EA0000001197 +B1143094529122N00559960EA0000001195 +B1143114529110N00559953EA0000001193 +B1143134529099N00559946EA0000001191 +B1143154529087N00559939EA0000001188 +B1143174529075N00559932EA0000001187 +B1143194529064N00559926EA0000001184 +B1143214529052N00559921EA0000001182 +B1143234529040N00559915EA0000001179 +B1143254529028N00559909EA0000001177 +B1143274529016N00559902EA0000001174 +B1143294529005N00559896EA0000001172 +B1143314528993N00559888EA0000001170 +B1143334528982N00559881EA0000001167 +B1143354528971N00559872EA0000001165 +B1143374528961N00559864EA0000001162 +B1143394528950N00559856EA0000001160 +B1143414528939N00559848EA0000001158 +B1143434528927N00559841EA0000001156 +B1143454528916N00559834EA0000001153 +B1143474528905N00559827EA0000001150 +B1143494528893N00559821EA0000001148 +B1143514528883N00559813EA0000001146 +B1143534528872N00559806EA0000001143 +B1143554528860N00559800EA0000001141 +B1143574528848N00559795EA0000001140 +B1143594528837N00559790EA0000001138 +B1144014528825N00559784EA0000001136 +B1144034528813N00559777EA0000001135 +B1144054528802N00559771EA0000001134 +B1144074528791N00559764EA0000001132 +B1144094528780N00559757EA0000001130 +B1144114528769N00559749EA0000001129 +B1144134528758N00559742EA0000001128 +B1144154528746N00559735EA0000001126 +B1144174528734N00559728EA0000001125 +B1144194528723N00559722EA0000001124 +B1144214528712N00559716EA0000001121 +B1144234528696N00559707EA0000001117 +B1144254528687N00559700EA0000001113 +B1144274528676N00559694EA0000001108 +B1144294528665N00559688EA0000001103 +B1144314528653N00559682EA0000001100 +B1144334528642N00559676EA0000001097 +B1144354528631N00559670EA0000001094 +B1144374528621N00559663EA0000001091 +B1144404528611N00559654EA0000001088 +B1144424528601N00559644EA0000001086 +B1144444528591N00559635EA0000001083 +B1144464528580N00559627EA0000001080 +B1144484528568N00559618EA0000001078 +B1144504528556N00559610EA0000001077 +B1144524528544N00559603EA0000001075 +B1144544528531N00559595EA0000001073 +B1144564528518N00559586EA0000001072 +B1144584528506N00559578EA0000001071 +B1145004528495N00559568EA0000001069 +B1145024528482N00559560EA0000001067 +B1145044528469N00559552EA0000001067 +B1145064528458N00559542EA0000001065 +B1145084528447N00559531EA0000001064 +B1145104528436N00559521EA0000001063 +B1145124528425N00559510EA0000001063 +B1145144528416N00559498EA0000001061 +B1145164528406N00559486EA0000001060 +B1145184528395N00559475EA0000001059 +B1145204528384N00559464EA0000001059 +B1145224528373N00559453EA0000001058 +B1145244528362N00559442EA0000001057 +B1145264528350N00559431EA0000001056 +B1145284528338N00559421EA0000001056 +B1145304528326N00559412EA0000001057 +B1145324528316N00559404EA0000001058 +B1145344528305N00559398EA0000001057 +B1145364528295N00559389EA0000001058 +B1145384528284N00559382EA0000001060 +B1145404528273N00559376EA0000001061 +B1145424528262N00559371EA0000001063 +B1145444528253N00559364EA0000001064 +B1145464528247N00559356EA0000001065 +B1145484528244N00559348EA0000001065 +B1145504528250N00559343EA0000001062 +B1145524528258N00559349EA0000001061 +B1145544528262N00559365EA0000001060 +B1145564528259N00559384EA0000001059 +B1145584528247N00559402EA0000001059 +B1146004528226N00559411EA0000001061 +B1146024528213N00559410EA0000001062 +B1146044528202N00559406EA0000001062 +B1146064528192N00559399EA0000001061 +B1146084528181N00559390EA0000001060 +B1146104528172N00559381EA0000001059 +B1146124528163N00559371EA0000001057 +B1146144528157N00559361EA0000001056 +B1146164528149N00559352EA0000001054 +B1146184528142N00559342EA0000001052 +B1146214528134N00559332EA0000001050 +B1146234528127N00559322EA0000001048 +B1146254528119N00559312EA0000001047 +B1146274528111N00559302EA0000001046 +B1146294528104N00559293EA0000001045 +B1146314528097N00559284EA0000001042 +B1146334528090N00559273EA0000001039 +B1146354528083N00559263EA0000001038 +B1146374528077N00559254EA0000001037 +B1146394528071N00559245EA0000001036 +B1146414528065N00559236EA0000001036 +B1146434528058N00559228EA0000001035 +B1146454528052N00559219EA0000001034 +B1146474528045N00559209EA0000001033 +B1146494528036N00559200EA0000001033 +B1146514528028N00559191EA0000001032 +B1146534528021N00559182EA0000001031 +B1146554528014N00559172EA0000001030 +B1146574528006N00559162EA0000001030 +B1146594527999N00559153EA0000001028 +B1147014527990N00559142EA0000001028 +B1147034527981N00559131EA0000001028 +B1147054527973N00559121EA0000001030 +B1147074527964N00559110EA0000001031 +B1147094527956N00559099EA0000001032 +B1147114527947N00559089EA0000001035 +B1147134527939N00559079EA0000001036 +B1147154527933N00559069EA0000001037 +B1147174527928N00559058EA0000001038 +B1147194527923N00559046EA0000001039 +B1147214527920N00559036EA0000001041 +B1147234527922N00559026EA0000001042 +B1147254527928N00559022EA0000001043 +B1147274527936N00559026EA0000001043 +B1147294527940N00559040EA0000001043 +B1147314527936N00559061EA0000001045 +B1147334527922N00559071EA0000001047 +B1147354527910N00559071EA0000001049 +B1147374527899N00559066EA0000001050 +B1147394527892N00559056EA0000001051 +B1147414527888N00559038EA0000001055 +B1147434527894N00559029EA0000001056 +B1147454527901N00559028EA0000001056 +B1147474527908N00559034EA0000001056 +B1147494527911N00559049EA0000001056 +B1147514527906N00559067EA0000001057 +B1147534527895N00559077EA0000001058 +B1147554527883N00559079EA0000001059 +B1147574527871N00559076EA0000001061 +B1147594527861N00559070EA0000001062 +B1148024527853N00559060EA0000001062 +B1148044527846N00559049EA0000001063 +B1148064527843N00559038EA0000001064 +B1148084527840N00559026EA0000001065 +B1148104527841N00559015EA0000001065 +B1148124527847N00559010EA0000001065 +B1148144527855N00559012EA0000001064 +B1148164527860N00559022EA0000001063 +B1148184527857N00559037EA0000001062 +B1148204527847N00559048EA0000001062 +B1148224527834N00559048EA0000001062 +B1148244527823N00559041EA0000001061 +B1148264527814N00559030EA0000001061 +B1148284527805N00559018EA0000001060 +B1148304527797N00559005EA0000001059 +B1148324527790N00558991EA0000001058 +B1148344527782N00558977EA0000001057 +B1148364527774N00558963EA0000001057 +B1148384527769N00558951EA0000001058 +B1148404527763N00558938EA0000001058 +B1148424527757N00558924EA0000001057 +B1148444527753N00558910EA0000001057 +B1148464527748N00558897EA0000001057 +B1148484527743N00558885EA0000001057 +B1148504527739N00558871EA0000001056 +B1148524527735N00558855EA0000001056 +B1148544527730N00558841EA0000001057 +B1148564527726N00558826EA0000001057 +B1148584527720N00558810EA0000001057 +B1149004527714N00558796EA0000001058 +B1149024527709N00558782EA0000001059 +B1149044527704N00558767EA0000001059 +B1149064527698N00558751EA0000001058 +B1149084527692N00558735EA0000001058 +B1149104527686N00558720EA0000001059 +B1149124527681N00558703EA0000001059 +B1149144527676N00558687EA0000001059 +B1149164527671N00558671EA0000001058 +B1149184527667N00558654EA0000001058 +B1149204527660N00558633EA0000001059 +B1149224527656N00558619EA0000001059 +B1149244527652N00558605EA0000001060 +B1149264527647N00558590EA0000001060 +B1149284527643N00558574EA0000001059 +B1149304527638N00558557EA0000001058 +B1149324527632N00558542EA0000001057 +B1149344527627N00558529EA0000001057 +B1149364527621N00558514EA0000001057 +B1149394527617N00558496EA0000001055 +B1149414527615N00558480EA0000001054 +B1149434527613N00558464EA0000001053 +B1149454527610N00558446EA0000001052 +B1149474527609N00558427EA0000001052 +B1149494527607N00558412EA0000001052 +B1149514527604N00558396EA0000001050 +B1149534527600N00558380EA0000001050 +B1149554527594N00558365EA0000001049 +B1149574527589N00558348EA0000001049 +B1149594527583N00558332EA0000001048 +B1150014527577N00558315EA0000001047 +B1150034527573N00558297EA0000001046 +B1150054527569N00558280EA0000001046 +B1150074527565N00558264EA0000001046 +B1150094527561N00558248EA0000001047 +B1150114527560N00558233EA0000001047 +B1150134527558N00558218EA0000001046 +B1150154527555N00558201EA0000001047 +B1150174527553N00558186EA0000001046 +B1150194527549N00558169EA0000001044 +B1150214527545N00558151EA0000001041 +B1150234527542N00558135EA0000001039 +B1150254527540N00558119EA0000001036 +B1150274527537N00558103EA0000001034 +B1150294527533N00558085EA0000001031 +B1150314527532N00558068EA0000001031 +B1150334527531N00558053EA0000001031 +B1150354527531N00558039EA0000001029 +B1150374527531N00558024EA0000001027 +B1150394527532N00558011EA0000001024 +B1150414527534N00557998EA0000001021 +B1150434527536N00557984EA0000001018 +B1150454527535N00557970EA0000001015 +B1150474527534N00557957EA0000001011 +B1150494527533N00557942EA0000001007 +B1150514527535N00557927EA0000001004 +B1150534527537N00557914EA0000001001 +B1150554527535N00557901EA0000000998 +B1150574527533N00557895EA0000000993 +B1150594527517N00557882EA0000000992 +B1151014527508N00557882EA0000000993 +B1151034527499N00557882EA0000000996 +B1151054527487N00557879EA0000001000 +B1151074527479N00557871EA0000001007 +B1151094527476N00557860EA0000001011 +B1151114527473N00557848EA0000001013 +B1151134527473N00557835EA0000001014 +B1151154527482N00557829EA0000001013 +B1151184527492N00557829EA0000001016 +B1151204527497N00557834EA0000001021 +B1151224527496N00557844EA0000001027 +B1151244527492N00557853EA0000001033 +B1151264527486N00557861EA0000001037 +B1151284527477N00557866EA0000001043 +B1151304527469N00557862EA0000001047 +B1151324527464N00557849EA0000001052 +B1151344527467N00557831EA0000001054 +B1151364527476N00557822EA0000001056 +B1151384527484N00557820EA0000001059 +B1151404527490N00557825EA0000001064 +B1151424527491N00557836EA0000001068 +B1151444527483N00557846EA0000001072 +B1151464527470N00557843EA0000001076 +B1151484527463N00557831EA0000001081 +B1151504527461N00557815EA0000001085 +B1151524527465N00557799EA0000001088 +B1151544527473N00557787EA0000001092 +B1151564527482N00557790EA0000001096 +B1151584527484N00557800EA0000001100 +B1152004527472N00557812EA0000001106 +B1152024527460N00557809EA0000001112 +B1152044527453N00557797EA0000001114 +B1152064527448N00557782EA0000001117 +B1152084527450N00557767EA0000001122 +B1152104527457N00557769EA0000001125 +B1152124527462N00557782EA0000001128 +B1152144527451N00557797EA0000001132 +B1152164527438N00557794EA0000001136 +B1152184527429N00557780EA0000001138 +B1152204527426N00557766EA0000001139 +B1152224527434N00557754EA0000001138 +B1152244527444N00557751EA0000001139 +B1152264527451N00557756EA0000001142 +B1152284527455N00557762EA0000001143 +B1152304527460N00557769EA0000001145 +B1152324527466N00557776EA0000001149 +B1152344527473N00557781EA0000001154 +B1152364527480N00557786EA0000001158 +B1152384527489N00557800EA0000001161 +B1152404527491N00557815EA0000001162 +B1152424527480N00557828EA0000001162 +B1152444527466N00557828EA0000001162 +B1152464527459N00557820EA0000001164 +B1152484527460N00557810EA0000001169 +B1152504527465N00557798EA0000001174 +B1152524527474N00557787EA0000001177 +B1152544527484N00557779EA0000001181 +B1152574527494N00557779EA0000001186 +B1152594527502N00557784EA0000001189 +B1153014527508N00557794EA0000001191 +B1153034527514N00557810EA0000001190 +B1153054527516N00557828EA0000001188 +B1153074527508N00557843EA0000001183 +B1153094527494N00557850EA0000001178 +B1153114527480N00557845EA0000001173 +B1153134527471N00557833EA0000001169 +B1153154527469N00557818EA0000001167 +B1153174527470N00557805EA0000001167 +B1153194527474N00557795EA0000001168 +B1153214527481N00557788EA0000001166 +B1153234527488N00557782EA0000001163 +B1153254527491N00557773EA0000001161 +B1153274527490N00557766EA0000001158 +B1153294527485N00557761EA0000001157 +B1153314527481N00557752EA0000001156 +B1153334527477N00557740EA0000001155 +B1153354527473N00557729EA0000001155 +B1153374527470N00557716EA0000001156 +B1153394527467N00557704EA0000001157 +B1153414527465N00557693EA0000001158 +B1153434527461N00557678EA0000001158 +B1153454527456N00557665EA0000001160 +B1153474527452N00557656EA0000001162 +B1153494527448N00557643EA0000001163 +B1153514527448N00557627EA0000001164 +B1153534527456N00557617EA0000001165 +B1153554527465N00557618EA0000001167 +B1153574527468N00557627EA0000001169 +B1153594527461N00557633EA0000001171 +B1154014527452N00557630EA0000001174 +B1154034527436N00557625EA0000001179 +B1154054527434N00557606EA0000001180 +B1154074527441N00557591EA0000001181 +B1154094527451N00557591EA0000001183 +B1154114527456N00557601EA0000001186 +B1154134527455N00557614EA0000001190 +B1154154527453N00557631EA0000001195 +B1154174527453N00557640EA0000001196 +B1154194527452N00557652EA0000001198 +B1154214527448N00557661EA0000001200 +B1154234527441N00557664EA0000001201 +B1154254527430N00557661EA0000001202 +B1154274527421N00557653EA0000001203 +B1154294527413N00557643EA0000001203 +B1154314527409N00557628EA0000001203 +B1154334527411N00557611EA0000001204 +B1154364527419N00557605EA0000001203 +B1154384527428N00557610EA0000001203 +B1154404527431N00557620EA0000001202 +B1154424527429N00557634EA0000001204 +B1154444527425N00557646EA0000001206 +B1154464527422N00557657EA0000001207 +B1154484527419N00557668EA0000001207 +B1154504527416N00557679EA0000001207 +B1154524527416N00557691EA0000001207 +B1154544527416N00557703EA0000001206 +B1154564527413N00557717EA0000001208 +B1154584527410N00557730EA0000001210 +B1155004527408N00557740EA0000001213 +B1155024527407N00557750EA0000001214 +B1155044527406N00557761EA0000001216 +B1155064527407N00557771EA0000001217 +B1155084527410N00557782EA0000001217 +B1155104527412N00557798EA0000001216 +B1155124527403N00557811EA0000001215 +B1155144527393N00557811EA0000001217 +B1155164527383N00557808EA0000001218 +B1155184527372N00557805EA0000001219 +B1155204527362N00557797EA0000001219 +B1155224527358N00557784EA0000001220 +B1155244527360N00557772EA0000001220 +B1155264527369N00557769EA0000001221 +B1155284527376N00557776EA0000001221 +B1155304527370N00557787EA0000001220 +B1155324527357N00557790EA0000001221 +B1155344527346N00557784EA0000001222 +B1155364527339N00557776EA0000001222 +B1155384527334N00557766EA0000001221 +B1155404527330N00557755EA0000001219 +B1155424527319N00557750EA0000001213 +B1155444527311N00557743EA0000001213 +B1155464527301N00557728EA0000001213 +B1155484527295N00557717EA0000001214 +B1155504527292N00557713EA0000001214 +B1155524527280N00557697EA0000001213 +B1155544527274N00557684EA0000001213 +B1155564527269N00557670EA0000001213 +B1155584527261N00557658EA0000001214 +B1156004527254N00557647EA0000001215 +B1156024527246N00557637EA0000001216 +B1156044527238N00557627EA0000001216 +B1156064527230N00557615EA0000001215 +B1156084527223N00557602EA0000001213 +B1156104527215N00557591EA0000001210 +B1156124527205N00557579EA0000001207 +B1156154527196N00557566EA0000001205 +B1156174527188N00557554EA0000001201 +B1156194527180N00557539EA0000001197 +B1156214527170N00557525EA0000001193 +B1156234527159N00557513EA0000001191 +B1156254527149N00557502EA0000001188 +B1156274527140N00557490EA0000001183 +B1156294527130N00557477EA0000001179 +B1156314527120N00557464EA0000001176 +B1156334527113N00557451EA0000001173 +B1156354527107N00557436EA0000001168 +B1156374527109N00557417EA0000001163 +B1156394527119N00557408EA0000001158 +B1156414527130N00557410EA0000001153 +B1156434527138N00557418EA0000001149 +B1156454527146N00557426EA0000001145 +B1156474527153N00557436EA0000001141 +B1156494527160N00557447EA0000001136 +B1156514527169N00557459EA0000001131 +B1156534527178N00557472EA0000001127 +B1156554527184N00557486EA0000001124 +B1156574527190N00557498EA0000001119 +B1156594527198N00557511EA0000001114 +B1157014527207N00557526EA0000001108 +B1157034527213N00557541EA0000001104 +B1157054527219N00557553EA0000001101 +B1157074527223N00557562EA0000001099 +B1157094527226N00557570EA0000001098 +B1157114527234N00557579EA0000001097 +B1157134527240N00557589EA0000001097 +B1157154527245N00557598EA0000001098 +B1157174527248N00557607EA0000001098 +B1157194527248N00557619EA0000001097 +B1157214527248N00557633EA0000001097 +B1157234527250N00557639EA0000001098 +B1157254527257N00557640EA0000001099 +B1157274527264N00557646EA0000001102 +B1157294527266N00557655EA0000001102 +B1157314527265N00557665EA0000001101 +B1157334527263N00557670EA0000001101 +B1157354527248N00557678EA0000001100 +B1157374527234N00557674EA0000001100 +B1157394527222N00557663EA0000001101 +B1157414527215N00557648EA0000001101 +B1157434527216N00557628EA0000001100 +B1157454527224N00557613EA0000001101 +B1157474527231N00557602EA0000001102 +B1157494527237N00557592EA0000001103 +B1157514527243N00557583EA0000001104 +B1157544527246N00557571EA0000001104 +B1157564527245N00557552EA0000001104 +B1157584527242N00557536EA0000001105 +B1158004527234N00557529EA0000001105 +B1158024527224N00557526EA0000001102 +B1158044527214N00557531EA0000001099 +B1158064527205N00557538EA0000001097 +B1158084527195N00557542EA0000001096 +B1158104527186N00557549EA0000001094 +B1158124527178N00557555EA0000001093 +B1158144527172N00557560EA0000001091 +B1158164527165N00557568EA0000001088 +B1158184527157N00557577EA0000001086 +B1158204527147N00557585EA0000001085 +B1158224527140N00557592EA0000001084 +B1158244527135N00557599EA0000001081 +B1158264527127N00557607EA0000001079 +B1158284527118N00557613EA0000001077 +B1158304527111N00557623EA0000001073 +B1158324527101N00557635EA0000001070 +B1158344527090N00557646EA0000001069 +B1158364527081N00557656EA0000001069 +B1158384527073N00557665EA0000001071 +B1158404527068N00557671EA0000001071 +B1158424527064N00557678EA0000001071 +B1158444527059N00557684EA0000001071 +B1158464527055N00557690EA0000001073 +B1158484527053N00557695EA0000001074 +B1158504527053N00557702EA0000001075 +B1158524527058N00557708EA0000001075 +B1158544527067N00557710EA0000001074 +B1158564527077N00557706EA0000001073 +B1158584527085N00557688EA0000001073 +B1159004527087N00557670EA0000001073 +B1159024527081N00557659EA0000001073 +B1159044527073N00557657EA0000001072 +B1159064527064N00557660EA0000001072 +B1159084527057N00557660EA0000001073 +B1159104527049N00557658EA0000001072 +B1159124527036N00557660EA0000001071 +B1159144527034N00557663EA0000001070 +B1159164527029N00557672EA0000001069 +B1159184527019N00557686EA0000001069 +B1159204527014N00557695EA0000001070 +B1159224527010N00557703EA0000001069 +B1159244527004N00557714EA0000001068 +B1159264526997N00557722EA0000001068 +B1159284526991N00557730EA0000001068 +B1159304526985N00557740EA0000001067 +B1159324526978N00557749EA0000001068 +B1159354526975N00557756EA0000001069 +B1159374526970N00557763EA0000001069 +B1159394526964N00557770EA0000001068 +B1159414526956N00557774EA0000001068 +B1159434526949N00557780EA0000001067 +B1159454526942N00557789EA0000001067 +B1159474526935N00557796EA0000001067 +B1159494526928N00557803EA0000001066 +B1159514526920N00557810EA0000001063 +B1159534526911N00557814EA0000001061 +B1159554526903N00557820EA0000001059 +B1159574526896N00557827EA0000001056 +B1159594526888N00557834EA0000001053 +B1200014526882N00557840EA0000001051 +B1200034526875N00557847EA0000001048 +B1200054526865N00557855EA0000001046 +B1200074526855N00557859EA0000001045 +B1200094526846N00557861EA0000001045 +B1200114526835N00557863EA0000001044 +B1200134526823N00557865EA0000001044 +B1200154526812N00557866EA0000001044 +B1200174526803N00557866EA0000001044 +B1200194526792N00557867EA0000001042 +B1200214526778N00557866EA0000001040 +B1200234526768N00557867EA0000001038 +B1200254526757N00557869EA0000001036 +B1200274526744N00557868EA0000001033 +B1200294526733N00557868EA0000001031 +B1200314526723N00557870EA0000001029 +B1200334526712N00557869EA0000001027 +B1200354526700N00557870EA0000001025 +B1200374526689N00557871EA0000001023 +B1200394526678N00557872EA0000001021 +B1200414526666N00557872EA0000001018 +B1200434526655N00557869EA0000001017 +B1200454526645N00557863EA0000001016 +B1200474526635N00557858EA0000001016 +B1200494526625N00557856EA0000001018 +B1200514526611N00557852EA0000001024 +B1200534526603N00557841EA0000001027 +B1200554526600N00557826EA0000001031 +B1200574526605N00557815EA0000001035 +B1200594526614N00557814EA0000001039 +B1201014526622N00557815EA0000001045 +B1201034526630N00557820EA0000001049 +B1201054526635N00557830EA0000001053 +B1201074526633N00557837EA0000001056 +B1201094526627N00557844EA0000001058 +B1201124526620N00557849EA0000001060 +B1201144526610N00557847EA0000001063 +B1201164526601N00557836EA0000001065 +B1201184526596N00557822EA0000001070 +B1201204526592N00557811EA0000001075 +B1201224526588N00557802EA0000001080 +B1201244526586N00557791EA0000001084 +B1201264526592N00557782EA0000001087 +B1201284526602N00557782EA0000001090 +B1201304526607N00557795EA0000001090 +B1201324526596N00557807EA0000001093 +B1201344526582N00557802EA0000001095 +B1201364526576N00557794EA0000001098 +B1201384526569N00557787EA0000001101 +B1201404526563N00557776EA0000001103 +B1201424526561N00557769EA0000001105 +B1201444526568N00557753EA0000001107 +B1201464526577N00557755EA0000001109 +B1201484526584N00557762EA0000001112 +B1201504526589N00557767EA0000001114 +B1201524526594N00557769EA0000001116 +B1201544526602N00557766EA0000001116 +B1201564526607N00557757EA0000001114 +B1201584526602N00557743EA0000001114 +B1202004526593N00557729EA0000001111 +B1202024526583N00557718EA0000001108 +B1202044526572N00557716EA0000001104 +B1202064526560N00557722EA0000001101 +B1202084526550N00557729EA0000001102 +B1202104526542N00557734EA0000001101 +B1202124526533N00557738EA0000001099 +B1202144526523N00557740EA0000001100 +B1202164526516N00557742EA0000001102 +B1202184526509N00557739EA0000001101 +B1202204526501N00557732EA0000001101 +B1202224526495N00557718EA0000001102 +B1202244526502N00557700EA0000001101 +B1202264526513N00557694EA0000001102 +B1202284526522N00557706EA0000001105 +B1202304526520N00557711EA0000001106 +B1202324526500N00557714EA0000001110 +B1202344526490N00557703EA0000001112 +B1202364526483N00557691EA0000001115 +B1202384526476N00557681EA0000001115 +B1202404526469N00557673EA0000001115 +B1202424526460N00557672EA0000001114 +B1202444526451N00557676EA0000001113 +B1202464526442N00557678EA0000001111 +B1202484526434N00557682EA0000001108 +B1202504526425N00557688EA0000001104 +B1202534526415N00557693EA0000001101 +B1202554526406N00557699EA0000001097 +B1202574526398N00557704EA0000001092 +B1202594526388N00557709EA0000001088 +B1203014526378N00557715EA0000001085 +B1203034526368N00557719EA0000001081 +B1203054526357N00557724EA0000001076 +B1203074526346N00557729EA0000001073 +B1203094526336N00557733EA0000001069 +B1203114526325N00557736EA0000001063 +B1203134526313N00557740EA0000001056 +B1203154526301N00557746EA0000001049 +B1203174526290N00557752EA0000001041 +B1203194526279N00557760EA0000001033 +B1203214526268N00557769EA0000001026 +B1203234526257N00557778EA0000001020 +B1203254526245N00557786EA0000001015 +B1203274526235N00557793EA0000001010 +B1203294526223N00557799EA0000001005 +B1203314526211N00557805EA0000001002 +B1203334526200N00557811EA0000000999 +B1203354526190N00557816EA0000000998 +B1203374526181N00557818EA0000000999 +B1203394526172N00557819EA0000001000 +B1203414526159N00557819EA0000001001 +B1203434526146N00557818EA0000001001 +B1203454526133N00557818EA0000001002 +B1203474526122N00557819EA0000001002 +B1203494526110N00557819EA0000001002 +B1203514526097N00557818EA0000001000 +B1203534526084N00557815EA0000000998 +B1203554526071N00557815EA0000000997 +B1203574526059N00557814EA0000000995 +B1203594526047N00557812EA0000000993 +B1204014526034N00557811EA0000000992 +B1204034526022N00557813EA0000000991 +B1204054526010N00557815EA0000000990 +B1204074525990N00557819EA0000000987 +B1204094525978N00557823EA0000000986 +B1204114525972N00557824EA0000000985 +B1204134525960N00557827EA0000000982 +B1204154525943N00557834EA0000000978 +B1204174525932N00557840EA0000000976 +B1204194525923N00557847EA0000000973 +B1204214525913N00557854EA0000000969 +B1204234525903N00557863EA0000000966 +B1204254525894N00557872EA0000000964 +B1204274525886N00557881EA0000000962 +B1204294525879N00557890EA0000000961 +B1204324525871N00557900EA0000000959 +B1204344525861N00557909EA0000000958 +B1204364525855N00557918EA0000000959 +B1204384525851N00557925EA0000000962 +B1204404525845N00557931EA0000000965 +B1204424525838N00557933EA0000000967 +B1204444525830N00557935EA0000000968 +B1204464525821N00557938EA0000000968 +B1204484525814N00557945EA0000000967 +B1204504525810N00557948EA0000000965 +B1204524525794N00557947EA0000000963 +B1204544525782N00557946EA0000000960 +B1204564525771N00557945EA0000000958 +B1204584525760N00557943EA0000000956 +B1205004525748N00557942EA0000000956 +B1205024525737N00557940EA0000000957 +B1205044525726N00557938EA0000000958 +B1205064525715N00557935EA0000000958 +B1205084525704N00557932EA0000000958 +B1205104525692N00557929EA0000000958 +B1205124525682N00557927EA0000000957 +B1205144525671N00557925EA0000000955 +B1205164525658N00557923EA0000000953 +B1205184525647N00557920EA0000000952 +B1205204525635N00557919EA0000000950 +B1205224525622N00557917EA0000000947 +B1205244525610N00557916EA0000000946 +B1205264525599N00557914EA0000000944 +B1205284525586N00557912EA0000000942 +B1205304525573N00557908EA0000000939 +B1205324525560N00557905EA0000000937 +B1205344525546N00557903EA0000000936 +B1205364525531N00557903EA0000000936 +B1205384525518N00557904EA0000000937 +B1205404525507N00557903EA0000000936 +B1205424525494N00557904EA0000000935 +B1205444525475N00557908EA0000000935 +B1205464525469N00557908EA0000000936 +B1205484525458N00557905EA0000000937 +B1205504525443N00557899EA0000000938 +B1205524525432N00557893EA0000000937 +B1205544525419N00557889EA0000000935 +B1205564525408N00557886EA0000000934 +B1205584525398N00557880EA0000000933 +B1206004525385N00557875EA0000000930 +B1206024525370N00557870EA0000000928 +B1206044525357N00557864EA0000000927 +B1206074525345N00557858EA0000000927 +B1206094525333N00557850EA0000000928 +B1206114525321N00557843EA0000000930 +B1206134525312N00557837EA0000000933 +B1206154525306N00557829EA0000000937 +B1206174525299N00557823EA0000000940 +B1206194525291N00557820EA0000000944 +B1206214525285N00557825EA0000000948 +B1206234525284N00557833EA0000000951 +B1206254525291N00557840EA0000000954 +B1206274525300N00557834EA0000000957 +B1206294525308N00557820EA0000000960 +B1206314525308N00557801EA0000000964 +B1206334525303N00557790EA0000000967 +B1206354525297N00557793EA0000000971 +B1206374525298N00557802EA0000000974 +B1206394525304N00557805EA0000000976 +B1206414525312N00557797EA0000000978 +B1206434525316N00557783EA0000000982 +B1206454525313N00557769EA0000000986 +B1206474525308N00557767EA0000000990 +B1206494525307N00557776EA0000000994 +B1206514525314N00557780EA0000000997 +B1206534525322N00557772EA0000000999 +B1206554525326N00557756EA0000001002 +B1206574525322N00557739EA0000001005 +B1206594525315N00557737EA0000001008 +B1207014525309N00557744EA0000001011 +B1207034525304N00557751EA0000001015 +B1207054525298N00557756EA0000001018 +B1207074525294N00557762EA0000001021 +B1207094525295N00557771EA0000001023 +B1207114525302N00557778EA0000001026 +B1207134525311N00557775EA0000001028 +B1207154525318N00557762EA0000001030 +B1207174525315N00557745EA0000001033 +B1207194525304N00557733EA0000001037 +B1207214525298N00557739EA0000001040 +B1207234525297N00557749EA0000001042 +B1207254525302N00557757EA0000001043 +B1207274525312N00557758EA0000001045 +B1207294525322N00557749EA0000001046 +B1207314525328N00557735EA0000001047 +B1207334525327N00557716EA0000001049 +B1207354525323N00557702EA0000001052 +B1207374525316N00557698EA0000001055 +B1207394525311N00557704EA0000001058 +B1207414525311N00557714EA0000001060 +B1207434525316N00557722EA0000001062 +B1207464525325N00557723EA0000001064 +B1207484525335N00557703EA0000001064 +B1207504525333N00557681EA0000001070 +B1207524525327N00557669EA0000001075 +B1207544525320N00557666EA0000001079 +B1207564525312N00557669EA0000001081 +B1207584525307N00557683EA0000001084 +B1208004525313N00557694EA0000001088 +B1208024525320N00557698EA0000001092 +B1208044525329N00557697EA0000001094 +B1208064525338N00557690EA0000001096 +B1208084525347N00557669EA0000001098 +B1208104525345N00557651EA0000001100 +B1208124525338N00557646EA0000001103 +B1208144525330N00557649EA0000001110 +B1208164525326N00557656EA0000001113 +B1208184525325N00557665EA0000001116 +B1208204525330N00557675EA0000001119 +B1208224525338N00557680EA0000001122 +B1208244525348N00557675EA0000001124 +B1208264525357N00557661EA0000001126 +B1208284525362N00557645EA0000001128 +B1208304525363N00557627EA0000001129 +B1208324525357N00557610EA0000001130 +B1208344525349N00557602EA0000001131 +B1208364525340N00557602EA0000001132 +B1208384525333N00557603EA0000001135 +B1208404525327N00557608EA0000001138 +B1208424525324N00557618EA0000001140 +B1208444525325N00557628EA0000001143 +B1208464525331N00557632EA0000001146 +B1208484525342N00557632EA0000001148 +B1208504525352N00557622EA0000001149 +B1208524525357N00557607EA0000001151 +B1208544525354N00557589EA0000001153 +B1208564525347N00557573EA0000001155 +B1208584525341N00557567EA0000001159 +B1209004525332N00557565EA0000001162 +B1209024525323N00557568EA0000001165 +B1209044525319N00557584EA0000001171 +B1209064525325N00557594EA0000001174 +B1209084525334N00557596EA0000001177 +B1209104525342N00557589EA0000001179 +B1209124525349N00557573EA0000001181 +B1209144525352N00557555EA0000001183 +B1209164525351N00557539EA0000001187 +B1209184525347N00557528EA0000001192 +B1209204525343N00557516EA0000001197 +B1209234525335N00557506EA0000001201 +B1209254525326N00557504EA0000001205 +B1209274525319N00557508EA0000001209 +B1209294525314N00557516EA0000001212 +B1209314525314N00557525EA0000001216 +B1209334525318N00557533EA0000001219 +B1209354525325N00557534EA0000001222 +B1209374525333N00557528EA0000001224 +B1209394525338N00557516EA0000001227 +B1209414525342N00557503EA0000001230 +B1209434525344N00557488EA0000001234 +B1209454525344N00557474EA0000001239 +B1209474525341N00557464EA0000001243 +B1209494525337N00557455EA0000001246 +B1209514525329N00557453EA0000001248 +B1209534525324N00557461EA0000001251 +B1209554525322N00557471EA0000001255 +B1209574525323N00557480EA0000001259 +B1209594525328N00557485EA0000001264 +B1210014525336N00557483EA0000001268 +B1210034525344N00557473EA0000001273 +B1210054525347N00557460EA0000001277 +B1210074525344N00557447EA0000001281 +B1210094525341N00557433EA0000001284 +B1210114525337N00557421EA0000001286 +B1210134525329N00557416EA0000001289 +B1210154525319N00557418EA0000001292 +B1210174525312N00557423EA0000001296 +B1210194525305N00557429EA0000001299 +B1210214525300N00557439EA0000001302 +B1210234525300N00557449EA0000001304 +B1210254525309N00557451EA0000001306 +B1210274525317N00557442EA0000001308 +B1210294525320N00557426EA0000001311 +B1210314525320N00557410EA0000001314 +B1210334525316N00557397EA0000001318 +B1210354525306N00557381EA0000001322 +B1210374525303N00557377EA0000001323 +B1210394525290N00557376EA0000001326 +B1210414525285N00557382EA0000001328 +B1210434525283N00557391EA0000001324 +B1210454525287N00557399EA0000001325 +B1210474525296N00557399EA0000001326 +B1210494525304N00557388EA0000001326 +B1210514525308N00557371EA0000001327 +B1210534525307N00557355EA0000001331 +B1210554525302N00557344EA0000001334 +B1210584525293N00557334EA0000001336 +B1211004525283N00557331EA0000001337 +B1211024525275N00557338EA0000001339 +B1211044525275N00557345EA0000001340 +B1211064525282N00557346EA0000001342 +B1211084525289N00557335EA0000001344 +B1211104525294N00557318EA0000001345 +B1211124525296N00557301EA0000001346 +B1211144525294N00557285EA0000001347 +B1211164525289N00557272EA0000001348 +B1211184525280N00557264EA0000001347 +B1211204525270N00557265EA0000001345 +B1211224525263N00557272EA0000001343 +B1211244525262N00557283EA0000001341 +B1211264525269N00557288EA0000001339 +B1211284525277N00557285EA0000001337 +B1211304525283N00557274EA0000001335 +B1211324525286N00557257EA0000001333 +B1211344525280N00557240EA0000001332 +B1211364525274N00557226EA0000001331 +B1211384525267N00557210EA0000001328 +B1211404525260N00557194EA0000001326 +B1211424525255N00557176EA0000001323 +B1211444525249N00557157EA0000001320 +B1211464525241N00557142EA0000001319 +B1211484525233N00557128EA0000001317 +B1211504525223N00557115EA0000001315 +B1211524525212N00557107EA0000001312 +B1211544525201N00557101EA0000001307 +B1211564525187N00557097EA0000001301 +B1211584525174N00557095EA0000001296 +B1212004525161N00557093EA0000001292 +B1212024525147N00557092EA0000001286 +B1212044525131N00557090EA0000001282 +B1212064525116N00557086EA0000001276 +B1212084525099N00557082EA0000001272 +B1212104525082N00557079EA0000001268 +B1212124525058N00557073EA0000001263 +B1212144525042N00557068EA0000001259 +B1212164525025N00557064EA0000001255 +B1212184525010N00557058EA0000001251 +B1212204524994N00557051EA0000001246 +B1212224524978N00557045EA0000001241 +B1212244524963N00557038EA0000001237 +B1212264524948N00557034EA0000001231 +B1212284524933N00557032EA0000001226 +B1212304524918N00557029EA0000001221 +B1212324524904N00557028EA0000001215 +B1212344524888N00557027EA0000001211 +B1212374524873N00557025EA0000001207 +B1212394524862N00557024EA0000001205 +B1212414524850N00557021EA0000001202 +B1212434524836N00557019EA0000001201 +B1212454524825N00557019EA0000001201 +B1212474524819N00557021EA0000001204 +B1212494524812N00557020EA0000001205 +B1212514524803N00557021EA0000001208 +B1212534524796N00557022EA0000001213 +B1212554524791N00557027EA0000001216 +B1212574524786N00557035EA0000001220 +B1212594524785N00557046EA0000001224 +B1213014524785N00557046EA0000001228 +B1213034524796N00557062EA0000001231 +B1213054524805N00557058EA0000001235 +B1213074524813N00557049EA0000001239 +B1213094524814N00557036EA0000001242 +B1213114524808N00557024EA0000001245 +B1213134524801N00557016EA0000001249 +B1213154524794N00557009EA0000001252 +B1213174524788N00557003EA0000001255 +B1213194524779N00557003EA0000001257 +B1213214524771N00557009EA0000001259 +B1213234524768N00557021EA0000001261 +B1213254524770N00557031EA0000001264 +B1213274524776N00557037EA0000001266 +B1213294524783N00557038EA0000001267 +B1213314524792N00557035EA0000001269 +B1213334524800N00557030EA0000001273 +B1213354524807N00557024EA0000001276 +B1213374524812N00557014EA0000001278 +B1213394524812N00556999EA0000001278 +B1213414524805N00556985EA0000001281 +B1213434524796N00556983EA0000001282 +B1213454524790N00556991EA0000001284 +B1213474524788N00557002EA0000001288 +B1213494524792N00557011EA0000001291 +B1213514524799N00557014EA0000001293 +B1213534524811N00557007EA0000001295 +B1213554524816N00556995EA0000001296 +B1213574524816N00556980EA0000001296 +B1213594524812N00556966EA0000001299 +B1214014524805N00556957EA0000001300 +B1214034524796N00556953EA0000001302 +B1214054524787N00556952EA0000001306 +B1214074524779N00556950EA0000001310 +B1214094524772N00556951EA0000001312 +B1214114524765N00556956EA0000001314 +B1214134524762N00556967EA0000001316 +B1214154524766N00556978EA0000001317 +B1214184524776N00556981EA0000001318 +B1214204524786N00556976EA0000001319 +B1214224524792N00556964EA0000001321 +B1214244524795N00556951EA0000001321 +B1214264524794N00556934EA0000001322 +B1214284524789N00556918EA0000001325 +B1214304524782N00556908EA0000001328 +B1214324524774N00556902EA0000001330 +B1214344524766N00556902EA0000001330 +B1214364524757N00556908EA0000001331 +B1214384524753N00556917EA0000001334 +B1214404524752N00556921EA0000001334 +B1214424524753N00556935EA0000001334 +B1214444524757N00556946EA0000001334 +B1214464524766N00556950EA0000001333 +B1214484524776N00556944EA0000001332 +B1214504524782N00556927EA0000001331 +B1214524524778N00556910EA0000001331 +B1214544524770N00556899EA0000001334 +B1214564524761N00556891EA0000001333 +B1214584524751N00556884EA0000001334 +B1215004524740N00556880EA0000001335 +B1215024524729N00556877EA0000001336 +B1215044524719N00556871EA0000001336 +B1215064524708N00556867EA0000001334 +B1215084524696N00556861EA0000001331 +B1215104524685N00556853EA0000001329 +B1215124524674N00556847EA0000001326 +B1215144524662N00556842EA0000001323 +B1215164524649N00556838EA0000001319 +B1215184524635N00556834EA0000001317 +B1215204524622N00556829EA0000001315 +B1215224524610N00556823EA0000001312 +B1215244524596N00556817EA0000001309 +B1215264524582N00556810EA0000001306 +B1215284524570N00556803EA0000001303 +B1215304524551N00556795EA0000001298 +B1215324524538N00556791EA0000001293 +B1215344524525N00556785EA0000001289 +B1215364524512N00556780EA0000001284 +B1215384524499N00556775EA0000001278 +B1215404524486N00556770EA0000001272 +B1215424524473N00556767EA0000001267 +B1215444524461N00556762EA0000001260 +B1215464524448N00556756EA0000001253 +B1215484524435N00556752EA0000001247 +B1215504524422N00556748EA0000001241 +B1215524524408N00556741EA0000001235 +B1215554524395N00556735EA0000001230 +B1215574524382N00556728EA0000001224 +B1215594524367N00556718EA0000001217 +B1216014524351N00556710EA0000001210 +B1216034524337N00556706EA0000001205 +B1216054524324N00556701EA0000001200 +B1216074524310N00556694EA0000001195 +B1216094524297N00556687EA0000001191 +B1216114524284N00556680EA0000001187 +B1216134524270N00556673EA0000001182 +B1216154524255N00556666EA0000001178 +B1216174524242N00556658EA0000001175 +B1216194524229N00556651EA0000001172 +B1216214524214N00556645EA0000001168 +B1216234524199N00556639EA0000001164 +B1216254524184N00556634EA0000001160 +B1216274524169N00556628EA0000001156 +B1216294524155N00556624EA0000001153 +B1216314524142N00556619EA0000001152 +B1216334524130N00556616EA0000001151 +B1216354524120N00556616EA0000001151 +B1216374524112N00556614EA0000001152 +B1216394524105N00556612EA0000001154 +B1216414524099N00556611EA0000001155 +B1216434524092N00556608EA0000001156 +B1216454524082N00556602EA0000001155 +B1216474524075N00556598EA0000001156 +B1216494524068N00556598EA0000001158 +B1216514524061N00556599EA0000001160 +B1216534524055N00556600EA0000001164 +B1216554524050N00556600EA0000001168 +B1216574524043N00556597EA0000001171 +B1216594524038N00556586EA0000001173 +B1217014524039N00556571EA0000001175 +B1217034524050N00556564EA0000001177 +B1217054524065N00556566EA0000001180 +B1217074524074N00556575EA0000001184 +B1217094524069N00556588EA0000001190 +B1217114524061N00556585EA0000001194 +B1217134524057N00556574EA0000001199 +B1217154524059N00556560EA0000001203 +B1217174524068N00556549EA0000001207 +B1217194524079N00556548EA0000001211 +B1217214524088N00556554EA0000001215 +B1217234524088N00556563EA0000001219 +B1217254524081N00556565EA0000001222 +B1217274524076N00556553EA0000001226 +B1217294524078N00556540EA0000001231 +B1217314524085N00556533EA0000001235 +B1217344524094N00556531EA0000001241 +B1217364524103N00556537EA0000001246 +B1217384524106N00556550EA0000001251 +B1217404524100N00556559EA0000001255 +B1217424524094N00556557EA0000001260 +B1217444524089N00556545EA0000001264 +B1217464524087N00556532EA0000001269 +B1217484524091N00556521EA0000001274 +B1217504524101N00556515EA0000001278 +B1217524524111N00556517EA0000001282 +B1217544524118N00556528EA0000001286 +B1217564524118N00556541EA0000001289 +B1217584524110N00556546EA0000001292 +B1218004524101N00556540EA0000001296 +B1218024524097N00556526EA0000001299 +B1218044524099N00556513EA0000001302 +B1218064524107N00556505EA0000001306 +B1218084524117N00556507EA0000001310 +B1218104524126N00556517EA0000001313 +B1218124524125N00556529EA0000001317 +B1218144524118N00556533EA0000001321 +B1218164524109N00556528EA0000001323 +B1218184524105N00556515EA0000001326 +B1218204524108N00556502EA0000001327 +B1218224524116N00556495EA0000001330 +B1218244524125N00556493EA0000001334 +B1218264524134N00556490EA0000001338 +B1218284524144N00556492EA0000001341 +B1218304524149N00556501EA0000001344 +B1218324524147N00556507EA0000001347 +B1218344524140N00556502EA0000001349 +B1218364524135N00556490EA0000001351 +B1218384524134N00556477EA0000001354 +B1218404524136N00556463EA0000001356 +B1218424524139N00556449EA0000001354 +B1218444524151N00556444EA0000001355 +B1218464524161N00556451EA0000001355 +B1218484524161N00556465EA0000001356 +B1218504524147N00556468EA0000001355 +B1218524524138N00556460EA0000001357 +B1218544524134N00556446EA0000001360 +B1218564524134N00556433EA0000001362 +B1218584524134N00556420EA0000001364 +B1219004524131N00556408EA0000001365 +B1219024524130N00556395EA0000001367 +B1219044524137N00556382EA0000001368 +B1219064524148N00556379EA0000001369 +B1219084524157N00556383EA0000001370 +B1219104524158N00556392EA0000001370 +B1219124524148N00556394EA0000001369 +B1219154524139N00556385EA0000001369 +B1219174524136N00556372EA0000001371 +B1219194524133N00556361EA0000001374 +B1219214524131N00556348EA0000001377 +B1219234524132N00556334EA0000001378 +B1219254524140N00556326EA0000001379 +B1219274524150N00556328EA0000001380 +B1219294524155N00556338EA0000001381 +B1219314524152N00556346EA0000001381 +B1219334524143N00556344EA0000001382 +B1219354524136N00556331EA0000001382 +B1219374524135N00556315EA0000001383 +B1219394524137N00556300EA0000001385 +B1219414524139N00556283EA0000001386 +B1219434524140N00556266EA0000001388 +B1219454524140N00556249EA0000001389 +B1219474524142N00556233EA0000001389 +B1219494524146N00556219EA0000001389 +B1219514524151N00556205EA0000001387 +B1219534524155N00556188EA0000001384 +B1219554524161N00556170EA0000001381 +B1219574524169N00556154EA0000001379 +B1219594524176N00556139EA0000001379 +B1220014524183N00556125EA0000001380 +B1220034524189N00556110EA0000001381 +B1220054524196N00556096EA0000001383 +B1220074524202N00556084EA0000001384 +B1220094524210N00556076EA0000001385 +B1220114524223N00556076EA0000001383 +B1220134524235N00556089EA0000001382 +B1220154524235N00556104EA0000001380 +B1220174524225N00556108EA0000001378 +B1220194524218N00556096EA0000001376 +B1220214524218N00556080EA0000001376 +B1220234524224N00556069EA0000001376 +B1220254524231N00556059EA0000001373 +B1220274524236N00556046EA0000001372 +B1220294524243N00556024EA0000001369 +B1220314524248N00556008EA0000001366 +B1220334524255N00555991EA0000001362 +B1220354524261N00555974EA0000001359 +B1220374524266N00555957EA0000001356 +B1220394524273N00555939EA0000001352 +B1220414524280N00555921EA0000001351 +B1220434524285N00555905EA0000001349 +B1220454524289N00555888EA0000001346 +B1220474524293N00555870EA0000001344 +B1220494524295N00555850EA0000001343 +B1220514524296N00555832EA0000001343 +B1220544524295N00555816EA0000001341 +B1220564524291N00555802EA0000001338 +B1220584524285N00555788EA0000001338 +B1221004524280N00555778EA0000001337 +B1221024524273N00555770EA0000001334 +B1221044524265N00555759EA0000001330 +B1221064524257N00555748EA0000001328 +B1221084524249N00555737EA0000001326 +B1221104524241N00555728EA0000001323 +B1221124524233N00555719EA0000001320 +B1221144524224N00555710EA0000001318 +B1221164524213N00555700EA0000001317 +B1221184524203N00555691EA0000001318 +B1221204524196N00555682EA0000001321 +B1221224524190N00555672EA0000001323 +B1221244524183N00555666EA0000001325 +B1221264524178N00555666EA0000001325 +B1221284524171N00555670EA0000001324 +B1221304524166N00555676EA0000001324 +B1221324524162N00555684EA0000001323 +B1221344524154N00555688EA0000001322 +B1221364524143N00555683EA0000001322 +B1221384524133N00555675EA0000001324 +B1221404524126N00555667EA0000001327 +B1221424524120N00555657EA0000001328 +B1221444524117N00555643EA0000001328 +B1221464524124N00555629EA0000001329 +B1221484524135N00555628EA0000001329 +B1221504524140N00555643EA0000001330 +B1221524524135N00555653EA0000001331 +B1221544524124N00555649EA0000001332 +B1221564524117N00555636EA0000001332 +B1221584524115N00555618EA0000001333 +B1222004524112N00555602EA0000001332 +B1222024524109N00555585EA0000001330 +B1222044524107N00555565EA0000001329 +B1222064524105N00555547EA0000001328 +B1222084524102N00555530EA0000001328 +B1222104524099N00555502EA0000001328 +B1222124524097N00555486EA0000001329 +B1222144524092N00555471EA0000001329 +B1222164524087N00555455EA0000001329 +B1222184524084N00555439EA0000001331 +B1222204524081N00555425EA0000001333 +B1222224524077N00555414EA0000001338 +B1222244524071N00555409EA0000001339 +B1222264524064N00555413EA0000001340 +B1222284524064N00555425EA0000001341 +B1222314524073N00555434EA0000001342 +B1222334524084N00555435EA0000001344 +B1222354524094N00555430EA0000001346 +B1222374524103N00555417EA0000001346 +B1222394524108N00555398EA0000001348 +B1222414524106N00555382EA0000001351 +B1222434524101N00555373EA0000001355 +B1222454524095N00555364EA0000001357 +B1222474524089N00555363EA0000001358 +B1222494524085N00555370EA0000001359 +B1222514524087N00555381EA0000001360 +B1222534524098N00555383EA0000001361 +B1222554524110N00555376EA0000001362 +B1222574524119N00555361EA0000001362 +B1222594524121N00555342EA0000001362 +B1223014524115N00555328EA0000001362 +B1223034524108N00555320EA0000001363 +B1223054524099N00555315EA0000001362 +B1223074524088N00555314EA0000001362 +B1223094524080N00555311EA0000001362 +B1223114524074N00555304EA0000001364 +B1223134524068N00555299EA0000001366 +B1223154524061N00555298EA0000001367 +B1223174524056N00555303EA0000001368 +B1223194524058N00555312EA0000001369 +B1223214524065N00555318EA0000001370 +B1223234524076N00555318EA0000001370 +B1223254524086N00555319EA0000001370 +B1223274524095N00555325EA0000001370 +B1223294524100N00555336EA0000001371 +B1223314524097N00555346EA0000001371 +B1223334524090N00555347EA0000001372 +B1223354524083N00555339EA0000001374 +B1223374524079N00555328EA0000001376 +B1223394524079N00555315EA0000001378 +B1223414524079N00555302EA0000001379 +B1223434524075N00555292EA0000001379 +B1223454524066N00555287EA0000001379 +B1223474524062N00555294EA0000001380 +B1223494524061N00555304EA0000001380 +B1223514524062N00555315EA0000001379 +B1223534524057N00555324EA0000001380 +B1223554524048N00555326EA0000001382 +B1223574524042N00555315EA0000001383 +B1223594524044N00555298EA0000001384 +B1224014524057N00555288EA0000001384 +B1224034524071N00555292EA0000001384 +B1224054524077N00555305EA0000001383 +B1224074524072N00555316EA0000001385 +B1224104524065N00555320EA0000001390 +B1224124524060N00555326EA0000001392 +B1224144524055N00555334EA0000001397 +B1224164524049N00555339EA0000001402 +B1224184524045N00555338EA0000001405 +B1224204524040N00555331EA0000001407 +B1224224524040N00555321EA0000001409 +B1224244524047N00555310EA0000001411 +B1224264524057N00555310EA0000001413 +B1224284524062N00555320EA0000001414 +B1224304524059N00555328EA0000001416 +B1224324524054N00555330EA0000001419 +B1224344524051N00555325EA0000001422 +B1224364524051N00555315EA0000001424 +B1224384524057N00555305EA0000001427 +B1224404524067N00555300EA0000001428 +B1224424524079N00555310EA0000001430 +B1224444524083N00555325EA0000001431 +B1224464524080N00555334EA0000001432 +B1224484524073N00555333EA0000001433 +B1224504524068N00555331EA0000001436 +B1224524524063N00555329EA0000001438 +B1224544524058N00555325EA0000001440 +B1224564524055N00555316EA0000001442 +B1224584524056N00555306EA0000001443 +B1225004524062N00555295EA0000001444 +B1225024524071N00555289EA0000001445 +B1225044524081N00555296EA0000001446 +B1225064524086N00555307EA0000001447 +B1225084524082N00555316EA0000001447 +B1225104524074N00555315EA0000001448 +B1225124524066N00555313EA0000001448 +B1225144524058N00555308EA0000001447 +B1225164524050N00555299EA0000001446 +B1225184524042N00555290EA0000001446 +B1225204524034N00555285EA0000001447 +B1225224524025N00555283EA0000001448 +B1225244524010N00555282EA0000001447 +B1225264523999N00555276EA0000001445 +B1225284523989N00555270EA0000001442 +B1225304523978N00555263EA0000001438 +B1225324523967N00555254EA0000001434 +B1225344523957N00555245EA0000001431 +B1225364523948N00555237EA0000001428 +B1225384523939N00555227EA0000001425 +B1225404523928N00555217EA0000001421 +B1225424523918N00555207EA0000001418 +B1225454523909N00555197EA0000001417 +B1225474523901N00555186EA0000001415 +B1225494523891N00555173EA0000001412 +B1225514523884N00555161EA0000001411 +B1225534523877N00555150EA0000001410 +B1225554523868N00555141EA0000001410 +B1225574523858N00555133EA0000001411 +B1225594523849N00555127EA0000001413 +B1226014523840N00555122EA0000001416 +B1226034523834N00555117EA0000001419 +B1226054523827N00555112EA0000001421 +B1226074523819N00555112EA0000001422 +B1226094523814N00555120EA0000001423 +B1226114523816N00555131EA0000001423 +B1226134523823N00555138EA0000001424 +B1226154523833N00555133EA0000001424 +B1226174523841N00555118EA0000001424 +B1226194523842N00555102EA0000001426 +B1226214523839N00555089EA0000001427 +B1226234523832N00555079EA0000001429 +B1226254523825N00555071EA0000001431 +B1226274523817N00555066EA0000001432 +B1226294523810N00555064EA0000001435 +B1226314523803N00555068EA0000001437 +B1226334523799N00555076EA0000001440 +B1226354523801N00555085EA0000001442 +B1226374523808N00555091EA0000001443 +B1226394523820N00555084EA0000001445 +B1226414523823N00555067EA0000001445 +B1226434523820N00555049EA0000001446 +B1226454523814N00555038EA0000001448 +B1226474523805N00555034EA0000001449 +B1226494523796N00555032EA0000001452 +B1226514523788N00555030EA0000001456 +B1226534523780N00555029EA0000001459 +B1226554523773N00555028EA0000001461 +B1226574523767N00555032EA0000001463 +B1226594523767N00555045EA0000001465 +B1227014523775N00555053EA0000001466 +B1227034523788N00555045EA0000001469 +B1227054523794N00555029EA0000001471 +B1227074523792N00555013EA0000001473 +B1227094523784N00555007EA0000001475 +B1227114523778N00555009EA0000001477 +B1227134523775N00555018EA0000001479 +B1227154523779N00555027EA0000001480 +B1227174523787N00555032EA0000001482 +B1227194523797N00555027EA0000001484 +B1227214523802N00555012EA0000001485 +B1227244523801N00554994EA0000001486 +B1227264523794N00554983EA0000001487 +B1227284523785N00554980EA0000001489 +B1227304523776N00554978EA0000001492 +B1227324523767N00554979EA0000001495 +B1227344523760N00554987EA0000001499 +B1227364523760N00554999EA0000001502 +B1227384523766N00555012EA0000001505 +B1227404523778N00555018EA0000001508 +B1227424523789N00555010EA0000001511 +B1227444523797N00554994EA0000001514 +B1227464523795N00554979EA0000001517 +B1227484523788N00554970EA0000001519 +B1227504523780N00554964EA0000001522 +B1227524523771N00554961EA0000001525 +B1227544523764N00554956EA0000001529 +B1227564523758N00554953EA0000001533 +B1227584523751N00554959EA0000001536 +B1228004523747N00554971EA0000001538 +B1228024523750N00554984EA0000001540 +B1228044523759N00554996EA0000001540 +B1228064523771N00555000EA0000001541 +B1228084523783N00554992EA0000001541 +B1228104523790N00554977EA0000001543 +B1228124523789N00554963EA0000001544 +B1228144523783N00554956EA0000001547 +B1228164523777N00554959EA0000001549 +B1228184523772N00554967EA0000001550 +B1228204523773N00554978EA0000001550 +B1228224523779N00554990EA0000001551 +B1228244523789N00554993EA0000001551 +B1228264523797N00554985EA0000001551 +B1228284523796N00554973EA0000001552 +B1228304523791N00554963EA0000001555 +B1228324523784N00554958EA0000001557 +B1228344523778N00554958EA0000001558 +B1228364523774N00554965EA0000001560 +B1228384523776N00554976EA0000001562 +B1228404523788N00554982EA0000001565 +B1228424523798N00554980EA0000001568 +B1228444523807N00554972EA0000001570 +B1228464523812N00554958EA0000001573 +B1228484523810N00554943EA0000001575 +B1228504523803N00554935EA0000001576 +B1228524523794N00554941EA0000001579 +B1228544523791N00554953EA0000001582 +B1228564523794N00554965EA0000001585 +B1228584523804N00554972EA0000001588 +B1229004523817N00554971EA0000001591 +B1229034523827N00554962EA0000001594 +B1229054523829N00554946EA0000001596 +B1229074523826N00554938EA0000001598 +B1229094523821N00554941EA0000001601 +B1229114523820N00554952EA0000001603 +B1229134523826N00554964EA0000001606 +B1229154523834N00554971EA0000001609 +B1229174523844N00554967EA0000001611 +B1229194523849N00554955EA0000001613 +B1229214523846N00554939EA0000001616 +B1229234523838N00554938EA0000001619 +B1229254523831N00554946EA0000001623 +B1229274523825N00554959EA0000001626 +B1229294523826N00554974EA0000001629 +B1229314523832N00554982EA0000001632 +B1229334523841N00554981EA0000001634 +B1229354523846N00554969EA0000001637 +B1229374523842N00554955EA0000001639 +B1229394523835N00554948EA0000001642 +B1229414523826N00554948EA0000001645 +B1229434523820N00554954EA0000001647 +B1229454523821N00554966EA0000001650 +B1229474523829N00554975EA0000001652 +B1229494523840N00554973EA0000001655 +B1229514523849N00554960EA0000001657 +B1229534523848N00554940EA0000001659 +B1229554523842N00554929EA0000001661 +B1229574523836N00554936EA0000001665 +B1229594523834N00554946EA0000001670 +B1230014523837N00554957EA0000001673 +B1230034523845N00554967EA0000001677 +B1230054523855N00554965EA0000001679 +B1230074523864N00554952EA0000001682 +B1230094523864N00554936EA0000001684 +B1230114523858N00554927EA0000001686 +B1230134523850N00554932EA0000001689 +B1230154523848N00554937EA0000001694 +B1230174523854N00554961EA0000001698 +B1230194523865N00554966EA0000001700 +B1230214523877N00554959EA0000001702 +B1230234523883N00554946EA0000001703 +B1230254523881N00554933EA0000001704 +B1230274523874N00554926EA0000001707 +B1230294523867N00554920EA0000001711 +B1230314523860N00554915EA0000001716 +B1230334523851N00554915EA0000001720 +B1230354523843N00554921EA0000001724 +B1230374523841N00554931EA0000001729 +B1230394523843N00554942EA0000001732 +B1230424523850N00554952EA0000001734 +B1230444523861N00554954EA0000001734 +B1230464523871N00554944EA0000001735 +B1230484523876N00554929EA0000001735 +B1230504523871N00554913EA0000001736 +B1230524523864N00554906EA0000001738 +B1230544523856N00554900EA0000001739 +B1230564523847N00554893EA0000001741 +B1230584523837N00554890EA0000001744 +B1231004523830N00554888EA0000001749 +B1231024523823N00554883EA0000001753 +B1231044523816N00554881EA0000001757 +B1231064523810N00554887EA0000001759 +B1231084523806N00554899EA0000001762 +B1231104523809N00554911EA0000001763 +B1231124523818N00554920EA0000001764 +B1231144523828N00554920EA0000001765 +B1231164523832N00554907EA0000001766 +B1231184523830N00554893EA0000001769 +B1231204523823N00554888EA0000001772 +B1231224523815N00554891EA0000001775 +B1231244523809N00554900EA0000001776 +B1231264523806N00554912EA0000001777 +B1231284523809N00554924EA0000001776 +B1231304523817N00554932EA0000001774 +B1231324523827N00554930EA0000001773 +B1231344523834N00554922EA0000001771 +B1231364523834N00554908EA0000001769 +B1231384523831N00554896EA0000001768 +B1231404523824N00554889EA0000001769 +B1231424523817N00554881EA0000001771 +B1231444523811N00554870EA0000001773 +B1231464523806N00554860EA0000001777 +B1231484523799N00554856EA0000001782 +B1231504523791N00554851EA0000001787 +B1231524523785N00554839EA0000001791 +B1231544523786N00554823EA0000001795 +B1231564523793N00554811EA0000001801 +B1231584523799N00554821EA0000001805 +B1232004523801N00554835EA0000001810 +B1232024523803N00554846EA0000001814 +B1232044523802N00554857EA0000001817 +B1232064523793N00554863EA0000001819 +B1232084523787N00554856EA0000001820 +B1232104523785N00554844EA0000001821 +B1232124523794N00554841EA0000001822 +B1232144523803N00554849EA0000001824 +B1232164523808N00554862EA0000001827 +B1232194523805N00554874EA0000001829 +B1232214523796N00554876EA0000001831 +B1232234523791N00554864EA0000001833 +B1232254523793N00554850EA0000001835 +B1232274523800N00554846EA0000001838 +B1232294523811N00554851EA0000001840 +B1232314523818N00554860EA0000001844 +B1232334523819N00554872EA0000001846 +B1232354523812N00554879EA0000001848 +B1232374523804N00554875EA0000001850 +B1232394523802N00554863EA0000001851 +B1232414523802N00554863EA0000001854 +B1232434523819N00554859EA0000001856 +B1232454523823N00554870EA0000001858 +B1232474523819N00554883EA0000001860 +B1232494523812N00554887EA0000001862 +B1232514523805N00554878EA0000001863 +B1232534523806N00554864EA0000001864 +B1232554523811N00554857EA0000001866 +B1232574523817N00554864EA0000001868 +B1232594523815N00554876EA0000001870 +B1233014523806N00554881EA0000001871 +B1233034523799N00554874EA0000001872 +B1233054523800N00554863EA0000001872 +B1233074523809N00554856EA0000001875 +B1233094523816N00554850EA0000001879 +B1233114523823N00554844EA0000001882 +B1233134523832N00554843EA0000001884 +B1233154523841N00554850EA0000001886 +B1233174523842N00554863EA0000001888 +B1233194523836N00554873EA0000001889 +B1233214523827N00554869EA0000001891 +B1233234523820N00554860EA0000001894 +B1233254523815N00554847EA0000001896 +B1233274523816N00554834EA0000001898 +B1233294523822N00554826EA0000001900 +B1233314523829N00554828EA0000001902 +B1233334523830N00554848EA0000001905 +B1233354523821N00554858EA0000001907 +B1233374523812N00554855EA0000001909 +B1233394523805N00554846EA0000001913 +B1233414523796N00554832EA0000001915 +B1233434523802N00554821EA0000001919 +B1233454523814N00554822EA0000001922 +B1233474523821N00554839EA0000001925 +B1233494523817N00554859EA0000001929 +B1233514523804N00554864EA0000001931 +B1233534523794N00554851EA0000001933 +B1233564523794N00554837EA0000001936 +B1233584523806N00554833EA0000001941 +B1234004523817N00554839EA0000001946 +B1234024523823N00554854EA0000001951 +B1234044523816N00554867EA0000001954 +B1234064523803N00554868EA0000001957 +B1234084523796N00554857EA0000001959 +B1234104523800N00554842EA0000001961 +B1234124523809N00554837EA0000001966 +B1234144523818N00554845EA0000001970 +B1234164523823N00554863EA0000001974 +B1234184523818N00554877EA0000001977 +B1234204523807N00554881EA0000001979 +B1234224523807N00554881EA0000001981 +B1234244523798N00554856EA0000001983 +B1234264523807N00554849EA0000001986 +B1234284523816N00554859EA0000001988 +B1234304523819N00554881EA0000001993 +B1234324523813N00554892EA0000001996 +B1234344523804N00554892EA0000001997 +B1234364523795N00554888EA0000001996 +B1234384523788N00554880EA0000001999 +B1234404523785N00554868EA0000002001 +B1234424523786N00554855EA0000002004 +B1234444523787N00554844EA0000002009 +B1234464523784N00554836EA0000002015 +B1234484523778N00554829EA0000002019 +B1234504523770N00554827EA0000002023 +B1234524523761N00554833EA0000002029 +B1234544523756N00554845EA0000002033 +B1234564523753N00554862EA0000002038 +B1234584523754N00554879EA0000002043 +B1235004523761N00554892EA0000002046 +B1235024523771N00554896EA0000002051 +B1235044523779N00554889EA0000002056 +B1235064523782N00554877EA0000002060 +B1235084523780N00554866EA0000002065 +B1235104523776N00554858EA0000002073 +B1235124523765N00554850EA0000002079 +B1235144523756N00554848EA0000002085 +B1235164523749N00554857EA0000002090 +B1235184523745N00554870EA0000002095 +B1235204523741N00554885EA0000002099 +B1235224523743N00554902EA0000002102 +B1235244523752N00554915EA0000002106 +B1235264523764N00554914EA0000002109 +B1235284523771N00554906EA0000002113 +B1235304523775N00554894EA0000002120 +B1235324523777N00554884EA0000002127 +B1235354523776N00554875EA0000002133 +B1235374523773N00554866EA0000002138 +B1235394523766N00554858EA0000002142 +B1235414523757N00554853EA0000002147 +B1235434523748N00554857EA0000002152 +B1235454523741N00554867EA0000002157 +B1235474523739N00554882EA0000002161 +B1235494523742N00554898EA0000002164 +B1235514523750N00554909EA0000002168 +B1235534523759N00554910EA0000002172 +B1235554523766N00554904EA0000002176 +B1235574523767N00554894EA0000002182 +B1235594523765N00554884EA0000002186 +B1236014523762N00554875EA0000002191 +B1236034523758N00554866EA0000002196 +B1236054523749N00554860EA0000002201 +B1236074523740N00554863EA0000002206 +B1236094523732N00554873EA0000002212 +B1236114523727N00554886EA0000002218 +B1236134523727N00554901EA0000002223 +B1236154523732N00554916EA0000002228 +B1236174523741N00554925EA0000002232 +B1236194523751N00554926EA0000002237 +B1236214523757N00554920EA0000002241 +B1236234523759N00554911EA0000002244 +B1236254523759N00554901EA0000002246 +B1236274523754N00554891EA0000002250 +B1236294523747N00554884EA0000002254 +B1236314523739N00554882EA0000002258 +B1236334523729N00554884EA0000002263 +B1236354523720N00554884EA0000002268 +B1236374523711N00554880EA0000002271 +B1236394523703N00554877EA0000002274 +B1236414523695N00554874EA0000002277 +B1236434523687N00554871EA0000002278 +B1236454523678N00554865EA0000002278 +B1236474523666N00554859EA0000002279 +B1236494523655N00554854EA0000002281 +B1236514523638N00554848EA0000002281 +B1236534523626N00554843EA0000002283 +B1236554523615N00554838EA0000002286 +B1236574523606N00554834EA0000002288 +B1236594523596N00554830EA0000002288 +B1237014523585N00554825EA0000002290 +B1237034523574N00554820EA0000002292 +B1237054523563N00554817EA0000002295 +B1237074523552N00554812EA0000002296 +B1237094523541N00554807EA0000002298 +B1237114523530N00554803EA0000002300 +B1237144523518N00554802EA0000002300 +B1237164523504N00554800EA0000002301 +B1237184523492N00554797EA0000002302 +B1237204523482N00554792EA0000002302 +B1237224523471N00554789EA0000002300 +B1237244523458N00554784EA0000002298 +B1237264523446N00554779EA0000002298 +B1237284523434N00554775EA0000002297 +B1237304523423N00554769EA0000002296 +B1237324523410N00554762EA0000002293 +B1237344523396N00554756EA0000002291 +B1237364523383N00554748EA0000002290 +B1237384523371N00554740EA0000002289 +B1237404523357N00554732EA0000002288 +B1237424523343N00554724EA0000002288 +B1237444523331N00554716EA0000002288 +B1237464523318N00554710EA0000002287 +B1237484523305N00554702EA0000002285 +B1237504523294N00554695EA0000002285 +B1237524523285N00554690EA0000002286 +B1237544523275N00554684EA0000002285 +B1237564523265N00554677EA0000002286 +B1237584523255N00554671EA0000002287 +B1238004523245N00554668EA0000002287 +B1238024523234N00554662EA0000002286 +B1238044523222N00554656EA0000002285 +B1238064523210N00554651EA0000002284 +B1238084523198N00554644EA0000002282 +B1238104523184N00554636EA0000002281 +B1238124523170N00554630EA0000002278 +B1238144523156N00554623EA0000002274 +B1238164523140N00554614EA0000002271 +B1238184523125N00554611EA0000002269 +B1238204523111N00554605EA0000002265 +B1238224523096N00554596EA0000002263 +B1238244523082N00554589EA0000002260 +B1238264523069N00554582EA0000002256 +B1238284523055N00554574EA0000002251 +B1238304523035N00554564EA0000002245 +B1238324523022N00554559EA0000002243 +B1238344523008N00554553EA0000002239 +B1238364522992N00554544EA0000002234 +B1238384522977N00554534EA0000002231 +B1238404522963N00554527EA0000002227 +B1238424522948N00554521EA0000002222 +B1238444522932N00554513EA0000002215 +B1238464522915N00554506EA0000002210 +B1238484522899N00554498EA0000002206 +B1238504522884N00554489EA0000002204 +B1238534522868N00554480EA0000002203 +B1238554522853N00554471EA0000002203 +B1238574522838N00554463EA0000002205 +B1238594522827N00554457EA0000002208 +B1239014522819N00554451EA0000002210 +B1239034522811N00554446EA0000002210 +B1239054522801N00554440EA0000002210 +B1239074522790N00554434EA0000002211 +B1239094522778N00554429EA0000002213 +B1239114522765N00554425EA0000002216 +B1239134522752N00554420EA0000002219 +B1239154522741N00554415EA0000002223 +B1239174522731N00554409EA0000002226 +B1239194522731N00554409EA0000002228 +B1239214522707N00554396EA0000002229 +B1239234522695N00554390EA0000002231 +B1239254522683N00554385EA0000002233 +B1239274522670N00554380EA0000002234 +B1239294522657N00554376EA0000002234 +B1239314522643N00554371EA0000002233 +B1239334522630N00554368EA0000002232 +B1239354522618N00554362EA0000002231 +B1239374522606N00554357EA0000002229 +B1239394522592N00554349EA0000002226 +B1239414522580N00554342EA0000002225 +B1239434522569N00554335EA0000002224 +B1239454522556N00554330EA0000002223 +B1239474522542N00554326EA0000002221 +B1239494522527N00554322EA0000002221 +B1239514522514N00554320EA0000002221 +B1239534522500N00554318EA0000002220 +B1239554522485N00554315EA0000002219 +B1239574522470N00554310EA0000002219 +B1239594522457N00554306EA0000002220 +B1240014522444N00554302EA0000002220 +B1240034522429N00554295EA0000002219 +B1240054522416N00554288EA0000002220 +B1240074522404N00554281EA0000002221 +B1240094522389N00554274EA0000002222 +B1240114522370N00554263EA0000002226 +B1240134522357N00554258EA0000002228 +B1240154522344N00554255EA0000002228 +B1240174522332N00554251EA0000002227 +B1240194522319N00554247EA0000002226 +B1240214522306N00554244EA0000002226 +B1240234522293N00554239EA0000002227 +B1240254522282N00554235EA0000002231 +B1240274522269N00554231EA0000002234 +B1240294522258N00554227EA0000002239 +B1240314522249N00554223EA0000002243 +B1240344522240N00554218EA0000002246 +B1240364522231N00554212EA0000002247 +B1240384522222N00554206EA0000002249 +B1240404522214N00554199EA0000002251 +B1240424522204N00554193EA0000002253 +B1240444522194N00554186EA0000002255 +B1240464522185N00554182EA0000002256 +B1240484522176N00554177EA0000002256 +B1240504522165N00554171EA0000002254 +B1240524522152N00554164EA0000002251 +B1240544522139N00554156EA0000002250 +B1240564522133N00554153EA0000002247 +B1240584522115N00554148EA0000002243 +B1241004522115N00554148EA0000002237 +B1241024522090N00554137EA0000002231 +B1241044522076N00554133EA0000002227 +B1241064522063N00554128EA0000002223 +B1241084522051N00554123EA0000002219 +B1241104522037N00554118EA0000002214 +B1241124522023N00554108EA0000002210 +B1241144522011N00554102EA0000002208 +B1241164522005N00554105EA0000002207 +B1241184522002N00554104EA0000002209 +B1241204521995N00554100EA0000002210 +B1241224521986N00554095EA0000002213 +B1241244521979N00554089EA0000002218 +B1241264521972N00554084EA0000002220 +B1241284521963N00554078EA0000002222 +B1241304521953N00554072EA0000002225 +B1241324521945N00554069EA0000002228 +B1241344521935N00554063EA0000002230 +B1241364521927N00554056EA0000002231 +B1241384521917N00554050EA0000002231 +B1241404521905N00554041EA0000002230 +B1241424521895N00554033EA0000002231 +B1241444521887N00554028EA0000002232 +B1241464521876N00554022EA0000002232 +B1241484521864N00554012EA0000002233 +B1241504521851N00553999EA0000002241 +B1241524521845N00553992EA0000002249 +B1241544521838N00553983EA0000002258 +B1241564521833N00553975EA0000002265 +B1241584521829N00553966EA0000002271 +B1242004521823N00553957EA0000002278 +B1242024521818N00553949EA0000002284 +B1242044521812N00553940EA0000002291 +B1242064521808N00553934EA0000002297 +B1242084521802N00553928EA0000002301 +B1242104521796N00553919EA0000002304 +B1242124521789N00553911EA0000002306 +B1242154521782N00553900EA0000002308 +B1242174521775N00553887EA0000002310 +B1242194521767N00553875EA0000002314 +B1242214521761N00553865EA0000002319 +B1242234521754N00553856EA0000002322 +B1242254521745N00553844EA0000002327 +B1242274521738N00553836EA0000002334 +B1242294521732N00553832EA0000002339 +B1242314521723N00553828EA0000002342 +B1242334521718N00553825EA0000002345 +B1242354521704N00553819EA0000002348 +B1242374521695N00553814EA0000002349 +B1242394521685N00553806EA0000002350 +B1242414521672N00553796EA0000002348 +B1242434521658N00553785EA0000002348 +B1242454521645N00553775EA0000002350 +B1242474521635N00553768EA0000002352 +B1242494521624N00553760EA0000002352 +B1242514521612N00553750EA0000002354 +B1242534521601N00553741EA0000002357 +B1242554521591N00553731EA0000002360 +B1242574521582N00553719EA0000002365 +B1242594521573N00553709EA0000002370 +B1243014521563N00553699EA0000002377 +B1243034521552N00553687EA0000002384 +B1243054521544N00553682EA0000002393 +B1243074521538N00553686EA0000002403 +B1243094521532N00553689EA0000002409 +B1243114521524N00553684EA0000002414 +B1243134521517N00553675EA0000002419 +B1243154521510N00553667EA0000002422 +B1243174521501N00553662EA0000002424 +B1243194521489N00553654EA0000002424 +B1243214521477N00553643EA0000002426 +B1243234521466N00553632EA0000002425 +B1243254521454N00553620EA0000002423 +B1243274521441N00553606EA0000002423 +B1243294521428N00553595EA0000002425 +B1243314521410N00553581EA0000002426 +B1243334521397N00553573EA0000002424 +B1243354521381N00553564EA0000002424 +B1243374521368N00553558EA0000002426 +B1243394521359N00553553EA0000002428 +B1243414521349N00553546EA0000002427 +B1243434521336N00553537EA0000002425 +B1243454521326N00553531EA0000002424 +B1243474521318N00553526EA0000002421 +B1243494521309N00553522EA0000002418 +B1243514521298N00553515EA0000002411 +B1243544521287N00553507EA0000002403 +B1243564521274N00553501EA0000002397 +B1243584521262N00553493EA0000002393 +B1244004521251N00553484EA0000002389 +B1244024521239N00553476EA0000002385 +B1244044521228N00553466EA0000002381 +B1244064521216N00553456EA0000002377 +B1244084521204N00553447EA0000002374 +B1244104521193N00553439EA0000002371 +B1244124521183N00553428EA0000002366 +B1244144521170N00553418EA0000002360 +B1244164521157N00553407EA0000002356 +B1244184521144N00553399EA0000002353 +B1244204521132N00553393EA0000002349 +B1244224521121N00553386EA0000002344 +B1244244521108N00553379EA0000002338 +B1244264521095N00553372EA0000002333 +B1244284521084N00553365EA0000002328 +B1244304521072N00553357EA0000002321 +B1244324521060N00553348EA0000002316 +B1244344521048N00553340EA0000002311 +B1244364521036N00553331EA0000002307 +B1244384521025N00553322EA0000002301 +B1244404521013N00553314EA0000002296 +B1244424521001N00553305EA0000002292 +B1244444520989N00553297EA0000002288 +B1244464520978N00553289EA0000002284 +B1244484520965N00553282EA0000002280 +B1244504520952N00553274EA0000002277 +B1244524520940N00553266EA0000002273 +B1244544520928N00553258EA0000002271 +B1244564520915N00553250EA0000002269 +B1244584520904N00553242EA0000002268 +B1245004520894N00553233EA0000002266 +B1245024520882N00553221EA0000002264 +B1245044520870N00553208EA0000002264 +B1245064520859N00553195EA0000002264 +B1245084520848N00553184EA0000002263 +B1245104520831N00553169EA0000002260 +B1245124520819N00553160EA0000002257 +B1245144520807N00553153EA0000002255 +B1245164520794N00553149EA0000002253 +B1245184520783N00553144EA0000002250 +B1245204520772N00553138EA0000002247 +B1245224520762N00553130EA0000002242 +B1245244520751N00553122EA0000002237 +B1245264520741N00553116EA0000002233 +B1245284520730N00553107EA0000002228 +B1245304520720N00553096EA0000002223 +B1245324520709N00553086EA0000002219 +B1245354520699N00553075EA0000002215 +B1245374520688N00553063EA0000002211 +B1245394520677N00553054EA0000002208 +B1245414520666N00553045EA0000002205 +B1245434520656N00553034EA0000002201 +B1245454520643N00553025EA0000002195 +B1245474520630N00553018EA0000002192 +B1245494520620N00553010EA0000002189 +B1245514520612N00553001EA0000002186 +B1245534520602N00552993EA0000002182 +B1245554520591N00552985EA0000002180 +B1245574520581N00552978EA0000002178 +B1245594520581N00552978EA0000002175 +B1246014520560N00552961EA0000002173 +B1246034520548N00552953EA0000002173 +B1246054520536N00552945EA0000002173 +B1246074520525N00552938EA0000002175 +B1246094520512N00552932EA0000002177 +B1246114520503N00552926EA0000002181 +B1246134520499N00552919EA0000002184 +B1246154520492N00552913EA0000002187 +B1246174520484N00552905EA0000002191 +B1246194520478N00552897EA0000002197 +B1246214520472N00552890EA0000002204 +B1246234520464N00552882EA0000002208 +B1246254520452N00552872EA0000002212 +B1246274520440N00552864EA0000002218 +B1246294520430N00552859EA0000002223 +B1246314520419N00552851EA0000002225 +B1246334520405N00552842EA0000002225 +B1246354520394N00552831EA0000002223 +B1246374520386N00552819EA0000002222 +B1246394520377N00552811EA0000002220 +B1246414520367N00552803EA0000002217 +B1246434520357N00552792EA0000002215 +B1246454520345N00552784EA0000002214 +B1246474520333N00552777EA0000002214 +B1246494520326N00552774EA0000002216 +B1246514520300N00552760EA0000002222 +B1246534520288N00552755EA0000002228 +B1246554520277N00552752EA0000002235 +B1246574520269N00552744EA0000002245 +B1246594520260N00552735EA0000002256 +B1247014520251N00552726EA0000002267 +B1247034520242N00552718EA0000002279 +B1247054520236N00552712EA0000002291 +B1247074520228N00552706EA0000002301 +B1247094520219N00552699EA0000002309 +B1247114520210N00552689EA0000002316 +B1247144520201N00552681EA0000002322 +B1247164520192N00552673EA0000002327 +B1247184520181N00552666EA0000002330 +B1247204520169N00552659EA0000002330 +B1247224520158N00552653EA0000002331 +B1247244520151N00552648EA0000002333 +B1247264520146N00552641EA0000002334 +B1247284520137N00552636EA0000002333 +B1247304520128N00552628EA0000002332 +B1247324520120N00552620EA0000002333 +B1247344520111N00552614EA0000002332 +B1247364520101N00552608EA0000002330 +B1247384520090N00552600EA0000002326 +B1247404520079N00552592EA0000002321 +B1247424520067N00552583EA0000002315 +B1247444520055N00552573EA0000002309 +B1247464520047N00552565EA0000002305 +B1247484520040N00552558EA0000002301 +B1247504520029N00552549EA0000002297 +B1247524520018N00552538EA0000002294 +B1247544520009N00552528EA0000002293 +B1247564520001N00552516EA0000002295 +B1247584519993N00552504EA0000002299 +B1248004519986N00552492EA0000002306 +B1248024519980N00552478EA0000002310 +B1248044519973N00552466EA0000002316 +B1248064519964N00552455EA0000002321 +B1248084519955N00552445EA0000002327 +B1248104519945N00552433EA0000002331 +B1248124519934N00552422EA0000002337 +B1248144519923N00552411EA0000002345 +B1248164519915N00552405EA0000002353 +B1248184519907N00552398EA0000002359 +B1248204519897N00552390EA0000002364 +B1248224519886N00552382EA0000002372 +B1248244519879N00552373EA0000002381 +B1248264519873N00552365EA0000002389 +B1248284519866N00552358EA0000002396 +B1248304519851N00552349EA0000002407 +B1248324519843N00552343EA0000002414 +B1248344519832N00552336EA0000002420 +B1248364519819N00552332EA0000002424 +B1248384519807N00552328EA0000002429 +B1248404519798N00552324EA0000002433 +B1248424519787N00552321EA0000002436 +B1248444519776N00552317EA0000002436 +B1248464519765N00552309EA0000002433 +B1248484519756N00552299EA0000002429 +B1248504519748N00552294EA0000002424 +B1248524519738N00552291EA0000002417 +B1248554519726N00552285EA0000002411 +B1248574519716N00552279EA0000002407 +B1248594519707N00552275EA0000002402 +B1249014519696N00552268EA0000002395 +B1249034519682N00552262EA0000002391 +B1249054519671N00552257EA0000002388 +B1249074519664N00552255EA0000002385 +B1249094519653N00552251EA0000002380 +B1249114519641N00552243EA0000002377 +B1249134519629N00552236EA0000002375 +B1249154519618N00552229EA0000002370 +B1249174519605N00552220EA0000002367 +B1249194519594N00552212EA0000002365 +B1249214519583N00552205EA0000002364 +B1249234519571N00552197EA0000002360 +B1249254519558N00552189EA0000002357 +B1249274519545N00552181EA0000002355 +B1249294519534N00552174EA0000002354 +B1249314519523N00552166EA0000002351 +B1249334519512N00552158EA0000002349 +B1249354519500N00552150EA0000002348 +B1249374519489N00552142EA0000002345 +B1249394519478N00552134EA0000002342 +B1249414519466N00552125EA0000002337 +B1249434519455N00552116EA0000002334 +B1249454519444N00552105EA0000002331 +B1249474519433N00552095EA0000002328 +B1249494519421N00552085EA0000002324 +B1249514519408N00552076EA0000002322 +B1249534519396N00552069EA0000002319 +B1249554519383N00552063EA0000002317 +B1249574519369N00552056EA0000002314 +B1249594519356N00552051EA0000002312 +B1250014519343N00552046EA0000002308 +B1250034519330N00552040EA0000002305 +B1250054519316N00552033EA0000002302 +B1250074519303N00552026EA0000002300 +B1250094519291N00552017EA0000002297 +B1250114519273N00552004EA0000002292 +B1250134519260N00551996EA0000002288 +B1250154519248N00551988EA0000002283 +B1250174519234N00551980EA0000002279 +B1250194519221N00551970EA0000002275 +B1250214519208N00551962EA0000002274 +B1250234519196N00551954EA0000002272 +B1250254519183N00551944EA0000002270 +B1250274519171N00551934EA0000002267 +B1250294519158N00551923EA0000002263 +B1250314519143N00551911EA0000002260 +B1250334519130N00551899EA0000002258 +B1250364519118N00551890EA0000002258 +B1250384519105N00551879EA0000002258 +B1250404519093N00551867EA0000002259 +B1250424519082N00551854EA0000002261 +B1250444519070N00551843EA0000002261 +B1250464519056N00551832EA0000002261 +B1250484519042N00551823EA0000002262 +B1250504519029N00551813EA0000002263 +B1250524519015N00551802EA0000002263 +B1250544519002N00551791EA0000002265 +B1250564518990N00551779EA0000002268 +B1250584518980N00551766EA0000002271 +B1251004518971N00551754EA0000002277 +B1251024518962N00551742EA0000002281 +B1251044518953N00551731EA0000002287 +B1251064518945N00551722EA0000002293 +B1251084518937N00551715EA0000002299 +B1251104518928N00551708EA0000002304 +B1251124518919N00551700EA0000002310 +B1251144518911N00551693EA0000002317 +B1251164518904N00551684EA0000002323 +B1251184518897N00551675EA0000002328 +B1251204518889N00551667EA0000002334 +B1251224518882N00551659EA0000002339 +B1251244518874N00551649EA0000002342 +B1251264518864N00551639EA0000002346 +B1251284518854N00551629EA0000002350 +B1251304518845N00551618EA0000002353 +B1251324518835N00551608EA0000002356 +B1251344518825N00551598EA0000002361 +B1251364518816N00551592EA0000002367 +B1251384518811N00551590EA0000002371 +B1251404518802N00551586EA0000002373 +B1251424518793N00551580EA0000002374 +B1251444518783N00551573EA0000002374 +B1251464518771N00551566EA0000002371 +B1251484518761N00551561EA0000002371 +B1251504518752N00551558EA0000002368 +B1251524518739N00551551EA0000002363 +B1251544518730N00551546EA0000002362 +B1251564518723N00551539EA0000002360 +B1251584518716N00551533EA0000002356 +B1252004518706N00551525EA0000002353 +B1252024518696N00551518EA0000002351 +B1252044518688N00551513EA0000002348 +B1252064518679N00551507EA0000002344 +B1252084518667N00551499EA0000002338 +B1252104518655N00551489EA0000002335 +B1252124518644N00551479EA0000002334 +B1252144518634N00551470EA0000002334 +B1252174518623N00551465EA0000002335 +B1252194518614N00551462EA0000002334 +B1252214518603N00551461EA0000002331 +B1252234518591N00551459EA0000002329 +B1252254518580N00551457EA0000002329 +B1252274518569N00551455EA0000002330 +B1252294518558N00551451EA0000002332 +B1252314518550N00551448EA0000002337 +B1252334518544N00551448EA0000002340 +B1252354518535N00551446EA0000002345 +B1252374518528N00551444EA0000002351 +B1252394518528N00551444EA0000002356 +B1252414518515N00551451EA0000002362 +B1252434518509N00551452EA0000002369 +B1252454518506N00551444EA0000002374 +B1252474518510N00551434EA0000002380 +B1252494518522N00551432EA0000002386 +B1252514518534N00551441EA0000002391 +B1252534518537N00551460EA0000002397 +B1252554518531N00551476EA0000002402 +B1252574518522N00551480EA0000002407 +B1252594518515N00551469EA0000002412 +B1253014518515N00551454EA0000002418 +B1253034518525N00551447EA0000002423 +B1253054518536N00551456EA0000002429 +B1253074518542N00551472EA0000002435 +B1253094518538N00551489EA0000002439 +B1253114518528N00551497EA0000002443 +B1253134518520N00551491EA0000002447 +B1253154518518N00551480EA0000002451 +B1253174518528N00551473EA0000002457 +B1253194518539N00551479EA0000002461 +B1253214518544N00551494EA0000002466 +B1253234518540N00551510EA0000002469 +B1253254518532N00551516EA0000002473 +B1253274518523N00551509EA0000002476 +B1253294518513N00551499EA0000002477 +B1253314518497N00551479EA0000002477 +B1253334518488N00551462EA0000002476 +B1253354518476N00551443EA0000002467 +B1253374518465N00551433EA0000002464 +B1253394518456N00551421EA0000002460 +B1253414518447N00551410EA0000002456 +B1253434518436N00551401EA0000002451 +B1253454518426N00551389EA0000002448 +B1253474518418N00551378EA0000002446 +B1253494518410N00551367EA0000002443 +B1253514518402N00551356EA0000002441 +B1253544518393N00551343EA0000002439 +B1253564518385N00551332EA0000002438 +B1253584518377N00551321EA0000002439 +B1254004518369N00551308EA0000002438 +B1254024518360N00551295EA0000002438 +B1254044518351N00551281EA0000002439 +B1254064518344N00551267EA0000002439 +B1254084518336N00551253EA0000002438 +B1254104518325N00551239EA0000002438 +B1254124518315N00551225EA0000002438 +B1254144518306N00551212EA0000002437 +B1254164518295N00551198EA0000002436 +B1254184518285N00551184EA0000002436 +B1254204518275N00551171EA0000002435 +B1254224518266N00551158EA0000002433 +B1254244518256N00551143EA0000002431 +B1254264518246N00551129EA0000002429 +B1254284518236N00551115EA0000002429 +B1254304518229N00551101EA0000002427 +B1254324518221N00551087EA0000002425 +B1254344518212N00551074EA0000002424 +B1254364518205N00551060EA0000002423 +B1254384518198N00551046EA0000002422 +B1254404518191N00551033EA0000002421 +B1254424518183N00551020EA0000002420 +B1254444518177N00551006EA0000002419 +B1254464518169N00550993EA0000002417 +B1254484518161N00550978EA0000002413 +B1254504518151N00550962EA0000002410 +B1254524518142N00550948EA0000002408 +B1254544518133N00550935EA0000002404 +B1254564518123N00550920EA0000002399 +B1254584518112N00550905EA0000002395 +B1255004518102N00550890EA0000002392 +B1255024518091N00550877EA0000002388 +B1255044518081N00550864EA0000002384 +B1255064518071N00550850EA0000002379 +B1255084518059N00550835EA0000002372 +B1255104518043N00550813EA0000002365 +B1255124518035N00550797EA0000002362 +B1255144518029N00550783EA0000002360 +B1255164518027N00550771EA0000002358 +B1255184518023N00550758EA0000002354 +B1255204518017N00550743EA0000002351 +B1255224518011N00550729EA0000002350 +B1255244518005N00550716EA0000002348 +B1255264517999N00550702EA0000002344 +B1255284517992N00550687EA0000002342 +B1255304517986N00550673EA0000002340 +B1255324517981N00550660EA0000002337 +B1255354517975N00550647EA0000002333 +B1255374517968N00550632EA0000002328 +B1255394517961N00550616EA0000002322 +B1255414517953N00550599EA0000002318 +B1255434517946N00550583EA0000002314 +B1255454517939N00550567EA0000002309 +B1255474517932N00550549EA0000002303 +B1255494517924N00550531EA0000002298 +B1255514517917N00550514EA0000002295 +B1255534517910N00550497EA0000002290 +B1255554517904N00550481EA0000002285 +B1255574517895N00550467EA0000002282 +B1255594517889N00550456EA0000002280 +B1256014517884N00550448EA0000002275 +B1256034517877N00550437EA0000002270 +B1256054517870N00550422EA0000002267 +B1256074517866N00550412EA0000002264 +B1256094517862N00550402EA0000002258 +B1256114517856N00550386EA0000002253 +B1256134517852N00550369EA0000002250 +B1256154517850N00550358EA0000002248 +B1256174517847N00550349EA0000002243 +B1256194517841N00550335EA0000002238 +B1256214517832N00550322EA0000002236 +B1256234517824N00550312EA0000002232 +B1256254517815N00550302EA0000002227 +B1256274517806N00550290EA0000002223 +B1256294517798N00550279EA0000002220 +B1256314517790N00550270EA0000002218 +B1256334517780N00550260EA0000002216 +B1256354517769N00550249EA0000002213 +B1256374517759N00550237EA0000002210 +B1256394517750N00550226EA0000002209 +B1256414517741N00550215EA0000002206 +B1256434517729N00550203EA0000002203 +B1256454517720N00550191EA0000002199 +B1256474517711N00550179EA0000002197 +B1256494517702N00550167EA0000002193 +B1256514517685N00550148EA0000002185 +B1256534517673N00550135EA0000002181 +B1256554517662N00550123EA0000002177 +B1256574517650N00550111EA0000002172 +B1256594517638N00550097EA0000002167 +B1257014517627N00550083EA0000002164 +B1257034517616N00550070EA0000002161 +B1257054517604N00550059EA0000002157 +B1257074517592N00550047EA0000002153 +B1257094517580N00550033EA0000002148 +B1257114517567N00550020EA0000002144 +B1257134517556N00550006EA0000002141 +B1257164517544N00549992EA0000002137 +B1257184517531N00549978EA0000002133 +B1257204517520N00549966EA0000002130 +B1257224517508N00549953EA0000002127 +B1257244517496N00549941EA0000002123 +B1257264517485N00549928EA0000002118 +B1257284517474N00549913EA0000002113 +B1257304517463N00549899EA0000002108 +B1257324517452N00549886EA0000002102 +B1257344517440N00549872EA0000002096 +B1257364517428N00549858EA0000002091 +B1257384517422N00549851EA0000002085 +B1257404517404N00549831EA0000002080 +B1257424517392N00549817EA0000002075 +B1257444517380N00549803EA0000002068 +B1257464517367N00549789EA0000002062 +B1257484517354N00549774EA0000002057 +B1257504517342N00549759EA0000002053 +B1257524517330N00549745EA0000002050 +B1257544517318N00549731EA0000002047 +B1257564517306N00549716EA0000002044 +B1257584517295N00549701EA0000002042 +B1258004517283N00549687EA0000002041 +B1258024517271N00549675EA0000002039 +B1258044517257N00549664EA0000002036 +B1258064517246N00549651EA0000002032 +B1258084517235N00549636EA0000002027 +B1258104517222N00549623EA0000002022 +B1258124517209N00549609EA0000002019 +B1258144517198N00549595EA0000002016 +B1258164517185N00549582EA0000002012 +B1258184517172N00549570EA0000002008 +B1258204517160N00549556EA0000002004 +B1258224517149N00549544EA0000002001 +B1258244517139N00549538EA0000002000 +B1258264517131N00549532EA0000001996 +B1258284517122N00549524EA0000001993 +B1258304517112N00549517EA0000001992 +B1258324517096N00549510EA0000001987 +B1258344517086N00549503EA0000001983 +B1258364517076N00549495EA0000001980 +B1258384517066N00549487EA0000001977 +B1258404517057N00549479EA0000001973 +B1258424517047N00549469EA0000001969 +B1258444517038N00549460EA0000001966 +B1258464517029N00549452EA0000001962 +B1258484517020N00549441EA0000001957 +B1258504517010N00549429EA0000001950 +B1258524516998N00549415EA0000001945 +B1258544516989N00549399EA0000001942 +B1258574516980N00549384EA0000001937 +B1258594516972N00549369EA0000001933 +B1259014516965N00549356EA0000001931 +B1259034516958N00549346EA0000001927 +B1259054516949N00549339EA0000001923 +B1259074516939N00549332EA0000001919 +B1259094516927N00549325EA0000001914 +B1259114516915N00549319EA0000001912 +B1259134516904N00549312EA0000001908 +B1259154516898N00549307EA0000001902 +B1259174516877N00549291EA0000001898 +B1259194516864N00549279EA0000001895 +B1259214516858N00549273EA0000001892 +B1259234516840N00549252EA0000001887 +B1259254516826N00549239EA0000001883 +B1259274516814N00549227EA0000001880 +B1259294516807N00549215EA0000001879 +B1259314516799N00549202EA0000001875 +B1259334516788N00549189EA0000001871 +B1259354516775N00549179EA0000001868 +B1259374516762N00549172EA0000001863 +B1259394516750N00549162EA0000001858 +B1259414516738N00549153EA0000001853 +B1259434516729N00549147EA0000001850 +B1259454516725N00549148EA0000001847 +B1259474516719N00549147EA0000001843 +B1259494516710N00549145EA0000001841 +B1259514516703N00549140EA0000001839 +B1259534516699N00549131EA0000001836 +B1259554516692N00549124EA0000001832 +B1259574516684N00549118EA0000001830 +B1259594516678N00549112EA0000001831 +B1300014516672N00549106EA0000001829 +B1300034516664N00549098EA0000001828 +B1300054516655N00549090EA0000001827 +B1300074516646N00549083EA0000001828 +B1300094516639N00549075EA0000001830 +B1300114516631N00549068EA0000001830 +B1300134516618N00549059EA0000001831 +B1300154516612N00549053EA0000001830 +B1300174516603N00549046EA0000001828 +B1300194516593N00549039EA0000001827 +B1300214516584N00549032EA0000001827 +B1300234516577N00549021EA0000001826 +B1300254516570N00549009EA0000001827 +B1300274516563N00548999EA0000001829 +B1300294516556N00548992EA0000001832 +B1300314516550N00548989EA0000001835 +B1300334516543N00548982EA0000001839 +B1300354516537N00548975EA0000001845 +B1300384516534N00548971EA0000001853 +B1300404516531N00548964EA0000001860 +B1300424516531N00548953EA0000001867 +B1300444516540N00548939EA0000001873 +B1300464516554N00548936EA0000001881 +B1300484516565N00548945EA0000001887 +B1300504516569N00548965EA0000001896 +B1300524516564N00548978EA0000001905 +B1300544516556N00548975EA0000001913 +B1300564516552N00548968EA0000001922 +B1300584516551N00548960EA0000001928 +B1301004516552N00548949EA0000001935 +B1301024516560N00548936EA0000001941 +B1301044516576N00548935EA0000001946 +B1301064516585N00548943EA0000001951 +B1301084516583N00548957EA0000001956 +B1301104516576N00548962EA0000001961 +B1301124516573N00548959EA0000001968 +B1301144516569N00548961EA0000001972 +B1301164516567N00548950EA0000001976 +B1301184516563N00548940EA0000001982 +B1301204516559N00548934EA0000001990 +B1301224516554N00548928EA0000001995 +B1301244516547N00548922EA0000002000 +B1301264516538N00548915EA0000002007 +B1301284516535N00548911EA0000002016 +B1301304516535N00548908EA0000002022 +B1301324516532N00548902EA0000002027 +B1301344516525N00548891EA0000002030 +B1301364516522N00548882EA0000002033 +B1301384516518N00548873EA0000002034 +B1301404516511N00548864EA0000002039 +B1301424516506N00548856EA0000002044 +B1301444516502N00548849EA0000002048 +B1301464516496N00548842EA0000002050 +B1301484516489N00548831EA0000002049 +B1301504516480N00548822EA0000002048 +B1301524516471N00548814EA0000002046 +B1301544516459N00548799EA0000002041 +B1301564516450N00548787EA0000002039 +B1301584516442N00548775EA0000002039 +B1302004516434N00548763EA0000002041 +B1302024516422N00548753EA0000002044 +B1302044516412N00548746EA0000002048 +B1302064516408N00548739EA0000002052 +B1302084516403N00548730EA0000002055 +B1302104516395N00548717EA0000002059 +B1302124516388N00548703EA0000002065 +B1302144516383N00548693EA0000002070 +B1302174516376N00548680EA0000002074 +B1302194516367N00548664EA0000002080 +B1302214516359N00548650EA0000002087 +B1302234516351N00548638EA0000002091 +B1302254516341N00548624EA0000002094 +B1302274516331N00548610EA0000002096 +B1302294516320N00548597EA0000002096 +B1302314516310N00548585EA0000002095 +B1302334516301N00548575EA0000002093 +B1302354516291N00548565EA0000002090 +B1302374516281N00548555EA0000002086 +B1302394516272N00548544EA0000002084 +B1302414516264N00548534EA0000002082 +B1302434516258N00548525EA0000002079 +B1302454516250N00548516EA0000002074 +B1302474516242N00548506EA0000002071 +B1302494516234N00548498EA0000002067 +B1302514516224N00548489EA0000002063 +B1302534516215N00548478EA0000002059 +B1302554516207N00548469EA0000002055 +B1302574516199N00548458EA0000002050 +B1302594516188N00548445EA0000002044 +B1303014516178N00548431EA0000002040 +B1303034516169N00548417EA0000002038 +B1303054516161N00548405EA0000002034 +B1303074516151N00548395EA0000002029 +B1303094516141N00548383EA0000002026 +B1303114516133N00548372EA0000002025 +B1303134516126N00548364EA0000002022 +B1303154516118N00548355EA0000002018 +B1303174516109N00548344EA0000002013 +B1303194516099N00548335EA0000002008 +B1303214516089N00548328EA0000002002 +B1303234516078N00548320EA0000001997 +B1303254516068N00548311EA0000001991 +B1303274516058N00548300EA0000001985 +B1303294516049N00548290EA0000001980 +B1303314516038N00548281EA0000001973 +B1303334516022N00548261EA0000001963 +B1303354516012N00548247EA0000001958 +B1303374516002N00548232EA0000001954 +B1303394515993N00548217EA0000001951 +B1303414515986N00548201EA0000001947 +B1303434515982N00548187EA0000001944 +B1303454515979N00548171EA0000001940 +B1303474515974N00548158EA0000001938 +B1303494515967N00548148EA0000001935 +B1303514515960N00548137EA0000001932 +B1303534515951N00548125EA0000001929 +B1303554515941N00548117EA0000001928 +B1303584515932N00548110EA0000001927 +B1304004515924N00548102EA0000001924 +B1304024515914N00548094EA0000001919 +B1304044515904N00548086EA0000001915 +B1304064515895N00548078EA0000001911 +B1304084515884N00548071EA0000001905 +B1304104515873N00548058EA0000001898 +B1304124515861N00548041EA0000001893 +B1304144515851N00548027EA0000001889 +B1304164515840N00548014EA0000001882 +B1304184515828N00548000EA0000001877 +B1304204515817N00547985EA0000001872 +B1304224515811N00547972EA0000001870 +B1304244515804N00547960EA0000001867 +B1304264515795N00547946EA0000001864 +B1304284515785N00547929EA0000001862 +B1304304515777N00547913EA0000001862 +B1304324515772N00547900EA0000001865 +B1304344515765N00547888EA0000001870 +B1304364515759N00547877EA0000001879 +B1304384515753N00547869EA0000001886 +B1304404515746N00547863EA0000001889 +B1304424515738N00547856EA0000001892 +B1304444515730N00547851EA0000001895 +B1304464515724N00547846EA0000001897 +B1304484515717N00547840EA0000001897 +B1304504515710N00547835EA0000001895 +B1304524515702N00547829EA0000001893 +B1304544515694N00547824EA0000001892 +B1304564515686N00547819EA0000001889 +B1304584515676N00547811EA0000001885 +B1305004515665N00547803EA0000001882 +B1305024515653N00547795EA0000001879 +B1305044515643N00547785EA0000001875 +B1305064515634N00547778EA0000001870 +B1305084515623N00547772EA0000001865 +B1305104515613N00547764EA0000001861 +B1305124515603N00547758EA0000001856 +B1305144515589N00547745EA0000001850 +B1305164515583N00547734EA0000001848 +B1305184515578N00547724EA0000001849 +B1305204515574N00547716EA0000001852 +B1305224515571N00547707EA0000001857 +B1305244515565N00547698EA0000001863 +B1305264515558N00547690EA0000001870 +B1305284515551N00547683EA0000001874 +B1305304515540N00547676EA0000001879 +B1305324515532N00547669EA0000001886 +B1305344515528N00547669EA0000001892 +B1305364515522N00547669EA0000001897 +B1305394515513N00547665EA0000001899 +B1305414515505N00547660EA0000001900 +B1305434515498N00547654EA0000001900 +B1305454515491N00547649EA0000001899 +B1305474515483N00547644EA0000001897 +B1305494515474N00547639EA0000001895 +B1305514515464N00547633EA0000001895 +B1305534515456N00547626EA0000001893 +B1305554515447N00547620EA0000001890 +B1305574515437N00547615EA0000001885 +B1305594515427N00547607EA0000001879 +B1306014515417N00547599EA0000001872 +B1306034515406N00547591EA0000001865 +B1306054515395N00547581EA0000001858 +B1306074515385N00547571EA0000001853 +B1306094515374N00547564EA0000001847 +B1306114515362N00547557EA0000001842 +B1306134515351N00547551EA0000001838 +B1306154515339N00547548EA0000001835 +B1306174515327N00547547EA0000001833 +B1306194515316N00547546EA0000001833 +B1306214515308N00547543EA0000001833 +B1306234515299N00547539EA0000001831 +B1306254515288N00547533EA0000001829 +B1306274515277N00547525EA0000001829 +B1306294515268N00547519EA0000001830 +B1306314515258N00547513EA0000001829 +B1306334515245N00547506EA0000001828 +B1306354515232N00547498EA0000001830 +B1306374515221N00547489EA0000001830 +B1306394515209N00547480EA0000001830 +B1306414515198N00547472EA0000001829 +B1306434515187N00547464EA0000001828 +B1306454515176N00547458EA0000001829 +B1306474515167N00547452EA0000001828 +B1306494515159N00547445EA0000001827 +B1306514515149N00547436EA0000001824 +B1306534515139N00547427EA0000001823 +B1306554515127N00547411EA0000001819 +B1306574515117N00547400EA0000001816 +B1306594515105N00547389EA0000001815 +B1307014515096N00547378EA0000001814 +B1307034515087N00547368EA0000001812 +B1307054515076N00547359EA0000001808 +B1307074515065N00547350EA0000001804 +B1307094515053N00547340EA0000001802 +B1307114515044N00547330EA0000001802 +B1307134515044N00547327EA0000001804 +B1307154515044N00547325EA0000001803 +B1307184515038N00547316EA0000001801 +B1307204515031N00547304EA0000001803 +B1307224515024N00547295EA0000001802 +B1307244515014N00547283EA0000001802 +B1307264515004N00547270EA0000001804 +B1307284514996N00547260EA0000001807 +B1307304514990N00547252EA0000001813 +B1307324514983N00547241EA0000001816 +B1307344514975N00547230EA0000001822 +B1307364514968N00547220EA0000001828 +B1307384514961N00547210EA0000001832 +B1307404514957N00547204EA0000001835 +B1307424514943N00547188EA0000001838 +B1307444514936N00547180EA0000001838 +B1307464514929N00547172EA0000001838 +B1307484514921N00547161EA0000001836 +B1307504514914N00547151EA0000001836 +B1307524514907N00547143EA0000001836 +B1307544514899N00547133EA0000001834 +B1307564514890N00547122EA0000001833 +B1307584514881N00547110EA0000001832 +B1308004514873N00547098EA0000001832 +B1308024514865N00547086EA0000001833 +B1308044514857N00547072EA0000001834 +B1308064514850N00547060EA0000001835 +B1308084514843N00547048EA0000001835 +B1308104514834N00547036EA0000001833 +B1308124514824N00547023EA0000001831 +B1308144514816N00547011EA0000001829 +B1308164514809N00546998EA0000001826 +B1308184514800N00546986EA0000001823 +B1308204514793N00546976EA0000001820 +B1308224514785N00546966EA0000001815 +B1308244514778N00546953EA0000001809 +B1308264514768N00546940EA0000001802 +B1308284514758N00546924EA0000001797 +B1308304514745N00546904EA0000001793 +B1308324514737N00546891EA0000001788 +B1308344514729N00546875EA0000001783 +B1308364514722N00546858EA0000001780 +B1308384514714N00546846EA0000001778 +B1308404514705N00546839EA0000001777 +B1308424514696N00546831EA0000001777 +B1308444514686N00546823EA0000001777 +B1308464514678N00546814EA0000001778 +B1308484514672N00546809EA0000001780 +B1308504514663N00546803EA0000001782 +B1308524514655N00546794EA0000001786 +B1308554514648N00546785EA0000001792 +B1308574514641N00546777EA0000001796 +B1308594514635N00546768EA0000001800 +B1309014514628N00546757EA0000001805 +B1309034514621N00546745EA0000001810 +B1309054514614N00546736EA0000001815 +B1309074514607N00546726EA0000001818 +B1309094514599N00546714EA0000001821 +B1309114514592N00546701EA0000001824 +B1309134514585N00546690EA0000001826 +B1309154514577N00546681EA0000001827 +B1309174514568N00546671EA0000001826 +B1309194514558N00546658EA0000001825 +B1309214514553N00546652EA0000001827 +B1309234514545N00546635EA0000001828 +B1309254514540N00546628EA0000001827 +B1309274514534N00546619EA0000001825 +B1309294514528N00546606EA0000001826 +B1309314514521N00546595EA0000001826 +B1309334514514N00546586EA0000001825 +B1309354514507N00546575EA0000001826 +B1309374514501N00546564EA0000001828 +B1309394514494N00546553EA0000001830 +B1309414514487N00546541EA0000001830 +B1309434514478N00546527EA0000001831 +B1309454514469N00546510EA0000001833 +B1309474514464N00546496EA0000001836 +B1309494514460N00546483EA0000001839 +B1309514514453N00546466EA0000001841 +B1309534514446N00546450EA0000001843 +B1309554514439N00546436EA0000001845 +B1309574514431N00546425EA0000001846 +B1309594514425N00546412EA0000001847 +B1310014514420N00546399EA0000001850 +B1310034514415N00546385EA0000001852 +B1310054514411N00546370EA0000001853 +B1310074514404N00546356EA0000001855 +B1310094514398N00546343EA0000001856 +B1310114514387N00546321EA0000001859 +B1310134514381N00546308EA0000001862 +B1310154514376N00546297EA0000001865 +B1310174514372N00546286EA0000001866 +B1310194514366N00546272EA0000001867 +B1310214514359N00546260EA0000001868 +B1310234514353N00546250EA0000001867 +B1310254514346N00546238EA0000001865 +B1310274514337N00546224EA0000001863 +B1310294514329N00546212EA0000001862 +B1310314514322N00546201EA0000001858 +B1310334514313N00546188EA0000001854 +B1310364514304N00546173EA0000001852 +B1310384514295N00546158EA0000001851 +B1310404514287N00546146EA0000001849 +B1310424514279N00546134EA0000001847 +B1310444514273N00546120EA0000001847 +B1310464514266N00546109EA0000001845 +B1310484514256N00546099EA0000001843 +B1310504514249N00546086EA0000001843 +B1310524514243N00546074EA0000001842 +B1310544514236N00546064EA0000001839 +B1310564514229N00546051EA0000001838 +B1310584514222N00546037EA0000001837 +B1311004514215N00546025EA0000001836 +B1311024514208N00546010EA0000001834 +B1311044514202N00545994EA0000001832 +B1311064514196N00545980EA0000001830 +B1311084514190N00545964EA0000001827 +B1311104514184N00545949EA0000001823 +B1311124514178N00545934EA0000001820 +B1311144514172N00545921EA0000001816 +B1311164514165N00545908EA0000001811 +B1311184514158N00545893EA0000001806 +B1311204514150N00545880EA0000001802 +B1311224514142N00545867EA0000001798 +B1311244514135N00545854EA0000001794 +B1311264514126N00545842EA0000001788 +B1311284514117N00545829EA0000001784 +B1311304514108N00545816EA0000001780 +B1311324514103N00545807EA0000001779 +B1311344514098N00545800EA0000001775 +B1311364514091N00545790EA0000001772 +B1311384514084N00545780EA0000001771 +B1311404514078N00545770EA0000001768 +B1311424514070N00545763EA0000001766 +B1311444514061N00545767EA0000001763 +B1311464514054N00545781EA0000001760 +B1311484514052N00545795EA0000001758 +B1311504514056N00545810EA0000001754 +B1311524514064N00545832EA0000001748 +B1311544514070N00545849EA0000001744 +B1311564514076N00545867EA0000001740 +B1311584514084N00545885EA0000001736 +B1312004514091N00545902EA0000001734 +B1312024514099N00545916EA0000001730 +B1312044514108N00545932EA0000001726 +B1312064514117N00545947EA0000001724 +B1312084514126N00545962EA0000001721 +B1312104514136N00545978EA0000001716 +B1312124514146N00545995EA0000001713 +B1312144514156N00546013EA0000001710 +B1312174514165N00546028EA0000001707 +B1312194514174N00546045EA0000001703 +B1312214514184N00546061EA0000001700 +B1312234514193N00546076EA0000001699 +B1312254514202N00546089EA0000001696 +B1312274514211N00546103EA0000001692 +B1312294514221N00546118EA0000001691 +B1312314514230N00546132EA0000001690 +B1312334514238N00546145EA0000001689 +B1312354514246N00546159EA0000001688 +B1312374514253N00546171EA0000001687 +B1312394514262N00546184EA0000001683 +B1312414514272N00546198EA0000001682 +B1312434514279N00546213EA0000001682 +B1312454514288N00546225EA0000001683 +B1312474514297N00546232EA0000001684 +B1312494514309N00546244EA0000001685 +B1312514514320N00546259EA0000001687 +B1312534514329N00546273EA0000001691 +B1312554514337N00546285EA0000001692 +B1312574514345N00546295EA0000001692 +B1312594514351N00546306EA0000001691 +B1313014514358N00546318EA0000001688 +B1313034514366N00546329EA0000001685 +B1313054514374N00546339EA0000001683 +B1313074514382N00546351EA0000001680 +B1313094514389N00546364EA0000001678 +B1313114514397N00546376EA0000001676 +B1313134514405N00546387EA0000001675 +B1313154514412N00546396EA0000001675 +B1313174514417N00546401EA0000001676 +B1313194514424N00546406EA0000001675 +B1313214514432N00546417EA0000001675 +B1313234514441N00546429EA0000001675 +B1313254514449N00546440EA0000001676 +B1313274514457N00546453EA0000001677 +B1313294514466N00546467EA0000001678 +B1313314514473N00546480EA0000001681 +B1313334514482N00546496EA0000001684 +B1313354514492N00546507EA0000001685 +B1313374514502N00546517EA0000001688 +B1313394514510N00546522EA0000001691 +B1313414514516N00546528EA0000001693 +B1313434514523N00546539EA0000001694 +B1313454514529N00546550EA0000001695 +B1313474514535N00546559EA0000001696 +B1313494514541N00546568EA0000001696 +B1313514514550N00546579EA0000001695 +B1313534514559N00546590EA0000001695 +B1313554514567N00546600EA0000001697 +B1313584514573N00546609EA0000001698 +B1314004514583N00546621EA0000001698 +B1314024514592N00546634EA0000001699 +B1314044514600N00546641EA0000001702 +B1314064514604N00546640EA0000001710 +B1314084514612N00546648EA0000001716 +B1314104514621N00546657EA0000001723 +B1314124514627N00546664EA0000001733 +B1314144514628N00546671EA0000001740 +B1314164514626N00546680EA0000001746 +B1314184514619N00546686EA0000001753 +B1314204514614N00546683EA0000001759 +B1314224514608N00546653EA0000001766 +B1314244514619N00546642EA0000001774 +B1314264514632N00546643EA0000001783 +B1314284514639N00546649EA0000001792 +B1314304514644N00546659EA0000001798 +B1314324514646N00546672EA0000001804 +B1314344514643N00546685EA0000001812 +B1314364514635N00546687EA0000001817 +B1314384514627N00546673EA0000001823 +B1314404514627N00546656EA0000001828 +B1314424514638N00546648EA0000001833 +B1314444514650N00546651EA0000001839 +B1314464514656N00546658EA0000001846 +B1314484514662N00546666EA0000001851 +B1314504514664N00546678EA0000001854 +B1314524514665N00546689EA0000001858 +B1314544514670N00546700EA0000001861 +B1314564514680N00546708EA0000001864 +B1314584514687N00546716EA0000001867 +B1315004514694N00546724EA0000001868 +B1315024514705N00546735EA0000001869 +B1315044514714N00546745EA0000001871 +B1315064514720N00546752EA0000001875 +B1315084514728N00546758EA0000001877 +B1315104514737N00546767EA0000001881 +B1315124514751N00546783EA0000001889 +B1315144514759N00546791EA0000001896 +B1315164514766N00546798EA0000001901 +B1315184514774N00546806EA0000001907 +B1315204514777N00546817EA0000001915 +B1315224514773N00546826EA0000001922 +B1315244514759N00546826EA0000001929 +B1315264514750N00546814EA0000001935 +B1315284514750N00546797EA0000001942 +B1315304514762N00546786EA0000001949 +B1315324514774N00546788EA0000001956 +B1315344514783N00546797EA0000001966 +B1315374514787N00546806EA0000001975 +B1315394514787N00546818EA0000001982 +B1315414514784N00546831EA0000001988 +B1315434514774N00546837EA0000001993 +B1315454514764N00546829EA0000001998 +B1315474514763N00546810EA0000002004 +B1315494514773N00546798EA0000002011 +B1315514514785N00546799EA0000002018 +B1315534514799N00546814EA0000002030 +B1315554514806N00546819EA0000002036 +B1315574514811N00546829EA0000002041 +B1316004514808N00546847EA0000002045 +B1316024514799N00546851EA0000002047 +B1316044514790N00546838EA0000002047 +B1316064514791N00546820EA0000002049 +B1316084514804N00546817EA0000002051 +B1316104514815N00546827EA0000002056 +B1316124514823N00546836EA0000002060 +B1316144514831N00546841EA0000002062 +B1316164514837N00546849EA0000002062 +B1316184514844N00546862EA0000002060 +B1316204514850N00546870EA0000002061 +B1316224514856N00546873EA0000002062 +B1316244514859N00546876EA0000002062 +B1316264514867N00546884EA0000002062 +B1316284514877N00546895EA0000002062 +B1316304514886N00546904EA0000002064 +B1316324514893N00546913EA0000002066 +B1316344514901N00546924EA0000002067 +B1316364514910N00546932EA0000002071 +B1316384514916N00546940EA0000002075 +B1316404514922N00546947EA0000002079 +B1316424514928N00546953EA0000002084 +B1316444514936N00546959EA0000002091 +B1316464514943N00546962EA0000002099 +B1316484514949N00546963EA0000002105 +B1316504514956N00546967EA0000002111 +B1316524514963N00546972EA0000002118 +B1316544514969N00546974EA0000002127 +B1316564514974N00546977EA0000002133 +B1316584514979N00546979EA0000002138 +B1317004514985N00546986EA0000002142 +B1317024514990N00546995EA0000002146 +B1317044514994N00547000EA0000002149 +B1317064515000N00547004EA0000002151 +B1317084515007N00547012EA0000002150 +B1317104515015N00547019EA0000002148 +B1317124515025N00547026EA0000002143 +B1317144515035N00547036EA0000002138 +B1317164515053N00547050EA0000002134 +B1317184515067N00547060EA0000002133 +B1317204515080N00547071EA0000002135 +B1317224515091N00547082EA0000002138 +B1317244515100N00547093EA0000002142 +B1317264515109N00547103EA0000002144 +B1317284515117N00547115EA0000002144 +B1317304515126N00547128EA0000002144 +B1317324515135N00547139EA0000002142 +B1317344515143N00547151EA0000002139 +B1317364515149N00547163EA0000002135 +B1317394515155N00547175EA0000002130 +B1317414515163N00547189EA0000002128 +B1317434515173N00547196EA0000002126 +B1317454515183N00547200EA0000002124 +B1317474515193N00547207EA0000002123 +B1317494515203N00547214EA0000002123 +B1317514515212N00547222EA0000002121 +B1317534515221N00547232EA0000002119 +B1317554515231N00547243EA0000002118 +B1317574515241N00547256EA0000002117 +B1317594515250N00547269EA0000002118 +B1318014515258N00547281EA0000002117 +B1318034515266N00547295EA0000002115 +B1318054515276N00547310EA0000002115 +B1318074515284N00547320EA0000002115 +B1318094515292N00547331EA0000002113 +B1318114515300N00547345EA0000002110 +B1318134515309N00547358EA0000002107 +B1318154515317N00547371EA0000002105 +B1318174515324N00547384EA0000002105 +B1318194515328N00547394EA0000002105 +B1318214515334N00547406EA0000002103 +B1318234515341N00547420EA0000002101 +B1318254515347N00547434EA0000002100 +B1318274515354N00547447EA0000002097 +B1318294515363N00547461EA0000002094 +B1318314515372N00547475EA0000002092 +B1318334515381N00547489EA0000002088 +B1318354515389N00547504EA0000002085 +B1318374515399N00547518EA0000002081 +B1318394515408N00547532EA0000002077 +B1318414515417N00547546EA0000002073 +B1318434515428N00547560EA0000002068 +B1318454515437N00547575EA0000002062 +B1318474515447N00547590EA0000002056 +B1318494515458N00547603EA0000002050 +B1318514515468N00547617EA0000002043 +B1318534515479N00547631EA0000002036 +B1318554515497N00547647EA0000002027 +B1318574515508N00547656EA0000002020 +B1318594515521N00547668EA0000002015 +B1319014515533N00547682EA0000002010 +B1319034515545N00547693EA0000002008 +B1319054515555N00547704EA0000002005 +B1319074515566N00547716EA0000002002 +B1319094515577N00547729EA0000002001 +B1319114515585N00547742EA0000001999 +B1319134515594N00547756EA0000001997 +B1319154515606N00547770EA0000001995 +B1319174515619N00547784EA0000001994 +B1319204515630N00547798EA0000001993 +B1319224515643N00547813EA0000001993 +B1319244515657N00547829EA0000001994 +B1319264515669N00547843EA0000001995 +B1319284515680N00547857EA0000001995 +B1319304515693N00547873EA0000001996 +B1319324515704N00547888EA0000001999 +B1319344515714N00547901EA0000001999 +B1319364515722N00547915EA0000001997 +B1319384515732N00547927EA0000001998 +B1319404515741N00547939EA0000001997 +B1319424515750N00547952EA0000001994 +B1319444515755N00547959EA0000001991 +B1319464515771N00547981EA0000001990 +B1319484515780N00547996EA0000001986 +B1319504515789N00548012EA0000001982 +B1319524515800N00548026EA0000001980 +B1319544515809N00548041EA0000001979 +B1319564515817N00548056EA0000001975 +B1319584515826N00548072EA0000001970 +B1320004515837N00548088EA0000001968 +B1320024515847N00548103EA0000001964 +B1320044515858N00548117EA0000001959 +B1320064515869N00548133EA0000001955 +B1320084515877N00548147EA0000001953 +B1320104515884N00548155EA0000001952 +B1320124515891N00548163EA0000001948 +B1320144515901N00548175EA0000001945 +B1320164515912N00548188EA0000001943 +B1320184515922N00548204EA0000001942 +B1320204515932N00548217EA0000001944 +B1320224515941N00548228EA0000001943 +B1320244515950N00548242EA0000001941 +B1320264515960N00548257EA0000001938 +B1320284515970N00548271EA0000001935 +B1320304515981N00548285EA0000001931 +B1320324515992N00548300EA0000001928 +B1320344516004N00548315EA0000001927 +B1320364516020N00548336EA0000001923 +B1320384516031N00548350EA0000001920 +B1320404516042N00548364EA0000001918 +B1320424516052N00548376EA0000001915 +B1320444516062N00548387EA0000001911 +B1320464516075N00548398EA0000001907 +B1320484516086N00548408EA0000001904 +B1320504516096N00548418EA0000001900 +B1320524516108N00548428EA0000001895 +B1320544516120N00548439EA0000001892 +B1320564516131N00548451EA0000001891 +B1320584516138N00548457EA0000001890 +B1321014516146N00548466EA0000001887 +B1321034516155N00548474EA0000001887 +B1321054516163N00548481EA0000001888 +B1321074516171N00548490EA0000001887 +B1321094516182N00548502EA0000001886 +B1321114516194N00548513EA0000001887 +B1321134516203N00548522EA0000001888 +B1321154516213N00548529EA0000001887 +B1321174516224N00548538EA0000001885 +B1321194516235N00548549EA0000001883 +B1321214516241N00548554EA0000001880 +B1321234516257N00548569EA0000001877 +B1321254516257N00548569EA0000001874 +B1321274516279N00548591EA0000001871 +B1321294516291N00548602EA0000001868 +B1321314516302N00548611EA0000001866 +B1321334516315N00548620EA0000001862 +B1321354516329N00548633EA0000001859 +B1321374516342N00548647EA0000001857 +B1321394516352N00548655EA0000001856 +B1321414516359N00548660EA0000001858 +B1321434516367N00548668EA0000001863 +B1321454516376N00548673EA0000001869 +B1321474516382N00548676EA0000001876 +B1321494516387N00548679EA0000001882 +B1321514516397N00548683EA0000001889 +B1321534516404N00548689EA0000001898 +B1321554516407N00548697EA0000001907 +B1321574516408N00548703EA0000001915 +B1321594516409N00548711EA0000001923 +B1322014516417N00548719EA0000001930 +B1322034516431N00548714EA0000001934 +B1322054516445N00548706EA0000001939 +B1322074516455N00548698EA0000001943 +B1322094516464N00548688EA0000001946 +B1322114516475N00548681EA0000001948 +B1322134516484N00548681EA0000001950 +B1322154516492N00548684EA0000001951 +B1322174516506N00548693EA0000001949 +B1322194516517N00548698EA0000001946 +B1322214516527N00548704EA0000001942 +B1322234516539N00548711EA0000001938 +B1322254516550N00548718EA0000001936 +B1322274516562N00548724EA0000001936 +B1322294516575N00548729EA0000001934 +B1322314516589N00548735EA0000001933 +B1322334516603N00548742EA0000001932 +B1322354516616N00548751EA0000001932 +B1322374516626N00548757EA0000001933 +B1322394516636N00548766EA0000001934 +B1322424516648N00548774EA0000001936 +B1322444516657N00548780EA0000001939 +B1322464516666N00548786EA0000001941 +B1322484516675N00548795EA0000001944 +B1322504516685N00548806EA0000001947 +B1322524516693N00548814EA0000001952 +B1322544516701N00548820EA0000001958 +B1322564516707N00548829EA0000001964 +B1322584516709N00548835EA0000001971 +B1323004516704N00548854EA0000001978 +B1323024516704N00548854EA0000001985 +B1323044516689N00548844EA0000001993 +B1323064516685N00548829EA0000002002 +B1323084516687N00548817EA0000002011 +B1323104516694N00548811EA0000002018 +B1323124516702N00548814EA0000002025 +B1323144516706N00548825EA0000002031 +B1323164516703N00548838EA0000002037 +B1323184516695N00548841EA0000002045 +B1323204516684N00548838EA0000002050 +B1323224516673N00548837EA0000002055 +B1323244516663N00548829EA0000002061 +B1323264516659N00548820EA0000002065 +B1323284516661N00548812EA0000002069 +B1323304516670N00548814EA0000002072 +B1323324516680N00548822EA0000002074 +B1323344516691N00548830EA0000002075 +B1323364516703N00548841EA0000002077 +B1323384516715N00548853EA0000002080 +B1323404516725N00548863EA0000002084 +B1323424516735N00548872EA0000002090 +B1323444516744N00548879EA0000002098 +B1323464516750N00548889EA0000002106 +B1323484516751N00548903EA0000002113 +B1323504516748N00548918EA0000002120 +B1323524516739N00548923EA0000002126 +B1323544516726N00548907EA0000002136 +B1323564516726N00548895EA0000002142 +B1323584516734N00548887EA0000002148 +B1324004516744N00548884EA0000002155 +B1324024516754N00548885EA0000002163 +B1324044516764N00548885EA0000002171 +B1324064516772N00548887EA0000002179 +B1324084516781N00548895EA0000002186 +B1324104516787N00548910EA0000002192 +B1324124516786N00548925EA0000002198 +B1324144516779N00548931EA0000002202 +B1324174516772N00548923EA0000002206 +B1324194516772N00548910EA0000002211 +B1324214516781N00548908EA0000002217 +B1324234516791N00548911EA0000002224 +B1324254516802N00548916EA0000002230 +B1324274516814N00548921EA0000002237 +B1324294516826N00548923EA0000002245 +B1324314516839N00548927EA0000002252 +B1324334516854N00548927EA0000002256 +B1324354516861N00548930EA0000002262 +B1324374516882N00548940EA0000002268 +B1324394516896N00548949EA0000002272 +B1324414516907N00548959EA0000002275 +B1324434516920N00548967EA0000002277 +B1324454516935N00548975EA0000002279 +B1324474516947N00548986EA0000002280 +B1324494516959N00548998EA0000002280 +B1324514516971N00549008EA0000002279 +B1324534516984N00549018EA0000002277 +B1324554516998N00549028EA0000002277 +B1324574517011N00549039EA0000002277 +B1324594517024N00549051EA0000002275 +B1325014517040N00549061EA0000002273 +B1325034517055N00549071EA0000002273 +B1325054517066N00549081EA0000002275 +B1325074517076N00549091EA0000002274 +B1325094517087N00549102EA0000002273 +B1325114517101N00549115EA0000002271 +B1325134517115N00549128EA0000002271 +B1325154517127N00549137EA0000002272 +B1325174517139N00549146EA0000002270 +B1325194517154N00549158EA0000002266 +B1325214517168N00549171EA0000002265 +B1325234517182N00549186EA0000002264 +B1325254517195N00549200EA0000002265 +B1325274517207N00549213EA0000002264 +B1325294517223N00549234EA0000002265 +B1325314517231N00549244EA0000002266 +B1325334517240N00549253EA0000002266 +B1325354517249N00549263EA0000002264 +B1325374517259N00549275EA0000002258 +B1325394517269N00549289EA0000002251 +B1325414517279N00549304EA0000002244 +B1325434517288N00549319EA0000002237 +B1325454517298N00549336EA0000002229 +B1325474517308N00549353EA0000002222 +B1325494517314N00549369EA0000002217 +B1325514517319N00549383EA0000002210 +B1325544517327N00549398EA0000002202 +B1325564517337N00549411EA0000002196 +B1325584517345N00549423EA0000002190 +B1326004517353N00549436EA0000002183 +B1326024517364N00549445EA0000002177 +B1326044517375N00549448EA0000002173 +B1326064517379N00549455EA0000002172 +B1326084517384N00549462EA0000002172 +B1326104517394N00549470EA0000002171 +B1326124517400N00549475EA0000002171 +B1326144517412N00549487EA0000002172 +B1326164517416N00549495EA0000002170 +B1326184517421N00549506EA0000002167 +B1326204517429N00549517EA0000002163 +B1326224517439N00549524EA0000002160 +B1326244517449N00549528EA0000002155 +B1326264517460N00549532EA0000002149 +B1326284517472N00549534EA0000002141 +B1326304517486N00549537EA0000002134 +B1326324517500N00549543EA0000002128 +B1326344517513N00549550EA0000002123 +B1326364517527N00549558EA0000002119 +B1326384517540N00549568EA0000002117 +B1326404517552N00549579EA0000002115 +B1326424517564N00549592EA0000002113 +B1326444517575N00549609EA0000002109 +B1326464517584N00549627EA0000002107 +B1326484517591N00549643EA0000002105 +B1326504517598N00549656EA0000002102 +B1326524517607N00549674EA0000002098 +B1326544517616N00549696EA0000002094 +B1326564517625N00549717EA0000002091 +B1326584517635N00549735EA0000002088 +B1327004517644N00549754EA0000002086 +B1327024517654N00549775EA0000002083 +B1327044517664N00549795EA0000002081 +B1327064517675N00549813EA0000002079 +B1327084517686N00549831EA0000002077 +B1327104517702N00549858EA0000002072 +B1327124517714N00549877EA0000002068 +B1327144517727N00549896EA0000002063 +B1327164517738N00549916EA0000002060 +B1327184517750N00549936EA0000002057 +B1327204517763N00549956EA0000002054 +B1327224517778N00549971EA0000002053 +B1327244517791N00549981EA0000002053 +B1327264517800N00549992EA0000002052 +B1327284517810N00550010EA0000002051 +B1327304517817N00550028EA0000002050 +B1327324517823N00550043EA0000002051 +B1327354517830N00550058EA0000002051 +B1327374517839N00550077EA0000002050 +B1327394517849N00550096EA0000002051 +B1327414517858N00550115EA0000002052 +B1327434517868N00550133EA0000002054 +B1327454517877N00550149EA0000002055 +B1327474517887N00550165EA0000002056 +B1327494517895N00550185EA0000002056 +B1327514517904N00550206EA0000002055 +B1327534517912N00550225EA0000002054 +B1327554517919N00550244EA0000002052 +B1327574517927N00550264EA0000002048 +B1327594517935N00550285EA0000002043 +B1328014517943N00550306EA0000002032 +B1328034517952N00550326EA0000002029 +B1328054517959N00550341EA0000002026 +B1328074517965N00550354EA0000002023 +B1328094517970N00550367EA0000002018 +B1328114517980N00550383EA0000002013 +B1328134517991N00550397EA0000002009 +B1328154518001N00550412EA0000002004 +B1328174518010N00550429EA0000001997 +B1328194518020N00550450EA0000001989 +B1328214518031N00550473EA0000001983 +B1328234518041N00550493EA0000001977 +B1328254518052N00550512EA0000001970 +B1328274518063N00550531EA0000001962 +B1328294518072N00550551EA0000001954 +B1328314518083N00550570EA0000001948 +B1328334518091N00550584EA0000001942 +B1328354518100N00550598EA0000001935 +B1328374518112N00550613EA0000001927 +B1328394518125N00550628EA0000001922 +B1328414518136N00550643EA0000001916 +B1328434518147N00550657EA0000001909 +B1328454518160N00550674EA0000001903 +B1328474518171N00550690EA0000001899 +B1328494518180N00550704EA0000001895 +B1328514518193N00550726EA0000001885 +B1328534518202N00550742EA0000001880 +B1328554518209N00550758EA0000001876 +B1328574518217N00550773EA0000001870 +B1328594518224N00550791EA0000001865 +B1329014518230N00550810EA0000001861 +B1329034518235N00550826EA0000001857 +B1329054518241N00550843EA0000001852 +B1329074518247N00550861EA0000001847 +B1329094518253N00550879EA0000001844 +B1329114518260N00550894EA0000001841 +B1329134518265N00550909EA0000001839 +B1329164518269N00550924EA0000001837 +B1329184518274N00550940EA0000001833 +B1329204518279N00550957EA0000001830 +B1329224518284N00550975EA0000001829 +B1329244518289N00550992EA0000001829 +B1329264518293N00551008EA0000001830 +B1329284518298N00551023EA0000001833 +B1329304518303N00551039EA0000001836 +B1329324518308N00551054EA0000001839 +B1329344518311N00551068EA0000001843 +B1329364518313N00551079EA0000001846 +B1329384518315N00551091EA0000001847 +B1329404518317N00551105EA0000001849 +B1329424518319N00551118EA0000001853 +B1329444518321N00551126EA0000001858 +B1329464518321N00551136EA0000001862 +B1329484518320N00551146EA0000001868 +B1329504518314N00551150EA0000001872 +B1329524518307N00551143EA0000001876 +B1329544518304N00551125EA0000001881 +B1329564518314N00551112EA0000001884 +B1329584518329N00551116EA0000001888 +B1330004518333N00551132EA0000001891 +B1330024518332N00551144EA0000001899 +B1330044518330N00551155EA0000001905 +B1330064518328N00551168EA0000001910 +B1330084518328N00551177EA0000001915 +B1330104518328N00551182EA0000001919 +B1330124518322N00551188EA0000001920 +B1330144518314N00551192EA0000001924 +B1330164518305N00551184EA0000001925 +B1330184518302N00551165EA0000001927 +B1330204518309N00551152EA0000001929 +B1330224518321N00551154EA0000001931 +B1330244518326N00551167EA0000001934 +B1330264518325N00551177EA0000001938 +B1330284518326N00551187EA0000001940 +B1330304518319N00551199EA0000001941 +B1330324518308N00551196EA0000001939 +B1330344518301N00551177EA0000001937 +B1330364518303N00551159EA0000001934 +B1330384518310N00551150EA0000001934 +B1330404518318N00551158EA0000001933 +B1330424518320N00551168EA0000001935 +B1330444518324N00551176EA0000001935 +B1330464518330N00551189EA0000001935 +B1330484518336N00551200EA0000001936 +B1330504518342N00551209EA0000001937 +B1330524518347N00551220EA0000001936 +B1330554518352N00551231EA0000001937 +B1330574518357N00551239EA0000001939 +B1330594518362N00551247EA0000001939 +B1331014518368N00551256EA0000001940 +B1331034518374N00551264EA0000001941 +B1331054518380N00551272EA0000001942 +B1331074518386N00551279EA0000001945 +B1331094518393N00551286EA0000001946 +B1331114518399N00551295EA0000001947 +B1331134518406N00551303EA0000001947 +B1331154518414N00551311EA0000001946 +B1331174518421N00551320EA0000001945 +B1331194518429N00551329EA0000001945 +B1331214518436N00551338EA0000001944 +B1331234518443N00551349EA0000001943 +B1331254518450N00551360EA0000001941 +B1331274518458N00551371EA0000001940 +B1331294518466N00551382EA0000001938 +B1331314518475N00551391EA0000001938 +B1331334518482N00551398EA0000001938 +B1331354518490N00551406EA0000001938 +B1331374518498N00551412EA0000001939 +B1331394518505N00551419EA0000001941 +B1331414518511N00551425EA0000001943 +B1331434518518N00551432EA0000001946 +B1331454518525N00551440EA0000001949 +B1331474518531N00551449EA0000001953 +B1331494518533N00551460EA0000001957 +B1331514518532N00551473EA0000001961 +B1331534518524N00551481EA0000001965 +B1331554518513N00551476EA0000001969 +B1331574518507N00551462EA0000001973 +B1331594518510N00551451EA0000001976 +B1332014518522N00551450EA0000001980 +B1332034518532N00551459EA0000001983 +B1332054518539N00551466EA0000001987 +B1332074518548N00551472EA0000001991 +B1332094518564N00551486EA0000001996 +B1332114518575N00551493EA0000002000 +B1332134518584N00551502EA0000002004 +B1332154518595N00551509EA0000002007 +B1332174518607N00551514EA0000002012 +B1332194518618N00551517EA0000002017 +B1332214518629N00551521EA0000002024 +B1332234518639N00551524EA0000002030 +B1332254518649N00551526EA0000002037 +B1332274518656N00551527EA0000002042 +B1332294518663N00551529EA0000002046 +B1332314518668N00551537EA0000002050 +B1332344518664N00551550EA0000002053 +B1332364518654N00551555EA0000002056 +B1332384518646N00551547EA0000002060 +B1332404518648N00551530EA0000002063 +B1332424518658N00551522EA0000002068 +B1332444518669N00551524EA0000002073 +B1332464518675N00551531EA0000002078 +B1332484518677N00551540EA0000002080 +B1332504518676N00551553EA0000002083 +B1332524518663N00551561EA0000002086 +B1332544518652N00551555EA0000002088 +B1332564518649N00551537EA0000002091 +B1332584518654N00551527EA0000002094 +B1333004518663N00551528EA0000002096 +B1333024518673N00551532EA0000002099 +B1333044518684N00551538EA0000002103 +B1333064518694N00551545EA0000002108 +B1333084518701N00551552EA0000002113 +B1333104518705N00551562EA0000002118 +B1333124518702N00551578EA0000002123 +B1333144518692N00551588EA0000002128 +B1333164518682N00551584EA0000002132 +B1333184518677N00551569EA0000002137 +B1333204518680N00551557EA0000002142 +B1333224518687N00551556EA0000002147 +B1333244518689N00551570EA0000002152 +B1333264518686N00551586EA0000002156 +B1333284518679N00551600EA0000002160 +B1333304518675N00551603EA0000002166 +B1333324518670N00551584EA0000002169 +B1333344518677N00551571EA0000002171 +B1333364518685N00551570EA0000002175 +B1333384518694N00551590EA0000002180 +B1333404518698N00551601EA0000002185 +B1333424518705N00551613EA0000002190 +B1333444518707N00551631EA0000002196 +B1333464518699N00551646EA0000002200 +B1333484518687N00551646EA0000002203 +B1333504518682N00551622EA0000002205 +B1333524518690N00551615EA0000002209 +B1333544518700N00551621EA0000002214 +B1333564518707N00551627EA0000002222 +B1333584518714N00551630EA0000002229 +B1334004518721N00551634EA0000002235 +B1334024518729N00551635EA0000002241 +B1334044518734N00551629EA0000002245 +B1334064518733N00551617EA0000002249 +B1334084518724N00551609EA0000002253 +B1334104518713N00551605EA0000002257 +B1334124518702N00551608EA0000002260 +B1334154518693N00551619EA0000002265 +B1334174518689N00551634EA0000002270 +B1334194518689N00551648EA0000002275 +B1334214518692N00551662EA0000002279 +B1334234518698N00551672EA0000002282 +B1334254518706N00551671EA0000002285 +B1334274518714N00551660EA0000002287 +B1334294518717N00551647EA0000002290 +B1334314518712N00551636EA0000002294 +B1334334518705N00551631EA0000002300 +B1334354518696N00551631EA0000002305 +B1334374518685N00551636EA0000002309 +B1334394518678N00551649EA0000002313 +B1334414518677N00551664EA0000002317 +B1334434518681N00551677EA0000002320 +B1334454518688N00551689EA0000002322 +B1334474518697N00551698EA0000002323 +B1334494518706N00551700EA0000002323 +B1334514518715N00551699EA0000002320 +B1334534518725N00551696EA0000002322 +B1334554518733N00551700EA0000002326 +B1334574518741N00551706EA0000002328 +B1334594518750N00551712EA0000002332 +B1335014518759N00551715EA0000002337 +B1335034518765N00551717EA0000002339 +B1335054518772N00551721EA0000002341 +B1335074518780N00551724EA0000002341 +B1335094518790N00551729EA0000002338 +B1335114518799N00551735EA0000002336 +B1335134518809N00551741EA0000002334 +B1335154518820N00551746EA0000002333 +B1335174518830N00551750EA0000002332 +B1335194518839N00551756EA0000002332 +B1335214518848N00551761EA0000002331 +B1335234518859N00551767EA0000002329 +B1335254518872N00551775EA0000002327 +B1335274518885N00551782EA0000002326 +B1335294518896N00551788EA0000002324 +B1335314518913N00551797EA0000002319 +B1335334518927N00551804EA0000002316 +B1335354518939N00551811EA0000002314 +B1335374518951N00551817EA0000002312 +B1335394518963N00551823EA0000002309 +B1335414518976N00551830EA0000002305 +B1335434518988N00551837EA0000002303 +B1335454519001N00551844EA0000002302 +B1335474519013N00551851EA0000002299 +B1335494519024N00551857EA0000002295 +B1335514519035N00551864EA0000002290 +B1335534519049N00551870EA0000002284 +B1335564519063N00551874EA0000002280 +B1335584519075N00551881EA0000002275 +B1336004519087N00551887EA0000002269 +B1336024519100N00551893EA0000002263 +B1336044519114N00551904EA0000002258 +B1336064519126N00551914EA0000002256 +B1336084519137N00551920EA0000002254 +B1336104519150N00551926EA0000002251 +B1336124519162N00551933EA0000002249 +B1336144519175N00551938EA0000002247 +B1336164519188N00551946EA0000002244 +B1336184519200N00551954EA0000002243 +B1336204519213N00551960EA0000002240 +B1336224519226N00551965EA0000002236 +B1336244519240N00551971EA0000002234 +B1336264519253N00551978EA0000002232 +B1336284519264N00551985EA0000002229 +B1336304519275N00551992EA0000002225 +B1336324519289N00551998EA0000002221 +B1336344519302N00552005EA0000002219 +B1336364519314N00552013EA0000002217 +B1336384519326N00552019EA0000002213 +B1336404519339N00552027EA0000002210 +B1336424519351N00552036EA0000002207 +B1336444519363N00552043EA0000002206 +B1336464519375N00552049EA0000002203 +B1336484519387N00552057EA0000002200 +B1336504519401N00552064EA0000002198 +B1336524519412N00552072EA0000002197 +B1336544519424N00552080EA0000002194 +B1336564519436N00552089EA0000002190 +B1336584519449N00552098EA0000002187 +B1337004519461N00552108EA0000002185 +B1337024519473N00552117EA0000002182 +B1337044519484N00552127EA0000002178 +B1337064519495N00552136EA0000002172 +B1337084519508N00552146EA0000002167 +B1337104519527N00552163EA0000002161 +B1337124519537N00552172EA0000002158 +B1337144519549N00552181EA0000002155 +B1337164519561N00552190EA0000002152 +B1337184519574N00552199EA0000002150 +B1337204519586N00552208EA0000002150 +B1337224519597N00552217EA0000002151 +B1337244519608N00552227EA0000002152 +B1337264519620N00552238EA0000002153 +B1337284519632N00552248EA0000002155 +B1337304519643N00552258EA0000002156 +B1337324519654N00552267EA0000002157 +B1337354519667N00552278EA0000002155 +B1337374519680N00552290EA0000002155 +B1337394519691N00552300EA0000002154 +B1337414519701N00552309EA0000002152 +B1337434519711N00552317EA0000002151 +B1337454519721N00552322EA0000002151 +B1337474519728N00552326EA0000002153 +B1337494519734N00552331EA0000002152 +B1337514519741N00552340EA0000002153 +B1337534519745N00552351EA0000002156 +B1337554519750N00552358EA0000002158 +B1337574519757N00552362EA0000002159 +B1337594519764N00552369EA0000002162 +B1338014519772N00552375EA0000002164 +B1338034519782N00552380EA0000002166 +B1338054519792N00552387EA0000002168 +B1338074519800N00552395EA0000002169 +B1338094519811N00552401EA0000002170 +B1338114519823N00552409EA0000002169 +B1338134519835N00552417EA0000002171 +B1338154519846N00552421EA0000002172 +B1338174519857N00552426EA0000002175 +B1338194519864N00552432EA0000002179 +B1338214519869N00552437EA0000002180 +B1338234519877N00552443EA0000002183 +B1338254519884N00552449EA0000002188 +B1338274519891N00552454EA0000002191 +B1338294519899N00552460EA0000002193 +B1338314519907N00552468EA0000002196 +B1338334519912N00552483EA0000002198 +B1338354519914N00552503EA0000002201 +B1338374519905N00552519EA0000002204 +B1338394519896N00552521EA0000002207 +B1338414519891N00552508EA0000002209 +B1338434519895N00552495EA0000002210 +B1338454519908N00552494EA0000002217 +B1338474519918N00552503EA0000002223 +B1338494519932N00552517EA0000002229 +B1338514519941N00552524EA0000002232 +B1338534519952N00552533EA0000002235 +B1338554519962N00552541EA0000002240 +B1338574519967N00552545EA0000002245 +B1338594519971N00552549EA0000002249 +B1339014519975N00552560EA0000002252 +B1339034519974N00552575EA0000002255 +B1339054519961N00552579EA0000002248 +B1339074519953N00552561EA0000002248 +B1339094519957N00552547EA0000002249 +B1339124519964N00552540EA0000002252 +B1339144519970N00552535EA0000002255 +B1339164519978N00552534EA0000002255 +B1339184519989N00552537EA0000002258 +B1339204519998N00552542EA0000002259 +B1339224520007N00552546EA0000002260 +B1339244520017N00552554EA0000002261 +B1339264520026N00552561EA0000002262 +B1339284520037N00552568EA0000002263 +B1339304520050N00552579EA0000002262 +B1339324520061N00552588EA0000002263 +B1339344520069N00552595EA0000002264 +B1339364520079N00552603EA0000002265 +B1339384520088N00552611EA0000002267 +B1339404520096N00552616EA0000002269 +B1339424520107N00552623EA0000002271 +B1339444520119N00552630EA0000002275 +B1339464520130N00552636EA0000002279 +B1339484520139N00552642EA0000002284 +B1339504520146N00552651EA0000002290 +B1339524520147N00552663EA0000002295 +B1339544520141N00552672EA0000002299 +B1339564520132N00552671EA0000002303 +B1339584520123N00552659EA0000002307 +B1340004520123N00552644EA0000002312 +B1340024520131N00552637EA0000002318 +B1340044520140N00552635EA0000002323 +B1340064520149N00552639EA0000002328 +B1340084520157N00552651EA0000002332 +B1340104520158N00552666EA0000002336 +B1340124520153N00552677EA0000002340 +B1340144520145N00552677EA0000002342 +B1340164520141N00552664EA0000002343 +B1340184520148N00552652EA0000002345 +B1340204520158N00552651EA0000002348 +B1340224520168N00552651EA0000002350 +B1340244520180N00552647EA0000002350 +B1340264520193N00552650EA0000002350 +B1340284520210N00552657EA0000002350 +B1340304520223N00552663EA0000002350 +B1340324520236N00552670EA0000002351 +B1340344520247N00552675EA0000002352 +B1340364520257N00552681EA0000002353 +B1340384520269N00552689EA0000002352 +B1340404520281N00552698EA0000002350 +B1340424520296N00552706EA0000002348 +B1340444520311N00552714EA0000002346 +B1340464520325N00552722EA0000002344 +B1340484520339N00552731EA0000002343 +B1340504520355N00552741EA0000002340 +B1340534520371N00552750EA0000002339 +B1340554520384N00552761EA0000002339 +B1340574520394N00552774EA0000002339 +B1340594520407N00552785EA0000002337 +B1341014520420N00552797EA0000002335 +B1341034520433N00552808EA0000002335 +B1341054520445N00552818EA0000002334 +B1341074520456N00552828EA0000002333 +B1341094520468N00552840EA0000002330 +B1341114520480N00552855EA0000002326 +B1341134520492N00552869EA0000002324 +B1341154520504N00552883EA0000002321 +B1341174520516N00552898EA0000002318 +B1341194520529N00552912EA0000002315 +B1341214520542N00552924EA0000002313 +B1341234520555N00552939EA0000002311 +B1341254520567N00552954EA0000002309 +B1341274520580N00552969EA0000002306 +B1341294520593N00552982EA0000002305 +B1341314520606N00552994EA0000002303 +B1341334520621N00553007EA0000002301 +B1341354520635N00553020EA0000002301 +B1341374520647N00553030EA0000002300 +B1341394520662N00553039EA0000002299 +B1341414520677N00553050EA0000002298 +B1341434520690N00553061EA0000002298 +B1341454520703N00553073EA0000002297 +B1341474520716N00553088EA0000002295 +B1341494520726N00553103EA0000002295 +B1341514520737N00553116EA0000002294 +B1341534520750N00553127EA0000002293 +B1341554520762N00553140EA0000002290 +B1341574520775N00553151EA0000002288 +B1341594520788N00553162EA0000002287 +B1342014520800N00553176EA0000002286 +B1342034520811N00553187EA0000002285 +B1342054520824N00553197EA0000002283 +B1342074520845N00553216EA0000002279 +B1342094520857N00553227EA0000002277 +B1342114520870N00553238EA0000002275 +B1342134520883N00553249EA0000002272 +B1342154520896N00553261EA0000002270 +B1342174520910N00553272EA0000002268 +B1342194520923N00553279EA0000002266 +B1342214520936N00553286EA0000002263 +B1342234520947N00553297EA0000002260 +B1342254520959N00553308EA0000002257 +B1342274520970N00553318EA0000002254 +B1342294520979N00553331EA0000002249 +B1342324520990N00553342EA0000002244 +B1342344521002N00553352EA0000002241 +B1342364521013N00553364EA0000002239 +B1342384521024N00553374EA0000002236 +B1342404521036N00553383EA0000002234 +B1342424521047N00553393EA0000002230 +B1342444521058N00553402EA0000002226 +B1342464521072N00553411EA0000002223 +B1342484521084N00553422EA0000002222 +B1342504521095N00553431EA0000002219 +B1342524521108N00553440EA0000002215 +B1342544521114N00553445EA0000002214 +B1342564521130N00553458EA0000002212 +B1342584521140N00553464EA0000002209 +B1343004521154N00553474EA0000002206 +B1343024521168N00553483EA0000002204 +B1343044521180N00553491EA0000002203 +B1343064521190N00553501EA0000002200 +B1343084521201N00553512EA0000002195 +B1343104521213N00553521EA0000002192 +B1343124521225N00553529EA0000002188 +B1343144521237N00553537EA0000002183 +B1343164521250N00553545EA0000002180 +B1343184521261N00553553EA0000002179 +B1343204521273N00553560EA0000002176 +B1343224521285N00553569EA0000002173 +B1343244521297N00553581EA0000002170 +B1343264521310N00553593EA0000002169 +B1343284521322N00553604EA0000002168 +B1343304521334N00553612EA0000002170 +B1343324521344N00553620EA0000002174 +B1343344521354N00553626EA0000002180 +B1343364521363N00553634EA0000002183 +B1343384521367N00553647EA0000002186 +B1343404521361N00553659EA0000002188 +B1343424521352N00553660EA0000002191 +B1343444521346N00553644EA0000002197 +B1343464521346N00553629EA0000002203 +B1343484521354N00553612EA0000002209 +B1343504521368N00553611EA0000002213 +B1343524521379N00553623EA0000002216 +B1343544521383N00553637EA0000002219 +B1343564521380N00553651EA0000002223 +B1343584521375N00553661EA0000002229 +B1344004521367N00553665EA0000002234 +B1344024521359N00553660EA0000002240 +B1344044521354N00553648EA0000002245 +B1344064521354N00553630EA0000002250 +B1344084521365N00553621EA0000002255 +B1344104521378N00553628EA0000002260 +B1344134521383N00553644EA0000002265 +B1344154521381N00553658EA0000002270 +B1344174521378N00553668EA0000002277 +B1344194521373N00553678EA0000002283 +B1344214521366N00553683EA0000002289 +B1344234521360N00553679EA0000002294 +B1344254521356N00553666EA0000002298 +B1344274521362N00553645EA0000002297 +B1344294521373N00553641EA0000002301 +B1344314521378N00553643EA0000002305 +B1344334521393N00553656EA0000002309 +B1344354521393N00553656EA0000002313 +B1344374521412N00553673EA0000002317 +B1344394521423N00553678EA0000002322 +B1344414521432N00553684EA0000002326 +B1344434521441N00553689EA0000002331 +B1344454521451N00553694EA0000002336 +B1344474521461N00553697EA0000002341 +B1344494521471N00553701EA0000002346 +B1344514521484N00553706EA0000002352 +B1344534521497N00553711EA0000002359 +B1344554521508N00553716EA0000002368 +B1344574521518N00553722EA0000002379 +B1344594521528N00553725EA0000002387 +B1345014521540N00553730EA0000002393 +B1345034521551N00553738EA0000002402 +B1345054521557N00553747EA0000002410 +B1345074521562N00553753EA0000002416 +B1345094521569N00553758EA0000002420 +B1345114521576N00553761EA0000002422 +B1345134521585N00553763EA0000002423 +B1345154521594N00553767EA0000002426 +B1345174521604N00553769EA0000002428 +B1345194521613N00553773EA0000002429 +B1345214521623N00553778EA0000002430 +B1345234521634N00553784EA0000002430 +B1345254521645N00553792EA0000002431 +B1345274521661N00553806EA0000002432 +B1345294521671N00553812EA0000002432 +B1345314521682N00553819EA0000002431 +B1345334521693N00553827EA0000002430 +B1345354521704N00553836EA0000002428 +B1345374521715N00553844EA0000002426 +B1345394521728N00553854EA0000002422 +B1345414521743N00553863EA0000002420 +B1345434521758N00553872EA0000002420 +B1345454521771N00553881EA0000002418 +B1345474521784N00553888EA0000002418 +B1345504521796N00553893EA0000002417 +B1345524521809N00553899EA0000002415 +B1345544521824N00553905EA0000002413 +B1345564521839N00553912EA0000002413 +B1345584521853N00553918EA0000002413 +B1346004521866N00553922EA0000002411 +B1346024521881N00553929EA0000002409 +B1346044521895N00553936EA0000002408 +B1346064521909N00553944EA0000002407 +B1346084521916N00553949EA0000002404 +B1346104521938N00553963EA0000002400 +B1346124521953N00553972EA0000002398 +B1346144521969N00553977EA0000002394 +B1346164521969N00553977EA0000002391 +B1346184521999N00553993EA0000002387 +B1346204522014N00554001EA0000002382 +B1346224522030N00554009EA0000002378 +B1346244522046N00554017EA0000002375 +B1346264522060N00554024EA0000002372 +B1346284522075N00554031EA0000002368 +B1346304522090N00554039EA0000002365 +B1346324522105N00554047EA0000002363 +B1346344522119N00554053EA0000002361 +B1346364522135N00554058EA0000002357 +B1346384522151N00554062EA0000002356 +B1346404522165N00554067EA0000002354 +B1346424522180N00554071EA0000002351 +B1346444522196N00554075EA0000002347 +B1346464522211N00554080EA0000002345 +B1346484522226N00554083EA0000002342 +B1346504522242N00554085EA0000002338 +B1346524522258N00554084EA0000002335 +B1346544522272N00554084EA0000002333 +B1346564522286N00554085EA0000002331 +B1346584522300N00554085EA0000002328 +B1347004522316N00554084EA0000002325 +B1347024522331N00554083EA0000002324 +B1347044522344N00554082EA0000002322 +B1347064522365N00554082EA0000002317 +B1347084522381N00554081EA0000002315 +B1347104522396N00554080EA0000002314 +B1347124522410N00554080EA0000002312 +B1347144522425N00554080EA0000002309 +B1347164522441N00554081EA0000002307 +B1347184522457N00554082EA0000002306 +B1347204522472N00554083EA0000002304 +B1347224522488N00554086EA0000002301 +B1347244522503N00554092EA0000002300 +B1347264522517N00554098EA0000002299 +B1347284522530N00554103EA0000002297 +B1347314522543N00554109EA0000002294 +B1347334522558N00554114EA0000002292 +B1347354522571N00554118EA0000002289 +B1347374522585N00554121EA0000002287 +B1347394522598N00554125EA0000002285 +B1347414522612N00554128EA0000002282 +B1347434522627N00554132EA0000002279 +B1347454522641N00554136EA0000002277 +B1347474522654N00554140EA0000002274 +B1347494522669N00554144EA0000002271 +B1347514522683N00554148EA0000002270 +B1347534522695N00554152EA0000002268 +B1347554522709N00554156EA0000002264 +B1347574522723N00554162EA0000002260 +B1347594522737N00554169EA0000002257 +B1348014522751N00554176EA0000002254 +B1348034522765N00554183EA0000002251 +B1348054522779N00554190EA0000002248 +B1348074522793N00554196EA0000002246 +B1348094522806N00554201EA0000002244 +B1348114522819N00554206EA0000002240 +B1348134522833N00554212EA0000002236 +B1348154522847N00554216EA0000002234 +B1348174522860N00554219EA0000002231 +B1348194522873N00554224EA0000002227 +B1348214522887N00554229EA0000002224 +B1348234522901N00554235EA0000002222 +B1348254522914N00554240EA0000002220 +B1348274522925N00554244EA0000002219 +B1348294522937N00554247EA0000002215 +B1348314522951N00554251EA0000002212 +B1348334522965N00554255EA0000002210 +B1348354522976N00554256EA0000002210 +B1348374522987N00554259EA0000002207 +B1348394522998N00554261EA0000002204 +B1348414523011N00554264EA0000002202 +B1348434523022N00554267EA0000002202 +B1348454523031N00554269EA0000002199 +B1348474523049N00554273EA0000002191 +B1348494523061N00554279EA0000002188 +B1348514523073N00554283EA0000002185 +B1348534523084N00554287EA0000002179 +B1348554523096N00554290EA0000002173 +B1348574523111N00554291EA0000002169 +B1348594523124N00554294EA0000002167 +B1349014523137N00554297EA0000002163 +B1349034523152N00554300EA0000002161 +B1349054523166N00554301EA0000002160 +B1349074523179N00554303EA0000002161 +B1349094523191N00554305EA0000002163 +B1349124523201N00554306EA0000002165 +B1349144523211N00554309EA0000002166 +B1349164523222N00554312EA0000002169 +B1349184523232N00554314EA0000002172 +B1349204523242N00554318EA0000002174 +B1349224523252N00554321EA0000002175 +B1349244523264N00554322EA0000002175 +B1349264523275N00554322EA0000002175 +B1349284523286N00554321EA0000002175 +B1349304523298N00554321EA0000002176 +B1349324523310N00554322EA0000002179 +B1349344523319N00554323EA0000002181 +B1349364523329N00554324EA0000002181 +B1349384523341N00554325EA0000002179 +B1349404523356N00554325EA0000002178 +B1349424523369N00554327EA0000002179 +B1349444523381N00554331EA0000002177 +B1349464523395N00554333EA0000002174 +B1349484523409N00554338EA0000002173 +B1349504523421N00554342EA0000002171 +B1349524523432N00554343EA0000002168 +B1349544523444N00554347EA0000002163 +B1349564523459N00554353EA0000002157 +B1349584523475N00554356EA0000002153 +B1350004523488N00554361EA0000002150 +B1350024523500N00554365EA0000002145 +B1350044523514N00554365EA0000002139 +B1350064523528N00554367EA0000002135 +B1350084523541N00554370EA0000002132 +B1350104523554N00554373EA0000002127 +B1350124523568N00554376EA0000002122 +B1350144523582N00554377EA0000002117 +B1350164523596N00554376EA0000002112 +B1350184523610N00554374EA0000002109 +B1350204523623N00554372EA0000002106 +B1350224523634N00554369EA0000002103 +B1350244523647N00554366EA0000002098 +B1350264523661N00554363EA0000002092 +B1350284523682N00554360EA0000002088 +B1350304523695N00554358EA0000002085 +B1350324523708N00554357EA0000002080 +B1350344523722N00554355EA0000002076 +B1350364523735N00554353EA0000002073 +B1350384523748N00554351EA0000002068 +B1350404523761N00554347EA0000002064 +B1350424523774N00554344EA0000002060 +B1350444523787N00554339EA0000002056 +B1350464523800N00554335EA0000002052 +B1350484523813N00554330EA0000002050 +B1350504523824N00554326EA0000002047 +B1350534523837N00554322EA0000002042 +B1350554523851N00554319EA0000002039 +B1350574523864N00554316EA0000002036 +B1350594523877N00554313EA0000002035 +B1351014523889N00554310EA0000002032 +B1351034523902N00554306EA0000002028 +B1351054523915N00554303EA0000002025 +B1351074523929N00554299EA0000002023 +B1351094523942N00554296EA0000002021 +B1351114523948N00554294EA0000002019 +B1351134523968N00554292EA0000002016 +B1351154523981N00554289EA0000002013 +B1351174523981N00554289EA0000002011 +B1351194524007N00554283EA0000002009 +B1351214524021N00554279EA0000002007 +B1351234524034N00554276EA0000002005 +B1351254524048N00554274EA0000002003 +B1351274524062N00554271EA0000002001 +B1351294524076N00554268EA0000001998 +B1351314524090N00554265EA0000001996 +B1351334524103N00554262EA0000001994 +B1351354524117N00554259EA0000001992 +B1351374524131N00554257EA0000001990 +B1351394524144N00554253EA0000001988 +B1351414524158N00554250EA0000001986 +B1351434524171N00554247EA0000001983 +B1351454524184N00554243EA0000001979 +B1351474524198N00554240EA0000001975 +B1351494524212N00554238EA0000001972 +B1351514524226N00554236EA0000001970 +B1351534524241N00554235EA0000001967 +B1351554524255N00554233EA0000001965 +B1351574524269N00554229EA0000001965 +B1351594524281N00554227EA0000001963 +B1352014524295N00554224EA0000001960 +B1352034524308N00554220EA0000001958 +B1352054524321N00554217EA0000001956 +B1352074524334N00554214EA0000001952 +B1352094524355N00554209EA0000001947 +B1352114524369N00554206EA0000001943 +B1352134524381N00554198EA0000001940 +B1352154524393N00554190EA0000001936 +B1352174524405N00554184EA0000001932 +B1352194524417N00554179EA0000001929 +B1352214524429N00554176EA0000001927 +B1352234524440N00554174EA0000001926 +B1352254524451N00554171EA0000001923 +B1352274524461N00554167EA0000001919 +B1352294524474N00554164EA0000001916 +B1352314524486N00554160EA0000001915 +B1352344524497N00554156EA0000001913 +B1352364524507N00554151EA0000001909 +B1352384524519N00554147EA0000001906 +B1352404524531N00554144EA0000001904 +B1352424524542N00554142EA0000001901 +B1352444524554N00554139EA0000001898 +B1352464524567N00554136EA0000001894 +B1352484524581N00554135EA0000001892 +B1352504524593N00554136EA0000001891 +B1352524524602N00554136EA0000001894 +B1352544524613N00554137EA0000001899 +B1352564524624N00554139EA0000001905 +B1352584524624N00554139EA0000001914 +B1353004524639N00554143EA0000001919 +B1353024524647N00554142EA0000001925 +B1353044524656N00554140EA0000001932 +B1353064524663N00554137EA0000001938 +B1353084524671N00554134EA0000001943 +B1353104524681N00554132EA0000001949 +B1353124524689N00554130EA0000001955 +B1353144524694N00554124EA0000001960 +B1353164524701N00554117EA0000001966 +B1353184524709N00554112EA0000001971 +B1353204524717N00554108EA0000001976 +B1353224524727N00554104EA0000001981 +B1353244524738N00554101EA0000001986 +B1353264524748N00554098EA0000001989 +B1353284524758N00554095EA0000001993 +B1353304524767N00554091EA0000001997 +B1353324524777N00554089EA0000002000 +B1353344524786N00554088EA0000002002 +B1353364524798N00554085EA0000002002 +B1353384524810N00554084EA0000002003 +B1353404524818N00554076EA0000002002 +B1353424524822N00554063EA0000002001 +B1353444524822N00554050EA0000002000 +B1353464524814N00554041EA0000001999 +B1353484524802N00554043EA0000001997 +B1353504524794N00554067EA0000001995 +B1353524524793N00554080EA0000001995 +B1353544524790N00554090EA0000001995 +B1353564524786N00554101EA0000001994 +B1353584524779N00554112EA0000001994 +B1354004524773N00554122EA0000001995 +B1354024524766N00554133EA0000001997 +B1354044524759N00554145EA0000002001 +B1354064524753N00554156EA0000002006 +B1354084524747N00554162EA0000002013 +B1354104524738N00554163EA0000002020 +B1354134524732N00554152EA0000002028 +B1354154524736N00554137EA0000002034 +B1354174524751N00554141EA0000002043 +B1354194524755N00554163EA0000002051 +B1354214524750N00554179EA0000002063 +B1354234524743N00554187EA0000002073 +B1354254524735N00554186EA0000002081 +B1354274524731N00554172EA0000002088 +B1354294524737N00554160EA0000002095 +B1354314524751N00554165EA0000002101 +B1354334524757N00554182EA0000002107 +B1354354524749N00554202EA0000002116 +B1354374524736N00554210EA0000002125 +B1354394524732N00554209EA0000002131 +B1354414524726N00554195EA0000002138 +B1354434524730N00554184EA0000002145 +B1354454524740N00554178EA0000002151 +B1354474524753N00554184EA0000002156 +B1354494524760N00554202EA0000002161 +B1354514524761N00554220EA0000002166 +B1354534524755N00554234EA0000002171 +B1354554524745N00554238EA0000002175 +B1354574524738N00554228EA0000002179 +B1354594524740N00554216EA0000002183 +B1355014524754N00554214EA0000002188 +B1355034524765N00554226EA0000002192 +B1355054524768N00554247EA0000002196 +B1355074524764N00554265EA0000002202 +B1355094524756N00554276EA0000002205 +B1355114524745N00554274EA0000002207 +B1355134524743N00554260EA0000002209 +B1355154524752N00554253EA0000002213 +B1355174524762N00554255EA0000002219 +B1355194524770N00554259EA0000002226 +B1355214524779N00554265EA0000002231 +B1355234524787N00554278EA0000002233 +B1355254524787N00554301EA0000002236 +B1355274524777N00554314EA0000002239 +B1355294524764N00554299EA0000002242 +B1355314524769N00554286EA0000002244 +B1355334524779N00554285EA0000002247 +B1355354524788N00554293EA0000002248 +B1355374524794N00554305EA0000002251 +B1355394524797N00554319EA0000002253 +B1355414524793N00554332EA0000002255 +B1355434524784N00554336EA0000002256 +B1355454524775N00554329EA0000002257 +B1355474524774N00554315EA0000002257 +B1355494524781N00554305EA0000002257 +B1355524524790N00554300EA0000002258 +B1355544524798N00554297EA0000002259 +B1355564524809N00554297EA0000002261 +B1355584524820N00554297EA0000002263 +B1356004524830N00554299EA0000002268 +B1356024524840N00554299EA0000002272 +B1356044524850N00554301EA0000002277 +B1356064524860N00554309EA0000002281 +B1356084524870N00554319EA0000002286 +B1356104524882N00554323EA0000002290 +B1356124524895N00554320EA0000002293 +B1356144524906N00554316EA0000002297 +B1356164524914N00554309EA0000002299 +B1356184524922N00554298EA0000002301 +B1356204524926N00554286EA0000002302 +B1356224524924N00554274EA0000002304 +B1356244524917N00554265EA0000002304 +B1356264524909N00554260EA0000002305 +B1356284524901N00554256EA0000002305 +B1356304524894N00554247EA0000002304 +B1356324524890N00554232EA0000002303 +B1356344524893N00554221EA0000002303 +B1356364524899N00554215EA0000002304 +B1356384524908N00554210EA0000002306 +B1356404524917N00554207EA0000002308 +B1356424524927N00554203EA0000002311 +B1356444524936N00554199EA0000002315 +B1356464524946N00554196EA0000002318 +B1356484524957N00554195EA0000002323 +B1356504524968N00554192EA0000002328 +B1356524524979N00554190EA0000002334 +B1356544524991N00554192EA0000002338 +B1356564525003N00554192EA0000002341 +B1356584525014N00554191EA0000002345 +B1357004525026N00554193EA0000002349 +B1357024525037N00554194EA0000002353 +B1357044525046N00554189EA0000002358 +B1357064525052N00554178EA0000002361 +B1357084525050N00554162EA0000002365 +B1357104525044N00554157EA0000002366 +B1357124525036N00554156EA0000002368 +B1357144525028N00554162EA0000002369 +B1357164525024N00554175EA0000002369 +B1357184525023N00554191EA0000002369 +B1357204525027N00554207EA0000002372 +B1357224525037N00554218EA0000002374 +B1357244525050N00554221EA0000002377 +B1357264525062N00554221EA0000002380 +B1357294525075N00554222EA0000002383 +B1357314525089N00554222EA0000002387 +B1357334525101N00554221EA0000002392 +B1357354525114N00554220EA0000002395 +B1357374525127N00554222EA0000002399 +B1357394525141N00554223EA0000002405 +B1357414525153N00554222EA0000002411 +B1357434525164N00554221EA0000002416 +B1357454525178N00554220EA0000002420 +B1357474525185N00554219EA0000002426 +B1357494525206N00554216EA0000002432 +B1357514525218N00554217EA0000002437 +B1357534525218N00554217EA0000002442 +B1357554525239N00554220EA0000002445 +B1357574525252N00554220EA0000002446 +B1357594525266N00554224EA0000002446 +B1358014525278N00554226EA0000002445 +B1358034525290N00554229EA0000002443 +B1358054525303N00554235EA0000002441 +B1358074525316N00554240EA0000002441 +B1358094525328N00554243EA0000002441 +B1358114525338N00554247EA0000002438 +B1358134525350N00554253EA0000002435 +B1358154525364N00554258EA0000002431 +B1358174525377N00554262EA0000002428 +B1358194525390N00554266EA0000002424 +B1358214525404N00554271EA0000002421 +B1358234525417N00554277EA0000002418 +B1358254525429N00554282EA0000002416 +B1358274525442N00554288EA0000002412 +B1358294525455N00554294EA0000002410 +B1358314525467N00554300EA0000002408 +B1358334525479N00554306EA0000002405 +B1358354525491N00554313EA0000002401 +B1358374525505N00554318EA0000002399 +B1358394525517N00554320EA0000002397 +B1358414525530N00554325EA0000002394 +B1358434525542N00554328EA0000002391 +B1358454525559N00554332EA0000002385 +B1358474525572N00554336EA0000002379 +B1358494525586N00554342EA0000002375 +B1358514525600N00554346EA0000002373 +B1358534525614N00554352EA0000002371 +B1358554525627N00554361EA0000002370 +B1358574525640N00554367EA0000002370 +B1358594525650N00554370EA0000002371 +B1359014525657N00554375EA0000002371 +B1359034525667N00554380EA0000002368 +B1359054525680N00554386EA0000002365 +B1359074525694N00554392EA0000002364 +B1359104525706N00554398EA0000002364 +B1359124525716N00554404EA0000002363 +B1359144525729N00554409EA0000002360 +B1359164525742N00554412EA0000002359 +B1359184525754N00554416EA0000002359 +B1359204525765N00554423EA0000002358 +B1359224525778N00554431EA0000002358 +B1359244525791N00554439EA0000002360 +B1359264525802N00554447EA0000002363 +B1359284525814N00554454EA0000002364 +B1359304525827N00554459EA0000002366 +B1359324525840N00554465EA0000002368 +B1359344525840N00554465EA0000002368 +B1359364525866N00554480EA0000002368 +B1359384525881N00554488EA0000002368 +B1359404525894N00554495EA0000002369 +B1359424525907N00554502EA0000002369 +B1359444525921N00554506EA0000002371 +B1359464525933N00554512EA0000002374 +B1359484525943N00554521EA0000002374 +B1359504525955N00554527EA0000002373 +B1359524525967N00554533EA0000002374 +B1359544525978N00554542EA0000002376 +B1359564525991N00554549EA0000002379 +B1359584526004N00554557EA0000002384 +B1400004526014N00554565EA0000002390 +B1400024526021N00554570EA0000002395 +B1400044526028N00554575EA0000002398 +B1400064526033N00554589EA0000002401 +B1400084526031N00554608EA0000002403 +B1400104526019N00554617EA0000002405 +B1400124526010N00554610EA0000002408 +B1400144526007N00554601EA0000002413 +B1400164526008N00554593EA0000002415 +B1400184526013N00554587EA0000002417 +B1400204526021N00554584EA0000002419 +B1400224526032N00554592EA0000002421 +B1400244526037N00554608EA0000002422 +B1400264526027N00554630EA0000002425 +B1400284526017N00554627EA0000002426 +B1400304526016N00554612EA0000002428 +B1400324526025N00554604EA0000002429 +B1400344526036N00554607EA0000002430 +B1400364526047N00554611EA0000002433 +B1400384526057N00554612EA0000002434 +B1400404526068N00554616EA0000002433 +B1400424526080N00554624EA0000002431 +B1400454526093N00554630EA0000002427 +B1400474526106N00554634EA0000002422 +B1400494526121N00554640EA0000002418 +B1400514526135N00554648EA0000002415 +B1400534526147N00554654EA0000002413 +B1400554526160N00554656EA0000002410 +B1400574526175N00554660EA0000002407 +B1400594526190N00554664EA0000002404 +B1401014526204N00554666EA0000002402 +B1401034526217N00554669EA0000002401 +B1401054526230N00554670EA0000002401 +B1401074526243N00554670EA0000002401 +B1401094526257N00554671EA0000002400 +B1401114526272N00554672EA0000002399 +B1401134526285N00554672EA0000002400 +B1401154526298N00554674EA0000002400 +B1401174526313N00554676EA0000002401 +B1401194526327N00554676EA0000002402 +B1401214526341N00554675EA0000002404 +B1401234526354N00554674EA0000002408 +B1401254526367N00554672EA0000002411 +B1401274526382N00554672EA0000002414 +B1401294526396N00554673EA0000002419 +B1401314526404N00554673EA0000002424 +B1401334526412N00554672EA0000002428 +B1401354526422N00554672EA0000002430 +B1401374526433N00554672EA0000002431 +B1401394526445N00554674EA0000002431 +B1401414526459N00554674EA0000002430 +B1401434526475N00554674EA0000002429 +B1401454526491N00554677EA0000002429 +B1401474526505N00554681EA0000002430 +B1401494526519N00554684EA0000002430 +B1401514526534N00554684EA0000002430 +B1401534526549N00554685EA0000002429 +B1401554526565N00554689EA0000002429 +B1401574526579N00554692EA0000002429 +B1401594526594N00554695EA0000002427 +B1402014526619N00554706EA0000002425 +B1402034526633N00554713EA0000002425 +B1402054526646N00554717EA0000002425 +B1402074526658N00554721EA0000002425 +B1402094526670N00554723EA0000002424 +B1402114526682N00554725EA0000002422 +B1402134526696N00554727EA0000002418 +B1402154526709N00554733EA0000002414 +B1402174526722N00554737EA0000002410 +B1402194526737N00554740EA0000002406 +B1402214526753N00554749EA0000002401 +B1402234526768N00554756EA0000002397 +B1402264526784N00554759EA0000002392 +B1402284526800N00554764EA0000002386 +B1402304526816N00554773EA0000002380 +B1402324526834N00554778EA0000002375 +B1402344526849N00554784EA0000002370 +B1402364526864N00554791EA0000002364 +B1402384526880N00554797EA0000002359 +B1402404526896N00554805EA0000002354 +B1402424526908N00554816EA0000002350 +B1402444526921N00554825EA0000002344 +B1402464526936N00554833EA0000002338 +B1402484526951N00554843EA0000002333 +B1402504526951N00554843EA0000002328 +B1402524526978N00554861EA0000002322 +B1402544526992N00554871EA0000002317 +B1402564527005N00554880EA0000002314 +B1402584527018N00554886EA0000002311 +B1403004527031N00554893EA0000002307 +B1403024527045N00554900EA0000002302 +B1403044527061N00554908EA0000002296 +B1403064527078N00554915EA0000002291 +B1403084527095N00554921EA0000002288 +B1403104527111N00554928EA0000002285 +B1403124527127N00554936EA0000002280 +B1403144527144N00554944EA0000002276 +B1403164527161N00554953EA0000002273 +B1403184527178N00554962EA0000002269 +B1403204527195N00554970EA0000002266 +B1403224527212N00554979EA0000002263 +B1403244527229N00554988EA0000002260 +B1403264527246N00554996EA0000002258 +B1403284527262N00555006EA0000002256 +B1403304527278N00555017EA0000002253 +B1403324527294N00555027EA0000002249 +B1403344527310N00555036EA0000002245 +B1403364527326N00555049EA0000002241 +B1403384527341N00555060EA0000002237 +B1403404527358N00555073EA0000002234 +B1403424527381N00555094EA0000002229 +B1403444527396N00555107EA0000002225 +B1403464527412N00555121EA0000002221 +B1403484527428N00555135EA0000002217 +B1403504527443N00555148EA0000002215 +B1403524527458N00555159EA0000002212 +B1403544527474N00555172EA0000002207 +B1403564527490N00555185EA0000002203 +B1403584527507N00555197EA0000002201 +B1404004527523N00555209EA0000002198 +B1404024527538N00555219EA0000002195 +B1404044527554N00555230EA0000002190 +B1404074527571N00555241EA0000002186 +B1404094527587N00555251EA0000002184 +B1404114527603N00555263EA0000002181 +B1404134527617N00555276EA0000002177 +B1404154527632N00555289EA0000002174 +B1404174527648N00555300EA0000002171 +B1404194527664N00555309EA0000002167 +B1404214527680N00555318EA0000002164 +B1404234527696N00555327EA0000002160 +B1404254527713N00555333EA0000002157 +B1404274527730N00555338EA0000002153 +B1404294527746N00555343EA0000002148 +B1404314527746N00555343EA0000002144 +B1404334527781N00555350EA0000002140 +B1404354527798N00555354EA0000002136 +B1404374527814N00555362EA0000002132 +B1404394527831N00555370EA0000002127 +B1404414527848N00555377EA0000002122 +B1404434527864N00555387EA0000002118 +B1404454527881N00555396EA0000002114 +B1404474527898N00555402EA0000002110 +B1404494527915N00555407EA0000002105 +B1404514527931N00555411EA0000002101 +B1404534527948N00555412EA0000002096 +B1404554527959N00555413EA0000002092 +B1404574527965N00555412EA0000002088 +B1404594527973N00555409EA0000002084 +B1405014527986N00555404EA0000002079 +B1405034527995N00555400EA0000002075 +B1405054528002N00555398EA0000002073 +B1405074528011N00555395EA0000002070 +B1405094528023N00555392EA0000002069 +B1405114528034N00555394EA0000002068 +B1405134528044N00555398EA0000002067 +B1405154528055N00555403EA0000002064 +B1405174528066N00555412EA0000002064 +B1405194528075N00555422EA0000002064 +B1405214528084N00555433EA0000002063 +B1405234528099N00555450EA0000002061 +B1405254528108N00555459EA0000002060 +B1405274528118N00555469EA0000002059 +B1405294528128N00555480EA0000002058 +B1405314528138N00555491EA0000002057 +B1405334528146N00555503EA0000002056 +B1405354528155N00555515EA0000002053 +B1405374528167N00555528EA0000002049 +B1405394528180N00555541EA0000002048 +B1405414528191N00555553EA0000002046 +B1405434528202N00555566EA0000002043 +B1405454528214N00555578EA0000002040 +B1405484528226N00555589EA0000002037 +B1405504528237N00555599EA0000002034 +B1405524528249N00555610EA0000002029 +B1405544528262N00555621EA0000002026 +B1405564528274N00555631EA0000002023 +B1405584528285N00555642EA0000002020 +B1406004528296N00555652EA0000002016 +B1406024528308N00555664EA0000002010 +B1406044528320N00555677EA0000002006 +B1406064528330N00555690EA0000002003 +B1406084528340N00555702EA0000001999 +B1406104528351N00555714EA0000001993 +B1406124528362N00555726EA0000001988 +B1406144528373N00555740EA0000001985 +B1406164528383N00555754EA0000001983 +B1406184528393N00555767EA0000001981 +B1406204528405N00555779EA0000001980 +B1406224528416N00555791EA0000001979 +B1406244528426N00555801EA0000001978 +B1406264528437N00555813EA0000001976 +B1406284528449N00555824EA0000001975 +B1406304528459N00555835EA0000001973 +B1406324528471N00555847EA0000001970 +B1406344528482N00555859EA0000001968 +B1406364528494N00555869EA0000001966 +B1406384528505N00555881EA0000001963 +B1406404528516N00555894EA0000001962 +B1406424528527N00555907EA0000001961 +B1406444528538N00555921EA0000001961 +B1406464528549N00555934EA0000001961 +B1406484528558N00555947EA0000001961 +B1406504528566N00555961EA0000001961 +B1406524528575N00555973EA0000001961 +B1406544528584N00555984EA0000001961 +B1406564528592N00555996EA0000001960 +B1406584528600N00556007EA0000001958 +B1407004528609N00556019EA0000001956 +B1407024528622N00556036EA0000001953 +B1407044528631N00556046EA0000001951 +B1407064528641N00556057EA0000001950 +B1407084528651N00556067EA0000001949 +B1407104528661N00556078EA0000001948 +B1407124528670N00556088EA0000001947 +B1407144528679N00556100EA0000001945 +B1407164528687N00556114EA0000001943 +B1407184528694N00556129EA0000001940 +B1407204528700N00556145EA0000001938 +B1407224528705N00556163EA0000001934 +B1407244528710N00556181EA0000001930 +B1407274528718N00556196EA0000001926 +B1407294528726N00556211EA0000001922 +B1407314528735N00556225EA0000001917 +B1407334528744N00556240EA0000001913 +B1407354528753N00556255EA0000001910 +B1407374528762N00556269EA0000001907 +B1407394528772N00556282EA0000001903 +B1407414528781N00556296EA0000001900 +B1407434528791N00556310EA0000001897 +B1407454528799N00556324EA0000001894 +B1407474528809N00556338EA0000001890 +B1407494528818N00556353EA0000001887 +B1407514528826N00556367EA0000001884 +B1407534528835N00556381EA0000001880 +B1407554528844N00556396EA0000001877 +B1407574528852N00556410EA0000001874 +B1407594528860N00556424EA0000001870 +B1408014528869N00556438EA0000001865 +B1408034528878N00556451EA0000001861 +B1408054528886N00556467EA0000001857 +B1408074528895N00556482EA0000001855 +B1408094528904N00556494EA0000001852 +B1408114528914N00556507EA0000001849 +B1408134528924N00556520EA0000001847 +B1408154528934N00556532EA0000001845 +B1408174528944N00556543EA0000001843 +B1408194528954N00556552EA0000001841 +B1408214528965N00556559EA0000001840 +B1408234528975N00556567EA0000001838 +B1408254528987N00556573EA0000001835 +B1408274528998N00556578EA0000001834 +B1408294529010N00556582EA0000001832 +B1408314529021N00556586EA0000001830 +B1408334529033N00556589EA0000001829 +B1408354529045N00556592EA0000001828 +B1408374529056N00556597EA0000001826 +B1408394529068N00556603EA0000001823 +B1408414529082N00556620EA0000001818 +B1408434529092N00556632EA0000001815 +B1408454529103N00556643EA0000001812 +B1408474529114N00556652EA0000001809 +B1408494529124N00556661EA0000001807 +B1408514529135N00556669EA0000001805 +B1408534529146N00556679EA0000001802 +B1408554529156N00556689EA0000001799 +B1408574529167N00556699EA0000001796 +B1408594529177N00556708EA0000001794 +B1409014529187N00556717EA0000001792 +B1409044529198N00556726EA0000001789 +B1409064529208N00556735EA0000001787 +B1409084529219N00556743EA0000001784 +B1409104529230N00556750EA0000001780 +B1409124529241N00556757EA0000001777 +B1409144529252N00556765EA0000001774 +B1409164529263N00556772EA0000001771 +B1409184529274N00556779EA0000001768 +B1409204529285N00556786EA0000001766 +B1409224529295N00556795EA0000001763 +B1409244529306N00556803EA0000001760 +B1409264529316N00556812EA0000001758 +B1409284529326N00556823EA0000001755 +B1409304529337N00556833EA0000001752 +B1409324529348N00556843EA0000001750 +B1409344529358N00556853EA0000001747 +B1409364529370N00556863EA0000001745 +B1409384529381N00556872EA0000001742 +B1409404529391N00556883EA0000001740 +B1409424529402N00556894EA0000001737 +B1409444529413N00556904EA0000001734 +B1409464529423N00556915EA0000001730 +B1409484529433N00556929EA0000001727 +B1409504529442N00556942EA0000001724 +B1409524529452N00556955EA0000001721 +B1409544529461N00556969EA0000001718 +B1409564529470N00556983EA0000001716 +B1409584529480N00556996EA0000001713 +B1410004529490N00557008EA0000001711 +B1410024529500N00557021EA0000001708 +B1410044529510N00557034EA0000001706 +B1410064529520N00557047EA0000001704 +B1410084529529N00557061EA0000001701 +B1410104529537N00557075EA0000001700 +B1410124529545N00557089EA0000001699 +B1410144529554N00557102EA0000001697 +B1410164529563N00557116EA0000001695 +B1410184529570N00557130EA0000001694 +B1410204529582N00557150EA0000001692 +B1410224529590N00557163EA0000001691 +B1410244529599N00557174EA0000001690 +B1410264529607N00557186EA0000001688 +B1410284529616N00557198EA0000001685 +B1410304529625N00557210EA0000001682 +B1410324529634N00557222EA0000001680 +B1410344529642N00557234EA0000001677 +B1410364529651N00557246EA0000001674 +B1410384529660N00557258EA0000001671 +B1410404529668N00557269EA0000001669 +B1410424529676N00557281EA0000001666 +B1410454529684N00557293EA0000001664 +B1410474529693N00557304EA0000001662 +B1410494529701N00557316EA0000001660 +B1410514529709N00557328EA0000001658 +B1410534529717N00557341EA0000001655 +B1410554529724N00557354EA0000001653 +B1410574529732N00557366EA0000001650 +B1410594529741N00557378EA0000001647 +B1411014529750N00557390EA0000001644 +B1411034529758N00557404EA0000001641 +B1411054529768N00557419EA0000001636 +B1411074529777N00557434EA0000001633 +B1411094529785N00557448EA0000001630 +B1411114529794N00557462EA0000001626 +B1411134529804N00557476EA0000001621 +B1411154529814N00557489EA0000001618 +B1411174529823N00557502EA0000001614 +B1411194529834N00557514EA0000001610 +B1411214529845N00557526EA0000001606 +B1411234529856N00557537EA0000001603 +B1411254529866N00557549EA0000001600 +B1411274529876N00557562EA0000001597 +B1411294529885N00557575EA0000001594 +B1411314529895N00557590EA0000001591 +B1411334529904N00557605EA0000001589 +B1411354529913N00557619EA0000001586 +B1411374529922N00557633EA0000001583 +B1411394529932N00557646EA0000001580 +B1411414529941N00557660EA0000001577 +B1411434529951N00557672EA0000001573 +B1411454529961N00557685EA0000001570 +B1411474529971N00557699EA0000001567 +B1411494529980N00557713EA0000001564 +B1411514529989N00557726EA0000001561 +B1411534529998N00557739EA0000001557 +B1411554530008N00557753EA0000001554 +B1411574530022N00557772EA0000001550 +B1411594530032N00557784EA0000001547 +B1412014530041N00557796EA0000001544 +B1412034530051N00557808EA0000001542 +B1412054530061N00557818EA0000001539 +B1412074530071N00557829EA0000001536 +B1412094530082N00557841EA0000001533 +B1412114530092N00557853EA0000001531 +B1412134530102N00557864EA0000001528 +B1412154530113N00557874EA0000001525 +B1412174530123N00557886EA0000001522 +B1412194530133N00557898EA0000001521 +B1412224530143N00557909EA0000001518 +B1412244530153N00557919EA0000001515 +B1412264530163N00557931EA0000001512 +B1412284530173N00557942EA0000001510 +B1412304530183N00557952EA0000001507 +B1412324530192N00557963EA0000001504 +B1412344530202N00557974EA0000001502 +B1412364530212N00557985EA0000001499 +B1412384530222N00557996EA0000001497 +B1412404530232N00558007EA0000001494 +B1412424530242N00558018EA0000001491 +B1412444530251N00558030EA0000001489 +B1412464530261N00558042EA0000001486 +B1412484530271N00558054EA0000001484 +B1412504530280N00558067EA0000001481 +B1412524530289N00558080EA0000001478 +B1412544530298N00558092EA0000001475 +B1412564530307N00558105EA0000001473 +B1412584530317N00558118EA0000001470 +B1413004530326N00558131EA0000001467 +B1413024530335N00558143EA0000001465 +B1413044530345N00558155EA0000001462 +B1413064530354N00558168EA0000001459 +B1413084530363N00558180EA0000001457 +B1413104530373N00558192EA0000001455 +B1413124530383N00558204EA0000001452 +B1413144530392N00558216EA0000001449 +B1413164530402N00558228EA0000001447 +B1413184530412N00558240EA0000001444 +B1413204530421N00558252EA0000001441 +B1413224530431N00558264EA0000001439 +B1413244530441N00558277EA0000001436 +B1413264530450N00558290EA0000001434 +B1413284530460N00558302EA0000001431 +B1413304530469N00558316EA0000001429 +B1413324530477N00558329EA0000001426 +B1413344530485N00558343EA0000001424 +B1413364530498N00558365EA0000001419 +B1413384530506N00558378EA0000001416 +B1413404530514N00558391EA0000001413 +B1413424530523N00558405EA0000001410 +B1413444530531N00558419EA0000001407 +B1413464530539N00558433EA0000001404 +B1413484530547N00558447EA0000001401 +B1413504530555N00558461EA0000001399 +B1413524530564N00558474EA0000001396 +B1413544530572N00558488EA0000001393 +B1413564530581N00558502EA0000001390 +B1413584530589N00558515EA0000001388 +B1414004530597N00558528EA0000001385 +B1414034530605N00558541EA0000001382 +B1414054530614N00558554EA0000001379 +B1414074530622N00558567EA0000001377 +B1414094530630N00558581EA0000001374 +B1414114530638N00558595EA0000001372 +B1414134530646N00558608EA0000001370 +B1414154530653N00558621EA0000001368 +B1414174530661N00558634EA0000001365 +B1414194530669N00558647EA0000001363 +B1414214530676N00558660EA0000001360 +B1414234530683N00558674EA0000001357 +B1414254530689N00558688EA0000001354 +B1414274530696N00558702EA0000001351 +B1414294530703N00558716EA0000001348 +B1414314530710N00558729EA0000001345 +B1414334530717N00558743EA0000001340 +B1414354530725N00558757EA0000001337 +B1414374530732N00558770EA0000001334 +B1414394530740N00558783EA0000001331 +B1414414530748N00558795EA0000001328 +B1414434530757N00558806EA0000001325 +B1414454530766N00558819EA0000001322 +B1414474530774N00558831EA0000001319 +B1414494530782N00558844EA0000001316 +B1414514530790N00558858EA0000001312 +B1414534530800N00558873EA0000001309 +B1414554530809N00558888EA0000001307 +B1414574530817N00558903EA0000001305 +B1414594530826N00558917EA0000001301 +B1415014530835N00558932EA0000001298 +B1415034530844N00558947EA0000001296 +B1415054530852N00558961EA0000001294 +B1415074530860N00558976EA0000001292 +B1415094530868N00558990EA0000001290 +B1415114530876N00559003EA0000001287 +B1415134530883N00559018EA0000001284 +B1415154530895N00559040EA0000001281 +B1415174530902N00559054EA0000001279 +B1415194530909N00559069EA0000001277 +B1415214530916N00559083EA0000001275 +B1415234530923N00559097EA0000001272 +B1415254530930N00559111EA0000001270 +B1415274530938N00559123EA0000001267 +B1415294530946N00559136EA0000001264 +B1415314530955N00559150EA0000001261 +B1415334530963N00559163EA0000001259 +B1415354530971N00559177EA0000001256 +B1415374530980N00559191EA0000001253 +B1415404530989N00559205EA0000001252 +B1415424530996N00559219EA0000001251 +B1415444531002N00559232EA0000001248 +B1415464531012N00559242EA0000001245 +B1415484531022N00559252EA0000001243 +B1415504531030N00559263EA0000001240 +B1415524531037N00559275EA0000001236 +B1415544531045N00559289EA0000001232 +B1415564531052N00559304EA0000001229 +B1415584531058N00559317EA0000001226 +B1416004531064N00559330EA0000001221 +B1416024531071N00559346EA0000001217 +B1416044531077N00559362EA0000001212 +B1416064531084N00559378EA0000001209 +B1416084531090N00559392EA0000001205 +B1416104531096N00559407EA0000001201 +B1416124531103N00559422EA0000001197 +B1416144531109N00559438EA0000001193 +B1416164531114N00559455EA0000001187 +B1416184531119N00559472EA0000001183 +B1416204531125N00559488EA0000001179 +B1416224531131N00559503EA0000001175 +B1416244531138N00559519EA0000001171 +B1416264531143N00559536EA0000001167 +B1416284531149N00559553EA0000001164 +B1416304531154N00559570EA0000001160 +B1416324531160N00559586EA0000001158 +B1416344531166N00559600EA0000001154 +B1416364531172N00559615EA0000001151 +B1416384531179N00559633EA0000001149 +B1416404531186N00559651EA0000001147 +B1416424531194N00559670EA0000001146 +B1416444531201N00559687EA0000001147 +B1416464531207N00559700EA0000001145 +B1416484531215N00559713EA0000001142 +B1416504531223N00559729EA0000001141 +B1416524531229N00559744EA0000001141 +B1416544531235N00559758EA0000001138 +B1416564531246N00559782EA0000001133 +B1416584531253N00559799EA0000001130 +B1417004531259N00559815EA0000001126 +B1417024531267N00559831EA0000001123 +B1417044531273N00559846EA0000001119 +B1417064531280N00559863EA0000001115 +B1417084531287N00559880EA0000001110 +B1417104531294N00559898EA0000001107 +B1417124531301N00559915EA0000001104 +B1417144531308N00559930EA0000001101 +B1417164531315N00559946EA0000001098 +B1417184531322N00559963EA0000001095 +B1417214531329N00559979EA0000001093 +B1417234531334N00559995EA0000001090 +B1417254531341N00600011EA0000001085 +B1417274531349N00600028EA0000001081 +B1417294531355N00600044EA0000001078 +B1417314531361N00600059EA0000001074 +B1417334531367N00600078EA0000001068 +B1417354531374N00600097EA0000001064 +B1417374531381N00600114EA0000001062 +B1417394531387N00600131EA0000001059 +B1417414531394N00600148EA0000001054 +B1417434531403N00600165EA0000001050 +B1417454531407N00600174EA0000001048 +B1417474531417N00600199EA0000001045 +B1417494531424N00600214EA0000001041 +B1417514531431N00600232EA0000001038 +B1417534531438N00600250EA0000001035 +B1417554531445N00600268EA0000001033 +B1417574531451N00600283EA0000001033 +B1417594531456N00600299EA0000001030 +B1418014531463N00600316EA0000001027 +B1418034531470N00600335EA0000001026 +B1418054531476N00600350EA0000001025 +B1418074531483N00600364EA0000001023 +B1418094531489N00600380EA0000001022 +B1418114531495N00600394EA0000001021 +B1418134531502N00600407EA0000001021 +B1418154531508N00600420EA0000001019 +B1418174531514N00600433EA0000001017 +B1418194531522N00600446EA0000001014 +B1418214531529N00600461EA0000001011 +B1418234531535N00600475EA0000001008 +B1418254531542N00600491EA0000001004 +B1418274531550N00600507EA0000001001 +B1418294531556N00600524EA0000000999 +B1418314531563N00600539EA0000000997 +B1418334531570N00600554EA0000000995 +B1418354531579N00600575EA0000000989 +B1418374531587N00600588EA0000000984 +B1418394531594N00600601EA0000000980 +B1418414531601N00600614EA0000000975 +B1418434531608N00600626EA0000000970 +B1418454531616N00600641EA0000000965 +B1418474531622N00600656EA0000000962 +B1418494531628N00600671EA0000000957 +B1418514531635N00600687EA0000000953 +B1418534531643N00600702EA0000000949 +B1418554531650N00600716EA0000000946 +B1418574531657N00600730EA0000000943 +B1419004531666N00600745EA0000000940 +B1419024531673N00600760EA0000000939 +B1419044531680N00600774EA0000000938 +B1419064531687N00600788EA0000000937 +B1419084531694N00600803EA0000000936 +B1419104531701N00600819EA0000000936 +B1419124531707N00600832EA0000000937 +B1419144531714N00600845EA0000000936 +B1419164531721N00600858EA0000000934 +B1419184531731N00600870EA0000000933 +B1419204531741N00600885EA0000000933 +B1419224531747N00600899EA0000000934 +B1419244531753N00600913EA0000000934 +B1419264531760N00600929EA0000000932 +B1419284531767N00600946EA0000000932 +B1419304531772N00600962EA0000000931 +B1419324531780N00600974EA0000000929 +B1419344531787N00600987EA0000000928 +B1419364531795N00601002EA0000000926 +B1419384531802N00601015EA0000000925 +B1419404531809N00601030EA0000000922 +B1419424531815N00601046EA0000000921 +B1419444531821N00601062EA0000000919 +B1419464531828N00601078EA0000000917 +B1419484531834N00601094EA0000000916 +B1419504531841N00601108EA0000000914 +B1419524531848N00601121EA0000000914 +B1419544531853N00601130EA0000000914 +B1419564531859N00601139EA0000000913 +B1419584531866N00601148EA0000000912 +B1420004531872N00601154EA0000000912 +B1420024531878N00601160EA0000000913 +B1420044531885N00601164EA0000000913 +B1420064531891N00601169EA0000000914 +B1420084531897N00601172EA0000000914 +B1420104531904N00601173EA0000000914 +B1420124531912N00601172EA0000000914 +B1420144531921N00601170EA0000000914 +B1420164531928N00601168EA0000000915 +B1420184531934N00601165EA0000000915 +B1420204531938N00601163EA0000000917 +B1420224531943N00601160EA0000000917 +B1420244531949N00601154EA0000000918 +B1420264531954N00601148EA0000000919 +B1420284531959N00601145EA0000000920 +B1420304531965N00601141EA0000000922 +B1420324531972N00601137EA0000000924 +B1420344531978N00601133EA0000000927 +B1420364531983N00601132EA0000000930 +B1420384531991N00601131EA0000000933 +B1420414531998N00601131EA0000000937 +B1420434532002N00601128EA0000000940 +B1420454532008N00601125EA0000000944 +B1420474532016N00601123EA0000000949 +B1420494532022N00601121EA0000000954 +B1420514532029N00601119EA0000000959 +B1420534532037N00601120EA0000000963 +B1420554532045N00601118EA0000000968 +B1420574532051N00601114EA0000000974 +B1420594532057N00601111EA0000000978 +B1421014532064N00601109EA0000000984 +B1421034532069N00601106EA0000000990 +B1421054532075N00601104EA0000000996 +B1421074532081N00601102EA0000001001 +B1421094532089N00601098EA0000001005 +B1421114532097N00601095EA0000001010 +B1421134532101N00601091EA0000001014 +B1421154532105N00601086EA0000001017 +B1421174532112N00601083EA0000001019 +B1421194532119N00601080EA0000001022 +B1421214532125N00601078EA0000001026 +B1421234532131N00601075EA0000001030 +B1421254532136N00601071EA0000001034 +B1421274532142N00601067EA0000001037 +B1421294532150N00601064EA0000001040 +B1421314532156N00601060EA0000001044 +B1421334532160N00601056EA0000001046 +B1421354532167N00601051EA0000001048 +B1421374532176N00601048EA0000001050 +B1421394532182N00601046EA0000001054 +B1421414532188N00601042EA0000001058 +B1421434532195N00601040EA0000001063 +B1421454532202N00601039EA0000001068 +B1421474532209N00601037EA0000001074 +B1421494532214N00601036EA0000001079 +B1421514532220N00601034EA0000001083 +B1421534532228N00601034EA0000001087 +B1421554532236N00601034EA0000001091 +B1421574532248N00601037EA0000001094 +B1421594532258N00601040EA0000001098 +B1422014532267N00601039EA0000001104 +B1422034532272N00601035EA0000001111 +B1422054532276N00601034EA0000001117 +B1422074532280N00601034EA0000001122 +B1422094532283N00601030EA0000001126 +B1422114532283N00601023EA0000001129 +B1422134532280N00601014EA0000001131 +B1422154532268N00601007EA0000001132 +B1422174532252N00601012EA0000001134 +B1422204532242N00601032EA0000001135 +B1422224532242N00601052EA0000001135 +B1422244532244N00601066EA0000001138 +B1422264532250N00601078EA0000001143 +B1422284532257N00601088EA0000001148 +B1422304532262N00601099EA0000001155 +B1422324532268N00601109EA0000001162 +B1422344532274N00601115EA0000001169 +B1422364532278N00601116EA0000001175 +B1422384532283N00601114EA0000001182 +B1422404532284N00601110EA0000001188 +B1422424532280N00601102EA0000001194 +B1422444532271N00601098EA0000001198 +B1422464532259N00601102EA0000001203 +B1422484532250N00601114EA0000001209 +B1422504532247N00601133EA0000001214 +B1422524532250N00601149EA0000001220 +B1422544532256N00601157EA0000001225 +B1422564532262N00601164EA0000001224 +B1422584532265N00601159EA0000001227 +B1423004532260N00601152EA0000001229 +B1423024532251N00601149EA0000001234 +B1423044532241N00601153EA0000001239 +B1423064532233N00601166EA0000001244 +B1423084532228N00601186EA0000001250 +B1423104532227N00601206EA0000001255 +B1423124532229N00601222EA0000001257 +B1423144532232N00601232EA0000001258 +B1423164532237N00601235EA0000001255 +B1423184532241N00601231EA0000001252 +B1423204532238N00601222EA0000001248 +B1423224532227N00601220EA0000001248 +B1423244532214N00601231EA0000001249 +B1423264532203N00601246EA0000001253 +B1423284532194N00601258EA0000001254 +B1423304532185N00601273EA0000001255 +B1423324532180N00601292EA0000001256 +B1423344532182N00601306EA0000001254 +B1423364532191N00601314EA0000001252 +B1423384532194N00601309EA0000001249 +B1423404532198N00601302EA0000001245 +B1423424532203N00601298EA0000001242 +B1423444532208N00601293EA0000001241 +B1423464532210N00601288EA0000001241 +B1423484532209N00601283EA0000001242 +B1423504532211N00601278EA0000001242 +B1423524532214N00601275EA0000001244 +B1423544532215N00601272EA0000001244 +B1423564532217N00601267EA0000001245 +B1423584532218N00601264EA0000001243 +B1424014532222N00601263EA0000001242 +B1424034532228N00601265EA0000001240 +B1424054532235N00601268EA0000001240 +B1424074532241N00601268EA0000001240 +B1424094532247N00601269EA0000001240 +B1424114532254N00601269EA0000001240 +B1424134532259N00601268EA0000001239 +B1424154532265N00601265EA0000001238 +B1424174532270N00601260EA0000001237 +B1424194532275N00601255EA0000001237 +B1424214532279N00601249EA0000001235 +B1424234532283N00601243EA0000001234 +B1424254532287N00601236EA0000001233 +B1424274532291N00601229EA0000001233 +B1424294532296N00601224EA0000001231 +B1424314532301N00601219EA0000001231 +B1424334532305N00601215EA0000001230 +B1424354532310N00601212EA0000001228 +B1424374532314N00601207EA0000001225 +B1424394532318N00601201EA0000001224 +B1424414532321N00601195EA0000001222 +B1424434532326N00601187EA0000001221 +B1424454532331N00601181EA0000001220 +B1424474532335N00601176EA0000001220 +B1424494532339N00601171EA0000001219 +B1424514532345N00601167EA0000001217 +B1424534532351N00601163EA0000001216 +B1424554532356N00601158EA0000001217 +B1424574532360N00601152EA0000001216 +B1424594532364N00601147EA0000001216 +B1425014532368N00601142EA0000001215 +B1425034532371N00601136EA0000001213 +B1425054532375N00601131EA0000001212 +B1425074532380N00601127EA0000001212 +B1425094532384N00601127EA0000001213 +B1425114532388N00601128EA0000001214 +B1425134532393N00601126EA0000001216 +B1425154532396N00601122EA0000001219 +B1425174532401N00601121EA0000001222 +B1425194532407N00601123EA0000001225 +B1425214532414N00601132EA0000001227 +B1425234532418N00601151EA0000001229 +B1425254532411N00601172EA0000001232 +B1425274532399N00601179EA0000001232 +B1425294532389N00601169EA0000001233 +B1425314532391N00601159EA0000001234 +B1425334532400N00601160EA0000001235 +B1425354532409N00601168EA0000001239 +B1425374532414N00601178EA0000001243 +B1425394532416N00601193EA0000001245 +B1425424532413N00601212EA0000001248 +B1425444532402N00601221EA0000001250 +B1425464532391N00601219EA0000001251 +B1425484532386N00601207EA0000001250 +B1425504532389N00601194EA0000001252 +B1425524532398N00601194EA0000001254 +B1425544532405N00601206EA0000001257 +B1425564532404N00601223EA0000001260 +B1425584532396N00601234EA0000001262 +B1426004532385N00601235EA0000001264 +B1426024532380N00601224EA0000001266 +B1426044532386N00601218EA0000001268 +B1426064532394N00601228EA0000001270 +B1426084532397N00601245EA0000001273 +B1426104532397N00601260EA0000001277 +B1426124532394N00601275EA0000001279 +B1426144532386N00601287EA0000001281 +B1426164532375N00601291EA0000001283 +B1426184532366N00601284EA0000001283 +B1426204532365N00601274EA0000001284 +B1426224532372N00601274EA0000001284 +B1426244532381N00601284EA0000001286 +B1426264532388N00601293EA0000001287 +B1426284532396N00601299EA0000001289 +B1426304532402N00601311EA0000001288 +B1426324532406N00601328EA0000001288 +B1426344532403N00601344EA0000001289 +B1426364532396N00601357EA0000001290 +B1426384532387N00601368EA0000001291 +B1426404532377N00601377EA0000001291 +B1426424532368N00601383EA0000001292 +B1426444532358N00601386EA0000001291 +B1426464532348N00601380EA0000001290 +B1426484532345N00601369EA0000001290 +B1426504532347N00601359EA0000001289 +B1426524532349N00601351EA0000001290 +B1426544532350N00601339EA0000001293 +B1426564532351N00601331EA0000001295 +B1426584532352N00601324EA0000001298 +B1427004532354N00601317EA0000001302 +B1427024532356N00601311EA0000001306 +B1427044532358N00601307EA0000001309 +B1427064532360N00601302EA0000001311 +B1427084532367N00601299EA0000001312 +B1427104532374N00601304EA0000001313 +B1427124532378N00601318EA0000001313 +B1427144532377N00601335EA0000001313 +B1427164532368N00601350EA0000001312 +B1427194532358N00601360EA0000001312 +B1427214532346N00601367EA0000001312 +B1427234532332N00601376EA0000001313 +B1427254532320N00601384EA0000001314 +B1427274532309N00601391EA0000001317 +B1427294532300N00601398EA0000001321 +B1427314532290N00601398EA0000001324 +B1427334532280N00601390EA0000001327 +B1427354532278N00601382EA0000001329 +B1427374532284N00601382EA0000001332 +B1427394532290N00601399EA0000001334 +B1427414532290N00601417EA0000001337 +B1427434532285N00601429EA0000001340 +B1427454532276N00601438EA0000001343 +B1427474532264N00601443EA0000001346 +B1427494532254N00601437EA0000001349 +B1427514532251N00601427EA0000001353 +B1427534532256N00601420EA0000001357 +B1427554532264N00601420EA0000001361 +B1427574532272N00601432EA0000001363 +B1427594532275N00601452EA0000001367 +B1428014532269N00601469EA0000001373 +B1428034532259N00601478EA0000001377 +B1428054532247N00601482EA0000001379 +B1428074532237N00601478EA0000001381 +B1428094532232N00601466EA0000001384 +B1428114532237N00601461EA0000001389 +B1428134532244N00601463EA0000001393 +B1428154532252N00601472EA0000001394 +B1428174532256N00601488EA0000001396 +B1428194532256N00601504EA0000001399 +B1428214532246N00601516EA0000001401 +B1428234532236N00601523EA0000001403 +B1428254532221N00601526EA0000001400 +B1428274532211N00601517EA0000001402 +B1428294532208N00601506EA0000001404 +B1428314532211N00601499EA0000001408 +B1428334532219N00601497EA0000001414 +B1428354532224N00601497EA0000001415 +B1428374532231N00601505EA0000001416 +B1428394532234N00601526EA0000001415 +B1428414532225N00601548EA0000001414 +B1428434532210N00601556EA0000001413 +B1428454532198N00601557EA0000001414 +B1428474532186N00601558EA0000001416 +B1428494532175N00601558EA0000001420 +B1428514532165N00601558EA0000001423 +B1428534532155N00601556EA0000001425 +B1428554532148N00601546EA0000001426 +B1428584532151N00601537EA0000001426 +B1429004532160N00601542EA0000001424 +B1429024532165N00601560EA0000001422 +B1429044532157N00601580EA0000001420 +B1429064532141N00601589EA0000001418 +B1429084532125N00601592EA0000001418 +B1429104532114N00601595EA0000001420 +B1429124532104N00601596EA0000001420 +B1429144532093N00601596EA0000001422 +B1429164532082N00601598EA0000001424 +B1429184532072N00601596EA0000001427 +B1429204532065N00601588EA0000001429 +B1429224532065N00601578EA0000001434 +B1429244532074N00601577EA0000001437 +B1429264532080N00601586EA0000001439 +B1429284532080N00601606EA0000001440 +B1429304532068N00601622EA0000001441 +B1429324532054N00601623EA0000001443 +B1429344532048N00601613EA0000001445 +B1429364532052N00601604EA0000001450 +B1429384532059N00601600EA0000001454 +B1429404532064N00601597EA0000001458 +B1429424532070N00601599EA0000001462 +B1429444532077N00601611EA0000001466 +B1429464532074N00601629EA0000001468 +B1429484532062N00601639EA0000001471 +B1429504532049N00601636EA0000001473 +B1429524532042N00601626EA0000001474 +B1429544532041N00601614EA0000001476 +B1429564532048N00601607EA0000001479 +B1429584532057N00601605EA0000001482 +B1430004532064N00601613EA0000001487 +B1430024532067N00601627EA0000001490 +B1430044532064N00601644EA0000001493 +B1430064532053N00601655EA0000001495 +B1430084532034N00601650EA0000001498 +B1430104532032N00601638EA0000001501 +B1430124532035N00601631EA0000001505 +B1430144532040N00601630EA0000001508 +B1430164532047N00601635EA0000001511 +B1430184532051N00601651EA0000001515 +B1430204532042N00601669EA0000001518 +B1430224532029N00601676EA0000001521 +B1430244532018N00601671EA0000001524 +B1430264532012N00601660EA0000001527 +B1430284532014N00601651EA0000001529 +B1430304532020N00601647EA0000001533 +B1430334532027N00601648EA0000001538 +B1430354532033N00601661EA0000001544 +B1430374532033N00601681EA0000001552 +B1430394532026N00601699EA0000001563 +B1430414532012N00601707EA0000001569 +B1430434532000N00601702EA0000001573 +B1430454531994N00601688EA0000001577 +B1430474531999N00601681EA0000001582 +B1430494532007N00601684EA0000001588 +B1430514532012N00601692EA0000001598 +B1430534532015N00601699EA0000001606 +B1430554532020N00601705EA0000001614 +B1430574532024N00601720EA0000001619 +B1430594532021N00601741EA0000001625 +B1431014532009N00601753EA0000001632 +B1431034531997N00601748EA0000001638 +B1431054531994N00601736EA0000001645 +B1431074531996N00601730EA0000001654 +B1431094532002N00601729EA0000001664 +B1431114532007N00601731EA0000001673 +B1431134532011N00601737EA0000001680 +B1431154532017N00601751EA0000001686 +B1431174532015N00601773EA0000001691 +B1431194532004N00601784EA0000001695 +B1431214531992N00601785EA0000001700 +B1431234531984N00601776EA0000001705 +B1431254531984N00601766EA0000001712 +B1431274531991N00601761EA0000001718 +B1431294531998N00601764EA0000001723 +B1431314532002N00601777EA0000001727 +B1431334532000N00601795EA0000001729 +B1431354531990N00601805EA0000001731 +B1431374531978N00601799EA0000001732 +B1431394531971N00601787EA0000001735 +B1431414531971N00601779EA0000001739 +B1431434531974N00601773EA0000001741 +B1431454531980N00601768EA0000001743 +B1431474531991N00601778EA0000001745 +B1431494531992N00601794EA0000001746 +B1431514531984N00601810EA0000001746 +B1431534531973N00601816EA0000001746 +B1431554531965N00601811EA0000001747 +B1431574531961N00601800EA0000001749 +B1431594531957N00601790EA0000001755 +B1432014531955N00601778EA0000001760 +B1432034531956N00601765EA0000001766 +B1432054531960N00601757EA0000001771 +B1432074531965N00601759EA0000001776 +B1432094531967N00601771EA0000001779 +B1432124531962N00601785EA0000001782 +B1432144531950N00601791EA0000001784 +B1432164531939N00601787EA0000001786 +B1432184531930N00601781EA0000001790 +B1432204531923N00601776EA0000001793 +B1432224531918N00601769EA0000001795 +B1432244531918N00601761EA0000001797 +B1432264531923N00601759EA0000001798 +B1432284531929N00601764EA0000001799 +B1432304531935N00601767EA0000001801 +B1432324531939N00601763EA0000001802 +B1432344531943N00601759EA0000001803 +B1432364531947N00601758EA0000001803 +B1432384531953N00601756EA0000001802 +B1432404531958N00601752EA0000001802 +B1432424531963N00601748EA0000001801 +B1432444531969N00601744EA0000001799 +B1432464531976N00601738EA0000001798 +B1432484531982N00601733EA0000001797 +B1432504531988N00601728EA0000001796 +B1432524531995N00601725EA0000001794 +B1432544532002N00601721EA0000001793 +B1432564532009N00601720EA0000001793 +B1432584532016N00601719EA0000001792 +B1433004532024N00601718EA0000001791 +B1433024532032N00601718EA0000001792 +B1433044532039N00601719EA0000001793 +B1433064532047N00601721EA0000001793 +B1433084532055N00601723EA0000001795 +B1433104532063N00601722EA0000001796 +B1433124532070N00601722EA0000001796 +B1433144532079N00601723EA0000001795 +B1433164532088N00601723EA0000001795 +B1433184532096N00601724EA0000001794 +B1433204532105N00601727EA0000001793 +B1433224532113N00601730EA0000001792 +B1433244532122N00601733EA0000001791 +B1433264532135N00601736EA0000001790 +B1433284532144N00601738EA0000001788 +B1433304532153N00601741EA0000001786 +B1433324532162N00601744EA0000001785 +B1433344532170N00601748EA0000001783 +B1433364532178N00601754EA0000001782 +B1433384532186N00601759EA0000001781 +B1433404532194N00601766EA0000001779 +B1433424532203N00601775EA0000001776 +B1433444532214N00601786EA0000001773 +B1433464532224N00601796EA0000001771 +B1433484532233N00601806EA0000001768 +B1433514532242N00601816EA0000001764 +B1433534532252N00601828EA0000001761 +B1433554532262N00601839EA0000001760 +B1433574532271N00601850EA0000001757 +B1433594532280N00601860EA0000001753 +B1434014532290N00601872EA0000001750 +B1434034532300N00601883EA0000001747 +B1434054532309N00601894EA0000001744 +B1434074532319N00601906EA0000001740 +B1434094532329N00601919EA0000001736 +B1434114532340N00601934EA0000001731 +B1434134532352N00601949EA0000001726 +B1434154532358N00601956EA0000001723 +B1434174532374N00601978EA0000001718 +B1434194532385N00601993EA0000001713 +B1434214532396N00602008EA0000001708 +B1434234532407N00602023EA0000001704 +B1434254532418N00602038EA0000001699 +B1434274532428N00602053EA0000001694 +B1434294532439N00602069EA0000001688 +B1434314532448N00602085EA0000001683 +B1434334532459N00602101EA0000001678 +B1434354532469N00602117EA0000001672 +B1434374532479N00602133EA0000001666 +B1434394532490N00602148EA0000001660 +B1434414532499N00602163EA0000001653 +B1434434532508N00602180EA0000001647 +B1434454532517N00602196EA0000001640 +B1434474532526N00602214EA0000001633 +B1434494532535N00602231EA0000001626 +B1434514532544N00602248EA0000001619 +B1434534532552N00602266EA0000001613 +B1434554532559N00602284EA0000001609 +B1434574532562N00602299EA0000001606 +B1434594532566N00602314EA0000001602 +B1435014532572N00602332EA0000001599 +B1435034532578N00602347EA0000001597 +B1435054532583N00602361EA0000001599 +B1435074532593N00602384EA0000001596 +B1435094532599N00602400EA0000001595 +B1435114532605N00602416EA0000001595 +B1435134532611N00602431EA0000001593 +B1435154532616N00602447EA0000001591 +B1435174532622N00602462EA0000001589 +B1435194532628N00602478EA0000001588 +B1435214532633N00602494EA0000001585 +B1435234532639N00602509EA0000001583 +B1435254532644N00602525EA0000001580 +B1435274532649N00602541EA0000001578 +B1435304532654N00602555EA0000001576 +B1435324532660N00602568EA0000001573 +B1435344532667N00602580EA0000001569 +B1435364532674N00602592EA0000001567 +B1435384532679N00602605EA0000001564 +B1435404532685N00602618EA0000001561 +B1435424532691N00602632EA0000001557 +B1435444532695N00602648EA0000001554 +B1435464532701N00602663EA0000001551 +B1435484532706N00602678EA0000001548 +B1435504532711N00602694EA0000001544 +B1435524532717N00602712EA0000001542 +B1435544532722N00602729EA0000001541 +B1435564532727N00602743EA0000001538 +B1435584532731N00602759EA0000001535 +B1436004532737N00602777EA0000001532 +B1436024532742N00602793EA0000001531 +B1436044532747N00602806EA0000001529 +B1436064532752N00602821EA0000001525 +B1436084532758N00602839EA0000001523 +B1436104532763N00602855EA0000001521 +B1436124532770N00602867EA0000001518 +B1436144532778N00602879EA0000001513 +B1436164532784N00602893EA0000001508 +B1436184532792N00602905EA0000001503 +B1436204532801N00602916EA0000001497 +B1436224532809N00602928EA0000001493 +B1436244532815N00602945EA0000001488 +B1436264532820N00602961EA0000001483 +B1436284532825N00602979EA0000001478 +B1436304532827N00602999EA0000001474 +B1436324532829N00603018EA0000001471 +B1436344532832N00603036EA0000001467 +B1436364532834N00603055EA0000001463 +B1436384532837N00603074EA0000001460 +B1436404532839N00603093EA0000001456 +B1436424532842N00603112EA0000001452 +B1436444532844N00603131EA0000001447 +B1436464532847N00603160EA0000001441 +B1436484532846N00603181EA0000001437 +B1436504532845N00603203EA0000001435 +B1436524532843N00603223EA0000001434 +B1436544532843N00603242EA0000001434 +B1436564532843N00603257EA0000001439 +B1436584532845N00603268EA0000001443 +B1437004532847N00603277EA0000001445 +B1437024532850N00603284EA0000001447 +B1437044532852N00603294EA0000001449 +B1437064532855N00603305EA0000001452 +B1437094532860N00603315EA0000001456 +B1437114532864N00603323EA0000001461 +B1437134532869N00603329EA0000001466 +B1437154532875N00603332EA0000001469 +B1437174532880N00603336EA0000001472 +B1437194532885N00603336EA0000001473 +B1437214532890N00603330EA0000001473 +B1437234532887N00603316EA0000001472 +B1437254532876N00603311EA0000001472 +B1437274532863N00603319EA0000001474 +B1437294532854N00603327EA0000001478 +B1437314532843N00603332EA0000001480 +B1437334532831N00603333EA0000001482 +B1437354532822N00603327EA0000001484 +B1437374532818N00603317EA0000001489 +B1437394532822N00603311EA0000001492 +B1437414532829N00603316EA0000001494 +B1437434532834N00603324EA0000001498 +B1437454532838N00603330EA0000001501 +B1437474532844N00603336EA0000001502 +B1437494532851N00603340EA0000001502 +B1437514532858N00603342EA0000001502 +B1437534532866N00603342EA0000001504 +B1437554532873N00603342EA0000001505 +B1437574532878N00603343EA0000001505 +B1437594532886N00603346EA0000001505 +B1438014532896N00603353EA0000001506 +B1438034532906N00603359EA0000001507 +B1438054532913N00603362EA0000001510 +B1438074532922N00603365EA0000001511 +B1438094532932N00603369EA0000001514 +B1438114532940N00603371EA0000001515 +B1438134532948N00603371EA0000001517 +B1438154532953N00603371EA0000001520 +B1438174532959N00603372EA0000001521 +B1438194532967N00603370EA0000001521 +B1438214532975N00603368EA0000001521 +B1438234532986N00603366EA0000001519 +B1438254532996N00603362EA0000001517 +B1438274533009N00603355EA0000001515 +B1438294533019N00603350EA0000001513 +B1438314533020N00603348EA0000001514 +B1438334533020N00603345EA0000001514 +B1438354533022N00603336EA0000001513 +B1438374533028N00603327EA0000001513 +B1438394533034N00603325EA0000001513 +B1438414533042N00603319EA0000001512 +B1438434533050N00603314EA0000001510 +B1438454533057N00603314EA0000001508 +B1438484533064N00603311EA0000001505 +B1438504533073N00603307EA0000001504 +B1438524533079N00603302EA0000001503 +B1438544533082N00603295EA0000001502 +B1438564533088N00603287EA0000001501 +B1438584533098N00603281EA0000001500 +B1439004533106N00603279EA0000001501 +B1439024533114N00603276EA0000001503 +B1439044533123N00603272EA0000001506 +B1439064533132N00603270EA0000001510 +B1439084533139N00603270EA0000001514 +B1439104533146N00603275EA0000001519 +B1439124533150N00603278EA0000001530 +B1439144533152N00603282EA0000001534 +B1439164533153N00603292EA0000001534 +B1439184533144N00603312EA0000001533 +B1439204533131N00603307EA0000001530 +B1439224533129N00603290EA0000001529 +B1439244533140N00603284EA0000001530 +B1439264533148N00603286EA0000001531 +B1439284533153N00603291EA0000001529 +B1439304533158N00603303EA0000001528 +B1439324533161N00603316EA0000001528 +B1439344533167N00603326EA0000001526 +B1439364533173N00603336EA0000001524 +B1439384533179N00603346EA0000001521 +B1439404533187N00603354EA0000001517 +B1439424533195N00603362EA0000001514 +B1439444533204N00603371EA0000001511 +B1439464533213N00603380EA0000001510 +B1439484533221N00603388EA0000001507 +B1439504533230N00603397EA0000001505 +B1439524533238N00603407EA0000001503 +B1439544533245N00603415EA0000001500 +B1439564533253N00603424EA0000001497 +B1439584533262N00603432EA0000001494 +B1440004533269N00603439EA0000001491 +B1440024533277N00603448EA0000001487 +B1440044533289N00603462EA0000001483 +B1440064533297N00603471EA0000001480 +B1440084533306N00603481EA0000001476 +B1440104533314N00603490EA0000001474 +B1440124533322N00603497EA0000001471 +B1440144533332N00603505EA0000001468 +B1440164533341N00603513EA0000001465 +B1440184533350N00603522EA0000001463 +B1440204533357N00603533EA0000001463 +B1440224533363N00603545EA0000001462 +B1440244533370N00603558EA0000001460 +B1440264533379N00603571EA0000001457 +B1440294533388N00603583EA0000001455 +B1440314533397N00603596EA0000001452 +B1440334533406N00603609EA0000001451 +B1440354533415N00603624EA0000001449 +B1440374533423N00603639EA0000001447 +B1440394533432N00603653EA0000001446 +B1440414533440N00603667EA0000001445 +B1440434533448N00603682EA0000001443 +B1440454533457N00603696EA0000001441 +B1440474533466N00603710EA0000001439 +B1440494533476N00603725EA0000001437 +B1440514533486N00603740EA0000001435 +B1440534533496N00603754EA0000001434 +B1440554533507N00603767EA0000001434 +B1440574533519N00603780EA0000001434 +B1440594533530N00603792EA0000001435 +B1441014533541N00603803EA0000001437 +B1441034533552N00603814EA0000001440 +B1441054533561N00603824EA0000001445 +B1441074533569N00603832EA0000001451 +B1441094533578N00603840EA0000001457 +B1441114533586N00603843EA0000001463 +B1441134533590N00603842EA0000001469 +B1441154533594N00603840EA0000001474 +B1441174533595N00603831EA0000001479 +B1441194533593N00603824EA0000001481 +B1441214533585N00603818EA0000001481 +B1441234533572N00603827EA0000001483 +B1441254533565N00603836EA0000001489 +B1441274533562N00603837EA0000001494 +B1441294533558N00603830EA0000001499 +B1441314533561N00603822EA0000001503 +B1441334533568N00603817EA0000001507 +B1441354533579N00603819EA0000001509 +B1441374533591N00603834EA0000001512 +B1441394533593N00603854EA0000001514 +B1441414533579N00603870EA0000001517 +B1441434533568N00603873EA0000001521 +B1441454533563N00603862EA0000001530 +B1441474533568N00603854EA0000001534 +B1441494533578N00603858EA0000001539 +B1441514533583N00603873EA0000001542 +B1441534533577N00603893EA0000001546 +B1441554533567N00603903EA0000001549 +B1441574533557N00603900EA0000001551 +B1441594533552N00603894EA0000001557 +B1442014533550N00603888EA0000001560 +B1442034533550N00603878EA0000001564 +B1442064533559N00603873EA0000001567 +B1442084533570N00603886EA0000001570 +B1442104533573N00603907EA0000001572 +B1442124533562N00603922EA0000001573 +B1442144533548N00603925EA0000001576 +B1442164533542N00603919EA0000001581 +B1442184533541N00603913EA0000001587 +B1442204533543N00603908EA0000001591 +B1442224533547N00603905EA0000001593 +B1442244533558N00603912EA0000001595 +B1442264533566N00603932EA0000001596 +B1442284533564N00603954EA0000001597 +B1442304533559N00603962EA0000001599 +B1442324533545N00603969EA0000001600 +B1442344533539N00603965EA0000001604 +B1442364533536N00603959EA0000001606 +B1442384533539N00603954EA0000001608 +B1442404533549N00603960EA0000001610 +B1442424533560N00603972EA0000001611 +B1442444533570N00603980EA0000001612 +B1442464533579N00603981EA0000001613 +B1442484533588N00603982EA0000001614 +B1442504533597N00603982EA0000001616 +B1442524533605N00603981EA0000001617 +B1442544533612N00603977EA0000001617 +B1442564533620N00603976EA0000001617 +B1442584533627N00603975EA0000001618 +B1443004533635N00603973EA0000001618 +B1443024533643N00603971EA0000001620 +B1443044533650N00603970EA0000001621 +B1443064533656N00603969EA0000001622 +B1443084533663N00603965EA0000001622 +B1443104533672N00603962EA0000001621 +B1443124533679N00603959EA0000001620 +B1443144533686N00603954EA0000001618 +B1443164533695N00603949EA0000001616 +B1443184533705N00603946EA0000001615 +B1443204533717N00603942EA0000001614 +B1443224533727N00603939EA0000001612 +B1443244533736N00603935EA0000001610 +B1443264533745N00603932EA0000001608 +B1443284533756N00603927EA0000001606 +B1443304533768N00603922EA0000001605 +B1443324533776N00603917EA0000001605 +B1443344533783N00603910EA0000001605 +B1443364533793N00603901EA0000001603 +B1443384533805N00603892EA0000001602 +B1443404533815N00603886EA0000001602 +B1443424533822N00603879EA0000001602 +B1443454533831N00603871EA0000001602 +B1443474533840N00603866EA0000001604 +B1443494533851N00603863EA0000001605 +B1443514533861N00603860EA0000001608 +B1443534533869N00603858EA0000001612 +B1443554533875N00603856EA0000001617 +B1443574533881N00603856EA0000001623 +B1443594533886N00603856EA0000001628 +B1444014533889N00603852EA0000001633 +B1444034533890N00603843EA0000001636 +B1444054533886N00603836EA0000001639 +B1444074533879N00603834EA0000001642 +B1444094533871N00603840EA0000001645 +B1444114533863N00603854EA0000001646 +B1444134533862N00603872EA0000001648 +B1444154533868N00603885EA0000001650 +B1444174533879N00603891EA0000001652 +B1444194533886N00603890EA0000001656 +B1444214533892N00603887EA0000001659 +B1444234533898N00603884EA0000001660 +B1444254533902N00603879EA0000001661 +B1444274533900N00603872EA0000001660 +B1444294533894N00603866EA0000001659 +B1444314533884N00603872EA0000001657 +B1444334533876N00603890EA0000001656 +B1444354533876N00603910EA0000001655 +B1444374533884N00603922EA0000001655 +B1444394533892N00603920EA0000001655 +B1444414533897N00603913EA0000001655 +B1444434533905N00603910EA0000001657 +B1444454533913N00603910EA0000001659 +B1444474533921N00603912EA0000001660 +B1444494533931N00603917EA0000001661 +B1444514533942N00603925EA0000001664 +B1444534533951N00603935EA0000001667 +B1444554533960N00603945EA0000001671 +B1444574533967N00603952EA0000001677 +B1444594533974N00603957EA0000001687 +B1445014533980N00603952EA0000001692 +B1445034533980N00603943EA0000001698 +B1445054533973N00603934EA0000001703 +B1445074533965N00603932EA0000001710 +B1445094533956N00603938EA0000001716 +B1445114533949N00603951EA0000001723 +B1445134533946N00603967EA0000001730 +B1445154533949N00603978EA0000001735 +B1445174533956N00603986EA0000001742 +B1445194533962N00603991EA0000001747 +B1445214533969N00603991EA0000001753 +B1445244533974N00603987EA0000001758 +B1445264533974N00603980EA0000001762 +B1445284533972N00603973EA0000001767 +B1445304533965N00603967EA0000001773 +B1445324533954N00603970EA0000001779 +B1445344533946N00603982EA0000001786 +B1445364533943N00603999EA0000001794 +B1445384533945N00604015EA0000001800 +B1445404533950N00604029EA0000001806 +B1445424533956N00604039EA0000001812 +B1445444533963N00604039EA0000001817 +B1445464533966N00604035EA0000001821 +B1445484533966N00604029EA0000001825 +B1445504533963N00604019EA0000001829 +B1445524533958N00604014EA0000001834 +B1445544533951N00604014EA0000001841 +B1445564533941N00604021EA0000001848 +B1445584533931N00604035EA0000001854 +B1446004533926N00604054EA0000001860 +B1446024533925N00604073EA0000001867 +B1446044533929N00604088EA0000001874 +B1446064533936N00604097EA0000001879 +B1446084533942N00604098EA0000001884 +B1446104533944N00604091EA0000001889 +B1446124533943N00604084EA0000001894 +B1446144533938N00604078EA0000001900 +B1446164533930N00604076EA0000001906 +B1446184533921N00604079EA0000001912 +B1446204533910N00604087EA0000001917 +B1446224533901N00604104EA0000001922 +B1446244533895N00604125EA0000001927 +B1446264533894N00604146EA0000001932 +B1446284533898N00604163EA0000001936 +B1446304533906N00604170EA0000001939 +B1446324533912N00604169EA0000001943 +B1446344533915N00604169EA0000001946 +B1446364533920N00604164EA0000001950 +B1446384533918N00604157EA0000001954 +B1446404533915N00604150EA0000001958 +B1446424533911N00604146EA0000001964 +B1446444533906N00604142EA0000001969 +B1446464533898N00604141EA0000001974 +B1446484533888N00604145EA0000001980 +B1446504533876N00604154EA0000001986 +B1446524533867N00604176EA0000001991 +B1446544533864N00604198EA0000001997 +B1446564533866N00604215EA0000002003 +B1446584533870N00604226EA0000002006 +B1447014533875N00604233EA0000002009 +B1447034533880N00604235EA0000002012 +B1447054533884N00604235EA0000002014 +B1447074533889N00604232EA0000002015 +B1447094533896N00604228EA0000002017 +B1447114533899N00604222EA0000002021 +B1447134533898N00604215EA0000002026 +B1447154533896N00604212EA0000002032 +B1447174533891N00604209EA0000002036 +B1447194533883N00604206EA0000002042 +B1447214533873N00604207EA0000002049 +B1447234533867N00604214EA0000002056 +B1447254533853N00604240EA0000002061 +B1447274533846N00604259EA0000002067 +B1447294533844N00604278EA0000002072 +B1447314533851N00604293EA0000002077 +B1447334533858N00604300EA0000002081 +B1447354533865N00604304EA0000002084 +B1447374533871N00604305EA0000002086 +B1447394533875N00604301EA0000002089 +B1447414533878N00604295EA0000002093 +B1447434533879N00604287EA0000002096 +B1447454533875N00604278EA0000002097 +B1447474533866N00604271EA0000002100 +B1447494533854N00604272EA0000002104 +B1447514533845N00604281EA0000002107 +B1447534533836N00604295EA0000002108 +B1447554533827N00604310EA0000002112 +B1447574533822N00604327EA0000002115 +B1447594533827N00604342EA0000002118 +B1448014533833N00604351EA0000002121 +B1448034533839N00604356EA0000002122 +B1448054533847N00604358EA0000002125 +B1448074533854N00604358EA0000002128 +B1448094533859N00604355EA0000002132 +B1448114533861N00604348EA0000002137 +B1448134533860N00604337EA0000002140 +B1448154533850N00604324EA0000002145 +B1448174533842N00604320EA0000002148 +B1448194533831N00604318EA0000002149 +B1448214533815N00604334EA0000002147 +B1448234533806N00604357EA0000002149 +B1448254533803N00604375EA0000002152 +B1448274533801N00604390EA0000002154 +B1448294533802N00604405EA0000002155 +B1448314533811N00604409EA0000002156 +B1448334533818N00604408EA0000002159 +B1448354533822N00604405EA0000002163 +B1448374533824N00604400EA0000002167 +B1448404533825N00604392EA0000002170 +B1448424533824N00604381EA0000002172 +B1448444533821N00604369EA0000002174 +B1448464533815N00604362EA0000002175 +B1448484533807N00604356EA0000002176 +B1448504533796N00604352EA0000002175 +B1448524533784N00604351EA0000002174 +B1448544533770N00604350EA0000002171 +B1448564533755N00604350EA0000002169 +B1448584533739N00604352EA0000002168 +B1449004533723N00604350EA0000002168 +B1449024533709N00604348EA0000002167 +B1449044533694N00604348EA0000002168 +B1449064533680N00604349EA0000002169 +B1449084533666N00604351EA0000002171 +B1449104533654N00604359EA0000002172 +B1449124533644N00604373EA0000002173 +B1449144533639N00604387EA0000002173 +B1449164533639N00604400EA0000002172 +B1449184533644N00604411EA0000002170 +B1449204533649N00604418EA0000002166 +B1449224533657N00604418EA0000002161 +B1449244533664N00604410EA0000002157 +B1449264533669N00604403EA0000002156 +B1449284533669N00604393EA0000002153 +B1449304533667N00604379EA0000002151 +B1449324533663N00604365EA0000002150 +B1449344533654N00604354EA0000002152 +B1449364533642N00604347EA0000002152 +B1449384533629N00604341EA0000002154 +B1449404533615N00604343EA0000002155 +B1449424533604N00604352EA0000002155 +B1449444533596N00604365EA0000002156 +B1449464533594N00604380EA0000002156 +B1449484533594N00604395EA0000002156 +B1449504533592N00604409EA0000002154 +B1449524533588N00604425EA0000002151 +B1449544533588N00604443EA0000002147 +B1449564533586N00604470EA0000002143 +B1449584533583N00604485EA0000002141 +B1450004533582N00604498EA0000002137 +B1450024533580N00604513EA0000002133 +B1450044533577N00604528EA0000002131 +B1450064533576N00604541EA0000002128 +B1450084533575N00604554EA0000002125 +B1450104533573N00604568EA0000002123 +B1450124533572N00604580EA0000002121 +B1450144533570N00604593EA0000002119 +B1450164533569N00604607EA0000002118 +B1450184533568N00604619EA0000002117 +B1450214533568N00604631EA0000002115 +B1450234533567N00604643EA0000002113 +B1450254533566N00604657EA0000002111 +B1450274533566N00604669EA0000002110 +B1450294533564N00604681EA0000002109 +B1450314533563N00604696EA0000002107 +B1450334533563N00604710EA0000002107 +B1450354533562N00604723EA0000002106 +B1450374533561N00604736EA0000002105 +B1450394533561N00604749EA0000002103 +B1450414533562N00604763EA0000002103 +B1450434533564N00604775EA0000002102 +B1450454533566N00604786EA0000002100 +B1450474533568N00604799EA0000002100 +B1450494533570N00604812EA0000002100 +B1450514533571N00604824EA0000002098 +B1450534533572N00604837EA0000002095 +B1450554533573N00604851EA0000002093 +B1450574533574N00604865EA0000002092 +B1450594533576N00604876EA0000002090 +B1451014533577N00604889EA0000002087 +B1451034533577N00604903EA0000002085 +B1451054533575N00604918EA0000002083 +B1451074533573N00604933EA0000002081 +B1451094533573N00604948EA0000002079 +B1451114533573N00604963EA0000002078 +B1451134533572N00604978EA0000002076 +B1451154533572N00604993EA0000002074 +B1451174533573N00605007EA0000002072 +B1451194533573N00605021EA0000002069 +B1451214533574N00605034EA0000002066 +B1451234533575N00605048EA0000002062 +B1451254533576N00605062EA0000002058 +B1451274533578N00605074EA0000002054 +B1451294533581N00605086EA0000002048 +B1451314533585N00605101EA0000002043 +B1451334533595N00605124EA0000002035 +B1451354533601N00605137EA0000002032 +B1451374533607N00605151EA0000002028 +B1451394533612N00605166EA0000002025 +B1451414533618N00605181EA0000002023 +B1451434533624N00605193EA0000002022 +B1451454533628N00605206EA0000002019 +B1451474533634N00605219EA0000002016 +B1451494533639N00605232EA0000002015 +B1451514533644N00605245EA0000002013 +B1451534533649N00605258EA0000002010 +B1451554533656N00605272EA0000002007 +B1451584533662N00605284EA0000002006 +B1452004533670N00605297EA0000002004 +B1452024533678N00605308EA0000002002 +B1452044533687N00605319EA0000002000 +B1452064533695N00605330EA0000001998 +B1452084533702N00605341EA0000001996 +B1452104533711N00605352EA0000001994 +B1452124533719N00605361EA0000001993 +B1452144533727N00605369EA0000001991 +B1452164533735N00605378EA0000001988 +B1452184533744N00605387EA0000001986 +B1452204533752N00605397EA0000001984 +B1452224533759N00605409EA0000001981 +B1452244533768N00605419EA0000001978 +B1452264533777N00605429EA0000001975 +B1452284533786N00605441EA0000001972 +B1452304533794N00605450EA0000001969 +B1452324533803N00605459EA0000001965 +B1452344533812N00605467EA0000001962 +B1452364533821N00605476EA0000001961 +B1452384533830N00605482EA0000001959 +B1452404533839N00605490EA0000001958 +B1452424533846N00605499EA0000001957 +B1452444533855N00605506EA0000001954 +B1452464533864N00605513EA0000001952 +B1452484533873N00605523EA0000001950 +B1452504533883N00605529EA0000001949 +B1452524533895N00605531EA0000001947 +B1452544533906N00605536EA0000001946 +B1452564533917N00605543EA0000001945 +B1452584533926N00605551EA0000001945 +B1453004533934N00605561EA0000001944 +B1453024533942N00605572EA0000001944 +B1453044533951N00605580EA0000001943 +B1453064533959N00605589EA0000001942 +B1453084533967N00605598EA0000001939 +B1453104533976N00605606EA0000001936 +B1453124533985N00605616EA0000001931 +B1453144534000N00605631EA0000001924 +B1453164534010N00605639EA0000001920 +B1453184534019N00605648EA0000001918 +B1453204534028N00605656EA0000001916 +B1453224534038N00605663EA0000001913 +B1453244534048N00605671EA0000001910 +B1453264534058N00605681EA0000001908 +B1453284534068N00605691EA0000001906 +B1453304534078N00605701EA0000001903 +B1453324534088N00605711EA0000001901 +B1453344534099N00605720EA0000001900 +B1453364534109N00605729EA0000001899 +B1453394534119N00605737EA0000001896 +B1453414534130N00605747EA0000001893 +B1453434534141N00605756EA0000001891 +B1453454534151N00605764EA0000001890 +B1453474534160N00605772EA0000001888 +B1453494534171N00605782EA0000001885 +B1453514534181N00605790EA0000001883 +B1453534534190N00605796EA0000001881 +B1453554534200N00605805EA0000001878 +B1453574534211N00605815EA0000001874 +B1453594534223N00605822EA0000001870 +B1454014534234N00605830EA0000001865 +B1454034534244N00605839EA0000001860 +B1454054534255N00605846EA0000001855 +B1454074534264N00605855EA0000001850 +B1454094534273N00605865EA0000001845 +B1454114534283N00605876EA0000001840 +B1454134534293N00605888EA0000001836 +B1454154534303N00605899EA0000001832 +B1454174534314N00605910EA0000001828 +B1454194534326N00605920EA0000001823 +B1454214534339N00605929EA0000001819 +B1454234534350N00605937EA0000001817 +B1454254534360N00605945EA0000001814 +B1454274534372N00605954EA0000001810 +B1454294534384N00605964EA0000001805 +B1454314534396N00605975EA0000001802 +B1454334534407N00605985EA0000001798 +B1454354534419N00605994EA0000001795 +B1454374534432N00606002EA0000001791 +B1454394534444N00606009EA0000001788 +B1454414534456N00606016EA0000001786 +B1454434534470N00606024EA0000001783 +B1454454534483N00606034EA0000001781 +B1454474534495N00606043EA0000001780 +B1454494534507N00606052EA0000001780 +B1454514534520N00606062EA0000001779 +B1454534534536N00606077EA0000001781 +B1454554534545N00606084EA0000001782 +B1454574534555N00606093EA0000001783 +B1454594534565N00606101EA0000001784 +B1455014534576N00606107EA0000001785 +B1455034534586N00606113EA0000001791 +B1455054534596N00606121EA0000001793 +B1455074534606N00606129EA0000001796 +B1455094534616N00606135EA0000001799 +B1455114534625N00606137EA0000001803 +B1455134534632N00606141EA0000001806 +B1455154534640N00606144EA0000001809 +B1455184534647N00606147EA0000001813 +B1455204534655N00606150EA0000001817 +B1455224534664N00606153EA0000001821 +B1455244534673N00606158EA0000001827 +B1455264534679N00606161EA0000001832 +B1455284534686N00606163EA0000001837 +B1455304534695N00606167EA0000001842 +B1455324534702N00606172EA0000001849 +B1455344534709N00606179EA0000001855 +B1455364534716N00606185EA0000001861 +B1455384534723N00606185EA0000001865 +B1455404534730N00606180EA0000001868 +B1455424534733N00606171EA0000001871 +B1455444534732N00606159EA0000001873 +B1455464534727N00606148EA0000001876 +B1455484534718N00606141EA0000001879 +B1455504534707N00606139EA0000001881 +B1455524534697N00606144EA0000001883 +B1455544534691N00606156EA0000001885 +B1455564534689N00606170EA0000001889 +B1455584534690N00606184EA0000001895 +B1456004534691N00606197EA0000001902 +B1456024534696N00606208EA0000001908 +B1456044534703N00606216EA0000001914 +B1456064534710N00606220EA0000001919 +B1456084534719N00606219EA0000001922 +B1456104534726N00606211EA0000001925 +B1456124534725N00606193EA0000001928 +B1456154534714N00606182EA0000001932 +B1456174534704N00606185EA0000001934 +B1456194534695N00606187EA0000001935 +B1456214534685N00606191EA0000001936 +B1456234534674N00606199EA0000001938 +B1456254534662N00606205EA0000001942 +B1456274534652N00606211EA0000001948 +B1456294534647N00606215EA0000001956 +B1456314534635N00606230EA0000001964 +B1456334534630N00606242EA0000001971 +B1456354534628N00606257EA0000001978 +B1456374534628N00606273EA0000001986 +B1456394534635N00606285EA0000001993 +B1456414534645N00606292EA0000002002 +B1456434534656N00606287EA0000002009 +B1456454534660N00606273EA0000002016 +B1456474534655N00606259EA0000002022 +B1456494534642N00606257EA0000002029 +B1456514534632N00606264EA0000002037 +B1456534534624N00606274EA0000002045 +B1456554534620N00606288EA0000002054 +B1456574534618N00606302EA0000002063 +B1456594534620N00606314EA0000002072 +B1457014534625N00606326EA0000002080 +B1457034534631N00606335EA0000002087 +B1457054534639N00606341EA0000002094 +B1457074534648N00606343EA0000002102 +B1457094534655N00606335EA0000002110 +B1457114534655N00606324EA0000002117 +B1457134534650N00606312EA0000002123 +B1457154534641N00606302EA0000002130 +B1457174534632N00606299EA0000002136 +B1457194534622N00606300EA0000002142 +B1457214534606N00606309EA0000002153 +B1457234534598N00606319EA0000002162 +B1457254534593N00606330EA0000002172 +B1457274534589N00606345EA0000002181 +B1457294534590N00606364EA0000002190 +B1457314534600N00606373EA0000002200 +B1457334534609N00606373EA0000002211 +B1457354534614N00606365EA0000002220 +B1457374534614N00606352EA0000002228 +B1457394534611N00606343EA0000002235 +B1457414534603N00606333EA0000002242 +B1457434534592N00606328EA0000002251 +B1457464534581N00606328EA0000002261 +B1457484534569N00606328EA0000002272 +B1457504534560N00606334EA0000002282 +B1457524534553N00606346EA0000002291 +B1457544534549N00606360EA0000002299 +B1457564534547N00606374EA0000002306 +B1457584534552N00606388EA0000002313 +B1458004534561N00606396EA0000002323 +B1458024534570N00606397EA0000002334 +B1458044534576N00606397EA0000002344 +B1458064534582N00606392EA0000002353 +B1458084534584N00606383EA0000002359 +B1458104534584N00606377EA0000002366 +B1458124534572N00606363EA0000002372 +B1458144534559N00606362EA0000002380 +B1458164534546N00606364EA0000002390 +B1458184534536N00606366EA0000002400 +B1458204534528N00606369EA0000002407 +B1458224534518N00606378EA0000002415 +B1458244534513N00606395EA0000002424 +B1458264534516N00606407EA0000002435 +B1458284534519N00606418EA0000002446 +B1458304534524N00606427EA0000002456 +B1458324534530N00606433EA0000002466 +B1458344534536N00606434EA0000002474 +B1458364534543N00606431EA0000002482 +B1458384534548N00606423EA0000002489 +B1458404534549N00606412EA0000002496 +B1458424534546N00606399EA0000002502 +B1458444534536N00606389EA0000002508 +B1458464534523N00606384EA0000002516 +B1458484534507N00606387EA0000002524 +B1458504534496N00606400EA0000002534 +B1458524534488N00606413EA0000002544 +B1458544534483N00606426EA0000002553 +B1458564534482N00606440EA0000002561 +B1458584534484N00606452EA0000002570 +B1459004534497N00606454EA0000002583 +B1459024534504N00606450EA0000002593 +B1459044534508N00606443EA0000002601 +B1459064534511N00606431EA0000002607 +B1459084534508N00606415EA0000002614 +B1459104534497N00606406EA0000002620 +B1459124534482N00606409EA0000002627 +B1459144534472N00606424EA0000002634 +B1459164534469N00606439EA0000002641 +B1459184534469N00606452EA0000002649 +B1459204534470N00606465EA0000002656 +B1459224534473N00606480EA0000002664 +B1459254534474N00606494EA0000002671 +B1459274534474N00606505EA0000002678 +B1459294534476N00606518EA0000002682 +B1459314534477N00606536EA0000002686 +B1459334534479N00606553EA0000002692 +B1459354534480N00606566EA0000002698 +B1459374534482N00606580EA0000002702 +B1459394534484N00606598EA0000002707 +B1459414534484N00606614EA0000002714 +B1459434534484N00606629EA0000002718 +B1459454534485N00606646EA0000002721 +B1459474534488N00606664EA0000002727 +B1459494534489N00606683EA0000002734 +B1459514534490N00606700EA0000002740 +B1459534534492N00606717EA0000002746 +B1459554534494N00606732EA0000002752 +B1459574534497N00606746EA0000002758 +B1459594534499N00606757EA0000002763 +B1500014534502N00606771EA0000002766 +B1500034534505N00606787EA0000002768 +B1500054534507N00606801EA0000002767 +B1500074534510N00606821EA0000002764 +B1500094534513N00606841EA0000002764 +B1500114534515N00606854EA0000002763 +B1500134534519N00606865EA0000002760 +B1500154534524N00606878EA0000002754 +B1500174534527N00606894EA0000002750 +B1500194534529N00606909EA0000002748 +B1500214534532N00606922EA0000002744 +B1500234534535N00606936EA0000002739 +B1500254534539N00606953EA0000002734 +B1500274534544N00606969EA0000002732 +B1500294534550N00606985EA0000002728 +B1500314534555N00607001EA0000002725 +B1500334534562N00607017EA0000002724 +B1500354534568N00607029EA0000002723 +B1500374534575N00607043EA0000002720 +B1500394534585N00607067EA0000002719 +B1500414534591N00607080EA0000002720 +B1500434534599N00607089EA0000002718 +B1500454534611N00607094EA0000002717 +B1500474534624N00607095EA0000002716 +B1500494534636N00607094EA0000002714 +B1500514534650N00607092EA0000002712 +B1500534534663N00607089EA0000002712 +B1500554534676N00607083EA0000002711 +B1500574534687N00607076EA0000002708 +B1500594534700N00607068EA0000002706 +B1501014534714N00607061EA0000002704 +B1501044534727N00607052EA0000002701 +B1501064534743N00607044EA0000002697 +B1501084534759N00607037EA0000002696 +B1501104534774N00607030EA0000002695 +B1501124534788N00607023EA0000002692 +B1501144534804N00607017EA0000002688 +B1501164534819N00607011EA0000002686 +B1501184534833N00607004EA0000002685 +B1501204534848N00606998EA0000002682 +B1501224534864N00606994EA0000002680 +B1501244534878N00606988EA0000002678 +B1501264534892N00606980EA0000002676 +B1501284534907N00606973EA0000002673 +B1501304534921N00606967EA0000002670 +B1501324534935N00606959EA0000002668 +B1501344534949N00606951EA0000002664 +B1501364534963N00606944EA0000002661 +B1501384534977N00606934EA0000002658 +B1501404534990N00606925EA0000002655 +B1501424535003N00606917EA0000002653 +B1501444535017N00606908EA0000002649 +B1501464535034N00606900EA0000002644 +B1501484535050N00606894EA0000002641 +B1501504535063N00606888EA0000002640 +B1501524535075N00606882EA0000002637 +B1501544535088N00606874EA0000002633 +B1501564535100N00606866EA0000002628 +B1501584535112N00606859EA0000002623 +B1502004535126N00606855EA0000002617 +B1502024535140N00606853EA0000002613 +B1502044535152N00606849EA0000002610 +B1502064535164N00606843EA0000002608 +B1502084535178N00606840EA0000002605 +B1502104535191N00606835EA0000002603 +B1502124535202N00606828EA0000002600 +B1502144535215N00606823EA0000002595 +B1502164535229N00606815EA0000002591 +B1502184535241N00606806EA0000002588 +B1502204535258N00606792EA0000002584 +B1502224535270N00606778EA0000002582 +B1502244535281N00606767EA0000002582 +B1502264535291N00606757EA0000002583 +B1502284535301N00606747EA0000002582 +B1502304535312N00606737EA0000002583 +B1502324535323N00606730EA0000002583 +B1502344535333N00606724EA0000002582 +B1502364535344N00606715EA0000002579 +B1502384535357N00606706EA0000002577 +B1502404535367N00606697EA0000002576 +B1502424535377N00606686EA0000002574 +B1502454535388N00606675EA0000002572 +B1502474535399N00606665EA0000002571 +B1502494535410N00606655EA0000002569 +B1502514535420N00606646EA0000002567 +B1502534535432N00606637EA0000002563 +B1502554535445N00606629EA0000002560 +B1502574535457N00606621EA0000002558 +B1502594535468N00606611EA0000002557 +B1503014535480N00606602EA0000002554 +B1503034535493N00606593EA0000002550 +B1503054535505N00606582EA0000002547 +B1503074535517N00606573EA0000002545 +B1503094535530N00606563EA0000002541 +B1503114535542N00606553EA0000002538 +B1503134535554N00606544EA0000002535 +B1503154535566N00606536EA0000002531 +B1503174535578N00606529EA0000002527 +B1503194535591N00606521EA0000002523 +B1503214535604N00606515EA0000002519 +B1503234535617N00606507EA0000002516 +B1503254535629N00606499EA0000002512 +B1503274535641N00606492EA0000002509 +B1503294535653N00606486EA0000002504 +B1503314535666N00606478EA0000002499 +B1503334535679N00606472EA0000002496 +B1503354535691N00606467EA0000002492 +B1503374535704N00606458EA0000002488 +B1503394535718N00606450EA0000002486 +B1503414535731N00606442EA0000002485 +B1503434535742N00606434EA0000002482 +B1503454535755N00606423EA0000002478 +B1503474535768N00606413EA0000002476 +B1503494535781N00606405EA0000002474 +B1503514535794N00606397EA0000002470 +B1503534535806N00606390EA0000002467 +B1503554535819N00606384EA0000002464 +B1503574535832N00606377EA0000002460 +B1503594535847N00606373EA0000002458 +B1504014535868N00606366EA0000002458 +B1504034535880N00606359EA0000002459 +B1504054535892N00606353EA0000002461 +B1504074535904N00606345EA0000002463 +B1504094535916N00606337EA0000002466 +B1504114535929N00606333EA0000002467 +B1504134535942N00606328EA0000002468 +B1504154535954N00606322EA0000002468 +B1504174535967N00606316EA0000002469 +B1504194535980N00606311EA0000002470 +B1504214535994N00606305EA0000002470 +B1504234536008N00606301EA0000002470 +B1504264536022N00606297EA0000002471 +B1504284536034N00606292EA0000002472 +B1504304536046N00606288EA0000002470 +B1504324536059N00606284EA0000002467 +B1504344536070N00606277EA0000002463 +B1504364536081N00606270EA0000002457 +B1504384536093N00606262EA0000002451 +B1504404536104N00606251EA0000002446 +B1504424536116N00606240EA0000002442 +B1504444536128N00606232EA0000002438 +B1504464536140N00606223EA0000002435 +B1504484536152N00606214EA0000002433 +B1504504536164N00606206EA0000002430 +B1504524536176N00606200EA0000002427 +B1504544536188N00606193EA0000002423 +B1504564536200N00606188EA0000002421 +B1504584536212N00606183EA0000002418 +B1505004536224N00606177EA0000002414 +B1505024536237N00606173EA0000002410 +B1505044536251N00606170EA0000002406 +B1505064536263N00606168EA0000002403 +B1505084536274N00606164EA0000002401 +B1505104536284N00606158EA0000002398 +B1505124536295N00606153EA0000002395 +B1505144536305N00606149EA0000002391 +B1505164536315N00606143EA0000002386 +B1505184536326N00606137EA0000002381 +B1505204536336N00606131EA0000002376 +B1505224536347N00606123EA0000002372 +B1505244536357N00606117EA0000002369 +B1505264536368N00606110EA0000002366 +B1505284536381N00606103EA0000002363 +B1505304536394N00606101EA0000002361 +B1505324536403N00606099EA0000002360 +B1505344536412N00606094EA0000002359 +B1505364536425N00606091EA0000002357 +B1505384536438N00606089EA0000002357 +B1505404536453N00606085EA0000002359 +B1505424536464N00606081EA0000002359 +B1505444536475N00606077EA0000002360 +B1505464536484N00606073EA0000002366 +B1505484536495N00606073EA0000002366 +B1505504536506N00606071EA0000002366 +B1505524536518N00606069EA0000002366 +B1505544536528N00606068EA0000002367 +B1505564536539N00606066EA0000002366 +B1505584536550N00606065EA0000002366 +B1506004536562N00606064EA0000002366 +B1506024536573N00606062EA0000002366 +B1506054536585N00606062EA0000002367 +B1506074536597N00606064EA0000002369 +B1506094536608N00606065EA0000002369 +B1506114536619N00606065EA0000002369 +B1506134536631N00606063EA0000002369 +B1506154536642N00606062EA0000002371 +B1506174536652N00606062EA0000002371 +B1506194536663N00606061EA0000002371 +B1506214536675N00606059EA0000002371 +B1506234536686N00606059EA0000002371 +B1506254536697N00606059EA0000002370 +B1506274536708N00606058EA0000002368 +B1506294536719N00606056EA0000002367 +B1506314536730N00606055EA0000002368 +B1506334536741N00606053EA0000002369 +B1506354536752N00606051EA0000002371 +B1506374536763N00606052EA0000002373 +B1506394536775N00606055EA0000002377 +B1506414536784N00606058EA0000002381 +B1506434536791N00606059EA0000002387 +B1506454536798N00606058EA0000002392 +B1506474536804N00606055EA0000002397 +B1506494536811N00606053EA0000002404 +B1506514536818N00606051EA0000002411 +B1506534536824N00606050EA0000002418 +B1506554536831N00606048EA0000002423 +B1506574536840N00606047EA0000002428 +B1506594536847N00606051EA0000002434 +B1507014536851N00606060EA0000002439 +B1507034536852N00606075EA0000002443 +B1507054536847N00606092EA0000002447 +B1507074536832N00606103EA0000002451 +B1507094536818N00606098EA0000002455 +B1507114536812N00606085EA0000002459 +B1507134536817N00606074EA0000002464 +B1507154536825N00606073EA0000002470 +B1507174536834N00606077EA0000002479 +B1507194536841N00606083EA0000002488 +B1507214536854N00606089EA0000002496 +B1507234536864N00606092EA0000002503 +B1507254536872N00606095EA0000002508 +B1507274536882N00606098EA0000002513 +B1507294536892N00606101EA0000002518 +B1507314536901N00606104EA0000002525 +B1507334536908N00606106EA0000002532 +B1507354536915N00606107EA0000002538 +B1507374536925N00606106EA0000002545 +B1507394536933N00606104EA0000002553 +B1507414536939N00606104EA0000002558 +B1507444536949N00606102EA0000002561 +B1507464536962N00606104EA0000002563 +B1507484536975N00606106EA0000002567 +B1507504536985N00606104EA0000002572 +B1507524536995N00606101EA0000002578 +B1507544537003N00606103EA0000002586 +B1507564537008N00606104EA0000002592 +B1507584537015N00606102EA0000002598 +B1508004537022N00606104EA0000002602 +B1508024537028N00606106EA0000002606 +B1508044537036N00606105EA0000002608 +B1508064537044N00606104EA0000002610 +B1508084537052N00606104EA0000002613 +B1508104537061N00606102EA0000002616 +B1508124537069N00606100EA0000002621 +B1508144537076N00606097EA0000002627 +B1508164537085N00606094EA0000002633 +B1508184537093N00606091EA0000002639 +B1508204537098N00606083EA0000002646 +B1508224537103N00606071EA0000002651 +B1508244537112N00606062EA0000002657 +B1508264537120N00606054EA0000002663 +B1508284537125N00606043EA0000002667 +B1508304537131N00606033EA0000002670 +B1508324537141N00606026EA0000002671 +B1508344537149N00606017EA0000002671 +B1508364537158N00606006EA0000002670 +B1508384537172N00605997EA0000002668 +B1508404537185N00605991EA0000002669 +B1508424537196N00605987EA0000002670 +B1508444537207N00605981EA0000002670 +B1508464537220N00605976EA0000002668 +B1508484537233N00605975EA0000002665 +B1508504537246N00605975EA0000002662 +B1508524537259N00605975EA0000002659 +B1508544537272N00605976EA0000002657 +B1508564537285N00605980EA0000002654 +B1508584537307N00605980EA0000002647 +B1509004537321N00605977EA0000002644 +B1509024537335N00605977EA0000002641 +B1509044537350N00605978EA0000002637 +B1509064537365N00605979EA0000002635 +B1509084537378N00605981EA0000002633 +B1509104537391N00605984EA0000002631 +B1509124537404N00605986EA0000002628 +B1509144537418N00605991EA0000002626 +B1509164537431N00605996EA0000002623 +B1509184537445N00606000EA0000002621 +B1509204537459N00606004EA0000002618 +B1509234537472N00606009EA0000002616 +B1509254537485N00606014EA0000002615 +B1509274537498N00606020EA0000002615 +B1509294537511N00606027EA0000002616 +B1509314537524N00606034EA0000002616 +B1509334537536N00606038EA0000002615 +B1509354537549N00606039EA0000002613 +B1509374537562N00606043EA0000002610 +B1509394537576N00606048EA0000002607 +B1509414537589N00606050EA0000002605 +B1509434537601N00606054EA0000002603 +B1509454537613N00606059EA0000002600 +B1509474537626N00606062EA0000002597 +B1509494537639N00606067EA0000002594 +B1509514537652N00606071EA0000002591 +B1509534537665N00606074EA0000002589 +B1509554537677N00606078EA0000002587 +B1509574537689N00606082EA0000002584 +B1509594537702N00606087EA0000002580 +B1510014537715N00606094EA0000002576 +B1510034537728N00606100EA0000002573 +B1510054537740N00606105EA0000002569 +B1510074537753N00606112EA0000002564 +B1510094537767N00606121EA0000002559 +B1510114537779N00606128EA0000002554 +B1510134537793N00606136EA0000002549 +B1510154537806N00606143EA0000002544 +B1510174537820N00606149EA0000002540 +B1510194537831N00606155EA0000002537 +B1510214537842N00606163EA0000002534 +B1510234537854N00606169EA0000002530 +B1510254537865N00606175EA0000002527 +B1510274537875N00606183EA0000002523 +B1510294537886N00606192EA0000002517 +B1510314537897N00606201EA0000002511 +B1510334537910N00606211EA0000002505 +B1510354537921N00606221EA0000002499 +B1510374537939N00606232EA0000002491 +B1510394537951N00606241EA0000002485 +B1510414537964N00606249EA0000002480 +B1510434537975N00606255EA0000002475 +B1510454537986N00606265EA0000002469 +B1510474537999N00606276EA0000002463 +B1510494538012N00606285EA0000002458 +B1510514538023N00606294EA0000002455 +B1510534538033N00606305EA0000002450 +B1510554538045N00606315EA0000002446 +B1510574538056N00606327EA0000002443 +B1510594538066N00606338EA0000002440 +B1511014538077N00606351EA0000002438 +B1511044538087N00606364EA0000002435 +B1511064538098N00606377EA0000002434 +B1511084538108N00606389EA0000002433 +B1511104538119N00606400EA0000002431 +B1511124538129N00606414EA0000002429 +B1511144538138N00606428EA0000002428 +B1511164538148N00606440EA0000002426 +B1511184538158N00606453EA0000002425 +B1511204538169N00606465EA0000002424 +B1511224538180N00606477EA0000002423 +B1511244538190N00606489EA0000002422 +B1511264538201N00606502EA0000002421 +B1511284538212N00606516EA0000002419 +B1511304538223N00606531EA0000002417 +B1511324538233N00606545EA0000002417 +B1511344538243N00606556EA0000002416 +B1511364538253N00606567EA0000002415 +B1511384538263N00606580EA0000002414 +B1511404538273N00606593EA0000002414 +B1511424538280N00606604EA0000002414 +B1511444538288N00606614EA0000002413 +B1511464538298N00606623EA0000002412 +B1511484538307N00606632EA0000002411 +B1511504538314N00606643EA0000002412 +B1511524538322N00606652EA0000002414 +B1511544538331N00606661EA0000002417 +B1511564538339N00606670EA0000002421 +B1511584538347N00606677EA0000002423 +B1512004538357N00606684EA0000002425 +B1512024538367N00606692EA0000002426 +B1512044538377N00606701EA0000002426 +B1512064538387N00606710EA0000002426 +B1512084538397N00606719EA0000002426 +B1512104538407N00606728EA0000002425 +B1512124538418N00606736EA0000002423 +B1512144538428N00606743EA0000002423 +B1512164538439N00606748EA0000002421 +B1512184538457N00606757EA0000002418 +B1512204538468N00606764EA0000002417 +B1512224538481N00606770EA0000002418 +B1512244538494N00606775EA0000002420 +B1512264538506N00606780EA0000002421 +B1512284538518N00606785EA0000002422 +B1512304538528N00606788EA0000002422 +B1512324538541N00606795EA0000002419 +B1512344538554N00606805EA0000002418 +B1512364538563N00606812EA0000002416 +B1512384538573N00606816EA0000002412 +B1512404538584N00606821EA0000002408 +B1512424538597N00606824EA0000002406 +B1512454538608N00606827EA0000002402 +B1512474538619N00606832EA0000002398 +B1512494538631N00606838EA0000002394 +B1512514538644N00606844EA0000002392 +B1512534538655N00606852EA0000002391 +B1512554538668N00606857EA0000002390 +B1512574538680N00606863EA0000002390 +B1512594538691N00606870EA0000002390 +B1513014538703N00606876EA0000002388 +B1513034538715N00606882EA0000002387 +B1513054538728N00606891EA0000002388 +B1513074538739N00606899EA0000002389 +B1513094538751N00606906EA0000002389 +B1513114538762N00606913EA0000002389 +B1513134538772N00606923EA0000002390 +B1513154538778N00606927EA0000002393 +B1513174538784N00606931EA0000002393 +B1513194538792N00606939EA0000002395 +B1513214538799N00606941EA0000002399 +B1513234538805N00606941EA0000002400 +B1513254538814N00606942EA0000002402 +B1513274538823N00606943EA0000002406 +B1513294538831N00606943EA0000002411 +B1513314538837N00606943EA0000002416 +B1513334538844N00606944EA0000002419 +B1513354538852N00606948EA0000002422 +B1513374538860N00606951EA0000002426 +B1513394538867N00606951EA0000002430 +B1513414538872N00606952EA0000002433 +B1513434538878N00606955EA0000002434 +B1513454538885N00606959EA0000002435 +B1513474538892N00606961EA0000002437 +B1513494538898N00606963EA0000002438 +B1513514538904N00606963EA0000002438 +B1513534538910N00606965EA0000002436 +B1513554538918N00606970EA0000002434 +B1513574538927N00606976EA0000002432 +B1513594538941N00606984EA0000002430 +B1514014538950N00606991EA0000002428 +B1514034538960N00606998EA0000002424 +B1514054538971N00607005EA0000002421 +B1514074538982N00607012EA0000002420 +B1514094538993N00607019EA0000002418 +B1514114539004N00607026EA0000002414 +B1514134539015N00607033EA0000002410 +B1514154539027N00607042EA0000002407 +B1514174539038N00607052EA0000002406 +B1514194539047N00607063EA0000002404 +B1514214539057N00607073EA0000002403 +B1514244539066N00607082EA0000002401 +B1514264539076N00607092EA0000002399 +B1514284539086N00607102EA0000002397 +B1514304539097N00607111EA0000002396 +B1514324539109N00607118EA0000002396 +B1514344539119N00607124EA0000002398 +B1514364539130N00607131EA0000002398 +B1514384539141N00607138EA0000002399 +B1514404539151N00607144EA0000002400 +B1514424539161N00607148EA0000002399 +B1514444539170N00607155EA0000002400 +B1514464539176N00607164EA0000002400 +B1514484539179N00607167EA0000002399 +B1514504539191N00607175EA0000002396 +B1514524539201N00607185EA0000002396 +B1514544539211N00607193EA0000002398 +B1514564539221N00607201EA0000002400 +B1514584539229N00607211EA0000002403 +B1515004539234N00607219EA0000002406 +B1515024539240N00607226EA0000002409 +B1515044539247N00607234EA0000002413 +B1515064539254N00607238EA0000002419 +B1515084539259N00607240EA0000002425 +B1515104539265N00607243EA0000002430 +B1515124539271N00607247EA0000002435 +B1515144539278N00607253EA0000002438 +B1515164539285N00607260EA0000002441 +B1515184539292N00607266EA0000002443 +B1515204539297N00607269EA0000002443 +B1515224539305N00607276EA0000002442 +B1515244539314N00607286EA0000002441 +B1515264539322N00607293EA0000002439 +B1515284539332N00607300EA0000002436 +B1515304539343N00607309EA0000002432 +B1515324539355N00607317EA0000002430 +B1515344539366N00607326EA0000002428 +B1515364539377N00607337EA0000002426 +B1515384539389N00607346EA0000002424 +B1515404539405N00607359EA0000002418 +B1515424539416N00607368EA0000002414 +B1515444539426N00607376EA0000002409 +B1515464539437N00607384EA0000002404 +B1515484539447N00607390EA0000002400 +B1515504539458N00607396EA0000002396 +B1515524539468N00607402EA0000002392 +B1515544539479N00607407EA0000002387 +B1515564539490N00607411EA0000002381 +B1515584539502N00607416EA0000002376 +B1516004539513N00607422EA0000002371 +B1516024539524N00607428EA0000002366 +B1516054539537N00607434EA0000002362 +B1516074539549N00607439EA0000002357 +B1516094539561N00607443EA0000002352 +B1516114539574N00607448EA0000002347 +B1516134539587N00607453EA0000002343 +B1516154539599N00607459EA0000002339 +B1516174539611N00607465EA0000002335 +B1516194539624N00607471EA0000002331 +B1516214539636N00607477EA0000002326 +B1516234539649N00607482EA0000002323 +B1516254539661N00607489EA0000002319 +B1516274539673N00607495EA0000002315 +B1516294539679N00607498EA0000002310 +B1516314539699N00607509EA0000002303 +B1516334539715N00607518EA0000002298 +B1516354539731N00607526EA0000002293 +B1516374539745N00607533EA0000002289 +B1516394539760N00607541EA0000002283 +B1516414539775N00607548EA0000002277 +B1516434539791N00607554EA0000002273 +B1516454539805N00607562EA0000002268 +B1516474539819N00607569EA0000002262 +B1516494539835N00607576EA0000002256 +B1516514539851N00607584EA0000002250 +B1516534539865N00607593EA0000002246 +B1516554539879N00607602EA0000002242 +B1516574539893N00607610EA0000002237 +B1516594539908N00607618EA0000002233 +B1517014539921N00607628EA0000002228 +B1517034539935N00607636EA0000002224 +B1517054539949N00607645EA0000002220 +B1517074539962N00607655EA0000002217 +B1517094539975N00607665EA0000002213 +B1517114539989N00607676EA0000002208 +B1517134540002N00607686EA0000002204 +B1517154540016N00607696EA0000002199 +B1517174540029N00607706EA0000002195 +B1517194540043N00607715EA0000002190 +B1517214540063N00607729EA0000002184 +B1517234540077N00607739EA0000002179 +B1517254540090N00607749EA0000002174 +B1517274540104N00607758EA0000002170 +B1517294540118N00607767EA0000002165 +B1517314540131N00607778EA0000002160 +B1517334540145N00607788EA0000002155 +B1517354540158N00607798EA0000002150 +B1517374540172N00607809EA0000002145 +B1517394540185N00607819EA0000002140 +B1517414540199N00607829EA0000002136 +B1517434540212N00607838EA0000002132 +B1517464540225N00607848EA0000002128 +B1517484540238N00607858EA0000002123 +B1517504540252N00607868EA0000002119 +B1517524540265N00607877EA0000002115 +B1517544540278N00607887EA0000002112 +B1517564540290N00607897EA0000002108 +B1517584540303N00607906EA0000002103 +B1518004540315N00607916EA0000002099 +B1518024540327N00607927EA0000002094 +B1518044540340N00607939EA0000002089 +B1518064540351N00607950EA0000002084 +B1518084540364N00607962EA0000002079 +B1518104540375N00607977EA0000002075 +B1518124540385N00607993EA0000002071 +B1518144540394N00608010EA0000002067 +B1518164540404N00608027EA0000002062 +B1518184540415N00608043EA0000002058 +B1518204540426N00608058EA0000002053 +B1518224540437N00608073EA0000002047 +B1518244540448N00608087EA0000002042 +B1518264540460N00608102EA0000002037 +B1518284540472N00608117EA0000002032 +B1518304540484N00608132EA0000002027 +B1518324540495N00608147EA0000002021 +B1518344540507N00608163EA0000002016 +B1518364540517N00608181EA0000002011 +B1518384540528N00608198EA0000002006 +B1518404540539N00608216EA0000002001 +B1518424540550N00608232EA0000001996 +B1518444540562N00608248EA0000001991 +B1518464540574N00608263EA0000001985 +B1518484540585N00608278EA0000001980 +B1518504540597N00608293EA0000001975 +B1518524540608N00608308EA0000001970 +B1518544540620N00608323EA0000001964 +B1518564540632N00608338EA0000001958 +B1518584540643N00608354EA0000001952 +B1519004540661N00608378EA0000001946 +B1519024540672N00608394EA0000001942 +B1519044540684N00608410EA0000001938 +B1519064540695N00608426EA0000001934 +B1519084540706N00608441EA0000001930 +B1519104540717N00608457EA0000001926 +B1519124540729N00608473EA0000001922 +B1519144540740N00608488EA0000001918 +B1519164540751N00608503EA0000001915 +B1519184540762N00608517EA0000001912 +B1519204540773N00608531EA0000001909 +B1519224540785N00608544EA0000001906 +B1519244540796N00608558EA0000001902 +B1519274540807N00608572EA0000001899 +B1519294540817N00608586EA0000001895 +B1519314540828N00608600EA0000001892 +B1519334540839N00608614EA0000001888 +B1519354540848N00608630EA0000001884 +B1519374540858N00608645EA0000001879 +B1519394540869N00608658EA0000001874 +B1519414540879N00608672EA0000001869 +B1519434540890N00608685EA0000001864 +B1519454540901N00608697EA0000001860 +B1519474540911N00608709EA0000001855 +B1519494540922N00608722EA0000001850 +B1519514540933N00608735EA0000001845 +B1519534540944N00608750EA0000001841 +B1519554540954N00608763EA0000001838 +B1519574540962N00608774EA0000001835 +B1519594540972N00608785EA0000001831 +B1520014540982N00608798EA0000001827 +B1520034540993N00608811EA0000001822 +B1520054541002N00608824EA0000001819 +B1520074541012N00608836EA0000001816 +B1520094541022N00608847EA0000001813 +B1520114541033N00608859EA0000001810 +B1520134541043N00608872EA0000001808 +B1520154541052N00608886EA0000001806 +B1520174541062N00608898EA0000001802 +B1520194541071N00608909EA0000001798 +B1520214541079N00608921EA0000001793 +B1520234541089N00608933EA0000001787 +B1520254541099N00608946EA0000001782 +B1520274541110N00608958EA0000001777 +B1520294541122N00608970EA0000001772 +B1520314541133N00608983EA0000001767 +B1520334541145N00608994EA0000001764 +B1520354541155N00609004EA0000001759 +B1520374541165N00609015EA0000001753 +B1520394541175N00609025EA0000001746 +B1520414541192N00609040EA0000001739 +B1520434541203N00609052EA0000001734 +B1520454541213N00609064EA0000001729 +B1520474541225N00609076EA0000001725 +B1520494541236N00609088EA0000001721 +B1520514541247N00609100EA0000001718 +B1520534541258N00609111EA0000001717 +B1520554541269N00609122EA0000001716 +B1520574541276N00609134EA0000001717 +B1520594541281N00609143EA0000001715 +B1521014541289N00609157EA0000001712 +B1521034541297N00609170EA0000001713 +B1521064541305N00609177EA0000001712 +B1521084541314N00609187EA0000001710 +B1521104541323N00609199EA0000001709 +B1521124541333N00609208EA0000001708 +B1521144541342N00609215EA0000001708 +B1521164541351N00609224EA0000001706 +B1521184541362N00609233EA0000001704 +B1521204541373N00609239EA0000001704 +B1521224541383N00609246EA0000001704 +B1521244541394N00609253EA0000001702 +B1521264541405N00609259EA0000001701 +B1521284541414N00609265EA0000001701 +B1521304541423N00609272EA0000001700 +B1521324541437N00609285EA0000001700 +B1521344541447N00609290EA0000001699 +B1521364541456N00609293EA0000001699 +B1521384541464N00609299EA0000001698 +B1521404541473N00609304EA0000001696 +B1521424541483N00609308EA0000001693 +B1521444541492N00609315EA0000001690 +B1521464541500N00609322EA0000001686 +B1521484541509N00609327EA0000001681 +B1521504541519N00609332EA0000001677 +B1521524541527N00609337EA0000001673 +B1521544541537N00609342EA0000001669 +B1521574541548N00609349EA0000001666 +B1521594541558N00609357EA0000001663 +B1522014541569N00609362EA0000001662 +B1522034541579N00609369EA0000001662 +B1522054541591N00609375EA0000001662 +B1522074541602N00609381EA0000001662 +B1522094541613N00609388EA0000001663 +B1522114541624N00609394EA0000001663 +B1522134541636N00609401EA0000001663 +B1522154541649N00609408EA0000001664 +B1522174541660N00609414EA0000001666 +B1522194541672N00609421EA0000001668 +B1522214541678N00609424EA0000001670 +B1522234541695N00609434EA0000001673 +B1522254541704N00609439EA0000001677 +B1522274541712N00609444EA0000001682 +B1522294541718N00609449EA0000001688 +B1522314541726N00609453EA0000001695 +B1522334541732N00609458EA0000001703 +B1522354541735N00609460EA0000001712 +B1522374541738N00609460EA0000001720 +B1522394541743N00609459EA0000001727 +B1522414541747N00609459EA0000001736 +B1522434541750N00609458EA0000001744 +B1522454541754N00609458EA0000001751 +B1522474541758N00609457EA0000001757 +B1522494541760N00609451EA0000001764 +B1522514541759N00609442EA0000001769 +B1522534541758N00609436EA0000001774 +B1522554541755N00609427EA0000001777 +B1522574541750N00609416EA0000001780 +B1522594541747N00609404EA0000001781 +B1523014541750N00609403EA0000001782 +B1523034541752N00609413EA0000001783 +B1523054541755N00609423EA0000001786 +B1523074541756N00609429EA0000001790 +B1523094541760N00609432EA0000001792 +B1523114541765N00609437EA0000001795 +B1523134541766N00609445EA0000001800 +B1523154541766N00609450EA0000001803 +B1523174541771N00609453EA0000001806 +B1523194541772N00609454EA0000001810 +B1523214541771N00609454EA0000001813 +B1523234541776N00609455EA0000001816 +B1523254541780N00609459EA0000001820 +B1523274541781N00609463EA0000001826 +B1523294541784N00609465EA0000001831 +B1523314541789N00609468EA0000001836 +B1523334541792N00609472EA0000001840 +B1523354541796N00609475EA0000001842 +B1523384541803N00609474EA0000001846 +B1523404541808N00609473EA0000001850 +B1523424541810N00609472EA0000001854 +B1523444541813N00609467EA0000001858 +B1523464541815N00609461EA0000001863 +B1523484541815N00609456EA0000001867 +B1523504541818N00609452EA0000001870 +B1523524541821N00609448EA0000001873 +B1523544541825N00609446EA0000001877 +B1523564541828N00609445EA0000001880 +B1523584541832N00609441EA0000001885 +B1524004541837N00609439EA0000001889 +B1524024541839N00609439EA0000001893 +B1524044541846N00609438EA0000001895 +B1524064541851N00609439EA0000001896 +B1524084541857N00609440EA0000001897 +B1524104541864N00609441EA0000001899 +B1524124541871N00609440EA0000001902 +B1524144541876N00609439EA0000001906 +B1524164541881N00609438EA0000001910 +B1524184541886N00609439EA0000001913 +B1524204541890N00609441EA0000001917 +B1524224541893N00609441EA0000001921 +B1524244541896N00609442EA0000001925 +B1524264541899N00609441EA0000001929 +B1524284541901N00609442EA0000001934 +B1524304541902N00609443EA0000001937 +B1524324541904N00609446EA0000001939 +B1524344541908N00609449EA0000001942 +B1524364541911N00609452EA0000001945 +B1524384541914N00609454EA0000001947 +B1524404541918N00609459EA0000001948 +B1524424541921N00609461EA0000001950 +B1524444541924N00609462EA0000001950 +B1524464541928N00609465EA0000001950 +B1524484541933N00609467EA0000001952 +B1524504541938N00609468EA0000001952 +B1524524541944N00609469EA0000001952 +B1524544541955N00609471EA0000001951 +B1524564541962N00609472EA0000001952 +B1524584541965N00609468EA0000001952 +B1525004541965N00609458EA0000001951 +B1525024541961N00609444EA0000001951 +B1525044541947N00609435EA0000001951 +B1525064541930N00609434EA0000001951 +B1525084541915N00609438EA0000001952 +B1525104541900N00609443EA0000001954 +B1525124541887N00609448EA0000001956 +B1525144541875N00609452EA0000001957 +B1525174541863N00609455EA0000001956 +B1525194541849N00609458EA0000001957 +B1525214541836N00609462EA0000001958 +B1525234541822N00609464EA0000001959 +B1525254541808N00609466EA0000001961 +B1525274541794N00609466EA0000001962 +B1525294541780N00609466EA0000001962 +B1525314541766N00609467EA0000001961 +B1525334541753N00609466EA0000001961 +B1525354541739N00609464EA0000001959 +B1525374541725N00609470EA0000001956 +B1525394541714N00609485EA0000001954 +B1525414541713N00609496EA0000001954 +B1525434541718N00609497EA0000001955 +B1525454541723N00609497EA0000001957 +B1525474541727N00609495EA0000001957 +B1525494541730N00609494EA0000001956 +B1525514541736N00609492EA0000001957 +B1525534541741N00609488EA0000001959 +B1525554541743N00609485EA0000001962 +B1525574541746N00609481EA0000001965 +B1525594541750N00609478EA0000001968 +B1526014541753N00609477EA0000001970 +B1526034541757N00609477EA0000001972 +B1526054541762N00609477EA0000001972 +B1526074541765N00609475EA0000001972 +B1526094541769N00609476EA0000001972 +B1526114541774N00609477EA0000001971 +B1526134541779N00609480EA0000001972 +B1526154541785N00609482EA0000001974 +B1526174541791N00609483EA0000001977 +B1526194541796N00609483EA0000001980 +B1526214541801N00609481EA0000001982 +B1526234541805N00609478EA0000001983 +B1526254541811N00609476EA0000001983 +B1526274541817N00609475EA0000001981 +B1526294541827N00609476EA0000001977 +B1526314541835N00609476EA0000001973 +B1526334541844N00609477EA0000001969 +B1526354541851N00609480EA0000001966 +B1526374541858N00609483EA0000001963 +B1526394541868N00609483EA0000001960 +B1526414541874N00609484EA0000001957 +B1526434541878N00609487EA0000001955 +B1526454541886N00609488EA0000001952 +B1526474541898N00609486EA0000001949 +B1526494541909N00609484EA0000001948 +B1526514541918N00609484EA0000001948 +B1526534541927N00609486EA0000001947 +B1526564541936N00609486EA0000001947 +B1526584541946N00609487EA0000001946 +B1527004541955N00609489EA0000001945 +B1527024541963N00609491EA0000001944 +B1527044541971N00609492EA0000001943 +B1527064541978N00609494EA0000001943 +B1527084541984N00609495EA0000001944 +B1527104541989N00609495EA0000001947 +B1527124541996N00609496EA0000001945 +B1527144542004N00609498EA0000001945 +B1527164542008N00609502EA0000001946 +B1527184542011N00609505EA0000001945 +B1527204542016N00609506EA0000001945 +B1527224542023N00609504EA0000001946 +B1527244542026N00609502EA0000001947 +B1527264542029N00609502EA0000001946 +B1527284542034N00609503EA0000001946 +B1527304542042N00609505EA0000001947 +B1527324542046N00609507EA0000001947 +B1527344542050N00609508EA0000001947 +B1527364542059N00609510EA0000001946 +B1527384542068N00609511EA0000001948 +B1527404542074N00609512EA0000001951 +B1527424542078N00609513EA0000001952 +B1527444542083N00609513EA0000001953 +B1527464542089N00609513EA0000001955 +B1527484542095N00609516EA0000001956 +B1527504542101N00609517EA0000001955 +B1527524542108N00609517EA0000001956 +B1527544542114N00609519EA0000001957 +B1527564542120N00609523EA0000001955 +B1527584542128N00609524EA0000001954 +B1528004542135N00609525EA0000001954 +B1528024542140N00609527EA0000001954 +B1528044542144N00609529EA0000001952 +B1528064542151N00609528EA0000001949 +B1528084542159N00609530EA0000001948 +B1528104542168N00609535EA0000001943 +B1528124542176N00609537EA0000001940 +B1528144542183N00609539EA0000001937 +B1528164542189N00609540EA0000001934 +B1528184542196N00609539EA0000001930 +B1528204542205N00609539EA0000001924 +B1528224542213N00609538EA0000001919 +B1528244542221N00609539EA0000001914 +B1528264542230N00609539EA0000001908 +B1528284542242N00609539EA0000001901 +B1528304542254N00609540EA0000001895 +B1528324542262N00609541EA0000001890 +B1528354542271N00609542EA0000001885 +B1528374542284N00609544EA0000001879 +B1528394542296N00609545EA0000001874 +B1528414542305N00609545EA0000001871 +B1528434542313N00609547EA0000001868 +B1528454542324N00609548EA0000001864 +B1528474542335N00609550EA0000001861 +B1528494542344N00609555EA0000001860 +B1528514542353N00609559EA0000001859 +B1528534542363N00609562EA0000001858 +B1528554542372N00609567EA0000001858 +B1528574542382N00609570EA0000001857 +B1528594542392N00609572EA0000001857 +B1529014542402N00609574EA0000001855 +B1529034542413N00609577EA0000001853 +B1529054542423N00609581EA0000001851 +B1529074542432N00609585EA0000001849 +B1529094542442N00609589EA0000001846 +B1529114542452N00609595EA0000001842 +B1529134542462N00609600EA0000001839 +B1529154542471N00609605EA0000001836 +B1529174542480N00609612EA0000001831 +B1529194542491N00609618EA0000001826 +B1529214542502N00609623EA0000001821 +B1529234542512N00609626EA0000001817 +B1529254542520N00609629EA0000001814 +B1529274542529N00609631EA0000001812 +B1529294542542N00609634EA0000001811 +B1529314542553N00609636EA0000001811 +B1529334542559N00609640EA0000001813 +B1529354542564N00609644EA0000001818 +B1529374542568N00609647EA0000001824 +B1529394542571N00609647EA0000001830 +B1529414542575N00609649EA0000001835 +B1529434542579N00609652EA0000001839 +B1529454542581N00609651EA0000001843 +B1529474542582N00609645EA0000001846 +B1529494542580N00609637EA0000001849 +B1529514542568N00609627EA0000001854 +B1529534542557N00609625EA0000001855 +B1529554542543N00609631EA0000001856 +B1529574542533N00609645EA0000001857 +B1529594542531N00609661EA0000001857 +B1530014542536N00609672EA0000001859 +B1530034542543N00609684EA0000001865 +B1530054542553N00609689EA0000001868 +B1530074542562N00609694EA0000001869 +B1530094542572N00609697EA0000001872 +B1530114542581N00609699EA0000001877 +B1530134542589N00609701EA0000001882 +B1530164542596N00609702EA0000001886 +B1530184542605N00609704EA0000001887 +B1530204542616N00609708EA0000001889 +B1530224542624N00609710EA0000001890 +B1530244542631N00609711EA0000001890 +B1530264542639N00609715EA0000001888 +B1530284542648N00609720EA0000001886 +B1530304542656N00609724EA0000001882 +B1530324542664N00609731EA0000001878 +B1530344542675N00609738EA0000001874 +B1530364542686N00609745EA0000001871 +B1530384542696N00609751EA0000001868 +B1530404542706N00609758EA0000001863 +B1530424542718N00609765EA0000001859 +B1530444542729N00609773EA0000001856 +B1530464542738N00609780EA0000001852 +B1530484542748N00609787EA0000001848 +B1530504542759N00609795EA0000001844 +B1530524542770N00609801EA0000001842 +B1530544542780N00609806EA0000001839 +B1530564542790N00609813EA0000001836 +B1530584542800N00609818EA0000001834 +B1531004542810N00609823EA0000001831 +B1531024542820N00609828EA0000001829 +B1531044542830N00609834EA0000001825 +B1531064542840N00609839EA0000001821 +B1531084542850N00609843EA0000001817 +B1531104542860N00609848EA0000001813 +B1531124542870N00609854EA0000001809 +B1531144542880N00609860EA0000001804 +B1531164542891N00609865EA0000001801 +B1531184542901N00609870EA0000001798 +B1531204542911N00609875EA0000001794 +B1531224542921N00609882EA0000001791 +B1531244542931N00609889EA0000001788 +B1531264542941N00609895EA0000001786 +B1531284542950N00609901EA0000001785 +B1531304542960N00609908EA0000001782 +B1531324542976N00609918EA0000001779 +B1531344542986N00609924EA0000001777 +B1531364542997N00609931EA0000001774 +B1531384543008N00609935EA0000001772 +B1531404543018N00609940EA0000001770 +B1531424543028N00609945EA0000001769 +B1531444543037N00609948EA0000001770 +B1531464543044N00609951EA0000001771 +B1531484543050N00609957EA0000001771 +B1531504543059N00609960EA0000001771 +B1531524543069N00609963EA0000001770 +B1531544543078N00609969EA0000001767 +B1531574543088N00609975EA0000001764 +B1531594543099N00609981EA0000001762 +B1532014543110N00609984EA0000001759 +B1532034543121N00609988EA0000001756 +B1532054543133N00609994EA0000001752 +B1532074543144N00609999EA0000001748 +B1532094543154N00610003EA0000001745 +B1532114543165N00610009EA0000001741 +B1532134543176N00610014EA0000001738 +B1532154543187N00610019EA0000001735 +B1532174543198N00610025EA0000001733 +B1532194543209N00610031EA0000001730 +B1532214543220N00610038EA0000001727 +B1532234543231N00610043EA0000001725 +B1532254543241N00610048EA0000001722 +B1532274543252N00610054EA0000001720 +B1532294543263N00610060EA0000001717 +B1532314543274N00610066EA0000001714 +B1532334543284N00610072EA0000001712 +B1532354543295N00610080EA0000001709 +B1532374543305N00610088EA0000001706 +B1532394543316N00610095EA0000001704 +B1532414543327N00610101EA0000001702 +B1532434543337N00610106EA0000001699 +B1532454543349N00610112EA0000001697 +B1532474543360N00610117EA0000001697 +B1532494543370N00610123EA0000001695 +B1532514543380N00610128EA0000001693 +B1532534543392N00610133EA0000001691 +B1532554543403N00610139EA0000001689 +B1532574543414N00610144EA0000001687 +B1532594543425N00610150EA0000001685 +B1533014543437N00610157EA0000001683 +B1533034543448N00610164EA0000001682 +B1533054543459N00610170EA0000001680 +B1533074543470N00610175EA0000001678 +B1533094543482N00610182EA0000001675 +B1533114543499N00610189EA0000001671 +B1533134543511N00610195EA0000001669 +B1533154543523N00610200EA0000001667 +B1533174543536N00610205EA0000001666 +B1533194543548N00610209EA0000001665 +B1533214543559N00610214EA0000001663 +B1533234543571N00610219EA0000001663 +B1533254543582N00610225EA0000001661 +B1533274543592N00610232EA0000001658 +B1533294543603N00610237EA0000001653 +B1533314543615N00610241EA0000001651 +B1533334543627N00610246EA0000001649 +B1533364543639N00610251EA0000001645 +B1533384543652N00610253EA0000001641 +B1533404543665N00610256EA0000001638 +B1533424543676N00610260EA0000001634 +B1533444543689N00610262EA0000001630 +B1533464543701N00610262EA0000001627 +B1533484543712N00610263EA0000001626 +B1533504543722N00610265EA0000001624 +B1533524543733N00610267EA0000001622 +B1533544543745N00610270EA0000001620 +B1533564543757N00610274EA0000001620 +B1533584543768N00610279EA0000001622 +B1534004543785N00610287EA0000001623 +B1534024543796N00610292EA0000001626 +B1534044543804N00610299EA0000001629 +B1534064543810N00610305EA0000001631 +B1534084543817N00610311EA0000001634 +B1534104543823N00610316EA0000001638 +B1534124543829N00610322EA0000001640 +B1534144543835N00610327EA0000001643 +B1534164543840N00610327EA0000001646 +B1534184543844N00610324EA0000001649 +B1534204543846N00610320EA0000001651 +B1534234543845N00610314EA0000001655 +B1534254543844N00610309EA0000001659 +B1534274543845N00610304EA0000001661 +B1534294543850N00610301EA0000001663 +B1534314543856N00610305EA0000001667 +B1534334543862N00610315EA0000001669 +B1534354543864N00610332EA0000001671 +B1534374543858N00610352EA0000001673 +B1534394543845N00610360EA0000001676 +B1534414543836N00610354EA0000001678 +B1534434543836N00610344EA0000001681 +B1534454543846N00610345EA0000001685 +B1534474543854N00610359EA0000001690 +B1534494543853N00610379EA0000001693 +B1534514543845N00610396EA0000001698 +B1534534543833N00610399EA0000001701 +B1534554543825N00610387EA0000001704 +B1534574543830N00610380EA0000001708 +B1534594543839N00610384EA0000001712 +B1535014543846N00610398EA0000001716 +B1535034543848N00610416EA0000001719 +B1535054543844N00610434EA0000001723 +B1535074543831N00610443EA0000001726 +B1535094543820N00610438EA0000001728 +B1535114543821N00610427EA0000001731 +B1535134543830N00610426EA0000001734 +B1535154543838N00610436EA0000001738 +B1535174543843N00610453EA0000001742 +B1535194543843N00610472EA0000001746 +B1535214543836N00610489EA0000001750 +B1535234543826N00610494EA0000001755 +B1535254543819N00610489EA0000001758 +B1535274543818N00610479EA0000001762 +B1535294543825N00610474EA0000001765 +B1535314543834N00610481EA0000001769 +B1535334543840N00610496EA0000001774 +B1535354543839N00610524EA0000001782 +B1535374543831N00610536EA0000001788 +B1535394543822N00610536EA0000001793 +B1535414543816N00610528EA0000001798 +B1535434543817N00610518EA0000001802 +B1535454543824N00610516EA0000001807 +B1535474543833N00610524EA0000001813 +B1535494543840N00610538EA0000001819 +B1535514543843N00610558EA0000001824 +B1535534543839N00610578EA0000001830 +B1535554543830N00610583EA0000001835 +B1535574543822N00610577EA0000001840 +B1536004543820N00610567EA0000001846 +B1536024543827N00610563EA0000001852 +B1536044543837N00610569EA0000001860 +B1536064543846N00610582EA0000001866 +B1536084543851N00610600EA0000001873 +B1536104543848N00610620EA0000001880 +B1536124543841N00610631EA0000001889 +B1536144543831N00610628EA0000001897 +B1536164543828N00610618EA0000001904 +B1536184543832N00610609EA0000001911 +B1536204543844N00610609EA0000001918 +B1536224543855N00610620EA0000001926 +B1536244543860N00610639EA0000001934 +B1536264543857N00610658EA0000001942 +B1536284543847N00610664EA0000001950 +B1536304543838N00610658EA0000001958 +B1536324543836N00610647EA0000001966 +B1536344543842N00610639EA0000001973 +B1536364543853N00610641EA0000001980 +B1536384543863N00610654EA0000001986 +B1536404543865N00610675EA0000001992 +B1536424543860N00610693EA0000001999 +B1536444543852N00610695EA0000002006 +B1536464543846N00610685EA0000002014 +B1536484543847N00610675EA0000002022 +B1536504543854N00610669EA0000002029 +B1536524543863N00610672EA0000002037 +B1536544543871N00610685EA0000002044 +B1536564543873N00610702EA0000002051 +B1536584543869N00610722EA0000002058 +B1537004543859N00610734EA0000002064 +B1537024543849N00610731EA0000002070 +B1537044543845N00610719EA0000002078 +B1537064543847N00610711EA0000002086 +B1537084543850N00610704EA0000002094 +B1537104543857N00610702EA0000002102 +B1537124543865N00610709EA0000002110 +B1537144543868N00610735EA0000002122 +B1537164543861N00610754EA0000002129 +B1537184543851N00610766EA0000002137 +B1537204543842N00610768EA0000002145 +B1537224543834N00610764EA0000002152 +B1537244543830N00610755EA0000002160 +B1537264543834N00610749EA0000002166 +B1537284543843N00610754EA0000002173 +B1537304543848N00610768EA0000002180 +B1537324543848N00610789EA0000002187 +B1537344543841N00610807EA0000002194 +B1537374543832N00610817EA0000002202 +B1537394543821N00610817EA0000002209 +B1537414543812N00610816EA0000002216 +B1537434543805N00610809EA0000002221 +B1537454543806N00610796EA0000002228 +B1537474543815N00610791EA0000002234 +B1537494543824N00610800EA0000002243 +B1537514543829N00610816EA0000002251 +B1537534543828N00610835EA0000002259 +B1537554543820N00610850EA0000002266 +B1537574543806N00610851EA0000002271 +B1537594543798N00610846EA0000002277 +B1538014543795N00610841EA0000002281 +B1538034543793N00610825EA0000002286 +B1538054543800N00610817EA0000002292 +B1538074543811N00610821EA0000002299 +B1538094543817N00610835EA0000002306 +B1538114543817N00610854EA0000002313 +B1538134543812N00610873EA0000002321 +B1538154543802N00610886EA0000002328 +B1538174543792N00610887EA0000002334 +B1538194543784N00610879EA0000002339 +B1538214543783N00610868EA0000002343 +B1538234543789N00610862EA0000002348 +B1538254543799N00610868EA0000002355 +B1538274543810N00610882EA0000002365 +B1538294543813N00610897EA0000002374 +B1538314543814N00610913EA0000002382 +B1538334543810N00610931EA0000002389 +B1538354543801N00610946EA0000002396 +B1538374543789N00610946EA0000002401 +B1538394543783N00610935EA0000002406 +B1538414543785N00610924EA0000002412 +B1538434543791N00610918EA0000002418 +B1538454543800N00610919EA0000002427 +B1538474543807N00610925EA0000002435 +B1538494543814N00610938EA0000002443 +B1538514543815N00610965EA0000002456 +B1538534543807N00610979EA0000002465 +B1538554543796N00610980EA0000002472 +B1538574543790N00610973EA0000002478 +B1538594543788N00610963EA0000002483 +B1539014543792N00610954EA0000002489 +B1539034543801N00610951EA0000002497 +B1539054543810N00610955EA0000002505 +B1539074543817N00610965EA0000002513 +B1539094543822N00610982EA0000002520 +B1539114543821N00610999EA0000002528 +B1539134543814N00611012EA0000002535 +B1539154543803N00611014EA0000002542 +B1539184543796N00611005EA0000002548 +B1539204543796N00610993EA0000002555 +B1539224543802N00610985EA0000002560 +B1539244543813N00610981EA0000002567 +B1539264543824N00610986EA0000002574 +B1539284543831N00610997EA0000002579 +B1539304543837N00611013EA0000002584 +B1539324543840N00611031EA0000002588 +B1539344543843N00611044EA0000002592 +B1539364543849N00611051EA0000002593 +B1539384543858N00611056EA0000002593 +B1539404543867N00611057EA0000002591 +B1539424543877N00611058EA0000002590 +B1539444543887N00611064EA0000002588 +B1539464543898N00611071EA0000002587 +B1539484543907N00611072EA0000002587 +B1539504543914N00611073EA0000002589 +B1539524543920N00611075EA0000002589 +B1539544543927N00611078EA0000002588 +B1539564543934N00611079EA0000002588 +B1539584543940N00611081EA0000002587 +B1540004543948N00611083EA0000002585 +B1540024543955N00611085EA0000002583 +B1540044543964N00611087EA0000002580 +B1540064543972N00611088EA0000002578 +B1540084543978N00611083EA0000002576 +B1540104543984N00611076EA0000002574 +B1540124543992N00611071EA0000002572 +B1540144543999N00611065EA0000002571 +B1540164544005N00611057EA0000002570 +B1540184544012N00611049EA0000002568 +B1540204544020N00611041EA0000002567 +B1540224544026N00611032EA0000002566 +B1540244544034N00611026EA0000002566 +B1540264544043N00611021EA0000002566 +B1540284544050N00611015EA0000002567 +B1540304544058N00611009EA0000002567 +B1540324544071N00611001EA0000002565 +B1540344544078N00610995EA0000002563 +B1540364544086N00610990EA0000002561 +B1540384544097N00610986EA0000002561 +B1540404544105N00610981EA0000002560 +B1540424544113N00610977EA0000002559 +B1540444544123N00610975EA0000002557 +B1540464544132N00610972EA0000002555 +B1540484544140N00610967EA0000002552 +B1540504544151N00610962EA0000002547 +B1540524544163N00610956EA0000002543 +B1540544544175N00610949EA0000002541 +B1540564544187N00610945EA0000002537 +B1540594544200N00610941EA0000002534 +B1541014544214N00610935EA0000002532 +B1541034544228N00610929EA0000002531 +B1541054544239N00610927EA0000002529 +B1541074544251N00610921EA0000002526 +B1541094544264N00610913EA0000002523 +B1541114544278N00610907EA0000002522 +B1541134544290N00610903EA0000002520 +B1541154544304N00610899EA0000002517 +B1541174544318N00610893EA0000002515 +B1541194544331N00610887EA0000002515 +B1541214544342N00610880EA0000002513 +B1541234544354N00610873EA0000002511 +B1541254544369N00610867EA0000002510 +B1541274544381N00610860EA0000002510 +B1541294544394N00610852EA0000002509 +B1541314544407N00610846EA0000002509 +B1541334544418N00610839EA0000002509 +B1541354544429N00610830EA0000002509 +B1541374544442N00610826EA0000002510 +B1541394544454N00610823EA0000002511 +B1541414544465N00610818EA0000002513 +B1541434544477N00610811EA0000002514 +B1541454544488N00610804EA0000002515 +B1541474544499N00610798EA0000002516 +B1541494544510N00610794EA0000002517 +B1541514544522N00610789EA0000002518 +B1541534544533N00610784EA0000002520 +B1541554544544N00610783EA0000002520 +B1541574544556N00610780EA0000002519 +B1541594544568N00610777EA0000002519 +B1542014544580N00610774EA0000002519 +B1542034544591N00610771EA0000002518 +B1542054544603N00610766EA0000002516 +B1542074544616N00610763EA0000002514 +B1542094544628N00610760EA0000002511 +B1542114544640N00610756EA0000002510 +B1542134544655N00610741EA0000002507 +B1542154544666N00610733EA0000002503 +B1542174544678N00610725EA0000002499 +B1542194544687N00610713EA0000002496 +B1542214544696N00610703EA0000002492 +B1542234544706N00610697EA0000002487 +B1542254544717N00610693EA0000002481 +B1542274544727N00610687EA0000002476 +B1542294544737N00610681EA0000002471 +B1542314544747N00610676EA0000002466 +B1542334544757N00610671EA0000002460 +B1542354544767N00610667EA0000002456 +B1542374544775N00610666EA0000002451 +B1542404544784N00610665EA0000002444 +B1542424544793N00610662EA0000002437 +B1542444544801N00610659EA0000002433 +B1542464544807N00610654EA0000002426 +B1542484544813N00610645EA0000002418 +B1542504544821N00610634EA0000002413 +B1542524544828N00610623EA0000002408 +B1542544544836N00610613EA0000002405 +B1542564544845N00610605EA0000002403 +B1542584544854N00610597EA0000002401 +B1543004544861N00610589EA0000002399 +B1543024544870N00610582EA0000002395 +B1543044544880N00610574EA0000002393 +B1543064544890N00610565EA0000002392 +B1543084544900N00610558EA0000002390 +B1543104544911N00610551EA0000002388 +B1543124544922N00610544EA0000002388 +B1543144544931N00610535EA0000002388 +B1543164544940N00610528EA0000002387 +B1543184544950N00610520EA0000002385 +B1543204544960N00610513EA0000002385 +B1543224544970N00610507EA0000002385 +B1543244544979N00610499EA0000002383 +B1543264544990N00610491EA0000002381 +B1543284545001N00610483EA0000002381 +B1543304545012N00610477EA0000002382 +B1543324545022N00610470EA0000002384 +B1543344545029N00610465EA0000002384 +B1543364545038N00610462EA0000002383 +B1543384545047N00610458EA0000002382 +B1543404545056N00610455EA0000002381 +B1543424545064N00610454EA0000002379 +B1543444545075N00610451EA0000002379 +B1543464545085N00610448EA0000002379 +B1543484545094N00610446EA0000002378 +B1543504545103N00610445EA0000002375 +B1543524545115N00610444EA0000002372 +B1543544545133N00610446EA0000002371 +B1543564545142N00610449EA0000002370 +B1543584545152N00610451EA0000002369 +B1544004545164N00610447EA0000002369 +B1544024545174N00610447EA0000002370 +B1544044545182N00610451EA0000002372 +B1544064545189N00610452EA0000002371 +B1544084545195N00610450EA0000002369 +B1544104545204N00610447EA0000002369 +B1544124545213N00610442EA0000002370 +B1544144545221N00610438EA0000002372 +B1544164545230N00610437EA0000002375 +B1544194545238N00610435EA0000002377 +B1544214545245N00610429EA0000002377 +B1544234545255N00610421EA0000002379 +B1544254545262N00610413EA0000002380 +B1544274545270N00610405EA0000002380 +B1544294545277N00610396EA0000002378 +B1544314545286N00610390EA0000002375 +B1544334545297N00610386EA0000002372 +B1544354545307N00610381EA0000002369 +B1544374545316N00610376EA0000002365 +B1544394545326N00610372EA0000002362 +B1544414545336N00610367EA0000002359 +B1544434545344N00610361EA0000002357 +B1544454545354N00610357EA0000002354 +B1544474545364N00610353EA0000002352 +B1544494545373N00610348EA0000002348 +B1544514545384N00610343EA0000002345 +B1544534545395N00610340EA0000002343 +B1544554545405N00610336EA0000002340 +B1544574545414N00610333EA0000002336 +B1544594545425N00610331EA0000002332 +B1545014545436N00610329EA0000002328 +B1545034545446N00610328EA0000002324 +B1545054545456N00610328EA0000002319 +B1545074545467N00610327EA0000002315 +B1545094545476N00610327EA0000002312 +B1545114545485N00610328EA0000002308 +B1545134545495N00610328EA0000002302 +B1545154545507N00610327EA0000002297 +B1545174545519N00610328EA0000002293 +B1545194545533N00610330EA0000002291 +B1545214545545N00610331EA0000002292 +B1545234545555N00610329EA0000002294 +B1545254545559N00610328EA0000002299 +B1545274545559N00610329EA0000002305 +B1545294545561N00610326EA0000002310 +B1545314545561N00610318EA0000002316 +B1545334545551N00610307EA0000002327 +B1545354545541N00610299EA0000002333 +B1545374545524N00610298EA0000002339 +B1545394545508N00610307EA0000002347 +B1545414545497N00610323EA0000002355 +B1545434545491N00610339EA0000002363 +B1545454545492N00610352EA0000002369 +B1545474545497N00610359EA0000002374 +B1545494545501N00610362EA0000002381 +B1545514545503N00610358EA0000002386 +B1545534545502N00610349EA0000002392 +B1545554545496N00610339EA0000002399 +B1545584545486N00610332EA0000002407 +B1546004545475N00610328EA0000002413 +B1546024545460N00610332EA0000002417 +B1546044545445N00610342EA0000002423 +B1546064545435N00610357EA0000002428 +B1546084545431N00610374EA0000002431 +B1546104545433N00610389EA0000002434 +B1546124545439N00610395EA0000002437 +B1546144545444N00610396EA0000002441 +B1546164545447N00610396EA0000002445 +B1546184545449N00610395EA0000002450 +B1546204545452N00610394EA0000002454 +B1546224545455N00610391EA0000002460 +B1546244545456N00610382EA0000002463 +B1546264545453N00610372EA0000002465 +B1546284545452N00610362EA0000002468 +B1546304545454N00610356EA0000002473 +B1546334545456N00610353EA0000002476 +B1546354545460N00610352EA0000002478 +B1546374545465N00610349EA0000002482 +B1546394545470N00610347EA0000002486 +B1546414545475N00610347EA0000002487 +B1546434545481N00610347EA0000002488 +B1546454545487N00610344EA0000002487 +B1546474545494N00610339EA0000002484 +B1546494545502N00610336EA0000002483 +B1546514545509N00610335EA0000002483 +B1546534545517N00610335EA0000002483 +B1546554545525N00610334EA0000002482 +B1546574545534N00610332EA0000002481 +B1546594545545N00610331EA0000002479 +B1547014545556N00610329EA0000002478 +B1547034545568N00610327EA0000002476 +B1547054545579N00610326EA0000002474 +B1547074545591N00610326EA0000002472 +B1547094545603N00610326EA0000002469 +B1547114545615N00610327EA0000002466 +B1547134545626N00610327EA0000002465 +B1547154545637N00610328EA0000002463 +B1547174545649N00610331EA0000002461 +B1547194545662N00610334EA0000002460 +B1547214545674N00610337EA0000002459 +B1547234545686N00610338EA0000002459 +B1547254545698N00610340EA0000002458 +B1547274545711N00610345EA0000002455 +B1547294545723N00610348EA0000002452 +B1547314545736N00610349EA0000002449 +B1547334545748N00610352EA0000002446 +B1547354545760N00610354EA0000002442 +B1547374545773N00610354EA0000002439 +B1547394545786N00610356EA0000002435 +B1547414545798N00610360EA0000002432 +B1547434545811N00610364EA0000002428 +B1547454545825N00610367EA0000002424 +B1547474545845N00610369EA0000002419 +B1547494545852N00610369EA0000002418 +B1547514545872N00610370EA0000002413 +B1547534545886N00610371EA0000002411 +B1547554545898N00610374EA0000002409 +B1547574545910N00610378EA0000002407 +B1547594545923N00610381EA0000002404 +B1548014545936N00610383EA0000002402 +B1548034545948N00610388EA0000002399 +B1548054545960N00610393EA0000002396 +B1548074545973N00610397EA0000002394 +B1548094545985N00610402EA0000002392 +B1548114545996N00610406EA0000002391 +B1548144546008N00610412EA0000002389 +B1548164546020N00610418EA0000002388 +B1548184546031N00610426EA0000002386 +B1548204546042N00610434EA0000002385 +B1548224546053N00610442EA0000002384 +B1548244546064N00610452EA0000002384 +B1548264546074N00610462EA0000002383 +B1548284546085N00610471EA0000002382 +B1548304546096N00610482EA0000002381 +B1548324546106N00610493EA0000002379 +B1548344546118N00610504EA0000002377 +B1548364546129N00610515EA0000002376 +B1548384546140N00610525EA0000002375 +B1548404546151N00610535EA0000002374 +B1548424546162N00610546EA0000002373 +B1548444546173N00610557EA0000002371 +B1548464546184N00610569EA0000002369 +B1548484546195N00610581EA0000002368 +B1548504546205N00610594EA0000002367 +B1548524546215N00610605EA0000002365 +B1548544546226N00610617EA0000002363 +B1548564546237N00610629EA0000002361 +B1548584546246N00610641EA0000002359 +B1549004546256N00610654EA0000002357 +B1549024546265N00610668EA0000002354 +B1549044546273N00610682EA0000002351 +B1549064546282N00610697EA0000002348 +B1549084546292N00610713EA0000002345 +B1549104546300N00610729EA0000002343 +B1549124546309N00610745EA0000002340 +B1549144546319N00610757EA0000002336 +B1549164546330N00610771EA0000002334 +B1549184546339N00610785EA0000002331 +B1549204546349N00610797EA0000002327 +B1549224546359N00610809EA0000002324 +B1549244546369N00610821EA0000002320 +B1549264546379N00610832EA0000002316 +B1549284546395N00610849EA0000002309 +B1549304546405N00610863EA0000002304 +B1549324546416N00610877EA0000002299 +B1549344546425N00610891EA0000002296 +B1549364546434N00610905EA0000002291 +B1549384546442N00610919EA0000002285 +B1549404546451N00610933EA0000002280 +B1549424546460N00610948EA0000002275 +B1549444546468N00610962EA0000002270 +B1549464546476N00610976EA0000002263 +B1549484546485N00610991EA0000002257 +B1549504546493N00611006EA0000002251 +B1549524546502N00611019EA0000002247 +B1549554546509N00611031EA0000002242 +B1549574546515N00611045EA0000002236 +B1549594546522N00611059EA0000002228 +B1550014546529N00611077EA0000002221 +B1550034546538N00611093EA0000002215 +B1550054546547N00611107EA0000002211 +B1550074546555N00611123EA0000002207 +B1550094546561N00611138EA0000002203 +B1550114546568N00611151EA0000002198 +B1550134546575N00611164EA0000002194 +B1550154546582N00611180EA0000002190 +B1550174546589N00611197EA0000002186 +B1550194546598N00611212EA0000002181 +B1550214546607N00611228EA0000002177 +B1550234546614N00611245EA0000002173 +B1550254546622N00611260EA0000002168 +B1550274546632N00611276EA0000002163 +B1550294546639N00611295EA0000002159 +B1550314546648N00611310EA0000002155 +B1550334546658N00611326EA0000002151 +B1550354546666N00611345EA0000002149 +B1550374546674N00611364EA0000002147 +B1550394546682N00611383EA0000002146 +B1550414546689N00611402EA0000002146 +B1550434546696N00611420EA0000002144 +B1550454546705N00611438EA0000002142 +B1550474546716N00611456EA0000002141 +B1550494546726N00611473EA0000002142 +B1550514546736N00611490EA0000002141 +B1550534546746N00611504EA0000002142 +B1550554546755N00611516EA0000002141 +B1550574546765N00611528EA0000002139 +B1550594546776N00611539EA0000002138 +B1551014546787N00611548EA0000002138 +B1551034546797N00611559EA0000002137 +B1551054546807N00611571EA0000002137 +B1551074546817N00611583EA0000002137 +B1551094546832N00611600EA0000002136 +B1551114546842N00611614EA0000002135 +B1551134546853N00611627EA0000002134 +B1551154546865N00611637EA0000002133 +B1551174546876N00611647EA0000002131 +B1551194546889N00611657EA0000002128 +B1551214546902N00611667EA0000002126 +B1551234546914N00611677EA0000002125 +B1551254546925N00611688EA0000002122 +B1551274546937N00611698EA0000002118 +B1551294546949N00611709EA0000002115 +B1551314546962N00611719EA0000002113 +B1551344546973N00611728EA0000002109 +B1551364546985N00611738EA0000002105 +B1551384546997N00611748EA0000002101 +B1551404547008N00611759EA0000002097 +B1551424547019N00611771EA0000002095 +B1551444547029N00611781EA0000002091 +B1551464547040N00611792EA0000002087 +B1551484547050N00611804EA0000002082 +B1551504547060N00611816EA0000002078 +B1551524547071N00611827EA0000002074 +B1551544547081N00611839EA0000002069 +B1551564547091N00611851EA0000002065 +B1551584547100N00611862EA0000002060 +B1552004547110N00611873EA0000002055 +B1552024547120N00611884EA0000002051 +B1552044547130N00611895EA0000002047 +B1552064547141N00611904EA0000002044 +B1552084547151N00611913EA0000002040 +B1552104547161N00611923EA0000002036 +B1552124547172N00611933EA0000002032 +B1552144547182N00611943EA0000002028 +B1552164547193N00611953EA0000002024 +B1552184547203N00611964EA0000002020 +B1552204547213N00611975EA0000002017 +B1552224547223N00611986EA0000002014 +B1552244547233N00611997EA0000002011 +B1552264547243N00612008EA0000002009 +B1552284547254N00612019EA0000002006 +B1552304547264N00612031EA0000002005 +B1552324547274N00612044EA0000002003 +B1552344547284N00612056EA0000002000 +B1552364547294N00612068EA0000001997 +B1552384547304N00612081EA0000001993 +B1552404547315N00612094EA0000001990 +B1552424547325N00612108EA0000001987 +B1552444547336N00612118EA0000001984 +B1552464547346N00612129EA0000001982 +B1552484547356N00612141EA0000001979 +B1552504547371N00612163EA0000001974 +B1552524547381N00612177EA0000001972 +B1552544547390N00612189EA0000001971 +B1552564547400N00612201EA0000001968 +B1552584547411N00612214EA0000001966 +B1553004547421N00612227EA0000001965 +B1553024547430N00612239EA0000001962 +B1553044547440N00612252EA0000001960 +B1553064547450N00612266EA0000001958 +B1553084547459N00612280EA0000001957 +B1553104547468N00612294EA0000001956 +B1553124547477N00612309EA0000001955 +B1553154547484N00612323EA0000001954 +B1553174547493N00612336EA0000001952 +B1553194547502N00612351EA0000001951 +B1553214547511N00612364EA0000001950 +B1553234547520N00612375EA0000001949 +B1553254547529N00612387EA0000001947 +B1553274547539N00612398EA0000001945 +B1553294547549N00612407EA0000001942 +B1553314547559N00612417EA0000001940 +B1553334547569N00612427EA0000001938 +B1553354547579N00612436EA0000001935 +B1553374547589N00612446EA0000001933 +B1553394547594N00612451EA0000001930 +B1553414547610N00612465EA0000001928 +B1553434547620N00612476EA0000001926 +B1553454547629N00612486EA0000001926 +B1553474547637N00612498EA0000001923 +B1553494547647N00612510EA0000001921 +B1553514547657N00612521EA0000001920 +B1553534547665N00612532EA0000001917 +B1553554547673N00612542EA0000001914 +B1553574547683N00612555EA0000001910 +B1553594547693N00612568EA0000001907 +B1554014547702N00612581EA0000001904 +B1554034547711N00612595EA0000001900 +B1554054547720N00612608EA0000001897 +B1554074547729N00612620EA0000001894 +B1554094547737N00612634EA0000001891 +B1554114547746N00612648EA0000001888 +B1554134547755N00612661EA0000001885 +B1554154547763N00612674EA0000001881 +B1554174547771N00612688EA0000001877 +B1554194547779N00612701EA0000001874 +B1554214547786N00612715EA0000001870 +B1554234547794N00612731EA0000001866 +B1554254547801N00612746EA0000001864 +B1554274547808N00612761EA0000001861 +B1554294547816N00612775EA0000001857 +B1554314547827N00612797EA0000001851 +B1554334547835N00612810EA0000001848 +B1554354547842N00612823EA0000001844 +B1554374547850N00612837EA0000001841 +B1554394547857N00612850EA0000001838 +B1554414547864N00612864EA0000001836 +B1554434547871N00612876EA0000001834 +B1554454547878N00612888EA0000001832 +B1554474547885N00612901EA0000001829 +B1554494547891N00612914EA0000001825 +B1554514547898N00612928EA0000001822 +B1554534547905N00612941EA0000001819 +B1554564547911N00612954EA0000001816 +B1554584547918N00612966EA0000001813 +B1555004547926N00612978EA0000001810 +B1555024547933N00612989EA0000001807 +B1555044547941N00612998EA0000001803 +B1555064547950N00613006EA0000001800 +B1555084547958N00613015EA0000001796 +B1555104547967N00613023EA0000001793 +B1555124547975N00613032EA0000001788 +B1555144547984N00613042EA0000001784 +B1555164547992N00613054EA0000001782 +B1555184547999N00613065EA0000001779 +B1555204548006N00613077EA0000001775 +B1555224548013N00613090EA0000001771 +B1555244548020N00613103EA0000001768 +B1555264548027N00613117EA0000001765 +B1555284548034N00613130EA0000001762 +B1555304548040N00613143EA0000001758 +B1555324548047N00613157EA0000001755 +B1555344548054N00613170EA0000001752 +B1555364548061N00613183EA0000001748 +B1555384548068N00613196EA0000001745 +B1555404548075N00613210EA0000001742 +B1555424548081N00613223EA0000001739 +B1555444548088N00613237EA0000001736 +B1555464548094N00613252EA0000001734 +B1555484548101N00613265EA0000001732 +B1555504548108N00613278EA0000001730 +B1555524548115N00613292EA0000001727 +B1555544548121N00613306EA0000001723 +B1555564548128N00613320EA0000001720 +B1555584548135N00613335EA0000001717 +B1556004548141N00613350EA0000001714 +B1556024548148N00613365EA0000001710 +B1556044548154N00613380EA0000001707 +B1556064548161N00613394EA0000001704 +B1556084548167N00613409EA0000001701 +B1556104548177N00613432EA0000001695 +B1556124548184N00613448EA0000001692 +B1556144548191N00613465EA0000001690 +B1556164548197N00613480EA0000001687 +B1556184548204N00613494EA0000001682 +B1556204548212N00613509EA0000001677 +B1556224548220N00613524EA0000001673 +B1556244548228N00613538EA0000001668 +B1556264548236N00613551EA0000001663 +B1556284548244N00613568EA0000001658 +B1556304548251N00613584EA0000001655 +B1556324548259N00613600EA0000001652 +B1556344548265N00613617EA0000001648 +B1556374548273N00613634EA0000001644 +B1556394548280N00613652EA0000001640 +B1556414548288N00613669EA0000001637 +B1556434548296N00613685EA0000001633 +B1556454548303N00613700EA0000001629 +B1556474548311N00613715EA0000001625 +B1556494548319N00613732EA0000001621 +B1556514548326N00613749EA0000001617 +B1556534548334N00613766EA0000001613 +B1556554548341N00613782EA0000001610 +B1556574548349N00613798EA0000001606 +B1556594548356N00613815EA0000001602 +B1557014548364N00613832EA0000001598 +B1557034548372N00613848EA0000001594 +B1557054548380N00613865EA0000001590 +B1557074548387N00613881EA0000001587 +B1557094548395N00613898EA0000001582 +B1557114548403N00613914EA0000001577 +B1557134548412N00613930EA0000001572 +B1557154548420N00613945EA0000001568 +B1557174548429N00613959EA0000001562 +B1557194548438N00613975EA0000001556 +B1557214548448N00613993EA0000001552 +B1557234548455N00614012EA0000001549 +B1557254548457N00614027EA0000001545 +B1557274548462N00614045EA0000001541 +B1557294548467N00614063EA0000001539 +B1557314548471N00614079EA0000001538 +B1557334548476N00614093EA0000001534 +B1557354548483N00614109EA0000001530 +B1557374548489N00614127EA0000001529 +B1557394548495N00614142EA0000001527 +B1557414548502N00614157EA0000001525 +B1557434548509N00614172EA0000001523 +B1557454548517N00614186EA0000001521 +B1557474548524N00614202EA0000001520 +B1557494548531N00614218EA0000001518 +B1557514548542N00614240EA0000001516 +B1557534548549N00614255EA0000001515 +B1557554548557N00614269EA0000001513 +B1557574548564N00614284EA0000001510 +B1557594548572N00614299EA0000001508 +B1558014548581N00614315EA0000001506 +B1558034548588N00614330EA0000001504 +B1558054548596N00614345EA0000001502 +B1558074548603N00614360EA0000001501 +B1558094548610N00614376EA0000001500 +B1558114548617N00614392EA0000001498 +B1558134548623N00614409EA0000001495 +B1558154548630N00614426EA0000001494 +B1558184548636N00614442EA0000001494 +B1558204548641N00614456EA0000001491 +B1558224548648N00614472EA0000001489 +B1558244548655N00614487EA0000001487 +B1558264548662N00614500EA0000001485 +B1558284548668N00614514EA0000001482 +B1558304548676N00614528EA0000001480 +B1558324548683N00614543EA0000001478 +B1558344548691N00614558EA0000001476 +B1558364548698N00614571EA0000001475 +B1558384548706N00614584EA0000001473 +B1558404548714N00614597EA0000001472 +B1558424548721N00614609EA0000001471 +B1558444548728N00614622EA0000001469 +B1558464548735N00614636EA0000001468 +B1558484548741N00614650EA0000001466 +B1558504548748N00614663EA0000001465 +B1558524548754N00614674EA0000001462 +B1558544548762N00614685EA0000001458 +B1558564548770N00614694EA0000001455 +B1558584548778N00614703EA0000001451 +B1559004548785N00614712EA0000001448 +B1559024548793N00614722EA0000001445 +B1559044548801N00614734EA0000001444 +B1559064548808N00614746EA0000001442 +B1559084548817N00614756EA0000001443 +B1559104548822N00614764EA0000001445 +B1559124548826N00614775EA0000001445 +B1559144548830N00614787EA0000001444 +B1559164548835N00614795EA0000001444 +B1559184548839N00614803EA0000001445 +B1559204548844N00614810EA0000001446 +B1559224548851N00614816EA0000001448 +B1559244548856N00614823EA0000001452 +B1559264548860N00614828EA0000001454 +B1559284548865N00614831EA0000001455 +B1559304548875N00614837EA0000001456 +B1559324548881N00614844EA0000001456 +B1559344548890N00614851EA0000001456 +B1559364548899N00614859EA0000001457 +B1559384548906N00614868EA0000001459 +B1559404548914N00614877EA0000001463 +B1559424548922N00614884EA0000001467 +B1559444548928N00614889EA0000001473 +B1559464548933N00614894EA0000001477 +B1559484548938N00614899EA0000001481 +B1559504548944N00614906EA0000001483 +B1559524548952N00614912EA0000001486 +B1559544548959N00614917EA0000001489 +B1559574548965N00614921EA0000001493 +B1559594548970N00614927EA0000001496 +B1600014548976N00614933EA0000001498 +B1600034548983N00614939EA0000001499 +B1600054548990N00614947EA0000001498 +B1600074548998N00614954EA0000001497 +B1600094549006N00614962EA0000001495 +B1600114549015N00614970EA0000001494 +B1600134549025N00614978EA0000001494 +B1600154549033N00614987EA0000001496 +B1600174549039N00614995EA0000001499 +B1600194549047N00615004EA0000001502 +B1600214549051N00615009EA0000001506 +B1600234549059N00615018EA0000001509 +B1600254549065N00615025EA0000001512 +B1600274549075N00615033EA0000001515 +B1600294549084N00615038EA0000001519 +B1600314549090N00615042EA0000001527 +B1600334549096N00615048EA0000001533 +B1600354549102N00615056EA0000001538 +B1600374549108N00615067EA0000001542 +B1600394549114N00615073EA0000001546 +B1600414549117N00615074EA0000001549 +B1600434549121N00615076EA0000001551 +B1600454549127N00615081EA0000001553 +B1600474549135N00615085EA0000001557 +B1600494549142N00615089EA0000001561 +B1600514549151N00615093EA0000001565 +B1600534549161N00615099EA0000001570 +B1600554549168N00615101EA0000001574 +B1600574549176N00615105EA0000001579 +B1600594549185N00615109EA0000001584 +B1601014549193N00615111EA0000001589 +B1601034549199N00615113EA0000001593 +B1601054549208N00615116EA0000001596 +B1601074549218N00615118EA0000001601 +B1601094549226N00615122EA0000001606 +B1601114549233N00615125EA0000001609 +B1601134549247N00615128EA0000001613 +B1601154549255N00615132EA0000001615 +B1601174549264N00615136EA0000001616 +B1601194549273N00615141EA0000001619 +B1601214549282N00615147EA0000001622 +B1601234549289N00615152EA0000001625 +B1601254549297N00615156EA0000001629 +B1601274549305N00615161EA0000001632 +B1601294549312N00615166EA0000001636 +B1601314549319N00615170EA0000001638 +B1601334549327N00615175EA0000001641 +B1601364549336N00615181EA0000001645 +B1601384549344N00615187EA0000001649 +B1601404549352N00615193EA0000001653 +B1601424549360N00615200EA0000001657 +B1601444549368N00615207EA0000001659 +B1601464549377N00615215EA0000001661 +B1601484549386N00615224EA0000001663 +B1601504549395N00615233EA0000001665 +B1601524549405N00615243EA0000001668 +B1601544549414N00615253EA0000001672 +B1601564549422N00615262EA0000001675 +B1601584549427N00615267EA0000001677 +B1602004549442N00615282EA0000001681 +B1602024549451N00615291EA0000001683 +B1602044549460N00615300EA0000001683 +B1602064549469N00615308EA0000001683 +B1602084549480N00615317EA0000001684 +B1602104549490N00615324EA0000001686 +B1602124549499N00615331EA0000001689 +B1602144549508N00615339EA0000001691 +B1602164549517N00615349EA0000001692 +B1602184549527N00615358EA0000001691 +B1602204549538N00615366EA0000001693 +B1602224549548N00615375EA0000001695 +B1602244549559N00615384EA0000001698 +B1602264549570N00615392EA0000001703 +B1602284549579N00615402EA0000001707 +B1602304549586N00615412EA0000001710 +B1602324549594N00615421EA0000001712 +B1602344549602N00615429EA0000001712 +B1602364549612N00615435EA0000001709 +B1602384549624N00615444EA0000001707 +B1602404549634N00615453EA0000001706 +B1602424549646N00615462EA0000001704 +B1602444549657N00615473EA0000001704 +B1602464549667N00615485EA0000001705 +B1602484549676N00615497EA0000001704 +B1602504549690N00615514EA0000001701 +B1602524549700N00615522EA0000001698 +B1602544549711N00615531EA0000001695 +B1602564549721N00615543EA0000001693 +B1602584549730N00615555EA0000001691 +B1603004549741N00615567EA0000001687 +B1603024549751N00615580EA0000001685 +B1603044549761N00615594EA0000001684 +B1603064549769N00615608EA0000001683 +B1603084549779N00615622EA0000001682 +B1603104549788N00615638EA0000001682 +B1603124549796N00615655EA0000001682 +B1603144549805N00615673EA0000001682 +B1603174549814N00615690EA0000001684 +B1603194549823N00615708EA0000001684 +B1603214549831N00615725EA0000001685 +B1603234549841N00615743EA0000001684 +B1603254549850N00615763EA0000001686 +B1603274549858N00615781EA0000001689 +B1603294549864N00615798EA0000001692 +B1603314549869N00615816EA0000001695 +B1603334549875N00615835EA0000001700 +B1603354549878N00615844EA0000001705 +B1603374549885N00615869EA0000001710 +B1603394549890N00615888EA0000001713 +B1603414549896N00615905EA0000001716 +B1603434549903N00615915EA0000001717 +B1603454549911N00615922EA0000001717 +B1603474549918N00615934EA0000001716 +B1603494549925N00615955EA0000001714 +B1603514549930N00615975EA0000001714 +B1603534549933N00615994EA0000001713 +B1603554549936N00616013EA0000001710 +B1603574549940N00616034EA0000001709 +B1603594549943N00616054EA0000001709 +B1604014549945N00616072EA0000001710 +B1604034549946N00616090EA0000001710 +B1604054549949N00616108EA0000001711 +B1604074549951N00616126EA0000001712 +B1604094549954N00616145EA0000001712 +B1604114549956N00616164EA0000001712 +B1604134549959N00616182EA0000001712 +B1604154549963N00616199EA0000001712 +B1604174549968N00616217EA0000001712 +B1604194549973N00616232EA0000001712 +B1604214549979N00616245EA0000001712 +B1604234549987N00616256EA0000001711 +B1604254549995N00616268EA0000001710 +B1604274550003N00616278EA0000001709 +B1604294550017N00616288EA0000001706 +B1604314550027N00616293EA0000001705 +B1604334550038N00616298EA0000001704 +B1604354550048N00616299EA0000001704 +B1604374550060N00616299EA0000001703 +B1604394550071N00616301EA0000001705 +B1604414550083N00616303EA0000001706 +B1604434550094N00616304EA0000001708 +B1604454550104N00616307EA0000001709 +B1604474550114N00616308EA0000001709 +B1604494550127N00616309EA0000001708 +B1604514550139N00616311EA0000001708 +B1604534550151N00616314EA0000001708 +B1604564550161N00616314EA0000001709 +B1604584550173N00616314EA0000001709 +B1605004550184N00616315EA0000001709 +B1605024550196N00616315EA0000001708 +B1605044550208N00616315EA0000001707 +B1605064550219N00616311EA0000001705 +B1605084550224N00616303EA0000001704 +B1605104550221N00616293EA0000001702 +B1605124550217N00616291EA0000001701 +B1605144550203N00616295EA0000001702 +B1605164550194N00616297EA0000001702 +B1605184550185N00616299EA0000001703 +B1605204550176N00616303EA0000001703 +B1605224550166N00616305EA0000001704 +B1605244550157N00616307EA0000001704 +B1605264550147N00616309EA0000001703 +B1605284550136N00616309EA0000001701 +B1605304550125N00616311EA0000001700 +B1605324550116N00616312EA0000001699 +B1605344550106N00616310EA0000001697 +B1605364550093N00616309EA0000001695 +B1605384550082N00616308EA0000001695 +B1605404550074N00616308EA0000001694 +B1605424550063N00616306EA0000001692 +B1605444550052N00616303EA0000001692 +B1605464550042N00616301EA0000001694 +B1605484550032N00616299EA0000001695 +B1605504550022N00616296EA0000001696 +B1605524550012N00616294EA0000001697 +B1605544550002N00616291EA0000001697 +B1605564549991N00616287EA0000001697 +B1605584549980N00616283EA0000001697 +B1606004549969N00616278EA0000001698 +B1606024549957N00616275EA0000001700 +B1606044549948N00616271EA0000001702 +B1606064549941N00616265EA0000001703 +B1606084549935N00616255EA0000001703 +B1606104549932N00616236EA0000001703 +B1606124549933N00616225EA0000001705 +B1606144549933N00616217EA0000001706 +B1606164549933N00616208EA0000001708 +B1606184549934N00616199EA0000001711 +B1606204549936N00616192EA0000001714 +B1606224549941N00616187EA0000001716 +B1606244549949N00616186EA0000001718 +B1606264549956N00616201EA0000001720 +B1606284549954N00616225EA0000001721 +B1606304549943N00616234EA0000001722 +B1606324549930N00616222EA0000001723 +B1606354549927N00616208EA0000001726 +B1606374549928N00616201EA0000001731 +B1606394549926N00616198EA0000001735 +B1606414549927N00616192EA0000001739 +B1606434549933N00616190EA0000001743 +B1606454549942N00616202EA0000001747 +B1606474549946N00616225EA0000001750 +B1606494549945N00616237EA0000001754 +B1606514549935N00616249EA0000001758 +B1606534549928N00616241EA0000001762 +B1606554549934N00616241EA0000001765 +B1606574549939N00616255EA0000001768 +B1606594549940N00616278EA0000001771 +B1607014549936N00616296EA0000001773 +B1607034549931N00616299EA0000001776 +B1607054549930N00616292EA0000001780 +B1607074549929N00616288EA0000001784 +B1607094549929N00616282EA0000001788 +B1607114549932N00616279EA0000001791 +B1607134549934N00616298EA0000001793 +B1607154549929N00616321EA0000001796 +B1607174549919N00616330EA0000001799 +B1607194549903N00616301EA0000001806 +B1607214549908N00616296EA0000001809 +B1607234549916N00616306EA0000001813 +B1607254549920N00616328EA0000001817 +B1607274549911N00616346EA0000001823 +B1607294549900N00616347EA0000001826 +B1607314549895N00616332EA0000001831 +B1607334549902N00616331EA0000001834 +B1607354549911N00616343EA0000001839 +B1607374549913N00616364EA0000001842 +B1607394549903N00616386EA0000001846 +B1607414549891N00616391EA0000001849 +B1607434549884N00616391EA0000001853 +B1607454549885N00616384EA0000001857 +B1607474549890N00616385EA0000001861 +B1607494549894N00616404EA0000001865 +B1607514549887N00616432EA0000001872 +B1607534549876N00616426EA0000001876 +B1607554549872N00616414EA0000001880 +B1607574549871N00616406EA0000001885 +B1607594549873N00616420EA0000001889 +B1608014549872N00616441EA0000001894 +B1608034549865N00616454EA0000001899 +B1608054549858N00616454EA0000001904 +B1608074549857N00616444EA0000001909 +B1608094549861N00616441EA0000001915 +B1608114549868N00616448EA0000001921 +B1608134549872N00616466EA0000001926 +B1608164549870N00616488EA0000001931 +B1608184549863N00616504EA0000001936 +B1608204549857N00616504EA0000001940 +B1608224549857N00616494EA0000001945 +B1608244549863N00616492EA0000001951 +B1608264549867N00616496EA0000001956 +B1608284549871N00616522EA0000001960 +B1608304549867N00616540EA0000001964 +B1608324549857N00616539EA0000001969 +B1608344549853N00616527EA0000001974 +B1608364549854N00616519EA0000001980 +B1608384549859N00616520EA0000001987 +B1608404549866N00616531EA0000001992 +B1608424549870N00616553EA0000001996 +B1608444549866N00616576EA0000002001 +B1608464549860N00616586EA0000002005 +B1608484549858N00616582EA0000002011 +B1608504549863N00616577EA0000002017 +B1608524549870N00616579EA0000002024 +B1608544549877N00616584EA0000002029 +B1608564549884N00616597EA0000002034 +B1608584549883N00616614EA0000002039 +B1609004549875N00616620EA0000002045 +B1609024549869N00616611EA0000002052 +B1609044549868N00616599EA0000002059 +B1609064549874N00616595EA0000002065 +B1609084549880N00616611EA0000002071 +B1609104549881N00616633EA0000002076 +B1609124549877N00616648EA0000002081 +B1609144549870N00616653EA0000002088 +B1609164549862N00616653EA0000002095 +B1609184549856N00616645EA0000002102 +B1609204549856N00616633EA0000002108 +B1609224549866N00616631EA0000002114 +B1609244549875N00616647EA0000002117 +B1609264549876N00616671EA0000002121 +B1609284549867N00616689EA0000002127 +B1609304549861N00616680EA0000002131 +B1609324549858N00616672EA0000002136 +B1609344549858N00616666EA0000002140 +B1609364549864N00616663EA0000002143 +B1609384549872N00616675EA0000002144 +B1609404549874N00616701EA0000002146 +B1609424549871N00616722EA0000002148 +B1609444549860N00616730EA0000002151 +B1609464549850N00616738EA0000002155 +B1609484549841N00616745EA0000002161 +B1609504549832N00616744EA0000002167 +B1609524549828N00616733EA0000002173 +B1609554549832N00616727EA0000002179 +B1609574549838N00616736EA0000002184 +B1609594549842N00616760EA0000002188 +B1610014549839N00616782EA0000002192 +B1610034549831N00616785EA0000002196 +B1610054549825N00616777EA0000002202 +B1610074549821N00616768EA0000002208 +B1610094549823N00616757EA0000002212 +B1610114549829N00616755EA0000002215 +B1610134549836N00616770EA0000002219 +B1610154549834N00616792EA0000002222 +B1610174549826N00616805EA0000002224 +B1610194549815N00616804EA0000002226 +B1610214549807N00616799EA0000002229 +B1610234549804N00616794EA0000002233 +B1610254549806N00616788EA0000002236 +B1610274549813N00616785EA0000002238 +B1610294549821N00616797EA0000002240 +B1610314549823N00616820EA0000002242 +B1610334549818N00616837EA0000002244 +B1610354549806N00616844EA0000002247 +B1610374549797N00616844EA0000002252 +B1610394549791N00616838EA0000002256 +B1610414549790N00616831EA0000002260 +B1610434549796N00616828EA0000002264 +B1610454549805N00616834EA0000002267 +B1610474549810N00616855EA0000002269 +B1610494549809N00616879EA0000002271 +B1610514549801N00616895EA0000002274 +B1610534549791N00616904EA0000002278 +B1610554549781N00616909EA0000002282 +B1610574549772N00616908EA0000002284 +B1610594549770N00616900EA0000002286 +B1611014549775N00616896EA0000002288 +B1611034549783N00616902EA0000002290 +B1611054549789N00616922EA0000002292 +B1611074549787N00616945EA0000002294 +B1611094549775N00616969EA0000002298 +B1611114549765N00616977EA0000002301 +B1611134549756N00616979EA0000002303 +B1611154549752N00616972EA0000002303 +B1611174549754N00616965EA0000002303 +B1611194549761N00616964EA0000002303 +B1611214549771N00616979EA0000002303 +B1611234549775N00617003EA0000002303 +B1611254549771N00617025EA0000002302 +B1611274549762N00617037EA0000002303 +B1611294549754N00617040EA0000002304 +B1611314549747N00617046EA0000002305 +B1611334549739N00617047EA0000002305 +B1611364549734N00617038EA0000002304 +B1611384549733N00617028EA0000002304 +B1611404549731N00617021EA0000002305 +B1611424549729N00617015EA0000002307 +B1611444549726N00617007EA0000002309 +B1611464549722N00617001EA0000002313 +B1611484549719N00616996EA0000002318 +B1611504549717N00616990EA0000002323 +B1611524549714N00616985EA0000002328 +B1611544549711N00616977EA0000002332 +B1611564549710N00616973EA0000002337 +B1611584549705N00616969EA0000002342 +B1612004549699N00616969EA0000002347 +B1612024549690N00616972EA0000002350 +B1612044549683N00616983EA0000002354 +B1612064549676N00616996EA0000002357 +B1612084549672N00617012EA0000002361 +B1612104549675N00617030EA0000002365 +B1612124549684N00617044EA0000002369 +B1612144549694N00617047EA0000002375 +B1612164549701N00617043EA0000002381 +B1612184549704N00617039EA0000002387 +B1612204549704N00617035EA0000002392 +B1612224549700N00617032EA0000002397 +B1612244549692N00617031EA0000002399 +B1612264549682N00617034EA0000002402 +B1612284549674N00617043EA0000002406 +B1612304549671N00617059EA0000002409 +B1612324549673N00617078EA0000002411 +B1612344549682N00617091EA0000002414 +B1612364549692N00617095EA0000002418 +B1612384549701N00617093EA0000002423 +B1612404549706N00617088EA0000002427 +B1612424549708N00617083EA0000002431 +B1612444549706N00617078EA0000002434 +B1612464549698N00617077EA0000002435 +B1612484549684N00617096EA0000002436 +B1612504549680N00617116EA0000002437 +B1612524549683N00617132EA0000002439 +B1612544549691N00617146EA0000002441 +B1612564549701N00617159EA0000002443 +B1612584549711N00617164EA0000002445 +B1613004549718N00617164EA0000002448 +B1613024549724N00617163EA0000002449 +B1613044549728N00617159EA0000002450 +B1613064549727N00617153EA0000002450 +B1613084549724N00617147EA0000002450 +B1613104549722N00617140EA0000002449 +B1613124549720N00617132EA0000002448 +B1613154549718N00617124EA0000002446 +B1613174549715N00617116EA0000002445 +B1613194549713N00617108EA0000002443 +B1613214549710N00617099EA0000002440 +B1613234549707N00617090EA0000002438 +B1613254549703N00617082EA0000002437 +B1613274549701N00617074EA0000002437 +B1613294549698N00617066EA0000002436 +B1613314549695N00617057EA0000002436 +B1613334549693N00617049EA0000002435 +B1613354549691N00617041EA0000002433 +B1613374549690N00617036EA0000002430 +B1613394549686N00617022EA0000002430 +B1613414549685N00617015EA0000002430 +B1613434549683N00617005EA0000002431 +B1613454549682N00616996EA0000002433 +B1613474549682N00616990EA0000002438 +B1613494549682N00616984EA0000002444 +B1613514549683N00616976EA0000002450 +B1613534549683N00616969EA0000002454 +B1613554549683N00616961EA0000002458 +B1613574549679N00616952EA0000002460 +B1613594549671N00616948EA0000002461 +B1614014549661N00616951EA0000002460 +B1614034549651N00616961EA0000002460 +B1614054549647N00616979EA0000002460 +B1614074549649N00616996EA0000002462 +B1614094549654N00617009EA0000002465 +B1614114549661N00617021EA0000002466 +B1614134549668N00617032EA0000002469 +B1614154549675N00617044EA0000002474 +B1614174549681N00617047EA0000002477 +B1614194549688N00617044EA0000002479 +B1614214549693N00617039EA0000002481 +B1614234549691N00617030EA0000002482 +B1614254549682N00617018EA0000002485 +B1614274549670N00617019EA0000002486 +B1614294549654N00617037EA0000002487 +B1614314549650N00617053EA0000002487 +B1614334549650N00617073EA0000002489 +B1614354549653N00617088EA0000002491 +B1614374549660N00617100EA0000002494 +B1614394549667N00617115EA0000002498 +B1614414549673N00617129EA0000002502 +B1614434549680N00617140EA0000002504 +B1614454549688N00617149EA0000002507 +B1614474549694N00617152EA0000002510 +B1614494549698N00617146EA0000002512 +B1614524549696N00617138EA0000002513 +B1614544549687N00617132EA0000002514 +B1614564549674N00617136EA0000002515 +B1614584549662N00617151EA0000002516 +B1615004549659N00617173EA0000002517 +B1615024549663N00617192EA0000002520 +B1615044549671N00617208EA0000002523 +B1615064549677N00617220EA0000002525 +B1615084549685N00617231EA0000002525 +B1615104549694N00617242EA0000002526 +B1615124549702N00617253EA0000002529 +B1615144549709N00617262EA0000002529 +B1615164549713N00617265EA0000002528 +B1615184549727N00617278EA0000002526 +B1615204549734N00617290EA0000002524 +B1615224549739N00617303EA0000002520 +B1615244549745N00617317EA0000002515 +B1615264549750N00617333EA0000002508 +B1615284549753N00617350EA0000002503 +B1615304549757N00617365EA0000002498 +B1615324549761N00617379EA0000002493 +B1615344549767N00617393EA0000002487 +B1615364549774N00617409EA0000002480 +B1615384549782N00617426EA0000002473 +B1615404549788N00617445EA0000002465 +B1615424549793N00617465EA0000002459 +B1615444549797N00617485EA0000002453 +B1615464549801N00617505EA0000002447 +B1615484549806N00617526EA0000002441 +B1615504549811N00617547EA0000002436 +B1615524549815N00617570EA0000002430 +B1615544549819N00617594EA0000002426 +B1615564549823N00617617EA0000002422 +B1615584549827N00617639EA0000002420 +B1616004549831N00617660EA0000002415 +B1616024549837N00617682EA0000002410 +B1616044549846N00617716EA0000002402 +B1616064549848N00617737EA0000002399 +B1616084549851N00617756EA0000002395 +B1616104549854N00617775EA0000002389 +B1616124549855N00617798EA0000002383 +B1616144549856N00617819EA0000002379 +B1616164549858N00617836EA0000002376 +B1616184549858N00617852EA0000002371 +B1616204549859N00617872EA0000002366 +B1616224549860N00617892EA0000002360 +B1616244549862N00617911EA0000002353 +B1616264549865N00617933EA0000002346 +B1616284549868N00617955EA0000002341 +B1616314549871N00617972EA0000002338 +B1616334549874N00617988EA0000002336 +B1616354549877N00618006EA0000002332 +B1616374549881N00618024EA0000002329 +B1616394549884N00618043EA0000002327 +B1616414549887N00618061EA0000002324 +B1616434549892N00618077EA0000002321 +B1616454549895N00618095EA0000002318 +B1616474549898N00618110EA0000002316 +B1616494549901N00618125EA0000002312 +B1616514549902N00618142EA0000002308 +B1616534549904N00618160EA0000002304 +B1616554549907N00618177EA0000002300 +B1616574549909N00618195EA0000002297 +B1616594549911N00618213EA0000002294 +B1617014549914N00618231EA0000002291 +B1617034549916N00618249EA0000002288 +B1617054549919N00618266EA0000002285 +B1617074549921N00618283EA0000002281 +B1617094549922N00618303EA0000002278 +B1617114549924N00618321EA0000002275 +B1617134549926N00618339EA0000002272 +B1617154549929N00618358EA0000002270 +B1617174549932N00618377EA0000002267 +B1617194549936N00618396EA0000002265 +B1617214549938N00618415EA0000002262 +B1617234549940N00618434EA0000002259 +B1617254549943N00618453EA0000002256 +B1617274549946N00618471EA0000002253 +B1617294549948N00618488EA0000002249 +B1617314549951N00618507EA0000002244 +B1617334549953N00618529EA0000002240 +B1617354549954N00618548EA0000002238 +B1617374549954N00618563EA0000002237 +B1617394549956N00618577EA0000002235 +B1617414549959N00618590EA0000002231 +B1617434549962N00618606EA0000002225 +B1617454549967N00618630EA0000002219 +B1617474549969N00618646EA0000002216 +B1617494549971N00618663EA0000002211 +B1617514549972N00618681EA0000002207 +B1617534549974N00618699EA0000002204 +B1617554549977N00618715EA0000002201 +B1617574549979N00618732EA0000002197 +B1617594549982N00618750EA0000002195 +B1618014549986N00618767EA0000002194 +B1618034549989N00618783EA0000002193 +B1618054549992N00618798EA0000002191 +B1618074549995N00618815EA0000002189 +B1618094549997N00618832EA0000002187 +B1618124549998N00618847EA0000002184 +B1618144549999N00618863EA0000002180 +B1618164550001N00618881EA0000002175 +B1618184550002N00618902EA0000002171 +B1618204550002N00618923EA0000002167 +B1618224550003N00618943EA0000002163 +B1618244550004N00618965EA0000002159 +B1618264550005N00618988EA0000002157 +B1618284550005N00619009EA0000002154 +B1618304550005N00619031EA0000002151 +B1618324550006N00619053EA0000002148 +B1618344550006N00619074EA0000002146 +B1618364550006N00619096EA0000002143 +B1618384550006N00619118EA0000002140 +B1618404550008N00619139EA0000002137 +B1618424550009N00619161EA0000002134 +B1618444550010N00619183EA0000002131 +B1618464550012N00619204EA0000002128 +B1618484550014N00619224EA0000002126 +B1618504550017N00619244EA0000002122 +B1618524550022N00619265EA0000002119 +B1618544550027N00619285EA0000002117 +B1618564550030N00619306EA0000002115 +B1618584550031N00619325EA0000002114 +B1619004550035N00619343EA0000002115 +B1619024550036N00619358EA0000002118 +B1619044550038N00619371EA0000002121 +B1619064550040N00619382EA0000002122 +B1619084550042N00619394EA0000002124 +B1619104550044N00619406EA0000002124 +B1619124550044N00619419EA0000002125 +B1619144550045N00619434EA0000002126 +B1619164550045N00619449EA0000002127 +B1619184550046N00619463EA0000002127 +B1619204550046N00619477EA0000002127 +B1619224550046N00619492EA0000002128 +B1619244550047N00619505EA0000002128 +B1619264550051N00619526EA0000002127 +B1619284550053N00619542EA0000002128 +B1619304550054N00619556EA0000002129 +B1619324550057N00619570EA0000002129 +B1619344550059N00619585EA0000002128 +B1619364550061N00619600EA0000002127 +B1619384550062N00619614EA0000002126 +B1619404550064N00619629EA0000002124 +B1619424550067N00619644EA0000002122 +B1619444550069N00619659EA0000002121 +B1619464550072N00619673EA0000002119 +B1619484550074N00619687EA0000002117 +B1619504550076N00619702EA0000002114 +B1619534550078N00619719EA0000002110 +B1619554550082N00619737EA0000002107 +B1619574550085N00619756EA0000002105 +B1619594550088N00619773EA0000002101 +B1620014550090N00619791EA0000002097 +B1620034550093N00619811EA0000002093 +B1620054550096N00619829EA0000002091 +B1620074550098N00619846EA0000002087 +B1620094550101N00619864EA0000002083 +B1620114550105N00619882EA0000002079 +B1620134550109N00619901EA0000002076 +B1620154550111N00619921EA0000002074 +B1620174550114N00619940EA0000002073 +B1620194550117N00619959EA0000002072 +B1620214550120N00619978EA0000002070 +B1620234550123N00619998EA0000002069 +B1620254550126N00620017EA0000002068 +B1620274550128N00620036EA0000002068 +B1620294550130N00620055EA0000002067 +B1620314550131N00620073EA0000002065 +B1620334550133N00620094EA0000002062 +B1620354550134N00620115EA0000002060 +B1620374550134N00620135EA0000002059 +B1620394550134N00620154EA0000002056 +B1620414550136N00620172EA0000002053 +B1620434550138N00620193EA0000002048 +B1620454550139N00620214EA0000002045 +B1620474550140N00620233EA0000002042 +B1620494550141N00620253EA0000002037 +B1620514550142N00620273EA0000002033 +B1620534550143N00620293EA0000002030 +B1620554550145N00620311EA0000002027 +B1620574550145N00620331EA0000002023 +B1620594550145N00620352EA0000002020 +B1621014550146N00620372EA0000002018 +B1621034550146N00620392EA0000002016 +B1621054550146N00620412EA0000002013 +B1621074550149N00620442EA0000002009 +B1621094550149N00620462EA0000002006 +B1621114550148N00620481EA0000002004 +B1621134550149N00620501EA0000002000 +B1621154550149N00620521EA0000001997 +B1621174550149N00620540EA0000001993 +B1621194550150N00620559EA0000001989 +B1621214550150N00620579EA0000001985 +B1621234550150N00620598EA0000001982 +B1621254550150N00620618EA0000001979 +B1621274550150N00620637EA0000001976 +B1621294550150N00620657EA0000001972 +B1621324550151N00620676EA0000001968 +B1621344550151N00620696EA0000001965 +B1621364550152N00620714EA0000001962 +B1621384550153N00620732EA0000001958 +B1621404550153N00620752EA0000001954 +B1621424550153N00620771EA0000001950 +B1621444550154N00620789EA0000001946 +B1621464550154N00620808EA0000001941 +B1621484550155N00620827EA0000001937 +B1621504550156N00620846EA0000001933 +B1621524550156N00620864EA0000001929 +B1621544550156N00620874EA0000001925 +B1621564550156N00620874EA0000001921 +B1621584550156N00620925EA0000001918 +B1622004550155N00620946EA0000001915 +B1622024550156N00620967EA0000001911 +B1622044550156N00620988EA0000001908 +B1622064550155N00621008EA0000001905 +B1622084550155N00621030EA0000001901 +B1622104550155N00621052EA0000001898 +B1622124550155N00621074EA0000001894 +B1622144550156N00621095EA0000001889 +B1622164550157N00621117EA0000001884 +B1622184550157N00621140EA0000001879 +B1622204550158N00621163EA0000001875 +B1622224550159N00621185EA0000001872 +B1622244550159N00621207EA0000001868 +B1622264550160N00621229EA0000001863 +B1622284550160N00621251EA0000001860 +B1622304550159N00621273EA0000001856 +B1622324550160N00621293EA0000001852 +B1622344550160N00621313EA0000001848 +B1622364550160N00621335EA0000001842 +B1622384550162N00621359EA0000001837 +B1622404550162N00621383EA0000001833 +B1622424550163N00621406EA0000001831 +B1622444550163N00621427EA0000001830 +B1622464550162N00621454EA0000001832 +B1622484550162N00621473EA0000001834 +B1622504550161N00621489EA0000001837 +B1622524550160N00621504EA0000001840 +B1622544550159N00621519EA0000001843 +B1622564550156N00621535EA0000001845 +B1622584550149N00621549EA0000001846 +B1623004550138N00621559EA0000001847 +B1623024550125N00621561EA0000001849 +B1623044550116N00621550EA0000001851 +B1623064550116N00621538EA0000001852 +B1623084550121N00621536EA0000001855 +B1623104550127N00621544EA0000001857 +B1623134550131N00621558EA0000001858 +B1623154550131N00621575EA0000001860 +B1623174550128N00621592EA0000001862 +B1623194550122N00621608EA0000001866 +B1623214550115N00621623EA0000001869 +B1623234550109N00621639EA0000001873 +B1623254550105N00621655EA0000001876 +B1623274550104N00621670EA0000001878 +B1623294550105N00621683EA0000001879 +B1623314550107N00621689EA0000001879 +B1623334550117N00621700EA0000001880 +B1623354550123N00621699EA0000001881 +B1623374550127N00621694EA0000001883 +B1623394550127N00621686EA0000001886 +B1623414550124N00621677EA0000001889 +B1623434550116N00621670EA0000001893 +B1623454550103N00621669EA0000001896 +B1623474550091N00621673EA0000001900 +B1623494550081N00621684EA0000001904 +B1623514550074N00621699EA0000001906 +B1623534550070N00621715EA0000001909 +B1623554550071N00621730EA0000001910 +B1623574550076N00621741EA0000001910 +B1623594550082N00621748EA0000001910 +B1624014550089N00621749EA0000001911 +B1624034550093N00621745EA0000001913 +B1624054550095N00621737EA0000001915 +B1624074550094N00621728EA0000001919 +B1624094550089N00621721EA0000001922 +B1624114550081N00621713EA0000001924 +B1624134550069N00621711EA0000001928 +B1624154550056N00621715EA0000001931 +B1624174550046N00621726EA0000001934 +B1624194550039N00621741EA0000001937 +B1624214550036N00621758EA0000001939 +B1624234550039N00621771EA0000001940 +B1624254550044N00621782EA0000001940 +B1624274550054N00621787EA0000001940 +B1624294550060N00621780EA0000001940 +B1624314550060N00621770EA0000001942 +B1624334550054N00621760EA0000001945 +B1624354550042N00621756EA0000001948 +B1624374550028N00621758EA0000001952 +B1624394550017N00621764EA0000001955 +B1624414550007N00621774EA0000001958 +B1624434549998N00621789EA0000001960 +B1624454549994N00621805EA0000001962 +B1624474549993N00621820EA0000001962 +B1624494549994N00621834EA0000001962 +B1624514550001N00621845EA0000001963 +B1624544550010N00621846EA0000001963 +B1624564550015N00621840EA0000001964 +B1624584550016N00621830EA0000001965 +B1625004550012N00621820EA0000001965 +B1625024550002N00621814EA0000001965 +B1625044549989N00621814EA0000001965 +B1625064549978N00621824EA0000001965 +B1625084549970N00621840EA0000001967 +B1625104549966N00621849EA0000001970 +B1625124549959N00621873EA0000001974 +B1625144549956N00621886EA0000001975 +B1625164549953N00621900EA0000001975 +B1625184549955N00621918EA0000001976 +B1625204549960N00621930EA0000001979 +B1625224549966N00621935EA0000001981 +B1625244549973N00621936EA0000001983 +B1625264549978N00621932EA0000001985 +B1625284549978N00621922EA0000001987 +B1625304549974N00621913EA0000001990 +B1625324549964N00621906EA0000001994 +B1625344549951N00621904EA0000001998 +B1625364549939N00621914EA0000002001 +B1625384549930N00621929EA0000002006 +B1625404549927N00621946EA0000002009 +B1625424549928N00621961EA0000002010 +B1625444549934N00621973EA0000002011 +B1625464549942N00621976EA0000002012 +B1625484549947N00621969EA0000002014 +B1625504549947N00621958EA0000002018 +B1625524549944N00621947EA0000002024 +B1625544549937N00621939EA0000002028 +B1625564549926N00621936EA0000002032 +B1625584549914N00621941EA0000002036 +B1626004549906N00621956EA0000002039 +B1626024549903N00621973EA0000002042 +B1626044549905N00621986EA0000002045 +B1626064549915N00621993EA0000002049 +B1626084549921N00621989EA0000002053 +B1626104549924N00621980EA0000002058 +B1626124549921N00621971EA0000002062 +B1626144549915N00621961EA0000002066 +B1626164549902N00621957EA0000002069 +B1626184549889N00621966EA0000002073 +B1626204549880N00621981EA0000002077 +B1626224549879N00621997EA0000002080 +B1626244549881N00622011EA0000002084 +B1626264549887N00622019EA0000002086 +B1626284549894N00622021EA0000002090 +B1626314549900N00622017EA0000002094 +B1626334549902N00622008EA0000002099 +B1626354549902N00621999EA0000002102 +B1626374549897N00621989EA0000002104 +B1626394549883N00621983EA0000002106 +B1626414549870N00621989EA0000002109 +B1626434549859N00622006EA0000002110 +B1626454549856N00622021EA0000002113 +B1626474549856N00622035EA0000002115 +B1626494549859N00622047EA0000002118 +B1626514549866N00622054EA0000002120 +B1626534549874N00622057EA0000002123 +B1626554549881N00622056EA0000002127 +B1626574549886N00622049EA0000002130 +B1626594549887N00622038EA0000002134 +B1627014549883N00622028EA0000002136 +B1627034549873N00622021EA0000002138 +B1627054549862N00622017EA0000002139 +B1627074549847N00622024EA0000002139 +B1627094549835N00622039EA0000002140 +B1627114549829N00622057EA0000002142 +B1627134549828N00622072EA0000002145 +B1627154549829N00622086EA0000002147 +B1627174549831N00622099EA0000002148 +B1627194549834N00622112EA0000002150 +B1627214549840N00622121EA0000002152 +B1627234549848N00622122EA0000002156 +B1627254549854N00622119EA0000002161 +B1627274549857N00622112EA0000002165 +B1627294549858N00622101EA0000002169 +B1627314549852N00622091EA0000002173 +B1627334549842N00622086EA0000002176 +B1627354549830N00622084EA0000002179 +B1627374549817N00622088EA0000002181 +B1627394549805N00622098EA0000002183 +B1627414549798N00622114EA0000002184 +B1627434549797N00622139EA0000002185 +B1627454549801N00622151EA0000002186 +B1627474549807N00622159EA0000002189 +B1627494549814N00622161EA0000002193 +B1627514549819N00622160EA0000002197 +B1627534549823N00622160EA0000002199 +B1627554549829N00622156EA0000002200 +B1627574549830N00622142EA0000002203 +B1627594549824N00622130EA0000002206 +B1628014549815N00622124EA0000002210 +B1628034549803N00622124EA0000002212 +B1628054549790N00622129EA0000002215 +B1628074549781N00622143EA0000002216 +B1628104549776N00622160EA0000002218 +B1628124549778N00622175EA0000002220 +B1628144549782N00622185EA0000002222 +B1628164549788N00622193EA0000002224 +B1628184549796N00622197EA0000002228 +B1628204549803N00622195EA0000002232 +B1628224549809N00622189EA0000002234 +B1628244549811N00622184EA0000002237 +B1628264549812N00622168EA0000002241 +B1628284549805N00622158EA0000002244 +B1628304549794N00622152EA0000002246 +B1628324549781N00622156EA0000002247 +B1628344549769N00622167EA0000002249 +B1628364549762N00622182EA0000002251 +B1628384549760N00622197EA0000002252 +B1628404549763N00622212EA0000002254 +B1628424549770N00622221EA0000002257 +B1628444549777N00622225EA0000002262 +B1628464549784N00622225EA0000002265 +B1628484549791N00622223EA0000002269 +B1628504549797N00622216EA0000002272 +B1628524549798N00622204EA0000002275 +B1628544549793N00622192EA0000002278 +B1628564549783N00622185EA0000002280 +B1628584549771N00622184EA0000002282 +B1629004549758N00622190EA0000002283 +B1629024549749N00622203EA0000002284 +B1629044549745N00622220EA0000002284 +B1629064549747N00622235EA0000002285 +B1629084549753N00622243EA0000002287 +B1629104549761N00622244EA0000002290 +B1629124549767N00622243EA0000002292 +B1629144549774N00622243EA0000002295 +B1629164549780N00622242EA0000002298 +B1629184549787N00622240EA0000002301 +B1629204549793N00622240EA0000002305 +B1629224549801N00622238EA0000002309 +B1629244549807N00622232EA0000002311 +B1629264549808N00622222EA0000002314 +B1629284549804N00622212EA0000002316 +B1629304549795N00622204EA0000002317 +B1629324549784N00622202EA0000002319 +B1629344549772N00622208EA0000002320 +B1629364549764N00622221EA0000002321 +B1629384549761N00622235EA0000002323 +B1629404549764N00622248EA0000002325 +B1629424549767N00622258EA0000002329 +B1629444549772N00622266EA0000002331 +B1629464549778N00622271EA0000002334 +B1629494549784N00622272EA0000002337 +B1629514549790N00622268EA0000002340 +B1629534549794N00622260EA0000002343 +B1629554549796N00622251EA0000002345 +B1629574549794N00622239EA0000002346 +B1629594549788N00622228EA0000002345 +B1630014549778N00622220EA0000002345 +B1630034549766N00622218EA0000002346 +B1630054549754N00622225EA0000002346 +B1630074549747N00622238EA0000002346 +B1630094549744N00622253EA0000002346 +B1630114549746N00622267EA0000002347 +B1630134549752N00622276EA0000002350 +B1630154549759N00622281EA0000002355 +B1630174549766N00622281EA0000002360 +B1630194549773N00622279EA0000002363 +B1630214549778N00622274EA0000002365 +B1630234549781N00622266EA0000002365 +B1630254549780N00622254EA0000002364 +B1630274549773N00622243EA0000002364 +B1630294549762N00622238EA0000002364 +B1630314549750N00622241EA0000002364 +B1630334549740N00622253EA0000002363 +B1630354549735N00622270EA0000002363 +B1630374549735N00622284EA0000002364 +B1630394549739N00622296EA0000002367 +B1630414549744N00622303EA0000002369 +B1630434549752N00622306EA0000002371 +B1630454549760N00622308EA0000002373 +B1630474549766N00622311EA0000002374 +B1630494549773N00622313EA0000002373 +B1630514549780N00622317EA0000002372 +B1630534549786N00622328EA0000002370 +B1630554549789N00622343EA0000002368 +B1630574549791N00622359EA0000002367 +B1630594549794N00622374EA0000002365 +B1631014549796N00622391EA0000002363 +B1631034549799N00622419EA0000002361 +B1631054549800N00622436EA0000002360 +B1631074549801N00622452EA0000002358 +B1631094549802N00622469EA0000002358 +B1631114549804N00622484EA0000002358 +B1631134549805N00622498EA0000002357 +B1631154549807N00622512EA0000002356 +B1631174549809N00622528EA0000002353 +B1631194549810N00622544EA0000002349 +B1631214549813N00622559EA0000002345 +B1631234549819N00622573EA0000002340 +B1631254549825N00622587EA0000002336 +B1631274549829N00622602EA0000002332 +B1631304549833N00622616EA0000002327 +B1631324549838N00622632EA0000002322 +B1631344549841N00622649EA0000002318 +B1631364549843N00622665EA0000002315 +B1631384549847N00622682EA0000002312 +B1631404549850N00622699EA0000002309 +B1631424549854N00622715EA0000002306 +B1631444549858N00622733EA0000002301 +B1631464549863N00622753EA0000002298 +B1631484549866N00622773EA0000002295 +B1631504549870N00622793EA0000002292 +B1631524549873N00622814EA0000002288 +B1631544549877N00622834EA0000002285 +B1631564549881N00622854EA0000002282 +B1631584549884N00622874EA0000002278 +B1632004549887N00622894EA0000002275 +B1632024549891N00622914EA0000002272 +B1632044549894N00622934EA0000002269 +B1632064549897N00622955EA0000002266 +B1632084549900N00622975EA0000002263 +B1632104549904N00622994EA0000002260 +B1632124549907N00623014EA0000002256 +B1632144549910N00623034EA0000002252 +B1632164549914N00623054EA0000002248 +B1632184549917N00623074EA0000002245 +B1632204549921N00623094EA0000002242 +B1632224549925N00623113EA0000002238 +B1632244549929N00623134EA0000002235 +B1632264549933N00623153EA0000002233 +B1632284549936N00623172EA0000002229 +B1632304549939N00623192EA0000002225 +B1632324549941N00623213EA0000002221 +B1632344549943N00623233EA0000002217 +B1632364549944N00623253EA0000002213 +B1632384549946N00623274EA0000002208 +B1632404549948N00623294EA0000002204 +B1632424549950N00623315EA0000002200 +B1632444549952N00623344EA0000002194 +B1632464549954N00623365EA0000002190 +B1632484549954N00623386EA0000002187 +B1632504549955N00623408EA0000002184 +B1632524549956N00623429EA0000002181 +B1632544549958N00623449EA0000002179 +B1632564549959N00623469EA0000002175 +B1632584549961N00623489EA0000002172 +B1633004549964N00623509EA0000002169 +B1633024549965N00623530EA0000002166 +B1633044549966N00623550EA0000002162 +B1633064549968N00623571EA0000002159 +B1633084549969N00623590EA0000002156 +B1633114549969N00623610EA0000002152 +B1633134549970N00623629EA0000002148 +B1633154549970N00623648EA0000002144 +B1633174549970N00623668EA0000002140 +B1633194549971N00623688EA0000002136 +B1633214549971N00623708EA0000002132 +B1633234549971N00623728EA0000002130 +B1633254549972N00623748EA0000002127 +B1633274549972N00623767EA0000002124 +B1633294549973N00623787EA0000002121 +B1633314549973N00623807EA0000002119 +B1633334549973N00623807EA0000002117 +B1633354549972N00623848EA0000002114 +B1633374549972N00623868EA0000002111 +B1633394549973N00623888EA0000002108 +B1633414549974N00623909EA0000002105 +B1633434549975N00623930EA0000002102 +B1633454549977N00623950EA0000002100 +B1633474549978N00623971EA0000002097 +B1633494549979N00623992EA0000002095 +B1633514549980N00624013EA0000002092 +B1633534549980N00624034EA0000002090 +B1633554549980N00624055EA0000002087 +B1633574549981N00624076EA0000002085 +B1633594549981N00624097EA0000002082 +B1634014549981N00624118EA0000002080 +B1634034549982N00624139EA0000002077 +B1634054549982N00624161EA0000002075 +B1634074549982N00624182EA0000002072 +B1634094549982N00624204EA0000002069 +B1634114549981N00624225EA0000002067 +B1634134549982N00624246EA0000002064 +B1634154549983N00624267EA0000002062 +B1634174549983N00624289EA0000002059 +B1634194549983N00624310EA0000002057 +B1634214549983N00624331EA0000002054 +B1634234549983N00624353EA0000002052 +B1634254549983N00624384EA0000002048 +B1634274549984N00624406EA0000002045 +B1634294549983N00624427EA0000002042 +B1634314549983N00624448EA0000002040 +B1634334549982N00624469EA0000002038 +B1634354549982N00624490EA0000002036 +B1634374549981N00624511EA0000002033 +B1634394549981N00624532EA0000002030 +B1634414549980N00624554EA0000002028 +B1634434549980N00624574EA0000002026 +B1634454549979N00624594EA0000002024 +B1634474549978N00624615EA0000002021 +B1634494549978N00624636EA0000002019 +B1634524549978N00624655EA0000002017 +B1634544549977N00624675EA0000002014 +B1634564549976N00624695EA0000002011 +B1634584549975N00624716EA0000002008 +B1635004549973N00624737EA0000002005 +B1635024549972N00624757EA0000002002 +B1635044549971N00624779EA0000001999 +B1635064549970N00624800EA0000001997 +B1635084549969N00624820EA0000001994 +B1635104549968N00624840EA0000001992 +B1635124549968N00624861EA0000001989 +B1635144549968N00624861EA0000001987 +B1635164549966N00624897EA0000001986 +B1635184549965N00624914EA0000001984 +B1635204549964N00624932EA0000001982 +B1635224549962N00624949EA0000001980 +B1635244549961N00624966EA0000001978 +B1635264549960N00624983EA0000001977 +B1635284549959N00625001EA0000001975 +B1635304549959N00625017EA0000001974 +B1635324549959N00625034EA0000001972 +B1635344549957N00625052EA0000001970 +B1635364549955N00625069EA0000001968 +B1635384549953N00625086EA0000001966 +B1635404549949N00625104EA0000001964 +B1635424549947N00625121EA0000001962 +B1635444549944N00625138EA0000001960 +B1635464549940N00625156EA0000001958 +B1635484549937N00625173EA0000001956 +B1635504549934N00625190EA0000001955 +B1635524549931N00625208EA0000001954 +B1635544549928N00625225EA0000001953 +B1635564549925N00625242EA0000001952 +B1635584549922N00625260EA0000001951 +B1636004549919N00625277EA0000001950 +B1636024549915N00625295EA0000001949 +B1636044549911N00625321EA0000001947 +B1636064549909N00625338EA0000001946 +B1636084549907N00625355EA0000001944 +B1636104549906N00625372EA0000001942 +B1636124549904N00625390EA0000001940 +B1636144549902N00625407EA0000001938 +B1636164549900N00625425EA0000001936 +B1636184549897N00625443EA0000001934 +B1636204549894N00625461EA0000001932 +B1636224549892N00625478EA0000001931 +B1636244549889N00625495EA0000001930 +B1636264549887N00625513EA0000001929 +B1636284549884N00625530EA0000001929 +B1636314549881N00625548EA0000001928 +B1636334549875N00625573EA0000001928 +B1636354549871N00625590EA0000001928 +B1636374549868N00625606EA0000001928 +B1636394549866N00625623EA0000001928 +B1636414549864N00625639EA0000001929 +B1636434549862N00625656EA0000001929 +B1636454549862N00625672EA0000001930 +B1636474549862N00625688EA0000001931 +B1636494549862N00625704EA0000001933 +B1636524549862N00625718EA0000001935 +B1636544549861N00625732EA0000001937 +B1636564549860N00625745EA0000001939 +B1636584549859N00625757EA0000001940 +B1637004549862N00625769EA0000001941 +B1637024549865N00625774EA0000001941 +B1637044549879N00625771EA0000001941 +B1637064549883N00625761EA0000001941 +B1637084549868N00625742EA0000001942 +B1637104549858N00625737EA0000001944 +B1637124549850N00625731EA0000001945 +B1637144549841N00625724EA0000001946 +B1637164549831N00625717EA0000001947 +B1637184549821N00625709EA0000001950 +B1637204549814N00625697EA0000001952 +B1637224549812N00625686EA0000001952 +B1637244549820N00625682EA0000001951 +B1637264549829N00625687EA0000001950 +B1637284549835N00625699EA0000001952 +B1637304549839N00625708EA0000001954 +B1637324549843N00625718EA0000001957 +B1637344549848N00625729EA0000001959 +B1637364549852N00625740EA0000001962 +B1637384549857N00625746EA0000001964 +B1637404549864N00625744EA0000001964 +B1637424549868N00625733EA0000001964 +B1637444549863N00625718EA0000001963 +B1637464549848N00625716EA0000001964 +B1637484549835N00625723EA0000001968 +B1637504549826N00625726EA0000001969 +B1637524549814N00625726EA0000001969 +B1637544549802N00625717EA0000001969 +B1637564549800N00625700EA0000001968 +B1637584549807N00625695EA0000001967 +B1638004549814N00625699EA0000001967 +B1638024549820N00625706EA0000001970 +B1638044549829N00625714EA0000001972 +B1638064549833N00625724EA0000001973 +B1638084549838N00625734EA0000001975 +B1638104549842N00625743EA0000001977 +B1638124549844N00625755EA0000001978 +B1638144549845N00625768EA0000001980 +B1638164549843N00625782EA0000001982 +B1638184549838N00625795EA0000001983 +B1638204549833N00625808EA0000001986 +B1638224549831N00625821EA0000001987 +B1638244549832N00625835EA0000001989 +B1638264549836N00625846EA0000001989 +B1638284549844N00625848EA0000001990 +B1638314549850N00625842EA0000001989 +B1638334549850N00625829EA0000001989 +B1638354549846N00625817EA0000001989 +B1638374549843N00625806EA0000001991 +B1638394549843N00625800EA0000001993 +B1638414549839N00625782EA0000001996 +B1638434549834N00625772EA0000001999 +B1638454549828N00625762EA0000002002 +B1638474549823N00625749EA0000002004 +B1638494549823N00625736EA0000002005 +B1638514549828N00625731EA0000002005 +B1638534549835N00625740EA0000002004 +B1638554549837N00625755EA0000002003 +B1638574549835N00625769EA0000002003 +B1638594549831N00625784EA0000002003 +B1639014549825N00625799EA0000002003 +B1639034549817N00625812EA0000002005 +B1639054549810N00625823EA0000002007 +B1639074549806N00625836EA0000002009 +B1639094549806N00625848EA0000002011 +B1639114549811N00625858EA0000002013 +B1639134549818N00625859EA0000002014 +B1639154549824N00625852EA0000002015 +B1639174549822N00625840EA0000002016 +B1639194549818N00625829EA0000002019 +B1639214549816N00625819EA0000002020 +B1639234549816N00625807EA0000002021 +B1639254549817N00625797EA0000002023 +B1639274549817N00625787EA0000002023 +B1639294549817N00625776EA0000002023 +B1639314549822N00625768EA0000002022 +B1639334549829N00625770EA0000002021 +B1639354549831N00625784EA0000002020 +B1639374549826N00625799EA0000002019 +B1639394549817N00625811EA0000002020 +B1639414549810N00625824EA0000002020 +B1639434549802N00625838EA0000002020 +B1639454549792N00625860EA0000002022 +B1639474549787N00625876EA0000002023 +B1639494549783N00625890EA0000002025 +B1639514549779N00625904EA0000002026 +B1639534549777N00625918EA0000002027 +B1639554549775N00625933EA0000002029 +B1639574549774N00625946EA0000002032 +B1639594549774N00625958EA0000002035 +B1640014549776N00625970EA0000002037 +B1640034549781N00625978EA0000002039 +B1640054549788N00625981EA0000002040 +B1640074549793N00625975EA0000002040 +B1640094549790N00625963EA0000002039 +B1640124549779N00625957EA0000002038 +B1640144549766N00625960EA0000002036 +B1640164549758N00625973EA0000002035 +B1640184549759N00625987EA0000002036 +B1640204549762N00626001EA0000002036 +B1640224549766N00626016EA0000002035 +B1640244549771N00626031EA0000002035 +B1640264549775N00626047EA0000002036 +B1640284549778N00626063EA0000002038 +B1640304549781N00626080EA0000002039 +B1640324549781N00626080EA0000002041 +B1640344549787N00626113EA0000002043 +B1640364549791N00626128EA0000002046 +B1640384549794N00626143EA0000002048 +B1640404549799N00626157EA0000002050 +B1640424549804N00626171EA0000002053 +B1640444549809N00626185EA0000002056 +B1640464549813N00626199EA0000002059 +B1640484549819N00626212EA0000002062 +B1640504549825N00626224EA0000002066 +B1640524549832N00626236EA0000002069 +B1640544549839N00626247EA0000002073 +B1640564549845N00626259EA0000002077 +B1640584549852N00626271EA0000002080 +B1641004549859N00626281EA0000002084 +B1641024549866N00626290EA0000002088 +B1641044549873N00626300EA0000002092 +B1641064549879N00626310EA0000002096 +B1641084549887N00626316EA0000002100 +B1641104549893N00626316EA0000002103 +B1641124549897N00626309EA0000002106 +B1641144549895N00626299EA0000002108 +B1641164549883N00626297EA0000002112 +B1641184549870N00626300EA0000002115 +B1641204549859N00626299EA0000002118 +B1641224549848N00626293EA0000002121 +B1641244549833N00626286EA0000002128 +B1641264549824N00626281EA0000002132 +B1641284549817N00626274EA0000002135 +B1641304549816N00626265EA0000002137 +B1641324549822N00626263EA0000002139 +B1641344549829N00626270EA0000002140 +B1641364549833N00626284EA0000002143 +B1641384549839N00626294EA0000002146 +B1641404549844N00626308EA0000002148 +B1641424549848N00626322EA0000002151 +B1641444549855N00626333EA0000002154 +B1641474549862N00626346EA0000002158 +B1641494549869N00626359EA0000002163 +B1641514549876N00626369EA0000002167 +B1641534549882N00626380EA0000002172 +B1641554549885N00626387EA0000002178 +B1641574549896N00626401EA0000002184 +B1641594549902N00626403EA0000002191 +B1642014549906N00626399EA0000002198 +B1642034549909N00626395EA0000002205 +B1642054549910N00626386EA0000002210 +B1642074549905N00626375EA0000002213 +B1642094549891N00626372EA0000002216 +B1642114549876N00626376EA0000002219 +B1642134549863N00626376EA0000002221 +B1642154549851N00626370EA0000002221 +B1642174549844N00626358EA0000002214 +B1642194549850N00626353EA0000002213 +B1642214549858N00626359EA0000002213 +B1642234549864N00626371EA0000002214 +B1642254549869N00626381EA0000002216 +B1642274549875N00626392EA0000002217 +B1642294549881N00626405EA0000002219 +B1642314549886N00626417EA0000002221 +B1642334549891N00626426EA0000002223 +B1642354549896N00626438EA0000002224 +B1642374549900N00626453EA0000002225 +B1642394549901N00626470EA0000002226 +B1642414549903N00626487EA0000002227 +B1642434549905N00626503EA0000002229 +B1642454549908N00626516EA0000002232 +B1642474549911N00626531EA0000002234 +B1642494549913N00626547EA0000002236 +B1642514549916N00626564EA0000002237 +B1642534549920N00626580EA0000002239 +B1642554549923N00626595EA0000002241 +B1642574549927N00626608EA0000002243 +B1642594549935N00626626EA0000002245 +B1643014549940N00626638EA0000002247 +B1643034549947N00626650EA0000002250 +B1643054549955N00626661EA0000002253 +B1643074549963N00626671EA0000002257 +B1643094549970N00626680EA0000002260 +B1643114549977N00626688EA0000002263 +B1643134549983N00626693EA0000002266 +B1643154549990N00626700EA0000002269 +B1643174549996N00626708EA0000002271 +B1643194550003N00626713EA0000002272 +B1643214550008N00626710EA0000002273 +B1643234550009N00626701EA0000002274 +B1643254549998N00626696EA0000002274 +B1643284549983N00626699EA0000002274 +B1643304549970N00626701EA0000002276 +B1643324549959N00626698EA0000002277 +B1643344549949N00626692EA0000002278 +B1643364549940N00626684EA0000002278 +B1643384549932N00626676EA0000002280 +B1643404549925N00626668EA0000002281 +B1643424549918N00626658EA0000002283 +B1643444549912N00626649EA0000002285 +B1643464549907N00626641EA0000002287 +B1643484549904N00626637EA0000002288 +B1643504549894N00626624EA0000002289 +B1643524549889N00626616EA0000002291 +B1643544549884N00626608EA0000002293 +B1643564549882N00626600EA0000002294 +B1643584549884N00626594EA0000002294 +B1644004549891N00626594EA0000002296 +B1644024549897N00626610EA0000002297 +B1644044549896N00626631EA0000002299 +B1644064549897N00626647EA0000002300 +B1644084549904N00626657EA0000002301 +B1644104549912N00626666EA0000002303 +B1644124549918N00626674EA0000002304 +B1644144549926N00626681EA0000002304 +B1644164549934N00626685EA0000002306 +B1644184549941N00626690EA0000002307 +B1644204549947N00626694EA0000002307 +B1644224549954N00626696EA0000002307 +B1644244549958N00626690EA0000002306 +B1644264549953N00626678EA0000002305 +B1644284549942N00626668EA0000002306 +B1644304549932N00626662EA0000002308 +B1644324549923N00626656EA0000002309 +B1644344549915N00626651EA0000002309 +B1644364549907N00626646EA0000002309 +B1644384549899N00626638EA0000002307 +B1644404549889N00626623EA0000002305 +B1644424549884N00626614EA0000002305 +B1644444549879N00626605EA0000002305 +B1644464549876N00626595EA0000002307 +B1644484549873N00626586EA0000002309 +B1644504549871N00626580EA0000002311 +B1644524549874N00626574EA0000002310 +B1644544549882N00626582EA0000002310 +B1644564549887N00626601EA0000002309 +B1644584549889N00626620EA0000002311 +B1645004549893N00626634EA0000002311 +B1645024549899N00626647EA0000002313 +B1645044549904N00626658EA0000002314 +B1645074549910N00626667EA0000002314 +B1645094549918N00626677EA0000002313 +B1645114549926N00626687EA0000002312 +B1645134549934N00626696EA0000002312 +B1645154549942N00626705EA0000002311 +B1645174549951N00626714EA0000002309 +B1645194549960N00626723EA0000002307 +B1645214549969N00626731EA0000002306 +B1645234549978N00626739EA0000002305 +B1645254549987N00626748EA0000002304 +B1645274549996N00626758EA0000002302 +B1645294550001N00626763EA0000002301 +B1645314550014N00626780EA0000002300 +B1645334550022N00626793EA0000002299 +B1645354550029N00626807EA0000002297 +B1645374550034N00626826EA0000002296 +B1645394550036N00626847EA0000002294 +B1645414550038N00626868EA0000002291 +B1645434550041N00626889EA0000002289 +B1645454550042N00626910EA0000002286 +B1645474550043N00626929EA0000002283 +B1645494550043N00626950EA0000002279 +B1645514550043N00626973EA0000002274 +B1645534550043N00626995EA0000002269 +B1645554550043N00627018EA0000002262 +B1645574550043N00627044EA0000002255 +B1645594550042N00627071EA0000002247 +B1646014550040N00627095EA0000002241 +B1646034550037N00627119EA0000002233 +B1646054550035N00627145EA0000002224 +B1646074550032N00627169EA0000002216 +B1646094550029N00627192EA0000002208 +B1646114550025N00627216EA0000002194 +B1646134550023N00627242EA0000002184 +B1646154550020N00627269EA0000002176 +B1646174550019N00627293EA0000002169 +B1646194550021N00627315EA0000002163 +B1646214550023N00627341EA0000002156 +B1646234550024N00627359EA0000002149 +B1646254550025N00627377EA0000002145 +B1646274550026N00627393EA0000002140 +B1646294550026N00627410EA0000002133 +B1646314550026N00627430EA0000002125 +B1646334550024N00627453EA0000002119 +B1646354550021N00627474EA0000002114 +B1646374550021N00627494EA0000002108 +B1646394550021N00627516EA0000002102 +B1646414550021N00627538EA0000002097 +B1646434550023N00627559EA0000002094 +B1646454550027N00627577EA0000002090 +B1646484550030N00627597EA0000002085 +B1646504550034N00627618EA0000002079 +B1646524550038N00627639EA0000002075 +B1646544550039N00627659EA0000002073 +B1646564550040N00627679EA0000002068 +B1646584550041N00627701EA0000002064 +B1647004550040N00627723EA0000002062 +B1647024550038N00627742EA0000002059 +B1647044550038N00627761EA0000002055 +B1647064550039N00627782EA0000002051 +B1647084550042N00627803EA0000002048 +B1647104550046N00627823EA0000002044 +B1647124550050N00627844EA0000002039 +B1647144550053N00627865EA0000002035 +B1647164550058N00627884EA0000002032 +B1647184550060N00627904EA0000002027 +B1647204550063N00627925EA0000002022 +B1647224550067N00627945EA0000002019 +B1647244550070N00627964EA0000002016 +B1647264550073N00627982EA0000002013 +B1647284550076N00628002EA0000002008 +B1647304550078N00628023EA0000002006 +B1647324550080N00628042EA0000002003 +B1647344550080N00628062EA0000001998 +B1647364550081N00628084EA0000001994 +B1647384550083N00628106EA0000001991 +B1647404550086N00628126EA0000001988 +B1647424550089N00628146EA0000001984 +B1647444550093N00628167EA0000001980 +B1647464550096N00628188EA0000001977 +B1647484550099N00628209EA0000001975 +B1647504550102N00628230EA0000001972 +B1647524550105N00628252EA0000001969 +B1647544550108N00628273EA0000001967 +B1647564550111N00628295EA0000001965 +B1647584550114N00628316EA0000001963 +B1648004550116N00628339EA0000001960 +B1648024550121N00628371EA0000001958 +B1648044550123N00628393EA0000001958 +B1648064550125N00628412EA0000001958 +B1648084550128N00628431EA0000001957 +B1648104550130N00628451EA0000001956 +B1648124550132N00628471EA0000001957 +B1648144550134N00628490EA0000001956 +B1648164550136N00628507EA0000001956 +B1648184550138N00628524EA0000001954 +B1648204550142N00628542EA0000001951 +B1648224550145N00628563EA0000001950 +B1648244550148N00628581EA0000001949 +B1648264550151N00628598EA0000001948 +B1648294550154N00628617EA0000001948 +B1648314550157N00628636EA0000001948 +B1648334550161N00628653EA0000001949 +B1648354550165N00628670EA0000001950 +B1648374550166N00628686EA0000001950 +B1648394550169N00628701EA0000001949 +B1648414550172N00628716EA0000001948 +B1648434550177N00628730EA0000001946 +B1648454550181N00628745EA0000001943 +B1648474550186N00628760EA0000001940 +B1648494550191N00628776EA0000001937 +B1648514550197N00628791EA0000001935 +B1648534550201N00628807EA0000001933 +B1648554550204N00628824EA0000001931 +B1648574550207N00628840EA0000001930 +B1648594550209N00628856EA0000001929 +B1649014550210N00628872EA0000001929 +B1649034550210N00628887EA0000001929 +B1649054550209N00628903EA0000001931 +B1649074550208N00628917EA0000001932 +B1649094550206N00628930EA0000001933 +B1649114550204N00628942EA0000001933 +B1649134550202N00628955EA0000001933 +B1649154550199N00628970EA0000001933 +B1649174550197N00628983EA0000001934 +B1649194550195N00628996EA0000001933 +B1649214550191N00629010EA0000001934 +B1649234550187N00629022EA0000001935 +B1649254550184N00629034EA0000001935 +B1649274550181N00629047EA0000001935 +B1649294550177N00629060EA0000001936 +B1649314550172N00629072EA0000001934 +B1649334550168N00629086EA0000001932 +B1649354550164N00629101EA0000001931 +B1649374550161N00629112EA0000001929 +B1649394550159N00629123EA0000001927 +B1649414550153N00629142EA0000001926 +B1649434550151N00629150EA0000001927 +B1649454550148N00629160EA0000001927 +B1649474550143N00629171EA0000001927 +B1649494550134N00629173EA0000001929 +B1649514550128N00629166EA0000001929 +B1649534550127N00629152EA0000001929 +B1649554550135N00629142EA0000001928 +B1649574550149N00629147EA0000001928 +B1649594550156N00629158EA0000001931 +B1650014550160N00629170EA0000001933 +B1650034550163N00629185EA0000001935 +B1650054550163N00629198EA0000001938 +B1650074550160N00629208EA0000001939 +B1650104550157N00629217EA0000001940 +B1650124550153N00629226EA0000001940 +B1650144550148N00629236EA0000001939 +B1650164550141N00629242EA0000001939 +B1650184550136N00629247EA0000001939 +B1650204550131N00629253EA0000001939 +B1650224550125N00629262EA0000001938 +B1650244550120N00629271EA0000001939 +B1650264550117N00629278EA0000001938 +B1650284550114N00629286EA0000001937 +B1650304550111N00629296EA0000001935 +B1650324550107N00629307EA0000001935 +B1650344550104N00629317EA0000001935 +B1650364550101N00629327EA0000001933 +B1650384550098N00629337EA0000001933 +B1650404550093N00629346EA0000001933 +B1650424550088N00629355EA0000001933 +B1650444550085N00629366EA0000001934 +B1650464550081N00629378EA0000001935 +B1650484550078N00629388EA0000001936 +B1650504550075N00629398EA0000001938 +B1650524550072N00629408EA0000001940 +B1650544550069N00629418EA0000001943 +B1650564550066N00629426EA0000001946 +B1650584550061N00629431EA0000001948 +B1651004550056N00629434EA0000001950 +B1651024550051N00629428EA0000001951 +B1651044550050N00629414EA0000001953 +B1651064550055N00629401EA0000001955 +B1651084550066N00629395EA0000001956 +B1651104550079N00629398EA0000001957 +B1651124550088N00629409EA0000001958 +B1651144550092N00629424EA0000001960 +B1651164550090N00629436EA0000001961 +B1651184550087N00629446EA0000001963 +B1651204550086N00629456EA0000001963 +B1651224550081N00629472EA0000001964 +B1651244550079N00629482EA0000001966 +B1651264550079N00629493EA0000001966 +B1651284550076N00629504EA0000001967 +B1651304550072N00629513EA0000001968 +B1651324550070N00629523EA0000001968 +B1651344550067N00629536EA0000001966 +B1651364550064N00629549EA0000001967 +B1651384550063N00629563EA0000001966 +B1651404550063N00629578EA0000001965 +B1651424550063N00629593EA0000001965 +B1651444550060N00629605EA0000001964 +B1651464550057N00629619EA0000001963 +B1651484550054N00629634EA0000001960 +B1651514550051N00629650EA0000001957 +B1651534550049N00629667EA0000001955 +B1651554550049N00629683EA0000001952 +B1651574550050N00629699EA0000001948 +B1651594550051N00629717EA0000001946 +B1652014550051N00629734EA0000001945 +B1652034550051N00629749EA0000001943 +B1652054550051N00629764EA0000001941 +B1652074550050N00629780EA0000001940 +B1652094550050N00629787EA0000001938 +B1652114550049N00629802EA0000001937 +B1652134550047N00629825EA0000001935 +B1652154550047N00629841EA0000001934 +B1652174550046N00629856EA0000001934 +B1652194550045N00629871EA0000001934 +B1652214550043N00629886EA0000001932 +B1652234550040N00629901EA0000001930 +B1652254550038N00629916EA0000001928 +B1652274550036N00629930EA0000001926 +B1652294550033N00629944EA0000001923 +B1652314550031N00629960EA0000001920 +B1652334550028N00629975EA0000001917 +B1652354550024N00629991EA0000001913 +B1652374550021N00630009EA0000001908 +B1652394550017N00630028EA0000001904 +B1652414550013N00630047EA0000001900 +B1652434550010N00630067EA0000001898 +B1652454550006N00630085EA0000001895 +B1652474550002N00630103EA0000001892 +B1652494550000N00630122EA0000001890 +B1652514549998N00630141EA0000001888 +B1652534549996N00630160EA0000001885 +B1652554549993N00630179EA0000001882 +B1652574549991N00630199EA0000001880 +B1652594549989N00630218EA0000001878 +B1653014549987N00630238EA0000001876 +B1653034549984N00630268EA0000001873 +B1653054549983N00630287EA0000001871 +B1653074549980N00630307EA0000001868 +B1653094549978N00630327EA0000001867 +B1653114549975N00630345EA0000001866 +B1653134549973N00630364EA0000001864 +B1653154549970N00630385EA0000001862 +B1653174549967N00630404EA0000001862 +B1653194549963N00630422EA0000001861 +B1653214549960N00630441EA0000001859 +B1653234549957N00630461EA0000001857 +B1653254549954N00630481EA0000001857 +B1653274549952N00630501EA0000001857 +B1653304549949N00630520EA0000001858 +B1653324549947N00630536EA0000001859 +B1653344549944N00630551EA0000001859 +B1653364549942N00630567EA0000001859 +B1653384549941N00630584EA0000001860 +B1653404549940N00630599EA0000001860 +B1653424549939N00630615EA0000001859 +B1653444549937N00630632EA0000001860 +B1653464549936N00630639EA0000001859 +B1653484549934N00630663EA0000001857 +B1653504549932N00630681EA0000001857 +B1653524549931N00630698EA0000001859 +B1653544549930N00630713EA0000001862 +B1653564549931N00630728EA0000001865 +B1653584549931N00630743EA0000001867 +B1654004549930N00630756EA0000001871 +B1654024549930N00630767EA0000001873 +B1654044549929N00630779EA0000001875 +B1654064549928N00630792EA0000001877 +B1654084549922N00630801EA0000001879 +B1654104549912N00630803EA0000001880 +B1654124549903N00630791EA0000001880 +B1654144549901N00630775EA0000001881 +B1654164549908N00630765EA0000001883 +B1654184549918N00630765EA0000001885 +B1654204549926N00630772EA0000001887 +B1654224549932N00630781EA0000001887 +B1654244549936N00630794EA0000001889 +B1654264549938N00630806EA0000001892 +B1654284549939N00630818EA0000001893 +B1654304549940N00630832EA0000001895 +B1654324549942N00630843EA0000001898 +B1654344549943N00630855EA0000001900 +B1654364549944N00630869EA0000001901 +B1654384549945N00630882EA0000001903 +B1654404549944N00630894EA0000001906 +B1654424549940N00630905EA0000001907 +B1654444549928N00630913EA0000001908 +B1654464549920N00630906EA0000001908 +B1654484549917N00630891EA0000001907 +B1654504549921N00630879EA0000001907 +B1654524549929N00630878EA0000001907 +B1654544549937N00630882EA0000001908 +B1654564549942N00630892EA0000001909 +B1654584549945N00630904EA0000001909 +B1655004549947N00630917EA0000001911 +B1655024549948N00630930EA0000001914 +B1655044549949N00630942EA0000001918 +B1655064549951N00630954EA0000001924 +B1655084549953N00630967EA0000001929 +B1655114549954N00630981EA0000001934 +B1655134549953N00630994EA0000001939 +B1655154549946N00631006EA0000001944 +B1655174549936N00631011EA0000001949 +B1655194549928N00631005EA0000001953 +B1655214549925N00630991EA0000001957 +B1655234549925N00630985EA0000001961 +B1655254549935N00630975EA0000001963 +B1655274549945N00630980EA0000001966 +B1655294549949N00630992EA0000001971 +B1655314549953N00631004EA0000001974 +B1655334549955N00631019EA0000001976 +B1655354549951N00631034EA0000001979 +B1655374549941N00631045EA0000001981 +B1655394549930N00631043EA0000001984 +B1655414549924N00631032EA0000001987 +B1655434549925N00631019EA0000001991 +B1655454549931N00631013EA0000001994 +B1655474549940N00631017EA0000001998 +B1655494549945N00631032EA0000002002 +B1655514549944N00631048EA0000002005 +B1655534549936N00631061EA0000002007 +B1655554549923N00631066EA0000002010 +B1655574549911N00631060EA0000002014 +B1655594549905N00631046EA0000002018 +B1656014549906N00631034EA0000002021 +B1656034549914N00631030EA0000002024 +B1656054549921N00631036EA0000002026 +B1656074549925N00631048EA0000002029 +B1656094549926N00631061EA0000002032 +B1656114549928N00631074EA0000002035 +B1656134549928N00631089EA0000002039 +B1656154549926N00631103EA0000002044 +B1656174549923N00631113EA0000002048 +B1656194549920N00631125EA0000002051 +B1656214549913N00631137EA0000002055 +B1656234549898N00631136EA0000002063 +B1656254549892N00631126EA0000002068 +B1656274549890N00631113EA0000002073 +B1656294549895N00631103EA0000002076 +B1656314549903N00631099EA0000002080 +B1656334549910N00631104EA0000002083 +B1656354549914N00631114EA0000002087 +B1656374549919N00631126EA0000002092 +B1656394549922N00631137EA0000002098 +B1656414549922N00631151EA0000002102 +B1656434549916N00631165EA0000002105 +B1656454549904N00631172EA0000002109 +B1656474549891N00631162EA0000002114 +B1656504549887N00631149EA0000002118 +B1656524549890N00631135EA0000002122 +B1656544549900N00631128EA0000002127 +B1656564549910N00631132EA0000002132 +B1656584549916N00631140EA0000002139 +B1657004549917N00631144EA0000002144 +B1657024549922N00631160EA0000002149 +B1657044549924N00631173EA0000002154 +B1657064549921N00631188EA0000002158 +B1657084549912N00631200EA0000002162 +B1657104549898N00631204EA0000002166 +B1657124549887N00631196EA0000002172 +B1657144549884N00631181EA0000002177 +B1657164549888N00631168EA0000002182 +B1657184549898N00631164EA0000002188 +B1657204549906N00631168EA0000002195 +B1657224549911N00631177EA0000002202 +B1657244549913N00631188EA0000002207 +B1657264549912N00631202EA0000002211 +B1657284549907N00631215EA0000002214 +B1657304549899N00631228EA0000002217 +B1657324549888N00631239EA0000002218 +B1657344549876N00631236EA0000002221 +B1657364549868N00631222EA0000002225 +B1657384549869N00631209EA0000002228 +B1657404549875N00631200EA0000002232 +B1657424549884N00631201EA0000002236 +B1657444549892N00631211EA0000002241 +B1657464549894N00631227EA0000002246 +B1657484549892N00631243EA0000002248 +B1657504549886N00631257EA0000002249 +B1657524549876N00631268EA0000002250 +B1657544549864N00631275EA0000002253 +B1657564549852N00631273EA0000002256 +B1657584549842N00631265EA0000002260 +B1658004549835N00631247EA0000002267 +B1658024549834N00631234EA0000002271 +B1658044549838N00631222EA0000002273 +B1658064549845N00631212EA0000002274 +B1658084549856N00631208EA0000002277 +B1658104549863N00631216EA0000002280 +B1658124549867N00631225EA0000002285 +B1658144549868N00631235EA0000002289 +B1658164549867N00631249EA0000002290 +B1658184549861N00631265EA0000002293 +B1658204549846N00631272EA0000002294 +B1658224549833N00631265EA0000002297 +B1658244549827N00631251EA0000002299 +B1658264549826N00631238EA0000002300 +B1658294549830N00631225EA0000002301 +B1658314549839N00631218EA0000002302 +B1658334549848N00631219EA0000002305 +B1658354549853N00631222EA0000002307 +B1658374549855N00631223EA0000002309 +B1658394549862N00631227EA0000002308 +B1658414549868N00631232EA0000002309 +B1658434549872N00631242EA0000002310 +B1658454549876N00631251EA0000002312 +B1658474549882N00631258EA0000002313 +B1658494549890N00631265EA0000002316 +B1658514549897N00631271EA0000002320 +B1658534549905N00631275EA0000002323 +B1658554549913N00631281EA0000002325 +B1658574549921N00631281EA0000002328 +B1658594549929N00631274EA0000002331 +B1659014549933N00631265EA0000002334 +B1659034549935N00631254EA0000002337 +B1659054549934N00631241EA0000002338 +B1659074549927N00631230EA0000002337 +B1659094549912N00631225EA0000002336 +B1659114549900N00631230EA0000002335 +B1659134549891N00631242EA0000002335 +B1659154549885N00631258EA0000002334 +B1659174549882N00631275EA0000002336 +B1659194549884N00631290EA0000002337 +B1659214549891N00631301EA0000002340 +B1659234549899N00631308EA0000002344 +B1659254549907N00631315EA0000002346 +B1659274549915N00631320EA0000002348 +B1659294549923N00631325EA0000002349 +B1659314549930N00631327EA0000002349 +B1659334549939N00631328EA0000002348 +B1659354549949N00631330EA0000002348 +B1659374549957N00631331EA0000002348 +B1659394549970N00631331EA0000002349 +B1659414549979N00631329EA0000002350 +B1659434549987N00631327EA0000002351 +B1659454549994N00631327EA0000002352 +B1659474550003N00631326EA0000002352 +B1659494550011N00631326EA0000002352 +B1659514550017N00631327EA0000002352 +B1659534550024N00631330EA0000002351 +B1659554550029N00631337EA0000002349 +B1659574550032N00631347EA0000002347 +B1659594550031N00631360EA0000002345 +B1700014550026N00631372EA0000002343 +B1700034550022N00631386EA0000002340 +B1700064550015N00631399EA0000002338 +B1700084550005N00631409EA0000002335 +B1700104549995N00631423EA0000002332 +B1700124549985N00631436EA0000002330 +B1700144549981N00631441EA0000002330 +B1700164549968N00631458EA0000002329 +B1700184549960N00631471EA0000002329 +B1700204549953N00631483EA0000002329 +B1700224549947N00631496EA0000002329 +B1700244549941N00631510EA0000002328 +B1700264549936N00631526EA0000002328 +B1700284549931N00631541EA0000002328 +B1700304549927N00631555EA0000002329 +B1700324549924N00631571EA0000002327 +B1700344549920N00631588EA0000002327 +B1700364549916N00631603EA0000002326 +B1700384549913N00631618EA0000002325 +B1700404549910N00631635EA0000002324 +B1700424549907N00631651EA0000002323 +B1700444549905N00631667EA0000002322 +B1700464549902N00631683EA0000002321 +B1700484549901N00631699EA0000002320 +B1700504549899N00631716EA0000002320 +B1700524549896N00631733EA0000002319 +B1700544549892N00631750EA0000002318 +B1700564549887N00631767EA0000002317 +B1700584549883N00631786EA0000002315 +B1701004549878N00631806EA0000002314 +B1701024549873N00631826EA0000002313 +B1701044549869N00631845EA0000002312 +B1701064549866N00631865EA0000002310 +B1701084549861N00631885EA0000002310 +B1701104549858N00631905EA0000002310 +B1701124549855N00631924EA0000002309 +B1701144549851N00631944EA0000002307 +B1701164549848N00631966EA0000002307 +B1701184549843N00631991EA0000002309 +B1701204549840N00632006EA0000002308 +B1701224549837N00632022EA0000002307 +B1701244549833N00632037EA0000002307 +B1701264549830N00632054EA0000002305 +B1701284549827N00632073EA0000002303 +B1701304549822N00632091EA0000002302 +B1701324549818N00632109EA0000002299 +B1701344549812N00632129EA0000002297 +B1701364549807N00632149EA0000002296 +B1701384549802N00632170EA0000002296 +B1701404549798N00632190EA0000002295 +B1701424549793N00632210EA0000002293 +B1701454549789N00632231EA0000002292 +B1701474549784N00632252EA0000002290 +B1701494549779N00632273EA0000002288 +B1701514549773N00632294EA0000002286 +B1701534549767N00632313EA0000002285 +B1701554549760N00632333EA0000002282 +B1701574549753N00632353EA0000002279 +B1701594549747N00632373EA0000002277 +B1702014549742N00632394EA0000002275 +B1702034549736N00632414EA0000002273 +B1702054549729N00632434EA0000002270 +B1702074549726N00632445EA0000002268 +B1702094549716N00632476EA0000002267 +B1702114549708N00632496EA0000002265 +B1702134549701N00632516EA0000002263 +B1702154549694N00632537EA0000002260 +B1702174549687N00632558EA0000002260 +B1702194549682N00632578EA0000002258 +B1702214549677N00632598EA0000002255 +B1702234549671N00632619EA0000002252 +B1702254549666N00632640EA0000002252 +B1702274549660N00632659EA0000002250 +B1702294549652N00632679EA0000002248 +B1702314549645N00632698EA0000002247 +B1702334549639N00632717EA0000002245 +B1702354549633N00632737EA0000002244 +B1702374549627N00632756EA0000002243 +B1702394549621N00632774EA0000002242 +B1702414549615N00632793EA0000002240 +B1702434549608N00632813EA0000002237 +B1702454549600N00632833EA0000002235 +B1702474549592N00632851EA0000002234 +B1702494549583N00632870EA0000002232 +B1702514549575N00632889EA0000002230 +B1702534549567N00632908EA0000002229 +B1702554549560N00632927EA0000002227 +B1702574549554N00632947EA0000002225 +B1702594549543N00632975EA0000002224 +B1703014549536N00632993EA0000002222 +B1703034549529N00633012EA0000002220 +B1703054549522N00633032EA0000002219 +B1703074549516N00633051EA0000002218 +B1703094549510N00633070EA0000002214 +B1703114549504N00633090EA0000002211 +B1703134549498N00633110EA0000002208 +B1703154549492N00633128EA0000002205 +B1703174549486N00633146EA0000002200 +B1703194549480N00633165EA0000002195 +B1703214549474N00633185EA0000002192 +B1703234549468N00633202EA0000002190 +B1703264549461N00633219EA0000002186 +B1703284549455N00633237EA0000002182 +B1703304549449N00633255EA0000002179 +B1703324549443N00633271EA0000002175 +B1703344549437N00633289EA0000002171 +B1703364549431N00633308EA0000002166 +B1703384549425N00633328EA0000002161 +B1703404549418N00633347EA0000002158 +B1703424549411N00633367EA0000002156 +B1703444549404N00633385EA0000002155 +B1703464549396N00633403EA0000002154 +B1703484549388N00633422EA0000002154 +B1703504549381N00633441EA0000002154 +B1703524549373N00633458EA0000002155 +B1703544549365N00633475EA0000002156 +B1703564549359N00633491EA0000002158 +B1703584549353N00633503EA0000002160 +B1704004549346N00633515EA0000002160 +B1704024549339N00633528EA0000002162 +B1704044549332N00633541EA0000002165 +B1704064549325N00633553EA0000002169 +B1704084549319N00633563EA0000002175 +B1704104549314N00633570EA0000002178 +B1704124549304N00633577EA0000002181 +B1704144549293N00633575EA0000002185 +B1704164549287N00633562EA0000002187 +B1704184549285N00633547EA0000002190 +B1704204549292N00633539EA0000002193 +B1704224549303N00633544EA0000002197 +B1704244549307N00633558EA0000002200 +B1704264549305N00633574EA0000002204 +B1704284549301N00633587EA0000002208 +B1704304549294N00633600EA0000002212 +B1704324549288N00633613EA0000002218 +B1704344549284N00633625EA0000002225 +B1704364549278N00633635EA0000002232 +B1704384549269N00633651EA0000002241 +B1704404549260N00633659EA0000002245 +B1704424549250N00633660EA0000002250 +B1704444549241N00633649EA0000002254 +B1704464549238N00633634EA0000002259 +B1704484549243N00633622EA0000002264 +B1704504549255N00633625EA0000002268 +B1704524549262N00633639EA0000002273 +B1704544549260N00633653EA0000002279 +B1704564549254N00633665EA0000002285 +B1704584549248N00633676EA0000002290 +B1705004549241N00633688EA0000002295 +B1705024549232N00633697EA0000002301 +B1705044549221N00633701EA0000002307 +B1705074549211N00633697EA0000002312 +B1705094549205N00633687EA0000002317 +B1705114549204N00633673EA0000002321 +B1705134549208N00633662EA0000002325 +B1705154549216N00633659EA0000002329 +B1705174549222N00633667EA0000002333 +B1705194549224N00633680EA0000002338 +B1705214549222N00633694EA0000002344 +B1705234549216N00633706EA0000002349 +B1705254549207N00633713EA0000002354 +B1705274549198N00633714EA0000002359 +B1705294549189N00633707EA0000002363 +B1705314549184N00633695EA0000002366 +B1705334549185N00633681EA0000002369 +B1705354549191N00633672EA0000002372 +B1705374549199N00633672EA0000002375 +B1705394549206N00633681EA0000002378 +B1705414549208N00633695EA0000002382 +B1705434549204N00633708EA0000002386 +B1705454549199N00633719EA0000002390 +B1705474549192N00633728EA0000002394 +B1705494549182N00633731EA0000002397 +B1705514549172N00633726EA0000002400 +B1705534549165N00633716EA0000002403 +B1705554549162N00633702EA0000002404 +B1705574549165N00633689EA0000002406 +B1705594549170N00633678EA0000002407 +B1706014549171N00633668EA0000002410 +B1706034549169N00633655EA0000002412 +B1706054549164N00633644EA0000002414 +B1706074549153N00633638EA0000002416 +B1706094549142N00633638EA0000002417 +B1706114549132N00633641EA0000002419 +B1706134549122N00633646EA0000002421 +B1706154549112N00633650EA0000002422 +B1706174549103N00633656EA0000002423 +B1706194549091N00633670EA0000002421 +B1706214549083N00633680EA0000002420 +B1706234549075N00633689EA0000002419 +B1706254549067N00633700EA0000002417 +B1706274549059N00633712EA0000002415 +B1706294549051N00633726EA0000002413 +B1706314549042N00633740EA0000002411 +B1706334549035N00633754EA0000002411 +B1706354549027N00633768EA0000002410 +B1706374549020N00633782EA0000002410 +B1706394549013N00633797EA0000002410 +B1706414549007N00633814EA0000002410 +B1706434549000N00633832EA0000002409 +B1706454548993N00633849EA0000002409 +B1706484548986N00633863EA0000002411 +B1706504548980N00633878EA0000002413 +B1706524548972N00633891EA0000002416 +B1706544548962N00633898EA0000002419 +B1706564548950N00633898EA0000002421 +B1706584548940N00633886EA0000002423 +B1707004548940N00633870EA0000002423 +B1707024548950N00633866EA0000002423 +B1707044548957N00633877EA0000002425 +B1707064548957N00633894EA0000002426 +B1707084548951N00633910EA0000002429 +B1707104548945N00633926EA0000002430 +B1707124548939N00633944EA0000002432 +B1707144548932N00633961EA0000002434 +B1707164548926N00633977EA0000002437 +B1707184548919N00633993EA0000002440 +B1707204548912N00634009EA0000002443 +B1707224548906N00634026EA0000002447 +B1707244548901N00634042EA0000002453 +B1707264548896N00634057EA0000002457 +B1707284548889N00634072EA0000002461 +B1707304548880N00634081EA0000002465 +B1707324548869N00634084EA0000002468 +B1707344548859N00634078EA0000002470 +B1707364548854N00634064EA0000002472 +B1707384548858N00634048EA0000002475 +B1707404548869N00634044EA0000002477 +B1707424548878N00634054EA0000002480 +B1707444548879N00634072EA0000002483 +B1707464548874N00634089EA0000002486 +B1707484548868N00634104EA0000002489 +B1707504548862N00634120EA0000002492 +B1707524548856N00634135EA0000002496 +B1707544548850N00634149EA0000002499 +B1707564548844N00634163EA0000002502 +B1707584548829N00634176EA0000002506 +B1708004548816N00634171EA0000002508 +B1708024548809N00634158EA0000002511 +B1708044548811N00634144EA0000002512 +B1708064548821N00634138EA0000002514 +B1708084548830N00634146EA0000002515 +B1708104548833N00634161EA0000002517 +B1708124548829N00634177EA0000002520 +B1708144548822N00634188EA0000002524 +B1708164548817N00634199EA0000002528 +B1708184548810N00634212EA0000002532 +B1708204548802N00634224EA0000002536 +B1708224548792N00634229EA0000002540 +B1708254548783N00634224EA0000002543 +B1708274548778N00634214EA0000002545 +B1708294548781N00634200EA0000002548 +B1708314548792N00634195EA0000002551 +B1708334548801N00634206EA0000002554 +B1708354548802N00634222EA0000002559 +B1708374548797N00634238EA0000002564 +B1708394548787N00634249EA0000002569 +B1708414548775N00634254EA0000002575 +B1708434548764N00634248EA0000002581 +B1708454548758N00634236EA0000002586 +B1708474548758N00634222EA0000002591 +B1708494548767N00634216EA0000002595 +B1708514548777N00634222EA0000002599 +B1708534548781N00634237EA0000002604 +B1708554548779N00634252EA0000002610 +B1708574548774N00634266EA0000002616 +B1708594548766N00634277EA0000002622 +B1709014548755N00634284EA0000002628 +B1709034548743N00634285EA0000002634 +B1709054548734N00634276EA0000002639 +B1709074548730N00634263EA0000002644 +B1709094548734N00634252EA0000002648 +B1709114548743N00634247EA0000002652 +B1709134548751N00634255EA0000002656 +B1709154548754N00634270EA0000002660 +B1709174548752N00634284EA0000002666 +B1709194548748N00634296EA0000002672 +B1709214548743N00634308EA0000002678 +B1709234548738N00634322EA0000002682 +B1709254548735N00634337EA0000002687 +B1709274548733N00634352EA0000002689 +B1709294548728N00634368EA0000002692 +B1709314548726N00634384EA0000002694 +B1709334548724N00634399EA0000002697 +B1709354548723N00634419EA0000002698 +B1709374548723N00634442EA0000002698 +B1709394548725N00634472EA0000002701 +B1709414548725N00634491EA0000002702 +B1709434548727N00634513EA0000002703 +B1709454548730N00634532EA0000002704 +B1709474548733N00634549EA0000002706 +B1709494548738N00634566EA0000002706 +B1709514548745N00634586EA0000002706 +B1709534548751N00634606EA0000002707 +B1709554548756N00634624EA0000002709 +B1709574548762N00634641EA0000002709 +B1709594548769N00634660EA0000002709 +B1710014548778N00634680EA0000002708 +B1710034548787N00634696EA0000002708 +B1710064548795N00634713EA0000002707 +B1710084548802N00634733EA0000002705 +B1710104548810N00634753EA0000002703 +B1710124548816N00634772EA0000002701 +B1710144548824N00634790EA0000002700 +B1710164548832N00634808EA0000002697 +B1710184548841N00634827EA0000002694 +B1710204548849N00634845EA0000002691 +B1710224548856N00634862EA0000002688 +B1710244548865N00634879EA0000002684 +B1710264548873N00634897EA0000002680 +B1710284548873N00634897EA0000002673 +B1710304548890N00634932EA0000002670 +B1710324548898N00634948EA0000002666 +B1710344548906N00634966EA0000002663 +B1710364548915N00634981EA0000002661 +B1710384548924N00634996EA0000002659 +B1710404548934N00635010EA0000002657 +B1710424548944N00635023EA0000002654 +B1710444548953N00635037EA0000002652 +B1710464548962N00635052EA0000002650 +B1710484548971N00635067EA0000002647 +B1710504548981N00635081EA0000002645 +B1710524548990N00635094EA0000002642 +B1710544549001N00635106EA0000002639 +B1710564549011N00635119EA0000002637 +B1710584549021N00635133EA0000002634 +B1711004549031N00635145EA0000002630 +B1711024549042N00635159EA0000002627 +B1711044549051N00635174EA0000002624 +B1711064549060N00635187EA0000002622 +B1711084549070N00635200EA0000002619 +B1711104549080N00635214EA0000002615 +B1711124549090N00635229EA0000002613 +B1711144549099N00635243EA0000002611 +B1711164549107N00635258EA0000002607 +B1711184549118N00635285EA0000002604 +B1711204549127N00635300EA0000002601 +B1711224549135N00635315EA0000002598 +B1711244549144N00635329EA0000002595 +B1711264549154N00635343EA0000002591 +B1711284549163N00635357EA0000002588 +B1711304549171N00635373EA0000002584 +B1711324549180N00635388EA0000002580 +B1711344549189N00635405EA0000002577 +B1711364549196N00635421EA0000002574 +B1711384549205N00635436EA0000002571 +B1711404549213N00635451EA0000002568 +B1711424549220N00635469EA0000002564 +B1711444549224N00635488EA0000002561 +B1711474549228N00635507EA0000002558 +B1711494549231N00635527EA0000002555 +B1711514549233N00635547EA0000002552 +B1711534549234N00635567EA0000002549 +B1711554549236N00635587EA0000002546 +B1711574549238N00635608EA0000002543 +B1711594549240N00635628EA0000002540 +B1712014549241N00635649EA0000002537 +B1712034549243N00635669EA0000002534 +B1712054549244N00635679EA0000002532 +B1712074549248N00635708EA0000002530 +B1712094549252N00635726EA0000002527 +B1712114549255N00635744EA0000002524 +B1712134549258N00635763EA0000002521 +B1712154549262N00635782EA0000002518 +B1712174549266N00635800EA0000002515 +B1712194549269N00635819EA0000002512 +B1712214549273N00635838EA0000002508 +B1712234549277N00635857EA0000002506 +B1712254549283N00635874EA0000002503 +B1712274549290N00635890EA0000002500 +B1712294549297N00635907EA0000002497 +B1712314549304N00635923EA0000002495 +B1712334549311N00635939EA0000002491 +B1712354549318N00635955EA0000002487 +B1712374549325N00635972EA0000002484 +B1712394549333N00635986EA0000002481 +B1712414549343N00635999EA0000002478 +B1712434549352N00636012EA0000002475 +B1712454549363N00636024EA0000002471 +B1712474549373N00636036EA0000002468 +B1712494549383N00636051EA0000002465 +B1712514549392N00636066EA0000002463 +B1712534549402N00636080EA0000002461 +B1712554549412N00636094EA0000002458 +B1712574549423N00636106EA0000002454 +B1712594549440N00636126EA0000002451 +B1713014549448N00636140EA0000002448 +B1713034549456N00636154EA0000002445 +B1713054549466N00636168EA0000002442 +B1713074549476N00636181EA0000002440 +B1713094549485N00636195EA0000002437 +B1713114549493N00636210EA0000002434 +B1713134549502N00636225EA0000002431 +B1713154549510N00636241EA0000002428 +B1713174549518N00636257EA0000002425 +B1713194549527N00636271EA0000002421 +B1713214549537N00636285EA0000002418 +B1713234549546N00636299EA0000002414 +B1713254549556N00636313EA0000002411 +B1713284549565N00636326EA0000002407 +B1713304549575N00636339EA0000002404 +B1713324549584N00636355EA0000002401 +B1713344549591N00636372EA0000002397 +B1713364549598N00636389EA0000002394 +B1713384549604N00636408EA0000002390 +B1713404549609N00636427EA0000002387 +B1713424549612N00636436EA0000002384 +B1713444549622N00636462EA0000002381 +B1713464549628N00636481EA0000002378 +B1713484549635N00636499EA0000002375 +B1713504549641N00636518EA0000002373 +B1713524549645N00636538EA0000002370 +B1713544549651N00636557EA0000002368 +B1713564549657N00636575EA0000002365 +B1713584549663N00636594EA0000002362 +B1714004549669N00636613EA0000002360 +B1714024549675N00636631EA0000002357 +B1714044549680N00636651EA0000002354 +B1714064549686N00636670EA0000002351 +B1714084549693N00636688EA0000002348 +B1714104549700N00636707EA0000002346 +B1714124549706N00636726EA0000002343 +B1714144549713N00636745EA0000002341 +B1714164549719N00636763EA0000002339 +B1714184549726N00636782EA0000002337 +B1714204549733N00636801EA0000002334 +B1714224549739N00636820EA0000002332 +B1714244549746N00636839EA0000002329 +B1714264549753N00636858EA0000002327 +B1714284549760N00636876EA0000002325 +B1714304549767N00636895EA0000002323 +B1714324549774N00636913EA0000002321 +B1714344549781N00636931EA0000002319 +B1714364549789N00636948EA0000002317 +B1714384549796N00636967EA0000002314 +B1714404549807N00636994EA0000002311 +B1714424549815N00637012EA0000002308 +B1714444549823N00637029EA0000002305 +B1714464549831N00637047EA0000002303 +B1714484549840N00637065EA0000002300 +B1714504549849N00637081EA0000002299 +B1714524549857N00637098EA0000002296 +B1714544549865N00637115EA0000002294 +B1714564549873N00637132EA0000002292 +B1714584549881N00637148EA0000002289 +B1715004549888N00637165EA0000002287 +B1715024549896N00637181EA0000002284 +B1715044549903N00637199EA0000002281 +B1715064549910N00637216EA0000002278 +B1715094549917N00637233EA0000002274 +B1715114549925N00637250EA0000002271 +B1715134549933N00637267EA0000002268 +B1715154549940N00637284EA0000002265 +B1715174549949N00637300EA0000002262 +B1715194549953N00637308EA0000002258 +B1715214549966N00637332EA0000002255 +B1715234549974N00637348EA0000002253 +B1715254549983N00637365EA0000002250 +B1715274549990N00637382EA0000002248 +B1715294549999N00637397EA0000002246 +B1715314550008N00637412EA0000002243 +B1715334550016N00637428EA0000002241 +B1715354550025N00637444EA0000002239 +B1715374550033N00637460EA0000002237 +B1715394550041N00637476EA0000002234 +B1715414550048N00637494EA0000002232 +B1715434550055N00637512EA0000002230 +B1715454550062N00637529EA0000002229 +B1715474550069N00637546EA0000002227 +B1715494550075N00637563EA0000002225 +B1715514550082N00637581EA0000002222 +B1715534550087N00637599EA0000002220 +B1715554550093N00637618EA0000002217 +B1715574550098N00637637EA0000002215 +B1715594550103N00637655EA0000002213 +B1716014550109N00637673EA0000002211 +B1716034550115N00637691EA0000002208 +B1716054550122N00637710EA0000002206 +B1716074550128N00637727EA0000002204 +B1716094550134N00637746EA0000002200 +B1716114550139N00637765EA0000002197 +B1716134550146N00637783EA0000002194 +B1716154550152N00637802EA0000002191 +B1716174550158N00637820EA0000002188 +B1716194550164N00637837EA0000002185 +B1716214550172N00637864EA0000002180 +B1716234550178N00637883EA0000002177 +B1716254550183N00637902EA0000002175 +B1716274550189N00637921EA0000002174 +B1716294550194N00637939EA0000002172 +B1716314550200N00637957EA0000002170 +B1716334550206N00637975EA0000002168 +B1716354550212N00637993EA0000002165 +B1716374550219N00638012EA0000002163 +B1716394550227N00638029EA0000002162 +B1716414550234N00638046EA0000002160 +B1716434550240N00638064EA0000002157 +B1716454550246N00638083EA0000002156 +B1716484550253N00638099EA0000002154 +B1716504550260N00638115EA0000002152 +B1716524550267N00638133EA0000002150 +B1716544550275N00638150EA0000002148 +B1716564550280N00638158EA0000002146 +B1716584550292N00638182EA0000002142 +B1717004550300N00638201EA0000002138 +B1717024550306N00638220EA0000002136 +B1717044550312N00638238EA0000002132 +B1717064550319N00638257EA0000002128 +B1717084550327N00638275EA0000002126 +B1717104550334N00638290EA0000002123 +B1717124550341N00638307EA0000002119 +B1717144550348N00638324EA0000002114 +B1717164550354N00638343EA0000002111 +B1717184550359N00638362EA0000002109 +B1717204550365N00638381EA0000002106 +B1717224550369N00638400EA0000002102 +B1717244550374N00638419EA0000002099 +B1717264550379N00638437EA0000002096 +B1717284550386N00638456EA0000002093 +B1717304550392N00638473EA0000002091 +B1717324550397N00638491EA0000002088 +B1717344550402N00638508EA0000002085 +B1717364550407N00638527EA0000002081 +B1717384550413N00638545EA0000002078 +B1717404550419N00638564EA0000002074 +B1717424550424N00638582EA0000002072 +B1717444550430N00638600EA0000002069 +B1717464550435N00638619EA0000002066 +B1717484550439N00638639EA0000002063 +B1717504550441N00638659EA0000002061 +B1717524550444N00638679EA0000002059 +B1717544550446N00638698EA0000002056 +B1717564550449N00638718EA0000002053 +B1717584550452N00638739EA0000002049 +B1718004550456N00638760EA0000002047 +B1718024550460N00638790EA0000002043 +B1718044550463N00638810EA0000002040 +B1718064550464N00638832EA0000002037 +B1718084550467N00638852EA0000002036 +B1718104550469N00638872EA0000002034 +B1718124550471N00638893EA0000002031 +B1718144550473N00638916EA0000002030 +B1718164550476N00638937EA0000002028 +B1718184550478N00638959EA0000002025 +B1718204550480N00638980EA0000002022 +B1718224550482N00639002EA0000002019 +B1718244550486N00639024EA0000002017 +B1718264550490N00639045EA0000002015 +B1718294550494N00639065EA0000002012 +B1718314550498N00639087EA0000002009 +B1718334550502N00639109EA0000002007 +B1718354550505N00639131EA0000002006 +B1718374550506N00639152EA0000002005 +B1718394550508N00639170EA0000002004 +B1718414550510N00639189EA0000002003 +B1718434550513N00639208EA0000002002 +B1718454550516N00639226EA0000002003 +B1718474550518N00639241EA0000002004 +B1718494550520N00639256EA0000002004 +B1718514550521N00639270EA0000002004 +B1718534550521N00639284EA0000002003 +B1718554550520N00639299EA0000002002 +B1718574550520N00639315EA0000002001 +B1718594550519N00639330EA0000002000 +B1719014550519N00639346EA0000001998 +B1719034550518N00639364EA0000001996 +B1719054550517N00639381EA0000001995 +B1719074550516N00639398EA0000001993 +B1719094550515N00639416EA0000001990 +B1719114550514N00639435EA0000001989 +B1719134550515N00639453EA0000001987 +B1719154550516N00639471EA0000001985 +B1719174550517N00639489EA0000001984 +B1719194550518N00639506EA0000001983 +B1719214550519N00639523EA0000001981 +B1719234550520N00639542EA0000001981 +B1719254550520N00639560EA0000001982 +B1719274550520N00639575EA0000001983 +B1719294550519N00639592EA0000001982 +B1719314550518N00639611EA0000001983 +B1719334550518N00639627EA0000001983 +B1719354550518N00639643EA0000001981 +B1719374550518N00639662EA0000001981 +B1719394550519N00639680EA0000001981 +B1719414550521N00639704EA0000001981 +B1719434550522N00639722EA0000001980 +B1719454550523N00639740EA0000001981 +B1719474550525N00639755EA0000001982 +B1719494550527N00639770EA0000001982 +B1719514550529N00639787EA0000001983 +B1719534550530N00639802EA0000001985 +B1719554550531N00639815EA0000001987 +B1719574550536N00639821EA0000001987 +B1719594550542N00639820EA0000001988 +B1720014550545N00639813EA0000001989 +B1720034550544N00639801EA0000001989 +B1720054550538N00639788EA0000001989 +B1720074550523N00639781EA0000001990 +B1720104550510N00639788EA0000001990 +B1720124550501N00639801EA0000001991 +B1720144550498N00639817EA0000001992 +B1720164550498N00639832EA0000001994 +B1720184550499N00639847EA0000001994 +B1720204550501N00639861EA0000001995 +B1720224550504N00639874EA0000001996 +B1720244550509N00639886EA0000001997 +B1720264550514N00639897EA0000001997 +B1720284550518N00639910EA0000001998 +B1720304550522N00639923EA0000001998 +B1720324550526N00639936EA0000001997 +B1720344550531N00639949EA0000001996 +B1720364550537N00639960EA0000001996 +B1720384550542N00639973EA0000001996 +B1720404550547N00639985EA0000001995 +B1720424550552N00639998EA0000001995 +B1720444550558N00640010EA0000001995 +B1720464550564N00640019EA0000001994 +B1720484550571N00640029EA0000001993 +B1720504550577N00640043EA0000001992 +B1720524550582N00640056EA0000001992 +B1720544550588N00640067EA0000001992 +B1720564550594N00640079EA0000001991 +B1720584550600N00640089EA0000001991 +B1721004550607N00640100EA0000001990 +B1721024550614N00640110EA0000001988 +B1721044550622N00640121EA0000001987 +B1721064550631N00640131EA0000001987 +B1721084550638N00640142EA0000001986 +B1721104550646N00640153EA0000001984 +B1721124550656N00640163EA0000001983 +B1721144550665N00640173EA0000001982 +B1721164550673N00640184EA0000001980 +B1721184550683N00640193EA0000001977 +B1721204550697N00640207EA0000001976 +B1721224550706N00640217EA0000001974 +B1721244550715N00640227EA0000001972 +B1721264550724N00640238EA0000001970 +B1721284550732N00640252EA0000001969 +B1721304550740N00640264EA0000001968 +B1721324550748N00640276EA0000001966 +B1721344550756N00640290EA0000001964 +B1721364550765N00640301EA0000001963 +B1721384550774N00640308EA0000001962 +B1721404550783N00640316EA0000001960 +B1721424550792N00640327EA0000001958 +B1721444550800N00640338EA0000001958 +B1721464550809N00640349EA0000001957 +B1721494550817N00640361EA0000001956 +B1721514550826N00640373EA0000001956 +B1721534550833N00640386EA0000001956 +B1721554550841N00640398EA0000001955 +B1721574550850N00640409EA0000001955 +B1721594550858N00640422EA0000001955 +B1722014550866N00640436EA0000001956 +B1722034550874N00640450EA0000001957 +B1722054550881N00640464EA0000001957 +B1722074550888N00640479EA0000001957 +B1722094550888N00640479EA0000001956 +B1722114550904N00640509EA0000001956 +B1722134550910N00640525EA0000001957 +B1722154550916N00640545EA0000001957 +B1722174550922N00640563EA0000001958 +B1722194550927N00640580EA0000001958 +B1722214550932N00640599EA0000001957 +B1722234550939N00640619EA0000001956 +B1722254550946N00640637EA0000001955 +B1722274550952N00640653EA0000001954 +B1722294550958N00640669EA0000001953 +B1722314550967N00640684EA0000001952 +B1722334550977N00640698EA0000001949 +B1722354550985N00640712EA0000001946 +B1722374550994N00640728EA0000001942 +B1722394551003N00640743EA0000001938 +B1722414551012N00640759EA0000001935 +B1722434551020N00640774EA0000001932 +B1722454551028N00640788EA0000001928 +B1722474551037N00640802EA0000001925 +B1722494551045N00640813EA0000001921 +B1722514551055N00640825EA0000001917 +B1722534551064N00640838EA0000001913 +B1722554551072N00640851EA0000001909 +B1722574551080N00640865EA0000001906 +B1722594551087N00640881EA0000001902 +B1723014551099N00640903EA0000001897 +B1723034551108N00640917EA0000001894 +B1723054551116N00640932EA0000001891 +B1723074551124N00640945EA0000001888 +B1723094551133N00640959EA0000001884 +B1723114551142N00640974EA0000001880 +B1723134551150N00640988EA0000001877 +B1723154551158N00641002EA0000001874 +B1723174551167N00641016EA0000001870 +B1723194551175N00641030EA0000001866 +B1723214551184N00641043EA0000001863 +B1723234551192N00641056EA0000001860 +B1723254551202N00641069EA0000001856 +B1723284551210N00641083EA0000001854 +B1723304551219N00641098EA0000001851 +B1723324551227N00641111EA0000001849 +B1723344551236N00641124EA0000001847 +B1723364551245N00641137EA0000001845 +B1723384551254N00641150EA0000001843 +B1723404551263N00641162EA0000001841 +B1723424551273N00641175EA0000001839 +B1723444551282N00641187EA0000001837 +B1723464551291N00641200EA0000001834 +B1723484551300N00641214EA0000001831 +B1723504551309N00641227EA0000001828 +B1723524551318N00641240EA0000001826 +B1723544551327N00641253EA0000001823 +B1723564551336N00641266EA0000001819 +B1723584551346N00641280EA0000001817 +B1724004551355N00641294EA0000001814 +B1724024551364N00641307EA0000001812 +B1724044551373N00641320EA0000001809 +B1724064551383N00641332EA0000001807 +B1724084551392N00641344EA0000001805 +B1724104551401N00641357EA0000001803 +B1724124551410N00641371EA0000001801 +B1724144551418N00641386EA0000001799 +B1724164551426N00641403EA0000001796 +B1724184551435N00641421EA0000001793 +B1724204551443N00641438EA0000001791 +B1724224551450N00641455EA0000001789 +B1724244551458N00641474EA0000001787 +B1724264551466N00641493EA0000001786 +B1724284551473N00641511EA0000001785 +B1724304551480N00641530EA0000001784 +B1724324551487N00641547EA0000001782 +B1724344551494N00641565EA0000001781 +B1724364551502N00641581EA0000001780 +B1724384551509N00641596EA0000001778 +B1724404551517N00641612EA0000001776 +B1724424551530N00641641EA0000001773 +B1724444551537N00641657EA0000001772 +B1724464551545N00641673EA0000001771 +B1724484551551N00641687EA0000001771 +B1724504551558N00641700EA0000001770 +B1724524551566N00641713EA0000001769 +B1724544551574N00641729EA0000001766 +B1724564551583N00641744EA0000001764 +B1724584551592N00641758EA0000001762 +B1725004551600N00641772EA0000001760 +B1725024551609N00641787EA0000001757 +B1725044551619N00641802EA0000001755 +B1725064551628N00641818EA0000001753 +B1725094551637N00641832EA0000001751 +B1725114551647N00641846EA0000001749 +B1725134551657N00641861EA0000001746 +B1725154551667N00641876EA0000001746 +B1725174551676N00641888EA0000001746 +B1725194551685N00641898EA0000001745 +B1725214551696N00641911EA0000001742 +B1725234551705N00641926EA0000001741 +B1725254551714N00641940EA0000001739 +B1725274551724N00641953EA0000001736 +B1725294551735N00641967EA0000001735 +B1725314551745N00641982EA0000001734 +B1725334551755N00641995EA0000001733 +B1725354551765N00642009EA0000001732 +B1725374551776N00642023EA0000001731 +B1725394551786N00642036EA0000001731 +B1725414551797N00642047EA0000001730 +B1725434551807N00642058EA0000001728 +B1725454551818N00642069EA0000001726 +B1725474551830N00642079EA0000001723 +B1725494551841N00642090EA0000001722 +B1725514551851N00642101EA0000001721 +B1725534551860N00642114EA0000001719 +B1725554551871N00642126EA0000001718 +B1725574551881N00642138EA0000001717 +B1725594551890N00642149EA0000001716 +B1726014551900N00642161EA0000001713 +B1726034551911N00642174EA0000001710 +B1726054551922N00642187EA0000001709 +B1726074551933N00642199EA0000001706 +B1726094551944N00642211EA0000001703 +B1726114551955N00642224EA0000001700 +B1726134551966N00642235EA0000001699 +B1726154551976N00642248EA0000001697 +B1726174551986N00642262EA0000001695 +B1726194551997N00642273EA0000001693 +B1726214552007N00642285EA0000001692 +B1726234552021N00642307EA0000001689 +B1726254552031N00642319EA0000001687 +B1726274552041N00642331EA0000001685 +B1726294552052N00642343EA0000001683 +B1726314552063N00642354EA0000001681 +B1726334552075N00642363EA0000001679 +B1726354552086N00642373EA0000001678 +B1726374552098N00642382EA0000001676 +B1726394552110N00642391EA0000001675 +B1726414552121N00642401EA0000001673 +B1726434552133N00642412EA0000001670 +B1726454552145N00642422EA0000001669 +B1726474552156N00642432EA0000001668 +B1726504552167N00642444EA0000001666 +B1726524552179N00642456EA0000001664 +B1726544552190N00642467EA0000001662 +B1726564552202N00642476EA0000001661 +B1726584552214N00642485EA0000001660 +B1727004552225N00642492EA0000001658 +B1727024552237N00642500EA0000001656 +B1727044552249N00642510EA0000001654 +B1727064552260N00642521EA0000001653 +B1727084552271N00642532EA0000001653 +B1727104552282N00642543EA0000001651 +B1727124552282N00642543EA0000001649 +B1727144552303N00642568EA0000001648 +B1727164552313N00642581EA0000001647 +B1727184552323N00642594EA0000001646 +B1727204552333N00642609EA0000001644 +B1727224552343N00642625EA0000001642 +B1727244552354N00642639EA0000001641 +B1727264552364N00642650EA0000001640 +B1727284552375N00642661EA0000001637 +B1727304552387N00642672EA0000001636 +B1727324552399N00642682EA0000001635 +B1727344552409N00642693EA0000001633 +B1727364552420N00642704EA0000001632 +B1727384552431N00642717EA0000001631 +B1727404552440N00642730EA0000001631 +B1727424552450N00642742EA0000001632 +B1727444552459N00642754EA0000001633 +B1727464552466N00642766EA0000001635 +B1727484552473N00642777EA0000001635 +B1727504552481N00642788EA0000001634 +B1727524552489N00642800EA0000001635 +B1727544552496N00642813EA0000001635 +B1727564552504N00642825EA0000001636 +B1727584552512N00642837EA0000001636 +B1728004552519N00642848EA0000001636 +B1728024552533N00642866EA0000001635 +B1728044552542N00642877EA0000001635 +B1728064552551N00642888EA0000001635 +B1728084552560N00642899EA0000001636 +B1728104552569N00642910EA0000001636 +B1728124552577N00642923EA0000001637 +B1728144552583N00642935EA0000001638 +B1728164552589N00642948EA0000001638 +B1728184552596N00642962EA0000001637 +B1728204552603N00642977EA0000001636 +B1728224552610N00642992EA0000001634 +B1728244552619N00643005EA0000001633 +B1728264552628N00643019EA0000001632 +B1728284552638N00643030EA0000001631 +B1728314552647N00643043EA0000001630 +B1728334552657N00643056EA0000001629 +B1728354552667N00643069EA0000001629 +B1728374552676N00643082EA0000001629 +B1728394552685N00643096EA0000001628 +B1728414552694N00643109EA0000001628 +B1728434552704N00643121EA0000001627 +B1728454552714N00643132EA0000001627 +B1728474552724N00643144EA0000001626 +B1728494552733N00643155EA0000001626 +B1728514552744N00643165EA0000001626 +B1728534552754N00643178EA0000001627 +B1728554552764N00643189EA0000001629 +B1728574552772N00643199EA0000001629 +B1728594552782N00643209EA0000001628 +B1729014552793N00643220EA0000001628 +B1729034552803N00643229EA0000001630 +B1729054552813N00643239EA0000001631 +B1729074552823N00643252EA0000001633 +B1729094552833N00643265EA0000001634 +B1729114552841N00643278EA0000001637 +B1729134552846N00643290EA0000001640 +B1729154552853N00643301EA0000001642 +B1729174552858N00643310EA0000001644 +B1729194552864N00643318EA0000001646 +B1729214552870N00643328EA0000001647 +B1729234552875N00643338EA0000001650 +B1729254552880N00643346EA0000001652 +B1729274552885N00643356EA0000001653 +B1729294552890N00643367EA0000001654 +B1729314552896N00643376EA0000001657 +B1729334552901N00643386EA0000001660 +B1729354552906N00643397EA0000001661 +B1729374552911N00643410EA0000001663 +B1729394552918N00643422EA0000001665 +B1729414552924N00643434EA0000001667 +B1729434552934N00643453EA0000001670 +B1729454552941N00643466EA0000001673 +B1729474552947N00643478EA0000001677 +B1729494552953N00643489EA0000001680 +B1729514552958N00643502EA0000001681 +B1729534552964N00643516EA0000001682 +B1729554552970N00643527EA0000001684 +B1729574552975N00643532EA0000001684 +B1729594552980N00643532EA0000001685 +B1730014552982N00643529EA0000001685 +B1730034552981N00643522EA0000001685 +B1730054552974N00643516EA0000001685 +B1730084552963N00643515EA0000001686 +B1730104552951N00643521EA0000001686 +B1730124552941N00643537EA0000001686 +B1730144552936N00643555EA0000001687 +B1730164552934N00643574EA0000001687 +B1730184552933N00643593EA0000001688 +B1730204552932N00643612EA0000001690 +B1730224552932N00643631EA0000001692 +B1730244552932N00643650EA0000001695 +B1730264552932N00643669EA0000001698 +B1730284552934N00643686EA0000001699 +B1730304552940N00643700EA0000001701 +B1730324552947N00643708EA0000001703 +B1730344552951N00643706EA0000001706 +B1730364552950N00643700EA0000001709 +B1730384552946N00643695EA0000001712 +B1730404552936N00643693EA0000001714 +B1730424552923N00643700EA0000001714 +B1730444552913N00643718EA0000001716 +B1730464552909N00643739EA0000001717 +B1730484552911N00643758EA0000001719 +B1730504552917N00643773EA0000001722 +B1730524552922N00643785EA0000001725 +B1730544552928N00643793EA0000001728 +B1730564552934N00643799EA0000001731 +B1730584552940N00643793EA0000001733 +B1731004552936N00643782EA0000001736 +B1731024552928N00643779EA0000001739 +B1731044552917N00643782EA0000001740 +B1731064552904N00643794EA0000001741 +B1731084552896N00643817EA0000001743 +B1731104552896N00643839EA0000001745 +B1731124552901N00643855EA0000001748 +B1731144552907N00643866EA0000001751 +B1731164552915N00643875EA0000001754 +B1731184552922N00643879EA0000001755 +B1731204552933N00643871EA0000001757 +B1731224552935N00643864EA0000001759 +B1731244552932N00643856EA0000001760 +B1731264552922N00643851EA0000001761 +B1731284552911N00643861EA0000001761 +B1731304552903N00643881EA0000001761 +B1731324552899N00643902EA0000001762 +B1731344552901N00643920EA0000001765 +B1731364552906N00643932EA0000001766 +B1731384552911N00643940EA0000001766 +B1731404552919N00643943EA0000001764 +B1731424552929N00643944EA0000001763 +B1731444552938N00643951EA0000001762 +B1731474552948N00643960EA0000001763 +B1731494552957N00643966EA0000001766 +B1731514552965N00643970EA0000001769 +B1731534552973N00643973EA0000001771 +B1731554552979N00643971EA0000001772 +B1731574552982N00643966EA0000001773 +B1731594552984N00643962EA0000001772 +B1732014552990N00643962EA0000001771 +B1732034553002N00643970EA0000001770 +B1732054553011N00643982EA0000001772 +B1732074553019N00643992EA0000001771 +B1732094553028N00644004EA0000001771 +B1732114553037N00644017EA0000001773 +B1732134553045N00644028EA0000001774 +B1732154553055N00644038EA0000001773 +B1732174553065N00644049EA0000001774 +B1732194553074N00644057EA0000001775 +B1732214553083N00644063EA0000001776 +B1732234553093N00644070EA0000001776 +B1732254553102N00644075EA0000001776 +B1732274553110N00644079EA0000001776 +B1732294553120N00644085EA0000001774 +B1732314553131N00644093EA0000001773 +B1732334553141N00644099EA0000001772 +B1732354553152N00644103EA0000001769 +B1732374553164N00644109EA0000001767 +B1732394553175N00644115EA0000001765 +B1732414553186N00644120EA0000001762 +B1732434553198N00644126EA0000001759 +B1732454553210N00644136EA0000001757 +B1732474553221N00644145EA0000001756 +B1732494553231N00644153EA0000001756 +B1732514553241N00644162EA0000001755 +B1732534553252N00644168EA0000001753 +B1732554553262N00644172EA0000001751 +B1732574553273N00644175EA0000001749 +B1732594553285N00644175EA0000001746 +B1733014553303N00644175EA0000001744 +B1733034553314N00644177EA0000001743 +B1733054553325N00644177EA0000001743 +B1733074553335N00644177EA0000001742 +B1733094553346N00644177EA0000001741 +B1733114553356N00644178EA0000001739 +B1733134553368N00644180EA0000001737 +B1733154553380N00644185EA0000001735 +B1733174553391N00644190EA0000001734 +B1733194553403N00644193EA0000001734 +B1733214553414N00644198EA0000001733 +B1733234553424N00644201EA0000001732 +B1733254553437N00644203EA0000001729 +B1733284553448N00644209EA0000001728 +B1733304553458N00644215EA0000001726 +B1733324553469N00644222EA0000001723 +B1733344553480N00644229EA0000001720 +B1733364553491N00644235EA0000001717 +B1733384553502N00644239EA0000001715 +B1733404553514N00644240EA0000001713 +B1733424553526N00644240EA0000001711 +B1733444553539N00644242EA0000001709 +B1733464553551N00644246EA0000001706 +B1733484553563N00644247EA0000001704 +B1733504553577N00644245EA0000001700 +B1733524553590N00644246EA0000001697 +B1733544553602N00644247EA0000001695 +B1733564553615N00644246EA0000001692 +B1733584553628N00644249EA0000001689 +B1734004553641N00644251EA0000001687 +B1734024553654N00644251EA0000001683 +B1734044553668N00644251EA0000001680 +B1734064553683N00644254EA0000001677 +B1734084553693N00644256EA0000001675 +B1734104553705N00644257EA0000001673 +B1734124553719N00644261EA0000001670 +B1734144553732N00644266EA0000001669 +B1734164553743N00644268EA0000001668 +B1734184553755N00644272EA0000001667 +B1734204553767N00644276EA0000001666 +B1734224553779N00644279EA0000001666 +B1734244553791N00644280EA0000001667 +B1734264553804N00644283EA0000001667 +B1734284553816N00644284EA0000001668 +B1734304553828N00644283EA0000001668 +B1734324553842N00644284EA0000001669 +B1734344553854N00644284EA0000001671 +B1734364553867N00644283EA0000001672 +B1734384553880N00644283EA0000001673 +B1734404553899N00644289EA0000001675 +B1734424553910N00644298EA0000001677 +B1734444553920N00644305EA0000001678 +B1734464553930N00644307EA0000001678 +B1734484553942N00644306EA0000001676 +B1734504553955N00644309EA0000001675 +B1734524553968N00644312EA0000001673 +B1734544553981N00644312EA0000001671 +B1734564553994N00644312EA0000001669 +B1734584554008N00644312EA0000001667 +B1735004554021N00644311EA0000001666 +B1735024554035N00644309EA0000001665 +B1735044554049N00644309EA0000001664 +B1735074554062N00644308EA0000001663 +B1735094554075N00644306EA0000001662 +B1735114554088N00644305EA0000001661 +B1735134554101N00644304EA0000001660 +B1735154554113N00644302EA0000001659 +B1735174554125N00644301EA0000001658 +B1735194554139N00644300EA0000001659 +B1735214554152N00644297EA0000001660 +B1735234554166N00644296EA0000001660 +B1735254554180N00644296EA0000001659 +B1735274554194N00644295EA0000001657 +B1735294554208N00644294EA0000001657 +B1735314554223N00644294EA0000001657 +B1735334554236N00644293EA0000001659 +B1735354554249N00644291EA0000001659 +B1735374554263N00644290EA0000001659 +B1735394554276N00644291EA0000001660 +B1735414554289N00644291EA0000001661 +B1735434554302N00644291EA0000001660 +B1735454554316N00644291EA0000001660 +B1735474554330N00644291EA0000001659 +B1735494554343N00644291EA0000001658 +B1735514554357N00644291EA0000001657 +B1735534554371N00644292EA0000001654 +B1735554554386N00644293EA0000001651 +B1735574554400N00644294EA0000001649 +B1735594554415N00644295EA0000001647 +B1736014554429N00644296EA0000001645 +B1736034554444N00644297EA0000001643 +B1736054554458N00644297EA0000001641 +B1736074554473N00644297EA0000001639 +B1736094554488N00644297EA0000001638 +B1736114554502N00644296EA0000001636 +B1736134554516N00644295EA0000001633 +B1736154554532N00644294EA0000001631 +B1736174554546N00644295EA0000001628 +B1736194554569N00644297EA0000001624 +B1736214554584N00644298EA0000001621 +B1736234554599N00644299EA0000001617 +B1736254554614N00644302EA0000001614 +B1736274554629N00644305EA0000001612 +B1736294554644N00644306EA0000001608 +B1736314554658N00644305EA0000001603 +B1736334554674N00644307EA0000001599 +B1736354554690N00644308EA0000001595 +B1736374554705N00644308EA0000001591 +B1736394554720N00644307EA0000001586 +B1736414554736N00644308EA0000001581 +B1736434554751N00644309EA0000001578 +B1736454554765N00644310EA0000001575 +B1736484554779N00644310EA0000001570 +B1736504554795N00644312EA0000001566 +B1736524554809N00644315EA0000001564 +B1736544554823N00644317EA0000001560 +B1736564554837N00644320EA0000001556 +B1736584554852N00644323EA0000001552 +B1737004554866N00644327EA0000001548 +B1737024554881N00644332EA0000001543 +B1737044554895N00644337EA0000001539 +B1737064554909N00644342EA0000001535 +B1737084554923N00644347EA0000001531 +B1737104554938N00644351EA0000001527 +B1737124554953N00644353EA0000001524 +B1737144554968N00644356EA0000001521 +B1737164554982N00644362EA0000001518 +B1737184554995N00644370EA0000001517 +B1737204555008N00644376EA0000001517 +B1737224555021N00644379EA0000001517 +B1737244555034N00644384EA0000001517 +B1737264555046N00644389EA0000001515 +B1737284555059N00644391EA0000001512 +B1737304555073N00644390EA0000001511 +B1737324555084N00644389EA0000001511 +B1737344555094N00644389EA0000001511 +B1737364555104N00644392EA0000001512 +B1737384555114N00644396EA0000001514 +B1737404555123N00644398EA0000001514 +B1737424555133N00644401EA0000001513 +B1737444555143N00644407EA0000001511 +B1737464555153N00644414EA0000001510 +B1737484555164N00644422EA0000001510 +B1737504555174N00644430EA0000001511 +B1737524555184N00644435EA0000001512 +B1737544555194N00644440EA0000001513 +B1737564555199N00644444EA0000001512 +B1737584555212N00644459EA0000001512 +B1738004555227N00644476EA0000001511 +B1738024555235N00644490EA0000001509 +B1738044555243N00644503EA0000001507 +B1738064555253N00644513EA0000001504 +B1738084555263N00644521EA0000001501 +B1738104555273N00644529EA0000001498 +B1738124555282N00644541EA0000001493 +B1738144555291N00644552EA0000001489 +B1738164555300N00644561EA0000001486 +B1738184555308N00644571EA0000001482 +B1738204555316N00644581EA0000001478 +B1738224555325N00644592EA0000001476 +B1738244555333N00644603EA0000001474 +B1738264555341N00644613EA0000001471 +B1738294555349N00644623EA0000001470 +B1738314555356N00644633EA0000001469 +B1738334555363N00644642EA0000001466 +B1738354555370N00644653EA0000001463 +B1738374555378N00644664EA0000001462 +B1738394555384N00644675EA0000001459 +B1738414555391N00644687EA0000001456 +B1738434555399N00644699EA0000001454 +B1738454555407N00644712EA0000001452 +B1738474555415N00644724EA0000001448 +B1738494555424N00644737EA0000001443 +B1738514555433N00644752EA0000001438 +B1738534555441N00644768EA0000001434 +B1738554555449N00644783EA0000001430 +B1738574555457N00644800EA0000001426 +B1738594555463N00644818EA0000001423 +B1739014555470N00644834EA0000001420 +B1739034555476N00644851EA0000001417 +B1739054555482N00644867EA0000001412 +B1739074555490N00644883EA0000001408 +B1739094555498N00644899EA0000001405 +B1739114555506N00644915EA0000001402 +B1739134555513N00644929EA0000001398 +B1739154555522N00644944EA0000001393 +B1739174555531N00644960EA0000001390 +B1739194555536N00644975EA0000001387 +B1739214555542N00644990EA0000001383 +B1739234555549N00645006EA0000001378 +B1739254555555N00645024EA0000001374 +B1739274555560N00645042EA0000001370 +B1739294555565N00645059EA0000001365 +B1739314555569N00645077EA0000001361 +B1739334555573N00645094EA0000001358 +B1739354555578N00645108EA0000001353 +B1739374555583N00645125EA0000001347 +B1739394555587N00645143EA0000001344 +B1739414555595N00645163EA0000001337 +B1739434555600N00645178EA0000001332 +B1739454555607N00645194EA0000001328 +B1739474555613N00645208EA0000001324 +B1739494555618N00645222EA0000001319 +B1739514555624N00645237EA0000001314 +B1739534555631N00645252EA0000001311 +B1739554555634N00645265EA0000001308 +B1739574555638N00645277EA0000001303 +B1739594555643N00645290EA0000001298 +B1740014555647N00645303EA0000001295 +B1740034555651N00645315EA0000001290 +B1740054555656N00645326EA0000001284 +B1740084555661N00645343EA0000001279 +B1740104555662N00645362EA0000001275 +B1740124555665N00645378EA0000001272 +B1740144555670N00645394EA0000001270 +B1740164555673N00645409EA0000001268 +B1740184555678N00645423EA0000001267 +B1740204555683N00645438EA0000001266 +B1740224555687N00645454EA0000001266 +B1740244555691N00645468EA0000001264 +B1740264555697N00645484EA0000001264 +B1740284555702N00645497EA0000001266 +B1740304555707N00645508EA0000001268 +B1740324555710N00645517EA0000001270 +B1740344555713N00645527EA0000001272 +B1740364555716N00645536EA0000001275 +B1740384555717N00645543EA0000001277 +B1740404555719N00645552EA0000001278 +B1740424555721N00645561EA0000001278 +B1740444555725N00645564EA0000001279 +B1740464555730N00645559EA0000001279 +B1740484555733N00645550EA0000001278 +B1740504555730N00645537EA0000001278 +B1740524555721N00645523EA0000001279 +B1740544555706N00645515EA0000001279 +B1740564555691N00645522EA0000001280 +B1740584555682N00645535EA0000001281 +B1741004555680N00645548EA0000001282 +B1741024555680N00645558EA0000001281 +B1741044555682N00645570EA0000001280 +B1741064555684N00645583EA0000001279 +B1741084555687N00645595EA0000001280 +B1741104555689N00645607EA0000001280 +B1741124555690N00645620EA0000001280 +B1741144555693N00645634EA0000001281 +B1741164555695N00645647EA0000001282 +B1741184555697N00645661EA0000001281 +B1741204555701N00645683EA0000001281 +B1741224555703N00645697EA0000001281 +B1741244555704N00645711EA0000001280 +B1741264555706N00645724EA0000001279 +B1741284555709N00645739EA0000001277 +B1741304555713N00645753EA0000001276 +B1741324555716N00645766EA0000001275 +B1741344555719N00645779EA0000001273 +B1741364555724N00645792EA0000001271 +B1741384555727N00645806EA0000001270 +B1741404555729N00645820EA0000001268 +B1741424555729N00645835EA0000001267 +B1741444555731N00645849EA0000001266 +B1741464555732N00645864EA0000001266 +B1741494555733N00645880EA0000001267 +B1741514555736N00645895EA0000001268 +B1741534555738N00645910EA0000001268 +B1741554555739N00645926EA0000001269 +B1741574555742N00645940EA0000001270 +B1741594555745N00645954EA0000001272 +B1742014555748N00645967EA0000001275 +B1742034555751N00645977EA0000001277 +B1742054555752N00645988EA0000001279 +B1742074555748N00646000EA0000001279 +B1742094555737N00646007EA0000001279 +B1742114555724N00645998EA0000001278 +B1742134555719N00645981EA0000001278 +B1742154555725N00645970EA0000001279 +B1742174555736N00645968EA0000001282 +B1742194555743N00645974EA0000001283 +B1742214555746N00645987EA0000001284 +B1742234555749N00646000EA0000001287 +B1742254555752N00646009EA0000001289 +B1742274555755N00646020EA0000001291 +B1742294555758N00646029EA0000001294 +B1742314555763N00646033EA0000001297 +B1742334555769N00646033EA0000001299 +B1742354555773N00646029EA0000001301 +B1742374555777N00646021EA0000001302 +B1742394555776N00646008EA0000001303 +B1742414555771N00645997EA0000001304 +B1742434555762N00645990EA0000001304 +B1742454555751N00645990EA0000001304 +B1742474555742N00645998EA0000001303 +B1742494555738N00646011EA0000001304 +B1742514555738N00646023EA0000001307 +B1742534555739N00646034EA0000001310 +B1742554555738N00646046EA0000001313 +B1742574555738N00646057EA0000001316 +B1742594555741N00646063EA0000001317 +B1743014555749N00646060EA0000001321 +B1743034555750N00646047EA0000001324 +B1743054555746N00646034EA0000001327 +B1743074555739N00646023EA0000001329 +B1743094555727N00646017EA0000001330 +B1743114555714N00646017EA0000001331 +B1743134555703N00646023EA0000001333 +B1743154555696N00646034EA0000001335 +B1743174555693N00646045EA0000001336 +B1743194555692N00646057EA0000001336 +B1743214555694N00646068EA0000001335 +B1743234555700N00646076EA0000001334 +B1743254555706N00646084EA0000001333 +B1743284555711N00646093EA0000001333 +B1743304555715N00646103EA0000001331 +B1743324555720N00646113EA0000001330 +B1743344555725N00646122EA0000001329 +B1743364555729N00646132EA0000001328 +B1743384555734N00646143EA0000001326 +B1743404555740N00646154EA0000001324 +B1743424555745N00646165EA0000001322 +B1743444555752N00646177EA0000001322 +B1743464555757N00646185EA0000001322 +B1743484555761N00646195EA0000001321 +B1743504555766N00646205EA0000001321 +B1743524555771N00646215EA0000001321 +B1743544555773N00646226EA0000001322 +B1743564555772N00646238EA0000001322 +B1743584555771N00646251EA0000001321 +B1744004555772N00646264EA0000001320 +B1744024555774N00646278EA0000001318 +B1744044555779N00646291EA0000001317 +B1744064555786N00646300EA0000001316 +B1744084555792N00646309EA0000001317 +B1744104555794N00646320EA0000001318 +B1744124555791N00646333EA0000001318 +B1744144555786N00646346EA0000001318 +B1744164555780N00646358EA0000001317 +B1744184555773N00646370EA0000001317 +B1744204555767N00646382EA0000001317 +B1744224555762N00646394EA0000001317 +B1744244555757N00646407EA0000001316 +B1744264555751N00646420EA0000001315 +B1744284555744N00646432EA0000001315 +B1744304555738N00646443EA0000001313 +B1744324555731N00646455EA0000001311 +B1744344555724N00646467EA0000001310 +B1744364555718N00646480EA0000001310 +B1744384555711N00646490EA0000001308 +B1744404555700N00646505EA0000001306 +B1744424555695N00646518EA0000001304 +B1744444555690N00646532EA0000001302 +B1744464555687N00646548EA0000001300 +B1744484555685N00646563EA0000001297 +B1744504555683N00646578EA0000001294 +B1744524555681N00646592EA0000001290 +B1744544555681N00646606EA0000001287 +B1744564555680N00646621EA0000001285 +B1744584555679N00646635EA0000001283 +B1745004555676N00646648EA0000001281 +B1745024555672N00646661EA0000001280 +B1745044555667N00646672EA0000001278 +B1745074555662N00646683EA0000001277 +B1745094555656N00646693EA0000001274 +B1745114555649N00646704EA0000001271 +B1745134555642N00646714EA0000001270 +B1745154555635N00646723EA0000001267 +B1745174555627N00646731EA0000001265 +B1745194555617N00646737EA0000001262 +B1745214555608N00646740EA0000001260 +B1745234555600N00646741EA0000001257 +B1745254555592N00646740EA0000001254 +B1745274555583N00646738EA0000001251 +B1745294555575N00646736EA0000001249 +B1745314555567N00646734EA0000001248 +B1745334555560N00646730EA0000001247 +B1745354555552N00646727EA0000001246 +B1745374555546N00646722EA0000001245 +B1745394555540N00646717EA0000001244 +B1745414555533N00646713EA0000001243 +B1745434555526N00646710EA0000001242 +B1745454555520N00646707EA0000001241 +B1745474555512N00646704EA0000001239 +B1745494555505N00646700EA0000001237 +B1745514555498N00646695EA0000001235 +B1745534555491N00646691EA0000001232 +B1745554555484N00646688EA0000001230 +B1745574555477N00646684EA0000001227 +B1745594555469N00646680EA0000001225 +B1746014555464N00646677EA0000001224 +B1746034555458N00646672EA0000001222 +B1746054555450N00646668EA0000001221 +B1746074555444N00646665EA0000001220 +B1746094555438N00646662EA0000001219 +B1746114555431N00646659EA0000001218 +B1746134555424N00646658EA0000001218 +B1746154555414N00646658EA0000001216 +B1746174555407N00646655EA0000001215 +B1746194555401N00646653EA0000001216 +B1746214555395N00646651EA0000001215 +B1746234555389N00646649EA0000001213 +B1746254555383N00646648EA0000001212 +B1746274555375N00646648EA0000001211 +B1746294555368N00646645EA0000001211 +B1746314555363N00646643EA0000001212 +B1746334555358N00646642EA0000001211 +B1746354555351N00646641EA0000001211 +B1746374555345N00646639EA0000001210 +B1746394555340N00646636EA0000001211 +B1746414555335N00646636EA0000001212 +B1746444555330N00646636EA0000001212 +B1746464555325N00646636EA0000001213 +B1746484555320N00646636EA0000001213 +B1746504555313N00646636EA0000001214 +B1746524555308N00646636EA0000001214 +B1746544555302N00646637EA0000001215 +B1746564555296N00646639EA0000001215 +B1746584555291N00646641EA0000001216 +B1747004555285N00646640EA0000001216 +B1747024555279N00646637EA0000001215 +B1747044555273N00646635EA0000001216 +B1747064555268N00646635EA0000001217 +B1747084555261N00646634EA0000001218 +B1747104555255N00646634EA0000001219 +B1747124555249N00646635EA0000001220 +B1747144555242N00646635EA0000001221 +B1747164555234N00646635EA0000001221 +B1747184555228N00646636EA0000001222 +B1747204555223N00646638EA0000001223 +B1747224555216N00646638EA0000001224 +B1747244555208N00646639EA0000001226 +B1747264555202N00646638EA0000001227 +B1747284555194N00646637EA0000001228 +B1747304555186N00646639EA0000001230 +B1747324555179N00646642EA0000001232 +B1747344555172N00646646EA0000001234 +B1747364555165N00646645EA0000001236 +B1747384555162N00646637EA0000001238 +B1747404555166N00646627EA0000001240 +B1747424555176N00646622EA0000001242 +B1747444555188N00646625EA0000001243 +B1747464555199N00646637EA0000001244 +B1747484555196N00646656EA0000001244 +B1747504555193N00646663EA0000001245 +B1747524555181N00646672EA0000001245 +B1747544555174N00646671EA0000001246 +B1747564555166N00646676EA0000001250 +B1747584555161N00646678EA0000001253 +B1748004555156N00646676EA0000001256 +B1748024555154N00646668EA0000001258 +B1748044555161N00646660EA0000001260 +B1748064555173N00646662EA0000001261 +B1748084555178N00646677EA0000001263 +B1748104555172N00646693EA0000001265 +B1748124555164N00646701EA0000001267 +B1748144555159N00646705EA0000001271 +B1748164555155N00646709EA0000001274 +B1748184555149N00646710EA0000001276 +B1748204555146N00646705EA0000001277 +B1748224555148N00646696EA0000001277 +B1748254555159N00646689EA0000001277 +B1748274555172N00646693EA0000001277 +B1748294555180N00646708EA0000001278 +B1748314555179N00646725EA0000001279 +B1748334555173N00646735EA0000001280 +B1748354555166N00646739EA0000001283 +B1748374555160N00646739EA0000001284 +B1748394555154N00646737EA0000001286 +B1748414555148N00646738EA0000001290 +B1748434555143N00646742EA0000001293 +B1748454555138N00646740EA0000001296 +B1748474555135N00646731EA0000001298 +B1748494555140N00646722EA0000001300 +B1748514555151N00646720EA0000001301 +B1748534555156N00646731EA0000001303 +B1748554555153N00646746EA0000001304 +B1748574555145N00646754EA0000001307 +B1748594555139N00646759EA0000001310 +B1749014555133N00646762EA0000001313 +B1749034555125N00646765EA0000001314 +B1749054555120N00646762EA0000001316 +B1749074555121N00646753EA0000001317 +B1749094555131N00646747EA0000001318 +B1749114555145N00646750EA0000001319 +B1749134555156N00646761EA0000001321 +B1749154555166N00646768EA0000001323 +B1749174555176N00646766EA0000001325 +B1749194555183N00646758EA0000001327 +B1749214555182N00646749EA0000001328 +B1749234555176N00646744EA0000001329 +B1749254555168N00646748EA0000001330 +B1749274555160N00646753EA0000001331 +B1749294555151N00646758EA0000001331 +B1749314555141N00646763EA0000001332 +B1749334555133N00646769EA0000001334 +B1749354555124N00646775EA0000001339 +B1749374555116N00646779EA0000001341 +B1749394555109N00646778EA0000001342 +B1749414555104N00646771EA0000001343 +B1749434555107N00646761EA0000001343 +B1749454555118N00646756EA0000001342 +B1749474555128N00646764EA0000001341 +B1749494555128N00646783EA0000001341 +B1749514555121N00646796EA0000001342 +B1749534555115N00646798EA0000001343 +B1749554555112N00646794EA0000001343 +B1749574555111N00646787EA0000001342 +B1749594555115N00646776EA0000001340 +B1750024555125N00646769EA0000001339 +B1750044555135N00646773EA0000001337 +B1750064555133N00646790EA0000001335 +B1750084555124N00646800EA0000001334 +B1750104555119N00646805EA0000001335 +B1750124555114N00646808EA0000001336 +B1750144555106N00646808EA0000001336 +B1750164555097N00646808EA0000001337 +B1750184555087N00646808EA0000001338 +B1750204555078N00646808EA0000001339 +B1750224555068N00646808EA0000001341 +B1750244555059N00646808EA0000001344 +B1750264555050N00646809EA0000001347 +B1750284555043N00646811EA0000001351 +B1750304555036N00646808EA0000001354 +B1750324555033N00646798EA0000001356 +B1750344555037N00646787EA0000001358 +B1750364555046N00646784EA0000001359 +B1750384555050N00646796EA0000001360 +B1750404555044N00646812EA0000001361 +B1750424555034N00646820EA0000001362 +B1750444555027N00646823EA0000001363 +B1750464555019N00646824EA0000001364 +B1750484555009N00646823EA0000001364 +B1750504554999N00646823EA0000001364 +B1750524554989N00646823EA0000001365 +B1750544554978N00646824EA0000001366 +B1750564554968N00646825EA0000001368 +B1750584554958N00646828EA0000001369 +B1751004554948N00646829EA0000001371 +B1751024554942N00646822EA0000001372 +B1751044554943N00646811EA0000001372 +B1751064554951N00646807EA0000001373 +B1751084554962N00646816EA0000001374 +B1751104554977N00646828EA0000001376 +B1751124554986N00646836EA0000001376 +B1751144554995N00646841EA0000001376 +B1751164555005N00646843EA0000001376 +B1751184555014N00646846EA0000001376 +B1751204555024N00646848EA0000001376 +B1751224555033N00646848EA0000001376 +B1751244555040N00646842EA0000001376 +B1751264555041N00646832EA0000001376 +B1751284555037N00646823EA0000001375 +B1751304555028N00646819EA0000001374 +B1751324555017N00646817EA0000001374 +B1751344555008N00646819EA0000001375 +B1751374554999N00646819EA0000001376 +B1751394554989N00646819EA0000001376 +B1751414554979N00646819EA0000001376 +B1751434554968N00646820EA0000001376 +B1751454554956N00646821EA0000001375 +B1751474554945N00646823EA0000001376 +B1751494554936N00646825EA0000001378 +B1751514554927N00646826EA0000001379 +B1751534554917N00646828EA0000001380 +B1751554554906N00646829EA0000001379 +B1751574554894N00646830EA0000001379 +B1751594554883N00646830EA0000001380 +B1752014554873N00646830EA0000001380 +B1752034554862N00646831EA0000001380 +B1752054554851N00646833EA0000001380 +B1752074554840N00646833EA0000001380 +B1752094554830N00646834EA0000001380 +B1752114554818N00646835EA0000001380 +B1752134554807N00646836EA0000001380 +B1752154554796N00646836EA0000001380 +B1752174554784N00646837EA0000001379 +B1752194554773N00646838EA0000001379 +B1752214554761N00646839EA0000001378 +B1752234554749N00646841EA0000001376 +B1752254554737N00646843EA0000001375 +B1752274554727N00646845EA0000001374 +B1752294554715N00646845EA0000001373 +B1752314554701N00646845EA0000001371 +B1752334554689N00646847EA0000001370 +B1752354554678N00646849EA0000001370 +B1752374554666N00646851EA0000001369 +B1752394554653N00646856EA0000001368 +B1752414554643N00646858EA0000001368 +B1752434554632N00646859EA0000001368 +B1752454554621N00646862EA0000001367 +B1752474554605N00646866EA0000001367 +B1752494554595N00646869EA0000001366 +B1752514554584N00646872EA0000001365 +B1752534554573N00646875EA0000001365 +B1752554554563N00646877EA0000001365 +B1752574554554N00646878EA0000001366 +B1752594554544N00646881EA0000001366 +B1753014554534N00646886EA0000001366 +B1753034554524N00646889EA0000001366 +B1753054554513N00646893EA0000001365 +B1753074554502N00646897EA0000001365 +B1753094554491N00646901EA0000001365 +B1753114554481N00646905EA0000001365 +B1753134554471N00646909EA0000001364 +B1753154554460N00646912EA0000001364 +B1753184554449N00646917EA0000001363 +B1753204554438N00646922EA0000001362 +B1753224554428N00646926EA0000001361 +B1753244554418N00646931EA0000001359 +B1753264554406N00646937EA0000001357 +B1753284554395N00646943EA0000001357 +B1753304554385N00646949EA0000001357 +B1753324554375N00646955EA0000001356 +B1753344554365N00646961EA0000001354 +B1753364554354N00646969EA0000001352 +B1753384554343N00646977EA0000001350 +B1753404554331N00646984EA0000001349 +B1753424554319N00646991EA0000001349 +B1753444554310N00646997EA0000001349 +B1753464554302N00647002EA0000001348 +B1753484554293N00647008EA0000001346 +B1753504554281N00647014EA0000001344 +B1753524554272N00647020EA0000001344 +B1753544554263N00647026EA0000001342 +B1753564554253N00647032EA0000001340 +B1753584554242N00647039EA0000001338 +B1754004554231N00647046EA0000001336 +B1754024554221N00647051EA0000001334 +B1754044554209N00647055EA0000001332 +B1754064554199N00647062EA0000001330 +B1754084554189N00647071EA0000001327 +B1754104554180N00647081EA0000001326 +B1754124554171N00647091EA0000001324 +B1754144554163N00647102EA0000001322 +B1754164554154N00647112EA0000001320 +B1754184554144N00647121EA0000001319 +B1754204554135N00647131EA0000001319 +B1754224554127N00647140EA0000001319 +B1754244554119N00647150EA0000001319 +B1754264554111N00647161EA0000001320 +B1754284554103N00647173EA0000001323 +B1754304554098N00647181EA0000001324 +B1754324554094N00647192EA0000001326 +B1754344554088N00647200EA0000001326 +B1754364554082N00647206EA0000001326 +B1754384554075N00647214EA0000001325 +B1754404554069N00647225EA0000001323 +B1754424554062N00647237EA0000001321 +B1754444554056N00647250EA0000001319 +B1754464554050N00647263EA0000001318 +B1754484554044N00647276EA0000001316 +B1754504554038N00647290EA0000001314 +B1754524554030N00647303EA0000001312 +B1754554554023N00647316EA0000001311 +B1754574554015N00647329EA0000001310 +B1754594554009N00647343EA0000001309 +B1755014554003N00647358EA0000001308 +B1755034553996N00647373EA0000001307 +B1755054553990N00647389EA0000001305 +B1755074553983N00647404EA0000001304 +B1755094553976N00647417EA0000001303 +B1755114553969N00647429EA0000001303 +B1755134553962N00647441EA0000001303 +B1755154553956N00647453EA0000001303 +B1755174553951N00647464EA0000001302 +B1755194553944N00647475EA0000001301 +B1755214553936N00647485EA0000001299 +B1755234553930N00647493EA0000001299 +B1755254553926N00647500EA0000001300 +B1755274553921N00647507EA0000001302 +B1755294553915N00647514EA0000001304 +B1755314553911N00647522EA0000001306 +B1755334553906N00647527EA0000001308 +B1755354553901N00647531EA0000001311 +B1755374553897N00647528EA0000001313 +B1755394553894N00647519EA0000001315 +B1755414553896N00647508EA0000001316 +B1755434553905N00647496EA0000001316 +B1755454553920N00647492EA0000001316 +B1755474553937N00647499EA0000001317 +B1755494553945N00647513EA0000001318 +B1755514553946N00647530EA0000001320 +B1755534553946N00647546EA0000001323 +B1755554553944N00647558EA0000001325 +B1755574553938N00647564EA0000001326 +B1755594553933N00647563EA0000001327 +B1756014553932N00647554EA0000001328 +B1756034553939N00647543EA0000001329 +B1756054553953N00647540EA0000001329 +B1756074553975N00647554EA0000001330 +B1756094553978N00647572EA0000001331 +B1756114553977N00647589EA0000001332 +B1756134553976N00647605EA0000001333 +B1756154553971N00647618EA0000001333 +B1756174553964N00647628EA0000001334 +B1756194553959N00647639EA0000001335 +B1756214553956N00647650EA0000001336 +B1756234553951N00647661EA0000001337 +B1756254553947N00647676EA0000001337 +B1756274553945N00647692EA0000001338 +B1756294553945N00647706EA0000001339 +B1756314553944N00647723EA0000001340 +B1756334553942N00647742EA0000001339 +B1756364553939N00647758EA0000001339 +B1756384553937N00647774EA0000001339 +B1756404553935N00647791EA0000001337 +B1756424553932N00647809EA0000001336 +B1756444553930N00647823EA0000001334 +B1756464553926N00647838EA0000001331 +B1756484553921N00647853EA0000001328 +B1756504553916N00647867EA0000001326 +B1756524553911N00647881EA0000001323 +B1756544553907N00647898EA0000001319 +B1756564553903N00647915EA0000001317 +B1756584553899N00647930EA0000001314 +B1757004553896N00647947EA0000001311 +B1757024553893N00647965EA0000001307 +B1757044553888N00647981EA0000001305 +B1757064553885N00647998EA0000001301 +B1757084553880N00648015EA0000001298 +B1757104553874N00648029EA0000001294 +B1757124553869N00648045EA0000001290 +B1757144553865N00648060EA0000001286 +B1757164553860N00648077EA0000001282 +B1757184553856N00648095EA0000001278 +B1757204553852N00648111EA0000001274 +B1757224553845N00648127EA0000001269 +B1757244553839N00648142EA0000001266 +B1757264553833N00648155EA0000001262 +B1757284553827N00648169EA0000001258 +B1757304553822N00648187EA0000001255 +B1757324553819N00648204EA0000001252 +B1757344553817N00648221EA0000001250 +B1757364553815N00648242EA0000001247 +B1757384553814N00648264EA0000001244 +B1757404553814N00648284EA0000001241 +B1757424553814N00648304EA0000001237 +B1757444553812N00648328EA0000001233 +B1757464553812N00648349EA0000001230 +B1757484553810N00648381EA0000001224 +B1757504553808N00648403EA0000001219 +B1757524553806N00648423EA0000001216 +B1757544553803N00648441EA0000001212 +B1757564553799N00648462EA0000001208 +B1757584553796N00648482EA0000001204 +B1758004553795N00648501EA0000001201 +B1758024553793N00648522EA0000001196 +B1758044553792N00648546EA0000001192 +B1758064553792N00648568EA0000001190 +B1758084553791N00648589EA0000001188 +B1758104553791N00648609EA0000001187 +B1758124553791N00648630EA0000001186 +B1758144553789N00648651EA0000001184 +B1758174553789N00648672EA0000001183 +B1758194553789N00648692EA0000001181 +B1758214553790N00648710EA0000001179 +B1758234553791N00648731EA0000001177 +B1758254553791N00648752EA0000001175 +B1758274553793N00648772EA0000001173 +B1758294553794N00648792EA0000001171 +B1758314553795N00648812EA0000001169 +B1758334553796N00648832EA0000001167 +B1758354553797N00648852EA0000001165 +B1758374553797N00648852EA0000001163 +B1758394553794N00648890EA0000001161 +B1758414553793N00648910EA0000001158 +B1758434553790N00648928EA0000001156 +B1758454553787N00648947EA0000001154 +B1758474553783N00648966EA0000001151 +B1758494553777N00648983EA0000001148 +B1758514553773N00649000EA0000001145 +B1758534553767N00649018EA0000001143 +B1758554553762N00649034EA0000001141 +B1758574553756N00649050EA0000001139 +B1758594553750N00649063EA0000001136 +B1759014553742N00649074EA0000001134 +B1759034553736N00649088EA0000001132 +B1759054553732N00649105EA0000001131 +B1759074553728N00649121EA0000001130 +B1759094553722N00649133EA0000001129 +B1759114553716N00649145EA0000001129 +B1759134553712N00649159EA0000001128 +B1759154553705N00649170EA0000001124 +B1759174553697N00649176EA0000001123 +B1759194553692N00649185EA0000001121 +B1759214553687N00649195EA0000001119 +B1759234553675N00649195EA0000001116 +B1759254553673N00649183EA0000001112 +B1759274553682N00649178EA0000001105 +B1759294553703N00649194EA0000001103 +B1759314553711N00649204EA0000001099 +B1759334553723N00649207EA0000001095 +B1759354553734N00649204EA0000001092 +B1759374553742N00649199EA0000001090 +B1759394553752N00649196EA0000001088 +B1759414553762N00649192EA0000001085 +B1759434553767N00649185EA0000001083 +B1759454553765N00649177EA0000001081 +B1759474553759N00649174EA0000001078 +B1759494553752N00649177EA0000001076 +B1759514553744N00649184EA0000001074 +B1759534553736N00649187EA0000001072 +B1759554553727N00649186EA0000001069 +B1759584553718N00649184EA0000001066 +B1800004553711N00649183EA0000001064 +B1800024553704N00649180EA0000001063 +B1800044553697N00649174EA0000001061 +B1800064553690N00649169EA0000001059 +B1800084553684N00649167EA0000001057 +B1800104553680N00649160EA0000001055 +B1800124553682N00649150EA0000001053 +B1800144553685N00649142EA0000001051 +B1800164553687N00649133EA0000001049 +B1800184553687N00649122EA0000001045 +B1800204553689N00649108EA0000001042 +B1800224553691N00649095EA0000001039 +B1800244553690N00649081EA0000001035 +B1800264553689N00649067EA0000001031 +B1800284553689N00649054EA0000001029 +B1800304553689N00649048EA0000001027 +B1800324553688N00649046EA0000001026 +B1800344553689N00649046EA0000001025 +B1800364553689N00649046EA0000001025 +B1800384553689N00649046EA0000001025 +B1800404553689N00649046EA0000001025 +B1800424553689N00649046EA0000001025 +B1800444553689N00649046EA0000001025 +B1800464553689N00649046EA0000001025 +B1800484553689N00649046EA0000001025 +B1800504553689N00649046EA0000001025 +B1800524553689N00649046EA0000001025 +B1800544553689N00649046EA0000001025 +B1800564553689N00649046EA0000001025 +B1800584553689N00649046EA0000001025 +B1801004553689N00649046EA0000001025 +B1801024553689N00649046EA0000001025 +B1801044553689N00649046EA0000001025 +B1801064553689N00649046EA0000001025 +B1801084553689N00649046EA0000001025 +B1801104553689N00649046EA0000001025 +B1801124553689N00649046EA0000001025 +B1801144553689N00649046EA0000001025 +B1801164553689N00649046EA0000001025 +B1801184553689N00649046EA0000001025 +B1801204553689N00649046EA0000001025 +B1801224553689N00649046EA0000001025 +B1801244553689N00649046EA0000001025 +B1801264553689N00649046EA0000001025 +B1801284553689N00649046EA0000001025 +B1801304553689N00649046EA0000001025 +B1801324553689N00649046EA0000001025 +B1801344553689N00649051EA0000001028 +B1801374553689N00649050EA0000001027 +B1801394553689N00649049EA0000001027 +B1801414553689N00649048EA0000001026 +B1801434553689N00649047EA0000001026 +B1801454553689N00649046EA0000001025 +B1801474553689N00649045EA0000001025 +B1801494553689N00649044EA0000001025 +B1801514553689N00649042EA0000001025 +B1801534553689N00649041EA0000001025 +B1801554553689N00649041EA0000001025 +B1801574553689N00649041EA0000001025 +B1801594553689N00649041EA0000001025 +B1802014553689N00649041EA0000001025 +B1802034553689N00649041EA0000001025 +B1802054553689N00649041EA0000001025 +B1802074553689N00649041EA0000001025 diff --git a/float-no-zero/examples/data/igc/Tom-Payne.igc b/float-no-zero/examples/data/igc/Tom-Payne.igc new file mode 100644 index 0000000000..1e06b053d9 --- /dev/null +++ b/float-no-zero/examples/data/igc/Tom-Payne.igc @@ -0,0 +1,9879 @@ +AFLY05094 +HFDTE190411 +HFFXA100 +HFPLTPILOT:Tom Payne +HFGTYGLIDERTYPE:Axis Mercury +HFGIDGLIDERID: +HFDTM100GPSDATUM:WGS84 +HFGPSGPS:FURUNO GH-80 +HFRFWFIRMWAREVERSION:1.22 +HFRHWHARDWAREVERSION:1.00 +HFFTYFRTYPE:FLYTEC,5020 +I013638TAS +B0848484556256N00651095EA0205102039000 +B0848514556256N00651095EA0205102039000 +B0848544556255N00651096EA0205102039000 +B0848574556255N00651096EA0205002039000 +B0849004556255N00651096EA0205002039000 +B0849034556254N00651097EA0205102039000 +B0849064556254N00651097EA0205002040000 +B0849094556254N00651097EA0205002040000 +B0849124556253N00651096EA0205002040000 +B0849154556254N00651096EA0205002040000 +B0849184556254N00651096EA0205002041000 +B0849214556254N00651097EA0205002041000 +B0849244556254N00651097EA0205002041000 +B0849274556254N00651097EA0205002042000 +B0849304556254N00651098EA0205002042000 +B0849334556253N00651098EA0205002042000 +B0849364556253N00651097EA0205002043000 +B0849394556253N00651097EA0205002043000 +B0849424556254N00651098EA0204902043000 +B0849454556254N00651097EA0204702043000 +B0849484556257N00651102EA0204702043000 +B0849514556263N00651112EA0204602043000 +B0849544556269N00651124EA0204702043000 +B0849574556275N00651136EA0204402043000 +B0850004556285N00651145EA0204302042000 +B0850034556295N00651154EA0204002042000 +B0850064556305N00651165EA0203402042000 +B0850094556318N00651177EA0203202041000 +B0850124556327N00651189EA0203102040000 +B0850154556332N00651208EA0202702039000 +B0850194556336N00651233EA0202402037000 +B0850224556336N00651249EA0202302036000 +B0850254556334N00651265EA0201902035000 +B0850284556327N00651279EA0201602033000 +B0850314556318N00651293EA0200502031000 +B0850344556308N00651313EA0201002028000 +B0850374556302N00651328EA0201702026000 +B0850404556295N00651338EA0201802024000 +B0850434556287N00651353EA0203102023000 +B0850464556281N00651362EA0203502023000 +B0850494556275N00651368EA0202902023000 +B0850534556259N00651373EA0203102024000 +B0850564556243N00651365EA0202502024000 +B0850594556226N00651359EA0202502023000 +B0851024556211N00651354EA0202302023000 +B0851054556194N00651345EA0203302023000 +B0851084556179N00651335EA0203002023000 +B0851114556163N00651329EA0202602023000 +B0851144556146N00651327EA0202702023000 +B0851174556129N00651326EA0203302023000 +B0851204556114N00651326EA0203302024000 +B0851234556099N00651335EA0203502024000 +B0851264556092N00651350EA0203502025000 +B0851294556093N00651366EA0204602026000 +B0851324556094N00651378EA0205202027000 +B0851354556099N00651389EA0205702029000 +B0851384556112N00651389EA0206002031000 +B0851414556124N00651373EA0206602034000 +B0851444556122N00651347EA0207202037000 +B0851474556108N00651329EA0207702040000 +B0851504556091N00651329EA0208202043000 +B0851534556082N00651343EA0208902047000 +B0851564556085N00651357EA0209302050000 +B0851594556094N00651364EA0209502054000 +B0852024556106N00651357EA0210002058000 +B0852054556114N00651341EA0210302062000 +B0852084556115N00651317EA0210702066000 +B0852114556104N00651295EA0211102070000 +B0852144556087N00651292EA0211702074000 +B0852174556074N00651301EA0211902078000 +B0852214556070N00651323EA0212402083000 +B0852244556080N00651325EA0212502087000 +B0852274556093N00651314EA0212602091000 +B0852304556095N00651291EA0212502095000 +B0852334556085N00651269EA0212702098000 +B0852364556066N00651256EA0213302102000 +B0852394556049N00651261EA0213602105000 +B0852424556044N00651276EA0213902109000 +B0852454556050N00651289EA0214502112000 +B0852484556057N00651297EA0214502115000 +B0852514556070N00651294EA0214302119000 +B0852544556079N00651277EA0214302121000 +B0852574556081N00651252EA0213702124000 +B0853004556078N00651225EA0213502125000 +B0853034556062N00651201EA0213002126000 +B0853064556040N00651195EA0213802126000 +B0853094556028N00651202EA0213502127000 +B0853124556025N00651216EA0213402128000 +B0853154556031N00651226EA0213802128000 +B0853184556040N00651228EA0213402129000 +B0853214556052N00651227EA0213402129000 +B0853244556065N00651223EA0213402129000 +B0853274556079N00651215EA0213502129000 +B0853304556094N00651206EA0213802130000 +B0853334556108N00651196EA0214102130000 +B0853364556122N00651184EA0214702131000 +B0853394556132N00651165EA0215402132000 +B0853424556139N00651143EA0216002134000 +B0853464556147N00651114EA0217002138000 +B0853494556149N00651092EA0217602141000 +B0853524556146N00651068EA0218602144000 +B0853554556132N00651059EA0219602149000 +B0853584556123N00651069EA0220702153000 +B0854014556125N00651082EA0221902157000 +B0854044556133N00651087EA0222702162000 +B0854074556146N00651081EA0224102169000 +B0854104556151N00651063EA0225102177000 +B0854134556145N00651037EA0226402186000 +B0854164556133N00651019EA0227502194000 +B0854194556118N00651012EA0229002204000 +B0854224556106N00651018EA0229902213000 +B0854254556106N00651031EA0231302221000 +B0854284556118N00651027EA0232802231000 +B0854314556124N00651003EA0234502242000 +B0854344556124N00650980EA0235902253000 +B0854374556116N00650959EA0236802265000 +B0854404556098N00650953EA0237402275000 +B0854434556085N00650969EA0238602286000 +B0854464556088N00650984EA0240002297000 +B0854494556099N00650990EA0241302307000 +B0854524556112N00650982EA0242602318000 +B0854554556116N00650967EA0243302330000 +B0854584556104N00650951EA0243702341000 +B0855014556084N00650951EA0244802351000 +B0855044556075N00650967EA0245802361000 +B0855074556078N00650986EA0247102372000 +B0855104556086N00651001EA0248602382000 +B0855134556097N00651003EA0249602394000 +B0855164556105N00650993EA0250302403000 +B0855194556101N00650977EA0250202414000 +B0855224556085N00650965EA0250802424000 +B0855254556066N00650970EA0252302433000 +B0855284556055N00650988EA0253302443000 +B0855314556056N00651009EA0254302453000 +B0855354556069N00651006EA0254802465000 +B0855384556070N00650986EA0255602474000 +B0855414556055N00650973EA0256002482000 +B0855444556037N00650974EA0257302491000 +B0855474556026N00650991EA0258102499000 +B0855504556030N00651009EA0259002507000 +B0855534556037N00651011EA0259302513000 +B0855564556042N00650997EA0259202521000 +B0855594556037N00650977EA0259702529000 +B0856024556026N00650960EA0260402536000 +B0856054556012N00650942EA0261102544000 +B0856094555998N00650917EA0261802553000 +B0856124555986N00650899EA0262002560000 +B0856154555969N00650897EA0261702566000 +B0856184555952N00650910EA0261802572000 +B0856214555944N00650934EA0262302577000 +B0856244555950N00650949EA0262802582000 +B0856274555962N00650952EA0263102586000 +B0856304555972N00650939EA0263702591000 +B0856334555974N00650917EA0264502597000 +B0856364555970N00650896EA0264502602000 +B0856394555959N00650878EA0264402607000 +B0856424555944N00650862EA0264402611000 +B0856454555928N00650847EA0264102614000 +B0856484555917N00650829EA0264002617000 +B0856514555908N00650807EA0263702619000 +B0856544555897N00650784EA0263702621000 +B0856574555885N00650766EA0263502622000 +B0857004555872N00650750EA0263202623000 +B0857034555859N00650733EA0263102624000 +B0857064555842N00650721EA0263102625000 +B0857094555829N00650709EA0262302625000 +B0857124555816N00650690EA0261202624000 +B0857154555804N00650668EA0260502623000 +B0857184555791N00650647EA0259402621000 +B0857214555778N00650620EA0258402617000 +B0857244555766N00650594EA0258002614000 +B0857274555752N00650572EA0256902610000 +B0857304555736N00650548EA0256202605000 +B0857334555720N00650521EA0255502601000 +B0857374555701N00650486EA0255002595000 +B0857404555687N00650459EA0254202590000 +B0857434555673N00650431EA0253802585000 +B0857464555659N00650403EA0253202579000 +B0857494555646N00650373EA0252802574000 +B0857524555634N00650344EA0252302569000 +B0857554555622N00650314EA0251602564000 +B0857584555610N00650284EA0251502558000 +B0858014555599N00650255EA0251302553000 +B0858044555586N00650224EA0251302549000 +B0858074555573N00650192EA0252202545000 +B0858104555563N00650165EA0252302543000 +B0858134555548N00650140EA0252502541000 +B0858164555536N00650114EA0252702539000 +B0858194555532N00650087EA0252502537000 +B0858224555527N00650056EA0251902536000 +B0858254555521N00650019EA0251902534000 +B0858284555515N00649983EA0251602532000 +B0858314555509N00649947EA0251702530000 +B0858344555505N00649913EA0251802528000 +B0858374555502N00649876EA0252702526000 +B0858404555501N00649842EA0253602526000 +B0858434555499N00649809EA0254202526000 +B0858464555491N00649782EA0254802527000 +B0858494555479N00649765EA0255202529000 +B0858524555465N00649768EA0256002531000 +B0858554555463N00649780EA0256502533000 +B0858584555473N00649788EA0256902537000 +B0859024555492N00649777EA0257202540000 +B0859054555503N00649752EA0258102544000 +B0859084555509N00649728EA0258702548000 +B0859114555511N00649700EA0259402553000 +B0859144555508N00649673EA0260202557000 +B0859174555507N00649645EA0260402562000 +B0859204555496N00649622EA0260602567000 +B0859234555482N00649607EA0261602572000 +B0859264555467N00649597EA0262002577000 +B0859294555453N00649601EA0262002581000 +B0859324555450N00649615EA0262602585000 +B0859354555461N00649621EA0262602590000 +B0859384555477N00649605EA0262602593000 +B0859414555479N00649577EA0263402597000 +B0859444555474N00649554EA0263802601000 +B0859474555466N00649529EA0264202606000 +B0859504555456N00649504EA0264302610000 +B0859534555444N00649480EA0264602613000 +B0859564555431N00649459EA0264802617000 +B0859594555420N00649439EA0264202620000 +B0900024555408N00649417EA0263502622000 +B0900054555394N00649395EA0262802623000 +B0900084555379N00649368EA0262302623000 +B0900114555366N00649339EA0262202623000 +B0900144555356N00649312EA0261502622000 +B0900174555345N00649283EA0260502621000 +B0900204555330N00649251EA0260502618000 +B0900234555316N00649222EA0260602617000 +B0900264555305N00649192EA0260502615000 +B0900304555291N00649151EA0260402613000 +B0900334555279N00649121EA0260102611000 +B0900364555267N00649090EA0259802609000 +B0900394555256N00649059EA0259602608000 +B0900424555246N00649026EA0259102605000 +B0900454555234N00648994EA0259002603000 +B0900484555224N00648967EA0260402601000 +B0900514555220N00648953EA0261202602000 +B0900544555215N00648930EA0262202602000 +B0900574555212N00648909EA0263302605000 +B0901004555208N00648889EA0263602607000 +B0901034555203N00648864EA0264702611000 +B0901064555198N00648841EA0265302615000 +B0901094555190N00648820EA0265602619000 +B0901124555185N00648802EA0265502623000 +B0901154555185N00648779EA0266102626000 +B0901184555184N00648759EA0266402630000 +B0901214555182N00648737EA0266602634000 +B0901244555184N00648711EA0267502637000 +B0901274555189N00648686EA0268302641000 +B0901304555198N00648661EA0269002646000 +B0901334555198N00648633EA0269402650000 +B0901364555186N00648618EA0270002655000 +B0901394555172N00648624EA0270502660000 +B0901424555169N00648641EA0270902664000 +B0901454555177N00648656EA0271102668000 +B0901484555193N00648658EA0271402672000 +B0901514555204N00648642EA0272102677000 +B0901544555206N00648619EA0272902682000 +B0901574555204N00648598EA0273202686000 +B0902004555198N00648577EA0274002691000 +B0902034555189N00648565EA0274002697000 +B0902074555174N00648573EA0274402703000 +B0902104555175N00648593EA0275102707000 +B0902134555184N00648605EA0275402712000 +B0902164555200N00648604EA0275802716000 +B0902194555214N00648592EA0276302720000 +B0902224555224N00648571EA0276502725000 +B0902254555226N00648545EA0277002729000 +B0902284555224N00648522EA0277402733000 +B0902314555220N00648500EA0277802737000 +B0902344555213N00648476EA0278302742000 +B0902374555207N00648454EA0278802747000 +B0902404555199N00648435EA0279002751000 +B0902434555190N00648416EA0279402756000 +B0902464555182N00648395EA0279702760000 +B0902494555175N00648374EA0279702764000 +B0902524555167N00648354EA0280002768000 +B0902554555159N00648337EA0279702771000 +B0902584555148N00648321EA0279402774000 +B0903014555135N00648304EA0279402776000 +B0903044555123N00648289EA0278902778000 +B0903074555108N00648271EA0278102779000 +B0903104555091N00648249EA0278002779000 +B0903134555078N00648227EA0277602778000 +B0903164555066N00648205EA0277002778000 +B0903194555053N00648184EA0276302776000 +B0903224555036N00648164EA0275402774000 +B0903254555021N00648137EA0275102771000 +B0903284555007N00648110EA0274302768000 +B0903314554988N00648084EA0272902764000 +B0903354554964N00648049EA0272402758000 +B0903384554949N00648022EA0271302752000 +B0903414554933N00647995EA0270902747000 +B0903444554918N00647971EA0270302741000 +B0903474554900N00647941EA0269002735000 +B0903504554877N00647910EA0268302729000 +B0903534554855N00647880EA0267802723000 +B0903564554834N00647849EA0267202716000 +B0903594554812N00647817EA0266302710000 +B0904024554792N00647782EA0265402703000 +B0904054554770N00647745EA0265102697000 +B0904084554748N00647712EA0265002691000 +B0904114554726N00647682EA0264002685000 +B0904144554702N00647650EA0263402679000 +B0904174554681N00647619EA0263302673000 +B0904204554666N00647585EA0262502667000 +B0904234554651N00647547EA0261802661000 +B0904264554635N00647509EA0261602655000 +B0904294554620N00647475EA0260902649000 +B0904324554605N00647439EA0260202643000 +B0904354554589N00647402EA0259702637000 +B0904384554573N00647365EA0259002631000 +B0904414554558N00647326EA0258402624000 +B0904444554543N00647289EA0257802618000 +B0904474554527N00647253EA0257302612000 +B0904504554513N00647218EA0256702606000 +B0904534554499N00647185EA0255702600000 +B0904574554480N00647137EA0255102592000 +B0905004554466N00647104EA0254502586000 +B0905034554452N00647072EA0253802579000 +B0905064554438N00647039EA0253302573000 +B0905094554425N00647005EA0253102567000 +B0905124554412N00646971EA0253002562000 +B0905154554397N00646941EA0253002557000 +B0905184554383N00646915EA0252302553000 +B0905214554368N00646884EA0251202548000 +B0905244554355N00646851EA0251002543000 +B0905274554342N00646821EA0250302538000 +B0905304554328N00646789EA0249702533000 +B0905334554314N00646757EA0249102528000 +B0905364554301N00646724EA0248402523000 +B0905394554287N00646692EA0247702518000 +B0905424554273N00646658EA0247002512000 +B0905454554260N00646623EA0246602506000 +B0905484554246N00646589EA0246302501000 +B0905514554235N00646556EA0246002496000 +B0905544554223N00646524EA0245302490000 +B0905574554208N00646490EA0244702485000 +B0906004554192N00646458EA0244202480000 +B0906034554178N00646425EA0243802474000 +B0906064554164N00646393EA0243202469000 +B0906094554150N00646359EA0242902464000 +B0906124554136N00646326EA0242102459000 +B0906164554117N00646283EA0241402451000 +B0906194554103N00646250EA0241002446000 +B0906224554091N00646216EA0240402440000 +B0906254554076N00646184EA0239902435000 +B0906284554061N00646152EA0239202429000 +B0906314554045N00646121EA0238602424000 +B0906344554031N00646089EA0238402419000 +B0906374554015N00646059EA0237702413000 +B0906404554000N00646028EA0237102408000 +B0906434553985N00645996EA0236702403000 +B0906464553971N00645963EA0236102397000 +B0906494553958N00645930EA0235602392000 +B0906524553943N00645899EA0235002387000 +B0906554553928N00645867EA0234502382000 +B0906584553912N00645835EA0234002377000 +B0907014553897N00645803EA0233402372000 +B0907044553883N00645770EA0233002367000 +B0907074553870N00645737EA0232302362000 +B0907104553856N00645703EA0231702356000 +B0907134553843N00645668EA0231402351000 +B0907164553832N00645635EA0231002346000 +B0907194553823N00645602EA0230502341000 +B0907224553812N00645568EA0230002336000 +B0907254553801N00645535EA0229502331000 +B0907284553790N00645503EA0229202325000 +B0907314553779N00645473EA0228602320000 +B0907354553762N00645431EA0228102313000 +B0907384553748N00645402EA0227602308000 +B0907414553733N00645373EA0227002303000 +B0907444553718N00645345EA0226502298000 +B0907474553705N00645314EA0225802292000 +B0907504553691N00645284EA0225102287000 +B0907534553675N00645257EA0224302281000 +B0907564553655N00645234EA0223402275000 +B0907594553633N00645213EA0222702268000 +B0908024553611N00645197EA0222102262000 +B0908054553587N00645182EA0221502256000 +B0908084553566N00645165EA0220902250000 +B0908114553543N00645148EA0220302244000 +B0908144553519N00645135EA0219902239000 +B0908174553495N00645125EA0219502233000 +B0908204553469N00645117EA0218902227000 +B0908234553444N00645109EA0218602221000 +B0908264553421N00645103EA0218102215000 +B0908294553396N00645098EA0217502209000 +B0908324553371N00645093EA0216702204000 +B0908354553348N00645087EA0216602199000 +B0908384553326N00645081EA0215802194000 +B0908414553301N00645075EA0215002188000 +B0908444553275N00645065EA0214702183000 +B0908474553250N00645053EA0214902177000 +B0908514553227N00645039EA0215402172000 +B0908544553213N00645033EA0215802169000 +B0908574553196N00645032EA0216202167000 +B0909004553178N00645030EA0216202166000 +B0909034553158N00645025EA0216802165000 +B0909064553140N00645015EA0217002164000 +B0909094553121N00645002EA0217102165000 +B0909124553104N00644984EA0217402165000 +B0909154553089N00644965EA0217102165000 +B0909184553075N00644950EA0216502165000 +B0909214553060N00644938EA0215802164000 +B0909244553045N00644936EA0215302162000 +B0909274553042N00644952EA0215502161000 +B0909304553044N00644966EA0215202160000 +B0909334553048N00644984EA0215002158000 +B0909364553051N00645001EA0215502157000 +B0909394553055N00645017EA0215602156000 +B0909424553058N00645032EA0216202156000 +B0909454553060N00645048EA0216302157000 +B0909484553062N00645066EA0216002157000 +B0909514553072N00645084EA0215802157000 +B0909544553081N00645098EA0215202156000 +B0909574553092N00645114EA0215602156000 +B0910004553096N00645125EA0215102155000 +B0910034553104N00645134EA0214502154000 +B0910064553114N00645146EA0214902153000 +B0910094553120N00645154EA0214802152000 +B0910134553131N00645163EA0214302151000 +B0910164553142N00645167EA0214402150000 +B0910194553153N00645173EA0213902149000 +B0910224553167N00645178EA0214302148000 +B0910254553178N00645179EA0214502147000 +B0910284553189N00645181EA0215002147000 +B0910314553200N00645182EA0215402147000 +B0910344553211N00645183EA0215702148000 +B0910374553223N00645183EA0216502149000 +B0910404553232N00645185EA0216702151000 +B0910434553240N00645201EA0216802153000 +B0910464553237N00645222EA0216802155000 +B0910494553226N00645235EA0215802155000 +B0910524553208N00645234EA0214702155000 +B0910554553198N00645214EA0213802153000 +B0910584553203N00645190EA0213602151000 +B0911014553215N00645174EA0214402149000 +B0911044553227N00645165EA0215202147000 +B0911074553239N00645156EA0215802147000 +B0911104553248N00645136EA0216502147000 +B0911134553240N00645110EA0217202148000 +B0911164553221N00645104EA0218302149000 +B0911194553210N00645118EA0218802151000 +B0911224553218N00645130EA0219502154000 +B0911254553228N00645119EA0220802158000 +B0911284553230N00645096EA0221302162000 +B0911314553215N00645075EA0222302166000 +B0911344553197N00645073EA0223102172000 +B0911384553186N00645096EA0223202179000 +B0911414553194N00645117EA0223602184000 +B0911444553209N00645115EA0224402189000 +B0911474553214N00645095EA0224902195000 +B0911504553205N00645072EA0225202200000 +B0911534553186N00645071EA0226302205000 +B0911564553175N00645090EA0227002211000 +B0911594553179N00645111EA0227102216000 +B0912024553194N00645117EA0227202221000 +B0912054553204N00645104EA0227902227000 +B0912084553203N00645080EA0228102232000 +B0912114553192N00645059EA0228502237000 +B0912144553175N00645057EA0228802242000 +B0912174553164N00645074EA0229002247000 +B0912204553166N00645098EA0229102251000 +B0912234553179N00645114EA0229602255000 +B0912264553193N00645110EA0230302259000 +B0912294553203N00645099EA0231002264000 +B0912324553210N00645089EA0231302270000 +B0912354553213N00645067EA0231302274000 +B0912384553204N00645040EA0232402279000 +B0912414553189N00645026EA0232902285000 +B0912444553174N00645031EA0233102290000 +B0912474553165N00645050EA0233202294000 +B0912504553172N00645067EA0233102298000 +B0912534553188N00645075EA0234002301000 +B0912564553199N00645071EA0234202305000 +B0912594553210N00645055EA0234402309000 +B0913024553214N00645030EA0235102312000 +B0913054553205N00645005EA0235702316000 +B0913084553190N00644991EA0236202321000 +B0913114553177N00644998EA0236702325000 +B0913144553176N00645021EA0237202330000 +B0913184553191N00645035EA0237502336000 +B0913214553207N00645027EA0238202340000 +B0913244553219N00645017EA0238702345000 +B0913274553227N00644995EA0238902349000 +B0913304553224N00644965EA0239902353000 +B0913334553212N00644947EA0241002358000 +B0913364553197N00644949EA0241702363000 +B0913394553192N00644966EA0242202368000 +B0913424553201N00644972EA0242802373000 +B0913454553213N00644960EA0243102378000 +B0913484553215N00644933EA0243702383000 +B0913514553204N00644916EA0244902388000 +B0913544553192N00644920EA0245602394000 +B0913574553194N00644933EA0246002399000 +B0914004553207N00644929EA0246302405000 +B0914034553213N00644904EA0246802410000 +B0914064553206N00644880EA0247602416000 +B0914094553193N00644876EA0247802422000 +B0914124553188N00644892EA0248902427000 +B0914154553197N00644899EA0249202433000 +B0914184553208N00644881EA0249502439000 +B0914214553203N00644854EA0250002443000 +B0914244553191N00644848EA0250102448000 +B0914274553180N00644859EA0250602452000 +B0914304553179N00644875EA0251302457000 +B0914334553190N00644877EA0251402462000 +B0914364553201N00644857EA0252002467000 +B0914394553198N00644829EA0252502472000 +B0914424553185N00644818EA0252602477000 +B0914454553173N00644823EA0252502481000 +B0914494553174N00644845EA0253102486000 +B0914524553184N00644853EA0253502490000 +B0914554553198N00644862EA0253702494000 +B0914584553212N00644864EA0254202498000 +B0915014553224N00644847EA0254502503000 +B0915044553227N00644821EA0254602507000 +B0915074553219N00644794EA0254902511000 +B0915104553205N00644777EA0255802515000 +B0915134553190N00644766EA0255602520000 +B0915164553174N00644761EA0255402524000 +B0915194553157N00644758EA0255102527000 +B0915224553139N00644756EA0254402529000 +B0915254553118N00644754EA0253702530000 +B0915284553097N00644752EA0253102530000 +B0915314553075N00644750EA0252602529000 +B0915344553055N00644746EA0252302528000 +B0915374553034N00644742EA0251602526000 +B0915404553008N00644736EA0252002524000 +B0915434552987N00644727EA0252002523000 +B0915464552965N00644717EA0251602521000 +B0915494552943N00644703EA0252302520000 +B0915524552924N00644692EA0253402519000 +B0915554552907N00644684EA0254002520000 +B0915584552889N00644687EA0254702522000 +B0916014552886N00644702EA0255102524000 +B0916044552897N00644699EA0255602526000 +B0916074552900N00644675EA0256402529000 +B0916104552889N00644650EA0257102532000 +B0916134552871N00644643EA0257702535000 +B0916174552857N00644657EA0258102541000 +B0916204552863N00644665EA0258302544000 +B0916234552873N00644650EA0258702548000 +B0916264552871N00644623EA0259202553000 +B0916294552858N00644600EA0259702557000 +B0916324552838N00644591EA0259802561000 +B0916354552820N00644592EA0260302566000 +B0916384552805N00644598EA0260202570000 +B0916414552788N00644603EA0260002573000 +B0916444552766N00644596EA0259502576000 +B0916474552741N00644583EA0259502578000 +B0916504552718N00644572EA0259602580000 +B0916534552700N00644558EA0259002581000 +B0916564552682N00644539EA0257902582000 +B0916594552659N00644519EA0256402581000 +B0917024552633N00644498EA0256202579000 +B0917054552611N00644478EA0255702576000 +B0917084552590N00644456EA0254902573000 +B0917114552566N00644434EA0254202570000 +B0917144552541N00644416EA0254902567000 +B0917174552521N00644402EA0256102564000 +B0917204552503N00644391EA0256502564000 +B0917234552484N00644389EA0257102563000 +B0917264552469N00644397EA0257502564000 +B0917294552471N00644410EA0257702565000 +B0917324552482N00644404EA0258302566000 +B0917354552490N00644382EA0259202568000 +B0917384552489N00644356EA0259502570000 +B0917414552475N00644334EA0259802572000 +B0917454552453N00644336EA0260002576000 +B0917484552452N00644348EA0260502577000 +B0917514552464N00644345EA0260802580000 +B0917544552474N00644323EA0261102583000 +B0917574552471N00644294EA0261702586000 +B0918004552457N00644272EA0261702589000 +B0918034552436N00644255EA0261902592000 +B0918064552414N00644238EA0261602594000 +B0918094552386N00644217EA0260802595000 +B0918124552358N00644195EA0261002596000 +B0918154552334N00644174EA0260302596000 +B0918184552308N00644150EA0259102595000 +B0918214552282N00644128EA0258602594000 +B0918244552259N00644107EA0257202591000 +B0918274552233N00644085EA0255902588000 +B0918304552207N00644062EA0255502583000 +B0918334552183N00644043EA0255002579000 +B0918364552160N00644024EA0253902574000 +B0918394552135N00644006EA0252902569000 +B0918424552109N00643988EA0252202564000 +B0918454552086N00643968EA0251402558000 +B0918484552063N00643947EA0250602552000 +B0918514552039N00643924EA0249802545000 +B0918544552014N00643901EA0249402539000 +B0918574551992N00643879EA0248402533000 +B0919004551968N00643857EA0247602526000 +B0919034551944N00643837EA0246702519000 +B0919074551911N00643811EA0246002510000 +B0919104551886N00643789EA0245402503000 +B0919134551861N00643767EA0244802496000 +B0919164551836N00643744EA0244402489000 +B0919194551811N00643722EA0244102483000 +B0919224551786N00643701EA0244202477000 +B0919254551763N00643682EA0243902472000 +B0919284551739N00643662EA0243202467000 +B0919314551714N00643639EA0242502462000 +B0919344551689N00643616EA0242502457000 +B0919374551665N00643596EA0242302452000 +B0919404551640N00643578EA0241902448000 +B0919434551616N00643560EA0241902444000 +B0919464551593N00643541EA0241702440000 +B0919494551571N00643523EA0241302436000 +B0919524551547N00643504EA0241002433000 +B0919554551524N00643487EA0240702429000 +B0919584551502N00643470EA0240302425000 +B0920014551479N00643452EA0240102422000 +B0920044551456N00643434EA0239702418000 +B0920074551433N00643415EA0239302415000 +B0920104551409N00643397EA0239102411000 +B0920134551385N00643380EA0238802408000 +B0920164551362N00643365EA0238302404000 +B0920194551338N00643349EA0238002401000 +B0920224551315N00643333EA0237902397000 +B0920264551287N00643308EA0237502393000 +B0920294551265N00643290EA0237202389000 +B0920324551242N00643273EA0236502386000 +B0920354551218N00643255EA0235802383000 +B0920384551194N00643234EA0235502380000 +B0920414551171N00643213EA0235202376000 +B0920444551148N00643192EA0234802373000 +B0920474551125N00643173EA0234302369000 +B0920504551102N00643154EA0233802365000 +B0920534551079N00643137EA0233502362000 +B0920564551057N00643120EA0233202358000 +B0920594551034N00643104EA0232702354000 +B0921024551011N00643086EA0232202350000 +B0921054550987N00643069EA0231702346000 +B0921084550964N00643050EA0231102342000 +B0921114550940N00643032EA0230702338000 +B0921144550917N00643015EA0230102333000 +B0921174550893N00642997EA0229602329000 +B0921204550870N00642980EA0229102325000 +B0921234550848N00642962EA0228502320000 +B0921264550825N00642946EA0227802315000 +B0921294550803N00642930EA0226902310000 +B0921324550781N00642914EA0226502305000 +B0921354550760N00642901EA0226002299000 +B0921384550736N00642890EA0225402294000 +B0921414550714N00642880EA0225002289000 +B0921444550692N00642869EA0224502283000 +B0921484550666N00642856EA0224002277000 +B0921514550647N00642846EA0223402271000 +B0921544550629N00642837EA0223202266000 +B0921574550609N00642827EA0222602261000 +B0922004550587N00642815EA0221802256000 +B0922034550564N00642799EA0221102250000 +B0922064550541N00642783EA0220402245000 +B0922094550517N00642769EA0219902239000 +B0922124550495N00642754EA0219302234000 +B0922154550471N00642738EA0218402228000 +B0922184550448N00642720EA0217702222000 +B0922214550424N00642705EA0216702216000 +B0922244550398N00642693EA0215902210000 +B0922274550373N00642683EA0215202203000 +B0922304550349N00642674EA0214202196000 +B0922334550323N00642663EA0213402189000 +B0922364550298N00642652EA0212402182000 +B0922394550272N00642639EA0211502175000 +B0922424550247N00642626EA0210802167000 +B0922454550222N00642614EA0210202160000 +B0922484550197N00642602EA0209302152000 +B0922514550171N00642590EA0208602145000 +B0922544550146N00642576EA0208102137000 +B0922574550121N00642563EA0207602130000 +B0923004550096N00642552EA0207102123000 +B0923034550072N00642541EA0206902116000 +B0923074550042N00642525EA0206802108000 +B0923104550019N00642515EA0206302102000 +B0923134549996N00642502EA0205902096000 +B0923164549973N00642488EA0205602091000 +B0923194549951N00642474EA0205202086000 +B0923224549927N00642460EA0204502081000 +B0923254549901N00642449EA0204202075000 +B0923284549876N00642438EA0203602070000 +B0923314549850N00642426EA0203302065000 +B0923344549826N00642415EA0203002060000 +B0923374549803N00642404EA0202702056000 +B0923404549780N00642391EA0202702051000 +B0923434549757N00642379EA0202602047000 +B0923464549734N00642367EA0202602044000 +B0923494549713N00642353EA0202602040000 +B0923524549693N00642342EA0202402037000 +B0923554549672N00642332EA0201902035000 +B0923584549649N00642319EA0202002032000 +B0924014549628N00642306EA0201602029000 +B0924044549606N00642293EA0201102026000 +B0924074549584N00642280EA0201202024000 +B0924104549565N00642268EA0201602021000 +B0924134549549N00642259EA0201502020000 +B0924164549532N00642250EA0201202018000 +B0924194549514N00642241EA0201002017000 +B0924234549491N00642227EA0201102015000 +B0924264549474N00642220EA0201102013000 +B0924294549457N00642212EA0201802012000 +B0924324549443N00642201EA0202202012000 +B0924354549426N00642191EA0202402011000 +B0924384549409N00642185EA0202902011000 +B0924414549393N00642183EA0203002011000 +B0924444549375N00642178EA0203502012000 +B0924474549360N00642168EA0204002013000 +B0924504549343N00642160EA0203602014000 +B0924534549325N00642150EA0203502015000 +B0924564549307N00642141EA0203202016000 +B0924594549288N00642130EA0203802017000 +B0925024549272N00642121EA0204102018000 +B0925054549255N00642111EA0204502020000 +B0925084549239N00642099EA0205102021000 +B0925114549224N00642088EA0205402023000 +B0925144549208N00642084EA0205702025000 +B0925174549196N00642088EA0206102027000 +B0925204549188N00642098EA0206202030000 +B0925234549185N00642109EA0206402031000 +B0925264549192N00642117EA0206402034000 +B0925294549203N00642117EA0206602036000 +B0925324549214N00642118EA0206902040000 +B0925354549225N00642117EA0206602043000 +B0925384549237N00642118EA0206902045000 +B0925414549251N00642122EA0207402048000 +B0925444549262N00642125EA0207702050000 +B0925474549272N00642133EA0208402053000 +B0925514549285N00642144EA0209202056000 +B0925544549296N00642141EA0209602060000 +B0925574549302N00642118EA0210302063000 +B0926004549294N00642094EA0210802067000 +B0926034549278N00642090EA0211402070000 +B0926064549268N00642101EA0212202074000 +B0926094549268N00642113EA0212602077000 +B0926124549278N00642111EA0213002081000 +B0926154549282N00642088EA0213502086000 +B0926184549273N00642065EA0214102092000 +B0926214549258N00642054EA0214402097000 +B0926244549245N00642061EA0214602102000 +B0926274549243N00642075EA0215102105000 +B0926304549251N00642078EA0215402109000 +B0926334549260N00642064EA0215702113000 +B0926364549258N00642038EA0216002117000 +B0926394549245N00642016EA0216502122000 +B0926424549230N00642002EA0216702126000 +B0926454549212N00641997EA0216802129000 +B0926484549195N00642005EA0217002133000 +B0926514549193N00642019EA0217102136000 +B0926544549202N00642027EA0217402139000 +B0926574549211N00642034EA0217902142000 +B0927004549220N00642039EA0218402145000 +B0927034549229N00642034EA0218602148000 +B0927064549237N00642014EA0218902152000 +B0927094549234N00641987EA0219102155000 +B0927124549221N00641963EA0219502158000 +B0927154549202N00641950EA0219802162000 +B0927194549184N00641956EA0220202166000 +B0927224549182N00641968EA0221102169000 +B0927254549184N00641979EA0221502171000 +B0927284549192N00641979EA0221502174000 +B0927314549202N00641963EA0222602179000 +B0927344549204N00641937EA0223002184000 +B0927374549195N00641907EA0223102188000 +B0927404549178N00641886EA0224002193000 +B0927434549161N00641875EA0225202198000 +B0927464549146N00641879EA0225702203000 +B0927494549139N00641892EA0226502209000 +B0927524549140N00641902EA0227002211000 +B0927554549147N00641906EA0227202216000 +B0927584549157N00641893EA0227702222000 +B0928014549163N00641868EA0228202227000 +B0928044549157N00641840EA0228102233000 +B0928074549144N00641811EA0229202238000 +B0928104549129N00641811EA0229902243000 +B0928134549123N00641817EA0230902247000 +B0928164549120N00641823EA0231102251000 +B0928194549125N00641832EA0231802255000 +B0928224549133N00641827EA0231702262000 +B0928254549137N00641804EA0231002268000 +B0928284549125N00641775EA0231102273000 +B0928314549106N00641763EA0232002277000 +B0928344549097N00641769EA0232602281000 +B0928374549093N00641776EA0232602283000 +B0928404549093N00641787EA0232402286000 +B0928434549099N00641796EA0232302288000 +B0928464549107N00641801EA0231902291000 +B0928494549115N00641806EA0231502295000 +B0928534549128N00641815EA0231402298000 +B0928564549136N00641817EA0231102299000 +B0928594549147N00641822EA0231002301000 +B0929024549157N00641825EA0231002302000 +B0929054549166N00641827EA0230602302000 +B0929084549174N00641831EA0230302303000 +B0929114549185N00641837EA0229902303000 +B0929144549200N00641848EA0230202303000 +B0929174549215N00641856EA0230202302000 +B0929204549227N00641863EA0230902302000 +B0929234549236N00641870EA0230702303000 +B0929264549246N00641876EA0230702303000 +B0929294549258N00641876EA0230902303000 +B0929324549269N00641876EA0231202303000 +B0929354549283N00641876EA0232202304000 +B0929384549294N00641876EA0233302306000 +B0929414549302N00641880EA0233502308000 +B0929444549306N00641894EA0233802311000 +B0929474549296N00641908EA0233802314000 +B0929504549279N00641903EA0234202316000 +B0929534549268N00641881EA0234602319000 +B0929564549270N00641855EA0234902321000 +B0929594549282N00641840EA0235802324000 +B0930024549293N00641832EA0236102327000 +B0930054549303N00641827EA0235702331000 +B0930084549314N00641824EA0235602333000 +B0930114549325N00641824EA0234702336000 +B0930144549340N00641830EA0234502337000 +B0930184549360N00641840EA0235202338000 +B0930214549374N00641845EA0234902339000 +B0930244549391N00641851EA0235702340000 +B0930274549403N00641854EA0236502341000 +B0930304549413N00641862EA0236802343000 +B0930334549412N00641878EA0236902345000 +B0930364549396N00641887EA0236802347000 +B0930394549381N00641868EA0236802348000 +B0930424549379N00641842EA0237102350000 +B0930454549389N00641822EA0237302351000 +B0930484549403N00641816EA0238102353000 +B0930514549410N00641822EA0238402355000 +B0930544549411N00641835EA0238102356000 +B0930574549415N00641847EA0237402358000 +B0931004549425N00641855EA0237002359000 +B0931034549436N00641860EA0237402360000 +B0931064549447N00641866EA0238202362000 +B0931094549454N00641871EA0238302363000 +B0931124549467N00641870EA0238902365000 +B0931154549477N00641849EA0239102368000 +B0931184549471N00641822EA0239402370000 +B0931214549453N00641810EA0240302373000 +B0931244549440N00641818EA0240802377000 +B0931274549438N00641830EA0241102379000 +B0931304549451N00641833EA0241602382000 +B0931334549462N00641814EA0241702386000 +B0931364549457N00641786EA0242002389000 +B0931394549443N00641763EA0242902394000 +B0931434549421N00641764EA0243702397000 +B0931464549414N00641775EA0244602401000 +B0931494549416N00641788EA0245302405000 +B0931524549422N00641796EA0245602408000 +B0931554549433N00641789EA0245602413000 +B0931584549434N00641763EA0245202418000 +B0932014549421N00641737EA0245602421000 +B0932044549404N00641721EA0246502425000 +B0932074549387N00641715EA0247002429000 +B0932104549373N00641720EA0247402434000 +B0932134549366N00641731EA0248102438000 +B0932164549364N00641744EA0248702441000 +B0932194549367N00641755EA0248902444000 +B0932224549376N00641759EA0248702449000 +B0932254549385N00641749EA0248602454000 +B0932284549389N00641723EA0249002458000 +B0932314549378N00641693EA0249102461000 +B0932344549360N00641681EA0248902465000 +B0932374549345N00641687EA0248702467000 +B0932404549341N00641701EA0248702469000 +B0932434549347N00641707EA0248102470000 +B0932464549360N00641708EA0249002471000 +B0932494549368N00641707EA0249402473000 +B0932524549379N00641705EA0249702475000 +B0932554549389N00641707EA0250202478000 +B0932584549398N00641708EA0250402479000 +B0933014549406N00641713EA0250002481000 +B0933044549416N00641719EA0250402483000 +B0933074549429N00641718EA0251902486000 +B0933114549440N00641710EA0252402489000 +B0933144549450N00641707EA0253402494000 +B0933174549456N00641690EA0254302498000 +B0933204549451N00641658EA0254902503000 +B0933234549434N00641639EA0256102509000 +B0933264549417N00641639EA0257502515000 +B0933294549407N00641644EA0258302522000 +B0933324549407N00641652EA0259202525000 +B0933354549416N00641645EA0260402532000 +B0933384549414N00641618EA0260902540000 +B0933414549399N00641597EA0262002547000 +B0933444549383N00641588EA0263002555000 +B0933474549370N00641592EA0263402563000 +B0933504549368N00641609EA0264202571000 +B0933534549375N00641618EA0265402578000 +B0933564549382N00641602EA0266002586000 +B0933594549379N00641571EA0266602593000 +B0934024549368N00641546EA0267602601000 +B0934054549352N00641538EA0267902609000 +B0934084549334N00641543EA0268102616000 +B0934114549328N00641561EA0268402623000 +B0934144549338N00641569EA0269102630000 +B0934174549346N00641552EA0269502636000 +B0934204549341N00641527EA0269902642000 +B0934234549325N00641511EA0270602649000 +B0934264549308N00641496EA0271402655000 +B0934294549288N00641479EA0272002661000 +B0934324549265N00641464EA0272302667000 +B0934354549243N00641452EA0272702673000 +B0934384549222N00641438EA0272402679000 +B0934414549202N00641422EA0272502684000 +B0934444549179N00641414EA0272102688000 +B0934474549159N00641395EA0272402691000 +B0934504549142N00641376EA0272102694000 +B0934544549118N00641350EA0272302697000 +B0934574549097N00641332EA0272302700000 +B0935004549079N00641314EA0272802702000 +B0935034549065N00641291EA0272802705000 +B0935064549051N00641265EA0272902708000 +B0935094549034N00641242EA0273002710000 +B0935124549016N00641218EA0273102712000 +B0935154549005N00641193EA0273802714000 +B0935184548992N00641174EA0273002716000 +B0935214548975N00641153EA0273202718000 +B0935244548963N00641133EA0273802719000 +B0935274548948N00641111EA0274302721000 +B0935304548934N00641087EA0274902723000 +B0935334548917N00641066EA0274202725000 +B0935364548895N00641042EA0273402726000 +B0935394548872N00641015EA0272902727000 +B0935424548848N00640987EA0272202726000 +B0935454548827N00640958EA0271902724000 +B0935484548807N00640929EA0271802723000 +B0935514548788N00640896EA0272302721000 +B0935544548771N00640865EA0273102721000 +B0935574548754N00640833EA0273302721000 +B0936004548736N00640802EA0273202722000 +B0936034548718N00640771EA0273002722000 +B0936064548698N00640743EA0272502722000 +B0936094548679N00640714EA0272702722000 +B0936134548662N00640679EA0272702722000 +B0936164548650N00640654EA0272102721000 +B0936194548635N00640624EA0272202721000 +B0936224548619N00640594EA0272802720000 +B0936254548603N00640567EA0273402721000 +B0936284548588N00640541EA0274102722000 +B0936314548573N00640515EA0275302724000 +B0936344548558N00640492EA0275702727000 +B0936374548541N00640467EA0275302730000 +B0936404548526N00640440EA0275302731000 +B0936434548509N00640437EA0274502732000 +B0936464548490N00640430EA0274902733000 +B0936494548481N00640416EA0274202733000 +B0936524548467N00640396EA0273902733000 +B0936554548451N00640376EA0274502733000 +B0936584548438N00640357EA0275202734000 +B0937014548428N00640340EA0276202736000 +B0937044548418N00640326EA0275802738000 +B0937074548405N00640308EA0275402739000 +B0937104548391N00640290EA0275502740000 +B0937134548377N00640270EA0274802741000 +B0937164548361N00640246EA0274602741000 +B0937194548346N00640220EA0275002741000 +B0937224548333N00640197EA0275102742000 +B0937254548319N00640174EA0275202742000 +B0937284548304N00640152EA0275402743000 +B0937314548290N00640129EA0275502743000 +B0937344548277N00640106EA0275702744000 +B0937374548264N00640085EA0276602745000 +B0937414548248N00640058EA0276402747000 +B0937444548235N00640037EA0276902748000 +B0937474548223N00640017EA0276902749000 +B0937504548211N00639995EA0277002751000 +B0937534548198N00639972EA0277402752000 +B0937564548187N00639951EA0277602754000 +B0937594548173N00639923EA0276602755000 +B0938024548158N00639893EA0277002756000 +B0938054548144N00639869EA0276402756000 +B0938084548129N00639843EA0275502756000 +B0938114548115N00639814EA0275702755000 +B0938144548103N00639788EA0275102754000 +B0938174548091N00639758EA0274802753000 +B0938204548079N00639729EA0274402751000 +B0938234548069N00639698EA0273602749000 +B0938264548058N00639666EA0273302747000 +B0938294548052N00639634EA0273302744000 +B0938324548043N00639605EA0273202742000 +B0938354548032N00639574EA0273502740000 +B0938384548023N00639541EA0274302739000 +B0938414548014N00639515EA0274602739000 +B0938444548005N00639493EA0273202738000 +B0938474547991N00639459EA0272402737000 +B0938504547978N00639423EA0274102735000 +B0938534547972N00639405EA0275102734000 +B0938564547969N00639385EA0275202735000 +B0938594547962N00639358EA0275702736000 +B0939034547948N00639322EA0276202738000 +B0939064547933N00639296EA0276502740000 +B0939094547917N00639269EA0276702742000 +B0939124547899N00639244EA0276902744000 +B0939154547884N00639219EA0276502746000 +B0939184547866N00639191EA0275902747000 +B0939214547849N00639163EA0275602747000 +B0939244547832N00639136EA0275302747000 +B0939274547816N00639109EA0275002746000 +B0939304547799N00639081EA0274702745000 +B0939334547783N00639052EA0274502744000 +B0939364547767N00639022EA0274102743000 +B0939394547753N00638991EA0273502741000 +B0939424547742N00638960EA0273102739000 +B0939454547737N00638935EA0273002738000 +B0939484547727N00638912EA0271202735000 +B0939514547713N00638880EA0270802732000 +B0939544547699N00638850EA0270502728000 +B0939574547688N00638821EA0269402725000 +B0940004547677N00638789EA0269002721000 +B0940034547667N00638760EA0268202717000 +B0940064547656N00638728EA0267502712000 +B0940094547645N00638695EA0266902708000 +B0940124547633N00638664EA0266202703000 +B0940154547621N00638632EA0265702697000 +B0940184547610N00638600EA0264802692000 +B0940214547600N00638569EA0264302686000 +B0940254547585N00638527EA0263402679000 +B0940284547573N00638496EA0263002673000 +B0940314547562N00638467EA0262502667000 +B0940344547550N00638436EA0261702661000 +B0940374547537N00638405EA0260902655000 +B0940404547525N00638375EA0260002648000 +B0940434547514N00638342EA0259202642000 +B0940464547505N00638312EA0258302635000 +B0940494547495N00638280EA0257102628000 +B0940524547486N00638247EA0256202620000 +B0940554547475N00638215EA0255302613000 +B0940584547465N00638182EA0254102605000 +B0941014547454N00638149EA0253402596000 +B0941044547444N00638118EA0252402588000 +B0941074547433N00638085EA0251602580000 +B0941104547424N00638052EA0251602572000 +B0941134547416N00638022EA0250902564000 +B0941164547409N00637988EA0250302557000 +B0941194547405N00637954EA0249502550000 +B0941224547399N00637920EA0248802543000 +B0941254547394N00637886EA0248702536000 +B0941284547392N00637856EA0248702530000 +B0941314547389N00637829EA0247602524000 +B0941344547383N00637797EA0247102517000 +B0941374547375N00637768EA0246902512000 +B0941404547369N00637741EA0246802506000 +B0941444547362N00637707EA0247102499000 +B0941474547358N00637681EA0247302495000 +B0941504547353N00637655EA0247502492000 +B0941534547348N00637630EA0247702489000 +B0941564547341N00637603EA0247802486000 +B0941594547334N00637580EA0248202484000 +B0942024547327N00637558EA0248602483000 +B0942054547320N00637537EA0248902482000 +B0942084547312N00637511EA0249102482000 +B0942114547306N00637486EA0249302482000 +B0942144547300N00637461EA0249602482000 +B0942174547292N00637438EA0249802482000 +B0942204547281N00637416EA0249902483000 +B0942234547271N00637392EA0249802484000 +B0942264547260N00637369EA0250402484000 +B0942294547247N00637347EA0251102485000 +B0942324547235N00637323EA0251802487000 +B0942354547225N00637301EA0252202489000 +B0942384547214N00637278EA0252702492000 +B0942414547205N00637253EA0252802495000 +B0942444547194N00637227EA0253002497000 +B0942474547181N00637203EA0252802500000 +B0942504547166N00637180EA0253102502000 +B0942534547152N00637155EA0253502504000 +B0942564547140N00637133EA0253802506000 +B0942594547129N00637109EA0253702508000 +B0943034547116N00637075EA0253602511000 +B0943064547110N00637049EA0253702512000 +B0943094547102N00637022EA0253002513000 +B0943124547094N00636993EA0253302514000 +B0943154547083N00636968EA0252802515000 +B0943184547072N00636939EA0252702515000 +B0943214547064N00636912EA0252802515000 +B0943244547054N00636885EA0252702515000 +B0943274547041N00636860EA0252602515000 +B0943304547028N00636835EA0252202515000 +B0943334547015N00636809EA0252002514000 +B0943364547003N00636782EA0252002514000 +B0943394546992N00636756EA0251602513000 +B0943424546980N00636733EA0251002512000 +B0943454546967N00636708EA0250302511000 +B0943484546957N00636687EA0249702509000 +B0943514546946N00636667EA0248202507000 +B0943544546931N00636638EA0247102503000 +B0943574546915N00636607EA0246802499000 +B0944004546901N00636578EA0246002495000 +B0944034546886N00636548EA0245502490000 +B0944064546872N00636519EA0244802486000 +B0944094546858N00636489EA0243902481000 +B0944124546844N00636458EA0244002476000 +B0944154546829N00636433EA0244902472000 +B0944184546817N00636417EA0244502468000 +B0944214546800N00636396EA0244802465000 +B0944254546780N00636364EA0246002462000 +B0944284546768N00636342EA0245902461000 +B0944314546754N00636312EA0246002460000 +B0944344546742N00636282EA0246702460000 +B0944374546734N00636253EA0247202460000 +B0944404546727N00636226EA0247602461000 +B0944434546720N00636196EA0248302462000 +B0944464546716N00636168EA0249102464000 +B0944494546707N00636144EA0249502466000 +B0944524546693N00636121EA0249702469000 +B0944554546679N00636101EA0250702471000 +B0944584546665N00636083EA0250302474000 +B0945014546649N00636059EA0249702476000 +B0945044546638N00636031EA0250402478000 +B0945074546631N00636006EA0249802480000 +B0945104546619N00635978EA0248802481000 +B0945134546608N00635947EA0248402481000 +B0945164546597N00635918EA0247802480000 +B0945194546587N00635886EA0246902479000 +B0945224546580N00635851EA0247002477000 +B0945254546575N00635819EA0247702476000 +B0945284546573N00635796EA0248002475000 +B0945314546572N00635776EA0248402475000 +B0945344546569N00635755EA0248702475000 +B0945374546563N00635730EA0249702475000 +B0945404546563N00635712EA0250902477000 +B0945434546561N00635697EA0250902479000 +B0945464546555N00635676EA0252402481000 +B0945494546550N00635662EA0253102485000 +B0945524546542N00635644EA0253702488000 +B0945554546530N00635621EA0254502492000 +B0945584546520N00635594EA0255702496000 +B0946014546509N00635566EA0256502502000 +B0946054546494N00635535EA0257602510000 +B0946084546488N00635514EA0258002516000 +B0946114546477N00635487EA0257902522000 +B0946144546467N00635466EA0259302528000 +B0946174546459N00635454EA0258902534000 +B0946204546447N00635434EA0258902539000 +B0946234546438N00635418EA0258802543000 +B0946264546428N00635399EA0257702547000 +B0946294546415N00635373EA0256402549000 +B0946324546401N00635344EA0255902550000 +B0946354546389N00635315EA0255202550000 +B0946384546377N00635285EA0254602549000 +B0946414546367N00635254EA0254102547000 +B0946444546359N00635226EA0254302546000 +B0946474546353N00635202EA0254302544000 +B0946504546347N00635176EA0254902543000 +B0946534546339N00635153EA0255502542000 +B0946564546330N00635130EA0255802543000 +B0946594546322N00635101EA0255902543000 +B0947024546314N00635069EA0256302544000 +B0947054546306N00635039EA0256002544000 +B0947084546294N00635011EA0256802545000 +B0947114546286N00634992EA0256602547000 +B0947144546274N00634968EA0256402547000 +B0947174546260N00634940EA0257002548000 +B0947204546246N00634912EA0256302550000 +B0947234546232N00634884EA0255602550000 +B0947264546218N00634856EA0255102551000 +B0947294546205N00634828EA0254702550000 +B0947334546192N00634790EA0254502549000 +B0947364546182N00634762EA0254002548000 +B0947394546172N00634735EA0253502546000 +B0947424546161N00634706EA0252902544000 +B0947454546149N00634676EA0252602542000 +B0947484546138N00634646EA0252502539000 +B0947514546129N00634616EA0251802537000 +B0947544546117N00634581EA0251702534000 +B0947574546106N00634548EA0252002532000 +B0948004546094N00634514EA0251902529000 +B0948034546083N00634479EA0253102528000 +B0948064546073N00634453EA0254902528000 +B0948094546067N00634438EA0255402529000 +B0948124546058N00634417EA0254902530000 +B0948154546045N00634388EA0255702531000 +B0948184546037N00634364EA0256302533000 +B0948214546025N00634337EA0256202535000 +B0948244546012N00634311EA0257002538000 +B0948274546002N00634286EA0256802540000 +B0948304545991N00634261EA0255902542000 +B0948334545977N00634233EA0255402542000 +B0948364545964N00634206EA0255402543000 +B0948394545953N00634185EA0255402543000 +B0948424545944N00634165EA0254802543000 +B0948454545933N00634139EA0255102543000 +B0948484545924N00634114EA0254802543000 +B0948514545913N00634085EA0255402543000 +B0948544545905N00634056EA0256202543000 +B0948574545898N00634026EA0257402544000 +B0949004545892N00633998EA0258302546000 +B0949034545885N00633976EA0258102549000 +B0949074545876N00633947EA0257602552000 +B0949104545867N00633925EA0257902553000 +B0949134545858N00633907EA0258102555000 +B0949164545846N00633890EA0257602557000 +B0949194545836N00633870EA0258502558000 +B0949224545833N00633851EA0258902560000 +B0949254545826N00633833EA0259102562000 +B0949284545818N00633812EA0259102564000 +B0949314545810N00633788EA0258502565000 +B0949344545798N00633762EA0258402566000 +B0949374545787N00633734EA0258402567000 +B0949404545777N00633706EA0258102568000 +B0949434545766N00633676EA0257902568000 +B0949464545754N00633646EA0257702568000 +B0949494545743N00633616EA0257702567000 +B0949524545732N00633586EA0257902567000 +B0949554545720N00633557EA0257802567000 +B0949584545708N00633527EA0257802567000 +B0950014545693N00633498EA0258202567000 +B0950044545679N00633469EA0258702567000 +B0950074545666N00633440EA0258302568000 +B0950104545654N00633410EA0258302568000 +B0950134545642N00633381EA0258002568000 +B0950164545628N00633351EA0258302568000 +B0950194545617N00633326EA0258302568000 +B0950234545604N00633284EA0257702568000 +B0950264545594N00633253EA0258202568000 +B0950294545585N00633226EA0258302568000 +B0950324545574N00633199EA0257902568000 +B0950354545563N00633172EA0258002568000 +B0950384545553N00633148EA0257702568000 +B0950414545542N00633125EA0257202568000 +B0950444545529N00633101EA0257302568000 +B0950474545517N00633080EA0257102568000 +B0950504545504N00633058EA0256802567000 +B0950534545493N00633033EA0255902566000 +B0950564545481N00633007EA0255002564000 +B0950594545470N00632977EA0254202562000 +B0951024545458N00632948EA0254002559000 +B0951054545448N00632923EA0253802556000 +B0951084545441N00632900EA0253802553000 +B0951114545437N00632880EA0253402550000 +B0951144545431N00632860EA0253002547000 +B0951174545424N00632842EA0252402545000 +B0951204545415N00632821EA0251302541000 +B0951234545403N00632800EA0251002537000 +B0951264545393N00632780EA0250002533000 +B0951294545382N00632758EA0249702529000 +B0951324545372N00632739EA0248902524000 +B0951354545362N00632717EA0248202519000 +B0951384545354N00632697EA0247502514000 +B0951414545344N00632673EA0245902509000 +B0951454545331N00632630EA0246002501000 +B0951484545323N00632603EA0245502495000 +B0951514545314N00632574EA0244302489000 +B0951544545305N00632544EA0243902483000 +B0951574545297N00632515EA0243102477000 +B0952004545287N00632485EA0242202471000 +B0952034545277N00632455EA0241802464000 +B0952064545269N00632426EA0241302458000 +B0952094545258N00632397EA0240802452000 +B0952124545247N00632371EA0240202446000 +B0952154545236N00632344EA0239402439000 +B0952184545227N00632315EA0239002433000 +B0952214545218N00632292EA0238202427000 +B0952244545208N00632265EA0237902421000 +B0952274545200N00632240EA0238102416000 +B0952304545192N00632221EA0237402411000 +B0952334545183N00632198EA0236902405000 +B0952364545175N00632173EA0237002400000 +B0952394545167N00632150EA0236802396000 +B0952424545161N00632126EA0236802392000 +B0952454545154N00632103EA0236602388000 +B0952484545148N00632082EA0236602385000 +B0952514545142N00632061EA0236302381000 +B0952544545132N00632040EA0236002378000 +B0952574545122N00632021EA0236202375000 +B0953004545113N00632001EA0236502373000 +B0953034545104N00631980EA0237102371000 +B0953064545097N00631962EA0237702370000 +B0953094545091N00631943EA0237802370000 +B0953134545084N00631918EA0238102370000 +B0953164545077N00631901EA0238402371000 +B0953194545071N00631884EA0238602371000 +B0953224545067N00631866EA0239302372000 +B0953254545063N00631852EA0239602374000 +B0953284545054N00631836EA0240302375000 +B0953314545047N00631821EA0241402378000 +B0953344545039N00631807EA0241802380000 +B0953374545032N00631789EA0242502384000 +B0953404545026N00631769EA0243702388000 +B0953434545022N00631753EA0244702392000 +B0953464545016N00631736EA0245302397000 +B0953494545009N00631717EA0246402403000 +B0953524545002N00631699EA0247202409000 +B0953554544994N00631677EA0248102415000 +B0953584544988N00631658EA0249002422000 +B0954014544981N00631640EA0249402429000 +B0954044544976N00631619EA0250402436000 +B0954074544972N00631601EA0250902442000 +B0954104544967N00631579EA0251402449000 +B0954134544961N00631554EA0253002456000 +B0954164544957N00631532EA0253702463000 +B0954194544950N00631512EA0254102470000 +B0954224544945N00631494EA0253802477000 +B0954254544938N00631474EA0253502483000 +B0954284544932N00631451EA0253102488000 +B0954314544925N00631423EA0253002492000 +B0954344544919N00631395EA0253202495000 +B0954374544913N00631368EA0253102498000 +B0954404544908N00631341EA0253002501000 +B0954444544902N00631305EA0252802504000 +B0954474544895N00631280EA0252302506000 +B0954504544887N00631257EA0252102507000 +B0954534544879N00631235EA0251002508000 +B0954564544872N00631210EA0250702507000 +B0954594544867N00631187EA0250502506000 +B0955024544862N00631163EA0250302505000 +B0955054544856N00631139EA0250302504000 +B0955084544851N00631115EA0249902503000 +B0955114544846N00631087EA0249602502000 +B0955144544844N00631059EA0248902500000 +B0955174544842N00631032EA0248602498000 +B0955204544837N00631007EA0248102495000 +B0955234544833N00630983EA0248002493000 +B0955264544830N00630958EA0248302491000 +B0955294544827N00630934EA0248402489000 +B0955324544825N00630908EA0248202487000 +B0955354544822N00630881EA0247802486000 +B0955384544819N00630853EA0247602484000 +B0955414544814N00630827EA0246802482000 +B0955444544809N00630798EA0246502480000 +B0955474544803N00630771EA0245902478000 +B0955504544797N00630743EA0245202475000 +B0955534544790N00630713EA0244302473000 +B0955564544785N00630678EA0243902469000 +B0955594544784N00630648EA0244402466000 +B0956024544782N00630622EA0244002463000 +B0956064544776N00630582EA0244002459000 +B0956094544770N00630555EA0243802456000 +B0956124544765N00630525EA0242902452000 +B0956154544761N00630493EA0242402449000 +B0956184544758N00630462EA0241302445000 +B0956214544759N00630425EA0240602441000 +B0956244544766N00630388EA0240602436000 +B0956274544775N00630358EA0241002432000 +B0956304544784N00630332EA0240502429000 +B0956334544796N00630304EA0241102425000 +B0956364544808N00630287EA0242402423000 +B0956394544817N00630273EA0242502422000 +B0956424544828N00630254EA0243502422000 +B0956454544838N00630238EA0243902422000 +B0956484544851N00630221EA0244202423000 +B0956514544864N00630203EA0244802424000 +B0956544544872N00630184EA0245702426000 +B0956574544876N00630163EA0246402428000 +B0957004544879N00630146EA0246602431000 +B0957034544889N00630129EA0246602434000 +B0957064544898N00630110EA0246802437000 +B0957094544906N00630092EA0246602439000 +B0957124544921N00630085EA0246302442000 +B0957154544934N00630100EA0246602443000 +B0957184544933N00630120EA0246202445000 +B0957214544926N00630144EA0246402446000 +B0957244544918N00630166EA0246502447000 +B0957274544909N00630188EA0246902449000 +B0957304544898N00630207EA0247802450000 +B0957334544886N00630221EA0248402452000 +B0957374544867N00630226EA0249502456000 +B0957404544858N00630216EA0251202460000 +B0957434544857N00630204EA0252002463000 +B0957464544866N00630188EA0253102469000 +B0957494544879N00630183EA0254302475000 +B0957524544890N00630196EA0255302482000 +B0957554544890N00630217EA0256202489000 +B0957584544879N00630230EA0257002496000 +B0958014544866N00630227EA0258202503000 +B0958044544864N00630213EA0259402510000 +B0958074544872N00630199EA0260602518000 +B0958104544885N00630197EA0261502526000 +B0958134544893N00630212EA0262002534000 +B0958164544887N00630230EA0262702542000 +B0958194544873N00630233EA0263802550000 +B0958224544861N00630225EA0264502558000 +B0958254544852N00630210EA0264902566000 +B0958284544845N00630193EA0264902574000 +B0958314544837N00630173EA0264602581000 +B0958344544830N00630153EA0264202586000 +B0958374544824N00630133EA0264102591000 +B0958404544818N00630112EA0264002596000 +B0958434544811N00630091EA0264702600000 +B0958464544804N00630075EA0264902604000 +B0958494544798N00630055EA0264702608000 +B0958524544792N00630032EA0265202612000 +B0958554544786N00630014EA0264902616000 +B0958584544778N00629994EA0264002619000 +B0959014544768N00629973EA0263302621000 +B0959044544757N00629950EA0262402622000 +B0959074544748N00629923EA0261602621000 +B0959104544739N00629895EA0261102620000 +B0959144544728N00629858EA0260802618000 +B0959174544719N00629830EA0260302616000 +B0959204544710N00629801EA0259802614000 +B0959234544702N00629773EA0259502611000 +B0959264544694N00629746EA0259402609000 +B0959294544687N00629718EA0259202606000 +B0959324544678N00629687EA0261302604000 +B0959354544676N00629670EA0262402604000 +B0959384544671N00629648EA0263102605000 +B0959414544666N00629627EA0264302607000 +B0959444544663N00629607EA0263702610000 +B0959474544658N00629580EA0264002612000 +B0959504544656N00629559EA0264002614000 +B0959534544656N00629535EA0263902616000 +B0959564544653N00629508EA0264402618000 +B0959594544650N00629484EA0265102620000 +B1000024544645N00629456EA0265902623000 +B1000054544640N00629427EA0266602626000 +B1000084544633N00629400EA0267202629000 +B1000114544627N00629374EA0268002633000 +B1000144544618N00629352EA0268902637000 +B1000174544610N00629331EA0269402641000 +B1000204544603N00629308EA0269802645000 +B1000234544593N00629289EA0270302650000 +B1000264544581N00629271EA0270602654000 +B1000294544568N00629252EA0270902658000 +B1000324544556N00629233EA0270602662000 +B1000354544543N00629216EA0270702666000 +B1000384544534N00629200EA0271202669000 +B1000414544527N00629183EA0271302672000 +B1000444544517N00629164EA0272202675000 +B1000484544502N00629148EA0272502680000 +B1000514544491N00629138EA0272902684000 +B1000544544481N00629128EA0273302689000 +B1000574544472N00629114EA0273702693000 +B1001004544464N00629100EA0274102697000 +B1001034544455N00629086EA0274202701000 +B1001064544446N00629072EA0274102704000 +B1001094544439N00629056EA0273802707000 +B1001124544432N00629038EA0273502709000 +B1001154544425N00629020EA0273402711000 +B1001184544418N00629002EA0272902713000 +B1001214544412N00628981EA0272302714000 +B1001244544408N00628955EA0271602714000 +B1001274544405N00628925EA0271302713000 +B1001304544398N00628893EA0272002713000 +B1001334544391N00628870EA0272002713000 +B1001364544383N00628850EA0271502712000 +B1001394544371N00628829EA0271402712000 +B1001424544360N00628807EA0271102711000 +B1001454544351N00628782EA0270502710000 +B1001484544342N00628754EA0270302708000 +B1001514544335N00628726EA0269702707000 +B1001544544329N00628697EA0269402704000 +B1001574544320N00628671EA0269202702000 +B1002004544311N00628645EA0268402699000 +B1002034544301N00628615EA0267802696000 +B1002074544291N00628573EA0267202691000 +B1002104544286N00628541EA0266702688000 +B1002134544281N00628509EA0266302684000 +B1002164544277N00628478EA0265902681000 +B1002194544273N00628447EA0265702677000 +B1002224544268N00628416EA0265202673000 +B1002254544261N00628385EA0264502669000 +B1002284544255N00628356EA0264402665000 +B1002314544248N00628325EA0263102661000 +B1002344544241N00628288EA0262902656000 +B1002374544234N00628253EA0262202652000 +B1002404544226N00628216EA0261702647000 +B1002434544219N00628179EA0261402643000 +B1002464544213N00628144EA0260802638000 +B1002494544205N00628108EA0260502634000 +B1002524544197N00628072EA0260202629000 +B1002554544189N00628037EA0259502625000 +B1002584544181N00628000EA0259502620000 +B1003014544175N00627964EA0259402616000 +B1003044544168N00627930EA0258802613000 +B1003074544159N00627896EA0258402609000 +B1003104544149N00627862EA0257702605000 +B1003134544140N00627827EA0257302601000 +B1003164544132N00627793EA0256702597000 +B1003194544123N00627759EA0256102592000 +B1003234544111N00627712EA0255702586000 +B1003264544102N00627677EA0255302582000 +B1003294544092N00627643EA0254902578000 +B1003324544083N00627609EA0254502573000 +B1003354544072N00627577EA0254002569000 +B1003384544062N00627543EA0253602565000 +B1003414544054N00627508EA0253302560000 +B1003444544049N00627472EA0253002556000 +B1003474544045N00627435EA0252602552000 +B1003504544043N00627397EA0252302549000 +B1003534544039N00627360EA0252102545000 +B1003564544036N00627324EA0251702542000 +B1003594544031N00627286EA0251202538000 +B1004024544026N00627250EA0250702535000 +B1004054544020N00627215EA0250102531000 +B1004084544015N00627179EA0249702527000 +B1004114544009N00627142EA0249402523000 +B1004144544004N00627106EA0249102519000 +B1004174543999N00627070EA0248602515000 +B1004204543994N00627032EA0248402511000 +B1004234543989N00626996EA0248002507000 +B1004264543985N00626960EA0247502503000 +B1004294543980N00626923EA0247202499000 +B1004324543974N00626888EA0246602495000 +B1004354543968N00626851EA0246202491000 +B1004394543959N00626802EA0245902485000 +B1004424543953N00626766EA0245502481000 +B1004454543947N00626729EA0245102477000 +B1004484543942N00626694EA0244802473000 +B1004514543938N00626660EA0244202469000 +B1004544543934N00626622EA0243802464000 +B1004574543930N00626585EA0243402460000 +B1005004543927N00626547EA0243102456000 +B1005034543923N00626508EA0242702452000 +B1005064543920N00626471EA0242202448000 +B1005094543918N00626430EA0241802443000 +B1005124543917N00626391EA0241502439000 +B1005154543914N00626353EA0240802434000 +B1005184543908N00626314EA0240302430000 +B1005214543901N00626276EA0239602425000 +B1005244543895N00626237EA0239102420000 +B1005274543890N00626199EA0238802416000 +B1005304543886N00626160EA0238202411000 +B1005334543881N00626121EA0237802405000 +B1005364543877N00626083EA0237302400000 +B1005394543872N00626043EA0236802395000 +B1005424543868N00626003EA0236502390000 +B1005454543864N00625964EA0236002385000 +B1005484543860N00625924EA0235602381000 +B1005514543856N00625883EA0235302376000 +B1005554543851N00625830EA0234902370000 +B1005584543846N00625791EA0234402365000 +B1006014543841N00625751EA0234002361000 +B1006044543835N00625712EA0233402357000 +B1006074543829N00625673EA0232902352000 +B1006104543824N00625633EA0232502348000 +B1006134543819N00625594EA0232002343000 +B1006164543814N00625553EA0231502339000 +B1006194543809N00625514EA0231102334000 +B1006224543805N00625474EA0230602330000 +B1006254543800N00625434EA0230202326000 +B1006284543796N00625394EA0229702322000 +B1006314543791N00625354EA0229302317000 +B1006344543786N00625314EA0228802313000 +B1006374543780N00625275EA0228402309000 +B1006404543775N00625236EA0227902305000 +B1006434543768N00625197EA0227502300000 +B1006464543762N00625158EA0227102296000 +B1006494543756N00625119EA0226602292000 +B1006524543749N00625081EA0226202288000 +B1006554543742N00625044EA0225702284000 +B1006584543736N00625006EA0225302279000 +B1007014543730N00624968EA0224902275000 +B1007044543725N00624929EA0224402271000 +B1007074543719N00624891EA0224002267000 +B1007114543711N00624841EA0223502262000 +B1007144543706N00624803EA0223202258000 +B1007174543700N00624765EA0222702254000 +B1007204543694N00624727EA0222302249000 +B1007234543688N00624689EA0221802245000 +B1007264543683N00624651EA0221502241000 +B1007294543678N00624613EA0221002237000 +B1007324543673N00624575EA0220702233000 +B1007354543667N00624537EA0220202229000 +B1007384543661N00624499EA0219802224000 +B1007414543653N00624461EA0219302220000 +B1007444543645N00624424EA0218902216000 +B1007474543637N00624387EA0218402212000 +B1007504543629N00624349EA0217902208000 +B1007534543621N00624311EA0217702204000 +B1007564543614N00624275EA0217202200000 +B1007594543607N00624237EA0216802195000 +B1008024543600N00624200EA0216302191000 +B1008054543594N00624163EA0215902187000 +B1008084543587N00624126EA0215402183000 +B1008114543581N00624089EA0215002178000 +B1008144543573N00624052EA0214502174000 +B1008174543566N00624016EA0214202170000 +B1008204543558N00623981EA0213802166000 +B1008244543548N00623933EA0213302160000 +B1008274543541N00623897EA0212902156000 +B1008304543534N00623861EA0212502152000 +B1008334543526N00623826EA0212002148000 +B1008364543519N00623790EA0211502144000 +B1008394543511N00623754EA0211102140000 +B1008424543503N00623719EA0210602135000 +B1008454543495N00623683EA0210202131000 +B1008484543486N00623648EA0209702126000 +B1008514543477N00623612EA0209302122000 +B1008544543468N00623577EA0208902117000 +B1008574543460N00623542EA0208402113000 +B1009004543451N00623507EA0208002108000 +B1009034543440N00623473EA0207502104000 +B1009064543429N00623439EA0207202099000 +B1009094543418N00623407EA0206702095000 +B1009124543406N00623374EA0206302090000 +B1009154543395N00623341EA0205802086000 +B1009184543384N00623308EA0205302082000 +B1009214543373N00623274EA0204902078000 +B1009244543362N00623241EA0204502073000 +B1009274543351N00623208EA0204002069000 +B1009304543340N00623175EA0203602065000 +B1009334543329N00623142EA0203002060000 +B1009364543318N00623110EA0202702055000 +B1009404543303N00623066EA0202202049000 +B1009434543292N00623034EA0201702044000 +B1009464543281N00623001EA0201202039000 +B1009494543270N00622968EA0200802034000 +B1009524543260N00622935EA0200402029000 +B1009554543250N00622903EA0200102025000 +B1009584543240N00622870EA0199702020000 +B1010014543230N00622836EA0199202015000 +B1010044543219N00622802EA0198902010000 +B1010074543207N00622770EA0198502006000 +B1010104543196N00622737EA0198002002000 +B1010134543185N00622704EA0197601997000 +B1010164543175N00622671EA0197101993000 +B1010194543164N00622638EA0196701989000 +B1010224543155N00622606EA0196201985000 +B1010254543147N00622572EA0195701980000 +B1010284543138N00622539EA0195301976000 +B1010314543131N00622505EA0194701972000 +B1010344543125N00622471EA0194401968000 +B1010374543119N00622437EA0194001963000 +B1010404543115N00622403EA0193501959000 +B1010434543111N00622369EA0193001955000 +B1010464543108N00622335EA0192501950000 +B1010494543106N00622302EA0192001946000 +B1010524543104N00622268EA0191501942000 +B1010554543102N00622235EA0190901937000 +B1010594543100N00622190EA0190401931000 +B1011024543098N00622157EA0189801926000 +B1011054543096N00622123EA0189201921000 +B1011084543095N00622090EA0188701917000 +B1011114543095N00622058EA0188301912000 +B1011144543098N00622026EA0187701907000 +B1011174543101N00621995EA0187101902000 +B1011204543105N00621964EA0186501897000 +B1011234543110N00621934EA0186001892000 +B1011264543113N00621904EA0185501887000 +B1011294543114N00621873EA0184901882000 +B1011324543116N00621842EA0184501877000 +B1011354543117N00621813EA0184001872000 +B1011384543118N00621785EA0183301867000 +B1011414543121N00621756EA0183101862000 +B1011444543123N00621731EA0182101857000 +B1011474543126N00621703EA0181401851000 +B1011504543129N00621676EA0180801846000 +B1011534543133N00621649EA0180201840000 +B1011564543140N00621620EA0180801835000 +B1011594543147N00621603EA0181001831000 +B1012024543154N00621583EA0181301827000 +B1012054543163N00621565EA0182001824000 +B1012084543169N00621545EA0182201823000 +B1012114543171N00621526EA0182501822000 +B1012144543177N00621508EA0182801821000 +B1012174543186N00621491EA0183501821000 +B1012214543198N00621465EA0184101822000 +B1012244543203N00621443EA0185001824000 +B1012274543206N00621423EA0185201826000 +B1012304543200N00621406EA0185001828000 +B1012334543186N00621404EA0184501830000 +B1012364543180N00621425EA0184101830000 +B1012394543188N00621445EA0184501831000 +B1012424543199N00621452EA0185101832000 +B1012454543213N00621453EA0185701833000 +B1012484543227N00621455EA0186701835000 +B1012514543240N00621455EA0187101837000 +B1012544543254N00621452EA0187001840000 +B1012574543270N00621450EA0186901843000 +B1013004543286N00621447EA0186701845000 +B1013034543300N00621442EA0186201847000 +B1013064543315N00621437EA0185701848000 +B1013094543331N00621435EA0185701849000 +B1013124543343N00621430EA0185201849000 +B1013154543355N00621416EA0184801849000 +B1013184543366N00621397EA0184601849000 +B1013214543372N00621371EA0184701848000 +B1013244543377N00621346EA0184801848000 +B1013274543376N00621322EA0184401847000 +B1013304543371N00621300EA0184601846000 +B1013334543364N00621280EA0184401845000 +B1013364543356N00621260EA0184101844000 +B1013394543347N00621239EA0183801843000 +B1013434543334N00621207EA0183701841000 +B1013464543323N00621189EA0183301840000 +B1013494543311N00621171EA0182801838000 +B1013524543299N00621152EA0182301836000 +B1013554543287N00621134EA0181801834000 +B1013584543275N00621116EA0181701831000 +B1014014543264N00621099EA0181001829000 +B1014044543251N00621083EA0180701826000 +B1014074543237N00621069EA0180601824000 +B1014104543224N00621055EA0180501822000 +B1014134543211N00621042EA0179801819000 +B1014164543198N00621028EA0179401815000 +B1014194543184N00621014EA0179401812000 +B1014224543170N00620999EA0179401809000 +B1014254543157N00620984EA0179601806000 +B1014284543145N00620971EA0179801804000 +B1014314543135N00620956EA0179901802000 +B1014344543125N00620942EA0179701801000 +B1014374543115N00620929EA0179501800000 +B1014404543101N00620916EA0180001798000 +B1014434543088N00620904EA0180601798000 +B1014464543076N00620897EA0180501798000 +B1014494543062N00620905EA0180701798000 +B1014524543059N00620922EA0180701798000 +B1014554543067N00620937EA0180901798000 +B1014594543084N00620928EA0180601798000 +B1015024543088N00620906EA0180801797000 +B1015054543079N00620885EA0181501798000 +B1015084543070N00620872EA0181501798000 +B1015114543056N00620862EA0181201798000 +B1015144543044N00620850EA0181301799000 +B1015174543031N00620837EA0181001799000 +B1015204543017N00620828EA0180701798000 +B1015234543003N00620824EA0180301798000 +B1015264542988N00620820EA0179901797000 +B1015294542972N00620811EA0179901797000 +B1015324542959N00620802EA0180101796000 +B1015354542947N00620794EA0179701795000 +B1015384542933N00620785EA0179101794000 +B1015414542918N00620776EA0178301793000 +B1015444542901N00620769EA0177601791000 +B1015474542883N00620759EA0177701788000 +B1015504542869N00620746EA0177501786000 +B1015534542853N00620733EA0178201784000 +B1015564542841N00620723EA0178701783000 +B1015594542827N00620713EA0178801782000 +B1016024542813N00620699EA0179401782000 +B1016054542801N00620686EA0179401783000 +B1016084542790N00620672EA0179101783000 +B1016114542778N00620659EA0178601783000 +B1016144542765N00620645EA0178401783000 +B1016184542750N00620628EA0178201782000 +B1016214542738N00620615EA0178101781000 +B1016244542723N00620600EA0178401781000 +B1016274542710N00620589EA0178801781000 +B1016304542697N00620579EA0179301781000 +B1016334542686N00620564EA0180201782000 +B1016364542675N00620549EA0181001784000 +B1016394542662N00620544EA0181501786000 +B1016424542652N00620559EA0182701789000 +B1016454542649N00620572EA0183801792000 +B1016484542651N00620587EA0183601795000 +B1016514542660N00620605EA0183501799000 +B1016544542675N00620600EA0182901803000 +B1016574542680N00620578EA0183001805000 +B1017004542675N00620555EA0184201808000 +B1017034542668N00620534EA0185601812000 +B1017064542654N00620522EA0186901817000 +B1017094542645N00620535EA0188001822000 +B1017124542658N00620544EA0188801827000 +B1017154542668N00620524EA0189801832000 +B1017184542662N00620503EA0191601838000 +B1017214542650N00620501EA0192701845000 +B1017244542641N00620516EA0193701852000 +B1017274542648N00620535EA0194101859000 +B1017304542665N00620526EA0195201866000 +B1017334542669N00620500EA0197101875000 +B1017364542664N00620484EA0198101884000 +B1017394542652N00620474EA0199101894000 +B1017424542641N00620486EA0200101903000 +B1017454542646N00620505EA0201501913000 +B1017484542662N00620510EA0202501923000 +B1017514542674N00620494EA0204301933000 +B1017554542674N00620468EA0205201947000 +B1017584542663N00620452EA0206601957000 +B1018014542650N00620457EA0207401967000 +B1018044542646N00620474EA0208801977000 +B1018074542657N00620486EA0210201988000 +B1018104542671N00620484EA0211302000000 +B1018134542681N00620465EA0212502011000 +B1018164542681N00620442EA0214002023000 +B1018194542668N00620426EA0215402035000 +B1018224542652N00620415EA0216502047000 +B1018254542636N00620405EA0217202059000 +B1018284542621N00620393EA0217602070000 +B1018314542606N00620382EA0217602081000 +B1018344542591N00620369EA0218002091000 +B1018374542578N00620360EA0218702100000 +B1018404542567N00620351EA0219102109000 +B1018434542553N00620344EA0220202117000 +B1018464542543N00620337EA0220602126000 +B1018494542532N00620327EA0219802133000 +B1018524542517N00620314EA0219302140000 +B1018554542498N00620298EA0218802145000 +B1018584542479N00620282EA0218702149000 +B1019014542461N00620268EA0218002153000 +B1019044542440N00620254EA0217702155000 +B1019074542420N00620240EA0217402157000 +B1019104542399N00620227EA0217402158000 +B1019134542379N00620216EA0217002159000 +B1019164542359N00620202EA0217102160000 +B1019194542340N00620184EA0217702160000 +B1019224542321N00620171EA0218102161000 +B1019254542301N00620162EA0217702163000 +B1019294542273N00620146EA0217602163000 +B1019324542255N00620133EA0217202164000 +B1019354542235N00620122EA0216802164000 +B1019384542219N00620114EA0216702163000 +B1019414542202N00620103EA0215802162000 +B1019444542186N00620090EA0216002161000 +B1019474542172N00620078EA0216302160000 +B1019504542160N00620072EA0216902160000 +B1019534542150N00620065EA0217002160000 +B1019564542136N00620056EA0217702161000 +B1019594542125N00620048EA0218202163000 +B1020024542111N00620038EA0218302164000 +B1020054542095N00620030EA0218902166000 +B1020084542080N00620023EA0218702168000 +B1020114542063N00620014EA0218902170000 +B1020144542048N00620003EA0218902171000 +B1020174542032N00619994EA0218802173000 +B1020204542015N00619985EA0219102173000 +B1020234542000N00619980EA0219002174000 +B1020264541984N00619973EA0218302175000 +B1020294541966N00619964EA0217602175000 +B1020324541949N00619955EA0216602174000 +B1020354541930N00619943EA0215602172000 +B1020384541911N00619930EA0215602170000 +B1020414541896N00619922EA0215102167000 +B1020444541878N00619912EA0214502165000 +B1020474541861N00619903EA0214002162000 +B1020514541837N00619889EA0213202157000 +B1020544541819N00619876EA0213002154000 +B1020574541802N00619862EA0212602150000 +B1021004541784N00619847EA0212702146000 +B1021034541770N00619834EA0212902143000 +B1021064541755N00619821EA0212602141000 +B1021094541739N00619808EA0212802138000 +B1021124541722N00619791EA0212802136000 +B1021154541704N00619777EA0213502135000 +B1021184541690N00619765EA0215002135000 +B1021214541679N00619754EA0215402136000 +B1021244541664N00619744EA0216102137000 +B1021274541650N00619751EA0216602139000 +B1021304541648N00619772EA0217402142000 +B1021334541660N00619785EA0218002145000 +B1021364541675N00619776EA0218602148000 +B1021394541681N00619752EA0219802151000 +B1021424541680N00619727EA0220202155000 +B1021454541673N00619704EA0220902159000 +B1021484541665N00619688EA0221702164000 +B1021514541653N00619683EA0221902169000 +B1021544541643N00619695EA0222202174000 +B1021574541646N00619716EA0222802179000 +B1022004541662N00619722EA0223202183000 +B1022034541677N00619707EA0223602188000 +B1022064541679N00619683EA0224202193000 +B1022094541670N00619665EA0225002197000 +B1022124541660N00619652EA0225602202000 +B1022154541647N00619651EA0225502207000 +B1022184541640N00619666EA0225702212000 +B1022214541648N00619682EA0226002216000 +B1022244541663N00619677EA0225802220000 +B1022274541666N00619651EA0226602223000 +B1022314541654N00619633EA0227302228000 +B1022344541642N00619623EA0226802232000 +B1022374541626N00619612EA0226602235000 +B1022404541608N00619595EA0225802237000 +B1022434541590N00619573EA0225502238000 +B1022464541573N00619552EA0225202239000 +B1022494541555N00619529EA0224302239000 +B1022524541537N00619503EA0224202239000 +B1022554541521N00619479EA0223902239000 +B1022584541504N00619453EA0223702238000 +B1023014541486N00619428EA0223402237000 +B1023044541469N00619404EA0223002236000 +B1023074541452N00619379EA0222502234000 +B1023104541435N00619355EA0221902233000 +B1023134541418N00619329EA0221302231000 +B1023164541402N00619302EA0220702229000 +B1023194541386N00619277EA0220002226000 +B1023224541369N00619251EA0219502223000 +B1023254541352N00619225EA0218902220000 +B1023284541335N00619200EA0218002216000 +B1023314541318N00619173EA0217402212000 +B1023344541302N00619144EA0216602208000 +B1023374541285N00619115EA0216102204000 +B1023404541269N00619085EA0215402199000 +B1023434541252N00619056EA0214702194000 +B1023464541235N00619028EA0214302189000 +B1023504541217N00618991EA0213702181000 +B1023534541203N00618961EA0213202176000 +B1023564541191N00618929EA0213002171000 +B1023594541180N00618898EA0212802166000 +B1024024541169N00618867EA0212502160000 +B1024054541157N00618836EA0211802155000 +B1024084541144N00618804EA0211302150000 +B1024114541132N00618775EA0210702145000 +B1024144541117N00618745EA0209902139000 +B1024174541105N00618713EA0209702134000 +B1024204541093N00618684EA0209002129000 +B1024234541081N00618652EA0208402124000 +B1024264541069N00618620EA0208002118000 +B1024294541058N00618590EA0207302113000 +B1024324541046N00618559EA0207002108000 +B1024354541034N00618528EA0206602103000 +B1024384541024N00618497EA0206002098000 +B1024414541013N00618465EA0205502093000 +B1024444541002N00618434EA0205302088000 +B1024474540991N00618404EA0204902083000 +B1024504540980N00618373EA0204502079000 +B1024534540968N00618343EA0204002074000 +B1024564540955N00618312EA0203602070000 +B1024594540942N00618283EA0203102066000 +B1025024540929N00618255EA0202602061000 +B1025064540912N00618215EA0202302055000 +B1025094540899N00618185EA0201702051000 +B1025124540886N00618157EA0201102046000 +B1025154540873N00618127EA0200602041000 +B1025184540861N00618098EA0200202037000 +B1025214540849N00618068EA0199702032000 +B1025244540837N00618038EA0199302027000 +B1025274540825N00618007EA0199102023000 +B1025304540815N00617976EA0198502018000 +B1025334540804N00617945EA0198202013000 +B1025364540794N00617913EA0197802009000 +B1025394540785N00617881EA0197302005000 +B1025424540776N00617849EA0196902000000 +B1025454540767N00617816EA0196501996000 +B1025484540758N00617784EA0196101991000 +B1025514540748N00617752EA0195801987000 +B1025544540739N00617721EA0195301982000 +B1025574540729N00617690EA0194901978000 +B1026004540720N00617658EA0194501973000 +B1026034540711N00617627EA0193901969000 +B1026064540702N00617595EA0193501964000 +B1026094540693N00617562EA0193001959000 +B1026124540684N00617531EA0192501954000 +B1026154540675N00617499EA0191901950000 +B1026184540666N00617466EA0191201945000 +B1026224540653N00617421EA0190701938000 +B1026254540644N00617386EA0190501933000 +B1026284540638N00617353EA0190801929000 +B1026314540634N00617320EA0190701925000 +B1026344540629N00617290EA0191301922000 +B1026374540623N00617268EA0191601920000 +B1026404540616N00617245EA0191901918000 +B1026434540611N00617223EA0192201917000 +B1026464540609N00617202EA0191801916000 +B1026494540604N00617177EA0191601915000 +B1026524540600N00617152EA0191901914000 +B1026554540596N00617129EA0191901913000 +B1026584540594N00617104EA0192501912000 +B1027014540593N00617077EA0193601912000 +B1027044540592N00617051EA0194701914000 +B1027074540585N00617028EA0195801916000 +B1027104540570N00617021EA0196701920000 +B1027134540561N00617033EA0197401924000 +B1027164540568N00617045EA0197801928000 +B1027194540582N00617036EA0198601933000 +B1027224540596N00617015EA0200201938000 +B1027254540598N00616995EA0201101944000 +B1027284540591N00616979EA0201401950000 +B1027314540577N00616974EA0202101956000 +B1027344540567N00616984EA0203101963000 +B1027374540569N00616996EA0204001966000 +B1027404540582N00617002EA0204901975000 +B1027434540595N00616989EA0206001982000 +B1027464540599N00616965EA0206801991000 +B1027494540594N00616950EA0206901999000 +B1027534540577N00616938EA0207502009000 +B1027564540567N00616940EA0208402015000 +B1027594540564N00616950EA0208702020000 +B1028024540572N00616963EA0209702028000 +B1028054540584N00616961EA0210302036000 +B1028084540596N00616947EA0210902043000 +B1028114540600N00616929EA0211202050000 +B1028144540597N00616909EA0211002057000 +B1028174540589N00616888EA0211402063000 +B1028204540580N00616870EA0211802068000 +B1028234540571N00616853EA0211602073000 +B1028264540558N00616835EA0211102078000 +B1028294540543N00616819EA0210502081000 +B1028324540525N00616806EA0209802084000 +B1028354540506N00616790EA0209002085000 +B1028384540486N00616771EA0208502086000 +B1028414540465N00616752EA0207902085000 +B1028444540445N00616732EA0207302084000 +B1028474540424N00616713EA0206502081000 +B1028504540403N00616692EA0206102079000 +B1028534540382N00616673EA0205602076000 +B1028564540361N00616653EA0204902072000 +B1028594540340N00616632EA0204502069000 +B1029024540320N00616612EA0203802065000 +B1029054540300N00616592EA0203202060000 +B1029084540280N00616574EA0202702056000 +B1029114540260N00616556EA0202102051000 +B1029154540233N00616533EA0201502044000 +B1029184540213N00616515EA0201002039000 +B1029214540193N00616498EA0200402035000 +B1029244540173N00616480EA0199902030000 +B1029274540153N00616463EA0199402025000 +B1029304540132N00616448EA0198802019000 +B1029334540112N00616433EA0198202014000 +B1029364540091N00616419EA0197702009000 +B1029394540072N00616406EA0197302004000 +B1029424540053N00616392EA0196501999000 +B1029454540033N00616379EA0196001993000 +B1029484540013N00616366EA0195601988000 +B1029514539994N00616353EA0195101983000 +B1029544539974N00616339EA0194601978000 +B1029574539955N00616325EA0194101973000 +B1030004539936N00616311EA0193601967000 +B1030034539916N00616297EA0193101962000 +B1030064539896N00616283EA0192601957000 +B1030094539877N00616269EA0192201952000 +B1030124539857N00616257EA0191801947000 +B1030154539837N00616245EA0191301942000 +B1030184539817N00616234EA0191001937000 +B1030214539797N00616224EA0190601933000 +B1030244539776N00616215EA0190201928000 +B1030274539755N00616205EA0189801923000 +B1030314539728N00616191EA0189601918000 +B1030344539707N00616180EA0189201913000 +B1030374539686N00616169EA0188801909000 +B1030404539666N00616159EA0188501905000 +B1030434539646N00616148EA0188101901000 +B1030464539626N00616139EA0187701897000 +B1030494539605N00616129EA0187401893000 +B1030524539585N00616119EA0187101889000 +B1030554539565N00616109EA0186801885000 +B1030584539544N00616099EA0186401882000 +B1031014539524N00616090EA0186001878000 +B1031044539504N00616081EA0185601874000 +B1031074539483N00616073EA0185001870000 +B1031104539462N00616065EA0184901866000 +B1031134539443N00616058EA0184301862000 +B1031164539425N00616052EA0184401859000 +B1031194539409N00616045EA0183701855000 +B1031224539390N00616036EA0183801852000 +B1031254539374N00616025EA0184201849000 +B1031284539362N00616015EA0184401847000 +B1031314539350N00616004EA0184701845000 +B1031344539339N00615993EA0184701844000 +B1031374539327N00615981EA0184601843000 +B1031404539314N00615972EA0184201842000 +B1031434539300N00615964EA0183601840000 +B1031474539280N00615953EA0183001838000 +B1031504539263N00615947EA0182501835000 +B1031534539247N00615939EA0182201832000 +B1031564539232N00615931EA0181801830000 +B1031594539216N00615924EA0181501827000 +B1032024539198N00615918EA0181301824000 +B1032054539183N00615911EA0181201821000 +B1032084539167N00615905EA0180601818000 +B1032114539151N00615900EA0180201815000 +B1032144539135N00615897EA0179901812000 +B1032174539119N00615892EA0180201809000 +B1032204539106N00615886EA0180501807000 +B1032234539093N00615880EA0181401806000 +B1032264539082N00615877EA0182001806000 +B1032294539071N00615878EA0182501806000 +B1032324539059N00615882EA0183101807000 +B1032354539056N00615896EA0183301808000 +B1032384539070N00615909EA0184201810000 +B1032414539087N00615903EA0184601812000 +B1032444539099N00615880EA0185101815000 +B1032474539097N00615856EA0185701818000 +B1032504539088N00615837EA0186601821000 +B1032534539079N00615825EA0186701825000 +B1032564539065N00615820EA0186901829000 +B1032594539052N00615821EA0186601832000 +B1033024539040N00615836EA0186401836000 +B1033054539030N00615848EA0186101838000 +B1033084539016N00615852EA0185801841000 +B1033124538998N00615845EA0185601843000 +B1033154538986N00615832EA0185701845000 +B1033184538972N00615822EA0185301845000 +B1033214538959N00615812EA0184801846000 +B1033244538944N00615799EA0184801846000 +B1033274538932N00615783EA0185201845000 +B1033304538922N00615767EA0186201846000 +B1033334538914N00615753EA0187001848000 +B1033364538903N00615747EA0187501850000 +B1033394538895N00615761EA0188001852000 +B1033424538901N00615776EA0189001855000 +B1033454538914N00615775EA0189601858000 +B1033484538927N00615762EA0190701862000 +B1033514538933N00615740EA0191101866000 +B1033544538929N00615718EA0192101871000 +B1033574538918N00615709EA0192901875000 +B1034004538908N00615717EA0193601880000 +B1034034538909N00615734EA0194101885000 +B1034064538921N00615744EA0195401891000 +B1034094538935N00615733EA0196401897000 +B1034124538944N00615711EA0197601904000 +B1034154538942N00615687EA0198201911000 +B1034184538930N00615678EA0199001919000 +B1034214538925N00615688EA0199601924000 +B1034244538932N00615704EA0200301932000 +B1034274538948N00615703EA0201701940000 +B1034304538958N00615681EA0202901949000 +B1034334538961N00615654EA0203801958000 +B1034364538954N00615633EA0204501967000 +B1034394538941N00615628EA0204901976000 +B1034424538934N00615642EA0205301984000 +B1034454538939N00615657EA0205901991000 +B1034484538954N00615665EA0207101998000 +B1034524538974N00615656EA0207802009000 +B1034554538987N00615637EA0209102017000 +B1034584538990N00615613EA0209702025000 +B1035014538981N00615594EA0210302033000 +B1035044538966N00615593EA0210802041000 +B1035074538961N00615608EA0211202048000 +B1035104538972N00615622EA0212202055000 +B1035134538988N00615618EA0213302062000 +B1035164538998N00615599EA0214202070000 +B1035194538998N00615574EA0214802077000 +B1035224538987N00615556EA0215402085000 +B1035254538972N00615553EA0216002092000 +B1035284538966N00615567EA0216202098000 +B1035314538973N00615584EA0216502105000 +B1035344538989N00615586EA0217102111000 +B1035374539004N00615576EA0218102118000 +B1035404539015N00615559EA0219002125000 +B1035434539024N00615538EA0219502132000 +B1035464539020N00615514EA0220002139000 +B1035494539004N00615506EA0220902146000 +B1035524538994N00615516EA0221402152000 +B1035554538996N00615535EA0222102159000 +B1035584539009N00615539EA0222702166000 +B1036014539019N00615518EA0223802173000 +B1036044539018N00615494EA0224302179000 +B1036074539010N00615476EA0224802185000 +B1036104538996N00615469EA0225302191000 +B1036134538984N00615478EA0225602197000 +B1036164538982N00615495EA0225702203000 +B1036194538990N00615509EA0225902208000 +B1036224539007N00615511EA0226502213000 +B1036264539025N00615488EA0227402221000 +B1036294539035N00615466EA0228102226000 +B1036324539041N00615442EA0228202232000 +B1036354539035N00615417EA0228602237000 +B1036384539023N00615403EA0228902242000 +B1036414539010N00615395EA0229002247000 +B1036444538994N00615388EA0229202251000 +B1036474538977N00615383EA0229202256000 +B1036504538960N00615379EA0228902259000 +B1036534538942N00615376EA0228102262000 +B1036564538922N00615372EA0227702263000 +B1036594538903N00615368EA0227202264000 +B1037024538883N00615365EA0226702264000 +B1037054538864N00615364EA0226302264000 +B1037084538845N00615363EA0225802263000 +B1037114538825N00615362EA0225402261000 +B1037144538806N00615360EA0224902259000 +B1037174538787N00615358EA0224302257000 +B1037204538768N00615356EA0224102255000 +B1037234538750N00615353EA0223502252000 +B1037264538731N00615351EA0223302250000 +B1037294538712N00615347EA0222802247000 +B1037324538693N00615344EA0222602244000 +B1037354538674N00615341EA0222302241000 +B1037384538656N00615338EA0221902238000 +B1037414538637N00615336EA0221502235000 +B1037444538618N00615333EA0221202232000 +B1037484538594N00615329EA0220802228000 +B1037514538575N00615326EA0220602225000 +B1037544538557N00615323EA0220202222000 +B1037574538538N00615319EA0219802218000 +B1038004538520N00615316EA0219502215000 +B1038034538502N00615312EA0219102212000 +B1038064538484N00615308EA0218802209000 +B1038094538466N00615304EA0218402205000 +B1038124538448N00615300EA0218202202000 +B1038154538432N00615298EA0218002199000 +B1038184538418N00615296EA0217802196000 +B1038214538402N00615292EA0217502193000 +B1038244538386N00615290EA0217602190000 +B1038274538371N00615286EA0217802188000 +B1038304538357N00615287EA0217602186000 +B1038334538342N00615287EA0217402184000 +B1038364538325N00615284EA0217402182000 +B1038394538307N00615279EA0217402180000 +B1038424538289N00615271EA0217102179000 +B1038454538269N00615266EA0216902177000 +B1038484538250N00615261EA0216602175000 +B1038514538231N00615255EA0216402173000 +B1038544538209N00615248EA0216802171000 +B1038574538188N00615242EA0217002170000 +B1039004538167N00615234EA0217402169000 +B1039044538141N00615224EA0216802169000 +B1039074538122N00615221EA0216602168000 +B1039104538106N00615221EA0217002167000 +B1039134538094N00615218EA0216102166000 +B1039164538077N00615210EA0215602164000 +B1039194538058N00615201EA0215202162000 +B1039224538040N00615195EA0214302160000 +B1039254538021N00615187EA0213502157000 +B1039284538005N00615177EA0213702154000 +B1039314537991N00615166EA0213502151000 +B1039344537974N00615153EA0214202148000 +B1039374537959N00615143EA0214102147000 +B1039404537943N00615132EA0213402145000 +B1039434537925N00615120EA0212802143000 +B1039464537909N00615104EA0213102140000 +B1039494537895N00615089EA0213002138000 +B1039524537879N00615074EA0212802136000 +B1039554537865N00615058EA0212302134000 +B1039584537849N00615041EA0211702132000 +B1040014537832N00615025EA0211802129000 +B1040044537817N00615009EA0211202127000 +B1040074537802N00614989EA0210902124000 +B1040104537787N00614968EA0210402121000 +B1040134537772N00614947EA0210602118000 +B1040164537758N00614928EA0210202115000 +B1040194537743N00614905EA0210602113000 +B1040224537729N00614885EA0211802111000 +B1040264537715N00614866EA0212202111000 +B1040294537704N00614852EA0212202111000 +B1040324537696N00614832EA0212502111000 +B1040354537688N00614815EA0212602112000 +B1040384537679N00614796EA0212602113000 +B1040414537672N00614777EA0212502114000 +B1040444537663N00614759EA0212302114000 +B1040474537655N00614741EA0211802114000 +B1040504537646N00614720EA0211402113000 +B1040534537638N00614699EA0212002113000 +B1040564537630N00614681EA0212102113000 +B1040594537620N00614659EA0212602113000 +B1041024537610N00614639EA0213402114000 +B1041054537602N00614622EA0213502115000 +B1041084537593N00614605EA0213702117000 +B1041114537584N00614587EA0213802118000 +B1041144537575N00614567EA0213802120000 +B1041174537566N00614548EA0213402121000 +B1041204537556N00614528EA0213202122000 +B1041234537545N00614512EA0212602122000 +B1041264537533N00614496EA0212302121000 +B1041294537521N00614479EA0212102121000 +B1041324537508N00614461EA0211602120000 +B1041354537493N00614444EA0211102118000 +B1041384537479N00614426EA0210702116000 +B1041414537464N00614408EA0210602114000 +B1041444537450N00614391EA0210902113000 +B1041474537435N00614374EA0210902111000 +B1041514537415N00614355EA0210902110000 +B1041544537401N00614341EA0210702108000 +B1041574537388N00614326EA0210302107000 +B1042004537376N00614311EA0209702105000 +B1042034537361N00614294EA0208402103000 +B1042064537345N00614274EA0208202100000 +B1042094537330N00614256EA0207602096000 +B1042124537313N00614238EA0207102092000 +B1042154537296N00614220EA0206602089000 +B1042184537278N00614202EA0206102085000 +B1042214537261N00614183EA0205702081000 +B1042244537244N00614164EA0205102077000 +B1042274537227N00614145EA0204702072000 +B1042304537213N00614127EA0204202068000 +B1042334537199N00614110EA0203802064000 +B1042364537182N00614092EA0204102060000 +B1042394537167N00614076EA0204702056000 +B1042424537157N00614060EA0205402054000 +B1042454537146N00614043EA0205902053000 +B1042484537136N00614029EA0205802052000 +B1042514537124N00614015EA0206002052000 +B1042544537114N00614001EA0206102052000 +B1042574537105N00613987EA0206302051000 +B1043004537096N00613970EA0206502051000 +B1043034537088N00613956EA0206402052000 +B1043064537078N00613939EA0206502052000 +B1043094537068N00613922EA0206802052000 +B1043134537056N00613901EA0206202053000 +B1043164537045N00613884EA0205102053000 +B1043194537031N00613866EA0204902051000 +B1043224537019N00613852EA0204902050000 +B1043254537009N00613834EA0204202049000 +B1043284536998N00613813EA0204602047000 +B1043314536990N00613799EA0204302047000 +B1043344536979N00613784EA0203602045000 +B1043374536967N00613766EA0203702043000 +B1043404536957N00613751EA0203202042000 +B1043434536945N00613737EA0202802039000 +B1043464536932N00613727EA0202402037000 +B1043494536918N00613715EA0203002035000 +B1043524536906N00613704EA0203402033000 +B1043554536894N00613689EA0203102032000 +B1043584536879N00613672EA0203102031000 +B1044014536865N00613657EA0203602030000 +B1044044536855N00613643EA0204302030000 +B1044074536847N00613628EA0204302030000 +B1044104536839N00613609EA0204702031000 +B1044134536833N00613590EA0205102032000 +B1044164536826N00613569EA0205402034000 +B1044194536820N00613549EA0205302036000 +B1044224536812N00613525EA0205102038000 +B1044254536804N00613502EA0204802039000 +B1044284536796N00613481EA0204302039000 +B1044314536787N00613462EA0203702039000 +B1044354536774N00613434EA0203302038000 +B1044384536764N00613414EA0203002037000 +B1044414536754N00613395EA0202602035000 +B1044444536745N00613376EA0202102034000 +B1044474536735N00613356EA0201602031000 +B1044504536725N00613335EA0201302029000 +B1044534536716N00613314EA0201802026000 +B1044564536707N00613296EA0202502025000 +B1044594536697N00613282EA0203002024000 +B1045024536686N00613267EA0203602024000 +B1045054536673N00613253EA0204602025000 +B1045084536659N00613246EA0205302027000 +B1045114536649N00613254EA0205802029000 +B1045144536647N00613270EA0206102032000 +B1045174536658N00613282EA0206002035000 +B1045204536674N00613276EA0206302037000 +B1045234536684N00613253EA0207102039000 +B1045264536688N00613228EA0208002042000 +B1045294536690N00613200EA0209102046000 +B1045324536687N00613176EA0209702050000 +B1045354536675N00613163EA0210202055000 +B1045384536666N00613172EA0210602059000 +B1045414536671N00613189EA0211002064000 +B1045444536688N00613188EA0211802068000 +B1045474536705N00613173EA0213202073000 +B1045504536718N00613154EA0214402080000 +B1045534536726N00613129EA0215102086000 +B1045564536720N00613107EA0215902093000 +B1045594536708N00613097EA0217102100000 +B1046024536700N00613102EA0217902105000 +B1046064536708N00613119EA0218702116000 +B1046094536726N00613120EA0220002124000 +B1046124536740N00613101EA0221002133000 +B1046154536741N00613074EA0221602142000 +B1046184536734N00613056EA0222002150000 +B1046214536723N00613055EA0222702157000 +B1046244536722N00613071EA0223402165000 +B1046274536730N00613084EA0224102172000 +B1046304536746N00613090EA0224802180000 +B1046334536766N00613080EA0225302187000 +B1046364536778N00613056EA0226002194000 +B1046394536776N00613032EA0225902201000 +B1046424536766N00613024EA0226002207000 +B1046454536757N00613031EA0226402211000 +B1046484536757N00613045EA0226502216000 +B1046514536770N00613055EA0227002222000 +B1046544536785N00613043EA0227102227000 +B1046574536789N00613019EA0227102232000 +B1047004536781N00613002EA0227202236000 +B1047034536768N00612988EA0226702239000 +B1047064536754N00612971EA0226702242000 +B1047094536745N00612954EA0226702244000 +B1047124536736N00612939EA0226502246000 +B1047154536726N00612922EA0226702247000 +B1047184536716N00612904EA0226702249000 +B1047214536706N00612882EA0227902251000 +B1047244536697N00612865EA0228502253000 +B1047274536687N00612848EA0229102256000 +B1047304536679N00612829EA0230002259000 +B1047334536673N00612810EA0230402263000 +B1047364536667N00612789EA0229902267000 +B1047394536659N00612768EA0229002270000 +B1047434536644N00612742EA0227602270000 +B1047464536631N00612720EA0227302270000 +B1047494536620N00612700EA0226202269000 +B1047524536607N00612675EA0225502267000 +B1047554536596N00612651EA0224902264000 +B1047584536584N00612627EA0224302261000 +B1048014536573N00612603EA0224902259000 +B1048044536564N00612581EA0225402257000 +B1048074536556N00612561EA0225902257000 +B1048104536547N00612540EA0226502256000 +B1048134536541N00612521EA0226902257000 +B1048164536532N00612502EA0227502258000 +B1048194536527N00612485EA0227902259000 +B1048224536519N00612463EA0228202261000 +B1048254536512N00612444EA0228402263000 +B1048284536504N00612426EA0228602265000 +B1048314536493N00612409EA0229602267000 +B1048344536485N00612402EA0230302269000 +B1048374536477N00612395EA0230002272000 +B1048404536470N00612380EA0229602274000 +B1048434536460N00612363EA0229402276000 +B1048464536450N00612345EA0229202278000 +B1048494536441N00612330EA0228202278000 +B1048524536430N00612312EA0227602278000 +B1048554536417N00612290EA0227102277000 +B1048584536403N00612270EA0227702276000 +B1049014536392N00612252EA0227802275000 +B1049044536380N00612236EA0228202274000 +B1049074536369N00612222EA0228602275000 +B1049104536360N00612210EA0228602275000 +B1049134536352N00612193EA0228502276000 +B1049174536337N00612168EA0228602276000 +B1049204536321N00612147EA0230002277000 +B1049234536311N00612129EA0230802280000 +B1049264536301N00612109EA0231802282000 +B1049294536291N00612095EA0233202287000 +B1049324536286N00612086EA0233002290000 +B1049354536275N00612073EA0233602294000 +B1049384536267N00612063EA0234002299000 +B1049414536258N00612049EA0233902303000 +B1049444536249N00612035EA0234202306000 +B1049474536240N00612020EA0233802310000 +B1049504536229N00612002EA0233802313000 +B1049534536220N00611985EA0233402315000 +B1049564536209N00611966EA0233002317000 +B1049594536199N00611948EA0233102318000 +B1050024536190N00611932EA0233202319000 +B1050054536181N00611917EA0233402319000 +B1050084536172N00611901EA0233402320000 +B1050114536162N00611885EA0233302321000 +B1050144536152N00611871EA0233602322000 +B1050174536143N00611854EA0234302323000 +B1050204536137N00611837EA0234902324000 +B1050234536132N00611821EA0235202326000 +B1050264536124N00611804EA0235902328000 +B1050294536117N00611787EA0236102331000 +B1050324536110N00611767EA0235902334000 +B1050354536100N00611747EA0235902336000 +B1050384536089N00611727EA0235802338000 +B1050414536080N00611704EA0235402339000 +B1050444536072N00611681EA0234902340000 +B1050474536063N00611658EA0234602341000 +B1050514536050N00611630EA0234102340000 +B1050544536039N00611608EA0234102340000 +B1050574536029N00611585EA0234002339000 +B1051004536018N00611562EA0233902339000 +B1051034536007N00611538EA0234102338000 +B1051064535998N00611515EA0234102338000 +B1051094535989N00611491EA0234302338000 +B1051124535979N00611467EA0235602338000 +B1051154535971N00611452EA0236102339000 +B1051184535963N00611434EA0236202341000 +B1051214535953N00611414EA0236802343000 +B1051244535945N00611389EA0236802345000 +B1051274535940N00611362EA0236602347000 +B1051304535934N00611336EA0236202348000 +B1051334535926N00611310EA0236202349000 +B1051364535919N00611285EA0235902349000 +B1051394535910N00611259EA0235702349000 +B1051424535902N00611233EA0235602349000 +B1051454535894N00611206EA0235702349000 +B1051484535888N00611180EA0236402350000 +B1051514535884N00611154EA0236602351000 +B1051544535880N00611128EA0236402352000 +B1051574535877N00611102EA0235902353000 +B1052004535872N00611073EA0235702353000 +B1052034535867N00611045EA0235402353000 +B1052074535865N00611005EA0235602353000 +B1052104535860N00610977EA0235602353000 +B1052134535856N00610949EA0235802353000 +B1052164535851N00610921EA0235202353000 +B1052194535845N00610891EA0235502352000 +B1052224535840N00610865EA0235502352000 +B1052254535835N00610835EA0235402352000 +B1052284535830N00610808EA0235702352000 +B1052314535825N00610782EA0235702352000 +B1052344535820N00610757EA0236202352000 +B1052374535815N00610734EA0236002352000 +B1052404535809N00610710EA0236402353000 +B1052434535805N00610691EA0235902353000 +B1052464535798N00610665EA0236302353000 +B1052494535792N00610642EA0236902354000 +B1052524535786N00610619EA0236902355000 +B1052554535778N00610597EA0237102356000 +B1052584535774N00610576EA0237002357000 +B1053014535769N00610551EA0237302358000 +B1053044535763N00610528EA0238002360000 +B1053074535756N00610508EA0238402362000 +B1053104535747N00610487EA0239102364000 +B1053134535735N00610467EA0240102366000 +B1053164535723N00610447EA0240902370000 +B1053194535713N00610423EA0242102374000 +B1053224535703N00610402EA0243002379000 +B1053254535688N00610384EA0243802385000 +B1053284535670N00610384EA0244802391000 +B1053314535664N00610395EA0245502396000 +B1053344535677N00610396EA0246402401000 +B1053374535686N00610373EA0247002408000 +B1053414535675N00610339EA0247702416000 +B1053444535660N00610320EA0248002422000 +B1053474535648N00610294EA0248302428000 +B1053504535644N00610265EA0248402433000 +B1053534535644N00610235EA0248302438000 +B1053564535647N00610204EA0248002442000 +B1053594535652N00610172EA0247902445000 +B1054024535657N00610143EA0247602447000 +B1054054535654N00610116EA0247902450000 +B1054084535651N00610095EA0248002453000 +B1054114535644N00610075EA0247502455000 +B1054144535637N00610054EA0246902456000 +B1054174535634N00610027EA0246102457000 +B1054204535630N00609998EA0245702457000 +B1054234535626N00609970EA0244902456000 +B1054264535622N00609939EA0244902454000 +B1054294535618N00609911EA0244602453000 +B1054324535611N00609879EA0244002451000 +B1054354535602N00609842EA0244802450000 +B1054384535594N00609814EA0244902449000 +B1054414535586N00609787EA0244702448000 +B1054444535579N00609758EA0244902447000 +B1054474535572N00609728EA0244702447000 +B1054504535567N00609696EA0244402446000 +B1054534535563N00609665EA0244102445000 +B1054564535557N00609633EA0243702444000 +B1054594535550N00609601EA0243402443000 +B1055024535542N00609569EA0243102441000 +B1055064535531N00609530EA0242902439000 +B1055094535522N00609502EA0242802437000 +B1055124535513N00609473EA0242602435000 +B1055154535504N00609446EA0242202434000 +B1055184535493N00609420EA0241602432000 +B1055214535483N00609392EA0241202430000 +B1055244535474N00609365EA0240902428000 +B1055274535465N00609338EA0240302425000 +B1055304535456N00609309EA0240002423000 +B1055334535448N00609280EA0239602420000 +B1055364535440N00609251EA0239202417000 +B1055394535432N00609222EA0238802414000 +B1055424535424N00609192EA0238402411000 +B1055454535417N00609163EA0238002408000 +B1055484535409N00609133EA0237602404000 +B1055514535401N00609104EA0237202400000 +B1055544535393N00609074EA0236802396000 +B1055574535385N00609045EA0236602393000 +B1056004535376N00609015EA0236302389000 +B1056034535365N00608987EA0236102387000 +B1056064535355N00608960EA0236002383000 +B1056094535344N00608932EA0235702380000 +B1056124535333N00608904EA0235302377000 +B1056154535322N00608877EA0235202374000 +B1056184535311N00608851EA0234902370000 +B1056214535299N00608826EA0234602367000 +B1056254535283N00608791EA0234502362000 +B1056284535272N00608764EA0234302359000 +B1056314535263N00608735EA0233902356000 +B1056344535253N00608706EA0233602354000 +B1056374535243N00608679EA0233302351000 +B1056404535232N00608652EA0233102347000 +B1056434535221N00608624EA0232602344000 +B1056464535211N00608597EA0232402342000 +B1056494535200N00608570EA0232002339000 +B1056524535190N00608543EA0231702336000 +B1056554535180N00608516EA0231302333000 +B1056584535170N00608489EA0231002330000 +B1057014535160N00608463EA0230502327000 +B1057044535151N00608436EA0229902324000 +B1057074535139N00608404EA0228802320000 +B1057104535123N00608367EA0228502316000 +B1057134535109N00608334EA0228402312000 +B1057164535098N00608301EA0227702308000 +B1057194535085N00608265EA0227302304000 +B1057224535071N00608230EA0227102300000 +B1057254535058N00608197EA0226202295000 +B1057284535044N00608162EA0225702291000 +B1057314535030N00608128EA0225302286000 +B1057344535018N00608093EA0224602281000 +B1057374535004N00608057EA0224202276000 +B1057404534990N00608023EA0223702272000 +B1057444534971N00607977EA0223002265000 +B1057474534957N00607942EA0222502259000 +B1057504534943N00607907EA0222002254000 +B1057534534928N00607873EA0221402249000 +B1057564534912N00607839EA0220902243000 +B1057594534896N00607807EA0220302238000 +B1058024534880N00607775EA0219702232000 +B1058054534863N00607744EA0219202227000 +B1058084534846N00607711EA0218702221000 +B1058114534829N00607678EA0218102215000 +B1058144534813N00607645EA0217502210000 +B1058174534797N00607611EA0217102204000 +B1058204534781N00607577EA0216402198000 +B1058234534765N00607543EA0215902193000 +B1058264534749N00607510EA0215402187000 +B1058294534732N00607477EA0214902182000 +B1058324534715N00607445EA0214502177000 +B1058354534698N00607412EA0213902171000 +B1058384534680N00607381EA0213502166000 +B1058414534662N00607350EA0213002161000 +B1058444534643N00607319EA0212502156000 +B1058474534625N00607289EA0211902151000 +B1058504534608N00607256EA0211602145000 +B1058534534592N00607222EA0211202140000 +B1058564534576N00607188EA0210602135000 +B1059004534554N00607143EA0210102129000 +B1059034534538N00607110EA0209802124000 +B1059064534521N00607077EA0209102119000 +B1059094534505N00607043EA0208702113000 +B1059124534488N00607011EA0208402109000 +B1059154534472N00606979EA0207702104000 +B1059184534455N00606948EA0207402099000 +B1059214534438N00606918EA0206902094000 +B1059244534422N00606888EA0206502089000 +B1059274534406N00606857EA0206102085000 +B1059304534391N00606826EA0205802080000 +B1059334534376N00606795EA0205202076000 +B1059364534360N00606765EA0204802071000 +B1059394534344N00606734EA0204302067000 +B1059424534328N00606704EA0203902062000 +B1059454534312N00606674EA0203402058000 +B1059484534295N00606645EA0203002053000 +B1059514534279N00606615EA0202702049000 +B1059544534262N00606586EA0202102045000 +B1059574534246N00606557EA0201602040000 +B1100004534229N00606528EA0201102036000 +B1100034534213N00606499EA0200702031000 +B1100064534196N00606470EA0200202027000 +B1100094534180N00606441EA0199902022000 +B1100124534165N00606411EA0199302018000 +B1100164534145N00606371EA0198902012000 +B1100194534130N00606340EA0198402008000 +B1100224534115N00606310EA0197902004000 +B1100254534101N00606279EA0197501999000 +B1100284534087N00606249EA0197001995000 +B1100314534073N00606218EA0196501990000 +B1100344534059N00606188EA0196001986000 +B1100374534045N00606158EA0195501981000 +B1100404534031N00606128EA0195001977000 +B1100434534016N00606099EA0194501972000 +B1100464534001N00606069EA0194001967000 +B1100494533986N00606041EA0193501962000 +B1100524533970N00606013EA0192801957000 +B1100554533954N00605985EA0192501952000 +B1100584533939N00605958EA0191801947000 +B1101014533922N00605930EA0191301942000 +B1101044533905N00605903EA0191201937000 +B1101074533888N00605878EA0190601932000 +B1101104533871N00605852EA0190101927000 +B1101134533854N00605825EA0189601922000 +B1101164533837N00605800EA0189201918000 +B1101194533821N00605772EA0188801913000 +B1101224533807N00605744EA0189101908000 +B1101254533792N00605714EA0190001904000 +B1101284533781N00605690EA0190901902000 +B1101314533775N00605673EA0191101901000 +B1101344533776N00605653EA0191801901000 +B1101384533790N00605641EA0192801903000 +B1101414533804N00605643EA0193901905000 +B1101444533816N00605656EA0195001908000 +B1101474533818N00605677EA0196301912000 +B1101504533809N00605691EA0197201916000 +B1101534533793N00605691EA0197801921000 +B1101564533785N00605673EA0198001926000 +B1101594533793N00605657EA0199401931000 +B1102024533805N00605657EA0200401937000 +B1102054533814N00605671EA0200701944000 +B1102084533806N00605687EA0201201950000 +B1102114533791N00605686EA0201801956000 +B1102144533783N00605669EA0202501962000 +B1102174533781N00605645EA0203901968000 +B1102204533785N00605628EA0204701975000 +B1102234533796N00605623EA0205201982000 +B1102264533800N00605638EA0205801988000 +B1102294533792N00605651EA0206001995000 +B1102324533775N00605654EA0206802001000 +B1102354533760N00605642EA0207502007000 +B1102384533755N00605621EA0208402013000 +B1102414533760N00605610EA0209002019000 +B1102444533766N00605620EA0209302025000 +B1102474533758N00605637EA0209602032000 +B1102504533739N00605640EA0210002038000 +B1102534533722N00605633EA0210302045000 +B1102564533712N00605614EA0210002050000 +B1102594533711N00605594EA0210202056000 +B1103024533717N00605581EA0209602060000 +B1103054533727N00605570EA0210102064000 +B1103084533732N00605579EA0209802066000 +B1103114533728N00605596EA0209502069000 +B1103144533709N00605601EA0209102071000 +B1103174533692N00605576EA0209202073000 +B1103214533682N00605552EA0208502074000 +B1103244533680N00605520EA0207502073000 +B1103274533680N00605480EA0206602072000 +B1103304533681N00605438EA0206802070000 +B1103334533686N00605405EA0207302069000 +B1103364533688N00605377EA0207002068000 +B1103394533686N00605349EA0207002067000 +B1103424533682N00605324EA0207402066000 +B1103454533675N00605299EA0208102066000 +B1103484533665N00605276EA0208902066000 +B1103514533656N00605260EA0209502068000 +B1103544533643N00605254EA0209802070000 +B1103574533633N00605262EA0210302071000 +B1104004533640N00605275EA0210602073000 +B1104034533653N00605274EA0210902076000 +B1104064533663N00605256EA0211502078000 +B1104094533666N00605233EA0212002081000 +B1104124533660N00605210EA0212402084000 +B1104154533646N00605202EA0212702088000 +B1104184533633N00605206EA0213102091000 +B1104214533631N00605220EA0213202094000 +B1104244533640N00605230EA0213202097000 +B1104274533653N00605221EA0213402099000 +B1104304533659N00605198EA0214002102000 +B1104334533657N00605172EA0214702105000 +B1104364533651N00605148EA0215302107000 +B1104394533643N00605125EA0215902111000 +B1104424533637N00605105EA0215802115000 +B1104454533639N00605079EA0216002118000 +B1104494533657N00605063EA0215602122000 +B1104524533670N00605071EA0215402125000 +B1104554533671N00605087EA0216002127000 +B1104584533665N00605095EA0216502128000 +B1105014533654N00605100EA0217002131000 +B1105044533640N00605091EA0217402134000 +B1105074533628N00605074EA0217802138000 +B1105104533618N00605053EA0217702141000 +B1105134533607N00605029EA0217602143000 +B1105164533594N00605008EA0217802146000 +B1105194533582N00604987EA0218102149000 +B1105224533572N00604969EA0218202151000 +B1105254533562N00604949EA0217802154000 +B1105284533549N00604928EA0217602155000 +B1105314533537N00604905EA0217302157000 +B1105344533526N00604881EA0216302158000 +B1105374533514N00604851EA0216102158000 +B1105404533503N00604824EA0215402157000 +B1105434533493N00604793EA0214802156000 +B1105464533484N00604761EA0214802154000 +B1105494533475N00604734EA0214302153000 +B1105524533463N00604705EA0214202151000 +B1105554533450N00604678EA0214002149000 +B1105584533437N00604654EA0213502147000 +B1106014533423N00604628EA0213102145000 +B1106044533412N00604601EA0212802142000 +B1106074533399N00604574EA0212502140000 +B1106114533381N00604540EA0212402137000 +B1106144533367N00604515EA0211902135000 +B1106174533354N00604488EA0211602132000 +B1106204533341N00604460EA0211002130000 +B1106234533326N00604431EA0210602127000 +B1106264533314N00604402EA0210402123000 +B1106294533302N00604372EA0210002120000 +B1106324533292N00604342EA0209802117000 +B1106354533282N00604313EA0209202114000 +B1106384533270N00604284EA0209002110000 +B1106414533260N00604256EA0208802107000 +B1106444533251N00604226EA0208202104000 +B1106474533241N00604194EA0208002100000 +B1106504533233N00604165EA0208002097000 +B1106534533224N00604138EA0207302094000 +B1106564533214N00604106EA0207102091000 +B1106594533205N00604076EA0206702087000 +B1107024533196N00604046EA0206102084000 +B1107054533186N00604015EA0206002080000 +B1107084533178N00603985EA0205402077000 +B1107114533167N00603953EA0205302073000 +B1107144533157N00603925EA0205002069000 +B1107174533148N00603899EA0204502066000 +B1107204533137N00603870EA0204402062000 +B1107234533125N00603842EA0204302059000 +B1107264533115N00603815EA0204202056000 +B1107294533105N00603789EA0203802053000 +B1107334533093N00603756EA0203402049000 +B1107364533085N00603731EA0203202046000 +B1107394533081N00603706EA0202902043000 +B1107424533076N00603682EA0202602040000 +B1107454533072N00603658EA0202502038000 +B1107484533071N00603635EA0202202035000 +B1107514533065N00603615EA0202102033000 +B1107544533059N00603594EA0202002030000 +B1107574533064N00603576EA0202002028000 +B1108004533072N00603559EA0202202027000 +B1108034533078N00603541EA0202102025000 +B1108064533086N00603522EA0201702023000 +B1108094533096N00603504EA0201202022000 +B1108124533109N00603488EA0200902020000 +B1108154533124N00603493EA0200702017000 +B1108184533136N00603504EA0200402015000 +B1108214533151N00603514EA0200202013000 +B1108244533168N00603524EA0200602011000 +B1108274533184N00603529EA0200902010000 +B1108304533199N00603531EA0201302009000 +B1108334533213N00603540EA0201402008000 +B1108364533220N00603558EA0201802008000 +B1108394533220N00603578EA0201902008000 +B1108424533215N00603596EA0201902008000 +B1108454533204N00603610EA0202002008000 +B1108494533183N00603618EA0202202009000 +B1108524533168N00603610EA0202002009000 +B1108554533157N00603593EA0202302009000 +B1108584533156N00603576EA0202102009000 +B1109014533165N00603561EA0201702009000 +B1109044533181N00603560EA0201802009000 +B1109074533196N00603564EA0202402009000 +B1109104533208N00603567EA0202402010000 +B1109134533217N00603581EA0202202011000 +B1109164533212N00603598EA0202202011000 +B1109194533199N00603606EA0202402012000 +B1109224533185N00603606EA0202302012000 +B1109254533170N00603602EA0202302012000 +B1109284533157N00603591EA0202002012000 +B1109314533151N00603574EA0201702012000 +B1109344533159N00603557EA0201202011000 +B1109374533176N00603552EA0201402010000 +B1109404533190N00603562EA0201402009000 +B1109434533200N00603579EA0201602009000 +B1109464533211N00603592EA0201602009000 +B1109494533224N00603597EA0201502009000 +B1109524533237N00603602EA0201502009000 +B1109554533248N00603611EA0201302008000 +B1109584533259N00603625EA0200802008000 +B1110014533271N00603643EA0201002007000 +B1110044533281N00603661EA0201402006000 +B1110084533293N00603683EA0201802006000 +B1110114533297N00603700EA0201802006000 +B1110144533292N00603716EA0201202006000 +B1110174533279N00603719EA0200602005000 +B1110204533265N00603708EA0200902003000 +B1110234533254N00603696EA0201002003000 +B1110264533246N00603681EA0200502002000 +B1110294533237N00603656EA0199602000000 +B1110324533229N00603630EA0199801999000 +B1110354533221N00603608EA0199601997000 +B1110384533212N00603583EA0199501996000 +B1110414533202N00603561EA0200401995000 +B1110444533197N00603545EA0200601995000 +B1110474533204N00603524EA0201001995000 +B1110504533218N00603521EA0201701995000 +B1110534533228N00603531EA0201801997000 +B1110564533229N00603547EA0201501998000 +B1110594533221N00603560EA0201801999000 +B1111024533211N00603558EA0202102000000 +B1111054533202N00603547EA0202302001000 +B1111084533202N00603525EA0202302002000 +B1111114533213N00603506EA0202702003000 +B1111144533228N00603501EA0202702004000 +B1111174533244N00603505EA0203102006000 +B1111204533250N00603519EA0203202007000 +B1111234533246N00603535EA0203802009000 +B1111264533237N00603542EA0203902010000 +B1111304533222N00603533EA0204102013000 +B1111334533216N00603514EA0204602014000 +B1111364533215N00603491EA0205102017000 +B1111394533220N00603469EA0205102019000 +B1111424533234N00603454EA0205302021000 +B1111454533249N00603453EA0205702023000 +B1111484533259N00603465EA0206102026000 +B1111514533261N00603480EA0206402029000 +B1111544533253N00603487EA0206702030000 +B1111574533242N00603482EA0207202033000 +B1112004533234N00603464EA0207202036000 +B1112034533236N00603439EA0207402039000 +B1112064533247N00603420EA0207702041000 +B1112094533263N00603414EA0207502044000 +B1112124533274N00603424EA0207702046000 +B1112154533276N00603440EA0207902048000 +B1112184533276N00603459EA0207902050000 +B1112214533276N00603478EA0208602053000 +B1112244533276N00603492EA0208602055000 +B1112274533267N00603499EA0208502057000 +B1112304533256N00603488EA0208602059000 +B1112334533252N00603465EA0209002060000 +B1112364533257N00603438EA0209602062000 +B1112394533270N00603422EA0210002065000 +B1112424533287N00603418EA0210102067000 +B1112454533300N00603428EA0210302070000 +B1112484533304N00603444EA0210202073000 +B1112514533300N00603457EA0210202075000 +B1112554533285N00603458EA0210202078000 +B1112584533273N00603449EA0210202080000 +B1113014533262N00603435EA0210402082000 +B1113044533256N00603412EA0210002083000 +B1113074533259N00603384EA0209902084000 +B1113104533270N00603359EA0210102085000 +B1113134533284N00603344EA0210302086000 +B1113164533298N00603334EA0210302087000 +B1113194533314N00603330EA0210202088000 +B1113224533326N00603335EA0209602088000 +B1113254533329N00603352EA0209102088000 +B1113284533324N00603367EA0209202087000 +B1113314533315N00603377EA0209002087000 +B1113344533304N00603382EA0209302086000 +B1113374533292N00603379EA0208702086000 +B1113404533278N00603370EA0208902085000 +B1113434533266N00603359EA0208302085000 +B1113464533253N00603341EA0208202084000 +B1113494533242N00603324EA0207902082000 +B1113524533231N00603305EA0207302081000 +B1113554533217N00603281EA0207602079000 +B1113584533206N00603259EA0207402077000 +B1114014533194N00603237EA0207302076000 +B1114044533181N00603217EA0207202074000 +B1114074533169N00603197EA0206702073000 +B1114114533152N00603169EA0206402070000 +B1114144533139N00603150EA0206002068000 +B1114174533125N00603135EA0205702066000 +B1114204533112N00603118EA0204902064000 +B1114234533096N00603098EA0204802061000 +B1114264533084N00603078EA0204902059000 +B1114294533070N00603060EA0204002056000 +B1114324533057N00603038EA0204202054000 +B1114354533047N00603020EA0203302051000 +B1114384533032N00602999EA0202802047000 +B1114414533019N00602980EA0202002044000 +B1114444533005N00602959EA0201202040000 +B1114474532991N00602939EA0200702036000 +B1114504532976N00602917EA0199502031000 +B1114534532960N00602891EA0199102026000 +B1114564532946N00602866EA0198502021000 +B1114594532931N00602839EA0197702015000 +B1115024532915N00602814EA0197002010000 +B1115054532901N00602788EA0196502004000 +B1115084532886N00602761EA0194801998000 +B1115114532865N00602730EA0194401992000 +B1115144532847N00602703EA0193701985000 +B1115174532829N00602677EA0192301979000 +B1115204532810N00602649EA0191701971000 +B1115234532792N00602621EA0190601964000 +B1115264532773N00602594EA0189401957000 +B1115294532754N00602566EA0188701949000 +B1115334532730N00602531EA0187601938000 +B1115364532712N00602504EA0186801930000 +B1115394532694N00602476EA0186201922000 +B1115424532676N00602447EA0185401914000 +B1115454532658N00602418EA0184901906000 +B1115484532640N00602391EA0184401898000 +B1115514532622N00602360EA0183801891000 +B1115544532604N00602330EA0183501884000 +B1115574532586N00602301EA0183201877000 +B1116004532569N00602272EA0182801870000 +B1116034532552N00602244EA0182401864000 +B1116064532535N00602216EA0182001858000 +B1116094532518N00602189EA0181601852000 +B1116124532501N00602162EA0181301846000 +B1116154532485N00602138EA0181401841000 +B1116184532472N00602118EA0181001836000 +B1116214532458N00602095EA0180301831000 +B1116244532443N00602070EA0180001826000 +B1116274532429N00602047EA0179701821000 +B1116304532417N00602026EA0179501817000 +B1116334532405N00602006EA0179101813000 +B1116364532393N00601983EA0178801809000 +B1116394532382N00601962EA0178301805000 +B1116424532369N00601940EA0178201801000 +B1116454532357N00601919EA0177701797000 +B1116484532344N00601899EA0177401793000 +B1116514532332N00601879EA0177001790000 +B1116554532315N00601854EA0176501785000 +B1116584532302N00601834EA0176101781000 +B1117014532289N00601813EA0175701777000 +B1117044532275N00601793EA0175401773000 +B1117074532262N00601774EA0174901769000 +B1117104532248N00601756EA0174701766000 +B1117134532234N00601738EA0174101762000 +B1117164532219N00601720EA0173701758000 +B1117194532204N00601704EA0173201754000 +B1117224532189N00601688EA0172901750000 +B1117254532173N00601672EA0172501746000 +B1117284532158N00601655EA0172301742000 +B1117314532144N00601639EA0172101739000 +B1117344532130N00601621EA0171701735000 +B1117374532116N00601602EA0171401731000 +B1117404532103N00601583EA0171201728000 +B1117434532089N00601564EA0171001725000 +B1117464532075N00601546EA0170601721000 +B1117494532060N00601529EA0170301718000 +B1117524532046N00601513EA0170101715000 +B1117554532031N00601498EA0169701712000 +B1117584532017N00601483EA0169301708000 +B1118014532001N00601469EA0169001705000 +B1118044531985N00601454EA0168701702000 +B1118074531970N00601439EA0168101698000 +B1118104531955N00601423EA0167801695000 +B1118144531936N00601401EA0167301690000 +B1118174531922N00601383EA0166901686000 +B1118204531907N00601366EA0166301683000 +B1118234531893N00601349EA0166001679000 +B1118264531878N00601334EA0165601675000 +B1118294531863N00601318EA0165201671000 +B1118324531849N00601302EA0164801667000 +B1118354531834N00601286EA0164501663000 +B1118384531820N00601269EA0164301660000 +B1118414531805N00601254EA0163801656000 +B1118444531791N00601237EA0163801653000 +B1118474531778N00601222EA0163601650000 +B1118504531765N00601207EA0163601647000 +B1118534531752N00601192EA0163501644000 +B1118564531739N00601177EA0163501642000 +B1118594531727N00601160EA0163401639000 +B1119024531715N00601143EA0163501637000 +B1119054531705N00601125EA0163501636000 +B1119084531694N00601106EA0163501634000 +B1119114531683N00601088EA0163601633000 +B1119144531672N00601069EA0163601631000 +B1119174531660N00601051EA0163701630000 +B1119204531649N00601033EA0163201629000 +B1119234531637N00601013EA0163201628000 +B1119274531620N00600988EA0163101626000 +B1119304531606N00600969EA0163201625000 +B1119334531593N00600952EA0163101624000 +B1119364531577N00600936EA0163101623000 +B1119394531562N00600919EA0163201622000 +B1119424531545N00600904EA0163301621000 +B1119454531533N00600887EA0163201620000 +B1119484531520N00600869EA0163201620000 +B1119514531508N00600851EA0162901619000 +B1119544531496N00600831EA0162701618000 +B1119574531484N00600809EA0162901617000 +B1120004531473N00600791EA0162601617000 +B1120034531462N00600771EA0162101616000 +B1120064531450N00600755EA0162101615000 +B1120094531439N00600742EA0161901614000 +B1120124531428N00600728EA0161601613000 +B1120154531415N00600715EA0161301612000 +B1120184531402N00600701EA0161101611000 +B1120214531391N00600686EA0160901609000 +B1120244531380N00600671EA0160401608000 +B1120274531367N00600655EA0160401606000 +B1120304531354N00600639EA0160001605000 +B1120334531340N00600623EA0159801603000 +B1120364531326N00600610EA0159601601000 +B1120394531312N00600596EA0159101599000 +B1120424531297N00600582EA0158701596000 +B1120464531278N00600562EA0158101593000 +B1120494531263N00600548EA0157601590000 +B1120524531247N00600534EA0157301587000 +B1120554531233N00600521EA0157201584000 +B1120584531220N00600504EA0156601581000 +B1121014531207N00600485EA0156401577000 +B1121044531194N00600467EA0156201574000 +B1121074531179N00600448EA0155701571000 +B1121104531165N00600430EA0155601568000 +B1121134531151N00600412EA0155001565000 +B1121164531136N00600392EA0155001562000 +B1121194531121N00600375EA0154801558000 +B1121224531106N00600357EA0154301555000 +B1121254531090N00600339EA0154201552000 +B1121284531073N00600323EA0154001549000 +B1121314531058N00600304EA0153901546000 +B1121344531043N00600286EA0153601543000 +B1121374531028N00600268EA0153801541000 +B1121404531014N00600253EA0153501538000 +B1121434530998N00600237EA0153501536000 +B1121464530983N00600224EA0153001534000 +B1121494530967N00600212EA0152901531000 +B1121524530952N00600201EA0152501529000 +B1121554530937N00600189EA0152301526000 +B1121584530922N00600177EA0152101524000 +B1122014530908N00600165EA0151601522000 +B1122054530890N00600147EA0151301518000 +B1122084530877N00600132EA0150801515000 +B1122114530864N00600116EA0150601513000 +B1122144530851N00600102EA0150101510000 +B1122174530836N00600087EA0149801507000 +B1122204530821N00600075EA0149401504000 +B1122234530806N00600063EA0149201501000 +B1122264530791N00600052EA0148901498000 +B1122294530776N00600041EA0148501495000 +B1122324530760N00600029EA0148301492000 +B1122354530745N00600018EA0147901489000 +B1122384530730N00600005EA0147601486000 +B1122414530716N00559990EA0147301483000 +B1122444530701N00559976EA0147001480000 +B1122474530687N00559963EA0146701477000 +B1122504530672N00559952EA0146401473000 +B1122534530657N00559939EA0146101470000 +B1122564530643N00559927EA0145801467000 +B1122594530628N00559916EA0145401464000 +B1123024530613N00559905EA0145101461000 +B1123054530598N00559893EA0144801458000 +B1123084530583N00559882EA0144501455000 +B1123114530568N00559871EA0144201452000 +B1123144530553N00559860EA0143901449000 +B1123174530538N00559849EA0143601446000 +B1123204530524N00559838EA0143401443000 +B1123244530504N00559823EA0143001439000 +B1123274530490N00559813EA0142701435000 +B1123304530475N00559801EA0142301432000 +B1123334530461N00559790EA0142101429000 +B1123364530447N00559779EA0141701426000 +B1123394530432N00559768EA0141401423000 +B1123424530419N00559757EA0141001420000 +B1123454530405N00559745EA0140701417000 +B1123484530392N00559734EA0140301413000 +B1123514530378N00559722EA0140001410000 +B1123544530365N00559711EA0139701407000 +B1123574530351N00559700EA0139301404000 +B1124004530337N00559688EA0139001400000 +B1124034530324N00559677EA0138701397000 +B1124064530310N00559667EA0138401394000 +B1124094530296N00559657EA0138201391000 +B1124124530282N00559647EA0137701388000 +B1124154530268N00559637EA0137501384000 +B1124184530253N00559628EA0137101381000 +B1124214530238N00559618EA0136801378000 +B1124244530223N00559608EA0136601375000 +B1124274530208N00559599EA0136201372000 +B1124304530193N00559589EA0136001369000 +B1124334530179N00559579EA0135501366000 +B1124364530164N00559568EA0135301362000 +B1124394530150N00559558EA0135001359000 +B1124434530132N00559544EA0134601355000 +B1124464530118N00559533EA0134301352000 +B1124494530105N00559523EA0133901349000 +B1124524530090N00559512EA0133801345000 +B1124554530076N00559502EA0133401342000 +B1124584530062N00559493EA0133101339000 +B1125014530046N00559485EA0132701336000 +B1125044530031N00559476EA0132501333000 +B1125074530016N00559468EA0132201329000 +B1125104530000N00559461EA0131801326000 +B1125134529984N00559454EA0131501323000 +B1125164529968N00559447EA0131001320000 +B1125194529952N00559440EA0130701317000 +B1125224529937N00559432EA0130401314000 +B1125254529921N00559424EA0130101310000 +B1125284529906N00559416EA0129701307000 +B1125314529890N00559409EA0129401304000 +B1125344529875N00559401EA0129101301000 +B1125374529860N00559394EA0128701298000 +B1125404529844N00559386EA0128401294000 +B1125434529829N00559377EA0128201291000 +B1125464529815N00559368EA0127701288000 +B1125494529800N00559359EA0127501285000 +B1125524529785N00559350EA0127201282000 +B1125554529771N00559341EA0126801279000 +B1125584529757N00559331EA0126601275000 +B1126024529741N00559317EA0125901271000 +B1126054529728N00559304EA0125601268000 +B1126084529717N00559294EA0125201264000 +B1126114529703N00559281EA0124901261000 +B1126144529690N00559269EA0124901257000 +B1126174529677N00559259EA0124601255000 +B1126204529664N00559248EA0124301252000 +B1126234529650N00559238EA0124101249000 +B1126264529636N00559230EA0123701246000 +B1126294529621N00559221EA0123401243000 +B1126324529607N00559212EA0122801241000 +B1126364529587N00559197EA0122601237000 +B1126394529573N00559188EA0122101234000 +B1126424529558N00559177EA0121801231000 +B1126454529544N00559167EA0121401227000 +B1126484529529N00559156EA0121101224000 +B1126514529515N00559145EA0120801221000 +B1126544529500N00559136EA0120501218000 +B1126574529485N00559128EA0120101214000 +B1127004529469N00559120EA0119901211000 +B1127034529452N00559113EA0119601208000 +B1127064529436N00559105EA0119701205000 +B1127094529420N00559097EA0119301202000 +B1127124529404N00559088EA0119101199000 +B1127154529388N00559080EA0118901196000 +B1127184529372N00559070EA0118601194000 +B1127214529356N00559062EA0118601191000 +B1127244529341N00559053EA0118301189000 +B1127274529325N00559043EA0118201186000 +B1127304529310N00559035EA0117801184000 +B1127334529294N00559025EA0117801181000 +B1127364529279N00559016EA0117401179000 +B1127394529263N00559007EA0117301177000 +B1127424529248N00558997EA0117201175000 +B1127454529234N00558987EA0116901172000 +B1127484529219N00558976EA0116701170000 +B1127524529201N00558962EA0116401167000 +B1127554529187N00558950EA0116401165000 +B1127584529174N00558939EA0116301163000 +B1128014529161N00558928EA0116001161000 +B1128044529147N00558916EA0115801158000 +B1128074529135N00558906EA0115901156000 +B1128104529123N00558894EA0115501154000 +B1128134529111N00558882EA0115501152000 +B1128164529099N00558872EA0115101151000 +B1128194529086N00558861EA0115001149000 +B1128224529073N00558851EA0114801148000 +B1128254529061N00558840EA0114501146000 +B1128284529049N00558830EA0114101144000 +B1128314529036N00558820EA0113601142000 +B1128344529022N00558811EA0113201140000 +B1128374529008N00558803EA0112901137000 +B1128404528993N00558796EA0112501134000 +B1128434528978N00558790EA0112001131000 +B1128464528963N00558785EA0111701129000 +B1128494528947N00558780EA0111201126000 +B1128524528930N00558776EA0110901122000 +B1128554528914N00558771EA0110401119000 +B1128584528898N00558764EA0110201116000 +B1129014528882N00558758EA0109701112000 +B1129044528866N00558751EA0109401109000 +B1129084528844N00558744EA0109001104000 +B1129114528828N00558738EA0108601101000 +B1129144528811N00558733EA0108201097000 +B1129174528794N00558727EA0108001094000 +B1129204528777N00558721EA0107701090000 +B1129234528760N00558714EA0107301087000 +B1129264528743N00558708EA0107001083000 +B1129294528726N00558701EA0106601080000 +B1129324528709N00558694EA0106301076000 +B1129354528693N00558688EA0106001073000 +B1129384528676N00558682EA0105801069000 +B1129414528659N00558676EA0105601066000 +B1129444528642N00558669EA0105501063000 +B1129474528625N00558662EA0105101060000 +B1129504528607N00558655EA0104901057000 +B1129534528589N00558648EA0104701054000 +B1129564528573N00558641EA0104801052000 +B1129594528558N00558633EA0104401049000 +B1130024528546N00558620EA0104301047000 +B1130054528533N00558609EA0104001045000 +B1130084528520N00558598EA0104001042000 +B1130114528505N00558590EA0104101041000 +B1130144528491N00558583EA0104001039000 +B1130174528477N00558575EA0104101037000 +B1130204528464N00558567EA0103901036000 +B1130244528447N00558554EA0104001034000 +B1130274528434N00558545EA0103901033000 +B1130304528420N00558535EA0104001032000 +B1130334528407N00558525EA0104001031000 +B1130364528392N00558515EA0104001030000 +B1130394528379N00558505EA0103701029000 +B1130424528364N00558496EA0103201028000 +B1130454528350N00558486EA0102701027000 +B1130484528334N00558477EA0102401025000 +B1130514528318N00558468EA0101901023000 +B1130544528301N00558461EA0101501021000 +B1130574528284N00558453EA0101201018000 +B1131004528266N00558446EA0100901016000 +B1131034528249N00558440EA0100501013000 +B1131064528230N00558434EA0100101010000 +B1131094528212N00558427EA0099601007000 +B1131124528194N00558418EA0099301004000 +B1131154528176N00558408EA0099101001000 +B1131184528160N00558395EA0099000998000 +B1131214528145N00558382EA0098800995000 +B1131244528128N00558371EA0098200992000 +B1131274528111N00558358EA0097800989000 +B1131304528092N00558346EA0097600985000 +B1131334528073N00558333EA0097900983000 +B1131364528058N00558318EA0098400980000 +B1131394528048N00558300EA0099000979000 +B1131424528040N00558282EA0099200978000 +B1131464528042N00558260EA0099500977000 +B1131494528049N00558253EA0099500977000 +B1131524528060N00558257EA0099700978000 +B1131554528067N00558270EA0099800978000 +B1131584528069N00558291EA0099500978000 +B1132014528064N00558315EA0099600978000 +B1132044528052N00558336EA0099800978000 +B1132074528038N00558351EA0100700979000 +B1132104528025N00558362EA0101100980000 +B1132134528009N00558366EA0101400981000 +B1132164527995N00558356EA0102100983000 +B1132194527990N00558339EA0102700985000 +B1132224527995N00558329EA0103200986000 +B1132254528004N00558331EA0103500988000 +B1132284528013N00558347EA0103700991000 +B1132314528014N00558371EA0103800994000 +B1132344528000N00558386EA0103700997000 +B1132374527986N00558375EA0104200999000 +B1132404527979N00558356EA0104801002000 +B1132434527974N00558336EA0105401005000 +B1132464527978N00558318EA0106101008000 +B1132494527986N00558309EA0106501012000 +B1132524527998N00558315EA0106501016000 +B1132554528001N00558335EA0106501020000 +B1132584527992N00558353EA0106301023000 +B1133014527976N00558350EA0106501025000 +B1133044527965N00558338EA0106501028000 +B1133074527956N00558323EA0106201030000 +B1133104527946N00558302EA0107101032000 +B1133134527939N00558284EA0107901034000 +B1133164527938N00558265EA0108401037000 +B1133204527950N00558257EA0109001042000 +B1133234527954N00558272EA0109101045000 +B1133264527946N00558293EA0108701048000 +B1133294527929N00558303EA0109201051000 +B1133324527911N00558297EA0109501054000 +B1133354527897N00558287EA0110701057000 +B1133384527891N00558270EA0110701060000 +B1133414527893N00558250EA0111801064000 +B1133444527903N00558243EA0112201068000 +B1133474527915N00558252EA0112301072000 +B1133504527913N00558273EA0112101076000 +B1133534527898N00558281EA0112301079000 +B1133564527880N00558276EA0113501083000 +B1133594527867N00558266EA0114401087000 +B1134024527858N00558247EA0114801091000 +B1134054527860N00558227EA0115701096000 +B1134084527870N00558221EA0116401100000 +B1134114527877N00558234EA0116501105000 +B1134144527869N00558254EA0117201110000 +B1134174527853N00558258EA0118401115000 +B1134204527837N00558251EA0119101120000 +B1134234527825N00558234EA0119401125000 +B1134264527825N00558214EA0119801131000 +B1134294527836N00558209EA0120601136000 +B1134324527842N00558224EA0121801142000 +B1134354527835N00558240EA0122801149000 +B1134384527820N00558250EA0123601155000 +B1134414527803N00558244EA0123801162000 +B1134444527791N00558224EA0124401168000 +B1134474527787N00558205EA0124801175000 +B1134504527789N00558185EA0125501181000 +B1134534527796N00558173EA0126401187000 +B1134564527807N00558172EA0127301194000 +B1134594527813N00558187EA0128001201000 +B1135034527800N00558207EA0128801210000 +B1135064527786N00558205EA0129401217000 +B1135094527776N00558188EA0130101223000 +B1135124527776N00558168EA0131001230000 +B1135154527784N00558158EA0131801237000 +B1135184527795N00558164EA0132801244000 +B1135214527799N00558182EA0133401252000 +B1135244527790N00558197EA0133901259000 +B1135274527777N00558200EA0134101266000 +B1135304527763N00558190EA0134701272000 +B1135334527756N00558171EA0135501279000 +B1135364527756N00558152EA0136301285000 +B1135394527762N00558139EA0136701292000 +B1135424527772N00558136EA0137401298000 +B1135454527782N00558134EA0138101304000 +B1135484527793N00558143EA0138801311000 +B1135514527793N00558164EA0139201317000 +B1135544527781N00558180EA0139801324000 +B1135574527765N00558181EA0140501330000 +B1136004527755N00558169EA0141001336000 +B1136034527752N00558157EA0140901342000 +B1136064527760N00558139EA0141401348000 +B1136094527772N00558132EA0142201353000 +B1136124527783N00558138EA0142601359000 +B1136154527789N00558157EA0143001364000 +B1136184527784N00558177EA0143401369000 +B1136214527769N00558186EA0143701374000 +B1136244527755N00558180EA0144101379000 +B1136274527750N00558165EA0144301384000 +B1136314527753N00558142EA0145001391000 +B1136344527762N00558136EA0145201396000 +B1136374527773N00558145EA0145601401000 +B1136404527775N00558165EA0146101406000 +B1136434527770N00558185EA0146301411000 +B1136464527755N00558202EA0146801415000 +B1136494527738N00558208EA0147101420000 +B1136524527720N00558205EA0147201424000 +B1136554527702N00558200EA0147601429000 +B1136584527686N00558195EA0147701433000 +B1137014527671N00558187EA0147401436000 +B1137044527654N00558177EA0147301439000 +B1137074527635N00558166EA0147601441000 +B1137104527614N00558159EA0148001444000 +B1137134527594N00558153EA0148401446000 +B1137164527577N00558152EA0147501449000 +B1137194527556N00558148EA0146901450000 +B1137224527536N00558142EA0146901451000 +B1137254527519N00558138EA0146201451000 +B1137284527500N00558135EA0145701451000 +B1137314527481N00558132EA0145201450000 +B1137344527463N00558129EA0144601449000 +B1137374527444N00558127EA0144301447000 +B1137404527426N00558128EA0143601445000 +B1137434527407N00558126EA0143101442000 +B1137464527389N00558125EA0142401439000 +B1137494527370N00558121EA0142101436000 +B1137534527344N00558111EA0141801431000 +B1137564527323N00558102EA0141601428000 +B1137594527302N00558091EA0141401425000 +B1138024527281N00558077EA0140901422000 +B1138054527259N00558068EA0140901418000 +B1138084527237N00558059EA0140601415000 +B1138114527216N00558053EA0140401412000 +B1138144527195N00558051EA0140201409000 +B1138174527174N00558050EA0139401406000 +B1138204527152N00558048EA0138901402000 +B1138234527130N00558043EA0138701400000 +B1138264527110N00558037EA0137901396000 +B1138294527089N00558030EA0136701393000 +B1138324527066N00558023EA0136301388000 +B1138354527044N00558020EA0135701384000 +B1138384527022N00558018EA0135201379000 +B1138414527000N00558013EA0135001374000 +B1138444526979N00558010EA0134301369000 +B1138474526958N00558008EA0134101364000 +B1138504526939N00558004EA0133401360000 +B1138534526918N00558000EA0133401355000 +B1138564526899N00557997EA0133101351000 +B1138594526880N00557994EA0132201347000 +B1139024526861N00557992EA0131701342000 +B1139054526843N00557989EA0131401338000 +B1139084526825N00557981EA0131601334000 +B1139124526804N00557973EA0131401329000 +B1139154526785N00557966EA0131501326000 +B1139184526766N00557962EA0131501323000 +B1139214526749N00557958EA0131601321000 +B1139244526732N00557953EA0131301318000 +B1139274526715N00557947EA0131401316000 +B1139304526699N00557941EA0131101313000 +B1139334526681N00557937EA0131201312000 +B1139364526665N00557934EA0130901310000 +B1139394526646N00557932EA0130801308000 +B1139424526629N00557929EA0130501306000 +B1139454526608N00557924EA0130501304000 +B1139484526588N00557922EA0130301302000 +B1139514526568N00557919EA0129501300000 +B1139544526547N00557915EA0129101298000 +B1139574526526N00557909EA0128401296000 +B1140004526502N00557900EA0128601293000 +B1140034526483N00557888EA0129101291000 +B1140064526465N00557875EA0129101289000 +B1140094526449N00557862EA0129101288000 +B1140124526432N00557852EA0129201287000 +B1140154526415N00557844EA0128801286000 +B1140184526400N00557841EA0127801284000 +B1140214526382N00557837EA0127201282000 +B1140244526363N00557832EA0125901279000 +B1140274526340N00557824EA0125501275000 +B1140304526320N00557816EA0124301272000 +B1140334526300N00557810EA0124201267000 +B1140374526277N00557800EA0124701261000 +B1140404526264N00557796EA0124801258000 +B1140434526250N00557795EA0124901255000 +B1140464526233N00557788EA0125001252000 +B1140494526219N00557780EA0125101250000 +B1140524526204N00557774EA0125201248000 +B1140554526187N00557768EA0126001247000 +B1140584526172N00557763EA0126401247000 +B1141014526155N00557757EA0127201247000 +B1141044526141N00557749EA0127801248000 +B1141074526128N00557750EA0127901249000 +B1141104526119N00557766EA0128501251000 +B1141134526125N00557782EA0128901253000 +B1141164526140N00557785EA0129201255000 +B1141194526153N00557772EA0129501257000 +B1141224526155N00557751EA0130001260000 +B1141254526146N00557735EA0130401263000 +B1141284526133N00557727EA0130901266000 +B1141314526120N00557723EA0131501269000 +B1141344526105N00557718EA0131701273000 +B1141374526089N00557724EA0131701276000 +B1141404526082N00557741EA0131801279000 +B1141434526089N00557755EA0131801282000 +B1141464526102N00557756EA0131901285000 +B1141494526110N00557735EA0132501287000 +B1141524526107N00557713EA0133201290000 +B1141554526094N00557696EA0133401293000 +B1141584526077N00557696EA0133801296000 +B1142014526065N00557707EA0133501299000 +B1142054526067N00557731EA0133401302000 +B1142084526079N00557731EA0133101304000 +B1142114526088N00557713EA0132701305000 +B1142144526082N00557687EA0132501305000 +B1142174526070N00557669EA0132701306000 +B1142204526053N00557664EA0132201307000 +B1142234526036N00557665EA0132001306000 +B1142264526019N00557670EA0131701306000 +B1142294526004N00557677EA0131001305000 +B1142324525984N00557684EA0130501304000 +B1142354525965N00557689EA0130401302000 +B1142384525947N00557691EA0129901300000 +B1142414525929N00557687EA0129801299000 +B1142444525913N00557683EA0129301297000 +B1142474525896N00557677EA0129301294000 +B1142504525881N00557671EA0128801292000 +B1142534525863N00557666EA0128401290000 +B1142564525844N00557660EA0128601287000 +B1142594525826N00557657EA0128301285000 +B1143024525808N00557650EA0128501283000 +B1143054525790N00557644EA0127801281000 +B1143084525768N00557637EA0128101279000 +B1143114525748N00557630EA0128201278000 +B1143144525731N00557625EA0127701276000 +B1143174525710N00557617EA0127901275000 +B1143204525691N00557612EA0128001273000 +B1143234525670N00557607EA0127801272000 +B1143274525643N00557601EA0128301271000 +B1143304525626N00557594EA0128001270000 +B1143334525609N00557589EA0127801269000 +B1143364525592N00557585EA0127701268000 +B1143394525576N00557578EA0127601267000 +B1143424525559N00557573EA0127701266000 +B1143454525542N00557572EA0127301265000 +B1143484525523N00557574EA0126201263000 +B1143514525501N00557576EA0125801261000 +B1143544525483N00557576EA0125001258000 +B1143574525462N00557575EA0124801255000 +B1144004525444N00557572EA0124401252000 +B1144034525426N00557568EA0123601249000 +B1144064525405N00557562EA0123801246000 +B1144094525386N00557555EA0124001243000 +B1144124525366N00557551EA0124301240000 +B1144154525345N00557549EA0124501238000 +B1144184525324N00557547EA0124601237000 +B1144214525301N00557544EA0124701236000 +B1144244525280N00557540EA0124501235000 +B1144274525259N00557537EA0123801234000 +B1144304525238N00557529EA0123601233000 +B1144334525219N00557523EA0122701231000 +B1144364525199N00557514EA0122001229000 +B1144394525177N00557508EA0121401227000 +B1144424525156N00557506EA0120801222000 +B1144464525130N00557503EA0120001219000 +B1144494525111N00557498EA0119401215000 +B1144524525092N00557496EA0118701211000 +B1144554525071N00557495EA0118801207000 +B1144584525052N00557494EA0118601203000 +B1145014525035N00557487EA0118801200000 +B1145044525023N00557481EA0118701197000 +B1145074525006N00557472EA0118101194000 +B1145104524986N00557466EA0118601191000 +B1145134524971N00557458EA0118601189000 +B1145164524956N00557454EA0118401187000 +B1145194524941N00557452EA0117601185000 +B1145224524924N00557448EA0117601183000 +B1145254524908N00557442EA0117101180000 +B1145284524889N00557434EA0116801178000 +B1145314524869N00557426EA0116701176000 +B1145344524851N00557422EA0116401173000 +B1145374524832N00557412EA0116901171000 +B1145404524816N00557397EA0117201169000 +B1145434524803N00557383EA0117601168000 +B1145464524793N00557368EA0117801167000 +B1145494524782N00557353EA0117901166000 +B1145524524768N00557340EA0117901166000 +B1145554524752N00557333EA0117701166000 +B1145584524735N00557328EA0117401165000 +B1146014524720N00557320EA0117301165000 +B1146044524706N00557311EA0117201164000 +B1146074524693N00557305EA0116801163000 +B1146114524674N00557298EA0116801162000 +B1146144524660N00557295EA0116801161000 +B1146174524647N00557290EA0116701160000 +B1146204524635N00557285EA0116601159000 +B1146234524622N00557280EA0116601158000 +B1146264524610N00557274EA0116401157000 +B1146294524598N00557266EA0116201156000 +B1146324524587N00557261EA0116101155000 +B1146354524576N00557260EA0115801154000 +B1146384524564N00557259EA0115501153000 +B1146414524548N00557258EA0115301151000 +B1146444524531N00557255EA0115201149000 +B1146474524513N00557251EA0115401148000 +B1146504524495N00557246EA0115301147000 +B1146534524477N00557240EA0115301146000 +B1146564524458N00557235EA0114901145000 +B1146594524440N00557231EA0114301143000 +B1147024524422N00557230EA0113701141000 +B1147054524400N00557227EA0113201139000 +B1147084524378N00557222EA0112901136000 +B1147114524357N00557218EA0112401133000 +B1147144524335N00557212EA0112501130000 +B1147174524315N00557206EA0112001128000 +B1147204524293N00557203EA0111601125000 +B1147234524270N00557198EA0111101122000 +B1147264524248N00557190EA0111001119000 +B1147304524222N00557174EA0111501115000 +B1147334524207N00557162EA0112501114000 +B1147364524194N00557153EA0113101113000 +B1147394524182N00557158EA0113901113000 +B1147424524182N00557171EA0114501115000 +B1147454524195N00557171EA0115301116000 +B1147484524205N00557151EA0115701119000 +B1147514524198N00557127EA0116301122000 +B1147544524182N00557114EA0117501125000 +B1147574524169N00557112EA0117901129000 +B1148004524162N00557123EA0118801133000 +B1148034524168N00557130EA0119601136000 +B1148064524179N00557121EA0120801142000 +B1148094524183N00557097EA0121701148000 +B1148124524175N00557075EA0122401155000 +B1148154524162N00557068EA0123001161000 +B1148184524154N00557080EA0123301167000 +B1148214524162N00557091EA0124501173000 +B1148244524172N00557088EA0125601180000 +B1148274524180N00557071EA0126001187000 +B1148304524181N00557044EA0127301194000 +B1148334524175N00557023EA0127701201000 +B1148364524162N00557013EA0128401208000 +B1148394524152N00557016EA0128801214000 +B1148424524152N00557030EA0129501220000 +B1148454524163N00557039EA0130501227000 +B1148484524176N00557031EA0131401234000 +B1148514524185N00557012EA0132201241000 +B1148544524183N00556989EA0133001248000 +B1148574524175N00556972EA0133601255000 +B1149014524159N00556968EA0134201265000 +B1149044524156N00556979EA0134801270000 +B1149074524166N00556988EA0135201277000 +B1149104524181N00556981EA0135901284000 +B1149134524190N00556962EA0136601291000 +B1149164524191N00556940EA0137101297000 +B1149194524182N00556923EA0137301302000 +B1149224524168N00556923EA0138201308000 +B1149254524159N00556932EA0138801315000 +B1149284524160N00556946EA0139201321000 +B1149314524173N00556950EA0139901327000 +B1149344524185N00556937EA0140201333000 +B1149374524188N00556915EA0140501339000 +B1149404524178N00556899EA0140601345000 +B1149434524164N00556892EA0140901350000 +B1149464524149N00556890EA0140801355000 +B1149494524130N00556883EA0141201359000 +B1149524524114N00556873EA0141601364000 +B1149554524099N00556865EA0141301368000 +B1149584524083N00556854EA0141201371000 +B1150014524065N00556847EA0140901374000 +B1150044524045N00556841EA0140701376000 +B1150074524025N00556835EA0140801378000 +B1150104524007N00556831EA0140701380000 +B1150134523990N00556827EA0140501382000 +B1150164523972N00556823EA0140501383000 +B1150194523953N00556816EA0140101384000 +B1150234523926N00556800EA0139901385000 +B1150264523908N00556785EA0139801385000 +B1150294523889N00556773EA0139301385000 +B1150324523869N00556759EA0138801384000 +B1150354523850N00556746EA0138401383000 +B1150384523831N00556734EA0137701381000 +B1150414523810N00556722EA0137701379000 +B1150444523791N00556714EA0137401377000 +B1150474523771N00556707EA0136601375000 +B1150504523751N00556701EA0135801372000 +B1150534523731N00556695EA0135301369000 +B1150564523710N00556693EA0134701366000 +B1150594523689N00556693EA0134601364000 +B1151024523668N00556691EA0134301361000 +B1151054523646N00556686EA0134201358000 +B1151084523627N00556678EA0133501355000 +B1151114523607N00556666EA0133301351000 +B1151144523588N00556657EA0132801348000 +B1151174523567N00556646EA0132301344000 +B1151204523545N00556636EA0131701339000 +B1151234523524N00556628EA0131501335000 +B1151264523502N00556620EA0131201331000 +B1151294523481N00556611EA0130701327000 +B1151324523460N00556605EA0130201323000 +B1151354523438N00556600EA0129501318000 +B1151394523408N00556594EA0128801312000 +B1151424523386N00556590EA0128201307000 +B1151454523363N00556584EA0127701302000 +B1151484523341N00556577EA0127201297000 +B1151514523319N00556571EA0126801293000 +B1151544523297N00556564EA0126201288000 +B1151574523276N00556556EA0125801283000 +B1152004523256N00556547EA0125401278000 +B1152034523238N00556537EA0124801274000 +B1152064523220N00556525EA0124501270000 +B1152094523203N00556514EA0124301265000 +B1152124523187N00556505EA0123201261000 +B1152154523167N00556495EA0122401257000 +B1152184523148N00556485EA0122101252000 +B1152214523130N00556474EA0121701247000 +B1152244523113N00556466EA0121501242000 +B1152274523099N00556458EA0120401237000 +B1152304523079N00556447EA0120301232000 +B1152334523061N00556437EA0120701227000 +B1152364523047N00556427EA0120201223000 +B1152394523030N00556413EA0120501219000 +B1152424523015N00556398EA0120801215000 +B1152454523000N00556383EA0120901213000 +B1152484522985N00556367EA0121201211000 +B1152514522971N00556351EA0121501209000 +B1152544522956N00556335EA0122101208000 +B1152574522944N00556319EA0122101208000 +B1153014522926N00556295EA0122201208000 +B1153044522914N00556278EA0122601208000 +B1153074522904N00556262EA0122601208000 +B1153104522891N00556246EA0122601209000 +B1153134522878N00556233EA0122501209000 +B1153164522864N00556224EA0122201209000 +B1153194522847N00556215EA0122301209000 +B1153224522830N00556204EA0122701209000 +B1153254522813N00556194EA0123101210000 +B1153284522800N00556186EA0123201211000 +B1153314522787N00556175EA0122701212000 +B1153344522773N00556163EA0122601212000 +B1153374522757N00556154EA0121601212000 +B1153404522733N00556143EA0121201211000 +B1153434522707N00556133EA0121001209000 +B1153464522682N00556124EA0120801208000 +B1153494522658N00556113EA0121001206000 +B1153524522636N00556105EA0120701205000 +B1153554522614N00556096EA0120401203000 +B1153584522592N00556088EA0119701201000 +B1154014522571N00556080EA0119201199000 +B1154044522549N00556075EA0118501196000 +B1154074522527N00556068EA0117901193000 +B1154104522505N00556061EA0117501189000 +B1154134522484N00556055EA0116901185000 +B1154174522456N00556048EA0116301180000 +B1154204522436N00556040EA0115901176000 +B1154234522415N00556032EA0115501172000 +B1154264522394N00556025EA0115101168000 +B1154294522373N00556019EA0114601163000 +B1154324522352N00556012EA0114301159000 +B1154354522331N00556005EA0113801155000 +B1154384522309N00555995EA0113401151000 +B1154414522288N00555987EA0113101146000 +B1154444522267N00555979EA0112301142000 +B1154474522244N00555972EA0111901137000 +B1154504522223N00555966EA0111201133000 +B1154534522202N00555959EA0110801128000 +B1154564522181N00555951EA0110501123000 +B1154594522162N00555940EA0109901119000 +B1155024522143N00555930EA0109101114000 +B1155054522125N00555920EA0108801108000 +B1155084522106N00555912EA0108401103000 +B1155114522086N00555904EA0108101098000 +B1155144522065N00555897EA0107801094000 +B1155174522045N00555890EA0107801089000 +B1155204522026N00555884EA0107301085000 +B1155234522007N00555875EA0108201082000 +B1155264521992N00555866EA0109001079000 +B1155294521977N00555857EA0110301078000 +B1155324521966N00555845EA0111301079000 +B1155364521950N00555833EA0112001081000 +B1155394521936N00555824EA0112801083000 +B1155424521923N00555811EA0113101086000 +B1155454521910N00555796EA0113401089000 +B1155484521897N00555783EA0114001092000 +B1155514521885N00555767EA0114401095000 +B1155544521872N00555753EA0115301099000 +B1155574521860N00555740EA0115501103000 +B1156004521846N00555724EA0115901107000 +B1156034521833N00555710EA0116301111000 +B1156064521820N00555698EA0115901114000 +B1156094521803N00555684EA0115301117000 +B1156124521786N00555668EA0115101119000 +B1156154521770N00555651EA0115201120000 +B1156184521755N00555636EA0114901122000 +B1156214521740N00555620EA0115001122000 +B1156244521725N00555605EA0115201123000 +B1156274521710N00555588EA0115601124000 +B1156304521697N00555574EA0116101126000 +B1156334521683N00555562EA0116001127000 +B1156364521667N00555550EA0116301129000 +B1156394521651N00555537EA0116801131000 +B1156424521638N00555526EA0116701132000 +B1156454521622N00555515EA0116201134000 +B1156484521607N00555506EA0116801135000 +B1156514521596N00555501EA0116201137000 +B1156544521579N00555495EA0116001137000 +B1156574521561N00555489EA0115701138000 +B1157004521543N00555479EA0115101138000 +B1157044521518N00555463EA0115001138000 +B1157074521501N00555452EA0116101138000 +B1157104521486N00555439EA0116901139000 +B1157134521470N00555428EA0117601141000 +B1157164521454N00555419EA0118801143000 +B1157194521442N00555414EA0118701146000 +B1157224521426N00555408EA0118401148000 +B1157254521410N00555402EA0118901150000 +B1157284521395N00555396EA0118601153000 +B1157314521378N00555387EA0118801155000 +B1157344521364N00555377EA0118801157000 +B1157374521347N00555367EA0118901159000 +B1157404521332N00555356EA0119101161000 +B1157434521318N00555346EA0118501162000 +B1157464521303N00555333EA0118601164000 +B1157494521289N00555323EA0118301164000 +B1157524521273N00555318EA0117901165000 +B1157554521256N00555317EA0117501165000 +B1157584521238N00555317EA0116901164000 +B1158014521219N00555315EA0116101163000 +B1158044521201N00555311EA0115101161000 +B1158074521182N00555307EA0114901158000 +B1158104521167N00555305EA0114001155000 +B1158134521149N00555301EA0114101152000 +B1158164521136N00555299EA0113801149000 +B1158194521121N00555295EA0114001146000 +B1158224521108N00555289EA0114101144000 +B1158254521093N00555289EA0115001142000 +B1158284521079N00555286EA0115401141000 +B1158324521056N00555281EA0115801140000 +B1158354521041N00555278EA0116201140000 +B1158384521026N00555275EA0116301140000 +B1158414521014N00555269EA0116201141000 +B1158444520999N00555264EA0116201141000 +B1158474520984N00555261EA0116601142000 +B1158504520971N00555256EA0116701142000 +B1158534520956N00555251EA0117001143000 +B1158564520941N00555248EA0117101144000 +B1158594520928N00555243EA0117201145000 +B1159024520913N00555239EA0117801146000 +B1159054520900N00555236EA0118701147000 +B1159084520885N00555231EA0119301150000 +B1159114520871N00555229EA0119801152000 +B1159144520857N00555226EA0120101155000 +B1159174520843N00555223EA0120101158000 +B1159204520827N00555221EA0120201161000 +B1159234520813N00555218EA0119801164000 +B1159264520799N00555217EA0119601167000 +B1159294520786N00555217EA0119201168000 +B1159324520772N00555212EA0119601170000 +B1159354520760N00555208EA0119701172000 +B1159384520747N00555205EA0119701173000 +B1159414520734N00555204EA0119801175000 +B1159444520721N00555202EA0119601176000 +B1159474520708N00555202EA0119201177000 +B1159504520693N00555200EA0118401178000 +B1159544520668N00555188EA0118701177000 +B1159574520652N00555179EA0118301176000 +B1200004520634N00555170EA0117801175000 +B1200034520616N00555162EA0117001174000 +B1200064520596N00555157EA0116101171000 +B1200094520576N00555151EA0115301168000 +B1200124520555N00555143EA0114701164000 +B1200154520538N00555132EA0114701161000 +B1200184520522N00555121EA0115101157000 +B1200214520508N00555116EA0115501155000 +B1200244520492N00555109EA0115201153000 +B1200274520476N00555097EA0114901151000 +B1200304520460N00555087EA0115001149000 +B1200334520444N00555080EA0114801147000 +B1200364520427N00555075EA0114401146000 +B1200394520407N00555070EA0114901144000 +B1200424520391N00555063EA0115501143000 +B1200454520376N00555057EA0116101143000 +B1200484520363N00555046EA0116901143000 +B1200514520351N00555032EA0117201144000 +B1200544520338N00555016EA0117701145000 +B1200574520325N00555009EA0117501147000 +B1201004520312N00555007EA0117501148000 +B1201034520297N00554996EA0117601149000 +B1201064520283N00554978EA0118301151000 +B1201094520271N00554964EA0118201153000 +B1201124520258N00554948EA0118101155000 +B1201164520241N00554932EA0118001157000 +B1201194520228N00554922EA0118001159000 +B1201224520217N00554912EA0116801159000 +B1201254520204N00554905EA0116401159000 +B1201284520192N00554895EA0115101159000 +B1201314520176N00554889EA0114001157000 +B1201344520157N00554886EA0112701154000 +B1201374520138N00554884EA0112201150000 +B1201404520122N00554877EA0111101146000 +B1201434520100N00554874EA0110301141000 +B1201464520080N00554874EA0109701136000 +B1201494520058N00554877EA0108701130000 +B1201524520034N00554881EA0108201124000 +B1201554520012N00554884EA0107701119000 +B1201584519989N00554884EA0107501114000 +B1202014519968N00554882EA0107301108000 +B1202044519947N00554878EA0107001103000 +B1202074519925N00554874EA0106601098000 +B1202104519904N00554872EA0106001093000 +B1202134519884N00554867EA0105301089000 +B1202164519864N00554862EA0104401084000 +B1202194519842N00554857EA0103801078000 +B1202224519819N00554853EA0103301073000 +B1202254519796N00554847EA0102801067000 +B1202284519776N00554842EA0102101062000 +B1202324519752N00554834EA0102201054000 +B1202354519741N00554826EA0102201049000 +B1202384519728N00554817EA0102801045000 +B1202414519714N00554811EA0103501041000 +B1202444519701N00554806EA0104001039000 +B1202474519687N00554800EA0103901036000 +B1202504519671N00554795EA0104201035000 +B1202534519658N00554790EA0104201034000 +B1202564519644N00554783EA0104001033000 +B1202594519630N00554776EA0103401033000 +B1203024519614N00554764EA0102501031000 +B1203054519598N00554750EA0102501029000 +B1203084519581N00554739EA0102401027000 +B1203114519565N00554729EA0103301026000 +B1203144519554N00554718EA0103701025000 +B1203174519542N00554703EA0103601025000 +B1203204519531N00554688EA0104501025000 +B1203234519522N00554675EA0104801025000 +B1203264519510N00554660EA0105501026000 +B1203294519499N00554647EA0105901028000 +B1203324519488N00554638EA0106201030000 +B1203354519477N00554630EA0106901032000 +B1203384519466N00554619EA0107001034000 +B1203414519453N00554609EA0107301037000 +B1203444519439N00554601EA0107901039000 +B1203474519425N00554596EA0107901042000 +B1203504519412N00554589EA0107601044000 +B1203534519396N00554581EA0107601046000 +B1203564519381N00554575EA0106901048000 +B1203594519363N00554566EA0106801049000 +B1204034519339N00554556EA0106201050000 +B1204064519323N00554546EA0106001050000 +B1204094519307N00554537EA0105101049000 +B1204124519286N00554532EA0104601048000 +B1204154519268N00554527EA0103901047000 +B1204184519248N00554524EA0103101045000 +B1204214519229N00554522EA0102301042000 +B1204244519208N00554517EA0101401039000 +B1204274519185N00554512EA0101001035000 +B1204304519164N00554508EA0101301032000 +B1204334519146N00554503EA0101701029000 +B1204364519131N00554496EA0102101027000 +B1204394519118N00554485EA0101701025000 +B1204424519104N00554472EA0101101022000 +B1204454519091N00554459EA0101201020000 +B1204484519079N00554445EA0101101018000 +B1204514519066N00554432EA0100701015000 +B1204544519053N00554419EA0100301013000 +B1204574519040N00554404EA0100301010000 +B1205004519025N00554389EA0101501008000 +B1205034519017N00554374EA0102101007000 +B1205064519007N00554356EA0103501007000 +B1205094518998N00554339EA0104601008000 +B1205124518988N00554320EA0105301009000 +B1205154518987N00554292EA0105301011000 +B1205184519001N00554276EA0105801014000 +B1205214519016N00554280EA0106001017000 +B1205244519023N00554295EA0107201020000 +B1205274519023N00554311EA0108201023000 +B1205314519007N00554324EA0109501029000 +B1205344518993N00554319EA0111001034000 +B1205374518983N00554302EA0111501040000 +B1205404518983N00554276EA0111501046000 +B1205434518998N00554258EA0111501051000 +B1205464519011N00554254EA0112001056000 +B1205494519019N00554268EA0112701061000 +B1205524519018N00554284EA0113801067000 +B1205554519007N00554290EA0114701073000 +B1205584518999N00554274EA0115501079000 +B1206014519004N00554249EA0115801085000 +B1206044519019N00554235EA0116301091000 +B1206074519032N00554237EA0116801097000 +B1206104519039N00554255EA0117701103000 +B1206134519033N00554272EA0119201109000 +B1206164519023N00554274EA0120101117000 +B1206194519016N00554257EA0120701124000 +B1206224519023N00554234EA0121101131000 +B1206254519039N00554223EA0122001138000 +B1206284519051N00554227EA0122401145000 +B1206314519062N00554242EA0123201152000 +B1206344519063N00554261EA0123601159000 +B1206374519051N00554271EA0123901165000 +B1206404519035N00554274EA0125201172000 +B1206434519022N00554268EA0126201179000 +B1206464519018N00554248EA0127001186000 +B1206494519029N00554232EA0128001193000 +B1206524519043N00554230EA0129001201000 +B1206554519053N00554242EA0129701209000 +B1206584519050N00554260EA0130201216000 +B1207014519036N00554264EA0131001224000 +B1207044519023N00554257EA0131801231000 +B1207074519020N00554239EA0132001239000 +B1207104519030N00554218EA0132701246000 +B1207134519047N00554215EA0133901253000 +B1207164519057N00554225EA0134001261000 +B1207194519062N00554247EA0134101268000 +B1207234519047N00554264EA0134701276000 +B1207264519035N00554264EA0135401283000 +B1207294519022N00554256EA0136001289000 +B1207324519013N00554248EA0136301295000 +B1207354519003N00554234EA0135801301000 +B1207384518992N00554218EA0135601307000 +B1207414518980N00554193EA0135101311000 +B1207444518966N00554163EA0135401315000 +B1207474518955N00554139EA0135401318000 +B1207504518944N00554112EA0134301320000 +B1207534518931N00554083EA0134201322000 +B1207564518919N00554057EA0133801323000 +B1207594518907N00554029EA0133601323000 +B1208024518896N00554002EA0133701323000 +B1208054518884N00553975EA0133401323000 +B1208084518874N00553945EA0133501323000 +B1208114518864N00553914EA0133901323000 +B1208144518855N00553884EA0135601324000 +B1208174518849N00553864EA0136901327000 +B1208204518841N00553848EA0137901331000 +B1208234518829N00553850EA0138701335000 +B1208264518828N00553866EA0139301339000 +B1208294518839N00553875EA0140001344000 +B1208324518848N00553865EA0141101349000 +B1208354518853N00553848EA0141901354000 +B1208384518848N00553828EA0143001360000 +B1208414518836N00553821EA0143701367000 +B1208444518827N00553828EA0144101374000 +B1208474518824N00553845EA0144501380000 +B1208504518834N00553856EA0144901386000 +B1208544518848N00553845EA0145701394000 +B1208574518849N00553827EA0146301401000 +B1209004518844N00553806EA0146701407000 +B1209034518833N00553795EA0146901413000 +B1209064518818N00553788EA0146701419000 +B1209094518804N00553772EA0146701424000 +B1209124518791N00553754EA0146201428000 +B1209154518777N00553731EA0145501431000 +B1209184518761N00553707EA0145301433000 +B1209214518745N00553684EA0144701434000 +B1209244518729N00553660EA0144201435000 +B1209274518713N00553637EA0144001435000 +B1209304518701N00553615EA0143901435000 +B1209334518689N00553593EA0143401434000 +B1209364518674N00553569EA0143001434000 +B1209394518658N00553546EA0142201432000 +B1209424518641N00553523EA0141801430000 +B1209454518625N00553501EA0141101428000 +B1209484518607N00553481EA0140301425000 +B1209514518588N00553462EA0139701421000 +B1209544518570N00553445EA0139201418000 +B1209574518552N00553428EA0138701414000 +B1210004518534N00553411EA0138501410000 +B1210034518517N00553395EA0138201406000 +B1210064518499N00553380EA0137701402000 +B1210094518480N00553364EA0137301398000 +B1210134518455N00553344EA0136901393000 +B1210164518439N00553330EA0136601390000 +B1210194518424N00553314EA0135901386000 +B1210224518407N00553299EA0135301382000 +B1210254518390N00553285EA0134801377000 +B1210284518375N00553272EA0134101373000 +B1210314518359N00553257EA0133301368000 +B1210344518343N00553242EA0132501363000 +B1210374518326N00553228EA0131701357000 +B1210404518310N00553214EA0130701352000 +B1210434518295N00553198EA0129801345000 +B1210464518280N00553180EA0129601339000 +B1210494518266N00553160EA0129101333000 +B1210524518251N00553136EA0129301327000 +B1210554518241N00553113EA0131001322000 +B1210584518236N00553100EA0131801320000 +B1211014518230N00553089EA0132901318000 +B1211044518223N00553083EA0133901318000 +B1211074518215N00553088EA0135301320000 +B1211104518215N00553105EA0136301322000 +B1211134518230N00553117EA0136601324000 +B1211164518246N00553105EA0137301327000 +B1211194518256N00553089EA0138201331000 +B1211224518259N00553068EA0139201335000 +B1211254518259N00553050EA0140501340000 +B1211284518255N00553045EA0140801343000 +B1211314518252N00553060EA0141401349000 +B1211344518265N00553077EA0142601355000 +B1211374518280N00553078EA0143201362000 +B1211404518293N00553064EA0144101369000 +B1211434518298N00553042EA0145101376000 +B1211464518300N00553022EA0145501383000 +B1211504518290N00553008EA0145401392000 +B1211534518284N00553020EA0145201397000 +B1211564518291N00553043EA0145301402000 +B1211594518310N00553051EA0146101407000 +B1212024518326N00553043EA0146901412000 +B1212054518336N00553020EA0147101418000 +B1212084518338N00553004EA0147501422000 +B1212114518333N00552991EA0147201426000 +B1212144518324N00552977EA0147301431000 +B1212174518312N00552965EA0147001435000 +B1212204518300N00552949EA0147401438000 +B1212234518289N00552931EA0147601442000 +B1212264518278N00552913EA0147601444000 +B1212294518268N00552896EA0147601447000 +B1212324518259N00552876EA0147401449000 +B1212354518248N00552855EA0147301451000 +B1212384518238N00552833EA0146601452000 +B1212414518229N00552808EA0146301453000 +B1212444518224N00552785EA0146301453000 +B1212474518220N00552763EA0145901453000 +B1212504518218N00552738EA0146201453000 +B1212534518215N00552716EA0145701453000 +B1212564518209N00552692EA0145101452000 +B1212594518202N00552670EA0145401452000 +B1213024518193N00552652EA0145101451000 +B1213054518183N00552633EA0145101450000 +B1213084518173N00552615EA0144901449000 +B1213114518161N00552596EA0144101448000 +B1213144518147N00552578EA0143701446000 +B1213184518128N00552558EA0142901443000 +B1213214518113N00552542EA0142201441000 +B1213244518098N00552527EA0141701437000 +B1213274518082N00552513EA0141001434000 +B1213304518066N00552497EA0140801430000 +B1213334518052N00552484EA0140401427000 +B1213364518039N00552469EA0139801423000 +B1213394518028N00552449EA0139401419000 +B1213424518019N00552430EA0138801415000 +B1213454518009N00552409EA0138201410000 +B1213484517999N00552387EA0137801406000 +B1213514517990N00552361EA0137901402000 +B1213544517979N00552339EA0137701398000 +B1213574517965N00552320EA0137001394000 +B1214004517950N00552300EA0136801391000 +B1214034517936N00552283EA0135801386000 +B1214064517921N00552264EA0135401382000 +B1214094517906N00552249EA0134601377000 +B1214124517889N00552235EA0134101373000 +B1214154517874N00552222EA0133601368000 +B1214184517859N00552208EA0132601362000 +B1214214517843N00552192EA0132501357000 +B1214244517827N00552181EA0131701352000 +B1214274517811N00552170EA0131001347000 +B1214304517793N00552158EA0130501341000 +B1214334517777N00552148EA0129801336000 +B1214364517762N00552135EA0129101330000 +B1214404517740N00552117EA0128901323000 +B1214434517723N00552104EA0128601317000 +B1214464517706N00552090EA0128401313000 +B1214494517690N00552078EA0128001308000 +B1214524517675N00552067EA0127101304000 +B1214554517657N00552054EA0126401298000 +B1214584517643N00552041EA0126301293000 +B1215014517627N00552027EA0125501288000 +B1215044517612N00552013EA0125401283000 +B1215074517599N00551999EA0124301278000 +B1215104517584N00551982EA0124401273000 +B1215134517570N00551969EA0123901268000 +B1215164517555N00551953EA0123801263000 +B1215194517542N00551937EA0123701259000 +B1215224517528N00551920EA0123301255000 +B1215254517514N00551903EA0123501251000 +B1215284517502N00551888EA0123401248000 +B1215314517487N00551872EA0123601245000 +B1215344517475N00551856EA0124001243000 +B1215374517466N00551841EA0124001241000 +B1215404517454N00551825EA0124301240000 +B1215434517444N00551811EA0124501239000 +B1215464517433N00551795EA0125301239000 +B1215494517424N00551781EA0126301239000 +B1215524517418N00551765EA0126501240000 +B1215554517407N00551752EA0127001242000 +B1215584517397N00551751EA0126601244000 +B1216024517379N00551749EA0126201246000 +B1216054517368N00551743EA0126301247000 +B1216084517355N00551733EA0126201247000 +B1216114517347N00551722EA0126601248000 +B1216144517338N00551711EA0127001249000 +B1216174517332N00551697EA0128101251000 +B1216204517328N00551681EA0128501253000 +B1216234517319N00551669EA0129101256000 +B1216264517309N00551666EA0129201259000 +B1216294517301N00551656EA0128901262000 +B1216324517293N00551642EA0128801264000 +B1216354517284N00551627EA0129501266000 +B1216384517276N00551616EA0129701268000 +B1216414517268N00551602EA0129801270000 +B1216444517260N00551588EA0130301273000 +B1216474517254N00551574EA0129901275000 +B1216504517244N00551553EA0130901277000 +B1216534517239N00551532EA0132301280000 +B1216564517235N00551514EA0133201284000 +B1216594517227N00551518EA0133601288000 +B1217024517233N00551538EA0134901292000 +B1217054517247N00551550EA0136401297000 +B1217084517261N00551551EA0137101304000 +B1217114517274N00551535EA0138201310000 +B1217144517278N00551512EA0139601317000 +B1217174517272N00551500EA0140201324000 +B1217204517267N00551514EA0141201330000 +B1217234517276N00551533EA0142601339000 +B1217264517290N00551536EA0143601347000 +B1217304517310N00551521EA0144901359000 +B1217334517317N00551503EA0145601368000 +B1217364517318N00551480EA0146801378000 +B1217394517310N00551476EA0147501384000 +B1217424517304N00551492EA0148101393000 +B1217454517312N00551513EA0149001402000 +B1217484517329N00551521EA0150101411000 +B1217514517344N00551514EA0151001421000 +B1217544517351N00551496EA0151501430000 +B1217574517348N00551480EA0152401438000 +B1218004517340N00551485EA0153401444000 +B1218034517339N00551503EA0153901454000 +B1218064517350N00551520EA0154801464000 +B1218094517366N00551514EA0155501472000 +B1218124517377N00551497EA0156101481000 +B1218154517381N00551479EA0156601489000 +B1218184517376N00551465EA0156701497000 +B1218214517363N00551470EA0157301504000 +B1218244517362N00551490EA0158101511000 +B1218274517373N00551507EA0158601517000 +B1218304517392N00551509EA0158901524000 +B1218334517408N00551495EA0159501530000 +B1218364517414N00551477EA0159801536000 +B1218394517412N00551459EA0160001542000 +B1218424517405N00551447EA0159201546000 +B1218454517394N00551425EA0158601550000 +B1218484517382N00551398EA0158501553000 +B1218514517371N00551371EA0158301556000 +B1218544517357N00551346EA0157801558000 +B1218574517341N00551320EA0157401559000 +B1219014517319N00551291EA0157101560000 +B1219044517304N00551268EA0157101560000 +B1219074517290N00551245EA0156701560000 +B1219104517273N00551220EA0156501560000 +B1219134517256N00551197EA0156801559000 +B1219164517240N00551177EA0156901559000 +B1219194517224N00551155EA0156601559000 +B1219224517209N00551132EA0156401559000 +B1219254517197N00551109EA0155701558000 +B1219284517184N00551084EA0154701556000 +B1219314517169N00551061EA0153901554000 +B1219344517153N00551039EA0152901550000 +B1219374517139N00551017EA0152001546000 +B1219404517124N00550999EA0151101542000 +B1219434517112N00550979EA0150301537000 +B1219464517102N00550959EA0149401531000 +B1219494517089N00550940EA0148901526000 +B1219524517077N00550921EA0147801520000 +B1219554517063N00550902EA0146401513000 +B1219584517048N00550881EA0145701506000 +B1220014517034N00550863EA0144801498000 +B1220044517021N00550843EA0143601491000 +B1220074517009N00550823EA0143301483000 +B1220104516998N00550801EA0143101476000 +B1220134516990N00550778EA0142501469000 +B1220164516978N00550756EA0142301462000 +B1220194516967N00550733EA0142401456000 +B1220224516958N00550709EA0142301451000 +B1220264516949N00550673EA0142201444000 +B1220294516939N00550647EA0142201440000 +B1220324516929N00550620EA0142401437000 +B1220354516923N00550594EA0143601434000 +B1220384516921N00550578EA0144201433000 +B1220414516918N00550562EA0144201432000 +B1220444516914N00550548EA0144401431000 +B1220474516906N00550535EA0144201431000 +B1220504516898N00550518EA0144301431000 +B1220534516890N00550503EA0143901431000 +B1220564516880N00550485EA0143601430000 +B1220594516871N00550462EA0143701429000 +B1221024516869N00550435EA0144401429000 +B1221054516871N00550412EA0144801429000 +B1221084516866N00550389EA0145901430000 +B1221114516861N00550368EA0147001433000 +B1221144516858N00550349EA0148001435000 +B1221174516856N00550331EA0148701439000 +B1221204516853N00550314EA0148501443000 +B1221234516850N00550291EA0148801446000 +B1221264516846N00550269EA0148801450000 +B1221294516840N00550248EA0149001453000 +B1221324516833N00550227EA0149301456000 +B1221354516827N00550208EA0149301459000 +B1221384516819N00550190EA0149801462000 +B1221414516812N00550175EA0149901465000 +B1221444516805N00550160EA0149901468000 +B1221484516795N00550137EA0149501471000 +B1221514516787N00550116EA0148601472000 +B1221544516777N00550090EA0147901472000 +B1221574516773N00550068EA0148201472000 +B1222004516771N00550050EA0147401472000 +B1222034516764N00550029EA0146801470000 +B1222064516756N00550004EA0146301469000 +B1222094516745N00549979EA0146201467000 +B1222124516733N00549956EA0145601465000 +B1222154516722N00549930EA0145301463000 +B1222184516711N00549908EA0145501460000 +B1222214516702N00549890EA0144901458000 +B1222244516694N00549867EA0143801455000 +B1222274516686N00549844EA0143501452000 +B1222304516679N00549825EA0142301448000 +B1222334516670N00549803EA0141401444000 +B1222364516660N00549779EA0140801439000 +B1222394516650N00549755EA0140201434000 +B1222424516639N00549730EA0139401429000 +B1222454516628N00549705EA0138901423000 +B1222484516618N00549680EA0138201417000 +B1222514516608N00549652EA0137801412000 +B1222544516598N00549624EA0137601406000 +B1222574516589N00549597EA0137901401000 +B1223004516579N00549575EA0137701397000 +B1223034516569N00549550EA0137101393000 +B1223064516558N00549523EA0136801389000 +B1223104516545N00549488EA0136601384000 +B1223134516536N00549460EA0136401380000 +B1223164516527N00549431EA0136501377000 +B1223194516519N00549405EA0136701374000 +B1223224516509N00549381EA0136201372000 +B1223254516496N00549353EA0135601369000 +B1223284516484N00549328EA0136001366000 +B1223314516474N00549306EA0135801364000 +B1223344516460N00549283EA0135701361000 +B1223374516450N00549261EA0135601359000 +B1223404516439N00549238EA0135401357000 +B1223434516430N00549215EA0136001355000 +B1223464516425N00549200EA0136301354000 +B1223494516418N00549189EA0135901353000 +B1223524516408N00549176EA0135401352000 +B1223554516393N00549162EA0136001351000 +B1223584516379N00549154EA0137301351000 +B1224014516368N00549145EA0138001352000 +B1224044516362N00549129EA0139101354000 +B1224074516358N00549112EA0140001357000 +B1224104516351N00549095EA0140201361000 +B1224134516341N00549077EA0140001364000 +B1224164516330N00549059EA0140201367000 +B1224194516320N00549044EA0139901370000 +B1224224516308N00549027EA0140301372000 +B1224254516298N00549014EA0140001375000 +B1224294516282N00548994EA0139801377000 +B1224324516271N00548979EA0139701378000 +B1224354516258N00548965EA0139401379000 +B1224384516245N00548951EA0138801379000 +B1224414516231N00548938EA0138501379000 +B1224444516220N00548926EA0138801378000 +B1224474516213N00548912EA0138901378000 +B1224504516208N00548896EA0139601379000 +B1224534516202N00548883EA0139801379000 +B1224564516193N00548866EA0140601380000 +B1224594516188N00548852EA0141801382000 +B1225024516181N00548837EA0142401385000 +B1225054516173N00548820EA0143301389000 +B1225084516165N00548803EA0143901393000 +B1225114516155N00548785EA0144501397000 +B1225144516145N00548770EA0144601402000 +B1225174516135N00548754EA0144101405000 +B1225204516125N00548734EA0144001408000 +B1225234516117N00548717EA0143201411000 +B1225264516104N00548696EA0142601412000 +B1225294516095N00548677EA0142101412000 +B1225324516084N00548660EA0141601412000 +B1225354516071N00548644EA0141201411000 +B1225384516059N00548626EA0141001410000 +B1225414516047N00548611EA0140501409000 +B1225444516035N00548595EA0139901407000 +B1225474516021N00548578EA0139401405000 +B1225504516007N00548557EA0139901402000 +B1225534516001N00548539EA0140801401000 +B1225564515997N00548530EA0140001400000 +B1226004515982N00548511EA0139601398000 +B1226034515969N00548496EA0139001396000 +B1226064515955N00548479EA0138501393000 +B1226094515942N00548461EA0138301391000 +B1226124515930N00548443EA0138101388000 +B1226154515918N00548426EA0138001386000 +B1226184515906N00548409EA0138001384000 +B1226214515895N00548395EA0138001383000 +B1226244515883N00548381EA0137801381000 +B1226274515870N00548367EA0137601379000 +B1226304515859N00548350EA0138101378000 +B1226334515849N00548334EA0138501377000 +B1226364515840N00548320EA0138901377000 +B1226394515829N00548304EA0139101377000 +B1226424515817N00548289EA0139801378000 +B1226454515804N00548274EA0140001379000 +B1226484515791N00548259EA0139901380000 +B1226514515776N00548242EA0139701381000 +B1226544515759N00548224EA0139801381000 +B1226574515744N00548208EA0139701382000 +B1227004515728N00548190EA0139401383000 +B1227034515712N00548174EA0139701383000 +B1227064515699N00548159EA0139701383000 +B1227094515685N00548146EA0139501383000 +B1227124515668N00548134EA0139001383000 +B1227154515653N00548121EA0139401383000 +B1227184515640N00548106EA0140101383000 +B1227224515627N00548091EA0139801384000 +B1227254515615N00548076EA0139001384000 +B1227284515605N00548059EA0138201383000 +B1227314515592N00548048EA0138601382000 +B1227344515584N00548041EA0138101381000 +B1227374515572N00548027EA0137201379000 +B1227404515560N00548012EA0137001377000 +B1227434515547N00547997EA0136501375000 +B1227464515534N00547979EA0136301373000 +B1227494515521N00547962EA0135901370000 +B1227524515507N00547943EA0135701368000 +B1227554515493N00547924EA0135201365000 +B1227584515478N00547905EA0135101362000 +B1228014515463N00547886EA0134901360000 +B1228044515448N00547866EA0135001357000 +B1228074515433N00547850EA0134701355000 +B1228104515417N00547831EA0135001353000 +B1228134515407N00547812EA0135901352000 +B1228164515400N00547799EA0136201351000 +B1228194515390N00547786EA0136001351000 +B1228224515379N00547771EA0135801350000 +B1228254515367N00547758EA0136101350000 +B1228284515358N00547746EA0135701350000 +B1228314515346N00547730EA0135101349000 +B1228344515335N00547716EA0134701348000 +B1228374515322N00547699EA0134701347000 +B1228414515306N00547681EA0134901346000 +B1228444515295N00547669EA0134501345000 +B1228474515283N00547656EA0134701343000 +B1228504515272N00547644EA0135001343000 +B1228534515261N00547633EA0135201342000 +B1228564515251N00547622EA0135101342000 +B1228594515240N00547610EA0136001342000 +B1229024515230N00547598EA0136201343000 +B1229054515218N00547586EA0137301344000 +B1229084515209N00547576EA0138201346000 +B1229114515198N00547569EA0138601349000 +B1229144515184N00547559EA0139701352000 +B1229174515172N00547551EA0140501356000 +B1229204515162N00547540EA0141501361000 +B1229234515151N00547528EA0141701365000 +B1229264515138N00547511EA0141901370000 +B1229294515127N00547494EA0142301374000 +B1229324515116N00547477EA0142401379000 +B1229354515107N00547460EA0142701383000 +B1229384515098N00547445EA0142801386000 +B1229414515087N00547426EA0143501390000 +B1229444515078N00547413EA0143701394000 +B1229474515068N00547401EA0143201397000 +B1229504515057N00547384EA0143301400000 +B1229534515048N00547368EA0144601403000 +B1229564515044N00547356EA0145301407000 +B1229594515036N00547342EA0146201411000 +B1230024515027N00547328EA0147001415000 +B1230054515018N00547315EA0148101421000 +B1230084515012N00547306EA0149101425000 +B1230114515004N00547298EA0149501429000 +B1230144514995N00547290EA0149501437000 +B1230184514978N00547274EA0149001444000 +B1230214514965N00547260EA0149201449000 +B1230244514957N00547249EA0148701453000 +B1230274514944N00547233EA0148201455000 +B1230304514933N00547219EA0147801458000 +B1230334514919N00547203EA0146801459000 +B1230364514904N00547185EA0146601459000 +B1230394514891N00547167EA0146601459000 +B1230424514880N00547150EA0146401458000 +B1230454514869N00547134EA0146901458000 +B1230484514861N00547122EA0146901459000 +B1230514514850N00547107EA0146701459000 +B1230544514838N00547093EA0146801459000 +B1230574514827N00547077EA0146701459000 +B1231004514814N00547058EA0147201459000 +B1231034514802N00547042EA0147201459000 +B1231064514789N00547023EA0147501460000 +B1231094514773N00547005EA0148201460000 +B1231124514759N00546990EA0149401462000 +B1231154514747N00546973EA0150401465000 +B1231184514738N00546957EA0151301468000 +B1231214514730N00546940EA0152401472000 +B1231244514724N00546927EA0153001477000 +B1231274514716N00546913EA0153501482000 +B1231304514709N00546900EA0154101487000 +B1231334514701N00546884EA0154501492000 +B1231364514689N00546871EA0154401497000 +B1231394514676N00546854EA0154601501000 +B1231424514663N00546842EA0153701505000 +B1231454514646N00546827EA0153001508000 +B1231484514632N00546807EA0152901509000 +B1231514514623N00546783EA0153501510000 +B1231554514610N00546756EA0154301513000 +B1231584514601N00546742EA0154201515000 +B1232014514588N00546724EA0153801517000 +B1232044514576N00546703EA0153901518000 +B1232074514567N00546687EA0154301519000 +B1232104514557N00546673EA0155401521000 +B1232134514548N00546657EA0156001524000 +B1232164514537N00546637EA0156501527000 +B1232194514524N00546619EA0156801530000 +B1232224514514N00546604EA0158001534000 +B1232254514506N00546595EA0157701537000 +B1232284514494N00546580EA0157601540000 +B1232314514481N00546563EA0158401544000 +B1232344514471N00546547EA0158801547000 +B1232374514461N00546529EA0159001551000 +B1232404514450N00546510EA0159501554000 +B1232434514440N00546495EA0159501558000 +B1232464514428N00546478EA0159001560000 +B1232494514414N00546460EA0159101562000 +B1232524514405N00546439EA0159501564000 +B1232554514396N00546420EA0159101566000 +B1232584514387N00546398EA0159001568000 +B1233014514380N00546382EA0159501569000 +B1233044514375N00546369EA0159001570000 +B1233074514366N00546351EA0158501571000 +B1233104514355N00546333EA0158601571000 +B1233134514346N00546315EA0158901572000 +B1233164514339N00546295EA0158801572000 +B1233194514330N00546272EA0159101573000 +B1233224514323N00546250EA0159701574000 +B1233264514315N00546221EA0160701576000 +B1233294514309N00546203EA0161801579000 +B1233324514300N00546182EA0162501582000 +B1233354514288N00546161EA0163201586000 +B1233384514275N00546135EA0164001590000 +B1233414514267N00546112EA0165101595000 +B1233444514256N00546087EA0165701601000 +B1233474514246N00546063EA0166801606000 +B1233504514238N00546040EA0167501612000 +B1233534514229N00546016EA0168701619000 +B1233564514222N00545995EA0169901626000 +B1233594514217N00545976EA0170501633000 +B1234024514211N00545955EA0170801640000 +B1234054514202N00545931EA0171801647000 +B1234084514195N00545908EA0172301654000 +B1234114514188N00545883EA0172801661000 +B1234144514181N00545858EA0173301668000 +B1234174514174N00545830EA0173901675000 +B1234204514166N00545802EA0174601681000 +B1234234514158N00545777EA0175601688000 +B1234264514148N00545762EA0175701694000 +B1234294514137N00545768EA0175201700000 +B1234324514137N00545790EA0175301705000 +B1234354514145N00545810EA0175701710000 +B1234384514151N00545825EA0175801715000 +B1234414514160N00545843EA0175801719000 +B1234444514171N00545860EA0176101723000 +B1234474514182N00545882EA0176701727000 +B1234504514192N00545902EA0177101731000 +B1234534514198N00545924EA0177701735000 +B1234564514206N00545946EA0178801739000 +B1234594514215N00545962EA0179301744000 +B1235024514225N00545983EA0180001748000 +B1235054514237N00546004EA0181301753000 +B1235084514245N00546015EA0181201759000 +B1235124514257N00546038EA0181701766000 +B1235154514267N00546052EA0182501772000 +B1235184514279N00546068EA0183201777000 +B1235214514290N00546087EA0184501784000 +B1235244514298N00546103EA0185301790000 +B1235274514303N00546120EA0186001797000 +B1235304514309N00546135EA0186501804000 +B1235334514317N00546149EA0186401810000 +B1235364514327N00546164EA0186301816000 +B1235394514338N00546180EA0186001821000 +B1235424514350N00546199EA0185601825000 +B1235454514364N00546220EA0185601828000 +B1235484514376N00546241EA0185801831000 +B1235514514388N00546263EA0185701833000 +B1235544514400N00546286EA0185401835000 +B1235574514413N00546312EA0185601837000 +B1236004514426N00546335EA0185201838000 +B1236034514438N00546357EA0184701839000 +B1236064514451N00546382EA0185201840000 +B1236094514462N00546405EA0185701841000 +B1236124514474N00546432EA0186001842000 +B1236154514488N00546457EA0187101844000 +B1236184514500N00546473EA0187001846000 +B1236214514510N00546491EA0186801848000 +B1236244514516N00546510EA0186501850000 +B1236274514525N00546531EA0186601852000 +B1236304514533N00546547EA0186101853000 +B1236334514543N00546567EA0185601854000 +B1236364514556N00546588EA0185801854000 +B1236404514571N00546609EA0184501853000 +B1236434514588N00546629EA0185001852000 +B1236464514598N00546649EA0185101852000 +B1236494514612N00546671EA0186001851000 +B1236524514624N00546691EA0187001852000 +B1236554514634N00546713EA0187801853000 +B1236584514646N00546736EA0188301856000 +B1237014514659N00546757EA0188501858000 +B1237044514668N00546778EA0188901860000 +B1237074514675N00546795EA0188301863000 +B1237104514684N00546812EA0187401864000 +B1237134514696N00546833EA0186201864000 +B1237164514712N00546856EA0185801863000 +B1237194514727N00546879EA0185001861000 +B1237224514743N00546904EA0184501859000 +B1237254514758N00546929EA0184101857000 +B1237284514774N00546954EA0183801854000 +B1237314514792N00546977EA0183701851000 +B1237344514809N00547002EA0185001849000 +B1237374514820N00547018EA0185301848000 +B1237404514831N00547033EA0184701847000 +B1237434514845N00547057EA0185201846000 +B1237464514857N00547080EA0185101846000 +B1237494514870N00547103EA0184301845000 +B1237524514885N00547129EA0184001844000 +B1237554514901N00547155EA0183601843000 +B1237584514919N00547182EA0183501841000 +B1238014514931N00547207EA0183301840000 +B1238054514946N00547238EA0182901838000 +B1238084514959N00547264EA0182801837000 +B1238114514972N00547281EA0183301835000 +B1238144514987N00547295EA0182901834000 +B1238174515002N00547307EA0183301833000 +B1238204515014N00547318EA0182701832000 +B1238234515028N00547329EA0182201831000 +B1238264515041N00547340EA0180801829000 +B1238294515059N00547354EA0180201826000 +B1238324515072N00547369EA0180001823000 +B1238354515090N00547388EA0180501820000 +B1238384515104N00547406EA0181501818000 +B1238414515115N00547423EA0181601816000 +B1238444515128N00547443EA0182201815000 +B1238474515142N00547459EA0182801815000 +B1238504515157N00547476EA0183301816000 +B1238534515175N00547492EA0184001817000 +B1238564515194N00547510EA0184301819000 +B1238594515211N00547528EA0184401820000 +B1239024515230N00547544EA0184401822000 +B1239054515248N00547560EA0184801824000 +B1239084515266N00547575EA0184801826000 +B1239114515283N00547592EA0185101828000 +B1239144515300N00547610EA0185301830000 +B1239174515317N00547628EA0185201832000 +B1239204515334N00547646EA0184801834000 +B1239234515353N00547663EA0184401835000 +B1239264515371N00547680EA0183601836000 +B1239304515395N00547702EA0183301837000 +B1239334515413N00547719EA0182601836000 +B1239364515431N00547738EA0182701835000 +B1239394515448N00547756EA0182301834000 +B1239424515464N00547776EA0182101832000 +B1239454515481N00547794EA0182001831000 +B1239484515498N00547814EA0182401829000 +B1239514515511N00547831EA0182301828000 +B1239544515526N00547852EA0181601827000 +B1239574515543N00547869EA0181301825000 +B1240004515559N00547886EA0180501823000 +B1240034515578N00547902EA0180501821000 +B1240064515594N00547919EA0179901818000 +B1240094515612N00547938EA0179701816000 +B1240124515628N00547955EA0179201813000 +B1240154515645N00547974EA0178901811000 +B1240184515662N00547993EA0179301808000 +B1240214515677N00548008EA0179301806000 +B1240244515693N00548024EA0179601805000 +B1240274515710N00548040EA0179501803000 +B1240304515727N00548057EA0180401802000 +B1240334515742N00548068EA0180401802000 +B1240364515760N00548078EA0180501802000 +B1240394515778N00548089EA0180601802000 +B1240424515794N00548102EA0180001801000 +B1240454515809N00548118EA0179201801000 +B1240484515826N00548136EA0178901799000 +B1240524515849N00548157EA0178901797000 +B1240554515865N00548168EA0179301796000 +B1240584515879N00548182EA0179001795000 +B1241014515895N00548199EA0178501794000 +B1241044515910N00548219EA0177601792000 +B1241074515928N00548239EA0177001790000 +B1241104515944N00548259EA0176301787000 +B1241134515960N00548280EA0175701783000 +B1241164515978N00548300EA0175401780000 +B1241194515995N00548320EA0174901776000 +B1241224516012N00548342EA0174701773000 +B1241254516027N00548362EA0174301769000 +B1241284516044N00548383EA0173701765000 +B1241314516060N00548404EA0173401762000 +B1241344516077N00548423EA0172701758000 +B1241374516095N00548441EA0172201754000 +B1241404516112N00548459EA0171901750000 +B1241434516127N00548474EA0172401746000 +B1241464516140N00548490EA0173101743000 +B1241494516151N00548506EA0173501742000 +B1241524516161N00548524EA0173601741000 +B1241554516172N00548541EA0173101739000 +B1241584516188N00548562EA0172801738000 +B1242014516203N00548581EA0172301736000 +B1242044516219N00548599EA0171801734000 +B1242074516235N00548616EA0171301732000 +B1242114516256N00548638EA0170701728000 +B1242144516272N00548653EA0170301725000 +B1242174516289N00548668EA0170401722000 +B1242204516307N00548681EA0171301720000 +B1242234516324N00548691EA0172701719000 +B1242264516339N00548701EA0173701719000 +B1242294516354N00548717EA0174801721000 +B1242324516367N00548736EA0175601724000 +B1242354516384N00548749EA0176301727000 +B1242384516397N00548749EA0175801730000 +B1242414516413N00548752EA0175801733000 +B1242444516428N00548759EA0175401735000 +B1242474516442N00548769EA0175001737000 +B1242504516457N00548781EA0175601738000 +B1242534516469N00548795EA0175701740000 +B1242564516481N00548810EA0176701742000 +B1242594516495N00548822EA0177601744000 +B1243024516508N00548836EA0178501748000 +B1243054516526N00548840EA0179401751000 +B1243084516534N00548827EA0180301756000 +B1243114516528N00548811EA0181401761000 +B1243144516519N00548812EA0181801765000 +B1243174516510N00548823EA0182501771000 +B1243204516506N00548842EA0183501777000 +B1243234516513N00548859EA0184201783000 +B1243264516529N00548865EA0185601789000 +B1243294516545N00548864EA0186901797000 +B1243324516556N00548857EA0187601804000 +B1243354516556N00548841EA0188901812000 +B1243384516548N00548839EA0189701816000 +B1243424516540N00548858EA0190701827000 +B1243454516542N00548883EA0191801837000 +B1243484516554N00548904EA0192701846000 +B1243514516573N00548909EA0193901856000 +B1243544516584N00548896EA0195401866000 +B1243574516579N00548888EA0196101871000 +B1244004516568N00548885EA0197301882000 +B1244034516559N00548903EA0198101894000 +B1244064516563N00548928EA0198801904000 +B1244094516578N00548947EA0199501914000 +B1244124516596N00548946EA0200501924000 +B1244154516605N00548931EA0201201933000 +B1244184516598N00548919EA0202201942000 +B1244214516586N00548926EA0203501952000 +B1244244516585N00548949EA0204001961000 +B1244274516599N00548972EA0204801970000 +B1244304516618N00548980EA0205201978000 +B1244334516631N00548968EA0205901987000 +B1244364516631N00548955EA0206101992000 +B1244394516618N00548951EA0206802000000 +B1244424516609N00548969EA0207602008000 +B1244454516615N00548995EA0208202015000 +B1244484516630N00549012EA0208402022000 +B1244514516648N00549019EA0208302029000 +B1244544516666N00549026EA0208302034000 +B1244574516683N00549034EA0208302040000 +B1245004516702N00549044EA0208102044000 +B1245034516721N00549050EA0208402048000 +B1245064516736N00549057EA0208202052000 +B1245094516754N00549062EA0207802055000 +B1245134516784N00549070EA0207302058000 +B1245164516807N00549079EA0207302060000 +B1245194516827N00549090EA0206902061000 +B1245224516848N00549101EA0205802061000 +B1245254516871N00549113EA0205602061000 +B1245284516891N00549127EA0205102060000 +B1245314516912N00549137EA0204602058000 +B1245344516935N00549146EA0203902056000 +B1245374516959N00549163EA0203002054000 +B1245404516983N00549184EA0201802050000 +B1245434517003N00549205EA0201602047000 +B1245464517022N00549218EA0200802043000 +B1245494517041N00549229EA0200502038000 +B1245524517054N00549243EA0199502034000 +B1245554517073N00549253EA0198202029000 +B1245584517093N00549262EA0198302024000 +B1246014517110N00549270EA0197502019000 +B1246044517131N00549279EA0197102014000 +B1246074517150N00549290EA0196802009000 +B1246104517169N00549301EA0196102004000 +B1246134517188N00549312EA0195701999000 +B1246164517207N00549322EA0195201994000 +B1246194517227N00549334EA0194901989000 +B1246224517246N00549344EA0194601984000 +B1246254517265N00549354EA0194301979000 +B1246284517284N00549366EA0194001975000 +B1246324517309N00549382EA0193801969000 +B1246354517329N00549392EA0193601965000 +B1246384517347N00549403EA0193201962000 +B1246414517366N00549414EA0192901958000 +B1246444517384N00549425EA0192601954000 +B1246474517403N00549435EA0192201951000 +B1246504517421N00549446EA0191801947000 +B1246534517440N00549458EA0191401943000 +B1246564517460N00549469EA0191001939000 +B1246594517480N00549482EA0190701936000 +B1247024517500N00549493EA0190601932000 +B1247054517519N00549504EA0190301929000 +B1247084517539N00549516EA0189901925000 +B1247114517559N00549527EA0189801922000 +B1247144517579N00549538EA0189501919000 +B1247174517599N00549552EA0189401916000 +B1247204517618N00549568EA0189001913000 +B1247234517637N00549586EA0188901910000 +B1247264517656N00549599EA0188301907000 +B1247294517674N00549605EA0188001903000 +B1247324517688N00549613EA0187301900000 +B1247354517705N00549623EA0187001896000 +B1247384517722N00549633EA0187001892000 +B1247414517738N00549643EA0186801889000 +B1247444517754N00549655EA0186701886000 +B1247474517770N00549667EA0186701883000 +B1247504517787N00549667EA0186501880000 +B1247544517809N00549677EA0186101877000 +B1247574517821N00549697EA0186001874000 +B1248004517832N00549718EA0185501871000 +B1248034517845N00549740EA0185101868000 +B1248064517857N00549762EA0184701866000 +B1248094517870N00549788EA0184301862000 +B1248124517883N00549814EA0184601860000 +B1248154517896N00549837EA0184501857000 +B1248184517909N00549865EA0184601855000 +B1248214517918N00549892EA0184801854000 +B1248244517926N00549918EA0184401852000 +B1248274517934N00549940EA0183901850000 +B1248304517944N00549963EA0183101848000 +B1248334517955N00549985EA0182301845000 +B1248364517966N00550009EA0181101842000 +B1248394517979N00550037EA0181101838000 +B1248424517992N00550059EA0181201834000 +B1248454518005N00550081EA0181301831000 +B1248484518019N00550104EA0182301828000 +B1248514518032N00550121EA0182601827000 +B1248544518043N00550140EA0183001827000 +B1248574518056N00550157EA0183801827000 +B1249004518070N00550169EA0184101828000 +B1249034518086N00550176EA0184401829000 +B1249064518102N00550172EA0184301831000 +B1249094518115N00550152EA0184401832000 +B1249124518114N00550131EA0184701833000 +B1249164518104N00550122EA0184401835000 +B1249194518096N00550129EA0184601835000 +B1249224518097N00550149EA0185001836000 +B1249254518103N00550168EA0185501838000 +B1249284518111N00550191EA0185901839000 +B1249314518118N00550209EA0186201841000 +B1249344518125N00550226EA0185701843000 +B1249374518133N00550248EA0185901845000 +B1249404518139N00550268EA0186401846000 +B1249434518145N00550287EA0186301848000 +B1249464518154N00550308EA0186601850000 +B1249494518163N00550324EA0186701852000 +B1249524518172N00550343EA0186601853000 +B1249554518182N00550361EA0186301854000 +B1249584518191N00550382EA0186301855000 +B1250014518199N00550406EA0186001855000 +B1250044518205N00550433EA0186001856000 +B1250074518212N00550456EA0185401856000 +B1250104518220N00550483EA0184301855000 +B1250134518225N00550512EA0183901853000 +B1250164518226N00550540EA0182901851000 +B1250194518225N00550567EA0182001848000 +B1250224518223N00550597EA0181701844000 +B1250254518220N00550622EA0180901841000 +B1250284518220N00550654EA0180401837000 +B1250324518223N00550699EA0180301832000 +B1250354518227N00550731EA0179601828000 +B1250384518230N00550765EA0179001824000 +B1250414518234N00550797EA0178801820000 +B1250444518238N00550829EA0178201816000 +B1250474518241N00550861EA0178201812000 +B1250504518244N00550885EA0178801809000 +B1250534518248N00550903EA0178701806000 +B1250564518250N00550924EA0178701803000 +B1250594518251N00550943EA0179001800000 +B1251024518252N00550961EA0179201799000 +B1251054518253N00550979EA0179501797000 +B1251084518254N00550996EA0179001797000 +B1251114518255N00551015EA0178701795000 +B1251144518259N00551035EA0179201794000 +B1251174518263N00551054EA0179301794000 +B1251204518263N00551073EA0179401793000 +B1251234518262N00551093EA0179501793000 +B1251264518264N00551113EA0180001793000 +B1251294518269N00551131EA0180301793000 +B1251324518272N00551151EA0180601794000 +B1251354518279N00551173EA0181201795000 +B1251384518286N00551193EA0181601796000 +B1251414518295N00551214EA0182401798000 +B1251444518304N00551233EA0183301800000 +B1251474518311N00551255EA0184201803000 +B1251504518315N00551275EA0184701807000 +B1251534518310N00551292EA0184801810000 +B1251564518296N00551297EA0185901814000 +B1252004518282N00551293EA0186401819000 +B1252034518270N00551292EA0187001823000 +B1252064518259N00551285EA0188301829000 +B1252094518248N00551277EA0189501834000 +B1252124518235N00551285EA0190201841000 +B1252154518235N00551303EA0190601847000 +B1252184518251N00551314EA0191701853000 +B1252214518265N00551308EA0193201860000 +B1252244518275N00551293EA0194501868000 +B1252274518279N00551273EA0196001876000 +B1252304518270N00551260EA0197201885000 +B1252334518258N00551272EA0198001894000 +B1252364518258N00551292EA0198801903000 +B1252394518269N00551306EA0199401911000 +B1252424518285N00551305EA0200701920000 +B1252454518297N00551294EA0202001929000 +B1252484518302N00551278EA0203101939000 +B1252514518294N00551262EA0204401949000 +B1252544518279N00551266EA0205801959000 +B1252574518272N00551287EA0207201969000 +B1253004518276N00551309EA0207701980000 +B1253034518290N00551314EA0208601990000 +B1253064518301N00551300EA0209902000000 +B1253094518303N00551282EA0210802011000 +B1253124518291N00551268EA0212102021000 +B1253154518274N00551273EA0213002032000 +B1253194518270N00551300EA0213602045000 +B1253224518283N00551310EA0214902055000 +B1253254518294N00551307EA0215702066000 +B1253284518300N00551291EA0216502075000 +B1253314518293N00551273EA0217502085000 +B1253344518277N00551269EA0218502095000 +B1253374518265N00551282EA0218902104000 +B1253404518268N00551299EA0219502114000 +B1253434518279N00551306EA0220202122000 +B1253464518291N00551308EA0220802131000 +B1253494518306N00551309EA0221702140000 +B1253524518319N00551315EA0222702148000 +B1253554518333N00551322EA0223702157000 +B1253584518345N00551326EA0224302166000 +B1254014518360N00551322EA0225102174000 +B1254044518371N00551313EA0225702183000 +B1254074518382N00551298EA0226502191000 +B1254104518391N00551281EA0227802199000 +B1254134518400N00551265EA0229102208000 +B1254164518401N00551245EA0229902217000 +B1254194518397N00551224EA0230902226000 +B1254224518387N00551205EA0232402235000 +B1254254518371N00551201EA0233702244000 +B1254284518362N00551218EA0234702254000 +B1254314518368N00551236EA0236002264000 +B1254344518382N00551247EA0237402275000 +B1254374518394N00551253EA0238502285000 +B1254414518407N00551255EA0239002299000 +B1254444518419N00551257EA0239302309000 +B1254474518431N00551265EA0239302319000 +B1254504518446N00551274EA0239302327000 +B1254534518461N00551284EA0239602334000 +B1254564518476N00551294EA0239302341000 +B1254594518492N00551302EA0239402347000 +B1255024518507N00551309EA0239002353000 +B1255054518526N00551316EA0238802357000 +B1255084518546N00551318EA0239702361000 +B1255114518563N00551326EA0240302365000 +B1255144518582N00551337EA0241002370000 +B1255174518602N00551346EA0241702375000 +B1255204518620N00551358EA0242802380000 +B1255234518636N00551371EA0242902385000 +B1255264518654N00551386EA0242702390000 +B1255294518673N00551401EA0243802394000 +B1255324518689N00551414EA0244202399000 +B1255354518706N00551432EA0244602404000 +B1255384518720N00551449EA0243702408000 +B1255414518739N00551472EA0243902412000 +B1255444518756N00551495EA0244202415000 +B1255474518772N00551517EA0244002418000 +B1255504518788N00551542EA0244002420000 +B1255534518803N00551564EA0244202422000 +B1255564518816N00551582EA0243402424000 +B1255594518832N00551603EA0243302425000 +B1256024518850N00551621EA0243102426000 +B1256054518870N00551638EA0243802427000 +B1256094518898N00551655EA0245102428000 +B1256124518916N00551666EA0245802430000 +B1256154518935N00551684EA0246702433000 +B1256184518951N00551700EA0247402436000 +B1256214518967N00551718EA0247902439000 +B1256244518981N00551736EA0248402443000 +B1256274518992N00551757EA0248402447000 +B1256304519004N00551782EA0248502450000 +B1256334519014N00551808EA0248902454000 +B1256364519022N00551828EA0248902457000 +B1256394519034N00551847EA0248102460000 +B1256424519048N00551870EA0247502461000 +B1256454519066N00551890EA0247402462000 +B1256484519084N00551910EA0247002463000 +B1256514519106N00551927EA0246802462000 +B1256544519128N00551941EA0246702462000 +B1256574519149N00551954EA0246102462000 +B1257004519168N00551970EA0245402461000 +B1257034519189N00551986EA0245102460000 +B1257064519209N00552001EA0244902459000 +B1257094519228N00552018EA0244502457000 +B1257124519248N00552035EA0244302455000 +B1257154519268N00552052EA0244002454000 +B1257184519286N00552069EA0243402452000 +B1257214519306N00552086EA0242802449000 +B1257244519328N00552101EA0242602447000 +B1257274519347N00552114EA0242202444000 +B1257304519367N00552129EA0241802441000 +B1257344519394N00552151EA0241802437000 +B1257374519413N00552167EA0241002434000 +B1257404519434N00552184EA0240102431000 +B1257434519457N00552201EA0239302427000 +B1257464519479N00552218EA0238402423000 +B1257494519500N00552233EA0237002418000 +B1257524519522N00552248EA0235702412000 +B1257554519545N00552265EA0234702405000 +B1257584519568N00552283EA0234202398000 +B1258014519590N00552301EA0233802391000 +B1258044519612N00552317EA0234002385000 +B1258074519630N00552333EA0233702380000 +B1258104519649N00552349EA0233002374000 +B1258134519670N00552367EA0232802369000 +B1258164519690N00552383EA0231902364000 +B1258194519713N00552400EA0231702358000 +B1258224519736N00552413EA0232002353000 +B1258254519761N00552424EA0232402349000 +B1258284519784N00552436EA0233202345000 +B1258314519802N00552449EA0233302343000 +B1258344519823N00552462EA0233502341000 +B1258374519844N00552476EA0233602340000 +B1258404519861N00552489EA0233602339000 +B1258434519878N00552500EA0233302338000 +B1258464519899N00552513EA0234402338000 +B1258494519912N00552526EA0235002338000 +B1258524519923N00552538EA0235302338000 +B1258564519942N00552553EA0236502340000 +B1258594519955N00552565EA0237302342000 +B1259024519968N00552581EA0237802345000 +B1259054519982N00552595EA0238602348000 +B1259084519994N00552607EA0239402352000 +B1259114520007N00552618EA0239602356000 +B1259144520023N00552627EA0240202361000 +B1259174520038N00552637EA0240702365000 +B1259204520055N00552648EA0242202370000 +B1259234520068N00552657EA0241902376000 +B1259264520084N00552668EA0242302380000 +B1259294520097N00552682EA0242102385000 +B1259324520112N00552694EA0241602389000 +B1259354520128N00552704EA0241402392000 +B1259384520143N00552716EA0240502394000 +B1259414520159N00552729EA0240402395000 +B1259444520173N00552744EA0240002396000 +B1259474520188N00552761EA0240402397000 +B1259504520202N00552779EA0240902398000 +B1259534520218N00552796EA0241202399000 +B1259564520235N00552809EA0242202400000 +B1259594520250N00552821EA0242702402000 +B1300024520267N00552829EA0242702405000 +B1300054520283N00552839EA0242602407000 +B1300084520302N00552848EA0242702410000 +B1300114520320N00552857EA0242402412000 +B1300144520339N00552870EA0242302413000 +B1300174520356N00552883EA0241902415000 +B1300204520371N00552895EA0240402415000 +B1300234520392N00552903EA0239802415000 +B1300274520419N00552916EA0239302413000 +B1300304520438N00552931EA0239302411000 +B1300334520454N00552944EA0238902409000 +B1300364520472N00552961EA0238702407000 +B1300394520489N00552976EA0238302405000 +B1300424520507N00552992EA0237802402000 +B1300454520526N00553007EA0237602400000 +B1300484520545N00553022EA0237202397000 +B1300514520565N00553037EA0237202395000 +B1300544520583N00553049EA0236702392000 +B1300574520603N00553061EA0236602389000 +B1301004520623N00553074EA0236602387000 +B1301034520641N00553087EA0236502384000 +B1301064520657N00553101EA0236602382000 +B1301094520674N00553121EA0235102380000 +B1301124520696N00553143EA0235002377000 +B1301154520715N00553162EA0234202374000 +B1301184520736N00553181EA0233402370000 +B1301214520759N00553197EA0233202367000 +B1301244520780N00553211EA0232702363000 +B1301274520801N00553228EA0232102359000 +B1301304520825N00553242EA0231802355000 +B1301334520846N00553257EA0231202351000 +B1301364520869N00553273EA0230902347000 +B1301394520889N00553291EA0230702343000 +B1301424520907N00553307EA0230202338000 +B1301464520934N00553326EA0229702333000 +B1301494520953N00553340EA0229202329000 +B1301524520972N00553355EA0228602324000 +B1301554520992N00553373EA0228102320000 +B1301584521011N00553386EA0228102315000 +B1302014521028N00553397EA0227802311000 +B1302044521044N00553409EA0226902307000 +B1302074521063N00553425EA0226102302000 +B1302104521083N00553440EA0225602297000 +B1302134521103N00553456EA0225002292000 +B1302164521123N00553472EA0224602287000 +B1302194521143N00553486EA0224402282000 +B1302224521161N00553502EA0223702278000 +B1302254521177N00553520EA0223502273000 +B1302284521193N00553537EA0223002269000 +B1302314521213N00553551EA0223202265000 +B1302344521230N00553562EA0222902262000 +B1302374521248N00553574EA0222902259000 +B1302404521265N00553585EA0223202256000 +B1302434521282N00553594EA0223102253000 +B1302464521301N00553600EA0223102251000 +B1302494521321N00553605EA0223002249000 +B1302524521342N00553608EA0223402247000 +B1302554521362N00553611EA0223202245000 +B1302584521383N00553622EA0224602244000 +B1303014521402N00553627EA0226002245000 +B1303044521419N00553631EA0227002246000 +B1303084521443N00553647EA0229202250000 +B1303114521460N00553645EA0230602254000 +B1303144521476N00553648EA0231402259000 +B1303174521488N00553654EA0231902265000 +B1303204521501N00553662EA0232502270000 +B1303234521516N00553668EA0233902277000 +B1303264521528N00553673EA0234802284000 +B1303294521541N00553678EA0235002290000 +B1303324521559N00553685EA0235302297000 +B1303354521578N00553689EA0236102303000 +B1303384521597N00553694EA0236602309000 +B1303414521615N00553700EA0237402316000 +B1303444521633N00553707EA0237802322000 +B1303474521653N00553713EA0238602328000 +B1303504521671N00553719EA0239702335000 +B1303534521689N00553723EA0240302342000 +B1303564521706N00553729EA0240702348000 +B1303594521725N00553737EA0241102355000 +B1304024521745N00553746EA0242302361000 +B1304054521762N00553755EA0242702368000 +B1304084521779N00553763EA0242702374000 +B1304114521798N00553768EA0243302380000 +B1304144521819N00553773EA0243302385000 +B1304174521842N00553779EA0243602390000 +B1304204521863N00553785EA0243802395000 +B1304234521881N00553792EA0243302400000 +B1304264521901N00553798EA0243002403000 +B1304294521920N00553802EA0243302406000 +B1304324521939N00553804EA0243102409000 +B1304354521958N00553811EA0243202411000 +B1304384521977N00553818EA0243102413000 +B1304414521998N00553828EA0243202414000 +B1304444522018N00553838EA0243002416000 +B1304484522045N00553852EA0242902417000 +B1304514522066N00553864EA0242902418000 +B1304544522087N00553876EA0242702419000 +B1304574522108N00553888EA0242402420000 +B1305004522129N00553900EA0242002420000 +B1305034522151N00553911EA0241602419000 +B1305064522172N00553924EA0241802419000 +B1305094522191N00553935EA0241102418000 +B1305124522212N00553945EA0240602417000 +B1305154522232N00553951EA0239702415000 +B1305184522252N00553959EA0239202412000 +B1305214522270N00553969EA0237702409000 +B1305244522296N00553984EA0236602405000 +B1305274522324N00553997EA0236402400000 +B1305304522349N00554011EA0235702396000 +B1305334522374N00554026EA0235202391000 +B1305364522399N00554040EA0234602386000 +B1305394522425N00554053EA0234202381000 +B1305424522450N00554066EA0233602376000 +B1305454522475N00554078EA0232802370000 +B1305484522499N00554090EA0232402365000 +B1305514522524N00554101EA0231802360000 +B1305544522547N00554110EA0231002354000 +B1305574522572N00554118EA0230602348000 +B1306004522597N00554126EA0230202343000 +B1306034522621N00554135EA0229702337000 +B1306064522646N00554145EA0229202332000 +B1306104522679N00554160EA0228502324000 +B1306134522705N00554170EA0228002319000 +B1306164522730N00554180EA0227602313000 +B1306194522755N00554190EA0227002308000 +B1306224522780N00554201EA0226702303000 +B1306254522804N00554213EA0226202298000 +B1306284522828N00554225EA0225702292000 +B1306314522851N00554234EA0225202287000 +B1306344522874N00554243EA0224302282000 +B1306374522898N00554252EA0224002277000 +B1306404522920N00554263EA0223502271000 +B1306434522942N00554276EA0222802266000 +B1306464522963N00554288EA0222502261000 +B1306494522981N00554298EA0221702256000 +B1306524523000N00554306EA0220802250000 +B1306554523020N00554312EA0220902245000 +B1306584523038N00554320EA0220402240000 +B1307014523058N00554332EA0220302235000 +B1307044523077N00554341EA0220102231000 +B1307074523095N00554349EA0219302226000 +B1307104523114N00554356EA0219202222000 +B1307134523130N00554362EA0218402218000 +B1307164523147N00554369EA0217402213000 +B1307194523168N00554376EA0217402208000 +B1307224523187N00554383EA0217002203000 +B1307254523209N00554391EA0217002198000 +B1307294523234N00554401EA0217002193000 +B1307324523250N00554409EA0217202190000 +B1307354523265N00554414EA0217202187000 +B1307384523280N00554422EA0217002184000 +B1307414523295N00554427EA0217202182000 +B1307444523310N00554431EA0217302180000 +B1307474523324N00554436EA0216802179000 +B1307504523340N00554439EA0216302177000 +B1307534523357N00554443EA0216302174000 +B1307564523374N00554447EA0216602172000 +B1307594523389N00554450EA0216702171000 +B1308024523406N00554454EA0217102169000 +B1308054523421N00554457EA0217402168000 +B1308084523436N00554462EA0217702168000 +B1308114523448N00554468EA0218102168000 +B1308144523459N00554471EA0217902169000 +B1308174523470N00554476EA0217502169000 +B1308204523483N00554481EA0217602169000 +B1308234523496N00554486EA0217102169000 +B1308264523514N00554498EA0216902168000 +B1308294523531N00554510EA0217702168000 +B1308324523545N00554516EA0217702168000 +B1308354523562N00554524EA0217602168000 +B1308384523583N00554533EA0218102168000 +B1308414523599N00554542EA0218502169000 +B1308444523614N00554548EA0218002170000 +B1308484523640N00554565EA0217702171000 +B1308514523659N00554579EA0217702171000 +B1308544523678N00554593EA0217602171000 +B1308574523697N00554606EA0217902171000 +B1309004523716N00554619EA0217802172000 +B1309034523734N00554634EA0217602172000 +B1309064523753N00554650EA0217502172000 +B1309094523771N00554664EA0217902172000 +B1309124523785N00554676EA0217802172000 +B1309154523801N00554686EA0217902173000 +B1309184523817N00554694EA0217902173000 +B1309214523832N00554704EA0217402173000 +B1309244523848N00554716EA0217302173000 +B1309274523866N00554731EA0217102173000 +B1309304523884N00554747EA0217302173000 +B1309334523903N00554763EA0217402172000 +B1309364523922N00554779EA0217402172000 +B1309394523940N00554797EA0217202171000 +B1309424523957N00554816EA0217302171000 +B1309454523971N00554830EA0217302171000 +B1309484523985N00554842EA0216802170000 +B1309514524000N00554854EA0216902170000 +B1309544524015N00554864EA0217102169000 +B1309574524028N00554875EA0217302169000 +B1310004524043N00554888EA0217202169000 +B1310034524059N00554904EA0217502169000 +B1310064524076N00554919EA0217602169000 +B1310104524099N00554941EA0218502170000 +B1310134524109N00554954EA0218802171000 +B1310164524121N00554965EA0218502172000 +B1310194524135N00554972EA0218502173000 +B1310224524147N00554979EA0217902174000 +B1310254524163N00554992EA0217902174000 +B1310284524179N00555005EA0218002174000 +B1310314524196N00555020EA0218002174000 +B1310344524214N00555036EA0219102175000 +B1310374524229N00555050EA0219302176000 +B1310404524246N00555065EA0219802177000 +B1310434524262N00555077EA0220502179000 +B1310464524277N00555086EA0220702181000 +B1310494524292N00555096EA0221302184000 +B1310524524307N00555103EA0221802187000 +B1310554524324N00555104EA0222702190000 +B1310584524337N00555091EA0223402194000 +B1311014524341N00555068EA0223702198000 +B1311044524331N00555053EA0223702202000 +B1311074524321N00555064EA0223702205000 +B1311104524329N00555082EA0225002209000 +B1311134524339N00555089EA0225502213000 +B1311164524352N00555095EA0225902217000 +B1311194524369N00555099EA0226402221000 +B1311224524388N00555102EA0227102226000 +B1311254524405N00555103EA0227402230000 +B1311284524425N00555106EA0228102235000 +B1311314524445N00555108EA0229502239000 +B1311344524461N00555107EA0229802245000 +B1311374524475N00555106EA0230602250000 +B1311404524490N00555110EA0231502256000 +B1311434524504N00555113EA0232202262000 +B1311464524519N00555111EA0232402268000 +B1311504524537N00555112EA0232802275000 +B1311534524550N00555118EA0232702280000 +B1311564524565N00555123EA0232502285000 +B1311594524582N00555130EA0232502289000 +B1312024524597N00555135EA0232302292000 +B1312054524612N00555139EA0232402295000 +B1312084524626N00555145EA0232702298000 +B1312114524639N00555150EA0232702300000 +B1312144524651N00555159EA0233102303000 +B1312174524663N00555166EA0233102305000 +B1312204524674N00555175EA0233002308000 +B1312234524687N00555185EA0233102310000 +B1312264524700N00555193EA0233002312000 +B1312294524713N00555204EA0232102313000 +B1312324524730N00555223EA0231402314000 +B1312354524747N00555243EA0231302314000 +B1312384524763N00555259EA0230702313000 +B1312414524780N00555272EA0230302312000 +B1312444524798N00555287EA0230302311000 +B1312474524816N00555302EA0230002309000 +B1312504524834N00555321EA0230102307000 +B1312534524853N00555338EA0230102306000 +B1312564524874N00555353EA0230802304000 +B1312594524893N00555362EA0231802304000 +B1313024524905N00555368EA0231702305000 +B1313054524918N00555375EA0231302305000 +B1313084524932N00555380EA0231002306000 +B1313114524947N00555389EA0230602305000 +B1313144524963N00555397EA0230602304000 +B1313184524983N00555409EA0230002303000 +B1313214525000N00555416EA0229802302000 +B1313244525016N00555422EA0229302300000 +B1313274525033N00555428EA0229302299000 +B1313304525047N00555436EA0228602297000 +B1313334525064N00555448EA0228302295000 +B1313364525080N00555457EA0227902292000 +B1313394525096N00555467EA0227602290000 +B1313424525111N00555477EA0227302287000 +B1313454525126N00555488EA0226502285000 +B1313484525144N00555505EA0225602281000 +B1313514525161N00555525EA0225302277000 +B1313544525177N00555542EA0224702273000 +B1313574525193N00555562EA0224602270000 +B1314004525207N00555582EA0224102266000 +B1314034525223N00555603EA0224002263000 +B1314064525238N00555622EA0223402259000 +B1314094525254N00555642EA0222902255000 +B1314124525273N00555661EA0222702252000 +B1314154525290N00555677EA0221802248000 +B1314184525309N00555696EA0221102244000 +B1314214525328N00555720EA0221102240000 +B1314244525344N00555742EA0220602236000 +B1314274525362N00555764EA0220102231000 +B1314304525381N00555784EA0219702227000 +B1314344525409N00555806EA0219102221000 +B1314374525431N00555821EA0219002216000 +B1314404525448N00555835EA0219202213000 +B1314434525463N00555847EA0219102209000 +B1314464525479N00555859EA0218702206000 +B1314494525496N00555869EA0218302203000 +B1314524525513N00555877EA0218402200000 +B1314554525530N00555886EA0218102197000 +B1314584525547N00555893EA0218102194000 +B1315014525563N00555900EA0217902192000 +B1315044525582N00555907EA0217702189000 +B1315074525599N00555912EA0217402187000 +B1315104525617N00555917EA0217102184000 +B1315134525634N00555921EA0217302181000 +B1315164525650N00555928EA0216902179000 +B1315194525667N00555935EA0217002177000 +B1315224525682N00555942EA0216702175000 +B1315254525698N00555949EA0216602172000 +B1315284525714N00555956EA0216302172000 +B1315314525730N00555962EA0215902169000 +B1315344525746N00555968EA0215702167000 +B1315374525762N00555976EA0215302164000 +B1315404525779N00555983EA0215002162000 +B1315434525796N00555990EA0214702160000 +B1315464525813N00555997EA0214402158000 +B1315494525829N00556004EA0214002155000 +B1315524525845N00556011EA0213802152000 +B1315564525864N00556013EA0213402148000 +B1315594525879N00556010EA0213102145000 +B1316024525892N00556003EA0212802142000 +B1316054525906N00555992EA0212402139000 +B1316084525919N00555981EA0212202136000 +B1316114525931N00555969EA0212002133000 +B1316144525943N00555956EA0211702130000 +B1316174525954N00555941EA0211602128000 +B1316204525961N00555926EA0211502125000 +B1316234525969N00555909EA0211002123000 +B1316264525980N00555894EA0211102120000 +B1316294525991N00555882EA0210602118000 +B1316324526005N00555869EA0210102115000 +B1316354526019N00555856EA0209802113000 +B1316384526034N00555843EA0209002110000 +B1316414526050N00555832EA0208602107000 +B1316444526065N00555821EA0208002103000 +B1316474526081N00555809EA0207402100000 +B1316504526096N00555796EA0206702096000 +B1316534526112N00555782EA0206302092000 +B1316564526127N00555770EA0205702087000 +B1316594526144N00555758EA0205402083000 +B1317024526158N00555746EA0204902079000 +B1317054526171N00555732EA0204702074000 +B1317084526184N00555718EA0204602070000 +B1317124526198N00555702EA0204502066000 +B1317154526210N00555691EA0204102064000 +B1317184526221N00555680EA0203702061000 +B1317214526232N00555668EA0203202057000 +B1317244526243N00555656EA0202702053000 +B1317274526255N00555642EA0202002049000 +B1317304526268N00555628EA0201702044000 +B1317334526280N00555617EA0201402040000 +B1317364526292N00555606EA0201302035000 +B1317394526303N00555594EA0201002031000 +B1317424526315N00555583EA0200602027000 +B1317454526325N00555571EA0199902023000 +B1317484526337N00555557EA0199302019000 +B1317514526347N00555542EA0198902014000 +B1317544526358N00555528EA0197602009000 +B1317574526373N00555511EA0198102004000 +B1318004526380N00555503EA0197802001000 +B1318034526389N00555493EA0197001997000 +B1318064526399N00555480EA0197001992000 +B1318094526407N00555469EA0195701988000 +B1318124526420N00555456EA0195701982000 +B1318154526431N00555443EA0195001978000 +B1318184526447N00555428EA0194501973000 +B1318214526465N00555415EA0195001968000 +B1318244526480N00555407EA0195401965000 +B1318274526493N00555398EA0195801962000 +B1318304526506N00555388EA0196101960000 +B1318334526519N00555381EA0196801959000 +B1318374526535N00555378EA0197201959000 +B1318404526544N00555372EA0197401959000 +B1318434526549N00555358EA0197701960000 +B1318464526546N00555342EA0198301961000 +B1318494526533N00555332EA0198301962000 +B1318524526516N00555339EA0198401963000 +B1318554526507N00555361EA0198401964000 +B1318584526513N00555382EA0198501965000 +B1319014526526N00555387EA0199201966000 +B1319044526538N00555387EA0199701968000 +B1319074526547N00555379EA0199901970000 +B1319104526551N00555364EA0200401972000 +B1319134526548N00555345EA0200501975000 +B1319164526537N00555334EA0200501977000 +B1319194526521N00555337EA0200501978000 +B1319224526510N00555358EA0200501980000 +B1319254526511N00555384EA0200801981000 +B1319284526521N00555401EA0201101983000 +B1319314526536N00555405EA0201801985000 +B1319344526547N00555399EA0202101987000 +B1319374526558N00555388EA0202101989000 +B1319404526572N00555374EA0202201991000 +B1319434526587N00555364EA0202401993000 +B1319464526605N00555355EA0202901996000 +B1319494526623N00555348EA0203601998000 +B1319524526639N00555344EA0204202001000 +B1319554526654N00555339EA0204002005000 +B1319594526675N00555319EA0203102008000 +B1320024526693N00555300EA0203502009000 +B1320054526708N00555283EA0203302011000 +B1320084526725N00555266EA0203702013000 +B1320114526741N00555254EA0204802015000 +B1320144526750N00555246EA0205102018000 +B1320174526758N00555235EA0205502020000 +B1320204526768N00555227EA0205902023000 +B1320234526778N00555219EA0206302026000 +B1320264526783N00555207EA0206702030000 +B1320294526775N00555195EA0207202033000 +B1320324526760N00555196EA0207702036000 +B1320354526751N00555216EA0208102040000 +B1320384526754N00555240EA0208402043000 +B1320414526767N00555251EA0208902046000 +B1320444526778N00555245EA0209102050000 +B1320474526782N00555230EA0209802053000 +B1320504526776N00555217EA0210202056000 +B1320534526764N00555212EA0210502059000 +B1320564526749N00555217EA0211002062000 +B1320594526738N00555235EA0211402066000 +B1321024526735N00555260EA0211802070000 +B1321054526744N00555281EA0212002073000 +B1321084526759N00555287EA0212502078000 +B1321114526773N00555277EA0212202081000 +B1321144526793N00555264EA0212702085000 +B1321174526814N00555255EA0213902089000 +B1321204526828N00555247EA0214802094000 +B1321234526837N00555236EA0215402099000 +B1321264526838N00555218EA0216402105000 +B1321294526826N00555207EA0217102111000 +B1321334526807N00555219EA0218202119000 +B1321364526804N00555243EA0218902125000 +B1321394526812N00555266EA0219702131000 +B1321424526826N00555271EA0220602137000 +B1321454526834N00555262EA0221502144000 +B1321484526834N00555247EA0222402150000 +B1321514526823N00555234EA0223302157000 +B1321544526807N00555236EA0223802163000 +B1321574526796N00555253EA0224602170000 +B1322004526799N00555276EA0225202177000 +B1322034526809N00555294EA0226102183000 +B1322064526821N00555298EA0226902191000 +B1322094526831N00555289EA0227602198000 +B1322124526829N00555272EA0228202205000 +B1322154526817N00555260EA0229202212000 +B1322184526801N00555261EA0229702219000 +B1322214526789N00555277EA0230102226000 +B1322244526795N00555301EA0230902233000 +B1322274526809N00555313EA0231902240000 +B1322304526821N00555308EA0232202247000 +B1322334526828N00555292EA0233102255000 +B1322364526828N00555275EA0233702262000 +B1322394526818N00555261EA0234302270000 +B1322424526802N00555259EA0234902277000 +B1322454526785N00555270EA0235402283000 +B1322484526774N00555292EA0236202290000 +B1322514526771N00555314EA0236802297000 +B1322544526771N00555339EA0238002304000 +B1322574526774N00555360EA0238702311000 +B1323004526785N00555377EA0239502318000 +B1323034526799N00555379EA0240302325000 +B1323064526809N00555370EA0241002333000 +B1323104526823N00555356EA0241702343000 +B1323134526835N00555349EA0241802350000 +B1323164526852N00555345EA0242602357000 +B1323194526867N00555344EA0243802364000 +B1323224526882N00555343EA0244502371000 +B1323254526897N00555340EA0245002378000 +B1323284526912N00555338EA0245702385000 +B1323314526928N00555336EA0246502392000 +B1323344526943N00555335EA0246902399000 +B1323374526960N00555331EA0247102406000 +B1323404526976N00555331EA0247202412000 +B1323434526993N00555333EA0247502418000 +B1323464527010N00555335EA0247402423000 +B1323494527028N00555335EA0247302428000 +B1323524527044N00555332EA0246802432000 +B1323554527066N00555330EA0245702435000 +B1323584527092N00555329EA0245502437000 +B1324014527115N00555330EA0245402438000 +B1324044527137N00555335EA0245102440000 +B1324074527159N00555340EA0244802440000 +B1324104527181N00555347EA0244802441000 +B1324134527202N00555354EA0245102441000 +B1324164527219N00555360EA0244902441000 +B1324194527238N00555362EA0244902441000 +B1324224527257N00555365EA0245102441000 +B1324254527274N00555367EA0245002441000 +B1324284527292N00555370EA0245002441000 +B1324324527317N00555376EA0244902441000 +B1324354527335N00555378EA0245302441000 +B1324384527353N00555380EA0245202441000 +B1324414527372N00555384EA0245602441000 +B1324444527389N00555386EA0245802442000 +B1324474527407N00555386EA0246202443000 +B1324504527425N00555388EA0246502444000 +B1324534527443N00555391EA0246802446000 +B1324564527461N00555393EA0246702447000 +B1324594527481N00555395EA0246702449000 +B1325024527501N00555394EA0246702450000 +B1325054527521N00555393EA0246702451000 +B1325084527541N00555392EA0246702452000 +B1325114527560N00555391EA0246702453000 +B1325144527579N00555389EA0246702454000 +B1325174527598N00555389EA0246502454000 +B1325204527617N00555392EA0246502455000 +B1325234527636N00555394EA0246702456000 +B1325264527654N00555399EA0246602456000 +B1325294527673N00555406EA0246602457000 +B1325324527692N00555414EA0246502457000 +B1325354527711N00555418EA0246402458000 +B1325384527730N00555420EA0246302458000 +B1325414527750N00555422EA0245702458000 +B1325444527770N00555424EA0245602457000 +B1325474527789N00555427EA0245102456000 +B1325504527809N00555431EA0245002455000 +B1325534527828N00555436EA0244502454000 +B1325564527847N00555442EA0244002453000 +B1325594527867N00555448EA0243602452000 +B1326024527887N00555454EA0243102450000 +B1326064527913N00555466EA0242802446000 +B1326094527932N00555475EA0242402444000 +B1326124527951N00555485EA0241902441000 +B1326154527970N00555495EA0241502437000 +B1326184527988N00555508EA0241102433000 +B1326214528006N00555523EA0240602430000 +B1326244528024N00555539EA0240102426000 +B1326274528043N00555554EA0239702421000 +B1326304528061N00555570EA0239102417000 +B1326334528081N00555585EA0238602413000 +B1326364528100N00555600EA0238202408000 +B1326394528119N00555616EA0237702404000 +B1326424528139N00555634EA0237502400000 +B1326454528157N00555652EA0236902395000 +B1326484528176N00555672EA0236502391000 +B1326514528195N00555690EA0236102387000 +B1326544528213N00555710EA0235502383000 +B1326574528233N00555728EA0234702379000 +B1327004528252N00555746EA0234002374000 +B1327034528271N00555765EA0234002370000 +B1327064528290N00555782EA0233502365000 +B1327094528309N00555800EA0233102360000 +B1327124528329N00555821EA0232502356000 +B1327154528350N00555842EA0232202351000 +B1327184528373N00555860EA0231602346000 +B1327224528403N00555887EA0230902340000 +B1327254528424N00555907EA0230502335000 +B1327284528445N00555925EA0230002330000 +B1327314528465N00555941EA0229402325000 +B1327344528486N00555957EA0228802320000 +B1327374528507N00555972EA0228202314000 +B1327404528527N00555988EA0227802309000 +B1327434528546N00556005EA0227302304000 +B1327464528565N00556021EA0226902298000 +B1327494528584N00556034EA0226302293000 +B1327524528603N00556048EA0225402288000 +B1327554528623N00556062EA0224902286000 +B1327584528642N00556078EA0224702282000 +B1328014528661N00556097EA0224302278000 +B1328044528679N00556117EA0224102273000 +B1328074528697N00556137EA0223702269000 +B1328104528714N00556158EA0223402264000 +B1328134528732N00556179EA0223102260000 +B1328164528749N00556200EA0222802255000 +B1328194528767N00556219EA0222502251000 +B1328224528784N00556239EA0222202247000 +B1328254528801N00556260EA0221802243000 +B1328284528818N00556281EA0221702239000 +B1328314528835N00556303EA0221702236000 +B1328344528852N00556323EA0221702232000 +B1328374528870N00556339EA0221402229000 +B1328404528888N00556356EA0220902226000 +B1328444528912N00556382EA0220702222000 +B1328474528928N00556404EA0220302220000 +B1328504528944N00556425EA0219902217000 +B1328534528961N00556446EA0219402214000 +B1328564528979N00556465EA0219302211000 +B1328594528996N00556483EA0218802208000 +B1329024529013N00556502EA0218402204000 +B1329054529028N00556522EA0218102201000 +B1329084529044N00556542EA0217902198000 +B1329114529060N00556560EA0217802195000 +B1329144529076N00556577EA0217602192000 +B1329174529093N00556593EA0217202188000 +B1329204529110N00556607EA0216702185000 +B1329234529129N00556621EA0216302182000 +B1329264529146N00556635EA0215802178000 +B1329294529163N00556651EA0215202174000 +B1329324529179N00556668EA0214802171000 +B1329354529194N00556687EA0214302167000 +B1329384529209N00556706EA0213702165000 +B1329414529223N00556727EA0213102161000 +B1329444529237N00556746EA0212702157000 +B1329474529251N00556764EA0212002155000 +B1329504529265N00556784EA0211602151000 +B1329534529282N00556802EA0210702147000 +B1329564529301N00556824EA0210602146000 +B1329594529315N00556845EA0210102142000 +B1330034529334N00556877EA0209302138000 +B1330064529349N00556900EA0209002134000 +B1330094529366N00556919EA0208402129000 +B1330124529383N00556938EA0208302124000 +B1330154529400N00556953EA0207602119000 +B1330184529419N00556971EA0207402114000 +B1330214529436N00556989EA0207002109000 +B1330244529453N00557007EA0206602104000 +B1330274529470N00557026EA0206402099000 +B1330304529486N00557046EA0205902094000 +B1330334529503N00557067EA0205502089000 +B1330364529520N00557088EA0205102084000 +B1330394529537N00557108EA0204702080000 +B1330424529554N00557130EA0204502075000 +B1330454529571N00557153EA0204102070000 +B1330484529587N00557176EA0204002066000 +B1330514529604N00557198EA0203902062000 +B1330544529620N00557220EA0203402058000 +B1330574529637N00557243EA0203302054000 +B1331004529654N00557264EA0203002051000 +B1331034529670N00557285EA0202802047000 +B1331064529686N00557306EA0202502044000 +B1331094529702N00557328EA0202102041000 +B1331124529718N00557350EA0201902038000 +B1331154529734N00557371EA0201602034000 +B1331194529755N00557400EA0201202030000 +B1331224529771N00557421EA0200902027000 +B1331254529787N00557442EA0200702024000 +B1331284529802N00557463EA0200502021000 +B1331314529817N00557484EA0200202018000 +B1331344529832N00557504EA0199902015000 +B1331374529847N00557523EA0199402012000 +B1331404529863N00557543EA0199202009000 +B1331434529877N00557563EA0198802006000 +B1331464529892N00557583EA0198302003000 +B1331494529908N00557603EA0197902000000 +B1331524529924N00557621EA0197401996000 +B1331554529940N00557641EA0197201993000 +B1331584529956N00557659EA0196701989000 +B1332014529973N00557679EA0196501986000 +B1332044529989N00557698EA0196201982000 +B1332074530004N00557718EA0195801979000 +B1332104530019N00557738EA0195501975000 +B1332134530034N00557757EA0195101972000 +B1332164530051N00557777EA0194801968000 +B1332194530067N00557795EA0194501965000 +B1332224530084N00557813EA0193901962000 +B1332254530100N00557833EA0193601958000 +B1332284530116N00557852EA0193001954000 +B1332314530131N00557873EA0192801950000 +B1332344530145N00557894EA0192501947000 +B1332384530166N00557923EA0192301942000 +B1332414530180N00557944EA0192001938000 +B1332444530194N00557964EA0191801935000 +B1332474530209N00557983EA0191501932000 +B1332504530224N00558002EA0191201928000 +B1332534530240N00558021EA0190901925000 +B1332564530255N00558040EA0190401922000 +B1332594530270N00558060EA0190001919000 +B1333024530285N00558080EA0189701915000 +B1333054530300N00558100EA0189101911000 +B1333084530315N00558121EA0188901908000 +B1333114530331N00558141EA0188701904000 +B1333144530345N00558161EA0188601901000 +B1333174530360N00558181EA0188301898000 +B1333204530374N00558201EA0188001895000 +B1333234530389N00558221EA0187701891000 +B1333264530404N00558240EA0187401888000 +B1333294530419N00558260EA0187101885000 +B1333324530434N00558280EA0186901883000 +B1333354530448N00558300EA0186501880000 +B1333384530463N00558320EA0186101877000 +B1333414530478N00558340EA0185801874000 +B1333444530492N00558361EA0185401871000 +B1333474530506N00558381EA0185001867000 +B1333504530520N00558402EA0184601864000 +B1333534530534N00558422EA0184301861000 +B1333574530553N00558450EA0183901856000 +B1334004530567N00558470EA0183601852000 +B1334034530582N00558490EA0183001848000 +B1334064530596N00558509EA0182601844000 +B1334094530611N00558529EA0182401840000 +B1334124530625N00558549EA0182001836000 +B1334154530639N00558569EA0181701833000 +B1334184530654N00558590EA0181301829000 +B1334214530668N00558610EA0181001825000 +B1334244530682N00558630EA0180501822000 +B1334274530697N00558650EA0180401818000 +B1334304530712N00558670EA0179901814000 +B1334334530726N00558690EA0179701811000 +B1334364530741N00558710EA0179301807000 +B1334394530755N00558730EA0179001804000 +B1334424530770N00558750EA0178701800000 +B1334454530785N00558768EA0178501797000 +B1334484530800N00558787EA0178201794000 +B1334514530815N00558805EA0177801791000 +B1334544530830N00558823EA0177501787000 +B1334574530845N00558841EA0177301784000 +B1335004530859N00558858EA0177001781000 +B1335034530874N00558876EA0176701778000 +B1335064530888N00558893EA0176401775000 +B1335094530902N00558911EA0176101771000 +B1335124530917N00558928EA0175601768000 +B1335164530936N00558951EA0175201763000 +B1335194530951N00558968EA0175001760000 +B1335224530965N00558985EA0174501757000 +B1335254530979N00559002EA0174001753000 +B1335284530993N00559019EA0173501749000 +B1335314531007N00559038EA0173301746000 +B1335344531021N00559057EA0173001742000 +B1335374531034N00559076EA0172701739000 +B1335404531048N00559096EA0172501735000 +B1335434531061N00559115EA0172301732000 +B1335464531074N00559135EA0171801728000 +B1335494531087N00559156EA0171601725000 +B1335524531100N00559176EA0171201722000 +B1335554531113N00559196EA0171101719000 +B1335584531127N00559216EA0170701716000 +B1336014531141N00559236EA0170501713000 +B1336044531155N00559255EA0170101710000 +B1336074531169N00559274EA0169701707000 +B1336104531183N00559293EA0169501704000 +B1336134531198N00559312EA0169101701000 +B1336164531212N00559330EA0168801698000 +B1336194531227N00559348EA0168401695000 +B1336224531242N00559366EA0167901692000 +B1336254531257N00559384EA0167601689000 +B1336284531272N00559402EA0167201685000 +B1336324531292N00559425EA0166801681000 +B1336354531306N00559443EA0166301677000 +B1336384531321N00559462EA0165801673000 +B1336414531335N00559479EA0165301669000 +B1336444531349N00559497EA0164801666000 +B1336474531364N00559515EA0164401662000 +B1336504531378N00559533EA0163801658000 +B1336534531393N00559551EA0163301653000 +B1336564531407N00559569EA0162801649000 +B1336594531421N00559587EA0162401645000 +B1337024531434N00559605EA0161901641000 +B1337054531448N00559624EA0161501637000 +B1337084531461N00559643EA0161101632000 +B1337114531474N00559662EA0160701628000 +B1337144531487N00559681EA0160301624000 +B1337174531500N00559700EA0159801620000 +B1337204531512N00559718EA0159201616000 +B1337234531526N00559737EA0158801612000 +B1337264531539N00559755EA0158401607000 +B1337294531552N00559774EA0158001603000 +B1337324531564N00559793EA0157601599000 +B1337354531576N00559811EA0157301595000 +B1337384531588N00559830EA0156901590000 +B1337414531600N00559849EA0156601586000 +B1337444531611N00559867EA0156301582000 +B1337484531627N00559893EA0156001577000 +B1337514531639N00559913EA0155801573000 +B1337544531651N00559933EA0155501569000 +B1337574531662N00559953EA0155301566000 +B1338004531674N00559973EA0155001562000 +B1338034531685N00559993EA0154701559000 +B1338064531696N00600014EA0154401555000 +B1338094531708N00600036EA0154101552000 +B1338124531719N00600058EA0153901549000 +B1338154531729N00600080EA0153601546000 +B1338184531739N00600104EA0153301543000 +B1338214531748N00600128EA0153001540000 +B1338244531757N00600152EA0152801537000 +B1338274531765N00600174EA0152701534000 +B1338304531774N00600197EA0152501531000 +B1338334531782N00600220EA0152401529000 +B1338364531790N00600243EA0152201526000 +B1338394531799N00600266EA0152101524000 +B1338424531807N00600290EA0151901521000 +B1338454531815N00600314EA0151701519000 +B1338484531823N00600339EA0151501517000 +B1338514531832N00600364EA0151301514000 +B1338544531841N00600389EA0150901512000 +B1338574531849N00600414EA0150501510000 +B1339004531858N00600439EA0150001507000 +B1339044531869N00600473EA0149601503000 +B1339074531876N00600496EA0149301500000 +B1339104531885N00600519EA0148801497000 +B1339134531893N00600542EA0148601494000 +B1339164531901N00600564EA0148201491000 +B1339194531909N00600588EA0148001488000 +B1339224531918N00600611EA0147601484000 +B1339254531927N00600634EA0147401481000 +B1339284531935N00600655EA0147201478000 +B1339314531941N00600677EA0146701475000 +B1339344531948N00600696EA0146101472000 +B1339374531955N00600718EA0145501468000 +B1339404531964N00600738EA0145101465000 +B1339434531975N00600756EA0144501461000 +B1339464531986N00600776EA0144101457000 +B1339494531995N00600797EA0143801453000 +B1339524532005N00600819EA0143401449000 +B1339554532015N00600839EA0143301446000 +B1339584532025N00600856EA0142701442000 +B1340014532035N00600873EA0142001438000 +B1340044532046N00600892EA0141401434000 +B1340074532055N00600912EA0141101430000 +B1340104532066N00600931EA0140701426000 +B1340134532076N00600951EA0140301422000 +B1340164532085N00600970EA0139701418000 +B1340194532096N00600991EA0139401413000 +B1340234532109N00601019EA0138901408000 +B1340264532120N00601041EA0139001404000 +B1340294532128N00601061EA0138801400000 +B1340324532138N00601081EA0138501396000 +B1340354532146N00601101EA0138401393000 +B1340384532153N00601127EA0138101390000 +B1340414532159N00601152EA0138301387000 +B1340444532162N00601175EA0137801385000 +B1340474532168N00601201EA0137401382000 +B1340504532175N00601223EA0137101380000 +B1340534532183N00601243EA0136601377000 +B1340564532190N00601265EA0136101374000 +B1340594532198N00601291EA0135801370000 +B1341024532206N00601314EA0135601367000 +B1341054532217N00601335EA0135801364000 +B1341084532229N00601353EA0136101362000 +B1341114532240N00601369EA0136601360000 +B1341144532251N00601385EA0137201359000 +B1341174532263N00601398EA0137401359000 +B1341204532274N00601405EA0136801359000 +B1341234532288N00601413EA0135801358000 +B1341264532302N00601428EA0135501356000 +B1341294532314N00601447EA0135401354000 +B1341324532325N00601465EA0135201353000 +B1341354532339N00601485EA0135401351000 +B1341384532352N00601504EA0135901350000 +B1341414532366N00601518EA0136401349000 +B1341444532379N00601525EA0136901349000 +B1341484532394N00601521EA0137401350000 +B1341514532398N00601511EA0137901350000 +B1341544532396N00601502EA0138401351000 +B1341574532387N00601497EA0139001352000 +B1342004532374N00601507EA0139501354000 +B1342034532367N00601534EA0139601356000 +B1342064532373N00601564EA0139901359000 +B1342094532387N00601578EA0140301361000 +B1342124532398N00601580EA0140601364000 +B1342154532409N00601575EA0140701367000 +B1342184532414N00601565EA0141101368000 +B1342214532415N00601555EA0141601370000 +B1342244532416N00601545EA0141601372000 +B1342274532409N00601536EA0142201375000 +B1342304532396N00601538EA0142501378000 +B1342334532384N00601553EA0142701382000 +B1342364532377N00601583EA0142701385000 +B1342394532383N00601613EA0142901387000 +B1342424532396N00601628EA0143101390000 +B1342454532407N00601628EA0143401393000 +B1342484532414N00601619EA0143601394000 +B1342514532419N00601607EA0144001396000 +B1342544532424N00601597EA0144101398000 +B1342574532426N00601586EA0144501399000 +B1343004532422N00601577EA0144901401000 +B1343034532409N00601578EA0145401405000 +B1343064532397N00601594EA0145801408000 +B1343104532395N00601635EA0145701413000 +B1343134532407N00601659EA0145901416000 +B1343164532421N00601663EA0146401420000 +B1343194532429N00601656EA0146501423000 +B1343224532435N00601646EA0146801425000 +B1343254532439N00601634EA0146601427000 +B1343284532440N00601621EA0147101430000 +B1343314532444N00601611EA0147401432000 +B1343344532445N00601597EA0147201435000 +B1343374532441N00601586EA0147201437000 +B1343404532432N00601583EA0146801438000 +B1343434532418N00601597EA0147001441000 +B1343464532413N00601626EA0147001443000 +B1343494532421N00601657EA0147201445000 +B1343524532436N00601671EA0147601447000 +B1343554532445N00601666EA0147601449000 +B1343584532442N00601655EA0147701451000 +B1344014532434N00601650EA0147901452000 +B1344044532428N00601644EA0147901453000 +B1344074532424N00601635EA0148601454000 +B1344104532427N00601626EA0148801456000 +B1344134532441N00601619EA0149201458000 +B1344164532456N00601629EA0149001460000 +B1344194532467N00601652EA0148501462000 +B1344224532464N00601680EA0147801463000 +B1344254532449N00601694EA0148101463000 +B1344284532436N00601704EA0148501464000 +B1344314532422N00601708EA0149201465000 +B1344344532413N00601707EA0149501465000 +B1344384532407N00601698EA0150001466000 +B1344414532409N00601687EA0150601467000 +B1344444532419N00601678EA0150301470000 +B1344474532435N00601678EA0150401472000 +B1344504532452N00601686EA0150401474000 +B1344534532467N00601703EA0150201476000 +B1344564532481N00601723EA0149601478000 +B1344594532494N00601750EA0149201478000 +B1345024532507N00601781EA0148801479000 +B1345054532520N00601812EA0149601479000 +B1345084532528N00601832EA0149501479000 +B1345114532538N00601852EA0148601479000 +B1345144532553N00601871EA0148801479000 +B1345174532565N00601884EA0148101478000 +B1345204532579N00601900EA0147401477000 +B1345234532596N00601924EA0147801475000 +B1345264532606N00601948EA0148701475000 +B1345294532610N00601965EA0147901474000 +B1345324532618N00601989EA0147601473000 +B1345354532627N00602020EA0147601472000 +B1345384532633N00602051EA0147801471000 +B1345414532646N00602076EA0146601469000 +B1345444532662N00602104EA0146801467000 +B1345474532673N00602128EA0146301466000 +B1345504532684N00602149EA0145301464000 +B1345534532695N00602172EA0144401461000 +B1345574532705N00602204EA0143401456000 +B1346004532717N00602232EA0141901451000 +B1346034532732N00602257EA0141501446000 +B1346064532744N00602280EA0140401440000 +B1346094532758N00602307EA0139501434000 +B1346124532770N00602333EA0138801428000 +B1346154532781N00602361EA0137701422000 +B1346184532792N00602392EA0136901416000 +B1346214532802N00602422EA0136301409000 +B1346244532810N00602452EA0135501402000 +B1346274532819N00602483EA0134901395000 +B1346304532827N00602512EA0135601389000 +B1346334532833N00602535EA0135401384000 +B1346364532843N00602560EA0134801379000 +B1346394532853N00602588EA0135101374000 +B1346424532860N00602615EA0135001369000 +B1346454532867N00602643EA0134401365000 +B1346484532873N00602670EA0134301360000 +B1346514532877N00602694EA0133301356000 +B1346544532884N00602723EA0132701351000 +B1346574532890N00602753EA0132501347000 +B1347004532894N00602782EA0132201342000 +B1347034532897N00602812EA0131601338000 +B1347064532902N00602842EA0131501333000 +B1347094532905N00602870EA0131401329000 +B1347124532905N00602897EA0131201325000 +B1347164532903N00602929EA0131101320000 +B1347194532901N00602953EA0130601316000 +B1347224532901N00602976EA0130501313000 +B1347254532903N00602998EA0130001310000 +B1347284532906N00603019EA0130101306000 +B1347314532911N00603038EA0129501303000 +B1347344532918N00603057EA0129601300000 +B1347374532927N00603071EA0129201297000 +B1347404532937N00603085EA0128901295000 +B1347434532949N00603095EA0128801292000 +B1347464532963N00603105EA0128701289000 +B1347494532976N00603114EA0129601287000 +B1347524532985N00603124EA0129301286000 +B1347554532995N00603134EA0129501284000 +B1347584533005N00603140EA0130301283000 +B1348014533015N00603141EA0130501283000 +B1348044533026N00603139EA0131101284000 +B1348074533035N00603135EA0131301284000 +B1348104533045N00603129EA0131701286000 +B1348134533054N00603129EA0131801287000 +B1348164533065N00603126EA0131401288000 +B1348194533077N00603124EA0131201289000 +B1348224533087N00603122EA0130601289000 +B1348254533100N00603122EA0131001289000 +B1348284533113N00603123EA0131501290000 +B1348314533124N00603120EA0131501291000 +B1348354533135N00603110EA0132001292000 +B1348384533140N00603106EA0132301293000 +B1348414533147N00603102EA0132401294000 +B1348444533155N00603100EA0133301295000 +B1348474533162N00603101EA0133401297000 +B1348504533172N00603097EA0134501299000 +B1348534533178N00603092EA0135201301000 +B1348564533184N00603083EA0135301303000 +B1348594533192N00603077EA0135901307000 +B1349024533201N00603079EA0136401311000 +B1349054533212N00603080EA0136901316000 +B1349084533220N00603072EA0137101320000 +B1349114533218N00603060EA0136901324000 +B1349144533203N00603060EA0137001328000 +B1349174533192N00603080EA0137001331000 +B1349204533196N00603105EA0137401333000 +B1349234533204N00603119EA0137601336000 +B1349264533214N00603126EA0137801339000 +B1349294533225N00603126EA0137701341000 +B1349324533237N00603124EA0137501343000 +B1349354533251N00603124EA0137401345000 +B1349384533265N00603120EA0137901347000 +B1349414533278N00603116EA0138501349000 +B1349444533288N00603106EA0139201352000 +B1349474533289N00603091EA0139701355000 +B1349504533277N00603080EA0140301358000 +B1349534533261N00603086EA0140901361000 +B1349564533254N00603109EA0141501365000 +B1349594533263N00603123EA0141901368000 +B1350024533274N00603114EA0142501372000 +B1350064533266N00603092EA0143501377000 +B1350094533250N00603090EA0144201382000 +B1350124533239N00603107EA0145201387000 +B1350154533239N00603129EA0145801392000 +B1350184533247N00603145EA0146201398000 +B1350214533260N00603144EA0146701403000 +B1350244533265N00603127EA0147401409000 +B1350274533253N00603112EA0148401415000 +B1350304533237N00603113EA0149101420000 +B1350334533222N00603130EA0150101426000 +B1350364533219N00603152EA0150501432000 +B1350394533231N00603167EA0151101438000 +B1350424533242N00603162EA0152101445000 +B1350454533245N00603148EA0152701451000 +B1350484533236N00603132EA0153801458000 +B1350514533221N00603125EA0154601465000 +B1350544533202N00603126EA0155501472000 +B1350574533188N00603142EA0156001480000 +B1351004533189N00603161EA0155901487000 +B1351034533200N00603174EA0157201494000 +B1351064533209N00603176EA0158201500000 +B1351094533214N00603164EA0159101508000 +B1351124533207N00603151EA0159501516000 +B1351154533189N00603149EA0160701525000 +B1351184533175N00603164EA0161401533000 +B1351214533170N00603185EA0161601541000 +B1351244533176N00603205EA0161701548000 +B1351274533189N00603212EA0162701555000 +B1351304533198N00603208EA0163801561000 +B1351334533205N00603200EA0164501566000 +B1351364533199N00603185EA0165101574000 +B1351404533177N00603195EA0165801584000 +B1351434533167N00603215EA0167101591000 +B1351464533167N00603230EA0167601599000 +B1351494533175N00603242EA0168401606000 +B1351524533184N00603243EA0169001612000 +B1351554533189N00603230EA0169901620000 +B1351584533183N00603216EA0170701628000 +B1352014533168N00603214EA0171001636000 +B1352044533152N00603229EA0171901643000 +B1352074533144N00603249EA0172901650000 +B1352104533145N00603267EA0173401658000 +B1352134533153N00603279EA0174201666000 +B1352164533165N00603281EA0175101674000 +B1352194533174N00603271EA0175701682000 +B1352224533170N00603254EA0176301689000 +B1352254533155N00603251EA0176701697000 +B1352284533142N00603269EA0177401703000 +B1352314533142N00603293EA0178501710000 +B1352344533149N00603313EA0180001717000 +B1352374533160N00603321EA0180801725000 +B1352404533168N00603309EA0181701733000 +B1352434533161N00603295EA0182201741000 +B1352464533146N00603292EA0182701749000 +B1352494533132N00603307EA0183401757000 +B1352524533126N00603330EA0184601764000 +B1352554533131N00603350EA0185201772000 +B1352584533144N00603350EA0186101780000 +B1353014533151N00603337EA0187101788000 +B1353044533147N00603321EA0187501796000 +B1353074533133N00603314EA0188001803000 +B1353104533119N00603326EA0188701810000 +B1353134533112N00603347EA0189401817000 +B1353164533112N00603369EA0190001824000 +B1353204533123N00603388EA0190201834000 +B1353234533134N00603388EA0190501840000 +B1353264533141N00603372EA0190901846000 +B1353294533140N00603353EA0191601853000 +B1353324533134N00603335EA0192101859000 +B1353354533119N00603326EA0192301865000 +B1353384533106N00603336EA0192501870000 +B1353414533098N00603358EA0193201875000 +B1353444533095N00603378EA0194001881000 +B1353474533101N00603390EA0193701886000 +B1353504533112N00603395EA0193701891000 +B1353534533122N00603383EA0193801895000 +B1353564533124N00603363EA0193601899000 +B1353594533120N00603342EA0193701902000 +B1354024533106N00603327EA0193901905000 +B1354054533090N00603323EA0193701908000 +B1354084533071N00603335EA0193701910000 +B1354114533065N00603359EA0193801911000 +B1354144533073N00603376EA0194201913000 +B1354174533082N00603387EA0193801915000 +B1354204533095N00603402EA0193701916000 +B1354234533105N00603418EA0194001918000 +B1354264533114N00603430EA0193601919000 +B1354294533127N00603439EA0193501920000 +B1354324533142N00603448EA0193001920000 +B1354354533158N00603459EA0192801920000 +B1354384533175N00603470EA0192301919000 +B1354414533191N00603483EA0192301918000 +B1354454533211N00603501EA0192201917000 +B1354484533228N00603516EA0192001916000 +B1354514533245N00603530EA0191801915000 +B1354544533262N00603542EA0191601914000 +B1354574533280N00603553EA0191201913000 +B1355004533298N00603564EA0191001912000 +B1355034533316N00603576EA0190501910000 +B1355064533336N00603588EA0190101908000 +B1355094533355N00603600EA0189901906000 +B1355124533372N00603612EA0189401904000 +B1355154533392N00603623EA0189101901000 +B1355184533412N00603635EA0188901899000 +B1355214533431N00603649EA0188901896000 +B1355244533447N00603663EA0189101894000 +B1355274533462N00603674EA0188601892000 +B1355304533480N00603682EA0187901890000 +B1355334533499N00603691EA0187301887000 +B1355364533517N00603701EA0186501884000 +B1355394533533N00603714EA0186501880000 +B1355424533548N00603729EA0186201877000 +B1355454533566N00603746EA0186401874000 +B1355484533585N00603759EA0186701871000 +B1355514533599N00603771EA0186301869000 +B1355544533617N00603780EA0185801866000 +B1355574533635N00603791EA0185801864000 +B1356004533654N00603801EA0185901862000 +B1356044533674N00603807EA0186401859000 +B1356074533680N00603806EA0186201859000 +B1356104533689N00603806EA0185501857000 +B1356134533701N00603813EA0185501856000 +B1356164533712N00603820EA0184101854000 +B1356194533731N00603833EA0183701851000 +B1356224533749N00603845EA0183601849000 +B1356254533768N00603858EA0182601846000 +B1356284533791N00603874EA0183001843000 +B1356314533807N00603888EA0183101840000 +B1356344533825N00603903EA0182201837000 +B1356374533842N00603920EA0182401835000 +B1356404533856N00603933EA0181601832000 +B1356434533874N00603949EA0181501829000 +B1356464533887N00603963EA0181001826000 +B1356494533903N00603976EA0180301823000 +B1356524533921N00603985EA0180501819000 +B1356554533936N00603993EA0180301816000 +B1356584533954N00604000EA0181301814000 +B1357014533968N00604001EA0182501813000 +B1357044533980N00603999EA0183001812000 +B1357074533993N00604012EA0183501813000 +B1357104533991N00604043EA0184401815000 +B1357144533977N00604058EA0184701817000 +B1357174533960N00604057EA0185201819000 +B1357204533955N00604041EA0186501822000 +B1357234533959N00604030EA0187201824000 +B1357264533972N00604026EA0188001829000 +B1357294533981N00604042EA0188801833000 +B1357324533971N00604059EA0189601838000 +B1357354533956N00604063EA0190701843000 +B1357384533944N00604057EA0191501849000 +B1357414533939N00604043EA0191901855000 +B1357444533944N00604030EA0191801861000 +B1357474533958N00604027EA0191901866000 +B1357504533975N00604034EA0192601871000 +B1357534533990N00604047EA0193701876000 +B1357564534003N00604064EA0194301882000 +B1357594534011N00604087EA0194501888000 +B1358024534005N00604110EA0194201893000 +B1358054533988N00604115EA0193901897000 +B1358084533978N00604102EA0194101900000 +B1358114533980N00604086EA0194701904000 +B1358154533987N00604063EA0195401908000 +B1358184533993N00604048EA0195801912000 +B1358214533999N00604037EA0195401916000 +B1358244534013N00604031EA0194901918000 +B1358274534028N00604037EA0195401921000 +B1358304534040N00604045EA0195101923000 +B1358334534055N00604056EA0195101925000 +B1358364534067N00604067EA0195801927000 +B1358394534078N00604075EA0195901930000 +B1358424534090N00604084EA0197101933000 +B1358454534100N00604089EA0197401936000 +B1358484534112N00604094EA0197501940000 +B1358514534124N00604098EA0197001943000 +B1358544534138N00604099EA0195901944000 +B1358574534154N00604102EA0194901945000 +B1359004534173N00604106EA0194401944000 +B1359034534190N00604115EA0193701943000 +B1359064534209N00604125EA0192101941000 +B1359094534233N00604140EA0191901937000 +B1359124534254N00604154EA0191201934000 +B1359154534278N00604169EA0190701930000 +B1359184534299N00604182EA0190501926000 +B1359214534319N00604196EA0189101922000 +B1359244534342N00604212EA0188101917000 +B1359274534363N00604228EA0187601912000 +B1359304534383N00604240EA0186701906000 +B1359344534414N00604254EA0185901898000 +B1359374534438N00604264EA0185101892000 +B1359404534461N00604277EA0184701885000 +B1359434534483N00604287EA0183801879000 +B1359464534505N00604297EA0183001873000 +B1359494534529N00604306EA0182501866000 +B1359524534551N00604315EA0182001860000 +B1359554534573N00604325EA0181401854000 +B1359584534595N00604335EA0180701848000 +B1400014534616N00604346EA0179801841000 +B1400044534638N00604357EA0179001834000 +B1400074534661N00604369EA0178201828000 +B1400104534684N00604381EA0177301821000 +B1400134534707N00604392EA0176701814000 +B1400164534730N00604403EA0175901807000 +B1400194534753N00604415EA0175301800000 +B1400224534777N00604426EA0174701793000 +B1400254534800N00604436EA0174201786000 +B1400284534824N00604446EA0173901780000 +B1400314534846N00604453EA0173101773000 +B1400344534869N00604461EA0172501767000 +B1400374534891N00604470EA0171801760000 +B1400404534913N00604479EA0171501754000 +B1400434534935N00604488EA0171101748000 +B1400464534957N00604492EA0170601742000 +B1400504534988N00604498EA0170101734000 +B1400534535011N00604504EA0170601729000 +B1400564535029N00604511EA0171301725000 +B1400594535044N00604519EA0171801723000 +B1401024535058N00604526EA0171801721000 +B1401054535073N00604527EA0171601719000 +B1401084535090N00604528EA0171601717000 +B1401114535105N00604529EA0171601716000 +B1401144535121N00604531EA0171701715000 +B1401174535139N00604532EA0171401714000 +B1401204535162N00604534EA0172001713000 +B1401234535181N00604543EA0172901713000 +B1401264535197N00604548EA0173301713000 +B1401294535214N00604551EA0173801714000 +B1401324535229N00604554EA0173801715000 +B1401354535244N00604551EA0173301716000 +B1401384535262N00604549EA0173101717000 +B1401414535282N00604556EA0173801717000 +B1401444535298N00604565EA0173801718000 +B1401474535316N00604576EA0173601718000 +B1401504535333N00604584EA0173701719000 +B1401534535350N00604591EA0173301719000 +B1401564535369N00604598EA0173401719000 +B1401594535387N00604603EA0173301720000 +B1402024535406N00604611EA0173601720000 +B1402054535422N00604618EA0173601721000 +B1402084535439N00604627EA0173701721000 +B1402124535462N00604634EA0173801722000 +B1402154535482N00604639EA0175001723000 +B1402184535498N00604642EA0176001725000 +B1402214535516N00604644EA0176701728000 +B1402244535535N00604650EA0178101732000 +B1402274535548N00604667EA0178901736000 +B1402304535549N00604693EA0179901741000 +B1402334535539N00604703EA0181201746000 +B1402364535532N00604700EA0182301749000 +B1402394535533N00604684EA0183401756000 +B1402424535547N00604676EA0184501764000 +B1402454535563N00604688EA0185301772000 +B1402484535567N00604713EA0186601780000 +B1402514535559N00604726EA0187501789000 +B1402544535552N00604719EA0188801795000 +B1402574535556N00604705EA0189601804000 +B1403004535572N00604701EA0190701814000 +B1403034535587N00604717EA0192201824000 +B1403064535595N00604737EA0193101834000 +B1403094535587N00604760EA0194101844000 +B1403124535576N00604760EA0195901853000 +B1403154535577N00604747EA0197101860000 +B1403184535588N00604738EA0198201872000 +B1403214535601N00604747EA0199401883000 +B1403244535602N00604772EA0200301894000 +B1403274535594N00604797EA0201401906000 +B1403304535579N00604803EA0202901917000 +B1403334535576N00604792EA0204201925000 +B1403364535584N00604779EA0205201938000 +B1403394535602N00604777EA0206501951000 +B1403424535614N00604796EA0207701964000 +B1403454535611N00604819EA0208401976000 +B1403484535597N00604835EA0209401991000 +B1403524535580N00604824EA0210902003000 +B1403554535585N00604808EA0212402015000 +B1403584535598N00604807EA0214002027000 +B1404014535611N00604821EA0215202039000 +B1404044535612N00604846EA0216102051000 +B1404074535599N00604862EA0217102062000 +B1404104535582N00604863EA0218402074000 +B1404134535575N00604850EA0219402086000 +B1404164535581N00604833EA0220402097000 +B1404194535595N00604824EA0221802109000 +B1404224535610N00604833EA0223102121000 +B1404254535617N00604853EA0223602132000 +B1404284535608N00604874EA0225002143000 +B1404314535595N00604873EA0226102154000 +B1404344535592N00604857EA0227402165000 +B1404374535603N00604842EA0228702177000 +B1404404535618N00604847EA0228902188000 +B1404434535626N00604872EA0229602198000 +B1404464535619N00604893EA0230802208000 +B1404494535607N00604901EA0231802219000 +B1404524535595N00604894EA0233002229000 +B1404554535595N00604875EA0234302240000 +B1404584535605N00604861EA0235002251000 +B1405014535619N00604860EA0235202261000 +B1405044535633N00604878EA0235902271000 +B1405074535632N00604902EA0236502280000 +B1405104535620N00604914EA0237202289000 +B1405134535604N00604914EA0238202298000 +B1405164535590N00604908EA0239202307000 +B1405194535578N00604897EA0240302316000 +B1405224535573N00604878EA0241302325000 +B1405264535583N00604855EA0241902337000 +B1405294535599N00604852EA0243202346000 +B1405324535611N00604866EA0243702354000 +B1405354535614N00604891EA0244402363000 +B1405384535606N00604905EA0244902371000 +B1405414535591N00604908EA0245102378000 +B1405444535578N00604898EA0245702386000 +B1405474535577N00604876EA0246402393000 +B1405504535587N00604860EA0247302400000 +B1405534535602N00604857EA0248102408000 +B1405564535618N00604858EA0248802415000 +B1405594535633N00604860EA0249102423000 +B1406024535647N00604861EA0249102430000 +B1406054535662N00604864EA0249302436000 +B1406084535678N00604871EA0249702442000 +B1406114535692N00604879EA0249802447000 +B1406144535707N00604890EA0250002452000 +B1406174535724N00604901EA0250302457000 +B1406204535742N00604909EA0250802461000 +B1406234535757N00604917EA0250902466000 +B1406264535777N00604922EA0251502470000 +B1406294535793N00604928EA0252102474000 +B1406324535810N00604937EA0252402479000 +B1406354535829N00604948EA0253502483000 +B1406384535848N00604958EA0254202488000 +B1406414535866N00604970EA0255102494000 +B1406444535882N00604979EA0255502499000 +B1406474535895N00604985EA0254902504000 +B1406504535912N00604995EA0254902509000 +B1406544535933N00605004EA0254602513000 +B1406574535951N00605013EA0254402516000 +B1407004535968N00605022EA0253202517000 +B1407034535992N00605036EA0252302517000 +B1407064536012N00605050EA0252302517000 +B1407094536031N00605061EA0251302516000 +B1407124536051N00605073EA0250502515000 +B1407154536070N00605086EA0249702512000 +B1407184536088N00605099EA0249102509000 +B1407214536106N00605114EA0248702506000 +B1407244536121N00605132EA0248302502000 +B1407274536138N00605148EA0247502499000 +B1407304536154N00605167EA0247302495000 +B1407334536168N00605185EA0246602491000 +B1407364536185N00605202EA0245402486000 +B1407394536204N00605215EA0244802481000 +B1407424536222N00605220EA0244502476000 +B1407454536239N00605225EA0244702472000 +B1407484536253N00605231EA0244902468000 +B1407514536265N00605240EA0245402465000 +B1407544536276N00605249EA0245602462000 +B1407574536288N00605259EA0245802460000 +B1408004536301N00605271EA0246102459000 +B1408034536314N00605284EA0246202458000 +B1408064536327N00605298EA0246502457000 +B1408094536342N00605306EA0246602456000 +B1408124536356N00605308EA0246202456000 +B1408154536368N00605312EA0245202456000 +B1408184536384N00605316EA0244002454000 +B1408224536411N00605320EA0243702450000 +B1408254536431N00605323EA0243302447000 +B1408284536451N00605329EA0243102444000 +B1408314536472N00605337EA0243002442000 +B1408344536491N00605348EA0242702439000 +B1408374536512N00605358EA0242302436000 +B1408404536537N00605368EA0241902433000 +B1408434536561N00605375EA0242002430000 +B1408464536584N00605380EA0241502428000 +B1408494536607N00605383EA0241202425000 +B1408524536630N00605386EA0240902422000 +B1408554536652N00605388EA0240202419000 +B1408584536675N00605392EA0239902416000 +B1409014536697N00605397EA0239202412000 +B1409044536721N00605401EA0238402408000 +B1409074536746N00605407EA0238102404000 +B1409104536770N00605415EA0237602400000 +B1409134536793N00605424EA0237002396000 +B1409164536817N00605433EA0236702392000 +B1409194536840N00605445EA0236402387000 +B1409224536862N00605457EA0235802383000 +B1409254536884N00605470EA0235002378000 +B1409284536907N00605485EA0234902374000 +B1409314536930N00605497EA0234202369000 +B1409344536955N00605509EA0233902365000 +B1409384536987N00605526EA0233702359000 +B1409414537009N00605541EA0233102355000 +B1409444537032N00605555EA0232802350000 +B1409474537055N00605569EA0232302346000 +B1409504537078N00605582EA0232002342000 +B1409534537100N00605595EA0231702338000 +B1409564537121N00605608EA0231002334000 +B1409594537145N00605621EA0230602329000 +B1410024537163N00605632EA0230302325000 +B1410054537179N00605642EA0229702320000 +B1410084537199N00605655EA0229302316000 +B1410114537221N00605671EA0229102312000 +B1410144537242N00605691EA0229202308000 +B1410174537262N00605713EA0229502304000 +B1410204537280N00605733EA0229702301000 +B1410234537299N00605752EA0230002299000 +B1410264537318N00605768EA0229902298000 +B1410294537337N00605785EA0229702296000 +B1410324537356N00605801EA0229502294000 +B1410354537374N00605820EA0229502293000 +B1410384537392N00605842EA0229802291000 +B1410414537409N00605865EA0229802290000 +B1410444537426N00605888EA0229902289000 +B1410474537442N00605911EA0230902289000 +B1410504537451N00605928EA0230802290000 +B1410534537463N00605944EA0231102290000 +B1410564537476N00605959EA0231702291000 +B1411004537489N00605980EA0231602292000 +B1411034537502N00605997EA0231702294000 +B1411064537515N00606014EA0231702295000 +B1411094537526N00606033EA0231802296000 +B1411124537532N00606051EA0231702297000 +B1411154537542N00606071EA0231402298000 +B1411184537553N00606087EA0231702298000 +B1411214537565N00606102EA0232402299000 +B1411244537574N00606116EA0232702301000 +B1411274537586N00606134EA0232702302000 +B1411304537599N00606148EA0233002304000 +B1411334537614N00606161EA0233102305000 +B1411364537630N00606174EA0233102307000 +B1411394537646N00606187EA0233002308000 +B1411424537663N00606200EA0233202309000 +B1411454537678N00606213EA0233002310000 +B1411484537693N00606221EA0233502311000 +B1411514537707N00606224EA0233402312000 +B1411544537723N00606223EA0233502313000 +B1411574537736N00606224EA0233202314000 +B1412004537749N00606226EA0232902314000 +B1412034537762N00606232EA0233002315000 +B1412064537775N00606238EA0233502315000 +B1412094537788N00606242EA0233802316000 +B1412124537799N00606245EA0233802318000 +B1412154537811N00606249EA0233402319000 +B1412184537826N00606253EA0233602320000 +B1412214537842N00606258EA0233702320000 +B1412254537861N00606263EA0233802322000 +B1412284537879N00606263EA0233602322000 +B1412314537897N00606264EA0233902323000 +B1412344537916N00606266EA0233902324000 +B1412374537937N00606269EA0234602325000 +B1412404537954N00606271EA0235602327000 +B1412434537969N00606269EA0236202329000 +B1412464537983N00606255EA0236902332000 +B1412494537986N00606230EA0237202335000 +B1412524537973N00606215EA0237402338000 +B1412554537958N00606226EA0238202341000 +B1412584537959N00606247EA0239102344000 +B1413014537970N00606261EA0240102348000 +B1413044537984N00606256EA0240502352000 +B1413074537996N00606237EA0241402357000 +B1413104538001N00606213EA0241502362000 +B1413134537991N00606192EA0241802367000 +B1413164537975N00606194EA0241902372000 +B1413194537967N00606212EA0242602376000 +B1413224537972N00606233EA0244002381000 +B1413254537979N00606245EA0244702387000 +B1413284537990N00606252EA0245002392000 +B1413314538003N00606247EA0245602398000 +B1413344538013N00606231EA0246202404000 +B1413374538012N00606210EA0246602409000 +B1413404538000N00606197EA0247502414000 +B1413434537987N00606201EA0248402420000 +B1413464537982N00606214EA0249102426000 +B1413494537985N00606227EA0249602432000 +B1413524537993N00606239EA0250102438000 +B1413564538009N00606238EA0250602446000 +B1413594538018N00606220EA0251402452000 +B1414024538013N00606201EA0251702458000 +B1414054537998N00606195EA0252802463000 +B1414084537990N00606206EA0253502469000 +B1414114537986N00606223EA0253902474000 +B1414144537991N00606238EA0254402480000 +B1414174538004N00606247EA0255102486000 +B1414204538018N00606248EA0255802492000 +B1414234538032N00606242EA0256402498000 +B1414264538042N00606225EA0256802504000 +B1414294538042N00606204EA0257002510000 +B1414324538029N00606192EA0256902515000 +B1414354538015N00606201EA0257002520000 +B1414384538015N00606222EA0257402524000 +B1414414538026N00606234EA0258302529000 +B1414444538041N00606239EA0258802534000 +B1414474538056N00606242EA0259102539000 +B1414504538071N00606242EA0259202544000 +B1414534538088N00606243EA0259202549000 +B1414564538105N00606243EA0259102553000 +B1414594538123N00606243EA0259102556000 +B1415024538141N00606240EA0258702559000 +B1415054538160N00606238EA0258502561000 +B1415084538177N00606234EA0258402563000 +B1415114538195N00606232EA0257702564000 +B1415144538214N00606234EA0257902565000 +B1415174538231N00606239EA0257602565000 +B1415214538255N00606247EA0257502565000 +B1415244538273N00606255EA0257102565000 +B1415274538292N00606261EA0257002564000 +B1415304538311N00606265EA0256702564000 +B1415334538331N00606271EA0256202563000 +B1415364538350N00606282EA0256502561000 +B1415394538366N00606290EA0256402561000 +B1415424538383N00606300EA0255802559000 +B1415454538399N00606309EA0255602558000 +B1415484538416N00606312EA0254402556000 +B1415514538437N00606313EA0253602553000 +B1415544538460N00606312EA0253202550000 +B1415574538483N00606313EA0252802547000 +B1416004538505N00606316EA0252202544000 +B1416034538525N00606324EA0251402540000 +B1416064538548N00606333EA0251002536000 +B1416094538572N00606340EA0250602533000 +B1416124538595N00606345EA0249902529000 +B1416154538617N00606353EA0249402524000 +B1416184538640N00606360EA0248602520000 +B1416214538665N00606372EA0248402515000 +B1416244538688N00606383EA0248002511000 +B1416274538711N00606394EA0247502506000 +B1416304538736N00606403EA0246802501000 +B1416334538761N00606413EA0246502497000 +B1416364538786N00606423EA0246302492000 +B1416394538810N00606436EA0246202488000 +B1416434538840N00606452EA0246002482000 +B1416464538862N00606464EA0245902479000 +B1416494538885N00606478EA0245602475000 +B1416524538907N00606491EA0245402471000 +B1416554538930N00606504EA0245002468000 +B1416584538953N00606517EA0244702465000 +B1417014538975N00606528EA0244602461000 +B1417044538996N00606539EA0243602458000 +B1417074539020N00606553EA0243102454000 +B1417104539043N00606567EA0242902450000 +B1417134539065N00606580EA0242002446000 +B1417164539089N00606595EA0241702442000 +B1417194539113N00606608EA0241302437000 +B1417224539137N00606620EA0240902433000 +B1417254539160N00606632EA0240202429000 +B1417284539184N00606648EA0240102424000 +B1417314539208N00606663EA0239802420000 +B1417344539232N00606679EA0239402416000 +B1417374539255N00606695EA0239202411000 +B1417404539278N00606712EA0238902408000 +B1417434539301N00606730EA0238802404000 +B1417464539324N00606746EA0238702401000 +B1417494539348N00606761EA0238502397000 +B1417524539371N00606775EA0238302394000 +B1417554539394N00606788EA0237602391000 +B1417584539417N00606801EA0236802388000 +B1418014539440N00606815EA0236402384000 +B1418054539471N00606833EA0235802379000 +B1418084539494N00606849EA0235102375000 +B1418114539515N00606865EA0234502370000 +B1418144539537N00606881EA0233702366000 +B1418174539560N00606897EA0233102361000 +B1418204539582N00606913EA0232502356000 +B1418234539605N00606930EA0231802351000 +B1418264539628N00606945EA0231102346000 +B1418294539652N00606960EA0230502340000 +B1418324539675N00606976EA0229802335000 +B1418354539698N00606991EA0229402329000 +B1418384539721N00607006EA0228802324000 +B1418414539743N00607021EA0228402318000 +B1418444539765N00607036EA0227802313000 +B1418474539788N00607052EA0227202308000 +B1418504539810N00607068EA0226702302000 +B1418534539831N00607083EA0226002297000 +B1418564539854N00607099EA0225402291000 +B1418594539877N00607115EA0224802285000 +B1419024539899N00607131EA0224202280000 +B1419054539921N00607148EA0223702274000 +B1419084539943N00607165EA0223302268000 +B1419114539964N00607181EA0222902263000 +B1419144539986N00607197EA0222502258000 +B1419174540008N00607212EA0222102252000 +B1419204540029N00607228EA0221802247000 +B1419244540060N00607250EA0221902241000 +B1419274540081N00607265EA0221602236000 +B1419304540102N00607280EA0221202232000 +B1419334540125N00607293EA0221002228000 +B1419364540147N00607306EA0220502224000 +B1419394540168N00607320EA0219902220000 +B1419424540190N00607336EA0219502216000 +B1419454540210N00607353EA0219002211000 +B1419484540231N00607371EA0218802207000 +B1419514540252N00607390EA0218402203000 +B1419544540274N00607407EA0218002199000 +B1419574540296N00607426EA0217902195000 +B1420004540317N00607444EA0217802192000 +B1420034540337N00607462EA0217502188000 +B1420064540357N00607481EA0217302185000 +B1420094540377N00607497EA0217002182000 +B1420124540396N00607515EA0216702179000 +B1420154540414N00607533EA0216502175000 +B1420184540430N00607552EA0216002172000 +B1420214540447N00607573EA0215602169000 +B1420244540464N00607593EA0215302165000 +B1420274540480N00607614EA0214702162000 +B1420304540498N00607633EA0213902158000 +B1420334540515N00607655EA0213302154000 +B1420364540532N00607676EA0212602149000 +B1420394540549N00607702EA0212202144000 +B1420434540571N00607733EA0212002138000 +B1420464540587N00607757EA0211602134000 +B1420494540603N00607778EA0211102130000 +B1420524540618N00607801EA0210702125000 +B1420554540633N00607822EA0210202121000 +B1420584540647N00607844EA0209502116000 +B1421014540661N00607865EA0208602111000 +B1421044540676N00607888EA0207802106000 +B1421074540692N00607911EA0207102100000 +B1421104540707N00607934EA0206102094000 +B1421134540723N00607959EA0205402088000 +B1421164540740N00607983EA0204802081000 +B1421194540756N00608005EA0203902075000 +B1421224540774N00608028EA0203302068000 +B1421254540790N00608051EA0202802062000 +B1421284540805N00608071EA0201802055000 +B1421314540822N00608093EA0201202048000 +B1421344540836N00608115EA0200502042000 +B1421374540851N00608137EA0199802035000 +B1421404540866N00608158EA0199502028000 +B1421434540881N00608177EA0198602022000 +B1421464540897N00608198EA0198102015000 +B1421494540910N00608220EA0197402009000 +B1421524540922N00608242EA0196302002000 +B1421554540936N00608268EA0195901996000 +B1421584540950N00608291EA0195201987000 +B1422024540970N00608321EA0194401980000 +B1422054540985N00608342EA0193701974000 +B1422084541001N00608365EA0193001967000 +B1422114541017N00608385EA0192801960000 +B1422144541031N00608408EA0192801955000 +B1422174541045N00608428EA0192701949000 +B1422204541061N00608448EA0192301944000 +B1422234541077N00608467EA0192101940000 +B1422264541092N00608485EA0191601935000 +B1422294541107N00608505EA0191101931000 +B1422324541122N00608526EA0190701927000 +B1422354541136N00608547EA0190101922000 +B1422384541149N00608567EA0189301918000 +B1422414541159N00608588EA0188801913000 +B1422444541168N00608608EA0188501908000 +B1422474541176N00608628EA0187701904000 +B1422504541188N00608654EA0187401899000 +B1422534541198N00608681EA0187601894000 +B1422564541208N00608704EA0187301890000 +B1422594541218N00608728EA0187201886000 +B1423024541229N00608752EA0186801883000 +B1423054541241N00608777EA0186601879000 +B1423084541254N00608803EA0186201876000 +B1423114541268N00608826EA0185801872000 +B1423144541281N00608851EA0185301868000 +B1423184541297N00608884EA0184601863000 +B1423214541309N00608909EA0184101859000 +B1423244541323N00608934EA0183501854000 +B1423274541336N00608960EA0182901850000 +B1423304541350N00608987EA0182201845000 +B1423334541364N00609015EA0181501840000 +B1423364541377N00609044EA0180601834000 +B1423394541391N00609071EA0180101829000 +B1423424541402N00609094EA0179201823000 +B1423454541414N00609117EA0178001817000 +B1423484541426N00609140EA0177501810000 +B1423514541434N00609160EA0177501803000 +B1423544541438N00609181EA0177301798000 +B1423574541446N00609198EA0177201792000 +B1424004541452N00609216EA0177301788000 +B1424034541458N00609235EA0176601784000 +B1424064541466N00609258EA0176301779000 +B1424094541474N00609284EA0176001775000 +B1424124541484N00609312EA0176301771000 +B1424154541497N00609335EA0177101768000 +B1424184541505N00609354EA0177901766000 +B1424214541512N00609374EA0179001766000 +B1424244541511N00609399EA0180301767000 +B1424274541502N00609424EA0181301769000 +B1424304541489N00609445EA0182201772000 +B1424334541469N00609455EA0183201776000 +B1424364541450N00609450EA0184401781000 +B1424394541441N00609436EA0185601786000 +B1424424541442N00609425EA0186801790000 +B1424464541450N00609434EA0188001797000 +B1424494541449N00609457EA0189401806000 +B1424524541437N00609477EA0190101815000 +B1424554541416N00609491EA0191301824000 +B1424584541396N00609495EA0192401834000 +B1425014541380N00609482EA0193801843000 +B1425044541373N00609467EA0194801853000 +B1425074541376N00609452EA0195901861000 +B1425104541382N00609450EA0196901867000 +B1425134541387N00609458EA0197901875000 +B1425164541387N00609479EA0199301887000 +B1425194541377N00609499EA0200301899000 +B1425224541358N00609511EA0201601910000 +B1425254541342N00609506EA0203201921000 +B1425284541333N00609493EA0204101933000 +B1425314541334N00609478EA0204901942000 +B1425344541340N00609473EA0206101948000 +B1425374541348N00609475EA0207401955000 +B1425404541351N00609488EA0208201967000 +B1425434541350N00609511EA0209401981000 +B1425464541335N00609532EA0210701994000 +B1425494541315N00609543EA0212102007000 +B1425524541295N00609537EA0213302020000 +B1425554541288N00609520EA0214502032000 +B1425584541291N00609507EA0216102043000 +B1426014541295N00609506EA0216802050000 +B1426044541300N00609519EA0218302062000 +B1426084541293N00609547EA0219402081000 +B1426114541276N00609566EA0220402094000 +B1426144541254N00609574EA0221802107000 +B1426174541234N00609566EA0223102120000 +B1426204541222N00609548EA0224602133000 +B1426234541218N00609532EA0225502146000 +B1426264541223N00609525EA0226402152000 +B1426294541227N00609530EA0227602159000 +B1426324541234N00609534EA0228602166000 +B1426354541240N00609536EA0230002174000 +B1426384541245N00609533EA0231202183000 +B1426414541250N00609529EA0232702192000 +B1426444541253N00609524EA0233602202000 +B1426474541250N00609508EA0234302218000 +B1426504541233N00609490EA0235202234000 +B1426534541211N00609482EA0236402249000 +B1426564541191N00609492EA0237702263000 +B1426594541180N00609511EA0238802275000 +B1427024541184N00609523EA0239902286000 +B1427054541188N00609524EA0241202292000 +B1427084541193N00609522EA0242002299000 +B1427114541198N00609523EA0243402307000 +B1427144541202N00609523EA0243602316000 +B1427174541209N00609521EA0244002324000 +B1427204541216N00609517EA0244502332000 +B1427234541222N00609513EA0244702340000 +B1427264541229N00609511EA0245102348000 +B1427294541235N00609514EA0244702355000 +B1427324541242N00609516EA0245102362000 +B1427354541250N00609516EA0244302371000 +B1427384541265N00609513EA0245302382000 +B1427424541281N00609516EA0246202394000 +B1427454541292N00609518EA0246502402000 +B1427484541307N00609523EA0246602410000 +B1427514541323N00609528EA0247302416000 +B1427544541335N00609534EA0248202423000 +B1427574541346N00609536EA0248102429000 +B1428004541360N00609537EA0248602434000 +B1428034541372N00609537EA0248902439000 +B1428064541385N00609539EA0249002444000 +B1428094541398N00609541EA0249602448000 +B1428124541409N00609547EA0249902453000 +B1428154541422N00609550EA0250602457000 +B1428184541433N00609547EA0251202462000 +B1428214541445N00609548EA0252202467000 +B1428244541455N00609547EA0253202473000 +B1428274541465N00609551EA0253802479000 +B1428304541478N00609556EA0254202484000 +B1428334541492N00609561EA0255502490000 +B1428364541502N00609566EA0256502497000 +B1428394541514N00609571EA0257802503000 +B1428424541526N00609572EA0258302510000 +B1428454541542N00609571EA0259802518000 +B1428484541555N00609569EA0260902526000 +B1428514541570N00609567EA0261502534000 +B1428544541586N00609572EA0262602542000 +B1428574541598N00609576EA0262502550000 +B1429004541614N00609580EA0263002557000 +B1429034541627N00609585EA0264302564000 +B1429064541639N00609588EA0264802572000 +B1429094541653N00609590EA0265402579000 +B1429124541667N00609589EA0265202586000 +B1429154541683N00609583EA0264402592000 +B1429184541704N00609578EA0264102596000 +B1429214541726N00609574EA0263602600000 +B1429254541757N00609565EA0263102604000 +B1429284541780N00609557EA0262902606000 +B1429314541803N00609552EA0262202607000 +B1429344541827N00609547EA0261602607000 +B1429374541850N00609541EA0261402607000 +B1429404541873N00609537EA0260902606000 +B1429434541894N00609536EA0260302605000 +B1429464541916N00609535EA0259202603000 +B1429494541940N00609534EA0258502600000 +B1429524541960N00609534EA0258002597000 +B1429554541979N00609535EA0256802594000 +B1429584541999N00609540EA0255802589000 +B1430014542020N00609540EA0255002584000 +B1430044542040N00609539EA0254602579000 +B1430074542058N00609536EA0254502574000 +B1430104542075N00609534EA0253902569000 +B1430134542094N00609534EA0253502564000 +B1430164542114N00609533EA0253002559000 +B1430194542134N00609532EA0252602555000 +B1430224542153N00609534EA0252302550000 +B1430254542173N00609536EA0252202546000 +B1430284542192N00609536EA0252002541000 +B1430314542212N00609538EA0251702537000 +B1430344542233N00609540EA0251202534000 +B1430374542255N00609543EA0250702530000 +B1430414542286N00609546EA0250302524000 +B1430444542309N00609549EA0249202520000 +B1430474542333N00609550EA0248502514000 +B1430504542355N00609552EA0247402509000 +B1430534542381N00609554EA0245702503000 +B1430564542406N00609554EA0244602497000 +B1430594542427N00609552EA0243102489000 +B1431024542450N00609547EA0241202480000 +B1431054542476N00609538EA0240902471000 +B1431084542494N00609527EA0240002462000 +B1431114542515N00609513EA0238402453000 +B1431144542537N00609495EA0237702443000 +B1431174542557N00609479EA0236802434000 +B1431204542578N00609463EA0235902425000 +B1431234542597N00609450EA0235902416000 +B1431264542613N00609438EA0235102408000 +B1431294542632N00609424EA0234602400000 +B1431324542650N00609410EA0234202392000 +B1431354542668N00609396EA0233502384000 +B1431384542687N00609384EA0232902377000 +B1431414542701N00609377EA0232802370000 +B1431444542712N00609369EA0231602364000 +B1431474542726N00609366EA0231402357000 +B1431504542738N00609363EA0230602350000 +B1431534542752N00609361EA0230002344000 +B1431564542765N00609361EA0229502337000 +B1431594542776N00609360EA0229002331000 +B1432034542795N00609353EA0227402322000 +B1432064542816N00609344EA0226602315000 +B1432094542834N00609337EA0226002307000 +B1432124542851N00609329EA0224702300000 +B1432154542871N00609320EA0223902292000 +B1432184542888N00609309EA0223002284000 +B1432214542905N00609295EA0221602275000 +B1432244542922N00609280EA0220802267000 +B1432274542939N00609267EA0219902258000 +B1432304542956N00609255EA0218902249000 +B1432334542974N00609242EA0218002240000 +B1432364542990N00609230EA0217702232000 +B1432394543005N00609220EA0216802223000 +B1432424543022N00609212EA0216102215000 +B1432454543037N00609203EA0215502207000 +B1432484543052N00609193EA0214402199000 +B1432514543068N00609184EA0213802191000 +B1432544543083N00609177EA0213002183000 +B1432574543099N00609171EA0212402175000 +B1433004543117N00609166EA0212002168000 +B1433034543135N00609161EA0211302160000 +B1433064543154N00609157EA0210702153000 +B1433094543171N00609152EA0210002146000 +B1433124543189N00609148EA0209302139000 +B1433154543208N00609142EA0208802132000 +B1433184543226N00609139EA0208202125000 +B1433214543245N00609136EA0207602119000 +B1433254543271N00609133EA0206902110000 +B1433284543289N00609130EA0206302103000 +B1433314543307N00609126EA0205602096000 +B1433344543325N00609123EA0204902089000 +B1433374543343N00609122EA0204302083000 +B1433404543362N00609122EA0203502076000 +B1433434543382N00609123EA0202902069000 +B1433464543402N00609126EA0202702063000 +B1433494543423N00609130EA0202702057000 +B1433524543443N00609136EA0203102052000 +B1433554543462N00609142EA0203302048000 +B1433584543479N00609145EA0203702045000 +B1434014543493N00609149EA0203602042000 +B1434044543512N00609150EA0203002039000 +B1434074543533N00609152EA0203502037000 +B1434104543550N00609152EA0203602035000 +B1434134543564N00609153EA0203302034000 +B1434164543579N00609155EA0202802032000 +B1434194543592N00609156EA0202302030000 +B1434224543611N00609153EA0201502027000 +B1434254543633N00609151EA0201902024000 +B1434284543649N00609153EA0201802022000 +B1434314543667N00609156EA0201502020000 +B1434344543688N00609157EA0201802018000 +B1434374543709N00609159EA0202002016000 +B1434404543731N00609164EA0202102015000 +B1434434543753N00609167EA0202202014000 +B1434474543782N00609169EA0201402013000 +B1434504543806N00609167EA0201302011000 +B1434534543826N00609165EA0201102009000 +B1434564543847N00609164EA0200202007000 +B1434594543868N00609166EA0200302005000 +B1435024543888N00609170EA0199702003000 +B1435054543912N00609174EA0199002000000 +B1435084543935N00609178EA0199201998000 +B1435114543955N00609181EA0198701995000 +B1435144543977N00609183EA0198501993000 +B1435174543995N00609185EA0197901990000 +B1435204544015N00609186EA0197401987000 +B1435234544035N00609187EA0197301984000 +B1435264544053N00609189EA0196801981000 +B1435294544074N00609194EA0196401978000 +B1435324544094N00609199EA0196501975000 +B1435354544113N00609204EA0195901972000 +B1435384544134N00609206EA0195601969000 +B1435414544154N00609209EA0195401965000 +B1435444544172N00609211EA0194901962000 +B1435474544191N00609215EA0194601959000 +B1435504544210N00609217EA0194201956000 +B1435534544229N00609221EA0193701952000 +B1435564544247N00609225EA0193401949000 +B1435594544265N00609229EA0192901945000 +B1436024544285N00609234EA0192501941000 +B1436054544303N00609239EA0192001937000 +B1436094544328N00609244EA0191801932000 +B1436124544345N00609248EA0191301928000 +B1436154544363N00609252EA0190801924000 +B1436184544382N00609256EA0190201920000 +B1436214544401N00609259EA0189701915000 +B1436244544419N00609260EA0189101911000 +B1436274544438N00609260EA0188601907000 +B1436304544457N00609262EA0188101902000 +B1436334544475N00609264EA0187501897000 +B1436364544494N00609266EA0186901893000 +B1436394544514N00609268EA0186501888000 +B1436424544532N00609272EA0186001883000 +B1436454544551N00609274EA0185401878000 +B1436484544570N00609276EA0185001873000 +B1436514544590N00609278EA0184601869000 +B1436544544609N00609282EA0184101864000 +B1436574544628N00609285EA0183401860000 +B1437004544647N00609289EA0182801856000 +B1437034544665N00609293EA0182101851000 +B1437064544684N00609298EA0181601847000 +B1437094544702N00609303EA0181201842000 +B1437124544720N00609309EA0180501837000 +B1437154544740N00609315EA0180101832000 +B1437184544760N00609322EA0179301827000 +B1437214544781N00609327EA0178401821000 +B1437244544802N00609333EA0177601815000 +B1437284544831N00609340EA0176601807000 +B1437314544853N00609344EA0175601800000 +B1437344544873N00609349EA0174901794000 +B1437374544891N00609356EA0174201787000 +B1437404544908N00609363EA0173801781000 +B1437434544923N00609370EA0173001775000 +B1437464544940N00609380EA0172701768000 +B1437494544956N00609392EA0172901763000 +B1437524544969N00609403EA0174001758000 +B1437554544976N00609414EA0174501754000 +B1437584544984N00609423EA0174701751000 +B1438014544994N00609434EA0175901750000 +B1438044544999N00609443EA0176301749000 +B1438074545006N00609450EA0176601750000 +B1438104545012N00609447EA0177101750000 +B1438134545013N00609436EA0177101750000 +B1438164545004N00609419EA0177501752000 +B1438194544986N00609410EA0178101753000 +B1438224544963N00609416EA0178901755000 +B1438254544947N00609437EA0179301758000 +B1438284544943N00609462EA0180101761000 +B1438314544948N00609474EA0180501763000 +B1438344544953N00609473EA0180501765000 +B1438374544952N00609458EA0180701768000 +B1438404544936N00609442EA0181301771000 +B1438434544914N00609443EA0182001774000 +B1438464544897N00609461EA0182501778000 +B1438494544893N00609485EA0182901781000 +B1438524544898N00609499EA0183201783000 +B1438564544907N00609505EA0183201785000 +B1438594544916N00609508EA0183301788000 +B1439024544929N00609512EA0182901791000 +B1439054544946N00609514EA0182901794000 +B1439084544962N00609520EA0183001796000 +B1439114544980N00609530EA0182801798000 +B1439144544998N00609541EA0182901799000 +B1439174545013N00609552EA0183501801000 +B1439204545025N00609563EA0183101803000 +B1439234545043N00609574EA0182801804000 +B1439264545060N00609587EA0183501806000 +B1439294545074N00609599EA0184401809000 +B1439324545085N00609607EA0185701812000 +B1439354545094N00609612EA0186701815000 +B1439384545100N00609603EA0187301818000 +B1439414545094N00609586EA0187701823000 +B1439444545075N00609577EA0188401828000 +B1439474545055N00609588EA0189301833000 +B1439504545046N00609611EA0190501839000 +B1439534545046N00609631EA0191601845000 +B1439564545053N00609645EA0192601851000 +B1439594545061N00609647EA0193301856000 +B1440024545068N00609637EA0194701860000 +B1440054545062N00609621EA0195201869000 +B1440084545045N00609612EA0195701877000 +B1440114545027N00609624EA0196401885000 +B1440144545019N00609647EA0197301893000 +B1440174545020N00609667EA0198301900000 +B1440204545028N00609679EA0199301908000 +B1440234545037N00609681EA0200501913000 +B1440264545044N00609677EA0201101918000 +B1440294545049N00609662EA0202101928000 +B1440334545041N00609634EA0203201941000 +B1440364545025N00609625EA0204001951000 +B1440394545008N00609636EA0204901961000 +B1440424545001N00609657EA0205801970000 +B1440454545006N00609673EA0207001979000 +B1440484545013N00609674EA0208101984000 +B1440514545021N00609665EA0208901994000 +B1440544545024N00609647EA0209902004000 +B1440574545017N00609627EA0210902015000 +B1441004545001N00609623EA0211502025000 +B1441034544992N00609640EA0212402034000 +B1441064544994N00609660EA0213902044000 +B1441094545001N00609671EA0214502054000 +B1441124545013N00609674EA0215102063000 +B1441154545023N00609663EA0215102072000 +B1441184545023N00609642EA0214902080000 +B1441214545015N00609624EA0214802087000 +B1441244544999N00609616EA0214502092000 +B1441274544979N00609615EA0215002098000 +B1441304544959N00609617EA0215702103000 +B1441334544939N00609623EA0217002108000 +B1441364544930N00609639EA0218102114000 +B1441394544930N00609658EA0219202120000 +B1441424544942N00609659EA0219802127000 +B1441454544945N00609638EA0220702134000 +B1441484544932N00609626EA0221502141000 +B1441514544917N00609632EA0222202148000 +B1441544544914N00609648EA0223202155000 +B1441574544923N00609655EA0224102162000 +B1442004544932N00609643EA0224602169000 +B1442044544929N00609616EA0224502179000 +B1442074544913N00609603EA0225002185000 +B1442104544897N00609607EA0225502191000 +B1442134544883N00609624EA0225802197000 +B1442164544870N00609643EA0226902203000 +B1442194544857N00609661EA0228102209000 +B1442224544854N00609681EA0229202216000 +B1442254544862N00609691EA0229902223000 +B1442284544872N00609682EA0230602230000 +B1442314544871N00609660EA0231402237000 +B1442344544863N00609645EA0232102244000 +B1442374544847N00609640EA0232502251000 +B1442404544834N00609654EA0233602258000 +B1442434544833N00609671EA0234402265000 +B1442464544838N00609685EA0235102273000 +B1442494544848N00609689EA0235202280000 +B1442524544858N00609677EA0234902287000 +B1442554544856N00609651EA0235102292000 +B1442584544847N00609628EA0235502298000 +B1443014544831N00609614EA0235902303000 +B1443044544814N00609613EA0236502308000 +B1443074544797N00609621EA0236802313000 +B1443104544783N00609637EA0237702319000 +B1443134544771N00609652EA0238302324000 +B1443164544764N00609672EA0239102330000 +B1443194544769N00609687EA0240002336000 +B1443224544779N00609686EA0240502342000 +B1443254544783N00609666EA0241102349000 +B1443284544776N00609642EA0241502355000 +B1443314544758N00609628EA0242102361000 +B1443344544740N00609630EA0242502367000 +B1443374544729N00609646EA0243102373000 +B1443404544728N00609662EA0243802378000 +B1443444544735N00609680EA0244602386000 +B1443474544744N00609688EA0245402392000 +B1443504544756N00609685EA0245802398000 +B1443534544765N00609668EA0246002404000 +B1443564544761N00609644EA0246402409000 +B1443594544745N00609629EA0246702415000 +B1444024544726N00609625EA0247202419000 +B1444054544710N00609633EA0247802424000 +B1444084544705N00609654EA0248602429000 +B1444114544710N00609670EA0249602434000 +B1444144544721N00609675EA0249902440000 +B1444174544734N00609672EA0249802446000 +B1444204544749N00609669EA0249002451000 +B1444234544770N00609663EA0248102454000 +B1444264544791N00609659EA0247902456000 +B1444294544810N00609657EA0247202458000 +B1444324544833N00609654EA0246202458000 +B1444354544855N00609651EA0245602458000 +B1444384544877N00609649EA0244502456000 +B1444414544899N00609649EA0244502454000 +B1444444544919N00609653EA0244202452000 +B1444474544939N00609658EA0243102449000 +B1444504544963N00609663EA0242902446000 +B1444534544985N00609668EA0242702443000 +B1444564545006N00609673EA0243502440000 +B1444594545021N00609681EA0244602439000 +B1445024545032N00609687EA0245002439000 +B1445054545046N00609694EA0245402439000 +B1445084545064N00609702EA0244902439000 +B1445124545095N00609713EA0245402439000 +B1445154545117N00609716EA0245202439000 +B1445184545139N00609718EA0245402439000 +B1445214545158N00609720EA0245602440000 +B1445244545178N00609725EA0244602440000 +B1445274545198N00609732EA0245002441000 +B1445304545214N00609734EA0244802441000 +B1445334545232N00609736EA0244102440000 +B1445364545252N00609736EA0243902440000 +B1445394545270N00609735EA0243202438000 +B1445424545290N00609733EA0242802437000 +B1445454545308N00609732EA0242402435000 +B1445484545328N00609732EA0241902432000 +B1445514545348N00609730EA0241402430000 +B1445544545366N00609729EA0240702427000 +B1445574545386N00609727EA0240002423000 +B1446004545406N00609723EA0239502419000 +B1446034545424N00609721EA0238802416000 +B1446064545444N00609720EA0237902411000 +B1446094545465N00609719EA0237402406000 +B1446124545486N00609718EA0236502401000 +B1446154545506N00609718EA0236102396000 +B1446184545525N00609717EA0235302391000 +B1446214545545N00609714EA0234402386000 +B1446244545566N00609712EA0234102380000 +B1446274545585N00609711EA0233902375000 +B1446314545609N00609711EA0233102367000 +B1446344545630N00609712EA0232702362000 +B1446374545649N00609713EA0232502356000 +B1446404545668N00609714EA0231902351000 +B1446434545688N00609717EA0231702346000 +B1446464545706N00609721EA0231702342000 +B1446494545725N00609725EA0231102337000 +B1446524545744N00609728EA0231102333000 +B1446554545762N00609728EA0231002329000 +B1446584545780N00609725EA0231302325000 +B1447014545795N00609723EA0232602323000 +B1447044545802N00609715EA0233502322000 +B1447074545811N00609714EA0234102323000 +B1447104545820N00609725EA0234802323000 +B1447134545818N00609749EA0235602325000 +B1447164545802N00609765EA0236302327000 +B1447194545784N00609760EA0236802329000 +B1447224545773N00609741EA0237302332000 +B1447254545777N00609724EA0238002335000 +B1447284545788N00609720EA0238902339000 +B1447314545799N00609729EA0239802344000 +B1447344545804N00609748EA0240702349000 +B1447374545796N00609766EA0241702354000 +B1447404545782N00609778EA0242102360000 +B1447434545765N00609772EA0242602365000 +B1447464545760N00609754EA0243502370000 +B1447494545767N00609745EA0244402375000 +B1447524545778N00609750EA0244902381000 +B1447554545784N00609766EA0245902388000 +B1447584545784N00609785EA0246402394000 +B1448014545772N00609801EA0247002401000 +B1448044545756N00609797EA0247502408000 +B1448084545750N00609770EA0248302416000 +B1448114545759N00609759EA0249002422000 +B1448144545771N00609760EA0249602428000 +B1448174545786N00609768EA0250102435000 +B1448204545804N00609778EA0250002441000 +B1448234545827N00609791EA0250602447000 +B1448264545846N00609806EA0251402452000 +B1448294545861N00609820EA0251002458000 +B1448324545880N00609838EA0250302463000 +B1448354545900N00609855EA0249802466000 +B1448384545919N00609873EA0249902469000 +B1448414545934N00609892EA0249202472000 +B1448444545951N00609913EA0247702473000 +B1448474545973N00609936EA0247702474000 +B1448504545993N00609957EA0247502474000 +B1448534546014N00609976EA0247802474000 +B1448564546034N00609989EA0247902473000 +B1448594546051N00609999EA0247102473000 +B1449024546070N00610014EA0247402472000 +B1449054546082N00610023EA0247602471000 +B1449084546095N00610030EA0246602471000 +B1449114546114N00610045EA0246402469000 +B1449144546133N00610058EA0245602467000 +B1449174546155N00610073EA0244702465000 +B1449204546178N00610091EA0245202462000 +B1449234546197N00610108EA0245602460000 +B1449264546214N00610126EA0245902458000 +B1449294546233N00610145EA0245702457000 +B1449324546252N00610167EA0245702456000 +B1449364546277N00610193EA0245202454000 +B1449394546296N00610213EA0244502453000 +B1449424546315N00610231EA0243302450000 +B1449454546335N00610252EA0242202447000 +B1449484546355N00610272EA0241602443000 +B1449514546376N00610293EA0240602439000 +B1449544546396N00610316EA0240202434000 +B1449574546415N00610339EA0239502430000 +B1450004546434N00610362EA0238902425000 +B1450034546453N00610385EA0238902420000 +B1450064546470N00610406EA0238402415000 +B1450094546488N00610429EA0238002410000 +B1450124546506N00610450EA0238002406000 +B1450154546523N00610472EA0237702401000 +B1450184546540N00610498EA0237602397000 +B1450214546553N00610526EA0237502393000 +B1450244546563N00610555EA0236802389000 +B1450274546575N00610588EA0236702385000 +B1450304546587N00610618EA0236602381000 +B1450334546599N00610647EA0236202378000 +B1450364546612N00610675EA0235802374000 +B1450394546624N00610704EA0235302370000 +B1450424546636N00610735EA0235002367000 +B1450454546649N00610762EA0235102363000 +B1450484546660N00610788EA0234602360000 +B1450514546672N00610812EA0233902357000 +B1450544546686N00610835EA0233502354000 +B1450574546697N00610857EA0232802351000 +B1451004546709N00610880EA0232102347000 +B1451044546724N00610911EA0230902342000 +B1451074546736N00610932EA0230202337000 +B1451104546746N00610958EA0229602332000 +B1451134546757N00610987EA0229102327000 +B1451164546771N00611014EA0229702322000 +B1451194546778N00611037EA0230302319000 +B1451224546783N00611057EA0230102316000 +B1451254546795N00611080EA0229702312000 +B1451284546806N00611105EA0230502310000 +B1451314546816N00611122EA0230202308000 +B1451344546828N00611139EA0229802306000 +B1451374546845N00611157EA0229502303000 +B1451404546861N00611177EA0229402301000 +B1451434546877N00611198EA0229102299000 +B1451464546892N00611219EA0228702297000 +B1451494546908N00611241EA0228402294000 +B1451524546924N00611262EA0227902292000 +B1451554546940N00611283EA0227402289000 +B1451584546957N00611307EA0227002287000 +B1452014546974N00611330EA0226702284000 +B1452044546993N00611352EA0226402281000 +B1452074547011N00611373EA0226302278000 +B1452104547027N00611395EA0226202275000 +B1452134547043N00611417EA0224902273000 +B1452164547063N00611440EA0224402269000 +B1452194547082N00611465EA0223902266000 +B1452234547109N00611496EA0223102261000 +B1452264547130N00611518EA0222702257000 +B1452294547150N00611536EA0222102253000 +B1452324547170N00611555EA0221402248000 +B1452354547191N00611575EA0220602244000 +B1452384547211N00611595EA0219702238000 +B1452414547231N00611615EA0219302233000 +B1452444547250N00611638EA0218602227000 +B1452474547269N00611660EA0218102222000 +B1452504547286N00611682EA0217102216000 +B1452534547305N00611704EA0216402210000 +B1452564547324N00611726EA0215702204000 +B1452594547343N00611748EA0215302198000 +B1453024547360N00611770EA0214902192000 +B1453054547379N00611787EA0214602186000 +B1453084547396N00611799EA0214302180000 +B1453114547415N00611813EA0213702175000 +B1453144547435N00611832EA0213702169000 +B1453174547452N00611849EA0213302164000 +B1453204547469N00611867EA0213002160000 +B1453234547485N00611886EA0212702155000 +B1453264547499N00611904EA0212102151000 +B1453294547515N00611925EA0211702146000 +B1453324547530N00611947EA0211302141000 +B1453354547544N00611967EA0210902137000 +B1453384547560N00611987EA0210402132000 +B1453414547575N00612007EA0209902128000 +B1453454547595N00612035EA0209602121000 +B1453484547609N00612056EA0209002117000 +B1453514547624N00612077EA0208402112000 +B1453544547639N00612099EA0207902107000 +B1453574547653N00612120EA0207402102000 +B1454004547668N00612141EA0206702097000 +B1454034547684N00612163EA0206302091000 +B1454064547700N00612184EA0205902086000 +B1454094547715N00612205EA0205402081000 +B1454124547730N00612229EA0205102076000 +B1454154547744N00612253EA0205002072000 +B1454184547758N00612276EA0204602067000 +B1454214547772N00612299EA0204202063000 +B1454244547786N00612322EA0204002058000 +B1454274547801N00612345EA0203702054000 +B1454304547814N00612367EA0203402050000 +B1454334547828N00612389EA0203102046000 +B1454364547841N00612410EA0202702042000 +B1454394547854N00612433EA0202302038000 +B1454424547867N00612455EA0201802035000 +B1454454547879N00612478EA0201202030000 +B1454484547892N00612503EA0200902026000 +B1454514547904N00612527EA0200402022000 +B1454544547916N00612552EA0200002017000 +B1454574547928N00612576EA0199602013000 +B1455004547940N00612599EA0198902008000 +B1455044547957N00612629EA0198602002000 +B1455074547969N00612650EA0197901997000 +B1455104547982N00612671EA0197401992000 +B1455134547995N00612692EA0196801987000 +B1455164548007N00612713EA0196201982000 +B1455194548019N00612736EA0195801977000 +B1455224548031N00612759EA0195401971000 +B1455254548041N00612783EA0194801966000 +B1455284548052N00612808EA0194101961000 +B1455314548063N00612833EA0193601956000 +B1455344548075N00612858EA0193101950000 +B1455374548087N00612882EA0192601945000 +B1455404548099N00612905EA0192101940000 +B1455434548113N00612928EA0191801934000 +B1455464548126N00612950EA0191401929000 +B1455494548138N00612972EA0190901924000 +B1455524548151N00612995EA0190401920000 +B1455554548163N00613020EA0190201915000 +B1455584548174N00613045EA0189701910000 +B1456014548185N00613069EA0189201906000 +B1456044548196N00613095EA0188901901000 +B1456074548207N00613120EA0188301897000 +B1456104548219N00613145EA0187901893000 +B1456134548231N00613169EA0187601888000 +B1456164548243N00613195EA0187001884000 +B1456204548258N00613229EA0186801878000 +B1456234548269N00613255EA0186301874000 +B1456264548280N00613281EA0185901870000 +B1456294548292N00613307EA0185401866000 +B1456324548304N00613333EA0185201862000 +B1456354548315N00613358EA0184801858000 +B1456384548326N00613384EA0184601854000 +B1456414548337N00613409EA0184001850000 +B1456444548348N00613434EA0183701846000 +B1456474548360N00613458EA0183201842000 +B1456504548372N00613480EA0182601838000 +B1456534548385N00613503EA0182201834000 +B1456564548398N00613525EA0181801830000 +B1456594548410N00613547EA0181301825000 +B1457024548421N00613572EA0180801821000 +B1457054548431N00613597EA0180301817000 +B1457084548441N00613623EA0179801812000 +B1457114548450N00613649EA0179101808000 +B1457144548460N00613674EA0178301803000 +B1457174548471N00613700EA0177801798000 +B1457204548483N00613724EA0177401793000 +B1457234548494N00613747EA0176901788000 +B1457264548505N00613770EA0176301783000 +B1457294548516N00613794EA0175801778000 +B1457324548526N00613817EA0175301773000 +B1457364548539N00613851EA0174801766000 +B1457394548548N00613877EA0174401761000 +B1457424548556N00613903EA0174001756000 +B1457454548564N00613930EA0173601751000 +B1457484548573N00613957EA0173301747000 +B1457514548582N00613982EA0172901742000 +B1457544548592N00614008EA0172501737000 +B1457574548603N00614031EA0172001733000 +B1458004548614N00614055EA0171701729000 +B1458034548624N00614078EA0171301724000 +B1458064548635N00614102EA0170901720000 +B1458094548648N00614124EA0170501716000 +B1458124548658N00614147EA0170101712000 +B1458154548670N00614170EA0170001707000 +B1458184548681N00614192EA0169601703000 +B1458214548692N00614216EA0169001699000 +B1458244548705N00614239EA0168801695000 +B1458274548717N00614262EA0168301691000 +B1458304548728N00614285EA0167701687000 +B1458334548739N00614310EA0167201682000 +B1458364548751N00614333EA0166801678000 +B1458394548762N00614356EA0166401674000 +B1458424548773N00614380EA0166101669000 +B1458454548785N00614403EA0165601665000 +B1458484548796N00614426EA0165301661000 +B1458514548808N00614450EA0164801657000 +B1458554548823N00614482EA0164301652000 +B1458584548836N00614507EA0164101647000 +B1459014548848N00614530EA0163601643000 +B1459044548860N00614555EA0163201639000 +B1459074548873N00614581EA0162801635000 +B1459104548885N00614606EA0162701631000 +B1459134548895N00614631EA0162201628000 +B1459164548907N00614656EA0161701624000 +B1459194548920N00614680EA0161401620000 +B1459224548932N00614703EA0160601616000 +B1459254548945N00614727EA0160501612000 +B1459284548955N00614750EA0160601609000 +B1459314548963N00614774EA0160601605000 +B1459344548974N00614797EA0161101603000 +B1459374548982N00614824EA0162601602000 +B1459404548987N00614847EA0163601602000 +B1459434548993N00614866EA0164501604000 +B1459464549000N00614876EA0165401606000 +B1459494549001N00614867EA0166201609000 +B1459524548984N00614862EA0167601613000 +B1459554548968N00614883EA0168601618000 +B1459584548963N00614910EA0169301622000 +B1500014548969N00614927EA0170301627000 +B1500044548973N00614925EA0171101630000 +B1500074548964N00614915EA0172001636000 +B1500104548942N00614924EA0172901643000 +B1500134548927N00614952EA0173901651000 +B1500174548929N00614988EA0175001661000 +B1500204548935N00614992EA0176101667000 +B1500234548930N00614983EA0177101674000 +B1500264548911N00614985EA0178201684000 +B1500294548893N00615010EA0179201694000 +B1500324548890N00615041EA0180201703000 +B1500354548894N00615058EA0181501713000 +B1500384548901N00615060EA0182701718000 +B1500414548901N00615050EA0183701724000 +B1500444548891N00615038EA0185301737000 +B1500474548873N00615039EA0186401749000 +B1500504548851N00615058EA0187301761000 +B1500534548839N00615091EA0188401772000 +B1500564548840N00615117EA0189401783000 +B1500594548844N00615128EA0190001792000 +B1501024548852N00615124EA0190401800000 +B1501054548861N00615112EA0191501811000 +B1501084548869N00615103EA0192901820000 +B1501114548869N00615086EA0194601831000 +B1501144548856N00615071EA0196101842000 +B1501174548833N00615072EA0197601853000 +B1501204548818N00615094EA0199101864000 +B1501234548813N00615117EA0200301876000 +B1501264548819N00615117EA0201101882000 +B1501294548814N00615098EA0202901895000 +B1501324548795N00615088EA0204201908000 +B1501354548776N00615104EA0205201921000 +B1501384548774N00615126EA0206501933000 +B1501414548777N00615126EA0207201940000 +B1501444548777N00615109EA0208801952000 +B1501474548767N00615088EA0209801966000 +B1501504548748N00615071EA0210501980000 +B1501534548726N00615076EA0210701993000 +B1501564548708N00615097EA0210902004000 +B1501594548706N00615120EA0211802014000 +B1502024548712N00615126EA0213102021000 +B1502064548715N00615125EA0213002029000 +B1502094548723N00615120EA0212802037000 +B1502124548734N00615122EA0214402048000 +B1502154548739N00615125EA0215102053000 +B1502184548750N00615125EA0215902063000 +B1502214548757N00615118EA0216702072000 +B1502244548755N00615101EA0216802082000 +B1502274548737N00615086EA0217002091000 +B1502304548713N00615088EA0216902100000 +B1502334548696N00615108EA0217402107000 +B1502364548693N00615125EA0217802113000 +B1502394548700N00615132EA0218402117000 +B1502424548707N00615133EA0219002120000 +B1502454548715N00615134EA0219002124000 +B1502484548727N00615135EA0219502131000 +B1502514548737N00615139EA0219902137000 +B1502544548744N00615142EA0220302140000 +B1502574548750N00615141EA0220402144000 +B1503004548756N00615137EA0219702147000 +B1503034548768N00615132EA0219002153000 +B1503064548783N00615131EA0218902158000 +B1503094548799N00615129EA0218302161000 +B1503124548816N00615134EA0218102163000 +B1503154548831N00615137EA0217602165000 +B1503184548846N00615143EA0216702166000 +B1503214548864N00615154EA0216502165000 +B1503244548881N00615168EA0216502165000 +B1503274548897N00615181EA0216102164000 +B1503304548914N00615195EA0215802163000 +B1503334548931N00615210EA0215302161000 +B1503374548955N00615227EA0215202159000 +B1503404548970N00615233EA0214802158000 +B1503434548985N00615238EA0214102155000 +B1503464549002N00615247EA0213702152000 +B1503494549019N00615256EA0213202149000 +B1503524549037N00615267EA0212902146000 +B1503554549055N00615277EA0212402142000 +B1503584549074N00615288EA0211902138000 +B1504014549094N00615297EA0211502134000 +B1504044549113N00615306EA0211102130000 +B1504074549132N00615315EA0210502127000 +B1504104549152N00615324EA0210202123000 +B1504134549171N00615333EA0209902119000 +B1504164549191N00615342EA0209602116000 +B1504194549211N00615348EA0209402112000 +B1504224549230N00615356EA0209202109000 +B1504254549248N00615363EA0208802106000 +B1504284549267N00615368EA0208602102000 +B1504314549286N00615374EA0208302099000 +B1504344549304N00615381EA0208102096000 +B1504374549321N00615388EA0207502093000 +B1504404549339N00615396EA0207002089000 +B1504434549357N00615405EA0206702086000 +B1504464549374N00615414EA0206002082000 +B1504494549391N00615424EA0205502078000 +B1504534549415N00615441EA0205102073000 +B1504564549432N00615455EA0204802069000 +B1504594549450N00615465EA0204302065000 +B1505024549467N00615473EA0203702060000 +B1505054549485N00615481EA0203302056000 +B1505084549503N00615487EA0202502052000 +B1505114549520N00615494EA0201902047000 +B1505144549538N00615498EA0201002042000 +B1505174549557N00615503EA0200102037000 +B1505204549575N00615507EA0199302031000 +B1505234549596N00615511EA0198802025000 +B1505264549618N00615517EA0199002020000 +B1505294549638N00615523EA0198902015000 +B1505324549659N00615529EA0198902011000 +B1505354549680N00615535EA0199102007000 +B1505384549700N00615543EA0199302004000 +B1505414549720N00615551EA0199202001000 +B1505444549741N00615559EA0199501998000 +B1505474549760N00615569EA0199701996000 +B1505504549777N00615580EA0199001995000 +B1505534549797N00615589EA0198801993000 +B1505564549814N00615596EA0198501991000 +B1505594549832N00615601EA0197301988000 +B1506024549851N00615602EA0196801985000 +B1506054549869N00615602EA0196101981000 +B1506084549891N00615603EA0196201978000 +B1506114549910N00615603EA0195901974000 +B1506154549935N00615604EA0195301969000 +B1506184549955N00615603EA0195601966000 +B1506214549975N00615607EA0196101963000 +B1506244549996N00615610EA0196401961000 +B1506274550015N00615615EA0196801959000 +B1506304550035N00615621EA0196701958000 +B1506334550056N00615628EA0196801957000 +B1506364550076N00615633EA0197101956000 +B1506394550095N00615645EA0197101956000 +B1506424550114N00615652EA0197201956000 +B1506454550132N00615653EA0197201956000 +B1506484550152N00615652EA0197001956000 +B1506514550171N00615653EA0196901956000 +B1506544550192N00615651EA0196301955000 +B1506574550212N00615646EA0196301955000 +B1507004550231N00615639EA0195601954000 +B1507034550250N00615629EA0195301952000 +B1507064550268N00615620EA0195001951000 +B1507094550287N00615616EA0194901949000 +B1507124550305N00615610EA0194801947000 +B1507154550324N00615606EA0195301946000 +B1507184550341N00615602EA0195901945000 +B1507214550354N00615604EA0196201945000 +B1507244550365N00615600EA0195901945000 +B1507274550375N00615590EA0196501946000 +B1507304550383N00615585EA0196801946000 +B1507344550396N00615580EA0196901947000 +B1507374550406N00615574EA0197201948000 +B1507404550417N00615566EA0197101949000 +B1507434550429N00615561EA0197801950000 +B1507464550435N00615557EA0198201951000 +B1507494550440N00615554EA0198301952000 +B1507524550448N00615545EA0198101954000 +B1507554550458N00615537EA0198501955000 +B1507584550467N00615533EA0199201957000 +B1508014550472N00615526EA0200201958000 +B1508044550475N00615521EA0200701960000 +B1508074550477N00615512EA0201001962000 +B1508104550479N00615505EA0201501965000 +B1508134550484N00615503EA0201201967000 +B1508164550492N00615497EA0201101970000 +B1508194550501N00615491EA0201801974000 +B1508224550510N00615486EA0202301978000 +B1508254550519N00615478EA0202901982000 +B1508284550529N00615472EA0203001986000 +B1508314550542N00615464EA0203601990000 +B1508344550554N00615456EA0204401994000 +B1508374550566N00615450EA0204901999000 +B1508404550577N00615446EA0205602003000 +B1508434550586N00615441EA0206502008000 +B1508464550596N00615439EA0207002013000 +B1508494550605N00615436EA0207302018000 +B1508524550615N00615430EA0207302023000 +B1508554550631N00615423EA0207402027000 +B1508584550647N00615415EA0207902031000 +B1509024550669N00615406EA0207902036000 +B1509054550686N00615396EA0208002040000 +B1509084550704N00615388EA0208402043000 +B1509114550722N00615385EA0209402046000 +B1509144550738N00615385EA0210102050000 +B1509174550754N00615384EA0210102054000 +B1509204550772N00615383EA0209702058000 +B1509234550793N00615382EA0210202061000 +B1509264550813N00615385EA0211102064000 +B1509294550830N00615390EA0211802068000 +B1509324550843N00615393EA0212502072000 +B1509354550856N00615393EA0213302076000 +B1509384550868N00615394EA0213802081000 +B1509414550882N00615399EA0214402085000 +B1509444550894N00615420EA0215002090000 +B1509474550904N00615446EA0215702095000 +B1509504550911N00615476EA0216202100000 +B1509534550906N00615504EA0216502105000 +B1509564550894N00615523EA0216702110000 +B1509594550881N00615525EA0216802114000 +B1510024550870N00615520EA0216802119000 +B1510054550857N00615508EA0217202123000 +B1510084550846N00615498EA0217902127000 +B1510114550839N00615493EA0218102130000 +B1510144550840N00615484EA0218802132000 +B1510174550848N00615479EA0219602135000 +B1510204550858N00615485EA0219902141000 +B1510234550869N00615504EA0220502147000 +B1510264550870N00615533EA0221102152000 +B1510294550863N00615558EA0221402157000 +B1510324550849N00615572EA0221302162000 +B1510354550832N00615575EA0220602167000 +B1510384550808N00615573EA0221902170000 +B1510414550792N00615574EA0221702175000 +B1510444550773N00615572EA0222102178000 +B1510484550751N00615572EA0222702183000 +B1510514550737N00615572EA0223102187000 +B1510544550726N00615573EA0224002191000 +B1510574550715N00615574EA0224302195000 +B1511004550703N00615573EA0225102199000 +B1511034550691N00615574EA0225902204000 +B1511064550680N00615572EA0226602209000 +B1511094550675N00615564EA0227602211000 +B1511124550679N00615554EA0229002215000 +B1511154550690N00615550EA0229902222000 +B1511184550703N00615563EA0230702230000 +B1511214550710N00615589EA0231902237000 +B1511244550707N00615618EA0232702245000 +B1511274550695N00615641EA0233002253000 +B1511304550680N00615649EA0233202260000 +B1511334550670N00615642EA0233602266000 +B1511364550668N00615629EA0234202272000 +B1511394550674N00615618EA0234802278000 +B1511424550686N00615614EA0235402285000 +B1511454550700N00615621EA0236102291000 +B1511484550711N00615634EA0236102297000 +B1511514550719N00615664EA0236702303000 +B1511544550714N00615693EA0237802309000 +B1511574550702N00615715EA0238202315000 +B1512004550691N00615737EA0238202320000 +B1512034550676N00615745EA0237902326000 +B1512064550667N00615739EA0238102329000 +B1512094550667N00615727EA0237502332000 +B1512124550671N00615710EA0237802336000 +B1512154550678N00615695EA0238302340000 +B1512194550691N00615672EA0238902344000 +B1512224550700N00615658EA0239502348000 +B1512254550711N00615644EA0239902352000 +B1512284550722N00615630EA0240702356000 +B1512314550734N00615617EA0241602360000 +B1512344550749N00615610EA0243202365000 +B1512374550764N00615614EA0244402371000 +B1512404550779N00615637EA0246202378000 +B1512434550785N00615665EA0247502385000 +B1512464550777N00615693EA0248402394000 +B1512494550763N00615704EA0249502402000 +B1512524550756N00615695EA0250702408000 +B1512554550756N00615683EA0251402415000 +B1512584550767N00615672EA0252902425000 +B1513014550784N00615675EA0254502436000 +B1513044550800N00615687EA0256302448000 +B1513074550816N00615702EA0257902460000 +B1513104550829N00615721EA0259402472000 +B1513134550833N00615745EA0260002485000 +B1513164550823N00615767EA0261002497000 +B1513194550809N00615772EA0262502509000 +B1513224550802N00615770EA0263202515000 +B1513254550800N00615757EA0263702524000 +B1513284550802N00615739EA0264802537000 +B1513314550811N00615720EA0266502550000 +B1513344550818N00615704EA0267302561000 +B1513374550829N00615699EA0267402573000 +B1513404550842N00615717EA0268102583000 +B1513434550853N00615736EA0268602593000 +B1513464550862N00615758EA0268502603000 +B1513494550869N00615788EA0268902611000 +B1513524550879N00615813EA0269202619000 +B1513554550888N00615832EA0268302626000 +B1513584550901N00615855EA0267902631000 +B1514014550914N00615875EA0267502636000 +B1514044550933N00615902EA0267002640000 +B1514084550947N00615922EA0266802642000 +B1514114550960N00615942EA0266202644000 +B1514144550974N00615965EA0265902645000 +B1514174550987N00615986EA0265302645000 +B1514204551004N00616008EA0264902645000 +B1514234551018N00616034EA0264902645000 +B1514264551029N00616059EA0264502644000 +B1514294551042N00616086EA0263602643000 +B1514324551056N00616121EA0262902641000 +B1514354551071N00616156EA0262602638000 +B1514384551084N00616192EA0262302636000 +B1514414551098N00616226EA0261602633000 +B1514444551112N00616261EA0260802629000 +B1514474551128N00616296EA0260102625000 +B1514504551144N00616330EA0259502621000 +B1514534551161N00616363EA0259102616000 +B1514564551176N00616395EA0258402612000 +B1514594551193N00616431EA0257602607000 +B1515024551209N00616467EA0257302601000 +B1515054551226N00616498EA0256702597000 +B1515084551241N00616530EA0256002591000 +B1515114551256N00616565EA0256002586000 +B1515144551270N00616594EA0255702581000 +B1515174551279N00616622EA0255002577000 +B1515204551292N00616655EA0254902572000 +B1515244551309N00616696EA0254802567000 +B1515274551324N00616726EA0254302562000 +B1515304551339N00616758EA0254302558000 +B1515334551352N00616792EA0254102555000 +B1515364551366N00616826EA0253902551000 +B1515394551379N00616858EA0253402548000 +B1515424551394N00616890EA0252902544000 +B1515454551409N00616920EA0252502541000 +B1515484551426N00616949EA0252002537000 +B1515514551443N00616978EA0251702533000 +B1515544551460N00617005EA0251202529000 +B1515574551478N00617031EA0250702525000 +B1516004551499N00617056EA0250402521000 +B1516034551520N00617079EA0250002517000 +B1516064551542N00617102EA0249702513000 +B1516094551565N00617124EA0249402509000 +B1516124551586N00617145EA0249302506000 +B1516154551607N00617165EA0249602502000 +B1516184551625N00617180EA0249802500000 +B1516214551641N00617196EA0249402497000 +B1516244551657N00617216EA0249502495000 +B1516274551674N00617235EA0249102493000 +B1516304551691N00617252EA0249002491000 +B1516334551707N00617268EA0248802489000 +B1516364551723N00617285EA0248502488000 +B1516404551743N00617309EA0248502485000 +B1516434551758N00617324EA0248402483000 +B1516464551772N00617340EA0248102482000 +B1516494551785N00617360EA0247902480000 +B1516524551795N00617384EA0247802478000 +B1516554551803N00617410EA0247802476000 +B1516584551811N00617436EA0248102475000 +B1517014551820N00617461EA0247202473000 +B1517044551832N00617495EA0247102471000 +B1517074551842N00617528EA0247102469000 +B1517104551851N00617562EA0246602467000 +B1517134551862N00617596EA0246502465000 +B1517164551871N00617629EA0246302463000 +B1517194551878N00617662EA0246002461000 +B1517224551882N00617697EA0245402459000 +B1517254551886N00617734EA0245402456000 +B1517284551890N00617769EA0245302454000 +B1517314551895N00617804EA0244602452000 +B1517344551902N00617840EA0244202449000 +B1517374551911N00617875EA0244102447000 +B1517404551921N00617910EA0243702444000 +B1517434551932N00617945EA0243502441000 +B1517464551941N00617977EA0243202439000 +B1517494551951N00618011EA0242502436000 +B1517524551960N00618047EA0242002434000 +B1517554551969N00618083EA0241602431000 +B1517584551977N00618120EA0241102427000 +B1518024551988N00618168EA0240602423000 +B1518054551997N00618205EA0239802419000 +B1518084552007N00618241EA0239402415000 +B1518114552016N00618278EA0238902410000 +B1518144552025N00618313EA0238302406000 +B1518174552034N00618349EA0238002402000 +B1518204552042N00618385EA0237502397000 +B1518234552051N00618419EA0236802392000 +B1518264552061N00618455EA0236202387000 +B1518294552071N00618492EA0235702382000 +B1518324552081N00618528EA0235002377000 +B1518354552091N00618563EA0234402372000 +B1518384552101N00618596EA0233502367000 +B1518414552111N00618631EA0233102361000 +B1518444552121N00618665EA0232702356000 +B1518474552129N00618697EA0232402351000 +B1518504552135N00618729EA0231302346000 +B1518534552144N00618764EA0231002340000 +B1518564552154N00618797EA0230702335000 +B1518594552164N00618831EA0230002330000 +B1519024552175N00618864EA0229602326000 +B1519054552184N00618899EA0228902321000 +B1519084552192N00618935EA0228402316000 +B1519114552203N00618971EA0228202311000 +B1519144552212N00619006EA0228002306000 +B1519174552222N00619038EA0227502302000 +B1519204552230N00619072EA0227102297000 +B1519244552241N00619117EA0226802291000 +B1519274552249N00619148EA0226002287000 +B1519304552258N00619181EA0225202282000 +B1519334552266N00619215EA0224902277000 +B1519364552274N00619248EA0224602272000 +B1519394552282N00619280EA0224102267000 +B1519424552290N00619313EA0223702263000 +B1519454552298N00619346EA0223202258000 +B1519484552307N00619378EA0222702253000 +B1519514552315N00619411EA0222302248000 +B1519544552324N00619445EA0222002243000 +B1519574552332N00619479EA0221702239000 +B1520004552341N00619512EA0221302234000 +B1520034552349N00619546EA0220902230000 +B1520064552358N00619578EA0220502225000 +B1520094552367N00619611EA0220002221000 +B1520124552375N00619644EA0219602216000 +B1520154552384N00619678EA0219302212000 +B1520184552392N00619711EA0219102208000 +B1520214552399N00619744EA0218702204000 +B1520244552406N00619778EA0218502200000 +B1520274552414N00619812EA0218202196000 +B1520304552423N00619846EA0217802192000 +B1520334552431N00619879EA0217502189000 +B1520364552439N00619912EA0217102185000 +B1520404552450N00619954EA0216702180000 +B1520434552458N00619987EA0216302177000 +B1520464552466N00620021EA0216102173000 +B1520494552474N00620056EA0215802170000 +B1520524552482N00620091EA0215302167000 +B1520554552488N00620127EA0215102163000 +B1520584552495N00620161EA0214702159000 +B1521014552503N00620195EA0214202156000 +B1521044552511N00620230EA0213802152000 +B1521074552519N00620264EA0213702149000 +B1521104552527N00620298EA0212902145000 +B1521134552536N00620333EA0212402142000 +B1521164552544N00620367EA0212102138000 +B1521194552553N00620402EA0211602134000 +B1521224552563N00620436EA0211302130000 +B1521254552573N00620468EA0210802127000 +B1521284552583N00620502EA0210202123000 +B1521314552594N00620535EA0209702119000 +B1521344552604N00620568EA0209102115000 +B1521374552614N00620602EA0208502110000 +B1521404552624N00620637EA0208402106000 +B1521434552633N00620671EA0208102102000 +B1521464552641N00620706EA0207602097000 +B1521494552648N00620741EA0207102093000 +B1521524552656N00620777EA0206602089000 +B1521564552667N00620823EA0206302083000 +B1521594552675N00620858EA0205802079000 +B1522024552682N00620893EA0205502074000 +B1522054552689N00620928EA0205002070000 +B1522084552696N00620964EA0204602066000 +B1522114552703N00621000EA0204202061000 +B1522144552711N00621034EA0203602057000 +B1522174552720N00621070EA0203102053000 +B1522204552728N00621106EA0202602049000 +B1522234552736N00621142EA0202102045000 +B1522264552745N00621178EA0201702041000 +B1522294552754N00621213EA0201202037000 +B1522324552762N00621247EA0200802033000 +B1522354552768N00621280EA0200502028000 +B1522384552774N00621312EA0199902024000 +B1522414552781N00621345EA0199502020000 +B1522444552788N00621378EA0199102015000 +B1522474552796N00621410EA0198202010000 +B1522504552804N00621445EA0197902006000 +B1522534552812N00621479EA0197402001000 +B1522564552820N00621512EA0197001996000 +B1522594552827N00621545EA0196401991000 +B1523024552834N00621579EA0195801986000 +B1523054552841N00621613EA0195301981000 +B1523084552847N00621647EA0194801976000 +B1523124552854N00621694EA0194301970000 +B1523154552860N00621729EA0193801965000 +B1523184552866N00621764EA0193401960000 +B1523214552872N00621800EA0192901955000 +B1523244552880N00621836EA0192501950000 +B1523274552887N00621871EA0192101945000 +B1523304552894N00621906EA0191801940000 +B1523334552902N00621940EA0191401936000 +B1523364552910N00621973EA0191301931000 +B1523394552917N00622004EA0190801927000 +B1523424552923N00622037EA0190401922000 +B1523454552931N00622069EA0189901918000 +B1523484552942N00622101EA0190101913000 +B1523514552950N00622129EA0189601909000 +B1523544552959N00622160EA0189001905000 +B1523574552967N00622191EA0188701901000 +B1524004552974N00622225EA0187901897000 +B1524034552981N00622258EA0187901893000 +B1524064552987N00622288EA0186801889000 +B1524094552994N00622323EA0186501884000 +B1524124553002N00622354EA0186101879000 +B1524154553009N00622384EA0185701875000 +B1524184553016N00622412EA0186101871000 +B1524214553023N00622438EA0186101867000 +B1524244553027N00622465EA0186401865000 +B1524274553031N00622491EA0186601862000 +B1524314553034N00622524EA0187301860000 +B1524344553032N00622549EA0187901860000 +B1524374553030N00622577EA0189201860000 +B1524404553026N00622602EA0190201862000 +B1524434553030N00622624EA0190601864000 +B1524464553042N00622635EA0191701867000 +B1524494553050N00622631EA0193101869000 +B1524524553054N00622620EA0194401872000 +B1524554553050N00622605EA0195501877000 +B1524584553035N00622600EA0196601884000 +B1525014553018N00622610EA0197801892000 +B1525044553007N00622626EA0198301900000 +B1525074553003N00622648EA0199201907000 +B1525104553007N00622664EA0200101916000 +B1525134553014N00622665EA0201101921000 +B1525164553016N00622652EA0202301929000 +B1525194553006N00622637EA0203301939000 +B1525224552991N00622630EA0204001948000 +B1525254552976N00622641EA0204501957000 +B1525284552967N00622660EA0205301965000 +B1525314552965N00622680EA0205901974000 +B1525344552972N00622694EA0206501982000 +B1525374552981N00622690EA0207901990000 +B1525404552984N00622681EA0208601995000 +B1525434552988N00622667EA0209502003000 +B1525464552989N00622653EA0210002012000 +B1525494552985N00622633EA0211002021000 +B1525524552972N00622622EA0211602029000 +B1525554552955N00622625EA0211702038000 +B1525584552943N00622643EA0211602045000 +B1526014552942N00622665EA0212102052000 +B1526044552951N00622677EA0212702058000 +B1526074552961N00622678EA0212902064000 +B1526114552971N00622661EA0213502072000 +B1526144552974N00622646EA0214102077000 +B1526174552974N00622628EA0214502082000 +B1526204552968N00622611EA0214702087000 +B1526234552954N00622602EA0214302091000 +B1526264552941N00622614EA0213702095000 +B1526294552939N00622637EA0214002098000 +B1526324552945N00622656EA0214202101000 +B1526354552954N00622670EA0214802105000 +B1526384552962N00622679EA0215302108000 +B1526414552967N00622692EA0215102111000 +B1526444552969N00622715EA0216102115000 +B1526474552966N00622734EA0217102119000 +B1526504552959N00622753EA0217902124000 +B1526534552945N00622771EA0218802129000 +B1526564552926N00622773EA0219702135000 +B1526594552910N00622767EA0220302141000 +B1527024552896N00622749EA0221002146000 +B1527054552887N00622732EA0221302152000 +B1527084552887N00622715EA0221202157000 +B1527114552894N00622712EA0221202160000 +B1527144552901N00622726EA0221602165000 +B1527174552905N00622743EA0222002169000 +B1527204552910N00622759EA0222602173000 +B1527234552918N00622762EA0223102176000 +B1527264552926N00622759EA0224002180000 +B1527294552934N00622759EA0224702183000 +B1527324552941N00622763EA0225202186000 +B1527354552943N00622776EA0225402191000 +B1527384552938N00622792EA0225602197000 +B1527414552926N00622807EA0226302203000 +B1527444552910N00622819EA0227302209000 +B1527484552892N00622810EA0227202216000 +B1527514552885N00622787EA0227302221000 +B1527544552888N00622765EA0227402226000 +B1527574552899N00622762EA0227902230000 +B1528004552907N00622768EA0227602234000 +B1528034552912N00622782EA0227902238000 +B1528064552913N00622800EA0228502241000 +B1528094552913N00622810EA0228802243000 +B1528124552911N00622825EA0229002247000 +B1528154552905N00622845EA0228802250000 +B1528184552897N00622869EA0229002253000 +B1528214552893N00622902EA0229702256000 +B1528244552893N00622931EA0230902260000 +B1528274552891N00622961EA0231902264000 +B1528304552879N00622993EA0234002269000 +B1528334552862N00623012EA0235702276000 +B1528364552844N00623018EA0236902284000 +B1528394552831N00623005EA0237602291000 +B1528424552830N00622985EA0238202299000 +B1528454552839N00622971EA0239102307000 +B1528484552853N00622974EA0240302315000 +B1528514552861N00622990EA0241602324000 +B1528544552865N00623013EA0242902333000 +B1528574552856N00623041EA0244902343000 +B1529004552839N00623061EA0246502354000 +B1529034552819N00623079EA0247802365000 +B1529064552803N00623080EA0248802377000 +B1529094552790N00623072EA0249302389000 +B1529124552783N00623051EA0250402400000 +B1529154552792N00623036EA0252002411000 +B1529184552802N00623041EA0253502422000 +B1529214552805N00623058EA0254402433000 +B1529254552810N00623087EA0256002448000 +B1529284552812N00623110EA0257002460000 +B1529314552820N00623129EA0257702471000 +B1529344552828N00623149EA0258302481000 +B1529374552833N00623172EA0258802491000 +B1529404552837N00623197EA0259602501000 +B1529434552844N00623221EA0260102510000 +B1529464552849N00623249EA0260802519000 +B1529494552853N00623276EA0261902528000 +B1529524552857N00623300EA0263102537000 +B1529554552860N00623322EA0263402546000 +B1529584552865N00623347EA0265002555000 +B1530014552869N00623367EA0265802565000 +B1530044552875N00623394EA0266702574000 +B1530074552889N00623419EA0267802583000 +B1530104552901N00623445EA0267902592000 +B1530134552909N00623479EA0268902601000 +B1530164552914N00623512EA0269302609000 +B1530194552919N00623545EA0269602618000 +B1530224552925N00623577EA0269702626000 +B1530254552929N00623607EA0268902633000 +B1530284552933N00623639EA0268102638000 +B1530314552940N00623673EA0267502642000 +B1530344552946N00623705EA0267202645000 +B1530374552954N00623736EA0266902647000 +B1530404552962N00623767EA0266202649000 +B1530434552969N00623800EA0265402649000 +B1530464552975N00623836EA0265402649000 +B1530494552981N00623869EA0264602648000 +B1530524552988N00623904EA0264202647000 +B1530554552997N00623939EA0264002645000 +B1530584553007N00623972EA0263602643000 +B1531024553020N00624017EA0263402640000 +B1531054553030N00624050EA0262902638000 +B1531084553041N00624082EA0262602635000 +B1531114553054N00624111EA0262002633000 +B1531144553065N00624141EA0261302630000 +B1531174553078N00624171EA0260902626000 +B1531204553089N00624201EA0260402623000 +B1531234553101N00624231EA0259802619000 +B1531264553113N00624265EA0259402615000 +B1531294553125N00624299EA0259402612000 +B1531324553134N00624331EA0259102608000 +B1531354553143N00624364EA0258902605000 +B1531384553151N00624398EA0258902602000 +B1531414553159N00624429EA0258502599000 +B1531444553168N00624462EA0257802596000 +B1531474553176N00624494EA0257502593000 +B1531504553185N00624523EA0256902589000 +B1531534553194N00624554EA0256502586000 +B1531564553205N00624582EA0256202582000 +B1531594553214N00624609EA0255602579000 +B1532024553223N00624638EA0255002575000 +B1532054553232N00624667EA0254502571000 +B1532084553241N00624697EA0254102566000 +B1532114553250N00624727EA0253702562000 +B1532144553258N00624757EA0253402558000 +B1532184553269N00624796EA0253102553000 +B1532214553276N00624826EA0252402549000 +B1532244553285N00624857EA0252002544000 +B1532274553294N00624888EA0251902540000 +B1532304553303N00624919EA0251302536000 +B1532334553312N00624953EA0250802531000 +B1532364553319N00624986EA0250302526000 +B1532394553327N00625019EA0249802522000 +B1532424553335N00625051EA0249502518000 +B1532454553344N00625082EA0249002513000 +B1532484553352N00625114EA0248602509000 +B1532514553361N00625147EA0248302504000 +B1532544553368N00625179EA0247902500000 +B1532574553375N00625212EA0247302496000 +B1533004553380N00625245EA0246902492000 +B1533034553386N00625278EA0246402488000 +B1533064553391N00625310EA0245902484000 +B1533094553395N00625342EA0245302480000 +B1533124553401N00625375EA0245002476000 +B1533154553408N00625406EA0244402471000 +B1533184553416N00625437EA0244002467000 +B1533214553426N00625468EA0243602462000 +B1533244553435N00625498EA0243002457000 +B1533274553444N00625529EA0242602453000 +B1533304553453N00625560EA0242202448000 +B1533344553464N00625602EA0241902442000 +B1533374553472N00625632EA0241602437000 +B1533404553480N00625661EA0241002433000 +B1533434553487N00625693EA0240702428000 +B1533464553492N00625725EA0240502424000 +B1533494553496N00625756EA0240002419000 +B1533524553500N00625788EA0239602415000 +B1533554553504N00625820EA0239202411000 +B1533584553508N00625853EA0238802406000 +B1534014553511N00625885EA0238202402000 +B1534044553514N00625917EA0237702397000 +B1534074553517N00625950EA0237202393000 +B1534104553518N00625983EA0236702388000 +B1534134553519N00626016EA0236202384000 +B1534164553521N00626050EA0235702379000 +B1534194553523N00626084EA0235202375000 +B1534224553525N00626117EA0234802371000 +B1534254553528N00626151EA0234402366000 +B1534284553531N00626184EA0233902362000 +B1534314553533N00626217EA0233302358000 +B1534344553537N00626249EA0232802353000 +B1534374553541N00626283EA0232302349000 +B1534404553545N00626316EA0232002344000 +B1534434553550N00626349EA0231602340000 +B1534464553556N00626381EA0231302335000 +B1534504553562N00626424EA0231002329000 +B1534534553566N00626455EA0230702325000 +B1534564553570N00626487EA0230302321000 +B1534594553575N00626516EA0230002316000 +B1535024553579N00626545EA0229302312000 +B1535054553583N00626576EA0228702307000 +B1535084553587N00626608EA0228202303000 +B1535114553591N00626639EA0227902298000 +B1535144553595N00626670EA0227402294000 +B1535174553598N00626702EA0227002289000 +B1535204553601N00626733EA0226702285000 +B1535234553603N00626764EA0225902280000 +B1535264553604N00626795EA0225302276000 +B1535294553605N00626828EA0224702272000 +B1535324553606N00626861EA0224402267000 +B1535354553608N00626894EA0224102263000 +B1535384553609N00626927EA0223802258000 +B1535414553609N00626960EA0223502254000 +B1535444553610N00626993EA0223202250000 +B1535474553611N00627025EA0222802246000 +B1535504553612N00627058EA0222502242000 +B1535534553614N00627091EA0222102238000 +B1535564553617N00627123EA0221502234000 +B1535594553619N00627156EA0221302230000 +B1536024553622N00627188EA0221002226000 +B1536064553625N00627229EA0220602221000 +B1536094553628N00627259EA0220202218000 +B1536124553630N00627290EA0219902214000 +B1536154553632N00627321EA0219602210000 +B1536184553635N00627352EA0219302206000 +B1536214553638N00627383EA0219002203000 +B1536244553641N00627414EA0218802199000 +B1536274553645N00627444EA0218502196000 +B1536304553648N00627475EA0218402193000 +B1536334553652N00627505EA0218102190000 +B1536364553656N00627535EA0217802187000 +B1536394553661N00627564EA0217502184000 +B1536424553666N00627594EA0217402181000 +B1536454553672N00627623EA0217102178000 +B1536484553678N00627652EA0216802175000 +B1536514553685N00627682EA0216502172000 +B1536544553692N00627711EA0216002169000 +B1536574553700N00627740EA0215702166000 +B1537004553708N00627769EA0215402163000 +B1537034553716N00627798EA0215002160000 +B1537064553724N00627827EA0214902157000 +B1537094553731N00627856EA0214202154000 +B1537124553738N00627885EA0214002151000 +B1537154553745N00627915EA0213702148000 +B1537184553752N00627945EA0213202145000 +B1537224553760N00627986EA0213102140000 +B1537254553766N00628016EA0212602137000 +B1537284553773N00628047EA0212002134000 +B1537314553779N00628079EA0211602130000 +B1537344553785N00628111EA0211102126000 +B1537374553791N00628143EA0210502122000 +B1537404553797N00628177EA0210102118000 +B1537434553802N00628210EA0209702114000 +B1537464553807N00628244EA0209302110000 +B1537494553813N00628278EA0209002106000 +B1537524553820N00628312EA0208702102000 +B1537554553827N00628346EA0208302098000 +B1537584553835N00628380EA0208002094000 +B1538014553842N00628415EA0207802090000 +B1538044553850N00628450EA0207402086000 +B1538074553858N00628484EA0207502083000 +B1538104553864N00628513EA0208102080000 +B1538134553869N00628536EA0208002078000 +B1538164553873N00628562EA0208102076000 +B1538194553879N00628585EA0207902074000 +B1538224553886N00628609EA0207602072000 +B1538254553894N00628631EA0207202070000 +B1538284553902N00628654EA0207102069000 +B1538314553907N00628676EA0206502067000 +B1538344553910N00628701EA0206302064000 +B1538384553916N00628732EA0206102062000 +B1538414553921N00628754EA0206002060000 +B1538444553927N00628775EA0206102058000 +B1538474553935N00628793EA0205802056000 +B1538504553945N00628810EA0205702054000 +B1538534553954N00628826EA0205602052000 +B1538564553964N00628843EA0205402051000 +B1538594553973N00628859EA0205202049000 +B1539024553983N00628878EA0205202048000 +B1539054553992N00628897EA0205002046000 +B1539084554002N00628916EA0205002045000 +B1539114554012N00628934EA0204702044000 +B1539144554024N00628952EA0204502042000 +B1539174554035N00628968EA0204302041000 +B1539204554048N00628984EA0203902039000 +B1539234554060N00629002EA0203702037000 +B1539264554073N00629020EA0203402035000 +B1539294554085N00629039EA0203402033000 +B1539324554096N00629059EA0203302031000 +B1539354554107N00629079EA0203202030000 +B1539384554120N00629098EA0203302028000 +B1539414554133N00629115EA0203802027000 +B1539444554144N00629131EA0203602026000 +B1539474554155N00629150EA0203502025000 +B1539504554167N00629165EA0203402025000 +B1539544554184N00629179EA0203302024000 +B1539574554197N00629187EA0203202023000 +B1540004554211N00629195EA0203102023000 +B1540034554226N00629198EA0202902022000 +B1540064554241N00629199EA0202902022000 +B1540094554255N00629200EA0202902021000 +B1540124554268N00629202EA0202902020000 +B1540154554281N00629203EA0202902020000 +B1540184554295N00629200EA0203202019000 +B1540214554307N00629199EA0203502019000 +B1540244554320N00629196EA0203702019000 +B1540274554332N00629198EA0204002020000 +B1540304554344N00629204EA0204302021000 +B1540334554357N00629214EA0204402022000 +B1540364554370N00629225EA0204802023000 +B1540394554382N00629234EA0205102024000 +B1540424554395N00629243EA0205302026000 +B1540454554408N00629250EA0205602028000 +B1540484554421N00629253EA0206002029000 +B1540514554433N00629255EA0206302031000 +B1540544554441N00629248EA0206702033000 +B1540574554442N00629234EA0207502035000 +B1541004554439N00629224EA0207302036000 +B1541034554429N00629210EA0207502039000 +B1541064554413N00629212EA0207602041000 +B1541094554404N00629232EA0208102044000 +B1541124554407N00629255EA0208302046000 +B1541154554417N00629274EA0208502049000 +B1541194554437N00629283EA0209402053000 +B1541224554447N00629281EA0210402056000 +B1541254554453N00629272EA0211102060000 +B1541284554445N00629261EA0211802064000 +B1541314554430N00629271EA0212402069000 +B1541344554427N00629296EA0212802074000 +B1541374554435N00629317EA0213902078000 +B1541404554447N00629330EA0214502083000 +B1541434554459N00629329EA0214802089000 +B1541464554462N00629311EA0215202094000 +B1541494554454N00629298EA0216102099000 +B1541524554439N00629307EA0216702104000 +B1541554554432N00629332EA0217102109000 +B1541584554441N00629356EA0218102115000 +B1542014554455N00629361EA0218602121000 +B1542044554461N00629347EA0218802127000 +B1542074554460N00629328EA0219502132000 +B1542104554447N00629321EA0219702138000 +B1542134554433N00629338EA0220202143000 +B1542164554435N00629365EA0220602148000 +B1542194554448N00629375EA0221202153000 +B1542224554454N00629363EA0221302158000 +B1542254554448N00629346EA0222102163000 +B1542284554434N00629350EA0222602168000 +B1542314554423N00629370EA0222802174000 +B1542344554423N00629397EA0223002179000 +B1542374554433N00629418EA0223602184000 +B1542404554445N00629422EA0223802189000 +B1542434554453N00629408EA0223702193000 +B1542464554455N00629389EA0224402198000 +B1542504554442N00629377EA0225002204000 +B1542534554427N00629387EA0226002208000 +B1542564554423N00629411EA0226602213000 +B1542594554434N00629425EA0226802217000 +B1543024554444N00629419EA0227302222000 +B1543054554447N00629406EA0228102225000 +B1543084554441N00629394EA0229102230000 +B1543114554429N00629389EA0229802235000 +B1543144554414N00629401EA0230502241000 +B1543174554408N00629424EA0231402247000 +B1543204554417N00629442EA0231602253000 +B1543234554431N00629443EA0232502259000 +B1543264554438N00629431EA0233202265000 +B1543294554436N00629416EA0234002271000 +B1543324554422N00629407EA0234602277000 +B1543354554407N00629407EA0235202283000 +B1543384554394N00629418EA0235702289000 +B1543414554387N00629438EA0235902295000 +B1543444554392N00629460EA0236302301000 +B1543474554405N00629469EA0237002307000 +B1543504554415N00629460EA0237502313000 +B1543534554411N00629444EA0238302319000 +B1543564554399N00629441EA0238602325000 +B1543594554388N00629455EA0238802330000 +B1544024554383N00629477EA0239202336000 +B1544054554387N00629498EA0239502341000 +B1544084554399N00629510EA0239902346000 +B1544114554409N00629504EA0240402351000 +B1544144554411N00629490EA0241002355000 +B1544184554397N00629476EA0241502362000 +B1544214554383N00629482EA0241602366000 +B1544244554371N00629498EA0241702371000 +B1544274554373N00629521EA0241702374000 +B1544304554384N00629530EA0242302378000 +B1544334554393N00629522EA0242302382000 +B1544364554400N00629506EA0242802385000 +B1544394554401N00629492EA0242702388000 +B1544424554395N00629474EA0243002391000 +B1544454554381N00629470EA0243002394000 +B1544484554366N00629480EA0242902396000 +B1544514554359N00629503EA0242802398000 +B1544544554364N00629526EA0242702400000 +B1544574554376N00629540EA0243102402000 +B1545004554388N00629547EA0243102404000 +B1545034554403N00629548EA0243202406000 +B1545064554415N00629539EA0243302408000 +B1545094554419N00629523EA0243502410000 +B1545124554418N00629506EA0243902412000 +B1545154554409N00629492EA0244402414000 +B1545184554395N00629488EA0244402416000 +B1545214554380N00629491EA0244102418000 +B1545244554367N00629506EA0244102420000 +B1545274554364N00629530EA0243902421000 +B1545304554373N00629550EA0243602422000 +B1545334554388N00629552EA0243602422000 +B1545364554398N00629538EA0243702423000 +B1545404554398N00629513EA0243902424000 +B1545434554393N00629497EA0244002424000 +B1545464554386N00629484EA0243902425000 +B1545494554375N00629473EA0243702426000 +B1545524554359N00629473EA0243402426000 +B1545554554344N00629485EA0243402426000 +B1545584554335N00629506EA0243102426000 +B1546014554335N00629532EA0242802425000 +B1546044554344N00629554EA0243002424000 +B1546074554358N00629571EA0243802424000 +B1546104554370N00629584EA0244402424000 +B1546134554382N00629596EA0244702425000 +B1546164554396N00629598EA0244902426000 +B1546194554406N00629587EA0245702428000 +B1546224554410N00629572EA0246002430000 +B1546254554406N00629558EA0245902432000 +B1546284554392N00629556EA0245902433000 +B1546314554379N00629571EA0246102435000 +B1546344554374N00629596EA0246902437000 +B1546374554378N00629618EA0247402439000 +B1546404554390N00629632EA0247802442000 +B1546434554404N00629631EA0248402445000 +B1546464554410N00629619EA0248802447000 +B1546494554405N00629607EA0248702449000 +B1546524554393N00629600EA0248702452000 +B1546554554378N00629607EA0248902455000 +B1546584554366N00629626EA0249502458000 +B1547024554366N00629662EA0250102462000 +B1547054554376N00629684EA0250602465000 +B1547084554388N00629694EA0250702469000 +B1547114554401N00629695EA0250702472000 +B1547144554409N00629683EA0250702474000 +B1547174554407N00629667EA0250902477000 +B1547204554397N00629659EA0250902479000 +B1547234554382N00629659EA0250802481000 +B1547264554366N00629668EA0251402483000 +B1547294554354N00629683EA0252202485000 +B1547324554343N00629695EA0252402488000 +B1547354554330N00629698EA0252702491000 +B1547384554319N00629689EA0253202493000 +B1547414554318N00629672EA0254302497000 +B1547444554322N00629658EA0255102501000 +B1547474554331N00629648EA0255302505000 +B1547504554348N00629651EA0255402509000 +B1547534554359N00629666EA0255202513000 +B1547564554364N00629693EA0255002516000 +B1547594554355N00629716EA0255202518000 +B1548024554340N00629721EA0255702521000 +B1548054554330N00629710EA0256602524000 +B1548084554324N00629699EA0257202527000 +B1548114554322N00629686EA0257302530000 +B1548144554322N00629670EA0257802534000 +B1548174554331N00629658EA0257302537000 +B1548204554346N00629655EA0257002540000 +B1548234554359N00629671EA0256702542000 +B1548274554357N00629705EA0256502544000 +B1548304554343N00629717EA0256702546000 +B1548334554328N00629715EA0257302547000 +B1548364554315N00629708EA0257602549000 +B1548394554305N00629696EA0257902551000 +B1548424554298N00629683EA0258502553000 +B1548454554295N00629670EA0259402555000 +B1548484554293N00629657EA0260302559000 +B1548514554293N00629643EA0260602562000 +B1548544554301N00629632EA0260802566000 +B1548574554314N00629637EA0260802570000 +B1549004554325N00629655EA0260902573000 +B1549034554327N00629679EA0260702576000 +B1549064554320N00629705EA0261302579000 +B1549094554308N00629720EA0262102582000 +B1549124554293N00629725EA0262502586000 +B1549154554278N00629718EA0263202590000 +B1549184554270N00629705EA0264102594000 +B1549214554266N00629687EA0264902599000 +B1549244554269N00629673EA0265702604000 +B1549274554279N00629667EA0265802609000 +B1549304554293N00629672EA0265902613000 +B1549334554300N00629691EA0266002618000 +B1549364554302N00629719EA0266802622000 +B1549394554295N00629741EA0267502626000 +B1549424554284N00629760EA0268002631000 +B1549454554269N00629771EA0268902636000 +B1549484554253N00629779EA0269602641000 +B1549514554238N00629777EA0270202646000 +B1549544554228N00629766EA0270502651000 +B1549574554226N00629750EA0271102656000 +B1550004554226N00629737EA0271502660000 +B1550034554232N00629727EA0272102665000 +B1550074554247N00629736EA0272802673000 +B1550104554256N00629757EA0273502678000 +B1550134554251N00629787EA0274102684000 +B1550164554241N00629809EA0274902689000 +B1550194554230N00629831EA0275002695000 +B1550224554218N00629855EA0275502700000 +B1550254554209N00629876EA0275702705000 +B1550284554201N00629898EA0276202710000 +B1550314554193N00629918EA0275802715000 +B1550344554183N00629941EA0275902719000 +B1550374554174N00629963EA0276202723000 +B1550404554165N00629985EA0276102726000 +B1550434554154N00630006EA0276502729000 +B1550464554144N00630025EA0276702732000 +B1550494554134N00630049EA0276902735000 +B1550524554126N00630073EA0276902738000 +B1550554554117N00630095EA0276802741000 +B1550584554108N00630117EA0276302743000 +B1551014554099N00630139EA0276302744000 +B1551044554090N00630159EA0276002745000 +B1551074554078N00630181EA0275602745000 +B1551104554067N00630202EA0276102746000 +B1551134554059N00630220EA0275402746000 +B1551164554052N00630244EA0274802745000 +B1551194554046N00630270EA0274202744000 +B1551224554039N00630295EA0273402743000 +B1551264554031N00630328EA0272902740000 +B1551294554024N00630352EA0271802737000 +B1551324554016N00630377EA0271202733000 +B1551354554006N00630404EA0270102729000 +B1551384553997N00630434EA0269602724000 +B1551414553989N00630462EA0269002720000 +B1551444553981N00630489EA0268502715000 +B1551474553975N00630517EA0268002710000 +B1551504553971N00630544EA0267502706000 +B1551534553965N00630572EA0267102701000 +B1551564553959N00630599EA0267202696000 +B1551594553953N00630621EA0267002692000 +B1552024553949N00630644EA0266502688000 +B1552054553943N00630668EA0266002684000 +B1552084553938N00630693EA0265502680000 +B1552114553934N00630718EA0265502676000 +B1552144553929N00630740EA0265002672000 +B1552174553923N00630765EA0265102668000 +B1552204553917N00630785EA0265402665000 +B1552234553912N00630805EA0265302662000 +B1552264553907N00630828EA0265402660000 +B1552294553901N00630850EA0265602658000 +B1552324553896N00630872EA0265802656000 +B1552354553892N00630895EA0265802655000 +B1552384553888N00630919EA0266202654000 +B1552414553883N00630941EA0266402654000 +B1552454553875N00630971EA0266502654000 +B1552484553870N00630995EA0266702654000 +B1552514553866N00631019EA0267002655000 +B1552544553861N00631042EA0267202656000 +B1552574553856N00631066EA0267602657000 +B1553004553848N00631089EA0268502658000 +B1553034553841N00631103EA0269102661000 +B1553064553835N00631118EA0269502663000 +B1553094553826N00631128EA0269802666000 +B1553124553815N00631128EA0270102668000 +B1553154553806N00631116EA0270502671000 +B1553184553805N00631098EA0270602674000 +B1553214553812N00631080EA0271102676000 +B1553244553824N00631068EA0271602679000 +B1553274553838N00631064EA0271902682000 +B1553304553851N00631072EA0272402685000 +B1553334553858N00631089EA0272902689000 +B1553364553859N00631106EA0273402692000 +B1553394553856N00631123EA0273702696000 +B1553424553848N00631134EA0273702699000 +B1553454553835N00631132EA0273902703000 +B1553484553825N00631122EA0274302706000 +B1553514553821N00631105EA0274902710000 +B1553544553822N00631087EA0275202714000 +B1553574553831N00631069EA0275602717000 +B1554004553845N00631063EA0276502721000 +B1554034553856N00631071EA0276802725000 +B1554064553864N00631089EA0277502729000 +B1554094553863N00631108EA0278002734000 +B1554134553852N00631122EA0278002740000 +B1554164553840N00631118EA0278302744000 +B1554194553834N00631103EA0278502747000 +B1554224553834N00631083EA0278702751000 +B1554254553842N00631066EA0278802754000 +B1554284553855N00631054EA0279302758000 +B1554314553869N00631057EA0279502761000 +B1554344553878N00631076EA0279902764000 +B1554374553879N00631095EA0280502768000 +B1554404553875N00631110EA0280202771000 +B1554434553869N00631130EA0280202773000 +B1554464553865N00631151EA0280402776000 +B1554494553861N00631173EA0280302778000 +B1554524553857N00631196EA0280502780000 +B1554554553853N00631216EA0280302781000 +B1554584553848N00631239EA0280302783000 +B1555014553844N00631261EA0280102784000 +B1555044553841N00631286EA0280302785000 +B1555074553839N00631312EA0280402786000 +B1555104553837N00631340EA0280502787000 +B1555134553837N00631366EA0280702789000 +B1555164553837N00631391EA0280902790000 +B1555194553836N00631414EA0281302791000 +B1555224553833N00631438EA0281602793000 +B1555254553833N00631460EA0281802795000 +B1555284553830N00631483EA0281902796000 +B1555314553827N00631507EA0282102798000 +B1555354553820N00631539EA0282202800000 +B1555384553817N00631564EA0282702802000 +B1555414553814N00631585EA0282502803000 +B1555444553811N00631609EA0282202805000 +B1555474553808N00631632EA0281702806000 +B1555504553805N00631657EA0281202806000 +B1555534553803N00631681EA0280702805000 +B1555564553801N00631705EA0280302804000 +B1555594553796N00631727EA0279502803000 +B1556024553792N00631751EA0279002801000 +B1556054553787N00631776EA0278602799000 +B1556084553781N00631798EA0278202796000 +B1556114553777N00631822EA0277702794000 +B1556144553773N00631845EA0277502791000 +B1556174553768N00631868EA0276902789000 +B1556204553764N00631892EA0276602786000 +B1556234553760N00631915EA0276102783000 +B1556264553756N00631938EA0275802780000 +B1556294553752N00631962EA0275802776000 +B1556324553747N00631985EA0275402773000 +B1556354553743N00632008EA0275402770000 +B1556384553739N00632031EA0275202767000 +B1556414553735N00632055EA0275002765000 +B1556444553731N00632076EA0274602762000 +B1556474553726N00632101EA0274502759000 +B1556504553722N00632126EA0274902757000 +B1556534553720N00632150EA0275102755000 +B1556574553717N00632186EA0275702753000 +B1557004553716N00632212EA0276402752000 +B1557034553713N00632235EA0277002753000 +B1557064553706N00632255EA0277502754000 +B1557094553696N00632272EA0277902755000 +B1557124553682N00632276EA0277902757000 +B1557154553669N00632266EA0278002758000 +B1557184553666N00632247EA0278102759000 +B1557214553673N00632228EA0278502761000 +B1557244553687N00632218EA0278502763000 +B1557274553703N00632217EA0278802765000 +B1557304553717N00632229EA0279202767000 +B1557334553725N00632249EA0279502769000 +B1557364553725N00632272EA0279902771000 +B1557394553717N00632288EA0280202774000 +B1557424553704N00632296EA0280702776000 +B1557454553691N00632296EA0280602779000 +B1557484553680N00632284EA0280602781000 +B1557514553678N00632263EA0280502782000 +B1557544553686N00632245EA0280402783000 +B1557574553702N00632245EA0280202784000 +B1558004553716N00632265EA0280702785000 +B1558034553720N00632287EA0281002786000 +B1558064553717N00632309EA0281302788000 +B1558094553711N00632326EA0281502789000 +B1558124553705N00632345EA0281802791000 +B1558154553699N00632366EA0282302792000 +B1558184553694N00632387EA0283102795000 +B1558224553690N00632416EA0283902799000 +B1558254553691N00632439EA0284702803000 +B1558284553701N00632459EA0285402807000 +B1558314553719N00632464EA0286302811000 +B1558344553734N00632454EA0287002816000 +B1558374553739N00632438EA0287702822000 +B1558404553731N00632427EA0288402827000 +B1558434553719N00632433EA0288902833000 +B1558464553710N00632448EA0289702839000 +B1558494553707N00632469EA0290502845000 +B1558524553706N00632492EA0291002851000 +B1558554553706N00632514EA0290902857000 +B1558584553706N00632537EA0290802862000 +B1559014553706N00632560EA0291002867000 +B1559044553705N00632583EA0290802871000 +B1559074553707N00632606EA0291002874000 +B1559104553710N00632627EA0291002877000 +B1559134553712N00632652EA0291202880000 +B1559164553717N00632678EA0291502883000 +B1559194553722N00632703EA0291002886000 +B1559224553726N00632733EA0290502888000 +B1559254553727N00632760EA0289902889000 +B1559284553725N00632786EA0288902889000 +B1559314553724N00632816EA0288402888000 +B1559344553721N00632844EA0287702886000 +B1559374553717N00632873EA0287102884000 +B1559404553712N00632902EA0286502881000 +B1559434553708N00632932EA0285902878000 +B1559464553704N00632964EA0285902875000 +B1559494553700N00632992EA0285602872000 +B1559534553692N00633029EA0284702868000 +B1559564553686N00633057EA0284202864000 +B1559594553679N00633085EA0283902861000 +B1600024553673N00633113EA0283602858000 +B1600054553668N00633141EA0283202854000 +B1600084553664N00633170EA0283002851000 +B1600114553660N00633201EA0282602847000 +B1600144553656N00633231EA0282502844000 +B1600174553652N00633260EA0282402841000 +B1600204553647N00633290EA0282202838000 +B1600234553643N00633319EA0282102836000 +B1600264553637N00633347EA0281502833000 +B1600294553631N00633376EA0281302830000 +B1600324553624N00633404EA0280702827000 +B1600354553618N00633433EA0280502824000 +B1600384553614N00633459EA0280302821000 +B1600414553612N00633484EA0279702818000 +B1600444553610N00633511EA0279502815000 +B1600474553609N00633539EA0279502812000 +B1600504553609N00633567EA0279902809000 +B1600534553608N00633591EA0279702807000 +B1600564553606N00633618EA0279202804000 +B1600594553605N00633646EA0278902802000 +B1601024553605N00633673EA0278402799000 +B1601054553604N00633700EA0278002796000 +B1601094553603N00633737EA0277602792000 +B1601124553602N00633765EA0277302789000 +B1601154553601N00633792EA0277102786000 +B1601184553601N00633821EA0276802783000 +B1601214553600N00633850EA0276802781000 +B1601244553599N00633880EA0276602778000 +B1601274553599N00633911EA0276502775000 +B1601304553599N00633940EA0276402773000 +B1601334553598N00633968EA0275802771000 +B1601364553598N00634000EA0275302768000 +B1601394553598N00634032EA0275302765000 +B1601424553599N00634061EA0274802762000 +B1601454553600N00634093EA0274502759000 +B1601484553602N00634122EA0274202756000 +B1601514553604N00634151EA0274002753000 +B1601544553607N00634180EA0273802750000 +B1601574553609N00634209EA0273502748000 +B1602004553611N00634238EA0273302745000 +B1602034553614N00634266EA0273202742000 +B1602064553617N00634294EA0273002739000 +B1602094553620N00634321EA0272802737000 +B1602124553624N00634348EA0272502734000 +B1602154553626N00634376EA0272302732000 +B1602184553628N00634403EA0272002729000 +B1602214553628N00634431EA0271802727000 +B1602244553629N00634457EA0271402723000 +B1602284553627N00634495EA0271402721000 +B1602314553625N00634521EA0271302719000 +B1602344553622N00634548EA0270802716000 +B1602374553618N00634575EA0270702714000 +B1602404553616N00634601EA0270402711000 +B1602434553614N00634629EA0270102709000 +B1602464553612N00634657EA0269802706000 +B1602494553611N00634685EA0269502704000 +B1602524553609N00634713EA0269202701000 +B1602554553608N00634742EA0269002698000 +B1602584553608N00634771EA0268802696000 +B1603014553608N00634800EA0268402693000 +B1603044553609N00634829EA0268002691000 +B1603074553609N00634858EA0267802688000 +B1603104553610N00634888EA0267402686000 +B1603134553610N00634915EA0267102683000 +B1603164553610N00634943EA0266602680000 +B1603194553610N00634972EA0266302677000 +B1603224553611N00635001EA0265902674000 +B1603254553611N00635030EA0265502671000 +B1603284553611N00635059EA0265102667000 +B1603314553610N00635088EA0264702664000 +B1603344553610N00635117EA0264202660000 +B1603374553610N00635146EA0263702657000 +B1603404553610N00635175EA0263302653000 +B1603444553607N00635213EA0263002648000 +B1603474553605N00635243EA0262602644000 +B1603504553602N00635270EA0262202640000 +B1603534553599N00635299EA0261802637000 +B1603564553597N00635327EA0261602633000 +B1603594553595N00635354EA0261202629000 +B1604024553593N00635382EA0260802625000 +B1604054553590N00635409EA0260302621000 +B1604084553588N00635437EA0260002618000 +B1604114553586N00635465EA0259702614000 +B1604144553584N00635494EA0259402610000 +B1604174553583N00635522EA0259102607000 +B1604204553583N00635550EA0258702603000 +B1604234553581N00635578EA0258402599000 +B1604264553579N00635607EA0258102596000 +B1604294553577N00635636EA0257702592000 +B1604324553576N00635665EA0257402589000 +B1604354553575N00635693EA0257202585000 +B1604384553574N00635722EA0257002582000 +B1604414553574N00635751EA0256702579000 +B1604444553573N00635779EA0256402576000 +B1604474553573N00635808EA0256102573000 +B1604504553573N00635837EA0256002570000 +B1604534553572N00635866EA0255702567000 +B1604564553570N00635894EA0255602564000 +B1605004553567N00635933EA0255502561000 +B1605034553565N00635962EA0255102558000 +B1605064553562N00635991EA0254902556000 +B1605094553560N00636019EA0254802553000 +B1605124553557N00636049EA0254502551000 +B1605154553554N00636078EA0254502549000 +B1605184553551N00636107EA0254402547000 +B1605214553548N00636136EA0254202545000 +B1605244553546N00636164EA0253802543000 +B1605274553545N00636194EA0253702541000 +B1605304553544N00636223EA0253502538000 +B1605334553545N00636251EA0253202536000 +B1605364553545N00636280EA0252802534000 +B1605394553546N00636309EA0252502532000 +B1605424553546N00636337EA0252302530000 +B1605454553545N00636365EA0252002528000 +B1605484553545N00636393EA0251702525000 +B1605514553545N00636422EA0251502523000 +B1605544553546N00636450EA0251302520000 +B1605574553546N00636479EA0251102518000 +B1606004553545N00636508EA0251002516000 +B1606034553543N00636537EA0250802513000 +B1606064553542N00636565EA0250702511000 +B1606094553541N00636593EA0250502509000 +B1606124553539N00636619EA0250202507000 +B1606154553538N00636647EA0250102505000 +B1606184553537N00636673EA0249802502000 +B1606214553536N00636701EA0249602500000 +B1606244553535N00636727EA0249302498000 +B1606284553533N00636763EA0249002495000 +B1606314553531N00636790EA0248802493000 +B1606344553528N00636817EA0248602491000 +B1606374553525N00636844EA0248502489000 +B1606404553522N00636870EA0248302486000 +B1606434553520N00636897EA0248202484000 +B1606464553518N00636923EA0248002483000 +B1606494553515N00636950EA0247802481000 +B1606524553513N00636977EA0247702479000 +B1606554553511N00637003EA0247502477000 +B1606584553510N00637030EA0247402475000 +B1607014553508N00637057EA0247202474000 +B1607044553507N00637084EA0247002472000 +B1607074553507N00637110EA0246802470000 +B1607104553507N00637137EA0246602469000 +B1607134553507N00637164EA0246402467000 +B1607164553507N00637191EA0246202465000 +B1607194553507N00637217EA0246002463000 +B1607224553507N00637244EA0245802462000 +B1607254553507N00637270EA0245602460000 +B1607284553507N00637297EA0245402459000 +B1607314553506N00637324EA0245302457000 +B1607344553505N00637351EA0245002455000 +B1607374553505N00637378EA0244902453000 +B1607404553505N00637404EA0244702452000 +B1607434553505N00637431EA0244402450000 +B1607474553505N00637467EA0244202447000 +B1607504553506N00637494EA0243902445000 +B1607534553507N00637521EA0243602443000 +B1607564553508N00637547EA0243302441000 +B1607594553508N00637574EA0242902439000 +B1608024553508N00637601EA0242602436000 +B1608054553507N00637628EA0242202433000 +B1608084553504N00637656EA0241902431000 +B1608114553500N00637682EA0241702428000 +B1608144553496N00637709EA0241302425000 +B1608174553492N00637735EA0241102422000 +B1608204553487N00637762EA0240702419000 +B1608234553483N00637788EA0240402417000 +B1608264553478N00637815EA0240002414000 +B1608294553473N00637842EA0239802411000 +B1608324553469N00637869EA0239502408000 +B1608354553464N00637896EA0239202405000 +B1608384553460N00637923EA0238902402000 +B1608414553456N00637950EA0238602399000 +B1608444553453N00637977EA0238202396000 +B1608474553450N00638004EA0237902393000 +B1608504553448N00638031EA0237602390000 +B1608534553445N00638058EA0237302387000 +B1608564553443N00638085EA0236802384000 +B1608594553441N00638112EA0236502381000 +B1609024553439N00638140EA0236102377000 +B1609064553436N00638176EA0235702373000 +B1609094553435N00638203EA0235202369000 +B1609124553433N00638231EA0234802366000 +B1609154553432N00638258EA0234402362000 +B1609184553431N00638286EA0234002358000 +B1609214553430N00638313EA0233702355000 +B1609244553429N00638341EA0233202351000 +B1609274553428N00638369EA0232902347000 +B1609304553427N00638396EA0232502344000 +B1609334553425N00638424EA0232202340000 +B1609364553424N00638451EA0231902336000 +B1609394553424N00638479EA0231502333000 +B1609424553424N00638507EA0231202330000 +B1609454553425N00638535EA0230902326000 +B1609484553426N00638563EA0230502323000 +B1609514553426N00638591EA0230302321000 +B1609544553427N00638619EA0230002318000 +B1609574553427N00638648EA0229802315000 +B1610004553427N00638676EA0229502313000 +B1610034553427N00638704EA0229202310000 +B1610064553427N00638732EA0229102307000 +B1610094553427N00638759EA0228902305000 +B1610124553427N00638787EA0228802303000 +B1610154553428N00638815EA0228502300000 +B1610184553428N00638843EA0228302298000 +B1610214553428N00638871EA0228202296000 +B1610244553428N00638899EA0228002293000 +B1610284553428N00638936EA0227802290000 +B1610314553428N00638964EA0227502288000 +B1610344553429N00638993EA0227302286000 +B1610374553428N00639021EA0227102284000 +B1610404553428N00639049EA0226902282000 +B1610434553427N00639077EA0226702280000 +B1610464553427N00639105EA0226302278000 +B1610494553427N00639133EA0226102275000 +B1610524553427N00639160EA0225702273000 +B1610554553427N00639189EA0225502271000 +B1610584553426N00639216EA0225202268000 +B1611014553425N00639243EA0225002266000 +B1611044553424N00639271EA0224702263000 +B1611074553424N00639298EA0224402261000 +B1611104553423N00639326EA0224202258000 +B1611134553422N00639353EA0223802256000 +B1611164553422N00639381EA0223602253000 +B1611194553421N00639409EA0223302251000 +B1611224553421N00639436EA0223102248000 +B1611254553420N00639464EA0222802245000 +B1611284553420N00639492EA0222602243000 +B1611314553420N00639519EA0222302240000 +B1611344553422N00639546EA0222002238000 +B1611374553423N00639573EA0221602235000 +B1611404553425N00639600EA0221202232000 +B1611434553426N00639627EA0220902229000 +B1611464553427N00639654EA0220602227000 +B1611504553426N00639690EA0220402223000 +B1611534553425N00639718EA0220102220000 +B1611564553424N00639745EA0219902217000 +B1611594553423N00639773EA0219902214000 +B1612024553423N00639800EA0219802211000 +B1612054553421N00639827EA0219702209000 +B1612084553419N00639854EA0219702206000 +B1612114553417N00639882EA0219702204000 +B1612144553415N00639910EA0219502202000 +B1612174553413N00639938EA0219502200000 +B1612204553412N00639964EA0219502198000 +B1612234553411N00639991EA0219102196000 +B1612264553409N00640019EA0218902194000 +B1612294553407N00640047EA0218702192000 +B1612324553405N00640075EA0218502190000 +B1612354553404N00640103EA0218402188000 +B1612384553403N00640132EA0218302186000 +B1612414553403N00640161EA0218102184000 +B1612444553404N00640190EA0218002182000 +B1612474553405N00640218EA0218102181000 +B1612504553405N00640246EA0218002179000 +B1612534553404N00640275EA0218102178000 +B1612564553403N00640303EA0217902177000 +B1612594553400N00640333EA0217802175000 +B1613024553398N00640362EA0217902174000 +B1613054553397N00640390EA0217602173000 +B1613084553397N00640420EA0217702172000 +B1613114553398N00640450EA0217602171000 +B1613144553398N00640480EA0217702169000 +B1613184553397N00640519EA0217702168000 +B1613214553397N00640548EA0217502167000 +B1613244553395N00640578EA0217202166000 +B1613274553393N00640607EA0217102164000 +B1613304553389N00640637EA0217002163000 +B1613334553385N00640669EA0217102162000 +B1613364553381N00640699EA0216902161000 +B1613394553380N00640730EA0216402159000 +B1613424553378N00640762EA0216102158000 +B1613454553379N00640794EA0215602156000 +B1613484553379N00640825EA0215002154000 +B1613514553378N00640856EA0214502151000 +B1613544553377N00640887EA0214502148000 +B1613574553377N00640914EA0214202146000 +B1614004553377N00640943EA0213802143000 +B1614034553377N00640975EA0213702140000 +B1614064553377N00641006EA0213702138000 +B1614094553376N00641036EA0213302136000 +B1614124553374N00641067EA0213102133000 +B1614154553373N00641098EA0212702130000 +B1614184553371N00641129EA0212402128000 +B1614214553371N00641158EA0212102125000 +B1614244553370N00641186EA0211702122000 +B1614274553371N00641215EA0211202119000 +B1614304553372N00641243EA0210502116000 +B1614334553375N00641272EA0209902113000 +B1614364553378N00641300EA0209602109000 +B1614394553381N00641327EA0209002105000 +B1614424553384N00641355EA0208802101000 +B1614454553387N00641382EA0208302097000 +B1614494553392N00641420EA0207902092000 +B1614524553397N00641446EA0207502088000 +B1614554553400N00641472EA0207002084000 +B1614584553402N00641499EA0206802080000 +B1615014553404N00641523EA0206202077000 +B1615044553405N00641550EA0205802073000 +B1615074553407N00641576EA0205302069000 +B1615104553408N00641602EA0205002065000 +B1615134553409N00641629EA0204702061000 +B1615164553409N00641657EA0204802057000 +B1615194553412N00641684EA0204802054000 +B1615224553416N00641711EA0204502051000 +B1615254553419N00641738EA0204202048000 +B1615284553422N00641766EA0204102045000 +B1615314553425N00641792EA0203902043000 +B1615344553429N00641821EA0204002040000 +B1615374553433N00641846EA0204002038000 +B1615404553437N00641872EA0204002036000 +B1615434553440N00641898EA0204102034000 +B1615464553444N00641924EA0204002033000 +B1615494553448N00641949EA0203802032000 +B1615524553453N00641975EA0203602031000 +B1615554553458N00642000EA0203502029000 +B1615584553462N00642025EA0203302028000 +B1616014553465N00642052EA0203302028000 +B1616044553469N00642077EA0203302027000 +B1616074553471N00642104EA0203202026000 +B1616104553473N00642131EA0203102025000 +B1616134553476N00642157EA0202802024000 +B1616164553481N00642185EA0202602024000 +B1616194553484N00642212EA0202402023000 +B1616234553488N00642247EA0202002021000 +B1616264553492N00642274EA0201802020000 +B1616294553497N00642300EA0201502018000 +B1616324553500N00642327EA0201402016000 +B1616354553503N00642355EA0201302015000 +B1616384553505N00642383EA0201402013000 +B1616414553505N00642411EA0201402011000 +B1616444553506N00642438EA0201702010000 +B1616474553507N00642465EA0202102009000 +B1616504553507N00642489EA0202102008000 +B1616534553507N00642514EA0202002008000 +B1616564553507N00642539EA0201902008000 +B1616594553506N00642564EA0201602007000 +B1617024553506N00642588EA0201602006000 +B1617054553505N00642614EA0201402006000 +B1617084553504N00642638EA0201202005000 +B1617114553503N00642664EA0201102004000 +B1617144553503N00642689EA0201102003000 +B1617174553502N00642713EA0200602002000 +B1617204553502N00642739EA0200602000000 +B1617234553502N00642764EA0200301999000 +B1617264553501N00642788EA0200301998000 +B1617294553500N00642813EA0200101996000 +B1617324553500N00642837EA0200001995000 +B1617364553499N00642868EA0199701993000 +B1617394553499N00642891EA0199501992000 +B1617424553498N00642914EA0199301990000 +B1617454553497N00642937EA0199001988000 +B1617484553495N00642960EA0198601986000 +B1617514553493N00642984EA0198301984000 +B1617544553490N00643008EA0198101982000 +B1617574553488N00643032EA0197701979000 +B1618004553484N00643057EA0197201977000 +B1618034553481N00643084EA0197301974000 +B1618064553476N00643109EA0197501972000 +B1618094553472N00643133EA0197401970000 +B1618124553469N00643158EA0197501968000 +B1618154553467N00643183EA0197201966000 +B1618184553464N00643209EA0197301964000 +B1618214553462N00643234EA0197301963000 +B1618244553459N00643260EA0197401961000 +B1618274553456N00643285EA0197501960000 +B1618304553452N00643311EA0197501959000 +B1618334553449N00643338EA0197801958000 +B1618364553445N00643363EA0197601958000 +B1618394553442N00643390EA0197901957000 +B1618424553437N00643414EA0197801957000 +B1618454553433N00643440EA0197901957000 +B1618484553428N00643465EA0197901958000 +B1618514553423N00643490EA0197801958000 +B1618554553416N00643522EA0197701959000 +B1618584553410N00643547EA0197801959000 +B1619014553403N00643571EA0197801960000 +B1619044553396N00643595EA0197901960000 +B1619074553388N00643619EA0198001961000 +B1619104553380N00643642EA0197501961000 +B1619134553373N00643666EA0197201961000 +B1619164553365N00643690EA0196701960000 +B1619194553358N00643715EA0196301959000 +B1619224553352N00643741EA0195801958000 +B1619254553344N00643768EA0195501956000 +B1619284553335N00643793EA0195001954000 +B1619314553326N00643818EA0194601951000 +B1619344553316N00643843EA0194201949000 +B1619374553305N00643868EA0193901947000 +B1619404553294N00643892EA0193601944000 +B1619434553284N00643917EA0193101942000 +B1619464553273N00643942EA0192801939000 +B1619494553262N00643968EA0192301936000 +B1619524553252N00643997EA0192301933000 +B1619554553243N00644028EA0192201930000 +B1619584553236N00644060EA0192201927000 +B1620014553232N00644092EA0192101924000 +B1620044553229N00644125EA0191801922000 +B1620074553229N00644157EA0191501919000 +B1620104553231N00644190EA0191501916000 +B1620144553238N00644230EA0191601913000 +B1620174553243N00644258EA0191601911000 +B1620204553250N00644285EA0191701909000 +B1620234553259N00644311EA0191901908000 +B1620264553269N00644336EA0192101907000 +B1620294553280N00644361EA0192401906000 +B1620324553291N00644383EA0192501906000 +B1620354553302N00644404EA0192401905000 +B1620384553314N00644422EA0192301905000 +B1620414553326N00644433EA0192001905000 +B1620444553339N00644437EA0191901905000 +B1620474553349N00644434EA0191701904000 +B1620504553353N00644422EA0191401904000 +B1620534553347N00644412EA0191301903000 +B1620564553333N00644408EA0191301902000 +B1620594553317N00644412EA0191401901000 +B1621024553300N00644417EA0191001901000 +B1621054553282N00644421EA0191201901000 +B1621084553263N00644425EA0191501901000 +B1621114553245N00644429EA0191701901000 +B1621144553228N00644436EA0191701901000 +B1621174553211N00644442EA0191701901000 +B1621204553196N00644444EA0191701901000 +B1621234553183N00644446EA0191401901000 +B1621264553167N00644446EA0191401901000 +B1621294553152N00644449EA0191401900000 +B1621334553131N00644450EA0191501900000 +B1621364553116N00644450EA0191801900000 +B1621394553103N00644449EA0191901900000 +B1621424553090N00644448EA0192001900000 +B1621454553077N00644448EA0192101900000 +B1621484553064N00644449EA0192101901000 +B1621514553051N00644451EA0191901901000 +B1621544553036N00644455EA0191601901000 +B1621574553021N00644458EA0191601901000 +B1622004553008N00644460EA0191201901000 +B1622034552994N00644461EA0191101900000 +B1622064552978N00644462EA0191101900000 +B1622094552964N00644464EA0191201899000 +B1622124552949N00644465EA0191001898000 +B1622154552936N00644462EA0190601898000 +B1622184552921N00644459EA0190201897000 +B1622214552904N00644459EA0190501895000 +B1622244552888N00644460EA0190801895000 +B1622274552873N00644459EA0191301894000 +B1622304552855N00644460EA0192101894000 +B1622334552839N00644464EA0192601895000 +B1622364552823N00644466EA0192701896000 +B1622394552813N00644460EA0192701897000 +B1622424552812N00644451EA0192601898000 +B1622454552817N00644447EA0192501898000 +B1622484552827N00644450EA0192301899000 +B1622514552841N00644460EA0192601900000 +B1622554552859N00644479EA0193501902000 +B1622584552870N00644492EA0193901904000 +B1623014552879N00644492EA0194501905000 +B1623044552874N00644483EA0195301907000 +B1623074552858N00644487EA0195701910000 +B1623104552841N00644509EA0195901913000 +B1623134552834N00644543EA0196401916000 +B1623164552843N00644571EA0196801920000 +B1623194552855N00644582EA0197501923000 +B1623224552862N00644579EA0198001925000 +B1623254552857N00644571EA0198901928000 +B1623284552844N00644575EA0199101933000 +B1623314552827N00644591EA0199401938000 +B1623344552809N00644607EA0199201942000 +B1623374552793N00644609EA0199401946000 +B1623404552781N00644606EA0199101950000 +B1623434552770N00644598EA0198901954000 +B1623464552760N00644590EA0197901956000 +B1623494552748N00644577EA0197901957000 +B1623524552736N00644568EA0197301958000 +B1623554552722N00644557EA0197101959000 +B1623584552708N00644549EA0197101959000 +B1624014552693N00644542EA0196601959000 +B1624044552679N00644530EA0197301958000 +B1624074552662N00644528EA0197801958000 +B1624104552644N00644528EA0198901959000 +B1624134552633N00644525EA0198701959000 +B1624164552630N00644519EA0199001960000 +B1624194552635N00644520EA0198701960000 +B1624234552644N00644541EA0198501961000 +B1624264552639N00644572EA0198101962000 +B1624294552622N00644598EA0198001962000 +B1624324552600N00644615EA0198001962000 +B1624354552581N00644621EA0198001962000 +B1624384552568N00644617EA0198101963000 +B1624414552566N00644610EA0198401963000 +B1624444552572N00644610EA0197901963000 +B1624474552580N00644609EA0197601963000 +B1624504552589N00644608EA0197501964000 +B1624534552597N00644605EA0197001964000 +B1624564552606N00644602EA0196401963000 +B1624594552617N00644596EA0196001962000 +B1625024552626N00644593EA0196701962000 +B1625054552626N00644586EA0196901961000 +B1625084552624N00644577EA0197301961000 +B1625114552624N00644570EA0196601961000 +B1625144552628N00644562EA0196301960000 +B1625174552634N00644556EA0196001960000 +B1625204552643N00644551EA0195501958000 +B1625234552652N00644551EA0195101956000 +B1625264552662N00644551EA0195001954000 +B1625294552672N00644550EA0195201952000 +B1625324552680N00644547EA0196001951000 +B1625354552685N00644545EA0196001951000 +B1625384552686N00644538EA0196001950000 +B1625424552687N00644529EA0196001950000 +B1625454552685N00644520EA0195701949000 +B1625484552681N00644511EA0195401949000 +B1625514552677N00644501EA0195001948000 +B1625544552676N00644492EA0195101947000 +B1625574552678N00644484EA0195301946000 +B1626004552682N00644478EA0195701946000 +B1626034552685N00644473EA0195601945000 +B1626064552691N00644472EA0195201944000 +B1626094552699N00644470EA0194701944000 +B1626124552709N00644469EA0194401942000 +B1626154552719N00644470EA0194401940000 +B1626184552730N00644470EA0194601939000 +B1626214552738N00644473EA0194301938000 +B1626244552749N00644475EA0194101936000 +B1626274552758N00644475EA0194101935000 +B1626304552767N00644474EA0193601934000 +B1626334552779N00644473EA0193901932000 +B1626364552788N00644477EA0194001931000 +B1626394552799N00644477EA0194301930000 +B1626424552808N00644473EA0194701929000 +B1626454552809N00644461EA0195201929000 +B1626484552795N00644458EA0195701929000 +B1626514552778N00644475EA0196201930000 +B1626544552773N00644507EA0196401931000 +B1626574552781N00644534EA0196801933000 +B1627014552796N00644544EA0197001935000 +B1627044552801N00644538EA0197501937000 +B1627074552800N00644532EA0197201938000 +B1627104552796N00644523EA0197001939000 +B1627134552797N00644516EA0196701940000 +B1627164552804N00644511EA0196401941000 +B1627194552812N00644510EA0196101942000 +B1627224552824N00644507EA0195401943000 +B1627254552837N00644503EA0195401943000 +B1627284552849N00644499EA0195301943000 +B1627314552861N00644494EA0195101943000 +B1627344552874N00644491EA0195301943000 +B1627374552887N00644489EA0195101942000 +B1627404552900N00644487EA0195301942000 +B1627434552912N00644485EA0195701942000 +B1627464552921N00644485EA0196501942000 +B1627494552928N00644485EA0196401942000 +B1627524552936N00644481EA0196701943000 +B1627564552947N00644478EA0196501943000 +B1627594552958N00644475EA0196601944000 +B1628024552969N00644474EA0196801945000 +B1628054552982N00644475EA0197101946000 +B1628084552994N00644477EA0197301947000 +B1628114553005N00644478EA0197401948000 +B1628144553014N00644479EA0197001949000 +B1628174553025N00644479EA0196701950000 +B1628204553036N00644479EA0196001950000 +B1628234553051N00644478EA0195801950000 +B1628264553064N00644475EA0195901950000 +B1628294553078N00644474EA0195501949000 +B1628324553094N00644474EA0195801949000 +B1628354553108N00644475EA0196001948000 +B1628384553123N00644474EA0196001948000 +B1628414553135N00644475EA0195601947000 +B1628444553151N00644475EA0195501947000 +B1628474553167N00644476EA0195001946000 +B1628514553188N00644477EA0194801944000 +B1628544553203N00644478EA0194701943000 +B1628574553220N00644480EA0194201942000 +B1629004553237N00644485EA0194201940000 +B1629034553253N00644492EA0194001938000 +B1629064553271N00644500EA0193801937000 +B1629094553289N00644509EA0193301935000 +B1629124553308N00644517EA0192901933000 +B1629154553326N00644528EA0192701930000 +B1629184553343N00644539EA0192001928000 +B1629214553362N00644553EA0192101925000 +B1629244553377N00644566EA0191601923000 +B1629274553395N00644579EA0191301920000 +B1629304553414N00644591EA0191701917000 +B1629334553430N00644603EA0191001915000 +B1629364553449N00644616EA0191001913000 +B1629394553464N00644632EA0190901910000 +B1629424553480N00644646EA0190601908000 +B1629454553496N00644658EA0190101906000 +B1629484553514N00644669EA0189901903000 +B1629514553532N00644681EA0189701901000 +B1629544553550N00644693EA0189601899000 +B1629574553570N00644707EA0190301896000 +B1630004553586N00644721EA0190901895000 +B1630034553601N00644731EA0191001894000 +B1630064553614N00644738EA0191401894000 +B1630104553628N00644743EA0191601894000 +B1630134553640N00644750EA0192001894000 +B1630164553651N00644757EA0192501895000 +B1630194553663N00644753EA0193001896000 +B1630224553665N00644742EA0193301897000 +B1630254553655N00644735EA0193601899000 +B1630284553639N00644748EA0193301901000 +B1630314553630N00644777EA0193701902000 +B1630344553634N00644804EA0194201904000 +B1630374553645N00644821EA0194801906000 +B1630404553658N00644829EA0195201909000 +B1630434553671N00644827EA0195501912000 +B1630464553681N00644822EA0195901915000 +B1630494553685N00644813EA0195801916000 +B1630524553679N00644802EA0195801918000 +B1630554553664N00644806EA0196001921000 +B1630584553654N00644831EA0195901923000 +B1631014553656N00644862EA0196501926000 +B1631044553667N00644879EA0196501928000 +B1631074553682N00644888EA0196901930000 +B1631104553697N00644895EA0197101932000 +B1631134553711N00644902EA0197101934000 +B1631164553724N00644909EA0197501936000 +B1631194553738N00644916EA0197801938000 +B1631224553749N00644913EA0198101940000 +B1631254553751N00644903EA0198301942000 +B1631284553742N00644900EA0198101944000 +B1631314553728N00644907EA0198201947000 +B1631354553709N00644913EA0198101950000 +B1631384553701N00644906EA0198201951000 +B1631414553708N00644899EA0197801953000 +B1631444553722N00644898EA0197701954000 +B1631474553738N00644903EA0197401955000 +B1631504553755N00644911EA0197401956000 +B1631534553771N00644924EA0197401957000 +B1631564553788N00644941EA0197501957000 +B1631594553805N00644957EA0197301958000 +B1632024553822N00644976EA0197301958000 +B1632054553836N00644998EA0197701959000 +B1632084553850N00645019EA0197801959000 +B1632114553865N00645035EA0197701960000 +B1632144553878N00645058EA0197701960000 +B1632174553884N00645090EA0197301960000 +B1632204553883N00645125EA0196901960000 +B1632234553880N00645162EA0196501960000 +B1632264553873N00645196EA0196101959000 +B1632294553864N00645230EA0196101958000 +B1632324553857N00645263EA0196201956000 +B1632354553853N00645294EA0195901955000 +B1632384553847N00645325EA0195801954000 +B1632414553841N00645354EA0195101952000 +B1632444553833N00645385EA0195001950000 +B1632474553825N00645411EA0195001948000 +B1632514553817N00645441EA0193801945000 +B1632544553811N00645469EA0193401943000 +B1632574553806N00645495EA0192301939000 +B1633004553798N00645525EA0191901935000 +B1633034553788N00645550EA0192401932000 +B1633064553778N00645575EA0193001929000 +B1633094553776N00645603EA0193301927000 +B1633124553787N00645622EA0193701925000 +B1633154553797N00645621EA0194201924000 +B1633184553799N00645607EA0194601924000 +B1633214553790N00645595EA0195001924000 +B1633244553775N00645602EA0195601925000 +B1633274553762N00645623EA0195701926000 +B1633304553761N00645653EA0195701928000 +B1633334553770N00645673EA0195901929000 +B1633364553782N00645675EA0196101931000 +B1633394553783N00645664EA0196301932000 +B1633424553771N00645660EA0196501934000 +B1633454553756N00645675EA0196401935000 +B1633484553747N00645702EA0196001937000 +B1633514553737N00645731EA0195601937000 +B1633544553724N00645759EA0195201938000 +B1633574553710N00645786EA0195001938000 +B1634004553697N00645811EA0193701937000 +B1634034553682N00645837EA0192501935000 +B1634064553665N00645863EA0191701933000 +B1634094553651N00645885EA0190201929000 +B1634134553629N00645916EA0189401923000 +B1634164553614N00645936EA0188401917000 +B1634194553595N00645959EA0186801911000 +B1634224553575N00645978EA0186201904000 +B1634254553556N00645999EA0184401897000 +B1634284553534N00646025EA0183601888000 +B1634314553514N00646047EA0182901880000 +B1634344553495N00646068EA0182401872000 +B1634374553478N00646090EA0182801865000 +B1634404553467N00646104EA0182501858000 +B1634434553451N00646117EA0182001852000 +B1634464553435N00646129EA0181801846000 +B1634494553420N00646142EA0181601841000 +B1634524553403N00646156EA0182201836000 +B1634554553389N00646168EA0182401832000 +B1634584553374N00646177EA0182701829000 +B1635014553359N00646182EA0183201827000 +B1635044553345N00646175EA0183701826000 +B1635074553338N00646158EA0183801825000 +B1635104553338N00646139EA0183401824000 +B1635134553348N00646129EA0182701823000 +B1635164553358N00646139EA0182301821000 +B1635194553359N00646163EA0182401819000 +B1635224553352N00646183EA0183001818000 +B1635254553340N00646199EA0183201817000 +B1635284553325N00646214EA0184101817000 +B1635314553311N00646232EA0184601818000 +B1635344553301N00646256EA0185501819000 +B1635374553301N00646277EA0185601821000 +B1635404553311N00646292EA0185901823000 +B1635444553326N00646292EA0185901826000 +B1635474553335N00646280EA0185801828000 +B1635504553334N00646262EA0185701830000 +B1635534553320N00646245EA0185601831000 +B1635564553301N00646238EA0186501832000 +B1635594553286N00646240EA0186801834000 +B1636024553273N00646249EA0187101835000 +B1636054553267N00646266EA0187101837000 +B1636084553268N00646288EA0187701839000 +B1636114553278N00646298EA0188101841000 +B1636144553287N00646288EA0188501843000 +B1636174553285N00646270EA0188801846000 +B1636204553271N00646264EA0189301849000 +B1636234553258N00646272EA0189401852000 +B1636264553252N00646293EA0190101854000 +B1636294553258N00646309EA0190401858000 +B1636324553270N00646313EA0190701861000 +B1636354553279N00646303EA0190901864000 +B1636384553277N00646285EA0191001867000 +B1636414553262N00646274EA0191201870000 +B1636444553246N00646283EA0191701873000 +B1636474553239N00646303EA0192201876000 +B1636504553242N00646323EA0192801880000 +B1636534553253N00646330EA0193001883000 +B1636564553262N00646321EA0193401887000 +B1636594553260N00646304EA0193301890000 +B1637024553248N00646291EA0193501893000 +B1637054553230N00646291EA0193701896000 +B1637084553215N00646301EA0193801899000 +B1637124553200N00646321EA0193401902000 +B1637154553201N00646343EA0192801904000 +B1637184553211N00646360EA0192601905000 +B1637214553227N00646359EA0192801905000 +B1637244553234N00646345EA0193201906000 +B1637274553231N00646328EA0193401907000 +B1637304553220N00646313EA0193401909000 +B1637334553202N00646313EA0193201909000 +B1637364553189N00646327EA0193101910000 +B1637394553179N00646342EA0192401910000 +B1637424553165N00646359EA0192101910000 +B1637454553152N00646377EA0191701909000 +B1637484553140N00646395EA0191001908000 +B1637514553128N00646416EA0190401906000 +B1637544553118N00646439EA0189801904000 +B1637574553107N00646463EA0189401901000 +B1638004553098N00646486EA0188601898000 +B1638034553088N00646513EA0187901894000 +B1638064553079N00646541EA0187301891000 +B1638094553071N00646571EA0187001886000 +B1638124553064N00646595EA0186101882000 +B1638154553053N00646624EA0184801877000 +B1638184553038N00646656EA0184301872000 +B1638214553023N00646685EA0183501866000 +B1638244553006N00646716EA0183101861000 +B1638274552991N00646746EA0182701855000 +B1638314552970N00646785EA0182001848000 +B1638344552953N00646816EA0181301842000 +B1638374552938N00646845EA0180901836000 +B1638404552922N00646874EA0180001830000 +B1638434552906N00646903EA0179001824000 +B1638464552890N00646934EA0178101818000 +B1638494552877N00646967EA0177901811000 +B1638524552866N00646997EA0177501805000 +B1638554552852N00647027EA0177001799000 +B1638584552839N00647057EA0176801793000 +B1639014552827N00647086EA0176301788000 +B1639044552814N00647115EA0176101782000 +B1639074552802N00647146EA0175501777000 +B1639104552788N00647179EA0175301772000 +B1639134552774N00647210EA0175701768000 +B1639164552762N00647236EA0176001764000 +B1639194552750N00647260EA0175801761000 +B1639224552738N00647282EA0175701758000 +B1639254552727N00647304EA0175301755000 +B1639284552713N00647327EA0175201752000 +B1639314552701N00647349EA0174701750000 +B1639344552688N00647373EA0174601747000 +B1639374552676N00647397EA0174301744000 +B1639404552664N00647422EA0174401742000 +B1639434552654N00647447EA0174401739000 +B1639464552645N00647474EA0174401737000 +B1639494552637N00647500EA0174101735000 +B1639534552626N00647537EA0174001733000 +B1639564552619N00647564EA0173701731000 +B1639594552612N00647593EA0173701729000 +B1640024552606N00647620EA0173501727000 +B1640054552603N00647649EA0173401726000 +B1640084552602N00647676EA0173401724000 +B1640114552603N00647702EA0173001723000 +B1640144552606N00647728EA0172801721000 +B1640174552613N00647752EA0172701720000 +B1640204552620N00647777EA0172301718000 +B1640234552625N00647803EA0172401716000 +B1640264552632N00647827EA0172501715000 +B1640294552640N00647847EA0172501714000 +B1640324552644N00647870EA0172701713000 +B1640354552645N00647895EA0172501712000 +B1640384552645N00647922EA0172601712000 +B1640414552645N00647948EA0172801711000 +B1640444552646N00647973EA0172601711000 +B1640474552647N00648001EA0172401711000 +B1640504552650N00648029EA0172201710000 +B1640534552655N00648057EA0172001709000 +B1640564552659N00648083EA0171601708000 +B1640594552667N00648109EA0171301707000 +B1641024552675N00648136EA0171301705000 +B1641054552682N00648161EA0171001704000 +B1641094552692N00648196EA0170901702000 +B1641124552698N00648221EA0170901701000 +B1641154552702N00648248EA0170701699000 +B1641184552703N00648276EA0170601698000 +B1641214552704N00648306EA0170601697000 +B1641244552705N00648336EA0170401695000 +B1641274552709N00648367EA0169901694000 +B1641304552713N00648398EA0169601692000 +B1641334552717N00648429EA0169501690000 +B1641364552722N00648459EA0169301688000 +B1641394552726N00648490EA0169201686000 +B1641424552729N00648520EA0169101684000 +B1641454552731N00648549EA0168901683000 +B1641484552734N00648577EA0169001681000 +B1641514552737N00648601EA0169401680000 +B1641544552743N00648622EA0169301679000 +B1641574552753N00648637EA0169401678000 +B1642004552765N00648639EA0169501678000 +B1642034552774N00648631EA0169901678000 +B1642064552776N00648616EA0170301678000 +B1642094552768N00648605EA0170401678000 +B1642124552755N00648604EA0170201678000 +B1642154552740N00648617EA0169901679000 +B1642184552728N00648639EA0169901679000 +B1642214552721N00648666EA0170401679000 +B1642244552721N00648687EA0170401679000 +B1642284552725N00648717EA0170301680000 +B1642314552725N00648740EA0170601681000 +B1642344552728N00648764EA0170801681000 +B1642374552733N00648784EA0171001682000 +B1642404552743N00648795EA0170801683000 +B1642434552755N00648791EA0170901683000 +B1642464552761N00648777EA0171001684000 +B1642494552756N00648760EA0171001684000 +B1642524552741N00648751EA0171101685000 +B1642554552726N00648759EA0171201686000 +B1642584552719N00648782EA0171201686000 +B1643014552721N00648804EA0171301687000 +B1643044552728N00648824EA0171001688000 +B1643074552735N00648846EA0170901689000 +B1643104552743N00648870EA0170901689000 +B1643134552749N00648894EA0171001690000 +B1643164552756N00648918EA0171001690000 +B1643194552764N00648940EA0171201691000 +B1643224552771N00648958EA0171101692000 +B1643254552778N00648979EA0171001692000 +B1643284552784N00649001EA0171201693000 +B1643314552790N00649025EA0171001693000 +B1643344552797N00649050EA0170901693000 +B1643374552803N00649074EA0170801694000 +B1643404552810N00649099EA0170601694000 +B1643434552815N00649126EA0170201693000 +B1643464552818N00649153EA0170301693000 +B1643504552819N00649189EA0169801692000 +B1643534552819N00649218EA0169701690000 +B1643564552822N00649247EA0169601689000 +B1643594552829N00649275EA0169601688000 +B1644024552835N00649302EA0169401687000 +B1644054552841N00649333EA0169201686000 +B1644084552848N00649359EA0169001684000 +B1644114552856N00649385EA0168401683000 +B1644144552864N00649411EA0168301681000 +B1644174552871N00649434EA0167901679000 +B1644204552881N00649458EA0167501677000 +B1644234552892N00649480EA0167201675000 +B1644264552903N00649503EA0167001672000 +B1644294552913N00649525EA0166901670000 +B1644324552924N00649545EA0166801667000 +B1644354552937N00649563EA0166801665000 +B1644384552950N00649581EA0166901664000 +B1644414552964N00649599EA0166801662000 +B1644444552977N00649617EA0166801660000 +B1644474552991N00649635EA0167001659000 +B1644504553005N00649655EA0167301658000 +B1644534553018N00649675EA0167301658000 +B1644564553029N00649694EA0167301657000 +B1644594553042N00649715EA0167101657000 +B1645024553054N00649738EA0167001656000 +B1645064553070N00649770EA0166801655000 +B1645094553081N00649798EA0166701654000 +B1645124553091N00649825EA0167101653000 +B1645154553101N00649848EA0167501653000 +B1645184553112N00649865EA0167601653000 +B1645214553125N00649863EA0167501653000 +B1645244553132N00649851EA0167701653000 +B1645274553131N00649840EA0167501653000 +B1645304553123N00649830EA0167301653000 +B1645334553114N00649825EA0167101653000 +B1645364553109N00649814EA0166801653000 +B1645394553114N00649802EA0166801652000 +B1645424553129N00649801EA0166601652000 +B1645454553145N00649819EA0166501651000 +B1645484553155N00649847EA0166201650000 +B1645514553161N00649878EA0165801649000 +B1645544553167N00649910EA0165601648000 +B1645574553173N00649940EA0165101646000 +B1646004553179N00649972EA0164601644000 +B1646034553187N00650003EA0164201642000 +B1646064553197N00650032EA0163801639000 +B1646094553207N00650061EA0163701636000 +B1646124553217N00650089EA0163201634000 +B1646154553227N00650119EA0162901631000 +B1646184553238N00650147EA0162501628000 +B1646214553247N00650176EA0162201625000 +B1646254553260N00650214EA0161701621000 +B1646284553268N00650242EA0161001618000 +B1646314553279N00650270EA0160501614000 +B1646344553289N00650296EA0160101610000 +B1646374553301N00650321EA0159801606000 +B1646404553314N00650345EA0159701603000 +B1646434553327N00650370EA0159501599000 +B1646464553340N00650394EA0159601596000 +B1646494553353N00650419EA0159601594000 +B1646524553367N00650441EA0159701591000 +B1646554553381N00650462EA0159501589000 +B1646584553394N00650485EA0159401587000 +B1647014553406N00650507EA0159501586000 +B1647044553418N00650531EA0159701584000 +B1647074553429N00650553EA0159601583000 +B1647104553439N00650577EA0159201582000 +B1647134553450N00650600EA0158901580000 +B1647164553463N00650622EA0158801578000 +B1647194553474N00650646EA0158701577000 +B1647224553487N00650668EA0158601575000 +B1647254553499N00650689EA0158601574000 +B1647284553511N00650711EA0158601573000 +B1647314553524N00650735EA0158401572000 +B1647344553535N00650763EA0158201570000 +B1647374553546N00650792EA0158001569000 +B1647414553563N00650831EA0157701567000 +B1647444553577N00650859EA0157301565000 +B1647474553589N00650888EA0157401564000 +B1647504553597N00650917EA0157101562000 +B1647534553605N00650949EA0156801560000 +B1647564553613N00650981EA0156601558000 +B1647594553625N00651010EA0156501556000 +B1648024553637N00651037EA0156501555000 +B1648054553651N00651060EA0156701553000 +B1648084553664N00651084EA0156301552000 +B1648114553677N00651111EA0156501550000 +B1648144553690N00651134EA0156301549000 +B1648174553703N00651160EA0155701548000 +B1648204553718N00651186EA0155801546000 +B1648234553731N00651210EA0155501545000 +B1648264553747N00651234EA0155101543000 +B1648294553761N00651257EA0155201541000 +B1648324553777N00651278EA0154601540000 +B1648354553792N00651301EA0154301538000 +B1648384553807N00651325EA0153701535000 +B1648414553822N00651351EA0153601533000 +B1648444553837N00651376EA0153201530000 +B1648474553852N00651402EA0152801528000 +B1648504553869N00651424EA0152401525000 +B1648534553886N00651447EA0152201522000 +B1648574553907N00651477EA0152001518000 +B1649004553923N00651498EA0151501516000 +B1649034553940N00651519EA0151201513000 +B1649064553958N00651540EA0150901510000 +B1649094553976N00651561EA0150401507000 +B1649124553994N00651583EA0150001504000 +B1649154554012N00651606EA0149701500000 +B1649184554030N00651629EA0149601497000 +B1649214554045N00651653EA0149501494000 +B1649244554058N00651676EA0149201491000 +B1649274554073N00651699EA0149001488000 +B1649304554090N00651716EA0148601486000 +B1649334554110N00651731EA0148301483000 +B1649364554130N00651746EA0148001480000 +B1649394554150N00651760EA0148101477000 +B1649424554169N00651771EA0147801474000 +B1649454554189N00651784EA0147701472000 +B1649484554206N00651800EA0147801470000 +B1649514554220N00651820EA0147601468000 +B1649544554234N00651841EA0147101466000 +B1649574554252N00651859EA0146801463000 +B1650004554272N00651871EA0147401461000 +B1650034554289N00651882EA0147501460000 +B1650064554304N00651896EA0147401458000 +B1650094554318N00651912EA0147101457000 +B1650124554334N00651930EA0147001456000 +B1650164554357N00651950EA0146501455000 +B1650194554374N00651960EA0146301453000 +B1650224554394N00651968EA0146301452000 +B1650254554414N00651977EA0146401451000 +B1650284554434N00651987EA0146601450000 +B1650314554453N00651998EA0146601449000 +B1650344554474N00652009EA0146901449000 +B1650374554495N00652019EA0147401449000 +B1650404554513N00652022EA0147201449000 +B1650434554533N00652025EA0146801449000 +B1650464554555N00652034EA0146501449000 +B1650494554578N00652044EA0146101448000 +B1650524554600N00652051EA0146201447000 +B1650554554621N00652058EA0145701446000 +B1650584554642N00652068EA0145701445000 +B1651014554663N00652079EA0145601444000 +B1651044554685N00652087EA0145701443000 +B1651074554706N00652094EA0145501442000 +B1651104554729N00652103EA0145301441000 +B1651134554751N00652115EA0145501440000 +B1651164554769N00652129EA0145401439000 +B1651194554786N00652141EA0144801438000 +B1651224554807N00652149EA0144701436000 +B1651254554825N00652154EA0144601435000 +B1651284554844N00652161EA0144201434000 +B1651324554869N00652166EA0144001432000 +B1651354554887N00652168EA0143601430000 +B1651384554906N00652167EA0143401429000 +B1651414554925N00652166EA0143201427000 +B1651444554945N00652164EA0143001425000 +B1651474554964N00652164EA0142401423000 +B1651504554985N00652164EA0142201420000 +B1651534555004N00652162EA0141901418000 +B1651564555021N00652158EA0141401415000 +B1651594555039N00652153EA0141001413000 +B1652024555058N00652149EA0140801410000 +B1652054555077N00652150EA0140601407000 +B1652084555098N00652157EA0140401404000 +B1652114555117N00652167EA0140301402000 +B1652144555136N00652178EA0140001399000 +B1652174555156N00652185EA0139801396000 +B1652204555175N00652194EA0139501394000 +B1652234555193N00652209EA0139101391000 +B1652264555212N00652222EA0138701388000 +B1652294555231N00652231EA0138201386000 +B1652324555253N00652239EA0138101383000 +B1652354555274N00652245EA0138101380000 +B1652384555294N00652251EA0137601377000 +B1652414555314N00652253EA0137101374000 +B1652444555334N00652254EA0136701371000 +B1652474555354N00652252EA0136201368000 +B1652514555379N00652245EA0135701363000 +B1652544555397N00652239EA0135301360000 +B1652574555415N00652230EA0134901356000 +B1653004555432N00652221EA0134501352000 +B1653034555449N00652215EA0133901348000 +B1653064555468N00652210EA0133401344000 +B1653094555487N00652205EA0133101340000 +B1653124555505N00652199EA0132701336000 +B1653154555524N00652192EA0132001332000 +B1653184555541N00652184EA0131501327000 +B1653214555559N00652173EA0130901323000 +B1653244555575N00652161EA0130801318000 +B1653274555591N00652149EA0130301314000 +B1653304555607N00652136EA0130301310000 +B1653334555621N00652122EA0130201306000 +B1653364555635N00652107EA0130101302000 +B1653394555646N00652092EA0130201298000 +B1653424555656N00652076EA0130101296000 +B1653454555664N00652059EA0130101293000 +B1653484555671N00652043EA0130101291000 +B1653514555680N00652026EA0130001289000 +B1653544555689N00652011EA0130201287000 +B1653574555697N00651999EA0130301286000 +B1654004555706N00651986EA0130301284000 +B1654034555713N00651972EA0130201283000 +B1654064555720N00651958EA0130301282000 +B1654104555725N00651935EA0130201281000 +B1654134555721N00651916EA0130201280000 +B1654164555710N00651905EA0129801279000 +B1654194555695N00651902EA0129601277000 +B1654224555680N00651908EA0129101276000 +B1654254555667N00651920EA0128901274000 +B1654284555656N00651939EA0128201272000 +B1654314555647N00651961EA0127901270000 +B1654344555638N00651981EA0127501268000 +B1654374555630N00652003EA0127501266000 +B1654404555626N00652025EA0127501263000 +B1654434555625N00652050EA0127501261000 +B1654464555627N00652074EA0127501259000 +B1654494555634N00652098EA0127401258000 +B1654524555646N00652121EA0127301256000 +B1654554555660N00652143EA0127201254000 +B1654584555674N00652165EA0127401253000 +B1655014555688N00652185EA0127201252000 +B1655044555703N00652207EA0127301251000 +B1655074555718N00652225EA0127201250000 +B1655104555733N00652244EA0127101249000 +B1655134555747N00652263EA0127001248000 +B1655164555762N00652281EA0126901247000 +B1655194555777N00652300EA0127001246000 +B1655224555792N00652318EA0126901245000 +B1655254555808N00652333EA0126901244000 +B1655284555827N00652340EA0126901244000 +B1655324555851N00652340EA0127101244000 +B1655354555866N00652330EA0127101244000 +B1655384555871N00652311EA0127401244000 +B1655414555871N00652294EA0127401244000 +B1655444555865N00652278EA0127501245000 +B1655474555856N00652270EA0127401245000 +B1655504555844N00652272EA0127601245000 +B1655534555836N00652284EA0127601246000 +B1655564555833N00652303EA0127601246000 +B1655594555837N00652324EA0127601247000 +B1656024555848N00652343EA0127901247000 +B1656054555864N00652352EA0127901248000 +B1656084555879N00652352EA0128001249000 +B1656114555893N00652344EA0127901250000 +B1656144555905N00652331EA0127901250000 +B1656174555916N00652316EA0128001250000 +B1656204555923N00652300EA0128201251000 +B1656234555926N00652283EA0128201251000 +B1656264555926N00652265EA0128001251000 +B1656294555922N00652249EA0127801251000 +B1656324555913N00652240EA0127401251000 +B1656354555902N00652234EA0127501250000 +B1656384555890N00652234EA0127001249000 +B1656414555876N00652237EA0126801248000 +B1656444555862N00652240EA0126601247000 +B1656484555843N00652235EA0126701245000 +B1656514555828N00652237EA0126701244000 +B1656544555815N00652243EA0126901244000 +B1656574555805N00652255EA0127001243000 +B1657004555802N00652275EA0127001243000 +B1657034555807N00652298EA0127001243000 +B1657064555819N00652318EA0127001243000 +B1657094555835N00652329EA0127001243000 +B1657124555853N00652326EA0127101244000 +B1657154555867N00652311EA0127301244000 +B1657184555875N00652292EA0127301244000 +B1657214555879N00652271EA0127301244000 +B1657244555876N00652252EA0127201244000 +B1657274555869N00652237EA0126901244000 +B1657304555857N00652225EA0126801244000 +B1657334555846N00652218EA0126901244000 +B1657364555833N00652217EA0126801243000 +B1657394555820N00652224EA0126901243000 +B1657424555808N00652232EA0126701242000 +B1657454555795N00652242EA0126801242000 +B1657484555783N00652254EA0127101242000 +B1657514555774N00652266EA0127001242000 +B1657544555765N00652279EA0127101242000 +B1657574555754N00652289EA0127201242000 +B1658004555742N00652296EA0127501242000 +B1658034555730N00652301EA0127901243000 +B1658074555716N00652305EA0127601243000 +B1658104555705N00652301EA0127701244000 +B1658134555696N00652295EA0127501244000 +B1658164555690N00652283EA0127601245000 +B1658194555689N00652268EA0127401245000 +B1658224555697N00652252EA0127401245000 +B1658254555711N00652242EA0127701246000 +B1658284555727N00652240EA0127901246000 +B1658314555742N00652249EA0128101247000 +B1658344555751N00652265EA0128101248000 +B1658374555752N00652283EA0128501249000 +B1658404555749N00652300EA0128501250000 +B1658434555742N00652318EA0128701251000 +B1658464555737N00652335EA0128701252000 +B1658494555733N00652356EA0128801252000 +B1658524555730N00652378EA0128901253000 +B1658554555739N00652400EA0129101254000 +B1658584555754N00652415EA0129301255000 +B1659014555771N00652414EA0129501256000 +B1659044555776N00652400EA0129801257000 +B1659074555771N00652383EA0130501259000 +B1659104555763N00652373EA0130501261000 +B1659134555751N00652372EA0130901262000 +B1659164555742N00652385EA0130801264000 +B1659194555741N00652408EA0130801266000 +B1659224555750N00652432EA0131101268000 +B1659264555771N00652449EA0131001270000 +B1659294555787N00652445EA0131401272000 +B1659324555797N00652432EA0132001274000 +B1659354555801N00652414EA0132401276000 +B1659384555793N00652397EA0132801278000 +B1659414555782N00652401EA0133201280000 +B1659444555776N00652416EA0133601283000 +B1659474555783N00652437EA0133801285000 +B1659504555796N00652451EA0134201288000 +B1659534555810N00652451EA0134901291000 +B1659564555819N00652438EA0135301295000 +B1659594555821N00652417EA0135601298000 +B1700024555813N00652403EA0136001302000 +B1700054555803N00652404EA0136301305000 +B1700084555798N00652418EA0136401309000 +B1700114555806N00652438EA0136901312000 +B1700144555822N00652449EA0137301315000 +B1700174555837N00652448EA0138001319000 +B1700204555848N00652436EA0138101322000 +B1700234555854N00652418EA0138501326000 +B1700264555851N00652400EA0138501329000 +B1700294555841N00652389EA0138601332000 +B1700324555830N00652388EA0138901335000 +B1700354555822N00652399EA0138501337000 +B1700384555819N00652418EA0138101339000 +B1700414555828N00652440EA0138101341000 +B1700444555844N00652451EA0138401343000 +B1700474555859N00652446EA0138501344000 +B1700514555874N00652427EA0138601347000 +B1700544555875N00652408EA0138501348000 +B1700574555873N00652393EA0138601349000 +B1701004555866N00652380EA0138401350000 +B1701034555855N00652377EA0138201351000 +B1701064555846N00652388EA0137901352000 +B1701094555847N00652408EA0137401352000 +B1701124555859N00652426EA0137001351000 +B1701154555878N00652427EA0136401351000 +B1701184555894N00652411EA0136201350000 +B1701214555902N00652390EA0136001348000 +B1701244555904N00652367EA0136301347000 +B1701274555903N00652348EA0136201346000 +B1701304555899N00652327EA0136301345000 +B1701334555892N00652309EA0136201344000 +B1701364555883N00652288EA0136201343000 +B1701394555874N00652271EA0136301342000 +B1701424555867N00652256EA0135901341000 +B1701454555858N00652239EA0135801341000 +B1701484555854N00652220EA0135601340000 +B1701514555850N00652200EA0135301339000 +B1701544555849N00652177EA0135101338000 +B1701574555847N00652155EA0134901337000 +B1702004555841N00652135EA0134401336000 +B1702034555840N00652114EA0134001334000 +B1702064555838N00652093EA0133701332000 +B1702104555835N00652065EA0133401330000 +B1702134555837N00652046EA0133001328000 +B1702164555836N00652026EA0132501325000 +B1702194555834N00652008EA0132101322000 +B1702224555832N00651989EA0131601320000 +B1702254555828N00651974EA0131101316000 +B1702284555818N00651960EA0130401313000 +B1702314555804N00651950EA0130001309000 +B1702344555790N00651942EA0129401306000 +B1702374555773N00651937EA0129001302000 +B1702404555757N00651936EA0128801298000 +B1702434555740N00651935EA0128401294000 +B1702464555724N00651934EA0128401290000 +B1702494555708N00651928EA0128101286000 +B1702524555693N00651923EA0128101283000 +B1702554555678N00651919EA0128001280000 +B1702584555662N00651917EA0127601276000 +B1703014555646N00651915EA0127501273000 +B1703044555630N00651912EA0127301271000 +B1703074555614N00651911EA0127201268000 +B1703104555600N00651911EA0127001265000 +B1703134555585N00651913EA0126801262000 +B1703164555569N00651915EA0126601260000 +B1703194555553N00651921EA0126301257000 +B1703224555537N00651927EA0126101256000 +B1703254555521N00651937EA0125701256000 +B1703294555504N00651960EA0125401253000 +B1703324555494N00651981EA0125301250000 +B1703354555487N00652002EA0125001248000 +B1703384555482N00652024EA0124701246000 +B1703414555481N00652049EA0124401243000 +B1703444555484N00652074EA0124201240000 +B1703474555488N00652097EA0124101238000 +B1703504555495N00652120EA0123801236000 +B1703534555505N00652140EA0123401233000 +B1703564555516N00652160EA0123101230000 +B1703594555528N00652176EA0123101228000 +B1704024555541N00652190EA0122801226000 +B1704054555555N00652203EA0122701223000 +B1704084555571N00652215EA0122601221000 +B1704114555587N00652225EA0122801219000 +B1704144555602N00652233EA0122801217000 +B1704174555617N00652237EA0123301215000 +B1704204555629N00652236EA0123201214000 +B1704234555644N00652230EA0123501213000 +B1704264555657N00652225EA0123001212000 +B1704294555673N00652220EA0123001211000 +B1704324555687N00652217EA0122501210000 +B1704354555702N00652218EA0122501209000 +B1704384555716N00652219EA0122401208000 +B1704414555728N00652219EA0122201207000 +B1704454555742N00652214EA0122201205000 +B1704484555752N00652208EA0121701204000 +B1704514555761N00652203EA0121601203000 +B1704544555769N00652195EA0121201202000 +B1704574555777N00652186EA0120901200000 +B1705004555782N00652172EA0120501198000 +B1705034555782N00652156EA0120101196000 +B1705064555777N00652140EA0119701194000 +B1705094555764N00652130EA0119201191000 +B1705124555747N00652133EA0118601188000 +B1705154555730N00652144EA0118401185000 +B1705184555719N00652161EA0117901182000 +B1705214555718N00652184EA0117601178000 +B1705244555728N00652196EA0117101175000 +B1705274555737N00652189EA0117001171000 +B1705304555742N00652178EA0116501169000 +B1705334555739N00652162EA0116001165000 +B1705364555726N00652152EA0115701161000 +B1705394555711N00652144EA0115301157000 +B1705424555695N00652139EA0115001154000 +B1705454555679N00652137EA0114601150000 +B1705484555663N00652143EA0114101146000 +B1705514555653N00652164EA0114001142000 +B1705544555657N00652184EA0113801139000 +B1705574555669N00652193EA0114001135000 +B1706014555682N00652194EA0113601132000 +B1706044555693N00652189EA0113401129000 +B1706074555702N00652182EA0113001126000 +B1706104555710N00652172EA0112801124000 +B1706134555715N00652159EA0112501121000 +B1706164555709N00652142EA0112001118000 +B1706194555693N00652141EA0111401116000 +B1706224555677N00652153EA0111401113000 +B1706254555662N00652151EA0110801110000 +B1706284555653N00652133EA0110701106000 +B1706314555649N00652115EA0110201103000 +B1706344555643N00652093EA0109901100000 +B1706374555638N00652074EA0109501097000 +B1706404555629N00652057EA0109401094000 +B1706434555619N00652044EA0108801091000 +B1706464555606N00652034EA0108601087000 +B1706494555596N00652023EA0108301084000 +B1706524555590N00652013EA0108401081000 +B1706554555587N00652011EA0108601080000 +B1706584555586N00652010EA0108601078000 +B1707014555587N00652011EA0108401077000 +B1707044555587N00652011EA0108401076000 +B1707074555587N00652010EA0108501076000 +B1707104555588N00652008EA0108501076000 +B1707144555588N00652006EA0108501075000 +B1707174555588N00652006EA0108401074000 +B1707204555588N00652006EA0108401072000 +B1707234555589N00652005EA0108401072000 +B1707264555589N00652004EA0108401072000 +B1707294555589N00652004EA0108401071000 +B1707324555589N00652005EA0108501069000 +B1707354555588N00652005EA0108401067000 +B1707384555588N00652005EA0108401065000 +B1707414555588N00652006EA0108401063000 +B1707444555588N00652006EA0108501062000 +B1707474555588N00652007EA0108401060000 +B1707504555588N00652007EA0108401059000 +B1707534555588N00652007EA0108401058000 +GAB890A77AFE5CE63979AF6B1BED7F07D +G62BB282E44D63A1149EF2F5E8AF6F2F1 +GEC14381987B15F81003EDE1E01A47843 +G60189641B00B00800019000000000000 diff --git a/float-no-zero/examples/data/igc/Ulrich-Prinz.igc b/float-no-zero/examples/data/igc/Ulrich-Prinz.igc new file mode 100644 index 0000000000..e9cc114fa6 --- /dev/null +++ b/float-no-zero/examples/data/igc/Ulrich-Prinz.igc @@ -0,0 +1,4611 @@ +ABRA02676 +HFDTE190411 +HFFXA100 +HFPLTPILOT:Ulrich Prinz +HFGTYGLIDERTYPE:Boomerang 8 +HFGIDGLIDERID:www.up0.de +HFDTM100GPSDATUM:WGS84 +HFGPSGPS:FURUNO GH-80 +HFRFWFIRMWAREVERSION:2.26 +HFRHWHARDWAREVERSION:1.00 +HFFTYFRTYPE:BRAUNIGER,COMPEO +HOCIDCOMPETITIONID: DHV-XC-2011 +HOCCLCOMPETITION CLASS: Paraglider open +HOSITSite: Planpraz (Chamonix) +I013638TAS +B0851384556194N00651066EA0206702042000 +B0851454556194N00651066EA0206702043000 +B0851524556194N00651065EA0206702044000 +B0851594556194N00651065EA0206702044000 +B0852064556194N00651065EA0206702045000 +B0852134556195N00651065EA0206702045000 +B0852204556195N00651065EA0206702046000 +B0852274556195N00651065EA0206702046000 +B0852344556195N00651065EA0206702046000 +B0852414556194N00651064EA0206702046000 +B0852484556194N00651064EA0206802045000 +B0852554556194N00651063EA0206802045000 +B0853024556194N00651063EA0206802044000 +B0853094556194N00651063EA0206802044000 +B0853164556195N00651063EA0206702043000 +B0853234556195N00651064EA0206802043000 +B0853304556195N00651065EA0206802043000 +B0853374556195N00651064EA0206802043000 +B0853444556195N00651064EA0206702043000 +B0853514556195N00651064EA0206802043000 +B0853584556195N00651064EA0206802043000 +B0854054556195N00651064EA0206802042000 +B0854124556195N00651064EA0206702042000 +B0854194556195N00651065EA0206802042000 +B0854264556196N00651065EA0206802041000 +B0854334556192N00651063EA0206502040000 +B0854404556177N00651065EA0205802040000 +B0854474556147N00651059EA0206202038000 +B0854544556137N00651026EA0207902037000 +B0855014556141N00650975EA0210202040000 +B0855094556148N00650921EA0212502047000 +B0855164556167N00650965EA0214502059000 +B0855234556155N00650950EA0216302074000 +B0855304556187N00650964EA0217702091000 +B0855374556159N00650953EA0219702099000 +B0855444556194N00650925EA0221302115000 +B0855514556189N00650967EA0222302132000 +B0855584556178N00650918EA0224302148000 +B0856054556207N00650939EA0225202165000 +B0856124556171N00650924EA0227102179000 +B0856194556196N00650883EA0228402192000 +B0856264556187N00650918EA0229902207000 +B0856334556169N00650867EA0231402223000 +B0856404556200N00650870EA0232702239000 +B0856474556176N00650877EA0234302255000 +B0856544556189N00650826EA0235602271000 +B0857014556205N00650854EA0237202286000 +B0857084556187N00650820EA0238802301000 +B0857154556220N00650799EA0239702317000 +B0857234556212N00650841EA0241802334000 +B0857304556193N00650803EA0242902348000 +B0857374556226N00650802EA0244602363000 +B0857444556201N00650822EA0245802379000 +B0857514556205N00650771EA0246302393000 +B0857584556231N00650801EA0247702407000 +B0858054556204N00650821EA0249102420000 +B0858124556210N00650786EA0249502429000 +B0858194556209N00650819EA0250402440000 +B0858264556177N00650791EA0251202447000 +B0858334556140N00650759EA0251802456000 +B0858404556101N00650730EA0252702462000 +B0858474556060N00650708EA0253102470000 +B0858544556026N00650675EA0251002477000 +B0859014555989N00650630EA0249602480000 +B0859084555948N00650579EA0249602480000 +B0859154555913N00650531EA0249002479000 +B0859224555879N00650478EA0249202478000 +B0859294555841N00650422EA0248902476000 +B0859364555800N00650371EA0249202474000 +B0859434555761N00650325EA0248202473000 +B0859504555723N00650273EA0247302469000 +B0859574555683N00650221EA0246002465000 +B0900044555642N00650168EA0245302459000 +B0900114555598N00650116EA0245702451000 +B0900184555571N00650057EA0247902449000 +B0900254555558N00650063EA0249102449000 +B0900324555570N00650009EA0251002452000 +B0900394555546N00649966EV0252202456000 +B0900464555549N00649970EA0255402461000 +B0900534555558N00649905EA0257602469000 +B0901004555525N00649880EA0259502482000 +B0901074555544N00649876EA0262002498000 +B0901144555518N00649858EA0264002503000 +B0901214555527N00649829EA0266602507000 +B0901284555512N00649846EA0268802525000 +B0901354555530N00649806EA0271002547000 +B0901424555512N00649818EA0272902571000 +B0901494555536N00649782EA0275102599000 +B0901564555502N00649758EA0277102624000 +B0902034555520N00649767EA0279002635000 +B0902104555494N00649736EA0280702649000 +B0902174555511N00649735EA0282202662000 +B0902244555495N00649662EA0283802689000 +B0902314555467N00649588EA0285902717000 +B0902384555448N00649519EA0285302743000 +B0902454555419N00649449EA0285402763000 +B0902524555393N00649396EA0284002779000 +B0902594555374N00649335EA0282102787000 +B0903064555350N00649281EA0279902787000 +B0903144555314N00649214EA0278202784000 +B0903214555289N00649151EA0276302778000 +B0903284555265N00649074EA0273402768000 +B0903354555256N00648995EA0272302755000 +B0903424555242N00648924EA0271902743000 +B0903494555237N00648855EA0275202735000 +B0903564555269N00648839EA0278002735000 +B0904034555246N00648878EA0281102739000 +B0904104555229N00648824EA0284402748000 +B0904174555235N00648758EA0285702763000 +B0904244555220N00648697EA0287302780000 +B0904314555205N00648643EA0288202796000 +B0904384555183N00648584EA0289302811000 +B0904454555160N00648521EA0289902825000 +B0904524555140N00648462EA0289202836000 +B0904594555115N00648405EA0288702844000 +B0905064555089N00648347EA0288102849000 +B0905134555064N00648289EA0287502851000 +B0905204555028N00648242EA0285502850000 +B0905274554993N00648179EA0283002844000 +B0905344554956N00648123EA0281002837000 +B0905414554915N00648067EA0278602825000 +B0905484554879N00648006EA0276802809000 +B0905554554835N00647959EA0275202793000 +B0906024554788N00647911EA0273702776000 +B0906094554747N00647852EA0272402760000 +B0906164554706N00647789EA0271202745000 +B0906234554671N00647736EA0270102731000 +B0906304554631N00647692EA0269002716000 +B0906374554593N00647649EA0267902708000 +B0906444554556N00647591EA0266602694000 +B0906514554523N00647528EA0266102681000 +B0906584554491N00647463EA0265502669000 +B0907054554470N00647397EA0264302661000 +B0907124554450N00647331EA0263402652000 +B0907194554431N00647268EA0262802643000 +B0907264554404N00647208EA0262402637000 +B0907334554371N00647163EA0261702628000 +B0907404554336N00647118EA0260102618000 +B0907474554308N00647057EA0259202608000 +B0907544554285N00646996EA0258702599000 +B0908014554256N00646942EA0257302589000 +B0908084554225N00646890EA0256402579000 +B0908154554195N00646832EA0256102569000 +B0908224554159N00646779EA0255902562000 +B0908294554127N00646719EA0255602555000 +B0908364554102N00646652EA0254902549000 +B0908434554071N00646587EA0254002543000 +B0908504554039N00646524EA0253202537000 +B0908574554006N00646462EA0252202530000 +B0909044553970N00646408EA0251302522000 +B0909124553930N00646348EA0250102513000 +B0909194553897N00646291EA0249202504000 +B0909264553867N00646230EA0248302495000 +B0909334553835N00646172EA0247202486000 +B0909404553802N00646115EA0245902475000 +B0909474553772N00646055EA0245002465000 +B0909544553739N00646000EA0244202455000 +B0910014553707N00645947EA0243202446000 +B0910084553680N00645888EA0242202437000 +B0910154553660N00645821EA0241502429000 +B0910224553640N00645754EA0240502421000 +B0910294553625N00645687EA0239802413000 +B0910364553607N00645622EA0239002404000 +B0910434553591N00645556EA0238302396000 +B0910504553573N00645496EA0237702387000 +B0910574553541N00645447EA0237102378000 +B0911044553513N00645393EA0236402370000 +B0911114553503N00645333EA0235702363000 +B0911184553486N00645282EA0235102357000 +B0911254553446N00645254EA0234502350000 +B0911324553407N00645221EA0234102345000 +B0911394553361N00645196EA0233402340000 +B0911464553313N00645166EA0234002337000 +B0911534553278N00645129EA0235002334000 +B0912004553246N00645101EA0236102334000 +B0912074553212N00645061EA0236702335000 +B0912144553180N00645081EA0236802337000 +B0912214553189N00645056EA0237202337000 +B0912284553150N00645045EA0237402339000 +B0912354553154N00645096EA0238102341000 +B0912424553186N00645075EA0239002345000 +B0912494553176N00645032EA0239102349000 +B0912564553185N00645042EA0240002352000 +B0913034553210N00645034EA0239702356000 +B0913104553191N00644995EA0240602359000 +B0913174553211N00645013EA0241602361000 +B0913244553202N00644962EA0242702363000 +B0913314553199N00644954EA0244002367000 +B0913384553203N00644908EA0245202373000 +B0913454553195N00644920EA0246302376000 +B0913524553198N00644874EA0248502382000 +B0913594553180N00644891EA0248802394000 +B0914064553208N00644864EA0250402401000 +B0914134553181N00644860EA0251202413000 +B0914204553197N00644880EA0251802424000 +B0914274553195N00644824EA0251902435000 +B0914344553171N00644855EA0253002449000 +B0914414553191N00644880EA0253302461000 +B0914484553227N00644849EA0254402473000 +B0914554553207N00644827EA0255702477000 +B0915024553221N00644849EA0255702488000 +B0915094553212N00644800EA0256502496000 +B0915164553203N00644829EA0256802504000 +B0915244553224N00644774EA0257502510000 +B0915314553190N00644770EA0258302518000 +B0915384553214N00644773EA0258302526000 +B0915454553201N00644715EA0258902534000 +B0915524553182N00644753EA0258502540000 +B0915594553190N00644792EA0259402545000 +B0916064553191N00644836EA0260802551000 +B0916134553203N00644799EA0262002555000 +B0916204553203N00644815EA0263202560000 +B0916274553182N00644758EA0264502566000 +B0916344553135N00644731EA0264802573000 +B0916414553087N00644714EA0265002584000 +B0916484553039N00644696EA0264002592000 +B0916554552992N00644676EA0263702596000 +B0917024552944N00644652EA0264802600000 +B0917094552901N00644622EA0264202604000 +B0917164552862N00644569EA0264602607000 +B0917234552806N00644531EA0263202610000 +B0917304552749N00644504EA0262702610000 +B0917374552692N00644464EA0260502607000 +B0917444552629N00644424EA0260002601000 +B0917514552587N00644401EA0258302593000 +B0917584552549N00644376EA0260102588000 +B0918054552552N00644332EA0259302586000 +B0918124552553N00644373EA0260102585000 +B0918194552520N00644372EA0261102585000 +B0918264552534N00644364EA0262002586000 +B0918334552516N00644371EA0262802588000 +B0918404552483N00644319EA0263802595000 +B0918474552444N00644267EA0264602601000 +B0918544552405N00644219EA0265102607000 +B0919014552360N00644177EA0265202611000 +B0919084552301N00644133EA0262702615000 +B0919154552235N00644082EA0260402613000 +B0919224552170N00644030EA0258202607000 +B0919294552109N00643982EA0255602597000 +B0919364552051N00643931EA0253702584000 +B0919434551992N00643881EA0251302568000 +B0919504551933N00643832EA0249002551000 +B0919574551882N00643781EA0247702533000 +B0920044551829N00643720EA0247002515000 +B0920114551773N00643664EA0246202499000 +B0920184551717N00643607EA0245702485000 +B0920254551656N00643563EA0244702473000 +B0920324551593N00643526EA0243702461000 +B0920394551531N00643486EA0242702450000 +B0920464551471N00643444EA0241502439000 +B0920534551414N00643401EA0240802428000 +B0921004551357N00643364EA0239802417000 +B0921074551298N00643325EA0238802406000 +B0921154551233N00643277EA0237602394000 +B0921224551177N00643235EA0236702384000 +B0921294551121N00643190EA0235602374000 +B0921364551068N00643149EA0234802364000 +B0921434551012N00643109EA0233602353000 +B0921504550957N00643067EA0232402343000 +B0921574550898N00643031EA0230802332000 +B0922044550840N00643005EA0229402321000 +B0922114550786N00642967EA0227702309000 +B0922184550731N00642931EA0225902296000 +B0922254550677N00642905EA0224602282000 +B0922324550627N00642887EA0223102267000 +B0922394550576N00642860EA0221302252000 +B0922464550522N00642816EA0219602236000 +B0922534550467N00642769EA0217902221000 +B0923004550411N00642725EA0216002205000 +B0923074550352N00642682EA0213602188000 +B0923144550293N00642636EA0211402169000 +B0923214550238N00642595EA0209702150000 +B0923284550182N00642550EA0208102133000 +B0923354550124N00642506EA0206802116000 +B0923424550064N00642466EA0205902100000 +B0923494550009N00642416EA0205002085000 +B0923564549951N00642374EA0204302072000 +B0924034549888N00642349EA0203802060000 +B0924104549826N00642319EA0202602048000 +B0924174549776N00642290EA0202602037000 +B0924244549727N00642248EA0204302030000 +B0924314549739N00642203EA0205702028000 +B0924384549729N00642228EA0207102029000 +B0924454549716N00642165EA0208802032000 +B0924524549739N00642176EA0210502039000 +B0924594549704N00642173EA0211702046000 +B0925064549721N00642118EA0213902056000 +B0925134549735N00642152EA0215502069000 +B0925204549699N00642149EA0216902085000 +B0925274549704N00642094EA0218702100000 +B0925344549692N00642122EA0220402115000 +B0925414549675N00642064EA0222002122000 +B0925484549693N00642070EA0223002133000 +B0925554549652N00642086EA0224702150000 +B0926024549647N00642030EA0226102158000 +B0926094549659N00642052EA0227002176000 +B0926164549614N00642057EA0228602193000 +B0926234549614N00642006EA0229202205000 +B0926304549595N00642039EA0229902221000 +B0926374549543N00642016EA0231602236000 +B0926444549545N00641956EA0232102250000 +B0926514549549N00641981EA0232802263000 +B0926584549501N00641965EA0234502275000 +B0927054549498N00641903EA0235202287000 +B0927124549524N00641908EA0236102299000 +B0927194549549N00641921EA0235902310000 +B0927264549569N00641949EA0235702318000 +B0927344549598N00641970EA0236602325000 +B0927414549627N00641975EA0238502334000 +B0927484549611N00642008EA0240602344000 +B0927554549591N00641955EA0242502347000 +B0928024549621N00641923EA0244602362000 +B0928094549619N00641962EA0246102376000 +B0928164549587N00641917EA0248702393000 +B0928234549613N00641920EA0249702410000 +B0928304549586N00641965EA0250802421000 +B0928374549565N00641915EA0253302438000 +B0928444549594N00641900EA0253802456000 +B0928514549586N00641953EA0253702470000 +B0928584549545N00641942EA0255102482000 +B0929054549528N00641904EA0256402492000 +B0929124549531N00641928EA0257002494000 +B0929194549531N00641904EA0257502501000 +B0929264549517N00641866EA0259002514000 +B0929334549524N00641827EA0259002528000 +B0929404549534N00641778EA0258402539000 +B0929474549549N00641792EA0258102544000 +B0929544549517N00641834EA0257302547000 +B0930014549516N00641887EA0256202548000 +B0930084549537N00641877EA0255002547000 +B0930154549528N00641822EA0254202544000 +B0930224549472N00641796EA0253402538000 +B0930294549425N00641774EA0253702533000 +B0930364549383N00641734EA0254802530000 +B0930434549384N00641684EA0254502529000 +B0930504549400N00641695EA0255902529000 +B0930574549405N00641721EA0256502530000 +B0931044549399N00641749EA0256802532000 +B0931114549416N00641755EA0254202533000 +B0931184549442N00641760EA0253302530000 +B0931254549468N00641769EA0252902526000 +B0931324549498N00641767EA0253302522000 +B0931394549524N00641774EA0254602522000 +B0931464549550N00641777EA0255602523000 +B0931534549578N00641772EA0255802526000 +B0932004549608N00641754EA0255602529000 +B0932074549641N00641736EA0255302530000 +B0932144549670N00641702EA0255302531000 +B0932214549697N00641667EA0255002532000 +B0932284549729N00641642EA0255302532000 +B0932354549765N00641640EA0255502533000 +B0932424549804N00641653EA0256002534000 +B0932494549835N00641681EA0255302535000 +B0932564549832N00641733EA0255402536000 +B0933034549798N00641766EA0254902535000 +B0933104549753N00641751EA0253702533000 +B0933174549706N00641735EA0252902529000 +B0933244549660N00641717EA0251902522000 +B0933324549604N00641709EA0251002515000 +B0933394549552N00641713EA0250102508000 +B0933464549499N00641708EA0249902501000 +B0933534549443N00641676EA0250602497000 +B0934004549396N00641666EA0251302494000 +B0934074549401N00641649EA0251402493000 +B0934144549410N00641595EA0251302492000 +B0934214549409N00641624EA0253002493000 +B0934284549357N00641626EA0252202493000 +B0934354549303N00641586EA0253502494000 +B0934424549258N00641546EA0252502495000 +B0934494549227N00641486EA0252802497000 +B0934564549198N00641444EA0252402501000 +B0935034549164N00641406EA0253202503000 +B0935104549136N00641365EA0251902504000 +B0935174549101N00641317EA0252102502000 +B0935244549067N00641274EA0253402503000 +B0935314549032N00641239EA0254202507000 +B0935384548995N00641211EA0255502511000 +B0935454548974N00641155EA0256902517000 +B0935524548994N00641156EA0258202524000 +B0935594548982N00641195EA0259402534000 +B0936064548951N00641135EA0259602544000 +B0936134548920N00641067EA0261702553000 +B0936204548905N00641078EA0261002562000 +B0936274548901N00641005EA0262102570000 +B0936344548870N00640944EA0263102578000 +B0936414548848N00640877EA0264602587000 +B0936484548826N00640814EA0265302597000 +B0936554548798N00640770EA0265102605000 +B0937024548761N00640741EA0265702610000 +B0937094548727N00640714EA0266302615000 +B0937164548694N00640678EA0266502619000 +B0937234548660N00640642EA0266202624000 +B0937304548623N00640601EA0267002629000 +B0937374548592N00640571EA0268502635000 +B0937444548603N00640513EA0268602642000 +B0937514548618N00640545EA0271002650000 +B0937584548598N00640562EA0272002661000 +B0938054548611N00640510EA0273602671000 +B0938124548605N00640526EA0274802682000 +B0938194548579N00640473EA0275402694000 +B0938264548603N00640465EA0276802703000 +B0938334548572N00640485EA0277702713000 +B0938404548532N00640452EA0277302721000 +B0938474548495N00640391EA0276402728000 +B0938544548461N00640341EA0276002732000 +B0939014548428N00640290EA0275802735000 +B0939084548403N00640237EA0276102737000 +B0939154548378N00640185EA0275602738000 +B0939224548350N00640140EA0275402738000 +B0939294548325N00640084EA0275502738000 +B0939374548289N00640017EA0275902738000 +B0939444548271N00639973EA0277102740000 +B0939514548248N00639915EA0279102744000 +B0939584548227N00639861EA0280402752000 +B0940054548209N00639800EA0281202762000 +B0940124548191N00639739EA0280402768000 +B0940194548167N00639661EA0279202771000 +B0940264548138N00639587EA0277602770000 +B0940334548112N00639512EA0277102767000 +B0940404548091N00639434EA0278502764000 +B0940474548086N00639389EA0278902765000 +B0940544548071N00639329EA0279202767000 +B0941014548057N00639267EA0280002769000 +B0941084548038N00639208EA0280002773000 +B0941154548018N00639133EA0278702774000 +B0941224547991N00639057EA0277702772000 +B0941294547968N00638979EA0276902769000 +B0941364547945N00638903EA0275502763000 +B0941434547925N00638822EA0273902756000 +B0941504547904N00638740EA0272502747000 +B0941574547885N00638664EA0272502738000 +B0942044547860N00638600EA0271702729000 +B0942114547841N00638538EA0270702722000 +B0942184547827N00638453EA0269702714000 +B0942254547813N00638378EA0268102705000 +B0942324547792N00638308EA0267202695000 +B0942394547766N00638239EA0266202685000 +B0942464547741N00638166EA0265302675000 +B0942534547708N00638098EA0265002665000 +B0943004547676N00638035EA0264702656000 +B0943074547649N00637981EA0265102650000 +B0943144547628N00637918EA0264302644000 +B0943214547612N00637866EA0265102640000 +B0943284547591N00637811EA0264802637000 +B0943354547569N00637750EA0264102633000 +B0943424547549N00637690EA0265302631000 +B0943494547527N00637652EA0264602631000 +B0943564547496N00637603EA0264202629000 +B0944034547467N00637563EA0264002628000 +B0944104547444N00637514EA0264302628000 +B0944174547419N00637465EA0263302627000 +B0944244547398N00637421EA0262802624000 +B0944314547374N00637369EA0263302621000 +B0944384547350N00637314EA0263202619000 +B0944454547324N00637247EA0263702618000 +B0944524547295N00637187EA0264602618000 +B0944594547268N00637133EA0263602619000 +B0945064547238N00637064EA0264802618000 +B0945134547216N00637013EA0264602620000 +B0945204547193N00636954EA0264702621000 +B0945284547172N00636877EA0267302626000 +B0945354547146N00636828EA0270302636000 +B0945424547101N00636785EA0272702649000 +B0945494547060N00636749EA0274502665000 +B0945564547022N00636705EA0274902679000 +B0946034546987N00636652EA0272202689000 +B0946104546950N00636581EA0270002691000 +B0946174546907N00636515EA0268502688000 +B0946244546870N00636447EA0267802682000 +B0946314546840N00636377EA0267802677000 +B0946384546811N00636311EA0268102673000 +B0946454546788N00636258EA0269202672000 +B0946524546760N00636206EA0270702673000 +B0946594546733N00636167EA0271002676000 +B0947064546700N00636102EA0271302680000 +B0947134546672N00636037EA0272602684000 +B0947204546645N00635981EA0272202688000 +B0947274546617N00635902EA0271302691000 +B0947344546586N00635823EA0270002691000 +B0947414546555N00635755EA0269402689000 +B0947484546533N00635692EA0272102688000 +B0947554546517N00635641EA0273802692000 +B0948024546498N00635589EA0275702700000 +B0948094546485N00635545EA0276802711000 +B0948164546477N00635491EA0277002722000 +B0948234546460N00635429EA0277002729000 +B0948304546433N00635381EA0275502733000 +B0948374546393N00635320EA0273602733000 +B0948444546353N00635261EA0272302730000 +B0948514546313N00635200EA0270902724000 +B0948584546276N00635136EA0270402716000 +B0949054546250N00635080EA0268902709000 +B0949124546216N00635008EA0267302700000 +B0949194546188N00634945EA0266702690000 +B0949264546157N00634873EA0265102679000 +B0949334546130N00634802EA0263602667000 +B0949404546095N00634727EA0261902654000 +B0949474546062N00634645EA0260102641000 +B0949544546032N00634567EA0260002627000 +B0950014546004N00634485EA0259502615000 +B0950084545988N00634423EA0259702606000 +B0950154545965N00634351EA0259402598000 +B0950224545944N00634306EA0260502594000 +B0950294545925N00634247EA0261202592000 +B0950364545903N00634189EA0260302591000 +B0950434545880N00634120EA0259602589000 +B0950504545867N00634064EA0262002588000 +B0950574545849N00634018EA0263202592000 +B0951044545826N00633961EA0262902597000 +B0951114545804N00633892EA0262902601000 +B0951194545776N00633807EA0261702603000 +B0951264545749N00633741EA0260902601000 +B0951334545727N00633677EA0261502599000 +B0951404545706N00633619EA0260702598000 +B0951474545688N00633549EA0261702597000 +B0951544545669N00633480EA0260702597000 +B0952014545643N00633407EA0260502594000 +B0952084545612N00633339EA0260802592000 +B0952154545581N00633270EA0261302592000 +B0952224545564N00633216EA0261202593000 +B0952294545539N00633166EA0261502594000 +B0952364545517N00633116EA0259002593000 +B0952434545492N00633044EA0257602587000 +B0952504545464N00632972EA0256602579000 +B0952574545437N00632910EA0255102570000 +B0953044545407N00632849EA0253602559000 +B0953114545374N00632790EA0252302548000 +B0953184545341N00632728EA0251002536000 +B0953254545315N00632658EA0249402523000 +B0953324545286N00632589EA0247002510000 +B0953394545261N00632504EA0245002495000 +B0953464545241N00632427EA0243602479000 +B0953534545210N00632360EA0241802463000 +B0954004545179N00632299EA0240102446000 +B0954074545155N00632239EA0239302430000 +B0954144545133N00632180EA0238602416000 +B0954214545110N00632114EA0238602403000 +B0954284545089N00632065EA0239402395000 +B0954354545066N00632020EA0239802389000 +B0954424545048N00631983EA0239702386000 +B0954494545035N00631939EA0240202384000 +B0954564545018N00631893EA0241702386000 +B0955034545000N00631851EA0243302390000 +B0955104544987N00631816EA0244702397000 +B0955174544973N00631776EA0247002406000 +B0955244544966N00631723EA0250202418000 +B0955314544990N00631697EA0251902433000 +B0955384544972N00631726EA0254202442000 +B0955454544959N00631682EA0255202458000 +B0955524544958N00631620EA0255302474000 +B0955594544953N00631555EA0256402488000 +B0956064544961N00631502EA0256602502000 +B0956134544973N00631451EA0256402513000 +B0956204544987N00631401EA0256102521000 +B0956274544998N00631345EA0256002526000 +B0956344545002N00631277EA0256302530000 +B0956414545003N00631205EA0256202532000 +B0956484544995N00631136EA0256602534000 +B0956554544994N00631080EA0258002538000 +B0957024544997N00631026EA0258802544000 +B0957104544994N00630962EA0261002553000 +B0957174544991N00630911EA0263002565000 +B0957244544980N00630854EA0263702577000 +B0957314544965N00630789EA0263802588000 +B0957384544954N00630730EA0263902597000 +B0957454544943N00630668EA0262302601000 +B0957524544936N00630585EA0260502601000 +B0957594544920N00630501EA0258802596000 +B0958064544905N00630423EA0257102589000 +B0958134544892N00630357EA0259402584000 +B0958204544877N00630313EA0260902583000 +B0958274544864N00630270EA0262602585000 +B0958344544842N00630277EA0263402591000 +B0958414544866N00630252EA0264702594000 +B0958484544865N00630196EA0265602601000 +B0958554544856N00630140EA0266402610000 +B0959024544842N00630091EA0267202619000 +B0959094544827N00630045EA0268402629000 +B0959164544808N00629996EA0268202637000 +B0959234544786N00629943EA0266702642000 +B0959304544757N00629892EA0264302643000 +B0959374544726N00629819EA0262902638000 +B0959444544702N00629744EA0263202632000 +B0959514544690N00629687EA0265402630000 +B0959584544684N00629625EA0268202634000 +B1000054544689N00629569EA0267802640000 +B1000124544699N00629504EA0267702644000 +B1000194544702N00629443EA0267802648000 +B1000264544707N00629369EA0268502650000 +B1000334544711N00629290EA0269102654000 +B1000404544709N00629220EA0270302658000 +B1000474544696N00629153EA0270702664000 +B1000544544693N00629089EA0270702669000 +B1001014544688N00629025EA0269402673000 +B1001084544683N00628971EA0268302674000 +B1001154544664N00628922EA0266202671000 +B1001224544635N00628875EA0264602664000 +B1001294544606N00628830EA0263302656000 +B1001364544577N00628780EA0262202647000 +B1001434544553N00628726EA0262102639000 +B1001504544531N00628673EA0261702630000 +B1001574544506N00628623EA0261202623000 +B1002044544484N00628570EA0260602616000 +B1002114544463N00628514EA0260302609000 +B1002184544444N00628454EA0259702603000 +B1002254544426N00628393EA0258902596000 +B1002324544403N00628332EA0258202591000 +B1002394544380N00628270EA0257302584000 +B1002464544364N00628207EA0256302575000 +B1002534544348N00628141EA0255202566000 +B1003014544328N00628065EA0254302556000 +B1003084544313N00627998EA0253402550000 +B1003154544306N00627926EA0252602547000 +B1003224544301N00627856EA0251602545000 +B1003294544293N00627787EA0250402536000 +B1003364544283N00627716EA0249902526000 +B1003434544274N00627644EA0249102516000 +B1003504544261N00627574EA0248202506000 +B1003574544252N00627501EA0247302495000 +B1004044544240N00627428EA0246702484000 +B1004114544231N00627356EA0246102474000 +B1004184544221N00627286EA0245302465000 +B1004254544208N00627217EA0244602457000 +B1004324544195N00627148EA0244102450000 +B1004394544185N00627079EA0243402443000 +B1004464544170N00627013EA0242602436000 +B1004534544163N00626941EA0241602428000 +B1005004544156N00626868EA0240702419000 +B1005074544150N00626797EA0240002410000 +B1005144544140N00626729EA0239002402000 +B1005214544125N00626659EA0237702392000 +B1005284544111N00626588EA0236302382000 +B1005354544099N00626513EA0235402372000 +B1005424544095N00626434EA0234502362000 +B1005494544094N00626354EA0233202352000 +B1005564544088N00626273EA0231802344000 +B1006034544078N00626184EA0230602334000 +B1006104544066N00626091EA0229602323000 +B1006174544050N00626003EA0228502316000 +B1006244544034N00625913EA0227502305000 +B1006314544019N00625823EA0226302294000 +B1006384544000N00625734EA0225002282000 +B1006454543983N00625646EA0224002271000 +B1006524543970N00625557EA0222602258000 +B1006594543954N00625471EA0221702245000 +B1007064543940N00625384EA0220502237000 +B1007134543929N00625299EA0219202226000 +B1007204543917N00625213EA0218102214000 +B1007274543904N00625123EA0217002201000 +B1007344543888N00625035EA0215702187000 +B1007414543873N00624946EA0214702174000 +B1007484543858N00624858EA0213702161000 +B1007554543841N00624770EA0212702149000 +B1008024543824N00624682EA0211702137000 +B1008094543806N00624596EA0210602125000 +B1008164543787N00624511EA0209302113000 +B1008234543767N00624428EA0208302102000 +B1008304543750N00624344EA0207302092000 +B1008384543731N00624248EA0206302081000 +B1008454543716N00624166EA0205302072000 +B1008524543701N00624084EA0204302062000 +B1008594543688N00624001EA0203302051000 +B1009064543676N00623917EA0202202041000 +B1009134543661N00623834EA0201302031000 +B1009204543646N00623750EA0200402020000 +B1009274543630N00623668EA0199402010000 +B1009344543617N00623584EA0198402000000 +B1009414543605N00623502EA0197501991000 +B1009484543591N00623420EA0196601981000 +B1009554543578N00623338EA0195701973000 +B1010024543565N00623257EA0194701963000 +B1010094543552N00623176EA0193601953000 +B1010164543539N00623097EA0192501943000 +B1010234543518N00623020EA0191501933000 +B1010304543492N00622945EA0190501922000 +B1010374543465N00622871EA0189601913000 +B1010444543441N00622795EA0188501904000 +B1010514543418N00622720EA0187401894000 +B1010584543396N00622644EA0186301884000 +B1011054543377N00622567EA0185101873000 +B1011124543362N00622487EA0184201862000 +B1011194543346N00622409EA0182701852000 +B1011264543329N00622330EA0181401841000 +B1011334543312N00622251EA0180301830000 +B1011404543293N00622172EA0179201818000 +B1011474543275N00622092EA0178001806000 +B1011544543261N00622012EA0176901794000 +B1012014543246N00621933EA0175701782000 +B1012084543225N00621858EA0174201770000 +B1012154543202N00621784EA0172701757000 +B1012224543181N00621711EA0171501743000 +B1012294543166N00621647EA0170701730000 +B1012364543164N00621580EA0170301719000 +B1012434543159N00621524EA0171301712000 +B1012504543165N00621464EA0171301709000 +B1012574543191N00621416EA0170301705000 +B1013044543226N00621380EA0169301700000 +B1013114543265N00621345EA0168301693000 +B1013184543289N00621292EA0167601686000 +B1013254543295N00621230EA0166701678000 +B1013324543278N00621177EA0165701670000 +B1013394543244N00621146EA0164901662000 +B1013464543209N00621119EA0165401655000 +B1013534543175N00621095EA0165801651000 +B1014004543146N00621066EA0165401649000 +B1014074543108N00621038EA0165501646000 +B1014144543085N00620998EA0166501644000 +B1014214543066N00620954EA0167401644000 +B1014284543054N00620905EA0168901647000 +B1014354543042N00620863EA0168301650000 +B1014424543011N00620839EA0167801653000 +B1014504542970N00620813EA0166801656000 +B1014574542934N00620794EA0167501657000 +B1015044542902N00620772EA0167201658000 +B1015114542865N00620760EA0166801658000 +B1015184542837N00620747EA0167801658000 +B1015254542812N00620731EA0168401660000 +B1015324542789N00620707EA0168501662000 +B1015394542763N00620677EA0169301664000 +B1015464542743N00620642EA0169701666000 +B1015534542714N00620608EA0170901669000 +B1016004542689N00620571EA0172301675000 +B1016074542679N00620586EA0173601683000 +B1016144542714N00620588EA0174201691000 +B1016214542699N00620578EA0175001697000 +B1016284542682N00620532EA0176401705000 +B1016354542655N00620508EA0177101714000 +B1016424542624N00620486EA0177101721000 +B1016494542584N00620475EA0176001725000 +B1016564542545N00620473EA0175701728000 +B1017034542563N00620500EA0175601729000 +B1017104542603N00620498EA0176001731000 +B1017174542646N00620500EA0177801734000 +B1017244542664N00620532EA0177301738000 +B1017314542642N00620499EA0178201743000 +B1017384542618N00620497EA0178701748000 +B1017454542647N00620522EA0179001753000 +B1017524542683N00620520EA0180401759000 +B1017594542712N00620538EA0182401767000 +B1018064542695N00620563EA0184701777000 +B1018134542687N00620519EA0186401789000 +B1018204542711N00620534EA0188701802000 +B1018274542683N00620522EA0191001813000 +B1018344542705N00620497EA0193601830000 +B1018414542688N00620511EA0195901845000 +B1018484542705N00620468EA0198601864000 +B1018554542700N00620501EA0201401884000 +B1019024542711N00620462EA0203701902000 +B1019094542695N00620478EA0206501919000 +B1019164542707N00620432EA0208501935000 +B1019234542700N00620469EA0211701955000 +B1019304542658N00620460EA0214701982000 +B1019374542622N00620447EA0215602011000 +B1019444542581N00620419EA0216102038000 +B1019514542533N00620378EA0216102058000 +B1019584542499N00620348EA0218002076000 +B1020054542463N00620323EA0217102094000 +B1020124542418N00620293EA0217602108000 +B1020194542376N00620261EA0218502119000 +B1020264542333N00620235EA0218202128000 +B1020344542286N00620199EA0217702136000 +B1020414542242N00620168EA0216702140000 +B1020484542189N00620128EA0214902139000 +B1020554542148N00620094EA0215102136000 +B1021024542109N00620080EA0216302135000 +B1021094542072N00620072EA0215902136000 +B1021164542030N00620055EA0214902136000 +B1021234541989N00620034EA0213502133000 +B1021304541941N00619998EA0211602128000 +B1021374541890N00619963EA0210302119000 +B1021444541843N00619928EA0209302110000 +B1021514541796N00619891EA0207902100000 +B1021584541752N00619854EA0207602089000 +B1022054541710N00619832EA0208102080000 +B1022124541671N00619816EA0209402076000 +B1022194541671N00619770EA0210102075000 +B1022264541700N00619792EA0211402077000 +B1022334541690N00619838EA0212602082000 +B1022404541651N00619825EA0214802089000 +B1022474541671N00619796EA0215602098000 +B1022544541674N00619838EA0216802107000 +B1023014541639N00619821EA0218202116000 +B1023084541656N00619781EA0218802125000 +B1023154541677N00619814EA0220202130000 +B1023224541656N00619846EA0220702139000 +B1023294541615N00619832EA0222002150000 +B1023364541583N00619806EA0222302161000 +B1023434541562N00619754EA0223502171000 +B1023504541536N00619705EA0225002181000 +B1023574541535N00619662EA0225202193000 +B1024044541558N00619698EA0226902203000 +B1024114541551N00619736EA0228302211000 +B1024184541543N00619694EA0230002217000 +B1024254541545N00619718EA0231502226000 +B1024324541523N00619666EA0232702237000 +B1024394541502N00619606EA0233402250000 +B1024464541483N00619547EA0232502262000 +B1024534541459N00619491EA0230802270000 +B1025004541432N00619412EA0228302272000 +B1025074541405N00619330EA0227002269000 +B1025144541385N00619246EA0225602263000 +B1025214541360N00619164EA0224402255000 +B1025284541329N00619087EA0222902247000 +B1025354541295N00619005EA0220802236000 +B1025424541262N00618921EA0219502224000 +B1025494541231N00618845EA0218102210000 +B1025564541199N00618765EA0216902198000 +B1026034541164N00618688EA0215702186000 +B1026104541132N00618609EA0214502174000 +B1026184541097N00618518EA0212902159000 +B1026254541067N00618435EA0211502145000 +B1026324541040N00618357EA0210502131000 +B1026394541020N00618275EA0209402118000 +B1026464541004N00618192EA0208102105000 +B1026534540983N00618112EA0206702092000 +B1027004540950N00618041EA0205802079000 +B1027074540921N00617967EA0204702067000 +B1027144540895N00617892EA0203502055000 +B1027214540871N00617816EA0202502044000 +B1027284540846N00617741EA0201402034000 +B1027354540821N00617665EA0200402023000 +B1027424540797N00617589EA0199502013000 +B1027494540773N00617512EA0198602003000 +B1027564540754N00617432EA0197501992000 +B1028034540736N00617367EA0196301982000 +B1028104540716N00617291EA0194401971000 +B1028174540702N00617206EA0194501960000 +B1028244540689N00617142EA0194501951000 +B1028314540673N00617082EA0195401944000 +B1028384540658N00617024EA0196401941000 +B1028454540647N00616976EA0197901942000 +B1028524540682N00616967EA0199101946000 +B1028594540667N00616983EA0200301950000 +B1029064540635N00616964EA0202101957000 +B1029134540604N00616945EA0202201965000 +B1029204540597N00616897EA0202401972000 +B1029274540631N00616903EA0203501978000 +B1029344540616N00616923EA0203301984000 +B1029414540595N00616876EA0203801990000 +B1029484540579N00616828EA0203001996000 +B1029554540546N00616785EA0201601998000 +B1030024540504N00616738EA0199901997000 +B1030094540470N00616693EA0201201993000 +B1030164540469N00616651EA0201601991000 +B1030234540504N00616653EA0202501993000 +B1030304540488N00616679EA0203201996000 +B1030374540453N00616659EA0204302000000 +B1030444540419N00616622EA0204602005000 +B1030514540380N00616586EA0204202011000 +B1030584540340N00616550EA0202602014000 +B1031054540292N00616507EA0200602011000 +B1031124540243N00616463EA0198902006000 +B1031194540194N00616418EA0197301998000 +B1031264540144N00616375EA0195901988000 +B1031334540094N00616335EA0194301976000 +B1031404540043N00616293EA0193001963000 +B1031474539992N00616251EA0191501949000 +B1031544539941N00616213EA0190001935000 +B1032014539892N00616177EA0188701921000 +B1032094539837N00616129EA0187601906000 +B1032164539790N00616096EA0186701892000 +B1032234539751N00616064EA0187201880000 +B1032304539715N00616036EA0185901870000 +B1032374539667N00616008EA0184201860000 +B1032444539612N00615985EA0182901849000 +B1032514539555N00615970EA0181701837000 +B1032584539497N00615954EA0181901826000 +B1033054539457N00615936EA0182101818000 +B1033124539414N00615927EA0181001812000 +B1033194539378N00615918EA0182401807000 +B1033264539385N00615936EA0183201806000 +B1033334539380N00615887EA0184201805000 +B1033404539349N00615890EA0184601806000 +B1033474539313N00615895EA0183801808000 +B1033544539271N00615891EA0182501808000 +B1034014539228N00615889EA0181601805000 +B1034084539180N00615883EA0181001802000 +B1034154539134N00615881EA0180801797000 +B1034224539098N00615871EA0181801794000 +B1034294539071N00615862EA0182101793000 +B1034364539039N00615847EA0182101794000 +B1034434539003N00615853EA0181801795000 +B1034504538969N00615851EA0180901795000 +B1034574538930N00615850EA0180401793000 +B1035044538899N00615822EA0181201791000 +B1035114538899N00615770EA0181901791000 +B1035184538904N00615711EA0183301793000 +B1035254538888N00615695EA0182801796000 +B1035324538914N00615731EA0184101798000 +B1035394538904N00615754EA0184701802000 +B1035464538937N00615731EA0185901808000 +B1035534538950N00615768EA0187301815000 +B1036004538942N00615730EA0188801823000 +B1036074538972N00615738EA0190501833000 +B1036144538953N00615764EA0190901843000 +B1036214538931N00615719EA0192201854000 +B1036284538956N00615689EA0192901865000 +B1036354538947N00615723EA0195001874000 +B1036424538931N00615681EA0195501884000 +B1036494538956N00615692EA0197001894000 +B1036564538936N00615699EA0198301905000 +B1037034538954N00615650EA0198701915000 +B1037104538940N00615684EA0200001923000 +B1037174538900N00615661EA0199201933000 +B1037244538860N00615619EA0198801942000 +B1037314538821N00615580EA0198001948000 +B1037384538781N00615546EA0196401950000 +B1037454538733N00615513EA0194501947000 +B1037524538679N00615478EA0193101941000 +B1038004538618N00615442EA0191601932000 +B1038074538564N00615414EA0190101922000 +B1038144538508N00615388EA0188901909000 +B1038214538453N00615363EA0187401896000 +B1038284538398N00615339EA0186601882000 +B1038354538352N00615320EA0186601872000 +B1038424538314N00615300EA0187801865000 +B1038494538273N00615278EA0189601863000 +B1038564538279N00615221EA0190801866000 +B1039034538287N00615251EA0191501869000 +B1039104538248N00615247EA0193401874000 +B1039174538263N00615208EA0194801882000 +B1039244538249N00615233EA0196401889000 +B1039314538249N00615199EA0196701897000 +B1039384538243N00615226EA0197901908000 +B1039454538207N00615234EA0198701919000 +B1039524538166N00615229EA0198901930000 +B1039594538127N00615214EA0200401940000 +B1040064538116N00615167EA0200901950000 +B1040134538138N00615176EA0202301959000 +B1040204538110N00615191EA0202901968000 +B1040274538070N00615179EA0203901978000 +B1040344538030N00615177EA0202001986000 +B1040414537984N00615165EA0201701989000 +B1040484537945N00615146EA0201501990000 +B1040554537909N00615127EA0201401989000 +B1041024537876N00615103EA0203401991000 +B1041094537880N00615060EA0204701997000 +B1041164537886N00615092EA0206702004000 +B1041234537862N00615069EA0208402013000 +B1041304537886N00615070EA0209702018000 +B1041374537855N00615061EA0211602027000 +B1041444537824N00615020EA0211202040000 +B1041514537789N00614989EA0211402051000 +B1041584537756N00614946EA0211502061000 +B1042054537728N00614900EA0213402070000 +B1042124537705N00614848EA0214402080000 +B1042194537695N00614790EA0216602092000 +B1042264537725N00614766EA0218502105000 +B1042334537706N00614771EA0220902115000 +B1042404537722N00614732EA0222502129000 +B1042474537720N00614767EA0225002145000 +B1042544537689N00614756EA0225802161000 +B1043014537663N00614700EA0226902177000 +B1043084537638N00614649EA0226802192000 +B1043154537608N00614599EA0226302203000 +B1043224537581N00614555EA0226002211000 +B1043294537547N00614510EA0224302216000 +B1043364537514N00614458EA0225102219000 +B1043434537483N00614412EA0225502220000 +B1043514537453N00614368EA0223602221000 +B1043584537409N00614311EA0221402217000 +B1044054537360N00614246EA0219802211000 +B1044124537310N00614186EA0218102202000 +B1044194537262N00614120EA0216502191000 +B1044264537215N00614054EA0214402178000 +B1044334537169N00613983EA0214102164000 +B1044404537146N00613918EA0215402154000 +B1044474537123N00613877EA0214902147000 +B1044544537093N00613841EA0213402140000 +B1045014537063N00613797EA0215102134000 +B1045084537041N00613759EA0215102132000 +B1045154537011N00613728EA0214202131000 +B1045224536981N00613681EA0212502128000 +B1045294536947N00613626EA0212802123000 +B1045364536919N00613586EA0213802120000 +B1045434536903N00613568EA0214902120000 +B1045504536880N00613539EA0215402121000 +B1045574536859N00613488EA0215402124000 +B1046044536841N00613438EA0215502126000 +B1046114536820N00613387EA0214602127000 +B1046184536786N00613337EA0213102126000 +B1046254536757N00613288EA0213002122000 +B1046324536738N00613242EA0214302120000 +B1046394536716N00613204EA0215502121000 +B1046464536717N00613146EA0218102126000 +B1046534536744N00613163EA0219002134000 +B1047004536727N00613172EA0220602141000 +B1047074536733N00613120EA0222902152000 +B1047144536734N00613134EA0225002160000 +B1047214536734N00613087EA0227002173000 +B1047284536749N00613113EA0228502186000 +B1047354536726N00613080EA0230802201000 +B1047424536713N00613034EA0232802220000 +B1047494536692N00612996EA0235302240000 +B1047564536679N00613013EA0236402261000 +B1048034536689N00612978EA0239102278000 +B1048104536663N00612943EA0240302296000 +B1048174536637N00612891EA0241602313000 +B1048244536612N00612836EA0240702329000 +B1048314536591N00612772EA0237802339000 +B1048384536565N00612691EA0235902342000 +B1048454536538N00612612EA0234702341000 +B1048524536512N00612553EA0236802340000 +B1048594536489N00612514EA0238302341000 +B1049064536466N00612467EA0238402345000 +B1049134536442N00612415EA0237302348000 +B1049204536409N00612353EA0235202347000 +B1049284536370N00612272EA0234902341000 +B1049354536352N00612221EA0234702337000 +B1049424536326N00612172EA0235002332000 +B1049494536305N00612129EA0236702331000 +B1049564536306N00612085EA0238902336000 +B1050034536322N00612111EA0241302343000 +B1050104536313N00612083EA0243102352000 +B1050174536351N00612090EA0245002364000 +B1050244536333N00612102EA0247002377000 +B1050314536311N00612062EA0249402394000 +B1050384536286N00612008EA0248502410000 +B1050454536261N00611952EA0247002421000 +B1050524536229N00611902EA0246702427000 +B1050594536208N00611853EA0247102432000 +B1051064536187N00611804EA0248302437000 +B1051134536172N00611757EA0248502443000 +B1051204536146N00611701EA0248202447000 +B1051274536116N00611644EA0247902451000 +B1051344536089N00611588EA0246402452000 +B1051414536061N00611519EA0245102449000 +B1051484536031N00611441EA0245802443000 +B1051554536013N00611380EA0245702439000 +B1052024535996N00611319EA0246202438000 +B1052094535978N00611258EA0245902438000 +B1052164535960N00611191EA0245102439000 +B1052234535940N00611118EA0243902436000 +B1052304535917N00611026EA0243102431000 +B1052374535893N00610938EA0242202425000 +B1052444535868N00610850EA0241602420000 +B1052514535847N00610762EA0241202413000 +B1052584535829N00610683EA0241402407000 +B1053054535810N00610605EA0241002402000 +B1053124535791N00610535EA0242302398000 +B1053194535765N00610480EA0243602398000 +B1053264535741N00610437EA0247002405000 +B1053334535715N00610414EA0249002416000 +B1053404535736N00610431EA0251802430000 +B1053474535727N00610386EA0253602446000 +B1053544535684N00610371EA0255202463000 +B1054014535641N00610355EA0255102479000 +B1054084535599N00610306EA0255502492000 +B1054154535577N00610234EA0255202502000 +B1054224535560N00610149EA0253602508000 +B1054294535540N00610052EA0251702508000 +B1054364535520N00609951EA0250502505000 +B1054434535496N00609852EA0249202499000 +B1054504535470N00609753EA0248202491000 +B1054584535441N00609638EA0247402481000 +B1055054535420N00609542EA0246202475000 +B1055124535394N00609460EA0245002475000 +B1055194535367N00609371EA0243502471000 +B1055264535345N00609270EA0242202457000 +B1055334535326N00609166EA0240802445000 +B1055404535304N00609065EA0239902429000 +B1055474535273N00608971EA0238702414000 +B1055544535241N00608878EA0237602398000 +B1056014535208N00608788EA0236202385000 +B1056084535178N00608697EA0234802371000 +B1056154535149N00608607EA0233702357000 +B1056224535119N00608521EA0232502343000 +B1056294535092N00608431EA0231402330000 +B1056364535062N00608343EA0230202318000 +B1056434535026N00608264EA0229102305000 +B1056504534989N00608185EA0227902293000 +B1056574534954N00608103EA0226702280000 +B1057044534918N00608022EA0225302268000 +B1057114534882N00607941EA0224102254000 +B1057184534848N00607858EA0222702245000 +B1057254534817N00607772EA0221302235000 +B1057324534789N00607684EA0220102223000 +B1057394534759N00607596EA0218902210000 +B1057464534727N00607510EA0217702197000 +B1057534534693N00607427EA0216302184000 +B1058004534656N00607347EA0215002171000 +B1058074534618N00607266EA0213902159000 +B1058144534582N00607183EA0212802147000 +B1058214534545N00607102EA0211602134000 +B1058284534508N00607023EA0210602121000 +B1058354534473N00606946EA0209602109000 +B1058424534437N00606870EA0208602098000 +B1058494534401N00606796EA0207702087000 +B1058564534364N00606723EA0206602076000 +B1059034534328N00606649EA0205702066000 +B1059104534302N00606588EA0205002056000 +B1059174534275N00606525EA0204102055000 +B1059244534248N00606466EA0203202046000 +B1059314534220N00606409EA0202502036000 +B1059384534187N00606361EA0201802026000 +B1059454534153N00606313EA0201002016000 +B1059524534125N00606257EA0200202007000 +B1059594534098N00606201EA0199301999000 +B1100064534071N00606147EA0198301991000 +B1100134534044N00606093EA0197301981000 +B1100204534013N00606040EA0196501972000 +B1100274533985N00605988EA0195401961000 +B1100354533948N00605931EA0194601950000 +B1100424533917N00605883EA0193901940000 +B1100494533883N00605838EA0193201931000 +B1100564533849N00605793EA0192501924000 +B1101034533815N00605745EA0191901917000 +B1101104533792N00605706EA0192801913000 +B1101174533808N00605655EA0194301911000 +B1101244533843N00605666EA0195901913000 +B1101314533821N00605694EA0197101918000 +B1101384533808N00605665EA0198001924000 +B1101454533841N00605673EA0199701932000 +B1101524533821N00605709EA0200001939000 +B1101594533786N00605690EA0201001948000 +B1102064533798N00605642EA0203301958000 +B1102134533807N00605669EA0204201970000 +B1102204533776N00605653EA0206301982000 +B1102274533779N00605607EA0208801996000 +B1102344533782N00605641EA0209902009000 +B1102414533745N00605619EA0210502023000 +B1102484533758N00605591EA0211702034000 +B1102554533739N00605632EA0211802047000 +B1103024533699N00605612EA0211902056000 +B1103094533706N00605560EA0211102064000 +B1103164533713N00605507EA0209802067000 +B1103234533698N00605444EA0210202069000 +B1103304533683N00605385EA0210002069000 +B1103374533671N00605334EA0210702070000 +B1103444533648N00605322EA0210402071000 +B1103514533674N00605307EA0210202070000 +B1103584533671N00605241EA0211502069000 +B1104054533661N00605182EA0211402070000 +B1104124533645N00605124EA0210702072000 +B1104194533625N00605066EA0209102070000 +B1104264533607N00605001EA0208102066000 +B1104334533588N00604938EA0207502062000 +B1104404533566N00604872EA0207002058000 +B1104474533546N00604808EA0205802052000 +B1104544533527N00604743EA0204602045000 +B1105014533505N00604679EA0204202037000 +B1105084533483N00604617EA0203302030000 +B1105154533463N00604556EA0202502022000 +B1105224533444N00604496EA0201602015000 +B1105294533421N00604439EA0200902007000 +B1105364533400N00604376EA0200201999000 +B1105434533378N00604312EA0199601992000 +B1105504533356N00604252EA0199001986000 +B1105574533336N00604188EA0198501979000 +B1106044533316N00604125EA0198201974000 +B1106114533295N00604063EA0197801968000 +B1106184533271N00604003EA0197101963000 +B1106254533247N00603940EA0196401958000 +B1106334533216N00603871EA0196301952000 +B1106404533188N00603820EA0195501948000 +B1106474533171N00603768EA0195101944000 +B1106544533160N00603712EA0194001937000 +B1107014533145N00603661EA0194201932000 +B1107084533134N00603617EA0193601926000 +B1107154533116N00603581EA0193401921000 +B1107224533117N00603533EA0193701916000 +B1107294533139N00603487EA0194201914000 +B1107364533178N00603471EA0194401912000 +B1107434533195N00603508EA0194801912000 +B1107504533165N00603511EA0195501912000 +B1107574533170N00603468EA0195901914000 +B1108044533197N00603496EA0196001916000 +B1108114533187N00603550EA0197301918000 +B1108184533169N00603544EA0197701922000 +B1108254533205N00603542EA0198601927000 +B1108324533220N00603591EA0199301934000 +B1108394533190N00603584EA0199901940000 +B1108464533213N00603579EA0200301946000 +B1108534533192N00603616EA0200501951000 +B1109004533172N00603583EA0201201955000 +B1109074533199N00603562EA0201101960000 +B1109144533183N00603592EA0200901964000 +B1109214533150N00603588EA0201201967000 +B1109284533168N00603547EA0200601969000 +B1109354533180N00603587EA0200701969000 +B1109424533152N00603624EA0200401969000 +B1109494533126N00603594EA0199101969000 +B1109564533155N00603554EA0198201967000 +B1110034533199N00603556EA0199701964000 +B1110104533208N00603589EA0200301964000 +B1110174533191N00603553EA0201901967000 +B1110244533222N00603534EA0202401972000 +B1110314533209N00603570EA0202801976000 +B1110384533208N00603533EA0203701979000 +B1110454533219N00603562EA0203701982000 +B1110524533202N00603531EA0203901986000 +B1110594533234N00603524EA0204501990000 +B1111064533221N00603554EA0204701993000 +B1111134533211N00603512EA0204501996000 +B1111204533248N00603493EA0205001999000 +B1111274533264N00603529EA0205202004000 +B1111344533241N00603559EA0205802009000 +B1111414533218N00603526EA0206002013000 +B1111484533221N00603467EA0206602017000 +B1111554533258N00603473EA0207102021000 +B1112024533235N00603484EA0208702027000 +B1112094533253N00603447EA0208902034000 +B1112164533270N00603489EA0210002040000 +B1112244533255N00603465EA0210602048000 +B1112314533288N00603470EA0211002055000 +B1112384533267N00603474EA0210602061000 +B1112454533264N00603413EA0211502066000 +B1112524533299N00603405EA0211902071000 +B1112594533277N00603399EA0212202075000 +B1113064533303N00603362EA0212202080000 +B1113134533304N00603394EA0212502083000 +B1113204533293N00603351EA0212402086000 +B1113274533326N00603345EA0211802088000 +B1113344533316N00603381EA0211802090000 +B1113414533283N00603379EA0211402090000 +B1113484533247N00603344EA0210802089000 +B1113554533212N00603305EA0210302086000 +B1114024533184N00603267EA0210002083000 +B1114094533144N00603223EA0209602079000 +B1114164533116N00603189EA0208502075000 +B1114234533080N00603140EA0207102069000 +B1114304533046N00603101EA0206402063000 +B1114374533014N00603056EA0205102056000 +B1114444532976N00603016EA0203602047000 +B1114514532938N00602968EA0202102037000 +B1114584532894N00602928EA0200702026000 +B1115054532851N00602883EA0199202013000 +B1115124532817N00602821EA0197401999000 +B1115194532785N00602754EA0195101984000 +B1115264532749N00602675EA0192901968000 +B1115334532713N00602595EA0190801950000 +B1115404532673N00602526EA0188701932000 +B1115474532631N00602460EA0187201916000 +B1115544532589N00602388EA0185901899000 +B1116014532550N00602321EA0184801882000 +B1116084532512N00602257EA0184001865000 +B1116154532474N00602195EA0183101851000 +B1116224532437N00602134EA0182001837000 +B1116294532400N00602072EA0180901824000 +B1116364532363N00602013EA0179901811000 +B1116434532325N00601960EA0178901799000 +B1116504532287N00601914EA0177801788000 +B1116574532250N00601868EA0176801776000 +B1117044532207N00601835EA0175801767000 +B1117114532164N00601811EA0174801758000 +B1117184532123N00601777EA0173801748000 +B1117254532082N00601739EA0172801738000 +B1117324532041N00601695EA0171701727000 +B1117394532002N00601657EA0170901716000 +B1117464531963N00601621EA0169901705000 +B1117534531929N00601577EA0167801694000 +B1118014531883N00601536EA0167201679000 +B1118084531842N00601500EA0165601668000 +B1118154531805N00601460EA0164301656000 +B1118224531770N00601419EA0163201644000 +B1118294531733N00601379EA0161601632000 +B1118364531697N00601332EA0160001619000 +B1118434531666N00601285EA0158701606000 +B1118504531636N00601242EA0157301593000 +B1118574531603N00601198EA0155701579000 +B1119044531565N00601153EA0154901565000 +B1119114531527N00601121EA0154101553000 +B1119184531488N00601081EA0154101542000 +B1119254531461N00601045EA0153801534000 +B1119324531428N00601009EA0153901526000 +B1119394531393N00600974EA0153601520000 +B1119464531357N00600927EA0153201515000 +B1119534531320N00600883EA0153101511000 +B1120004531287N00600842EA0152901507000 +B1120074531254N00600805EA0152301502000 +B1120144531221N00600766EA0151401498000 +B1120214531188N00600726EA0150401494000 +B1120284531156N00600681EA0149801488000 +B1120354531125N00600635EA0149101482000 +B1120424531096N00600587EA0148401476000 +B1120494531063N00600535EA0147001469000 +B1120564531030N00600486EA0146201462000 +B1121034530997N00600444EA0145501454000 +B1121104530964N00600405EA0144701448000 +B1121174530927N00600372EA0144001441000 +B1121244530889N00600340EA0143301434000 +B1121314530852N00600308EA0142601427000 +B1121384530816N00600275EA0142001420000 +B1121454530783N00600241EA0141401414000 +B1121524530749N00600207EA0140601407000 +B1121594530715N00600172EA0139801399000 +B1122064530686N00600131EA0138901393000 +B1122134530653N00600094EA0137901386000 +B1122204530616N00600061EA0136901378000 +B1122274530577N00600029EA0135901371000 +B1122344530541N00559996EA0135201363000 +B1122414530505N00559965EA0134401357000 +B1122484530469N00559932EA0133501351000 +B1122554530434N00559899EA0132601339000 +B1123024530399N00559866EA0131701326000 +B1123094530365N00559831EA0130701313000 +B1123164530329N00559799EA0129801303000 +B1123234530290N00559772EA0128801294000 +B1123304530251N00559745EA0127801289000 +B1123374530212N00559717EA0126801277000 +B1123444530174N00559685EA0125901265000 +B1123514530139N00559650EA0125001255000 +B1123584530103N00559618EA0124001244000 +B1124054530067N00559582EA0122901235000 +B1124134530024N00559541EA0122101223000 +B1124204529987N00559507EA0121001211000 +B1124274529949N00559475EA0120201201000 +B1124344529916N00559439EA0119401191000 +B1124414529885N00559400EA0118501181000 +B1124484529853N00559364EA0117101172000 +B1124554529824N00559324EA0116001162000 +B1125024529795N00559291EA0114701150000 +B1125094529765N00559256EA0113501138000 +B1125164529738N00559219EA0112801126000 +B1125234529709N00559183EA0112001115000 +B1125304529679N00559148EA0111201106000 +B1125374529649N00559111EA0110301097000 +B1125444529623N00559072EA0109501088000 +B1125514529592N00559036EA0108701078000 +B1125584529564N00558998EA0108201070000 +B1126054529543N00558956EA0107601063000 +B1126124529523N00558911EA0106801056000 +B1126194529499N00558870EA0106101049000 +B1126264529468N00558831EA0105201043000 +B1126334529433N00558799EA0104401036000 +B1126404529407N00558759EA0103601027000 +B1126474529384N00558719EA0102301019000 +B1126544529360N00558684EA0101901009000 +B1127014529332N00558657EA0100701001000 +B1127084529302N00558626EA0099700991000 +B1127154529276N00558589EA0098600985000 +B1127224529250N00558554EA0097900975000 +B1127294529214N00558527EA0096900962000 +B1127364529183N00558493EA0095900950000 +B1127434529154N00558459EA0095100938000 +B1127504529115N00558435EA0094300927000 +B1127574529073N00558420EA0093800918000 +B1128044529034N00558393EA0092800911000 +B1128114528991N00558378EA0091700903000 +B1128184528949N00558359EA0090900895000 +B1128254528902N00558347EA0089900888000 +B1128324528862N00558319EA0088500880000 +B1128394528820N00558281EA0087500870000 +B1128464528771N00558268EA0086800859000 +B1128534528720N00558271EA0085800849000 +B1129004528669N00558279EA0084700839000 +B1129074528616N00558294EA0083500829000 +B1129144528562N00558306EA0082400819000 +B1129214528512N00558320EA0082800810000 +B1129284528494N00558354EA0082500802000 +B1129354528497N00558316EA0082500795000 +B1129424528468N00558280EA0082400789000 +B1129494528425N00558289EA0082000784000 +B1129564528384N00558311EA0081100779000 +B1130034528339N00558335EA0080000773000 +B1130104528288N00558354EA0079300767000 +B1130184528230N00558374EA0078500759000 +B1130254528177N00558369EA0077300753000 +B1130324528126N00558354EA0077600746000 +B1130394528114N00558303EA0079000742000 +B1130464528132N00558322EA0078500741000 +B1130534528090N00558348EA0079800740000 +B1131004528057N00558318EA0080600742000 +B1131074528076N00558317EA0082200746000 +B1131144528045N00558321EA0083600752000 +B1131214528066N00558305EA0085200761000 +B1131284528046N00558334EA0087100772000 +B1131354528048N00558294EA0088800784000 +B1131424528058N00558330EA0089300797000 +B1131494528015N00558328EA0091700806000 +B1131564528002N00558289EA0092900818000 +B1132034528018N00558319EA0095400829000 +B1132104527992N00558342EA0097100847000 +B1132174527997N00558296EA0098900862000 +B1132244527989N00558330EA0100900879000 +B1132314527978N00558295EA0102500891000 +B1132384528001N00558304EA0103200906000 +B1132454527981N00558344EA0103900921000 +B1132524527955N00558318EA0106100931000 +B1132594527976N00558306EA0107000950000 +B1133064527959N00558354EA0107700966000 +B1133134527916N00558353EA0109100981000 +B1133204527908N00558303EA0109600994000 +B1133274527933N00558266EA0110701008000 +B1133344527919N00558309EA0110601019000 +B1133414527876N00558319EA0111601029000 +B1133484527856N00558270EA0112201035000 +B1133554527869N00558216EA0114101044000 +B1134024527870N00558242EA0116001053000 +B1134094527859N00558210EA0117501065000 +B1134164527862N00558236EA0119001076000 +B1134234527837N00558200EA0120801091000 +B1134304527858N00558199EA0122601109000 +B1134374527826N00558215EA0124501127000 +B1134444527823N00558177EA0126501144000 +B1134514527827N00558218EA0127801160000 +B1134584527799N00558196EA0129201175000 +B1135054527812N00558156EA0131601192000 +B1135124527810N00558190EA0133201209000 +B1135194527787N00558157EA0134901228000 +B1135264527801N00558175EA0136501245000 +B1135334527773N00558173EA0137701260000 +B1135404527786N00558144EA0139301276000 +B1135474527790N00558181EA0140601295000 +B1135544527763N00558163EA0141801313000 +B1136024527794N00558167EA0143301331000 +B1136094527779N00558213EA0143601345000 +B1136164527763N00558175EA0144101357000 +B1136234527773N00558131EA0145101368000 +B1136304527799N00558121EA0145701377000 +B1136374527780N00558160EA0146001386000 +B1136444527755N00558125EA0147101394000 +B1136514527744N00558074EA0147101403000 +B1136584527735N00558014EA0145701408000 +B1137054527725N00557938EA0143601408000 +B1137124527725N00557865EA0142401404000 +B1137194527714N00557812EA0142501400000 +B1137264527710N00557753EA0142401396000 +B1137334527702N00557697EA0141501391000 +B1137404527699N00557641EA0140701386000 +B1137474527695N00557589EA0139801380000 +B1137544527684N00557535EA0137901373000 +B1138014527677N00557477EA0135801364000 +B1138084527667N00557423EA0136601353000 +B1138154527654N00557372EA0136801347000 +B1138224527653N00557312EA0135801340000 +B1138294527650N00557248EA0135701334000 +B1138364527649N00557189EA0134501328000 +B1138434527650N00557132EA0134801322000 +B1138504527642N00557075EA0135201319000 +B1138574527640N00557020EA0134801317000 +B1139044527637N00556962EA0133701312000 +B1139114527635N00556903EA0134501308000 +B1139184527632N00556848EA0134901305000 +B1139254527629N00556792EA0136301305000 +B1139324527614N00556735EA0137501306000 +B1139394527594N00556684EA0138901308000 +B1139464527573N00556647EV0139601310000 +B1139534527546N00556608EA0140701317000 +B1140004527530N00556569EA0140901320000 +B1140074527509N00556529EA0140701320000 +B1140144527486N00556492EA0140701324000 +B1140214527466N00556510EA0139301327000 +B1140284527503N00556537EA0139601331000 +B1140354527521N00556558EV0139401333000 +B1140424527547N00556603EA0140201334000 +B1140494527583N00556640EA0140401338000 +B1140564527617N00556671EA0141901342000 +B1141034527652N00556692EA0144101347000 +B1141104527636N00556727EA0146101350000 +B1141174527615N00556706EA0147701356000 +B1141244527618N00556713EA0150301360000 +B1141314527650N00556706EA0152201371000 +B1141384527652N00556750EA0155001386000 +B1141464527623N00556715EA0157301414000 +B1141534527657N00556709EA0158701439000 +B1142004527657N00556763EA0159501461000 +B1142074527620N00556742EA0160301479000 +B1142144527607N00556678EA0162201500000 +B1142214527636N00556659EA0164301521000 +B1142284527617N00556673EA0165601539000 +B1142354527617N00556627EA0167301559000 +B1142424527650N00556604EA0168801574000 +B1142494527637N00556640EA0171201584000 +B1142564527635N00556593EA0172901600000 +B1143034527666N00556599EA0173901619000 +B1143104527644N00556635EA0176301639000 +B1143174527632N00556598EA0178701660000 +B1143244527660N00556618EA0180401682000 +B1143314527632N00556645EA0182401704000 +B1143384527615N00556593EA0184501725000 +B1143454527609N00556560EV0186801740000 +B1143524527612N00556552EA0187901751000 +B1143594527630N00556519EA0190201770000 +B1144064527619N00556470EA0191201784000 +B1144134527580N00556453EA0190401801000 +B1144204527533N00556444EA0190801807000 +B1144274527491N00556440EA0190601821000 +B1144344527453N00556436EA0189701830000 +B1144414527412N00556435EA0188901839000 +B1144484527369N00556433EA0188101843000 +B1144554527329N00556433EA0187001844000 +B1145024527288N00556439EA0186101842000 +B1145094527247N00556440EA0185301838000 +B1145164527207N00556435EA0184301833000 +B1145234527166N00556435EA0183301827000 +B1145304527126N00556442EA0182001819000 +B1145374527084N00556448EA0180901810000 +B1145444527042N00556455EA0179501801000 +B1145514527001N00556457EA0178501790000 +B1145584526961N00556466EA0177801779000 +B1146054526925N00556470EA0176701770000 +B1146124526886N00556470EA0175001760000 +B1146194526845N00556474EA0173601749000 +B1146264526801N00556492EA0172401736000 +B1146334526752N00556511EA0171801724000 +B1146404526703N00556522EA0170701713000 +B1146474526652N00556528EA0169701703000 +B1146544526600N00556526EA0168401692000 +B1147014526545N00556518EA0167901681000 +B1147084526492N00556513EA0168501676000 +B1147154526447N00556510EA0169501671000 +B1147224526404N00556494EA0171501668000 +B1147294526364N00556473EA0172801670000 +B1147374526313N00556462EA0173701675000 +B1147444526270N00556459EA0174801682000 +B1147514526229N00556453EA0175501688000 +B1147584526190N00556447EA0176201696000 +B1148054526151N00556436EA0177001704000 +B1148124526111N00556418EA0177401714000 +B1148194526064N00556408EA0177401722000 +B1148264526017N00556391EA0176801727000 +B1148334525979N00556380EA0177101728000 +B1148404525942N00556370EA0177401730000 +B1148474525898N00556350EA0177301731000 +B1148544525851N00556329EA0177301730000 +B1149014525806N00556302EA0177501730000 +B1149084525773N00556274EA0178001732000 +B1149154525743N00556241EA0179001735000 +B1149224525705N00556211EA0180501737000 +B1149294525671N00556178EA0180601744000 +B1149364525631N00556162EA0181201749000 +B1149434525607N00556138EA0183501757000 +B1149504525612N00556156EA0184501767000 +B1149574525605N00556123EA0186901778000 +B1150044525611N00556146EA0188201791000 +B1150114525615N00556091EA0190901803000 +B1150184525593N00556095EA0192901815000 +B1150254525611N00556069EA0195501831000 +B1150324525591N00556037EA0197401851000 +B1150394525605N00556065EA0199701866000 +B1150464525609N00556026EA0201901884000 +B1150534525592N00556046EA0203801905000 +B1151004525622N00556039EA0206801925000 +B1151074525602N00556001EA0208201947000 +B1151144525567N00555978EA0210101970000 +B1151214525536N00555953EA0213001993000 +B1151284525554N00555922EA0214502017000 +B1151354525542N00555965EA0215902035000 +B1151424525505N00555960EA0218002056000 +B1151494525465N00555934EA0219202078000 +B1151564525422N00555911EA0220402097000 +B1152034525383N00555886EA0221502115000 +B1152104525346N00555860EA0221102129000 +B1152174525301N00555847EA0220302139000 +B1152244525262N00555834EA0219502146000 +B1152314525221N00555818EA0218802149000 +B1152384525182N00555802EA0219302151000 +B1152454525145N00555788EA0219902154000 +B1152524525105N00555783EA0220602157000 +B1152594525069N00555774EA0221402162000 +B1153064525035N00555768EA0221202167000 +B1153134524998N00555759EA0221502170000 +B1153214524952N00555744EA0220802173000 +B1153284524914N00555724EA0220302174000 +B1153354524875N00555697EA0219302172000 +B1153424524841N00555665EA0219102169000 +B1153494524803N00555632EA0219202167000 +B1153564524764N00555604EA0219602165000 +B1154034524736N00555585EA0221002166000 +B1154104524713N00555574EA0222802170000 +B1154174524684N00555565EA0224302177000 +B1154244524649N00555553EA0226402187000 +B1154314524619N00555526EA0228402199000 +B1154384524594N00555509EA0229302212000 +B1154454524563N00555499EA0229502224000 +B1154524524532N00555484EA0230402235000 +B1154594524501N00555471EA0231002244000 +B1155064524463N00555449EA0230202251000 +B1155134524428N00555422EA0228802254000 +B1155204524390N00555390EA0227302253000 +B1155274524354N00555374EA0226002250000 +B1155344524318N00555347EA0224102244000 +B1155414524281N00555310EA0221502234000 +B1155484524246N00555264EA0221002221000 +B1155554524215N00555222EA0220102210000 +B1156024524182N00555185EA0220202199000 +B1156094524150N00555156EA0219402191000 +B1156164524114N00555124EA0220302183000 +B1156234524084N00555103EA0220302180000 +B1156304524051N00555090EA0219602178000 +B1156374524015N00555081EA0218402174000 +B1156444523980N00555065EA0218602169000 +B1156514523954N00555046EA0219002165000 +B1156584523929N00555022EA0219702164000 +B1157054523897N00554991EA0219902164000 +B1157124523864N00554952EA0218702164000 +B1157194523830N00554917EA0218902163000 +B1157264523792N00554910EA0218902162000 +B1157334523757N00554891EA0219902162000 +B1157404523720N00554872EA0221302163000 +B1157474523688N00554849EA0221802164000 +B1157544523647N00554837EA0221802168000 +B1158014523611N00554828EV0222802171000 +B1158084523568N00554798EA0224102172000 +B1158154523530N00554786EA0224302176000 +B1158224523489N00554771EA0224202178000 +B1158304523455N00554750EV0225002180000 +B1158364523411N00554732EA0225402181000 +B1158434523368N00554733EA0225902182000 +B1158504523327N00554722EA0226902189000 +B1158574523284N00554707EA0225902197000 +B1159044523241N00554696EA0226202204000 +B1159124523203N00554698EV0226102208000 +B1159194523145N00554687EA0226502211000 +B1159264523104N00554678EA0226302215000 +B1159334523076N00554667EV0226802217000 +B1159404523028N00554639EA0226302219000 +B1159474522987N00554607EA0224902223000 +B1159544522943N00554581EA0223502223000 +B1200014522889N00554553EA0221302218000 +B1200084522822N00554530EA0219902211000 +B1200154522799N00554518EV0220302210000 +B1200224522726N00554479EA0221102201000 +B1200294522700N00554465EA0222402193000 +B1200364522668N00554446EA0223402191000 +B1200434522634N00554430EA0223902191000 +B1200504522591N00554411EA0223902193000 +B1200574522553N00554383EA0225402195000 +B1201044522520N00554362EA0226802200000 +B1201114522487N00554336EA0227902207000 +B1201184522445N00554318EA0228302209000 +B1201254522407N00554301EA0227702216000 +B1201324522367N00554278EA0227102222000 +B1201394522325N00554248EA0226702225000 +B1201464522282N00554227EA0226002225000 +B1201534522244N00554208EA0226402226000 +B1202004522216N00554193EV0228002227000 +B1202074522185N00554163EA0229602230000 +B1202144522158N00554135EA0231402237000 +B1202214522128N00554113EA0233002242000 +B1202284522095N00554088EA0234602251000 +B1202354522069N00554061EA0234502264000 +B1202424522034N00554039EA0235502274000 +B1202494521998N00554013EA0235402283000 +B1202564521965N00553993EA0235402291000 +B1203034521928N00553972EA0235502297000 +B1203104521898N00553945EA0236102303000 +B1203174521867N00553930EA0236202308000 +B1203244521829N00553917EA0236402312000 +B1203314521787N00553907EA0237402315000 +B1203384521746N00553898EA0239502320000 +B1203454521712N00553889EA0240602328000 +B1203524521683N00553893EA0239802331000 +B1203594521647N00553884EA0240002338000 +B1204064521609N00553880EA0240902344000 +B1204134521577N00553866EA0241502350000 +B1204214521545N00553851EV0243502350000 +B1204274521511N00553829EA0244902356000 +B1204344521483N00553803EA0245902367000 +B1204424521455N00553796EV0246902376000 +B1204484521409N00553783EA0245602381000 +B1204554521382N00553761EA0244902391000 +B1205034521358N00553740EA0244502399000 +B1205104521331N00553710EA0244602403000 +B1205174521303N00553670EA0243302404000 +B1205244521273N00553626EA0241302402000 +B1205314521244N00553579EA0239702397000 +B1205384521217N00553531EA0239002391000 +B1205454521194N00553494EA0238102386000 +B1205524521169N00553458EA0236702379000 +B1205594521139N00553432EA0235302372000 +B1206064521108N00553406EA0233102362000 +B1206134521070N00553367EA0231202348000 +B1206204521031N00553325EA0229702333000 +B1206274520991N00553281EA0227802321000 +B1206344520944N00553245EA0227102309000 +B1206414520913N00553216EA0226502300000 +B1206484520885N00553189EA0226702289000 +B1206554520863N00553165EA0225902278000 +B1207024520833N00553150EA0224802267000 +B1207094520800N00553125EA0223202256000 +B1207164520766N00553098EA0223402244000 +B1207234520730N00553075EA0223102234000 +B1207304520694N00553053EA0224102227000 +B1207374520667N00553022EA0224802223000 +B1207444520634N00552999EA0225302221000 +B1207514520604N00552976EA0224502220000 +B1207584520570N00552953EA0225302219000 +B1208054520536N00552930EA0225502219000 +B1208124520507N00552913EA0224202219000 +B1208194520476N00552890EA0223802219000 +B1208264520440N00552865EA0224002217000 +B1208334520407N00552834EA0225702214000 +B1208404520392N00552796EA0227002215000 +B1208474520414N00552779EA0228802217000 +B1208544520408N00552810EA0230302221000 +B1209014520380N00552792EA0231902230000 +B1209084520355N00552769EA0233002241000 +B1209154520329N00552739EA0233502254000 +B1209224520294N00552714EA0234602265000 +B1209294520259N00552697EA0236102277000 +B1209364520226N00552677EA0238202290000 +B1209434520200N00552649EA0239502305000 +B1209504520173N00552620EA0239602318000 +B1209574520141N00552598EA0239702328000 +B1210044520111N00552575EA0240702336000 +B1210114520079N00552565EA0240302342000 +B1210184520043N00552545EA0240602348000 +B1210254520018N00552526EA0240002354000 +B1210324519993N00552501EA0240402357000 +B1210394519968N00552469EA0241102360000 +B1210464519941N00552436EA0242102363000 +B1210534519910N00552411EA0243802368000 +B1211014519875N00552380EA0245302374000 +B1211084519850N00552355EA0246202383000 +B1211154519818N00552332EA0244702391000 +B1211224519774N00552304EA0243402395000 +B1211294519738N00552277EA0243002398000 +B1211364519702N00552259EA0243002399000 +B1211434519671N00552248EA0244402400000 +B1211504519639N00552225EA0244002402000 +B1211574519606N00552200EA0243802403000 +B1212044519578N00552174EA0242002403000 +B1212114519539N00552156EA0240702399000 +B1212184519500N00552138EA0241102394000 +B1212254519464N00552127EA0241202392000 +B1212324519430N00552112EA0239702390000 +B1212394519395N00552086EA0238202384000 +B1212464519360N00552057EA0236402376000 +B1212534519316N00552027EA0235802367000 +B1213004519278N00552001EA0234902358000 +B1213074519247N00551971EA0233002349000 +B1213144519211N00551952EA0231602340000 +B1213214519173N00551942EA0231702329000 +B1213284519135N00551933EA0232302319000 +B1213354519100N00551917EA0234102313000 +B1213424519071N00551895EA0235502311000 +B1213494519037N00551876EA0238002313000 +B1213564519046N00551890EA0239902316000 +B1214034519048N00551845EA0241902322000 +B1214104519021N00551832EA0243802333000 +B1214174519049N00551853EA0245802343000 +B1214244519071N00551796EA0247702360000 +B1214314519077N00551727EA0249102377000 +B1214384519081N00551665EA0250702396000 +B1214454519085N00551616EA0252102415000 +B1214524519081N00551569EA0252002432000 +B1214594519070N00551521EA0250802444000 +B1215064519052N00551467EA0249702451000 +B1215134519027N00551413EA0249602454000 +B1215204519001N00551375EA0249302456000 +B1215274518971N00551327EA0248802458000 +B1215344518945N00551276EA0248702459000 +B1215414518921N00551227EA0249002459000 +B1215484518892N00551190EA0248402458000 +B1215554518862N00551154EA0250002457000 +B1216024518838N00551119EA0250102459000 +B1216094518818N00551073EA0251202462000 +B1216164518795N00551024EA0253302468000 +B1216234518802N00550967EA0254702477000 +B1216304518832N00550993EA0256002486000 +B1216374518811N00551006EA0258102498000 +B1216444518798N00550963EA0259502512000 +B1216514518782N00550916EA0258802526000 +B1216584518756N00550866EA0258002535000 +B1217064518721N00550819EA0257202542000 +B1217134518684N00550778EA0255702543000 +B1217204518639N00550725EA0254202540000 +B1217274518596N00550671EA0253302535000 +B1217344518562N00550622EA0252802529000 +B1217414518532N00550570EA0251402522000 +B1217484518503N00550526EA0250202514000 +B1217554518477N00550488EA0249502506000 +B1218024518446N00550445EA0247302497000 +B1218094518409N00550401EA0245902485000 +B1218164518373N00550362EA0245002474000 +B1218234518337N00550329EA0244102464000 +B1218304518307N00550291EA0243402454000 +B1218374518274N00550254EA0243002444000 +B1218444518239N00550219EA0242202434000 +B1218514518200N00550190EA0241602425000 +B1218584518158N00550167EA0240802416000 +B1219054518113N00550148EA0240102414000 +B1219124518072N00550117EA0239502406000 +B1219194518035N00550082EA0238902397000 +B1219264517997N00550046EA0238302389000 +B1219334517963N00550009EA0237302380000 +B1219404517932N00549962EA0236902375000 +B1219474517898N00549928EA0237102367000 +B1219544517876N00549901EA0237102361000 +B1220024517864N00549877EV0236202358000 +B1220084517842N00549847EA0236202353000 +B1220154517823N00549819EA0234702348000 +B1220224517805N00549791EA0234102341000 +B1220304517775N00549773EA0233402332000 +B1220374517746N00549749EA0232402323000 +B1220444517720N00549722EA0230802317000 +B1220514517685N00549694EA0228402307000 +B1220584517648N00549669EA0226602295000 +B1221054517606N00549643EA0225902282000 +B1221124517563N00549615EA0225102269000 +B1221194517521N00549594EA0224402256000 +B1221264517484N00549585EA0223402245000 +B1221334517444N00549564EA0222202234000 +B1221404517406N00549537EA0221102222000 +B1221474517369N00549509EA0220202211000 +B1221544517333N00549484EA0219502201000 +B1222014517296N00549465EA0218302192000 +B1222084517264N00549430EA0217502182000 +B1222154517230N00549400EA0216202173000 +B1222224517200N00549370EA0214902164000 +B1222294517164N00549346EA0213502154000 +B1222364517132N00549325EA0211502142000 +B1222434517099N00549303EA0209202127000 +B1222504517066N00549276EA0207302110000 +B1222574517032N00549245EA0205802093000 +B1223044516999N00549224EA0203502077000 +B1223114516969N00549201EA0202102060000 +B1223184516949N00549180EA0200002042000 +B1223254516921N00549162EA0198602027000 +B1223324516895N00549135EA0196002009000 +B1223394516869N00549096EA0194101989000 +B1223464516846N00549054EA0193201970000 +B1223534516821N00549012EA0192701953000 +B1224004516795N00548973EA0193201939000 +B1224074516772N00548941EA0193501930000 +B1224144516743N00548917EA0195401926000 +B1224214516730N00548887EA0197501926000 +B1224284516743N00548914EA0199401929000 +B1224354516714N00548938EA0201401933000 +B1224424516688N00548919EA0202601941000 +B1224494516666N00548888EA0204201952000 +B1224564516647N00548841EA0205301961000 +B1225034516618N00548817EA0207101976000 +B1225104516587N00548798EA0208301990000 +B1225174516578N00548765EA0209602005000 +B1225244516609N00548792EA0210502013000 +B1225314516592N00548834EA0212002025000 +B1225384516564N00548822EA0215002040000 +B1225454516565N00548774EA0217802060000 +B1225524516579N00548806EA0220702081000 +B1225594516555N00548814EA0221602104000 +B1226064516531N00548783EA0220802124000 +B1226134516502N00548744EA0220202138000 +B1226204516471N00548694EA0219102147000 +B1226284516430N00548632EA0217902150000 +B1226354516398N00548595EV0216702150000 +B1226424516355N00548550EA0215202149000 +B1226494516328N00548509EA0213802143000 +B1226564516297N00548469EA0212302136000 +B1227034516266N00548432EA0210002123000 +B1227104516240N00548405EA0209302112000 +B1227174516221N00548386EV0208702103000 +B1227244516182N00548360EA0207102095000 +B1227314516152N00548333EA0205702081000 +B1227384516123N00548304EA0205102071000 +B1227454516088N00548279EA0204502059000 +B1227524516058N00548243EA0203002047000 +B1227594516026N00548206EA0201602034000 +B1228064515993N00548172EA0200002021000 +B1228134515957N00548135EA0198802006000 +B1228204515925N00548102EA0197801992000 +B1228274515900N00548076EA0197601983000 +B1228344515877N00548045EA0197001972000 +B1228414515853N00548006EA0196901963000 +B1228484515831N00547975EA0197301956000 +B1228554515803N00547942EA0196701951000 +B1229024515773N00547908EA0195801946000 +B1229094515743N00547874EA0196301941000 +B1229164515717N00547843EA0196101937000 +B1229234515687N00547818EA0195101933000 +B1229304515657N00547791EA0193901929000 +B1229374515630N00547754EA0192701923000 +B1229444515606N00547715EA0192701916000 +B1229514515590N00547683EA0194701912000 +B1229584515593N00547633EA0196701912000 +B1230054515624N00547648EA0198001917000 +B1230124515601N00547686EA0199601924000 +B1230194515572N00547668EA0200201934000 +B1230264515539N00547629EA0198901942000 +B1230334515499N00547579EA0199101947000 +B1230404515472N00547543EA0198401951000 +B1230474515438N00547517EA0196801953000 +B1230544515399N00547481EA0196101951000 +B1231014515371N00547443EA0196501948000 +B1231084515344N00547414EA0196701946000 +B1231154515321N00547382EA0198601946000 +B1231224515304N00547355EA0200001949000 +B1231294515280N00547322EA0201601955000 +B1231364515254N00547286EA0202401962000 +B1231434515227N00547245EA0204801971000 +B1231504515215N00547208EA0207501984000 +B1231574515205N00547168EA0206901997000 +B1232044515187N00547137EA0207502007000 +B1232114515163N00547109EA0206502016000 +B1232194515128N00547069EA0204702020000 +B1232264515096N00547029EA0203402018000 +B1232334515060N00546986EA0201302013000 +B1232404515031N00546942EA0200002005000 +B1232474514999N00546900EA0197801994000 +B1232544514965N00546852EA0196401981000 +B1233014514933N00546804EA0195901968000 +B1233084514907N00546766EA0194701957000 +B1233154514876N00546723EA0193601946000 +B1233224514849N00546676EA0192701936000 +B1233294514820N00546635EA0192101926000 +B1233364514789N00546591EA0190501916000 +B1233434514753N00546553EA0189301904000 +B1233504514712N00546505EA0188401892000 +B1233574514685N00546467EA0188701882000 +B1234044514652N00546433EA0189901876000 +B1234114514625N00546391EA0188801872000 +B1234184514594N00546352EA0187201866000 +B1234254514554N00546303EA0184901857000 +B1234324514513N00546242EA0182901845000 +B1234394514476N00546183EA0182501832000 +B1234464514447N00546134EA0182101821000 +B1234534514414N00546094EA0181601812000 +B1235004514375N00546066EA0181201804000 +B1235074514341N00546036EA0182001797000 +B1235144514310N00546011EA0182001794000 +B1235214514272N00545981EA0182801793000 +B1235284514241N00545939EA0183601793000 +B1235354514217N00545902EA0184701796000 +B1235424514197N00545869EA0186001802000 +B1235494514171N00545832EA0185301808000 +B1235564514146N00545798EA0184301811000 +B1236034514117N00545762EA0183301810000 +B1236104514090N00545723EA0180901805000 +B1236174514079N00545769EA0179001797000 +B1236244514091N00545824EA0177601786000 +B1236314514117N00545873EA0176601774000 +B1236384514151N00545910EA0177101767000 +B1236454514188N00545939EA0178901764000 +B1236524514214N00545973EA0179401760000 +B1236594514236N00546022EA0180401759000 +B1237064514259N00546074EA0181301760000 +B1237134514284N00546122EA0182401762000 +B1237204514313N00546161EA0183001766000 +B1237274514351N00546192EA0184201773000 +B1237344514384N00546234EA0185401783000 +B1237414514414N00546273EA0185401793000 +B1237484514442N00546307EA0184001796000 +B1237554514465N00546351EA0184401802000 +B1238024514492N00546399EA0186101806000 +B1238094514511N00546437EA0185101809000 +B1238174514541N00546495EA0186601811000 +B1238244514569N00546536EA0185401814000 +B1238314514604N00546589EA0185001815000 +B1238384514634N00546631EA0184501815000 +B1238454514670N00546691EA0185501815000 +B1238524514703N00546743EA0186601815000 +B1238594514728N00546784EA0187801819000 +B1239064514751N00546812EA0189201826000 +B1239134514773N00546836EA0189301834000 +B1239204514801N00546870EA0190001839000 +B1239274514827N00546912EA0189301846000 +B1239344514855N00546952EA0189201850000 +B1239414514890N00546986EA0188501852000 +B1239484514933N00547027EA0188801853000 +B1239554514968N00547067EA0191101854000 +B1240024514992N00547101EA0192801860000 +B1240094515021N00547134EA0193201867000 +B1240164515046N00547163EA0193801871000 +B1240234515071N00547187EA0193901878000 +B1240304515097N00547215EA0192801880000 +B1240374515124N00547237EA0191101880000 +B1240444515150N00547275EA0191301881000 +B1240514515190N00547321EA0192801881000 +B1240584515219N00547357EA0194301885000 +B1241054515254N00547394EA0195601892000 +B1241124515281N00547428EA0197301901000 +B1241194515307N00547462EA0198301911000 +B1241264515335N00547500EA0200501923000 +B1241334515360N00547534EA0200001934000 +B1241404515393N00547581EA0199101942000 +B1241474515421N00547641EA0198701947000 +B1241544515455N00547700EA0197401949000 +B1242014515496N00547756EA0194801945000 +B1242084515539N00547800EA0193001939000 +B1242154515575N00547837EA0193701931000 +B1242224515600N00547877EA0193201924000 +B1242294515632N00547919EA0191801917000 +B1242364515668N00547965EA0191601910000 +B1242434515700N00547997EA0191401904000 +B1242504515733N00548029EA0192201900000 +B1242574515768N00548071EA0194101900000 +B1243044515800N00548113EA0194001900000 +B1243114515839N00548158EA0193701900000 +B1243184515880N00548203EA0192801900000 +B1243254515919N00548252EA0191701900000 +B1243324515954N00548302EA0189501900000 +B1243394515994N00548350EA0186901900000 +B1243464516033N00548401EA0186001900000 +B1243534516072N00548452EA0183801894000 +B1244004516117N00548515EA0182001883000 +B1244084516173N00548589EA0180501861000 +B1244154516223N00548647EA0179101840000 +B1244224516270N00548698EA0177601820000 +B1244294516322N00548750EA0175801801000 +B1244364516366N00548783EA0176301783000 +B1244434516407N00548808EA0178701773000 +B1244504516444N00548835EA0180701769000 +B1244574516473N00548862EA0182601772000 +B1245044516508N00548887EA0184401778000 +B1245114516547N00548912EA0184901786000 +B1245184516588N00548931EA0186501794000 +B1245254516618N00548948EA0187301805000 +B1245324516648N00548967EA0187501815000 +B1245394516679N00548990EA0188501823000 +B1245464516718N00549005EA0188701830000 +B1245534516760N00549024EA0188601836000 +B1246004516802N00549045EA0187601839000 +B1246074516848N00549070EA0186001838000 +B1246144516899N00549093EA0184401834000 +B1246214516946N00549119EA0182701826000 +B1246284516992N00549139EA0181401817000 +B1246354517037N00549169EA0180401807000 +B1246424517080N00549195EA0180301798000 +B1246494517127N00549218EA0179801790000 +B1246564517172N00549248EA0178501782000 +B1247034517215N00549280EA0176301772000 +B1247104517265N00549314EA0175201761000 +B1247174517308N00549341EA0174501751000 +B1247244517353N00549374EA0173701741000 +B1247314517399N00549404EA0173001733000 +B1247384517445N00549438EA0172101724000 +B1247454517494N00549459EA0171401716000 +B1247524517541N00549458EA0170801709000 +B1247594517584N00549475EA0171401704000 +B1248064517626N00549492EA0172401700000 +B1248134517659N00549512EA0174101700000 +B1248204517687N00549541EA0174701703000 +B1248274517713N00549577EA0176201707000 +B1248344517732N00549613EA0177701714000 +B1248414517753N00549655EA0177701723000 +B1248484517771N00549707EA0176401728000 +B1248554517794N00549765EA0175401730000 +B1249024517817N00549826EA0174601731000 +B1249094517850N00549874EA0175901731000 +B1249164517888N00549919EA0175901732000 +B1249234517924N00549975EA0175001731000 +B1249304517952N00550032EA0174301727000 +B1249374517973N00550088EA0174301723000 +B1249444517991N00550142EA0173801721000 +B1249514518004N00550192EA0173701719000 +B1249594518026N00550256EA0172701716000 +B1250064518041N00550309EA0171701711000 +B1250134518064N00550357EA0172301705000 +B1250204518081N00550405EA0173201702000 +B1250274518087N00550444EA0172601701000 +B1250344518102N00550494EA0171901698000 +B1250414518114N00550548EA0171201694000 +B1250484518123N00550602EA0170201689000 +B1250554518139N00550652EA0168901684000 +B1251024518164N00550709EA0167301678000 +B1251094518181N00550779EA0166401670000 +B1251164518198N00550852EA0166201661000 +B1251234518214N00550903EA0167401655000 +B1251304518229N00550955EA0168301651000 +B1251374518236N00551013EA0167801649000 +B1251444518231N00551070EA0168001646000 +B1251514518228N00551119EA0169501646000 +B1251584518232N00551164EA0170701649000 +B1252054518242N00551210EA0172401654000 +B1252124518247N00551258EA0172901662000 +B1252194518272N00551308EA0175301670000 +B1252264518255N00551320EA0176701677000 +B1252334518284N00551284EA0178801685000 +B1252404518297N00551311EA0180401697000 +B1252474518290N00551274EA0181701713000 +B1252544518322N00551292EA0183101729000 +B1253014518306N00551306EA0184701742000 +B1253084518331N00551280EA0186101758000 +B1253154518350N00551318EA0187201772000 +B1253224518339N00551289EA0189701783000 +B1253294518365N00551302EA0191401785000 +B1253364518350N00551293EA0193501788000 +B1253434518380N00551303EA0196201804000 +B1253504518360N00551304EA0198101817000 +B1253574518394N00551291EA0200801843000 +B1254044518385N00551328EA0203501871000 +B1254114518389N00551287EA0206101900000 +B1254184518422N00551297EA0209001933000 +B1254254518396N00551321EA0211801956000 +B1254324518421N00551300EA0215701981000 +B1254394518430N00551336EA0217602013000 +B1254464518420N00551300EA0221502041000 +B1254534518444N00551309EA0224402073000 +B1255004518421N00551325EA0227502104000 +B1255074518442N00551293EA0231002137000 +B1255144518459N00551325EA0233202169000 +B1255214518428N00551331EA0236402201000 +B1255284518453N00551315EA0239302205000 +B1255354518494N00551347EA0241202218000 +B1255434518534N00551351EA0242702255000 +B1255504518578N00551359EA0244702288000 +B1255574518623N00551382EA0245502318000 +B1256044518664N00551409EA0247602346000 +B1256114518697N00551435EA0249502372000 +B1256184518737N00551463EA0250002396000 +B1256254518773N00551496EA0249702416000 +B1256324518814N00551527EA0250402430000 +B1256394518848N00551560EA0250502443000 +B1256464518883N00551596EA0249802451000 +B1256534518926N00551625EA0250102457000 +B1257004518972N00551644EA0252202463000 +B1257074519011N00551662EA0252602471000 +B1257144519050N00551678EA0253802480000 +B1257214519092N00551699EA0254502488000 +B1257284519137N00551724EA0253902495000 +B1257354519187N00551761EA0253602500000 +B1257424519233N00551793EA0252802503000 +B1257494519283N00551827EA0252002504000 +B1257564519330N00551866EA0250302503000 +B1258034519383N00551903EA0249002499000 +B1258104519433N00551941EA0247602494000 +B1258174519478N00551990EA0246602486000 +B1258244519521N00552038EA0245602477000 +B1258314519570N00552085EA0244302467000 +B1258384519618N00552133EA0241602454000 +B1258454519663N00552183EA0240002440000 +B1258524519703N00552215EA0239902427000 +B1258594519744N00552255EA0239102415000 +B1259064519781N00552299EA0238302403000 +B1259134519822N00552345EA0238302391000 +B1259204519863N00552393EA0238902382000 +B1259274519905N00552433EA0240102378000 +B1259344519950N00552464EA0241502376000 +B1259414519990N00552499EA0242902379000 +B1259484520023N00552532EA0243402385000 +B1259554520058N00552578EA0245002390000 +B1300024520096N00552610EA0246702397000 +B1300094520137N00552644EA0247702408000 +B1300164520173N00552681EA0247502420000 +B1300234520209N00552712EA0247902428000 +B1300304520246N00552736EA0249002436000 +B1300374520288N00552755EA0250302443000 +B1300444520331N00552770EA0251102451000 +B1300514520373N00552784EA0252302460000 +B1300584520412N00552802EA0253302469000 +B1301054520455N00552831EA0254202478000 +B1301124520491N00552866EA0253202486000 +B1301194520535N00552917EA0251202490000 +B1301274520592N00552976EA0249802491000 +B1301344520645N00553027EA0249102489000 +B1301414520694N00553070EA0249002488000 +B1301484520741N00553123EA0247702486000 +B1301554520795N00553181EA0246402481000 +B1302024520850N00553231EA0244902473000 +B1302094520904N00553277EA0243102462000 +B1302164520958N00553327EA0241802451000 +B1302234521013N00553375EA0240402438000 +B1302304521060N00553424EA0239302425000 +B1302374521104N00553471EA0237002411000 +B1302444521153N00553510EA0236302397000 +B1302514521198N00553548EA0234902383000 +B1302584521245N00553573EA0233902368000 +B1303054521294N00553588EA0233502355000 +B1303124521338N00553599EA0233302345000 +B1303194521380N00553612EA0235602338000 +B1303264521430N00553624EA0238102335000 +B1303334521473N00553626EA0240502339000 +B1303404521508N00553635EA0241002346000 +B1303474521544N00553628EA0243702356000 +B1303544521587N00553633EA0246002368000 +B1304014521629N00553647EA0247602382000 +B1304084521670N00553663EA0249202397000 +B1304154521711N00553682EA0250602413000 +B1304224521752N00553701EA0252502430000 +B1304294521793N00553714EA0253202445000 +B1304364521834N00553735EA0254702461000 +B1304434521881N00553761EA0255002474000 +B1304504521927N00553770EA0254802486000 +B1304574521976N00553788EA0254602495000 +B1305044522033N00553806EA0254302501000 +B1305114522081N00553847EA0253602504000 +B1305184522134N00553884EA0252502506000 +B1305254522192N00553922EA0250802504000 +B1305324522251N00553956EA0248802498000 +B1305394522308N00553990EA0246502488000 +B1305464522368N00554021EA0244902476000 +B1305534522434N00554057EA0243402462000 +B1306004522498N00554087EA0241802447000 +B1306074522562N00554113EA0240102432000 +B1306144522627N00554136EA0238402417000 +B1306214522692N00554162EA0236702402000 +B1306284522756N00554188EA0235202386000 +B1306354522821N00554211EA0233802370000 +B1306424522883N00554238EA0232602355000 +B1306494522939N00554263EA0232502341000 +B1306564522981N00554287EA0230202329000 +B1307034523035N00554314EA0229202316000 +B1307114523092N00554337EA0228202302000 +B1307184523140N00554360EA0226902290000 +B1307254523181N00554373EA0225602279000 +B1307324523221N00554374EA0225002269000 +B1307394523264N00554385EA0224802258000 +B1307464523305N00554395EA0225102248000 +B1307534523349N00554397EA0225002239000 +B1308004523393N00554406EA0224602233000 +B1308074523436N00554416EA0225302229000 +B1308144523475N00554424EA0225202228000 +B1308214523515N00554442EA0224402227000 +B1308284523557N00554461EA0223502224000 +B1308354523602N00554487EA0222702219000 +B1308424523647N00554512EA0221002213000 +B1308494523694N00554547EA0219402205000 +B1308564523739N00554575EA0217602196000 +B1309034523780N00554608EA0216702185000 +B1309104523818N00554646EA0215102173000 +B1309174523858N00554675EA0214502161000 +B1309244523897N00554703EA0214202150000 +B1309314523933N00554732EA0213802140000 +B1309384523969N00554765EA0213302131000 +B1309454524012N00554803EA0211902122000 +B1309524524048N00554839EA0212902116000 +B1309594524087N00554871EA0213302112000 +B1310064524123N00554905EA0214002111000 +B1310134524159N00554934EA0213702111000 +B1310204524195N00554975EA0213502110000 +B1310274524235N00555024EA0214102110000 +B1310344524272N00555065EA0215502110000 +B1310414524303N00555093EA0216802114000 +B1310484524337N00555108EA0218302120000 +B1310554524356N00555074EA0219202128000 +B1311024524343N00555103EA0220502134000 +B1311094524383N00555114EA0221502143000 +B1311164524431N00555113EA0223402154000 +B1311234524473N00555113EA0224202165000 +B1311304524511N00555110EA0225402177000 +B1311374524544N00555113EA0225302189000 +B1311444524582N00555125EA0225402198000 +B1311514524619N00555132EA0225002205000 +B1311584524659N00555135EA0225302210000 +B1312054524699N00555129EA0224402214000 +B1312124524737N00555129EA0223302215000 +B1312194524775N00555146EA0222402214000 +B1312264524816N00555171EA0220802211000 +B1312334524864N00555206EA0219102205000 +B1312404524908N00555238EA0219502199000 +B1312474524951N00555271EA0218402192000 +B1312544524985N00555315EA0218202183000 +B1313014525012N00555362EA0217102176000 +B1313094525038N00555420EA0217002167000 +B1313164525068N00555461EA0216502160000 +B1313234525110N00555504EA0215102155000 +B1313304525153N00555551EA0214102149000 +B1313374525193N00555598EA0214102141000 +B1313444525231N00555628EA0214102135000 +B1313514525267N00555651EA0213502130000 +B1313584525301N00555677EA0212602125000 +B1314054525341N00555707EA0211702118000 +B1314124525381N00555739EA0210102110000 +B1314194525424N00555764EA0208702102000 +B1314264525467N00555786EA0207802092000 +B1314334525504N00555823EA0206602084000 +B1314404525552N00555873EA0205302074000 +B1314474525603N00555920EA0204502063000 +B1314544525654N00555963EA0203602052000 +B1315014525705N00556003EA0202602040000 +B1315084525751N00556043EA0201702030000 +B1315154525786N00556067EA0201702021000 +B1315224525827N00556089EA0201302014000 +B1315294525867N00556114EA0200402007000 +B1315364525906N00556144EA0199702000000 +B1315434525946N00556173EA0198701992000 +B1315504525982N00556177EA0197901983000 +B1315574526018N00556157EA0197101975000 +B1316044526058N00556149EA0197001968000 +B1316114526087N00556129EA0195901962000 +B1316184526115N00556072EA0194201954000 +B1316254526150N00556010EA0192501945000 +B1316324526182N00555945EA0190701933000 +B1316394526212N00555876EA0189401921000 +B1316464526241N00555810EA0187801908000 +B1316534526268N00555747EA0185901894000 +B1317004526297N00555682EA0184001879000 +B1317074526324N00555620EA0182901864000 +B1317144526355N00555561EA0181701849000 +B1317214526384N00555500EA0181001835000 +B1317284526413N00555443EA0179901824000 +B1317354526450N00555387EA0179201813000 +B1317424526489N00555331EA0178701801000 +B1317494526515N00555285EA0179201791000 +B1317564526535N00555254EA0180201783000 +B1318034526555N00555228EA0180801780000 +B1318104526583N00555210EA0182001781000 +B1318174526617N00555207EA0183201785000 +B1318244526647N00555223EA0184001791000 +B1318314526619N00555245EA0184801795000 +B1318384526640N00555213EA0185701802000 +B1318454526677N00555213EA0186101809000 +B1318534526716N00555195EA0186801815000 +B1319004526742N00555171EA0187401821000 +B1319074526769N00555152EA0188801828000 +B1319144526797N00555135EA0190001836000 +B1319214526822N00555120EA0191401846000 +B1319284526848N00555107EA0193801857000 +B1319354526839N00555086EA0195101867000 +B1319424526847N00555126EA0197201875000 +B1319494526853N00555100EA0198501885000 +B1319564526848N00555139EA0199701892000 +B1320034526871N00555132EA0201301906000 +B1320104526849N00555140EA0202301922000 +B1320174526877N00555154EA0204401937000 +B1320244526855N00555142EA0205601955000 +B1320314526871N00555176EA0207401972000 +B1320384526877N00555159EA0208801990000 +B1320454526869N00555199EA0210302006000 +B1320524526878N00555177EA0212002022000 +B1320594526844N00555153EA0213902039000 +B1321064526847N00555192EA0216102057000 +B1321134526834N00555172EA0217702074000 +B1321204526847N00555209EA0220002091000 +B1321274526837N00555185EA0221502110000 +B1321344526818N00555237EA0223702128000 +B1321414526824N00555227EA0225102141000 +B1321484526802N00555268EA0227202156000 +B1321554526820N00555255EA0229202176000 +B1322024526792N00555273EA0230402196000 +B1322094526820N00555307EA0232602215000 +B1322164526803N00555276EA0234402230000 +B1322234526776N00555311EA0236002243000 +B1322304526800N00555312EA0237502262000 +B1322374526775N00555298EA0238402280000 +B1322444526781N00555354EA0240802297000 +B1322514526788N00555330EA0241602314000 +B1322584526762N00555366EA0243902332000 +B1323054526782N00555408EA0245402350000 +B1323124526814N00555387EA0246902367000 +B1323194526848N00555388EA0247902384000 +B1323264526886N00555384EA0250002402000 +B1323334526921N00555381EA0250502418000 +B1323404526958N00555377EA0251002432000 +B1323474526997N00555371EA0251502444000 +B1323544527036N00555375EA0251602455000 +B1324014527077N00555372EA0250902463000 +B1324084527120N00555368EA0249502466000 +B1324154527173N00555374EA0249102467000 +B1324234527226N00555379EA0248302464000 +B1324304527271N00555376EA0248502462000 +B1324374527315N00555381EA0248402460000 +B1324444527359N00555387EA0248702458000 +B1324514527399N00555387EA0249402458000 +B1324584527440N00555390EA0250102460000 +B1325054527483N00555385EA0249702462000 +B1325124527530N00555382EA0249602463000 +B1325194527579N00555375EA0249402464000 +B1325264527627N00555377EA0249302465000 +B1325334527674N00555397EA0249002465000 +B1325404527722N00555409EA0248502465000 +B1325474527773N00555413EA0247602463000 +B1325544527824N00555423EA0246802460000 +B1326014527875N00555435EA0245402455000 +B1326084527927N00555455EA0244502448000 +B1326154527976N00555480EA0243402440000 +B1326224528019N00555517EA0242602433000 +B1326294528062N00555554EA0241102427000 +B1326364528112N00555595EA0240102419000 +B1326434528159N00555643EA0238902410000 +B1326504528206N00555692EA0237502407000 +B1326574528254N00555744EA0236602395000 +B1327044528303N00555798EA0235602381000 +B1327114528354N00555854EA0234402372000 +B1327184528410N00555910EA0233102363000 +B1327254528463N00555960EA0231602350000 +B1327324528508N00556013EA0230502335000 +B1327394528552N00556052EA0229102322000 +B1327464528602N00556095EA0227902307000 +B1327534528652N00556140EA0227202293000 +B1328004528700N00556185EA0226502279000 +B1328074528748N00556229EA0225702267000 +B1328144528794N00556273EA0225002257000 +B1328214528837N00556327EA0224202246000 +B1328284528880N00556382EA0223602237000 +B1328354528925N00556432EA0222602229000 +B1328424528973N00556485EA0221702225000 +B1328494529015N00556531EA0221102218000 +B1328564529058N00556576EA0220402210000 +B1329034529099N00556624EA0219202201000 +B1329104529137N00556675EA0218202192000 +B1329174529171N00556732EA0216902182000 +B1329244529205N00556791EA0215602171000 +B1329314529239N00556844EA0214202160000 +B1329384529273N00556898EA0212902148000 +B1329454529307N00556951EA0211902136000 +B1329524529344N00556991EA0210702124000 +B1329594529384N00557030EA0209602114000 +B1330064529423N00557076EA0208802104000 +B1330134529463N00557126EA0207602093000 +B1330204529504N00557175EA0207002081000 +B1330284529550N00557226EA0206302070000 +B1330354529588N00557276EA0205602060000 +B1330424529626N00557327EA0204902052000 +B1330494529664N00557378EA0204102045000 +B1330564529701N00557425EA0203702036000 +B1331034529735N00557473EA0203002028000 +B1331104529771N00557521EA0202302020000 +B1331174529807N00557570EA0201502012000 +B1331244529839N00557622EA0200502003000 +B1331314529869N00557676EA0199601995000 +B1331384529899N00557726EA0198701986000 +B1331454529932N00557774EA0197801977000 +B1331524529966N00557822EA0196801968000 +B1331594530000N00557872EA0195901958000 +B1332064530032N00557924EA0195101948000 +B1332134530063N00557979EA0194101939000 +B1332204530095N00558033EA0193301930000 +B1332274530124N00558084EA0192601922000 +B1332344530156N00558129EA0191901915000 +B1332414530191N00558168EA0191001907000 +B1332484530226N00558213EA0190101900000 +B1332554530262N00558257EA0189601895000 +B1333024530296N00558302EA0189101887000 +B1333094530329N00558348EA0188501882000 +B1333164530361N00558393EA0187601875000 +B1333234530393N00558439EA0186801867000 +B1333304530425N00558486EA0185901859000 +B1333374530459N00558529EA0184901851000 +B1333444530493N00558571EA0183801843000 +B1333514530529N00558614EA0183001837000 +B1333584530565N00558657EA0182101828000 +B1334054530602N00558702EA0181201819000 +B1334124530637N00558744EA0180401809000 +B1334194530672N00558787EA0179701800000 +B1334264530705N00558832EA0179001790000 +B1334334530739N00558875EA0178101783000 +B1334404530773N00558918EA0177501776000 +B1334474530806N00558959EA0176701769000 +B1334544530839N00559000EA0175901763000 +B1335014530871N00559039EA0175101758000 +B1335084530902N00559082EA0174201750000 +B1335154530933N00559123EA0173101742000 +B1335224530963N00559169EA0172501733000 +B1335294530992N00559215EA0171901727000 +B1335364531017N00559261EA0171201724000 +B1335434531042N00559316EA0170501715000 +B1335504531066N00559371EA0170001706000 +B1335574531092N00559426EA0169201696000 +B1336044531118N00559478EA0168501688000 +B1336124531145N00559533EA0167801684000 +B1336194531174N00559583EA0167001677000 +B1336264531205N00559628EA0166001671000 +B1336334531239N00559671EA0164901666000 +B1336404531271N00559716EA0163601659000 +B1336474531304N00559762EA0162401655000 +B1336544531337N00559805EA0161101646000 +B1337014531369N00559844EA0160101633000 +B1337084531403N00559885EA0159001631000 +B1337154531435N00559920EA0157801616000 +B1337224531465N00559964EA0156601611000 +B1337294531492N00600011EA0155501600000 +B1337364531519N00600058EA0154601586000 +B1337434531547N00600106EA0153801570000 +B1337504531573N00600156EA0153201558000 +B1337574531600N00600207EA0152101549000 +B1338044531629N00600266EA0151201539000 +B1338114531656N00600324EA0150401526000 +B1338184531682N00600379EA0149601513000 +B1338254531702N00600432EA0148401500000 +B1338324531722N00600489EA0147101487000 +B1338394531744N00600547EA0145801473000 +B1338464531760N00600595EA0144301460000 +B1338534531779N00600645EA0143001447000 +B1339004531808N00600697EA0141901433000 +B1339074531833N00600746EA0140501419000 +B1339144531855N00600786EA0138801406000 +B1339214531871N00600837EA0138101393000 +B1339284531887N00600886EA0136301381000 +B1339354531912N00600927EA0134901368000 +B1339424531939N00600971EA0133401354000 +B1339494531961N00601019EA0132201340000 +B1339564531983N00601065EA0130601327000 +B1340034532006N00601116EA0129001313000 +B1340104532026N00601173EA0127901299000 +B1340174532040N00601239EA0128201287000 +B1340244532057N00601301EA0128701277000 +B1340314532067N00601374EA0129701271000 +B1340384532043N00601456EA0130701269000 +B1340454532007N00601499EA0130701268000 +B1340524531974N00601529EA0131201267000 +B1340594531965N00601506EA0130601268000 +B1341064531997N00601497EA0132301268000 +B1341134532014N00601488EA0132901270000 +B1341204531990N00601507EA0132801273000 +B1341274531987N00601528EA0134701273000 +B1341344531987N00601522EA0135501276000 +B1341414531997N00601577EA0135601283000 +B1341484532022N00601576EA0137701287000 +B1341554532041N00601569EA0139401291000 +B1342024532051N00601568EA0141001299000 +B1342104532064N00601571EA0142201310000 +B1342174532075N00601559EA0143401321000 +B1342244532093N00601555EA0143901337000 +B1342314532112N00601555EA0144601352000 +B1342384532133N00601555EA0143901364000 +B1342454532161N00601559EA0143501375000 +B1342524532189N00601556EA0143101379000 +B1342594532218N00601551EA0142701381000 +B1343064532248N00601547EA0142801383000 +B1343134532281N00601551EA0142201383000 +B1343204532315N00601556EA0142001383000 +B1343274532344N00601558EA0141601382000 +B1343344532377N00601562EA0141901380000 +B1343414532411N00601566EA0142401379000 +B1343484532443N00601584EA0143301380000 +B1343554532431N00601639EA0144301384000 +B1344024532422N00601618EA0145401390000 +B1344094532447N00601646EA0146301396000 +B1344164532425N00601698EA0146901404000 +B1344234532414N00601679EA0148501410000 +B1344304532445N00601710EA0148901422000 +B1344374532421N00601768EA0150401432000 +B1344444532404N00601755EA0151401439000 +B1344514532412N00601735EA0152401448000 +B1344584532443N00601765EA0152901459000 +B1345054532418N00601801EA0153201467000 +B1345124532441N00601805EA0154301474000 +B1345194532478N00601843EA0153301481000 +B1345264532519N00601887EA0153801486000 +B1345334532557N00601921EA0152201488000 +B1345404532590N00601969EA0152501489000 +B1345474532613N00602015EA0150901488000 +B1345544532639N00602061EA0149801484000 +B1346014532667N00602115EA0148501478000 +B1346084532697N00602166EA0146801469000 +B1346154532722N00602213EA0144601457000 +B1346224532749N00602274EA0142401443000 +B1346294532774N00602344EA0140101429000 +B1346364532799N00602417EA0138401413000 +B1346434532825N00602489EA0136801396000 +B1346504532842N00602556EA0137201382000 +B1346574532860N00602608EA0137001370000 +B1347044532872N00602659EA0136201359000 +B1347114532881N00602716EA0135201348000 +B1347184532885N00602780EA0134401338000 +B1347254532885N00602845EA0134101330000 +B1347324532890N00602906EA0133701323000 +B1347394532903N00602965EA0133401317000 +B1347474532930N00603017EA0133101310000 +B1347544532955N00603053EA0133301304000 +B1348014532978N00603085EA0132401300000 +B1348084533008N00603116EA0131801294000 +B1348154533034N00603133EA0133401290000 +B1348224533055N00603133EA0133401289000 +B1348294533084N00603124EA0132201287000 +B1348364533112N00603119EA0133801287000 +B1348434533133N00603110EA0134101288000 +B1348504533157N00603102EA0135201291000 +B1348574533176N00603101EA0136101295000 +B1349044533192N00603092EA0136801300000 +B1349114533212N00603087EA0137301307000 +B1349184533227N00603074EA0137201311000 +B1349254533201N00603089EA0137101314000 +B1349324533170N00603137EA0137601316000 +B1349394533143N00603131EA0137901320000 +B1349464533167N00603130EA0138201327000 +B1349534533191N00603125EA0138501333000 +B1350004533214N00603110EA0138101336000 +B1350074533242N00603098EA0138601338000 +B1350144533273N00603109EA0139701340000 +B1350214533290N00603092EA0140401342000 +B1350284533269N00603101EA0141301342000 +B1350354533280N00603123EA0141601346000 +B1350424533250N00603111EA0142301350000 +B1350494533263N00603144EA0142801354000 +B1350564533266N00603116EA0143201360000 +B1351034533239N00603134EA0143401365000 +B1351104533259N00603174EA0143801371000 +B1351174533269N00603152EA0144101376000 +B1351244533243N00603143EA0143801380000 +B1351314533243N00603197EA0144001382000 +B1351384533264N00603239EA0144001383000 +B1351454533287N00603284EA0145301385000 +B1351524533272N00603325EA0145901389000 +B1351594533265N00603313EA0146601392000 +B1352064533269N00603352EA0147301398000 +B1352134533244N00603332EA0148501405000 +B1352204533263N00603346EA0149801413000 +B1352274533247N00603391EA0150401423000 +B1352344533231N00603349EA0152201433000 +B1352414533237N00603326EA0152401443000 +B1352484533254N00603376EA0152101451000 +B1352554533283N00603428EA0153201458000 +B1353024533302N00603480EA0153401466000 +B1353094533320N00603534EA0153601472000 +B1353164533339N00603588EA0154301477000 +B1353234533359N00603645EA0155001483000 +B1353314533384N00603696EV0154701486000 +B1353384533405N00603735EV0155501486000 +B1353454533437N00603789EA0155101486000 +B1353524533481N00603813EA0155201489000 +B1353594533511N00603831EV0155701489000 +B1354064533554N00603846EA0155001490000 +B1354134533597N00603857EA0154401493000 +B1354204533644N00603862EA0154001495000 +B1354274533689N00603862EA0153501496000 +B1354344533735N00603860EA0153501496000 +B1354414533777N00603855EA0153801496000 +B1354484533819N00603848EA0155101497000 +B1354554533857N00603846EA0156301500000 +B1355024533892N00603837EA0157801505000 +B1355094533916N00603824EA0158801512000 +B1355164533897N00603822EA0161201515000 +B1355234533878N00603849EA0163301516000 +B1355304533869N00603843EA0165801521000 +B1355374533892N00603894EA0168001530000 +B1355444533866N00603912EA0170201551000 +B1355514533873N00603888EA0171901554000 +B1355584533887N00603939EA0173601557000 +B1356054533861N00603951EA0175401570000 +B1356124533895N00603963EA0175901579000 +B1356194533893N00603998EA0177101591000 +B1356264533877N00603974EA0177901613000 +B1356334533893N00603947EA0176601620000 +B1356404533926N00603941EA0175701641000 +B1356474533965N00603958EA0177201659000 +B1356544534006N00603966EA0178801666000 +B1357014534026N00603979EV0179301666000 +B1357084534048N00603978EA0180401679000 +B1357154534072N00603994EA0181301695000 +B1357224534108N00604019EA0181801712000 +B1357294534137N00604045EA0182401728000 +B1357364534162N00604063EA0183501738000 +B1357434534176N00604063EV0182801738000 +B1357504534228N00604082EA0181701747000 +B1357574534265N00604104EA0181401755000 +B1358044534301N00604125EA0180301760000 +B1358114534344N00604150EA0179601760000 +B1358184534385N00604170EA0178401759000 +B1358254534428N00604186EA0177001754000 +B1358324534472N00604207EA0175901752000 +B1358394534515N00604220EA0175701750000 +B1358464534559N00604238EA0175601744000 +B1358534534600N00604260EA0174301741000 +B1359004534637N00604291EA0173101737000 +B1359074534680N00604318EA0171901730000 +B1359144534724N00604349EA0170701719000 +B1359214534770N00604376EA0170101707000 +B1359284534815N00604397EA0168801695000 +B1359364534866N00604418EA0167901681000 +B1359434534909N00604437EA0167301669000 +B1359504534954N00604459EA0167401660000 +B1359574534998N00604477EA0167501653000 +B1400044535042N00604488EA0167201648000 +B1400114535082N00604501EA0166801643000 +B1400184535123N00604509EA0166401639000 +B1400254535160N00604506EA0166801635000 +B1400324535205N00604524EA0168101634000 +B1400394535246N00604555EA0170601637000 +B1400464535264N00604551EA0171701645000 +B1400534535241N00604548EA0173101651000 +B1401004535259N00604536EA0173001659000 +B1401074535292N00604564EA0174001666000 +B1401144535330N00604584EA0174901673000 +B1401214535364N00604596EA0175801682000 +B1401284535404N00604605EA0176301690000 +B1401354535445N00604620EA0176501697000 +B1401424535487N00604656EA0177101703000 +B1401494535481N00604711EA0177401710000 +B1401564535475N00604684EA0177401714000 +B1402034535506N00604658EA0178001720000 +B1402104535537N00604636EA0180001727000 +B1402174535559N00604665EA0181501736000 +B1402244535534N00604683EA0183201746000 +B1402314535540N00604654EA0185201757000 +B1402384535557N00604692EA0187201770000 +B1402454535547N00604684EA0189301784000 +B1402524535585N00604705EA0191801799000 +B1402594535565N00604742EA0194301818000 +B1403064535583N00604714EA0197001836000 +B1403134535607N00604749EA0198601855000 +B1403204535578N00604766EA0201401877000 +B1403274535594N00604733EA0203701893000 +B1403344535608N00604779EA0206601917000 +B1403414535591N00604770EA0209401943000 +B1403484535624N00604784EA0212501968000 +B1403554535595N00604827EA0214601995000 +B1404024535578N00604794EA0217302021000 +B1404094535610N00604800EA0220202047000 +B1404164535591N00604845EA0223202073000 +B1404234535595N00604806EA0225802101000 +B1404304535627N00604833EA0226702126000 +B1404374535614N00604894EA0229002152000 +B1404444535588N00604891EA0231502177000 +B1404514535618N00604884EA0233102200000 +B1404584535593N00604911EA0235502222000 +B1405054535583N00604872EA0237902245000 +B1405124535612N00604877EA0238702262000 +B1405194535596N00604932EA0240602282000 +B1405264535564N00604911EA0242302302000 +B1405344535552N00604852EA0243402325000 +B1405414535586N00604818EA0244102344000 +B1405484535624N00604804EA0246002362000 +B1405554535662N00604796EA0246002379000 +B1406024535704N00604815EA0244402389000 +B1406094535744N00604829EA0243602395000 +B1406164535787N00604850EA0241602394000 +B1406234535831N00604865EA0241302391000 +B1406304535869N00604886EA0241002388000 +B1406374535907N00604910EA0239602384000 +B1406444535943N00604938EA0238002378000 +B1406514535984N00604969EA0236102369000 +B1406584536027N00604995EA0233602357000 +B1407054536076N00605025EA0230702343000 +B1407124536127N00605060EA0228402326000 +B1407194536180N00605099EA0227202308000 +B1407264536217N00605127EA0227902294000 +B1407334536259N00605155EA0227902283000 +B1407404536311N00605183EA0227902274000 +B1407474536359N00605207EA0228502268000 +B1407544536400N00605231EA0229202264000 +B1408014536439N00605258EA0230302262000 +B1408084536471N00605280EA0231802264000 +B1408154536508N00605311EA0232402269000 +B1408224536552N00605338EA0232002274000 +B1408294536607N00605365EA0230602277000 +B1408364536661N00605395EA0228702277000 +B1408434536711N00605422EA0227502273000 +B1408504536766N00605452EA0225802265000 +B1408574536816N00605495EA0224102255000 +B1409044536861N00605540EA0223402244000 +B1409114536905N00605583EA0221702233000 +B1409184536959N00605634EA0220202219000 +B1409254537018N00605675EA0219102205000 +B1409324537067N00605708EA0217802193000 +B1409394537125N00605752EA0217202182000 +B1409464537177N00605801EA0216102170000 +B1409534537224N00605844EA0216102160000 +B1410004537262N00605874EA0215702152000 +B1410074537300N00605899EA0215602146000 +B1410144537339N00605920EA0215902141000 +B1410214537374N00605935EA0217202138000 +B1410284537402N00605946EA0217902138000 +B1410354537436N00605967EA0218902140000 +B1410424537475N00605979EA0218402142000 +B1410494537514N00605983EA0218202145000 +B1410564537551N00606010EA0217802146000 +B1411034537581N00606040EA0218102145000 +B1411104537610N00606064EA0218602146000 +B1411174537636N00606090EA0219302148000 +B1411254537666N00606118EA0219402152000 +B1411324537699N00606150EA0219302154000 +B1411394537735N00606176EA0219002154000 +B1411464537768N00606194EA0218402154000 +B1411534537807N00606215EA0217702152000 +B1412004537844N00606244EA0216602148000 +B1412074537879N00606278EA0215902142000 +B1412144537915N00606284EA0216602138000 +B1412214537947N00606269EA0216502136000 +B1412284537988N00606261EA0215402132000 +B1412354538029N00606263EA0213802127000 +B1412424538069N00606272EA0212502120000 +B1412494538107N00606282EA0211102112000 +B1412564538149N00606297EA0209602102000 +B1413034538192N00606306EA0208202092000 +B1413104538237N00606321EA0206702080000 +B1413174538279N00606338EA0205702072000 +B1413244538322N00606356EA0204802062000 +B1413314538363N00606384EA0204202052000 +B1413384538406N00606406EA0203102042000 +B1413454538446N00606431EA0202502032000 +B1413524538485N00606450EA0201302022000 +B1413594538526N00606465EA0200202011000 +B1414064538563N00606489EA0198902000000 +B1414134538601N00606517EA0197501988000 +B1414204538638N00606543EA0196301975000 +B1414274538673N00606571EA0194701962000 +B1414344538712N00606596EA0193401949000 +B1414414538748N00606621EA0192401936000 +B1414484538778N00606657EA0191601924000 +B1414554538808N00606687EA0192101913000 +B1415024538834N00606720EA0192301906000 +B1415094538857N00606755EA0191601901000 +B1415164538894N00606754EA0191401897000 +B1415234538929N00606758EA0191301893000 +B1415304538963N00606764EA0190701889000 +B1415374538999N00606779EA0190201886000 +B1415444539040N00606787EA0189701882000 +B1415514539080N00606791EA0188901877000 +B1415584539114N00606795EV0188101872000 +B1416054539150N00606796EV0187001866000 +B1416124539186N00606785EA0185801855000 +B1416194539219N00606784EA0184501845000 +B1416264539249N00606777EA0183201836000 +B1416334539280N00606762EA0181501825000 +B1416404539314N00606750EA0180101814000 +B1416474539344N00606744EA0178801802000 +B1416544539375N00606758EA0177701790000 +B1417014539408N00606781EA0177101778000 +B1417084539438N00606809EA0177101768000 +B1417154539467N00606829EA0176301759000 +B1417234539503N00606826EA0176001750000 +B1417304539529N00606845EA0174901743000 +B1417374539547N00606893EA0174701736000 +B1417444539561N00606939EA0174901730000 +B1417514539574N00606991EA0173801724000 +B1417584539587N00607049EA0173701718000 +B1418054539601N00607096EA0173401712000 +B1418124539624N00607138EA0173401708000 +B1418194539642N00607188EA0173001705000 +B1418264539664N00607237EA0172901704000 +B1418334539685N00607285EA0173101702000 +B1418404539706N00607332EA0173201701000 +B1418474539734N00607374EA0173601700000 +B1418544539763N00607419EA0173201700000 +B1419014539791N00607462EA0171201699000 +B1419084539828N00607530EA0169001692000 +B1419154539868N00607599EA0167101681000 +B1419224539904N00607668EA0165601669000 +B1419294539942N00607732EA0164101656000 +B1419364539980N00607792EA0162601643000 +B1419434540018N00607849EA0160801629000 +B1419504540053N00607903EA0159401613000 +B1419574540084N00607964EA0157801598000 +B1420044540118N00608026EA0156001582000 +B1420114540152N00608096EA0155201567000 +B1420184540185N00608154EA0153801553000 +B1420254540219N00608214EA0152701539000 +B1420324540255N00608279EA0152401526000 +B1420394540290N00608338EA0151701515000 +B1420464540321N00608396EA0152801507000 +B1420534540338N00608442EA0153601503000 +B1421004540306N00608489EA0153501501000 +B1421074540316N00608468EA0154201500000 +B1421144540341N00608499EA0154601500000 +B1421214540361N00608522EA0155001502000 +B1421284540387N00608551EA0155201503000 +B1421354540414N00608584EA0155801506000 +B1421424540442N00608613EA0155001508000 +B1421494540469N00608653EA0153901508000 +B1421564540494N00608694EA0152901505000 +B1422034540521N00608729EA0152101500000 +B1422104540550N00608770EA0150301494000 +B1422174540583N00608817EA0148401484000 +B1422244540613N00608861EA0147001475000 +B1422314540644N00608910EA0146101464000 +B1422384540673N00608959EA0145301453000 +B1422454540702N00609006EA0144501441000 +B1422524540726N00609046EA0144501431000 +B1422594540751N00609072EA0143401422000 +B1423064540783N00609106EA0142901413000 +B1423134540812N00609137EA0141801405000 +B1423214540845N00609170EA0141501397000 +B1423284540877N00609196EA0141601391000 +B1423354540905N00609214EA0141201386000 +B1423424540934N00609232EA0142901383000 +B1423494540957N00609241EA0143901382000 +B1423564540975N00609265EA0145501385000 +B1424034540997N00609276EA0144901389000 +B1424104541027N00609285EA0143801391000 +B1424174541057N00609291EA0143301391000 +B1424244541087N00609303EA0142601390000 +B1424314541110N00609309EA0143801390000 +B1424384541132N00609320EA0143801391000 +B1424454541154N00609322EA0143201392000 +B1424524541179N00609327EA0143001392000 +B1424594541210N00609334EA0142901389000 +B1425064541232N00609337EA0144501389000 +B1425134541249N00609353EA0145101391000 +B1425204541274N00609363EA0145101394000 +B1425274541302N00609380EA0145201398000 +B1425344541332N00609399EA0146401402000 +B1425414541364N00609412EA0146701406000 +B1425484541395N00609413EA0147901411000 +B1425554541410N00609455EA0148801419000 +B1426024541380N00609511EA0149001423000 +B1426094541392N00609482EA0150501430000 +B1426164541402N00609465EA0151001435000 +B1426234541385N00609469EA0152301437000 +B1426304541404N00609473EA0151701442000 +B1426374541438N00609467EA0152001449000 +B1426444541472N00609466EA0152601456000 +B1426514541512N00609473EA0153201461000 +B1426584541548N00609478EA0154101468000 +B1427054541583N00609487EA0156101473000 +B1427124541588N00609533EA0157701483000 +B1427194541578N00609523EA0160001486000 +B1427264541599N00609564EA0162101491000 +B1427334541590N00609549EA0164701502000 +B1427404541623N00609549EA0167401523000 +B1427474541602N00609585EA0169901547000 +B1427544541591N00609560EA0173501567000 +B1428014541611N00609589EA0176101597000 +B1428084541583N00609597EA0179001622000 +B1428154541572N00609580EA0182401644000 +B1428224541572N00609625EA0185801666000 +B1428294541558N00609602EA0189101693000 +B1428364541573N00609628EA0191901725000 +B1428434541540N00609673EA0194801749000 +B1428504541518N00609640EA0198101779000 +B1428584541529N00609654EV0201001808000 +B1429054541496N00609675EA0204101835000 +B1429124541499N00609648EA0207201862000 +B1429194541505N00609684EA0210501896000 +B1429264541466N00609675EA0214001919000 +B1429334541468N00609653EA0216801936000 +B1429404541454N00609706EA0220301975000 +B1429474541414N00609688EA0223402018000 +B1429544541425N00609658EA0225802052000 +B1430014541431N00609696EA0229102095000 +B1430084541393N00609725EA0232502136000 +B1430154541368N00609689EA0234702169000 +B1430224541386N00609690EA0236502191000 +B1430294541395N00609723EA0239802219000 +B1430364541363N00609760EA0242802256000 +B1430434541340N00609725EA0244902289000 +B1430504541353N00609740EA0247802317000 +B1430574541321N00609768EA0250702352000 +B1431044541315N00609720EA0253402373000 +B1431114541333N00609694EA0256202404000 +B1431184541351N00609670EA0259502434000 +B1431254541372N00609662EA0262702462000 +B1431324541390N00609655EA0265902481000 +B1431394541409N00609638EA0268102516000 +B1431464541431N00609617EA0269702553000 +B1431534541459N00609606EA0271102582000 +B1432004541484N00609591EA0272302607000 +B1432074541513N00609570EA0272502628000 +B1432144541540N00609538EA0272002644000 +B1432214541564N00609500EA0270902655000 +B1432284541591N00609482EA0269602661000 +B1432354541628N00609476EA0268402662000 +B1432424541673N00609467EA0266202660000 +B1432494541725N00609457EA0264802653000 +B1432564541781N00609445EA0262802644000 +B1433034541833N00609430EA0261702633000 +B1433104541885N00609423EA0260602622000 +B1433174541930N00609420EA0260202612000 +B1433244541979N00609414EA0259502602000 +B1433314542030N00609409EA0259102593000 +B1433384542065N00609409EA0258002586000 +B1433454542115N00609409EA0256702577000 +B1433524542164N00609396EA0257302569000 +B1433594542205N00609388EA0257702563000 +B1434064542247N00609386EA0257202559000 +B1434134542287N00609390EA0257602556000 +B1434204542318N00609389EA0256302554000 +B1434274542361N00609389EA0255302550000 +B1434344542411N00609396EA0253702546000 +B1434414542465N00609406EA0252902543000 +B1434484542514N00609405EA0251002533000 +B1434564542576N00609400EA0250102520000 +B1435034542631N00609391EA0249502508000 +B1435104542678N00609384EA0248302497000 +B1435174542730N00609388EA0247102485000 +B1435244542774N00609387EA0246002473000 +B1435314542819N00609383EA0244402460000 +B1435384542863N00609390EA0242702446000 +B1435454542913N00609392EA0240802431000 +B1435524542966N00609402EA0239202416000 +B1435594543018N00609412EA0237702402000 +B1436064543066N00609421EA0236602389000 +B1436134543115N00609422EA0235202377000 +B1436204543157N00609424EA0234102365000 +B1436274543201N00609423EA0232002352000 +B1436344543248N00609424EA0230502338000 +B1436414543296N00609427EA0229302324000 +B1436484543340N00609435EA0227302309000 +B1436554543390N00609445EA0227402294000 +B1437024543440N00609451EA0227602282000 +B1437094543491N00609458EA0227002272000 +B1437164543534N00609464EA0226302264000 +B1437234543579N00609475EA0227502257000 +B1437304543616N00609488EA0226502254000 +B1437374543656N00609494EA0226802251000 +B1437444543696N00609500EA0225802247000 +B1437514543745N00609511EA0224802242000 +B1437584543796N00609523EA0223402235000 +B1438054543848N00609534EA0222202226000 +B1438124543903N00609547EA0220402216000 +B1438194543953N00609557EA0220002207000 +B1438264544001N00609565EA0219802198000 +B1438334544048N00609581EA0219802191000 +B1438404544086N00609589EA0221702188000 +B1438474544114N00609583EA0221802188000 +B1438544544146N00609579EA0222102189000 +B1439014544176N00609579EA0222002191000 +B1439084544210N00609580EA0221302192000 +B1439154544252N00609574EA0221902190000 +B1439224544282N00609572EA0221502189000 +B1439294544316N00609568EA0221702190000 +B1439364544353N00609565EA0221102190000 +B1439434544390N00609564EA0220602190000 +B1439504544428N00609570EA0219902187000 +B1439574544473N00609584EA0218502183000 +B1440044544528N00609597EA0217802176000 +B1440114544579N00609614EA0217502170000 +B1440184544633N00609628EA0217702164000 +B1440254544660N00609639EA0218602161000 +B1440324544692N00609650EA0218902161000 +B1440394544726N00609660EA0220102163000 +B1440464544756N00609662EA0221402167000 +B1440544544785N00609657EA0220702172000 +B1441014544820N00609643EA0219902174000 +B1441084544863N00609638EA0219002173000 +B1441154544893N00609638EA0221702174000 +B1441224544907N00609632EA0221702176000 +B1441294544929N00609628EA0223102181000 +B1441364544951N00609603EA0224702188000 +B1441434544925N00609560EA0224102196000 +B1441504544903N00609607EA0225102200000 +B1441574544903N00609656EA0227402207000 +B1442044544923N00609640EA0228002216000 +B1442114544880N00609654EA0230202223000 +B1442184544868N00609689EA0231902232000 +B1442254544865N00609655EA0233702245000 +B1442324544835N00609677EA0235602258000 +B1442394544847N00609676EA0237402263000 +B1442464544847N00609676EV0239202263000 +B1442534544865N00609614EA0240402279000 +B1443004544822N00609612EA0242102301000 +B1443074544808N00609648EV0243402316000 +B1443144544812N00609658EV0244702324000 +B1443214544773N00609640EA0246002339000 +B1443284544773N00609679EA0247702358000 +B1443354544778N00609668EV0248602364000 +B1443424544778N00609649EA0250402371000 +B1443494544789N00609660EA0251802388000 +B1443564544755N00609664EA0253002405000 +B1444034544767N00609691EA0253502426000 +B1444104544797N00609695EA0252302444000 +B1444174544836N00609688EA0250302454000 +B1444244544889N00609682EA0248402456000 +B1444314544932N00609680EA0247202455000 +B1444384544982N00609690EA0246202450000 +B1444454545028N00609702EA0247102446000 +B1444524545061N00609708EA0247502444000 +B1444594545101N00609719EA0247502444000 +B1445064545137N00609729EA0248502445000 +B1445134545176N00609733EA0248402449000 +B1445204545212N00609737EA0248402451000 +B1445274545243N00609734EA0247702452000 +B1445344545288N00609726EA0246402450000 +B1445414545332N00609719EA0245402446000 +B1445484545380N00609718EA0243902439000 +B1445554545421N00609711EA0242702432000 +B1446024545467N00609706EA0241402422000 +B1446094545507N00609706EA0240402412000 +B1446164545546N00609704EA0238202401000 +B1446234545596N00609702EA0237102388000 +B1446304545642N00609699EA0235702375000 +B1446374545692N00609707EA0235102363000 +B1446444545739N00609717EA0234602353000 +B1446524545790N00609724EA0235102342000 +B1446594545814N00609718EA0236602339000 +B1447064545824N00609743EA0237802340000 +B1447134545787N00609738EA0239102344000 +B1447204545799N00609729EA0240102348000 +B1447274545767N00609755EA0241302355000 +B1447344545775N00609721EA0242602362000 +B1447414545794N00609751EA0244202372000 +B1447484545761N00609772EA0245202382000 +B1447554545755N00609734EA0247002391000 +B1448024545777N00609766EA0248802403000 +B1448094545752N00609798EA0249802418000 +B1448164545751N00609756EA0251202431000 +B1448234545790N00609771EA0252502445000 +B1448304545831N00609792EA0253202460000 +B1448374545868N00609820EA0253402472000 +B1448444545904N00609855EA0252902481000 +B1448514545944N00609900EA0251002486000 +B1448584545997N00609953EA0250702484000 +B1449054546037N00609980EA0250502484000 +B1449124546078N00609999EA0249702482000 +B1449194546117N00610027EA0248502479000 +B1449264546168N00610060EA0247802473000 +B1449334546204N00610096EA0248402468000 +B1449404546240N00610139EA0249102466000 +B1449474546275N00610182EA0248302466000 +B1449544546321N00610229EA0246202461000 +B1450014546366N00610272EA0243302453000 +B1450084546415N00610325EA0242302440000 +B1450154546451N00610376EA0241502429000 +B1450224546486N00610440EA0240302418000 +B1450294546516N00610517EA0239602408000 +B1450364546545N00610594EA0238502397000 +B1450434546581N00610663EA0237702387000 +B1450504546617N00610725EA0236502379000 +B1450574546651N00610789EA0236002370000 +B1451044546679N00610843EA0234202361000 +B1451114546706N00610899EA0231902351000 +B1451184546728N00610954EA0231002339000 +B1451254546750N00611009EA0231002327000 +B1451324546770N00611054EA0231102317000 +B1451394546793N00611097EA0231502311000 +B1451464546821N00611137EA0231802306000 +B1451534546852N00611180EA0231102303000 +B1452004546889N00611230EA0230402299000 +B1452074546928N00611279EA0229002294000 +B1452144546973N00611323EA0227502288000 +B1452214547021N00611372EA0227902280000 +B1452284547057N00611405EA0226502272000 +B1452354547097N00611444EA0225302265000 +B1452424547140N00611487EA0223402257000 +B1452504547195N00611543EA0221302244000 +B1452574547243N00611600EA0219502231000 +B1453044547287N00611652EA0218302218000 +B1453114547330N00611694EA0216702203000 +B1453184547377N00611733EA0215602186000 +B1453254547416N00611773EA0215802172000 +B1453324547449N00611806EA0215002160000 +B1453394547476N00611848EA0214002150000 +B1453464547501N00611880EV0213402143000 +B1453534547531N00611923EA0212902143000 +B1454004547550N00611975EA0211802136000 +B1454074547575N00612022EA0211102128000 +B1454144547597N00612050EV0209702125000 +B1454214547631N00612094EA0208702114000 +B1454284547662N00612133EA0207702106000 +B1454354547694N00612174EA0206902094000 +B1454424547725N00612219EA0206302083000 +B1454494547754N00612266EA0206002072000 +B1454564547783N00612308EA0205502063000 +B1455034547809N00612350EA0204902055000 +B1455104547836N00612388EA0204102049000 +B1455174547865N00612415EA0203402046000 +B1455244547893N00612457EA0202502041000 +B1455314547916N00612513EA0200802033000 +B1455384547946N00612569EA0199402024000 +B1455454547976N00612617EA0198202021000 +B1455524548005N00612673EA0196802010000 +B1455594548028N00612723EA0195402010000 +B1456064548055N00612778EA0193602010000 +B1456134548087N00612834EA0192402001000 +B1456204548096N00612849EV0191402001000 +B1456274548141N00612931EA0190401995000 +B1456344548163N00612981EA0189501982000 +B1456414548180N00613042EA0188801967000 +B1456484548199N00613102EA0187401945000 +B1456554548226N00613174EA0186301922000 +B1457024548256N00613241EA0185401900000 +B1457094548284N00613308EA0184201880000 +B1457164548313N00613378EA0182901862000 +B1457234548343N00613451EA0181601845000 +B1457304548375N00613517EA0179901828000 +B1457374548406N00613584EA0178101811000 +B1457444548437N00613650EA0177001795000 +B1457514548464N00613716EA0174801778000 +B1457584548491N00613783EA0173501762000 +B1458054548514N00613845EA0172201747000 +B1458124548534N00613915EA0171001731000 +B1458194548560N00613977EA0169901717000 +B1458264548589N00614037EA0168801702000 +B1458334548616N00614097EA0167701689000 +B1458414548651N00614168EA0166301674000 +B1458484548681N00614232EA0165101661000 +B1458554548713N00614296EA0163301648000 +B1459024548746N00614362EA0162301634000 +B1459094548775N00614430EA0161101621000 +B1459164548801N00614499EA0160201609000 +B1459234548831N00614561EA0159201598000 +B1459304548863N00614623EA0158401587000 +B1459374548897N00614688EA0157301577000 +B1459444548928N00614757EA0155901565000 +B1459514548948N00614817EA0157401556000 +B1459584548963N00614877EA0159601552000 +B1500054548978N00614932EA0162601555000 +B1500124548974N00614923EA0165601564000 +B1500194548953N00614985EA0169101577000 +B1500264548941N00614973EA0172301595000 +B1500334548919N00615034EA0175701616000 +B1500404548931N00615039EA0178901635000 +B1500474548905N00615077EA0182701663000 +B1500544548915N00615069EA0186001686000 +B1501014548875N00615091EA0189701719000 +B1501084548886N00615089EA0192701745000 +B1501154548858N00615129EA0195901778000 +B1501224548849N00615098EA0199501808000 +B1501294548819N00615136EA0202001840000 +B1501364548814N00615097EA0204701869000 +B1501434548771N00615104EA0205801902000 +B1501504548772N00615142EA0208001926000 +B1501574548787N00615153EA0209901946000 +B1502044548804N00615154EA0212001969000 +B1502114548823N00615160EA0213601997000 +B1502184548838N00615168EA0213902018000 +B1502254548862N00615163EA0214602046000 +B1502324548893N00615153EA0214402065000 +B1502394548919N00615159EA0213202077000 +B1502464548951N00615169EA0213002084000 +B1502534548982N00615180EA0212002088000 +B1503004549019N00615197EA0210902088000 +B1503074549060N00615219EA0210102085000 +B1503144549095N00615239EA0209102082000 +B1503214549143N00615263EA0207902076000 +B1503284549191N00615287EA0207302070000 +B1503354549243N00615307EA0206702064000 +B1503424549292N00615319EA0205902057000 +B1503494549338N00615337EA0205102049000 +B1503564549380N00615353EA0204502042000 +B1504034549429N00615362EA0203702034000 +B1504104549472N00615372EA0202902026000 +B1504174549514N00615384EA0201402018000 +B1504244549558N00615398EA0200402010000 +B1504314549602N00615408EA0198902000000 +B1504384549648N00615418EA0197001989000 +B1504464549702N00615438EA0197201976000 +B1504534549746N00615453EA0197401967000 +B1505004549783N00615466EA0198101962000 +B1505074549819N00615475EA0199201960000 +B1505144549851N00615485EA0198701959000 +B1505214549890N00615492EA0197301956000 +B1505284549932N00615497EA0196501951000 +B1505354549974N00615498EA0196301947000 +B1505424550020N00615500EA0196501944000 +B1505494550069N00615497EA0196601941000 +B1505564550113N00615495EA0197501940000 +B1506034550151N00615492EA0197001941000 +B1506104550189N00615491EA0196801941000 +B1506174550230N00615483EA0196001940000 +B1506244550268N00615480EA0194401937000 +B1506314550304N00615476EA0194201933000 +B1506384550337N00615475EA0195001929000 +B1506454550359N00615478EA0195601928000 +B1506524550380N00615480EA0196901927000 +B1506594550404N00615475EA0197401929000 +B1507064550428N00615468EA0198601933000 +B1507134550450N00615465EA0199501939000 +B1507204550472N00615457EA0200601945000 +B1507274550491N00615447EA0201201950000 +B1507344550512N00615447EA0202301956000 +B1507414550532N00615443EA0203201963000 +B1507484550548N00615437EV0204501969000 +B1507554550564N00615427EA0204701973000 +B1508024550586N00615424EA0205401981000 +B1508094550605N00615412EA0206701988000 +B1508164550627N00615408EA0207801997000 +B1508234550649N00615401EA0208602006000 +B1508304550672N00615389EA0209202015000 +B1508374550697N00615384EA0209902025000 +B1508444550724N00615376EA0210302035000 +B1508514550744N00615361EA0211802044000 +B1508584550768N00615366EA0212002053000 +B1509054550802N00615378EA0212002062000 +B1509124550833N00615372EA0213202069000 +B1509194550863N00615364EA0214402078000 +B1509264550877N00615420EA0215102086000 +B1509334550847N00615443EA0215602094000 +B1509404550843N00615412EA0217002102000 +B1509474550834N00615380EA0218002112000 +B1509544550867N00615410EA0219202121000 +B1510014550844N00615465EA0220502131000 +B1510084550836N00615445EA0221402140000 +B1510154550868N00615475EA0222202151000 +B1510224550849N00615536EA0223102161000 +B1510294550812N00615538EA0224102172000 +B1510374550765N00615551EA0224802182000 +B1510444550725N00615557EA0225802191000 +B1510514550691N00615557EA0227002201000 +B1510584550673N00615536EA0229302213000 +B1511054550702N00615536EA0231602225000 +B1511124550687N00615591EA0233302240000 +B1511194550664N00615577EA0235402253000 +B1511264550696N00615586EA0237302269000 +B1511334550686N00615647EA0239002287000 +B1511404550660N00615637EA0240302302000 +B1511474550692N00615637EA0241902319000 +B1511544550697N00615705EA0242602335000 +B1512014550672N00615706EA0243102349000 +B1512084550677N00615680EA0243702357000 +B1512154550694N00615651EA0244302370000 +B1512224550718N00615619EA0246002383000 +B1512294550755N00615652EA0248502394000 +B1512364550729N00615666EA0250602407000 +B1512434550759N00615642EA0253802425000 +B1512504550792N00615680EA0257102447000 +B1512574550769N00615693EA0259602470000 +B1513044550793N00615660EA0262702495000 +B1513114550829N00615679EA0265702522000 +B1513184550819N00615728EA0268402549000 +B1513254550821N00615700EA0270902576000 +B1513324550859N00615704EA0272602603000 +B1513394550893N00615719EA0273402627000 +B1513464550932N00615736EA0273102646000 +B1513534550973N00615754EA0272502660000 +B1514004551006N00615798EA0270702669000 +B1514074551026N00615846EA0269202672000 +B1514144551047N00615904EA0268302671000 +B1514214551063N00615964EA0267802668000 +B1514284551080N00616027EA0267002665000 +B1514354551101N00616099EA0265302659000 +B1514424551130N00616173EA0264002651000 +B1514494551158N00616246EA0262402641000 +B1514564551184N00616332EA0260702628000 +B1515034551214N00616419EA0259302614000 +B1515104551245N00616500EA0258102601000 +B1515174551276N00616575EA0257502588000 +B1515244551300N00616635EA0256902577000 +B1515314551330N00616695EA0257102568000 +B1515384551359N00616763EA0256602561000 +B1515454551389N00616830EA0256202556000 +B1515524551420N00616888EA0254702549000 +B1515594551457N00616959EA0254002541000 +B1516064551496N00617023EA0253202533000 +B1516134551545N00617076EA0252602526000 +B1516214551604N00617139EA0252002517000 +B1516284551656N00617195EA0251602510000 +B1516354551705N00617247EA0250702503000 +B1516424551751N00617299EA0250502497000 +B1516494551790N00617349EA0249902492000 +B1516564551819N00617413EA0249702487000 +B1517034551841N00617478EA0249602484000 +B1517104551859N00617545EA0249302481000 +B1517174551880N00617626EA0248202476000 +B1517244551897N00617708EA0247502471000 +B1517314551915N00617787EA0247202466000 +B1517384551927N00617872EA0246302460000 +B1517454551941N00617946EA0245602453000 +B1517524551959N00618026EA0244402445000 +B1517594551981N00618112EA0243102436000 +B1518064552000N00618201EA0241602426000 +B1518134552022N00618285EA0240302415000 +B1518204552041N00618370EA0239302404000 +B1518274552062N00618448EA0238402393000 +B1518344552084N00618520EA0237302383000 +B1518414552113N00618576EA0235702372000 +B1518484552136N00618636EA0235002361000 +B1518554552147N00618705EA0234602350000 +B1519024552160N00618772EA0233802341000 +B1519094552176N00618840EA0232702332000 +B1519164552193N00618913EA0230802322000 +B1519234552214N00619002EA0230002311000 +B1519304552234N00619086EA0228602299000 +B1519374552251N00619168EA0226902288000 +B1519444552271N00619254EA0225802274000 +B1519514552289N00619334EA0224402261000 +B1519584552309N00619417EA0223102247000 +B1520054552330N00619500EA0222302234000 +B1520124552348N00619584EA0221002221000 +B1520194552361N00619669EA0220102212000 +B1520264552375N00619756EA0219502200000 +B1520334552392N00619839EA0218602190000 +B1520404552411N00619919EA0217702180000 +B1520474552426N00620000EA0216602170000 +B1520544552441N00620085EA0215802159000 +B1521014552459N00620171EA0214802149000 +B1521084552481N00620253EA0213602139000 +B1521154552503N00620336EA0212702129000 +B1521224552525N00620418EA0211502118000 +B1521294552545N00620503EA0210302108000 +B1521364552570N00620583EA0208902096000 +B1521434552597N00620667EA0208002085000 +B1521504552620N00620749EA0207202078000 +B1521574552639N00620835EA0206102068000 +B1522054552663N00620929EA0205002059000 +B1522124552678N00621014EA0203802050000 +B1522194552685N00621106EA0202402040000 +B1522264552699N00621197EA0201202028000 +B1522334552715N00621285EA0199802017000 +B1522404552731N00621369EA0199002005000 +B1522474552748N00621451EA0197901993000 +B1522544552765N00621524EA0196901980000 +B1523014552782N00621594EA0195801967000 +B1523084552798N00621659EA0194601955000 +B1523154552814N00621722EA0193701943000 +B1523224552833N00621788EA0192601932000 +B1523294552853N00621859EA0191901921000 +B1523364552871N00621933EA0191001911000 +B1523434552891N00622004EA0190501902000 +B1523504552910N00622068EA0189801893000 +B1523574552930N00622126EA0189701886000 +B1524044552949N00622188EA0188801879000 +B1524114552966N00622252EA0187901872000 +B1524184552983N00622314EA0187001864000 +B1524254553005N00622377EA0186201856000 +B1524324553025N00622445EA0186301848000 +B1524394553035N00622508EA0186301842000 +B1524464553041N00622580EA0188101839000 +B1524534553028N00622634EA0189601841000 +B1525004552988N00622602EA0191501842000 +B1525074552985N00622589EV0193401843000 +B1525144552988N00622610EA0194501843000 +B1525214552977N00622603EA0196701846000 +B1525284553002N00622595EA0198401848000 +B1525354553014N00622642EA0199601856000 +B1525424552975N00622615EA0202301861000 +B1525494552999N00622621EA0201401875000 +B1525564552995N00622686EA0203601896000 +B1526034552947N00622702EA0206001910000 +B1526104552948N00622663EA0207801924000 +B1526174552953N00622689EA0209001943000 +B1526244552919N00622680EA0210401968000 +B1526314552932N00622645EA0211001993000 +B1526384552947N00622683EA0211402013000 +B1526454552945N00622746EA0212202031000 +B1526524552955N00622789EA0214902046000 +B1526594552932N00622820EA0217102062000 +B1527064552912N00622810EV0218702063000 +B1527134552934N00622816EV0220602066000 +B1527204552939N00622839EV0222302066000 +B1527274552942N00622837EA0223602067000 +B1527344552950N00622855EA0224502078000 +B1527414552919N00622860EA0225802083000 +B1527494552939N00622819EA0226402089000 +B1527564552946N00622834EA0228002090000 +B1528034552907N00622845EA0227902096000 +B1528104552914N00622805EA0227602098000 +B1528174552907N00622879EA0228502116000 +B1528244552894N00622947EA0231502144000 +B1528314552862N00622970EV0233602144000 +B1528384552848N00622974EA0235502155000 +B1528454552842N00623042EA0239202186000 +B1528524552807N00623049EA0241702218000 +B1528594552824N00623030EA0245102255000 +B1529064552824N00623088EV0248502277000 +B1529134552784N00623096EA0250202315000 +B1529204552771N00623052EA0252002350000 +B1529274552793N00623050EA0254502384000 +B1529344552802N00623099EA0257402416000 +B1529414552814N00623135EA0259102448000 +B1529484552829N00623186EA0259902475000 +B1529554552840N00623242EA0261602500000 +B1530024552860N00623301EA0263302518000 +B1530094552870N00623358EA0265402539000 +B1530164552888N00623412EA0267902561000 +B1530234552907N00623472EA0269602582000 +B1530304552917N00623536EA0270902599000 +B1530374552920N00623596EA0270602617000 +B1530444552927N00623657EA0268902629000 +B1530514552942N00623731EA0267402635000 +B1530584552957N00623793EA0266602638000 +B1531054552977N00623866EA0265302637000 +B1531124553002N00623945EA0264202633000 +B1531194553029N00624019EA0262902627000 +B1531264553051N00624093EA0261902621000 +B1531334553078N00624171EA0260402612000 +B1531404553104N00624257EA0259202602000 +B1531474553129N00624340EA0258702594000 +B1531544553150N00624421EA0258102587000 +B1532014553174N00624494EA0256602578000 +B1532084553199N00624567EA0255502568000 +B1532154553221N00624640EA0254202558000 +B1532224553242N00624715EA0252802547000 +B1532294553263N00624791EA0251802535000 +B1532364553282N00624867EA0250702524000 +B1532434553300N00624946EA0249502512000 +B1532504553319N00625026EA0248302500000 +B1532574553338N00625104EA0247302488000 +B1533044553358N00625182EA0246202476000 +B1533114553375N00625262EA0245302465000 +B1533184553392N00625337EA0243902454000 +B1533254553412N00625412EA0242802442000 +B1533324553435N00625484EA0241402430000 +B1533404553457N00625568EA0240302418000 +B1533474553475N00625644EA0239402407000 +B1533544553484N00625720EA0238302396000 +B1534014553492N00625797EA0237302385000 +B1534084553502N00625873EA0236502375000 +B1534154553508N00625953EA0235502364000 +B1534224553511N00626033EA0234502354000 +B1534294553521N00626112EA0233302343000 +B1534364553528N00626191EA0232202333000 +B1534434553536N00626271EA0231002322000 +B1534504553547N00626350EA0230102312000 +B1534574553559N00626427EA0229302301000 +B1535044553567N00626503EA0228202291000 +B1535114553575N00626576EA0227102280000 +B1535184553584N00626649EA0225902269000 +B1535254553590N00626724EA0224802258000 +B1535324553597N00626799EA0223602248000 +B1535394553602N00626874EA0222702238000 +B1535464553602N00626951EA0221802228000 +B1535534553606N00627023EA0221002219000 +B1536004553612N00627099EA0220302209000 +B1536074553618N00627175EA0219302199000 +B1536144553622N00627248EA0218402189000 +B1536214553627N00627319EA0217802181000 +B1536284553633N00627391EA0217302174000 +B1536354553643N00627461EA0216602167000 +B1536424553656N00627532EA0216002162000 +B1536494553670N00627599EA0215402158000 +B1536564553680N00627666EA0214802154000 +B1537034553694N00627734EA0214302151000 +B1537104553709N00627802EA0213702146000 +B1537174553724N00627869EA0212902139000 +B1537244553741N00627938EA0212002133000 +B1537314553752N00628009EA0211302128000 +B1537384553766N00628081EA0210402121000 +B1537454553782N00628153EA0209402115000 +B1537524553795N00628231EA0208502106000 +B1537594553809N00628310EA0207702096000 +B1538064553826N00628391EA0207202087000 +B1538134553844N00628466EA0207102079000 +B1538204553855N00628530EA0207402074000 +B1538274553870N00628592EA0206902068000 +B1538344553889N00628653EA0206102062000 +B1538414553908N00628711EA0205102054000 +B1538484553927N00628766EA0204702047000 +B1538554553951N00628813EA0204302041000 +B1539024553980N00628862EA0204202037000 +B1539094554008N00628912EA0204002031000 +B1539164554038N00628960EA0203402025000 +B1539234554068N00629012EA0202602019000 +B1539304554101N00629062EA0202202013000 +B1539374554138N00629109EA0203202008000 +B1539454554174N00629145EA0202402006000 +B1539524554209N00629163EA0202302005000 +B1539594554241N00629177EV0202102005000 +B1540064554283N00629187EA0202602004000 +B1540134554317N00629193EA0203002004000 +B1540204554346N00629194EA0203802004000 +B1540274554374N00629198EA0204302006000 +B1540344554380N00629186EV0204302008000 +B1540414554363N00629170EA0204802009000 +B1540484554344N00629165EA0204702010000 +B1540554554368N00629178EA0205102011000 +B1541024554400N00629210EA0206002013000 +B1541094554431N00629236EA0207002016000 +B1541164554440N00629214EA0207502018000 +B1541234554422N00629255EA0207702021000 +B1541304554451N00629285EA0209302025000 +B1541374554463N00629269EA0209802032000 +B1541444554431N00629293EA0210502039000 +B1541514554404N00629284EA0211202046000 +B1541584554410N00629278EA0212302048000 +B1542054554434N00629297EA0212502049000 +B1542124554420N00629280EA0213502055000 +B1542194554391N00629316EA0213802059000 +B1542264554382N00629322EV0213602059000 +B1542334554373N00629360EA0214802062000 +B1542404554396N00629330EA0215002067000 +B1542474554396N00629368EV0215502076000 +B1542544554415N00629364EV0216402080000 +B1543014554428N00629323EA0214702082000 +B1543084554457N00629304EA0216502091000 +B1543154554460N00629311EA0217002095000 +B1543224554488N00629318EA0216802105000 +B1543294554455N00629310EA0218202112000 +B1543364554435N00629351EA0218102117000 +B1543434554455N00629346EA0219202124000 +B1543504554439N00629333EA0219602130000 +B1543574554443N00629382EA0220402137000 +B1544044554427N00629363EA0221702143000 +B1544114554441N00629332EA0221802148000 +B1544184554469N00629357EA0223202150000 +B1544254554447N00629391EA0224402150000 +B1544324554450N00629383EA0224802157000 +B1544394554459N00629424EA0225602165000 +B1544464554427N00629412EA0227002178000 +B1544534554450N00629407EA0227902192000 +B1545004554455N00629459EA0228702194000 +B1545074554419N00629450EA0229002205000 +B1545144554427N00629421EA0229602218000 +B1545214554422N00629477EA0230602228000 +B1545284554385N00629481EA0231402240000 +B1545354554396N00629453EA0231602250000 +B1545434554394N00629512EA0232102260000 +B1545504554361N00629513EA0233102269000 +B1545574554371N00629478EA0232702275000 +B1546044554393N00629489EV0232702278000 +B1546114554405N00629522EA0232402279000 +B1546184554390N00629486EA0232102281000 +B1546254554410N00629468EA0232302284000 +B1546324554437N00629463EA0234202288000 +B1546394554416N00629436EA0234802289000 +B1546464554426N00629443EA0236702293000 +B1546534554416N00629414EA0237702297000 +B1547004554384N00629439EA0238002304000 +B1547074554406N00629425EA0238402311000 +B1547144554434N00629451EV0239302311000 +B1547214554408N00629480EA0240002312000 +B1547284554390N00629453EA0240002314000 +B1547354554397N00629446EV0241302315000 +B1547424554441N00629428EA0241502318000 +B1547494554416N00629415EA0242302330000 +B1547564554433N00629444EA0243402343000 +B1548034554400N00629499EA0244002347000 +B1548104554395N00629478EA0244902354000 +B1548174554419N00629512EA0245902366000 +B1548244554383N00629549EA0246602381000 +B1548314554376N00629520EA0247602390000 +B1548384554404N00629538EA0248802397000 +B1548454554373N00629555EA0249502407000 +B1548524554351N00629511EA0249702420000 +B1548594554380N00629533EA0250802432000 +B1549064554357N00629563EA0251302442000 +B1549134554368N00629558EA0251902449000 +B1549204554357N00629605EA0252502457000 +B1549274554322N00629590EA0254302467000 +B1549344554346N00629602EA0255402477000 +B1549414554316N00629641EA0256202487000 +B1549484554291N00629611EA0258102499000 +B1549554554313N00629634EA0260002512000 +B1550024554281N00629652EA0261102527000 +B1550094554281N00629616EA0261802541000 +B1550164554304N00629646EA0264002555000 +B1550234554274N00629652EA0265202567000 +B1550304554304N00629647EA0267202581000 +B1550374554297N00629694EA0268302595000 +B1550444554272N00629667EA0268902610000 +B1550514554297N00629671EA0270602624000 +B1550584554289N00629724EA0271802639000 +B1551054554255N00629741EA0271902652000 +B1551124554228N00629710EA0272502659000 +B1551194554255N00629700EA0272902669000 +B1551264554251N00629754EA0273502678000 +B1551334554232N00629814EA0274602685000 +B1551414554214N00629876EA0275402694000 +B1551484554205N00629903EV0276202695000 +B1551554554179N00629995EA0277202697000 +B1552024554177N00630061EA0277402706000 +B1552094554175N00630120EA0276702715000 +B1552164554169N00630183EA0275802719000 +B1552234554165N00630210EV0274902721000 +B1552304554150N00630301EV0273702722000 +B1552374554141N00630368EA0272202722000 +B1552444554130N00630430EA0271102721000 +B1552514554117N00630492EA0270202718000 +B1552584554097N00630558EA0269602712000 +B1553054554074N00630616EA0269002704000 +B1553124554047N00630671EA0268302696000 +B1553194554018N00630727EA0267902689000 +B1553264553991N00630782EA0267102681000 +B1553334553964N00630837EA0266702673000 +B1553404553940N00630892EA0266702665000 +B1553474553923N00630951EA0266702660000 +B1553544553909N00631015EA0266802655000 +B1554014553889N00631066EA0267802653000 +B1554084553853N00631072EA0268302653000 +B1554154553864N00631023EA0269302655000 +B1554224553899N00631032EA0269602658000 +B1554294553897N00631087EA0270302662000 +B1554364553863N00631107EA0270302667000 +B1554434553852N00631055EA0270802670000 +B1554504553886N00631049EA0271502675000 +B1554574553887N00631107EA0272602679000 +B1555044553884N00631157EA0272302685000 +B1555114553877N00631223EA0272502688000 +B1555184553873N00631286EA0272402691000 +B1555254553872N00631349EA0272202694000 +B1555324553874N00631413EA0272502695000 +B1555394553872N00631474EA0273102698000 +B1555464553875N00631527EA0272602701000 +B1555534553874N00631584EA0272002702000 +B1556004553872N00631641EA0271402703000 +B1556074553866N00631699EA0270402703000 +B1556144553857N00631758EA0269002700000 +B1556214553850N00631819EA0267902697000 +B1556284553849N00631877EA0267202696000 +B1556354553840N00631940EA0266002689000 +B1556424553824N00632003EA0265202684000 +B1556494553812N00632063EA0264302682000 +B1556564553802N00632119EA0263302678000 +B1557034553790N00632183EA0263402670000 +B1557104553778N00632248EA0264002660000 +B1557174553774N00632304EA0264702654000 +B1557254553748N00632315EA0265302647000 +B1557324553761N00632274EA0265402643000 +B1557394553784N00632323EA0265002640000 +B1557464553773N00632387EA0265702638000 +B1557534553755N00632443EA0266702637000 +B1558004553737N00632483EA0267102639000 +B1558074553719N00632441EA0267202642000 +B1558144553749N00632402EA0268102645000 +B1558214553774N00632431EA0268602649000 +B1558284553747N00632435EA0268902654000 +B1558354553766N00632406EA0269002657000 +B1558424553776N00632458EA0269502660000 +B1558494553770N00632508EA0269702663000 +B1558564553765N00632563EA0268402665000 +B1559034553762N00632625EA0267602664000 +B1559104553759N00632686EA0266702660000 +B1559174553758N00632745EA0266202656000 +B1559244553755N00632806EA0264802650000 +B1559314553752N00632867EA0263402641000 +B1559384553750N00632931EA0262502632000 +B1559454553749N00632990EA0261102624000 +B1559524553759N00633052EA0260102615000 +B1559594553761N00633115EA0259802606000 +B1600064553759N00633180EA0259302598000 +B1600134553757N00633249EA0259202592000 +B1600204553750N00633315EA0258502585000 +B1600274553746N00633387EA0257902578000 +B1600344553749N00633452EA0258302572000 +B1600414553754N00633514EA0257702569000 +B1600484553744N00633581EA0257102565000 +B1600554553736N00633648EA0257002560000 +B1601024553735N00633707EA0256302557000 +B1601094553732N00633779EA0256202552000 +B1601164553734N00633850EA0255702549000 +B1601234553736N00633918EA0255402545000 +B1601304553728N00633982EA0254802540000 +B1601374553715N00634044EA0254602536000 +B1601444553701N00634105EA0254202533000 +B1601514553691N00634169EA0254102531000 +B1601584553685N00634235EA0253802529000 +B1602054553681N00634300EA0253202526000 +B1602124553676N00634364EA0252802523000 +B1602194553676N00634432EA0252202519000 +B1602264553680N00634501EA0251502514000 +B1602334553687N00634570EA0250802509000 +B1602404553693N00634641EA0250002502000 +B1602474553694N00634711EA0249502496000 +B1602544553682N00634779EA0248902490000 +B1603024553672N00634856EA0248102483000 +B1603094553668N00634923EA0247302478000 +B1603164553661N00634992EA0246602471000 +B1603234553652N00635061EA0246002465000 +B1603304553645N00635133EA0245302458000 +B1603374553644N00635207EA0244702452000 +B1603444553643N00635277EA0243902445000 +B1603514553642N00635350EA0242902438000 +B1603584553643N00635423EA0242102430000 +B1604054553647N00635495EA0241102421000 +B1604124553648N00635567EA0240302413000 +B1604194553646N00635640EA0239502404000 +B1604264553641N00635712EA0238702396000 +B1604334553637N00635784EA0237902387000 +B1604404553630N00635853EA0237202378000 +B1604474553620N00635923EA0236502370000 +B1604544553609N00635992EA0235702361000 +B1605014553602N00636063EA0235002353000 +B1605084553597N00636131EA0234402345000 +B1605154553593N00636197EA0233702338000 +B1605224553590N00636263EA0232902331000 +B1605294553585N00636329EA0232102323000 +B1605364553577N00636395EA0231402316000 +B1605434553568N00636461EA0230602308000 +B1605504553560N00636526EA0229902300000 +B1605574553551N00636591EA0229102293000 +B1606044553543N00636657EA0228402285000 +B1606114553537N00636724EA0227602279000 +B1606184553534N00636790EA0226802272000 +B1606254553526N00636856EA0226102265000 +B1606324553518N00636922EA0225602259000 +B1606394553511N00636990EA0225002253000 +B1606464553505N00637056EA0224302250000 +B1606534553499N00637122EA0223502242000 +B1607004553496N00637190EA0222802233000 +B1607074553495N00637257EA0222102225000 +B1607144553494N00637325EA0221402216000 +B1607214553492N00637392EA0220602207000 +B1607284553487N00637459EA0219802200000 +B1607354553484N00637528EA0218802192000 +B1607424553479N00637596EA0218002184000 +B1607494553472N00637664EA0217102174000 +B1607564553468N00637733EA0216102165000 +B1608034553463N00637801EA0215302156000 +B1608104553459N00637871EA0214302147000 +B1608174553459N00637941EA0213202137000 +B1608244553459N00638012EA0212202127000 +B1608314553455N00638082EA0211302117000 +B1608384553446N00638147EA0210202108000 +B1608454553444N00638216EA0209502100000 +B1608524553444N00638287EA0208602091000 +B1609004553447N00638367EA0207602080000 +B1609074553449N00638436EA0206802072000 +B1609144553451N00638507EA0206102064000 +B1609214553449N00638579EA0205402056000 +B1609284553446N00638649EA0204802050000 +B1609354553443N00638720EA0204202042000 +B1609424553440N00638790EA0203502034000 +B1609494553436N00638861EA0202602028000 +B1609564553434N00638931EA0201702022000 +B1610034553431N00639003EA0200702014000 +B1610104553427N00639070EA0199502005000 +B1610174553423N00639142EA0198401995000 +B1610244553417N00639212EA0197701984000 +B1610314553410N00639281EA0196901974000 +B1610384553406N00639355EA0196301965000 +B1610454553407N00639423EA0195001956000 +B1610524553408N00639488EA0193501946000 +B1610594553409N00639554EA0192501935000 +B1611064553403N00639621EA0191301925000 +B1611134553396N00639692EA0190201914000 +B1611204553385N00639766EA0190401904000 +B1611274553376N00639836EA0189801895000 +B1611344553362N00639907EA0189401888000 +B1611414553353N00639978EA0188901882000 +B1611484553348N00640049EA0188101876000 +B1611554553348N00640119EA0187701870000 +B1612024553349N00640191EA0187301864000 +B1612094553351N00640264EA0186801858000 +B1612164553351N00640339EA0186401852000 +B1612234553349N00640415EA0185701846000 +B1612304553344N00640492EA0185001840000 +B1612374553340N00640569EA0184501833000 +B1612444553338N00640647EA0184201827000 +B1612514553340N00640725EA0183801822000 +B1612584553339N00640800EA0184201818000 +B1613054553339N00640864EA0182901814000 +B1613124553337N00640939EA0182401810000 +B1613194553335N00641016EA0181701806000 +B1613264553335N00641093EA0181101801000 +B1613334553336N00641171EA0180301795000 +B1613404553339N00641248EA0179701789000 +B1613474553341N00641327EA0179101782000 +B1613544553341N00641408EA0178701776000 +B1614014553343N00641484EA0177901769000 +B1614084553352N00641558EA0177001763000 +B1614154553360N00641634EA0176101756000 +B1614224553373N00641706EA0175301749000 +B1614294553384N00641780EA0174301742000 +B1614364553390N00641857EA0173101732000 +B1614444553397N00641948EA0172201721000 +B1614514553400N00642027EA0171601712000 +B1614584553404N00642103EA0170901703000 +B1615054553411N00642181EA0170401695000 +B1615124553416N00642258EA0169901688000 +B1615194553422N00642335EA0169101681000 +B1615264553429N00642412EA0168101672000 +B1615334553435N00642489EA0167001664000 +B1615404553441N00642568EA0166301655000 +B1615474553445N00642642EA0165401646000 +B1615544553448N00642709EA0164401637000 +B1616014553452N00642775EA0163401628000 +B1616084553463N00642846EA0162801620000 +B1616154553467N00642920EA0162101613000 +B1616224553470N00642995EA0160901605000 +B1616294553472N00643076EA0161101598000 +B1616364553477N00643152EA0160601591000 +B1616434553481N00643230EA0160901586000 +B1616504553483N00643308EA0161401583000 +B1616574553479N00643385EA0161901582000 +B1617044553475N00643461EA0162001582000 +B1617114553442N00643506EA0161601582000 +B1617184553432N00643476EA0161801581000 +B1617254553454N00643460EA0162201582000 +B1617324553483N00643472EA0162701582000 +B1617394553476N00643539EA0162701583000 +B1617464553438N00643542EA0163201584000 +B1617534553444N00643517EA0163501585000 +B1618004553465N00643573EA0164201586000 +B1618074553435N00643620EA0164401586000 +B1618144553436N00643596EA0164701587000 +B1618214553463N00643645EA0165001589000 +B1618284553455N00643724EA0165501594000 +B1618354553418N00643756EA0165901599000 +B1618424553418N00643734EA0166101601000 +B1618494553443N00643777EA0166001606000 +B1618564553419N00643840EA0166301608000 +B1619034553376N00643854EA0166601611000 +B1619104553348N00643912EA0166801614000 +B1619174553365N00643970EA0167001618000 +B1619244553391N00643977EA0167101621000 +B1619314553379N00643960EA0167301624000 +B1619384553338N00643964EA0167501626000 +B1619454553292N00643983EA0167501628000 +B1619524553248N00644003EA0167401629000 +B1619594553204N00644021EA0167501630000 +B1620064553163N00644040EA0167501631000 +B1620134553117N00644050EA0167501632000 +B1620204553073N00644065EA0168301634000 +B1620274553063N00644044EA0169001636000 +B1620344553084N00644073EA0168501639000 +B1620424553054N00644114EA0169201642000 +B1620494553013N00644141EA0169701646000 +B1620564552973N00644169EA0170401650000 +B1621034552955N00644149EA0171501654000 +B1621104552983N00644168EA0173101660000 +B1621174553010N00644198EA0174001668000 +B1621244553037N00644214EA0174801677000 +B1621314553038N00644199EV0175001682000 +B1621384553004N00644154EA0175901682000 +B1621454553004N00644140EA0176501684000 +B1621524553009N00644184EV0176701687000 +B1621594552974N00644200EA0178101691000 +B1622064552989N00644207EA0178501692000 +B1622134552962N00644251EA0179601700000 +B1622204552940N00644268EV0180301707000 +B1622274552892N00644291EA0181201711000 +B1622344552892N00644291EV0181701711000 +B1622414552892N00644291EV0182301711000 +B1622484552779N00644345EA0182801711000 +B1622554552734N00644366EA0183301724000 +B1623024552695N00644378EA0184601741000 +B1623094552698N00644353EA0186201753000 +B1623164552721N00644394EA0187701770000 +B1623234552679N00644424EA0189001785000 +B1623304552657N00644398EA0191401801000 +B1623374552667N00644449EA0192701811000 +B1623444552647N00644453EA0194701821000 +B1623514552646N00644510EA0196001837000 +B1623584552627N00644500EA0197701853000 +B1624054552638N00644490EA0198601866000 +B1624124552651N00644508EA0197601884000 +B1624194552619N00644576EA0198501903000 +B1624264552587N00644581EA0198501917000 +B1624334552598N00644573EA0198201923000 +B1624404552608N00644559EA0197601928000 +B1624474552615N00644539EA0197101931000 +B1624544552623N00644522EA0197301933000 +B1625014552641N00644530EA0196601935000 +B1625084552664N00644544EA0195901934000 +B1625154552665N00644519EA0194301932000 +B1625224552653N00644490EA0195101928000 +B1625294552629N00644468EA0195101925000 +B1625364552601N00644448EA0195001923000 +B1625434552600N00644427EA0194801921000 +B1625504552616N00644412EA0194901920000 +B1625574552634N00644402EA0195001920000 +B1626044552659N00644411EA0194901919000 +B1626114552684N00644428EA0194801918000 +B1626184552677N00644418EA0194101917000 +B1626254552632N00644424EA0193701917000 +B1626334552600N00644406EA0193901915000 +B1626404552609N00644385EA0193901913000 +B1626474552630N00644435EA0194201912000 +B1626544552595N00644484EA0194401911000 +B1627014552553N00644490EA0195501911000 +B1627084552539N00644483EA0195701912000 +B1627154552567N00644513EA0196801914000 +B1627224552557N00644575EA0196501914000 +B1627294552537N00644554EA0197301919000 +B1627364552552N00644541EA0196501923000 +B1627434552569N00644529EA0196301925000 +B1627504552594N00644529EA0195601925000 +B1627574552620N00644528EA0195501923000 +B1628044552646N00644529EA0195401923000 +B1628114552670N00644525EA0194901921000 +B1628184552695N00644523EA0194601919000 +B1628254552719N00644519EA0194001916000 +B1628324552745N00644513EA0194101912000 +B1628394552767N00644512EA0194401910000 +B1628464552786N00644503EA0195601910000 +B1628534552798N00644563EA0195701911000 +B1629004552761N00644607EA0196701911000 +B1629074552751N00644587EA0197401912000 +B1629144552771N00644604EA0197301916000 +B1629214552744N00644652EA0197601921000 +B1629284552715N00644639EA0197401925000 +B1629354552722N00644613EA0197201927000 +B1629424552747N00644601EA0197501930000 +B1629494552775N00644601EA0197101932000 +B1629564552804N00644601EA0197301933000 +B1630034552832N00644598EA0196601934000 +B1630104552857N00644598EA0196101934000 +B1630174552881N00644596EA0196101934000 +B1630244552904N00644594EA0195601934000 +B1630314552929N00644585EA0196201931000 +B1630384552957N00644583EA0197201930000 +B1630454552987N00644582EA0197901932000 +B1630524553014N00644583EA0198301936000 +B1630594553048N00644595EA0198801939000 +B1631064553079N00644602EA0197601943000 +B1631134553112N00644607EA0196601942000 +B1631204553148N00644625EA0195601940000 +B1631274553183N00644638EA0195101935000 +B1631344553217N00644651EA0194201931000 +B1631414553254N00644667EA0194101926000 +B1631484553294N00644684EA0193601921000 +B1631554553335N00644702EA0193101918000 +B1632024553375N00644715EA0192201913000 +B1632094553416N00644726EA0191301907000 +B1632164553460N00644736EA0190901900000 +B1632234553495N00644733EA0192601895000 +B1632314553525N00644740EA0193701895000 +B1632384553535N00644785EA0195301896000 +B1632454553517N00644786EA0196501901000 +B1632524553549N00644804EA0197801909000 +B1632594553539N00644874EA0199301916000 +B1633064553528N00644857EA0200801926000 +B1633134553555N00644912EA0202101937000 +B1633204553527N00644938EA0203601949000 +B1633274553547N00644931EA0205201959000 +B1633344553547N00645001EA0206101973000 +B1633414553532N00644987EA0208501983000 +B1633484553556N00644997EA0209001996000 +B1633554553561N00645079EA0210302012000 +B1634024553543N00645080EA0212402024000 +B1634094553554N00645144EA0213702035000 +B1634164553531N00645148EA0215202052000 +B1634234553553N00645180EA0216502069000 +B1634304553540N00645229EA0217802078000 +B1634374553546N00645221EA0219202087000 +B1634444553548N00645291EA0220002101000 +B1634514553517N00645294EA0220902114000 +B1634584553537N00645280EA0221902128000 +B1635054553545N00645338EV0222002138000 +B1635124553510N00645377EA0223302144000 +B1635194553501N00645351EV0224402151000 +B1635264553521N00645391EA0224602158000 +B1635334553495N00645442EA0225602161000 +B1635404553476N00645422EA0226302170000 +B1635474553499N00645432EA0226002179000 +B1635544553482N00645499EA0226902186000 +B1636014553452N00645489EA0227202195000 +B1636084553478N00645496EA0226902196000 +B1636154553481N00645577EA0227402203000 +B1636224553453N00645636EA0227302211000 +B1636294553419N00645694EA0226402217000 +B1636364553391N00645766EA0224702219000 +B1636434553364N00645838EA0223302219000 +B1636504553337N00645908EA0222402214000 +B1636574553309N00645969EA0221202208000 +B1637044553282N00646032EA0220302200000 +B1637114553256N00646093EA0219502192000 +B1637184553233N00646154EA0218602184000 +B1637254553209N00646215EA0217702176000 +B1637324553176N00646266EA0218102169000 +B1637394553155N00646315EA0218002165000 +B1637464553134N00646373EA0217202161000 +B1637534553105N00646429EA0216502157000 +B1638004553077N00646481EA0216002152000 +B1638074553057N00646538EA0214602147000 +B1638144553036N00646600EA0213602140000 +B1638224553005N00646667EA0213002131000 +B1638294552978N00646721EA0212502123000 +B1638364552953N00646781EA0211602115000 +B1638434552929N00646847EA0210802107000 +B1638504552902N00646909EA0210102098000 +B1638574552876N00646969EA0209102090000 +B1639044552851N00647025EA0208302081000 +B1639114552823N00647080EA0207602073000 +B1639184552793N00647137EA0206302065000 +B1639254552762N00647195EA0205102056000 +B1639324552731N00647248EA0205102049000 +B1639394552699N00647306EA0204602042000 +B1639464552665N00647358EA0203802035000 +B1639534552635N00647420EA0203602028000 +B1640004552607N00647487EA0203702022000 +B1640074552578N00647553EA0203402018000 +B1640144552549N00647619EA0202602013000 +B1640214552527N00647691EA0202102008000 +B1640284552505N00647764EA0202002004000 +B1640354552483N00647838EA0201902000000 +B1640424552464N00647914EA0202001997000 +B1640494552441N00647991EA0201601994000 +B1640564552420N00648058EA0202301992000 +B1641034552394N00648116EA0202201991000 +B1641104552366N00648171EA0202901991000 +B1641174552338N00648219EA0203501993000 +B1641244552318N00648272EA0203301995000 +B1641314552310N00648332EA0202801996000 +B1641384552308N00648398EA0202601995000 +B1641454552306N00648463EA0202901995000 +B1641524552304N00648525EA0202901996000 +B1641594552304N00648585EA0203701997000 +B1642064552311N00648640EA0203401998000 +B1642134552318N00648697EA0203401999000 +B1642204552323N00648749EA0203602000000 +B1642274552324N00648799EA0203802002000 +B1642344552332N00648850EA0203302003000 +B1642414552334N00648903EA0203102003000 +B1642484552346N00648955EA0203102001000 +B1642554552362N00648999EA0202902001000 +B1643024552390N00649033EA0203402000000 +B1643094552414N00649062EA0204402001000 +B1643164552440N00649086EA0205702004000 +B1643234552455N00649077EA0205002009000 +B1643304552412N00649061EA0205902012000 +B1643374552368N00649050EA0206902013000 +B1643444552340N00649027EA0206302014000 +B1643514552365N00649018EA0207702015000 +B1643584552380N00649060EA0208102021000 +B1644054552402N00649096EA0209102027000 +B1644124552409N00649072EA0209202035000 +B1644194552365N00649056EA0210502041000 +B1644274552325N00649041EA0210702047000 +B1644344552345N00649017EA0210502051000 +B1644414552366N00649056EA0211402057000 +B1644484552384N00649093EA0212002064000 +B1644554552407N00649121EA0212402070000 +B1645024552400N00649093EA0211902074000 +B1645094552359N00649071EA0212102077000 +B1645164552327N00649040EA0212702081000 +B1645234552339N00649005EA0212302083000 +B1645304552351N00649058EA0213102087000 +B1645374552373N00649095EA0213502091000 +B1645444552370N00649068EA0212902094000 +B1645514552326N00649058EA0213202095000 +B1645584552289N00649034EA0213602095000 +B1646054552269N00648998EA0213202096000 +B1646124552292N00649023EA0214202098000 +B1646194552313N00649060EA0214602100000 +B1646264552338N00649093EA0214402103000 +B1646334552371N00649108EA0214202105000 +B1646404552400N00649106EA0214002106000 +B1646474552367N00649089EA0213402107000 +B1646544552331N00649065EA0213002106000 +B1647014552350N00649042EA0212502104000 +B1647084552375N00649082EA0211902102000 +B1647154552406N00649122EA0211602098000 +B1647224552435N00649160EA0211502094000 +B1647294552461N00649202EA0211802091000 +B1647364552475N00649256EA0212202090000 +B1647434552453N00649258EA0210802088000 +B1647504552485N00649284EA0211202087000 +B1647574552504N00649339EA0211202086000 +B1648044552522N00649389EA0210502085000 +B1648114552547N00649442EA0209302082000 +B1648184552576N00649497EA0209102077000 +B1648254552603N00649557EA0208502072000 +B1648324552629N00649612EA0208402067000 +B1648394552663N00649655EA0208302064000 +B1648464552697N00649701EA0207102060000 +B1648534552730N00649756EA0205902054000 +B1649004552764N00649811EA0205202047000 +B1649074552800N00649862EA0205102041000 +B1649144552828N00649911EA0205802037000 +B1649214552827N00649938EV0206102036000 +B1649284552786N00650011EA0206802035000 +B1649354552743N00650025EA0207602035000 +B1649424552701N00650022EA0208002036000 +B1649494552695N00649989EA0207902036000 +B1649564552729N00650006EA0208202038000 +B1650034552767N00650013EA0209002041000 +B1650104552803N00650015EA0209302045000 +B1650174552819N00649986EA0209902048000 +B1650244552786N00650002EA0210902050000 +B1650314552759N00650048EA0211202056000 +B1650394552719N00650064EA0211802062000 +B1650464552711N00650033EA0211402066000 +B1650534552747N00650027EA0211402069000 +B1651004552785N00650029EA0212002072000 +B1651074552824N00650034EA0212302076000 +B1651144552862N00650084EA0212402079000 +B1651214552895N00650139EA0212802082000 +B1651284552919N00650193EA0212802085000 +B1651354552942N00650251EA0212602087000 +B1651424552968N00650305EA0212402088000 +B1651494552990N00650362EA0212102088000 +B1651564553012N00650426EA0211602088000 +B1652034553040N00650490EA0211302086000 +B1652104553071N00650556EA0210802084000 +B1652174553102N00650626EA0209702081000 +B1652244553129N00650699EA0208502076000 +B1652314553155N00650769EA0207802071000 +B1652384553180N00650837EA0207302065000 +B1652454553208N00650903EA0207202060000 +B1652524553233N00650967EA0207102056000 +B1652594553259N00651041EA0207102052000 +B1653064553285N00651116EA0207102049000 +B1653134553309N00651194EA0208102048000 +B1653204553317N00651248EA0208202049000 +B1653274553301N00651268EV0208102049000 +B1653344553327N00651265EA0208102050000 +B1653414553360N00651314EA0208202050000 +B1653484553381N00651364EA0207902050000 +B1653554553403N00651415EA0207102050000 +B1654024553433N00651473EA0206002047000 +B1654094553468N00651533EA0205002041000 +B1654164553502N00651599EA0203502034000 +B1654234553540N00651652EA0202302025000 +B1654304553576N00651714EA0201202016000 +B1654374553611N00651777EA0200202005000 +B1654444553655N00651831EA0200101997000 +B1654514553696N00651886EA0199901989000 +B1654584553734N00651942EA0199501983000 +B1655054553769N00652002EA0199601978000 +B1655124553804N00652060EA0199201975000 +B1655194553844N00652114EA0198901972000 +B1655264553882N00652166EA0199001968000 +B1655334553924N00652214EA0198801965000 +B1655404553964N00652253EA0199801963000 +B1655474553969N00652307EV0199901963000 +B1655544553952N00652321EA0200201963000 +B1656014553981N00652296EA0201301963000 +B1656084554018N00652319EA0202101966000 +B1656154554008N00652378EA0202601970000 +B1656224553986N00652359EA0203601974000 +B1656294554018N00652347EA0204101982000 +B1656364554035N00652406EA0205201991000 +B1656434554010N00652420EA0206102000000 +B1656504554028N00652401EA0207302009000 +B1656584554031N00652465EA0208402019000 +B1657054554009N00652453EA0209302027000 +B1657124554037N00652442EA0210202035000 +B1657194554038N00652497EA0211602044000 +B1657264554017N00652488EA0212602054000 +B1657334554047N00652479EA0213202063000 +B1657404554054N00652544EA0214502073000 +B1657474554027N00652563EA0215502084000 +B1657544554051N00652545EA0216402095000 +B1658014554065N00652600EA0217502107000 +B1658084554035N00652616EA0218302118000 +B1658154554041N00652586EA0218702128000 +B1658224554082N00652601EA0219602139000 +B1658294554074N00652652EA0220702149000 +B1658364554087N00652634EA0221702158000 +B1658434554093N00652689EA0222802167000 +B1658504554085N00652674EA0223502176000 +B1658574554121N00652689EA0224802186000 +B1659044554118N00652748EA0226202196000 +B1659114554100N00652754EV0226702202000 +B1659184554120N00652737EA0227502208000 +B1659254554161N00652759EA0228602217000 +B1659324554156N00652803EA0229302226000 +B1659394554141N00652769EA0230002234000 +B1659464554175N00652751EA0230702242000 +B1659534554180N00652806EA0232302249000 +B1700004554173N00652778EA0232902257000 +B1700074554214N00652804EA0233802265000 +B1700144554230N00652861EA0234802275000 +B1700214554207N00652872EA0235702286000 +B1700284554220N00652840EA0236202298000 +B1700354554255N00652882EA0237302309000 +B1700424554241N00652937EA0238102319000 +B1700494554222N00652927EA0238502327000 +B1700564554260N00652920EA0238602335000 +B1701034554299N00652968EA0239002343000 +B1701104554344N00653003EA0239802348000 +B1701174554387N00653047EA0239102353000 +B1701244554433N00653089EA0238702355000 +B1701314554476N00653139EA0238402356000 +B1701384554523N00653185EA0236502355000 +B1701454554571N00653234EA0235402351000 +B1701524554619N00653286EA0234502345000 +B1701594554665N00653341EA0234002338000 +B1702064554708N00653399EA0233402331000 +B1702134554754N00653461EA0232802325000 +B1702204554796N00653527EA0233302319000 +B1702274554837N00653589EA0233502315000 +B1702344554878N00653636EA0232402312000 +B1702424554922N00653698EA0230902307000 +B1702494554963N00653752EA0229502300000 +B1702564555006N00653812EA0228002291000 +B1703034555046N00653862EA0227802283000 +B1703104555085N00653911EA0227502275000 +B1703174555125N00653955EA0226702268000 +B1703244555162N00654002EA0225302260000 +B1703314555207N00654047EA0224402251000 +B1703384555252N00654092EA0224702244000 +B1703454555298N00654138EA0224502238000 +B1703524555345N00654170EA0223602232000 +B1703594555396N00654190EA0222802226000 +B1704064555446N00654222EA0223002220000 +B1704134555491N00654263EA0223202216000 +B1704204555528N00654300EA0223602214000 +B1704274555571N00654344EA0224002213000 +B1704344555616N00654388EA0224102212000 +B1704414555660N00654417EA0225602214000 +B1704484555662N00654405EA0227002217000 +B1704554555675N00654456EA0227702223000 +B1705024555712N00654451EA0228602229000 +B1705094555707N00654434EA0228702234000 +B1705164555726N00654495EA0229602240000 +B1705234555765N00654529EA0230102248000 +B1705304555813N00654561EA0229102254000 +B1705374555859N00654612EA0228302256000 +B1705444555905N00654661EA0227502255000 +B1705514555941N00654719EA0226602252000 +B1705584555974N00654774EA0225702248000 +B1706054556008N00654828EA0224802243000 +B1706124556039N00654886EA0224202236000 +B1706194556067N00654948EA0223902230000 +B1706264556096N00655006EA0223502224000 +B1706334556125N00655065EA0223002219000 +B1706404556158N00655115EA0222202213000 +B1706474556198N00655152EA0221502207000 +B1706544556239N00655189EA0220402201000 +B1707014556280N00655222EA0219602195000 +B1707084556321N00655258EA0218702188000 +B1707154556361N00655298EA0218202180000 +B1707224556396N00655345EA0217702173000 +B1707294556428N00655400EA0217402166000 +B1707364556460N00655455EA0217102160000 +B1707434556492N00655511EA0217202155000 +B1707504556525N00655561EA0216902151000 +B1707574556560N00655596EA0218102149000 +B1708044556592N00655621EA0218402149000 +B1708114556625N00655645EA0218402149000 +B1708184556663N00655646EA0218502150000 +B1708254556700N00655635EA0219902151000 +B1708324556740N00655636EA0221302155000 +B1708394556776N00655629EA0223202162000 +B1708474556788N00655603EA0224702171000 +B1708544556766N00655635EA0225702179000 +B1709014556797N00655658EA0227502188000 +B1709084556832N00655649EA0228902200000 +B1709154556824N00655644EA0230302213000 +B1709224556801N00655701EA0232102223000 +B1709294556775N00655759EA0234102231000 +B1709364556765N00655753EA0235202240000 +B1709434556802N00655743EA0236802256000 +B1709504556839N00655738EA0238902275000 +B1709574556860N00655713EA0240302293000 +B1710044556834N00655740EA0241902310000 +B1710114556805N00655783EA0243502329000 +B1710184556775N00655829EA0245502347000 +B1710254556749N00655845EA0248102363000 +B1710324556762N00655871EA0250502375000 +B1710394556757N00655860EA0252502389000 +B1710464556786N00655851EA0254402414000 +B1710534556802N00655819EA0255302437000 +B1711004556775N00655842EA0256402458000 +B1711074556760N00655908EA0257602476000 +B1711144556740N00655980EA0259502493000 +B1711214556727N00655976EA0260702507000 +B1711284556754N00656023EA0261202525000 +B1711354556748N00656065EA0262102535000 +B1711424556761N00656031EA0263502545000 +B1711494556771N00656002EA0264902556000 +B1711564556774N00655969EA0265902568000 +B1712034556796N00655941EA0267102588000 +B1712104556800N00655907EA0268102603000 +B1712174556781N00655947EA0269002615000 +B1712244556787N00656018EA0270602628000 +B1712314556764N00656070EA0270702640000 +B1712384556758N00656042EA0271002649000 +B1712454556767N00656006EA0271302657000 +B1712524556794N00655983EA0271902665000 +B1712594556821N00655954EA0273202674000 +B1713064556845N00655923EA0274602682000 +B1713134556872N00655902EA0275802692000 +B1713204556881N00655958EA0277402703000 +B1713274556850N00655961EA0278902715000 +B1713344556865N00655925EA0280202727000 +B1713414556899N00655948EA0281702740000 +B1713484556876N00655976EA0283302753000 +B1713554556881N00655940EA0284702768000 +B1714024556912N00655972EA0286102782000 +B1714094556894N00656026EA0288002797000 +B1714174556872N00656000EA0289102814000 +B1714244556903N00655989EA0290802829000 +B1714314556912N00656050EA0292402844000 +B1714384556880N00656073EA0293702858000 +B1714454556878N00656042EA0295102873000 +B1714524556912N00656052EA0296002889000 +B1714594556918N00656109EA0297102902000 +B1715064556887N00656129EA0298502915000 +B1715134556867N00656107EA0299202928000 +B1715204556882N00656075EA0300902941000 +B1715274556903N00656056EA0302102952000 +B1715344556933N00656072EA0304202966000 +B1715414556947N00656116EA0306502983000 +B1715484556916N00656129EA0308002999000 +B1715554556934N00656094EA0310303015000 +B1716024556962N00656128EA0312903033000 +B1716094556990N00656157EA0314503053000 +B1716164557021N00656185EA0315003071000 +B1716234557057N00656213EA0315803086000 +B1716304557093N00656246EA0316603100000 +B1716374557132N00656277EA0316503111000 +B1716444557165N00656308EA0315203119000 +B1716514557199N00656350EA0314003121000 +B1716584557236N00656388EA0313203121000 +B1717054557275N00656417EA0312303118000 +B1717124557313N00656448EA0311303114000 +B1717194557352N00656479EA0310303108000 +B1717264557392N00656502EA0309503101000 +B1717334557433N00656529EA0308903094000 +B1717404557471N00656561EA0308303089000 +B1717474557509N00656594EA0308003084000 +B1717544557544N00656630EA0307603079000 +B1718014557580N00656666EA0306903073000 +B1718084557615N00656705EA0306203067000 +B1718154557652N00656742EA0305703062000 +B1718224557690N00656777EA0305303057000 +B1718294557728N00656812EA0304703052000 +B1718364557766N00656847EA0304103046000 +B1718434557803N00656881EA0303603040000 +B1718504557839N00656917EA0303003034000 +B1718574557872N00656957EA0302203029000 +B1719044557909N00656992EA0301503023000 +B1719114557950N00657019EA0300903023000 +B1719184557989N00657048EA0300303020000 +B1719254558027N00657077EA0299603013000 +B1719324558064N00657104EA0298403006000 +B1719394558100N00657134EA0297802999000 +B1719464558136N00657166EA0297002989000 +B1719544558174N00657210EA0296202979000 +B1720014558207N00657250EA0295602970000 +B1720084558241N00657288EA0294602961000 +B1720154558276N00657322EA0293702952000 +B1720224558312N00657361EA0293002943000 +B1720294558345N00657392EA0292002934000 +B1720364558381N00657424EA0290402924000 +B1720434558417N00657455EA0289602913000 +B1720504558454N00657484EA0288402902000 +B1720574558492N00657510EA0287602892000 +B1721044558530N00657531EA0286802881000 +B1721114558568N00657554EA0285902871000 +B1721184558606N00657576EA0284902861000 +B1721254558645N00657587EA0284202852000 +B1721324558684N00657612EA0283202843000 +B1721394558724N00657635EA0281602834000 +B1721464558768N00657652EA0280702825000 +B1721534558810N00657666EA0280002815000 +B1722004558852N00657685EA0279302805000 +B1722074558893N00657707EA0278402796000 +B1722144558936N00657728EA0277402786000 +B1722214558980N00657748EA0276502776000 +B1722284559023N00657770EA0276102768000 +B1722354559066N00657789EA0276302761000 +B1722424559104N00657795EA0276902756000 +B1722494559136N00657785EA0277302755000 +B1722564559167N00657767EA0277302754000 +B1723034559205N00657785EA0277502753000 +B1723104559242N00657807EA0276602752000 +B1723174559285N00657828EA0276302749000 +B1723244559323N00657852EA0276002746000 +B1723314559359N00657882EA0274702741000 +B1723384559398N00657915EA0274002736000 +B1723454559436N00657948EA0273502731000 +B1723524559474N00657985EA0273002725000 +B1723594559510N00658023EA0272402720000 +B1724064559547N00658057EA0271802715000 +B1724134559584N00658091EA0270802709000 +B1724204559624N00658121EA0270102703000 +B1724274559664N00658155EA0269302696000 +B1724344559702N00658193EA0268502688000 +B1724414559743N00658219EA0267402681000 +B1724484559786N00658241EA0266302672000 +B1724554559830N00658253EA0265002663000 +B1725024559872N00658278EA0263902653000 +B1725094559915N00658302EA0262902643000 +B1725164559959N00658326EA0261902633000 +B1725234559982N00658287EA0260602623000 +B1725314559963N00658219EA0259602611000 +B1725384559940N00658163EA0258702600000 +B1725454559912N00658105EA0258002590000 +B1725524559897N00658055EA0257402582000 +B1725594559932N00658050EA0256402573000 +B1726064559962N00658094EA0255502567000 +B1726134559932N00658108EA0254602559000 +B1726204559899N00658065EA0253802550000 +B1726274559869N00658019EA0252902542000 +B1726344559837N00657972EA0251902532000 +B1726414559803N00657925EA0251202523000 +B1726484559767N00657878EA0250702514000 +B1726554559729N00657834EA0250702508000 +B1727024559697N00657793EA0249702500000 +B1727094559663N00657753EA0249102492000 +B1727164559631N00657707EA0248502485000 +B1727234559599N00657660EA0248102479000 +B1727304559566N00657614EA0247602473000 +B1727374559533N00657572EA0247002467000 +B1727444559496N00657531EA0246702461000 +B1727514559463N00657487EA0246002456000 +B1727584559426N00657447EA0245002450000 +B1728054559391N00657402EA0244202443000 +B1728124559356N00657359EA0242902435000 +B1728194559316N00657324EA0242002426000 +B1728264559275N00657292EA0241202418000 +B1728334559233N00657257EA0240402409000 +B1728404559191N00657219EA0239402401000 +B1728474559148N00657187EA0239302393000 +B1728544559103N00657161EA0239902387000 +B1729014559067N00657126EA0239602384000 +B1729084559033N00657080EA0238802379000 +B1729154558997N00657038EA0238402375000 +B1729224558957N00657008EA0237102370000 +B1729294558909N00656969EA0235402363000 +B1729364558862N00656918EA0234002354000 +B1729434558812N00656872EA0232802345000 +B1729504558763N00656824EA0231802336000 +B1729574558719N00656771EA0229902326000 +B1730044558677N00656711EA0228402315000 +B1730114558637N00656647EA0227202303000 +B1730184558596N00656589EA0226102290000 +B1730254558554N00656535EA0224902278000 +B1730324558512N00656477EA0223802265000 +B1730394558473N00656421EA0222302253000 +B1730464558433N00656366EA0220502240000 +B1730534558393N00656310EA0219402226000 +B1731014558344N00656243EA0218402211000 +B1731084558305N00656177EA0217302197000 +B1731154558260N00656113EA0216602184000 +B1731224558211N00656057EA0215302172000 +B1731294558161N00656002EA0215002161000 +B1731364558106N00655951EA0213802150000 +B1731434558051N00655901EA0213202140000 +B1731504557998N00655844EA0212202130000 +B1731574557948N00655786EA0210702121000 +B1732044557896N00655730EA0209002110000 +B1732114557847N00655670EA0207602098000 +B1732184557800N00655615EA0206302086000 +B1732254557753N00655569EA0205902073000 +B1732324557715N00655536EA0205602063000 +B1732394557677N00655509EA0205802056000 +B1732464557639N00655481EA0205502049000 +B1732534557604N00655464EA0205302044000 +B1733004557569N00655448EA0205802040000 +B1733074557535N00655432EA0205502037000 +B1733144557499N00655412EA0205102034000 +B1733214557466N00655392EA0204302030000 +B1733284557435N00655375EA0203302025000 +B1733354557409N00655351EA0201602018000 +B1733424557394N00655297EA0200102009000 +B1733494557384N00655240EA0197901998000 +B1733564557369N00655184EA0195801985000 +B1734034557359N00655134EA0195401971000 +B1734104557349N00655106EA0194901960000 +B1734174557335N00655083EA0193701951000 +B1734244557314N00655041EA0192501939000 +B1734314557296N00654989EA0191301927000 +B1734384557274N00654940EA0190201915000 +B1734454557258N00654880EA0189101903000 +B1734524557245N00654816EA0187201890000 +B1734594557226N00654757EA0186601877000 +B1735064557215N00654696EA0186001865000 +B1735134557203N00654633EA0184901854000 +B1735204557195N00654565EA0183201844000 +B1735274557192N00654491EA0182001833000 +B1735344557186N00654423EA0180801822000 +B1735414557175N00654357EA0179601810000 +B1735484557169N00654287EA0178201800000 +B1735554557169N00654218EA0177001787000 +B1736024557170N00654159EA0176501775000 +B1736094557164N00654107EA0176001764000 +B1736164557155N00654057EA0175201753000 +B1736234557142N00654007EA0174701743000 +B1736304557129N00653958EA0173801734000 +B1736374557116N00653903EA0173501725000 +B1736454557100N00653843EA0173001717000 +B1736524557085N00653794EA0172801711000 +B1736594557061N00653750EA0172001704000 +B1737064557031N00653704EA0170601697000 +B1737134557004N00653655EA0170101688000 +B1737204556985N00653606EA0170701682000 +B1737274556972N00653547EA0171401679000 +B1737344556959N00653493EA0172001679000 +B1737414556940N00653427EA0172801681000 +B1737484556926N00653364EA0173901684000 +B1737554556946N00653314EA0174401688000 +B1738024556970N00653347EA0174901693000 +B1738094556952N00653377EA0175701699000 +B1738164556927N00653333EA0175601706000 +B1738234556905N00653268EA0176101711000 +B1738304556886N00653206EA0175901714000 +B1738374556857N00653157EA0175601717000 +B1738444556830N00653105EA0175101717000 +B1738514556803N00653053EA0174201717000 +B1738584556773N00653004EA0173901714000 +B1739054556749N00652949EA0173301711000 +B1739124556732N00652894EA0172401707000 +B1739194556699N00652827EA0171901702000 +B1739264556673N00652764EA0171001696000 +B1739334556643N00652698EA0169701689000 +B1739404556611N00652622EA0168701681000 +B1739474556583N00652551EA0168301673000 +B1739544556561N00652472EA0167701665000 +B1740014556541N00652404EA0168201659000 +B1740084556518N00652353EA0168101654000 +B1740154556501N00652305EA0168201651000 +B1740224556482N00652263EA0167701648000 +B1740294556462N00652222EA0167401646000 +B1740364556439N00652179EA0166901643000 +B1740434556416N00652133EA0166701639000 +B1740504556391N00652095EA0166401636000 +B1740574556367N00652057EA0166001633000 +B1741044556340N00652026EA0165101629000 +B1741114556315N00651993EA0163701625000 +B1741184556280N00651966EA0162701618000 +B1741254556243N00651941EA0162001611000 +B1741324556209N00651912EA0161801604000 +B1741394556177N00651887EA0160801597000 +B1741464556140N00651873EA0159601589000 +B1741534556100N00651864EA0158301580000 +B1742004556061N00651838EA0157301572000 +B1742074556023N00651833EA0156801564000 +B1742154555977N00651838EA0156101555000 +B1742224555943N00651825EA0155401546000 +B1742294555909N00651798EA0154501538000 +B1742364555878N00651760EA0153901529000 +B1742434555852N00651718EA0152801521000 +B1742504555828N00651670EA0152101513000 +B1742574555805N00651618EA0151301504000 +B1743044555780N00651565EA0150501495000 +B1743114555748N00651521EA0149601486000 +B1743184555720N00651469EA0148801479000 +B1743254555689N00651423EA0147601470000 +B1743324555653N00651390EA0146101462000 +B1743394555606N00651393EA0144401451000 +B1743464555562N00651423EA0142901439000 +B1743534555532N00651473EA0141901427000 +B1744004555523N00651540EA0141201414000 +B1744074555534N00651602EA0140301402000 +B1744144555541N00651668EA0139701390000 +B1744214555539N00651738EA0139401380000 +B1744284555543N00651808EA0138401371000 +B1744354555591N00651824EA0137701363000 +B1744424555637N00651826EA0137601354000 +B1744494555681N00651821EA0137101347000 +B1744564555721N00651821EA0136401341000 +B1745034555759N00651838EA0135401335000 +B1745104555797N00651865EA0134901328000 +B1745174555831N00651894EA0133801322000 +B1745244555864N00651928EA0133001314000 +B1745314555893N00651969EA0132201305000 +B1745384555929N00651998EA0131301297000 +B1745454555939N00652035EA0129801288000 +B1745524555903N00652030EA0128801279000 +B1745594555927N00652070EA0127001269000 +B1746064555915N00652118EA0126801261000 +B1746134555896N00652167EA0126101251000 +B1746204555906N00652207EA0124301242000 +B1746274555893N00652203EA0123201235000 +B1746344555892N00652262EA0122201224000 +B1746414555885N00652322EA0121401213000 +B1746484555878N00652380EA0120401202000 +B1746554555867N00652446EA0119401191000 +B1747024555850N00652505EA0118801181000 +B1747094555826N00652535EA0117501171000 +B1747164555851N00652543EA0116501160000 +B1747234555846N00652529EA0115201152000 +B1747304555862N00652573EA0114501142000 +B1747374555854N00652623EA0114201133000 +B1747444555837N00652650EA0113001124000 +B1747514555845N00652604EA0112601115000 +B1747594555826N00652578EA0111701105000 +B1748064555800N00652585EA0110401096000 +B1748134555771N00652577EA0109401086000 +B1748204555754N00652589EA0109601080000 +B1748274555754N00652590EA0109601075000 +B1748344555755N00652590EA0109501073000 +B1748414555754N00652590EA0109601070000 +B1748484555755N00652589EA0109501068000 +B1748554555755N00652589EA0109601064000 +B1749024555755N00652591EA0109601063000 +B1749094555755N00652592EA0109601061000 +B1749164555753N00652594EA0109601056000 diff --git a/float-no-zero/examples/data/kml/2012-02-10.kml b/float-no-zero/examples/data/kml/2012-02-10.kml new file mode 100644 index 0000000000..6c1bc47196 --- /dev/null +++ b/float-no-zero/examples/data/kml/2012-02-10.kml @@ -0,0 +1,9391 @@ + + + Skimap.org OpenSkiMap + Created from OpenStreetMap data. Renderer v0.5 + + + Copyright Notice + + OpenStreetMap Contributors. It is available under the Creative Commons Attribution-ShareAlike (CC-BY-SA) Version 2.0 License.]]> + + Copyright (c) OpenStreetMap Contributors. CC-BY-SA 2.0 License. + + OSMCopyright.png + + + + + + + POI + Points of Interest + + Parking + + + #style-Parking + + 7.5584046,46.4880564,0 + + + + Coop + #style-Parking + + 7.5609149,46.493261,0 + + + + #style-Parking + + 7.5865419,46.4861414,0 + + + + #style-Parking + + 7.4447639,46.4572778,0 + + + + #style-Parking + + 7.4450385,46.4601225,0 + + + + #style-Parking + + 7.4393367,46.45965,0 + + + + #style-Parking + + 7.4413296,46.4571887,0 + + + + #style-Parking + + 7.440856,46.4512387,0 + + + + #style-Parking + + 7.4379632,46.452765,0 + + + + #style-Parking + + 7.4439042,46.4554444,0 + + + + #style-Parking + + 7.4442161,46.4540646,0 + + + + #style-Parking + + 7.4701427,46.4536698,0 + + + + #style-Parking + + 7.5806365,46.5135164,0 + + + + #style-Parking + + 7.6038938,46.5174355,0 + + + + #style-Parking + + 7.6033249,46.5169628,0 + + + + #style-Parking + + 7.6062434,46.5290881,0 + + + + + Fuel + + + Garage Inniger + #style-Fuel + + 7.5660783,46.4900069,0 + + + + #style-Fuel + + 7.5926292,46.5284662,0 + + + + #style-Fuel + + 7.442845,46.458965,0 + + + + + Cinema + + + Ciné Rex + #style-Cinema + + 7.5630412,46.4929077,0 + + + + + Hotel + + + Hotel Crea + #style-Hotel + + 7.5676532,46.4982767,0 + + + + Hotel Hari + #style-Hotel + + 7.5650953,46.4963004,0 + + + + Bellevue + #style-Hotel + + 7.5563578,46.4921191,0 + + + + Kreuz + #style-Hotel + + 7.4409986,46.4570553,0 + + + + Krone + #style-Hotel + + 7.4426496,46.4567252,0 + + + + Wildstrubel + #style-Hotel + + 7.4430785,46.4574807,0 + + + + Hotel des Alpes + #style-Hotel + + 7.5387572,46.4794195,0 + + + + Viktoria Eden + #style-Hotel + + 7.5600327,46.4933357,0 + + + + Berghaus Bärtschi + #style-Hotel + + 7.5632096,46.4454517,0 + + + + Tenne + #style-Hotel + + 7.4461369,46.4589363,0 + + + + Parkhotel Bellevue + #style-Hotel + + 7.4398359,46.455012,0 + + + + Simmenhof + #style-Hotel + + 7.4346619,46.4729836,0 + + + + Iffigenalp + #style-Hotel + + 7.4415194,46.4002088,0 + + + + Reka Feriendorf + #style-Hotel + + 7.4317292,46.4681013,0 + + + + Bären + #style-Hotel + + 7.5583384,46.4923431,0 + + + + Spillgerten + #style-Hotel + + 7.4824764,46.5681752,0 + + + + Hotel Steinmattli + #style-Hotel + + 7.555973,46.4892051,0 + + + + Alpina + #style-Hotel + + 7.5670248,46.4845444,0 + + + + + Restaurant + + + Sillerenbühl + #style-Restaurant + + 7.5177184,46.4713607,0 + + + + Berghaus Stoss + #style-Restaurant + + 7.4294222,46.4403995,0 + + + + Geilsbrüggli + #style-Restaurant + + 7.5134309,46.4571755,0 + + + + #style-Restaurant + + 7.4954338,46.4528516,0 + + + + Standhütte + #style-Restaurant + + 7.4947421,46.443782,0 + + + + #style-Restaurant + + 7.56919,46.4384245,0 + + + + Wallegstübli + #style-Restaurant + + 7.4251977,46.4550003,0 + + + + Betelberghütte + #style-Restaurant + + 7.4209174,46.4353096,0 + + + + Chüejer Stuba + #style-Restaurant + + 7.5083945,46.4586075,0 + + + + Hotel des Alpes + #style-Restaurant + + 7.5387572,46.4794195,0 + + + + Berghaus Tschentenalp + #style-Restaurant + + 7.5457297,46.4987315,0 + + + + Stierenberg + #style-Restaurant + + 7.4394912,46.5665216,0 + + + + #style-Restaurant + + 7.4761515,46.4266593,0 + + + + Tenne + #style-Restaurant + + 7.4461369,46.4589363,0 + + + + Andy&apos;s Pub, Terrasse + #style-Restaurant + + 7.4436412,46.4558537,0 + + + + Pizzeria Roberto + #style-Restaurant + + 7.4426305,46.457097,0 + + + + Krone + #style-Restaurant + + 7.4427032,46.4566172,0 + + + + Anker + #style-Restaurant + + 7.442741,46.4572569,0 + + + + Pizzeria Antica Posta + #style-Restaurant + + 7.4418719,46.457229,0 + + + + Rohrbach + #style-Restaurant + + 7.6024672,46.5500964,0 + + + + Bunderalp Berghaus + #style-Restaurant + + 7.6011565,46.4904257,0 + + + + Hohliebestübli + #style-Restaurant + + 7.5737679,46.48547,0 + + + + Restaurant Siebenbrunnen + #style-Restaurant + + 7.4901423,46.4168265,0 + + + + Berghölzli + #style-Restaurant + + 7.4229564,46.4967046,0 + + + + Gasthaus Elsigbach + #style-Restaurant + + 7.606331,46.5289162,0 + + + + Wildstrubel + #style-Restaurant + + 7.5599318,46.4813358,0 + + + + Kuspo + #style-Restaurant + + 7.4527733,46.4494679,0 + + + + Bühlberg + #style-Restaurant + + 7.469499,46.4536402,0 + + + + #style-Restaurant + + 7.5124053,46.4727902,0 + + + + Berghaus Höchst + #style-Restaurant + + 7.6035985,46.516601,0 + + + + #style-Restaurant + + 7.5059586,46.4504356,0 + + + + + Hospital + + + + Toilet + + + + + Ski_Runs + + Ski_Run_Downhill + + Ski_Run_Downhill_Easy + + + , Downhill Run Difficulty: Easy + #style-Ski_Run_Downhill_Easy + + relativeToGround + 7.429755,46.4386039,0 7.4293368,46.4393223,0 7.429232,46.4404117,0 7.4293996,46.441124,0 7.4300282,46.4415011,0 7.4296801,46.4435027,0 7.4304432,46.4436726,0 7.4309129,46.4436944,0 7.4311473,46.4436377,0 + + + + 25 + 25, Downhill Run Difficulty: Easy + #style-Ski_Run_Downhill_Easy + + relativeToGround + 7.4878089,46.443423,0 7.4877097,46.4433227,0 7.4862994,46.4433438,0 7.4839067,46.4431223,0 7.482119,46.4430627,0 7.4773624,46.442722,0 7.4739186,46.4425618,0 7.4726715,46.4431339,0 7.4712165,46.4431469,0 + + + + 21 + 21, Downhill Run Difficulty: Easy + #style-Ski_Run_Downhill_Easy + + relativeToGround + 7.4979152,46.4417323,0 7.4975394,46.4421891,0 7.4973136,46.4422123,0 7.4966307,46.4419276,0 7.4956492,46.4412029,0 7.4950704,46.4411561,0 7.4935875,46.4409666,0 7.4916014,46.4405342,0 7.4899677,46.4413831,0 7.4890906,46.4415271,0 7.4877254,46.4414311,0 7.4850666,46.4418636,0 7.482119,46.4430627,0 + + + + , Downhill Run Difficulty: Easy + #style-Ski_Run_Downhill_Easy + + relativeToGround + 7.4862994,46.4433438,0 7.4862235,46.4429825,0 7.486705,46.4424627,0 7.4890906,46.4415271,0 7.4895612,46.4412262,0 7.489583,46.4406462,0 7.4890687,46.4396996,0 7.4889051,46.4389092,0 7.488508,46.4385783,0 + + + + 29 + 29, Downhill Run Difficulty: Easy + #style-Ski_Run_Downhill_Easy + + relativeToGround + 7.4951921,46.4444865,0 7.4948475,46.4446679,0 7.4910249,46.4455562,0 7.490986,46.4460492,0 7.4907888,46.4463504,0 7.4907043,46.4468387,0 7.4909002,46.4469646,0 7.4931591,46.4473935,0 7.4934449,46.4474943,0 7.4935055,46.4476487,0 7.4918349,46.4503992,0 7.4914431,46.450472,0 7.4913811,46.4506976,0 + + + + 27 + 27, Downhill Run Difficulty: Easy + #style-Ski_Run_Downhill_Easy + + relativeToGround + 7.4753104,46.4467318,0 7.4742803,46.4466354,0 7.4734687,46.4464045,0 7.4728137,46.4460338,0 7.4722901,46.4454816,0 7.4719258,46.4449058,0 7.4712165,46.4431469,0 7.4702165,46.4426691,0 7.469432,46.4425057,0 7.4683009,46.4424017,0 7.4681436,46.4424662,0 7.4682319,46.4426424,0 + + + + 34 + 34, Downhill Run Difficulty: Easy + #style-Ski_Run_Downhill_Easy + + relativeToGround + 7.4914805,46.4507107,0 7.4913811,46.4506976,0 7.4891761,46.4507056,0 7.4885692,46.4500736,0 7.4861844,46.4492757,0 7.4861011,46.4492478,0 7.484473,46.448703,0 7.4838871,46.4485069,0 7.4832597,46.4477197,0 7.4815483,46.4467728,0 7.4810792,46.4465722,0 7.4804303,46.4464648,0 7.4794506,46.4464069,0 7.4786449,46.4466018,0 7.4778745,46.4467856,0 7.4773741,46.4467058,0 7.4766312,46.4464834,0 7.4753104,46.4467318,0 7.4751279,46.4473859,0 + + + + , Downhill Run Difficulty: Easy + #style-Ski_Run_Downhill_Easy + + relativeToGround + 7.5183847,46.4722004,0 7.517934,46.471763,0 7.517821,46.4717479,0 7.5175412,46.4714731,0 7.5159991,46.4705791,0 7.5149527,46.4698298,0 7.5145904,46.4695704,0 7.514402,46.4689378,0 7.5134881,46.4678641,0 7.5128847,46.4677487,0 7.5125031,46.4673228,0 7.5119884,46.4670388,0 7.5118409,46.4666988,0 + + + + , Downhill Run Difficulty: Easy + #style-Ski_Run_Downhill_Easy + + relativeToGround + 7.4977486,46.4514628,0 7.497407,46.4524101,0 7.4968324,46.4531477,0 7.4968557,46.453831,0 7.4979505,46.4552131,0 7.5010796,46.4572863,0 7.5044316,46.4577113,0 7.5048258,46.4577613,0 7.5065939,46.4574074,0 7.5087808,46.4574575,0 + + + + , Downhill Run Difficulty: Easy + #style-Ski_Run_Downhill_Easy + + relativeToGround + 7.49497,46.4533356,0 7.494742,46.4530283,0 7.4942068,46.4527205,0 7.4938455,46.451717,0 7.4928553,46.4509811,0 + + + + , Downhill Run Difficulty: Easy + #style-Ski_Run_Downhill_Easy + + relativeToGround + 7.4981254,46.4509924,0 7.4981368,46.4511522,0 7.4977486,46.4514628,0 7.4950854,46.451349,0 7.4928553,46.4509811,0 7.4914805,46.4507107,0 7.4915714,46.4504852,0 + + + + , Downhill Run Difficulty: Easy + #style-Ski_Run_Downhill_Easy + + relativeToGround + 7.4981254,46.4509924,0 7.4981445,46.4508305,0 7.4953246,46.4501477,0 7.4939146,46.450458,0 7.4928553,46.4509811,0 + + + + , Downhill Run Difficulty: Easy + #style-Ski_Run_Downhill_Easy + + relativeToGround + 7.5065878,46.4609089,0 7.5067588,46.4608409,0 7.5083597,46.4611852,0 7.5098203,46.4621242,0 7.5110321,46.4621081,0 7.5117865,46.462373,0 7.5122119,46.4631514,0 7.5129021,46.4633842,0 7.5135922,46.4634885,0 7.5141059,46.4636811,0 7.5149084,46.4637212,0 7.5157912,46.4643071,0 7.5168907,46.4644435,0 7.5179821,46.4643312,0 7.5187686,46.4646121,0 7.5204138,46.4662252,0 7.5208392,46.4662332,0 7.521409,46.4661208,0 7.5222597,46.4662894,0 7.5230542,46.4669796,0 7.523608,46.4678463,0 7.5241429,46.4682155,0 + + + + , Downhill Run Difficulty: Easy + #style-Ski_Run_Downhill_Easy + + relativeToGround + 7.5326801,46.4684788,0 7.532755,46.468548,0 + + + + , Downhill Run Difficulty: Easy + #style-Ski_Run_Downhill_Easy + + relativeToGround + 7.5316173,46.4680148,0 7.5324807,46.4685101,0 7.5326801,46.4684788,0 7.5328962,46.4684417,0 7.5329356,46.4685522,0 7.5327143,46.4686321,0 7.532755,46.468548,0 + + + + , Downhill Run Difficulty: Easy + #style-Ski_Run_Downhill_Easy + + relativeToGround + 7.4931915,46.4549659,0 7.4929375,46.454661,0 + + + + , Downhill Run Difficulty: Easy + #style-Ski_Run_Downhill_Easy + + relativeToGround + 7.4925723,46.455196,0 7.492699,46.454997,0 7.4929375,46.454661,0 7.4942068,46.4527205,0 + + + + , Downhill Run Difficulty: Easy + #style-Ski_Run_Downhill_Easy + + relativeToGround + 7.492699,46.454997,0 7.4910376,46.4540056,0 + + + + , Downhill Run Difficulty: Easy + #style-Ski_Run_Downhill_Easy + + relativeToGround + 7.5132264,46.4562522,0 7.5130985,46.4572035,0 + + + + , Downhill Run Difficulty: Easy + #style-Ski_Run_Downhill_Easy + + relativeToGround + 7.4851581,46.4533824,0 7.4845569,46.4536013,0 7.4839198,46.4538334,0 7.482829,46.4540915,0 7.4815336,46.4540876,0 7.4800837,46.4537836,0 7.4779806,46.4533427,0 7.4772153,46.4531822,0 7.4764495,46.4530216,0 7.4753254,46.4534852,0 7.474042,46.4536903,0 7.4726118,46.4532512,0 7.472292,46.4528248,0 7.4722433,46.4525611,0 7.4719968,46.4512258,0 7.4713736,46.45107,0 7.4709826,46.4512884,0 + + + + , Downhill Run Difficulty: Easy + #style-Ski_Run_Downhill_Easy + + relativeToGround + 7.4910376,46.4540056,0 7.490236,46.4537956,0 7.4895041,46.4536038,0 7.4851581,46.4533824,0 7.4822321,46.4520159,0 7.4770883,46.4509952,0 7.4722247,46.4508951,0 7.4717194,46.4509989,0 7.4713736,46.45107,0 + + + + , Downhill Run Difficulty: Easy + #style-Ski_Run_Downhill_Easy + + relativeToGround + 7.4951921,46.4444865,0 7.4952107,46.4438631,0 7.4956323,46.4435254,0 7.495863,46.4431325,0 7.4958466,46.442669,0 7.4956544,46.4421238,0 7.4950704,46.4411561,0 7.4949338,46.4409187,0 + + + + , Downhill Run Difficulty: Easy + #style-Ski_Run_Downhill_Easy + + relativeToGround + 7.5749906,46.4438887,0 7.5747715,46.4435867,0 7.5745699,46.4428739,0 7.5733777,46.441992,0 7.572843,46.4418712,0 7.5718612,46.4418531,0 7.5706985,46.4416291,0 7.5686003,46.4406872,0 7.568574,46.4409349,0 + + + + , Downhill Run Difficulty: Easy + #style-Ski_Run_Downhill_Easy + + relativeToGround + 7.5747715,46.4435867,0 7.574491,46.4435383,0 7.5730797,46.442439,0 7.5710547,46.4418652,0 7.5706985,46.4416291,0 + + + + , Downhill Run Difficulty: Easy + #style-Ski_Run_Downhill_Easy + + relativeToGround + 7.5687446,46.4376384,0 7.5689165,46.4376761,0 + + + + , Downhill Run Difficulty: Easy + #style-Ski_Run_Downhill_Easy + + relativeToGround + 7.5796203,46.43089,0 7.5799907,46.430675,0 7.5796593,46.4304735,0 7.578977,46.4304601,0 7.5783532,46.4302854,0 7.5755031,46.4292776,0 7.5748052,46.4286596,0 7.5743958,46.4286596,0 7.5737135,46.4284983,0 7.5734796,46.4281759,0 7.5725634,46.4274234,0 7.5717446,46.4273025,0 7.5712377,46.4269128,0 7.5701071,46.4264963,0 7.5693858,46.4272756,0 7.568684,46.4286999,0 7.5675338,46.4293717,0 7.5661994,46.4295295,0 7.5655793,46.4299569,0 7.5652203,46.4312391,0 7.5641106,46.4323413,0 7.5639801,46.433466,0 7.5648939,46.434973,0 7.5668522,46.4368849,0 7.5682133,46.437843,0 7.5685649,46.4378322,0 7.5687446,46.4376384,0 7.5688149,46.4375738,0 + + + + , Downhill Run Difficulty: Easy + #style-Ski_Run_Downhill_Easy + + relativeToGround + 7.5686003,46.4406872,0 7.5679939,46.4406328,0 + + + + , Downhill Run Difficulty: Easy + #style-Ski_Run_Downhill_Easy + + relativeToGround + 7.5065878,46.4609089,0 7.5056954,46.4603339,0 7.5058002,46.4601367,0 7.5057016,46.4599519,0 7.5066207,46.4591145,0 7.5076954,46.4577884,0 7.5087808,46.4574575,0 + + + + , Downhill Run Difficulty: Easy + #style-Ski_Run_Downhill_Easy + + relativeToGround + 7.5118409,46.4666988,0 7.5115891,46.4663378,0 7.5114205,46.4658587,0 7.510968,46.4655037,0 7.5107994,46.4648471,0 7.5087141,46.4627352,0 7.5081285,46.461697,0 7.5065878,46.4609089,0 + + + + Kuonisbergliweg + Kuonisbergliweg, Downhill Run Difficulty: Easy + #style-Ski_Run_Downhill_Easy + + relativeToGround + 7.5508319,46.4815667,0 7.550886,46.481604,0 7.551017,46.481662,0 7.5517182,46.4815741,0 7.551993,46.481463,0 7.552258,46.481249,0 7.552478,46.481152,0 7.5528719,46.4810715,0 7.552972,46.481051,0 7.553187,46.480938,0 7.553375,46.480816,0 + + + + , Downhill Run Difficulty: Easy + #style-Ski_Run_Downhill_Easy + + relativeToGround + 7.5087808,46.4574575,0 7.5087624,46.4574732,0 7.5107571,46.4570949,0 7.512456,46.4571319,0 7.5130985,46.4572035,0 + + + + , Downhill Run Difficulty: Easy + #style-Ski_Run_Downhill_Easy + + relativeToGround + 7.4845569,46.4536013,0 7.4839705,46.4533006,0 7.4836023,46.4532825,0 7.4830277,46.4536666,0 7.4828207,46.453771,0 7.4826873,46.4537037,0 7.4825462,46.4531781,0 7.4822413,46.4531495,0 7.4808929,46.4536839,0 7.4800837,46.4537836,0 + + + + , Downhill Run Difficulty: Easy + #style-Ski_Run_Downhill_Easy + + relativeToGround + 7.471843,46.4529933,0 7.4722433,46.4525611,0 + + + + , Downhill Run Difficulty: Easy + #style-Ski_Run_Downhill_Easy + + relativeToGround + 7.4781023,46.4524789,0 7.4772153,46.4531822,0 + + + + , Downhill Run Difficulty: Easy + #style-Ski_Run_Downhill_Easy + + relativeToGround + 7.553375,46.480816,0 7.5536347,46.4807515,0 7.5541829,46.4807074,0 + + + + , Downhill Run Difficulty: Easy + #style-Ski_Run_Downhill_Easy + + relativeToGround + 7.4726118,46.4532512,0 7.4711386,46.4537235,0 7.4702555,46.4537971,0 7.4698184,46.4537065,0 7.4705402,46.4532965,0 + + + + , Downhill Run Difficulty: Easy + #style-Ski_Run_Downhill_Easy + + relativeToGround + 7.4966949,46.4456829,0 7.4987868,46.4474642,0 7.4990254,46.4485493,0 7.4986786,46.4497374,0 7.4981254,46.4509924,0 + + + + , Downhill Run Difficulty: Easy + #style-Ski_Run_Downhill_Easy + + relativeToGround + 7.4851581,46.4533824,0 7.4819071,46.4527893,0 7.4795821,46.4527576,0 7.4781023,46.4524789,0 7.4750189,46.4518982,0 7.4730834,46.4513691,0 7.4719968,46.4512258,0 + + + + , Downhill Run Difficulty: Easy + #style-Ski_Run_Downhill_Easy + + relativeToGround + 7.4779806,46.4533427,0 7.4774841,46.453759,0 7.4769609,46.4539583,0 7.4764209,46.4537428,0 7.4760416,46.4536833,0 7.475667,46.4538882,0 7.4750873,46.4539986,0 7.474042,46.4536903,0 + + + + , Downhill Run Difficulty: Easy + #style-Ski_Run_Downhill_Easy + + relativeToGround + 7.5541829,46.4807074,0 7.5541599,46.4812366,0 7.5544557,46.4816299,0 7.555156,46.4817335,0 7.5553097,46.4822055,0 7.5554386,46.4823711,0 7.5559054,46.4825407,0 7.5568671,46.4822132,0 7.5569895,46.4818235,0 + + + + 2 + 2, Downhill Run Difficulty: Easy + #style-Ski_Run_Downhill_Easy + + relativeToGround + 7.4314691,46.4551589,0 7.4322178,46.4554411,0 7.4328404,46.4555345,0 7.4337122,46.4559081,0 7.4347085,46.4560638,0 7.4353574,46.456162,0 7.4358604,46.4560015,0 7.4367179,46.4557467,0 7.4372508,46.4549744,0 7.4376135,46.4546647,0 7.4373964,46.4539233,0 7.4375265,46.4532365,0 7.4372187,46.4531533,0 + + + + 33 + 33, Downhill Run Difficulty: Easy + #style-Ski_Run_Downhill_Easy + + relativeToGround + 7.4861011,46.4492478,0 7.4844268,46.4491036,0 7.4832187,46.4488441,0 7.4823814,46.4481279,0 7.4814712,46.4478087,0 7.4801554,46.4478027,0 7.4781901,46.4484089,0 7.4742765,46.4489608,0 7.4741321,46.4490468,0 7.473553,46.4493747,0 7.4717194,46.4509989,0 + + + + + Ski_Run_Downhill_Intermediate + + + 10 + 10, Downhill Run Difficulty: Intermediate + #style-Ski_Run_Downhill_Intermediate + + relativeToGround + 7.4144876,46.4472294,0 7.4149494,46.4475565,0 7.4152025,46.4477358,0 7.4154562,46.4478744,0 7.4167849,46.4483173,0 7.4184458,46.4500257,0 7.4214671,46.4526673,0 7.4235868,46.4533633,0 7.4242828,46.4539644,0 7.4253268,46.4544231,0 7.4260386,46.4555146,0 7.4271775,46.4562739,0 7.4277562,46.456385,0 7.4290744,46.4572198,0 7.4301992,46.4575186,0 7.4306302,46.4578101,0 7.4308495,46.4581425,0 7.4308935,46.458415,0 7.4307004,46.4584832,0 + + + + , Downhill Run Difficulty: Intermediate + #style-Ski_Run_Downhill_Intermediate + + relativeToGround + 7.409078,46.428856,0 7.4088684,46.4289664,0 7.4097542,46.4296455,0 7.410372,46.429866,0 7.411328,46.4299305,0 7.4122236,46.4299962,0 7.4128546,46.4302951,0 7.4136666,46.4313138,0 7.4162843,46.432802,0 7.4231145,46.4368711,0 7.4240783,46.4371015,0 7.424352,46.4373373,0 7.4244344,46.4376043,0 7.4240992,46.4384424,0 7.4241315,46.4385919,0 7.4242878,46.4386938,0 7.4245455,46.4386572,0 7.4257962,46.4380443,0 7.4269373,46.437921,0 7.4275298,46.4379127,0 7.4279308,46.4380355,0 7.4281223,46.438196,0 7.4281845,46.4387147,0 7.4285697,46.4391626,0 7.4287027,46.4394043,0 7.4286423,46.4398709,0 7.4286906,46.4401292,0 7.4289808,46.4403209,0 7.429232,46.4404117,0 7.429151,46.440554,0 + + + + , Downhill Run Difficulty: Intermediate + #style-Ski_Run_Downhill_Intermediate + + relativeToGround + 7.4948475,46.4446679,0 7.4937003,46.444504,0 + + + + , Downhill Run Difficulty: Intermediate + #style-Ski_Run_Downhill_Intermediate + + relativeToGround + 7.4877097,46.4433227,0 7.4872195,46.4435325,0 7.4865607,46.4435325,0 7.4841571,46.443395,0 7.4823979,46.4436194,0 7.4816834,46.4439676,0 + + + + , Downhill Run Difficulty: Intermediate + #style-Ski_Run_Downhill_Intermediate + + relativeToGround + 7.4841571,46.443395,0 7.4839067,46.4431223,0 + + + + 42 + 42, Downhill Run Difficulty: Intermediate + #style-Ski_Run_Downhill_Intermediate + + relativeToGround + 7.507632,46.44102,0 7.5076886,46.4408745,0 7.5079708,46.4410277,0 7.5086923,46.4410277,0 7.5091432,46.4420156,0 7.5088441,46.4425016,0 7.5066391,46.4435205,0 7.5059548,46.4445545,0 7.5060916,46.4454973,0 7.5055594,46.4485083,0 7.5066087,46.4500898,0 7.5079037,46.4503452,0 7.508768,46.4505156,0 7.5108818,46.4516561,0 7.5119614,46.4529182,0 7.5130411,46.4538915,0 7.5136795,46.4546008,0 7.5135329,46.455249,0 7.5134633,46.4557785,0 7.5132264,46.4562522,0 7.5133239,46.456517,0 7.5135374,46.456532,0 7.5134775,46.4563718,0 + + + + , Downhill Run Difficulty: Intermediate + #style-Ski_Run_Downhill_Intermediate + + relativeToGround + 7.494809,46.462495,0 7.4945658,46.4625743,0 7.4944643,46.4625499,0 7.4944832,46.4624806,0 7.4939029,46.4614558,0 7.491698,46.459654,0 7.4913687,46.4586774,0 7.4918389,46.45772,0 7.4931915,46.4549659,0 7.49497,46.4533356,0 + + + + 55 + 55, Downhill Run Difficulty: Intermediate + #style-Ski_Run_Downhill_Intermediate + + relativeToGround + 7.4944832,46.4624806,0 7.4946897,46.4623555,0 7.4948693,46.462373,0 7.4953055,46.4625448,0 7.4966403,46.4646571,0 7.4987475,46.4646495,0 7.5003928,46.4650414,0 7.5015139,46.4653964,0 7.5032905,46.4674926,0 7.5062062,46.4683885,0 7.5078412,46.4692527,0 7.5081555,46.4737303,0 7.5098447,46.4750362,0 7.5119216,46.4781195,0 7.511841,46.4787868,0 7.5153242,46.4822775,0 7.5197463,46.483668,0 7.5198736,46.4840895,0 7.5194921,46.4842678,0 + + + + , Downhill Run Difficulty: Intermediate + #style-Ski_Run_Downhill_Intermediate + + relativeToGround + 7.6214035,46.5184624,0 7.6206061,46.5185013,0 7.6200227,46.5186374,0 7.619556,46.5189097,0 7.6191476,46.5193181,0 7.6182141,46.5193375,0 7.6178835,46.5192792,0 7.6178641,46.5181707,0 7.6177474,46.5177623,0 7.6176307,46.5175484,0 7.6168139,46.5171789,0 7.6164833,46.5166538,0 7.616036,46.5164399,0 7.6147525,46.5162065,0 7.6136877,46.5157618,0 7.6125232,46.5155388,0 7.6076942,46.5164486,0 7.6060633,46.5169747,0 7.605432,46.5170536,0 7.6044409,46.516792,0 7.6038575,46.516854,0 + + + + , Downhill Run Difficulty: Intermediate + #style-Ski_Run_Downhill_Intermediate + + relativeToGround + 7.6222677,46.5125575,0 7.6219536,46.5125696,0 7.6204665,46.5130361,0 7.6200208,46.5128293,0 7.6186894,46.5128372,0 7.6177891,46.5125865,0 7.6155716,46.5135034,0 7.6147737,46.5140404,0 7.6139445,46.5144307,0 7.6130136,46.5146209,0 7.6108572,46.5152546,0 7.6087275,46.5157391,0 7.608396,46.5153693,0 7.6079624,46.5152801,0 7.6056234,46.515944,0 7.6038575,46.516854,0 + + + + , Downhill Run Difficulty: Intermediate + #style-Ski_Run_Downhill_Intermediate + + relativeToGround + 7.6255371,46.5095259,0 7.6255618,46.5090433,0 7.6249926,46.5088453,0 7.6244357,46.5089072,0 7.6237799,46.5088329,0 7.6231982,46.5089814,0 7.622926,46.5089319,0 7.6216266,46.5090062,0 7.6211935,46.5088824,0 7.621144,46.5086349,0 7.6213173,46.5083751,0 7.6212554,46.5081771,0 7.6209552,46.5080301,0 7.6206413,46.5079572,0 7.6201032,46.5079796,0 7.619909,46.5078859,0 7.6192046,46.507952,0 7.6186945,46.5082071,0 7.618242,46.5086102,0 7.6170479,46.5090519,0 7.6134008,46.5099145,0 7.6119518,46.5104353,0 7.6115669,46.5107069,0 7.6102018,46.5110563,0 7.6098364,46.5112294,0 7.6103941,46.5118447,0 7.6116247,46.512287,0 7.6117594,46.5127485,0 7.6116055,46.5130946,0 7.6111248,46.5135561,0 7.6102983,46.513823,0 7.6087831,46.5148332,0 7.6079624,46.5152801,0 + + + + , Downhill Run Difficulty: Intermediate + #style-Ski_Run_Downhill_Intermediate + + relativeToGround + 7.6223085,46.5128439,0 7.6220228,46.5131772,0 7.621511,46.5141056,0 7.6214266,46.5149416,0 7.6207744,46.5165722,0 7.620101,46.517142,0 7.6197686,46.517605,0 7.6197092,46.5182816,0 7.621015,46.5182816,0 7.621478,46.5181985,0 7.6224277,46.5178305,0 7.6240841,46.5179513,0 7.6247575,46.5179513,0 7.6255728,46.5178449,0 7.6264944,46.5187665,0 + + + + , Downhill Run Difficulty: Intermediate + #style-Ski_Run_Downhill_Intermediate + + relativeToGround + 7.4304432,46.4436726,0 7.4305366,46.443984,0 7.4310658,46.4445755,0 7.4306634,46.4459898,0 7.4299914,46.4465483,0 7.4303109,46.4472287,0 7.4299762,46.4484049,0 7.4302564,46.4493078,0 7.4315017,46.4511447,0 7.4317586,46.452333,0 7.4318155,46.4525963,0 7.4324157,46.4535271,0 7.432081,46.4536883,0 7.4310303,46.4533336,0 7.4311741,46.453932,0 7.4314691,46.4551589,0 + + + + Tschuggen + Tschuggen, Downhill Run Difficulty: Intermediate + #style-Ski_Run_Downhill_Intermediate + + relativeToGround + 7.4124787,46.433968,0 7.4140186,46.4327481,0 7.4162843,46.432802,0 7.4176098,46.434637,0 7.4180369,46.4362139,0 7.4170285,46.4381829,0 7.416902,46.4392336,0 7.4160927,46.4416618,0 7.4163856,46.4433081,0 7.4158679,46.4447115,0 7.4172976,46.4466046,0 7.4210461,46.449263,0 7.4230297,46.4499123,0 7.4246353,46.4516699,0 7.4266629,46.4522852,0 7.4293861,46.4546281,0 7.4314691,46.4551589,0 + + + + , Downhill Run Difficulty: Intermediate + #style-Ski_Run_Downhill_Intermediate + + relativeToGround + 7.5241429,46.4682155,0 7.5254618,46.4675494,0 7.5271632,46.4670117,0 7.5281584,46.4670197,0 7.5307345,46.4680148,0 7.5316173,46.4680148,0 + + + + , Downhill Run Difficulty: Intermediate + #style-Ski_Run_Downhill_Intermediate + + relativeToGround + 7.4913687,46.4586774,0 7.4912344,46.4582615,0 7.4921282,46.4561049,0 7.4910376,46.4540056,0 + + + + , Downhill Run Difficulty: Intermediate + #style-Ski_Run_Downhill_Intermediate + + relativeToGround + 7.4979152,46.4417323,0 7.4956492,46.4412029,0 7.4949338,46.4409187,0 7.4918344,46.4396017,0 7.488508,46.4385783,0 7.4862388,46.4377746,0 7.4860119,46.4374343,0 7.4861862,46.4374136,0 7.4864068,46.4375038,0 + + + + 26 + 26, Downhill Run Difficulty: Intermediate + #style-Ski_Run_Downhill_Intermediate + + relativeToGround + 7.4951921,46.4444865,0 7.494774,46.444374,0 7.4937003,46.444504,0 7.4906334,46.4443422,0 7.4888241,46.4444869,0 7.4871181,46.4440733,0 7.4863944,46.4442402,0 7.4830048,46.443886,0 7.4816834,46.4439676,0 7.4795401,46.4450123,0 7.4783043,46.4457271,0 7.4766312,46.4464834,0 + + + + , Downhill Run Difficulty: Intermediate + #style-Ski_Run_Downhill_Intermediate + + relativeToGround + 7.488878,46.370053,0 7.4894455,46.3702172,0 7.4899918,46.3703752,0 7.4913225,46.3705818,0 7.4927658,46.3712292,0 7.4942814,46.3711794,0 7.4954185,46.370487,0 7.4959412,46.3696855,0 7.4968794,46.3691378,0 7.4980271,46.3691169,0 7.4985995,46.3690143,0 7.4991844,46.3686383,0 7.4992309,46.3684758,0 7.4987031,46.368402,0 7.4977817,46.3683076,0 7.4988279,46.3674945,0 7.4990444,46.3655523,0 7.4983227,46.3649547,0 7.4983115,46.3639782,0 7.4985155,46.3636965,0 7.4981554,46.3629178,0 7.4983227,46.3625145,0 7.4992609,46.3612196,0 7.5004156,46.3600741,0 7.5016225,46.3579494,0 7.5019726,46.3576574,0 7.5020488,46.357115,0 7.5018589,46.3561892,0 7.502039,46.3546121,0 7.5014259,46.3535992,0 7.5030858,46.3539977,0 7.5049621,46.353898,0 7.5024363,46.350461,0 7.5032301,46.3474473,0 + + + + , Downhill Run Difficulty: Intermediate + #style-Ski_Run_Downhill_Intermediate + + relativeToGround + 7.4899918,46.3703752,0 7.4900977,46.3710331,0 7.4897799,46.3720807,0 7.4893209,46.3741029,0 7.4888265,46.3742978,0 + + + + , Downhill Run Difficulty: Intermediate + #style-Ski_Run_Downhill_Intermediate + + relativeToGround + 7.5798737,46.4320992,0 7.5797957,46.4311319,0 7.5796203,46.43089,0 + + + + , Downhill Run Difficulty: Intermediate + #style-Ski_Run_Downhill_Intermediate + + relativeToGround + 7.5798737,46.4320992,0 7.5798711,46.4325194,0 7.5799962,46.432821,0 7.5804649,46.4331279,0 7.5815978,46.4342533,0 7.5818635,46.434668,0 7.5818869,46.4349533,0 7.5808556,46.4367572,0 7.5800508,46.4371395,0 7.5785547,46.437191,0 7.576949,46.4381409,0 7.576699,46.4385663,0 7.5763943,46.4385663,0 7.5759959,46.4382224,0 7.57373,46.4376025,0 7.5731128,46.4379471,0 7.570222,46.4383563,0 7.5696588,46.4383437,0 7.5691665,46.4381822,0 7.5685649,46.4378322,0 + + + + , Downhill Run Difficulty: Intermediate + #style-Ski_Run_Downhill_Intermediate + + relativeToGround + 7.5804649,46.4331279,0 7.5785664,46.434178,0 7.5767537,46.4348241,0 7.5762068,46.4355026,0 7.5753864,46.4358579,0 7.5743629,46.4359495,0 7.5725659,46.4366656,0 7.5696588,46.4383437,0 + + + + , Downhill Run Difficulty: Intermediate + #style-Ski_Run_Downhill_Intermediate + + relativeToGround + 7.5731128,46.4379471,0 7.5727761,46.4382333,0 7.5727077,46.438534,0 7.5728577,46.4387621,0 7.5731354,46.4393476,0 7.5730157,46.4396247,0 7.5726324,46.4399562,0 7.5721003,46.4402378,0 7.5709796,46.4402849,0 7.5686003,46.4406872,0 + + + + , Downhill Run Difficulty: Intermediate + #style-Ski_Run_Downhill_Intermediate + + relativeToGround + 7.4942814,46.3711794,0 7.4942998,46.3716666,0 7.4926402,46.3719589,0 7.4897799,46.3720807,0 + + + + , Downhill Run Difficulty: Intermediate + #style-Ski_Run_Downhill_Intermediate + + relativeToGround + 7.4899918,46.3703752,0 7.4932364,46.3691539,0 7.4938051,46.3683088,0 + + + + , Downhill Run Difficulty: Intermediate + #style-Ski_Run_Downhill_Intermediate + + relativeToGround + 7.6164187,46.5309288,0 7.6157406,46.5308985,0 7.6152942,46.5307285,0 7.6147089,46.5306361,0 7.6141852,46.5303588,0 7.6140774,46.5301278,0 7.614447,46.5292652,0 7.61437,46.5288801,0 7.6138155,46.5281716,0 7.6140774,46.5273244,0 7.6145086,46.5267853,0 7.6148167,46.5264618,0 7.6143084,46.5259997,0 7.614062,46.526277,0 7.6136153,46.5263232,0 7.6133842,46.526508,0 7.613338,46.5267699,0 7.6129553,46.5269559,0 + + + + , Downhill Run Difficulty: Intermediate + #style-Ski_Run_Downhill_Intermediate + + relativeToGround + 7.6230501,46.5217836,0 7.6227543,46.5219743,0 7.6224002,46.522133,0 7.6221374,46.5222917,0 7.6220837,46.5224246,0 7.6222393,46.5226387,0 7.6222768,46.52279,0 7.6224217,46.5229598,0 7.6226577,46.5230521,0 7.6229367,46.5232477,0 7.6229933,46.5233276,0 7.6229423,46.5234075,0 7.6228178,46.5233511,0 7.6226145,46.5232171,0 7.6225402,46.5232813,0 7.6226676,46.5234991,0 7.6227387,46.5237748,0 7.6227055,46.5240428,0 7.622677,46.5241963,0 7.6224463,46.5244646,0 7.6223114,46.5245824,0 7.6221921,46.5247769,0 7.6214839,46.5257434,0 7.6210848,46.5263482,0 7.6197054,46.5273804,0 7.6187807,46.5279121,0 7.617833,46.5283281,0 + + + + , Downhill Run Difficulty: Intermediate + #style-Ski_Run_Downhill_Intermediate + + relativeToGround + 7.4296801,46.4435027,0 7.4283947,46.4438683,0 7.4276134,46.4448795,0 7.4282822,46.4462702,0 7.4276225,46.4479365,0 7.4270854,46.4485039,0 7.4283468,46.4503228,0 7.4289924,46.4517144,0 7.4295822,46.4524001,0 7.4290117,46.4528401,0 7.429563,46.4533341,0 7.4311741,46.453932,0 + + + + , Downhill Run Difficulty: Intermediate + #style-Ski_Run_Downhill_Intermediate + + relativeToGround + 7.5465752,46.4729147,0 7.5468033,46.4729927,0 7.5471194,46.473351,0 7.5477099,46.4747335,0 7.5477488,46.4754147,0 7.5475016,46.4763233,0 7.5473399,46.4765628,0 7.5474617,46.4766434,0 7.5494984,46.4768773,0 7.5499886,46.4772338,0 7.550697,46.4782474,0 7.551339,46.4789507,0 7.5516645,46.4797119,0 7.5514629,46.4801692,0 7.547108,46.4815103,0 7.5470161,46.4816959,0 7.5469546,46.4819903,0 + + + + , Downhill Run Difficulty: Intermediate + #style-Ski_Run_Downhill_Intermediate + + relativeToGround + 7.5126782,46.4560798,0 7.5132264,46.4562522,0 + + + + , Downhill Run Difficulty: Intermediate + #style-Ski_Run_Downhill_Intermediate + + relativeToGround + 7.4871181,46.4440733,0 7.4865607,46.4435325,0 + + + + , Downhill Run Difficulty: Intermediate + #style-Ski_Run_Downhill_Intermediate + + relativeToGround + 7.5183847,46.4722004,0 7.5189475,46.4725535,0 7.519035,46.4731315,0 7.5188279,46.4738282,0 7.5187137,46.4739436,0 7.5188805,46.4742245,0 7.5191219,46.4746667,0 7.5187133,46.4762815,0 7.5185001,46.4767863,0 7.5178777,46.4770115,0 7.5180839,46.4781219,0 7.5180828,46.47883,0 7.5182874,46.480318,0 7.5183371,46.4806788,0 7.5191752,46.4813467,0 7.5196958,46.4814845,0 7.5213221,46.4813858,0 7.5216438,46.4815441,0 7.5206847,46.4840895,0 7.5202806,46.4840895,0 7.5198736,46.4840895,0 + + + + , Downhill Run Difficulty: Intermediate + #style-Ski_Run_Downhill_Intermediate + + relativeToGround + 7.4951921,46.4444865,0 7.4964088,46.4441724,0 7.4962012,46.4450654,0 7.4965848,46.4456381,0 7.4966949,46.4456829,0 7.4968375,46.445741,0 7.4994665,46.4454308,0 7.502031,46.4464909,0 7.5033031,46.4476891,0 7.5034979,46.4480839,0 7.5033917,46.4492225,0 7.5043972,46.4500412,0 7.5050304,46.4507279,0 7.5054974,46.4518283,0 7.5064786,46.4530981,0 7.5069655,46.4535058,0 7.5078037,46.4537953,0 7.5097169,46.4542769,0 7.5126782,46.4560798,0 7.5128506,46.4564315,0 7.5128984,46.4568706,0 7.5131163,46.4569628,0 + + + + , Downhill Run Difficulty: Intermediate + #style-Ski_Run_Downhill_Intermediate + + relativeToGround + 7.5185001,46.4767863,0 7.5187069,46.4771038,0 7.5180839,46.4781219,0 + + + + , Downhill Run Difficulty: Intermediate + #style-Ski_Run_Downhill_Intermediate + + relativeToGround + 7.5465752,46.4729147,0 7.5465588,46.4727969,0 7.5463224,46.4727762,0 7.5457549,46.4722521,0 7.5454878,46.4722027,0 + + + + , Downhill Run Difficulty: Intermediate + #style-Ski_Run_Downhill_Intermediate + + relativeToGround + 7.5180828,46.47883,0 7.5187473,46.4791376,0 7.5191845,46.4795753,0 7.5186215,46.4800315,0 7.5182874,46.480318,0 + + + + , Downhill Run Difficulty: Intermediate + #style-Ski_Run_Downhill_Intermediate + + relativeToGround + 7.4918389,46.45772,0 7.4953567,46.4572878,0 7.4978347,46.4561065,0 7.4983647,46.4560378,0 7.4991114,46.4562022,0 7.4996241,46.4568782,0 + + + + , Downhill Run Difficulty: Intermediate + #style-Ski_Run_Downhill_Intermediate + + relativeToGround + 7.5189475,46.4725535,0 7.520193,46.4732475,0 7.5214428,46.4736263,0 7.5205581,46.4749161,0 7.5201512,46.4752867,0 7.519466,46.4755006,0 7.5187133,46.4762815,0 + + + + 38 + 38, Downhill Run Difficulty: Intermediate + #style-Ski_Run_Downhill_Intermediate + + relativeToGround + 7.490236,46.4537956,0 7.4895639,46.4533929,0 7.4892057,46.4526215,0 7.4891761,46.4507056,0 + + + + 52 + 52, Downhill Run Difficulty: Intermediate + #style-Ski_Run_Downhill_Intermediate + + relativeToGround + 7.5003928,46.4650414,0 7.5023418,46.4647048,0 7.5008661,46.4641698,0 7.4994242,46.4632353,0 7.4992965,46.462876,0 7.4999102,46.4623177,0 7.5002146,46.4620329,0 7.5000366,46.4616093,0 7.5000901,46.4612612,0 7.4995804,46.4611479,0 7.4993116,46.4600075,0 7.4993116,46.4590555,0 7.4989271,46.4580207,0 7.4984584,46.4575571,0 7.4986987,46.4571762,0 7.4996241,46.4568782,0 7.5010796,46.4572863,0 + + + + 80 + 80, Downhill Run Difficulty: Intermediate + #style-Ski_Run_Downhill_Intermediate + + relativeToGround + 7.5464542,46.4719979,0 7.5467662,46.4722875,0 7.5465752,46.4729147,0 + + + + 84 + 84, Downhill Run Difficulty: Intermediate + #style-Ski_Run_Downhill_Intermediate + + relativeToGround + 7.546737,46.4678791,0 7.5477148,46.4684613,0 7.547106,46.4704934,0 7.5464542,46.4719979,0 7.5454878,46.4722027,0 7.5453695,46.4722278,0 7.5448716,46.4723836,0 7.5446572,46.4723806,0 7.5443664,46.4725512,0 7.5440913,46.4725106,0 7.5440027,46.472332,0 + + + + + Ski_Run_Downhill_Advanced + + + 40 + 40, Downhill Run Difficulty: Advanced + #style-Ski_Run_Downhill_Advanced + + relativeToGround + 7.5091432,46.4420156,0 7.5110414,46.4433129,0 7.5131315,46.4442903,0 7.5133879,46.4452478,0 7.5138387,46.4464089,0 7.5144526,46.4482402,0 7.5148288,46.449759,0 7.5147337,46.4509702,0 7.5151598,46.4521343,0 7.5147089,46.4532426,0 7.513803,46.4540077,0 7.5136795,46.4546008,0 + + + + , Downhill Run Difficulty: Advanced + #style-Ski_Run_Downhill_Advanced + + relativeToGround + 7.5796203,46.43089,0 7.5790744,46.4310512,0 7.5786846,46.4309841,0 7.5786456,46.4308094,0 7.5786261,46.4306213,0 7.5783532,46.4302854,0 7.5779052,46.4304352,0 7.5774045,46.430602,0 7.5768107,46.4309467,0 7.5761544,46.4311244,0 7.5750606,46.4314798,0 7.5744512,46.4321798,0 7.5740527,46.4330468,0 7.5730292,46.4338276,0 7.5724197,46.4338222,0 7.5706227,46.4345814,0 7.5697555,46.4354376,0 7.5682133,46.437843,0 + + + + , Downhill Run Difficulty: Advanced + #style-Ski_Run_Downhill_Advanced + + relativeToGround + 7.5761544,46.4311244,0 7.574334,46.4310113,0 7.5719744,46.4327452,0 7.5707477,46.4341668,0 7.5706227,46.4345814,0 + + + + , Downhill Run Difficulty: Advanced + #style-Ski_Run_Downhill_Advanced + + relativeToGround + 7.5780116,46.4306132,0 7.5779052,46.4304352,0 + + + + 51 + 51, Downhill Run Difficulty: Advanced + #style-Ski_Run_Downhill_Advanced + + relativeToGround + 7.4948693,46.462373,0 7.4995804,46.4611479,0 7.5044316,46.4577113,0 + + + + 30 + 30, Downhill Run Difficulty: Advanced + #style-Ski_Run_Downhill_Advanced + + relativeToGround + 7.4907043,46.4468387,0 7.4893805,46.447632,0 7.4884723,46.4480082,0 7.4862639,46.4481923,0 7.484473,46.448703,0 + + + + 4 + 4, Downhill Run Difficulty: Advanced + #style-Ski_Run_Downhill_Advanced + + relativeToGround + 7.4317586,46.452333,0 7.4337182,46.4524766,0 7.434805,46.4526768,0 7.4356699,46.4530141,0 7.436796,46.453005,0 + + + + 41 + 41, Downhill Run Difficulty: Advanced + #style-Ski_Run_Downhill_Advanced + + relativeToGround + 7.5110414,46.4433129,0 7.5110529,46.4437445,0 7.5106546,46.4441126,0 7.5107095,46.4447933,0 7.5100632,46.445353,0 7.5079719,46.4459569,0 7.5066993,46.4469162,0 7.5061861,46.4474935,0 7.5071655,46.4486165,0 7.5105129,46.4501148,0 7.5108818,46.4516561,0 + + + + 54 + 54, Downhill Run Difficulty: Advanced + #style-Ski_Run_Downhill_Advanced + + relativeToGround + 7.5079037,46.4503452,0 7.5092498,46.4524805,0 7.5097169,46.4542769,0 + + + + 57 + 57, Downhill Run Difficulty: Advanced + #style-Ski_Run_Downhill_Advanced + + relativeToGround + 7.4966403,46.4646571,0 7.5032905,46.4674926,0 + + + + 80 + 80, Downhill Run Difficulty: Advanced + #style-Ski_Run_Downhill_Advanced + + relativeToGround + 7.5465752,46.4729147,0 7.5475189,46.4734417,0 7.5477398,46.4739818,0 7.5496151,46.4749576,0 7.5498033,46.4759118,0 7.5509021,46.476891,0 7.5509823,46.4774471,0 7.5541829,46.4807074,0 + + + + + Ski_Run_Downhill_Expert + + + + Ski_Run_Downhill_Generic + + + , Downhill Run Difficulty: Unknown + #style-Ski_Run_Downhill_Generic + + relativeToGround + 7.5535228,46.4865284,0 7.5535075,46.4866379,0 + + + + , Downhill Run Difficulty: Unknown + #style-Ski_Run_Downhill_Generic + + relativeToGround + 7.6222148,46.5124924,0 7.6218631,46.5122645,0 7.6205305,46.5119903,0 7.620247,46.5118688,0 7.6199634,46.5115987,0 7.6199364,46.5109372,0 7.6197599,46.5108209,0 7.6194083,46.5108438,0 7.6191407,46.5109967,0 7.6180937,46.5111776,0 7.6178583,46.5110883,0 + + + + Oeystrasse + Oeystrasse, Downhill Run Difficulty: Unknown + #style-Ski_Run_Downhill_Generic + + relativeToGround + 7.5535075,46.4866379,0 7.5541077,46.486711,0 + + + + , Downhill Run Difficulty: Unknown + #style-Ski_Run_Downhill_Generic + + relativeToGround + 7.5541077,46.486711,0 7.5548912,46.486666,0 7.5549402,46.4863477,0 7.5553483,46.4864375,0 7.5563116,46.4862579,0 7.556932,46.4864783,0 7.5570137,46.4867477,0 7.557332,46.4869844,0 7.5583606,46.4869191,0 7.55863,46.4870334,0 7.5590626,46.4870252,0 + + + + , Downhill Run Difficulty: Unknown + #style-Ski_Run_Downhill_Generic + + relativeToGround + 7.5466507,46.4822665,0 7.5467405,46.4820455,0 7.5469546,46.4819903,0 7.546887,46.4821013,0 + + + + 55 + 55, Downhill Run Difficulty: Unknown + #style-Ski_Run_Downhill_Generic + + relativeToGround + 7.5202806,46.4840895,0 7.5206995,46.4843934,0 7.521236,46.4846116,0 7.5215509,46.4848385,0 7.5235622,46.4848575,0 7.5243291,46.4849987,0 7.5254277,46.4849455,0 7.5258912,46.484845,0 7.5262259,46.4849337,0 7.5263644,46.4850796,0 7.5270499,46.4847209,0 7.5281228,46.4845732,0 7.5287322,46.4845909,0 7.5299857,46.4847785,0 7.5301055,46.4847918,0 7.5322129,46.484865,0 7.5335432,46.4842858,0 7.5344616,46.4843804,0 7.5353629,46.4842622,0 7.5359808,46.4840021,0 7.5364272,46.4839903,0 7.5368933,46.4838149,0 7.5374056,46.4843272,0 7.5383498,46.4843331,0 7.5392338,46.4841794,0 7.5411564,46.483553,0 7.5426756,46.483618,0 7.5434451,46.4835786,0 + + + + , Downhill Run Difficulty: Unknown + #style-Ski_Run_Downhill_Generic + + relativeToGround + 7.5590626,46.4870252,0 7.5600259,46.4871885,0 7.5608912,46.4871232,0 7.5611443,46.4873681,0 + + + + , Downhill Run Difficulty: Unknown + #style-Ski_Run_Downhill_Generic + + relativeToGround + 7.5548912,46.486666,0 7.5561531,46.4869638,0 7.5573714,46.4873324,0 7.5584605,46.4875866,0 7.5585589,46.487845,0 + + + + , Downhill Run Difficulty: Unknown + #style-Ski_Run_Downhill_Generic + + relativeToGround + 7.5434451,46.4835786,0 7.5437149,46.4835647,0 + + + + , Downhill Run Difficulty: Unknown + #style-Ski_Run_Downhill_Generic + + relativeToGround + 7.5442346,46.4836269,0 7.5443418,46.4836053,0 + + + + , Downhill Run Difficulty: Unknown + #style-Ski_Run_Downhill_Generic + + relativeToGround + 7.5437149,46.4835647,0 7.5439543,46.4836822,0 7.5442346,46.4836269,0 + + + + , Downhill Run Difficulty: Unknown + #style-Ski_Run_Downhill_Generic + + relativeToGround + 7.5443418,46.4836053,0 7.5452866,46.4835281,0 7.5460156,46.4835284,0 7.5483036,46.4841284,0 + + + + , Downhill Run Difficulty: Unknown + #style-Ski_Run_Downhill_Generic + + relativeToGround + 7.5483036,46.4841284,0 7.5486892,46.4843265,0 7.5502237,46.4845773,0 7.5505897,46.4845683,0 7.5510877,46.4853643,0 7.5523785,46.486287,0 7.5528849,46.4864761,0 7.5535228,46.4865284,0 + + + + , Downhill Run Difficulty: Unknown + #style-Ski_Run_Downhill_Generic + + relativeToGround + 7.5033917,46.4492225,0 7.503756,46.4493929,0 7.5041471,46.4492925,0 7.5047479,46.4492921,0 7.5054788,46.4495257,0 7.5060307,46.4500934,0 7.5059038,46.4503571,0 7.5047888,46.4499534,0 7.5044793,46.4499425,0 7.5043972,46.4500412,0 + + + + + Ski_Run_Downhill_Easy_Gladed + + + + Ski_Run_Downhill_Intermediate_Gladed + + + + Ski_Run_Downhill_Advanced_Gladed + + + + Ski_Run_Downhill_Expert_Gladed + + + + Ski_Run_Downhill_Generic_Gladed + + + + Ski_Run_Downhill_Easy_Lit + + + + Ski_Run_Downhill_Intermediate_Lit + + + + Ski_Run_Downhill_Advanced_Lit + + + + Ski_Run_Downhill_Expert_Lit + + + + Ski_Run_Downhill_Generic_Lit + + + + + Ski_Run_Nordic + + Ski_Run_Nordic_Easy + + + + Ski_Run_Nordic_Intermediate + + + + Ski_Run_Nordic_Advanced + + + + Ski_Run_Nordic_Expert + + + + Ski_Run_Nordic_Generic + + + + Ski_Run_Nordic_Easy_Gladed + + + + Ski_Run_Nordic_Intermediate_Gladed + + + + Ski_Run_Nordic_Advanced_Gladed + + + + Ski_Run_Nordic_Expert_Gladed + + + + Ski_Run_Nordic_Generic_Gladed + + + + Ski_Run_Nordic_Easy_Lit + + + + Ski_Run_Nordic_Intermediate_Lit + + + + Ski_Run_Nordic_Advanced_Lit + + + + Ski_Run_Nordic_Expert_Lit + + + + Ski_Run_Nordic_Generic_Lit + + + + + + Ski_Routes + + + + Ski_Lift + + Ski_Lift_Chairlift + + + Walleg + Walleg (Chairlift) Capacity: people + Chairlift + #style-Ski_Lift_Chairlift + + relativeToGround + 7.4307004,46.4584832,0 7.414217,46.447336,0 + + + + Metschberg + Metschberg (Chairlift) Capacity:4 people + Chairlift + #style-Ski_Lift_Chairlift + + relativeToGround + 7.4682319,46.4426424,0 7.4878089,46.443423,0 + + + + Luegli + Luegli (Chairlift) Capacity:4 people + Chairlift + #style-Ski_Lift_Chairlift + + relativeToGround + 7.5134775,46.4563718,0 7.507632,46.44102,0 + + + + Lavey + Lavey (Chairlift) Capacity:5 people + Chairlift + #style-Ski_Lift_Chairlift + + relativeToGround + 7.5137218,46.4574839,0 7.494809,46.462495,0 + + + + Aebi-Sillerenbühl + Aebi-Sillerenbühl (Chairlift) Capacity:6 people + Chairlift + #style-Ski_Lift_Chairlift + + relativeToGround + 7.5194921,46.4842678,0 7.5183847,46.4722004,0 + + + + Metschstand + Metschstand (Chairlift) Capacity:6 people + Chairlift + #style-Ski_Lift_Chairlift + + relativeToGround + 7.4751279,46.4473859,0 7.4951921,46.4444865,0 + + + + Bühlberg + Bühlberg (Chairlift) Capacity: people + Chairlift + #style-Ski_Lift_Chairlift + + relativeToGround + 7.4709826,46.4512884,0 7.4925723,46.455196,0 + + + + (Chairlift) Capacity:2 people + Chairlift + #style-Ski_Lift_Chairlift + + relativeToGround + 7.5437149,46.4835647,0 7.5466507,46.4822665,0 + + + + Boden-Chuenisbärgli + Boden-Chuenisbärgli (Chairlift) Capacity:4 people + Chairlift + #style-Ski_Lift_Chairlift + + relativeToGround + 7.5570355,46.4818791,0 7.5465752,46.4729147,0 + + + + + Ski_Lift_Gondola + + + Stoss-Leiterli + Stoss-Leiterli (Gondola) Capacity: people + Gondola + #style-Ski_Lift_Gondola + + relativeToGround + 7.429151,46.440554,0 7.4162843,46.432802,0 7.409078,46.428856,0 + + + + Lenk-Stoss + Lenk-Stoss (Gondola) Capacity: people + Gondola + #style-Ski_Lift_Gondola + + relativeToGround + 7.436796,46.453005,0 7.429151,46.440554,0 + + + + Funitel Violettes-Plaine morte + Funitel Violettes-Plaine morte (Gondola) Capacity: people + Gondola + #style-Ski_Lift_Gondola + + relativeToGround + 7.4988727,46.3427065,0 7.4929566,46.358426,0 7.488878,46.370053,0 + + + + + Ski_Lift_Cable_Car + + + Geils-Hahnenmoos + Geils-Hahnenmoos (Cable Car) Capacity:4 people + Cable Car + #style-Ski_Lift_Cable_Car + + relativeToGround + 7.512872,46.457057,0 7.495256,46.453167,0 + + + + Metschbahn + Metschbahn (Cable Car) Capacity: people + Cable Car + #style-Ski_Lift_Cable_Car + + relativeToGround + 7.456975,46.44131,0 7.467957,46.442374,0 + + + + Elsigbach-Elsigenalp + Elsigbach-Elsigenalp (Cable Car) Capacity: people + Cable Car + #style-Ski_Lift_Cable_Car + + relativeToGround + 7.606468,46.529129,0 7.622388,46.522452,0 + + + + Gemmibahn + Gemmibahn (Cable Car) Capacity: people + Cable Car + #style-Ski_Lift_Cable_Car + + relativeToGround + 7.625227,46.383782,0 7.616339,46.398008,0 + + + + Sillerenbahn + Sillerenbahn (Cable Car) Capacity: people + Cable Car + #style-Ski_Lift_Cable_Car + + relativeToGround + 7.560206,46.487728,0 7.546887,46.4821013,0 7.532755,46.468548,0 7.517934,46.471763,0 + + + + Engstligenalp + Engstligenalp (Cable Car) Capacity: people + Cable Car + #style-Ski_Lift_Cable_Car + + relativeToGround + 7.566433,46.459076,0 7.56516,46.449387,0 + + + + Tschentenbahn + Tschentenbahn (Cable Car) Capacity: people + Cable Car + #style-Ski_Lift_Cable_Car + + relativeToGround + 7.55769,46.492944,0 7.5458795,46.4988409,0 + + + + (Cable Car) Capacity: people + Cable Car + #style-Ski_Lift_Cable_Car + + relativeToGround + 7.616339,46.398008,0 7.6132768,46.4028233,0 + + + + Iffigenalp-Rawil-Weisshorn + Iffigenalp-Rawil-Weisshorn (Cable Car) Capacity: people + Cable Car + #style-Ski_Lift_Cable_Car + + relativeToGround + 7.4432715,46.4012898,0 7.4554936,46.3839921,0 + + + + Iffigenalp-Rawil-Weisshorn + Iffigenalp-Rawil-Weisshorn (Cable Car) Capacity: people + Cable Car + #style-Ski_Lift_Cable_Car + + relativeToGround + 7.4554936,46.3839921,0 7.4728668,46.3822403,0 + + + + + Ski_Lift_Mixed_Lift + + + + Ski_Lift_Drag_Lift + + + Balmen + Balmen (Drag Lift) + Drag Lift + #style-Ski_Lift_Drag_Lift + + relativeToGround + 7.4311473,46.4436377,0 7.429755,46.4386039,0 + + + + (Drag Lift) + Drag Lift + #style-Ski_Lift_Drag_Lift + + relativeToGround + 7.5655255,46.449212,0 7.5679939,46.4406328,0 7.568652,46.4383091,0 + + + + (Drag Lift) + Drag Lift + #style-Ski_Lift_Drag_Lift + + relativeToGround + 7.568574,46.4409349,0 7.5749906,46.4438887,0 + + + + (Drag Lift) + Drag Lift + #style-Ski_Lift_Drag_Lift + + relativeToGround + 7.5689165,46.4376761,0 7.5758497,46.4318298,0 7.5777092,46.4308174,0 7.5779358,46.4307636,0 7.5786456,46.4308094,0 7.5796203,46.43089,0 7.5801782,46.4310221,0 7.5779827,46.4329768,0 7.5690523,46.4378121,0 7.5689165,46.4376761,0 + + + + (Drag Lift) + Drag Lift + #style-Ski_Lift_Drag_Lift + + relativeToGround + 7.5688149,46.4375738,0 7.5758005,46.4317871,0 7.5780116,46.4306132,0 + + + + Erli + Erli (Drag Lift) + Drag Lift + #style-Ski_Lift_Drag_Lift + + relativeToGround + 7.62299,46.3828465,0 7.6192261,46.3858283,0 + + + + + Ski_Lift_TBar + + + Guetfläck + Guetfläck (T-Bar) + T-Bar + #style-Ski_Lift_TBar + + relativeToGround + 7.4864068,46.4375038,0 7.4979322,46.4414643,0 + + + + (T-Bar) + T-Bar + #style-Ski_Lift_TBar + + relativeToGround + 7.4915714,46.4504852,0 7.4981254,46.4509924,0 + + + + (T-Bar) + T-Bar + #style-Ski_Lift_TBar + + relativeToGround + 7.6039602,46.5170216,0 7.6223253,46.5126763,0 + + + + (T-Bar) + T-Bar + #style-Ski_Lift_TBar + + relativeToGround + 7.6178567,46.5109719,0 7.6255759,46.5097159,0 + + + + Lac + Lac (T-Bar) + T-Bar + #style-Ski_Lift_TBar + + relativeToGround + 7.4938051,46.3683088,0 7.4894455,46.3702172,0 + + + + (T-Bar) + T-Bar + #style-Ski_Lift_TBar + + relativeToGround + 7.5074665,46.4712735,0 7.5028327,46.4648778,0 + + + + (T-Bar) + T-Bar + #style-Ski_Lift_TBar + + relativeToGround + 7.5440027,46.472332,0 7.546737,46.4678791,0 + + + + + Ski_Lift_JBar + + + Glacier 2 + Glacier 2 (J-Bar) + J-Bar + #style-Ski_Lift_JBar + + relativeToGround + 7.4888265,46.3742978,0 7.4889324,46.3707894,0 + + + + + Ski_Lift_Platter + + + Aebi + Aebi (Platter) + Platter + #style-Ski_Lift_Platter + + relativeToGround + 7.5212812,46.4844127,0 7.5220797,46.4823123,0 + + + + + Ski_Lift_Rope_Tow + + + (Rope Tow) + Rope Tow + #style-Ski_Lift_Rope_Tow + + relativeToGround + 7.5484827,46.4812398,0 7.5508319,46.4815667,0 + + + + (Rope Tow) + Rope Tow + #style-Ski_Lift_Rope_Tow + + relativeToGround + 7.5469546,46.4819903,0 7.5473199,46.4814378,0 + + + + + Ski_Lift_Magic_Carpet + + + (Magic Carpet) + Magic Carpet + #style-Ski_Lift_Magic_Carpet + + relativeToGround + 7.4705402,46.4532965,0 7.471843,46.4529933,0 + + + + + + Ski_Boundary + + + + Paths + + Tracks + + + Hörnliweg + #style-Tracks + + relativeToGround + 7.565494,46.5008679,0 7.5656791,46.500969,0 7.5658624,46.5011096,0 7.5661445,46.5013261,0 7.5666733,46.5015614,0 7.5667884,46.5017876,0 7.566748,46.5018344,0 7.5665807,46.5016761,0 7.5664381,46.5016324,0 7.566207,46.5016563,0 7.566185,46.501694,0 7.566361,46.501751,0 7.5664099,46.5018833,0 7.5665353,46.5022409,0 7.5667755,46.5024593,0 7.567001,46.502815,0 7.5669076,46.5033531,0 7.567179,46.5039149,0 7.5672453,46.5041525,0 7.5672579,46.5041977,0 7.5678887,46.5054809,0 7.5681607,46.5064122,0 7.5688551,46.5069114,0 7.5691378,46.50727,0 7.569223,46.5076089,0 + + + + #style-Tracks + + relativeToGround + 7.55826,46.4885102,0 7.5584046,46.4880564,0 + + + + #style-Tracks + + relativeToGround + 7.4722325,46.5557203,0 7.4723727,46.5554306,0 7.4724179,46.5554155,0 7.4725118,46.5554491,0 7.4727424,46.5554155,0 7.4729023,46.5555256,0 7.4730437,46.555317,0 7.4733032,46.5553483,0 7.4740136,46.5550725,0 7.4739997,46.5552336,0 7.4742734,46.5551527,0 7.4745005,46.5549001,0 7.4749441,46.5543583,0 7.4751759,46.5539538,0 7.4755333,46.553592,0 7.4758117,46.5533618,0 7.4763245,46.5528235,0 7.4764189,46.5523924,0 7.4765056,46.5521307,0 7.4766873,46.5520046,0 7.4768397,46.551354,0 7.4770067,46.5513012,0 7.4770917,46.5510639,0 7.4770507,46.5509437,0 7.4770712,46.5508704,0 7.4771386,46.5508675,0 7.4775372,46.5504953,0 7.4774844,46.5504337,0 7.4774962,46.5501231,0 7.4774346,46.5499824,0 7.4776193,46.5494988,0 7.4775987,46.5492526,0 7.4777043,46.5491032,0 7.477672,46.5489039,0 7.4778918,46.5485492,0 7.4777218,46.548388,0 7.4778537,46.5476319,0 7.4779563,46.5475235,0 7.4782259,46.5460844,0 7.4783314,46.5459819,0 7.4785542,46.5459877,0 7.4787066,46.5462515,0 7.4787887,46.5462486,0 7.4788473,46.545554,0 7.4790231,46.5455334,0 7.4790817,46.54517,0 7.478568,46.5448331,0 7.4780354,46.5446806,0 7.4778625,46.5448301,0 7.4774258,46.5445428,0 7.477209,46.5447317,0 7.4774324,46.5448121,0 7.4774294,46.5450385,0 7.4772894,46.5450534,0 7.4773102,46.5454377,0 7.4768455,46.5459619,0 7.4764762,46.5460662,0 7.4762915,46.5451696,0 7.475651,46.54469,0 7.4754752,46.5447048,0 7.4752578,46.5449461,0 7.4748378,46.5449342,0 7.4744892,46.5447019,0 7.4737832,46.5448538,0 7.4734436,46.5442044,0 7.4738309,46.5439482,0 7.4740882,46.5440764,0 7.4743068,46.5439397,0 7.4742902,46.543847,0 + + + + #style-Tracks + + relativeToGround + 7.57743,46.513533,0 7.57697,46.513383,0 7.576639,46.513398,0 7.575972,46.513236,0 7.5754347,46.51317,0 7.5735754,46.5130497,0 7.573283,46.513028,0 7.5727554,46.5131053,0 7.5725651,46.51319,0 7.572003,46.513318,0 7.57147,46.5134376,0 7.57086,46.513632,0 7.5704027,46.5136993,0 7.5698483,46.5135546,0 7.569485,46.513179,0 7.568995,46.512935,0 7.5682886,46.5130065,0 7.5676272,46.512977,0 7.567304,46.512969,0 7.566875,46.512785,0 7.566209,46.512784,0 7.565811,46.512851,0 7.5654903,46.5129931,0 7.565151,46.513025,0 + + + + #style-Tracks + + relativeToGround + 7.5243291,46.4849987,0 7.5247153,46.4845022,0 7.525197,46.4841121,0 + + + + #style-Tracks + + relativeToGround + 7.5439138,46.4880345,0 7.5436907,46.4883773,0 7.5436564,46.4888146,0 7.5445919,46.4885664,0 7.5449953,46.4886255,0 7.5454416,46.4885664,0 7.5460167,46.4881409,0 7.5460596,46.4878868,0 7.546257,46.4878336,0 7.5465059,46.4880227,0 7.546566,46.4882709,0 7.5471926,46.4885959,0 7.5477419,46.4888205,0 7.5486174,46.488986,0 7.5491066,46.4891869,0 7.5493813,46.4894646,0 7.5494156,46.4900083,0 7.5491066,46.4903747,0 7.5488834,46.4907942,0 7.5489435,46.4908828,0 7.5492268,46.4907528,0 7.5491152,46.4909124,0 7.5492783,46.4912079,0 7.549201,46.4915033,0 7.549304,46.4916747,0 7.5492783,46.4918933,0 7.5495186,46.4920647,0 7.550437,46.4920765,0 7.550909,46.4922242,0 7.5519562,46.492886,0 7.5520592,46.4934237,0 7.5523596,46.4936542,0 7.5524712,46.4936955,0 7.5525656,46.4936365,0 + + + + #style-Tracks + + relativeToGround + 7.5525656,46.4936365,0 7.5523274,46.4934746,0 7.5523274,46.4930905,0 7.5524115,46.4926899,0 7.5523257,46.4923796,0 7.5520468,46.4919365,0 7.5518322,46.4917444,0 7.5515532,46.4916706,0 7.5516391,46.4915228,0 7.551918,46.4915672,0 7.5524974,46.4918774,0 7.5528622,46.492099,0 7.553263,46.4922691,0 7.5533831,46.4923341,0 7.553469,46.4925764,0 7.5535806,46.4925409,0 7.5536063,46.4923164,0 7.5535291,46.4920859,0 7.5527051,46.4912587,0 7.5523274,46.4909928,0 7.5524562,46.4906559,0 7.552336,46.4902305,0 7.5524133,46.4901418,0 + + + + Panoramaweg + #style-Tracks + + relativeToGround + 7.5487911,46.4869921,0 7.5491129,46.4871325,0 7.5495421,46.4872654,0 7.5500785,46.4874058,0 7.5505077,46.4875462,0 7.5511729,46.4879007,0 7.5515698,46.4881962,0 7.5519668,46.4885951,0 7.5521814,46.4889718,0 7.5523638,46.489415,0 7.5523852,46.4897843,0 7.5524133,46.4901418,0 + + + + #style-Tracks + + relativeToGround + 7.5662091,46.4580919,0 7.5662713,46.458293,0 7.5669387,46.4587127,0 7.5669473,46.4590261,0 7.5667928,46.4591384,0 + + + + #style-Tracks + + relativeToGround + 7.4445475,46.5790933,0 7.4458753,46.5773845,0 7.4458753,46.57704,0 7.4458753,46.5764872,0 7.4454415,46.5759023,0 7.4449725,46.5753015,0 7.4445622,46.5747407,0 7.4442338,46.5745324,0 7.4439055,46.5743321,0 7.4437531,46.5740276,0 7.4435655,46.5738594,0 7.4435772,46.5737072,0 7.4437179,46.5733947,0 7.4436593,46.5731144,0 7.4434131,46.572858,0 7.4434131,46.5725455,0 7.4432606,46.5724094,0 7.443073,46.5721289,0 7.4428151,46.5718886,0 7.4427096,46.5716242,0 7.4423461,46.5711435,0 7.4418908,46.5708556,0 7.4414336,46.5705832,0 7.4412694,46.5703749,0 7.4410584,46.5698701,0 7.4408942,46.5694536,0 7.4408042,46.5690943,0 7.4407082,46.5687701,0 7.4404839,46.5684761,0 7.4403197,46.5681076,0 7.4402211,46.5678374,0 7.4401859,46.5675851,0 7.4401068,46.5672666,0 7.4399319,46.5670379,0 7.4398305,46.566828,0 7.4394297,46.5665636,0 7.4392764,46.5663903,0 + + + + #style-Tracks + + relativeToGround + 7.582288,46.50904,0 7.5818959,46.50922,0 7.5814771,46.5092119,0 7.58117,46.509261,0 7.580918,46.509277,0 7.5809353,46.5092018,0 7.581108,46.50897,0 7.581143,46.5088664,0 7.5811,46.508754,0 7.5810428,46.5086824,0 7.5809629,46.5086397,0 7.5806824,46.5085984,0 + + + + #style-Tracks + + relativeToGround + 7.5811311,46.5115993,0 7.5812245,46.5113495,0 7.581362,46.511302,0 7.581983,46.511495,0 7.5817095,46.5110604,0 + + + + #style-Tracks + + relativeToGround + 7.5659698,46.4470345,0 7.5650031,46.4460937,0 7.563934,46.445205,0 + + + + #style-Tracks + + relativeToGround + 7.5707798,46.4401998,0 7.569089,46.4414773,0 7.5687886,46.4416607,0 7.5684624,46.4417139,0 + + + + #style-Tracks + + relativeToGround + 7.5684624,46.4417139,0 7.5669518,46.4423053,0 7.5657759,46.4423822,0 7.5653982,46.4425064,0 7.5652008,46.4427608,0 7.5642996,46.4433581,0 7.564128,46.4436183,0 7.5631237,46.4440856,0 7.5624986,46.444518,0 + + + + #style-Tracks + + relativeToGround + 7.5633834,46.4449349,0 7.5632267,46.4453985,0 + + + + #style-Tracks + + relativeToGround + 7.5578623,46.4428613,0 7.5580572,46.4430058,0 7.558304,46.443065,0 7.5586366,46.4431167,0 7.5589907,46.4430946,0 7.5594091,46.4431389,0 7.5597284,46.4432301,0 7.5599777,46.4432794,0 7.5603342,46.4434764,0 + + + + #style-Tracks + + relativeToGround + 7.5014286,46.4245354,0 7.5006562,46.4241982,0 + + + + #style-Tracks + + relativeToGround + 7.5000468,46.4239793,0 7.4995318,46.4237071,0 7.4992657,46.4238313,0 7.4993,46.4240858,0 7.4987765,46.4239438,0 7.4983301,46.4237012,0 7.4979697,46.4233462,0 7.4974804,46.4232456,0 7.4969912,46.4232634,0 7.4965191,46.4230385,0 7.4949055,46.4225356,0 7.4928284,46.422293,0 7.4925108,46.4221865,0 7.4922705,46.4213819,0 7.4910088,46.421583,0 7.4907513,46.4216955,0 7.4911204,46.4219025,0 7.4904766,46.422222,0 7.4900475,46.4225415,0 7.4898844,46.4229202,0 7.4899359,46.4234704,0 7.489584,46.4236657,0 7.4893952,46.4239615,0 7.4878846,46.4243757,0 7.4875584,46.4246478,0 7.487052,46.4247839,0 7.4866143,46.4247898,0 7.4864512,46.4250915,0 7.4869662,46.4252809,0 7.4869576,46.4255589,0 7.4862624,46.4258547,0 7.4859791,46.4260973,0 7.4859276,46.4263813,0 7.4843457,46.4265489,0 + + + + #style-Tracks + + relativeToGround + 7.5006562,46.4241982,0 7.5003643,46.424139,0 + + + + #style-Tracks + + relativeToGround + 7.5003643,46.424139,0 7.5000468,46.4239793,0 + + + + #style-Tracks + + relativeToGround + 7.4843457,46.4265489,0 7.4840821,46.4265818,0 + + + + #style-Tracks + + relativeToGround + 7.4840821,46.4265818,0 7.4831295,46.4267008,0 7.482194,46.4265943,0 7.4811898,46.4266712,0 7.4788895,46.4265588,0 7.478323,46.4266475,0 7.4783109,46.4266478,0 7.4770527,46.4266771,0 7.4761172,46.426896,0 + + + + #style-Tracks + + relativeToGround + 7.5659698,46.4470345,0 7.5655203,46.4480124,0 7.5655891,46.448399,0 7.5651457,46.4489852,0 7.5649628,46.449227,0 7.56516,46.449387,0 + + + + #style-Tracks + + relativeToGround + 7.5623083,46.444399,0 7.5621882,46.4442866,0 + + + + #style-Tracks + + relativeToGround + 7.5621882,46.4442866,0 7.5619659,46.4441994,0 7.5603342,46.4434764,0 + + + + #style-Tracks + + relativeToGround + 7.5638662,46.4451512,0 7.5633834,46.4449349,0 7.5624986,46.444518,0 7.5623083,46.444399,0 + + + + #style-Tracks + + relativeToGround + 7.563934,46.445205,0 7.5638662,46.4451512,0 + + + + #style-Tracks + + relativeToGround + 7.5650031,46.4460937,0 7.5644603,46.4461059,0 7.563467,46.446806,0 7.5631545,46.4467541,0 7.562727,46.446683,0 7.5621935,46.4470208,0 7.5616868,46.4474721,0 7.5615495,46.4474679,0 7.561039,46.447273,0 7.560624,46.447319,0 7.560726,46.447719,0 7.56098,46.448121,0 7.560985,46.448126,0 + + + + #style-Tracks + + relativeToGround + 7.5619659,46.4441994,0 7.5616754,46.4444958,0 7.5609186,46.4449775,0 7.56084,46.4452181,0 7.5609195,46.4455156,0 + + + + #style-Tracks + + relativeToGround + 7.6216319,46.5569936,0 7.621301,46.556518,0 7.621064,46.556056,0 7.620255,46.555568,0 7.61985,46.555023,0 7.619469,46.554934,0 7.61885,46.55517,0 7.618224,46.555101,0 7.616902,46.554591,0 7.616307,46.554441,0 7.6157588,46.5541889,0 7.615575,46.554088,0 7.615245,46.553345,0 7.615047,46.553178,0 7.614621,46.5530406,0 7.614502,46.552815,0 7.6145042,46.5525758,0 7.6144034,46.5523715,0 7.6143229,46.5523162,0 7.6137389,46.5522484,0 7.6133449,46.5520084,0 7.6131605,46.5518493,0 7.612778,46.551181,0 7.612155,46.550717,0 7.611452,46.550374,0 7.6106649,46.5501724,0 7.6104511,46.5495174,0 7.6104444,46.5492243,0 7.61033,46.549085,0 7.6099347,46.5488565,0 7.6099128,46.5485968,0 7.609773,46.5483856,0 7.6095989,46.5482497,0 7.6093448,46.5481847,0 7.609047,46.548181,0 7.6080786,46.5483557,0 7.6079368,46.5483324,0 7.607811,46.548242,0 7.6076426,46.5479874,0 7.6077006,46.5479132,0 7.607992,46.54754,0 7.6083158,46.5473431,0 7.6085167,46.5470549,0 7.6084328,46.5468316,0 7.6078638,46.54661,0 7.6078362,46.5465457,0 7.6079946,46.5463545,0 7.6082273,46.5462439,0 7.6085278,46.5461917,0 7.6087459,46.546067,0 7.6088015,46.5458812,0 7.608665,46.545726,0 7.6076322,46.5450348,0 7.6070738,46.5450152,0 7.6065814,46.5447507,0 7.606325,46.544763,0 + + + + #style-Tracks + + relativeToGround + 7.614076,46.555321,0 7.6141065,46.555273,0 7.6139027,46.555118,0 7.613895,46.554985,0 7.614333,46.554527,0 7.614442,46.554234,0 7.61451,46.554227,0 7.614586,46.55458,0 7.614753,46.554636,0 7.615356,46.554676,0 7.615528,46.554846,0 7.615611,46.554802,0 7.615595,46.554721,0 7.615483,46.554504,0 7.615205,46.5542,0 7.615198,46.554095,0 7.615281,46.554102,0 7.615478,46.55423,0 7.6157588,46.5541889,0 + + + + #style-Tracks + + relativeToGround + 7.562625,46.528737,0 7.56258,46.528984,0 7.5624755,46.5290639,0 7.5622926,46.5292237,0 7.5622248,46.5293516,0 7.5622072,46.5294627,0 7.5623111,46.5297611,0 7.5622992,46.5298085,0 7.5622281,46.5298254,0 7.5620681,46.5297868,0 7.5619444,46.5298217,0 7.5617042,46.5300155,0 7.5616171,46.5301839,0 7.5614941,46.5302822,0 7.5612441,46.5305146,0 7.5613218,46.5305287,0 7.5615238,46.5304796,0 7.5615986,46.5304887,0 7.5617029,46.5305871,0 7.5617754,46.5305914,0 7.5619127,46.5304947,0 7.5619779,46.5305096,0 7.5619084,46.5306169,0 7.5618508,46.5308156,0 7.5617721,46.5308511,0 7.5616366,46.5308149,0 7.5615781,46.5308304,0 7.5615803,46.5309603,0 7.5618485,46.5310641,0 7.562042,46.530987,0 7.562019,46.531133,0 7.5617081,46.5312275,0 7.5621951,46.5313441,0 7.5622535,46.5314364,0 7.561869,46.531579,0 7.5618187,46.5316877,0 7.5624312,46.5316881,0 7.5624457,46.5317378,0 7.5619692,46.5322001,0 7.561704,46.532197,0 7.5616572,46.5322558,0 + + + + #style-Tracks + + relativeToGround + 7.448503,46.459865,0 7.4481932,46.4599236,0 7.447857,46.459965,0 7.4477077,46.4598442,0 + + + + #style-Tracks + + relativeToGround + 7.422303,46.459911,0 7.422095,46.459751,0 7.421974,46.45922,0 7.42177,46.459237,0 7.421713,46.459428,0 7.421433,46.459584,0 7.421153,46.459927,0 7.421124,46.460335,0 7.421335,46.460904,0 7.421273,46.461004,0 7.421129,46.46101,0 7.420944,46.460704,0 7.420039,46.459998,0 7.419421,46.459828,0 7.419236,46.459693,0 7.419076,46.459556,0 7.418931,46.459118,0 7.418705,46.458838,0 7.417878,46.458255,0 7.417994,46.458118,0 7.4184,46.457984,0 7.418286,46.45737,0 7.418312,46.457205,0 7.418543,46.456938,0 7.418476,46.456862,0 7.417901,46.457018,0 7.417152,46.457407,0 7.41648,46.457492,0 7.416225,46.457234,0 7.416697,46.456572,0 7.416569,46.456405,0 7.416079,46.456122,0 7.415381,46.455862,0 7.415504,46.455627,0 7.415751,46.455464,0 7.416825,46.455187,0 7.416938,46.4549,0 7.416739,46.454633,0 7.415345,46.453554,0 7.414514,46.453405,0 7.413282,46.452981,0 7.411303,46.451664,0 7.410109,46.45107,0 7.40973,46.450997,0 7.409619,46.450662,0 7.409465,46.450521,0 7.408415,46.450157,0 7.408251,46.450016,0 7.408062,46.449662,0 7.407399,46.449145,0 7.4071281,46.4487423,0 + + + + #style-Tracks + + relativeToGround + 7.464328,46.457064,0 7.463382,46.457176,0 7.462897,46.457377,0 7.462649,46.457567,0 + + + + #style-Tracks + + relativeToGround + 7.469627,46.453826,0 7.469009,46.453963,0 + + + + #style-Tracks + + relativeToGround + 7.448482,46.460149,0 7.448486,46.460146,0 7.448833,46.459856,0 7.448785,46.459794,0 7.448503,46.459865,0 + + + + #style-Tracks + + relativeToGround + 7.5903867,46.5152344,0 7.5903489,46.5153277,0 7.590271,46.515499,0 7.590262,46.515674,0 7.590325,46.515841,0 7.590276,46.515941,0 7.590159,46.516075,0 + + + + #style-Tracks + + relativeToGround + 7.589031,46.518301,0 7.589029,46.518367,0 7.589031,46.51853,0 7.589068,46.51861,0 7.589181,46.518754,0 7.58928,46.518836,0 7.589371,46.518996,0 7.589441,46.519072,0 7.589449,46.519104,0 7.589424,46.519186,0 7.589486,46.519322,0 7.589476,46.519587,0 7.589486,46.519672,0 7.589452,46.51985,0 7.589515,46.519951,0 7.589558,46.520058,0 7.589665,46.520142,0 7.58973,46.520286,0 7.589863,46.520462,0 7.589887,46.520566,0 7.589898,46.520727,0 7.589946,46.520843,0 7.5900055,46.5210825,0 7.589943,46.521137,0 7.5898983,46.5211664,0 7.5898629,46.5212153,0 + + + + #style-Tracks + + relativeToGround + 7.6093448,46.5481847,0 7.6094427,46.5483293,0 7.6094101,46.548591,0 7.609356,46.548667,0 7.609166,46.548845,0 7.6089752,46.5489862,0 7.6088952,46.5490921,0 7.6086869,46.549561,0 7.608622,46.5497762,0 7.608591,46.54994,0 7.6086371,46.5501173,0 + + + + Lischenstrasse + #style-Tracks + + relativeToGround + 7.5802181,46.4985699,0 7.5801466,46.4985211,0 7.580027,46.4983298,0 7.5798853,46.498233,0 7.5797367,46.4978481,0 7.5796769,46.4977522,0 7.579526,46.497591,0 7.5792835,46.4974686,0 7.5791957,46.4973171,0 7.5790319,46.4971786,0 7.5788853,46.4971104,0 + + + + #style-Tracks + + relativeToGround + 7.578695,46.517886,0 7.578953,46.518042,0 7.579168,46.51811,0 7.579338,46.518213,0 7.579463,46.51835,0 7.579476,46.518507,0 7.579533,46.518679,0 7.579717,46.518822,0 7.579934,46.518941,0 7.580101,46.519058,0 7.580151,46.519196,0 7.580164,46.519362,0 7.580285,46.519495,0 7.5807866,46.5197277,0 7.581016,46.519826,0 7.581209,46.5199,0 7.581276,46.519904,0 7.5812961,46.5198713,0 7.581275,46.519829,0 7.581047,46.519686,0 7.58093,46.519564,0 7.580785,46.51945,0 7.580735,46.519297,0 7.580866,46.519152,0 7.580853,46.519022,0 7.580703,46.518801,0 7.580678,46.518635,0 7.580573,46.518538,0 + + + + #style-Tracks + + relativeToGround + 7.5807866,46.5197277,0 7.5808963,46.5198879,0 7.580874,46.519925,0 7.580826,46.519954,0 7.580638,46.520001,0 7.5803428,46.5199976,0 7.5801735,46.5200411,0 + + + + #style-Tracks + + relativeToGround + 7.6128563,46.5576717,0 7.612698,46.557657,0 7.612517,46.557642,0 7.612308,46.557685,0 7.612183,46.557782,0 7.61231,46.557889,0 + + + + #style-Tracks + + relativeToGround + 7.6045687,46.4880471,0 7.6045863,46.4881633,0 7.6045673,46.4882513,0 7.6044723,46.4884403,0 7.6043857,46.488565,0 + + + + #style-Tracks + + relativeToGround + 7.5897212,46.4818723,0 7.5895673,46.4819072,0 7.589368,46.482049,0 7.589186,46.482293,0 7.5889665,46.4825243,0 7.588688,46.482802,0 7.588667,46.482876,0 7.588272,46.483302,0 7.587817,46.483767,0 7.587592,46.484096,0 7.587544,46.484295,0 7.5873982,46.4845334,0 7.58722,46.484682,0 7.586952,46.484887,0 7.586723,46.484991,0 7.586202,46.485288,0 7.585801,46.485609,0 7.5853807,46.486011,0 7.585214,46.486292,0 7.5851904,46.4864815,0 + + + + #style-Tracks + + relativeToGround + 7.5773923,46.4947336,0 7.577378,46.494574,0 7.577124,46.494315,0 7.5770454,46.4942655,0 + + + + #style-Tracks + + relativeToGround + 7.4393406,46.4117801,0 7.4392719,46.411641,0 7.4393529,46.411519,0 7.4396951,46.4114482,0 + + + + #style-Tracks + + relativeToGround + 7.4864609,46.3705861,0 7.4871769,46.3704428,0 7.4885874,46.3703193,0 7.4891387,46.370344,0 + + + + #style-Tracks + + relativeToGround + 7.4891387,46.370344,0 7.4902628,46.3705021,0 7.4912509,46.3708331,0 7.4922462,46.3712679,0 7.4926614,46.3714013,0 7.4932557,46.3710307,0 7.4943369,46.3708875,0 7.4952462,46.370512,0 7.4956472,46.3701464,0 7.4958119,46.3696573,0 7.4961341,46.3693312,0 7.4969503,46.369099,0 7.4977594,46.3690793,0 7.4982964,46.3690496,0 7.4989479,46.368768,0 7.4992988,46.3682987,0 + + + + #style-Tracks + + relativeToGround + 7.4922705,46.4213819,0 7.4920912,46.4210829,0 7.492428,46.4207877,0 7.4926512,46.4205796,0 7.493215,46.420485,0 7.4936048,46.420432,0 7.4938281,46.4200158,0 7.4938848,46.4191076,0 7.4936426,46.4187141,0 7.4928631,46.4181881,0 7.4924317,46.4180405,0 7.4916144,46.4174502,0 7.4910922,46.4173707,0 7.4904754,46.4171777,0 7.4902029,46.4168183,0 7.4901878,46.4164474,0 + + + + #style-Tracks + + relativeToGround + 7.5640376,46.4659612,0 7.5641356,46.4658925,0 7.5644622,46.465664,0 7.5647672,46.4653051,0 7.5649746,46.4650798,0 7.5651461,46.4649462,0 7.5660472,46.4644537,0 7.5661701,46.464399,0 + + + + #style-Tracks + + relativeToGround + 7.5661701,46.464399,0 7.566232,46.46429,0 7.5662324,46.4640747,0 7.566153,46.463848,0 7.5658337,46.4636438,0 7.5656605,46.4634444,0 7.5655755,46.463216,0 7.5656183,46.4631362,0 7.5658357,46.4630618,0 7.5667984,46.4630235,0 7.5669353,46.4631081,0 7.5670907,46.4632844,0 7.5673083,46.4635677,0 7.5677701,46.4639593,0 7.5677916,46.4643203,0 7.5678558,46.4645145,0 7.5681316,46.4648778,0 7.5682555,46.4648917,0 7.5682601,46.4647927,0 7.5682358,46.4644346,0 7.5683003,46.4641251,0 7.5683716,46.464057,0 7.5684816,46.4640586,0 7.5687293,46.4644566,0 7.5687758,46.4647994,0 7.568836,46.4649425,0 7.5690456,46.4651543,0 7.5692344,46.4655112,0 7.5691868,46.465725,0 7.569286,46.4658155,0 7.569435,46.465632,0 7.569508,46.465472,0 7.5695098,46.4652372,0 7.5695761,46.4650048,0 7.5695761,46.4646523,0 7.5696509,46.4645017,0 + + + + #style-Tracks + + relativeToGround + 7.4248311,46.4957794,0 7.4245438,46.4955981,0 7.4236484,46.495249,0 7.4234662,46.4949758,0 7.423193,46.4947178,0 7.4228743,46.4944901,0 7.42196,46.4940534,0 + + + + #style-Tracks + + relativeToGround + 7.5735275,46.4691135,0 7.57336,46.469298,0 7.573238,46.469411,0 7.5731997,46.4695416,0 7.573284,46.4697528,0 7.5733001,46.4698644,0 7.573262,46.469952,0 7.5731973,46.4700178,0 7.573187,46.470135,0 7.5732019,46.4702022,0 7.573187,46.470352,0 7.5732409,46.4705046,0 7.573242,46.4705791,0 7.5732157,46.470724,0 7.5733061,46.4708862,0 7.5734015,46.4709989,0 7.5735742,46.4710778,0 + + + + Hohliebeweg + #style-Tracks + + relativeToGround + 7.5733697,46.4768436,0 7.573353,46.476752,0 7.5733911,46.4766038,0 7.573493,46.476286,0 7.5734351,46.4760864,0 7.5733474,46.4760144,0 7.5732267,46.4758689,0 7.573313,46.47557,0 7.573431,46.475316,0 7.573552,46.475106,0 7.573604,46.474837,0 7.57359,46.4746865,0 7.573548,46.474581,0 7.5732579,46.4742404,0 7.5731951,46.4737075,0 7.5731212,46.4734883,0 7.5730983,46.4732924,0 7.5731432,46.4730867,0 7.5732774,46.472861,0 7.5734388,46.472535,0 7.5736016,46.4723781,0 7.5738331,46.4722663,0 7.5739683,46.4721113,0 7.5740242,46.4719814,0 7.573929,46.471627,0 7.5735742,46.4710778,0 + + + + #style-Tracks + + relativeToGround + 7.5733911,46.4766038,0 7.5737293,46.4768559,0 7.5738944,46.4769527,0 7.5740528,46.4769137,0 7.5742429,46.476773,0 + + + + #style-Tracks + + relativeToGround + 7.5751232,46.4803012,0 7.574269,46.480065,0 7.574085,46.480036,0 7.573709,46.479919,0 7.573569,46.479818,0 7.573342,46.479577,0 7.573053,46.47915,0 7.5729777,46.4790803,0 7.5728374,46.4790077,0 7.5727664,46.4789417,0 7.5727002,46.4787992,0 7.5726607,46.4787749,0 7.5726211,46.4788179,0 7.572565,46.4789796,0 7.5725895,46.4791432,0 7.572533,46.479272,0 7.572535,46.479423,0 7.572453,46.480005,0 7.5724148,46.4801166,0 7.572435,46.480232,0 7.5724691,46.4803328,0 7.5725689,46.4804525,0 + + + + #style-Tracks + + relativeToGround + 7.5740293,46.4894136,0 7.574015,46.489153,0 7.5741006,46.4890715,0 + + + + #style-Tracks + + relativeToGround + 7.5741006,46.4890715,0 7.574056,46.488667,0 7.57397,46.488541,0 7.573774,46.488517,0 7.57331,46.488254,0 7.573174,46.488224,0 + + + + #style-Tracks + + relativeToGround + 7.592367,46.5149672,0 7.5922017,46.5152686,0 + + + + #style-Tracks + + relativeToGround + 7.5463905,46.4726263,0 7.546366,46.472721,0 7.5463738,46.472813,0 7.5464139,46.4728843,0 7.546528,46.472992,0 + + + + #style-Tracks + + relativeToGround + 7.5477933,46.4743096,0 7.54757,46.474233,0 7.547457,46.474213,0 7.547301,46.474235,0 7.547152,46.474314,0 7.547062,46.474311,0 7.546977,46.474161,0 7.546801,46.473923,0 7.546706,46.47382,0 7.54664,46.473763,0 7.546483,46.473653,0 7.546253,46.47342,0 7.546126,46.47332,0 7.546031,46.473211,0 7.545932,46.473064,0 7.545876,46.472971,0 7.545769,46.472472,0 7.545809,46.472383,0 7.545972,46.472179,0 7.5460217,46.4721319,0 7.546117,46.472286,0 7.546154,46.472453,0 7.546266,46.472588,0 7.5463905,46.4726263,0 7.5464571,46.47259,0 7.5465039,46.4724999,0 7.5465251,46.472387,0 + + + + #style-Tracks + + relativeToGround + 7.550773,46.4757458,0 7.5506962,46.4757786,0 7.5505663,46.4760656,0 7.550485,46.4762,0 7.5501625,46.4766475,0 7.549997,46.476819,0 7.549832,46.476925,0 7.549748,46.476959,0 7.5494582,46.4770455,0 + + + + #style-Tracks + + relativeToGround + 7.5494582,46.4770455,0 7.5493221,46.4771051,0 7.5491396,46.4772255,0 7.548826,46.4773225,0 7.5486479,46.4774293,0 7.548434,46.477516,0 7.548247,46.477632,0 7.5479858,46.4777277,0 7.5476525,46.4777526,0 + + + + #style-Tracks + + relativeToGround + 7.5788121,46.4963841,0 7.578966,46.4963599,0 7.5790202,46.4963178,0 7.579056,46.496135,0 7.5789867,46.4959231,0 7.5790707,46.495913,0 7.5793381,46.4961651,0 7.5795192,46.4962795,0 7.579574,46.496281,0 7.5795861,46.4962396,0 7.5795507,46.496092,0 7.5795179,46.4960341,0 7.5795848,46.495996,0 7.5797434,46.4960857,0 7.5799401,46.4961536,0 7.580077,46.496183,0 7.58027,46.496287,0 7.5803426,46.4962898,0 7.5803678,46.4962349,0 7.5802526,46.496084,0 7.5801532,46.4959733,0 7.580083,46.495718,0 7.579987,46.4956342,0 7.5798442,46.4954093,0 7.5797401,46.4953337,0 + + + + #style-Tracks + + relativeToGround + 7.551122,46.463773,0 7.5510751,46.4639061,0 7.551126,46.464136,0 7.551157,46.46429,0 7.551131,46.464488,0 7.551011,46.464817,0 7.5511177,46.4651568,0 7.551141,46.465532,0 7.551148,46.465689,0 7.551205,46.465825,0 7.551178,46.465985,0 7.551117,46.466111,0 7.55102,46.466282,0 7.5509148,46.4667058,0 7.5508464,46.4667767,0 7.55076,46.466756,0 7.550766,46.466644,0 7.550804,46.466472,0 7.550801,46.46641,0 7.550818,46.466297,0 7.550888,46.46611,0 7.5508992,46.4659542,0 7.5507243,46.4657912,0 7.550437,46.465633,0 7.550125,46.465271,0 7.550097,46.4651635,0 7.549923,46.46466,0 7.549876,46.464615,0 7.549742,46.46452,0 7.549705,46.464381,0 7.5496948,46.4642671,0 7.549453,46.463839,0 7.549126,46.463452,0 7.548957,46.463311,0 7.548793,46.463125,0 7.548655,46.462876,0 7.548514,46.462743,0 7.548238,46.462601,0 7.548131,46.462514,0 7.548045,46.462474,0 7.547837,46.462405,0 7.547614,46.462349,0 7.5474366,46.4622477,0 7.547348,46.462173,0 7.547249,46.462054,0 7.547227,46.461882,0 7.547246,46.461712,0 7.547194,46.461545,0 7.546998,46.461234,0 7.546996,46.460975,0 7.546968,46.460886,0 7.5467453,46.4607696,0 7.5466425,46.4607158,0 + + + + #style-Tracks + + relativeToGround + 7.5324614,46.4521053,0 7.5326827,46.452079,0 7.532898,46.452116,0 7.5330862,46.4521987,0 7.5332827,46.4523798,0 7.533559,46.452494,0 7.534264,46.452695,0 7.5346068,46.4526309,0 7.5347041,46.4526012,0 + + + + #style-Tracks + + relativeToGround + 7.5505555,46.461797,0 7.5503452,46.461619,0 7.550283,46.461427,0 7.550137,46.4612643,0 7.549677,46.4609514,0 7.5496432,46.4608955,0 + + + + #style-Tracks + + relativeToGround + 7.5525656,46.4936365,0 7.5528161,46.4936972,0 7.5529717,46.4937895,0 7.5532023,46.4938745,0 7.5533579,46.4938597,0 7.5536959,46.4937378,0 7.5540177,46.4937341,0 7.5542269,46.4937489,0 7.5543128,46.4938375,0 7.5542538,46.4939262,0 7.5540499,46.494133,0 7.5538943,46.4943583,0 7.5538032,46.494602,0 7.5537978,46.4948273,0 7.553771,46.4950525,0 7.5538192,46.4951855,0 7.5540445,46.4955289,0 7.554184,46.4957985,0 7.5543771,46.4960496,0 7.554581,46.4961826,0 7.5548278,46.4962638,0 7.5550262,46.4962564,0 7.5551872,46.4962786,0 7.5552623,46.4963451,0 7.5553696,46.4965592,0 7.5554768,46.4968325,0 7.5555734,46.4971981,0 7.5556592,46.497416,0 7.5556592,46.4975489,0 7.5555466,46.4976892,0 7.5553588,46.4978997,0 7.5553213,46.4980807,0 7.5553427,46.4981656,0 7.5554339,46.4981804,0 7.5557343,46.4981656,0 + + + + Dauberhorn - Gemmibahn + #style-Tracks + + relativeToGround + 7.6026829,46.3875479,0 7.602328,46.387297,0 7.6021778,46.3868011,0 7.6021457,46.3865273,0 7.6018452,46.3866235,0 7.6017809,46.3864903,0 7.6014697,46.3864385,0 7.6010835,46.3865347,0 7.60059,46.3866605,0 7.6001286,46.3867049,0 7.5997639,46.3868011,0 7.5994205,46.3868603,0 7.5989592,46.3867715,0 7.5984335,46.3867789,0 7.5978219,46.3869047,0 7.5970387,46.3870009,0 7.5962984,46.3870824,0 7.5958693,46.3873858,0 7.5956869,46.3876152,0 7.5957298,46.3879926,0 7.5956976,46.3883034,0 7.5950539,46.3883404,0 7.5943029,46.3885476,0 7.5939166,46.388666,0 7.5934124,46.3888807,0 7.5931978,46.3890657,0 7.5930369,46.3890805,0 7.5928438,46.3893247,0 7.5926292,46.3895171,0 7.5924468,46.3896281,0 7.5925433,46.3898279,0 7.5926506,46.3901091,0 7.5927043,46.3904791,0 7.5915885,46.3912709,0 7.591095,46.3912339,0 7.5907302,46.3909897,0 7.5902152,46.3909083,0 7.5895822,46.3908121,0 7.5890779,46.3908935,0 7.5887668,46.3911895,0 7.5887132,46.3913375,0 7.5882947,46.3914855,0 7.5875437,46.3916927,0 7.5872004,46.3918111,0 7.5868034,46.3919887,0 7.5864494,46.3920775,0 7.5863099,46.3922477,0 7.5848937,46.3921071,0 7.5844216,46.3922773,0 7.5837564,46.3924919,0 7.5830698,46.3926251,0 7.5825977,46.3927657,0 7.5824904,46.3930691,0 7.582587,46.3933725,0 7.5828123,46.3936093,0 7.5831878,46.3937499,0 7.5833809,46.3940088,0 7.5835955,46.394364,0 7.5840139,46.3947192,0 7.5842285,46.3949264,0 7.5844109,46.3950966,0 + + + + #style-Tracks + + relativeToGround + 7.4800756,46.5665507,0 7.4797926,46.5665166,0 7.4796178,46.5666915,0 7.4795866,46.567193,0 + + + + #style-Tracks + + relativeToGround + 7.4854834,46.5161258,0 7.4855385,46.5162773,0 7.4860047,46.516287,0 7.4862334,46.5162894,0 7.4863353,46.5163123,0 7.4863709,46.516376,0 7.4863073,46.5165008,0 7.4861876,46.516595,0 7.4859915,46.5169922,0 7.4858387,46.5171984,0 7.4857878,46.5173207,0 7.4856325,46.5174683,0 7.4855638,46.517476,0 7.485551,46.517504,0 7.4855638,46.5175778,0 7.4855638,46.517644,0 7.4854939,46.5177249,0 7.485479,46.5178293,0 7.4854094,46.5178741,0 7.48529,46.5179586,0 7.4852304,46.5180432,0 7.4851856,46.518073,0 7.4851508,46.5181625,0 7.4850513,46.518267,0 7.4849668,46.5183863,0 7.4849469,46.5185057,0 7.4849767,46.51863,0 7.4850463,46.5187444,0 7.4851309,46.5188389,0 7.4850762,46.5189035,0 7.4850165,46.5189334,0 7.4847927,46.5189682,0 7.4847032,46.5190129,0 7.4846684,46.5190676,0 7.4846187,46.5193412,0 7.4846734,46.5194357,0 7.4847032,46.5195848,0 7.4847281,46.5197092,0 7.4847032,46.5198982,0 7.4845988,46.5200026,0 7.4843849,46.5200722,0 7.4843799,46.5201369,0 7.4847529,46.5200871,0 7.4848822,46.5200374,0 7.4849668,46.5199429,0 7.4854691,46.5197042,0 7.485847,46.5197092,0 7.4863394,46.5197689,0 7.4866477,46.5197539,0 7.4868615,46.5196445,0 7.4869113,46.51956,0 7.4869361,46.5193412,0 7.4869859,46.5192467,0 7.4872097,46.5190577,0 7.4877169,46.5187991,0 7.4883535,46.5185405,0 7.4886569,46.5185355,0 7.4888409,46.5185057,0 7.4893133,46.5182371,0 7.4898007,46.518068,0 7.4903527,46.5178791,0 7.490661,46.5178293,0 7.4906511,46.5179039,0 7.4905417,46.5179735,0 7.4904273,46.5181774,0 7.4903079,46.5183664,0 7.4901438,46.5186549,0 7.4898255,46.5192914,0 7.4897708,46.5196296,0 7.4894476,46.5202562,0 7.4894128,46.5204949,0 7.4894526,46.5207834,0 7.4894277,46.5209176,0 7.4892984,46.5213304,0 7.4891591,46.5213951,0 7.4891392,46.5214547,0 7.4892089,46.5214846,0 7.4895669,46.5214199,0 7.4901388,46.5213056,0 7.490472,46.5212956,0 7.4908351,46.5212508,0 7.4912976,46.5212011,0 7.4914169,46.5212857,0 7.4918049,46.5213304,0 7.4919292,46.5213851,0 7.4920336,46.5215194,0 + + + + #style-Tracks + + relativeToGround + 7.4021735,46.5042278,0 7.4022338,46.5039567,0 7.4030306,46.5030461,0 7.4037515,46.5022493,0 7.4056866,46.5010162,0 7.4058004,46.5007506,0 7.4059332,46.4997451,0 7.4060281,46.4994985,0 7.406692,46.499195,0 7.4082666,46.4986638,0 7.4103534,46.4975065,0 7.4132181,46.495894,0 7.4147413,46.4949366,0 7.4158357,46.4942866,0 7.4175094,46.4931639,0 7.4190972,46.4920117,0 7.4198912,46.4915094,0 7.4200628,46.4913764,0 7.420213,46.4910662,0 7.4206636,46.4907264,0 7.4214576,46.4903571,0 7.4219511,46.4900912,0 7.4222944,46.4897809,0 7.4230025,46.4897514,0 7.4239037,46.4894116,0 7.4249123,46.4888355,0 7.4254272,46.4882593,0 7.4258779,46.4874467,0 7.426071,46.4870331,0 7.4261353,46.485925,0 7.4260066,46.4852306,0 7.4258564,46.4843146,0 7.4257277,46.483561,0 7.4256418,46.4830439,0 7.425556,46.4822756,0 7.4257277,46.4817141,0 7.4258993,46.4813891,0 7.4261139,46.4812709,0 7.4263714,46.4811675,0 7.4265645,46.4809458,0 7.4266932,46.480606,0 7.4266932,46.4802514,0 7.426543,46.4798229,0 7.4264787,46.4794387,0 7.426822,46.4788476,0 7.4272511,46.47836,0 7.4274872,46.4778576,0 7.4276803,46.4774587,0 7.4279378,46.4770301,0 7.4280236,46.4764982,0 7.4280486,46.4762655,0 7.4280665,46.4760992,0 7.4282269,46.4757891,0 + + + + #style-Tracks + + relativeToGround + 7.5590626,46.4870252,0 7.5596203,46.4873634,0 7.5598972,46.487543,0 + + + + #style-Tracks + + relativeToGround + 7.42196,46.4940534,0 7.4214143,46.4939178,0 7.4213342,46.4938979,0 7.4209566,46.4938507,0 7.4206648,46.4939098,0 7.4203558,46.494022,0 7.4195919,46.4942879,0 7.4191112,46.4943588,0 7.4184675,46.4944416,0 7.4180469,46.4945775,0 7.4175132,46.4950208,0 + + + + #style-Tracks + + relativeToGround + 7.4262468,46.4595065,0 7.4262361,46.4592922,0 7.4262361,46.4590705,0 7.4262468,46.4587453,0 7.4261824,46.4585088,0 7.4257425,46.4580062,0 + + + + #style-Tracks + + relativeToGround + 7.4528183,46.5206213,0 7.4518921,46.5203291,0 7.4515129,46.5200991,0 7.4509055,46.5198462,0 7.4505617,46.5197602,0 7.4499281,46.5196986,0 7.4496551,46.5195907,0 7.4494311,46.5194705,0 7.4490583,46.5193646,0 7.4486957,46.5192179,0 7.4482353,46.5189694,0 7.4478544,46.5188064,0 7.4475591,46.5187391,0 7.4471488,46.5186023,0 7.4469498,46.5184034,0 7.4465396,46.5182355,0 7.4459925,46.5180117,0 7.4456879,46.5179496,0 7.4451533,46.5175952,0 7.444426,46.5172906,0 7.4441524,46.5170979,0 7.4437608,46.5165882,0 7.443077,46.5160473,0 7.4429775,46.5158546,0 7.4426046,46.5155873,0 7.4424367,46.51532,0 7.4417405,46.5148414,0 7.4415602,46.5144995,0 7.4413488,46.5142321,0 7.4411126,46.513424,0 7.4407645,46.513051,0 7.4405096,46.5126905,0 7.440437,46.5125172,0 7.4399804,46.5119635,0 7.4394754,46.5115556,0 7.439116,46.5109922,0 7.4387663,46.5104289,0 7.4387469,46.5101957,0 7.4386789,46.5098266,0 7.4385332,46.5094964,0 7.4384361,46.5092438,0 7.4386206,46.5089039,0 7.4385138,46.5086416,0 7.4384069,46.5082725,0 7.438572,46.507952,0 7.4387954,46.5077286,0 7.438504,46.5076023,0 7.4381641,46.5073109,0 7.4378824,46.506835,0 7.4375813,46.5061259,0 7.4372316,46.5051255,0 7.4373967,46.5046204,0 7.4378533,46.504057,0 7.4381641,46.5035228,0 7.4382224,46.5033285,0 7.4385915,46.5029011,0 7.4395434,46.5021144,0 7.4396599,46.5018327,0 7.4397085,46.5013179,0 7.4400193,46.5009779,0 7.4410198,46.5002689,0 7.4410459,46.5001952,0 + + + + Hörnliweg + #style-Tracks + + relativeToGround + 7.5634771,46.498246,0 7.563543,46.498316,0 7.5638087,46.4985406,0 7.5638266,46.4989595,0 7.5643825,46.4994173,0 7.5647636,46.4997905,0 7.5650245,46.5000946,0 7.5652805,46.5002911,0 7.565369,46.500541,0 7.5654359,46.5006704,0 7.5654456,46.5007267,0 7.565494,46.5008679,0 + + + + #style-Tracks + + relativeToGround + 7.5704442,46.5055077,0 7.5702808,46.5053663,0 7.5701857,46.5052743,0 7.5700595,46.505126,0 7.5699587,46.5049793,0 7.5697775,46.5047638,0 7.5696764,46.5046204,0 7.5696176,46.5045153,0 7.569522,46.504287,0 7.5693937,46.504028,0 7.5693182,46.5038638,0 7.5692352,46.5036487,0 7.5691654,46.5034532,0 7.5690593,46.5033257,0 7.5688693,46.5031471,0 7.568744,46.5029817,0 7.5687151,46.5029089,0 7.5686907,46.5028223,0 + + + + #style-Tracks + + relativeToGround + 7.4293897,46.4761015,0 7.4294959,46.4760031,0 7.4295844,46.47592,0 7.4297078,46.4758018,0 7.429925,46.4756596,0 7.4300725,46.4755229,0 7.4302362,46.475316,0 7.4303756,46.4750833,0 7.4304722,46.4749115,0 7.4305178,46.4747323,0 7.4306707,46.4745217,0 7.4308584,46.4742853,0 7.4311427,46.4740562,0 7.431352,46.4738216,0 7.4314887,46.4735446,0 7.431588,46.4733063,0 7.431706,46.4730477,0 7.4317516,46.4728703,0 + + + + #style-Tracks + + relativeToGround + 7.4268244,46.4763947,0 7.4269585,46.4764612,0 7.4271248,46.4764871,0 7.4273876,46.4764354,0 7.4276022,46.4763578,0 7.4277363,46.4762802,0 7.4278812,46.4762507,0 7.4280486,46.4762655,0 + + + + #style-Tracks + + relativeToGround + 7.4340985,46.4707201,0 7.434238,46.4705945,0 7.4344365,46.4703802,0 7.4346457,46.4702213,0 7.4350534,46.4703728,0 7.4353769,46.4704585,0 + + + + #style-Tracks + + relativeToGround + 7.4353769,46.4704585,0 7.435482,46.4704761,0 7.4355162,46.4704903,0 7.4356185,46.4705018,0 7.4364604,46.4704052,0 7.4370811,46.4707552,0 + + + + #style-Tracks + + relativeToGround + 7.5318629,46.4633692,0 7.5317263,46.4629743,0 7.5313508,46.4623387,0 7.5311041,46.4613854,0 7.5310075,46.4608607,0 7.5306964,46.4603581,0 7.5305891,46.4600477,0 7.5305462,46.4596042,0 7.5303852,46.4589982,0 7.5299883,46.4585769,0 7.5287008,46.4575126,0 7.5283682,46.4569361,0 7.5281322,46.4561453,0 7.5281429,46.4557461,0 7.5282287,46.4554727,0 7.5285399,46.4551622,0 7.5292158,46.4544453,0 7.5298273,46.4542235,0 7.530396,46.4541053,0 7.530632,46.4540535,0 7.5307286,46.4539279,0 7.5307071,46.4537948,0 7.5306427,46.4537061,0 7.5304389,46.4537357,0 7.5303101,46.4538096,0 7.5301814,46.4537357,0 7.5301063,46.4535435,0 7.5301385,46.4533218,0 7.5303423,46.4529891,0 7.5306642,46.4528857,0 7.5310719,46.4528931,0 7.5316191,46.4528487,0 7.5320053,46.4529004,0 7.532413,46.4530113,0 7.5328314,46.4530852,0 7.5330996,46.4530409,0 7.5331318,46.4528931,0 7.5329602,46.4526639,0 7.5328207,46.4524274,0 7.5326383,46.4522352,0 7.5324614,46.4521053,0 7.5322521,46.4520652,0 7.532016,46.4518508,0 7.5318658,46.4516512,0 7.531544,46.4512817,0 7.531029,46.4509564,0 7.5306213,46.4507494,0 7.5297415,46.450269,0 7.5292051,46.4499881,0 7.5288319,46.4496296,0 7.5282717,46.4492858,0 7.5278318,46.4490788,0 7.5274455,46.4489384,0 7.5270724,46.4487277,0 7.526555,46.4485983,0 7.5261903,46.4484875,0 7.5257504,46.4481844,0 7.5251519,46.4476484,0 7.5248921,46.447423,0 7.5246775,46.4471938,0 7.5244844,46.4471568,0 7.5242483,46.4472677,0 7.5241303,46.4473343,0 7.5239265,46.4473416,0 7.5236046,46.4472899,0 7.5233042,46.4472382,0 7.5229716,46.4472455,0 7.5226712,46.4472899,0 7.5224674,46.447386,0 7.5219416,46.4476152,0 + + + + #style-Tracks + + relativeToGround + 7.5388594,46.4323326,0 7.5392281,46.4322406,0 7.5397646,46.4321519,0 7.540065,46.4321667,0 7.54058,46.4322406,0 7.5410091,46.4322998,0 7.5412666,46.4325068,0 7.5416314,46.4326695,0 7.5418889,46.432773,0 7.5421035,46.43298,0 7.5425326,46.4332462,0 7.5428974,46.4333645,0 7.5433695,46.4334385,0 7.5435626,46.4335568,0 7.5439917,46.4337934,0 7.5445067,46.434104,0 7.5450861,46.4343406,0 7.5456225,46.4346364,0 7.5460088,46.4347842,0 7.5463306,46.4348434,0 7.5465452,46.4349173,0 7.5468671,46.4350356,0 7.5471889,46.4350208,0 7.5475323,46.4350356,0 7.5481116,46.4351539,0 7.5486051,46.4353314,0 7.5489914,46.4354793,0 7.5493562,46.4356567,0 7.5496351,46.435775,0 7.5499784,46.4358342,0 7.5503003,46.4357455,0 7.5506222,46.4355532,0 7.5507938,46.435361,0 7.5510942,46.435287,0 7.5513732,46.4353314,0 7.5516521,46.4355384,0 7.5519955,46.4357011,0 7.5523817,46.435775,0 7.5533044,46.4360264,0 7.5539696,46.4361891,0 7.5545275,46.4362335,0 7.5549352,46.436337,0 7.5550639,46.4365144,0 7.5549827,46.4367111,0 + + + + Gemmistrasse + #style-Tracks + + relativeToGround + 7.6237311,46.3837753,0 7.6234774,46.3838704,0 7.622544,46.3843698,0 7.6219235,46.3846108,0 7.6214367,46.3853915,0 7.6206176,46.3859502,0 7.6201284,46.3864565,0 7.6198804,46.3866291,0 7.6195346,46.3874896,0 7.6197172,46.3877987,0 7.6196075,46.3879736,0 7.6189509,46.3878995,0 7.6184904,46.3879967,0 7.6186038,46.3882094,0 7.6188989,46.3883671,0 7.6192004,46.3885456,0 7.619828,46.3888194,0 7.6202518,46.3889822,0 7.6205629,46.3889933,0 7.6210833,46.3890969,0 7.6215929,46.3890747,0 7.6224029,46.3887047,0 7.6229286,46.3884716,0 7.6235295,46.3881904,0 7.6238352,46.3880831,0 7.6242107,46.3883125,0 7.62461,46.3883714,0 + + + + Bütscheggenweg + #style-Tracks + + relativeToGround + 7.5645004,46.5024523,0 7.5643032,46.5024079,0 7.5642002,46.5024009,0 7.5639082,46.5024017,0 7.563623,46.502347,0 7.5633927,46.5022879,0 7.5632576,46.5022067,0 7.563109,46.5020934,0 7.563005,46.50203,0 7.562912,46.501915,0 7.5628685,46.5017841,0 7.562789,46.5017139,0 7.5625977,46.5016474,0 + + + + Bütscheggenweg + #style-Tracks + + relativeToGround + 7.5658571,46.5029369,0 7.565378,46.502792,0 7.5652788,46.5027476,0 7.5650875,46.5026587,0 7.5648487,46.5025808,0 7.5645004,46.5024523,0 + + + + #style-Tracks + + relativeToGround + 7.5883223,46.5173041,0 7.5883922,46.5173254,0 7.588884,46.51737,0 7.589137,46.517445,0 7.589223,46.517428,0 7.5892426,46.5172029,0 7.589195,46.517181,0 7.589143,46.517165,0 7.588956,46.517047,0 7.588803,46.516895,0 7.588737,46.516809,0 7.588709,46.516743,0 7.5886797,46.5165501,0 + + + + #style-Tracks + + relativeToGround + 7.5879633,46.5171897,0 7.5882182,46.5172418,0 7.5883223,46.5173041,0 7.5884541,46.5174144,0 7.588621,46.517648,0 7.588713,46.51781,0 7.588762,46.517866,0 7.58888,46.517958,0 7.588934,46.518028,0 7.58896,46.518155,0 7.589031,46.518301,0 7.589079,46.518323,0 7.5892056,46.5183555,0 7.589288,46.518439,0 + + + + #style-Tracks + + relativeToGround + 7.5826523,46.4989336,0 7.5825898,46.4990355,0 7.5826343,46.4991879,0 7.5826984,46.499309,0 7.582719,46.499403,0 7.5828014,46.4995759,0 7.582807,46.499739,0 7.5828446,46.4998144,0 7.5829721,46.4999336,0 7.58306,46.5000875,0 7.583046,46.500152,0 7.582917,46.500426,0 7.5826608,46.5005706,0 7.5823436,46.5007509,0 7.5822184,46.50073,0 7.5820124,46.5005653,0 7.5818994,46.5004572,0 + + + + #style-Tracks + + relativeToGround + 7.578672,46.5205961,0 7.5787651,46.520547,0 7.5788446,46.5204993,0 7.578937,46.520553,0 7.5793743,46.5206724,0 7.579642,46.520806,0 7.579854,46.520889,0 7.580014,46.520939,0 7.580248,46.520982,0 7.580479,46.520835,0 7.580655,46.520778,0 7.581053,46.520755,0 7.581774,46.520671,0 7.581938,46.520619,0 7.582083,46.520557,0 7.582782,46.520178,0 7.5828672,46.5200806,0 7.582853,46.519966,0 7.582691,46.5197745,0 + + + + #style-Tracks + + relativeToGround + 7.5785017,46.5014825,0 7.5782187,46.5013039,0 7.5773506,46.5011965,0 + + + + #style-Tracks + + relativeToGround + 7.5543278,46.5106844,0 7.552418,46.510272,0 7.552234,46.510298,0 7.5518293,46.510394,0 7.551497,46.510395,0 7.5511102,46.5103357,0 7.5504234,46.5103985,0 7.5498621,46.5103121,0 7.5489084,46.5104103,0 7.547537,46.510344,0 7.547371,46.510243,0 7.5472993,46.5100845,0 7.547166,46.509991,0 7.5470386,46.5099552,0 + + + + #style-Tracks + + relativeToGround + 7.5665772,46.5111305,0 7.5661335,46.5110512,0 7.565676,46.511024,0 7.564624,46.510737,0 7.5637674,46.5108027,0 7.5627058,46.5109232,0 7.5620088,46.5104446,0 7.5618541,46.5104123,0 7.5611605,46.5106807,0 7.5608878,46.5107049,0 7.5601998,46.5106693,0 7.5595979,46.5109139,0 7.5590547,46.5110383,0 7.558377,46.511309,0 7.5576766,46.5114214,0 7.557316,46.511429,0 7.5558858,46.5107802,0 7.5548832,46.5106228,0 7.5543278,46.5106844,0 + + + + #style-Tracks + + relativeToGround + 7.5572602,46.5039626,0 7.5565998,46.5037653,0 7.556337,46.503737,0 7.5561181,46.5036637,0 7.555636,46.503467,0 7.5542456,46.5027933,0 7.553992,46.502666,0 7.55387,46.502572,0 7.553751,46.5024,0 7.553569,46.502294,0 7.552955,46.502105,0 7.552762,46.501995,0 7.552663,46.50191,0 7.552167,46.501397,0 7.551822,46.501019,0 7.551661,46.500913,0 7.551534,46.500853,0 7.551234,46.500736,0 7.550892,46.500652,0 7.550273,46.500621,0 7.549463,46.500519,0 7.548911,46.500354,0 7.548753,46.500326,0 7.548575,46.500277,0 7.548373,46.500246,0 7.547924,46.500091,0 7.547575,46.499861,0 7.5472465,46.4995287,0 7.546982,46.499337,0 7.5461074,46.4989712,0 7.5459336,46.498931,0 7.5457608,46.498928,0 7.545644,46.4989186,0 + + + + #style-Tracks + + relativeToGround + 7.5470386,46.5099552,0 7.546909,46.50992,0 7.546808,46.509814,0 7.546857,46.509759,0 7.547272,46.509792,0 7.547587,46.509838,0 7.547864,46.509808,0 7.5484138,46.5095411,0 7.548895,46.509268,0 7.5490654,46.5092289,0 7.549337,46.509187,0 7.549454,46.509095,0 7.549336,46.509014,0 7.548898,46.509065,0 7.5486376,46.5090759,0 7.5473181,46.5086821,0 7.5471077,46.5085813,0 7.546657,46.508168,0 7.546354,46.508088,0 7.5457686,46.5080083,0 7.545412,46.507947,0 7.5453714,46.5078755,0 7.545397,46.507821,0 7.545586,46.507789,0 7.545796,46.507852,0 7.5459958,46.5078633,0 7.5462241,46.5078289,0 7.5471737,46.5073725,0 7.547784,46.507391,0 7.5479861,46.5073411,0 7.5484178,46.5072077,0 7.5490615,46.507294,0 7.5496816,46.5071724,0 7.55049,46.507205,0 7.5510042,46.5071606,0 7.5518441,46.5068113,0 7.5523092,46.5067029,0 7.5526955,46.5066625,0 7.5531485,46.5066932,0 7.553226,46.506592,0 7.5530968,46.5065076,0 7.552063,46.506265,0 7.5516405,46.5060492,0 7.551345,46.505969,0 7.5511689,46.5059586,0 7.5508777,46.5059993,0 7.550618,46.5059837,0 7.5502813,46.5058175,0 7.5500701,46.5055161,0 7.550038,46.505387,0 7.550148,46.505321,0 7.550443,46.505316,0 7.5508943,46.5054926,0 7.551208,46.5055229,0 7.5522791,46.5054416,0 7.5525466,46.5054651,0 7.5526722,46.505418,0 7.5527,46.505346,0 7.552515,46.505299,0 7.552095,46.505311,0 7.5511044,46.5049005,0 7.5509361,46.5047297,0 7.5506706,46.5043701,0 7.5503646,46.5043215,0 7.549279,46.504364,0 7.5488652,46.504323,0 7.5486825,46.5042853,0 7.548669,46.5042092,0 7.5487161,46.5041464,0 7.5494069,46.5041857,0 7.550184,46.50395,0 7.5507692,46.5038245,0 7.5512873,46.5038139,0 7.5524549,46.5039821,0 7.5532009,46.5040121,0 7.5546574,46.5041122,0 7.5555299,46.5041995,0 7.5566327,46.5042191,0 7.557042,46.504217,0 7.5572457,46.5041657,0 7.557353,46.504123,0 7.5574117,46.5040674,0 7.557406,46.5040271,0 7.5572602,46.5039626,0 + + + + #style-Tracks + + relativeToGround + 7.6155446,46.4496036,0 7.6158266,46.4496374,0 7.6163109,46.4496955,0 7.6171772,46.4499824,0 7.61826,46.4503153,0 7.6194595,46.4502464,0 7.6204757,46.4507399,0 7.621342,46.4512335,0 7.6221583,46.4518188,0 7.6229818,46.4535272,0 7.6229158,46.4551282,0 7.6233595,46.4571271,0 7.6247231,46.458704,0 7.6254607,46.4588344,0 7.6255846,46.458493,0 7.6262756,46.458691,0 7.6262981,46.459034,0 7.627519,46.4599796,0 7.6276489,46.4609378,0 7.6285887,46.4615968,0 7.6286387,46.4621247,0 7.6291384,46.4623542,0 7.6290218,46.4626755,0 7.6293217,46.4633181,0 7.6295049,46.4646607,0 7.6298548,46.4655902,0 7.6306877,46.467013,0 7.6310876,46.4674031,0 7.6317373,46.4675179,0 7.6327368,46.4678736,0 7.6337197,46.4684702,0 7.6346693,46.4691128,0 7.6356855,46.4702257,0 7.6365351,46.4709715,0 7.6373014,46.4713042,0 7.6380844,46.4719926,0 7.6395504,46.4729908,0 + + + + #style-Tracks + + relativeToGround + 7.617833,46.5283281,0 7.6175991,46.528688,0 7.6175883,46.5289759,0 7.6181999,46.529559,0 7.6185325,46.5300831,0 7.6184037,46.5301495,0 7.6178136,46.5297366,0 7.617009,46.5297288,0 7.6164189,46.5295295,0 7.6158824,46.5295295,0 7.6157644,46.5297288,0 7.6158932,46.5301274,0 7.6163545,46.5303713,0 7.6167086,46.5307105,0 7.6170658,46.5311194,0 + + + + #style-Tracks + + relativeToGround + 7.6109659,46.5266158,0 7.6117361,46.526354,0 7.6118901,46.5263694,0 7.6118131,46.5265542,0 7.6112585,46.5273552,0 7.6113048,46.5275554,0 7.6121982,46.5271857,0 7.6127681,46.5270625,0 7.6129553,46.5269559,0 + + + + #style-Tracks + + relativeToGround + 7.5189956,46.4843231,0 7.5190332,46.4840125,0 7.518926,46.4835988,0 7.518132,46.4833772,0 7.5167158,46.482934,0 7.5166944,46.4827123,0 7.5173166,46.482343,0 7.5171235,46.4822395,0 7.5169079,46.4822839,0 7.5161794,46.4823282,0 7.5153211,46.4821213,0 7.5151279,46.4820031,0 7.5148061,46.4812791,0 7.5132611,46.4802153,0 7.5121453,46.4796981,0 7.5121882,46.4795356,0 7.5129178,46.4798459,0 7.513304,46.479905,0 7.5146559,46.4803335,0 7.5159648,46.4805551,0 7.5169304,46.4809541,0 7.5174883,46.4808802,0 7.5181964,46.4809393,0 7.5186041,46.4813235,0 7.5194839,46.481486,0 7.5195482,46.4816337,0 7.5202778,46.4815303,0 7.5212402,46.481257,0 7.5217584,46.4814417,0 7.5225738,46.4816485,0 7.5231102,46.4815155,0 7.5235179,46.4811905,0 7.5247624,46.4810279,0 7.5264791,46.4803187,0 7.5276163,46.4792548,0 7.5279596,46.4786638,0 7.5284746,46.478383,0 7.5281742,46.4782501,0 7.5278953,46.478383,0 7.5264361,46.4787524,0 7.5253418,46.4787377,0 7.5242904,46.4786786,0 7.5232604,46.4786786,0 7.5222734,46.4785308,0 7.5212852,46.4786933,0 7.5198573,46.4781924,0 7.5196984,46.4778806,0 7.5187543,46.4780727,0 7.517896,46.4772305,0 7.5171021,46.476669,0 7.516351,46.4764621,0 7.5160292,46.4753686,0 7.5151923,46.4750886,0 7.5149348,46.4745854,0 7.5143555,46.4742307,0 7.5140551,46.4737578,0 7.5129393,46.4733293,0 7.5126818,46.4727382,0 7.512832,46.4725165,0 7.5127247,46.4723096,0 7.5120166,46.4720141,0 7.5119522,46.4717037,0 7.5114158,46.471482,0 7.5114587,46.470551,0 7.5113085,46.470152,0 7.5127676,46.4702998,0 7.5131538,46.4700633,0 7.5143984,46.4702259,0 7.5149134,46.4701232,0 7.5149527,46.4698298,0 + + + + #style-Tracks + + relativeToGround + 7.580325,46.5027273,0 7.580134,46.5028204,0 7.5799106,46.5029702,0 7.5795711,46.5032229,0 7.579505,46.50336,0 7.5794962,46.5034404,0 + + + + #style-Tracks + + relativeToGround + 7.5887308,46.5121362,0 7.5878146,46.5121861,0 7.5875342,46.512005,0 + + + + #style-Tracks + + relativeToGround + 7.5486892,46.4843265,0 7.5482932,46.4846238,0 + + + + #style-Tracks + + relativeToGround + 7.5452866,46.4835281,0 7.5445192,46.4833872,0 + + + + #style-Tracks + + relativeToGround + 7.5439543,46.4836822,0 7.5442929,46.4838529,0 7.5444163,46.4839361,0 7.5444886,46.4839589,0 7.544905,46.4840167,0 7.5455029,46.4842106,0 + + + + #style-Tracks + + relativeToGround + 7.5482932,46.4846238,0 7.5469389,46.4843438,0 7.546616,46.484368,0 7.546398,46.4842227,0 7.5456648,46.4841873,0 7.5455029,46.4842106,0 7.5451848,46.4842565,0 7.5450642,46.484286,0 + + + + #style-Tracks + + relativeToGround + 7.57139,46.4855698,0 7.5712639,46.4854836,0 7.571188,46.4854049,0 7.571083,46.4852752,0 7.5710397,46.4852471,0 7.5708579,46.4851424,0 7.5702202,46.4846207,0 7.5699875,46.4843914,0 7.5697506,46.4843808,0 + + + + + Winter_Hiking + + + + Summer_Hiking + + + Haselweg + Haselweg, Summer Walking Path + #style-Summer_Hiking + + relativeToGround + 7.5647157,46.4954991,0 7.5652338,46.4952461,0 + + + + , Summer Walking Path + #style-Summer_Hiking + + relativeToGround + 7.5654624,46.4590852,0 7.5657857,46.4590406,0 7.5660894,46.4588054,0 7.5661792,46.4586043,0 7.5661147,46.4582042,0 7.5662091,46.4580919,0 7.5662434,46.4579559,0 7.565883,46.4574237,0 7.5652732,46.457071,0 7.5649731,46.4568975,0 7.5644095,46.4567614,0 7.5638831,46.4564126,0 7.5632094,46.4558142,0 7.5631766,46.4555546,0 7.5628849,46.4551459,0 7.562303,46.4547165,0 7.5619564,46.454653,0 7.561394,46.4546978,0 7.5610892,46.4543912,0 7.5610362,46.4541518,0 7.5607503,46.4539705,0 + + + + , Summer Walking Path + #style-Summer_Hiking + + relativeToGround + 7.569223,46.5076089,0 7.5689582,46.5076903,0 7.5679113,46.5074419,0 7.5678265,46.5072529,0 7.56764,46.5072284,0 7.5673403,46.507312,0 7.567078,46.50724,0 7.5666536,46.5072812,0 7.5655643,46.5070497,0 7.5654691,46.5069622,0 7.5645959,46.5067976,0 7.5646229,46.5066189,0 7.5643876,46.5063719,0 7.5638487,46.5060826,0 7.5636134,46.506044,0 7.5635323,46.5059295,0 7.5622206,46.5058099,0 7.5617203,46.5055797,0 7.5615608,46.5056736,0 7.5614142,46.5054717,0 7.561247,46.5055566,0 7.5606426,46.5053148,0 7.5602722,46.5052865,0 7.5589439,46.5043505,0 7.5585357,46.5043073,0 7.5582688,46.5040954,0 7.557406,46.5040271,0 + + + + , Summer Walking Path + #style-Summer_Hiking + + relativeToGround + 7.6155345,46.3998258,0 7.6153734,46.4003914,0 7.6157251,46.4016849,0 7.6155493,46.4025742,0 7.6149472,46.4029894,0 7.6144356,46.4033422,0 7.6127356,46.4038677,0 7.6115633,46.4035443,0 7.6120396,46.4045298,0 7.6123253,46.4051208,0 7.613146,46.4064546,0 7.613439,46.408031,0 7.61467,46.4095668,0 7.615139,46.4106177,0 7.6161251,46.4113811,0 7.6171756,46.4129423,0 7.6173782,46.4140618,0 7.6173696,46.4148133,0 7.6174554,46.4152985,0 7.6170005,46.415979,0 7.6168546,46.4165589,0 7.6165714,46.4166773,0 7.6161937,46.4166891,0 7.6160392,46.4169495,0 7.6164169,46.4174229,0 7.6171207,46.4176714,0 7.6173009,46.4179081,0 7.6173267,46.4184998,0 7.6176528,46.418908,0 7.6182752,46.418677,0 7.6185884,46.4183755,0 7.6188287,46.4183578,0 7.6193806,46.4173872,0 7.6199672,46.4174714,0 7.6210491,46.4180023,0 7.6225795,46.4190323,0 7.6229658,46.4189554,0 7.6232576,46.4190796,0 7.6234722,46.4190027,0 + + + + , Summer Walking Path + #style-Summer_Hiking + + relativeToGround + 7.5666254,46.4971783,0 7.5668656,46.497203,0 7.5672608,46.4970805,0 7.5678102,46.4970381,0 7.5683727,46.4970519,0 7.5693504,46.49736,0 7.5695856,46.4975015,0 7.5697801,46.497493,0 7.5698535,46.4975297,0 7.5697316,46.4975853,0 7.5698707,46.4976373,0 7.5701022,46.4975877,0 7.5701367,46.4975929,0 7.5707109,46.4976791,0 7.5708665,46.4976169,0 7.5711207,46.497742,0 7.5713865,46.4977649,0 7.5715411,46.4976389,0 7.5719446,46.4978024,0 7.5720307,46.4977428,0 + + + + , Summer Walking Path + #style-Summer_Hiking + + relativeToGround + 7.5654624,46.4590852,0 7.5649892,46.4595141,0 + + + + Ueschinengrat + Ueschinengrat, Summer Walking Path + #style-Summer_Hiking + + relativeToGround + 7.613129,46.4372863,0 7.6146783,46.4377111,0 7.6156779,46.4377915,0 7.6171439,46.4379063,0 7.6186432,46.438067,0 7.6196094,46.4384918,0 7.6204424,46.438951,0 7.6213586,46.4392265,0 7.6214919,46.4394561,0 7.6218251,46.4394906,0 7.6218584,46.4397317,0 7.6221416,46.4400531,0 7.6221583,46.4404205,0 7.6225248,46.4405812,0 7.6225914,46.4408797,0 7.6228746,46.4409371,0 7.6231078,46.4411207,0 7.6232245,46.4413044,0 7.622858,46.4414996,0 7.6230246,46.4420276,0 7.6232578,46.442372,0 7.6237242,46.442659,0 7.6240241,46.4432215,0 7.624274,46.443761,0 7.6243739,46.4443579,0 7.6243739,46.4447712,0 7.6240907,46.4450237,0 7.6241907,46.4454599,0 7.6245239,46.4457354,0 7.6250903,46.4460913,0 7.6252569,46.4464586,0 7.6249737,46.4467341,0 7.6252902,46.4469292,0 7.6251403,46.4471702,0 7.6259566,46.4474687,0 7.6266396,46.4476868,0 7.6276058,46.4479393,0 7.6279557,46.4485247,0 7.6283555,46.4490068,0 7.6292717,46.4496036,0 7.630038,46.4502694,0 7.6311875,46.4509006,0 7.6315374,46.451222,0 7.6317206,46.4517041,0 7.632237,46.4521517,0 7.6324869,46.4523353,0 7.6323703,46.4527256,0 7.63297,46.4532994,0 7.6333699,46.4535519,0 7.6342695,46.4543094,0 7.6345527,46.4547341,0 7.6349525,46.4553997,0 7.6355855,46.4559736,0 7.6366517,46.4571671,0 7.6377512,46.4582,0 7.638301,46.4591984,0 7.638884,46.4598181,0 7.6388674,46.4601624,0 7.638884,46.4603575,0 7.6391173,46.4604263,0 7.6394005,46.4605067,0 7.6398503,46.4611263,0 7.6401834,46.4615395,0 7.6410164,46.461746,0 7.6423158,46.462205,0 7.6431321,46.4625722,0 7.6439484,46.4633985,0 7.6445315,46.4637312,0 7.644948,46.4642017,0 7.6453644,46.4646722,0 7.6460475,46.4651541,0 + + + + , Summer Walking Path + #style-Summer_Hiking + + relativeToGround + 7.613129,46.4372863,0 7.614645,46.4371601,0 7.6147949,46.436896,0 7.6150948,46.4367812,0 7.6165941,46.4367812,0 7.6169939,46.4366434,0 7.6178935,46.4359661,0 7.619193,46.4364368,0 7.6179269,46.4347261,0 7.6185766,46.4346802,0 7.6184933,46.4342439,0 7.6185932,46.4339224,0 7.6188098,46.4336469,0 7.619193,46.4339683,0 7.6194095,46.4337961,0 7.619876,46.434152,0 7.6199926,46.4339798,0 7.620559,46.4341865,0 7.6205257,46.4338191,0 7.620659,46.4335206,0 7.6207756,46.4333484,0 7.6211754,46.4332335,0 7.6210588,46.432958,0 7.6217751,46.4331417,0 7.6231578,46.4331761,0 7.6237242,46.4335435,0 7.6239741,46.4325446,0 7.6243047,46.4319653,0 + + + + , Summer Walking Path + #style-Summer_Hiking + + relativeToGround + 7.613129,46.4372863,0 7.6114798,46.4367468,0 7.6103046,46.4371303,0 7.6100952,46.437372,0 7.6096793,46.4373191,0 7.609981,46.4374867,0 7.6092641,46.4375619,0 7.609614,46.4376767,0 7.6091475,46.4379407,0 7.6094474,46.4381244,0 7.6091142,46.4382048,0 7.6091308,46.4384114,0 7.6087977,46.4385492,0 7.6086644,46.4388706,0 7.6091808,46.4387214,0 7.6107634,46.4388132,0 7.6111799,46.4389166,0 7.6113632,46.4392265,0 7.6116963,46.4392839,0 7.6114131,46.4396628,0 7.6116797,46.4399268,0 7.6115797,46.4404319,0 7.6118796,46.441224,0 7.6118463,46.4416144,0 7.6116297,46.4417636,0 7.6115631,46.4420621,0 7.61093,46.4418669,0 7.61098,46.4420735,0 7.610147,46.4419587,0 7.6098305,46.4422802,0 7.6098139,46.4426016,0 7.6108634,46.444025,0 + + + + , Summer Walking Path + #style-Summer_Hiking + + relativeToGround + 7.6108634,46.444025,0 7.6112632,46.4445875,0 7.6115964,46.4452533,0 7.6121961,46.4457584,0 7.6125293,46.4463323,0 7.6131124,46.4478704,0 7.6135455,46.4484099,0 7.6141619,46.4488116,0 7.6144784,46.4491675,0 7.6150781,46.4493396,0 7.6155446,46.4496036,0 + + + + , Summer Walking Path + #style-Summer_Hiking + + relativeToGround + 7.4787161,46.5654517,0 7.4789409,46.56562,0 7.4788957,46.5659074,0 7.4785552,46.566147,0 7.4784732,46.566416,0 7.4785488,46.5665905,0 7.4795866,46.567193,0 7.4797515,46.5672887,0 7.4800482,46.5673099,0 7.4802419,46.5674885,0 7.4801802,46.5674932,0 7.4801654,46.5675985,0 7.4803315,46.5678527,0 7.4805001,46.5679469,0 7.4808497,46.568056,0 7.4811398,46.5680585,0 7.4815241,46.5681539,0 7.4816035,46.5684949,0 7.4818155,46.5686213,0 7.4821328,46.5687589,0 7.4821799,46.5687366,0 7.482268,46.5689251,0 7.4824725,46.569209,0 7.4825891,46.5692747,0 7.4827415,46.5698549,0 7.4827143,46.5698945,0 7.4827948,46.5699664,0 7.4828345,46.5699627,0 7.4831308,46.5704896,0 7.4831135,46.5707772,0 7.4833007,46.5711876,0 7.4832126,46.5711901,0 7.483256,46.5713463,0 7.4830366,46.571619,0 7.4831097,46.5718632,0 7.4832201,46.5720294,0 7.4832994,46.5726753,0 7.4834246,46.5730509,0 7.4833007,46.5733249,0 7.483473,46.5735716,0 7.4839689,46.5737985,0 7.4840594,46.5739559,0 7.4843152,46.5741399,0 + + + + , Summer Walking Path + #style-Summer_Hiking + + relativeToGround + 7.569223,46.5076089,0 7.5694207,46.5076825,0 + + + + , Summer Walking Path + #style-Summer_Hiking + + relativeToGround + 7.4682319,46.4426424,0 7.468149,46.4425956,0 7.4681436,46.4424662,0 7.467957,46.442374,0 + + + + , Summer Walking Path + #style-Summer_Hiking + + relativeToGround + 7.4393848,46.4651486,0 7.4393956,46.4653186,0 7.4393366,46.4654848,0 7.4392534,46.465595,0 7.4387103,46.4661122,0 7.4372103,46.4679225,0 7.4370442,46.4681471,0 7.4360816,46.4694487,0 7.4353769,46.4704585,0 + + + + Simmendamm + Simmendamm, Summer Walking Path + #style-Summer_Hiking + + relativeToGround + 7.4440412,46.4544542,0 7.4442289,46.4544062,0 7.4523989,46.4496459,0 + + + + , Summer Walking Path + #style-Summer_Hiking + + relativeToGround + 7.4677582,46.4299748,0 7.4671079,46.4296049,0 7.4655576,46.4299747,0 7.4594593,46.4346501,0 7.4575621,46.4367506,0 7.4565457,46.4372249,0 7.4560037,46.438038,0 7.454784,46.438309,0 7.4537676,46.4392576,0 7.4535952,46.4392812,0 7.4532036,46.4391925,0 7.4529461,46.4390077,0 7.4525438,46.4389005,0 7.4516104,46.4388968,0 7.4507038,46.4388413,0 7.4504133,46.4388159,0 7.4502317,46.4387637,0 7.450119,46.4387267,0 7.4499634,46.4388549,0 7.449765,46.4390631,0 7.4495343,46.439259,0 7.4490998,46.4394476,0 + + + + , Summer Walking Path + #style-Summer_Hiking + + relativeToGround + 7.6092641,46.4375619,0 7.6088204,46.4375169,0 7.607629,46.437716,0 7.6078456,46.4379897,0 7.6053183,46.4381887,0 7.6040186,46.4382136,0 7.6040186,46.4378901,0 7.6036864,46.4378485,0 7.6032243,46.4377906,0 7.6029354,46.437293,0 7.6032965,46.4360489,0 7.6032604,46.4355015,0 7.6030437,46.4349292,0 7.6026466,46.4345809,0 7.602105,46.4335109,0 7.6010219,46.4318935,0 7.5998305,46.430948,0 7.5993611,46.4304005,0 7.5989279,46.428783,0 7.5988557,46.428136,0 7.5986391,46.427713,0 7.5978087,46.4267175,0 7.5975198,46.4261203,0 7.5974476,46.4256226,0 7.5971588,46.4252741,0 7.5969061,46.4242538,0 7.5961118,46.4229597,0 7.5956063,46.4231588,0 7.5952092,46.4234325,0 7.5947398,46.4247764,0 7.5943427,46.4250004,0 7.594451,46.426394,0 7.5941261,46.4271406,0 7.5937289,46.4276881,0 7.5925014,46.4288577,0 7.5915627,46.430077,0 7.5914183,46.4305249,0 7.5915266,46.4314208,0 7.5912459,46.4320011,0 7.5912016,46.4320926,0 7.5911503,46.4321334,0 7.5910484,46.4321962,0 7.5908982,46.4322258,0 7.5908285,46.4322665,0 7.5907266,46.4322776,0 7.5906407,46.4323293,0 7.5905495,46.4323404,0 7.5905388,46.4323959,0 7.5905989,46.4324636,0 7.5906139,46.4325216,0 7.5905817,46.4326288,0 7.5906139,46.4327028,0 7.590571,46.4327471,0 7.590512,46.4327323,0 7.5905012,46.4326732,0 7.5904154,46.4326547,0 7.5903886,46.4325992,0 7.5903296,46.4325992,0 7.5903189,46.4326695,0 7.5902759,46.4327249,0 7.5902652,46.4328063,0 7.5901526,46.4329763,0 7.5900505,46.4331525,0 7.5900506,46.4332241,0 7.5899969,46.4332504,0 7.5899648,46.4333091,0 7.5899112,46.4333498,0 7.5898736,46.4333017,0 7.5897985,46.4332795,0 7.5897395,46.4332388,0 7.5897073,46.4331649,0 7.5896322,46.433176,0 7.5895858,46.4332561,0 7.5896161,46.4333609,0 7.5895893,46.4334459,0 7.5894628,46.4335199,0 7.5894069,46.433383,0 7.5893318,46.4333128,0 7.5892084,46.4332795,0 7.5891387,46.4332721,0 7.5891212,46.4333221,0 7.5890529,46.4333793,0 7.5890046,46.4333941,0 7.5889724,46.4333645,0 7.5888812,46.4332093,0 7.5887685,46.4331242,0 7.5886237,46.4330836,0 7.5885384,46.4330396,0 7.5884896,46.4329985,0 7.5883662,46.4329431,0 7.5881892,46.4329394,0 7.5880336,46.432932,0 7.5879102,46.432895,0 7.5878244,46.4328913,0 7.5877171,46.4329061,0 7.587642,46.4328654,0 7.5875347,46.4328765,0 7.5874489,46.4329394,0 7.5874543,46.4330614,0 7.5875455,46.4331908,0 7.5875347,46.4332869,0 7.5875783,46.4333968,0 7.587642,46.4334496,0 7.5876796,46.4335309,0 7.5877815,46.4335383,0 7.5878878,46.4335835,0 7.5879531,46.433627,0 7.58798,46.4337232,0 7.5879811,46.4338264,0 7.5880229,46.4339006,0 7.5880014,46.43403,0 7.5879707,46.4341598,0 7.5879853,46.4342408,0 7.5880551,46.4343221,0 7.5881758,46.4343754,0 7.5882053,46.4344478,0 7.5881731,46.4345254,0 7.5880898,46.4345803,0 7.5880551,46.4346585,0 7.5879531,46.4347251,0 7.5878304,46.4347381,0 7.5877547,46.4347214,0 7.5876527,46.4347325,0 7.5875562,46.4347694,0 7.5874543,46.4347879,0 7.5873416,46.4348693,0 7.5873187,46.4349658,0 7.5872152,46.4350689,0 7.5871002,46.4351835,0 7.5870787,46.4352501,0 7.5869822,46.4353018,0 7.586832,46.4352981,0 7.5866818,46.4352538,0 7.586655,46.4351687,0 7.5865477,46.4350911,0 7.5863103,46.4350611,0 7.5861507,46.4350837,0 7.5859415,46.4350874,0 7.5856894,46.4351465,0 7.5855445,46.4352501,0 7.5854855,46.4353536,0 7.5854508,46.4354567,0 7.5854372,46.4356013,0 7.5853997,46.4357565,0 7.5852945,46.4359217,0 7.585169,46.4360116,0 7.5850134,46.4361189,0 7.5848418,46.4361336,0 7.5846755,46.4361299,0 7.5845038,46.4361558,0 7.5842285,46.4362702,0 7.5841122,46.4364516,0 7.5840908,46.4365921,0 7.5840532,46.4367067,0 7.5839567,46.436751,0 7.5838816,46.4367584,0 7.5838185,46.4367223,0 7.5837796,46.4366549,0 7.5836616,46.4366105,0 7.5835704,46.4365588,0 7.5834417,46.4365588,0 7.5833265,46.4365998,0 7.5832164,46.4366697,0 7.5830258,46.4367223,0 7.582916,46.4366993,0 7.5828623,46.4366586,0 7.582755,46.4366771,0 7.5827336,46.4367251,0 7.5827228,46.4367954,0 7.5826531,46.4368508,0 7.5825741,46.4368657,0 7.5824707,46.4368545,0 7.5823098,46.4368804,0 7.582122,46.436947,0 7.5819504,46.436995,0 7.5818699,46.4370024,0 7.5818002,46.436995,0 7.5817519,46.4369543,0 7.5817358,46.43691,0 7.5816768,46.4368915,0 7.58165,46.4368435,0 7.5816392,46.4367806,0 7.581607,46.4367362,0 7.5815909,46.4366734,0 7.5815427,46.4366475,0 7.5814461,46.4366475,0 7.5813388,46.4366771,0 7.5811725,46.436751,0 7.5810062,46.4367621,0 7.5808556,46.4367572,0 7.5806522,46.4367954,0 7.5804912,46.4367769,0 7.5803472,46.4367976,0 7.5802171,46.4368459,0 7.5802016,46.4369137,0 7.5801211,46.4369359,0 7.580046,46.4369211,0 7.5799333,46.4369322,0 7.5799119,46.4369765,0 7.5798421,46.4370061,0 7.5797779,46.4370077,0 7.5797188,46.4370357,0 7.5796383,46.4370579,0 7.5795526,46.4370554,0 7.5794988,46.4370357,0 7.5794237,46.4370135,0 7.5793379,46.4369876,0 7.5792908,46.4369913,0 7.5792252,46.4370135,0 7.5791609,46.4370431,0 7.5791072,46.4370579,0 7.5790268,46.4370616,0 7.5789356,46.4370357,0 7.5788122,46.4370579,0 7.5787049,46.4371429,0 7.5785547,46.437191,0 7.5784206,46.437239,0 7.5783294,46.437239,0 7.5782436,46.4372131,0 7.578147,46.4371836,0 7.5780451,46.437154,0 7.5779217,46.4371688,0 7.5777876,46.4371614,0 7.5776899,46.4371324,0 7.5775891,46.4371577,0 7.5774908,46.4372214,0 7.5773692,46.437239,0 7.5772726,46.437202,0 7.5771278,46.437276,0 7.5771009,46.4373351,0 7.5770366,46.437398,0 7.5770526,46.4374867,0 7.5771009,46.4375385,0 7.5771438,46.4376087,0 7.5771009,46.4376605,0 7.5770312,46.4376645,0 7.57694,46.4376198,0 7.5768756,46.4376531,0 7.5768273,46.4377122,0 7.576763,46.43769,0 7.5767201,46.4376568,0 7.5766181,46.4376457,0 7.576543,46.43769,0 7.5764518,46.4377159,0 7.5763445,46.4377048,0 7.5762212,46.4377233,0 7.5761943,46.4377714,0 7.5760871,46.4378083,0 7.576012,46.4378342,0 7.5760495,46.4378934,0 7.5761085,46.4379673,0 7.5761675,46.4379932,0 7.576189,46.438056,0 7.5762335,46.4381256,0 7.5762051,46.4381743,0 7.5759959,46.4382224,0 7.5757276,46.4382076,0 7.5754594,46.4382076,0 7.5753682,46.4381706,0 7.5752341,46.4381078,0 7.5751161,46.4381109,0 7.5750571,46.4381706,0 7.5750036,46.4381659,0 7.5748908,46.438141,0 7.5747835,46.4381189,0 7.5747406,46.4380819,0 7.5746816,46.438056,0 7.5746011,46.4380856,0 7.5745099,46.4380967,0 7.5744621,46.4380832,0 7.574349,46.4380819,0 7.5742941,46.4380642,0 7.5742095,46.4380043,0 7.5741344,46.4379303,0 7.5740003,46.4378601,0 7.5739037,46.4378194,0 7.5737428,46.4378083,0 7.5736095,46.437843,0 7.5735448,46.4379215,0 7.5734209,46.4379562,0 7.5733458,46.4380412,0 7.5733201,46.4381126,0 7.5732493,46.4381891,0 7.5732117,46.4382741,0 7.5731259,46.438422,0 7.5731152,46.4385847,0 7.5730776,46.4386438,0 7.572965,46.4387067,0 7.5728577,46.4387621,0 7.5727826,46.4388397,0 7.5727075,46.438995,0 7.5727348,46.4391616,0 7.5727665,46.439361,0 7.5726216,46.4395532,0 7.5725251,46.4396567,0 7.5725251,46.4397824,0 7.5725734,46.4399044,0 7.5726324,46.4399562,0 7.5726914,46.4400708,0 7.5726753,46.4401706,0 7.5725895,46.4402704,0 7.5723588,46.4404035,0 7.5716278,46.4407909,0 7.5706985,46.4416291,0 7.5701108,46.4423354,0 7.5693728,46.4429852,0 7.5688535,46.4437668,0 7.5675552,46.4450099,0 7.5667762,46.4458951,0 7.5659698,46.4470345,0 + + + + , Summer Walking Path + #style-Summer_Hiking + + relativeToGround + 7.4742902,46.543847,0 7.4740706,46.5437738,0 7.474096,46.5437005,0 7.4741839,46.5437162,0 7.4741585,46.5436234,0 7.4739037,46.5435112,0 7.473769,46.543193,0 7.4735787,46.5432623,0 7.4733698,46.5429187,0 7.4728954,46.5428416,0 7.4729051,46.5427908,0 7.4733112,46.542578,0 7.4735425,46.5427068,0 7.4735435,46.5426288,0 7.4732848,46.5422881,0 7.4731111,46.5423086,0 7.4730184,46.5422354,0 7.4730584,46.5420968,0 7.4730262,46.5419884,0 7.4727734,46.5419123,0 7.4729002,46.5417844,0 7.4724395,46.5414984,0 7.472902,46.5410832,0 7.4728875,46.5409579,0 7.4731061,46.5409579,0 7.4732465,46.5406833,0 7.4733172,46.5406909,0 7.4732599,46.5407253,0 7.4732991,46.5407434,0 7.4734232,46.5405983,0 7.4734576,46.5406871,0 7.4735388,46.5406947,0 7.4736859,46.5409144,0 7.4738822,46.5409576,0 7.4737586,46.5410479,0 7.473906,46.5410955,0 7.4739511,46.5410218,0 7.4740866,46.5410242,0 7.4741531,46.5411691,0 7.4743005,46.5411953,0 7.4743741,46.5412571,0 7.4742957,46.5411097,0 7.4743694,46.5409933,0 7.47431,46.5408602,0 7.4745595,46.5406986,0 7.4743504,46.5404181,0 7.4742957,46.5401187,0 7.4739061,46.5395675,0 7.4739061,46.5391722,0 7.4728853,46.5387885,0 7.4727226,46.5388327,0 7.4726063,46.538735,0 7.4720691,46.5387211,0 7.4719273,46.5385443,0 7.4718017,46.5385002,0 7.4718668,46.5384583,0 7.4718622,46.538356,0 7.471925,46.5382746,0 7.4721784,46.5382374,0 7.4720691,46.5374375,0 7.4722691,46.5372631,0 7.4722249,46.5371584,0 7.4723249,46.5371515,0 7.4720552,46.5368073,0 7.4719436,46.5365911,0 7.4717622,46.5365515,0 7.4717715,46.5366236,0 7.4716668,46.5365515,0 7.4715087,46.5365422,0 7.4714273,46.5365957,0 7.4711902,46.5365911,0 7.4712785,46.5362539,0 7.4714273,46.5360818,0 7.4713041,46.5360283,0 7.4712739,46.5359469,0 7.4711948,46.5358795,0 7.471125,46.5358865,0 7.4710599,46.5357516,0 7.4708669,46.5357167,0 7.4710948,46.5356353,0 7.4708367,46.535161,0 7.4710785,46.5351354,0 7.4711413,46.5348796,0 7.4709762,46.5347843,0 7.4711413,46.5346843,0 7.4710437,46.5345936,0 7.4714436,46.534368,0 7.4714041,46.5342797,0 7.4711832,46.5341936,0 7.4712739,46.5341448,0 7.4714785,46.534175,0 7.4714901,46.5340588,0 7.4715901,46.5339774,0 7.4714483,46.5339169,0 7.4715855,46.5338913,0 7.4715134,46.5337518,0 7.4716529,46.5335844,0 7.4715599,46.5334518,0 + + + + , Summer Walking Path + #style-Summer_Hiking + + relativeToGround + 7.4715599,46.5334518,0 7.4716933,46.5334754,0 7.4717591,46.5334871,0 7.4723134,46.5334289,0 7.4724659,46.5335346,0 7.4725436,46.5334476,0 7.472668,46.5334811,0 7.4727831,46.5334182,0 7.4727617,46.5334784,0 7.4729946,46.5335748,0 7.473016,46.5334463,0 7.473285,46.5334463,0 7.473562,46.5335266,0 7.4734933,46.5336569,0 7.4737722,46.5335744,0 7.4740695,46.533687,0 7.4742803,46.533611,0 7.4743445,46.5334447,0 7.4746862,46.5332667,0 7.4746312,46.5333989,0 7.4749193,46.5334225,0 7.4757731,46.5331973,0 7.4759525,46.5333426,0 7.4764802,46.5331855,0 7.4767827,46.5331868,0 7.4768233,46.5333151,0 7.4773418,46.533209,0 7.4774374,46.5330375,0 7.4775343,46.533027,0 7.4776076,46.5331331,0 7.4782663,46.5329118,0 7.4782532,46.532735,0 7.478481,46.5327075,0 7.478663,46.5327926,0 7.4789262,46.5326447,0 7.4791488,46.5326538,0 7.4791645,46.5325674,0 7.4797027,46.5324338,0 7.4804792,46.5328542,0 7.4806337,46.532828,0 7.480728,46.5329026,0 7.4809244,46.5328372,0 7.4809991,46.5327481,0 7.4812112,46.5327403,0 7.4812845,46.5326591,0 7.4813998,46.5326735,0 7.4815255,46.5327795,0 7.4816237,46.5327678,0 7.481642,46.5328673,0 7.4817546,46.532807,0 7.4818319,46.532976,0 7.4823072,46.5327795,0 7.4826136,46.5327953,0 + + + + , Summer Walking Path + #style-Summer_Hiking + + relativeToGround + 7.4826136,46.5327953,0 7.4832671,46.5330604,0 7.483638,46.5331012,0 7.4836392,46.5332404,0 7.4837808,46.5331216,0 7.4844133,46.5333052,0 7.4846353,46.5331804,0 7.4847205,46.5333172,0 7.4850038,46.533196,0 7.485209,46.5334301,0 7.4854334,46.5332644,0 7.4856758,46.5334481,0 7.4858403,46.5332236,0 7.4860635,46.5335045,0 7.4864127,46.5332812,0 7.4865448,46.5334001,0 7.4867464,46.5333544,0 7.4866924,46.5331996,0 7.4861523,46.5329248,0 7.4859435,46.5324759,0 7.4860743,46.5324471,0 7.486058,46.5321473,0 7.4864378,46.5318491,0 7.486282,46.5312689,0 7.4864986,46.5312408,0 7.4864363,46.5309826,0 7.4866945,46.5306265,0 7.4874629,46.530166,0 7.4876105,46.5306214,0 7.4874752,46.5308091,0 7.4880044,46.5309844,0 7.4879828,46.5311506,0 7.4884043,46.5312983,0 7.4889058,46.5313136,0 7.4890597,46.5315536,0 7.4894966,46.5316213,0 7.4894966,46.5317628,0 7.4901334,46.5321536,0 7.4907426,46.5323505,0 7.4913734,46.5323105,0 7.4918656,46.5323874,0 7.4920133,46.5319413,0 7.4923364,46.5318582,0 7.4925056,46.5319905,0 7.4940365,46.5316302,0 7.4942096,46.531841,0 7.494616,46.5317695,0 7.4954627,46.5322662,0 7.4954213,46.5326011,0 7.4961739,46.5326726,0 7.4965389,46.5330865,0 7.4963094,46.5331091,0 7.4962191,46.5338617,0 7.4959858,46.5339068,0 7.496046,46.5344826,0 7.4957449,46.5346632,0 7.495775,46.5352728,0 7.4950262,46.5360781,0 7.4937806,46.5359652,0 7.4934006,46.5361985,0 7.4927044,46.5360856,0 7.4926442,46.5362286,0 7.4925012,46.5361496,0 7.4922228,46.5363114,0 7.4921437,46.5362361,0 7.4919029,46.5364506,0 7.4918126,46.536413,0 7.4911804,46.5366802,0 7.4903827,46.5375419,0 7.4906687,46.5376886,0 7.490759,46.5379107,0 7.4911127,46.5378956,0 7.4915755,46.5381251,0 7.491775,46.5383472,0 7.4939236,46.5380913,0 7.4945671,46.5382079,0 7.4950563,46.5380348,0 7.4952181,46.5376886,0 7.4955605,46.5376096,0 7.4956885,46.5379784,0 7.4964938,46.5377225,0 7.4968926,46.5378994,0 7.4970545,46.5376736,0 7.4982774,46.5377902,0 7.4983038,46.5377075,0 7.4981231,46.5376661,0 7.4985446,46.5375456,0 7.4988005,46.5376284,0 7.498867,46.5378034,0 7.4990317,46.5377973,0 7.4990378,46.5379102,0 7.4997,46.5380597,0 7.4996664,46.5385602,0 7.4992514,46.5388867,0 7.499343,46.5390179,0 7.4997183,46.5389294,0 7.4996664,46.539024,0 7.4998464,46.5390728,0 7.5001241,46.5388287,0 7.5001882,46.5385998,0 7.5000265,46.5384686,0 7.5003987,46.5381391,0 7.5006276,46.5381208,0 7.5007252,46.5379804,0 7.5006642,46.5379224,0 7.5008015,46.5379194,0 7.5009022,46.5381024,0 7.5012501,46.5379224,0 7.5012806,46.5377058,0 7.5019458,46.5372664,0 7.5023699,46.5375013,0 7.5021197,46.5386273,0 7.5025042,46.5385144,0 7.5024676,46.5388592,0 7.5028063,46.5393444,0 7.5028378,46.5395826,0 + + + + , Summer Walking Path + #style-Summer_Hiking + + relativeToGround + 7.4450569,46.4629393,0 7.4444602,46.463138,0 7.443613,46.463674,0 7.4426102,46.4637086,0 7.4421779,46.4636567,0 7.4419013,46.463795,0 7.4417802,46.4640717,0 7.4414823,46.4643468,0 7.4411283,46.4644539,0 7.4406961,46.4643705,0 + + + + , Summer Walking Path + #style-Summer_Hiking + + relativeToGround + 7.6229468,46.3732175,0 7.6226819,46.3729271,0 7.6224073,46.3727198,0 7.6219266,46.3722934,0 7.6215061,46.3719381,0 7.6212314,46.3716301,0 7.6210426,46.3715235,0 7.6209545,46.3713816,0 7.6209319,46.3712759,0 7.6208667,46.3711625,0 7.6206931,46.3710179,0 7.62051,46.3708845,0 7.620338,46.3707338,0 7.6202476,46.3705534,0 7.6201733,46.3702665,0 7.6200628,46.3699434,0 7.6199611,46.3697469,0 7.6197608,46.3695189,0 7.6195411,46.3693534,0 7.6193051,46.3691457,0 7.6190999,46.3688752,0 7.6188746,46.3687665,0 7.6186973,46.3685452,0 7.618483,46.3684123,0 7.6182273,46.368213,0 7.6181587,46.3680412,0 7.6181758,46.3679524,0 7.6181158,46.3678932,0 7.6178325,46.3677569,0 7.6177124,46.3676859,0 7.6172403,46.3675615,0 7.6170085,46.3673897,0 7.6165021,46.3669159,0 7.6163219,46.3668093,0 7.6162103,46.3666316,0 7.6155752,46.366294,0 7.6149829,46.3661993,0 7.6144079,46.3660512,0 7.6141847,46.3660157,0 7.6141847,46.365838,0 7.6141332,46.3658025,0 7.6140474,46.365761,0 7.6137985,46.3657492,0 7.6133779,46.3656781,0 7.6130517,46.3653879,0 7.612923,46.365299,0 7.6128372,46.3650503,0 7.6127084,46.3649259,0 7.6125024,46.3648489,0 7.6121591,46.3648074,0 7.611996,46.3646949,0 7.6117214,46.3646297,0 7.611627,46.3646179,0 7.6114553,46.3645054,0 7.611318,46.3644698,0 7.6111978,46.3644935,0 7.6111206,46.3643632,0 7.6110691,46.364304,0 7.6109489,46.3642803,0 7.6107686,46.3642566,0 7.6105627,46.3642033,0 7.6104511,46.3641263,0 7.6102279,46.3640434,0 7.6099361,46.3639841,0 7.6099018,46.3639486,0 7.6098588,46.3639841,0 7.6099189,46.3640848,0 7.6099618,46.3641796,0 7.6103223,46.3643336,0 7.6103824,46.3644402,0 7.6105627,46.3645409,0 7.6107772,46.3647956,0 7.6110176,46.3649377,0 7.6112493,46.3651569,0 7.6114038,46.3653049,0 7.6114381,46.3653642,0 7.6113437,46.365376,0 7.6111806,46.3652813,0 7.6108459,46.3652102,0 7.6106742,46.3651154,0 7.6103738,46.3650443,0 7.609876,46.3648903,0 7.609567,46.3647245,0 7.6094039,46.3646594,0 7.6093009,46.3645764,0 7.6091121,46.3645172,0 7.6088546,46.3644994,0 7.6085456,46.3644876,0 7.6083053,46.3644165,0 7.6081165,46.3643514,0 7.6080221,46.3642092,0 7.6078933,46.3640138,0 7.6077989,46.3639545,0 7.6076702,46.3638835,0 7.6074728,46.3638657,0 7.6073783,46.3638005,0 7.6072238,46.3636643,0 7.6069921,46.3634985,0 7.6068805,46.3633563,0 7.6067775,46.3632734,0 7.6066574,46.3631845,0 7.6066488,46.3630779,0 7.6066059,46.3630187,0 7.6064342,46.3628884,0 7.606357,46.3628114,0 7.606254,46.3627403,0 7.6061338,46.3627225,0 7.6059707,46.3626811,0 7.6057819,46.3626396,0 7.6056274,46.3626041,0 7.6055158,46.3625745,0 7.6053699,46.3624975,0 7.605224,46.3624382,0 7.6051639,46.3624027,0 7.6050094,46.3623731,0 7.6048807,46.3623908,0 7.6047691,46.3623198,0 7.6046747,46.3623375,0 7.6045717,46.362379,0 7.6044773,46.3624027,0 7.6042026,46.3623968,0 7.6039794,46.3623849,0 7.6038249,46.3624442,0 7.6036361,46.362456,0 7.6034645,46.3624264,0 7.603267,46.3623968,0 7.6031812,46.3624264,0 7.6031211,46.3625626,0 7.603001,46.3625863,0 7.6028465,46.3626159,0 7.6025547,46.3625448,0 7.6022199,46.3624086,0 7.6019624,46.3623257,0 7.6018079,46.3623198,0 7.6016792,46.362225,0 7.6016792,46.3621184,0 7.6017822,46.3620118,0 7.6018251,46.3619111,0 7.6018251,46.3618281,0 7.6021255,46.3617393,0 7.60228,46.361686,0 7.6024517,46.3616741,0 7.6026062,46.3616564,0 7.6027349,46.3616327,0 7.6029666,46.3615498,0 7.6031211,46.3615675,0 7.6032499,46.3614905,0 7.6032499,46.3614313,0 7.6031383,46.3612951,0 7.6030954,46.3612121,0 7.6029323,46.3613187,0 7.6029151,46.3614076,0 7.602795,46.3614668,0 7.6027521,46.3615142,0 7.602589,46.3614491,0 7.602486,46.3613602,0 7.6026147,46.3612536,0 7.6027521,46.3611351,0 7.6028207,46.3609515,0 7.6029838,46.3607501,0 7.6030267,46.3606968,0 7.6030096,46.3604895,0 7.6030611,46.3602585,0 7.6030954,46.3601282,0 7.6030696,46.3599149,0 7.6029924,46.3595714,0 7.6030525,46.359293,0 7.6031898,46.3591034,0 7.60331,46.3587954,0 7.6034387,46.3584637,0 7.6033958,46.3581853,0 7.6033443,46.3579187,0 7.6033529,46.3577588,0 7.60331,46.3576699,0 7.6030954,46.3576521,0 7.6028722,46.3576166,0 7.6026062,46.35751,0 7.6023487,46.3573263,0 7.601971,46.3572434,0 7.6016534,46.3570183,0 7.6014904,46.3568287,0 7.6013015,46.3565029,0 7.6011899,46.3563489,0 7.6010698,46.3562719,0 7.6008895,46.356266,0 7.6007865,46.3562008,0 7.6005805,46.3559402,0 7.6005548,46.3557328,0 7.6005119,46.355567,0 7.6004089,46.3553359,0 7.600263,46.3551286,0 7.6001857,46.3549272,0 7.6002286,46.3548146,0 7.6000999,46.3547376,0 7.6002716,46.3546547,0 7.6002029,46.3545066,0 7.6000484,46.3542637,0 7.5999111,46.3540564,0 7.5999282,46.3539142,0 7.5998853,46.353849,0 7.5999025,46.3533218,0 7.5998338,46.3531737,0 7.5998081,46.3530433,0 7.5996707,46.3528656,0 7.5997051,46.3526287,0 7.5996707,46.3523443,0 7.5995763,46.3521073,0 7.5994476,46.35174,0 7.5993789,46.3514734,0 7.5993017,46.3513668,0 7.5993017,46.3512246,0 7.5995162,46.3509639,0 7.5994218,46.3506677,0 7.599439,46.3505492,0 7.5993961,46.3504426,0 7.599336,46.3502293,0 7.5992416,46.3501286,0 7.5991214,46.3499272,0 7.599027,46.3497494,0 7.5989755,46.3497079,0 7.5988039,46.3492162,0 7.5989068,46.348997,0 7.5989841,46.3488015,0 7.598924,46.34876,0 7.5988468,46.3487126,0 7.5987695,46.3486534,0 7.5988039,46.3483097,0 7.5988897,46.3481202,0 7.5989154,46.3480313,0 7.5990699,46.3476995,0 7.5991386,46.3475929,0 7.5992244,46.3475158,0 7.5994132,46.3474862,0 7.599542,46.3474566,0 7.5997137,46.3473203,0 7.5996536,46.3472374,0 7.5995506,46.3471722,0 7.5996278,46.3467397,0 7.5996278,46.3464197,0 7.5997652,46.346319,0 7.5999969,46.346005,0 7.6000226,46.345845,0 7.6001085,46.345768,0 7.6001171,46.3456673,0 7.6000656,46.345531,0 7.6000141,46.3453355,0 7.6000656,46.3452881,0 7.6002372,46.3451992,0 7.6003831,46.3450866,0 7.6003917,46.3448615,0 7.6004775,46.3447074,0 7.600572,46.3446067,0 7.6005119,46.3444704,0 7.6003831,46.3442749,0 7.600529,46.3442808,0 7.6006664,46.3442749,0 7.6007694,46.3442334,0 7.6007694,46.3440972,0 7.6008724,46.3439194,0 7.6011556,46.343789,0 7.6014303,46.3437416,0 7.6015762,46.3436705,0 7.6016019,46.3439609,0 7.6017135,46.3440438,0 7.6018852,46.3437831,0 7.601971,46.343635,0 7.6021427,46.3435698,0 7.6022542,46.3435994,0 7.6024002,46.343558,0 7.6025289,46.3435461,0 7.6027521,46.3435165,0 7.602898,46.3434276,0 7.6030096,46.3434217,0 7.6030868,46.3433861,0 7.6031898,46.3433269,0 7.60337,46.3432973,0 7.60337,46.343238,0 7.6034215,46.3431906,0 7.6035589,46.3431906,0 7.6036533,46.3431432,0 7.6036705,46.3430958,0 7.6039022,46.3429417,0 7.6042112,46.3428825,0 7.6042713,46.3428232,0 7.6044086,46.3427521,0 7.6045116,46.3426573,0 7.6045631,46.342527,0 7.6045631,46.3424203,0 7.6045373,46.3423611,0 7.6045116,46.3422959,0 7.6044343,46.3422011,0 7.6043485,46.3421418,0 7.6043485,46.3420826,0 7.6044086,46.3419581,0 7.6044086,46.3418752,0 7.6044601,46.3416737,0 7.6044601,46.3416085,0 7.6044944,46.341496,0 7.6044858,46.3414012,0 7.6044944,46.3413123,0 7.6044429,46.341176,0 7.6044429,46.3410693,0 7.6044601,46.3409212,0 7.6044172,46.3408205,0 7.6043142,46.340619,0 7.6043142,46.340536,0 7.6042198,46.3403642,0 7.6041769,46.3402279,0 7.6041597,46.3400798,0 7.6041597,46.3399316,0 7.6041425,46.339825,0 7.6040567,46.3396946,0 7.6039623,46.3395643,0 7.6038764,46.3394457,0 7.603782,46.339345,0 7.6036705,46.3392087,0 7.6034988,46.3391554,0 7.6033786,46.3391198,0 7.60331,46.3391672,0 7.6031898,46.3391435,0 7.6030353,46.3391791,0 7.6029323,46.3391791,0 7.6029151,46.3391554,0 7.6027778,46.3392028,0 7.6027177,46.3392324,0 7.6027177,46.3392561,0 + + + + Gemmiweg + Gemmiweg, Summer Walking Path + #style-Summer_Hiking + + relativeToGround + 7.6144451,46.3984215,0 7.6144629,46.3983312,0 7.6143611,46.398261,0 7.6140943,46.3980976,0 7.6139827,46.3980162,0 7.6139853,46.3978615,0 7.6139363,46.3976182,0 7.6133218,46.3975412,0 7.6124978,46.3971683,0 7.612206,46.3968545,0 7.6120139,46.3966832,0 7.6116052,46.3966355,0 7.611382,46.3964875,0 7.6117254,46.3962803,0 7.6120344,46.3962507,0 7.6122232,46.3963218,0 7.6123777,46.3963099,0 7.6124635,46.3962034,0 7.6121545,46.3961324,0 7.6121373,46.3960021,0 7.6123262,46.3959666,0 7.6123777,46.3957772,0 7.6128068,46.3951379,0 7.6131244,46.3949011,0 7.6132531,46.3945341,0 7.6134129,46.3943691,0 7.6134935,46.3947235,0 7.6136045,46.3948874,0 7.6136651,46.3945637,0 7.6138969,46.394463,0 7.6142193,46.3946836,0 7.6141604,46.3948245,0 7.6141127,46.3950487,0 7.6145638,46.394795,0 7.6151903,46.3940846,0 7.6153196,46.3934043,0 7.615535,46.3933165,0 7.6156972,46.3932504,0 7.6160405,46.3931675,0 7.6163495,46.3934161,0 7.6165875,46.3938373,0 + + + + , Summer Walking Path + #style-Summer_Hiking + + relativeToGround + 7.4393848,46.4651486,0 7.4391324,46.4649312,0 + + + + , Summer Walking Path + #style-Summer_Hiking + + relativeToGround + 7.4444111,46.4575848,0 7.4448112,46.457744,0 + + + + Schulstrasse + Schulstrasse, Summer Walking Path + #style-Summer_Hiking + + relativeToGround + 7.4455274,46.4564945,0 7.4451624,46.4562853,0 + + + + Kronenplatz + Kronenplatz, Summer Walking Path + #style-Summer_Hiking + + relativeToGround + 7.4425957,46.4564794,0 7.4428776,46.4565207,0 7.4429918,46.455969,0 7.4427674,46.4559269,0 7.4425496,46.4558861,0 7.4424659,46.4563108,0 7.442629,46.4563359,0 7.4425957,46.4564794,0 + + + + Kronenplatz + Kronenplatz, Summer Walking Path + #style-Summer_Hiking + + relativeToGround + 7.4433217,46.4560368,0 7.4429918,46.455969,0 + + + + , Summer Walking Path + #style-Summer_Hiking + + relativeToGround + 7.445441,46.4596274,0 7.4460723,46.4588277,0 7.4461285,46.4588623,0 + + + + , Summer Walking Path + #style-Summer_Hiking + + relativeToGround + 7.5597509,46.4884691,0 7.5600553,46.4879829,0 7.5605373,46.4880844,0 7.5607923,46.4876673,0 + + + + , Summer Walking Path + #style-Summer_Hiking + + relativeToGround + 7.4991265,46.3699083,0 7.4988246,46.3699358,0 7.498686,46.370369,0 7.4982529,46.370369,0 7.4976898,46.3704989,0 7.4968928,46.3705249,0 7.4968495,46.3707934,0 7.4958706,46.3712786,0 7.4948224,46.3714951,0 7.4936871,46.3716586,0 7.4926614,46.3714013,0 + + + + , Summer Walking Path + #style-Summer_Hiking + + relativeToGround + 7.5802311,46.4989017,0 7.5803456,46.4986969,0 7.5802886,46.4986171,0 7.5802181,46.4985699,0 + + + + , Summer Walking Path + #style-Summer_Hiking + + relativeToGround + 7.5659698,46.4470345,0 7.568545,46.4382212,0 + + + + Hängebrücke Hohstalden + Hängebrücke Hohstalden, Summer Walking Path + #style-Summer_Hiking + + relativeToGround + 7.61705,46.560728,0 7.6174601,46.5593795,0 + + + + , Summer Walking Path + #style-Summer_Hiking + + relativeToGround + 7.579346,46.50235,0 7.579269,46.50252,0 7.579288,46.502698,0 7.57914,46.502895,0 7.579196,46.503146,0 7.5789389,46.5032379,0 7.5787664,46.5034171,0 7.5777661,46.503767,0 + + + + Bonderlenbach Walking Path + Bonderlenbach Walking Path, Summer Walking Path + #style-Summer_Hiking + + relativeToGround + 7.5774594,46.4953694,0 7.5773913,46.4953126,0 7.577239,46.495303,0 7.5771044,46.495242,0 7.576939,46.4951141,0 7.577052,46.494997,0 7.5772593,46.4948772,0 7.5773923,46.4947336,0 7.577531,46.494696,0 7.5776088,46.4943938,0 7.57769,46.49426,0 7.5778693,46.4941249,0 7.577957,46.493648,0 + + + + Bonderlenbach Walking Path + Bonderlenbach Walking Path, Summer Walking Path + #style-Summer_Hiking + + relativeToGround + 7.5788628,46.4927947,0 7.5789515,46.4926509,0 7.5791509,46.4925641,0 + + + + , Summer Walking Path + #style-Summer_Hiking + + relativeToGround + 7.563427,46.498168,0 7.5642551,46.4979457,0 + + + + , Summer Walking Path + #style-Summer_Hiking + + relativeToGround + 7.5707894,46.5079608,0 7.5707636,46.5078013,0 7.5696221,46.5072814,0 7.5695448,46.5076713,0 7.5694207,46.5076825,0 + + + + , Summer Walking Path + #style-Summer_Hiking + + relativeToGround + 7.5655643,46.5070497,0 7.564925,46.5070055,0 7.564616,46.5070823,0 7.5642126,46.5070527,0 7.5633286,46.5066747,0 7.5635174,46.5065565,0 7.564041,46.506592,0 7.5636204,46.506397,0 7.5629681,46.5064088,0 7.5604532,46.5069996,0 7.5600241,46.5066688,0 7.5589855,46.5063202,0 7.5580242,46.5058299,0 7.5574663,46.5057413,0 7.5568998,46.5057531,0 7.5559986,46.5055995,0 7.5532009,46.5040121,0 + + + + , Summer Walking Path + #style-Summer_Hiking + + relativeToGround + 7.5676637,46.4896332,0 7.5676054,46.4894827,0 7.567476,46.489347,0 7.5669614,46.4890433,0 7.566749,46.488896,0 7.566351,46.488737,0 7.566058,46.48822,0 7.566112,46.488037,0 7.5659924,46.4879446,0 7.565645,46.487817,0 7.56517,46.487748,0 7.564918,46.4876,0 7.563815,46.486383,0 7.563781,46.48615,0 7.563258,46.485336,0 7.563173,46.485097,0 7.5635808,46.4847034,0 7.56399,46.484315,0 7.564052,46.484108,0 7.563941,46.483716,0 7.563332,46.48324,0 7.563376,46.482928,0 7.5637511,46.4825866,0 7.563831,46.482399,0 7.56378,46.482257,0 7.563003,46.481689,0 7.563023,46.481459,0 7.5633366,46.4810949,0 7.5634558,46.4809124,0 7.563457,46.48083,0 7.5633171,46.4806886,0 7.5630604,46.4805584,0 7.562948,46.480452,0 7.562808,46.479719,0 7.562709,46.479606,0 7.562005,46.479358,0 7.5618487,46.4792297,0 7.561782,46.47908,0 7.5617721,46.4788605,0 7.5618,46.47874,0 7.5624466,46.4780984,0 7.562288,46.477703,0 7.562083,46.477529,0 7.562101,46.477352,0 7.562461,46.476986,0 7.562711,46.47685,0 7.562794,46.476692,0 7.562781,46.476621,0 7.562696,46.476563,0 7.5622314,46.476513,0 7.5621583,46.4764818,0 7.561977,46.476351,0 7.5618962,46.4759014,0 7.561704,46.47567,0 7.561627,46.475207,0 7.561799,46.474588,0 7.561714,46.474406,0 7.5612418,46.474131,0 7.5611,46.473945,0 7.561488,46.47345,0 7.561538,46.47326,0 7.561166,46.472885,0 7.561107,46.472688,0 7.561294,46.472118,0 7.5612735,46.4718594,0 7.5611621,46.4717378,0 + + + + , Summer Walking Path + #style-Summer_Hiking + + relativeToGround + 7.5611621,46.4717378,0 7.5610469,46.4717054,0 7.5609132,46.4715494,0 + + + + , Summer Walking Path + #style-Summer_Hiking + + relativeToGround + 7.5621068,46.4705513,0 7.5622317,46.4705599,0 7.5627956,46.4700239,0 7.563029,46.469433,0 7.5632876,46.4691042,0 7.5635408,46.4688811,0 7.5635817,46.469008,0 7.5640286,46.4684621,0 7.564014,46.467933,0 7.5640877,46.4678364,0 7.5641633,46.4678644,0 7.564247,46.467826,0 7.564276,46.467683,0 7.564102,46.467479,0 7.5643394,46.4671283,0 7.564496,46.466775,0 7.5644585,46.4665703,0 7.5642804,46.4663023,0 7.5641749,46.4659848,0 7.5641356,46.4658925,0 7.5642694,46.4656671,0 7.5642626,46.4652282,0 7.563344,46.464121,0 7.56346,46.463889,0 7.5637092,46.4637241,0 7.563776,46.4636,0 7.563387,46.463496,0 7.563191,46.463134,0 7.5631304,46.4625612,0 7.563308,46.462064,0 7.563156,46.461487,0 7.563216,46.461386,0 7.563167,46.461144,0 7.5627558,46.4606653,0 + + + + , Summer Walking Path + #style-Summer_Hiking + + relativeToGround + 7.5627558,46.4606653,0 7.562395,46.460344,0 7.562311,46.459841,0 7.562104,46.459635,0 7.562128,46.459302,0 7.562277,46.459023,0 7.562066,46.458465,0 7.562088,46.458007,0 7.562559,46.457277,0 7.562258,46.456812,0 7.5625,46.456613,0 7.563527,46.456393,0 7.5638831,46.4564126,0 + + + + , Summer Walking Path + #style-Summer_Hiking + + relativeToGround + 7.5435227,46.4827013,0 7.5436247,46.4830653,0 7.5435592,46.4832093,0 7.5435643,46.4834307,0 7.5434451,46.4835786,0 + + + + , Summer Walking Path + #style-Summer_Hiking + + relativeToGround + 7.5436127,46.4825783,0 7.5435227,46.4827013,0 + + + + , Summer Walking Path + #style-Summer_Hiking + + relativeToGround + 7.5405449,46.4792038,0 7.5407348,46.4794281,0 7.5407722,46.4795516,0 7.5408429,46.4796713,0 7.5412903,46.480107,0 7.5414256,46.4803418,0 7.5418407,46.4804783,0 7.5427092,46.4811396,0 7.5431686,46.4820548,0 7.5434355,46.482271,0 7.5435897,46.4824673,0 7.5436127,46.4825783,0 + + + + , Summer Walking Path + #style-Summer_Hiking + + relativeToGround + 7.5392734,46.4802349,0 7.5395718,46.4800879,0 7.5395976,46.4799933,0 7.5400439,46.4798633,0 7.540207,46.4795973,0 7.5401555,46.4790949,0 7.54034,46.479224,0 + + + + , Summer Walking Path + #style-Summer_Hiking + + relativeToGround + 7.5287322,46.4845909,0 7.5294532,46.4849041,0 7.5297364,46.4848864,0 7.5299855,46.4847806,0 7.5301035,46.4847938,0 7.5299338,46.4850755,0 7.5309724,46.4849159,0 7.5322129,46.484865,0 + + + + , Summer Walking Path + #style-Summer_Hiking + + relativeToGround + 7.5564947,46.4921923,0 7.5561256,46.49234,0 7.5558595,46.4922159,0 + + + + , Summer Walking Path + #style-Summer_Hiking + + relativeToGround + 7.5289364,46.4906938,0 7.5297775,46.4904456,0 7.5303783,46.4905165,0 7.5325241,46.4899728,0 7.5333567,46.4895533,0 7.5343609,46.4893051,0 7.5350647,46.4892401,0 7.5353651,46.4892814,0 7.5353565,46.4891751,0 7.5358801,46.488986,0 7.5377512,46.4885191,0 7.5381632,46.4883359,0 7.539073,46.4883359,0 7.5392876,46.4882355,0 7.5399056,46.4881586,0 7.5406694,46.4881527,0 7.5425577,46.4885605,0 7.5426865,46.4886019,0 + + + + , Summer Walking Path + #style-Summer_Hiking + + relativeToGround + 7.5605804,46.4538416,0 7.5601817,46.4540178,0 7.5599834,46.4542594,0 7.5600283,46.4548461,0 7.560247,46.455188,0 7.560294,46.455557,0 7.5600484,46.4561044,0 7.5601535,46.4562692,0 7.560098,46.4567024,0 7.5602085,46.4572266,0 7.5611106,46.4583043,0 7.561229,46.4584659,0 7.5612212,46.4586588,0 7.5614828,46.4589198,0 7.5614623,46.4593025,0 7.5619777,46.4604155,0 7.5619267,46.4606423,0 7.5620549,46.4609595,0 7.5622266,46.4611132,0 + + + + , Summer Walking Path + #style-Summer_Hiking + + relativeToGround + 7.5607503,46.4539705,0 7.5605804,46.4538416,0 + + + + , Summer Walking Path + #style-Summer_Hiking + + relativeToGround + 7.5592176,46.4928554,0 7.5588805,46.4931539,0 + + + + , Summer Walking Path + #style-Summer_Hiking + + relativeToGround + 7.58757,46.5206516,0 7.587624,46.520509,0 7.587569,46.520492,0 7.5873231,46.5205316,0 7.5872162,46.5205068,0 7.5870656,46.5205131,0 7.5870192,46.5204851,0 7.586853,46.520522,0 7.5867788,46.5204989,0 7.5867531,46.5204556,0 7.586698,46.520419,0 7.58654,46.520501,0 7.586356,46.520353,0 7.586116,46.520307,0 7.585928,46.520346,0 7.586103,46.520418,0 7.586086,46.520493,0 7.585796,46.520522,0 7.585176,46.5203633,0 7.5847859,46.5202177,0 + + + + , Summer Walking Path + #style-Summer_Hiking + + relativeToGround + 7.6265519,46.5699584,0 7.6262293,46.5697064,0 7.6258508,46.5695701,0 7.6252722,46.5695891,0 7.6245642,46.5694303,0 7.6239117,46.5688845,0 7.623715,46.5687,0 7.6236341,46.568349,0 7.62342,46.567928,0 7.6233636,46.567667,0 7.6230644,46.5674407,0 7.623046,46.567261,0 7.622904,46.567049,0 7.6228902,46.5669243,0 7.6225899,46.5663963,0 7.6221994,46.5658716,0 7.621795,46.565414,0 7.6214698,46.5652029,0 7.6213299,46.5649714,0 7.62114,46.564566,0 7.620754,46.564259,0 7.62047,46.563916,0 7.620153,46.563799,0 7.619982,46.563521,0 7.619814,46.563445,0 7.619689,46.563286,0 7.619159,46.562907,0 7.619115,46.562645,0 7.618927,46.562489,0 7.618964,46.562351,0 7.618862,46.56205,0 7.6183889,46.5610409,0 7.6180638,46.5608003,0 7.617347,46.560459,0 7.6172232,46.5604252,0 7.617017,46.560369,0 7.616846,46.5603423,0 7.6164317,46.5601639,0 + + + + , Summer Walking Path + #style-Summer_Hiking + + relativeToGround + 7.618372,46.559119,0 7.618307,46.559387,0 7.618404,46.55956,0 7.618755,46.559665,0 7.618969,46.559649,0 7.619314,46.559828,0 7.619385,46.559913,0 7.619791,46.560116,0 7.619984,46.560295,0 7.6200836,46.5604261,0 7.620185,46.560498,0 7.6202482,46.5605223,0 7.6202935,46.5605318,0 7.6203308,46.5605679,0 7.6203162,46.5606165,0 7.620289,46.560703,0 7.620332,46.561026,0 7.620423,46.561139,0 7.620723,46.56129,0 7.620805,46.561706,0 7.6208667,46.5617554,0 7.6211,46.5618215,0 7.6212232,46.5618909,0 7.6212343,46.5621671,0 7.621288,46.5622445,0 7.6213723,46.5623164,0 + + + + , Summer Walking Path + #style-Summer_Hiking + + relativeToGround + 7.4499634,46.4388549,0 7.449004,46.4378119,0 7.4487208,46.4371258,0 7.4489182,46.4368774,0 7.4492358,46.4367177,0 7.4496821,46.4368892,0 7.4495619,46.4359014,0 7.4491671,46.4354518,0 7.4478625,46.4349549,0 7.4459484,46.4347183,0 7.4453047,46.434393,0 7.4449099,46.4337068,0 7.4447811,46.4330857,0 7.4444636,46.4330029,0 7.444043,46.4326302,0 7.4439314,46.4322634,0 7.4433821,46.4320268,0 7.4429959,46.4309502,0 7.4428843,46.4308082,0 7.4424895,46.4306544,0 7.4423521,46.4301752,0 7.4420946,46.430193,0 7.4416226,46.4297729,0 7.4408072,46.4295304,0 7.4405239,46.4290098,0 7.440481,46.4285247,0 7.4401892,46.4282999,0 7.4398373,46.4281756,0 7.439597,46.4278621,0 7.4393824,46.4273119,0 7.4392794,46.4266256,0 7.4386958,46.4261287,0 7.4388331,46.4257737,0 7.4388331,46.4254187,0 7.4386614,46.4251229,0 7.4386786,46.4236556,0 7.4386013,46.4233006,0 7.4382065,46.4226498,0 7.4386271,46.4224013,0 7.4388245,46.4221351,0 7.4388588,46.4218866,0 7.4398802,46.4208511,0 7.4397858,46.4204666,0 7.4394511,46.4201944,0 7.4392451,46.4198808,0 7.4397772,46.4188394,0 7.4395626,46.4185613,0 7.4395712,46.4181412,0 7.439185,46.4174962,0 7.4391678,46.4168808,0 7.4397257,46.4163187,0 7.4401034,46.4161767,0 7.4406613,46.4157625,0 7.4424637,46.4134132,0 7.4419144,46.413218,0 7.4419793,46.4126531,0 + + + + , Summer Walking Path + #style-Summer_Hiking + + relativeToGround + 7.4411642,46.3998745,0 7.4407992,46.3997408,0 7.4405978,46.3996171,0 7.440568,46.3996036,0 7.439607,46.3991398,0 7.4392012,46.3987612,0 7.4388588,46.3986409,0 7.4356488,46.3977589,0 7.4353398,46.3974985,0 7.4336403,46.3965928,0 7.4334086,46.3963205,0 7.432679,46.3958055,0 7.429941,46.3951426,0 7.4290913,46.3947104,0 7.4276236,46.3936508,0 7.4269198,46.3933371,0 7.4264391,46.3932246,0 7.4253662,46.3927096,0 7.4246882,46.392082,0 7.4240187,46.3917564,0 7.4232806,46.3916558,0 7.4219673,46.3907737,0 7.4212979,46.3905547,0 + + + + , Summer Walking Path + #style-Summer_Hiking + + relativeToGround + 7.4212979,46.3905547,0 7.4212979,46.3903416,0 7.4214094,46.3901462,0 7.4214094,46.3899982,0 7.4215296,46.3898028,0 7.4214867,46.3895838,0 7.421358,46.3895009,0 7.4211262,46.3895542,0 7.421049,46.3893411,0 7.4209288,46.3892049,0 7.4200018,46.3892641,0 7.4197358,46.3894654,0 7.4195813,46.3894772,0 7.4193152,46.3894654,0 7.4192208,46.3893055,0 7.4184483,46.3887786,0 7.4182337,46.3885951,0 7.4179419,46.3884412,0 7.417693,46.3884353,0 7.4176415,46.3887727,0 7.4177187,46.389051,0 7.4174355,46.3889622,0 7.4171952,46.3887727,0 7.4168175,46.3886129,0 7.4165171,46.3884708,0 7.4158905,46.388305,0 7.4157446,46.3881096,0 7.415633,46.3878787,0 7.4155644,46.387636,0 7.4154271,46.3874584,0 7.4151867,46.3876419,0 7.4148177,46.387488,0 7.4143628,46.3873696,0 7.4140967,46.3872038,0 7.4139851,46.3869492,0 7.4138306,46.3867479,0 7.4134358,46.3866532,0 7.413041,46.386671,0 7.4126719,46.386742,0 7.4119252,46.3866059,0 7.4115818,46.3866118,0 7.4112042,46.3866769,0 7.4108609,46.3868723,0 7.4105519,46.3869611,0 7.4103168,46.387076,0 7.4097279,46.3873637,0 7.4093932,46.3874406,0 7.4086121,46.3875117,0 7.4077366,46.3879202,0 7.4061402,46.3884116,0 7.4056166,46.3883524,0 7.4053334,46.3883524,0 7.4050673,46.3883879,0 7.4047583,46.3885537,0 7.404003,46.3885063,0 7.40287,46.388897,0 7.4025954,46.3889681,0 7.4022435,46.3890924,0 7.4017027,46.3891931,0 7.4012993,46.3891516,0 7.4006041,46.3888319,0 7.399411,46.3885833,0 7.3993252,46.3883761,0 7.3993338,46.3878965,0 7.3996256,46.3874466,0 7.399454,46.3872334,0 7.3994025,46.3869848,0 7.399557,46.3864638,0 7.3994883,46.3861796,0 7.3992308,46.3858007,0 7.3990334,46.3855461,0 7.3991879,46.3843086,0 7.3984326,46.383687,0 7.3977631,46.3834205,0 7.3966215,46.3832903,0 7.395892,46.3830297,0 7.3950852,46.3828758,0 7.394081,46.3824613,0 7.3934115,46.3821535,0 7.3931282,46.3819462,0 7.3927077,46.3816975,0 7.3925703,46.381591,0 7.3922528,46.381135,0 7.3916005,46.3808508,0 7.3911799,46.3807679,0 7.3904932,46.3805548,0 7.389592,46.3801521,0 7.3894886,46.3800737,0 7.3893345,46.3799567,0 7.3893345,46.3797791,0 7.3891371,46.379708,0 7.3889874,46.3795666,0 7.3889998,46.3793528,0 7.388974,46.3792521,0 7.3888281,46.3791929,0 7.3884676,46.3791929,0 7.3881758,46.3792284,0 + + + + , Summer Walking Path + #style-Summer_Hiking + + relativeToGround + 7.3842169,46.3434602,0 7.3841439,46.3438004,0 7.3847101,46.3439064,0 7.3844032,46.3440306,0 7.3846307,46.3442059,0 7.384472,46.3446077,0 7.384091,46.3450132,0 7.3840434,46.3454953,0 7.3842868,46.3461382,0 7.3847683,46.34635,0 7.3851228,46.346803,0 7.3853715,46.3470586,0 7.3858901,46.3476723,0 7.3863028,46.3482859,0 7.387033,46.3486256,0 7.3874669,46.3491406,0 7.3872658,46.3495497,0 7.3875304,46.3498966,0 7.3881654,46.3499259,0 7.3878744,46.3501523,0 7.3882289,46.350145,0 7.3881178,46.3506308,0 7.3887263,46.3506271,0 7.3882359,46.3513098,0 7.3884405,46.3514744,0 7.3891496,46.3518433,0 7.3901285,46.3522524,0 7.3905994,46.3524715,0 7.3915043,46.3526687,0 7.3927689,46.3530376,0 7.3934092,46.3533919,0 7.3941976,46.3536694,0 7.3955522,46.3541442,0 7.3963459,46.3546299,0 7.3968221,46.3548052,0 7.3973618,46.3551668,0 7.3978287,46.3553046,0 7.3984467,46.3557607,0 7.3985926,46.3559384,0 7.398687,46.3560984,0 7.3988501,46.3563531,0 7.3991162,46.3565071,0 7.3995453,46.3570462,0 7.3996397,46.3574372,0 7.4000088,46.3576623,0 7.4003092,46.3577274,0 7.4005667,46.3579407,0 7.4003435,46.3582605,0 7.4003006,46.3586515,0 7.4005152,46.3586633,0 7.4005924,46.3588292,0 7.400807,46.3590069,0 7.4008585,46.3594452,0 7.4006525,46.3596526,0 7.4006354,46.3599665,0 7.4007384,46.3602034,0 7.4012877,46.3606773,0 7.4013735,46.3608965,0 7.4014851,46.361702,0 7.4016138,46.361939,0 7.4014851,46.3622647,0 7.400807,46.3625668,0 7.400807,46.3627327,0 7.4015881,46.3626557,0 7.4019057,46.362703,0 7.4023005,46.3630347,0 7.4025408,46.3632657,0 7.4027725,46.3633546,0 7.402867,46.3635797,0 7.4031588,46.3636152,0 7.4041544,46.3637159,0 7.4044462,46.3636803,0 7.4047638,46.3637218,0 7.4051844,46.3637218,0 7.405708,46.3635263,0 7.4062144,46.3634493,0 7.4067637,46.3632894,0 7.4070984,46.3636211,0 7.4073645,46.363787,0 7.408137,46.3639587,0 7.4091326,46.3640535,0 7.4095961,46.3640594,0 7.4099137,46.3642608,0 7.4103686,46.3645806,0 7.4104801,46.3648472,0 7.4109522,46.3652025,0 7.411141,46.365475,0 7.4114586,46.3656882,0 7.4116989,46.3658185,0 7.4121796,46.3660673,0 7.4128662,46.3660791,0 7.4131237,46.366239,0 7.4131409,46.3665055,0 7.4137589,46.3666773,0 7.413982,46.3668313,0 7.4143511,46.3669794,0 7.4148918,46.3672873,0 7.4155098,46.367542,0 7.4156128,46.3677315,0 7.4158617,46.36785,0 7.4164025,46.367927,0 7.4170204,46.3681106,0 7.4173981,46.3682231,0 7.4177672,46.3684304,0 7.4183165,46.368537,0 7.4186684,46.3686791,0 7.4189259,46.3685962,0 7.4191319,46.3687028,0 7.4194838,46.3687561,0 7.4198014,46.3686673,0 7.4200588,46.3687028,0 7.4202648,46.3689279,0 7.4202219,46.3692003,0 7.4205824,46.3693661,0 7.4211661,46.3695675,0 7.4221531,46.3697866,0 7.4224707,46.3701419,0 7.4230801,46.3700294,0 7.4233719,46.3700294,0 7.4235693,46.370444,0 7.4238783,46.370592,0 7.4241444,46.3708052,0 7.4243933,46.3709711,0 7.4246508,46.3710658,0 7.4257408,46.3708645,0 7.4260842,46.3708585,0 7.4263395,46.3709363,0 7.426376,46.3709474,0 7.4265734,46.3713382,0 7.4268652,46.3716284,0 7.4272343,46.3716521,0 7.4276377,46.3717409,0 7.4278179,46.3719482,0 7.4277664,46.3721969,0 7.4278351,46.3724338,0 7.4280926,46.3725582,0 7.4285733,46.3726648,0 7.4291397,46.3730083,0 7.4294316,46.3732984,0 7.4298865,46.3735649,0 7.4302813,46.3736597,0 7.4305216,46.3738433,0 7.4307791,46.3739735,0 7.4315087,46.3746072,0 7.431646,46.3748737,0 7.4324099,46.3751697,0 7.4329506,46.3755014,0 7.4332682,46.3756316,0 7.4339892,46.3755724,0 7.4346415,46.3757441,0 7.434899,46.3759277,0 7.4352938,46.3760165,0 7.43562,46.3761172,0 7.4360062,46.376135,0 7.4369589,46.3766798,0 7.4371821,46.3768929,0 7.4377743,46.3772186,0 7.4381777,46.37877,0 7.4383837,46.3789951,0 7.4382378,46.3794865,0 7.4385039,46.3796878,0 7.4392334,46.3799365,0 7.4395081,46.3801971,0 7.4395596,46.3809135,0 7.4407097,46.3815412,0 7.4406668,46.3818254,0 7.4408127,46.3820504,0 7.440787,46.3822991,0 7.44089,46.3825359,0 7.4416453,46.3827194,0 7.4417826,46.3829622,0 7.4422289,46.3833056,0 7.4428984,46.3833056,0 7.4436194,46.3831102,0 7.4444262,46.3831931,0 7.4447867,46.3831576,0 7.4451128,46.3830806,0 7.4454218,46.3831872,0 7.4457995,46.3831931,0 7.4468123,46.3828023,0 7.4474989,46.382151,0 7.448855,46.3817129,0 7.449207,46.3817425,0 7.4499108,46.3816004,0 7.4501425,46.3814227,0 7.4511811,46.3813695,0 7.4526402,46.381026,0 7.4528805,46.3811445,0 7.4531037,46.3812214,0 7.4537903,46.3812273,0 7.4545456,46.381026,0 7.4549834,46.3810142,0 7.4554039,46.3810912,0 7.4559189,46.3810675,0 7.4566742,46.3811563,0 7.4570347,46.3813043,0 7.4575669,46.3813635,0 7.4580389,46.381701,0 7.4583908,46.3817129,0 7.4590689,46.3818964,0 7.4594294,46.3818905,0 7.4598757,46.3819083,0 7.4603649,46.3819734,0 7.4605709,46.3820148,0 7.4609143,46.382151,0 7.4611073,46.3822106,0 + + + + , Summer Walking Path + #style-Summer_Hiking + + relativeToGround + 7.4681028,46.3828006,0 7.4685635,46.3827568,0 7.4690493,46.382662,0 7.469454,46.382552,0 7.4695566,46.3824441,0 7.4698788,46.3824318,0 7.4702351,46.3823567,0 7.4705841,46.3822218,0 7.4707965,46.3819506,0 7.4709561,46.3816876,0 7.4712107,46.3814354,0 7.4719174,46.3811665,0 7.4720289,46.3809119,0 7.4715655,46.3805211,0 7.4715578,46.3803844,0 + + + + , Summer Walking Path + #style-Summer_Hiking + + relativeToGround + 7.4773344,46.3802503,0 7.4784834,46.3804797,0 7.479522,46.3806514,0 7.481436,46.3807817,0 7.4856331,46.3808231,0 7.4888174,46.3808527,0 7.4920618,46.3819599,0 7.4971688,46.3817823,0 7.5060608,46.3832329,0 7.5186865,46.3873596,0 7.5244114,46.3897988,0 7.5249779,46.3906927,0 + + + + , Summer Walking Path + #style-Summer_Hiking + + relativeToGround + 7.5249779,46.3906927,0 7.5245058,46.3908348,0 7.5242569,46.3912137,0 7.5239479,46.3913499,0 7.5235617,46.3916636,0 7.5234329,46.3920425,0 7.5237677,46.3923503,0 7.5237248,46.3924806,0 7.5233729,46.3925398,0 7.5233128,46.3926522,0 7.5233214,46.3927825,0 7.522815,46.3936231,0 7.5228407,46.3938717,0 7.5227377,46.3940375,0 7.5228922,46.3945347,0 7.5232012,46.3946354,0 7.5235617,46.3946354,0 7.5238535,46.3947893,0 7.5238535,46.3952806,0 7.5239479,46.3954404,0 7.5242054,46.3954937,0 7.5242827,46.3960205,0 7.5242655,46.3965414,0 7.5241797,46.3968078,0 7.5242741,46.3970446,0 7.5246861,46.3970209,0 7.5250294,46.3969144,0 7.5254586,46.3969025,0 7.5259478,46.3968611,0 7.5260508,46.3976069,0 7.5264628,46.3978259,0 7.5265314,46.3979798,0 7.5264284,46.3982048,0 7.5266087,46.3985836,0 7.5269091,46.3987138,0 7.5269863,46.3989092,0 7.5269606,46.3991459,0 7.5271923,46.3992761,0 7.527158,46.3995366,0 7.5278961,46.3999036,0 7.5280936,46.4003061,0 7.5284329,46.4005085,0 + + + + , Summer Walking Path + #style-Summer_Hiking + + relativeToGround + 7.5284329,46.4005085,0 7.5284283,46.4009631,0 7.5287888,46.4013656,0 7.529072,46.401555,0 7.5293038,46.401774,0 7.5294411,46.4019811,0 7.5297501,46.4022001,0 7.5299475,46.4027328,0 7.5313036,46.4036384,0 7.5324194,46.4058933,0 7.5325138,46.4064674,0 7.5330717,46.4068048,0 7.5332262,46.4073492,0 7.5332691,46.4084382,0 7.5336468,46.4092075,0 7.533561,46.4094147,0 + + + + , Summer Walking Path + #style-Summer_Hiking + + relativeToGround + 7.533561,46.4094147,0 7.5338185,46.4089767,0 7.5343077,46.408521,0 7.5394146,46.405408,0 7.5409853,46.4053429,0 7.5429079,46.4057513,0 7.5435517,46.4062484,0 7.5440838,46.4066509,0 7.5445301,46.4068166,0 7.5453541,46.4068225,0 7.5462296,46.4065858,0 7.5478604,46.4051417,0 7.5478432,46.4048043,0 7.548032,46.4044966,0 7.5486243,46.404177,0 7.5488045,46.4039166,0 7.5510447,46.4031175,0 7.5512764,46.402863,0 7.5519116,46.4027447,0 + + + + , Summer Walking Path + #style-Summer_Hiking + + relativeToGround + 7.5519116,46.4027447,0 7.5535424,46.4026973,0 7.5542977,46.4025789,0 7.5558941,46.4026204,0 7.5565464,46.4025197,0 7.5572932,46.4021232,0 7.5587351,46.401774,0 7.5594904,46.4015076,0 7.5599539,46.4011288,0 7.560941,46.4004718,0 7.5616619,46.399945,0 7.5617821,46.3993827,0 7.5619967,46.3991992,0 7.5620653,46.3988618,0 + + + + , Summer Walking Path + #style-Summer_Hiking + + relativeToGround + 7.5620653,46.3988618,0 7.5626404,46.3984415,0 7.5632241,46.3979147,0 7.563576,46.3978911,0 7.5648291,46.3976128,0 7.5652325,46.3976661,0 7.5661595,46.3980686,0 7.5670607,46.3982225,0 7.5689404,46.3990808,0 7.5700218,46.3994182,0 7.5704167,46.3994774,0 7.5709231,46.3998325,0 7.5716698,46.4000397,0 7.5719616,46.4003001,0 7.5723822,46.4003238,0 7.5727598,46.4002528,0 7.5731547,46.4002824,0 7.5734637,46.4000693,0 7.5739014,46.4000279,0 7.5741675,46.4001048,0 7.574279,46.4002114,0 7.5746567,46.4000811,0 + + + + Lämmernweg nord + Lämmernweg nord, Summer Walking Path + #style-Summer_Hiking + + relativeToGround + 7.5746567,46.4000811,0 7.5745487,46.4005859,0 7.5747632,46.4010476,0 7.574892,46.4016217,0 7.575304,46.4014797,0 7.5758619,46.4012488,0 7.5763339,46.4004024,0 7.5762395,46.4000887,0 7.5764198,46.4000828,0 7.5762653,46.3998105,0 7.5760335,46.3995738,0 7.5760335,46.3991476,0 7.576703,46.3991535,0 7.5767803,46.3989819,0 7.577218,46.3991239,0 7.5771751,46.3988398,0 7.5767202,46.3983899,0 7.5771236,46.3984255,0 7.5772008,46.3983544,0 7.576909,46.3981887,0 7.5773607,46.3980323,0 7.5788917,46.397502,0 7.578866,46.3977743,0 7.5787458,46.3982064,0 7.5789775,46.3984136,0 7.5797243,46.3986326,0 7.5805225,46.39868,0 7.5812263,46.3988812,0 7.5831575,46.3990825,0 7.5835695,46.3991949,0 7.5845737,46.3996507,0 7.5849428,46.3997099,0 7.5857152,46.3996389,0 7.5857839,46.3994317,0 7.5853118,46.39897,0 7.5853204,46.3988635,0 7.5856723,46.3986445,0 7.5858268,46.3984669,0 7.5856122,46.3981946,0 7.5855693,46.3979282,0 7.5863418,46.3973777,0 7.5863075,46.3968687,0 7.5869941,46.396993,0 7.5880039,46.3968541,0 7.5881256,46.3965134,0 7.587925,46.3962126,0 7.5885906,46.3960459,0 7.5897493,46.3961228,0 7.5905303,46.3962767,0 7.5912256,46.3965431,0 7.5920152,46.3967325,0 7.5922813,46.396845,0 7.5926933,46.3969515,0 7.5933113,46.3969456,0 7.5947618,46.3974014,0 7.594985,46.3973718,0 7.595354,46.3974014,0 7.5972509,46.397875,0 7.597577,46.3980052,0 7.5983066,46.3981117,0 7.5987186,46.3980821,0 7.5994739,46.3979282,0 7.5999116,46.3979342,0 7.6005983,46.3979993,0 7.6023149,46.3979697,0 7.6037569,46.3976855,0 7.6041946,46.3976915,0 7.6045207,46.3978217,0 7.6046409,46.3979697,0 7.605422,46.3979697,0 7.6055936,46.3981768,0 7.6057052,46.3984195,0 7.6060056,46.3986267,0 7.6068811,46.3998224,0 7.6069841,46.4001006,0 7.6073961,46.4005563,0 7.6074905,46.4008108,0 7.6073875,46.4010831,0 7.6077308,46.4019354,0 7.6086578,46.40248,0 7.6087779,46.4026694,0 7.6097478,46.4032139,0 7.6101427,46.4035453,0 7.6102628,46.4037821,0 7.6120396,46.4045298,0 + + + + , Summer Walking Path + #style-Summer_Hiking + + relativeToGround + 7.6223005,46.4319807,0 7.6218319,46.4319245,0 7.6216002,46.4320073,0 7.6212483,46.4319067,0 7.6209393,46.4319067,0 7.6207762,46.4316878,0 7.6202698,46.4313152,0 7.6197205,46.430623,0 7.6196261,46.4300788,0 7.6191626,46.4296173,0 7.6190338,46.4291086,0 7.6188193,46.4290435,0 7.6188107,46.4287595,0 7.6186304,46.4285288,0 7.6188193,46.428097,0 7.6185618,46.4276,0 7.6169911,46.4264404,0 7.6170512,46.4261683,0 7.6174202,46.4257778,0 7.6176691,46.4257009,0 7.617446,46.4256003,0 7.6173258,46.4253223,0 7.6176262,46.4246182,0 7.6176262,46.4243342,0 7.6162014,46.4234113,0 7.6136437,46.4206423,0 7.6134892,46.4203819,0 7.6120301,46.4194826,0 7.6116696,46.4191039,0 7.6108971,46.4190388,0 7.6101933,46.418879,0 7.6100216,46.4187252,0 7.607687,46.4193583,0 7.6072665,46.4193997,0 7.6064167,46.4196778,0 7.6054211,46.4197784,0 7.6040049,46.4202695,0 7.6035757,46.4206245,0 7.6026831,46.4207547,0 7.6014643,46.4205239,0 7.6012669,46.420589,0 7.6007875,46.420399,0 7.6007789,46.4207135,0 7.6009446,46.420851,0 7.6012669,46.4208434,0 7.6013207,46.4211927,0 7.6010655,46.421439,0 7.6011759,46.4216698,0 7.6009562,46.4215633,0 7.6010091,46.4218257,0 7.6006785,46.4218724,0 7.6008396,46.4220273,0 7.6003657,46.4220445,0 7.6001339,46.4223759,0 7.5995094,46.4226935,0 7.5992772,46.4224137,0 7.5988342,46.4231467,0 7.5985281,46.4229856,0 7.5984798,46.4231628,0 7.5983912,46.423195,0 7.5983769,46.4233697,0 7.5971899,46.4232574,0 7.5961118,46.4229597,0 + + + + , Summer Walking Path + #style-Summer_Hiking + + relativeToGround + 7.5723588,46.4404035,0 7.572171,46.4403665,0 7.5717311,46.4401927,0 7.5716185,46.4400929,0 7.5714683,46.440019,0 7.5712591,46.4400116,0 7.5709855,46.4400375,0 7.5707798,46.4401998,0 + + + + , Summer Walking Path + #style-Summer_Hiking + + relativeToGround + 7.5603342,46.4434764,0 7.5606322,46.4434199,0 7.5607824,46.4433164,0 7.5610291,46.4433016,0 7.5612115,46.443309,0 7.5614261,46.4431907,0 7.5616943,46.4431759,0 7.5619779,46.4431581,0 7.5621449,46.443102,0 7.5622951,46.443028,0 7.5623917,46.4429171,0 7.5624561,46.4428062,0 7.562617,46.4427323,0 7.5628316,46.4427175,0 7.5631105,46.4426658,0 7.5633684,46.442614,0 7.5636792,46.4424809,0 7.5637328,46.4423479,0 7.5637757,46.4422074,0 7.563883,46.4421335,0 7.5640586,46.4420609,0 7.5642263,46.4419265,0 7.5643336,46.4417934,0 7.564516,46.4415864,0 7.5645482,46.4413572,0 7.5644447,46.4411958,0 7.5644624,46.4410245,0 7.5645027,46.440655,0 7.5644731,46.4404256,0 7.5644087,46.4401964,0 7.5644194,46.4401003,0 7.5645375,46.4399377,0 7.5645911,46.4398046,0 7.5645482,46.4396345,0 7.5644636,46.439478,0 7.5644553,46.4393461,0 7.5644516,46.4392871,0 7.5645298,46.4391761,0 7.5645267,46.4390209,0 7.5644927,46.4389173,0 7.5643867,46.438837,0 7.5642585,46.4387399,0 7.5641727,46.4385773,0 7.5640654,46.4384812,0 7.5640869,46.4383481,0 7.5640869,46.4381928,0 7.5640654,46.4380523,0 7.5638186,46.4379192,0 7.5635397,46.4377714,0 7.5633895,46.437727,0 7.5631964,46.4377344,0 7.5629818,46.437764,0 7.5627028,46.4377418,0 7.5625097,46.4377048,0 7.5622308,46.43769,0 7.5617587,46.4376679,0 7.5615015,46.4377341,0 7.5611472,46.437727,0 7.5608253,46.4376457,0 7.56039,46.4375687,0 7.5600421,46.4374534,0 7.5597417,46.4372982,0 7.5593769,46.4371133,0 7.5590597,46.4370482,0 7.5587593,46.4370482,0 7.5585293,46.4370246,0 7.5583577,46.4370616,0 7.558186,46.4371651,0 7.5580517,46.4372548,0 7.5579285,46.4372908,0 7.5577354,46.4372982,0 7.5575368,46.4372948,0 7.5573921,46.4372612,0 7.5573062,46.4371799,0 7.5571113,46.4371429,0 7.5569842,46.437187,0 7.5568771,46.4372242,0 7.5567376,46.4371799,0 7.5566089,46.4370985,0 7.5563643,46.4370678,0 7.5562333,46.4370172,0 7.5560724,46.4368398,0 7.5557827,46.436581,0 7.5555361,46.4364881,0 7.5553107,46.4364848,0 7.5551605,46.4366179,0 7.5549827,46.4367111,0 7.5553321,46.4370542,0 7.5555682,46.4373647,0 7.5557613,46.437483,0 7.5558256,46.4377566,0 7.5558839,46.4380538,0 7.5557827,46.4382076,0 7.5556969,46.438385,0 7.5556647,46.4385181,0 7.5556325,46.4386586,0 7.5555096,46.4386959,0 7.555418,46.4387917,0 7.5554659,46.4389223,0 7.5553965,46.4390283,0 7.5552034,46.43908,0 7.5550514,46.4391953,0 7.5549995,46.4393684,0 7.5550639,46.4395902,0 7.5551497,46.4397972,0 7.5553947,46.4399761,0 7.5555789,46.4400781,0 7.5556218,46.4403,0 7.5557981,46.4405675,0 7.5560402,46.4406696,0 7.556169,46.4407879,0 7.556253,46.4409697,0 7.5562763,46.4412685,0 7.5565981,46.4416233,0 7.5568881,46.4420225,0 7.5571238,46.442237,0 7.5574242,46.4423848,0 7.5576174,46.4424736,0 7.5577465,46.4425962,0 7.5578623,46.4428613,0 + + + + , Summer Walking Path + #style-Summer_Hiking + + relativeToGround + 7.5578623,46.4428613,0 7.5574675,46.4428376,0 7.5562401,46.4421989,0 7.5553904,46.4415956,0 7.5545922,46.4411993,0 7.5531674,46.4401583,0 7.5520945,46.4397857,0 7.5515452,46.4394486,0 7.5512276,46.4389458,0 7.5500603,46.4382479,0 7.5478888,46.4365917,0 7.5459061,46.435521,0 7.5430308,46.4344326,0 7.5427647,46.434196,0 7.5416146,46.4337878,0 7.5403786,46.4336045,0 7.5392456,46.4328177,0 7.5388594,46.4323326,0 7.5385161,46.4322143,0 7.538353,46.4320369,0 7.5376578,46.4320132,0 7.5371514,46.4324391,0 7.5367651,46.4324864,0 7.5366364,46.4326994,0 7.5354691,46.4325811,0 7.5352631,46.4330603,0 7.5350056,46.4329065,0 7.5343533,46.4329656,0 7.5341473,46.4326994,0 7.5336151,46.4325042,0 7.5332289,46.4325752,0 7.5329113,46.4324805,0 7.5324993,46.4327408,0 7.5314608,46.4328532,0 7.5309286,46.4325988,0 7.5305853,46.4326048,0 7.5302935,46.4323208,0 7.5299759,46.4321848,0 7.5298472,46.4319836,0 7.5296326,46.4310016,0 7.529727,46.4307473,0 7.5300188,46.4304278,0 7.5297613,46.4302385,0 7.5296583,46.4300374,0 + + + + , Summer Walking Path + #style-Summer_Hiking + + relativeToGround + 7.5099774,46.4268191,0 7.5097027,46.4267599,0 + + + + , Summer Walking Path + #style-Summer_Hiking + + relativeToGround + 7.510046,46.4269729,0 7.5099774,46.4268191,0 + + + + , Summer Walking Path + #style-Summer_Hiking + + relativeToGround + 7.5097027,46.4267599,0 7.5091706,46.4267008,0 7.5088101,46.4268782,0 7.5086899,46.4270261,0 7.5082865,46.4270261,0 7.507514,46.4268901,0 7.507205,46.4267422,0 7.5070591,46.4265351,0 7.5070935,46.4263635,0 7.5055828,46.4258015,0 7.5046387,46.4252572,0 7.504201,46.4251566,0 7.5038748,46.4249614,0 7.5029049,46.4247543,0 7.50245,46.4245827,0 7.5018921,46.424636,0 7.5014286,46.4245354,0 + + + + Krummenbach + Krummenbach, Summer Walking Path + #style-Summer_Hiking + + relativeToGround + 7.4421122,46.4525537,0 7.4426894,46.4528647,0 7.4433701,46.4534102,0 7.4441109,46.4543138,0 + + + + Krummenbach + Krummenbach, Summer Walking Path + #style-Summer_Hiking + + relativeToGround + 7.4419716,46.4526353,0 7.4421122,46.4525537,0 + + + + Krummenbach + Krummenbach, Summer Walking Path + #style-Summer_Hiking + + relativeToGround + 7.4408543,46.4522683,0 7.4415573,46.4524314,0 7.4419716,46.4526353,0 + + + + Krummenbach + Krummenbach, Summer Walking Path + #style-Summer_Hiking + + relativeToGround + 7.4409061,46.4521561,0 7.4408543,46.4522683,0 + + + + Chäligang - Klettersteig + Chäligang - Klettersteig, Summer Walking Path + #style-Summer_Hiking + + relativeToGround + 7.560727,46.450533,0 7.5606144,46.4505986,0 7.5603311,46.4507338,0 7.5603426,46.4509315,0 7.5605864,46.4511387,0 7.5605865,46.4512611,0 7.560682,46.4513342,0 7.5607896,46.4513261,0 7.5611184,46.4513877,0 7.561297,46.4513409,0 7.5614312,46.4513311,0 7.5614866,46.4514444,0 7.5615925,46.4516057,0 7.5617415,46.4517005,0 7.5619471,46.4517731,0 7.561897,46.4519024,0 7.561663,46.4519071,0 7.5615552,46.4517685,0 7.561466,46.4516993,0 7.5612982,46.4516854,0 7.5611181,46.4516115,0 7.5608041,46.4515715,0 7.5606409,46.451533,0 7.5604993,46.4515084,0 7.5601961,46.451513,0 7.5603839,46.4516038,0 7.560233,46.4517454,0 7.5600529,46.4516916,0 7.5598755,46.4516727,0 + + + + Lischmattenstrasse + Lischmattenstrasse, Summer Walking Path + #style-Summer_Hiking + + relativeToGround + 7.4394643,46.4538143,0 7.4390415,46.45383,0 7.4382168,46.4536333,0 7.437853,46.4534971,0 7.4376096,46.4533399,0 7.4375083,46.4531784,0 + + + + Kronenplatz + Kronenplatz, Summer Walking Path + #style-Summer_Hiking + + relativeToGround + 7.4433518,46.4557718,0 7.442802,46.4557537,0 7.4423281,46.4556781,0 7.4422089,46.4564137,0 7.4423398,46.456437,0 7.4423078,46.4566492,0 7.4425442,46.4567004,0 + + + + Kronenplatz + Kronenplatz, Summer Walking Path + #style-Summer_Hiking + + relativeToGround + 7.4427674,46.4559269,0 7.442802,46.4557537,0 + + + + , Summer Walking Path + #style-Summer_Hiking + + relativeToGround + 7.4382168,46.4536333,0 7.4375687,46.4542067,0 7.437657,46.4544786,0 7.4381129,46.4544954,0 + + + + , Summer Walking Path + #style-Summer_Hiking + + relativeToGround + 7.60993,46.555202,0 7.6100086,46.5551481,0 + + + + , Summer Walking Path + #style-Summer_Hiking + + relativeToGround + 7.6100086,46.5551481,0 7.610275,46.555066,0 + + + + , Summer Walking Path + #style-Summer_Hiking + + relativeToGround + 7.6095758,46.5550283,0 7.609867,46.5551309,0 7.60993,46.555202,0 7.6099053,46.5554036,0 7.6099572,46.5557181,0 7.6101794,46.5559656,0 7.6108008,46.5563903,0 7.611201,46.5569152,0 7.6114692,46.5571666,0 7.6117685,46.5573938,0 7.612146,46.5574221,0 7.612332,46.5574959,0 7.6126626,46.5575627,0 7.6128563,46.5576717,0 7.613043,46.557777,0 7.613162,46.557793,0 7.613359,46.557997,0 + + + + , Summer Walking Path + #style-Summer_Hiking + + relativeToGround + 7.6093995,46.5548684,0 7.6095758,46.5550283,0 + + + + , Summer Walking Path + #style-Summer_Hiking + + relativeToGround + 7.5655203,46.4480124,0 7.5666754,46.448165,0 7.5673192,46.4478693,0 7.5689671,46.4480468,0 7.5695336,46.4481946,0 7.5695508,46.4500988,0 7.5691388,46.4506665,0 7.5698941,46.4505482,0 7.571027,46.4506665,0 7.5716794,46.4504891,0 7.571954,46.4505305,0 7.5729153,46.4498386,0 7.5735419,46.4491881,0 7.5738251,46.4491408,0 7.5767777,46.4471419,0 7.5782368,46.4464796,0 7.5799277,46.4461365,0 7.5812409,46.4461957,0 7.5844767,46.445971,0 7.5848286,46.4460833,0 7.5858243,46.4459355,0 7.5871375,46.4459355,0 7.5876954,46.4458113,0 7.5882103,46.4458349,0 7.5883391,46.4457344,0 7.5885708,46.4457699,0 7.5887854,46.4456575,0 7.5897639,46.4458704,0 7.5897553,46.4456989,0 7.5898583,46.4457521,0 7.5901244,46.4456871,0 7.5909655,46.4452672,0 7.5923474,46.4448946,0 7.592356,46.4448,0 7.592768,46.4446048,0 7.5932658,46.4445811,0 7.5939181,46.4442322,0 + + + + , Summer Walking Path + #style-Summer_Hiking + + relativeToGround + 7.5939181,46.4442322,0 7.5959351,46.4431026,0 + + + + , Summer Walking Path + #style-Summer_Hiking + + relativeToGround + 7.5959351,46.4431026,0 7.5961202,46.4418992,0 7.5961202,46.4410298,0 7.595837,46.440184,0 7.5952104,46.4388413,0 7.5955194,46.4386284,0 7.5955366,46.4382735,0 7.5956911,46.4379541,0 7.5960086,46.4378476,0 7.5962232,46.4374336,0 7.5963949,46.4374336,0 7.5964635,46.437197,0 7.596867,46.4373153,0 7.598163,46.4381493,0 7.5981802,46.4380251,0 7.5983862,46.4380251,0 7.5989269,46.4382794,0 7.5993475,46.4388118,0 7.5999225,46.4390306,0 7.6001886,46.4393323,0 7.6002916,46.4396103,0 7.6005491,46.4395748,0 7.6009868,46.439764,0 7.6019567,46.439486,0 7.6027034,46.4389951,0 7.6029008,46.4388768,0 7.60333,46.4383681,0 7.6034845,46.438309,0 7.6036864,46.4378485,0 + + + + , Summer Walking Path + #style-Summer_Hiking + + relativeToGround + 7.5612557,46.4542097,0 7.56213,46.454218,0 7.562429,46.454144,0 7.563113,46.454125,0 7.563817,46.454263,0 7.563935,46.454456,0 7.564016,46.454315,0 7.564211,46.454463,0 7.564278,46.454308,0 7.564431,46.454381,0 7.564714,46.454334,0 7.564919,46.454464,0 7.564952,46.454256,0 7.565156,46.454369,0 7.565617,46.454428,0 7.5655305,46.4542175,0 7.566296,46.4542338,0 7.5666072,46.454436,0 7.566648,46.454824,0 7.56674,46.454724,0 7.5668857,46.4548685,0 7.56691,46.454801,0 7.567052,46.45484,0 7.567039,46.4546492,0 7.566979,46.454446,0 7.566903,46.454271,0 7.56665,46.454115,0 7.566702,46.453914,0 7.566393,46.453903,0 7.566252,46.453641,0 7.5659897,46.4535926,0 7.5657596,46.4534666,0 7.565605,46.453159,0 7.5654002,46.4529654,0 7.5652784,46.453026,0 7.5651459,46.4530153,0 7.5649962,46.453114,0 7.5648026,46.4530815,0 7.5646282,46.4530737,0 7.5646996,46.4529048,0 7.5645424,46.4527662,0 7.5645097,46.4524439,0 7.5645156,46.4522983,0 7.5643691,46.4522325,0 7.5643648,46.4520902,0 7.5642225,46.4520855,0 7.564087,46.452081,0 7.563577,46.451855,0 7.563358,46.451667,0 7.562807,46.451031,0 7.562811,46.450662,0 7.562459,46.450526,0 7.562297,46.450575,0 7.562138,46.450756,0 7.56196,46.450604,0 7.561888,46.450871,0 7.561585,46.450997,0 7.561227,46.450721,0 7.561186,46.450498,0 7.560727,46.450533,0 7.56057,46.450445,0 7.56074,46.450354,0 7.560304,46.450156,0 7.560038,46.450138,0 7.560136,46.449986,0 7.5603797,46.4499063,0 7.5604193,46.4498809,0 + + + + , Summer Walking Path + #style-Summer_Hiking + + relativeToGround + 7.5603797,46.4499063,0 7.560335,46.449238,0 7.560977,46.449165,0 7.561242,46.449273,0 7.560913,46.448711,0 7.560942,46.448252,0 7.560985,46.448126,0 7.561464,46.447771,0 7.5615495,46.4474679,0 + + + + , Summer Walking Path + #style-Summer_Hiking + + relativeToGround + 7.610275,46.555066,0 7.6105103,46.555047,0 7.6107934,46.5551847,0 7.6109108,46.5551734,0 7.6110474,46.5552324,0 7.6114422,46.5551757,0 7.6119279,46.5551549,0 7.6122496,46.5548187,0 7.6123306,46.5545839,0 7.612552,46.554217,0 7.612904,46.554303,0 7.61296,46.554373,0 7.6130079,46.5544692,0 7.6130907,46.5545095,0 7.6132761,46.5545054,0 7.6134222,46.5545429,0 7.6135505,46.5546015,0 7.613591,46.554708,0 7.6135566,46.5548319,0 7.6135434,46.5549507,0 7.613595,46.5551225,0 7.6136905,46.555167,0 7.613754,46.55517,0 7.6138063,46.5551517,0 7.613901,46.555171,0 7.6139027,46.555118,0 + + + + , Summer Walking Path + #style-Summer_Hiking + + relativeToGround + 7.617521,46.559201,0 7.6174601,46.5593795,0 + + + + , Summer Walking Path + #style-Summer_Hiking + + relativeToGround + 7.4246182,46.4549791,0 7.411038,46.4488524,0 7.4096398,46.4473342,0 7.4094562,46.4479668,0 7.4081709,46.4475873,0 7.4071281,46.4487423,0 + + + + , Summer Walking Path + #style-Summer_Hiking + + relativeToGround + 7.5359591,46.4821973,0 7.5356587,46.4821315,0 7.5352401,46.4817035,0 7.5341426,46.4802405,0 7.5343946,46.47985,0 7.5341784,46.4798098,0 7.5334093,46.4782263,0 7.5320814,46.4778883,0 7.5322482,46.4776474,0 7.5324047,46.4775918,0 7.5324047,46.4774868,0 7.5322359,46.477493,0 7.5319641,46.4772829,0 7.5311872,46.4771753,0 7.5311809,46.4769707,0 7.5303944,46.4766186,0 7.5299839,46.4762294,0 7.5298295,46.47583,0 7.5293827,46.4753729,0 7.5295227,46.4751876,0 7.5292591,46.475342,0 7.5294671,46.4757332,0 7.5293889,46.4760874,0 7.5295206,46.4765218,0 7.5292797,46.4765918,0 7.527116,46.4756238,0 7.5268425,46.4756158,0 7.5267259,46.4754911,0 7.5259256,46.4754067,0 7.5254631,46.4754831,0 7.5253666,46.4753584,0 7.525447,46.4752619,0 7.5251052,46.4753504,0 7.5249725,46.4752498,0 7.5247593,46.47529,0 7.5245301,46.4750689,0 7.5222742,46.4741891,0 7.5200561,46.4732089,0 7.5179775,46.47215,0 7.517934,46.471763,0 + + + + , Summer Walking Path + #style-Summer_Hiking + + relativeToGround + 7.469009,46.453963,0 7.468853,46.454502,0 7.468722,46.454633,0 7.468855,46.454838,0 7.468892,46.455254,0 7.468526,46.45547,0 7.468214,46.455827,0 7.467811,46.456011,0 7.467729,46.456012,0 7.467757,46.45589,0 7.4676573,46.4558604,0 + + + + , Summer Walking Path + #style-Summer_Hiking + + relativeToGround + 7.4563512,46.4596817,0 7.455519,46.460138,0 7.454885,46.460326,0 7.454269,46.460142,0 7.453772,46.460157,0 7.453588,46.460227,0 7.453646,46.46034,0 7.453343,46.460297,0 7.45308,46.460158,0 7.452336,46.460143,0 7.452167,46.460202,0 7.4516199,46.4601237,0 7.451444,46.460176,0 7.451314,46.459955,0 7.451083,46.460086,0 7.450785,46.459827,0 7.450364,46.460159,0 7.450148,46.460235,0 7.449941,46.460206,0 7.449216,46.460572,0 7.449004,46.460411,0 7.44851,46.460273,0 7.448482,46.460149,0 + + + + , Summer Walking Path + #style-Summer_Hiking + + relativeToGround + 7.462649,46.457567,0 7.462344,46.457799,0 7.461469,46.458186,0 7.460724,46.458266,0 7.459338,46.45872,0 7.458959,46.458929,0 7.4592,46.459053,0 7.458746,46.459142,0 7.458955,46.45922,0 7.458388,46.459277,0 7.458083,46.459431,0 7.457836,46.45934,0 7.457735,46.459414,0 7.457338,46.459278,0 7.45734,46.459367,0 7.457047,46.459355,0 7.4569312,46.4594356,0 7.4568436,46.4593926,0 + + + + , Summer Walking Path + #style-Summer_Hiking + + relativeToGround + 7.5805282,46.4980101,0 7.580457,46.497915,0 7.580459,46.4978244,0 7.580511,46.497795,0 7.580503,46.497773,0 7.580458,46.497732,0 7.5804891,46.4976849,0 + + + + , Summer Walking Path + #style-Summer_Hiking + + relativeToGround + 7.5919258,46.5139835,0 7.59165,46.514158,0 7.591592,46.514182,0 7.591323,46.514218,0 7.5911034,46.5143796,0 7.590773,46.514376,0 7.590312,46.514486,0 7.590308,46.514779,0 7.59027,46.515012,0 7.590204,46.515141,0 7.590222,46.51527,0 7.590202,46.515354,0 7.5903489,46.5153277,0 + + + + , Summer Walking Path + #style-Summer_Hiking + + relativeToGround + 7.5892426,46.5172029,0 7.589245,46.51707,0 7.5896037,46.5169541,0 7.590129,46.516719,0 7.590166,46.516508,0 7.590272,46.516442,0 7.590262,46.516414,0 7.590288,46.516298,0 7.590159,46.516075,0 + + + + , Summer Walking Path + #style-Summer_Hiking + + relativeToGround + 7.6058722,46.5395795,0 7.605907,46.539608,0 7.606061,46.539669,0 7.606172,46.539786,0 7.606187,46.539933,0 7.606162,46.540082,0 7.606252,46.540169,0 7.606368,46.540183,0 7.606546,46.540228,0 7.606795,46.540172,0 7.6069728,46.5401954,0 7.6069839,46.540212,0 7.606977,46.54025,0 7.606945,46.540322,0 7.606899,46.540361,0 7.606783,46.540417,0 7.606721,46.540496,0 7.606687,46.54052,0 7.606704,46.540646,0 7.606769,46.540707,0 7.606912,46.540757,0 7.60689,46.540889,0 7.606769,46.541122,0 7.606776,46.541186,0 7.606741,46.541226,0 7.606698,46.541421,0 7.606723,46.541467,0 7.606758,46.541487,0 7.606836,46.541643,0 7.606804,46.541701,0 7.606704,46.541808,0 7.606563,46.541924,0 7.606524,46.54199,0 7.606496,46.54206,0 7.606482,46.542063,0 7.606335,46.542319,0 7.606275,46.542406,0 7.606165,46.542443,0 7.606051,46.542553,0 7.605977,46.542663,0 7.605846,46.542743,0 7.60584,46.542865,0 7.605849,46.542887,0 7.605854,46.543004,0 7.605862,46.543182,0 7.605813,46.543282,0 7.605779,46.543294,0 7.605665,46.543297,0 7.605658,46.543321,0 7.605681,46.54336,0 7.605737,46.543391,0 7.605848,46.543431,0 7.605892,46.543428,0 7.605933,46.54344,0 7.605991,46.543483,0 7.60606,46.543547,0 7.606112,46.543597,0 7.606128,46.54365,0 7.606131,46.543807,0 7.606054,46.543956,0 7.6060019,46.5440194,0 7.605943,46.544046,0 7.605853,46.544099,0 7.605849,46.544168,0 7.605627,46.544263,0 7.605574,46.544402,0 7.605544,46.544518,0 7.605557,46.544576,0 7.605547,46.544633,0 7.605483,46.544684,0 7.605391,46.54472,0 7.605297,46.544742,0 7.605232,46.544778,0 7.605228,46.5448,0 7.605172,46.544869,0 7.6050221,46.5448767,0 7.604923,46.544864,0 7.60484,46.544879,0 7.604813,46.544902,0 7.604666,46.544998,0 7.604385,46.545125,0 7.6043368,46.5451739,0 7.604278,46.545281,0 7.60427,46.54534,0 7.604196,46.545481,0 7.604145,46.545502,0 7.604087,46.545512,0 7.603974,46.54558,0 7.603963,46.545603,0 7.603971,46.545623,0 7.603991,46.545636,0 7.604007,46.545671,0 7.604075,46.545699,0 7.604147,46.545758,0 7.604227,46.545806,0 7.604331,46.545844,0 7.604501,46.545838,0 7.60457,46.545911,0 7.604731,46.545867,0 7.604802,46.545883,0 7.604924,46.545865,0 7.604943,46.545883,0 7.605024,46.545883,0 7.605061,46.545915,0 7.605529,46.545902,0 7.605706,46.545864,0 7.605893,46.545934,0 7.606173,46.545897,0 7.6063485,46.5458893,0 7.6064439,46.5457843,0 7.606512,46.545831,0 7.606506,46.545981,0 7.606369,46.546097,0 7.606301,46.546263,0 7.606217,46.546344,0 7.606064,46.546443,0 7.606008,46.546533,0 7.606166,46.546699,0 7.606052,46.546836,0 7.6061285,46.5469487,0 7.606261,46.546939,0 7.606655,46.546994,0 7.607231,46.547225,0 7.607152,46.547353,0 7.607194,46.54744,0 7.60725,46.547455,0 7.607299,46.547533,0 7.607272,46.54762,0 7.607157,46.547774,0 7.607063,46.547823,0 7.607008,46.54784,0 7.606921,46.547907,0 7.606908,46.547935,0 7.607034,46.547886,0 7.607103,46.547916,0 7.6077006,46.5479132,0 + + + + , Summer Walking Path + #style-Summer_Hiking + + relativeToGround + 7.5816826,46.510603,0 7.5816199,46.5104057,0 7.5815976,46.510255,0 7.5814942,46.5099865,0 7.5814306,46.5099385,0 7.5813666,46.5097595,0 7.5812168,46.5096608,0 7.581074,46.509605,0 7.580956,46.509462,0 7.58117,46.509261,0 + + + + , Summer Walking Path + #style-Summer_Hiking + + relativeToGround + 7.5817563,46.5106037,0 7.5816826,46.510603,0 7.581587,46.510645,0 7.5815173,46.5107508,0 7.581501,46.510818,0 7.581546,46.5109334,0 7.5817095,46.5110604,0 + + + + , Summer Walking Path + #style-Summer_Hiking + + relativeToGround + 7.5820585,46.510608,0 7.5817563,46.5106037,0 + + + + , Summer Walking Path + #style-Summer_Hiking + + relativeToGround + 7.5751846,46.4916084,0 7.575377,46.491636,0 7.575561,46.491752,0 7.5756106,46.4917412,0 7.575728,46.491716,0 7.575891,46.491602,0 7.576027,46.491461,0 7.576068,46.491431,0 7.5763871,46.4912304,0 + + + + , Summer Walking Path + #style-Summer_Hiking + + relativeToGround + 7.5785473,46.524736,0 7.5785046,46.5247628,0 7.5783963,46.5246919,0 7.578219,46.52477,0 7.578012,46.524791,0 7.577872,46.524792,0 7.577779,46.524725,0 7.5777363,46.5246185,0 7.577476,46.524428,0 7.577197,46.524302,0 7.577086,46.524206,0 7.5770596,46.5241235,0 7.5771338,46.5239975,0 7.5771004,46.523902,0 7.5770609,46.5237564,0 7.576847,46.5235427,0 7.576721,46.523295,0 7.576719,46.523211,0 7.5764009,46.5230245,0 7.5762273,46.5227649,0 7.576096,46.522687,0 7.5759724,46.5226336,0 7.5757443,46.5226509,0 7.5756484,46.522612,0 7.5758244,46.5224861,0 7.575548,46.522413,0 7.5752814,46.5223836,0 7.5750582,46.522382,0 7.5749471,46.5223416,0 + + + + , Summer Walking Path + #style-Summer_Hiking + + relativeToGround + 7.6212158,46.4102508,0 7.6212492,46.4100544,0 7.6211982,46.4097513,0 7.6210007,46.4091406,0 7.6207267,46.4087452,0 7.6204904,46.4083771,0 7.620217,46.4075677,0 7.620217,46.4073832,0 7.6198856,46.4070185,0 7.6198283,46.4067857,0 7.619621,46.4066037,0 7.619344,46.4063771,0 7.6189554,46.4061266,0 7.618675,46.4058191,0 7.6178658,46.4053226,0 7.6174956,46.405028,0 7.6149472,46.4029894,0 + + + + , Summer Walking Path + #style-Summer_Hiking + + relativeToGround + 7.605321,46.550618,0 7.6061811,46.5507498,0 + + + + , Summer Walking Path + #style-Summer_Hiking + + relativeToGround + 7.6047518,46.55048,0 7.605321,46.550618,0 + + + + , Summer Walking Path + #style-Summer_Hiking + + relativeToGround + 7.605639,46.551512,0 7.605518,46.551205,0 7.605264,46.550932,0 7.605187,46.550759,0 7.6052305,46.5506929,0 7.605321,46.550618,0 + + + + , Summer Walking Path + #style-Summer_Hiking + + relativeToGround + 7.6172232,46.5604252,0 7.617237,46.560489,0 7.6173791,46.5605246,0 7.6174549,46.560685,0 7.617571,46.560749,0 7.617485,46.560801,0 7.617071,46.560756,0 7.6169366,46.5607994,0 7.6169276,46.5608025,0 + + + + , Summer Walking Path + #style-Summer_Hiking + + relativeToGround + 7.613359,46.557997,0 7.613697,46.558202,0 + + + + , Summer Walking Path + #style-Summer_Hiking + + relativeToGround + 7.613697,46.558202,0 7.6138249,46.5582483,0 7.6139093,46.5582304,0 7.6140763,46.5582933,0 7.614314,46.558345,0 7.614538,46.558564,0 7.614538,46.558685,0 7.614618,46.558742,0 7.614736,46.559067,0 7.615214,46.559535,0 7.616327,46.560016,0 7.6164317,46.5601639,0 + + + + , Summer Walking Path + #style-Summer_Hiking + + relativeToGround + 7.6070675,46.5503877,0 7.6072145,46.5505602,0 7.6073825,46.5506985,0 7.6073485,46.5507163,0 7.6068988,46.5507717,0 7.6068687,46.550799,0 7.606966,46.5508537,0 7.6070453,46.5509456,0 7.6069006,46.5509478,0 7.6065934,46.5508793,0 7.6064744,46.5508128,0 7.6061811,46.5507498,0 + + + + , Summer Walking Path + #style-Summer_Hiking + + relativeToGround + 7.5453714,46.5078755,0 7.545088,46.507775,0 7.5449722,46.5077871,0 7.5448429,46.507819,0 7.5445859,46.5078239,0 7.5442708,46.507799,0 7.544171,46.5077577,0 + + + + , Summer Walking Path + #style-Summer_Hiking + + relativeToGround + 7.5596756,46.5135221,0 7.5598557,46.5136074,0 7.5600289,46.5136176,0 7.5602821,46.5135897,0 7.5605638,46.5135813,0 7.5607673,46.5135679,0 7.5610239,46.5134916,0 7.5612473,46.5134206,0 7.5614853,46.5133285,0 7.5616609,46.5132468,0 7.5621499,46.5130522,0 7.562457,46.512863,0 7.562552,46.512868,0 7.562705,46.51281,0 7.562819,46.512666,0 7.562913,46.512718,0 7.563163,46.512741,0 7.56333,46.51267,0 7.563476,46.512661,0 7.563577,46.512724,0 7.563753,46.512733,0 7.564089,46.512938,0 7.564319,46.512998,0 7.56442,46.513007,0 7.564595,46.513001,0 7.56478,46.513029,0 7.565151,46.513025,0 + + + + , Summer Walking Path + #style-Summer_Hiking + + relativeToGround + 7.6260233,46.4823623,0 7.6258492,46.4823721,0 7.6255624,46.482439,0 7.6255071,46.4823834,0 7.6254122,46.4823258,0 7.6253676,46.4823044,0 7.625279,46.4822506,0 7.6251996,46.4822146,0 7.6250474,46.4821868,0 7.6250248,46.4823099,0 7.6247359,46.4822272,0 7.6247046,46.4824268,0 7.6245089,46.4823389,0 7.6243517,46.4822979,0 7.6242366,46.4822368,0 7.6242534,46.4824095,0 7.6242673,46.4825683,0 7.624107,46.4827243,0 7.623839,46.4830581,0 7.6236473,46.4832026,0 7.6233765,46.4833475,0 7.6232286,46.4834129,0 7.6228172,46.483644,0 7.622597,46.4838189,0 7.6224068,46.4839382,0 7.6221757,46.4841363,0 7.6218884,46.4843664,0 7.6217534,46.4844727,0 7.6215819,46.4845375,0 7.6213635,46.484593,0 7.6209341,46.4846251,0 7.6207812,46.4845936,0 7.6207351,46.4845971,0 7.6204754,46.4847285,0 7.6203775,46.48474,0 7.6202873,46.4847746,0 7.6202196,46.4847767,0 7.6200436,46.4847224,0 7.6198617,46.4847643,0 7.6195668,46.4847474,0 7.6193562,46.4847566,0 7.6190013,46.4847732,0 7.6186967,46.484811,0 7.6181212,46.4848624,0 7.6179412,46.4849032,0 7.6176836,46.4849937,0 7.6174843,46.4850212,0 7.6171033,46.4850063,0 7.6167943,46.4849573,0 7.6166793,46.4849163,0 7.6164843,46.4849707,0 7.6162531,46.4850023,0 7.6161673,46.4850224,0 7.6160972,46.4850741,0 7.6159545,46.4851447,0 7.6157593,46.4852007,0 7.6155646,46.4852336,0 7.6153623,46.4851233,0 7.6151993,46.4850703,0 7.6148583,46.4850343,0 7.6146363,46.4850853,0 7.6144973,46.4851353,0 7.6143253,46.4850743,0 7.6142553,46.4850173,0 7.6141723,46.4850003,0 7.6141023,46.4850283,0 7.6140603,46.4849993,0 7.6139823,46.4850153,0 7.61393,46.4850566,0 7.6138763,46.4850313,0 7.6138204,46.485091,0 7.6138023,46.4850633,0 7.6137593,46.4850763,0 7.6137203,46.4851253,0 7.6136753,46.4850863,0 7.6136393,46.4851503,0 7.6135663,46.4851123,0 7.6134953,46.4851663,0 7.6134643,46.4851073,0 7.6133643,46.4850353,0 7.6131953,46.4851953,0 7.6131063,46.4852473,0 7.6130853,46.4852793,0 7.6130183,46.4852923,0 7.6129953,46.4852803,0 7.6129803,46.4852453,0 7.6129063,46.4852833,0 7.6128523,46.4852753,0 7.6127303,46.4853543,0 7.6126483,46.4853683,0 7.6125433,46.4852773,0 7.6125053,46.4852903,0 7.6124663,46.4854113,0 7.6123263,46.4853613,0 7.6122583,46.4854193,0 7.612167,46.4853973,0 7.6120713,46.4855123,0 7.6119925,46.4855088,0 7.6119353,46.4854393,0 7.6118633,46.4854613,0 7.6118213,46.4854213,0 7.6114833,46.4856083,0 7.6113663,46.4856453,0 7.6112993,46.4857083,0 7.6113003,46.4857633,0 7.6113783,46.4858083,0 7.6114313,46.4858753,0 7.6114213,46.4859843,0 7.6113973,46.4860683,0 7.6112723,46.4862103,0 7.6112803,46.4862563,0 7.6112453,46.4863273,0 7.6112083,46.4862903,0 7.6111353,46.4862603,0 7.6109813,46.4862273,0 7.6108473,46.4862523,0 7.6105723,46.4864223,0 7.6105023,46.4864773,0 7.6104753,46.4865503,0 7.6104843,46.4865943,0 7.6103863,46.4866243,0 7.6103183,46.4866933,0 7.6101963,46.4867383,0 7.6098853,46.4869373,0 7.6098613,46.4870003,0 7.6096883,46.4871263,0 7.6096513,46.4871703,0 7.6094163,46.4872503,0 7.6093613,46.4872833,0 7.6093253,46.4873503,0 7.6091903,46.4874413,0 7.6088393,46.4876083,0 7.6083365,46.4877988,0 7.6080993,46.4878713,0 7.6079583,46.4879443,0 7.6076133,46.4880403,0 7.6072793,46.4881793,0 7.6070183,46.4882273,0 7.6063493,46.4884033,0 7.6062343,46.4884653,0 7.6059453,46.4885003,0 7.6057283,46.4885073,0 7.6053583,46.4886603,0 7.6049373,46.4887813,0 7.6048723,46.4887823,0 7.6046523,46.4888563,0 7.6046073,46.4888983,0 7.6044753,46.4888563,0 7.6043778,46.4887387,0 7.6043431,46.4886956,0 7.6043857,46.488565,0 + + + + , Summer Walking Path + #style-Summer_Hiking + + relativeToGround + 7.6155646,46.4852336,0 7.615535,46.485289,0 7.615492,46.485321,0 7.615502,46.485336,0 7.615555,46.485348,0 7.61559,46.485422,0 7.615556,46.485471,0 7.615536,46.48548,0 7.615488,46.485564,0 7.615401,46.485584,0 7.615524,46.485579,0 7.61562,46.485595,0 7.615819,46.485559,0 7.615941,46.485561,0 7.616144,46.485543,0 7.616285,46.485512,0 7.616448,46.485431,0 7.616671,46.485489,0 7.616797,46.485459,0 7.6168,46.485484,0 7.616873,46.485518,0 7.616883,46.485555,0 7.616845,46.485562,0 7.616772,46.485599,0 7.616718,46.485614,0 7.616657,46.485688,0 7.616609,46.48571,0 7.61657,46.48576,0 7.61656,46.485821,0 7.616501,46.485897,0 7.616542,46.485957,0 7.616525,46.485996,0 7.616622,46.486006,0 7.616723,46.485977,0 7.616802,46.485984,0 7.616924,46.486036,0 7.616961,46.486095,0 7.617153,46.486238,0 7.61727,46.486222,0 7.617359,46.486187,0 7.617604,46.486188,0 7.61774,46.486219,0 7.617793,46.486254,0 7.617831,46.486349,0 7.617833,46.48642,0 7.617861,46.486485,0 7.618009,46.486485,0 7.618205,46.486437,0 7.618295,46.486464,0 7.618329,46.486456,0 7.618436,46.486472,0 7.618602,46.486572,0 7.618792,46.486605,0 7.618953,46.486676,0 7.6192585,46.4867677,0 7.619325,46.48681,0 7.619549,46.48683,0 7.6197,46.486865,0 7.6199131,46.4869774,0 7.620189,46.487069,0 7.620236,46.487135,0 7.620337,46.487182,0 7.620472,46.487222,0 7.620583,46.487237,0 7.620652,46.487236,0 7.62087,46.487189,0 7.620953,46.48718,0 7.621037,46.487226,0 7.621099,46.48729,0 7.621169,46.487408,0 7.621125,46.487441,0 7.621083,46.487496,0 7.621073,46.487531,0 7.621001,46.487586,0 7.620807,46.487651,0 7.620689,46.48773,0 7.6205198,46.4878324,0 7.620482,46.487876,0 7.620496,46.487948,0 7.620563,46.487987,0 7.620704,46.488001,0 7.620883,46.488074,0 7.621437,46.48835,0 7.621532,46.488359,0 7.621586,46.488383,0 7.62157,46.488455,0 7.621615,46.48847,0 7.621711,46.488469,0 7.621795,46.488546,0 7.6219173,46.4885762,0 7.622028,46.4885985,0 7.6222705,46.4887699,0 7.622325,46.48893,0 7.622321,46.489149,0 7.622263,46.48936,0 7.622314,46.489402,0 7.62232,46.48944,0 7.622254,46.489487,0 7.622105,46.489527,0 7.621746,46.489663,0 7.621668,46.489673,0 7.621407,46.490046,0 7.621412,46.490111,0 7.6214,46.49014,0 7.621378,46.490162,0 7.62133,46.490311,0 7.621239,46.490413,0 7.621209,46.490417,0 7.621155,46.490499,0 7.6210982,46.4905384,0 + + + + , Summer Walking Path + #style-Summer_Hiking + + relativeToGround + 7.6210982,46.4905384,0 7.620964,46.4905577,0 7.6209202,46.490512,0 7.6207783,46.4905281,0 7.6206561,46.4906049,0 7.6205331,46.4906336,0 7.6203543,46.4906494,0 7.6202419,46.4906959,0 7.6200854,46.490772,0 7.6200422,46.4908145,0 7.6199348,46.490882,0 7.6198603,46.4909638,0 7.6198001,46.4910073,0 7.6198169,46.4910749,0 7.61978,46.491125,0 7.619825,46.491157,0 7.6199204,46.491208,0 7.6199692,46.4912974,0 7.6199436,46.4913231,0 7.6200376,46.4914214,0 7.6200257,46.4914703,0 7.620043,46.4915465,0 7.6200862,46.4916029,0 7.6201401,46.491697,0 7.6202303,46.4919044,0 7.620279,46.49209,0 7.6202839,46.4921193,0 7.620283,46.492293,0 7.6202503,46.492356,0 7.6202655,46.4924072,0 7.6202963,46.492469,0 7.6203822,46.4924904,0 + + + + , Summer Walking Path + #style-Summer_Hiking + + relativeToGround + 7.590707,46.478723,0 7.590711,46.478539,0 7.590772,46.478439,0 7.590744,46.478278,0 7.590758,46.478056,0 7.59075,46.477896,0 7.5907974,46.4776477,0 7.59091,46.477543,0 7.590919,46.47749,0 7.590799,46.477172,0 7.590746,46.477112,0 7.590719,46.4770114,0 7.590691,46.4769634,0 7.590748,46.476776,0 7.590759,46.476723,0 7.5907497,46.476653,0 + + + + , Summer Walking Path + #style-Summer_Hiking + + relativeToGround + 7.5907497,46.476653,0 7.59074,46.47658,0 7.590712,46.476443,0 7.590647,46.476366,0 7.590672,46.475923,0 7.590589,46.475456,0 7.5904172,46.4757219,0 7.590124,46.47586,0 7.59005,46.475799,0 7.58971,46.475946,0 7.589323,46.475984,0 7.589385,46.476094,0 7.589159,46.476482,0 7.5888497,46.4765801,0 7.588444,46.476598,0 7.588278,46.476609,0 7.587762,46.476493,0 7.587559,46.476305,0 7.587223,46.476143,0 7.586993,46.476253,0 7.586734,46.476292,0 7.586469,46.47637,0 7.586058,46.476531,0 7.5858106,46.4766097,0 7.585545,46.476709,0 7.585407,46.476925,0 7.585245,46.47706,0 7.5850914,46.4772674,0 7.585041,46.477479,0 7.5848927,46.4776871,0 + + + + , Summer Walking Path + #style-Summer_Hiking + + relativeToGround + 7.5897212,46.4818723,0 7.589943,46.481844,0 7.5900556,46.4818181,0 7.590092,46.481759,0 7.589998,46.481475,0 7.58998,46.481335,0 7.590041,46.481122,0 7.5900774,46.481021,0 7.590016,46.480837,0 7.5900969,46.4806249,0 7.590166,46.480569,0 7.590156,46.4804,0 7.590309,46.480142,0 7.590366,46.480088,0 7.590412,46.479927,0 7.590453,46.479764,0 7.590448,46.479591,0 7.590517,46.479423,0 7.590573,46.479359,0 7.590686,46.479229,0 7.5907469,46.4790091,0 7.590726,46.478903,0 7.590707,46.478723,0 + + + + , Summer Walking Path + #style-Summer_Hiking + + relativeToGround + 7.6011402,46.490361,0 7.6011243,46.4902803,0 7.6011843,46.4901643,0 7.6014333,46.4899023,0 7.6016833,46.4894923,0 7.6017903,46.4891893,0 7.6017893,46.4889183,0 7.6015133,46.4888943,0 7.6012443,46.4886913,0 7.6012193,46.4886393,0 7.6012223,46.4882563,0 7.6012023,46.4882303,0 7.6009833,46.4882253,0 7.6009323,46.4882113,0 7.6006563,46.4882393,0 7.6003743,46.4883773,0 7.6001003,46.4884293,0 7.5999913,46.4883763,0 7.5997933,46.4883763,0 7.5996383,46.4884183,0 7.5995314,46.4883839,0 7.5993911,46.4885099,0 7.5992613,46.4884893,0 7.5990153,46.4885893,0 7.5989113,46.4885563,0 7.5987673,46.4886813,0 7.5987023,46.4886663,0 7.5985929,46.4886894,0 7.5984759,46.4887644,0 7.5984259,46.4889354,0 7.5983769,46.4888704,0 7.5982989,46.4888604,0 7.5982569,46.4887774,0 7.5982034,46.4887503,0 7.5981799,46.4887724,0 7.5981329,46.4887394,0 7.5980599,46.4887434,0 7.5980329,46.4888104,0 7.5979589,46.4885316,0 + + + + , Summer Walking Path + #style-Summer_Hiking + + relativeToGround + 7.5979589,46.4885316,0 7.5978355,46.488491,0 7.5977604,46.4884577,0 7.5976853,46.488454,0 7.5975887,46.488491,0 7.5974899,46.4885634,0 7.5972776,46.4886018,0 7.5970898,46.4887237,0 7.5969075,46.488768,0 7.5967733,46.4888603,0 7.5966285,46.4888714,0 7.5965319,46.4887827,0 7.5964461,46.4887163,0 7.5963764,46.4887089,0 7.5963281,46.4886055,0 7.596404,46.4883944,0 + + + + , Summer Walking Path + #style-Summer_Hiking + + relativeToGround + 7.5922214,46.488268,0 7.5923677,46.4881323,0 7.5925617,46.4879943,0 7.5926257,46.4879633,0 7.5927327,46.4878773,0 7.5928177,46.4877743,0 7.5928317,46.4877043,0 7.5927997,46.4874863,0 7.5927757,46.4874453,0 7.5924828,46.4871774,0 7.5922205,46.4870198,0 7.592117,46.4869065,0 + + + + , Summer Walking Path + #style-Summer_Hiking + + relativeToGround + 7.4419793,46.4126531,0 7.4419058,46.4125374,0 7.4412531,46.4122448,0 7.4409621,46.4121367,0 7.4400956,46.4120547,0 7.4397671,46.4120185,0 7.4393406,46.4117801,0 + + + + , Summer Walking Path + #style-Summer_Hiking + + relativeToGround + 7.4396951,46.4114482,0 7.4412106,46.4111941,0 7.4415882,46.4111763,0 7.4425324,46.4115077,0 7.4430285,46.4114178,0 7.4434583,46.4112146,0 7.4437284,46.4109221,0 7.4441582,46.410684,0 7.4448156,46.4103702,0 7.4448583,46.4102856,0 + + + + , Summer Walking Path + #style-Summer_Hiking + + relativeToGround + 7.4448583,46.4102856,0 7.4453851,46.4101867,0 7.4457995,46.4099307,0 7.4460429,46.4095548,0 7.4466952,46.4082055,0 7.4468089,46.4080037,0 7.44678,46.4078413,0 7.4465215,46.407632,0 7.4462232,46.4075539,0 7.4462137,46.4073898,0 7.4464603,46.4072978,0 7.4464994,46.4071501,0 7.4465756,46.4070943,0 7.4464327,46.4070516,0 7.4463232,46.4069827,0 7.4462423,46.4067824,0 7.4464797,46.406528,0 7.4467295,46.4064004,0 7.447149,46.4061475,0 7.4472186,46.4059651,0 + + + + , Summer Walking Path + #style-Summer_Hiking + + relativeToGround + 7.4411642,46.3998745,0 7.4411731,46.3997126,0 7.4414034,46.3994827,0 7.4414034,46.3994032,0 7.4415671,46.3992862,0 7.4417733,46.3992444,0 7.44184,46.3991273,0 7.4417611,46.398935,0 7.4418824,46.3986925,0 7.4421067,46.3983329,0 7.4421916,46.398036,0 7.4423553,46.3976848,0 7.4425069,46.3974548,0 7.4427736,46.3970869,0 7.4427069,46.3969447,0 7.4427615,46.3967106,0 7.4428949,46.3964346,0 7.4429858,46.3962548,0 7.4429797,46.3961378,0 7.4427979,46.396121,0 7.4422643,46.3962047,0 7.4420582,46.3962716,0 7.4412337,46.3962966,0 7.440876,46.3962381,0 7.4410942,46.3961127,0 7.4412943,46.3958702,0 7.4414641,46.3957782,0 7.4416884,46.3955022,0 7.4417187,46.3953475,0 7.4417066,46.3951802,0 7.4415429,46.3953182,0 7.4413913,46.3953559,0 7.4411973,46.3953349,0 7.4411912,46.395289,0 7.4413307,46.395243,0 7.4413913,46.3951092,0 7.4413338,46.3950921,0 7.4412586,46.3951415,0 7.4411655,46.3951292,0 7.4412443,46.3950823,0 7.4411691,46.3950304,0 7.4413696,46.3950131,0 7.4412228,46.394902,0 7.4412908,46.3948699,0 7.4414841,46.3948576,0 7.441656,46.3948897,0 7.4415378,46.3947218,0 7.4413194,46.3945465,0 7.4413489,46.394489,0 7.4414744,46.3945078,0 7.4415672,46.3945642,0 7.4418946,46.394632,0 7.4421838,46.394647,0 7.4419055,46.3945228,0 7.4424075,46.3944927,0 7.4422547,46.394425,0 7.4420801,46.3943911,0 7.441911,46.3942293,0 7.441649,46.3941992,0 7.4414854,46.3940675,0 7.4417309,46.3941465,0 7.4418728,46.3941503,0 7.4419273,46.3941089,0 7.4420583,46.3941277,0 7.442151,46.3942105,0 7.4422656,46.394218,0 7.4426803,46.3941013,0 7.4427076,46.3939847,0 7.4428604,46.3939245,0 7.4429859,46.3939056,0 7.4431441,46.3938078,0 7.4433296,46.3937815,0 7.4435752,46.3938454,0 7.4438589,46.3940185,0 7.4440117,46.3941013,0 7.4443773,46.3942067,0 7.4445519,46.3942519,0 7.4447047,46.3942105,0 7.4450102,46.3942669,0 7.4452121,46.3942632,0 7.4454413,46.3941653,0 7.4455668,46.3941728,0 7.4456977,46.3940938,0 7.445796,46.3940938,0 7.4459433,46.394154,0 7.4463853,46.3942406,0 7.4464671,46.3943271,0 7.4466144,46.3943271,0 7.4467181,46.3943083,0 7.4468982,46.3943685,0 7.4469636,46.3944551,0 7.4468927,46.3945906,0 7.4470182,46.3946395,0 7.4472201,46.3946583,0 7.4473892,46.3945906,0 7.4477494,46.3945341,0 7.4478421,46.3945454,0 7.447924,46.3945793,0 7.4479785,46.394504,0 7.448104,46.3945078,0 7.4482241,46.3945341,0 7.4483114,46.3944438,0 7.448426,46.3945002,0 7.4484914,46.394425,0 7.4486333,46.3944739,0 7.4485951,46.3946056,0 7.4487315,46.3946169,0 7.4487534,46.3946771,0 7.4486933,46.3947373,0 7.4487861,46.3947975,0 7.4489552,46.3947938,0 7.4488734,46.394632,0 7.4491844,46.3947147,0 7.4496482,46.3947599,0 7.4497955,46.3947298,0 7.449921,46.3946696,0 7.4497628,46.3946508,0 7.4495991,46.3945943,0 7.4494845,46.3944965,0 7.4492172,46.3944099,0 7.4491748,46.3943592,0 7.4491922,46.3943312,0 7.4492415,46.3943032,0 7.4490414,46.3942392,0 7.4491081,46.3941812,0 7.4490733,46.3940272,0 7.4490211,46.3939532,0 7.4489346,46.3938937,0 7.4487649,46.3939565,0 7.4485469,46.3939165,0 7.448529,46.3938473,0 7.4486543,46.3938029,0 7.4486793,46.3937634,0 7.4486264,46.3937261,0 7.4485247,46.3937017,0 7.4487236,46.3936285,0 7.448896,46.3936072,0 7.4489755,46.3935584,0 7.4488253,46.3935432,0 7.4488739,46.3934791,0 7.4487148,46.3934852,0 7.448812,46.3933907,0 7.4489313,46.3934121,0 7.4490286,46.3933938,0 7.448896,46.3932993,0 7.4490639,46.3932627,0 7.4492495,46.3931621,0 7.4494042,46.3931652,0 7.449749,46.3932871,0 7.4498904,46.3932993,0 7.4500451,46.3934151,0 7.4501512,46.3934365,0 7.4502175,46.393409,0 7.4501865,46.3933603,0 7.4499921,46.3932962,0 7.4501512,46.393278,0 7.4500805,46.3932017,0 7.450213,46.3932078,0 7.4502219,46.3931194,0 7.4503898,46.3931713,0 7.4506285,46.3931682,0 7.450823,46.393092,0 7.4509556,46.3929579,0 7.4510837,46.3929122,0 7.4511677,46.3928969,0 7.4511147,46.392839,0 7.4511191,46.3927628,0 7.4510749,46.392714,0 7.45096,46.3926713,0 7.4511368,46.3926195,0 7.4511633,46.3925707,0 7.4511191,46.3925403,0 7.4508186,46.3923695,0 7.4505269,46.392269,0 7.450655,46.3922293,0 7.4507655,46.392208,0 7.4508672,46.3921104,0 7.4510395,46.3920556,0 7.4507876,46.3920129,0 7.4505887,46.3920281,0 7.4504429,46.3919794,0 7.4505931,46.3919123,0 7.4505003,46.3917934,0 7.4503766,46.3917751,0 7.4502793,46.3916715,0 7.4501114,46.3916562,0 7.4500672,46.3915831,0 7.4498727,46.3915373,0 7.4497357,46.3914367,0 7.4496341,46.3913209,0 7.449665,46.3911319,0 7.4493556,46.3912904,0 7.4492495,46.3910435,0 7.4491081,46.3908667,0 7.4491258,46.3908027,0 7.449223,46.3906929,0 7.4491877,46.3905893,0 7.4485866,46.3901869,0 7.4485291,46.3900558,0 7.4485159,46.389882,0 7.4485733,46.3897692,0 7.4487324,46.3896778,0 7.4488695,46.3895955,0 7.4490197,46.3895315,0 7.4491612,46.3892601,0 + + + + , Summer Walking Path + #style-Summer_Hiking + + relativeToGround + 7.4491612,46.3892601,0 7.4494042,46.3890803,0 7.4496031,46.3889065,0 7.4499788,46.3887297,0 7.4500893,46.3886626,0 7.4503014,46.3885803,0 7.4503766,46.3885895,0 7.450434,46.3886596,0 7.4505622,46.3886017,0 7.4507965,46.3884553,0 7.4509114,46.3884248,0 7.4508804,46.3886321,0 7.4508274,46.388809,0 7.4508274,46.3889614,0 7.4508672,46.3890224,0 7.4510793,46.3890772,0 7.4512075,46.3891626,0 7.4513887,46.3891687,0 7.4518086,46.3892357,0 7.4520296,46.3891748,0 7.4522726,46.3892297,0 7.4525997,46.3892205,0 7.4529533,46.3891626,0 7.4531168,46.3890528,0 7.4533334,46.388998,0 7.4536207,46.3889248,0 7.4537621,46.3889522,0 7.4538903,46.3889583,0 7.4539742,46.3889035,0 7.4542306,46.3887907,0 7.4543941,46.3887388,0 7.4544074,46.3886138,0 7.4546416,46.388687,0 7.4547786,46.3887968,0 7.4548493,46.3886687,0 7.4549598,46.3887236,0 7.4550571,46.3886626,0 7.4550482,46.388626,0 7.4553532,46.3885529,0 7.4557289,46.3884553,0 7.4559764,46.388437,0 7.4561664,46.3883456,0 7.4564095,46.3881962,0 7.4565333,46.3881931,0 7.4567366,46.3881078,0 7.4567763,46.3880102,0 7.4569576,46.3879828,0 7.4570813,46.3878883,0 7.457152,46.3876871,0 7.4571388,46.387617,0 7.4571918,46.3875407,0 7.4573553,46.3875255,0 7.4574747,46.3875529,0 7.4575542,46.3875011,0 7.4578327,46.3872633,0 7.4579432,46.3872176,0 7.4580713,46.3871901,0 7.4581332,46.3871383,0 7.4581465,46.3870591,0 7.458226,46.3870042,0 7.458447,46.386928,0 7.4584868,46.3868853,0 7.4584603,46.3868335,0 7.4583586,46.3867786,0 7.4583277,46.3867267,0 7.4583674,46.3866536,0 7.4585177,46.3865042,0 7.4585708,46.3864493,0 7.458584,46.3863944,0 7.4584912,46.3863579,0 7.4584426,46.3862908,0 7.4583763,46.3860316,0 7.4583807,46.3859646,0 7.4584912,46.3858579,0 7.4586768,46.3856719,0 7.4587917,46.3856231,0 7.4588801,46.3855225,0 7.4590304,46.3854554,0 7.4592072,46.3852908,0 + + + + , Summer Walking Path + #style-Summer_Hiking + + relativeToGround + 7.4592072,46.3852908,0 7.4593044,46.3851567,0 7.4594017,46.3851536,0 7.4594459,46.3851018,0 7.459437,46.3850256,0 7.4595475,46.3849311,0 7.4596492,46.3849158,0 7.4597508,46.384928,0 7.4598657,46.3848975,0 7.4601398,46.3846567,0 7.4602591,46.3846079,0 7.4603696,46.3846292,0 7.4606524,46.3845164,0 7.4608734,46.3842359,0 7.4608867,46.384117,0 7.4609,46.3840225,0 7.4610016,46.3839128,0 7.4610237,46.3837725,0 7.4612049,46.3834554,0 7.4612447,46.3833182,0 7.4613331,46.3832054,0 7.4612403,46.3830316,0 7.4612933,46.3830072,0 7.4612005,46.3829066,0 7.4612226,46.3827298,0 7.4611386,46.3825865,0 7.4611386,46.3824828,0 7.4610414,46.3823304,0 7.4611073,46.3822106,0 + + + + , Summer Walking Path + #style-Summer_Hiking + + relativeToGround + 7.4611073,46.3822106,0 7.4612404,46.3822517,0 7.4614568,46.3823456,0 7.4616159,46.382348,0 7.4615585,46.3822694,0 7.4616911,46.3822938,0 7.4617211,46.3821629,0 7.4618236,46.3820919,0 7.4619784,46.3822176,0 7.4622961,46.3823287,0 7.4629055,46.38253,0 7.463308,46.3826662,0 7.4634069,46.3828895,0 7.4636321,46.382777,0 7.4639005,46.38287,0 7.4639274,46.3829525,0 7.4640506,46.382901,0 7.4640671,46.3829953,0 7.4643743,46.3829246,0 7.4643871,46.3830368,0 7.4645354,46.3829903,0 7.4645177,46.3831343,0 7.4646506,46.3831618,0 7.4646264,46.3833123,0 7.4648386,46.3832036,0 7.4650285,46.3832415,0 7.4649901,46.3833249,0 7.4652644,46.3832425,0 7.4652205,46.3834252,0 7.4657122,46.3832997,0 7.4661585,46.3832997,0 7.4664332,46.3832642,0 7.4664675,46.3834418,0 7.4663216,46.3836313,0 7.4666563,46.383578,0 7.4669653,46.3834536,0 7.4672915,46.3833826,0 7.4674803,46.3831754,0 7.4675693,46.3829127,0 7.4676724,46.3828786,0 7.4678802,46.3828314,0 7.4681028,46.3828006,0 + + + + , Summer Walking Path + #style-Summer_Hiking + + relativeToGround + 7.4715578,46.3803844,0 7.4716905,46.3801436,0 7.4721055,46.3799782,0 7.4722339,46.3800409,0 7.472586,46.3799856,0 7.472571,46.3798732,0 7.4733791,46.3800682,0 7.4740397,46.3799886,0 7.4740981,46.3801672,0 7.4743717,46.3802091,0 7.4747225,46.3801399,0 7.4753201,46.3804002,0 7.4756569,46.3803819,0 7.4760285,46.3805054,0 7.4773344,46.3802503,0 + + + + , Summer Walking Path + #style-Summer_Hiking + + relativeToGround + 7.4773344,46.3802503,0 7.4775896,46.3800954,0 7.478055,46.3799769,0 7.4786994,46.3798188,0 7.4797233,46.3793595,0 7.4798307,46.3792508,0 7.4798737,46.3786976,0 7.4799238,46.3784851,0 7.4801171,46.3782629,0 7.480246,46.3778331,0 7.4804321,46.3776553,0 7.4803963,46.3775269,0 7.4810479,46.3771514,0 7.4812842,46.3769291,0 7.4815634,46.3765389,0 7.4815634,46.3763364,0 7.4819429,46.3760548,0 7.4822293,46.3759511,0 7.4822794,46.3758473,0 7.4826875,46.3756053,0 7.4829596,46.3755015,0 7.4832961,46.3752496,0 7.4832961,46.3750174,0 7.4834393,46.3747062,0 7.4836613,46.3745481,0 7.4833677,46.374311,0 7.4832031,46.3742665,0 7.48311,46.374143,0 7.4833677,46.3740541,0 7.4835038,46.3740936,0 7.4838618,46.3740195,0 7.4839763,46.3738466,0 7.4841697,46.3737923,0 7.4841553,46.3736886,0 7.4842771,46.3735947,0 7.4842484,46.3735058,0 7.4840121,46.3732489,0 7.4840837,46.3731847,0 7.4843415,46.3729821,0 7.4845635,46.3729179,0 7.4846279,46.3727944,0 7.4846422,46.3727154,0 7.4847711,46.3726857,0 7.4849215,46.3726709,0 7.4849429,46.3725424,0 7.4849501,46.3723448,0 7.4853009,46.371752,0 7.4861673,46.3711938,0 7.4864609,46.3705861,0 + + + + , Summer Walking Path + #style-Summer_Hiking + + relativeToGround + 7.574892,46.4016217,0 7.5752629,46.4028429,0 7.5758871,46.4029302,0 7.5773776,46.4030385,0 7.5779149,46.4031005,0 7.5783777,46.4034398,0 7.58076,46.4045863,0 7.582163,46.4048456,0 7.582205,46.4049976,0 7.5843654,46.405166,0 7.5848908,46.406216,0 7.5892869,46.4093376,0 7.5906357,46.409781,0 7.5916796,46.4096886,0 7.5924095,46.4102984,0 7.5930562,46.4102984,0 7.5939153,46.4108249,0 7.5942811,46.4113213,0 7.5946519,46.4119154,0 7.5946557,46.4121992,0 + + + + , Summer Walking Path + #style-Summer_Hiking + + relativeToGround + 7.5946557,46.4121992,0 7.5947645,46.4125775,0 7.5944483,46.4128069,0 7.5945428,46.4130565,0 7.5944653,46.413244,0 7.5944498,46.4133897,0 7.5946916,46.4136176,0 7.5947536,46.4140872,0 7.5948451,46.414329,0 7.5947955,46.4146018,0 7.5947645,46.4149149,0 7.5946374,46.4151908,0 7.5945723,46.4153086,0 7.5944064,46.4153582,0 7.5941894,46.4154868,0 7.5940592,46.4157705,0 7.5939368,46.4158464,0 7.5936888,46.4159673,0 7.5935586,46.4162881,0 7.5934367,46.4165774,0 7.5933156,46.4167476,0 7.5932134,46.4168574,0 7.5932172,46.4169406,0 7.5931264,46.4170012,0 7.5929485,46.4170466,0 7.5928161,46.417285,0 7.5927139,46.4175423,0 7.5921387,46.4175991,0 7.5919533,46.4177126,0 7.5918322,46.4176974,0 7.5917225,46.4174855,0 7.5915598,46.4174099,0 7.5913985,46.4174799,0 7.5913628,46.4174184,0 7.5911734,46.4175225,0 7.5908727,46.4180783,0 7.5901597,46.4188029,0 7.590028,46.4190354,0 7.5902314,46.4192795,0 7.5904387,46.4202889,0 7.5907177,46.4209379,0 7.5915276,46.4219047,0 7.5920628,46.4226534,0 7.5930543,46.4233989,0 7.5938905,46.4242919,0 7.5943427,46.4250004,0 + + + + , Summer Walking Path + #style-Summer_Hiking + + relativeToGround + 7.5296583,46.4300374,0 7.5307656,46.4296824,0 7.531478,46.4296114,0 7.5326109,46.4289607,0 7.5328856,46.4290672,0 7.5332632,46.4290672,0 7.5335465,46.4288779,0 7.5331946,46.4285643,0 7.5331087,46.4283632,0 7.5331946,46.4279491,0 7.5328942,46.4278071,0 7.5325423,46.4278366,0 7.5318213,46.4276592,0 7.531435,46.4276296,0 7.531272,46.4277657,0 7.5310316,46.427742,0 7.5309029,46.4274699,0 7.5305682,46.4272214,0 7.5304909,46.4270025,0 7.5302506,46.4269019,0 7.5299588,46.4269137,0 7.5293322,46.4264937,0 7.5287056,46.426334,0 7.5284739,46.4261683,0 7.5281134,46.4261269,0 7.5278559,46.4259671,0 7.5274697,46.4258843,0 7.5272551,46.4257305,0 7.5266629,46.4255471,0 7.5250836,46.4254406,0 7.5240622,46.4256358,0 7.5224915,46.4262275,0 7.5212212,46.4263813,0 7.5209294,46.4265588,0 7.5206461,46.4265055,0 7.5199766,46.4265588,0 7.5191784,46.4264286,0 7.5184059,46.426399,0 7.5181485,46.4264878,0 7.5179253,46.4263754,0 7.5172987,46.4268546,0 7.5166378,46.4266889,0 7.5163632,46.4265469,0 7.5160456,46.4265706,0 7.5149899,46.4262275,0 7.5148096,46.4260796,0 7.5149212,46.4258133,0 7.5144492,46.4257778,0 7.5146122,46.4253637,0 7.5137625,46.4253578,0 7.5135222,46.425269,0 7.512827,46.425482,0 7.5115052,46.4264937,0 7.511076,46.4266475,0 7.5105353,46.4270143,0 7.5101834,46.4270912,0 7.510046,46.4269729,0 + + + + , Summer Walking Path + #style-Summer_Hiking + + relativeToGround + 7.4901878,46.4164474,0 7.4912908,46.4158099,0 7.4918247,46.4154004,0 7.4920565,46.4151024,0 7.4923119,46.4150314,0 7.4928417,46.4151449,0 7.4930356,46.4152159,0 7.4930734,46.4151024,0 7.4929174,46.4148895,0 7.4929174,46.4147902,0 7.4934093,46.4148611,0 7.4939864,46.4152443,0 7.4942844,46.4152679,0 7.4943175,46.4150693,0 7.4943175,46.415022,0 7.4945634,46.4150503,0 7.4947574,46.4150929,0 7.4947621,46.4149557,0 7.4947526,46.4148611,0 7.495202,46.4148375,0 7.4958737,46.4152253,0 7.4960031,46.4154518,0 7.4961514,46.4154639,0 7.4962301,46.4154094,0 7.4963966,46.4155093,0 7.4965601,46.4156365,0 7.4966479,46.4156244,0 7.496554,46.4154488,0 7.496324,46.4152399,0 7.4962543,46.4148888,0 7.4963542,46.4147949,0 7.496327,46.4144831,0 7.4964178,46.4142561,0 7.49633,46.414023,0 7.4955157,46.41336,0 7.4950404,46.4133025,0 7.4946469,46.4130603,0 7.4943684,46.4127152,0 7.4942654,46.4124034,0 7.494217,46.4122944,0 7.4942715,46.4122581,0 7.4943472,46.412246,0 7.4948194,46.412358,0 7.4949375,46.4123368,0 7.4948557,46.41214,0 7.4944592,46.4116193,0 7.4944228,46.4115406,0 7.4948467,46.411362,0 7.4946559,46.4111229,0 7.4947316,46.4110744,0 7.494662,46.4109321,0 7.4945197,46.4108776,0 7.4945924,46.4107656,0 7.4945288,46.4107081,0 7.4943714,46.4108655,0 7.4940687,46.4106839,0 7.493663,46.4105416,0 7.4935631,46.4104902,0 7.4938628,46.4104054,0 7.4938356,46.4103509,0 7.4937357,46.4102571,0 7.4936085,46.4102026,0 7.4938931,46.4099695,0 7.4941837,46.410024,0 7.4945046,46.4099331,0 7.4952069,46.4099543,0 7.495437,46.4098938,0 7.4955611,46.4097969,0 7.4960122,46.4098393,0 7.4967357,46.4101027,0 7.496993,46.4101662,0 7.4971806,46.4100626,0 7.4972836,46.4100058,0 7.4973169,46.4099271,0 7.497217,46.4099241,0 7.4971613,46.409743,0 7.4968063,46.4094717,0 7.49627,46.4092268,0 7.4959926,46.4091075,0 7.4958764,46.4088269,0 7.4956563,46.4085867,0 7.4954188,46.4080324,0 7.4954703,46.4075632,0 7.495328,46.4072756,0 7.4953704,46.4070486,0 7.4957276,46.4069396,0 7.4958638,46.4065884,0 7.4968083,46.4062312,0 7.4977044,46.405992,0 7.4979405,46.4060405,0 7.4981282,46.4057529,0 7.4980919,46.4054744,0 7.4983825,46.4051989,0 7.4987034,46.4048326,0 7.4986943,46.4040485,0 7.4994231,46.4034022,0 7.4994988,46.4029718,0 7.499688,46.4024609,0 7.500109,46.4020447,0 7.5001941,46.4017278,0 7.5000191,46.4013778,0 7.5000806,46.400952,0 7.4998678,46.400673,0 7.4998163,46.4004746,0 7.4995795,46.4003655,0 7.4992645,46.4003866,0 7.4988702,46.4002985,0 7.4986284,46.400275,0 7.498196,46.4003894,0 7.4980919,46.4004863,0 7.4978473,46.4004233,0 7.4971159,46.4005347,0 7.496772,46.400588,0 7.4961786,46.4005565,0 7.4961084,46.4006292,0 7.4957064,46.4005468,0 7.4952463,46.4004524,0 7.4947861,46.4003652,0 7.4933998,46.3997392,0 7.4932165,46.3997687,0 7.4931219,46.3994967,0 7.491218,46.3992425,0 7.4899173,46.3989114,0 7.4893556,46.3990769,0 7.4888885,46.3988759,0 7.4864525,46.3987104,0 7.4846692,46.3988084,0 7.4843689,46.3989585,0 7.4823134,46.3989123,0 7.481863,46.3985312,0 7.4809507,46.3978383,0 7.478745,46.3969722,0 7.4771745,46.3951246,0 7.4767934,46.3946857,0 7.4768165,46.3940852,0 7.4755347,46.3924454,0 7.471643,46.3901935,0 7.4706267,46.3891542,0 7.4701879,46.3881957,0 7.4692872,46.3876183,0 7.4675434,46.3874105,0 + + + + , Summer Walking Path + #style-Summer_Hiking + + relativeToGround + 7.4675434,46.3874105,0 7.4669887,46.3873872,0 7.465311,46.386759,0 7.464535,46.3867072,0 7.4624656,46.3860347,0 7.4615639,46.3857169,0 7.4609857,46.3855182,0 7.4604773,46.3854862,0 7.4600662,46.3855409,0 7.4598666,46.3854598,0 7.4597279,46.3853215,0 7.4592072,46.3852908,0 + + + + , Summer Walking Path + #style-Summer_Hiking + + relativeToGround + 7.4715578,46.3803844,0 7.4713128,46.3802364,0 7.4710557,46.3801046,0 7.4707899,46.3799475,0 7.4698841,46.3796959,0 7.4694796,46.3795216,0 7.4681501,46.3786158,0 7.4675495,46.378284,0 7.4674162,46.3781604,0 7.4666402,46.3783304,0 7.4661228,46.3783304,0 7.4655094,46.3783895,0 7.4651103,46.3781752,0 7.4646468,46.3781259,0 7.4641455,46.3780629,0 7.4636854,46.377983,0 7.463201,46.3777408,0 7.4629927,46.3777214,0 7.4624696,46.3775035,0 7.4618424,46.3773751,0 7.4614379,46.3773025,0 7.4612345,46.377024,0 7.4610577,46.3768084,0 7.4610577,46.3766437,0 7.4611473,46.3765372,0 7.4614089,46.3764863,0 7.4615938,46.3762582,0 7.4617497,46.3761721,0 7.4619008,46.376207,0 7.4618642,46.3764452,0 7.4619998,46.3764452,0 7.4621249,46.3763998,0 7.4621408,46.3764214,0 + + + + , Summer Walking Path + #style-Summer_Hiking + + relativeToGround + 7.5888202,46.5408269,0 7.5888528,46.5408766,0 7.588875,46.54106,0 7.588924,46.54119,0 7.588901,46.54133,0 7.588834,46.541485,0 7.588767,46.541914,0 7.588787,46.541944,0 7.588761,46.542065,0 7.588373,46.542474,0 7.588166,46.542546,0 7.587836,46.5425,0 7.587632,46.542542,0 7.587456,46.542619,0 7.587403,46.542651,0 7.58737,46.542709,0 7.58737,46.542829,0 7.587412,46.542915,0 7.586862,46.543252,0 7.586847,46.543396,0 7.586674,46.543453,0 7.5862511,46.5434681,0 7.586041,46.543592,0 7.58596,46.5437,0 7.58591,46.543846,0 7.58599,46.543953,0 7.585999,46.544003,0 7.585923,46.544054,0 7.58558,46.544154,0 7.585515,46.544354,0 7.585589,46.544496,0 7.585709,46.54456,0 7.585731,46.544603,0 7.585658,46.544812,0 7.585706,46.544917,0 7.585653,46.545091,0 7.585334,46.545331,0 7.585114,46.545657,0 7.5849503,46.5458153,0 + + + + , Summer Walking Path + #style-Summer_Hiking + + relativeToGround + 7.6020138,46.5498841,0 7.601882,46.549922,0 7.601685,46.54992,0 7.601626,46.54996,0 7.601722,46.550054,0 7.601309,46.550264,0 7.6011991,46.550366,0 7.601219,46.55041,0 7.601399,46.550388,0 7.6015586,46.550506,0 7.601421,46.550513,0 7.6013647,46.5506373,0 7.601262,46.550705,0 7.601287,46.550811,0 7.601333,46.550808,0 7.6017485,46.5512085,0 7.601757,46.5512704,0 7.601563,46.551184,0 7.601708,46.551289,0 7.6015783,46.5512632,0 7.6018501,46.5513874,0 7.6016629,46.5513788,0 7.601709,46.551462,0 7.601649,46.55154,0 7.6018448,46.5515183,0 7.601677,46.551598,0 7.601566,46.551819,0 7.60172,46.551885,0 7.601752,46.551971,0 7.601523,46.552262,0 7.6014463,46.5522722,0 7.601403,46.552354,0 7.601349,46.55238,0 7.601272,46.552371,0 7.601262,46.552236,0 7.601138,46.552184,0 7.600934,46.552206,0 7.600846,46.552289,0 7.600269,46.552471,0 7.6002,46.5525494,0 7.600149,46.55276,0 7.600296,46.552897,0 7.6009266,46.5531762,0 7.6009329,46.5533856,0 + + + + , Summer Walking Path + #style-Summer_Hiking + + relativeToGround + 7.6009266,46.5531762,0 7.600218,46.55332,0 7.6001175,46.5534133,0 7.599965,46.553401,0 7.599942,46.553433,0 7.599895,46.553426,0 7.59987,46.553456,0 7.599729,46.553497,0 7.599659,46.553448,0 7.599272,46.553485,0 7.598813,46.55346,0 7.598656,46.5534106,0 7.598414,46.553382,0 7.598358,46.553294,0 7.598138,46.553232,0 7.5979213,46.5532318,0 7.5977704,46.5533893,0 7.597562,46.55353,0 7.5971441,46.5537263,0 + + + + , Summer Walking Path + #style-Summer_Hiking + + relativeToGround + 7.585006,46.545887,0 7.585308,46.545812,0 7.585676,46.545648,0 7.586004,46.545501,0 7.586149,46.54546,0 7.586274,46.545474,0 7.586592,46.545575,0 7.586746,46.545413,0 7.587392,46.545051,0 7.587454,46.545042,0 7.58755,46.545093,0 7.587657,46.545196,0 7.587685,46.545255,0 7.587735,46.545312,0 7.587937,46.545379,0 7.588127,46.545313,0 7.588555,46.545203,0 7.588655,46.545235,0 7.588914,46.54519,0 7.58927,46.544999,0 7.589602,46.544965,0 7.589747,46.544873,0 7.590138,46.544825,0 7.590246,46.544838,0 7.590336,46.544905,0 7.590498,46.54495,0 7.59092,46.544973,0 7.591352,46.544928,0 7.5915543,46.5450082,0 7.5919183,46.5450711,0 7.5920883,46.5451263,0 + + + + , Summer Walking Path + #style-Summer_Hiking + + relativeToGround + 7.5849503,46.5458153,0 7.585006,46.545887,0 + + + + , Summer Walking Path + #style-Summer_Hiking + + relativeToGround + 7.5800023,46.5344493,0 7.5798945,46.5343797,0 + + + + , Summer Walking Path + #style-Summer_Hiking + + relativeToGround + 7.5798945,46.5343797,0 7.5799446,46.5343023,0 7.580358,46.534014,0 7.580229,46.53383,0 7.580478,46.53353,0 7.58063,46.533409,0 7.580662,46.533282,0 7.580985,46.533044,0 7.581097,46.532718,0 7.581299,46.53254,0 7.581403,46.532292,0 7.581436,46.532046,0 7.581655,46.531986,0 7.581711,46.531738,0 7.582004,46.531552,0 7.582176,46.531554,0 7.582523,46.531376,0 7.582614,46.531184,0 7.582583,46.53111,0 7.582906,46.530769,0 7.582863,46.530726,0 7.5829341,46.5305863,0 7.583097,46.530457,0 7.583587,46.53036,0 7.583919,46.530348,0 7.5840885,46.5302561,0 7.5842076,46.5301916,0 + + + + , Summer Walking Path + #style-Summer_Hiking + + relativeToGround + 7.574907,46.522174,0 7.575241,46.522126,0 7.575519,46.522007,0 7.575683,46.5219091,0 7.576177,46.5216802,0 7.5766449,46.5215308,0 7.5769984,46.5213232,0 7.5771978,46.5209949,0 7.5773429,46.5207243,0 7.5778537,46.5203175,0 7.5781433,46.5201358,0 7.5782994,46.5200566,0 7.5784074,46.5199962,0 7.5786242,46.5200434,0 7.5788573,46.5200418,0 7.5791451,46.5200439,0 7.5795373,46.5200993,0 7.5797431,46.5200959,0 7.5799979,46.5200668,0 7.5801735,46.5200411,0 + + + + , Summer Walking Path + #style-Summer_Hiking + + relativeToGround + 7.5749471,46.5223416,0 7.574907,46.522174,0 + + + + , Summer Walking Path + #style-Summer_Hiking + + relativeToGround + 7.6160369,46.3979777,0 7.6157131,46.3979155,0 7.6154834,46.3978111,0 7.6151754,46.3978003,0 7.6150423,46.3977139,0 7.6148727,46.3976239,0 7.6147448,46.3976527,0 7.6145725,46.3976563,0 7.6144133,46.3977751,0 7.6141693,46.3976716,0 7.6139253,46.3976149,0 7.6138913,46.3974511,0 + + + + , Summer Walking Path + #style-Summer_Hiking + + relativeToGround + 7.5867784,46.5343331,0 7.586636,46.5343169,0 7.5862536,46.534387,0 7.5858189,46.5340589,0 7.5855344,46.5338818,0 7.5852999,46.5338814,0 7.5852102,46.5338558,0 7.5849817,46.5337454,0 7.5844205,46.5337057,0 7.5841258,46.5338472,0 7.5837589,46.5338793,0 7.583468,46.534194,0 7.5831458,46.5339879,0 7.5829768,46.5340463,0 7.5827503,46.5340428,0 7.5824606,46.5341234,0 7.5822823,46.533987,0 7.582175,46.534088,0 7.582192,46.534143,0 7.582098,46.534248,0 7.582032,46.534242,0 7.5817344,46.5340341,0 7.581564,46.534071,0 7.581458,46.534159,0 7.5813587,46.5343647,0 7.581224,46.5343566,0 7.5811,46.534221,0 7.5809361,46.5341512,0 7.5807098,46.5341913,0 7.5805463,46.5342494,0 7.580228,46.534435,0 7.5800023,46.5344493,0 + + + + , Summer Walking Path + #style-Summer_Hiking + + relativeToGround + 7.5760918,46.4642406,0 7.5761528,46.4641344,0 7.5760963,46.4639355,0 7.575963,46.4637864,0 7.5761054,46.4635605,0 7.576007,46.463488,0 7.5760865,46.4634391,0 7.5762155,46.4634251,0 7.5762909,46.4634787,0 7.5763343,46.4633983,0 7.5761492,46.4633829,0 7.5759358,46.4633025,0 7.5756982,46.4632692,0 7.5753259,46.4633112,0 7.5752247,46.4634065,0 7.5750741,46.4633328,0 7.574982,46.4633792,0 7.5748702,46.4634855,0 7.5746599,46.4634921,0 7.5743257,46.463372,0 7.5741265,46.4632372,0 7.5739792,46.4632088,0 7.5737606,46.4632926,0 7.5735824,46.4628614,0 7.5733497,46.4628337,0 7.5731491,46.4627127,0 7.5728305,46.4626798,0 7.5725916,46.4625619,0 7.5724166,46.4626136,0 7.5722627,46.4626243,0 7.5721752,46.4626614,0 7.571934,46.462583,0 7.5718543,46.4625871,0 7.5714721,46.4625473,0 7.5712765,46.4625598,0 7.571208,46.462656,0 7.571101,46.462616,0 7.571067,46.462726,0 7.5707706,46.4627343,0 7.57068,46.462818,0 7.570409,46.462675,0 7.570349,46.462904,0 7.569704,46.462655,0 7.5695604,46.462966,0 7.5697132,46.4634117,0 7.569812,46.4637868,0 7.569815,46.46394,0 7.5697137,46.4643644,0 7.5696509,46.4645017,0 + + + + , Summer Walking Path + #style-Summer_Hiking + + relativeToGround + 7.5697137,46.4643644,0 7.5696709,46.4640308,0 7.569641,46.463862,0 7.569569,46.463753,0 7.5695632,46.4636037,0 7.569509,46.46342,0 7.5695177,46.4633725,0 7.5695743,46.4633062,0 7.569566,46.4631985,0 7.5694414,46.4631404,0 7.569341,46.4630756,0 7.569295,46.462921,0 7.569227,46.462647,0 7.569219,46.462572,0 7.5696607,46.4623892,0 7.5698225,46.462294,0 7.5698465,46.4622325,0 7.5698383,46.4621907,0 7.5697712,46.4621462,0 7.569602,46.462112,0 7.5692687,46.4619905,0 7.5691654,46.461936,0 + + + + , Summer Walking Path + #style-Summer_Hiking + + relativeToGround + 7.5696509,46.4645017,0 7.5698207,46.4647295,0 7.5699592,46.4650421,0 7.5699802,46.46521,0 7.5702017,46.4657804,0 7.5705419,46.466011,0 7.5707753,46.4661825,0 7.570989,46.4663287,0 7.5710874,46.4664496,0 7.5712645,46.4664834,0 7.5713153,46.4665155,0 7.5713181,46.4665988,0 7.5712129,46.4666974,0 7.5713008,46.4667194,0 7.5713972,46.4667082,0 7.5715031,46.4667483,0 7.5715626,46.4668221,0 7.5717327,46.4668831,0 7.5717584,46.467238,0 7.571919,46.4672926,0 7.5719463,46.4674066,0 7.5720619,46.4674788,0 7.5721567,46.4676028,0 7.5722702,46.4678185,0 7.5723853,46.4679969,0 7.5724291,46.468146,0 7.572494,46.468344,0 7.5724388,46.4686796,0 7.5724432,46.4687755,0 7.5724457,46.4688768,0 7.572539,46.4690708,0 7.5725353,46.4691595,0 7.5725692,46.4692211,0 7.5725419,46.469325,0 7.572579,46.4694265,0 7.572718,46.469569,0 7.5729752,46.4697186,0 7.5730414,46.4698077,0 7.573089,46.4698415,0 7.5731178,46.4699205,0 7.5730953,46.4699843,0 7.5730765,46.4700483,0 7.573187,46.470135,0 + + + + , Summer Walking Path + #style-Summer_Hiking + + relativeToGround + 7.5733474,46.4760144,0 7.573387,46.476093,0 7.573364,46.476147,0 7.573205,46.47634,0 7.5731633,46.4764965,0 7.573011,46.476853,0 7.573171,46.477301,0 7.573158,46.477392,0 7.573204,46.477643,0 7.573264,46.477724,0 7.57326,46.47782,0 7.573312,46.477974,0 7.573405,46.478005,0 7.573513,46.478382,0 7.573327,46.478605,0 7.573124,46.478741,0 7.5730652,46.4788205,0 7.572965,46.478971,0 7.5729777,46.4790803,0 + + + + , Summer Walking Path + #style-Summer_Hiking + + relativeToGround + 7.572435,46.480232,0 7.5723796,46.4802457,0 7.572367,46.480409,0 7.5724103,46.4805829,0 7.5724509,46.4806753,0 7.572588,46.4807929,0 7.5728106,46.4809482,0 7.572871,46.481109,0 7.5730504,46.4810728,0 7.5731338,46.4810853,0 7.573273,46.481198,0 7.5733182,46.4812789,0 7.573379,46.481352,0 7.5734294,46.4814738,0 7.573584,46.481614,0 7.5736388,46.4817822,0 7.5735255,46.4818236,0 7.5735632,46.481887,0 + + + + , Summer Walking Path + #style-Summer_Hiking + + relativeToGround + 7.4991732,46.4109774,0 7.4971806,46.4100626,0 + + + + , Summer Walking Path + #style-Summer_Hiking + + relativeToGround + 7.5630315,46.4863658,0 7.5630346,46.4863294,0 7.5629344,46.4861077,0 7.5628594,46.4858963,0 7.5628286,46.4857459,0 7.5627536,46.4854418,0 7.5629093,46.4851483,0 7.5631453,46.4849427,0 7.5634035,46.4848222,0 7.5635808,46.4847034,0 + + + + , Summer Walking Path + #style-Summer_Hiking + + relativeToGround + 7.5609581,46.485938,0 7.5605165,46.4858118,0 7.5600333,46.4857315,0 7.5598958,46.4857688,0 7.559625,46.485895,0 7.5595375,46.4858721,0 7.5593626,46.4856971,0 7.5591709,46.4856971,0 7.5590842,46.4856691,0 + + + + , Summer Walking Path + #style-Summer_Hiking + + relativeToGround + 7.5583125,46.4854727,0 7.5582182,46.4854102,0 7.5579355,46.4853406,0 7.5577332,46.4852617,0 + + + + , Summer Walking Path + #style-Summer_Hiking + + relativeToGround + 7.4491612,46.3892601,0 7.4489159,46.389038,0 7.448525,46.3888934,0 7.4484874,46.3885331,0 7.4481152,46.3884317,0 7.4478024,46.3883001,0 7.4481997,46.3879463,0 7.4479682,46.3878061,0 7.448763,46.3874695,0 7.4490379,46.387263,0 7.4491418,46.3869723,0 7.448928,46.3867195,0 7.4480727,46.3866647,0 7.4475718,46.3865635,0 7.4472541,46.3866225,0 7.4469059,46.3864371,0 7.4462221,46.3860969,0 7.4456494,46.3858171,0 7.445017,46.3854714,0 7.4447187,46.385348,0 7.4441818,46.3852245,0 7.4437523,46.3850681,0 7.4433466,46.3848706,0 7.4431576,46.3845101,0 7.4427768,46.3840883,0 7.4424288,46.383557,0 7.4422289,46.3833056,0 + + + + , Summer Walking Path + #style-Summer_Hiking + + relativeToGround + 7.54034,46.479224,0 7.5405449,46.4792038,0 + + + + , Summer Walking Path + #style-Summer_Hiking + + relativeToGround + 7.5405449,46.4792038,0 7.5405797,46.4790433,0 7.5405327,46.4789723,0 7.5404097,46.4788593,0 7.5402977,46.4788013,0 7.5402217,46.4787403,0 7.5401727,46.4786613,0 7.5401477,46.4785803,0 7.5401417,46.4784913,0 7.5401847,46.4783583,0 7.5401077,46.4781393,0 7.5398797,46.4779323,0 7.5397957,46.4778963,0 7.5396827,46.4778273,0 7.5395287,46.4776643,0 7.5392937,46.4774943,0 7.5392307,46.4773863,0 7.5392767,46.4772613,0 7.5393877,46.4770953,0 7.5393527,46.4769173,0 7.5392957,46.4768123,0 7.5390797,46.4766623,0 7.5386757,46.4762033,0 7.5386637,46.4761703,0 7.5386847,46.4760593,0 7.5384857,46.4757803,0 7.5384877,46.4757453,0 7.5385827,46.4756555,0 7.5387457,46.475635,0 7.5388027,46.4755263,0 7.5387747,46.4754113,0 7.5387965,46.475197,0 7.5387556,46.4750208,0 7.5387107,46.4748276,0 7.5386463,46.4746207,0 7.5387322,46.4744286,0 7.5384961,46.4739853,0 7.5383245,46.4736011,0 7.5382601,46.4728917,0 7.5378953,46.4726701,0 7.5375949,46.4724927,0 7.5373374,46.4721972,0 7.5371872,46.4718425,0 7.5370799,46.4714878,0 7.5368224,46.4710149,0 7.5366508,46.4708671,0 7.5363933,46.4707489,0 7.5361572,46.4705125,0 7.5359427,46.4703942,0 7.5354491,46.4701873,0 7.5351487,46.4700691,0 7.5347839,46.4699509,0 7.5345265,46.4698474,0 7.534269,46.469271,0 7.5341188,46.4688868,0 7.5337111,46.4687094,0 7.5332913,46.4687698,0 7.5313936,46.467867,0 7.5306426,46.4676454,0 7.5300418,46.4673793,0 7.5295697,46.467069,0 7.528926,46.4667142,0 7.5285183,46.4665073,0 7.5280033,46.4664926,0 7.5275956,46.46633,0 7.5271021,46.4661822,0 7.5267373,46.4661822,0 7.5254284,46.46599,0 7.5249778,46.4657092,0 7.5243126,46.4652806,0 7.5243555,46.4650737,0 7.5236474,46.4643051,0 7.5229393,46.4638469,0 7.5222956,46.4632853,0 7.522081,46.4630045,0 7.5218664,46.4628419,0 7.5213944,46.4623393,0 7.5208365,46.4623393,0 7.5206863,46.4622802,0 7.5207935,46.4619698,0 7.5201927,46.4617777,0 7.5201284,46.4615116,0 7.5199352,46.4612012,0 7.519785,46.460876,0 7.5191198,46.4602552,0 7.5182186,46.4598413,0 7.5172959,46.4598266,0 7.5165878,46.459664,0 7.5163518,46.4594275,0 7.5160299,46.458851,0 7.515472,46.4580971,0 7.5148069,46.4578606,0 7.5148593,46.4576658,0 + + + + , Summer Walking Path + #style-Summer_Hiking + + relativeToGround + 7.5405449,46.4792038,0 7.5406524,46.4792776,0 7.5407781,46.479334,0 7.5408591,46.4794291,0 7.5409698,46.4795263,0 7.5411333,46.4796215,0 7.5412319,46.4796548,0 7.5413719,46.4796758,0 7.5416056,46.4797181,0 7.5418305,46.4797854,0 7.54201,46.4798595,0 7.5421246,46.4798622,0 7.5422038,46.4797679,0 7.5422344,46.4798088,0 7.5422886,46.4799859,0 7.5423131,46.4800371,0 7.5426664,46.4798968,0 7.5429766,46.4798709,0 7.5432583,46.4799198,0 7.5434381,46.4799008,0 + + + + weltcuptrail + weltcuptrail, Summer Walking Path + #style-Summer_Hiking + + relativeToGround + 7.546366,46.472721,0 7.546582,46.472858,0 7.547273,46.473451,0 7.547355,46.4734738,0 7.547384,46.473463,0 7.547498,46.473357,0 7.547742,46.47342,0 7.547824,46.473408,0 7.547981,46.473591,0 7.547883,46.473721,0 7.547835,46.473855,0 7.5478299,46.473905,0 7.547809,46.473981,0 7.5477828,46.4740075,0 7.547779,46.474138,0 7.547809,46.474276,0 7.5477933,46.4743096,0 + + + + weltcuptrail + weltcuptrail, Summer Walking Path + #style-Summer_Hiking + + relativeToGround + 7.5480239,46.4745659,0 7.548071,46.474601,0 7.548147,46.474528,0 7.548245,46.474637,0 7.5483324,46.4746403,0 7.548341,46.47449,0 7.548407,46.474385,0 7.548466,46.474353,0 7.54865,46.474336,0 7.54875,46.47437,0 7.548891,46.474445,0 7.549013,46.474522,0 7.54923,46.474725,0 7.549299,46.4748896,0 + + + + weltcuptrail + weltcuptrail, Summer Walking Path + #style-Summer_Hiking + + relativeToGround + 7.5493338,46.4748532,0 7.549414,46.47493,0 7.549582,46.475164,0 7.549651,46.475295,0 7.549684,46.475505,0 7.54967,46.475541,0 7.549721,46.475697,0 7.549688,46.475774,0 7.5496779,46.4758944,0 7.549687,46.476009,0 7.549675,46.476086,0 7.549617,46.476191,0 7.549632,46.476283,0 7.549615,46.476398,0 7.549678,46.47656,0 7.549695,46.476669,0 7.5497552,46.4767867,0 7.549748,46.476959,0 + + + + Weltcuptrail + Weltcuptrail, Summer Walking Path + #style-Summer_Hiking + + relativeToGround + 7.549748,46.476959,0 7.549775,46.477008,0 7.549895,46.477112,0 7.550177,46.477211,0 7.55031,46.477289,0 7.55055,46.47749,0 7.55062,46.47756,0 7.550649,46.47761,0 7.5507845,46.4777077,0 7.55114,46.477912,0 7.551194,46.477987,0 7.551282,46.478149,0 7.551346,46.478194,0 7.551429,46.478302,0 7.551526,46.478356,0 7.551621,46.478457,0 7.551717,46.478663,0 7.551707,46.47887,0 7.551658,46.47893,0 7.551561,46.479008,0 7.551522,46.479094,0 7.551569,46.479147,0 7.551878,46.47925,0 7.5518842,46.4794254,0 + + + + , Summer Walking Path + #style-Summer_Hiking + + relativeToGround + 7.551653,46.479461,0 7.5518381,46.4797245,0 7.5520744,46.4800436,0 + + + + weltcuptrail + weltcuptrail, Summer Walking Path + #style-Summer_Hiking + + relativeToGround + 7.5520744,46.4800436,0 7.5523543,46.4803948,0 7.552633,46.480644,0 7.552654,46.480686,0 7.552661,46.480821,0 7.552597,46.480934,0 7.5528719,46.4810715,0 7.553538,46.481365,0 + + + + weltcuptrail + weltcuptrail, Summer Walking Path + #style-Summer_Hiking + + relativeToGround + 7.553538,46.481365,0 7.5536631,46.4813963,0 7.5538861,46.4814296,0 7.5539842,46.4814906,0 7.554022,46.481474,0 7.5540645,46.48153,0 7.5541435,46.48172,0 7.5543894,46.4818397,0 7.554494,46.4819297,0 7.5545233,46.4819795,0 7.5545342,46.4819645,0 7.5545621,46.4819692,0 7.5545859,46.4820172,0 7.554821,46.481838,0 7.554956,46.481708,0 7.555151,46.48159,0 7.555222,46.481636,0 7.55523,46.48166,0 7.5553253,46.4817137,0 7.55537,46.481745,0 7.555477,46.481777,0 7.5556084,46.4817019,0 + + + + , Summer Walking Path + #style-Summer_Hiking + + relativeToGround + 7.5545859,46.4820172,0 7.55461,46.482137,0 7.554617,46.482234,0 7.554605,46.482389,0 7.554629,46.482655,0 7.554708,46.482908,0 7.5547019,46.4829911,0 7.5548169,46.4831683,0 7.55481,46.483357,0 7.5548512,46.4833925,0 + + + + , Summer Walking Path + #style-Summer_Hiking + + relativeToGround + 7.5589672,46.4720202,0 7.5588162,46.471941,0 7.5582203,46.4719026,0 7.5581135,46.4719351,0 7.558022,46.471878,0 7.5578016,46.4719941,0 7.5576517,46.4720351,0 7.5576179,46.4720443,0 7.5575959,46.4718987,0 7.557722,46.471563,0 7.5579085,46.471328,0 7.557727,46.471356,0 7.5578843,46.4712066,0 7.558052,46.470647,0 7.5583051,46.4703056,0 7.5580457,46.4703479,0 7.5579895,46.470307,0 7.55807,46.470201,0 7.557818,46.469769,0 7.557864,46.469491,0 7.5576416,46.4695163,0 7.5576139,46.4694301,0 7.557456,46.469458,0 7.5575474,46.4693574,0 7.5575239,46.4692166,0 7.5573659,46.4692865,0 7.557391,46.469176,0 7.5574551,46.4689968,0 7.5573844,46.4690143,0 7.557431,46.468801,0 7.5573958,46.4687989,0 7.5574087,46.4686203,0 7.557343,46.468344,0 7.5569532,46.4683026,0 7.5566536,46.4684285,0 7.5563305,46.4683727,0 7.5557709,46.4686531,0 7.555443,46.468453,0 7.555369,46.46828,0 7.555448,46.468245,0 7.555318,46.468132,0 7.555263,46.468036,0 7.5552562,46.4679723,0 7.555104,46.467981,0 7.555108,46.467899,0 7.5552802,46.4677086,0 7.555261,46.4676825,0 + + + + , Summer Walking Path + #style-Summer_Hiking + + relativeToGround + 7.5534638,46.4774581,0 7.5534455,46.4773887,0 7.5536469,46.4769512,0 7.5541106,46.4766077,0 7.554105,46.476402,0 7.5542249,46.476267,0 7.554407,46.476171,0 7.554414,46.476057,0 7.554147,46.475643,0 7.55415,46.475587,0 7.554261,46.475443,0 7.554396,46.475107,0 7.554392,46.474963,0 7.55435,46.474903,0 7.5544589,46.4747756,0 7.554432,46.47466,0 7.554649,46.474518,0 7.554669,46.474458,0 7.554782,46.474308,0 7.5551416,46.4740944,0 7.555307,46.473841,0 7.555855,46.47362,0 7.5563039,46.4733363,0 7.5564953,46.4732154,0 7.5571264,46.4724475,0 7.5575742,46.4721367,0 7.5576179,46.4720443,0 + + + + , Summer Walking Path + #style-Summer_Hiking + + relativeToGround + 7.5467453,46.4607696,0 7.54649,46.46086,0 7.546379,46.460852,0 7.546278,46.460823,0 7.545332,46.460219,0 7.5452056,46.4601933,0 7.5450453,46.4602259,0 7.544678,46.460625,0 7.5446722,46.4605383,0 7.5445511,46.460897,0 7.544186,46.460965,0 7.5441541,46.4609626,0 + + + + , Summer Walking Path + #style-Summer_Hiking + + relativeToGround + 7.543932,46.457905,0 7.5439224,46.4576498,0 7.5439863,46.457507,0 7.5443697,46.4571846,0 7.544414,46.457028,0 7.5444229,46.4568876,0 7.5443132,46.4567359,0 7.5441254,46.4565893,0 7.5437854,46.4563725,0 7.543601,46.456324,0 7.5433883,46.456225,0 7.543038,46.45609,0 7.5429552,46.4560635,0 7.5426803,46.4560349,0 7.5424803,46.4559119,0 7.5424073,46.4558342,0 7.5423486,46.4557438,0 7.5422303,46.4556441,0 7.542099,46.4555716,0 7.541851,46.455355,0 7.541218,46.4550142,0 7.5410982,46.454977,0 7.5409976,46.454893,0 7.540705,46.454773,0 7.540596,46.4546219,0 7.5405802,46.4545527,0 7.540341,46.454266,0 7.540211,46.454177,0 7.5399529,46.4540621,0 7.5398294,46.4540301,0 7.5397101,46.4539652,0 7.5395719,46.4538225,0 7.5396175,46.4537215,0 7.5392434,46.4536621,0 7.5390846,46.4536203,0 7.5389972,46.4535609,0 7.5386669,46.4535118,0 7.5385755,46.4534562,0 7.5383003,46.4533948,0 7.537794,46.453134,0 7.5376568,46.4530828,0 7.5373042,46.4529123,0 7.53703,46.452881,0 7.5369754,46.4528616,0 7.5368853,46.4528814,0 7.536805,46.4528509,0 7.5367046,46.452847,0 7.5366355,46.4527915,0 7.5365538,46.4526502,0 7.5364786,46.4525963,0 7.5363413,46.4525663,0 7.53618,46.452558,0 7.535878,46.452489,0 7.5356819,46.4524571,0 7.535526,46.452412,0 7.535344,46.452435,0 7.5352519,46.4524668,0 7.5347041,46.4526012,0 + + + + , Summer Walking Path + #style-Summer_Hiking + + relativeToGround + 7.5441541,46.4609626,0 7.5440914,46.4606083,0 7.5438826,46.4599873,0 7.5438935,46.459889,0 7.5437841,46.4595562,0 7.543707,46.459351,0 7.543697,46.458911,0 7.543855,46.4586,0 7.5438914,46.4582169,0 7.543963,46.457984,0 7.543932,46.457905,0 + + + + , Summer Walking Path + #style-Summer_Hiking + + relativeToGround + 7.5441541,46.4609626,0 7.5443022,46.4612074,0 7.544328,46.461298,0 7.544419,46.461445,0 7.544713,46.461762,0 7.545105,46.462076,0 7.545267,46.462233,0 7.545313,46.462295,0 7.545411,46.462463,0 7.545425,46.462521,0 7.545408,46.462596,0 7.545312,46.462754,0 + + + + , Summer Walking Path + #style-Summer_Hiking + + relativeToGround + 7.545312,46.462754,0 7.545134,46.462514,0 7.5450942,46.4625956,0 7.545048,46.462549,0 7.545021,46.462594,0 7.544907,46.462658,0 7.5448176,46.4625996,0 7.544809,46.462548,0 7.544682,46.462664,0 7.5445887,46.462662,0 7.544541,46.462678,0 7.5445217,46.4627506,0 + + + + , Summer Walking Path + #style-Summer_Hiking + + relativeToGround + 7.5445217,46.4627506,0 7.544556,46.462863,0 7.544642,46.462973,0 7.544646,46.463071,0 7.544535,46.463181,0 7.5444536,46.4632176,0 7.544159,46.463337,0 7.544005,46.463444,0 7.543837,46.463533,0 7.543703,46.463733,0 7.543456,46.463916,0 7.54331,46.464225,0 7.543007,46.464459,0 7.542768,46.464717,0 7.542685,46.464932,0 7.54251,46.465228,0 7.542382,46.46565,0 7.542912,46.466323,0 7.543704,46.466981,0 7.543754,46.467237,0 7.543974,46.46768,0 7.543981,46.467838,0 7.543918,46.467971,0 7.544025,46.468221,0 7.544473,46.468587,0 7.544433,46.468807,0 7.5444844,46.4688834,0 7.544452,46.468936,0 7.5444486,46.4690083,0 7.544404,46.469095,0 7.544283,46.4691718,0 7.544292,46.469265,0 7.5442081,46.4693977,0 7.544297,46.4696186,0 7.544416,46.469775,0 7.5445187,46.4698185,0 7.544622,46.46995,0 7.544745,46.47001,0 7.54538,46.470662,0 7.546082,46.471594,0 7.5460595,46.4716439,0 7.546271,46.471879,0 7.546345,46.472015,0 7.546457,46.472109,0 7.5465251,46.472387,0 + + + + , Summer Walking Path + #style-Summer_Hiking + + relativeToGround + 7.5882589,46.4861244,0 7.5885014,46.4860791,0 7.5886623,46.4860126,0 7.5888769,46.4859609,0 7.5890164,46.4859609,0 7.5890486,46.4860644,0 7.589349,46.4861973,0 7.5894348,46.4862269,0 7.5895528,46.4862121,0 7.5898425,46.4860644,0 7.5902395,46.4860791,0 7.5903575,46.486057,0 7.5905292,46.486057,0 7.5905935,46.4861382,0 7.5905721,46.486286,0 7.5904004,46.4863746,0 7.5902609,46.4864928,0 7.5901966,46.4866258,0 7.5903146,46.4867735,0 7.5904862,46.4868695,0 7.590615,46.4868474,0 7.5907652,46.4867735,0 7.5909583,46.4866923,0 7.5911836,46.486611,0 7.5912587,46.4869139,0 7.5912821,46.4869728,0 7.5913231,46.4870764,0 7.5914948,46.4870173,0 7.5916986,46.4868991,0 7.5918939,46.4869026,0 7.592117,46.4869065,0 + + + + , Summer Walking Path + #style-Summer_Hiking + + relativeToGround + 7.592399,46.488507,0 7.5926427,46.4885981,0 7.5928466,46.4886055,0 7.5930183,46.4886793,0 7.5933508,46.4886202,0 7.5935225,46.4886276,0 7.5935547,46.4886646,0 7.5936727,46.4886572,0 7.5939302,46.4887901,0 7.5941448,46.4887384,0 7.5943701,46.4887089,0 7.5945847,46.4889231,0 7.5949924,46.4890561,0 7.5952391,46.4890191,0 7.5954108,46.4889896,0 7.5956146,46.48896,0 7.5957005,46.4888345,0 7.5958292,46.488731,0 7.5959365,46.4885981,0 7.5960104,46.4885348,0 + + + + , Summer Walking Path + #style-Summer_Hiking + + relativeToGround + 7.624132,46.520973,0 7.6238068,46.5208419,0 7.6234849,46.5205687,0 7.623163,46.5203989,0 7.6226695,46.5204358,0 7.62253,46.5204727,0 7.6223584,46.5204248,0 7.6221062,46.5202107,0 7.6217951,46.5200667,0 7.6214893,46.5199338,0 7.6211728,46.5198046,0 7.6209046,46.5197825,0 7.6205506,46.5197714,0 7.6202448,46.5197419,0 7.6199712,46.519753,0 7.6196923,46.5198268,0 7.6194026,46.5199744,0 7.6190968,46.5200556,0 7.6188232,46.520063,0 7.6186247,46.520004,0 7.6183672,46.5199855,0 7.618099,46.5200224,0 7.6179649,46.5200003,0 7.6177235,46.5198711,0 7.6174768,46.5197566,0 7.6172836,46.519716,0 7.6169779,46.5196717,0 7.6167794,46.5196127,0 7.6166345,46.5194909,0 7.6165219,46.5192731,0 7.6164522,46.5189815,0 7.6163931,46.518568,0 7.616377,46.5183429,0 7.6163019,46.5181103,0 7.6161088,46.5178002,0 7.6159479,46.5175234,0 7.6156797,46.5173277,0 7.6154919,46.5172022,0 7.6154651,46.5170878,0 7.6154651,46.517014,0 7.6153959,46.5168917,0 7.6151502,46.5168899,0 7.6148965,46.5169087,0 7.6146497,46.5168515,0 7.6145317,46.516774,0 7.6143708,46.5164713,0 7.6141455,46.5162314,0 7.613829,46.5159508,0 7.6133569,46.5157256,0 7.6131048,46.5156149,0 7.612917,46.5155115,0 7.6127453,46.5154524,0 7.6126273,46.5154487,0 7.6122518,46.5154487,0 7.6118602,46.5153823,0 7.6114311,46.5153528,0 7.6110234,46.5153269,0 7.6109214,46.5153454,0 7.6108034,46.5154783,0 7.6106586,46.5154894,0 7.6104869,46.5154377,0 7.6103206,46.515338,0 7.610267,46.5152236,0 7.6102992,46.5150907,0 7.6104601,46.5147547,0 7.6106103,46.5144003,0 7.6106693,46.5141862,0 7.610723,46.5140681,0 7.610841,46.5139352,0 7.6109429,46.5137063,0 7.6110638,46.5135387,0 + + + + , Summer Walking Path + #style-Summer_Hiking + + relativeToGround + 7.609237,46.5005217,0 7.6090546,46.5002927,0 7.608883,46.500049,0 7.6087757,46.4998792,0 7.6086147,46.4998127,0 7.6079495,46.4996945,0 7.607574,46.4996059,0 7.6074453,46.4994951,0 7.6073487,46.4993326,0 7.6071127,46.4991628,0 7.6068552,46.499052,0 7.6067694,46.4989338,0 7.6067265,46.4985793,0 7.6067694,46.4982987,0 7.6067694,46.4981805,0 7.6066835,46.4980476,0 7.6064368,46.4979811,0 7.6060827,46.4979368,0 7.6058038,46.4979442,0 7.6054926,46.4978999,0 7.6052566,46.4978334,0 7.6050098,46.4978186,0 7.6047202,46.497826,0 7.6045778,46.4977876,0 7.6044734,46.4977595,0 7.604173,46.4976931,0 7.603937,46.497634,0 7.6037868,46.4975454,0 7.6036473,46.4974937,0 7.6035293,46.4973533,0 7.6033576,46.4972499,0 7.6031323,46.4971761,0 7.6028963,46.4971244,0 7.6027353,46.4970284,0 7.6027031,46.4969397,0 7.6025228,46.4967002,0 7.6022815,46.4966125,0 7.6021656,46.4965905,0 7.6020622,46.4965404,0 7.6017895,46.4965373,0 7.6015231,46.4965373,0 7.6013884,46.4965122,0 7.6012693,46.4965561,0 7.6008681,46.4964997,0 7.6004513,46.4963524,0 7.6001975,46.4962991,0 7.5998966,46.4962396,0 7.5995268,46.4961017,0 7.5993169,46.4960296,0 7.5989376,46.496086,0 7.5986368,46.4959669,0 7.5982795,46.4960264,0 7.5979599,46.4960452,0 7.5976026,46.4961361,0 7.5973174,46.4962333,0 7.5971733,46.496227,0 7.5971513,46.4960891,0 7.5970416,46.4959387,0 7.596816,46.4958509,0 7.5968442,46.4957225,0 7.5968849,46.4957005,0 7.5969696,46.4958353,0 7.5970573,46.4957131,0 7.5972328,46.4955407,0 7.5972516,46.4954247,0 7.5974898,46.4953652,0 7.5978314,46.4951615,0 7.5981354,46.4951239,0 7.5982607,46.495127,0 7.5983767,46.4950299,0 7.5988938,46.4949108,0 7.5991915,46.4947384,0 7.5994359,46.4947321,0 7.599624,46.4947321,0 7.5998684,46.4945378,0 7.5997681,46.4942244,0 7.5995237,46.4939424,0 7.599367,46.4938891,0 7.5991508,46.4939111,0 7.5990442,46.4937136,0 7.5990881,46.4935162,0 7.5990317,46.4933814,0 7.598853,46.4932811,0 7.5985396,46.4930116,0 7.5979849,46.4925979,0 7.5971767,46.4928758,0 + + + + , Summer Walking Path + #style-Summer_Hiking + + relativeToGround + 7.5557343,46.4981656,0 7.5557397,46.4982247,0 7.55567,46.4982801,0 7.555568,46.4983096,0 7.5554661,46.4983761,0 7.5554232,46.4984906,0 7.5553964,46.4986457,0 7.5553857,46.4988008,0 7.5554286,46.4989522,0 7.5554232,46.4990888,0 7.5554822,46.499159,0 7.5556753,46.499303,0 7.5558845,46.4995024,0 7.5559489,46.4995356,0 7.5560187,46.4997609,0 7.5559489,46.4997978,0 7.5560938,46.4999566,0 7.5562279,46.5000046,0 7.5562118,46.500108,0 7.5560669,46.500167,0 7.5556968,46.5001449,0 7.5555037,46.5000932,0 7.5552462,46.500108,0 7.5550048,46.5000304,0 7.554876,46.4999123,0 7.5546346,46.4999972,0 7.5545649,46.500156,0 7.5546829,46.5005068,0 7.5547473,46.5005622,0 7.5545005,46.5007431,0 7.5545381,46.5009462,0 7.5548868,46.5011013,0 7.5549941,46.5013228,0 + + + + Via Ferrata Dauberhorn + Via Ferrata Dauberhorn, Summer Walking Path + #style-Summer_Hiking + + relativeToGround + 7.615535,46.3933165,0 7.6153571,46.3931316,0 7.6148421,46.392954,0 7.6139623,46.39288,0 7.6134473,46.3929836,0 7.6128036,46.3930724,0 7.6122672,46.3931316,0 7.6120311,46.3928356,0 7.6117736,46.3925988,0 7.6112801,46.3924212,0 7.6111084,46.3922288,0 7.611087,46.3919624,0 7.6113016,46.391696,0 7.6112801,46.3913112,0 7.6113445,46.390956,0 7.6112586,46.39066,0 7.6112801,46.3902012,0 7.6111728,46.389846,0 7.6108295,46.38955,0 7.610572,46.3892244,0 7.610572,46.3888248,0 7.6105398,46.3886545,0 7.6103145,46.3883363,0 7.6101858,46.3880403,0 7.6097459,46.3876851,0 7.6094884,46.3875667,0 7.6091558,46.3875667,0 7.6088339,46.3874705,0 7.6088125,46.3873743,0 7.609188,46.3874261,0 7.6093382,46.3874557,0 7.6095742,46.3874335,0 7.6099497,46.3874853,0 7.6099605,46.3876185,0 7.6099712,46.3881735,0 7.6098854,46.3883659,0 7.6095528,46.3885953,0 7.6094777,46.3884399,0 7.6094884,46.3880847,0 7.6094884,46.3879071,0 7.6096279,46.3873151,0 7.6099712,46.3873077,0 7.6101428,46.3876925,0 7.6101321,46.3885065,0 7.6099175,46.3892762,0 7.6095742,46.3900384,0 7.6088125,46.3906748,0 7.6087481,46.3897424,0 7.6089198,46.3888692,0 7.6091129,46.3883511,0 7.609542,46.3869968,0 7.609424,46.3867526,0 7.6091021,46.38676,0 7.6085121,46.3868858,0 7.6081687,46.3872855,0 7.6079327,46.3880329,0 7.6077289,46.3895722,0 7.6074821,46.3904454,0 7.6072139,46.3912964,0 7.606538,46.390068,0 7.6069393,46.3852733,0 7.6064139,46.3847204,0 7.605748,46.3839582,0 7.6053188,46.3836037,0 7.6041132,46.383141,0 7.6048643,46.3836591,0 7.6043278,46.3840735,0 7.6056797,46.3849913,0 7.6043064,46.3843844,0 + + + + Via Ferrata Dauberhorn + Via Ferrata Dauberhorn, Summer Walking Path + #style-Summer_Hiking + + relativeToGround + 7.6043064,46.3843844,0 7.6048126,46.3847763,0 7.6042547,46.3845839,0 7.6050486,46.3850872,0 7.6058425,46.3852944,0 7.6066794,46.3852944,0 7.6065292,46.3857976,0 7.6058425,46.3860789,0 7.6052846,46.3862713,0 7.6052632,46.3864785,0 7.6045551,46.3867005,0 7.6042976,46.3868781,0 7.6040186,46.3870409,0 7.6034393,46.3870853,0 7.6030959,46.3870705,0 7.6028384,46.3874554,0 7.6026829,46.3875479,0 7.6022051,46.3877699,0 7.6020231,46.3879142,0 + + + + Lämmernweg süd + Lämmernweg süd, Summer Walking Path + #style-Summer_Hiking + + relativeToGround + 7.5773607,46.3980323,0 7.5767505,46.3977455,0 7.5767827,46.3975531,0 7.5771046,46.3971092,0 7.5777805,46.3966134,0 7.578671,46.3962953,0 7.5799799,46.3960807,0 7.5813317,46.3957403,0 7.5844109,46.3950966,0 7.5849366,46.394993,0 7.5874471,46.3949782,0 7.5887775,46.3952742,0 7.5891478,46.3953803,0 7.5896036,46.3955109,0 7.5912022,46.3955923,0 7.5928438,46.3956663,0 7.5953221,46.3960955,0 7.5978327,46.3964729,0 + + + + , Summer Walking Path + #style-Summer_Hiking + + relativeToGround + 7.4394297,46.5665636,0 7.4395718,46.5667101,0 7.4396474,46.5668294,0 7.4396594,46.5670283,0 7.43954,46.5671159,0 7.4394047,46.5671875,0 7.4392894,46.5672074,0 7.4391501,46.5671954,0 7.4389114,46.5673228,0 7.4388159,46.5673267,0 7.4387125,46.567275,0 7.4385454,46.5672352,0 7.4383464,46.5672551,0 7.4380719,46.5673307,0 7.4378372,46.5674421,0 7.4374911,46.5675217,0 7.4371967,46.5675575,0 7.4370017,46.5675336,0 7.4367789,46.5676848,0 7.4365203,46.5677087,0 7.4361185,46.5676768,0 7.4359076,46.567832,0 7.435649,46.5677922,0 7.4354302,46.5678758,0 7.4352074,46.5680031,0 7.4350443,46.5679633,0 7.4344435,46.5681304,0 7.4341173,46.5683413,0 7.4341213,46.5684407,0 7.4340775,46.5686038,0 7.433791,46.5688664,0 7.4334568,46.5690216,0 7.4333256,46.5691887,0 7.4332579,46.5693836,0 7.4332221,46.5695706,0 7.4329834,46.5699486,0 7.4325935,46.5701714,0 7.4324224,46.57043,0 7.4323389,46.5706607,0 7.432323,46.5708119,0 7.4320246,46.5709154,0 7.4319888,46.5710069,0 7.4320485,46.5712058,0 7.4320087,46.5712456,0 7.431384,46.5713013,0 7.4307395,46.5714246,0 7.4300552,46.5712933,0 7.4297688,46.5712615,0 7.4294624,46.5712973,0 7.4290526,46.5715161,0 7.4283604,46.5715877,0 7.4282728,46.5715479,0 7.4280023,46.5715798,0 7.4278113,46.5716554,0 7.4274175,46.5716713,0 7.4271111,46.5717349,0 7.4268724,46.5719498,0 7.4266138,46.5720055,0 7.4264746,46.5720055,0 7.4259096,46.5722163,0 7.4258221,46.5722044,0 7.4256749,46.5721049,0 7.425472,46.5719975,0 7.4253486,46.5719975,0 7.4250622,46.5720612,0 7.4247757,46.5721049,0 7.4246325,46.5721686,0 7.4244216,46.5722124,0 7.4240874,46.5722402,0 7.4239562,46.5722879,0 7.4238408,46.5724312,0 7.4236856,46.5724789,0 7.4235185,46.5724471,0 7.4231963,46.5723635,0 7.4231008,46.5724988,0 7.4231286,46.5728648,0 7.4230928,46.5729404,0 7.4230212,46.5729802,0 7.4229257,46.5729524,0 7.4227706,46.5728211,0 7.4226114,46.5727296,0 7.4224284,46.5726341,0 7.4222096,46.572471,0 7.4215889,46.5722482,0 7.4215452,46.5723277,0 7.4215929,46.5723834,0 7.4215571,46.5727773,0 7.4214815,46.5728728,0 7.4213343,46.5729484,0 7.4211274,46.5729325,0 7.4209086,46.5729245,0 7.420646,46.5727892,0 7.420467,46.5727057,0 7.4202283,46.5726261,0 7.4197151,46.5725465,0 7.419548,46.5725028,0 7.419353,46.5725426,0 7.4192615,46.5724908,0 7.4188477,46.5723596,0 7.4185573,46.5721845,0 7.4179088,46.5719179,0 7.4174234,46.5718185,0 7.4172126,46.571727,0 7.416954,46.5717111,0 7.4165123,46.5716076,0 7.4162418,46.5714405,0 7.4161264,46.5713928,0 7.4156689,46.5715042,0 7.4153228,46.5715559,0 7.4149886,46.571528,0 7.4146743,46.571544,0 7.4142366,46.5714684,0 7.4134688,46.5716116,0 7.4130749,46.5717031,0 7.4125378,46.5717707,0 7.4118853,46.5718145,0 7.4110339,46.5716872,0 7.4109225,46.5716315,0 7.4106321,46.5716713,0 7.4103218,46.5716753,0 7.4097767,46.5716156,0 7.4092555,46.5715241,0 7.408607,46.5713689,0 7.408249,46.5712655,0 7.4079745,46.5712177,0 7.4076681,46.5710307,0 7.4073777,46.5708955,0 7.4071628,46.5707363,0 7.4070594,46.5707562,0 7.4071589,46.5708517,0 7.407314,46.5709711,0 7.4075209,46.5712575,0 7.407688,46.5714286,0 7.4078829,46.5716434,0 7.4081057,46.5718543,0 7.4081654,46.5720254,0 7.4081376,46.5721049,0 7.4079585,46.5719935,0 7.407684,46.5718782,0 7.4070793,46.5717906,0 7.4064666,46.5714843,0 7.406021,46.5713172,0 7.4052651,46.5711382,0 7.404915,46.5710228,0 7.4045649,46.5709432,0 7.4043023,46.5708437,0 7.4040039,46.5706846,0 7.4038567,46.5706528,0 7.4035344,46.5704578,0 7.4032838,46.5704459,0 7.4031525,46.5702549,0 7.4031008,46.5701873,0 7.4028024,46.5699048,0 7.4027268,46.5698969,0 7.4023329,46.5696462,0 7.4020425,46.5695348,0 7.4018197,46.5694871,0 7.401569,46.5693279,0 7.4014815,46.56932,0 7.4013423,46.5692404,0 7.4011195,46.5689937,0 7.4010399,46.5689977,0 7.4007733,46.5687789,0 7.4006858,46.5686357,0 7.4006062,46.5684288,0 7.4004391,46.5683094,0 7.4001487,46.5681344,0 7.3999975,46.5679593,0 7.3998662,46.5678758,0 7.3997509,46.5677524,0 7.3995639,46.567641,0 7.3993451,46.5674302,0 7.3990148,46.5673029,0 7.3984857,46.5671079,0 7.3981833,46.5669528,0 7.3980083,46.5668851,0 7.3978571,46.5668016,0 7.3973797,46.5667817,0 7.3971051,46.5666544,0 7.3968147,46.5664793,0 7.3964208,46.566344,0 7.3961543,46.5663241,0 7.3961145,46.5662764,0 7.3956251,46.5661809,0 7.3953745,46.5661093,0 7.3949528,46.5660536,0 7.3946385,46.5659939,0 7.3942446,46.5658825,0 7.3938348,46.565787,0 7.3933614,46.5656876,0 7.3930789,46.5655921,0 7.3927089,46.5654767,0 7.3922474,46.5653932,0 7.3918774,46.5653454,0 7.3916745,46.565238,0 7.3916387,46.5650073,0 7.3913045,46.5648402,0 7.3911772,46.5648521,0 7.3907833,46.564681,0 7.3905883,46.5646651,0 7.3906082,46.5648123,0 7.3909146,46.565047,0 7.391022,46.5653733,0 7.3909544,46.5655563,0 7.3911175,46.5658229,0 7.3915392,46.5658865,0 7.3919211,46.5661133,0 7.3919092,46.5663043,0 7.3917182,46.5663281,0 7.3913244,46.5662167,0 7.3909026,46.5661929,0 7.3904849,46.5662525,0 7.3901452,46.5663573,0 + + + + , Summer Walking Path + #style-Summer_Hiking + + relativeToGround + 7.4920336,46.5215194,0 7.4920087,46.5216089,0 7.4916557,46.5219819,0 7.4912678,46.5220963,0 7.491044,46.5220913,0 7.4906312,46.522335,0 7.4903278,46.5224941,0 7.4898653,46.5229069,0 7.4892835,46.5233495,0 7.4883087,46.5239214,0 7.4876324,46.5242944,0 7.4875777,46.5244237,0 7.4875578,46.5246624,0 7.4874981,46.5247967,0 7.4872644,46.524931,0 7.4871052,46.524921,0 7.4868019,46.5248116,0 7.4862598,46.524747,0 7.4861802,46.5247768,0 7.4861454,46.524926,0 7.4861554,46.5253239,0 7.4860261,46.5256571,0 7.4859564,46.5257714,0 7.4858968,46.5258112,0 7.485668,46.525851,0 7.4854392,46.5258361,0 7.4852154,46.5258013,0 7.4850463,46.5258063,0 7.4848424,46.5258958,0 7.4844297,46.5260201,0 7.484191,46.5260002,0 7.4837782,46.5262041,0 7.483445,46.5262787,0 7.4831466,46.5262091,0 7.4827189,46.5262588,0 7.4817392,46.5265423,0 7.4814607,46.5266964,0 7.4812469,46.5268854,0 7.4807297,46.5270744,0 7.480302,46.5271788,0 7.4800981,46.5273479,0 7.479556,46.5275717,0 7.4792775,46.5276612,0 7.4791482,46.5277607,0 7.4786608,46.5278353,0 7.4783127,46.5279546,0 7.4781536,46.5281536,0 7.4776612,46.5283575,0 7.4771142,46.5283973,0 7.4767561,46.5285116,0 7.476224,46.528626,0 7.4753935,46.5286807,0 7.4750951,46.5287056,0 7.4749906,46.52882,0 7.4750454,46.5289642,0 7.4750006,46.5291482,0 7.4748713,46.529362,0 7.4747171,46.5294814,0 7.4744436,46.5296008,0 7.4740706,46.5297301,0 7.4737921,46.5298444,0 7.4731953,46.5298942,0 7.4731207,46.5298842,0 7.472882,46.5300334,0 7.4728025,46.5302025,0 7.472703,46.5303169,0 7.4719023,46.5305705,0 7.4717432,46.5306998,0 7.4716537,46.5310579,0 7.4713603,46.5315602,0 7.4712409,46.5316696,0 7.4711116,46.5316994,0 7.4711912,46.531784,0 7.4711812,46.5318834,0 7.4712359,46.5319481,0 7.4713652,46.531968,0 7.471589,46.5321122,0 7.471599,46.5321768,0 7.4715642,46.5323111,0 7.4716338,46.5325001,0 7.4716935,46.5325299,0 7.4716785,46.5326095,0 7.4715741,46.5327189,0 7.4715393,46.5328482,0 7.4715244,46.5329676,0 7.4715642,46.5331217,0 7.4716835,46.5332908,0 7.4716933,46.5334754,0 + + + + , Summer Walking Path + #style-Summer_Hiking + + relativeToGround + 7.4751759,46.5539538,0 7.475336,46.5540147,0 7.4755769,46.5537815,0 7.4758178,46.5538048,0 7.4759654,46.5540224,0 7.4758722,46.5540768,0 7.4759499,46.5545431,0 7.4757789,46.5555377,0 7.4757945,46.5557786,0 7.4757246,46.5560117,0 7.4758023,46.5561516,0 7.4757028,46.5567762,0 7.4756876,46.5570949,0 7.4758849,46.5573377,0 7.475976,46.5578234,0 7.4759608,46.5582331,0 7.4760974,46.5586126,0 7.4763554,46.5587491,0 7.4763554,46.5589464,0 7.4766134,46.5592803,0 7.4772205,46.559599,0 7.4774633,46.5598571,0 7.4778882,46.5599785,0 7.47804,46.5601606,0 7.4781007,46.5604489,0 7.4784498,46.5608132,0 7.4787685,46.5611167,0 7.4793452,46.5616479,0 7.4800282,46.5620425,0 7.4803621,46.5621639,0 7.4807111,46.562513,0 7.4810754,46.5630442,0 7.48147,46.5633477,0 7.4816369,46.5636816,0 7.4821226,46.5641673,0 7.4826386,46.5644556,0 7.483276,46.5651841,0 7.4837465,46.5655939,0 7.4843839,46.5659885,0 7.4848392,46.5666107,0 7.4854159,46.567066,0 7.4855981,46.5674303,0 7.4862658,46.5682195,0 7.4866453,46.56869,0 7.4867515,46.5689176,0 7.4869488,46.569206,0 7.4868881,46.5694792,0 7.4866453,46.5697675,0 7.4867667,46.5700407,0 7.4867375,46.5701979,0 7.4866159,46.5701456,0 + + + + , Summer Walking Path + #style-Summer_Hiking + + relativeToGround + 7.4528183,46.5206213,0 7.4533716,46.5207021,0 7.4542419,46.5206399,0 7.4545279,46.520584,0 7.4548014,46.5206151,0 7.4551371,46.5207394,0 7.4557836,46.5207891,0 7.4566787,46.5207829,0 7.4572817,46.5208202,0 7.4578536,46.5207954,0 7.4583945,46.5206897,0 7.4586369,46.5206772,0 7.4588296,46.5207145,0 7.4591964,46.5206959,0 7.4596502,46.5206586,0 7.4601413,46.5207394,0 7.4604024,46.5207208,0 7.4610924,46.5204721,0 7.4613908,46.5203105,0 7.4618881,46.5202421,0 7.4627025,46.5198069,0 7.4632174,46.5198895,0 7.4636909,46.5198059,0 7.4639455,46.5197423,0 7.4643274,46.5195314,0 7.4645502,46.5194877,0 7.4647293,46.5193643,0 7.4653181,46.519245,0 7.4656483,46.5191933,0 7.4657677,46.519249,0 7.4660143,46.5192211,0 7.4662252,46.5191535,0 7.4665793,46.5191336,0 7.4671243,46.5190222,0 7.4672715,46.5190659,0 7.4677728,46.5191376,0 7.4680951,46.519233,0 7.4684969,46.5192927,0 7.4687317,46.5193484,0 7.469046,46.5193962,0 7.4693443,46.5193484,0 7.4697104,46.5193604,0 + + + + , Summer Walking Path + #style-Summer_Hiking + + relativeToGround + 7.5644603,46.4461059,0 7.5645107,46.4465933,0 7.5642589,46.446939,0 7.5639358,46.4470668,0 7.5637291,46.4472922,0 7.56347,46.4474613,0 7.5637404,46.4476568,0 7.5639733,46.447871,0 7.5642364,46.44801,0 7.5643529,46.4480589,0 7.5643905,46.4482881,0 7.5643341,46.4484234,0 7.5645483,46.448709,0 7.5648114,46.4488029,0 7.5651457,46.4489852,0 + + + + , Summer Walking Path + #style-Summer_Hiking + + relativeToGround + 7.5614623,46.4593025,0 7.5611273,46.4593835,0 7.560775,46.4592943,0 7.5603616,46.4591768,0 7.5601173,46.4593272,0 + + + + , Summer Walking Path + #style-Summer_Hiking + + relativeToGround + 7.6045778,46.4977876,0 7.6046204,46.4977082,0 7.6049205,46.4975268,0 7.6050087,46.4974899,0 7.6051066,46.4975268,0 7.6050665,46.4973744,0 7.6049991,46.4971754,0 7.6049301,46.4970679,0 7.6047729,46.4969989,0 7.6044584,46.4969508,0 7.6042706,46.4969203,0 7.6042706,46.4967968,0 7.6044664,46.4966941,0 7.6044532,46.4966183,0 7.604413,46.4964618,0 7.6044291,46.4962673,0 7.6043749,46.4958962,0 7.6043509,46.4956034,0 7.6043288,46.4952464,0 7.6041383,46.4949355,0 7.6040039,46.4946908,0 7.6038595,46.4943719,0 7.603683,46.4940329,0 7.6035305,46.4937601,0 7.6033761,46.4934713,0 7.6033059,46.4931384,0 7.6030772,46.493014,0 7.6028792,46.4927175,0 7.602652,46.4923963,0 7.6025894,46.4922122,0 7.60237,46.4919497,0 7.6021075,46.4915932,0 7.6019273,46.4914444,0 7.6019195,46.4913464,0 7.6017354,46.4910056,0 7.6014985,46.4907235,0 7.6012378,46.4904267,0 7.6011402,46.490361,0 + + + + , Summer Walking Path + #style-Summer_Hiking + + relativeToGround + 7.561897,46.4519024,0 7.562231,46.4519425,0 7.5622941,46.4520086,0 7.5625157,46.4520579,0 7.5627528,46.4519979,0 + + + + , Summer Walking Path + #style-Summer_Hiking + + relativeToGround + 7.560335,46.449238,0 7.5600857,46.4492598,0 7.5598715,46.449117,0 7.5596084,46.4490493,0 7.5593942,46.4489366,0 7.5593266,46.4488765,0 7.5591725,46.4486059,0 7.5593792,46.4484631,0 7.5597023,46.4483128,0 7.5599917,46.4481512,0 7.5604201,46.4480836,0 7.5608598,46.4481813,0 7.560985,46.448126,0 + + + + , Summer Walking Path + #style-Summer_Hiking + + relativeToGround + 7.6042768,46.486003,0 7.6044596,46.4859007,0 7.6047448,46.4859446,0 7.6050206,46.4858788,0 7.6052901,46.4858161,0 7.6055001,46.485719,0 7.605633,46.4855823,0 7.6054326,46.4855797,0 7.6054207,46.4855607,0 7.6056389,46.4855403,0 7.6056593,46.4855377,0 7.6058197,46.4854916,0 7.6059853,46.4853622,0 7.6061485,46.4851949,0 7.6063972,46.4851147,0 7.6065223,46.4850104,0 7.6065753,46.4848692,0 7.606816,46.4848274,0 7.6069893,46.4848066,0 7.6069796,46.4846285,0 7.606771,46.4844584,0 7.6065801,46.4842642,0 7.6063843,46.484115,0 7.606256,46.4839337,0 7.6060855,46.4838297,0 7.6060184,46.4837626,0 7.6060141,46.4837445,0 7.6059921,46.4837075,0 7.6058481,46.4835616,0 7.6058982,46.4834733,0 7.6056119,46.4834351,0 7.6054002,46.4833029,0 7.6053025,46.4831814,0 7.6052052,46.4830648,0 7.6050153,46.4830218,0 7.6047188,46.4829161,0 7.6046228,46.4829174,0 7.6045128,46.4828032,0 7.6044513,46.4827961,0 7.6043955,46.4827634,0 7.6044703,46.4828142,0 7.6045465,46.482924,0 7.6044778,46.4829415,0 7.6043781,46.4828328,0 7.6043175,46.4827661,0 7.6042463,46.4827656,0 7.6041887,46.4826955,0 7.6040464,46.4825943,0 7.6040113,46.4825787,0 7.6039903,46.4825597,0 7.6038715,46.4825311,0 7.6038475,46.482703,0 7.6039627,46.4827992,0 7.6040605,46.4830684,0 7.6041515,46.4832651,0 7.6041476,46.4833395,0 7.6040977,46.483453,0 7.6039332,46.4834921,0 7.6039313,46.4834285,0 7.6040497,46.4833297,0 7.6040067,46.4832338,0 7.6039313,46.4831124,0 7.6039078,46.4830821,0 7.603763,46.4829225,0 7.6036245,46.4827777,0 7.6037187,46.4825648,0 7.6038679,46.4823875,0 7.6037994,46.4823287,0 7.6038178,46.4822847,0 7.6039364,46.4821673,0 7.6037835,46.4818871,0 7.6037431,46.4817036,0 7.603841,46.4815727,0 7.6038643,46.4815482,0 7.6039425,46.4814369,0 7.6038936,46.4812669,0 7.6039181,46.4811323,0 7.6038031,46.4809953,0 7.6036538,46.4807665,0 7.6036844,46.4806895,0 7.6037015,46.4804925,0 7.6038973,46.4803298,0 7.6039291,46.4800937,0 7.6038899,46.4799799,0 7.603956,46.479898,0 7.6040637,46.4797976,0 7.6042545,46.4797316,0 7.6041982,46.4795677,0 7.6042007,46.4795187,0 7.6041383,46.4792924,0 7.6042166,46.4790942,0 7.6045198,46.4787531,0 7.6047549,46.4784167,0 7.6049491,46.4781901,0 7.6050274,46.4781117,0 7.6049512,46.4779239,0 7.6049965,46.4777746,0 7.6050332,46.4775887,0 7.6050863,46.477561,0 7.60505,46.4773811,0 7.6049021,46.4772892,0 7.6047002,46.4773577,0 7.6047076,46.4775228,0 7.60471,46.4776452,0 7.6046109,46.4778287,0 7.6045338,46.4776733,0 7.6044727,46.4775265,0 7.6045718,46.477392,0 7.6046623,46.4773014,0 7.6049033,46.4771399,0 7.605214,46.4770372,0 7.6053486,46.4770335,0 7.6053364,46.4767656,0 7.6050538,46.4765845,0 7.6047027,46.4765907,0 7.6043295,46.4765246,0 7.6042133,46.4764573,0 7.6040066,46.4762726,0 7.6039821,46.4761698,0 7.6040629,46.4758762,0 7.6039234,46.4757062,0 7.6037375,46.475568,0 7.6034536,46.4754444,0 7.6030976,46.4754884,0 7.6028175,46.4755043,0 7.6026658,46.4754676,0 7.602393,46.4754187,0 7.6020468,46.4753686,0 7.601785,46.4753172,0 7.6017104,46.4752792,0 7.6017006,46.4750994,0 7.6018303,46.4748584,0 7.6018621,46.4746162,0 7.601703,46.4745061,0 7.60144,46.4744156,0 7.601248,46.4743128,0 7.6008565,46.47427,0 7.6007966,46.4742431,0 7.6007293,46.4742162,0 7.6006033,46.4741648,0 7.6005372,46.47427,0 7.6003415,46.4743948,0 7.5999989,46.474544,0 7.5998839,46.4746052,0 7.5997023,46.4745672,0 7.5996295,46.4745073,0 7.5995414,46.4745061,0 + + + + , Summer Walking Path + #style-Summer_Hiking + + relativeToGround + 7.6073503,46.5155013,0 7.6071538,46.515465,0 7.606817,46.5154259,0 7.6065284,46.5153838,0 7.6061659,46.5153941,0 7.60594,46.5155194,0 7.6059144,46.5154506,0 7.6057305,46.5154896,0 7.6054882,46.5154968,0 7.6052941,46.5154126,0 7.6049911,46.5153746,0 7.6047252,46.5152986,0 7.6044397,46.5153243,0 7.6041881,46.5153089,0 7.603904,46.5152803,0 + + + + , Summer Walking Path + #style-Summer_Hiking + + relativeToGround + 7.5109074,46.4975939,0 7.5106958,46.4976333,0 7.5103212,46.4976753,0 7.510222,46.4976293,0 7.5098982,46.4976558,0 7.5096505,46.4976143,0 7.5095384,46.4976181,0 7.5091324,46.4975663,0 7.5088809,46.497604,0 7.5085719,46.4976313,0 7.5082007,46.4977481,0 7.5079323,46.4977971,0 7.5077203,46.4979365,0 7.5074575,46.4980448,0 7.507172,46.4981654,0 7.5070421,46.498269,0 7.5068461,46.4983538,0 7.5066002,46.4983557,0 7.5064655,46.4984311,0 7.5062762,46.498416,0 7.5062112,46.4984424,0 7.5060416,46.4984716,0 7.5059521,46.4985469,0 7.5057421,46.4986138,0 7.5055384,46.4987028,0 7.5053641,46.4987009,0 7.505203,46.4987386,0 7.5050561,46.4986877,0 7.5049346,46.4985756,0 7.5048093,46.4985426,0 7.5046887,46.4987404,0 7.5046925,46.4988422,0 7.5046143,46.4989044,0 7.5045493,46.4988328,0 7.504423,46.4987762,0 7.5041934,46.4987215,0 7.504058,46.4986995,0 7.5040786,46.4985685,0 7.5039829,46.4985596,0 7.5037725,46.4985479,0 7.5036621,46.4985258,0 7.5035502,46.4985199,0 7.5034943,46.4985184,0 7.5031999,46.4985287,0 7.5030115,46.4984581,0 7.5028319,46.498355,0 7.5027097,46.4982844,0 7.5025891,46.4982505,0 7.5024065,46.4984066,0 7.5022402,46.4985802,0 7.5021254,46.4987245,0 7.5021195,46.4988496,0 7.5020165,46.4989394,0 7.5020224,46.4991616,0 7.5021328,46.4993324,0 7.5021211,46.4993741,0 + + + + , Summer Walking Path + #style-Summer_Hiking + + relativeToGround + 7.5415101,46.4829137,0 7.5411092,46.4830045,0 7.5405377,46.4830449,0 7.5399432,46.4831921,0 7.5395854,46.4833624,0 7.5389331,46.4834865,0 7.5383761,46.4836019,0 7.537822,46.4836856,0 7.5371957,46.4838472,0 7.5368933,46.4838149,0 + + + + , Summer Walking Path + #style-Summer_Hiking + + relativeToGround + 7.5605804,46.4538416,0 7.5606075,46.4535339,0 7.5606906,46.4534892,0 7.5606227,46.4533264,0 7.5607983,46.4530402,0 7.5605217,46.4530282,0 7.5602932,46.4529945,0 7.5601489,46.4529392,0 7.5598771,46.452997,0 7.5600647,46.4528719,0 7.5600527,46.4527228,0 7.559995,46.4525761,0 7.5599204,46.4524606,0 7.5598411,46.4522947,0 7.5597232,46.4521792,0 7.5596078,46.4520566,0 7.5597112,46.4519026,0 7.5597881,46.4518401,0 7.5598699,46.4518281,0 7.55993,46.4518088,0 7.5599325,46.4517247,0 7.5598755,46.4516727,0 + + + + , Summer Walking Path + #style-Summer_Hiking + + relativeToGround + 7.5952104,46.4388413,0 7.5950256,46.4384877,0 7.5948831,46.4383082,0 7.5947934,46.4380997,0 7.5943235,46.4378331,0 7.5942576,46.4376351,0 7.5943499,46.4373606,0 7.5942655,46.4370122,0 7.5942971,46.4366611,0 7.5941916,46.4363998,0 7.5938564,46.4360514,0 7.5936689,46.4358772,0 7.5934235,46.4354338,0 7.5932202,46.4351381,0 7.5930117,46.4349323,0 7.5925736,46.4346314,0 7.5923492,46.4345284,0 7.5919374,46.4340348,0 7.5918899,46.4339108,0 7.5919454,46.433726,0 7.5918477,46.4333697,0 7.5916233,46.4332747,0 7.5914307,46.4327969,0 7.5913409,46.4325145,0 7.5913013,46.4322426,0 7.5912459,46.4320011,0 + + + + , Summer Walking Path + #style-Summer_Hiking + + relativeToGround + 7.5296583,46.4300374,0 7.5292858,46.4300524,0 7.5290588,46.4300577,0 7.5289348,46.4300867,0 7.5287368,46.4300762,0 7.5285785,46.4301184,0 7.5285204,46.4302715,0 7.5283462,46.4303111,0 7.5282274,46.4304193,0 7.5280031,46.4305117,0 7.5277813,46.4306278,0 7.5275095,46.4308363,0 7.5272006,46.4309762,0 7.5269367,46.4311716,0 7.5266701,46.4313062,0 7.5262715,46.431813,0 7.5259997,46.4321112,0 7.525873,46.4322221,0 7.5256011,46.4324781,0 7.5255826,46.4325599,0 7.5254058,46.4326101,0 7.5254111,46.4327157,0 7.5252289,46.4327447,0 7.5251392,46.4328793,0 7.5251366,46.4329374,0 7.5250389,46.4329691,0 7.5250811,46.4330694,0 7.5249967,46.4331063,0 7.5249967,46.4331565,0 7.524928,46.4332568,0 7.5249175,46.4333096,0 7.524775,46.4332884,0 7.5247281,46.4333904,0 7.5245886,46.433383,0 7.524138,46.4334496,0 7.5238591,46.4335457,0 7.5237089,46.4336123,0 7.5234836,46.4336862,0 7.5233065,46.4337749,0 7.5231939,46.4338415,0 7.523033,46.4339043,0 7.5227218,46.4340411,0 7.5225931,46.4341409,0 7.5225394,46.4342075,0 7.5223624,46.4343221,0 7.5223088,46.4344441,0 7.5221961,46.4345291,0 7.5220942,46.4346327,0 7.5219815,46.4347362,0 7.5215148,46.4349654,0 7.5211608,46.4351613,0 7.5210267,46.4352648,0 7.5209087,46.4353055,0 7.5208228,46.4353277,0 7.5207477,46.4353758,0 7.5206619,46.4353721,0 7.520619,46.4353351,0 7.5206136,46.4353129,0 7.5205707,46.4352685,0 7.520501,46.4352981,0 7.5204634,46.4353203,0 7.5204205,46.4353129,0 7.520399,46.4352685,0 7.5203829,46.435239,0 7.5203883,46.4352094,0 7.5204312,46.4351428,0 7.5204527,46.4351022,0 7.5204473,46.4350763,0 7.5203937,46.4350652,0 7.5203025,46.4350874,0 7.5202542,46.4350837,0 7.5201791,46.4350837,0 7.5200879,46.4351133,0 7.5200503,46.4351281,0 7.5199538,46.4351281,0 7.519884,46.435165,0 7.5198411,46.4351872,0 7.5198036,46.4352242,0 7.5197446,46.4352205,0 7.5197124,46.4351576,0 7.5197285,46.435117,0 7.519766,46.4350615,0 7.5197177,46.435043,0 7.519648,46.4350615,0 7.5196051,46.43508,0 7.5195783,46.435043,0 7.5195944,46.4350024,0 7.5195783,46.4349765,0 7.51953,46.4349654,0 7.519471,46.4350024,0 7.5194173,46.4350098,0 7.5193959,46.4349876,0 7.5193637,46.4349617,0 7.5193047,46.4349728,0 7.5192457,46.434958,0 7.5192028,46.4349173,0 7.5192135,46.4348804,0 7.5191813,46.4348397,0 7.5191813,46.4347916,0 7.5191438,46.434751,0 7.519074,46.4347399,0 7.5189936,46.4347399,0 7.5189292,46.4347251,0 7.5188594,46.4347288,0 7.5188112,46.4347657,0 7.5187682,46.4348212,0 7.5187146,46.4348508,0 7.5186341,46.4348508,0 7.5185161,46.4348582,0 7.5184625,46.4348841,0 7.5184625,46.4349432,0 7.5185054,46.4350282,0 7.5185537,46.4350874,0 7.5185751,46.4351355,0 7.5185751,46.435202,0 7.5185215,46.4352427,0 7.5184464,46.4352575,0 7.5182586,46.4352612,0 7.5180441,46.4352722,0 7.517808,46.4353499,0 7.5176471,46.4354275,0 7.5175827,46.4354793,0 7.5175022,46.4355052,0 7.5174915,46.4354719,0 7.5175076,46.4354386,0 7.5174325,46.4354608,0 7.5173628,46.4354571,0 7.5173091,46.4354904,0 7.5172662,46.4354682,0 7.5173252,46.4354349,0 7.5172769,46.4354201,0 7.5172072,46.4354386,0 7.5171482,46.4354608,0 7.5171267,46.4355015,0 7.5171106,46.4356272,0 7.5170731,46.4357122,0 7.5169819,46.4357676,0 7.5168961,46.4357676,0 7.516778,46.435812,0 7.5166761,46.4358305,0 7.5165635,46.4358083,0 7.5164991,46.4357972,0 7.5164079,46.4358231,0 7.5162684,46.4358342,0 7.5162041,46.4358896,0 7.5161611,46.4359451,0 7.5161772,46.4360005,0 7.5161504,46.4360634,0 7.5161129,46.436141,0 7.5160646,46.4362335,0 7.5160914,46.4362815,0 7.5160109,46.4363555,0 7.515968,46.4364183,0 7.5159251,46.4364922,0 7.5158607,46.4365181,0 7.5157749,46.4364738,0 7.5157105,46.4363702,0 7.515614,46.436263,0 7.515555,46.4362409,0 7.5155174,46.4362889,0 7.5155174,46.4363629,0 7.5155442,46.4364331,0 7.515555,46.4365033,0 7.5155496,46.4365736,0 7.5155925,46.4366253,0 7.5156408,46.4367067,0 7.5156676,46.4367843,0 7.5156462,46.436825,0 7.5155657,46.4368952,0 7.5155389,46.4369618,0 7.5155764,46.4370283,0 7.5155657,46.4370837,0 7.5155281,46.4370468,0 7.5154691,46.4369913,0 7.5154584,46.4370431,0 7.5154048,46.4370505,0 7.5153511,46.436995,0 7.5153457,46.4370579,0 7.5153779,46.437117,0 7.5153726,46.4371688,0 7.5153511,46.4371947,0 7.5152814,46.4371836,0 7.5152277,46.4372353,0 7.5151848,46.4372575,0 7.5151526,46.4373093,0 7.5151044,46.437313,0 7.5151151,46.4372538,0 7.5150507,46.4372575,0 7.5150078,46.4372908,0 7.5149434,46.437276,0 7.5149434,46.4372131,0 7.514922,46.4371799,0 7.514863,46.4371836,0 7.5148254,46.4372316,0 7.5148147,46.4372871,0 7.5147878,46.4372575,0 7.5147718,46.4372316,0 7.5147449,46.4373203,0 7.5147449,46.4374202,0 7.514702,46.4375422,0 7.5146001,46.4376679,0 7.5144928,46.4377159,0 7.5144231,46.4377085,0 7.5142085,46.4377566,0 7.5141441,46.4377972,0 7.5141173,46.4378342,0 7.5140315,46.4378675,0 7.5139564,46.4379155,0 7.5138544,46.4379377,0 7.5137096,46.4379747,0 7.5135862,46.4380671,0 7.5134736,46.4380597,0 7.5132107,46.4380819,0 7.5131088,46.438141,0 7.5130337,46.4382113,0 7.5129639,46.4382298,0 7.5128084,46.438215,0 7.5125884,46.438263,0 7.5123631,46.4383185,0 7.5121915,46.4383148,0 7.51217,46.4383444,0 7.5120466,46.4383739,0 7.5119501,46.4383739,0 7.511757,46.4383776,0 7.5116952,46.4384008,0 7.5115799,46.4384442,0 7.5114083,46.4385662,0 7.5112956,46.438666,0 7.5110864,46.4387067,0 7.5109255,46.4387436,0 7.5108128,46.4388508,0 7.5107109,46.4389987,0 7.5106197,46.4390431,0 7.5105285,46.4392242,0 7.510389,46.4394017,0 7.510094,46.4396382,0 7.5098633,46.439812,0 7.5097077,46.4399155,0 7.5096434,46.4400523,0 7.5094395,46.4402223,0 7.5090587,46.4404256,0 7.5088387,46.4405365,0 7.5085919,46.4405809,0 7.5084096,46.4406068,0 7.508254,46.4406511,0 7.5080823,46.4406622,0 7.5078892,46.4406585,0 7.5077015,46.4406844,0 7.5075781,46.4407362,0 7.5075244,46.4408138,0 7.5075191,46.4409025,0 7.507503,46.440969,0 7.5074279,46.4410393,0 7.5072723,46.4411206,0 7.5071704,46.4411724,0 7.507047,46.4412093,0 7.5069343,46.4412943,0 7.5068217,46.4413276,0 7.5067037,46.4413128,0 7.5064676,46.4412907,0 7.506119,46.4413054,0 7.5058132,46.4413239,0 7.5056415,46.4413387,0 7.5054323,46.4412943,0 7.5052714,46.4412463,0 7.5051265,46.4412352,0 7.5049656,46.4412685,0 7.5048529,46.4413054,0 7.5047296,46.441372,0 7.5045901,46.4413979,0 7.5045204,46.4414311,0 7.5045311,46.4414829,0 7.5046062,46.4414829,0 7.504633,46.4415198,0 7.5047671,46.4415235,0 7.5048905,46.4415642,0 7.50503,46.4415901,0 7.505148,46.4415605,0 7.5052285,46.4415494,0 7.505325,46.4415605,0 7.5053357,46.4415975,0 7.5052928,46.4416492,0 7.505148,46.4417527,0 7.5050407,46.4417971,0 7.5049173,46.4419191,0 7.5047671,46.4420558,0 7.5046491,46.4421409,0 7.5045043,46.4421593,0 7.5043809,46.4421002,0 7.5043004,46.4420374,0 7.5042468,46.4420004,0 7.5040644,46.4419893,0 7.5037908,46.4419154,0 7.5037532,46.4418636,0 7.5036674,46.441834,0 7.503603,46.4418045,0 7.5034367,46.4417638,0 7.5033402,46.4417084,0 7.5031685,46.4416492,0 7.5030451,46.441579,0 7.5028413,46.4415346,0 7.5026535,46.4415161,0 7.5024765,46.4415161,0 7.5023746,46.4415346,0 7.502219,46.4415568,0 7.5017952,46.4415568,0 7.5013553,46.4415272,0 7.5009423,46.4414903,0 7.5006848,46.4414755,0 7.5004905,46.4414532,0 + + + + , Summer Walking Path + #style-Summer_Hiking + + relativeToGround + 7.5531803,46.3637433,0 7.5528114,46.3639866,0 7.5525992,46.3642187,0 7.5525078,46.3645431,0 7.5526612,46.3646039,0 7.5525567,46.3646918,0 7.5527167,46.3648923,0 7.5526579,46.3649621,0 7.5531019,46.3651356,0 7.5533435,46.3653158,0 7.5534937,46.365487,0 7.553399,46.3657461,0 7.5533859,46.3658632,0 7.5540813,46.3660367,0 7.554398,46.3662507,0 7.554558,46.3662935,0 7.5544894,46.3665075,0 7.5575791,46.3665852,0 7.5581286,46.3669084,0 7.5585494,46.3672031,0 7.5593082,46.3680655,0 7.5601499,46.3683251,0 7.5608066,46.3683911,0 7.5614315,46.3685451,0 7.5621392,46.3686595,0 7.5623815,46.3688178,0 7.5628725,46.3687255,0 7.5632742,46.3687123,0 7.5640022,46.368933,0 7.5641483,46.3691113,0 7.5642859,46.3690848,0 7.5646324,46.3693502,0 7.5652508,46.369491,0 7.5654485,46.3693986,0 7.5658555,46.3695314,0 7.5661611,46.3693956,0 7.5664049,46.3694558,0 7.5665516,46.3694074,0 7.5667742,46.3694346,0 7.5668756,46.369562,0 7.5671841,46.3695809,0 7.5675053,46.3697029,0 7.5678332,46.3697682,0 7.5682137,46.3697683,0 7.5685091,46.3698694,0 7.5691078,46.3696964,0 7.5691873,46.3698198,0 7.569288,46.3698413,0 7.569423,46.3697524,0 7.5694081,46.3698386,0 7.5695654,46.3698578,0 7.5697199,46.3699574,0 7.569829,46.3700234,0 7.5699239,46.3700186,0 7.5700752,46.3700821,0 7.5702149,46.3700415,0 7.5702412,46.3701205,0 7.5703156,46.3701287,0 7.5704896,46.3701844,0 7.5705317,46.3701552,0 7.5706147,46.3701703,0 7.5706274,46.3701162,0 7.570783,46.3701671,0 7.5708306,46.3701076,0 7.5710723,46.3701124,0 7.5711163,46.370016,0 7.571372,46.3699618,0 7.5719076,46.3701201,0 7.5721641,46.3701943,0 7.5722033,46.3702231,0 + + + + Geissweg + Geissweg, Summer Walking Path + #style-Summer_Hiking + + relativeToGround + 7.6222616,46.3768109,0 7.6221674,46.3766908,0 7.6219495,46.3765308,0 7.6217027,46.3762199,0 7.6214667,46.3759238,0 7.6214023,46.3757166,0 7.6213272,46.3755685,0 7.6213057,46.3754279,0 7.621295,46.3752429,0 7.6212839,46.3751056,0 7.6212735,46.3748801,0 7.6212735,46.3747543,0 7.6212092,46.3745767,0 7.6211233,46.3744064,0 7.6211126,46.374251,0 7.6211155,46.3740319,0 7.6210626,46.373873,0 7.6209285,46.3736805,0 7.6208534,46.3735175,0 7.6206785,46.3733627,0 7.6205037,46.3732489,0 7.6203591,46.3730989,0 7.6200909,46.372825,0 7.6198387,46.3725622,0 7.6195705,46.3725807,0 7.6194257,46.3724548,0 7.6194096,46.3723919,0 7.6192379,46.3722365,0 7.6191682,46.3719663,0 7.618857,46.3719589,0 7.6187337,46.3718848,0 7.6185405,46.371622,0 7.6183474,46.3714777,0 7.6181597,46.3712889,0 7.6179612,46.3712408,0 7.6177681,46.3711816,0 7.6176018,46.3711779,0 7.6175052,46.3711927,0 7.6171994,46.3710594,0 7.616781,46.3707966,0 7.6166523,46.3707707,0 7.6165986,46.3705709,0 7.6164377,46.3703266,0 7.6164216,46.3702599,0 7.6163143,46.3702266,0 7.6162338,46.3702562,0 7.6162553,46.3704006,0 7.6161373,46.3702562,0 7.6160944,46.3703118,0 7.615853,46.3702969,0 7.6158476,46.3705153,0 7.6156974,46.370445,0 7.6155794,46.3706449,0 7.6154882,46.3706671,0 7.6154828,46.3707448,0 7.615338,46.3706227,0 7.6153058,46.370693,0 7.6152575,46.3706819,0 7.6151878,46.370693,0 7.6152361,46.3708188,0 7.6152146,46.3709447,0 7.6152361,46.3710927,0 7.6153434,46.3711964,0 7.6154721,46.3712778,0 7.6154828,46.3714333,0 7.6153863,46.3716998,0 7.6154077,46.3718034,0 7.6152897,46.3719367,0 7.6151395,46.3720921,0 7.6152253,46.3723068,0 7.6151502,46.3724326,0 7.615,46.3725659,0 7.6149035,46.3727139,0 7.6150644,46.3727879,0 7.6152897,46.3727657,0 7.6154721,46.3728472,0 7.6155579,46.3729582,0 7.6155579,46.3730544,0 7.6153434,46.3731433,0 7.6151717,46.3732913,0 7.6150429,46.373432,0 7.6150751,46.3734986,0 7.6154292,46.3735948,0 7.6157832,46.3738835,0 7.6161266,46.3740982,0 7.6162875,46.3744165,0 7.6162017,46.3745127,0 7.6160836,46.3746607,0 7.6162231,46.3748902,0 7.6163626,46.3751123,0 7.6163733,46.3752529,0 7.6162768,46.3752455,0 7.6162124,46.3755194,0 7.6162875,46.3757489,0 7.6164913,46.3759117,0 7.6166845,46.3761264,0 7.6169527,46.3762004,0 7.6169419,46.3763928,0 7.6168025,46.3765335,0 7.6168561,46.3766297,0 7.6166094,46.3770294,0 7.6167596,46.3773107,0 7.6167059,46.3774291,0 7.6167596,46.377555,0 7.6167596,46.3776586,0 7.6165772,46.3776882,0 7.6164591,46.377703,0 7.6163626,46.3778806,0 7.6163733,46.3780435,0 7.6164377,46.3782285,0 7.6163411,46.3782803,0 7.6165128,46.378384,0 7.6167274,46.3788059,0 7.6165986,46.3790057,0 7.6166201,46.3792722,0 7.6163948,46.3794054,0 7.6163304,46.3795164,0 7.6165879,46.3795904,0 7.6163197,46.3797385,0 7.6160085,46.3798569,0 7.6159442,46.3799605,0 7.6159549,46.3801233,0 7.6162124,46.3802862,0 7.6161802,46.3803602,0 7.6163089,46.380523,0 7.6161802,46.3806636,0 7.6163152,46.3807166,0 7.6163197,46.3807155,0 7.6163152,46.3807166,0 7.616545,46.3806562,0 7.6168883,46.3808265,0 7.6172102,46.3809005,0 7.6174891,46.3814926,0 7.6175428,46.3816406,0 7.6173926,46.3817442,0 7.6174247,46.3820551,0 7.6173282,46.3824474,0 7.6175535,46.38244,0 7.6176608,46.3827952,0 7.6175857,46.3829728,0 7.6175857,46.3830765,0 7.6174569,46.3833355,0 7.6175428,46.3836389,0 7.6173604,46.3840608,0 7.6173496,46.3848305,0 7.6175213,46.3850007,0 7.6175535,46.3852079,0 7.6176608,46.3852227,0 7.6177788,46.3851487,0 7.6188946,46.3855558,0 7.6192594,46.3857556,0 7.6197422,46.3858962,0 7.6201737,46.3860141,0 7.6204151,46.3860289,0 7.6206176,46.3859502,0 + + + + , Summer Walking Path + #style-Summer_Hiking + + relativeToGround + 7.5284879,46.4891875,0 7.5286313,46.4893803,0 7.5287117,46.4900478,0 7.5284951,46.4908182,0 7.5289364,46.4906938,0 + + + + , Summer Walking Path + #style-Summer_Hiking + + relativeToGround + 7.4345295,46.4574371,0 7.4347762,46.4573336,0 7.4350874,46.4572893,0 7.4353341,46.4572301,0 7.4354414,46.4570823,0 7.4356774,46.4567867,0 7.4357204,46.4564319,0 + + + + , Summer Walking Path + #style-Summer_Hiking + + relativeToGround + 7.4357204,46.4564319,0 7.4363534,46.4565058,0 7.4372546,46.4566093,0 7.4375872,46.4566536,0 7.4377803,46.4567202,0 7.4379949,46.456698,0 7.4382202,46.4566389,0 7.4384777,46.4566019,0 7.4387566,46.4566536,0 7.4390892,46.4567793,0 + + + + , Summer Walking Path + #style-Summer_Hiking + + relativeToGround + 7.4319089,46.4675275,0 7.4326197,46.4677909,0 7.4330703,46.46802,0 7.4340467,46.4683451,0 7.4347869,46.4685668,0 7.4351195,46.4686629,0 7.4354092,46.4689289,0 7.4357955,46.4693649,0 7.4360816,46.4694487,0 + + + + , Summer Walking Path + #style-Summer_Hiking + + relativeToGround + 7.4389752,46.4648103,0 7.4388936,46.4647475,0 7.4374799,46.4641657,0 7.4368575,46.4640778,0 + + + + , Summer Walking Path + #style-Summer_Hiking + + relativeToGround + 7.4391324,46.4649312,0 7.4389752,46.4648103,0 + + + + , Summer Walking Path + #style-Summer_Hiking + + relativeToGround + 7.4291628,46.5638818,0 7.4290955,46.5638078,0 7.4290258,46.5636455,0 7.4289346,46.5634796,0 7.4288327,46.5633357,0 7.4286825,46.5631919,0 7.4284893,46.5630997,0 7.428264,46.5630443,0 7.4280441,46.5630812,0 7.4278563,46.5631624,0 7.4276686,46.5632103,0 7.4275774,46.5631439,0 7.4275345,46.5630443,0 7.4274755,46.5629005,0 7.427336,46.5627677,0 7.4273413,46.5626239,0 7.4272716,46.562528,0 7.4272126,46.5623583,0 7.4271482,46.5621923,0 7.42688,46.5619415,0 7.4265689,46.5618346,0 7.4262899,46.5616354,0 7.4258769,46.561285,0 7.4255443,46.5609973,0 7.4252385,46.5606579,0 7.4249756,46.5603887,0 7.4247021,46.5602153,0 7.4244016,46.559994,0 7.4240261,46.5598133,0 7.4237311,46.5597542,0 7.4235039,46.559884,0 7.4232751,46.5600198,0 7.4232161,46.5599608,0 7.4231464,46.5598797,0 7.4230605,46.559651,0 7.422964,46.559496,0 7.4227119,46.5593891,0 7.4224436,46.5593411,0 7.4223363,46.5593411,0 7.4221754,46.559319,0 7.4221057,46.5592083,0 7.4219769,46.5590903,0 7.4218911,46.5590424,0 7.4217731,46.5591087,0 7.4214727,46.5591899,0 7.4213439,46.5592157,0 7.4212313,46.5591641,0 7.4210864,46.5591604,0 7.420888,46.5592415,0 7.4203944,46.5593264,0 7.4196273,46.5593338,0 7.4191231,46.5593522,0 7.4186188,46.5594592,0 7.4183184,46.5595219,0 7.417798,46.5595256,0 7.4172401,46.5595219,0 7.4168915,46.559496,0 7.4167895,46.5595071,0 7.4166286,46.5594887,0 7.4162853,46.5594592,0 7.4160546,46.559426,0 7.4158615,46.5594997,0 7.4158293,46.5594481,0 7.4158293,46.5593891,0 7.4158669,46.5593448,0 7.4157864,46.559319,0 7.4156308,46.5592342,0 7.4155074,46.5590903,0 7.4152339,46.5589686,0 7.4148208,46.5588063,0 7.4146813,46.5586403,0 7.4144507,46.5585038,0 7.4143273,46.5584632,0 7.4141985,46.5584817,0 7.4139893,46.5584743,0 7.4137801,46.5583858,0 7.4134636,46.5583858,0 7.4129701,46.5583673,0 7.4126643,46.5583304,0 7.4123317,46.5582714,0 7.4122512,46.558205,0 7.4122834,46.5581128,0 7.4122995,46.5580501,0 7.4122995,46.5578915,0 7.412144,46.5577624,0 7.4119937,46.5575706,0 7.411468,46.5573861,0 7.411055,46.5573087,0 7.4106795,46.5572644,0 7.4104917,46.557246,0 7.4103469,46.5573087,0 7.4103254,46.5574415,0 7.4102986,46.5574968,0 7.4100626,46.557482,0 7.409671,46.5574083,0 7.4090487,46.5572644,0 7.4087161,46.5570615,0 7.4086088,46.5569988,0 7.4079382,46.556855,0 7.4077559,46.5566927,0 7.4077237,46.5564603,0 7.4077183,46.5562057,0 7.4076593,46.5560914,0 7.4075252,46.5559586,0 7.4075198,46.5558147,0 7.4075037,46.5557004,0 7.4073321,46.5555749,0 7.4071926,46.5554717,0 7.4069727,46.5553425,0 7.4066132,46.555195,0 7.4061734,46.5550954,0 7.4059105,46.55497,0 7.4057496,46.5549073,0 7.4056047,46.5545457,0 7.4054921,46.5543834,0 7.4053419,46.5543318,0 7.4052292,46.5542506,0 7.4051917,46.5541473,0 7.4052185,46.5539481,0 7.4050683,46.5538043,0 7.404961,46.5537194,0 7.4048591,46.5536124,0 7.4048591,46.5535239,0 7.4049556,46.5533874,0 7.4049771,46.5533026,0 7.4048698,46.5532251,0 7.4047035,46.5531439,0 7.4044031,46.5529779,0 7.4042207,46.5528599,0 7.4039793,46.5526312,0 7.4035609,46.5523213,0 7.4033678,46.5522364,0 7.4032605,46.5521737,0 7.4031586,46.5521295,0 7.4030513,46.5520667,0 7.4028474,46.5520151,0 7.4026811,46.5519044,0 7.4026918,46.5518196,0 7.4027079,46.5516609,0 7.4024504,46.5514986,0 7.4022037,46.5513437,0 7.4018604,46.551174,0 7.4016351,46.551126,0 7.4013186,46.5510854,0 7.4008733,46.5509821,0 7.40053,46.5509526,0 7.3999882,46.5510153,0 7.3997414,46.5513179,0 7.39972,46.5515835,0 7.3998326,46.5516831,0 7.3998916,46.5517126,0 7.4000418,46.55172,0 7.4001384,46.551779,0 7.4001545,46.551838,0 7.400074,46.5518343,0 7.399956,46.5518417,0 7.3999131,46.5519081,0 7.3998863,46.5519671,0 7.3999453,46.5520225,0 7.3998702,46.5520631,0 7.3999399,46.552111,0 7.3998594,46.5521073,0 7.4000204,46.5523028,0 7.4002189,46.5525574,0 7.4003208,46.5527529,0 7.400412,46.5528894,0 7.4005568,46.5530148,0 7.4006963,46.5531513,0 7.400707,46.5532288,0 7.4006265,46.5532435,0 7.4005514,46.5532067,0 7.4004549,46.5531882,0 7.4004173,46.5532509,0 7.4004173,46.5533063,0 7.4003476,46.5533616,0 7.4001813,46.5533505,0 7.3999506,46.5533579,0 7.3998916,46.5534132,0 7.3997146,46.5536235,0 7.3995268,46.5539186,0 7.3994088,46.5541473,0 7.3991138,46.5545605,0 7.3989475,46.5547855,0 7.3990923,46.5552946,0 7.3991728,46.5554864,0 7.3991835,46.5555639,0 7.3991782,46.5556155,0 7.399087,46.5555971,0 7.3989207,46.555479,0 7.3987275,46.5554089,0 7.3984593,46.5553057,0 7.3982501,46.5551581,0 7.3980945,46.5550917,0 7.3979122,46.5550991,0 7.3978585,46.5551839,0 7.3978639,46.5552725,0 7.3978049,46.5552725,0 7.3974776,46.5552429,0 7.397188,46.5550843,0 7.3967695,46.5550069,0 7.3966676,46.5550622,0 7.3966622,46.5551507,0 7.3966944,46.5552466,0 7.3965818,46.5553462,0 7.3963994,46.5554385,0 7.3963457,46.5555417,0 7.396276,46.5556081,0 7.3960614,46.5556192,0 7.3958683,46.5555122,0 7.3958415,46.5553167,0 7.3956698,46.5551692,0 7.3954874,46.5550106,0 7.395305,46.5549146,0 7.395305,46.5550069,0 7.3953211,46.5551028,0 7.3954177,46.5552393,0 7.3954606,46.5553241,0 7.3953855,46.555468,0 7.3952943,46.5556303,0 7.3952514,46.5558,0 7.3952568,46.555977,0 7.3952621,46.5561615,0 7.3952621,46.5563459,0 7.3951602,46.5564603,0 7.3950261,46.5565562,0 7.3948813,46.5566189,0 + + + + , Summer Walking Path + #style-Summer_Hiking + + relativeToGround + 7.5658624,46.5011096,0 7.5659292,46.5011241,0 7.5660166,46.5011678,0 7.5662026,46.5012103,0 7.5666147,46.5013842,0 7.5667588,46.5014242,0 7.5669066,46.5014373,0 7.5670507,46.5015243,0 7.5671619,46.5016086,0 7.5673501,46.5017095,0 7.5675991,46.5017956,0 7.5677317,46.5018426,0 7.5678619,46.5020131,0 7.5678935,46.5020157,0 7.5679011,46.5019704,0 7.56788,46.50188,0 7.567992,46.5019974,0 7.5681955,46.5021296,0 7.5685303,46.5022514,0 7.5686352,46.5023384,0 7.5686706,46.5024219,0 7.56873,46.5027741,0 7.5687868,46.5028576,0 7.5688462,46.5028419,0 7.5689132,46.5026845,0 7.5688905,46.5024593,0 7.568898,46.5023853,0 7.5689612,46.5023949,0 7.5690244,46.502501,0 7.5692304,46.5026471,0 7.5693011,46.5026828,0 7.5693555,46.5026523,0 7.5693529,46.502541,0 7.5693529,46.5024984,0 7.5694047,46.5024845,0 7.5696158,46.5027419,0 7.5696714,46.5027524,0 7.569713,46.5026723,0 7.5697067,46.5025419,0 7.5696416,46.5023484,0 + + + + , Summer Walking Path + #style-Summer_Hiking + + relativeToGround + 7.5678619,46.5020131,0 7.5679328,46.5022479,0 + + + + , Summer Walking Path + #style-Summer_Hiking + + relativeToGround + 7.5686907,46.5028223,0 7.568699,46.5027941,0 7.56873,46.5027741,0 + + + + , Summer Walking Path + #style-Summer_Hiking + + relativeToGround + 7.5613391,46.4939717,0 7.5611723,46.4943217,0 7.5611146,46.4943645,0 + + + + , Summer Walking Path + #style-Summer_Hiking + + relativeToGround + 7.4099747,46.4812081,0 7.4100874,46.4812561,0 7.4102644,46.4813559,0 7.4104897,46.48133,0 7.4106882,46.4812598,0 7.4109618,46.4812266,0 7.4111978,46.4811564,0 7.4113319,46.4810382,0 7.4114124,46.4808756,0 7.4114982,46.4807759,0 7.4116806,46.4807759,0 7.4118791,46.4809089,0 7.4120293,46.4809532,0 7.4122624,46.480898,0 7.4124263,46.4807981,0 7.4125819,46.4807242,0 7.4128125,46.4807611,0 7.4130003,46.4807205,0 7.4131827,46.4806282,0 7.413349,46.4805727,0 7.4136172,46.4805395,0 7.4140088,46.4805469,0 7.4141,46.4804878,0 7.414159,46.4803991,0 7.4143146,46.4803954,0 7.4144111,46.4804361,0 7.4143628,46.4805395,0 7.4143682,46.4806355,0 7.4147705,46.4806429,0 7.4148027,46.4805617,0 7.4150441,46.4805063,0 7.4154089,46.4805063,0 7.4157147,46.4805173,0 7.4158702,46.4805026,0 7.4160634,46.4803917,0 7.4163477,46.4803696,0 7.4166213,46.4804102,0 7.4167554,46.4805432,0 7.4167071,46.4807501,0 7.416868,46.4809421,0 7.4169324,46.4812746,0 7.4170075,46.481511,0 7.4172006,46.4816107,0 7.4174849,46.4816107,0 7.4178014,46.4815886,0 7.4179087,46.4816957,0 7.4179516,46.481825,0 7.4180857,46.4820946,0 7.4181877,46.4822941,0 7.4182574,46.4822756,0 7.4184505,46.48215,0 7.4187402,46.4819838,0 7.4189709,46.481825,0 7.4192844,46.4816599,0 7.4194698,46.4816033,0 7.4198882,46.4815073,0 7.4202798,46.4814076,0 7.4206982,46.4813152,0 7.4210737,46.4811675,0 7.4215136,46.4809865,0 7.4218462,46.4807611,0 7.422152,46.4805358,0 7.4224148,46.4803954,0 7.4227152,46.4802588,0 7.4228976,46.4801147,0 7.4232302,46.4799669,0 7.4236647,46.4797712,0 7.4239383,46.479531,0 7.4243085,46.4793759,0 7.4244694,46.4791432,0 7.4246411,46.4789289,0 7.4249039,46.4787184,0 7.4251239,46.4784819,0 7.4253492,46.4783305,0 7.4255691,46.4781605,0 7.4257247,46.4779167,0 7.4258481,46.4775806,0 7.4260144,46.4773035,0 7.4261592,46.477056,0 7.42629,46.4769389,0 7.4263738,46.4768639,0 7.4265723,46.4767309,0 7.42676,46.4765794,0 7.4269585,46.4764612,0 + + + + , Summer Walking Path + #style-Summer_Hiking + + relativeToGround + 7.4317516,46.4728703,0 7.4318669,46.4725932,0 7.4320708,46.4722681,0 7.4322907,46.47198,0 7.4326233,46.4716548,0 7.4330793,46.4713851,0 7.4334119,46.4711893,0 7.4336855,46.4709972,0 7.4340985,46.4707201,0 + + + + , Summer Walking Path + #style-Summer_Hiking + + relativeToGround + 7.6164187,46.5309288,0 7.6170658,46.5311194,0 7.6182054,46.5313292,0 7.6193915,46.5318375,0 7.6194839,46.5322688,0 7.6204851,46.5333009,0 7.6213939,46.5338554,0 7.6221795,46.5344869,0 7.6231345,46.5348566,0 7.6244438,46.5351031,0 7.6247981,46.5355343,0 7.6250907,46.5362891,0 7.6253526,46.5364431,0 7.6258455,46.5370439,0 7.6256606,46.5375368,0 7.625445,46.5377524,0 7.6255066,46.5380297,0 7.6262306,46.5384302,0 7.6269853,46.5383069,0 7.6273704,46.5384764,0 7.6280328,46.5390925,0 7.6286181,46.5392927,0 7.6284332,46.5401091,0 7.6285565,46.5408331,0 7.628957,46.5414184,0 7.6298349,46.5422964,0 7.6298811,46.5428663,0 7.6310353,46.5445644,0 7.6319403,46.5448838,0 7.632792,46.5459218,0 7.6333243,46.5463211,0 7.6338034,46.5470664,0 7.6350278,46.547998,0 7.6350012,46.5489296,0 7.635294,46.5494087,0 7.6347084,46.5505,0 7.6342027,46.5509791,0 7.6342293,46.551538,0 7.6355868,46.5524164,0 7.6357731,46.5529221,0 7.6366515,46.5538537,0 7.6373435,46.5548119,0 7.6383816,46.5557169,0 7.6389139,46.5569945,0 7.6396858,46.5579527,0 7.6397656,46.5586713,0 7.6403512,46.5592569,0 7.6412562,46.5595497,0 7.642241,46.5606144,0 7.642478,46.5605806,0 7.6425216,46.5611584,0 7.6429032,46.560984,0 7.6436118,46.5608096,0 7.644037,46.5608096,0 7.644822,46.5612784,0 7.6449855,46.5615073,0 7.6445712,46.5615182,0 7.6442769,46.5616817,0 7.6440043,46.5625866,0 7.6435791,46.5629464,0 7.6435682,46.5633825,0 7.6431209,46.5636803,0 7.6432613,46.5638823,0 7.6430399,46.5644631,0 7.6434328,46.5645423,0 7.6431219,46.5647846,0 7.6428512,46.5649312,0 7.6431547,46.5649537,0 7.6435178,46.564926,0 7.6432531,46.5651398,0 7.6428116,46.5653032,0 7.6419408,46.565309,0 7.6411101,46.5652106,0 7.64133,46.5653611,0 7.6419408,46.5655515,0 7.6426597,46.5656959,0 7.6429907,46.5657714,0 7.6435639,46.5660093,0 7.6440848,46.5657547,0 7.6449761,46.5657894,0 7.6465965,46.5652454,0 7.6475457,46.5652454,0 7.6476846,46.5653958,0 7.6472447,46.5654769,0 7.6466197,46.5656852,0 7.6460409,46.5660324,0 7.6457516,46.5660324,0 7.6456937,46.5661482,0 7.6458673,46.5661945,0 7.6466742,46.5659811,0 7.6471656,46.5658899,0 7.6475915,46.5659523,0 7.6480022,46.5661775,0 7.6485642,46.5662755,0 7.6480434,46.5663565,0 7.6470364,46.5664028,0 7.6464576,46.5668195,0 7.6468628,46.5676992,0 7.6460583,46.5680271,0 7.6456236,46.5682188,0 7.6453857,46.5682752,0 7.6452455,46.5684742,0 7.6453161,46.5686246,0 7.6447213,46.5689462,0 7.6442816,46.569285,0 7.6432514,46.569366,0 7.6427884,46.5695165,0 7.6419435,46.5695049,0 7.6410406,46.5698637,0 7.6401725,46.5698405,0 7.6399295,46.5701183,0 7.6401378,46.5703151,0 7.6400452,46.5705813,0 7.639322,46.5710956,0 7.6388716,46.5713042,0 7.6387679,46.5715394,0 + + + + , Summer Walking Path + #style-Summer_Hiking + + relativeToGround + 7.490681,46.4144632,0 7.4904801,46.4146018,0 7.4903907,46.4147865,0 7.4903163,46.4150995,0 7.4902866,46.4155664,0 7.4902493,46.4159204,0 7.4902493,46.4162641,0 7.4902047,46.4164591,0 7.4899517,46.4165925,0 7.4896093,46.4167823,0 7.489267,46.4169927,0 7.4890958,46.4170543,0 7.4889395,46.4170594,0 7.4886865,46.416967,0 7.4884707,46.4168593,0 7.4882102,46.4166284,0 7.4878679,46.4164488,0 7.4874883,46.4164027,0 7.4871386,46.4164796,0 7.4869302,46.4165925,0 7.4866251,46.4166848,0 7.4862306,46.4166541,0 7.4858809,46.4165822,0 7.4854492,46.4164694,0 7.4849208,46.4164488,0 7.4842734,46.4164437,0 7.4838641,46.416454,0 7.4834101,46.4165258,0 7.4830454,46.4165053,0 7.4822268,46.4164129,0 7.4818026,46.4163052,0 7.4815719,46.4161461,0 7.4811254,46.4160076,0 7.4806119,46.4158742,0 7.4802175,46.4156844,0 7.4797709,46.4153355,0 7.4793319,46.4150276,0 7.4786174,46.4147301,0 7.4782453,46.4145813,0 7.4780444,46.4144786,0 7.4777467,46.4144838,0 7.4773672,46.4145556,0 7.4770769,46.414571,0 7.4766676,46.4145813,0 7.4764518,46.4145813,0 7.4763327,46.4146787,0 7.4763104,46.4148224,0 7.4759309,46.4149148,0 7.4756927,46.4149507,0 7.4753727,46.414925,0 7.4750973,46.4148994,0 7.4746955,46.4147814,0 7.4745728,46.4147323,0 7.4743746,46.4147097,0 7.4742482,46.4146698,0 7.4741233,46.4146451,0 7.4740734,46.4146451,0 7.4740078,46.4146978,0 7.4734741,46.4147753,0 7.4733523,46.4147753,0 7.4732743,46.4146967,0 7.4731838,46.4145558,0 7.4731243,46.4144834,0 7.4730237,46.4143847,0 7.4729444,46.4144309,0 7.472917,46.4143426,0 7.4728865,46.4143973,0 7.4728286,46.4143321,0 7.4727219,46.4144246,0 7.4726975,46.4143973,0 7.4724902,46.4146411,0 7.4723348,46.4147987,0 7.4722464,46.4148638,0 7.4721945,46.4149689,0 7.4720939,46.4149626,0 7.4720817,46.4150193,0 7.4719842,46.4150299,0 7.4719781,46.4148954,0 7.471847,46.4149668,0 7.4718531,46.4147419,0 7.4718196,46.4146453,0 7.4717099,46.4145864,0 7.471594,46.414557,0 7.4714904,46.4145654,0 7.4714416,46.4146516,0 7.4713837,46.4147587,0 7.4713502,46.4148197,0 7.4713288,46.4148869,0 7.4712679,46.4148975,0 7.4712099,46.4148806,0 7.4711398,46.4148722,0 7.4710362,46.4149689,0 7.4708685,46.4151118,0 7.4706734,46.4152274,0 7.4704448,46.415261,0 7.4702497,46.4152904,0 7.4699998,46.4152316,0 7.4697132,46.4150677,0 7.4695029,46.4148911,0 7.4694023,46.4147566,0 7.4693383,46.4145339,0 7.4693261,46.4142943,0 7.4693657,46.4140463,0 7.4693993,46.4138656,0 7.4694511,46.4137122,0 7.469506,46.413565,0 7.4695304,46.4133864,0 7.4694816,46.4133381,0 7.4692621,46.4133171,0 7.4690762,46.4133759,0 7.4688262,46.4133948,0 7.4686799,46.413481,0 7.4685214,46.4135167,0 7.4684299,46.4135251,0 7.4682166,46.4135377,0 7.4680519,46.4135692,0 7.4680093,46.4137185,0 7.4677532,46.4137353,0 7.4673356,46.4138929,0 7.4670216,46.4139391,0 7.466921,46.4139139,0 7.4668022,46.4138298,0 7.466726,46.4136953,0 7.4664973,46.4136176,0 7.4662382,46.4135356,0 7.4658877,46.4132981,0 7.4657048,46.4132519,0 7.4655615,46.4134284,0 7.4651256,46.4138593,0 7.4649732,46.4139538,0 7.4647171,46.4139728,0 7.4641807,46.4139496,0 7.4637996,46.4139791,0 7.4636167,46.4139959,0 7.4632205,46.4139496,0 7.4626199,46.4137857,0 7.4621718,46.4136155,0 7.461928,46.4135692,0 7.4614189,46.4136281,0 7.460791,46.4136743,0 7.4600139,46.4138459,0 7.4597162,46.4138705,0 7.4593709,46.4138254,0 7.4589184,46.4137105,0 7.4587696,46.4136243,0 7.458198,46.4133451,0 7.4579063,46.4129716,0 7.4576741,46.4125242,0 7.4575431,46.4122656,0 7.4573883,46.4119495,0 7.4571919,46.4116991,0 7.4567572,46.4114077,0 7.4563405,46.4111408,0 7.4561083,46.4110013,0 7.4559178,46.4107262,0 7.4557273,46.4104061,0 7.4555129,46.41009,0 7.4553939,46.4099832,0 7.454995,46.4098888,0 7.4548104,46.4099463,0 7.4544056,46.4101064,0 7.4538757,46.4102419,0 7.4537864,46.4104676,0 7.4534232,46.4106154,0 7.453453,46.4107016,0 7.4538459,46.4106893,0 7.4540841,46.410796,0 7.4541615,46.4109808,0 7.4541376,46.4112927,0 7.4541138,46.4114364,0 7.4540305,46.4116704,0 7.4539293,46.4118715,0 7.4539114,46.4120234,0 7.4539531,46.4121589,0 7.4538578,46.4121794,0 7.4536971,46.412048,0 7.4536137,46.4119741,0 7.4534827,46.4120521,0 7.4534292,46.4122409,0 7.4534292,46.4124421,0 7.4534173,46.4126104,0 7.4533458,46.412869,0 7.4532922,46.4130496,0 7.4530243,46.4132877,0 7.452685,46.4135709,0 7.4524944,46.4138131,0 7.4521789,46.4141702,0 7.4520658,46.4142687,0 7.4520003,46.4142564,0 7.451911,46.4141209,0 7.4516431,46.4138705,0 7.451399,46.4136407,0 7.4511608,46.4134683,0 7.4510953,46.4133657,0 7.4510259,46.4133771,0 7.4508918,46.4134506,0 7.4508309,46.4134065,0 7.4506541,46.4131816,0 7.4505413,46.413003,0 7.4503736,46.4128307,0 7.450209,46.412568,0 7.4500566,46.4124334,0 7.4499834,46.4124145,0 7.4499438,46.412444,0 7.4499255,46.4125028,0 7.4499499,46.4127319,0 7.4498981,46.4129168,0 7.4499042,46.4129946,0 7.4498707,46.4130282,0 7.4498188,46.413024,0 7.4497836,46.4129741,0 7.449693,46.4128052,0 7.4496072,46.4126728,0 7.4494308,46.4124942,0 7.4493434,46.4123597,0 7.4492748,46.4122575,0 7.4492217,46.4121994,0 7.4491843,46.412208,0 7.4491655,46.4122855,0 7.4491983,46.412406,0 7.4491796,46.4124802,0 7.4491296,46.4125125,0 7.4490017,46.4124964,0 7.4489189,46.4124383,0 7.4488877,46.4123522,0 7.4488612,46.4121563,0 7.4488393,46.4120229,0 7.4487941,46.4118948,0 7.448688,46.4117485,0 7.4485553,46.4115462,0 7.4484585,46.4113568,0 7.4483992,46.4112363,0 7.4483618,46.4110899,0 7.4482213,46.4108758,0 7.4481183,46.4107015,0 7.4480699,46.4105659,0 7.4480012,46.4103238,0 7.4479279,46.4100666,0 7.4479263,46.4098385,0 7.4479263,46.4096394,0 7.4479294,46.4095479,0 7.4478935,46.4094048,0 7.4478561,46.4093069,0 7.4478514,46.40921,0 7.4478467,46.4091099,0 7.4478249,46.4090271,0 7.447789,46.4089873,0 7.4477437,46.4089862,0 7.4477016,46.4090432,0 7.4476033,46.4092423,0 7.4475049,46.4093617,0 7.4472693,46.4096361,0 7.4471335,46.4098008,0 7.447032,46.4100128,0 7.4469837,46.4102323,0 7.4469212,46.410426,0 7.4468775,46.4104572,0 7.4466871,46.4104637,0 7.4464717,46.4104734,0 7.4463079,46.4105099,0 7.4461674,46.4105078,0 7.4458443,46.4104873,0 7.4456352,46.410497,0 7.445373,46.4105239,0 7.4452466,46.4105293,0 7.445128,46.4104798,0 7.4450858,46.4104034,0 7.4450484,46.410355,0 7.4449266,46.4103119,0 7.4449051,46.4103026,0 7.4448583,46.4102856,0 + + + + , Summer Walking Path + #style-Summer_Hiking + + relativeToGround + 7.4884845,46.4446966,0 7.4884442,46.4451792,0 7.4886803,46.4457411,0 7.4893562,46.4462955,0 7.4899463,46.4468869,0 7.4900643,46.4470791,0 7.490311,46.4472344,0 7.4906651,46.4473083,0 7.4910513,46.4473083,0 7.4916307,46.4472935,0 7.49221,46.4474118,0 7.4926499,46.4474414,0 7.4929074,46.447397,0 7.4932186,46.4472639,0 7.4937872,46.4471457,0 7.4945382,46.4471678,0 7.4951283,46.4473083,0 7.4956969,46.4477223,0 7.495933,46.4479588,0 7.4961904,46.4480771,0 7.4965552,46.4481732,0 7.4967698,46.4482249,0 7.496802,46.4483654,0 7.4966089,46.4487424,0 7.4964158,46.4490603,0 7.4963621,46.4495186,0 7.4962334,46.449829,0 7.496051,46.4501469,0 7.4960295,46.4504278,0 7.496169,46.4506052,0 7.4961046,46.4507752,0 7.4959759,46.4513,0 7.4959222,46.4515883,0 7.4959222,46.4517583,0 7.4960295,46.4518544,0 7.4962977,46.4520023,0 7.496523,46.4521723,0 + + + + , Summer Walking Path + #style-Summer_Hiking + + relativeToGround + 7.4909655,46.4491638,0 7.4912123,46.4492377,0 7.4914912,46.4491933,0 7.491738,46.4490677,0 7.4919204,46.4490233,0 7.4921779,46.4489716,0 7.4924568,46.448905,0 7.4929933,46.4487868,0 7.4932293,46.4487424,0 7.493358,46.4486759,0 7.4935404,46.4486241,0 7.4937014,46.4485946,0 7.4938623,46.4485206,0 7.4939374,46.4484245,0 7.4940661,46.4483358,0 7.4941949,46.4482915,0 7.4943236,46.4482915,0 7.4944309,46.448321,0 7.4944846,46.4483802,0 7.4945918,46.4484393,0 7.4947099,46.4484541,0 7.4946562,46.4486611,0 7.4946133,46.4488089,0 7.4946884,46.4489568,0 7.4948279,46.4491194,0 7.4950961,46.4493855,0 7.4951605,46.4495851,0 7.4952249,46.4497256,0 7.4952249,46.4500212,0 7.4952892,46.4502578,0 7.4952356,46.4504426,0 7.4950961,46.4506422,0 7.4950639,46.4507235,0 7.4951176,46.4508935,0 7.495257,46.4510635,0 7.495418,46.4512705,0 7.495654,46.4515957,0 7.4959222,46.4517583,0 + + + + , Summer Walking Path + #style-Summer_Hiking + + relativeToGround + 7.4988512,46.4461551,0 7.4989692,46.4461403,0 7.4991301,46.4460516,0 7.4992696,46.4460959,0 7.4993233,46.4462142,0 7.499452,46.4463399,0 7.4995915,46.4464064,0 7.4997524,46.4464803,0 7.4999563,46.4465395,0 7.500085,46.4465469,0 7.5000314,46.4463842,0 7.499967,46.4462955,0 7.499967,46.4462068,0 7.5000314,46.4461551,0 7.5001708,46.4462142,0 7.5002674,46.446266,0 7.500321,46.4462364,0 7.5002245,46.4461255,0 7.5002352,46.446022,0 7.5002459,46.4459481,0 7.500203,46.4458668,0 7.5001601,46.4457928,0 7.5002889,46.4457707,0 7.5003961,46.4457337,0 7.5004713,46.4456967,0 7.5005571,46.4457411,0 7.5006536,46.4458076,0 7.5008146,46.4458815,0 7.5009111,46.4459481,0 7.500997,46.4460146,0 7.5010828,46.4461403,0 7.5011472,46.446192,0 7.5012437,46.4462512,0 7.5013403,46.4462881,0 7.501469,46.4463251,0 7.5015656,46.4462807,0 7.5016729,46.4461699,0 7.5017909,46.4461551,0 7.501866,46.4462068,0 7.501984,46.4461994,0 7.5020377,46.4461699,0 7.5022201,46.4461255,0 7.5023917,46.4461625,0 7.5028852,46.446266,0 7.5030784,46.4462216,0 7.5031856,46.4462216,0 7.5030891,46.4462955,0 7.5031427,46.4463842,0 7.5032286,46.446399,0 7.5033573,46.4464582,0 7.5034968,46.4465247,0 7.503647,46.4465469,0 7.5037757,46.4465543,0 + + + + , Summer Walking Path + #style-Summer_Hiking + + relativeToGround + 7.5010721,46.4422369,0 7.5011686,46.4424217,0 7.5013188,46.4426139,0 7.5015549,46.4427322,0 7.5017694,46.4428135,0 7.5019733,46.4428875,0 7.5021771,46.4429466,0 7.502381,46.4430797,0 7.5026063,46.4431536,0 7.5027887,46.4432275,0 7.5030033,46.4433015,0 7.5031749,46.4433976,0 7.503368,46.4434641,0 7.5036577,46.4434789,0 7.5040654,46.4434789,0 7.5044624,46.4433828,0 7.5046555,46.4433384,0 7.505031,46.4432497,0 7.5052563,46.443161,0 7.5054494,46.4430131,0 7.5057177,46.4429244,0 7.505943,46.4428209,0 7.5061683,46.4427248,0 7.5062863,46.4426361,0 7.5066511,46.442577,0 7.5066511,46.4424882,0 7.5067476,46.4423847,0 7.5069086,46.4422664,0 7.5070051,46.4421925,0 7.507166,46.4421038,0 7.5074665,46.4420668,0 7.5078098,46.4420594,0 7.5079493,46.4420373,0 7.5082497,46.4421777,0 7.5085501,46.4422221,0 7.5092367,46.442296,0 7.5094298,46.4423626,0 7.5095157,46.4423626,0 7.5097946,46.4422073,0 7.5100736,46.4420964,0 7.5102345,46.4420373,0 7.5105885,46.4419485,0 7.5107387,46.4418894,0 7.5111464,46.4418155,0 7.5112752,46.4418007,0 7.5115863,46.4418229,0 7.5119296,46.4418229,0 7.5121335,46.4418376,0 7.5122558,46.4418969,0 7.5123846,46.441956,0 7.5126314,46.441956,0 7.5127708,46.4419191,0 7.5127065,46.441823,0 7.5126206,46.441749,0 7.5125992,46.4415494,0 7.5125777,46.4413794,0 7.5125563,46.4412389,0 7.512685,46.4412241,0 7.5129318,46.4412019,0 7.5130712,46.4411576,0 7.5131356,46.4410615,0 7.5131142,46.4408618,0 7.5131249,46.4407509,0 7.5132965,46.4407509,0 7.5134467,46.4407953,0 7.5136399,46.4408766,0 7.5139725,46.4409062,0 7.5141227,46.4408914,0 7.5142514,46.4410171,0 7.5144445,46.4410171,0 7.5145304,46.4409284,0 7.5143909,46.4408397,0 7.5142836,46.4407953,0 7.5143158,46.4407362,0 7.5144231,46.4407214,0 7.5145196,46.44064,0 7.5144982,46.4405587,0 7.5145733,46.4404626,0 7.5146591,46.4404035,0 7.5147878,46.4403739,0 7.5150453,46.4404404,0 7.5154423,46.4404774,0 7.5164401,46.4404996,0 7.5171911,46.44064,0 7.5178778,46.4407953,0 7.5183606,46.4408101,0 7.5187575,46.4408692,0 7.5189292,46.4410615,0 7.5189936,46.4412389,0 7.5191545,46.4414015,0 7.5193369,46.4414607,0 7.5194871,46.4415051,0 7.5194978,46.4416603,0 7.5195836,46.4425105,0 7.5197017,46.4426732,0 7.5197553,46.4427915,0 7.5197124,46.4428876,0 7.5196587,46.4429911,0 7.5196802,46.4430798,0 7.519766,46.4431611,0 7.5198626,46.4432129,0 7.520045,46.4432202,0 7.5200772,46.4431685,0 7.5200772,46.443065,0 7.5201308,46.4429837,0 7.5202059,46.4429615,0 7.520281,46.443028,0 7.5203454,46.4431389,0 7.5204419,46.4432055,0 7.5206673,46.4432572,0 7.5207531,46.4432868,0 7.5210106,46.4436712,0 7.5212895,46.4438265,0 7.5215899,46.4439817,0 7.522062,46.4441665,0 7.5224375,46.4443735,0 7.5228774,46.4447875,0 7.5237679,46.4458003,0 7.52424,46.4464509,0 7.5244653,46.4468353,0 7.5245833,46.447094,0 7.5246775,46.4471938,0 + + + + , Summer Walking Path + #style-Summer_Hiking + + relativeToGround + 7.6100216,46.4187252,0 7.6103389,46.4186035,0 7.6105213,46.4185296,0 7.6110684,46.4183669,0 7.6114761,46.4183669,0 7.6117336,46.4184704,0 7.6120769,46.4184926,0 7.6127421,46.4184482,0 7.6133,46.4182855,0 7.6139974,46.4180266,0 7.6144587,46.4178121,0 7.6147591,46.4174201,0 7.6151239,46.4171465,0 7.6154672,46.4168728,0 7.6156711,46.4165769,0 7.6159179,46.4162663,0 7.6159822,46.4164512,0 7.61595,46.4166213,0 7.6161937,46.4166891,0 + + + + , Summer Walking Path + #style-Summer_Hiking + + relativeToGround + 7.5100736,46.4420964,0 7.5100993,46.4420041,0 7.5101369,46.4419339,0 7.5102764,46.4418525,0 7.5104158,46.4417195,0 7.5105124,46.4415457,0 7.510609,46.4413054,0 7.5107484,46.4410836,0 7.5108396,46.4409321,0 7.5108504,46.4408027,0 7.5108396,46.4406437,0 7.5109362,46.4405624,0 7.5110381,46.4404293,0 7.511081,46.4403406,0 7.511081,46.4402223,0 7.5110435,46.4400375,0 7.5111132,46.4398157,0 7.5112098,46.4396456,0 7.5112849,46.439483,0 7.5112795,46.4392907,0 7.5113332,46.4391281,0 7.5113654,46.4389802,0 7.5114136,46.4388952,0 7.5115102,46.4387695,0 7.5116175,46.4386438,0 7.5116765,46.4385477,0 7.5116938,46.4384565,0 7.5116952,46.4384008,0 + + + + , Summer Walking Path + #style-Summer_Hiking + + relativeToGround + 7.4169002,46.3606281,0 7.4166642,46.3605984,0 7.4164925,46.360554,0 7.4164604,46.3606577,0 7.4166857,46.3606503,0 7.4167822,46.3607836,0 7.4165784,46.3607539,0 7.4163316,46.3607317,0 7.4161063,46.3607391,0 7.4159132,46.3608206,0 7.4157093,46.3608798,0 7.4156879,46.3609687,0 7.4153875,46.3611167,0 7.4151622,46.361213,0 7.4150012,46.361213,0 7.4147867,46.36125,0 7.4149047,46.3613537,0 7.4150763,46.3613907,0 7.4152587,46.3614499,0 7.4150978,46.3614869,0 7.4149369,46.361524,0 7.4147974,46.3614795,0 7.414733,46.3615314,0 7.4148403,46.3615906,0 7.4149691,46.3616794,0 7.4150871,46.3616868,0 7.4153446,46.3615462,0 7.4155377,46.3614573,0 7.4157093,46.3613759,0 7.4159239,46.3613315,0 7.4161385,46.3613018,0 7.4161707,46.3613463,0 7.4160527,46.3614055,0 7.4161278,46.3614425,0 7.4163209,46.3614351,0 7.4164818,46.3613685,0 7.4166213,46.3613463,0 7.4165998,46.3614351,0 7.4164818,46.3615536,0 7.4163423,46.361672,0 7.4162458,46.3617535,0 7.4164282,46.3618942,0 7.416632,46.3621459,0 7.4167393,46.3623014,0 7.417029,46.3625901,0 7.4171255,46.3627012,0 7.4172221,46.3628197,0 7.4173401,46.3628863,0 7.4172865,46.3629825,0 7.4172221,46.3629603,0 7.4171363,46.3628863,0 7.4170183,46.3627974,0 7.416911,46.3627752,0 7.4168573,46.3628271,0 7.4169324,46.3629011,0 7.4170183,46.3629825,0 7.4171363,46.3631232,0 7.4172972,46.3632417,0 7.4173616,46.3634638,0 7.4175762,46.3635674,0 7.4176298,46.3636563,0 7.4178444,46.3639598,0 7.4180268,46.3641449,0 7.4182306,46.3643522,0 7.4183164,46.3644707,0 7.4183272,46.3645447,0 7.4182306,46.3645669,0 7.4181126,46.3645077,0 7.4181448,46.3645595,0 7.4181448,46.3646188,0 7.4181233,46.3646928,0 7.4182199,46.3647964,0 7.4183594,46.3649223,0 7.418531,46.3650186,0 7.418531,46.3651148,0 7.4184559,46.3652629,0 7.418413,46.3653295,0 7.4184237,46.3653739,0 7.4185096,46.3653369,0 7.418531,46.3652777,0 7.418649,46.3652184,0 7.4187885,46.3652333,0 7.4189709,46.3651962,0 7.4191426,46.3650926,0 7.4192284,46.3649815,0 7.4193142,46.3648705,0 7.4194752,46.3648853,0 7.4196468,46.3649741,0 7.4197327,46.3650778,0 7.4198829,46.365063,0 7.4199043,46.3650111,0 7.4201618,46.3650334,0 7.4202906,46.3651296,0 7.4204193,46.3652407,0 7.4204729,46.3653739,0 7.42043,46.3654776,0 7.4204837,46.3655294,0 7.4204944,46.3657145,0 7.4204837,46.3659366,0 7.4203657,46.3660772,0 7.4202369,46.3662179,0 7.4202047,46.3664326,0 7.4202798,46.3665585,0 7.4203657,46.3667436,0 7.420548,46.3668916,0 7.4206231,46.3670619,0 7.4206768,46.367284,0 7.4207304,46.3673802,0 7.4210845,46.3674617,0 7.4212883,46.3675801,0 7.4213313,46.3676542,0 7.4215244,46.3676393,0 7.4217711,46.3676023,0 7.4220715,46.3675431,0 7.4225222,46.3676023,0 7.4228977,46.3677652,0 7.4231552,46.3678837,0 7.4233391,46.3679547,0 7.4234234,46.3679873,0 7.4236701,46.3680095,0 7.4238203,46.3680317,0 7.4239276,46.3681206,0 7.4240564,46.3683204,0 7.4241744,46.3684759,0 7.4241637,46.3685721,0 7.4240778,46.3686832,0 7.4240993,46.368809,0 7.4239598,46.3689275,0 7.4237882,46.3690681,0 7.4236701,46.3692014,0 7.4236701,46.3693347,0 7.4238203,46.3695271,0 7.4239169,46.3695567,0 7.4241851,46.3695864,0 7.4244212,46.3695715,0 7.4245499,46.3696308,0 7.4245714,46.3697566,0 7.4245606,46.3698381,0 7.4246357,46.3699639,0 7.4247645,46.3700379,0 7.4248289,46.3700749,0 7.4249342,46.3700574,0 7.4250399,46.37001,0 7.4251498,46.3700325,0 7.4253692,46.3700204,0 7.4254505,46.3701257,0 7.4255205,46.3701847,0 7.4254798,46.3702635,0 7.4255506,46.3704363,0 7.4256657,46.3705709,0 7.4258266,46.3705561,0 7.4259017,46.3705783,0 7.4259125,46.370682,0 7.4259339,46.3707634,0 7.4260734,46.3707856,0 7.4262451,46.370793,0 7.4263845,46.3708448,0 7.426376,46.3709474,0 + + + + Lämmernweg süd + Lämmernweg süd, Summer Walking Path + #style-Summer_Hiking + + relativeToGround + 7.611382,46.3964875,0 7.6114292,46.3962389,0 7.6108557,46.3963143,0 7.6102376,46.3963577,0 7.6097209,46.3964049,0 7.6097625,46.3965224,0 7.6089079,46.3964609,0 7.607996,46.3964387,0 7.6073737,46.3964387,0 7.6069124,46.3964239,0 7.6068694,46.3963499,0 7.6065261,46.3963277,0 7.6062794,46.3964387,0 7.606054,46.3964387,0 7.6053889,46.3962907,0 7.6048417,46.3963721,0 7.6044233,46.3964979,0 7.6042623,46.3965866,0 7.603919,46.3966754,0 7.6035435,46.3966236,0 7.6030929,46.3966902,0 7.6027496,46.3967938,0 7.602299,46.396927,0 7.6021058,46.396964,0 7.6015479,46.3968752,0 7.6010115,46.3967198,0 7.6008398,46.3966162,0 7.6006789,46.396631,0 7.6003678,46.3965053,0 7.6000566,46.3964017,0 7.5991554,46.3964313,0 7.5987155,46.3963499,0 7.5981791,46.3964017,0 7.5978327,46.3964729,0 + + + + , Summer Walking Path + #style-Summer_Hiking + + relativeToGround + 7.5890918,46.3955507,0 7.5891478,46.3953803,0 + + + + , Summer Walking Path + #style-Summer_Hiking + + relativeToGround + 7.5890918,46.3955507,0 7.5889469,46.3955137,0 7.5887431,46.3955433,0 7.5885929,46.3955359,0 7.5882281,46.3956617,0 7.5881798,46.3956099,0 7.5879277,46.3957505,0 7.5879009,46.3958134,0 7.5877989,46.3958171,0 7.5878043,46.3958615,0 7.5876916,46.3958282,0 7.5877077,46.3959318,0 7.587925,46.3962126,0 + + + + Bunkertunnel + Bunkertunnel, Summer Walking Path + #style-Summer_Hiking + + relativeToGround + 7.6097625,46.3965224,0 7.6108557,46.3963143,0 + + + + , Summer Walking Path + #style-Summer_Hiking + + relativeToGround + 7.618857,46.3719589,0 7.6188592,46.3720632,0 7.6189053,46.3722772,0 7.6187819,46.3724918,0 + + + + , Summer Walking Path + #style-Summer_Hiking + + relativeToGround + 7.4673625,46.4564555,0 7.467345,46.456468,0 7.467191,46.456466,0 7.467011,46.456589,0 7.4668276,46.4566405,0 + + + + , Summer Walking Path + #style-Summer_Hiking + + relativeToGround + 7.6086644,46.4388706,0 7.6059896,46.4390346,0 7.6040186,46.4382136,0 + + + + , Summer Walking Path + #style-Summer_Hiking + + relativeToGround + 7.6188287,46.4183578,0 7.619399,46.41861,0 7.6196936,46.4187362,0 7.6200723,46.418852,0 7.6203984,46.4190413,0 7.6208718,46.4191045,0 7.6213242,46.4191045,0 7.6217029,46.4191045,0 7.6223026,46.4190203,0 7.6225795,46.4190323,0 + + + + , Summer Walking Path + #style-Summer_Hiking + + relativeToGround + 7.545644,46.4989186,0 7.5453618,46.4983976,0 7.5448129,46.497796,0 7.5442378,46.4967916,0 7.5442063,46.4956444,0 + + + + Gemmiweg + Gemmiweg, Summer Walking Path + #style-Summer_Hiking + + relativeToGround + 7.6165875,46.3938373,0 7.6168364,46.3943921,0 7.6173565,46.3951755,0 7.6172441,46.395445,0 7.6169051,46.3958102,0 7.616989,46.3961054,0 7.6171827,46.3958529,0 7.6174721,46.3954421,0 7.617529,46.3951648,0 7.6173761,46.3949876,0 7.6176494,46.3952003,0 7.6175373,46.3949445,0 7.6173232,46.3945064,0 7.6170816,46.3940832,0 7.6167553,46.3939985,0 7.6167307,46.3937498,0 + + + + Gemmiweg + Gemmiweg, Summer Walking Path + #style-Summer_Hiking + + relativeToGround + 7.6167307,46.3937498,0 7.6172078,46.3936647,0 7.6176542,46.3933273,0 7.6179288,46.3933273,0 7.6176112,46.3937595,0 7.6179288,46.3941146,0 7.6181262,46.3942746,0 7.6181691,46.3937713,0 7.6181863,46.3935464,0 7.6189588,46.3927649,0 7.6184722,46.3925455,0 7.6182284,46.3927317,0 7.6178116,46.3929224,0 7.6166641,46.3926529,0 7.6163907,46.3927661,0 7.6159441,46.3927095,0 7.6158621,46.3925335,0 7.6153802,46.3923545,0 7.6151785,46.3920809,0 7.6151421,46.3918357,0 7.6153882,46.3920432,0 7.615616,46.3920683,0 7.6157618,46.3915529,0 7.6158803,46.3917729,0 7.6161628,46.3920935,0 7.6172656,46.3919866,0 7.6174935,46.3918483,0 7.6174265,46.391526,0 7.6177881,46.3912895,0 7.617637,46.3909179,0 7.6176299,46.3902353,0 7.6181192,46.3896255,0 7.6185741,46.3889151,0 7.618617,46.3885954,0 7.6186038,46.3882094,0 + + + + , Summer Walking Path + #style-Summer_Hiking + + relativeToGround + 7.4785053,46.4263539,0 7.4783109,46.4266478,0 + + + + Bonderlenbach Walking Path + Bonderlenbach Walking Path, Summer Walking Path + #style-Summer_Hiking + + relativeToGround + 7.5792169,46.4925621,0 7.5791509,46.4925641,0 + + + + Bonderlenbach Walking Path + Bonderlenbach Walking Path, Summer Walking Path + #style-Summer_Hiking + + relativeToGround + 7.5792169,46.4925621,0 7.5793125,46.4925286,0 7.5793674,46.4922433,0 7.579896,46.491972,0 7.580289,46.491577,0 7.580358,46.4913398,0 7.580717,46.4910715,0 7.5810337,46.4907202,0 7.5813065,46.4905421,0 7.5813831,46.4904028,0 7.5817008,46.4902111,0 7.582209,46.489783,0 7.582811,46.489678,0 7.583084,46.489476,0 7.583642,46.489351,0 7.584382,46.488724,0 7.584451,46.488496,0 7.584687,46.488298,0 7.584991,46.4884,0 7.585394,46.488367,0 7.586046,46.488033,0 7.586489,46.487635,0 7.586402,46.486841,0 7.586652,46.486558,0 7.587146,46.486256,0 7.5871827,46.4860238,0 + + + + , Summer Walking Path + #style-Summer_Hiking + + relativeToGround + 7.5835968,46.5163224,0 7.5835278,46.516243,0 7.5831875,46.5160665,0 7.582901,46.515494,0 7.5829329,46.5151783,0 7.583018,46.515011,0 7.582857,46.515017,0 7.582842,46.514962,0 7.582983,46.514806,0 7.583006,46.514618,0 7.5826838,46.5145655,0 + + + + , Summer Walking Path + #style-Summer_Hiking + + relativeToGround + 7.583998,46.516732,0 7.5836354,46.5165224,0 7.583146,46.51642,0 7.583074,46.516172,0 7.582901,46.516045,0 7.5828838,46.5161271,0 7.582968,46.516266,0 7.58253,46.516101,0 7.582413,46.516123,0 7.582236,46.516301,0 7.581972,46.516325,0 7.5813369,46.5161948,0 7.5811935,46.5160699,0 + + + + , Summer Walking Path + #style-Summer_Hiking + + relativeToGround + 7.5758881,46.4885517,0 7.57579,46.488698,0 7.575762,46.488936,0 7.575673,46.48907,0 7.5754732,46.4891609,0 7.5754081,46.4892532,0 7.5751268,46.4894422,0 7.574963,46.489548,0 7.574921,46.489618,0 7.574974,46.489689,0 7.575061,46.489711,0 7.575154,46.489709,0 7.575232,46.489819,0 7.57509,46.489989,0 7.575101,46.490052,0 7.5751655,46.4901109,0 + + + + , Summer Walking Path + #style-Summer_Hiking + + relativeToGround + 7.583616,46.5164476,0 7.5835968,46.5163224,0 + + + + , Summer Walking Path + #style-Summer_Hiking + + relativeToGround + 7.5836354,46.5165224,0 7.583616,46.5164476,0 + + + + , Summer Walking Path + #style-Summer_Hiking + + relativeToGround + 7.577443,46.4885782,0 7.577979,46.488368,0 7.578077,46.488296,0 7.578219,46.488228,0 7.578307,46.48821,0 7.578387,46.488215,0 7.578434,46.488189,0 7.578734,46.488188,0 7.578873,46.488171,0 7.578928,46.488196,0 7.579113,46.488162,0 7.579226,46.488174,0 7.579338,46.488153,0 7.579673,46.488129,0 7.579867,46.488075,0 7.580044,46.488002,0 7.580178,46.487914,0 7.580318,46.487883,0 7.580371,46.487925,0 7.5806,46.488021,0 7.5807961,46.4880853,0 7.5815952,46.4884243,0 + + + + , Summer Walking Path + #style-Summer_Hiking + + relativeToGround + 7.5900055,46.5210825,0 7.590046,46.521112,0 7.590122,46.521211,0 7.590218,46.521275,0 7.590325,46.521253,0 7.590386,46.521219,0 7.590563,46.521275,0 7.590713,46.521298,0 7.590841,46.521428,0 7.590872,46.521404,0 7.590961,46.521528,0 7.590941,46.521642,0 7.590964,46.521732,0 7.591091,46.521789,0 7.591134,46.521776,0 7.5912266,46.5218003,0 7.591198,46.521758,0 7.591338,46.521783,0 7.591454,46.521725,0 7.591541,46.5217,0 7.591606,46.521663,0 7.5914358,46.5216049,0 + + + + , Summer Walking Path + #style-Summer_Hiking + + relativeToGround + 7.5788446,46.5204993,0 7.5787501,46.5204233,0 7.5786342,46.5202629,0 7.5782994,46.5200566,0 + + + + , Summer Walking Path + #style-Summer_Hiking + + relativeToGround + 7.5797057,46.509266,0 7.579856,46.508887,0 7.579984,46.509007,0 7.580344,46.509065,0 7.580417,46.509061,0 7.5806678,46.5089152,0 + + + + , Summer Walking Path + #style-Summer_Hiking + + relativeToGround + 7.5751655,46.4901109,0 7.575234,46.490227,0 7.575412,46.490443,0 7.575564,46.490731,0 7.575587,46.491121,0 7.575613,46.491252,0 7.5756106,46.4917412,0 + + + + , Summer Walking Path + #style-Summer_Hiking + + relativeToGround + 7.5718566,46.492604,0 7.5719484,46.4925554,0 7.5720948,46.4923908,0 7.5721505,46.4922987,0 7.5722725,46.4920071,0 7.5723428,46.4917874,0 7.5724562,46.4915977,0 + + + + , Summer Walking Path + #style-Summer_Hiking + + relativeToGround + 7.5299338,46.4850755,0 7.5298545,46.4853025,0 7.5296791,46.4856935,0 7.5292968,46.4861218,0 7.528969,46.4863518,0 7.5287592,46.4867026,0 7.5286528,46.4871826,0 7.5284947,46.4876225,0 7.5283193,46.4879071,0 7.5284171,46.4881687,0 7.5285206,46.4886632,0 7.5285629,46.4889495,0 + + + + , Summer Walking Path + #style-Summer_Hiking + + relativeToGround + 7.5611621,46.4717378,0 7.5611814,46.4715986,0 + + + + , Summer Walking Path + #style-Summer_Hiking + + relativeToGround + 7.5611814,46.4715986,0 7.5612549,46.47139,0 + + + + , Summer Walking Path + #style-Summer_Hiking + + relativeToGround + 7.5886158,46.521106,0 7.5882453,46.5211526,0 + + + + , Summer Walking Path + #style-Summer_Hiking + + relativeToGround + 7.5284782,46.4890732,0 7.5280137,46.4891138,0 7.527826,46.4891156,0 7.5277837,46.4891524,0 7.5275537,46.4892205,0 7.5273587,46.4891892,0 7.5272741,46.4893364,0 7.5271434,46.4897762,0 7.5270835,46.4902156,0 7.5269728,46.4906006,0 7.5266136,46.4908715,0 7.5262039,46.4908149,0 7.5263157,46.4908679,0 7.5264182,46.4909433,0 7.5267561,46.4910387,0 7.5270399,46.4912235,0 7.5267326,46.4911435,0 7.5260461,46.4911093,0 7.5256069,46.4911246,0 7.5252571,46.491094,0 7.5251971,46.4911317,0 7.525568,46.4912801,0 7.5258895,46.4914583,0 7.5259861,46.4915802,0 7.5258021,46.4915365,0 7.5253812,46.4915848,0 7.52505,46.4916009,0 7.5247787,46.4916952,0 7.5245414,46.4917116,0 7.524222,46.4917881,0 7.5237731,46.4918337,0 7.5236274,46.491791,0 7.5233992,46.491741,0 7.5236818,46.4918764,0 7.5238452,46.4919647,0 7.5240836,46.4920324,0 7.524353,46.4921531,0 7.5246857,46.4922017,0 7.5248211,46.4922959,0 7.5250536,46.4923989,0 7.5248755,46.4924784,0 7.5244443,46.4924814,0 7.524403,46.4925123,0 7.5242691,46.492577,0 7.5237893,46.4925329,0 7.5235891,46.4925049,0 7.5238614,46.4927345,0 7.5240395,46.4927875,0 7.5243118,46.4928302,0 7.5246018,46.4928626,0 7.5247121,46.492945,0 7.5246121,46.4931776,0 7.5243265,46.4931246,0 7.5238172,46.4931422,0 7.5234772,46.4932129,0 7.5231328,46.4933763,0 7.5232402,46.4933851,0 7.5236221,46.4934281,0 7.5239302,46.4936089,0 7.5240479,46.4936231,0 7.5240696,46.4936758,0 7.5238868,46.4936918,0 7.5236372,46.4936994,0 7.5236023,46.493836,0 7.5236598,46.4939707,0 7.5235581,46.4940658,0 7.523445,46.4942024,0 7.5233395,46.4941902,0 7.5232161,46.4941911,0 7.5231822,46.4942589,0 7.5232651,46.4943202,0 7.5232142,46.4943842,0 7.5230324,46.4944304,0 7.5229234,46.4944286,0 7.5227633,46.4945022,0 7.5226253,46.4946585,0 7.5224616,46.4946052,0 7.5223549,46.49455,0 7.5219556,46.4946733,0 7.5218802,46.4946641,0 7.5215729,46.4948205,0 7.5213668,46.4948996,0 7.5210725,46.4949952,0 7.5210246,46.4950946,0 7.5208793,46.4951572,0 7.5207707,46.495297,0 7.5205665,46.4954147,0 7.5203144,46.4955049,0 7.5201084,46.4955674,0 7.5197592,46.4957073,0 7.5195457,46.4957735,0 7.5193485,46.495959,0 7.5191233,46.4960591,0 7.5189143,46.4961753,0 7.5186096,46.4961488,0 7.5183255,46.4961327,0 7.5182475,46.4963063,0 7.5181504,46.4963063,0 7.5177485,46.4962975,0 7.517647,46.496402,0 7.5174233,46.4964462,0 7.5172996,46.4963299,0 7.517151,46.4963947,0 7.5170465,46.4963431,0 7.5167477,46.4963564,0 7.516443,46.496405,0 7.5161869,46.4963446,0 7.5158395,46.4965286,0 7.5156643,46.4966449,0 7.5156084,46.4966199,0 7.5156791,46.4965227,0 7.5154671,46.4964005,0 7.5152232,46.4962689,0 7.5150141,46.4961521,0 7.5148907,46.4961351,0 7.5147042,46.4961643,0 7.5146712,46.4961898,0 7.5145073,46.4963085,0 7.5143764,46.4964545,0 7.5141371,46.4964385,0 7.5139025,46.4963649,0 7.5138335,46.496289,0 7.5136509,46.4960829,0 7.5135387,46.4958989,0 7.5132461,46.4956174,0 7.5126905,46.4953966,0 7.5124256,46.495507,0 7.5121735,46.4952881,0 7.5119969,46.4951593,0 7.5116933,46.4950654,0 7.5115645,46.4947784,0 7.5112363,46.4945931,0 7.5108051,46.4944099,0 7.5108554,46.4945788,0 7.510841,46.4947764,0 7.510956,46.4949956,0 7.5109704,46.4950711,0 7.5110997,46.4952723,0 7.5109883,46.4954376,0 7.511053,46.4958078,0 7.5109272,46.4961563,0 7.5107547,46.4965696,0 7.5107691,46.4969756,0 7.5109488,46.4972955,0 7.5109074,46.4975939,0 7.5110763,46.4978024,0 7.511335,46.4978778,0 7.5117806,46.4980863,0 7.5121004,46.4982048,0 7.5128551,46.4984564,0 7.5132216,46.4986756,0 7.5136348,46.4988301,0 7.5138576,46.4990457,0 7.5140409,46.4990134,0 7.51435,46.4988589,0 7.5148602,46.498805,0 7.5153813,46.4989631,0 7.5159167,46.4989128,0 7.5160101,46.4990709,0 7.5162761,46.4990924,0 7.5165851,46.4990206,0 7.5168331,46.4990996,0 7.5168834,46.4992721,0 7.5167971,46.4995776,0 7.5168546,46.4998758,0 7.5168906,46.5000052,0 7.5167828,46.5001849,0 7.5167756,46.5003574,0 7.5168474,46.5005442,0 7.5171313,46.500882,0 7.5173218,46.5013815,0 7.5174044,46.5013959,0 7.5175446,46.5015612,0 7.5174763,46.501863,0 7.5175554,46.5020643,0 7.5176703,46.5023625,0 7.5179291,46.5025638,0 7.518177,46.5025242,0 7.5182489,46.5026213,0 7.5183819,46.5027219,0 7.5187161,46.5030812,0 7.5189101,46.5031818,0 7.5191617,46.5032896,0 7.5191329,46.5035232,0 7.5191509,46.5037173,0 7.5192156,46.5039437,0 7.5195857,46.5041341,0 7.5199414,46.5042383,0 7.520272,46.5041521,0 7.5204841,46.504224,0 7.5205775,46.504551,0 7.521095,46.5044432,0 7.521731,46.5046731,0 7.5218819,46.5047342,0 7.5222377,46.5048349,0 7.5229205,46.5051367,0 7.5223563,46.5051475,0 7.5217454,46.5051259,0 7.5216268,46.5053739,0 7.5219969,46.5054673,0 7.5225683,46.5055859,0 7.5230606,46.5055787,0 7.5233716,46.5055941,0 7.5236641,46.5057762,0 7.5238187,46.5057486,0 7.5240744,46.505561,0 7.5243154,46.5055941,0 7.5244645,46.505561,0 7.524794,46.505601,0 7.5248928,46.5054393,0 7.5251264,46.5055381,0 7.5252477,46.5053495,0 7.5253644,46.505345,0 7.5256025,46.5051384,0 7.5257732,46.505062,0 7.5259619,46.5051923,0 7.5262943,46.5051923,0 7.5263976,46.505071,0 7.5265009,46.5048464,0 7.526739,46.5049272,0 7.5269905,46.5048913,0 7.526986,46.5047745,0 7.5270219,46.5046577,0 7.5272555,46.5044601,0 7.5275116,46.5043253,0 7.5277047,46.5041142,0 7.5281359,46.5039884,0 7.5287378,46.5040693,0 7.5289535,46.5041412,0 7.5295239,46.5039345,0 7.5299327,46.5037818,0 7.5304987,46.5034225,0 7.5309434,46.5031035,0 7.5316388,46.5026561,0 7.5320087,46.5024271,0 7.532634,46.502154,0 7.5331537,46.501837,0 7.5337702,46.5015199,0 7.5343955,46.5011059,0 7.5349328,46.5007713,0 7.5353291,46.500463,0 7.535699,46.4998289,0 7.5358135,46.4996263,0 7.5366414,46.4992212,0 7.5413582,46.4976497,0 7.542458,46.4973265,0 7.5428044,46.497004,0 7.5429425,46.4974133,0 7.5430314,46.4972745,0 7.5432425,46.4975431,0 7.5432637,46.4974015,0 7.543431,46.4975358,0 7.5435531,46.4973951,0 7.5442586,46.4980313,0 7.5453618,46.4983976,0 + + + + , Summer Walking Path + #style-Summer_Hiking + + relativeToGround + 7.5284723,46.4889619,0 7.5284782,46.4890732,0 7.5284879,46.4891875,0 + + + + , Summer Walking Path + #style-Summer_Hiking + + relativeToGround + 7.589224,46.5211243,0 7.5887088,46.5208145,0 7.5886158,46.521106,0 + + + + , Summer Walking Path + #style-Summer_Hiking + + relativeToGround + 7.5882453,46.5211526,0 7.587849,46.5206548,0 7.5876898,46.5205699,0 + + + + , Summer Walking Path + #style-Summer_Hiking + + relativeToGround + 7.5811876,46.5165553,0 7.581105,46.516431,0 7.581328,46.516318,0 7.5813369,46.5161948,0 + + + + , Summer Walking Path + #style-Summer_Hiking + + relativeToGround + 7.5572902,46.4904128,0 7.5569738,46.4903625,0 7.5567747,46.4902998,0 7.5565619,46.4901569,0 7.5564031,46.4900393,0 + + + + , Summer Walking Path + #style-Summer_Hiking + + relativeToGround + 7.5442063,46.4956444,0 7.5441027,46.4955627,0 7.543313,46.4953914,0 7.5417852,46.4952141,0 7.5384722,46.4958877,0 7.5378027,46.4959527,0 7.5386696,46.4954209,0 7.5404806,46.493666,0 7.5404463,46.4936187,0 7.5395536,46.4938492,0 7.539073,46.4940796,0 7.5377598,46.4944932,0 7.5374851,46.4946528,0 7.5371332,46.4947178,0 7.5368843,46.4946941,0 7.5364552,46.4944578,0 7.5350304,46.4942333,0 7.5356312,46.4942155,0 7.5346699,46.4938078,0 7.5345669,46.4938137,0 7.5337944,46.4945405,0 7.5335026,46.4946173,0 7.5330992,46.494895,0 7.5331593,46.4944755,0 7.5328331,46.4943219,0 7.5328674,46.4940678,0 7.532258,46.4942569,0 7.5322065,46.4943692,0 7.5320606,46.4942096,0 7.5315456,46.4943987,0 7.5310993,46.4946941,0 7.5309277,46.4945701,0 7.5308332,46.4942392,0 7.5310907,46.4939733,0 7.5310049,46.4938196,0 7.531065,46.4936187,0 7.5308332,46.4932701,0 7.5307217,46.4932228,0 7.53055,46.4932642,0 7.5301724,46.4934533,0 7.5301552,46.4931578,0 7.5298548,46.4931697,0 7.5296059,46.4933469,0 7.52952,46.4935656,0 7.5293484,46.4932997,0 7.5293655,46.4931342,0 7.5288248,46.4932347,0 7.528739,46.4930987,0 7.528945,46.492951,0 7.5286531,46.4929747,0 7.5289192,46.4927147,0 7.528945,46.4924074,0 7.5291853,46.4921119,0 7.5283613,46.4921651,0 7.528327,46.4920529,0 7.528945,46.4914915,0 7.5293655,46.4912729,0 7.5293055,46.4911842,0 7.5288506,46.491261,0 7.5283957,46.4911842,0 7.5286875,46.4910306,0 7.5289364,46.4906938,0 + + + + , Summer Walking Path + #style-Summer_Hiking + + relativeToGround + 7.5797311,46.5157548,0 7.5795577,46.5157983,0 7.5794887,46.5156381,0 7.5798922,46.5156733,0 7.5802352,46.5155193,0 7.5807117,46.5159997,0 7.5811935,46.5160699,0 + + + + , Summer Walking Path + #style-Summer_Hiking + + relativeToGround + 7.6240644,46.4319535,0 7.6229314,46.4322197,0 7.6225538,46.4321901,0 7.6223005,46.4319807,0 7.6220817,46.4317997,0 7.6217384,46.4311371,0 7.6211719,46.4303385,0 7.6206312,46.429321,0 7.6206397,46.428824,0 7.6206655,46.4282561,0 7.6202878,46.4277355,0 7.6201591,46.427138,0 7.6203136,46.4265109,0 7.6203994,46.4260021,0 7.6208887,46.4251619,0 7.621129,46.4249194,0 7.6213779,46.4249312,0 7.6214637,46.4246768,0 7.6217555,46.4245171,0 7.622056,46.424523,0 7.6221847,46.4243218,0 7.6222705,46.4235054,0 7.6223564,46.4232628,0 7.6228848,46.4228375,0 7.623146,46.4219611,0 7.6233162,46.4217127,0 7.6231975,46.4203281,0 7.6232747,46.4200559,0 7.6235705,46.4197968,0 7.6237812,46.4196122,0 7.6234722,46.4190027,0 7.6241075,46.4180133,0 7.6237558,46.4135276,0 7.622349,46.411426,0 7.622269,46.4103269,0 7.6222984,46.4100075,0 7.6223212,46.4098275,0 7.6221581,46.4095408,0 7.6220343,46.4092423,0 7.6220442,46.4087396,0 7.6219789,46.408495,0 7.622036,46.408225,0 7.6220138,46.4081401,0 7.6220272,46.4080307,0 7.6219912,46.4078595,0 7.6218334,46.4076621,0 7.621853,46.4075699,0 7.6218432,46.4075069,0 7.6218171,46.4073382,0 7.6216637,46.407201,0 7.6216116,46.4067555,0 7.6214745,46.4064181,0 7.6213817,46.4061354,0 7.6211026,46.4059412,0 7.6208351,46.4056105,0 7.6204991,46.4050999,0 7.6203001,46.4049064,0 7.6200956,46.4045367,0 7.6191214,46.4039463,0 7.6187152,46.4035454,0 7.6185974,46.4029784,0 7.6183611,46.4027152,0 7.618025,46.4024362,0 7.6177216,46.4020088,0 7.6173518,46.4015782,0 7.6171968,46.401491,0 7.6171248,46.4012666,0 7.6169562,46.4010242,0 7.616789,46.4008723,0 7.6166055,46.4005798,0 7.6163119,46.4004477,0 7.6162257,46.4002455,0 7.6159082,46.4001664,0 7.6158021,46.400068,0 7.615741,46.3999246,0 7.6155345,46.3998258,0 7.6155034,46.3995861,0 7.6153372,46.3993537,0 7.6151007,46.3993059,0 7.6147908,46.3988956,0 7.614583,46.39872,0 7.6144629,46.3985904,0 7.6144107,46.398504,0 7.6144451,46.3984215,0 7.6149668,46.3984892,0 7.6159224,46.3981975,0 7.6160369,46.3979777,0 7.6162827,46.3980041,0 + + + + , Summer Walking Path + #style-Summer_Hiking + + relativeToGround + 7.5939523,46.4441727,0 7.5941669,46.4450295,0 7.5934587,46.4457548,0 7.5933515,46.4466271,0 7.5945316,46.4482231,0 7.5945316,46.4490074,0 7.594943,46.450099,0 7.5953899,46.4508259,0 7.5959049,46.4512694,0 7.5969564,46.4515798,0 7.5982438,46.4518016,0 7.5986526,46.4521268,0 7.5989734,46.4519199,0 7.5995956,46.4519199,0 7.6003692,46.4512982,0 7.6023637,46.4513285,0 7.6027285,46.4516685,0 7.6031576,46.451639,0 7.6036941,46.4516537,0 7.6038443,46.4518311,0 7.6055823,46.4522155,0 7.606784,46.4522296,0 7.6084362,46.451313,0 7.6090166,46.4513573,0 7.609831,46.452407,0 7.6112472,46.4526147,0 7.6135442,46.4523486,0 7.6140581,46.4528652,0 7.6154314,46.4531321,0 7.6163122,46.4537966,0 7.6164828,46.4533383,0 7.6173626,46.4528956,0 7.6181136,46.4534869,0 7.6183078,46.4541078,0 7.6189075,46.4544034,0 7.6193582,46.4541373,0 7.6189075,46.4536938,0 7.6189505,46.4526295,0 7.6184999,46.451639,0 7.6174935,46.4511659,0 7.6163766,46.4503372,0 7.6160537,46.4500571,0 7.6155398,46.4499085,0 7.6158266,46.4496374,0 + + + + , Summer Walking Path + #style-Summer_Hiking + + relativeToGround + 7.565617,46.454428,0 7.5666152,46.4552017,0 7.5666581,46.4555121,0 7.5668942,46.4560583,0 7.5663148,46.4560591,0 7.5659082,46.4558226,0 7.5657784,46.4563547,0 7.5656925,46.4567539,0 7.5652732,46.457071,0 + + + + , Summer Walking Path + #style-Summer_Hiking + + relativeToGround + 7.5631545,46.4467541,0 7.5632249,46.4472628,0 7.5633107,46.4479429,0 7.5632249,46.4485269,0 7.5631498,46.449,0 7.5635575,46.4492214,0 7.5643198,46.4494214,0 7.5645982,46.4497762,0 7.5646202,46.4501898,0 7.5648128,46.4507002,0 7.5644372,46.4508776,0 7.5647162,46.4511359,0 7.5650917,46.4512546,0 7.5650702,46.4513876,0 7.5658749,46.4517424,0 7.5653385,46.4518016,0 7.5646947,46.4515503,0 7.5639115,46.4515724,0 7.5640939,46.4518459,0 7.5642225,46.4520855,0 + + + + , Summer Walking Path + #style-Summer_Hiking + + relativeToGround + 7.5145904,46.4695704,0 7.5139015,46.469419,0 7.5126127,46.4689973,0 7.510378,46.4680514,0 7.5095656,46.4678181,0 7.5084436,46.4667202,0 7.5071567,46.4661894,0 7.505739,46.4654072,0 7.5052464,46.4648341,0 7.5041354,46.4642962,0 7.5039997,46.4641152,0 7.5025871,46.4638186,0 7.5017828,46.463507,0 7.5013203,46.4635723,0 7.5007337,46.4632858,0 7.5001289,46.4627517,0 7.5002388,46.4623825,0 7.5000975,46.462029,0 7.4998932,46.4618562,0 7.4996275,46.4618288,0 7.4998608,46.461322,0 7.4996878,46.4611049,0 7.4994787,46.4610968,0 7.4982335,46.4604124,0 7.4974418,46.4602679,0 7.4968574,46.4600731,0 7.4967003,46.4600542,0 7.4962353,46.4601925,0 7.4959148,46.4601799,0 7.4958959,46.4600102,0 7.4954686,46.4593819,0 7.4951482,46.4591054,0 7.4939668,46.4584896,0 7.4938194,46.4583292,0 7.4938408,46.4580558,0 7.4937617,46.457859,0 7.4935726,46.4576419,0 7.4935034,46.4572164,0 7.4935082,46.4569102,0 7.4938086,46.4566589,0 7.4937872,46.4564667,0 7.4935726,46.4563115,0 7.4935941,46.4561267,0 7.4937121,46.4559789,0 7.4936799,46.4558606,0 7.4935726,46.4557424,0 7.4935835,46.4556522,0 7.4936799,46.4554763,0 7.4939267,46.4554098,0 7.4940447,46.4552915,0 7.4940447,46.455055,0 7.494128,46.454872,0 7.4943129,46.4547002,0 7.4943987,46.4543306,0 7.4945216,46.4540381,0 7.4947635,46.4537097,0 7.49497,46.4533356,0 7.4952249,46.4530888,0 7.4955682,46.4528375,0 7.4957291,46.4526601,0 7.4961583,46.4523645,0 7.496523,46.4521723,0 7.4967269,46.4519653,0 7.4968664,46.4516844,0 7.4972955,46.4512261,0 7.497553,46.4510192,0 7.4976818,46.4508417,0 7.4979607,46.4505017,0 7.4983148,46.450036,0 7.498465,46.4495925,0 7.4987868,46.448979,0 7.4989048,46.4483802,0 7.4990336,46.4480401,0 7.4989048,46.4477666,0 7.4986366,46.4475153,0 7.4985508,46.4471974,0 7.4986581,46.44702,0 7.4987976,46.4468426,0 7.4988619,46.4466504,0 7.4989048,46.4463768,0 7.4988512,46.4461551,0 7.4986795,46.4456598,0 7.4985937,46.4454823,0 7.4984542,46.4452975,0 7.4983684,46.4451645,0 7.4984328,46.4450684,0 7.4986259,46.4449427,0 7.4988512,46.4447579,0 7.4990443,46.4444621,0 7.4992267,46.4443069,0 7.4994091,46.4442625,0 7.4995486,46.4441517,0 7.4995271,46.4439447,0 7.4995164,46.4437524,0 7.4996344,46.4434937,0 7.4999563,46.4431314,0 7.5002459,46.4427987,0 7.5003854,46.4426731,0 7.5006429,46.4424217,0 7.5009111,46.442296,0 7.5010721,46.4422369,0 7.5010506,46.442126,0 7.5009004,46.4420225,0 7.5007502,46.4419929,0 7.5006536,46.4419559,0 7.5006107,46.4419042,0 7.5006,46.4417711,0 7.5005678,46.441638,0 7.5004605,46.4415863,0 7.5004498,46.4415419,0 7.5004905,46.4414532,0 7.5005142,46.4414015,0 7.5005142,46.4412906,0 7.5004283,46.4413349,0 7.5002352,46.4413941,0 7.5001601,46.4413867,0 7.5000636,46.4412906,0 7.4999455,46.4411944,0 7.4997631,46.4411057,0 7.4996344,46.4411427,0 7.4993662,46.4411427,0 7.4991194,46.4410761,0 7.4987868,46.4409948,0 7.4984864,46.4408396,0 7.4982933,46.4406326,0 7.4977676,46.4403886,0 7.497435,46.4402481,0 7.4972097,46.4401963,0 7.4971668,46.4402851,0 7.4972526,46.4404255,0 7.4973492,46.4405438,0 7.4973062,46.4407139,0 7.4972848,46.4409209,0 7.4974135,46.4410909,0 7.4974886,46.441224,0 7.4975637,46.4414606,0 7.4976067,46.441638,0 7.4976603,46.4418303,0 7.4976603,46.4419485,0 7.4976388,46.4423404,0 7.4974564,46.4426879,0 7.4969522,46.442991,0 7.496566,46.4432497,0 7.4962226,46.443575,0 7.4961046,46.4437377,0 7.4959437,46.4437894,0 7.4956969,46.4437894,0 7.4954823,46.4438042,0 7.4951283,46.4438707,0 7.4948406,46.4440224,0 + + + + , Summer Walking Path + #style-Summer_Hiking + + relativeToGround + 7.4392764,46.5663903,0 7.4384143,46.5654398,0 7.4383285,46.5644956,0 7.4369552,46.5639645,0 7.4358394,46.5630793,0 7.4334362,46.5624892,0 7.4318054,46.561545,0 7.4313762,46.5601286,0 7.4301746,46.5598335,0 7.4283721,46.5600106,0 7.4268272,46.5598925,0 7.4253681,46.5597745,0 7.4243488,46.5597302,0 7.4237311,46.5597542,0 + + + + , Summer Walking Path + #style-Summer_Hiking + + relativeToGround + 7.6025506,46.5498156,0 7.6028653,46.5497501,0 7.6028389,46.54964,0 7.6031894,46.5495721,0 7.6035778,46.5494457,0 7.6037914,46.5494037,0 7.6040446,46.549479,0 7.6042355,46.5496465,0 7.6045554,46.5500853,0 7.604603,46.550328,0 7.6047518,46.55048,0 7.604832,46.550562,0 7.6048525,46.5506675,0 7.604877,46.550899,0 7.60495,46.550924,0 7.6051,46.551122,0 7.605191,46.551234,0 7.605464,46.551456,0 7.605639,46.551512,0 7.605784,46.551733,0 7.605943,46.551818,0 7.606095,46.552009,0 7.606435,46.552209,0 7.60649,46.552187,0 7.606543,46.552362,0 7.606685,46.552431,0 7.606803,46.552701,0 7.606729,46.552879,0 7.606867,46.553505,0 7.607232,46.553864,0 7.607482,46.553954,0 7.6077446,46.5542054,0 7.6081817,46.5543071,0 7.6082734,46.5543499,0 7.6085418,46.5544171,0 7.6087851,46.5544514,0 7.6090718,46.5545225,0 7.6093117,46.5546698,0 7.60936,46.5548103,0 7.6093995,46.5548684,0 + + + + , Summer Walking Path + #style-Summer_Hiking + + relativeToGround + 7.5849029,46.5115884,0 7.58481,46.5116222,0 7.5846421,46.5115122,0 7.5846131,46.5115867,0 7.5845005,46.5115558,0 7.5843126,46.5114523,0 7.584142,46.5112744,0 7.5839847,46.5111716,0 7.5834605,46.5109729,0 7.5833227,46.5109291,0 7.5831168,46.5109274,0 7.5827628,46.5107142,0 7.5825833,46.5106646,0 7.5823735,46.5106181,0 7.5820585,46.510608,0 + + + + , Summer Walking Path + #style-Summer_Hiking + + relativeToGround + 7.5620328,46.4912044,0 7.5624485,46.4911228,0 + + + + , Summer Walking Path + #style-Summer_Hiking + + relativeToGround + 7.5870469,46.5174702,0 7.5869142,46.5174469,0 7.5867683,46.5173533,0 7.5866814,46.5173433,0 7.5865673,46.5172963,0 7.5864711,46.5172304,0 7.5864401,46.5171526,0 7.5864303,46.5170445,0 7.5861962,46.5172065,0 7.5861315,46.5173462,0 7.5861156,46.5174414,0 7.5860537,46.5175235,0 7.5860095,46.5175323,0 7.5859337,46.5175202,0 7.5858968,46.5174461,0 7.5858323,46.5174205,0 7.5857805,46.5174263,0 7.5855589,46.517562,0 7.5853542,46.517598,0 7.5850387,46.5177229,0 7.5848903,46.5179375,0 7.5847829,46.5179983,0 7.5843919,46.5179006,0 + + + + , Summer Walking Path + #style-Summer_Hiking + + relativeToGround + 7.6168363,46.5609385,0 7.6169212,46.5608065,0 7.6169276,46.5608025,0 7.61705,46.560728,0 + + + + , Summer Walking Path + #style-Summer_Hiking + + relativeToGround + 7.580134,46.5028204,0 7.5796817,46.5029734,0 7.5793242,46.5029233,0 7.579196,46.503146,0 + + + + , Summer Walking Path + #style-Summer_Hiking + + relativeToGround + 7.580325,46.5027273,0 7.5804032,46.5026495,0 7.5801302,46.5020994,0 7.58,46.501965,0 7.5796142,46.5018839,0 7.578915,46.5018479,0 + + + + , Summer Walking Path + #style-Summer_Hiking + + relativeToGround + 7.489344,46.4970621,0 7.4894459,46.4970965,0 7.4895445,46.4970424,0 7.4896947,46.4970225,0 7.4897056,46.4969934,0 7.4898076,46.4969784,0 7.4899233,46.4970458,0 7.4901552,46.4970463,0 7.4902717,46.4970463,0 7.4903687,46.4970477,0 7.4904743,46.4971045,0 7.4906798,46.4971168,0 7.4907075,46.497224,0 7.4909032,46.4972302,0 7.4910534,46.4972581,0 7.4912316,46.4972956,0 7.4913717,46.4972872,0 7.4914988,46.4973022,0 7.4915715,46.4972667,0 7.4916332,46.4972247,0 7.4918452,46.4972365,0 7.4919829,46.4973915,0 7.4921941,46.4973733,0 7.4923721,46.4972622,0 7.4924976,46.4972333,0 7.492589,46.4971636,0 7.4927543,46.4971714,0 7.4929234,46.4971128,0 7.4930718,46.4971128,0 7.493159,46.4970928,0 7.4933313,46.4971206,0 7.4935232,46.4972342,0 7.4936332,46.4972942,0 7.4937682,46.4973207,0 7.4938968,46.497335,0 7.4940006,46.497385,0 7.4940255,46.497415,0 7.4942216,46.4974164,0 7.4942725,46.4973392,0 7.4944624,46.49736,0 7.4946274,46.4974493,0 7.4946928,46.4975107,0 7.4947986,46.4974885,0 7.4950799,46.4975193,0 7.495331,46.4974493,0 7.4954389,46.4975107,0 7.4958032,46.4975586,0 7.4961539,46.4975907,0 7.4963303,46.4975907,0 7.4966717,46.4976114,0 7.497279,46.4976768,0 7.4973942,46.4977876,0 7.4978249,46.497889,0 7.498132,46.4979726,0 7.4985585,46.4980312,0 7.4988159,46.4980747,0 7.4994832,46.4980947,0 7.5000228,46.4982469,0 7.5002407,46.4983733,0 7.5005136,46.4985698,0 7.5008405,46.4987991,0 7.5011591,46.4989948,0 7.5012587,46.499107,0 7.5016936,46.4992741,0 7.5021211,46.4993741,0 7.5019653,46.4996232,0 7.5019439,46.49983,0 7.5017293,46.4999925,0 7.5016005,46.5001254,0 7.5016864,46.5006276,0 7.5020297,46.5008491,0 7.5019009,46.5010855,0 7.5018795,46.5012627,0 7.5023086,46.50144,0 7.5024588,46.5017797,0 7.5025447,46.5019569,0 7.5025876,46.5021785,0 7.5025661,46.5024886,0 7.5030167,46.502592,0 7.503639,46.5028136,0 7.5043257,46.5030351,0 7.5048621,46.5028874,0 7.5052698,46.502784,0 7.5056775,46.5027692,0 7.5062354,46.5029908,0 7.5066646,46.5033453,0 7.5069864,46.5035963,0 7.5073512,46.5038179,0 7.5076731,46.5040247,0 7.5076516,46.5041871,0 7.5073297,46.5042314,0 7.5067718,46.5043496,0 7.5064714,46.5043939,0 7.5064929,46.504512,0 7.5067075,46.5046007,0 7.5070508,46.5047779,0 7.5070293,46.5050142,0 7.5067504,46.5051471,0 7.5064714,46.5053391,0 7.5061281,46.5055016,0 7.5052698,46.5057379,0 7.5047763,46.5060776,0 7.5041325,46.5065649,0 7.5035103,46.5070228,0 7.5029309,46.507392,0 7.5026091,46.5076578,0 7.5020726,46.5079089,0 7.5017507,46.5081156,0 7.5014933,46.5083076,0 7.5010641,46.5087211,0 7.5009783,46.5090903,0 7.5009139,46.5095777,0 7.500871,46.5099764,0 7.5004204,46.5104047,0 7.50012,46.5108477,0 7.4996479,46.5110987,0 7.4990042,46.5111578,0 7.4984248,46.511335,0 7.4983604,46.5116451,0 7.4982317,46.5120438,0 7.4977811,46.5122063,0 7.4976952,46.5123244,0 7.4978025,46.512413,0 7.4976952,46.5125607,0 7.4972876,46.5127674,0 7.4966224,46.5129889,0 7.4961288,46.5132843,0 7.4958284,46.5133286,0 7.4954422,46.5134467,0 7.4951847,46.5136239,0 7.4946268,46.5138011,0 7.4940904,46.513875,0 7.4938758,46.513934,0 7.4935539,46.5140965,0 7.4933608,46.5141408,0 7.492996,46.5139488,0 7.4925883,46.5139931,0 7.492245,46.5140965,0 7.491966,46.5142589,0 7.4917944,46.5144213,0 7.4914511,46.5144804,0 7.4911077,46.5143475,0 7.490743,46.5142294,0 7.4903996,46.5143179,0 7.4901636,46.5145247,0 7.4897774,46.5147314,0 7.4892838,46.5148643,0 7.4884255,46.5152482,0 7.487696,46.5154845,0 7.4874599,46.5156174,0 7.486945,46.515957,0 7.4861725,46.5160456,0 7.485636,46.5160751,0 7.4854834,46.5161258,0 + + + + , Summer Walking Path + #style-Summer_Hiking + + relativeToGround + 7.5810925,46.497901,0 7.580999,46.498044,0 7.580567,46.497948,0 7.5805282,46.4980101,0 7.580489,46.498073,0 7.5806637,46.4981927,0 7.580764,46.498291,0 7.580732,46.498332,0 7.5806387,46.4983733,0 7.5803456,46.4986969,0 + + + + , Summer Walking Path + #style-Summer_Hiking + + relativeToGround + 7.5868088,46.5114574,0 7.5867929,46.5114531,0 7.5867416,46.5114409,0 + + + + , Summer Walking Path + #style-Summer_Hiking + + relativeToGround + 7.5875342,46.512005,0 7.5873571,46.5120171,0 7.5869236,46.5118061,0 7.5868421,46.5116025,0 7.5868468,46.5114841,0 7.5868088,46.5114574,0 + + + + , Summer Walking Path + #style-Summer_Hiking + + relativeToGround + 7.5633366,46.4810949,0 7.563085,46.4812124,0 + + + + , Summer Walking Path + #style-Summer_Hiking + + relativeToGround + 7.5461028,46.4845429,0 7.5460141,46.4844262,0 7.5458652,46.4843459,0 7.5456547,46.4842848,0 7.5455029,46.4842106,0 + + + + , Summer Walking Path + #style-Summer_Hiking + + relativeToGround + 7.4579366,46.4368633,0 7.4561507,46.438472,0 7.4554266,46.4407469,0 7.4562657,46.4407434,0 7.4565824,46.4408413,0 + + + + Margeliweg + Margeliweg, Summer Walking Path + #style-Summer_Hiking + + relativeToGround + 7.5702308,46.4974098,0 7.5701367,46.4975929,0 7.570127,46.497612,0 7.569897,46.497685,0 7.5695,46.497694,0 7.569391,46.497615,0 7.569158,46.49761,0 7.569122,46.497717,0 7.569308,46.49812,0 7.570074,46.498377,0 7.57033,46.498687,0 7.5705898,46.498823,0 + + + + , Summer Walking Path + #style-Summer_Hiking + + relativeToGround + 7.5685948,46.4864379,0 7.5688213,46.4863868,0 7.5691195,46.4862141,0 7.569185,46.4860615,0 7.5693007,46.4859109,0 7.5694777,46.4858092,0 7.5698205,46.4856595,0 7.5701528,46.485471,0 7.5704268,46.485429,0 7.5706475,46.4853774,0 7.5710397,46.4852471,0 + + + + , Summer Walking Path + #style-Summer_Hiking + + relativeToGround + 7.5677844,46.4896259,0 7.567876,46.4895408,0 7.567961,46.489547,0 7.5679627,46.4894969,0 7.5680063,46.4894105,0 7.5680732,46.4893894,0 7.5681704,46.489411,0 7.5682202,46.4893757,0 7.5682202,46.489292,0 7.5682275,46.4892296,0 7.5682582,46.4891723,0 7.5683261,46.4891145,0 7.5683411,46.4890816,0 7.5683272,46.4889471,0 7.5684098,46.4889418,0 7.5685373,46.4889605,0 7.5687317,46.4889811,0 7.5688378,46.4889221,0 + + + + , Summer Walking Path + #style-Summer_Hiking + + relativeToGround + 7.571083,46.4852752,0 7.5712609,46.4852006,0 7.5714092,46.4851008,0 7.5715368,46.4849655,0 7.571555,46.4849207,0 7.5718393,46.4846598,0 7.5719243,46.4846003,0 7.5721098,46.484547,0 7.5721753,46.4845139,0 7.5722317,46.4845225,0 7.572362,46.4844702,0 7.5724345,46.4844726,0 7.5724951,46.4845446,0 7.5725829,46.484605,0 7.5727,46.484345,0 7.5728469,46.4841998,0 7.5728858,46.4841269,0 7.5730058,46.4840919,0 7.5730633,46.4841159,0 7.573079,46.4840679,0 7.5731306,46.484102,0 7.5731696,46.4840926,0 7.5732194,46.4840055,0 7.5732887,46.4839626,0 7.5732988,46.4839684,0 7.5733114,46.4840442,0 7.5733703,46.484136,0 7.5734232,46.4842003,0 7.5734601,46.484221,0 7.5735123,46.4842222,0 + + + + , Summer Walking Path + #style-Summer_Hiking + + relativeToGround + 7.5684612,46.487926,0 7.5684632,46.487807,0 7.5684908,46.4874257,0 7.5683489,46.4873599,0 + + + + , Summer Walking Path + #style-Summer_Hiking + + relativeToGround + 7.5756624,46.4951092,0 7.5750979,46.4947883,0 7.5743523,46.4946252,0 7.5737649,46.4942215,0 + + + + , Summer Walking Path + #style-Summer_Hiking + + relativeToGround + 7.5728372,46.4890235,0 7.5727436,46.4888729,0 7.5722582,46.4884277,0 7.5718875,46.4882051,0 7.5717091,46.4881898,0 7.5714861,46.4882473,0 + + + + , Summer Walking Path + #style-Summer_Hiking + + relativeToGround + 7.563239,46.4912821,0 7.5633949,46.4913423,0 7.5634393,46.4913395,0 7.5642021,46.4916877,0 7.564343,46.4917357,0 7.5645316,46.4919494,0 + + + + + + Waterways + + Waterway_River + + + Rotten + #style-Waterway_River + + relativeToGround + 8.3809611,46.5793095,0 8.3810126,46.578759,0 8.3804404,46.5779554,0 8.3798931,46.577374,0 8.3796941,46.57669,0 8.3797688,46.5757666,0 8.3793707,46.5750997,0 8.3802912,46.574313,0 8.3811619,46.5730647,0 8.3808633,46.5722438,0 8.3797328,46.5712548,0 8.3789478,46.5704823,0 8.3785,46.5695246,0 8.3773308,46.56908,0 8.375067,46.567746,0 8.3744202,46.5672671,0 8.3728778,46.5667711,0 8.3720818,46.5664119,0 8.3707135,46.5663948,0 8.3695194,46.5661554,0 8.3686985,46.5654712,0 8.3682507,46.5648555,0 8.3669571,46.5647016,0 8.3665591,46.564445,0 8.3660615,46.5645305,0 8.3656712,46.5644753,0 8.365166,46.5642227,0 8.3640982,46.5636204,0 8.3627363,46.5625072,0 8.3622116,46.5620904,0 8.3619162,46.5618251,0 8.3606878,46.5611105,0 8.3597744,46.5608453,0 8.3579486,46.5604548,0 8.3561402,46.5595722,0 8.3557931,46.5593294,0 8.3554263,46.5590004,0 8.3552344,46.5583665,0 8.3556378,46.5571362,0 8.3570111,46.5547753,0 8.3588994,46.5528866,0 8.3602827,46.5506929,0 8.3616855,46.5491811,0 8.3616995,46.5475524,0 8.3620441,46.5469392,0 8.3620639,46.546586,0 8.362161,46.5448586,0 8.3623602,46.5438652,0 8.3624521,46.5433528,0 8.3625424,46.5424862,0 8.3606462,46.5408034,0 8.3602507,46.5403122,0 8.3602754,46.5392381,0 8.3593975,46.538297,0 8.3585929,46.5374926,0 8.3579406,46.5372691,0 8.3569815,46.5372579,0 8.3551793,46.5374009,0 8.3529555,46.5368053,0 8.3509396,46.5364303,0 8.3503448,46.5353437,0 8.3494472,46.5345604,0 8.3482431,46.533861,0 8.3473434,46.5334395,0 8.3468182,46.533018,0 8.3460346,46.532176,0 8.3451745,46.5312024,0 8.3442859,46.5302302,0 8.341962,46.5278764,0 8.3412361,46.52715,0 8.3410492,46.5268648,0 8.3408741,46.5264552,0 8.3406487,46.5261124,0 8.3378035,46.5236785,0 8.3365463,46.5225635,0 8.3358665,46.5218821,0 8.3354103,46.5214204,0 8.335185,46.5211382,0 8.3344354,46.5198694,0 8.3338271,46.5187553,0 8.3335681,46.5184011,0 8.3333216,46.5180749,0 8.3329861,46.517854,0 8.3326138,46.517648,0 8.331599,46.5171055,0 8.3313651,46.5169186,0 8.3311949,46.5166985,0 8.330977,46.5162522,0 8.3306718,46.5157189,0 8.3303871,46.5154024,0 8.3301024,46.515126,0 8.3292847,46.5145684,0 8.3284889,46.5140258,0 8.3281602,46.5137946,0 8.3279672,46.5136939,0 8.3277519,46.5135948,0 8.327292,46.5134114,0 8.3267698,46.5132161,0 8.3259503,46.5129785,0 8.3255706,46.5128494,0 8.3252801,46.512685,0 8.3249628,46.5124709,0 8.3240832,46.5118632,0 8.3235147,46.5113328,0 8.3226547,46.5104817,0 8.3223496,46.5100019,0 8.32186,46.5095222,0 8.3216898,46.5094171,0 8.3214928,46.509322,0 8.3212136,46.5091708,0 8.3209988,46.5090744,0 8.3207783,46.5090015,0 8.3196984,46.5086575,0 8.3193492,46.5085431,0 8.3189509,46.5084362,0 8.3187236,46.5083803,0 8.3184974,46.5083419,0 8.3182567,46.5083375,0 8.3180263,46.5083508,0 8.3174734,46.5084226,0 8.3167471,46.5083953,0 8.3160315,46.5083187,0 8.3151054,46.5082564,0 8.3142082,46.5081715,0 8.313588,46.5081275,0 8.3129989,46.5080681,0 8.3125857,46.5079476,0 8.3121468,46.5077548,0 8.312012,46.5076174,0 8.311863,46.5073672,0 8.3116228,46.5069618,0 8.3114915,46.5067409,0 8.3113505,46.506547,0 8.3111267,46.5063412,0 8.3108778,46.5061337,0 8.3105821,46.5059194,0 8.3100814,46.5054643,0 8.3092124,46.5044489,0 8.3079707,46.5038562,0 8.3065427,46.5031652,0 8.2992117,46.4999818,0 8.2974913,46.4992347,0 8.2888207,46.4950271,0 8.2821475,46.4911101,0 8.2816738,46.4907287,0 8.2810227,46.4902096,0 8.2799624,46.4894364,0 8.2791991,46.4889918,0 8.2784596,46.4887505,0 8.2783195,46.4885775,0 8.2775333,46.4876068,0 8.2768434,46.486656,0 8.2762437,46.4856638,0 8.2761271,46.4852222,0 8.2758522,46.4847634,0 8.2754024,46.4844021,0 8.2750442,46.4842223,0 8.2746478,46.484089,0 8.2739879,46.4839606,0 8.2732285,46.4837942,0 8.2716792,46.4835591,0 8.270788,46.483387,0 8.2700457,46.4831351,0 8.2696145,46.4827465,0 8.2691198,46.4819259,0 8.268956,46.4817412,0 8.267543,46.4809836,0 8.265199,46.4785089,0 8.2613049,46.477341,0 8.258764,46.4769837,0 8.2557309,46.476287,0 8.2537907,46.4748393,0 8.2530884,46.4737978,0 8.2517779,46.4731821,0 8.2505962,46.4713575,0 8.2481102,46.4712526,0 8.2469721,46.4709783,0 8.2455664,46.4702859,0 8.2448658,46.4695507,0 8.2446235,46.4688246,0 8.2441669,46.4677964,0 8.2439909,46.4672901,0 8.2435946,46.4660171,0 8.2434751,46.4638729,0 8.2429109,46.4634003,0 8.2421367,46.4631794,0 8.2413471,46.4629851,0 8.2399768,46.4624948,0 8.2378375,46.4619808,0 8.2348559,46.4604787,0 8.2336767,46.4595306,0 8.2327392,46.4591274,0 8.2316244,46.4587223,0 8.230689,46.4582662,0 8.2292937,46.4567381,0 8.2271256,46.4551003,0 8.2264984,46.4548479,0 8.2259419,46.4548318,0 8.225287,46.4549385,0 8.2239994,46.4551344,0 8.2224883,46.4551344,0 8.2210779,46.4548211,0 8.2203727,46.4543684,0 8.219938,46.4540652,0 8.2194884,46.4536547,0 8.2192128,46.4535068,0 8.2189054,46.4533624,0 8.2186017,46.4531836,0 8.2183672,46.452995,0 8.2182045,46.4527239,0 8.2179551,46.4523145,0 8.217401,46.4518968,0 8.2170484,46.4514442,0 8.2168973,46.4509916,0 8.2162425,46.4503998,0 8.2156884,46.4500168,0 8.2150997,46.4498423,0 8.2144511,46.4497048,0 8.2134722,46.4495038,0 8.2127661,46.4491725,0 8.2124011,46.4488254,0 8.2123137,46.4484501,0 8.2120618,46.447719,0 8.2114071,46.4472664,0 8.2103493,46.4471968,0 8.2096442,46.4469183,0 8.2092915,46.4462567,0 8.2087879,46.4456996,0 8.2086662,46.4452839,0 8.2086368,46.444864,0 8.2084997,46.444571,0 8.2082775,46.4443192,0 8.2078873,46.4441367,0 8.2073272,46.4440632,0 8.2067585,46.4441111,0 8.2061841,46.444211,0 8.2056855,46.4442129,0 8.2050092,46.4441668,0 8.2045474,46.4438673,0 8.2042113,46.4435089,0 8.2041606,46.4431742,0 8.2043508,46.4426956,0 8.2044744,46.4421839,0 8.2044079,46.4418335,0 8.2042177,46.4415221,0 8.2037372,46.441096,0 8.2031997,46.4406043,0 8.2027641,46.4402438,0 8.2021294,46.4399356,0 8.2015235,46.4396386,0 8.2012417,46.4394368,0 8.2009982,46.4392035,0 8.2009129,46.4389971,0 8.2008667,46.4387763,0 8.2008223,46.4379607,0 8.2007907,46.4375375,0 8.200318,46.4368117,0 8.1993607,46.4365031,0 8.1982153,46.4363582,0 8.1958192,46.4366253,0 8.19479,46.4362763,0 8.1937483,46.43594,0 8.1933564,46.4354758,0 8.1932964,46.4351213,0 8.1930565,46.4342674,0 8.1922574,46.4338651,0 8.1891176,46.4321459,0 8.1870285,46.4325305,0 8.185658,46.4320112,0 8.1828991,46.4302863,0 8.1811784,46.4296467,0 8.1796629,46.4281609,0 8.1798238,46.4272433,0 8.1800746,46.4265742,0 8.1795634,46.4262843,0 8.1781283,46.4262043,0 8.1769875,46.4258846,0 8.1759086,46.4250951,0 8.1750912,46.424305,0 8.1707123,46.4202363,0 8.1702435,46.4198007,0 8.1585706,46.4131733,0 8.1506741,46.408439,0 8.1496459,46.4076273,0 8.1427777,46.4020471,0 8.1389729,46.4009274,0 8.1377901,46.3991976,0 8.1365368,46.398807,0 8.1345567,46.3965826,0 8.1318753,46.3954356,0 8.1275903,46.3932613,0 8.1248034,46.391294,0 8.1242142,46.3901885,0 8.1225604,46.3877846,0 8.1195583,46.3845555,0 8.117387,46.3840506,0 8.1151622,46.3827137,0 8.1120501,46.3820872,0 8.111043,46.3814855,0 8.1104735,46.380476,0 8.1080893,46.3795991,0 8.10604,46.3781469,0 8.1047198,46.377719,0 8.1037526,46.3774629,0 8.1007618,46.3753388,0 8.0965176,46.3755291,0 8.095282,46.3772748,0 8.0940139,46.3781826,0 8.0918295,46.3781278,0 8.0902618,46.3764919,0 8.0874549,46.3743397,0 8.0857466,46.3734776,0 8.0831482,46.3733223,0 8.081071,46.3719922,0 8.0792466,46.3716062,0 8.0779375,46.3719812,0 8.0763592,46.372377,0 8.0750815,46.3715033,0 8.072929,46.3696281,0 8.0717659,46.3690859,0 8.0704667,46.369113,0 8.0693186,46.3692328,0 8.0686961,46.3687732,0 8.068403,46.3677228,0 8.0676044,46.3671998,0 8.0658763,46.3668823,0 8.0633385,46.3656446,0 8.0606123,46.364566,0 8.0591321,46.3636382,0 8.0549773,46.3620484,0 8.0540035,46.3613046,0 8.0539798,46.3607469,0 8.0539543,46.3601453,0 8.0534732,46.3596983,0 8.0520047,46.3595265,0 8.0510579,46.3591344,0 8.0501139,46.3572737,0 8.0464833,46.3546331,0 8.0454189,46.3536618,0 8.0445865,46.3533216,0 8.0420523,46.3531278,0 8.0408092,46.3522215,0 8.0398632,46.350791,0 8.0388604,46.3505724,0 8.0373407,46.3494294,0 8.0356058,46.3480367,0 8.0343953,46.3472799,0 8.0333291,46.346744,0 8.0317421,46.3458979,0 8.0302326,46.3456978,0 8.0292399,46.3455515,0 8.0261735,46.3432866,0 8.0259836,46.3420655,0 8.0264551,46.3407013,0 8.0259262,46.3396684,0 8.0234949,46.3386346,0 8.020266,46.3377702,0 8.0160216,46.3346158,0 8.0141883,46.3326938,0 8.0135499,46.3301236,0 8.0124921,46.3283112,0 8.0115358,46.3273088,0 8.0108655,46.3266859,0 8.0102607,46.3262723,0 8.0095941,46.3259423,0 8.0087365,46.3256467,0 8.0080757,46.3255279,0 8.0073478,46.3254215,0 8.0055289,46.325252,0 8.0039364,46.3250342,0 8.0015581,46.324548,0 7.9993741,46.32384,0 7.9970168,46.3230628,0 7.9925065,46.3215534,0 7.9914432,46.3212472,0 7.991121,46.3211723,0 7.9903034,46.3209823,0 7.9886569,46.3207586,0 7.9869448,46.3206321,0 7.9836789,46.3201161,0 7.9788194,46.3181719,0 7.9758813,46.3174055,0 7.9600679,46.3117323,0 7.9565029,46.3106402,0 7.955247,46.310234,0 7.9542164,46.3097427,0 7.9527726,46.3088982,0 7.9519207,46.3084392,0 7.9504972,46.3077111,0 7.9489508,46.3071536,0 7.9473017,46.3066644,0 7.9425696,46.3053036,0 7.9413469,46.304854,0 7.9398251,46.3040189,0 7.9379488,46.3028253,0 7.9364718,46.3019089,0 7.9345709,46.3007621,0 7.933172,46.3000077,0 7.9318451,46.2994313,0 7.928514,46.2984772,0 7.9229629,46.2979464,0 7.9127991,46.2970075,0 7.900068,46.2959571,0 7.8969337,46.2962684,0 7.8883662,46.2998642,0 7.8831882,46.3016904,0 7.879355,46.3023285,0 7.870157,46.3024357,0 7.8594632,46.3028369,0 7.8473388,46.3065427,0 7.837881,46.3074945,0 7.8282882,46.3085712,0 7.8254374,46.3083172,0 7.8119843,46.3070984,0 7.79907,46.3068076,0 7.7961276,46.3060891,0 7.7825327,46.3059889,0 7.7791226,46.3062115,0 7.7759134,46.3067902,0 7.7584525,46.3091078,0 7.7557324,46.3089797,0 7.7502818,46.3078243,0 7.7421452,46.3062882,0 7.734567,46.3067893,0 7.7211303,46.3088396,0 7.7149656,46.3096625,0 7.7102771,46.3102013,0 7.7074025,46.3103195,0 7.7044396,46.3102865,0 7.6996507,46.3100588,0 7.6974949,46.3101029,0 7.6966104,46.3100717,0 7.6957296,46.3099474,0 7.694161,46.3094777,0 7.6927706,46.3088802,0 7.691423,46.3085228,0 7.6899252,46.308143,0 7.6817564,46.3065984,0 7.6791486,46.3062246,0 7.676791,46.3060118,0 7.6743843,46.3058588,0 7.6709507,46.3060023,0 7.6685512,46.3061912,0 7.667216,46.3063457,0 7.6661641,46.3065173,0 7.6609949,46.3077651,0 7.6568983,46.3086912,0 7.6499748,46.3103429,0 7.6470405,46.3121565,0 7.6456254,46.3125409,0 7.6411929,46.3128287,0 7.6364073,46.3118884,0 7.6334386,46.3118577,0 7.6328038,46.3119827,0 7.6321042,46.3121204,0 7.6275072,46.3135204,0 7.6208014,46.3155027,0 7.6179549,46.315624,0 7.6148903,46.3151243,0 7.6081835,46.3136662,0 7.6010581,46.3127966,0 7.5993032,46.3121006,0 7.5967373,46.3098956,0 7.5961853,46.3096521,0 + + + + Engstlige + #style-Waterway_River + + relativeToGround + 7.6022785,46.5401947,0 7.6025091,46.540512,0 7.6031368,46.5413754,0 7.6026218,46.5429104,0 7.6027935,46.5440911,0 7.6017635,46.5453898,0 7.602103,46.5468677,0 7.6022785,46.5471607,0 7.6033085,46.5479872,0 7.6043384,46.5489316,0 7.6057117,46.54964,0 7.6057117,46.5507025,0 7.6077717,46.5521191,0 7.6090281,46.5540874,0 7.6097828,46.554791,0 7.6104014,46.5553546,0 7.6122349,46.5567229,0 7.6142948,46.556959,0 7.6150274,46.5575363,0 7.6158784,46.5582068,0 7.6165495,46.5597606,0 7.6176459,46.5602837,0 7.6196163,46.5615623,0 7.6206463,46.5632147,0 7.6208892,46.5635148,0 7.6216696,46.564479,0 7.6231862,46.5660439,0 7.6242334,46.5683426,0 7.6251095,46.5691157,0 7.6269613,46.569587,0 7.627585,46.5698201,0 7.6290577,46.5697058,0 7.6307743,46.5707679,0 7.6319759,46.5715939,0 7.6335209,46.573482,0 7.6348942,46.5744261,0 7.6358843,46.5774784,0 + + + + #style-Waterway_River + + relativeToGround + 7.4148104,46.4967759,0 7.4160013,46.4959967,0 7.4175624,46.4951252,0 7.4178913,46.4949773,0 7.4184173,46.4947409,0 7.4193487,46.4946931,0 7.4201105,46.4947596,0 7.4212638,46.4950993,0 7.4229066,46.4958041,0 7.4239943,46.496366,0 7.4253086,46.4972116,0 7.4259845,46.4977434,0 7.4264298,46.4983564,0 7.4267034,46.4990432,0 7.427154,46.4997744,0 7.4279211,46.5003061,0 7.4291656,46.5007825,0 7.4300186,46.5014102,0 + + + + Simme + #style-Waterway_River + + relativeToGround + 7.4148104,46.4967759,0 7.4140004,46.4972966,0 7.4128648,46.4984032,0 7.4120378,46.4988758,0 7.4116834,46.4993483,0 7.4114471,46.5002048,0 7.4109746,46.5010613,0 7.4102738,46.5016021,0 7.4094683,46.5017406,0 7.4089071,46.5017111,0 7.4082574,46.5019769,0 7.4079333,46.5023075,0 7.4067806,46.5030402,0 7.4056266,46.5035924,0 7.4046502,46.5039764,0 7.4037385,46.504192,0 7.4032394,46.5044749,0 7.402762,46.5046706,0 7.4023435,46.5047998,0 7.4018339,46.5048885,0 7.4011395,46.5049009,0 7.4002605,46.5049802,0 7.3995446,46.5052257,0 7.3988062,46.5054175,0 7.3977637,46.5056704,0 7.3967979,46.5057762,0 7.3956424,46.5059331,0 7.3945836,46.5062568,0 7.3941289,46.5065149,0 7.3937853,46.5067911,0 7.3931798,46.5074121,0 7.3928697,46.5082678,0 7.3927221,46.5088881,0 7.3928224,46.5093561,0 7.3926507,46.5097814,0 7.3921786,46.5102658,0 7.3915778,46.5107148,0 7.3910628,46.5110219,0 7.3904363,46.5111755,0 7.3892604,46.5112759,0 7.3888055,46.5114827,0 7.3888484,46.5121029,0 7.3889514,46.5125459,0 7.3891746,46.5130893,0 7.389679,46.5139383,0 7.3895618,46.5144406,0 7.3891188,46.5151494,0 7.388379,46.5162216,0 7.3879079,46.5172759,0 7.3877307,46.5179075,0 7.3877307,46.5188117,0 7.387583,46.5198455,0 7.387583,46.5213813,0 7.3877011,46.5231534,0 7.3879079,46.5251027,0 7.38841,46.5268157,0 7.3892074,46.5289422,0 7.3898764,46.5304745,0 7.3904774,46.5319547,0 7.3905365,46.5326931,0 7.3902707,46.533461,0 7.3898867,46.5341108,0 7.3891188,46.5346719,0 7.3882918,46.5349673,0 7.3872877,46.5350263,0 7.3863721,46.5353512,0 7.3858224,46.5362191,0 7.3856622,46.5375599,0 7.3854562,46.5381739,0 7.3851142,46.5385692,0 7.3840142,46.5395673,0 7.3835164,46.5400219,0 7.3830872,46.5405709,0 7.3826409,46.5408897,0 7.3817339,46.5417885,0 7.3808969,46.5424967,0 7.3809935,46.543044,0 7.3813476,46.5434625,0 7.3816696,46.5441064,0 7.3815086,46.5445893,0 7.3812189,46.5454263,0 7.3810901,46.5463599,0 7.3812832,46.5471969,0 7.3817017,46.5481305,0 7.3822168,46.5489031,0 7.382571,46.5494504,0 7.3826353,46.5499977,0 7.3822812,46.5506093,0 7.3817983,46.5515107,0 7.3817983,46.5521868,0 7.3821846,46.5528629,0 7.3823134,46.5532492,0 7.3819915,46.5538286,0 7.3816374,46.5546013,0 7.3812307,46.5561465,0 7.3812501,46.5566592,0 7.3812932,46.5571399,0 7.3812976,46.5574732,0 7.3812628,46.5576802,0 7.3812452,46.5577312,0 7.3811767,46.5578887,0 7.3810499,46.5581318,0 7.3808341,46.5585264,0 7.3803462,46.5593713,0 7.3798668,46.560396,0 7.3793147,46.5617983,0 7.3788502,46.5629464,0 7.3784991,46.563768,0 7.3774509,46.5660112,0 7.3772782,46.5665588,0 7.3772214,46.5669788,0 7.3772391,46.5675024,0 7.3774145,46.5680778,0 7.3776827,46.56869,0 7.3783264,46.5700693,0 7.378901,46.571245,0 7.379453,46.5718689,0 7.3800967,46.5723188,0 7.3807038,46.5727259,0 7.3817661,46.5733376,0 7.383086,46.5744643,0 7.3834248,46.5749918,0 7.3836909,46.5753722,0 7.3841028,46.575865,0 7.3844461,46.5762662,0 7.3846436,46.576573,0 7.3846779,46.5769447,0 7.3844204,46.5775346,0 7.3840518,46.5788425,0 7.3832792,46.5814502,0 7.3831651,46.5819281,0 7.3831866,46.5822231,0 7.3834226,46.5825623,0 7.3833583,46.5827835,0 7.3827789,46.5836905,0 7.382571,46.5845085,0 7.3826353,46.5855065,0 7.3826353,46.586404,0 7.3825429,46.5867432,0 7.3823475,46.5869475,0 7.3819313,46.5871488,0 7.3817704,46.5873257,0 7.381706,46.5877165,0 7.3810579,46.5885648,0 7.3810301,46.5887635,0 7.3811696,46.5893091,0 7.3810408,46.5894787,0 7.3807726,46.5895008,0 7.3803542,46.5895303,0 7.3799787,46.5896557,0 7.3793285,46.5898139,0 7.3785468,46.5897475,0 7.3778502,46.5896055,0 7.3772428,46.5896925,0 7.3770068,46.5898179,0 7.3768995,46.5900317,0 7.3769424,46.5904593,0 7.3767064,46.5907837,0 7.3759876,46.5914547,0 7.3754404,46.5922583,0 7.3753507,46.5926344,0 7.3754025,46.5932383,0 7.3754241,46.5934903,0 7.3756173,46.5940054,0 7.3758104,46.594778,0 7.3758506,46.5952003,0 7.3757515,46.595598,0 7.375655,46.5960772,0 7.3755906,46.5966375,0 7.3756764,46.5973821,0 7.3758373,46.5978907,0 7.3761163,46.5983552,0 7.3766098,46.5990923,0 7.3767171,46.5996305,0 7.3765991,46.6001023,0 7.3763255,46.600605,0 7.3758426,46.6010879,0 7.375231,46.6018605,0 7.3748768,46.6032448,0 7.3747644,46.6040594,0 7.374861,46.6045177,0 7.3750863,46.6048641,0 7.3759446,46.6058224,0 7.3766206,46.606729,0 7.3773179,46.6078198,0 7.3779724,46.609316,0 7.378579,46.6101663,0 7.378901,46.611132,0 7.378938,46.6123378,0 7.3790345,46.6126326,0 7.3792813,46.6131559,0 7.3794804,46.6138041,0 7.3795066,46.6141066,0 7.3793517,46.6146411,0 7.379174,46.6154331,0 7.3792229,46.6158,0 7.3793826,46.6161099,0 7.3796032,46.6163838,0 7.3802531,46.6170877,0 7.3813154,46.6182789,0 7.3825321,46.6192651,0 7.3836479,46.6203042,0 7.3841415,46.620621,0 7.3854504,46.6211663,0 7.3863409,46.6217116,0 7.3871955,46.622324,0 7.3884623,46.6235263,0 7.3891411,46.6241137,0 7.3909543,46.6254695,0 7.3924349,46.626221,0 7.3932288,46.6265821,0 7.3937867,46.626921,0 7.3943231,46.6273336,0 7.3949367,46.6279379,0 7.3955024,46.6286537,0 7.3958809,46.6289915,0 7.3968035,46.6296546,0 7.3984138,46.6307647,0 7.3990974,46.6311606,0 7.4000866,46.6314965,0 7.4013548,46.6318266,0 7.4028203,46.6322506,0 7.4036485,46.6326016,0 7.4044747,46.6331541,0 7.4053416,46.6338759,0 7.4065218,46.6346347,0 7.407584,46.6353641,0 7.4083585,46.6358357,0 7.4091954,46.6369775,0 7.4098176,46.6373827,0 7.4105901,46.6377584,0 7.4115879,46.6381562,0 7.4126608,46.6385318,0 7.4137337,46.6388044,0 7.4149031,46.6390622,0 7.4156401,46.6391335,0 7.4159545,46.6392243,0 7.4160189,46.6395852,0 7.4155585,46.6402065,0 7.4154717,46.6403955,0 7.4157075,46.6410153,0 7.4159223,46.6414931,0 7.4164159,46.6419645,0 7.4169931,46.6423048,0 7.417594,46.6426584,0 7.4178321,46.6429294,0 7.4177248,46.6435629,0 7.4177677,46.6437396,0 7.4180681,46.644211,0 7.4182612,46.6449402,0 7.4184865,46.6458167,0 7.4184543,46.6464281,0 7.4186163,46.6469861,0 7.4190122,46.6477833,0 7.4197203,46.6485345,0 7.4200422,46.6486671,0 7.4206645,46.648726,0 7.4216193,46.6487334,0 7.4220056,46.648807,0 7.4222845,46.6489175,0 7.4225528,46.6493005,0 7.4230731,46.6495547,0 7.4237007,46.6498602,0 7.4246771,46.6498896,0 7.4251484,46.6499459,0 7.4253315,46.6500443,0 7.4255354,46.6502947,0 7.4257357,46.6503853,0 7.4260182,46.6505967,0 7.4266793,46.6509836,0 7.4273938,46.6512898,0 7.4281961,46.6515467,0 7.4288057,46.6518341,0 7.4292046,46.651996,0 7.4295587,46.6520328,0 7.4304063,46.651996,0 7.4311573,46.6518634,0 7.4315614,46.6518511,0 7.4318761,46.6519076,0 7.43208,46.6520033,0 7.4321658,46.6522758,0 7.432075,46.6526151,0 7.4320207,46.6529228,0 7.4321229,46.653108,0 7.4324126,46.6532111,0 7.4327452,46.6532111,0 7.4334962,46.6530712,0 7.4344022,46.6528547,0 7.4347764,46.6526846,0 7.4352772,46.6526588,0 7.4357278,46.6528502,0 7.4359161,46.6531269,0 7.4360862,46.6535522,0 7.4362964,46.65422,0 7.4366183,46.6546692,0 7.4370898,46.65493,0 7.4379916,46.6552289,0 7.4383241,46.6552363,0 7.4390537,46.6550374,0 7.439912,46.6545956,0 7.4405665,46.6544483,0 7.4411887,46.6544925,0 7.4415144,46.6545737,0 7.4421865,46.6550301,0 7.4427015,46.6552142,0 7.443779,46.6555006,0 7.4441821,46.6557591,0 7.4444725,46.6561208,0 7.4447106,46.6568522,0 7.4448687,46.6572687,0 7.4451477,46.6575412,0 7.4455768,46.6576664,0 7.4461133,46.6577253,0 7.446639,46.6576885,0 7.4471003,46.6576148,0 7.4475617,46.6574455,0 7.4481947,46.6570846,0 7.4487204,46.6568269,0 7.4491174,46.6567754,0 7.4497182,46.6569153,0 7.450201,46.657092,0 7.4509535,46.6572605,0 7.451703,46.6574086,0 7.4520463,46.6575191,0 7.4523145,46.6577916,0 7.4524567,46.6580332,0 7.4525613,46.658712,0 7.4527222,46.6589035,0 7.4529583,46.6590066,0 7.4533016,46.6589698,0 7.4541814,46.6585353,0 7.4552232,46.6582471,0 7.4563289,46.658111,0 7.4575707,46.6578729,0 7.4586593,46.6577708,0 7.4589557,46.6578284,0 7.4594418,46.658094,0 7.4602924,46.6585193,0 7.460962,46.6587783,0 7.4616915,46.6588519,0 7.4625928,46.6588519,0 7.462979,46.6587415,0 7.4636435,46.6582471,0 7.4643409,46.658128,0 7.4651574,46.658128,0 7.466093,46.6581451,0 7.4670238,46.6580051,0 7.4677748,46.6578284,0 7.4683649,46.6574676,0 7.4688048,46.6571215,0 7.4691481,46.6570257,0 7.4698025,46.6570331,0 7.4706518,46.6573285,0 7.4711451,46.6577028,0 7.4717575,46.6579069,0 7.4720985,46.657902,0 7.472574,46.6577708,0 7.4738668,46.6574476,0 7.4742861,46.6574162,0 7.4747593,46.6574823,0 7.4753172,46.6577106,0 7.4755454,46.6578863,0 7.475755,46.6581621,0 7.4760038,46.6582187,0 7.4771518,46.6581671,0 7.4781603,46.6580419,0 7.4793298,46.658064,0 7.4802954,46.6583365,0 7.481379,46.6585574,0 7.4835247,46.6587709,0 7.4838788,46.6587488,0 7.4841577,46.6586163,0 7.4846935,46.6573897,0 7.4854345,46.6569374,0 7.4864537,46.6567754,0 7.4871403,46.6569815,0 7.4882347,46.6582187,0 7.4884493,46.6583733,0 7.4887926,46.6584248,0 7.4896509,46.6584101,0 7.4910671,46.6580861,0 7.4921614,46.6579609,0 7.4926013,46.6577474,0 7.4929333,46.6572719,0 7.4935179,46.6566448,0 7.494275,46.6558328,0 7.4947793,46.6555456,0 7.4952084,46.6556708,0 7.4961311,46.6568122,0 7.496292,46.6570625,0 7.496571,46.657092,0 7.4968815,46.6569184,0 7.4990861,46.6560537,0 7.4994249,46.656039,0 7.4998862,46.6561273,0 7.5016135,46.6567238,0 7.5019995,46.6567547,0 7.5024182,46.6566649,0 7.5027079,46.6565103,0 7.5034053,46.6551553,0 7.5038666,46.6549196,0 7.5043387,46.654927,0 7.5045854,46.6550522,0 7.5054759,46.6560463,0 7.5063557,46.656849,0 7.5068814,46.6570036,0 7.5079865,46.6569668,0 7.5084264,46.6567312,0 7.508877,46.655656,0 7.5091559,46.6554719,0 7.5100142,46.6554793,0 7.5118274,46.6558475,0 7.512396,46.655818,0 7.5129647,46.6555824,0 7.5148315,46.6543231,0 7.5151748,46.6541906,0 7.5160546,46.6543894,0 7.5170416,46.6549491,0 7.5182111,46.6553615,0 7.5187153,46.6553836,0 7.5191969,46.655285,0 7.5219876,46.6555677,0 7.5224275,46.6558622,0 7.5226313,46.6560242,0 7.5232,46.6566944,0 7.5233824,46.6567901,0 7.5238759,46.6568269,0 7.5243265,46.656768,0 7.5251412,46.656318,0 7.5255603,46.6561494,0 7.5259036,46.6561347,0 7.5261075,46.6562451,0 7.5263328,46.6565471,0 7.5264079,46.6568122,0 7.5264401,46.6573866,0 7.5265903,46.6577768,0 7.526998,46.6583144,0 7.5273306,46.6586237,0 7.5278563,46.658874,0 7.5285902,46.6589904,0 7.5291652,46.6590139,0 7.5300879,46.6589771,0 7.5313002,46.6588593,0 7.5321371,46.6586605,0 7.5332529,46.6583365,0 7.5339932,46.6582997,0 7.5349802,46.6583807,0 7.535675,46.6585294,0 7.5362033,46.6586016,0 7.5375236,46.6589473,0 7.5382789,46.6590238,0 7.5387461,46.6589845,0 7.5394863,46.6587341,0 7.5400127,46.6586291,0 7.5411714,46.6584995,0 7.5417379,46.6583405,0 7.5438579,46.6580047,0 7.5445396,46.6578873,0 7.545214,46.657716,0 7.5457977,46.6574274,0 7.5475283,46.6565588,0 7.5477583,46.6564513,0 7.547906,46.6564174,0 7.5481338,46.6564587,0 7.5483695,46.6565293,0 7.5486166,46.6567091,0 7.5495822,46.6572908,0 7.5505667,46.6577488,0 7.5511847,46.6579019,0 7.5522833,46.6581022,0 7.5537081,46.6582024,0 7.5552874,46.6582377,0 7.5565062,46.6583732,0 7.5580426,46.6587502,0 7.5598632,46.6591842,0 7.5612284,46.6593698,0 7.5628834,46.6595278,0 7.5646859,46.659734,0 7.565733,46.6600875,0 7.5669776,46.6607885,0 7.5672692,46.6609686,0 7.567561,46.6610981,0 7.5682734,46.6611099,0 7.5690632,46.6610594,0 7.570179,46.6608297,0 7.571621,46.6606471,0 7.573226,46.6605469,0 7.5741959,46.6603525,0 7.5747505,46.6602497,0 7.575552,46.6602524,0 7.5765393,46.6604319,0 7.5770308,46.6605957,0 7.5774575,46.6608356,0 7.5780154,46.6612951,0 7.579011,46.6621669,0 7.5799981,46.6625439,0 7.5809336,46.6626263,0 7.5824872,46.6625203,0 7.5834571,46.6623023,0 7.5850793,46.6618723,0 7.5859376,46.6618075,0 7.5869761,46.66189,0 7.5897999,46.6624202,0 7.5909189,46.6625818,0 7.5919832,46.6628881,0 7.5932191,46.6633947,0 7.595013,46.6643254,0 7.5968498,46.6652443,0 7.5988239,46.6661926,0 7.600283,46.6666284,0 7.6029438,46.6673411,0 7.6053384,46.6679242,0 7.6076301,46.6685309,0 7.6095527,46.6688784,0 7.6126083,46.6694556,0 7.6163934,46.6699916,0 7.6183847,46.6703273,0 7.6192687,46.6702802,0 7.6199627,46.6704663,0 7.6212429,46.6709928,0 7.6221355,46.6715464,0 7.6262226,46.6743988,0 7.6287174,46.6751778,0 7.6318073,46.6763556,0 7.6331806,46.6781223,0 7.6336956,46.6807133,0 7.6333277,46.6828388,0 7.6332934,46.6838751,0 7.6332076,46.6847583,0 7.6333792,46.6854944,0 7.6335595,46.6860596,0 7.6334222,46.6866484,0 7.6331818,46.6870075,0 7.6330359,46.6873549,0 7.6330874,46.6876846,0 7.6333449,46.6879202,0 7.6336196,46.6881027,0 7.6339972,46.6883735,0 7.634126,46.6885855,0 7.6341088,46.6888622,0 7.6339371,46.6890683,0 7.6334822,46.6894509,0 7.6331132,46.6898101,0 7.632993,46.6899867,0 7.6330188,46.6901869,0 7.6333277,46.6903694,0 7.633508,46.6905637,0 + + + + Simme + #style-Waterway_River + + relativeToGround + 7.4429173,46.4572666,0 7.4429683,46.4571225,0 + + + + Simme + #style-Waterway_River + + relativeToGround + 7.44395,46.4543877,0 7.443789,46.4545688,0 7.4436469,46.4548072,0 7.4435745,46.4550326,0 7.443494,46.4555186,0 7.443441,46.455818,0 7.443435,46.4561136,0 7.4433377,46.4564021,0 7.4429683,46.4571225,0 + + + + Simme + #style-Waterway_River + + relativeToGround + 7.4612723,46.4333085,0 7.45888,46.4355827,0 7.4579349,46.4367641,0 7.4560742,46.4384476,0 7.4554244,46.4400129,0 7.455212,46.4413715,0 7.4552472,46.4423757,0 7.4547003,46.4438428,0 7.4532036,46.4478792,0 7.4527959,46.449025,0 7.4522863,46.4494907,0 7.4515084,46.4499268,0 7.4496061,46.4508817,0 7.4446738,46.4539829,0 7.4442665,46.4542916,0 + + + + Simme + #style-Waterway_River + + relativeToGround + 7.4442665,46.4542916,0 7.4441377,46.4543619,0 7.44395,46.4543877,0 + + + + #style-Waterway_River + + relativeToGround + 7.5823262,46.3982278,0 7.5836565,46.3984054,0 7.5848002,46.398503,0 7.5847788,46.3978223,0 7.5848431,46.3973118,0 7.5854654,46.3969048,0 7.5862915,46.3966828,0 7.5870533,46.3968456,0 7.5876434,46.3967346,0 7.5876648,46.3963795,0 7.5874717,46.3958763,0 7.5879121,46.395537,0 7.5886701,46.3953454,0 7.5898039,46.395609,0 7.5912654,46.3960014,0 7.5926709,46.3963765,0 7.5938339,46.3967716,0 7.596617,46.3973843,0 7.5990921,46.3975722,0 7.6018644,46.3974561,0 7.6032688,46.3970143,0 7.6046692,46.3966843,0 7.604964,46.3966148,0 7.6054361,46.3970143,0 7.6058438,46.3969107,0 7.6060424,46.3968161,0 7.6062248,46.3969197,0 7.6063213,46.3968383,0 7.6065359,46.3968087,0 7.6066217,46.3971787,0 7.6065896,46.3975856,0 7.6067934,46.3979778,0 7.6070187,46.398111,0 7.6072118,46.3982368,0 7.6074801,46.3985697,0 7.6071796,46.3988657,0 7.6065896,46.3991838,0 7.6071475,46.3995834,0 7.607126,46.3998793,0 7.6074371,46.4002345,0 7.6079843,46.400634,0 7.6076624,46.4008856,0 7.6079628,46.4014997,0 7.6084349,46.4018252,0 7.6089177,46.4021877,0 7.6094542,46.4026908,0 7.6095722,46.4028758,0 7.6098404,46.4028166,0 7.6102588,46.4025872,0 7.6104841,46.4023653,0 7.6107416,46.4024763,0 7.6114228,46.4030059,0 7.6134008,46.4052111,0 + + + + Simme + #style-Waterway_River + + relativeToGround + 7.4145422,46.4951732,0 7.4142955,46.4947005,0 7.4144778,46.4943903,0 7.4168811,46.4925068,0 7.4176214,46.4915687,0 7.4179647,46.4914284,0 7.4194131,46.4914801,0 7.4201304,46.4912558,0 7.4213014,46.490638,0 7.4221978,46.4901039,0 7.4230395,46.4899437,0 7.4239108,46.4895723,0 7.4250036,46.4889521,0 7.4259192,46.4881251,0 7.4262736,46.4870323,0 7.4262441,46.4857623,0 7.4258601,46.4834291,0 7.4260078,46.4823658,0 7.4290744,46.4758704,0 7.4296701,46.4748344,0 7.4302313,46.4735644,0 7.4309696,46.4723831,0 7.4330075,46.4704042,0 7.4391299,46.4648035,0 7.4396745,46.4641251,0 7.4399642,46.4635893,0 7.4401198,46.4633971,0 7.4406526,46.4630362,0 7.4408064,46.4628318,0 7.4408874,46.4624093,0 7.4411605,46.4619376,0 7.4415682,46.4616087,0 7.4417291,46.461435,0 7.4419008,46.4611135,0 7.4420697,46.4603689,0 7.4420939,46.4601343,0 7.4419759,46.4596613,0 7.4420295,46.4592917,0 7.4422333,46.4591143,0 7.4428556,46.4588372,0 7.4429763,46.4587282,0 7.44303,46.4585914,0 7.4428717,46.4576509,0 7.4429173,46.4572666,0 + + + + #style-Waterway_River + + relativeToGround + 7.5848002,46.398503,0 7.5848152,46.3989973,0 7.5849719,46.3993465,0 7.5851104,46.3997361,0 + + + + #style-Waterway_River + + relativeToGround + 7.5926709,46.3963765,0 7.5940689,46.396307,0 7.5958359,46.3966059,0 7.5970139,46.3966103,0 7.5990503,46.3969699,0 7.6011746,46.3970535,0 7.6032688,46.3970143,0 + + + + #style-Waterway_River + + relativeToGround + 7.617414,46.3854152,0 7.6178217,46.3849933,0 + + + + #style-Waterway_River + + relativeToGround + 7.6190072,46.3886233,0 7.6193077,46.3883828,0 + + + + #style-Waterway_River + + relativeToGround + 7.6198816,46.3890377,0 7.620123,46.3887972,0 7.6201366,46.3881642,0 7.6199113,46.3874908,0 7.6200401,46.3867211,0 7.6205486,46.38637,0 + + + + #style-Waterway_River + + relativeToGround + 7.6181114,46.3727879,0 7.6185084,46.3726473,0 7.6190448,46.3726399,0 + + + + Engstlige + #style-Waterway_River + + relativeToGround + 7.5679163,46.4904384,0 7.5682865,46.490783,0 7.56887,46.4909814,0 7.5690784,46.4912436,0 7.5690856,46.4915223,0 7.569252,46.4918013,0 7.5692638,46.4922844,0 7.569386,46.4926358,0 7.5694157,46.4934985,0 7.5699636,46.4939489,0 7.5700405,46.4942176,0 7.5699498,46.4946884,0 7.5705973,46.4953414,0 7.5713722,46.4959515,0 7.5716743,46.4961181,0 7.5720713,46.4967711,0 7.5722066,46.4968701,0 7.5723745,46.4969336,0 7.572558,46.4968807,0 7.5730315,46.4969189,0 7.5734753,46.4969547,0 7.5740499,46.4971762,0 7.575296,46.4973752,0 7.5758975,46.4976559,0 7.5763149,46.4979143,0 7.5764972,46.4981977,0 7.5766154,46.4986548,0 7.5766651,46.4991564,0 7.5767911,46.4994885,0 7.5767477,46.499635,0 7.5768027,46.4998829,0 7.577038,46.5002692,0 7.5771766,46.5006686,0 7.5773397,46.5008466,0 7.5775215,46.500978,0 7.5784139,46.501225,0 7.5791897,46.5017317,0 7.580061,46.5017524,0 7.5802143,46.50181,0 7.5804344,46.5018927,0 7.58069,46.5022649,0 7.5808113,46.5028054,0 7.5807013,46.5029565,0 7.580053,46.5034856,0 7.5801763,46.5037025,0 7.5808618,46.504245,0 7.5813645,46.5047991,0 7.5821249,46.505979,0 7.5824844,46.5066477,0 7.582539,46.5071021,0 7.5824704,46.5074207,0 7.5824319,46.5083621,0 7.5825869,46.5090491,0 7.5825806,46.5095171,0 7.5820257,46.5098178,0 7.5819193,46.5106443,0 7.5818162,46.5109854,0 7.5821224,46.5116504,0 7.5829228,46.5126941,0 7.583598,46.5135612,0 7.5842966,46.5165233,0 7.5844909,46.5173472,0 7.5846293,46.517583,0 7.5848776,46.5177875,0 7.5856085,46.5179936,0 7.5860292,46.518225,0 7.5864387,46.5183726,0 7.5865335,46.5185698,0 7.5872008,46.5186978,0 7.5875705,46.5195246,0 7.5882623,46.5204856,0 7.5886196,46.5208262,0 7.5889364,46.5211571,0 7.5890967,46.5217219,0 7.5888244,46.5220523,0 7.5891101,46.5228483,0 7.5911672,46.5254435,0 7.593835,46.5287145,0 7.5952076,46.5310701,0 7.5969656,46.5334405,0 7.5980018,46.5343057,0 7.5984988,46.5361517,0 7.598946,46.5370064,0 7.5995921,46.5370064,0 7.6006357,46.5372799,0 7.6007848,46.5385447,0 7.6022785,46.5401947,0 + + + + + Waterway_Stream + + + #style-Waterway_Stream + + relativeToGround + 7.4482603,46.4605075,0 7.4479974,46.4601472,0 7.4477238,46.4599273,0 7.4475369,46.4598635,0 7.4465542,46.459732,0 7.4454239,46.4596948,0 7.4441592,46.4598904,0 7.4427902,46.4601787,0 + + + + #style-Waterway_Stream + + relativeToGround + 7.4427902,46.4601787,0 7.4422655,46.4603116,0 + + + + #style-Waterway_Stream + + relativeToGround + 7.4422655,46.4603116,0 7.4420697,46.4603689,0 + + + + Tschentbach + #style-Waterway_Stream + + relativeToGround + 7.5498993,46.5131535,0 7.5516111,46.512984,0 7.5534331,46.5128769,0 7.5551428,46.5130268,0 7.556419,46.5133488,0 7.5568307,46.5137849,0 7.5571667,46.5138959,0 7.5583266,46.514089,0 7.5589673,46.5141025,0 7.5609632,46.5138736,0 7.5615361,46.5137486,0 7.5622618,46.5133878,0 7.5633041,46.5130869,0 7.5638865,46.5131159,0 7.5649706,46.5131294,0 7.565441,46.5131179,0 7.5657838,46.5130325,0 7.5664322,46.5130568,0 7.5671807,46.5131231,0 7.5683759,46.5133121,0 7.569028,46.5133944,0 7.5696122,46.5135692,0 7.5704753,46.5137527,0 7.5714119,46.5135382,0 7.5726887,46.5133277,0 7.573583,46.513235,0 7.574029,46.513337,0 7.574712,46.51333,0 7.574925,46.513248,0 7.577474,46.513801,0 7.577839,46.514218,0 7.578268,46.514264,0 7.57838,46.514375,0 7.578653,46.514452,0 7.578728,46.51488,0 7.5793375,46.5154736,0 7.5796094,46.5155709,0 + + + + Tschentbach + #style-Waterway_Stream + + relativeToGround + 7.5796094,46.5155709,0 7.5798811,46.5155784,0 7.5804693,46.5157084,0 7.5808291,46.5159788,0 7.581439,46.5159571,0 7.5819875,46.5161131,0 7.5828673,46.5159575,0 7.5835048,46.5163951,0 7.5840989,46.5164935,0 7.5842966,46.5165233,0 + + + + Bonderlenbach + #style-Waterway_Stream + + relativeToGround + 7.5950493,46.4758228,0 7.5907678,46.4813085,0 7.5897696,46.4824297,0 7.5889451,46.4849235,0 7.588016,46.4856619,0 7.5871102,46.4859308,0 7.5866819,46.4864895,0 7.5847333,46.4880633,0 7.5834673,46.4887214,0 7.5817525,46.4898969,0 7.5814474,46.4901303,0 7.5810387,46.490633,0 7.5801554,46.4913069,0 7.5799536,46.4916604,0 7.5792927,46.4922356,0 7.5790885,46.4927514,0 7.5784129,46.4935776,0 7.5784782,46.494305,0 7.578291,46.4948469,0 7.5783849,46.4950906,0 7.5778436,46.4955583,0 7.5771013,46.4959518,0 7.576988,46.4961764,0 7.5767947,46.496307,0 7.5767531,46.496691,0 7.5765765,46.4969136,0 7.5759942,46.4969659,0 7.5759141,46.4970779,0 7.576244,46.4975421,0 7.5763149,46.4979143,0 + + + + #style-Waterway_Stream + + relativeToGround + 7.5864107,46.5038145,0 7.5849124,46.5043821,0 7.5842642,46.5051023,0 7.5834123,46.505664,0 7.582847,46.5058125,0 7.5826781,46.5057472,0 7.5823863,46.5057664,0 7.5821249,46.505979,0 + + + + #style-Waterway_Stream + + relativeToGround + 7.5901733,46.4963584,0 7.5878156,46.4992787,0 7.5872543,46.4997632,0 7.5868956,46.5001347,0 7.5862173,46.5005062,0 7.5854443,46.5007068,0 7.5845889,46.5007134,0 7.5841943,46.5006119,0 7.5836448,46.5004516,0 7.5831399,46.5005241,0 7.5821281,46.5010073,0 7.5802143,46.50181,0 + + + + #style-Waterway_Stream + + relativeToGround + 7.6031924,46.5097266,0 7.5935129,46.513263,0 7.5907758,46.5139709,0 7.5894533,46.5145143,0 7.5885612,46.5149031,0 7.5883184,46.5153558,0 7.5880954,46.5157955,0 7.586282,46.5170016,0 7.5857963,46.5175161,0 7.5856085,46.5179936,0 + + + + #style-Waterway_Stream + + relativeToGround + 7.627585,46.5698201,0 7.6274104,46.5701313,0 7.6247923,46.57119,0 7.6243015,46.5713244,0 7.6229993,46.5714951,0 7.6219771,46.5717669,0 7.6195533,46.5723564,0 7.618023,46.5727097,0 7.6164988,46.5733015,0 7.6160679,46.5736132,0 7.615965,46.573772,0 7.6158862,46.574073,0 7.6158473,46.5742219,0 7.6155516,46.5747077,0 7.6118253,46.5770347,0 7.6101343,46.5797527,0 7.6049675,46.5845394,0 7.6009691,46.5902559,0 + + + + Krummenbach + #style-Waterway_Stream + + relativeToGround + 7.4345353,46.4542156,0 7.4375443,46.4530688,0 7.4379198,46.4525218,0 7.4388861,46.4520338,0 + + + + Krummenbach + #style-Waterway_Stream + + relativeToGround + 7.4388861,46.4520338,0 7.4394596,46.4521561,0 + + + + Krummenbach + #style-Waterway_Stream + + relativeToGround + 7.4394596,46.4521561,0 7.440223,46.4521175,0 7.4411836,46.4522683,0 7.4419013,46.4524977,0 7.442767,46.4530941,0 7.4435144,46.4537976,0 7.4438251,46.4541901,0 7.44395,46.4543877,0 + + + + #style-Waterway_Stream + + relativeToGround + 7.6043384,46.5489316,0 7.6036134,46.5492848,0 7.6020999,46.5497933,0 7.6016803,46.5498747,0 7.6010186,46.5501518,0 7.5938758,46.5534441,0 7.5928254,46.5539036,0 7.5921917,46.5543492,0 7.5913683,46.5548097,0 + + + + #style-Waterway_Stream + + relativeToGround + 7.6097828,46.554791,0 7.6092077,46.5550334,0 7.6083698,46.555712,0 7.6069001,46.556455,0 7.6046978,46.5571409,0 7.6034027,46.5574888,0 7.6029575,46.5586298,0 7.6021076,46.559089,0 7.6011565,46.5596316,0 7.5990811,46.560389,0 7.5971888,46.5607735,0 7.5962684,46.5607439,0 7.5949954,46.5611342,0 7.5936106,46.5614773,0 7.592888,46.5622047,0 + + + + Engstlige + #style-Waterway_Stream + + relativeToGround + 7.5694288,46.4386699,0 7.5689025,46.4392606,0 7.568774,46.43946,0 7.568331,46.439699,0 7.567927,46.44015,0 7.567747,46.440192,0 7.567521,46.44046,0 7.5667949,46.4408454,0 7.5660904,46.4414907,0 7.565442,46.441646,0 7.5644443,46.4421245,0 7.5642466,46.4424135,0 7.56422,46.442644,0 7.5632839,46.443386,0 7.5615746,46.4449583,0 7.5621347,46.4456216,0 7.5626654,46.4466302,0 7.5627503,46.4485911,0 + + + + #style-Waterway_Stream + + relativeToGround + 7.5684827,46.4381903,0 7.568705,46.4386855,0 7.5687017,46.4389496,0 7.5689025,46.4392606,0 + + + + #style-Waterway_Stream + + relativeToGround + 7.5646506,46.4447386,0 7.5645313,46.4447993,0 7.5644484,46.4450193,0 7.5640955,46.4450566,0 7.5638276,46.4451873,0 + + + + Engstligfall + #style-Waterway_Stream + + relativeToGround + 7.5627503,46.4485911,0 7.5629257,46.4519973,0 7.5622285,46.4525302,0 7.5607905,46.4537849,0 + + + + #style-Waterway_Stream + + relativeToGround + 7.5620068,46.5282186,0 7.5616241,46.5285431,0 7.5612987,46.5290602,0 7.5610529,46.5299302,0 7.5611554,46.5308279,0 7.5614905,46.5326035,0 + + + + Otterbach + #style-Waterway_Stream + + relativeToGround + 7.5888244,46.5220523,0 7.5871462,46.521574,0 7.5861579,46.5215056,0 7.5848115,46.5211241,0 7.5830923,46.5211693,0 7.580815,46.522144,0 7.5765962,46.5222701,0 7.5744876,46.5222718,0 7.5650623,46.5253673,0 7.5641575,46.5257686,0 7.5630746,46.526248,0 7.562304,46.5273981,0 7.5621005,46.5277942,0 7.5620068,46.5282186,0 7.5620048,46.5291866,0 7.5623207,46.5299472,0 7.5624241,46.5306152,0 7.5627651,46.5313534,0 7.5628991,46.531972,0 + + + + #style-Waterway_Stream + + relativeToGround + 7.6030484,46.5615227,0 7.6049878,46.5605166,0 7.6063117,46.5602212,0 7.6087389,46.5599177,0 7.6107247,46.5592709,0 7.6120968,46.5587128,0 7.6127925,46.5583692,0 7.6139269,46.5579905,0 7.6150274,46.5575363,0 + + + + #style-Waterway_Stream + + relativeToGround + 7.5897984,46.5505716,0 7.590784,46.549945,0 7.5924214,46.5492396,0 7.5962237,46.5481799,0 7.5984549,46.547619,0 7.5998111,46.5476291,0 7.602103,46.5468677,0 + + + + #style-Waterway_Stream + + relativeToGround + 7.6025091,46.540512,0 7.6004436,46.5410848,0 7.5997811,46.5413145,0 7.5993888,46.5415236,0 7.5987378,46.5417055,0 7.5981278,46.5415615,0 7.5960941,46.5413591,0 7.5895257,46.5433921,0 7.5862162,46.545057,0 7.5845458,46.5461244,0 7.5839739,46.5467957,0 + + + + Bettbach + #style-Waterway_Stream + + relativeToGround + 7.5952076,46.5310701,0 7.5933564,46.5308251,0 7.5920313,46.5309442,0 7.5907951,46.5309688,0 7.5893698,46.5311437,0 7.5871115,46.5320641,0 7.5840636,46.5327994,0 7.5808357,46.5338491,0 7.5792828,46.5348533,0 7.5769635,46.5361725,0 + + + + #style-Waterway_Stream + + relativeToGround + 7.5632368,46.463919,0 7.5643968,46.463232,0 7.5657493,46.4626938,0 7.5683745,46.4623092,0 7.5707137,46.4620696,0 7.5751947,46.4618406,0 7.5771588,46.4618878,0 7.5796521,46.4627464,0 + + + + #style-Waterway_Stream + + relativeToGround + 7.563575,46.4676896,0 7.564838,46.4677747,0 7.5668754,46.4675639,0 7.5702666,46.4666669,0 7.572771,46.4663288,0 7.5792436,46.4665687,0 + + + + #style-Waterway_Stream + + relativeToGround + 7.563948,46.4668286,0 7.5654428,46.4666022,0 7.5697357,46.466088,0 7.5727472,46.4655845,0 7.5754053,46.4654321,0 + + + + Waleggbach + #style-Waterway_Stream + + relativeToGround + 7.4408874,46.4624093,0 7.4405704,46.4620447,0 7.4382377,46.4605186,0 7.4374644,46.459883,0 7.4365609,46.459575,0 7.4343172,46.4589405,0 7.4305385,46.4591194,0 7.4286491,46.4587615,0 7.4281059,46.4584361,0 7.4259568,46.4575088,0 7.4244689,46.4571508,0 7.4239493,46.457281,0 7.423477,46.4564838,0 7.4226976,46.4560282,0 7.4220836,46.4550682,0 7.4213514,46.4545313,0 7.420265,46.4548567,0 7.4199816,46.4538642,0 7.419155,46.4534249,0 7.4176945,46.4527747,0 7.4167971,46.4523029,0 7.4148841,46.4518961,0 7.4140103,46.4511639,0 7.413042,46.4502852,0 7.4125224,46.4500086,0 7.4107747,46.4495204,0 7.4101843,46.4483651,0 7.4091451,46.4472911,0 7.4072085,46.4462659,0 7.406193,46.4454523,0 7.4056498,46.4437435,0 7.4055789,46.4422301,0 + + + + #style-Waterway_Stream + + relativeToGround + 7.455212,46.4413715,0 7.4541445,46.440869,0 7.4523968,46.4403156,0 7.4508381,46.4397623,0 7.4500823,46.4393554,0 7.4491849,46.4388834,0 7.4487125,46.4384277,0 7.4484055,46.4379557,0 7.4480512,46.4371582,0 7.4469176,46.436377,0 7.4457368,46.4358887,0 7.4445087,46.4352702,0 7.4440363,46.4346517,0 7.4439891,46.4340983,0 7.443871,46.4334961,0 7.4439419,46.433138,0 7.4434931,46.4326659,0 7.4430916,46.4320474,0 7.4427846,46.4316567,0 7.441651,46.4311359,0 7.4410369,46.4310056,0 7.4406354,46.4303057,0 7.4403284,46.4296709,0 7.4401867,46.4286616,0 7.4390295,46.4272779,0 7.4383682,46.4258942,0 7.4383446,46.4252919,0 7.4383588,46.4234132,0 7.4379809,46.4229704,0 7.4379809,46.4224234,0 7.4383965,46.4222671,0 7.4385477,46.4220197,0 7.4394546,46.4209517,0 7.439572,46.4205138,0 7.439024,46.419662,0 + + + + Gilsbach + #style-Waterway_Stream + + relativeToGround + 7.5444891,46.4838255,0 7.5441715,46.4835228,0 7.543632,46.4826983,0 7.5431692,46.482315,0 7.5427131,46.4818558,0 7.5424228,46.4811668,0 7.5418523,46.4805595,0 7.5414058,46.4804053,0 7.5410234,46.4801636,0 7.5404661,46.4792391,0 7.5401919,46.478841,0 7.5391844,46.4774431,0 7.5389666,46.4766853,0 7.5386024,46.4761968,0 7.5383865,46.4757296,0 7.5376236,46.4739031,0 7.537638,46.4735448,0 7.5382409,46.4729685,0 + + + + #style-Waterway_Stream + + relativeToGround + 7.5579549,46.4702079,0 7.5585842,46.4702669,0 7.5596437,46.4708957,0 + + + + #style-Waterway_Stream + + relativeToGround + 7.5610883,46.4713922,0 7.5596437,46.4708957,0 + + + + #style-Waterway_Stream + + relativeToGround + 7.6113718,46.5266965,0 7.610492,46.5267482,0 7.6098322,46.5271948,0 7.6091348,46.5277705,0 7.6084374,46.5283758,0 7.6074933,46.5287818,0 7.6072465,46.5290438,0 7.606989,46.5291951,0 7.6063078,46.5294461,0 7.6059752,46.5295568,0 7.6051061,46.5297709,0 7.6038991,46.5300772,0 + + + + #style-Waterway_Stream + + relativeToGround + 7.6011565,46.5596316,0 7.600767,46.5601643,0 7.6003628,46.5608149,0 7.6000703,46.5616961,0 7.5995972,46.5624472,0 7.5990811,46.5628907,0 7.5982726,46.5633757,0 7.5976963,46.5635176,0 + + + + #style-Waterway_Stream + + relativeToGround + 7.5622868,46.4987922,0 7.563293,46.498268,0 7.5640554,46.4980879,0 7.5649734,46.4979027,0 7.5661467,46.4975824,0 7.5672189,46.4974246,0 7.5679539,46.4973689,0 7.5684799,46.4974478,0 7.5689384,46.4976242,0 7.5694981,46.4977727,0 7.570604,46.4978563,0 7.5716963,46.4978702,0 7.5722763,46.4977959,0 7.5730315,46.4969189,0 + + + + Allebach + #style-Waterway_Stream + + relativeToGround + 7.5396772,46.4842367,0 7.5411265,46.4838022,0 7.5436247,46.4837589,0 7.5442613,46.4839194,0 7.5444006,46.4838783,0 7.5444891,46.4838255,0 7.5460021,46.483802,0 7.5486107,46.4844951,0 7.5496668,46.4846853,0 7.5502713,46.4849285,0 7.550623,46.485323,0 7.5523906,46.4863698,0 7.5529233,46.4865507,0 7.5537024,46.4865959,0 7.5547532,46.4867557,0 7.5592633,46.4879144,0 7.5604607,46.4882109,0 7.562318,46.4882312,0 7.5628498,46.4883362,0 7.5651569,46.489581,0 7.5658291,46.4897725,0 7.5665939,46.4899418,0 7.5669049,46.4901147,0 7.5679163,46.4904384,0 + + + + Engstlige + #style-Waterway_Stream + + relativeToGround + 7.5607905,46.4537849,0 7.5604924,46.4541209,0 7.560399,46.454507,0 7.5606654,46.4568691,0 7.5619095,46.4595042,0 7.5625295,46.4614662,0 7.5626063,46.4627988,0 7.5632368,46.463919,0 7.5637327,46.4648,0 7.5640365,46.4664917,0 7.563948,46.4668286,0 7.5639095,46.4669753,0 7.563575,46.4676896,0 7.5632036,46.4684826,0 7.562787,46.4697544,0 7.5623296,46.4703181,0 7.5619262,46.4705013,0 7.5613885,46.4709202,0 7.56112,46.4712946,0 7.5610883,46.4713922,0 7.5611153,46.4716139,0 7.5613631,46.4719076,0 7.5611917,46.4726986,0 7.5615884,46.4733249,0 7.5611864,46.473944,0 7.5617112,46.4743256,0 7.5618499,46.4745876,0 7.5617554,46.4755833,0 7.56195,46.4759029,0 7.5620659,46.4763197,0 7.5621603,46.4764219,0 7.5627234,46.4765325,0 7.5628681,46.4766962,0 7.5627775,46.4768782,0 7.5625288,46.4770123,0 7.5622246,46.4773669,0 7.5622322,46.4775806,0 7.5623728,46.4776887,0 7.5625066,46.4781258,0 7.5619567,46.4786796,0 7.5618736,46.4788606,0 7.5619391,46.4792018,0 7.5622445,46.4793954,0 7.5628111,46.4795891,0 7.5629037,46.4797214,0 7.563056,46.4804239,0 7.5635031,46.4807911,0 7.5635066,46.4809088,0 7.563095,46.4814951,0 7.563097,46.4816769,0 7.5636883,46.4820501,0 7.5639504,46.4823962,0 7.5638459,46.4826554,0 7.563501,46.4830543,0 7.5635042,46.4831882,0 7.5639195,46.4834569,0 7.5640923,46.4836871,0 7.5642456,46.4841074,0 7.5642177,46.4843665,0 7.5634591,46.4851604,0 7.5636818,46.4857398,0 7.5649601,46.4874304,0 7.5661911,46.4879853,0 7.5665395,46.4886838,0 7.5676235,46.489324,0 7.5679163,46.4904384,0 + + + + #style-Waterway_Stream + + relativeToGround + 7.5962122,46.5089224,0 7.5886622,46.5110814,0 7.5869149,46.5114364,0 7.5829228,46.5126941,0 + + + + #style-Waterway_Stream + + relativeToGround + 7.5641575,46.5257686,0 7.5613671,46.5258087,0 7.5604396,46.5259298,0 7.5596879,46.5260952,0 7.5590727,46.5263174,0 + + + + #style-Waterway_Stream + + relativeToGround + 7.4458894,46.38078,0 7.445546,46.3804839,0 7.4447092,46.3800546,0 7.4438509,46.379951,0 7.4439796,46.3802767,0 7.4442371,46.3809132,0 7.4443659,46.3813425,0 + + + + #style-Waterway_Stream + + relativeToGround + 7.4452456,46.3812536,0 7.4444517,46.3803803,0 7.4438509,46.379951,0 7.4431428,46.3797808,0 7.4419411,46.3796031,0 7.4409755,46.3796993,0 7.4399348,46.3796919,0 7.4392482,46.3795143,0 7.4387225,46.3794773,0 7.4384221,46.3795365,0 7.4379286,46.379766,0 7.4372848,46.3803581,0 7.4369522,46.3810612,0 + + + + Schmittenbach + #style-Waterway_Stream + + relativeToGround + 7.561025,46.4950847,0 7.5620763,46.4944701,0 7.562971,46.4940767,0 7.5634598,46.4938949,0 7.564526,46.4932355,0 7.5657085,46.4926575,0 7.5662682,46.492473,0 7.5667333,46.4923318,0 7.5674467,46.4921962,0 7.5692638,46.4922844,0 + + + + + Waterway_Canal + + + + Waterway_Drain + + + + + Railways + + Railway_Rail_Casing + + + + Railway_Rail_Core + + + + Railway_Lightrail + + + + Railway_Tram + + + + + Natural_Features + + Cliff + + + + + Roads + + Core + + Motorway + + + + Motorway_Link + + + + Trunk + + + + Trunk_Link + + + + Primary + + + + Primary_Link + + + + Secondary + + + Lenkstrasse + #style-Secondary + + relativeToGround + 7.4421289,46.4613278,1 7.4424372,46.4608567,1 7.4425659,46.4606405,1 7.4426223,46.4604964,1 7.4426893,46.4602414,1 + + + + Lenkstrasse + #style-Secondary + + relativeToGround + 7.4323137,46.4764918,1 7.4336701,46.4747049,1 7.4348985,46.4732419,1 7.4359588,46.472141,1 7.4370811,46.4707552,1 7.4377578,46.4699427,1 7.4380689,46.469466,1 7.4384373,46.46873,1 7.4387197,46.4681415,1 7.4387985,46.4679364,1 7.4388238,46.4677498,1 7.4388285,46.4674118,1 7.4388628,46.4671901,1 7.4389654,46.4669807,1 7.4390935,46.4668317,1 7.4398408,46.466209,1 7.4400461,46.4659856,1 7.4402163,46.4657472,1 7.4403488,46.4655089,1 7.4404453,46.465217,1 7.4406961,46.4643705,1 7.4409781,46.4635043,1 7.441073,46.463266,1 7.4411695,46.4631071,1 7.441316,46.4629389,1 7.4414914,46.4626895,1 7.4416374,46.4622146,1 7.4419152,46.461629,1 7.4421289,46.4613278,1 + + + + Lenkstrasse + #style-Secondary + + relativeToGround + 7.4245844,46.4920082,1 7.4262126,46.4909139,1 7.4265951,46.4906478,1 7.4269109,46.4904109,1 7.4271226,46.4901976,1 7.4272528,46.4900189,1 7.4272987,46.4897359,1 7.4273256,46.4892013,1 7.4274383,46.4887803,1 7.427669,46.4881746,1 7.427858,46.4877541,1 7.4279747,46.4875615,1 7.4281029,46.4874142,1 7.4283818,46.4871409,1 7.4290041,46.4866386,1 7.4293903,46.4862988,1 7.4296806,46.4859289,1 7.4299413,46.4854299,1 7.430212,46.4846591,1 7.4303388,46.4844164,1 7.4305926,46.4840341,1 7.4306993,46.4837871,1 7.4307522,46.4836178,1 7.4307733,46.4833785,1 7.4307207,46.4828415,1 7.4307529,46.4824647,1 7.4309246,46.4821397,1 7.4312142,46.4817777,1 7.4313475,46.481483,1 7.4313859,46.4806991,1 7.431493,46.4804403,1 7.431579,46.4802927,1 7.4316738,46.4801621,1 7.4318371,46.4798194,1 7.4318258,46.4795687,1 7.4317788,46.479296,1 7.4315224,46.4785956,1 7.4314932,46.4783644,1 7.4315213,46.4780594,1 7.4315726,46.477845,1 7.431653,46.4776233,1 7.4318747,46.4771523,1 7.4323137,46.4764918,1 + + + + Lenkstrasse + #style-Secondary + + relativeToGround + 7.4191059,46.4991161,1 7.4194662,46.4987815,1 7.4197451,46.4984344,1 7.4198288,46.4982833,1 7.4198964,46.4981614,1 7.4200241,46.4977476,1 7.4201298,46.4970122,1 7.4203128,46.4962737,1 7.4204663,46.4959279,1 7.4206823,46.4955804,1 7.4210493,46.4951362,1 + + + + Lenkstrasse + #style-Secondary + + relativeToGround + 7.421178,46.4949811,1 7.42196,46.4940534,1 7.4224211,46.4935642,1 7.4227418,46.4933061,1 7.4230877,46.4930497,1 7.4245844,46.4920082,1 + + + + Lenkstrasse + #style-Secondary + + relativeToGround + 7.4210493,46.4951362,1 7.421178,46.4949811,1 + + + + Lenkstrasse + #style-Secondary + + relativeToGround + 7.442705,46.4601691,1 7.4427198,46.4601214,1 7.4427644,46.4599513,1 7.4428057,46.4598036,1 7.442913,46.4596483,1 7.4430721,46.4594012,1 7.4431497,46.4591692,1 7.443156,46.4590737,1 7.4431495,46.4589587,1 7.442987,46.4576685,1 7.4429961,46.4574482,1 7.4430461,46.4572518,1 7.4430622,46.4571982,1 + + + + Lenkstrasse + #style-Secondary + + relativeToGround + 7.4426893,46.4602414,1 7.442705,46.4601691,1 + + + + Landstrasse (223.1) + #style-Secondary + + relativeToGround + 7.5690779,46.4942399,1 7.5692844,46.4945619,1 7.5698423,46.4953005,1 7.5709768,46.4961208,1 7.5713873,46.4963345,1 7.5716754,46.4967489,1 7.5721169,46.4972208,1 7.5741339,46.4978412,1 7.5749927,46.4993482,1 7.5753145,46.5003082,1 7.5763776,46.5014193,1 7.5765386,46.5015899,1 7.5769888,46.501843,1 7.5784191,46.501918,1 7.5789112,46.5019253,1 7.5796023,46.5019527,1 7.5798635,46.5020363,1 7.5800494,46.5021673,1 7.580325,46.5027273,1 7.5803532,46.5027703,1 + + + + Adelbodenstrasse (223.1) + #style-Secondary + + relativeToGround + 7.6122594,46.5585364,1 7.6122192,46.5585079,1 7.610827,46.5573928,1 7.6094322,46.5564928,1 7.6086383,46.5555632,1 7.6077585,46.5551205,1 7.6058702,46.5535859,1 7.6048832,46.5526563,1 7.6046901,46.5520365,1 7.6040249,46.5516086,1 7.6028571,46.5505041,1 7.6026829,46.5500915,1 7.6025506,46.5498156,1 7.6025022,46.5497569,1 + + + + Adelbodenstrasse + #style-Secondary + + relativeToGround + 7.6025022,46.5497569,1 7.6023929,46.5496256,1 + + + + Adelbodenstrasse + #style-Secondary + + relativeToGround + 7.612416,46.5586345,1 7.6122594,46.5585364,1 + + + + Adelbodenstrasse + #style-Secondary + + relativeToGround + 7.6001154,46.5474612,1 7.6002652,46.547606,1 + + + + Adelbodenstrasse (223.1) + #style-Secondary + + relativeToGround + 7.6246335,46.5705545,1 7.6246247,46.5705495,1 7.6242166,46.5702873,1 7.6233582,46.5694317,1 7.6227574,46.5683549,1 7.6224141,46.5680303,1 7.6221411,46.5675483,1 7.6218995,46.5671196,1 7.6216416,46.5666731,1 7.6211267,46.5661273,1 7.6204829,46.5648438,1 7.6191955,46.5639734,1 7.6182728,46.5626161,1 7.6179588,46.5615664,1 7.6178013,46.5612694,1 7.6174972,46.56112,1 7.6168363,46.5609385,1 7.6157193,46.560403,1 7.6145821,46.5600341,1 7.6137452,46.5592522,1 7.612416,46.5586345,1 + + + + Adelbodenstrasse (223.1) + #style-Secondary + + relativeToGround + 7.6023929,46.5496256,1 7.6020079,46.5491442,1 7.6007848,46.5481112,1 7.6002652,46.547606,1 + + + + Adelbodenstrasse (223.1) + #style-Secondary + + relativeToGround + 7.6001154,46.5474612,1 7.5998406,46.5471962,1 7.599669,46.5467387,1 7.5997977,46.5460599,1 7.6002483,46.5451891,1 + + + + Adelbodenstrasse + #style-Secondary + + relativeToGround + 7.5917717,46.5267057,1 7.5923442,46.5260517,1 + + + + Adelbodenstrasse + #style-Secondary + + relativeToGround + 7.592227,46.5309052,1 7.5922718,46.5309677,1 + + + + Adelbodenstrasse (223.1) + #style-Secondary + + relativeToGround + 7.5987934,46.5407011,1 7.5987112,46.5396482,1 7.5984459,46.5390659,1 7.5987605,46.5380854,1 7.5981669,46.5376949,1 7.5979738,46.5372669,1 7.5975232,46.5369126,1 7.5972013,46.5362041,1 7.5967401,46.5358949,1 7.5963645,46.5355251,1 7.596107,46.5352151,1 7.5959139,46.5346099,1 7.5954367,46.534118,1 7.5951966,46.5330623,1 7.5942831,46.5321152,1 7.5939398,46.5315985,1 7.5936058,46.5312116,1 7.5932888,46.5311187,1 7.5926021,46.5311329,1 7.5924089,46.5310813,1 7.5923789,46.5310671,1 7.5922718,46.5309677,1 + + + + Adelbodenstrasse + #style-Secondary + + relativeToGround + 7.5923442,46.5260517,1 7.5925689,46.5257627,1 7.5928454,46.5253974,1 7.5927869,46.5248461,1 + + + + Adelbodenstrasse (223.1) + #style-Secondary + + relativeToGround + 7.5987934,46.5407011,1 7.5990252,46.5417356,1 7.5997548,46.5427687,1 7.600656,46.5435067,1 7.6005487,46.5442594,1 7.6002483,46.5451891,1 + + + + Adelbodenstrasse (223.1) + #style-Secondary + + relativeToGround + 7.592227,46.5309052,1 7.5922401,46.5306523,1 7.5928025,46.5295318,1 7.5927596,46.5290299,1 7.5926159,46.5287063,1 7.5920786,46.5277859,1 7.5917134,46.5271711,1 7.5916653,46.5270074,1 7.5917717,46.5267057,1 + + + + Landstrasse (223.1) + #style-Secondary + + relativeToGround + 7.5597987,46.4888045,1 7.5599098,46.488794,1 7.5600095,46.4888091,1 7.5600873,46.4888392,1 7.5604036,46.4890905,1 7.5605568,46.4891692,1 7.5607125,46.4892161,1 7.5615168,46.4893029,1 7.5626755,46.4897461,1 7.5641775,46.4897756,1 7.5658886,46.4903417,1 7.5659944,46.4903674,1 7.5670612,46.490656,1 7.5674115,46.490768,1 7.5677132,46.4909027,1 7.5688982,46.4924052,1 7.568897,46.4933261,1 7.5688982,46.4937051,1 7.5690779,46.4942399,1 + + + + Landstrasse + #style-Secondary + + relativeToGround + 7.5807143,46.5031184,1 7.5803532,46.5027703,1 + + + + Landstrasse (223.1) + #style-Secondary + + relativeToGround + 7.5597987,46.4888045,1 7.5597424,46.4888794,1 7.5597289,46.4889654,1 7.5598431,46.4891256,1 7.5604219,46.4895759,1 7.5610442,46.4898123,1 7.5618596,46.4904771,1 7.5619481,46.4908394,1 7.5619716,46.4909369,1 7.5620328,46.4912044,1 7.5620419,46.4912371,1 7.5621386,46.4916589,1 7.5623751,46.4918667,1 7.5633831,46.4927964,1 7.5633791,46.492965,1 7.5633139,46.4930204,1 7.5632271,46.4930606,1 7.5631435,46.493056,1 7.5625349,46.4929938,1 7.5615826,46.4930937,1 7.5609767,46.4931868,1 7.5597217,46.4932641,1 + + + + Landstrasse (223.1) + #style-Secondary + + relativeToGround + 7.5927869,46.5248461,1 7.5922439,46.524217,1 7.5915151,46.5232566,1 7.5901418,46.5224298,1 7.5896053,46.5219869,1 7.589224,46.5211243,1 7.5890023,46.5205153,1 7.5882535,46.5188272,1 7.5879102,46.5182808,1 7.5872235,46.5177345,1 7.5870469,46.5174702,1 7.587009,46.517011,1 7.5876833,46.5164516,1 7.5880389,46.5161546,1 7.5880818,46.5159478,1 7.5878243,46.5158445,1 7.5868373,46.5160955,1 7.5864725,46.5160512,1 7.5863867,46.5158592,1 7.5868373,46.5151357,1 7.5868587,46.5144269,1 7.5861506,46.5135852,1 7.5858073,46.5129798,1 7.5856571,46.5122562,1 7.5853231,46.5118698,1 7.5849493,46.5116193,1 7.5849029,46.5115884,1 7.5845033,46.511303,1 7.5837259,46.5103807,1 7.5835972,46.5099525,1 7.5837819,46.5092432,1 7.5837688,46.5089696,1 7.5834684,46.5083132,1 7.5833721,46.5079092,1 7.5833611,46.5074862,1 7.5835114,46.5066296,1 7.5834554,46.5063745,1 7.5833344,46.5060923,1 7.5823956,46.5048989,1 7.5819422,46.5041172,1 7.5814943,46.503661,1 7.5808419,46.5032417,1 7.5807143,46.5031184,1 + + + + + Unclassified + + + Schlegelistrasse + #style-Unclassified + + relativeToGround + 7.5650662,46.4957333,1 7.5647157,46.4954991,1 7.5643603,46.4953787,1 7.5628576,46.4946658,1 7.5626535,46.4945986,1 7.5617886,46.4948002,1 7.561591,46.494845,1 7.5614673,46.4947425,1 7.5615188,46.494565,1 7.5617978,46.4943139,1 7.5617449,46.4941344,1 7.5613391,46.4939717,1 7.5598323,46.4933677,1 7.5597217,46.4932641,1 + + + + Ruheweg + #style-Unclassified + + relativeToGround + 7.5628576,46.4946658,1 7.5631584,46.4945553,1 7.5636005,46.4947211,1 + + + + Dorfstrasse + #style-Unclassified + + relativeToGround + 7.5597217,46.4932641,1 7.5595144,46.4930964,1 + + + + Sunneweg + #style-Unclassified + + relativeToGround + 7.5589173,46.4942818,1 7.5592854,46.4947564,1 + + + + Haltenstrasse + #style-Unclassified + + relativeToGround + 7.5580946,46.4928578,1 7.5580394,46.4929428,1 7.5580016,46.493001,1 7.5584826,46.4935359,1 7.5589806,46.4941802,1 7.5589173,46.4942818,1 7.5580289,46.4940058,1 7.557863,46.4940514,1 7.5585141,46.4945781,1 7.5584892,46.4949762,1 + + + + Bellevuegaessli + #style-Unclassified + + relativeToGround + 7.5581971,46.4920378,1 7.5579392,46.492211,1 7.5576315,46.4922586,1 7.5573333,46.4922537,1 7.5568548,46.4922385,1 + + + + Bellevuestrasse + #style-Unclassified + + relativeToGround + 7.5568451,46.4909915,1 7.5562427,46.4910686,1 7.5560919,46.4912908,1 7.5563797,46.4920739,1 + + + + Senggistrasse + #style-Unclassified + + relativeToGround + 7.556064,46.4904831,1 7.5558567,46.490661,1 7.555653,46.4908226,1 7.5555547,46.4908982,1 + + + + Untere Kurhausstrasse + #style-Unclassified + + relativeToGround + 7.5594245,46.493615,1 7.5603132,46.4940893,1 7.5611146,46.4943645,1 7.5612008,46.4943941,1 + + + + Obere Dorfstrasse + #style-Unclassified + + relativeToGround + 7.5576315,46.4922586,1 7.5580946,46.4928578,1 7.5584537,46.4927197,1 7.5588805,46.4931539,1 7.5590802,46.4933577,1 7.5594245,46.493615,1 + + + + #style-Unclassified + + relativeToGround + 7.5559303,46.4904006,1 7.5560779,46.4899713,1 7.5561408,46.4893354,1 + + + + #style-Unclassified + + relativeToGround + 7.599669,46.5467387,1 7.5994759,46.5465921,1 7.5994329,46.5460756,1 7.5998836,46.5456919,1 7.5998192,46.5452196,1 7.6005487,46.5449983,1 7.6007848,46.5444965,1 7.6010637,46.5442308,1 7.6011066,46.5438176,1 7.60145,46.5432715,1 7.6011281,46.5426074,1 7.6011066,46.5421794,1 7.6007068,46.54153,1 7.6001666,46.5412566,1 + + + + Alte Adelbodenstrasse + #style-Unclassified + + relativeToGround + 7.5982021,46.522924,1 7.5984662,46.5231705,1 7.5989692,46.523522,1 7.5991969,46.5235962,1 7.5997134,46.5240328,1 7.5999724,46.5242085,1 7.6002352,46.5243045,1 7.6008843,46.5244115,1 7.6011526,46.5245222,1 7.6012759,46.5246809,1 7.6017856,46.5255889,1 7.6019197,46.525803,1 7.6021074,46.5259285,1 7.6024799,46.5260617,1 7.6030516,46.5262828,1 7.6033037,46.5263123,1 7.6034753,46.5262754,1 7.6038103,46.5260773,1 7.604218,46.5260773,1 7.6046472,46.5258854,1 7.6049047,46.525974,1 7.6049261,46.5262841,1 7.6048111,46.5267257,1 7.6048403,46.5269189,1 7.6049935,46.5271612,1 7.6054441,46.5276262,1 7.6058059,46.5280704,1 7.6059609,46.5289507,1 7.6061361,46.5293018,1 7.6062112,46.5294716,1 7.6061897,46.5295602,1 7.6060932,46.5296155,1 7.6059035,46.5296615,1 7.6056342,46.5297829,1 7.6054173,46.5299514,1 7.60509,46.5303462,1 7.6049665,46.5305456,1 7.6049613,46.5306895,1 7.6050847,46.530922,1 7.6052788,46.5311467,1 7.6054977,46.5313944,1 7.6058679,46.5317228,1 7.6059001,46.5317745,1 7.6059376,46.5318926,1 7.6059913,46.5320586,1 7.6061305,46.5322292,1 7.6063638,46.5324253,1 7.6064526,46.5325901,1 7.6064848,46.5327635,1 7.6066135,46.5329037,1 7.6070674,46.5331968,1 7.6075738,46.5335237,1 7.6078014,46.5337372,1 7.6080673,46.5340035,1 7.6084911,46.5345533,1 7.6088129,46.5349371,1 7.6091724,46.5354021,1 7.6094674,46.5357084,1 7.6099073,46.5360479,1 7.6105403,46.5366752,1 7.6109557,46.5370289,1 7.6117258,46.5375645,1 7.6119684,46.5378839,1 7.6121573,46.5382392,1 7.6123535,46.5384464,1 7.6124421,46.5386678,1 7.61245,46.5388523,1 7.612367,46.5392618,1 7.6123505,46.5394348,1 7.6123964,46.5396051,1 7.6123763,46.5398221,1 7.6122861,46.5400548,1 7.6121496,46.5402582,1 7.6120152,46.5403909,1 7.6117741,46.5406899,1 7.6114898,46.5410958,1 7.6112776,46.5414422,1 7.6111894,46.5417378,1 7.6111376,46.5422652,1 7.6111518,46.5425828,1 7.6112269,46.5427045,1 7.611361,46.5428226,1 7.6116239,46.5430292,1 7.6122193,46.5434203,1 7.6129865,46.5439111,1 7.6135926,46.5443612,1 7.6146119,46.5451434,1 7.614784,46.5453074,1 7.6148962,46.5454644,1 7.6149659,46.5456968,1 7.6150679,46.5458444,1 7.6157974,46.546693,1 7.6160263,46.546901,1 7.6166128,46.5473312,1 7.6167278,46.5474471,1 7.6170688,46.5479732,1 7.6173072,46.548244,1 7.6177393,46.5486742,1 7.6180505,46.5488845,1 7.6184582,46.5491206,1 7.6196544,46.5497404,1 7.6199768,46.5500353,1 7.6204185,46.5506204,1 7.6207273,46.550873,1 7.6210438,46.5510574,1 7.6220678,46.5515417,1 + + + + Hörnliweg + #style-Unclassified + + relativeToGround + 7.5617886,46.4948002,1 7.5618606,46.4948615,1 7.5623632,46.494749,1 7.5625028,46.4947991,1 7.5625853,46.4950604,1 7.5626507,46.4952674,1 7.5627191,46.4953707,1 7.5631362,46.496001,1 7.5633343,46.4964952,1 7.5633664,46.4966989,1 7.5633291,46.4970595,1 7.5632368,46.4976696,1 7.563267,46.49787,1 7.5633854,46.4980113,1 7.563427,46.498168,1 + + + + #style-Unclassified + + relativeToGround + 7.559232,46.4796016,1 7.5585617,46.4808415,1 7.5583492,46.4819039,1 + + + + #style-Unclassified + + relativeToGround + 7.5609767,46.4931868,1 7.561166,46.4933554,1 7.5615163,46.4934914,1 + + + + #style-Unclassified + + relativeToGround + 7.5793256,46.4906279,1 7.580064,46.4905866,1 7.5805941,46.4903711,1 7.581293,46.4898469,1 7.5815091,46.4898495,1 + + + + #style-Unclassified + + relativeToGround + 7.5594245,46.493615,1 7.5598323,46.4933677,1 + + + + #style-Unclassified + + relativeToGround + 7.5587375,46.4925106,1 7.5584537,46.4927197,1 + + + + #style-Unclassified + + relativeToGround + 7.5535228,46.4865284,1 7.5535075,46.4866379,1 + + + + #style-Unclassified + + relativeToGround + 7.4450513,46.4614534,1 7.4452221,46.4614886,1 7.4456382,46.4613184,1 7.4461757,46.4609278,1 7.4463157,46.4610248,1 7.4464015,46.4610858,1 7.4466914,46.4607591,1 7.4468012,46.4607348,1 + + + + Bühlbergstrasse + #style-Unclassified + + relativeToGround + 7.4430622,46.4571982,1 7.4431212,46.4572001,1 7.4432434,46.4572082,1 7.4442759,46.457382,1 7.4444794,46.4574163,1 7.4448677,46.4575035,1 7.4464578,46.4579817,1 7.4465356,46.4580981,1 7.4476729,46.4597444,1 7.4477077,46.4598442,1 + + + + Gutenbrunnenstrasse + #style-Unclassified + + relativeToGround + 7.4448677,46.4575035,1 7.4448112,46.457744,1 7.4446903,46.4584104,1 7.4446715,46.4588889,1 7.4446685,46.4592476,1 7.4447089,46.4594931,1 7.4447493,46.4595984,1 7.444827,46.4597038,1 + + + + Wallenbachstrasse + #style-Unclassified + + relativeToGround + 7.4421289,46.4613278,1 7.4420439,46.4613149,1 7.4419537,46.4612981,1 7.4418739,46.4612798,1 + + + + Ägertenstrasse + #style-Unclassified + + relativeToGround + 7.441257,46.4569858,1 7.4409713,46.4574792,1 7.4407225,46.4578869,1 7.4398636,46.4589239,1 7.4396997,46.4590756,1 7.4393993,46.4592865,1 7.4389969,46.4594599,1 7.4386873,46.4595765,1 7.4384892,46.4596916,1 7.438253,46.4598534,1 7.438103,46.459935,1 7.4378459,46.4600208,1 7.4377581,46.4600511,1 + + + + Rütistrasse + #style-Unclassified + + relativeToGround + 7.4378459,46.4600208,1 7.4371477,46.4594844,1 7.4369002,46.4593711,1 7.4351732,46.4588118,1 7.4346689,46.4587157,1 7.4343168,46.4586884,1 7.433596,46.4585605,1 7.4332261,46.4585191,1 7.4327699,46.458627,1 7.432094,46.4586566,1 7.4318151,46.4585975,1 7.4316005,46.4585827,1 7.4312142,46.4585309,1 7.430828,46.4585679,1 7.4304096,46.4586862,1 + + + + #style-Unclassified + + relativeToGround + 7.4427198,46.4601214,1 7.4441314,46.4598231,1 7.444827,46.4597038,1 + + + + #style-Unclassified + + relativeToGround + 7.4403161,46.4578243,1 7.4407225,46.4578869,1 + + + + #style-Unclassified + + relativeToGround + 7.4407225,46.4578869,1 7.4409101,46.4579181,1 + + + + #style-Unclassified + + relativeToGround + 7.4404453,46.465217,1 7.4393848,46.4651486,1 + + + + Fuhrenstrasse + #style-Unclassified + + relativeToGround + 7.4296586,46.4726679,1 7.4298576,46.4724974,1 7.4299482,46.4723427,1 7.4302165,46.4718551,1 7.4304096,46.4715226,1 7.4309246,46.4709019,1 7.4314181,46.4703033,1 7.4340467,46.4683451,1 7.4344114,46.4681161,1 7.4347333,46.4678353,1 7.4351088,46.4673623,1 7.4359993,46.4657735,1 7.4367235,46.464426,1 7.4368575,46.4640778,1 7.4368843,46.4636223,1 7.4366858,46.462123,1 + + + + Schadaulistrasse + #style-Unclassified + + relativeToGround + 7.4318747,46.4771523,1 7.4308709,46.4767833,1 7.4304263,46.4765871,1 7.4295513,46.4761553,1 7.4293897,46.4761015,1 7.4292187,46.4760445,1 + + + + #style-Unclassified + + relativeToGround + 7.4523989,46.4496459,1 7.452694,46.4494094,1 7.4529944,46.4490804,1 7.4538849,46.446604,1 7.454593,46.4446597,1 7.4548183,46.4438761,1 + + + + Oberriedstrasse + #style-Unclassified + + relativeToGround + 7.4430622,46.4571982,1 7.4430863,46.457126,1 7.4433572,46.4566273,1 7.443502,46.4562947,1 7.4435554,46.4560527,1 7.4435718,46.4557441,1 7.4436426,46.455437,1 7.4437272,46.454981,1 7.4437756,46.4548719,1 7.4440412,46.4544542,1 7.444062,46.4544122,1 + + + + #style-Unclassified + + relativeToGround + 7.4490998,46.4394476,1 7.4493703,46.4398371,1 7.4496041,46.4400538,1 7.4498937,46.4404937,1 7.4501101,46.4406845,1 + + + + #style-Unclassified + + relativeToGround + 7.4501101,46.4406845,1 7.4518839,46.4414253,1 7.4527026,46.4418144,1 7.4535265,46.4432753,1 7.4540243,46.4437721,1 7.4545085,46.4440271,1 + + + + #style-Unclassified + + relativeToGround + 7.4518839,46.4414253,1 7.4463319,46.4499791,1 7.4459512,46.4506147,1 7.4453521,46.4516335,1 7.4453308,46.4518244,1 + + + + Pöschenriedstrasse + #style-Unclassified + + relativeToGround + 7.439194,46.451784,1 7.4391746,46.4521405,1 + + + + Wallenbachstrasse + #style-Unclassified + + relativeToGround + 7.441721,46.461265,1 7.4416647,46.4612502,1 7.4414716,46.4614165,1 7.4413107,46.4614646,1 7.4411444,46.461472,1 7.4407767,46.4613635,1 7.4398247,46.4608733,1 7.439138,46.4604323,1 7.4390154,46.4603058,1 7.438972,46.4601436,1 7.4389969,46.4594599,1 + + + + Pöschenriedstrasse + #style-Unclassified + + relativeToGround + 7.439194,46.451784,1 7.4393621,46.4512978,1 7.4397084,46.4508377,1 7.4397951,46.4507502,1 7.4408595,46.449676,1 7.441074,46.4493211,1 7.4412135,46.4489959,1 7.4412457,46.4486706,1 7.4412457,46.4482641,1 7.4413208,46.4480793,1 7.441589,46.4477022,1 7.4417178,46.4472513,1 7.4424473,46.4464677,1 7.442676,46.4460304,1 7.4430129,46.4450125,1 7.4431554,46.4447748,1 7.4432091,46.4444791,1 7.4432735,46.4442573,1 7.4433807,46.444176,1 7.4435095,46.4441242,1 7.4436275,46.4440133,1 7.443649,46.443762,1 7.4436919,46.4430449,1 7.4437348,46.4427639,1 7.4436919,46.4423351,1 7.4437348,46.4421207,1 7.4438839,46.4418249,1 7.4442712,46.4403685,1 7.4444429,46.4399619,1 7.4444751,46.4397401,1 7.4444429,46.4394961,1 7.4444107,46.4389564,1 7.4444536,46.4387272,1 7.4445287,46.4385128,1 7.444518,46.4381653,1 7.4444291,46.4378855,1 7.4443034,46.4374185,1 7.4440861,46.4371049,1 7.4436812,46.4366126,1 7.4434558,46.4364056,1 7.4431783,46.4362938,1 7.4428842,46.4360814,1 7.4424312,46.4355924,1 7.4421117,46.4349575,1 7.4418358,46.4339655,1 7.4412534,46.4325618,1 7.4411599,46.4323018,1 7.4409084,46.4319278,1 7.4400947,46.4304322,1 7.4399153,46.4300391,1 7.4398617,46.4296989,1 7.439851,46.4295214,1 7.4400012,46.4291665,1 7.4400211,46.4289007,1 7.4398188,46.4285453,1 7.4396378,46.4283387,1 7.4388103,46.4276505,1 7.4386922,46.4275026,1 7.4384669,46.4269258,1 7.4383275,46.4266152,1 7.4380485,46.4261049,1 7.4378983,46.4254615,1 7.4379305,46.4249956,1 7.4381451,46.4242413,1 7.4382309,46.4238049,1 7.4381635,46.4236286,1 7.4376515,46.4230654,1 7.4375228,46.4227696,1 7.4374799,46.4225699,1 7.4376086,46.4223924,1 7.437791,46.4222962,1 7.4380378,46.4222223,1 7.4381987,46.4221409,1 7.438424,46.4218007,1 7.4386171,46.4214975,1 7.4393222,46.4207591,1 7.4394433,46.4206174,1 7.4394111,46.4204694,1 7.4393252,46.4203659,1 7.4391107,46.4202697,1 7.438939,46.4200996,1 7.4387352,46.4197816,1 7.4383704,46.4195301,1 7.4381635,46.4193094,1 7.4381236,46.4191085,1 7.4381558,46.4187165,1 7.438167,46.4183333,1 7.4382845,46.417866,1 7.4385206,46.4174814,1 7.4387566,46.4170154,1 7.4387723,46.4169033,1 7.4387888,46.4167861,1 7.4386272,46.4164164,1 7.4384991,46.4161204,1 + + + + #style-Unclassified + + relativeToGround + 7.4384991,46.4161204,1 7.4388581,46.415908,1 7.4389068,46.4156322,1 7.4388317,46.4152994,1 7.4389927,46.4149221,1 7.4394325,46.4147224,1 7.4399797,46.4143378,1 7.4403767,46.4141307,1 7.4406985,46.413857,1 7.4409959,46.4135401,1 7.4413392,46.4130075,1 7.4419793,46.4126531,1 7.4419305,46.4125999,1 7.4415906,46.4124847,1 7.441101,46.4124355,1 7.4404666,46.4125933,1 7.4404194,46.4125372,1 7.4405193,46.4124716,1 7.4412531,46.4122448,1 7.4423692,46.4122678,1 7.4424048,46.4122319,1 7.4423429,46.412186,1 7.441468,46.4118535,1 7.4403289,46.4116246,1 7.4396951,46.4114482,1 7.4396417,46.4113803,1 7.4397084,46.4112026,1 7.4392793,46.4109067,1 7.438893,46.4108771,1 7.4396655,46.4107587,1 7.4407813,46.4110251,1 7.4421975,46.4110546,1 7.4425409,46.4113801,1 7.4430558,46.4113407,1 7.4434284,46.4111913,1 7.4436951,46.4108827,1 7.4441145,46.4106569,1 7.4448583,46.4102856,1 7.4461028,46.4086579,1 7.4461457,46.4082436,1 7.4459741,46.4078589,1 7.4456308,46.4079477,1 7.4454162,46.4082436,1 7.4452874,46.4079477,1 7.445502,46.4075926,1 7.4458453,46.4073263,1 7.4463174,46.4064089,1 7.4472186,46.4059651,1 + + + + Gutenbrunnenstrasse + #style-Unclassified + + relativeToGround + 7.4449449,46.4598479,1 7.4450899,46.4600345,1 7.4451328,46.4601213,1 7.4451487,46.4602746,1 7.4450926,46.4604484,1 7.4448382,46.4608729,1 7.4447171,46.4611856,1 7.4446607,46.4613556,1 7.444642,46.4615773,1 7.4446527,46.4617085,1 7.4446688,46.4618747,1 7.4447493,46.4621371,1 7.4450569,46.4629393,1 7.4451223,46.4632094,1 7.445055,46.4636188,1 7.4449424,46.4639884,1 7.4445079,46.4650156,1 7.4444084,46.4652649,1 7.4442226,46.465441,1 7.4440304,46.4655661,1 7.4435166,46.4657543,1 7.4432198,46.46584,1 7.4430595,46.4659171,1 7.4429683,46.4660723,1 7.4428743,46.4668792,1 7.4428824,46.4673286,1 7.4429361,46.4676205,1 7.4431238,46.468001,1 7.4433223,46.4681045,1 7.4434994,46.4680971,1 7.4436635,46.4680594,1 7.4438105,46.4679789,1 7.4440358,46.4679124,1 7.4442075,46.467905,1 7.4443308,46.4679567,1 7.4443149,46.4680648,1 7.4439285,46.4684851,1 7.4438212,46.4686883,1 7.4437958,46.4688583,1 7.4437622,46.4690319,1 7.4436496,46.4691908,1 7.4437193,46.4693016,1 7.4438761,46.4692998,1 7.4439929,46.4692129,1 7.4440902,46.4690344,1 7.4441645,46.46874,1 7.4442289,46.4686735,1 7.4444113,46.4685885,1 7.4448194,46.4685572,1 7.4464444,46.4684814,1 7.4468575,46.4684296,1 7.4472223,46.4683225,1 7.4479143,46.4683484,1 7.4481074,46.4683114,1 7.4482853,46.4680752,1 7.4484024,46.46782,1 7.4487458,46.4674912,1 7.4490163,46.4674327,1 7.4496041,46.4670958,1 7.4497596,46.4670589,1 7.4498401,46.4671106,1 7.4498508,46.4671882,1 7.4497566,46.4672727,1 7.4495987,46.4674284,1 7.4493307,46.4679198,1 7.4492876,46.4681784,1 7.4496416,46.4692868,1 7.4496563,46.4697213,1 7.4494699,46.470107,1 7.4492607,46.4702844,1 7.4489711,46.4704322,1 7.4478714,46.470713,1 7.4475441,46.4708275,1 7.4473456,46.4709642,1 7.447056,46.4711489,1 7.4463582,46.4714157,1 7.4459884,46.471607,1 7.4456988,46.4718509,1 7.4452286,46.4724169,1 7.445114,46.4726674,1 7.4450765,46.4731809,1 7.4449746,46.4733841,1 7.4447178,46.4736469,1 7.4446098,46.4738533,1 7.4445584,46.4740966,1 7.4449598,46.4755818,1 7.4449197,46.4763244,1 7.4445384,46.4777695,1 7.4449211,46.4786051,1 7.4448411,46.4792847,1 7.4442814,46.4802442,1 7.4437217,46.4809239,1 7.4432419,46.4819633,1 7.4429621,46.4833226,1 7.443082,46.4843221,1 7.4434418,46.4851617,1 7.4433219,46.4860013,1 7.4416827,46.4874405,1 7.4412829,46.4883201,1 7.441083,46.4898393,1 7.441163,46.4919582,1 7.4409631,46.4925579,1 7.4410031,46.4940371,1 7.4414828,46.4941171,1 7.443162,46.4933975,1 7.4438816,46.4935174,1 7.4453209,46.4933175,1 7.4477318,46.4928481,1 7.4476808,46.4927546,1 7.4472302,46.4928149,1 7.4455921,46.4926496,1 7.4451878,46.4926864,1 7.4452666,46.4925236,1 7.4456341,46.4924028,1 7.4470149,46.4921981,1 7.447288,46.4921193,1 7.4472985,46.4920563,1 7.4467734,46.4919776,1 7.4455659,46.4916048,1 7.4455134,46.4915365,1 7.4457444,46.4910168,1 7.4454188,46.490728,1 7.4453663,46.4905652,1 + + + + Gutenbrunnenstrasse + #style-Unclassified + + relativeToGround + 7.444827,46.4597038,1 7.4448524,46.4597347,1 + + + + Wallenbachstrasse + #style-Unclassified + + relativeToGround + 7.4418739,46.4612798,1 7.441721,46.461265,1 + + + + Schanzenstrasse + #style-Unclassified + + relativeToGround + 7.4448677,46.4575035,1 7.4448703,46.4570212,1 7.4451135,46.4568262,1 7.4455274,46.4564945,1 7.4460994,46.4560016,1 + + + + #style-Unclassified + + relativeToGround + 7.4432434,46.4572082,1 7.4433858,46.4575296,1 7.4438332,46.4578509,1 + + + + Oertlistrasse + #style-Unclassified + + relativeToGround + 7.4446688,46.4618747,1 7.4449263,46.4618784,1 7.4450513,46.4614534,1 7.4455535,46.4605947,1 + + + + #style-Unclassified + + relativeToGround + 7.4464015,46.4610858,1 7.4459878,46.4615401,1 + + + + #style-Unclassified + + relativeToGround + 7.4477077,46.4598442,1 7.4465974,46.459692,1 7.445441,46.4596274,1 7.444827,46.4597038,1 + + + + Untere Haltenstrasse + #style-Unclassified + + relativeToGround + 7.4464578,46.4579817,1 7.4474714,46.4583086,1 7.4475806,46.4582904,1 7.4478352,46.4579994,1 7.4480413,46.457563,1 7.4481747,46.4576539,1 7.448593,46.4576963,1 7.4486688,46.4577077,1 + + + + Untere Haltenstrasse + #style-Unclassified + + relativeToGround + 7.4478352,46.4579994,1 7.4483384,46.4580722,1 7.4486688,46.4577077,1 7.4487506,46.4576175,1 + + + + Oeystrasse + #style-Unclassified + + relativeToGround + 7.5535075,46.4866379,1 7.5541077,46.486711,1 + + + + #style-Unclassified + + relativeToGround + 7.5705898,46.498823,1 7.5706468,46.4988918,1 7.571328,46.499657,1 7.5715737,46.4997902,1 7.571972,46.499918,1 7.5724383,46.5003898,1 7.57264,46.500482,1 7.572698,46.50071,1 7.573314,46.500878,1 7.573326,46.500982,1 7.5736,46.501081,1 7.573867,46.501362,1 7.574116,46.501755,1 7.574486,46.502791,1 7.575551,46.504242,1 7.575842,46.505145,1 7.575844,46.5053877,1 7.5758952,46.5056591,1 7.5759918,46.5060425,1 7.57603,46.506199,1 7.57625,46.506853,1 7.5763751,46.5070038,1 7.5765527,46.5070657,1 + + + + #style-Unclassified + + relativeToGround + 7.570559,46.498933,1 7.5706468,46.4988918,1 + + + + #style-Unclassified + + relativeToGround + 7.580669,46.513662,1 7.5807275,46.5139652,1 7.5807645,46.5144849,1 7.5810451,46.5147994,1 7.5814548,46.5149276,1 7.5815259,46.5149997,1 7.5814644,46.5151169,1 7.581154,46.515336,1 7.5808687,46.5154174,1 7.5804932,46.5153665,1 7.5796209,46.5152968,1 7.5795576,46.5153762,1 + + + + #style-Unclassified + + relativeToGround + 7.5796209,46.5152968,1 7.5791481,46.514688,1 7.57917,46.514448,1 7.578968,46.514106,1 7.578725,46.513934,1 7.577749,46.513746,1 7.57743,46.513533,1 + + + + Mattenweg + #style-Unclassified + + relativeToGround + 7.5617403,46.4958305,1 7.5617231,46.4956946,1 7.561869,46.4956828,1 7.5631362,46.496001,1 + + + + Fichtenweg + #style-Unclassified + + relativeToGround + 7.5642551,46.4979457,1 7.5637573,46.4971953,1 7.5633291,46.4970595,1 + + + + Hörnliweg + #style-Unclassified + + relativeToGround + 7.563427,46.498168,1 7.5634771,46.498246,1 + + + + Obere Kurhausstrasse + #style-Unclassified + + relativeToGround + 7.5594245,46.493615,1 7.5594073,46.4937805,1 7.559845,46.4940345,1 7.5599738,46.4943241,1 7.5608149,46.494649,1 + + + + #style-Unclassified + + relativeToGround + 7.556064,46.4904831,1 7.5562058,46.4901582,1 7.5560779,46.4899713,1 + + + + Aebiweg + #style-Unclassified + + relativeToGround + 7.525197,46.4841121,1 7.5254535,46.4838699,1 7.5283631,46.4827706,1 7.5290927,46.4828534,1 7.5296334,46.4826879,1 7.5306977,46.4826465,1 7.5316762,46.4823628,1 7.5330409,46.4820851,1 7.5332297,46.4820851,1 7.5339335,46.482351,1 7.5343284,46.4823096,1 7.5346202,46.4821914,1 7.5349549,46.4818014,1 7.5351352,46.4817541,1 7.5352897,46.4818014,1 7.5355986,46.4821501,1 7.5359591,46.4821973,1 7.5371522,46.4817482,1 7.5372294,46.4812576,1 7.537032,46.4807671,1 7.5371007,46.4804361,1 7.5378217,46.4802115,1 7.5390599,46.4794675,1 + + + + #style-Unclassified + + relativeToGround + 7.5568548,46.4922385,1 7.5564947,46.4921923,1 7.5563797,46.4920739,1 + + + + Schwendliweg + #style-Unclassified + + relativeToGround + 7.5563573,46.493575,1 7.5559968,46.4931141,1 7.5558595,46.4922159,1 7.555705,46.4920327,1 7.5556793,46.492015,1 + + + + #style-Unclassified + + relativeToGround + 7.5426865,46.4886019,1 7.5426779,46.4886728,1 7.5428925,46.4887023,1 7.5430813,46.4884246,1 7.5433731,46.4882059,1 7.5439138,46.4880345,1 + + + + #style-Unclassified + + relativeToGround + 7.5621068,46.4705513,1 7.5621068,46.4703326,1 + + + + #style-Unclassified + + relativeToGround + 7.563823,46.4661917,1 7.5640376,46.4659612,1 + + + + #style-Unclassified + + relativeToGround + 7.5649892,46.4595141,1 7.5667928,46.4591384,1 + + + + #style-Unclassified + + relativeToGround + 7.5649892,46.4595141,1 7.5639522,46.4598625,1 7.5627558,46.4606653,1 7.5624583,46.460924,1 + + + + #style-Unclassified + + relativeToGround + 7.5573333,46.4922537,1 7.5572692,46.4923768,1 7.5575911,46.4927979,1 7.5576125,46.4928259,1 + + + + Holzachseggenweg + #style-Unclassified + + relativeToGround + 7.574161,46.5050942,1 7.5745177,46.5050132,1 7.5746686,46.5050133,1 7.5748119,46.5051096,1 7.5749181,46.5052865,1 7.5749613,46.5054369,1 7.5749935,46.5057891,1 7.5751992,46.5059527,1 7.5762188,46.5070028,1 7.5765527,46.5070657,1 7.5768093,46.5071724,1 7.5769754,46.5073393,1 7.5770131,46.5075288,1 7.5769805,46.5077763,1 7.5771975,46.508068,1 7.5774508,46.5082856,1 7.5776375,46.5085748,1 + + + + Holzachseggenweg + #style-Unclassified + + relativeToGround + 7.580641,46.513675,1 7.580404,46.513551,1 7.5802043,46.5134503,1 7.5797717,46.5127021,1 7.579667,46.512463,1 7.5796377,46.5123126,1 7.5796306,46.5118712,1 7.5795023,46.511653,1 7.579245,46.511192,1 7.578725,46.510501,1 7.57876,46.510111,1 7.5785213,46.5099119,1 7.5783897,46.5097234,1 7.5784323,46.509327,1 7.5782946,46.5090724,1 7.5779976,46.5089351,1 7.5777993,46.5087052,1 7.5776375,46.5085748,1 + + + + #style-Unclassified + + relativeToGround + 7.6170304,46.559005,1 7.617521,46.559201,1 7.61769,46.559157,1 7.618127,46.558916,1 7.618334,46.558972,1 7.618372,46.559119,1 7.6185053,46.5592427,1 + + + + Badstrasse + #style-Unclassified + + relativeToGround + 7.4360929,46.4545316,1 7.4354269,46.4543073,1 7.4353973,46.4541646,1 7.4355302,46.454095,1 7.4358702,46.4539509,1 7.4367144,46.4534407,1 7.4375083,46.4531784,1 7.4376245,46.45314,1 7.4379057,46.4527118,1 7.4380056,46.4525884,1 7.4382313,46.4524161,1 7.4385957,46.4522631,1 7.4391746,46.4521405,1 + + + + Oberriedstrasse + #style-Unclassified + + relativeToGround + 7.4677582,46.4299748,1 7.4681778,46.429499,1 7.4698944,46.4283987,1 7.4703192,46.4282113,1 7.4717398,46.4279136,1 7.4726925,46.4278012,1 7.4760571,46.4270912,1 + + + + #style-Unclassified + + relativeToGround + 7.4391746,46.4521405,1 7.4395197,46.4518404,1 7.4397686,46.4510539,1 7.4414767,46.4497766,1 7.4416701,46.4495646,1 7.4418257,46.4493133,1 7.4418875,46.4490852,1 7.4419222,46.4486812,1 7.4419812,46.448478,1 7.4421475,46.448271,1 7.442228,46.4480196,1 7.4422977,46.4478348,1 7.4425445,46.4476463,1 7.4426679,46.447273,1 7.4428288,46.4470808,1 7.4431238,46.4469588,1 7.4434028,46.4469071,1 7.4436335,46.4469108,1 7.4442576,46.447074,1 7.4454113,46.4464497,1 7.4456129,46.4462972,1 7.4457363,46.4460976,1 7.4463318,46.444693,1 7.4470935,46.4432588,1 7.4476943,46.4419132,1 7.4477681,46.4417216,1 7.4477912,46.4411924,1 7.4478338,46.4409595,1 7.4479572,46.440808,1 7.4493703,46.4398371,1 + + + + Schulstrasse + #style-Unclassified + + relativeToGround + 7.4451624,46.4562853,1 7.445156,46.4561345,1 7.4435718,46.4557441,1 + + + + Schanzenstrasse + #style-Unclassified + + relativeToGround + 7.4442759,46.457382,1 7.4444358,46.4572544,1 7.4448703,46.4570212,1 + + + + Rawilstrasse + #style-Unclassified + + relativeToGround + 7.4391746,46.4521405,1 7.4392237,46.4523389,1 7.4393814,46.4528307,1 7.4394509,46.45341,1 7.4394643,46.4538143,1 7.439476,46.4543009,1 7.4395189,46.4545023,1 7.4396638,46.4549532,1 7.4397362,46.4551084,1 7.4398844,46.4554098,1 7.4401167,46.4559428,1 7.4402861,46.4562004,1 7.4405596,46.4564869,1 7.4409145,46.4567899,1 + + + + Lischmattenstrasse + #style-Unclassified + + relativeToGround + 7.4441109,46.4543138,1 7.4439634,46.4542879,1 + + + + Schulstrasse + #style-Unclassified + + relativeToGround + 7.4435718,46.4557441,1 7.4435047,46.4557418,1 + + + + Schulstrasse + #style-Unclassified + + relativeToGround + 7.4434082,46.4557385,1 7.4433518,46.4557718,1 7.4433217,46.4560368,1 7.4432619,46.4563432,1 + + + + Rawilstrasse + #style-Unclassified + + relativeToGround + 7.4428556,46.4571631,1 7.4430005,46.457189,1 + + + + Hohliebestrasse + #style-Unclassified + + relativeToGround + 7.4409145,46.4567899,1 7.4403726,46.4567837,1 7.4398295,46.4567497,1 7.4395506,46.4568162,1 7.4390892,46.4567793,1 + + + + Badgässli + #style-Unclassified + + relativeToGround + 7.4396638,46.4549532,1 7.4383275,46.4545323,1 7.4381129,46.4544954,1 + + + + #style-Unclassified + + relativeToGround + 7.5815091,46.4898495,1 7.5817066,46.490105,1 + + + + Lischenstrasse + #style-Unclassified + + relativeToGround + 7.579127,46.5015699,1 7.5795483,46.5015782,1 7.579604,46.501575,1 7.5796209,46.5015556,1 7.5796354,46.5015389,1 7.5796387,46.5014767,1 7.579516,46.5011987,1 7.579582,46.5009187,1 7.579558,46.5007779,1 7.5793455,46.5005247,1 7.5789309,46.500105,1 7.5789603,46.4999343,1 7.5792023,46.4997735,1 7.5792682,46.499649,1 7.5793383,46.4996065,1 7.579615,46.499543,1 7.5798441,46.4995124,1 7.5798959,46.4994904,1 7.5800692,46.4992295,1 7.5802311,46.4989017,1 + + + + Lischenstrasse + #style-Unclassified + + relativeToGround + 7.5789513,46.5016989,1 7.579127,46.5015699,1 + + + + #style-Unclassified + + relativeToGround + 7.6045066,46.4846583,1 7.6045315,46.4850165,1 7.6044123,46.4855701,1 7.6042768,46.486003,1 7.6045886,46.4873469,1 7.6048256,46.487741,1 7.6047148,46.4879113,1 7.6045687,46.4880471,1 + + + + #style-Unclassified + + relativeToGround + 7.5966573,46.4922393,1 7.5971767,46.4928758,1 7.5974568,46.4931936,1 7.598244,46.493757,1 7.598438,46.494168,1 7.598278,46.494257,1 7.596752,46.494475,1 7.5956114,46.49432,1 7.595106,46.494366,1 7.594802,46.494659,1 7.593749,46.496477,1 7.593536,46.497015,1 7.593565,46.497162,1 7.593723,46.497259,1 7.594193,46.497251,1 7.594485,46.497334,1 7.595287,46.497681,1 7.595584,46.497731,1 7.596066,46.497622,1 7.596171,46.49767,1 7.5961782,46.4978242,1 7.596517,46.49794,1 7.597417,46.497891,1 7.597849,46.498019,1 7.59888,46.498738,1 7.600041,46.499325,1 7.600693,46.500122,1 7.600832,46.500508,1 7.601464,46.501098,1 7.601946,46.50242,1 7.602582,46.503422,1 7.6027655,46.503524,1 7.60291,46.503966,1 7.603441,46.504399,1 7.603526,46.504844,1 7.603912,46.505249,1 7.603992,46.50585,1 7.604118,46.506031,1 7.605462,46.506316,1 7.606866,46.506045,1 7.608604,46.50587,1 7.60891,46.506088,1 7.609026,46.506509,1 7.609263,46.506585,1 + + + + #style-Unclassified + + relativeToGround + 7.6027655,46.503524,1 7.6032706,46.5032719,1 7.6039262,46.5029587,1 7.6040764,46.5028406,1 7.6040979,46.5026559,1 7.6040979,46.5025304,1 7.6041623,46.5023901,1 7.6043768,46.5022645,1 7.6048275,46.5020873,1 7.6050098,46.5020873,1 7.6051601,46.502139,1 7.6053317,46.5021242,1 7.6058252,46.5019839,1 7.6061686,46.5018214,1 7.606351,46.5016442,1 7.6065548,46.501371,1 7.6067372,46.5012454,1 7.6071234,46.5011199,1 7.6080139,46.5007949,1 7.6083572,46.5007285,1 7.6087864,46.5006915,1 7.6091083,46.5006989,1 7.6092799,46.5006694,1 7.6093014,46.5006029,1 7.609237,46.5005217,1 + + + + #style-Unclassified + + relativeToGround + 7.609263,46.506585,1 7.609625,46.506622,1 7.609763,46.506742,1 7.608437,46.508551,1 7.608362,46.509014,1 7.608517,46.509398,1 7.608975,46.509513,1 7.609143,46.509667,1 7.608922,46.509968,1 7.608936,46.510136,1 7.6096937,46.5108052,1 + + + + #style-Unclassified + + relativeToGround + 7.6132752,46.5086326,1 7.6130864,46.508084,1 7.6134655,46.5075013,1 7.6137376,46.5073456,1 7.6137642,46.5068918,1 7.6136461,46.5067741,1 7.6132371,46.5067476,1 7.6123986,46.5065152,1 7.6121506,46.5065575,1 7.6117664,46.5069924,1 7.6118209,46.5074455,1 7.6111969,46.5077415,1 7.610704,46.508093,1 7.609919,46.508256,1 7.609829,46.508341,1 7.609937,46.509377,1 7.609669,46.509781,1 7.6097521,46.5101913,1 7.6096937,46.5108052,1 7.609751,46.511164,1 7.610325,46.511757,1 7.611032,46.512156,1 7.611504,46.512256,1 7.61164,46.512395,1 7.611676,46.512859,1 7.6110638,46.5135387,1 7.610088,46.513843,1 7.609616,46.514223,1 7.609231,46.514344,1 7.608915,46.51455,1 7.608729,46.51482,1 7.608422,46.515019,1 7.607633,46.515308,1 7.6073503,46.5155013,1 7.607241,46.515576,1 7.606768,46.51574,1 7.606403,46.515938,1 7.60625,46.516128,1 7.606479,46.51664,1 7.606585,46.517717,1 7.606807,46.518003,1 7.607364,46.518265,1 7.60721,46.51834,1 7.606852,46.51835,1 7.605442,46.51814,1 7.604229,46.517357,1 7.6033694,46.5171449,1 + + + + #style-Unclassified + + relativeToGround + 7.6109659,46.5266158,1 7.6107,46.526694,1 7.61007,46.527171,1 7.609988,46.527489,1 7.609498,46.527984,1 7.608709,46.529361,1 7.608698,46.530009,1 7.608567,46.530339,1 7.608337,46.530401,1 7.608207,46.530327,1 7.607761,46.529968,1 7.607315,46.529449,1 7.606862,46.52918,1 7.6065623,46.5291566,1 7.6061361,46.5293018,1 + + + + Rinderwaldstrasse + #style-Unclassified + + relativeToGround + 7.5881401,46.5275704,1 7.5879485,46.527459,1 7.587679,46.527221,1 7.587317,46.526255,1 7.587425,46.5259306,1 7.5872959,46.5256373,1 7.586076,46.524567,1 + + + + #style-Unclassified + + relativeToGround + 7.5826066,46.5259242,1 7.5829568,46.5262864,1 7.5833805,46.5268825,1 7.5836909,46.5270954,1 7.5838082,46.5273334,1 7.5840578,46.5276561,1 7.584423,46.5281035,1 7.584751,46.528836,1 7.5847782,46.5294052,1 7.5847345,46.5296666,1 7.5845956,46.5298968,1 7.5842076,46.5301916,1 + + + + Rinderwaldstrasse + #style-Unclassified + + relativeToGround + 7.5774574,46.5275452,1 7.5772166,46.5274306,1 7.5766573,46.5267791,1 7.576019,46.525654,1 7.575555,46.524558,1 7.5753315,46.5243657,1 7.5749549,46.5242103,1 7.57448,46.5241341,1 + + + + #style-Unclassified + + relativeToGround + 7.5745874,46.5254626,1 7.5721265,46.5258724,1 7.5710266,46.5262635,1 7.5703591,46.5265893,1 7.5704551,46.5266365,1 7.5708354,46.5265253,1 7.5721092,46.5264585,1 7.5735188,46.5265577,1 7.573599,46.526742,1 7.573578,46.527052,1 7.573646,46.5272475,1 7.5744837,46.5279216,1 + + + + #style-Unclassified + + relativeToGround + 7.5703591,46.5265893,1 7.568595,46.5263443,1 7.5673853,46.5264725,1 7.5663447,46.5266784,1 7.5654095,46.5267497,1 7.564572,46.5270254,1 7.5632688,46.5279901,1 7.562625,46.528737,1 + + + + #style-Unclassified + + relativeToGround + 7.5632688,46.5279901,1 7.563293,46.528047,1 7.5639,46.527924,1 7.565404,46.52747,1 7.565998,46.527405,1 7.5672493,46.5275054,1 7.568548,46.527754,1 7.5689,46.527947,1 + + + + #style-Unclassified + + relativeToGround + 7.4348713,46.4607347,1 7.433706,46.46137,1 7.4332548,46.4615372,1 7.432767,46.461688,1 7.4322834,46.461897,1 7.430689,46.462586,1 7.430159,46.462852,1 7.429281,46.463456,1 7.427987,46.464066,1 7.427716,46.464332,1 7.427499,46.464333,1 7.427753,46.463371,1 7.427638,46.462469,1 7.427267,46.461642,1 7.426829,46.461129,1 7.426752,46.460286,1 7.426453,46.460009,1 7.426347,46.45962,1 7.4262468,46.4595065,1 7.425969,46.459287,1 7.42578,46.459278,1 7.42571,46.459377,1 7.425777,46.459664,1 7.425669,46.459887,1 7.425157,46.460384,1 7.425126,46.460757,1 7.424398,46.461387,1 7.424154,46.461895,1 7.423971,46.461934,1 7.423801,46.461447,1 7.423465,46.460931,1 7.423449,46.460419,1 7.423278,46.460279,1 7.422565,46.460132,1 7.422303,46.459911,1 + + + + Hahnenmoosstrasse + #style-Unclassified + + relativeToGround + 7.5426103,46.4830368,1 7.5424403,46.4825688,1 7.5421893,46.4825118,1 7.5419623,46.4825828,1 7.5416513,46.4828808,1 7.5415101,46.4829137,1 7.5411413,46.4827908,1 7.5402763,46.4830068,1 7.5400713,46.4829268,1 7.5403793,46.4826278,1 7.5407663,46.4824648,1 7.5407743,46.4822388,1 7.5405388,46.4820442,1 7.5403653,46.4819008,1 7.5396433,46.4815648,1 7.5392734,46.4802349,1 7.5390599,46.4794675,1 7.5381653,46.4784568,1 7.5376503,46.4775028,1 7.5369473,46.4771058,1 7.5367163,46.4767798,1 7.5365533,46.4764458,1 7.5365043,46.4756498,1 7.5361633,46.4746408,1 7.5353448,46.4737451,1 7.5352429,46.4735013,1 7.5351743,46.4725458,1 7.5350093,46.4718738,1 7.5351203,46.4712998,1 7.5350193,46.4709858,1 7.5346923,46.4703668,1 7.5339183,46.4698158,1 7.5332503,46.4690168,1 7.5332913,46.4687698,1 7.5345263,46.4679968,1 7.5346883,46.4676188,1 7.5346943,46.4673158,1 7.5334473,46.4653948,1 7.5333563,46.4649828,1 7.5340553,46.4636388,1 7.5345393,46.4632248,1 7.5344513,46.4619618,1 7.5347283,46.4613518,1 7.5346943,46.4610708,1 7.5348653,46.4608468,1 7.5348533,46.4606638,1 7.5345733,46.4604178,1 7.5338453,46.4601288,1 7.5336253,46.4601698,1 7.5335303,46.4606138,1 7.5330443,46.4611158,1 7.5328583,46.4620328,1 7.5324423,46.4625308,1 7.5322843,46.4630188,1 7.5318629,46.4633692,1 7.5310273,46.4640638,1 7.5303233,46.4642378,1 7.5296383,46.4642278,1 7.5291173,46.4643608,1 7.5287983,46.4643358,1 7.5274243,46.4636628,1 7.5262593,46.4635928,1 7.5256373,46.4634048,1 7.5241943,46.4624008,1 7.5232133,46.4614168,1 7.5214053,46.4606918,1 7.5210933,46.4601898,1 7.5200473,46.4595938,1 7.5191943,46.4593388,1 7.5174423,46.4592718,1 7.5170503,46.4591218,1 7.5160353,46.4580808,1 7.5156573,46.4578858,1 7.5148593,46.4576658,1 + + + + Hahnenmoosstrasse + #style-Unclassified + + relativeToGround + 7.469627,46.453826,1 7.4703038,46.4532183,1 + + + + Alpenweg + #style-Unclassified + + relativeToGround + 7.55887,46.49044,1 7.55864,46.490402,1 7.55846,46.49025,1 7.5579974,46.4904534,1 + + + + Hahnenmoosstrasse + #style-Unclassified + + relativeToGround + 7.543024,46.4839871,1 7.5426103,46.4830368,1 + + + + Dorfstrasse + #style-Unclassified + + relativeToGround + 7.5595144,46.4930964,1 7.5592176,46.4928554,1 7.5587375,46.4925106,1 7.5581971,46.4920378,1 7.5571221,46.4911702,1 7.5568451,46.4909915,1 7.556403,46.4906599,1 + + + + Dorfstrasse + #style-Unclassified + + relativeToGround + 7.556403,46.4906599,1 7.556064,46.4904831,1 7.5559303,46.4904006,1 7.5549954,46.4898085,1 + + + + Risetensträssli + #style-Unclassified + + relativeToGround + 7.5561408,46.4893354,1 7.5561531,46.4890823,1 7.5561565,46.4890135,1 7.556089,46.4888482,1 7.5559288,46.4884562,1 7.5555284,46.4878909,1 7.5553086,46.487412,1 7.5549867,46.4871765,1 7.5545078,46.4871844,1 7.5535075,46.4866379,1 + + + + #style-Unclassified + + relativeToGround + 7.5981221,46.5280116,1 7.598181,46.528212,1 7.598159,46.528341,1 7.598092,46.528455,1 7.59791,46.528842,1 7.597834,46.52896,1 7.597782,46.529368,1 7.597859,46.5296,1 7.598016,46.529719,1 7.59821,46.529793,1 7.598476,46.529826,1 7.59895,46.529716,1 7.599487,46.529729,1 7.5996702,46.5297785,1 7.599726,46.529845,1 7.599787,46.529949,1 7.599809,46.530111,1 7.599803,46.530257,1 7.599647,46.530568,1 7.599725,46.53097,1 7.599832,46.531108,1 7.599978,46.531232,1 7.599953,46.531488,1 7.600036,46.531632,1 7.60003,46.53168,1 7.599971,46.531811,1 7.600043,46.531956,1 7.600178,46.532082,1 7.600263,46.532197,1 7.600269,46.532322,1 7.600217,46.532436,1 7.600152,46.532503,1 7.600094,46.532638,1 7.600076,46.532737,1 7.600014,46.532905,1 7.59999,46.533077,1 7.59989,46.533416,1 7.599934,46.533522,1 7.6001086,46.5335279,1 7.600186,46.5335,1 7.60064,46.533445,1 7.600763,46.53347,1 7.600892,46.53355,1 7.600963,46.533707,1 7.600955,46.533781,1 7.600893,46.533879,1 7.600796,46.53395,1 7.600721,46.53409,1 7.600808,46.534403,1 7.600856,46.534454,1 7.60095,46.534503,1 7.601187,46.534596,1 7.60136,46.534735,1 7.601596,46.535069,1 7.601825,46.535338,1 7.601902,46.535416,1 7.602041,46.535499,1 7.602206,46.535578,1 7.602625,46.5357,1 7.60283,46.535772,1 7.603179,46.535845,1 7.603494,46.535859,1 7.60365,46.535898,1 7.603681,46.535918,1 7.603769,46.536014,1 7.603788,46.536143,1 7.603764,46.536199,1 7.603762,46.5362107,1 7.603755,46.536253,1 7.603784,46.536359,1 7.60391,46.536497,1 7.6040614,46.536598,1 7.604125,46.536642,1 7.604243,46.53682,1 7.604291,46.536947,1 7.604399,46.537031,1 7.604713,46.537069,1 7.604998,46.537061,1 7.605114,46.537042,1 7.605361,46.53706,1 7.605801,46.537134,1 7.606041,46.537151,1 7.606205,46.537248,1 7.606276,46.537331,1 7.6062753,46.5374013,1 7.606258,46.537464,1 7.606091,46.537705,1 7.605981,46.538053,1 7.606033,46.538161,1 7.60606,46.538286,1 7.606016,46.538455,1 7.605935,46.538601,1 7.605874,46.538805,1 7.605819,46.539136,1 7.605733,46.539318,1 7.605705,46.539412,1 7.6058389,46.539552,1 7.6058722,46.5395795,1 + + + + #style-Unclassified + + relativeToGround + 7.5744837,46.5279216,1 7.5746977,46.5280938,1 7.5771625,46.5297081,1 7.5773,46.529821,1 7.577183,46.530712,1 + + + + Hahnenmoosstrasse + #style-Unclassified + + relativeToGround + 7.4568436,46.4593926,1 7.4568637,46.4594526,1 7.4569135,46.4595047,1 7.4570376,46.4595784,1 7.4576408,46.459836,1 7.4576957,46.4598904,1 7.4576821,46.4599445,1 7.4576328,46.4599825,1 7.4575461,46.4599848,1 7.4572033,46.4598226,1 7.4568717,46.459731,1 7.4564869,46.4597211,1 7.4563512,46.4596817,1 + + + + Hahnenmoosstrasse + #style-Unclassified + + relativeToGround + 7.4563512,46.4596817,1 7.4562979,46.4595824,1 7.4562834,46.4593869,1 7.4562147,46.4592473,1 7.4559877,46.4590046,1 7.4559252,46.4587348,1 7.4558864,46.4581792,1 7.456013,46.4574831,1 7.4561972,46.456936,1 7.4560344,46.4563522,1 7.4560192,46.4561245,1 7.4563026,46.4555022,1 7.456367,46.4551475,1 7.4564528,46.4549996,1 7.4565816,46.4549331,1 7.4565816,46.454837,1 7.4565616,46.4547349,1 7.4564528,46.4547261,1 7.4563455,46.4548222,1 7.4562919,46.4549257,1 7.4562003,46.4550467,1 7.4560237,46.4551992,1 7.4556696,46.4553175,1 7.4554658,46.455384,1 7.45152,46.46002,1 7.4516199,46.4601237,1 7.45256,46.4611,1 7.4512878,46.4622786,1 + + + + Rawilstrasse + #style-Unclassified + + relativeToGround + 7.4409145,46.4567899,1 7.4410666,46.4568934,1 7.441257,46.4569858,1 7.4424533,46.457099,1 7.4428556,46.4571631,1 + + + + Egernschwandweg + #style-Unclassified + + relativeToGround + 7.5786446,46.518287,1 7.578694,46.518135,1 7.578724,46.517978,1 7.578695,46.517886,1 7.578512,46.517455,1 7.578309,46.5171813,1 7.577878,46.516652,1 7.577605,46.516534,1 7.577438,46.51649,1 7.577041,46.516159,1 7.576838,46.516078,1 7.576264,46.515795,1 7.575735,46.515618,1 7.575121,46.515397,1 7.574844,46.515369,1 7.574591,46.515424,1 7.574228,46.515451,1 7.573965,46.515492,1 7.57367,46.515483,1 7.57341,46.515411,1 7.573285,46.51521,1 7.573152,46.515082,1 7.572439,46.515021,1 7.572135,46.514946,1 7.57191,46.514848,1 7.571398,46.514879,1 7.571265,46.51496,1 7.57104,46.514972,1 7.570159,46.514819,1 7.569955,46.514753,1 7.569293,46.514586,1 7.568896,46.514458,1 7.568662,46.514359,1 7.5681,46.514075,1 7.567915,46.513952,1 7.567848,46.513922,1 7.5671835,46.5137512,1 7.566948,46.513674,1 7.566778,46.513566,1 7.566565,46.513493,1 7.566333,46.513447,1 7.566124,46.51337,1 7.565802,46.513217,1 7.565665,46.51313,1 + + + + #style-Unclassified + + relativeToGround + 7.5669006,46.5111824,1 7.566536,46.5113136,1 7.566172,46.511362,1 7.565683,46.511382,1 7.565051,46.511454,1 7.564704,46.511647,1 7.564224,46.51188,1 7.564123,46.512021,1 7.563941,46.51213,1 7.563809,46.512144,1 7.563635,46.512083,1 7.563415,46.512069,1 7.563285,46.512081,1 7.563183,46.512048,1 7.562725,46.511852,1 7.562645,46.511873,1 7.562606,46.511942,1 7.562637,46.512081,1 7.5625296,46.5121876,1 7.562224,46.512308,1 7.562061,46.512386,1 7.561732,46.512565,1 7.561621,46.51265,1 7.561383,46.512768,1 7.561246,46.512881,1 7.560984,46.513026,1 7.560705,46.513132,1 7.56041,46.513256,1 7.560199,46.513334,1 7.559963,46.513393,1 7.55977,46.513485,1 7.5596756,46.5135221,1 7.55961,46.513548,1 7.558865,46.513684,1 7.5581263,46.5137586,1 7.557572,46.513713,1 7.556972,46.513559,1 7.556817,46.5135283,1 + + + + #style-Unclassified + + relativeToGround + 7.556817,46.5135283,1 7.5564776,46.5135931,1 + + + + #style-Unclassified + + relativeToGround + 7.5564776,46.5135931,1 7.555653,46.5136131,1 + + + + Egerlenstrasse + #style-Unclassified + + relativeToGround + 7.555653,46.5136131,1 7.5547124,46.5135725,1 7.554273,46.513568,1 7.553829,46.513568,1 7.553433,46.513609,1 7.5530228,46.5136488,1 7.552596,46.513654,1 7.552093,46.513613,1 7.551338,46.513505,1 7.5509052,46.5134765,1 7.5505971,46.5134655,1 7.5499677,46.5136782,1 7.5495893,46.5137309,1 7.549533,46.513828,1 7.5496296,46.5138873,1 7.54985,46.513882,1 7.55001,46.513903,1 7.550029,46.51409,1 7.550048,46.514291,1 7.5501728,46.5144035,1 7.550758,46.514543,1 7.5511026,46.5145888,1 7.5516662,46.5146211,1 7.5520151,46.5146864,1 7.552829,46.51488,1 7.5532371,46.514966,1 7.5535135,46.5150716,1 7.553654,46.515094,1 7.5538209,46.5150318,1 7.5540833,46.5149891,1 7.5548384,46.5150455,1 7.5551189,46.5150839,1 7.5553614,46.5152012,1 7.555649,46.5153894,1 7.5558741,46.515512,1 7.5561416,46.5156,1 7.5566571,46.5157065,1 7.556798,46.515774,1 7.5568977,46.5159041,1 7.556998,46.516064,1 7.5571154,46.5161086,1 7.557837,46.516132,1 7.558461,46.516234,1 7.5586448,46.5162468,1 7.559683,46.516477,1 7.560001,46.516488,1 7.5602308,46.5165359,1 7.5607407,46.5165139,1 7.5612266,46.5166202,1 7.5616355,46.5167467,1 7.5620778,46.5167717,1 7.5627706,46.5169076,1 7.5627921,46.5169559,1 7.5626331,46.5169857,1 7.562377,46.5169559,1 7.5620266,46.5169932,1 7.5614422,46.5171315,1 7.561326,46.517138,1 7.561267,46.517166,1 7.561159,46.517176,1 7.5610746,46.5171656,1 7.560836,46.51723,1 7.5603559,46.5172698,1 7.5585206,46.517503,1 7.5572554,46.5177377,1 7.5568904,46.5178344,1 7.5564558,46.5178795,1 7.5558549,46.5178842,1 7.5554229,46.5178329,1 7.5548414,46.5178271,1 7.5543567,46.5178481,1 7.553933,46.5178613,1 7.5538109,46.5179008,1 7.553859,46.517973,1 7.5540552,46.5179693,1 7.554263,46.51801,1 7.5552842,46.5184778,1 + + + + Egernschwandweg + #style-Unclassified + + relativeToGround + 7.565665,46.51313,1 7.5655319,46.5130257,1 + + + + Egernschwandweg + #style-Unclassified + + relativeToGround + 7.5655319,46.5130257,1 7.5654903,46.5129931,1 7.56538,46.512798,1 7.565474,46.512629,1 7.565684,46.512455,1 7.565875,46.512336,1 7.566545,46.512105,1 7.566632,46.512061,1 7.566984,46.512021,1 7.567198,46.511978,1 7.567389,46.511901,1 7.567571,46.511851,1 7.568036,46.511904,1 7.568265,46.511945,1 7.568517,46.512006,1 7.568808,46.512056,1 7.569195,46.512073,1 7.569429,46.512012,1 7.569807,46.511803,1 7.570015,46.511579,1 7.570141,46.511395,1 7.570386,46.511321,1 7.570945,46.511298,1 7.571259,46.511326,1 7.571494,46.511316,1 7.5717288,46.5112797,1 + + + + #style-Unclassified + + relativeToGround + 7.4472186,46.4059651,1 7.4473377,46.4046987,1 7.447185,46.4043595,1 7.4464891,46.403864,1 7.4461202,46.4034297,1 + + + + Iffigenstrasse + #style-Unclassified + + relativeToGround + 7.4461202,46.4034297,1 7.44569,46.4028394,1 7.4452036,46.402289,1 7.4440926,46.4015624,1 7.4434951,46.4012667,1 7.4427384,46.4009962,1 7.4411642,46.3998745,1 + + + + Labrunnenstrasse + #style-Unclassified + + relativeToGround + 7.5848963,46.5385742,1 7.584971,46.538598,1 7.5850687,46.5385678,1 7.585274,46.538445,1 7.585513,46.538362,1 7.585815,46.538336,1 7.5861975,46.5384377,1 7.586687,46.538565,1 7.586868,46.53855,1 7.586922,46.5385852,1 7.586858,46.538634,1 7.5865846,46.5387579,1 7.5864754,46.5388895,1 7.5863858,46.5390299,1 7.5863538,46.53914,1 7.586145,46.539473,1 7.585906,46.539748,1 7.5859743,46.5397566,1 7.5862337,46.5397277,1 7.5864971,46.5397002,1 7.5866758,46.539656,1 7.5869357,46.5396259,1 7.5872481,46.5395086,1 7.5874748,46.5393658,1 7.587549,46.5393914,1 7.5875686,46.5394438,1 7.587519,46.539663,1 7.5874201,46.539882,1 7.5870777,46.5403479,1 7.586974,46.540457,1 7.5870076,46.5404872,1 7.5870655,46.5404979,1 7.588135,46.540364,1 7.5885285,46.5402242,1 7.5886063,46.5402073,1 7.5886288,46.5402472,1 7.588604,46.5402947,1 7.5885094,46.540414,1 7.5883955,46.5406535,1 7.5883744,46.5407232,1 7.5883676,46.5408147,1 7.588401,46.540845,1 7.5885722,46.5409102,1 7.588615,46.5409026,1 7.5888202,46.5408269,1 7.589194,46.540661,1 7.589281,46.540632,1 7.58999,46.540264,1 7.590328,46.540011,1 7.590683,46.539741,1 7.590905,46.539618,1 7.591382,46.539386,1 7.591737,46.539145,1 7.5920484,46.538841,1 + + + + #style-Unclassified + + relativeToGround + 7.6000148,46.5411065,1 7.5998328,46.5411104,1 7.599728,46.540985,1 7.599815,46.540729,1 7.599744,46.54068,1 7.599461,46.541161,1 7.5990539,46.5414724,1 7.5989053,46.5416069,1 + + + + Linterstrasse + #style-Unclassified + + relativeToGround + 7.5925397,46.5451903,1 7.592485,46.545252,1 7.592525,46.54534,1 7.592614,46.545474,1 7.592697,46.545941,1 7.592776,46.546324,1 7.592795,46.546568,1 7.592784,46.547071,1 7.592699,46.547674,1 7.592756,46.547908,1 7.592822,46.548097,1 7.592806,46.5481874,1 + + + + Linterstrasse + #style-Unclassified + + relativeToGround + 7.592806,46.5481874,1 7.592761,46.548238,1 7.592644,46.548376,1 7.592455,46.548557,1 7.592255,46.548698,1 7.592146,46.548812,1 7.591958,46.548924,1 7.591674,46.548987,1 7.591507,46.549084,1 7.591392,46.549196,1 7.591209,46.549305,1 7.591037,46.549435,1 7.590866,46.549519,1 7.590794,46.549642,1 7.590617,46.549749,1 7.590437,46.549933,1 7.5904257,46.5500262,1 + + + + Linterstrasse + #style-Unclassified + + relativeToGround + 7.5904257,46.5500262,1 7.5905254,46.5500717,1 + + + + Kratzernweg + #style-Unclassified + + relativeToGround + 7.5905254,46.5500717,1 7.590707,46.549997,1 7.59085,46.549908,1 7.591069,46.549881,1 7.591421,46.549938,1 7.591668,46.550065,1 7.592004,46.550226,1 7.592637,46.550442,1 7.593226,46.55058,1 7.593383,46.550702,1 7.593531,46.550877,1 7.593684,46.55115,1 7.593958,46.551669,1 7.594276,46.55222,1 7.594324,46.552364,1 7.5943061,46.5527315,1 7.594134,46.552894,1 7.594091,46.55297,1 7.59395,46.553062,1 7.593757,46.553112,1 7.593606,46.553197,1 7.59307,46.5535336,1 7.5929968,46.5537118,1 7.5925956,46.5539528,1 7.5923612,46.5541928,1 + + + + Kratzernweg + #style-Unclassified + + relativeToGround + 7.592429,46.554253,1 7.592863,46.5539574,1 7.593574,46.55385,1 7.59392,46.553942,1 7.594217,46.553964,1 7.594676,46.553977,1 7.594954,46.553786,1 7.595205,46.553817,1 7.595561,46.55408,1 7.595675,46.554108,1 7.59587,46.554013,1 7.596056,46.553807,1 7.596398,46.553526,1 7.59646,46.553509,1 7.5967647,46.5536546,1 7.596819,46.553667,1 7.5969261,46.5536743,1 7.5970949,46.5537103,1 7.5971441,46.5537263,1 7.5971816,46.5538848,1 + + + + Kratzernweg + #style-Unclassified + + relativeToGround + 7.5923612,46.5541928,1 7.592429,46.554253,1 + + + + #style-Unclassified + + relativeToGround + 7.598828,46.5418043,1 7.5986652,46.5418556,1 7.5984839,46.5418271,1 7.5981032,46.541696,1 7.5978471,46.5416201,1 7.5977275,46.5416254,1 7.5978138,46.5416964,1 7.5979877,46.5417862,1 7.5981191,46.5418557,1 7.5980869,46.5419247,1 7.597906,46.5419125,1 7.5977139,46.5418563,1 7.5974461,46.5417375,1 7.5971628,46.5416562,1 7.596846,46.5416131,1 7.5964607,46.5415809,1 7.5962965,46.5415976,1 7.5963199,46.5416784,1 7.5964588,46.541693,1 7.596682,46.5416906,1 7.597639,46.542105,1 7.5979774,46.542212,1 7.5983329,46.5423104,1 7.5987195,46.5423762,1 7.598925,46.5423612,1 7.5991482,46.5423019,1 7.5994659,46.5421858,1 7.5996704,46.5420792,1 7.5998137,46.5420664,1 7.5998714,46.542131,1 7.5998295,46.5422306,1 7.5994128,46.5425684,1 7.599269,46.542718,1 7.5992063,46.5428643,1 7.5992312,46.5430102,1 7.5993576,46.5432551,1 7.5993203,46.543322,1 7.5991709,46.543321,1 7.598775,46.5432615,1 7.5985495,46.5431872,1 7.598132,46.5430061,1 7.5978407,46.542964,1 7.597512,46.542934,1 7.597277,46.542875,1 7.5969961,46.542788,1 7.5968514,46.5427994,1 7.5965859,46.5429628,1 7.5963745,46.5430484,1 7.5961846,46.5430552,1 7.5959447,46.542993,1 7.595764,46.542913,1 7.5955707,46.5427996,1 7.595428,46.5427595,1 7.5953594,46.5428276,1 7.595518,46.542962,1 7.5957387,46.5432782,1 7.595972,46.543449,1 7.5959446,46.5435388,1 7.5957942,46.5435186,1 7.5956638,46.5434226,1 7.5952803,46.5432314,1 7.5950789,46.5431496,1 7.5947568,46.5431029,1 7.5942665,46.5430803,1 7.593782,46.543173,1 7.593057,46.543361,1 7.5926799,46.5434775,1 7.592416,46.54366,1 7.5922365,46.5437425,1 7.592001,46.5437709,1 7.591858,46.543718,1 7.591699,46.543739,1 7.5916485,46.5437996,1 7.5917,46.5438532,1 7.5919348,46.5438772,1 7.5923353,46.5438815,1 7.5925324,46.5438545,1 7.592877,46.543856,1 7.5930756,46.5438769,1 7.5935319,46.5440157,1 7.593698,46.544084,1 7.593821,46.544181,1 7.5939285,46.544299,1 7.594035,46.544772,1 7.594137,46.5451511,1 7.593934,46.545935,1 7.5937548,46.5466349,1 7.5937849,46.5467479,1 7.593708,46.546875,1 7.5936038,46.546858,1 7.5935586,46.5467893,1 7.593523,46.546572,1 7.5933226,46.546083,1 7.5931368,46.5457079,1 7.5929462,46.5455571,1 7.592638,46.545243,1 7.5925397,46.5451903,1 7.592354,46.545117,1 7.5922372,46.5451099,1 7.5920883,46.5451263,1 7.5916217,46.545168,1 + + + + #style-Unclassified + + relativeToGround + 7.5989053,46.5416069,1 7.598828,46.5418043,1 + + + + #style-Unclassified + + relativeToGround + 7.6001666,46.5412566,1 7.6000721,46.5411632,1 + + + + Fehrmelthal + #style-Unclassified + + relativeToGround + 7.4233856,46.4967518,1 7.4241495,46.4971123,1 7.4248619,46.4973545,1 7.4252291,46.4974725,1 7.4255929,46.4976732,1 7.4258661,46.4978981,1 7.426026,46.4981971,1 7.4261976,46.498398,1 7.4261976,46.4985752,1 7.4261376,46.498652,1 7.4256827,46.4984452,1 7.425305,46.4982798,1 7.4250743,46.4980211,1 7.4247643,46.4980198,1 7.4245669,46.4981203,1 7.4236742,46.4992133,1 7.4231077,46.4998042,1 7.4224039,46.5003654,1 7.4216744,46.5005013,1 7.4215885,46.5006195,1 7.4218718,46.5006904,1 7.4223009,46.500584,1 7.4228331,46.5004659,1 7.4235197,46.5004245,1 7.4238802,46.5002473,1 7.424481,46.5001468,1 7.4254509,46.5001468,1 7.4261603,46.5002229,1 7.4282833,46.5011512,1 7.4290987,46.5016239,1 7.4291416,46.502061,1 7.429442,46.5022974,1 7.4296137,46.5026105,1 7.429485,46.5028882,1 7.4299399,46.5036798,1 7.4301973,46.5044124,1 7.4305407,46.5051685,1 7.4310127,46.5059838,1 7.4316565,46.5063796,1 7.4327723,46.5072834,1 7.4335619,46.5078742,1 7.4340769,46.5087248,1 7.4358793,46.5105442,1 7.4364201,46.5108514,1 7.437081,46.5115957,1 7.437656,46.5123636,1 7.4381968,46.5130133,1 7.4389092,46.5135863,1 7.4395701,46.5139407,1 7.440128,46.5147263,1 7.4407288,46.5151811,1 7.4410721,46.515435,1 7.4415012,46.515565,1 7.4420162,46.5157304,1 7.4425312,46.516067,1 7.4427458,46.5165691,1 7.4430462,46.517266,1 7.4434754,46.5180338,1 7.4439045,46.5187544,1 7.4443508,46.5192387,1 7.4448057,46.5195517,1 7.4466793,46.5199766,1 7.4473145,46.5201656,1 7.4480526,46.5203724,1 7.4485333,46.5206204,1 7.4486363,46.5206972,1 7.4499581,46.5209039,1 7.451709,46.5212878,1 7.4525931,46.5215063,1 7.4536316,46.5215949,1 7.4544213,46.5217366,1 7.4552538,46.5219079,1 7.4557087,46.521961,1 7.456361,46.5219669,1 7.457082,46.5219374,1 7.458318,46.5218193,1 7.4592707,46.5217071,1 7.4599917,46.521648,1 7.4611504,46.5215831,1 7.4620774,46.521524,1 7.4627039,46.5213882,1 7.4638884,46.520898,1 7.4646523,46.5206145,1 7.4650814,46.5204373,1 7.4655106,46.5203783,1 7.4659998,46.5204491,1 7.4665406,46.5204964,1 7.4671414,46.5205259,1 7.4681713,46.5204668,1 7.4689009,46.5204373,1 7.4695875,46.5203664,1 7.4704888,46.5202011,1 7.4723341,46.5198349,1 7.4743769,46.5193034,1 7.4745657,46.5192856,1 7.474952,46.5192679,1 7.4759819,46.5190671,1 7.4768402,46.5188545,1 7.4780419,46.5183407,1 7.4798872,46.5176142,1 7.4822047,46.5170708,1 7.4829342,46.5167637,1 7.4837925,46.5161376,1 7.4845221,46.51586,1 7.4854834,46.5161258,1 + + + + #style-Unclassified + + relativeToGround + 7.4198288,46.4982833,1 7.4199867,46.4982171,1 7.4204588,46.4980104,1 7.4212742,46.4977031,1 7.4221153,46.4973486,1 7.4228878,46.497,1 7.4233856,46.4967518,1 7.4239729,46.4964435,1 + + + + #style-Unclassified + + relativeToGround + 7.4206823,46.4955804,1 7.4200296,46.495446,1 7.4196538,46.4953841,1 7.4194202,46.4953456,1 7.4187164,46.4951801,1 7.4180555,46.4951506,1 7.4177448,46.4951104,1 + + + + #style-Unclassified + + relativeToGround + 7.6045687,46.4880471,1 7.604255,46.4883112,1 7.6039469,46.4884404,1 7.6036512,46.4886227,1 7.603341,46.4887189,1 7.6032878,46.4889924,1 7.6021413,46.489726,1 7.6017531,46.4900467,1 7.6011402,46.490361,1 + + + + #style-Unclassified + + relativeToGround + 7.5922214,46.488268,1 7.5922897,46.4884803,1 7.592399,46.488507,1 + + + + #style-Unclassified + + relativeToGround + 7.596404,46.4883944,1 7.5967553,46.4880553,1 7.5966803,46.4878323,1 7.5963163,46.4876073,1 7.5963243,46.4872963,1 7.5964903,46.4875193,1 7.5966533,46.4875613,1 7.5969273,46.4874763,1 7.5971273,46.4876053,1 7.5975163,46.4876923,1 7.5975213,46.4878273,1 7.5977823,46.4880603,1 7.5979919,46.4884754,1 7.5979589,46.4885316,1 7.5978879,46.4887234,1 7.5972663,46.4893073,1 7.5965123,46.4896783,1 7.5951997,46.4905833,1 7.5944647,46.4907653,1 7.5942015,46.4909197,1 7.5938325,46.4911889,1 7.5935377,46.4913093,1 7.5929597,46.4912713,1 7.5924147,46.4913903,1 7.5922067,46.4915203,1 7.5921687,46.4916743,1 7.5922017,46.4919647,1 7.5922817,46.4920763,1 7.5923972,46.492067,1 7.5928397,46.4918383,1 7.5931657,46.4917383,1 7.5940527,46.4917123,1 7.5947097,46.4919123,1 7.5966573,46.4922393,1 + + + + #style-Unclassified + + relativeToGround + 7.6011402,46.490361,1 7.6010393,46.4904099,1 7.6003528,46.4908825,1 7.5998973,46.4910808,1 7.599409,46.491188,1 7.5966772,46.4913521,1 7.5964583,46.4914338,1 7.5961988,46.4916268,1 7.5961708,46.4917495,1 7.596319,46.491996,1 7.5966573,46.4922393,1 + + + + #style-Unclassified + + relativeToGround + 7.419988,46.5053819,1 7.4200223,46.5055355,1 7.4199966,46.5057068,1 7.4199193,46.5058604,1 7.4197734,46.5060258,1 7.4195073,46.5061144,1 7.4191898,46.5062503,1 7.4189323,46.5064157,1 7.4188121,46.5066638,1 7.4188722,46.5068706,1 7.4189666,46.5070951,1 7.4189923,46.5073491,1 7.4190782,46.5075618,1 7.4191297,46.5077803,1 7.4191039,46.5079989,1 7.4190267,46.5082057,1 7.4189494,46.508377,1 7.4189139,46.5084718,1 + + + + #style-Unclassified + + relativeToGround + 7.4230607,46.5136342,1 7.4228547,46.5134865,1 7.4226401,46.5132798,1 7.4222882,46.5131026,1 7.4218248,46.5129963,1 7.4211982,46.51289,1 7.4205545,46.5128014,1 7.4202283,46.5126596,1 7.4199365,46.5124765,1 7.4197476,46.5123761,1 7.4193185,46.5123465,1 7.4191211,46.512317,1 7.4190009,46.5121811,1 7.419061,46.5119862,1 7.4192327,46.5118444,1 7.4195932,46.5117086,1 7.4199966,46.5115314,1 7.4204085,46.5113483,1 7.4207175,46.511236,1 7.4210179,46.5111356,1 7.421387,46.5109879,1 7.4218162,46.5108107,1 7.4221595,46.5106512,1 7.4224599,46.5105331,1 7.4226058,46.5104445,1 7.4226144,46.5103795,1 7.4225286,46.5103145,1 7.4223998,46.5102791,1 7.4221423,46.5103086,1 7.4216788,46.510409,1 7.4212239,46.5104386,1 7.4208549,46.5104386,1 7.4205974,46.5105744,1 7.4202197,46.5107694,1 7.4198249,46.5109111,1 7.4193872,46.5109702,1 7.4189408,46.5109407,1 7.4185289,46.510917,1 7.4180997,46.5109407,1 7.4177478,46.5109466,1 7.4175418,46.5109879,1 7.4172929,46.5111238,1 7.4170869,46.511236,1 7.4167779,46.5113187,1 7.4164861,46.5114014,1 7.4162715,46.5114841,1 7.4162114,46.5115196,1 7.4161084,46.5115196,1 7.4161256,46.5114605,1 7.41622,46.5113896,1 7.4164775,46.5113187,1 7.4167436,46.5112301,1 7.4169496,46.5111179,1 7.417044,46.5109584,1 7.4170869,46.5107989,1 7.4171813,46.5106571,1 7.4175075,46.510474,1 7.4178079,46.5102791,1 7.4181855,46.5100133,1 7.4184859,46.5097829,1 7.4187778,46.5096411,1 7.4190438,46.509523,1 7.4193786,46.509393,1 7.4195331,46.5092985,1 7.4196017,46.5091567,1 7.4195588,46.5090268,1 7.4194472,46.5088791,1 7.4192584,46.5087078,1 7.4191125,46.5085542,1 7.4189139,46.5084718,1 + + + + #style-Unclassified + + relativeToGround + 7.4259103,46.506333,1 7.4256528,46.5063212,1 7.4254125,46.506268,1 7.4251121,46.5061794,1 7.4249576,46.5060613,1 7.4248288,46.5059254,1 7.4247859,46.5057541,1 7.4246915,46.5056359,1 7.4243224,46.5055296,1 7.4236358,46.5053819,1 7.4232152,46.5052224,1 7.422829,46.5050452,1 7.4223827,46.5049211,1 7.4220737,46.5048798,1 7.4218248,46.5049034,1 7.421593,46.5049034,1 7.4213527,46.5049211,1 7.4210952,46.5050452,1 7.4208892,46.5051397,1 7.4206317,46.5052224,1 7.4203742,46.5052578,1 7.4202026,46.5052992,1 7.420091,46.5053583,1 7.4200137,46.505376,1 7.419988,46.5053819,1 + + + + #style-Unclassified + + relativeToGround + 7.4305407,46.5051685,1 7.4303563,46.5050038,1 7.4298928,46.5045253,1 7.4297126,46.5043185,1 7.4294637,46.5041177,1 7.4290517,46.5038695,1 7.4288371,46.5036923,1 7.428468,46.5034324,1 7.4282106,46.5031192,1 7.4279016,46.5029479,1 7.4276012,46.5027766,1 7.4274982,46.5027411,1 7.4273866,46.5027589,1 7.4273351,46.5028179,1 7.4275153,46.5029302,1 7.427687,46.5030424,1 7.4278157,46.5031783,1 7.4279187,46.5032965,1 7.4279445,46.5033851,1 7.4279016,46.5034383,1 7.4277042,46.5034028,1 7.4274982,46.5032551,1 7.4272836,46.503137,1 7.4270433,46.5030424,1 7.4267085,46.5029834,1 7.4262193,46.5029538,1 7.4255841,46.5029774,1 7.4252494,46.5029834,1 7.4248117,46.5029006,1 7.4245113,46.5028947,1 7.4241336,46.5030306,1 7.4238933,46.503137,1 7.4237474,46.503196,1 7.4234212,46.5032256,1 7.4232925,46.5032551,1 7.4232324,46.5032906,1 7.4232238,46.5033378,1 7.423301,46.5033674,1 7.423404,46.5033851,1 7.4235757,46.5033733,1 7.4240649,46.503456,1 7.4244683,46.5035269,1 7.4247773,46.5036037,1 7.4250434,46.5037632,1 7.4254554,46.50397,1 7.4259103,46.5041354,1 7.4263223,46.5043126,1 7.4265369,46.5044485,1 7.4266828,46.5045253,1 7.4267858,46.504608,1 7.4269403,46.504673,1 7.4269832,46.5047084,1 7.426966,46.504738,1 7.4269231,46.5047439,1 7.4268544,46.5047202,1 7.42676,46.5046553,1 7.4266399,46.5045726,1 7.4264424,46.5044898,1 7.4261592,46.504413,1 7.4258502,46.5043422,1 7.4255326,46.5043008,1 7.4251207,46.5042949,1 7.4246228,46.5042949,1 7.4240649,46.5042949,1 7.4236014,46.5042831,1 7.4231551,46.5043008,1 7.4227775,46.5043126,1 7.4221166,46.5043599,1 7.4215243,46.504413,1 7.4211896,46.5045017,1 7.4209364,46.5046133,1 7.4207519,46.5048266,1 7.4206231,46.5049979,1 7.420357,46.5051338,1 7.4200738,46.5052401,1 7.419988,46.5053819,1 + + + + Hahnenmoosstrasse + #style-Unclassified + + relativeToGround + 7.4668276,46.4566405,1 7.466626,46.456393,1 7.46638,46.456395,1 7.465978,46.457075,1 7.46552,46.45722,1 7.464934,46.457247,1 7.464328,46.457064,1 + + + + Hahnenmoosstrasse + #style-Unclassified + + relativeToGround + 7.464328,46.457064,1 7.46402,46.45673,1 7.46447,46.45557,1 7.4642956,46.4543861,1 7.464124,46.45378,1 7.4641132,46.4532257,1 7.4642966,46.4529589,1 7.4642849,46.4527822,1 7.46408,46.45269,1 7.4638128,46.4527083,1 7.4636626,46.4529744,1 7.4634575,46.4537658,1 7.4603495,46.4557922,1 7.4588078,46.4570244,1 7.4581153,46.4575795,1 7.4574404,46.4583035,1 7.4570682,46.4587555,1 7.4569587,46.4589788,1 7.4568436,46.4593926,1 + + + + Hahnenmoosstrasse + #style-Unclassified + + relativeToGround + 7.4703038,46.4532183,1 7.4710333,46.4527157,1 7.4713445,46.452553,1 7.4714196,46.4524422,1 7.4712908,46.4523978,1 7.4711192,46.4524274,1 7.4708774,46.4525547,1 7.4706364,46.4526048,1 7.4701321,46.4525826,1 7.4698401,46.452539,1 7.46948,46.4526,1 7.4683618,46.4533587,1 7.4678361,46.4538687,1 7.4676216,46.4543418,1 7.4674922,46.4547505,1 7.4675572,46.4549109,1 7.4675679,46.4551105,1 7.4675467,46.4553607,1 7.4675786,46.4555096,1 7.4676859,46.4556722,1 7.4676573,46.4558604,1 + + + + #style-Unclassified + + relativeToGround + 7.4418257,46.4493133,1 7.4429563,46.4496699,1 7.4449209,46.4532605,1 + + + + Eselmoosgassa + #style-Unclassified + + relativeToGround + 7.5352429,46.4735013,1 7.5361986,46.4737653,1 7.5368105,46.4739849,1 7.5370959,46.4740236,1 7.5375596,46.4740753,1 + + + + Eselmoosgassa + #style-Unclassified + + relativeToGround + 7.5375596,46.4740753,1 7.5377988,46.4741219,1 + + + + #style-Unclassified + + relativeToGround + 7.54748,46.480984,1 7.5484605,46.4809685,1 7.5488016,46.4810009,1 7.5501316,46.4812134,1 7.5504155,46.4813022,1 7.5507216,46.4814522,1 7.5509021,46.4815181,1 + + + + Kuonisbergliweg + #style-Unclassified + + relativeToGround + 7.5518939,46.4844236,1 7.5519996,46.4841301,1 7.5523714,46.4835666,1 7.5525084,46.4833243,1 7.5528638,46.4823913,1 7.5529761,46.4821915,1 7.553538,46.481365,1 7.553631,46.481207,1 7.553657,46.480986,1 7.553549,46.480827,1 7.553375,46.480816,1 + + + + #style-Unclassified + + relativeToGround + 7.4243085,46.4962111,1 7.4246201,46.4963695,1 7.4248078,46.4963991,1 7.4249741,46.4962993,1 7.4251565,46.4960408,1 7.4254194,46.4957565,1 7.4257949,46.4953466,1 7.4266078,46.4947785,1 7.4271663,46.49439,1 7.4277734,46.4936979,1 7.4282348,46.4930423,1 7.4286597,46.4925445,1 7.4289438,46.4921742,1 7.4290296,46.4920487,1 7.4291818,46.4920224,1 7.4292764,46.492141,1 7.4290968,46.4923259,1 7.4288097,46.4927134,1 7.4286112,46.4933701,1 7.4285262,46.4938679,1 7.4280041,46.4948028,1 7.4276399,46.4955677,1 7.4277006,46.495762,1 7.4281134,46.4963083,1 7.4286476,46.496709,1 7.4288783,46.4970125,1 7.4293882,46.4980203,1 7.4293761,46.4985181,1 7.4294611,46.4987609,1 7.4296918,46.4989795,1 7.4304297,46.4992462,1 7.4305531,46.4993902,1 7.4305052,46.4995865,1 7.4306388,46.4997079,1 7.4308643,46.4998038,1 7.4310681,46.4999256,1 7.4316421,46.5003946,1 7.431744,46.5004204,1 7.4318772,46.5004,1 7.4318942,46.5002986,1 7.4317977,46.5001841,1 7.4314523,46.4998658,1 7.4313417,46.4996339,1 7.4313794,46.4994165,1 7.431508,46.4991502,1 7.4317801,46.498943,1 7.4317073,46.4988095,1 7.4312944,46.4986395,1 7.4311609,46.4982752,1 7.4310896,46.4978651,1 7.4311808,46.4975955,1 7.4313256,46.4972706,1 + + + + #style-Unclassified + + relativeToGround + 7.603904,46.5152803,1 7.6038399,46.515509,1 7.6038519,46.5158038,1 7.6039341,46.5160746,1 7.6039201,46.5163173,1 7.6038358,46.5164998,1 7.6036794,46.5167405,1 7.6033694,46.5171449,1 + + + + #style-Unclassified + + relativeToGround + 7.4398617,46.4296989,1 7.4397759,46.4296619,1 7.4397115,46.4295362,1 7.4396686,46.4293809,1 7.4395291,46.429233,1 7.4391643,46.4289742,1 7.4389927,46.4289077,1 7.4388961,46.4289594,1 7.4388317,46.4293292,1 7.4387459,46.4294623,1 7.4386064,46.4294845,1 7.4384562,46.4293957,1 7.4383489,46.4292404,1 7.4382094,46.4290334,1 7.4381343,46.4289151,1 7.4374584,46.4288263,1 7.436922,46.4288337,1 7.4367181,46.4288263,1 7.4361388,46.428708,1 + + + + Glauistrasse + #style-Unclassified + + relativeToGround + 7.4444107,46.4389564,1 7.4442498,46.4390377,1 7.444121,46.43923,1 7.4434022,46.4402429,1 7.4433056,46.4402724,1 7.4432413,46.4402724,1 7.4431769,46.4401911,1 7.4431876,46.4401172,1 7.4432305,46.4398806,1 7.4432305,46.4396218,1 7.4432091,46.43923,1 7.4432091,46.4388751,1 7.4432413,46.4386237,1 7.4432413,46.4383945,1 7.4431769,46.4382096,1 7.4424903,46.4373076,1 7.44234,46.4372115,1 7.4415676,46.4367531,1 7.4414388,46.4366348,1 7.4413852,46.4364795,1 + + + + Glauistrasse + #style-Unclassified + + relativeToGround + 7.4424903,46.4373076,1 7.4423615,46.4369601,1 + + + + Glauistrasse + #style-Unclassified + + relativeToGround + 7.4433056,46.4402724,1 7.4431233,46.4408047,1 + + + + Seefluhstrasse + #style-Unclassified + + relativeToGround + 7.4434129,46.4428009,1 7.4433056,46.443311,1 + + + + Seefluhstrasse + #style-Unclassified + + relativeToGround + 7.4437348,46.4427639,1 7.4434129,46.4428009,1 + + + + #style-Unclassified + + relativeToGround + 7.4380056,46.4525884,1 7.4378983,46.4525958,1 + + + + #style-Unclassified + + relativeToGround + 7.4378983,46.4525958,1 7.4377374,46.4526105,1 + + + + #style-Unclassified + + relativeToGround + 7.4377374,46.4526105,1 7.4376301,46.452714,1 7.437437,46.453054,1 7.437319,46.4530762,1 7.4372117,46.4529875,1 7.4371366,46.4528249,1 7.4371151,46.4527066,1 7.4369756,46.4526253,1 + + + + Untere Bühlstrasse + #style-Unclassified + + relativeToGround + 7.433596,46.4585605,1 7.433639,46.4585162,1 7.4338965,46.4585383,1 7.4342612,46.4585088,1 7.4344544,46.4584496,1 7.4346367,46.4583166,1 7.4346904,46.4581244,1 7.4346689,46.4579249,1 7.4344865,46.4577032,1 7.4344651,46.4575406,1 7.4345295,46.4574371,1 + + + + Rütistrasse + #style-Unclassified + + relativeToGround + 7.4304096,46.4586862,1 7.4302379,46.4586344,1 7.4301962,46.4583535,1 7.4301362,46.4577031,1 7.430222,46.4569817,1 7.4301104,46.456284,1 7.4302821,46.4559884,1 7.4308571,46.4556691,1 7.4291826,46.4541298,1 7.427084,46.4535514,1 7.4274775,46.4522141,1 + + + + #style-Unclassified + + relativeToGround + 7.4353588,46.4606376,1 7.4352054,46.4610438,1 7.4349693,46.4614355,1 + + + + #style-Unclassified + + relativeToGround + 7.430159,46.462852,1 7.4301306,46.4627805,1 7.4301306,46.4625736,1 7.430195,46.4620637,1 7.4302272,46.4618346,1 7.4301521,46.4614724,1 7.4300233,46.4613172,1 7.4297015,46.4611029,1 + + + + Flöschstrasse + #style-Unclassified + + relativeToGround + 7.430159,46.462852,1 7.4302272,46.4629801,1 7.4302808,46.4631574,1 7.4303452,46.4642216,1 7.430313,46.4646429,1 7.4302379,46.4654336,1 7.4301199,46.4663278,1 7.4299697,46.4668007,1 7.4296908,46.4675249,1 7.4294547,46.4679831,1 7.4292187,46.468589,1 7.4291066,46.4688619,1 7.4290537,46.4691138,1 + + + + #style-Unclassified + + relativeToGround + 7.4290537,46.4691138,1 7.4286822,46.4691654,1 7.4284659,46.4692383,1 7.4281887,46.4695127,1 7.4278132,46.4699265,1 7.4276201,46.4700817,1 7.4271158,46.4705176,1 7.4268262,46.4707615,1 7.4268047,46.4708649,1 7.4269334,46.4710275,1 + + + + Obere Ägertenstrasse + #style-Unclassified + + relativeToGround + 7.4302379,46.4654336,1 7.430592,46.4651602,1 7.4308602,46.4648646,1 7.4309997,46.4646133,1 7.4313859,46.4639999,1 7.4317721,46.4632313,1 7.4320082,46.4627436,1 7.4321155,46.4624849,1 7.4322834,46.461897,1 7.4323193,46.461199,1 + + + + Sagistrasse + #style-Unclassified + + relativeToGround + 7.4351088,46.4673623,1 7.4358872,46.4676242,1 + + + + Oberriedstrasse + #style-Unclassified + + relativeToGround + 7.4545769,46.4439833,1 7.4547271,46.4439241,1 + + + + Oberriedstrasse + #style-Unclassified + + relativeToGround + 7.4547271,46.4439241,1 7.4548183,46.4438761,1 7.454876,46.443826,1 7.4550079,46.4436536,1 7.4551627,46.4430606,1 7.4553113,46.4426596,1 7.4554721,46.4423588,1 7.4560542,46.4417253,1 7.4562979,46.441431,1 7.45647,46.441134,1 7.4564938,46.441,1 7.4565824,46.4408413,1 7.4566176,46.4407782,1 7.4572602,46.4399218,1 7.4576464,46.4396497,1 7.4579549,46.4395665,1 7.4587721,46.4394172,1 7.4590882,46.439328,1 7.4594231,46.4391233,1 7.4597503,46.438854,1 7.4600197,46.4385501,1 7.4606355,46.4376757,1 7.4607449,46.4375203,1 7.4612856,46.4369761,1 7.4623242,46.4356452,1 7.463195,46.434967,1 7.4633488,46.4348497,1 7.4636343,46.4345773,1 7.4640337,46.4340246,1 7.4642365,46.4337625,1 7.4644614,46.4335157,1 7.4653563,46.432764,1 7.4661983,46.4321939,1 7.4667084,46.4318423,1 7.4669016,46.4316887,1 7.4670482,46.4314854,1 7.467344,46.4306214,1 7.4675058,46.4302754,1 7.4677582,46.4299748,1 + + + + Oberriedstrasse + #style-Unclassified + + relativeToGround + 7.4440966,46.4543426,1 7.4441109,46.4543138,1 7.4442933,46.4540773,1 7.444583,46.4537447,1 7.4447935,46.4534764,1 7.4449209,46.4532605,1 7.4449978,46.4530345,1 7.4450658,46.4527542,1 7.4451127,46.4523018,1 7.4451741,46.4520707,1 7.4453308,46.4518244,1 7.4460796,46.4511056,1 7.4469774,46.4504619,1 7.4478827,46.4500392,1 7.448556,46.4497567,1 7.4490141,46.4495254,1 7.4498329,46.4490688,1 7.4503311,46.4488049,1 7.450763,46.448663,1 7.451105,46.4485549,1 7.4513722,46.4483848,1 7.451504,46.4482133,1 7.4520636,46.4473548,1 7.4524759,46.4465754,1 7.4528298,46.4461337,1 7.4531239,46.4458511,1 7.4534257,46.4454192,1 7.4538049,46.4449126,1 7.4542979,46.4443603,1 7.4545085,46.4440271,1 7.4545769,46.4439833,1 + + + + Oberriedstrasse + #style-Unclassified + + relativeToGround + 7.444062,46.4544122,1 7.4440966,46.4543426,1 + + + + Lischmattenstrasse + #style-Unclassified + + relativeToGround + 7.4439634,46.4542879,1 7.4438105,46.4542602,1 + + + + Lischmattenstrasse + #style-Unclassified + + relativeToGround + 7.4438105,46.4542602,1 7.4433035,46.4541697,1 7.4407581,46.4538384,1 7.4394643,46.4538143,1 + + + + Rawilstrasse + #style-Unclassified + + relativeToGround + 7.4430005,46.457189,1 7.4430622,46.4571982,1 + + + + Schulstrasse + #style-Unclassified + + relativeToGround + 7.4435047,46.4557418,1 7.4434082,46.4557385,1 + + + + Gutenbrunnenstrasse + #style-Unclassified + + relativeToGround + 7.4448524,46.4597347,1 7.4449449,46.4598479,1 + + + + Bühlbergstrasse + #style-Unclassified + + relativeToGround + 7.4476773,46.4598777,1 7.4476229,46.4599377,1 + + + + Bühlbergstrasse + #style-Unclassified + + relativeToGround + 7.4476229,46.4599377,1 7.4475736,46.459992,1 7.4472866,46.4601065,1 7.4471632,46.4601564,1 7.4470908,46.4602063,1 7.4469806,46.460365,1 7.4468012,46.4607348,1 7.4466644,46.4609528,1 7.4465596,46.4612913,1 7.446482,46.4616641,1 7.4465494,46.4620495,1 7.4467601,46.4623722,1 7.4469595,46.462428,1 7.4470958,46.4624741,1 7.4471548,46.4625571,1 7.4471354,46.4626788,1 7.4470643,46.4628183,1 7.4470759,46.4629039,1 7.447149,46.4629496,1 7.4472496,46.4629448,1 7.4473107,46.4629016,1 7.4474659,46.4626716,1 7.4474787,46.462537,1 7.44739,46.4622619,1 7.44739,46.4621592,1 7.447435,46.4620685,1 7.4475389,46.4619867,1 7.4476454,46.4619468,1 7.4477672,46.4619562,1 7.4478306,46.4620086,1 7.4478473,46.4620985,1 7.4478115,46.4623099,1 7.447841,46.4624429,1 7.4481888,46.4626571,1 7.4488776,46.4629016,1 7.4494952,46.4630339,1 7.4499363,46.4629898,1 7.4504521,46.4631043,1 7.4507207,46.4630546,1 7.4509197,46.4629352,1 7.4508202,46.4626367,1 7.4509495,46.4623582,1 7.4512878,46.4622786,1 7.4516857,46.4623283,1 7.4536257,46.4631043,1 7.4547299,46.4630645,1 7.4552771,46.463363,1 + + + + Ägertenstrasse + #style-Unclassified + + relativeToGround + 7.4376101,46.4601022,1 7.4375109,46.4601364,1 7.4365881,46.4604558,1 7.4361085,46.4605709,1 7.4353588,46.4606376,1 7.4350766,46.4606669,1 7.4348713,46.4607347,1 + + + + Ägertenstrasse + #style-Unclassified + + relativeToGround + 7.4377581,46.4600511,1 7.4376101,46.4601022,1 + + + + Sagistrasse + #style-Unclassified + + relativeToGround + 7.4361018,46.4677055,1 7.4363271,46.4677904,1 7.4370442,46.4681471,1 7.4371615,46.468206,1 7.4384373,46.46873,1 + + + + Sagistrasse + #style-Unclassified + + relativeToGround + 7.4358872,46.4676242,1 7.4361018,46.4677055,1 + + + + Mittlere Ägertenstrasse + #style-Unclassified + + relativeToGround + 7.4290537,46.4691138,1 7.4305276,46.4683451,1 7.4316423,46.467711,1 7.4319089,46.4675275,1 7.4327807,46.4664017,1 7.4335209,46.4654705,1 7.435674,46.4631469,1 7.4366858,46.462123,1 7.4374483,46.4612465,1 7.4377862,46.4608179,1 7.4378453,46.4606479,1 7.4378131,46.4605149,1 7.4377148,46.4603861,1 7.4375109,46.4601364,1 + + + + Flöschstrasse + #style-Unclassified + + relativeToGround + 7.4296586,46.4726679,1 7.4295084,46.4724019,1 7.429171,46.4719433,1 7.4290276,46.4717095,1 7.4289541,46.4714632,1 7.4289403,46.4708977,1 7.4290537,46.4691138,1 + + + + Schadaulistrasse + #style-Unclassified + + relativeToGround + 7.4288706,46.4759627,1 7.4284414,46.475863,1 7.4282269,46.4757891,1 7.4280485,46.4756506,1 7.4279098,46.4754978,1 7.4278668,46.4752687,1 7.427899,46.4750249,1 7.4280814,46.4747663,1 7.4289342,46.4740116,1 7.4295727,46.4730964,1 7.4296586,46.4728821,1 7.4296586,46.4726679,1 + + + + Schadaulistrasse + #style-Unclassified + + relativeToGround + 7.4292187,46.4760445,1 7.4288706,46.4759627,1 + + + + #style-Unclassified + + relativeToGround + 7.4239729,46.4964435,1 7.4241194,46.4963413,1 + + + + #style-Unclassified + + relativeToGround + 7.4241194,46.4963413,1 7.4243085,46.4962111,1 7.4245872,46.4960192,1 7.4248311,46.4957794,1 7.4250679,46.4955465,1 7.425394,46.4950502,1 7.425394,46.494607,1 7.4253855,46.4943529,1 7.4252825,46.4941166,1 7.4252996,46.4939629,1 7.4255571,46.493443,1 7.4257889,46.4929289,1 7.4260378,46.4923971,1 7.4263553,46.4919657,1 7.4267244,46.4915698,1 7.427042,46.4912389,1 7.4274368,46.4908607,1 7.4277973,46.4903348,1 7.4277544,46.4901043,1 7.4276085,46.489927,1 7.4273767,46.4897616,1 7.4272987,46.4897359,1 + + + + #style-Unclassified + + relativeToGround + 7.4451135,46.4568262,1 7.4457293,46.4570504,1 7.4457346,46.4571022,1 7.4455791,46.4573572,1 + + + + #style-Unclassified + + relativeToGround + 7.4310896,46.4978651,1 7.4312559,46.4980313,1 7.4313202,46.4981679,1 7.4314812,46.4983193,1 7.4317494,46.4984966,1 7.43246,46.4986638,1 7.43263,46.4987973,1 7.4326179,46.498943,1 7.4327757,46.4992223,1 7.4332371,46.4995258,1 7.4335304,46.4996856,1 7.4339273,46.4998112,1 7.4342385,46.4998038,1 7.4345241,46.4997444,1 7.4352577,46.4996228,1 7.4360463,46.4995231,1 7.4366203,46.4994493,1 7.437087,46.4993717,1 7.4374357,46.4992757,1 7.4382029,46.4989309,1 7.4388787,46.4984079,1 7.439281,46.4981605,1 7.4399999,46.4976842,1 7.4411371,46.4971856,1 7.4421611,46.4969154,1 7.4432902,46.4966361,1 7.4441358,46.4965578,1 7.4445489,46.4965357,1 7.4447957,46.4966686,1 7.44486,46.4968385,1 7.4447259,46.4969936,1 7.4440503,46.4973064,1 7.4432926,46.4976366,1 7.4426516,46.4981223,1 7.4415831,46.4989576,1 7.4414107,46.4992129,1 7.4411693,46.4999145,1 7.4410996,46.5000438,1 7.4410272,46.5001361,1 7.4410459,46.5001952,1 7.4411103,46.5002007,1 7.4411774,46.5001767,1 7.4412176,46.5000863,1 7.4413919,46.4998112,1 7.4420705,46.4994308,1 7.4424139,46.4991428,1 7.4427464,46.4989434,1 7.4429503,46.4988843,1 7.4433902,46.498936,1 7.4439213,46.4988566,1 7.4442726,46.4988215,1 7.4446347,46.4987292,1 7.4450317,46.4984338,1 7.4455681,46.4981974,1 7.446244,46.4979943,1 7.4467966,46.4977876,1 7.4471775,46.4977137,1 7.4473438,46.4976251,1 7.4475047,46.4976066,1 7.4475905,46.4976472,1 7.4475852,46.4977174,1 7.4474403,46.4977949,1 7.447274,46.4978873,1 7.4471131,46.4979537,1 7.4467912,46.4982048,1 7.4464372,46.4985372,1 7.4460724,46.4990542,1 7.4455896,46.4994973,1 7.4449888,46.4998665,1 7.4444631,46.5002949,1 7.4442592,46.500738,1 7.4439052,46.5014617,1 7.4434867,46.5020008,1 7.4434224,46.5025916,1 7.4432078,46.5032267,1 7.4428215,46.5038618,1 7.4426928,46.504268,1 7.4424246,46.5045708,1 7.4419525,46.5049474,1 7.441577,46.5052686,1 7.4414268,46.5053978,1 7.4413785,46.5054643,1 7.4414322,46.5055455,1 7.4415502,46.5055566,1 7.4416467,46.5054938,1 7.441754,46.5053831,1 7.4418238,46.5053018,1 7.4423602,46.5049621,1 7.4430576,46.5046298,1 7.4436799,46.5041498,1 7.4444631,46.5038618,1 7.4456647,46.5034483,1 7.4466839,46.5029387,1 7.4477461,46.5024366,1 7.4483898,46.5019344,1 7.4490014,46.5017276,1 7.4500421,46.5016168,1 7.4508387,46.5015134,1 7.4512035,46.50153,1 7.4520323,46.5016076,1 7.4526867,46.5016759,1 7.453191,46.5016574,1 7.4535665,46.5016316,1 7.4538723,46.5015467,1 7.4540976,46.5013953,1 7.4543336,46.5013436,1 7.4544892,46.5013436,1 7.4546286,46.5013934,1 7.4548137,46.5014728,1 7.4549773,46.5014839,1 7.4551919,46.5014765,1 7.4554279,46.5015245,1 7.4557122,46.501639,1 7.4559831,46.5017073,1 7.4562701,46.5017756,1 7.4565491,46.5017959,1 7.4568227,46.5018845,1 7.4571794,46.5020212,1 7.4576032,46.5021172,1 7.4580458,46.502215,1 7.4582952,46.502311,1 7.458322,46.5023535,1 7.4583113,46.5023996,1 7.4582174,46.502407,1 7.4580833,46.5023922,1 7.4579278,46.5024144,1 7.4577132,46.5025326,1 7.4570051,46.5028427,1 7.4564043,46.5030643,1 7.4557391,46.5032563,1 7.4549451,46.5035074,1 7.4543443,46.5036698,1 7.4538723,46.5038471,1 7.4533787,46.5040391,1 7.4530354,46.5042458,1 7.4527565,46.5044083,1 + + + + #style-Unclassified + + relativeToGround + 7.592399,46.488507,1 7.59321,46.488437,1 7.59392,46.488552,1 7.594131,46.488536,1 7.5943718,46.4884212,1 7.5948158,46.4885033,1 7.5952399,46.4885619,1 7.5955708,46.4884936,1 7.5960104,46.4885348,1 + + + + #style-Unclassified + + relativeToGround + 7.5960104,46.4885348,1 7.5962371,46.488494,1 7.596404,46.4883944,1 + + + + Hahnenmoosstrasse + #style-Unclassified + + relativeToGround + 7.5148593,46.4576658,1 7.5139753,46.4570098,1 7.5137473,46.4566738,1 7.5134953,46.4566158,1 7.5132313,46.4567988,1 7.5131163,46.4569628,1 7.5132733,46.4572948,1 + + + + Diemtigtalstrasse + #style-Unclassified + + relativeToGround + 7.5600746,46.6314618,1 7.5598156,46.6312398,1 7.559655,46.6309751,1 7.5593873,46.6307986,1 7.5590242,46.6307277,1 7.5582769,46.6304248,1 7.5576765,46.6305044,1 7.5572299,46.6304384,1 7.5555999,46.6298843,1 7.5555016,46.629737,1 7.5554714,46.6294791,1 7.5553783,46.6293059,1 7.5551891,46.629144,1 7.5549186,46.6289567,1 7.5544468,46.6288002,1 7.5541557,46.6287772,1 7.5537162,46.6287061,1 7.553227,46.6285376,1 7.5526808,46.6281825,1 7.5524817,46.6280484,1 7.5518999,46.6277116,1 7.5514352,46.6270945,1 7.5510642,46.6263117,1 7.5508466,46.626119,1 7.5508232,46.6259826,1 7.5506946,46.6258393,1 7.5504849,46.625715,1 7.5503553,46.6254358,1 7.550316,46.6251753,1 7.550244,46.6250835,1 7.5500438,46.6248793,1 7.5488614,46.6241043,1 7.5485721,46.6238921,1 7.548328,46.6237442,1 7.5480229,46.6235274,1 7.54797,46.6233309,1 7.5477086,46.6229447,1 7.547457,46.6226864,1 7.5470609,46.6224583,1 7.5457883,46.6215605,1 7.5455609,46.6214509,1 7.5453464,46.621419,1 7.5446782,46.6212488,1 7.5433859,46.62073,1 7.5429287,46.6205111,1 7.5421192,46.6198929,1 7.5418311,46.619571,1 7.5417298,46.6192503,1 7.5415818,46.6188457,1 7.541494,46.6184536,1 7.5414137,46.6182422,1 7.5413211,46.6181037,1 7.5411663,46.6178794,1 7.5410485,46.6177926,1 7.5406361,46.6174361,1 7.5401975,46.6169536,1 7.5396964,46.6164697,1 7.5391172,46.616091,1 7.5386223,46.615864,1 7.5380109,46.6151669,1 7.5378718,46.6149389,1 7.5376117,46.6147741,1 7.537236,46.6147098,1 7.5370075,46.6146143,1 7.5367774,46.6144043,1 7.5355882,46.6137959,1 7.5352713,46.6136639,1 7.5350754,46.6135533,1 7.5337253,46.6127512,1 7.5333154,46.6125519,1 7.5329988,46.6124922,1 7.5323089,46.612488,1 7.5318122,46.6125197,1 7.5315634,46.6124686,1 7.5314699,46.6123848,1 7.5314302,46.6121513,1 7.5313915,46.6119232,1 7.5312951,46.6117809,1 7.5309538,46.6115558,1 7.5305549,46.6113981,1 7.5300789,46.6112805,1 7.5296412,46.611198,1 7.5292201,46.6111837,1 7.5283316,46.611403,1 7.5276551,46.6115571,1 7.5272051,46.6115766,1 7.5261496,46.6114159,1 7.52564,46.6113005,1 7.5253453,46.6111977,1 7.5248067,46.6109049,1 7.5245846,46.6108356,1 7.5236745,46.6108032,1 7.5233471,46.6107245,1 7.5230431,46.6105063,1 7.5228115,46.6101505,1 7.5225994,46.609902,1 7.522408,46.6097115,1 7.5221107,46.6095417,1 7.5215979,46.6093977,1 7.5212467,46.6093381,1 7.5210101,46.6092757,1 7.5207618,46.6091481,1 7.5202006,46.6082884,1 7.519828,46.6078676,1 7.5194859,46.6075841,1 7.5190794,46.6074094,1 7.5184389,46.6073161,1 7.5169906,46.6071004,1 7.5157977,46.6070594,1 7.5153595,46.6069773,1 7.515053,46.6067635,1 7.5140954,46.6063115,1 7.513268,46.6063192,1 7.5117359,46.6057293,1 7.5105255,46.6048942,1 7.5097041,46.6044949,1 7.5096904,46.6044882,1 7.5089857,46.604289,1 7.5084647,46.6038754,1 7.5070322,46.6034157,1 7.506404,46.6027646,1 7.5055996,46.6024505,1 7.5043126,46.6011558,1 7.5026183,46.5984083,1 7.502045,46.5974786,1 7.5000149,46.5965747,1 7.499065,46.5959771,1 7.4991109,46.595709,1 7.4998387,46.5957243,1 7.5004286,46.5958162,1 7.5005435,46.5957779,1 7.50026,46.5955022,1 7.4972494,46.5926064,1 7.4965446,46.5914113,1 7.4957172,46.5887913,1 7.495564,46.5859032,1 7.4954261,46.5842868,1 7.4941238,46.5812531,1 7.4929747,46.5807399,1 7.4924614,46.5802955,1 7.4917949,46.5801576,1 7.4911437,46.579744,1 7.4901019,46.5793379,1 7.4888838,46.5783574,1 7.487773,46.5775147,1 7.4871372,46.5767026,1 7.4871895,46.5761873,1 7.4873108,46.5760875,1 7.4861474,46.5754004,1 7.4858975,46.5750647,1 7.485351,46.5746508,1 7.4846404,46.573667,1 7.4837035,46.5731439,1 7.4837425,46.5728862,1 7.4843437,46.5723709,1 7.4846795,46.5722147,1 7.4849293,46.5717619,1 7.4853822,46.5713403,1 7.4866393,46.5706453,1 7.4866159,46.5701456,1 7.4856945,46.5700051,1 7.4837269,46.5688339,1 7.483438,46.5685138,1 7.4831257,46.5683576,1 7.4819015,46.5676487,1 7.481459,46.567211,1 7.4803362,46.5667495,1 7.4800756,46.5665507,1 7.4797748,46.5663213,1 7.4794227,46.5658312,1 + + + + #style-Unclassified + + relativeToGround + 7.6072841,46.5284422,1 7.6065438,46.5287744,1 7.6059609,46.5289507,1 + + + + Rainweg + #style-Unclassified + + relativeToGround + 7.5725176,46.503522,1 7.571786,46.5036569,1 7.5716948,46.503694,1 7.5715584,46.5037674,1 7.5714301,46.5038062,1 7.5713036,46.5036465,1 7.5711946,46.5034698,1 + + + + Rainweg + #style-Unclassified + + relativeToGround + 7.5716948,46.503694,1 7.5714793,46.5034154,1 + + + + Trogweg + #style-Unclassified + + relativeToGround + 7.5717115,46.5024556,1 7.5720126,46.5023572,1 7.572155,46.5022396,1 7.5722022,46.5021698,1 7.5721933,46.5021194,1 7.572159,46.502032,1 7.5721677,46.5020008,1 7.572181,46.50198,1 7.572291,46.5019165,1 + + + + Laserweg + #style-Unclassified + + relativeToGround + 7.5717043,46.5024447,1 7.570935,46.502664,1 7.5706686,46.5027262,1 7.5703643,46.5027686,1 7.5702629,46.5027661,1 7.5701922,46.5027436,1 7.57008,46.502591,1 7.5699495,46.5024145,1 7.569842,46.502313,1 7.569743,46.5022761,1 7.5696887,46.5022836,1 7.5696452,46.5023073,1 7.5696416,46.5023484,1 + + + + Tannenweg + #style-Unclassified + + relativeToGround + 7.5625853,46.4950604,1 7.5629277,46.4952317,1 7.5632285,46.4954048,1 7.56365,46.495627,1 + + + + #style-Unclassified + + relativeToGround + 7.5627191,46.4953707,1 7.5625165,46.4953073,1 7.5621808,46.4951509,1 + + + + Aebiweg + #style-Unclassified + + relativeToGround + 7.5371522,46.4817482,1 7.5372839,46.4820083,1 7.537241,46.4823334,1 7.5370908,46.4827175,1 7.5371766,46.4828653,1 7.5376916,46.4829392,1 7.5382709,46.4830869,1 7.5387215,46.4830721,1 7.5390649,46.483013,1 7.5393653,46.482821,1 7.5395369,46.4827471,1 7.5397515,46.482688,1 7.5400614,46.4825351,1 7.5405388,46.4820442,1 + + + + Senggistrasse + #style-Unclassified + + relativeToGround + 7.5524133,46.4901418,1 7.552748,46.4907505,1 7.5531342,46.4908864,1 7.5536321,46.4912646,1 7.5545504,46.491625,1 7.5550053,46.4920091,1 7.5554688,46.4922455,1 7.5555976,46.4922278,1 7.5556793,46.492015,1 7.5554173,46.49169,1 7.5550311,46.4914773,1 7.5549109,46.4913118,1 7.5549882,46.4910991,1 7.5555547,46.4908982,1 + + + + Hahnenmoosstrasse + #style-Unclassified + + relativeToGround + 7.4673625,46.4564555,1 7.4673641,46.4565592,1 7.4673418,46.45667,1 7.4673426,46.4568327,1 7.467407,46.4569435,1 7.4675943,46.457032,1 7.4676,46.45709,1 7.4675143,46.4571431,1 7.4673962,46.4571579,1 7.4672782,46.4571061,1 7.4671066,46.4569879,1 7.4669969,46.4568804,1 7.4668383,46.4568253,1 7.4668276,46.4566405,1 + + + + Hahnenmoosstrasse + #style-Unclassified + + relativeToGround + 7.4676573,46.4558604,1 7.4673625,46.4564555,1 + + + + #style-Unclassified + + relativeToGround + 7.5555691,46.489152,1 7.5555719,46.4891333,1 7.5555852,46.489115,1 7.5555979,46.4891035,1 7.5556169,46.4890931,1 7.5556628,46.4890846,1 7.5557363,46.4890835,1 7.5559446,46.4890818,1 7.5561531,46.4890823,1 + + + + Gruebiweg + #style-Unclassified + + relativeToGround + 7.5552097,46.4887457,1 7.5553556,46.4888139,1 7.5555678,46.4888499,1 7.5558846,46.4888569,1 7.556089,46.4888482,1 + + + + Alte Strasse + #style-Unclassified + + relativeToGround + 7.5850973,46.5007372,1 7.5850387,46.5007685,1 7.5846542,46.5009922,1 7.5846239,46.5011334,1 7.5847252,46.501739,1 7.5847275,46.5020678,1 7.5849919,46.5028044,1 7.5855069,46.5035872,1 7.5855713,46.5038678,1 7.5857301,46.5039004,1 7.5859361,46.5039121,1 7.5860004,46.5040303,1 7.5858717,46.5045176,1 7.5860434,46.5048573,1 7.5863867,46.5051675,1 7.5868778,46.506548,1 7.5869798,46.5067495,1 7.587087,46.5069209,1 7.58715,46.5070534,1 7.5872426,46.5074858,1 7.587245,46.5076043,1 7.58713,46.5078698,1 7.5871139,46.5079584,1 7.5871729,46.5080876,1 7.587307,46.5081578,1 7.5875108,46.5082168,1 7.5876199,46.5082948,1 7.5876557,46.5084384,1 7.5875806,46.5087337,1 7.5876556,46.5089368,1 7.5878863,46.5094832,1 7.5880044,46.5096567,1 7.5882243,46.5098561,1 7.5884442,46.5100702,1 7.5886588,46.5103323,1 7.5888412,46.5105723,1 7.5889177,46.5107599,1 7.5889616,46.5109714,1 7.5888627,46.5113365,1 7.5887152,46.5114922,1 7.5886612,46.5116064,1 7.5886588,46.5118054,1 7.5887308,46.5121362,1 7.5887696,46.5124147,1 7.5888949,46.5126656,1 7.5893693,46.5131274,1 7.5896405,46.5132526,1 7.5902491,46.5134523,1 7.5909226,46.5134852,1 7.5913249,46.5134999,1 7.5915127,46.5134888,1 7.5918024,46.5134076,1 7.5924407,46.5133559,1 7.5926392,46.5133707,1 7.5927197,46.5134261,1 7.5927143,46.5135258,1 7.5925989,46.5135841,1 7.5923227,46.5136993,1 7.5921118,46.5138459,1 7.5919258,46.5139835,1 7.5916629,46.5142346,1 7.5916009,46.5143235,1 7.5915288,46.5144782,1 7.5914,46.5145816,1 7.5912498,46.5146813,1 7.5911503,46.5147665,1 7.5911372,46.5148289,1 7.5911936,46.5149035,1 7.5912767,46.5149618,1 7.5914698,46.5150504,1 7.5919204,46.5151575,1 7.5922017,46.5152686,1 7.5922526,46.5153912,1 7.5922798,46.5155377,1 7.5922583,46.5156337,1 7.5921779,46.5157961,1 7.5921457,46.5158884,1 7.5921588,46.5159774,1 7.5923174,46.5162059,1 7.5923388,46.5163203,1 7.5923948,46.5163908,1 7.5934463,46.5170848,1 7.5941445,46.5176762,1 7.5943827,46.5179335,1 7.5946831,46.5185647,1 7.594785,46.5188416,1 7.5949566,46.519063,1 7.5951605,46.5192513,1 7.5955789,46.5194949,1 7.5959139,46.5196688,1 7.5962656,46.5197533,1 7.5964503,46.5198164,1 7.5965552,46.519901,1 7.5966035,46.5200117,1 7.5966947,46.5201815,1 7.5968557,46.5203624,1 7.5973599,46.5207942,1 7.5975454,46.5208933,1 7.5977461,46.5209603,1 7.5978856,46.5210748,1 7.5979715,46.5212519,1 7.5979983,46.521455,1 7.5979661,46.5216912,1 7.5979607,46.5218167,1 7.5980412,46.5219939,1 7.5980948,46.5221415,1 7.5980753,46.5223333,1 7.59811,46.5226362,1 7.5982021,46.522924,1 + + + + Alte Strasse + #style-Unclassified + + relativeToGround + 7.5851089,46.5006757,1 7.5850973,46.5007372,1 + + + + Alte Strasse + #style-Unclassified + + relativeToGround + 7.5851089,46.5006757,1 7.5850643,46.5006438,1 7.5845945,46.5005489,1 7.5842102,46.5002567,1 7.5838483,46.4999466,1 7.5830537,46.4991232,1 7.5826523,46.4989336,1 7.582594,46.4989054,1 7.5810925,46.497901,1 7.5804891,46.4976849,1 7.5801849,46.4975458,1 7.5795841,46.4969549,1 7.5791121,46.4966595,1 7.5788121,46.4963841,1 7.5784683,46.4960686,1 7.5779508,46.4959746,1 7.5778518,46.4959324,1 7.577856,46.4958566,1 7.5780392,46.495596,1 7.5779939,46.49555,1 + + + + Bütscheggenweg + #style-Unclassified + + relativeToGround + 7.5753139,46.5088011,1 7.5752226,46.5089091,1 7.5750338,46.5093631,1 7.5749573,46.5094711,1 7.574882,46.5094983,1 7.5747902,46.5094904,1 7.5746294,46.5094263,1 7.5745088,46.5093055,1 7.574491,46.5092875,1 7.57442,46.509189,1 7.574359,46.509088,1 7.574338,46.508939,1 7.574222,46.508688,1 7.574139,46.508567,1 7.574031,46.508442,1 7.573789,46.508273,1 7.573645,46.508149,1 7.573516,46.507976,1 7.57336,46.507811,1 7.573107,46.50769,1 7.572656,46.507421,1 7.572422,46.507265,1 7.572219,46.507108,1 7.57199,46.50692,1 7.571725,46.506695,1 7.571557,46.506537,1 7.571456,46.506313,1 7.571314,46.506114,1 7.570996,46.505779,1 7.570623,46.505583,1 7.5704442,46.5055077,1 7.570293,46.505449,1 7.570076,46.505348,1 7.569794,46.505203,1 7.569594,46.505027,1 7.5695203,46.50499,1 7.5694718,46.5049861,1 7.5694441,46.5050305,1 7.5694427,46.505069,1 7.569616,46.505224,1 7.569758,46.50538,1 7.569953,46.505639,1 7.570025,46.505838,1 7.570039,46.506066,1 7.569997,46.506254,1 7.569945,46.506424,1 7.569946,46.506613,1 7.5698959,46.5066559,1 7.5697967,46.5066484,1 7.569597,46.506478,1 7.569278,46.5061,1 7.5691127,46.5059387,1 7.568755,46.505672,1 7.5684874,46.5053996,1 7.568432,46.50536,1 7.568207,46.505142,1 7.567728,46.504666,1 7.56754,46.504485,1 7.567329,46.504179,1 7.5672453,46.5041525,1 7.5670457,46.5040965,1 7.566915,46.504026,1 7.5668264,46.5039619,1 7.5667654,46.5039084,1 7.566586,46.503722,1 7.5665589,46.5036645,1 7.5662748,46.5034588,1 7.566168,46.503343,1 7.5660937,46.5031901,1 7.5660213,46.5030833,1 7.565959,46.5030093,1 7.5658571,46.5029369,1 + + + + Hohliebeweg + #style-Unclassified + + relativeToGround + 7.5748122,46.4926149,1 7.5748165,46.4925846,1 7.5748422,46.4925475,1 7.5752285,46.4925784,1 7.5753308,46.4925713,1 7.5753936,46.4925327,1 7.5753914,46.4924534,1 7.5752299,46.4923705,1 7.5750836,46.4923319,1 7.5747518,46.4923365,1 7.574514,46.4923496,1 7.5744161,46.4923149,1 7.5742703,46.4921827,1 7.5741195,46.4920273,1 7.5739786,46.4915334,1 7.5738497,46.4911149,1 7.5737082,46.4907245,1 7.5736295,46.490499,1 7.573569,46.490309,1 7.5735774,46.490168,1 7.5737097,46.4899012,1 7.573877,46.4897669,1 7.5740024,46.4896153,1 7.5739773,46.4894445,1 7.5739991,46.4894219,1 7.5740293,46.4894136,1 7.5740927,46.4894215,1 7.5741494,46.4894612,1 7.5742011,46.4895481,1 7.574245,46.4896146,1 7.5742987,46.4897163,1 7.5743469,46.4898096,1 7.5744159,46.4898903,1 7.57463,46.4900137,1 7.5750015,46.4901671,1 7.5751139,46.4901494,1 7.5751655,46.4901109,1 7.5752686,46.4900151,1 7.5753957,46.4898584,1 7.5756006,46.4897247,1 7.5760912,46.4895722,1 7.5766751,46.489079,1 7.5768604,46.4888862,1 7.5770611,46.4887403,1 7.5772841,46.4886847,1 7.5774307,46.4886108,1 7.577443,46.4885782,1 7.5774172,46.488546,1 7.5773527,46.4885144,1 7.5770322,46.488577,1 7.576403,46.4886185,1 7.5760685,46.4885897,1 7.5758881,46.4885517,1 7.5757861,46.4885253,1 7.5756417,46.488455,1 7.5754445,46.4882827,1 7.5752077,46.4878809,1 7.5749909,46.4874603,1 7.5747366,46.48733,1 7.5744824,46.4872079,1 7.5742341,46.4869365,1 7.5740212,46.4866488,1 7.5737818,46.4862913,1 7.573563,46.4859489,1 7.573498,46.4857182,1 7.5735256,46.4853043,1 7.5736283,46.4850564,1 7.5739892,46.4846275,1 7.5740561,46.4844231,1 7.5741244,46.4842225,1 7.5741746,46.4841227,1 7.5743418,46.4839567,1 7.5743683,46.483903,1 7.5743906,46.4837706,1 7.5742118,46.4830843,1 7.5741888,46.4829278,1 7.5739849,46.482695,1 7.5737651,46.482332,1 7.5736551,46.4820242,1 7.5735632,46.481887,1 7.5735731,46.4818453,1 7.5736473,46.4818219,1 7.5737583,46.4818693,1 7.573887,46.4820133,1 7.5744837,46.4821543,1 7.5746673,46.482228,1 7.5751903,46.4824967,1 7.5754308,46.4826309,1 7.5757703,46.4827575,1 7.5760306,46.4829216,1 7.5763564,46.4831348,1 7.5763735,46.4831899,1 7.5763394,46.4832512,1 7.5761156,46.4834307,1 7.5760319,46.4835878,1 7.5760578,46.4837445,1 7.5761335,46.4838993,1 7.5763194,46.484058,1 7.5765279,46.4841883,1 7.576996,46.4847005,1 7.5771557,46.484847,1 7.5774165,46.4849629,1 7.577649,46.485013,1 7.5778689,46.4850323,1 7.578133,46.48503,1 7.578373,46.4849835,1 7.5784787,46.4849298,1 7.5784966,46.4848874,1 7.5784279,46.4848328,1 7.5782986,46.4847952,1 7.5782212,46.4847547,1 7.5781483,46.4845932,1 7.578149,46.484371,1 7.5781647,46.4840848,1 7.5781932,46.4839283,1 7.5782963,46.4837267,1 7.5785167,46.4834123,1 7.5785346,46.4833762,1 7.5784025,46.4830335,1 7.5782586,46.4828248,1 7.5780223,46.4826498,1 7.5777744,46.482495,1 7.57752,46.4822396,1 7.5772621,46.4819819,1 7.5770082,46.4818722,1 7.5768561,46.4817701,1 7.5766102,46.4814291,1 7.5765466,46.4812489,1 7.5763526,46.4811718,1 7.576209,46.4811,1 7.5761374,46.4809328,1 7.575831,46.480722,1 7.575571,46.480581,1 7.5752753,46.480404,1 7.5751232,46.4803012,1 7.575108,46.480291,1 7.574856,46.480078,1 7.5746784,46.4799297,1 7.57458,46.479817,1 7.574411,46.4796044,1 7.5743116,46.4792862,1 7.5742532,46.4790813,1 7.574265,46.478525,1 7.574191,46.478269,1 7.5740445,46.4779657,1 7.573681,46.477433,1 7.573501,46.477152,1 7.5733697,46.4768436,1 + + + + #style-Unclassified + + relativeToGround + 7.5855548,46.5376895,1 7.5856085,46.5377307,1 7.585568,46.5378347,1 7.5853884,46.5379208,1 7.5851067,46.5380153,1 7.584983,46.538079,1 7.5849247,46.5381363,1 7.5848752,46.5382295,1 7.5848662,46.5384329,1 7.5848963,46.5385742,1 + + + + #style-Unclassified + + relativeToGround + 7.5817066,46.490105,1 7.5817008,46.4902111,1 7.5816733,46.4907526,1 7.5812232,46.4913729,1 7.5812639,46.4917049,1 7.5811183,46.492002,1 7.5811882,46.4921709,1 7.5809319,46.4930271,1 7.5812974,46.4941264,1 7.581237,46.494378,1 7.5814383,46.4945894,1 7.5819709,46.4947404,1 + + + + #style-Unclassified + + relativeToGround + 7.5776565,46.5036379,1 7.5777661,46.503767,1 7.5789243,46.5048037,1 7.580017,46.5059799,1 7.5800649,46.5062539,1 7.5801586,46.5064359,1 7.5804202,46.5068391,1 7.580475,46.506968,1 7.5806871,46.5075547,1 7.580774,46.507992,1 7.5807475,46.5081673,1 7.5806755,46.5083959,1 7.5806824,46.5085984,1 7.5806998,46.5088309,1 7.5806678,46.5089152,1 + + + + #style-Unclassified + + relativeToGround + 7.561354,46.5249937,1 7.5611075,46.5254464,1 7.5603269,46.5258299,1 7.5602224,46.5259294,1 7.5602179,46.5259521,1 7.5602395,46.5259798,1 7.5603954,46.5260321,1 7.5606287,46.5260943,1 7.5612083,46.5262005,1 7.5612555,46.5262337,1 7.5613375,46.5263696,1 7.561382,46.526515,1 7.5613927,46.5267583,1 7.5615433,46.5277193,1 7.5616651,46.5279657,1 7.5617554,46.5283091,1 7.561906,46.5284,1 7.5620182,46.5284211,1 7.5621819,46.5281266,1 7.562649,46.527644,1 7.564524,46.5268768,1 7.5650682,46.5267509,1 7.5654095,46.5267497,1 + + + + #style-Unclassified + + relativeToGround + 7.5914358,46.5216049,1 7.591663,46.52154,1 7.591774,46.521568,1 7.59211,46.521848,1 7.592208,46.521883,1 7.592531,46.521957,1 7.592895,46.522174,1 7.592974,46.522297,1 7.593075,46.522407,1 7.593585,46.522719,1 7.593747,46.52275,1 7.593935,46.522758,1 7.5944256,46.5230091,1 7.594503,46.523136,1 7.594599,46.52325,1 7.594762,46.523392,1 7.595077,46.523553,1 7.595237,46.523611,1 7.59534,46.523697,1 7.595377,46.523739,1 7.595485,46.524006,1 7.595641,46.524151,1 7.595763,46.524244,1 7.596368,46.524518,1 7.59669,46.524629,1 7.597151,46.524844,1 7.597305,46.524946,1 7.597364,46.52505,1 7.597337,46.5252,1 7.597339,46.525263,1 7.5974171,46.5254953,1 + + + + #style-Unclassified + + relativeToGround + 7.5656379,46.4915646,1 7.5660518,46.4919536,1 7.5663034,46.4920439,1 7.5662885,46.4923288,1 + + + + #style-Unclassified + + relativeToGround + 7.5855548,46.5376895,1 7.5855334,46.5376761,1 7.5854732,46.5376661,1 7.585217,46.537669,1 7.5845096,46.5376307,1 + + + + Bühlbergstrasse + #style-Unclassified + + relativeToGround + 7.4477077,46.4598442,1 7.4476773,46.4598777,1 + + + + Rütistrasse + #style-Unclassified + + relativeToGround + 7.4274775,46.4522141,1 7.4261397,46.4530454,1 7.4264807,46.4545093,1 7.4246182,46.4549791,1 + + + + Ausserschwandstrasse + #style-Unclassified + + relativeToGround + 7.5739397,46.5051162,1 7.5733159,46.5041805,1 7.5725176,46.503522,1 7.5722936,46.5033372,1 7.5717115,46.5024556,1 7.5717043,46.5024447,1 7.5714965,46.50213,1 7.5709593,46.5015986,1 7.5696299,46.5006507,1 7.566752,46.4977228,1 7.5665412,46.4976961,1 7.5663817,46.4976202,1 7.5663132,46.4975194,1 7.5663009,46.4973709,1 7.566314,46.4972084,1 7.5662826,46.497065,1 7.5662005,46.4969304,1 7.5656932,46.4963425,1 7.5650662,46.4957333,1 + + + + Birkenweg + #style-Unclassified + + relativeToGround + 7.5597583,46.4842011,1 7.560472,46.4841615,1 7.5610374,46.4841326,1 7.561747,46.4840627,1 + + + + Bütscheggenweg + #style-Unclassified + + relativeToGround + 7.5739397,46.5051162,1 7.5742401,46.5059307,1 7.5740276,46.5063991,1 7.5741474,46.5067344,1 7.5748979,46.5074196,1 7.5754552,46.508546,1 7.5753139,46.5088011,1 7.5752707,46.5092956,1 7.5756239,46.5103671,1 7.5758202,46.5105712,1 7.5757377,46.5108812,1 7.5750941,46.5111403,1 7.5726804,46.5114307,1 7.5719504,46.5112933,1 7.5717288,46.5112797,1 7.5712568,46.5112509,1 7.5709967,46.5111631,1 7.5695622,46.5107082,1 7.5693037,46.510755,1 7.5685318,46.5110658,1 7.5675927,46.5110709,1 7.5669006,46.5111824,1 7.5665772,46.5111305,1 + + + + Dählenweg + #style-Unclassified + + relativeToGround + 7.5619024,46.484733,1 7.5605313,46.4847046,1 + + + + Fliederweg + #style-Unclassified + + relativeToGround + 7.5573139,46.4905062,1 7.5575742,46.4906144,1 7.5580001,46.49089,1 + + + + Obere Bodenstrasse + #style-Unclassified + + relativeToGround + 7.5621068,46.4703326,1 7.5618747,46.4704067,1 7.5615007,46.4706892,1 7.5612123,46.4709431,1 7.5609132,46.4715494,1 7.5596006,46.476687,1 7.5595328,46.4773032,1 7.5598308,46.4782305,1 7.559232,46.4796016,1 + + + + #style-Unclassified + + relativeToGround + 7.5167801,46.4849324,1 7.5181617,46.4850001,1 7.5189956,46.4843231,1 7.5198652,46.4843966,1 7.5207213,46.4847725,1 7.5217773,46.484755,1 7.5222435,46.4846581,1 7.5224367,46.4843815,1 7.524081,46.4841142,1 7.5247031,46.4843208,1 7.525197,46.4841121,1 + + + + #style-Unclassified + + relativeToGround + 7.5622864,46.461042,1 7.5622266,46.4611132,1 7.5622539,46.462548,1 7.5636079,46.4648625,1 7.563823,46.4661917,1 7.5638651,46.4664717,1 7.5630107,46.4683629,1 7.5628846,46.468745,1 7.5628282,46.4694412,1 7.562485,46.4699422,1 7.5621068,46.4703326,1 + + + + #style-Unclassified + + relativeToGround + 7.5622314,46.476374,1 7.5622314,46.4762793,1 7.561865,46.4755649,1 7.5619871,46.4745086,1 7.5617307,46.4740812,1 7.5617185,46.4732508,1 7.5613338,46.472689,1 7.5614864,46.4719136,1 7.5612588,46.4715361,1 7.5612549,46.47139,1 7.5612834,46.4712484,1 7.5615722,46.4708814,1 7.5621068,46.4705513,1 + + + + #style-Unclassified + + relativeToGround + 7.5624583,46.460924,1 7.5622864,46.461042,1 + + + + #style-Unclassified + + relativeToGround + 7.5622313,46.4764657,1 7.5622314,46.476374,1 + + + + #style-Unclassified + + relativeToGround + 7.5796758,46.5157114,1 7.5797311,46.5157548,1 7.5799023,46.5158239,1 7.5801322,46.5158917,1 7.5802236,46.5159468,1 7.5802588,46.5160395,1 7.5802508,46.5162606,1 7.5803341,46.5164925,1 7.580727,46.516711,1 7.581195,46.5171189,1 7.581244,46.51722,1 7.5812692,46.5174308,1 7.5813528,46.517721,1 7.5813228,46.5178771,1 7.5814321,46.518047,1 7.5817535,46.5185832,1 7.5820489,46.5190792,1 7.5821911,46.5191199,1 7.5823268,46.5191792,1 7.582469,46.5193924,1 7.5826412,46.519449,1 7.583197,46.519706,1 7.5836784,46.5197251,1 7.5840532,46.5197587,1 7.584179,46.51977,1 7.5844902,46.5200212,1 7.5847859,46.5202177,1 + + + + #style-Unclassified + + relativeToGround + 7.5796758,46.5157114,1 7.579568,46.5155332,1 7.5795576,46.5153762,1 + + + + #style-Unclassified + + relativeToGround + 7.5167801,46.4849324,1 7.5166386,46.4850139,1 7.5163346,46.4854944,1 + + + + #style-Unclassified + + relativeToGround + 7.5496477,46.485998,1 7.5490011,46.4856419,1 7.5478033,46.4852982,1 7.5471908,46.4852248,1 7.5459925,46.4848673,1 7.5448208,46.4848031,1 7.5437823,46.4847023,1 7.5435293,46.4846839,1 7.5433828,46.4847756,1 7.5432896,46.4849131,1 7.5430633,46.4850506,1 7.5429168,46.4850231,1 7.542757,46.4849039,1 7.5424774,46.4848764,1 7.5421313,46.4849681,1 7.5410395,46.4851881,1 7.5404803,46.4853807,1 7.5390955,46.4861049,1 7.537125,46.487095,1 7.5352743,46.4871775,1 7.5339162,46.4874433,1 7.5334102,46.4877459,1 7.533104,46.4882409,1 7.5325048,46.4887359,1 7.5320655,46.4888551,1 7.5307606,46.4887817,1 7.5290263,46.488887,1 7.5285629,46.4889495,1 7.5284723,46.4889619,1 7.5273381,46.4891146,1 7.5267159,46.4892819,1 7.525773,46.4897013,1 7.5254036,46.4897035,1 7.5237372,46.4889167,1 7.5230777,46.4888539,1 7.522833,46.4886169,1 7.5223705,46.4886012,1 7.521205,46.4883099,1 7.51934,46.4872071,1 7.5165633,46.4857592,1 7.5163346,46.4854944,1 + + + + #style-Unclassified + + relativeToGround + 7.556403,46.4906599,1 7.5564895,46.4903578,1 7.5564031,46.4900393,1 7.5564249,46.4897068,1 7.5563499,46.4894643,1 7.5561408,46.4893354,1 + + + + Zelgstrasse + #style-Unclassified + + relativeToGround + 7.5571221,46.4911702,1 7.557339,46.490971,1 7.5573284,46.4908942,1 7.5572427,46.4907622,1 7.5573095,46.4906602,1 7.5573139,46.4905062,1 7.5572902,46.4904128,1 7.557545,46.490364,1 7.5577631,46.4903969,1 7.5579974,46.4904534,1 7.5592506,46.4915649,1 7.5598352,46.4920944,1 7.5599801,46.492216,1 7.5605367,46.492528,1 7.5615826,46.4930937,1 + + + + #style-Unclassified + + relativeToGround + 7.6221411,46.5675483,1 7.6217555,46.5670542,1 7.6214032,46.5667511,1 7.6212605,46.5665937,1 7.6211744,46.5664214,1 7.6211495,46.5663947,1 7.6211127,46.5663881,1 7.6210786,46.5663881,1 7.6210545,46.5663925,1 7.6210286,46.5664097,1 7.6210092,46.5666306,1 7.6210364,46.5667281,1 7.621389,46.567218,1 7.621477,46.567386,1 7.621554,46.567623,1 7.621569,46.567826,1 7.621649,46.568184,1 7.6217257,46.5683166,1 7.6218557,46.5683782,1 7.6219111,46.5684444,1 7.6219239,46.568476,1 7.6219211,46.5684997,1 7.6219016,46.5685194,1 7.6218707,46.5685301,1 7.6218457,46.5685301,1 7.6217421,46.5684822,1 7.621518,46.568279,1 7.621345,46.568087,1 7.621152,46.567792,1 7.620757,46.567417,1 7.6206225,46.5671884,1 7.6205955,46.5671633,1 7.6205627,46.5671482,1 7.6205261,46.5671487,1 7.6204933,46.567158,1 7.6204734,46.5671814,1 7.6204702,46.5672176,1 7.6205499,46.5673038,1 7.620818,46.567734,1 7.620884,46.567894,1 7.62097,46.568114,1 7.621003,46.568253,1 7.620997,46.568398,1 7.621007,46.568515,1 7.6210788,46.5686958,1 7.6211778,46.5687891,1 7.6213252,46.5688698,1 7.6213764,46.5689228,1 7.6213615,46.5689658,1 7.6212994,46.5689787,1 7.621143,46.568912,1 7.6209424,46.5688012,1 7.620798,46.56864,1 7.620768,46.568413,1 7.620644,46.568196,1 7.6205393,46.568144,1 7.6204996,46.5682166,1 7.620621,46.568325,1 7.620622,46.568522,1 7.6205702,46.5688341,1 7.6205875,46.5689279,1 7.6206182,46.5690024,1 7.6207232,46.5690962,1 7.6208673,46.5691844,1 7.6211219,46.569248,1 7.6212305,46.5693311,1 7.6213808,46.5694812,1 7.6214434,46.5696385,1 7.6214758,46.5699093,1 7.6215649,46.5701971,1 7.6215258,46.5702147,1 7.6214789,46.5701959,1 7.62133,46.570035,1 7.620979,46.569821,1 7.620628,46.569579,1 7.6203038,46.5692579,1 7.6201751,46.5691972,1 7.6189412,46.5688229,1 7.6186735,46.5687168,1 7.618385,46.568508,1 7.617659,46.567929,1 7.617399,46.567728,1 7.617231,46.567583,1 7.617111,46.567413,1 7.616913,46.567047,1 7.61675,46.566845,1 7.616575,46.566731,1 7.616185,46.566364,1 7.6154775,46.5657796,1 7.614885,46.565334,1 7.6146833,46.5651263,1 7.614526,46.564915,1 7.613981,46.564401,1 7.613375,46.563863,1 7.613015,46.563613,1 7.612686,46.563419,1 7.6124398,46.5632504,1 7.6121,46.562995,1 7.611927,46.562877,1 7.611741,46.562768,1 7.611586,46.562717,1 7.6108173,46.5625652,1 7.610664,46.562435,1 7.610636,46.562142,1 7.610607,46.562116,1 7.610379,46.562031,1 7.610198,46.561993,1 7.609934,46.561961,1 7.609264,46.561757,1 7.6086516,46.5616698,1 7.608165,46.561607,1 7.607721,46.561471,1 7.607153,46.561323,1 7.6067556,46.5612362,1 7.606619,46.561159,1 7.60639,46.56107,1 7.605845,46.56095,1 7.60538,46.56095,1 7.605156,46.560926,1 7.6046366,46.5609521,1 7.6043472,46.5608585,1 7.604221,46.56071,1 7.6044,46.560493,1 7.604458,46.560313,1 7.604451,46.56029,1 7.604328,46.560168,1 7.604223,46.560128,1 7.603285,46.559916,1 7.603037,46.559907,1 7.602788,46.55993,1 7.602538,46.559967,1 7.602492,46.55998,1 7.602347,46.560076,1 7.602262,46.560101,1 7.602154,46.560074,1 7.601967,46.559894,1 7.601779,46.559881,1 7.601623,46.559915,1 7.60157,46.559933,1 7.601479,46.560022,1 7.600828,46.560398,1 7.6007,46.560418,1 7.600504,46.560329,1 7.6004294,46.5600943,1 7.600394,46.560076,1 7.600191,46.560136,1 7.600046,46.560166,1 7.599891,46.560195,1 7.599868,46.560182,1 7.599826,46.56007,1 7.600174,46.559822,1 7.600349,46.55977,1 7.600482,46.559689,1 7.600531,46.559525,1 7.600488,46.559365,1 7.600479,46.559289,1 7.600507,46.559148,1 7.600627,46.559022,1 7.600735,46.558966,1 7.600695,46.55883,1 7.600642,46.558768,1 7.600627,46.558706,1 7.600642,46.558575,1 7.600765,46.558387,1 7.600618,46.557904,1 7.60047,46.557573,1 7.600087,46.557016,1 7.599944,46.556679,1 7.599778,46.556393,1 7.599694,46.556124,1 7.599694,46.556038,1 7.599393,46.555577,1 7.599123,46.555283,1 7.598703,46.554963,1 7.598536,46.554827,1 7.598348,46.554712,1 7.597928,46.554526,1 7.597716,46.554373,1 7.597273,46.554,1 7.5971816,46.5538848,1 + + + + Alte Strasse + #style-Unclassified + + relativeToGround + 7.5716754,46.4967489,1 7.5718925,46.4966978,1 + + + + Alte Strasse + #style-Unclassified + + relativeToGround + 7.5718925,46.4966978,1 7.5721073,46.4966416,1 + + + + Alte Strasse + #style-Unclassified + + relativeToGround + 7.5721073,46.4966416,1 7.572546,46.4965413,1 7.5738335,46.4964527,1 7.5761938,46.4961277,1 7.5775242,46.4954778,1 7.5778322,46.4954612,1 7.5778754,46.4954761,1 + + + + Hubelstrasse + #style-Unclassified + + relativeToGround + 7.5619481,46.4908394,1 7.5618004,46.4908374,1 7.5611634,46.4903397,1 7.5610885,46.4903465,1 7.5601168,46.4909892,1 7.5592506,46.4915649,1 + + + + Ladholzstrasse + #style-Unclassified + + relativeToGround + 7.5924089,46.5310813,1 7.5922889,46.5311342,1 7.5917636,46.5312026,1 7.5913287,46.5311455,1 7.590988,46.531039,1 7.590563,46.531075,1 7.590277,46.531153,1 7.589796,46.531169,1 7.589642,46.531198,1 7.5895858,46.5312368,1 7.5896155,46.5312723,1 7.589692,46.531289,1 7.589899,46.531281,1 7.59009,46.531248,1 7.590295,46.531242,1 7.590523,46.53127,1 7.59101,46.531411,1 7.591227,46.531491,1 7.591367,46.531568,1 7.591589,46.531763,1 7.591977,46.531849,1 7.592203,46.531863,1 7.592401,46.531958,1 7.592571,46.532083,1 7.592649,46.53219,1 7.592619,46.532245,1 7.592464,46.532225,1 7.5922679,46.5321729,1 7.592029,46.532173,1 7.591679,46.532128,1 7.591436,46.532064,1 7.59126,46.531985,1 7.591029,46.531952,1 7.590802,46.531942,1 7.590574,46.531889,1 7.59041,46.531811,1 7.590343,46.531799,1 7.590284,46.531807,1 7.590247,46.5318378,1 7.590272,46.531878,1 7.590439,46.531925,1 7.590867,46.532109,1 7.591051,46.532212,1 7.591078,46.532362,1 7.591136,46.532536,1 7.591266,46.532633,1 7.591414,46.532676,1 7.591683,46.532649,1 7.591889,46.532648,1 7.591964,46.532749,1 7.591866,46.532878,1 7.5918006,46.5330041,1 7.591615,46.533166,1 7.591448,46.533263,1 7.591294,46.533385,1 7.5913,46.533524,1 7.591405,46.533697,1 7.591559,46.533871,1 7.591716,46.53403,1 7.591931,46.534138,1 7.59214,46.534193,1 7.592314,46.534298,1 7.592383,46.534445,1 7.592398,46.534745,1 7.592615,46.535027,1 7.592633,46.535216,1 7.592563,46.535792,1 7.592536,46.536167,1 7.592524,46.536254,1 7.592457,46.536343,1 7.592252,46.536439,1 7.592169,46.536464,1 7.591936,46.536594,1 7.591871,46.536668,1 7.591796,46.53691,1 7.591882,46.537032,1 7.59199,46.537252,1 7.592385,46.53746,1 7.592711,46.537952,1 7.592876,46.538212,1 7.593007,46.53888,1 7.59305,46.539226,1 7.592988,46.539398,1 7.592884,46.539444,1 7.592731,46.539389,1 7.5924,46.539142,1 7.5920484,46.538841,1 7.591704,46.53838,1 7.591495,46.538035,1 7.590946,46.537616,1 7.590806,46.53741,1 7.590666,46.537254,1 7.590498,46.536913,1 7.590428,46.536669,1 7.590426,46.536518,1 7.590467,46.536344,1 7.5906402,46.5360987,1 7.590345,46.535752,1 7.589582,46.535183,1 7.589065,46.534861,1 7.588579,46.534642,1 7.588298,46.534535,1 7.587194,46.534279,1 7.587059,46.5342825,1 7.586884,46.534294,1 7.5867784,46.5343331,1 7.5866893,46.5343725,1 + + + + Lischenstrasse + #style-Unclassified + + relativeToGround + 7.5789112,46.5019253,1 7.578915,46.5018479,1 7.5789126,46.5017241,1 7.5789513,46.5016989,1 + + + + Neuweg + #style-Unclassified + + relativeToGround + 7.5763776,46.5014193,1 7.576294,46.5014686,1 7.5765898,46.5017882,1 7.5770648,46.5028188,1 7.5776565,46.5036379,1 7.5775725,46.5038386,1 7.577659,46.504053,1 7.577975,46.504743,1 7.578067,46.505214,1 7.5785206,46.505896,1 7.57858,46.506791,1 7.578819,46.507217,1 7.579365,46.507691,1 7.579607,46.508434,1 7.579732,46.508536,1 7.5797057,46.509266,1 7.579671,46.510226,1 7.5797453,46.5109917,1 7.580007,46.511906,1 7.5802506,46.512384,1 7.5805152,46.5129738,1 7.5806365,46.5135164,1 7.580669,46.513662,1 7.580641,46.513675,1 + + + + Oeystrasse + #style-Unclassified + + relativeToGround + 7.5597987,46.4888045,1 7.5596114,46.4887086,1 7.5590977,46.4887413,1 7.55826,46.4885102,1 7.557679,46.4883499,1 7.5562602,46.4872899,1 7.555135,46.486923,1 7.5541077,46.486711,1 + + + + Rinderwaldstrasse + #style-Unclassified + + relativeToGround + 7.5920786,46.5277859,1 7.592013,46.5278814,1 7.5921113,46.5283229,1 7.5922599,46.5285511,1 7.5922599,46.5286679,1 7.592178,46.5287971,1 7.5920264,46.5289161,1 7.5918009,46.5290055,1 7.5914879,46.5290493,1 7.5913605,46.5289891,1 7.5913074,46.5288595,1 7.5915011,46.528447,1 7.5913605,46.528071,1 7.5910448,46.5275052,1 7.5906628,46.5273391,1 7.5905726,46.5270945,1 7.5902867,46.5267791,1 7.5898693,46.5266264,1 7.589723,46.5261891,1 7.5898509,46.5259126,1 7.5892239,46.525386,1 7.5887596,46.525155,1 7.58866,46.52505,1 7.5886593,46.5249033,1 7.588554,46.524815,1 7.5884977,46.5249146,1 7.5885064,46.5251373,1 7.5886429,46.5253687,1 7.5888901,46.5255442,1 7.5889148,46.5258339,1 7.5886581,46.5260421,1 7.5885021,46.5262391,1 7.5884711,46.5270452,1 7.5888648,46.527704,1 7.5888321,46.5278146,1 7.5886168,46.5279372,1 7.5884353,46.5278681,1 7.5881401,46.5275704,1 7.5876889,46.5275737,1 7.587346,46.527544,1 7.5863738,46.5272679,1 7.585991,46.5271518,1 7.5856872,46.5270452,1 7.5854035,46.5268207,1 7.5850142,46.5265989,1 7.5832724,46.5254439,1 7.5825523,46.5243282,1 7.582418,46.5243637,1 7.5824194,46.5250364,1 7.5824344,46.5254608,1 7.5826066,46.5259242,1 7.5824417,46.5258955,1 7.5812345,46.5251598,1 7.5807647,46.5249892,1 7.580322,46.5249821,1 7.5795587,46.5251441,1 7.5793111,46.5251274,1 7.5789818,46.524955,1 7.578854,46.5249327,1 7.5788147,46.5249916,1 7.578865,46.525061,1 7.5790663,46.5253114,1 7.5793669,46.5255973,1 7.5805877,46.5262635,1 7.581576,46.526976,1 7.5822447,46.5277997,1 7.5825672,46.5283477,1 7.5825694,46.5284335,1 7.582459,46.5284262,1 7.5823034,46.528276,1 7.581222,46.5276355,1 7.580843,46.52746,1 7.5805204,46.5273828,1 7.5785565,46.5276402,1 7.5774574,46.5275452,1 7.5763023,46.5271631,1 7.5755453,46.5267797,1 7.574859,46.526213,1 7.5747776,46.5259892,1 7.5748202,46.5255898,1 7.5745874,46.5254626,1 + + + + Schmittengraben + #style-Unclassified + + relativeToGround + 7.5632271,46.4930606,1 7.5633842,46.4930788,1 7.5635249,46.4931345,1 7.5635872,46.49323,1 7.5633938,46.4935302,1 7.5633565,46.4937197,1 7.5633739,46.4938029,1 7.5633923,46.4938168,1 7.5634261,46.4938155,1 7.5635035,46.4937563,1 7.5636349,46.4936571,1 7.5641212,46.4931646,1 7.5643068,46.4930036,1 7.5644847,46.4928738,1 7.5648105,46.4927291,1 7.5649245,46.4926975,1 7.565606,46.4923128,1 7.5660014,46.4922682,1 7.5662885,46.4923288,1 7.5663814,46.4923822,1 + + + + Schmittengraben + #style-Unclassified + + relativeToGround + 7.568897,46.4933261,1 7.5687413,46.4932105,1 7.5686769,46.4927008,1 7.5684103,46.4924955,1 7.5675587,46.4923767,1 7.5671661,46.4924553,1 7.5665136,46.4924594,1 7.5664566,46.49243,1 + + + + Schulgässli + #style-Unclassified + + relativeToGround + 7.5658886,46.4903417,1 7.5656473,46.4907108,1 7.5661236,46.4911985,1 7.5660442,46.491516,1 7.5656379,46.4915646,1 7.5653456,46.4914022,1 7.5648195,46.4911815,1 7.5641047,46.49108,1 7.5635494,46.4910794,1 7.563239,46.4912821,1 7.5627963,46.4915881,1 7.5623751,46.4918667,1 7.5620712,46.4920622,1 7.5613774,46.4922729,1 7.5610408,46.4922866,1 7.5605367,46.492528,1 + + + + #style-Unclassified + + relativeToGround + 7.5876833,46.5164516,1 7.5875192,46.5167316,1 7.5874183,46.5169215,1 7.587425,46.5170785,1 7.5875775,46.5172966,1 7.5876717,46.5173423,1 7.5877738,46.517356,1 7.587872,46.517324,1 7.5879397,46.5171981,1 7.5879633,46.5171897,1 7.5879931,46.5171784,1 + + + + #style-Unclassified + + relativeToGround + 7.5658886,46.4903417,1 7.565932,46.4902542,1 7.5659587,46.4900282,1 7.5658668,46.4898255,1 + + + + #style-Unclassified + + relativeToGround + 7.5987112,46.5396482,1 7.5993066,46.5400455,1 7.5999067,46.5402763,1 7.6000501,46.5404757,1 7.6000148,46.5411065,1 7.6000721,46.5411632,1 + + + + #style-Unclassified + + relativeToGround + 7.5922439,46.524217,1 7.5926503,46.5241251,1 7.5930389,46.524197,1 7.592967,46.5247871,1 7.5930735,46.5248648,1 7.593788,46.5252748,1 7.5941389,46.5256564,1 7.5940752,46.5260536,1 7.594492,46.52675,1 7.5951405,46.526862,1 7.5954175,46.5271921,1 7.5955472,46.5272157,1 7.5958773,46.5270624,1 7.5961485,46.5270919,1 7.5966466,46.5275795,1 7.5966706,46.527934,1 7.5973676,46.5279039,1 7.5980285,46.5279941,1 7.5981221,46.5280116,1 7.5983157,46.5281985,1 7.5984235,46.5283926,1 7.5984019,46.5286838,1 7.59865,46.5289211,1 7.5992216,46.5289427,1 7.5992108,46.5288456,1 7.5990167,46.5288133,1 7.5988226,46.528673,1 7.5988226,46.5282524,1 7.5990383,46.5276485,1 7.598499,46.5274112,1 7.5984235,46.5269798,1 7.5980892,46.5266562,1 7.5978843,46.5258797,1 7.5977987,46.5257423,1 7.5975919,46.5256673,1 7.5973988,46.525623,1 7.5973501,46.5255351,1 7.5974171,46.5254953,1 7.5978141,46.5255821,1 7.5987892,46.5260127,1 7.5999416,46.5266965,1 7.6009293,46.5271017,1 7.6013472,46.5274056,1 7.6016059,46.5274883,1 7.6019608,46.5274238,1 7.6029933,46.5275421,1 7.6031654,46.5274883,1 7.6032407,46.5272254,1 7.6036473,46.5268482,1 7.6042256,46.5264533,1 7.6045099,46.5265219,1 7.6043789,46.5268992,1 7.6046504,46.5272335,1 7.6051322,46.5276465,1 7.6054138,46.5281732,1 7.6052241,46.5286118,1 7.604846,46.5290789,1 7.6048905,46.5294792,1 7.6053798,46.5295682,1 7.6061361,46.5293018,1 + + + + #style-Unclassified + + relativeToGround + 7.5784191,46.501918,1 7.5784483,46.5020248,1 7.5785677,46.5021453,1 7.5789152,46.5022869,1 7.579346,46.50235,1 7.57937,46.5023535,1 7.5795731,46.5024713,1 + + + + Bonderlenstrasse + #style-Unclassified + + relativeToGround + 7.5871283,46.4860133,1 7.5870001,46.4859898,1 + + + + Bonderlenstrasse + #style-Unclassified + + relativeToGround + 7.5870001,46.4859898,1 7.5865419,46.4861414,1 7.5861778,46.4863286,1 7.5851904,46.4864815,1 7.5844927,46.4870776,1 7.5840558,46.4872544,1 7.5834347,46.4869748,1 7.5831949,46.4870435,1 7.5833797,46.487296,1 7.5831716,46.4875457,1 7.5827035,46.4876497,1 7.5815952,46.4884243,1 7.5809932,46.489163,1 7.5795925,46.490413,1 7.5793256,46.4906279,1 7.5782826,46.4914569,1 7.5773048,46.4918834,1 7.5769663,46.4921038,1 7.5767396,46.4922837,1 7.5764568,46.4926086,1 7.5762001,46.4927026,1 7.5751353,46.4926314,1 7.5748122,46.4926149,1 7.5745794,46.4926012,1 7.5737472,46.49283,1 7.5733207,46.4921331,1 7.5729843,46.4919146,1 7.5724562,46.4915977,1 7.5716564,46.4911345,1 7.5705649,46.4909123,1 7.5696679,46.4904828,1 7.5678063,46.4896289,1 7.5677844,46.4896259,1 7.5676637,46.4896332,1 7.5675205,46.4896429,1 7.5670889,46.489664,1 7.5655667,46.489498,1 + + + + Bonderlenstrasse + #style-Unclassified + + relativeToGround + 7.5871283,46.4860133,1 7.5871827,46.4860238,1 7.5880126,46.4861803,1 7.588105,46.4862347,1 + + + + Hirzbodenportstrasse + #style-Unclassified + + relativeToGround + 7.587042,46.4886078,1 7.5865782,46.4891164,1 7.5860911,46.4895304,1 7.5853664,46.4900213,1 7.5849608,46.4901754,1 7.5842203,46.490802,1 7.5836122,46.4911889,1 7.5834458,46.4913556,1 7.5830459,46.4921806,1 7.5824807,46.4927062,1 7.5818375,46.4934555,1 7.5817816,46.4938726,1 7.5819709,46.4947404,1 7.5821341,46.4953662,1 7.5823615,46.4964461,1 7.5827043,46.4971018,1 7.5829548,46.4981568,1 7.5832431,46.4984279,1 7.5840128,46.4988362,1 7.5842205,46.4990653,1 7.583876,46.4996144,1 7.5838483,46.4999466,1 + + + + #style-Unclassified + + relativeToGround + 7.5821341,46.4953662,1 7.5837231,46.4970956,1 7.5857965,46.4987966,1 7.5860984,46.499632,1 7.586803,46.4998836,1 7.5870948,46.4997729,1 7.5872156,46.499632,1 7.5874027,46.4997231,1 7.5871018,46.5006672,1 7.5871059,46.5011125,1 7.5874893,46.5015618,1 7.5883262,46.5019288,1 7.5886041,46.5022256,1 7.5892868,46.5025669,1 7.5894274,46.5030495,1 + + + + #style-Unclassified + + relativeToGround + 7.587042,46.4886078,1 7.587899,46.48825,1 7.5882043,46.4882427,1 7.5886503,46.488306,1 7.588931,46.488327,1 7.589214,46.488259,1 7.589931,46.487709,1 7.590149,46.487378,1 7.5904105,46.4872809,1 7.590543,46.487167,1 7.590873,46.487027,1 7.5911572,46.4869727,1 7.5912821,46.4869728,1 7.591414,46.486973,1 7.5915741,46.4868982,1 7.591735,46.486781,1 7.5919641,46.4868266,1 7.5918939,46.4869026,1 7.591729,46.487148,1 7.591454,46.488028,1 7.5911193,46.4884027,1 7.591501,46.48837,1 7.592061,46.487936,1 7.592171,46.488034,1 7.5922214,46.488268,1 + + + + #style-Unclassified + + relativeToGround + 7.5850387,46.5007685,1 7.5850317,46.501067,1 7.5855276,46.5016065,1 7.5865636,46.5024871,1 7.5868966,46.5026795,1 7.5872814,46.5030569,1 7.5874664,46.5030643,1 7.5877032,46.5027091,1 7.5876292,46.5023613,1 7.587681,46.5021467,1 7.5879622,46.5022947,1 7.5889464,46.5026203,1 7.5894274,46.5030495,1 7.5895162,46.5032567,1 7.5898342,46.5032999,1 7.5898564,46.5037902,1 7.589797,46.5040501,1 7.5899159,46.5043324,1 7.5898936,46.5047335,1 7.5904433,46.5055655,1 7.5911267,46.5060261,1 7.5920352,46.5070536,1 7.5932521,46.5082243,1 7.5931905,46.5089944,1 7.5935293,46.5092409,1 7.5942071,46.5092563,1 7.5947924,46.5091177,1 7.5952083,46.5091793,1 7.5953623,46.5096568,1 7.5965638,46.5102575,1 7.5971029,46.5102575,1 7.597719,46.510427,1 7.5982736,46.5103807,1 7.5993672,46.5107966,1 7.6006765,46.5105656,1 7.6007535,46.5107196,1 7.6005378,46.5111201,1 7.6005378,46.5113357,1 7.6009075,46.5113049,1 7.6012926,46.5114436,1 7.6015391,46.5118441,1 7.6017547,46.5118903,1 7.60234,46.5124756,1 7.6035107,46.5129069,1 7.6037571,46.5130917,1 7.6032796,46.5132304,1 7.6031102,46.5134922,1 7.6032334,46.514247,1 7.6018317,46.5150942,1 7.601955,46.515433,1 7.6026943,46.5160184,1 7.6027251,46.516388,1 7.6033694,46.5171449,1 7.6040652,46.5178513,1 7.6041268,46.5186061,1 7.6044657,46.5195919,1 7.6045581,46.5203929,1 7.6050202,46.5205931,1 7.6061909,46.5203775,1 7.6073923,46.5208704,1 7.6077774,46.5208242,1 7.6081625,46.5215635,1 7.607916,46.5221951,1 7.6081009,46.522688,1 7.6085014,46.5229036,1 7.6085168,46.5234273,1 7.6089327,46.5240127,1 7.608717,46.5251679,1 7.6085168,46.5255376,1 7.6085014,46.5259227,1 7.6077774,46.5264156,1 7.6077004,46.5267391,1 7.6079776,46.5270471,1 7.6093331,46.526585,1 7.610704,46.5264464,1 7.6109659,46.5266158,1 + + + + #style-Unclassified + + relativeToGround + 7.587042,46.4886078,1 7.5874305,46.4882863,1 7.587553,46.4879879,1 7.5876084,46.4877632,1 7.588218,46.4872813,1 7.5886301,46.4867943,1 7.5885713,46.4864604,1 7.5883219,46.4862734,1 7.588105,46.4862347,1 + + + + Bodenstrasse + #style-Unclassified + + relativeToGround + 7.5655667,46.489498,1 7.5651387,46.4893362,1 7.564879,46.4889907,1 7.5647194,46.4885724,1 7.5641218,46.4881265,1 7.5639912,46.4878728,1 7.5639752,46.4876249,1 7.5637244,46.487204,1 7.5634686,46.4869531,1 7.5632835,46.4867532,1 7.5630315,46.4863658,1 7.5626687,46.4859012,1 7.5625647,46.4856405,1 7.5623769,46.4854461,1 7.5621275,46.4851632,1 7.5619548,46.4849002,1 7.5619024,46.484733,1 7.5618104,46.4844506,1 7.561747,46.4840627,1 7.5614957,46.4825944,1 7.5614079,46.4812731,1 7.561295,46.4811046,1 + + + + Eselmoosgassa + #style-Unclassified + + relativeToGround + 7.5561553,46.4856415,1 7.5557635,46.4856558,1 7.5549529,46.485598,1 7.5547141,46.4854509,1 7.5544736,46.4853845,1 7.5543692,46.4854041,1 7.5542189,46.4854749,1 7.5541303,46.4854825,1 7.5540353,46.4855054,1 7.553853,46.485527,1 7.553726,46.485561,1 7.553685,46.485587,1 7.553433,46.485684,1 7.5532166,46.4856797,1 7.553134,46.485678,1 7.5529402,46.4854934,1 7.5526494,46.4852944,1 7.552326,46.484918,1 7.552172,46.4848,1 7.5520961,46.4847183,1 7.552012,46.484569,1 7.5518939,46.4844236,1 7.5517747,46.4842799,1 7.55168,46.48411,1 7.5513096,46.4837762,1 7.55115,46.483671,1 7.55098,46.483665,1 7.550794,46.483474,1 7.550622,46.483174,1 7.550476,46.483083,1 7.550345,46.483044,1 7.5502534,46.4830306,1 7.549997,46.483104,1 7.549532,46.483097,1 7.549363,46.483085,1 7.549299,46.48311,1 7.5491923,46.4831022,1 7.5491528,46.4830816,1 7.549018,46.482956,1 7.54888,46.482834,1 7.548732,46.482717,1 7.54851,46.482471,1 7.548538,46.48237,1 7.548732,46.48222,1 7.548814,46.482059,1 7.548795,46.481923,1 7.548658,46.481681,1 7.548255,46.481181,1 7.547886,46.481067,1 7.547641,46.481037,1 7.54748,46.480984,1 7.547357,46.480933,1 7.5457456,46.4805227,1 7.545419,46.480471,1 7.5450014,46.4805367,1 7.544647,46.48049,1 7.544299,46.4804,1 7.543866,46.48021,1 7.543796,46.48016,1 7.5434426,46.4799043,1 7.5434381,46.4799008,1 7.542671,46.479313,1 7.542223,46.478988,1 7.541957,46.478758,1 7.54153,46.478338,1 7.54131,46.477934,1 7.541097,46.477749,1 7.540842,46.477564,1 7.54067,46.477405,1 7.54044,46.477109,1 7.540176,46.476572,1 7.5399152,46.4762596,1 7.5393273,46.4757074,1 7.539045,46.475276,1 7.538843,46.475093,1 7.5387556,46.4750208,1 7.5384505,46.4747687,1 7.5382302,46.4743164,1 7.5381288,46.4742361,1 7.5377988,46.4741219,1 + + + + Flecklistrasse + #style-Unclassified + + relativeToGround + 7.561295,46.4811046,1 7.5614161,46.48107,1 7.5619614,46.4809337,1 7.56233,46.4809424,1 7.563085,46.4812124,1 7.5638695,46.48163,1 7.5642386,46.4822449,1 7.5651023,46.4831244,1 7.5654245,46.4839163,1 7.5657444,46.4842614,1 7.5661292,46.484468,1 7.5666203,46.4846783,1 7.5668295,46.4847669,1 7.5671931,46.484926,1 7.5674652,46.4851221,1 + + + + Fuhrenstrasse + #style-Unclassified + + relativeToGround + 7.5561553,46.4856415,1 7.5568207,46.4854527,1 7.5575266,46.4853598,1 7.5577332,46.4852617,1 7.5579355,46.484896,1 7.5580374,46.4845238,1 7.5577925,46.4836498,1 7.557817,46.4830379,1 7.5583492,46.4819039,1 + + + + Gspennweg + #style-Unclassified + + relativeToGround + 7.5638695,46.48163,1 7.564176,46.4816392,1 7.5645116,46.4816762,1 7.5650441,46.4817209,1 7.5652433,46.4817563,1 7.5655296,46.4818457,1 7.5658943,46.4819458,1 7.5661964,46.4820121,1 7.5663732,46.4820583,1 7.5665937,46.4821825,1 7.5668676,46.4822782,1 7.5670657,46.4823033,1 7.5673032,46.4822205,1 7.5673958,46.4820244,1 7.567317,46.4817693,1 7.5673377,46.4816797,1 7.5674461,46.4816661,1 7.5675411,46.481702,1 7.5676495,46.4818092,1 7.5677125,46.481968,1 7.5680791,46.4824497,1 7.5684379,46.4828004,1 7.5684393,46.4829933,1 7.5685006,46.4830787,1 7.5686817,46.4831555,1 7.569189,46.4833128,1 7.5693702,46.4834807,1 7.5695485,46.4837657,1 7.5696154,46.4840795,1 7.5697506,46.4843808,1 + + + + Hahnenmoosstrasse + #style-Unclassified + + relativeToGround + 7.5549954,46.4898085,1 7.553959,46.4889851,1 7.553271,46.4880191,1 7.552624,46.4874431,1 7.551504,46.4870491,1 7.550608,46.4864261,1 7.5496477,46.485998,1 7.549065,46.4855751,1 7.5461028,46.4845429,1 7.545601,46.4843911,1 7.5450642,46.484286,1 7.544646,46.4842091,1 7.544096,46.4842611,1 7.54335,46.4841501,1 7.543024,46.4839871,1 + + + + Kreuzgasse + #style-Unclassified + + relativeToGround + 7.5583492,46.4819039,1 7.558488,46.4819183,1 7.5589982,46.4817042,1 7.5599043,46.4812412,1 7.560118,46.4811965,1 7.561295,46.4811046,1 + + + + Lismiweg + #style-Unclassified + + relativeToGround + 7.5671931,46.484926,1 7.5670729,46.4855393,1 7.5667849,46.4857561,1 7.566834,46.4858727,1 7.5671599,46.4862692,1 + + + + #style-Unclassified + + relativeToGround + 7.5658155,46.489718,1 7.5655667,46.489498,1 + + + + #style-Unclassified + + relativeToGround + 7.5658668,46.4898255,1 7.5658155,46.489718,1 + + + + #style-Unclassified + + relativeToGround + 7.566834,46.4858727,1 7.5665666,46.4859805,1 7.566584,46.4861788,1 7.5667501,46.4863846,1 + + + + #style-Unclassified + + relativeToGround + 7.561295,46.4811046,1 7.560827,46.4806023,1 7.5607781,46.4791491,1 7.5609247,46.4781599,1 7.5622314,46.476548,1 7.5622314,46.476513,1 7.5622313,46.4764657,1 + + + + Walezubestrasse + #style-Unclassified + + relativeToGround + 7.5674652,46.4851221,1 7.5677176,46.4855439,1 7.5679169,46.4859883,1 7.5686415,46.4865509,1 7.568748,46.486657,1 7.5688367,46.4867031,1 7.5696467,46.487175,1 7.570372,46.4879376,1 7.5704705,46.4881439,1 7.5707587,46.4883279,1 7.5708117,46.4883663,1 7.5709129,46.488434,1 7.5714324,46.4889418,1 7.5718473,46.4897383,1 7.5721035,46.4900381,1 7.5722968,46.4907052,1 7.5725212,46.4911091,1 7.5728347,46.4914564,1 7.5729843,46.4919146,1 + + + + Kuonisbergliweg + #style-Unclassified + + relativeToGround + 7.5508319,46.4815667,1 7.550886,46.481604,1 7.551017,46.481662,1 7.5517182,46.4815741,1 7.551993,46.481463,1 7.552258,46.481249,1 7.552478,46.481152,1 7.5528719,46.4810715,1 7.552972,46.481051,1 7.553187,46.480938,1 7.553375,46.480816,1 + + + + Kuonisbergliweg + #style-Unclassified + + relativeToGround + 7.5508319,46.4815667,1 7.5509021,46.4815181,1 7.551101,46.481458,1 7.551329,46.481362,1 7.5514522,46.4812387,1 7.551571,46.48097,1 7.551688,46.480578,1 7.551781,46.480405,1 7.551891,46.480258,1 7.5520744,46.4800436,1 7.5524006,46.4797169,1 7.5526215,46.4795293,1 7.5529788,46.4789449,1 7.553007,46.47881,1 7.552982,46.478716,1 7.5529262,46.4786992,1 7.5527854,46.4787285,1 7.5524896,46.4790539,1 7.5523318,46.4792022,1 7.5521392,46.479332,1 7.5518842,46.4794254,1 7.551653,46.479461,1 7.551379,46.479444,1 7.551097,46.479381,1 7.550863,46.479293,1 7.550652,46.479183,1 7.5503496,46.4791053,1 7.550073,46.479072,1 7.549843,46.479024,1 7.549589,46.478927,1 7.549422,46.478836,1 7.549175,46.478782,1 7.549041,46.478774,1 7.548782,46.478793,1 7.548526,46.478898,1 7.548479,46.478902,1 7.548408,46.478825,1 7.548488,46.478774,1 7.548709,46.478677,1 7.548824,46.478546,1 7.549044,46.478409,1 7.549316,46.478319,1 7.5496528,46.4782388,1 7.550112,46.478244,1 7.550378,46.478205,1 7.55059,46.47814,1 7.550712,46.478013,1 7.550768,46.477844,1 7.5507845,46.4777077,1 7.550831,46.477322,1 7.550837,46.476938,1 7.550793,46.476547,1 7.550741,46.47618,1 7.550773,46.4757458,1 7.550804,46.475324,1 7.550842,46.47512,1 7.550847,46.474665,1 7.550828,46.474547,1 7.550455,46.473916,1 7.550251,46.473663,1 7.550181,46.473515,1 7.550134,46.473398,1 7.550109,46.473304,1 7.550087,46.473272,1 7.550023,46.47325,1 7.549945,46.473281,1 7.549934,46.473323,1 7.5499512,46.4734529,1 7.549878,46.473637,1 7.549834,46.473902,1 7.549831,46.473957,1 7.549814,46.474073,1 7.549783,46.474197,1 7.5497672,46.4743214,1 7.549727,46.474393,1 7.549487,46.474707,1 7.5493338,46.4748532,1 7.5493182,46.4748681,1 7.549299,46.4748896,1 7.5492628,46.4749301,1 7.5491141,46.4751996,1 7.548961,46.47533,1 7.548566,46.475574,1 7.548254,46.475715,1 7.548062,46.475728,1 7.547878,46.475707,1 7.547709,46.475654,1 7.547616,46.475589,1 7.547543,46.475472,1 7.547525,46.475404,1 7.547521,46.475189,1 7.547554,46.475035,1 7.547616,46.474977,1 7.547708,46.474933,1 7.547938,46.474861,1 7.548019,46.474747,1 7.5480239,46.4745659,1 7.5479003,46.4743716,1 7.5477933,46.4743096,1 + + + + Köpflisbergstrasse + #style-Unclassified + + relativeToGround + 7.457797,46.4368213,1 7.4575621,46.4367506,1 + + + + Köpflisbergstrasse + #style-Unclassified + + relativeToGround + 7.4579366,46.4368633,1 7.457797,46.4368213,1 + + + + Köpflisbergstrasse + #style-Unclassified + + relativeToGround + 7.4606355,46.4376757,1 7.4579366,46.4368633,1 + + + + Alte Strasse + #style-Unclassified + + relativeToGround + 7.5778754,46.4954761,1 7.5779939,46.49555,1 + + + + Lischenstrasse + #style-Unclassified + + relativeToGround + 7.5778518,46.4959324,1 7.5777961,46.4960149,1 7.5778017,46.4962336,1 7.5779563,46.4963871,1 7.5783668,46.4966863,1 7.5788599,46.4970856,1 7.5788853,46.4971104,1 + + + + Margeliweg + #style-Unclassified + + relativeToGround + 7.5665136,46.4924594,1 7.5665266,46.4925761,1 7.5667785,46.4927724,1 7.5669022,46.4932502,1 7.566879,46.4935537,1 7.5670434,46.4938744,1 7.5672909,46.4940688,1 7.5678329,46.4948354,1 7.5681231,46.4949172,1 7.5682468,46.4954237,1 7.5687843,46.4960333,1 7.569229,46.4964059,1 7.5693856,46.4964512,1 7.5696317,46.496726,1 7.5697815,46.4969634,1 7.5699588,46.4971615,1 7.5702091,46.4972483,1 7.5702308,46.4974098,1 + + + + Schmittengraben + #style-Unclassified + + relativeToGround + 7.5663814,46.4923822,1 7.5664566,46.49243,1 + + + + #style-Unclassified + + relativeToGround + 7.5648105,46.4927291,1 7.5650265,46.4920778,1 7.5647011,46.4919159,1 7.5645316,46.4919494,1 7.5646492,46.4920872,1 + + + + #style-Unclassified + + relativeToGround + 7.5724996,46.4938582,1 7.5721087,46.4928193,1 7.5718566,46.492604,1 7.5717708,46.4916012,1 7.5715854,46.4913815,1 7.5705649,46.4909123,1 + + + + + Pedestrian + + + Schulgässli + #style-Pedestrian + + relativeToGround + 7.5605367,46.492528,1 7.5595144,46.4930964,1 + + + + Kronenplatz + #style-Pedestrian + + relativeToGround + 7.4425957,46.4564794,1 7.4425442,46.4567004,1 7.4424533,46.457099,1 + + + + #style-Pedestrian + + relativeToGround + 7.5598352,46.4920944,1 7.5587375,46.4925106,1 + + + + + Service + + + Gartenweg + #style-Service + + relativeToGround + 7.5643603,46.4953787,1 7.5650953,46.4963004,1 + + + + Fitzerweg + #style-Service + + relativeToGround + 7.5575266,46.4853598,1 7.5577103,46.485572,1 7.5583125,46.4854727,1 7.5585068,46.4854474,1 7.5590842,46.4856691,1 7.5593687,46.4856356,1 7.5591302,46.4852633,1 + + + + Walehältiweg + #style-Service + + relativeToGround + 7.559232,46.4796016,1 7.5586532,46.4793161,1 7.5582045,46.4789538,1 7.557758,46.4790122,1 7.5577696,46.4790842,1 + + + + #style-Service + + relativeToGround + 7.566314,46.4972084,1 7.5666254,46.4971783,1 + + + + #style-Service + + relativeToGround + 7.5676532,46.4982767,1 7.5669653,46.497796,1 7.566752,46.4977228,1 + + + + #style-Service + + relativeToGround + 7.5555284,46.4878909,1 7.5553714,46.4877889,1 + + + + #style-Service + + relativeToGround + 7.5609767,46.4931868,1 7.5609149,46.493261,1 + + + + #style-Service + + relativeToGround + 7.4794227,46.5658312,1 7.4790691,46.5656171,1 7.4789409,46.56562,1 + + + + #style-Service + + relativeToGround + 7.4562979,46.441431,1 7.456496,46.4414858,1 7.456975,46.44131,1 + + + + #style-Service + + relativeToGround + 7.5028378,46.5395826,1 7.503522,46.5419711,1 + + + + #style-Service + + relativeToGround + 7.574028,46.5050557,1 7.574161,46.5050942,1 7.5740709,46.5051857,1 7.5739397,46.5051162,1 7.574028,46.5050557,1 + + + + #style-Service + + relativeToGround + 7.4438332,46.4578509,1 7.4443253,46.4578916,1 7.444375,46.45771,1 7.4444111,46.4575848,1 7.4444794,46.4574163,1 + + + + #style-Service + + relativeToGround + 7.5798959,46.4994904,1 7.580177,46.499669,1 7.580039,46.499962,1 7.580111,46.50019,1 7.5802269,46.5002556,1 + + + + #style-Service + + relativeToGround + 7.5796209,46.5015556,1 7.5800453,46.5016055,1 + + + + #style-Service + + relativeToGround + 7.577957,46.493648,1 7.578012,46.493478,1 7.578502,46.492951,1 7.5788628,46.4927947,1 7.5789815,46.4928026,1 + + + + #style-Service + + relativeToGround + 7.5823413,46.514709,1 7.5826838,46.5145655,1 7.582687,46.5143769,1 7.582609,46.514204,1 7.581843,46.513665,1 7.5816472,46.5136336,1 7.5810861,46.5130171,1 7.5802506,46.512384,1 + + + + #style-Service + + relativeToGround + 7.581843,46.513665,1 7.5821177,46.5135156,1 7.582334,46.513319,1 7.582116,46.512569,1 7.581709,46.511981,1 7.5811311,46.5115993,1 7.5809768,46.5114974,1 + + + + #style-Service + + relativeToGround + 7.5840532,46.5197587,1 7.5841373,46.5198684,1 + + + + #style-Service + + relativeToGround + 7.4760571,46.4270912,1 7.4761172,46.426896,1 7.4759369,46.4265765,1 7.476203,46.426446,1 + + + + Krummenbach + #style-Service + + relativeToGround + 7.4391746,46.4521405,1 7.4397148,46.4520287,1 7.440477,46.4520745,1 7.4409061,46.4521561,1 + + + + Krummenbach + #style-Service + + relativeToGround + 7.440477,46.4520745,1 7.440551,46.4518706,1 + + + + Krummenbach + #style-Service + + relativeToGround + 7.4409061,46.4521561,1 7.4416534,46.4523294,1 + + + + #style-Service + + relativeToGround + 7.4355302,46.454095,1 7.436013,46.4543413,1 + + + + #style-Service + + relativeToGround + 7.4461285,46.4588623,1 7.4465356,46.4580981,1 + + + + #style-Service + + relativeToGround + 7.4358702,46.4539509,1 7.4359997,46.4540404,1 + + + + #style-Service + + relativeToGround + 7.5789815,46.4928026,1 7.5790734,46.4928471,1 + + + + #style-Service + + relativeToGround + 7.5919641,46.4868266,1 7.592117,46.4869065,1 + + + + #style-Service + + relativeToGround + 7.6059609,46.5289507,1 7.6056635,46.5289968,1 + + + + #style-Service + + relativeToGround + 7.592703,46.526096,1 7.593466,46.525483,1 7.5930735,46.5248648,1 + + + + #style-Service + + relativeToGround + 7.592178,46.5287971,1 7.5922406,46.5288691,1 7.5923247,46.529017,1 7.5923721,46.5291939,1 7.5923976,46.5293461,1 + + + + #style-Service + + relativeToGround + 7.578854,46.5249327,1 7.5785473,46.524736,1 + + + + #style-Service + + relativeToGround + 7.5615433,46.5277193,1 7.561374,46.5277584,1 + + + + #style-Service + + relativeToGround + 7.5771625,46.5297081,1 7.5757467,46.5295395,1 + + + + Hahnenmoosstrasse + #style-Service + + relativeToGround + 7.5132733,46.4572948,1 7.5133883,46.4573978,1 7.5132933,46.4574818,1 7.5130673,46.4573498,1 7.5126303,46.4572888,1 7.5118483,46.4574828,1 7.5101523,46.4576848,1 7.5095283,46.4576228,1 7.5085313,46.4572698,1 7.5080333,46.4572118,1 7.5069933,46.4572868,1 7.5061813,46.4572468,1 7.5057723,46.4574628,1 7.5058393,46.4578288,1 7.5087808,46.4574575,1 7.5031103,46.4577448,1 7.5030413,46.4578388,1 7.5034833,46.4581518,1 7.5034483,46.4582518,1 7.5024893,46.4581448,1 7.5003853,46.4569498,1 7.5003883,46.4567438,1 7.5005073,46.4565828,1 7.5007043,46.4565128,1 7.5007173,46.4564108,1 7.4998403,46.4561428,1 7.4992083,46.4558578,1 7.4989973,46.4558668,1 7.4982906,46.4562011,1 7.4978551,46.455962,1 7.4974551,46.455427,1 7.4968953,46.4543278,1 7.4966573,46.4542338,1 7.4961843,46.4543818,1 7.4960133,46.4543198,1 7.4959533,46.4541388,1 7.4965103,46.4536988,1 7.4964933,46.4536218,1 7.4953603,46.4533988,1 7.494721,46.453113,1 7.494109,46.453374,1 7.493658,46.453437,1 7.492815,46.453277,1 7.4922764,46.4533365,1 7.49174,46.4534252,1 7.4912679,46.453477,1 7.4910962,46.4533809,1 7.4906778,46.453307,1 7.489497,46.453256,1 7.488978,46.45327,1 7.487949,46.453519,1 7.486012,46.453411,1 7.483716,46.45287,1 7.482943,46.452812,1 7.482147,46.452909,1 7.4814,46.453269,1 7.481139,46.453269,1 7.480528,46.453029,1 7.479955,46.452984,1 7.4796057,46.4531296,1 7.479434,46.4531739,1 7.4792896,46.45308,1 7.4792194,46.4529744,1 7.4790478,46.4528931,1 7.478841,46.453033,1 7.47874,46.453293,1 7.477474,46.453309,1 7.476344,46.453107,1 7.475372,46.453488,1 7.474272,46.453536,1 7.473791,46.453454,1 7.472928,46.452962,1 7.472723,46.452998,1 7.472366,46.453213,1 7.4716234,46.4532996,1 7.4712372,46.453307,1 7.4709689,46.4532922,1 7.4707544,46.4533439,1 7.4705183,46.4533144,1 7.4703038,46.4532183,1 + + + + #style-Service + + relativeToGround + 7.5751846,46.4916084,1 7.5749365,46.491503,1 7.5747446,46.4914272,1 + + + + #style-Service + + relativeToGround + 7.5769663,46.4921038,1 7.576441,46.491776,1 7.576364,46.491621,1 7.576362,46.491427,1 7.5763871,46.4912304,1 7.5763182,46.4911237,1 + + + + #style-Service + + relativeToGround + 7.5795925,46.490413,1 7.5794074,46.4902555,1 + + + + #style-Service + + relativeToGround + 7.5734897,46.4935177,1 7.573538,46.4934839,1 7.5735483,46.493418,1 7.573556,46.4933099,1 7.5735755,46.4932551,1 7.573676,46.4931932,1 7.5738286,46.4931243,1 7.5739371,46.4931082,1 7.574012,46.493094,1 7.5741504,46.4930548,1 7.5742015,46.4930235,1 7.5742826,46.4928928,1 7.574376,46.492803,1 7.574421,46.492763,1 7.574598,46.492717,1 7.574774,46.492685,1 7.5749459,46.492669,1 7.5751353,46.4926314,1 + + + + #style-Service + + relativeToGround + 7.574376,46.492803,1 7.5746354,46.4929073,1 7.5748091,46.4930498,1 7.5749942,46.4932398,1 7.5752138,46.4933824,1 7.5754645,46.4934693,1 7.5757087,46.4935283,1 7.5761725,46.4935343,1 7.5763535,46.4935589,1 7.5764212,46.4936211,1 7.576495,46.493829,1 7.576602,46.494096,1 7.576795,46.494181,1 7.5770454,46.4942655,1 + + + + #style-Service + + relativeToGround + 7.5849078,46.5347552,1 7.5849885,46.5347378,1 7.585183,46.534753,1 7.5855229,46.5347513,1 7.5856717,46.5347707,1 7.585943,46.5348464,1 7.586016,46.5348314,1 7.58602,46.5347903,1 7.5858345,46.5346537,1 7.5856432,46.5344437,1 7.5856581,46.5344076,1 7.5857148,46.5344078,1 7.5859478,46.5345439,1 7.5861633,46.5345952,1 7.586366,46.5346123,1 7.586484,46.534542,1 7.5866893,46.5343725,1 + + + + #style-Service + + relativeToGround + 7.587059,46.5342825,1 7.587135,46.534398,1 7.5871929,46.5344569,1 7.5873657,46.5345937,1 7.587636,46.534746,1 7.5878421,46.5348345,1 + + + + Falkiweg + #style-Service + + relativeToGround + 7.561747,46.4840627,1 7.5623648,46.4840221,1 7.5624662,46.4841424,1 7.562591,46.4842295,1 7.5630513,46.4842235,1 7.5633106,46.4842166,1 7.5634827,46.4841367,1 + + + + #style-Service + + relativeToGround + 7.5623769,46.4854461,1 7.5622912,46.4855938,1 7.5622704,46.4860729,1 7.5621787,46.4861073,1 7.5619413,46.4860499,1 7.5615122,46.4859008,1 7.5611623,46.4859065,1 7.5609581,46.485938,1 7.5608373,46.4860184,1 + + + + #style-Service + + relativeToGround + 7.5622704,46.4860729,1 7.5623863,46.4862233,1 7.5624681,46.4863847,1 + + + + #style-Service + + relativeToGround + 7.5556026,46.4788917,1 7.5555477,46.479214,1 7.5556151,46.4795353,1 7.5556149,46.4801761,1 7.5556517,46.4804555,1 7.5557955,46.4808898,1 7.5558411,46.4812561,1 7.5558839,46.4816013,1 + + + + #style-Service + + relativeToGround + 7.5548512,46.4833925,1 7.5550889,46.4838028,1 7.5552822,46.4840196,1 7.5554987,46.4843666,1 7.5556369,46.4845961,1 + + + + #style-Service + + relativeToGround + 7.5601552,46.4830974,1 7.560116,46.4826468,1 7.5614957,46.4825944,1 + + + + Falkiweg + #style-Service + + relativeToGround + 7.5630513,46.4842235,1 7.5630409,46.4844811,1 7.5628733,46.4846662,1 + + + + Birkenweg + #style-Service + + relativeToGround + 7.560472,46.4841615,1 7.5604406,46.4845196,1 7.5602381,46.4846229,1 7.5596029,46.4846037,1 + + + + Birkenweg + #style-Service + + relativeToGround + 7.5610374,46.4841326,1 7.5611142,46.4843658,1 + + + + Brunniweg + #style-Service + + relativeToGround + 7.5567689,46.4813658,1 7.5568027,46.4816531,1 7.5569895,46.4818235,1 + + + + #style-Service + + relativeToGround + 7.5566823,46.4811255,1 7.5567689,46.4813658,1 + + + + Egghausweg + #style-Service + + relativeToGround + 7.562353,46.4820061,1 7.5622413,46.4825617,1 7.5614957,46.4825944,1 + + + + #style-Service + + relativeToGround + 7.5783668,46.4966863,1 7.5779866,46.4968608,1 + + + + #style-Service + + relativeToGround + 7.5788599,46.4970856,1 7.578559,46.497615,1 7.5784905,46.4976816,1 + + + + #style-Service + + relativeToGround + 7.5804891,46.4976849,1 7.5804732,46.4976377,1 7.580323,46.4974715,1 7.580186,46.4973576,1 7.580208,46.4972438,1 7.5802253,46.4971513,1 7.5802103,46.4970622,1 7.5801714,46.4970016,1 + + + + #style-Service + + relativeToGround + 7.580573,46.518538,1 7.580476,46.5182,1 7.580281,46.517923,1 7.580272,46.517884,1 7.5803133,46.5178587,1 7.580384,46.517862,1 7.580533,46.518081,1 7.580644,46.518193,1 7.580787,46.518268,1 7.580881,46.518395,1 7.581021,46.518517,1 7.581108,46.518651,1 7.581235,46.518762,1 7.581369,46.519014,1 7.5815,46.519189,1 7.581947,46.519404,1 7.582104,46.519512,1 7.582187,46.519603,1 7.582507,46.519782,1 7.58259,46.519851,1 7.582661,46.5198661,1 7.5827033,46.5198324,1 7.582691,46.5197745,1 7.582629,46.519707,1 7.582365,46.519429,1 7.5823268,46.5191792,1 + + + + #style-Service + + relativeToGround + 7.5532166,46.4856797,1 7.553475,46.485585,1 7.553817,46.485256,1 7.553812,46.485215,1 7.5536868,46.4849435,1 + + + + #style-Service + + relativeToGround + 7.5615007,46.4706892,1 7.5613997,46.470631,1 7.5607353,46.4711441,1 7.560183,46.471455,1 7.5601093,46.4714637,1 7.560081,46.4714134,1 7.5602488,46.4711103,1 7.5603802,46.4708687,1 7.5608448,46.4705818,1 7.5616215,46.4698555,1 7.5617283,46.4695452,1 7.5616912,46.4694069,1 7.5616128,46.4693072,1 7.5614945,46.469236,1 7.5613456,46.469107,1 7.5613033,46.4689269,1 7.5615058,46.4686482,1 7.5616043,46.468364,1 7.5615151,46.4679643,1 7.5616194,46.4674144,1 7.5614199,46.4671432,1 7.5613818,46.4669685,1 7.5615864,46.4665648,1 7.5615864,46.4661599,1 7.5616687,46.4659865,1 7.5616526,46.4658976,1 7.5615269,46.4658976,1 7.5615024,46.4659185,1 7.5614258,46.4660844,1 7.560844,46.466777,1 7.5606614,46.4668815,1 7.5604401,46.4670332,1 7.56013,46.4673879,1 7.559733,46.467773,1 7.55952,46.4679289,1 7.5594277,46.467948,1 7.5593446,46.4678938,1 7.559371,46.467807,1 7.5596978,46.4670772,1 7.5597256,46.4668715,1 7.559637,46.466644,1 7.5596008,46.4663719,1 7.5595604,46.4659766,1 7.5594765,46.4656802,1 7.5595737,46.465423,1 7.559713,46.465291,1 7.5598281,46.4651508,1 7.559757,46.464943,1 7.559711,46.464879,1 7.5595499,46.4645658,1 7.5594913,46.4644275,1 7.559382,46.464309,1 7.559302,46.4642619,1 7.559013,46.464152,1 7.5589202,46.4640915,1 7.5588007,46.4639848,1 7.558761,46.463881,1 7.5586757,46.4636012,1 7.558588,46.4634941,1 7.55817,46.463211,1 7.5578807,46.4630595,1 7.5575283,46.4628252,1 7.5573015,46.4626567,1 7.5571541,46.4625209,1 7.5570332,46.4624804,1 7.5569236,46.4625235,1 7.5568688,46.4626006,1 7.5569142,46.4628709,1 7.5567834,46.4630751,1 7.5567486,46.463256,1 7.5567563,46.4635207,1 7.5567409,46.4637356,1 7.556819,46.464071,1 7.556927,46.46428,1 7.5569515,46.464646,1 7.5569489,46.4648344,1 7.5570969,46.4651071,1 7.557132,46.465248,1 7.5571481,46.4654357,1 7.5571032,46.4656238,1 7.556845,46.4661,1 7.556808,46.466241,1 7.556705,46.466662,1 7.5566013,46.4668594,1 7.556422,46.4670092,1 7.556133,46.4671663,1 7.555967,46.467302,1 7.555582,46.46755,1 7.5553411,46.4676536,1 7.555261,46.4676825,1 7.555232,46.467693,1 7.55507,46.467698,1 7.555064,46.467579,1 7.555189,46.467454,1 7.555266,46.467329,1 7.555253,46.467204,1 7.555198,46.46708,1 7.555171,46.46692,1 7.5551885,46.4667743,1 7.555143,46.466618,1 7.555043,46.466467,1 7.554902,46.46618,1 7.5547665,46.4659837,1 7.5546718,46.4658163,1 7.554613,46.465756,1 7.554335,46.465537,1 7.553879,46.46527,1 7.55364,46.465173,1 7.553503,46.465092,1 7.553265,46.464872,1 7.553112,46.464693,1 7.553025,46.464559,1 7.552984,46.464428,1 7.552966,46.464301,1 7.553023,46.464129,1 7.553046,46.463964,1 7.55301,46.463811,1 7.552957,46.463687,1 7.552835,46.46356,1 7.552786,46.463439,1 7.552644,46.462916,1 7.552526,46.462782,1 7.552398,46.462681,1 7.552202,46.462578,1 7.552022,46.462506,1 7.551384,46.462183,1 7.551265,46.46208,1 7.550822,46.461898,1 7.550655,46.461816,1 7.5505555,46.461797,1 7.550536,46.461845,1 7.5506,46.461947,1 7.550775,46.462053,1 7.550877,46.462166,1 7.550961,46.462315,1 7.551074,46.462481,1 7.551251,46.462677,1 7.551333,46.462809,1 7.551424,46.463083,1 7.55148,46.463166,1 7.5514055,46.4633987,1 7.5513305,46.4635485,1 7.551122,46.463773,1 + + + + #style-Service + + relativeToGround + 7.5601093,46.4714637,1 7.5595884,46.4717158,1 7.559275,46.47182,1 7.5589672,46.4720202,1 7.5584806,46.4723453,1 7.5581622,46.4724206,1 7.55787,46.472668,1 7.5575608,46.4728455,1 7.55748,46.472929,1 7.557326,46.473397,1 7.557232,46.473534,1 7.557135,46.473651,1 7.556988,46.473764,1 7.5568899,46.4738759,1 7.556803,46.4740459,1 7.556738,46.474206,1 7.5567085,46.4744798,1 7.5567473,46.4745861,1 7.556734,46.474669,1 7.5566457,46.4748183,1 + + + + #style-Service + + relativeToGround + 7.552982,46.478716,1 7.553269,46.477763,1 7.5534638,46.4774581,1 7.5535454,46.4773304,1 + + + + #style-Service + + relativeToGround + 7.4714196,46.4524422,1 7.4714839,46.4523756,1 7.4714947,46.4522943,1 7.4714517,46.4522278,1 7.471441,46.4519617,1 7.4716556,46.4516365,1 7.4717951,46.4512964,1 7.4718916,46.4508529,1 7.472471,46.4500102,1 7.472825,46.449308,1 7.473222,46.4487684,1 7.4733722,46.4486501,1 7.4739087,46.4484061,1 7.4745953,46.4483027,1 7.4755072,46.4481696,1 7.4758828,46.4480291,1 7.4760008,46.447933,1 7.4758077,46.4478222,1 7.4754751,46.4477556,1 7.4751532,46.4476817,1 7.4750459,46.447593,1 7.4750996,46.4475412,1 7.4751425,46.4474895,1 7.4754429,46.4474969,1 7.4758291,46.4475486,1 7.4762046,46.4475043,1 7.4766016,46.4474082,1 7.4769986,46.4473638,1 7.477299,46.4472751,1 7.477535,46.4471864,1 7.4776208,46.4469942,1 7.4776208,46.4468611,1 7.4776745,46.4466763,1 7.4779105,46.4465507,1 7.4781358,46.4465285,1 7.4782967,46.4465359,1 7.4785113,46.4464989,1 7.4786079,46.4463954,1 7.4785972,46.446255,1 7.4785113,46.446011,1 7.4784791,46.4457966,1 7.4783718,46.4455748,1 7.4783397,46.4452274,1 7.4785972,46.4445473,1 7.4788546,46.444015,1 7.4792409,46.4433053,1 7.4794233,46.443187,1 7.4797773,46.4429578,1 7.4803352,46.4426547,1 7.4806893,46.4423663,1 7.4811077,46.4422259,1 7.481569,46.4420337,1 7.4818587,46.4419893,1 7.4825346,46.4418858,1 7.4835753,46.4416936,1 7.4840367,46.441627,1 7.4842401,46.44165,1 7.4841654,46.4418562,1 7.4838543,46.4422554,1 7.4837899,46.4425512,1 7.483629,46.4430021,1 7.4835861,46.44332,1 7.4836826,46.4435566,1 7.4838436,46.4436158,1 7.4840152,46.4435418,1 7.4840796,46.4434679,1 7.4843264,46.4433718,1 7.4845302,46.4433718,1 7.4863434,46.4436084,1 7.4868691,46.4436823,1 7.4872124,46.4436971,1 7.487427,46.4436453,1 7.4875128,46.4435566,1 7.487545,46.4434975,1 7.4877703,46.4432757,1 7.4879634,46.4432535,1 7.48806,46.4432831,1 7.488178,46.4437045,1 7.4881029,46.4441333,1 7.4880493,46.4444216,1 7.4881887,46.4446286,1 7.4883282,46.4447173,1 7.4884845,46.4446966,1 7.4886072,46.4446803,1 7.4886823,46.4446064,1 7.4891972,46.4443329,1 7.4898732,46.444148,1 7.4904954,46.4440593,1 7.4909568,46.4440889,1 7.4914288,46.4441111,1 7.4917722,46.4440741,1 7.4921048,46.4440889,1 7.4923622,46.4441702,1 7.4928021,46.4442072,1 7.4933922,46.444222,1 7.4938009,46.4443235,1 7.4940467,46.4443846,1 7.4945187,46.4444733,1 7.494787,46.4444585,1 + + + + #style-Service + + relativeToGround + 7.4938009,46.4443235,1 7.4948406,46.4440224,1 + + + + #style-Service + + relativeToGround + 7.5134953,46.4566158,1 7.5133908,46.4565887,1 7.513144,46.4564409,1 7.5130367,46.4562857,1 7.5130474,46.4560714,1 7.5129509,46.4559753,1 7.5124574,46.4556575,1 7.5121891,46.4554875,1 7.5120282,46.4554431,1 7.5115025,46.4553766,1 7.5107515,46.4552509,1 7.5101292,46.4549109,1 7.5096357,46.4545192,1 7.5092709,46.4540831,1 7.5091743,46.4537948,1 7.5093889,46.4534992,1 7.5097215,46.4531665,1 7.5098181,46.4527452,1 7.5101936,46.4521243,1 7.5107622,46.4518434,1 7.5111484,46.4515995,1 7.5112879,46.4512447,1 7.5114596,46.4508234,1 7.5114167,46.4506312,1 7.5113201,46.450439,1 7.5110626,46.4502394,1 7.5107837,46.4502837,1 7.5105369,46.4504981,1 7.510215,46.4506903,1 7.5098824,46.4507273,1 7.5095928,46.4506016,1 7.5090349,46.4503503,1 7.5086057,46.4502098,1 7.5082195,46.4501803,1 7.507962,46.450269,1 7.5075757,46.4503429,1 7.5073182,46.4503207,1 7.5068247,46.4503503,1 7.5066638,46.4502985,1 7.5064472,46.4502726,1 7.5063185,46.4501986,1 7.5061253,46.4500952,1 7.5059751,46.4499621,1 7.5058571,46.4498438,1 7.5055674,46.4495408,1 7.5053529,46.4493633,1 7.5051168,46.4493338,1 7.5049023,46.4492672,1 7.5047091,46.4492081,1 7.504398,46.4491785,1 7.5041727,46.4492155,1 7.5037543,46.4492599,1 7.5035075,46.4491416,1 7.5034002,46.4490233,1 7.5033466,46.448905,1 7.5032929,46.4487794,1 7.5032071,46.448395,1 7.50325,46.4480771,1 7.5034324,46.4477001,1 7.5035612,46.4474931,1 7.5036041,46.4473896,1 7.5035826,46.4472787,1 7.5035182,46.4472639,1 7.5034002,46.4472492,1 7.5033359,46.4471752,1 7.5033359,46.4470865,1 7.5033788,46.4470126,1 7.5034217,46.4469461,1 7.5035397,46.4469609,1 7.5037006,46.4470126,1 7.5037757,46.4469756,1 7.5038508,46.4468278,1 7.5038723,46.4466873,1 7.5037757,46.4465543,1 7.5037757,46.4464582,1 7.5037543,46.4463621,1 7.5037972,46.4462586,1 7.504001,46.4461994,1 7.5043122,46.4461477,1 7.5045804,46.4462068,1 7.5048915,46.4462881,1 7.5050847,46.4463177,1 7.50531,46.4462807,1 7.5054602,46.446229,1 7.5055996,46.4462881,1 7.5057069,46.4464434,1 7.5057713,46.4466504,1 7.5057713,46.4468869,1 7.5055996,46.4470717,1 + + + + #style-Service + + relativeToGround + 7.5346943,46.4673158,1 7.5349879,46.4672014,1 7.5352239,46.4672753,1 7.5352454,46.4675413,1 7.5350737,46.4678812,1 7.5349665,46.4680881,1 7.5350523,46.4683246,1 7.5352454,46.4685759,1 7.5356746,46.4688862,1 7.5363827,46.4692409,1 7.5369191,46.4694921,1 7.5374341,46.4696252,1 7.5378632,46.4696547,1 7.5380993,46.4696252,1 7.5383353,46.469433,1 7.5383782,46.4692261,1 7.5380564,46.468295,1 7.5380993,46.4679847,1 7.5384211,46.4675856,1 7.5388718,46.4671718,1 7.5389039,46.4670462,1 7.5388503,46.466928,1 7.5386786,46.4667506,1 7.5384641,46.4663146,1 7.5384426,46.4659156,1 7.5382066,46.4653983,1 7.5380134,46.465014,1 7.5379491,46.4646741,1 7.5378847,46.4643637,1 7.5380564,46.4639794,1 7.538228,46.4636099,1 7.5383782,46.4634769,1 7.5384962,46.4634695,1 7.5385713,46.4635064,1 7.5385713,46.4636986,1 7.5383568,46.4640089,1 7.5384211,46.4642306,1 7.5385606,46.4644154,1 7.5385713,46.4647627,1 7.5386357,46.4649697,1 7.5392365,46.4656052,1 7.54076,46.467157,1 7.540878,46.4673122,1 7.5409531,46.4675856,1 7.5410819,46.4682433,1 7.5411999,46.4683837,1 7.5414038,46.4685906,1 7.5417256,46.4687236,1 7.5422406,46.4689749,1 7.5425625,46.4693591,1 7.542777,46.4697729,1 7.5427341,46.4699355,1 7.54282,46.4700981,1 7.5428843,46.4701941,1 7.5430345,46.4702311,1 7.5431204,46.4701498,1 7.5431311,46.4700463,1 7.5430775,46.4699207,1 7.5430775,46.4697729,1 7.5430775,46.4695586,1 7.5430238,46.4692409,1 7.5428951,46.4688419,1 7.542541,46.4683394,1 7.5424337,46.4679551,1 7.5423694,46.4674083,1 7.5423694,46.4669354,1 7.5421548,46.4666102,1 7.5417685,46.4663442,1 7.5415325,46.4660042,1 7.5414467,46.4657382,1 7.5415754,46.4652948,1 7.5417471,46.4648958,1 7.5421762,46.4642306,1 7.5424123,46.4639942,1 7.5425625,46.4636986,1 7.5425196,46.4634473,1 7.5424981,46.463196,1 7.5426698,46.46293,1 7.5429702,46.4626787,1 + + + + #style-Service + + relativeToGround + 7.5090349,46.4503503,1 7.5091616,46.4501765,1 7.5092153,46.4499695,1 7.5092904,46.4498586,1 7.5095586,46.4497551,1 7.5096873,46.449659,1 7.5098268,46.4495186,1 7.5099234,46.4493855,1 7.5100414,46.4492746,1 7.5102881,46.4492599,1 7.510374,46.4491933,1 7.5104705,46.4490677,1 7.5107495,46.4489124,1 7.5110177,46.4488976,1 7.5112752,46.4488829,1 7.5115112,46.4488755,1 7.5117258,46.4488976,1 7.5119618,46.4489716,1 7.512273,46.448979,1 7.5126163,46.4491046,1 7.5127772,46.4492672,1 7.5129274,46.4493929,1 7.5131098,46.4494964,1 7.5130991,46.4496295,1 7.5130669,46.4497699,1 7.5131527,46.4499325,1 7.5134424,46.450036,1 7.5136033,46.4501543,1 7.5137321,46.4503243,1 7.5138608,46.4505091,1 + + + + #style-Service + + relativeToGround + 7.5675205,46.4896429,1 7.5675839,46.4901911,1 + + + + #style-Service + + relativeToGround + 7.5613927,46.5267583,1 7.5616121,46.5269084,1 + + + + #style-Service + + relativeToGround + 7.5789126,46.5017241,1 7.5785017,46.5014825,1 + + + + #style-Service + + relativeToGround + 7.5789309,46.500105,1 7.5788346,46.4997917,1 + + + + #style-Service + + relativeToGround + 7.5791699,46.4928879,1 7.5790734,46.4928471,1 + + + + #style-Service + + relativeToGround + 7.5789309,46.500105,1 7.5786124,46.5000666,1 + + + + #style-Service + + relativeToGround + 7.5844175,46.5180817,1 7.5843919,46.5179006,1 7.5842967,46.5176599,1 7.584072,46.5172756,1 7.583998,46.516732,1 + + + + #style-Service + + relativeToGround + 7.5747518,46.4923365,1 7.5747561,46.4922525,1 7.5748319,46.4921223,1 7.5748181,46.4918,1 7.574828,46.4916949,1 7.574893,46.4916664,1 7.5750862,46.4916562,1 7.5751846,46.4916084,1 7.5752826,46.491563,1 + + + + #style-Service + + relativeToGround + 7.5856684,46.5185937,1 7.585732,46.518904,1 7.585997,46.519247,1 7.5863,46.519441,1 7.5866689,46.5195382,1 7.586981,46.519691,1 7.587645,46.520291,1 7.587742,46.520478,1 7.5876898,46.5205699,1 7.58757,46.5206516,1 7.587464,46.5207519,1 7.587397,46.520905,1 + + + + #style-Service + + relativeToGround + 7.5871749,46.5189125,1 7.5864254,46.5189694,1 7.5859396,46.5188548,1 7.5856684,46.5185937,1 7.5852648,46.5183663,1 7.5851079,46.5182339,1 7.5848608,46.5181009,1 7.5844175,46.5180817,1 7.5841229,46.5179971,1 7.5839457,46.5179174,1 7.5837708,46.5177703,1 7.5837251,46.5176286,1 7.5836592,46.5174623,1 + + + + #style-Service + + relativeToGround + 7.5802588,46.5160395,1 7.5805381,46.5164442,1 7.5811876,46.5165553,1 7.5812782,46.5165868,1 7.5820222,46.5167732,1 7.5823119,46.5170409,1 7.5823387,46.5174783,1 7.5824085,46.5176703,1 7.5828028,46.5180929,1 7.5833177,46.5182535,1 7.5835431,46.5183753,1 7.5837979,46.5183661,1 7.5840124,46.5183144,1 7.5834867,46.5181206,1 7.5833553,46.5179767,1 7.583358,46.517626,1 7.5834867,46.5174323,1 7.5836592,46.5174623,1 + + + + #style-Service + + relativeToGround + 7.6025022,46.5497569,1 7.6020138,46.5498841,1 + + + + #style-Service + + relativeToGround + 7.6122192,46.5585079,1 7.6125202,46.5582846,1 7.6125382,46.5581503,1 7.6124765,46.5580017,1 7.61231,46.557889,1 + + + + #style-Service + + relativeToGround + 7.5875485,46.5190239,1 7.5871749,46.5189125,1 + + + + #style-Service + + relativeToGround + 7.5620419,46.4912371,1 7.5627963,46.4915881,1 + + + + #style-Service + + relativeToGround + 7.5853231,46.5118698,1 7.5867416,46.5114409,1 + + + + #style-Service + + relativeToGround + 7.5808419,46.5032417,1 7.5806755,46.503651,1 7.5807632,46.5038849,1 + + + + #style-Service + + relativeToGround + 7.5833344,46.5060923,1 7.5829935,46.505959,1 7.582733,46.50693,1 + + + + #style-Service + + relativeToGround + 7.5619716,46.4909369,1 7.562116,46.4908836,1 7.5624485,46.4911228,1 + + + + #style-Service + + relativeToGround + 7.5845033,46.511303,1 7.5847716,46.5113253,1 7.5849493,46.5116193,1 + + + + #style-Service + + relativeToGround + 7.5925689,46.5257627,1 7.592703,46.526096,1 7.5926549,46.5263226,1 + + + + #style-Service + + relativeToGround + 7.5823956,46.5048989,1 7.5822898,46.5036369,1 7.5815068,46.5029364,1 + + + + #style-Service + + relativeToGround + 7.5890023,46.5205153,1 7.5884929,46.5201995,1 7.5883311,46.5199786,1 7.5882242,46.5196358,1 7.5875485,46.5190239,1 + + + + #style-Service + + relativeToGround + 7.5709768,46.4961208,1 7.5710612,46.4963304,1 7.5713268,46.4965265,1 7.5716017,46.497285,1 7.5720307,46.4977428,1 + + + + #style-Service + + relativeToGround + 7.588105,46.4862347,1 7.5882589,46.4861244,1 + + + + Brunniweg + #style-Service + + relativeToGround + 7.5583492,46.4819039,1 7.55795,46.481785,1 7.5573748,46.4816562,1 7.5568027,46.4816531,1 + + + + Fuhrenstrasse + #style-Service + + relativeToGround + 7.5535228,46.4865284,1 7.5540973,46.4860504,1 7.5553724,46.4858594,1 7.5555516,46.4857964,1 7.555751,46.4857822,1 7.5561161,46.4856628,1 7.5561553,46.4856415,1 + + + + Rörliweg + #style-Service + + relativeToGround + 7.5666203,46.4846783,1 7.5665448,46.4847291,1 7.5656341,46.4848814,1 7.5658042,46.4853983,1 + + + + #style-Service + + relativeToGround + 7.5589982,46.4817042,1 7.5590716,46.4818306,1 + + + + #style-Service + + relativeToGround + 7.566311,46.4842938,1 7.5661292,46.484468,1 + + + + #style-Service + + relativeToGround + 7.5668295,46.4847669,1 7.5669459,46.4845543,1 7.566928,46.4842878,1 7.566311,46.4842938,1 7.5661779,46.4842949,1 + + + + #style-Service + + relativeToGround + 7.5616769,46.4873407,1 7.5618759,46.4873603,1 7.562336,46.4875068,1 7.5629211,46.4878619,1 7.5633173,46.488305,1 7.5638849,46.4885749,1 7.5651387,46.4893362,1 + + + + Strubelweg + #style-Service + + relativeToGround + 7.5561553,46.4856415,1 7.5560704,46.4854118,1 7.5559655,46.4852385,1 7.5558801,46.4850392,1 7.5558516,46.4849379,1 7.5556369,46.4845961,1 7.5557556,46.4835758,1 7.5556465,46.4832228,1 7.5556302,46.482438,1 7.5556902,46.4823253,1 7.5559629,46.481946,1 7.5559405,46.4817142,1 7.5558839,46.4816013,1 + + + + Lärcheweg + #style-Service + + relativeToGround + 7.5611634,46.4903397,1 7.5610451,46.4902373,1 + + + + #style-Service + + relativeToGround + 7.5737082,46.4907245,1 7.5735328,46.490616,1 7.5733673,46.4903853,1 7.5733062,46.4902442,1 7.5732825,46.4900712,1 7.5733348,46.4898921,1 7.5733339,46.4894668,1 7.5732422,46.4892976,1 7.5730973,46.4891714,1 7.5728372,46.4890235,1 7.5726529,46.489033,1 + + + + #style-Service + + relativeToGround + 7.5696679,46.4904828,1 7.5696337,46.4903928,1 7.5694953,46.4902536,1 7.5693484,46.4900982,1 7.5692716,46.489935,1 7.5692449,46.4897418,1 7.569231,46.4895346,1 7.5691648,46.4893786,1 7.5689467,46.4891493,1 7.5688378,46.4889221,1 7.5689846,46.4887416,1 7.5687855,46.4885286,1 7.5687156,46.4884763,1 7.5686163,46.4882459,1 7.5685316,46.4880573,1 7.5684612,46.487926,1 7.5683453,46.4878612,1 + + + + #style-Service + + relativeToGround + 7.5739091,46.4841923,1 7.5735123,46.4842222,1 + + + + #style-Service + + relativeToGround + 7.5707587,46.4883279,1 7.5714861,46.4882473,1 + + + + #style-Service + + relativeToGround + 7.5737649,46.4942215,1 7.5729909,46.4941247,1 7.5724996,46.4938582,1 + + + + #style-Service + + relativeToGround + 7.5686415,46.4865509,1 7.5685948,46.4864379,1 7.5685481,46.4863398,1 + + + + #style-Service + + relativeToGround + 7.5687156,46.4884763,1 7.5686259,46.4885828,1 7.5686407,46.4886975,1 7.5688378,46.4889221,1 + + + + #style-Service + + relativeToGround + 7.5601168,46.4909892,1 7.5595847,46.4906371,1 7.5594989,46.4906215,1 7.5593649,46.490633,1 + + + + #style-Service + + relativeToGround + 7.5708117,46.4883663,1 7.5710165,46.488705,1 7.5710179,46.4888509,1 7.5708758,46.4889223,1 7.5708124,46.4889286,1 7.5707761,46.4888902,1 + + + + #style-Service + + relativeToGround + 7.5740561,46.4844231,1 7.5739091,46.4841923,1 7.5738582,46.4838387,1 7.5738109,46.4836506,1 7.5736241,46.4835863,1 7.5733468,46.4835758,1 7.5730751,46.4834722,1 + + + + #style-Service + + relativeToGround + 7.5778322,46.4954612,1 7.5774594,46.4953694,1 7.57696,46.4953792,1 7.5765186,46.4953534,1 7.5761855,46.4952056,1 7.5756624,46.4951092,1 7.5748615,46.4951854,1 + + + + #style-Service + + relativeToGround + 7.568748,46.486657,1 7.5687618,46.4868008,1 7.5686633,46.4868728,1 7.5683637,46.4869243,1 7.5682553,46.4869895,1 7.5682593,46.4871482,1 7.5683489,46.4873599,1 7.5683539,46.4874461,1 + + + + + + Casings + + Motorway_Casing + + + + Motorway_Link_Casing + + + + Trunk_Casing + + + + Trunk_Link_Casing + + + + + + diff --git a/float-no-zero/examples/data/kml/2012_Earthquakes_Mag5.kml b/float-no-zero/examples/data/kml/2012_Earthquakes_Mag5.kml new file mode 100644 index 0000000000..7a8466f5cb --- /dev/null +++ b/float-no-zero/examples/data/kml/2012_Earthquakes_Mag5.kml @@ -0,0 +1,10758 @@ + + + + 2012 Earthquakes, Magnitude 5 + + U.S. Geological Survey + + + + Magnitude 5 + + M 5.9 - 2012 Jan 15, SOUTH SHETLAND ISLANDS + 5.9 + + -56.072,-60.975,0 + + + + M 5.9 - 2012 Jan 19, OFF W. COAST OF S. ISLAND, N.Z. + 5.9 + + 165.778,-46.686,0 + + + + M 5.9 - 2012 Jan 28, KERMADEC ISLANDS, NEW ZEALAND + 5.9 + + -177.386,-29.43,0 + + + + M 5.9 - 2012 Feb 9, MACQUARIE ISLAND REGION + 5.9 + + 157.837,-58.312,0 + + + + M 5.9 - 2012 Feb 10, FIJI REGION + 5.9 + + -178.549,-17.968,0 + + + + M 5.9 - 2012 Feb 13, COSTA RICA + 5.9 + + -84.121,9.183,0 + + + + M 5.9 - 2012 Feb 26, TAIWAN + 5.9 + + 120.891,22.661,0 + + + + M 5.9 - 2012 Mar 8, SOUTHERN XINJIANG, CHINA + 5.9 + + 81.307,39.383,0 + + + + M 5.9 - 2012 Mar 19, SAMOA ISLANDS REGION + 5.9 + + -175.702,-14.621,0 + + + + M 5.9 - 2012 Apr 11, NORTH INDIAN OCEAN + 5.9 + + 89.441,2.199,0 + + + + M 5.9 - 2012 Apr 20, OFF W COAST OF NORTHERN SUMATRA + 5.9 + + 93.821,3.269,0 + + + + M 5.9 - 2012 May 10, EASTER ISLAND REGION + 5.9 + + -112.587,-28.73,0 + + + + M 5.9 - 2012 May 19, OFF EAST COAST OF HONSHU, JAPAN + 5.9 + + 143.311,39.665,0 + + + + M 5.9 - 2012 May 23, HOKKAIDO, JAPAN REGION + 5.9 + + 142.082,41.335,0 + + + + M 5.9 - 2012 May 23, WESTERN INDIAN-ANTARCTIC RIDGE + 5.9 + + 139.536,-50.352,0 + + + + M 5.9 - 2012 May 28, TONGA + 5.9 + + -175.976,-19.962,0 + + + + M 5.9 - 2012 Jun 2, SALTA, ARGENTINA + 5.9 + + -63.555,-22.059,0 + + + + M 5.9 - 2012 Jun 4, JAVA, INDONESIA + 5.9 + + 106.371,-7.692,0 + + + + M 5.9 - 2012 Jun 9, TAIWAN REGION + 5.9 + + 122.248,24.572,0 + + + + M 5.9 - 2012 Jun 16, LUZON, PHILIPPINES + 5.9 + + 119.563,15.593,0 + + + + M 5.9 - 2012 Jul 18, PACIFIC-ANTARCTIC RIDGE + 5.9 + + -128.893,-55.661,0 + + + + M 5.9 - 2012 Jul 18, FIJI REGION + 5.9 + + -178.508,-20.872,0 + + + + M 5.9 - 2012 Jul 21, VANUATU REGION + 5.9 + + 173.789,-19.19,0 + + + + M 5.9 - 2012 Jul 29, OFFSHORE GUATEMALA + 5.9 + + -92.294,14.191,0 + + + + M 5.9 - 2012 Aug 8, FIJI + 5.9 + + 178.062,-16.02,0 + + + + M 5.9 - 2012 Aug 25, HOKKAIDO, JAPAN REGION + 5.9 + + 142.913,42.419,0 + + + + M 5.9 - 2012 Sep 9, KURIL ISLANDS + 5.9 + + 155.75,49.247,0 + + + + M 5.9 - 2012 Sep 11, SOUTH OF MARIANA ISLANDS + 5.9 + + 143.218,11.838,0 + + + + M 5.9 - 2012 Oct 8, GULF OF CALIFORNIA + 5.9 + + -109.574,25.127,0 + + + + M 5.9 - 2012 Oct 18, WEST OF MACQUARIE ISLAND + 5.9 + + 144.006,-54.217,0 + + + + M 5.9 - 2012 Oct 23, IZU ISLANDS, JAPAN REGION + 5.9 + + 139.251,29.057,0 + + + + M 5.9 - 2012 Nov 15, BISMARCK SEA + 5.9 + + 148.27,-3.109,0 + + + + M 5.9 - 2012 Nov 17, TONGA REGION + 5.9 + + -172.32,-18.381,0 + + + + M 5.9 - 2012 Nov 21, LIBERTADOR O'HIGGINS, CHILE + 5.9 + + -71.868,-33.939,0 + + + + M 5.9 - 2012 Nov 22, SALTA, ARGENTINA + 5.9 + + -63.571,-22.742,0 + + + + M 5.9 - 2012 Nov 29, NEAR N COAST OF NEW GUINEA, PNG. + 5.9 + + 145.562,-3.423,0 + + + + M 5.9 - 2012 Dec 17, CENTRAL EAST PACIFIC RISE + 5.9 + + -104.495,-4.178,0 + + + + M 5.9 - 2012 Dec 27, OFFSHORE MAULE, CHILE + 5.9 + + -73.255,-35.783,0 + + + + M 5.8 - 2012 Jan 14, BABUYAN ISL REGION, PHILIPPINES + 5.8 + + 121.156,19.202,0 + + + + M 5.8 - 2012 Jan 18, MOLUCCA SEA + 5.8 + + 126.829,-0.877,0 + + + + M 5.8 - 2012 Feb 4, TONGA + 5.8 + + -174.035,-20.536,0 + + + + M 5.8 - 2012 Feb 6, NEGROS- CEBU REG, PHILIPPINES + 5.8 + + 123.08,9.821,0 + + + + M 5.8 - 2012 Feb 14, NEAR EAST COAST OF HONSHU, JAPAN + 5.8 + + 141.386,36.214,0 + + + + M 5.8 - 2012 Feb 15, OFF COAST OF OREGON + 5.8 + + -127.518,43.625,0 + + + + M 5.8 - 2012 Feb 16, MAURITIUS - REUNION REGION + 5.8 + + 65.405,-17.839,0 + + + + M 5.8 - 2012 Mar 16, LEYTE, PHILIPPINES + 5.8 + + 125.633,10.037,0 + + + + M 5.8 - 2012 Mar 17, SOUTHERN EAST PACIFIC RISE + 5.8 + + -107.644,-34.905,0 + + + + M 5.8 - 2012 Apr 10, NORTH OF ASCENSION ISLAND + 5.8 + + -13.972,-1.261,0 + + + + M 5.8 - 2012 Apr 11, NORTH INDIAN OCEAN + 5.8 + + 91.748,1.271,0 + + + + M 5.8 - 2012 Apr 11, NORTH INDIAN OCEAN + 5.8 + + 89.685,1.841,0 + + + + M 5.8 - 2012 Apr 14, SUNDA STRAIT, INDONESIA + 5.8 + + 105.457,-6.81,0 + + + + M 5.8 - 2012 Apr 16, SULAWESI, INDONESIA + 5.8 + + 121.855,-2.64,0 + + + + M 5.8 - 2012 Apr 16, SOUTHERN GREECE + 5.8 + + 21.475,36.632,0 + + + + M 5.8 - 2012 Apr 20, OFF W COAST OF NORTHERN SUMATRA + 5.8 + + 93.36,2.158,0 + + + + M 5.8 - 2012 Apr 29, NEAR EAST COAST OF HONSHU, JAPAN + 5.8 + + 140.349,35.596,0 + + + + M 5.8 - 2012 May 2, WEST OF MACQUARIE ISLAND + 5.8 + + 143.836,-54.565,0 + + + + M 5.8 - 2012 May 19, ANTOFAGASTA, CHILE + 5.8 + + -70.562,-25.729,0 + + + + M 5.8 - 2012 May 29, SOUTH OF FIJI ISLANDS + 5.8 + + -179.61,-22.13,0 + + + + M 5.8 - 2012 May 29, NORTHERN ITALY + 5.8 + + 11.086,44.851,0 + + + + M 5.8 - 2012 Jun 1, NEAR N COAST OF PAPUA, INDONESIA + 5.8 + + 133.269,-0.72,0 + + + + M 5.8 - 2012 Jun 7, FIJI REGION + 5.8 + + -176.34,-20.192,0 + + + + M 5.8 - 2012 Jun 29, SOUTH ATLANTIC OCEAN + 5.8 + + -9.663,-24.747,0 + + + + M 5.8 - 2012 Jul 12, KURIL ISLANDS + 5.8 + + 151.665,45.452,0 + + + + M 5.8 - 2012 Jul 20, KURIL ISLANDS + 5.8 + + 156.132,49.354,0 + + + + M 5.8 - 2012 Aug 5, FIJI REGION + 5.8 + + -178.358,-21.15,0 + + + + M 5.8 - 2012 Aug 16, SOUTHEAST OF EASTER ISLAND + 5.8 + + -98.905,-36.429,0 + + + + M 5.8 - 2012 Aug 18, HALMAHERA, INDONESIA + 5.8 + + 128.697,2.645,0 + + + + M 5.8 - 2012 Sep 3, MORO GULF, MINDANAO, PHILIPPINES + 5.8 + + 123.875,6.61,0 + + + + M 5.8 - 2012 Sep 27, SOLOMON ISLANDS + 5.8 + + 157.456,-8.838,0 + + + + M 5.8 - 2012 Oct 14, SOLOMON ISLANDS + 5.8 + + 156.048,-7.145,0 + + + + M 5.8 - 2012 Oct 23, SOUTHEAST OF LOYALTY ISLANDS + 5.8 + + 171.691,-22.312,0 + + + + M 5.8 - 2012 Nov 11, MYANMAR + 5.8 + + 95.832,22.72,0 + + + + M 5.8 - 2012 Dec 4, SOUTHERN ALASKA + 5.8 + + -150.76,61.237,0 + + + + M 5.8 - 2012 Dec 5, EASTERN IRAN + 5.8 + + 59.571,33.506,0 + + + + M 5.8 - 2012 Dec 14, FIJI REGION + 5.8 + + -178.186,-15.307,0 + + + + M 5.7 - 2012 Jan 7, KERMADEC ISLANDS REGION + 5.7 + + -176.935,-28.613,0 + + + + M 5.7 - 2012 Jan 17, SAMAR, PHILIPPINES + 5.7 + + 125.837,11.177,0 + + + + M 5.7 - 2012 Jan 19, SANTA CRUZ ISLANDS + 5.7 + + 165.57,-10.966,0 + + + + M 5.7 - 2012 Jan 20, FLORES REGION, INDONESIA + 5.7 + + 119.701,-8.406,0 + + + + M 5.7 - 2012 Feb 3, VANUATU + 5.7 + + 167.187,-17.463,0 + + + + M 5.7 - 2012 Feb 10, NEAR N COAST OF PAPUA, INDONESIA + 5.7 + + 132.691,-0.324,0 + + + + M 5.7 - 2012 Mar 4, SOUTHEAST OF LOYALTY ISLANDS + 5.7 + + 169.769,-21.529,0 + + + + M 5.7 - 2012 Mar 25, PACIFIC-ANTARCTIC RIDGE + 5.7 + + -135.923,-54.576,0 + + + + M 5.7 - 2012 Apr 1, EASTERN HONSHU, JAPAN + 5.7 + + 140.957,37.116,0 + + + + M 5.7 - 2012 Apr 1, NEW IRELAND REGION, P.N.G. + 5.7 + + 153.427,-4.516,0 + + + + M 5.7 - 2012 Apr 11, NORTH INDIAN OCEAN + 5.7 + + 89.544,2.913,0 + + + + M 5.7 - 2012 Apr 13, NEAR EAST COAST OF HONSHU, JAPAN + 5.7 + + 141.152,36.988,0 + + + + M 5.7 - 2012 Apr 20, OFF W COAST OF NORTHERN SUMATRA + 5.7 + + 93.853,3.256,0 + + + + M 5.7 - 2012 Apr 21, SOUTHERN MID-ATLANTIC RIDGE + 5.7 + + -16.181,-35.229,0 + + + + M 5.7 - 2012 Apr 23, MOLUCCA SEA + 5.7 + + 125.293,0.374,0 + + + + M 5.7 - 2012 Apr 25, NICOBAR ISLANDS, INDIA REGION + 5.7 + + 93.945,9.011,0 + + + + M 5.7 - 2012 Apr 29, OFF W COAST OF NORTHERN SUMATRA + 5.7 + + 94.509,2.704,0 + + + + M 5.7 - 2012 Apr 30, NORTH INDIAN OCEAN + 5.7 + + 89.598,1.757,0 + + + + M 5.7 - 2012 May 1, GUERRERO, MEXICO + 5.7 + + -101.085,18.251,0 + + + + M 5.7 - 2012 May 5, TONGA + 5.7 + + -174.227,-21.477,0 + + + + M 5.7 - 2012 May 12, TAJIKISTAN + 5.7 + + 70.354,38.612,0 + + + + M 5.7 - 2012 May 16, NEW BRITAIN REGION, P.N.G. + 5.7 + + 149.711,-5.504,0 + + + + M 5.7 - 2012 Jun 4, FIJI REGION + 5.7 + + -177.919,-15.279,0 + + + + M 5.7 - 2012 Jun 11, HINDU KUSH REGION, AFGHANISTAN + 5.7 + + 69.351,36.023,0 + + + + M 5.7 - 2012 Jun 15, MINDANAO, PHILIPPINES + 5.7 + + 126.354,5.719,0 + + + + M 5.7 - 2012 Jun 17, SOLOMON ISLANDS + 5.7 + + 160.356,-8.511,0 + + + + M 5.7 - 2012 Jun 22, MACQUARIE ISLAND REGION + 5.7 + + 158.79,-54.36,0 + + + + M 5.7 - 2012 Jun 27, EL SALVADOR + 5.7 + + -89.967,13.834,0 + + + + M 5.7 - 2012 Jul 2, NEAR COAST OF CENTRAL PERU + 5.7 + + -75.598,-14.423,0 + + + + M 5.7 - 2012 Jul 7, NEW IRELAND REGION, P.N.G. + 5.7 + + 153.296,-4.651,0 + + + + M 5.7 - 2012 Jul 11, KURIL ISLANDS + 5.7 + + 151.424,45.401,0 + + + + M 5.7 - 2012 Jul 11, SOUTH OF FIJI ISLANDS + 5.7 + + -177.362,-26.051,0 + + + + M 5.7 - 2012 Jul 12, HINDU KUSH REGION, AFGHANISTAN + 5.7 + + 70.906,36.527,0 + + + + M 5.7 - 2012 Jul 29, MYANMAR + 5.7 + + 94.299,22.935,0 + + + + M 5.7 - 2012 Aug 18, VANUATU REGION + 5.7 + + 172.379,-13.504,0 + + + + M 5.7 - 2012 Aug 18, TONGA + 5.7 + + -173.042,-15.598,0 + + + + M 5.7 - 2012 Aug 24, KERMADEC ISLANDS REGION + 5.7 + + -176.807,-27.311,0 + + + + M 5.7 - 2012 Sep 3, MINDANAO, PHILIPPINES + 5.7 + + 125.044,7.905,0 + + + + M 5.7 - 2012 Sep 6, CENTRAL EAST PACIFIC RISE + 5.7 + + -105.891,-4.6,0 + + + + M 5.7 - 2012 Sep 8, MARIANA ISLANDS REGION + 5.7 + + 145.923,21.527,0 + + + + M 5.7 - 2012 Sep 8, COSTA RICA + 5.7 + + -85.323,10.082,0 + + + + M 5.7 - 2012 Sep 15, SOUTH OF JAVA, INDONESIA + 5.7 + + 113.865,-10.732,0 + + + + M 5.7 - 2012 Sep 20, FIJI REGION + 5.7 + + -178.513,-20.757,0 + + + + M 5.7 - 2012 Oct 3, KEPULAUAN BATU, INDONESIA + 5.7 + + 97.672,-0.429,0 + + + + M 5.7 - 2012 Oct 5, NORTHERN MID-ATLANTIC RIDGE + 5.7 + + -46.457,17.479,0 + + + + M 5.7 - 2012 Oct 8, ANTOFAGASTA, CHILE + 5.7 + + -68.165,-21.725,0 + + + + M 5.7 - 2012 Oct 14, KURIL ISLANDS + 5.7 + + 154.428,48.308,0 + + + + M 5.7 - 2012 Oct 29, MOLUCCA SEA + 5.7 + + 125.185,-0.142,0 + + + + M 5.7 - 2012 Nov 1, JAVA, INDONESIA + 5.7 + + 107.529,-6.762,0 + + + + M 5.7 - 2012 Nov 6, MINAHASA, SULAWESI, INDONESIA + 5.7 + + 122.2,1.374,0 + + + + M 5.7 - 2012 Nov 7, OFFSHORE GUATEMALA + 5.7 + + -92.156,13.849,0 + + + + M 5.7 - 2012 Nov 14, NEGROS, PHILIPPINES + 5.7 + + 122.472,9.982,0 + + + + M 5.7 - 2012 Nov 27, SERAM, INDONESIA + 5.7 + + 129.219,-2.952,0 + + + + M 5.7 - 2012 Nov 30, TONGA + 5.7 + + -175.595,-18.824,0 + + + + M 5.7 - 2012 Dec 7, EASTERN NEW GUINEA REG., P.N.G. + 5.7 + + 146.954,-7.661,0 + + + + M 5.7 - 2012 Dec 17, CENTRAL EAST PACIFIC RISE + 5.7 + + -104.177,-4.028,0 + + + + M 5.7 - 2012 Dec 23, BLACK SEA, OFFSHORE GEORGIA + 5.7 + + 41.075,42.42,0 + + + + M 5.7 - 2012 Dec 29, BISMARCK SEA + 5.7 + + 148.899,-3.563,0 + + + + M 5.6 - 2012 Jan 5, TONGA + 5.6 + + -173.543,-17.691,0 + + + + M 5.6 - 2012 Jan 13, SOUTH SANDWICH ISLANDS REGION + 5.6 + + -27.073,-60.548,0 + + + + M 5.6 - 2012 Jan 16, SOUTH SHETLAND ISLANDS + 5.6 + + -56.095,-60.752,0 + + + + M 5.6 - 2012 Jan 17, COQUIMBO, CHILE + 5.6 + + -71.499,-31.655,0 + + + + M 5.6 - 2012 Jan 28, NEAR EAST COAST OF HONSHU, JAPAN + 5.6 + + 142.211,40.177,0 + + + + M 5.6 - 2012 Jan 28, SOUTHERN EAST PACIFIC RISE + 5.6 + + -110.517,-36.793,0 + + + + M 5.6 - 2012 Feb 2, NEW BRITAIN REGION, P.N.G. + 5.6 + + 149.774,-6.563,0 + + + + M 5.6 - 2012 Feb 2, NEW BRITAIN REGION, P.N.G. + 5.6 + + 149.718,-6.586,0 + + + + M 5.6 - 2012 Feb 4, SAMAR, PHILIPPINES + 5.6 + + 125.754,11.872,0 + + + + M 5.6 - 2012 Feb 4, VANCOUVER ISLAND, CANADA REGION + 5.6 + + -127.906,48.887,0 + + + + M 5.6 - 2012 Feb 6, NEGROS- CEBU REG, PHILIPPINES + 5.6 + + 123.227,10.092,0 + + + + M 5.6 - 2012 Feb 11, OFFSHORE BIO-BIO, CHILE + 5.6 + + -73.884,-37.456,0 + + + + M 5.6 - 2012 Feb 13, NORTHERN CALIFORNIA + 5.6 + + -123.79,41.143,0 + + + + M 5.6 - 2012 Feb 20, OFFSHORE CHIAPAS, MEXICO + 5.6 + + -92.779,14.276,0 + + + + M 5.6 - 2012 Feb 26, SOUTH OF KERMADEC ISLANDS + 5.6 + + -177.73,-32.495,0 + + + + M 5.6 - 2012 Feb 28, BONIN ISLANDS, JAPAN REGION + 5.6 + + 139.391,28.2,0 + + + + M 5.6 - 2012 Feb 29, NEAR EAST COAST OF HONSHU, JAPAN + 5.6 + + 141.001,35.2,0 + + + + M 5.6 - 2012 Mar 5, MASBATE REGION, PHILIPPINES + 5.6 + + 123.7,12.354,0 + + + + M 5.6 - 2012 Mar 7, PAPUA, INDONESIA + 5.6 + + 138.888,-2.814,0 + + + + M 5.6 - 2012 Mar 12, NORTHWESTERN KASHMIR + 5.6 + + 73.152,36.741,0 + + + + M 5.6 - 2012 Mar 14, OFF EAST COAST OF HONSHU, JAPAN + 5.6 + + 144.806,40.755,0 + + + + M 5.6 - 2012 Mar 26, SOUTHWEST INDIAN RIDGE + 5.6 + + 60.653,-30.04,0 + + + + M 5.6 - 2012 Apr 14, KURIL ISLANDS + 5.6 + + 155.651,49.38,0 + + + + M 5.6 - 2012 Apr 17, KERMADEC ISLANDS REGION + 5.6 + + -177.236,-31.894,0 + + + + M 5.6 - 2012 Apr 22, WEST OF MACQUARIE ISLAND + 5.6 + + 140.29,-52.867,0 + + + + M 5.6 - 2012 Apr 23, KURIL ISLANDS + 5.6 + + 154.739,48.397,0 + + + + M 5.6 - 2012 Apr 24, CARLSBERG RIDGE + 5.6 + + 61.511,5.649,0 + + + + M 5.6 - 2012 Apr 24, SOUTH OF TONGA + 5.6 + + -175.95,-24.228,0 + + + + M 5.6 - 2012 Apr 26, OFF W COAST OF NORTHERN SUMATRA + 5.6 + + 94.459,2.696,0 + + + + M 5.6 - 2012 Apr 28, NEW BRITAIN REGION, P.N.G. + 5.6 + + 152.11,-5.328,0 + + + + M 5.6 - 2012 Apr 29, NEAR EAST COAST OF HONSHU, JAPAN + 5.6 + + 142.037,39.745,0 + + + + M 5.6 - 2012 Apr 30, OFFSHORE COQUIMBO, CHILE + 5.6 + + -71.46,-29.868,0 + + + + M 5.6 - 2012 May 6, CENTRAL PERU + 5.6 + + -75.801,-13.82,0 + + + + M 5.6 - 2012 May 7, AZERBAIJAN + 5.6 + + 46.789,41.549,0 + + + + M 5.6 - 2012 May 20, OFF EAST COAST OF HONSHU, JAPAN + 5.6 + + 143.248,39.548,0 + + + + M 5.6 - 2012 May 22, BULGARIA + 5.6 + + 22.968,42.645,0 + + + + M 5.6 - 2012 May 29, KOMANDORSKIYE OSTROVA REGION + 5.6 + + 168.925,54.368,0 + + + + M 5.6 - 2012 May 31, NEAR N COAST OF PAPUA, INDONESIA + 5.6 + + 133.181,-0.902,0 + + + + M 5.6 - 2012 Jun 19, NEAR ISLANDS, ALEUTIAN ISLANDS + 5.6 + + 171.701,53.351,0 + + + + M 5.6 - 2012 Jul 1, MYANMAR-INDIA BORDER REGION + 5.6 + + 94.696,25.592,0 + + + + M 5.6 - 2012 Jul 9, EASTERN MEDITERRANEAN SEA + 5.6 + + 28.919,35.604,0 + + + + M 5.6 - 2012 Jul 9, RYUKYU ISLANDS, JAPAN + 5.6 + + 130.099,29.381,0 + + + + M 5.6 - 2012 Jul 16, NEAR N COAST OF PAPUA, INDONESIA + 5.6 + + 137.053,-1.296,0 + + + + M 5.6 - 2012 Jul 19, HINDU KUSH REGION, AFGHANISTAN + 5.6 + + 71.375,37.248,0 + + + + M 5.6 - 2012 Jul 20, FIJI REGION + 5.6 + + -179.287,-21.222,0 + + + + M 5.6 - 2012 Jul 21, EAST OF NORTH ISLAND, N.Z. + 5.6 + + -179.968,-37.713,0 + + + + M 5.6 - 2012 Jul 22, BISMARCK SEA + 5.6 + + 149.532,-4.872,0 + + + + M 5.6 - 2012 Jul 26, SOUTHEAST OF LOYALTY ISLANDS + 5.6 + + 169.509,-21.103,0 + + + + M 5.6 - 2012 Jul 29, PRIMOR'YE, RUSSIA + 5.6 + + 139.073,47.379,0 + + + + M 5.6 - 2012 Aug 9, REVILLA GIGEDO ISLANDS REGION + 5.6 + + -109.332,19.946,0 + + + + M 5.6 - 2012 Aug 16, CENTRAL MID-ATLANTIC RIDGE + 5.6 + + -36.768,7.335,0 + + + + M 5.6 - 2012 Aug 19, OFF COAST OF WASHINGTON + 5.6 + + -128.619,47.789,0 + + + + M 5.6 - 2012 Aug 21, SOUTHWEST OF SUMATRA, INDONESIA + 5.6 + + 92.056,-0.172,0 + + + + M 5.6 - 2012 Aug 24, SOUTH OF KERMADEC ISLANDS + 5.6 + + -179.533,-33.435,0 + + + + M 5.6 - 2012 Aug 26, PACIFIC-ANTARCTIC RIDGE + 5.6 + + -179.778,-65.478,0 + + + + M 5.6 - 2012 Aug 30, WESTERN INDIAN-ANTARCTIC RIDGE + 5.6 + + 114.08,-50.143,0 + + + + M 5.6 - 2012 Aug 31, PHILIPPINE ISLANDS REGION + 5.6 + + 126.719,10.388,0 + + + + M 5.6 - 2012 Sep 6, PAPUA, INDONESIA + 5.6 + + 140.252,-3.661,0 + + + + M 5.6 - 2012 Sep 11, KURIL ISLANDS + 5.6 + + 151.111,45.335,0 + + + + M 5.6 - 2012 Sep 25, TONGA + 5.6 + + -173.901,-15.517,0 + + + + M 5.6 - 2012 Oct 7, LUZON, PHILIPPINES + 5.6 + + 120.939,18.543,0 + + + + M 5.6 - 2012 Oct 9, NEAR N COAST OF PAPUA, INDONESIA + 5.6 + + 139.224,-2.72,0 + + + + M 5.6 - 2012 Oct 15, OFF EAST COAST OF KAMCHATKA + 5.6 + + 159.379,51.9,0 + + + + M 5.6 - 2012 Oct 16, KURIL ISLANDS + 5.6 + + 156.438,49.618,0 + + + + M 5.6 - 2012 Oct 16, NORTH ISLAND OF NEW ZEALAND + 5.6 + + 176.167,-38.639,0 + + + + M 5.6 - 2012 Oct 19, MID-INDIAN RIDGE + 5.6 + + 67.057,-9.289,0 + + + + M 5.6 - 2012 Oct 23, WEST OF MACQUARIE ISLAND + 5.6 + + 148.206,-57.512,0 + + + + M 5.6 - 2012 Oct 25, NEAR EAST COAST OF HONSHU, JAPAN + 5.6 + + 141.699,38.306,0 + + + + M 5.6 - 2012 Nov 3, CENTRAL MID-ATLANTIC RIDGE + 5.6 + + -34.073,7.048,0 + + + + M 5.6 - 2012 Nov 5, OFF EAST COAST OF HONSHU, JAPAN + 5.6 + + 143.61,37.791,0 + + + + M 5.6 - 2012 Nov 6, MINAHASA, SULAWESI, INDONESIA + 5.6 + + 122.167,1.357,0 + + + + M 5.6 - 2012 Nov 6, CARLSBERG RIDGE + 5.6 + + 57.203,9.963,0 + + + + M 5.6 - 2012 Nov 7, EASTERN NEW GUINEA REG., P.N.G. + 5.6 + + 148.034,-8.652,0 + + + + M 5.6 - 2012 Nov 13, TONGA + 5.6 + + -175.934,-21.043,0 + + + + M 5.6 - 2012 Nov 14, NEW BRITAIN REGION, P.N.G. + 5.6 + + 151.341,-5.86,0 + + + + M 5.6 - 2012 Nov 16, PACIFIC-ANTARCTIC RIDGE + 5.6 + + -134.758,-53.955,0 + + + + M 5.6 - 2012 Nov 17, VANUATU + 5.6 + + 167.46,-14.99,0 + + + + M 5.6 - 2012 Nov 28, NORTHERN PERU + 5.6 + + -76.101,-4.522,0 + + + + M 5.6 - 2012 Nov 28, BANDA SEA + 5.6 + + 131.134,-5.398,0 + + + + M 5.6 - 2012 Dec 3, PACIFIC-ANTARCTIC RIDGE + 5.6 + + -136.244,-54.672,0 + + + + M 5.6 - 2012 Dec 8, NEAR S COAST OF NEW GUINEA, PNG. + 5.6 + + 143.973,-7.211,0 + + + + M 5.6 - 2012 Dec 9, MINDANAO, PHILIPPINES + 5.6 + + 126.166,6.703,0 + + + + M 5.6 - 2012 Dec 17, KURIL ISLANDS + 5.6 + + 155.837,49.785,0 + + + + M 5.5 - 2012 Jan 5, DOMINICAN REPUBLIC + 5.5 + + -70.361,18.325,0 + + + + M 5.5 - 2012 Jan 6, CENTRAL EAST PACIFIC RISE + 5.5 + + -107.312,-6.341,0 + + + + M 5.5 - 2012 Jan 12, NEAR EAST COAST OF HONSHU, JAPAN + 5.5 + + 141.071,36.994,0 + + + + M 5.5 - 2012 Jan 12, SOUTH OF AFRICA + 5.5 + + 28.152,-52.113,0 + + + + M 5.5 - 2012 Jan 22, SOUTH SANDWICH ISLANDS REGION + 5.5 + + -24.899,-56.655,0 + + + + M 5.5 - 2012 Jan 24, SOUTH SANDWICH ISLANDS REGION + 5.5 + + -27.723,-56.336,0 + + + + M 5.5 - 2012 Feb 2, VANUATU + 5.5 + + 167.179,-17.954,0 + + + + M 5.5 - 2012 Feb 4, OWEN FRACTURE ZONE REGION + 5.5 + + 57.561,13.046,0 + + + + M 5.5 - 2012 Feb 9, SOUTH SANDWICH ISLANDS REGION + 5.5 + + -25.816,-56.383,0 + + + + M 5.5 - 2012 Feb 11, MOLUCCA SEA + 5.5 + + 126.853,-0.978,0 + + + + M 5.5 - 2012 Feb 14, NEAR EAST COAST OF HONSHU, JAPAN + 5.5 + + 141.402,36.193,0 + + + + M 5.5 - 2012 Feb 23, SOUTHERN MID-ATLANTIC RIDGE + 5.5 + + -13.193,-17.699,0 + + + + M 5.5 - 2012 Feb 26, SOUTH OF FIJI ISLANDS + 5.5 + + -177.5,-24.477,0 + + + + M 5.5 - 2012 Mar 4, OFF COAST OF CENTRAL AMERICA + 5.5 + + -84.34,2.687,0 + + + + M 5.5 - 2012 Mar 10, ALASKA PENINSULA + 5.5 + + -157.567,55.146,0 + + + + M 5.5 - 2012 Mar 12, KURIL ISLANDS + 5.5 + + 147.609,45.239,0 + + + + M 5.5 - 2012 Mar 13, OFFSHORE CHIAPAS, MEXICO + 5.5 + + -93.026,14.959,0 + + + + M 5.5 - 2012 Mar 15, NEAR S. COAST OF HONSHU, JAPAN + 5.5 + + 139.279,35.802,0 + + + + M 5.5 - 2012 Mar 17, CARLSBERG RIDGE + 5.5 + + 63.404,3.823,0 + + + + M 5.5 - 2012 Mar 24, PACIFIC-ANTARCTIC RIDGE + 5.5 + + -136.157,-54.367,0 + + + + M 5.5 - 2012 Mar 26, NORTHERN EAST PACIFIC RISE + 5.5 + + -104.228,9.995,0 + + + + M 5.5 - 2012 Mar 28, PACIFIC-ANTARCTIC RIDGE + 5.5 + + -140.014,-57.331,0 + + + + M 5.5 - 2012 Apr 6, KEP. MENTAWAI REGION, INDONESIA + 5.5 + + 100.426,-3.345,0 + + + + M 5.5 - 2012 Apr 11, ANDREANOF ISLANDS, ALEUTIAN IS. + 5.5 + + -176.097,51.364,0 + + + + M 5.5 - 2012 Apr 11, NORTH INDIAN OCEAN + 5.5 + + 90.854,1.495,0 + + + + M 5.5 - 2012 Apr 11, OFF W COAST OF NORTHERN SUMATRA + 5.5 + + 92.092,1.19,0 + + + + M 5.5 - 2012 Apr 12, NEAR EAST COAST OF HONSHU, JAPAN + 5.5 + + 141.468,37.513,0 + + + + M 5.5 - 2012 Apr 18, BONIN ISLANDS, JAPAN REGION + 5.5 + + 138.772,28.689,0 + + + + M 5.5 - 2012 Apr 24, NICOBAR ISLANDS, INDIA REGION + 5.5 + + 93.949,8.868,0 + + + + M 5.5 - 2012 Apr 24, NEAR EAST COAST OF HONSHU, JAPAN + 5.5 + + 140.472,35.622,0 + + + + M 5.5 - 2012 Apr 30, BANDA SEA + 5.5 + + 128.511,-5.689,0 + + + + M 5.5 - 2012 May 1, OFF COAST OF BAJA CALIFORNIA SUR + 5.5 + + -108.44,21.951,0 + + + + M 5.5 - 2012 May 2, SOUTHEAST OF EASTER ISLAND + 5.5 + + -102.728,-35.883,0 + + + + M 5.5 - 2012 May 9, PHILIPPINE ISLANDS REGION + 5.5 + + 127.45,6.232,0 + + + + M 5.5 - 2012 May 9, NORTH OF ASCENSION ISLAND + 5.5 + + -13.6,-0.966,0 + + + + M 5.5 - 2012 May 29, NORTHERN ITALY + 5.5 + + 11.008,44.888,0 + + + + M 5.5 - 2012 Jun 1, ANTARCTICA + 5.5 + + -148.864,-77.08,0 + + + + M 5.5 - 2012 Jun 3, MID-INDIAN RIDGE + 5.5 + + 67.21,-16.235,0 + + + + M 5.5 - 2012 Jun 6, TAIWAN REGION + 5.5 + + 121.428,22.357,0 + + + + M 5.5 - 2012 Jun 12, SUNDA STRAIT, INDONESIA + 5.5 + + 105.494,-5.677,0 + + + + M 5.5 - 2012 Jun 13, SOUTH SANDWICH ISLANDS REGION + 5.5 + + -28.394,-55.796,0 + + + + M 5.5 - 2012 Jun 14, MOLUCCA SEA + 5.5 + + 126.828,1.293,0 + + + + M 5.5 - 2012 Jun 21, FIJI REGION + 5.5 + + -178.186,-17.963,0 + + + + M 5.5 - 2012 Jun 22, SOUTH OF KERMADEC ISLANDS + 5.5 + + -178.65,-32.935,0 + + + + M 5.5 - 2012 Jun 23, OFF W COAST OF NORTHERN SUMATRA + 5.5 + + 90.509,2.628,0 + + + + M 5.5 - 2012 Jun 24, SICHUAN-YUNNAN BORDER REG, CHINA + 5.5 + + 100.781,27.767,0 + + + + M 5.5 - 2012 Jun 27, TONGA + 5.5 + + -173.268,-15.222,0 + + + + M 5.5 - 2012 Jun 30, SOUTHEAST OF LOYALTY ISLANDS + 5.5 + + 170.992,-22.088,0 + + + + M 5.5 - 2012 Jul 3, SOLOMON ISLANDS + 5.5 + + 163.331,-10.82,0 + + + + M 5.5 - 2012 Jul 12, SERAM, INDONESIA + 5.5 + + 129.321,-2.885,0 + + + + M 5.5 - 2012 Jul 16, NEAR EAST COAST OF KAMCHATKA + 5.5 + + 161.234,55.777,0 + + + + M 5.5 - 2012 Jul 26, TONGA + 5.5 + + -174.491,-21.015,0 + + + + M 5.5 - 2012 Aug 2, KEP. TANIMBAR REGION, INDONESIA + 5.5 + + 131.121,-6.944,0 + + + + M 5.5 - 2012 Aug 3, FIJI REGION + 5.5 + + -176.916,-16.919,0 + + + + M 5.5 - 2012 Aug 12, PACIFIC-ANTARCTIC RIDGE + 5.5 + + -157.718,-63.004,0 + + + + M 5.5 - 2012 Aug 15, OFFSHORE EL SALVADOR + 5.5 + + -89.215,13.148,0 + + + + M 5.5 - 2012 Aug 17, NORTHERN EAST PACIFIC RISE + 5.5 + + -103.003,8.348,0 + + + + M 5.5 - 2012 Aug 24, BALLENY ISLANDS REGION + 5.5 + + 171.324,-63.581,0 + + + + M 5.5 - 2012 Aug 26, SOUTHERN CALIFORNIA + 5.5 + + -115.549,33.024,0 + + + + M 5.5 - 2012 Aug 27, OFFSHORE EL SALVADOR + 5.5 + + -88.612,12.297,0 + + + + M 5.5 - 2012 Aug 28, OFFSHORE EL SALVADOR + 5.5 + + -88.654,12.458,0 + + + + M 5.5 - 2012 Aug 29, NEAR EAST COAST OF HONSHU, JAPAN + 5.5 + + 141.814,38.425,0 + + + + M 5.5 - 2012 Sep 1, CHIAPAS, MEXICO + 5.5 + + -92.773,16.229,0 + + + + M 5.5 - 2012 Sep 7, SICHUAN-YUNNAN-GUIZHOU RG, CHINA + 5.5 + + 103.983,27.575,0 + + + + M 5.5 - 2012 Sep 9, RAT ISLANDS, ALEUTIAN ISLANDS + 5.5 + + 175.01,52.78,0 + + + + M 5.5 - 2012 Sep 12, CRETE, GREECE + 5.5 + + 24.11,34.783,0 + + + + M 5.5 - 2012 Sep 13, FIJI REGION + 5.5 + + 175.845,-18.627,0 + + + + M 5.5 - 2012 Sep 14, SOUTHERN MID-ATLANTIC RIDGE + 5.5 + + -16.01,-39.676,0 + + + + M 5.5 - 2012 Sep 17, NEW BRITAIN REGION, P.N.G. + 5.5 + + 150.119,-5.687,0 + + + + M 5.5 - 2012 Sep 22, TONGA + 5.5 + + -174.194,-20.896,0 + + + + M 5.5 - 2012 Sep 24, TONGA + 5.5 + + -174.292,-21.212,0 + + + + M 5.5 - 2012 Sep 29, OAXACA, MEXICO + 5.5 + + -98.393,16.304,0 + + + + M 5.5 - 2012 Oct 2, BALLENY ISLANDS REGION + 5.5 + + 177.83,-64.969,0 + + + + M 5.5 - 2012 Oct 5, OFF THE COAST OF GUATEMALA + 5.5 + + -91.504,13.028,0 + + + + M 5.5 - 2012 Oct 5, GULF OF CALIFORNIA + 5.5 + + -108.512,23.582,0 + + + + M 5.5 - 2012 Oct 11, VALPARAISO, CHILE + 5.5 + + -70.31,-32.865,0 + + + + M 5.5 - 2012 Oct 14, AZERBAIJAN + 5.5 + + 46.405,41.825,0 + + + + M 5.5 - 2012 Oct 14, CHIAPAS, MEXICO + 5.5 + + -92.289,14.684,0 + + + + M 5.5 - 2012 Oct 15, GUATEMALA + 5.5 + + -91.01,14.062,0 + + + + M 5.5 - 2012 Oct 19, KERMADEC ISLANDS REGION + 5.5 + + -176.8,-30.809,0 + + + + M 5.5 - 2012 Oct 21, ICELAND REGION + 5.5 + + -18.666,66.309,0 + + + + M 5.5 - 2012 Oct 28, QUEEN CHARLOTTE ISLANDS REGION + 5.5 + + -132.082,52.294,0 + + + + M 5.5 - 2012 Oct 29, FLORES REGION, INDONESIA + 5.5 + + 123.465,-8.185,0 + + + + M 5.5 - 2012 Nov 2, NEAR EAST COAST OF KAMCHATKA + 5.5 + + 162.799,55.887,0 + + + + M 5.5 - 2012 Nov 6, SOUTHEAST OF EASTER ISLAND + 5.5 + + -104.8,-35.465,0 + + + + M 5.5 - 2012 Nov 11, MYANMAR + 5.5 + + 95.866,23.132,0 + + + + M 5.5 - 2012 Nov 15, NEAR ISLANDS, ALEUTIAN ISLANDS + 5.5 + + 173.351,52.496,0 + + + + M 5.5 - 2012 Nov 29, NEAR COAST OF NORTHERN PERU + 5.5 + + -81.07,-6.588,0 + + + + M 5.5 - 2012 Nov 29, OFFSHORE GUATEMALA + 5.5 + + -92.113,13.757,0 + + + + M 5.5 - 2012 Dec 6, PHILIPPINE ISLANDS REGION + 5.5 + + 126.638,10.974,0 + + + + M 5.5 - 2012 Dec 7, OFF EAST COAST OF HONSHU, JAPAN + 5.5 + + 143.607,37.828,0 + + + + M 5.5 - 2012 Dec 13, EAST OF SEVERNAYA ZEMLYA + 5.5 + + 121.383,80.804,0 + + + + M 5.5 - 2012 Dec 22, MYANMAR + 5.5 + + 94.782,22.443,0 + + + + M 5.5 - 2012 Dec 26, PACIFIC-ANTARCTIC RIDGE + 5.5 + + -144.483,-56.186,0 + + + + M 5.5 - 2012 Dec 28, SULAWESI, INDONESIA + 5.5 + + 122.918,-0.145,0 + + + + M 5.5 - 2012 Dec 29, HINDU KUSH REGION, AFGHANISTAN + 5.5 + + 70.599,35.711,0 + + + + M 5.4 - 2012 Jan 7, HALMAHERA, INDONESIA + 5.4 + + 127.475,1.705,0 + + + + M 5.4 - 2012 Jan 7, EASTERN NEW GUINEA REG., P.N.G. + 5.4 + + 145.214,-5.081,0 + + + + M 5.4 - 2012 Jan 17, CENTRAL EAST PACIFIC RISE + 5.4 + + -104.146,-4.045,0 + + + + M 5.4 - 2012 Jan 20, KEPULAUAN SANGIHE, INDONESIA + 5.4 + + 125.307,4.795,0 + + + + M 5.4 - 2012 Jan 26, SCOTIA SEA + 5.4 + + -51.411,-60.582,0 + + + + M 5.4 - 2012 Jan 28, KERMADEC ISLANDS, NEW ZEALAND + 5.4 + + -177.172,-29.519,0 + + + + M 5.4 - 2012 Jan 28, KERMADEC ISLANDS, NEW ZEALAND + 5.4 + + -177.259,-29.574,0 + + + + M 5.4 - 2012 Feb 1, SOUTHERN SUMATRA, INDONESIA + 5.4 + + 102.203,-3.676,0 + + + + M 5.4 - 2012 Feb 3, VANUATU + 5.4 + + 167.232,-17.386,0 + + + + M 5.4 - 2012 Feb 4, CENTRAL MONGOLIA + 5.4 + + 105.61,42.291,0 + + + + M 5.4 - 2012 Feb 4, SAMAR, PHILIPPINES + 5.4 + + 125.719,11.937,0 + + + + M 5.4 - 2012 Feb 8, NEAR WEST COAST OF HONSHU, JAPAN + 5.4 + + 137.999,37.858,0 + + + + M 5.4 - 2012 Feb 9, BOUGAINVILLE REGION, P.N.G. + 5.4 + + 155.72,-6.987,0 + + + + M 5.4 - 2012 Feb 18, TONGA + 5.4 + + -173.521,-20.957,0 + + + + M 5.4 - 2012 Feb 22, KEPULAUAN KAI, INDONESIA + 5.4 + + 133.565,-5.173,0 + + + + M 5.4 - 2012 Feb 26, TARAPACA, CHILE + 5.4 + + -69.29,-18.811,0 + + + + M 5.4 - 2012 Feb 27, KURIL ISLANDS + 5.4 + + 152.74,46.922,0 + + + + M 5.4 - 2012 Feb 27, RYUKYU ISLANDS, JAPAN + 5.4 + + 127.096,25.557,0 + + + + M 5.4 - 2012 Feb 28, OFF EAST COAST OF HONSHU, JAPAN + 5.4 + + 144.137,37.203,0 + + + + M 5.4 - 2012 Feb 29, VANUATU + 5.4 + + 168.038,-17.647,0 + + + + M 5.4 - 2012 Feb 29, NEAR EAST COAST OF HONSHU, JAPAN + 5.4 + + 140.448,36.427,0 + + + + M 5.4 - 2012 Mar 2, EASTERN NEW GUINEA REG., P.N.G. + 5.4 + + 146.265,-8.048,0 + + + + M 5.4 - 2012 Mar 5, HALMAHERA, INDONESIA + 5.4 + + 128.626,1.937,0 + + + + M 5.4 - 2012 Mar 6, NICOBAR ISLANDS, INDIA REGION + 5.4 + + 93.691,8.571,0 + + + + M 5.4 - 2012 Mar 7, SOUTH SANDWICH ISLANDS REGION + 5.4 + + -25.306,-57.941,0 + + + + M 5.4 - 2012 Mar 9, NEAR EAST COAST OF HONSHU, JAPAN + 5.4 + + 140.392,36.719,0 + + + + M 5.4 - 2012 Mar 14, OFF EAST COAST OF HONSHU, JAPAN + 5.4 + + 144.848,40.905,0 + + + + M 5.4 - 2012 Mar 19, MOLUCCA SEA + 5.4 + + 125.075,0.353,0 + + + + M 5.4 - 2012 Mar 30, OFFSHORE CHIAPAS, MEXICO + 5.4 + + -93.063,14.381,0 + + + + M 5.4 - 2012 Apr 1, TRISTAN DA CUNHA REGION + 5.4 + + -14.877,-35.191,0 + + + + M 5.4 - 2012 Apr 2, TONGA + 5.4 + + -173.514,-16.935,0 + + + + M 5.4 - 2012 Apr 3, NEAR COAST OF NORTHERN PERU + 5.4 + + -80.583,-5.18,0 + + + + M 5.4 - 2012 Apr 3, KEPULAUAN KAI, INDONESIA + 5.4 + + 133.876,-5.654,0 + + + + M 5.4 - 2012 Apr 11, NORTH INDIAN OCEAN + 5.4 + + 91.87,1.167,0 + + + + M 5.4 - 2012 Apr 11, SOUTH SANDWICH ISLANDS REGION + 5.4 + + -27.979,-56.871,0 + + + + M 5.4 - 2012 Apr 11, OFF W COAST OF NORTHERN SUMATRA + 5.4 + + 92.855,0.734,0 + + + + M 5.4 - 2012 Apr 11, OFF W COAST OF NORTHERN SUMATRA + 5.4 + + 92.694,2.475,0 + + + + M 5.4 - 2012 Apr 11, NORTH INDIAN OCEAN + 5.4 + + 89.556,2.865,0 + + + + M 5.4 - 2012 Apr 14, OFF W COAST OF NORTHERN SUMATRA + 5.4 + + 92.141,0.244,0 + + + + M 5.4 - 2012 Apr 21, CENTRAL PERU + 5.4 + + -71.481,-14.82,0 + + + + M 5.4 - 2012 Apr 22, WEST OF MACQUARIE ISLAND + 5.4 + + 140.329,-52.753,0 + + + + M 5.4 - 2012 May 1, VOLCANO ISLANDS, JAPAN REGION + 5.4 + + 141.207,25.404,0 + + + + M 5.4 - 2012 May 3, OFF COAST OF BAJA CALIFORNIA SUR + 5.4 + + -108.779,21.21,0 + + + + M 5.4 - 2012 May 11, ASSAM, INDIA + 5.4 + + 92.889,26.175,0 + + + + M 5.4 - 2012 May 11, CYPRUS REGION + 5.4 + + 34.142,34.304,0 + + + + M 5.4 - 2012 May 24, NEUQUEN, ARGENTINA + 5.4 + + -70.467,-36.912,0 + + + + M 5.4 - 2012 May 30, EASTERN KAZAKHSTAN + 5.4 + + 78.745,43.384,0 + + + + M 5.4 - 2012 Jun 9, KURIL ISLANDS + 5.4 + + 154.852,48.851,0 + + + + M 5.4 - 2012 Jun 11, HINDU KUSH REGION, AFGHANISTAN + 5.4 + + 69.401,36.039,0 + + + + M 5.4 - 2012 Jun 15, BISMARCK SEA + 5.4 + + 146.309,-3.381,0 + + + + M 5.4 - 2012 Jun 20, MINAHASA, SULAWESI, INDONESIA + 5.4 + + 123.426,0.102,0 + + + + M 5.4 - 2012 Jun 20, SOLOMON ISLANDS + 5.4 + + 156.998,-8.7,0 + + + + M 5.4 - 2012 Jun 24, JUJUY, ARGENTINA + 5.4 + + -66.702,-22.445,0 + + + + M 5.4 - 2012 Jun 26, GUATEMALA + 5.4 + + -92.049,15.378,0 + + + + M 5.4 - 2012 Jul 1, ATACAMA, CHILE + 5.4 + + -70.878,-28.561,0 + + + + M 5.4 - 2012 Jul 2, SOUTH OF KERMADEC ISLANDS + 5.4 + + -179.342,-33.385,0 + + + + M 5.4 - 2012 Jul 7, SOUTH SANDWICH ISLANDS REGION + 5.4 + + -27.414,-56.203,0 + + + + M 5.4 - 2012 Jul 11, TONGA + 5.4 + + -174.678,-16.103,0 + + + + M 5.4 - 2012 Jul 11, NEAR COAST OF CENTRAL PERU + 5.4 + + -75.288,-15.276,0 + + + + M 5.4 - 2012 Jul 14, KURIL ISLANDS + 5.4 + + 151.316,45.516,0 + + + + M 5.4 - 2012 Jul 14, WESTERN INDIAN-ANTARCTIC RIDGE + 5.4 + + 124.64,-49.044,0 + + + + M 5.4 - 2012 Jul 19, SOUTH SANDWICH ISLANDS REGION + 5.4 + + -27.809,-56.038,0 + + + + M 5.4 - 2012 Jul 20, FLORES REGION, INDONESIA + 5.4 + + 123.682,-8.006,0 + + + + M 5.4 - 2012 Jul 22, NEW IRELAND REGION, P.N.G. + 5.4 + + 153.375,-4.169,0 + + + + M 5.4 - 2012 Jul 27, MARIANA ISLANDS REGION + 5.4 + + 142.985,21.671,0 + + + + M 5.4 - 2012 Jul 28, CENTRAL MID-ATLANTIC RIDGE + 5.4 + + -32.667,4.548,0 + + + + M 5.4 - 2012 Aug 1, NEAR N COAST OF NEW GUINEA, PNG. + 5.4 + + 144.639,-4.39,0 + + + + M 5.4 - 2012 Aug 3, BOUGAINVILLE REGION, P.N.G. + 5.4 + + 155.718,-6.939,0 + + + + M 5.4 - 2012 Aug 3, SANTA CRUZ ISLANDS + 5.4 + + 165.038,-11.478,0 + + + + M 5.4 - 2012 Aug 6, HALMAHERA, INDONESIA + 5.4 + + 128.429,2.702,0 + + + + M 5.4 - 2012 Aug 8, NORTHEAST OF TAIWAN + 5.4 + + 124.921,25.873,0 + + + + M 5.4 - 2012 Aug 9, SOUTH SANDWICH ISLANDS REGION + 5.4 + + -27.988,-59.762,0 + + + + M 5.4 - 2012 Aug 13, PAKISTAN + 5.4 + + 73.663,34.849,0 + + + + M 5.4 - 2012 Aug 26, SOUTHERN CALIFORNIA + 5.4 + + -115.546,33.019,0 + + + + M 5.4 - 2012 Aug 30, WESTERN INDIAN-ANTARCTIC RIDGE + 5.4 + + 114.106,-50.211,0 + + + + M 5.4 - 2012 Aug 31, PHILIPPINE ISLANDS REGION + 5.4 + + 126.887,10.485,0 + + + + M 5.4 - 2012 Sep 1, PHILIPPINE ISLANDS REGION + 5.4 + + 126.683,10.449,0 + + + + M 5.4 - 2012 Sep 1, PHILIPPINE ISLANDS REGION + 5.4 + + 126.812,10.528,0 + + + + M 5.4 - 2012 Sep 2, PHILIPPINE ISLANDS REGION + 5.4 + + 126.652,11.308,0 + + + + M 5.4 - 2012 Sep 4, PHILIPPINE ISLANDS REGION + 5.4 + + 126.77,10.46,0 + + + + M 5.4 - 2012 Sep 7, SOUTH OF JAVA, INDONESIA + 5.4 + + 113.833,-10.73,0 + + + + M 5.4 - 2012 Sep 12, NEW BRITAIN REGION, P.N.G. + 5.4 + + 152.098,-5.022,0 + + + + M 5.4 - 2012 Sep 12, SOUTH INDIAN OCEAN + 5.4 + + 82.926,-23.996,0 + + + + M 5.4 - 2012 Sep 13, PHILIPPINE ISLANDS REGION + 5.4 + + 126.938,10.238,0 + + + + M 5.4 - 2012 Sep 13, SOUTH OF JAVA, INDONESIA + 5.4 + + 113.755,-10.768,0 + + + + M 5.4 - 2012 Sep 21, TARAPACA, CHILE + 5.4 + + -68.961,-19.569,0 + + + + M 5.4 - 2012 Sep 22, OAXACA, MEXICO + 5.4 + + -98.281,16.262,0 + + + + M 5.4 - 2012 Sep 25, TONGA + 5.4 + + -174.313,-21.192,0 + + + + M 5.4 - 2012 Sep 30, EAST OF THE VOLCANO ISLANDS + 5.4 + + 146.043,23,0 + + + + M 5.4 - 2012 Oct 3, MINDANAO, PHILIPPINES + 5.4 + + 126.95,5.858,0 + + + + M 5.4 - 2012 Oct 4, NORTHERN MID-ATLANTIC RIDGE + 5.4 + + -46.498,17.443,0 + + + + M 5.4 - 2012 Oct 5, NORTHERN MID-ATLANTIC RIDGE + 5.4 + + -46.453,17.501,0 + + + + M 5.4 - 2012 Oct 7, AZERBAIJAN + 5.4 + + 48.437,40.747,0 + + + + M 5.4 - 2012 Oct 10, SOUTH SANDWICH ISLANDS REGION + 5.4 + + -26.573,-60.326,0 + + + + M 5.4 - 2012 Oct 14, OFF EAST COAST OF HONSHU, JAPAN + 5.4 + + 144.333,38.215,0 + + + + M 5.4 - 2012 Oct 16, IZU ISLANDS, JAPAN REGION + 5.4 + + 140.222,31.277,0 + + + + M 5.4 - 2012 Oct 17, TONGA + 5.4 + + -174.187,-19.042,0 + + + + M 5.4 - 2012 Oct 21, CENTRAL CALIFORNIA + 5.4 + + -120.856,36.311,0 + + + + M 5.4 - 2012 Oct 21, OFFSHORE EL SALVADOR + 5.4 + + -88.337,12.562,0 + + + + M 5.4 - 2012 Oct 24, CAYMAN ISLANDS REGION + 5.4 + + -81.692,17.785,0 + + + + M 5.4 - 2012 Oct 25, NORTHERN PERU + 5.4 + + -76.074,-5.919,0 + + + + M 5.4 - 2012 Oct 27, NEW BRITAIN REGION, P.N.G. + 5.4 + + 151.532,-6.141,0 + + + + M 5.4 - 2012 Oct 28, QUEEN CHARLOTTE ISLANDS REGION + 5.4 + + -132.667,52.834,0 + + + + M 5.4 - 2012 Oct 29, NIAS REGION, INDONESIA + 5.4 + + 98.381,0.88,0 + + + + M 5.4 - 2012 Nov 1, MINAHASA, SULAWESI, INDONESIA + 5.4 + + 122.105,1.229,0 + + + + M 5.4 - 2012 Nov 4, SOUTHERN PERU + 5.4 + + -71.878,-15.874,0 + + + + M 5.4 - 2012 Nov 7, NORTHWESTERN IRAN + 5.4 + + 46.62,38.418,0 + + + + M 5.4 - 2012 Nov 17, SOUTHEAST OF EASTER ISLAND + 5.4 + + -95.075,-37.209,0 + + + + M 5.4 - 2012 Nov 17, SOUTHEAST OF EASTER ISLAND + 5.4 + + -95.142,-37.182,0 + + + + M 5.4 - 2012 Nov 20, OFFSHORE O'HIGGINS, CHILE + 5.4 + + -72.254,-33.921,0 + + + + M 5.4 - 2012 Nov 21, SOUTH OF SUMBAWA, INDONESIA + 5.4 + + 117.931,-11.359,0 + + + + M 5.4 - 2012 Nov 26, CENTRAL EAST PACIFIC RISE + 5.4 + + -108.329,-9.098,0 + + + + M 5.4 - 2012 Nov 27, ALAMAGAN REG, N. MARIANA ISLANDS + 5.4 + + 145.763,17.684,0 + + + + M 5.4 - 2012 Dec 3, OFFSHORE GUATEMALA + 5.4 + + -92.372,14.16,0 + + + + M 5.4 - 2012 Dec 12, FIJI REGION + 5.4 + + -176.278,-19.556,0 + + + + M 5.4 - 2012 Dec 20, MOLUCCA SEA + 5.4 + + 126.217,0.562,0 + + + + M 5.4 - 2012 Dec 25, MOLUCCA SEA + 5.4 + + 125.464,1.109,0 + + + + M 5.4 - 2012 Dec 27, TONGA + 5.4 + + -173.562,-18.302,0 + + + + M 5.4 - 2012 Dec 29, NEAR EAST COAST OF HONSHU, JAPAN + 5.4 + + 142.024,38.738,0 + + + + M 5.3 - 2012 Jan 1, SANTA CRUZ ISLANDS + 5.3 + + 166.218,-11.366,0 + + + + M 5.3 - 2012 Jan 5, OFF COAST OF AISEN, CHILE + 5.3 + + -76.472,-45.992,0 + + + + M 5.3 - 2012 Jan 8, VANUATU + 5.3 + + 167.887,-17.425,0 + + + + M 5.3 - 2012 Jan 12, SOUTH OF AFRICA + 5.3 + + 28.196,-52.042,0 + + + + M 5.3 - 2012 Jan 12, TONGA + 5.3 + + -173.59,-16.753,0 + + + + M 5.3 - 2012 Jan 16, MOLUCCA SEA + 5.3 + + 125.475,-0.228,0 + + + + M 5.3 - 2012 Jan 17, OFFSHORE COQUIMBO, CHILE + 5.3 + + -71.615,-31.728,0 + + + + M 5.3 - 2012 Jan 18, SANTA CRUZ ISLANDS + 5.3 + + 165.536,-11.018,0 + + + + M 5.3 - 2012 Jan 18, SANTA CRUZ ISLANDS + 5.3 + + 165.464,-10.999,0 + + + + M 5.3 - 2012 Jan 26, MARIANA ISLANDS REGION + 5.3 + + 142.852,21.645,0 + + + + M 5.3 - 2012 Jan 27, DODECANESE ISLANDS, GREECE + 5.3 + + 25.064,36.044,0 + + + + M 5.3 - 2012 Jan 28, CATANDUANES, PHILIPPINES + 5.3 + + 124.586,13.386,0 + + + + M 5.3 - 2012 Jan 28, KERMADEC ISLANDS, NEW ZEALAND + 5.3 + + -177.139,-29.59,0 + + + + M 5.3 - 2012 Jan 28, PAPUA, INDONESIA + 5.3 + + 140.788,-4.081,0 + + + + M 5.3 - 2012 Jan 29, NORTHERN MID-ATLANTIC RIDGE + 5.3 + + -46.529,16.488,0 + + + + M 5.3 - 2012 Feb 1, SANTA CRUZ ISLANDS + 5.3 + + 165.901,-10.802,0 + + + + M 5.3 - 2012 Feb 1, SAMAR, PHILIPPINES + 5.3 + + 125.557,11.6,0 + + + + M 5.3 - 2012 Feb 1, EASTER ISLAND REGION + 5.3 + + -111.525,-31.585,0 + + + + M 5.3 - 2012 Feb 2, VANUATU + 5.3 + + 167.176,-17.455,0 + + + + M 5.3 - 2012 Feb 6, NEGROS- CEBU REG, PHILIPPINES + 5.3 + + 123.108,9.85,0 + + + + M 5.3 - 2012 Feb 7, NEGROS- CEBU REG, PHILIPPINES + 5.3 + + 123.42,10.194,0 + + + + M 5.3 - 2012 Feb 8, NEGROS- CEBU REG, PHILIPPINES + 5.3 + + 123.43,10.249,0 + + + + M 5.3 - 2012 Feb 8, KERMADEC ISLANDS, NEW ZEALAND + 5.3 + + -177.409,-29.455,0 + + + + M 5.3 - 2012 Feb 14, CENTRAL MID-ATLANTIC RIDGE + 5.3 + + -29.228,0.859,0 + + + + M 5.3 - 2012 Feb 17, SOUTHEAST INDIAN RIDGE + 5.3 + + 84.932,-42.024,0 + + + + M 5.3 - 2012 Feb 21, BERING STRAIT + 5.3 + + -167.057,67.744,0 + + + + M 5.3 - 2012 Feb 22, OFF W COAST OF NORTHERN SUMATRA + 5.3 + + 94.4,4.99,0 + + + + M 5.3 - 2012 Feb 24, NORTHERN COLOMBIA + 5.3 + + -72.952,6.702,0 + + + + M 5.3 - 2012 Feb 24, MOLUCCA SEA + 5.3 + + 126.34,1.516,0 + + + + M 5.3 - 2012 Mar 2, NEAR EAST COAST OF HONSHU, JAPAN + 5.3 + + 141.043,35.16,0 + + + + M 5.3 - 2012 Mar 3, COQUIMBO, CHILE + 5.3 + + -71.129,-30.348,0 + + + + M 5.3 - 2012 Mar 6, STATE OF YAP, MICRONESIA + 5.3 + + 140.306,10.527,0 + + + + M 5.3 - 2012 Mar 8, MINDORO, PHILIPPINES + 5.3 + + 120.519,13.57,0 + + + + M 5.3 - 2012 Mar 10, TARAPACA, CHILE + 5.3 + + -69.25,-19.738,0 + + + + M 5.3 - 2012 Mar 11, CARLSBERG RIDGE + 5.3 + + 65.125,3.077,0 + + + + M 5.3 - 2012 Mar 11, SOUTHERN MID-ATLANTIC RIDGE + 5.3 + + -16.696,-41.153,0 + + + + M 5.3 - 2012 Mar 17, CARLSBERG RIDGE + 5.3 + + 63.465,3.758,0 + + + + M 5.3 - 2012 Mar 19, NEW GUINEA, PAPUA NEW GUINEA + 5.3 + + 143.888,-4.36,0 + + + + M 5.3 - 2012 Mar 20, OAXACA, MEXICO + 5.3 + + -98.172,16.289,0 + + + + M 5.3 - 2012 Mar 23, SOUTH AUSTRALIA + 5.3 + + 131.955,-26.163,0 + + + + M 5.3 - 2012 Mar 26, CHUKOTKA, RUSSIA + 5.3 + + -174.648,66.363,0 + + + + M 5.3 - 2012 Mar 26, EAST OF NORTH ISLAND, N.Z. + 5.3 + + -179.075,-35.689,0 + + + + M 5.3 - 2012 Mar 29, SOUTHWEST INDIAN RIDGE + 5.3 + + 44.605,-40.957,0 + + + + M 5.3 - 2012 Apr 1, GUERRERO, MEXICO + 5.3 + + -98.54,16.46,0 + + + + M 5.3 - 2012 Apr 3, NEW IRELAND REGION, P.N.G. + 5.3 + + 153.442,-4.397,0 + + + + M 5.3 - 2012 Apr 4, NEW IRELAND REGION, P.N.G. + 5.3 + + 152.173,-3.824,0 + + + + M 5.3 - 2012 Apr 7, NEW BRITAIN REGION, P.N.G. + 5.3 + + 149.555,-6.746,0 + + + + M 5.3 - 2012 Apr 8, TAIWAN REGION + 5.3 + + 122.35,24,0 + + + + M 5.3 - 2012 Apr 11, NORTH INDIAN OCEAN + 5.3 + + 91.785,1.636,0 + + + + M 5.3 - 2012 Apr 11, OFF W COAST OF NORTHERN SUMATRA + 5.3 + + 90.299,2.521,0 + + + + M 5.3 - 2012 Apr 11, OFF W COAST OF NORTHERN SUMATRA + 5.3 + + 90.351,2.483,0 + + + + M 5.3 - 2012 Apr 11, OFF W COAST OF NORTHERN SUMATRA + 5.3 + + 92.482,2.822,0 + + + + M 5.3 - 2012 Apr 11, NORTH INDIAN OCEAN + 5.3 + + 91.958,1.084,0 + + + + M 5.3 - 2012 Apr 11, OFF W COAST OF NORTHERN SUMATRA + 5.3 + + 93.584,2.164,0 + + + + M 5.3 - 2012 Apr 11, NORTH INDIAN OCEAN + 5.3 + + 90.833,1.477,0 + + + + M 5.3 - 2012 Apr 11, NORTH INDIAN OCEAN + 5.3 + + 91.9,1.276,0 + + + + M 5.3 - 2012 Apr 12, OFF W COAST OF NORTHERN SUMATRA + 5.3 + + 92.746,3.753,0 + + + + M 5.3 - 2012 Apr 14, SUNDA STRAIT, INDONESIA + 5.3 + + 105.444,-6.777,0 + + + + M 5.3 - 2012 Apr 14, SOUTH SANDWICH ISLANDS REGION + 5.3 + + -25.209,-56.845,0 + + + + M 5.3 - 2012 Apr 16, GULF OF CALIFORNIA + 5.3 + + -108.793,23.952,0 + + + + M 5.3 - 2012 Apr 16, OFF W COAST OF NORTHERN SUMATRA + 5.3 + + 92.417,0.798,0 + + + + M 5.3 - 2012 Apr 16, SULAWESI, INDONESIA + 5.3 + + 121.939,-2.58,0 + + + + M 5.3 - 2012 Apr 18, NEAR N COAST OF PAPUA, INDONESIA + 5.3 + + 131.909,-0.501,0 + + + + M 5.3 - 2012 Apr 19, MOLUCCA SEA + 5.3 + + 126.434,1.199,0 + + + + M 5.3 - 2012 Apr 25, NICOBAR ISLANDS, INDIA REGION + 5.3 + + 93.906,8.945,0 + + + + M 5.3 - 2012 Apr 28, KEP. MENTAWAI REGION, INDONESIA + 5.3 + + 100.439,-3.338,0 + + + + M 5.3 - 2012 May 3, NEW BRITAIN REGION, P.N.G. + 5.3 + + 152.085,-5.466,0 + + + + M 5.3 - 2012 May 7, AZERBAIJAN + 5.3 + + 46.719,41.553,0 + + + + M 5.3 - 2012 May 12, MOLUCCA SEA + 5.3 + + 126.108,2.241,0 + + + + M 5.3 - 2012 May 13, SOUTH INDIAN OCEAN + 5.3 + + 89.416,-3.347,0 + + + + M 5.3 - 2012 May 13, SULAWESI, INDONESIA + 5.3 + + 122.996,-0.115,0 + + + + M 5.3 - 2012 May 20, OFF EAST COAST OF HONSHU, JAPAN + 5.3 + + 143.175,39.619,0 + + + + M 5.3 - 2012 May 23, KURIL ISLANDS + 5.3 + + 152.557,46.66,0 + + + + M 5.3 - 2012 Jun 1, SOUTHERN XINJIANG, CHINA + 5.3 + + 75.194,39.803,0 + + + + M 5.3 - 2012 Jun 3, SOUTH SANDWICH ISLANDS REGION + 5.3 + + -25.57,-60.562,0 + + + + M 5.3 - 2012 Jun 5, NORTHERN SUMATRA, INDONESIA + 5.3 + + 94.672,5.482,0 + + + + M 5.3 - 2012 Jun 14, TURKEY-SYRIA-IRAQ BORDER REGION + 5.3 + + 42.325,37.294,0 + + + + M 5.3 - 2012 Jun 17, TONGA + 5.3 + + -174.311,-20.588,0 + + + + M 5.3 - 2012 Jun 18, MENDOZA, ARGENTINA + 5.3 + + -68.496,-33.009,0 + + + + M 5.3 - 2012 Jun 20, NEAR N COAST OF PAPUA, INDONESIA + 5.3 + + 133.281,-0.727,0 + + + + M 5.3 - 2012 Jun 28, VANUATU + 5.3 + + 166.625,-13.504,0 + + + + M 5.3 - 2012 Jul 3, NEAR S. COAST OF HONSHU, JAPAN + 5.3 + + 139.744,34.934,0 + + + + M 5.3 - 2012 Jul 5, MINDANAO, PHILIPPINES + 5.3 + + 126.554,5.126,0 + + + + M 5.3 - 2012 Jul 7, NORTH ISLAND OF NEW ZEALAND + 5.3 + + 175.807,-39.068,0 + + + + M 5.3 - 2012 Jul 9, SULAWESI, INDONESIA + 5.3 + + 122.791,-0.171,0 + + + + M 5.3 - 2012 Jul 11, SOLOMON ISLANDS + 5.3 + + 156.275,-8.442,0 + + + + M 5.3 - 2012 Jul 18, SOUTHERN SUMATRA, INDONESIA + 5.3 + + 102.794,-4.381,0 + + + + M 5.3 - 2012 Jul 18, PHILIPPINE ISLANDS REGION + 5.3 + + 126.073,11.281,0 + + + + M 5.3 - 2012 Jul 20, KURIL ISLANDS + 5.3 + + 155.599,49.506,0 + + + + M 5.3 - 2012 Jul 21, BANDA SEA + 5.3 + + 129.266,-5.387,0 + + + + M 5.3 - 2012 Jul 22, TONGA + 5.3 + + -175.029,-21.804,0 + + + + M 5.3 - 2012 Jul 29, NEAR EAST COAST OF HONSHU, JAPAN + 5.3 + + 142.323,39.075,0 + + + + M 5.3 - 2012 Aug 4, NORTHERN SUMATRA, INDONESIA + 5.3 + + 96.296,4.857,0 + + + + M 5.3 - 2012 Aug 6, RYUKYU ISLANDS, JAPAN + 5.3 + + 130.603,29.487,0 + + + + M 5.3 - 2012 Aug 9, LOMBOK REGION, INDONESIA + 5.3 + + 116.363,-8.718,0 + + + + M 5.3 - 2012 Aug 14, BONIN ISLANDS, JAPAN REGION + 5.3 + + 142.53,28.718,0 + + + + M 5.3 - 2012 Aug 15, NORTHWESTERN IRAN + 5.3 + + 46.672,38.41,0 + + + + M 5.3 - 2012 Aug 22, EASTERN NEW GUINEA REG., P.N.G. + 5.3 + + 147.25,-6.047,0 + + + + M 5.3 - 2012 Aug 27, KEPULAUAN TALAUD, INDONESIA + 5.3 + + 126.698,3.622,0 + + + + M 5.3 - 2012 Aug 28, OFF COAST OF CENTRAL AMERICA + 5.3 + + -88.706,11.978,0 + + + + M 5.3 - 2012 Aug 28, OFF W COAST OF NORTHERN SUMATRA + 5.3 + + 92.986,4.409,0 + + + + M 5.3 - 2012 Aug 31, CENTRAL MID-ATLANTIC RIDGE + 5.3 + + -32.155,3.807,0 + + + + M 5.3 - 2012 Aug 31, PHILIPPINE ISLANDS REGION + 5.3 + + 126.926,10.562,0 + + + + M 5.3 - 2012 Aug 31, GULF OF ADEN + 5.3 + + 50.47,13.239,0 + + + + M 5.3 - 2012 Sep 1, PHILIPPINE ISLANDS REGION + 5.3 + + 126.45,10.229,0 + + + + M 5.3 - 2012 Sep 4, PHILIPPINE ISLANDS REGION + 5.3 + + 126.888,10.423,0 + + + + M 5.3 - 2012 Sep 4, PHILIPPINE ISLANDS REGION + 5.3 + + 126.778,10.666,0 + + + + M 5.3 - 2012 Sep 4, PHILIPPINE ISLANDS REGION + 5.3 + + 126.827,10.634,0 + + + + M 5.3 - 2012 Sep 4, PHILIPPINE ISLANDS REGION + 5.3 + + 126.896,10.501,0 + + + + M 5.3 - 2012 Sep 5, PHILIPPINE ISLANDS REGION + 5.3 + + 126.711,11.596,0 + + + + M 5.3 - 2012 Sep 6, KEPULAUAN TALAUD, INDONESIA + 5.3 + + 126.879,4.499,0 + + + + M 5.3 - 2012 Sep 7, SICHUAN-YUNNAN-GUIZHOU RG, CHINA + 5.3 + + 104.007,27.572,0 + + + + M 5.3 - 2012 Sep 7, HALMAHERA, INDONESIA + 5.3 + + 128.238,2.461,0 + + + + M 5.3 - 2012 Sep 11, SOUTH OF JAVA, INDONESIA + 5.3 + + 113.832,-10.705,0 + + + + M 5.3 - 2012 Sep 15, SAMAR, PHILIPPINES + 5.3 + + 125.468,12.556,0 + + + + M 5.3 - 2012 Sep 15, SOUTH OF JAVA, INDONESIA + 5.3 + + 113.883,-10.738,0 + + + + M 5.3 - 2012 Sep 16, PHILIPPINE ISLANDS REGION + 5.3 + + 126.723,10.624,0 + + + + M 5.3 - 2012 Sep 20, KEPULAUAN BATU, INDONESIA + 5.3 + + 98.817,-0.065,0 + + + + M 5.3 - 2012 Sep 20, MINDANAO, PHILIPPINES + 5.3 + + 126.381,5.998,0 + + + + M 5.3 - 2012 Sep 23, FIJI REGION + 5.3 + + 175.174,-16.93,0 + + + + M 5.3 - 2012 Sep 23, SOUTH OF MARIANA ISLANDS + 5.3 + + 143.25,11.705,0 + + + + M 5.3 - 2012 Sep 26, ANTOFAGASTA, CHILE + 5.3 + + -68.441,-22.262,0 + + + + M 5.3 - 2012 Sep 29, NICOBAR ISLANDS, INDIA REGION + 5.3 + + 92.78,6.107,0 + + + + M 5.3 - 2012 Oct 2, MINDANAO, PHILIPPINES + 5.3 + + 123.287,8.297,0 + + + + M 5.3 - 2012 Oct 2, SOUTHERN SUMATRA, INDONESIA + 5.3 + + 101.919,-2.917,0 + + + + M 5.3 - 2012 Oct 3, NEW BRITAIN REGION, P.N.G. + 5.3 + + 152.718,-6.299,0 + + + + M 5.3 - 2012 Oct 7, NEW BRITAIN REGION, P.N.G. + 5.3 + + 151.794,-5.53,0 + + + + M 5.3 - 2012 Oct 10, COSTA RICA + 5.3 + + -85.476,10.1,0 + + + + M 5.3 - 2012 Oct 11, OFF W COAST OF NORTHERN SUMATRA + 5.3 + + 92.585,1.471,0 + + + + M 5.3 - 2012 Oct 13, NEAR N COAST OF NEW GUINEA, PNG. + 5.3 + + 142.326,-2.538,0 + + + + M 5.3 - 2012 Oct 15, VANUATU + 5.3 + + 165.506,-13.114,0 + + + + M 5.3 - 2012 Oct 16, KYUSHU, JAPAN + 5.3 + + 130.199,31.216,0 + + + + M 5.3 - 2012 Oct 21, ICELAND REGION + 5.3 + + -18.569,66.37,0 + + + + M 5.3 - 2012 Oct 25, FIJI REGION + 5.3 + + -178.259,-19.857,0 + + + + M 5.3 - 2012 Oct 25, SOUTHERN ITALY + 5.3 + + 16.01,39.88,0 + + + + M 5.3 - 2012 Oct 28, PHILIPPINE ISLANDS REGION + 5.3 + + 126.635,10.431,0 + + + + M 5.3 - 2012 Oct 28, QUEEN CHARLOTTE ISLANDS REGION + 5.3 + + -132.374,52.472,0 + + + + M 5.3 - 2012 Nov 2, FLORES SEA + 5.3 + + 121.64,-7.788,0 + + + + M 5.3 - 2012 Nov 3, PHILIPPINE ISLANDS REGION + 5.3 + + 126.93,10.515,0 + + + + M 5.3 - 2012 Nov 4, KEPULAUAN SANGIHE, INDONESIA + 5.3 + + 125.076,4.6,0 + + + + M 5.3 - 2012 Nov 6, BISMARCK SEA + 5.3 + + 148.846,-3.836,0 + + + + M 5.3 - 2012 Nov 9, SOUTH OF AUSTRALIA + 5.3 + + 124.723,-42.732,0 + + + + M 5.3 - 2012 Nov 9, BALI SEA + 5.3 + + 117.614,-7.947,0 + + + + M 5.3 - 2012 Nov 11, NEW BRITAIN REGION, P.N.G. + 5.3 + + 151.688,-5.45,0 + + + + M 5.3 - 2012 Nov 16, NEAR EAST COAST OF HONSHU, JAPAN + 5.3 + + 140.988,35.217,0 + + + + M 5.3 - 2012 Nov 19, NEW BRITAIN REGION, P.N.G. + 5.3 + + 151.655,-5.785,0 + + + + M 5.3 - 2012 Nov 19, PAKISTAN + 5.3 + + 67.584,30.538,0 + + + + M 5.3 - 2012 Nov 22, KOMANDORSKIYE OSTROVA REGION + 5.3 + + 168.316,54.099,0 + + + + M 5.3 - 2012 Nov 23, NEAR EAST COAST OF HONSHU, JAPAN + 5.3 + + 141.694,38.212,0 + + + + M 5.3 - 2012 Nov 29, FIJI REGION + 5.3 + + -177.157,-20.721,0 + + + + M 5.3 - 2012 Dec 1, ALASKA PENINSULA + 5.3 + + -154.121,58.422,0 + + + + M 5.3 - 2012 Dec 6, BOUVET ISLAND REGION + 5.3 + + -1.917,-54.179,0 + + + + M 5.3 - 2012 Dec 7, SOUTHERN XINJIANG, CHINA + 5.3 + + 88.098,38.745,0 + + + + M 5.3 - 2012 Dec 13, KERMADEC ISLANDS, NEW ZEALAND + 5.3 + + -178.39,-30.911,0 + + + + M 5.3 - 2012 Dec 13, OFFSHORE EL SALVADOR + 5.3 + + -89.967,13.071,0 + + + + M 5.3 - 2012 Dec 24, NEAR EAST COAST OF KAMCHATKA + 5.3 + + 162.034,54.907,0 + + + + M 5.3 - 2012 Dec 26, ASCENSION ISLAND REGION + 5.3 + + -13.132,-10.411,0 + + + + M 5.3 - 2012 Dec 27, BARBADOS REGION, WINDWARD ISL. + 5.3 + + -58.002,13.006,0 + + + + M 5.3 - 2012 Dec 30, OFFSHORE CHIAPAS, MEXICO + 5.3 + + -92.991,14.446,0 + + + + M 5.2 - 2012 Jan 1, SOUTH ISLAND OF NEW ZEALAND + 5.2 + + 172.881,-43.476,0 + + + + M 5.2 - 2012 Jan 1, NORTHERN SUMATRA, INDONESIA + 5.2 + + 96.419,4.547,0 + + + + M 5.2 - 2012 Jan 3, GUAM REGION + 5.2 + + 143.737,12.689,0 + + + + M 5.2 - 2012 Jan 4, KEPULAUAN BARAT DAYA, INDONESIA + 5.2 + + 128.737,-7.354,0 + + + + M 5.2 - 2012 Jan 4, SANTA CRUZ ISLANDS + 5.2 + + 166.375,-10.67,0 + + + + M 5.2 - 2012 Jan 5, PACIFIC-ANTARCTIC RIDGE + 5.2 + + -143.95,-56.146,0 + + + + M 5.2 - 2012 Jan 8, FIJI REGION + 5.2 + + -178.541,-17.897,0 + + + + M 5.2 - 2012 Jan 9, SOUTHERN IRAN + 5.2 + + 55.726,27.034,0 + + + + M 5.2 - 2012 Jan 9, OFFSHORE VALPARAISO, CHILE + 5.2 + + -71.594,-32.573,0 + + + + M 5.2 - 2012 Jan 10, VANUATU REGION + 5.2 + + 171.404,-16.993,0 + + + + M 5.2 - 2012 Jan 10, TONGA REGION + 5.2 + + -172.779,-17.414,0 + + + + M 5.2 - 2012 Jan 11, BANDA SEA + 5.2 + + 123.462,-6.885,0 + + + + M 5.2 - 2012 Jan 12, NEAR EAST COAST OF HONSHU, JAPAN + 5.2 + + 142.461,38.336,0 + + + + M 5.2 - 2012 Jan 13, QUEEN CHARLOTTE ISLANDS REGION + 5.2 + + -130.72,51.076,0 + + + + M 5.2 - 2012 Jan 15, OFF E. COAST OF N. ISLAND, N.Z. + 5.2 + + 177.217,-36.573,0 + + + + M 5.2 - 2012 Jan 16, MINAHASA, SULAWESI, INDONESIA + 5.2 + + 123.09,0.002,0 + + + + M 5.2 - 2012 Jan 18, MOLUCCA SEA + 5.2 + + 126.898,-0.951,0 + + + + M 5.2 - 2012 Jan 19, OFF W. COAST OF S. ISLAND, N.Z. + 5.2 + + 165.604,-46.763,0 + + + + M 5.2 - 2012 Jan 20, OFF EAST COAST OF HONSHU, JAPAN + 5.2 + + 143.311,37.75,0 + + + + M 5.2 - 2012 Jan 22, LAKE RUDOLF REGION, KENYA + 5.2 + + 36.091,3.678,0 + + + + M 5.2 - 2012 Jan 23, EASTERN HONSHU, JAPAN + 5.2 + + 140.965,37.108,0 + + + + M 5.2 - 2012 Jan 25, SOUTH PACIFIC OCEAN + 5.2 + + -122.202,-6.672,0 + + + + M 5.2 - 2012 Jan 25, NEAR EAST COAST OF HONSHU, JAPAN + 5.2 + + 141.573,38.19,0 + + + + M 5.2 - 2012 Jan 26, DODECANESE ISLANDS, GREECE + 5.2 + + 25.07,36.06,0 + + + + M 5.2 - 2012 Jan 26, ROTA REGION, N. MARIANA ISLANDS + 5.2 + + 145.189,14.338,0 + + + + M 5.2 - 2012 Jan 27, EASTERN HONSHU, JAPAN + 5.2 + + 138.888,35.474,0 + + + + M 5.2 - 2012 Jan 28, KERMADEC ISLANDS, NEW ZEALAND + 5.2 + + -177.267,-29.452,0 + + + + M 5.2 - 2012 Jan 28, KERMADEC ISLANDS, NEW ZEALAND + 5.2 + + -177.175,-29.69,0 + + + + M 5.2 - 2012 Jan 29, MINDANAO, PHILIPPINES + 5.2 + + 124.727,5.936,0 + + + + M 5.2 - 2012 Jan 30, SIMEULUE, INDONESIA + 5.2 + + 96.647,2.072,0 + + + + M 5.2 - 2012 Feb 2, VANUATU + 5.2 + + 167.304,-17.597,0 + + + + M 5.2 - 2012 Feb 4, VANUATU + 5.2 + + 167.81,-17.086,0 + + + + M 5.2 - 2012 Feb 5, KEPULAUAN KAI, INDONESIA + 5.2 + + 133.949,-5.489,0 + + + + M 5.2 - 2012 Feb 5, KYRGYZSTAN + 5.2 + + 74.784,41.437,0 + + + + M 5.2 - 2012 Feb 7, SVALBARD REGION + 5.2 + + 7.323,76.848,0 + + + + M 5.2 - 2012 Feb 8, NEAR COAST OF ECUADOR + 5.2 + + -79.258,0.658,0 + + + + M 5.2 - 2012 Feb 10, NEAR N COAST OF PAPUA, INDONESIA + 5.2 + + 132.794,-0.266,0 + + + + M 5.2 - 2012 Feb 12, OFF EAST COAST OF HONSHU, JAPAN + 5.2 + + 144.252,38.529,0 + + + + M 5.2 - 2012 Feb 13, TONGA REGION + 5.2 + + -172.415,-18.175,0 + + + + M 5.2 - 2012 Feb 14, AEGEAN SEA + 5.2 + + 24.09,40.13,0 + + + + M 5.2 - 2012 Feb 15, FIJI REGION + 5.2 + + -177.378,-19.321,0 + + + + M 5.2 - 2012 Feb 15, EASTERN NEW GUINEA REG., P.N.G. + 5.2 + + 146.958,-7.501,0 + + + + M 5.2 - 2012 Feb 17, WESTERN XIZANG + 5.2 + + 82.787,32.388,0 + + + + M 5.2 - 2012 Feb 19, NEAR EAST COAST OF HONSHU, JAPAN + 5.2 + + 140.313,36.761,0 + + + + M 5.2 - 2012 Feb 20, NORTHERN SUMATRA, INDONESIA + 5.2 + + 99.562,1.846,0 + + + + M 5.2 - 2012 Feb 25, KURIL ISLANDS + 5.2 + + 155.941,49.186,0 + + + + M 5.2 - 2012 Feb 25, KURIL ISLANDS + 5.2 + + 155.982,49.23,0 + + + + M 5.2 - 2012 Feb 26, SOUTHWESTERN SIBERIA, RUSSIA + 5.2 + + 95.981,51.687,0 + + + + M 5.2 - 2012 Feb 26, SOUTH OF FIJI ISLANDS + 5.2 + + -176.946,-25.159,0 + + + + M 5.2 - 2012 Feb 27, SOUTHWESTERN RYUKYU ISL., JAPAN + 5.2 + + 123.355,23.873,0 + + + + M 5.2 - 2012 Feb 27, CENTRAL IRAN + 5.2 + + 56.778,31.428,0 + + + + M 5.2 - 2012 Feb 29, NEAR EAST COAST OF HONSHU, JAPAN + 5.2 + + 141.513,37.305,0 + + + + M 5.2 - 2012 Mar 4, FIJI REGION + 5.2 + + -178.593,-17.835,0 + + + + M 5.2 - 2012 Mar 4, AEGEAN SEA + 5.2 + + 24.059,40.134,0 + + + + M 5.2 - 2012 Mar 6, SOUTHERN SUMATRA, INDONESIA + 5.2 + + 100.16,-0.836,0 + + + + M 5.2 - 2012 Mar 7, RYUKYU ISLANDS, JAPAN + 5.2 + + 127.13,25.609,0 + + + + M 5.2 - 2012 Mar 8, VANUATU + 5.2 + + 167.152,-17.895,0 + + + + M 5.2 - 2012 Mar 14, SOUTH OF FIJI ISLANDS + 5.2 + + -176.331,-24.412,0 + + + + M 5.2 - 2012 Mar 14, NEAR EAST COAST OF HONSHU, JAPAN + 5.2 + + 141.612,35.502,0 + + + + M 5.2 - 2012 Mar 16, KURIL ISLANDS + 5.2 + + 156.074,49.274,0 + + + + M 5.2 - 2012 Mar 17, CARLSBERG RIDGE + 5.2 + + 63.41,3.705,0 + + + + M 5.2 - 2012 Mar 20, OFFSHORE OAXACA, MEXICO + 5.2 + + -98.715,15.899,0 + + + + M 5.2 - 2012 Mar 25, SOUTH SANDWICH ISLANDS REGION + 5.2 + + -23.863,-60.835,0 + + + + M 5.2 - 2012 Mar 25, NEAR EAST COAST OF HONSHU, JAPAN + 5.2 + + 141.603,37.692,0 + + + + M 5.2 - 2012 Mar 26, NORTHERN EAST PACIFIC RISE + 5.2 + + -104.373,9.581,0 + + + + M 5.2 - 2012 Mar 28, SOUTHERN SUMATRA, INDONESIA + 5.2 + + 101.235,-4.403,0 + + + + M 5.2 - 2012 Mar 30, BOUGAINVILLE REGION, P.N.G. + 5.2 + + 154.659,-6.583,0 + + + + M 5.2 - 2012 Mar 30, NORTHERN SUMATRA, INDONESIA + 5.2 + + 95.115,4.616,0 + + + + M 5.2 - 2012 Mar 31, SOUTH OF FIJI ISLANDS + 5.2 + + 179.299,-23.63,0 + + + + M 5.2 - 2012 Apr 3, TARAPACA, CHILE + 5.2 + + -69.093,-19.638,0 + + + + M 5.2 - 2012 Apr 7, BANDA SEA + 5.2 + + 130.684,-6.057,0 + + + + M 5.2 - 2012 Apr 11, SOUTHERN MID-ATLANTIC RIDGE + 5.2 + + -14.397,-16.856,0 + + + + M 5.2 - 2012 Apr 11, NORTH INDIAN OCEAN + 5.2 + + 91.802,1.252,0 + + + + M 5.2 - 2012 Apr 11, OFF W COAST OF NORTHERN SUMATRA + 5.2 + + 92.11,1.107,0 + + + + M 5.2 - 2012 Apr 11, OFF W COAST OF NORTHERN SUMATRA + 5.2 + + 92.2,2.945,0 + + + + M 5.2 - 2012 Apr 11, NORTH INDIAN OCEAN + 5.2 + + 91.662,0.306,0 + + + + M 5.2 - 2012 Apr 12, NEAR EAST COAST OF HONSHU, JAPAN + 5.2 + + 141.032,36.865,0 + + + + M 5.2 - 2012 Apr 12, OFF W COAST OF NORTHERN SUMATRA + 5.2 + + 93.401,2.396,0 + + + + M 5.2 - 2012 Apr 13, OAXACA, MEXICO + 5.2 + + -98.138,16.236,0 + + + + M 5.2 - 2012 Apr 16, OFF W COAST OF NORTHERN SUMATRA + 5.2 + + 92.235,0.176,0 + + + + M 5.2 - 2012 Apr 19, NEAR EAST COAST OF HONSHU, JAPAN + 5.2 + + 141.181,36.976,0 + + + + M 5.2 - 2012 Apr 20, OFF W COAST OF NORTHERN SUMATRA + 5.2 + + 93.824,3.249,0 + + + + M 5.2 - 2012 Apr 21, OFF W COAST OF NORTHERN SUMATRA + 5.2 + + 93.723,3.268,0 + + + + M 5.2 - 2012 Apr 21, SOUTHEAST OF LOYALTY ISLANDS + 5.2 + + 170.183,-21.825,0 + + + + M 5.2 - 2012 Apr 22, SOLOMON ISLANDS + 5.2 + + 158.583,-9.192,0 + + + + M 5.2 - 2012 Apr 23, GUATEMALA + 5.2 + + -89.211,15.766,0 + + + + M 5.2 - 2012 Apr 23, KEPULAUAN BABAR, INDONESIA + 5.2 + + 129.226,-7.22,0 + + + + M 5.2 - 2012 Apr 25, SOUTHERN MID-ATLANTIC RIDGE + 5.2 + + -14.631,-12.771,0 + + + + M 5.2 - 2012 Apr 29, PAPUA, INDONESIA + 5.2 + + 136.109,-3.059,0 + + + + M 5.2 - 2012 Apr 30, ANDAMAN ISLANDS, INDIA REGION + 5.2 + + 93.327,14.405,0 + + + + M 5.2 - 2012 May 3, IRAN-IRAQ BORDER REGION + 5.2 + + 47.726,32.747,0 + + + + M 5.2 - 2012 May 3, GANSU-NEI MONGOL BDR REG, CHINA + 5.2 + + 98.525,40.513,0 + + + + M 5.2 - 2012 May 3, WESTERN TURKEY + 5.2 + + 29.092,39.175,0 + + + + M 5.2 - 2012 May 10, NEAR EAST COAST OF HONSHU, JAPAN + 5.2 + + 142.171,39.772,0 + + + + M 5.2 - 2012 May 10, MOLUCCA SEA + 5.2 + + 126.293,1.38,0 + + + + M 5.2 - 2012 May 15, SOUTH OF TONGA + 5.2 + + -175.967,-24.568,0 + + + + M 5.2 - 2012 May 16, SOUTH OF TONGA + 5.2 + + -175.965,-24.566,0 + + + + M 5.2 - 2012 May 21, RYUKYU ISLANDS, JAPAN + 5.2 + + 127.284,27.197,0 + + + + M 5.2 - 2012 May 21, OFF EAST COAST OF HONSHU, JAPAN + 5.2 + + 143.47,39.364,0 + + + + M 5.2 - 2012 May 23, CENTRAL MID-ATLANTIC RIDGE + 5.2 + + -27.607,0.849,0 + + + + M 5.2 - 2012 May 27, KEP. MENTAWAI REGION, INDONESIA + 5.2 + + 100.155,-2.82,0 + + + + M 5.2 - 2012 May 29, OFF EAST COAST OF HONSHU, JAPAN + 5.2 + + 144.645,39.099,0 + + + + M 5.2 - 2012 May 30, NEAR EAST COAST OF KAMCHATKA + 5.2 + + 161.392,54.739,0 + + + + M 5.2 - 2012 Jun 5, VANUATU + 5.2 + + 168.324,-18.114,0 + + + + M 5.2 - 2012 Jun 14, TAIWAN + 5.2 + + 121.584,23.699,0 + + + + M 5.2 - 2012 Jun 14, NORTHERN XINJIANG, CHINA + 5.2 + + 84.279,42.166,0 + + + + M 5.2 - 2012 Jun 19, NEAR S.E. COAST OF AUSTRALIA + 5.2 + + 146.2,-38.304,0 + + + + M 5.2 - 2012 Jun 19, OFF COAST OF OREGON + 5.2 + + -127.273,43.443,0 + + + + M 5.2 - 2012 Jun 20, SOUTHERN SUMATRA, INDONESIA + 5.2 + + 103.194,-4.928,0 + + + + M 5.2 - 2012 Jun 21, OFF EAST COAST OF HONSHU, JAPAN + 5.2 + + 143.364,39.38,0 + + + + M 5.2 - 2012 Jun 21, SOUTH OF KERMADEC ISLANDS + 5.2 + + -178.622,-32.829,0 + + + + M 5.2 - 2012 Jun 26, KAMCHATKA PENINSULA, RUSSIA + 5.2 + + 160.519,56.157,0 + + + + M 5.2 - 2012 Jun 27, FLORES REGION, INDONESIA + 5.2 + + 119.938,-8.304,0 + + + + M 5.2 - 2012 Jun 27, TONGA + 5.2 + + -173.341,-15.138,0 + + + + M 5.2 - 2012 Jun 28, EASTERN HONSHU, JAPAN + 5.2 + + 140.934,37.165,0 + + + + M 5.2 - 2012 Jun 29, OFFSHORE CHIAPAS, MEXICO + 5.2 + + -93.062,14.939,0 + + + + M 5.2 - 2012 Jun 30, BONIN ISLANDS, JAPAN REGION + 5.2 + + 143.386,28.134,0 + + + + M 5.2 - 2012 Jul 8, SOUTH SANDWICH ISLANDS REGION + 5.2 + + -24.188,-56.456,0 + + + + M 5.2 - 2012 Jul 10, NEAR N COAST OF PAPUA, INDONESIA + 5.2 + + 134.248,-1.692,0 + + + + M 5.2 - 2012 Jul 12, GUATEMALA + 5.2 + + -90.938,14.75,0 + + + + M 5.2 - 2012 Jul 12, SANTA CRUZ ISLANDS + 5.2 + + 165.977,-10.752,0 + + + + M 5.2 - 2012 Jul 14, KURIL ISLANDS + 5.2 + + 151.329,45.54,0 + + + + M 5.2 - 2012 Jul 14, MYANMAR-INDIA BORDER REGION + 5.2 + + 94.48,25.424,0 + + + + M 5.2 - 2012 Jul 14, TONGA + 5.2 + + -173.13,-17.787,0 + + + + M 5.2 - 2012 Jul 15, KURIL ISLANDS + 5.2 + + 146.41,43.244,0 + + + + M 5.2 - 2012 Jul 17, KERMADEC ISLANDS REGION + 5.2 + + -178.991,-31.431,0 + + + + M 5.2 - 2012 Jul 21, OFFSHORE NORTHERN CALIFORNIA + 5.2 + + -125.331,40.412,0 + + + + M 5.2 - 2012 Jul 23, NEAR N COAST OF PAPUA, INDONESIA + 5.2 + + 135.414,-2.537,0 + + + + M 5.2 - 2012 Jul 24, OAXACA, MEXICO + 5.2 + + -98.307,16.266,0 + + + + M 5.2 - 2012 Jul 24, WESTERN IRAN + 5.2 + + 50.961,31.705,0 + + + + M 5.2 - 2012 Jul 26, TAJIKISTAN + 5.2 + + 74.008,38.313,0 + + + + M 5.2 - 2012 Jul 26, SOUTH OF FIJI ISLANDS + 5.2 + + -178.61,-26.442,0 + + + + M 5.2 - 2012 Jul 29, SOUTHERN SUMATRA, INDONESIA + 5.2 + + 104.418,-5.997,0 + + + + M 5.2 - 2012 Jul 31, SOUTHERN SUMATRA, INDONESIA + 5.2 + + 103.086,-4.769,0 + + + + M 5.2 - 2012 Aug 2, BOUGAINVILLE REGION, P.N.G. + 5.2 + + 154.833,-6.319,0 + + + + M 5.2 - 2012 Aug 2, EAST OF NORTH ISLAND, N.Z. + 5.2 + + -179.786,-35.56,0 + + + + M 5.2 - 2012 Aug 7, ATACAMA, CHILE + 5.2 + + -70.803,-27.801,0 + + + + M 5.2 - 2012 Aug 8, ALASKA PENINSULA + 5.2 + + -161.214,54.881,0 + + + + M 5.2 - 2012 Aug 8, SOUTH SANDWICH ISLANDS REGION + 5.2 + + -26.056,-55.769,0 + + + + M 5.2 - 2012 Aug 9, SOUTHERN MID-ATLANTIC RIDGE + 5.2 + + -15.876,-33.145,0 + + + + M 5.2 - 2012 Aug 10, WEST CHILE RISE + 5.2 + + -83.235,-42.814,0 + + + + M 5.2 - 2012 Aug 11, NORTHERN MID-ATLANTIC RIDGE + 5.2 + + -31.541,52.149,0 + + + + M 5.2 - 2012 Aug 14, SOUTH SANDWICH ISLANDS REGION + 5.2 + + -26.108,-59.203,0 + + + + M 5.2 - 2012 Aug 15, REYKJANES RIDGE + 5.2 + + -32.646,57.886,0 + + + + M 5.2 - 2012 Aug 17, CENTRAL MID-ATLANTIC RIDGE + 5.2 + + -18.707,-0.353,0 + + + + M 5.2 - 2012 Aug 19, NORTHERN SUMATRA, INDONESIA + 5.2 + + 94.753,5.063,0 + + + + M 5.2 - 2012 Aug 21, SOUTHERN SUMATRA, INDONESIA + 5.2 + + 102.995,-4.749,0 + + + + M 5.2 - 2012 Aug 22, SOUTH OF FIJI ISLANDS + 5.2 + + 179.107,-24.085,0 + + + + M 5.2 - 2012 Aug 23, SOUTH SANDWICH ISLANDS REGION + 5.2 + + -25.452,-58.895,0 + + + + M 5.2 - 2012 Aug 25, NEAR EAST COAST OF HONSHU, JAPAN + 5.2 + + 140.969,36.962,0 + + + + M 5.2 - 2012 Aug 27, GULF OF CALIFORNIA + 5.2 + + -113.89,30.551,0 + + + + M 5.2 - 2012 Aug 27, NORTHERN SUMATRA, INDONESIA + 5.2 + + 99.031,2.376,0 + + + + M 5.2 - 2012 Aug 27, ANDAMAN ISLANDS, INDIA REGION + 5.2 + + 92.802,10.21,0 + + + + M 5.2 - 2012 Aug 27, GULF OF CALIFORNIA + 5.2 + + -113.909,30.545,0 + + + + M 5.2 - 2012 Aug 30, CERAM SEA, INDONESIA + 5.2 + + 131.002,-3.432,0 + + + + M 5.2 - 2012 Aug 30, JAN MAYEN ISLAND REGION + 5.2 + + -7.936,70.94,0 + + + + M 5.2 - 2012 Aug 31, PHILIPPINE ISLANDS REGION + 5.2 + + 126.777,10.372,0 + + + + M 5.2 - 2012 Aug 31, PHILIPPINE ISLANDS REGION + 5.2 + + 126.916,10.456,0 + + + + M 5.2 - 2012 Aug 31, NEW BRITAIN REGION, P.N.G. + 5.2 + + 151.891,-4.95,0 + + + + M 5.2 - 2012 Aug 31, PHILIPPINE ISLANDS REGION + 5.2 + + 126.73,10.727,0 + + + + M 5.2 - 2012 Sep 1, TONGA + 5.2 + + -174.552,-21.623,0 + + + + M 5.2 - 2012 Sep 2, SVALBARD REGION + 5.2 + + 6.764,78.43,0 + + + + M 5.2 - 2012 Sep 4, PHILIPPINE ISLANDS REGION + 5.2 + + 126.701,10.535,0 + + + + M 5.2 - 2012 Sep 4, SOUTH OF JAVA, INDONESIA + 5.2 + + 113.822,-10.771,0 + + + + M 5.2 - 2012 Sep 4, SOUTH OF JAVA, INDONESIA + 5.2 + + 113.911,-10.652,0 + + + + M 5.2 - 2012 Sep 4, PHILIPPINE ISLANDS REGION + 5.2 + + 126.712,10.611,0 + + + + M 5.2 - 2012 Sep 6, SOUTHERN IRAN + 5.2 + + 53.879,26.942,0 + + + + M 5.2 - 2012 Sep 7, CHAGOS ARCHIPELAGO REGION + 5.2 + + 72.179,-6.877,0 + + + + M 5.2 - 2012 Sep 8, SOLOMON ISLANDS + 5.2 + + 160.404,-9.849,0 + + + + M 5.2 - 2012 Sep 9, KURIL ISLANDS + 5.2 + + 155.517,49.427,0 + + + + M 5.2 - 2012 Sep 10, ANDAMAN ISLANDS, INDIA REGION + 5.2 + + 93.616,10.459,0 + + + + M 5.2 - 2012 Sep 11, PHILIPPINE ISLANDS REGION + 5.2 + + 126.758,10.709,0 + + + + M 5.2 - 2012 Sep 12, SOLOMON ISLANDS + 5.2 + + 161.016,-10.11,0 + + + + M 5.2 - 2012 Sep 13, NEAR EAST COAST OF HONSHU, JAPAN + 5.2 + + 140.388,35.752,0 + + + + M 5.2 - 2012 Sep 16, COSTA RICA + 5.2 + + -85.459,10.168,0 + + + + M 5.2 - 2012 Sep 18, MOLUCCA SEA + 5.2 + + 125.849,1.336,0 + + + + M 5.2 - 2012 Sep 18, SOUTHWEST OF SUMATRA, INDONESIA + 5.2 + + 103.739,-6.169,0 + + + + M 5.2 - 2012 Sep 25, SOUTH OF AFRICA + 5.2 + + 25.583,-53.21,0 + + + + M 5.2 - 2012 Sep 25, SOUTH OF FIJI ISLANDS + 5.2 + + 178.327,-25.555,0 + + + + M 5.2 - 2012 Sep 25, HINDU KUSH REGION, AFGHANISTAN + 5.2 + + 69.211,36.277,0 + + + + M 5.2 - 2012 Sep 25, SOLOMON ISLANDS + 5.2 + + 159.746,-9.748,0 + + + + M 5.2 - 2012 Sep 28, SOLOMON ISLANDS + 5.2 + + 157.425,-8.93,0 + + + + M 5.2 - 2012 Oct 1, OFF COAST OF JALISCO, MEXICO + 5.2 + + -107.164,18.607,0 + + + + M 5.2 - 2012 Oct 1, OFF EAST COAST OF HONSHU, JAPAN + 5.2 + + 143.189,39.74,0 + + + + M 5.2 - 2012 Oct 2, ASSAM, INDIA + 5.2 + + 92.818,26.879,0 + + + + M 5.2 - 2012 Oct 10, SOUTHERN IRAN + 5.2 + + 52.49,29.33,0 + + + + M 5.2 - 2012 Oct 12, NEAR EAST COAST OF HONSHU, JAPAN + 5.2 + + 140.346,35.764,0 + + + + M 5.2 - 2012 Oct 15, FIJI REGION + 5.2 + + -178.251,-20.446,0 + + + + M 5.2 - 2012 Oct 22, SOUTH SANDWICH ISLANDS REGION + 5.2 + + -25.59,-56.301,0 + + + + M 5.2 - 2012 Oct 27, CARLSBERG RIDGE + 5.2 + + 57.091,9.82,0 + + + + M 5.2 - 2012 Oct 27, PHILIPPINE ISLANDS REGION + 5.2 + + 126.812,10.415,0 + + + + M 5.2 - 2012 Oct 28, QUEEN CHARLOTTE ISLANDS REGION + 5.2 + + -132.49,52.624,0 + + + + M 5.2 - 2012 Nov 1, KURIL ISLANDS + 5.2 + + 155.489,49.399,0 + + + + M 5.2 - 2012 Nov 5, SOUTHWEST INDIAN RIDGE + 5.2 + + 61.983,-28.775,0 + + + + M 5.2 - 2012 Nov 5, MOLUCCA SEA + 5.2 + + 125.236,-0.144,0 + + + + M 5.2 - 2012 Nov 8, WESTERN INDIAN-ANTARCTIC RIDGE + 5.2 + + 117.354,-49.699,0 + + + + M 5.2 - 2012 Nov 9, NEAR EAST COAST OF HONSHU, JAPAN + 5.2 + + 141.246,36.838,0 + + + + M 5.2 - 2012 Nov 9, SOUTH SANDWICH ISLANDS REGION + 5.2 + + -27.344,-56.391,0 + + + + M 5.2 - 2012 Nov 9, NIAS REGION, INDONESIA + 5.2 + + 97.464,0.886,0 + + + + M 5.2 - 2012 Nov 11, SANTA CRUZ ISLANDS REGION + 5.2 + + 164.828,-10.755,0 + + + + M 5.2 - 2012 Nov 12, SOUTH OF FIJI ISLANDS + 5.2 + + 178.919,-24.277,0 + + + + M 5.2 - 2012 Nov 14, TONGA + 5.2 + + -174.079,-20.739,0 + + + + M 5.2 - 2012 Nov 14, FIJI REGION + 5.2 + + 173.738,-14.484,0 + + + + M 5.2 - 2012 Nov 20, TAIWAN REGION + 5.2 + + 121.454,22.339,0 + + + + M 5.2 - 2012 Nov 21, OFFSHORE O'HIGGINS, CHILE + 5.2 + + -71.994,-33.916,0 + + + + M 5.2 - 2012 Nov 22, SOUTHERN SUMATRA, INDONESIA + 5.2 + + 102.826,-4.535,0 + + + + M 5.2 - 2012 Nov 27, PAPUA, INDONESIA + 5.2 + + 138.75,-2.712,0 + + + + M 5.2 - 2012 Dec 7, OFF EAST COAST OF HONSHU, JAPAN + 5.2 + + 143.93,37.325,0 + + + + M 5.2 - 2012 Dec 7, OFF EAST COAST OF HONSHU, JAPAN + 5.2 + + 143.762,37.739,0 + + + + M 5.2 - 2012 Dec 9, TONGA + 5.2 + + -174.22,-16.236,0 + + + + M 5.2 - 2012 Dec 10, BANDA SEA + 5.2 + + 129.904,-6.511,0 + + + + M 5.2 - 2012 Dec 11, VANUATU + 5.2 + + 167.669,-18.974,0 + + + + M 5.2 - 2012 Dec 14, OFFSHORE GUATEMALA + 5.2 + + -91.679,13.926,0 + + + + M 5.2 - 2012 Dec 15, NEAR EAST COAST OF HONSHU, JAPAN + 5.2 + + 141.205,37.311,0 + + + + M 5.2 - 2012 Dec 16, GUATEMALA + 5.2 + + -91.457,14.675,0 + + + + M 5.2 - 2012 Dec 16, ROTA REGION, N. MARIANA ISLANDS + 5.2 + + 146.733,14.185,0 + + + + M 5.2 - 2012 Dec 23, VANUATU + 5.2 + + 167.11,-13.086,0 + + + + M 5.2 - 2012 Dec 23, TURKEY-IRAN BORDER REGION + 5.2 + + 44.868,38.458,0 + + + + M 5.2 - 2012 Dec 23, KEPULAUAN TALAUD, INDONESIA + 5.2 + + 126.584,4.19,0 + + + + M 5.2 - 2012 Dec 25, BLACK SEA, OFFSHORE GEORGIA + 5.2 + + 40.974,42.436,0 + + + + M 5.2 - 2012 Dec 26, BIO-BIO, CHILE + 5.2 + + -73.267,-37.274,0 + + + + M 5.2 - 2012 Dec 27, SOUTHERN MID-ATLANTIC RIDGE + 5.2 + + -14.876,-12.396,0 + + + + M 5.2 - 2012 Dec 29, NEAR EAST COAST OF HONSHU, JAPAN + 5.2 + + 141.168,37.018,0 + + + + M 5.2 - 2012 Dec 30, SCOTIA SEA + 5.2 + + -36.887,-60.906,0 + + + + M 5.2 - 2012 Dec 30, MOLUCCA SEA + 5.2 + + 126.587,1.569,0 + + + + M 5.2 - 2012 Dec 30, CENTRAL PERU + 5.2 + + -70.938,-12.861,0 + + + + M 5.2 - 2012 Dec 31, BALLENY ISLANDS REGION + 5.2 + + 154.301,-61.623,0 + + + + M 5.1 - 2012 Jan 1, GUAM REGION + 5.1 + + 143.487,12.008,0 + + + + M 5.1 - 2012 Jan 1, SOUTH ISLAND OF NEW ZEALAND + 5.1 + + 172.852,-43.47,0 + + + + M 5.1 - 2012 Jan 1, GUAM REGION + 5.1 + + 143.607,12.018,0 + + + + M 5.1 - 2012 Jan 1, HALMAHERA, INDONESIA + 5.1 + + 128.368,2.205,0 + + + + M 5.1 - 2012 Jan 1, VANUATU + 5.1 + + 166.921,-14.381,0 + + + + M 5.1 - 2012 Jan 4, VANUATU + 5.1 + + 167.44,-14.748,0 + + + + M 5.1 - 2012 Jan 5, SOUTHERN SUMATRA, INDONESIA + 5.1 + + 99.069,-0.935,0 + + + + M 5.1 - 2012 Jan 6, SOUTHERN MID-ATLANTIC RIDGE + 5.1 + + -14.263,-14.092,0 + + + + M 5.1 - 2012 Jan 7, PACIFIC-ANTARCTIC RIDGE + 5.1 + + -166.854,-63.697,0 + + + + M 5.1 - 2012 Jan 7, TONGA + 5.1 + + -173.318,-17.549,0 + + + + M 5.1 - 2012 Jan 9, TONGA + 5.1 + + -174.142,-15.063,0 + + + + M 5.1 - 2012 Jan 10, OFF W COAST OF NORTHERN SUMATRA + 5.1 + + 92.937,2.386,0 + + + + M 5.1 - 2012 Jan 11, NORTHERN IRAN + 5.1 + + 52.775,36.328,0 + + + + M 5.1 - 2012 Jan 13, SOUTH OF KERMADEC ISLANDS + 5.1 + + -178.566,-32.809,0 + + + + M 5.1 - 2012 Jan 13, SIMEULUE, INDONESIA + 5.1 + + 96.273,2.405,0 + + + + M 5.1 - 2012 Jan 13, SOUTH OF KERMADEC ISLANDS + 5.1 + + -178.476,-32.882,0 + + + + M 5.1 - 2012 Jan 14, SOUTH ISLAND OF NEW ZEALAND + 5.1 + + 172.765,-43.538,0 + + + + M 5.1 - 2012 Jan 15, SOUTH SHETLAND ISLANDS + 5.1 + + -53.571,-61.33,0 + + + + M 5.1 - 2012 Jan 15, SOUTHERN MID-ATLANTIC RIDGE + 5.1 + + -12.912,-15.675,0 + + + + M 5.1 - 2012 Jan 16, SOUTH SANDWICH ISLANDS REGION + 5.1 + + -25.045,-56.718,0 + + + + M 5.1 - 2012 Jan 16, SOUTH OF KERMADEC ISLANDS + 5.1 + + -178.424,-33.33,0 + + + + M 5.1 - 2012 Jan 18, MOLUCCA SEA + 5.1 + + 126.806,-0.906,0 + + + + M 5.1 - 2012 Jan 18, SANTA CRUZ ISLANDS + 5.1 + + 165.478,-11.023,0 + + + + M 5.1 - 2012 Jan 19, SANTA CRUZ ISLANDS + 5.1 + + 165.477,-10.979,0 + + + + M 5.1 - 2012 Jan 19, NORTHEASTERN IRAN + 5.1 + + 58.835,36.288,0 + + + + M 5.1 - 2012 Jan 23, DOMINICAN REPUBLIC + 5.1 + + -70.077,19.542,0 + + + + M 5.1 - 2012 Jan 24, MINDANAO, PHILIPPINES + 5.1 + + 126.102,8.584,0 + + + + M 5.1 - 2012 Jan 25, FOX ISLANDS, ALEUTIAN ISLANDS + 5.1 + + -167.049,52.654,0 + + + + M 5.1 - 2012 Jan 25, OFF W. COAST OF S. ISLAND, N.Z. + 5.1 + + 165.714,-46.68,0 + + + + M 5.1 - 2012 Jan 25, NEW BRITAIN REGION, P.N.G. + 5.1 + + 152.136,-5.209,0 + + + + M 5.1 - 2012 Jan 27, NEAR N COAST OF PAPUA, INDONESIA + 5.1 + + 138.259,-1.452,0 + + + + M 5.1 - 2012 Jan 27, OFF W COAST OF NORTHERN SUMATRA + 5.1 + + 93.018,2.732,0 + + + + M 5.1 - 2012 Jan 27, SOUTH OF LOMBOK, INDONESIA + 5.1 + + 116.013,-10.369,0 + + + + M 5.1 - 2012 Jan 28, BABUYAN ISL REGION, PHILIPPINES + 5.1 + + 121.205,19.251,0 + + + + M 5.1 - 2012 Jan 28, POTOSI, BOLIVIA + 5.1 + + -66.436,-21.464,0 + + + + M 5.1 - 2012 Jan 28, SIMEULUE, INDONESIA + 5.1 + + 96.678,2.07,0 + + + + M 5.1 - 2012 Jan 28, KERMADEC ISLANDS, NEW ZEALAND + 5.1 + + -177.166,-29.428,0 + + + + M 5.1 - 2012 Jan 29, KYUSHU, JAPAN + 5.1 + + 131.806,32.588,0 + + + + M 5.1 - 2012 Jan 31, VANUATU + 5.1 + + 167.18,-14.255,0 + + + + M 5.1 - 2012 Feb 2, WESTERN INDIAN-ANTARCTIC RIDGE + 5.1 + + 126.049,-49.649,0 + + + + M 5.1 - 2012 Feb 2, VANUATU + 5.1 + + 167.53,-17.754,0 + + + + M 5.1 - 2012 Feb 2, VANUATU + 5.1 + + 167.32,-17.686,0 + + + + M 5.1 - 2012 Feb 2, VANUATU + 5.1 + + 167.429,-17.717,0 + + + + M 5.1 - 2012 Feb 2, VANUATU + 5.1 + + 167.287,-17.395,0 + + + + M 5.1 - 2012 Feb 2, VANUATU + 5.1 + + 167.209,-17.43,0 + + + + M 5.1 - 2012 Feb 2, VANUATU + 5.1 + + 167.327,-17.534,0 + + + + M 5.1 - 2012 Feb 4, TAIWAN REGION + 5.1 + + 122.602,24.699,0 + + + + M 5.1 - 2012 Feb 4, CENTRAL MID-ATLANTIC RIDGE + 5.1 + + -26.746,0.922,0 + + + + M 5.1 - 2012 Feb 5, FIJI REGION + 5.1 + + -177.987,-20.423,0 + + + + M 5.1 - 2012 Feb 8, MINAHASA, SULAWESI, INDONESIA + 5.1 + + 119.951,-0.462,0 + + + + M 5.1 - 2012 Feb 8, OFF COAST OF CHIAPAS, MEXICO + 5.1 + + -94.427,14.682,0 + + + + M 5.1 - 2012 Feb 9, SERAM, INDONESIA + 5.1 + + 130.789,-3.252,0 + + + + M 5.1 - 2012 Feb 9, SERAM, INDONESIA + 5.1 + + 130.694,-3.339,0 + + + + M 5.1 - 2012 Feb 9, CROZET ISLANDS REGION + 5.1 + + 44.526,-41.065,0 + + + + M 5.1 - 2012 Feb 9, PAPUA REGION, INDONESIA + 5.1 + + 140.72,-1.755,0 + + + + M 5.1 - 2012 Feb 9, NORTHERN XINJIANG, CHINA + 5.1 + + 92.985,44.742,0 + + + + M 5.1 - 2012 Feb 9, UTTARANCHAL, INDIA + 5.1 + + 78.282,30.986,0 + + + + M 5.1 - 2012 Feb 9, MACQUARIE ISLAND REGION + 5.1 + + 158.057,-58.307,0 + + + + M 5.1 - 2012 Feb 11, FIJI REGION + 5.1 + + -176.113,-20.991,0 + + + + M 5.1 - 2012 Feb 11, SOLOMON ISLANDS + 5.1 + + 160.274,-9.954,0 + + + + M 5.1 - 2012 Feb 13, SOUTH OF KERMADEC ISLANDS + 5.1 + + -178.851,-32.554,0 + + + + M 5.1 - 2012 Feb 14, SOUTHERN EAST PACIFIC RISE + 5.1 + + -116.529,-49.723,0 + + + + M 5.1 - 2012 Feb 14, NEAR EAST COAST OF HONSHU, JAPAN + 5.1 + + 141.642,36.16,0 + + + + M 5.1 - 2012 Feb 15, ANDREANOF ISLANDS, ALEUTIAN IS. + 5.1 + + -177.97,51.763,0 + + + + M 5.1 - 2012 Feb 17, VANUATU + 5.1 + + 168.847,-19.367,0 + + + + M 5.1 - 2012 Feb 18, NEW BRITAIN REGION, P.N.G. + 5.1 + + 151.415,-5.285,0 + + + + M 5.1 - 2012 Feb 20, TONGA REGION + 5.1 + + -172.96,-17.678,0 + + + + M 5.1 - 2012 Feb 22, VANUATU + 5.1 + + 167.051,-17.868,0 + + + + M 5.1 - 2012 Feb 23, NEW BRITAIN REGION, P.N.G. + 5.1 + + 151.926,-5.197,0 + + + + M 5.1 - 2012 Feb 23, OFF COAST OF CHIAPAS, MEXICO + 5.1 + + -93.37,14.16,0 + + + + M 5.1 - 2012 Feb 23, KERMADEC ISLANDS REGION + 5.1 + + -176.185,-29.231,0 + + + + M 5.1 - 2012 Feb 25, MAUG ISLANDS REG, N. MARIANA IS. + 5.1 + + 145.747,19.122,0 + + + + M 5.1 - 2012 Feb 25, SOUTH OF FIJI ISLANDS + 5.1 + + 179.534,-25.686,0 + + + + M 5.1 - 2012 Feb 25, SAMAR, PHILIPPINES + 5.1 + + 125.782,11.774,0 + + + + M 5.1 - 2012 Feb 26, SOUTHWESTERN SIBERIA, RUSSIA + 5.1 + + 96.084,51.693,0 + + + + M 5.1 - 2012 Feb 26, SOUTH OF FIJI ISLANDS + 5.1 + + -177.222,-24.869,0 + + + + M 5.1 - 2012 Feb 26, SOUTH OF FIJI ISLANDS + 5.1 + + -177.205,-24.672,0 + + + + M 5.1 - 2012 Feb 26, SOUTH OF FIJI ISLANDS + 5.1 + + -177.305,-24.849,0 + + + + M 5.1 - 2012 Feb 27, SOUTH OF FIJI ISLANDS + 5.1 + + -177.123,-24.757,0 + + + + M 5.1 - 2012 Feb 27, SOUTH OF FIJI ISLANDS + 5.1 + + -177.229,-24.688,0 + + + + M 5.1 - 2012 Feb 28, KURIL ISLANDS + 5.1 + + 156.1,49.262,0 + + + + M 5.1 - 2012 Feb 29, SANTA CRUZ ISLANDS + 5.1 + + 166.487,-12.543,0 + + + + M 5.1 - 2012 Feb 29, KURIL ISLANDS + 5.1 + + 156.103,49.259,0 + + + + M 5.1 - 2012 Mar 1, VANUATU + 5.1 + + 167.45,-17.893,0 + + + + M 5.1 - 2012 Mar 2, RAT ISLANDS, ALEUTIAN ISLANDS + 5.1 + + 178.588,52.228,0 + + + + M 5.1 - 2012 Mar 3, SOUTHEAST OF LOYALTY ISLANDS + 5.1 + + 170.307,-21.994,0 + + + + M 5.1 - 2012 Mar 4, TONGA REGION + 5.1 + + -174.798,-22.309,0 + + + + M 5.1 - 2012 Mar 4, SOUTHERN SUMATRA, INDONESIA + 5.1 + + 102.706,-4.323,0 + + + + M 5.1 - 2012 Mar 5, SOUTHEAST OF LOYALTY ISLANDS + 5.1 + + 170.343,-21.591,0 + + + + M 5.1 - 2012 Mar 5, NORTHERN SUMATRA, INDONESIA + 5.1 + + 97.062,4.197,0 + + + + M 5.1 - 2012 Mar 5, HARYANA - DELHI REGION, INDIA + 5.1 + + 76.649,28.809,0 + + + + M 5.1 - 2012 Mar 5, KEPULAUAN BABAR, INDONESIA + 5.1 + + 129.212,-7.076,0 + + + + M 5.1 - 2012 Mar 7, VANUATU + 5.1 + + 168.194,-19.571,0 + + + + M 5.1 - 2012 Mar 8, MINDORO, PHILIPPINES + 5.1 + + 120.556,13.592,0 + + + + M 5.1 - 2012 Mar 8, IRAN-IRAQ BORDER REGION + 5.1 + + 46.957,32.874,0 + + + + M 5.1 - 2012 Mar 13, VANUATU + 5.1 + + 166.983,-17.599,0 + + + + M 5.1 - 2012 Mar 19, MINAHASA, SULAWESI, INDONESIA + 5.1 + + 119.927,-0.882,0 + + + + M 5.1 - 2012 Mar 19, KAMCHATKA PENINSULA, RUSSIA + 5.1 + + 164.724,58.864,0 + + + + M 5.1 - 2012 Mar 20, OAXACA, MEXICO + 5.1 + + -98.22,16.228,0 + + + + M 5.1 - 2012 Mar 20, OAXACA, MEXICO + 5.1 + + -97.987,16.478,0 + + + + M 5.1 - 2012 Mar 20, TONGA REGION + 5.1 + + -175.753,-23.882,0 + + + + M 5.1 - 2012 Mar 22, KEPULAUAN SANGIHE, INDONESIA + 5.1 + + 125.859,3.513,0 + + + + M 5.1 - 2012 Mar 22, OAXACA, MEXICO + 5.1 + + -98.343,16.334,0 + + + + M 5.1 - 2012 Mar 25, FIJI REGION + 5.1 + + -178.774,-18.638,0 + + + + M 5.1 - 2012 Mar 30, NEAR EAST COAST OF HONSHU, JAPAN + 5.1 + + 141.244,37.539,0 + + + + M 5.1 - 2012 Mar 30, OFF EAST COAST OF HONSHU, JAPAN + 5.1 + + 144.807,40.764,0 + + + + M 5.1 - 2012 Mar 31, TONGA + 5.1 + + -175.234,-20.326,0 + + + + M 5.1 - 2012 Apr 6, KEP. MENTAWAI REGION, INDONESIA + 5.1 + + 100.452,-3.346,0 + + + + M 5.1 - 2012 Apr 11, OFF W COAST OF NORTHERN SUMATRA + 5.1 + + 90.062,2.594,0 + + + + M 5.1 - 2012 Apr 11, OFF W COAST OF NORTHERN SUMATRA + 5.1 + + 92.482,0.604,0 + + + + M 5.1 - 2012 Apr 11, OFF W COAST OF NORTHERN SUMATRA + 5.1 + + 92.493,2.235,0 + + + + M 5.1 - 2012 Apr 11, OFF W COAST OF NORTHERN SUMATRA + 5.1 + + 92.631,1.347,0 + + + + M 5.1 - 2012 Apr 11, OFF W COAST OF NORTHERN SUMATRA + 5.1 + + 92.797,3.163,0 + + + + M 5.1 - 2012 Apr 11, OFF W COAST OF NORTHERN SUMATRA + 5.1 + + 92.626,2.583,0 + + + + M 5.1 - 2012 Apr 11, NORTH INDIAN OCEAN + 5.1 + + 89.933,2.833,0 + + + + M 5.1 - 2012 Apr 11, OFF W COAST OF NORTHERN SUMATRA + 5.1 + + 90.164,2.674,0 + + + + M 5.1 - 2012 Apr 11, OFF W COAST OF NORTHERN SUMATRA + 5.1 + + 92.863,3.368,0 + + + + M 5.1 - 2012 Apr 11, OFF W COAST OF NORTHERN SUMATRA + 5.1 + + 92.496,0.619,0 + + + + M 5.1 - 2012 Apr 12, OFF W COAST OF NORTHERN SUMATRA + 5.1 + + 92.158,0.252,0 + + + + M 5.1 - 2012 Apr 13, NEAR EAST COAST OF HONSHU, JAPAN + 5.1 + + 141.151,37.022,0 + + + + M 5.1 - 2012 Apr 14, OFF W COAST OF NORTHERN SUMATRA + 5.1 + + 90.347,2.589,0 + + + + M 5.1 - 2012 Apr 17, NORTHERN SUMATRA, INDONESIA + 5.1 + + 94.621,5.373,0 + + + + M 5.1 - 2012 Apr 18, SOUTHEASTERN IRAN + 5.1 + + 58.063,27.941,0 + + + + M 5.1 - 2012 Apr 18, NEAR N COAST OF PAPUA, INDONESIA + 5.1 + + 131.893,-0.545,0 + + + + M 5.1 - 2012 Apr 18, IRAN-IRAQ BORDER REGION + 5.1 + + 47.004,32.506,0 + + + + M 5.1 - 2012 Apr 20, IRAN-IRAQ BORDER REGION + 5.1 + + 47.023,32.511,0 + + + + M 5.1 - 2012 Apr 22, NORTH INDIAN OCEAN + 5.1 + + 91.745,1.379,0 + + + + M 5.1 - 2012 Apr 23, SOUTH OF TONGA + 5.1 + + -175.993,-24.008,0 + + + + M 5.1 - 2012 Apr 24, NORTH INDIAN OCEAN + 5.1 + + 91.724,1.154,0 + + + + M 5.1 - 2012 Apr 25, NICOBAR ISLANDS, INDIA REGION + 5.1 + + 93.882,8.826,0 + + + + M 5.1 - 2012 Apr 26, HOKKAIDO, JAPAN REGION + 5.1 + + 141.818,41.485,0 + + + + M 5.1 - 2012 Apr 27, SULAWESI, INDONESIA + 5.1 + + 121.913,-2.662,0 + + + + M 5.1 - 2012 May 1, SULAWESI, INDONESIA + 5.1 + + 121.906,-2.613,0 + + + + M 5.1 - 2012 May 1, KERMADEC ISLANDS REGION + 5.1 + + -175.874,-30.267,0 + + + + M 5.1 - 2012 May 2, SOUTH OF FIJI ISLANDS + 5.1 + + -176.175,-24.331,0 + + + + M 5.1 - 2012 May 4, NORTH INDIAN OCEAN + 5.1 + + 89.719,2.001,0 + + + + M 5.1 - 2012 May 5, NEAR EAST COAST OF HONSHU, JAPAN + 5.1 + + 141.628,38.182,0 + + + + M 5.1 - 2012 May 11, IZU ISLANDS, JAPAN REGION + 5.1 + + 138.61,30.669,0 + + + + M 5.1 - 2012 May 14, SOUTHERN IRAN + 5.1 + + 57.722,27.955,0 + + + + M 5.1 - 2012 May 15, NORTH INDIAN OCEAN + 5.1 + + 89.561,2.71,0 + + + + M 5.1 - 2012 May 17, SOUTHERN IRAN + 5.1 + + 53.851,26.942,0 + + + + M 5.1 - 2012 May 18, AZERBAIJAN + 5.1 + + 46.789,41.439,0 + + + + M 5.1 - 2012 May 20, MARIANA ISLANDS REGION + 5.1 + + 147.257,17.017,0 + + + + M 5.1 - 2012 May 20, EAST OF KURIL ISLANDS + 5.1 + + 151.761,44.688,0 + + + + M 5.1 - 2012 May 20, OFF EAST COAST OF HONSHU, JAPAN + 5.1 + + 143.197,39.577,0 + + + + M 5.1 - 2012 May 20, NEAR N COAST OF NEW GUINEA, PNG. + 5.1 + + 143.917,-3.188,0 + + + + M 5.1 - 2012 May 20, OFF EAST COAST OF HONSHU, JAPAN + 5.1 + + 143.619,39.556,0 + + + + M 5.1 - 2012 May 22, MOLUCCA SEA + 5.1 + + 126.619,2.41,0 + + + + M 5.1 - 2012 May 23, ROTA REGION, N. MARIANA ISLANDS + 5.1 + + 145.413,14.065,0 + + + + M 5.1 - 2012 May 26, LOYALTY ISLANDS + 5.1 + + 168.626,-20.796,0 + + + + M 5.1 - 2012 May 26, NORTH OF SVALBARD + 5.1 + + 32.186,85.939,0 + + + + M 5.1 - 2012 May 28, NEAR S. COAST OF HONSHU, JAPAN + 5.1 + + 139.95,35.707,0 + + + + M 5.1 - 2012 May 29, NORTHERN ITALY + 5.1 + + 10.955,44.873,0 + + + + M 5.1 - 2012 Jun 1, NEAR S. COAST OF HONSHU, JAPAN + 5.1 + + 139.642,35.98,0 + + + + M 5.1 - 2012 Jun 3, NORTHERN ITALY + 5.1 + + 10.94,44.9,0 + + + + M 5.1 - 2012 Jun 5, NORTHERN MID-ATLANTIC RIDGE + 5.1 + + -44.854,13.501,0 + + + + M 5.1 - 2012 Jun 6, SOUTHWESTERN SIBERIA, RUSSIA + 5.1 + + 96.037,51.706,0 + + + + M 5.1 - 2012 Jun 7, MOLUCCA SEA + 5.1 + + 126.477,1.602,0 + + + + M 5.1 - 2012 Jun 9, CERAM SEA, INDONESIA + 5.1 + + 127.671,-2.987,0 + + + + M 5.1 - 2012 Jun 9, SOUTH SANDWICH ISLANDS REGION + 5.1 + + -26.424,-60.577,0 + + + + M 5.1 - 2012 Jun 10, SOUTH SANDWICH ISLANDS REGION + 5.1 + + -27.674,-55.981,0 + + + + M 5.1 - 2012 Jun 12, KERMADEC ISLANDS REGION + 5.1 + + -178.657,-31.696,0 + + + + M 5.1 - 2012 Jun 14, SOUTH OF FIJI ISLANDS + 5.1 + + 179.633,-22.25,0 + + + + M 5.1 - 2012 Jun 16, MAUG ISLANDS REG, N. MARIANA IS. + 5.1 + + 145.401,20.632,0 + + + + M 5.1 - 2012 Jun 17, SOUTH SANDWICH ISLANDS REGION + 5.1 + + -26.603,-57.124,0 + + + + M 5.1 - 2012 Jun 18, HALMAHERA, INDONESIA + 5.1 + + 129.203,2.035,0 + + + + M 5.1 - 2012 Jun 19, KEP. MENTAWAI REGION, INDONESIA + 5.1 + + 100.99,-2.921,0 + + + + M 5.1 - 2012 Jun 22, SOUTH OF KERMADEC ISLANDS + 5.1 + + -178.33,-32.979,0 + + + + M 5.1 - 2012 Jun 24, SOUTH SANDWICH ISLANDS REGION + 5.1 + + -27.611,-60.228,0 + + + + M 5.1 - 2012 Jun 25, SOUTH OF KERMADEC ISLANDS + 5.1 + + -178.051,-32.627,0 + + + + M 5.1 - 2012 Jun 27, VOLCANO ISLANDS, JAPAN REGION + 5.1 + + 143.482,23.126,0 + + + + M 5.1 - 2012 Jul 1, NORTHEASTERN IRAN + 5.1 + + 59.927,34.481,0 + + + + M 5.1 - 2012 Jul 3, NORTHERN PERU + 5.1 + + -76.15,-4.035,0 + + + + M 5.1 - 2012 Jul 4, KERMADEC ISLANDS, NEW ZEALAND + 5.1 + + -178.169,-30.749,0 + + + + M 5.1 - 2012 Jul 7, KURIL ISLANDS + 5.1 + + 151.232,45.465,0 + + + + M 5.1 - 2012 Jul 7, DOMINICAN REPUBLIC + 5.1 + + -71.136,18.243,0 + + + + M 5.1 - 2012 Jul 9, MYANMAR + 5.1 + + 96.529,25.347,0 + + + + M 5.1 - 2012 Jul 10, SOUTH OF FIJI ISLANDS + 5.1 + + -176.408,-25.142,0 + + + + M 5.1 - 2012 Jul 11, KURIL ISLANDS + 5.1 + + 151.435,45.377,0 + + + + M 5.1 - 2012 Jul 11, GALAPAGOS ISLANDS REGION + 5.1 + + -90.855,1.582,0 + + + + M 5.1 - 2012 Jul 13, FIJI REGION + 5.1 + + -178.551,-18.273,0 + + + + M 5.1 - 2012 Jul 13, SOUTHERN PERU + 5.1 + + -73.172,-15.232,0 + + + + M 5.1 - 2012 Jul 17, SOUTHERN EAST PACIFIC RISE + 5.1 + + -115.177,-23.496,0 + + + + M 5.1 - 2012 Jul 18, OFFSHORE TARAPACA, CHILE + 5.1 + + -70.365,-20.693,0 + + + + M 5.1 - 2012 Jul 20, KODIAK ISLAND REGION, ALASKA + 5.1 + + -153.542,56.595,0 + + + + M 5.1 - 2012 Jul 21, OFFSHORE NORTHERN CALIFORNIA + 5.1 + + -125.528,40.385,0 + + + + M 5.1 - 2012 Jul 22, MYANMAR + 5.1 + + 96.427,24.998,0 + + + + M 5.1 - 2012 Jul 22, HOKKAIDO, JAPAN REGION + 5.1 + + 142.848,42.552,0 + + + + M 5.1 - 2012 Jul 24, SANTA CRUZ ISLANDS + 5.1 + + 166.416,-12.042,0 + + + + M 5.1 - 2012 Aug 1, EAST OF NORTH ISLAND, N.Z. + 5.1 + + -179.679,-35.663,0 + + + + M 5.1 - 2012 Aug 2, EAST OF NORTH ISLAND, N.Z. + 5.1 + + -179.6,-37.584,0 + + + + M 5.1 - 2012 Aug 2, MYANMAR + 5.1 + + 96.324,26.103,0 + + + + M 5.1 - 2012 Aug 3, ROSS SEA + 5.1 + + 164.067,-76.313,0 + + + + M 5.1 - 2012 Aug 3, SOUTHERN MID-ATLANTIC RIDGE + 5.1 + + -13.831,-25.807,0 + + + + M 5.1 - 2012 Aug 4, SOUTHERN SUMATRA, INDONESIA + 5.1 + + 100.471,-1.758,0 + + + + M 5.1 - 2012 Aug 4, EAST OF NORTH ISLAND, N.Z. + 5.1 + + -179.752,-35.779,0 + + + + M 5.1 - 2012 Aug 6, SOUTHWEST OF AFRICA + 5.1 + + 13.771,-52.261,0 + + + + M 5.1 - 2012 Aug 10, NIAS REGION, INDONESIA + 5.1 + + 96.965,1.901,0 + + + + M 5.1 - 2012 Aug 11, SOUTHERN XINJIANG, CHINA + 5.1 + + 78.154,39.963,0 + + + + M 5.1 - 2012 Aug 11, NORTHWESTERN IRAN + 5.1 + + 46.759,38.482,0 + + + + M 5.1 - 2012 Aug 14, NORTHWESTERN IRAN + 5.1 + + 46.79,38.45,0 + + + + M 5.1 - 2012 Aug 16, CENTRAL MID-ATLANTIC RIDGE + 5.1 + + -18.759,-0.269,0 + + + + M 5.1 - 2012 Aug 20, NEAR EAST COAST OF HONSHU, JAPAN + 5.1 + + 141.323,36.927,0 + + + + M 5.1 - 2012 Aug 21, SOUTHWEST OF SUMATRA, INDONESIA + 5.1 + + 92.008,-0.177,0 + + + + M 5.1 - 2012 Aug 22, TONGA + 5.1 + + -173.661,-20.038,0 + + + + M 5.1 - 2012 Aug 27, OFFSHORE EL SALVADOR + 5.1 + + -88.399,12.76,0 + + + + M 5.1 - 2012 Aug 27, NEAR COAST OF NICARAGUA + 5.1 + + -88.282,12.172,0 + + + + M 5.1 - 2012 Aug 29, VANUATU + 5.1 + + 168.334,-17.61,0 + + + + M 5.1 - 2012 Aug 30, KEPULAUAN BARAT DAYA, INDONESIA + 5.1 + + 128.647,-7.806,0 + + + + M 5.1 - 2012 Aug 31, PHILIPPINE ISLANDS REGION + 5.1 + + 126.705,11.026,0 + + + + M 5.1 - 2012 Aug 31, SOUTH SANDWICH ISLANDS REGION + 5.1 + + -27.493,-55.804,0 + + + + M 5.1 - 2012 Aug 31, PHILIPPINE ISLANDS REGION + 5.1 + + 126.867,10.977,0 + + + + M 5.1 - 2012 Sep 1, NORTHERN COLOMBIA + 5.1 + + -72.919,6.719,0 + + + + M 5.1 - 2012 Sep 2, EASTERN IRAN + 5.1 + + 59.897,33.474,0 + + + + M 5.1 - 2012 Sep 3, PHILIPPINE ISLANDS REGION + 5.1 + + 126.393,10.338,0 + + + + M 5.1 - 2012 Sep 5, TAIWAN REGION + 5.1 + + 122.341,24.026,0 + + + + M 5.1 - 2012 Sep 5, GULF OF ADEN + 5.1 + + 46.238,12.084,0 + + + + M 5.1 - 2012 Sep 8, MOLUCCA SEA + 5.1 + + 126.691,2.387,0 + + + + M 5.1 - 2012 Sep 9, KURIL ISLANDS + 5.1 + + 151.322,45.291,0 + + + + M 5.1 - 2012 Sep 10, KEPULAUAN TALAUD, INDONESIA + 5.1 + + 126.132,3.999,0 + + + + M 5.1 - 2012 Sep 11, SAN JUAN, ARGENTINA + 5.1 + + -68.35,-31.875,0 + + + + M 5.1 - 2012 Sep 12, HINDU KUSH REGION, AFGHANISTAN + 5.1 + + 71.442,36.697,0 + + + + M 5.1 - 2012 Sep 13, SOUTH OF JAVA, INDONESIA + 5.1 + + 113.98,-10.901,0 + + + + M 5.1 - 2012 Sep 13, NORTH OF SEVERNAYA ZEMLYA + 5.1 + + 116.863,82.899,0 + + + + M 5.1 - 2012 Sep 14, SOUTHERN MID-ATLANTIC RIDGE + 5.1 + + -16.021,-39.644,0 + + + + M 5.1 - 2012 Sep 15, SAMAR, PHILIPPINES + 5.1 + + 125.524,12.532,0 + + + + M 5.1 - 2012 Sep 18, KODIAK ISLAND REGION, ALASKA + 5.1 + + -154.142,56.937,0 + + + + M 5.1 - 2012 Sep 20, NEW BRITAIN REGION, P.N.G. + 5.1 + + 149.845,-5.691,0 + + + + M 5.1 - 2012 Sep 20, OFF EAST COAST OF HONSHU, JAPAN + 5.1 + + 143.344,39.607,0 + + + + M 5.1 - 2012 Sep 22, SAKHALIN, RUSSIA + 5.1 + + 141.915,46.078,0 + + + + M 5.1 - 2012 Sep 24, MINDANAO, PHILIPPINES + 5.1 + + 126.54,5.629,0 + + + + M 5.1 - 2012 Sep 26, TONGA + 5.1 + + -174.328,-21.205,0 + + + + M 5.1 - 2012 Sep 29, LA PAZ, BOLIVIA + 5.1 + + -69.405,-17.182,0 + + + + M 5.1 - 2012 Oct 1, NEAR EAST COAST OF HONSHU, JAPAN + 5.1 + + 141.028,36.916,0 + + + + M 5.1 - 2012 Oct 2, TONGA + 5.1 + + -174.407,-21.155,0 + + + + M 5.1 - 2012 Oct 4, MINDORO, PHILIPPINES + 5.1 + + 120.664,13.249,0 + + + + M 5.1 - 2012 Oct 9, NEAR N COAST OF PAPUA, INDONESIA + 5.1 + + 139.107,-2.706,0 + + + + M 5.1 - 2012 Oct 11, SOUTH SANDWICH ISLANDS REGION + 5.1 + + -25.71,-56.316,0 + + + + M 5.1 - 2012 Oct 13, SOLOMON ISLANDS + 5.1 + + 162.831,-11.106,0 + + + + M 5.1 - 2012 Oct 13, TONGA + 5.1 + + -173.991,-19.963,0 + + + + M 5.1 - 2012 Oct 13, TONGA + 5.1 + + -174.479,-16.886,0 + + + + M 5.1 - 2012 Oct 14, KURIL ISLANDS + 5.1 + + 154.429,48.345,0 + + + + M 5.1 - 2012 Oct 14, HINDU KUSH REGION, AFGHANISTAN + 5.1 + + 69.216,36.167,0 + + + + M 5.1 - 2012 Oct 14, SOLOMON ISLANDS + 5.1 + + 161.415,-10.271,0 + + + + M 5.1 - 2012 Oct 15, OFF EAST COAST OF KAMCHATKA + 5.1 + + 159.519,51.81,0 + + + + M 5.1 - 2012 Oct 18, FLORES REGION, INDONESIA + 5.1 + + 123.671,-8.059,0 + + + + M 5.1 - 2012 Oct 19, EASTERN MEDITERRANEAN SEA + 5.1 + + 30.978,32.552,0 + + + + M 5.1 - 2012 Oct 19, SOUTH OF FIJI ISLANDS + 5.1 + + 176.649,-21.039,0 + + + + M 5.1 - 2012 Oct 21, OFFSHORE EL SALVADOR + 5.1 + + -88.332,12.59,0 + + + + M 5.1 - 2012 Oct 22, FED. STATES OF MICRONESIA REGION + 5.1 + + 147.678,2.893,0 + + + + M 5.1 - 2012 Oct 23, ANTOFAGASTA, CHILE + 5.1 + + -70.55,-25.767,0 + + + + M 5.1 - 2012 Oct 23, EASTERN NEW GUINEA REG., P.N.G. + 5.1 + + 147.873,-6.579,0 + + + + M 5.1 - 2012 Oct 26, SANTA CRUZ ISLANDS + 5.1 + + 165.484,-11.58,0 + + + + M 5.1 - 2012 Oct 28, QUEEN CHARLOTTE ISLANDS REGION + 5.1 + + -132.395,52.735,0 + + + + M 5.1 - 2012 Oct 28, QUEEN CHARLOTTE ISLANDS REGION + 5.1 + + -132.01,52.243,0 + + + + M 5.1 - 2012 Oct 28, QUEEN CHARLOTTE ISLANDS REGION + 5.1 + + -132.478,52.647,0 + + + + M 5.1 - 2012 Oct 29, NEAR N COAST OF PAPUA, INDONESIA + 5.1 + + 132.789,-0.457,0 + + + + M 5.1 - 2012 Oct 30, NEW BRITAIN REGION, P.N.G. + 5.1 + + 151.873,-4.563,0 + + + + M 5.1 - 2012 Oct 30, TONGA + 5.1 + + -174.714,-18.275,0 + + + + M 5.1 - 2012 Nov 1, ANDREANOF ISLANDS, ALEUTIAN IS. + 5.1 + + -179.699,51.011,0 + + + + M 5.1 - 2012 Nov 3, TONGA + 5.1 + + -173.617,-16.662,0 + + + + M 5.1 - 2012 Nov 5, KEPULAUAN SANGIHE, INDONESIA + 5.1 + + 125.144,4.684,0 + + + + M 5.1 - 2012 Nov 7, CENTRAL EAST PACIFIC RISE + 5.1 + + -108.73,-8.962,0 + + + + M 5.1 - 2012 Nov 7, OFFSHORE GUATEMALA + 5.1 + + -92.193,13.967,0 + + + + M 5.1 - 2012 Nov 8, SOUTH INDIAN OCEAN + 5.1 + + 53.497,-36.132,0 + + + + M 5.1 - 2012 Nov 8, VANUATU + 5.1 + + 167.194,-14.663,0 + + + + M 5.1 - 2012 Nov 8, TONGA + 5.1 + + -173.33,-18.807,0 + + + + M 5.1 - 2012 Nov 10, JAVA, INDONESIA + 5.1 + + 106.666,-7.373,0 + + + + M 5.1 - 2012 Nov 10, OFFSHORE GUATEMALA + 5.1 + + -92.224,13.815,0 + + + + M 5.1 - 2012 Nov 11, KURIL ISLANDS + 5.1 + + 155.213,49.357,0 + + + + M 5.1 - 2012 Nov 12, TONGA + 5.1 + + -173.09,-17.631,0 + + + + M 5.1 - 2012 Nov 13, OFF COAST OF ECUADOR + 5.1 + + -81.577,-1.736,0 + + + + M 5.1 - 2012 Nov 13, QUEEN CHARLOTTE ISLANDS REGION + 5.1 + + -132.033,52.705,0 + + + + M 5.1 - 2012 Nov 17, SOUTHEAST OF LOYALTY ISLANDS + 5.1 + + 171.578,-22.278,0 + + + + M 5.1 - 2012 Nov 18, MINDANAO, PHILIPPINES + 5.1 + + 125.809,5.979,0 + + + + M 5.1 - 2012 Nov 19, EAST OF SOUTH SANDWICH ISLANDS + 5.1 + + -18.067,-59.391,0 + + + + M 5.1 - 2012 Nov 19, NEW BRITAIN REGION, P.N.G. + 5.1 + + 151.625,-5.793,0 + + + + M 5.1 - 2012 Nov 19, OFFSHORE O'HIGGINS, CHILE + 5.1 + + -72.17,-33.928,0 + + + + M 5.1 - 2012 Nov 21, OFFSHORE O'HIGGINS, CHILE + 5.1 + + -72.1,-33.931,0 + + + + M 5.1 - 2012 Nov 23, LUZON, PHILIPPINES + 5.1 + + 120.708,14.069,0 + + + + M 5.1 - 2012 Nov 24, NEAR EAST COAST OF HONSHU, JAPAN + 5.1 + + 141.702,38.23,0 + + + + M 5.1 - 2012 Nov 26, PHILIPPINE ISLANDS REGION + 5.1 + + 126.702,10.438,0 + + + + M 5.1 - 2012 Nov 26, ANDAMAN ISLANDS, INDIA REGION + 5.1 + + 93.637,13.85,0 + + + + M 5.1 - 2012 Nov 27, KURIL ISLANDS + 5.1 + + 154.943,48.17,0 + + + + M 5.1 - 2012 Nov 27, SOUTH SANDWICH ISLANDS REGION + 5.1 + + -27.281,-56.082,0 + + + + M 5.1 - 2012 Nov 28, BONIN ISLANDS, JAPAN REGION + 5.1 + + 143.194,27.243,0 + + + + M 5.1 - 2012 Nov 29, FIJI REGION + 5.1 + + -178.772,-21.106,0 + + + + M 5.1 - 2012 Dec 2, OFF COAST OF CENTRAL AMERICA + 5.1 + + -88.988,11.852,0 + + + + M 5.1 - 2012 Dec 2, TONGA + 5.1 + + -174.214,-20.69,0 + + + + M 5.1 - 2012 Dec 5, FIJI REGION + 5.1 + + -178.95,-20.781,0 + + + + M 5.1 - 2012 Dec 6, OFF W COAST OF NORTHERN SUMATRA + 5.1 + + 90.434,2.421,0 + + + + M 5.1 - 2012 Dec 7, OFF EAST COAST OF HONSHU, JAPAN + 5.1 + + 143.633,37.813,0 + + + + M 5.1 - 2012 Dec 7, OFF EAST COAST OF HONSHU, JAPAN + 5.1 + + 143.771,37.654,0 + + + + M 5.1 - 2012 Dec 8, NEAR S COAST OF NEW GUINEA, PNG. + 5.1 + + 144.006,-7.235,0 + + + + M 5.1 - 2012 Dec 8, TAIWAN REGION + 5.1 + + 122.35,25.748,0 + + + + M 5.1 - 2012 Dec 9, OFF EAST COAST OF HONSHU, JAPAN + 5.1 + + 143.617,37.744,0 + + + + M 5.1 - 2012 Dec 11, OFF EAST COAST OF HONSHU, JAPAN + 5.1 + + 143.833,37.633,0 + + + + M 5.1 - 2012 Dec 14, OFFSHORE GUATEMALA + 5.1 + + -91.725,13.824,0 + + + + M 5.1 - 2012 Dec 14, NEW IRELAND REGION, P.N.G. + 5.1 + + 153.404,-5.272,0 + + + + M 5.1 - 2012 Dec 15, NEW IRELAND REGION, P.N.G. + 5.1 + + 153.405,-4.893,0 + + + + M 5.1 - 2012 Dec 18, OFFSHORE EL SALVADOR + 5.1 + + -89.978,13.054,0 + + + + M 5.1 - 2012 Dec 18, NEAR EAST COAST OF HONSHU, JAPAN + 5.1 + + 141.917,36.664,0 + + + + M 5.1 - 2012 Dec 22, NORTHERN SUMATRA, INDONESIA + 5.1 + + 94.221,5.169,0 + + + + M 5.1 - 2012 Dec 22, KURIL ISLANDS + 5.1 + + 155.103,49.818,0 + + + + M 5.1 - 2012 Dec 22, BABUYAN ISL REGION, PHILIPPINES + 5.1 + + 121.194,19.061,0 + + + + M 5.1 - 2012 Dec 24, OFFSHORE ATACAMA, CHILE + 5.1 + + -71.494,-29.037,0 + + + + M 5.1 - 2012 Dec 24, KEPULAUAN TALAUD, INDONESIA + 5.1 + + 126.679,4.149,0 + + + + M 5.1 - 2012 Dec 25, SOUTHWEST OF SUMATRA, INDONESIA + 5.1 + + 101.25,-7.893,0 + + + + M 5.1 - 2012 Dec 26, EASTERN NEW GUINEA REG., P.N.G. + 5.1 + + 147.287,-5.914,0 + + + + M 5.1 - 2012 Dec 28, KERMADEC ISLANDS REGION + 5.1 + + -176.245,-29.596,0 + + + + M 5.1 - 2012 Dec 28, KOMANDORSKIYE OSTROVA REGION + 5.1 + + 164.724,55.707,0 + + + + M 5.1 - 2012 Dec 29, BISMARCK SEA + 5.1 + + 148.757,-3.315,0 + + + + M 5.1 - 2012 Dec 31, GUATEMALA + 5.1 + + -92.037,15.031,0 + + + + M 5 - 2012 Jan 1, PACIFIC-ANTARCTIC RIDGE + 5 + + -149.214,-58.259,0 + + + + M 5 - 2012 Jan 1, BOUGAINVILLE REGION, P.N.G. + 5 + + 154.209,-5.413,0 + + + + M 5 - 2012 Jan 4, RYUKYU ISLANDS, JAPAN + 5 + + 130.221,27.917,0 + + + + M 5 - 2012 Jan 4, TONGA + 5 + + -174.671,-15.552,0 + + + + M 5 - 2012 Jan 4, TONGA + 5 + + -174.663,-15.14,0 + + + + M 5 - 2012 Jan 5, NEAR EAST COAST OF HONSHU, JAPAN + 5 + + 142.197,38.714,0 + + + + M 5 - 2012 Jan 6, OFF COAST OF ARAUCANIA, CHILE + 5 + + -75.091,-38.024,0 + + + + M 5 - 2012 Jan 6, BONIN ISLANDS, JAPAN REGION + 5 + + 143.559,26.944,0 + + + + M 5 - 2012 Jan 6, SOUTHERN ALASKA + 5 + + -153.232,59.852,0 + + + + M 5 - 2012 Jan 7, PAPUA, INDONESIA + 5 + + 138.055,-3.752,0 + + + + M 5 - 2012 Jan 7, NEW BRITAIN REGION, P.N.G. + 5 + + 152.594,-4.329,0 + + + + M 5 - 2012 Jan 7, BABUYAN ISL REGION, PHILIPPINES + 5 + + 121.191,19.254,0 + + + + M 5 - 2012 Jan 7, OFF EAST COAST OF HONSHU, JAPAN + 5 + + 142.073,36.063,0 + + + + M 5 - 2012 Jan 8, NORTHERN XINJIANG, CHINA + 5 + + 87.474,42.203,0 + + + + M 5 - 2012 Jan 8, SOUTH OF FIJI ISLANDS + 5 + + -179.895,-23.337,0 + + + + M 5 - 2012 Jan 9, KERMADEC ISLANDS REGION + 5 + + -176.09,-29.512,0 + + + + M 5 - 2012 Jan 9, SANTA CRUZ ISLANDS + 5 + + 165.105,-10.516,0 + + + + M 5 - 2012 Jan 9, NEAR N COAST OF PAPUA, INDONESIA + 5 + + 133.064,-0.814,0 + + + + M 5 - 2012 Jan 10, NEAR COAST OF ECUADOR + 5 + + -80.28,-0.74,0 + + + + M 5 - 2012 Jan 12, MINDANAO, PHILIPPINES + 5 + + 125.918,8.432,0 + + + + M 5 - 2012 Jan 12, SOUTH OF AFRICA + 5 + + 23.53,-53.252,0 + + + + M 5 - 2012 Jan 12, SOUTH OF AFRICA + 5 + + 23.746,-53.209,0 + + + + M 5 - 2012 Jan 12, TONGA REGION + 5 + + -172.393,-17.989,0 + + + + M 5 - 2012 Jan 12, NEAR EAST COAST OF HONSHU, JAPAN + 5 + + 141.895,36.672,0 + + + + M 5 - 2012 Jan 12, TONGA REGION + 5 + + -172.531,-17.822,0 + + + + M 5 - 2012 Jan 13, SANTA CRUZ ISLANDS + 5 + + 165.262,-10.52,0 + + + + M 5 - 2012 Jan 13, SOUTH SANDWICH ISLANDS REGION + 5 + + -27.208,-60.597,0 + + + + M 5 - 2012 Jan 13, HINDU KUSH REGION, AFGHANISTAN + 5 + + 70.512,36.009,0 + + + + M 5 - 2012 Jan 14, SOUTH SANDWICH ISLANDS REGION + 5 + + -26.086,-60.695,0 + + + + M 5 - 2012 Jan 16, SOUTH SANDWICH ISLANDS REGION + 5 + + -24.981,-56.754,0 + + + + M 5 - 2012 Jan 16, NORTH OF ASCENSION ISLAND + 5 + + -12.601,-2.114,0 + + + + M 5 - 2012 Jan 16, TONGA REGION + 5 + + -172.909,-19.289,0 + + + + M 5 - 2012 Jan 17, MINDANAO, PHILIPPINES + 5 + + 125.972,6.516,0 + + + + M 5 - 2012 Jan 18, SAN JUAN, ARGENTINA + 5 + + -68.084,-31.767,0 + + + + M 5 - 2012 Jan 19, DOMINICAN REPUBLIC REGION + 5 + + -68.755,18.058,0 + + + + M 5 - 2012 Jan 19, TONGA REGION + 5 + + -172.416,-17.898,0 + + + + M 5 - 2012 Jan 21, BALLENY ISLANDS REGION + 5 + + 177.584,-65.042,0 + + + + M 5 - 2012 Jan 21, MARIANA ISLANDS REGION + 5 + + 147.034,19.727,0 + + + + M 5 - 2012 Jan 22, ATACAMA, CHILE + 5 + + -71.03,-28.682,0 + + + + M 5 - 2012 Jan 23, OFFSHORE BIO-BIO, CHILE + 5 + + -73.486,-36.424,0 + + + + M 5 - 2012 Jan 23, OFFSHORE BIO-BIO, CHILE + 5 + + -73.031,-36.338,0 + + + + M 5 - 2012 Jan 25, NEAR WEST COAST OF COLOMBIA + 5 + + -77.505,5.519,0 + + + + M 5 - 2012 Jan 25, NEW BRITAIN REGION, P.N.G. + 5 + + 153.487,-6.802,0 + + + + M 5 - 2012 Jan 26, KEPULAUAN BABAR, INDONESIA + 5 + + 129.935,-7.1,0 + + + + M 5 - 2012 Jan 27, OFF EAST COAST OF HONSHU, JAPAN + 5 + + 143.891,37.904,0 + + + + M 5 - 2012 Jan 27, NORTHERN ITALY + 5 + + 10.03,44.48,0 + + + + M 5 - 2012 Jan 28, KERMADEC ISLANDS, NEW ZEALAND + 5 + + -177.077,-29.52,0 + + + + M 5 - 2012 Jan 28, KERMADEC ISLANDS REGION + 5 + + -176.893,-29.505,0 + + + + M 5 - 2012 Jan 28, KERMADEC ISLANDS, NEW ZEALAND + 5 + + -177.036,-29.554,0 + + + + M 5 - 2012 Jan 29, NORTHERN MID-ATLANTIC RIDGE + 5 + + -46.467,16.624,0 + + + + M 5 - 2012 Jan 31, KERMADEC ISLANDS, NEW ZEALAND + 5 + + -177.843,-30.699,0 + + + + M 5 - 2012 Feb 1, SAMAR, PHILIPPINES + 5 + + 125.615,11.61,0 + + + + M 5 - 2012 Feb 2, WEST OF MACQUARIE ISLAND + 5 + + 153.349,-60.843,0 + + + + M 5 - 2012 Feb 2, NEW IRELAND REGION, P.N.G. + 5 + + 153.638,-5.341,0 + + + + M 5 - 2012 Feb 2, VANUATU + 5 + + 167.248,-17.783,0 + + + + M 5 - 2012 Feb 2, VANUATU + 5 + + 167.126,-17.933,0 + + + + M 5 - 2012 Feb 2, VANUATU + 5 + + 167.413,-17.858,0 + + + + M 5 - 2012 Feb 2, VANUATU + 5 + + 167.108,-17.433,0 + + + + M 5 - 2012 Feb 2, VANUATU + 5 + + 167.198,-17.899,0 + + + + M 5 - 2012 Feb 2, VANUATU + 5 + + 167.648,-18.2,0 + + + + M 5 - 2012 Feb 2, VANUATU + 5 + + 167.327,-17.529,0 + + + + M 5 - 2012 Feb 2, VANUATU + 5 + + 167.791,-18.011,0 + + + + M 5 - 2012 Feb 3, NEW BRITAIN REGION, P.N.G. + 5 + + 149.939,-6.644,0 + + + + M 5 - 2012 Feb 3, TONGA + 5 + + -174.83,-19.49,0 + + + + M 5 - 2012 Feb 4, NEAR EAST COAST OF HONSHU, JAPAN + 5 + + 141.869,37.343,0 + + + + M 5 - 2012 Feb 4, VANUATU + 5 + + 167.423,-18.026,0 + + + + M 5 - 2012 Feb 5, SOUTHERN IRAN + 5 + + 51.488,28.59,0 + + + + M 5 - 2012 Feb 6, NEGROS- CEBU REG, PHILIPPINES + 5 + + 123.356,10.019,0 + + + + M 5 - 2012 Feb 7, NEGROS- CEBU REG, PHILIPPINES + 5 + + 123.595,10.108,0 + + + + M 5 - 2012 Feb 7, HOKKAIDO, JAPAN REGION + 5 + + 142.219,45.559,0 + + + + M 5 - 2012 Feb 7, BABUYAN ISL REGION, PHILIPPINES + 5 + + 121.5,19.684,0 + + + + M 5 - 2012 Feb 8, NEGROS- CEBU REG, PHILIPPINES + 5 + + 123.183,9.839,0 + + + + M 5 - 2012 Feb 9, VANUATU + 5 + + 167.545,-15.325,0 + + + + M 5 - 2012 Feb 11, NEGROS- CEBU REG, PHILIPPINES + 5 + + 123.264,10.071,0 + + + + M 5 - 2012 Feb 12, NEAR COAST OF SOUTHERN PERU + 5 + + -74.157,-15.64,0 + + + + M 5 - 2012 Feb 12, ASCENSION ISLAND REGION + 5 + + -13.051,-7.074,0 + + + + M 5 - 2012 Feb 13, MOZAMBIQUE + 5 + + 40.891,-13.928,0 + + + + M 5 - 2012 Feb 13, VANUATU + 5 + + 167.233,-17.552,0 + + + + M 5 - 2012 Feb 13, SOUTH OF KERMADEC ISLANDS + 5 + + -178.703,-33.982,0 + + + + M 5 - 2012 Feb 14, CENTRAL MID-ATLANTIC RIDGE + 5 + + -25.357,0.599,0 + + + + M 5 - 2012 Feb 14, VANUATU + 5 + + 167.153,-18.038,0 + + + + M 5 - 2012 Feb 15, NEAR EAST COAST OF HONSHU, JAPAN + 5 + + 141.475,37.803,0 + + + + M 5 - 2012 Feb 15, NICOBAR ISLANDS, INDIA REGION + 5 + + 92.9,6.306,0 + + + + M 5 - 2012 Feb 16, NEW BRITAIN REGION, P.N.G. + 5 + + 152.193,-5.697,0 + + + + M 5 - 2012 Feb 17, VANUATU + 5 + + 166.829,-14.824,0 + + + + M 5 - 2012 Feb 18, OFFSHORE OAXACA, MEXICO + 5 + + -95.67,15.264,0 + + + + M 5 - 2012 Feb 18, MOLUCCA SEA + 5 + + 126.909,2.446,0 + + + + M 5 - 2012 Feb 19, NORTH ISLAND OF NEW ZEALAND + 5 + + 174.124,-39.382,0 + + + + M 5 - 2012 Feb 19, CROZET ISLANDS REGION + 5 + + 44.553,-41.015,0 + + + + M 5 - 2012 Feb 19, FIJI REGION + 5 + + -178.639,-17.861,0 + + + + M 5 - 2012 Feb 20, KASHMIR-XINJIANG BORDER REGION + 5 + + 79.717,35.723,0 + + + + M 5 - 2012 Feb 20, KASHMIR-XINJIANG BORDER REGION + 5 + + 79.835,35.84,0 + + + + M 5 - 2012 Feb 20, NEW BRITAIN REGION, P.N.G. + 5 + + 151.4,-4.792,0 + + + + M 5 - 2012 Feb 22, TONGA + 5 + + -173.294,-17.463,0 + + + + M 5 - 2012 Feb 23, FIJI REGION + 5 + + -178.761,-20.57,0 + + + + M 5 - 2012 Feb 24, TONGA + 5 + + -174.264,-15.206,0 + + + + M 5 - 2012 Feb 24, MINDANAO, PHILIPPINES + 5 + + 125.955,9.958,0 + + + + M 5 - 2012 Feb 24, SOUTHERN SUMATRA, INDONESIA + 5 + + 103.103,-4.695,0 + + + + M 5 - 2012 Feb 26, SOUTH OF FIJI ISLANDS + 5 + + -177.234,-24.739,0 + + + + M 5 - 2012 Feb 26, SOUTH OF FIJI ISLANDS + 5 + + -177.459,-24.796,0 + + + + M 5 - 2012 Feb 26, FIJI REGION + 5 + + -178.48,-18.036,0 + + + + M 5 - 2012 Feb 27, BOUGAINVILLE REGION, P.N.G. + 5 + + 154.871,-6.535,0 + + + + M 5 - 2012 Feb 27, SOUTH OF FIJI ISLANDS + 5 + + -177.122,-24.734,0 + + + + M 5 - 2012 Feb 27, KURIL ISLANDS + 5 + + 155.843,49.272,0 + + + + M 5 - 2012 Feb 27, RYUKYU ISLANDS, JAPAN + 5 + + 127.182,25.511,0 + + + + M 5 - 2012 Feb 28, NEAR EAST COAST OF HONSHU, JAPAN + 5 + + 141.023,36.373,0 + + + + M 5 - 2012 Feb 28, KURIL ISLANDS + 5 + + 156.127,49.115,0 + + + + M 5 - 2012 Feb 28, TONGA REGION + 5 + + -175.419,-22.084,0 + + + + M 5 - 2012 Feb 29, KURIL ISLANDS + 5 + + 156.2,49.282,0 + + + + M 5 - 2012 Feb 29, VANUATU + 5 + + 167.399,-17.794,0 + + + + M 5 - 2012 Mar 1, OFF EAST COAST OF HONSHU, JAPAN + 5 + + 144.154,37.21,0 + + + + M 5 - 2012 Mar 2, EASTERN NEW GUINEA REG., P.N.G. + 5 + + 146.483,-7.956,0 + + + + M 5 - 2012 Mar 2, BALLENY ISLANDS REGION + 5 + + 176.623,-64.822,0 + + + + M 5 - 2012 Mar 2, SOUTHERN XINJIANG, CHINA + 5 + + 74.38,39.75,0 + + + + M 5 - 2012 Mar 2, HALMAHERA, INDONESIA + 5 + + 127.077,1.809,0 + + + + M 5 - 2012 Mar 3, SOUTHEAST OF LOYALTY ISLANDS + 5 + + 170.341,-22.089,0 + + + + M 5 - 2012 Mar 3, SOUTH OF FIJI ISLANDS + 5 + + -177.066,-23.934,0 + + + + M 5 - 2012 Mar 3, OFFSHORE MAULE, CHILE + 5 + + -72.8,-35.749,0 + + + + M 5 - 2012 Mar 4, ANTOFAGASTA, CHILE + 5 + + -69.848,-21.554,0 + + + + M 5 - 2012 Mar 5, NEAR EAST COAST OF HONSHU, JAPAN + 5 + + 142.389,40.167,0 + + + + M 5 - 2012 Mar 6, NICOBAR ISLANDS, INDIA REGION + 5 + + 93.873,8.559,0 + + + + M 5 - 2012 Mar 9, OFF EAST COAST OF HONSHU, JAPAN + 5 + + 142.033,35.642,0 + + + + M 5 - 2012 Mar 11, SOUTH OF FIJI ISLANDS + 5 + + -176.949,-24.921,0 + + + + M 5 - 2012 Mar 11, VOLCANO ISLANDS, JAPAN REGION + 5 + + 143.579,23.718,0 + + + + M 5 - 2012 Mar 13, COMOROS REGION + 5 + + 43.286,-10.923,0 + + + + M 5 - 2012 Mar 13, SOUTH OF FIJI ISLANDS + 5 + + 179.981,-23.734,0 + + + + M 5 - 2012 Mar 14, ANDAMAN ISLANDS, INDIA REGION + 5 + + 93.854,10.535,0 + + + + M 5 - 2012 Mar 16, SOUTHEAST OF LOYALTY ISLANDS + 5 + + 171.119,-22.507,0 + + + + M 5 - 2012 Mar 19, NEW BRITAIN REGION, P.N.G. + 5 + + 152.963,-4.585,0 + + + + M 5 - 2012 Mar 20, VANUATU + 5 + + 169.33,-19.684,0 + + + + M 5 - 2012 Mar 20, OFFSHORE GUERRERO, MEXICO + 5 + + -98.694,16.273,0 + + + + M 5 - 2012 Mar 21, GUERRERO, MEXICO + 5 + + -98.504,16.511,0 + + + + M 5 - 2012 Mar 22, VANUATU + 5 + + 167.526,-15.188,0 + + + + M 5 - 2012 Mar 22, TONGA + 5 + + -174.449,-21.355,0 + + + + M 5 - 2012 Mar 23, TONGA + 5 + + -174.263,-16.261,0 + + + + M 5 - 2012 Mar 24, VALPARAISO, CHILE + 5 + + -71.063,-33.052,0 + + + + M 5 - 2012 Mar 25, VANUATU + 5 + + 168.75,-19.108,0 + + + + M 5 - 2012 Mar 26, EASTERN TURKEY + 5 + + 42.33,39.171,0 + + + + M 5 - 2012 Mar 26, NORTHERN EAST PACIFIC RISE + 5 + + -104.337,10.001,0 + + + + M 5 - 2012 Mar 27, NEPAL-INDIA BORDER REGION + 5 + + 87.777,26.087,0 + + + + M 5 - 2012 Mar 30, SOUTHEAST OF EASTER ISLAND + 5 + + -101.463,-35.843,0 + + + + M 5 - 2012 Mar 30, FIJI REGION + 5 + + -178.97,-21.177,0 + + + + M 5 - 2012 Apr 2, OFF EAST COAST OF HONSHU, JAPAN + 5 + + 142.813,37.937,0 + + + + M 5 - 2012 Apr 2, OFFSHORE GUERRERO, MEXICO + 5 + + -98.572,16.281,0 + + + + M 5 - 2012 Apr 3, OFFSHORE O'HIGGINS, CHILE + 5 + + -72.757,-33.847,0 + + + + M 5 - 2012 Apr 3, KEPULAUAN BARAT DAYA, INDONESIA + 5 + + 125.367,-7.035,0 + + + + M 5 - 2012 Apr 6, TONGA + 5 + + -174.414,-21.281,0 + + + + M 5 - 2012 Apr 7, CENTRAL MID-ATLANTIC RIDGE + 5 + + -28.091,1.053,0 + + + + M 5 - 2012 Apr 11, BANDA SEA + 5 + + 130.261,-6.236,0 + + + + M 5 - 2012 Apr 11, NORTH INDIAN OCEAN + 5 + + 91.923,0.916,0 + + + + M 5 - 2012 Apr 11, OFF W COAST OF NORTHERN SUMATRA + 5 + + 92.726,2.668,0 + + + + M 5 - 2012 Apr 11, OFF W COAST OF NORTHERN SUMATRA + 5 + + 90.78,4.601,0 + + + + M 5 - 2012 Apr 11, OFF W COAST OF NORTHERN SUMATRA + 5 + + 92.287,2.539,0 + + + + M 5 - 2012 Apr 11, OFF W COAST OF NORTHERN SUMATRA + 5 + + 92.311,1.269,0 + + + + M 5 - 2012 Apr 12, NORTH INDIAN OCEAN + 5 + + 91.754,1.301,0 + + + + M 5 - 2012 Apr 12, NORTH INDIAN OCEAN + 5 + + 91.717,1.172,0 + + + + M 5 - 2012 Apr 12, OFF W COAST OF NORTHERN SUMATRA + 5 + + 93.9,1.983,0 + + + + M 5 - 2012 Apr 12, OFF W COAST OF NORTHERN SUMATRA + 5 + + 93.746,3.279,0 + + + + M 5 - 2012 Apr 13, VANUATU + 5 + + 168.086,-18.25,0 + + + + M 5 - 2012 Apr 13, NORTH INDIAN OCEAN + 5 + + 89.705,2.653,0 + + + + M 5 - 2012 Apr 13, OFFSHORE OAXACA, MEXICO + 5 + + -98.145,16.207,0 + + + + M 5 - 2012 Apr 14, OFF W COAST OF NORTHERN SUMATRA + 5 + + 94.079,2.835,0 + + + + M 5 - 2012 Apr 14, WEST CHILE RISE + 5 + + -97.183,-36.3,0 + + + + M 5 - 2012 Apr 16, NORTH ISLAND OF NEW ZEALAND + 5 + + 175.805,-38.556,0 + + + + M 5 - 2012 Apr 16, MID-INDIAN RIDGE + 5 + + 78.876,-36.534,0 + + + + M 5 - 2012 Apr 17, OFF W COAST OF NORTHERN SUMATRA + 5 + + 92.61,2.584,0 + + + + M 5 - 2012 Apr 18, VANUATU + 5 + + 167.052,-13.288,0 + + + + M 5 - 2012 Apr 18, OFF W COAST OF NORTHERN SUMATRA + 5 + + 92.541,3.329,0 + + + + M 5 - 2012 Apr 18, OFF W COAST OF NORTHERN SUMATRA + 5 + + 92.766,3.586,0 + + + + M 5 - 2012 Apr 19, TAIWAN + 5 + + 121.67,24.13,0 + + + + M 5 - 2012 Apr 19, NEAR N COAST OF PAPUA, INDONESIA + 5 + + 134.492,-1.677,0 + + + + M 5 - 2012 Apr 20, IRAN-IRAQ BORDER REGION + 5 + + 46.99,32.453,0 + + + + M 5 - 2012 Apr 20, OFF W COAST OF NORTHERN SUMATRA + 5 + + 91.901,2.564,0 + + + + M 5 - 2012 Apr 20, OFF W COAST OF NORTHERN SUMATRA + 5 + + 92.334,2.025,0 + + + + M 5 - 2012 Apr 20, VOLCANO ISLANDS, JAPAN REGION + 5 + + 142.688,25.447,0 + + + + M 5 - 2012 Apr 20, TONGA + 5 + + -173.594,-17.617,0 + + + + M 5 - 2012 Apr 21, IRAN-IRAQ BORDER REGION + 5 + + 47.049,32.407,0 + + + + M 5 - 2012 Apr 23, SOUTH SANDWICH ISLANDS REGION + 5 + + -27.674,-55.517,0 + + + + M 5 - 2012 Apr 23, TONGA + 5 + + -175.17,-17.966,0 + + + + M 5 - 2012 Apr 23, SOUTH OF TONGA + 5 + + -175.934,-24.007,0 + + + + M 5 - 2012 Apr 24, TONGA REGION + 5 + + -175.999,-23.785,0 + + + + M 5 - 2012 Apr 25, NEW BRITAIN REGION, P.N.G. + 5 + + 151.694,-4.114,0 + + + + M 5 - 2012 Apr 26, FIJI REGION + 5 + + -177.879,-18.802,0 + + + + M 5 - 2012 Apr 28, SOUTHWEST INDIAN RIDGE + 5 + + 43.501,-40.999,0 + + + + M 5 - 2012 Apr 30, SOUTH OF JAVA, INDONESIA + 5 + + 105.422,-8.354,0 + + + + M 5 - 2012 Apr 30, KEPULAUAN TALAUD, INDONESIA + 5 + + 127.507,3.712,0 + + + + M 5 - 2012 Apr 30, KERMADEC ISLANDS REGION + 5 + + -176.231,-30.038,0 + + + + M 5 - 2012 Apr 30, OFF W COAST OF NORTHERN SUMATRA + 5 + + 92.962,3.314,0 + + + + M 5 - 2012 May 2, NORTHERN MID-ATLANTIC RIDGE + 5 + + -44.95,23.352,0 + + + + M 5 - 2012 May 2, TONGA REGION + 5 + + -175.668,-23.551,0 + + + + M 5 - 2012 May 3, KURIL ISLANDS + 5 + + 150.557,46.903,0 + + + + M 5 - 2012 May 4, VANCOUVER ISLAND, CANADA REGION + 5 + + -130.241,50.648,0 + + + + M 5 - 2012 May 7, TONGA + 5 + + -173.659,-15.169,0 + + + + M 5 - 2012 May 8, OFF EAST COAST OF HONSHU, JAPAN + 5 + + 144.644,37.364,0 + + + + M 5 - 2012 May 11, GANSU-QINGHAI BORDER REG, CHINA + 5 + + 102.048,37.735,0 + + + + M 5 - 2012 May 14, ANDREANOF ISLANDS, ALEUTIAN IS. + 5 + + -174.832,51.445,0 + + + + M 5 - 2012 May 14, MOLUCCA SEA + 5 + + 126.338,1.29,0 + + + + M 5 - 2012 May 17, SANTA CRUZ ISLANDS + 5 + + 166.185,-12.596,0 + + + + M 5 - 2012 May 18, OFF EAST COAST OF HONSHU, JAPAN + 5 + + 143.178,39.646,0 + + + + M 5 - 2012 May 19, NORTH OF HALMAHERA, INDONESIA + 5 + + 128.118,3.304,0 + + + + M 5 - 2012 May 19, FOX ISLANDS, ALEUTIAN ISLANDS + 5 + + -171.728,52.068,0 + + + + M 5 - 2012 May 20, OFF EAST COAST OF HONSHU, JAPAN + 5 + + 143.116,39.543,0 + + + + M 5 - 2012 May 20, NORTHERN ITALY + 5 + + 11.49,44.831,0 + + + + M 5 - 2012 May 24, EASTERN NEW GUINEA REG., P.N.G. + 5 + + 147.114,-7.33,0 + + + + M 5 - 2012 May 25, NORWEGIAN SEA + 5 + + 5.518,72.939,0 + + + + M 5 - 2012 May 25, SOUTH ISLAND OF NEW ZEALAND + 5 + + 172.81,-43.473,0 + + + + M 5 - 2012 May 25, SOUTH OF KERMADEC ISLANDS + 5 + + -178.46,-33.075,0 + + + + M 5 - 2012 May 25, TONGA + 5 + + -173.763,-19.184,0 + + + + M 5 - 2012 May 26, SOUTHERN SUMATRA, INDONESIA + 5 + + 103.03,-4.9,0 + + + + M 5 - 2012 May 26, KERMADEC ISLANDS, NEW ZEALAND + 5 + + -177.991,-30.825,0 + + + + M 5 - 2012 May 29, FIJI REGION + 5 + + 173.796,-15.524,0 + + + + M 5 - 2012 May 30, BANDA SEA + 5 + + 130.318,-6.199,0 + + + + M 5 - 2012 May 30, STATE OF YAP, MICRONESIA + 5 + + 139.559,11.271,0 + + + + M 5 - 2012 May 31, TONGA + 5 + + -174.314,-17.683,0 + + + + M 5 - 2012 Jun 3, POTOSI, BOLIVIA + 5 + + -68.026,-21.338,0 + + + + M 5 - 2012 Jun 4, SOUTHEAST OF LOYALTY ISLANDS + 5 + + 169.134,-21.941,0 + + + + M 5 - 2012 Jun 4, HALMAHERA, INDONESIA + 5 + + 127.699,-0.677,0 + + + + M 5 - 2012 Jun 6, MOLUCCA SEA + 5 + + 126.905,-0.953,0 + + + + M 5 - 2012 Jun 6, KERMADEC ISLANDS REGION + 5 + + -177.441,-27.034,0 + + + + M 5 - 2012 Jun 7, TONGA REGION + 5 + + -174.717,-22.91,0 + + + + M 5 - 2012 Jun 7, OFF EAST COAST OF HONSHU, JAPAN + 5 + + 143.295,39.875,0 + + + + M 5 - 2012 Jun 7, MAULE, CHILE + 5 + + -71.075,-36.036,0 + + + + M 5 - 2012 Jun 8, SOUTHERN IRAN + 5 + + 50.705,29.784,0 + + + + M 5 - 2012 Jun 9, OFF EAST COAST OF KAMCHATKA + 5 + + 159.206,51.698,0 + + + + M 5 - 2012 Jun 9, SOUTH SANDWICH ISLANDS REGION + 5 + + -23.239,-60.883,0 + + + + M 5 - 2012 Jun 10, PAGAN REG., N. MARIANA ISLANDS + 5 + + 145.616,18.689,0 + + + + M 5 - 2012 Jun 14, TONGA + 5 + + -174.161,-17.111,0 + + + + M 5 - 2012 Jun 17, TAIWAN + 5 + + 121.574,23.647,0 + + + + M 5 - 2012 Jun 18, AZORES ISLANDS REGION + 5 + + -29.151,41.84,0 + + + + M 5 - 2012 Jun 18, NORTH OF FRANZ JOSEF LAND + 5 + + 41.025,86.386,0 + + + + M 5 - 2012 Jun 19, FIJI REGION + 5 + + -178.624,-20.552,0 + + + + M 5 - 2012 Jun 19, GUJARAT, INDIA + 5 + + 70.252,23.647,0 + + + + M 5 - 2012 Jun 21, HALMAHERA, INDONESIA + 5 + + 128.278,2.7,0 + + + + M 5 - 2012 Jun 22, OFF EAST COAST OF HONSHU, JAPAN + 5 + + 143.492,39.369,0 + + + + M 5 - 2012 Jun 23, ANDREANOF ISLANDS, ALEUTIAN IS. + 5 + + -177.666,51.242,0 + + + + M 5 - 2012 Jun 25, KERMADEC ISLANDS REGION + 5 + + -177.878,-27.424,0 + + + + M 5 - 2012 Jun 25, DODECANESE ISLANDS, GREECE + 5 + + 28.941,36.439,0 + + + + M 5 - 2012 Jun 26, FIJI REGION + 5 + + -176.697,-21.926,0 + + + + M 5 - 2012 Jun 27, TONGA + 5 + + -173.408,-15.132,0 + + + + M 5 - 2012 Jun 29, NEW BRITAIN REGION, P.N.G. + 5 + + 152.342,-4.937,0 + + + + M 5 - 2012 Jul 1, CENTRAL IRAN + 5 + + 51.02,31.841,0 + + + + M 5 - 2012 Jul 4, ST. MARTIN REGION, LEEWARD ISL. + 5 + + -62.983,18.12,0 + + + + M 5 - 2012 Jul 5, IZU ISLANDS, JAPAN REGION + 5 + + 141.64,32.284,0 + + + + M 5 - 2012 Jul 6, ISLA CHILOE, LOS LAGOS, CHILE + 5 + + -74.015,-42.646,0 + + + + M 5 - 2012 Jul 7, KEP. MENTAWAI REGION, INDONESIA + 5 + + 100.591,-3.638,0 + + + + M 5 - 2012 Jul 7, PACIFIC-ANTARCTIC RIDGE + 5 + + -150.669,-59.52,0 + + + + M 5 - 2012 Jul 7, MAURITIUS - REUNION REGION + 5 + + 66.882,-17.083,0 + + + + M 5 - 2012 Jul 9, ALAMAGAN REG, N. MARIANA ISLANDS + 5 + + 146.017,17.141,0 + + + + M 5 - 2012 Jul 11, CERAM SEA, INDONESIA + 5 + + 127.378,-2.02,0 + + + + M 5 - 2012 Jul 13, KURIL ISLANDS + 5 + + 151.829,45.255,0 + + + + M 5 - 2012 Jul 14, KURIL ISLANDS + 5 + + 151.878,45.378,0 + + + + M 5 - 2012 Jul 15, CENTRAL PERU + 5 + + -73.796,-13.58,0 + + + + M 5 - 2012 Jul 17, KERMADEC ISLANDS REGION + 5 + + -179.093,-31.283,0 + + + + M 5 - 2012 Jul 20, KEPULAUAN SANGIHE, INDONESIA + 5 + + 125.808,3.395,0 + + + + M 5 - 2012 Jul 21, TONGA + 5 + + -173.39,-15.197,0 + + + + M 5 - 2012 Jul 22, CENTRAL TURKEY + 5 + + 36.384,37.546,0 + + + + M 5 - 2012 Jul 22, NEAR COAST OF NICARAGUA + 5 + + -87.028,11.639,0 + + + + M 5 - 2012 Jul 23, NEAR ISLANDS, ALEUTIAN ISLANDS + 5 + + 172.869,52.016,0 + + + + M 5 - 2012 Jul 23, KERMADEC ISLANDS, NEW ZEALAND + 5 + + -177.465,-30.83,0 + + + + M 5 - 2012 Jul 24, KURIL ISLANDS + 5 + + 151.631,45.464,0 + + + + M 5 - 2012 Jul 24, OFF E. COAST OF N. ISLAND, N.Z. + 5 + + 179.91,-37.776,0 + + + + M 5 - 2012 Jul 25, KYUSHU, JAPAN + 5 + + 130.348,30.981,0 + + + + M 5 - 2012 Jul 25, VANUATU REGION + 5 + + 167.728,-19.297,0 + + + + M 5 - 2012 Jul 25, SOLOMON ISLANDS + 5 + + 159.699,-9.725,0 + + + + M 5 - 2012 Jul 28, NORTH OF SVALBARD + 5 + + -3.97,81.294,0 + + + + M 5 - 2012 Aug 1, SOUTHERN XINJIANG, CHINA + 5 + + 75.556,39.774,0 + + + + M 5 - 2012 Aug 2, SOUTH SHETLAND ISLANDS + 5 + + -58.258,-61.401,0 + + + + M 5 - 2012 Aug 4, SAN JUAN, ARGENTINA + 5 + + -69.358,-31.928,0 + + + + M 5 - 2012 Aug 5, EASTERN XIZANG + 5 + + 94.849,30.352,0 + + + + M 5 - 2012 Aug 5, TURKEY-SYRIA-IRAQ BORDER REGION + 5 + + 42.965,37.421,0 + + + + M 5 - 2012 Aug 6, SOUTHEAST OF LOYALTY ISLANDS + 5 + + 170.39,-21.406,0 + + + + M 5 - 2012 Aug 6, RYUKYU ISLANDS, JAPAN + 5 + + 130.521,29.495,0 + + + + M 5 - 2012 Aug 6, SOUTHWEST OF AFRICA + 5 + + 13.628,-52.29,0 + + + + M 5 - 2012 Aug 10, NEAR COAST OF NICARAGUA + 5 + + -88.17,12.075,0 + + + + M 5 - 2012 Aug 11, NORTHWESTERN IRAN + 5 + + 46.78,38.44,0 + + + + M 5 - 2012 Aug 11, NORTHWESTERN IRAN + 5 + + 46.735,38.436,0 + + + + M 5 - 2012 Aug 16, FIJI REGION + 5 + + -177.856,-18.46,0 + + + + M 5 - 2012 Aug 17, BOUGAINVILLE REGION, P.N.G. + 5 + + 154.53,-6.747,0 + + + + M 5 - 2012 Aug 17, BOUGAINVILLE REGION, P.N.G. + 5 + + 154.525,-6.792,0 + + + + M 5 - 2012 Aug 20, OFF W COAST OF NORTHERN SUMATRA + 5 + + 92.889,3.318,0 + + + + M 5 - 2012 Aug 22, HOKKAIDO, JAPAN REGION + 5 + + 142.86,42.404,0 + + + + M 5 - 2012 Aug 23, NEPAL + 5 + + 82.69,28.47,0 + + + + M 5 - 2012 Aug 26, HALMAHERA, INDONESIA + 5 + + 128.801,2.626,0 + + + + M 5 - 2012 Aug 27, ANTOFAGASTA, CHILE + 5 + + -69.414,-23.739,0 + + + + M 5 - 2012 Aug 27, MOLUCCA SEA + 5 + + 126.835,2.154,0 + + + + M 5 - 2012 Aug 29, VIRGIN ISLANDS REGION + 5 + + -64.324,19.652,0 + + + + M 5 - 2012 Aug 30, OFFSHORE BIO-BIO, CHILE + 5 + + -73.397,-37.199,0 + + + + M 5 - 2012 Aug 31, SOUTH SANDWICH ISLANDS REGION + 5 + + -27.525,-55.789,0 + + + + M 5 - 2012 Aug 31, GALAPAGOS ISLANDS REGION + 5 + + -95.26,2.526,0 + + + + M 5 - 2012 Sep 1, PHILIPPINE ISLANDS REGION + 5 + + 126.845,10.351,0 + + + + M 5 - 2012 Sep 1, PHILIPPINE ISLANDS REGION + 5 + + 126.881,10.356,0 + + + + M 5 - 2012 Sep 1, OFFSHORE ATACAMA, CHILE + 5 + + -71.114,-27.24,0 + + + + M 5 - 2012 Sep 1, NEW GUINEA, PAPUA NEW GUINEA + 5 + + 143.643,-6.531,0 + + + + M 5 - 2012 Sep 3, MORO GULF, MINDANAO, PHILIPPINES + 5 + + 123.861,6.561,0 + + + + M 5 - 2012 Sep 3, ANDREANOF ISLANDS, ALEUTIAN IS. + 5 + + -177.052,51.224,0 + + + + M 5 - 2012 Sep 4, TONGA + 5 + + -175.067,-21.956,0 + + + + M 5 - 2012 Sep 4, SOUTH OF FIJI ISLANDS + 5 + + -179.958,-22.003,0 + + + + M 5 - 2012 Sep 4, SOUTH OF JAVA, INDONESIA + 5 + + 113.962,-10.839,0 + + + + M 5 - 2012 Sep 4, PHILIPPINE ISLANDS REGION + 5 + + 126.772,10.666,0 + + + + M 5 - 2012 Sep 4, TAIWAN REGION + 5 + + 121.135,22.174,0 + + + + M 5 - 2012 Sep 6, SOUTHERN IRAN + 5 + + 53.97,26.96,0 + + + + M 5 - 2012 Sep 6, PHILIPPINE ISLANDS REGION + 5 + + 126.613,10.946,0 + + + + M 5 - 2012 Sep 7, ANTOFAGASTA, CHILE + 5 + + -68.191,-22.351,0 + + + + M 5 - 2012 Sep 7, PHILIPPINE ISLANDS REGION + 5 + + 126.73,10.55,0 + + + + M 5 - 2012 Sep 7, MARIANA ISLANDS REGION + 5 + + 143.322,21.606,0 + + + + M 5 - 2012 Sep 8, SOUTH OF KERMADEC ISLANDS + 5 + + -178.875,-33.129,0 + + + + M 5 - 2012 Sep 9, KERMADEC ISLANDS REGION + 5 + + -176.539,-28.091,0 + + + + M 5 - 2012 Sep 9, KERMADEC ISLANDS, NEW ZEALAND + 5 + + -177.935,-30.404,0 + + + + M 5 - 2012 Sep 11, YUNNAN, CHINA + 5 + + 99.267,24.647,0 + + + + M 5 - 2012 Sep 11, SOUTH OF MARIANA ISLANDS + 5 + + 143.353,11.828,0 + + + + M 5 - 2012 Sep 12, SOUTHWEST INDIAN RIDGE + 5 + + 46.07,-39.962,0 + + + + M 5 - 2012 Sep 14, NORTHERN XINJIANG, CHINA + 5 + + 82.425,43.637,0 + + + + M 5 - 2012 Sep 16, TONGA + 5 + + -174.657,-18.447,0 + + + + M 5 - 2012 Sep 17, NEAR EAST COAST OF HONSHU, JAPAN + 5 + + 142.052,39.832,0 + + + + M 5 - 2012 Sep 17, VANUATU + 5 + + 167.397,-14.867,0 + + + + M 5 - 2012 Sep 18, KEPULAUAN TALAUD, INDONESIA + 5 + + 126.438,4.488,0 + + + + M 5 - 2012 Sep 20, LOYALTY ISLANDS + 5 + + 168.242,-20.296,0 + + + + M 5 - 2012 Sep 20, MOLUCCA SEA + 5 + + 126.872,2.185,0 + + + + M 5 - 2012 Sep 21, CENTRAL MEDITERRANEAN SEA + 5 + + 22.63,35.3,0 + + + + M 5 - 2012 Sep 21, SOLOMON ISLANDS + 5 + + 158.013,-9.069,0 + + + + M 5 - 2012 Sep 22, GREECE + 5 + + 22.77,38.1,0 + + + + M 5 - 2012 Sep 25, OFF EAST COAST OF HONSHU, JAPAN + 5 + + 142.319,36.114,0 + + + + M 5 - 2012 Sep 26, TONGA + 5 + + -175.399,-18.853,0 + + + + M 5 - 2012 Sep 26, SOUTH OF FIJI ISLANDS + 5 + + -177.416,-26.04,0 + + + + M 5 - 2012 Sep 29, MINDORO, PHILIPPINES + 5 + + 120.723,13.847,0 + + + + M 5 - 2012 Oct 1, SOUTH OF FIJI ISLANDS + 5 + + -179.427,-24.745,0 + + + + M 5 - 2012 Oct 2, TONGA + 5 + + -174.903,-18.839,0 + + + + M 5 - 2012 Oct 2, TONGA + 5 + + -174.157,-20.728,0 + + + + M 5 - 2012 Oct 3, NEW BRITAIN REGION, P.N.G. + 5 + + 151.197,-5.727,0 + + + + M 5 - 2012 Oct 5, NORTHEAST OF TAIWAN + 5 + + 125.078,26.271,0 + + + + M 5 - 2012 Oct 5, BANDA SEA + 5 + + 129.547,-6.661,0 + + + + M 5 - 2012 Oct 8, BANDA SEA + 5 + + 129.191,-4.478,0 + + + + M 5 - 2012 Oct 8, BANDA SEA + 5 + + 129.292,-4.511,0 + + + + M 5 - 2012 Oct 12, COSTA RICA + 5 + + -84.268,9.598,0 + + + + M 5 - 2012 Oct 14, KURIL ISLANDS + 5 + + 154.453,48.38,0 + + + + M 5 - 2012 Oct 15, OFFSHORE COQUIMBO, CHILE + 5 + + -71.787,-31.814,0 + + + + M 5 - 2012 Oct 15, HINDU KUSH REGION, AFGHANISTAN + 5 + + 69.683,35.949,0 + + + + M 5 - 2012 Oct 17, TONGA + 5 + + -173.573,-15.036,0 + + + + M 5 - 2012 Oct 17, NIAS REGION, INDONESIA + 5 + + 97.229,1.265,0 + + + + M 5 - 2012 Oct 18, MADHYA PRADESH, INDIA + 5 + + 81.314,23.769,0 + + + + M 5 - 2012 Oct 25, MINAHASA, SULAWESI, INDONESIA + 5 + + 124.55,0.69,0 + + + + M 5 - 2012 Oct 25, TAIWAN + 5 + + 120.558,22.417,0 + + + + M 5 - 2012 Oct 25, PAPUA, INDONESIA + 5 + + 140.348,-3.907,0 + + + + M 5 - 2012 Oct 27, SOUTHEAST OF LOYALTY ISLANDS + 5 + + 169.829,-21.494,0 + + + + M 5 - 2012 Oct 28, ANDAMAN ISLANDS, INDIA REGION + 5 + + 92.575,10.345,0 + + + + M 5 - 2012 Oct 28, QUEEN CHARLOTTE ISLANDS REGION + 5 + + -131.36,52.335,0 + + + + M 5 - 2012 Oct 28, QUEEN CHARLOTTE ISLANDS REGION + 5 + + -131.561,52.319,0 + + + + M 5 - 2012 Oct 29, FLORES REGION, INDONESIA + 5 + + 123.571,-8.284,0 + + + + M 5 - 2012 Oct 29, FLORES REGION, INDONESIA + 5 + + 123.561,-8.041,0 + + + + M 5 - 2012 Oct 29, QUEEN CHARLOTTE ISLANDS REGION + 5 + + -131.182,51.952,0 + + + + M 5 - 2012 Oct 30, QUEEN CHARLOTTE ISLANDS REGION + 5 + + -132.117,52.222,0 + + + + M 5 - 2012 Nov 1, QUEEN CHARLOTTE ISLANDS REGION + 5 + + -132.024,52.55,0 + + + + M 5 - 2012 Nov 1, BANDA SEA + 5 + + 129.137,-5.612,0 + + + + M 5 - 2012 Nov 1, FIJI REGION + 5 + + -177.638,-20.284,0 + + + + M 5 - 2012 Nov 1, EASTERN NEW GUINEA REG., P.N.G. + 5 + + 145.559,-5.28,0 + + + + M 5 - 2012 Nov 4, SOUTHEAST OF LOYALTY ISLANDS + 5 + + 171.388,-22.265,0 + + + + M 5 - 2012 Nov 6, MINAHASA, SULAWESI, INDONESIA + 5 + + 122.088,1.281,0 + + + + M 5 - 2012 Nov 9, SOLOMON ISLANDS + 5 + + 161.13,-10.121,0 + + + + M 5 - 2012 Nov 10, FLORES REGION, INDONESIA + 5 + + 120.676,-8.887,0 + + + + M 5 - 2012 Nov 11, OFFSHORE GUATEMALA + 5 + + -92.299,13.897,0 + + + + M 5 - 2012 Nov 12, IZU ISLANDS, JAPAN REGION + 5 + + 137.994,29.691,0 + + + + M 5 - 2012 Nov 13, MYANMAR + 5 + + 95.943,22.895,0 + + + + M 5 - 2012 Nov 15, OFFSHORE CHIAPAS, MEXICO + 5 + + -92.727,13.843,0 + + + + M 5 - 2012 Nov 15, SOUTH OF MARIANA ISLANDS + 5 + + 142.554,11.668,0 + + + + M 5 - 2012 Nov 19, PACIFIC-ANTARCTIC RIDGE + 5 + + -147.523,-57.349,0 + + + + M 5 - 2012 Nov 21, NEAR EAST COAST OF HONSHU, JAPAN + 5 + + 141.648,38.479,0 + + + + M 5 - 2012 Nov 22, BALI REGION, INDONESIA + 5 + + 115.124,-8.918,0 + + + + M 5 - 2012 Nov 22, SOUTHEAST OF LOYALTY ISLANDS + 5 + + 173.923,-22.354,0 + + + + M 5 - 2012 Nov 23, MOLUCCA SEA + 5 + + 125.824,1.619,0 + + + + M 5 - 2012 Nov 23, SOLOMON ISLANDS + 5 + + 162.74,-10.789,0 + + + + M 5 - 2012 Nov 26, SOUTHERN XINJIANG, CHINA + 5 + + 90.355,40.411,0 + + + + M 5 - 2012 Nov 26, DODECANESE ISLANDS, GREECE + 5 + + 27.993,36.655,0 + + + + M 5 - 2012 Nov 28, NORTHERN ALGERIA + 5 + + 5.312,36.941,0 + + + + M 5 - 2012 Nov 29, MENDOZA, ARGENTINA + 5 + + -69.106,-32.91,0 + + + + M 5 - 2012 Nov 29, NORTHEAST OF TAIWAN + 5 + + 125.191,26.112,0 + + + + M 5 - 2012 Nov 29, NEAR ISLANDS, ALEUTIAN ISLANDS + 5 + + 172.416,52.635,0 + + + + M 5 - 2012 Dec 1, TONGA + 5 + + -174.38,-20.688,0 + + + + M 5 - 2012 Dec 2, TAIWAN + 5 + + 121.631,23.91,0 + + + + M 5 - 2012 Dec 2, KURIL ISLANDS + 5 + + 151.47,45.701,0 + + + + M 5 - 2012 Dec 5, SAMOA ISLANDS REGION + 5 + + -173.266,-14.936,0 + + + + M 5 - 2012 Dec 5, KERMADEC ISLANDS REGION + 5 + + -177.523,-31.103,0 + + + + M 5 - 2012 Dec 7, NEW BRITAIN REGION, P.N.G. + 5 + + 151.429,-5.293,0 + + + + M 5 - 2012 Dec 7, OFF EAST COAST OF HONSHU, JAPAN + 5 + + 143.627,37.835,0 + + + + M 5 - 2012 Dec 7, OFF EAST COAST OF HONSHU, JAPAN + 5 + + 143.781,37.869,0 + + + + M 5 - 2012 Dec 8, NEAR S COAST OF NEW GUINEA, PNG. + 5 + + 144.044,-7.167,0 + + + + M 5 - 2012 Dec 8, NEAR S COAST OF NEW GUINEA, PNG. + 5 + + 144.041,-7.258,0 + + + + M 5 - 2012 Dec 9, NEW GUINEA, PAPUA NEW GUINEA + 5 + + 141.117,-3.563,0 + + + + M 5 - 2012 Dec 9, OFF EAST COAST OF HONSHU, JAPAN + 5 + + 143.811,37.519,0 + + + + M 5 - 2012 Dec 10, KEPULAUAN TALAUD, INDONESIA + 5 + + 126.869,3.655,0 + + + + M 5 - 2012 Dec 11, VANUATU + 5 + + 167.736,-18.987,0 + + + + M 5 - 2012 Dec 13, COSTA RICA + 5 + + -84.015,9.062,0 + + + + M 5 - 2012 Dec 14, NEW BRITAIN REGION, P.N.G. + 5 + + 152.959,-5.015,0 + + + + M 5 - 2012 Dec 15, OFF THE COAST OF EL SALVADOR + 5 + + -88.605,12.247,0 + + + + M 5 - 2012 Dec 17, OFF EAST COAST OF HONSHU, JAPAN + 5 + + 143.568,37.728,0 + + + + M 5 - 2012 Dec 19, TONGA + 5 + + -174.283,-20.508,0 + + + + M 5 - 2012 Dec 20, TONGA + 5 + + -174.074,-20.765,0 + + + + M 5 - 2012 Dec 21, NEAR EAST COAST OF HONSHU, JAPAN + 5 + + 141.71,38.633,0 + + + + M 5 - 2012 Dec 21, IZU ISLANDS, JAPAN REGION + 5 + + 142.212,29.779,0 + + + + M 5 - 2012 Dec 24, WEST OF MACQUARIE ISLAND + 5 + + 146.898,-55.683,0 + + + + M 5 - 2012 Dec 25, PAKISTAN + 5 + + 66.465,28.464,0 + + + + M 5 - 2012 Dec 26, TAIWAN REGION + 5 + + 122.55,24.043,0 + + + + M 5 - 2012 Dec 26, FIJI REGION + 5 + + -178.619,-20.69,0 + + + + M 5 - 2012 Dec 29, NEAR EAST COAST OF HONSHU, JAPAN + 5 + + 141.025,37.064,0 + + + + M 5 - 2012 Dec 29, BISMARCK SEA + 5 + + 148.752,-3.371,0 + + + + M 5 - 2012 Dec 30, SUNDA STRAIT, INDONESIA + 5 + + 105.283,-6.96,0 + + + + + \ No newline at end of file diff --git a/float-no-zero/examples/data/kml/timezones.kml b/float-no-zero/examples/data/kml/timezones.kml new file mode 100644 index 0000000000..d16f018bbd --- /dev/null +++ b/float-no-zero/examples/data/kml/timezones.kml @@ -0,0 +1,1608 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + normal#nStylem1200highlight#hStylem1200 + normal#nStylem1100highlight#hStylem1100 + normal#nStylem1000highlight#hStylem1000 + normal#nStylem0950highlight#hStylem0950 + normal#nStylem0900highlight#hStylem0900 + normal#nStylem0850highlight#hStylem0850 + normal#nStylem0800highlight#hStylem0800 + normal#nStylem0700highlight#hStylem0700 + normal#nStylem0600highlight#hStylem0600 + normal#nStylem0500highlight#hStylem0500 + normal#nStylem0400highlight#hStylem0400 + normal#nStylem0350highlight#hStylem0350 + normal#nStylem0300highlight#hStylem0300 + normal#nStylem0200highlight#hStylem0200 + normal#nStylem0100highlight#hStylem0100 + normal#nStyle0000highlight#hStyle0000 + normal#nStyle0100highlight#hStyle0100 + normal#nStyle0200highlight#hStyle0200 + normal#nStyle0300highlight#hStyle0300 + normal#nStyle0350highlight#hStyle0350 + normal#nStyle0400highlight#hStyle0400 + normal#nStyle0450highlight#hStyle0450 + normal#nStyle0500highlight#hStyle0500 + normal#nStyle0550highlight#hStyle0550 + normal#nStyle0575highlight#hStyle0575 + normal#nStyle0600highlight#hStyle0600 + normal#nStyle0650highlight#hStyle0650 + normal#nStyle0700highlight#hStyle0700 + normal#nStyle0800highlight#hStyle0800 + normal#nStyle0900highlight#hStyle0900 + normal#nStyle0950highlight#hStyle0950 + normal#nStyle1000highlight#hStyle1000 + normal#nStyle1050highlight#hStyle1050 + normal#nStyle1100highlight#hStyle1100 + normal#nStyle1150highlight#hStyle1150 + normal#nStyle1200highlight#hStyle1200 + normal#nStyle1275highlight#hStyle1275 + normal#nStyle1300highlight#hStyle1300 + + #hidelist + + + GMT -12:00 +
+ +]]> + #khStylem1200 + + + + + +-179.0623,-89.90000000000001,0 -180,-89.90000000000001,0 -180,-86.5,0 -180,-81.49999,0 -180,-76.5,0 -180,-71.5,0 -180,-66.5,0 -180,-61.5,0 -180,-56.5,0 -180,-51.50000000000001,0 -176.2216,-48.22535,0 -172.5,-45,0 -172.4998,-50,0 -172.4996,-55.00000000000001,0 -172.4995,-60.00000000000001,0 -172.4993,-65,0 -172.4991,-70,0 -172.4989,-75,0 -172.4987,-80,0 -172.4986,-83.3,0 -172.4984,-88.3,0 -172.4984,-89.90000000000001,0 -173.4361,-89.90000000000001,0 -174.3738,-89.90000000000001,0 -175.3115,-89.90000000000001,0 -176.2492,-89.90000000000001,0 -177.1869,-89.90000000000001,0 -178.1246,-89.90000000000001,0 -179.0623,-89.90000000000001,0 + + + 1 + + + + + +-172.509,74.89999,0 -172.509,70.23302,0 -175.7817,72.31562,0 -180,75,0 -180,79.90000000000001,0 -180,84.90001,0 -180,89.90000000000001,0 -179.0636,89.90000000000001,0 -178.1273,89.90000000000001,0 -177.1909,89.90000000000001,0 -176.2545,89.90000000000001,0 -175.3181,89.90000000000001,0 -174.3818,89.90000000000001,0 -173.4454,89.90000000000001,0 -172.509,89.90000000000001,0 -172.509,84.90001,0 -172.509,79.90000000000001,0 -172.509,74.89999,0 + + + 1 + + + + + GMT -11:00 +
+ +]]> + #khStylem1100 + + + + + +180,49.99722,0 180,48,0 176.0055,49.99722,0 180,49.99722,0 + + + 1 + + + + + +-167.5405,-5.592744,0 -167.5405,-7.092370000000001,0 -172.5404,-7.073442000000002,0 -172.9307,-7.071967,0 -172.9307,-10.5021,0 -167.9308,-10.46422,0 -167.5405,-10.46127,0 -167.5405,-15.46126,0 -167.5405,-20.46127,0 -167.5405,-22.51781,0 -162.5405,-22.51781,0 -157.5405,-22.51781,0 -157.5063,-22.51781,0 -157.5063,-27.51781,0 -157.5063,-32.51781,0 -157.5063,-37.51781,0 -157.5063,-40.2,0 -157.5063,-45.2,0 -157.5063,-50.2,0 -157.5063,-50.7,0 -157.5063,-55.7,0 -157.5063,-60.7,0 -157.5063,-65.7,0 -157.5063,-70.7,0 -157.5063,-75.7,0 -157.5063,-80.7,0 -157.5063,-85.7,0 -157.5063,-89.90000000000001,0 -158.5058,-89.90000000000001,0 -159.5053,-89.90000000000001,0 -160.5048,-89.90000000000001,0 -161.5042,-89.90000000000001,0 -162.5037,-89.90000000000001,0 -163.5032,-89.90000000000001,0 -164.5026,-89.90000000000001,0 -165.5021,-89.90000000000001,0 -166.5016,-89.90000000000001,0 -167.501,-89.90000000000001,0 -168.5005,-89.90000000000001,0 -169.5,-89.90000000000001,0 -170.4995,-89.90000000000001,0 -171.4989,-89.90000000000001,0 -172.4984,-89.90000000000001,0 -172.4984,-88.3,0 -172.4986,-83.3,0 -172.4987,-80,0 -172.4989,-75,0 -172.4991,-70,0 -172.4993,-65,0 -172.4995,-60.00000000000001,0 -172.4996,-55.00000000000001,0 -172.4998,-50,0 -172.5,-45,0 -172.5,-43.5,0 -172.5,-38.5,0 -172.5,-33.5,0 -172.5,-28.5,0 -172.5,-23.5,0 -172.5,-20,0 -172.5,-15,0 -174,-13,0 -177,-9.000000999999999,0 -180,-4.999996,0 -180,-4.989699,0 -180,0.01029546,0 -180,5.0103,0 -180,10.0103,0 -180,15.0103,0 -180,20.0103,0 -180,25.0103,0 -180,30.0103,0 -180,35.0103,0 -180,40.0103,0 -180,45.01030000000001,0 -180,50.0103,0 -175,50.01045,0 -170,50.01062000000001,0 -169.3893,50.01063000000001,0 -164.3893,50.01743,0 -159.3893,50.02422,0 -157.5064,50.02679,0 -157.5064,45.02678,0 -157.5064,40.02678,0 -157.5064,35.02678,0 -157.5064,30.02678,0 -157.5064,26.53553,0 -162.5064,26.53553,0 -167.5064,26.53553,0 -172.4834,26.53553,0 -172.4834,22.5508,0 -174.6819,22.5508,0 -174.6819,17.5508,0 -174.6819,14.44395,0 -169.6819,14.41826,0 -167.5405,14.40725,0 -167.5405,9.407258000000001,0 -167.5405,4.407255,0 -167.5405,-0.5927495,0 -167.5405,-5.592744,0 + + + 1 + + + + + +-167.1914,68.69023,0 -169,68,0 -172.509,70.23302,0 -172.509,74.89999,0 -172.509,79.90000000000001,0 -172.509,84.90001,0 -172.509,89.90000000000001,0 -171.5101,89.90000000000001,0 -170.5112,89.90000000000001,0 -169.5124,89.90000000000001,0 -168.5135,89.90000000000001,0 -167.5146,89.90000000000001,0 -166.5157,89.90000000000001,0 -165.5168,89.90000000000001,0 -164.5179,89.90000000000001,0 -163.519,89.90000000000001,0 -162.5201,89.90000000000001,0 -161.5212,89.90000000000001,0 -160.5223,89.90000000000001,0 -159.5234,89.90000000000001,0 -158.5245,89.90000000000001,0 -157.5256,89.90000000000001,0 -157.5256,84.90001,0 -157.5256,79.90000000000001,0 -157.5256,74.89999,0 -157.5256,71.37826,0 -162.4455,70.48654999999999,0 -162.5201,70.47302999999999,0 -167.1914,68.69023,0 + + + 1 + + + + + GMT -10:00 + + +]]> + #khStylem1000 + + + + + +-142.5293,-4.65319,0 -142.5293,-9.653193,0 -142.5293,-13.48625,0 -137.5294,-13.45937,0 -134.3385,-13.44221,0 -134.3385,-18.44221,0 -134.3385,-21.37773,0 -136.8102,-23.676,0 -141.8102,-23.676,0 -142.5293,-23.676,0 -142.5293,-28.676,0 -142.5293,-33.676,0 -142.5293,-38.676,0 -142.5293,-43.676,0 -142.5293,-48.67599000000001,0 -142.5293,-53.676,0 -142.5293,-56.87600000000001,0 -142.5293,-61.876,0 -142.5293,-66.87600999999999,0 -142.5293,-71.87600000000001,0 -142.5293,-73.476,0 -142.5293,-78.476,0 -142.5293,-83.476,0 -142.5293,-88.476,0 -142.5293,-89.90000000000001,0 -143.5278,-89.90000000000001,0 -144.5262,-89.90000000000001,0 -145.5247,-89.90000000000001,0 -146.5232,-89.90000000000001,0 -147.5216,-89.90000000000001,0 -148.5201,-89.90000000000001,0 -149.5186,-89.90000000000001,0 -150.5171,-89.90000000000001,0 -151.5155,-89.90000000000001,0 -152.514,-89.90000000000001,0 -153.5125,-89.90000000000001,0 -154.5109,-89.90000000000001,0 -155.5094,-89.90000000000001,0 -156.5079,-89.90000000000001,0 -157.5063,-89.90000000000001,0 -157.5063,-85.7,0 -157.5063,-80.7,0 -157.5063,-75.7,0 -157.5063,-70.7,0 -157.5063,-65.7,0 -157.5063,-60.7,0 -157.5063,-55.7,0 -157.5063,-50.7,0 -157.5063,-50.2,0 -157.5063,-45.2,0 -157.5063,-40.2,0 -157.5063,-37.51781,0 -157.5063,-32.51781,0 -157.5063,-27.51781,0 -157.5063,-22.51781,0 -157.5405,-22.51781,0 -162.5405,-22.51781,0 -167.5405,-22.51781,0 -167.5405,-20.46127,0 -167.5405,-15.46126,0 -167.5405,-10.46127,0 -167.9308,-10.46422,0 -172.9307,-10.5021,0 -172.9307,-7.071967,0 -172.5404,-7.073442000000002,0 -167.5405,-7.092370000000001,0 -167.5405,-5.592744,0 -167.5405,-0.5927495,0 -167.5405,4.407255,0 -167.5405,9.407258000000001,0 -167.5405,14.40725,0 -169.6819,14.41826,0 -174.6819,14.44395,0 -174.6819,17.5508,0 -174.6819,22.5508,0 -172.4834,22.5508,0 -172.4834,26.53553,0 -167.5064,26.53553,0 -162.5064,26.53553,0 -157.5064,26.53553,0 -157.5064,30.02678,0 -157.5064,35.02678,0 -157.5064,40.02678,0 -157.5064,45.02678,0 -157.5064,50.02679,0 -152.5064,50.03357,0 -147.5064,50.04037,0 -142.5293,50.04713,0 -142.5293,45.04712000000001,0 -142.5293,40.04713,0 -142.5293,35.04712,0 -142.5293,30.04713,0 -142.5293,25.04712,0 -142.5293,20.04713,0 -142.5293,18.34681,0 -142.5293,13.34681,0 -142.5293,8.346807,0 -142.5293,3.346812,0 -142.5293,0.3468055,0 -142.5293,-4.65319,0 + + + 1 + + + + + +-175,50.01045,0 -180,50.0103,0 -180,50.02665,0 -180,55.02666,0 -175,55.02376000000001,0 -170,55.02087000000001,0 -169.3902,55.02052,0 -169.3893,50.02052000000001,0 -169.3893,50.01063000000001,0 -170,50.01062000000001,0 -175,50.01045,0 + + + 1 + + + + + +180,49.99722,0 176.0055,49.99722,0 171.5334,52.23330000000001,0 170,53,0 173.415,55.03272,0 178.415,55.03272,0 180,55.03272,0 180,54.99723,0 180,49.99722,0 + + + 1 + + + + + +-142.4651,74.90014000000001,0 -142.4453,70.32476,0 -147.4331,70.67321,0 -152.421,71.02166,0 -157.4088,71.37009999999999,0 -157.5256,71.37826,0 -157.5256,74.89999,0 -157.5256,79.90000000000001,0 -157.5256,84.90001,0 -157.5256,89.90000000000001,0 -156.5259,89.90000000000001,0 -155.5262,89.90000000000001,0 -154.5265,89.90000000000001,0 -153.5268,89.90000000000001,0 -152.5271,89.90000000000001,0 -151.5274,89.90000000000001,0 -150.5277,89.90000000000001,0 -149.528,89.90000000000001,0 -148.5283,89.90000000000001,0 -147.5285,89.90000000000001,0 -146.5288,89.90000000000001,0 -145.5291,89.90000000000001,0 -144.5294,89.90000000000001,0 -143.5297,89.90000000000001,0 -142.53,89.90000000000001,0 -142.5084,84.90004999999999,0 -142.4867,79.90009000000001,0 -142.4651,74.90014000000001,0 + + + 1 + + + + + GMT -09:30 + + +]]> + #khStylem0950 + + + + +-141.5368,-7.197858,0 -136.5368,-7.197858,0 -135.6827,-7.197858,0 -135.6827,-11.10058,0 -140.6827,-11.10058,0 -141.5368,-11.10058,0 -141.5368,-7.197858,0 + + + 1 + + + + GMT -09:00 + + +]]> + #khStylem0900 + + + + + +178.415,55.03272,0 173.415,55.03272,0 177.7114,57.59015000000001,0 180,58.95238000000001,0 180,55.03272,0 178.415,55.03272,0 + + + 1 + + + + + +-127.5151,74.89999,0 -127.5151,70.49976,0 -128.2554,70.67574000000001,0 -128.8733,70.34173000000001,0 -129.7417,70.30833,0 -129.9588,70.14133,0 -130.4598,70.22484,0 -133.5828,69.57352,0 -134.3343,69.85742999999999,0 -135.6703,69.64033000000001,0 -136.2715,69.22282,0 -136.4206,68.90156,0 -137.0624,68.95941999999999,0 -137.2391,69.01522,0 -137.4809,69.01522,0 -138.2296,69.18262,0 -138.3319,69.24308000000001,0 -138.383,69.31749000000001,0 -138.5411,69.26168,0 -138.6248,69.28493,0 -138.8806,69.61044,0 -139.1271,69.66159,0 -139.3828,69.55929,0 -139.9315,69.62904000000002,0 -140.378,69.60579,0 -141.0033,69.6567,0 -140.9997,65.30721,0 -140.9955,60.30721,0 -140.5214,60.22222,0 -140.4508,60.30972000000001,0 -139.9794,60.18776,0 -139.6767,60.34055,0 -139.0681,60.35222,0 -139.1889,60.08889,0 -139.0478,59.99749,0 -138.6903,59.90693,0 -138.6158,59.77417000000001,0 -137.9578,59.43166,0 -137.5908,59.23860000000001,0 -137.4797,58.99805,0 -137.5075,58.92556,0 -137.445,58.90749,0 -137.2961,58.98999,0 -136.8089,59.16526,0 -136.5839,59.16332,0 -136.4628,59.28944,0 -136.4636,59.46970000000001,0 -136.3716,59.45249,0 -136.2339,59.52583,0 -136.2392,59.56138000000001,0 -136.3439,59.60277,0 -135.9492,59.66916,0 -135.4736,59.80194,0 -135.235,59.70305,0 -135.1775,59.63693,0 -135.0145,59.5675,0 -135.0211,59.4711,0 -135.0917,59.42694,0 -134.9892,59.38999,0 -135.0161,59.34777,0 -134.9519,59.27999,0 -134.688,59.24333,0 -134.6717,59.20027000000001,0 -134.5664,59.13055000000001,0 -134.4614,59.12665,0 -134.3794,59.04916,0 -134.3953,58.98305,0 -134.3114,58.96444000000001,0 -134.3322,58.92972,0 -134.2455,58.85695000000001,0 -133.8269,58.7261,0 -133.6833,58.59554,0 -133.43,58.45917,0 -133.3879,58.41206,0 -133.4303,58.35999,0 -133.3611,58.28054,0 -133.137,58.13582,0 -133.0708,58.01222,0 -132.8817,57.86361000000001,0 -132.2267,57.20471,0 -132.3369,57.08832,0 -132.0275,57.03638,0 -132.1031,56.86666,0 -131.8614,56.79972,0 -131.8845,56.74471000000001,0 -131.8269,56.67916,0 -131.8242,56.59693,0 -131.5578,56.60221,0 -131.055,56.39804,0 -130.7744,56.3661,0 -130.6272,56.25861,0 -130.4619,56.23527,0 -130.4142,56.12887,0 -130.2292,56.09027,0 -130.0886,56.11804000000001,0 -130.0147,56.02583000000001,0 -130.0151,55.90919000000001,0 -130.1747,55.75443000000001,0 -130.1225,55.65499,0 -130.1439,55.54139000000001,0 -129.9905,55.28166000000001,0 -130.1014,55.22776,0 -130.2311,55.035,0 -130.3597,54.90805,0 -130.5897,54.79371,0 -130.6491,54.70139000000001,0 -133.0791,54.26532,0 -133.1971,53.93898,0 -132.9926,53.51827999999999,0 -132.5012,53.02680000000001,0 -132.1788,52.75157,0 -131.0228,51.91016000000001,0 -127.5078,49.81058,0 -127.5078,48.21058000000001,0 -127.5078,43.21058,0 -127.5078,38.21058,0 -127.5078,33.21058,0 -127.5078,28.21058,0 -127.5078,23.21058,0 -127.5079,18.21058,0 -127.5079,15.01059,0 -127.5079,10.01058,0 -127.5079,5.010579,0 -127.5079,0.01058346,0 -127.5079,-2.500003,0 -127.5079,-7.499998000000002,0 -127.5079,-12.5,0 -127.5079,-17.5,0 -127.508,-22.5,0 -131.5,-22.5,0 -131.5,-26,0 -127.5075,-26,0 -127.5075,-29.9,0 -127.5075,-34.9,0 -127.5074,-39.90000000000001,0 -127.5074,-44.9,0 -127.5074,-49.90001,0 -127.5074,-54.9,0 -127.5074,-59.90001,0 -127.5074,-60.8,0 -127.5073,-65.8,0 -127.5073,-70.8,0 -127.5073,-75.8,0 -127.5073,-79.90000000000001,0 -127.5073,-84.89999,0 -127.5073,-89.90000000000001,0 -128.4461,-89.90000000000001,0 -129.385,-89.90000000000001,0 -130.3239,-89.90000000000001,0 -131.2628,-89.90000000000001,0 -132.2016,-89.90000000000001,0 -133.1405,-89.90000000000001,0 -134.0794,-89.90000000000001,0 -135.0183,-89.90000000000001,0 -135.9571,-89.90000000000001,0 -136.896,-89.90000000000001,0 -137.8349,-89.90000000000001,0 -138.7738,-89.90000000000001,0 -139.7127,-89.90000000000001,0 -140.6515,-89.90000000000001,0 -141.5904,-89.90000000000001,0 -142.5293,-89.90000000000001,0 -142.5293,-88.476,0 -142.5293,-83.476,0 -142.5293,-78.476,0 -142.5293,-73.476,0 -142.5293,-71.87600000000001,0 -142.5293,-66.87600999999999,0 -142.5293,-61.876,0 -142.5293,-56.87600000000001,0 -142.5293,-53.676,0 -142.5293,-48.67599000000001,0 -142.5293,-43.676,0 -142.5293,-38.676,0 -142.5293,-33.676,0 -142.5293,-28.676,0 -142.5293,-23.676,0 -141.8102,-23.676,0 -136.8102,-23.676,0 -134.3385,-21.37773,0 -134.3385,-18.44221,0 -134.3385,-13.44221,0 -137.5294,-13.45937,0 -142.5293,-13.48625,0 -142.5293,-9.653193,0 -142.5293,-4.65319,0 -142.5293,0.3468055,0 -142.5293,3.346812,0 -142.5293,8.346807,0 -142.5293,13.34681,0 -142.5293,18.34681,0 -142.5293,20.04713,0 -142.5293,25.04712,0 -142.5293,30.04713,0 -142.5293,35.04712,0 -142.5293,40.04713,0 -142.5293,45.04712000000001,0 -142.5293,50.04713,0 -147.5064,50.04037,0 -152.5064,50.03357,0 -157.5064,50.02679,0 -159.3893,50.02422,0 -164.3893,50.01743,0 -169.3893,50.01063000000001,0 -169.3893,50.02052000000001,0 -169.3902,55.02052,0 -170,55.02087000000001,0 -175,55.02376000000001,0 -180,55.02666,0 -180,58.95238000000001,0 -177.5929,60.38517000000001,0 -173.2965,62.94258000000001,0 -169,65.5,0 -169,68,0 -167.1914,68.69023,0 -162.5201,70.47302999999999,0 -162.4455,70.48654999999999,0 -157.5256,71.37826,0 -157.4088,71.37009999999999,0 -152.421,71.02166,0 -147.4331,70.67321,0 -142.4453,70.32476,0 -142.4651,74.90014000000001,0 -142.4867,79.90009000000001,0 -142.5084,84.90004999999999,0 -142.53,89.90000000000001,0 -141.5916,89.90000000000001,0 -140.6532,89.90000000000001,0 -139.7147,89.90000000000001,0 -138.7763,89.90000000000001,0 -137.8378,89.90000000000001,0 -136.8994,89.90000000000001,0 -135.961,89.90000000000001,0 -135.0226,89.90000000000001,0 -134.0841,89.90000000000001,0 -133.1457,89.90000000000001,0 -132.2073,89.90000000000001,0 -131.2688,89.90000000000001,0 -130.3304,89.90000000000001,0 -129.392,89.90000000000001,0 -128.4535,89.90000000000001,0 -127.5151,89.90000000000001,0 -127.5151,84.90001,0 -127.5151,79.90000000000001,0 -127.5151,74.89999,0 + + + + + +-141.5368,-7.197858,0 -141.5368,-11.10058,0 -140.6827,-11.10058,0 -135.6827,-11.10058,0 -135.6827,-7.197858,0 -136.5368,-7.197858,0 -141.5368,-7.197858,0 + + + 1 + + + + + GMT -08:30 + + +]]> + #khStylem0850 + + + + +-127.5075,-26,0 -131.5,-26,0 -131.5,-22.5,0 -127.508,-22.5,0 -122.508,-22.5,0 -121,-22.5,0 -121,-26,0 -126,-26,0 -127.5075,-26,0 + + + 1 + + + + GMT -08:00 + + +]]> + #khStylem0800 + + + + + +-138.8806,69.61044,0 -138.6248,69.28493,0 -138.5411,69.26168,0 -138.383,69.31749000000001,0 -138.3319,69.24308000000001,0 -138.2296,69.18262,0 -137.4809,69.01522,0 -137.2391,69.01522,0 -137.0624,68.95941999999999,0 -136.4206,68.90156,0 -136.4461,68.87302,0 -136.4447,68.58778,0 -136.4442,68.43304000000001,0 -136.445,67.71554999999999,0 -136.4211,67.65526000000001,0 -136.2411,67.62053,0 -136.1578,67.50776999999999,0 -136.2053,67.40694000000001,0 -136.1164,67.38274,0 -136.1428,67.35942,0 -136.0914,67.30247,0 -136.1345,67.22638000000001,0 -136.2364,67.17386999999999,0 -136.1989,67.14333000000001,0 -136.2222,67.06415,0 -136.1645,67.00360000000001,0 -133.8311,67.00333000000001,0 -134.0461,66.98441,0 -134.0925,66.95527,0 -133.9081,66.90887000000001,0 -133.7639,66.80692999999999,0 -133.8403,66.72776,0 -133.7572,66.68526,0 -133.7719,66.64413999999999,0 -133.5867,66.5647,0 -133.6903,66.53193,0 -133.6294,66.44525,0 -133.7503,66.44775,0 -133.7681,66.37303,0 -133.8247,66.31666,0 -133.57,66.27831999999999,0 -133.5639,66.15583,0 -133.6731,66.11693,0 -133.7047,66.07193,0 -133.6033,66.05165,0 -133.6294,65.97443,0 -133.4075,65.94386,0 -133.1475,66.02469000000001,0 -132.9397,66.02887,0 -132.9084,65.99693000000001,0 -132.9939,65.92303,0 -132.9061,65.90833000000001,0 -132.817,65.91998,0 -132.7822,65.96720999999999,0 -132.5761,66.03055000000001,0 -132.5103,65.97887,0 -132.3536,65.99026000000001,0 -132.3267,65.95193,0 -132.54,65.88916,0 -132.5733,65.84859,0 -132.5294,65.82555000000001,0 -132.3239,65.73997,0 -132.1719,65.59804,0 -132.2736,65.54694000000001,0 -132.3278,65.43471,0 -132.5214,65.36304,0 -132.5553,65.28360000000001,0 -132.7836,65.22499000000001,0 -132.7169,65.20387,0 -132.7878,65.18777,0 -132.7147,65.15555000000001,0 -132.5764,65.19054,0 -132.5275,65.16277000000001,0 -132.5561,65.11803999999999,0 -132.54,65.09388,0 -132.3817,65.08499000000001,0 -132.3333,65.03471999999999,0 -132.5075,64.96442,0 -132.4825,64.87691,0 -132.6153,64.81219,0 -132.5706,64.77249999999999,0 -132.3689,64.77831999999999,0 -132.1636,64.70166,0 -132.0464,64.69553000000001,0 -131.9158,64.58249000000001,0 -131.6942,64.53498999999999,0 -131.6878,64.4986,0 -131.8039,64.43803,0 -131.8181,64.37831,0 -131.593,64.36859,0 -131.4275,64.41638,0 -131.3886,64.46720999999999,0 -131.1417,64.42443,0 -131.002,64.33028,0 -131.0605,64.27943000000001,0 -130.9797,64.26555000000001,0 -130.9372,64.20999999999999,0 -130.8672,64.18777,0 -130.9478,64.13721,0 -130.8536,64.07249,0 -130.8639,64.04304999999999,0 -130.7514,64.0461,0 -130.7786,64.00915999999999,0 -130.7556,63.98693,0 -130.5811,63.92416,0 -130.5222,63.93499,0 -130.3703,63.84388000000001,0 -130.1197,63.80805,0 -130.1039,63.76416,0 -130.2342,63.73915,0 -130.2825,63.73777,0 -130.3211,63.69582000000001,0 -130.252,63.66666000000001,0 -130.1097,63.70361,0 -130.0825,63.68833,0 -130.1108,63.66443,0 -130.093,63.63055,0 -129.9486,63.61361000000001,0 -129.958,63.58526,0 -129.8981,63.57222,0 -129.8195,63.48333000000001,0 -129.8972,63.45221,0 -129.9192,63.37276,0 -130.1319,63.31555,0 -130.1511,63.26582000000001,0 -130.0445,63.26999,0 -129.9786,63.20361,0 -129.9003,63.19721,0 -129.8353,63.11472000000001,0 -129.8472,63.08694,0 -129.6372,63.08027,0 -129.5989,63.05194000000001,0 -129.7058,62.95222,0 -129.7261,62.91416,0 -129.7025,62.89222000000002,0 -129.7739,62.87443,0 -129.6308,62.76083,0 -129.6253,62.70499,0 -129.517,62.67249000000001,0 -129.5239,62.64333,0 -129.4878,62.61889,0 -129.5678,62.57444000000001,0 -129.4178,62.58499,0 -129.1722,62.48166,0 -129.3083,62.42138000000001,0 -129.2158,62.37749000000001,0 -129.3105,62.32639,0 -129.2822,62.26721,0 -129.1992,62.21694,0 -129.2939,62.15611,0 -129.1228,62.11667,0 -128.9842,62.13611,0 -128.7653,62.05833,0 -128.6775,62.12526,0 -128.547,62.12222,0 -128.3753,62.02722000000001,0 -128.3881,61.99387999999999,0 -128.2686,61.94055,0 -128.2136,61.85055,0 -128.0806,61.84916,0 -127.9728,61.68860000000001,0 -127.5503,61.51138000000001,0 -127.3792,61.50721000000001,0 -127.2883,61.51916000000001,0 -127.1417,61.46666,0 -127.125,61.4011,0 -127.0644,61.37249,0 -127.0108,61.13416,0 -127.1019,61.07083,0 -127.0558,61.03999000000002,0 -126.9353,61.05916,0 -126.9394,61.00249,0 -126.8989,60.94165,0 -126.9253,60.86221,0 -126.8797,60.82999,0 -126.8869,60.78249000000001,0 -126.84,60.75722,0 -126.7764,60.78527,0 -126.6722,60.74347000000001,0 -126.5203,60.81442000000001,0 -126.3945,60.77668000000001,0 -126.2728,60.78532,0 -126.2228,60.80284,0 -126.2395,60.8567,0 -126.1709,60.86586000000001,0 -126.1075,60.85894,0 -126.1072,60.81701,0 -126.0092,60.80341,0 -125.957,60.87723,0 -125.8872,60.89694,0 -125.712,60.82726000000001,0 -125.3492,60.7834,0 -125.1747,60.85054,0 -124.8717,60.85804,0 -124.8778,60.91721,0 -124.813,60.97249000000002,0 -124.5919,60.96054000000001,0 -124.4769,60.79055000000001,0 -124.6192,60.70972,0 -124.6142,60.66859,0 -124.4594,60.56972,0 -124.4183,60.47915,0 -124.2064,60.45722,0 -124.1953,60.32888,0 -123.9743,60.09237000000001,0 -123.8157,60.00000000000001,0 -120,60.00000000000001,0 -120,57.26251,0 -120.2163,57.45917,0 -120.3444,57.478,0 -120.8415,57.23171000000001,0 -121.2803,57.24454,0 -121.7099,57.02437000000001,0 -121.8406,56.99683,0 -122.0286,57.01699,0 -122.1153,56.9519,0 -122.2026,56.93232,0 -123.4153,57.14465000000001,0 -123.4541,57.3213,0 -123.515,57.36665,0 -123.5888,57.33548,0 -123.7545,57.12799,0 -123.944,57.12243,0 -124.0969,57.03444,0 -124.1216,56.86174000000001,0 -123.5964,55.89894000000001,0 -122.8612,55.42631000000001,0 -121.6533,54.53355,0 -121.2157,54.48102000000001,0 -120.9006,54.20094000000001,0 -120.0003,53.83022,0 -119.9783,53.78889000000002,0 -119.9047,53.7786,0 -119.9211,53.71833000000002,0 -119.8103,53.70777,0 -119.7353,53.63499000000001,0 -119.7686,53.60332,0 -119.9322,53.60722,0 -119.8828,53.56027,0 -119.9025,53.52027,0 -119.8153,53.49972,0 -119.7381,53.395,0 -119.6369,53.35166,0 -119.5989,53.37887,0 -119.3858,53.36166,0 -119.3528,53.27916,0 -119.2655,53.19666,0 -119.0378,53.13583,0 -119.0136,53.14472000000001,0 -119.0122,53.22305,0 -118.9597,53.23333,0 -118.755,53.12083,0 -118.7811,53.05583,0 -118.7275,53.06138,0 -118.6633,53.01554000000002,0 -118.6797,52.97054,0 -118.625,52.88416,0 -118.4914,52.89777000000001,0 -118.4156,52.83638000000001,0 -118.4289,52.78611000000001,0 -118.3461,52.74333,0 -118.305,52.67471,0 -118.35,52.61805,0 -118.2817,52.56527,0 -118.2869,52.52777,0 -118.2083,52.48082,0 -118.2597,52.44221,0 -118.2276,52.37917000000001,0 -118.2918,52.33801,0 -118.3567,52.36639000000001,0 -118.4936,52.31367000000001,0 -118.5636,52.265,0 -118.5869,52.19099,0 -118.6751,52.15347,0 -118.7623,52.17984,0 -118.6163,52.06324,0 -118.1043,51.85538,0 -118.0445,51.7621,0 -118.0663,51.6597,0 -117.975,51.65362,0 -117.9355,51.61814,0 -117.8381,51.65870000000001,0 -117.8179,51.63131000000001,0 -117.8462,51.58163,0 -117.8006,51.56642,0 -117.8513,51.51675000000001,0 -117.7393,51.42244,0 -117.4224,51.40926000000001,0 -117.1684,51.02501,0 -117.137,51.01789000000001,0 -117.1659,50.97937000000001,0 -117.0382,50.95707,0 -117.0858,50.8648,0 -117.0432,50.85568000000001,0 -117.0392,50.81512,0 -116.9631,50.81107000000001,0 -116.915,50.77051,0 -116.8136,50.78572,0 -116.8288,50.75225,0 -116.7811,50.69954,0 -116.5839,50.64782,0 -116.6559,50.60120000000001,0 -116.6894,50.48155,0 -116.7228,50.46025,0 -116.6392,50.40956000000001,0 -116.6179,50.31628,0 -116.5408,50.31831,0 -116.5616,50.21387,0 -116.4521,50.15508000000001,0 -116.4993,50.06382000000001,0 -116.4435,49.98169000000002,0 -116.4709,49.89754,0 -116.7112,49.88435000000001,0 -116.6975,49.85698,0 -116.877,49.79817000000001,0 -116.8967,49.64001,0 -116.8359,49.59236,0 -116.7472,49.33989,0 -116.6671,49.28718,0 -116.5611,49.11279,0 -116.5332,49.00125000000001,0 -116.0483,48.99972000000001,0 -116.0492,47.99333,0 -115.7208,47.70805000000001,0 -115.6742,47.60999,0 -115.7375,47.55583,0 -115.6347,47.48444,0 -115.725,47.43721,0 -115.5803,47.38527000000001,0 -115.4958,47.3011,0 -115.3183,47.2561,0 -115.045,46.9886,0 -114.9156,46.92389000000001,0 -114.9064,46.84138000000001,0 -114.7655,46.77638,0 -114.765,46.71471,0 -114.6694,46.75111,0 -114.6178,46.71749000000001,0 -114.6367,46.67388,0 -114.5764,46.64444,0 -114.325,46.66916000000001,0 -114.3367,46.53582999999999,0 -114.4003,46.50555,0 -114.3708,46.45361,0 -114.4561,46.26999,0 -114.4319,46.19055000000001,0 -114.5045,46.15972,0 -114.45,46.10917,0 -114.4853,46.04971,0 -114.4742,46.00193,0 -114.4022,45.98804,0 -114.4164,45.92888000000001,0 -114.3819,45.89249,0 -114.4961,45.84470000000001,0 -114.5547,45.77943000000001,0 -114.4908,45.71027,0 -114.545,45.62778,0 -114.5395,45.56702000000001,0 -114.6612,45.46328000000001,0 -114.781,45.4964,0 -114.798,45.43404000000001,0 -114.7511,45.40534,0 -115.1775,45.58222000000001,0 -115.4781,45.3886,0 -115.7964,45.46944,0 -116.1983,45.40526000000001,0 -116.2811,45.42443000000001,0 -116.2992,45.4586,0 -116.2583,45.61999000000001,0 -116.2992,45.69137,0 -116.2728,45.86054000000002,0 -116.2922,45.89305,0 -116.6122,46.04194,0 -116.6217,46.00667000000001,0 -116.7175,45.97332000000001,0 -116.7283,45.89332,0 -116.7793,45.86157000000001,0 -116.5461,45.76222000000001,0 -116.4533,45.60694,0 -116.6503,45.35638,0 -116.7114,45.17027,0 -116.8372,45.02555000000001,0 -116.8378,44.92443,0 -116.8958,44.8311,0 -117.0278,44.74638000000001,0 -117.1336,44.54388,0 -117.2122,44.48249,0 -117.1985,44.30091,0 -117.482,44.29872,0 -117.4845,44.37986,0 -117.5899,44.44006,0 -117.9629,44.4388,0 -118.0106,44.42295,0 -118.1505,44.26134,0 -118.2288,44.24651,0 -118.2191,43.09735,0 -117.9707,43.09735,0 -117.9707,42.81335,0 -118.2076,42.81335,0 -118.2066,42.59258,0 -117.0169,42.58601000000001,0 -116.9849,42,0 -114.0426,41.99549,0 -114.0403,37.00311,0 -114.0419,36.19972,0 -114.1208,36.05833,0 -114.2372,36.02583,0 -114.3575,36.1461,0 -114.4514,36.12777,0 -114.5506,36.16194,0 -114.7264,36.08277,0 -114.7405,35.98611,0 -114.6603,35.88194,0 -114.6917,35.81499,0 -114.6903,35.72499,0 -114.6439,35.62665,0 -114.6683,35.51027000000001,0 -114.5839,35.3411,0 -114.5686,35.22332,0 -114.5795,35.14415,0 -114.6364,35.12526,0 -114.6075,35.08221,0 -114.6333,35.04749,0 -114.6219,34.99214,0 -114.6222,34.88499,0 -114.4561,34.6986,0 -114.3697,34.52917,0 -114.3733,34.47304,0 -114.1672,34.3575,0 -114.1147,34.28249,0 -114.3903,34.10972,0 -114.4228,34.02638,0 -114.5225,33.95027,0 -114.4886,33.89249,0 -114.5161,33.825,0 -114.4839,33.72193,0 -114.5225,33.68415,0 -114.5264,33.56166,0 -114.6367,33.41999,0 -114.7261,33.40804,0 -114.6992,33.36055,0 -114.7286,33.30749,0 -114.6678,33.21554,0 -114.6961,33.08693,0 -114.6608,33.04193,0 -114.5089,33.0225,0 -114.4644,32.97165,0 -114.4581,32.86027,0 -114.5269,32.80082,0 -114.5417,32.7272,0 -114.69,32.74276,0 -114.7191,32.71846,0 -114.7956,32.60999,0 -114.8098,32.50699,0 -114.9367,32.47305,0 -114.9642,32.36861,0 -115.0415,32.25468,0 -114.9989,32.13611,0 -115.0172,31.95443,0 -112.1676,28.00019,0 -112.7233,27.99974,0 -114.1616,28.00056,0 -114.2077,28.00027,0 -116.9047,28.00672,0 -116.9047,24.05259,0 -112.5009,24.04926,0 -112.501,19.04926,0 -112.5011,14.04925,0 -112.5012,9.049256,0 -112.5013,4.049253,0 -112.5014,-0.9507425000000002,0 -112.5015,-5.950747,0 -112.5016,-8.550748000000001,0 -112.5017,-13.55074,0 -112.5018,-18.55075,0 -112.5019,-23.55074,0 -112.502,-25.75075,0 -112.5021,-30.75074,0 -112.5022,-35.75074,0 -112.5023,-40.75074,0 -112.5024,-45.75074000000002,0 -112.5025,-50.75074000000001,0 -112.5026,-55.75074,0 -112.5027,-59.55075,0 -112.5028,-64.55074000000001,0 -112.5029,-69.55074000000001,0 -112.503,-74.55074000000001,0 -112.503,-75.55074999999999,0 -112.5031,-80.55074999999999,0 -112.5033,-85.55074999999999,0 -112.5033,-89.90000000000001,0 -113.4411,-89.90000000000001,0 -114.3788,-89.90000000000001,0 -115.3166,-89.90000000000001,0 -116.2543,-89.90000000000001,0 -117.1921,-89.90000000000001,0 -118.1298,-89.90000000000001,0 -119.0676,-89.90000000000001,0 -120.0053,-89.90000000000001,0 -120.943,-89.90000000000001,0 -121.8808,-89.90000000000001,0 -122.8185,-89.90000000000001,0 -123.7563,-89.90000000000001,0 -124.694,-89.90000000000001,0 -125.6318,-89.90000000000001,0 -126.5695,-89.90000000000001,0 -127.5073,-89.90000000000001,0 -127.5073,-84.89999,0 -127.5073,-79.90000000000001,0 -127.5073,-75.8,0 -127.5073,-70.8,0 -127.5073,-65.8,0 -127.5074,-60.8,0 -127.5074,-59.90001,0 -127.5074,-54.9,0 -127.5074,-49.90001,0 -127.5074,-44.9,0 -127.5074,-39.90000000000001,0 -127.5075,-34.9,0 -127.5075,-29.9,0 -127.5075,-26,0 -126,-26,0 -121,-26,0 -121,-22.5,0 -122.508,-22.5,0 -127.508,-22.5,0 -127.5079,-17.5,0 -127.5079,-12.5,0 -127.5079,-7.499998000000002,0 -127.5079,-2.500003,0 -127.5079,0.01058346,0 -127.5079,5.010579,0 -127.5079,10.01058,0 -127.5079,15.01058,0 -127.5079,18.21058,0 -127.5078,23.21058,0 -127.5078,28.21058,0 -127.5078,33.21058,0 -127.5078,38.21058,0 -127.5078,43.21058,0 -127.5078,48.21058000000001,0 -127.5078,49.81058,0 -131.0228,51.91016000000001,0 -132.1788,52.75157,0 -132.5012,53.02680000000001,0 -132.9926,53.51827999999999,0 -133.1971,53.93898,0 -133.0791,54.26532,0 -130.6491,54.70139000000001,0 -130.5897,54.79371,0 -130.3597,54.90805,0 -130.2311,55.035,0 -130.1014,55.22776,0 -129.9905,55.28166000000001,0 -130.1439,55.54139000000001,0 -130.1225,55.65499,0 -130.1747,55.75443000000001,0 -130.0151,55.90919000000001,0 -130.0147,56.02583000000001,0 -130.0886,56.11804000000001,0 -130.2292,56.09027,0 -130.4142,56.12887,0 -130.4619,56.23527,0 -130.6272,56.25861,0 -130.7744,56.3661,0 -131.055,56.39804,0 -131.5578,56.60221,0 -131.8242,56.59693,0 -131.8269,56.67916,0 -131.8845,56.74471000000001,0 -131.8614,56.79972,0 -132.1031,56.86666,0 -132.0275,57.03638,0 -132.3369,57.08832,0 -132.2267,57.20471,0 -132.8817,57.86361000000001,0 -133.0708,58.01222,0 -133.137,58.13582,0 -133.3611,58.28054,0 -133.4303,58.35999,0 -133.3879,58.41206,0 -133.43,58.45917,0 -133.6833,58.59554,0 -133.8269,58.7261,0 -134.2455,58.85695000000001,0 -134.3322,58.92972,0 -134.3114,58.96444000000001,0 -134.3953,58.98305,0 -134.3794,59.04916,0 -134.4614,59.12665,0 -134.5664,59.13055000000001,0 -134.6717,59.20027000000001,0 -134.688,59.24333,0 -134.9519,59.27999,0 -135.0161,59.34777,0 -134.9892,59.38999,0 -135.0917,59.42694,0 -135.0211,59.4711,0 -135.0145,59.5675,0 -135.1775,59.63693,0 -135.235,59.70305,0 -135.4736,59.80194,0 -135.9492,59.66916,0 -136.3439,59.60277,0 -136.2392,59.56138000000001,0 -136.2339,59.52583,0 -136.3716,59.45249,0 -136.4636,59.46970000000001,0 -136.4628,59.28944,0 -136.5839,59.16332,0 -136.8089,59.16526,0 -137.2961,58.98999,0 -137.445,58.90749,0 -137.5075,58.92556,0 -137.4797,58.99805,0 -137.5908,59.23860000000001,0 -137.9578,59.43166,0 -138.6158,59.77417000000001,0 -138.6903,59.90693,0 -139.0478,59.99749,0 -139.1889,60.08889,0 -139.0681,60.35222,0 -139.6767,60.34055,0 -139.9794,60.18776,0 -140.4508,60.30972000000001,0 -140.5214,60.22222,0 -140.9955,60.30721,0 -140.9997,65.30721,0 -141.0033,69.6567,0 -140.378,69.60579,0 -139.9315,69.62904000000002,0 -139.3828,69.55929,0 -139.1271,69.66159,0 -138.8806,69.61044,0 + + + 1 + + + + + +-126.1624,71.89608,0 -127.5151,70.49976,0 -127.5151,74.89999,0 -127.5151,79.90000000000001,0 -127.5151,84.90001,0 -127.5151,89.90000000000001,0 -126.5769,89.90000000000001,0 -125.6388,89.90000000000001,0 -124.7006,89.90000000000001,0 -123.7625,89.90000000000001,0 -122.8243,89.90000000000001,0 -121.8862,89.90000000000001,0 -120.948,89.90000000000001,0 -120.0099,89.90000000000001,0 -119.0717,89.90000000000001,0 -118.1335,89.90000000000001,0 -117.1954,89.90000000000001,0 -116.2572,89.90000000000001,0 -115.3191,89.90000000000001,0 -114.3809,89.90000000000001,0 -113.4428,89.90000000000001,0 -112.5046,89.90000000000001,0 -112.5046,84.90001,0 -112.5046,79.90000000000001,0 -112.5046,78.6159,0 -114.0755,78.39772000000001,0 -116.999,77.65592,0 -118.9626,77.43774000000001,0 -120.5771,76.91412,0 -121.9734,76.60868000000002,0 -123.1516,76.30323,0 -123.1952,75.95415,0 -124.8534,74.47057,0 -125.0715,74.16511,0 -124.8097,73.59784999999999,0 -126.1624,71.89608,0 + + + 1 + + + + + GMT -07:00 + + +]]> + #khStylem0700 + + + + +-97.51546,89.90000000000001,0 -97.51546,84.90001,0 -97.51546,80.63566,0 -102.0002,80.63531,0 -102.0004,75.63531,0 -102.0005,73.3723,0 -101.191,73.22286,0 -100.9536,73.20439,0 -100.5149,73.23768,0 -98.38002,72.95116,0 -98.29798,72.94485,0 -97.00784,72.74532000000001,0 -96.89134,72.69624,0 -96.71005,72.71178000000001,0 -96.41336,72.64267,0 -95.11967,72.46542,0 -93.87927000000001,72.25537,0 -93.74417000000003,72.01089,0 -93.19248000000002,71.65391,0 -92.93285,71.44838,0 -92.78141000000001,71.28612,0 -92.71651,71.11304,0 -92.57588,70.92914,0 -92.41362,70.81014,0 -92.1648,70.74524,0 -91.90519000000001,70.62624,0 -90.85590000000001,69.76086000000001,0 -90.1852,69.51204,0 -89.60105,69.45796,0 -89.08181999999999,69.33895,0 -89.01796000000002,69.28883,0 -89.01671000000002,69.25249000000001,0 -88.98090000000001,66.89502000000002,0 -93.98089000000002,66.90748000000001,0 -96.05273000000001,66.91264,0 -96.2137,66.9131,0 -101.2137,66.91991,0 -102.0007,66.92099,0 -102.0008,61.92099,0 -102.0009,59.99936,0 -106.0682,59.99960999999999,0 -110.0009,59.99528,0 -110.0003,54.99528000000001,0 -109.9998,49.99528000000001,0 -109.9997,49.0006,0 -104.9997,49.00018,0 -104.0625,49.0001,0 -104.0479,48.00007000000001,0 -103.9318,47.96657,0 -103.915,47.91,0 -103.9551,47.82047,0 -103.817,47.81991000000001,0 -103.8168,47.71054,0 -103.6829,47.71054,0 -103.6829,47.58421,0 -103.5878,47.58411,0 -103.5878,47.52712,0 -103.4097,47.53999,0 -103.3961,47.605,0 -103.3642,47.61639000000002,0 -103.0439,47.59749,0 -103,47.67471,0 -102.8392,47.60444,0 -102.6803,47.58082000000001,0 -102.6592,47.53583,0 -102.4334,47.53006,0 -102.3872,47.59027,0 -102.1996,47.57961,0 -102.0614,47.57729,0 -102.0163,47.53939,0 -101.8144,47.5023,0 -101.4348,47.56065000000001,0 -101.3807,47.52191000000001,0 -101.4371,47.46869000000001,0 -101.3423,47.2963,0 -101.1977,47.25529000000001,0 -101.1344,47.29811999999999,0 -100.9885,47.25916,0 -100.9889,47.19390000000001,0 -100.8747,47.04248,0 -100.93,46.98355000000001,0 -100.9013,46.90117,0 -100.8188,46.8093,0 -100.8355,46.75002,0 -100.7838,46.73688,0 -100.7804,46.68494,0 -100.6479,46.6602,0 -100.6235,46.60821,0 -100.5627,46.58238,0 -100.5988,46.47136,0 -100.5543,46.36341000000001,0 -100.5843,46.27890000000001,0 -100.5613,46.24074000000001,0 -100.628,46.11914,0 -100.5153,45.92761,0 -100.3773,45.86584,0 -100.3715,45.79243000000001,0 -100.3069,45.72111,0 -100.3307,45.66776000000001,0 -100.422,45.6551,0 -100.4905,45.55487,0 -100.4568,45.51511000000001,0 -100.3704,45.50183000000001,0 -100.2794,45.38273,0 -100.3219,45.31851,0 -100.2706,45.25081,0 -100.3317,45.10395000000001,0 -100.2805,45.03674,0 -100.4246,45.01186,0 -100.4071,44.85565,0 -100.5412,44.76557,0 -100.5997,44.76569,0 -100.7014,44.83079,0 -100.7303,44.80638,0 -100.7185,44.77095000000001,0 -100.6327,44.73686,0 -100.6343,44.57531,0 -100.5215,44.54869,0 -100.5922,44.4953,0 -100.5861,44.4632,0 -100.3989,44.45416,0 -100.3857,44.40596,0 -100.7452,43.9761,0 -100.7452,43.72055,0 -100.5873,43.76701,0 -100.4769,43.72082,0 -100.232,43.71497,0 -100.1977,42.99109,0 -100.9094,42.98817,0 -100.9094,42.85428,0 -100.8633,42.85428,0 -100.8633,42.80814,0 -100.8056,42.80621,0 -100.8056,42.74853,0 -100.8979,42.74853,0 -100.8979,42.66779,0 -100.8267,42.66779,0 -100.8267,42.48515,0 -100.8729,42.48515,0 -100.8729,42.29674,0 -100.6806,42.29481,0 -100.6806,42.08107,0 -100.8447,42.082,0 -100.8393,41.73868,0 -101.4083,41.73717,0 -101.4027,41.39172,0 -101.2625,41.39017,0 -101.2429,41.04119,0 -101.243,40.69778,0 -101.3406,40.69749,0 -101.3217,40.00183,0 -102.0511,39.99892,0 -102.049,39.5687,0 -101.4063,39.56715,0 -101.3867,39.12926,0 -101.4727,39.12796,0 -101.4782,38.69465,0 -101.5631,38.69329,0 -101.5204,37.73152,0 -102.0435,37.73439,0 -102.0368,36.98897,0 -102.9972,36.99850000000001,0 -102.9969,36.5,0 -103.0656,32,0 -104.9226,31.99982,0 -104.9016,30.81495,0 -104.9149,30.68164000000001,0 -104.9921,30.63846,0 -105.0022,30.68027,0 -105.2075,30.80166,0 -105.2614,30.79722,0 -105.3897,30.86222,0 -105.5672,31.00945,0 -105.5978,31.08,0 -105.7703,31.17611,0 -105.9489,31.36195,0 -106.2144,31.47528000000001,0 -106.3908,31.74472,0 -106.5229,31.78075000000001,0 -108.2086,31.78334,0 -108.2083,31.33305,0 -108.8319,31.33264,0 -108.8914,31.19222,0 -108.8361,31.15695,0 -108.7981,31.205,0 -108.735,30.6325,0 -108.6778,30.57583,0 -108.5581,29.99277,0 -108.6136,29.40111,0 -108.7078,29.40084,0 -108.6239,28.77111,0 -108.6895,28.69639000000001,0 -108.5656,28.28916,0 -108.6525,28.21222,0 -108.8808,28.29834,0 -108.977,28.30556,0 -109.022,28.27584,0 -109.0558,28.29917,0 -109.1464,28.17583,0 -108.9139,27.785,0 -108.8097,27.71167,0 -108.775,27.59945,0 -108.6553,27.52,0 -108.6675,27.40416,0 -108.6364,27.31917,0 -108.6653,27.15195,0 -108.6042,27.03805,0 -108.4713,26.96133,0 -108.405,27.03082,0 -108.3053,27.06138,0 -108.2489,27.04083,0 -108.2206,26.97277,0 -108.0356,26.94750000000001,0 -108.0039,26.81972,0 -107.8467,26.64,0 -107.7844,26.20028,0 -107.3664,26.11527,0 -107.2997,25.94334,0 -107.1517,25.77556,0 -107.0841,25.60609,0 -107.1194,25.20945,0 -107.0422,24.99416,0 -106.9489,24.84194,0 -106.885,24.77028,0 -106.8,24.75277,0 -106.7828,24.7025,0 -106.6508,24.58861,0 -106.5192,24.30194,0 -106.3961,24.28472,0 -106.2492,24.39027,0 -106.0022,24.21194,0 -105.9597,24.09889,0 -105.9081,24.05527,0 -105.8964,23.78945,0 -105.7181,23.47472,0 -105.6842,23.28722,0 -105.5289,23.14444,0 -105.4167,23.14722,0 -105.4021,23.06746,0 -105.3125,23.03472,0 -105.172,23.03972,0 -104.9147,22.92472,0 -104.88,22.78306,0 -104.9981,22.67889,0 -104.9981,22.54834,0 -104.7575,22.67666,0 -104.6606,22.62444,0 -104.6125,22.4725,0 -104.4914,22.41027,0 -104.345,22.45138,0 -104.3114,22.31921,0 -104.3296,22.26453,0 -104.4028,22.07638,0 -104.0936,21.78583,0 -104.1528,21.59805,0 -104.2072,21.54721,0 -103.9449,21.37497,0 -103.9614,21.28777,0 -104.0425,21.21139,0 -104.2277,21.17774,0 -104.21,20.97805,0 -104.275,20.86084,0 -104.2847,20.70916,0 -104.4672,20.82972,0 -104.535,20.91611,0 -104.625,20.9236,0 -104.7219,21.01278,0 -104.77,21.02055,0 -104.9489,20.92556,0 -105.0833,20.92528,0 -105.2669,20.69905,0 -105.2336,20.62889,0 -105.2503,20.56556,0 -105.352,20.51305,0 -105.5903,20.47805,0 -105.677,20.42417,0 -105.68,20.38639,0 -105.562,20.21917,0 -105.5422,20.07695,0 -105.4569,19.92222,0 -105.2144,19.6225,0 -105.1025,19.565,0 -105.0225,19.37195,0 -104.8967,19.28389,0 -104.797,19.28861,0 -104.8097,19.22084,0 -104.735,19.23,0 -104.6628,19.16805,0 -104.4483,19.09083,0 -104.3278,19.09527,0 -104.315,19.00805,0 -103.972,18.87722,0 -103.7147,18.6625,0 -103.6839,18.61138,0 -103.7047,18.58528,0 -103.5792,18.50083,0 -103.45,18.31361,0 -103.0294,18.19,0 -102.745,18.06582,0 -102.4875,18.02333,0 -102.181,17.92083,0 -102.0292,17.99195,0 -101.9214,17.96194,0 -101.7878,17.87611,0 -101.6331,17.66695,0 -101.5561,17.61777,0 -101.4978,17.62195,0 -101.4178,17.51861,0 -101.1044,17.35889,0 -101.0486,17.26694,0 -100.1864,16.95556,0 -100.0783,16.94166,0 -99.9389,16.88222,0 -99.90001,16.82555,0 -99.87807000000002,16.87028,0 -99.83778000000001,16.81445,0 -99.84972000000002,16.7875,0 -99.69222000000001,16.70834,0 -99.03695999999999,16.59694,0 -98.86473000000001,16.52444,0 -98.78223,16.55305,0 -98.53667,16.30695,0 -98.09807000000001,16.21416,0 -98.06444999999999,16.18389,0 -98.16724000000002,16.19695,0 -97.87000999999999,16.06195,0 -97.87112000000001,16.02139,0 -97.785,15.96861,0 -97.51684,15.94563,0 -97.51781,10.94564,0 -97.51877000000002,5.945633,0 -97.51974,0.9456385000000001,0 -97.52070999999999,-4.054366,0 -97.52168,-9.054360000000001,0 -97.52263000000001,-14.05436,0 -97.52332,-17.55437,0 -97.52416,-21.93729,0 -102.5242,-21.93729,0 -107.5242,-21.93729,0 -111.1275,-21.93729,0 -111.1033,-26.93723,0 -111.079,-31.93718000000001,0 -111.071,-33.59291,0 -106.0709,-33.59291,0 -101.071,-33.59291,0 -97.52641,-33.59291,0 -97.52773000000001,-38.59291,0 -97.52906000000002,-43.59291000000001,0 -97.53039000000003,-48.59291,0 -97.53172000000002,-53.59291,0 -97.53304,-58.59291000000001,0 -97.53437,-63.59291,0 -97.53570000000001,-68.5929,0 -97.53608,-70.01852,0 -97.53912000000001,-75.01852,0 -97.54217,-80.01852000000001,0 -97.54416999999999,-83.31852000000001,0 -97.54723000000001,-88.31852000000001,0 -97.54818000000002,-89.90000000000001,0 -98.54521,-89.90000000000001,0 -99.54222,-89.90000000000001,0 -100.5392,-89.90000000000001,0 -101.5362,-89.90000000000001,0 -102.5332,-89.90000000000001,0 -103.5303,-89.90000000000001,0 -104.5273,-89.90000000000001,0 -105.5243,-89.90000000000001,0 -106.5213,-89.90000000000001,0 -107.5183,-89.90000000000001,0 -108.5153,-89.90000000000001,0 -109.5123,-89.90000000000001,0 -110.5093,-89.90000000000001,0 -111.5063,-89.90000000000001,0 -112.5033,-89.90000000000001,0 -112.5033,-85.55074999999999,0 -112.5031,-80.55074999999999,0 -112.503,-75.55074999999999,0 -112.503,-74.55074000000001,0 -112.5029,-69.55074000000001,0 -112.5028,-64.55074000000001,0 -112.5027,-59.55075,0 -112.5026,-55.75074,0 -112.5025,-50.75074000000001,0 -112.5024,-45.75074000000002,0 -112.5023,-40.75074,0 -112.5022,-35.75074,0 -112.5021,-30.75074,0 -112.502,-25.75075,0 -112.5019,-23.55074,0 -112.5018,-18.55075,0 -112.5017,-13.55074,0 -112.5016,-8.550748000000001,0 -112.5015,-5.950747,0 -112.5014,-0.9507425000000002,0 -112.5013,4.049253,0 -112.5012,9.049256,0 -112.5011,14.04925,0 -112.501,19.04926,0 -112.5009,24.04926,0 -116.9047,24.05259,0 -116.9047,28.00672,0 -114.2077,28.00027,0 -114.1616,28.00056,0 -112.7233,27.99974,0 -112.1676,28.00019,0 -115.0172,31.95443,0 -114.9989,32.13611,0 -115.0415,32.25468,0 -114.9642,32.36861,0 -114.9367,32.47305,0 -114.8098,32.50699,0 -114.7956,32.60999,0 -114.7191,32.71846,0 -114.69,32.74276,0 -114.5417,32.7272,0 -114.5269,32.80082,0 -114.4581,32.86027,0 -114.4644,32.97165,0 -114.5089,33.0225,0 -114.6608,33.04193,0 -114.6961,33.08693,0 -114.6678,33.21554,0 -114.7286,33.30749,0 -114.6992,33.36055,0 -114.7261,33.40804,0 -114.6367,33.41999,0 -114.5264,33.56166,0 -114.5225,33.68415,0 -114.4839,33.72193,0 -114.5161,33.825,0 -114.4886,33.89249,0 -114.5225,33.95027,0 -114.4228,34.02638,0 -114.3903,34.10972,0 -114.1147,34.28249,0 -114.1672,34.3575,0 -114.3733,34.47304,0 -114.3697,34.52917,0 -114.4561,34.6986,0 -114.6222,34.88499,0 -114.6219,34.99214,0 -114.6333,35.04749,0 -114.6075,35.08221,0 -114.6364,35.12526,0 -114.5795,35.14415,0 -114.5686,35.22332,0 -114.5839,35.3411,0 -114.6683,35.51027000000001,0 -114.6439,35.62665,0 -114.6903,35.72499,0 -114.6917,35.81499,0 -114.6603,35.88194,0 -114.7405,35.98611,0 -114.7264,36.08277,0 -114.5506,36.16194,0 -114.4514,36.12777,0 -114.3575,36.1461,0 -114.2372,36.02583,0 -114.1208,36.05833,0 -114.0419,36.19972,0 -114.0403,37.00311,0 -114.0426,41.99549,0 -116.9849,42,0 -117.0169,42.58601000000001,0 -118.2066,42.59258,0 -118.2076,42.81335,0 -117.9707,42.81335,0 -117.9707,43.09735,0 -118.2191,43.09735,0 -118.2288,44.24651,0 -118.1505,44.26134,0 -118.0106,44.42295,0 -117.9629,44.4388,0 -117.5899,44.44006,0 -117.4845,44.37986,0 -117.482,44.29872,0 -117.1985,44.30091,0 -117.2122,44.48249,0 -117.1336,44.54388,0 -117.0278,44.74638000000001,0 -116.8958,44.8311,0 -116.8378,44.92443,0 -116.8372,45.02555000000001,0 -116.7114,45.17027,0 -116.6503,45.35638,0 -116.4533,45.60694,0 -116.5461,45.76222000000001,0 -116.7793,45.86157000000001,0 -116.7283,45.89332,0 -116.7175,45.97332000000001,0 -116.6217,46.00667000000001,0 -116.6122,46.04194,0 -116.2922,45.89305,0 -116.2728,45.86054000000002,0 -116.2992,45.69137,0 -116.2583,45.61999000000001,0 -116.2992,45.4586,0 -116.2811,45.42443000000001,0 -116.1983,45.40526000000001,0 -115.7964,45.46944,0 -115.4781,45.3886,0 -115.1775,45.58222000000001,0 -114.7511,45.40534,0 -114.798,45.43404000000001,0 -114.781,45.4964,0 -114.6612,45.46328000000001,0 -114.5395,45.56702000000001,0 -114.545,45.62778,0 -114.4908,45.71027,0 -114.5547,45.77943000000001,0 -114.4961,45.84470000000001,0 -114.3819,45.89249,0 -114.4164,45.92888000000001,0 -114.4022,45.98804,0 -114.4742,46.00193,0 -114.4853,46.04971,0 -114.45,46.10917,0 -114.5045,46.15972,0 -114.4319,46.19055000000001,0 -114.4561,46.26999,0 -114.3708,46.45361,0 -114.4003,46.50555,0 -114.3367,46.53582999999999,0 -114.325,46.66916000000001,0 -114.5764,46.64444,0 -114.6367,46.67388,0 -114.6178,46.71749000000001,0 -114.6694,46.75111,0 -114.765,46.71471,0 -114.7655,46.77638,0 -114.9064,46.84138000000001,0 -114.9156,46.92389000000001,0 -115.045,46.9886,0 -115.3183,47.2561,0 -115.4958,47.3011,0 -115.5803,47.38527000000001,0 -115.725,47.43721,0 -115.6347,47.48444,0 -115.7375,47.55583,0 -115.6742,47.60999,0 -115.7208,47.70805000000001,0 -116.0492,47.99333,0 -116.0483,48.99972000000001,0 -116.5332,49.00125000000001,0 -116.5611,49.11279,0 -116.6671,49.28718,0 -116.7472,49.33989,0 -116.8359,49.59236,0 -116.8967,49.64001,0 -116.877,49.79817000000001,0 -116.6975,49.85698,0 -116.7112,49.88435000000001,0 -116.4709,49.89754,0 -116.4435,49.98169000000002,0 -116.4993,50.06382000000001,0 -116.4521,50.15508000000001,0 -116.5616,50.21387,0 -116.5408,50.31831,0 -116.6179,50.31628,0 -116.6392,50.40956000000001,0 -116.7228,50.46025,0 -116.6894,50.48155,0 -116.6559,50.60120000000001,0 -116.5839,50.64782,0 -116.7811,50.69954,0 -116.8288,50.75225,0 -116.8136,50.78572,0 -116.915,50.77051,0 -116.9631,50.81107000000001,0 -117.0392,50.81512,0 -117.0432,50.85568000000001,0 -117.0858,50.8648,0 -117.0382,50.95707,0 -117.1659,50.97937000000001,0 -117.137,51.01789000000001,0 -117.1684,51.02501,0 -117.4224,51.40926000000001,0 -117.7393,51.42244,0 -117.8513,51.51675000000001,0 -117.8006,51.56642,0 -117.8462,51.58163,0 -117.8179,51.63131000000001,0 -117.8381,51.65870000000001,0 -117.9355,51.61814,0 -117.975,51.65362,0 -118.0663,51.6597,0 -118.0445,51.7621,0 -118.1043,51.85538,0 -118.6163,52.06324,0 -118.7623,52.17984,0 -118.6751,52.15347,0 -118.5869,52.19099,0 -118.5636,52.265,0 -118.4936,52.31367000000001,0 -118.3567,52.36639000000001,0 -118.2918,52.33801,0 -118.2276,52.37917000000001,0 -118.2597,52.44221,0 -118.2083,52.48082,0 -118.2869,52.52777,0 -118.2817,52.56527,0 -118.35,52.61805,0 -118.305,52.67471,0 -118.3461,52.74333,0 -118.4289,52.78611000000001,0 -118.4156,52.83638000000001,0 -118.4914,52.89777000000001,0 -118.625,52.88416,0 -118.6797,52.97054,0 -118.6633,53.01554000000002,0 -118.7275,53.06138,0 -118.7811,53.05583,0 -118.755,53.12083,0 -118.9597,53.23333,0 -119.0122,53.22305,0 -119.0136,53.14472000000001,0 -119.0378,53.13583,0 -119.2655,53.19666,0 -119.3528,53.27916,0 -119.3858,53.36166,0 -119.5989,53.37887,0 -119.6369,53.35166,0 -119.7381,53.395,0 -119.8153,53.49972,0 -119.9025,53.52027,0 -119.8828,53.56027,0 -119.9322,53.60722,0 -119.7686,53.60332,0 -119.7353,53.63499000000001,0 -119.8103,53.70777,0 -119.9211,53.71833000000002,0 -119.9047,53.7786,0 -119.9783,53.78889000000002,0 -120.0003,53.83022,0 -120.9006,54.20094000000001,0 -121.2157,54.48102000000001,0 -121.6533,54.53355,0 -122.8612,55.42631000000001,0 -123.5964,55.89894000000001,0 -124.1216,56.86174000000001,0 -124.0969,57.03444,0 -123.944,57.12243,0 -123.7545,57.12799,0 -123.5888,57.33548,0 -123.515,57.36665,0 -123.4541,57.3213,0 -123.4153,57.14465000000001,0 -122.2026,56.93232,0 -122.1153,56.9519,0 -122.0286,57.01699,0 -121.8406,56.99683,0 -121.7099,57.02437000000001,0 -121.2803,57.24454,0 -120.8415,57.23171000000001,0 -120.3444,57.478,0 -120.2163,57.45917,0 -120,57.26251,0 -120,60.00000000000001,0 -123.8157,60.00000000000001,0 -123.9743,60.09237000000001,0 -124.1953,60.32888,0 -124.2064,60.45722,0 -124.4183,60.47915,0 -124.4594,60.56972,0 -124.6142,60.66859,0 -124.6192,60.70972,0 -124.4769,60.79055000000001,0 -124.5919,60.96054000000001,0 -124.813,60.97249000000002,0 -124.8778,60.91721,0 -124.8717,60.85804,0 -125.1747,60.85054,0 -125.3492,60.7834,0 -125.712,60.82726000000001,0 -125.8872,60.89694,0 -125.957,60.87723,0 -126.0092,60.80341,0 -126.1072,60.81701,0 -126.1075,60.85894,0 -126.1709,60.86586000000001,0 -126.2395,60.8567,0 -126.2228,60.80284,0 -126.2728,60.78532,0 -126.3945,60.77668000000001,0 -126.5203,60.81442000000001,0 -126.6722,60.74347000000001,0 -126.7764,60.78527,0 -126.84,60.75722,0 -126.8869,60.78249000000001,0 -126.8797,60.82999,0 -126.9253,60.86221,0 -126.8989,60.94165,0 -126.9394,61.00249,0 -126.9353,61.05916,0 -127.0558,61.03999000000002,0 -127.1019,61.07083,0 -127.0108,61.13416,0 -127.0644,61.37249,0 -127.125,61.4011,0 -127.1417,61.46666,0 -127.2883,61.51916000000001,0 -127.3792,61.50721000000001,0 -127.5503,61.51138000000001,0 -127.9728,61.68860000000001,0 -128.0806,61.84916,0 -128.2136,61.85055,0 -128.2686,61.94055,0 -128.3881,61.99387999999999,0 -128.3753,62.02722000000001,0 -128.547,62.12222,0 -128.6775,62.12526,0 -128.7653,62.05833,0 -128.9842,62.13611,0 -129.1228,62.11667,0 -129.2939,62.15611,0 -129.1992,62.21694,0 -129.2822,62.26721,0 -129.3105,62.32639,0 -129.2158,62.37749000000001,0 -129.3083,62.42138000000001,0 -129.1722,62.48166,0 -129.4178,62.58499,0 -129.5678,62.57444000000001,0 -129.4878,62.61889,0 -129.5239,62.64333,0 -129.517,62.67249000000001,0 -129.6253,62.70499,0 -129.6308,62.76083,0 -129.7739,62.87443,0 -129.7025,62.89222000000002,0 -129.7261,62.91416,0 -129.7058,62.95222,0 -129.5989,63.05194000000001,0 -129.6372,63.08027,0 -129.8472,63.08694,0 -129.8353,63.11472000000001,0 -129.9003,63.19721,0 -129.9786,63.20361,0 -130.0445,63.26999,0 -130.1511,63.26582000000001,0 -130.1319,63.31555,0 -129.9192,63.37276,0 -129.8972,63.45221,0 -129.8195,63.48333000000001,0 -129.8981,63.57222,0 -129.958,63.58526,0 -129.9486,63.61361000000001,0 -130.093,63.63055,0 -130.1108,63.66443,0 -130.0825,63.68833,0 -130.1097,63.70361,0 -130.252,63.66666000000001,0 -130.3211,63.69582000000001,0 -130.2825,63.73777,0 -130.2342,63.73915,0 -130.1039,63.76416,0 -130.1197,63.80805,0 -130.3703,63.84388000000001,0 -130.5222,63.93499,0 -130.5811,63.92416,0 -130.7556,63.98693,0 -130.7786,64.00915999999999,0 -130.7514,64.0461,0 -130.8639,64.04304999999999,0 -130.8536,64.07249,0 -130.9478,64.13721,0 -130.8672,64.18777,0 -130.9372,64.20999999999999,0 -130.9797,64.26555000000001,0 -131.0605,64.27943000000001,0 -131.002,64.33028,0 -131.1417,64.42443,0 -131.3886,64.46720999999999,0 -131.4275,64.41638,0 -131.593,64.36859,0 -131.8181,64.37831,0 -131.8039,64.43803,0 -131.6878,64.4986,0 -131.6942,64.53498999999999,0 -131.9158,64.58249000000001,0 -132.0464,64.69553000000001,0 -132.1636,64.70166,0 -132.3689,64.77831999999999,0 -132.5706,64.77249999999999,0 -132.6153,64.81219,0 -132.4825,64.87691,0 -132.5075,64.96442,0 -132.3333,65.03471999999999,0 -132.3817,65.08499000000001,0 -132.54,65.09388,0 -132.5561,65.11803999999999,0 -132.5275,65.16277000000001,0 -132.5764,65.19054,0 -132.7147,65.15555000000001,0 -132.7878,65.18777,0 -132.7169,65.20387,0 -132.7836,65.22499000000001,0 -132.5553,65.28360000000001,0 -132.5214,65.36304,0 -132.3278,65.43471,0 -132.2736,65.54694000000001,0 -132.1719,65.59804,0 -132.3239,65.73997,0 -132.5294,65.82555000000001,0 -132.5733,65.84859,0 -132.54,65.88916,0 -132.3267,65.95193,0 -132.3536,65.99026000000001,0 -132.5103,65.97887,0 -132.5761,66.03055000000001,0 -132.7822,65.96720999999999,0 -132.817,65.91998,0 -132.9061,65.90833000000001,0 -132.9939,65.92303,0 -132.9084,65.99693000000001,0 -132.9397,66.02887,0 -133.1475,66.02469000000001,0 -133.4075,65.94386,0 -133.6294,65.97443,0 -133.6033,66.05165,0 -133.7047,66.07193,0 -133.6731,66.11693,0 -133.5639,66.15583,0 -133.57,66.27831999999999,0 -133.8247,66.31666,0 -133.7681,66.37303,0 -133.7503,66.44775,0 -133.6294,66.44525,0 -133.6903,66.53193,0 -133.5867,66.5647,0 -133.7719,66.64413999999999,0 -133.7572,66.68526,0 -133.8403,66.72776,0 -133.7639,66.80692999999999,0 -133.9081,66.90887000000001,0 -134.0925,66.95527,0 -134.0461,66.98441,0 -133.8311,67.00333000000001,0 -136.1645,67.00360000000001,0 -136.2222,67.06415,0 -136.1989,67.14333000000001,0 -136.2364,67.17386999999999,0 -136.1345,67.22638000000001,0 -136.0914,67.30247,0 -136.1428,67.35942,0 -136.1164,67.38274,0 -136.2053,67.40694000000001,0 -136.1578,67.50776999999999,0 -136.2411,67.62053,0 -136.4211,67.65526000000001,0 -136.445,67.71554999999999,0 -136.4442,68.43304000000001,0 -136.4447,68.58778,0 -136.4461,68.87302,0 -136.4206,68.90156,0 -136.2715,69.22282,0 -135.6703,69.64033000000001,0 -134.3343,69.85742999999999,0 -133.5828,69.57352,0 -130.4598,70.22484,0 -129.9588,70.14133,0 -129.7417,70.30833,0 -128.8733,70.34173000000001,0 -128.2554,70.67574000000001,0 -127.5151,70.49976,0 -126.1624,71.89608,0 -124.8097,73.59784999999999,0 -125.0715,74.16511,0 -124.8534,74.47057,0 -123.1952,75.95415,0 -123.1516,76.30323,0 -121.9734,76.60868000000002,0 -120.5771,76.91412,0 -118.9626,77.43774000000001,0 -116.999,77.65592,0 -114.0755,78.39772000000001,0 -112.5046,78.6159,0 -112.5046,79.90000000000001,0 -112.5046,84.90001,0 -112.5046,89.90000000000001,0 -111.5053,89.90000000000001,0 -110.5061,89.90000000000001,0 -109.5068,89.90000000000001,0 -108.5075,89.90000000000001,0 -107.5082,89.90000000000001,0 -106.509,89.90000000000001,0 -105.5097,89.90000000000001,0 -104.5104,89.90000000000001,0 -103.5111,89.90000000000001,0 -102.5119,89.90000000000001,0 -101.5126,89.90000000000001,0 -100.5133,89.90000000000001,0 -99.51402000000002,89.90000000000001,0 -98.51475000000001,89.90000000000001,0 -97.51546,89.90000000000001,0 + + + 1 + + + + GMT -06:00 + + +]]> + #khStylem0600 + + + + +-82.51007,89.90000000000001,0 -82.5051,84.90001,0 -82.50320000000001,82.97593999999999,0 -84.99902,82.98072000000001,0 -84.99903999999999,77.98072999999999,0 -84.99907,72.98072000000001,0 -84.9991,67.98071,0 -84.9991,66.25666,0 -85.64087000000001,66.05121,0 -86.11559,65.84233,0 -86.74223000000002,64.72197,0 -87.25494000000001,64.20925,0 -87.6917,63.6016,0 -87.52079000000001,63.03194,0 -86.66628,62.44327,0 -85.00069000000001,61.95694000000001,0 -85.00126,56.95695000000001,0 -85.00144,55.29702000000001,0 -85.39335,55.40889,0 -85.49944000000002,55.47222000000001,0 -85.56947,55.5586,0 -85.94445,55.69778,0 -86.27722000000001,55.72887,0 -86.47778,55.80888,0 -86.95889,55.90582,0 -86.97945,55.93166,0 -87.3625,55.94666,0 -87.35195,55.99276,0 -87.54861,56.04999,0 -87.61583,56.00277000000001,0 -87.58362,56.0761,0 -87.70805,56.1561,0 -87.72389,56.20388,0 -87.94305,56.37749000000001,0 -87.98277000000002,56.44165000000002,0 -88.3536,56.55332000000001,0 -88.48999000000001,56.64222000000001,0 -88.65472000000001,56.69638,0 -88.87944,56.85804000000001,0 -89.03778000000001,56.83611,0 -89.13284,56.86485,0 -89.30607999999999,56.62564,0 -89.62405000000001,56.43136,0 -89.60860000000001,51.43138,0 -89.59805,48.00918,0 -89.49317000000001,48.00332000000001,0 -90.41302,46.5882,0 -90.39612,46.54695,0 -90.33277,46.55915,0 -90.22278,46.50722,0 -90.12388,46.33972,0 -89.11749,46.14805,0 -88.83806,46.035,0 -88.64194999999999,46.00111,0 -88.52029000000002,46.02499,0 -88.11583000000002,45.93221,0 -88.08139,45.87777,0 -88.11834,45.80527000000001,0 -87.90083,45.75944,0 -87.80029,45.68415,0 -87.82556,45.65526000000001,0 -87.78751,45.59664999999999,0 -87.83,45.57166000000001,0 -87.8036,45.50139,0 -87.87027000000002,45.44221000000001,0 -87.88084000000001,45.36639,0 -87.67610000000002,45.38666000000001,0 -87.65055,45.35194,0 -87.71666999999999,45.26721,0 -87.735,45.18721000000001,0 -87.64861999999999,45.11694,0 -87.43716000000001,45.07106,0 -87.40428,45.19296000000001,0 -87.27666000000001,45.25579,0 -87.08848999999999,45.44498,0 -86.7586,45.44141000000001,0 -86.24245000000001,45.23384000000001,0 -86.57338000000001,44.99793,0 -86.71111000000001,44.83602,0 -86.83409,44.59161,0 -87.06783,43.96139,0 -87.15730000000001,43.41102,0 -87.02119000000002,42.48526,0 -87.21111000000002,41.76225,0 -86.52540999999999,41.75969,0 -86.52528000000001,41.66103,0 -86.48599,41.65967,0 -86.48571,41.58063,0 -86.5304,41.52581,0 -86.52912000000001,41.43995,0 -86.64751,41.43719,0 -86.76918000000001,41.30227,0 -86.88367,41.26608,0 -86.93285,41.17447,0 -86.93117,40.91845,0 -86.98653,40.9182,0 -86.98604,40.84695,0 -87.10338,40.84467,0 -87.10191,40.74436,0 -87.52641,40.74535,0 -87.53278,39.35695000000001,0 -87.62639,39.30471,0 -87.58945,39.20638,0 -87.65916,39.15582,0 -87.66861,39.10999,0 -87.59389,39.0561,0 -87.58611999999999,38.99554,0 -87.53416,38.95333,0 -87.55777000000001,38.86805,0 -87.51195,38.74527,0 -87.66583,38.55999,0 -87.64584000000001,38.49499,0 -87.75584000000001,38.45804,0 -87.75163000000001,38.41816,0 -87.61599,38.45092000000001,0 -87.54741,38.51014,0 -87.50431,38.49449,0 -87.47975,38.53218,0 -87.47684,38.46685,0 -87.41956,38.43461,0 -87.4182,38.37928,0 -87.319,38.37801,0 -87.30332,38.23492000000001,0 -86.79993,38.20176,0 -86.81465,38.13544,0 -86.78015000000001,38.10248,0 -86.77476,38.01123,0 -86.82632,37.99151,0 -86.75384,37.8983,0 -86.66867000000001,37.91314000000001,0 -86.64558,37.84594,0 -86.59833,37.92101,0 -86.52275,37.92781000000001,0 -86.50314,38.05159,0 -86.16003000000001,37.80325,0 -86.28140999999999,37.59924,0 -86.12286,37.5709,0 -86.05628,37.44679,0 -85.66943000000001,37.41729,0 -85.64707,37.4683,0 -85.59048,37.46286,0 -85.58540000000001,37.42731,0 -85.47422,37.34881,0 -85.39812000000002,37.2369,0 -85.41483,37.21706,0 -85.36129,37.19164,0 -85.32208,37.24111,0 -85.20011,37.26906,0 -85.17966,37.31235,0 -85.07001,37.25666,0 -85.0663,37.20251,0 -84.97011999999999,37.11,0 -84.91865,37.12032000000001,0 -84.92086000000001,37.05594,0 -84.84885000000001,36.99782,0 -84.77699,36.95735,0 -84.68555000000001,36.98052,0 -84.58721,36.87076,0 -84.59557000000001,36.80482,0 -84.67641,36.7645,0 -84.79111,36.60536,0 -84.65366,36.39601,0 -84.77486,36.3341,0 -84.78586,36.29548,0 -84.866,36.28408,0 -84.9053,36.15482,0 -84.79865,36.09025,0 -84.67876,35.91422,0 -84.76385999999999,35.82634,0 -84.89986,35.77536,0 -84.97051999999999,35.6754,0 -85.10691000000001,35.58106,0 -85.13974,35.50185,0 -85.11647000000001,35.48328,0 -85.14761,35.45309,0 -85.17104000000001,35.46849,0 -85.38441,35.15899,0 -85.36797,35.06706,0 -85.46741,34.99005,0 -85.62070000000001,34.9901,0 -85.3925,33.99749,0 -85.17416,32.82417000000001,0 -85.13276999999999,32.7786,0 -85.10445,32.64415,0 -84.99306,32.51193,0 -84.96278,32.42333,0 -84.99695,32.33583,0 -84.89417000000002,32.26944,0 -85.05083000000001,32.13832,0 -85.06027,32.00388,0 -85.14111,31.82611,0 -85.03751,31.54083,0 -85.10889,31.27111,0 -85.09972000000001,31.17888,0 -85.00557000000001,31.06222,0 -85.00448,31.00173,0 -84.93167,30.88832,0 -84.91332,30.75332,0 -84.86639000000001,30.71832,0 -84.98378,30.54212,0 -84.98756,30.44610000000001,0 -85.029,30.42799,0 -85.01819999999999,30.37397,0 -85.14525999999999,30.13059,0 -85.11667,30.03346,0 -85.02682,29.97955,0 -85.02878,29.81974,0 -85.04214,29.7827,0 -85.11682,29.77658,0 -85.21616,29.69783,0 -85.05280000000001,29.59025,0 -84.98586,29.60068,0 -84.76974,29.69064,0 -84.67976,29.76196,0 -84.34405,29.89086,0 -84.32649000000001,29.96329,0 -84.18716000000001,30.06915,0 -84.00285,30.07809,0 -83.73586,29.94671,0 -83.60023000000001,29.82804,0 -83.58752,29.756,0 -83.42648,29.65429,0 -83.40105,29.5102,0 -83.13406000000001,29.26864,0 -83.04929,29.13302,0 -82.97725000000001,29.1754,0 -82.81621,29.14997,0 -82.65092,28.70922,0 -82.66786999999999,28.52699,0 -82.81197,28.15403,0 -82.86282,27.87009,0 -82.65622999999999,27.34336,0 -82.67905,24.16667,0 -86.05847,24.16667,0 -86.05847,19.16667,0 -86.05847,18.18773,0 -82.60478999999999,18.18773,0 -82.60478999999999,13.18773,0 -82.60478999999999,9.495170999999999,0 -82.66473000000001,9.495278000000001,0 -82.74890000000001,9.584163,0 -82.83307000000001,9.612215000000001,0 -82.87575,9.558963,0 -82.83338999999999,9.498041000000001,0 -82.93473,9.471663,0 -82.93047,9.063126000000001,0 -82.88890000000001,9.074448,0 -82.71084999999999,8.931113,0 -82.87779000000001,8.827496999999999,0 -82.85778999999999,8.809163,0 -82.91446999999999,8.762786999999999,0 -82.83196,8.626661,0 -82.82993,8.474651,0 -83.04834000000001,8.326105999999999,0 -82.93085000000001,8.254719,0 -82.88612000000001,8.103338000000003,0 -82.89883,8.025668,0 -82.86584000000001,8.020835999999999,0 -82.85028,8.060003,0 -82.8753,8.190837,0 -82.84778,8.270838,0 -82.72168000000002,8.317214,0 -82.60478999999999,8.304010999999999,0 -82.60348999999999,3.304008,0 -82.60218,-1.695988,0 -82.60088,-6.695992,0 -82.59957,-11.69599,0 -82.59827000000001,-16.69599,0 -82.59696,-21.69599,0 -82.59626,-24.39248,0 -82.59408000000001,-29.39247,0 -82.59188,-34.39248,0 -82.58971,-39.39247,0 -82.58879000000002,-41.49248,0 -82.5866,-46.49247,0 -82.58441999999999,-51.49246999999999,0 -82.58223,-56.49247,0 -82.58005,-61.49247,0 -82.57787,-66.49247,0 -82.57568000000001,-71.49247,0 -82.57349000000001,-76.49247000000001,0 -82.57227,-79.29246999999999,0 -82.57008,-84.29246999999999,0 -82.56790000000001,-89.29246999999999,0 -82.56762999999999,-89.90000000000001,0 -83.56634,-89.90000000000001,0 -84.56502999999999,-89.90000000000001,0 -85.56374,-89.90000000000001,0 -86.56245,-89.90000000000001,0 -87.56115,-89.90000000000001,0 -88.55985,-89.90000000000001,0 -89.55856,-89.90000000000001,0 -90.55726,-89.90000000000001,0 -91.55596000000001,-89.90000000000001,0 -92.55466,-89.90000000000001,0 -93.55338,-89.90000000000001,0 -94.55207,-89.90000000000001,0 -95.55079000000001,-89.90000000000001,0 -96.54949000000003,-89.90000000000001,0 -97.54818000000002,-89.90000000000001,0 -97.54723000000001,-88.31852000000001,0 -97.54416999999999,-83.31852000000001,0 -97.54217,-80.01852000000001,0 -97.53912000000001,-75.01852,0 -97.53608,-70.01852,0 -97.53570000000001,-68.5929,0 -97.53437,-63.59291,0 -97.53304,-58.59291000000001,0 -97.53172000000002,-53.59291,0 -97.53039000000003,-48.59291,0 -97.52906000000002,-43.59291000000001,0 -97.52773000000001,-38.59291,0 -97.52641,-33.59291,0 -101.071,-33.59291,0 -106.0709,-33.59291,0 -111.071,-33.59291,0 -111.079,-31.93718000000001,0 -111.1033,-26.93723,0 -111.1275,-21.93729,0 -107.5242,-21.93729,0 -102.5242,-21.93729,0 -97.52416,-21.93729,0 -97.52332,-17.55437,0 -97.52263000000001,-14.05436,0 -97.52168,-9.054360000000001,0 -97.52070999999999,-4.054366,0 -97.51974,0.9456385000000001,0 -97.51877000000002,5.945633,0 -97.51781,10.94564,0 -97.51684,15.94563,0 -97.785,15.96861,0 -97.87112000000001,16.02139,0 -97.87000999999999,16.06195,0 -98.16724000000002,16.19695,0 -98.06444999999999,16.18389,0 -98.09807000000001,16.21416,0 -98.53667,16.30695,0 -98.78223,16.55305,0 -98.86473000000001,16.52444,0 -99.03695999999999,16.59694,0 -99.69222000000001,16.70834,0 -99.84972000000002,16.7875,0 -99.83778000000001,16.81445,0 -99.87807000000002,16.87028,0 -99.90001,16.82555,0 -99.9389,16.88222,0 -100.0783,16.94166,0 -100.1864,16.95556,0 -101.0486,17.26694,0 -101.1044,17.35889,0 -101.4178,17.51861,0 -101.4978,17.62195,0 -101.5561,17.61777,0 -101.6331,17.66695,0 -101.7878,17.87611,0 -101.9214,17.96194,0 -102.0292,17.99195,0 -102.181,17.92083,0 -102.4875,18.02333,0 -102.745,18.06582,0 -103.0294,18.19,0 -103.45,18.31361,0 -103.5792,18.50083,0 -103.7047,18.58528,0 -103.6839,18.61138,0 -103.7147,18.6625,0 -103.972,18.87722,0 -104.315,19.00805,0 -104.3278,19.09527,0 -104.4483,19.09083,0 -104.6628,19.16805,0 -104.735,19.23,0 -104.8097,19.22084,0 -104.797,19.28861,0 -104.8967,19.28389,0 -105.0225,19.37195,0 -105.1025,19.565,0 -105.2144,19.6225,0 -105.4569,19.92222,0 -105.5422,20.07695,0 -105.562,20.21917,0 -105.68,20.38639,0 -105.677,20.42417,0 -105.5903,20.47805,0 -105.352,20.51305,0 -105.2503,20.56556,0 -105.2336,20.62889,0 -105.2669,20.69905,0 -105.0833,20.92528,0 -104.9489,20.92556,0 -104.77,21.02055,0 -104.7219,21.01278,0 -104.625,20.9236,0 -104.535,20.91611,0 -104.4672,20.82972,0 -104.2847,20.70916,0 -104.275,20.86084,0 -104.21,20.97805,0 -104.2277,21.17774,0 -104.0425,21.21139,0 -103.9614,21.28777,0 -103.9449,21.37497,0 -104.2072,21.54721,0 -104.1528,21.59805,0 -104.0936,21.78583,0 -104.4028,22.07638,0 -104.3296,22.26453,0 -104.3114,22.31921,0 -104.345,22.45138,0 -104.4914,22.41027,0 -104.6125,22.4725,0 -104.6606,22.62444,0 -104.7575,22.67666,0 -104.9981,22.54834,0 -104.9981,22.67889,0 -104.88,22.78306,0 -104.9147,22.92472,0 -105.172,23.03972,0 -105.3125,23.03472,0 -105.4021,23.06746,0 -105.4167,23.14722,0 -105.5289,23.14444,0 -105.6842,23.28722,0 -105.7181,23.47472,0 -105.8964,23.78945,0 -105.9081,24.05527,0 -105.9597,24.09889,0 -106.0022,24.21194,0 -106.2492,24.39027,0 -106.3961,24.28472,0 -106.5192,24.30194,0 -106.6508,24.58861,0 -106.7828,24.7025,0 -106.8,24.75277,0 -106.885,24.77028,0 -106.9489,24.84194,0 -107.0422,24.99416,0 -107.1194,25.20945,0 -107.0841,25.60609,0 -107.1517,25.77556,0 -107.2997,25.94334,0 -107.3664,26.11527,0 -107.7844,26.20028,0 -107.8467,26.64,0 -108.0039,26.81972,0 -108.0356,26.94750000000001,0 -108.2206,26.97277,0 -108.2489,27.04083,0 -108.3053,27.06138,0 -108.405,27.03082,0 -108.4713,26.96133,0 -108.6042,27.03805,0 -108.6653,27.15195,0 -108.6364,27.31917,0 -108.6675,27.40416,0 -108.6553,27.52,0 -108.775,27.59945,0 -108.8097,27.71167,0 -108.9139,27.785,0 -109.1464,28.17583,0 -109.0558,28.29917,0 -109.022,28.27584,0 -108.977,28.30556,0 -108.8808,28.29834,0 -108.6525,28.21222,0 -108.5656,28.28916,0 -108.6895,28.69639000000001,0 -108.6239,28.77111,0 -108.7078,29.40084,0 -108.6136,29.40111,0 -108.5581,29.99277,0 -108.6778,30.57583,0 -108.735,30.6325,0 -108.7981,31.205,0 -108.8361,31.15695,0 -108.8914,31.19222,0 -108.8319,31.33264,0 -108.2083,31.33305,0 -108.2086,31.78334,0 -106.5229,31.78075000000001,0 -106.3908,31.74472,0 -106.2144,31.47528000000001,0 -105.9489,31.36195,0 -105.7703,31.17611,0 -105.5978,31.08,0 -105.5672,31.00945,0 -105.3897,30.86222,0 -105.2614,30.79722,0 -105.2075,30.80166,0 -105.0022,30.68027,0 -104.9921,30.63846,0 -104.9149,30.68164000000001,0 -104.9016,30.81495,0 -104.9226,31.99982,0 -103.0656,32,0 -102.9969,36.5,0 -102.9972,36.99850000000001,0 -102.0368,36.98897,0 -102.0435,37.73439,0 -101.5204,37.73152,0 -101.5631,38.69329,0 -101.4782,38.69465,0 -101.4727,39.12796,0 -101.3867,39.12926,0 -101.4063,39.56715,0 -102.049,39.5687,0 -102.0511,39.99892,0 -101.3217,40.00183,0 -101.3406,40.69749,0 -101.243,40.69778,0 -101.2429,41.04119,0 -101.2625,41.39017,0 -101.4027,41.39172,0 -101.4083,41.73717,0 -100.8393,41.73868,0 -100.8447,42.082,0 -100.6806,42.08107,0 -100.6806,42.29481,0 -100.8729,42.29674,0 -100.8729,42.48515,0 -100.8267,42.48515,0 -100.8267,42.66779,0 -100.8979,42.66779,0 -100.8979,42.74853,0 -100.8056,42.74853,0 -100.8056,42.80621,0 -100.8633,42.80814,0 -100.8633,42.85428,0 -100.9094,42.85428,0 -100.9094,42.98817,0 -100.1977,42.99109,0 -100.232,43.71497,0 -100.4769,43.72082,0 -100.5873,43.76701,0 -100.7452,43.72055,0 -100.7452,43.9761,0 -100.3857,44.40596,0 -100.3989,44.45416,0 -100.5861,44.4632,0 -100.5922,44.4953,0 -100.5215,44.54869,0 -100.6343,44.57531,0 -100.6327,44.73686,0 -100.7185,44.77095000000001,0 -100.7303,44.80638,0 -100.7014,44.83079,0 -100.5997,44.76569,0 -100.5412,44.76557,0 -100.4071,44.85565,0 -100.4246,45.01186,0 -100.2805,45.03674,0 -100.3317,45.10395000000001,0 -100.2706,45.25081,0 -100.3219,45.31851,0 -100.2794,45.38273,0 -100.3704,45.50183000000001,0 -100.4568,45.51511000000001,0 -100.4905,45.55487,0 -100.422,45.6551,0 -100.3307,45.66776000000001,0 -100.3069,45.72111,0 -100.3715,45.79243000000001,0 -100.3773,45.86584,0 -100.5153,45.92761,0 -100.628,46.11914,0 -100.5613,46.24074000000001,0 -100.5843,46.27890000000001,0 -100.5543,46.36341000000001,0 -100.5988,46.47136,0 -100.5627,46.58238,0 -100.6235,46.60821,0 -100.6479,46.6602,0 -100.7804,46.68494,0 -100.7838,46.73688,0 -100.8355,46.75002,0 -100.8188,46.8093,0 -100.9013,46.90117,0 -100.93,46.98355000000001,0 -100.8747,47.04248,0 -100.9889,47.19390000000001,0 -100.9885,47.25916,0 -101.1344,47.29811999999999,0 -101.1977,47.25529000000001,0 -101.3423,47.2963,0 -101.4371,47.46869000000001,0 -101.3807,47.52191000000001,0 -101.4348,47.56065000000001,0 -101.8144,47.5023,0 -102.0163,47.53939,0 -102.0614,47.57729,0 -102.1996,47.57961,0 -102.3872,47.59027,0 -102.4334,47.53006,0 -102.6592,47.53583,0 -102.6803,47.58082000000001,0 -102.8392,47.60444,0 -103,47.67471,0 -103.0439,47.59749,0 -103.3642,47.61639000000002,0 -103.3961,47.605,0 -103.4097,47.53999,0 -103.5878,47.52712,0 -103.5878,47.58411,0 -103.6829,47.58421,0 -103.6829,47.71054,0 -103.8168,47.71054,0 -103.817,47.81991000000001,0 -103.9551,47.82047,0 -103.915,47.91,0 -103.9318,47.96657,0 -104.0479,48.00007000000001,0 -104.0625,49.0001,0 -104.9997,49.00018,0 -109.9997,49.0006,0 -109.9998,49.99528000000001,0 -110.0003,54.99528000000001,0 -110.0009,59.99528,0 -106.0682,59.99960999999999,0 -102.0009,59.99936,0 -102.0008,61.92099,0 -102.0007,66.92099,0 -101.2137,66.91991,0 -96.2137,66.9131,0 -96.05273000000001,66.91264,0 -93.98089000000002,66.90748000000001,0 -88.98090000000001,66.89502000000002,0 -89.01671000000002,69.25249000000001,0 -89.01796000000002,69.28883,0 -89.08181999999999,69.33895,0 -89.60105,69.45796,0 -90.1852,69.51204,0 -90.85590000000001,69.76086000000001,0 -91.90519000000001,70.62624,0 -92.1648,70.74524,0 -92.41362,70.81014,0 -92.57588,70.92914,0 -92.71651,71.11304,0 -92.78141000000001,71.28612,0 -92.93285,71.44838,0 -93.19248000000002,71.65391,0 -93.74417000000003,72.01089,0 -93.87927000000001,72.25537,0 -95.11967,72.46542,0 -96.41336,72.64267,0 -96.71005,72.71178000000001,0 -96.89134,72.69624,0 -97.00784,72.74532000000001,0 -98.29798,72.94485,0 -98.38002,72.95116,0 -100.5149,73.23768,0 -100.9536,73.20439,0 -101.191,73.22286,0 -102.0005,73.3723,0 -102.0004,75.63531,0 -102.0002,80.63531,0 -97.51546,80.63566,0 -97.51546,84.90001,0 -97.51546,89.90000000000001,0 -96.57764,89.90000000000001,0 -95.63981000000001,89.90000000000001,0 -94.70197,89.90000000000001,0 -93.76412000000002,89.90000000000001,0 -92.82628,89.90000000000001,0 -91.88844000000002,89.90000000000001,0 -90.95061,89.90000000000001,0 -90.01277,89.90000000000001,0 -89.07494,89.90000000000001,0 -88.1371,89.90000000000001,0 -87.19926,89.90000000000001,0 -86.26142,89.90000000000001,0 -85.32359,89.90000000000001,0 -84.38574,89.90000000000001,0 -83.44790999999999,89.90000000000001,0 -82.51007,89.90000000000001,0 + + + 1 + + + + GMT -05:00 + + +]]> + #khStylem0500 + + + + +-67.50302000000001,89.90000000000001,0 -67.50302000000001,84.90001,0 -67.50302000000001,82.99629,0 -64.77722,82.92871,0 -63.38053000000001,82.86113,0 -62.89619,82.57953999999999,0 -61.43191,82.50069000000002,0 -59.49456,82.01636000000002,0 -60.51955,81.93752000000001,0 -61.47697000000001,81.79107999999999,0 -61.49949,81.73477000000001,0 -61.02642,81.47570000000002,0 -61.31927,81.39686,0 -61.35306000000001,81.34054,0 -61.30801,81.16032,0 -61.55581000000002,81.11526000000001,0 -62.23162000000001,81.21664,0 -62.97503,81.25042999999999,0 -63.81981,81.14906000000001,0 -63.96624000000001,81.07021000000002,0 -64.79975,81.00261999999999,0 -64.91238,80.92377000000001,0 -66.44423999999999,80.6084,0 -66.78216000000001,80.72104,0 -66.92856999999999,80.65346,0 -66.92856999999999,80.47324,0 -67.49175,80.34933,0 -67.54808,80.29301,0 -67.52555,80.18038,0 -67.10879,80.04520000000001,0 -66.66951,80.05649,0 -66.0838,80.00015999999999,0 -65.64452,80.00015999999999,0 -65.29535,80.06775,0 -65.14892000000002,79.84247000000001,0 -64.97996999999999,79.47077,0 -65.98242999999999,79.14412,0 -67.31153999999999,79.16665000000002,0 -67.76724,79.10155,0 -72.55276000000001,78.52284,0 -72.5564,77.34211000000001,0 -68.07777,75.93836,0 -68.07777,75.31999999999999,0 -68.07777,70.31999999999999,0 -67.77307,70.28399,0 -67.50825,70.17017,0 -67.20399999999999,69.97538,0 -66.70717000000001,69.43039,0 -66.59773,69.21590000000001,0 -66.53207,68.44109,0 -66.06807000000001,68.37982,0 -64.37838000000001,68.03400000000001,0 -63.71739,67.86327,0 -61.94015000000002,67.30296000000001,0 -61.12597,66.90025,0 -60.93336000000002,66.62885,0 -61.43238,66.19110000000001,0 -61.97518,65.88468,0 -62.08899,65.51698,0 -62.6493,65.48196,0 -63.50727,64.82534,0 -63.97128,63.76601000000001,0 -63.98004,63.25823000000001,0 -64.29521,62.44402000000001,0 -64.6279,61.34092,0 -64.39993,60.38216,0 -64.48108000000001,60.36652000000001,0 -64.53325,60.3025,0 -64.56751,60.30471,0 -64.8586,60.25583000000001,0 -64.76723,60.175,0 -64.63721,60.17833,0 -64.59778,60.11749,0 -64.73416,60.10333,0 -64.7025,60.06499,0 -64.79695,60.03972,0 -64.90639,60.04805,0 -64.84778,59.96416,0 -64.6536,59.92999,0 -64.66191000000001,59.88361,0 -64.76778,59.87999,0 -64.74445,59.84499,0 -64.81416000000002,59.81889,0 -64.77306,59.69887,0 -64.83307000000001,59.53971,0 -64.70084,59.44583000000001,0 -64.43249,59.52944,0 -64.34334,59.50111,0 -64.50696000000001,59.42832000000001,0 -64.485,59.39638,0 -64.53806,59.37360000000001,0 -64.49916,59.33972000000001,0 -64.53834000000001,59.29055,0 -64.50751,59.25,0 -64.53471999999999,59.19749000000001,0 -64.49306,59.15888,0 -64.48917,59.09943,0 -64.34972000000001,59.06666000000001,0 -64.29138,59.00527,0 -64.46084000000001,58.98443,0 -64.72,59.07,0 -64.82946,59.03249,0 -64.86472000000001,58.99054,0 -64.83890000000001,58.9586,0 -64.88332,58.93194,0 -64.80943000000002,58.9111,0 -64.71888,58.94527000000001,0 -64.56807000000001,58.88721000000001,0 -64.30029,58.88249,0 -64.25861999999999,58.85000000000001,0 -64.25751,58.77944000000001,0 -64.15611,58.74528,0 -63.97472000000001,58.8261,0 -63.83333,58.8325,0 -63.77083,58.87554000000001,0 -63.58834,58.84638000000002,0 -63.4825,58.77055000000001,0 -63.50611,58.73194,0 -64.02916999999999,58.68694,0 -64.08611999999999,58.63777,0 -64.10056,58.57916,0 -64.04277,58.52388000000001,0 -63.89806,58.56499,0 -63.84584,58.50805,0 -63.81555,58.47805000000001,0 -63.85918,58.43776,0 -64.0025,58.42527,0 -64.03667,58.37499,0 -64.16306,58.34389,0 -64.21861,58.23082,0 -64.38721,58.19137000000001,0 -64.43195,58.08611,0 -64.20862,58.03334,0 -64.21445,57.97748,0 -64.05749,57.76943000000001,0 -64.02251,57.77138,0 -64.00666,57.81276,0 -63.92666,57.79722,0 -63.89194,57.73027,0 -63.82556000000002,57.69027,0 -63.76528,57.73277000000001,0 -63.70055,57.66277000000001,0 -63.65333,57.7311,0 -63.58944,57.72526,0 -63.60723,57.66361,0 -63.76501,57.57388,0 -63.75723000000001,57.43444000000001,0 -63.7075,57.3786,0 -63.83694000000001,57.32583000000002,0 -63.87583,57.23193000000001,0 -63.86584000000001,57.19583000000001,0 -63.83944,57.20054,0 -63.80500000000001,57.28027,0 -63.7411,57.23277,0 -63.79249999999999,57.16526000000001,0 -63.78751,57.11193999999999,0 -63.87361,57.06638000000002,0 -63.86333,56.99276,0 -63.91779,56.93027000000001,0 -63.87138,56.87805000000001,0 -64.00528,56.85054000000001,0 -63.99222000000002,56.78582,0 -64.08362,56.76554,0 -64.12888,56.69943,0 -63.945,56.54972,0 -63.94611,56.48388,0 -63.87138,56.43942,0 -63.97472000000001,56.41277,0 -64.16972,56.42778,0 -64.11417,56.39027000000001,0 -64.10584,56.33139000000001,0 -64.13667,56.3036,0 -64.08667,56.25916000000001,0 -63.97472000000001,56.25916000000001,0 -63.87694,56.21721,0 -64.01083,56.15999,0 -64.02028,56.07638000000001,0 -63.84778,56.12027,0 -63.88,56.07695,0 -63.81333,56.0425,0 -63.445,56.02276,0 -63.69416,55.94222,0 -63.71528,55.85917000000001,0 -63.48833000000001,55.69665000000001,0 -63.44806,55.59943,0 -63.29833000000001,55.52333,0 -63.14416,55.52638000000001,0 -63.17445,55.40971,0 -63.09333,55.34583000000001,0 -63.11423,55.31608,0 -63.51944,55.1836,0 -63.56611000000002,55.06027,0 -63.43528000000001,54.97360000000001,0 -63.54194,54.84055,0 -63.62361,54.66610000000001,0 -63.72084,54.59665,0 -63.97619000000001,54.62645000000001,0 -64.34723,54.75527,0 -64.55222000000001,54.72055,0 -64.81166,54.74917000000001,0 -65.09445,54.69555,0 -65.44387999999999,54.74583000000001,0 -65.68998000000001,54.71332,0 -65.83528,54.83138,0 -65.85834,54.90778,0 -65.95778,54.92944000000001,0 -66.035,54.90972,0 -66.23999000000001,54.99194000000001,0 -66.57640000000001,55.25055,0 -66.68195,55.25333,0 -66.68804,55.3011,0 -66.80029,55.33999000000001,0 -66.83389,55.31332,0 -66.6889,55.20416,0 -66.74083,55.17749,0 -66.76585,55.10556,0 -66.65944000000002,54.97942,0 -66.73166999999999,54.94332,0 -66.605,54.79084,0 -66.71222,54.78194,0 -66.71806000000001,54.73193,0 -66.94694,54.80165,0 -67.02806000000001,54.89778,0 -67.30943000000001,55.01554000000001,0 -67.27388999999999,55.06666,0 -67.42833,55.07111,0 -67.45305999999999,55.01888,0 -67.36221000000001,54.87582,0 -67.26334,54.82527,0 -67.30777000000001,54.78388,0 -67.185,54.71943000000001,0 -67.2139,54.66888000000001,0 -67.03639,54.62166,0 -67.21945,54.6075,0 -67.30556,54.50416,0 -67.49249,54.58194,0 -67.60139,54.56639000000001,0 -67.63306,54.47999000000001,0 -67.58611999999999,54.4175,0 -67.59583000000001,54.36527000000001,0 -67.49472,54.31444000000001,0 -67.53167000000001,54.24889,0 -67.485,54.23416,0 -67.69611,54.1386,0 -67.71556,54.12944000000001,0 -67.78195,54.06388,0 -67.76055,54.01583000000001,0 -67.60916,53.92804000000001,0 -67.58804000000001,53.85722,0 -67.43195,53.78305,0 -67.49194,53.60388,0 -67.14194999999999,53.54221,0 -67.12888,53.46416,0 -67.06862,53.4286,0 -67.06779,53.38417,0 -66.9875,53.40359,0 -66.9025,53.3261,0 -66.99027,53.20082000000001,0 -66.94861,53.10972000000002,0 -66.97945000000001,53.02777,0 -67.07805999999999,52.94804000000001,0 -67.05833,52.80499,0 -67.08945,52.7197,0 -66.89138,52.67333000000001,0 -66.87470999999999,52.74778,0 -66.80556,52.66554,0 -66.75501,52.71027000000001,0 -66.66806,52.72581,0 -66.64806,52.94583,0 -66.52528,52.94332000000001,0 -66.47694,53.03416,0 -66.35472,52.98166,0 -66.26973,52.87749,0 -66.37888,52.83611,0 -66.32834,52.73693,0 -66.43388,52.70638,0 -66.43222,52.61138,0 -66.37361,52.54249999999999,0 -66.44665999999999,52.53082,0 -66.35805000000002,52.40666,0 -66.45862,52.3661,0 -66.48556000000001,52.30721,0 -66.43889,52.20083,0 -66.33556,52.13639,0 -66.30388000000001,52.22276,0 -66.31973000000001,52.28916000000001,0 -66.26667000000001,52.31138,0 -66.17389000000001,52.22055,0 -66.06807000000001,52.21638000000001,0 -66.06751000000001,52.12276,0 -65.91695,52.05082,0 -65.80167,52.04278,0 -65.79944,52.09555,0 -65.75861,52.11139,0 -65.58056999999999,52.04278,0 -65.4614,52.20665000000001,0 -65.10861,52.17082,0 -64.85334,52.02193000000001,0 -64.84584,51.93083000000001,0 -64.58778,51.82888,0 -64.59389,51.79610000000001,0 -64.71805999999999,51.74778000000001,0 -64.70305999999999,51.69277000000002,0 -64.60417,51.64277,0 -64.58112,51.55778,0 -64.44249000000001,51.66776999999999,0 -64.26418,51.73972000000001,0 -64.35722,51.85055000000001,0 -64.31751,51.90359999999999,0 -64.33085,51.96527,0 -64.27444,52.00332,0 -64.29333,52.04639,0 -64.25779,52.12804,0 -64.11861,52.14472,0 -64.13137999999999,52.28139,0 -64.08308,52.37638,0 -64.20889000000001,52.54889000000001,0 -64.17529,52.60944000000001,0 -64.20223,52.67222000000001,0 -64.15666,52.73833,0 -64.20140000000001,52.79084,0 -64.1725,52.85083000000001,0 -64.08085,52.88138,0 -63.95417,52.87165,0 -63.98277,52.9336,0 -63.91945000000001,52.97693,0 -63.92805,53.07166,0 -63.86639000000001,53.10527,0 -63.655,53.105,0 -63.62611,53.04222000000002,0 -63.54805000000001,52.98499,0 -63.54084,52.91666,0 -63.59584,52.77077000000001,0 -63.42305000000001,52.70722,0 -63.37777,52.65083,0 -63.86305999999999,52.61277,0 -64.00194999999999,52.55471,0 -64.08085,52.47610000000001,0 -64.03749999999999,52.43444,0 -63.96222,52.45193,0 -63.91889000000001,52.38942999999999,0 -64.01306,52.38722,0 -63.9875,52.3625,0 -64.02528000000001,52.35444,0 -63.91805999999999,52.33611,0 -63.82917,52.25999,0 -63.84641000000001,52.00000000000001,0 -63.05001,52.00000000000001,0 -63.04419000000001,48.50467,0 -63.84024000000001,48.40712000000001,0 -64.52839,48.32669000000001,0 -64.76967999999999,48.17476000000001,0 -65.32375999999999,47.96921,0 -66.3727,48.08661000000001,0 -66.8437,47.99666,0 -66.9436,47.96305000000001,0 -66.94694,47.89916000000001,0 -67.04723,47.93083,0 -67.18859999999999,47.88388000000001,0 -67.32278000000001,47.89638,0 -67.35665,47.84166,0 -67.60417,47.9361,0 -67.61221000000001,47.99749000000001,0 -68.1161,48.00194000000001,0 -68.12027000000001,47.92665000000001,0 -68.37277,47.92471000000001,0 -68.38028,47.5586,0 -68.57611,47.42471,0 -69.05359,47.29379,0 -69.03612,47.25722,0 -68.88779,47.18804,0 -68.49805000000002,47.30555,0 -68.39751,47.29527,0 -68.37305000000001,47.34722000000001,0 -68.30665000000001,47.36444,0 -68.18582000000001,47.33277,0 -67.79333,47.07028,0 -67.77251,45.95750000000001,0 -67.74695,45.92917,0 -67.79028,45.88194000000001,0 -67.75723000000001,45.83333,0 -67.80638,45.78472,0 -67.79916,45.7011,0 -67.71751,45.69137,0 -67.65666,45.63055000000001,0 -67.41249999999999,45.58693,0 -67.41083,45.52999,0 -67.48528,45.49444,0 -67.4164,45.39888,0 -67.46278,45.2761,0 -67.34193999999999,45.14999,0 -67.27501,45.19887,0 -67.20654,45.18303,0 -67.15837999999999,45.17419,0 -67.09289,45.09019000000001,0 -66.97331,44.91223,0 -66.95337000000001,44.82681,0 -67.11709999999999,44.69726,0 -67.50364999999999,44.47953,0 -67.50364999999999,40.24134,0 -67.50364999999999,35.24134,0 -67.50364999999999,30.24134,0 -67.50364999999999,25.24134,0 -67.50364999999999,20.24133,0 -71.75587,20.2411,0 -71.75418000000001,19.70582,0 -71.69168000000001,19.48584,0 -71.69862000000001,19.40027,0 -71.76669,19.33195,0 -71.69611999999999,19.24167,0 -71.62918000000001,19.21972,0 -71.63502,19.15806,0 -71.75,19.01972,0 -71.85605,18.94783,0 -71.78889,18.96277,0 -71.71945,18.88389,0 -71.71584,18.74972,0 -71.83168000000001,18.6225,0 -72.00306999999999,18.60083,0 -71.88500999999999,18.47721,0 -71.9075,18.43777,0 -71.69473000000001,18.32222,0 -71.76918000000001,18.20222,0 -71.74473999999999,18.13389,0 -71.76786,18.0385,0 -71.76823,17.5584,0 -71.77196000000001,12.5584,0 -71.25400999999999,12.4433,0 -71.06217,12.23228,0 -71.08137000000001,12.00208,0 -71.32471,11.85305,0 -71.38473999999999,11.82889,0 -71.52943999999999,11.78005,0 -71.97723000000001,11.665,0 -72.26000999999999,11.15445,0 -72.34113000000001,11.165,0 -72.49306,11.12111,0 -72.55862000000001,10.97389,0 -72.66528,10.87277,0 -72.76028,10.65139,0 -72.90501999999999,10.4425,0 -72.98723,9.914165000000001,0 -72.96223000000001,9.836945999999999,0 -73.09279000000001,9.585557,0 -73.16833,9.536111999999999,0 -73.29834,9.284715,0 -73.38361999999999,9.189719,0 -73.37195,9.166949000000001,0 -73.21890000000001,9.171386999999999,0 -73.00639,9.304442,0 -72.94223,9.104165,0 -72.81696,9.145277,0 -72.76819,9.111428,0 -72.7903,9.083042000000001,0 -72.66446999999999,8.641107000000002,0 -72.38417,8.363051000000001,0 -72.38557,8.25389,0 -72.32529,8.095553000000001,0 -72.33362,8.049446,0 -72.40252,8.041949000000001,0 -72.42307,7.985835000000001,0 -72.48139999999999,7.947783,0 -72.44334000000001,7.828055000000001,0 -72.47168000000001,7.491941000000001,0 -72.39917,7.406108,0 -72.18333,7.382781000000001,0 -72.15085000000002,7.339715000000001,0 -72.14528,7.198614,0 -72.06611,7.062417000000001,0 -71.9268,7.009748000000001,0 -71.83278,6.987221,0 -71.76557,7.005555,0 -71.76418,7.032221,0 -71.60695,7.059716,0 -71.45778,7.015832,0 -71.29556,7.033338000000001,0 -71.26555999999999,6.98778,0 -71.18668,6.962769000000001,0 -71.12806999999999,6.998895,0 -71.02501,6.984449000000001,0 -70.89001,7.074998,0 -70.70251,7.108056,0 -70.61279,7.072496,0 -70.56362,7.089444000000001,0 -70.51279,7.015553000000001,0 -70.30083999999999,6.939161,0 -70.11917,6.975836,0 -69.42944,6.118605000000001,0 -69.32501000000002,6.153605,0 -69.24529,6.081389000000001,0 -69.0564,6.21611,0 -68.63721,6.133895,0 -68.4539,6.190550000000002,0 -68.31362,6.166944,0 -68.15224000000001,6.223338000000001,0 -67.99500999999999,6.207777,0 -67.82278,6.30945,0 -67.56834000000001,6.264719000000001,0 -67.45445000000001,6.193052,0 -67.49199,6.118659000000001,0 -67.41280999999999,5.992460000000001,0 -67.62223,5.787503,0 -67.65195,5.676390000000001,0 -67.61306,5.539166,0 -67.64944,5.478335,0 -67.80279,5.385563,0 -67.85062000000001,5.301639,0 -67.81168,5.217497,0 -67.82861,5.112216,0 -67.79056,5.054697,0 -67.87612,4.530833,0 -67.79194,4.427495000000001,0 -67.80556,4.227498,0 -67.70851,4.046957,0 -67.61333999999999,3.754719,0 -67.49195,3.726395000000001,0 -67.38779,3.493052,0 -67.30723999999999,3.455559,0 -67.29056,3.3975,0 -67.38417,3.259161000000001,0 -67.43556,3.253896,0 -67.84305999999999,2.868335000000001,0 -67.85506,2.789783,0 -67.75167999999999,2.840003,0 -67.60695,2.795552,0 -67.56778,2.683341,0 -67.50333999999999,2.67722,0 -67.32056,2.468339,0 -67.19251,2.392496,0 -67.17307,2.341665,0 -67.21084999999999,2.240558,0 -67.16446999999999,2.135556,0 -67.10945,2.094444,0 -67.13361999999999,1.987785,0 -66.99168,1.695833,0 -66.87045000000001,1.22094,0 -67.07668,1.173338,0 -67.07250999999999,1.625282,0 -67.33501,2.111111,0 -67.42417,2.143889,0 -67.64418000000001,1.999997,0 -67.80556,1.788335,0 -67.91474,1.745279,0 -68.00502,1.763054,0 -68.08945,1.933613,0 -68.17083,1.973889,0 -68.18668,2.020005,0 -68.27724000000001,1.837781,0 -68.22917,1.823336,0 -68.23278999999999,1.775555,0 -68.17583999999999,1.763054,0 -68.15306,1.724165,0 -69.37793000000001,1.726146,0 -69.55584000000002,1.784159,0 -69.63139,1.737782,0 -69.71693999999999,1.748051,0 -69.78695999999999,1.706111,0 -69.84610000000001,1.710459,0 -69.84222,1.062215,0 -69.76501,1.09584,0 -69.70473,1.059443,0 -69.60196999999999,1.080836,0 -69.4464,1.062215,0 -69.42084000000001,1.026107,0 -69.34361000000001,1.074716,0 -69.22417,0.9952825,0 -69.20278999999999,0.9066595,0 -69.14001,0.8669425,0 -69.18250999999999,0.7244455,0 -69.13863000000001,0.6866634,0 -69.13721,0.6299995000000001,0 -69.28695999999999,0.6208375,0 -69.29389999999999,0.6677815,0 -69.35001,0.6369475,0 -69.46417,0.7402855,0 -69.56723,0.7011085,0 -69.60779000000001,0.6463885,0 -69.67834000000001,0.6788875,0 -69.79779000000001,0.6002815000000001,0 -70.04416999999999,0.5908405,0 -70.05807000000002,-0.1575005,0 -69.92834000000002,-0.3094475,0 -69.85167,-0.3352775,0 -69.74612000000001,-0.4522145000000001,0 -69.60751000000001,-0.5175005,0 -69.57278,-0.6366605,0 -69.61472999999999,-0.7511135000000001,0 -69.5625,-0.8080565,0 -69.52916999999999,-0.9244446000000001,0 -69.43473,-0.9941676,0 -69.44198,-1.017811,0 -69.4389,-1.083889,0 -69.38084000000002,-1.174447,0 -69.37946,-1.35028,0 -69.46056,-1.496107,0 -69.95692,-4.236876,0 -69.96417,-4.290004,0 -70.01862,-4.339161000000001,0 -70.0741,-4.313079,0 -70.10695,-4.253058,0 -70.19410000000001,-4.333177,0 -70.30667,-4.244716,0 -70.32389000000001,-4.136662,0 -70.35973,-4.16584,0 -70.43333,-4.131667,0 -70.51195,-4.180285,0 -70.54528999999999,-4.138606,0 -70.58414999999999,-4.195558,0 -70.6289,-4.15666,0 -70.62000999999999,-4.114998,0 -70.68391,-4.173337,0 -70.76584,-4.146390000000001,0 -70.83474,-4.187781,0 -70.83056999999999,-4.234447000000001,0 -70.95029,-4.38139,0 -70.98862,-4.340557,0 -71.01140000000001,-4.382226,0 -71.08334000000001,-4.363605,0 -71.12918000000001,-4.398894,0 -71.16946,-4.357782,0 -71.20029000000001,-4.410559,0 -71.23296000000002,-4.374621000000001,0 -71.29056,-4.383055,0 -71.29528999999999,-4.433608,0 -71.3539,-4.457223,0 -71.38223000000001,-4.430836,0 -71.47083000000001,-4.438333,0 -71.51055,-4.481389,0 -71.60722,-4.498056,0 -71.62306,-4.475835,0 -71.64474,-4.509162,0 -71.69057000000001,-4.473892,0 -71.90249,-4.518189,0 -72.02806,-4.612501,0 -72.06657,-4.606092,0 -72.12917,-4.693609,0 -72.235,-4.753333,0 -72.37529000000001,-4.784446,0 -72.40611,-4.878891,0 -72.60916,-5.000833,0 -72.62529000000001,-5.054166,0 -72.74139,-5.050837,0 -72.89028999999999,-5.123610000000001,0 -72.91750999999999,-5.151105,0 -72.88417,-5.258052,0 -72.96278,-5.458051000000001,0 -72.94251,-5.543334,0 -72.96335000000001,-5.65416,0 -73.12612,-5.867496,0 -73.22974000000001,-6.093613,0 -73.16307000000001,-6.207229,0 -73.12390000000001,-6.447223,0 -73.19168000000001,-6.552783000000001,0 -73.35306,-6.576949,0 -73.67639,-6.804441000000002,0 -73.75446,-6.894163,0 -73.79513000000002,-7.122628,0 -72.63779,-7.603335,0 -70.35722,-8.160553,0 -68.65723,-9.066394000000001,0 -66.83056000000001,-9.838054,0 -66.64025,-9.91827,0 -66.88806,-10.08639,0 -67.08085,-10.27194,0 -67.17444999999999,-10.325,0 -67.32417,-10.32084,0 -67.33334000000001,-10.37,0 -67.41833,-10.38306,0 -67.46363,-10.45555,0 -67.61168000000001,-10.53222,0 -67.70334,-10.69573,0 -67.74557,-10.7125,0 -67.84557,-10.6575,0 -68.06111000000001,-10.67639,0 -68.28055999999999,-10.98,0 -68.3914,-11.00805,0 -68.41750999999999,-11.04444,0 -68.51694999999999,-11.05445,0 -68.58346,-11.10614,0 -68.77473000000001,-11.13639,0 -68.78084,-11.065,0 -68.74760000000001,-11.01038,0 -68.78583999999999,-10.99223,0 -68.90028,-11.01528,0 -69.39529,-10.92695,0 -69.56751,-10.95055,0 -68.925,-11.99667,0 -68.6739,-12.50115,0 -68.78084,-12.61778,0 -68.73139999999999,-12.66972,0 -68.75666,-12.71472,0 -68.84668000000002,-12.73278,0 -68.97362,-12.86334,0 -68.96335000000001,-13.02667,0 -68.96194,-13.51305,0 -69.01472,-13.63834,0 -69.08778,-13.66333,0 -69.00306000000001,-13.75445,0 -68.97751,-13.96166,0 -68.89558,-14.03389,0 -68.85306,-14.19917,0 -68.99918,-14.24334,0 -68.98139999999999,-14.37917,0 -69.15779000000001,-14.50528,0 -69.1575,-14.57555,0 -69.2289,-14.57639,0 -69.24195,-14.73028,0 -69.36639,-14.8025,0 -69.34945999999999,-14.895,0 -69.38139,-14.97,0 -69.13695,-15.24584,0 -69.26835,-15.32695,0 -69.27584,-15.40417,0 -69.32696,-15.43055,0 -69.42195,-15.61805,0 -69.21194,-16.16055,0 -69.13418,-16.22362,0 -68.96501000000001,-16.20944,0 -68.84084,-16.29555,0 -68.82252,-16.33973,0 -68.99084000000001,-16.41973,0 -69.04167000000001,-16.54112,0 -69.01112000000001,-16.65695,0 -69.17001000000001,-16.72389,0 -69.34334,-16.9825,0 -69.41112,-17.02056,0 -69.38834,-17.055,0 -69.61806,-17.18667,0 -69.6562,-17.28724,0 -69.59084,-17.29528,0 -69.50112,-17.37889,0 -69.49973,-17.50528,0 -69.68389000000001,-17.66361,0 -69.81473,-17.65223,0 -69.83223,-17.67694,0 -69.84972000000001,-17.75418,0 -69.77000000000001,-17.96889,0 -69.84141,-18.12861,0 -69.95113000000001,-18.24278,0 -70.14111,-18.32333,0 -70.35583,-18.31973,0 -70.40549,-18.34854,0 -70.31001000000001,-18.43445,0 -70.35778999999999,-18.78417,0 -70.27166,-19.14139,0 -70.28862,-19.29444,0 -70.19695,-19.50278,0 -70.19862000000001,-19.57694,0 -70.23002,-19.58667,0 -70.15167,-19.71445,0 -70.1664,-19.80695,0 -70.13612000000001,-19.86389,0 -70.12612,-20.07361,0 -70.16528,-20.20389,0 -70.13306,-20.27334000000001,0 -70.19056999999999,-20.36778,0 -70.16724000000001,-20.45166,0 -70.20473,-20.52916,0 -70.21223000000001,-20.79973,0 -70.13918,-20.87556,0 -70.17001000000001,-21.01083,0 -70.12306,-21.08139,0 -70.06473,-21.29639,0 -70.09529000000001,-21.33667,0 -70.05334000000002,-21.42565,0 -70.08446000000001,-21.48473,0 -70.06585,-21.52361,0 -70.15416999999999,-21.66694,0 -70.14805,-21.85556,0 -70.19334000000001,-21.88805,0 -70.16833,-21.94195,0 -70.30750999999999,-22.75806,0 -70.28917,-22.90139,0 -70.38862,-23.06083,0 -70.48112000000002,-23.0825,0 -70.50917,-23.01055,0 -70.57584,-23.07166,0 -70.5514,-23.16250000000001,0 -70.59361,-23.22222,0 -70.58474,-23.42389,0 -70.62306,-23.49973,0 -70.54667000000001,-23.52112,0 -70.48390000000001,-23.45028,0 -70.4164,-23.49305,0 -70.38943999999999,-23.59723,0 -70.51862,-23.86084,0 -70.50306999999999,-24.16556,0 -70.5825,-24.52667,0 -70.55695,-24.60889,0 -70.58064000000002,-24.70552,0 -72.11279999999999,-24.70552,0 -77.11279,-24.70552,0 -82.11279,-24.70552,0 -82.11279,-27.41935000000001,0 -82.11279,-32.41934,0 -82.11279,-37.41935,0 -78.60896,-37.41935,0 -73.60896,-37.41935,0 -73.60196999999999,-37.51333,0 -73.68722,-37.60111,0 -73.66945,-37.72611000000001,0 -73.53807000000001,-37.87333,0 -73.4539,-38.05556,0 -73.54224000000001,-38.41833,0 -73.44196,-38.76750000000001,0 -73.43307,-38.69168,0 -73.24779,-39.22223,0 -73.22501,-39.21945,0 -73.2353,-39.18584,0 -73.2075,-39.21556,0 -73.24597,-39.38584,0 -73.2225,-39.41473,0 -73.25751,-39.4539,0 -73.2439,-39.49139,0 -73.34557000000001,-39.66417,0 -73.40443999999999,-39.69167,0 -73.37973,-39.73639,0 -73.38251,-39.91445,0 -73.45168,-39.8325,0 -73.71445,-39.97862,0 -73.65807,-40.11028,0 -73.73112,-40.18,0 -73.71709,-40.20832,0 -73.75029000000001,-40.25723,0 -73.78445000000001,-40.42362,0 -73.74751000000001,-40.52472,0 -73.85778999999999,-40.6264,0 -73.84278999999999,-40.68696,0 -73.94778,-40.86389,0 -73.89806,-40.90639,0 -73.99500999999999,-40.97000000000001,0 -73.97806,-41.1189,0 -73.85890000000001,-41.33973,0 -73.87445000000001,-41.47333,0 -73.82390000000001,-41.51723,0 -73.82167,-41.56556,0 -73.59166999999999,-41.6025,0 -73.49195,-41.52084,0 -73.56417999999999,-41.61362,0 -73.68279,-41.62473,0 -73.75281000000001,-41.75128,0 -73.8556,-41.76842,0 -74.0545,-41.73290000000001,0 -74.18946,-42.17331,0 -74.43097,-43.22105,0 -74.87848,-43.52649,0 -75.18392,-44.80154,0 -75.32599,-46.32876,0 -75.71666999999999,-46.56318,0 -75.75219,-46.80824,0 -75.65273000000001,-46.92189000000001,0 -75.60303000000002,-48.05132,0 -75.68826,-48.46332,0 -75.73088,-49.03514,0 -75.36150000000001,-51.61010000000001,0 -74.76482000000001,-52.7786,0 -73.13816,-54.55088000000001,0 -71.60384000000001,-54.89185,0 -70.14055000000001,-55.36066000000002,0 -69.11057,-55.64479,0 -67.49276999999999,-55.95932,0 -67.49276999999999,-59.90001,0 -67.49276999999999,-64.90000000000001,0 -67.49276999999999,-69.90000000000001,0 -67.49276999999999,-74.90000000000001,0 -67.49276999999999,-79.90000000000001,0 -67.49276999999999,-84.89999,0 -67.49276999999999,-89.90000000000001,0 -68.43494,-89.90000000000001,0 -69.37713000000001,-89.90000000000001,0 -70.3193,-89.90000000000001,0 -71.26147,-89.90000000000001,0 -72.20367,-89.90000000000001,0 -73.14584000000001,-89.90000000000001,0 -74.08802,-89.90000000000001,0 -75.03020000000001,-89.90000000000001,0 -75.97238,-89.90000000000001,0 -76.91455000000001,-89.90000000000001,0 -77.85674,-89.90000000000001,0 -78.79893,-89.90000000000001,0 -79.74109,-89.90000000000001,0 -80.68326999999999,-89.90000000000001,0 -81.62546,-89.90000000000001,0 -82.56762999999999,-89.90000000000001,0 -82.56790000000001,-89.29246999999999,0 -82.57008,-84.29246999999999,0 -82.57227,-79.29246999999999,0 -82.57349000000001,-76.49247000000001,0 -82.57568000000001,-71.49247,0 -82.57787,-66.49247,0 -82.58005,-61.49247,0 -82.58223,-56.49247,0 -82.58441999999999,-51.49246999999999,0 -82.5866,-46.49247,0 -82.58879000000002,-41.49248,0 -82.58971,-39.39247,0 -82.59188,-34.39248,0 -82.59408000000001,-29.39247,0 -82.59626,-24.39248,0 -82.59696,-21.69599,0 -82.59827000000001,-16.69599,0 -82.59957,-11.69599,0 -82.60088,-6.695992,0 -82.60218,-1.695988,0 -82.60348999999999,3.304008,0 -82.60478999999999,8.304010999999999,0 -82.72168000000002,8.317214,0 -82.84778,8.270838,0 -82.8753,8.190837,0 -82.85028,8.060003,0 -82.86584000000001,8.020835999999999,0 -82.89883,8.025668,0 -82.88612000000001,8.103338000000003,0 -82.93085000000001,8.254719,0 -83.04834000000001,8.326105999999999,0 -82.82993,8.474651,0 -82.83196,8.626661,0 -82.91446999999999,8.762786999999999,0 -82.85778999999999,8.809163,0 -82.87779000000001,8.827496999999999,0 -82.71084999999999,8.931113,0 -82.88890000000001,9.074448,0 -82.93047,9.063126000000001,0 -82.93473,9.471663,0 -82.83338999999999,9.498041000000001,0 -82.87575,9.558963,0 -82.83307000000001,9.612215000000001,0 -82.74890000000001,9.584163,0 -82.66473000000001,9.495278000000001,0 -82.60478999999999,9.495170999999999,0 -82.60478999999999,13.18773,0 -82.60478999999999,18.18773,0 -86.05847,18.18773,0 -86.05847,19.16667,0 -86.05847,24.16667,0 -82.67905,24.16667,0 -82.65622999999999,27.34336,0 -82.86282,27.87009,0 -82.81197,28.15403,0 -82.66786999999999,28.52699,0 -82.65092,28.70922,0 -82.81621,29.14997,0 -82.97725000000001,29.1754,0 -83.04929,29.13302,0 -83.13406000000001,29.26864,0 -83.40105,29.5102,0 -83.42648,29.65429,0 -83.58752,29.756,0 -83.60023000000001,29.82804,0 -83.73586,29.94671,0 -84.00285,30.07809,0 -84.18716000000001,30.06915,0 -84.32649000000001,29.96329,0 -84.34405,29.89086,0 -84.67976,29.76196,0 -84.76974,29.69064,0 -84.98586,29.60068,0 -85.05280000000001,29.59025,0 -85.21616,29.69783,0 -85.11682,29.77658,0 -85.04214,29.7827,0 -85.02878,29.81974,0 -85.02682,29.97955,0 -85.11667,30.03346,0 -85.14525999999999,30.13059,0 -85.01819999999999,30.37397,0 -85.029,30.42799,0 -84.98756,30.44610000000001,0 -84.98378,30.54212,0 -84.86639000000001,30.71832,0 -84.91332,30.75332,0 -84.93167,30.88832,0 -85.00448,31.00173,0 -85.00557000000001,31.06222,0 -85.09972000000001,31.17888,0 -85.10889,31.27111,0 -85.03751,31.54083,0 -85.14111,31.82611,0 -85.06027,32.00388,0 -85.05083000000001,32.13832,0 -84.89417000000002,32.26944,0 -84.99695,32.33583,0 -84.96278,32.42333,0 -84.99306,32.51193,0 -85.10445,32.64415,0 -85.13276999999999,32.7786,0 -85.17416,32.82417000000001,0 -85.3925,33.99749,0 -85.62070000000001,34.9901,0 -85.46741,34.99005,0 -85.36797,35.06706,0 -85.38441,35.15899,0 -85.17104000000001,35.46849,0 -85.14761,35.45309,0 -85.11647000000001,35.48328,0 -85.13974,35.50185,0 -85.10691000000001,35.58106,0 -84.97051999999999,35.6754,0 -84.89986,35.77536,0 -84.76385999999999,35.82634,0 -84.67876,35.91422,0 -84.79865,36.09025,0 -84.9053,36.15482,0 -84.866,36.28408,0 -84.78586,36.29548,0 -84.77486,36.3341,0 -84.65366,36.39601,0 -84.79111,36.60536,0 -84.67641,36.7645,0 -84.59557000000001,36.80482,0 -84.58721,36.87076,0 -84.68555000000001,36.98052,0 -84.77699,36.95735,0 -84.84885000000001,36.99782,0 -84.92086000000001,37.05594,0 -84.91865,37.12032000000001,0 -84.97011999999999,37.11,0 -85.0663,37.20251,0 -85.07001,37.25666,0 -85.17966,37.31235,0 -85.20011,37.26906,0 -85.32208,37.24111,0 -85.36129,37.19164,0 -85.41483,37.21706,0 -85.39812000000002,37.2369,0 -85.47422,37.34881,0 -85.58540000000001,37.42731,0 -85.59048,37.46286,0 -85.64707,37.4683,0 -85.66943000000001,37.41729,0 -86.05628,37.44679,0 -86.12286,37.5709,0 -86.28140999999999,37.59924,0 -86.16003000000001,37.80325,0 -86.50314,38.05159,0 -86.52275,37.92781000000001,0 -86.59833,37.92101,0 -86.64558,37.84594,0 -86.66867000000001,37.91314000000001,0 -86.75384,37.8983,0 -86.82632,37.99151,0 -86.77476,38.01123,0 -86.78015000000001,38.10248,0 -86.81465,38.13544,0 -86.79993,38.20176,0 -87.30332,38.23492000000001,0 -87.319,38.37801,0 -87.4182,38.37928,0 -87.41956,38.43461,0 -87.47684,38.46685,0 -87.47975,38.53218,0 -87.50431,38.49449,0 -87.54741,38.51014,0 -87.61599,38.45092000000001,0 -87.75163000000001,38.41816,0 -87.75584000000001,38.45804,0 -87.64584000000001,38.49499,0 -87.66583,38.55999,0 -87.51195,38.74527,0 -87.55777000000001,38.86805,0 -87.53416,38.95333,0 -87.58611999999999,38.99554,0 -87.59389,39.0561,0 -87.66861,39.10999,0 -87.65916,39.15582,0 -87.58945,39.20638,0 -87.62639,39.30471,0 -87.53278,39.35695000000001,0 -87.52641,40.74535,0 -87.10191,40.74436,0 -87.10338,40.84467,0 -86.98604,40.84695,0 -86.98653,40.9182,0 -86.93117,40.91845,0 -86.93285,41.17447,0 -86.88367,41.26608,0 -86.76918000000001,41.30227,0 -86.64751,41.43719,0 -86.52912000000001,41.43995,0 -86.5304,41.52581,0 -86.48571,41.58063,0 -86.48599,41.65967,0 -86.52528000000001,41.66103,0 -86.52540999999999,41.75969,0 -87.21111000000002,41.76225,0 -87.02119000000002,42.48526,0 -87.15730000000001,43.41102,0 -87.06783,43.96139,0 -86.83409,44.59161,0 -86.71111000000001,44.83602,0 -86.57338000000001,44.99793,0 -86.24245000000001,45.23384000000001,0 -86.7586,45.44141000000001,0 -87.08848999999999,45.44498,0 -87.27666000000001,45.25579,0 -87.40428,45.19296000000001,0 -87.43716000000001,45.07106,0 -87.64861999999999,45.11694,0 -87.735,45.18721000000001,0 -87.71666999999999,45.26721,0 -87.65055,45.35194,0 -87.67610000000002,45.38666000000001,0 -87.88084000000001,45.36639,0 -87.87027000000002,45.44221000000001,0 -87.8036,45.50139,0 -87.83,45.57166000000001,0 -87.78751,45.59664999999999,0 -87.82556,45.65526000000001,0 -87.80029,45.68415,0 -87.90083,45.75944,0 -88.11834,45.80527000000001,0 -88.08139,45.87777,0 -88.11583000000002,45.93221,0 -88.52029000000002,46.02499,0 -88.64194999999999,46.00111,0 -88.83806,46.035,0 -89.11749,46.14805,0 -90.12388,46.33972,0 -90.22278,46.50722,0 -90.33277,46.55915,0 -90.39612,46.54695,0 -90.41302,46.5882,0 -89.49317000000001,48.00332000000001,0 -89.59805,48.00918,0 -89.60860000000001,51.43138,0 -89.62405000000001,56.43136,0 -89.30607999999999,56.62564,0 -89.13284,56.86485,0 -89.03778000000001,56.83611,0 -88.87944,56.85804000000001,0 -88.65472000000001,56.69638,0 -88.48999000000001,56.64222000000001,0 -88.3536,56.55332000000001,0 -87.98277000000002,56.44165000000002,0 -87.94305,56.37749000000001,0 -87.72389,56.20388,0 -87.70805,56.1561,0 -87.58362,56.0761,0 -87.61583,56.00277000000001,0 -87.54861,56.04999,0 -87.35195,55.99276,0 -87.3625,55.94666,0 -86.97945,55.93166,0 -86.95889,55.90582,0 -86.47778,55.80888,0 -86.27722000000001,55.72887,0 -85.94445,55.69778,0 -85.56947,55.5586,0 -85.49944000000002,55.47222000000001,0 -85.39335,55.40889,0 -85.00144,55.29702000000001,0 -85.00126,56.95695000000001,0 -85.00069000000001,61.95694000000001,0 -86.66628,62.44327,0 -87.52079000000001,63.03194,0 -87.6917,63.6016,0 -87.25494000000001,64.20925,0 -86.74223000000002,64.72197,0 -86.11559,65.84233,0 -85.64087000000001,66.05121,0 -84.9991,66.25666,0 -84.9991,67.98071,0 -84.99907,72.98072000000001,0 -84.99903999999999,77.98072999999999,0 -84.99902,82.98072000000001,0 -82.50320000000001,82.97593999999999,0 -82.5051,84.90001,0 -82.51007,89.90000000000001,0 -81.57213,89.90000000000001,0 -80.63419,89.90000000000001,0 -79.69624,89.90000000000001,0 -78.75831000000001,89.90000000000001,0 -77.82037,89.90000000000001,0 -76.88243,89.90000000000001,0 -75.94450000000001,89.90000000000001,0 -75.00655,89.90000000000001,0 -74.06861000000001,89.90000000000001,0 -73.13066000000001,89.90000000000001,0 -72.19273,89.90000000000001,0 -71.25478,89.90000000000001,0 -70.31685,89.90000000000001,0 -69.37891000000001,89.90000000000001,0 -68.44096999999999,89.90000000000001,0 -67.50302000000001,89.90000000000001,0 + + + 1 + + + + GMT -04:00 + + +]]> + #khStylem0400 + + + + + +-52.50595000000001,64.94479,0 -52.50631,59.94478000000001,0 -52.50666,54.94477,0 -52.50703,49.94478,0 -52.50738,44.94477,0 -52.50773000000001,39.94478,0 -52.50809000000001,34.94477,0 -52.50845000000001,29.94478,0 -52.50846,29.83971,0 -52.50841,24.83971,0 -52.50838,19.83971,0 -52.50835,15.23971,0 -52.5083,10.2397,0 -52.50826000000001,5.239709,0 -52.50826000000001,5.098526,0 -52.91902,5.485283,0 -54.47205,5.976981000000002,0 -55.15563000000001,6.048935,0 -56.97724,6.000021,0 -57.06833000000001,5.942223,0 -57.13139,5.773337,0 -57.16833,5.537222,0 -57.24850000000001,5.486112,0 -57.27223000000001,5.38028,0 -57.33555,5.313338,0 -57.28723000000002,5.310557,0 -57.27916,5.223339,0 -57.25639000000001,5.22278,0 -57.26307,5.26778,0 -57.23521000000001,5.259942,0 -57.18862,5.16861,0 -57.22889,5.140835,0 -57.25471,5.175279,0 -57.29695,5.160285000000001,0 -57.32305,5.069717,0 -57.28889,5.016663,0 -57.42028,4.989168,0 -57.68806000000001,5.010282,0 -57.77140000000001,4.922774,0 -57.84112,4.927778,0 -57.92333000000001,4.821948,0 -57.83862,4.654718,0 -57.95889,4.403339,0 -57.9539,4.28777,0 -58.0714,4.159161,0 -58.04723,4.008338,0 -57.87668,3.80916,0 -57.83583,3.664998000000001,0 -57.73473,3.610277,0 -57.65445,3.518612,0 -57.63721,3.455,0 -57.66693999999999,3.395555,0 -57.64223000000001,3.356387,0 -57.50334,3.351393,0 -57.48083000000001,3.323888999999999,0 -57.41057000000001,3.382496,0 -57.35028,3.355001,0 -57.30139,3.377501000000001,0 -57.28528,3.143888000000001,0 -57.24111000000001,3.138057,0 -57.21111,2.928051,0 -57.17917,2.914443,0 -57.21333,2.878892000000001,0 -57.20139000000001,2.821391000000001,0 -57.09806,2.749166,0 -56.91778,2.428056,0 -56.92806,2.391948,0 -56.87112,2.348891,0 -56.87833000000001,2.297781,0 -56.8064,2.250836,0 -56.81057,2.193336,0 -56.69187,2.028734,0 -56.56279,2.023892,0 -56.47063,1.944503,0 -56.03723,1.836944,0 -55.94667,1.853333,0 -55.90417,1.89305,0 -55.90139000000001,2.045285,0 -56.03639,2.177505,0 -56.0425,2.232782,0 -56.13807,2.266947,0 -56.08917,2.355281,0 -56.04528000000001,2.344445,0 -55.99195000000001,2.4075,0 -55.96584,2.53277,0 -55.71028,2.399165,0 -55.58473,2.438334,0 -55.38,2.428056,0 -55.32249,2.516948,0 -55.24139000000001,2.499164,0 -55.13807000000001,2.573891000000001,0 -55.11195,2.527217,0 -54.94834000000001,2.617496,0 -54.97223,2.554721,0 -54.86750000000001,2.440278,0 -54.77539,2.456846,0 -54.73722000000001,2.425833,0 -54.71111,2.274723,0 -54.78945,2.163609,0 -54.75029,2.076659,0 -54.80084,2.017781,0 -54.76307,1.986947,0 -54.735,1.768607,0 -54.36111,1.763054,0 -54.10139,1.613051,0 -54.08278000000001,1.505556,0 -53.98807000000001,1.520558,0 -53.85778,1.383605,0 -53.82723,1.384163,0 -53.82167,1.419722,0 -53.75307000000002,1.392497,0 -53.73695,1.437786,0 -53.69694000000001,1.410281,0 -53.66417,1.429442,0 -53.65639000000001,1.363058,0 -53.55306,1.367783,0 -53.54889,1.243889,0 -53.4325,1.25666,0 -53.40584000000001,1.187504,0 -53.46723,1.142496,0 -53.41861999999999,0.9422185000000001,0 -53.28250000000001,0.7902805000000003,0 -53.11723000000001,0.7422205,0 -53.12889,0.3866664,0 -53.04139000000001,0.2474995,0 -53.0061,0.1311115,0 -53.01583,0.03500046,0 -52.97112,-0.01638954,0 -52.92334,-0.1863905,0 -52.87194,-0.2033375,0 -52.81223000000001,-0.1780565,0 -52.63278,-0.3822215000000001,0 -52.62723,-0.5727785,0 -52.60056,-0.6144485,0 -52.53807,-0.6247175,0 -52.5066,-0.7438775,0 -52.50666,-0.7508345000000001,0 -52.51918000000001,-0.8797145,0 -52.38528000000002,-0.8791655,0 -52.37028000000001,-1.061388,0 -52.27112000000001,-1.133893,0 -52.11389000000001,-1.155286,0 -52.06945,-1.220284,0 -52.0475,-1.170838,0 -51.9775,-1.135279,0 -51.90139,-1.150552,0 -51.93501,-1.192501,0 -51.92334,-1.328608,0 -52.00557,-1.404163,0 -52.10778,-1.415835,0 -52.22139,-1.342504,0 -52.43805,-1.441108,0 -52.47639,-1.490553,0 -52.70722,-1.561105,0 -52.71278,-1.603333,0 -52.54084,-1.571949,0 -52.44971,-1.586944,0 -52.28528,-1.53361,0 -52.2275,-1.616392,0 -52.26806,-1.682218,0 -52.31139000000001,-1.627498,0 -52.34612,-1.674721,0 -52.26917,-1.813051,0 -52.31806000000001,-1.935559,0 -52.27139,-2.01916,0 -52.36806000000001,-2.098612,0 -52.26723,-2.061666,0 -52.25917,-2.161108,0 -52.15028,-2.358055,0 -52.20028,-2.407501,0 -52.12361000000001,-2.389717000000001,0 -52.03139,-2.59722,0 -52.06667000000001,-2.714715,0 -52.04999999999999,-2.809999,0 -51.94334000000001,-2.898334000000001,0 -51.82334,-3.100285,0 -51.61153,-3.147264,0 -51.63556000000001,-3.291661,0 -51.74472000000001,-3.35611,0 -51.66917,-3.471661,0 -51.74917,-3.562498000000001,0 -51.83223000000001,-3.609163,0 -51.92667,-3.553605999999999,0 -51.94445,-3.409444,0 -52.04611000000001,-3.294441,0 -52.15028,-3.235554,0 -52.15778,-3.34305,0 -52.23778,-3.510559,0 -52.35639000000001,-3.665836,0 -52.60722000000001,-3.860839,0 -52.63945,-4.193614000000001,0 -52.73806,-4.331107,0 -52.73,-4.376107,0 -52.66278000000001,-4.433338,0 -52.66223,-4.493052,0 -52.83056,-4.882780000000001,0 -52.92639,-5.008608,0 -52.86972,-5.210001,0 -52.86778000000001,-5.365558,0 -52.84084,-5.406949,0 -52.70612,-5.469165,0 -52.645,-5.688891,0 -52.53889,-5.840838000000001,0 -52.53807,-6.036390000000001,0 -52.43056000000001,-6.210279,0 -52.43055,-6.338053000000001,0 -52.36139000000001,-6.381109,0 -52.22473,-6.573888,0 -52.08528,-6.548607000000001,0 -52.01314,-6.657526,0 -51.9575,-6.613336,0 -51.78751,-6.690835,0 -51.71278000000002,-6.860278,0 -51.72723,-6.893613,0 -51.69805,-6.901659,0 -51.74084,-6.956110000000001,0 -51.65556000000002,-7.06222,0 -51.64500000000001,-7.158888000000001,0 -51.48695,-7.19416,0 -51.38807,-7.269723000000002,0 -51.27251,-7.274448000000001,0 -51.20167000000001,-7.342497,0 -51.21639,-7.419159,0 -51.18334,-7.543612,0 -51.23056,-7.623612,0 -51.10196000000001,-7.803054,0 -51.16889,-7.914447,0 -51.26918,-7.983613,0 -51.41695,-8.028333999999999,0 -51.43333000000001,-8.088058,0 -51.40862000000001,-8.134731,0 -51.44501,-8.193051000000001,0 -51.42722,-8.269164,0 -51.51973,-8.418888000000001,0 -51.52667000000001,-8.544447999999999,0 -51.44778000000001,-8.691948999999999,0 -51.33805,-8.772786,0 -51.1725,-8.998056,0 -51.12167,-9.258607,0 -51.07751,-9.31194,0 -51.1372,-9.797392,0 -50.23251000000001,-9.844165,0 -50.30944,-10.02889,0 -50.38167,-10.11029,0 -50.40862,-10.3075,0 -50.48278,-10.39361,0 -50.52278,-10.56334,0 -50.60667000000001,-10.65584,0 -50.5825,-10.73945,0 -50.62944,-10.82611,0 -50.61167,-10.88139,0 -50.63778,-10.9325,0 -50.60946,-11.06528,0 -50.66473000000001,-11.1425,0 -50.65917000000001,-11.24305,0 -50.74139,-11.46444,0 -50.73667,-11.52445,0 -50.64834,-11.60334,0 -50.71448,-11.74943,0 -50.67973000000001,-11.87,0 -50.64251,-11.88555,0 -50.68389,-12.04861,0 -50.67334000000001,-12.20223,0 -50.61972,-12.28444,0 -50.61361,-12.38416,0 -50.67362000000001,-12.62805,0 -50.62555,-12.65639,0 -50.59806,-12.81056,0 -50.4841,-12.84488,0 -50.48167000000001,-12.8475,0 -50.49806,-12.96056,0 -50.59028000000001,-13.07723,0 -50.56834,-13.22861,0 -50.59166,-13.29694,0 -50.75834,-13.53778,0 -50.78973000000001,-13.66806,0 -50.87056,-13.71861,0 -50.84555,-14.08639,0 -50.92694,-14.11972,0 -50.99918000000001,-14.40555,0 -50.96778000000001,-14.53083,0 -51.03833,-14.65973,0 -51.0975,-14.89111,0 -51.16028,-14.975,0 -51.25723,-15.02139,0 -51.29611,-15.01473,0 -51.31833000000001,-14.9625,0 -51.41251000000001,-14.99723,0 -51.63667000000001,-15.17556,0 -51.70361,-15.48194,0 -51.74973,-15.54084,0 -51.78861,-15.53417,0 -51.77973000000001,-15.63084,0 -51.87695,-15.80055,0 -51.90389,-15.8225,0 -51.96584,-15.80111,0 -52.03751,-15.87555,0 -52.24306000000001,-15.88028,0 -52.33055,-16.0425,0 -52.44056000000001,-16.09694,0 -52.43473,-16.27139,0 -52.57751,-16.34166,0 -52.63779000000001,-16.53889,0 -52.69139,-16.57639,0 -52.72084,-16.66471,0 -52.83222,-16.76417,0 -52.97334,-16.82111,0 -53.0275,-16.93778,0 -53.03973,-17.0525,0 -53.20166,-17.28473,0 -53.19084,-17.36723,0 -53.22778000000001,-17.49805,0 -53.12612000000001,-17.67167,0 -53.1139,-17.8889,0 -53.05389000000001,-18.01667,0 -53.05806,-18.28305,0 -53.02973,-18.37194,0 -52.98834000000001,-18.38889,0 -52.895,-18.34694,0 -52.75805,-18.4125,0 -52.8675,-18.57695,0 -52.89001,-18.67805,0 -52.63667,-18.72305,0 -52.47278,-18.70834,0 -52.34917,-18.81667,0 -52.18861,-18.83695,0 -52.06557,-18.94416,0 -51.89694,-18.995,0 -51.84166,-19.05361,0 -51.63223,-19.13334,0 -51.42306,-19.15806,0 -51.3064,-19.25889,0 -51.11418000000001,-19.29083,0 -50.92340000000001,-19.45669,0 -50.96278000000001,-19.475,0 -50.9325,-19.55667,0 -50.98112,-19.57166,0 -51.02361000000001,-19.7225,0 -50.98584000000001,-19.9075,0 -51.00643,-20.07929,0 -51.04611,-20.25028,0 -51.26055000000001,-20.31528,0 -51.46612,-20.53917,0 -51.58084000000001,-20.60028,0 -51.63001,-20.88028,0 -51.79223,-21.09139,0 -51.87111000000001,-21.14917,0 -51.84973,-21.26973,0 -51.87056000000001,-21.35029,0 -51.9625,-21.49778,0 -52.04973,-21.50278000000001,0 -52.09195,-21.55584,0 -52.03723,-21.64639,0 -52.05334,-21.71889,0 -52.15028,-21.78334,0 -52.17445,-21.85778,0 -52.29028,-21.96084,0 -52.36556,-22.10028000000001,0 -52.49723,-22.21611,0 -52.97528000000001,-22.48223,0 -53.15685,-22.70582,0 -53.57218000000002,-22.88526,0 -53.72139000000001,-23.30028,0 -53.96889000000001,-23.44695000000002,0 -54.08028000000001,-23.94806,0 -54.2439,-24.05361,0 -54.33778000000001,-24.14389,0 -54.24889,-24.35362,0 -54.33139000000001,-24.49278,0 -54.33055,-24.67945,0 -54.45250999999999,-25.01111,0 -54.45639,-25.08723,0 -54.42305,-25.14306,0 -54.61696,-25.43806,0 -54.59892,-25.57323,0 -54.58501,-25.64139000000001,0 -54.64556000000001,-25.66250000000001,0 -54.58584000000001,-25.81944,0 -54.61723,-25.89556,0 -54.60139,-25.95278,0 -54.665,-25.9825,0 -54.64083,-26.07139,0 -54.66166000000001,-26.15834,0 -54.63333999999999,-26.20028,0 -54.6675,-26.23888,0 -54.69278000000001,-26.42834,0 -54.79362,-26.52305,0 -54.77862,-26.61083,0 -54.80612,-26.66418,0 -54.92389,-26.68056,0 -54.95722,-26.77834,0 -55.05112,-26.80028,0 -55.12889,-26.86805,0 -55.12889,-26.94917,0 -55.27111,-26.9375,0 -55.41389,-26.98278000000001,0 -55.455,-27.09528,0 -55.53973,-27.105,0 -55.55667,-27.16166,0 -55.60196,-27.16834,0 -55.56751000000001,-27.24944,0 -55.59639000000001,-27.33806,0 -55.67557,-27.36862,0 -55.73612000000001,-27.43944,0 -55.84251,-27.40778,0 -55.89833000000001,-27.32918,0 -56.13778,-27.30889,0 -56.26805000000001,-27.3875,0 -56.27084,-27.46140000000001,0 -56.37806,-27.58834,0 -56.55,-27.4525,0 -56.67305,-27.46140000000001,0 -56.73695,-27.50694,0 -56.90862000000001,-27.41778,0 -57.07167000000001,-27.49195,0 -57.12944000000001,-27.48973000000001,0 -57.6264,-27.36916,0 -57.79139,-27.29223,0 -58.22,-27.26555,0 -58.60461000000001,-27.31692,0 -58.59888999999999,-27.245,0 -58.65573,-27.19161,0 -58.65278,-27.15834,0 -58.56417,-27.1175,0 -58.54639000000001,-27.04611,0 -58.51028,-27.05861,0 -58.47834,-26.93916000000001,0 -58.32167,-26.88223,0 -58.34584,-26.81722,0 -58.28389,-26.81139,0 -58.28584,-26.77195,0 -58.24639,-26.765,0 -58.23973,-26.64973,0 -58.18167,-26.65611,0 -58.16889000000001,-26.60279,0 -58.21917,-26.535,0 -58.18306000000001,-26.4614,0 -58.21139,-26.42640000000001,0 -58.16251,-26.31973,0 -58.17250000000001,-26.27305,0 -58.10389000000001,-26.23555,0 -58.1525,-26.18861,0 -58.11000000000001,-26.19806000000001,0 -58.07805,-26.12472,0 -57.85583000000001,-26.00195,0 -57.90361,-25.95833,0 -57.84973,-25.91833,0 -57.87445,-25.87861,0 -57.80361000000001,-25.83473,0 -57.81098,-25.77314,0 -57.74196,-25.72806,0 -57.77167,-25.7075,0 -57.75167,-25.67056,0 -57.57750999999999,-25.57889000000001,0 -57.55333000000001,-25.44834,0 -57.64029000000001,-25.37917,0 -57.7561,-25.17694,0 -57.87112000000001,-25.08778,0 -57.98083000000001,-25.07805000000001,0 -58.22139,-24.93916,0 -58.33833000000001,-24.99778,0 -58.45056,-24.85695000000001,0 -58.80334000000001,-24.78417,0 -59.06778,-24.60695000000001,0 -59.33889000000001,-24.48889,0 -59.47278000000001,-24.35306,0 -60.03806,-24.00972000000001,0 -60.28639,-24.0375,0 -60.57334000000001,-23.95111,0 -60.61389000000001,-23.89444,0 -60.85499999999999,-23.8725,0 -61.02473,-23.78612,0 -61.11639000000001,-23.66666,0 -61.11556000000001,-23.60362,0 -61.29472,-23.48917,0 -61.49694,-23.41361,0 -61.51722,-23.345,0 -61.73973000000001,-23.24362,0 -61.78167000000001,-23.1475,0 -61.98639,-23.01028000000001,0 -62.02944999999999,-22.89194,0 -62.18861,-22.71029,0 -62.19,-22.63,0 -62.25917000000001,-22.60445,0 -62.24694,-22.52889,0 -62.29056,-22.48055,0 -62.39918,-22.45278,0 -62.46028,-22.37971,0 -62.62417,-22.30694,0 -62.64377,-22.2389,0 -62.78946000000001,-22.12278,0 -62.81195,-21.99695,0 -63.68584000000001,-22.00306,0 -63.70057000000001,-22.03861,0 -63.73306,-22.00278,0 -63.94111,-22.00083,0 -64.12667,-22.41028,0 -64.25333999999999,-22.56778,0 -64.32472,-22.87361,0 -64.36,-22.74084,0 -64.45252000000001,-22.64834,0 -64.4314,-22.54778,0 -64.56612,-22.36139,0 -64.53889,-22.27639,0 -64.59473000000001,-22.21167,0 -64.98833999999999,-22.09083,0 -65.57861,-22.08472,0 -65.74806,-22.11166,0 -65.92612,-21.93333,0 -66.0414,-21.91667,0 -66.07751,-21.83195,0 -66.22301,-21.78051,0 -66.29333,-22.0825,0 -66.62806999999999,-22.21305,0 -66.6889,-22.19611,0 -66.73669,-22.2275,0 -66.77473000000001,-22.42695000000001,0 -66.92639,-22.47805,0 -66.96335000000001,-22.5225,0 -67.02251,-22.5239,0 -67.01221,-22.64279,0 -67.12306,-22.71805000000001,0 -67.18362000000001,-22.82166,0 -67.00084,-23.00278,0 -67.15085000000001,-23.39194000000001,0 -67.33584999999999,-24.02167,0 -68.25223,-24.39639,0 -68.30779,-24.4925,0 -68.38918,-24.50166,0 -68.44363,-24.62639,0 -68.48779,-24.6025,0 -68.56916,-24.78612,0 -68.54528999999999,-24.87361,0 -68.455,-24.90500000000001,0 -68.42419,-25.03361,0 -68.35197000000001,-25.11723,0 -68.42028999999999,-25.15279,0 -68.46502000000001,-25.14056,0 -68.50223,-25.17723,0 -68.5975,-25.44333,0 -68.39776999999999,-26.15611000000001,0 -68.56362,-26.30056,0 -68.58362,-26.50528,0 -68.29584,-26.89168,0 -68.31556999999999,-27.04194,0 -68.50306999999999,-27.07472,0 -68.58195000000002,-27.16973,0 -68.69667,-27.10750000000001,0 -68.81084000000001,-27.12056,0 -68.87723,-27.23083,0 -68.86585,-27.28806,0 -68.90472,-27.36667,0 -69.00696000000001,-27.45889,0 -69.01251000000001,-27.53168000000001,0 -69.08416000000001,-27.64583,0 -69.06556999999999,-27.69889,0 -69.10806,-27.72194,0 -69.18584,-27.96584,0 -69.30029999999999,-27.99944,0 -69.40640999999999,-28.20889,0 -69.47612,-28.19139,0 -69.53001999999999,-28.31223,0 -69.65537999999999,-28.40094,0 -69.6664,-28.57279,0 -69.74500999999999,-28.66055,0 -69.72307000000001,-28.80334,0 -69.79528999999999,-28.95112,0 -69.79389999999999,-29.09862,0 -69.90807,-29.14139,0 -70.03140000000001,-29.30639,0 -69.96056,-29.55029,0 -69.96834,-29.66112,0 -69.91501,-29.71778,0 -69.90555999999999,-29.79112,0 -69.91880000000001,-29.97406,0 -69.97083000000002,-30.08444,0 -69.85861,-30.10695000000001,0 -69.83168000000001,-30.19055,0 -69.87000000000001,-30.21084,0 -69.89751,-30.3225,0 -69.94416,-30.37639,0 -70.02972,-30.39778,0 -70.16334999999999,-30.36472,0 -70.1339,-30.43973,0 -70.20695000000001,-30.505,0 -70.32668,-30.88805,0 -70.32778999999999,-30.95834,0 -70.25502000000002,-31.03416,0 -70.32778999999999,-31.03972,0 -70.41335000000001,-31.15389,0 -70.44556,-31.09306,0 -70.47139,-31.09805,0 -70.52943999999999,-31.17444,0 -70.5611,-31.31416,0 -70.54224000000001,-31.37333,0 -70.58805,-31.56167,0 -70.47667,-31.72639,0 -70.45889,-31.8325,0 -70.41,-31.88084,0 -70.29056,-31.88668,0 -70.23445,-31.9425,0 -70.26251000000001,-32.04362,0 -70.36389,-32.02916,0 -70.38001,-32.05167,0 -70.32529,-32.13751,0 -70.31668999999999,-32.28333,0 -70.24432000000002,-32.30984,0 -70.23889,-32.4175,0 -70.16251,-32.46305,0 -70.12946,-32.56528,0 -70.17111,-32.60778,0 -70.14862000000001,-32.75249,0 -69.9875,-32.87889,0 -70.03528,-32.99834,0 -70.10139,-33.03001,0 -70.09889,-33.1725,0 -69.99583,-33.30194,0 -69.91916999999999,-33.23806,0 -69.80779,-33.27389,0 -69.77444,-33.38111,0 -69.82919,-33.53167,0 -69.8689,-33.55194,0 -69.88528,-33.66278,0 -69.84668000000001,-33.71751,0 -69.90611,-33.78778000000001,0 -69.88306,-33.87972,0 -69.90443999999999,-33.95166,0 -69.84889,-33.97195,0 -69.8689,-34.13361,0 -69.81249,-34.23555,0 -69.88918,-34.25945,0 -69.89335,-34.28612,0 -70.04944999999999,-34.28751,0 -70.0475,-34.40917,0 -70.22139,-34.59,0 -70.25306999999999,-34.71806000000001,0 -70.31362,-34.74889,0 -70.26363000000002,-34.79778,0 -70.36194999999999,-35.00445,0 -70.36806,-35.15889,0 -70.53639,-35.20639,0 -70.56751,-35.24778,0 -70.55029000000002,-35.29667,0 -70.42001000000001,-35.34723,0 -70.46223000000001,-35.38305,0 -70.39667000000002,-35.50362,0 -70.42028000000001,-35.64362,0 -70.33778,-35.80834,0 -70.41058,-35.88694,0 -70.37361,-35.91389,0 -70.40945000000001,-35.96362,0 -70.36917,-36.04667,0 -70.42431999999999,-36.13604,0 -70.47387999999999,-36.16529,0 -70.57999,-36.14861,0 -70.58974000000001,-36.19194,0 -70.70473,-36.27057,0 -70.70808,-36.41778,0 -70.80167,-36.43473,0 -70.88751000000001,-36.40055,0 -70.93611000000001,-36.48194,0 -71.02918,-36.47917,0 -71.06056000000001,-36.59306,0 -71.04584,-36.68584,0 -71.13834,-36.69084,0 -71.18696,-36.84889,0 -71.14028999999999,-36.8825,0 -71.15833000000001,-36.925,0 -71.12223,-36.94695,0 -71.20113000000001,-36.97055,0 -71.14612,-36.99667,0 -71.125,-37.07557,0 -71.07919,-37.10418,0 -71.13528,-37.14417,0 -71.13918,-37.22416,0 -71.19667,-37.29668,0 -71.10806,-37.45862,0 -71.11557000000001,-37.57944,0 -71.17167000000001,-37.61806000000001,0 -71.18028000000001,-37.69806,0 -70.99751999999999,-38.07112,0 -71.01306,-38.23056,0 -70.97083000000001,-38.41807,0 -70.82418,-38.56806,0 -70.87667,-38.63889,0 -70.86,-38.68806,0 -70.92583999999999,-38.7425,0 -71.22612,-38.80306,0 -71.4014,-38.92028,0 -71.42279000000001,-39.03694,0 -71.38751000000001,-39.23446,0 -71.40195,-39.32723,0 -71.47057,-39.38807,0 -71.44889000000001,-39.4325,0 -71.47335,-39.47862,0 -71.54085000000002,-39.53139,0 -71.48584,-39.5575,0 -71.48806,-39.59305,0 -71.50945,-39.61945,0 -71.61528000000001,-39.61973,0 -71.68223999999999,-39.56722,0 -71.70444999999999,-39.73278,0 -71.66945,-39.85723,0 -71.60639999999999,-39.91251,0 -71.67307,-40.01611000000001,0 -71.66166,-40.09389,0 -71.78889,-40.07861,0 -71.81863,-40.20196,0 -71.72861,-40.30112,0 -71.70251,-40.27639,0 -71.66972,-40.29473,0 -71.66389000000001,-40.33611,0 -71.71973,-40.42778,0 -71.7914,-40.41528,0 -71.85583,-40.555,0 -71.84390000000001,-40.61639,0 -71.95056,-40.73278,0 -71.83694,-40.95944,0 -71.89944,-41.35861,0 -71.86472999999999,-41.44083,0 -71.87779000000001,-41.52251,0 -71.84002,-41.57528,0 -71.91833,-41.64473,0 -71.78528,-41.86611,0 -71.75977,-41.99973,0 -71.72889000000001,-42.10139,0 -71.91389,-42.17806000000001,0 -71.9639,-42.12750000000001,0 -72.01221,-42.13111000000001,0 -72.13139,-42.28196,0 -72.04779000000001,-42.35667000000001,0 -72.07167,-42.42973,0 -72.02585000000001,-42.4775,0 -72.10945,-42.525,0 -72.13918,-42.58751000000001,0 -72.10196999999999,-42.85472,0 -72.13946,-42.99139,0 -72.05277,-43.10472,0 -71.83638999999999,-43.13195000000001,0 -71.73584,-43.17694,0 -71.74335000000001,-43.30223,0 -71.89418000000001,-43.32306,0 -71.94668,-43.44723,0 -71.85834,-43.46222,0 -71.86973999999999,-43.54028,0 -71.78001999999999,-43.54834,0 -71.70278999999999,-43.59584,0 -71.69862000000001,-43.68723,0 -71.81140000000001,-43.74917,0 -71.7914,-43.78223,0 -71.7375,-43.77194,0 -71.75557000000001,-43.82557,0 -71.69834,-43.86668,0 -71.64724,-43.91861,0 -71.65224000000001,-43.95166,0 -71.75806,-44.07168,0 -71.85474000000001,-44.11084000000001,0 -71.79389999999999,-44.21556,0 -71.82250999999999,-44.26529,0 -71.79389999999999,-44.32557,0 -71.85139,-44.36,0 -71.83835000000001,-44.39334,0 -71.20361,-44.42694,0 -71.10806,-44.53972,0 -71.13473000000001,-44.58389,0 -71.19723999999999,-44.59694,0 -71.23334,-44.66278,0 -71.22362,-44.745,0 -71.28223,-44.80028000000001,0 -71.50084,-44.74305,0 -71.65363000000001,-44.78279,0 -71.77,-44.75389,0 -71.84945999999999,-44.79306,0 -72.0425,-44.75417,0 -72.08085,-44.77473000000001,0 -72.06279000000001,-44.90556,0 -71.8839,-44.94862,0 -71.75335,-44.93194,0 -71.67473,-44.98028,0 -71.57362000000001,-44.97945,0 -71.45361,-45.15918,0 -71.33835000000001,-45.22055,0 -71.29779000000001,-45.29334000000001,0 -71.37334,-45.36944,0 -71.50639,-45.41139,0 -71.46751999999999,-45.4775,0 -71.50249,-45.51556,0 -71.75666,-45.56278,0 -71.73278999999999,-45.59890000000001,0 -71.78055999999999,-45.64889000000001,0 -71.79250999999999,-45.73251,0 -71.73833999999999,-45.79028,0 -71.75501,-45.84833,0 -71.63001000000001,-45.90084000000001,0 -71.60167,-45.97473000000002,0 -71.645,-45.99945,0 -71.76028,-46.11417,0 -71.90611,-46.14834000000001,0 -71.74751000000001,-46.24278,0 -71.74890000000001,-46.38612000000001,0 -71.66916999999999,-46.54750000000001,0 -71.68195,-46.69889,0 -71.80891,-46.78417,0 -71.94029000000001,-46.81556000000001,0 -71.92471999999999,-46.85056,0 -71.96056,-46.95,0 -71.90472,-47.00084,0 -71.99667,-47.06111,0 -71.86057,-47.14194,0 -71.86528,-47.21694000000001,0 -71.91752,-47.23446,0 -72.03195,-47.20333,0 -72.01501,-47.27444000000001,0 -72.08362,-47.35472000000001,0 -72.18056,-47.42028000000001,0 -72.25639,-47.41112,0 -72.34723,-47.445,0 -72.35945,-47.48111999999999,0 -72.30556,-47.50723,0 -72.33168000000001,-47.60168,0 -72.53528000000001,-47.90917000000001,0 -72.51501,-47.96111000000001,0 -72.32278,-48.07556,0 -72.28973000000001,-48.3475,0 -72.36668,-48.34612000000001,0 -72.4075,-48.39694,0 -72.58974000000001,-48.4664,0 -72.56417,-48.80445,0 -72.75528,-48.92806,0 -72.98805,-48.98167,0 -73.1664,-49.20001000000001,0 -73.16768999999999,-49.25264000000001,0 -73.08278000000001,-49.26917000000001,0 -73.13528,-49.30556,0 -73.46474000000001,-49.31139000000001,0 -73.45252000000001,-49.38528000000001,0 -73.53111,-49.43111,0 -73.52972,-49.49639000000001,0 -73.58168000000001,-49.53196,0 -73.51000999999999,-49.61334,0 -73.53333000000001,-49.68973,0 -73.44446000000001,-49.7825,0 -73.56445000000001,-49.92472999999999,0 -73.46722,-50.00666,0 -73.53223,-50.14056,0 -73.34639,-50.23806,0 -73.28001999999999,-50.32278,0 -73.24918,-50.57639,0 -73.17834000000001,-50.64777999999999,0 -73.18085000000001,-50.72918,0 -73.14445000000001,-50.76750000000001,0 -73.01806000000001,-50.74945,0 -72.90611,-50.6675,0 -72.75834999999999,-50.6189,0 -72.62973,-50.67305,0 -72.50112,-50.60334,0 -72.29416999999999,-50.64972000000001,0 -72.34166999999999,-50.7439,0 -72.24223000000001,-50.85111,0 -72.26694999999999,-51.01723,0 -72.34113000000001,-51.03666,0 -72.39778,-51.11418000000001,0 -72.37167,-51.16473000000001,0 -72.24529000000001,-51.24443999999999,0 -72.30917,-51.30222,0 -72.33945,-51.47583,0 -72.43944999999999,-51.55972000000001,0 -72.33085,-51.58723000000001,0 -72.28558,-51.69917000000001,0 -72.13555,-51.74001,0 -71.96639999999999,-51.84861,0 -71.93946,-51.89889,0 -71.96251,-51.96029000000001,0 -71.9314,-51.98889000000001,0 -69.99834,-51.9964,0 -69.46139000000001,-52.14362000000001,0 -69.23362,-52.14334000000001,0 -68.82861,-52.27973,0 -68.4375,-52.32833,0 -68.44176,-52.37778000000001,0 -68.61758000000002,-52.64151,0 -68.63583,-54.78834,0 -68.63612000000001,-54.80477,0 -68.6431,-54.88861,0 -68.55723999999999,-54.88001,0 -68.32334,-54.84361,0 -68.28834999999999,-54.79362,0 -67.84778,-54.87611,0 -67.01134,-54.90862,0 -66.79639,-54.94555,0 -66.64944,-55.02584,0 -66.45808000000001,-55.05168,0 -66.37195,-54.98500000000001,0 -66.01334,-54.95612000000001,0 -65.95529000000001,-54.89612000000001,0 -65.73779,-54.90222,0 -65.70585,-54.96611,0 -65.6575,-54.97223,0 -65.59889,-54.93056,0 -65.49001,-54.93472000000001,0 -65.47139,-54.88361,0 -65.37667999999999,-54.93056,0 -64.67834000000001,-54.90723,0 -64.60972,-54.9,0 -64.49612000000001,-54.82696,0 -64.41862,-54.83862000000001,0 -64.30945,-54.77778,0 -64.25306999999999,-54.77972,0 -64.25389,-54.84223,0 -63.97278,-54.75973000000001,0 -63.96861000000001,-54.81807,0 -63.81362000000001,-54.7314,0 -63.92001,-54.71417000000002,0 -64.06417999999999,-54.75000000000001,0 -64.16833,-54.71417000000002,0 -64.17834000000001,-54.75083999999999,0 -64.35806,-54.70639,0 -64.38112,-54.78861,0 -64.41278,-54.73667,0 -64.4539,-54.75833,0 -64.55267000000001,-54.715,0 -65.22362,-54.63361,0 -65.67361,-54.67306,0 -65.82751,-54.65584,0 -66.27166000000001,-54.52806000000001,0 -66.54667000000001,-54.41389,0 -66.70361,-54.28917,0 -66.92418000000001,-54.21918,0 -67.49554000000002,-53.95288,0 -67.50834999999999,-48.98417,0 -67.39917,-48.89056000000001,0 -67.23972999999999,-48.82278000000001,0 -67.08278,-48.63889000000001,0 -66.82668,-48.57111,0 -66.66750999999999,-48.44167,0 -66.46805999999999,-48.39917000000001,0 -66.44362,-48.34723000000001,0 -66.32751,-48.34555,0 -66.33556,-48.28362000000001,0 -66.1414,-48.18472,0 -66.07944999999999,-48.10444,0 -65.89778,-48.09973000000001,0 -65.97139,-47.96111000000001,0 -65.79584,-47.97028000000001,0 -65.78722999999999,-47.93557000000001,0 -65.87000999999999,-47.90222000000001,0 -65.91195999999999,-47.80418,0 -65.97333999999999,-47.78389000000001,0 -66.32418,-47.88278,0 -66.38863000000001,-47.8625,0 -66.32168,-47.87306,0 -66.12083,-47.81973,0 -66.02251,-47.76084,0 -65.87584,-47.76222,0 -65.75696000000001,-47.54194,0 -65.73222,-47.34418,0 -65.77224,-47.19834,0 -65.90001,-47.09862,0 -65.99335000000001,-47.06667000000001,0 -66.20916,-47.09361000000001,0 -66.71666999999999,-47.04000000000001,0 -67.05473000000001,-46.81001,0 -67.12445,-46.72639,0 -67.33805,-46.62528,0 -67.53667,-46.4175,0 -67.62029,-46.17139,0 -67.58667,-46.00389000000001,0 -67.58436000000002,-46.00031,0 -67.42222,-45.82195,0 -67.34166999999999,-45.77890000000001,0 -67.31611000000001,-45.61501,0 -67.18362000000001,-45.52861,0 -66.94946,-45.25557,0 -66.84668000000001,-45.21029,0 -66.53528,-45.20444000000001,0 -66.51918000000001,-45.17889,0 -66.58863,-45.13862,0 -66.45975,-45.14362,0 -66.53473,-45.11584,0 -66.52196000000001,-45.08667000000001,0 -66.28500000000001,-45.03167000000001,0 -66.19473000000001,-44.95917,0 -66.01528999999999,-44.97389,0 -65.94917,-45.02223,0 -65.87529000000001,-45.01944000000001,0 -65.85139,-44.98584,0 -65.68556,-45.04306,0 -65.60474000000001,-45.0164,0 -65.58474,-44.92445,0 -65.53055999999999,-44.895,0 -65.71084999999999,-44.83362,0 -65.71917999999999,-44.77612,0 -65.59945999999999,-44.61805,0 -65.44056999999999,-44.53807,0 -65.3614,-44.54418,0 -65.38751000000001,-44.52166,0 -65.35945,-44.48306,0 -65.27667,-44.48028,0 -65.34222,-44.43862,0 -65.22806,-44.33667000000001,0 -65.31249,-44.18696,0 -65.29695,-44.13223,0 -65.22445999999999,-44.10751000000001,0 -65.21028,-43.95528,0 -65.25834999999999,-43.96973,0 -65.32001,-43.81945,0 -65.33029000000001,-43.66779,0 -65.03722000000001,-43.39418,0 -65.02806,-43.30445,0 -64.80029999999999,-43.16112,0 -64.49168,-43.08445,0 -64.29501000000001,-42.99195,0 -64.31556999999999,-42.94944,0 -64.41028,-42.97805,0 -64.50389,-42.93806000000001,0 -64.59390000000001,-42.94112000000001,0 -64.80862000000001,-42.84028000000001,0 -64.99278,-42.79361,0 -65.01806999999999,-42.73944000000001,0 -64.96056000000002,-42.66639,0 -64.82084999999999,-42.62862,0 -64.62194,-42.52,0 -64.39806,-42.51584,0 -64.19611999999999,-42.63889,0 -64.24918,-42.77612,0 -64.08694,-42.89028,0 -63.69306000000001,-42.82168,0 -63.62583,-42.76194,0 -63.63334,-42.71278,0 -63.57805,-42.60612,0 -63.59083,-42.31695,0 -63.74694,-42.09056000000001,0 -63.87195000000001,-42.10250000000001,0 -64.19917,-42.22417,0 -64.33446000000001,-42.23667,0 -64.06305999999999,-42.27862,0 -64.04528999999999,-42.37251,0 -64.1189,-42.43444000000001,0 -64.30417,-42.41528,0 -64.45193999999999,-42.44584,0 -64.60695,-42.41889,0 -64.46251,-42.26362,0 -64.87139999999999,-42.19195,0 -64.99418,-42.11222,0 -65.06223,-42.01,0 -65.07445,-41.93167,0 -64.99084000000001,-41.77862,0 -65.02916999999999,-41.67556,0 -64.99111000000001,-41.51083000000001,0 -65.07111999999999,-41.43334,0 -65.17973000000001,-40.99667,0 -65.12584,-40.84056,0 -65.0125,-40.77195,0 -64.90611,-40.76862,0 -64.93807,-40.75639,0 -64.9264,-40.72862,0 -64.98139000000001,-40.72195,0 -64.77528,-40.73278,0 -64.7975,-40.77223,0 -64.75194999999999,-40.77695,0 -64.74918,-40.80278,0 -64.89612,-40.79862,0 -64.91166,-40.82028,0 -64.88528,-40.83806,0 -64.69112,-40.83889,0 -64.41251,-40.90945,0 -64.14223,-41.02195,0 -64.05334000000001,-40.99918,0 -64.05833,-41.04501,0 -63.96001,-41.06445,0 -63.8075,-41.15917,0 -63.14195000000001,-41.16056,0 -63.03334000000002,-41.14834,0 -62.80139,-41.04333,0 -62.72333,-41.04611,0 -62.32110999999999,-40.86723,0 -62.22972,-40.66361,0 -62.18389,-40.62972000000001,0 -62.32666,-40.67834000000001,0 -62.34807,-40.60723,0 -62.26139000000001,-40.63334,0 -62.26000000000001,-40.56001,0 -62.29111,-40.56583,0 -62.33139000000001,-40.49834,0 -62.42084,-40.45945,0 -62.48945,-40.29945,0 -62.35278000000002,-40.18167,0 -62.36418000000001,-40.05528,0 -62.32000000000001,-39.86834,0 -62.28612,-39.85473,0 -62.3075,-39.81861,0 -62.18917,-39.86,0 -62.11639,-39.83945,0 -62.05002,-39.48876,0 -61.85882,-39.24178,0 -61.56255,-39.01225,0 -61.38361,-38.97973000000001,0 -61.16223,-38.99889,0 -60.86000000000001,-38.97639,0 -59.78973,-38.83694,0 -59.61,-38.77973,0 -59.03807,-38.69251,0 -58.72279,-38.58055000000001,0 -58.31223000000001,-38.48972,0 -57.84584,-38.29917,0 -57.63473000000001,-38.18,0 -57.53306,-38.08611,0 -57.54112,-37.98195000000001,0 -57.48056,-37.82584,0 -57.09973000000002,-37.47445,0 -56.66306000000001,-36.90056,0 -56.67168000000001,-36.57584,0 -56.74167,-36.31834,0 -56.77361,-36.30445,0 -56.76778000000001,-36.3475,0 -56.84778,-36.34222,0 -56.94195,-36.38334,0 -56.93389,-36.34723,0 -57.05334,-36.31417,0 -57.23667,-36.18418,0 -57.37666999999999,-35.96278,0 -57.37612,-35.78139,0 -57.12972000000001,-35.47029,0 -57.12473,-35.41695,0 -57.18833000000001,-35.32055,0 -57.33555,-35.15556,0 -57.49889,-35.04556,0 -57.81361,-34.86584,0 -58.19723,-34.73861,0 -58.34472,-34.63612,0 -58.34633000000001,-34.63362,0 -58.36945000000001,-34.58389,0 -58.46972000000001,-34.53972,0 -58.52528,-34.43972,0 -58.48417000000001,-34.34166,0 -58.56667,-34.29056,0 -58.47195,-34.28111,0 -58.40885999999999,-34.22926,0 -58.18541,-34.16549,0 -58.08334,-34.18695,0 -57.90722,-34.37,0 -57.84028,-34.49473,0 -57.58195000000001,-34.43917,0 -57.51945000000001,-34.46445,0 -57.45778,-34.44222,0 -57.11778,-34.46222,0 -56.88779,-34.66612,0 -56.5639,-34.77251,0 -56.36723,-34.79444,0 -56.42556,-34.84306,0 -56.32028,-34.91057,0 -56.22084,-34.88945,0 -56.16861,-34.93194,0 -55.68557000000001,-34.77444,0 -55.36501,-34.81056,0 -55.25666,-34.90723,0 -55.05556000000001,-34.8914,0 -54.95612000000001,-34.94028,0 -54.95129000000001,-34.9778,0 -54.53111,-34.80609000000001,0 -54.27916,-34.69389,0 -54.30083000000001,-34.65,0 -54.34583,-34.64362,0 -54.28167,-34.59306,0 -54.32557,-34.56278,0 -54.2425,-34.58139,0 -54.25695,-34.68945000000001,0 -54.14500000000001,-34.67139,0 -54.13,-34.62389000000001,0 -53.98890000000001,-34.50389,0 -53.77139,-34.39083,0 -53.75029,-34.25751,0 -53.53723000000001,-34.06612,0 -53.48251000000001,-33.85445,0 -53.3743,-33.74068,0 -52.74139000000001,-33.25695,0 -52.50465000000001,-32.88476,0 -52.50452,-37.88475,0 -52.50438,-42.88476,0 -52.50425,-47.88475,0 -52.50412000000001,-52.88476000000001,0 -52.50398000000001,-57.88475,0 -52.50385,-62.88475,0 -52.50372,-67.88475,0 -52.50368,-69.03889,0 -52.50352,-74.03888000000001,0 -52.50335,-79.03888000000001,0 -52.50323000000001,-82.53889,0 -52.50305,-87.53888000000001,0 -52.50298000000001,-89.90000000000001,0 -53.50229000000001,-89.90000000000001,0 -54.50161000000001,-89.90000000000001,0 -55.50094,-89.90000000000001,0 -56.50026,-89.90000000000001,0 -57.49957,-89.90000000000001,0 -58.49889000000002,-89.90000000000001,0 -59.49821000000001,-89.90000000000001,0 -60.49753000000001,-89.90000000000001,0 -61.49686,-89.90000000000001,0 -62.49617,-89.90000000000001,0 -63.49549,-89.90000000000001,0 -64.49481,-89.90000000000001,0 -65.49413,-89.90000000000001,0 -66.49345,-89.90000000000001,0 -67.49276999999999,-89.90000000000001,0 -67.49276999999999,-84.89999,0 -67.49276999999999,-79.90000000000001,0 -67.49276999999999,-74.90000000000001,0 -67.49276999999999,-69.90000000000001,0 -67.49276999999999,-64.90000000000001,0 -67.49276999999999,-59.90001,0 -67.49276999999999,-55.95932,0 -69.11057,-55.64479,0 -70.14055000000001,-55.36066000000002,0 -71.60384000000001,-54.89185,0 -73.13816,-54.55088000000001,0 -74.76482000000001,-52.7786,0 -75.36150000000001,-51.61010000000001,0 -75.73088,-49.03514,0 -75.68826,-48.46332,0 -75.60303000000002,-48.05132,0 -75.65273000000001,-46.92189000000001,0 -75.75219,-46.80824,0 -75.71666999999999,-46.56318,0 -75.32599,-46.32876,0 -75.18392,-44.80154,0 -74.87848,-43.52649,0 -74.43097,-43.22105,0 -74.18946,-42.17331,0 -74.0545,-41.73290000000001,0 -73.8556,-41.76842,0 -73.75281000000001,-41.75128,0 -73.68279,-41.62473,0 -73.56417999999999,-41.61362,0 -73.49195,-41.52084,0 -73.59166999999999,-41.6025,0 -73.82167,-41.56556,0 -73.82390000000001,-41.51723,0 -73.87445000000001,-41.47333,0 -73.85890000000001,-41.33973,0 -73.97806,-41.1189,0 -73.99500999999999,-40.97000000000001,0 -73.89806,-40.90639,0 -73.94778,-40.86389,0 -73.84278999999999,-40.68696,0 -73.85778999999999,-40.6264,0 -73.74751000000001,-40.52472,0 -73.78445000000001,-40.42362,0 -73.75029000000001,-40.25723,0 -73.71709,-40.20832,0 -73.73112,-40.18,0 -73.65807,-40.11028,0 -73.71445,-39.97862,0 -73.45168,-39.8325,0 -73.38251,-39.91445,0 -73.37973,-39.73639,0 -73.40443999999999,-39.69167,0 -73.34557000000001,-39.66417,0 -73.2439,-39.49139,0 -73.25751,-39.4539,0 -73.2225,-39.41473,0 -73.24597,-39.38584,0 -73.2075,-39.21556,0 -73.2353,-39.18584,0 -73.22501,-39.21945,0 -73.24779,-39.22223,0 -73.43307,-38.69168,0 -73.44196,-38.76750000000001,0 -73.54224000000001,-38.41833,0 -73.4539,-38.05556,0 -73.53807000000001,-37.87333,0 -73.66945,-37.72611000000001,0 -73.68722,-37.60111,0 -73.60196999999999,-37.51333,0 -73.60896,-37.41935,0 -78.60896,-37.41935,0 -82.11279,-37.41935,0 -82.11279,-32.41934,0 -82.11279,-27.41935000000001,0 -82.11279,-24.70552,0 -77.11279,-24.70552,0 -72.11279999999999,-24.70552,0 -70.58064000000002,-24.70552,0 -70.55695,-24.60889,0 -70.5825,-24.52667,0 -70.50306999999999,-24.16556,0 -70.51862,-23.86084,0 -70.38943999999999,-23.59723,0 -70.4164,-23.49305,0 -70.48390000000001,-23.45028,0 -70.54667000000001,-23.52112,0 -70.62306,-23.49973,0 -70.58474,-23.42389,0 -70.59361,-23.22222,0 -70.5514,-23.16250000000001,0 -70.57584,-23.07166,0 -70.50917,-23.01055,0 -70.48112000000002,-23.0825,0 -70.38862,-23.06083,0 -70.28917,-22.90139,0 -70.30750999999999,-22.75806,0 -70.16833,-21.94195,0 -70.19334000000001,-21.88805,0 -70.14805,-21.85556,0 -70.15416999999999,-21.66694,0 -70.06585,-21.52361,0 -70.08446000000001,-21.48473,0 -70.05334000000002,-21.42565,0 -70.09529000000001,-21.33667,0 -70.06473,-21.29639,0 -70.12306,-21.08139,0 -70.17001000000001,-21.01083,0 -70.13918,-20.87556,0 -70.21223000000001,-20.79973,0 -70.20473,-20.52916,0 -70.16724000000001,-20.45166,0 -70.19056999999999,-20.36778,0 -70.13306,-20.27334000000001,0 -70.16528,-20.20389,0 -70.12612,-20.07361,0 -70.13612000000001,-19.86389,0 -70.1664,-19.80695,0 -70.15167,-19.71445,0 -70.23002,-19.58667,0 -70.19862000000001,-19.57694,0 -70.19695,-19.50278,0 -70.28862,-19.29444,0 -70.27166,-19.14139,0 -70.35778999999999,-18.78417,0 -70.31001000000001,-18.43445,0 -70.40549,-18.34854,0 -70.35583,-18.31973,0 -70.14111,-18.32333,0 -69.95113000000001,-18.24278,0 -69.84141,-18.12861,0 -69.77000000000001,-17.96889,0 -69.84972000000001,-17.75418,0 -69.83223,-17.67694,0 -69.81473,-17.65223,0 -69.68389000000001,-17.66361,0 -69.49973,-17.50528,0 -69.50112,-17.37889,0 -69.59084,-17.29528,0 -69.6562,-17.28724,0 -69.61806,-17.18667,0 -69.38834,-17.055,0 -69.41112,-17.02056,0 -69.34334,-16.9825,0 -69.17001000000001,-16.72389,0 -69.01112000000001,-16.65695,0 -69.04167000000001,-16.54112,0 -68.99084000000001,-16.41973,0 -68.82252,-16.33973,0 -68.84084,-16.29555,0 -68.96501000000001,-16.20944,0 -69.13415999999999,-16.22362,0 -69.21194,-16.16055,0 -69.42195,-15.61805,0 -69.32696,-15.43055,0 -69.27584,-15.40417,0 -69.26835,-15.32695,0 -69.13695,-15.24584,0 -69.38139,-14.97,0 -69.34945999999999,-14.895,0 -69.36639,-14.8025,0 -69.24195,-14.73028,0 -69.2289,-14.57639,0 -69.1575,-14.57555,0 -69.15779000000001,-14.50528,0 -68.98139999999999,-14.37917,0 -68.99918,-14.24334,0 -68.85306,-14.19917,0 -68.89558,-14.03389,0 -68.97751,-13.96166,0 -69.00306000000001,-13.75445,0 -69.08778,-13.66333,0 -69.01472,-13.63834,0 -68.96194,-13.51305,0 -68.96335000000001,-13.02667,0 -68.97362,-12.86334,0 -68.84668000000002,-12.73278,0 -68.75666,-12.71472,0 -68.73139999999999,-12.66972,0 -68.78084,-12.61778,0 -68.6739,-12.50115,0 -68.925,-11.99667,0 -69.56751,-10.95055,0 -69.39529,-10.92695,0 -68.90028,-11.01528,0 -68.78583999999999,-10.99223,0 -68.74760000000001,-11.01038,0 -68.78084,-11.065,0 -68.77473000000001,-11.13639,0 -68.58346,-11.10614,0 -68.51694999999999,-11.05445,0 -68.41750999999999,-11.04445,0 -68.3914,-11.00805,0 -68.28055999999999,-10.98,0 -68.06111000000001,-10.67639,0 -67.84557,-10.6575,0 -67.74557,-10.7125,0 -67.70334,-10.69573,0 -67.61168000000001,-10.53222,0 -67.46363,-10.45555,0 -67.41833,-10.38306,0 -67.33334000000001,-10.37,0 -67.32417,-10.32084,0 -67.17444999999999,-10.325,0 -67.08085,-10.27194,0 -66.88806,-10.08639,0 -66.64025,-9.91827,0 -66.83056000000001,-9.838054,0 -68.65723,-9.066394000000001,0 -70.35722,-8.160553,0 -72.63779,-7.603335,0 -73.79514,-7.122628,0 -73.75446,-6.894163,0 -73.67639,-6.804441000000002,0 -73.35306,-6.576949,0 -73.19168000000001,-6.552783000000001,0 -73.12390000000001,-6.447223,0 -73.16307000000001,-6.207229,0 -73.22974000000001,-6.093613,0 -73.12612,-5.867496,0 -72.96335000000001,-5.65416,0 -72.94251,-5.543334,0 -72.96278,-5.458051000000001,0 -72.88417,-5.258052,0 -72.91750999999999,-5.151105,0 -72.89028999999999,-5.123610000000001,0 -72.74139,-5.050837,0 -72.62529000000001,-5.054166,0 -72.60916,-5.000833,0 -72.40611,-4.878891,0 -72.37529000000001,-4.784446,0 -72.235,-4.753333,0 -72.12917,-4.693609,0 -72.06657,-4.606092,0 -72.02806,-4.612501,0 -71.90249,-4.518189,0 -71.69057000000001,-4.473892,0 -71.64474,-4.509162,0 -71.62306,-4.475835,0 -71.60722,-4.498056,0 -71.51055,-4.481389,0 -71.47083000000001,-4.438333,0 -71.38223000000001,-4.430836,0 -71.3539,-4.457223,0 -71.29528999999999,-4.433608,0 -71.29056,-4.383055,0 -71.23296000000002,-4.374621000000001,0 -71.20029000000001,-4.410559,0 -71.16946,-4.357782,0 -71.12918000000001,-4.398894,0 -71.08334000000001,-4.363605,0 -71.01140000000001,-4.382226,0 -70.98862,-4.340557,0 -70.95029,-4.38139,0 -70.83056999999999,-4.234447000000001,0 -70.83474,-4.187781,0 -70.76584,-4.146390000000001,0 -70.68391,-4.173337,0 -70.62000999999999,-4.114998,0 -70.6289,-4.15666,0 -70.58414999999999,-4.195558,0 -70.54528999999999,-4.138606,0 -70.51195,-4.180285,0 -70.43333,-4.131667,0 -70.35973,-4.16584,0 -70.32389000000001,-4.136662,0 -70.30667,-4.244716,0 -70.19410000000001,-4.333177,0 -70.10695,-4.253058,0 -70.0741,-4.313079,0 -70.01862,-4.339161000000001,0 -69.96417,-4.290004,0 -69.95692,-4.236876,0 -69.46056,-1.496107,0 -69.37946,-1.35028,0 -69.38084000000002,-1.174447,0 -69.4389,-1.083889,0 -69.44198,-1.017811,0 -69.43473,-0.9941676,0 -69.52916999999999,-0.9244446000000001,0 -69.5625,-0.8080565,0 -69.61472999999999,-0.7511045,0 -69.57278,-0.6366605,0 -69.60751000000001,-0.5175005,0 -69.74612000000001,-0.4522145000000001,0 -69.85167,-0.3352775,0 -69.92834000000002,-0.3094475,0 -70.05807000000002,-0.1575005,0 -70.04416999999999,0.5908405,0 -69.79779000000001,0.6002815000000001,0 -69.67834000000001,0.6788875,0 -69.60779000000001,0.6463885,0 -69.56723,0.7011085,0 -69.46417,0.7402855,0 -69.35001,0.6369475,0 -69.29389999999999,0.6677815,0 -69.28695999999999,0.6208375,0 -69.13721,0.6299995000000001,0 -69.13863000000001,0.6866634,0 -69.18250999999999,0.7244455,0 -69.14001,0.8669425,0 -69.20278999999999,0.9066595,0 -69.22417,0.9952825,0 -69.34361000000001,1.074716,0 -69.42084000000001,1.026107,0 -69.4464,1.062215,0 -69.60196999999999,1.080836,0 -69.70473,1.059443,0 -69.76501,1.09584,0 -69.84222,1.062215,0 -69.84610000000001,1.710459,0 -69.78695999999999,1.706111,0 -69.71693999999999,1.748051,0 -69.63139,1.737782,0 -69.55584000000002,1.784159,0 -69.37793000000001,1.726146,0 -68.15306,1.724165,0 -68.17583999999999,1.763054,0 -68.23278999999999,1.775555,0 -68.22917,1.823336,0 -68.27724000000001,1.837781,0 -68.18668,2.020005,0 -68.17083,1.973889,0 -68.08945,1.933613,0 -68.00502,1.763054,0 -67.91474,1.745279,0 -67.80556,1.788335,0 -67.64418000000001,1.999997,0 -67.42417,2.143889,0 -67.33501,2.111111,0 -67.07250999999999,1.625282,0 -67.07668,1.173338,0 -66.87045000000001,1.22094,0 -66.99168,1.695833,0 -67.13361999999999,1.987785,0 -67.10945,2.094444,0 -67.16446999999999,2.135556,0 -67.21084999999999,2.240558,0 -67.17307,2.341665,0 -67.19251,2.392496,0 -67.32056,2.468339,0 -67.50333999999999,2.67722,0 -67.56778,2.683341,0 -67.60695,2.795552,0 -67.75167999999999,2.840003,0 -67.85506,2.789783,0 -67.84305999999999,2.868335000000001,0 -67.43556,3.253896,0 -67.38417,3.259161000000001,0 -67.29056,3.3975,0 -67.30723999999999,3.455559,0 -67.38779,3.493052,0 -67.49195,3.726395000000001,0 -67.61333999999999,3.754719,0 -67.70851,4.046957,0 -67.80556,4.227498,0 -67.79194,4.427495000000001,0 -67.87612,4.530833,0 -67.79056,5.054697,0 -67.82861,5.112216,0 -67.81168,5.217497,0 -67.85062000000001,5.301639,0 -67.80279,5.385563,0 -67.64944,5.478335,0 -67.61306,5.539166,0 -67.65195,5.676390000000001,0 -67.62223,5.787503,0 -67.41280999999999,5.992460000000001,0 -67.49199,6.118659000000001,0 -67.45445000000001,6.193052,0 -67.56834000000001,6.264719000000001,0 -67.82278,6.30945,0 -67.99500999999999,6.207777,0 -68.15224000000001,6.223338000000001,0 -68.31362,6.166944,0 -68.4539,6.190550000000002,0 -68.63721,6.133895,0 -69.0564,6.21611,0 -69.24529,6.081389000000001,0 -69.32501000000002,6.153605,0 -69.42944,6.118605000000001,0 -70.11917,6.975836,0 -70.30083999999999,6.939161,0 -70.51279,7.015553000000001,0 -70.56362,7.089444000000001,0 -70.61279,7.072496,0 -70.70251,7.108056,0 -70.89001,7.074998,0 -71.02501,6.984449000000001,0 -71.12806999999999,6.998895,0 -71.18668,6.962769000000001,0 -71.26555999999999,6.98778,0 -71.29556,7.033338000000001,0 -71.45778,7.015832,0 -71.60695,7.059716,0 -71.76418,7.032221,0 -71.76557,7.005555,0 -71.83278,6.987221,0 -71.9268,7.009748000000001,0 -72.06611,7.062417000000001,0 -72.14528,7.198614,0 -72.15085000000002,7.339715000000001,0 -72.18333,7.382781000000001,0 -72.39917,7.406108,0 -72.47168000000001,7.491941000000001,0 -72.44334000000001,7.828055000000001,0 -72.48139999999999,7.947783,0 -72.42307,7.985835000000001,0 -72.40252,8.041949000000001,0 -72.33362,8.049446,0 -72.32529,8.095553000000001,0 -72.38557,8.25389,0 -72.38417,8.363051000000001,0 -72.66446999999999,8.641107000000002,0 -72.7903,9.083042000000001,0 -72.76819,9.111428,0 -72.81696,9.145277,0 -72.94223,9.104165,0 -73.00639,9.304442,0 -73.21890000000001,9.171386999999999,0 -73.37195,9.166949000000001,0 -73.38361999999999,9.189719,0 -73.29834,9.284715,0 -73.16833,9.536111999999999,0 -73.09279000000001,9.585557,0 -72.96223000000001,9.836945999999999,0 -72.98723,9.914165000000001,0 -72.90501999999999,10.4425,0 -72.76028,10.65139,0 -72.66528,10.87277,0 -72.55862000000001,10.97389,0 -72.49306,11.12111,0 -72.34113000000001,11.165,0 -72.26000999999999,11.15445,0 -71.97723000000001,11.665,0 -71.52943999999999,11.78005,0 -71.38473999999999,11.82889,0 -71.32471,11.85305,0 -71.08137000000001,12.00208,0 -71.06217,12.23228,0 -71.25400999999999,12.4433,0 -71.77196000000001,12.5584,0 -71.76823,17.5584,0 -71.76786,18.0385,0 -71.74473999999999,18.13389,0 -71.76918000000001,18.20222,0 -71.69473000000001,18.32222,0 -71.9075,18.43777,0 -71.88500999999999,18.47721,0 -72.00306999999999,18.60083,0 -71.83168000000001,18.6225,0 -71.71584,18.74972,0 -71.71945,18.88389,0 -71.78889,18.96277,0 -71.85605,18.94783,0 -71.75,19.01972,0 -71.63502,19.15806,0 -71.62918000000001,19.21972,0 -71.69611999999999,19.24167,0 -71.76669,19.33195,0 -71.69862000000001,19.40027,0 -71.69168000000001,19.48584,0 -71.75418000000001,19.70582,0 -71.75587,20.2411,0 -67.50364999999999,20.24133,0 -67.50364999999999,25.24134,0 -67.50364999999999,30.24134,0 -67.50364999999999,35.24134,0 -67.50364999999999,40.24134,0 -67.50364999999999,44.47953,0 -67.11709999999999,44.69726,0 -66.95337000000001,44.82681,0 -66.97331,44.91223,0 -67.09289,45.09019000000001,0 -67.15837999999999,45.17419,0 -67.20654,45.18303,0 -67.27501,45.19887,0 -67.34193999999999,45.14999,0 -67.46278,45.2761,0 -67.4164,45.39888,0 -67.48528,45.49444,0 -67.41083,45.52999,0 -67.41249999999999,45.58693,0 -67.65666,45.63055000000001,0 -67.71751,45.69137,0 -67.79916,45.7011,0 -67.80638,45.78472,0 -67.75723000000001,45.83333,0 -67.79028,45.88194000000001,0 -67.74695,45.92917,0 -67.77251,45.95750000000001,0 -67.79333,47.07028,0 -68.18582000000001,47.33277,0 -68.30665000000001,47.36444,0 -68.37305000000001,47.34722000000001,0 -68.39751,47.29527,0 -68.49805000000002,47.30555,0 -68.88779,47.18804,0 -69.03612,47.25722,0 -69.05359,47.29379,0 -68.57611,47.42471,0 -68.38028,47.5586,0 -68.37277,47.92471000000001,0 -68.12027000000001,47.92665000000001,0 -68.1161,48.00194000000001,0 -67.61221000000001,47.99749000000001,0 -67.60417,47.9361,0 -67.35665,47.84166,0 -67.32278000000001,47.89638,0 -67.18859999999999,47.88388000000001,0 -67.04723,47.93083,0 -66.94694,47.89916000000001,0 -66.9436,47.96305000000001,0 -66.8437,47.99666,0 -66.3727,48.08661000000001,0 -65.32375999999999,47.96921,0 -64.76967999999999,48.17476000000001,0 -64.52839,48.32669000000001,0 -63.84024000000001,48.40712000000001,0 -63.04419000000001,48.50467,0 -63.05001,52.00000000000001,0 -63.84641000000001,52.00000000000001,0 -63.82917,52.25999,0 -63.91805999999999,52.33611,0 -64.02528000000001,52.35443,0 -63.9875,52.3625,0 -64.01306,52.38722,0 -63.91889000000001,52.38942999999999,0 -63.96222,52.45193,0 -64.03749999999999,52.43444,0 -64.08085,52.47610000000001,0 -64.00194999999999,52.55471,0 -63.86305999999999,52.61277,0 -63.37777,52.65083,0 -63.42305000000001,52.70722,0 -63.59584,52.77077000000001,0 -63.54084,52.91666,0 -63.54805000000001,52.98499,0 -63.62611,53.04222000000002,0 -63.655,53.105,0 -63.86639000000001,53.10527,0 -63.92805,53.07166,0 -63.91945000000001,52.97693,0 -63.98277,52.9336,0 -63.95417,52.87165,0 -64.08085,52.88138,0 -64.1725,52.85083000000001,0 -64.20140000000001,52.79084,0 -64.15666,52.73833,0 -64.20223,52.67222000000001,0 -64.17529,52.60944000000001,0 -64.20889000000001,52.54889000000001,0 -64.08308,52.37638,0 -64.13137999999999,52.28139,0 -64.11861,52.14472,0 -64.25779,52.12804,0 -64.29333,52.04639,0 -64.27444,52.00332,0 -64.33085,51.96527,0 -64.31751,51.90359999999999,0 -64.35722,51.85055000000001,0 -64.26418,51.73972000000001,0 -64.44249000000001,51.66776999999999,0 -64.58112,51.55778,0 -64.60417,51.64277,0 -64.70305999999999,51.69277000000002,0 -64.71805999999999,51.74778000000001,0 -64.59389,51.79610000000001,0 -64.58778,51.82888,0 -64.84584,51.93083000000001,0 -64.85334,52.02193000000001,0 -65.10861,52.17083000000001,0 -65.4614,52.20665000000001,0 -65.58056999999999,52.04278,0 -65.75861,52.11139,0 -65.79944,52.09555,0 -65.80167,52.04278,0 -65.91695,52.05082,0 -66.06751000000001,52.12276,0 -66.06807000000001,52.21638000000001,0 -66.17389000000001,52.22055,0 -66.26667000000001,52.31138,0 -66.31973000000001,52.28916000000001,0 -66.30388000000001,52.22276,0 -66.33556,52.13639,0 -66.43889,52.20083,0 -66.48556000000001,52.30721,0 -66.45862,52.3661,0 -66.35805000000002,52.40666,0 -66.44665999999999,52.53082,0 -66.37361,52.54249999999999,0 -66.43222,52.61138,0 -66.43388,52.70638,0 -66.32834,52.73693,0 -66.37888,52.83611,0 -66.26973,52.87749,0 -66.35472,52.98166,0 -66.47694,53.03416,0 -66.52528,52.94332000000001,0 -66.64806,52.94583,0 -66.66806,52.72581,0 -66.75501,52.71027000000001,0 -66.80556,52.66554,0 -66.87470999999999,52.74778,0 -66.89138,52.67333000000001,0 -67.08945,52.7197,0 -67.05833,52.80499,0 -67.07805999999999,52.94804000000001,0 -66.97945000000001,53.02777,0 -66.94861,53.10972000000002,0 -66.99027,53.20082000000001,0 -66.9025,53.3261,0 -66.9875,53.40359,0 -67.06779,53.38417,0 -67.06862,53.4286,0 -67.12888,53.46416,0 -67.14194999999999,53.54221,0 -67.49194,53.60388,0 -67.43195,53.78305,0 -67.58804000000001,53.85722,0 -67.60916,53.92804000000001,0 -67.76055,54.01583000000001,0 -67.78195,54.06388,0 -67.71556,54.12944000000001,0 -67.69611,54.1386,0 -67.485,54.23416,0 -67.53167000000001,54.24889,0 -67.49472,54.31444000000001,0 -67.59583000000001,54.36527000000001,0 -67.58611999999999,54.4175,0 -67.63306,54.47999000000001,0 -67.60139,54.56639000000001,0 -67.49249,54.58194,0 -67.30556,54.50416,0 -67.21945,54.6075,0 -67.03639,54.62166,0 -67.2139,54.66888000000001,0 -67.185,54.71943000000001,0 -67.30777000000001,54.78388,0 -67.26334,54.82527,0 -67.36221000000001,54.87582,0 -67.45305999999999,55.01888,0 -67.42833,55.07111,0 -67.27388999999999,55.06666,0 -67.30943000000001,55.01554000000001,0 -67.02806000000001,54.89778,0 -66.94694,54.80165,0 -66.71806000000001,54.73193,0 -66.71222,54.78194,0 -66.605,54.79084,0 -66.73166999999999,54.94332,0 -66.65944000000002,54.97942,0 -66.76585,55.10556,0 -66.74083,55.17749,0 -66.6889,55.20416,0 -66.83389,55.31332,0 -66.80029,55.33999000000001,0 -66.68804,55.3011,0 -66.68195,55.25333,0 -66.57640000000001,55.25055,0 -66.23999000000001,54.99194000000001,0 -66.035,54.90972,0 -65.95778,54.92944000000001,0 -65.85834,54.90778,0 -65.83528,54.83138,0 -65.68998000000001,54.71332,0 -65.44387999999999,54.74583000000001,0 -65.09445,54.69555,0 -64.81166,54.74917000000001,0 -64.55222000000001,54.72055,0 -64.34723,54.75527,0 -63.97619000000001,54.62645000000001,0 -63.72084,54.59665,0 -63.62361,54.66610000000001,0 -63.54194,54.84055,0 -63.43528000000001,54.97360000000001,0 -63.56611000000002,55.06027,0 -63.51944,55.1836,0 -63.11423,55.31608,0 -63.09333,55.34583000000001,0 -63.17445,55.40971,0 -63.14416,55.52638000000001,0 -63.29833000000001,55.52333,0 -63.44806,55.59943,0 -63.48833000000001,55.69665000000001,0 -63.71528,55.85917000000001,0 -63.69416,55.94222,0 -63.445,56.02276,0 -63.81333,56.0425,0 -63.88,56.07695,0 -63.84778,56.12027,0 -64.02028,56.07638000000001,0 -64.01083,56.15999,0 -63.87694,56.21721,0 -63.97472000000001,56.25916000000001,0 -64.08667,56.25916000000001,0 -64.13667,56.3036,0 -64.10584,56.33139000000001,0 -64.11417,56.39027000000001,0 -64.16972,56.42778,0 -63.97472000000001,56.41277,0 -63.87138,56.43942,0 -63.94611,56.48388,0 -63.945,56.54972,0 -64.12888,56.69943,0 -64.08362,56.76554,0 -63.99222000000002,56.78582,0 -64.00528,56.85054000000001,0 -63.87138,56.87805000000001,0 -63.91779,56.93027000000001,0 -63.86333,56.99276,0 -63.87361,57.06638000000002,0 -63.78751,57.11193999999999,0 -63.79249999999999,57.16526000000001,0 -63.7411,57.23277,0 -63.80500000000001,57.28027,0 -63.83944,57.20054,0 -63.86584000000001,57.19583000000001,0 -63.87583,57.23193000000001,0 -63.83694000000001,57.32583000000002,0 -63.7075,57.3786,0 -63.75723000000001,57.43444000000001,0 -63.76501,57.57388,0 -63.60723,57.66361,0 -63.58944,57.72526,0 -63.65333,57.7311,0 -63.70055,57.66277000000001,0 -63.76528,57.73277000000001,0 -63.82556000000002,57.69027,0 -63.89194,57.73027,0 -63.92666,57.79722,0 -64.00666,57.81276,0 -64.02251,57.77138,0 -64.05749,57.76943000000001,0 -64.21445,57.97748,0 -64.20862,58.03334,0 -64.43195,58.08611,0 -64.38721,58.19137000000001,0 -64.21861,58.23082,0 -64.16306,58.34389,0 -64.03667,58.37499,0 -64.0025,58.42527,0 -63.85918,58.43776,0 -63.81555,58.47805000000001,0 -63.84584,58.50805,0 -63.89806,58.56499,0 -64.04277,58.52388000000001,0 -64.10056,58.57916,0 -64.08611999999999,58.63777,0 -64.02916999999999,58.68694,0 -63.50611,58.73194,0 -63.4825,58.77055000000001,0 -63.58834,58.84638000000002,0 -63.77083,58.87554000000001,0 -63.83333,58.8325,0 -63.97472000000001,58.8261,0 -64.15611,58.74528,0 -64.25751,58.77944000000001,0 -64.25861999999999,58.85000000000001,0 -64.30029,58.88249,0 -64.56807000000001,58.88721000000001,0 -64.71888,58.94527000000001,0 -64.80943000000002,58.9111,0 -64.88332,58.93194,0 -64.83890000000001,58.9586,0 -64.86472000000001,58.99054,0 -64.82944000000002,59.03249,0 -64.72,59.07,0 -64.46084000000001,58.98443,0 -64.29138,59.00527,0 -64.34972000000001,59.06666000000001,0 -64.48917,59.09943,0 -64.49306,59.15888,0 -64.53471999999999,59.19749000000001,0 -64.50751,59.25,0 -64.53834000000001,59.29055,0 -64.49916,59.33972000000001,0 -64.53806,59.37360000000001,0 -64.485,59.39638,0 -64.50696000000001,59.42832000000001,0 -64.34334,59.50111,0 -64.43249,59.52944,0 -64.70084,59.44583000000001,0 -64.83307000000001,59.53971,0 -64.77306,59.69887,0 -64.81416000000002,59.81889,0 -64.74445,59.84499,0 -64.76778,59.87999,0 -64.66191000000001,59.88361,0 -64.6536,59.92999,0 -64.84778,59.96416,0 -64.90639,60.04805,0 -64.79695,60.03972,0 -64.7025,60.06499,0 -64.73416,60.10333,0 -64.59778,60.11749,0 -64.63721,60.17833,0 -64.76723,60.175,0 -64.8586,60.25583000000001,0 -64.56751,60.30471,0 -64.53325,60.3025,0 -64.48108000000001,60.36652000000001,0 -64.39993,60.38216,0 -64.6279,61.34092,0 -64.29521,62.44402000000001,0 -63.98004,63.25823000000001,0 -63.97128,63.76601000000001,0 -63.50727,64.82534,0 -62.6493,65.48196,0 -62.08899,65.51698,0 -61.97518,65.88468,0 -61.43238,66.19110000000001,0 -60.93336000000002,66.62885,0 -61.12597,66.90025,0 -61.94015000000002,67.30296000000001,0 -63.71739,67.86327,0 -64.37838000000001,68.03400000000001,0 -66.06807000000001,68.37982,0 -66.53207,68.44109,0 -66.59773,69.21590000000001,0 -66.70717000000001,69.43039,0 -67.20399999999999,69.97538,0 -67.50825,70.17017,0 -67.77307,70.28399,0 -68.07777,70.31999999999999,0 -68.07777,75.31999999999999,0 -68.07777,75.93836,0 -72.5564,77.34211000000001,0 -72.55276000000001,78.52284,0 -67.76724,79.10155,0 -63.60658000000001,76.32865,0 -63.58193000000001,76.31222,0 -62.34444,76.01053,0 -59.57289,75.70371,0 -57.85474000000001,74.69123,0 -56.16726000000001,72.58955,0 -55.98318,71.67934000000001,0 -55.18546,71.07594,0 -55.07296,70.48277,0 -55.02182000000001,69.63903000000001,0 -53.82526,67.68565,0 -54.00934,67.10271,0 -53.71276,66.05441999999999,0 -53.01731,65.35898,0 -52.50595000000001,64.94479,0 + + + + + +-56.12872,46.48062,0 -56.12872,47.16830000000001,0 -56.74985000000001,47.16830000000001,0 -56.74985000000001,46.48062,0 -56.12872,46.48062,0 + + + +-57.07413,53.19926000000002,0 -57.10572,51.03270000000001,0 -57.32588,50.86326,0 -57.94108,49.80638,0 -58.39064,49.19907,0 -58.77711000000001,48.81260000000002,0 -59.22667000000001,48.58387000000001,0 -59.28977,48.48923,0 -59.43964,47.90558999999999,0 -59.3292,47.5901,0 -59.2109,47.527,0 -58.29600000000001,47.62165000000001,0 -57.71236,47.58221000000001,0 -56.97096000000001,47.3456,0 -56.81322,47.47968,0 -56.30055,47.5901,0 -56.01662,47.24306000000001,0 -55.88254000000001,47.25095000000001,0 -55.7169,47.14054000000001,0 -55.89832,47.07743000000001,0 -56.10338,46.90392,0 -56.10338,46.84081,0 -55.3541,46.82505,0 -55.14116,46.9749,0 -54.99129,47.17208000000001,0 -54.36033000000001,47.37714,0 -54.03695,47.25095000000001,0 -54.21047,46.91969000000001,0 -54.21047,46.78561,0 -54.06062,46.77773,0 -53.91864,46.84081,0 -53.80033,46.94335,0 -53.6426,46.91969000000001,0 -53.68204000000001,46.69886,0 -53.61893000000001,46.61998,0 -53.53217000000001,46.59632000000001,0 -53.42175000000002,46.66731,0 -53.32711000000001,46.66731,0 -53.12204000000001,46.59632000000001,0 -52.90121,46.76984000000002,0 -52.80656000000001,47.16419000000001,0 -52.59361000000001,47.51122,0 -52.68037,47.76362,0 -52.81445000000001,47.83459,0 -52.88544,47.69263,0 -53.09838,47.69263,0 -53.01952000000001,47.90558999999999,0 -52.77501,48.08699,0 -52.72769000000001,48.16587000000001,0 -52.93275,48.20530000000001,0 -53.18515000000001,48.10277,0 -53.36654000000001,48.25262,0 -53.05107,48.41823999999999,0 -52.94065000000001,48.59177,0 -53.08260000000001,48.72585,0 -53.26402000000001,48.59966,0 -53.41388,48.63908000000001,0 -53.50852,48.59177,0 -53.57161,48.71006000000001,0 -53.56372,48.82837,0 -53.59527,48.93091,0 -53.43753,49.27005,0 -53.91076,49.6092,0 -54.09216,49.77482000000001,0 -54.81778000000001,49.70385,0 -55.07016,49.58554000000001,0 -55.33043000000001,49.53822,0 -55.72480000000001,49.68018,0 -55.78001,49.76695,0 -55.43297,49.94835000000001,0 -55.50396,50.03511,0 -55.44086,50.79227,0 -55.53551,50.93423,0 -55.39375,51.64408,0 -55.61563,52.12514000000001,0 -55.60509,52.46212,0 -55.76833000000001,52.86228000000001,0 -55.742,53.19926000000002,0 -57.07413,53.19926000000002,0 + + + 1 + + + + + +-52.52415,84.90001,0 -52.52951,82.29564000000001,0 -52.95565,82.35877000000001,0 -53.42914,82.29564000000001,0 -54.21828,82.37454,0 -56.03332,82.31142000000001,0 -58.87425,82.10625,0 -59.49456,82.01636000000002,0 -61.43191,82.50069000000002,0 -62.89619,82.57953999999999,0 -63.38053000000001,82.86113,0 -64.77722,82.92871,0 -67.50302000000001,82.99629,0 -67.50302000000001,84.90001,0 -67.50302000000001,89.90000000000001,0 -66.50375,89.90000000000001,0 -65.50446,89.90000000000001,0 -64.50519,89.90000000000001,0 -63.50591,89.90000000000001,0 -62.50663999999999,89.90000000000001,0 -61.50736,89.90000000000001,0 -60.50808,89.90000000000001,0 -59.50880000000001,89.90000000000001,0 -58.50953,89.90000000000001,0 -57.51024,89.90000000000001,0 -56.51097000000001,89.90000000000001,0 -55.5117,89.90000000000001,0 -54.51242000000001,89.90000000000001,0 -53.51314,89.90000000000001,0 -52.51387,89.90000000000001,0 -52.52415,84.90001,0 + + + 1 + + + + + GMT -03.30 + + +]]> + #khStylem0350 + + + + +-55.39375,51.64408,0 -55.53551,50.93423,0 -55.44086,50.79227,0 -55.50396,50.03511,0 -55.43297,49.94835000000001,0 -55.78001,49.76695,0 -55.72480000000001,49.68018,0 -55.33043000000001,49.53822,0 -55.07016,49.58554000000001,0 -54.81778000000001,49.70385,0 -54.09216,49.77482000000001,0 -53.91076,49.6092,0 -53.43753,49.27005,0 -53.59527,48.93091,0 -53.56372,48.82837,0 -53.57161,48.71006000000001,0 -53.50852,48.59177,0 -53.41388,48.63908000000001,0 -53.26402000000001,48.59966,0 -53.08260000000001,48.72585,0 -52.94065000000001,48.59177,0 -53.05107,48.41823999999999,0 -53.36654000000001,48.25262,0 -53.18515000000001,48.10277,0 -52.93275,48.20530000000001,0 -52.72769000000001,48.16587000000001,0 -52.77501,48.08699,0 -53.01952000000001,47.90558999999999,0 -53.09838,47.69263,0 -52.88544,47.69263,0 -52.81445000000001,47.83459,0 -52.68037,47.76362,0 -52.59361000000001,47.51122,0 -52.80656000000001,47.16419000000001,0 -52.90121,46.76984000000002,0 -53.12204000000001,46.59632000000001,0 -53.32711000000001,46.66731,0 -53.42175000000002,46.66731,0 -53.53217000000001,46.59632000000001,0 -53.61893000000001,46.61998,0 -53.68204000000001,46.69886,0 -53.6426,46.91969000000001,0 -53.80033,46.94335,0 -53.91864,46.84081,0 -54.06062,46.77773,0 -54.21047,46.78561,0 -54.21047,46.91969000000001,0 -54.03695,47.25095000000001,0 -54.36033000000001,47.37714,0 -54.99129,47.17208000000001,0 -55.14116,46.9749,0 -55.3541,46.82505,0 -56.10338,46.84081,0 -56.10338,46.90392,0 -55.89832,47.07743000000001,0 -55.71691000000001,47.14054000000001,0 -55.88254000000001,47.25095000000001,0 -56.01662,47.24306000000001,0 -56.30055,47.5901,0 -56.81322,47.47968,0 -56.97096000000001,47.3456,0 -57.71236,47.58221000000001,0 -58.29600000000001,47.62165000000001,0 -59.2109,47.527,0 -59.3292,47.5901,0 -59.43964,47.90558999999999,0 -59.28977,48.48923,0 -59.22667000000001,48.58387000000001,0 -58.77711000000001,48.81260000000002,0 -58.39064,49.19907,0 -57.94108,49.80638,0 -57.32588,50.86326,0 -57.10572,51.03270000000001,0 -57.07413,53.19926000000002,0 -55.742,53.19926000000002,0 -55.76833000000001,52.86228000000001,0 -55.60509,52.46212,0 -55.61563,52.12514000000001,0 -55.39375,51.64408,0 + + + 1 + + + + GMT -03:00 + + +]]> + #khStylem0300 + + + + + +-56.12872,46.48062,0 -56.74985000000001,46.48062,0 -56.74985000000001,47.16830000000001,0 -56.12872,47.16830000000001,0 -56.12872,46.48062,0 + + + 1 + + + + + +-37.51992,84.90001,0 -37.51992,83.74590000000001,0 -34.51386,83.78599,0 -29.51426,83.7223,0 -28.22116000000001,83.70583000000001,0 -23.25304,83.14206,0 -22.56975,83.06453000000002,0 -21.33607,82.72414000000001,0 -19.25519,82.23316,0 -18.10955,81.78892999999999,0 -17.59517,81.92921,0 -16.16897,82.02274,0 -13.71401,81.90584,0 -12.03061,81.69541,0 -12.03061,81.55513000000001,0 -14.53233,80.80695,0 -15.51431,80.61991,0 -17.31461,79.94186999999999,0 -17.47827,79.26384,0 -17.52503,77.76749,0 -18.06279,76.85564000000001,0 -18.50702,75.85029,0 -17.24447,75.26577,0 -17.26786,74.98521,0 -18.13293,74.58775,0 -19.34872,74.17858,0 -20.28394,73.40702,0 -21.42958000000001,72.84589,0 -21.78029,72.14449000000001,0 -21.17239,70.78841,0 -21.35944,70.48445,0 -22.03747,69.97009,0 -22.51389,69.82120999999999,0 -23.90792,69.38557000000002,0 -25.89525,68.70753000000001,0 -27.43837,68.38021000000001,0 -29.7998,67.98274000000001,0 -31.90405,67.86584000000001,0 -33.65758,66.67344,0 -35.45789,65.8785,0 -37.51991,65.16843,0 -37.51991,64.96842,0 -37.51991,59.96843000000001,0 -37.51991,54.96843,0 -37.51991,49.96843,0 -37.51991,44.96843000000001,0 -37.51991,39.96843,0 -37.51991,34.96843,0 -37.51991,29.96842,0 -37.51991,25.36843,0 -37.51991,20.36843,0 -37.51991,15.36843,0 -37.51991,15.36609,0 -37.51991,10.36609,0 -37.51991,5.366087,0 -37.51991,0.3660925,0 -37.51991,-4.633912,0 -37.28973,-4.726108,0 -37.17445,-4.918609,0 -36.88278,-4.949163,0 -36.79723,-5.046391,0 -36.68722,-5.098339,0 -36.54417,-5.134447,0 -36.52583,-5.108608,0 -36.58167,-5.088051,0 -36.28028,-5.11111,0 -36.25472,-5.10166,0 -36.28751,-5.091660000000001,0 -36.12889,-5.097502,0 -35.93472,-5.052223,0 -35.60445000000001,-5.110839,0 -35.4175,-5.214717000000001,0 -35.26195,-5.484726,0 -35.14557,-5.938893000000001,0 -35.105,-5.981112000000001,0 -35.09278,-6.178887000000001,0 -35.11528,-6.165838,0 -35.15501,-6.208894,0 -35.13584,-6.228612,0 -35.08778,-6.199164,0 -35.04139,-6.233887000000001,0 -35.01501,-6.374998000000001,0 -34.98028,-6.40639,0 -34.94334,-6.779997000000001,0 -34.91195,-6.879997000000001,0 -34.85834,-6.919444,0 -34.915,-7.127497,0 -34.85695,-7.075837,0 -34.82556,-6.987502,0 -34.83084,-7.108605,0 -34.7925,-7.178607,0 -34.8075,-7.515000000000001,0 -34.81779,-7.546942,0 -34.8932,-7.543089,0 -34.92334,-7.563889000000001,0 -34.84056,-7.554448,0 -34.80083,-7.63111,0 -34.83084,-7.683337,0 -34.87555,-7.622227000000001,0 -34.85167,-7.695559000000002,0 -34.90696,-7.735834,0 -34.85834,-7.73028,0 -34.89333,-7.804998000000001,0 -34.84472,-7.835554000000001,0 -34.81528,-7.935283000000001,0 -34.85612,-8.073612000000001,0 -34.92668,-8.038333,0 -34.88001,-8.113049999999999,0 -34.94,-8.270550999999999,0 -34.93584,-8.350552,0 -35.02194,-8.423056000000001,0 -34.98694,-8.418888000000001,0 -34.99195,-8.448895,0 -34.97001,-8.430552000000001,0 -35.16612,-8.960283,0 -35.32751,-9.228889000000001,0 -35.45667,-9.346393000000001,0 -35.5825,-9.535833,0 -35.65751,-9.586387,0 -35.69028,-9.668889999999999,0 -35.77306,-9.695277000000001,0 -35.73695,-9.651394000000002,0 -35.79362,-9.589725,0 -35.79222,-9.683056000000001,0 -35.86,-9.739160999999999,0 -35.90528,-9.621667,0 -35.95196,-9.602784,0 -35.86917,-9.764163999999999,0 -35.79557,-9.728334,0 -36.04444000000001,-10.07583,0 -36.28139,-10.28695,0 -36.28445,-10.3525,0 -36.40483,-10.49879,0 -36.56751,-10.54445,0 -36.85861,-10.73916,0 -37.02166,-10.93584,0 -37.00862,-10.81056,0 -37.06889000000001,-10.79445,0 -37.07779,-10.73389,0 -37.15333,-10.74861,0 -37.09417000000001,-10.80111,0 -37.14168,-10.82528,0 -37.04028000000001,-10.8375,0 -37.05333,-10.94917,0 -37.15667,-11.10444,0 -37.20723,-11.03723,0 -37.27916,-11.02528,0 -37.26028,-11.07222,0 -37.20195,-11.0925,0 -37.22112,-11.10778,0 -37.16446,-11.11389,0 -37.15112,-11.19194,0 -37.26501,-11.28667,0 -37.33000000000001,-11.42723,0 -37.39834,-11.40223,0 -37.36362,-11.31556,0 -37.27584,-11.25973,0 -37.29862,-11.20195,0 -37.30555,-11.245,0 -37.34779,-11.18778,0 -37.31362,-11.26305,0 -37.34861,-11.25028,0 -37.33139,-11.28667,0 -37.39528,-11.33389,0 -37.41223,-11.40278,0 -37.46917,-11.36667,0 -37.39305,-11.45,0 -37.48791,-11.52023,0 -37.39806,-11.49972,0 -37.36223,-11.45472,0 -37.51972,-11.77389,0 -37.51972,-12.17389,0 -37.51974,-17.17389,0 -37.51975,-22.17389,0 -37.51977,-27.17389,0 -37.51978,-32.17389,0 -37.51979,-37.17389,0 -37.51979,-42.17389,0 -37.5198,-47.08813000000001,0 -37.51982,-52.08813,0 -40.01502,-52.08813,0 -45.01502000000001,-52.08813,0 -45.01502000000001,-54.93388,0 -42.51982,-54.93388,0 -37.51983,-54.93388,0 -37.51984,-59.90001,0 -37.51985000000001,-64.90000000000001,0 -37.51987,-69.90000000000001,0 -37.51987,-74.90000000000001,0 -37.51988,-79.90000000000001,0 -37.51989,-84.89999,0 -37.51991,-89.90000000000001,0 -38.51878,-89.90000000000001,0 -39.51765,-89.90000000000001,0 -40.51651,-89.90000000000001,0 -41.51539,-89.90000000000001,0 -42.51426,-89.90000000000001,0 -43.51314000000001,-89.90000000000001,0 -44.51201,-89.90000000000001,0 -45.51088,-89.90000000000001,0 -46.50975,-89.90000000000001,0 -47.50861,-89.90000000000001,0 -48.50749,-89.90000000000001,0 -49.50636,-89.90000000000001,0 -50.50524000000001,-89.90000000000001,0 -51.5041,-89.90000000000001,0 -52.50298000000001,-89.90000000000001,0 -52.50305,-87.53888000000001,0 -52.50323000000001,-82.53889,0 -52.50335,-79.03888000000001,0 -52.50352,-74.03888000000001,0 -52.50368,-69.03889,0 -52.50372,-67.88475,0 -52.50385,-62.88475,0 -52.50398000000001,-57.88475,0 -52.50412000000001,-52.88476000000001,0 -52.50425,-47.88475,0 -52.50438,-42.88476,0 -52.50452,-37.88475,0 -52.50465000000001,-32.88476,0 -52.74139000000001,-33.25695,0 -53.3743,-33.74068,0 -53.48251000000001,-33.85445,0 -53.53723000000001,-34.06612,0 -53.75029,-34.25751,0 -53.77139,-34.39083,0 -53.98890000000001,-34.50389,0 -54.13,-34.62389000000001,0 -54.14500000000001,-34.67139,0 -54.25695,-34.68945000000001,0 -54.2425,-34.58139,0 -54.32557,-34.56278,0 -54.28167,-34.59306,0 -54.34583,-34.64362,0 -54.30083000000001,-34.65,0 -54.27916,-34.69389,0 -54.53111,-34.80609000000001,0 -54.95129000000001,-34.9778,0 -54.95612000000001,-34.94028,0 -55.05556000000001,-34.8914,0 -55.25666,-34.90723,0 -55.36501,-34.81056,0 -55.68557000000001,-34.77444,0 -56.16861,-34.93194,0 -56.22084,-34.88945,0 -56.32028,-34.91057,0 -56.42556,-34.84306,0 -56.36723,-34.79444,0 -56.5639,-34.77251,0 -56.88779,-34.66612,0 -57.11778,-34.46222,0 -57.45778,-34.44222,0 -57.51945000000001,-34.46445,0 -57.58195000000001,-34.43917,0 -57.84028,-34.49473,0 -57.90722,-34.37,0 -58.08334,-34.18695,0 -58.18541,-34.16549,0 -58.40885999999999,-34.22926,0 -58.47195,-34.28111,0 -58.56667,-34.29056,0 -58.48417000000001,-34.34166,0 -58.52528,-34.43972,0 -58.46972000000001,-34.53972,0 -58.36945000000001,-34.58389,0 -58.34633000000001,-34.63362,0 -58.34472,-34.63612,0 -58.19723,-34.73861,0 -57.81361,-34.86584,0 -57.49889,-35.04556,0 -57.33555,-35.15556,0 -57.18833000000001,-35.32055,0 -57.12473,-35.41695,0 -57.12972000000001,-35.47029,0 -57.37612,-35.78139,0 -57.37666999999999,-35.96278,0 -57.23667,-36.18418,0 -57.05334,-36.31417,0 -56.93389,-36.34723,0 -56.94195,-36.38334,0 -56.84778,-36.34222,0 -56.76778000000001,-36.3475,0 -56.77361,-36.30445,0 -56.74167,-36.31834,0 -56.67168000000001,-36.57584,0 -56.66306000000001,-36.90056,0 -57.09973000000002,-37.47445,0 -57.48056,-37.82584,0 -57.54112,-37.98195000000001,0 -57.53306,-38.08611,0 -57.63473000000001,-38.18,0 -57.84584,-38.29917,0 -58.31223000000001,-38.48972,0 -58.72279,-38.58055000000001,0 -59.03807,-38.69251,0 -59.61,-38.77973,0 -59.78973,-38.83694,0 -60.86000000000001,-38.97639,0 -61.16223,-38.99889,0 -61.38361,-38.97973000000001,0 -61.56255,-39.01225,0 -61.85882,-39.24178,0 -62.05002,-39.48876,0 -62.11639,-39.83945,0 -62.18917,-39.86,0 -62.3075,-39.81861,0 -62.28612,-39.85473,0 -62.32000000000001,-39.86834,0 -62.36418000000001,-40.05528,0 -62.35278000000002,-40.18167,0 -62.48945,-40.29945,0 -62.42084,-40.45945,0 -62.33139000000001,-40.49834,0 -62.29111,-40.56583,0 -62.26000000000001,-40.56001,0 -62.26139000000001,-40.63334,0 -62.34807,-40.60723,0 -62.32666,-40.67834000000001,0 -62.18389,-40.62972000000001,0 -62.22972,-40.66361,0 -62.32110999999999,-40.86723,0 -62.72333,-41.04611,0 -62.80139,-41.04333,0 -63.03334000000002,-41.14834,0 -63.14195000000001,-41.16056,0 -63.8075,-41.15917,0 -63.96001,-41.06445,0 -64.05833,-41.04501,0 -64.05334000000001,-40.99918,0 -64.14223,-41.02195,0 -64.41251,-40.90945,0 -64.69112,-40.83889,0 -64.88528,-40.83806,0 -64.91166,-40.82028,0 -64.89612,-40.79862,0 -64.74918,-40.80278,0 -64.75194999999999,-40.77695,0 -64.7975,-40.77223,0 -64.77528,-40.73278,0 -64.98141,-40.72195,0 -64.9264,-40.72862,0 -64.93807,-40.75639,0 -64.90611,-40.76862,0 -65.0125,-40.77195,0 -65.12584,-40.84056,0 -65.17973000000001,-40.99667,0 -65.07111999999999,-41.43334,0 -64.99111000000001,-41.51083000000001,0 -65.02916999999999,-41.67556,0 -64.99084000000001,-41.77862,0 -65.07445,-41.93167,0 -65.06223,-42.01,0 -64.99418,-42.11222,0 -64.87139999999999,-42.19195,0 -64.46251,-42.26362,0 -64.60695,-42.41889,0 -64.45193999999999,-42.44584,0 -64.30417,-42.41528,0 -64.1189,-42.43444000000001,0 -64.04528999999999,-42.37251,0 -64.06305999999999,-42.27862,0 -64.33446000000001,-42.23667,0 -64.19917,-42.22417,0 -63.87195000000001,-42.10250000000001,0 -63.74694,-42.09056000000001,0 -63.59083,-42.31695,0 -63.57805,-42.60612,0 -63.63334,-42.71278,0 -63.62583,-42.76194,0 -63.69306000000001,-42.82168,0 -64.08694,-42.89028,0 -64.24918,-42.77612,0 -64.19611999999999,-42.63889,0 -64.39806,-42.51584,0 -64.62194,-42.52,0 -64.82084999999999,-42.62862,0 -64.96056000000002,-42.66639,0 -65.01806999999999,-42.73944000000001,0 -64.99278,-42.79361,0 -64.80862000000001,-42.84028000000001,0 -64.59390000000001,-42.94112000000001,0 -64.50389,-42.93806000000001,0 -64.41028,-42.97805,0 -64.31556999999999,-42.94944,0 -64.29501000000001,-42.99195,0 -64.49168,-43.08445,0 -64.80029999999999,-43.16112,0 -65.02806,-43.30445,0 -65.03722000000001,-43.39418,0 -65.33029000000001,-43.66779,0 -65.32001,-43.81945,0 -65.25834999999999,-43.96973,0 -65.21028,-43.95528,0 -65.22445999999999,-44.10751000000001,0 -65.29695,-44.13223,0 -65.31249,-44.18696,0 -65.22806,-44.33667000000001,0 -65.34222,-44.43862,0 -65.27667,-44.48028,0 -65.35945,-44.48306,0 -65.38751000000001,-44.52166,0 -65.3614,-44.54418,0 -65.44056999999999,-44.53807,0 -65.59945999999999,-44.61805,0 -65.71917999999999,-44.77612,0 -65.71084999999999,-44.83362,0 -65.53055999999999,-44.895,0 -65.58474,-44.92445,0 -65.60474000000001,-45.0164,0 -65.68556,-45.04306,0 -65.85139,-44.98584,0 -65.87529000000001,-45.01944000000001,0 -65.94917,-45.02223,0 -66.01528999999999,-44.97389,0 -66.19473000000001,-44.95917,0 -66.28500000000001,-45.03167000000001,0 -66.52196000000001,-45.08667000000001,0 -66.53473,-45.11584,0 -66.45975,-45.14362,0 -66.58863,-45.13862,0 -66.51918000000001,-45.17889,0 -66.53528,-45.20444000000001,0 -66.84668000000001,-45.21029,0 -66.94946,-45.25557,0 -67.18362000000001,-45.52861,0 -67.31611000000001,-45.61501,0 -67.34166999999999,-45.77890000000001,0 -67.42222,-45.82195,0 -67.58436000000002,-46.00031,0 -67.58667,-46.00389000000001,0 -67.62029,-46.17139,0 -67.53667,-46.4175,0 -67.33805,-46.62528,0 -67.12445,-46.72639,0 -67.05473000000001,-46.81001,0 -66.71666999999999,-47.04000000000001,0 -66.20916,-47.09361000000001,0 -65.99335000000001,-47.06667000000001,0 -65.90001,-47.09862,0 -65.77224,-47.19834,0 -65.73222,-47.34418,0 -65.75696000000001,-47.54194,0 -65.87584,-47.76222,0 -66.02251,-47.76084,0 -66.12083,-47.81973,0 -66.32168,-47.87306,0 -66.38863000000001,-47.8625,0 -66.32418,-47.88278,0 -65.97333999999999,-47.78389000000001,0 -65.91195999999999,-47.80418,0 -65.87000999999999,-47.90222000000001,0 -65.78722999999999,-47.93557000000001,0 -65.79584,-47.97028000000001,0 -65.97139,-47.96111000000001,0 -65.89778,-48.09973000000001,0 -66.07944999999999,-48.10444,0 -66.1414,-48.18472,0 -66.33556,-48.28362000000001,0 -66.32751,-48.34555,0 -66.44362,-48.34723000000001,0 -66.46805999999999,-48.39917000000001,0 -66.66750999999999,-48.44167,0 -66.82668,-48.57111,0 -67.08278,-48.63889000000001,0 -67.23972999999999,-48.82278000000001,0 -67.39917,-48.89056000000001,0 -67.50834999999999,-48.98417,0 -67.49554000000002,-53.95288,0 -66.92418000000001,-54.21918,0 -66.70361,-54.28917,0 -66.54667000000001,-54.41389,0 -66.27166000000001,-54.52806000000001,0 -65.82751,-54.65584,0 -65.67361,-54.67306,0 -65.22362,-54.63361,0 -64.55267000000001,-54.715,0 -64.4539,-54.75833,0 -64.41278,-54.73667,0 -64.38112,-54.78861,0 -64.35806,-54.70639,0 -64.17834000000001,-54.75083999999999,0 -64.16833,-54.71417000000002,0 -64.06417999999999,-54.75000000000001,0 -63.92001,-54.71417000000002,0 -63.81362000000001,-54.7314,0 -63.96861000000001,-54.81807,0 -63.97278,-54.75973000000001,0 -64.25389,-54.84223,0 -64.25306999999999,-54.77972,0 -64.30945,-54.77778,0 -64.41862,-54.83862000000001,0 -64.49612000000001,-54.82696,0 -64.60972,-54.9,0 -64.67834000000001,-54.90723,0 -65.37667999999999,-54.93056,0 -65.47139,-54.88361,0 -65.49001,-54.93472000000001,0 -65.59889,-54.93056,0 -65.6575,-54.97223,0 -65.70585,-54.96611,0 -65.73779,-54.90222,0 -65.95529000000001,-54.89612000000001,0 -66.01334,-54.95612000000001,0 -66.37195,-54.98500000000001,0 -66.45808000000001,-55.05168,0 -66.64944,-55.02584,0 -66.79639,-54.94555,0 -67.01134,-54.90862,0 -67.84778,-54.87611,0 -68.28834999999999,-54.79362,0 -68.32334,-54.84361,0 -68.55723999999999,-54.88001,0 -68.6431,-54.88861,0 -68.63612000000001,-54.80477,0 -68.63583,-54.78834,0 -68.61758000000002,-52.64151,0 -68.44176,-52.37778000000001,0 -68.4375,-52.32833,0 -68.82861,-52.27973,0 -69.23362,-52.14334000000001,0 -69.46139000000001,-52.14362000000001,0 -69.99834,-51.9964,0 -71.9314,-51.98889000000001,0 -71.96251,-51.96029000000001,0 -71.93946,-51.89889,0 -71.96639999999999,-51.84861,0 -72.13555,-51.74001,0 -72.28558,-51.69917000000001,0 -72.33085,-51.58723000000001,0 -72.43944999999999,-51.55972000000001,0 -72.33945,-51.47583,0 -72.30917,-51.30222,0 -72.24529000000001,-51.24443999999999,0 -72.37167,-51.16473000000001,0 -72.39778,-51.11418000000001,0 -72.34113000000001,-51.03666,0 -72.26694999999999,-51.01723,0 -72.24223000000001,-50.85111,0 -72.34166999999999,-50.7439,0 -72.29416999999999,-50.64972000000001,0 -72.50112,-50.60334,0 -72.62973,-50.67305,0 -72.75834999999999,-50.6189,0 -72.90611,-50.6675,0 -73.01806000000001,-50.74945,0 -73.14445000000001,-50.76750000000001,0 -73.18085000000001,-50.72918,0 -73.17834000000001,-50.64777999999999,0 -73.24918,-50.57639,0 -73.28001999999999,-50.32278,0 -73.34639,-50.23806,0 -73.53223,-50.14056,0 -73.46722,-50.00666,0 -73.56445000000001,-49.92472999999999,0 -73.44446000000001,-49.7825,0 -73.53333000000001,-49.68973,0 -73.51000999999999,-49.61334,0 -73.58168000000001,-49.53196,0 -73.52972,-49.49639000000001,0 -73.53111,-49.43111,0 -73.45252000000001,-49.38528000000001,0 -73.46474000000001,-49.31139000000001,0 -73.13528,-49.30556,0 -73.08278000000001,-49.26917000000001,0 -73.16768999999999,-49.25264000000001,0 -73.1664,-49.20001000000001,0 -72.98805,-48.98167,0 -72.75528,-48.92806,0 -72.56419,-48.80445,0 -72.58974000000001,-48.4664,0 -72.4075,-48.39694,0 -72.36668,-48.34612000000001,0 -72.28973000000001,-48.3475,0 -72.32278,-48.07556,0 -72.51501,-47.96111000000001,0 -72.53528000000001,-47.90917000000001,0 -72.33168000000001,-47.60168,0 -72.30556,-47.50723,0 -72.35945,-47.48111999999999,0 -72.34723,-47.445,0 -72.25639,-47.41112,0 -72.18056,-47.42028000000001,0 -72.08362,-47.35472000000001,0 -72.01501,-47.27444000000001,0 -72.03195,-47.20333,0 -71.91752,-47.23446,0 -71.86528,-47.21694000000001,0 -71.86057,-47.14194,0 -71.99667,-47.06111,0 -71.90472,-47.00084,0 -71.96056,-46.95,0 -71.92471999999999,-46.85056,0 -71.94029000000001,-46.81556000000001,0 -71.80891,-46.78417,0 -71.68195,-46.69889,0 -71.66916999999999,-46.54750000000001,0 -71.74890000000001,-46.38612000000001,0 -71.74751000000001,-46.24278,0 -71.90611,-46.14834000000001,0 -71.76028,-46.11417,0 -71.645,-45.99945,0 -71.60167,-45.97473000000002,0 -71.63001000000001,-45.90084000000001,0 -71.75501,-45.84833,0 -71.73833999999999,-45.79028,0 -71.79250999999999,-45.73251,0 -71.78055999999999,-45.64889000000001,0 -71.73278999999999,-45.59890000000001,0 -71.75666,-45.56278,0 -71.50249,-45.51556,0 -71.46751999999999,-45.4775,0 -71.50639,-45.41139,0 -71.37334,-45.36944,0 -71.29779000000001,-45.29334000000001,0 -71.33835000000001,-45.22055,0 -71.45361,-45.15918,0 -71.57362000000001,-44.97945,0 -71.67473,-44.98028,0 -71.75335,-44.93194,0 -71.8839,-44.94862,0 -72.06279000000001,-44.90556,0 -72.08085,-44.77473000000001,0 -72.0425,-44.75417,0 -71.84945999999999,-44.79306,0 -71.77,-44.75389,0 -71.65363000000001,-44.78279,0 -71.50084,-44.74305,0 -71.28223,-44.80028000000001,0 -71.22362,-44.745,0 -71.23334,-44.66278,0 -71.19723999999999,-44.59694,0 -71.13473000000001,-44.58389,0 -71.10806,-44.53972,0 -71.20361,-44.42694,0 -71.83835000000001,-44.39334,0 -71.85139,-44.36,0 -71.79389999999999,-44.32557,0 -71.82250999999999,-44.26529,0 -71.79389999999999,-44.21556,0 -71.85474000000001,-44.11084000000001,0 -71.75806,-44.07168,0 -71.65224000000001,-43.95166,0 -71.64724,-43.91861,0 -71.69834,-43.86668,0 -71.75557000000001,-43.82557,0 -71.7375,-43.77194,0 -71.7914,-43.78223,0 -71.81140000000001,-43.74917,0 -71.69862000000001,-43.68723,0 -71.70278999999999,-43.59584,0 -71.78001999999999,-43.54834,0 -71.86973999999999,-43.54028,0 -71.85834,-43.46222,0 -71.94665999999999,-43.44723,0 -71.89418000000001,-43.32306,0 -71.74335000000001,-43.30223,0 -71.73584,-43.17694,0 -71.83638999999999,-43.13195000000001,0 -72.05277,-43.10472,0 -72.13946,-42.99139,0 -72.10196999999999,-42.85472,0 -72.13918,-42.58751000000001,0 -72.10945,-42.525,0 -72.02585000000001,-42.4775,0 -72.07167,-42.42973,0 -72.04779000000001,-42.35667000000001,0 -72.13139,-42.28196,0 -72.01221,-42.13111000000001,0 -71.9639,-42.12750000000001,0 -71.91389,-42.17806000000001,0 -71.72889000000001,-42.10139,0 -71.75977,-41.99973,0 -71.78528,-41.86611,0 -71.91833,-41.64473,0 -71.84002,-41.57528,0 -71.87779000000001,-41.52251,0 -71.86472999999999,-41.44083,0 -71.89944,-41.35861,0 -71.83694,-40.95944,0 -71.95056,-40.73278,0 -71.84390000000001,-40.61639,0 -71.85583,-40.555,0 -71.7914,-40.41528,0 -71.71973,-40.42778,0 -71.66389000000001,-40.33611,0 -71.66972,-40.29473,0 -71.70251,-40.27639,0 -71.72861,-40.30112,0 -71.81863,-40.20196,0 -71.78889,-40.07861,0 -71.66166,-40.09389,0 -71.67307,-40.01611000000001,0 -71.60639999999999,-39.91251,0 -71.66945,-39.85723,0 -71.70444999999999,-39.73278,0 -71.68223999999999,-39.56722,0 -71.61528000000001,-39.61973,0 -71.50945,-39.61945,0 -71.48806,-39.59305,0 -71.48584,-39.5575,0 -71.54085000000002,-39.53139,0 -71.47335,-39.47862,0 -71.44889000000001,-39.4325,0 -71.47057,-39.38807,0 -71.40195,-39.32723,0 -71.38751000000001,-39.23446,0 -71.42279000000001,-39.03694,0 -71.4014,-38.92028,0 -71.22612,-38.80306,0 -70.92583999999999,-38.7425,0 -70.86,-38.68806,0 -70.87667,-38.63889,0 -70.82418,-38.56806,0 -70.97083000000001,-38.41807,0 -71.01306,-38.23056,0 -70.99751999999999,-38.07112,0 -71.18028000000001,-37.69806,0 -71.17167000000001,-37.61806000000001,0 -71.11557000000001,-37.57944,0 -71.10806,-37.45862,0 -71.19667,-37.29668,0 -71.13918,-37.22416,0 -71.13528,-37.14417,0 -71.07919,-37.10418,0 -71.125,-37.07557,0 -71.14612,-36.99667,0 -71.20113000000001,-36.97055,0 -71.12223,-36.94695,0 -71.15833000000001,-36.925,0 -71.14028999999999,-36.8825,0 -71.18696,-36.84889,0 -71.13834,-36.69084,0 -71.04584,-36.68584,0 -71.06056000000001,-36.59306,0 -71.02918,-36.47917,0 -70.93611000000001,-36.48194,0 -70.88751000000001,-36.40055,0 -70.80168999999999,-36.43473,0 -70.70808,-36.41778,0 -70.70473,-36.27057,0 -70.58974000000001,-36.19194,0 -70.57999,-36.14861,0 -70.47387999999999,-36.16529,0 -70.42431999999999,-36.13604,0 -70.36917,-36.04667,0 -70.40945000000001,-35.96362,0 -70.37361,-35.91389,0 -70.41058,-35.88694,0 -70.33778,-35.80834,0 -70.42028000000001,-35.64362,0 -70.39667000000002,-35.50362,0 -70.46223000000001,-35.38305,0 -70.42001000000001,-35.34723,0 -70.55029000000002,-35.29667,0 -70.56751,-35.24778,0 -70.53639,-35.20639,0 -70.36806,-35.15889,0 -70.36194999999999,-35.00445,0 -70.26363000000002,-34.79778,0 -70.31362,-34.74889,0 -70.25306999999999,-34.71806000000001,0 -70.22139,-34.59,0 -70.0475,-34.40917,0 -70.04944999999999,-34.28751,0 -69.89335,-34.28612,0 -69.88918,-34.25945,0 -69.81249,-34.23555,0 -69.8689,-34.13361,0 -69.84889,-33.97195,0 -69.90443999999999,-33.95166,0 -69.88306,-33.87972,0 -69.90611,-33.78778000000001,0 -69.84668000000001,-33.71751,0 -69.88528,-33.66278,0 -69.8689,-33.55194,0 -69.82919,-33.53167,0 -69.77444,-33.38111,0 -69.80779,-33.27389,0 -69.91916999999999,-33.23806,0 -69.99583,-33.30194,0 -70.09889,-33.1725,0 -70.10139,-33.03001,0 -70.03528,-32.99834,0 -69.9875,-32.87889,0 -70.14862000000001,-32.75249,0 -70.17111,-32.60778,0 -70.12946,-32.56528,0 -70.16251,-32.46305,0 -70.23889,-32.4175,0 -70.24432000000002,-32.30984,0 -70.31668999999999,-32.28333,0 -70.32529,-32.13751,0 -70.38001,-32.05167,0 -70.36389,-32.02916,0 -70.26251000000001,-32.04362,0 -70.23445,-31.9425,0 -70.29056,-31.88668,0 -70.41,-31.88084,0 -70.45889,-31.8325,0 -70.47667,-31.72639,0 -70.58805,-31.56167,0 -70.54224000000001,-31.37333,0 -70.5611,-31.31416,0 -70.52943999999999,-31.17444,0 -70.47139,-31.09805,0 -70.44556,-31.09306,0 -70.41335000000001,-31.15389,0 -70.32778999999999,-31.03972,0 -70.25502000000002,-31.03416,0 -70.32778999999999,-30.95834,0 -70.32668,-30.88805,0 -70.20695000000001,-30.505,0 -70.1339,-30.43973,0 -70.16334999999999,-30.36472,0 -70.02972,-30.39778,0 -69.94416,-30.37639,0 -69.89751,-30.3225,0 -69.87000000000001,-30.21084,0 -69.83168000000001,-30.19055,0 -69.85861,-30.10695000000001,0 -69.97083000000002,-30.08444,0 -69.91880000000001,-29.97406,0 -69.90555999999999,-29.79112,0 -69.91501,-29.71778,0 -69.96834,-29.66112,0 -69.96056,-29.55029,0 -70.03140000000001,-29.30639,0 -69.90807,-29.14139,0 -69.79389999999999,-29.09862,0 -69.79528999999999,-28.95112,0 -69.72307000000001,-28.80334,0 -69.74500999999999,-28.66055,0 -69.6664,-28.57279,0 -69.65537999999999,-28.40094,0 -69.53001999999999,-28.31223,0 -69.47612,-28.19139,0 -69.40640999999999,-28.20889,0 -69.30029999999999,-27.99944,0 -69.18584,-27.96584,0 -69.10806,-27.72194,0 -69.06556999999999,-27.69889,0 -69.08416000000001,-27.64583,0 -69.01251000000001,-27.53168000000001,0 -69.00696000000001,-27.45889,0 -68.90472,-27.36667,0 -68.86585,-27.28806,0 -68.87723,-27.23083,0 -68.81084000000001,-27.12056,0 -68.69667,-27.10750000000001,0 -68.58195000000002,-27.16973,0 -68.50306999999999,-27.07472,0 -68.31556999999999,-27.04194,0 -68.29584,-26.89168,0 -68.58362,-26.50528,0 -68.56362,-26.30056,0 -68.39776999999999,-26.15611000000001,0 -68.5975,-25.44333,0 -68.50223,-25.17723,0 -68.46502000000001,-25.14056,0 -68.42028999999999,-25.15279,0 -68.35197000000001,-25.11723,0 -68.42419,-25.03361,0 -68.455,-24.90500000000001,0 -68.54528999999999,-24.87361,0 -68.56916,-24.78612,0 -68.48779,-24.6025,0 -68.44363,-24.62639,0 -68.38918,-24.50166,0 -68.30779,-24.4925,0 -68.25223,-24.39639,0 -67.33584999999999,-24.02167,0 -67.15085000000001,-23.39194000000001,0 -67.00084,-23.00278,0 -67.18362000000001,-22.82166,0 -67.12306,-22.71805000000001,0 -67.01221,-22.64279,0 -67.02251,-22.5239,0 -66.96335000000001,-22.5225,0 -66.92639,-22.47805,0 -66.77473000000001,-22.42695000000001,0 -66.73669,-22.2275,0 -66.6889,-22.19611,0 -66.62806999999999,-22.21305,0 -66.29333,-22.0825,0 -66.22301,-21.78051,0 -66.07751,-21.83195,0 -66.0414,-21.91667,0 -65.92612,-21.93333,0 -65.74806,-22.11166,0 -65.57861,-22.08472,0 -64.98833999999999,-22.09083,0 -64.59473000000001,-22.21167,0 -64.53889,-22.27639,0 -64.56612,-22.36139,0 -64.4314,-22.54778,0 -64.45252000000001,-22.64834,0 -64.36,-22.74084,0 -64.32472,-22.87361,0 -64.25333999999999,-22.56778,0 -64.12667,-22.41028,0 -63.94111,-22.00083,0 -63.73306,-22.00278,0 -63.70057000000001,-22.03861,0 -63.68584000000001,-22.00306,0 -62.81195,-21.99695,0 -62.78946000000001,-22.12278,0 -62.64377,-22.2389,0 -62.62417,-22.30694,0 -62.46028,-22.37971,0 -62.39918,-22.45278,0 -62.29056,-22.48055,0 -62.24694,-22.52889,0 -62.25917000000001,-22.60445,0 -62.19,-22.63,0 -62.18861,-22.71029,0 -62.02944999999999,-22.89194,0 -61.98639,-23.01028000000001,0 -61.78167000000001,-23.1475,0 -61.73973000000001,-23.24362,0 -61.51722,-23.345,0 -61.49694,-23.41361,0 -61.29472,-23.48917,0 -61.11556000000001,-23.60362,0 -61.11639000000001,-23.66666,0 -61.02473,-23.78612,0 -60.85499999999999,-23.8725,0 -60.61389000000001,-23.89444,0 -60.57334000000001,-23.95111,0 -60.28639,-24.0375,0 -60.03806,-24.00972000000001,0 -59.47278000000001,-24.35306,0 -59.33889000000001,-24.48889,0 -59.06778,-24.60695000000001,0 -58.80334000000001,-24.78417,0 -58.45056,-24.85695000000001,0 -58.33833000000001,-24.99778,0 -58.22139,-24.93916,0 -57.98083000000001,-25.07805000000001,0 -57.87112000000001,-25.08778,0 -57.7561,-25.17694,0 -57.64029000000001,-25.37917,0 -57.55333000000001,-25.44834,0 -57.57750999999999,-25.57889000000001,0 -57.75167,-25.67056,0 -57.77167,-25.7075,0 -57.74196,-25.72806,0 -57.81098,-25.77314,0 -57.80361000000001,-25.83473,0 -57.87445,-25.87861,0 -57.84973,-25.91833,0 -57.90361,-25.95833,0 -57.85583000000001,-26.00195,0 -58.07805,-26.12472,0 -58.11000000000001,-26.19806000000001,0 -58.1525,-26.18861,0 -58.10389000000001,-26.23555,0 -58.17250000000001,-26.27305,0 -58.16251,-26.31973,0 -58.21139,-26.42640000000001,0 -58.18306000000001,-26.4614,0 -58.21917,-26.535,0 -58.16889000000001,-26.60279,0 -58.18167,-26.65611,0 -58.23973,-26.64973,0 -58.24639,-26.765,0 -58.28584,-26.77195,0 -58.28389,-26.81139,0 -58.34584,-26.81722,0 -58.32167,-26.88223,0 -58.47834,-26.93916000000001,0 -58.51028,-27.05861,0 -58.54639000000001,-27.04611,0 -58.56417,-27.1175,0 -58.65278,-27.15834,0 -58.65573,-27.19161,0 -58.59888999999999,-27.245,0 -58.60461000000001,-27.31692,0 -58.22,-27.26555,0 -57.79139,-27.29223,0 -57.6264,-27.36916,0 -57.12944000000001,-27.48973000000001,0 -57.07167000000001,-27.49195,0 -56.90862000000001,-27.41778,0 -56.73695,-27.50694,0 -56.67305,-27.46140000000001,0 -56.55,-27.4525,0 -56.37806,-27.58834,0 -56.27084,-27.46140000000001,0 -56.26805000000001,-27.3875,0 -56.13778,-27.30889,0 -55.89833000000001,-27.32918,0 -55.84251,-27.40778,0 -55.73612000000001,-27.43944,0 -55.67557,-27.36862,0 -55.59639000000001,-27.33806,0 -55.56751000000001,-27.24944,0 -55.60196,-27.16834,0 -55.55667,-27.16166,0 -55.53973,-27.105,0 -55.455,-27.09528,0 -55.41389,-26.98278000000001,0 -55.27111,-26.9375,0 -55.12889,-26.94917,0 -55.12889,-26.86805,0 -55.05112,-26.80028,0 -54.95722,-26.77834,0 -54.92389,-26.68056,0 -54.80612,-26.66418,0 -54.77862,-26.61083,0 -54.79362,-26.52305,0 -54.69278000000001,-26.42834,0 -54.6675,-26.23888,0 -54.63333999999999,-26.20028,0 -54.66166000000001,-26.15834,0 -54.64083,-26.07139,0 -54.665,-25.9825,0 -54.60139,-25.95278,0 -54.61723,-25.89556,0 -54.58584000000001,-25.81944,0 -54.64556000000001,-25.66250000000001,0 -54.58501,-25.64139000000001,0 -54.59892,-25.57323,0 -54.61696,-25.43806,0 -54.42305,-25.14306,0 -54.45639,-25.08723,0 -54.45250999999999,-25.01111,0 -54.33055,-24.67945,0 -54.33139000000001,-24.49278,0 -54.24889,-24.35362,0 -54.33778000000001,-24.14389,0 -54.2439,-24.05361,0 -54.08028000000001,-23.94806,0 -53.96889000000001,-23.44695000000002,0 -53.72139000000001,-23.30028,0 -53.57218000000002,-22.88526,0 -53.15685,-22.70582,0 -52.97528000000001,-22.48223,0 -52.49723,-22.21611,0 -52.36556,-22.10028000000001,0 -52.29028,-21.96084,0 -52.17445,-21.85778,0 -52.15028,-21.78334,0 -52.05334,-21.71889,0 -52.03723,-21.64639,0 -52.09195,-21.55584,0 -52.04973,-21.50278000000001,0 -51.9625,-21.49778,0 -51.87056000000001,-21.35029,0 -51.84973,-21.26973,0 -51.87111000000001,-21.14917,0 -51.79223,-21.09139,0 -51.63001,-20.88028,0 -51.58084000000001,-20.60028,0 -51.46612,-20.53917,0 -51.26055000000001,-20.31528,0 -51.04611,-20.25028,0 -51.00643,-20.07929,0 -50.98584000000001,-19.9075,0 -51.02361000000001,-19.7225,0 -50.98112,-19.57166,0 -50.9325,-19.55667,0 -50.96278000000001,-19.475,0 -50.92341,-19.45669,0 -51.11418000000001,-19.29083,0 -51.3064,-19.25889,0 -51.42306,-19.15806,0 -51.63223,-19.13334,0 -51.84166,-19.05361,0 -51.89694,-18.995,0 -52.06557,-18.94416,0 -52.18861,-18.83695,0 -52.34917,-18.81667,0 -52.47278,-18.70834,0 -52.63667,-18.72305,0 -52.89001,-18.67805,0 -52.8675,-18.57695,0 -52.75805,-18.4125,0 -52.895,-18.34694,0 -52.98834000000001,-18.38889,0 -53.02973,-18.37194,0 -53.05806,-18.28305,0 -53.05389000000001,-18.01667,0 -53.1139,-17.8889,0 -53.12612000000001,-17.67167,0 -53.22778000000001,-17.49805,0 -53.19084,-17.36723,0 -53.20166,-17.28473,0 -53.03973,-17.0525,0 -53.0275,-16.93778,0 -52.97334,-16.82111,0 -52.83222,-16.76417,0 -52.72084,-16.66471,0 -52.69139,-16.57639,0 -52.63779000000001,-16.53889,0 -52.57751,-16.34166,0 -52.43473,-16.27139,0 -52.44056000000001,-16.09694,0 -52.33055,-16.0425,0 -52.24306000000001,-15.88028,0 -52.03751,-15.87555,0 -51.96584,-15.80111,0 -51.90389,-15.8225,0 -51.87695,-15.80055,0 -51.77973000000001,-15.63084,0 -51.78861,-15.53417,0 -51.74973,-15.54084,0 -51.70361,-15.48194,0 -51.63667000000001,-15.17556,0 -51.41251000000001,-14.99723,0 -51.31833000000001,-14.9625,0 -51.29611,-15.01473,0 -51.25723,-15.02139,0 -51.16028,-14.975,0 -51.0975,-14.89111,0 -51.03833,-14.65973,0 -50.96778000000001,-14.53083,0 -50.99918000000001,-14.40555,0 -50.92694,-14.11972,0 -50.84555,-14.08639,0 -50.87056,-13.71861,0 -50.78973000000001,-13.66806,0 -50.75834,-13.53778,0 -50.59166,-13.29694,0 -50.56834,-13.22861,0 -50.59028000000001,-13.07723,0 -50.49806,-12.96056,0 -50.48167000000001,-12.8475,0 -50.4841,-12.84488,0 -50.59806,-12.81056,0 -50.62555,-12.65639,0 -50.67362000000001,-12.62805,0 -50.61361,-12.38416,0 -50.61972,-12.28444,0 -50.67334000000001,-12.20223,0 -50.68389,-12.04861,0 -50.64251,-11.88555,0 -50.67973000000001,-11.87,0 -50.71448,-11.74943,0 -50.64834,-11.60334,0 -50.73667,-11.52445,0 -50.74139,-11.46444,0 -50.65917000000001,-11.24305,0 -50.66473000000001,-11.1425,0 -50.60946,-11.06528,0 -50.63778,-10.9325,0 -50.61167,-10.88139,0 -50.62944,-10.82611,0 -50.5825,-10.73945,0 -50.60667000000001,-10.65584,0 -50.52278,-10.56334,0 -50.48278,-10.39361,0 -50.40862,-10.3075,0 -50.38167,-10.11029,0 -50.30944,-10.02889,0 -50.23251000000001,-9.844165,0 -51.1372,-9.797392,0 -51.07751,-9.31194,0 -51.12167,-9.258607,0 -51.1725,-8.998056,0 -51.33805,-8.772786,0 -51.44778000000001,-8.691948999999999,0 -51.52667000000001,-8.544447999999999,0 -51.51973,-8.418888000000001,0 -51.42722,-8.269164,0 -51.44501,-8.193051000000001,0 -51.40862000000001,-8.134731,0 -51.43333000000001,-8.088058,0 -51.41695,-8.028333999999999,0 -51.26918,-7.983613,0 -51.16889,-7.914447,0 -51.10196000000001,-7.803054,0 -51.23056,-7.623612,0 -51.18334,-7.543612,0 -51.21639,-7.419159,0 -51.20167000000001,-7.342497,0 -51.27251,-7.274448000000001,0 -51.38807,-7.269723000000002,0 -51.48695,-7.19416,0 -51.64500000000001,-7.158888000000001,0 -51.65556000000002,-7.06222,0 -51.74084,-6.956110000000001,0 -51.69805,-6.901659,0 -51.72723,-6.893613,0 -51.71278000000002,-6.860278,0 -51.78751,-6.690835,0 -51.9575,-6.613336,0 -52.01314,-6.657526,0 -52.08528,-6.548607000000001,0 -52.22473,-6.573888,0 -52.36139000000001,-6.381109,0 -52.43055,-6.338053000000001,0 -52.43056000000001,-6.210279,0 -52.53807,-6.036390000000001,0 -52.53889,-5.840838000000001,0 -52.645,-5.688891,0 -52.70612,-5.469165,0 -52.84084,-5.406949,0 -52.86778000000001,-5.365558,0 -52.86972,-5.210001,0 -52.92639,-5.008608,0 -52.83056,-4.882780000000001,0 -52.66223,-4.493052,0 -52.66278000000001,-4.433338,0 -52.73,-4.376107,0 -52.73806,-4.331107,0 -52.63945,-4.193614000000001,0 -52.60722000000001,-3.860839,0 -52.35639000000001,-3.665836,0 -52.23778,-3.510559,0 -52.15778,-3.34305,0 -52.15028,-3.235554,0 -52.04611000000001,-3.294441,0 -51.94445,-3.409444,0 -51.92667,-3.553605999999999,0 -51.83223000000001,-3.609163,0 -51.74917,-3.562498000000001,0 -51.66917,-3.471661,0 -51.74472000000001,-3.35611,0 -51.63556000000001,-3.291661,0 -51.61153,-3.147264,0 -51.82334,-3.100285,0 -51.94334000000001,-2.898334000000001,0 -52.04999999999999,-2.809999,0 -52.06667000000001,-2.714715,0 -52.03139,-2.59722,0 -52.12361000000001,-2.389717000000001,0 -52.20028,-2.407501,0 -52.15028,-2.358055,0 -52.25917,-2.161108,0 -52.26723,-2.061666,0 -52.36806000000001,-2.098612,0 -52.27139,-2.01916,0 -52.31806000000001,-1.935559,0 -52.26917,-1.813051,0 -52.34612,-1.674721,0 -52.31139000000001,-1.627498,0 -52.26806,-1.682218,0 -52.2275,-1.616392,0 -52.28528,-1.53361,0 -52.44972,-1.586944,0 -52.54084,-1.571949,0 -52.71278,-1.603333,0 -52.70722,-1.561105,0 -52.47639,-1.490553,0 -52.43805,-1.441108,0 -52.22139,-1.342504,0 -52.10778,-1.415835,0 -52.00557,-1.404163,0 -51.92334,-1.328608,0 -51.93501,-1.192501,0 -51.90139,-1.150552,0 -51.9775,-1.135279,0 -52.0475,-1.170838,0 -52.06945,-1.220284,0 -52.11389000000001,-1.155286,0 -52.27112000000001,-1.133893,0 -52.37028000000001,-1.061388,0 -52.38528000000002,-0.8791655,0 -52.51918000000001,-0.8797145,0 -52.50666,-0.7508345000000001,0 -52.5066,-0.7438775,0 -52.53807,-0.6247175,0 -52.60056,-0.6144485,0 -52.62723,-0.5727785,0 -52.63278,-0.3822215000000001,0 -52.81223000000001,-0.1780565,0 -52.87194,-0.2033375,0 -52.92334,-0.1863905,0 -52.97112,-0.01638954,0 -53.01583,0.03500046,0 -53.0061,0.1311115,0 -53.04139000000001,0.2474995,0 -53.12889,0.3866664,0 -53.11723000000001,0.7422205,0 -53.28250000000001,0.7902805000000003,0 -53.41861999999999,0.9422185000000001,0 -53.46723,1.142496,0 -53.40584000000001,1.187504,0 -53.4325,1.25666,0 -53.54889,1.243889,0 -53.55306,1.367783,0 -53.65639000000001,1.363058,0 -53.66417,1.429442,0 -53.69694000000001,1.410281,0 -53.73695,1.437786,0 -53.75307000000002,1.392497,0 -53.82167,1.419722,0 -53.82723,1.384163,0 -53.85778,1.383605,0 -53.98807000000001,1.520558,0 -54.08278000000001,1.505556,0 -54.10139,1.613051,0 -54.36111,1.763054,0 -54.735,1.768607,0 -54.76307,1.986947,0 -54.80084,2.017781,0 -54.75029,2.076659,0 -54.78945,2.163609,0 -54.71111,2.274723,0 -54.73722000000001,2.425833,0 -54.77539,2.456846,0 -54.86750000000001,2.440278,0 -54.97223,2.554721,0 -54.94834000000001,2.617496,0 -55.11195,2.527217,0 -55.13807000000001,2.573891000000001,0 -55.24139000000001,2.499164,0 -55.32249,2.516948,0 -55.38,2.428056,0 -55.58473,2.438334,0 -55.71028,2.399165,0 -55.96584,2.53277,0 -55.99195000000001,2.4075,0 -56.04528000000001,2.344445,0 -56.08917,2.355281,0 -56.13807,2.266947,0 -56.0425,2.232782,0 -56.03639,2.177505,0 -55.90139000000001,2.045285,0 -55.90417,1.89305,0 -55.94667,1.853333,0 -56.03723,1.836944,0 -56.47063,1.944503,0 -56.56279,2.023892,0 -56.69187,2.028734,0 -56.81057,2.193336,0 -56.8064,2.250836,0 -56.87833000000001,2.297781,0 -56.87112,2.348891,0 -56.92806,2.391948,0 -56.91778,2.428056,0 -57.09806,2.749166,0 -57.20139000000001,2.821391000000001,0 -57.21333,2.878892000000001,0 -57.17917,2.914443,0 -57.21111,2.928051,0 -57.24111000000001,3.138057,0 -57.28528,3.143888000000001,0 -57.30139,3.377501000000001,0 -57.35028,3.355001,0 -57.41057000000001,3.382496,0 -57.48083000000001,3.323888999999999,0 -57.50334,3.351393,0 -57.64223000000001,3.356387,0 -57.66693999999999,3.395555,0 -57.63721,3.455,0 -57.65445,3.518612,0 -57.73473,3.610277,0 -57.83583,3.664998000000001,0 -57.87668,3.80916,0 -58.04723,4.008338,0 -58.0714,4.159161,0 -57.9539,4.28777,0 -57.95889,4.403339,0 -57.83862,4.654718,0 -57.92333000000001,4.821948,0 -57.84112,4.927778,0 -57.77140000000001,4.922774,0 -57.68806000000001,5.010282,0 -57.42028,4.989168,0 -57.28889,5.016663,0 -57.32305,5.069717,0 -57.29695,5.160285000000001,0 -57.25471,5.175279,0 -57.22889,5.140835,0 -57.18862,5.16861,0 -57.23521000000001,5.259942,0 -57.26307,5.26778,0 -57.25639000000001,5.22278,0 -57.27916,5.223339,0 -57.28723000000002,5.310557,0 -57.33555,5.313338,0 -57.27223000000001,5.38028,0 -57.24850000000001,5.486112,0 -57.16833,5.537222,0 -57.13139,5.773337,0 -57.06833000000001,5.942223,0 -56.97724,6.000021,0 -55.15563000000001,6.048935,0 -54.47205,5.976981000000002,0 -52.91902,5.485283,0 -52.50826000000001,5.098526,0 -52.50826000000001,5.239709,0 -52.5083,10.2397,0 -52.50835,15.23971,0 -52.50838,19.83971,0 -52.50841,24.83971,0 -52.50846,29.83971,0 -52.50845000000001,29.94478,0 -52.50809000000001,34.94477,0 -52.50773000000001,39.94478,0 -52.50738,44.94477,0 -52.50703,49.94478,0 -52.50666,54.94477,0 -52.50631,59.94478000000001,0 -52.50595000000001,64.94479,0 -53.01731,65.35898,0 -53.71276,66.05441999999999,0 -54.00934,67.10271,0 -53.82526,67.68565,0 -55.02182000000001,69.63903000000001,0 -55.07296,70.48277,0 -55.18546,71.07594,0 -55.98318,71.67934000000001,0 -56.16726000000001,72.58955,0 -57.85474000000001,74.69123,0 -59.57289,75.70371,0 -62.34444,76.01053,0 -63.58193000000001,76.31222,0 -63.60658000000001,76.32865,0 -67.76724,79.10155,0 -67.31153999999999,79.16665000000002,0 -65.98242999999999,79.14412,0 -64.97996999999999,79.47077,0 -65.14892000000002,79.84247000000001,0 -65.29535,80.06775,0 -65.64452,80.00015999999999,0 -66.0838,80.00015999999999,0 -66.66951,80.05649,0 -67.10879,80.04520000000001,0 -67.52555,80.18038,0 -67.54808,80.29301,0 -67.49175,80.34933,0 -66.92856999999999,80.47324,0 -66.92856999999999,80.65346,0 -66.78216000000001,80.72104,0 -66.44423999999999,80.6084,0 -64.91238,80.92377000000001,0 -64.79975,81.00261999999999,0 -63.96624000000001,81.07021000000002,0 -63.81981,81.14906000000001,0 -62.97503,81.25042999999999,0 -62.23162000000001,81.21664,0 -61.55581000000002,81.11526000000001,0 -61.30801,81.16032,0 -61.35306000000001,81.34054,0 -61.31927,81.39686,0 -61.02642,81.47570000000002,0 -61.49949,81.73477000000001,0 -61.47697000000001,81.79107999999999,0 -60.51955,81.93752000000001,0 -59.49456,82.01636000000002,0 -58.87425,82.10625,0 -56.03332,82.31142000000001,0 -54.21828,82.37454,0 -53.42914,82.29564000000001,0 -52.95565,82.35877000000001,0 -52.52951,82.29564000000001,0 -52.52415,84.90001,0 -52.51387,89.90000000000001,0 -51.51426,89.90000000000001,0 -50.51467,89.90000000000001,0 -49.51508,89.90000000000001,0 -48.51547000000001,89.90000000000001,0 -47.51588000000001,89.90000000000001,0 -46.51628000000002,89.90000000000001,0 -45.51669,89.90000000000001,0 -44.51709,89.90000000000001,0 -43.51749,89.90000000000001,0 -42.5179,89.90000000000001,0 -41.51830000000001,89.90000000000001,0 -40.51871,89.90000000000001,0 -39.51911,89.90000000000001,0 -38.5195,89.90000000000001,0 -37.51992,89.90000000000001,0 -37.51992,84.90001,0 + + + + + +-19.77925,75.15038,0 -19.60578,75.14566000000001,0 -19.46688,75.2666,0 -19.43014,75.36224,0 -19.4368,75.46748000000001,0 -19.48732,75.56003,0 -19.57222,75.62255,0 -19.67559,75.64335,0 -19.77806,75.6185,0 -19.86044,75.55269,0 -19.90594,75.4571,0 -19.90611,75.27975000000001,0 -19.77925,75.15038,0 + + + +-22.03397,75.85133,0 -21.86051,75.84662,0 -21.72161,75.96755,0 -21.68487,76.06319000000001,0 -21.69154,76.16843000000002,0 -21.74206,76.26098,0 -21.82695,76.32351,0 -21.93032,76.3443,0 -22.03279,76.31946000000001,0 -22.11516,76.25364,0 -22.16067,76.15807000000001,0 -22.16084,75.98069,0 -22.03397,75.85133,0 + + + 1 + + + + + GMT -02:00 + + +]]> + #khStylem0200 + + + + + +-25.28129,67.4954,0 -25.28129,62.86423,0 -22.54213,62.86423,0 -22.5419,60.19076,0 -22.54149,55.19075000000002,0 -22.54108,50.19075,0 -22.54066,45.19075,0 -22.54025,40.19075,0 -26.74697,40.19075,0 -31.74697000000001,40.19075,0 -31.74697000000001,36.49937,0 -27.5395,36.49937,0 -22.5395,36.49937,0 -22.53887,33.39533,0 -22.53785,28.39532,0 -22.53685,23.39533000000001,0 -22.53583,18.39532,0 -27.51274,18.39532,0 -27.51274,13.4011,0 -22.53482,13.4011,0 -22.53417,10.20111,0 -22.53316,5.201108,0 -22.53215,0.2011045,0 -22.53113000000001,-4.798891,0 -22.53011,-9.798895,0 -22.52911,-14.79889,0 -22.52809,-19.79889,0 -22.52777,-21.39890000000001,0 -22.52676,-26.39889000000001,0 -22.52574,-31.3989,0 -22.52472,-36.39889,0 -22.52435,-38.2989,0 -22.52333,-43.29889000000001,0 -22.52232,-48.29890000000001,0 -22.5213,-53.2989,0 -22.52029,-58.2989,0 -22.51928,-63.2989,0 -22.51827,-68.2989,0 -22.51725,-73.2989,0 -22.51667,-76.19889000000001,0 -22.51565,-81.19889000000001,0 -22.51464,-86.19888,0 -22.51389,-89.90000000000001,0 -23.45178,-89.90000000000001,0 -24.38965,-89.90000000000001,0 -25.32752,-89.90000000000001,0 -26.2654,-89.90000000000001,0 -27.20327,-89.90000000000001,0 -28.14115,-89.90000000000001,0 -29.07903,-89.90000000000001,0 -30.0169,-89.90000000000001,0 -30.95478,-89.90000000000001,0 -31.89265,-89.90000000000001,0 -32.83052,-89.90000000000001,0 -33.76841,-89.90000000000001,0 -34.70629,-89.90000000000001,0 -35.64416,-89.90000000000001,0 -36.58204,-89.90000000000001,0 -37.51991,-89.90000000000001,0 -37.51989,-84.89999,0 -37.51988,-79.90000000000001,0 -37.51987,-74.90000000000001,0 -37.51987,-69.90000000000001,0 -37.51985000000001,-64.90000000000001,0 -37.51984,-59.90001,0 -37.51983,-54.93388,0 -42.51982,-54.93388,0 -45.01502000000001,-54.93388,0 -45.01502000000001,-52.08813,0 -40.01502,-52.08813,0 -37.51982,-52.08813,0 -37.5198,-47.08813000000001,0 -37.51979,-42.17389,0 -37.51979,-37.17389,0 -37.51978,-32.17389,0 -37.51977,-27.17389,0 -37.51975,-22.17389,0 -37.51974,-17.17389,0 -37.51972,-12.17389,0 -37.51972,-11.77389,0 -37.36223,-11.45472,0 -37.39806,-11.49972,0 -37.48791,-11.52023,0 -37.39305,-11.45,0 -37.46917,-11.36667,0 -37.41223,-11.40278,0 -37.39528,-11.33389,0 -37.33139,-11.28667,0 -37.34861,-11.25028,0 -37.31362,-11.26305,0 -37.34779,-11.18778,0 -37.30555,-11.245,0 -37.29862,-11.20195,0 -37.27584,-11.25973,0 -37.36362,-11.31556,0 -37.39834,-11.40223,0 -37.33000000000001,-11.42723,0 -37.26501,-11.28667,0 -37.15112,-11.19194,0 -37.16446,-11.11389,0 -37.22112,-11.10778,0 -37.20195,-11.0925,0 -37.26028,-11.07222,0 -37.27916,-11.02528,0 -37.20723,-11.03723,0 -37.15667,-11.10444,0 -37.05333,-10.94917,0 -37.04028000000001,-10.8375,0 -37.14168,-10.82528,0 -37.09417000000001,-10.80111,0 -37.15333,-10.74861,0 -37.07779,-10.73389,0 -37.06889000000001,-10.79445,0 -37.00862,-10.81056,0 -37.02166,-10.93584,0 -36.85861,-10.73916,0 -36.56751,-10.54445,0 -36.40483,-10.49879,0 -36.28445,-10.3525,0 -36.28139,-10.28695,0 -36.04444000000001,-10.07583,0 -35.79557,-9.728334,0 -35.86917,-9.764163999999999,0 -35.95196,-9.602784,0 -35.90528,-9.621667,0 -35.86,-9.739160999999999,0 -35.79222,-9.683056000000001,0 -35.79362,-9.589725,0 -35.73695,-9.651394000000002,0 -35.77306,-9.695277000000001,0 -35.69028,-9.668889999999999,0 -35.65751,-9.586387,0 -35.5825,-9.535833,0 -35.45667,-9.346393000000001,0 -35.32751,-9.228889000000001,0 -35.16612,-8.960283,0 -34.97001,-8.430552000000001,0 -34.99195,-8.448895,0 -34.98694,-8.418888000000001,0 -35.02194,-8.423056000000001,0 -34.93584,-8.350552,0 -34.94,-8.270550999999999,0 -34.88001,-8.113049999999999,0 -34.92668,-8.038333,0 -34.85612,-8.073612000000001,0 -34.81528,-7.935283000000001,0 -34.84472,-7.835554000000001,0 -34.89333,-7.804998000000001,0 -34.85834,-7.73028,0 -34.90696,-7.735834,0 -34.85167,-7.695559000000002,0 -34.87555,-7.622227000000001,0 -34.83084,-7.683337,0 -34.80083,-7.63111,0 -34.84056,-7.554448,0 -34.92334,-7.563889000000001,0 -34.8932,-7.543089,0 -34.81779,-7.546942,0 -34.8075,-7.515000000000001,0 -34.7925,-7.178607,0 -34.83084,-7.108605,0 -34.82556,-6.987502,0 -34.85695,-7.075837,0 -34.915,-7.127497,0 -34.85834,-6.919444,0 -34.91195,-6.879997000000001,0 -34.94334,-6.779997000000001,0 -34.98028,-6.40639,0 -35.01501,-6.374998000000001,0 -35.04139,-6.233887000000001,0 -35.08778,-6.199164,0 -35.13584,-6.228612,0 -35.15501,-6.208894,0 -35.11528,-6.165838,0 -35.09278,-6.178887000000001,0 -35.105,-5.981112000000001,0 -35.14557,-5.938893000000001,0 -35.26195,-5.484726,0 -35.4175,-5.214717000000001,0 -35.60445000000001,-5.110839,0 -35.93472,-5.052223,0 -36.12889,-5.097502,0 -36.28751,-5.091660000000001,0 -36.25472,-5.10166,0 -36.28028,-5.11111,0 -36.58167,-5.088051,0 -36.52583,-5.108608,0 -36.54417,-5.134447,0 -36.68722,-5.098339,0 -36.79723,-5.046391,0 -36.88278,-4.949163,0 -37.17445,-4.918609,0 -37.28973,-4.726108,0 -37.51991,-4.633912,0 -37.51991,0.3660925,0 -37.51991,5.366087,0 -37.51991,10.36609,0 -37.51991,15.36609,0 -37.51991,15.36843,0 -37.51991,20.36843,0 -37.51991,25.36843,0 -37.51991,29.96842,0 -37.51991,34.96843,0 -37.51991,39.96843,0 -37.51991,44.96843000000001,0 -37.51991,49.96843,0 -37.51991,54.96843,0 -37.51991,59.96843000000001,0 -37.51991,64.96842,0 -37.51991,65.16843,0 -35.45789,65.8785,0 -33.65758,66.67344,0 -31.90405,67.86584000000001,0 -29.7998,67.98274000000001,0 -27.43837,68.38021000000001,0 -25.89525,68.70753000000001,0 -23.90792,69.38557000000002,0 -22.51389,69.82120999999999,0 -22.51389,67.4954,0 -25.28129,67.4954,0 + + + 1 + + + + + +-22.55908,84.90009000000001,0 -22.56975,83.06453000000002,0 -23.25304,83.14206,0 -28.22116000000001,83.70583000000001,0 -29.51426,83.7223,0 -34.51386,83.78599,0 -37.51992,83.74590000000001,0 -37.51992,84.90001,0 -37.51992,89.90000000000001,0 -36.5206,89.90000000000001,0 -35.52126,89.90000000000001,0 -34.52194,89.90000000000001,0 -33.52261,89.90000000000001,0 -32.52328,89.90000000000001,0 -31.52396,89.90000000000001,0 -30.52463,89.90000000000001,0 -29.5253,89.90000000000001,0 -28.52597,89.90000000000001,0 -27.52664,89.90000000000001,0 -26.52732,89.90000000000001,0 -25.52799,89.90000000000001,0 -24.52866,89.90000000000001,0 -23.52934,89.90000000000001,0 -22.53001,89.90000000000001,0 -22.55908,84.90009000000001,0 + + + 1 + + + + + GMT -01:00 + + +]]> + #khStylem0100 + + + + + +-8.807823000000001,54.70094,0 -9.054081,54.29253,0 -9.834866999999999,54.36460000000001,0 -10.12917,54.26851,0 -10.25529,54.12435000000001,0 -10.29734,53.98021000000001,0 -10.32736,53.58982,0 -10.18322,53.39763,0 -9.8649,53.12735000000001,0 -9.498528000000002,52.94116,0 -9.68472,52.71294,0 -9.948978,52.56879000000001,0 -10.65169,52.04025,0 -10.42346,51.86608,0 -10.24928,51.55978,0 -9.828864000000001,51.43965,0 -9.50454,51.40962,0 -8.525547,51.58981000000001,0 -7.812513,51.89045000000001,0 -7.812513,46.89045,0 -7.812513,43.71458,0 -7.894449000000001,43.66638,0 -7.850556,43.71472,0 -7.856109000000001,43.765,0 -7.898058000000001,43.76416,0 -7.991946000000001,43.70555,0 -8.060841,43.70361,0 -8.049447000000001,43.63666,0 -8.089173000000001,43.66194,0 -8.253333,43.55806,0 -8.319447,43.56221,0 -8.295282,43.52639,0 -8.331660000000001,43.50889,0 -8.339724,43.45693,0 -8.166942000000001,43.50777,0 -8.194445999999999,43.46611,0 -8.317214999999999,43.44305,0 -8.13195,43.42334,0 -8.213058,43.4025,0 -8.215551,43.33055,0 -8.329725,43.40388,0 -8.360001000000001,43.34027,0 -8.38611,43.33944,0 -8.398611000000001,43.38582,0 -8.539443000000002,43.30972,0 -8.701389000000001,43.28722,0 -8.782785000000001,43.30306,0 -8.843994,43.36485,0 -8.848053,43.32222,0 -8.980281,43.28139,0 -8.91639,43.23222,0 -9.010557,43.23195,0 -9.056664,43.18332,0 -9.169731000000001,43.18583,0 -9.209448,43.15277,0 -9.203894999999999,43.12554,0 -9.164448,43.13777,0 -9.165555,43.10722,0 -9.218889000000001,43.10806,0 -9.25389,43.05029,0 -9.2925,43.04804000000001,0 -9.252504000000002,43.0061,0 -9.293336999999999,42.92249,0 -9.273339,42.88694,0 -9.226944,42.93805,0 -9.181107000000001,42.91555,0 -9.185003999999999,42.9525,0 -9.123606000000002,42.90555,0 -9.14139,42.85695,0 -9.101394000000001,42.82332,0 -9.140283,42.795,0 -9.086112,42.73528,0 -9.058887,42.78472,0 -8.960283,42.77333,0 -8.903610000000001,42.82833,0 -8.85834,42.82444,0 -9.020286000000001,42.70472,0 -9.086112,42.58138000000001,0 -9.027782999999999,42.57972,0 -9.041391000000001,42.52888,0 -8.967249000000001,42.46196,0 -8.898606000000001,42.10806,0 -8.882225999999999,41.89004,0 -10.07815,41.89004,0 -15.07814,41.89004,0 -16.53966,38.78279,0 -18.66778,34.25829,0 -20.79591,29.7338,0 -20.79591,25.84186,0 -19.57629,25.84186,0 -14.57629,25.84186,0 -14.82666,25.30916,0 -14.83473,24.91528,0 -14.90111,24.68805,0 -14.98694,24.63639,0 -15.03139,24.54167,0 -15.18028,24.48805000000001,0 -15.29639,24.3336,0 -15.61417,24.02778,0 -15.7625,23.95694,0 -15.91167,23.82195,0 -16.00167,23.64389,0 -15.94334,23.68222,0 -15.86972,23.82861000000001,0 -15.79028,23.85806,0 -15.78167,23.91,0 -15.76278,23.79138,0 -15.92583,23.57722,0 -16.13584,23.17917,0 -16.21612,23.08388,0 -16.15167,23.06888,0 -16.15416,23.01639,0 -16.18973,22.94221,0 -16.30361,22.87555,0 -16.35917,22.56806,0 -16.42889,22.51611000000001,0 -16.50028,22.32221,0 -16.62806,22.27361,0 -16.66889,22.29639,0 -16.71944,22.26082,0 -16.85334,22.07139,0 -16.95945,21.82222,0 -16.94416,21.73972,0 -17.10528,20.84806,0 -17.05233,20.76409,0 -16.53566,19.38283,0 -16.46306,19.2554,0 -16.35111,19.20556,0 -16.28139,19.12777000000001,0 -16.18806,18.93945,0 -16.13805,18.65389,0 -16.05778,18.43472,0 -16.02862,18.08056,0 -16.06945,17.58972,0 -16.17556,17.25416,0 -16.46583,16.61971,0 -16.47278,16.48222,0 -16.53723,16.30166,0 -16.52768,16.06025,0 -16.53723,15.77584,0 -16.87834,15.225,0 -17.16694,14.90305,0 -17.53723,14.75611,0 -17.45626,14.64857,0 -17.2475,14.67323,0 -16.82851,13.87214,0 -16.83957,12.41371,0 -16.36448,11.88337,0 -16.5081,11.28123,0 -16.17665,11.01605,0 -15.12702,10.87243,0 -13.84538,9.425052000000001,0 -13.34819,8.972054,0 -13.27084,8.088164000000001,0 -13.02778,7.524683000000001,0 -12.39801,7.325810000000001,0 -11.38153,6.684983,0 -9.348579000000001,5.116076,0 -8.442594,4.596795,0 -7.506171,4.24899,0 -7.506171,4.17239,0 -7.506171,-0.8276135000000001,0 -7.506171,-5.827609,0 -11.18769,-5.827609,0 -16.18769,-5.827609,0 -16.1435,-9.363187,0 -12.50618,-9.363187,0 -7.506171,-9.363187,0 -7.506612000000001,-10.65897,0 -7.508295000000001,-15.65897,0 -7.509978000000001,-20.65897,0 -7.51167,-25.65897,0 -7.513353,-30.65898,0 -7.515036,-35.65897,0 -9.640872,-35.65897,0 -14.64088,-35.65897,0 -14.64088,-36.71363,0 -14.64088,-41.71362,0 -12.51732,-41.71362,0 -7.517322,-41.71362,0 -7.518411000000001,-44.61363,0 -7.520301000000001,-49.61362,0 -7.522191000000001,-54.61362,0 -7.524081000000001,-59.61362,0 -7.525971,-64.61363,0 -7.527861000000001,-69.61362,0 -7.529751,-74.61362,0 -7.531632,-79.61362,0 -7.531740000000001,-79.90000000000001,0 -7.533630000000001,-84.89999,0 -7.53552,-89.90000000000001,0 -8.53407,-89.90000000000001,0 -9.532638,-89.90000000000001,0 -10.53119,-89.90000000000001,0 -11.52976,-89.90000000000001,0 -12.52831,-89.90000000000001,0 -13.52687,-89.90000000000001,0 -14.52542,-89.90000000000001,0 -15.52398,-89.90000000000001,0 -16.52254,-89.90000000000001,0 -17.5211,-89.90000000000001,0 -18.51966,-89.90000000000001,0 -19.51822,-89.90000000000001,0 -20.51678,-89.90000000000001,0 -21.51534,-89.90000000000001,0 -22.51389,-89.90000000000001,0 -22.51464,-86.19888,0 -22.51565,-81.19889000000001,0 -22.51667,-76.19889000000001,0 -22.51725,-73.2989,0 -22.51827,-68.2989,0 -22.51928,-63.2989,0 -22.52029,-58.2989,0 -22.5213,-53.2989,0 -22.52232,-48.29890000000001,0 -22.52333,-43.29889000000001,0 -22.52435,-38.2989,0 -22.52472,-36.39889,0 -22.52574,-31.3989,0 -22.52676,-26.39889000000001,0 -22.52777,-21.39890000000001,0 -22.52809,-19.79889,0 -22.52911,-14.79889,0 -22.53011,-9.798895,0 -22.53113000000001,-4.798891,0 -22.53215,0.2011045,0 -22.53316,5.201108,0 -22.53417,10.20111,0 -22.53482,13.4011,0 -27.51274,13.4011,0 -27.51274,18.39532,0 -22.53583,18.39532,0 -22.53685,23.39533000000001,0 -22.53785,28.39532,0 -22.53887,33.39533,0 -22.5395,36.49937,0 -27.5395,36.49937,0 -31.74697000000001,36.49937,0 -31.74697000000001,40.19075,0 -26.74697,40.19075,0 -22.54025,40.19075,0 -22.54066,45.19075,0 -22.54108,50.19075,0 -22.54149,55.19075000000002,0 -22.5419,60.19076,0 -22.54213,62.86423,0 -17.54214,62.85332,0 -12.54215,62.84239,0 -7.806969000000001,62.83205,0 -7.806969000000001,57.83205,0 -7.806969000000001,55.35279,0 -8.261279999999999,55.27752,0 -8.567595000000001,55.00724,0 -8.807823000000001,54.70094,0 + + + 1 + + + + + +-19.46688,75.2666,0 -19.60578,75.14566000000001,0 -19.77925,75.15038,0 -19.90611,75.27975000000001,0 -19.90594,75.4571,0 -19.86044,75.55269,0 -19.77806,75.6185,0 -19.67559,75.64335,0 -19.57222,75.62255,0 -19.48732,75.56003,0 -19.4368,75.46748000000001,0 -19.43014,75.36224,0 -19.46688,75.2666,0 + + + 1 + + + + + +-7.511742000000002,84.90001,0 -7.511742000000002,79.90000000000001,0 -7.511742000000002,74.89999,0 -7.511742000000002,69.90000000000001,0 -7.511742000000002,67.45737,0 -12.51173,67.47004,0 -17.51171,67.48272,0 -22.5117,67.49539,0 -22.51389,67.4954,0 -22.51389,69.82120999999999,0 -22.03747,69.97009,0 -21.35944,70.48445,0 -21.17239,70.78841,0 -21.78029,72.14449000000001,0 -21.42958000000001,72.84589,0 -20.28394,73.40702,0 -19.34872,74.17858,0 -18.13293,74.58775,0 -17.26786,74.98521,0 -17.24447,75.26577,0 -18.50702,75.85029,0 -18.06279,76.85564000000001,0 -17.52503,77.76749,0 -17.47827,79.26384,0 -17.31461,79.94186999999999,0 -15.51431,80.61991,0 -14.53233,80.80695,0 -12.03061,81.55513000000001,0 -12.03061,81.69541,0 -13.71401,81.90584,0 -16.16897,82.02274,0 -17.59517,81.92921,0 -18.10955,81.78892999999999,0 -19.25519,82.23316,0 -21.33607,82.72414000000001,0 -22.56975,83.06453000000002,0 -22.55908,84.90009000000001,0 -22.53001,89.90000000000001,0 -21.59137,89.90000000000001,0 -20.65272,89.90000000000001,0 -19.71409,89.90000000000001,0 -18.77545,89.90000000000001,0 -17.8368,89.90000000000001,0 -16.89817,89.90000000000001,0 -15.95952,89.90000000000001,0 -15.02087,89.90000000000001,0 -14.08224,89.90000000000001,0 -13.14359,89.90000000000001,0 -12.20495,89.90000000000001,0 -11.26631,89.90000000000001,0 -10.32766,89.90000000000001,0 -9.389025000000002,89.90000000000001,0 -8.450379,89.90000000000001,0 -7.511742000000002,89.90000000000001,0 -7.511742000000002,84.90001,0 + + + 1 + + + + + GMT +00:00 + + +]]> + #khStyle0000 + + + + + +-8.201223000000002,42.15273,0 -8.185554,42.06471,0 -8.121942000000001,42.07944,0 -8.079723,42.05416,0 -8.084997000000001,42.02027,0 -8.218610999999999,41.91361000000001,0 -8.140554,41.80917000000001,0 -8.014725,41.83388,0 -7.892217,41.92666,0 -7.880004,41.85277,0 -7.692498,41.905,0 -7.591662,41.87972,0 -7.607781,41.83111000000001,0 -7.493058,41.87306000000001,0 -7.420284,41.81332,0 -7.37028,41.85139,0 -7.200558,41.88361,0 -7.182783,41.97944,0 -7.133607,41.99499,0 -7.056108,41.95111,0 -6.982848,41.97386,0 -6.837498,41.94722,0 -6.788052000000001,41.99167,0 -6.716943,41.93666,0 -6.581664,41.96749,0 -6.544719,41.93722,0 -6.568335,41.88721,0 -6.508341,41.87389,0 -6.562503,41.74529,0 -6.551388,41.6911,0 -6.497496000000001,41.65749,0 -6.442218000000002,41.68582,0 -6.303609,41.66333,0 -6.187221,41.57972,0 -6.32916,41.41527,0 -6.318333000000001,41.38722,0 -6.388056,41.38167,0 -6.381945,41.355,0 -6.496947,41.26445,0 -6.64389,41.24471000000001,0 -6.764445,41.13083,0 -6.754446000000002,41.10249,0 -6.808338,41.04056000000001,0 -6.931665000000001,41.01806,0 -6.803892,40.87416000000001,0 -6.829164,40.75528,0 -6.797781,40.65777,0 -6.838893000000001,40.575,0 -6.790833,40.51805,0 -6.848334000000001,40.44333,0 -6.778611,40.36279,0 -6.873894,40.26332,0 -7.005834,40.23083,0 -7.027218,40.18777,0 -7.004718,40.12611,0 -6.934725000000001,40.1075,0 -6.863895,40.01555,0 -6.913611,39.86472,0 -6.98319,39.81694,0 -7.017219,39.675,0 -7.266942,39.67194,0 -7.337502,39.64388000000001,0 -7.515000000000001,39.66611,0 -7.532505000000001,39.66942000000001,0 -7.505838000000001,39.60583,0 -7.390836000000001,39.53277,0 -7.38,39.49611,0 -7.293609,39.46777,0 -7.322778,39.38833,0 -7.235037000000001,39.27697,0 -7.242786000000002,39.21305,0 -7.139997000000001,39.17334,0 -7.142499,39.11111,0 -7.004997,39.10722,0 -6.954795,39.02639,0 -7.050285000000001,38.91082,0 -7.041663,38.86861,0 -7.257231,38.72834,0 -7.248051,38.6236,0 -7.329717,38.44722,0 -7.143894,38.27027,0 -7.087779,38.17443,0 -6.947784,38.21833000000001,0 -6.939162,38.17805,0 -7.006662000000001,38.02805,0 -7.103889000000001,38.04694,0 -7.126947,38.00333,0 -7.254450000000001,37.98749000000001,0 -7.284996,37.86027,0 -7.422498000000001,37.75472000000001,0 -7.447779,37.65777,0 -7.524441000000002,37.55250000000001,0 -7.467498,37.49082,0 -7.431858,37.25319,0 -7.384167000000002,37.16972,0 -7.333605,37.21222000000001,0 -7.080282000000001,37.2175,0 -6.725835000000001,37.09194,0 -6.515838,36.97194,0 -6.364449000000001,36.79528,0 -6.347214000000002,36.89638,0 -6.246387,36.89581,0 -6.339717000000001,36.88944,0 -6.337224000000001,36.79610000000001,0 -6.443613,36.71889,0 -6.392502,36.62639,0 -6.230835,36.575,0 -6.240834,36.50111,0 -6.172785000000001,36.51221,0 -6.239718,36.46193,0 -6.291666000000001,36.5375,0 -6.318891000000001,36.53249,0 -6.037497,36.18027,0 -5.911389,36.17916,0 -5.797224,36.07388,0 -5.693895,36.06167,0 -5.611662,36.00027,0 -5.425281000000001,36.07083,0 -5.432778,36.17417,0 -5.350833,36.16,0 -5.34528,36.11278,0 -5.395554,35.91634,0 -5.345838,35.84166,0 -5.318892,35.695,0 -5.274999,35.68111,0 -5.253057,35.57695,0 -5.171391,35.5375,0 -5.063337,35.40972,0 -4.695840000000001,35.20888,0 -4.353894,35.14611,0 -3.925278,35.25999,0 -3.892779,35.21583,0 -3.813894,35.20027,0 -3.682503,35.28778,0 -3.577221,35.22667,0 -3.332502,35.19139,0 -3.06639,35.28944,0 -2.973888,35.44027,0 -2.946942,35.32917,0 -2.962782,35.27499,0 -2.914722,35.27361,0 -2.909448,35.17638,0 -2.841660000000001,35.12694,0 -2.747214,35.11555,0 -2.885553,35.24277,0 -2.754999,35.13499,0 -2.635002,35.09972,0 -2.516949,35.09832,0 -2.419164,35.15332,0 -2.209446,35.08582,0 -2.180286,35.01222,0 -2.065833,34.93695,0 -1.99305,34.92945,0 -1.961388,34.87029,0 -1.747215,34.74722,0 -1.857501,34.61028,0 -1.686708,34.48551,0 -1.79334,34.37833,0 -1.750554,34.34945,0 -1.653336,34.085,0 -1.710279,33.8825,0 -1.680552,33.76972,0 -1.730556,33.70499,0 -1.65222,33.66277,0 -1.606662,33.59527,0 -1.600551,33.50972,0 -1.666665,33.38333,0 -1.668051,33.26111,0 -1.480284,33.06305,0 -1.487214,32.97917000000001,0 -1.542501,32.93944,0 -1.382778,32.72445,0 -1.300284,32.70055,0 -1.010286,32.50832,0 -1.119996,32.41555,0 -1.196109,32.40472,0 -1.249722,32.32695,0 -1.25361,32.21472,0 -1.295838,32.16306,0 -1.200834,32.17027,0 -1.175553,32.12083,0 -1.213056,32.08971,0 -2.331108,32.15749,0 -2.853891,32.08834,0 -2.938059,32.02888000000001,0 -2.980557,31.84416,0 -3.386115,31.72611,0 -3.511665,31.67334,0 -3.714714,31.71639,0 -3.830832,31.6775,0 -3.84084,31.47583,0 -3.724722,31.39472,0 -3.803895,31.33916,0 -3.79611,31.22167,0 -3.826107,31.16389,0 -3.788892000000001,31.14861,0 -3.724164,31.18861,0 -3.602214,31.09556,0 -3.617784,30.97667,0 -3.718890000000001,30.93806,0 -4.016943,30.91111,0 -4.16916,30.76916,0 -4.396941,30.64833,0 -4.591944,30.62639,0 -4.920552,30.50805,0 -5.133609,30.19806000000001,0 -5.351949,29.99722,0 -5.560002,29.895,0 -5.89833,29.85667000000001,0 -6.002784000000001,29.82945,0 -6.145839000000001,29.8475,0 -6.217227000000001,29.79888,0 -6.474168000000001,29.83306,0 -6.508611,29.63888,0 -6.58584,29.56722,0 -7.123887,29.63695,0 -7.298334,29.53833,0 -7.433892,29.39722,0 -7.644726000000001,29.385,0 -7.995555,29.11639,0 -8.17695,29.04084,0 -8.495559,28.79056,0 -8.667225,28.70944,0 -8.666667,27.66667,0 -8.666793,27.29046,0 -6.662781,26.12916,0 -4.806108,25.00027,0 -2.448333,23.48722,0 -0.008055,21.83055,0 1.169667,21.10254,0 1.197144,21.00248,0 1.167498,20.74111,0 1.317222,20.73833,0 1.375002,20.6575,0 1.627497,20.57111,0 1.663056,20.53611,0 1.668051,20.40861,0 1.795833,20.30833,0 1.881108,20.30139,0 1.908891,20.23139000000001,0 1.983339,20.26027,0 2.097504,20.21889,0 2.213055,20.28139,0 2.344167,20.17777,0 2.411667,20.0575,0 2.587779,20.00166,0 2.967219,19.95,0 3.233052,19.82028,0 3.210003,19.56527,0 3.277215,19.38972,0 3.206664,19.32611,0 3.196107000000001,19.25861,0 3.114162,19.15639,0 3.331944,18.97639,0 4.245282,19.14666,0 4.2525,16.99445,0 4.21416,16.99361,0 4.198887,16.82083,0 4.200840000000001,16.39389,0 4.069719,16.29389,0 3.981942,16.07638,0 4.000833,15.98971,0 3.924440999999999,15.90416,0 3.885003,15.70917,0 3.823893,15.66527,0 3.726666,15.65277,0 3.539997,15.49722,0 3.523986,15.35816,0 3.032496,15.43306,0 3.020832,15.34195,0 2.628054,15.35055,0 1.312497,15.28666,0 0.974718,14.97861,0 0.694998,14.94221,0 0.512217,15.00083,0 0.3966660000000001,14.96056,0 0.229995,15.00251,0 0.235044,14.91506,0 0.193338,14.83583,0 0.241389,14.75221,0 0.166662,14.52306,0 0.18945,14.46472,0 0.321111,14.36278,0 0.410832,14.24584,0 0.352503,14.1214,0 0.424161,13.98361,0 0.4711050000000001,13.95555,0 0.465003,13.91361,0 0.616662,13.77805,0 0.602217,13.70389,0 0.7727850000000001,13.68832,0 0.77445,13.64416,0 0.902214,13.62278,0 0.9952830000000001,13.56806,0 1.031661,13.4625,0 1.244448,13.39305,0 1.285308,13.34995,0 1.204164,13.36805,0 1.182222,13.31277,0 0.991665,13.37167,0 0.9891630000000002,13.04722,0 1.117215,13.01111,0 1.578339,12.63,0 1.871667,12.60889,0 1.928052,12.70056,0 1.988892,12.73111,0 2.142504,12.69445,0 2.22084,12.59361,0 2.264166,12.4186,0 2.161665,12.41555,0 2.058336,12.35722,0 2.397924,11.89615,0 2.366946,11.79,0 2.308608,11.72555,0 2.310552,11.67055,0 2.193894,11.60361,0 2.014722,11.4225,0 1.868607,11.44584,0 1.609164,11.38834,0 1.56861,11.4525,0 1.439721,11.46834,0 1.328337,11.35139,0 1.351107,11.3025,0 1.303605,11.28945,0 1.274715,11.315,0 1.264716,11.24611,0 1.138059,11.26527,0 1.156392,11.16277,0 1.125279,11.17528,0 1.058058,11.13139,0 1.117782,11.0275,0 0.978894,11.08027,0 0.948609,11.02389,0 0.9677789999999999,10.99584,0 0.917973,10.9964,0 0.879444,10.79972,0 0.8021880000000001,10.71245,0 0.7766640000000001,10.37667,0 1.355004,9.995282,0 1.373895,9.646667000000003,0 1.337499,9.542501,0 1.364256,9.481346,0 1.38861,9.492217999999999,0 1.416663,9.321111,0 1.567215,9.17,0 1.617786,9.049715000000001,0 1.624716,8.548056000000003,0 1.660833,8.496943999999999,0 1.613052,8.374715999999999,0 1.634715,8.357768,0 1.655838,7.532495,0 1.6425,6.995555000000001,0 1.548531,6.995177,0 1.606113,6.895268,0 1.594719,6.80445,0 1.623051,6.757775,0 1.575279,6.679718,0 1.749168,6.456663000000001,0 1.799325,6.281054,0 1.652499,6.250283,0 1.635399,6.21872,0 1.868607,6.273612,0 2.719611,6.36551,0 3.370833000000001,6.385832000000001,0 3.795282,6.432786000000001,0 4.379445,6.368057,0 4.525839,6.305004000000001,0 4.713606,6.164721,0 5.000004,5.857496,0 5.194161,5.502222,0 5.345271,5.329998,0 5.383890000000001,5.111946,0 5.497497,4.805838,0 5.578056,4.718609,0 5.554719,4.71528,0 5.579442,4.659722,0 5.777784,4.454999,0 5.843340000000001,4.410557000000001,0 5.862780000000001,4.434722,0 5.862222000000001,4.388607,0 5.931108000000001,4.340556,0 6.111108,4.272498,0 6.410556,4.313339,0 6.431112,4.345002,0 6.460839000000001,4.322502,0 6.794163000000001,4.336668,0 6.962769000000001,4.389164,0 7.018200000000002,4.374809,0 7.195104000000001,4.365161,0 7.538670000000001,4.437656,0 7.538670000000001,-0.5623475,0 7.538670000000001,-0.6855035,0 2.656305,-0.6707075,0 2.656305,-3.94561,0 7.538670000000001,-3.94561,0 7.538670000000001,-8.945614000000001,0 7.538679000000002,-13.94561,0 7.538679000000002,-18.94561,0 7.538679000000002,-23.94561,0 7.538679000000002,-28.94561,0 7.538679000000002,-33.94561,0 7.538679000000002,-34.50439,0 7.538679000000002,-39.50439,0 7.538679000000002,-44.50439,0 7.538679000000002,-49.50439000000002,0 7.538679000000002,-53.7044,0 7.538679000000002,-58.70439,0 7.538679000000002,-63.70440000000001,0 7.538679000000002,-68.70439,0 7.538679000000002,-73.70439000000002,0 7.538679000000002,-78.70439,0 7.538679000000002,-83.70439,0 7.538679000000002,-88.70438,0 7.538679000000002,-89.90000000000001,0 6.59655,-89.90000000000001,0 5.654412,-89.90000000000001,0 4.712274,-89.90000000000001,0 3.770127,-89.90000000000001,0 2.827989,-89.90000000000001,0 1.885851,-89.90000000000001,0 0.943722,-89.90000000000001,0 0.001584,-89.90000000000001,0 -0.9405540000000001,-89.90000000000001,0 -1.882692,-89.90000000000001,0 -2.82483,-89.90000000000001,0 -3.766967999999999,-89.90000000000001,0 -4.709106,-89.90000000000001,0 -5.651244,-89.90000000000001,0 -6.593382,-89.90000000000001,0 -7.53552,-89.90000000000001,0 -7.533630000000001,-84.89999,0 -7.531740000000001,-79.90000000000001,0 -7.531632,-79.61362,0 -7.529751,-74.61362,0 -7.527861000000001,-69.61362,0 -7.525971,-64.61363,0 -7.524081000000001,-59.61362,0 -7.522191000000001,-54.61362,0 -7.520301000000001,-49.61362,0 -7.518411000000001,-44.61363,0 -7.517322,-41.71362,0 -12.51732,-41.71362,0 -14.64088,-41.71362,0 -14.64088,-36.71363,0 -14.64088,-35.65897,0 -9.640872,-35.65897,0 -7.515036,-35.65897,0 -7.513353,-30.65898,0 -7.51167,-25.65897,0 -7.509978000000001,-20.65897,0 -7.508295000000001,-15.65897,0 -7.506612000000001,-10.65897,0 -7.506171,-9.363187,0 -12.50618,-9.363187,0 -16.1435,-9.363187,0 -16.18769,-5.827609,0 -11.18769,-5.827609,0 -7.506171,-5.827609,0 -7.506171,-0.8276135000000001,0 -7.506171,4.17239,0 -7.506171,4.24899,0 -8.442594,4.596795,0 -9.348579000000001,5.116076,0 -11.38153,6.684983,0 -12.39801,7.325810000000001,0 -13.02778,7.524683000000001,0 -13.27084,8.088164000000001,0 -13.34819,8.972054,0 -13.84538,9.425052000000001,0 -15.12702,10.87243,0 -16.17665,11.01605,0 -16.5081,11.28123,0 -16.36448,11.88337,0 -16.83957,12.41371,0 -16.82851,13.87214,0 -17.2475,14.67323,0 -17.45626,14.64857,0 -17.53723,14.75611,0 -17.16694,14.90305,0 -16.87834,15.225,0 -16.53723,15.77584,0 -16.52768,16.06025,0 -16.53723,16.30166,0 -16.47278,16.48222,0 -16.46583,16.61971,0 -16.17556,17.25416,0 -16.06945,17.58972,0 -16.02862,18.08056,0 -16.05778,18.43472,0 -16.13805,18.65389,0 -16.18806,18.93945,0 -16.28139,19.12777000000001,0 -16.35111,19.20556,0 -16.46306,19.2554,0 -16.53566,19.38283,0 -17.05233,20.76409,0 -17.10528,20.84806,0 -16.94416,21.73972,0 -16.95945,21.82222,0 -16.85334,22.07139,0 -16.71944,22.26082,0 -16.66889,22.29639,0 -16.62806,22.27361,0 -16.50028,22.32221,0 -16.42889,22.51611000000001,0 -16.35917,22.56806,0 -16.30361,22.87555,0 -16.18973,22.94221,0 -16.15416,23.01639,0 -16.15167,23.06888,0 -16.21612,23.08388,0 -16.13584,23.17917,0 -15.92583,23.57722,0 -15.76278,23.79138,0 -15.78167,23.91,0 -15.79028,23.85806,0 -15.86972,23.82861000000001,0 -15.94334,23.68222,0 -16.00167,23.64389,0 -15.91167,23.82195,0 -15.7625,23.95694,0 -15.61417,24.02778,0 -15.29639,24.3336,0 -15.18028,24.48805000000001,0 -15.03139,24.54167,0 -14.98694,24.63639,0 -14.90111,24.68805,0 -14.83473,24.91528,0 -14.82666,25.30916,0 -14.57629,25.84186,0 -19.57629,25.84186,0 -20.79591,25.84186,0 -20.79591,29.7338,0 -18.66778,34.25829,0 -16.53966,38.78279,0 -15.07814,41.89004,0 -10.07815,41.89004,0 -8.882225999999999,41.89004,0 -8.865278999999999,41.87554,0 -8.745011999999999,41.95250000000001,0 -8.606942999999999,42.05916,0 -8.327232,42.08528,0 -8.201223000000002,42.15273,0 + + + 1 + + + + + +-21.72161,75.96755,0 -21.86051,75.84662,0 -22.03397,75.85133,0 -22.16084,75.98069,0 -22.16067,76.15807000000001,0 -22.11516,76.25364,0 -22.03279,76.31946000000001,0 -21.93032,76.3443,0 -21.82695,76.32351,0 -21.74206,76.26098,0 -21.69154,76.16843000000002,0 -21.68487,76.06319000000001,0 -21.72161,75.96755,0 + + + 1 + + + + + +7.516629,69.90000000000001,0 7.516629,64.90000000000001,0 7.516629,63.25726,0 5.039118,62.19351,0 4.799088000000001,61.86831,0 4.590036,61.01659999999999,0 4.651983,60.7456,0 4.930722,60.25007,0 5.108805,59.16606000000001,0 5.45724,58.68601000000001,0 5.681772000000001,58.48469,0 6.595425,58.0511,0 7.013538000000001,57.97367,0 7.499043000000001,57.95962999999999,0 7.499043000000001,53.79065000000001,0 6.866424,53.69189,0 6.262488000000001,53.52154,0 5.495949,53.46734,0 5.023638,53.33572000000001,0 4.698432000000001,53.07247,0 4.551318,52.49174,0 4.319037,52.18204,0 3.978351,51.97298,0 3.428613,51.53938,0 3.072447,51.32258000000001,0 2.437524,51.08255,0 1.77939,50.97416,0 1.547109,50.88124000000001,0 1.52001,50.25794,0 1.396116,50.10309,0 1.016721,49.94823000000001,0 0.575379,49.8708,0 0.149526,49.71595,0 0.017901,49.46043000000001,0 -0.013077,49.33654000000001,0 -0.1989,49.29783000000001,0 -0.44667,49.35977,0 -1.18224,49.43721,0 -1.251927,49.72369000000001,0 -1.975878,49.74305,0 -1.882962,49.44108,0 -1.720368,49.23201,0 -1.604223,48.66679000000001,0 -1.828764,48.71325,0 -2.308815,48.71325,0 -2.479167,48.67454000000002,0 -2.66499,48.58163,0 -2.804364,48.67454000000002,0 -2.966967,48.88359000000001,0 -3.137301,48.91456,0 -4.058703,48.77519,0 -5.173668000000001,48.4887,0 -5.142699,48.41902,0 -4.732326000000001,48.0164,0 -4.337442,47.77636,0 -3.865130999999999,47.76862,0 -3.493476,47.61377,0 -3.253446,47.27309,0 -2.529495,47.25373,0 -2.297205,46.97499,0 -2.428839,46.72721,0 -1.778436,46.44073,0 -1.522926,46.18522000000001,0 -1.267407,45.71291,0 -1.204236,45.52971,0 -1.234737,45.14534,0 -1.338453,44.26832,0 -1.480338,43.68816000000001,0 -1.530639,43.54382,0 -1.619874,43.43629,0 -1.780839,43.38888,0 -2.130552,43.28916,0 -2.19834,43.31305,0 -2.295558,43.2961,0 -2.638053,43.4125,0 -2.687778,43.38139,0 -2.752497,43.45499,0 -2.941389,43.43556,0 -3.034998,43.37472,0 -3.020832,43.32861,0 -3.325284,43.41833,0 -3.422502,43.40972,0 -3.450834,43.43527,0 -3.462498000000001,43.39389,0 -3.482784000000001,43.42999,0 -3.430557,43.46444,0 -3.585555,43.51027,0 -3.719718,43.47166,0 -3.813057,43.40361,0 -3.83166,43.43943,0 -3.766392000000001,43.46999,0 -3.810285,43.49249,0 -3.944718,43.46778,0 -3.989448,43.43027000000001,0 -4.016943,43.44777,0 -4.025286,43.40554,0 -4.051395,43.4425,0 -4.21695,43.39389,0 -4.351941,43.40388,0 -4.383891000000001,43.39083,0 -4.371111,43.37028,0 -4.410279,43.40193,0 -4.514553,43.39634,0 -5.121108,43.48916000000001,0 -5.207499,43.47778,0 -5.288607000000001,43.53388,0 -5.365278,43.53917,0 -5.372667,43.51369,0 -5.418612,43.49694,0 -5.381109,43.5261,0 -5.398056,43.5525,0 -5.677785,43.54388,0 -5.844717000000001,43.65527,0 -5.954715,43.58055,0 -6.094998000000001,43.56194000000001,0 -6.235839,43.59499,0 -6.476949,43.55111,0 -6.943338,43.57777,0 -7.019442,43.56417,0 -7.002225000000001,43.53027,0 -7.044822000000001,43.4904,0 -7.045281,43.55943,0 -7.231113000000001,43.57028,0 -7.264998,43.54222,0 -7.248888000000001,43.57916,0 -7.365834,43.67611,0 -7.473609000000001,43.70555,0 -7.46361,43.72639,0 -7.551945,43.72861000000001,0 -7.595838,43.66611000000001,0 -7.629714000000001,43.74778,0 -7.693767,43.73127,0 -7.658892,43.76972,0 -7.683606,43.79277,0 -7.812513,43.71458,0 -7.812513,46.89045,0 -7.812513,51.89045000000001,0 -8.525547,51.58981000000001,0 -9.50454,51.40962,0 -9.828864000000001,51.43965,0 -10.24928,51.55978,0 -10.42346,51.86608,0 -10.65169,52.04025,0 -9.948978,52.56879000000001,0 -9.68472,52.71294,0 -9.498528000000002,52.94116,0 -9.8649,53.12735000000001,0 -10.18322,53.39763,0 -10.32736,53.58982,0 -10.29734,53.98021000000001,0 -10.25529,54.12435000000001,0 -10.12917,54.26851,0 -9.834866999999999,54.36460000000001,0 -9.054081,54.29253,0 -8.807823000000001,54.70094,0 -8.567595000000001,55.00724,0 -8.261279999999999,55.27752,0 -7.806969000000001,55.35279,0 -7.806969000000001,57.83205,0 -7.806969000000001,62.83205,0 -12.54215,62.84239,0 -17.54214,62.85332,0 -22.54213,62.86423,0 -25.28129,62.86423,0 -25.28129,67.4954,0 -22.51389,67.4954,0 -22.5117,67.49539,0 -17.51171,67.48272,0 -12.51173,67.47004,0 -7.511742000000002,67.45737,0 -7.511742000000002,69.90000000000001,0 -7.511742000000002,74.89999,0 -7.511742000000002,79.90000000000001,0 -7.511742000000002,84.90001,0 -7.511742000000002,89.90000000000001,0 -6.572475,89.90000000000001,0 -5.633190000000001,89.90000000000001,0 -4.693914000000001,89.90000000000001,0 -3.754647,89.90000000000001,0 -2.815371,89.90000000000001,0 -1.876104,89.90000000000001,0 -0.936828,89.90000000000001,0 0.002448,89.90000000000001,0 0.9417150000000001,89.90000000000001,0 1.880991,89.90000000000001,0 2.820267,89.90000000000001,0 3.759534,89.90000000000001,0 4.69881,89.90000000000001,0 5.638086,89.90000000000001,0 6.577353,89.90000000000001,0 7.516629,89.90000000000001,0 7.516629,84.90001,0 7.516629,79.90000000000001,0 7.516629,74.89999,0 7.516629,69.90000000000001,0 + + + 1 + + + + + GMT +01:00 + + +]]> + #khStyle0100 + + + + +22.54661000000001,89.90000000000001,0 22.54661000000001,84.90001,0 22.54661000000001,81.51716999999999,0 27.54661,81.51716999999999,0 32.54661,81.51716999999999,0 33.89268,81.51716999999999,0 33.89268,76.51716999999999,0 33.89268,75.84414,0 28.89267,75.84414,0 23.89267,75.84414,0 22.54661000000001,75.84414,0 22.54661000000001,70.84514,0 23.95011,71.17124,0 24.72286,71.15327000000001,0 25.9988,71.18922000000001,0 28.20923,71.09936999999999,0 28.92806,70.93761000000001,0 30.18603,70.73994,0 31.17443,70.36256,0 30.85484,69.7923,0 30.89805,69.70555,0 30.95472,69.68138,0 30.94583,69.58222000000001,0 30.91,69.54886999999999,0 30.52916,69.5461,0 30.20361,69.66388000000001,0 30.10333,69.66306,0 30.07277,69.6311,0 30.14277,69.62833000000001,0 30.185,69.58275999999999,0 30.09777,69.50333000000001,0 29.945,69.43053999999999,0 29.31,69.31527,0 29.32167,69.24554000000001,0 29.23916,69.1075,0 29.06333,69.02916999999999,0 28.95734,69.05162,0 28.78694,69.11915999999999,0 28.81916,69.23193000000001,0 29.29972,69.48027,0 29.1275,69.68582000000001,0 28.37972,69.8275,0 28.32332,69.88749,0 28.09417,69.93859000000001,0 27.97916,70.00664999999999,0 27.94416,70.08027,0 27.87305,70.08804000000001,0 27.57333,70.06887999999999,0 27.53833,70.03525999999999,0 27.3,69.99055,0 27.29194,69.95,0 27.06889,69.90860000000001,0 26.80658,69.95206,0 26.47056,69.93527,0 26.37806000000001,69.85444,0 26.15583,69.74249,0 25.97834,69.70193,0 25.94194,69.66722,0 25.97416,69.63527000000001,0 25.9575,69.59027,0 25.85277,69.54666,0 25.87416,69.48636999999999,0 25.82666,69.43638,0 25.83361,69.38416000000001,0 25.755,69.34220999999999,0 25.71333,69.25526000000001,0 25.73222,69.10916,0 25.81277,69.0175,0 25.65277,68.90639,0 25.58555,68.87887000000001,0 25.40695,68.88638,0 25.21445,68.81749000000001,0 25.15472,68.76778,0 25.10334,68.63472,0 24.95523,68.60391,0 24.89566,68.5582,0 24.75445,68.66025999999999,0 24.35139,68.71053000000001,0 23.97639,68.83249000000001,0 23.83,68.82999,0 23.69277,68.71222,0 23.22500000000001,68.62971,0 23.06389,68.69555,0 22.80277,68.69138,0 22.55,68.73779,0 22.39833,68.71111000000001,0 22.34667,68.8447,0 21.68195,69.28471,0 21.32083,69.32611,0 21.055,69.22861,0 21.02806,69.20805,0 21.04222,69.16082,0 21.11305,69.10805000000002,0 21.05944,69.03444,0 20.73833,69.09636999999999,0 20.58093,69.0603,0 20.60417,69.05305,0 20.86666,69.00499000000001,0 20.93889,68.95834000000001,0 20.88888,68.92583000000002,0 20.89527,68.89361,0 21.08139,68.86665000000001,0 21.30195,68.75555,0 21.40666,68.74361,0 21.46556,68.67805,0 21.62306,68.64942000000001,0 21.7575,68.57693,0 21.89722,68.56999,0 22.05056,68.47915999999999,0 22.33471,68.47275999999999,0 22.8236,68.38805000000001,0 23.14222,68.23000999999999,0 23.15138,68.12277,0 23.30722,68.13916,0 23.39445,68.0425,0 23.65695,67.95081999999999,0 23.64472,67.91306,0 23.48333,67.86305,0 23.48083,67.72665000000001,0 23.55361,67.58749,0 23.47195,67.55638,0 23.42889,67.47584000000001,0 23.48695,67.43804,0 23.54917,67.45332999999999,0 23.76778,67.41611,0 23.74472,67.36834,0 23.77333,67.31444000000001,0 23.60555,67.25943,0 23.58445,67.22387000000001,0 23.61028,67.20166,0 23.57167,67.15666,0 24.00777,66.80055,0 23.89,66.74303999999999,0 23.87861,66.55722,0 23.72527,66.50082999999999,0 23.63917,66.43053999999999,0 23.72222,66.20027,0 23.9125,66.14833,0 23.9486,66.10138000000001,0 24.16601,65.8115,0 20.69736,63.31795000000001,0 19.33158,60.19100000000001,0 19.36751,59.65187,0 21.30838,59.61593000000001,0 20.94284,55.2872,0 20.98481,55.27655,0 21.26394,55.24899,0 21.38128,55.28709,0 21.50389,55.19332,0 21.64027,55.18472,0 21.86305,55.09194,0 22.00972,55.08778,0 22.06194,55.02749000000001,0 22.19722000000001,55.06166,0 22.5992,55.07113,0 22.64082000000001,54.96638,0 22.73222000000001,54.96249,0 22.77056,54.93888,0 22.75555,54.92055000000001,0 22.83499000000001,54.90166,0 22.86916,54.82333,0 22.84249,54.77749,0 22.74055,54.72777000000001,0 22.69832,54.58943000000001,0 22.69444,54.47332000000001,0 22.78588,54.36384,0 22.85611,54.4086,0 22.98749000000001,54.38917000000001,0 23.06166,54.35167,0 23.06611,54.30804,0 23.14249,54.31054,0 23.35028000000001,54.23888000000001,0 23.48444,54.13833000000001,0 23.51777,54.03028,0 23.47528000000001,53.99110000000001,0 23.50404,53.94704,0 23.67472,53.4911,0 23.81472,53.25444,0 23.91055,53.16721,0 23.87805000000001,53.07555,0 23.93305,53.01417,0 23.91527,52.91888,0 23.94083,52.73220000000001,0 23.75389,52.61583000000001,0 23.59722,52.59639,0 23.39722,52.51445,0 23.1654,52.28227,0 23.20638,52.22526,0 23.49304,52.17416000000001,0 23.51472,52.1236,0 23.63861,52.07944,0 23.67277,51.99138,0 23.61173,51.91397,0 23.59472,51.8336,0 23.62944,51.80471,0 23.55556,51.74943,0 23.53499,51.65359000000001,0 23.56138,51.5425,0 23.60463,51.52769,0 23.69306,51.40471,0 23.63611,51.30110000000001,0 23.86694,51.14861,0 23.86277,51.09833,0 23.96638,50.94887,0 24.14471,50.85804,0 24.11472,50.83138000000001,0 23.97277,50.82805000000001,0 23.9525,50.79472,0 24.07972,50.70499000000001,0 24.13277,50.54445000000001,0 24.02611,50.49388,0 23.99166,50.40721,0 23.70388,50.37833,0 23.67694,50.32444,0 23.14611,49.98305,0 22.68607,49.5771,0 22.65611,49.51972,0 22.69222,49.42333000000001,0 22.73833,49.39027,0 22.76027,49.29528,0 22.70028,49.16555,0 22.73472,49.17722000000001,0 22.87611,49.09,0 22.88607,49.00292,0 22.76916,49.05332,0 22.67417,49.04416000000001,0 22.59805,49.09109999999999,0 22.55805,49.07944,0 22.53721,48.99554,0 22.46749,48.97860000000001,0 22.37694,48.85194,0 22.38917,48.79722,0 22.34805,48.76417000000001,0 22.32888,48.68694000000001,0 22.15888,48.58027,0 22.15145,48.41192000000001,0 22.26889,48.40721,0 22.26028,48.36082,0 22.31944,48.36166,0 22.31888,48.31416000000001,0 22.37861,48.24554,0 22.50445,48.24749000000001,0 22.57528,48.19443,0 22.62116,48.10163,0 22.7975,48.11472,0 22.8825,48.04694,0 22.85056,47.98083,0 22.8948,47.95454,0 22.77084,47.87943,0 22.77444,47.8364,0 22.65361,47.77638000000001,0 22.45444,47.79639000000001,0 22.42139,47.74389,0 22.27694,47.72861000000001,0 22.18639,47.59861000000001,0 22.01527000000001,47.51445,0 22.00972,47.38083,0 21.9225,47.35443,0 21.79084,47.12028000000001,0 21.65111,47.02972000000001,0 21.69582,47.00082,0 21.67167,46.95138,0 21.59972000000001,46.91805000000001,0 21.60527,46.85722000000001,0 21.51972,46.81527,0 21.48806,46.75278000000001,0 21.52194,46.71277000000001,0 21.44194,46.68194,0 21.40500000000001,46.62111000000001,0 21.32666,46.61999,0 21.26056,46.49528000000001,0 21.29222,46.42027000000001,0 21.19721,46.39139,0 21.17667,46.29556,0 21.05944,46.23917,0 20.82028,46.27472,0 20.75332,46.23888000000001,0 20.76305,46.19917000000001,0 20.72056,46.19166,0 20.72056,46.16555,0 20.62472,46.13027000000002,0 20.48694,46.18110999999999,0 20.47805,46.14972,0 20.34027,46.15944,0 20.26102,46.11486,0 20.37805,45.97806,0 20.59167,45.89417000000001,0 20.71334,45.74389,0 20.80139,45.76416,0 20.79888,45.65667,0 20.76666,45.60999,0 20.82361,45.53249,0 20.78305,45.48472,0 21.04889,45.31639,0 21.16306,45.30972,0 21.2675,45.23278,0 21.41666,45.21472000000001,0 21.51361,45.15111000000001,0 21.51277,45.12333,0 21.46028,45.10277,0 21.44722000000001,45.035,0 21.36695,45.00832,0 21.54083,44.93861,0 21.55861,44.89611,0 21.36611,44.86444,0 21.40040000000001,44.78082,0 21.58834,44.76332000000001,0 21.64944,44.65778,0 21.99389,44.63556,0 22.08444,44.50306,0 22.14638,44.47916,0 22.17694,44.48194000000001,0 22.31361,44.66417,0 22.47916,44.71027,0 22.76489000000001,44.55901,0 22.69958,44.52252,0 22.59027,44.54916,0 22.54611,44.4875,0 22.45734,44.47435,0 22.54972,44.32306,0 22.6875,44.27777,0 22.68144,44.2247,0 22.61667,44.17278,0 22.6225,44.07083,0 22.41695,44.00695,0 22.35945,43.81694,0 22.4275,43.68861,0 22.49555000000001,43.64555,0 22.49555000000001,43.57028,0 22.54333000000001,43.4725,0 22.76666,43.38582,0 22.90444000000002,43.23082,0 23.00721,43.19611,0 22.96639,43.10167,0 22.79083,42.98527,0 22.74556000000001,42.89361,0 22.525,42.87861,0 22.44222,42.82167,0 22.50139,42.73916,0 22.46111,42.6925,0 22.43861,42.57471000000001,0 22.55805,42.47916,0 22.45639,42.34027,0 22.36527,42.32389,0 22.5211,42.14861,0 22.67528,42.0675,0 22.86444,42.02722,0 22.89584,41.88527,0 22.96193,41.77861,0 23.03277,41.72834000000001,0 22.9525,41.63444,0 22.96083,41.3586,0 22.77222,41.32444,0 22.72917,41.14471,0 22.6725,41.18777,0 22.58555,41.11944,0 22.33417,41.12722,0 22.25667,41.17139,0 22.13111,41.12500000000001,0 22.06667,41.15834,0 21.91611,41.09527,0 21.91195,41.04943,0 21.80416,40.97777,0 21.79222,40.93278,0 21.69445,40.93805,0 21.6,40.87277,0 21.41972,40.91917,0 21.34305,40.87193,0 20.98349,40.8559,0 20.96194,40.77166,0 21.05194,40.67666000000001,0 21.04138,40.56195,0 20.94556,40.46694,0 20.84889,40.47916,0 20.78889,40.42832,0 20.78972,40.36083,0 20.71306,40.27833,0 20.72111,40.22305,0 20.67861,40.18527,0 20.67195,40.09805,0 20.45,40.07249,0 20.39416,39.99917000000001,0 20.3161,39.99334,0 20.41445,39.82443,0 20.38138,39.78722,0 20.29138,39.80667,0 20.32083,39.7336,0 20.26444,39.66916000000001,0 20.19916,39.64472,0 20.01002,39.6912,0 19.98255,39.68724,0 19.95083,39.78693,0 19.57928,39.90293,0 19.37265,39.8712,0 19.36993,39.84311,0 19.80221,39.58348,0 19.87652,39.44391,0 20.07227,39.36417,0 20.13298,39.19515,0 20.2381,39.1222,0 20.49728,39.20377,0 20.73834,38.90834,0 20.72928,38.86393,0 20.63178,38.84898,0 20.54984,38.68631000000001,0 20.51631,38.3501,0 20.48369,38.32835,0 20.44472,38.36641,0 20.39216,38.36551000000001,0 20.31669,38.18789,0 20.37856,38.13986,0 20.45741,38.14892,0 20.51087,38.09272000000001,0 20.61781,37.81678,0 20.68738,37.72452,0 20.80903,37.64777,0 20.99752,37.69217,0 21.30836,37.62784,0 21.36454,37.6464,0 21.54217,37.54129,0 21.67267,37.33829,0 21.57297,37.21142,0 21.53381,37.02636,0 21.70063,36.72363,0 21.79948,36.68655,0 21.98484,36.77306,0 21.94816,36.8444,0 21.95903,36.9749,0 22.04059,37.01296,0 22.13302,37.00752,0 22.12033,36.90784,0 22.23996,36.84983,0 22.32878,36.7139,0 22.35234,36.64503,0 22.33602000000001,36.51816,0 22.3926,36.43942,0 22.50257,36.37666,0 22.50257,32.79314,0 23.12222,32.62666,0 23.09833,32.52166,0 23.14555,32.46694000000001,0 23.13333,32.39666,0 23.09306,32.42667,0 23.08139,32.33277,0 23.20889,32.27555,0 23.30916,32.15861,0 23.30778,32.21861,0 23.50166,32.17139,0 23.72639,32.17472,0 23.98639,32.09833,0 23.96778,32.0675,0 24.09472,32.00111,0 24.54305,31.98527,0 24.7275,32.02693,0 24.97389,31.97,0 25.03611,31.92445,0 25.02555,31.84139,0 25.15166,31.64694,0 25.06972,31.58167,0 25.04222,31.49972,0 24.86833,31.375,0 24.86945,31.15639,0 25.01916,30.7875,0 24.92611000000001,30.50611,0 24.78082,30.33388,0 24.70667,30.16861,0 24.83472,29.87666,0 24.8125,29.78445,0 24.88694,29.66389,0 24.8775,29.50638,0 24.99777,29.24888,0 24.9989,26.99969000000002,0 25.00142,21.99969,0 25.00083,19.99916,0 24.00275,19.49907,0 23.99981,18.7543,0 23.9996,15.69871,0 23.60889,15.75833,0 23.35694,15.68166,0 23.11816,15.71029,0 22.93722,15.56194,0 22.92305,15.48722,0 22.99834,15.35639,0 22.93583,15.11611,0 22.84916,15.07834,0 22.75332,14.97694,0 22.7389,14.90278,0 22.67056,14.85945,0 22.7025,14.69139,0 22.47,14.62945,0 22.38416,14.55416,0 22.38138,14.52306,0 22.44556,14.47972,0 22.46972,14.34472,0 22.43444,14.30972,0 22.44389,14.27222,0 22.55527,14.23194,0 22.555,14.12555,0 22.23833,13.96833,0 22.19833,13.9225,0 22.08444,13.77916,0 22.13861,13.72806,0 22.15361,13.63444,0 22.22472,13.57195,0 22.23056,13.47889,0 22.29416000000001,13.35861,0 22.15972,13.19027,0 22.02055,13.13779,0 21.94333,13.05361,0 21.82777,12.7975,0 21.95277,12.64389,0 22.14056,12.65527,0 22.22333,12.74722,0 22.46694,12.62166,0 22.38389,12.46527,0 22.43278,12.40333,0 22.50139,12.17695,0 22.47666,12.03416,0 22.56361,12.07471,0 22.64082000000001,12.07111,0 22.56167,11.62166,0 22.64195,11.51611,0 22.77555,11.46222,0 22.79111,11.40167,0 22.93084,11.41583,0 22.97083,11.28306,0 22.9425,11.0925,0 22.86651,10.92244,0 23.00945,10.69861,0 23.30389,10.45916,0 23.66916000000001,9.866942,0 23.69471,9.671659999999999,0 23.62333,9.535275,0 23.63138,9.449442,0 23.66445,9.440837999999999,0 23.65222,9.279999,0 23.55639,9.181664,0 23.49277,9.174168,0 23.44861,9.025002000000001,0 23.50361,8.959716000000002,0 23.56528000000001,9.005281999999999,0 23.58305,8.988605,0 23.58167,8.906112,0 23.49833,8.77833,0 23.51777,8.714159,0 23.63305,8.736947000000001,0 23.73916,8.705276,0 23.82389,8.727785000000001,0 24.25333,8.691110999999999,0 24.23027,8.624995999999999,0 24.26917,8.583055999999999,0 24.16584,8.477783000000001,0 24.14027,8.375832000000001,0 24.17721,8.316108,0 24.36111,8.247221,0 24.46,8.271386,0 24.54583,8.204715,0 24.66,8.218610999999999,0 24.86555,8.165285000000001,0 24.94277,8.083888999999999,0 24.97333,7.992774,0 25.08027,7.897500000000001,0 25.18611,7.901946,0 25.25833,7.840836,0 25.29611,7.65,0 25.18389000000001,7.583336000000002,0 25.20695,7.497503,0 25.33111,7.425279,0 25.36555,7.348338,0 25.465,7.280001000000001,0 25.53139,7.277786,0 25.59389,7.216388,0 25.81389,7.147214000000001,0 25.81971,7.108335000000001,0 26.04834,6.998336,0 26.10083,6.841106,0 26.40628,6.63525,0 26.28916,6.468894,0 26.31361,6.457769000000001,0 26.30778000000002,6.383051,0 26.39527,6.307785,0 26.45944,6.294446000000001,0 26.47611,6.224714,0 26.52361000000001,6.221106,0 26.52361000000001,6.173613,0 26.4375,6.077772,0 26.51416,6.109722,0 26.55445,6.033608,0 26.80861,5.980004,0 26.83945,5.898338,0 26.91027,5.899446000000001,0 26.94972,5.846949000000001,0 27.00111,5.862501,0 27.04917,5.789997,0 27.14278,5.771943,0 27.24084,5.647779000000001,0 27.23389,5.588334,0 27.28166,5.578613,0 27.23584,5.428610000000001,0 27.25472,5.331392,0 27.3,5.22611,0 27.45806,5.083613,0 27.45527,5.016392,0 27.39361,5.089167,0 27.08417,5.204159,0 26.93777,5.141106,0 26.86777,5.029163,0 26.73166,5.092784,0 26.48889,5.04639,0 26.38639,5.145552,0 26.29222,5.141394,0 26.13277,5.257215,0 26.05694,5.192504,0 25.97333,5.231663000000001,0 25.9,5.166945,0 25.87583,5.217497,0 25.82583,5.195556,0 25.79083,5.263893,0 25.74916,5.241941,0 25.54222,5.381387,0 25.53833,5.350554,0 25.36195,5.314715000000001,0 25.37555,5.294717,0 25.31056,5.19111,0 25.34945,5.144714,0 25.30832,5.032503,0 25.17583,4.995278,0 25.13361,5.017778000000001,0 25.07027,4.945832,0 24.95888,4.987215000000001,0 24.73445,4.910841,0 24.65056,4.92111,0 24.66111,4.964445,0 24.52556,5.077214000000001,0 24.44750000000001,5.105834,0 24.42555,5.065838,0 24.39417,5.115554,0 24.355,5.054715,0 24.40056,5.030001,0 24.28611,4.994999,0 24.25611,4.929443,0 24.2275,4.960278000000001,0 24.15194,4.900004,0 24.10555,4.920002,0 23.98195,4.855275,0 23.95417,4.873337,0 23.94222,4.809996,0 23.83027,4.82084,0 23.58445,4.734449,0 23.44166,4.653612,0 23.42639,4.591943,0 23.38556000000001,4.587777,0 23.26833,4.627214,0 23.1825,4.727222,0 23.10000000000001,4.70528,0 23.0225,4.743053,0 22.97500000000001,4.831388,0 22.89584,4.821110000000001,0 22.85582000000001,4.706945,0 22.77584,4.706666,0 22.69027000000001,4.483611,0 22.59445,4.470551,0 22.60972,4.358889,0 22.54111,4.28111,0 22.53861,4.218894,0 22.4536,4.144580000000001,0 22.45972,4.137497,0 22.56111,4.101389,0 22.68722,3.998050999999999,0 22.75861,3.991391000000001,0 22.76555,3.905,0 22.85806,3.858604999999999,0 22.99083,3.883337,0 23.03555,3.860559,0 23.14722,3.896108,0 23.35889,3.809448,0 23.39943,3.835278000000001,0 23.515,3.825836,0 23.48695,3.738338,0 23.36971,3.615839,0 23.17111,3.678056000000001,0 23.03750000000001,3.547503,0 22.92861,3.548051000000001,0 22.67834,3.453893,0 22.62361,3.388896,0 22.64333,3.325284,0 22.79639,3.259449,0 22.77972,3.063887,0 22.81472000000001,2.996109,0 22.86417000000001,3.011947999999999,0 23.00111,3.161664000000001,0 23.08195,3.147218,0 22.98472,2.857779,0 23.00389,2.757221,0 22.96,2.672216,0 23.03806,2.558051,0 23.12666,2.502503,0 23.35945,2.523887,0 23.4225,2.451941,0 23.6275,2.330837,0 23.65138,2.192498,0 23.34389,2.251395000000001,0 23.09027,2.093894,0 22.97583,2.184165,0 22.86084,2.045835,0 22.75722,2.010284,0 22.69972,2.034162,0 22.6475,2.109447,0 22.57222000000001,2.110283,0 22.58861,2.048606,0 22.51667,1.916387,0 22.47277,1.693889,0 22.31111,1.557503,0 22.28639,1.503332,0 22.4339,1.489715,0 22.62416,1.361663,0 22.81472000000001,0.9963894000000001,0 22.86139,0.6711115,0 22.93528,0.5708334000000001,0 22.9936,0.3750025000000001,0 23.41361,-0.2336045,0 23.29389,-0.3172145,0 23.13,-0.2808366,0 22.97027,-0.4063866,0 23.21778,-0.4249986,0 23.26917,-0.4952795999999999,0 23.46778000000001,-0.4386065,0 23.62945,-0.6358325,0 23.48555,-0.6988865,0 23.35611,-0.8072196,0 23.52667,-0.9758345000000001,0 23.72972,-1.08334,0 23.77278,-1.179163,0 23.94889,-1.306666,0 24.10583,-1.384723,0 24.30388,-1.393057,0 24.37583,-1.538893,0 24.4214,-1.786798,0 24.03527,-1.73278,0 23.98527,-1.769167,0 23.83777,-1.765,0 23.78306,-1.806661,0 23.77472,-1.917495,0 23.69805,-1.931392,0 23.69389,-2.018889,0 23.5,-2.009998,0 23.22111,-2.085552,0 23.10944,-1.945837,0 23.03277,-1.928053,0 22.93666,-1.962216,0 22.87028,-1.88416,0 22.67972,-1.806661,0 22.62556,-1.801108,0 22.50972000000001,-1.958887,0 22.185,-1.903339,0 22.16638,-1.942219,0 22.28722000000001,-2.445553,0 22.25139,-2.466946,0 22.19861,-2.447784,0 22.19055000000001,-2.313334,0 22.13972,-2.276389,0 22.0486,-2.370835,0 21.95194,-2.415555,0 21.89883,-2.490597,0 21.82688,-2.529217,0 21.46972,-2.335284,0 21.44083,-2.480554,0 21.24555,-2.512783000000001,0 21.00686,-2.48896,0 20.95916,-2.588608,0 20.95417,-2.692783,0 20.82945,-2.848887,0 20.65611000000001,-3.307221999999999,0 20.66917,-4.151665,0 20.50944,-4.254166000000001,0 20.37444,-4.295278,0 20.3375,-4.397779,0 20.26277,-4.395555,0 20.22445,-4.335003,0 20.17777,-4.33278,0 20.12861,-4.278889,0 20.03889,-4.278051,0 20.03333,-4.300551,0 20.11889,-4.500837,0 20.06222,-4.595832,0 20.05445,-4.769164,0 20.19166,-5.159161,0 20.19639,-5.273613,0 20.14305,-5.40361,0 20.18,-5.684445000000001,0 20.11222,-5.834448,0 20.05305,-5.865004,0 20.01974,-5.942214,0 19.84027,-6.031107000000001,0 19.68847,-6.187500000000002,0 19.73667,-6.575553000000002,0 19.9325,-6.842503,0 19.96277,-6.995556000000001,0 20.31138,-6.99472,0 20.3325,-6.914449,0 20.62975,-6.913881,0 20.54306,-7.124445,0 20.53861,-7.284483,0 21.78295,-7.280848,0 21.81555,-7.316110000000001,0 21.85388,-7.425559000000001,0 21.85111,-7.591662,0 21.77305,-7.776109,0 21.75416,-7.999444000000001,0 21.85861,-8.157781,0 21.87666,-8.279163000000001,0 21.91611,-8.308612,0 21.94,-8.496109000000001,0 21.84777,-8.949718000000001,0 21.85472,-9.229445999999999,0 21.79056,-9.405559,0 21.87472,-9.665001999999999,0 21.95639,-9.763335,0 21.985,-9.755838000000001,0 22.02138,-9.848053,0 22.1625,-9.930555,0 22.20722,-10.15416,0 22.31361,-10.37,0 22.26416,-10.50055,0 22.30334,-10.53779,0 22.30806,-10.61278,0 22.31944,-10.75973,0 22.16361,-10.86139,0 22.19361,-10.99417,0 22.24611,-11.07305,0 22.25111,-11.2525,0 22.48,-11.13333,0 22.52972,-11.03778,0 22.71667,-11.09334,0 22.86361,-11.04917,0 22.94277,-11.095,0 23.085,-11.09668,0 23.21861000000001,-11.07639,0 23.36806,-10.98278,0 23.47639,-10.95834,0 23.8639,-11.02722,0 23.98621,-10.87046,0 24.0225,-10.96889,0 24.02527,-11.28056,0 24.08445,-11.40278,0 24.03083,-11.45306,0 24.03028,-11.52639,0 23.96583,-11.655,0 24.01555,-11.81417,0 23.98416,-11.88222,0 23.975,-12.19917,0 24.035,-12.26417,0 24.05222,-12.38528,0 23.9475,-12.53723,0 23.88611,-12.77111,0 23.89389,-12.83223,0 23.99777,-12.93723,0 24.02055,-13.00639,0 21.99834,-13.00416,0 22.00015,-16.17166,0 22.12111,-16.34112,0 22.13888,-16.4925,0 22.48778,-16.77417,0 23.20167,-17.47973,0 23.47611,-17.62584,0 21.37936,-18.01489,0 21.24194,-17.93889,0 21.16389,-17.93139,0 20.95417,-17.9675,0 20.82,-18.03861,0 20.75195,-17.99611000000001,0 20.5475,-17.98168,0 20.33806,-17.85805,0 20.03583,-17.90028,0 19.92056,-17.85723,0 19.81194,-17.85833,0 19.76195,-17.8989,0 19.66166,-17.83778,0 19.55916,-17.8675,0 19.34333,-17.8475,0 19.24222,-17.80583,0 18.91584,-17.81555,0 18.75638,-17.74778,0 18.63722,-17.64473,0 18.45154,-17.38984,0 18.00055,-17.38617,0 14.20417,-17.3831,0 14.17694,-17.42028,0 13.98556,-17.42584,0 13.52471,-17.12695,0 13.52611,-17.07778,0 13.47445,-17.01194,0 13.37333,-16.96945,0 13.25166,-16.98528,0 13.16056,-16.95278,0 12.88666,-17.03361,0 12.81611,-17.10889,0 12.55722,-17.24333,0 12.45083,-17.25417,0 12.4214,-17.20361,0 12.24611,-17.22721,0 12.16778,-17.14389,0 12.13139,-17.16112,0 12.08471,-17.13528,0 11.92861,-17.18278,0 11.82584,-17.26639000000001,0 11.75278,-17.25484,0 11.7211,-17.655,0 11.80472,-18.08195,0 11.9489,-18.25639,0 12.02083,-18.47111,0 12.29611,-18.7061,0 12.46083,-18.92805,0 12.46416,-19.00418,0 12.54222,-19.06778,0 12.67,-19.295,0 12.70722,-19.41778,0 12.93167,-19.79583,0 13.05111,-20.06778,0 13.175,-20.18084,0 13.25083,-20.46584,0 13.35277,-20.64667,0 13.4,-20.85583,0 13.85361,-21.49139,0 13.87972,-21.59944,0 13.97028,-21.73167,0 13.94916,-21.78194,0 14.27777,-22.11028,0 14.39167,-22.29,0 14.51139,-22.55279,0 14.52485,-22.69206,0 14.52584,-22.91112,0 14.46278,-23.00055,0 14.43833,-22.87778,0 14.41056,-22.96723,0 14.45388,-23.1464,0 14.49833,-23.33056,0 14.49194,-23.37584,0 14.47,-23.34668,0 14.43444,-23.41778,0 14.49611,-23.58834,0 14.48445,-23.75639,0 14.51471,-23.83583,0 14.50945,-23.90473,0 14.45611,-23.9675,0 14.46333,-24.10917,0 14.61278,-24.45639,0 14.59916,-24.56555,0 14.77695,-24.79945,0 14.79277,-24.94361,0 14.83207,-24.99944,0 14.85778,-25.08723,0 14.80083,-25.285,0 14.88222,-25.5675,0 14.83777,-25.76194,0 14.91361,-25.84472,0 14.90333,-25.91055,0 14.98,-26.0575,0 14.97805,-26.12667,0 14.93861,-26.13945,0 14.96833,-26.33972,0 15.08792,-26.40098,0 15.17111,-26.5964,0 15.14194,-26.67778,0 15.13472,-26.62889,0 15.07972,-26.65,0 15.08389,-26.69861,0 15.15777,-26.90278,0 15.23471,-26.96667,0 15.29417,-27.32250000000001,0 15.46666,-27.54445000000001,0 15.53333,-27.66139,0 15.52861,-27.7275,0 15.67,-27.87139000000001,0 15.67639,-27.9339,0 15.75277,-28.03055,0 16.02778,-28.24473,0 16.35445,-28.56278,0 16.44195,-28.61834,0 16.48959,-28.57819,0 16.46972,-28.63028,0 16.56833,-28.72389,0 16.60611,-28.87195,0 16.67083,-28.90584,0 16.73277,-29.01889,0 16.81528,-29.085,0 16.84444,-29.22139,0 17.00332,-29.52445,0 17.08445,-29.83584000000002,0 17.27889,-30.34667,0 17.53944,-30.7575,0 17.61195,-30.92972,0 17.90944,-31.35973,0 18.18139,-31.67473,0 18.2786,-31.89278,0 18.35027,-32.28807,0 18.31611,-32.33501,0 18.335,-32.47834,0 18.29222,-32.62445,0 18.13175,-32.77878000000001,0 18.05361,-32.77612,0 17.96694,-32.69862,0 17.9025,-32.73333,0 17.87666,-32.80612,0 17.8675,-32.81196000000001,0 17.84527,-32.82584,0 17.87694,-32.86084,0 17.85714,-32.91527000000001,0 17.89305,-33.03111,0 17.91389,-33.04805,0 17.98333,-33.00028,0 18.03444,-33.0325,0 18.03721,-33.10196,0 18.12306,-33.20001,0 18.00167,-33.09333,0 17.95556,-33.10305,0 17.96722,-33.13472,0 18.09,-33.22501,0 18.14805,-33.35612,0 18.29471,-33.46611,0 18.31527,-33.56834,0 18.44111,-33.70667,0 18.4825,-33.89473,0 18.38,-33.91195,0 18.31027,-34.0325,0 18.35555,-34.05834,0 18.30972,-34.14918,0 18.36305,-34.18723,0 18.42027,-34.32306,0 18.4901,-34.34823,0 18.46666,-34.3289,0 18.47888,-34.23445000000001,0 18.43583,-34.16889,0 18.48805,-34.09778,0 18.60195,-34.07362,0 18.79332,-34.08667,0 18.85527,-34.15611,0 18.81417,-34.19028,0 18.84527,-34.245,0 18.80833,-34.29723,0 18.81778,-34.37778000000001,0 19.08334,-34.34639,0 19.13722,-34.29834,0 19.08334,-34.36084000000001,0 19.11222,-34.40334,0 19.21082,-34.42861,0 19.28194,-34.40973,0 19.3575,-34.50029,0 19.36333,-34.53778,0 19.29611,-34.61972,0 19.38945,-34.60196,0 19.51416,-34.67084,0 19.51639,-34.67556,0 19.65166,-34.77584,0 19.85777,-34.7525,0 19.99861,-34.82195,0 20.05722,-34.805,0 20.055,-34.7525,0 20.08972,-34.72639,0 20.21972,-34.67973,0 20.46029,-34.48223,0 20.53444,-34.45583,0 20.85222,-34.46305,0 20.85666000000001,-34.42083,0 20.80861000000001,-34.39723,0 20.9425,-34.36028,0 21.06277,-34.36389,0 21.29472000000001,-34.43389,0 21.52832,-34.3525,0 21.65556,-34.39056,0 21.8025,-34.38305,0 21.90166,-34.33611,0 21.94972,-34.22501,0 22.13416,-34.19112,0 22.11167,-34.14861000000001,0 22.15389,-34.09251,0 22.50382,-34.04004,0 22.50382,-35.54002000000001,0 22.50382,-40.54002,0 22.50382,-45.54003,0 22.50382,-50.54002,0 22.50382,-55.54003,0 22.50382,-60.54002000000001,0 22.50382,-65.54002,0 22.50382,-70.54002,0 22.50382,-73.84003,0 22.50382,-78.84003,0 22.50382,-83.84003000000001,0 22.50382,-84.89999,0 22.50382,-89.90000000000001,0 21.50615,-89.90000000000001,0 20.50847,-89.90000000000001,0 19.51079,-89.90000000000001,0 18.51312,-89.90000000000001,0 17.51545,-89.90000000000001,0 16.51776,-89.90000000000001,0 15.52009,-89.90000000000001,0 14.52242,-89.90000000000001,0 13.52473,-89.90000000000001,0 12.52706,-89.90000000000001,0 11.52938,-89.90000000000001,0 10.53171,-89.90000000000001,0 9.534033000000001,-89.90000000000001,0 8.536356,-89.90000000000001,0 7.538679000000002,-89.90000000000001,0 7.538679000000002,-88.70438,0 7.538679000000002,-83.70439,0 7.538679000000002,-78.70439,0 7.538679000000002,-73.70439000000002,0 7.538679000000002,-68.70439,0 7.538679000000002,-63.70440000000001,0 7.538679000000002,-58.70439,0 7.538679000000002,-53.7044,0 7.538679000000002,-49.50439000000002,0 7.538679000000002,-44.50439,0 7.538679000000002,-39.50439,0 7.538679000000002,-34.50439,0 7.538679000000002,-33.94561,0 7.538679000000002,-28.94561,0 7.538679000000002,-23.94561,0 7.538679000000002,-18.94561,0 7.538679000000002,-13.94561,0 7.538670000000001,-8.945614000000001,0 7.538670000000001,-3.94561,0 2.656305,-3.94561,0 2.656305,-0.6707075,0 7.538670000000001,-0.6855035,0 7.538670000000001,-0.5623475,0 7.538670000000001,4.437656,0 7.195104000000001,4.365161,0 7.018200000000002,4.374809,0 6.962769000000001,4.389164,0 6.794163000000001,4.336668,0 6.460839000000001,4.322502,0 6.431112,4.345002,0 6.410556,4.313339,0 6.111108,4.272498,0 5.931108000000001,4.340556,0 5.862222000000001,4.388607,0 5.862780000000001,4.434722,0 5.843340000000001,4.410557000000001,0 5.777784,4.454999,0 5.579442,4.659722,0 5.554719,4.71528,0 5.578056,4.718609,0 5.497497,4.805838,0 5.383890000000001,5.111946,0 5.345271,5.329998,0 5.194161,5.502222,0 5.000004,5.857496,0 4.713606,6.164721,0 4.525839,6.305004000000001,0 4.379445,6.368057,0 3.795282,6.432786000000001,0 3.370833000000001,6.385832000000001,0 2.719611,6.36551,0 1.868607,6.273612,0 1.635399,6.21872,0 1.652499,6.250283,0 1.799325,6.281054,0 1.749168,6.456663000000001,0 1.575279,6.679718,0 1.623051,6.757775,0 1.594719,6.80445,0 1.606113,6.895268,0 1.548531,6.995177,0 1.6425,6.995555000000001,0 1.655838,7.532495,0 1.634715,8.357768,0 1.613052,8.374715999999999,0 1.660833,8.496943999999999,0 1.624716,8.548056000000003,0 1.617786,9.049715000000001,0 1.567215,9.17,0 1.416663,9.321111,0 1.38861,9.492217999999999,0 1.364256,9.481346,0 1.337499,9.542501,0 1.373895,9.646667000000003,0 1.355004,9.995282,0 0.7766640000000001,10.37667,0 0.8021880000000001,10.71245,0 0.879444,10.79972,0 0.917973,10.9964,0 0.9677789999999999,10.99584,0 0.948609,11.02389,0 0.978894,11.08027,0 1.117782,11.0275,0 1.058058,11.13139,0 1.125279,11.17528,0 1.156392,11.16277,0 1.13805,11.26527,0 1.264716,11.24611,0 1.274715,11.315,0 1.303605,11.28945,0 1.351107,11.3025,0 1.328337,11.35139,0 1.439721,11.46834,0 1.56861,11.4525,0 1.609164,11.38834,0 1.868607,11.44584,0 2.014722,11.4225,0 2.193894,11.60361,0 2.310552,11.67055,0 2.308608,11.72555,0 2.366946,11.79,0 2.397924,11.89615,0 2.058336,12.35722,0 2.161665,12.41555,0 2.264166,12.4186,0 2.22084,12.59361,0 2.142504,12.69445,0 1.988892,12.73111,0 1.928052,12.70056,0 1.871667,12.60889,0 1.578339,12.63,0 1.117215,13.01111,0 0.9891630000000002,13.04722,0 0.991665,13.37167,0 1.182222,13.31277,0 1.204164,13.36805,0 1.285308,13.34995,0 1.244448,13.39305,0 1.031661,13.4625,0 0.9952830000000001,13.56806,0 0.902214,13.62278,0 0.7744410000000001,13.64416,0 0.7727850000000001,13.68832,0 0.602217,13.70389,0 0.616662,13.77805,0 0.465003,13.91361,0 0.4711050000000001,13.95555,0 0.424161,13.98361,0 0.352503,14.1214,0 0.410832,14.24584,0 0.321111,14.36278,0 0.189441,14.46472,0 0.166662,14.52306,0 0.241389,14.75221,0 0.193338,14.83583,0 0.235044,14.91506,0 0.229995,15.00251,0 0.3966660000000001,14.96056,0 0.512217,15.00083,0 0.694998,14.94221,0 0.974718,14.97861,0 1.312497,15.28666,0 2.628054,15.35055,0 3.020832,15.34195,0 3.032496,15.43306,0 3.523986,15.35816,0 3.539997,15.49722,0 3.726666,15.65277,0 3.823893,15.66527,0 3.885003,15.70917,0 3.924440999999999,15.90416,0 4.000833,15.98971,0 3.981942,16.07638,0 4.069719,16.29389,0 4.200840000000001,16.39389,0 4.198887,16.82083,0 4.21416,16.99361,0 4.2525,16.99445,0 4.245282,19.14666,0 3.331944,18.97639,0 3.114162,19.15639,0 3.196107000000001,19.25861,0 3.206664,19.32611,0 3.277215,19.38972,0 3.210003,19.56527,0 3.233052,19.82028,0 2.967219,19.95,0 2.587779,20.00166,0 2.411667,20.0575,0 2.344167,20.17777,0 2.213055,20.28139,0 2.097504,20.21889,0 1.983339,20.26028,0 1.908891,20.23139000000001,0 1.881108,20.30139,0 1.795833,20.30833,0 1.668051,20.40861,0 1.663056,20.53611,0 1.627497,20.57111,0 1.375002,20.6575,0 1.317222,20.73833,0 1.167498,20.74111,0 1.197144,21.00248,0 1.169667,21.10254,0 -0.008055,21.83055,0 -2.448333,23.48722,0 -4.806108,25.00027,0 -6.662781,26.12916,0 -8.666793,27.29046,0 -8.666667,27.66667,0 -8.667225,28.70944,0 -8.495559,28.79056,0 -8.17695,29.04084,0 -7.995555,29.11639,0 -7.644726000000001,29.385,0 -7.433892,29.39722,0 -7.298334,29.53833,0 -7.123887,29.63695,0 -6.58584,29.56722,0 -6.508611,29.63888,0 -6.474168000000001,29.83306,0 -6.217227000000001,29.79888,0 -6.145839000000001,29.8475,0 -6.002784000000001,29.82945,0 -5.89833,29.85667000000001,0 -5.560002,29.895,0 -5.351949,29.99722,0 -5.133609,30.19806000000001,0 -4.920552,30.50805,0 -4.591944,30.62639,0 -4.396941,30.64833,0 -4.16916,30.76916,0 -4.016943,30.91111,0 -3.718890000000001,30.93806,0 -3.617784,30.97667,0 -3.602214,31.09556,0 -3.724164,31.18861,0 -3.788892000000001,31.14861,0 -3.826107,31.16389,0 -3.79611,31.22167,0 -3.803895,31.33916,0 -3.724722,31.39472,0 -3.84084,31.47583,0 -3.830832,31.6775,0 -3.714714,31.71639,0 -3.511665,31.67334,0 -3.386115,31.72611,0 -2.980557,31.84416,0 -2.938059,32.02888000000001,0 -2.853891,32.08834,0 -2.331108,32.15749,0 -1.213056,32.08971,0 -1.175553,32.12083,0 -1.200834,32.17027,0 -1.295838,32.16306,0 -1.25361,32.21472,0 -1.249722,32.32695,0 -1.196109,32.40472,0 -1.119996,32.41555,0 -1.010286,32.50832,0 -1.300284,32.70055,0 -1.382778,32.72445,0 -1.542501,32.93944,0 -1.487214,32.97917000000001,0 -1.480284,33.06305,0 -1.668051,33.26111,0 -1.666665,33.38333,0 -1.600551,33.50972,0 -1.606662,33.59527,0 -1.65222,33.66277,0 -1.730556,33.70499,0 -1.680552,33.76972,0 -1.710279,33.8825,0 -1.653336,34.085,0 -1.750554,34.34945,0 -1.79334,34.37833,0 -1.686708,34.48551,0 -1.857501,34.61028,0 -1.747215,34.74722,0 -1.961388,34.87029,0 -1.993059,34.92945,0 -2.065833,34.93695,0 -2.180286,35.01222,0 -2.209446,35.08582,0 -2.419164,35.15332,0 -2.516949,35.09832,0 -2.635002,35.09972,0 -2.754999,35.13499,0 -2.885553,35.24277,0 -2.747214,35.11555,0 -2.841660000000001,35.12694,0 -2.909448,35.17638,0 -2.914722,35.27361,0 -2.962782,35.27499,0 -2.946942,35.32917,0 -2.973888,35.44027,0 -3.06639,35.28944,0 -3.332502,35.19139,0 -3.577221,35.22667,0 -3.682503,35.28778,0 -3.813894,35.20027,0 -3.892779,35.21583,0 -3.925278,35.25999,0 -4.353894,35.14611,0 -4.695840000000001,35.20888,0 -5.063337,35.40972,0 -5.171391,35.5375,0 -5.253057,35.57695,0 -5.274999,35.68111,0 -5.318892,35.695,0 -5.345838,35.84166,0 -5.395554,35.91634,0 -5.34528,36.11278,0 -5.350833,36.16,0 -5.432778,36.17417,0 -5.425281000000001,36.07083,0 -5.611662,36.00027,0 -5.693895,36.06167,0 -5.797224,36.07388,0 -5.911389,36.17916,0 -6.037497,36.18027,0 -6.318891000000001,36.53249,0 -6.291666000000001,36.5375,0 -6.239718,36.46193,0 -6.172785000000001,36.51221,0 -6.240834,36.50111,0 -6.230835,36.575,0 -6.392502,36.62639,0 -6.443613,36.71889,0 -6.337224000000001,36.79610000000001,0 -6.339717000000001,36.88944,0 -6.246387,36.89581,0 -6.347214000000002,36.89638,0 -6.364449000000001,36.79528,0 -6.515838,36.97194,0 -6.725835000000001,37.09194,0 -7.080282000000001,37.2175,0 -7.333605,37.21222000000001,0 -7.384167000000002,37.16972,0 -7.431858,37.25319,0 -7.467498,37.49082,0 -7.52445,37.55250000000001,0 -7.447779,37.65777,0 -7.422498000000001,37.75472000000001,0 -7.284996,37.86027,0 -7.254450000000001,37.98749000000001,0 -7.126947,38.00333,0 -7.103889000000001,38.04694,0 -7.006662000000001,38.02805,0 -6.939162,38.17805,0 -6.947784,38.21833000000001,0 -7.087779,38.17443,0 -7.143894,38.27027,0 -7.329717,38.44722,0 -7.248051,38.6236,0 -7.257231,38.72834,0 -7.041663,38.86861,0 -7.050285000000001,38.91082,0 -6.954795,39.02639,0 -7.004997,39.10722,0 -7.142499,39.11111,0 -7.139997000000001,39.17334,0 -7.242786000000002,39.21305,0 -7.235037000000001,39.27697,0 -7.322778,39.38833,0 -7.293609,39.46777,0 -7.38,39.49611,0 -7.390836000000001,39.53277,0 -7.505838000000001,39.60583,0 -7.532505000000001,39.66942000000001,0 -7.515000000000001,39.66611,0 -7.337502,39.64388000000001,0 -7.266942,39.67194,0 -7.017219,39.675,0 -6.98319,39.81694,0 -6.913611,39.86472,0 -6.863895,40.01555,0 -6.934725000000001,40.1075,0 -7.004718,40.12611,0 -7.027218,40.18777,0 -7.005834,40.23083,0 -6.873894,40.26332,0 -6.778611,40.36279,0 -6.848334000000001,40.44333,0 -6.790833,40.51805,0 -6.838893000000001,40.575,0 -6.797781,40.65777,0 -6.829164,40.75528,0 -6.803892,40.87416000000001,0 -6.931665000000001,41.01806,0 -6.808338,41.04056000000001,0 -6.754446000000002,41.10249,0 -6.764445,41.13083,0 -6.64389,41.24471000000001,0 -6.496947,41.26445,0 -6.381945,41.355,0 -6.388056,41.38167,0 -6.318333000000001,41.38722,0 -6.32916,41.41527,0 -6.187221,41.57972,0 -6.303609,41.66333,0 -6.442218000000002,41.68582,0 -6.497496000000001,41.65749,0 -6.551388,41.6911,0 -6.562503,41.74529,0 -6.508341,41.87389,0 -6.568335,41.88721,0 -6.544719,41.93722,0 -6.581664,41.96749,0 -6.716943,41.93666,0 -6.788052000000001,41.99167,0 -6.837498,41.94722,0 -6.982848,41.97386,0 -7.056108,41.95111,0 -7.133607,41.99499,0 -7.182783,41.97944,0 -7.200558,41.88361,0 -7.37028,41.85139,0 -7.420284,41.81332,0 -7.493058,41.87306000000001,0 -7.607781,41.83111000000001,0 -7.591662,41.87972,0 -7.692498,41.905,0 -7.880004,41.85277,0 -7.892217,41.92666,0 -8.014725,41.83388,0 -8.140554,41.80917000000001,0 -8.218610999999999,41.91361000000001,0 -8.084997000000001,42.02027,0 -8.079723,42.05416,0 -8.121942000000001,42.07944,0 -8.185554,42.06471,0 -8.201223000000002,42.15273,0 -8.327232,42.08528,0 -8.606942999999999,42.05916,0 -8.745011999999999,41.95250000000001,0 -8.865278999999999,41.87554,0 -8.882225999999999,41.89004,0 -8.898606000000001,42.10806,0 -8.967249000000001,42.46196,0 -9.041391000000001,42.52888,0 -9.027782999999999,42.57972,0 -9.086112,42.58138000000001,0 -9.020286000000001,42.70472,0 -8.85834,42.82444,0 -8.903610000000001,42.82833,0 -8.960283,42.77333,0 -9.058887,42.78472,0 -9.086112,42.73528,0 -9.140283,42.795,0 -9.101394000000001,42.82332,0 -9.14139,42.85695,0 -9.123606000000002,42.90555,0 -9.185003999999999,42.9525,0 -9.181107000000001,42.91555,0 -9.226944,42.93805,0 -9.273339,42.88694,0 -9.293336999999999,42.92249,0 -9.252504000000002,43.0061,0 -9.2925,43.04804000000001,0 -9.25389,43.05029,0 -9.218889000000001,43.10806,0 -9.165555,43.10722,0 -9.164448,43.13777,0 -9.203894999999999,43.12554,0 -9.209448,43.15277,0 -9.169731000000001,43.18583,0 -9.056664,43.18332,0 -9.010557,43.23195,0 -8.91639,43.23222,0 -8.980281,43.28139,0 -8.848053,43.32222,0 -8.843994,43.36485,0 -8.782785000000001,43.30306,0 -8.701389000000001,43.28722,0 -8.539443000000002,43.30972,0 -8.398611000000001,43.38582,0 -8.38611,43.33944,0 -8.360001000000001,43.34027,0 -8.329725,43.40388,0 -8.215551,43.33055,0 -8.213058,43.4025,0 -8.13195,43.42334,0 -8.317214999999999,43.44305,0 -8.194445999999999,43.46611,0 -8.166942000000001,43.50777,0 -8.339724,43.45693,0 -8.331660000000001,43.50889,0 -8.295282,43.52639,0 -8.319447,43.56221,0 -8.253333,43.55806,0 -8.089173000000001,43.66194,0 -8.049447000000001,43.63666,0 -8.060841,43.70361,0 -7.991946000000001,43.70555,0 -7.898058000000001,43.76416,0 -7.856109000000001,43.765,0 -7.850556,43.71472,0 -7.894449000000001,43.66638,0 -7.812513,43.71458,0 -7.683606,43.79277,0 -7.658892,43.76972,0 -7.693767,43.73127,0 -7.629714000000001,43.74778,0 -7.595838,43.66611000000001,0 -7.551945,43.72861000000001,0 -7.46361,43.72639,0 -7.473609000000001,43.70555,0 -7.365834,43.67611,0 -7.248888000000001,43.57916,0 -7.264998,43.54222,0 -7.231113000000001,43.57028,0 -7.045281,43.55943,0 -7.044822000000001,43.4904,0 -7.002225000000001,43.53027,0 -7.019442,43.56417,0 -6.943338,43.57777,0 -6.476949,43.55111,0 -6.235839,43.59499,0 -6.094998000000001,43.56194000000001,0 -5.954715,43.58055,0 -5.844717000000001,43.65527,0 -5.677785,43.54388,0 -5.398056,43.5525,0 -5.381109,43.5261,0 -5.418612,43.49694,0 -5.372667,43.51369,0 -5.365278,43.53917,0 -5.288607000000001,43.53388,0 -5.207499,43.47778,0 -5.121108,43.48916000000001,0 -4.514553,43.39634,0 -4.410279,43.40193,0 -4.371111,43.37028,0 -4.383891000000001,43.39083,0 -4.351941,43.40388,0 -4.21695,43.39389,0 -4.051395,43.4425,0 -4.025286,43.40554,0 -4.016943,43.44777,0 -3.989448,43.43027000000001,0 -3.944718,43.46778,0 -3.810285,43.49249,0 -3.766392000000001,43.46999,0 -3.83166,43.43943,0 -3.813057,43.40361,0 -3.719718,43.47166,0 -3.585555,43.51027,0 -3.430557,43.46444,0 -3.482784000000001,43.42999,0 -3.462498000000001,43.39389,0 -3.450834,43.43527,0 -3.422502,43.40972,0 -3.325284,43.41833,0 -3.020832,43.32861,0 -3.034998,43.37472,0 -2.941389,43.43556,0 -2.752497,43.45499,0 -2.687778,43.38139,0 -2.638053,43.4125,0 -2.295558,43.2961,0 -2.19834,43.31305,0 -2.130552,43.28916,0 -1.780839,43.38888,0 -1.619874,43.43629,0 -1.530639,43.54382,0 -1.480338,43.68816000000001,0 -1.338453,44.26832,0 -1.234737,45.14534,0 -1.204236,45.52971,0 -1.267407,45.71291,0 -1.522926,46.18522000000001,0 -1.778436,46.44073,0 -2.428839,46.72721,0 -2.297205,46.97499,0 -2.529495,47.25373,0 -3.253446,47.27309,0 -3.493476,47.61377,0 -3.865130999999999,47.76862,0 -4.337442,47.77636,0 -4.732326000000001,48.0164,0 -5.142699,48.41902,0 -5.173668000000001,48.4887,0 -4.058703,48.77519,0 -3.137301,48.91456,0 -2.966967,48.88359000000001,0 -2.804364,48.67454000000002,0 -2.66499,48.58163,0 -2.479167,48.67454000000002,0 -2.308815,48.71325,0 -1.828764,48.71325,0 -1.604223,48.66679000000001,0 -1.720368,49.23201,0 -1.882962,49.44108,0 -1.975878,49.74305,0 -1.251927,49.72369000000001,0 -1.18224,49.43721,0 -0.44667,49.35977,0 -0.1989,49.29783000000001,0 -0.013077,49.33654000000001,0 0.017901,49.46043000000001,0 0.149526,49.71595,0 0.575379,49.8708,0 1.016721,49.94823000000001,0 1.396116,50.10309,0 1.52001,50.25794,0 1.547109,50.88124000000001,0 1.77939,50.97416,0 2.437524,51.08255,0 3.072447,51.32258000000001,0 3.428613,51.53938,0 3.978351,51.97298,0 4.319037,52.18204,0 4.551318,52.49174,0 4.698432000000001,53.07247,0 5.023638,53.33572000000001,0 5.495949,53.46734,0 6.262488000000001,53.52154,0 6.866424,53.69189,0 7.499043000000001,53.79065000000001,0 7.499043000000001,57.95962999999999,0 7.013538000000001,57.97367,0 6.595425,58.0511,0 5.681772000000001,58.48469,0 5.45724,58.68601000000001,0 5.108805,59.16606000000001,0 4.930722,60.25007,0 4.651983,60.7456,0 4.590036,61.01659999999999,0 4.799088000000001,61.86831,0 5.039118,62.19351,0 7.516629,63.25726,0 7.516629,64.90000000000001,0 7.516629,69.90000000000001,0 7.516629,74.89999,0 7.516629,79.90000000000001,0 7.516629,84.90001,0 7.516629,89.90000000000001,0 8.456004,89.90000000000001,0 9.395379,89.90000000000001,0 10.33475,89.90000000000001,0 11.27413,89.90000000000001,0 12.2135,89.90000000000001,0 13.15287,89.90000000000001,0 14.09225,89.90000000000001,0 15.03162,89.90000000000001,0 15.97099,89.90000000000001,0 16.91036,89.90000000000001,0 17.84974,89.90000000000001,0 18.78911,89.90000000000001,0 19.72849,89.90000000000001,0 20.66786,89.90000000000001,0 21.60724,89.90000000000001,0 22.54661000000001,89.90000000000001,0 + + + 1 + + + + GMT +02:00 + + +]]> + #khStyle0200 + + + + + +28.09417,69.93859000000001,0 28.32332,69.88749,0 28.37972,69.8275,0 29.1275,69.68582000000001,0 29.29972,69.48027,0 28.81916,69.23193000000001,0 28.78694,69.11915999999999,0 28.95734,69.05162,0 28.43195,68.89694,0 28.47917,68.8736,0 28.73778,68.87582,0 28.82056,68.84444000000001,0 28.73861,68.73416,0 28.4575,68.53194000000001,0 28.69334,68.19749,0 29.35695,68.08249000000001,0 29.69167,67.81527,0 30.02861,67.69472,0 29.98972,67.67194000000001,0 29.97778,67.57249,0 29.93279,67.51389,0 29.54611,67.31055000000001,0 29.08305,66.9586,0 29.09333,66.85138000000001,0 29.35027,66.68249,0 29.42056,66.58498,0 29.54833,66.49554000000001,0 29.56792,66.42856999999999,0 29.63861,66.32249,0 29.91028,66.12694000000001,0 29.97695,65.9811,0 30.09667,65.83333,0 30.13528000000001,65.70359999999999,0 30.12388,65.66499,0 30.02444,65.69110000000001,0 29.72194,65.63805000000001,0 29.85971,65.56610000000001,0 29.74611,65.51443,0 29.7475,65.34193000000001,0 29.59638,65.24887,0 29.85361,65.21612,0 29.87028,65.18747999999999,0 29.82333,65.14888999999999,0 29.87388,65.12082,0 29.62889,65.06305,0 29.60666,65.00166,0 29.63667,64.92805,0 29.80471,64.79389000000001,0 30.14083,64.77415000000001,0 30.12055000000001,64.73054999999999,0 30.19713000000001,64.68622000000001,0 30.19917,64.65028,0 29.97500000000001,64.58110000000001,0 30.00967,64.51286,0 30.08722,64.48305000000001,0 30.05222,64.40470999999999,0 30.15611000000001,64.35415999999999,0 30.38972,64.30943000000001,0 30.45416000000001,64.25694,0 30.56084,64.24442999999999,0 30.57722,64.21581999999999,0 30.54805,64.17471000000001,0 30.61444,64.08665000000001,0 30.59528,64.04694000000001,0 30.345,63.90972000000001,0 30.25584,63.81778,0 29.99671,63.74802,0 30.48166000000001,63.47861,0 30.79639,63.40194,0 30.9625,63.30972000000001,0 31.21972,63.22306,0 31.28222,63.10917,0 31.515,62.98693,0 31.58893,62.91440999999999,0 31.4675,62.80639,0 31.25972000000001,62.50777000000002,0 30.94777,62.31138000000001,0 30.64972,62.195,0 29.99138,61.72943,0 29.83222,61.65305000000002,0 29.80916,61.60833,0 29.52555,61.48277,0 29.48639,61.42611000000002,0 29.21361,61.25332,0 28.81277,61.10334,0 28.63888,60.96611,0 28.52916000000001,60.95499,0 28.38888,60.88667000000002,0 27.80783,60.5464,0 28.01583000000001,59.4786,0 28.19389,59.37582,0 28.17035,59.30978,0 27.91254,59.27182,0 27.72499,58.98777,0 27.4936,58.88193,0 27.42611,58.81361,0 27.5425,58.41389,0 27.53916,58.36166,0 27.46471,58.29777,0 27.47416,58.21388000000001,0 27.55417,58.13276000000001,0 27.67721,58.07417000000002,0 27.64222,58.02083,0 27.69722,58.00082,0 27.68388,57.92638,0 27.82306,57.87388,0 27.75306000000001,57.83916,0 27.54583,57.81777,0 27.57277,57.80277000000002,0 27.51639,57.77333,0 27.52666,57.72276,0 27.41306,57.69055,0 27.40583000000001,57.61361000000001,0 27.34806,57.59554000000001,0 27.37205,57.53564,0 27.54722,57.53638000000001,0 27.52722,57.4386,0 27.86111,57.30222000000001,0 27.84082,57.16361,0 27.70138,57.11916000000001,0 27.7775,57.06582,0 27.64,56.84805,0 27.81555,56.87833000000001,0 27.93527,56.82721,0 27.8861,56.74722,0 28.005,56.69137,0 28.03639,56.59054,0 28.1525,56.55443000000001,0 28.11306,56.50555000000001,0 28.18972,56.44055,0 28.18444,56.37471000000001,0 28.23777,56.2711,0 28.16801,56.15015,0 28.3125,56.04999,0 28.3875,56.0961,0 28.64611,56.09361000000001,0 28.75416,55.95388000000001,0 28.84694,55.94249000000001,0 28.86944,55.98055,0 29.05943,56.03278,0 29.41222,55.95777,0 29.46443,55.91109,0 29.40693,55.89582999999999,0 29.35916,55.78943,0 29.49388,55.68888,0 29.71916,55.78249000000002,0 29.82306,55.77528,0 29.92833,55.85167000000001,0 30.14055,55.82804000000002,0 30.22611,55.8661,0 30.48971,55.79999,0 30.49416,55.76388000000001,0 30.61249,55.72027,0 30.60889,55.68138,0 30.72694,55.65639,0 30.75666,55.59665,0 30.91888,55.60833000000001,0 30.93999,55.49583,0 30.90055,55.45915999999999,0 30.93943,55.39944000000001,0 30.81361,55.29333000000001,0 31.00472,55.14332,0 30.98722,55.11166000000002,0 31.02971,55.04332,0 30.92499,55.03333,0 30.94749,54.96915,0 30.83388,54.94415,0 30.845,54.8811,0 30.78,54.79694000000001,0 31.005,54.71167,0 31.02472,54.65222,0 31.18527,54.64222,0 31.18443,54.60609,0 31.0825,54.50556,0 31.1986,54.46093000000001,0 31.23194,54.45665,0 31.31167,54.35083,0 31.33166,54.2375,0 31.54416,54.14333,0 31.76167,54.10333,0 31.79333,54.05305000000001,0 31.84416,54.06444000000001,0 31.86083,53.96333,0 31.76423000000001,53.80262,0 31.90222,53.77777,0 32.11971,53.81999,0 32.32944,53.76222000000001,0 32.37694,53.71888,0 32.45166,53.72638,0 32.51056,53.68361,0 32.41471,53.64638,0 32.44389,53.57194000000001,0 32.5975,53.4911,0 32.67054,53.49722,0 32.66082,53.46666,0 32.7411,53.46305000000001,0 32.73693,53.34249,0 32.46249,53.30832,0 32.49833,53.27832,0 32.43999,53.20888000000001,0 32.29889,53.13193,0 32.22554,53.13333,0 32.22332,53.10555,0 31.93054,53.09554,0 31.80111,53.12583,0 31.77555,53.19415000000002,0 31.61611,53.21832,0 31.4225,53.20888000000001,0 31.37483,53.12193000000001,0 31.38638,53.09916,0 31.2664,53.02193,0 31.35638,52.97805000000001,0 31.41527,52.89305,0 31.53695,52.8561,0 31.58083,52.80304,0 31.595,52.73804,0 31.5,52.68999,0 31.65332,52.55305,0 31.58167,52.55083,0 31.59527,52.53221,0 31.56472000000001,52.51583,0 31.60889,52.49138,0 31.60166,52.40610000000001,0 31.62972,52.37054,0 31.58666,52.31888,0 31.71694,52.26167000000001,0 31.70389,52.1986,0 31.7825,52.16582,0 31.78388,52.10805000000001,0 31.89777,52.09610000000001,0 31.92638,52.03667,0 32.12444,52.04388000000001,0 32.22499,52.07944,0 32.33554,52.1572,0 32.34055000000001,52.22137,0 32.38638,52.25472,0 32.35833,52.30999,0 32.39415,52.33526,0 32.92361,52.24722,0 33.20471,52.37972,0 33.44887,52.34361,0 33.49778,52.36666000000002,0 33.53528,52.29333000000001,0 33.69638,52.36166999999999,0 33.83056,52.36472000000001,0 34.09778,52.15194,0 34.07306,52.06028000000001,0 34.12804,51.98972000000001,0 34.10943,51.95972,0 34.16945,51.95999,0 34.25777,51.87944000000001,0 34.38082,51.84499,0 34.44054,51.76721,0 34.40554,51.7186,0 34.10277,51.67443,0 34.10111,51.64749,0 34.15972,51.6286,0 34.23417,51.54666,0 34.23916,51.42777000000001,0 34.20361,51.40666,0 34.31499,51.35111,0 34.27388,51.28555,0 34.20892,51.25919,0 34.30526,51.23082000000001,0 34.38221,51.26361000000001,0 34.63361,51.24222,0 34.66999,51.17944,0 34.73499,51.17249,0 35.07381,51.22149,0 35.11852,51.20481,0 35.17075,51.0548,0 35.37189,51.04144,0 35.35855,51.01088000000001,0 35.29716000000001,50.99979,0 35.30577000000001,50.96033,0 35.36133,50.92614,0 35.3605,50.87226,0 35.39773,50.80308,0 35.45663,50.77279,0 35.45829,50.69417,0 35.48857,50.67585,0 35.39355,50.63808,0 35.44106,50.51198,0 35.5672,50.45306,0 35.58305,50.38305,0 35.64471,50.35416,0 35.72887,50.35332,0 35.73915,50.38333,0 35.85028,50.4286,0 36.13917,50.42527,0 36.29749,50.28444,0 36.41276,50.32166,0 36.56333000000001,50.27639,0 36.56249,50.22249,0 36.64028,50.21249000000001,0 36.7011,50.26693000000001,0 36.88444,50.33583000000001,0 37.13054,50.34833,0 37.31583,50.42804,0 37.4586,50.43971000000001,0 37.49444,50.35139000000001,0 37.62360000000001,50.30527,0 37.60527,50.21666,0 37.73304,50.08777000000001,0 37.92527,50.02471,0 38.01306,49.90138000000001,0 38.18526,49.9511,0 38.18415,50.06554000000001,0 38.30777,50.07388,0 38.3761,49.98749,0 38.49889,49.95193,0 38.68665,49.97887,0 38.69609,49.92749,0 38.88916,49.86805,0 38.94526,49.8075,0 39.06916,49.81777,0 39.18373,49.88041,0 39.27361,49.75194,0 39.58083,49.73082,0 39.63972,49.61555,0 39.79695000000001,49.55305,0 39.92167,49.56555,0 40.005,49.61444000000001,0 40.13977,49.60105000000001,0 40.14111,49.55916,0 40.07444,49.52694,0 40.05305,49.47833000000001,0 40.17972000000001,49.32695,0 40.16694,49.2486,0 39.96638,49.12388,0 39.93888,49.05499,0 39.69915,49.02277,0 39.69444,48.97305,0 39.76721,48.90388,0 39.97055,48.85999000000001,0 40.03027,48.8961,0 40.07667,48.87500000000001,0 39.98526,48.79139,0 39.80389,48.81777000000001,0 39.72721,48.76221,0 39.65693,48.61667,0 39.66966,48.58764000000002,0 39.85333,48.55471000000001,0 39.86694,48.50027000000001,0 39.83833,48.48388000000001,0 39.92152,48.36839,0 39.83805,48.3125,0 39.91277,48.27777,0 40.0125,48.28472,0 40.00249,48.24304000000001,0 39.93277,48.21332,0 39.84832,48.11306,0 39.86859,48.04084000000001,0 39.77609,48.02639000000001,0 39.81998,47.9697,0 39.79639,47.85722,0 39.72388,47.81833,0 39.34526,47.85304,0 39.13638,47.83388999999999,0 39.03817,47.8658,0 38.83833,47.85278000000001,0 38.75055,47.68387000000001,0 38.69137,47.69415000000002,0 38.60582,47.63803,0 38.33942,47.60139000000001,0 38.28083,47.5061,0 38.28555,47.3961,0 38.20804,47.31916,0 38.31916,47.27833,0 38.2161,47.19471,0 38.23582,47.10943,0 37.64138,46.73358000000001,0 36.67405,45.41802,0 36.54507,45.17941,0 36.53862,44.90856,0 36.5541,41.28566,0 36.61834,41.37498,0 36.85693,41.34721,0 37.02333,41.26749,0 37.04332,41.17555000000001,0 37.15228,41.14491,0 37.29499,41.14389,0 37.53721,41.02805,0 37.60777,41.04777,0 37.68748,41.13722,0 37.70638,41.11222,0 37.78944,41.11555,0 37.79361000000001,41.04554,0 37.89249,40.98277,0 38.2775,40.95056,0 38.36139,40.90943000000001,0 38.5236,40.92083,0 38.62554,40.97305,0 38.70999,40.95,0 38.81611,41.00999,0 39.16304,41.0825,0 39.2786,41.04972,0 39.4211,41.10944,0 39.64611,41.00166,0 39.73333,41.01388000000001,0 39.87721,40.95389,0 39.99776,40.97582,0 40.12859,40.91639,0 40.45804,41.0425,0 40.54332,41.02916,0 40.83305,41.19498,0 40.93111,41.18748,0 41.3875,41.37304000000001,0 41.53155,41.52388,0 41.65167,41.48277,0 41.72277,41.49554,0 41.72306,41.47055,0 41.83331,41.42832,0 41.96804,41.51915,0 42.05028,41.49056,0 42.18249,41.5075,0 42.47221,41.43333,0 42.51081,41.44333,0 42.59777,41.58305,0 42.82749,41.58500000000001,0 42.78832,41.50861,0 42.84722,41.47305,0 42.89278,41.50695,0 43.03972,41.37416,0 43.20777,41.30693,0 43.1236,41.25527,0 43.19943000000001,41.25527,0 43.23693,41.17638,0 43.3497,41.20193,0 43.42582,41.18527,0 43.47471,41.13999,0 43.46077,41.11296,0 43.47915,41.02528,0 43.59944,40.99249,0 43.67165,40.92806,0 43.6861,40.84195,0 43.75193,40.74,0 43.75361,40.67582,0 43.65304,40.53138,0 43.55415,40.4711,0 43.62027,40.41944,0 43.59417,40.33749,0 43.68,40.26443,0 43.67221,40.21972,0 43.72165,40.16332,0 43.65778,40.13971,0 43.65749,40.1086,0 43.93389000000001,40.01361,0 44.28,40.0461,0 44.34722,40.02389,0 44.48778,39.96277,0 44.59082,39.83305,0 44.69555,39.78998,0 44.77886,39.70638000000001,0 44.81304,39.63081,0 44.60582,39.78054000000001,0 44.47108,39.69886,0 44.4161,39.42527,0 44.31554,39.3875,0 44.20054,39.41694,0 44.03416,39.38499,0 44.09581,39.29138,0 44.09833,39.20638,0 44.21583,39.14083,0 44.18833,39.08306,0 44.20499,39.04165,0 44.15943,39.00221,0 44.20805,38.89581,0 44.30332000000001,38.83444,0 44.26082,38.72165,0 44.28276,38.69777,0 44.26333,38.66639,0 44.31388,38.63777,0 44.30693000000001,38.38833,0 44.38081,38.36971,0 44.43471000000001,38.39555,0 44.48416,38.34554,0 44.40471000000001,38.27166,0 44.38778,38.16583,0 44.26416,38.01416,0 44.22398000000001,37.89915,0 44.39333,37.86304,0 44.41916,37.81778,0 44.45193,37.81778,0 44.45609,37.77471,0 44.52693,37.78555,0 44.61805,37.72776,0 44.55804,37.64803,0 44.6136,37.60277,0 44.58859,37.44026,0 44.72499,37.38361,0 44.81527,37.30526,0 44.82193,37.2711,0 44.77332,37.22748,0 44.78733,37.1497,0 44.63806,37.18748,0 44.43638000000001,37.06304,0 44.35111,37.04833,0 44.31721,36.97055,0 44.25527,36.98666,0 44.19333,37.10027,0 44.26777,37.1675,0 44.26166,37.24194,0 44.11638,37.31638,0 44.01416,37.32054,0 43.91138,37.22415,0 43.83444,37.20499,0 43.79110000000001,37.23194,0 43.49471,37.24972,0 43.35666,37.33083,0 43.27916,37.3161,0 43.14971,37.37777,0 42.95554,37.32222,0 42.79083,37.38472,0 42.72666,37.35555000000001,0 42.58165,37.15277,0 42.35562,37.10693,0 42.37723,37.06467000000001,0 41.83528,36.59888,0 41.40304,36.52555,0 41.29027000000001,36.35555,0 41.25499000000001,36.05499,0 41.37806,35.83861,0 41.38388,35.62527,0 41.27777,35.49554,0 41.21527,35.22471,0 41.22915,34.78832,0 41.00388,34.41944,0 38.7947,33.37759,0 39.08601,32.50151,0 38.98602,32.47767,0 39.04366,32.30405,0 39.26,32.35555,0 39.30111,32.23638,0 39.19675,32.15495,0 39.005,32.00556,0 37.00527,31.50555,0 38.00139,30.50417,0 37.6675,30.33639,0 37.50277,30.00222000000001,0 36.74361,29.86472,0 36.50055,29.50277000000001,0 36.07,29.18889,0 34.96139,29.36083,0 34.85527,29.03861,0 34.84254,28.88452,0 34.78054,28.67083,0 34.80778,28.53639,0 34.64528,28.19361,0 34.65972,28.16445,0 34.62749000000001,28.17388,0 34.5714,28.09056,0 34.48494,27.99542,0 34.49483,27.93732,0 34.6346,27.87186,0 34.88189,27.89598,0 35.26789,27.63060000000001,0 35.71421,27.09985,0 36.49828,26.06245,0 36.47416,25.62217,0 36.54049,25.54376,0 36.83,25.51963,0 36.96872,25.39901,0 37.01093,24.97079,0 37.51406,24.19318,0 37.51406,19.32831,0 38.23912000000001,19.32831,0 38.24853,18.39601,0 38.51692,18.23592,0 38.64405,18.06641,0 38.60069,17.99488,0 38.45861,17.87111,0 38.37029,17.66611,0 38.27667,17.60694000000001,0 38.25777,17.5325,0 38.18583,17.56222,0 38.13361,17.5486,0 38.11138,17.48111,0 38.09555,17.54389,0 38.05584,17.55194,0 37.91722,17.4475,0 37.81888,17.48139,0 37.73584,17.37666,0 37.5125,17.32333,0 37.52058,17.1958,0 37.42329,17.03422,0 37.30693000000001,17.06111,0 37.15194,17.01555,0 36.99582,17.07389,0 37.01805,17.00361,0 36.98693,16.94306,0 37.02278,16.85056,0 36.98055,16.70611,0 36.91222,16.64111,0 36.89638,16.51777,0 36.95694,16.42528,0 36.97305,16.26944,0 36.91584,16.215,0 36.76361,15.80806,0 36.69777,15.75305,0 36.62611,15.48945,0 36.64777000000001,15.44971,0 36.61054,15.43721,0 36.54277,15.23472,0 36.44329,15.14995,0 36.54282,14.26206,0 36.44639,13.95695,0 36.48693,13.83944,0 36.3975,13.56778,0 36.24860000000001,13.36805,0 36.15944,13.04167,0 36.16972,12.98416,0 36.13278,12.92333,0 36.16528,12.87527,0 36.1427,12.70692,0 36.00638,12.72416,0 35.69944,12.66583,0 35.69528,12.61222,0 35.64916,12.59417,0 35.43249,12.20055,0 35.3811,12.16111,0 35.34555,12.03277,0 35.27111,11.97555,0 35.23555,11.90083,0 35.09693,11.82694,0 35.05806,11.72056,0 35.09361,11.55778,0 34.96388,11.25695,0 35.0075,11.19833,0 34.93333,10.95666,0 34.97861,10.91527,0 34.97527,10.86445,0 34.86861,10.78582,0 34.86443,10.735,0 34.80861,10.72945,0 34.77333,10.68694,0 34.77333,10.74584,0 34.59444,10.88779,0 34.43972,10.78445,0 34.28611,10.55416,0 34.34777,10.23195,0 34.32306,10.11721,0 34.23138000000001,10.03027,0 34.08583,9.553058999999999,0 34.13499,8.955270000000001,0 34.1228,8.584649000000001,0 33.97888,8.441387000000002,0 33.85249,8.425836,0 33.77599,8.364941999999999,0 33.69333,8.386389000000001,0 33.62555,8.470556,0 33.57804,8.449443000000001,0 33.50777,8.480834,0 33.38777,8.43777,0 33.2625,8.462502000000001,0 33.20444,8.433890000000002,0 33.16082,8.360001000000001,0 33.15834,8.291392999999999,0 33.20861,8.238049999999999,0 33.16527,8.204715,0 33.18643,8.136979999999999,0 33.03028,7.995248000000001,0 32.99683,7.887221000000001,0 33.05389,7.788888,0 33.16806,7.796393000000001,0 33.33944,7.713612000000001,0 33.47027,7.743339000000001,0 33.55138,7.686387,0 33.71139,7.660277,0 33.78889,7.56639,0 33.89278,7.518888,0 34.03083000000001,7.375004,0 34.03,7.240832,0 34.13361,7.158887,0 34.1825,7.163054000000001,0 34.2025,7.052219000000001,0 34.2947,6.966432000000001,0 34.46999,6.916112,0 34.53,6.743888,0 34.6375,6.727221,0 34.76277,6.605837000000002,0 34.79777,6.444719,0 34.85722,6.349445000000001,0 34.86055,6.26166,0 34.98782,6.013944,0 34.98639,5.878052000000001,0 35.10582,5.692779000000001,0 35.10388,5.632496000000001,0 35.28999,5.507774,0 35.26972,5.441112,0 35.31138,5.366942,0 35.35638,5.350275,0 35.44749,5.429448,0 35.50472,5.431391,0 35.605,5.373054,0 35.68443,5.391387,0 35.83583,5.318613,0 35.79556,5.251391,0 35.83083,5.153894000000001,0 35.77389,5.075279,0 35.77443,4.798611,0 35.94056,4.622499,0 35.50888,4.616738,0 34.38819,4.609683,0 33.99666,4.222782,0 33.51694,3.752217,0 33.18388,3.766113,0 33.01666,3.888612,0 32.89804,3.811949,0 32.71944,3.755834,0 32.40445,3.743613,0 32.19443,3.611042,0 32.19333,3.511394999999999,0 32.09361,3.532500000000001,0 32.0639,3.59028,0 31.95111,3.593889,0 31.93332,3.687785,0 31.79945,3.825557,0 31.70194,3.713058000000001,0 31.57389,3.691664,0 31.54083,3.653611999999999,0 31.28806,3.794714,0 31.17667000000001,3.795281,0 30.97471,3.691943,0 30.85882000000001,3.493394,0 30.91721,3.521942,0 30.935,3.411665,0 30.83,3.275558,0 30.7625,3.055004,0 30.85555,2.957499,0 30.87806000000001,2.843612,0 30.81667,2.769165,0 30.72972,2.448053,0 30.82667,2.442221,0 30.82527,2.399165,0 30.88027,2.337497,0 30.91416,2.339442,0 30.97084,2.411945,0 31.07027,2.335005,0 31.04972,2.303891,0 31.12528,2.278053,0 31.19694,2.305835,0 31.2025,2.229164,0 31.2992,2.162853,0 31.30277,2.121389,0 31.03666000000001,1.765556,0 30.68806,1.493891,0 30.45611,1.212785,0 30.34861,1.196108,0 30.33221,1.151387,0 30.27805,1.168893,0 30.23611,1.134161,0 30.21861000000001,0.9963894000000001,0 30.14583,0.8983344000000001,0 29.96055000000001,0.8255515,0 29.93833,0.6344455,0 29.9625,0.4872144,0 29.85833,0.3666595,0 29.81389,0.1586065,0 29.77332,0.1722145,0 29.71666000000002,0.07221546,0 29.735,-0.00083754,0 29.64861,-0.4397225,0 29.67195,-0.5722206,0 29.63805,-0.5933346000000001,0 29.61833,-0.7333385,0 29.62832,-0.8888946000000001,0 29.57833,-0.9000005,0 29.56639,-1.005841,0 29.59694,-1.385839,0 29.68332,-1.380556,0 29.73416,-1.341946,0 29.80306,-1.365553,0 29.84139,-1.320283,0 29.9075,-1.464166,0 29.97500000000001,-1.464445,0 30.17056,-1.339723,0 30.18472,-1.275004,0 30.22916,-1.266661,0 30.34566,-1.129168,0 30.36,-1.060003,0 30.48222,-1.063333,0 30.45333000000001,-1.095553,0 30.46945,-1.158337,0 30.51221,-1.164448,0 30.56166,-1.326943,0 30.73917,-1.436949,0 30.74888,-1.52055,0 30.84027,-1.670554,0 30.81111,-1.700551,0 30.835,-1.800559,0 30.80832,-1.929448,0 30.89417,-2.076112,0 30.82917,-2.357785,0 30.78222,-2.380554,0 30.69972,-2.347497,0 30.6525,-2.396665000000001,0 30.57332,-2.399167,0 30.43305,-2.647783,0 30.45721,-2.685835,0 30.52222,-2.657215,0 30.44028000000001,-2.747215,0 30.4175,-2.861946999999999,0 30.485,-2.947222,0 30.56333,-2.89305,0 30.66611,-2.976391,0 30.84477,-2.976012,0 30.79555,-3.048607,0 30.85222,-3.145285,0 30.835,-3.256948,0 30.65166,-3.332503,0 30.6222,-3.370122,0 30.66361,-3.386665,0 30.66222,-3.418893999999999,0 30.44916,-3.547215000000001,0 30.39139,-3.711106000000001,0 30.40084,-3.786112,0 30.32111,-3.78666,0 30.22806,-3.928051,0 30.17222,-4.086667,0 30.07277,-4.166667,0 30.02611,-4.269447,0 29.85777,-4.371111,0 29.81277,-4.360284,0 29.75222000000001,-4.461112,0 29.42334,-4.447504,0 29.42834,-4.552218,0 29.34139,-4.797783,0 29.34916000000001,-4.939732,0 29.63166,-5.721949,0 29.49777,-5.979726000000001,0 29.55029,-6.295285,0 29.66111,-6.455556,0 29.73250000000001,-6.627501,0 30.08611,-6.863607,0 30.31138,-7.136947000000001,0 30.40695,-7.356393,0 30.45583,-7.580277000000001,0 30.65445,-7.886943,0 30.77123,-8.192242,0 30.90138,-8.460001,0 31.04111,-8.590284000000001,0 31.13277,-8.615557000000001,0 31.22055,-8.576668,0 31.28527,-8.623333000000001,0 31.37556,-8.582229999999999,0 31.39806,-8.629443,0 31.45945,-8.629443,0 31.56332,-8.698608,0 31.57305,-8.818605,0 31.68361000000001,-8.908894,0 31.73861,-8.918056,0 31.78553000000001,-8.885061,0 31.95611,-8.930835999999999,0 31.93416,-9.018891,0 31.97972,-9.071109999999999,0 32.05611,-9.040832999999999,0 32.16,-9.063333999999999,0 32.24945000000001,-9.131949000000001,0 32.42556,-9.129718000000002,0 32.54527,-9.26667,0 32.74195,-9.281665,0 32.77166,-9.335557,0 32.9404,-9.405072000000001,0 32.99777,-9.373339,0 33.12583,-9.490285,0 33.1925,-9.509167,0 33.31444000000001,-9.485550999999999,0 33.39388,-9.538055999999999,0 33.43777,-9.615834,0 33.50889,-9.621945,0 33.585,-9.584164,0 33.68361,-9.610552,0 33.75583,-9.582777999999999,0 33.91961,-9.707652,0 33.95305000000001,-9.673335000000002,0 33.95721,-9.526671,0 34.03944,-9.482779000000001,0 34.32527,-9.73278,0 34.33805,-9.7875,0 34.5225,-10.01084,0 34.52389,-10.1075,0 34.58277,-10.27,0 34.57583,-10.51667,0 34.67611000000001,-10.74306,0 34.64305,-10.92194,0 34.59305,-11.01668,0 34.615,-11.10945,0 34.71027,-11.20111,0 34.76361000000001,-11.345,0 34.80555,-11.33222,0 34.89054,-11.38306,0 34.95972,-11.48666,0 34.96673,-11.57211,0 35.49416,-11.57918,0 35.51611,-11.61084,0 35.57638,-11.60667,0 35.6525,-11.58473,0 35.70389,-11.48778,0 35.7725,-11.47528,0 35.83833,-11.41472,0 35.94306,-11.43473,0 35.96556,-11.50084,0 36.16305,-11.57778,0 36.18972,-11.70666,0 36.49001,-11.68111,0 36.56195,-11.74028,0 36.67777,-11.71472,0 36.82972,-11.56861,0 36.90445,-11.59473,0 37.02584,-11.56721,0 37.12583,-11.67333,0 37.28611,-11.70418,0 37.34722,-11.68667,0 37.46204,-11.72732,0 37.52666,-11.6625,0 37.66306,-11.63833,0 37.81582,-11.53833,0 37.80972,-11.48,0 37.86861,-11.32666,0 38.09669,-11.25633,0 38.27972,-11.28834,0 38.37777,-11.37722,0 38.49171,-11.41531,0 38.65527,-11.2811,0 38.77389,-11.26166,0 38.89777,-11.17222,0 39.13444,-11.14195,0 39.26805,-11.16806,0 39.50833,-10.99528,0 39.76694000000001,-10.92056,0 39.89832000000001,-10.83166,0 40.00666,-10.80555,0 40.23611,-10.60278,0 40.3425,-10.56722,0 40.43681,-10.47817,0 40.47834,-10.4825,0 40.47277,-10.50778,0 40.52111,-10.48416,0 40.50388,-10.56444,0 40.55972,-10.58666,0 40.57332,-10.65,0 40.63945,-10.67166,0 40.64145,-10.69888,0 40.70627,-10.84757,0 40.71345000000001,-11.17438,0 40.47889,-11.40556,0 40.42471,-11.55416,0 40.45805,-11.60583,0 40.42417,-11.64973,0 40.47556,-11.82029,0 40.51611,-11.84333,0 40.49342,-11.91995,0 40.60549,-11.96501,0 40.63672,-12.37548,0 40.61845,-12.65416,0 40.57444,-12.64306,0 40.57139,-12.69806,0 40.61639,-12.71334,0 40.64194,-12.7814,0 40.55889,-12.785,0 40.56638,-12.81889,0 40.52361,-12.81778,0 40.55639,-12.85445,0 40.53416,-12.90416,0 40.47666,-12.88417,0 40.41,-12.96194,0 40.48972,-13.0275,0 40.50166000000001,-12.94445,0 40.59722,-12.97334,0 40.56,-13.07861,0 40.56806,-13.26222,0 40.52833,-13.3025,0 40.56638,-13.285,0 40.56528,-13.3664,0 40.59111,-13.37473,0 40.52584,-13.51528,0 40.60056,-13.57084,0 40.53749,-13.64528,0 40.64999000000001,-14.01694,0 40.63833000000001,-14.07918,0 40.59666,-14.08722,0 40.62277,-14.12555,0 40.53054,-14.17166,0 40.55584,-14.23,0 40.59389,-14.21084,0 40.59,-14.26834,0 40.64917,-14.1975,0 40.70361,-14.18222,0 40.74472,-14.27473,0 40.72861,-14.34306,0 40.66916,-14.36723,0 40.6375,-14.33973,0 40.65472000000001,-14.44195,0 40.6264,-14.445,0 40.62777,-14.56944,0 40.6661,-14.5375,0 40.68999,-14.43584,0 40.81166000000001,-14.40779,0 40.82804,-14.49944,0 40.76083,-14.53805,0 40.82999,-14.53028,0 40.8064,-14.61417,0 40.84472,-14.68611,0 40.84195,-14.795,0 40.72278,-14.89279,0 40.66888,-14.9075,0 40.64527,-14.85806,0 40.66305,-14.92111,0 40.74722,-14.92834,0 40.78027,-14.98667,0 40.66,-14.98721,0 40.70888000000001,-15.07834,0 40.64527,-15.08279,0 40.60167,-15.13389,0 40.52888,-15.13278,0 40.51445,-15.18723,0 40.57805,-15.20278,0 40.62722,-15.155,0 40.68472,-15.24973,0 40.57167,-15.45111,0 40.58777,-15.47973,0 40.54333,-15.53417,0 40.49666000000001,-15.52917,0 40.36028,-15.72333,0 40.17528,-15.92,0 40.06472,-15.99361,0 40.08749,-16.00944,0 40.13027,-15.9675,0 40.13582,-15.9925,0 39.98191,-16.23304,0 39.90667000000001,-16.4168,0 39.85722,-16.43055,0 39.7965,-16.46608,0 39.71716,-16.50974,0 39.28388,-16.76834,0 39.15639,-16.88083,0 39.12749,-16.87042,0 39.12917,-16.90084,0 39.08361,-16.91612,0 39.12749,-16.93305,0 39.08583,-16.99168,0 39.00154,-16.99003,0 38.81833,-17.05778,0 38.70972,-17.06361,0 38.66444,-17.02916,0 38.67889,-17.0775,0 38.60472,-17.09916,0 38.58806,-17.07723,0 38.54056,-17.12584,0 38.50638000000001,-17.10973,0 38.4975,-17.14417,0 38.15666,-17.2914,0 38.12889,-17.17834,0 38.11694,-17.20889,0 38.07889,-17.19278,0 38.13083,-17.25361,0 38.11138,-17.31139,0 37.87222,-17.37639,0 37.52949,-17.56545,0 37.52949,-19.06546,0 37.52949,-24.06546,0 37.52949,-29.06546000000001,0 37.52949,-34.06546,0 37.52949,-39.06546,0 37.52949,-44.06546000000001,0 37.52949,-49.06545000000001,0 37.52949,-52.36546,0 37.52949,-57.36545,0 37.52949,-62.36546000000001,0 37.52949,-67.36546000000001,0 37.52949,-69.90000000000001,0 37.52949,-74.90000000000001,0 37.52949,-79.90000000000001,0 37.52949,-84.89999,0 37.52949,-89.90000000000001,0 36.59039,-89.90000000000001,0 35.65129,-89.90000000000001,0 34.71218,-89.90000000000001,0 33.77307,-89.90000000000001,0 32.83397,-89.90000000000001,0 31.89487,-89.90000000000001,0 30.95576,-89.90000000000001,0 30.01666,-89.90000000000001,0 29.07755,-89.90000000000001,0 28.13845,-89.90000000000001,0 27.19934,-89.90000000000001,0 26.26024,-89.90000000000001,0 25.32114,-89.90000000000001,0 24.38203,-89.90000000000001,0 23.44293,-89.90000000000001,0 22.50382,-89.90000000000001,0 22.50382,-84.89999,0 22.50382,-83.84003000000001,0 22.50382,-78.84003,0 22.50382,-73.84003,0 22.50382,-70.54002,0 22.50382,-65.54002,0 22.50382,-60.54002000000001,0 22.50382,-55.54003,0 22.50382,-50.54002,0 22.50382,-45.54003,0 22.50382,-40.54002,0 22.50382,-35.54002000000001,0 22.50382,-34.04004,0 22.15389,-34.09251,0 22.11167,-34.14861000000001,0 22.13416,-34.19112,0 21.94972,-34.22501,0 21.90166,-34.33611,0 21.8025,-34.38305,0 21.65556,-34.39056,0 21.52832,-34.3525,0 21.29472000000001,-34.43389,0 21.06277,-34.36389,0 20.9425,-34.36028,0 20.80861000000001,-34.39723,0 20.85666000000001,-34.42083,0 20.85222,-34.46305,0 20.53444,-34.45583,0 20.46029,-34.48223,0 20.21972,-34.67973,0 20.08972,-34.72639,0 20.055,-34.7525,0 20.05722,-34.805,0 19.99861,-34.82195,0 19.85777,-34.7525,0 19.65166,-34.77584,0 19.51639,-34.67556,0 19.51416,-34.67084,0 19.38945,-34.60196,0 19.29611,-34.61972,0 19.36333,-34.53778,0 19.3575,-34.50029,0 19.28194,-34.40973,0 19.21082,-34.42861,0 19.11222,-34.40334,0 19.08334,-34.36084000000001,0 19.13722,-34.29834,0 19.08334,-34.34639,0 18.81778,-34.37778000000001,0 18.80833,-34.29723,0 18.84527,-34.245,0 18.81417,-34.19028,0 18.85527,-34.15611,0 18.79332,-34.08667,0 18.60195,-34.07362,0 18.48805,-34.09778,0 18.43583,-34.16889,0 18.47888,-34.23445000000001,0 18.46666,-34.3289,0 18.49011,-34.34823,0 18.42027,-34.32306,0 18.36305,-34.18723,0 18.30972,-34.14918,0 18.35555,-34.05834,0 18.31027,-34.0325,0 18.38,-33.91195,0 18.4825,-33.89473,0 18.44111,-33.70667,0 18.31527,-33.56834,0 18.29471,-33.46611,0 18.14805,-33.35612,0 18.09,-33.22501,0 17.96722,-33.13472,0 17.95556,-33.10305,0 18.00167,-33.09334,0 18.12306,-33.20001,0 18.03721,-33.10196,0 18.03444,-33.0325,0 17.98333,-33.00028,0 17.91389,-33.04805,0 17.89305,-33.03111,0 17.85714,-32.91527000000001,0 17.87694,-32.86084,0 17.84527,-32.82584,0 17.8675,-32.81196000000001,0 17.87666,-32.80612,0 17.9025,-32.73333,0 17.96694,-32.69862,0 18.05361,-32.77612,0 18.13175,-32.77878000000001,0 18.29222,-32.62445,0 18.335,-32.47834,0 18.31611,-32.33501,0 18.35027,-32.28806,0 18.2786,-31.89278,0 18.18139,-31.67473,0 17.90944,-31.35973,0 17.61195,-30.92972,0 17.53944,-30.7575,0 17.27889,-30.34667,0 17.08445,-29.83584000000002,0 17.00332,-29.52445,0 16.84444,-29.22139,0 16.81528,-29.085,0 16.73277,-29.01889,0 16.67083,-28.90584,0 16.60611,-28.87195,0 16.56833,-28.72389,0 16.46972,-28.63028,0 16.48959,-28.57819,0 16.44195,-28.61834,0 16.35445,-28.56278,0 16.02778,-28.24473,0 15.75277,-28.03055,0 15.67639,-27.9339,0 15.67,-27.87139000000001,0 15.52861,-27.7275,0 15.53333,-27.66139,0 15.46666,-27.54445000000001,0 15.29417,-27.32250000000001,0 15.23471,-26.96667,0 15.15777,-26.90278,0 15.08389,-26.69861,0 15.07972,-26.65,0 15.13472,-26.62889,0 15.14194,-26.67778,0 15.17111,-26.5964,0 15.08792,-26.40098,0 14.96833,-26.33972,0 14.93861,-26.13945,0 14.97805,-26.12667,0 14.98,-26.0575,0 14.90333,-25.91055,0 14.91361,-25.84472,0 14.83777,-25.76194,0 14.88222,-25.5675,0 14.80083,-25.285,0 14.85778,-25.08723,0 14.83207,-24.99944,0 14.79277,-24.94361,0 14.77695,-24.79945,0 14.59916,-24.56555,0 14.61278,-24.45639,0 14.46333,-24.10917,0 14.45611,-23.9675,0 14.50945,-23.90473,0 14.51471,-23.83583,0 14.48445,-23.75639,0 14.49611,-23.58834,0 14.43444,-23.41778,0 14.47,-23.34668,0 14.49194,-23.37584,0 14.49833,-23.33056,0 14.45388,-23.1464,0 14.41056,-22.96723,0 14.43833,-22.87778,0 14.46278,-23.00055,0 14.52584,-22.91112,0 14.52485,-22.69206,0 14.51139,-22.55279,0 14.39167,-22.29,0 14.27777,-22.11028,0 13.94916,-21.78194,0 13.97028,-21.73167,0 13.87972,-21.59944,0 13.85361,-21.49139,0 13.4,-20.85583,0 13.35277,-20.64667,0 13.25083,-20.46584,0 13.175,-20.18084,0 13.05111,-20.06778,0 12.93167,-19.79583,0 12.70722,-19.41778,0 12.67,-19.295,0 12.54222,-19.06778,0 12.46416,-19.00418,0 12.46083,-18.92805,0 12.29611,-18.7061,0 12.02083,-18.47111,0 11.9489,-18.25639,0 11.80472,-18.08195,0 11.7211,-17.655,0 11.75278,-17.25484,0 11.82584,-17.26639000000001,0 11.92861,-17.18278,0 12.08471,-17.13528,0 12.13139,-17.16112,0 12.16778,-17.14389,0 12.24611,-17.22721,0 12.42139,-17.20361,0 12.45083,-17.25417,0 12.55722,-17.24333,0 12.81611,-17.10889,0 12.88666,-17.03361,0 13.16056,-16.95278,0 13.25166,-16.98528,0 13.37333,-16.96945,0 13.47445,-17.01194,0 13.52611,-17.07778,0 13.52471,-17.12695,0 13.98556,-17.42584,0 14.17694,-17.42028,0 14.20417,-17.3831,0 18.00055,-17.38617,0 18.45154,-17.38984,0 18.63722,-17.64473,0 18.75638,-17.74778,0 18.91584,-17.81555,0 19.24222,-17.80583,0 19.34333,-17.8475,0 19.55916,-17.8675,0 19.66166,-17.83778,0 19.76195,-17.8989,0 19.81194,-17.85833,0 19.92056,-17.85723,0 20.03583,-17.90028,0 20.33806,-17.85805,0 20.5475,-17.98168,0 20.75195,-17.99611000000001,0 20.82,-18.03861,0 20.95417,-17.9675,0 21.16389,-17.93139,0 21.24194,-17.93889,0 21.37936,-18.01489,0 23.47611,-17.62584,0 23.20167,-17.47973,0 22.48778,-16.77417,0 22.13888,-16.4925,0 22.12111,-16.34112,0 22.00015,-16.17166,0 21.99834,-13.00416,0 24.02055,-13.00639,0 23.99777,-12.93723,0 23.89389,-12.83223,0 23.88611,-12.77111,0 23.9475,-12.53723,0 24.05222,-12.38528,0 24.035,-12.26417,0 23.975,-12.19917,0 23.98416,-11.88222,0 24.01555,-11.81417,0 23.96583,-11.655,0 24.03028,-11.52639,0 24.03083,-11.45306,0 24.08445,-11.40278,0 24.02527,-11.28056,0 24.0225,-10.96889,0 23.98621,-10.87046,0 23.8639,-11.02722,0 23.47639,-10.95834,0 23.36806,-10.98278,0 23.21861000000001,-11.07639,0 23.085,-11.09668,0 22.94277,-11.095,0 22.86361,-11.04917,0 22.71667,-11.09334,0 22.52972,-11.03778,0 22.48,-11.13333,0 22.25111,-11.2525,0 22.24611,-11.07305,0 22.19361,-10.99417,0 22.16361,-10.86139,0 22.31944,-10.75973,0 22.30806,-10.61278,0 22.30334,-10.53779,0 22.26416,-10.50055,0 22.31361,-10.37,0 22.20722,-10.15416,0 22.1625,-9.930555,0 22.02138,-9.848053,0 21.985,-9.755838000000001,0 21.95639,-9.763335,0 21.87472,-9.665001999999999,0 21.79056,-9.405559,0 21.85472,-9.229445999999999,0 21.84777,-8.949718000000001,0 21.94,-8.496109000000001,0 21.91611,-8.308612,0 21.87666,-8.279163000000001,0 21.85861,-8.157781,0 21.75416,-7.999444000000001,0 21.77305,-7.776109,0 21.85111,-7.591662,0 21.85388,-7.425559000000001,0 21.81555,-7.316110000000001,0 21.78295,-7.280848,0 20.53861,-7.284483,0 20.54306,-7.124445,0 20.62975,-6.913881,0 20.3325,-6.914449,0 20.31138,-6.99472,0 19.96277,-6.995556000000001,0 19.9325,-6.842503,0 19.73667,-6.575553000000002,0 19.68847,-6.187500000000002,0 19.84027,-6.031107000000001,0 20.01974,-5.942214,0 20.05305,-5.865004,0 20.11222,-5.834448,0 20.18,-5.684445000000001,0 20.14305,-5.40361,0 20.19639,-5.273613,0 20.19166,-5.159161,0 20.05445,-4.769164,0 20.06222,-4.595832,0 20.11889,-4.500837,0 20.03333,-4.300551,0 20.03889,-4.278051,0 20.12861,-4.278889,0 20.17777,-4.33278,0 20.22445,-4.335003,0 20.26277,-4.395555,0 20.3375,-4.397779,0 20.37444,-4.295278,0 20.50944,-4.254166000000001,0 20.66917,-4.151665,0 20.65611000000001,-3.307221999999999,0 20.82945,-2.848887,0 20.95417,-2.692783,0 20.95916,-2.588608,0 21.00686,-2.48896,0 21.24555,-2.512783000000001,0 21.44083,-2.480554,0 21.46972,-2.335284,0 21.82688,-2.529217,0 21.89883,-2.490597,0 21.95194,-2.415555,0 22.0486,-2.370835,0 22.13972,-2.276389,0 22.19055000000001,-2.313334,0 22.19861,-2.447784,0 22.25139,-2.466946,0 22.28722000000001,-2.445553,0 22.16638,-1.942219,0 22.185,-1.903339,0 22.50972000000001,-1.958887,0 22.62556,-1.801108,0 22.67972,-1.806661,0 22.87028,-1.88416,0 22.93666,-1.962216,0 23.03277,-1.928053,0 23.10944,-1.945837,0 23.22111,-2.085552,0 23.5,-2.009998,0 23.69389,-2.018889,0 23.69805,-1.931392,0 23.77472,-1.917505,0 23.78306,-1.806661,0 23.83777,-1.765,0 23.98527,-1.769167,0 24.03527,-1.73278,0 24.4214,-1.786798,0 24.37583,-1.538893,0 24.30388,-1.393057,0 24.10583,-1.384723,0 23.94889,-1.306666,0 23.77278,-1.179163,0 23.72972,-1.08334,0 23.52667,-0.9758345000000001,0 23.35611,-0.8072196,0 23.48555,-0.6988865,0 23.62945,-0.6358325,0 23.46778000000001,-0.4386065,0 23.26917,-0.4952795999999999,0 23.21778,-0.4249986,0 22.97027,-0.4063866,0 23.13,-0.2808366,0 23.29389,-0.3172145,0 23.41361,-0.2336045,0 22.9936,0.3750025000000001,0 22.93528,0.5708334000000001,0 22.86139,0.6711115,0 22.81472000000001,0.9963894000000001,0 22.62416,1.361663,0 22.4339,1.489715,0 22.28639,1.503332,0 22.31111,1.557503,0 22.47277,1.693889,0 22.51667,1.916387,0 22.58861,2.048606,0 22.57222000000001,2.110283,0 22.6475,2.109447,0 22.69972,2.034162,0 22.75722,2.010284,0 22.86084,2.045835,0 22.97583,2.184165,0 23.09027,2.093894,0 23.34389,2.251395000000001,0 23.65138,2.192498,0 23.6275,2.330837,0 23.4225,2.451941,0 23.35945,2.523887,0 23.12666,2.502503,0 23.03806,2.558051,0 22.96,2.672216,0 23.00389,2.757221,0 22.98472,2.857779,0 23.08195,3.147218,0 23.00111,3.161664000000001,0 22.86417000000001,3.011947999999999,0 22.81472000000001,2.996109,0 22.77972,3.063887,0 22.79639,3.259449,0 22.64333,3.325284,0 22.62361,3.388886,0 22.67834,3.453893,0 22.92861,3.548051000000001,0 23.03750000000001,3.547503,0 23.17111,3.678056000000001,0 23.36971,3.615839,0 23.48695,3.738338,0 23.515,3.825836,0 23.39943,3.835278000000001,0 23.35889,3.809448,0 23.14722,3.896108,0 23.03555,3.860559,0 22.99083,3.883337,0 22.85806,3.858604999999999,0 22.76555,3.905,0 22.75861,3.991391000000001,0 22.68722,3.998050999999999,0 22.56111,4.101389,0 22.45972,4.137497,0 22.4536,4.144580000000001,0 22.53861,4.218894,0 22.54111,4.28111,0 22.60972,4.358889,0 22.59445,4.470551,0 22.69027000000001,4.483611,0 22.77584,4.706666,0 22.85582000000001,4.706945,0 22.89584,4.821110000000001,0 22.97500000000001,4.831388,0 23.0225,4.743053,0 23.10000000000001,4.70528,0 23.1825,4.727222,0 23.26833,4.627214,0 23.38556000000001,4.587777,0 23.42639,4.591943,0 23.44166,4.653612,0 23.58445,4.734449,0 23.83027,4.82084,0 23.94222,4.810004,0 23.95417,4.873337,0 23.98195,4.855275,0 24.10555,4.920002,0 24.15194,4.900004,0 24.2275,4.960278000000001,0 24.25611,4.929443,0 24.28611,4.994999,0 24.40056,5.030001,0 24.355,5.054715,0 24.39417,5.115554,0 24.42555,5.065838,0 24.44750000000001,5.105834,0 24.52556,5.077214000000001,0 24.66111,4.964445,0 24.65056,4.92111,0 24.73445,4.910841,0 24.95888,4.987215000000001,0 25.07027,4.945832,0 25.13361,5.017778000000001,0 25.17583,4.995278,0 25.30832,5.032503,0 25.34945,5.144714,0 25.31056,5.19111,0 25.37555,5.294717,0 25.36195,5.314715000000001,0 25.53833,5.350554,0 25.54222,5.381387,0 25.74916,5.241941,0 25.79083,5.263893,0 25.82583,5.195556,0 25.87583,5.217497,0 25.9,5.166945,0 25.97333,5.231663000000001,0 26.05694,5.192504,0 26.13277,5.257215,0 26.29222,5.141394,0 26.38639,5.145552,0 26.48889,5.04639,0 26.73166,5.092784,0 26.86777,5.029163,0 26.93777,5.141106,0 27.08417,5.204159,0 27.39361,5.089167,0 27.45527,5.016392,0 27.45806,5.083613,0 27.3,5.22611,0 27.25472,5.331392,0 27.23584,5.428610000000001,0 27.28166,5.578613,0 27.23389,5.588334,0 27.24084,5.647779000000001,0 27.14278,5.771943,0 27.04917,5.789997,0 27.00111,5.862501,0 26.94972,5.846949000000001,0 26.91027,5.899446000000001,0 26.83945,5.898338,0 26.80861,5.980004,0 26.55445,6.033608,0 26.51416,6.109722,0 26.4375,6.077772,0 26.52361000000001,6.173613,0 26.52361000000001,6.221106,0 26.47611,6.224714,0 26.45944,6.294446000000001,0 26.39527,6.307785,0 26.30778000000002,6.383051,0 26.31361,6.457769000000001,0 26.28916,6.468894,0 26.40628,6.63525,0 26.10083,6.841106,0 26.04834,6.998336,0 25.81971,7.108335000000001,0 25.81389,7.147214000000001,0 25.59389,7.216388,0 25.53139,7.277786,0 25.465,7.280001000000001,0 25.36555,7.348338,0 25.33111,7.425279,0 25.20695,7.497503,0 25.18389000000001,7.583336000000002,0 25.29611,7.65,0 25.25833,7.840836,0 25.18611,7.901946,0 25.08027,7.897500000000001,0 24.97333,7.992774,0 24.94277,8.083888999999999,0 24.86555,8.165285000000001,0 24.66,8.218610999999999,0 24.54583,8.204715,0 24.46,8.271386,0 24.36111,8.247221,0 24.17722,8.316108,0 24.14027,8.375832000000001,0 24.16584,8.477783000000001,0 24.26917,8.583055999999999,0 24.23027,8.624995999999999,0 24.25333,8.691110999999999,0 23.82389,8.727785000000001,0 23.73916,8.705276,0 23.63305,8.736947000000001,0 23.51777,8.714159,0 23.49833,8.77833,0 23.58167,8.906112,0 23.58306,8.988605,0 23.56528000000001,9.005281999999999,0 23.50361,8.959716000000002,0 23.44861,9.025002000000001,0 23.49277,9.174168,0 23.55639,9.181664,0 23.65222,9.279999,0 23.66445,9.440837999999999,0 23.63138,9.449442,0 23.62333,9.535275,0 23.69471,9.671659999999999,0 23.66916000000001,9.866942,0 23.30389,10.45916,0 23.00945,10.69861,0 22.86651,10.92244,0 22.9425,11.0925,0 22.97083,11.28306,0 22.93084,11.41583,0 22.79111,11.40167,0 22.77555,11.46222,0 22.64195,11.51611,0 22.56167,11.62166,0 22.64082000000001,12.07111,0 22.56361,12.07471,0 22.47666,12.03416,0 22.50139,12.17695,0 22.43278,12.40333,0 22.38389,12.46527,0 22.46694,12.62166,0 22.22333,12.74722,0 22.14056,12.65527,0 21.95277,12.64389,0 21.82777,12.7975,0 21.94334,13.05361,0 22.02055,13.13779,0 22.15972,13.19027,0 22.29416000000001,13.35861,0 22.23056,13.47889,0 22.22472,13.57195,0 22.15361,13.63444,0 22.13861,13.72806,0 22.08444,13.77916,0 22.19833,13.9225,0 22.23833,13.96833,0 22.555,14.12555,0 22.55527,14.23194,0 22.44389,14.27222,0 22.43444,14.30972,0 22.46972,14.34472,0 22.44556,14.47972,0 22.38138,14.52306,0 22.38416,14.55416,0 22.47,14.62945,0 22.7025,14.69139,0 22.67056,14.85945,0 22.7389,14.90278,0 22.75332,14.97694,0 22.84916,15.07834,0 22.93583,15.11611,0 22.99834,15.35639,0 22.92305,15.48722,0 22.93722,15.56194,0 23.11816,15.71029,0 23.35694,15.68166,0 23.60889,15.75833,0 23.9996,15.69871,0 23.99981,18.7543,0 24.00275,19.49907,0 25.00083,19.99916,0 25.00142,21.99969,0 24.9989,26.99969000000002,0 24.99777,29.24888,0 24.8775,29.50638,0 24.88694,29.66389,0 24.8125,29.78445,0 24.83472,29.87666,0 24.70667,30.16861,0 24.78082,30.33388,0 24.92611000000001,30.50611,0 25.01916,30.7875,0 24.86945,31.15639,0 24.86833,31.375,0 25.04222,31.49972,0 25.06972,31.58167,0 25.15166,31.64694,0 25.02555,31.84139,0 25.03611,31.92445,0 24.97389,31.97,0 24.7275,32.02693,0 24.54305,31.98527,0 24.09472,32.00111,0 23.96778,32.0675,0 23.98639,32.09833,0 23.72639,32.17472,0 23.50166,32.17139,0 23.30778,32.21861,0 23.30916,32.15861,0 23.20889,32.27555,0 23.08139,32.33277,0 23.09306,32.42667,0 23.13333,32.39666,0 23.14555,32.46694000000001,0 23.09833,32.52166,0 23.12222,32.62666,0 22.50257,32.79314,0 22.50257,36.37666,0 22.3926,36.43942,0 22.33602000000001,36.51816,0 22.35234,36.64503,0 22.32878,36.7139,0 22.23996,36.84983,0 22.12033,36.90784,0 22.13302,37.00752,0 22.04059,37.01296,0 21.95903,36.9749,0 21.94816,36.8444,0 21.98484,36.77306,0 21.79948,36.68655,0 21.70063,36.72363,0 21.53381,37.02636,0 21.57297,37.21142,0 21.67267,37.33829,0 21.54217,37.54129,0 21.36454,37.6464,0 21.30836,37.62784,0 20.99752,37.69217,0 20.80903,37.64777,0 20.68738,37.72452,0 20.61781,37.81678,0 20.51087,38.09272000000001,0 20.45741,38.14892,0 20.37856,38.13986,0 20.31669,38.18789,0 20.39216,38.36551000000001,0 20.44472,38.36641,0 20.48369,38.32835,0 20.51631,38.3501,0 20.54984,38.68631000000001,0 20.63178,38.84898,0 20.72928,38.86393,0 20.73834,38.90834,0 20.49728,39.20377,0 20.2381,39.1222,0 20.13298,39.19515,0 20.07227,39.36417,0 19.87652,39.44391,0 19.80221,39.58348,0 19.36993,39.84311,0 19.37265,39.8712,0 19.57928,39.90293,0 19.95083,39.78693,0 19.98255,39.68724,0 20.01002,39.6912,0 20.19916,39.64472,0 20.26444,39.66916000000001,0 20.32083,39.7336,0 20.29138,39.80667,0 20.38138,39.78722,0 20.41445,39.82443,0 20.3161,39.99334,0 20.39416,39.99917000000001,0 20.45,40.07249,0 20.67195,40.09805,0 20.67861,40.18527,0 20.72111,40.22305,0 20.71306,40.27833,0 20.78972,40.36083,0 20.78889,40.42832,0 20.84889,40.47916,0 20.94556,40.46694,0 21.04138,40.56195,0 21.05194,40.67666000000001,0 20.96194,40.77166,0 20.98349,40.8559,0 21.34305,40.87193,0 21.41972,40.91917,0 21.6,40.87277,0 21.69445,40.93805,0 21.79222,40.93278,0 21.80416,40.97777,0 21.91195,41.04943,0 21.91611,41.09527,0 22.06667,41.15834,0 22.13111,41.12500000000001,0 22.25667,41.17139,0 22.33417,41.12722,0 22.58555,41.11944,0 22.6725,41.18777,0 22.72917,41.14471,0 22.77222,41.32444,0 22.96083,41.3586,0 22.9525,41.63444,0 23.03277,41.72834000000001,0 22.96193,41.77861,0 22.89584,41.88527,0 22.86444,42.02722,0 22.67528,42.0675,0 22.5211,42.14861,0 22.36527,42.32389,0 22.45639,42.34027,0 22.55805,42.47916,0 22.43861,42.57471000000001,0 22.46111,42.6925,0 22.50139,42.73916,0 22.44222,42.82167,0 22.525,42.87861,0 22.74556000000001,42.89361,0 22.79083,42.98527,0 22.96639,43.10167,0 23.00721,43.19611,0 22.90444000000002,43.23082,0 22.76666,43.38582,0 22.54333000000001,43.4725,0 22.49555000000001,43.57028,0 22.49555000000001,43.64555,0 22.4275,43.68861,0 22.35945,43.81694,0 22.41695,44.00695,0 22.6225,44.07083,0 22.61667,44.17278,0 22.68144,44.2247,0 22.6875,44.27777,0 22.54972,44.32306,0 22.45734,44.47435,0 22.54611,44.4875,0 22.59027,44.54916,0 22.69958,44.52252,0 22.76489000000001,44.55901,0 22.47916,44.71027,0 22.31361,44.66417,0 22.17694,44.48194000000001,0 22.14638,44.47916,0 22.08444,44.50306,0 21.99389,44.63556,0 21.64944,44.65778,0 21.58834,44.76332000000001,0 21.40040000000001,44.78082,0 21.36611,44.86444,0 21.55861,44.89611,0 21.54083,44.93861,0 21.36695,45.00832,0 21.44722000000001,45.035,0 21.46028,45.10277,0 21.51277,45.12333,0 21.51361,45.15111000000001,0 21.41666,45.21472000000001,0 21.2675,45.23278,0 21.16306,45.30972,0 21.04889,45.31639,0 20.78305,45.48472,0 20.82361,45.53249,0 20.76666,45.60999,0 20.79888,45.65667,0 20.80139,45.76416,0 20.71334,45.74389,0 20.59167,45.89417000000001,0 20.37805,45.97806,0 20.26102,46.11486,0 20.34027,46.15944,0 20.47805,46.14972,0 20.48694,46.18110999999999,0 20.62472,46.13027000000002,0 20.72056,46.16555,0 20.72056,46.19166,0 20.76305,46.19917000000001,0 20.75332,46.23888000000001,0 20.82028,46.27472,0 21.05944,46.23917,0 21.17667,46.29556,0 21.19721,46.39139,0 21.29222,46.42027000000001,0 21.26056,46.49528000000001,0 21.32666,46.61999,0 21.40500000000001,46.62111000000001,0 21.44194,46.68194,0 21.52194,46.71277000000001,0 21.48806,46.75278000000001,0 21.51972,46.81527,0 21.60527,46.85722000000001,0 21.59972000000001,46.91805000000001,0 21.67167,46.95138,0 21.69583,47.00082,0 21.65111,47.02972000000001,0 21.79084,47.12028000000001,0 21.9225,47.35443,0 22.00972,47.38083,0 22.01527000000001,47.51445,0 22.18639,47.59861000000001,0 22.27694,47.72861000000001,0 22.42139,47.74389,0 22.45444,47.79639000000001,0 22.65361,47.77638000000001,0 22.77444,47.8364,0 22.77084,47.87943,0 22.8948,47.95454,0 22.85056,47.98083,0 22.8825,48.04694,0 22.7975,48.11472,0 22.62116,48.10163,0 22.57528,48.19443,0 22.50445,48.24749000000001,0 22.37861,48.24554,0 22.31888,48.31416000000001,0 22.31944,48.36166,0 22.26028,48.36082,0 22.26889,48.40721,0 22.15145,48.41192000000001,0 22.15888,48.58027,0 22.32888,48.68694000000001,0 22.34805,48.76416,0 22.38917,48.79722,0 22.37694,48.85194,0 22.46749,48.97860000000001,0 22.53721,48.99554,0 22.55805,49.07944,0 22.59805,49.09109999999999,0 22.67417,49.04416000000001,0 22.76916,49.05332,0 22.88607,49.00292,0 22.87611,49.09,0 22.73472,49.17722000000001,0 22.70028,49.16555,0 22.76027,49.29528,0 22.73833,49.39027,0 22.69222,49.42333000000001,0 22.65611,49.51972,0 22.68607,49.5771,0 23.14611,49.98305,0 23.67694,50.32444,0 23.70388,50.37833,0 23.99166,50.40721,0 24.02611,50.49388,0 24.13277,50.54445000000001,0 24.07972,50.70499000000001,0 23.9525,50.79472,0 23.97277,50.82805000000001,0 24.11472,50.83138000000001,0 24.14471,50.85804,0 23.96638,50.94887,0 23.86277,51.09833,0 23.86694,51.14861,0 23.63611,51.30110000000001,0 23.69306,51.40471,0 23.60463,51.52769,0 23.56138,51.5425,0 23.53499,51.65359000000001,0 23.55556,51.74943,0 23.62944,51.80471,0 23.59472,51.8336,0 23.61173,51.91397,0 23.67277,51.99138,0 23.63861,52.07944,0 23.51472,52.1236,0 23.49304,52.17416000000001,0 23.20638,52.22526,0 23.1654,52.28227,0 23.39722,52.51445,0 23.59722,52.59639,0 23.75389,52.61583000000001,0 23.94083,52.73220000000001,0 23.91527,52.91888,0 23.93305,53.01417,0 23.87805000000001,53.07555,0 23.91055,53.16721,0 23.81472,53.25444,0 23.67472,53.4911,0 23.50404,53.94704,0 23.47528000000001,53.99110000000001,0 23.51777,54.03028,0 23.48444,54.13833000000001,0 23.35028000000001,54.23888000000001,0 23.14249,54.31054,0 23.06611,54.30804,0 23.06166,54.35167,0 22.98749000000001,54.38917000000001,0 22.85611,54.4086,0 22.78588,54.36384,0 22.69444,54.47332000000001,0 22.69832,54.58943000000001,0 22.74055,54.72777000000001,0 22.84249,54.77749,0 22.86916,54.82333,0 22.83499000000001,54.90166,0 22.75555,54.92055000000001,0 22.77056,54.93888,0 22.73222000000001,54.96249,0 22.64082000000001,54.96638,0 22.5992,55.07113,0 22.19722000000001,55.06166,0 22.06194,55.02749000000001,0 22.00972,55.08778,0 21.86305,55.09194,0 21.64027,55.18472,0 21.50389,55.19332,0 21.38128,55.28709,0 21.26394,55.24899,0 20.98481,55.27655,0 20.94284,55.2872,0 21.30838,59.61593000000001,0 19.36751,59.65187,0 19.33158,60.19100000000001,0 20.69736,63.31795000000001,0 24.16601,65.8115,0 23.9486,66.10138000000001,0 23.9125,66.14833,0 23.72222,66.20027,0 23.63917,66.43053999999999,0 23.72527,66.50082999999999,0 23.87861,66.55722,0 23.89,66.74303999999999,0 24.00777,66.80055,0 23.57167,67.15666,0 23.61028,67.20166,0 23.58445,67.22387000000001,0 23.60555,67.25943,0 23.77333,67.31444000000001,0 23.74472,67.36834,0 23.76778,67.41611,0 23.54917,67.45332999999999,0 23.48695,67.43804,0 23.42889,67.47584000000001,0 23.47195,67.55638,0 23.55361,67.58749,0 23.48083,67.72665000000001,0 23.48333,67.86305,0 23.64472,67.91306,0 23.65695,67.95081999999999,0 23.39445,68.0425,0 23.30722,68.13916,0 23.15138,68.12277,0 23.14222,68.23000999999999,0 22.8236,68.38805000000001,0 22.33471,68.47275999999999,0 22.05056,68.47915999999999,0 21.89722,68.56999,0 21.7575,68.57693,0 21.62306,68.64942000000001,0 21.46556,68.67805,0 21.40666,68.74361,0 21.30195,68.75555,0 21.08139,68.86665000000001,0 20.89527,68.89361,0 20.88888,68.92583000000002,0 20.93889,68.95834000000001,0 20.86666,69.00499000000001,0 20.60417,69.05305,0 20.58093,69.0603,0 20.73833,69.09636999999999,0 21.05944,69.03444,0 21.11305,69.10805000000002,0 21.04222,69.16082,0 21.02806,69.20805,0 21.055,69.22861,0 21.32083,69.32611,0 21.68195,69.28471,0 22.34667,68.8447,0 22.39833,68.71111000000001,0 22.55,68.73779,0 22.80277,68.69138,0 23.06389,68.69555,0 23.22500000000001,68.62971,0 23.69277,68.71222,0 23.83,68.82999,0 23.97639,68.83249000000001,0 24.35139,68.71053000000001,0 24.75445,68.66025999999999,0 24.89566,68.5582,0 24.95523,68.60391,0 25.10334,68.63472,0 25.15472,68.76778,0 25.21445,68.81749000000001,0 25.40695,68.88638,0 25.58555,68.87887000000001,0 25.65277,68.90639,0 25.81277,69.0175,0 25.73222,69.10916,0 25.71333,69.25526000000001,0 25.755,69.34220999999999,0 25.83361,69.38416000000001,0 25.82666,69.43638,0 25.87416,69.48636999999999,0 25.85277,69.54666,0 25.9575,69.59027,0 25.97416,69.63527000000001,0 25.94194,69.66722,0 25.97834,69.70193,0 26.15583,69.74249,0 26.37806000000001,69.85444,0 26.47056,69.93527,0 26.80658,69.95206,0 27.06889,69.90860000000001,0 27.29194,69.95,0 27.3,69.99055,0 27.53833,70.03525999999999,0 27.57333,70.06887999999999,0 27.87305,70.08804000000001,0 27.94416,70.08027,0 27.97916,70.00664999999999,0 28.09417,69.93859000000001,0 + + + 1 + + + + + +37.5369,84.90001,0 37.5369,81.47494,0 35.86762,81.47494,0 35.86762,78.71200000000002,0 37.59446,78.71200000000002,0 37.56522,73.71208,0 37.5369,68.86902000000001,0 37.16386,68.89137,0 36.23384,69.15934,0 35.31956,69.30909,0 33.48315,69.49036,0 33.13635,69.77410999999999,0 32.28514,69.92385,0 31.92259,70.01843,0 31.17443,70.36256,0 30.18603,70.73994,0 28.92806,70.93761000000001,0 28.20923,71.09936999999999,0 25.9988,71.18922000000001,0 24.72286,71.15327000000001,0 23.95011,71.17124,0 22.54661000000001,70.84514,0 22.54661000000001,75.84414,0 23.89267,75.84414,0 28.89267,75.84414,0 33.89268,75.84414,0 33.89268,76.51716999999999,0 33.89268,81.51716999999999,0 32.54661,81.51716999999999,0 27.54661,81.51716999999999,0 22.54661000000001,81.51716999999999,0 22.54661000000001,84.90001,0 22.54661000000001,89.90000000000001,0 23.54596,89.90000000000001,0 24.54531,89.90000000000001,0 25.54466,89.90000000000001,0 26.54402,89.90000000000001,0 27.54338,89.90000000000001,0 28.54273,89.90000000000001,0 29.54207,89.90000000000001,0 30.54143,89.90000000000001,0 31.54078000000001,89.90000000000001,0 32.54013,89.90000000000001,0 33.53948,89.90000000000001,0 34.53884000000001,89.90000000000001,0 35.53819,89.90000000000001,0 36.53754,89.90000000000001,0 37.5369,89.90000000000001,0 37.5369,84.90001,0 + + + 1 + + + + + GMT +03:00 + + +]]> + #khStyle0300 + + + + + +42.79083,37.38472,0 42.95554,37.32222,0 43.14971,37.37777,0 43.27916,37.3161,0 43.35666,37.33083,0 43.49471,37.24972,0 43.79110000000001,37.23194,0 43.83444,37.20499,0 43.91138,37.22415,0 44.01416,37.32054,0 44.11638,37.31638,0 44.26166,37.24194,0 44.26777,37.1675,0 44.19333,37.10027,0 44.25527,36.98666,0 44.31721,36.97055,0 44.35111,37.04833,0 44.43638000000001,37.06304,0 44.63806,37.18748,0 44.78733,37.1497,0 44.76554,37.11694,0 44.78499,37.08472,0 44.90972000000001,37.02388,0 44.88416,36.96166,0 44.90664,36.88832,0 44.84915,36.79832,0 45.01277000000001,36.7536,0 45.06666000000001,36.68054,0 45.01471000000002,36.53527,0 45.09415,36.42443,0 45.23916,36.43137,0 45.27916,36.3811,0 45.27303000000001,36.30859,0 45.30332000000001,36.28083,0 45.27582,36.25776,0 45.31971,36.23832,0 45.32027000000001,36.15609,0 45.36832,36.08637,0 45.33165,36.01416,0 45.34916,35.99055,0 45.50555000000001,36.02055,0 45.55777000000001,36.0022,0 45.66332000000001,35.94054,0 45.76583000000001,35.81194,0 46.08749,35.86639,0 46.18166000000001,35.80417,0 46.34444,35.82193,0 46.2686,35.72805,0 46.02944,35.68776,0 46.02388,35.57999,0 45.97999000000001,35.58471,0 46.0061,35.53778,0 45.99221,35.48109,0 46.14805,35.29746,0 46.11916000000001,35.24444,0 46.19305,35.21111,0 46.15331,35.1611,0 46.16638,35.10722,0 46.03944,35.05833,0 45.93378,35.09876,0 45.92193000000001,35.05443,0 45.8786,35.03527,0 45.89555,34.9636,0 45.86776,34.9036,0 45.77249,34.91444,0 45.76611,34.84583,0 45.68860000000002,34.81528,0 45.6511,34.72694,0 45.70833,34.65915,0 45.72220999999999,34.55665,0 45.61472,34.55999,0 45.52473000000001,34.6032,0 45.52555,34.50249,0 45.43555000000001,34.45528,0 45.48777000000001,34.33583,0 45.53555,34.35111,0 45.58472,34.30249,0 45.54695000000002,34.18833,0 45.56276,34.14054,0 45.46888,34.07917,0 45.40582,33.9711,0 45.50804,33.94249,0 45.68888,33.67499,0 45.75527000000001,33.63361,0 45.74694,33.59166,0 45.90659000000001,33.63655,0 45.89666,33.60139,0 45.9486,33.55665,0 45.87471,33.49166,0 46.00647000000001,33.48579,0 46.05027000000001,33.37778,0 46.17555000000001,33.2686,0 46.19944,33.19582,0 46.11138,33.11277,0 46.05138000000001,33.11832,0 46.05416000000001,33.08805,0 46.14972,33.06527,0 46.0975,33.00555,0 46.10722,32.96749,0 46.42388,32.93749,0 46.73944000000001,32.75999,0 47.1375,32.46305,0 47.27499000000001,32.49194,0 47.3561,32.47638,0 47.43416,32.39778,0 47.41332,32.34109,0 47.52887,32.22887,0 47.5075,32.15416,0 47.68971000000001,32.02388,0 47.79056000000001,31.86,0 47.86445,31.79861,0 47.69721000000001,31.40778,0 47.69388000000001,31.00111,0 48.03638,30.99749,0 48.03249,30.49138,0 48.16043,30.42708,0 48.1992,30.32573,0 48.27964000000001,30.33528,0 48.40781,30.21121,0 48.38777000000001,30.13694,0 48.45333000000001,29.99805,0 48.54556,29.96302,0 48.59428,29.94093000000001,0 49.22824000000001,30.14287,0 49.3535,30.13924,0 49.55681000000001,29.98495000000001,0 50.0717,29.82476,0 50.27212,29.1344,0 51.29651,27.95413,0 51.54147,27.7537,0 52.52133,27.48647,0 52.52133,24.12054,0 52.33083,23.99971,0 52.08055,23.95555,0 51.94305,23.99277,0 51.92555000000001,23.95471,0 51.79873,24.01633,0 51.77584000000001,24.27528,0 51.74389,24.28639,0 51.70888,24.21472,0 51.67222,24.2725,0 51.63556000000001,24.20972,0 51.62222000000001,24.34472,0 51.59138,24.37833,0 51.58423000000001,24.26046,0 51.58333,24.11666,0 52.58333,22.93889,0 55.14166,22.63333,0 55.19917000000002,22.69972,0 55.66611000000001,21.99972,0 55.00000000000001,20,0 51.99929,18.99934,0 53.11444,16.64278,0 52.94389,16.60806,0 52.52133,16.43764,0 52.52133,13.61265,0 55.86174,13.61265,0 55.86174,10.62857,0 52.52067,10.62583,0 52.52069,7.825823000000002,0 52.52073,2.825829000000001,0 52.52075,-2.174176,0 52.52079000000001,-7.17417,0 52.52081,-12.17417,0 52.52085,-17.17417,0 52.52089,-22.17417,0 52.52089,-24.17416,0 52.52093000000001,-29.17417,0 52.52097,-34.17416,0 52.521,-39.17416,0 52.52101,-41.47417,0 52.52105,-46.47416000000001,0 52.52108,-51.47417,0 52.52111,-56.47416,0 52.52115,-61.47417000000001,0 52.52118000000001,-66.47416,0 52.52121000000001,-71.47417,0 52.52125,-76.47417,0 52.52126,-78.97417,0 52.52129000000001,-83.97417000000002,0 52.52133,-88.97416,0 52.52133,-89.90000000000001,0 51.52188,-89.90000000000001,0 50.52242,-89.90000000000001,0 49.52297,-89.90000000000001,0 48.52351,-89.90000000000001,0 47.52406,-89.90000000000001,0 46.52459000000001,-89.90000000000001,0 45.52513,-89.90000000000001,0 44.52568,-89.90000000000001,0 43.52622,-89.90000000000001,0 42.52677,-89.90000000000001,0 41.52731,-89.90000000000001,0 40.52786,-89.90000000000001,0 39.5284,-89.90000000000001,0 38.52895,-89.90000000000001,0 37.52949,-89.90000000000001,0 37.52949,-84.89999,0 37.52949,-79.90000000000001,0 37.52949,-74.90000000000001,0 37.52949,-69.90000000000001,0 37.52949,-67.36546000000001,0 37.52949,-62.36546000000001,0 37.52949,-57.36545,0 37.52949,-52.36546,0 37.52949,-49.06545000000001,0 37.52949,-44.06546000000001,0 37.52949,-39.06546,0 37.52949,-34.06546,0 37.52949,-29.06546000000001,0 37.52949,-24.06546,0 37.52949,-19.06546,0 37.52949,-17.56545,0 37.87222,-17.37639,0 38.11138,-17.31139,0 38.13083,-17.25361,0 38.07889,-17.19278,0 38.11694,-17.20889,0 38.12889,-17.17834,0 38.15666,-17.2914,0 38.4975,-17.14417,0 38.50638000000001,-17.10973,0 38.54056,-17.12584,0 38.58806,-17.07723,0 38.60472,-17.09916,0 38.67889,-17.0775,0 38.66444,-17.02916,0 38.70972,-17.06361,0 38.81833,-17.05778,0 39.00154,-16.99003,0 39.08583,-16.99168,0 39.12749,-16.93305,0 39.08361,-16.91612,0 39.12917,-16.90084,0 39.12749,-16.87042,0 39.15639,-16.88083,0 39.28388,-16.76834,0 39.71716,-16.50974,0 39.7965,-16.46608,0 39.85722,-16.43055,0 39.90667000000001,-16.4168,0 39.98191,-16.23304,0 40.13582,-15.9925,0 40.13027,-15.9675,0 40.08749,-16.00944,0 40.06472,-15.99361,0 40.17528,-15.92,0 40.36028,-15.72333,0 40.49666000000001,-15.52917,0 40.54333,-15.53417,0 40.58777,-15.47973,0 40.57167,-15.45111,0 40.68472,-15.24973,0 40.62722,-15.155,0 40.57805,-15.20278,0 40.51445,-15.18723,0 40.52888,-15.13278,0 40.60167,-15.13389,0 40.64527,-15.08279,0 40.70888000000001,-15.07834,0 40.66,-14.98721,0 40.78027,-14.98667,0 40.74722,-14.92834,0 40.66305,-14.92111,0 40.64527,-14.85806,0 40.66888,-14.9075,0 40.72278,-14.89279,0 40.84195,-14.795,0 40.84472,-14.68611,0 40.8064,-14.61417,0 40.82999,-14.53028,0 40.76083,-14.53805,0 40.82804,-14.49944,0 40.81166000000001,-14.40779,0 40.68999,-14.43584,0 40.6661,-14.5375,0 40.62777,-14.56944,0 40.6264,-14.445,0 40.65472000000001,-14.44195,0 40.6375,-14.33973,0 40.66916,-14.36723,0 40.72861,-14.34306,0 40.74472,-14.27473,0 40.70361,-14.18222,0 40.64917,-14.1975,0 40.59,-14.26834,0 40.59389,-14.21084,0 40.55584,-14.23,0 40.53054,-14.17166,0 40.62277,-14.12555,0 40.59666,-14.08722,0 40.63833000000001,-14.07918,0 40.64999000000001,-14.01694,0 40.53749,-13.64528,0 40.60056,-13.57084,0 40.52584,-13.51528,0 40.59111,-13.37473,0 40.56528,-13.3664,0 40.56638,-13.285,0 40.52833,-13.3025,0 40.56806,-13.26222,0 40.56,-13.07861,0 40.59722,-12.97334,0 40.50166000000001,-12.94445,0 40.48972,-13.0275,0 40.41,-12.96194,0 40.47666,-12.88417,0 40.53416,-12.90416,0 40.55639,-12.85445,0 40.52361,-12.81778,0 40.56638,-12.81889,0 40.55889,-12.785,0 40.64194,-12.7814,0 40.61639,-12.71334,0 40.57139,-12.69806,0 40.57444,-12.64306,0 40.61845,-12.65416,0 40.63672,-12.37548,0 40.60549,-11.96501,0 40.49342,-11.91995,0 40.51611,-11.84333,0 40.47556,-11.82029,0 40.42417,-11.64973,0 40.45805,-11.60583,0 40.42471,-11.55416,0 40.47889,-11.40556,0 40.71345000000001,-11.17438,0 40.70627,-10.84757,0 40.64145,-10.69888,0 40.63945,-10.67166,0 40.57332,-10.65,0 40.55972,-10.58666,0 40.50388,-10.56444,0 40.52111,-10.48416,0 40.47277,-10.50778,0 40.47834,-10.4825,0 40.43681,-10.47817,0 40.3425,-10.56722,0 40.23611,-10.60278,0 40.00666,-10.80555,0 39.89832000000001,-10.83166,0 39.76694000000001,-10.92056,0 39.50833,-10.99528,0 39.26805,-11.16806,0 39.13444,-11.14195,0 38.89777,-11.17222,0 38.77389,-11.26166,0 38.65527,-11.2811,0 38.49171,-11.41531,0 38.37777,-11.37722,0 38.27972,-11.28834,0 38.09669,-11.25633,0 37.86861,-11.32666,0 37.80972,-11.48,0 37.81582,-11.53833,0 37.66306,-11.63833,0 37.52666,-11.6625,0 37.46204,-11.72732,0 37.34722,-11.68667,0 37.28611,-11.70418,0 37.12583,-11.67333,0 37.02584,-11.56721,0 36.90445,-11.59473,0 36.82972,-11.56861,0 36.67777,-11.71472,0 36.56195,-11.74028,0 36.49001,-11.68111,0 36.18972,-11.70666,0 36.16305,-11.57778,0 35.96556,-11.50084,0 35.94306,-11.43473,0 35.83833,-11.41472,0 35.7725,-11.47528,0 35.70389,-11.48778,0 35.6525,-11.58473,0 35.57638,-11.60667,0 35.51611,-11.61084,0 35.49416,-11.57918,0 34.96673,-11.57211,0 34.95972,-11.48666,0 34.89054,-11.38306,0 34.80555,-11.33222,0 34.76361000000001,-11.345,0 34.71027,-11.20111,0 34.615,-11.10945,0 34.59305,-11.01668,0 34.64305,-10.92194,0 34.67611000000001,-10.74306,0 34.57583,-10.51667,0 34.58277,-10.27,0 34.52389,-10.1075,0 34.5225,-10.01084,0 34.33805,-9.7875,0 34.32527,-9.73278,0 34.03944,-9.482779000000001,0 33.95721,-9.526671,0 33.95305000000001,-9.673335000000002,0 33.91961,-9.707652,0 33.75583,-9.582777999999999,0 33.68361,-9.610552,0 33.585,-9.584164,0 33.50889,-9.621945,0 33.43777,-9.615834,0 33.39388,-9.538055999999999,0 33.31444000000001,-9.485550999999999,0 33.1925,-9.509167,0 33.12583,-9.490285,0 32.99777,-9.373339,0 32.9404,-9.405072000000001,0 32.77166,-9.335557,0 32.74195,-9.281665,0 32.54527,-9.26667,0 32.42556,-9.129718000000002,0 32.24945000000001,-9.131949000000001,0 32.16,-9.063333999999999,0 32.05611,-9.040832999999999,0 31.97972,-9.071109999999999,0 31.93416,-9.018891,0 31.95611,-8.930835999999999,0 31.78553000000001,-8.885061,0 31.73861,-8.918056,0 31.68361000000001,-8.908894,0 31.57305,-8.818605,0 31.56332,-8.698608,0 31.45945,-8.629443,0 31.39806,-8.629443,0 31.37556,-8.582229999999999,0 31.28527,-8.623333000000001,0 31.22055,-8.576668,0 31.13277,-8.615557000000001,0 31.04111,-8.590284000000001,0 30.90138,-8.460001,0 30.77123,-8.192242,0 30.65445,-7.886943,0 30.45583,-7.580277000000001,0 30.40695,-7.356393,0 30.31138,-7.136947000000001,0 30.08611,-6.863607,0 29.73250000000001,-6.627501,0 29.66111,-6.455556,0 29.55029,-6.295285,0 29.49777,-5.979726000000001,0 29.63166,-5.721949,0 29.34916000000001,-4.939732,0 29.34139,-4.797783,0 29.42834,-4.552218,0 29.42334,-4.447504,0 29.75222000000001,-4.461112,0 29.81277,-4.360284,0 29.85777,-4.371111,0 30.02611,-4.269447,0 30.07277,-4.166667,0 30.17222,-4.086667,0 30.22806,-3.928051,0 30.32111,-3.78666,0 30.40084,-3.786112,0 30.39139,-3.711106000000001,0 30.44916,-3.547215000000001,0 30.66222,-3.418893999999999,0 30.66361,-3.386665,0 30.6222,-3.370122,0 30.65166,-3.332503,0 30.835,-3.256948,0 30.85222,-3.145285,0 30.79555,-3.048607,0 30.84477,-2.976012,0 30.66611,-2.976391,0 30.56333,-2.89305,0 30.485,-2.947222,0 30.4175,-2.861946999999999,0 30.44028000000001,-2.747215,0 30.52222,-2.657215,0 30.45721,-2.685835,0 30.43305,-2.647783,0 30.57332,-2.399167,0 30.6525,-2.396665000000001,0 30.69972,-2.347497,0 30.78222,-2.380554,0 30.82917,-2.357785,0 30.89417,-2.076112,0 30.80832,-1.929448,0 30.835,-1.800559,0 30.81111,-1.700551,0 30.84027,-1.670554,0 30.74888,-1.52055,0 30.73917,-1.436949,0 30.56166,-1.326943,0 30.51222,-1.164448,0 30.46945,-1.158337,0 30.45333000000001,-1.095553,0 30.48222,-1.063333,0 30.36,-1.060003,0 30.34566,-1.129168,0 30.22916,-1.266661,0 30.18472,-1.275004,0 30.17056,-1.339723,0 29.97500000000001,-1.464445,0 29.9075,-1.464166,0 29.84139,-1.320283,0 29.80306,-1.365553,0 29.73416,-1.341946,0 29.68332,-1.380556,0 29.59694,-1.385839,0 29.56639,-1.005841,0 29.57833,-0.9000005,0 29.62832,-0.8888946000000001,0 29.61833,-0.7333385,0 29.63805,-0.5933346000000001,0 29.67195,-0.5722206,0 29.64861,-0.4397225,0 29.735,-0.00083754,0 29.71666000000002,0.07221546,0 29.77332,0.1722145,0 29.81389,0.1586065,0 29.85833,0.3666595,0 29.9625,0.4872144,0 29.93833,0.6344455,0 29.96055000000001,0.8255515,0 30.14583,0.8983344000000001,0 30.21861000000001,0.9963894000000001,0 30.23611,1.134161,0 30.27805,1.168893,0 30.33221,1.151387,0 30.34861,1.196108,0 30.45611,1.212785,0 30.68806,1.493891,0 31.03666000000001,1.765556,0 31.30277,2.121389,0 31.2992,2.162853,0 31.2025,2.229164,0 31.19694,2.305835,0 31.12528,2.278053,0 31.04972,2.303891,0 31.07027,2.335005,0 30.97084,2.411945,0 30.91416,2.339442,0 30.88027,2.337497,0 30.82527,2.399165,0 30.82667,2.442221,0 30.72972,2.448053,0 30.81667,2.769165,0 30.87806000000001,2.843612,0 30.85555,2.957499,0 30.7625,3.055004,0 30.83,3.275558,0 30.935,3.411665,0 30.91721,3.521942,0 30.85882000000001,3.493394,0 30.97471,3.691943,0 31.17667000000001,3.795281,0 31.28806,3.794714,0 31.54083,3.653611999999999,0 31.57389,3.691664,0 31.70194,3.713058000000001,0 31.79945,3.825557,0 31.93332,3.687785,0 31.95111,3.593889,0 32.0639,3.59028,0 32.09361,3.532500000000001,0 32.19333,3.511394999999999,0 32.19443,3.611042,0 32.40445,3.743613,0 32.71944,3.755834,0 32.89804,3.811949,0 33.01666,3.888612,0 33.18388,3.766113,0 33.51694,3.752217,0 33.99666,4.222782,0 34.38819,4.609683,0 35.50888,4.616738,0 35.94056,4.622499,0 35.77443,4.798611,0 35.77389,5.075279,0 35.83083,5.153894000000001,0 35.79556,5.251391,0 35.83583,5.318613,0 35.68443,5.391387,0 35.605,5.373054,0 35.50472,5.431391,0 35.44749,5.429448,0 35.35638,5.350275,0 35.31138,5.366942,0 35.26972,5.441112,0 35.28999,5.507774,0 35.10388,5.632496000000001,0 35.10582,5.692779000000001,0 34.98639,5.878052000000001,0 34.98782,6.013944,0 34.86055,6.26166,0 34.85722,6.349445000000001,0 34.79777,6.444719,0 34.76277,6.605837000000002,0 34.6375,6.727221,0 34.53,6.743888,0 34.46999,6.916112,0 34.2947,6.966432000000001,0 34.2025,7.052219000000001,0 34.1825,7.163054000000001,0 34.13361,7.158887,0 34.03,7.240832,0 34.03083000000001,7.375004,0 33.89278,7.518888,0 33.78889,7.56639,0 33.71139,7.660277,0 33.55138,7.686387,0 33.47027,7.743339000000001,0 33.33944,7.713612000000001,0 33.16806,7.796393000000001,0 33.05389,7.788888,0 32.99683,7.887221000000001,0 33.03028,7.995248000000001,0 33.18643,8.136979999999999,0 33.16527,8.204715,0 33.20861,8.238049999999999,0 33.15834,8.291392999999999,0 33.16082,8.360001000000001,0 33.20444,8.433890000000002,0 33.2625,8.462502000000001,0 33.38777,8.43777,0 33.50777,8.480834,0 33.57804,8.449443000000001,0 33.62555,8.470556,0 33.69333,8.386389000000001,0 33.77599,8.364941999999999,0 33.85249,8.425836,0 33.97888,8.441387000000002,0 34.1228,8.584649000000001,0 34.13499,8.955270000000001,0 34.08583,9.553058999999999,0 34.23138000000001,10.03027,0 34.32306,10.11721,0 34.34777,10.23195,0 34.28611,10.55416,0 34.43972,10.78445,0 34.59444,10.88779,0 34.77333,10.74584,0 34.77333,10.68694,0 34.80861,10.72945,0 34.86443,10.735,0 34.86861,10.78582,0 34.97527,10.86445,0 34.97861,10.91527,0 34.93333,10.95666,0 35.0075,11.19833,0 34.96388,11.25695,0 35.09361,11.55778,0 35.05806,11.72056,0 35.09693,11.82694,0 35.23555,11.90083,0 35.27111,11.97555,0 35.34555,12.03277,0 35.3811,12.16111,0 35.43249,12.20055,0 35.64916,12.59417,0 35.69528,12.61222,0 35.69944,12.66583,0 36.00638,12.72416,0 36.1427,12.70692,0 36.16528,12.87527,0 36.13278,12.92333,0 36.16972,12.98416,0 36.15944,13.04167,0 36.24860000000001,13.36805,0 36.3975,13.56778,0 36.48693,13.83944,0 36.44639,13.95695,0 36.54282,14.26206,0 36.44329,15.14995,0 36.54277,15.23472,0 36.61054,15.43721,0 36.64777000000001,15.44971,0 36.62611,15.48945,0 36.69777,15.75305,0 36.76361,15.80806,0 36.91584,16.215,0 36.97305,16.26944,0 36.95694,16.42528,0 36.89638,16.51777,0 36.91222,16.64111,0 36.98055,16.70611,0 37.02278,16.85056,0 36.98693,16.94306,0 37.01805,17.00361,0 36.99582,17.07389,0 37.15194,17.01555,0 37.30693000000001,17.06111,0 37.42329,17.03422,0 37.52058,17.1958,0 37.5125,17.32333,0 37.73584,17.37666,0 37.81888,17.48139,0 37.91722,17.4475,0 38.05584,17.55194,0 38.09555,17.54389,0 38.11138,17.48111,0 38.13361,17.5486,0 38.18583,17.56222,0 38.25777,17.5325,0 38.27667,17.60694000000001,0 38.37029,17.66611,0 38.45861,17.87111,0 38.60069,17.99488,0 38.64405,18.06641,0 38.51692,18.23592,0 38.24853,18.39601,0 38.23912000000001,19.32831,0 37.51406,19.32831,0 37.51406,24.19318,0 37.01093,24.97079,0 36.96872,25.39901,0 36.83,25.51963,0 36.54049,25.54376,0 36.47416,25.62217,0 36.49828,26.06245,0 35.71421,27.09985,0 35.26789,27.63060000000001,0 34.88189,27.89598,0 34.6346,27.87186,0 34.49483,27.93732,0 34.48494,27.99542,0 34.5714,28.09056,0 34.62749000000001,28.17388,0 34.65972,28.16445,0 34.64528,28.19361,0 34.80778,28.53639,0 34.78054,28.67083,0 34.84254,28.88452,0 34.85527,29.03861,0 34.96139,29.36083,0 36.07,29.18889,0 36.50055,29.50277000000001,0 36.74361,29.86472,0 37.50277,30.00222000000001,0 37.6675,30.33639,0 38.00139,30.50417,0 37.00527,31.50555,0 39.005,32.00556,0 39.19675,32.15495,0 39.30111,32.23638,0 39.26,32.35555,0 39.04366,32.30405,0 38.98602,32.47767,0 39.08601,32.50151,0 38.7947,33.37759,0 41.00388,34.41944,0 41.22915,34.78832,0 41.21527,35.22471,0 41.27777,35.49554,0 41.38388,35.62527,0 41.37806,35.83861,0 41.25499000000001,36.05499,0 41.29027000000001,36.35555,0 41.40304,36.52555,0 41.83528,36.59888,0 42.37723,37.06467000000001,0 42.35562,37.10693,0 42.58165,37.15277,0 42.72666,37.35555000000001,0 42.79083,37.38472,0 + + + 1 + + + + + +52.49656000000001,84.90001,0 52.49656000000001,82.81507000000001,0 57.49650000000001,82.84008,0 62.49644000000001,82.86508000000001,0 67.49638,82.89008,0 67.53675,82.89028,0 67.53675,81.66452,0 67.53675,77.00954,0 68.50082,76.95638,0 68.47275999999999,76.92554,0 68.80942,76.86638000000002,0 68.75443,76.82222,0 68.93137,76.78276,0 68.89361,76.75749,0 68.90054000000001,76.72776,0 69.03027000000002,76.70802999999999,0 68.85637,76.65665,0 68.78471999999999,76.58778,0 68.92554,76.55888,0 68.57971000000001,76.43304999999999,0 68.40109,76.40609000000001,0 68.43941,76.38972,0 68.33333,76.33582,0 68.16943999999999,76.31805,0 68.31331,76.28333000000001,0 67.53675,76.19176,0 67.53675,73.95477,0 67.53675,71.40988,0 67.08581000000001,71.30387,0 66.91553999999999,71.29276,0 66.83665000000001,71.20972,0 66.78388,71.14221000000001,0 66.62154,71.04885,0 66.54228000000001,70.92879000000001,0 66.61275999999999,70.86773,0 66.68886999999999,70.76054000000001,0 67.10720000000001,70.83526999999999,0 67.22887,70.82555000000001,0 67.33249000000001,70.76888,0 67.33971,70.72499000000001,0 67.20889,70.52666000000001,0 67.29221,70.46998000000001,0 67.25194999999999,70.44832,0 67.26666,70.41110000000001,0 67.19971,70.39027,0 67.08862000000001,70.21623,0 67.07941,70.12733,0 66.99387,70.04886999999999,0 66.87331,70.00109999999999,0 66.76721000000001,69.75722,0 66.79192999999999,69.58028,0 66.93801000000001,69.52226,0 66.95407,69.40528000000001,0 67.16154,69.35935000000001,0 67.25494999999999,69.40298,0 67.37054999999999,69.52164999999999,0 67.38528000000001,69.61859,0 67.61304,69.59166999999999,0 67.78610000000001,69.51666,0 67.96748,69.48415,0 68.03804,69.48888,0 68.00721,69.51860000000001,0 68.10165000000001,69.54665,0 68.10942,69.38889,0 68.02139,69.3436,0 68.04749,69.28137,0 68.47331,68.97248999999999,0 68.78498,68.91081,0 69.02164000000001,68.96416000000001,0 69.03248000000001,68.94193,0 69.22026,68.95722000000001,0 68.94386,68.89803000000001,0 69.10831,68.87248,0 69.09526,68.83333,0 69.00888000000001,68.79998999999999,0 68.89776999999999,68.60748,0 68.56303,68.36942000000001,0 68.57165999999999,68.33778,0 68.64999,68.31219,0 68.56415,68.31052,0 68.43637,68.22499000000001,0 68.28333000000001,68.18498,0 68.27025999999999,68.23915,0 68.18526,68.23609999999999,0 68.20081999999999,68.29471,0 68.26054000000001,68.33472,0 68.15942,68.41137000000001,0 67.78306000000001,68.47749,0 67.70610000000001,68.51054000000001,0 67.80582,68.50082,0 67.77222,68.51776,0 67.32337,68.69279,0 67.27820000000001,68.74968,0 67.38152,68.76640999999999,0 67.39063,68.80437000000001,0 67.12005000000001,68.84113000000001,0 66.55627,68.91167,0 66.52336,68.9671,0 66.2572,69.07253,0 65.79581,69.13697000000001,0 65.38193,69.18471,0 65.04832,69.27332,0 64.91499,69.25471,0 64.94275,69.2047,0 64.83257,69.15213,0 64.51999000000001,69.01776,0 64.51749,68.98248,0 64.58389,68.96082,0 64.52139,68.90776,0 64.54998999999999,68.87053000000002,0 64.74582,68.85526,0 64.75499000000001,68.88527000000001,0 64.80415000000001,68.89194000000001,0 65.08055,68.80888,0 65.20220999999999,68.82331000000001,0 65.34860000000001,68.79192000000001,0 65.32639000000002,68.72499000000001,0 65.40498,68.73276,0 65.42941999999999,68.7,0 65.37831,68.68053999999999,0 65.52361000000001,68.58414999999999,0 65.66165,68.54694000000001,0 65.61443,68.52554000000001,0 65.60609,68.48499,0 65.48054999999999,68.43053999999999,0 65.26775000000001,68.21998000000001,0 65.33333,68.08638000000001,0 65.28498999999999,68.01194,0 65.43471,67.91804999999999,0 65.78055000000001,67.9233,0 65.91081,67.96332,0 66.08611000000001,67.93442,0 66.09248,67.89027,0 66.05443,67.88083,0 66.01805,67.79305000000001,0 66.18388,67.74832000000002,0 66.21053000000001,67.69609,0 66.10526,67.64554,0 65.99275,67.67915000000002,0 65.84054999999999,67.65192999999999,0 65.81805,67.62608,0 65.86832,67.60664,0 65.79165999999999,67.56971,0 66.0397,67.57693,0 66.10664,67.47859,0 65.96138000000001,67.39525999999999,0 65.69054,67.38665,0 65.67249,67.36609,0 65.71887,67.34054999999999,0 65.65886999999999,67.30609,0 65.18248,67.15082,0 65.22136999999999,67.07693,0 65.07055,67.03942000000001,0 65.10554000000001,67.00805000000001,0 65.10138000000001,66.89055000000001,0 64.5761,66.79915,0 64.53999,66.7272,0 64.41277,66.72387000000001,0 64.31247999999999,66.66443,0 63.98277,66.65358999999999,0 63.81554000000001,66.54721000000001,0 63.65888000000001,66.52582,0 63.53722000000001,66.46026999999999,0 63.40915,66.48109,0 63.40860000000001,66.45277,0 63.22332000000001,66.32638,0 63.30416000000001,66.2747,0 63.29056,66.23276,0 63.15388,66.26749,0 63.04694000000001,66.2247,0 62.95917000000002,66.1097,0 62.86166000000001,66.07720999999999,0 62.81750000000001,66.01194,0 62.88833000000002,65.97998,0 62.79777000000001,65.93109,0 62.86111,65.87804,0 62.73193000000001,65.85776,0 62.69388,65.86331,0 62.68193999999999,65.86304,0 62.11306,65.72083000000001,0 61.87027000000001,65.70222,0 61.68694,65.57388,0 61.58222000000001,65.55165,0 61.41555000000002,65.39639,0 61.24917,65.31887999999999,0 61.3336,65.28888000000001,0 61.23944,65.18552,0 61.11166,65.17221000000001,0 60.96277000000001,65.04165999999999,0 60.81194,65.04859999999999,0 60.63138,64.88361,0 60.59638,64.94193,0 60.42972000000001,65.00082,0 60.42749,65.05193,0 60.15804000000001,65.06721,0 59.65416,64.78333000000001,0 59.63805000000001,64.72387000000001,0 59.70249,64.65166000000001,0 59.61361,64.62276,0 59.47970999999999,64.48193000000001,0 59.60470999999999,64.46026999999999,0 59.6361,64.33749,0 59.57943,64.27943000000001,0 59.58805,64.23248,0 59.73388000000001,64.15331999999999,0 59.85972,64.1375,0 59.77055,63.99942999999999,0 59.56583000000001,63.91915,0 59.57249000000002,63.83666,0 59.51389,63.77999000000001,0 59.47776000000001,63.56805,0 59.31722000000001,63.39888000000001,0 59.35222,63.36306,0 59.28249,63.33278,0 59.3386,63.28999000000001,0 59.25889,63.2011,0 59.30277,63.12638,0 59.22221,63.07388,0 59.27665,62.96666,0 59.42471000000001,62.94415,0 59.48721000000001,62.89778,0 59.46083000000002,62.77917000000002,0 59.39138,62.72971,0 59.50972000000001,62.54722,0 59.65055,62.51721,0 59.60889,62.45333000000001,0 59.58472,62.41499,0 59.60028,62.36694,0 59.51527,62.31721000000002,0 59.40444,62.14222000000001,0 59.48555,61.98805,0 59.34137000000001,61.85695000000001,0 59.33915,61.80222,0 59.39694999999999,61.76110000000001,0 59.34887000000001,61.68221000000001,0 59.14333000000001,61.63305,0 59.01082000000001,61.54472,0 58.94054000000001,61.55972,0 58.80972,61.50556,0 57.18,61.51194,0 57.09666,61.48525999999999,0 56.67556,61.52777,0 56.60083,61.50249,0 56.54527,61.42888,0 56.3886,61.43943000000001,0 56.31638000000001,61.32527,0 56.34805,61.29388,0 56.29028000000001,61.20304000000001,0 55.82858,61.25057,0 55.72323,61.08145,0 55.27921000000001,61.12959000000002,0 55.19747,61.0041,0 55.06107,61.01941,0 54.97971,60.86388,0 53.86555,60.98749,0 53.80915000000001,60.84777,0 53.57389,60.86500000000001,0 53.33944000000001,60.89388,0 53.38499000000001,61.03389,0 52.87666,61.09388000000001,0 52.79499,60.94433,0 52.42917000000001,60.98137,0 52.34333,60.835,0 51.88777,60.87666,0 51.77333,60.59693999999999,0 52.15471000000001,60.54555000000001,0 52.12499,60.47027000000001,0 52.34304000000001,60.44638,0 52.34777,60.37330999999999,0 52.29815,60.24171,0 52.08278,60.31694000000002,0 52.0089,60.30360000000002,0 51.89999,60.24444,0 51.8,60.11083,0 51.53221000000001,59.94721,0 51.41332000000001,59.94165,0 51.34388,60.01833,0 51.07110999999999,60.06166000000001,0 50.82861000000001,59.86277000000001,0 50.40331000000001,59.84444,0 50.27887,59.80693000000002,0 50.2375,59.75277,0 49.99665,59.77887000000001,0 49.95193,59.74722000000001,0 50.05638,59.6875,0 49.85361,59.66361,0 49.83278,59.63693,0 49.78722000000001,59.50054999999999,0 49.82888000000001,59.48110000000001,0 49.79554,59.38388,0 49.82416,59.37054,0 49.79554,59.22221,0 49.59333,59.21776,0 49.50861,59.24610000000001,0 49.545,59.39305000000001,0 49.34194,59.41915000000001,0 49.3086,59.46694,0 49.14778,59.50889,0 49.03416,59.48444,0 49.08554,59.65554,0 48.50999,59.70388,0 48.45917000000001,60.19415,0 48.70499,60.30471,0 48.76305,60.365,0 48.67582000000001,60.40638000000001,0 48.54137999999999,60.41109,0 48.61777000000001,60.43333000000001,0 48.50416000000001,60.48276,0 48.51111000000001,60.51194,0 48.48110000000001,60.52499,0 48.53999,60.55915,0 48.53917,60.59999000000001,0 48.41924,60.85386000000001,0 47.9875,60.88665000000001,0 47.95999,61.00972,0 47.88139,60.99833,0 47.59415,61.05888,0 47.22833000000001,61.06444,0 47.19720000000002,61.05999,0 47.19138,60.99611000000002,0 47.10749,60.96194000000001,0 47.08027000000001,60.86221,0 47.04314000000001,60.85386000000001,0 47.08721000000001,60.82027,0 46.95277,60.65527,0 47.02388000000001,60.64695,0 47.01749,60.60249000000001,0 47.06166,60.57667000000001,0 46.85666,60.51527,0 46.87805,60.48166000000001,0 46.80444,60.38750000000001,0 46.83193000000001,60.37972,0 46.81305,60.32277,0 46.74499,60.25639000000001,0 46.43083000000001,60.27388,0 46.295,60.24249,0 46.35305,60.20972,0 46.36416000000001,60.1211,0 46.60609,60.06527,0 46.83138,60.07306000000001,0 46.89638,60.12583000000001,0 47.03694000000001,60.11832,0 46.92083000000001,59.84665,0 46.92305000000001,59.78444,0 47.12305,59.76139000000001,0 47.14305,59.71333,0 47.11351,59.61137999999999,0 47.05638,59.37860000000001,0 47.25249,59.35555,0 47.22332,59.2261,0 47.39443,59.14722,0 47.445,59.1675,0 47.45139,59.12694000000001,0 47.57639,59.06028,0 47.55082,58.9886,0 47.61166,58.91499,0 47.46777000000001,58.88416,0 47.45305000000001,58.92249,0 47.30721,58.91666,0 47.28111000000001,58.90222000000001,0 47.30388,58.85722,0 47.28028,58.81945,0 47.325,58.80082,0 47.265,58.75416,0 47.11333,58.77249,0 47.00417000000001,58.69583,0 47.0061,58.62249,0 46.58416,58.55804000000001,0 46.59026999999999,58.51832000000001,0 46.54972000000001,58.47665,0 46.59166000000001,58.43194,0 46.41137,58.36388,0 46.48109,58.33222,0 46.41026999999999,58.30805,0 46.41499000000001,58.21054000000001,0 46.35527,58.18721,0 46.30972000000001,58.11054,0 46.34132,58.07474,0 46.44972,58.01749,0 46.52304000000001,58.03889,0 47.38666,58.02332000000001,0 47.45610000000001,57.98555000000001,0 47.70083,57.96361,0 47.77027,57.90028,0 47.5611,57.80249,0 47.55082,57.765,0 47.58027000000001,57.74638,0 47.52859,57.70304,0 47.54888,57.66361,0 47.52638000000001,57.58416,0 47.48666,57.58472,0 47.4711,57.52859999999999,0 47.25027,57.57083,0 47.03082,57.49304,0 46.74443,57.52333,0 46.79722000000001,57.45666,0 46.70471000000001,57.42555000000001,0 46.68970000000001,57.39083,0 46.75388,57.37999,0 46.67611000000001,57.35,0 46.72055,57.29445,0 46.78972,57.28944,0 46.80888,57.23583,0 46.85194000000001,57.23444000000001,0 46.83443000000001,57.19971,0 46.72638000000001,57.20000000000001,0 46.76528,57.14388,0 46.76806,57.02971,0 46.70805,57.0164,0 46.75388,56.97417,0 46.71510000000001,56.96634000000001,0 46.74471,56.95471,0 46.71583,56.93721,0 46.94471,56.94833000000001,0 47.13277,56.91693000000001,0 47.18194,56.84805,0 47.12277,56.83749,0 47.17083000000001,56.80860000000001,0 47.42444,56.88082,0 47.50249,56.85139,0 47.51139,56.90666,0 47.61721,56.9761,0 47.68916,57.01250000000001,0 47.76971000000001,57.00972000000001,0 47.7336,57.05527000000001,0 47.785,57.05721,0 47.83083000000001,57.00416000000001,0 47.91666,56.97665000000001,0 47.93111,57.00944,0 47.97193,56.97387000000001,0 47.98694,57.01444999999999,0 48.13916,56.99833,0 48.2086,57.02722,0 48.16304,57.07972000000002,0 48.24888000000001,57.10666000000001,0 48.19222000000001,57.12471,0 48.30777000000001,57.16860000000001,0 48.4511,57.12054,0 48.56945,57.17249000000001,0 48.83555,57.16444,0 48.86639,57.12249,0 48.84583,57.0886,0 48.95471,57.08554,0 48.99804,57.11888,0 49.01194,57.19332,0 49.04610000000001,57.2011,0 49.00639000000001,57.23332000000001,0 49.01611,57.28305,0 49.18333000000001,57.33139,0 49.22805,57.28889,0 49.14361,57.15972,0 49.23138000000001,57.1311,0 49.26832,57.04361,0 49.41915,57.02194,0 49.41249000000001,57.05305000000001,0 49.71194,57.07361000000001,0 49.72499,56.99110000000001,0 49.76194,56.96500000000001,0 49.71582999999999,56.93361,0 49.75722,56.91415000000001,0 49.73443,56.89667000000001,0 50.01445,56.86721000000001,0 50.07082000000001,56.83082,0 50.0611,56.79361,0 50.10167000000001,56.79416,0 50.07221000000001,56.62266,0 50.16194000000001,56.615,0 50.22138000000001,56.66082,0 50.29834,56.63999,0 50.32306,56.65444,0 50.30304,56.67638,0 50.34777,56.67361,0 50.41361000000001,56.62804,0 50.42333,56.58526,0 50.49333,56.61639,0 50.45,56.54472,0 50.56971000000001,56.40250000000001,0 50.63110000000001,56.40526,0 50.58638,56.35443,0 50.73304,56.32999000000002,0 50.78527,56.35638,0 50.7625,56.39944,0 50.785,56.41555,0 50.85139000000001,56.39027000000001,0 50.87389,56.32666,0 50.90693,56.31583,0 50.90165,56.27944000000002,0 50.86111,56.27804,0 50.83942,56.2411,0 51.07639,56.12498999999999,0 51.1075,56.15139000000001,0 51.20499,56.13943,0 51.22304000000001,56.09916,0 51.3147,56.06972,0 51.36194,56.13054000000001,0 51.43667,56.14444000000001,0 51.6536,56.13444000000001,0 51.48999000000001,56.07888000000001,0 51.39721,55.9922,0 51.43027000000001,55.92722,0 51.64277,55.96054,0 51.68943,55.93278,0 51.72971,55.95971,0 51.78889,55.88388000000001,0 51.96083,55.97915,0 52.03749000000001,55.95916,0 52.05638,55.895,0 52.16916000000001,55.89306,0 52.25166,55.95805000000001,0 52.20417,56.00443000000001,0 52.2461,56.06694,0 52.18693,56.05527,0 52.20471000000001,56.08416,0 52.43665,56.02833,0 52.48471,56.03694000000002,0 52.44666,56.06361,0 52.46776,56.07749,0 52.66221,56.01554,0 52.72887,56.06471000000001,0 52.70054,56.14138000000001,0 52.83694000000001,56.09222000000001,0 52.85443,56.12666,0 52.81055,56.13388000000001,0 52.84554,56.15721,0 52.80582,56.18194,0 52.81694,56.20249,0 52.57583,56.22748000000001,0 52.55833,56.2625,0 52.63638,56.28638,0 52.74055,56.37471000000001,0 52.72277,56.39138,0 52.82665999999999,56.38888000000002,0 52.95278,56.44165000000002,0 52.95165999999999,56.46916,0 52.82555,56.52193,0 52.91778000000001,56.50111,0 52.94444,56.54472,0 53.09528,56.52694000000001,0 52.9386,56.36694,0 52.98054,56.3475,0 52.94138,56.30639,0 52.98221,56.28082,0 52.95610000000001,56.25166,0 53.00305,56.22165,0 52.99416,56.18833,0 53.04193,56.20805000000001,0 53.06888,56.18249,0 53.04749,56.13528,0 53.14666,56.16220000000001,0 53.26111,56.08554,0 53.34499,56.08471,0 53.34249,56.14749,0 53.2589,56.25471000000001,0 53.41666,56.27833,0 53.55610000000001,56.24388,0 53.54499,56.14083000000001,0 53.47470000000001,56.12110000000001,0 53.37888,55.98972,0 53.28694999999999,55.93555,0 53.1825,55.92389000000001,0 53.29725,55.85252,0 53.63842,55.91552,0 53.99722,55.85082,0 53.97027,55.78249000000002,0 54.03820000000001,55.80095000000001,0 54.0261,55.75666,0 54.09528000000001,55.77592,0 54.24194000000001,55.69137000000001,0 54.17833,55.62276000000001,0 53.99638000000001,55.54972000000002,0 53.99694,55.50027,0 53.93333000000001,55.4586,0 53.89833000000002,55.38166,0 53.70916,55.3336,0 53.59999,55.26027,0 53.58611000000001,55.20776999999999,0 53.39944000000001,55.22110000000001,0 53.33805000000001,55.19499,0 53.33443,55.16249000000001,0 53.13888000000001,55.14388,0 53.14138000000001,55.09389,0 53.26834,55.05331,0 53.26694000000001,55.01028000000001,0 53.40639000000001,54.99722,0 53.51412,54.88120000000001,0 53.64249000000002,54.90139,0 53.57695,54.81499,0 53.60777,54.81249,0 53.57888,54.74888,0 53.6086,54.71138,0 53.41055,54.55750000000001,0 53.42194,54.48666000000001,0 53.34444,54.38694000000001,0 53.36138,54.32888,0 53.43444,54.26915,0 53.41305,54.22222,0 53.47020000000001,54.0452,0 53.41082,54.02694,0 53.37194,53.96749,0 53.285,54.02750000000001,0 53.27221999999999,54.06999,0 53.19444,54.09832,0 53.06054,54.06999,0 53.09137,54.12054,0 53.03361000000001,54.12749000000001,0 52.93694,54.2136,0 53.11582,54.24944000000001,0 53.04749,54.34167000000002,0 53.0014,54.31249,0 53.02944000000001,54.28944,0 53.01361,54.26805,0 52.92916,54.26805,0 52.88166,54.27777,0 52.93249,54.28804000000001,0 52.92304,54.31388,0 52.68775999999999,54.36111,0 52.62194,54.3411,0 52.53745,54.37707,0 52.49416,54.39999,0 52.50306000000001,54.45193,0 52.43943,54.47887,0 52.37915,54.41444,0 52.35054,54.42333,0 52.36388,54.45916,0 52.20972,54.44304,0 52.2,54.40639,0 52.105,54.40054000000001,0 52.12028000000001,54.35111,0 52.08526000000001,54.33942,0 52.01999,54.43665,0 51.93277,54.43638,0 51.92722000000001,54.53611,0 51.67972,54.56166000000001,0 51.52333,54.64638,0 51.49388,54.59527,0 51.39388,54.59304000000001,0 51.39554,54.67722000000001,0 51.28139000000002,54.63694,0 51.18111,54.64638,0 51.09361,54.54861,0 51.00972000000001,54.55165,0 50.99277,54.49916000000001,0 51.01721,54.47916,0 50.93610000000001,54.33999,0 50.70305000000001,54.42833,0 50.5186,54.32639000000001,0 50.47165,54.42333,0 50.42944,54.42749000000001,0 50.38889,54.48888000000001,0 50.27665,54.44054,0 50.22527,54.50361000000001,0 50.07688,54.51667000000001,0 50.12555,54.48194,0 50.11721,54.43027000000001,0 50.21111000000001,54.42167,0 50.19944,54.38416,0 50.26222,54.28944,0 50.20304000000002,54.14027,0 50.22554,54.07916,0 50.19749,54.03722,0 49.97443,53.96138,0 49.95361,53.90527,0 50.05305,53.86860000000001,0 50.03778000000001,53.82527000000001,0 49.85722000000001,53.8336,0 49.83805,53.89083000000001,0 49.61805,53.81139,0 49.60916000000001,53.855,0 49.42249000000001,53.87082000000001,0 49.34304000000001,53.87,0 49.31694,53.83333,0 49.03694,53.85944,0 48.86333000000001,53.71277,0 48.47222,53.77083,0 48.51305,53.69638000000001,0 48.60333,53.66945,0 48.4461,53.6661,0 48.42695,53.62915000000002,0 48.35638,53.6711,0 48.31416000000001,53.65583000000002,0 48.355,53.60167000000001,0 48.44083000000001,53.58138000000001,0 48.37666000000001,53.54277,0 48.37833000000001,53.47137,0 48.23611,53.45888999999999,0 48.2225,53.42443,0 48.16638,53.48249,0 48.04853,53.47771,0 48.00360000000001,53.40666,0 47.94194,53.37583,0 48.09332,53.26194,0 48.13138000000001,53.16888,0 48.21221,53.14582999999999,0 48.14472000000001,53.05916,0 48.2236,52.99722,0 48.26944000000001,53.05777,0 48.36888,53.06638,0 48.31833,52.98555,0 48.51057,52.97799,0 48.57805,52.93554,0 48.58694,52.8686,0 48.43007000000001,52.78054,0 48.28889,52.81082,0 48.10944,52.80138,0 47.98499,52.74722,0 48.08749,52.73193,0 48.07861000000001,52.70555,0 47.92527,52.6661,0 47.90027,52.72221,0 47.85971,52.73166,0 47.77304,52.67972000000001,0 47.78111000000001,52.62915,0 47.72470000000001,52.57916,0 47.55638,52.61833,0 47.43831999999999,52.56722,0 47.20610000000001,52.56666,0 47.1536,52.60999,0 47.0686,52.56638,0 46.9461,52.63832000000001,0 46.83077,52.6164,0 46.61694000000001,52.66109,0 46.61388000000002,52.72748,0 46.58027,52.73249,0 46.39999,52.67249,0 46.29834,52.68055,0 46.2761,52.61805,0 46.15331,52.60194000000001,0 46.14582,52.54972000000001,0 46.08749,52.56388,0 46.06444,52.52693000000001,0 45.97137000000001,52.49583,0 46.01639000000001,52.45776999999999,0 45.97526000000001,52.4361,0 45.98082000000001,52.40721000000001,0 45.71805,52.45889,0 45.73554000000001,52.52583,0 45.64111000000001,52.52028,0 45.52693,52.48166,0 45.51639000000001,52.43444,0 45.44194,52.40055,0 45.11139,52.41109,0 45.06916,52.37778000000001,0 45.10139000000001,52.33332000000001,0 45.05054000000001,52.31721,0 44.97332,52.37332,0 44.90554,52.37665000000001,0 44.86749,52.44666,0 44.66489,52.47935,0 44.54805,52.55249,0 44.49361,52.52665,0 44.53943,52.48638,0 44.51445,52.45916,0 44.54361,52.42944,0 44.41082,52.41305000000001,0 44.38916,52.36833000000001,0 44.33332,52.34805000000001,0 44.34638,52.3161,0 44.05526,52.34610000000001,0 43.77749,52.43472,0 43.34055,52.39111,0 43.3086,52.44555,0 43.19027,52.46666000000001,0 43.12276,52.40192,0 43.0798,52.40288,0 43.00916000000001,52.36388,0 42.92527,52.37500000000001,0 42.92221,52.30526,0 42.75333,52.18581,0 42.74749,52.08027,0 42.8111,52.01027,0 42.70305,51.98194,0 42.67638,51.83972,0 42.48666000000001,51.69305,0 42.51471,51.62388,0 42.48951,51.60789,0 42.86166,51.38166,0 42.83942,51.31666000000001,0 42.91221,51.24083,0 42.87309,51.23142,0 42.68444,51.23693000000001,0 42.56722,51.16526000000001,0 42.41888,51.17222,0 42.2672,51.13166,0 42.09888,51.14750000000001,0 41.96333,51.2086,0 41.8686,51.19388000000001,0 41.7286,51.01721,0 41.41193,50.90359,0 41.37777000000001,50.87666000000001,0 41.38277,50.83027,0 41.15639,50.77638,0 41.32777,50.71916,0 41.40749,50.61944,0 41.52833,50.60166,0 41.52416,50.56860000000001,0 41.45471,50.55138,0 41.4175,50.50527,0 41.5125,50.3811,0 41.36221,50.22629,0 41.4822,50.09027,0 41.5911,50.05525999999999,0 41.58277,50.005,0 41.61361000000001,49.96361,0 41.8661,49.90777000000001,0 42.17749,49.69083,0 42.11277,49.52583,0 42.0736,49.51056,0 42.04972,49.40499000000001,0 42.09693,49.29222,0 42.03194,49.26639999999999,0 42.07694,49.19971,0 42.06443,49.15388,0 42.34443,49.15249,0 42.39277,49.04972,0 42.48388,49.04472,0 42.66361,48.96777,0 42.66249,48.8886,0 42.74610000000001,48.80638,0 42.65027,48.70527,0 42.70166,48.61805,0 42.63054,48.54694,0 42.27665,48.49860000000001,0 42.07249,48.40889,0 42.15193,48.28221,0 42.04499,48.25916000000001,0 42.10278,48.16389000000002,0 42.05111,48.12972,0 42.02193,48.03027,0 42.27555,48.01305000000001,0 42.32638,48.04777,0 42.4986,48.01056,0 42.7286,47.85556,0 42.93971,47.51361,0 42.98776,47.51388000000001,0 43.05915,47.57639,0 43.13554000000001,47.57556,0 43.15998,47.48249,0 43.22499,47.44972,0 43.55833000000001,47.48972,0 43.65331,47.44222,0 43.73177,47.47655000000001,0 43.62944,47.55916,0 43.70583,47.68444,0 43.84138,47.7575,0 43.97499,47.76639,0 44.04443,47.82415,0 44.01582,47.86388,0 44.06582000000001,47.9108,0 44.38915,47.86832,0 44.3861,47.91415,0 44.46776,47.9786,0 44.46637,48.04084000000001,0 44.32305,48.05999000000001,0 44.30944,48.25999000000001,0 44.53582,48.20638000000002,0 44.54971,48.05833,0 44.61221,48.05665,0 44.64415000000001,48.09166,0 44.80053,48.05249000000001,0 44.94221,48.14388000000002,0 44.92471,48.19916000000001,0 44.95666,48.21194,0 45.12749000000001,48.11306,0 45.30082000000001,48.09768,0 45.39499,48.09833,0 45.55193000000001,47.99193,0 45.7136,48.03750000000002,0 45.74166,48.00222,0 45.70664000000001,47.93193000000001,0 45.71970000000001,47.86528,0 45.78556,47.81305,0 45.82916,47.72304,0 45.90720000000001,47.7122,0 45.93804,47.62887,0 46.08887000000001,47.51692,0 46.29666000000001,47.43664,0 46.3886,47.44443,0 46.68081,47.63248,0 46.83055,47.5761,0 46.52387000000001,47.43499,0 46.51554,47.39193000000001,0 46.79639,46.99638,0 46.92777,46.97832,0 46.99082,46.85082,0 47.12721,46.85833000000001,0 47.22776,46.74081,0 47.14026,46.69638,0 47.1497,46.66832,0 46.99805,46.63361,0 46.91332,46.55526,0 46.94916,46.53943000000001,0 46.96194,46.4286,0 46.66027,46.42804,0 46.47833,46.27555,0 46.86665,46.24805000000001,0 46.8336,46.07277,0 47.09082000000002,46.1186,0 47.175,46.10556,0 47.10915,46.00777,0 47.0411,45.96970000000001,0 46.89304000000001,45.57472000000001,0 47.29361000000001,45.6436,0 47.35971,45.68942,0 47.46748,45.63943,0 47.48619,45.57145,0 47.54332,45.50527000000001,0 47.50166,45.47998,0 47.48611,45.41860000000001,0 47.37803,45.41137000000001,0 47.46277000000001,45.38081,0 47.38554000000001,45.29527,0 47.3761,45.18193000000001,0 47.29193,45.18082,0 47.19915000000001,44.96859,0 47.14861,44.92694,0 47.09722000000001,44.94971,0 47.11666,44.86221,0 47.07555,44.78277,0 46.99165,44.92192000000001,0 47.00944,44.82111,0 46.95943,44.76389,0 46.71249,44.64777,0 46.72444,44.54472,0 46.67971,44.52304,0 46.7,44.44276,0 46.76027,44.39192,0 47.01222,44.36083,0 47.09248,44.24027,0 47.1586,44.20054,0 47.20554,44.21859,0 47.47952,44.4864,0 47.5322,44.50008,0 47.80731,43.98692,0 47.69832000000001,43.86887000000001,0 47.58498,43.72221,0 47.48721,43.45638,0 47.48832,43.29361000000001,0 47.57249000000001,43.33054,0 47.58833000000001,43.29695,0 47.48333000000002,43.20777,0 47.46221,43.01915,0 47.69694000000001,42.86638,0 47.73832,42.63388,0 47.85942,42.59389,0 47.94498,42.46249,0 48.11776,42.32638,0 48.3036,42.09748,0 48.38665,41.92638,0 48.54472,41.88028,0 48.58395000000001,41.83577,0 48.47137000000001,41.72359000000001,0 48.3997,41.58914,0 48.23137000000001,41.50249,0 48.07444000000001,41.46776,0 48.02276,41.36193,0 47.96249,41.35943,0 47.90831000000001,41.29084,0 47.91999,41.22637,0 47.76693,41.19609000000001,0 47.65972000000001,41.23554,0 47.57166,41.2111,0 47.52193,41.25416,0 47.28555000000001,41.31219,0 47.25888000000001,41.42471,0 47.16054,41.5611,0 47.04305000000001,41.55833,0 46.92554,41.71776,0 46.77081,41.79666,0 46.76081,41.86388,0 46.59166000000001,41.79221,0 46.56667000000001,41.80777,0 46.56833,41.88248,0 46.45176000000001,41.89705,0 46.39415,41.94054,0 46.31998,41.93888,0 46.23998,42.00139,0 46.10389,41.99415,0 46.07805,42.03416,0 46.01082,42.04305,0 45.96053,42.02387,0 45.91028,42.105,0 45.64748,42.20471,0 45.76028,42.47791,0 45.55277,42.55026,0 45.35167,42.52943,0 45.17137000000001,42.70083,0 45.05304,42.69415,0 44.92749,42.76193,0 44.855,42.74331,0 44.80388000000001,42.6172,0 44.68443,42.73943000000001,0 44.54972,42.75944000000001,0 44.28665,42.71278,0 44.22082000000001,42.63693,0 44.0536,42.61804,0 43.9611,42.55778,0 43.73555,42.63916,0 43.8361,42.72776,0 43.82721,42.7514,0 43.67083,42.7911,0 43.56055,42.86082,0 43.20083,42.93637,0 43.01082,43.05666,0 43.0211,43.10444,0 42.85722000000001,43.17748,0 42.7011,43.1825,0 42.62583,43.14305,0 42.41526,43.23916,0 42.18111,43.23555,0 42.05777,43.18610000000001,0 41.93971,43.21749,0 41.58971,43.22275,0 41.39332,43.3461,0 41.29554,43.33610000000001,0 41.16805,43.38722,0 41.04416000000001,43.37498000000001,0 40.68471,43.54583,0 40.54306,43.50861,0 40.25339,43.58252,0 40.12665,43.57222,0 40.0775,43.54694,0 40.00297,43.37926,0 40.22471,43.31443,0 40.32638,43.14192,0 40.38472,43.16555,0 40.58665,43.0825,0 40.8436,43.06777,0 40.93277,42.97222,0 41.03276000000001,42.97304,0 41.15583,42.78917,0 41.22082,42.79861,0 41.46137,42.70804,0 41.55331,42.38581000000001,0 41.63277,42.27194,0 41.66166,42.12109,0 41.7625,41.99221,0 41.77472,41.88563,0 41.73026000000001,41.72555,0 41.53155,41.52388,0 41.3875,41.37304000000001,0 40.93111,41.18748,0 40.83305,41.19498,0 40.54332,41.02916,0 40.45804,41.0425,0 40.12859,40.91639,0 39.99776,40.97582,0 39.87721,40.95389,0 39.73333,41.01388000000001,0 39.64611,41.00166,0 39.4211,41.10944,0 39.2786,41.04972,0 39.16304,41.0825,0 38.81611,41.00999,0 38.70999,40.95,0 38.62554,40.97305,0 38.5236,40.92083,0 38.36139,40.90943000000001,0 38.2775,40.95056,0 37.89249,40.98277,0 37.79361000000001,41.04554,0 37.78944,41.11555,0 37.70638,41.11222,0 37.68748,41.13722,0 37.60777,41.04777,0 37.53721,41.02805,0 37.29499,41.14389,0 37.15228,41.14491,0 37.04332,41.17555000000001,0 37.02333,41.26749,0 36.85693,41.34721,0 36.61834,41.37498,0 36.5541,41.28566,0 36.53862,44.90856,0 36.54507,45.17941,0 36.67405,45.41802,0 37.64138,46.73358000000001,0 38.23582,47.10943,0 38.2161,47.19471,0 38.31916,47.27833,0 38.20804,47.31916,0 38.28555,47.3961,0 38.28083,47.5061,0 38.33942,47.60139000000001,0 38.60582,47.63803,0 38.69137,47.69415000000002,0 38.75055,47.68387000000001,0 38.83832,47.85278000000001,0 39.03817,47.8658,0 39.13638,47.83388999999999,0 39.34526,47.85304,0 39.72388,47.81833,0 39.79639,47.85722,0 39.81998,47.9697,0 39.77609,48.02639000000001,0 39.86859,48.04084000000001,0 39.84832,48.11306,0 39.93277,48.21332,0 40.00249,48.24304000000001,0 40.0125,48.28472,0 39.91277,48.27777,0 39.83805,48.3125,0 39.92152,48.36839,0 39.83833,48.48388000000001,0 39.86694,48.50027000000001,0 39.85333,48.55471000000001,0 39.66966,48.58764000000002,0 39.65693,48.61667,0 39.72721,48.76221,0 39.80389,48.81777000000001,0 39.98526,48.79139,0 40.07667,48.87500000000001,0 40.03027,48.8961,0 39.97055,48.85999000000001,0 39.76721,48.90388,0 39.69444,48.97305,0 39.69915,49.02277,0 39.93888,49.05499,0 39.96638,49.12388,0 40.16694,49.2486,0 40.17972000000001,49.32695,0 40.05305,49.47833000000001,0 40.07444,49.52694,0 40.14111,49.55916,0 40.13977,49.60105000000001,0 40.005,49.61444000000001,0 39.92167,49.56555,0 39.79695000000001,49.55305,0 39.63972,49.61555,0 39.58083,49.73082,0 39.27361,49.75194,0 39.18373,49.88041,0 39.06916,49.81777,0 38.94526,49.8075,0 38.88916,49.86805,0 38.69609,49.92749,0 38.68665,49.97887,0 38.49889,49.95193,0 38.3761,49.98749,0 38.30777,50.07388,0 38.18415,50.06554000000001,0 38.18526,49.9511,0 38.01306,49.90138000000001,0 37.92527,50.02471,0 37.73304,50.08777000000001,0 37.60527,50.21666,0 37.62360000000001,50.30527,0 37.49444,50.35139000000001,0 37.4586,50.43971000000001,0 37.31583,50.42804,0 37.13054,50.34833,0 36.88444,50.33583000000001,0 36.7011,50.26693000000001,0 36.64028,50.21249000000001,0 36.56249,50.22249,0 36.56333000000001,50.27639,0 36.41276,50.32166,0 36.29749,50.28444,0 36.13917,50.42527,0 35.85028,50.4286,0 35.73915,50.38333,0 35.72887,50.35332,0 35.64471,50.35416,0 35.58305,50.38305,0 35.5672,50.45306,0 35.44106,50.51198,0 35.39355,50.63808,0 35.48857,50.67585,0 35.45829,50.69417,0 35.45663,50.77279,0 35.39773,50.80308,0 35.3605,50.87226,0 35.36133,50.92614,0 35.30577000000001,50.96033,0 35.29716000000001,50.99979,0 35.35855,51.01088000000001,0 35.37189,51.04144,0 35.17076,51.0548,0 35.11852,51.20481,0 35.07381,51.22149,0 34.73499,51.17249,0 34.66999,51.17944,0 34.63361,51.24222,0 34.38221,51.26361000000001,0 34.30526,51.23082000000001,0 34.20892,51.25919,0 34.27388,51.28555,0 34.31499,51.35111,0 34.20361,51.40666,0 34.23916,51.42777000000001,0 34.23417,51.54666,0 34.15972,51.6286,0 34.10111,51.64749,0 34.10277,51.67443,0 34.40554,51.7186,0 34.44054,51.76721,0 34.38082,51.84499,0 34.25777,51.87944000000001,0 34.16945,51.95999,0 34.10943,51.95972,0 34.12804,51.98972000000001,0 34.07306,52.06028000000001,0 34.09778,52.15194,0 33.83056,52.36472000000001,0 33.69638,52.36166999999999,0 33.53528,52.29333000000001,0 33.49778,52.36666000000002,0 33.44887,52.34361,0 33.20471,52.37972,0 32.92361,52.24722,0 32.39415,52.33526,0 32.35833,52.30999,0 32.38638,52.25472,0 32.34055000000001,52.22137,0 32.33554,52.1572,0 32.22499,52.07944,0 32.12444,52.04388000000001,0 31.92638,52.03667,0 31.89777,52.09610000000001,0 31.78388,52.10805000000001,0 31.7825,52.16582,0 31.70389,52.1986,0 31.71694,52.26167000000001,0 31.58666,52.31888,0 31.62972,52.37054,0 31.60166,52.40610000000001,0 31.60889,52.49138,0 31.56472000000001,52.51583,0 31.59527,52.53221,0 31.58167,52.55083,0 31.65332,52.55305,0 31.5,52.68999,0 31.595,52.73804,0 31.58083,52.80304,0 31.53695,52.8561,0 31.41527,52.89305,0 31.35638,52.97805000000001,0 31.2664,53.02193,0 31.38638,53.09916,0 31.37483,53.12193000000001,0 31.4225,53.20888000000001,0 31.61611,53.21832,0 31.77555,53.19415000000002,0 31.80111,53.12583,0 31.93054,53.09554,0 32.22332,53.10555,0 32.22554,53.13333,0 32.29889,53.13193,0 32.43999,53.20888000000001,0 32.49833,53.27832,0 32.46249,53.30832,0 32.73693,53.34249,0 32.7411,53.46305000000001,0 32.66082,53.46666,0 32.67054,53.49722,0 32.5975,53.4911,0 32.44389,53.57194000000001,0 32.41471,53.64638,0 32.51056,53.68361,0 32.45166,53.72638,0 32.37694,53.71888,0 32.32944,53.76222000000001,0 32.11971,53.81999,0 31.90222,53.77777,0 31.76423000000001,53.80262,0 31.86083,53.96333,0 31.84416,54.06444000000001,0 31.79333,54.05305000000001,0 31.76167,54.10333,0 31.54416,54.14333,0 31.33166,54.2375,0 31.31167,54.35083,0 31.23194,54.45665,0 31.1986,54.46093000000001,0 31.0825,54.50556,0 31.18443,54.60609,0 31.18527,54.64222,0 31.02472,54.65222,0 31.005,54.71167,0 30.78,54.79694000000001,0 30.845,54.8811,0 30.83388,54.94415,0 30.94749,54.96915,0 30.92499,55.03333,0 31.02971,55.04332,0 30.98722,55.11166000000002,0 31.00472,55.14332,0 30.81361,55.29333000000001,0 30.93943,55.39944000000001,0 30.90055,55.45915999999999,0 30.93999,55.49583,0 30.91888,55.60833000000001,0 30.75666,55.59665,0 30.72694,55.65639,0 30.60889,55.68138,0 30.61249,55.72027,0 30.49416,55.76388000000001,0 30.48971,55.79999,0 30.22611,55.8661,0 30.14055,55.82804000000002,0 29.92833,55.85167000000001,0 29.82306,55.77528,0 29.71916,55.78249000000002,0 29.49388,55.68888,0 29.35916,55.78943,0 29.40693,55.89582999999999,0 29.46443,55.91109,0 29.41222,55.95777,0 29.05943,56.03278,0 28.86944,55.98055,0 28.84694,55.94249000000001,0 28.75416,55.95388000000001,0 28.64611,56.09361000000001,0 28.3875,56.0961,0 28.3125,56.04999,0 28.16801,56.15015,0 28.23777,56.2711,0 28.18444,56.37471000000001,0 28.18972,56.44055,0 28.11306,56.50555000000001,0 28.1525,56.55443000000001,0 28.03639,56.59054,0 28.005,56.69137,0 27.8861,56.74722,0 27.93527,56.82721,0 27.81555,56.87833000000001,0 27.64,56.84805,0 27.7775,57.06582,0 27.70138,57.11916000000001,0 27.84082,57.16361,0 27.86111,57.30222000000001,0 27.52722,57.4386,0 27.54722,57.53638000000001,0 27.37205,57.53564,0 27.34806,57.59554000000001,0 27.40583000000001,57.61361000000001,0 27.41306,57.69055,0 27.52666,57.72276,0 27.51639,57.77333,0 27.57277,57.80277000000002,0 27.54583,57.81777,0 27.75306000000001,57.83916,0 27.82306,57.87388,0 27.68388,57.92638,0 27.69722,58.00082,0 27.64222,58.02083,0 27.67721,58.07417000000002,0 27.55417,58.13276000000001,0 27.47416,58.21388000000001,0 27.46471,58.29777,0 27.53916,58.36166,0 27.5425,58.41389,0 27.42611,58.81361,0 27.4936,58.88193,0 27.72499,58.98777,0 27.91254,59.27182,0 28.17035,59.30978,0 28.19389,59.37582,0 28.01583000000001,59.4786,0 27.80783,60.5464,0 28.38888,60.88667000000002,0 28.52916000000001,60.95499,0 28.63888,60.96611,0 28.81277,61.10334,0 29.21361,61.25332,0 29.48639,61.42611000000002,0 29.52555,61.48277,0 29.80916,61.60833,0 29.83222,61.65305000000002,0 29.99138,61.72943,0 30.64972,62.195,0 30.94777,62.31138000000001,0 31.25972000000001,62.50777000000002,0 31.4675,62.80639,0 31.58893,62.91440999999999,0 31.515,62.98693,0 31.28222,63.10917,0 31.21972,63.22306,0 30.9625,63.30972000000001,0 30.79639,63.40194,0 30.48166000000001,63.47861,0 29.99671,63.74802,0 30.25584,63.81778,0 30.345,63.90972000000001,0 30.59528,64.04694000000001,0 30.61444,64.08665000000001,0 30.54805,64.17471000000001,0 30.57722,64.21581999999999,0 30.56084,64.24442999999999,0 30.45416000000001,64.25694,0 30.38972,64.30943000000001,0 30.15611000000001,64.35415999999999,0 30.05222,64.40470999999999,0 30.08722,64.48305000000001,0 30.00967,64.51286,0 29.97500000000001,64.58110000000001,0 30.19917,64.65028,0 30.19713000000001,64.68622000000001,0 30.12055000000001,64.73054999999999,0 30.14083,64.77415000000001,0 29.80471,64.79389000000001,0 29.63667,64.92805,0 29.60666,65.00166,0 29.62889,65.06305,0 29.87388,65.12082,0 29.82333,65.14888999999999,0 29.87028,65.18747999999999,0 29.85361,65.21612,0 29.59638,65.24887,0 29.7475,65.34193000000001,0 29.74611,65.51443,0 29.85971,65.56610000000001,0 29.72194,65.63805000000001,0 30.02444,65.69110000000001,0 30.12388,65.66499,0 30.13528000000001,65.70359999999999,0 30.09667,65.83333,0 29.97695,65.9811,0 29.91028,66.12694000000001,0 29.63861,66.32249,0 29.56792,66.42856999999999,0 29.54833,66.49554000000001,0 29.42056,66.58498,0 29.35027,66.68249,0 29.09333,66.85138000000001,0 29.08305,66.9586,0 29.54611,67.31055000000001,0 29.93279,67.51389,0 29.97778,67.57249,0 29.98972,67.67194000000001,0 30.02861,67.69472,0 29.69167,67.81527,0 29.35695,68.08249000000001,0 28.69334,68.19749,0 28.4575,68.53194000000001,0 28.73861,68.73416,0 28.82056,68.84444000000001,0 28.73778,68.87582,0 28.47917,68.8736,0 28.43195,68.89694,0 28.95734,69.05162,0 29.06333,69.02916999999999,0 29.23916,69.1075,0 29.32167,69.24554000000001,0 29.31,69.31527,0 29.945,69.43053999999999,0 30.09777,69.50333000000001,0 30.185,69.58275999999999,0 30.14277,69.62833000000001,0 30.07277,69.6311,0 30.10333,69.66306,0 30.20361,69.66388000000001,0 30.52916,69.5461,0 30.91,69.54886999999999,0 30.94583,69.58222000000001,0 30.95472,69.68138,0 30.89805,69.70555,0 30.85484,69.7923,0 31.17443,70.36256,0 31.92259,70.01843,0 32.28514,69.92385,0 33.13635,69.77410999999999,0 33.48315,69.49036,0 35.31956,69.30909,0 36.23384,69.15934,0 37.16386,68.89137,0 37.5369,68.86902000000001,0 37.56522,73.71208,0 37.59446,78.71200000000002,0 35.86762,78.71200000000002,0 35.86762,81.47494,0 37.5369,81.47494,0 37.5369,84.90001,0 37.5369,89.90000000000001,0 38.53421000000001,89.90000000000001,0 39.53152,89.90000000000001,0 40.52883,89.90000000000001,0 41.52613,89.90000000000001,0 42.52345,89.90000000000001,0 43.52076,89.90000000000001,0 44.51808,89.90000000000001,0 45.51538,89.90000000000001,0 46.51269,89.90000000000001,0 47.51001000000002,89.90000000000001,0 48.50732,89.90000000000001,0 49.50463,89.90000000000001,0 50.50193000000001,89.90000000000001,0 51.49924,89.90000000000001,0 52.49656000000001,89.90000000000001,0 52.49656000000001,84.90001,0 + + + 1 + + + + + GMT +03:30 + + +]]> + #khStyle0350 + + + + +44.81304,39.63081,0 44.8886,39.60582,0 44.95028000000001,39.43582,0 45.06304999999999,39.37305,0 45.13055000000001,39.28556,0 45.14193,39.21748,0 45.30999000000001,39.19832,0 45.43499000000001,39.0511,0 45.43941000000001,38.99804,0 45.87194000000001,38.87999,0 46.05637,38.87831,0 46.17825000000001,38.84114000000001,0 46.35471,38.91054,0 46.54037,38.87559,0 46.83832000000001,39.15527000000001,0 46.94886,39.15443,0 47.02556,39.18942,0 47.09971,39.30444,0 47.29221,39.37693,0 47.39166,39.47054000000001,0 47.53334,39.50888000000001,0 47.80666,39.67722,0 47.93055,39.68359,0 47.97667000000001,39.71922,0 48.35979,39.38522,0 48.18916000000001,39.33332,0 48.11998,39.26361,0 48.13499000000001,39.20888,0 48.29387000000001,39.11249,0 48.32776,39.05165,0 48.31248,39.00776,0 48.07138000000001,38.95138,0 48.01415,38.90583,0 48.02081,38.83554,0 48.24387,38.72776,0 48.24361,38.66721,0 48.32776,38.60333,0 48.44193,38.62165,0 48.45416,38.56471,0 48.62305000000001,38.39526,0 48.78943000000001,38.44777,0 48.88828000000001,38.44241,0 48.86942,38.30054,0 48.94166,37.90749,0 48.99776,37.76361,0 49.10248,37.64304,0 49.41999,37.49332,0 49.83443,37.4511,0 49.92499,37.47971,0 49.96888,37.45387,0 49.94166,37.44471,0 50.19137000000001,37.38917,0 50.35166,37.1211,0 51.10111,36.72887,0 51.97276000000002,36.57999,0 53.22305,36.84833,0 53.92276,36.90972,0 54.00860999999999,36.94833,0 53.98499,36.89861000000001,0 53.6075,36.86833000000001,0 53.66137000000001,36.85777,0 53.63388000000001,36.84804,0 53.68194,36.81722,0 53.94332,36.8,0 54.0286,36.82471,0 54.03166,36.94833,0 53.98833,36.9822,0 54.01583000000001,37.02193000000001,0 53.90564,37.35085,0 54.23165000000001,37.32722,0 54.55165,37.4461,0 54.68111,37.4436,0 54.78694,37.51915000000001,0 54.80972000000001,37.57944,0 54.78221000000001,37.64804,0 54.83306000000001,37.74639,0 54.95471000000001,37.80499,0 55.14083,37.9561,0 55.21027,37.96221,0 55.44276000000001,38.08611,0 55.7561,38.12526,0 55.98276000000001,38.07249,0 56.16444,38.09499,0 56.22305,38.07028,0 56.33305000000001,38.08554,0 56.35277,38.13889,0 56.32249000000001,38.18526,0 56.44276,38.25999,0 56.61388,38.24055,0 56.75574000000001,38.28626,0 56.84583,38.23166000000001,0 57.05861,38.1936,0 57.14979,38.26009,0 57.18888,38.28334,0 57.20471,38.28334,0 57.24388,38.27082,0 57.28833,38.17055,0 57.3711,38.09305,0 57.35306,37.98944,0 57.45028000000001,37.93916,0 57.70805,37.92665,0 58.04694000000001,37.80944,0 58.17443,37.79639,0 58.20304000000001,37.78334000000001,0 58.22748,37.68111,0 58.38915999999999,37.63611,0 58.49805,37.64777,0 58.5625,37.7086,0 58.71277000000001,37.64861,0 58.80444,37.66693,0 58.82278,37.70361,0 59.06027,37.62999,0 59.25,37.51333,0 59.33888,37.53916000000001,0 59.38082,37.48555,0 59.39305000000001,37.32306,0 59.49139,37.24833,0 59.47693,37.21889000000001,0 59.56693,37.20888,0 59.62027000000001,37.13194,0 59.67054000000001,37.15611,0 59.81305,37.12471000000001,0 59.91471000000001,37.0586,0 60.02944,37.03695,0 60.27840000000001,36.76272,0 60.33306000000001,36.6561,0 61.1572,36.64999,0 61.18999,36.56777,0 61.15028,36.31499,0 61.18444,36.28667,0 61.22916,36.12666,0 61.16471,36.03527,0 61.16999,35.99527,0 61.12428,35.97565,0 61.22582,35.90388,0 61.26222,35.81972,0 61.22887,35.67805,0 61.27655000000001,35.60725,0 61.28778000000001,35.54999,0 61.19444,35.40222,0 61.19276000000001,35.30583,0 61.10444,35.27916,0 61.09471,35.18416,0 61.14249000000001,35.09832,0 61.06972,34.92888000000001,0 61.06305,34.80888,0 60.98333000000001,34.73388,0 60.97137,34.64444,0 60.72165,34.52222,0 60.91527000000001,34.32,0 60.66554,34.31249,0 60.67555000000001,34.28833,0 60.54610000000001,34.19638,0 60.50444,34.12222,0 60.55417000000001,33.81332,0 60.50527,33.73915,0 60.52776999999999,33.64415,0 60.66610000000001,33.5675,0 60.88639,33.55721,0 60.94305,33.51944,0 60.85443,33.48999,0 60.85167,33.41805,0 60.59109,33.16305,0 60.58056,33.0886,0 60.85778000000001,32.23471,0 60.83665,32.09027,0 60.79694000000001,32.0375,0 60.84389,31.49833,0 61.10417,31.46305,0 61.71361000000001,31.38332000000001,0 61.7711,31.31833,0 61.76466000000001,31.24477,0 61.8511,31.02111,0 61.80403,30.94514,0 61.78652,30.80953,0 60.86630000000002,29.86366,0 61.31443000000001,29.39583,0 61.3586,29.38444000000001,0 61.36027,29.26583000000001,0 61.42471,29.15528000000001,0 61.51111,29.08861,0 61.48804000000001,29.04361,0 61.5336,29.0125,0 61.58138000000001,28.88083,0 61.90554,28.555,0 62.40499,28.41722,0 62.59249,28.2336,0 62.78138,28.26695,0 62.75777,28.00027,0 62.82193,27.76027,0 62.83972,27.47443000000001,0 62.77833,27.35333,0 62.80694,27.32332,0 62.79583,27.28555,0 62.76471,27.27194,0 62.82305000000002,27.23027,0 62.93333000000001,27.21333,0 63.20583,27.2675,0 63.28832,27.21861,0 63.34194,27.1225,0 63.27859,27.12194,0 63.25305,27.08361,0 63.25916,26.93443,0 63.29056,26.89222,0 63.20638,26.84222,0 63.17638000000001,26.63111,0 62.77276000000001,26.64972,0 62.74305,26.61167,0 62.44609,26.56888,0 62.32027000000001,26.51527,0 62.27138,26.42472,0 62.27803000000001,26.35402,0 62.13583000000001,26.38083,0 62.12887,26.34444,0 62.10388,26.31444,0 61.87610000000001,26.24638,0 61.84416,26.21166,0 61.77583000000001,25.81861,0 61.68638,25.795,0 61.70361000000001,25.67667000000001,0 61.66859000000001,25.63277,0 61.64695,25.30611,0 61.61103000000001,25.19764,0 61.54971,25.25,0 61.55388,25.19749,0 61.48611,25.19722,0 61.51667,25.15472,0 61.49527,25.11527,0 61.42305,25.0975,0 61.4386,25.07528,0 61.22499,25.11861,0 61.17305000000002,25.17444,0 60.62222,25.26806,0 60.60277000000001,25.40028,0 60.54722,25.44167,0 60.45499,25.43166,0 60.39528,25.37555,0 60.46111,25.26361,0 60.30721,25.32945,0 60.29361,25.37832,0 60.19694,25.36528,0 60.18249000000002,25.32111,0 60.07111,25.37916,0 59.89388,25.345,0 59.83889,25.41082,0 59.59916,25.39554,0 59.47805,25.47722,0 59.247,25.42619,0 59.02583000000001,25.3975,0 58.9325,25.505,0 58.81833,25.56,0 58.40895,25.59111,0 58.32286,25.57843,0 58.13499,25.54138,0 58.04554,25.57695,0 57.95777,25.70027,0 57.77694,25.62806,0 57.78695,25.69833,0 57.74805,25.74554,0 57.6261,25.73027,0 57.31806,25.77083,0 57.27138,25.91944,0 57.16721,26.07222,0 57.21388,26.1725,0 57.12579,26.26425,0 57.09309,26.29857,0 57.0935,26.38464,0 57.08777,26.63972,0 57.02138,26.85222,0 56.92694,26.95166,0 56.9711,26.96388,0 56.96970000000001,27,0 56.92389,26.98249,0 56.84196,27.03251,0 55.89573,26.62316,0 55.33095,26.23366,0 54.55681,25.86849,0 54.48864,25.8831,0 54.47404000000001,26.26287,0 53.14484,26.8033,0 52.56544,27.35835000000001,0 52.52133,27.48647,0 51.54147,27.7537,0 51.29651,27.95413,0 50.27212,29.1344,0 50.0717,29.82476,0 49.55681000000001,29.98495000000001,0 49.3535,30.13924,0 49.22824000000001,30.14287,0 48.59428,29.94093000000001,0 48.54556,29.96302,0 48.45333000000001,29.99805,0 48.38777000000001,30.13694,0 48.40781,30.21121,0 48.27964000000001,30.33528,0 48.1992,30.32573,0 48.16043,30.42708,0 48.03249,30.49138,0 48.03638,30.99749,0 47.69388000000001,31.00111,0 47.69721000000001,31.40778,0 47.86445,31.79861,0 47.79056000000001,31.86,0 47.68971000000001,32.02388,0 47.5075,32.15416,0 47.52887,32.22887,0 47.41332,32.34109,0 47.43416,32.39778,0 47.3561,32.47638,0 47.27499000000001,32.49194,0 47.1375,32.46305,0 46.73944000000001,32.75999,0 46.42388,32.93749,0 46.10722,32.96749,0 46.0975,33.00555,0 46.14972,33.06527,0 46.05416000000001,33.08805,0 46.05138000000001,33.11832,0 46.11138,33.11277,0 46.19944,33.19582,0 46.17555000000001,33.2686,0 46.05027000000001,33.37778,0 46.00647000000001,33.48579,0 45.87471,33.49166,0 45.9486,33.55665,0 45.89666,33.60139,0 45.90659000000001,33.63655,0 45.74694,33.59166,0 45.75527000000001,33.63361,0 45.68888,33.67499,0 45.50804,33.94249,0 45.40582,33.9711,0 45.46888,34.07917,0 45.56276,34.14054,0 45.54695000000002,34.18833,0 45.58472,34.30249,0 45.53555,34.35111,0 45.48777000000001,34.33583,0 45.43555000000001,34.45528,0 45.52555,34.50249,0 45.52473000000001,34.6032,0 45.61472,34.55999,0 45.72220999999999,34.55665,0 45.70833,34.65915,0 45.6511,34.72694,0 45.68860000000002,34.81528,0 45.76611,34.84583,0 45.77249,34.91444,0 45.86776,34.9036,0 45.89555,34.9636,0 45.8786,35.03527,0 45.92193000000001,35.05443,0 45.93378,35.09876,0 46.03944,35.05833,0 46.16638,35.10722,0 46.15331,35.1611,0 46.19305,35.21111,0 46.11916000000001,35.24444,0 46.14805,35.29746,0 45.99221,35.48109,0 46.0061,35.53778,0 45.97999000000001,35.58471,0 46.02388,35.57999,0 46.02944,35.68776,0 46.2686,35.72805,0 46.34444,35.82193,0 46.18166000000001,35.80417,0 46.08749,35.86639,0 45.76583000000001,35.81194,0 45.66332000000001,35.94054,0 45.55777000000001,36.0022,0 45.50555000000001,36.02055,0 45.34916,35.99055,0 45.33165,36.01416,0 45.36832,36.08637,0 45.32027000000001,36.15609,0 45.31971,36.23832,0 45.27582,36.25776,0 45.30332000000001,36.28083,0 45.27303000000001,36.30859,0 45.27916,36.3811,0 45.23916,36.43137,0 45.09415,36.42443,0 45.01471000000002,36.53527,0 45.06666000000001,36.68054,0 45.01277000000001,36.7536,0 44.84915,36.79832,0 44.90664,36.88832,0 44.88416,36.96166,0 44.90972000000001,37.02388,0 44.78499,37.08472,0 44.76554,37.11694,0 44.78733,37.1497,0 44.77332,37.22748,0 44.82193,37.2711,0 44.81527,37.30526,0 44.72499,37.38361,0 44.58859,37.44026,0 44.6136,37.60277,0 44.55804,37.64803,0 44.61805,37.72776,0 44.52693,37.78555,0 44.45609,37.77471,0 44.45193,37.81778,0 44.41916,37.81778,0 44.39333,37.86304,0 44.22398000000001,37.89915,0 44.26416,38.01416,0 44.38778,38.16583,0 44.40471000000001,38.27166,0 44.48416,38.34554,0 44.43471000000001,38.39555,0 44.38081,38.36971,0 44.30693000000001,38.38833,0 44.31388,38.63777,0 44.26333,38.66639,0 44.28276,38.69777,0 44.26082,38.72165,0 44.30332000000001,38.83444,0 44.20805,38.89581,0 44.15943,39.00221,0 44.20499,39.04165,0 44.18833,39.08306,0 44.21583,39.14083,0 44.09833,39.20638,0 44.09581,39.29138,0 44.03416,39.38499,0 44.20054,39.41694,0 44.31553000000001,39.3875,0 44.4161,39.42527,0 44.47108,39.69886,0 44.60582,39.78054000000001,0 44.81304,39.63081,0 + + + 1 + + + + GMT +04:00 + + +]]> + #khStyle0400 + + + + + +54.48864,25.8831,0 54.55681,25.86849,0 55.33095,26.23366,0 55.89573,26.62316,0 56.84196,27.03251,0 56.92389,26.98249,0 56.96971,27,0 56.9711,26.96388,0 56.92694,26.95166,0 57.02138,26.85222,0 57.08777,26.63972,0 57.0935,26.38464,0 57.09309,26.29857,0 57.12579,26.26425,0 57.21388,26.1725,0 57.16721,26.07222,0 57.27138,25.91944,0 57.31806,25.77083,0 57.6261,25.73027,0 57.74805,25.74554,0 57.78695,25.69833,0 57.77694,25.62806,0 57.95777,25.70027,0 58.04554,25.57695,0 58.13499,25.54138,0 58.32286,25.57843,0 58.40895,25.59111,0 58.81833,25.56,0 58.9325,25.505,0 59.02583000000001,25.3975,0 59.247,25.42619,0 59.47805,25.47722,0 59.59916,25.39554,0 59.83889,25.41082,0 59.89388,25.345,0 60.07111,25.37916,0 60.18249000000002,25.32111,0 60.19694,25.36528,0 60.29361,25.37832,0 60.30721,25.32945,0 60.46111,25.26361,0 60.39528,25.37555,0 60.45499,25.43166,0 60.54722,25.44167,0 60.60277000000001,25.40028,0 60.62222,25.26806,0 61.17305000000002,25.17444,0 61.22499,25.11861,0 61.4386,25.07528,0 61.42305,25.0975,0 61.49527,25.11527,0 61.51667,25.15472,0 61.48611,25.19722,0 61.55388,25.19749,0 61.54971,25.25,0 61.61103000000001,25.19764,0 61.78221,25.19027000000001,0 61.72444,25.0525,0 61.83721,25.03444,0 61.86193000000001,25.09277,0 61.91137000000001,25.11277,0 62.10444,25.10167,0 62.07777000000002,25.18138,0 62.16777,25.21638,0 62.29527,25.19916,0 62.31917,25.14277,0 62.28167000000001,25.105,0 62.35305,25.09195,0 62.39111000000001,25.10221,0 62.33638,25.12778,0 62.36221000000001,25.17332,0 62.48554000000001,25.20944,0 62.46444,25.23638,0 62.52693,25.25556,0 62.74471,25.25945,0 63.00805,25.21471,0 63.15583,25.25638,0 63.50500000000002,25.18861,0 63.52361,25.21361,0 63.46998,25.28028,0 63.57249,25.36,0 63.7486,25.38527,0 63.92917000000001,25.33416,0 64.06299,25.33679,0 64.09166999999999,25.32861000000001,0 64.25555,25.31472,0 64.43497000000001,25.23111000000002,0 64.51666,25.26944,0 64.59276,25.25556,0 64.63109,25.22056,0 64.61998,25.16999,0 64.70999000000001,25.18027,0 64.66499,25.20944,0 64.66776000000002,25.25694,0 64.76888,25.32138,0 65.13970000000001,25.28778,0 65.25417,25.37749,0 65.38611,25.39056,0 65.38777,25.3625,0 65.46642,25.38267,0 65.66776,25.34278,0 65.84665,25.41667,0 66.26389,25.46778,0 66.49576999999999,25.39812,0 66.54637,25.3629,0 66.73276,25.19749,0 66.67415,24.93388,0 66.70499,24.89167,0 66.65028,24.82611,0 66.85943,24.85444,0 66.9511,24.80472,0 66.96082,24.83861,0 67.07283000000001,24.7676,0 67.14679,24.6441,0 67.15637000000001,24.6075,0 67.25166,24.58916,0 67.18165000000001,24.57972,0 67.22971,24.53305,0 67.21361000000002,24.50361,0 67.25722,24.41361,0 67.28554,24.43639,0 67.27887,24.35694,0 67.35942,24.34249,0 67.29803,24.33944,0 67.28166,24.28083000000001,0 67.3633,24.06714,0 67.45277,23.98666,0 67.50054,23.97499,0 67.50583,23.92138,0 67.53803000000002,23.93813000000001,0 67.48248,23.89583,0 67.51169000000002,23.87695,0 67.51169000000002,18.87694,0 67.51169000000002,13.87695,0 67.51169000000002,12.15223,0 67.51169000000002,7.824905,0 67.51169000000002,2.82491,0 67.51169000000002,-2.175094,0 67.51169000000002,-7.175088,0 67.51169000000002,-12.17509,0 67.51169000000002,-17.17509,0 67.51169000000002,-22.17509,0 67.51169000000002,-24.58749,0 67.51169000000002,-29.58749,0 67.51169000000002,-34.58749,0 67.51169000000002,-39.58749,0 67.51169000000002,-41.88749,0 67.51169000000002,-46.88749,0 67.51170000000001,-51.88749,0 67.51170000000001,-56.88749,0 67.51170000000001,-61.88749000000001,0 67.51170000000001,-66.88749,0 67.51170000000001,-71.88749,0 67.51170000000001,-76.88749,0 67.51170000000001,-79.64822,0 67.51170000000001,-84.64822,0 67.51170000000001,-89.64822,0 67.51170000000001,-89.90000000000001,0 66.51234,-89.90000000000001,0 65.51299,-89.90000000000001,0 64.51363000000001,-89.90000000000001,0 63.51426000000001,-89.90000000000001,0 62.51491,-89.90000000000001,0 61.51555000000001,-89.90000000000001,0 60.51619,-89.90000000000001,0 59.51684,-89.90000000000001,0 58.51747,-89.90000000000001,0 57.51812000000001,-89.90000000000001,0 56.51877000000001,-89.90000000000001,0 55.5194,-89.90000000000001,0 54.52005,-89.90000000000001,0 53.52069000000001,-89.90000000000001,0 52.52133,-89.90000000000001,0 52.52133,-88.97416,0 52.52129000000001,-83.97417000000002,0 52.52126,-78.97417,0 52.52125,-76.47417,0 52.52121000000001,-71.47417,0 52.52118000000001,-66.47416,0 52.52115,-61.47417000000001,0 52.52111,-56.47416,0 52.52108,-51.47417,0 52.52105,-46.47416000000001,0 52.52101,-41.47417,0 52.521,-39.17416,0 52.52097,-34.17416,0 52.52093000000001,-29.17417,0 52.52089,-24.17416,0 52.52089,-22.17417,0 52.52085,-17.17417,0 52.52081,-12.17417,0 52.52079000000001,-7.17417,0 52.52075,-2.174176,0 52.52073,2.825829000000001,0 52.52069,7.825823000000002,0 52.52067,10.62583,0 55.86174,10.62857,0 55.86174,13.61265,0 52.52133,13.61265,0 52.52133,16.43764,0 52.94389,16.60806,0 53.11444,16.64278,0 51.99929,18.99934,0 55.00000000000001,20,0 55.66611000000001,21.99972,0 55.19917000000002,22.69972,0 55.14166,22.63333,0 52.58333,22.93889,0 51.58333,24.11666,0 51.58423000000001,24.26046,0 51.59138,24.37833,0 51.62222000000001,24.34472,0 51.63556000000001,24.20972,0 51.67222,24.2725,0 51.70888,24.21472,0 51.74389,24.28639,0 51.77584000000001,24.27528,0 51.79873,24.01633,0 51.92555000000001,23.95471,0 51.94305,23.99277,0 52.08055,23.95555,0 52.33083,23.99971,0 52.52133,24.12054,0 52.52133,27.48647,0 52.56544,27.35835000000001,0 53.14484,26.8033,0 54.47404000000001,26.26287,0 54.48864,25.8831,0 + + + 1 + + + + + +40.25339,43.58252,0 40.54306,43.50861,0 40.68471,43.54583,0 41.04416000000001,43.37498000000001,0 41.16805,43.38722,0 41.29554,43.33610000000001,0 41.39332,43.3461,0 41.58971,43.22275,0 41.93971,43.21749,0 42.05777,43.18610000000001,0 42.18111,43.23555,0 42.41526,43.23916,0 42.62583,43.14305,0 42.7011,43.1825,0 42.85722000000001,43.17748,0 43.0211,43.10444,0 43.01082,43.05666,0 43.20083,42.93637,0 43.56055,42.86082,0 43.67083,42.7911,0 43.82721,42.7514,0 43.8361,42.72776,0 43.73555,42.63916,0 43.9611,42.55778,0 44.0536,42.61804,0 44.22082000000001,42.63693,0 44.28665,42.71278,0 44.54972,42.75944000000001,0 44.68443,42.73943000000001,0 44.80388000000001,42.6172,0 44.855,42.74331,0 44.92749,42.76193,0 45.05304,42.69415,0 45.17137000000001,42.70083,0 45.35167,42.52943,0 45.55277,42.55026,0 45.76028,42.47791,0 45.64748,42.20471,0 45.91028,42.105,0 45.96053,42.02387,0 46.01082,42.04305,0 46.07805,42.03416,0 46.10389,41.99415,0 46.23998,42.00139,0 46.31998,41.93888,0 46.39415,41.94054,0 46.45176000000001,41.89705,0 46.56833,41.88248,0 46.56667000000001,41.80777,0 46.59166000000001,41.79221,0 46.76082,41.86388,0 46.77081,41.79666,0 46.92554,41.71776,0 47.04305000000001,41.55833,0 47.16054,41.5611,0 47.25888000000001,41.42471,0 47.28555000000001,41.31219,0 47.52193,41.25416,0 47.57166,41.2111,0 47.65972000000001,41.23554,0 47.76693,41.19609000000001,0 47.91999,41.22637,0 47.90831000000001,41.29084,0 47.96249,41.35943,0 48.02276,41.36193,0 48.07444000000001,41.46776,0 48.23137000000001,41.50249,0 48.3997,41.58914,0 48.47137000000001,41.72359000000001,0 48.58395000000001,41.83577,0 48.67777000000001,41.78276,0 48.89944,41.52583,0 49.03998,41.41415,0 49.14055,41.26833000000001,0 49.15498000000001,41.15165,0 49.22221,41.01833,0 49.39804000000001,40.84971,0 49.53249000000001,40.78749,0 49.50805,40.69305,0 49.52805,40.66277,0 49.80499,40.56471,0 50.05525999999999,40.58444,0 50.125,40.51138,0 50.23536,40.4908,0 50.36295000000001,40.47673000000001,0 50.62228,40.32742,0 50.63309,40.29893,0 50.39325,40.22689,0 50.2625,40.32916,0 50.12417,40.35833000000001,0 49.98054,40.31998000000001,0 49.87804000000001,40.36276,0 49.82472,40.28499,0 49.57167,40.21277,0 49.48805000000001,40.15054,0 49.49582,40.09055,0 49.42499999999999,40.05388,0 49.48304,39.98943000000001,0 49.42110000000001,39.93081,0 49.44442000000001,39.8686,0 49.39332,39.77832,0 49.42416999999999,39.70638000000001,0 49.31889000000001,39.62498,0 49.28082000000001,39.50055,0 49.41361,39.38388,0 49.40331,39.31805,0 49.36388000000002,39.34499,0 49.40805,39.28776,0 49.31304,39.34138,0 49.25805,39.31944,0 49.20194,39.02471,0 49.12804,38.97331,0 49.06027000000001,38.96693,0 49.05165,39.00139,0 49.12694,39.02998,0 49.14471,39.09748,0 49.06722000000001,39.10777,0 49.03832000000001,39.18221,0 48.95554,39.16526,0 48.93304,38.95138,0 48.89083,38.88082,0 48.82999,38.85942,0 48.86665,38.74583,0 48.88828000000001,38.44241,0 48.78943000000001,38.44777,0 48.62305000000001,38.39526,0 48.45416,38.56471,0 48.44193,38.62165,0 48.32776,38.60333,0 48.24361,38.66721,0 48.24387,38.72776,0 48.02081,38.83554,0 48.01415,38.90583,0 48.07138000000001,38.95138,0 48.31248,39.00776,0 48.32776,39.05165,0 48.29387000000001,39.11249,0 48.13499000000001,39.20888,0 48.11998,39.26361,0 48.18916000000001,39.33332,0 48.35979,39.38522,0 47.97667000000001,39.71922,0 47.93055,39.68359,0 47.80666,39.67722,0 47.53334,39.50888000000001,0 47.39166,39.47054000000001,0 47.29221,39.37693,0 47.09971,39.30444,0 47.02556,39.18942,0 46.94886,39.15443,0 46.83832000000001,39.15527000000001,0 46.54037,38.87559,0 46.35471,38.91054,0 46.17825000000001,38.84114000000001,0 46.05637,38.87831,0 45.87194000000001,38.87999,0 45.43941000000001,38.99804,0 45.43499000000001,39.0511,0 45.30999000000001,39.19832,0 45.14193,39.21748,0 45.13055000000001,39.28556,0 45.06304999999999,39.37305,0 44.95028000000001,39.43582,0 44.8886,39.60582,0 44.81304,39.63081,0 44.77886,39.70638000000001,0 44.69555,39.78998,0 44.59082,39.83305,0 44.48778,39.96277,0 44.34722,40.02389,0 44.28,40.0461,0 43.93389000000001,40.01361,0 43.65749,40.1086,0 43.65778,40.13971,0 43.72165,40.16332,0 43.67221,40.21972,0 43.68,40.26443,0 43.59417,40.33749,0 43.62027,40.41944,0 43.55415,40.4711,0 43.65304,40.53138,0 43.75361,40.67582,0 43.75193,40.74,0 43.6861,40.84195,0 43.67165,40.92806,0 43.59944,40.99249,0 43.47915,41.02528,0 43.46077,41.11296,0 43.47471,41.13999,0 43.42582,41.18527,0 43.3497,41.20193,0 43.23693,41.17638,0 43.19943000000001,41.25527,0 43.1236,41.25527,0 43.20777,41.30693,0 43.03972,41.37416,0 42.89278,41.50695,0 42.84722,41.47305,0 42.78832,41.50861,0 42.82749,41.58500000000001,0 42.59777,41.58305,0 42.51081,41.44333,0 42.47221,41.43333,0 42.18249,41.5075,0 42.05029,41.49056,0 41.96804,41.51915,0 41.83331,41.42832,0 41.72306,41.47055,0 41.72277,41.49554,0 41.65167,41.48277,0 41.53155,41.52388,0 41.73026000000001,41.72555,0 41.77472,41.88563,0 41.7625,41.99221,0 41.66166,42.12109,0 41.63277,42.27194,0 41.55331,42.38581000000001,0 41.46137,42.70804,0 41.22082,42.79861,0 41.15583,42.78917,0 41.03276000000001,42.97304,0 40.93277,42.97222,0 40.8436,43.06777,0 40.58665,43.0825,0 40.38472,43.16555,0 40.32638,43.14192,0 40.22471,43.31443,0 40.00297,43.37926,0 40.0775,43.54694,0 40.12665,43.57222,0 40.25339,43.58252,0 + + + 1 + + + + + +51.39554,54.67722000000001,0 51.39388,54.59304000000001,0 51.49388,54.59527,0 51.52333,54.64638,0 51.67972,54.56166000000001,0 51.92722000000001,54.53611,0 51.93277,54.43638,0 52.01999,54.43665,0 52.08526000000001,54.33942,0 52.12028000000001,54.35111,0 52.105,54.40054000000001,0 52.2,54.40639,0 52.20972,54.44304,0 52.36388,54.45916,0 52.35054,54.42333,0 52.37915,54.41444,0 52.43943,54.47887,0 52.50306000000001,54.45193,0 52.49416,54.39999,0 52.53745,54.37707,0 52.51166,54.32194,0 52.27943,54.32833000000002,0 52.19444,54.29721000000001,0 52.34610000000001,54.22665000000001,0 52.34388000000001,54.17194,0 52.25833,54.14999,0 52.27194,54.11388000000001,0 52.39804000000001,54.1286,0 52.4875,54.05777000000001,0 52.37054,53.9761,0 52.41415,53.93027000000001,0 52.25804,53.65526,0 52.1836,53.55694,0 52.09167,53.55027,0 52.07527,53.50639,0 52.13499,53.44915,0 52.13803999999999,53.40305000000002,0 52.19665000000001,53.37944,0 52.13916,53.29166,0 52.16388000000001,53.26167,0 52.1236,53.22388,0 52.13417,53.17499,0 52.05471,53.14249000000001,0 52.15972,53.09665,0 52.06249,53.07833,0 52.05389,52.99055,0 51.86694000000001,52.92943,0 51.82417000000001,52.87388,0 51.72805,52.87194,0 51.71555,52.82277,0 51.77944,52.79583000000001,0 51.73360000000001,52.6675,0 51.53416,52.67416,0 51.50667000000001,52.63276000000001,0 51.55054,52.57417,0 51.47360000000001,52.57972,0 51.47083,52.52722,0 51.56361,52.43582,0 51.46388,52.41360000000001,0 51.47166,52.36583000000001,0 51.40694,52.34917,0 51.40805,52.25416,0 51.45750000000001,52.22776,0 51.41249000000001,52.08971,0 50.7733,51.76918,0 50.75861,51.71970000000001,0 50.81361,51.64805,0 50.81054000000001,51.59166,0 50.68277000000001,51.57306000000001,0 50.71749,51.62249,0 50.60277,51.63999,0 50.59471,51.58972,0 50.54361,51.56722000000001,0 50.54888,51.46861,0 50.38472,51.42527000000001,0 50.39721999999999,51.39972,0 50.35443,51.37805000000001,0 50.36332,51.31694000000001,0 49.96804,51.2261,0 49.80416,51.11027,0 49.46194,51.12416,0 49.36443,50.97971,0 49.44083,50.90583000000002,0 49.42583000000001,50.85139000000001,0 49.15833,50.79278000000002,0 49.03083,50.68804999999999,0 48.83027,50.59665,0 48.59361,50.64833000000001,0 48.59555,50.62249000000001,0 48.69749,50.59194000000001,0 48.72276000000001,50.35305000000002,0 48.81110000000001,50.19415000000001,0 48.79111,50.1236,0 48.87972000000001,50.10167000000001,0 48.91693000000001,50.03417,0 48.79695,49.94194,0 48.45082,49.81693000000001,0 48.33221,49.87887000000001,0 48.25166000000001,49.86971,0 48.24888000000001,49.90888000000001,0 48.16554000000001,49.9661,0 48.11054000000001,50.0986,0 47.76082000000001,50.37527,0 47.59972,50.46083000000001,0 47.4464,50.37695,0 47.4161,50.33193,0 47.31666,50.29445000000001,0 47.34276,50.24193,0 47.28054,50.18221,0 47.35666,50.09027,0 47.30249,50.03194000000001,0 47.18833,49.94415000000001,0 46.92944,49.86361000000001,0 46.79582,49.33972,0 47.02610000000001,49.23610999999999,0 47.06275999999999,49.14277,0 46.95444,49.01305,0 46.77888000000001,48.93665,0 46.49916000000002,48.4175,0 47.12277,48.27166,0 47.13332000000001,48.24249,0 47.09637,48.21000000000001,0 47.13832000000001,48.16999,0 47.12221,48.10222,0 47.21499000000001,48.07083,0 47.06248000000001,47.99609,0 47.18277,47.87417,0 47.13665000000001,47.82249000000001,0 47.38333,47.68888000000001,0 47.43581,47.84361000000001,0 47.69137,47.76583,0 48.06471000000001,47.77971,0 48.20442000000001,47.70499000000001,0 48.44388000000001,47.43693,0 48.54721000000001,47.41721,0 48.7211,47.09833,0 49.02720999999999,46.77610000000001,0 48.94137,46.70416,0 48.76527,46.69082,0 48.71054,46.75972,0 48.60333,46.77332000000001,0 48.52166,46.74305,0 48.4762,46.66768,0 48.55415,46.64389,0 48.58400000000001,46.59843000000002,0 48.56054,46.56499,0 48.74027000000001,46.55832,0 48.83388,46.48499000000001,0 48.91813000000001,46.48922,0 49.22253,46.34631,0 49.3143,46.2573,0 49.18897,46.05259,0 49.05737,45.98365,0 48.99471,46.00246,0 48.87982,45.94397000000001,0 48.79208,45.82907,0 48.72941,45.804,0 48.74612,45.69747000000001,0 48.36385000000001,45.64942000000001,0 48.20509,45.7121,0 48.0714,45.71836,0 48.015,45.69538,0 47.99829,45.51992000000001,0 47.81656,45.43218000000001,0 47.53247000000001,45.53033,0 47.48619,45.57145,0 47.46748,45.63943,0 47.35971,45.68942,0 47.29361000000001,45.6436,0 46.89304000000001,45.57472000000001,0 47.0411,45.96970000000001,0 47.10915,46.00777,0 47.175,46.10556,0 47.09082000000002,46.1186,0 46.8336,46.07277,0 46.86665,46.24805000000001,0 46.47833,46.27555,0 46.66027,46.42804,0 46.96194,46.4286,0 46.94916,46.53943000000001,0 46.91332,46.55526,0 46.99805,46.63361,0 47.1497,46.66832,0 47.14026,46.69638,0 47.22776,46.74081,0 47.12721,46.85833000000001,0 46.99082,46.85082,0 46.92777,46.97832,0 46.79639,46.99638,0 46.51554,47.39193000000001,0 46.52387000000001,47.43499,0 46.83055,47.5761,0 46.68081,47.63248,0 46.3886,47.44443,0 46.29666000000001,47.43664,0 46.08887000000001,47.51692,0 45.93804,47.62887,0 45.90720000000001,47.7122,0 45.82916,47.72304,0 45.78556,47.81305,0 45.71970000000001,47.86528,0 45.70664000000001,47.93193000000001,0 45.74166,48.00222,0 45.7136,48.03750000000002,0 45.55193000000001,47.99193,0 45.39499,48.09833,0 45.30082000000001,48.09768,0 45.12749000000001,48.11306,0 44.95666,48.21194,0 44.92471,48.19916000000001,0 44.94221,48.14388000000002,0 44.80053,48.05249000000001,0 44.64415000000001,48.09166,0 44.61221,48.05665,0 44.54971,48.05833,0 44.53582,48.20638000000002,0 44.30944,48.25999000000001,0 44.32305,48.05999000000001,0 44.46637,48.04084000000001,0 44.46776,47.9786,0 44.3861,47.91415,0 44.38915,47.86832,0 44.06582000000001,47.9108,0 44.01582,47.86388,0 44.04443,47.82415,0 43.97499,47.76639,0 43.84138,47.7575,0 43.70583,47.68444,0 43.62944,47.55916,0 43.73177,47.47655000000001,0 43.65331,47.44222,0 43.55833000000001,47.48972,0 43.22499,47.44972,0 43.15998,47.48249,0 43.13554000000001,47.57556,0 43.05915,47.57639,0 42.98776,47.51388000000001,0 42.93971,47.51361,0 42.7286,47.85556,0 42.4986,48.01056,0 42.32638,48.04777,0 42.27555,48.01305000000001,0 42.02193,48.03027,0 42.05111,48.12972,0 42.10278,48.16389000000002,0 42.04499,48.25916000000001,0 42.15193,48.28221,0 42.07249,48.40889,0 42.27665,48.49860000000001,0 42.63054,48.54694,0 42.70166,48.61805,0 42.65027,48.70527,0 42.74610000000001,48.80638,0 42.66249,48.8886,0 42.66361,48.96777,0 42.48388,49.04472,0 42.39277,49.04972,0 42.34443,49.15249,0 42.06443,49.15388,0 42.07694,49.19971,0 42.03194,49.26639999999999,0 42.09693,49.29222,0 42.04972,49.40499000000001,0 42.0736,49.51056,0 42.11277,49.52583,0 42.17749,49.69083,0 41.8661,49.90777000000001,0 41.61361000000001,49.96361,0 41.58277,50.005,0 41.5911,50.05525999999999,0 41.4822,50.09027,0 41.36221,50.22629,0 41.5125,50.3811,0 41.4175,50.50527,0 41.45471,50.55138,0 41.52416,50.56860000000001,0 41.52833,50.60166,0 41.40749,50.61944,0 41.32777,50.71916,0 41.15639,50.77638,0 41.38277,50.83027,0 41.37777000000001,50.87666000000001,0 41.41193,50.90359,0 41.7286,51.01721,0 41.8686,51.19388000000001,0 41.96333,51.2086,0 42.09888,51.14750000000001,0 42.2672,51.13166,0 42.41888,51.17222,0 42.56722,51.16526000000001,0 42.68444,51.23693000000001,0 42.87309,51.23142,0 42.91221,51.24083,0 42.83942,51.31666000000001,0 42.86166,51.38166,0 42.48951,51.60789,0 42.51471,51.62388,0 42.48666000000001,51.69305,0 42.67638,51.83972,0 42.70305,51.98194,0 42.8111,52.01027,0 42.74749,52.08027,0 42.75333,52.18581,0 42.92221,52.30526,0 42.92527,52.37500000000001,0 43.00916000000001,52.36388,0 43.0798,52.40288,0 43.12276,52.40192,0 43.19027,52.46666000000001,0 43.3086,52.44555,0 43.34055,52.39111,0 43.77749,52.43472,0 44.05526,52.34610000000001,0 44.34638,52.3161,0 44.33332,52.34805000000001,0 44.38916,52.36833000000001,0 44.41082,52.41305000000001,0 44.54361,52.42944,0 44.51445,52.45916,0 44.53943,52.48638,0 44.49361,52.52665,0 44.54805,52.55249,0 44.66489,52.47935,0 44.86749,52.44666,0 44.90554,52.37665000000001,0 44.97332,52.37332,0 45.05054000000001,52.31721,0 45.10139000000001,52.33332000000001,0 45.06916,52.37778000000001,0 45.11139,52.41109,0 45.44194,52.40055,0 45.51639000000001,52.43444,0 45.52693,52.48166,0 45.64111000000001,52.52028,0 45.73554000000001,52.52583,0 45.71805,52.45889,0 45.98082000000001,52.40721000000001,0 45.97526000000001,52.4361,0 46.01639000000001,52.45776999999999,0 45.97137000000001,52.49583,0 46.06444,52.52693000000001,0 46.08749,52.56388,0 46.14582,52.54972000000001,0 46.15331,52.60194000000001,0 46.2761,52.61805,0 46.29834,52.68055,0 46.39999,52.67249,0 46.58027,52.73249,0 46.61388000000002,52.72748,0 46.61694000000001,52.66109,0 46.83077,52.6164,0 46.9461,52.63832000000001,0 47.0686,52.56638,0 47.1536,52.60999,0 47.20610000000001,52.56666,0 47.43831999999999,52.56722,0 47.55638,52.61833,0 47.72470000000001,52.57916,0 47.78111000000001,52.62915,0 47.77304,52.67972000000001,0 47.85971,52.73166,0 47.90027,52.72221,0 47.92527,52.6661,0 48.07861000000001,52.70555,0 48.08749,52.73193,0 47.98499,52.74722,0 48.10944,52.80138,0 48.28889,52.81082,0 48.43007000000001,52.78054,0 48.58694,52.8686,0 48.57805,52.93554,0 48.51057,52.97799,0 48.31833,52.98555,0 48.36888,53.06638,0 48.26944000000001,53.05777,0 48.2236,52.99722,0 48.14472000000001,53.05916,0 48.21221,53.14582999999999,0 48.13138000000001,53.16888,0 48.09332,53.26194,0 47.94194,53.37583,0 48.00360000000001,53.40666,0 48.04853,53.47771,0 48.16638,53.48249,0 48.2225,53.42443,0 48.23611,53.45888999999999,0 48.37833000000001,53.47137,0 48.37666000000001,53.54277,0 48.44083000000001,53.58138000000001,0 48.355,53.60167000000001,0 48.31416000000001,53.65583000000002,0 48.35638,53.6711,0 48.42695,53.62915000000002,0 48.4461,53.6661,0 48.60333,53.66945,0 48.51305,53.69638000000001,0 48.47222,53.77083,0 48.86333000000001,53.71277,0 49.03694,53.85944,0 49.31694,53.83333,0 49.34304000000001,53.87,0 49.42249000000001,53.87082000000001,0 49.60916000000001,53.855,0 49.61805,53.81139,0 49.83805,53.89083000000001,0 49.85722000000001,53.8336,0 50.03778000000001,53.82527000000001,0 50.05305,53.86860000000001,0 49.95361,53.90527,0 49.97443,53.96138,0 50.19749,54.03722,0 50.22554,54.07916,0 50.20304000000002,54.14027,0 50.26222,54.28944,0 50.19944,54.38416,0 50.21111000000001,54.42167,0 50.11721,54.43027000000001,0 50.12555,54.48194,0 50.07688,54.51667000000001,0 50.22527,54.50361000000001,0 50.27665,54.44054,0 50.38889,54.48888000000001,0 50.42944,54.42749000000001,0 50.47165,54.42333,0 50.5186,54.32639000000001,0 50.70305000000001,54.42833,0 50.93610000000001,54.33999,0 51.01721,54.47916,0 50.99277,54.49916000000001,0 51.00972000000001,54.55165,0 51.09361,54.54861,0 51.18111,54.64638,0 51.28139000000002,54.63694,0 51.39554,54.67722000000001,0 + + + 1 + + + + + +47.59415,61.05888,0 47.88139,60.99833,0 47.95999,61.00972,0 47.9875,60.88665000000001,0 48.41924,60.85386000000001,0 48.53917,60.59999000000001,0 48.53999,60.55915,0 48.48110000000001,60.52499,0 48.51111000000001,60.51194,0 48.50416000000001,60.48276,0 48.61777000000001,60.43333000000001,0 48.54137999999999,60.41109,0 48.67582000000001,60.40638000000001,0 48.76305,60.365,0 48.70499,60.30471,0 48.45917000000001,60.19415,0 48.50999,59.70388,0 49.08554,59.65554,0 49.03416,59.48444,0 49.14778,59.50889,0 49.3086,59.46694,0 49.34194,59.41915000000001,0 49.545,59.39305000000001,0 49.50861,59.24610000000001,0 49.59333,59.21776,0 49.79554,59.22221,0 49.82416,59.37054,0 49.79554,59.38388,0 49.82888000000001,59.48110000000001,0 49.78722000000001,59.50054999999999,0 49.83278,59.63693,0 49.85361,59.66361,0 50.05638,59.6875,0 49.95193,59.74722000000001,0 49.99665,59.77887000000001,0 50.2375,59.75277,0 50.27887,59.80693000000002,0 50.40331000000001,59.84444,0 50.82861000000001,59.86277000000001,0 51.07110999999999,60.06166000000001,0 51.34388,60.01833,0 51.41332000000001,59.94165,0 51.53221000000001,59.94721,0 51.8,60.11083,0 51.89999,60.24444,0 52.0089,60.30360000000002,0 52.08278,60.31694000000002,0 52.29815,60.24171,0 52.42722000000001,60.20304,0 53.01083,60.15915,0 53.38611,60.16555,0 53.41137000000001,60.22443000000001,0 53.59887000000001,60.15666,0 53.71194,60.00332,0 53.60278000000001,59.70055000000001,0 53.42054,59.68971,0 53.3661,59.51832,0 53.2047,59.34944,0 53.24415000000001,59.27583,0 53.38555,59.15554,0 53.7236,59.09194000000002,0 53.68916000000001,59.12332000000001,0 53.75417,59.14111000000001,0 53.88416000000001,59.09054,0 53.83500000000001,59.05832000000001,0 53.84470000000001,59.03054,0 53.76500000000001,59.02277000000002,0 53.71915,58.93748999999999,0 53.80721000000001,58.82777000000001,0 53.92833,58.78166000000001,0 53.77055,58.71638000000002,0 53.74027,58.67972,0 53.75721999999999,58.6525,0 53.69610000000001,58.60333000000001,0 53.78463,58.43996000000001,0 53.79027,58.39249000000001,0 53.88916,58.32222,0 53.80972,58.22887,0 53.89415,58.18804,0 53.94276,58.09527000000001,0 54.10722,57.97276,0 54.08749,57.91331,0 54.13639000000001,57.83222,0 54.15665000000001,57.70249,0 54.06916,57.66666000000001,0 54.12111,57.61193,0 53.98749000000001,57.57111,0 54.10139,57.51805,0 54.11888,57.55944000000001,0 54.16999000000001,57.55972000000001,0 54.20361,57.53083,0 54.16582,57.51222,0 54.17860000000001,57.465,0 54.26472,57.46443000000001,0 54.27166,57.42222,0 54.14443,57.38693,0 54.11639,57.31027000000001,0 54.32000000000001,57.28666000000001,0 54.33472,57.15554000000001,0 54.27555,57.10082000000001,0 54.37444000000001,57.07389000000001,0 54.40269,57.03656000000002,0 54.09805,56.96249,0 54.09177,56.79174,0 54.01056,56.74916,0 53.88999,56.76445,0 53.88943,56.80444,0 53.82832,56.81193,0 53.80637999999999,56.77332,0 53.88081,56.67222,0 53.83554,56.63556,0 53.87,56.6075,0 53.96388,56.63110000000001,0 54.0286,56.69276,0 54.10083,56.66276000000001,0 54.02664999999999,56.58416,0 54.09083,56.58250000000001,0 54.12194,56.53361000000001,0 54.18472000000001,56.53722,0 54.23611,56.43581,0 54.32472000000001,56.46249,0 54.35241,56.35857,0 54.31527,56.34138,0 54.37526,56.30498999999999,0 54.35889,56.26222000000001,0 54.10722,56.14749,0 54.02443,56.02944000000001,0 53.83795000000001,56.04377,0 53.78472,55.96915,0 53.67193,55.95999,0 53.63842,55.91552,0 53.29725,55.85252,0 53.1825,55.92389000000001,0 53.28694999999999,55.93555,0 53.37888,55.98972,0 53.47470000000001,56.12110000000001,0 53.54499,56.14083000000001,0 53.55610000000001,56.24388,0 53.41666,56.27833,0 53.2589,56.25471000000001,0 53.34249,56.14749,0 53.34499,56.08471,0 53.26111,56.08554,0 53.14666,56.16220000000001,0 53.04749,56.13528,0 53.06888,56.18249,0 53.04193,56.20805000000001,0 52.99416,56.18833,0 53.00305,56.22165,0 52.95610000000001,56.25166,0 52.98221,56.28082,0 52.94138,56.30639,0 52.98054,56.3475,0 52.9386,56.36694,0 53.09528,56.52694000000001,0 52.94444,56.54472,0 52.91778000000001,56.50111,0 52.82555,56.52193,0 52.95165999999999,56.46916,0 52.95278,56.44165000000002,0 52.82665999999999,56.38888000000002,0 52.72277,56.39138,0 52.74055,56.37471000000001,0 52.63638,56.28638,0 52.55833,56.2625,0 52.57583,56.22748000000001,0 52.81694,56.20249,0 52.80582,56.18194,0 52.84554,56.15721,0 52.81055,56.13388000000001,0 52.85443,56.12666,0 52.83694000000001,56.09222000000001,0 52.70054,56.14138000000001,0 52.72887,56.06471000000001,0 52.66221,56.01554,0 52.46776,56.07749,0 52.44666,56.06361,0 52.48471,56.03694000000002,0 52.43665,56.02833,0 52.20471000000001,56.08416,0 52.18693,56.05527,0 52.2461,56.06694,0 52.20417,56.00443000000001,0 52.25166,55.95805000000001,0 52.16916000000001,55.89306,0 52.05638,55.895,0 52.03749000000001,55.95916,0 51.96083,55.97915,0 51.78889,55.88388000000001,0 51.72971,55.95971,0 51.68943,55.93278,0 51.64277,55.96054,0 51.43027000000001,55.92722,0 51.39721,55.9922,0 51.48999000000001,56.07888000000001,0 51.6536,56.13444000000001,0 51.43667,56.14444000000001,0 51.36194,56.13054000000001,0 51.3147,56.06972,0 51.22304000000001,56.09916,0 51.20499,56.13943,0 51.1075,56.15139000000001,0 51.07639,56.12498999999999,0 50.83942,56.2411,0 50.86111,56.27804,0 50.90165,56.27944000000002,0 50.90693,56.31583,0 50.87389,56.32666,0 50.85139000000001,56.39027000000001,0 50.785,56.41555,0 50.7625,56.39944,0 50.78527,56.35638,0 50.73304,56.32999000000002,0 50.58638,56.35443,0 50.63110000000001,56.40526,0 50.56971000000001,56.40250000000001,0 50.45,56.54472,0 50.49333,56.61639,0 50.42333,56.58526,0 50.41361000000001,56.62804,0 50.34777,56.67361,0 50.30304,56.67638,0 50.32306,56.65444,0 50.29834,56.63999,0 50.22138000000001,56.66082,0 50.16194000000001,56.615,0 50.07221000000001,56.62266,0 50.10167000000001,56.79416,0 50.0611,56.79361,0 50.07082000000001,56.83082,0 50.01445,56.86721000000001,0 49.73443,56.89667000000001,0 49.75722,56.91415000000001,0 49.71582999999999,56.93361,0 49.76194,56.96500000000001,0 49.72499,56.99110000000001,0 49.71194,57.07361000000001,0 49.41249000000001,57.05305000000001,0 49.41915,57.02194,0 49.26832,57.04361,0 49.23138000000001,57.1311,0 49.14361,57.15972,0 49.22805,57.28889,0 49.18333000000001,57.33139,0 49.01611,57.28305,0 49.00639000000001,57.23332000000001,0 49.04610000000001,57.2011,0 49.01194,57.19332,0 48.99804,57.11888,0 48.95471,57.08554,0 48.84583,57.0886,0 48.86639,57.12249,0 48.83555,57.16444,0 48.56945,57.17249000000001,0 48.4511,57.12054,0 48.30777000000001,57.16860000000001,0 48.19222000000001,57.12471,0 48.24888000000001,57.10666000000001,0 48.16304,57.07972000000002,0 48.2086,57.02722,0 48.13916,56.99833,0 47.98694,57.01444999999999,0 47.97193,56.97387000000001,0 47.93111,57.00944,0 47.91666,56.97665000000001,0 47.83083000000001,57.00416000000001,0 47.785,57.05721,0 47.7336,57.05527000000001,0 47.76971000000001,57.00972000000001,0 47.68916,57.01250000000001,0 47.61721,56.9761,0 47.51139,56.90666,0 47.50249,56.85139,0 47.42444,56.88082,0 47.17083000000001,56.80860000000001,0 47.12277,56.83749,0 47.18194,56.84805,0 47.13277,56.91693000000001,0 46.94471,56.94833000000001,0 46.71583,56.93721,0 46.74471,56.95471,0 46.71510000000001,56.96634000000001,0 46.75388,56.97417,0 46.70805,57.0164,0 46.76806,57.02971,0 46.76528,57.14388,0 46.72638000000001,57.20000000000001,0 46.83443000000001,57.19971,0 46.85194000000001,57.23444000000001,0 46.80888,57.23583,0 46.78972,57.28944,0 46.72055,57.29445,0 46.67611000000001,57.35,0 46.75388,57.37999,0 46.68970000000001,57.39083,0 46.70471000000001,57.42555000000001,0 46.79722000000001,57.45666,0 46.74443,57.52333,0 47.03082,57.49304,0 47.25027,57.57083,0 47.4711,57.52859999999999,0 47.48666,57.58472,0 47.52638000000001,57.58416,0 47.54888,57.66361,0 47.52859,57.70304,0 47.58027000000001,57.74638,0 47.55082,57.765,0 47.5611,57.80249,0 47.77027,57.90028,0 47.70083,57.96361,0 47.45610000000001,57.98555000000001,0 47.38666,58.02332000000001,0 46.52304000000001,58.03889,0 46.44972,58.01749,0 46.34132,58.07474,0 46.30972000000001,58.11054,0 46.35527,58.18721,0 46.41499000000001,58.21054000000001,0 46.41026999999999,58.30805,0 46.48109,58.33222,0 46.41137,58.36388,0 46.59166000000001,58.43194,0 46.54972000000001,58.47665,0 46.59026999999999,58.51832000000001,0 46.58416,58.55804000000001,0 47.0061,58.62249,0 47.00417000000001,58.69583,0 47.11333,58.77249,0 47.265,58.75416,0 47.325,58.80082,0 47.28028,58.81945,0 47.30388,58.85722,0 47.28111000000001,58.90222000000001,0 47.30721,58.91666,0 47.45305000000001,58.92249,0 47.46777000000001,58.88416,0 47.61166,58.91499,0 47.55082,58.9886,0 47.57639,59.06028,0 47.45139,59.12694000000001,0 47.445,59.1675,0 47.39443,59.14722,0 47.22332,59.2261,0 47.25249,59.35555,0 47.05638,59.37860000000001,0 47.11351,59.61137999999999,0 47.14305,59.71333,0 47.12305,59.76139000000001,0 46.92305000000001,59.78444,0 46.92083000000001,59.84665,0 47.03694000000001,60.11832,0 46.89638,60.12583000000001,0 46.83138,60.07306000000001,0 46.60609,60.06527,0 46.36416000000001,60.1211,0 46.35305,60.20972,0 46.295,60.24249,0 46.43083000000001,60.27388,0 46.74499,60.25639000000001,0 46.81304,60.32277,0 46.83193000000001,60.37972,0 46.80444,60.38750000000001,0 46.87805,60.48166000000001,0 46.85666,60.51527,0 47.06166,60.57667000000001,0 47.01749,60.60249000000001,0 47.02388000000001,60.64695,0 46.95277,60.65527,0 47.08721000000001,60.82027,0 47.04314000000001,60.85386000000001,0 47.08027000000001,60.86221,0 47.10749,60.96194000000001,0 47.19138,60.99611000000002,0 47.19720000000002,61.05999,0 47.22833000000001,61.06444,0 47.59415,61.05888,0 + + + 1 + + + + + +57.49650000000001,82.84008,0 52.49656000000001,82.81507000000001,0 52.49656000000001,84.90001,0 52.49656000000001,89.90000000000001,0 53.43657000000001,89.90000000000001,0 54.37659,89.90000000000001,0 55.31659000000001,89.90000000000001,0 56.25661,89.90000000000001,0 57.19662,89.90000000000001,0 58.13662000000001,89.90000000000001,0 59.07665,89.90000000000001,0 60.01665,89.90000000000001,0 60.95667,89.90000000000001,0 61.89668,89.90000000000001,0 62.83669,89.90000000000001,0 63.7767,89.90000000000001,0 64.71672,89.90000000000001,0 65.65673,89.90000000000001,0 66.59672999999999,89.90000000000001,0 67.53675,89.90000000000001,0 67.53675,84.90001,0 67.53675,82.89028,0 67.49638,82.89008,0 62.49644000000001,82.86508000000001,0 57.49650000000001,82.84008,0 + + + 1 + + + + + GMT +04:30 + + +]]> + #khStyle0450 + + + + +74.91575,37.23733,0 74.8111,37.22041,0 74.75110000000001,37.30375,0 74.65109,37.23457,0 74.52970999999999,37.24178,0 74.47942999999999,37.17925,0 74.39722,37.17841,0 74.40054000000001,37.13896,0 74.56543000000001,37.02782,0 74.55304,36.96173000000001,0 74.48888,37.01034000000001,0 74.41998,37.00144,0 74.25194000000001,36.89917,0 74.15166000000001,36.90387,0 74.12109000000001,36.83858000000001,0 74.03831,36.81468,0 73.8522,36.89273000000001,0 73.6683,36.90964,0 72.55663,36.82126,0 72.47416,36.7624,0 72.17554,36.7113,0 72.18163,36.64969,0 72.07916,36.63162,0 72.07471,36.58915,0 71.90443000000001,36.50722,0 71.79584,36.49164,0 71.80834,36.40364,0 71.63307,36.46555,0 71.56305999999999,36.37228,0 71.5789,36.33173,0 71.50725,36.31537,0 71.41252000000002,36.22043,0 71.3389,36.20492,0 71.18706,36.04219,0 71.38499,35.94194,0 71.38721,35.89695,0 71.43997,35.87082,0 71.49082,35.75667,0 71.54526,35.71111,0 71.50888000000001,35.62083,0 71.61665000000001,35.55526,0 71.60193,35.50055,0 71.64943,35.42499,0 71.54859999999999,35.30111,0 71.66388000000001,35.19555,0 71.53554,35.08665,0 71.53803000000001,35.01972,0 71.49890000000001,34.96635,0 71.30914000000001,34.88361,0 71.22553000000001,34.74444,0 71.09583000000001,34.67666,0 71.0886,34.55943,0 70.98748999999999,34.5511,0 71.00054,34.46305,0 71.15886999999999,34.34833,0 71.11832,34.26027,0 71.13554000000001,34.1661,0 71.07720999999999,34.11277,0 71.07720999999999,34.05222,0 70.98109,34.00889,0 70.90555000000001,34.01333,0 70.89109999999999,33.96638,0 70.49136,33.94305,0 70.00276,34.05277000000001,0 69.90637,34.03527,0 69.86913,33.92999,0 69.98554,33.75306,0 70.1375,33.73249000000001,0 70.15138,33.66554,0 70.19664,33.64083,0 70.16804000000001,33.52083,0 70.28610000000001,33.42276,0 70.32693,33.33193,0 70.14499000000001,33.20249,0 70.06776000000001,33.20499,0 70.02888,33.13583000000001,0 69.88109,33.08999,0 69.79137,33.12694,0 69.70081999999999,33.07777,0 69.58083000000001,33.08693,0 69.49081,33.00388,0 69.51277,32.86944,0 69.39499000000001,32.77388,0 69.45833,32.67054,0 69.37776,32.56833,0 69.28749000000001,32.52639,0 69.24802,32.44388,0 69.29137,32.3175,0 69.27193,32.14527,0 69.32825,31.94036,0 69.2244,31.87129,0 69.09972000000001,31.70667,0 69.01944,31.65055,0 68.83305,31.60388,0 68.72803999999999,31.70416000000001,0 68.70722000000001,31.78111000000001,0 68.51944,31.825,0 68.43719,31.78667,0 68.57165999999999,31.76527000000001,0 68.53137,31.72693,0 68.27222,31.77166,0 68.16609,31.83305,0 68.07165999999999,31.69527,0 67.98054999999999,31.63583,0 67.88193,31.63805,0 67.73193000000001,31.52916,0 67.57555000000001,31.53194,0 67.61526000000002,31.42777,0 67.66775,31.4,0 67.77303000000001,31.40861,0 67.79192000000001,31.3411,0 67.38472,31.21527,0 67.25648,31.22233,0 67.05582,31.24305,0 67.04276,31.31639,0 66.95694,31.31806,0 66.84166999999999,31.2725,0 66.79304000000001,31.21972,0 66.72304,31.21222,0 66.68414,31.08611,0 66.57277000000001,30.98138,0 66.39554,30.94083,0 66.28194000000001,30.57528,0 66.35165000000001,30.44527,0 66.32527,30.23778,0 66.23831000000001,30.07138,0 66.36221000000001,29.9561,0 66.25664999999999,29.85194,0 65.03416,29.54111,0 64.69553000000001,29.58638,0 64.47859,29.57306,0 64.21138000000001,29.4986,0 64.12221,29.38861,0 63.5872,29.50389,0 62.48444,29.40611,0 60.86630000000002,29.86366,0 61.78652,30.80953,0 61.80403,30.94514,0 61.8511,31.02111,0 61.76466000000001,31.24477,0 61.7711,31.31833,0 61.71361000000001,31.38332000000001,0 61.10417,31.46305,0 60.84389,31.49833,0 60.79694000000001,32.0375,0 60.83665,32.09027,0 60.85778000000001,32.23471,0 60.58056,33.0886,0 60.59109,33.16305,0 60.85167,33.41805,0 60.85443,33.48999,0 60.94305,33.51944,0 60.88639,33.55721,0 60.66610000000001,33.5675,0 60.52776999999999,33.64415,0 60.50527,33.73915,0 60.55417000000001,33.81332,0 60.50444,34.12222,0 60.54610000000001,34.19638,0 60.67555000000001,34.28833,0 60.66554,34.31249,0 60.91527000000001,34.32,0 60.72165,34.52222,0 60.97137,34.64444,0 60.98333000000001,34.73388,0 61.06305,34.80888,0 61.06972,34.92888000000001,0 61.14249000000001,35.09832,0 61.09471,35.18416,0 61.10444,35.27916,0 61.19276000000001,35.30583,0 61.19444,35.40222,0 61.28778000000001,35.54999,0 61.27655000000001,35.60725,0 61.37888,35.63527,0 61.40610000000002,35.56388,0 61.59583000000001,35.44415,0 61.80249,35.4111,0 61.99583,35.45832,0 62.13256,35.36806,0 62.26944000000001,35.28583,0 62.30915000000002,35.14166,0 62.46500000000001,35.28861,0 62.55444000000001,35.2336,0 62.72220999999999,35.25472,0 62.92249000000001,35.38417,0 63.10527,35.45083,0 63.12666,35.53361,0 63.09528,35.62609,0 63.24002000000002,35.69928,0 63.12972000000001,35.77527,0 63.11944,35.86193,0 63.34249000000001,35.85722000000001,0 63.52833,35.90499,0 63.60111000000001,35.96443,0 63.77832999999999,35.98054000000001,0 63.92055,36.0375,0 64.06386999999999,36.00027,0 64.05971,36.08805,0 64.09498000000001,36.12332,0 64.18137,36.17054,0 64.28248000000001,36.15193,0 64.33665000000001,36.22471,0 64.47387000000001,36.25555,0 64.61526000000001,36.42361,0 64.61693,36.63638,0 64.79526,36.92305,0 64.77916999999999,37.09583,0 64.82304000000001,37.1386,0 65.07277000000001,37.24444,0 65.55443,37.25638,0 65.65082,37.35555000000001,0 65.64444,37.44887,0 65.68109,37.51694,0 65.77193,37.53749,0 65.78167999999999,37.5715,0 65.84526,37.50444,0 66.09054999999999,37.43167,0 66.28999,37.32472,0 66.40833000000001,37.3461,0 66.44748,37.31860000000001,0 66.53773,37.36638,0 66.67221000000001,37.33833,0 67.00417,37.38221,0 67.09648,37.33997,0 67.11749,37.28028,0 67.18637,37.25805,0 67.23997,37.1861,0 67.39722,37.21749,0 67.49249,37.28083,0 67.55748,37.21555,0 67.64333000000001,37.24722,0 67.75526000000001,37.22054,0 67.77988000000001,37.18582,0 67.78221000000001,37.09610000000001,0 67.88554000000001,37.06138,0 68.02831999999999,36.92389,0 68.18719,37.02055,0 68.27499,37.01222,0 68.29471,37.10832,0 68.39749000000001,37.09916000000001,0 68.4122,37.14805,0 68.62388,37.20055000000001,0 68.66415000000001,37.27499,0 68.82165999999999,37.24499,0 68.80663,37.31806,0 68.83804000000001,37.32695,0 68.91943000000001,37.27555,0 68.88777,37.33860000000001,0 68.9997,37.30777,0 69.12527,37.16304,0 69.24664,37.09416,0 69.3886,37.1586,0 69.45055000000001,37.22527,0 69.41110000000001,37.24083000000001,0 69.38026000000001,37.4511,0 69.51582999999999,37.58082,0 69.80692999999999,37.58305,0 69.89915000000001,37.61501,0 69.9586,37.56499,0 70.06245,37.54134,0 70.16193,37.53956,0 70.21554999999999,37.61638,0 70.25360000000001,37.61574,0 70.28581,37.69707,0 70.24693000000001,37.81255,0 70.16553999999999,37.87172,0 70.16137000000001,37.93337,0 70.24745,37.93169,0 70.24721,37.96394,0 70.46416000000001,38.11119,0 70.58443,38.27816,0 70.59775999999999,38.34151,0 70.68552,38.37486,0 70.67221000000001,38.41403,0 70.87388,38.45295,0 70.92998,38.43045,0 70.96720000000002,38.47212,0 71.04971000000001,38.40294,0 71.14554,38.38574,0 71.36638000000002,38.23627,0 71.25277,37.92204,0 71.33472,37.88787,0 71.51537,37.94846,0 71.59193000000002,37.90262,0 71.58859,37.81565,0 71.52878,37.7639,0 71.49571,37.55815,0 71.5141,37.46773,0 71.47942000000001,37.41003,0 71.49026000000001,37.28362,0 71.44693000000001,37.20722000000001,0 71.42943,37.07583,0 71.45694,36.94474,0 71.55468999999999,36.76068,0 71.61006999999999,36.70038,0 71.69525,36.67184,0 71.84276,36.6921,0 72.30636,36.9781,0 72.65851000000001,37.0212,0 72.79359,37.22623,0 73.06914999999999,37.31407,0 73.15054000000001,37.40049,0 73.30721,37.46275,0 73.37248,37.44692,0 73.45637000000001,37.47611,0 73.77598,37.4343,0 73.76888,37.34113,0 73.64943,37.30415,0 73.61998,37.26248,0 73.73858,37.22164,0 74.19721,37.33897,0 74.23748999999999,37.36119,0 74.23997,37.40705,0 74.36388,37.42846,0 74.54221,37.38181,0 74.68427,37.39974,0 74.83277,37.32545,0 74.91575,37.23733,0 + + + 1 + + + + GMT +05:00 + + +]]> + #khStyle0500 + + + + + +74.69081,37.06259,0 74.73943,37.02037,0 74.81749000000001,37.02176000000001,0 74.90166000000001,36.91093,0 74.95972,36.98012,0 75.14444,36.99987,0 75.39722,36.91406000000001,0 75.45444000000001,36.73044,0 75.52303000000001,36.72906,0 75.54637,36.76963,0 75.63916,36.76355,0 75.85526000000002,36.66717,0 76.00499000000001,36.4586,0 75.99082,36.31444,0 76.04166000000001,36.23751,0 75.99359,36.20833,0 75.99387,36.15971,0 75.92303,36.1236,0 75.92609,36.07721,0 75.97275999999999,36.01165,0 76.12387,35.97776,0 76.17693,35.81444,0 76.42165,35.8336,0 76.56416,35.91276,0 76.58971000000001,35.75695,0 76.7122,35.715,0 76.77805000000001,35.65526,0 76.86415,35.64888,0 76.91443,35.59777,0 77.07555000000001,35.58777,0 77.18747999999999,35.52805,0 77.30803000000002,35.53472,0 77.43137,35.47165,0 77.7011,35.46111,0 77.82393,35.50133000000001,0 77.04248,35.09916,0 77.06081,35.01472,0 76.96416000000001,34.94055,0 76.91692999999999,34.68138,0 76.86998,34.65888,0 76.80138,34.67222,0 76.7272,34.74388,0 76.56303000000001,34.73166,0 76.47026,34.76999,0 76.29359,34.70027,0 76.22916000000001,34.60944,0 76.16748,34.58638,0 75.98804,34.62694,0 75.80553999999999,34.50721,0 75.66137000000001,34.50082,0 75.39249,34.55471,0 75.24303999999999,34.62609,0 74.69275,34.6936,0 74.38916,34.78194,0 73.94914,34.65444,0 73.94637,34.56554,0 73.88193,34.52194,0 73.87054000000001,34.45833,0 73.79637,34.38555,0 73.84805,34.3186,0 73.97331,34.30277,0 74.01776,34.21804000000001,0 74.01416999999999,34.17556,0 73.9122,34.11527,0 73.91332,34.0686,0 73.97887,34.01139,0 74.24442999999999,34.01915,0 74.29582000000001,33.97748,0 74.23581,33.88416,0 74.05025999999999,33.83167,0 73.99471,33.75555,0 74,33.65417,0 74.15443000000001,33.56139,0 74.18248,33.51056,0 74.12581,33.34333,0 74.02415000000001,33.27638,0 74.01331999999999,33.19888,0 74.17331,33.04749,0 74.33414999999999,33.00054,0 74.36388,32.86944,0 74.32966999999999,32.81542,0 74.37164,32.7711,0 74.45444000000001,32.79306,0 74.53166,32.75027,0 74.63248,32.77055,0 74.70165,32.84694,0 74.65358999999999,32.59332,0 74.70387,32.48555,0 74.74443000000001,32.465,0 74.86165,32.48472,0 74.93858,32.44887,0 75.04886999999999,32.47832,0 75.31931,32.34466,0 75.32859000000001,32.29276,0 75.39130000000002,32.24158,0 75.32883,32.20907,0 75.30686,32.13391,0 75.25653,32.09287,0 75.22417,32.11676,0 75.19403,32.07404,0 75.04075000000002,32.04146,0 74.90347000000001,32.05329,0 74.83311000000001,31.96271000000001,0 74.60532000000001,31.87712,0 74.54922000000001,31.74385,0 74.48872,31.72159,0 74.61033999999999,31.55431,0 74.59842,31.48941,0 74.65510999999999,31.42797,0 74.54837000000001,31.35443,0 74.53898,31.11872,0 74.55728000000001,31.07605,0 74.62375,31.12393,0 74.68432,31.11202,0 74.69459000000002,31.05396,0 74.56112,31.04559,0 74.55499,30.99505,0 74.43221,30.94277,0 74.40063000000001,30.88415000000001,0 74.31693,30.88944,0 74.16109,30.66167,0 74.04886999999999,30.59916000000001,0 74.05025999999999,30.515,0 73.99609,30.505,0 73.93380000000002,30.41625,0 73.8725,30.3901,0 73.8586,30.36028,0 73.93442,30.31416,0 73.96442,30.23472,0 73.93341,30.136,0 73.39749000000001,29.94277,0 73.26527,29.55306,0 73.08638000000001,29.24582,0 72.98888,29.14194000000001,0 72.94832,29.03583,0 72.38970999999999,28.785,0 72.29221,28.68,0 72.20663999999999,28.4025,0 71.91998,28.12082,0 71.89694,27.96194,0 71.62691,27.87611,0 71.22581,27.84583,0 70.86665000000001,27.70693,0 70.73775999999999,27.73138,0 70.6622,27.86333000000001,0 70.6636,27.92833,0 70.51443,28.03917,0 70.36832,28.02083,0 70.20354,27.88558,0 70.11971,27.81611,0 70.0311,27.59055,0 69.86749,27.40861,0 69.58333,27.17833,0 69.50972,26.99221,0 69.48609999999999,26.80638,0 69.51277,26.74667000000001,0 69.72276000000001,26.66527,0 69.80081,26.59416,0 70.07138000000001,26.59611,0 70.17192,26.55277,0 70.17386999999999,26.24444,0 70.09276,26.08,0 70.1172,25.91888000000001,0 70.29276000000002,25.70138,0 70.38611,25.67472,0 70.60637,25.71416,0 70.66638,25.69833,0 70.67747,25.40166,0 70.75333000000001,25.27389000000001,0 70.8797,25.15611,0 70.9422,24.93555,0 71.07743000000001,24.68047,0 70.99276,24.6361,0 70.97971,24.56056,0 71.00555,24.54084,0 71.0061,24.45805,0 71.08194,24.44861,0 71.10581999999999,24.41638,0 71.02916999999999,24.36361,0 70.92804,24.36167,0 70.86443,24.31694,0 70.88582,24.27444,0 70.79082,24.23944,0 70.65054000000001,24.24138,0 70.58443,24.27834,0 70.56776000000001,24.37138,0 70.60081,24.415,0 70.56749000000002,24.43639,0 70.12009000000001,24.30904,0 70.07071000000002,24.19792,0 70.01470999999999,24.16972000000001,0 69.72360000000001,24.17111,0 69.59860000000001,24.28139,0 69.31081,24.29666,0 69.18941,24.25805,0 69.08028,24.29722,0 68.98803,24.25694,0 68.92693,24.32555,0 68.85804,24.24166,0 68.82471000000001,24.33278,0 68.78306000000001,24.33278,0 68.74525,24.31639,0 68.74721,23.96999,0 68.39055000000001,23.96749000000001,0 68.37637000000001,23.94417,0 68.36193,23.97388,0 68.33054,23.91472,0 68.29053999999999,23.94444,0 68.28194000000001,23.89777,0 68.21442,23.86833,0 68.1978,23.76668,0 68.21388,23.68055,0 68.28027,23.66666,0 68.23054999999999,23.64361,0 68.2011,23.66417,0 68.14028,23.60471,0 68.32138999999999,23.58083,0 68.44747,23.72693,0 68.58804000000001,23.76695,0 68.62831,23.82611,0 68.81833,23.87638000000001,0 68.66887,23.80972,0 68.63638,23.75722,0 68.46693000000001,23.65304,0 68.48553,23.61,0 68.42331,23.62722,0 68.40292,23.51842,0 68.39158999999999,23.4551,0 68.43692,23.42638,0 68.46278,23.43944,0 68.47638000000001,23.40027,0 68.53804,23.41805,0 68.51105,23.36989,0 68.53916,23.27833,0 68.56887999999999,23.25,0 68.62053,23.26777,0 68.5936,23.22888,0 68.66665999999999,23.14222,0 69.14346999999999,22.8714,0 69.20937000000001,22.73017,0 69.13518999999999,22.5504,0 69.06914,22.48121,0 68.96388,22.38445,0 68.94274,22.32166,0 68.96278,22.24777,0 69.22942000000001,21.94722,0 69.36053,21.84722,0 69.38970999999999,21.87444,0 69.40331999999999,21.80306,0 69.59582,21.63333,0 69.80888,21.46361,0 70.01582999999999,21.18611,0 70.26028,20.97666,0 70.52777,20.81111,0 70.83138,20.69444,0 70.96608999999999,20.70277,0 71.01195000000001,20.74166,0 71.46693000000001,20.88194,0 71.56191,20.97861,0 71.56026,20.94611,0 72.04886999999999,21.16083,0 72.11053,21.20194,0 72.08611000000001,21.24471,0 72.10387,21.30972,0 72.24249,21.46527,0 72.30326,21.63418,0 72.52789,21.67045,0 72.61156,21.47095,0 72.59081999999999,21.41195,0 72.6947,21.46972,0 72.75499000000001,21.46472,0 72.56667,21.3825,0 72.64776999999999,21.35889,0 72.58249000000001,21.34138,0 72.60988999999999,21.25536,0 72.61248999999999,21.12068,0 72.62608,21.08472,0 72.66921000000001,21.093,0 72.70011,21.07702,0 72.70739,21.07498,0 72.73706,20.99305,0 72.78471999999999,21.00082,0 72.89109999999999,20.97888,0 72.83098,20.92505,0 72.79096,20.87397,0 72.83443,20.83416,0 72.89305,20.87305,0 72.88916999999999,20.79555,0 72.92110000000001,20.81583,0 72.94609,20.75833,0 72.90166000000001,20.73222,0 72.88527000000001,20.51305,0 72.75359,20.295,0 72.72745999999999,20.13218,0 72.64748,19.84666,0 72.67525999999999,19.74611,0 72.73220000000001,19.78277,0 72.73165,19.70555,0 72.68831,19.72111,0 72.71693000000001,19.5475,0 72.74249,19.51056,0 72.73305000000001,19.57805,0 72.79443000000001,19.52361,0 72.87916000000001,19.52778,0 72.74359,19.47611,0 72.75443,19.36972,0 72.79776,19.32611,0 72.96388,19.30917,0 73.04722,19.21726,0 73.01609999999999,19.20583,0 72.96971000000001,19.29166,0 72.77748,19.30861,0 72.77638,19.20388,0 72.82666,19.25056,0 72.77998,19.16027,0 72.82082,19.17277,0 72.82249,19.03777,0 72.76999000000002,18.94306,0 72.80247,18.95304,0 72.80582,18.895,0 72.85741,18.79465,0 72.85748,18.64805,0 72.91443000000001,18.55277,0 72.9611,18.55139000000001,0 73.01694000000001,18.46722,0 72.99387,18.4561,0 72.95139,18.52944,0 72.90916,18.52638,0 72.90694000000001,18.36249,0 72.98581,18.28389,0 73.06499,18.27389,0 73.07887,18.21472,0 73.05165,18.18305,0 73.05663000000001,18.22138,0 72.97165000000001,18.23944,0 72.93803,18.27945,0 72.92221000000001,18.22722,0 72.96915,18.18694,0 72.97971,18.06305,0 73.04443000000001,18.05167000000001,0 73.00054,18.01444,0 73.03498999999999,17.98472,0 73.01166000000001,17.94805,0 73.10914,17.76972,0 73.11443,17.63666,0 73.14166,17.59361,0 73.19914,17.58638,0 73.12776,17.56611,0 73.12776,17.53943,0 73.18581,17.44027,0 73.15998999999999,17.40055,0 73.24442999999999,17.28417,0 73.18359,17.29888,0 73.2747,17.08194,0 73.27139,17.03056,0 73.24832000000002,17.03555,0 73.28805,16.98166,0 73.26972000000001,16.85333,0 73.30971,16.80583,0 73.29109,16.7575,0 73.31693,16.62861,0 73.37276,16.62305,0 73.37276,16.59249,0 73.30859,16.60306,0 73.36774,16.55861,0 73.36054,16.51222,0 73.31581,16.55695,0 73.30165,16.5225,0 73.38194,16.39861,0 73.35581999999999,16.36889,0 73.40998999999999,16.21749,0 73.43804,16.21832,0 73.44776,16.10889,0 73.45499,16.16916,0 73.48859,16.18,0 73.44776,16.05584,0 73.51331999999999,16.01972,0 73.48553,15.99139,0 73.59387,15.89278,0 73.64943,15.78416,0 73.64193,15.74027,0 73.69721,15.72195,0 73.71638,15.61972,0 73.83526000000001,15.65944,0 73.73081999999999,15.59777,0 73.75832,15.49471,0 73.86388,15.53472,0 73.86499000000002,15.50667,0 73.78859,15.455,0 73.91692999999999,15.41916,0 73.96361,15.36361,0 73.91249000000001,15.40111,0 73.78610000000001,15.39805,0 73.88054,15.35971,0 73.96082000000001,15.15472,0 73.91553999999999,15.07805,0 74.01999000000001,15.00055,0 74.03361,14.91722,0 74.10136,14.86709,0 74.12303000000001,14.84417,0 74.20914999999999,14.89527,0 74.23499,14.87471,0 74.08971,14.79777,0 74.19414000000002,14.71444,0 74.22331,14.73777,0 74.25082999999999,14.71889,0 74.26470999999999,14.62222,0 74.33859,14.60611,0 74.28831,14.58417,0 74.30081,14.52166,0 74.3336,14.51555,0 74.35803,14.56833,0 74.42443,14.47611,0 74.39444,14.45332,0 74.35138000000001,14.51028,0 74.40942,14.29445,0 74.51186,14.24342,0 74.42525999999999,14.24861,0 74.49442999999999,14.01639,0 74.61913,13.8325,0 74.65721000000002,13.65972,0 74.68193000000001,13.70611,0 74.73443,13.65222,0 74.66388000000002,13.63194,0 74.67609,13.51028,0 74.71249000000002,13.46806,0 74.70139,13.41056,0 74.68248000000001,13.46278,0 74.68665,13.37833,0 74.77916999999999,13.08389,0 74.81026000000001,12.86472,0 74.84276,12.84556,0 74.93998000000001,12.87111,0 74.85999,12.82389,0 74.82332,12.83361,0 74.85526,12.755,0 75.10721,12.22,0 75.17613,12.06975,0 75.19582,12.00389,0 75.2186,12.01806,0 75.27831999999999,11.96194,0 75.25912,12.01889,0 75.29636000000002,12.03777,0 75.33167,12.01472,0 75.27442000000001,12.00777,0 75.30971,11.95222,0 75.39388,11.97222,0 75.39664999999999,11.91611,0 75.30775,11.93806,0 75.31219,11.90056,0 75.52858999999999,11.70027,0 75.61304,11.47166,0 75.67859,11.44583,0 75.7411,11.36306,0 75.72553000000001,11.32972,0 75.90748000000001,10.80333,0 75.93858,10.79277,0 75.92416,10.75556,0 76.05553999999999,10.505,0 76.15776,10.19527,0 76.20663999999999,10.20306,0 76.19497,10.26445,0 76.24109,10.22666,0 76.17747,10.17,0 76.19637,10.06528,0 76.23437,9.986049,0 76.23848,9.953955000000002,0 76.31582,9.463608000000001,0 76.44247,9.143325000000001,0 76.41914,9.249165,0 76.46138000000001,9.149445,0 76.48387,9.161667,0 76.47581,9.115550000000001,0 76.45471000000001,9.122499,0 76.52694,8.938890000000001,0 76.55692999999999,8.990829,0 76.55859,8.95166,0 76.57720999999999,8.994166999999999,0 76.66748,9.003609000000001,0 76.62943,8.981945,0 76.65860000000001,8.964998,0 76.60053000000001,8.971947,0 76.57082,8.939159,0 76.61414000000001,8.928890000000001,0 76.60415999999999,8.90972,0 76.54498,8.930277,0 76.54387,8.907496999999999,0 76.9986,8.365273999999999,0 77.30304,8.123327,0 77.54082,8.069715,0 77.5872,8.134722,0 77.77554000000001,8.181108,0 77.79275,8.225,0 77.99693000000001,8.338328000000001,0 78.06053,8.364167,0 78.13164999999999,8.486667000000001,0 78.13997999999999,8.617221000000001,0 78.11192,8.654715,0 78.21053000000001,8.75555,0 78.20804,8.781658999999999,0 78.16361000000002,8.754165,0 78.19247,8.904166999999999,0 78.39664999999999,9.089721000000001,0 78.65637,9.147779,0 78.66221,9.176660999999999,0 78.97110000000001,9.273607999999999,0 79.27222,9.252773,0 79.44081,9.148337,0 79.69427,9.086679,0 79.88623,8.969967000000001,0 79.91638000000002,8.931663,0 79.92596,8.795825000000001,0 79.77399000000001,8.533196,0 79.69804000000001,8.217504,0 79.70638,8.035830000000001,0 79.79694000000001,7.661394,0 79.82639,7.198893000000001,0 79.86248999999999,7.155837,0 79.8436,7.125272000000001,0 79.80748,7.192214,0 79.85831,7.024167000000001,0 79.85137,6.83639,0 79.98648,6.432363,0 80.02666000000001,6.268337000000001,0 80.12581,6.093891,0 80.20081999999999,6.026112000000001,0 80.44026,5.96555,0 80.46471,5.933340000000001,0 80.59193000000001,5.918336,0 80.71638,5.956946,0 80.8186,6.037776,0 81.11887,6.112503000000001,0 81.19609,6.181946,0 81.21138000000001,6.160284,0 81.32417,6.198327,0 81.66110000000001,6.440003000000001,0 81.78221000000001,6.624720000000001,0 81.89166,7.013609,0 81.87886,7.312221000000001,0 81.82656,7.473186000000001,0 81.80025999999999,7.610552,0 81.69465,7.757684,0 81.59305000000001,7.838892,0 81.56944000000001,7.983891000000001,0 81.51555000000002,8.003052,0 81.46361,8.112769999999999,0 81.43359,8.085824000000002,0 81.39027,8.140003999999999,0 81.39916,8.187497000000001,0 81.4397,8.101395,0 81.44331,8.173889000000001,0 81.39499000000001,8.340831,0 81.35498,8.366382,0 81.35442000000001,8.403893,0 81.39137,8.367217999999999,0 81.36136999999999,8.487215000000001,0 81.32026999999999,8.520002,0 81.26555000000001,8.453609,0 81.16775,8.514998,0 81.13054,8.500005,0 81.16137000000001,8.534447999999999,0 81.21388,8.508609,0 81.20833,8.570826,0 81.25221000000001,8.542214,0 81.20555000000002,8.608059000000001,0 81.23109,8.651106,0 80.97971,8.973611999999999,0 80.92081000000002,8.935551,0 80.93027000000001,8.979444000000001,0 80.87608,9.036395000000001,0 80.95750000000001,9.010556000000001,0 80.89249,9.111392,0 80.83222000000001,9.139715000000001,0 80.88388000000001,9.138609000000001,0 80.82444000000001,9.261945000000001,0 80.79665,9.266660999999999,0 80.80582000000001,9.240273,0 80.73499,9.302498999999999,0 80.80193,9.292769,0 80.36803000000002,9.653893999999999,0 80.24818999999999,9.827252,0 79.93916,10.12232,0 79.85971000000001,10.29538,0 79.84081999999999,10.81778,0 79.83110000000001,11.345,0 79.76389,11.36,0 79.67192,11.29556,0 79.76667000000001,11.38389,0 79.82249,11.37333,0 79.75139,11.54916,0 79.78386999999999,11.775,0 79.86720000000001,12.03277,0 80.0061,12.23027,0 79.94193,12.22305,0 80.03360000000001,12.27861,0 80.16025999999999,12.47305,0 80.25888000000001,12.78221,0 80.26277,12.94916,0 80.34972000000001,13.33417,0 80.22581,13.68,0 80.24748,13.80889,0 80.14915000000002,14.01111,0 80.12886,14.23667,0 80.03999,14.19528,0 80.07916,14.24472,0 80.13721000000001,14.25639,0 80.17415,14.34389,0 80.19859,14.57027,0 80.14413999999999,14.56555,0 80.18221,14.59638,0 80.15331000000001,14.67445,0 80.10578000000001,14.78102,0 80.04886999999999,15.04889,0 80.09081999999999,15.30916,0 80.20637000000002,15.48861,0 80.27943000000001,15.69917,0 80.55415000000001,15.87694,0 80.68552,15.88306,0 80.65776,15.88861,0 80.67137000000001,15.90583,0 80.80443000000001,15.84472,0 80.81507000000001,15.71571,0 81.01727,15.77555,0 81.00171,15.84445,0 81.15837000000001,15.97527,0 81.15782,16.05306,0 81.25944000000001,16.27662,0 81.41947999999999,16.33777,0 81.54474999999999,16.34416,0 81.54504000000001,16.37305,0 81.5856,16.33721,0 81.72726,16.31083,0 82.07449,16.44305,0 82.30199,16.575,0 82.28032,16.61944,0 82.31226,16.60444,0 82.34644,16.70472,0 82.37195,16.86854,0 82.36449,16.93222,0 82.35971000000002,16.82056,0 82.27222,16.86222,0 82.2486,16.92027,0 82.31331,17.04556,0 82.50555,17.22305,0 82.50565,13.81117,0 82.50581,8.811171,0 82.50595000000001,3.811175,0 82.5061,-1.188829,0 82.50624999999999,-6.188824,0 82.5064,-11.18883,0 82.50655,-16.18883,0 82.50658,-17.48883,0 82.50671,-22.48882,0 82.50684,-27.48883,0 82.50697,-32.48883,0 82.50700000000002,-33.68883,0 82.50713,-38.68883,0 82.50727999999999,-43.68883,0 82.5074,-48.68883000000001,0 82.50753000000002,-53.68882000000001,0 82.50766,-58.68883,0 82.5078,-63.68882,0 82.50792,-68.68883,0 82.50802,-72.28883000000002,0 82.50816,-77.28883,0 82.50829,-82.28883,0 82.50834999999999,-84.89999,0 82.50848000000001,-89.90000000000001,0 81.50870000000001,-89.90000000000001,0 80.50892,-89.90000000000001,0 79.50912000000001,-89.90000000000001,0 78.50934,-89.90000000000001,0 77.50954000000002,-89.90000000000001,0 76.50977,-89.90000000000001,0 75.50998,-89.90000000000001,0 74.5102,-89.90000000000001,0 73.51040999999999,-89.90000000000001,0 72.51063000000001,-89.90000000000001,0 71.51083,-89.90000000000001,0 70.51105,-89.90000000000001,0 69.51125,-89.90000000000001,0 68.51148000000001,-89.90000000000001,0 67.51170000000001,-89.90000000000001,0 67.51170000000001,-89.64822,0 67.51170000000001,-84.64822,0 67.51170000000001,-79.64822,0 67.51170000000001,-76.88749,0 67.51170000000001,-71.88749,0 67.51170000000001,-66.88749,0 67.51170000000001,-61.88749000000001,0 67.51170000000001,-56.88749,0 67.51170000000001,-51.88749,0 67.51169000000002,-46.88749,0 67.51169000000002,-41.88749,0 67.51169000000002,-39.58749,0 67.51169000000002,-34.58749,0 67.51169000000002,-29.58749,0 67.51169000000002,-24.58749,0 67.51169000000002,-22.17509,0 67.51169000000002,-17.17509,0 67.51169000000002,-12.17509,0 67.51169000000002,-7.175088,0 67.51169000000002,-2.175094,0 67.51169000000002,2.82491,0 67.51169000000002,7.824905,0 69.14654,7.824959000000001,0 74.14655000000001,7.825121,0 74.14655000000001,12.15223,0 72.51169,12.15223,0 67.51169000000002,12.15223,0 67.51169000000002,13.87695,0 67.51169000000002,18.87694,0 67.51169000000002,23.87695,0 67.48248,23.89583,0 67.53803000000002,23.93813000000001,0 67.50583,23.92138,0 67.50054,23.97499,0 67.45277,23.98666,0 67.3633,24.06714,0 67.28166,24.28083000000001,0 67.29803,24.33944,0 67.35942,24.34249,0 67.27887,24.35694,0 67.28554,24.43639,0 67.25722,24.41361,0 67.21361000000002,24.50361,0 67.22971,24.53305,0 67.18165000000001,24.57972,0 67.25166,24.58916,0 67.15637000000001,24.6075,0 67.14679,24.6441,0 67.07283000000001,24.7676,0 66.96082,24.83861,0 66.9511,24.80472,0 66.85943,24.85444,0 66.65028,24.82611,0 66.70499,24.89167,0 66.67415,24.93388,0 66.73276,25.19749,0 66.54637,25.3629,0 66.49576999999999,25.39812,0 66.26389,25.46778,0 65.84665,25.41667,0 65.66776,25.34278,0 65.46642,25.38267,0 65.38777,25.3625,0 65.38611,25.39056,0 65.25417,25.37749,0 65.13970000000001,25.28778,0 64.76888,25.32138,0 64.66776000000002,25.25694,0 64.66499,25.20944,0 64.70999000000001,25.18027,0 64.61998,25.16999,0 64.63109,25.22056,0 64.59276,25.25556,0 64.51666,25.26944,0 64.43497000000001,25.23111000000002,0 64.25555,25.31472,0 64.09166999999999,25.32861000000001,0 64.06299,25.33679,0 63.92917000000001,25.33416,0 63.7486,25.38527,0 63.57249,25.36,0 63.46998,25.28028,0 63.52361,25.21361,0 63.50500000000002,25.18861,0 63.15583,25.25638,0 63.00805,25.21471,0 62.74471,25.25945,0 62.52693,25.25556,0 62.46444,25.23638,0 62.48554000000001,25.20944,0 62.36221000000001,25.17332,0 62.33638,25.12778,0 62.39111000000001,25.10221,0 62.35305,25.09195,0 62.28167000000001,25.105,0 62.31917,25.14277,0 62.29527,25.19916,0 62.16777,25.21638,0 62.07777000000002,25.18138,0 62.10444,25.10167,0 61.91137000000001,25.11277,0 61.86193000000001,25.09277,0 61.83721,25.03444,0 61.72444,25.0525,0 61.78221,25.19027000000001,0 61.61103000000001,25.19764,0 61.64695,25.30611,0 61.66859000000001,25.63277,0 61.70361000000001,25.67667000000001,0 61.68638,25.795,0 61.77583000000001,25.81861,0 61.84416,26.21166,0 61.87610000000001,26.24638,0 62.10388,26.31444,0 62.12887,26.34444,0 62.13583000000001,26.38083,0 62.27803000000001,26.35402,0 62.27138,26.42472,0 62.32027000000001,26.51527,0 62.44609,26.56888,0 62.74305,26.61167,0 62.77276000000001,26.64972,0 63.17638000000001,26.63111,0 63.20638,26.84222,0 63.29056,26.89222,0 63.25916,26.93443,0 63.25305,27.08361,0 63.27859,27.12194,0 63.34194,27.1225,0 63.28832,27.21861,0 63.20583,27.2675,0 62.93333000000001,27.21333,0 62.82305000000002,27.23027,0 62.76471,27.27194,0 62.79583,27.28555,0 62.80694,27.32332,0 62.77833,27.35333,0 62.83972,27.47443000000001,0 62.82193,27.76027,0 62.75777,28.00027,0 62.78138,28.26695,0 62.59249,28.2336,0 62.40499,28.41722,0 61.90554,28.555,0 61.58138000000001,28.88083,0 61.53361000000001,29.0125,0 61.48804000000001,29.04361,0 61.51111,29.08861,0 61.42471,29.15528000000001,0 61.36027,29.26583000000001,0 61.3586,29.38444000000001,0 61.31443000000001,29.39583,0 60.86630000000002,29.86366,0 62.48444,29.40611,0 63.5872,29.50389,0 64.12221,29.38861,0 64.21138000000001,29.4986,0 64.47859,29.57306,0 64.69553000000001,29.58638,0 65.03416,29.54111,0 66.25664999999999,29.85194,0 66.36221000000001,29.9561,0 66.23831000000001,30.07138,0 66.32527,30.23778,0 66.35165000000001,30.44527,0 66.28194000000001,30.57528,0 66.39554,30.94083,0 66.57277000000001,30.98138,0 66.68414,31.08611,0 66.72304,31.21222,0 66.79304000000001,31.21972,0 66.84166999999999,31.2725,0 66.95694,31.31806,0 67.04276,31.31639,0 67.05582,31.24305,0 67.25648,31.22233,0 67.38472,31.21527,0 67.79192000000001,31.3411,0 67.77303000000001,31.40861,0 67.66775,31.4,0 67.61526000000002,31.42777,0 67.57555000000001,31.53194,0 67.73193000000001,31.52916,0 67.88193,31.63805,0 67.98054999999999,31.63583,0 68.07165999999999,31.69527,0 68.16609,31.83305,0 68.27222,31.77166,0 68.53137,31.72693,0 68.57165999999999,31.76527000000001,0 68.43719,31.78667,0 68.51944,31.825,0 68.70722000000001,31.78111000000001,0 68.72803999999999,31.70416000000001,0 68.83305,31.60388,0 69.01944,31.65055,0 69.09972000000001,31.70667,0 69.2244,31.87129,0 69.32825,31.94036,0 69.27193,32.14527,0 69.29137,32.3175,0 69.24802,32.44388,0 69.28749000000001,32.52639,0 69.37776,32.56833,0 69.45833,32.67054,0 69.39499000000001,32.77388,0 69.51277,32.86944,0 69.49081,33.00388,0 69.58083000000001,33.08693,0 69.70081999999999,33.07777,0 69.79137,33.12694,0 69.88109,33.08999,0 70.02888,33.13583000000001,0 70.06776000000001,33.20499,0 70.14499000000001,33.20249,0 70.32693,33.33193,0 70.28610000000001,33.42276,0 70.16804000000001,33.52083,0 70.19664,33.64083,0 70.15138,33.66554,0 70.1375,33.73249000000001,0 69.98554,33.75306,0 69.86913,33.92999,0 69.90637,34.03527,0 70.00276,34.05277000000001,0 70.49136,33.94305,0 70.89109999999999,33.96638,0 70.90555000000001,34.01333,0 70.98109,34.00889,0 71.07720999999999,34.05222,0 71.07720999999999,34.11277,0 71.13554000000001,34.1661,0 71.11832,34.26027,0 71.15886999999999,34.34833,0 71.00054,34.46305,0 70.98748999999999,34.5511,0 71.0886,34.55943,0 71.09583000000001,34.67666,0 71.22553000000001,34.74444,0 71.30914000000001,34.88361,0 71.49890000000001,34.96635,0 71.53803000000001,35.01972,0 71.53554,35.08665,0 71.66388000000001,35.19555,0 71.54859999999999,35.30111,0 71.64943,35.42499,0 71.60193,35.50055,0 71.61665000000001,35.55526,0 71.50888000000001,35.62083,0 71.54526,35.71111,0 71.49082,35.75667,0 71.43997,35.87082,0 71.38721,35.89695,0 71.38499,35.94194,0 71.18706,36.04219,0 71.3389,36.20492,0 71.41252000000002,36.22043,0 71.50725,36.31537,0 71.5789,36.33173,0 71.56305999999999,36.37228,0 71.63307,36.46555,0 71.80834,36.40364,0 71.79584,36.49164,0 71.90443000000001,36.50722,0 72.07471,36.58915,0 72.07916,36.63162,0 72.18163,36.64969,0 72.17554,36.7113,0 72.47416,36.7624,0 72.55663,36.82126,0 73.6683,36.90964,0 73.8522,36.89273000000001,0 74.03831,36.81468,0 74.12109000000001,36.83858000000001,0 74.15166000000001,36.90387,0 74.25194000000001,36.89917,0 74.41998,37.00144,0 74.48888,37.01034000000001,0 74.55304,36.96173000000001,0 74.56543000000001,37.02782,0 74.69081,37.06259,0 + + + + + +70.25215,-6.970275,0 70.25215,-9.433405000000001,0 73.35092,-9.431101,0 73.34769,-6.970275,0 70.25215,-6.970275,0 + + + 1 + + + + + +78.59721999999999,72.20972,0 78.67693,72.17944,0 78.80803,72.18332000000001,0 78.7711,72.17027,0 78.91165,72.14444,0 78.91081,72.11471,0 79.01859,72.11998,0 79.09193000000001,72.10165000000001,0 79.09444000000001,72.07055,0 79.38275000000002,72.06219,0 79.42276,72.03554,0 79.69692000000001,72.05915,0 79.86720000000001,72.02249000000001,0 79.91002,71.98448000000001,0 80.23093,71.94193,0 80.24838,71.91006,0 80.34878999999999,71.88601,0 80.2719,71.87848,0 80.27464000000001,71.85148,0 80.17328999999999,71.86931,0 80.03504,71.83147,0 80.12739999999999,71.7749,0 80.06631,71.76943,0 80.13540999999999,71.67453,0 79.86972,71.60027,0 79.38026000000001,71.61637,0 79.33138,71.59775999999999,0 79.39082000000001,71.54387,0 79.3586,71.49413,0 79.14027,71.42165,0 79.1747,71.34609,0 79.22915999999999,71.3175,0 79.50832,71.29331999999999,0 79.96638,71.13109,0 80.55004,71.05757,0 80.56647,70.85477,0 80.69016000000001,70.80186000000001,0 80.59229000000001,70.71675000000001,0 80.75629000000001,70.66586,0 80.72072,70.5945,0 80.6601,70.57407000000001,0 80.66569,70.51388,0 80.60648999999999,70.50095,0 80.67014000000002,70.44623,0 80.79858,70.44119000000001,0 80.79106,70.41504999999999,0 80.72770000000001,70.41077,0 80.76217,70.39443,0 80.70740000000001,70.39100999999999,0 80.69155000000001,70.42319999999999,0 80.62567,70.42167000000001,0 80.57176,70.46187999999999,0 80.17683,70.43655,0 80.18601000000001,70.39182,0 80.08208999999999,70.39373000000001,0 80.11404,70.36096000000001,0 79.85748,70.27222000000002,0 79.7247,70.28415000000001,0 79.70360000000001,70.26999000000001,0 79.73831,70.24887,0 79.70889,70.23859,0 79.62943,70.22109,0 79.49887,70.11053,0 79.32805000000001,70.14888000000001,0 79.34943,70.04498,0 79.19443,70.05165,0 79.17859,70.03498,0 79.21860000000001,70.01166000000001,0 79.11971,70.00664999999999,0 79.18747999999999,69.96416000000002,0 78.96582000000001,69.88026000000002,0 78.87527,69.88164999999999,0 79.01888,69.83499999999999,0 78.97582000000001,69.81165,0 79.06331,69.78664000000001,0 79.06638,69.74721,0 79.13970999999999,69.74303999999999,0 79.00417,69.69693,0 79.50583,69.65358999999999,0 79.49165000000001,69.63638,0 79.5372,69.63081,0 79.50082,69.60471,0 79.59583000000001,69.58832,0 79.63916999999999,69.48582,0 79.74082,69.44832,0 79.71388,69.43248,0 79.82805000000001,69.42249,0 79.82278,69.39444,0 79.8772,69.37276,0 79.85914000000001,69.34610000000001,0 80.14597999999999,69.36324999999999,0 80.76669000000001,69.30504000000001,0 80.79311,69.26394999999999,0 80.95596000000001,69.20667,0 81.33582,69.28803000000001,0 81.44414,69.25443000000001,0 81.58249000000001,69.27582,0 81.64028,69.31135999999999,0 81.61387000000002,69.32833000000001,0 81.62302,69.41526,0 81.67249,69.44832,0 81.7811,69.43137,0 81.93611,69.34665,0 81.75972000000002,69.25249000000001,0 81.81331,69.20055000000001,0 82.46388,69.16054,0 82.46138999999999,69.12442,0 82.50472000000002,69.10831,0 82.31638,69.05387,0 82.49721,68.98775999999999,0 82.5522,68.81833,0 82.78288000000001,68.79881,0 82.80164000000001,68.74082,0 83.04276,68.66776,0 82.9011,68.62527,0 82.69302999999999,68.63275,0 82.58999,68.60276,0 82.55859000000001,68.61111,0 82.54915,68.61443,0 82.45610000000001,68.57832999999999,0 82.68053999999999,68.49137,0 82.71249,68.40443000000001,0 82.68443000000001,68.34636999999999,0 82.70663999999999,68.29331999999999,0 82.57361,68.25583,0 82.52332000000001,68.20694,0 82.54359,68.17276,0 82.39276,68.17747,0 82.35693000000001,68.09583000000001,0 82.39610999999999,68.05914,0 82.37442,67.94914,0 81.98888,67.96332,0 81.8772,67.93165999999999,0 81.76194,67.95247999999999,0 81.72443000000001,67.92415,0 81.90304999999999,67.77778000000001,0 82.10554999999999,67.72887,0 82.08055,67.68858,0 82.11913,67.68747999999999,0 82.04109,67.65665,0 82.11416,67.59943,0 82.39664999999999,67.53498999999999,0 82.35138000000001,67.50109999999999,0 82.38054,67.47971,0 82.32971000000001,67.48109,0 82.2336,67.42081,0 82.33778,67.3608,0 82.2811,67.34887000000001,0 82.3647,67.33055,0 82.21833,67.31137,0 82.25915999999999,67.27998,0 82.18165999999999,67.28803000000001,0 82.19721,67.25943,0 82.11942999999999,67.23888000000001,0 83.04109,66.89221000000002,0 83.06192,66.88081,0 83.02748,66.85971000000001,0 83.17249,66.80914,0 83.1836,66.74748,0 83.30582,66.66165,0 83.08666,66.61053,0 83.08693,66.46972,0 83.12469,66.42165,0 83.34415,66.34193000000001,0 83.53970000000001,66.19525,0 83.37109,66.13666000000001,0 83.28943,66.06693,0 83.37276000000001,65.9836,0 83.52804999999999,65.90443000000001,0 83.50637,65.82944000000001,0 83.59108999999999,65.7736,0 84.01111,65.79832,0 84.17665,65.7,0 84.32249,65.67609,0 84.31914999999999,65.66943000000001,0 84.29276000000002,65.6122,0 84.19054,65.59444000000001,0 84.45028000000001,65.54554,0 84.55464000000001,65.43516,0 84.50194000000001,65.39664999999999,0 84.58832,65.31303,0 84.52443,65.21278,0 84.40999000000001,65.19082,0 84.3111,65.09860000000001,0 84.31386999999999,65.05721,0 84.38108,65.03276,0 84.39665000000001,64.99387,0 84.27804999999999,64.94054,0 84.29137,64.9011,0 84.90665,64.93026999999999,0 84.97748,64.88666000000001,0 84.93222,64.82639,0 85.09444000000001,64.81219,0 85.14694,64.75166,0 85.54694000000001,64.83028,0 85.86081,64.75526000000001,0 85.80859,64.64749000000001,0 85.91804000000001,64.5836,0 85.84526,64.50749,0 85.84081999999999,64.45889,0 85.92359999999999,64.41721,0 85.94970000000002,64.32832999999999,0 86.0311,64.27528,0 85.93248000000001,64.12776,0 85.96776,64.09775999999999,0 85.95804,64.05443,0 85.51639,63.93000000000001,0 85.36693,63.81333,0 85.33998,63.70693000000001,0 85.26721000000001,63.64638000000001,0 85.17693,63.59137,0 85.08998,63.60860000000002,0 85.03203000000001,63.58649000000001,0 85.08194,63.53638000000001,0 85.21193,63.50306000000001,0 85.2961,63.51583,0 85.37415,63.46220000000002,0 85.38970000000002,63.42333000000001,0 85.35276,63.40276999999999,0 85.40776,63.35,0 85.55942,63.37499,0 85.67387000000001,63.35443999999999,0 85.53665,63.26083,0 85.47832,63.17054,0 85.46638,63.13805,0 85.58716000000001,63.06996,0 85.49332,62.99027000000001,0 85.52083,62.93277,0 85.4511,62.88277,0 85.33249000000001,62.87331,0 85.2372,62.81444000000001,0 85.07777,62.67138000000001,0 85.09860000000001,62.6386,0 84.94803000000002,62.59137000000001,0 84.89055000000001,62.54220999999999,0 84.91387,62.49944000000001,0 84.85915,62.44778,0 84.72638000000001,62.40694,0 84.43692,62.18915,0 84.55441999999999,61.99694,0 84.51666,61.93915,0 84.55749,61.89472000000001,0 84.63388999999999,61.87971000000001,0 84.68749,61.8061,0 85.00805,61.78416,0 85.24832000000001,61.68526000000001,0 85.38582000000001,61.70167,0 85.46777,61.62860000000001,0 85.72275999999999,61.57361,0 85.85193,61.59777,0 85.96915,61.54305,0 85.96639,61.46915,0 85.75249,61.43999,0 85.64360000000001,61.38805,0 85.71054,61.29749,0 84.61415,61,0 84.25964000000001,60.85542,0 83.99387,60.82472,0 83.50944,61.04916,0 83.14499000000001,61.03277000000001,0 82.38247,60.71278,0 82.39027,60.61028,0 82.16665,60.51832,0 81.86165,60.65055,0 81.49776,60.61555,0 81.11116,60.6375,0 81.0555,60.68084,0 81.03823000000001,60.75419,0 80.69771000000002,60.80017,0 80.63061,60.76768000000001,0 80.42100000000001,60.76556999999999,0 80.18398999999999,60.66193,0 79.71581999999999,60.69555,0 79.50249,60.68694,0 79.38666000000001,60.64861,0 79.28360000000001,60.71999000000001,0 79.31833,60.79667000000001,0 79.18553,60.83860000000001,0 78.96915000000001,60.82805,0 78.91110000000001,60.78722000000001,0 78.80721,60.77887,0 78.68941,60.83083,0 78.47527,60.77694,0 78.12025,60.80222000000001,0 77.92137,60.74665,0 77.68941,60.82749,0 77.40804,60.81027,0 77.10498,60.85333000000001,0 77.07805000000001,60.72721,0 76.96776,60.71,0 76.96527,60.64111,0 77.03167000000001,60.63277,0 77.04721000000001,60.60361,0 77.03749000000001,60.535,0 76.77443,60.47665,0 76.74471,60.34249000000001,0 76.8186,60.33028000000002,0 76.85165000000001,60.26806000000001,0 76.68719,60.10777000000001,0 76.75888999999999,60.06081,0 76.74136,59.72943000000001,0 76.64554000000001,59.69332,0 76.64833,59.58027,0 76.45583000000001,59.54445,0 76.16304,59.54361,0 75.99082,59.41972,0 75.89749000000001,59.43721000000001,0 75.83138,59.29639,0 75.61526000000001,59.2411,0 75.69054,59.01194,0 75.38164999999999,58.78804,0 75.15028000000001,58.67805,0 75.17081,58.6186,0 75.10526,58.58111,0 74.89166,58.47776,0 74.87608,58.42722,0 74.79998999999999,58.42694,0 74.62665000000001,58.33915,0 74.62053,58.29361000000001,0 74.45499,58.25861,0 74.20638,58.13361,0 73.08443,58.14916,0 72.93858,58.08749000000001,0 72.96915,58.06055,0 72.87221,58.0061,0 72.12164,58.02304000000001,0 72.07055,58.09415,0 71.98888,58.12471,0 71.23859,58.07111,0 71.24887,58.12194,0 71.21915,58.14695,0 71.24721,58.3561,0 71.30387,58.39749000000001,0 71.11998,58.44887,0 71.07888,58.5286,0 70.87302,58.5425,0 70.43691,57.9336,0 70.37864999999999,57.91712,0 70.44171,57.83843000000001,0 70.42554,57.76639,0 70.48387,57.76777,0 70.49887,57.7075,0 70.57443000000001,57.70916,0 70.57720999999999,57.57861,0 70.66721,57.59276,0 70.69108,57.56666,0 70.68747999999999,57.51445,0 70.42498999999999,57.38916,0 70.51721000000001,57.28695,0 70.65609000000001,57.26416,0 70.60971000000001,57.19916,0 70.69443,57.19305,0 70.78194000000001,57.19916,0 70.75417,57.27749,0 70.81165,57.32804,0 71.10248,57.34083,0 71.09248,57.28999,0 71.14776999999999,57.25139000000001,0 71.09027,57.22055,0 71.23387,57.20027,0 71.37082,57.06360999999999,0 71.61304,56.95693,0 71.65860000000001,56.91470000000001,0 71.67554,56.82638,0 71.58553000000001,56.79445,0 71.54082,56.71915000000001,0 71.39695,56.73305,0 71.39388,56.68472,0 71.34887000000001,56.66916,0 71.16665999999999,56.67138,0 71.05582,56.71028,0 71.03306000000001,56.69221000000001,0 71.11913,56.64555,0 71.09081999999999,56.55555,0 70.95416,56.4911,0 70.85776,56.50305,0 70.75972,56.46111000000001,0 70.78471999999999,56.43665,0 70.86248999999999,56.46389000000001,0 70.94136,56.41167000000001,0 70.93359,56.34694,0 70.76277,56.28667000000001,0 70.77222,56.25471000000001,0 70.84027,56.25695,0 70.81749000000001,56.17333,0 70.91638,56.11055,0 70.80415000000001,55.92028000000001,0 70.47415,55.89166000000001,0 70.47527,55.85222000000001,0 70.59138,55.83611000000001,0 70.75915999999999,55.86332,0 70.78554,55.83306,0 70.58360999999999,55.7961,0 70.54693,55.67499,0 70.7636,55.59778,0 70.69664,55.50638,0 70.54915,55.49138,0 70.48775999999999,55.43859000000001,0 70.46608999999999,55.40499000000001,0 70.50666,55.33777000000001,0 70.46998000000001,55.29667000000001,0 70.39833,55.20917,0 70.28804,55.18721,0 70.23888,55.13888,0 70.05582,55.20776999999999,0 69.94914,55.20416,0 69.84610000000001,55.29500000000001,0 69.67276,55.35443,0 69.35138000000001,55.39443000000001,0 69.23276,55.3325,0 69.18552,55.34388000000001,0 69.16831999999999,55.40054,0 68.95247999999999,55.44471,0 68.9233,55.42416,0 68.93941,55.37028000000001,0 69.00109999999999,55.35361,0 69.00249,55.28749,0 68.93332,55.28611,0 68.87997,55.34276,0 68.73137,55.37055,0 68.70499000000001,55.28667,0 68.63889,55.25555,0 68.62581,55.20192999999999,0 68.30443,55.20527,0 68.19971,55.17833000000001,0 68.24444,55.10471,0 68.33083000000001,55.08056,0 68.25943,55.04888,0 68.20526,54.96609,0 68.03442,54.95027,0 67.9297,54.98332,0 67.83223,54.96332000000001,0 67.76639000000002,54.89194,0 67.58138,54.85443,0 67.32277000000001,54.86749,0 67.24552,54.80665,0 66.80887,54.76666,0 66.72275999999999,54.72694,0 66.49525,54.72304,0 66.10831,54.64500000000002,0 66.11304,54.5425,0 66.15192,54.48555,0 66.1236,54.44500000000001,0 66.16277,54.41945,0 66.15358999999999,54.38055,0 66.21944000000001,54.28055,0 66.11803999999999,54.2375,0 66.20610000000001,54.18333000000001,0 66.27858000000001,54.19028,0 66.35693000000001,54.08444,0 66.21442,54.07694999999999,0 66.00139,53.99471,0 66.03610000000002,53.91805,0 66.07581999999999,53.91526000000001,0 66.06581,53.79277,0 66.16499,53.78111,0 66.18304000000001,53.68249000000001,0 66.11775,53.63082,0 66.11165,53.49276,0 66.25526000000001,53.48555,0 66.26888,53.28277,0 66.26639,53.19388000000001,0 66.41443,53.1686,0 66.40526,53.09972000000001,0 66.20359999999999,53.10443,0 66.08194,53.06277,0 66.07777,52.96305000000001,0 66.41277,52.95222,0 66.40886999999999,52.90331,0 66.14360000000001,52.88610000000001,0 66.13443,52.81998999999999,0 66.05247,52.8186,0 66.02887,52.45304000000001,0 65.58414999999999,52.38972,0 65.58472,52.32777,0 65.46082,52.29639,0 65.04498,52.28027,0 65.05859,52.23165,0 64.75166,52.18166999999999,0 64.74887,52.12832,0 64.80138,52.12444,0 64.80609,52.02555,0 64.925,51.90889,0 65.00888000000001,51.89249,0 65.01666,51.82332,0 64.95775999999999,51.74943,0 65.01138,51.63777,0 64.94247,51.61306,0 64.95444000000001,51.52694,0 64.88415999999999,51.47027,0 65.13164999999999,51.28139000000002,0 65.21608999999999,51.24888000000001,0 65.30359,51.28221,0 65.40694000000001,51.23166,0 65.29498,51.16471,0 65.20583000000001,51.17332,0 64.97776,51.10333,0 64.91415000000001,51.13972,0 64.84972000000001,51.09664999999999,0 64.81944,51.07222000000001,0 64.91553999999999,51.00805,0 64.81386999999999,50.78638,0 64.73027,50.73805,0 64.69275,50.6711,0 64.60415999999999,50.65138000000002,0 64.56219,50.67888,0 64.47248999999999,50.63304999999999,0 64.47837,50.58194000000001,0 64.38943,50.55166,0 64.36461,50.51109,0 64.25,50.54055,0 64.22553000000001,50.51416,0 64.05998,50.57749,0 64.18747999999999,50.7336,0 64.25888000000001,50.75054999999999,0 64.34915000000001,50.87749000000001,0 64.09942,51.03916,0 63.81416,50.93859,0 63.265,50.82638000000002,0 63.20193,50.8772,0 63.13193,50.82222,0 62.93999,50.86555,0 62.86833000000001,50.82110999999999,0 62.78388,50.86056,0 62.42528,50.85695,0 62.19276,50.80443000000001,0 62.23583,50.74138,0 62.18916000000001,50.71000000000001,0 62.25444000000001,50.68249,0 62.38249,50.7225,0 62.50833000000001,50.46805,0 62.69833,50.28305000000001,0 62.71027,50.2122,0 62.86415,50.09777,0 62.94083000000001,49.99138,0 62.90444,49.89415000000001,0 62.73861,49.94778,0 62.57667000000001,49.85277,0 62.59694,49.77999000000001,0 62.45444,49.67888,0 62.48417,49.54805000000001,0 62.37360000000001,49.56833,0 62.30305,49.48638,0 62.35027,49.46944000000001,0 62.54499000000001,49.25111,0 62.35665000000001,49.25944,0 62.33611,49.19971,0 62.46249,49.17638000000001,0 62.56527,49.01082,0 62.84722,48.84332000000001,0 62.97610000000001,48.91194,0 63.10055000000001,48.86055,0 63.05693,48.72249,0 63.09416,48.67943000000001,0 63.41499000000001,48.59249,0 63.47083,48.53583,0 63.76111,48.45082,0 63.91554,48.23388,0 64.01220000000001,48.15694,0 64.13443,47.98499,0 64.28915000000001,47.88832,0 64.01609999999999,47.72165,0 63.19526000000001,47.34083,0 63.14249,47.285,0 62.85190999999999,47.13889,0 62.69305000000001,47.04257,0 63.08611,47.08972,0 63.41805000000001,46.92028000000001,0 64.38889,46.69665000000001,0 64.97026,46.47276,0 65.11913,46.48082000000002,0 65.27638,46.36306,0 65.62943,46.18166000000001,0 66.53555,46.14277,0 67.12168,46.16551,0 67.15776,46.12944000000001,0 67.16988000000001,45.99897000000001,0 67.18192999999999,45.9411,0 67.31441,45.84720999999999,0 67.35831,45.7711,0 67.25333000000001,45.58389,0 67.24942,45.45778000000001,0 67.17833,45.29341,0 67.36275999999999,45.17916,0 67.50499000000001,45.16194,0 67.50360000000001,44.40028,0 67.47887,44.36361,0 67.79832,44.26417,0 67.765,44.23277,0 67.82887000000001,44.15971,0 68.03525999999999,44.06888000000001,0 68.08277,44.00528,0 67.96387000000001,43.94972,0 67.94193,43.90527,0 67.99026000000001,43.80555,0 67.97387000000001,43.69555,0 67.84666,43.74749,0 67.84221000000001,43.58804,0 67.66199,43.37128,0 67.6797,43.30249000000001,0 67.72026,43.37276,0 67.75694,43.36055,0 67.72638000000001,43.35305000000001,0 67.74274,43.33693,0 67.7961,43.33749,0 67.8111,43.30249000000001,0 67.77831000000001,43.27805,0 67.82971000000001,43.24944,0 67.01609999999999,42.8661,0 66.21886000000001,42.42361,0 66.07079,42.42387,0 66.03665,42.42332,0 66.02916999999999,42.00305000000001,0 66.52638000000002,42.00305000000001,0 66.56247999999999,41.71693,0 66.71998000000001,41.17499,0 66.75949000000001,41.16484000000001,0 66.75305,41.11693,0 66.60804,41.11333000000001,0 66.63247,40.93888,0 66.7664,40.88750000000001,0 66.80525,40.76611,0 66.62003,40.49509,0 66.88831999999999,40.47833,0 66.90860000000001,40.24804,0 66.97998,40.17389,0 66.93471,40.125,0 66.9422,40.06333,0 67.03471999999999,40.06888,0 67.02361000000001,40.03277,0 67.10554999999999,39.98611,0 67.47971,39.93194,0 67.50444,39.81554,0 67.38136,39.78055,0 67.37109,39.68777,0 67.29248,39.66555,0 67.29803,39.58611,0 67.44196,39.48359,0 67.41054,39.29916,0 67.36609,39.29361,0 67.37636999999999,39.21249,0 67.69026,39.13805,0 67.70943,38.99666000000001,0 68.12387,38.98554,0 68.19637,38.85444,0 68.15498,38.8086,0 68.08305,38.79445,0 68.10081,38.73916,0 68.05775,38.69694,0 68.07193,38.54138,0 68.1272,38.42444,0 68.21554999999999,38.33221,0 68.33138,38.27333,0 68.38415000000001,38.19555,0 68.27748,37.95889,0 68.15054000000001,37.92805,0 68.07305,37.76528,0 67.83832,37.50583,0 67.81749000000002,37.4461,0 67.83804000000001,37.26194,0 67.77988000000001,37.18582,0 67.75526000000001,37.22054,0 67.64333000000001,37.24722,0 67.55748,37.21555,0 67.49249,37.28083,0 67.39722,37.21749,0 67.23997,37.1861,0 67.18637,37.25805,0 67.11749,37.28028,0 67.09648,37.33997,0 67.00417,37.38221,0 66.67221000000001,37.33833,0 66.53773,37.36638,0 66.44748,37.31860000000001,0 66.40833000000001,37.3461,0 66.28999,37.32472,0 66.09054999999999,37.43167,0 65.84526,37.50444,0 65.78167999999999,37.5715,0 65.77193,37.53749,0 65.68109,37.51694,0 65.64444,37.44887,0 65.65082,37.35555000000001,0 65.55443,37.25638,0 65.07277000000001,37.24444,0 64.82304000000001,37.1386,0 64.77916999999999,37.09583,0 64.79526,36.92305,0 64.61693,36.63638,0 64.61526000000001,36.42361,0 64.47387000000001,36.25555,0 64.33665000000001,36.22471,0 64.28248000000001,36.15193,0 64.18137,36.17054,0 64.09498000000001,36.12332,0 64.05971,36.08805,0 64.06386999999999,36.00027,0 63.92055,36.0375,0 63.77832999999999,35.98054000000001,0 63.60111000000001,35.96443,0 63.52833,35.90499,0 63.34249000000001,35.85722000000001,0 63.11944,35.86193,0 63.12972000000001,35.77527,0 63.24002000000002,35.69928,0 63.09528,35.62609,0 63.12666,35.53361,0 63.10527,35.45083,0 62.92249000000001,35.38417,0 62.72220999999999,35.25472,0 62.55444000000001,35.2336,0 62.46500000000001,35.28861,0 62.30915000000002,35.14166,0 62.26944000000001,35.28583,0 62.13256,35.36806,0 61.99583,35.45832,0 61.80249,35.4111,0 61.59583000000001,35.44415,0 61.40610000000002,35.56388,0 61.37888,35.63527,0 61.27655000000001,35.60725,0 61.22887,35.67805,0 61.26222,35.81972,0 61.22582,35.90388,0 61.12428,35.97565,0 61.16999,35.99527,0 61.16471,36.03527,0 61.22916,36.12666,0 61.18444,36.28667,0 61.15028,36.31499,0 61.18999,36.56777,0 61.1572,36.64999,0 60.33306000000001,36.6561,0 60.27840000000001,36.76272,0 60.02944,37.03695,0 59.91471000000001,37.0586,0 59.81305,37.12471000000001,0 59.67054000000001,37.15611,0 59.62027000000001,37.13194,0 59.56693,37.20888,0 59.47693,37.21889000000001,0 59.49139,37.24833,0 59.39305000000001,37.32306,0 59.38082,37.48555,0 59.33888,37.53916000000001,0 59.25,37.51333,0 59.06027,37.62999,0 58.82278,37.70361,0 58.80444,37.66693,0 58.71277000000001,37.64861,0 58.5625,37.7086,0 58.49805,37.64777,0 58.38915999999999,37.63611,0 58.22748,37.68111,0 58.20304000000001,37.78334000000001,0 58.17443,37.79639,0 58.04694000000001,37.80944,0 57.70805,37.92665,0 57.45028000000001,37.93916,0 57.35306,37.98944,0 57.3711,38.09305,0 57.28833,38.17055,0 57.24388,38.27082,0 57.20471,38.28334,0 57.18888,38.28334,0 57.14979,38.26009,0 57.05861,38.1936,0 56.84583,38.23166000000001,0 56.75574000000001,38.28626,0 56.61388,38.24055,0 56.44276,38.25999,0 56.32249000000001,38.18526,0 56.35277,38.13889,0 56.33305000000001,38.08554,0 56.22305,38.07028,0 56.16444,38.09499,0 55.98276000000001,38.07249,0 55.7561,38.12526,0 55.44276000000001,38.08611,0 55.21027,37.96221,0 55.14083,37.9561,0 54.95471000000001,37.80499,0 54.83306000000001,37.74639,0 54.78221000000001,37.64804,0 54.80972000000001,37.57944,0 54.78694,37.51915000000001,0 54.68111,37.4436,0 54.55165,37.4461,0 54.23165000000001,37.32722,0 53.90564,37.35085,0 54.01583000000001,37.02193000000001,0 53.98833,36.9822,0 54.03166,36.94833,0 54.0286,36.82471,0 53.94332,36.8,0 53.68194,36.81722,0 53.63388000000001,36.84804,0 53.66137000000001,36.85777,0 53.6075,36.86833000000001,0 53.98499,36.89861000000001,0 54.00860999999999,36.94833,0 53.92276,36.90972,0 53.22305,36.84833,0 51.97276000000002,36.57999,0 51.10111,36.72887,0 50.35167000000001,37.1211,0 50.19137000000001,37.38917,0 49.94166,37.44471,0 49.96888,37.45387,0 49.92499,37.47971,0 49.83443,37.4511,0 49.41999,37.49332,0 49.10248,37.64304,0 48.99776,37.76361,0 48.94166,37.90749,0 48.86942,38.30054,0 48.88828000000001,38.44241,0 48.86665,38.74583,0 48.82999,38.85942,0 48.89083,38.88082,0 48.93304,38.95138,0 48.95554,39.16526,0 49.03832000000001,39.18221,0 49.06722000000001,39.10777,0 49.14471,39.09748,0 49.12694,39.02998,0 49.05165,39.00139,0 49.06027000000001,38.96693,0 49.12804,38.97331,0 49.20194,39.02471,0 49.25805,39.31944,0 49.31304,39.34138,0 49.40805,39.28776,0 49.36388000000002,39.34499,0 49.40331,39.31805,0 49.41361,39.38388,0 49.28082000000001,39.50055,0 49.31889000000001,39.62498,0 49.42416999999999,39.70638000000001,0 49.39332,39.77832,0 49.44442000000001,39.8686,0 49.42110000000001,39.93081,0 49.48304,39.98943000000001,0 49.42499999999999,40.05388,0 49.49582,40.09055,0 49.48805000000001,40.15054,0 49.57167,40.21277,0 49.82472,40.28499,0 49.87804000000001,40.36276,0 49.98054,40.31998000000001,0 50.12417,40.35833000000001,0 50.2625,40.32916,0 50.39325,40.22689,0 50.63309,40.29893,0 50.62228,40.32742,0 50.36295000000001,40.47673000000001,0 50.23536,40.4908,0 50.125,40.51138,0 50.05525999999999,40.58444,0 49.80499,40.56471,0 49.52805,40.66277,0 49.50805,40.69305,0 49.53249000000001,40.78749,0 49.39804000000001,40.84971,0 49.22221,41.01833,0 49.15498000000001,41.15165,0 49.14055,41.26833000000001,0 49.03998,41.41415,0 48.89944,41.52583,0 48.67777000000001,41.78276,0 48.58395000000001,41.83577,0 48.54472,41.88028,0 48.38665,41.92638,0 48.3036,42.09748,0 48.11776,42.32638,0 47.94498,42.46249,0 47.85942,42.59389,0 47.73832,42.63388,0 47.69694000000001,42.86638,0 47.46221,43.01915,0 47.48333000000002,43.20777,0 47.58833000000001,43.29695,0 47.57249000000001,43.33054,0 47.48832,43.29361000000001,0 47.48721,43.45638,0 47.58498,43.72221,0 47.69832000000001,43.86887000000001,0 47.80731,43.98692,0 47.5322,44.50008,0 47.47952,44.4864,0 47.20554,44.21859,0 47.1586,44.20054,0 47.09248,44.24027,0 47.01222,44.36083,0 46.76027,44.39192,0 46.7,44.44276,0 46.67971,44.52304,0 46.72444,44.54472,0 46.71249,44.64777,0 46.95943,44.76389,0 47.00944,44.82111,0 46.99165,44.92192000000001,0 47.07555,44.78277,0 47.11666,44.86221,0 47.09722000000001,44.94971,0 47.14861,44.92694,0 47.19915000000001,44.96859,0 47.29193,45.18082,0 47.3761,45.18193000000001,0 47.38554000000001,45.29527,0 47.46277000000001,45.38081,0 47.37803,45.41137000000001,0 47.48611,45.41860000000001,0 47.50166,45.47998,0 47.54332,45.50527000000001,0 47.48619,45.57145,0 47.53247000000001,45.53033,0 47.81656,45.43218000000001,0 47.99829,45.51992000000001,0 48.015,45.69538,0 48.0714,45.71836,0 48.20509,45.7121,0 48.36385000000001,45.64942000000001,0 48.74612,45.69747000000001,0 48.72941,45.804,0 48.79208,45.82907,0 48.87982,45.94397000000001,0 48.99471,46.00246,0 49.05737,45.98365,0 49.18897,46.05259,0 49.3143,46.2573,0 49.22253,46.34631,0 48.91813000000001,46.48922,0 48.83388,46.48499000000001,0 48.74027000000001,46.55832,0 48.56054,46.56499,0 48.58400000000001,46.59843000000002,0 48.55415,46.64389,0 48.4762,46.66768,0 48.52166,46.74305,0 48.60333,46.77332000000001,0 48.71054,46.75972,0 48.76527,46.69082,0 48.94137,46.70416,0 49.02720999999999,46.77610000000001,0 48.7211,47.09833,0 48.54721000000001,47.41721,0 48.44388000000001,47.43693,0 48.20442000000001,47.70499000000001,0 48.06471000000001,47.77971,0 47.69137,47.76583,0 47.43581,47.84361000000001,0 47.38333,47.68888000000001,0 47.13665000000001,47.82249000000001,0 47.18277,47.87417,0 47.06248000000001,47.99609,0 47.21499000000001,48.07083,0 47.12221,48.10222,0 47.13832000000001,48.16999,0 47.09638000000001,48.21000000000001,0 47.13332000000001,48.24249,0 47.12277,48.27166,0 46.49916000000002,48.4175,0 46.77888000000001,48.93665,0 46.95444,49.01305,0 47.06275999999999,49.14277,0 47.02610000000001,49.23610999999999,0 46.79582,49.33972,0 46.92944,49.86361000000001,0 47.18833,49.94415000000001,0 47.30249,50.03194000000001,0 47.35666,50.09027,0 47.28054,50.18221,0 47.34276,50.24193,0 47.31666,50.29445000000001,0 47.4161,50.33193,0 47.4464,50.37695,0 47.59972,50.46083000000001,0 47.76082000000001,50.37527,0 48.11054000000001,50.0986,0 48.16554000000001,49.9661,0 48.24888000000001,49.90888000000001,0 48.25166000000001,49.86971,0 48.33221,49.87887000000001,0 48.45082,49.81693000000001,0 48.79695,49.94194,0 48.91693000000001,50.03417,0 48.87972000000001,50.10167000000001,0 48.79111,50.1236,0 48.81110000000001,50.19415000000001,0 48.72276000000001,50.35305000000002,0 48.69749,50.59194000000001,0 48.59555,50.62249000000001,0 48.59361,50.64833000000001,0 48.83027,50.59665,0 49.03083,50.68804999999999,0 49.15833,50.79278000000002,0 49.42583000000001,50.85139000000001,0 49.44083,50.90583000000002,0 49.36443,50.97971,0 49.46194,51.12416,0 49.80416,51.11027,0 49.96804,51.2261,0 50.36332,51.31694000000001,0 50.35443,51.37805000000001,0 50.39721999999999,51.39972,0 50.38472,51.42527000000001,0 50.54888,51.46861,0 50.54361,51.56722000000001,0 50.59471,51.58972,0 50.60277,51.63999,0 50.71749,51.62249,0 50.68277000000001,51.57306000000001,0 50.81054000000001,51.59166,0 50.81361,51.64805,0 50.75861,51.71970000000001,0 50.7733,51.76918,0 51.41249000000001,52.08971,0 51.45750000000001,52.22776,0 51.40805,52.25416,0 51.40694,52.34917,0 51.47166,52.36583000000001,0 51.46388,52.41360000000001,0 51.56361,52.43582,0 51.47083,52.52722,0 51.47360000000001,52.57972,0 51.55054,52.57417,0 51.50667000000001,52.63276000000001,0 51.53416,52.67416,0 51.73360000000001,52.6675,0 51.77944,52.79583000000001,0 51.71555,52.82277,0 51.72805,52.87194,0 51.82417000000001,52.87388,0 51.86694000000001,52.92943,0 52.05389,52.99055,0 52.06249,53.07833,0 52.15972,53.09665,0 52.05471,53.14249000000001,0 52.13417,53.17499,0 52.1236,53.22388,0 52.16388000000001,53.26167,0 52.13916,53.29166,0 52.19665000000001,53.37944,0 52.13803999999999,53.40305000000002,0 52.13499,53.44915,0 52.07527,53.50639,0 52.09167,53.55027,0 52.1836,53.55694,0 52.25804,53.65526,0 52.41415,53.93027000000001,0 52.37054,53.9761,0 52.4875,54.05777000000001,0 52.39804000000001,54.1286,0 52.27194,54.11388000000001,0 52.25833,54.14999,0 52.34388000000001,54.17194,0 52.34610000000001,54.22665000000001,0 52.19444,54.29721000000001,0 52.27943,54.32833000000002,0 52.51166,54.32194,0 52.53745,54.37707,0 52.62194,54.3411,0 52.68775999999999,54.36111,0 52.92304,54.31388,0 52.93249,54.28804000000001,0 52.88166,54.27777,0 52.92916,54.26805,0 53.01361,54.26805,0 53.02944000000001,54.28944,0 53.0014,54.31249,0 53.04749,54.34167000000002,0 53.11582,54.24944000000001,0 52.93694,54.2136,0 53.03361000000001,54.12749000000001,0 53.09137,54.12054,0 53.06054,54.06999,0 53.19444,54.09832,0 53.27221999999999,54.06999,0 53.285,54.02750000000001,0 53.37194,53.96749,0 53.41082,54.02694,0 53.47020000000001,54.0452,0 53.41305,54.22222,0 53.43444,54.26915,0 53.36138,54.32888,0 53.34444,54.38694000000001,0 53.42194,54.48666000000001,0 53.41055,54.55750000000001,0 53.6086,54.71138,0 53.57888,54.74888,0 53.60777,54.81249,0 53.57695,54.81499,0 53.64249000000002,54.90139,0 53.51412,54.88120000000001,0 53.40639000000001,54.99722,0 53.26694000000001,55.01028000000001,0 53.26834,55.05331,0 53.14138000000001,55.09389,0 53.13888000000001,55.14388,0 53.33443,55.16249000000001,0 53.33805000000001,55.19499,0 53.39944000000001,55.22110000000001,0 53.58611000000001,55.20776999999999,0 53.59999,55.26027,0 53.70916,55.3336,0 53.89833000000002,55.38166,0 53.93333000000001,55.4586,0 53.99694,55.50027,0 53.99638000000001,55.54972000000002,0 54.17833,55.62276000000001,0 54.24194000000001,55.69137000000001,0 54.09528000000001,55.77592,0 54.0261,55.75666,0 54.03820000000001,55.80095000000001,0 53.97027,55.78249000000002,0 53.99722,55.85082,0 53.63842,55.91552,0 53.67193,55.95999,0 53.78472,55.96915,0 53.83795000000001,56.04377,0 54.02443,56.02944000000001,0 54.10722,56.14749,0 54.35889,56.26222000000001,0 54.37526,56.30498999999999,0 54.31527,56.34138,0 54.35241,56.35857,0 54.32472000000001,56.46249,0 54.23611,56.43581,0 54.18472000000001,56.53722,0 54.12194,56.53361000000001,0 54.09083,56.58250000000001,0 54.02664999999999,56.58416,0 54.10083,56.66276000000001,0 54.0286,56.69276,0 53.96388,56.63110000000001,0 53.87,56.6075,0 53.83554,56.63556,0 53.88081,56.67222,0 53.80637999999999,56.77332,0 53.82832,56.81193,0 53.88943,56.80444,0 53.88999,56.76445,0 54.01056,56.74916,0 54.09177,56.79174,0 54.09805,56.96249,0 54.40269,57.03656000000002,0 54.37444000000001,57.07389000000001,0 54.27555,57.10082000000001,0 54.33472,57.15554000000001,0 54.32000000000001,57.28666000000001,0 54.11639,57.31027000000001,0 54.14443,57.38693,0 54.27166,57.42222,0 54.26472,57.46443000000001,0 54.17860000000001,57.465,0 54.16582,57.51222,0 54.20361,57.53083,0 54.16999000000001,57.55972000000001,0 54.11888,57.55944000000001,0 54.10139,57.51805,0 53.98749000000001,57.57111,0 54.12111,57.61193,0 54.06916,57.66666000000001,0 54.15665000000001,57.70249,0 54.13639000000001,57.83222,0 54.08749,57.91331,0 54.10722,57.97276,0 53.94276,58.09527000000001,0 53.89415,58.18804,0 53.80972,58.22887,0 53.88916,58.32222,0 53.79027,58.39249000000001,0 53.78463,58.43996000000001,0 53.69610000000001,58.60333000000001,0 53.75721999999999,58.6525,0 53.74027,58.67972,0 53.77055,58.71638000000002,0 53.92833,58.78166000000001,0 53.80721000000001,58.82777000000001,0 53.71915,58.93748999999999,0 53.76500000000001,59.02277000000002,0 53.84470000000001,59.03054,0 53.83500000000001,59.05832000000001,0 53.88416000000001,59.09054,0 53.75417,59.14111000000001,0 53.68916000000001,59.12332000000001,0 53.7236,59.09194000000002,0 53.38555,59.15554,0 53.24415000000001,59.27583,0 53.2047,59.34944,0 53.3661,59.51832,0 53.42054,59.68971,0 53.60278000000001,59.70055000000001,0 53.71194,60.00332,0 53.59887000000001,60.15666,0 53.41137000000001,60.22443000000001,0 53.38611,60.16555,0 53.01083,60.15915,0 52.42722000000001,60.20304,0 52.29815,60.24171,0 52.34777,60.37330999999999,0 52.34304000000001,60.44638,0 52.12499,60.47027000000001,0 52.15471000000001,60.54555000000001,0 51.77333,60.59693999999999,0 51.88777,60.87666,0 52.34333,60.835,0 52.42917000000001,60.98137,0 52.79499,60.94433,0 52.87666,61.09388000000001,0 53.38499000000001,61.03389,0 53.33944000000001,60.89388,0 53.57389,60.86500000000001,0 53.80915000000001,60.84777,0 53.86555,60.98749,0 54.97971,60.86388,0 55.06107,61.01941,0 55.19747,61.0041,0 55.27921000000001,61.12959000000002,0 55.72323,61.08145,0 55.82858,61.25057,0 56.29028000000001,61.20304000000001,0 56.34805,61.29388,0 56.31638000000001,61.32527,0 56.3886,61.43943000000001,0 56.54527,61.42888,0 56.60083,61.50249,0 56.67556,61.52777,0 57.09666,61.48525999999999,0 57.18,61.51194,0 58.80972,61.50556,0 58.94054000000001,61.55972,0 59.01082000000001,61.54472,0 59.14333000000001,61.63305,0 59.34887000000001,61.68221000000001,0 59.39694999999999,61.76110000000001,0 59.33915,61.80222,0 59.34137000000001,61.85695000000001,0 59.48555,61.98805,0 59.40444,62.14222000000001,0 59.51527,62.31721000000002,0 59.60028,62.36694,0 59.58472,62.41499,0 59.60889,62.45333000000001,0 59.65055,62.51721,0 59.50972000000001,62.54722,0 59.39138,62.72971,0 59.46083000000002,62.77917000000002,0 59.48721000000001,62.89778,0 59.42471000000001,62.94415,0 59.27665,62.96666,0 59.22221,63.07388,0 59.30277,63.12638,0 59.25889,63.2011,0 59.3386,63.28999000000001,0 59.28249,63.33278,0 59.35222,63.36306,0 59.31722000000001,63.39888000000001,0 59.47776000000001,63.56805,0 59.51389,63.77999000000001,0 59.57249000000002,63.83666,0 59.56583000000001,63.91915,0 59.77055,63.99942999999999,0 59.85972,64.1375,0 59.73388000000001,64.15331999999999,0 59.58805,64.23248,0 59.57943,64.27943000000001,0 59.6361,64.33749,0 59.60470999999999,64.46026999999999,0 59.47970999999999,64.48193000000001,0 59.61361,64.62276,0 59.70249,64.65166000000001,0 59.63805000000001,64.72387000000001,0 59.65416,64.78333000000001,0 60.15804000000001,65.06721,0 60.42749,65.05193,0 60.42972000000001,65.00082,0 60.59638,64.94193,0 60.63138,64.88361,0 60.81194,65.04859999999999,0 60.96277000000001,65.04165999999999,0 61.11166,65.17221000000001,0 61.23944,65.18552,0 61.3336,65.28888000000001,0 61.24917,65.31887999999999,0 61.41555000000002,65.39639,0 61.58222000000001,65.55165,0 61.68694,65.57388,0 61.87027000000001,65.70222,0 62.11306,65.72083000000001,0 62.68193999999999,65.86304,0 62.69388,65.86331,0 62.73193000000001,65.85776,0 62.86111,65.87804,0 62.79777000000001,65.93109,0 62.88833000000002,65.97998,0 62.81750000000001,66.01194,0 62.86166000000001,66.07720999999999,0 62.95917000000002,66.1097,0 63.04694000000001,66.2247,0 63.15388,66.26749,0 63.29056,66.23276,0 63.30416000000001,66.2747,0 63.22332000000001,66.32638,0 63.40860000000001,66.45277,0 63.40915,66.48109,0 63.53722000000001,66.46026999999999,0 63.65888000000001,66.52582,0 63.81554000000001,66.54721000000001,0 63.98277,66.65358999999999,0 64.31247999999999,66.66443,0 64.41277,66.72387000000001,0 64.53999,66.7272,0 64.5761,66.79915,0 65.10138000000001,66.89055000000001,0 65.10554000000001,67.00805000000001,0 65.07055,67.03942000000001,0 65.22136999999999,67.07693,0 65.18248,67.15082,0 65.65888,67.30609,0 65.71887,67.34054999999999,0 65.67249,67.36609,0 65.69053,67.38665,0 65.96138000000001,67.39525999999999,0 66.10664,67.47859,0 66.0397,67.57693,0 65.79165999999999,67.56971,0 65.86832,67.60664,0 65.81805,67.62608,0 65.84054999999999,67.65192999999999,0 65.99275,67.67915000000002,0 66.10526,67.64554,0 66.21053000000001,67.69609,0 66.18388,67.74832000000002,0 66.01805,67.79305000000001,0 66.05443,67.88083,0 66.09248,67.89027,0 66.08611000000001,67.93442,0 65.91081,67.96332,0 65.78055000000001,67.9233,0 65.43471,67.91804999999999,0 65.28498999999999,68.01194,0 65.33333,68.08638000000001,0 65.26775000000001,68.21998000000001,0 65.48054999999999,68.43053999999999,0 65.60609,68.48499,0 65.61443,68.52554000000001,0 65.66165,68.54694000000001,0 65.52361000000001,68.58414999999999,0 65.37831,68.68053999999999,0 65.42941999999999,68.7,0 65.40498,68.73276,0 65.32639000000002,68.72499000000001,0 65.34860000000001,68.79192000000001,0 65.20220999999999,68.82331000000001,0 65.08055,68.80888,0 64.80415000000001,68.89194000000001,0 64.75499000000001,68.88527000000001,0 64.74582,68.85526,0 64.54998999999999,68.87053000000002,0 64.52139,68.90776,0 64.58389,68.96082,0 64.51749,68.98248,0 64.51999000000001,69.01776,0 64.83257,69.15213,0 64.94275,69.2047,0 64.91499,69.25471,0 65.04832,69.27332,0 65.38193,69.18471,0 65.79581,69.13697000000001,0 66.2572,69.07253,0 66.52336,68.9671,0 66.55627,68.91167,0 67.12005000000001,68.84113000000001,0 67.39063,68.80437000000001,0 67.38152,68.76640999999999,0 67.27820000000001,68.74968,0 67.32339,68.69279,0 67.77222,68.51776,0 67.80582,68.50082,0 67.70610000000001,68.51054000000001,0 67.78306000000001,68.47749,0 68.15942,68.41137000000001,0 68.26054000000001,68.33472,0 68.20081999999999,68.29471,0 68.18526,68.23609999999999,0 68.27025999999999,68.23915,0 68.28333000000001,68.18498,0 68.43637,68.22499000000001,0 68.56415,68.31052,0 68.64999,68.31219,0 68.57165999999999,68.33778,0 68.56303,68.36942000000001,0 68.89776999999999,68.60748,0 69.00888000000001,68.79998999999999,0 69.09526,68.83333,0 69.10831,68.87248,0 68.94386,68.89803000000001,0 69.22026,68.95722000000001,0 69.03248000000001,68.94193,0 69.02164000000001,68.96416000000001,0 68.78498,68.91081,0 68.47331,68.97248999999999,0 68.04749,69.28137,0 68.02139,69.3436,0 68.10942,69.38889,0 68.10165000000001,69.54665,0 68.00721,69.51860000000001,0 68.03804,69.48888,0 67.96748,69.48415,0 67.78610000000001,69.51666,0 67.61304,69.59166999999999,0 67.38528000000001,69.61859,0 67.37054999999999,69.52164999999999,0 67.25494999999999,69.40298,0 67.16154,69.35935000000001,0 66.95407,69.40528000000001,0 66.93801000000001,69.52226,0 66.79192999999999,69.58028,0 66.76721000000001,69.75722,0 66.87331,70.00109999999999,0 66.99387,70.04886999999999,0 67.07941,70.12733,0 67.08862000000001,70.21623,0 67.19971,70.39027,0 67.26666,70.41110000000001,0 67.25194999999999,70.44832,0 67.29221,70.46998000000001,0 67.20889,70.52666000000001,0 67.33971,70.72499000000001,0 67.33249000000001,70.76888,0 67.22887,70.82555000000001,0 67.10720000000001,70.83526999999999,0 66.68886999999999,70.76054000000001,0 66.61275999999999,70.86773,0 66.54228000000001,70.92879000000001,0 66.62154,71.04885,0 66.78388,71.14221000000001,0 66.83665000000001,71.20972,0 66.91553999999999,71.29276,0 67.08581000000001,71.30387,0 67.53675,71.40988,0 67.53675,73.95477,0 72.53674,73.94411,0 77.53673000000001,73.93346,0 82.27669,73.92335,0 81.08696000000001,73.75897999999999,0 79.49023,73.66505000000001,0 78.53532,73.30501,0 78.20658,73.02322,0 78.17527,72.89798,0 78.4727,72.64751,0 78.50015000000001,72.37733,0 78.45471000000001,72.36443,0 78.44637,72.35971000000001,0 78.65913999999999,72.26111,0 78.67804,72.22165,0 78.59721999999999,72.20972,0 + + + 1 + + + + + +68.67328999999999,82.13631,0 67.53675,81.66452,0 67.53675,82.89028,0 67.53675,84.90001,0 67.53675,89.90000000000001,0 68.53611000000001,89.90000000000001,0 69.53547,89.90000000000001,0 70.53484,89.90000000000001,0 71.53419,89.90000000000001,0 72.53355000000001,89.90000000000001,0 73.53292999999999,89.90000000000001,0 74.53227,89.90000000000001,0 75.53164,89.90000000000001,0 76.53100000000001,89.90000000000001,0 77.53036,89.90000000000001,0 78.52972,89.90000000000001,0 79.52907999999999,89.90000000000001,0 80.52843,89.90000000000001,0 81.5278,89.90000000000001,0 82.52717,89.90000000000001,0 82.52717,87.88696,0 77.9092,85.97008,0 73.29124,84.05318,0 68.67328999999999,82.13631,0 + + + 1 + + + + + GMT +05:30 + + +]]> + #khStyle0550 + + + + + +69.14654,7.824959000000001,0 67.51169000000002,7.824905,0 67.51169000000002,12.15223,0 72.51169,12.15223,0 74.14655000000001,12.15223,0 74.14655000000001,7.825121,0 69.14654,7.824959000000001,0 + + + 1 + + + + + +94.5928,5.880672000000001,0 92.9025,5.880672000000001,0 90.34064000000001,5.884479,0 90.33504000000001,10.88448,0 90.33015,15.23029,0 94.58984000000001,15.23029,0 94.59142,10.23029,0 94.5928,5.880672000000001,0 + + + 1 + + + + + +79.43803000000001,35.96054000000001,0 79.46193,35.85804,0 79.58109000000002,35.86971,0 79.65886999999999,35.81916,0 79.63443000000001,35.75916,0 79.69359,35.65083,0 79.81303,35.62943,0 79.85887,35.5661,0 79.91914,35.61749,0 79.96416000000001,35.59583,0 80.05749,35.40777,0 80.14776999999999,35.45722,0 80.20663999999999,35.56193,0 80.2741,35.52753,0 80.29776,35.50333,0 80.38388000000001,35.51111,0 80.38666000000001,35.42528,0 80.28943,35.33999,0 80.29803,35.2075,0 80.19026,35.08764,0 80.20166999999999,34.89388,0 80.10248,34.7747,0 80.07138000000001,34.66945,0 79.8875,34.66276000000001,0 79.84387,34.57444,0 79.7247,34.52999,0 79.7636,34.45499,0 79.72275999999999,34.42054,0 79.53915000000002,34.42999,0 79.57805000000001,34.2086,0 79.51166000000001,34.19027,0 79.5247,34.11805,0 79.42915000000001,34.02166,0 78.97527,34.01721,0 78.90886999999999,33.97028,0 78.94941,33.83221,0 79.01944,33.75444000000001,0 79.04082,33.63943,0 78.91582,33.62944,0 78.93651,33.408,0 78.99638000000002,33.31499,0 79.09137,33.27499,0 79.10359,33.21971,0 79.18387,33.22582,0 79.40637,33.16166,0 79.35609,32.965,0 79.45027,32.88221,0 79.47083000000001,32.79388,0 79.53027,32.75416,0 79.51443,32.67222,0 79.45722000000001,32.60249,0 79.31386999999999,32.49665,0 79.25317000000001,32.516,0 79.13164999999999,32.47499,0 79.09915,32.37638,0 78.97110000000001,32.35082,0 78.78027,32.47887,0 78.76055,32.63556,0 78.70443,32.6311,0 78.6386,32.57778,0 78.42054,32.5661,0 78.39722,32.53111,0 78.4772,32.42471,0 78.44971,32.38694,0 78.47832,32.34999,0 78.47593999999999,32.24305,0 78.54471000000001,32.20943,0 78.68053000000001,32.03527,0 78.7711,31.98111,0 78.74507,31.91036,0 78.69247,31.77417,0 78.74249,31.68499,0 78.79053999999999,31.67472,0 78.84387,31.60417,0 78.71278,31.49833,0 78.79276000000002,31.44333,0 78.77054,31.305,0 78.87766000000001,31.29163,0 78.94193,31.36,0 79.00555,31.32555,0 79.01859,31.41138,0 79.09248,31.4375,0 79.21748,31.34083,0 79.24026000000001,31.24417,0 79.28665,31.22333,0 79.31499,31.13305,0 79.39324000000001,31.10106,0 79.42249,31.0275,0 79.49413,31.02416,0 79.59943,30.93556,0 79.74887,30.98972,0 79.87916,30.95916,0 79.94981,30.8849,0 80.04192000000001,30.84694,0 80.09415,30.78666000000001,0 80.17831,30.79945,0 80.25027,30.73999,0 80.18749,30.67583000000001,0 80.22776,30.62193,0 80.20699999999999,30.57552,0 80.32193,30.56472,0 80.53888000000001,30.46443,0 80.60693000000001,30.47472,0 80.75194999999999,30.395,0 80.80386,30.32666,0 80.99888,30.26194,0 81.02536000000001,30.20436,0 80.93637,30.18138,0 80.89333000000001,30.21111,0 80.8586,30.17472,0 80.87276,30.13888,0 80.74609,30.02138,0 80.59887000000001,29.95527,0 80.53970000000001,29.84611,0 80.37691,29.7486,0 80.40694000000001,29.59638,0 80.23637000000001,29.42527,0 80.27582,29.3225,0 80.30693000000001,29.31055,0 80.28777,29.20556,0 80.23997,29.21472,0 80.25694,29.14472,0 80.14664999999999,29.10833,0 80.1297,28.99305,0 80.05998,28.93166,0 80.05582,28.83611,0 80.24609,28.75082,0 80.35776,28.62944,0 80.44026,28.62888,0 80.50861,28.56693,0 80.50555,28.65833,0 80.57720999999999,28.68556,0 80.58499000000001,28.6536,0 80.66249000000001,28.63277,0 80.79832,28.52389,0 80.89249,28.50638,0 80.93858,28.44111,0 81.00694,28.44305,0 81.01888,28.40416000000001,0 81.19359,28.36667,0 81.31218,28.19333,0 81.31999000000002,28.13,0 81.42192,28.16638,0 81.48027,28.08,0 81.88026000000001,27.85721,0 81.97776000000002,27.91722,0 82.0664,27.91416,0 82.43471,27.67556,0 82.7011,27.71111000000001,0 82.76860000000001,27.50166,0 83.17638,27.44888,0 83.29137,27.33777,0 83.37665,27.37527,0 83.39610000000002,27.47861,0 83.60776,27.46916,0 83.85832000000001,27.35221,0 83.87553,27.38083,0 83.83526999999999,27.43805,0 84.04026,27.44472,0 84.09887000000001,27.51611,0 84.14333000000001,27.52417,0 84.29776,27.38832,0 84.60997999999999,27.33556,0 84.68414,27.21555,0 84.64749000000001,27.04527,0 84.75027,27.0075,0 84.84360000000001,27.01527,0 84.95277,26.95804,0 84.97331,26.90304,0 85.04109,26.88666,0 85.04082,26.84777,0 85.18388,26.86666,0 85.21165000000001,26.76694,0 85.33443,26.73582,0 85.41249000000001,26.79472000000001,0 85.45305000000001,26.78694000000001,0 85.63026000000001,26.8675,0 85.72609,26.80167000000001,0 85.73054999999999,26.66722,0 85.85027,26.57222,0 86.02943000000001,26.66306,0 86.18387,26.60806,0 86.20664000000001,26.58556,0 86.33167,26.61277,0 86.33249000000001,26.58499,0 86.53498999999999,26.52806,0 86.73165,26.41999,0 86.88598,26.46866,0 87.06137,26.58833,0 87.09415,26.45638,0 87.1375,26.40972,0 87.24525,26.41222,0 87.32805999999999,26.34777,0 87.37082,26.40333,0 87.44748,26.43250000000001,0 87.59999000000001,26.37972,0 87.69748,26.42944,0 87.76639,26.40861,0 87.78554,26.45638,0 87.84305000000001,26.43888000000002,0 87.89055999999999,26.47333,0 87.94941,26.40055,0 88.02638,26.36916,0 88.09583000000001,26.43888000000002,0 88.10193,26.53028000000001,0 88.19497,26.75416,0 88.11859,26.98444,0 87.99303999999999,27.11444,0 88.05971,27.32777000000002,0 88.03888000000001,27.37611,0 88.06667000000002,27.43693,0 88.05692999999999,27.53334,0 88.11913,27.60833,0 88.18887000000001,27.78777,0 88.19386,27.8475,0 88.14279999999999,27.86605,0 88.12053,27.90471000000001,0 88.14554,27.95527,0 88.53415,28.02917,0 88.62276,28.11805,0 88.83167,28.01334,0 88.88081,27.83667,0 88.83443,27.66111,0 88.76331999999999,27.54333,0 88.78333000000001,27.43805,0 88.91692000000001,27.32083,0 88.90138000000002,27.28222,0 88.79803,27.24638,0 88.75193,27.14861,0 88.86360999999999,27.09194000000002,0 88.87636999999999,26.95055,0 88.93332000000001,26.98499,0 88.95193000000002,26.92667000000001,0 89.03055000000001,26.92749,0 89.12608,26.82361,0 89.22083000000001,26.81472,0 89.36081,26.86,0 89.46833,26.79944,0 89.53360000000001,26.81221,0 89.63611,26.77111,0 89.61832,26.72694,0 89.64305000000002,26.71527,0 89.68552000000001,26.7336,0 89.84887000000001,26.70167,0 89.85942,26.73666,0 90.1236,26.74805,0 90.17747,26.77306000000002,0 90.21693000000001,26.85082,0 90.38527000000001,26.90333,0 90.55914,26.80722,0 90.6947,26.77222,0 91.03194000000002,26.78278,0 91.09109000000001,26.81639,0 91.31441000000001,26.77806,0 91.3797,26.8075,0 91.4247,26.87556,0 91.49721000000001,26.8725,0 91.54221,26.80445,0 91.71249,26.8,0 91.84360000000001,26.86416,0 91.90498,26.80556,0 91.91526,26.89389,0 91.99721,26.85194,0 92.08150999999999,26.86905,0 92.11193000000002,26.94416,0 92.00999000000002,27.10472,0 92.01776,27.1725,0 92.11443000000001,27.28583,0 92.08916000000001,27.34944,0 91.99887,27.47805,0 91.76833000000002,27.41611,0 91.76555000000002,27.45694,0 91.67359,27.48861,0 91.62082000000001,27.54861,0 91.59498000000001,27.64554,0 91.65277000000002,27.71167,0 91.65776,27.76472,0 92.01443,27.73471,0 92.11832000000003,27.8125,0 92.25388,27.81582,0 92.26804,27.87472,0 92.33110000000001,27.79472,0 92.35831000000003,27.84443,0 92.38666000000002,27.80472,0 92.4147,27.86028,0 92.45248000000001,27.82639,0 92.69942000000002,27.95555,0 92.72838000000002,28.03598,0 92.67525000000001,28.08071,0 92.75290000000001,28.16892,0 92.83004000000001,28.21276,0 92.84125,28.1888,0 92.88734000000001,28.19872000000001,0 92.99153,28.26286,0 93.01044000000003,28.24225,0 93.04571,28.31026,0 93.22205000000001,28.3193,0 93.23817000000001,28.38745,0 93.19270000000002,28.43213,0 93.28152000000002,28.49296,0 93.35194000000001,28.61877000000001,0 93.49408,28.65192,0 93.50206000000001,28.67916,0 93.64729,28.64746,0 93.85851000000001,28.69038,0 93.98059000000001,28.64518,0 93.96173,28.6692,0 94.01243,28.74736,0 94.0211,28.83603,0 94.15246000000002,28.9307,0 94.23455,29.07348,0 94.42776000000002,29.21551,0 94.5812,29.23153,0 94.64751,29.33347,0 94.69736,29.33652,0 94.79227,29.2608,0 94.83335,29.16837,0 95.00915999999999,29.12388,0 94.98471000000001,29.17361,0 95.38777,29.03527,0 95.46053000000001,29.05167,0 95.49609000000001,29.14083000000001,0 95.54665,29.13861,0 95.53442,29.21167,0 95.59108999999999,29.255,0 96.08389,29.46777000000001,0 96.23526000000001,29.25445,0 96.28943,29.24139,0 96.36249000000001,29.29055,0 96.39525999999999,29.25527,0 96.34860000000001,29.18,0 96.25665000000001,29.16444,0 96.11913,29.07916000000001,0 96.18222000000002,28.99527,0 96.14861000000001,28.94333,0 96.16914,28.90361,0 96.34387,29.0325,0 96.51194000000001,29.07,0 96.47581000000001,28.97472,0 96.51027000000001,28.96444,0 96.61582000000001,28.79027,0 96.60609000000001,28.73944,0 96.47083000000001,28.68833,0 96.47832,28.63861,0 96.34526,28.55695,0 96.36638000000001,28.48082000000001,0 96.26471000000001,28.41527,0 96.36165000000001,28.39278,0 96.39694000000002,28.35333,0 96.40192,28.35111,0 96.46053000000001,28.42194,0 96.65387,28.46749,0 96.78415,28.37306,0 96.88970999999999,28.37861,0 96.98471000000001,28.3325,0 97.13499000000002,28.38138,0 97.34887000000002,28.22278,0 97.31608000000001,28.08916,0 97.39413999999999,28.01861,0 97.36775,27.89666,0 97.31721,27.87833,0 97.29916,27.91667,0 97.24942,27.9075,0 97.08389,27.7486,0 97.04665,27.74972,0 96.88889,27.6175,0 96.91804999999999,27.50527,0 96.89999000000002,27.46861000000001,0 97.12636999999999,27.19083,0 97.15888,27.13861,0 97.14444000000002,27.09249,0 97.05974000000001,27.093,0 96.88831999999999,27.17805,0 96.86137000000001,27.21028,0 96.88416000000001,27.25472,0 96.72915999999999,27.36555,0 96.66025999999999,27.33916,0 96.60999,27.36694,0 96.52415000000002,27.29416,0 96.19414999999999,27.27084,0 96.03581,27.19249,0 95.93082,27.04611,0 95.80386,27.00111,0 95.71775000000001,26.89138,0 95.65804000000001,26.89528,0 95.61081,26.82139,0 95.51944,26.82306,0 95.44108,26.70916,0 95.2711,26.64472,0 95.24638,26.67972,0 95.15248000000001,26.62333,0 95.14777000000001,26.56583,0 95.06638,26.47972,0 95.09526,26.41,0 95.06526,26.32556,0 95.08389000000003,26.22277,0 95.12082,26.20166,0 95.11331,26.10916,0 95.17804,26.05889,0 95.08665000000001,25.95556,0 95.02222,25.92861,0 95.03387000000002,25.74222,0 94.99193,25.72916,0 94.88527000000001,25.57222000000001,0 94.66165000000001,25.42804,0 94.62553000000001,25.39777,0 94.57639000000002,25.21444,0 94.59943,25.17833,0 94.72859,25.13638,0 94.73442,25.02472,0 94.59777,24.72528000000001,0 94.53859000000001,24.70888,0 94.51470999999999,24.61945,0 94.38915,24.48,0 94.14444,23.84778,0 93.92666,23.95583,0 93.81914999999999,23.93527,0 93.75332,24.0075,0 93.62136,24.01611000000001,0 93.59636999999999,23.97222,0 93.49359,23.96277,0 93.38293,24.08935,0 93.34207000000001,24.0818,0 93.3279,24.03597,0 93.32805000000001,23.98166,0 93.38443,23.92138,0 93.40138,23.73582,0 93.43346,23.67889,0 93.40331999999999,23.37806,0 93.36609,23.34945,0 93.38666000000001,23.14027000000002,0 93.29359000000001,23.00889000000002,0 93.22915999999999,23.01333,0 93.20138000000002,23.05889,0 93.13805000000004,23.04805,0 93.16137000000001,22.91945,0 93.09822000000001,22.79037,0 93.09722000000001,22.66528,0 93.13638,22.59444,0 93.11859,22.53333,0 93.18055,22.44055,0 93.19664000000002,22.25638,0 93.14249,22.23694,0 93.15387,22.18666,0 93.04414000000001,22.20194,0 93.05276000000001,22.11889,0 93.00972000000003,22.1075,0 92.99638000000003,21.99278,0 92.94304000000001,22.02833,0 92.89639,21.95472,0 92.86554,22.04888,0 92.71192000000002,22.15972,0 92.67970000000001,22.02694,0 92.60081,21.98222000000001,0 92.56218,22.13333,0 92.60609,22.16277,0 92.51639000000002,22.71583,0 92.47054000000001,22.75638,0 92.44386000000002,22.88944,0 92.37469,22.94193,0 92.34860000000001,23.22361,0 92.38697999999999,23.27993,0 92.37358,23.35925,0 92.27831999999999,23.605,0 92.28888000000001,23.69611,0 92.25221000000002,23.7225,0 92.21165000000001,23.65222,0 92.17486000000001,23.73682,0 92.0372,23.64528,0 91.95,23.73222000000001,0 91.96609000000001,23.50166,0 91.93304000000001,23.44444,0 91.84498000000001,23.41027,0 91.78360000000001,23.3125,0 91.76805000000002,23.25,0 91.82055,23.09777,0 91.72499000000001,22.99472,0 91.64722000000002,22.98638,0 91.61360000000001,22.94305,0 91.56359999999999,22.9836,0 91.49332000000001,23.18666,0 91.41665999999999,23.26611,0 91.37746,23.20693,0 91.40221,23.06945,0 91.33554,23.11555,0 91.28859,23.32832,0 91.31469000000001,23.36416,0 91.28221000000002,23.37332,0 91.15942,23.64055000000001,0 91.20028000000004,23.67805,0 91.15915,23.70082,0 91.15860000000002,23.73666,0 91.21638,23.75611,0 91.25054000000002,23.83027,0 91.23776000000001,23.90777,0 91.29832,23.99388,0 91.36110000000001,23.99528,0 91.37329,24.10194,0 91.54633,24.08693,0 91.62746,24.10972,0 91.6572,24.22416,0 91.70385000000002,24.15166,0 91.75525,24.15833,0 91.75775,24.23917000000001,0 91.83192000000001,24.22611,0 91.89249,24.14972,0 91.93248,24.27555,0 91.91776,24.32667,0 91.94664000000002,24.34945,0 91.98943000000001,24.31944,0 91.97470000000001,24.37889,0 92.08638000000001,24.37472,0 92.13527000000002,24.41416,0 92.13247,24.51388,0 92.19108000000001,24.56528,0 92.25664999999999,24.77390000000001,0 92.25526000000004,24.90361,0 92.40173000000002,24.84041,0 92.49384000000001,24.87879,0 92.48305000000001,24.93,0 92.41665999999999,24.9725,0 92.40637,25.03056000000001,0 92.04080999999999,25.18777,0 91.75749000000002,25.17388,0 91.64888000000002,25.12667,0 91.59027,25.17278,0 91.48221000000001,25.13861,0 91.25777000000001,25.20778,0 90.84804,25.14861000000001,0 90.65305000000001,25.18111,0 90.43831,25.14721000000001,0 90.11053000000001,25.22472,0 89.91721000000001,25.31,0 89.84526000000001,25.2886,0 89.81554,25.36693,0 89.86443,25.64056,0 89.80721,25.82305,0 89.86545,25.93686,0 89.81671,25.95416000000001,0 89.85637,25.98111,0 89.77804999999999,26.04195,0 89.73915,26.15638,0 89.6493,26.18946,0 89.6386,26.2278,0 89.60173,26.22748,0 89.60896000000001,26.17790000000002,0 89.55986,26.16146000000001,0 89.60242,26.06897,0 89.52551,25.98821,0 89.39355000000001,26.0479,0 89.31990999999999,26.02483000000001,0 89.12967,26.15927,0 89.06721,26.3877,0 88.93877999999999,26.44582,0 88.90916,26.39271,0 88.98159000000001,26.29568,0 89.04134000000001,26.28179,0 89.02048000000001,26.23517,0 88.88330000000001,26.2852,0 88.82383,26.23343,0 88.76734,26.29859,0 88.66918,26.2609,0 88.67950999999999,26.30742,0 88.73037000000001,26.32068,0 88.69164000000001,26.34277,0 88.68082,26.42027,0 88.43304000000001,26.55139000000001,0 88.40109,26.62527,0 88.33777000000001,26.47389,0 88.35359,26.45167,0 88.37109,26.48917,0 88.48331,26.46111000000001,0 88.52554000000002,26.35972,0 88.45749000000001,26.36916,0 88.35609,26.28444,0 88.35526,26.22333,0 88.18442,26.1525,0 88.15636000000001,26.09249,0 88.18333,26.03389,0 88.09554,25.91527,0 88.11053,25.83555000000001,0 88.15194,25.77861,0 88.27998,25.80167,0 88.44693,25.66611,0 88.45054,25.59389,0 88.54693,25.50416,0 88.69414,25.46778,0 88.79971000000001,25.51055,0 88.83443,25.47916,0 88.82166000000001,25.40166,0 88.86998,25.33583,0 89.00888000000001,25.30083,0 88.93304000000001,25.16444,0 88.83778,25.20361000000001,0 88.80582,25.16556,0 88.70499,25.19527,0 88.62025,25.19806,0 88.58138,25.16945,0 88.45556000000001,25.19055,0 88.45999000000001,25.06944,0 88.34249,24.87028,0 88.26749000000001,24.88472,0 88.22135000000002,24.95433,0 88.13777,24.92138,0 88.1711,24.85166,0 88.04387,24.68972,0 88.12553,24.50861,0 88.32388,24.43443,0 88.49776,24.32083,0 88.70638,24.30277,0 88.75291,24.21413,0 88.70833,24.17138,0 88.70734,24.12171,0 88.70138,24.07917,0 88.75918000000002,24.03604,0 88.72272,23.99796,0 88.73665,23.9198,0 88.66949,23.86855,0 88.60284,23.8624,0 88.56386999999999,23.65222,0 88.74942,23.46693000000001,0 88.79331999999999,23.49417,0 88.71138000000001,23.30861000000001,0 88.72110000000002,23.25166,0 88.98609999999999,23.20833,0 88.87025,23.08777,0 88.86276000000001,22.96667,0 88.97110000000001,22.84694,0 88.93026999999999,22.74833,0 88.95860000000002,22.59138,0 88.92918,22.54767,0 88.99776000000001,22.46555,0 89.00722,22.27639,0 89.09637000000001,22.14861,0 89.063,22.11547,0 89.04387,22.13638,0 89.03665,22.09805,0 89.05749,21.92833,0 89.00861,21.93027,0 88.99970999999999,21.90277,0 88.94275,21.93666,0 88.93137,21.98638,0 88.90555000000001,21.95916,0 89.01639,21.86582,0 89.02110000000002,21.78222,0 89.08971,21.65027,0 89.07416000000001,21.61417,0 89.02748,21.62695,0 89.00027,21.60209,0 88.88085000000001,21.51552,0 88.78551,21.55832,0 88.70639,21.57051,0 88.53887,21.52715,0 88.49802,21.52056,0 88.48305000000001,21.55694,0 88.52554000000002,21.65583,0 88.50082,21.7525,0 88.53749000000002,21.81388000000001,0 88.49802,21.87027,0 88.49609,21.95027,0 88.45387,21.615,0 88.39082000000001,21.58833,0 88.38694,21.69695,0 88.34610000000001,21.68388,0 88.33333,21.71389,0 88.34415,21.62222,0 88.30859000000001,21.60305,0 88.29721000000001,21.77277,0 88.26194,21.8,0 88.30831000000001,21.57055,0 88.25225000000002,21.55052,0 88.20502000000001,21.51847,0 88.17249,21.53918,0 88.12221,21.61312,0 88.05122000000002,21.63086,0 87.94918,21.80093000000001,0 87.91101999999999,21.80093000000001,0 87.82944000000001,21.71916,0 87.68498,21.64777,0 87.48090000000002,21.61178,0 87.11693,21.51139,0 86.87553,21.27443,0 86.83443,21.18944,0 86.83526999999999,21.10611,0 86.96748,20.79527,0 86.87886,20.76777,0 86.98553,20.75278,0 86.99498,20.70666,0 86.93718,20.7,0 86.98888,20.67167,0 87.04165999999999,20.69333,0 86.75584000000001,20.49138,0 86.72083000000002,20.3725,0 86.78525999999999,20.38527,0 86.80441999999999,20.43611,0 86.80054,20.38166,0 86.69275,20.29416,0 86.74802000000001,20.3061,0 86.57444,20.21249,0 86.48888,20.10721,0 86.39360000000001,20.01388,0 86.42386999999999,19.98611,0 86.28027,19.91416,0 85.62385999999999,19.71361,0 85.23415,19.51195,0 84.86638000000001,19.22027,0 84.78610000000001,19.11443,0 84.74193,19.14889,0 84.72659,19.124,0 84.73526,19.07472,0 84.78083,19.09417,0 84.67638,18.94194,0 84.43552,18.64638,0 84.27554000000001,18.51833,0 84.24498,18.525,0 84.24165000000001,18.49611,0 84.27666000000001,18.49944,0 84.34942,18.54888,0 84.14166,18.37111,0 84.08028,18.26861,0 83.77582,18.14277,0 83.58275999999999,18.0175,0 83.47054,17.9,0 83.44332000000001,17.91582,0 83.45664000000001,17.88138,0 83.34220000000001,17.71444,0 83.29498000000001,17.68693,0 83.23693,17.71167,0 83.29694000000002,17.66555,0 83.21304000000001,17.63139,0 83.23859,17.60083,0 83.21638,17.58055,0 82.50555,17.22305,0 82.31331,17.04556,0 82.2486,16.92027,0 82.27222,16.86222,0 82.35971000000002,16.82056,0 82.36449,16.93222,0 82.37195,16.86854,0 82.34644,16.70472,0 82.31226,16.60444,0 82.28032,16.61944,0 82.30199,16.575,0 82.07449,16.44305,0 81.72726,16.31083,0 81.5856,16.33721,0 81.54504000000001,16.37305,0 81.54474999999999,16.34416,0 81.41947999999999,16.33777,0 81.25944000000001,16.27662,0 81.15782,16.05306,0 81.15837000000001,15.97527,0 81.00171,15.84445,0 81.01727,15.77555,0 80.81507000000001,15.71571,0 80.80443000000001,15.84472,0 80.67137000000001,15.90583,0 80.65776,15.88861,0 80.68552,15.88306,0 80.55415000000001,15.87694,0 80.27943000000001,15.69917,0 80.20637000000002,15.48861,0 80.09081999999999,15.30916,0 80.04886999999999,15.04889,0 80.10578000000001,14.78102,0 80.15331000000001,14.67445,0 80.18221,14.59638,0 80.14413999999999,14.56555,0 80.19859,14.57027,0 80.17415,14.34389,0 80.13721000000001,14.25639,0 80.07916,14.24472,0 80.03999,14.19528,0 80.12886,14.23667,0 80.14915000000002,14.01111,0 80.24748,13.80889,0 80.22581,13.68,0 80.34972000000001,13.33417,0 80.26277,12.94916,0 80.25888000000001,12.78222,0 80.16025999999999,12.47305,0 80.03360000000001,12.27861,0 79.94193,12.22305,0 80.0061,12.23027,0 79.86720000000001,12.03277,0 79.78386999999999,11.775,0 79.75139,11.54916,0 79.82249,11.37333,0 79.76667000000001,11.38389,0 79.67192,11.29556,0 79.76389,11.36,0 79.83110000000001,11.345,0 79.84081999999999,10.81778,0 79.85971000000001,10.29538,0 79.93916,10.12232,0 80.24818999999999,9.827252,0 80.36803000000002,9.653893999999999,0 80.80193,9.292769,0 80.73499,9.302498999999999,0 80.80582000000001,9.240273,0 80.79665,9.266660999999999,0 80.82444000000001,9.261945000000001,0 80.88388000000001,9.138609000000001,0 80.83222000000001,9.139715000000001,0 80.89249,9.111392,0 80.95750000000001,9.010556000000001,0 80.87608,9.036395000000001,0 80.93027000000001,8.979444000000001,0 80.92081000000002,8.935551,0 80.97971,8.973611999999999,0 81.23109,8.651106,0 81.20555000000002,8.608059000000001,0 81.25221000000001,8.542214,0 81.20833,8.570826,0 81.21388,8.508609,0 81.16137000000001,8.534447999999999,0 81.13054,8.500005,0 81.16775,8.514998,0 81.26555000000001,8.453609,0 81.32026999999999,8.520002,0 81.36136999999999,8.487215000000001,0 81.39137,8.367217999999999,0 81.35442000000001,8.403893,0 81.35498,8.366382,0 81.39499000000001,8.340831,0 81.44331,8.173889000000001,0 81.4397,8.101395,0 81.39916,8.187497000000001,0 81.39027,8.140003999999999,0 81.43359,8.085824000000002,0 81.46361,8.112769999999999,0 81.51555000000002,8.003052,0 81.56944000000001,7.983891000000001,0 81.59305000000001,7.838892,0 81.69465,7.757684,0 81.80025999999999,7.610552,0 81.82656,7.473186000000001,0 81.87886,7.312221000000001,0 81.89166,7.013609,0 81.78221000000001,6.624720000000001,0 81.66110000000001,6.440003000000001,0 81.32417,6.198327,0 81.21138000000001,6.160284,0 81.19609,6.181946,0 81.11887,6.112503000000001,0 80.8186,6.037776,0 80.71638,5.956946,0 80.59193000000001,5.918336,0 80.46471,5.933340000000001,0 80.44026,5.96555,0 80.20081999999999,6.026112000000001,0 80.12581,6.093891,0 80.02666000000001,6.268337000000001,0 79.98648,6.432363,0 79.85137,6.83639,0 79.85831,7.024167000000001,0 79.80748,7.192214,0 79.8436,7.125272000000001,0 79.86248999999999,7.155837,0 79.82639,7.198893000000001,0 79.79694000000001,7.661394,0 79.70638,8.035830000000001,0 79.69804000000001,8.217504,0 79.77399000000001,8.533196,0 79.92596,8.795825000000001,0 79.91638000000002,8.931663,0 79.88623,8.969967000000001,0 79.69427,9.086679,0 79.44081,9.148337,0 79.27222,9.252773,0 78.97110000000001,9.273607999999999,0 78.66221,9.176660999999999,0 78.65637,9.147779,0 78.39664999999999,9.089721000000001,0 78.19247,8.904166999999999,0 78.16361000000002,8.754165,0 78.20804,8.781658999999999,0 78.21053000000001,8.75555,0 78.11192,8.654715,0 78.13997999999999,8.617221000000001,0 78.13164999999999,8.486667000000001,0 78.06053,8.364167,0 77.99693000000001,8.338328000000001,0 77.79275,8.225,0 77.77554000000001,8.181108,0 77.5872,8.134722,0 77.54082,8.069715,0 77.30304,8.123327,0 76.9986,8.365273999999999,0 76.54387,8.907496999999999,0 76.54498,8.930277,0 76.60415999999999,8.90972,0 76.61414000000001,8.928890000000001,0 76.57082,8.939159,0 76.60053000000001,8.971947,0 76.65860000000001,8.964998,0 76.62943,8.981945,0 76.66748,9.003609000000001,0 76.57720999999999,8.994166999999999,0 76.55859,8.95166,0 76.55692999999999,8.990829,0 76.52694,8.938890000000001,0 76.45471000000001,9.122499,0 76.47581,9.115550000000001,0 76.48387,9.161667,0 76.46138000000001,9.149445,0 76.41914,9.249165,0 76.44247,9.143325000000001,0 76.31582,9.463608000000001,0 76.23848,9.953955000000002,0 76.23437,9.986049,0 76.19637,10.06528,0 76.17747,10.17,0 76.24109,10.22666,0 76.19497,10.26445,0 76.20663999999999,10.20306,0 76.15776,10.19527,0 76.05553999999999,10.505,0 75.92416,10.75556,0 75.93858,10.79277,0 75.90748000000001,10.80333,0 75.72553000000001,11.32972,0 75.7411,11.36306,0 75.67859,11.44583,0 75.61304,11.47166,0 75.52858999999999,11.70027,0 75.31219,11.90056,0 75.30775,11.93806,0 75.39664999999999,11.91611,0 75.39388,11.97222,0 75.30971,11.95222,0 75.27442000000001,12.00777,0 75.33167,12.01472,0 75.29636000000002,12.03777,0 75.25912,12.01889,0 75.27831999999999,11.96194,0 75.2186,12.01806,0 75.19582,12.00389,0 75.17613,12.06975,0 75.10721,12.22,0 74.85526,12.755,0 74.82332,12.83361,0 74.85999,12.82389,0 74.93998000000001,12.87111,0 74.84276,12.84556,0 74.81026000000001,12.86472,0 74.77916999999999,13.08389,0 74.68665,13.37833,0 74.68248000000001,13.46278,0 74.70139,13.41056,0 74.71249000000002,13.46806,0 74.67609,13.51028,0 74.66388000000002,13.63194,0 74.73443,13.65222,0 74.68193000000001,13.70611,0 74.65721000000002,13.65972,0 74.61913,13.8325,0 74.49442999999999,14.01639,0 74.42525999999999,14.24861,0 74.51186,14.24342,0 74.40942,14.29445,0 74.35138000000001,14.51028,0 74.39444,14.45332,0 74.42443,14.47611,0 74.35803,14.56833,0 74.3336,14.51555,0 74.30081,14.52166,0 74.28831,14.58417,0 74.33859,14.60611,0 74.26470999999999,14.62222,0 74.25082999999999,14.71889,0 74.22331,14.73777,0 74.19414000000002,14.71444,0 74.08971,14.79777,0 74.23499,14.87471,0 74.20914999999999,14.89527,0 74.12303000000001,14.84417,0 74.10136,14.86709,0 74.03361,14.91722,0 74.01999000000001,15.00055,0 73.91553999999999,15.07805,0 73.96082000000001,15.15472,0 73.88054,15.35971,0 73.78610000000001,15.39805,0 73.91249000000001,15.40111,0 73.96361,15.36361,0 73.91692999999999,15.41916,0 73.78859,15.455,0 73.86499000000002,15.50667,0 73.86388,15.53472,0 73.75832,15.49471,0 73.73081999999999,15.59777,0 73.83526000000001,15.65944,0 73.71638,15.61972,0 73.69721,15.72195,0 73.64193,15.74027,0 73.64943,15.78416,0 73.59387,15.89278,0 73.48553,15.99139,0 73.51331999999999,16.01972,0 73.44776,16.05584,0 73.48859,16.18,0 73.45499,16.16916,0 73.44776,16.10889,0 73.43804,16.21832,0 73.40998999999999,16.21749,0 73.35581999999999,16.36889,0 73.38191999999999,16.39861,0 73.30165,16.5225,0 73.31581,16.55695,0 73.36054,16.51222,0 73.36774,16.55861,0 73.30859,16.60306,0 73.37276,16.59249,0 73.37276,16.62305,0 73.31693,16.62861,0 73.29109,16.7575,0 73.30971,16.80583,0 73.26972000000001,16.85333,0 73.28805,16.98166,0 73.24832000000002,17.03555,0 73.27139,17.03056,0 73.2747,17.08194,0 73.18359,17.29888,0 73.24442999999999,17.28417,0 73.15998999999999,17.40055,0 73.18581,17.44027,0 73.12776,17.53943,0 73.12776,17.56611,0 73.19914,17.58638,0 73.14166,17.59361,0 73.11443,17.63666,0 73.10914,17.76972,0 73.01166000000001,17.94805,0 73.03498999999999,17.98472,0 73.00054,18.01444,0 73.04443000000001,18.05167000000001,0 72.97971,18.06305,0 72.96915,18.18694,0 72.92221000000001,18.22722,0 72.93803,18.27945,0 72.97165000000001,18.23944,0 73.05663000000001,18.22138,0 73.05165,18.18305,0 73.07887,18.21472,0 73.06499,18.27389,0 72.98581,18.28389,0 72.90694000000001,18.36249,0 72.90916,18.52638,0 72.95138,18.52944,0 72.99387,18.4561,0 73.01694000000001,18.46722,0 72.9611,18.55139000000001,0 72.91443000000001,18.55277,0 72.85748,18.64805,0 72.85741,18.79465,0 72.80582,18.895,0 72.80247,18.95304,0 72.76999000000002,18.94306,0 72.82249,19.03777,0 72.82082,19.17277,0 72.77998,19.16027,0 72.82666,19.25056,0 72.77638,19.20388,0 72.77748,19.30861,0 72.96971000000001,19.29166,0 73.01609999999999,19.20583,0 73.04722,19.21726,0 72.96388,19.30917,0 72.79776,19.32611,0 72.75443,19.36972,0 72.74359,19.47611,0 72.87916000000001,19.52778,0 72.79443000000001,19.52361,0 72.73305000000001,19.57805,0 72.74249,19.51056,0 72.71693000000001,19.5475,0 72.68831,19.72111,0 72.73165,19.70555,0 72.73220000000001,19.78277,0 72.67525999999999,19.74611,0 72.64748,19.84666,0 72.72745999999999,20.13218,0 72.75359,20.295,0 72.88527000000001,20.51305,0 72.90166000000001,20.73222,0 72.94609,20.75833,0 72.92110000000001,20.81583,0 72.88916999999999,20.79555,0 72.89305,20.87305,0 72.83443,20.83416,0 72.79096,20.87397,0 72.83098,20.92505,0 72.89109999999999,20.97888,0 72.78471999999999,21.00082,0 72.73706,20.99305,0 72.70739,21.07498,0 72.70011,21.07702,0 72.66921000000001,21.093,0 72.62608,21.08472,0 72.61248999999999,21.12068,0 72.60988999999999,21.25536,0 72.58249000000001,21.34138,0 72.64776999999999,21.35889,0 72.56667,21.3825,0 72.75499000000001,21.46472,0 72.6947,21.46972,0 72.59081999999999,21.41195,0 72.61156,21.47095,0 72.52789,21.67045,0 72.30326,21.63418,0 72.24249,21.46527,0 72.10387,21.30972,0 72.08611000000001,21.24471,0 72.11053,21.20194,0 72.04886999999999,21.16083,0 71.56026,20.94611,0 71.56191,20.97861,0 71.46693000000001,20.88194,0 71.01195000000001,20.74166,0 70.96608999999999,20.70277,0 70.83138,20.69444,0 70.52777,20.81111,0 70.26028,20.97666,0 70.01582999999999,21.18611,0 69.80888,21.46361,0 69.59582,21.63333,0 69.40331999999999,21.80306,0 69.38970999999999,21.87444,0 69.36053,21.84722,0 69.22942000000001,21.94722,0 68.96278,22.24777,0 68.94274,22.32166,0 68.96388,22.38445,0 69.06914,22.48121,0 69.13518999999999,22.5504,0 69.20937000000001,22.73017,0 69.14346999999999,22.8714,0 68.66665,23.14222,0 68.5936,23.22888,0 68.62053,23.26777,0 68.56887999999999,23.25,0 68.53916,23.27833,0 68.51105,23.36989,0 68.53804,23.41805,0 68.47638000000001,23.40027,0 68.46278,23.43944,0 68.43692,23.42638,0 68.39158999999999,23.4551,0 68.40292,23.51842,0 68.42331,23.62722,0 68.48553,23.61,0 68.46693000000001,23.65304,0 68.63638,23.75722,0 68.66887,23.80972,0 68.81833,23.87638000000001,0 68.62831,23.82611,0 68.58804000000001,23.76695,0 68.44747,23.72693,0 68.32138999999999,23.58083,0 68.14028,23.60471,0 68.2011,23.66417,0 68.23054999999999,23.64361,0 68.28027,23.66666,0 68.21388,23.68055,0 68.1978,23.76668,0 68.21442,23.86833,0 68.28194000000001,23.89777,0 68.29053999999999,23.94444,0 68.33054,23.91472,0 68.36193,23.97388,0 68.37637000000001,23.94417,0 68.39055000000001,23.96749000000001,0 68.74721,23.96999,0 68.74525,24.31639,0 68.78306000000001,24.33278,0 68.82471000000001,24.33278,0 68.85804,24.24166,0 68.92693,24.32555,0 68.98803,24.25694,0 69.08028,24.29722,0 69.18941,24.25805,0 69.31081,24.29666,0 69.59860000000001,24.28139,0 69.72360000000001,24.17111,0 70.01470999999999,24.16972000000001,0 70.07071000000002,24.19792,0 70.12009000000001,24.30904,0 70.56749000000002,24.43639,0 70.60081,24.415,0 70.56776000000001,24.37138,0 70.58443,24.27834,0 70.65054000000001,24.24138,0 70.79082,24.23944,0 70.88582,24.27444,0 70.86443,24.31694,0 70.92804,24.36167,0 71.02916999999999,24.36361,0 71.10581999999999,24.41638,0 71.08194,24.44861,0 71.0061,24.45805,0 71.00555,24.54084,0 70.97971,24.56056,0 70.99276,24.6361,0 71.07743000000001,24.68047,0 70.9422,24.93555,0 70.8797,25.15611,0 70.75333000000001,25.27389000000001,0 70.67747,25.40166,0 70.66638,25.69833,0 70.60637,25.71416,0 70.38611,25.67472,0 70.29276000000002,25.70138,0 70.1172,25.91888000000001,0 70.09276,26.08,0 70.17386999999999,26.24444,0 70.17192,26.55277,0 70.07138000000001,26.59611,0 69.80081,26.59416,0 69.72276000000001,26.66527,0 69.51277,26.74667000000001,0 69.48609999999999,26.80638,0 69.50972,26.99221,0 69.58333,27.17833,0 69.86749,27.40861,0 70.0311,27.59055,0 70.11971,27.81611,0 70.20354,27.88558,0 70.36832,28.02083,0 70.51443,28.03917,0 70.6636,27.92833,0 70.6622,27.86333000000001,0 70.73775999999999,27.73138,0 70.86665000000001,27.70693,0 71.22581,27.84583,0 71.62691,27.87611,0 71.89694,27.96194,0 71.91998,28.12082,0 72.20663999999999,28.4025,0 72.29221,28.68,0 72.38970999999999,28.785,0 72.94832,29.03583,0 72.98888,29.14194000000001,0 73.08638000000001,29.24582,0 73.26527,29.55306,0 73.39749000000001,29.94277,0 73.93341,30.136,0 73.96442,30.23472,0 73.93442,30.31416,0 73.8586,30.36028,0 73.8725,30.3901,0 73.93380000000002,30.41625,0 73.99609,30.505,0 74.05025999999999,30.515,0 74.04886999999999,30.59916000000001,0 74.16109,30.66167,0 74.31693,30.88944,0 74.40063000000001,30.88415000000001,0 74.43221,30.94277,0 74.55499,30.99505,0 74.56112,31.04559,0 74.69459000000002,31.05396,0 74.68432,31.11202,0 74.62375,31.12393,0 74.55728000000001,31.07605,0 74.53898,31.11872,0 74.54837000000001,31.35443,0 74.65510999999999,31.42797,0 74.59842,31.48941,0 74.61033999999999,31.55431,0 74.48872,31.72159,0 74.54922000000001,31.74385,0 74.60532000000001,31.87712,0 74.83311000000001,31.96271000000001,0 74.90347000000001,32.05329,0 75.04075000000002,32.04146,0 75.19403,32.07404,0 75.22417,32.11676,0 75.25653,32.09287,0 75.30686,32.13391,0 75.32883,32.20907,0 75.39130000000002,32.24158,0 75.32859000000001,32.29276,0 75.31931,32.34466,0 75.04886999999999,32.47832,0 74.93858,32.44887,0 74.86165,32.48472,0 74.74443000000001,32.465,0 74.70387,32.48555,0 74.65358999999999,32.59332,0 74.70165,32.84694,0 74.63248,32.77055,0 74.53166,32.75027,0 74.45444000000001,32.79306,0 74.37164,32.7711,0 74.32966999999999,32.81542,0 74.36388,32.86944,0 74.33414999999999,33.00054,0 74.17331,33.04749,0 74.01331999999999,33.19888,0 74.02415000000001,33.27638,0 74.12581,33.34333,0 74.18248,33.51056,0 74.15443000000001,33.56139,0 74,33.65417,0 73.99471,33.75555,0 74.05025999999999,33.83167,0 74.23581,33.88416,0 74.29582000000001,33.97748,0 74.24442999999999,34.01915,0 73.97887,34.01139,0 73.91332,34.0686,0 73.9122,34.11527,0 74.01416999999999,34.17556,0 74.01776,34.21804000000001,0 73.97331,34.30277,0 73.84805,34.3186,0 73.79637,34.38555,0 73.87054000000001,34.45833,0 73.88193,34.52194,0 73.94637,34.56554,0 73.94914,34.65444,0 74.38916,34.78194,0 74.69275,34.6936,0 75.24303999999999,34.62609,0 75.39249,34.55471,0 75.66137000000001,34.50082,0 75.80553999999999,34.50721,0 75.98804,34.62694,0 76.16748,34.58638,0 76.22916000000001,34.60944,0 76.29359,34.70027,0 76.47026,34.76999,0 76.56303000000001,34.73166,0 76.7272,34.74388,0 76.80138,34.67222,0 76.86998,34.65888,0 76.91692999999999,34.68138,0 76.96416000000001,34.94055,0 77.06081,35.01472,0 77.04248,35.09916,0 77.82393,35.50133000000001,0 77.92470000000002,35.48972,0 77.97248999999999,35.57417000000001,0 78.13694,35.54333,0 78.17221000000001,35.61943,0 78.29915,35.70194,0 78.62553,35.81666,0 78.74193,35.92027,0 78.93442,35.89249,0 79.32832999999999,35.98638,0 79.43803000000001,35.96054000000001,0 + + + 1 + + + + + GMT +05:45 + + +]]> + #khStyle0575 + + + + +82.0664,27.91416,0 81.97776000000002,27.91722,0 81.88026000000001,27.85721,0 81.48027,28.08,0 81.42192,28.16638,0 81.31999000000002,28.13,0 81.31218,28.19333,0 81.19359,28.36667,0 81.01888,28.40416000000001,0 81.00694,28.44305,0 80.93858,28.44111,0 80.89249,28.50638,0 80.79832,28.52389,0 80.66249000000001,28.63277,0 80.58499000000001,28.6536,0 80.57720999999999,28.68556,0 80.50555,28.65833,0 80.50861,28.56693,0 80.44026,28.62888,0 80.35776,28.62944,0 80.24609,28.75082,0 80.05582,28.83611,0 80.05998,28.93166,0 80.1297,28.99305,0 80.14664999999999,29.10833,0 80.25694,29.14472,0 80.23997,29.21472,0 80.28777,29.20556,0 80.30693000000001,29.31055,0 80.27582,29.3225,0 80.23637000000001,29.42527,0 80.40694000000001,29.59638,0 80.37691,29.7486,0 80.53970000000001,29.84611,0 80.59887000000001,29.95527,0 80.74609,30.02138,0 80.87276,30.13888,0 80.8586,30.17472,0 80.89333000000001,30.21111,0 80.93637,30.18138,0 81.02536000000001,30.20436,0 81.10971000000001,30.02472,0 81.22360000000001,30.01027,0 81.30193,30.08361,0 81.29082,30.13055,0 81.37777,30.16667,0 81.42110000000001,30.38528,0 81.54192000000001,30.33056,0 81.55775,30.38194,0 81.63721,30.42444,0 81.80304,30.36361,0 82.10054,30.34222000000001,0 82.10721,30.23083,0 82.17859,30.19055,0 82.15027000000001,30.12556,0 82.17776000000001,30.06361,0 82.23109,30.07527,0 82.55775,29.94277,0 82.65581,29.83527000000001,0 82.71554999999999,29.83194,0 82.71053000000001,29.78972,0 82.85525000000001,29.66889000000002,0 82.90860000000001,29.69444,0 82.9922,29.6725,0 83.09276,29.58305,0 83.11749,29.62056000000001,0 83.19525,29.63083,0 83.28306000000001,29.55111000000001,0 83.28442,29.47443,0 83.34610000000001,29.49666,0 83.37916,29.46611,0 83.38054,29.41638,0 83.52748,29.26916,0 83.55277,29.18583,0 83.67192,29.16027,0 83.72054,29.22889,0 83.91249000000001,29.28972,0 84.11388000000001,29.26194,0 84.13667,29.21443,0 84.18552,29.20556,0 84.15833000000001,29.13472,0 84.20249,29.05695,0 84.2561,29.04222,0 84.23693000000002,28.91888000000001,0 84.39554,28.85917,0 84.48109,28.73667,0 84.63639000000001,28.70277000000002,0 84.70663999999999,28.66055,0 84.70610000000001,28.60139,0 84.7747,28.59888,0 84.84663999999999,28.54445,0 84.95470000000002,28.54416,0 85.05998,28.64111,0 85.18996,28.60332,0 85.18192999999999,28.53,0 85.10193,28.44666,0 85.10332,28.31639,0 85.37665,28.26361,0 85.45889,28.30166,0 85.61998,28.25111,0 85.71832000000002,28.33943,0 85.74722,28.23693000000001,0 85.88611,28.15167,0 85.91887,28.03333,0 85.97803999999999,27.98972,0 85.97304,27.91583,0 86.01443,27.88277,0 86.08942999999999,27.89083000000001,0 86.13721,27.93194,0 86.0936,28.08611,0 86.18359,28.16388,0 86.22638000000001,28.00667,0 86.44498,27.90805,0 86.53498999999999,27.95499,0 86.57193,28.10583000000001,0 86.63666000000001,28.08555,0 86.68637,28.11222,0 86.75805,28.08027,0 86.76416,28.02666,0 86.87415,28.01777,0 86.93304000000002,27.95055,0 87.03943000000001,27.96083,0 87.19275,27.82306,0 87.30609,27.81639,0 87.40416999999999,27.86055,0 87.39360000000001,27.80916,0 87.5461,27.84583,0 87.59775999999999,27.81027,0 87.66054,27.82888,0 87.72054,27.805,0 87.79721000000001,27.83722,0 87.86887,27.91888,0 88.14279999999999,27.86605,0 88.19386,27.8475,0 88.18887000000001,27.78777,0 88.11913,27.60833,0 88.05692999999999,27.53334,0 88.06667000000002,27.43693,0 88.03888000000001,27.37611,0 88.05971,27.32777000000002,0 87.99303999999999,27.11444,0 88.11859,26.98444,0 88.19497,26.75416,0 88.10193,26.53028000000001,0 88.09583000000001,26.43888000000002,0 88.02638,26.36916,0 87.94941,26.40055,0 87.89055999999999,26.47333,0 87.84305000000001,26.43888000000002,0 87.78554,26.45638,0 87.76639,26.40861,0 87.69748,26.42944,0 87.59999000000001,26.37972,0 87.44748,26.43250000000001,0 87.37082,26.40333,0 87.32805999999999,26.34777,0 87.24525,26.41222,0 87.1375,26.40972,0 87.09415,26.45638,0 87.06137,26.58833,0 86.88598,26.46866,0 86.73165,26.41999,0 86.53498999999999,26.52806,0 86.33249000000001,26.58499,0 86.33167,26.61277,0 86.20664000000001,26.58556,0 86.18387,26.60806,0 86.02943000000001,26.66306,0 85.85027,26.57222,0 85.73054999999999,26.66722,0 85.72609,26.80167000000001,0 85.63026000000001,26.8675,0 85.45305000000001,26.78694000000001,0 85.41249000000001,26.79472000000001,0 85.33443,26.73582,0 85.21165000000001,26.76694,0 85.18388,26.86666,0 85.04082,26.84777,0 85.04109,26.88666,0 84.97331,26.90304,0 84.95277,26.95804,0 84.84360000000001,27.01527,0 84.75027,27.0075,0 84.64749000000001,27.04527,0 84.68414,27.21555,0 84.60997999999999,27.33556,0 84.29776,27.38832,0 84.14333000000001,27.52417,0 84.09887000000001,27.51611,0 84.04026,27.44472,0 83.83526999999999,27.43805,0 83.87553,27.38083,0 83.85832000000001,27.35221,0 83.60776,27.46916,0 83.39610000000002,27.47861,0 83.37665,27.37527,0 83.29137,27.33777,0 83.17638,27.44888,0 82.76860000000001,27.50166,0 82.7011,27.71111000000001,0 82.43471,27.67556,0 82.0664,27.91416,0 + + + 1 + + + + GMT +06:00 + + +]]> + #khStyle0600 + + + + + +73.35092,-9.431101,0 70.25215,-9.433405000000001,0 70.25215,-6.970275,0 73.34769,-6.970275,0 73.35092,-9.431101,0 + + + 1 + + + + + +88.43304000000001,26.55139000000001,0 88.68082,26.42027,0 88.69164000000001,26.34277,0 88.73037000000001,26.32068,0 88.67950999999999,26.30742,0 88.66918,26.2609,0 88.76734,26.29859,0 88.82383,26.23343,0 88.88330000000001,26.2852,0 89.02048000000001,26.23517,0 89.04134000000001,26.28179,0 88.98159000000001,26.29568,0 88.90916,26.39271,0 88.93877999999999,26.44582,0 89.06721,26.3877,0 89.12967,26.15927,0 89.31990999999999,26.02483000000001,0 89.39355000000001,26.0479,0 89.52551,25.98821,0 89.60242,26.06897,0 89.55986,26.16146000000001,0 89.60896000000001,26.17790000000002,0 89.60173,26.22748,0 89.6386,26.2278,0 89.6493,26.18946,0 89.73915,26.15638,0 89.77804999999999,26.04195,0 89.85637,25.98111,0 89.81671,25.95416000000001,0 89.86545,25.93686,0 89.80721,25.82305,0 89.86443,25.64056,0 89.81554,25.36693,0 89.84526000000001,25.2886,0 89.91721000000001,25.31,0 90.11053000000001,25.22472,0 90.43831,25.14721000000001,0 90.65305000000001,25.18111,0 90.84804,25.14861000000001,0 91.25777000000001,25.20778,0 91.48221000000001,25.13861,0 91.59027,25.17278,0 91.64888000000002,25.12667,0 91.75749000000002,25.17388,0 92.04080999999999,25.18777,0 92.40637,25.03056000000001,0 92.41665999999999,24.9725,0 92.48305000000001,24.93,0 92.49384000000001,24.87879,0 92.40173000000002,24.84041,0 92.25526000000004,24.90361,0 92.25664999999999,24.77390000000001,0 92.19108000000001,24.56528,0 92.13247,24.51388,0 92.13527000000002,24.41416,0 92.08638000000001,24.37472,0 91.97470000000001,24.37889,0 91.98943000000001,24.31944,0 91.94664000000002,24.34945,0 91.91776,24.32667,0 91.93248,24.27555,0 91.89249,24.14972,0 91.83192000000001,24.22611,0 91.75775,24.23917000000001,0 91.75525,24.15833,0 91.70385000000002,24.15166,0 91.6572,24.22416,0 91.62746,24.10972,0 91.54633,24.08693,0 91.37329,24.10194,0 91.36110000000001,23.99528,0 91.29832,23.99388,0 91.23776000000001,23.90777,0 91.25054000000002,23.83027,0 91.21638,23.75611,0 91.15860000000002,23.73666,0 91.15915,23.70082,0 91.20028000000004,23.67805,0 91.15942,23.64055000000001,0 91.28221000000002,23.37332,0 91.31469000000001,23.36416,0 91.28859,23.32832,0 91.33554,23.11555,0 91.40221,23.06945,0 91.37746,23.20693,0 91.41665999999999,23.26611,0 91.49332000000001,23.18666,0 91.56359999999999,22.9836,0 91.61360000000001,22.94305,0 91.64722000000002,22.98638,0 91.72499000000001,22.99472,0 91.82055,23.09777,0 91.76805000000002,23.25,0 91.78360000000001,23.3125,0 91.84498000000001,23.41027,0 91.93304000000001,23.44444,0 91.96609000000001,23.50166,0 91.95,23.73222000000001,0 92.0372,23.64528,0 92.17486000000001,23.73682,0 92.21165000000001,23.65222,0 92.25221000000002,23.7225,0 92.28888000000001,23.69611,0 92.27831999999999,23.605,0 92.37358,23.35925,0 92.38697999999999,23.27993,0 92.34860000000001,23.22361,0 92.37469,22.94193,0 92.44386000000002,22.88944,0 92.47054000000001,22.75638,0 92.51639000000002,22.71583,0 92.60609,22.16277,0 92.56218,22.13333,0 92.60081,21.98222000000001,0 92.62164,21.87583,0 92.60027000000001,21.63416,0 92.66935000000002,21.29698,0 92.59554000000001,21.25194,0 92.55359,21.37361,0 92.42747000000001,21.37472,0 92.37691,21.47416,0 92.31667,21.42138,0 92.26555000000002,21.42333,0 92.25305000000002,21.3725,0 92.19220000000001,21.32444,0 92.19859000000001,21.15417,0 92.26194,21.05431,0 92.26331999999999,20.91916000000001,0 92.33333,20.76416,0 92.31895,20.729,0 90.32641000000001,18.56566,0 90.33015,15.23029,0 90.33504000000001,10.88448,0 90.34064000000001,5.884479,0 92.9025,5.880672000000001,0 94.60397,3.503177,0 97.51384,-0.5628515,0 97.51384,-1.259497,0 97.51384,-6.259501,0 97.51384,-11.2595,0 93.69904000000001,-11.2595,0 93.69904000000001,-13.93192,0 97.51384,-13.93535,0 97.51384,-14.73534,0 97.51384,-19.73534,0 97.51384,-24.73534,0 97.51384,-29.73533,0 97.51384,-34.73534,0 97.51384,-39.73533000000001,0 97.51384,-44.73534,0 97.51384,-48.73533,0 97.51384,-53.73534000000002,0 97.51384,-58.73533,0 97.51384,-63.73534,0 97.51384,-64.90000000000001,0 97.51384,-69.90000000000001,0 97.51384,-74.90000000000001,0 97.51384,-79.90000000000001,0 97.51384,-84.89999,0 97.51384,-89.90000000000001,0 96.57599999999999,-89.90000000000001,0 95.63816,-89.90000000000001,0 94.70033000000002,-89.90000000000001,0 93.76249,-89.90000000000001,0 92.82466000000001,-89.90000000000001,0 91.88683000000002,-89.90000000000001,0 90.94899,-89.90000000000001,0 90.01115000000002,-89.90000000000001,0 89.07332,-89.90000000000001,0 88.13549,-89.90000000000001,0 87.19765,-89.90000000000001,0 86.25982000000001,-89.90000000000001,0 85.32198,-89.90000000000001,0 84.38415999999999,-89.90000000000001,0 83.44632000000001,-89.90000000000001,0 82.50848000000001,-89.90000000000001,0 82.50834999999999,-84.89999,0 82.50829,-82.28883,0 82.50816,-77.28883,0 82.50802,-72.28883000000002,0 82.50792,-68.68883,0 82.5078,-63.68882,0 82.50766,-58.68883,0 82.50753000000002,-53.68882000000001,0 82.5074,-48.68883000000001,0 82.50727999999999,-43.68883,0 82.50713,-38.68883,0 82.50700000000002,-33.68883,0 82.50697,-32.48883,0 82.50684,-27.48883,0 82.50671,-22.48882,0 82.50658,-17.48883,0 82.50655,-16.18883,0 82.5064,-11.18883,0 82.50624999999999,-6.188824,0 82.5061,-1.188829,0 82.50595000000001,3.811175,0 82.50581,8.811171,0 82.50565,13.81117,0 82.50555,17.22305,0 83.21638,17.58055,0 83.23859,17.60083,0 83.21304000000001,17.63138,0 83.29694000000002,17.66555,0 83.23693,17.71167,0 83.29498000000001,17.68693,0 83.34220000000001,17.71444,0 83.45664000000001,17.88138,0 83.44332000000001,17.91582,0 83.47054,17.9,0 83.58275999999999,18.0175,0 83.77582,18.14277,0 84.08028,18.26861,0 84.14166,18.37111,0 84.34942,18.54888,0 84.27666000000001,18.49944,0 84.24165000000001,18.49611,0 84.24498,18.525,0 84.27554000000001,18.51833,0 84.43552,18.64638,0 84.67638,18.94194,0 84.78083,19.09417,0 84.73526,19.07472,0 84.72659,19.124,0 84.74193,19.14889,0 84.78610000000001,19.11443,0 84.86638000000001,19.22027,0 85.23415,19.51195,0 85.62385999999999,19.71361,0 86.28027,19.91416,0 86.42386999999999,19.98611,0 86.39360000000001,20.01388,0 86.48888,20.10721,0 86.57444,20.21249,0 86.74802000000001,20.3061,0 86.69275,20.29416,0 86.80054,20.38166,0 86.80441999999999,20.43611,0 86.78525999999999,20.38527,0 86.72083000000002,20.3725,0 86.75584000000001,20.49138,0 87.04165999999999,20.69333,0 86.98888,20.67167,0 86.93718,20.7,0 86.99498,20.70666,0 86.98553,20.75278,0 86.87886,20.76777,0 86.96748,20.79527,0 86.83526999999999,21.10611,0 86.83443,21.18944,0 86.87553,21.27443,0 87.11693,21.51139,0 87.48090000000002,21.61178,0 87.68498,21.64777,0 87.82944000000001,21.71916,0 87.91101999999999,21.80093000000001,0 87.94918,21.80093000000001,0 88.05122000000002,21.63086,0 88.12221,21.61312,0 88.17249,21.53918,0 88.20502000000001,21.51847,0 88.25225000000002,21.55052,0 88.30831000000001,21.57055,0 88.26194,21.8,0 88.29721000000001,21.77277,0 88.30859000000001,21.60305,0 88.34415,21.62222,0 88.33333,21.71389,0 88.34610000000001,21.68388,0 88.38694,21.69695,0 88.39082000000001,21.58833,0 88.45387,21.615,0 88.49609,21.95027,0 88.49802,21.87027,0 88.53749000000002,21.81388000000001,0 88.50082,21.7525,0 88.52554000000002,21.65583,0 88.48305000000001,21.55694,0 88.49802,21.52056,0 88.53887,21.52715,0 88.70639,21.57051,0 88.78551,21.55832,0 88.88085000000001,21.51552,0 89.00027,21.60209,0 89.02748,21.62695,0 89.07416000000001,21.61417,0 89.08971,21.65027,0 89.02110000000002,21.78222,0 89.01639,21.86582,0 88.90555000000001,21.95916,0 88.93137,21.98638,0 88.94275,21.93666,0 88.99970999999999,21.90277,0 89.00861,21.93027,0 89.05749,21.92833,0 89.03665,22.09805,0 89.04387,22.13638,0 89.063,22.11547,0 89.09637000000001,22.14861,0 89.00722,22.27639,0 88.99776000000001,22.46555,0 88.92918,22.54767,0 88.95860000000002,22.59138,0 88.93026999999999,22.74833,0 88.97110000000001,22.84694,0 88.86276000000001,22.96667,0 88.87025,23.08777,0 88.98609999999999,23.20833,0 88.72110000000002,23.25166,0 88.71138000000001,23.30861000000001,0 88.79331999999999,23.49417,0 88.74942,23.46693000000001,0 88.56386999999999,23.65222,0 88.60284,23.8624,0 88.66949,23.86855,0 88.73665,23.9198,0 88.72272,23.99796,0 88.75918000000002,24.03604,0 88.70139,24.07917,0 88.70734,24.12171,0 88.70833,24.17138,0 88.75291,24.21413,0 88.70638,24.30277,0 88.49776,24.32083,0 88.32388,24.43443,0 88.12553,24.50861,0 88.04387,24.68972,0 88.1711,24.85166,0 88.13777,24.92138,0 88.22135000000002,24.95433,0 88.26749000000001,24.88472,0 88.34248,24.87028,0 88.45999000000001,25.06944,0 88.45556000000001,25.19055,0 88.58138,25.16945,0 88.62025,25.19806,0 88.70499,25.19527,0 88.80582,25.16556,0 88.83778,25.20361000000001,0 88.93304000000001,25.16444,0 89.00888000000001,25.30083,0 88.86998,25.33583,0 88.82166000000001,25.40166,0 88.83443,25.47916,0 88.79971000000001,25.51055,0 88.69414,25.46778,0 88.54693,25.50416,0 88.45054,25.59389,0 88.44693,25.66611,0 88.27998,25.80167,0 88.15194,25.77861,0 88.11053,25.83555000000001,0 88.09554,25.91527,0 88.18333,26.03389,0 88.15636000000001,26.09249,0 88.18442,26.1525,0 88.35526,26.22333,0 88.35609,26.28444,0 88.45749000000001,26.36916,0 88.52554000000002,26.35972,0 88.48331,26.46111000000001,0 88.37109,26.48917,0 88.35359,26.45167,0 88.33777000000001,26.47389,0 88.40109,26.62527,0 88.43304000000001,26.55139000000001,0 + + + 1 + + + + + +90.00002000000002,28.32405,0 90.38165000000001,28.25139,0 90.39554000000001,28.19888,0 90.35027,28.11222,0 90.37053000000002,28.08027,0 90.60804,28.06445,0 90.69942,28.09583,0 90.90998999999999,28.04944,0 91.01082000000001,27.98,0 91.08693,27.96999,0 91.21444,28.07305,0 91.31499,28.09667,0 91.41943000000001,28.01056,0 91.66721,27.94194,0 91.65776,27.76472,0 91.65277000000002,27.71167,0 91.59498000000001,27.64554,0 91.62082000000001,27.54861,0 91.67359,27.48861,0 91.76555000000002,27.45694,0 91.76833000000002,27.41611,0 91.99887,27.47805,0 92.08916000000001,27.34944,0 92.11443000000001,27.28583,0 92.01776,27.1725,0 92.00999000000002,27.10472,0 92.11193000000002,26.94416,0 92.08150999999999,26.86905,0 91.99721,26.85194,0 91.91526,26.89389,0 91.90498,26.80556,0 91.84360000000001,26.86416,0 91.71249,26.8,0 91.54221,26.80445,0 91.49721000000001,26.8725,0 91.4247,26.87556,0 91.3797,26.8075,0 91.31441000000001,26.77806,0 91.09109000000001,26.81639,0 91.03194000000002,26.78278,0 90.6947,26.77222,0 90.55914,26.80722,0 90.38527000000001,26.90333,0 90.21693000000001,26.85082,0 90.17747,26.77306000000002,0 90.1236,26.74805,0 89.85942,26.73666,0 89.84887000000001,26.70167,0 89.68552000000001,26.7336,0 89.64305000000002,26.71527,0 89.61832,26.72694,0 89.63611,26.77111,0 89.53360000000001,26.81221,0 89.46833,26.79944,0 89.36081,26.86,0 89.22083000000001,26.81472,0 89.12608,26.82361,0 89.03055000000001,26.92749,0 88.95193000000002,26.92667000000001,0 88.93332000000001,26.98499,0 88.87636999999999,26.95055,0 88.86360999999999,27.09194000000002,0 88.75193,27.14861,0 88.79803,27.24638,0 88.90138000000002,27.28222,0 88.91692000000001,27.32083,0 88.97110000000001,27.47361,0 89.12581,27.5675,0 89.12804,27.62333,0 89.22553000000001,27.795,0 89.35999,27.87167000000001,0 89.48749000000001,28.05777,0 89.6236,28.15833,0 89.79276000000002,28.19416,0 89.89388,28.30611,0 89.95027,28.29222,0 90.00002000000002,28.32405,0 + + + 1 + + + + + +75.2397,58.21998,0 75.06638000000001,58.11833,0 75.56441,57.93387,0 75.58275999999999,57.64639,0 75.71249,57.63917000000001,0 75.8586,57.39917,0 75.96638,57.41416,0 76.10887,57.25027999999999,0 76.19192,56.97276000000001,0 76.25194999999999,56.91833,0 76.28943,56.72694,0 76.14915000000001,56.63082,0 76.0461,56.62165000000002,0 76.01528,56.55165000000001,0 75.86526000000001,56.49971000000001,0 75.84415,56.45,0 75.895,56.44276,0 75.93581,56.47971,0 76.0061,56.45388,0 76.05748,56.48277,0 76.14194000000001,56.4511,0 76.07805999999999,56.41471,0 76.11665000000002,56.31415,0 76.29971000000001,56.23638,0 76.31887999999999,56.18555,0 76.16304,56.14943,0 76.15082,56.18055,0 75.99442999999999,56.17832000000001,0 75.95638,56.12749000000001,0 75.74887,56.14111000000001,0 75.70055000000001,56.0675,0 75.54304999999999,56.04722000000002,0 75.50584000000001,55.99610000000001,0 75.31219,55.89166000000001,0 75.29749,55.84471,0 75.37331,55.81333,0 75.37025,55.76666,0 75.08194,55.75027,0 75.13694000000001,55.72332,0 75.12886,55.69943000000001,0 75.23775999999999,55.65999999999999,0 75.13136,55.59888000000002,0 75.1972,55.55972,0 75.30582000000001,55.56917,0 75.32223000000001,55.54027,0 75.325,55.50722,0 75.17137,55.45277,0 75.16859,55.4211,0 75.09138,55.38221,0 75.26944,55.25416,0 75.24803,55.1375,0 75.40027000000002,55.02804,0 75.34027,54.91416,0 75.54082,54.90194,0 75.49165000000001,54.86138,0 75.51331999999999,54.82333,0 75.65721000000001,54.80999,0 75.70972,54.68639,0 75.80887,54.69304,0 75.7897,54.66945,0 75.83499000000001,54.60471,0 75.80609,54.56554,0 75.67777000000001,54.53417,0 75.69136,54.11027,0 76.20721,54.25916000000002,0 76.18552,54.29554000000001,0 76.23888,54.35889,0 76.48775999999999,54.32556,0 76.65694000000001,54.36777000000001,0 76.70663999999999,54.44721,0 76.92359999999999,54.47554000000001,0 76.92498999999999,54.43749,0 76.77888,54.39415,0 76.85583000000001,54.35889,0 76.86498,54.31805000000001,0 76.72136999999999,54.15331000000001,0 76.39333000000001,54.16361,0 76.52164999999999,53.99388,0 77.52387,53.50639,0 77.92137,53.2589,0 78.92303,52.17638000000002,0 79.53637000000001,51.45000000000001,0 79.99387,50.81304999999999,0 80.1096,50.75947,0 80.03516999999999,50.83338,0 80.06545,50.86060000000001,0 80.17211,50.82919,0 80.19905,50.88837,0 80.46236,50.96408000000001,0 80.48678,51.05877,0 80.43068000000001,51.11909,0 80.43872,51.19797000000001,0 80.63344000000001,51.21476000000001,0 80.68783999999999,51.31472000000001,0 80.87224999999999,51.25904,0 80.93223999999999,51.28399,0 80.94029000000002,51.22122,0 81.04084,51.18143,0 81.18359,51.19609,0 81.07639,50.94781,0 81.4247,50.96638,0 81.42192,50.92777,0 81.48997,50.8411,0 81.43747999999999,50.76445,0 81.59540000000001,50.73573,0 81.72581,50.74749000000001,0 81.78276,50.79333,0 81.82887000000001,50.76833000000001,0 82.01111,50.77138999999999,0 82.15027000000001,50.71054,0 82.35637,50.75972,0 82.44274,50.75804999999999,0 82.49887,50.7211,0 82.72026,50.81081,0 82.72748,50.89888,0 82.76111,50.91082,0 83.00999,50.88944000000001,0 83.0872,50.92361,0 83.1386,51.00194000000001,0 83.45638,51.00249000000001,0 83.51361,50.95555000000001,0 83.84333,50.87749000000001,0 83.90166000000002,50.81388000000001,0 83.97693,50.79749,0 83.96998000000001,50.71555,0 84.10621999999999,50.64296,0 84.22304,50.51471000000002,0 84.19692000000001,50.45304,0 84.26277,50.35443,0 84.26694000000001,50.27054,0 84.37302,50.20971000000002,0 84.47386,50.25666,0 84.55998,50.19555,0 84.67443,50.19694,0 84.73636999999999,50.1461,0 84.81053,50.14416000000001,0 84.85193,50.09166000000001,0 85.01443,50.07583,0 85.05832,50.01361,0 84.97915999999999,49.99777,0 84.97776,49.91276,0 85.0836,49.88138,0 85.09193000000001,49.81971,0 85.21053000000001,49.71555000000001,0 85.21111000000001,49.64721000000001,0 85.2586,49.59138000000001,0 85.40387,49.62332,0 85.52443,49.59055,0 85.63081,49.62749,0 85.69054,49.56444,0 85.77083,49.57999,0 85.8372,49.54388000000001,0 85.96915,49.56638,0 85.96944000000001,49.48861000000001,0 86.13275,49.53277000000001,0 86.19107,49.4725,0 86.24582000000001,49.50139999999999,0 86.28749000000001,49.58582000000001,0 86.50583,49.67638,0 86.49706999999999,49.7155,0 86.61109,49.76111,0 86.61638000000001,49.79721,0 86.77499,49.78889,0 86.76277000000002,49.73444000000001,0 86.80025999999999,49.70222,0 86.68221000000001,49.66999,0 86.61665000000001,49.58721000000001,0 86.84694,49.52166,0 86.83971,49.45222,0 86.96442,49.39194,0 86.92665,49.35306,0 87.05247,49.25417000000001,0 87.21887,49.2461,0 87.29971000000001,49.21054000000001,0 87.34821,49.09261,0 87.16748,49.13304,0 86.99887,49.09944,0 86.87469,49.11083000000001,0 86.73054999999999,48.97222,0 86.75277000000001,48.90028000000002,0 86.82138000000001,48.84665,0 86.75943,48.79361,0 86.78333000000002,48.72776000000001,0 86.64499000000002,48.61639,0 86.59610000000001,48.53611,0 86.46362000000001,48.49361,0 86.34415,48.49527000000001,0 86.23081999999999,48.42527000000001,0 85.86248999999999,48.42527000000001,0 85.75915999999999,48.38777000000001,0 85.61388,48.15833,0 85.53777,47.95999,0 85.62221,47.62111,0 85.60359,47.51943,0 85.70055000000001,47.38388000000001,0 85.70555,47.2836,0 85.68665,47.21194000000001,0 85.57331000000002,47.17694,0 85.52931,47.06016,0 85.25776999999999,47.0511,0 84.96361,46.86415,0 84.75942000000001,46.82638,0 84.73526,46.83694,0 84.77887,46.93166,0 84.67804,46.99361,0 84.53194000000001,46.97527000000001,0 84.29471,47.0075,0 84.11109999999999,46.97166000000001,0 83.90000000000001,46.97721,0 83.56499,47.0611,0 83.18571,47.21664,0 83.03276,47.20416,0 83.01470999999999,46.96027,0 82.87387000000001,46.76359999999999,0 82.70889,46.35415,0 82.57332000000001,46.17305,0 82.51082,45.90192,0 82.31493,45.5448,0 82.3622,45.49552000000001,0 82.64943,45.43026,0 82.63554000000001,45.24053,0 82.54943,45.12331,0 82.48165,45.12748,0 82.29694000000001,45.23775,0 81.94804000000001,45.15748,0 81.81581,45.20053,0 81.79776,45.30581,0 81.68831,45.35082,0 81.05444,45.16608,0 80.46915,45.1111,0 80.39166,45.04915,0 80.12138,45.03942000000001,0 79.87109000000001,44.90497,0 79.87581000000002,44.86554,0 80.00166,44.79776,0 80.26221,44.82443,0 80.52083,44.73248,0 80.51666,44.7072,0 80.37497999999999,44.65607,0 80.40721000000002,44.6022,0 80.34887000000001,44.45024,0 80.39999000000002,44.26414,0 80.36276000000001,44.12524000000001,0 80.43136,44.05303,0 80.43886999999999,43.99219000000001,0 80.55371,43.81323,0 80.73859000000002,43.4719,0 80.66054,43.32884,0 80.76914000000001,43.28886,0 80.8147,43.13997,0 80.74359,43.10775,0 80.64637999999999,43.14135,0 80.37665000000001,43.02524,0 80.44443,42.95468,0 80.56135999999999,42.92635,0 80.57861,42.89108,0 80.26066,42.81941,0 80.17192,42.6605,0 80.18221,42.56802,0 80.24249,42.49051,0 80.21720999999999,42.45051,0 80.23831000000001,42.3633,0 80.29387,42.25218,0 80.2811,42.21218,0 80.23403,42.19622,0 80.28332,42.07968000000001,0 80.25139,42.04245,0 79.87943,42.01635,0 79.77858000000001,41.88717,0 79.65498,41.88218000000001,0 79.43192999999999,41.78216,0 79.30943000000001,41.79134,0 79.20749000000001,41.72828,0 78.69553000000001,41.54301,0 78.63997999999999,41.483,0 78.53109000000001,41.46384,0 78.37553,41.37882,0 78.37997,41.28384,0 78.24623,41.16513,0 78.08083000000001,41.04079,0 77.85471,41.0694,0 77.68471,41.00189,0 77.54359000000001,40.98661,0 77.37747,41.028,0 77.13805000000001,41.01606,0 77.05831000000001,41.04911,0 76.87387,41.01411,0 76.78194000000001,40.94077,0 76.79359,40.86245,0 76.64971,40.74494,0 76.63943,40.60856,0 76.55304,40.54411,0 76.48693,40.43105,0 76.33859,40.34855,0 76.27748,40.45438,0 76.19414,40.37799,0 76.06805,40.39577,0 75.97803999999999,40.36327,0 75.92886,40.30550000000001,0 75.6972,40.29911,0 75.66137000000001,40.39827,0 75.69664,40.44494,0 75.64554,40.4866,0 75.62276,40.59799,0 75.57805000000001,40.64799,0 75.22554,40.44688,0 75.16137000000001,40.47022,0 75.05888,40.44772,0 74.86026,40.51939000000001,0 74.81026000000001,40.4198,0 74.88443,40.32771,0 74.73054999999999,40.33966,0 74.36219,40.09965,0 74.19803,40.11383,0 73.99442999999999,40.04605000000001,0 73.84498000000002,39.8055,0 73.84444000000001,39.75576,0 73.91080000000001,39.7252,0 73.95609000000002,39.59771000000001,0 73.90248,39.56966,0 73.84805,39.47493000000001,0 73.65569000000001,39.45483,0 73.66998,39.34409,0 73.6172,39.23215,0 73.72165,39.08244,0 73.85332,38.96909,0 73.70499,38.88076,0 73.7625,38.80076,0 73.75776999999999,38.73021,0 73.80219,38.64983,0 73.81776000000001,38.6077,0 73.93665,38.54105000000001,0 74.06887999999999,38.53659,0 74.06052,38.60465,0 74.11081,38.6216,0 74.13415999999999,38.67326,0 74.35471,38.67439,0 74.71833,38.5291,0 74.78859,38.52742,0 74.85664,38.47048,0 74.8647,38.38882,0 74.79443000000001,38.30603,0 74.8147,38.07883,0 74.91361000000001,38.01772,0 74.90833000000001,37.91049,0 74.93665000000001,37.88884,0 74.90277,37.84717,0 74.99109000000001,37.78382,0 74.90277,37.64715,0 74.94942,37.56298,0 75.18747999999999,37.40658,0 75.11109999999999,37.38353,0 75.09665,37.32186,0 74.95804,37.28183,0 74.91575,37.23733,0 74.83277,37.32545,0 74.68427,37.39974,0 74.54221,37.38181,0 74.36388,37.42846,0 74.23997,37.40705,0 74.23748999999999,37.36119,0 74.19721,37.33897,0 73.73858,37.22164,0 73.61998,37.26248,0 73.64943,37.30415,0 73.76888,37.34113,0 73.77598,37.4343,0 73.45637000000001,37.47611,0 73.37248,37.44692,0 73.30721,37.46275,0 73.15054000000001,37.40049,0 73.06914999999999,37.31407,0 72.79359,37.22623,0 72.65851000000001,37.0212,0 72.30636,36.9781,0 71.84276,36.6921,0 71.69525,36.67184,0 71.61006999999999,36.70038,0 71.55468999999999,36.76068,0 71.45694,36.94474,0 71.42943,37.07583,0 71.44693000000001,37.20722000000001,0 71.49026000000001,37.28362,0 71.47942000000001,37.41003,0 71.5141,37.46773,0 71.49571,37.55815,0 71.52878,37.7639,0 71.58859,37.81565,0 71.59193000000002,37.90262,0 71.51537,37.94846,0 71.33472,37.88787,0 71.25277,37.92204,0 71.36638000000002,38.23627,0 71.14554,38.38574,0 71.04971000000001,38.40294,0 70.96720000000002,38.47212,0 70.92998,38.43045,0 70.87388,38.45295,0 70.67221000000001,38.41403,0 70.68552,38.37486,0 70.59775999999999,38.34151,0 70.58443,38.27816,0 70.46416000000001,38.11119,0 70.24721,37.96394,0 70.24745,37.93169,0 70.16137000000001,37.93337,0 70.16553999999999,37.87172,0 70.24693000000001,37.81255,0 70.28581,37.69707,0 70.25360000000001,37.61574,0 70.21554999999999,37.61638,0 70.16193,37.53956,0 70.06245,37.54134,0 69.9586,37.56499,0 69.89915000000001,37.61501,0 69.80692999999999,37.58305,0 69.51582999999999,37.58082,0 69.38026000000001,37.4511,0 69.41110000000001,37.24083000000001,0 69.45055000000001,37.22527,0 69.3886,37.1586,0 69.24664,37.09416,0 69.12527,37.16304,0 68.9997,37.30777,0 68.88777,37.33860000000001,0 68.91943000000001,37.27555,0 68.83804000000001,37.32695,0 68.80663,37.31806,0 68.82165999999999,37.24499,0 68.66415000000001,37.27499,0 68.62388,37.20055000000001,0 68.4122,37.14805,0 68.39749000000001,37.09916000000001,0 68.29471,37.10832,0 68.27499,37.01222,0 68.18719,37.02055,0 68.02831999999999,36.92389,0 67.88554000000001,37.06138,0 67.78221000000001,37.09610000000001,0 67.77988000000001,37.18582,0 67.83804000000001,37.26194,0 67.81749000000002,37.4461,0 67.83832,37.50583,0 68.07305,37.76528,0 68.15054000000001,37.92805,0 68.27748,37.95889,0 68.38415000000001,38.19555,0 68.33138,38.27333,0 68.21554999999999,38.33221,0 68.1272,38.42444,0 68.07193,38.54138,0 68.05775,38.69694,0 68.10081,38.73916,0 68.08305,38.79445,0 68.15498,38.8086,0 68.19637,38.85444,0 68.12387,38.98554,0 67.70943,38.99666000000001,0 67.69026,39.13805,0 67.37636999999999,39.21249,0 67.36609,39.29361,0 67.41054,39.29916,0 67.44196,39.48359,0 67.29803,39.58611,0 67.29248,39.66555,0 67.37109,39.68777,0 67.38136,39.78055,0 67.50444,39.81554,0 67.47971,39.93194,0 67.10554999999999,39.98611,0 67.02361000000001,40.03277,0 67.03471999999999,40.06888,0 66.9422,40.06333,0 66.93471,40.125,0 66.97998,40.17389,0 66.90860000000001,40.24804,0 66.88831999999999,40.47833,0 66.62003,40.49509,0 66.80525,40.76611,0 66.7664,40.88750000000001,0 66.63247,40.93888,0 66.60804,41.11333000000001,0 66.75305,41.11693,0 66.75949000000001,41.16484000000001,0 66.71998000000001,41.17499,0 66.56247999999999,41.71693,0 66.52638000000002,42.00305000000001,0 66.02916999999999,42.00305000000001,0 66.03665,42.42332,0 66.07079,42.42387,0 66.21886000000001,42.42361,0 67.01609999999999,42.8661,0 67.82971000000001,43.24944,0 67.77831000000001,43.27805,0 67.8111,43.30249000000001,0 67.7961,43.33749,0 67.74274,43.33693,0 67.72638000000001,43.35305000000001,0 67.75694,43.36055,0 67.72026,43.37276,0 67.6797,43.30249000000001,0 67.66199,43.37128,0 67.84221000000001,43.58804,0 67.84666,43.74749,0 67.97387000000001,43.69555,0 67.99026000000001,43.80555,0 67.94193,43.90527,0 67.96387000000001,43.94972,0 68.08277,44.00528,0 68.03525999999999,44.06888000000001,0 67.82887000000001,44.15971,0 67.765,44.23277,0 67.79832,44.26417,0 67.47887,44.36361,0 67.50360000000001,44.40028,0 67.50499000000001,45.16194,0 67.36275999999999,45.17916,0 67.17833,45.29341,0 67.24942,45.45778000000001,0 67.25333000000001,45.58389,0 67.35831,45.7711,0 67.31441,45.84720999999999,0 67.18192999999999,45.9411,0 67.16988000000001,45.99897000000001,0 67.15776,46.12944000000001,0 67.12168,46.16551,0 66.53555,46.14277,0 65.62943,46.18166000000001,0 65.27638,46.36306,0 65.11913,46.48082000000002,0 64.97026,46.47276,0 64.38889,46.69665000000001,0 63.41805000000001,46.92028000000001,0 63.08611,47.08972,0 62.69305000000001,47.04257,0 62.85190999999999,47.13889,0 63.14249,47.285,0 63.19526000000001,47.34083,0 64.01609999999999,47.72165,0 64.28915000000001,47.88832,0 64.13443,47.98499,0 64.01220000000001,48.15694,0 63.91554,48.23388,0 63.76111,48.45082,0 63.47083,48.53583,0 63.41499000000001,48.59249,0 63.09416,48.67943000000001,0 63.05693,48.72249,0 63.10055000000001,48.86055,0 62.97610000000001,48.91194,0 62.84722,48.84332000000001,0 62.56527,49.01082,0 62.46249,49.17638000000001,0 62.33611,49.19971,0 62.35665000000001,49.25944,0 62.54499000000001,49.25111,0 62.35027,49.46944000000001,0 62.30305,49.48638,0 62.37360000000001,49.56833,0 62.48417,49.54805000000001,0 62.45444,49.67888,0 62.59694,49.77999000000001,0 62.57667000000001,49.85277,0 62.73861,49.94778,0 62.90444,49.89415000000001,0 62.94083000000001,49.99138,0 62.86415,50.09777,0 62.71027,50.2122,0 62.69833,50.28305000000001,0 62.50833000000001,50.46805,0 62.38249,50.7225,0 62.25444000000001,50.68249,0 62.18916000000001,50.71000000000001,0 62.23583,50.74138,0 62.19276,50.80443000000001,0 62.42528,50.85695,0 62.78388,50.86056,0 62.86833000000001,50.82110999999999,0 62.93999,50.86555,0 63.13193,50.82222,0 63.20193,50.8772,0 63.265,50.82638000000002,0 63.81416,50.93859,0 64.09942,51.03916,0 64.34915000000001,50.87749000000001,0 64.25888000000001,50.75054999999999,0 64.18747999999999,50.7336,0 64.05998,50.57749,0 64.22553000000001,50.51416,0 64.25,50.54055,0 64.36461,50.51109,0 64.38943,50.55166,0 64.47837,50.58194000000001,0 64.47248999999999,50.63304999999999,0 64.56219,50.67888,0 64.60415999999999,50.65138000000002,0 64.69275,50.6711,0 64.73027,50.73805,0 64.81386999999999,50.78638,0 64.91553999999999,51.00805,0 64.81944,51.07222000000001,0 64.84972000000001,51.09664999999999,0 64.91415000000001,51.13972,0 64.97776,51.10333,0 65.20583000000001,51.17332,0 65.29498,51.16471,0 65.40694000000001,51.23166,0 65.30359,51.28221,0 65.21608999999999,51.24888000000001,0 65.13164999999999,51.28139000000002,0 64.88415999999999,51.47027,0 64.95444000000001,51.52694,0 64.94247,51.61306,0 65.01138,51.63777,0 64.95775999999999,51.74943,0 65.01666,51.82332,0 65.00888000000001,51.89249,0 64.925,51.90889,0 64.80609,52.02555,0 64.80138,52.12444,0 64.74887,52.12832,0 64.75166,52.18166999999999,0 65.05859,52.23165,0 65.04498,52.28027,0 65.46082,52.29639,0 65.58472,52.32777,0 65.58414999999999,52.38972,0 66.02887,52.45304000000001,0 66.05247,52.8186,0 66.13443,52.81998999999999,0 66.14360000000001,52.88610000000001,0 66.40886999999999,52.90331,0 66.41277,52.95222,0 66.07777,52.96305000000001,0 66.08194,53.06277,0 66.20359999999999,53.10443,0 66.40526,53.09972000000001,0 66.41443,53.1686,0 66.26639,53.19388000000001,0 66.26888,53.28277,0 66.25526000000001,53.48555,0 66.11165,53.49276,0 66.11775,53.63082,0 66.18304000000001,53.68249000000001,0 66.16499,53.78111,0 66.06581,53.79277,0 66.07581999999999,53.91526000000001,0 66.03610000000002,53.91805,0 66.00139,53.99471,0 66.21442,54.07694999999999,0 66.35693000000001,54.08444,0 66.27858000000001,54.19028,0 66.20610000000001,54.18333000000001,0 66.11803999999999,54.2375,0 66.21944000000001,54.28055,0 66.15358999999999,54.38055,0 66.16277,54.41945,0 66.1236,54.44500000000001,0 66.15192,54.48555,0 66.11304,54.5425,0 66.10831,54.64500000000002,0 66.49525,54.72304,0 66.72275999999999,54.72694,0 66.80887,54.76666,0 67.24552,54.80665,0 67.32277000000001,54.86749,0 67.58138,54.85443,0 67.76639000000002,54.89194,0 67.83223,54.96332000000001,0 67.9297,54.98332,0 68.03442,54.95027,0 68.20526,54.96609,0 68.25943,55.04888,0 68.33083000000001,55.08056,0 68.24444,55.10471,0 68.19971,55.17833000000001,0 68.30443,55.20527,0 68.62581,55.20192999999999,0 68.63889,55.25555,0 68.70499000000001,55.28667,0 68.73137,55.37055,0 68.87997,55.34276,0 68.93332,55.28611,0 69.00249,55.28749,0 69.00109999999999,55.35361,0 68.93941,55.37028000000001,0 68.9233,55.42416,0 68.95247999999999,55.44471,0 69.16831999999999,55.40054,0 69.18552,55.34388000000001,0 69.23276,55.3325,0 69.35138000000001,55.39443000000001,0 69.67276,55.35443,0 69.84610000000001,55.29500000000001,0 69.94914,55.20416,0 70.05582,55.20776999999999,0 70.23888,55.13888,0 70.28804,55.18721,0 70.39833,55.20917,0 70.46998000000001,55.29667000000001,0 70.50666,55.33777000000001,0 70.46608999999999,55.40499000000001,0 70.48775999999999,55.43859000000001,0 70.54915,55.49138,0 70.69664,55.50638,0 70.7636,55.59778,0 70.54693,55.67499,0 70.58360999999999,55.7961,0 70.78554,55.83306,0 70.75915999999999,55.86332,0 70.59138,55.83611000000001,0 70.47527,55.85222000000001,0 70.47415,55.89166000000001,0 70.80415000000001,55.92028000000001,0 70.91638,56.11055,0 70.81749000000001,56.17333,0 70.84027,56.25695,0 70.77222,56.25471000000001,0 70.76277,56.28667000000001,0 70.93359,56.34694,0 70.94136,56.41167000000001,0 70.86248999999999,56.46389000000001,0 70.78471999999999,56.43665,0 70.75972,56.46111000000001,0 70.85776,56.50305,0 70.95416,56.4911,0 71.09081999999999,56.55555,0 71.11913,56.64555,0 71.03306000000001,56.69221000000001,0 71.05582,56.71028,0 71.16665999999999,56.67138,0 71.34887000000001,56.66916,0 71.39388,56.68472,0 71.39695,56.73305,0 71.54082,56.71915000000001,0 71.58553000000001,56.79445,0 71.67554,56.82638,0 71.65860000000001,56.91470000000001,0 71.61304,56.95693,0 71.37082,57.06360999999999,0 71.23387,57.20027,0 71.09027,57.22055,0 71.14776999999999,57.25139000000001,0 71.09248,57.28999,0 71.10248,57.34083,0 70.81165,57.32804,0 70.75417,57.27749,0 70.78194000000001,57.19916,0 70.69443,57.19305,0 70.60971000000001,57.19916,0 70.65609000000001,57.26416,0 70.51721000000001,57.28695,0 70.42498999999999,57.38916,0 70.68747999999999,57.51445,0 70.69108,57.56666,0 70.66721,57.59276,0 70.57720999999999,57.57861,0 70.57443000000001,57.70916,0 70.49887,57.7075,0 70.48387,57.76777,0 70.42554,57.76639,0 70.44171,57.83843000000001,0 70.37864999999999,57.91712,0 70.43691,57.9336,0 70.87302,58.5425,0 71.07888,58.5286,0 71.11998,58.44887,0 71.30387,58.39749000000001,0 71.24721,58.3561,0 71.21915,58.14695,0 71.24887,58.12194,0 71.23859,58.07111,0 71.98888,58.12471,0 72.07055,58.09415,0 72.12164,58.02304000000001,0 72.87221,58.0061,0 72.96915,58.06055,0 72.93858,58.08749000000001,0 73.08443,58.14916,0 74.20638,58.13361,0 74.45499,58.25861,0 74.62053,58.29361000000001,0 74.62665000000001,58.33915,0 74.79998999999999,58.42694,0 74.87608,58.42722,0 74.89166,58.47776,0 75.10526,58.58111,0 75.35554999999999,58.47277,0 75.05415000000001,58.3447,0 75.2397,58.21998,0 + + + 1 + + + + + +82.27669,74.95653,0 82.27669,73.92335,0 77.53673000000001,73.93346,0 72.53674,73.94411,0 67.53675,73.95477,0 67.53675,76.19176,0 68.31331,76.28333000000001,0 68.16943999999999,76.31805,0 68.33333,76.33582,0 68.43941,76.38972,0 68.40109,76.40609000000001,0 68.57971000000001,76.43304999999999,0 68.92554,76.55888,0 68.78471999999999,76.58778,0 68.85637,76.65665,0 69.03027000000002,76.70802999999999,0 68.90054000000001,76.72776,0 68.89361,76.75749,0 68.93137,76.78276,0 68.75443,76.82222,0 68.80942,76.86638000000002,0 68.47275999999999,76.92554,0 68.50082,76.95638,0 67.53675,77.00954,0 67.53675,81.66452,0 68.67328999999999,82.13631,0 73.29124,84.05318,0 77.9092,85.97008,0 82.52717,87.88696,0 82.52717,89.90000000000001,0 83.52695,89.90000000000001,0 84.52673000000002,89.90000000000001,0 85.52652000000001,89.90000000000001,0 86.52631000000001,89.90000000000001,0 87.52609,89.90000000000001,0 88.52588000000002,89.90000000000001,0 89.52567000000001,89.90000000000001,0 90.52546,89.90000000000001,0 91.52525,89.90000000000001,0 92.52502000000001,89.90000000000001,0 93.52481,89.90000000000001,0 94.52460000000001,89.90000000000001,0 95.52439,89.90000000000001,0 96.52417000000001,89.90000000000001,0 97.52396,89.90000000000001,0 97.52396,84.90001,0 97.52396,83.39419,0 92.52396,83.38905,0 87.52397000000001,83.3839,0 82.52397000000001,83.37876,0 82.30801,83.37854000000002,0 82.30801,78.37854,0 82.30801,76.45934,0 82.84025,76.36541,0 83.27856,76.17757,0 83.49773000000002,75.83316000000002,0 83.37249,75.30092999999999,0 82.90286,74.98784000000001,0 82.27669,74.95653,0 + + + 1 + + + + + GMT +06:30 + + +]]> + #khStyle0650 + + + + + +97.51384,-11.2595,0 97.51384,-13.93535,0 93.69904000000001,-13.93192,0 93.69904000000001,-11.2595,0 97.51384,-11.2595,0 + + + 1 + + + + + +97.56944,28.54888,0 97.63136,28.48416,0 97.71138000000001,28.51694,0 97.79694000000001,28.34916,0 97.90886999999999,28.37638,0 98.01888,28.27832,0 98.01304,28.21472,0 98.06944,28.21138,0 98.13621999999999,28.15632,0 98.15776,28.11333,0 98.13082,27.96916,0 98.20387000000001,27.91638,0 98.16692000000001,27.87055,0 98.23248,27.82471,0 98.22693000000002,27.73471,0 98.31638,27.54194,0 98.36887,27.52944,0 98.40860000000001,27.55750000000002,0 98.43248000000001,27.68944,0 98.52164999999999,27.64667,0 98.55110000000001,27.66693,0 98.59471000000002,27.59971000000001,0 98.66804999999999,27.61944,0 98.70471000000001,27.5825,0 98.68552,27.46611,0 98.73665,27.32917000000001,0 98.69166,27.20193,0 98.70694,27.09778,0 98.76221,27.06445,0 98.7397,26.86416,0 98.77777,26.79167,0 98.75555,26.72417,0 98.77554000000001,26.60583000000002,0 98.73748999999999,26.38694,0 98.66582,26.26056000000001,0 98.70110000000001,26.25195,0 98.73055000000002,26.17722,0 98.66443,26.09833,0 98.64888000000001,26.15166,0 98.56805,26.12306,0 98.60525,25.98861,0 98.64166,25.98444,0 98.71638000000002,25.87749,0 98.63193,25.80111,0 98.53083,25.84555,0 98.39166,25.65666,0 98.38305,25.59195,0 98.32665000000002,25.55167000000001,0 98.16526,25.62277,0 98.16804999999999,25.55027,0 98.12497999999999,25.50584,0 98.1386,25.38694,0 98.10746,25.38722,0 98.06944,25.31444,0 97.94108000000001,25.21416,0 97.83333,25.25916000000001,0 97.78943,25.1375,0 97.72331000000003,25.06944,0 97.72581,25.06472,0 97.73665000000003,24.91888,0 97.80025999999999,24.85139,0 97.68941000000001,24.83445,0 97.55247,24.74304,0 97.56248000000001,24.57111,0 97.53082000000001,24.44749,0 97.66526,24.44416,0 97.71776000000001,24.35833,0 97.66888,24.34166000000001,0 97.6647,24.3061,0 97.74165000000002,24.29027,0 97.75999000000002,24.2575,0 97.72749,24.22499,0 97.74970999999999,24.16999,0 97.72470000000001,24.11806,0 97.53637000000001,23.95056,0 97.64998,23.8517,0 97.78831,23.94888,0 97.85249000000002,23.95832,0 97.91249000000001,24.02666,0 98.06448,24.0891,0 98.22078000000001,24.12531,0 98.35732000000002,24.10319000000001,0 98.44659000000002,24.13496,0 98.54462,24.1257,0 98.59703,24.07648,0 98.89072,24.16008,0 98.89391000000001,24.09795,0 98.67720000000001,23.96805,0 98.70387000000002,23.95138,0 98.68858000000002,23.80139000000001,0 98.81554000000001,23.76722,0 98.81915000000001,23.70556,0 98.88582,23.61333000000001,0 98.80609000000001,23.54167,0 98.82471000000001,23.48083,0 98.87997,23.4836,0 98.91470000000001,23.41722,0 98.91859000000001,23.36472,0 98.87886,23.32972,0 98.94025000000002,23.31361,0 98.88136,23.18805,0 99.05888,23.1675,0 99.06137000000001,23.12361,0 99.11109999999999,23.10194,0 99.35638,23.13499,0 99.50388,23.08972,0 99.56638000000001,22.93805,0 99.51416,22.91222000000001,0 99.44553000000003,22.94972,0 99.44053,22.865,0 99.32805000000001,22.74472,0 99.38499,22.60333,0 99.38442000000001,22.50389,0 99.26082,22.39111,0 99.27054,22.34777,0 99.18221000000001,22.195,0 99.20055000000001,22.17333,0 99.16277,22.15916,0 99.23248,22.11444,0 99.35942,22.09306,0 99.46555000000002,22.13583,0 99.52164999999999,22.1,0 99.64444,22.09917,0 99.70914999999999,22.03972,0 99.74915,22.07527,0 99.84388,22.02332,0 99.88055,22.06145,0 99.96805000000002,22.05027,0 99.99054,21.95833,0 99.94193000000001,21.825,0 99.97360000000001,21.73388,0 100.0022,21.69611,0 100.125,21.69056000000001,0 100.1719,21.65388,0 100.1061,21.58333,0 100.1239,21.50472,0 100.2039,21.43535,0 100.3789,21.53889,0 100.43,21.52861,0 100.485,21.45833,0 100.6667,21.47943,0 100.8867,21.68333,0 101.1053,21.77138,0 101.1686,21.63028,0 101.1482,21.57264,0 101.1617,21.53056,0 100.9975,21.39583,0 100.8347,21.3025,0 100.7226,21.30771,0 100.6719,21.12806,0 100.6214,21.05167,0 100.5455,21.02527,0 100.52,20.94943,0 100.5255,20.87111,0 100.6336,20.89154,0 100.6472,20.87056,0 100.5319,20.80527,0 100.3689,20.82694,0 100.2539,20.74555,0 100.1753,20.63527,0 100.0914,20.34861,0 99.95914000000001,20.45527,0 99.86997000000001,20.42722,0 99.80914,20.33638,0 99.67360000000001,20.31083,0 99.45610000000002,20.38861,0 99.55525000000003,20.20667,0 99.53887,20.14943,0 99.32555000000001,20.06611,0 99.18388,20.12805,0 99.07639,20.0975,0 99.04082,20.03722,0 99.02970999999999,19.82888000000001,0 98.91388000000001,19.74638,0 98.83693000000002,19.81639,0 98.77554000000001,19.75889,0 98.64915000000001,19.74193,0 98.56165,19.67527,0 98.50971,19.71249,0 98.25360000000002,19.67305,0 98.23859,19.72222,0 98.04998999999999,19.8075,0 98.03498,19.64389,0 97.86908,19.57018,0 97.87665,19.49528,0 97.79248,19.40194,0 97.83720000000001,19.29888,0 97.78831,19.27695,0 97.84180000000002,19.2071,0 97.83638000000001,19.1011,0 97.6772,18.93416,0 97.74776,18.86556,0 97.7747,18.57,0 97.62415000000003,18.55445,0 97.52692,18.48917,0 97.44247000000001,18.49722,0 97.36229,18.57965,0 97.34749000000001,18.53889,0 97.49444000000001,18.2825,0 97.53580000000001,18.26861,0 97.56359999999999,18.32777,0 97.64305000000002,18.29027,0 97.61803999999999,18.23138,0 97.68665,18.14666,0 97.69136000000002,18.05806,0 97.75193000000003,17.97222,0 97.68665,17.86444,0 97.77442000000001,17.75083,0 97.77831999999999,17.70332,0 98.01470999999999,17.50639,0 98.05304,17.41583,0 98.11554,17.37611,0 98.11887,17.31388,0 98.24249000000002,17.21861,0 98.33582000000001,17.05556,0 98.42359,17.05333,0 98.48831,16.98194,0 98.54998999999999,16.85471,0 98.51972000000002,16.86777,0 98.54665,16.80777,0 98.47776000000002,16.73499,0 98.53360000000001,16.64167,0 98.58028,16.62027,0 98.58998,16.55333,0 98.66249000000001,16.46027,0 98.68970000000002,16.285,0 98.71581000000002,16.27638,0 98.81441,16.37582,0 98.86081,16.47527,0 98.86749000000003,16.43416,0 98.92638,16.39111,0 98.91859000000001,16.26861,0 98.86331,16.21471,0 98.85276000000003,16.13416000000001,0 98.80803000000002,16.10305,0 98.69275000000002,16.12832,0 98.63805000000002,16.04721,0 98.57249,16.05166,0 98.61749000000002,15.97,0 98.59055000000001,15.92389,0 98.60999,15.86695,0 98.56526000000001,15.72277,0 98.57557,15.66188,0 98.59636999999999,15.45834,0 98.56999,15.33667,0 98.49748,15.38778,0 98.42249,15.36,0 98.41361000000001,15.26,0 98.31026,15.30305,0 98.2664,15.23555,0 98.20139,15.22083,0 98.21721000000001,15.1775,0 98.18442,15.09916,0 98.23442,15.04695,0 98.21388,15.00333,0 98.25499000000002,14.92083,0 98.25999,14.81666,0 98.44775000000001,14.60583,0 98.4772,14.52805,0 98.50221000000003,14.53139,0 98.61691999999999,14.31916,0 98.73109,14.27777,0 98.75972000000003,14.2175,0 98.97165,14.08361,0 99.03276,13.93777,0 99.11942999999999,13.87861,0 99.12776,13.77361,0 99.18054000000001,13.7125,0 99.17054,13.57111,0 99.21720999999999,13.40583,0 99.21278000000001,13.21611,0 99.12082,13.17583,0 99.11219,13.05584,0 99.19166000000001,12.97444,0 99.17859000000001,12.9175,0 99.24526,12.72361,0 99.43623,12.57444,0 99.41249000000001,12.46639,0 99.49970999999999,12.18833,0 99.47331,12.13389,0 99.57332000000002,12.13666,0 99.54526000000001,12.04555,0 99.59444000000002,11.99695,0 99.58942999999999,11.8725,0 99.66165000000001,11.82694,0 99.63581000000001,11.73361,0 99.56193000000002,11.63056,0 99.46776,11.60972,0 99.46887,11.52,0 99.40470999999999,11.45166,0 99.40054000000001,11.38416,0 99.33028,11.32222,0 99.23750000000003,11.10945,0 99.10664,11.01,0 99.08167,10.95139,0 99.02027,10.96333,0 99.00694,10.83195,0 98.91304,10.80972,0 98.7872,10.68222,0 98.77388999999999,10.61695,0 98.82388,10.51666,0 98.74275,10.34861,0 98.55254000000001,9.983105999999999,0 98.53130000000002,9.91836,0 98.45473,9.958472,0 98.19220000000001,9.911070000000001,0 98.11197,9.688651999999999,0 97.9479,9.590201,0 97.9953,9.819918000000001,0 98.10104000000001,9.932957999999999,0 98.16302000000002,10.06057,0 98.14115,10.11526,0 98.07916,10.10797,0 97.97341,10.02046,0 97.93331000000001,10.07151,0 97.96977000000001,10.31945,0 97.87497000000001,10.3778,0 97.88226,10.50542,0 97.93696,10.57105,0 98.20678,10.69868,0 98.14843999999999,10.84087,0 98.09374,10.819,0 97.95882,10.85181,0 97.86767999999999,10.81534,0 97.87132,10.89922,0 97.89686,10.94297,0 98.29064000000001,11.04142,0 98.19584,11.3003,0 98.11562000000001,11.36958,0 97.95882,11.39511,0 97.95882,11.46803,0 98.04635000000002,11.61752,0 97.98801,11.6941,0 97.97707,11.83266,0 97.48117000000001,11.7488,0 97.42283000000001,11.81078,0 97.71453000000003,12.19182,0 97.75829,12.29392,0 97.80204999999999,12.458,0 97.82026999999999,12.82627,0 98.24323000000001,12.98124,0 98.06093,13.72507,0 97.89319999999999,13.76518,0 97.88955000000003,13.9475,0 97.76558,14.16262,0 97.79111,14.22826,0 97.75100000000001,14.40693,0 97.90778000000002,14.53273,0 97.78746000000001,14.84631,0 97.75100000000001,15.20729,0 97.70359999999999,15.28751,0 97.71453000000003,15.40054,0 97.63795,15.48805,0 97.63068,15.5938,0 97.69629999999999,15.69954,0 97.68902000000001,15.88368,0 97.56868,15.98212,0 97.56868,16.15714,0 97.45565000000001,16.31758,0 97.41919,16.4379,0 97.34990999999999,16.47072,0 97.31709000000001,16.60199,0 97.21863999999999,16.76607,0 97.16030000000001,16.80983,0 96.92329000000001,16.81347,0 96.83213000000002,16.76972,0 96.77744000000001,16.67857,0 96.60242000000001,16.52907,0 96.06641999999999,16.28112,0 95.97891000000001,16.19361,0 95.86951000000001,16.18266,0 95.7346,16.06963,0 95.70179000000002,15.95296,0 95.43562,15.71047,0 95.32623000000001,15.68495,0 94.71001000000001,15.79069,0 94.53134,15.94019,0 94.49487000000001,15.93654,0 94.41101000000001,15.80893,0 94.37090000000002,15.93654,0 94.33808000000001,15.95842,0 94.24328,15.92924,0 94.17400000000001,16.0277,0 94.23962000000002,16.54183,0 94.32715000000003,16.65121,0 94.35996000000002,16.89915,0 94.43653000000001,16.99761,0 94.43288000000001,17.19451,0 94.54227,17.3677,0 94.5204,17.71045,0 94.47664,17.7615,0 94.4183,17.9584,0 94.45112,18.07508,0 94.39643,18.20634,0 94.30162,18.22458,0 94.33079000000001,18.3595,0 94.15577,18.68948,0 94.08649,18.72959,0 93.99169000000001,18.7077,0 93.76926,18.59103,0 93.63070999999999,18.66396,0 93.46298000000003,18.87544,0 93.61612000000001,18.93379,0 93.65987,19.02129,0 93.46662000000001,19.33487,0 93.47028,19.42239,0 93.52132,19.47342,0 93.3937,19.72502,0 93.42287,19.80888,0 93.38276999999999,19.90186,0 93.33535999999999,19.93833,0 93.27337,19.93468,0 93.25879000000002,19.81435,0 93.16398000000001,19.78154,0 93.08742,19.81435,0 93.00718999999999,19.80706,0 92.85404,20.1097,0 92.76654000000001,20.17898,0 92.62797999999999,20.40141,0 92.37385999999999,20.70083,0 92.26194,21.05431,0 92.19859000000001,21.15417,0 92.19220000000001,21.32444,0 92.25305000000002,21.3725,0 92.26555000000002,21.42333,0 92.31667,21.42138,0 92.37691,21.47416,0 92.42747000000001,21.37472,0 92.55359,21.37361,0 92.59554000000001,21.25194,0 92.66935000000002,21.29698,0 92.60027000000001,21.63416,0 92.62164,21.87583,0 92.60081,21.98222000000001,0 92.67970000000001,22.02694,0 92.71192000000002,22.15972,0 92.86554,22.04888,0 92.89639,21.95472,0 92.94304000000001,22.02833,0 92.99638000000003,21.99278,0 93.00972000000003,22.1075,0 93.05276000000001,22.11889,0 93.04414000000001,22.20194,0 93.15387,22.18666,0 93.14249,22.23694,0 93.19664000000002,22.25638,0 93.18055,22.44055,0 93.11859,22.53333,0 93.13638,22.59444,0 93.09722000000001,22.66528,0 93.09822000000001,22.79037,0 93.16137000000001,22.91945,0 93.13805000000004,23.04805,0 93.20139,23.05889,0 93.22915999999999,23.01333,0 93.29359000000001,23.00889000000002,0 93.38666000000001,23.14027000000002,0 93.36609,23.34945,0 93.40331999999999,23.37806,0 93.43346,23.67889,0 93.40138,23.73582,0 93.38443,23.92138,0 93.32805000000001,23.98166,0 93.3279,24.03597,0 93.34207000000001,24.0818,0 93.38293,24.08935,0 93.49359,23.96277,0 93.59636999999999,23.97222,0 93.62136,24.01611000000001,0 93.75332,24.0075,0 93.81914999999999,23.93527,0 93.92666,23.95583,0 94.14444,23.84778,0 94.38915,24.48,0 94.51470999999999,24.61945,0 94.53859000000001,24.70888,0 94.59777,24.72528000000001,0 94.73442,25.02472,0 94.72859,25.13638,0 94.59943,25.17833,0 94.57639000000002,25.21444,0 94.62553000000001,25.39777,0 94.66165000000001,25.42804,0 94.88527000000001,25.57222000000001,0 94.99193,25.72916,0 95.03387000000002,25.74222,0 95.02222,25.92861,0 95.08665000000001,25.95556,0 95.17804,26.05889,0 95.11331,26.10916,0 95.12082,26.20166,0 95.08389000000003,26.22277,0 95.06526,26.32556,0 95.09526,26.41,0 95.06638,26.47972,0 95.14777000000001,26.56583,0 95.15248000000001,26.62333,0 95.24638,26.67972,0 95.2711,26.64472,0 95.44108,26.70916,0 95.51944,26.82306,0 95.61081,26.82139,0 95.65804000000001,26.89528,0 95.71775000000001,26.89138,0 95.80386,27.00111,0 95.93082,27.04611,0 96.03581,27.19249,0 96.19414999999999,27.27084,0 96.52415000000002,27.29416,0 96.60999,27.36694,0 96.66025999999999,27.33916,0 96.72915999999999,27.36555,0 96.88416000000001,27.25472,0 96.86137000000001,27.21028,0 96.88831999999999,27.17805,0 97.05974000000001,27.093,0 97.14444000000002,27.09249,0 97.15888,27.13861,0 97.12636999999999,27.19083,0 96.89999000000002,27.46861000000001,0 96.91804999999999,27.50527,0 96.88889,27.6175,0 97.04665,27.74972,0 97.08389,27.7486,0 97.24942,27.9075,0 97.29916,27.91667,0 97.31721,27.87833,0 97.36775,27.89666,0 97.39413999999999,28.01861,0 97.31608000000001,28.08916,0 97.34887000000002,28.22278,0 97.41054,28.2925,0 97.46887000000001,28.29611,0 97.47083000000001,28.39111,0 97.56944,28.54888,0 + + + 1 + + + + + GMT +07:00 + + +]]> + #khStyle0700 + + + + + +105.3275,23.37803,0 105.398,23.28167,0 105.4458,23.28445,0 105.5544,23.16028,0 105.5657,23.09678,0 105.5775,23.05916,0 105.7244,23.04805,0 105.8725,22.91027,0 105.9872,22.93583,0 106.0153,22.98472,0 106.1347,22.98861,0 106.2294,22.95083,0 106.25,22.87416,0 106.285,22.8586,0 106.4194,22.87056,0 106.5203,22.93528,0 106.6005,22.90917,0 106.648,22.85333,0 106.7072,22.865,0 106.7614,22.79471,0 106.8217,22.80028,0 106.7669,22.74249,0 106.7128,22.58666,0 106.6761,22.57277,0 106.6386,22.61416,0 106.6072,22.60695,0 106.5517,22.45682,0 106.5655,22.34583,0 106.6583,22.32444,0 106.6958,22.2225,0 106.6653,22.19944,0 106.7033,22.08972,0 106.6794,21.97389,0 106.7553,22.01527000000001,0 106.8086,21.97361,0 106.9017,21.97056,0 106.9327,21.92749,0 107.0292,21.93666,0 107.0491,21.90722,0 107.0203,21.8225,0 107.2208,21.70832,0 107.3014,21.73111,0 107.3627,21.60526,0 107.4578,21.65833,0 107.4858,21.59778,0 107.5361,21.58638,0 107.7831,21.66693,0 107.8586,21.65083,0 107.948,21.54195,0 107.99,21.54241,0 108.0824,21.49174,0 108.0038,21.44677,0 107.9893,21.3862,0 107.9865,18.50449,0 110.1489,14.71173,0 112.5137,14.71173,0 112.5076,9.711738,0 112.5034,6.222851,0 107.5034,6.229232,0 102.5034,6.235613,0 102.0952,6.236135,0 102.0916,6.110559,0 101.9483,5.969448,0 101.9438,5.861942,0 101.8339,5.743340000000001,0 101.7625,5.788889,0 101.6916,5.763608,0 101.6589,5.860557,0 101.57,5.916663,0 101.3516,5.808339,0 101.2897,5.810553,0 101.2561,5.705837,0 101.1458,5.631111,0 100.9902,5.788053,0 101.0358,5.896106,0 101.1014,5.92695,0 101.1194,5.984441,0 101.12,6.098337,0 101.0755,6.150555,0 101.1216,6.187221,0 101.1155,6.248888000000001,0 101.0333,6.243894,0 100.9897,6.277500000000001,0 100.9514,6.239717000000001,0 100.8575,6.234444,0 100.8336,6.419447,0 100.7655,6.451946,0 100.7542,6.501942,0 100.6611,6.4475,0 100.4989,6.523056000000001,0 100.3875,6.536106,0 100.3344,6.586946000000001,0 100.2939,6.703892,0 100.1958,6.702497,0 100.1714,6.476660000000001,0 100.1271,6.424946000000001,0 99.84238000000002,6.479837,0 99.63088000000001,6.427682,0 99.64923,6.352362,0 99.72359,6.164054,0 100.1668,5.375079,0 100.1688,5.261129,0 100.3311,5.074793,0 100.4195,4.901795,0 100.5095,4.824638,0 100.5673,4.663917,0 100.5031,3.976011000000001,0 100.9499,3.657770000000001,0 101.1781,3.345965,0 101.2874,3.114522,0 101.2167,3.040577,0 101.2038,2.93129,0 101.2906,2.815568,0 101.416,2.786633,0 101.5188,2.654846,0 101.7567,2.561625,0 101.8371,2.442689,0 101.8499,2.362329,0 101.9303,2.391254,0 102.1489,2.208024,0 102.3418,2.134089,0 102.5378,2.01195,0 102.6921,1.831931,0 102.8175,1.831931,0 102.9461,1.719422,0 103.2097,1.584413,0 103.2418,1.45583,0 103.4122,1.301534,0 103.5311,1.234025,0 103.7561,1.185812,0 103.9265,1.256534,0 104.3122,1.346534,0 105.132,2.002301,0 105.1191,4.869648,0 109.3237,4.869648,0 109.3237,1.966571,0 109.2409,1.725713,0 109.0775,1.576584,0 109.0278,1.491362,0 109.0278,1.363535,0 108.9071,1.1789,0 108.9071,1.086578,0 108.7438,0.8593374000000001,0 108.6657,0.8522364,0 108.6586,0.7457215000000002,0 108.829,0.4758655000000001,0 108.8929,0.2912305000000001,0 109.0775,0.2344225,0 109.113,0.02848446,0 109.0207,-0.2484725,0 109.106,-0.5467235,0 109.2622,-0.9018005000000001,0 109.4255,-1.022518,0 109.39,-1.285273,0 109.461,-1.349182,0 109.7664,-1.207152,0 110.0433,-1.363393,0 109.9865,-1.682947,0 109.8942,-1.746865,0 109.8729,-1.839177,0 109.9297,-1.917289,0 110.0504,-1.952803,0 110.093,-2.030923,0 110.0717,-2.258163,0 110.1143,-2.499607,0 110.0646,-2.925694000000001,0 110.1712,-3.032208,0 110.3061,-3.060612,0 110.5049,-2.996703999999999,0 110.6754,-3.138724,0 110.7819,-3.103219000000001,0 110.9097,-3.138724,0 111.0162,-3.124531,0 111.3358,-3.032208,0 111.7761,-3.074815,0 111.7903,-3.387277000000001,0 111.7335,-3.536407,0 111.7903,-3.600316,0 111.9465,-3.62872,0 112.2021,-3.4867,0 112.5075,-3.479589,0 112.5004,-5.205232,0 116.3209,-5.205232,0 116.3209,-7.548669,0 115.767,-7.548669,0 115.767,-9.636480000000001,0 112.5004,-9.636480000000001,0 112.5004,-14.63648,0 112.5004,-19.63648,0 112.5004,-24.63648,0 112.5004,-29.63648,0 112.5004,-34.63648,0 112.5004,-39.63649,0 112.5004,-39.73648000000001,0 112.5004,-44.73647,0 112.5004,-49.73648,0 112.5004,-54.73646999999999,0 112.5004,-59.43648,0 112.5004,-64.43649000000001,0 112.5004,-69.43648000000002,0 112.5004,-74.43648,0 112.5004,-79.43648,0 112.5004,-84.43648,0 112.5004,-89.43648,0 112.5004,-89.90000000000001,0 111.5013,-89.90000000000001,0 110.5022,-89.90000000000001,0 109.5031,-89.90000000000001,0 108.504,-89.90000000000001,0 107.5049,-89.90000000000001,0 106.5058,-89.90000000000001,0 105.5067,-89.90000000000001,0 104.5076,-89.90000000000001,0 103.5085,-89.90000000000001,0 102.5094,-89.90000000000001,0 101.5103,-89.90000000000001,0 100.5111,-89.90000000000001,0 99.51205,-89.90000000000001,0 98.51294,-89.90000000000001,0 97.51384,-89.90000000000001,0 97.51384,-84.89999,0 97.51384,-79.90000000000001,0 97.51384,-74.90000000000001,0 97.51384,-69.90000000000001,0 97.51384,-64.90000000000001,0 97.51384,-63.73534,0 97.51384,-58.73533,0 97.51384,-53.73534000000002,0 97.51384,-48.73533,0 97.51384,-44.73534,0 97.51384,-39.73533000000001,0 97.51384,-34.73534,0 97.51384,-29.73533,0 97.51384,-24.73534,0 97.51384,-19.73534,0 97.51384,-14.73534,0 97.51384,-13.93535,0 97.51384,-11.2595,0 97.51384,-6.259501,0 97.51384,-1.259497,0 97.51384,-0.5628515,0 94.60397,3.503177,0 92.9025,5.880672000000001,0 94.5928,5.880672000000001,0 94.59142,10.23029,0 94.58984000000001,15.23029,0 90.33015,15.23029,0 90.32641000000001,18.56566,0 92.31895,20.729,0 92.33333,20.76416,0 92.26331999999999,20.91916000000001,0 92.26194,21.05431,0 92.37385999999999,20.70083,0 92.62797999999999,20.40141,0 92.76654000000001,20.17898,0 92.85404,20.1097,0 93.00718999999999,19.80706,0 93.08742,19.81435,0 93.16398000000001,19.78154,0 93.25879000000002,19.81435,0 93.27337,19.93468,0 93.33535999999999,19.93833,0 93.38276999999999,19.90186,0 93.42287,19.80888,0 93.3937,19.72502,0 93.52132,19.47342,0 93.47028,19.42239,0 93.46662000000001,19.33487,0 93.65987,19.02129,0 93.61612000000001,18.93379,0 93.46298000000003,18.87544,0 93.63070999999999,18.66396,0 93.76926,18.59103,0 93.99169000000001,18.7077,0 94.08649,18.72959,0 94.15577,18.68948,0 94.33079000000001,18.3595,0 94.30162,18.22458,0 94.39643,18.20634,0 94.45112,18.07508,0 94.4183,17.9584,0 94.47664,17.7615,0 94.5204,17.71045,0 94.54227,17.3677,0 94.43288000000001,17.19451,0 94.43653000000001,16.99761,0 94.35996000000002,16.89915,0 94.32715000000003,16.65121,0 94.23962000000002,16.54183,0 94.17400000000001,16.0277,0 94.24328,15.92924,0 94.33808000000001,15.95842,0 94.37090000000002,15.93654,0 94.41101000000001,15.80893,0 94.49487000000001,15.93654,0 94.53134,15.94019,0 94.71001000000001,15.79069,0 95.32623000000001,15.68495,0 95.43562,15.71047,0 95.70179000000002,15.95296,0 95.7346,16.06963,0 95.86951000000001,16.18266,0 95.97891000000001,16.19361,0 96.06641999999999,16.28112,0 96.60242000000001,16.52907,0 96.77744000000001,16.67857,0 96.83213000000002,16.76972,0 96.92329000000001,16.81347,0 97.16030000000001,16.80983,0 97.21863999999999,16.76607,0 97.31709000000001,16.60199,0 97.34990999999999,16.47072,0 97.41919,16.4379,0 97.45565000000001,16.31758,0 97.56868,16.15714,0 97.56868,15.98212,0 97.68902000000001,15.88368,0 97.69629999999999,15.69954,0 97.63068,15.5938,0 97.63795,15.48805,0 97.71453000000003,15.40054,0 97.70359999999999,15.28751,0 97.75100000000001,15.20729,0 97.78746000000001,14.84631,0 97.90778000000002,14.53273,0 97.75100000000001,14.40693,0 97.79111,14.22826,0 97.76558,14.16262,0 97.88955000000003,13.9475,0 97.89319999999999,13.76518,0 98.06093,13.72507,0 98.24323000000001,12.98124,0 97.82026999999999,12.82628,0 97.80204999999999,12.458,0 97.75829,12.29392,0 97.71453000000003,12.19182,0 97.42283000000001,11.81078,0 97.48117000000001,11.7488,0 97.97707,11.83266,0 97.98801,11.6941,0 98.04635000000002,11.61752,0 97.95882,11.46803,0 97.95882,11.39511,0 98.11562000000001,11.36958,0 98.19584,11.3003,0 98.29064000000001,11.04142,0 97.89686,10.94297,0 97.87132,10.89922,0 97.86767999999999,10.81534,0 97.95882,10.85181,0 98.09374,10.819,0 98.14843999999999,10.84087,0 98.20678,10.69868,0 97.93696,10.57105,0 97.88226,10.50542,0 97.87497000000001,10.3778,0 97.96977000000001,10.31945,0 97.93331000000001,10.07151,0 97.97341,10.02046,0 98.07916,10.10797,0 98.14115,10.11526,0 98.16302000000002,10.06057,0 98.10104000000001,9.932957999999999,0 97.9953,9.819918000000001,0 97.9479,9.590201,0 98.11197,9.688651999999999,0 98.19220000000001,9.911070000000001,0 98.45473,9.958472,0 98.53130000000002,9.91836,0 98.55254000000001,9.983105999999999,0 98.74275,10.34861,0 98.82388,10.51666,0 98.77388999999999,10.61695,0 98.7872,10.68222,0 98.91304,10.80972,0 99.00694,10.83195,0 99.02027,10.96333,0 99.08167,10.95139,0 99.10664,11.01,0 99.23750000000003,11.10945,0 99.33028,11.32222,0 99.40054000000001,11.38416,0 99.40470999999999,11.45166,0 99.46887,11.52,0 99.46776,11.60972,0 99.56193000000002,11.63056,0 99.63581000000001,11.73361,0 99.66165000000001,11.82694,0 99.58942999999999,11.8725,0 99.59444000000002,11.99695,0 99.54526000000001,12.04555,0 99.57332000000002,12.13666,0 99.47331,12.13389,0 99.49970999999999,12.18833,0 99.41249000000001,12.46639,0 99.43623,12.57444,0 99.24526,12.72361,0 99.17859000000001,12.9175,0 99.19166000000001,12.97444,0 99.11219,13.05584,0 99.12082,13.17583,0 99.21278000000001,13.21611,0 99.21720999999999,13.40583,0 99.17054,13.57111,0 99.18054000000001,13.7125,0 99.12776,13.77361,0 99.11942999999999,13.87861,0 99.03276,13.93777,0 98.97165,14.08361,0 98.75972000000003,14.2175,0 98.73109,14.27777,0 98.61691999999999,14.31916,0 98.50221000000003,14.53139,0 98.4772,14.52805,0 98.44775000000001,14.60583,0 98.25999,14.81666,0 98.25499000000002,14.92083,0 98.21388,15.00333,0 98.23442,15.04695,0 98.18442,15.09916,0 98.21721000000001,15.1775,0 98.20139,15.22083,0 98.2664,15.23555,0 98.31026,15.30305,0 98.41361000000001,15.26,0 98.42249,15.36,0 98.49748,15.38778,0 98.56999,15.33667,0 98.59636999999999,15.45834,0 98.57557,15.66188,0 98.56526000000001,15.72277,0 98.60999,15.86695,0 98.59055000000001,15.92389,0 98.61749000000002,15.97,0 98.57249,16.05166,0 98.63805000000002,16.04721,0 98.69275000000002,16.12832,0 98.80803000000002,16.10305,0 98.85276000000003,16.13416000000001,0 98.86331,16.21471,0 98.91859000000001,16.26861,0 98.92638,16.39111,0 98.86749000000003,16.43416,0 98.86081,16.47527,0 98.81441,16.37582,0 98.71581000000002,16.27638,0 98.68970000000002,16.285,0 98.66249000000001,16.46027,0 98.58998,16.55333,0 98.58028,16.62027,0 98.53360000000001,16.64167,0 98.47776000000002,16.73499,0 98.54665,16.80777,0 98.51972000000002,16.86777,0 98.54998999999999,16.85471,0 98.48831,16.98194,0 98.42359,17.05333,0 98.33582000000001,17.05556,0 98.24249000000002,17.21861,0 98.11887,17.31388,0 98.11554,17.37611,0 98.05304,17.41583,0 98.01470999999999,17.50639,0 97.77831999999999,17.70332,0 97.77442000000001,17.75083,0 97.68665,17.86444,0 97.75193000000003,17.97222,0 97.69136000000002,18.05806,0 97.68665,18.14666,0 97.61803999999999,18.23138,0 97.64305000000002,18.29027,0 97.56359999999999,18.32777,0 97.53580000000001,18.26861,0 97.49444000000001,18.2825,0 97.34749000000001,18.53889,0 97.36229,18.57965,0 97.44247000000001,18.49722,0 97.52692,18.48917,0 97.62415000000003,18.55445,0 97.7747,18.57,0 97.74776,18.86556,0 97.6772,18.93416,0 97.83638000000001,19.1011,0 97.84180000000002,19.2071,0 97.78831,19.27695,0 97.83720000000001,19.29888,0 97.79248,19.40194,0 97.87665,19.49528,0 97.86908,19.57018,0 98.03498,19.64389,0 98.04998999999999,19.8075,0 98.23859,19.72222,0 98.25360000000002,19.67305,0 98.50971,19.71249,0 98.56165,19.67527,0 98.64915000000001,19.74193,0 98.77554000000001,19.75889,0 98.83693000000002,19.81639,0 98.91388000000001,19.74638,0 99.02970999999999,19.82888000000001,0 99.04082,20.03722,0 99.07639,20.0975,0 99.18388,20.12805,0 99.32555000000001,20.06611,0 99.53887,20.14943,0 99.55525000000003,20.20667,0 99.45610000000002,20.38861,0 99.67360000000001,20.31083,0 99.80914,20.33638,0 99.86997000000001,20.42722,0 99.95914000000001,20.45527,0 100.0914,20.34861,0 100.1753,20.63527,0 100.2539,20.74555,0 100.3689,20.82694,0 100.5319,20.80527,0 100.6472,20.87056,0 100.6336,20.89154,0 100.5255,20.87111,0 100.52,20.94943,0 100.5455,21.02527,0 100.6214,21.05167,0 100.6719,21.12806,0 100.7226,21.30771,0 100.8347,21.3025,0 100.9975,21.39583,0 101.1617,21.53056,0 101.1482,21.57264,0 101.2164,21.54556,0 101.1936,21.41277,0 101.2653,21.37611,0 101.2283,21.31222,0 101.2819,21.18027,0 101.5686,21.24749,0 101.6153,21.22833,0 101.6075,21.18027,0 101.67,21.19971,0 101.73,21.13972,0 101.7872,21.14417,0 101.7822,21.20693,0 101.838,21.21111,0 101.8514,21.24916,0 101.7392,21.31639,0 101.7489,21.48194,0 101.7775,21.515,0 101.763,21.57833,0 101.8331,21.62138,0 101.7831,21.65083,0 101.7525,21.72443,0 101.7847,21.825,0 101.7086,21.92889,0 101.6255,21.97193,0 101.5744,22.10917,0 101.5969,22.16166,0 101.5389,22.24417,0 101.57,22.27917,0 101.6269,22.28166,0 101.6805,22.37917,0 101.6719,22.44639000000001,0 101.738,22.49694,0 101.8,22.48943,0 101.8755,22.38305,0 101.92,22.43611,0 102.0308,22.45527,0 102.1147,22.43389000000001,0 102.1407,22.39628,0 102.1867,22.43,0 102.2533,22.41471,0 102.2697,22.49166,0 102.4164,22.63583,0 102.383,22.67749,0 102.4261,22.68832,0 102.4797,22.77389,0 102.5428,22.74889,0 102.5603,22.69749,0 102.6103,22.72278,0 102.8628,22.60139,0 102.9286,22.48194000000001,0 103.0305,22.43555,0 103.0725,22.44749,0 103.0761,22.49833,0 103.1708,22.54694,0 103.1556,22.58666,0 103.1839,22.62888,0 103.28,22.67304,0 103.3289,22.79500000000001,0 103.4305,22.74388,0 103.4569,22.64249,0 103.5224,22.58437,0 103.5842,22.64416,0 103.5636,22.70138,0 103.6178,22.78,0 103.6553,22.7825,0 103.9644,22.49911,0 104.0097,22.52424,0 104.0331,22.68527,0 104.1116,22.79972,0 104.2672,22.82919,0 104.2619,22.73777,0 104.37,22.68583,0 104.5836,22.84472,0 104.6044,22.80972,0 104.7314,22.81666,0 104.8611,22.93666,0 104.825,23.10611,0 104.8763,23.11084,0 104.9075,23.18027,0 104.9619,23.16556,0 105.0811,23.24222,0 105.2405,23.26055,0 105.2647,23.33416,0 105.3275,23.37803,0 + + + 1 + + + + + +111.0883,72.37220000000001,0 111.3592,72.31693,0 111.5806,72.31944,0 111.6686,72.26582999999999,0 111.6242,72.21361,0 111.7436,72.20721,0 111.775,72.14499000000001,0 112.0122,72.13332,0 112.0111,71.40694000000001,0 112.333,71.34333,0 112.5128,71.26582999999999,0 112.6428,71.2897,0 112.7258,71.24359,0 112.6869,71.20277,0 112.5219,71.16388000000001,0 112.5975,71.10471,0 112.385,71.0647,0 112.2561,71.00000000000001,0 112.0775,71.06164,0 111.9772,70.98276,0 111.4647,70.93864000000001,0 111.3625,70.85526,0 111.0057,70.84365,0 110.8808,70.79638000000001,0 110.7223,70.82165999999999,0 110.5383,70.79721000000001,0 110.5031,70.77083,0 110.5136,70.71693000000001,0 110.3236,70.70471000000001,0 110.1236,70.63612000000001,0 110.1625,70.56554,0 110.1594,70.55247,0 110.0989,70.55776,0 110.1461,70.52388000000001,0 110.1405,70.47859,0 110.3036,70.44942,0 110.2725,70.41721000000001,0 109.6417,70.38499,0 109.5817,70.35526000000002,0 109.633,70.31972,0 109.5695,70.265,0 109.3205,70.21887,0 109.3055,70.17776000000001,0 109.3828,70.11942999999999,0 109.3811,70.07944000000001,0 109.5439,70.03498,0 109.3836,69.92944,0 109.4211,69.89276,0 109.3644,69.83832,0 109.2261,69.77164999999999,0 108.9539,69.78526000000001,0 108.8725,69.84109000000001,0 108.2366,69.85444,0 108.0536,69.77970999999999,0 108.0181,69.70749000000001,0 107.9022,69.67498999999999,0 107.6053,69.6636,0 106.8147,69.51361,0 106.5911,69.51666,0 106.4547,69.57249,0 106.2853,69.45833,0 106.1367,69.41971,0 106.8908,68.86026,0 106.8766,67.84166999999999,0 106.7989,67.33832,0 106.6678,67.24387,0 106.5036,67.28637000000001,0 106.2325,67.18498,0 106.0539,67.16804999999999,0 105.9955,67.07887,0 105.9053,67.04553,0 105.5283,67.02222,0 105.6436,66.94664,0 105.8189,66.94859,0 105.8686,66.91804999999999,0 106.0683,66.89525999999999,0 106.075,66.86081,0 105.9889,66.79776000000001,0 106.1875,66.80247,0 106.1997,66.78333000000001,0 106.1361,66.7561,0 106.1461,66.72693,0 106.26,66.69942,0 106.2272,66.66052999999999,0 106.2417,66.58167,0 106.3058,66.55359000000001,0 106.2939,66.50221000000001,0 106.3269,66.47553000000001,0 106.1008,66.37803,0 106.1489,66.25776999999999,0 106.1158,66.19859,0 106.1833,66.15555999999999,0 106.353,66.15082,0 106.4889,66.00471,0 106.4667,65.93192999999999,0 106.4961,65.895,0 106.4483,65.82138000000001,0 106.4764,65.80443,0 106.448,65.77415000000001,0 106.4711,65.74108,0 106.4153,65.70139,0 106.4214,65.66692999999999,0 106.6439,65.6322,0 106.6219,65.61053,0 106.715,65.59305999999999,0 106.6989,65.55109,0 106.9647,65.50443,0 106.8761,65.44108,0 106.8414,65.37608,0 106.6116,65.39276,0 106.4422,65.30888,0 106.4269,65.26138,0 106.5117,65.20387,0 106.3736,65.20499,0 106.2911,65.13889,0 106.1925,65.12858,0 106.1658,65.09027,0 105.9986,65.03915000000001,0 105.9748,65.00305,0 106.2233,64.85722,0 106.1058,64.85915,0 106.0408,64.90470999999999,0 105.9491,64.89499000000001,0 106.0097,64.81805,0 105.898,64.82138000000001,0 105.8472,64.79165999999999,0 105.8289,64.74193,0 105.8772,64.65804,0 105.7039,64.65886999999999,0 105.7494,64.61443,0 105.7261,64.57222,0 105.8042,64.53055000000001,0 105.7925,64.47803999999999,0 106.0389,64.51609999999999,0 106.1475,64.48526,0 106.0661,64.42081,0 106.1867,64.39639,0 106.3944,64.44331,0 106.5858,64.44443,0 106.5655,64.49582,0 106.6042,64.51331999999999,0 106.6733,64.49802,0 106.7533,64.41193,0 106.8864,64.41609,0 107.1022,64.33693,0 107.2342,64.33138,0 107.2366,64.28693,0 107.3344,64.24442999999999,0 107.5947,64.29915,0 107.8508,64.18053999999999,0 107.9933,64.16971,0 108.0265,64.22346,0 108.1253,64.24054,0 108.15,64.24082,0 108.2211,64.20833,0 108.3222,64.03943,0 108.2619,63.99083000000002,0 107.6792,63.98999,0 107.6194,63.9575,0 107.6219,63.91361000000001,0 107.5628,63.85695000000001,0 107.3592,63.86775999999999,0 107.2911,63.95083,0 107.1819,63.95361,0 107.0714,63.88528,0 106.8603,63.97721,0 106.7028,63.98555000000002,0 106.6803,63.92499,0 106.7972,63.84415,0 106.6283,63.69833,0 106.685,63.61361000000001,0 106.5069,63.49166000000002,0 106.7364,63.3686,0 106.6741,63.29667,0 106.4441,63.33111,0 106.3619,63.27139,0 106.3583,63.21999,0 106.433,63.20055,0 106.3836,63.1461,0 106.4108,63.11527000000001,0 106.3033,63.07277,0 106.1216,63.05833000000001,0 106.1875,62.98611,0 106.1561,62.9586,0 106.2194,62.94194000000001,0 106.2161,62.8961,0 106.4447,62.84361,0 106.4678,62.77694,0 106.5258,62.74722000000001,0 106.4691,62.68166000000001,0 106.8144,62.59972,0 106.7072,62.58277,0 106.6533,62.53833,0 106.7144,62.47721000000001,0 106.5308,62.37249000000001,0 106.4275,62.38388,0 106.4792,62.31721000000002,0 106.3939,62.31777000000001,0 106.3192,62.26194000000001,0 106.4477,62.24167,0 106.4475,62.18581,0 106.373,62.10277,0 106.4097,62.08472,0 106.3789,62.06528,0 106.4133,62.02750000000001,0 106.2,61.99749000000001,0 106.0478,61.9086,0 106.0431,61.90277,0 105.8894,61.82305000000001,0 105.9491,61.68333,0 105.8647,61.67389,0 105.8028,61.61776,0 105.6947,61.64943,0 105.5925,61.61721,0 105.5575,61.56554000000001,0 105.3664,61.53278,0 105.2736,61.47805000000002,0 105.2758,61.41999,0 105,61.40661000000001,0 104.785,61.34943,0 104.9272,61.31944,0 104.9314,61.26944,0 104.9628,61.26498999999999,0 105.0119,61.17749,0 104.835,61.17776000000001,0 104.7103,61.08999000000001,0 104.6147,61.07444,0 104.6003,61.05416,0 104.6419,61.03804,0 104.6,61.00054,0 104.6144,60.97639,0 104.5597,60.94554000000001,0 104.6344,60.89388,0 104.4569,60.83972,0 104.6022,60.74333000000001,0 104.5167,60.63332,0 104.5577,60.61721,0 104.568,60.54084,0 104.6414,60.49416000000002,0 104.6764,60.42499999999999,0 104.6539,60.40249,0 104.7642,60.38221,0 104.8772,60.30388000000001,0 105.2219,60.27528,0 105.2967,60.29860999999999,0 105.3758,60.24917000000001,0 105.4772,60.25443,0 105.4786,60.19249,0 105.4208,60.10999000000001,0 105.4889,60.01194000000002,0 105.4305,59.89388,0 105.4952,59.84554000000001,0 105.3783,59.82083000000001,0 105.1853,59.86027000000001,0 105.0191,59.83721,0 105.0191,59.77083,0 104.8922,59.75027000000001,0 104.7944,59.69332,0 104.8005,59.6361,0 104.8769,59.58582,0 104.8561,59.55110000000001,0 104.8828,59.52527,0 104.9853,59.46028,0 105.183,59.47305,0 105.2308,59.42527000000001,0 105.2136,59.40777,0 105.2094,59.40192,0 105.2455,59.35082,0 105.1841,59.31055000000001,0 105.2961,59.26111,0 105.3319,59.1986,0 105.3019,59.14861000000001,0 105.3628,59.09499,0 105.1439,59.04582,0 105.085,58.99277,0 104.8386,58.89443,0 104.7558,58.81526000000001,0 104.8733,58.72164000000001,0 104.795,58.66859,0 104.6314,58.64804,0 104.5828,58.61415,0 104.5233,58.63832000000001,0 104.4583,58.60054,0 104.3936,58.64526,0 104.3991,58.69915000000001,0 104.2836,58.71305000000001,0 104.2364,58.75866000000001,0 104.0444,58.77304,0 103.9922,58.73555,0 103.8558,58.73498000000001,0 103.9458,58.76582,0 103.9542,58.84859,0 103.8933,58.90555,0 103.5928,58.91304,0 103.5919,58.95193,0 103.5383,58.98611,0 103.3892,59.02138000000002,0 103.2444,59.17944,0 103.2366,59.2286,0 103.338,59.22721,0 103.3264,59.26082000000002,0 103.2064,59.28972,0 103.1644,59.25999000000001,0 103.0822,59.26416,0 103.0155,59.32193,0 102.8717,59.26527999999999,0 102.8286,59.21194,0 102.5353,59.19166000000001,0 102.4433,59.14471,0 102.4044,59.07249000000001,0 102.4508,59.00111,0 102.4369,58.94304000000001,0 102.54,58.89777000000001,0 102.5669,58.79694,0 102.5114,58.71667,0 102.3105,58.64527,0 102.1944,58.52527000000001,0 101.685,58.41888,0 101.5347,58.22471,0 101.2764,58.21861000000001,0 101.2161,58.14444,0 101.1097,58.11528000000001,0 101.105,58.10528,0 101.1608,58.06055,0 101.1583,58.02471000000001,0 101.1394,57.98249,0 101.0281,57.92249000000002,0 101.0353,57.89804000000001,0 100.953,57.86694000000001,0 100.8077,57.88611,0 100.8505,57.84222,0 100.84,57.80083000000001,0 100.8911,57.77361,0 100.7969,57.66833000000001,0 100.8461,57.60999000000001,0 100.9536,57.5611,0 100.9391,57.51583,0 100.9628,57.50083000000001,0 100.9112,57.44835,0 100.855,57.465,0 100.7419,57.40193000000001,0 100.6505,57.47444,0 100.4036,57.54804,0 100.3958,57.59887,0 100.3461,57.63833,0 100.3664,57.67556,0 100.328,57.68250000000001,0 100.373,57.7311,0 100.2664,57.76139,0 100.2744,57.80915,0 100.123,57.86554,0 100.0767,57.96111,0 100.0775,58.0561,0 100.0441,58.07944,0 99.80138000000001,58.05721,0 99.68193000000001,58.08111,0 99.61582,58.04805000000001,0 99.61971,58.00166,0 99.49442999999999,57.93415,0 99.42165000000001,57.79333000000001,0 99.08414999999999,57.77416,0 98.97415,57.72165,0 98.85415999999999,57.72804,0 98.76944,57.79166000000001,0 97.91721,57.80694,0 97.34009000000002,57.04317,0 97.47693000000001,56.96444,0 97.62302,56.95528000000001,0 97.48055000000001,56.89111000000001,0 97.48581000000003,56.81028,0 97.77609,56.78054,0 97.75027000000002,56.70417000000001,0 97.78581,56.66415000000001,0 97.75193000000003,56.64054,0 97.77528000000002,56.6075,0 97.74498,56.55860000000001,0 97.87943,56.55944,0 97.88193,56.39249000000002,0 97.55663000000001,56.3875,0 97.58693000000001,56.18943000000001,0 97.42859,56.14666,0 97.43248,56.09583000000001,0 97.35220000000001,56.04861,0 97.12361,56.11639,0 97.0611,56.02556,0 96.98054999999999,56.02221999999999,0 96.96971000000001,55.85583,0 96.82111,55.79166,0 96.75526000000002,55.74722,0 96.82471,55.69749,0 96.74638,55.65138000000001,0 96.85582000000001,55.59444000000001,0 96.81721,55.55915,0 96.85526000000002,55.47776,0 96.84137000000001,55.43749,0 96.92027,55.32472,0 96.70055000000001,55.25528,0 96.69721,55.17276,0 96.65192,55.0986,0 96.68692,55.08083,0 96.57777,55.02028,0 96.71527,54.92138000000001,0 96.67359999999999,54.80222000000001,0 96.56192,54.69694,0 96.58888,54.65972,0 96.55053,54.58082,0 96.57083,54.51250000000001,0 96.31582,54.57139000000001,0 96.21720999999999,54.54084,0 96.05582,54.5761,0 95.97638000000001,54.47721000000001,0 95.98665,54.44833,0 95.91577000000002,54.3956,0 95.79082,54.42082000000001,0 95.70526,54.37999,0 95.66303000000004,54.33999,0 95.65860000000002,54.25943,0 95.91805000000002,54.15999,0 95.98803000000001,54.08721,0 96.05332,54.09389000000002,0 96.08167000000003,54.05749000000001,0 96.04943,53.99554,0 96.20721,53.92638,0 96.5,53.68499000000001,0 96.57165999999999,53.64554,0 96.60860000000001,53.67583,0 96.68415,53.6386,0 96.72776,53.70665,0 96.88666000000001,53.72887000000001,0 97.12275,53.60944,0 97.33221,53.59999,0 97.44107,53.46027000000002,0 97.58749,53.43888000000001,0 97.59972000000001,53.37138,0 97.96304000000001,53.35999,0 97.96998000000002,53.29639000000001,0 98.03027,53.25054000000001,0 98.28581,53.22721,0 98.29998999999999,53.10055,0 98.60249000000002,53.10139000000001,0 98.68637000000001,53.15611000000001,0 98.8772,53.11944,0 98.92360000000001,53.15388,0 99.06526000000001,53.10249,0 98.98553,53.03444,0 99.24997000000001,52.95378,0 99.20610000000002,52.8511,0 98.93107999999999,52.925,0 98.84444000000001,52.83194,0 98.86526000000001,52.79167,0 98.9408,52.79722000000001,0 98.93248000000001,52.65444000000001,0 98.80415000000001,52.61166,0 98.78276,52.57333,0 98.82721000000001,52.53999000000001,0 98.81527,52.52054,0 98.73522000000001,52.5118,0 98.72083000000001,52.46054000000001,0 98.62553,52.42416,0 98.67970000000001,52.36999,0 98.64444,52.26167000000001,0 98.72248999999999,52.29527000000001,0 98.80721,52.27444,0 98.81360000000001,52.18693,0 98.91304,52.2011,0 98.94189,52.14068,0 98.88109,52.11416,0 98.86942999999999,52.03861,0 98.70804000000001,51.82805,0 98.62442,51.77999000000001,0 98.33527000000001,51.71804000000001,0 98.24802,51.5811,0 98.25999,51.51583000000002,0 98.23235,51.45989000000001,0 98.06469000000001,51.46694,0 97.93777,51.31249,0 97.9586,51.22332,0 97.83195000000001,50.98999000000001,0 97.87747,50.92972,0 98.01304,50.85583,0 97.96388,50.77832,0 98.06331000000002,50.63054000000001,0 98.16748,50.56889,0 98.27443,50.56055,0 98.32555000000001,50.51083000000001,0 98.28554,50.41361000000001,0 98.29221,50.29861,0 98.10721000000002,50.04888,0 97.86388000000001,49.93277,0 97.78609,49.96915,0 97.59415000000001,49.92749,0 97.58638000000001,49.84361000000001,0 97.31303,49.7311,0 97.16943000000001,49.76167,0 96.99693000000002,49.89415000000001,0 96.72248999999999,49.9211,0 96.59248000000001,49.86500000000001,0 96.54749,49.92583,0 96.37916,49.89360000000001,0 96.29443999999999,49.94665000000001,0 96.07444,50.00694,0 95.96026999999999,49.94415000000001,0 95.90721000000002,50.01415999999999,0 95.83472,50.02499000000001,0 95.73526,49.95471000000001,0 95.59193000000001,49.94083,0 95.53859,49.89472,0 95.49157,49.9077,0 95.42249000000001,49.95610000000001,0 95.06608,49.96193000000001,0 94.97609,50.0561,0 94.62276,50.02999,0 94.51582999999999,50.16109,0 94.38998000000001,50.21444000000001,0 94.3522,50.41499,0 94.27499,50.56944,0 93.55832000000001,50.58972000000001,0 93.44886,50.62249000000001,0 93.03333000000001,50.6086,0 92.97102,50.66649,0 92.99915,50.7514,0 92.97500000000001,50.7911,0 92.80276000000001,50.79361,0 92.76028,50.71249,0 92.66081,50.68166,0 92.5736,50.75778,0 92.47275999999999,50.78527,0 92.38361000000002,50.87471000000001,0 92.32693,50.855,0 92.29498,50.75361,0 92.22137000000002,50.70556,0 91.90556000000002,50.71472000000001,0 91.77222000000002,50.68999000000001,0 91.65886999999999,50.63722000000001,0 91.60693000000001,50.57305,0 91.46776000000001,50.52694000000001,0 91.44748,50.4711,0 91.02970999999999,50.43306,0 90.87025,50.32638000000001,0 90.74860000000001,50.29749,0 90.69859,50.21943,0 90.50973000000001,50.22444000000001,0 90.37858,50.18582000000001,0 90.24443000000001,50.12027,0 90.05137000000003,50.0825,0 89.98526,49.97222000000001,0 89.64270000000001,49.90482999999999,0 89.6375,49.855,0 89.67137,49.82083,0 89.65107999999999,49.79527000000002,0 89.73609999999999,49.74889000000001,0 89.71138000000001,49.71472,0 89.45972,49.64999000000001,0 89.37221,49.57972,0 89.22665000000001,49.63833,0 89.19748,49.61111,0 89.23054999999999,49.53667,0 89.01331999999999,49.46360000000001,0 88.92886,49.54639,0 88.8875,49.54361000000001,0 88.89999000000002,49.44332,0 88.73081999999999,49.45083,0 88.65082,49.50055,0 88.22083000000001,49.46166,0 88.13193,49.36833000000001,0 88.1622,49.27222,0 87.98859,49.17722000000001,0 87.8407,49.17296000000001,0 87.52528,49.12915,0 87.46693000000001,49.07972,0 87.34821,49.09261,0 87.29971000000001,49.21054000000001,0 87.21887,49.2461,0 87.05247,49.25417000000001,0 86.92665,49.35306,0 86.96442,49.39194,0 86.83971,49.45222,0 86.84694,49.52166,0 86.61665000000001,49.58721000000001,0 86.68221000000001,49.66999,0 86.80025999999999,49.70222,0 86.76277000000002,49.73444000000001,0 86.77499,49.78889,0 86.61638000000001,49.79721,0 86.61109,49.76111,0 86.49706999999999,49.7155,0 86.50583,49.67638,0 86.28749000000001,49.58582000000001,0 86.24582000000001,49.50139999999999,0 86.19107,49.4725,0 86.13275,49.53277000000001,0 85.96944000000001,49.48861000000001,0 85.96915,49.56638,0 85.8372,49.54388000000001,0 85.77083,49.57999,0 85.69054,49.56444,0 85.63081,49.62749,0 85.52443,49.59055,0 85.40387,49.62332,0 85.2586,49.59138000000001,0 85.21111000000001,49.64721000000001,0 85.21053000000001,49.71555000000001,0 85.09193000000001,49.81971,0 85.0836,49.88138,0 84.97776,49.91276,0 84.97915,49.99777,0 85.05832,50.01361,0 85.01443,50.07583,0 84.85193,50.09166000000001,0 84.81053,50.14416000000001,0 84.73636999999999,50.1461,0 84.67443,50.19694,0 84.55998,50.19555,0 84.47386,50.25666,0 84.37302,50.20971000000002,0 84.26694000000001,50.27054,0 84.26277,50.35443,0 84.19692000000001,50.45304,0 84.22304,50.51471000000002,0 84.10621999999999,50.64296,0 83.96998000000001,50.71555,0 83.97693,50.79749,0 83.90166000000002,50.81388000000001,0 83.84333,50.87749000000001,0 83.51361,50.95555000000001,0 83.45638,51.00249000000001,0 83.1386,51.00194000000001,0 83.0872,50.92361,0 83.00999,50.88944000000001,0 82.76111,50.91082,0 82.72748,50.89888,0 82.72026,50.81081,0 82.49887,50.7211,0 82.44274,50.75804999999999,0 82.35637,50.75972,0 82.15027000000001,50.71054,0 82.01111,50.77138999999999,0 81.82887000000001,50.76833000000001,0 81.78276,50.79333,0 81.72581,50.74749000000001,0 81.59540000000001,50.73573,0 81.43747999999999,50.76445,0 81.48997,50.8411,0 81.42192,50.92777,0 81.4247,50.96638,0 81.07639,50.94781,0 81.18359,51.19609,0 81.04084,51.18143,0 80.94029000000002,51.22122,0 80.93223999999999,51.28399,0 80.87224999999999,51.25904,0 80.68783999999999,51.31472000000001,0 80.63344000000001,51.21476000000001,0 80.43872,51.19797000000001,0 80.43068000000001,51.11909,0 80.48678,51.05877,0 80.46236,50.96408000000001,0 80.19905,50.88837,0 80.17211,50.82919,0 80.06545,50.86060000000001,0 80.03516999999999,50.83338,0 80.1096,50.75947,0 79.99387,50.81304999999999,0 79.53637000000001,51.45000000000001,0 78.92303,52.17638000000002,0 77.92137,53.2589,0 77.52387,53.50639,0 76.52164999999999,53.99388,0 76.39333000000001,54.16361,0 76.72136999999999,54.15331000000001,0 76.86498,54.31805000000001,0 76.85583000000001,54.35889,0 76.77888,54.39415,0 76.92498999999999,54.43749,0 76.92359999999999,54.47554000000001,0 76.70663999999999,54.44721,0 76.65694000000001,54.36777000000001,0 76.48775999999999,54.32556,0 76.23888,54.35889,0 76.18552,54.29554000000001,0 76.20721,54.25916000000002,0 75.69136,54.11027,0 75.67777000000001,54.53417,0 75.80609,54.56554,0 75.83499000000001,54.60471,0 75.7897,54.66945,0 75.80887,54.69304,0 75.70972,54.68639,0 75.65721000000001,54.80999,0 75.51331999999999,54.82333,0 75.49165000000001,54.86138,0 75.54082,54.90194,0 75.34027,54.91416,0 75.40027000000002,55.02804,0 75.24803,55.1375,0 75.26944,55.25416,0 75.09138,55.38221,0 75.16859,55.4211,0 75.17137,55.45277,0 75.325,55.50722,0 75.32223000000001,55.54027,0 75.30582000000001,55.56917,0 75.1972,55.55972,0 75.13136,55.59888000000002,0 75.23775999999999,55.65999999999999,0 75.12886,55.69943000000001,0 75.13694000000001,55.72332,0 75.08194,55.75027,0 75.37025,55.76666,0 75.37331,55.81333,0 75.29749,55.84471,0 75.31219,55.89166000000001,0 75.50584000000001,55.99610000000001,0 75.54304999999999,56.04722000000002,0 75.70055000000001,56.0675,0 75.74887,56.14111000000001,0 75.95638,56.12749000000001,0 75.99442999999999,56.17832000000001,0 76.15082,56.18055,0 76.16304,56.14943,0 76.31887999999999,56.18555,0 76.29971000000001,56.23638,0 76.11665000000002,56.31415,0 76.07805999999999,56.41471,0 76.14194000000001,56.4511,0 76.05748,56.48277,0 76.0061,56.45388,0 75.93581,56.47971,0 75.895,56.44276,0 75.84415,56.45,0 75.86526000000001,56.49971000000001,0 76.01528,56.55165000000001,0 76.0461,56.62165000000002,0 76.14915000000001,56.63082,0 76.28943,56.72694,0 76.25194999999999,56.91833,0 76.19192,56.97276000000001,0 76.10887,57.25027999999999,0 75.96638,57.41416,0 75.8586,57.39917,0 75.71249,57.63917000000001,0 75.58275999999999,57.64639,0 75.56441,57.93387,0 75.06638000000001,58.11833,0 75.2397,58.21998,0 75.05415000000001,58.3447,0 75.35554999999999,58.47277,0 75.10526,58.58111,0 75.17081,58.6186,0 75.15028000000001,58.67805,0 75.38164999999999,58.78804,0 75.69054,59.01194,0 75.61526000000001,59.2411,0 75.83138,59.29639,0 75.89749000000001,59.43721000000001,0 75.99082,59.41972,0 76.16304,59.54361,0 76.45583000000001,59.54445,0 76.64833,59.58027,0 76.64554000000001,59.69332,0 76.74136,59.72943000000001,0 76.75888999999999,60.06081,0 76.68719,60.10777000000001,0 76.85165000000001,60.26806000000001,0 76.8186,60.33028000000002,0 76.74471,60.34249000000001,0 76.77443,60.47665,0 77.03749000000001,60.535,0 77.04721000000001,60.60361,0 77.03167000000001,60.63277,0 76.96527,60.64111,0 76.96776,60.71,0 77.07805000000001,60.72721,0 77.10498,60.85333000000001,0 77.40804,60.81027,0 77.68941,60.82749,0 77.92137,60.74665,0 78.12025,60.80222000000001,0 78.47527,60.77694,0 78.68941,60.83083,0 78.80721,60.77887,0 78.91110000000001,60.78722000000001,0 78.96915000000001,60.82805,0 79.18553,60.83860000000001,0 79.31833,60.79667000000001,0 79.28360000000001,60.71999000000001,0 79.38666000000001,60.64861,0 79.50249,60.68694,0 79.71581999999999,60.69555,0 80.18398999999999,60.66193,0 80.42100000000001,60.76556999999999,0 80.63061,60.76768000000001,0 80.69771000000002,60.80017,0 81.03823000000001,60.75419,0 81.0555,60.68084,0 81.11116,60.6375,0 81.49776,60.61555,0 81.86165,60.65055,0 82.16665,60.51832,0 82.39027,60.61028,0 82.38247,60.71278,0 83.14499000000001,61.03277000000001,0 83.50944,61.04916,0 83.99387,60.82472,0 84.25964000000001,60.85542,0 84.61415,61,0 85.71054,61.29749,0 85.64360000000001,61.38805,0 85.75249,61.43999,0 85.96639,61.46915,0 85.96915,61.54305,0 85.85193,61.59777,0 85.72275999999999,61.57361,0 85.46777,61.62860000000001,0 85.38582000000001,61.70167,0 85.24832000000001,61.68526000000001,0 85.00805,61.78416,0 84.68749,61.8061,0 84.63388999999999,61.87971000000001,0 84.55749,61.89472000000001,0 84.51666,61.93915,0 84.55441999999999,61.99694,0 84.43692,62.18915,0 84.72638000000001,62.40694,0 84.85915,62.44778,0 84.91387,62.49944000000001,0 84.89055000000001,62.54220999999999,0 84.94803000000002,62.59137000000001,0 85.09860000000001,62.6386,0 85.07777,62.67138000000001,0 85.2372,62.81444000000001,0 85.33249000000001,62.87331,0 85.4511,62.88277,0 85.52083,62.93277,0 85.49332,62.99027000000001,0 85.58716000000001,63.06996,0 85.46638,63.13805,0 85.47832,63.17054,0 85.53665,63.26083,0 85.67387000000001,63.35443999999999,0 85.55942,63.37499,0 85.40776,63.35,0 85.35276,63.40276999999999,0 85.38970000000002,63.42333000000001,0 85.37415,63.46220000000002,0 85.2961,63.51583,0 85.21193,63.50306000000001,0 85.08194,63.53638000000001,0 85.03203000000001,63.58649000000001,0 85.08998,63.60860000000002,0 85.17693,63.59137,0 85.26721000000001,63.64638000000001,0 85.33998,63.70693000000001,0 85.36693,63.81333,0 85.51639,63.93000000000001,0 85.95804,64.05443,0 85.96776,64.09775999999999,0 85.93248000000001,64.12776,0 86.0311,64.27528,0 85.94970000000002,64.32832999999999,0 85.92359999999999,64.41721,0 85.84081999999999,64.45889,0 85.84526,64.50749,0 85.91804000000001,64.5836,0 85.80859,64.64749000000001,0 85.86081,64.75526000000001,0 85.54694000000001,64.83028,0 85.14694,64.75166,0 85.09444000000001,64.81219,0 84.93222,64.82639,0 84.97748,64.88666000000001,0 84.90665,64.93026999999999,0 84.29137,64.9011,0 84.27804999999999,64.94054,0 84.39665000000001,64.99387,0 84.38108,65.03276,0 84.31386999999999,65.05721,0 84.3111,65.09860000000001,0 84.40999000000001,65.19082,0 84.52443,65.21278,0 84.58832,65.31303,0 84.50194000000001,65.39664999999999,0 84.55464000000001,65.43516,0 84.45028000000001,65.54554,0 84.19054,65.59444000000001,0 84.29276000000002,65.6122,0 84.31914999999999,65.66943000000001,0 84.32249,65.67609,0 84.17665,65.7,0 84.01111,65.79832,0 83.59108999999999,65.7736,0 83.50637,65.82944000000001,0 83.52804999999999,65.90443000000001,0 83.37276000000001,65.9836,0 83.28943,66.06693,0 83.37109,66.13666000000001,0 83.53970000000001,66.19525,0 83.34415,66.34193000000001,0 83.12469,66.42165,0 83.08693,66.46972,0 83.08666,66.61053,0 83.30582,66.66165,0 83.1836,66.74748,0 83.17249,66.80914,0 83.02748,66.85971000000001,0 83.06192,66.88081,0 83.04109,66.89221000000002,0 82.11942999999999,67.23888000000001,0 82.19721,67.25943,0 82.18165999999999,67.28803000000001,0 82.25915999999999,67.27998,0 82.21833,67.31137,0 82.3647,67.33055,0 82.2811,67.34887000000001,0 82.33778,67.3608,0 82.2336,67.42081,0 82.32971000000001,67.48109,0 82.38054,67.47971,0 82.35138000000001,67.50109999999999,0 82.39664999999999,67.53498999999999,0 82.11416,67.59943,0 82.04109,67.65665,0 82.11913,67.68747999999999,0 82.08055,67.68858,0 82.10554999999999,67.72887,0 81.90304999999999,67.77778000000001,0 81.72443000000001,67.92415,0 81.76194,67.95247999999999,0 81.8772,67.93165999999999,0 81.98888,67.96332,0 82.37442,67.94914,0 82.39610999999999,68.05914,0 82.35693000000001,68.09583000000001,0 82.39276,68.17747,0 82.54359,68.17276,0 82.52332000000001,68.20694,0 82.57361,68.25583,0 82.70663999999999,68.29331999999999,0 82.68443000000001,68.34636999999999,0 82.71249,68.40443000000001,0 82.68053999999999,68.49137,0 82.45610000000001,68.57832999999999,0 82.54915,68.61443,0 82.55859000000001,68.61111,0 82.58999,68.60276,0 82.69302999999999,68.63275,0 82.9011,68.62527,0 83.04276,68.66776,0 82.80164000000001,68.74082,0 82.78288000000001,68.79881,0 82.5522,68.81833,0 82.49721,68.98775999999999,0 82.31638,69.05387,0 82.50472000000002,69.10831,0 82.46138999999999,69.12442,0 82.46388,69.16054,0 81.81331,69.20055000000001,0 81.75972000000002,69.25249000000001,0 81.93611,69.34665,0 81.7811,69.43137,0 81.67249,69.44832,0 81.62302,69.41526,0 81.61387000000002,69.32833000000001,0 81.64028,69.31135999999999,0 81.58249000000001,69.27582,0 81.44414,69.25443000000001,0 81.33582,69.28803000000001,0 80.95596000000001,69.20667,0 80.79311,69.26394999999999,0 80.76669000000001,69.30504000000001,0 80.14597999999999,69.36324999999999,0 79.85914000000001,69.34610000000001,0 79.8772,69.37276,0 79.82278,69.39444,0 79.82805000000001,69.42249,0 79.71388,69.43248,0 79.74082,69.44832,0 79.63916999999999,69.48582,0 79.59583000000001,69.58832,0 79.50082,69.60471,0 79.5372,69.63081,0 79.49165000000001,69.63638,0 79.50583,69.65358999999999,0 79.00417,69.69693,0 79.13970999999999,69.74303999999999,0 79.06638,69.74721,0 79.06331,69.78664000000001,0 78.97582000000001,69.81165,0 79.01888,69.83499999999999,0 78.87527,69.88164999999999,0 78.96582000000001,69.88026000000002,0 79.18747999999999,69.96416000000002,0 79.11971,70.00664999999999,0 79.21860000000001,70.01166000000001,0 79.17859,70.03498,0 79.19443,70.05165,0 79.34943,70.04498,0 79.32805000000001,70.14888000000001,0 79.49887,70.11053,0 79.62943,70.22109,0 79.70889,70.23859,0 79.73831,70.24887,0 79.70360000000001,70.26999000000001,0 79.7247,70.28415000000001,0 79.85748,70.27222000000002,0 80.11404,70.36096000000001,0 80.08208999999999,70.39373000000001,0 80.18601000000001,70.39182,0 80.17683,70.43655,0 80.57176,70.46187999999999,0 80.62567,70.42167000000001,0 80.69155000000001,70.42319999999999,0 80.70740000000001,70.39100999999999,0 80.76217,70.39443,0 80.72770000000001,70.41077,0 80.79106,70.41504999999999,0 80.79858,70.44119000000001,0 80.67014000000002,70.44623,0 80.60648999999999,70.50095,0 80.66569,70.51388,0 80.6601,70.57407000000001,0 80.72072,70.5945,0 80.75629000000001,70.66586,0 80.59229000000001,70.71675000000001,0 80.69016000000001,70.80186000000001,0 80.56647,70.85477,0 80.55004,71.05757,0 79.96638,71.13109,0 79.50832,71.29331999999999,0 79.22915999999999,71.3175,0 79.1747,71.34609,0 79.14027,71.42165,0 79.3586,71.49413,0 79.39082000000001,71.54387,0 79.33138,71.59775999999999,0 79.38026000000001,71.61637,0 79.86972,71.60027,0 80.13540999999999,71.67453,0 80.06631,71.76943,0 80.12739999999999,71.7749,0 80.03504,71.83147,0 80.17328999999999,71.86931,0 80.27464000000001,71.85148,0 80.2719,71.87848,0 80.34878999999999,71.88601,0 80.24838,71.91006,0 80.23093,71.94193,0 79.91002,71.98448000000001,0 79.86720000000001,72.02249000000001,0 79.69692000000001,72.05915,0 79.42276,72.03554,0 79.38275000000002,72.06219,0 79.09444000000001,72.07055,0 79.09193000000001,72.10165000000001,0 79.01859,72.11998,0 78.91081,72.11471,0 78.91165,72.14444,0 78.7711,72.17027,0 78.80803,72.18332000000001,0 78.67693,72.17944,0 78.59721999999999,72.20972,0 78.67804,72.22165,0 78.65913999999999,72.26111,0 78.44637,72.35971000000001,0 78.45471000000001,72.36443,0 78.50015000000001,72.37733,0 78.4727,72.64751,0 78.17527,72.89798,0 78.20658,73.02322,0 78.53532,73.30501,0 79.49023,73.66505000000001,0 81.08696000000001,73.75897999999999,0 82.27669,73.92335,0 82.27669,74.95653,0 82.90286,74.98784000000001,0 83.37249,75.30092999999999,0 83.49773000000002,75.83316000000002,0 83.27856,76.17757,0 82.84025,76.36541,0 82.30801,76.45934,0 82.30801,78.37854,0 82.30801,83.37854000000002,0 82.52397000000001,83.37876,0 87.52397000000001,83.3839,0 92.52396,83.38905,0 97.52396,83.39419,0 97.52396,84.90001,0 97.52396,89.90000000000001,0 98.4623,89.90000000000001,0 99.40063000000002,89.90000000000001,0 100.339,89.90000000000001,0 101.2773,89.90000000000001,0 102.2156,89.90000000000001,0 103.154,89.90000000000001,0 104.0923,89.90000000000001,0 105.0307,89.90000000000001,0 105.969,89.90000000000001,0 106.9073,89.90000000000001,0 107.8457,89.90000000000001,0 108.784,89.90000000000001,0 109.7223,89.90000000000001,0 110.6607,89.90000000000001,0 111.599,89.90000000000001,0 112.5374,89.90000000000001,0 112.5259,84.90002,0 112.5144,79.90003,0 112.5097,77.85098000000001,0 112.5083,77.24612000000001,0 113.351,76.87012,0 113.9618,76.43810000000001,0 114.1406,75.88692,0 113.8128,75.26125999999999,0 112.6509,74.76967999999999,0 111.3847,74.42704000000001,0 111.34,74.27808,0 111.6826,74.06952,0 111.6379,73.93545,0 111.2942,73.85934,0 110.8934,73.76541,0 110.9169,73.76028,0 110.8775,73.72859,0 110.9143,73.69668,0 111.0803,73.65860000000001,0 111.1433,73.63777,0 111.1178,73.59359000000001,0 111.0547,73.57165999999999,0 110.8483,73.56554,0 110.8036,73.50832,0 110.5641,73.40637,0 110.1644,73.40248,0 110.5667,73.31944,0 110.6272,73.26888,0 110.423,73.18997,0 110.7978,73.17303,0 110.8583,73.07805000000002,0 110.9417,73.03888000000001,0 110.7778,73.00054,0 110.8155,72.95359999999999,0 110.8755,72.94859,0 110.6466,72.89554,0 110.6597,72.85305,0 110.7317,72.82999,0 110.6322,72.78665000000001,0 110.7303,72.64472000000001,0 110.925,72.63193,0 110.89,72.58110000000002,0 111.3155,72.51277,0 111.3036,72.47832,0 111.0758,72.4061,0 111.0883,72.37220000000001,0 + + + 1 + + + + + GMT +08:00 + + +]]> + #khStyle0800 + + + + + +108.4614,64.28581,0 108.5394,64.23248,0 108.4769,64.20081999999999,0 108.5441,64.1747,0 108.49,64.1147,0 108.7383,63.98082,0 108.6839,63.9086,0 108.7719,63.86472,0 108.6489,63.78582,0 108.6056,63.80749,0 108.4661,63.78944000000001,0 108.3716,63.82638,0 108.2886,63.80805,0 108.2703,63.67888,0 108.1164,63.62249,0 108.1314,63.56777,0 108.5586,63.59972000000001,0 108.8566,63.53582000000002,0 109.0433,63.55416000000002,0 109.2289,63.44027,0 109.2717,63.34722,0 109.363,63.36193,0 109.3917,63.32472,0 109.3753,63.25528000000001,0 109.4564,63.21860000000001,0 109.4061,63.18277,0 109.46,63.15055,0 109.4317,63.09361,0 109.4647,63.07749,0 109.4472,63.03611,0 109.4811,63.02777,0 109.4553,62.99972000000001,0 109.4811,62.9961,0 109.4683,62.93388000000002,0 109.6158,62.87609,0 109.6505,62.82444000000002,0 109.5039,62.77527,0 109.4561,62.66637999999999,0 109.375,62.64583,0 109.3869,62.58306000000001,0 109.2444,62.57277,0 109.2642,62.52332,0 109.3158,62.47554000000001,0 109.4205,62.45832,0 109.4711,62.40499,0 109.5442,62.4325,0 109.9036,62.41388,0 109.9247,62.39722,0 109.8911,62.35333,0 109.9628,62.32249000000002,0 109.96,62.31639,0 110,62.28220000000001,0 109.9333,62.23472,0 109.9997,62.16361,0 109.9036,62.11306,0 109.8183,62.00363000000001,0 109.6116,61.89277000000001,0 109.5864,61.82333000000001,0 109.5858,61.77443,0 109.6389,61.76083000000001,0 109.6126,61.71394000000001,0 109.7161,61.67666,0 109.7061,61.64804,0 109.8742,61.53333000000001,0 109.8653,61.49305,0 109.8247,61.47748,0 109.8492,61.43054000000001,0 109.7875,61.32721000000001,0 109.8553,61.29139000000001,0 110.0903,61.27027,0 110.1797,61.15639,0 110.3211,61.14638000000001,0 110.3972,61.18111,0 110.483,61.15971,0 110.5208,61.08138,0 110.4575,61.03667,0 110.448,60.97694000000001,0 110.23,60.81916,0 110.225,60.79610000000002,0 110.2947,60.76999000000001,0 110.2703,60.76222,0 110.2678,60.69194,0 110.04,60.66915,0 110.1222,60.62416,0 110.1178,60.57972,0 110.0389,60.55833,0 110.0219,60.51694,0 109.9164,60.45889,0 109.9519,60.40359999999999,0 109.8611,60.37417000000001,0 109.8789,60.33805,0 109.8055,60.31305,0 109.8069,60.25443,0 109.7264,60.22610000000001,0 109.6936,60.11193,0 109.7164,60.05222000000001,0 109.7694,60.02887000000001,0 109.62,59.90305,0 109.6514,59.86193000000001,0 109.4947,59.75027000000001,0 109.4842,59.68721000000002,0 109.5339,59.64555,0 109.2594,59.4511,0 109.3558,59.41667000000001,0 109.245,59.36306,0 109.2605,59.31694,0 109.5167,59.29193,0 109.5172,59.23082,0 109.5405,59.22083,0 109.5281,59.18027,0 109.6286,59.1511,0 109.6405,59.06166,0 109.7411,59.07194000000001,0 109.8203,58.97971,0 109.9355,59.00917,0 110.2783,58.98194,0 110.3522,59.03582,0 110.4819,59.03334,0 110.5386,59.06221000000001,0 110.5425,59.10556,0 110.5917,59.13110000000001,0 110.5789,59.19166000000001,0 110.6927,59.25777000000001,0 110.9969,59.20805000000001,0 111.0831,59.23944,0 111.1822,59.18332000000001,0 111.3042,59.25694000000001,0 111.4353,59.27388,0 111.6461,59.2061,0 111.7681,59.27805,0 111.9419,59.2711,0 111.9933,59.34470000000001,0 112.2214,59.50361,0 112.2739,59.50444000000001,0 112.2714,59.46638,0 112.3341,59.41694,0 112.2728,59.365,0 112.3075,59.33666000000002,0 112.2839,59.30305,0 112.438,59.33028,0 112.6322,59.31082000000001,0 112.6386,59.26944000000001,0 112.5378,59.23694,0 112.46,59.16166,0 112.4461,58.92805,0 112.5003,58.86999,0 112.6276,58.96118,0 112.5555,59.02665,0 112.5742,59.07168,0 112.6453,59.03249,0 112.7314,59.0872,0 112.8822,59.11833,0 112.9117,59.15499,0 112.9714,59.13444000000001,0 113.2817,59.16109000000001,0 113.4694,59.26500000000001,0 113.4558,59.29889,0 113.4869,59.33333,0 113.4211,59.37665,0 113.4728,59.43860000000001,0 113.6097,59.49527000000001,0 113.5864,59.55915000000002,0 113.6089,59.58111000000001,0 113.7836,59.60999,0 113.8492,59.68832,0 114.0419,59.68054999999999,0 114.0433,59.74110000000001,0 114.1655,59.74582000000002,0 114.3155,59.88361,0 114.5667,59.99777000000001,0 114.5211,60.04527,0 114.5461,60.11388000000001,0 114.6966,60.21998,0 114.8139,60.18054,0 115.013,60.27167,0 115.0906,60.38276000000001,0 115.1891,60.42972000000001,0 115.6755,60.52666,0 115.8428,60.465,0 116.0032,60.45931000000002,0 116.078,60.40417,0 116.6008,60.35722000000001,0 116.7322,60.25777,0 116.84,60.24222,0 116.9736,60.15777,0 117.0444,60.08250000000001,0 117.0486,60.03583,0 117.2975,60.01943,0 117.3089,59.99528,0 117.2333,59.95694,0 117.1139,59.96333,0 117.0572,59.90889,0 117.2275,59.82943,0 117.2008,59.65499,0 117.0844,59.58721,0 117.1966,59.56916,0 117.2361,59.52777,0 117.5989,59.47083,0 117.7583,59.54084000000001,0 117.8189,59.44944000000001,0 117.8836,59.44165,0 117.94,59.45471,0 117.9864,59.53638,0 118.0572,59.58333,0 118.2836,59.61055,0 118.3503,59.58888,0 118.3903,59.51777,0 118.7644,59.4011,0 118.7633,59.38722000000001,0 118.7553,59.33333,0 118.8514,59.28611,0 118.7014,59.21305000000001,0 118.7025,59.06554,0 118.7369,59.02361000000001,0 118.8478,59.01441000000001,0 118.8539,58.94360000000001,0 118.7922,58.9397,0 118.7867,58.8875,0 118.8969,58.81471000000001,0 118.8875,58.69554000000001,0 118.8269,58.61527,0 118.763,58.61249,0 119.1297,58.48249,0 119.1261,58.40833000000001,0 119.0655,58.36388,0 119.1317,58.29027,0 119.1084,58.22268,0 118.803,58.21666000000001,0 118.6475,58.17028000000001,0 118.5614,58.21444,0 118.4892,58.21111,0 118.3072,58.36028000000001,0 118.1354,58.38744,0 118.0639,58.33832000000001,0 118.013,58.39305,0 117.8308,58.4122,0 117.6722,58.40055,0 117.6644,58.3711,0 117.4792,58.31361,0 117.4714,58.28278,0 117.5906,58.18555,0 117.5739,58.13582,0 117.44,58.15721,0 117.4075,58.12721,0 117.4139,58.08749000000001,0 117.3725,58.0611,0 117.3958,58.02610000000001,0 117.3647,57.99554,0 117.3661,57.92749,0 117.4175,57.90666,0 117.31,57.84388000000001,0 117.123,57.84277,0 117.0844,57.80416000000001,0 117.1783,57.73888000000002,0 117.1378,57.63972,0 117.2878,57.61306,0 117.3105,57.56555,0 117.2522,57.51333000000002,0 117.2889,57.45833,0 117.3286,57.45443,0 117.365,57.32778,0 117.4444,57.32972,0 117.4264,57.25861,0 117.4742,57.23778,0 117.5464,57.25999,0 117.5964,57.32333,0 117.7758,57.30249000000001,0 117.7955,57.28722,0 117.7452,57.19583000000001,0 117.5969,57.15332,0 117.6783,57.06666,0 117.6889,57.01444999999999,0 117.6744,56.9747,0 117.57,56.93555000000001,0 117.5728,56.84722,0 117.498,56.87137,0 117.4605,56.81694000000001,0 117.4103,56.82583000000001,0 117.4153,56.85777,0 117.3447,56.86693000000001,0 117.3642,56.91610000000001,0 117.3311,56.9486,0 117.1933,56.87943,0 117.1355,56.80111,0 117.0222,56.81554,0 117.0017,56.79943000000001,0 117.0403,56.77638,0 116.9672,56.78111,0 116.8072,56.72388,0 116.7386,56.76083000000001,0 116.5594,56.7589,0 116.3639,56.84860000000001,0 116.1211,56.81221000000002,0 116.0417,56.86361,0 115.9628,56.86111,0 115.8617,56.93277000000001,0 115.7368,56.95655,0 115.5864,56.87249000000001,0 115.6136,56.78611,0 115.5903,56.71554,0 115.443,56.66388,0 115.4311,56.62823,0 115.4647,56.58971,0 115.6819,56.56527000000001,0 115.6755,56.49277,0 115.7988,56.42968000000001,0 115.7844,56.40193,0 115.6797,56.39721,0 115.6841,56.29694,0 115.7619,56.17416,0 115.8369,56.14943,0 115.7691,56.11694,0 115.7855,56.07193000000001,0 115.7586,56.04111000000001,0 115.898,55.91667000000001,0 115.8419,55.82638000000001,0 115.8683,55.74499,0 115.8411,55.67222000000001,0 115.913,55.6461,0 115.8894,55.49889000000001,0 115.9672,55.44526000000001,0 115.93,55.39694,0 115.9639,55.36555,0 116.0694,55.37944,0 116.1144,55.34749000000002,0 116.4022,55.36082,0 116.4616,55.30555,0 116.4694,55.22748,0 116.6991,55.11472000000001,0 116.7825,55.11028,0 116.8411,55.02138,0 116.8264,54.97860000000001,0 116.8892,54.94165,0 116.8778,54.90527,0 116.9239,54.79554,0 116.8694,54.7686,0 116.8739,54.70416,0 116.7697,54.66109,0 116.77,54.59222,0 116.7144,54.56333000000001,0 116.7119,54.52944,0 116.5372,54.50943,0 116.5228,54.46408,0 116.185,54.50722,0 115.6708,54.42388,0 115.5092,54.36472000000001,0 115.4993,54.30138000000001,0 115.1833,54.18444,0 115.1494,54.12027000000001,0 115.0241,54.07027000000002,0 115.0239,54.03082,0 114.9758,53.99249,0 114.5958,53.90277,0 114.5031,53.80915000000001,0 114.4453,53.80249000000001,0 114.3747,53.81249,0 114.2961,53.74666000000001,0 114.1431,53.75610000000001,0 113.9947,53.71694,0 113.9686,53.69944000000001,0 113.9744,53.64444000000001,0 113.8147,53.61644,0 113.8955,53.53472,0 113.8278,53.4575,0 113.8322,53.38971999999999,0 113.9433,53.35638,0 113.9639,53.31945,0 113.94,53.28444,0 113.9822,53.23305,0 114.048,53.25249,0 114.0464,53.22359,0 114.0925,53.2047,0 114.2017,53.19222,0 114.1269,53.07194,0 114.2314,53.10361000000001,0 114.3253,53.06777,0 114.2814,53.02139,0 114.3172,52.96721,0 114.2322,52.96527,0 114.2422,52.92749,0 114.2144,52.89054000000001,0 114.2422,52.82388,0 114.1236,52.71832,0 113.9542,52.62555,0 113.8978,52.63499,0 113.738,52.57722,0 113.5792,52.45027,0 113.5341,52.49416,0 113.2733,52.47805000000001,0 112.9303,52.33665000000001,0 112.5389,52.34972000000001,0 112.4925,52.25000000000001,0 112.4022,52.20694,0 112.2964,52.25278000000001,0 112.2089,52.24054,0 112.1683,52.30389000000001,0 112.0608,52.27833,0 111.6078,51.92778,0 111.198,51.82361000000001,0 111.1397,51.83527,0 111.015,51.78221000000001,0 111.0019,51.72222,0 110.8414,51.66915000000002,0 110.8639,51.59222,0 110.7817,51.57471,0 110.6961,51.50277,0 110.5447,51.49471,0 110.4205,51.52222,0 110.3947,51.57944,0 110.0491,51.62000000000001,0 109.6789,51.46305,0 109.4289,51.41610000000001,0 109.38,51.34666,0 109.3386,51.39138,0 109.2522,51.36221000000001,0 109.0636,51.50861,0 108.945,51.43999000000002,0 108.743,51.44583000000001,0 108.6208,51.51306,0 108.547,51.47527,0 108.4736,51.34499,0 108.3525,51.26528,0 108.4542,51.22776000000001,0 108.5747,51.11528,0 108.4997,51.05915000000002,0 108.3322,51.04887999999999,0 108.2515,50.83393,0 108.0655,50.75804999999999,0 108.1794,50.65915,0 108.4167,50.61361,0 108.5447,50.52777,0 108.6583,50.53777,0 108.6853,50.50417,0 108.6039,50.45221999999999,0 108.4369,50.46249000000002,0 108.3386,50.40444000000001,0 108.2042,50.41109,0 108.1325,50.31444,0 108.0761,50.35332,0 107.9855,50.33721,0 107.9375,50.22221,0 107.8936,50.19249000000001,0 107.8205,50.20665000000002,0 107.7736,50.15749000000002,0 107.7619,50.10471,0 107.8008,50.09166000000001,0 107.7989,50.02999,0 107.7536,49.97955000000001,0 107.8133,49.94860000000001,0 107.9806,49.94083,0 107.9553,49.85167,0 107.9892,49.74499,0 107.9475,49.68333,0 108.0319,49.67471,0 108.0419,49.61082,0 108.1375,49.55804,0 108.2719,49.53555000000001,0 108.3589,49.44526000000001,0 108.5275,49.34555,0 108.6511,49.33173000000001,0 109.2069,49.36028,0 109.3519,49.33694,0 109.5442,49.23249,0 109.7394,49.23499000000001,0 109.8503,49.18999,0 110.2369,49.16945,0 110.4011,49.25500000000001,0 110.6303,49.15249,0 110.7886,49.14944,0 110.9811,49.20083,0 111.3714,49.37416,0 111.498,49.34916000000001,0 111.6822,49.40665,0 111.9639,49.40694,0 112.4917,49.54138,0 112.7669,49.50083,0 113.0908,49.59859,0 113.1014,49.67888,0 113.2167,49.81917,0 113.5861,50.01639,0 113.7825,50.08693000000002,0 113.8747,50.08693000000002,0 114.1764,50.24833,0 114.313,50.28416,0 114.4439,50.24527,0 114.6758,50.26415999999999,0 114.8542,50.22832,0 115.0236,50.15193,0 115.2053,49.99833,0 115.3964,49.90110000000001,0 115.7547,49.88443000000001,0 116.0697,50.00278,0 116.2461,50.02749000000001,0 116.6155,49.93138,0 116.7114,49.83046000000001,0 117.17,49.6525,0 117.4944,49.62305,0 117.872,49.51022,0 117.8958,49.55,0 118.3658,49.77832000000002,0 118.3855,49.81667000000001,0 118.4647,49.82444,0 118.5833,49.92694,0 119.0996,49.99044,0 119.2141,50.01528,0 119.3222,50.09722000000001,0 119.3481,50.15948,0 119.3289,50.27388000000001,0 119.368,50.30999,0 119.348,50.34833,0 119.1983,50.34527,0 119.1353,50.38972,0 119.2422,50.44526,0 119.2869,50.59389000000001,0 119.5022,50.74221000000001,0 119.5225,50.90499,0 119.7467,51.0736,0 119.7805,51.1661,0 119.7553,51.20750000000001,0 119.818,51.21416,0 119.8097,51.26416,0 119.9208,51.33638,0 119.8914,51.37417,0 119.9566,51.38999,0 119.983,51.49305,0 120.0491,51.54777000000001,0 120.0969,51.66138,0 120.1972,51.68610000000002,0 120.4886,51.8772,0 120.6578,51.9175,0 120.7128,51.98249000000001,0 120.695,52.04860999999999,0 120.7531,52.07917,0 120.7828,52.15526,0 120.7592,52.23916,0 120.6228,52.34026999999999,0 120.6867,52.43361000000001,0 120.7136,52.54472000000001,0 120.4403,52.63722,0 120.1891,52.58028,0 120.073,52.59,0 120.0306,52.61721,0 120.0292,52.76805,0 120.2728,52.85777,0 120.8639,53.27972000000001,0 121.2083,53.27055000000001,0 121.325,53.31833,0 121.4738,53.32382,0 121.83,53.41305,0 122.0261,53.41397,0 122.3144,53.48777,0 122.41,53.43721000000001,0 122.8244,53.45,0 123.1533,53.50054999999999,0 123.2461,53.55305,0 123.4789,53.49917,0 123.4975,53.54694,0 123.5428,53.53388,0 123.5294,53.49944,0 123.6194,53.54277,0 123.6975,53.49583,0 123.9108,53.46471,0 124.1044,53.34083,0 124.2553,53.35665,0 124.4022,53.21221,0 124.6528,53.18581,0 124.7058,53.13443000000001,0 124.805,53.13305,0 124.8516,53.08915,0 124.89,53.09471,0 124.8755,53.14388000000001,0 124.9122,53.16972,0 125.1342,53.19749000000001,0 125.4661,53.08388000000001,0 125.5061,53.03832,0 125.623,53.05,0 125.7289,52.97943,0 125.7191,52.94222,0 125.6486,52.91276,0 125.6469,52.87887000000001,0 125.8447,52.89943000000002,0 125.8592,52.85166000000001,0 125.9705,52.76333,0 126.0508,52.78583,0 126.0955,52.76444,0 126.0355,52.7211,0 126.0642,52.67638,0 125.973,52.64167,0 125.9886,52.58222,0 126.0308,52.56333,0 126.0939,52.58804,0 126.2094,52.50139000000002,0 126.1977,52.46444,0 126.2675,52.4586,0 126.3403,52.38942999999999,0 126.3203,52.30832,0 126.4364,52.28082000000001,0 126.3064,52.20417,0 126.5572,52.13055,0 126.5122,52.03889,0 126.4616,52.02694,0 126.4422,51.98804,0 126.6414,51.74527,0 126.7214,51.7086,0 126.7292,51.63833000000001,0 126.6728,51.57471,0 126.8025,51.53694,0 126.8247,51.50139,0 126.7905,51.42443000000001,0 126.9153,51.37915,0 126.9019,51.33943,0 126.8214,51.33028000000001,0 126.8161,51.26639000000001,0 126.8933,51.23915000000001,0 126.8611,51.30693999999999,0 126.9755,51.31360999999999,0 126.8986,51.18665,0 126.9305,51.05999000000001,0 127.1272,50.91555,0 127.2175,50.78416,0 127.2972,50.73249,0 127.28,50.68083,0 127.3677,50.57083,0 127.2894,50.46027000000001,0 127.3542,50.41332,0 127.3366,50.31027,0 127.5861,50.20856,0 127.5697,50.12833,0 127.4883,50.04221,0 127.4878,49.98055000000002,0 127.5314,49.91972000000001,0 127.5083,49.82,0 127.5419,49.78249000000001,0 127.6717,49.74889000000001,0 127.6914,49.66721,0 127.8214,49.5911,0 127.9744,49.60249000000001,0 128.075,49.54222000000001,0 128.1911,49.53416000000001,0 128.5052,49.58694,0 128.6259,49.56967000000001,0 128.6689,49.61193,0 128.8025,49.55916,0 128.7525,49.46804000000001,0 128.8752,49.47776,0 128.9927,49.44165,0 129.0769,49.35279,0 129.1997,49.39059000000001,0 129.3535,49.3423,0 129.3691,49.41396000000001,0 129.4122,49.43176,0 129.5235,49.39124,0 129.545,49.29318,0 129.7219,49.26626,0 129.7327,49.19294,0 129.8474,49.15796000000001,0 129.833,49.11796,0 129.9127,49.08241,0 129.9164,49.02963,0 130.2289,48.86221,0 130.418,48.8961,0 130.5044,48.85194,0 130.6277,48.87465,0 130.675,48.84415000000001,0 130.523,48.60277,0 130.6175,48.56194000000001,0 130.6269,48.47720000000001,0 130.7578,48.48805,0 130.7375,48.41833,0 130.8322,48.29694,0 130.6594,48.0986,0 130.6814,48.04554,0 130.8897,47.90028,0 130.9461,47.80055,0 130.9464,47.71138,0 131.0405,47.67583,0 131.4167,47.7386,0 131.5372,47.71888,0 131.5755,47.6561,0 131.6783,47.69915000000002,0 131.9194,47.66999,0 132.3411,47.74248999999999,0 132.5425,47.71389000000001,0 132.6597,47.86583,0 132.6714,47.94972000000001,0 132.8089,47.94194,0 132.8844,48.00860999999999,0 133.018,48.03528000000001,0 133.0886,48.10167,0 133.3872,48.10528,0 133.5067,48.07138000000001,0 133.5936,48.17249,0 133.6964,48.18694,0 133.7514,48.24972,0 133.978,48.25972000000001,0 134.0458,48.32528000000001,0 134.4153,48.39112,0 134.4827,48.35028,0 134.5718,48.36446000000001,0 134.6105,48.30694,0 134.7408,48.26712,0 134.6814,48.22055,0 134.6678,48.10722,0 134.5839,48.06276,0 134.5572,47.99471000000001,0 134.5988,47.90471,0 134.6619,47.87417,0 134.6844,47.80090000000001,0 134.7703,47.73944,0 134.7672,47.7075,0 134.6836,47.62972,0 134.6741,47.57194,0 134.5521,47.46692,0 134.4791,47.42778,0 134.3147,47.4211,0 134.1825,47.32332000000001,0 134.1478,47.24942999999999,0 134.1947,47.20665000000001,0 134.2222,47.11083000000001,0 134.1312,47.07423,0 134.0627,46.97527000000001,0 134.0669,46.9161,0 134.0119,46.82389,0 134.0438,46.75289999999999,0 133.9977,46.64016,0 133.9016,46.57222,0 133.8458,46.47554000000001,0 133.85,46.43999,0 133.9286,46.39249,0 133.8619,46.33138,0 133.9102,46.31444,0 133.8839,46.29361,0 133.9002,46.25031000000001,0 133.6869,46.14332,0 133.7247,46.06528,0 133.6605,45.93458,0 133.6108,45.93194,0 133.583,45.87137,0 133.5222,45.88665,0 133.4747,45.82027999999999,0 133.508,45.77777,0 133.4419,45.69804,0 133.4886,45.68277000000001,0 133.4533,45.64722,0 133.4683,45.62222,0 133.4191,45.60722,0 133.4171,45.5691,0 133.1905,45.50416000000001,0 133.1491,45.45083000000001,0 133.0925,45.24415,0 133.1222,45.12860000000001,0 133.0333,45.06167,0 132.9233,45.02194000000001,0 131.9886,45.24194,0 131.8647,45.34555,0 131.7536,45.21305000000001,0 131.6464,45.19887,0 131.6444,45.10555,0 131.4666,44.96721,0 131.35,44.97471,0 131.2125,44.91055,0 131.118,44.92583,0 131.0425,44.86333,0 130.9539,44.8461,0 131.0955,44.69137,0 131.298,44.05194,0 131.2472,44.0275,0 131.2311,43.97387,0 131.2461,43.91806,0 131.1991,43.81889,0 131.2205,43.59527,0 131.1889,43.53666,0 131.1944,43.52777,0 131.223,43.51167,0 131.3044,43.45583,0 131.3114,43.39222,0 131.2741,43.36333,0 131.2611,43.26445,0 131.1911,43.19665,0 131.2144,43.13305,0 131.1047,43.03611,0 131.1322,42.91916,0 131.0458,42.90193,0 131.0153,42.855,0 130.8186,42.87610000000001,0 130.7705,42.83194,0 130.638,42.83167,0 130.4052,42.71804,0 130.4589,42.67999,0 130.5389,42.68194,0 130.6052,42.61971000000001,0 130.618,42.57944000000001,0 130.5591,42.50667000000001,0 130.6044,42.42186,0 130.5675,42.44305,0 130.5147,42.60222,0 130.4614,42.59389,0 130.4725,42.55694,0 130.4372,42.545,0 130.4255,42.60222,0 130.2433,42.71833,0 130.2522,42.89249,0 130.1008,42.91194,0 130.1358,42.96221,0 130.1075,42.97833,0 129.9996,42.96142,0 129.9075,43.00581,0 129.8756,42.9897,0 129.9056,42.96999,0 129.8512,42.95998,0 129.7578,42.72971,0 129.7533,42.69415,0 129.7875,42.675,0 129.7427,42.64083,0 129.7608,42.60332,0 129.725,42.56139,0 129.7119,42.44415,0 129.5908,42.44526,0 129.5397,42.36361,0 129.4422,42.43443000000001,0 129.3419,42.44583,0 129.3441,42.41471,0 129.24,42.37417,0 129.2377,42.32194,0 129.1905,42.31333,0 129.2244,42.29639,0 129.1758,42.23499,0 129.2102,42.21721,0 129.0141,42.0942,0 128.9577,42.08111,0 128.9122,42.0211,0 128.7291,42.04695,0 128.4894,41.99555,0 128.2825,42.03916,0 128.0589,42.00332,0 128.1019,41.7961,0 128.3019,41.57778,0 128.2044,41.41667000000001,0 128.1127,41.36971,0 128.1061,41.39415,0 128.0441,41.38943,0 128.0475,41.41888,0 128.0208,41.4086,0 128.0008,41.44555,0 127.9814,41.42276,0 127.8739,41.43943,0 127.8583,41.40444,0 127.6475,41.40277,0 127.5572,41.42972,0 127.5391,41.46361,0 127.2708,41.4725,0 127.2872,41.50111,0 127.1022,41.53528,0 127.1786,41.58749,0 127.057,41.64351,0 127.04,41.67194,0 127.078,41.68194,0 127.0453,41.72444,0 126.9364,41.76305,0 126.9361,41.79444,0 126.7975,41.7311,0 126.7869,41.69222,0 126.6947,41.74027,0 126.6789,41.72444,0 126.7222,41.69804000000001,0 126.6151,41.66418,0 126.5633,41.61092,0 126.5844,41.56860000000001,0 126.5008,41.43194,0 126.5272,41.3575,0 126.4561,41.35722,0 126.2792,41.15277,0 126.1239,41.08111,0 126.1322,41.04416000000001,0 126.0733,40.97305,0 125.9775,40.91331,0 126.0169,40.89999,0 125.8786,40.89472,0 125.8214,40.86139,0 125.7619,40.88361,0 125.6531,40.82166,0 125.6803,40.76554,0 125.5641,40.77832,0 125.5447,40.7186,0 125.4642,40.7136,0 125.4058,40.62082,0 125.2861,40.64749,0 125.248,40.60388,0 125.0178,40.53082,0 125.04,40.45722,0 124.8805,40.47054,0 124.8328,40.40915,0 124.7433,40.37,0 124.7084,40.30505,0 124.5547,40.24222000000001,0 124.3736,40.09361,0 124.3702,40.0028,0 124.1097,39.48034,0 124.1097,37.96414,0 124.1097,32.96414,0 127.5079,32.96414,0 127.5079,32.5252,0 127.5079,27.5252,0 122.8135,27.5252,0 122.8135,23.56643,0 127.5079,23.5489,0 127.5079,23.43974,0 127.5079,18.43974,0 127.5079,13.43974,0 127.5079,8.439740000000001,0 127.5079,3.439736,0 127.1436,2.912129,0 124.3024,-1.202193,0 124.3024,-3.067723,0 125.441,-3.067723,0 125.441,-7.306758,0 127.3328,-7.298002000000002,0 127.3328,-8.906616,0 127.3328,-13.90662,0 127.3967,-13.965,0 127.4278,-13.95666,0 127.4466,-14.05916,0 127.5044,-14.06334,0 127.6136,-14.13611,0 127.7605,-14.30055,0 127.8228,-14.38694,0 127.8247,-14.44444,0 127.865,-14.42056,0 127.8514,-14.48222,0 127.8855,-14.47277,0 127.9494,-14.52667,0 127.9453,-14.57639,0 128.0036,-14.56111,0 128.0697,-14.64584,0 128.2153,-14.69975,0 128.3259,-14.71017,0 128.3877,-14.79719,0 128.5417,-14.75778,0 129,-14.87108,0 129.0006,-16.0049,0 129.0032,-21.0049,0 129.0059,-26.0049,0 129.0052,-26.69261,0 129.0003,-31.69261,0 128.2483,-32.01084,0 128.0039,-32.09223,0 127.7539,-32.1286,0 127.508,-32.22667,0 127.508,-33.42665,0 127.508,-38.42665,0 127.508,-43.42665,0 127.508,-48.42665000000001,0 127.508,-53.42665000000001,0 127.508,-58.42665,0 127.508,-63.42665,0 127.508,-68.42665,0 127.508,-72.02666000000001,0 127.508,-77.02666000000001,0 127.508,-82.02666000000001,0 127.508,-84.89999,0 127.508,-89.90000000000001,0 126.57,-89.90000000000001,0 125.632,-89.90000000000001,0 124.694,-89.90000000000001,0 123.7561,-89.90000000000001,0 122.8181,-89.90000000000001,0 121.8801,-89.90000000000001,0 120.9422,-89.90000000000001,0 120.0042,-89.90000000000001,0 119.0662,-89.90000000000001,0 118.1282,-89.90000000000001,0 117.1903,-89.90000000000001,0 116.2523,-89.90000000000001,0 115.3143,-89.90000000000001,0 114.3764,-89.90000000000001,0 113.4384,-89.90000000000001,0 112.5004,-89.90000000000001,0 112.5004,-89.43648,0 112.5004,-84.43648,0 112.5004,-79.43648,0 112.5004,-74.43648,0 112.5004,-69.43648000000002,0 112.5004,-64.43649000000001,0 112.5004,-59.43648,0 112.5004,-54.73646999999999,0 112.5004,-49.73648,0 112.5004,-44.73647,0 112.5004,-39.73648000000001,0 112.5004,-39.63649,0 112.5004,-34.63648,0 112.5004,-29.63648,0 112.5004,-24.63648,0 112.5004,-19.63648,0 112.5004,-14.63648,0 112.5004,-9.636480000000001,0 115.767,-9.636480000000001,0 115.767,-7.548669,0 116.3209,-7.548669,0 116.3209,-5.205232,0 112.5004,-5.205232,0 112.5075,-3.479589,0 112.2021,-3.4867,0 111.9465,-3.62872,0 111.7903,-3.600316,0 111.7335,-3.536407,0 111.7903,-3.387277000000001,0 111.7761,-3.074815,0 111.3358,-3.032208,0 111.0162,-3.124531,0 110.9097,-3.138724,0 110.7819,-3.103219000000001,0 110.6754,-3.138724,0 110.5049,-2.996703999999999,0 110.3061,-3.060612,0 110.1712,-3.032208,0 110.0646,-2.925694000000001,0 110.1143,-2.499607,0 110.0717,-2.258163,0 110.093,-2.030923,0 110.0504,-1.952803,0 109.9297,-1.917289,0 109.8729,-1.839177,0 109.8942,-1.746865,0 109.9865,-1.682947,0 110.0433,-1.363393,0 109.7664,-1.207152,0 109.461,-1.349182,0 109.39,-1.285273,0 109.4255,-1.022518,0 109.2622,-0.9018005000000001,0 109.106,-0.5467235,0 109.0207,-0.2484725,0 109.113,0.02848446,0 109.0775,0.2344225,0 108.8929,0.2912305000000001,0 108.829,0.4758655000000001,0 108.6586,0.7457215000000002,0 108.6657,0.8522364,0 108.7438,0.8593374000000001,0 108.9071,1.086578,0 108.9071,1.1789,0 109.0278,1.363535,0 109.0278,1.491362,0 109.0775,1.576584,0 109.2409,1.725713,0 109.3237,1.966571,0 109.3237,4.869648,0 105.1191,4.869648,0 105.132,2.002301,0 104.3122,1.346534,0 103.9265,1.256534,0 103.7561,1.185812,0 103.5311,1.234025,0 103.4122,1.301534,0 103.2418,1.45583,0 103.2097,1.584413,0 102.9461,1.719422,0 102.8175,1.831931,0 102.6921,1.831931,0 102.5378,2.01195,0 102.3418,2.134089,0 102.1489,2.208024,0 101.9303,2.391254,0 101.8499,2.362329,0 101.8371,2.442689,0 101.7567,2.561625,0 101.5188,2.654846,0 101.416,2.786633,0 101.2906,2.815568,0 101.2038,2.93129,0 101.2167,3.040577,0 101.2874,3.114522,0 101.1781,3.345965,0 100.9499,3.657770000000001,0 100.5031,3.976011000000001,0 100.5673,4.663917,0 100.5095,4.824638,0 100.4195,4.901795,0 100.3311,5.074793,0 100.1688,5.261129,0 100.1668,5.375079,0 99.72359,6.164054,0 99.64923,6.352362,0 99.63088000000001,6.427682,0 99.84238000000002,6.479837,0 100.1271,6.424946000000001,0 100.1714,6.476660000000001,0 100.1958,6.702497,0 100.2939,6.703892,0 100.3344,6.586946000000001,0 100.3875,6.536106,0 100.4989,6.523056000000001,0 100.6611,6.4475,0 100.7542,6.501942,0 100.7655,6.451946,0 100.8336,6.419447,0 100.8575,6.234444,0 100.9514,6.239717000000001,0 100.9897,6.277500000000001,0 101.0333,6.243894,0 101.1155,6.248888000000001,0 101.1216,6.187221,0 101.0755,6.150555,0 101.12,6.098337,0 101.1194,5.984441,0 101.1014,5.92695,0 101.0358,5.896106,0 100.9902,5.788053,0 101.1458,5.631111,0 101.2561,5.705837,0 101.2897,5.810553,0 101.3516,5.808339,0 101.57,5.916663,0 101.6589,5.860557,0 101.6916,5.763608,0 101.7625,5.788889,0 101.8339,5.743340000000001,0 101.9438,5.861942,0 101.9483,5.969448,0 102.0916,6.110559,0 102.0952,6.236135,0 102.5034,6.235613,0 107.5034,6.229232,0 112.5034,6.222851,0 112.5076,9.711738,0 112.5137,14.71173,0 110.1489,14.71173,0 107.9865,18.50449,0 107.9893,21.3862,0 108.0038,21.44677,0 108.0824,21.49174,0 107.99,21.54241,0 107.948,21.54195,0 107.8586,21.65083,0 107.7831,21.66693,0 107.5361,21.58638,0 107.4858,21.59778,0 107.4578,21.65833,0 107.3627,21.60526,0 107.3014,21.73111,0 107.2208,21.70832,0 107.0203,21.8225,0 107.0491,21.90722,0 107.0292,21.93666,0 106.9327,21.92749,0 106.9017,21.97056,0 106.8086,21.97361,0 106.7553,22.01527000000001,0 106.6794,21.97389,0 106.7033,22.08972,0 106.6653,22.19944,0 106.6958,22.2225,0 106.6583,22.32444,0 106.5655,22.34583,0 106.5517,22.45682,0 106.6072,22.60695,0 106.6386,22.61416,0 106.6761,22.57277,0 106.7128,22.58666,0 106.7669,22.74249,0 106.8217,22.80028,0 106.7614,22.79471,0 106.7072,22.865,0 106.648,22.85333,0 106.6005,22.90917,0 106.5203,22.93528,0 106.4194,22.87056,0 106.285,22.8586,0 106.25,22.87416,0 106.2294,22.95083,0 106.1347,22.98861,0 106.0153,22.98472,0 105.9872,22.93583,0 105.8725,22.91027,0 105.7244,23.04805,0 105.5775,23.05916,0 105.5657,23.09678,0 105.5544,23.16028,0 105.4458,23.28445,0 105.398,23.28167,0 105.3275,23.37803,0 105.2647,23.33416,0 105.2405,23.26055,0 105.0811,23.24222,0 104.9619,23.16556,0 104.9075,23.18027,0 104.8763,23.11084,0 104.825,23.10611,0 104.8611,22.93666,0 104.7314,22.81666,0 104.6044,22.80972,0 104.5836,22.84472,0 104.37,22.68583,0 104.2619,22.73777,0 104.2672,22.82919,0 104.1116,22.79972,0 104.0331,22.68527,0 104.0097,22.52424,0 103.9644,22.49911,0 103.6553,22.7825,0 103.6178,22.78,0 103.5636,22.70138,0 103.5842,22.64416,0 103.5224,22.58437,0 103.4569,22.64249,0 103.4305,22.74388,0 103.3289,22.79500000000001,0 103.28,22.67304,0 103.1839,22.62888,0 103.1556,22.58666,0 103.1708,22.54694,0 103.0761,22.49833,0 103.0725,22.44749,0 103.0305,22.43555,0 102.9286,22.48194000000001,0 102.8628,22.60139,0 102.6103,22.72278,0 102.5603,22.69749,0 102.5428,22.74889,0 102.4797,22.77389,0 102.4261,22.68832,0 102.383,22.67749,0 102.4164,22.63583,0 102.2697,22.49166,0 102.2533,22.41471,0 102.1867,22.43,0 102.1407,22.39628,0 102.1147,22.43389000000001,0 102.0308,22.45527,0 101.92,22.43611,0 101.8755,22.38305,0 101.8,22.48943,0 101.738,22.49694,0 101.6719,22.44639000000001,0 101.6805,22.37917,0 101.6269,22.28166,0 101.57,22.27917,0 101.5389,22.24417,0 101.5969,22.16166,0 101.5744,22.10917,0 101.6255,21.97193,0 101.7086,21.92889,0 101.7847,21.825,0 101.7525,21.72443,0 101.7831,21.65083,0 101.8331,21.62138,0 101.763,21.57833,0 101.7775,21.515,0 101.7489,21.48194,0 101.7392,21.31639,0 101.8514,21.24916,0 101.838,21.21111,0 101.7822,21.20693,0 101.7872,21.14417,0 101.73,21.13972,0 101.67,21.19971,0 101.6075,21.18027,0 101.6153,21.22833,0 101.5686,21.24749,0 101.2819,21.18027,0 101.2283,21.31222,0 101.2653,21.37611,0 101.1936,21.41277,0 101.2164,21.54556,0 101.1482,21.57264,0 101.1686,21.63028,0 101.1053,21.77138,0 100.8867,21.68333,0 100.6667,21.47943,0 100.485,21.45833,0 100.43,21.52861,0 100.3789,21.53889,0 100.2039,21.43535,0 100.1239,21.50472,0 100.1061,21.58333,0 100.1719,21.65388,0 100.125,21.69056000000001,0 100.0022,21.69611,0 99.97360000000001,21.73388,0 99.94193000000001,21.825,0 99.99054,21.95833,0 99.96805000000002,22.05027,0 99.88055,22.06145,0 99.84388,22.02332,0 99.74915,22.07527,0 99.70914999999999,22.03972,0 99.64444,22.09917,0 99.52164999999999,22.1,0 99.46555000000002,22.13583,0 99.35942,22.09306,0 99.23248,22.11444,0 99.16277,22.15916,0 99.20055000000001,22.17333,0 99.18221000000001,22.195,0 99.27054,22.34777,0 99.26082,22.39111,0 99.38442000000001,22.50389,0 99.38499,22.60333,0 99.32805000000001,22.74472,0 99.44053,22.865,0 99.44553000000003,22.94972,0 99.51416,22.91222000000001,0 99.56638000000001,22.93805,0 99.50388,23.08972,0 99.35638,23.13499,0 99.11109999999999,23.10194,0 99.06137000000001,23.12361,0 99.05888,23.1675,0 98.88136,23.18805,0 98.94025000000002,23.31361,0 98.87886,23.32972,0 98.91859000000001,23.36472,0 98.91470000000001,23.41722,0 98.87997,23.4836,0 98.82471000000001,23.48083,0 98.80609000000001,23.54167,0 98.88582,23.61333000000001,0 98.81915000000001,23.70556,0 98.81554000000001,23.76722,0 98.68858000000002,23.80139000000001,0 98.70387000000002,23.95138,0 98.67720000000001,23.96805,0 98.89391000000001,24.09795,0 98.89072,24.16008,0 98.59703,24.07648,0 98.54462,24.1257,0 98.44659000000002,24.13496,0 98.35732000000002,24.10319000000001,0 98.22078000000001,24.12531,0 98.06448,24.0891,0 97.91249000000001,24.02666,0 97.85249000000002,23.95832,0 97.78831,23.94888,0 97.64998,23.8517,0 97.53637000000001,23.95056,0 97.72470000000001,24.11806,0 97.74970999999999,24.16999,0 97.72749,24.22499,0 97.75999000000002,24.2575,0 97.74165000000002,24.29027,0 97.6647,24.3061,0 97.66888,24.34166000000001,0 97.71776000000001,24.35833,0 97.66526,24.44416,0 97.53082000000001,24.44749,0 97.56248000000001,24.57111,0 97.55247,24.74304,0 97.68941000000001,24.83445,0 97.80025999999999,24.85139,0 97.73665000000003,24.91888,0 97.72581,25.06472,0 97.72331000000003,25.06944,0 97.78943,25.1375,0 97.83333,25.25916000000001,0 97.94108000000001,25.21416,0 98.06944,25.31444,0 98.10746,25.38722,0 98.1386,25.38694,0 98.12497999999999,25.50584,0 98.16804999999999,25.55027,0 98.16526,25.62277,0 98.32665000000002,25.55167000000001,0 98.38305,25.59195,0 98.39166,25.65666,0 98.53083,25.84555,0 98.63193,25.80111,0 98.71638000000002,25.87749,0 98.64166,25.98444,0 98.60525,25.98861,0 98.56805,26.12306,0 98.64888000000001,26.15166,0 98.66443,26.09833,0 98.73055000000002,26.17722,0 98.70110000000001,26.25195,0 98.66582,26.26056000000001,0 98.73748999999999,26.38694,0 98.77554000000001,26.60583000000002,0 98.75555,26.72417,0 98.77777,26.79167,0 98.7397,26.86416,0 98.76221,27.06445,0 98.70694,27.09778,0 98.69166,27.20193,0 98.73665,27.32917000000001,0 98.68552,27.46611,0 98.70471000000001,27.5825,0 98.66804999999999,27.61944,0 98.59471000000002,27.59971000000001,0 98.55110000000001,27.66693,0 98.52164999999999,27.64667,0 98.43248000000001,27.68944,0 98.40860000000001,27.55750000000002,0 98.36887,27.52944,0 98.31638,27.54194,0 98.22693000000002,27.73471,0 98.23248,27.82471,0 98.16692000000001,27.87055,0 98.20387000000001,27.91638,0 98.13082,27.96916,0 98.15776,28.11333,0 98.13621999999999,28.15632,0 98.06944,28.21138,0 98.01304,28.21472,0 98.01888,28.27832,0 97.90886999999999,28.37638,0 97.79694000000001,28.34916,0 97.71138000000001,28.51694,0 97.63136,28.48416,0 97.56944,28.54888,0 97.47083000000001,28.39111,0 97.46887000000001,28.29611,0 97.41054,28.2925,0 97.34887000000002,28.22278,0 97.13499000000002,28.38138,0 96.98471000000001,28.3325,0 96.88970999999999,28.37861,0 96.78415,28.37306,0 96.65387,28.46749,0 96.46053000000001,28.42194,0 96.40192,28.35111,0 96.39694000000002,28.35333,0 96.36165000000001,28.39278,0 96.26471000000001,28.41527,0 96.36638000000001,28.48082000000001,0 96.34526,28.55695,0 96.47832,28.63861,0 96.47083000000001,28.68833,0 96.60609000000001,28.73944,0 96.61582000000001,28.79027,0 96.51027000000001,28.96444,0 96.47581000000001,28.97472,0 96.51194000000001,29.07,0 96.34387,29.0325,0 96.16914,28.90361,0 96.14861000000001,28.94333,0 96.18222000000002,28.99527,0 96.11913,29.07916000000001,0 96.25665000000001,29.16444,0 96.34860000000001,29.18,0 96.39525999999999,29.25527,0 96.36249000000001,29.29055,0 96.28943,29.24139,0 96.23526000000001,29.25445,0 96.08389,29.46777000000001,0 95.59108999999999,29.255,0 95.53442,29.21167,0 95.54665,29.13861,0 95.49609000000001,29.14083000000001,0 95.46053000000001,29.05167,0 95.38777,29.03527,0 94.98471000000001,29.17361,0 95.00915999999999,29.12388,0 94.83335,29.16837,0 94.79227,29.2608,0 94.69736,29.33652,0 94.64751,29.33347,0 94.5812,29.23153,0 94.42776000000002,29.21551,0 94.23455,29.07348,0 94.15246000000002,28.9307,0 94.0211,28.83603,0 94.01243,28.74736,0 93.96173,28.6692,0 93.98059000000001,28.64518,0 93.85851000000001,28.69038,0 93.64729,28.64746,0 93.50206000000001,28.67916,0 93.49408,28.65192,0 93.35194000000001,28.61877000000001,0 93.28152000000002,28.49296,0 93.19270000000002,28.43213,0 93.23817000000001,28.38745,0 93.22205000000001,28.3193,0 93.04571,28.31026,0 93.01044000000003,28.24225,0 92.99153,28.26286,0 92.88734000000001,28.19872000000001,0 92.84125,28.1888,0 92.83004000000001,28.21276,0 92.75290000000001,28.16892,0 92.67525000000001,28.08071,0 92.72838000000002,28.03598,0 92.69942000000002,27.95555,0 92.45248000000001,27.82639,0 92.4147,27.86028,0 92.38666000000002,27.80472,0 92.35831000000003,27.84443,0 92.33110000000001,27.79472,0 92.26804,27.87472,0 92.25388,27.81582,0 92.11832000000003,27.8125,0 92.01443,27.73471,0 91.65776,27.76472,0 91.66721,27.94194,0 91.41943000000001,28.01056,0 91.31499,28.09667,0 91.21444,28.07305,0 91.08693,27.96999,0 91.01082000000001,27.98,0 90.90998999999999,28.04944,0 90.69942,28.09583,0 90.60804,28.06445,0 90.37053000000002,28.08027,0 90.35027,28.11222,0 90.39554000000001,28.19888,0 90.38165000000001,28.25139,0 90.00002000000002,28.32405,0 89.95027,28.29222,0 89.89388,28.30611,0 89.79276000000002,28.19416,0 89.6236,28.15833,0 89.48749000000001,28.05777,0 89.35999,27.87167000000001,0 89.22553000000001,27.795,0 89.12804,27.62333,0 89.12581,27.5675,0 88.97110000000001,27.47361,0 88.91692000000001,27.32083,0 88.78333000000001,27.43805,0 88.76331999999999,27.54333,0 88.83443,27.66111,0 88.88081,27.83667,0 88.83167,28.01334,0 88.62276,28.11805,0 88.53415,28.02917,0 88.14554,27.95527,0 88.12053,27.90471000000001,0 88.14279999999999,27.86605,0 87.86887,27.91888,0 87.79721000000001,27.83722,0 87.72054,27.805,0 87.66054,27.82888,0 87.59775999999999,27.81027,0 87.5461,27.84583,0 87.39360000000001,27.80916,0 87.40416999999999,27.86055,0 87.30609,27.81639,0 87.19275,27.82306,0 87.03943000000001,27.96083,0 86.93304000000002,27.95055,0 86.87415,28.01777,0 86.76416,28.02666,0 86.75805,28.08027,0 86.68637,28.11222,0 86.63666000000001,28.08555,0 86.57193,28.10583000000001,0 86.53498999999999,27.95499,0 86.44498,27.90805,0 86.22638000000001,28.00667,0 86.18359,28.16388,0 86.0936,28.08611,0 86.13721,27.93194,0 86.08942999999999,27.89083000000001,0 86.01443,27.88277,0 85.97304,27.91583,0 85.97803999999999,27.98972,0 85.91887,28.03333,0 85.88611,28.15167,0 85.74722,28.23693000000001,0 85.71832000000002,28.33943,0 85.61998,28.25111,0 85.45889,28.30166,0 85.37665,28.26361,0 85.10332,28.31639,0 85.10193,28.44666,0 85.18192999999999,28.53,0 85.18996,28.60332,0 85.05998,28.64111,0 84.95470000000002,28.54416,0 84.84663999999999,28.54445,0 84.7747,28.59888,0 84.70610000000001,28.60139,0 84.70663999999999,28.66055,0 84.63639000000001,28.70277000000002,0 84.48109,28.73667,0 84.39554,28.85917,0 84.23693000000002,28.91888000000001,0 84.2561,29.04222,0 84.20249,29.05695,0 84.15833000000001,29.13472,0 84.18552,29.20556,0 84.13667,29.21443,0 84.11388000000001,29.26194,0 83.91249000000001,29.28972,0 83.72054,29.22889,0 83.67192,29.16027,0 83.55277,29.18583,0 83.52748,29.26916,0 83.38054,29.41638,0 83.37916,29.46611,0 83.34610000000001,29.49666,0 83.28442,29.47443,0 83.28306000000001,29.55111000000001,0 83.19525,29.63083,0 83.11749,29.62056000000001,0 83.09276,29.58305,0 82.9922,29.6725,0 82.90860000000001,29.69444,0 82.85525000000001,29.66889000000002,0 82.71053000000001,29.78972,0 82.71554999999999,29.83194,0 82.65581,29.83527000000001,0 82.55775,29.94277,0 82.23109,30.07527,0 82.17776000000001,30.06361,0 82.15027000000001,30.12556,0 82.17859,30.19055,0 82.10721,30.23083,0 82.10054,30.34222000000001,0 81.80304,30.36361,0 81.63721,30.42444,0 81.55775,30.38194,0 81.54192000000001,30.33056,0 81.42110000000001,30.38528,0 81.37777,30.16667,0 81.29082,30.13055,0 81.30193,30.08361,0 81.22360000000001,30.01027,0 81.10971000000001,30.02472,0 81.02536000000001,30.20436,0 80.99888,30.26194,0 80.80386,30.32666,0 80.75194999999999,30.395,0 80.60693000000001,30.47472,0 80.53888000000001,30.46443,0 80.32193,30.56472,0 80.20699999999999,30.57552,0 80.22776,30.62193,0 80.18749,30.67583000000001,0 80.25027,30.73999,0 80.17831,30.79945,0 80.09415,30.78666000000001,0 80.04192000000001,30.84694,0 79.94981,30.8849,0 79.87916,30.95916,0 79.74887,30.98972,0 79.59943,30.93556,0 79.49413,31.02416,0 79.42249,31.0275,0 79.39324000000001,31.10106,0 79.31499,31.13305,0 79.28665,31.22333,0 79.24026000000001,31.24417,0 79.21748,31.34083,0 79.09248,31.4375,0 79.01859,31.41138,0 79.00555,31.32555,0 78.94193,31.36,0 78.87766000000001,31.29163,0 78.77054,31.305,0 78.79276000000002,31.44333,0 78.71278,31.49833,0 78.84387,31.60417,0 78.79053999999999,31.67472,0 78.74249,31.68499,0 78.69247,31.77417,0 78.74507,31.91036,0 78.7711,31.98111,0 78.68053000000001,32.03527,0 78.54471000000001,32.20943,0 78.47593999999999,32.24305,0 78.47832,32.34999,0 78.44971,32.38694,0 78.4772,32.42471,0 78.39722,32.53111,0 78.42054,32.5661,0 78.6386,32.57778,0 78.70443,32.6311,0 78.76055,32.63556,0 78.78027,32.47887,0 78.97110000000001,32.35082,0 79.09915,32.37638,0 79.13164999999999,32.47499,0 79.25317000000001,32.516,0 79.31386999999999,32.49665,0 79.45722000000001,32.60249,0 79.51443,32.67222,0 79.53027,32.75416,0 79.47083000000001,32.79388,0 79.45027,32.88221,0 79.35609,32.965,0 79.40637,33.16166,0 79.18387,33.22582,0 79.10359,33.21971,0 79.09137,33.27499,0 78.99638000000002,33.31499,0 78.93651,33.408,0 78.91582,33.62944,0 79.04082,33.63943,0 79.01944,33.75444000000001,0 78.94941,33.83221,0 78.90886999999999,33.97028,0 78.97527,34.01721,0 79.42915000000001,34.02166,0 79.5247,34.11805,0 79.51166000000001,34.19027,0 79.57805000000001,34.2086,0 79.53915000000002,34.42999,0 79.72275999999999,34.42054,0 79.7636,34.45499,0 79.7247,34.52999,0 79.84387,34.57444,0 79.8875,34.66276000000001,0 80.07138000000001,34.66945,0 80.10248,34.7747,0 80.20166999999999,34.89388,0 80.19026,35.08764,0 80.29803,35.2075,0 80.28943,35.33999,0 80.38666000000001,35.42528,0 80.38388000000001,35.51111,0 80.29776,35.50333,0 80.2741,35.52753,0 80.20663999999999,35.56193,0 80.14776999999999,35.45722,0 80.05749,35.40777,0 79.96416000000001,35.59583,0 79.91914,35.61749,0 79.85887,35.5661,0 79.81303,35.62943,0 79.69359,35.65083,0 79.63443000000001,35.75916,0 79.65886999999999,35.81916,0 79.58109000000002,35.86971,0 79.46193,35.85804,0 79.43803000000001,35.96054000000001,0 79.32832999999999,35.98638,0 78.93442,35.89249,0 78.74193,35.92027,0 78.62553,35.81666,0 78.29915,35.70194,0 78.17221000000001,35.61943,0 78.13694,35.54333,0 77.97248999999999,35.57417000000001,0 77.92470000000002,35.48972,0 77.82393,35.50133000000001,0 77.7011,35.46111,0 77.43137,35.47165,0 77.30803000000002,35.53472,0 77.18747999999999,35.52805,0 77.07555000000001,35.58777,0 76.91443,35.59777,0 76.86415,35.64888,0 76.77805000000001,35.65526,0 76.7122,35.715,0 76.58971000000001,35.75695,0 76.56416,35.91276,0 76.42165,35.8336,0 76.17693,35.81444,0 76.12387,35.97776,0 75.97275999999999,36.01165,0 75.92609,36.07721,0 75.92303,36.1236,0 75.99387,36.15971,0 75.99359,36.20833,0 76.04166000000001,36.23751,0 75.99082,36.31444,0 76.00499000000001,36.4586,0 75.85526000000002,36.66717,0 75.63916,36.76355,0 75.54637,36.76963,0 75.52303000000001,36.72906,0 75.45444000000001,36.73044,0 75.39722,36.91406000000001,0 75.14444,36.99987,0 74.95972,36.98012,0 74.90166000000001,36.91093,0 74.81749000000001,37.02176000000001,0 74.73943,37.02037,0 74.69081,37.06259,0 74.56543000000001,37.02782,0 74.40054000000001,37.13896,0 74.39722,37.17841,0 74.47942999999999,37.17925,0 74.52970999999999,37.24178,0 74.65109,37.23457,0 74.75110000000001,37.30375,0 74.8111,37.22041,0 74.91575,37.23733,0 74.95804,37.28183,0 75.09665,37.32186,0 75.11109999999999,37.38353,0 75.18747999999999,37.40658,0 74.94942,37.56298,0 74.90277,37.64715,0 74.99109000000001,37.78382,0 74.90277,37.84717,0 74.93665000000001,37.88884,0 74.90833000000001,37.91049,0 74.91361000000001,38.01772,0 74.8147,38.07883,0 74.79443000000001,38.30603,0 74.8647,38.38882,0 74.85664,38.47048,0 74.78859,38.52742,0 74.71833,38.5291,0 74.35471,38.67439,0 74.13415999999999,38.67326,0 74.11081,38.6216,0 74.06052,38.60465,0 74.06887999999999,38.53659,0 73.93665,38.54105000000001,0 73.81776000000001,38.6077,0 73.80219,38.64983,0 73.75776999999999,38.73021,0 73.7625,38.80076,0 73.70499,38.88076,0 73.85332,38.96909,0 73.72165,39.08244,0 73.6172,39.23215,0 73.66998,39.34409,0 73.65569000000001,39.45483,0 73.84805,39.47493000000001,0 73.90248,39.56966,0 73.95609000000002,39.59771000000001,0 73.91080000000001,39.7252,0 73.84444000000001,39.75576,0 73.84498000000002,39.8055,0 73.99442999999999,40.04605000000001,0 74.19803,40.11383,0 74.36219,40.09965,0 74.73054999999999,40.33966,0 74.88443,40.32771,0 74.81026000000001,40.4198,0 74.86026,40.51939000000001,0 75.05888,40.44772,0 75.16137000000001,40.47022,0 75.22554,40.44688,0 75.57805000000001,40.64799,0 75.62276,40.59799,0 75.64554,40.4866,0 75.69664,40.44494,0 75.66137000000001,40.39827,0 75.6972,40.29911,0 75.92886,40.30550000000001,0 75.97803999999999,40.36327,0 76.06805,40.39577,0 76.19414,40.37799,0 76.27748,40.45438,0 76.33859,40.34855,0 76.48693,40.43105,0 76.55304,40.54411,0 76.63943,40.60856,0 76.64971,40.74494,0 76.79359,40.86245,0 76.78194000000001,40.94077,0 76.87387,41.01411,0 77.05831000000001,41.04911,0 77.13805000000001,41.01606,0 77.37747,41.028,0 77.54359000000001,40.98661,0 77.68471,41.00189,0 77.85471,41.0694,0 78.08083000000001,41.04079,0 78.24623,41.16513,0 78.37997,41.28384,0 78.37553,41.37882,0 78.53109000000001,41.46384,0 78.63997999999999,41.483,0 78.69553000000001,41.54301,0 79.20749000000001,41.72828,0 79.30943000000001,41.79134,0 79.43192999999999,41.78216,0 79.65498,41.88218000000001,0 79.77858000000001,41.88717,0 79.87943,42.01635,0 80.25139,42.04245,0 80.28332,42.07968000000001,0 80.23403,42.19622,0 80.2811,42.21218,0 80.29387,42.25218,0 80.23831000000001,42.3633,0 80.21720999999999,42.45051,0 80.24249,42.49051,0 80.18221,42.56802,0 80.17192,42.6605,0 80.26066,42.81941,0 80.57861,42.89108,0 80.56135999999999,42.92635,0 80.44443,42.95468,0 80.37665000000001,43.02524,0 80.64637999999999,43.14135,0 80.74359,43.10775,0 80.8147,43.13997,0 80.76914000000001,43.28886,0 80.66054,43.32884,0 80.73859000000002,43.4719,0 80.55371,43.81323,0 80.43886999999999,43.99219000000001,0 80.43136,44.05303,0 80.36276000000001,44.12524000000001,0 80.39999000000002,44.26414,0 80.34887000000001,44.45024,0 80.40721000000002,44.6022,0 80.37497999999999,44.65607,0 80.51666,44.7072,0 80.52083,44.73248,0 80.26221,44.82443,0 80.00166,44.79776,0 79.87581000000002,44.86554,0 79.87109000000001,44.90497,0 80.12138,45.03942000000001,0 80.39166,45.04915,0 80.46915,45.1111,0 81.05444,45.16608,0 81.68831,45.35082,0 81.79776,45.30581,0 81.81581,45.20053,0 81.94804000000001,45.15748,0 82.29694000000001,45.23775,0 82.48165,45.12748,0 82.54943,45.12331,0 82.63554000000001,45.24053,0 82.64943,45.43026,0 82.3622,45.49552000000001,0 82.31493,45.5448,0 82.51082,45.90192,0 82.57332000000001,46.17305,0 82.70889,46.35415,0 82.87387000000001,46.76359999999999,0 83.01470999999999,46.96027,0 83.03276,47.20416,0 83.18571,47.21664,0 83.56499,47.0611,0 83.90000000000001,46.97721,0 84.11109999999999,46.97166000000001,0 84.29471,47.0075,0 84.53194000000001,46.97527000000001,0 84.67804,46.99361,0 84.77887,46.93166,0 84.73526,46.83694,0 84.75942000000001,46.82638,0 84.96361,46.86415,0 85.25776999999999,47.0511,0 85.52931,47.06016,0 85.57331000000002,47.17694,0 85.68665,47.21194000000001,0 85.70555,47.2836,0 85.70055000000001,47.38388000000001,0 85.60359,47.51943,0 85.62221,47.62111,0 85.53777,47.95999,0 85.61388,48.15833,0 85.75915999999999,48.38777000000001,0 85.86248999999999,48.42527000000001,0 86.23081999999999,48.42527000000001,0 86.34415,48.49527000000001,0 86.46362000000001,48.49361,0 86.59610000000001,48.53611,0 86.64499000000002,48.61639,0 86.78333000000002,48.72776000000001,0 86.75943,48.79361,0 86.82138000000001,48.84665,0 86.75277000000001,48.90028000000002,0 86.73054999999999,48.97222,0 86.87469,49.11083000000001,0 86.99887,49.09944,0 87.16748,49.13304,0 87.34821,49.09261,0 87.46693000000001,49.07972,0 87.52528,49.12915,0 87.8407,49.17296000000001,0 87.98859,49.17722000000001,0 88.1622,49.27222,0 88.13193,49.36833000000001,0 88.22083000000001,49.46166,0 88.65082,49.50055,0 88.73081999999999,49.45083,0 88.89999000000002,49.44332,0 88.8875,49.54361000000001,0 88.92886,49.54639,0 89.01331999999999,49.46360000000001,0 89.23054999999999,49.53667,0 89.19748,49.61111,0 89.22665000000001,49.63833,0 89.37221,49.57972,0 89.45972,49.64999000000001,0 89.71138000000001,49.71472,0 89.73609999999999,49.74889000000001,0 89.6511,49.79527000000002,0 89.67137,49.82083,0 89.6375,49.855,0 89.64270000000001,49.90482999999999,0 89.98526,49.97222000000001,0 90.05137000000003,50.0825,0 90.24443000000001,50.12027,0 90.37858,50.18582000000001,0 90.50973000000001,50.22444000000001,0 90.69859,50.21943,0 90.74860000000001,50.29749,0 90.87025,50.32638000000001,0 91.02970999999999,50.43306,0 91.44748,50.4711,0 91.46776000000001,50.52694000000001,0 91.60693000000001,50.57305,0 91.65886999999999,50.63722000000001,0 91.77222000000002,50.68999000000001,0 91.90556000000002,50.71472000000001,0 92.22137000000002,50.70556,0 92.29498,50.75361,0 92.32693,50.855,0 92.38361000000002,50.87471000000001,0 92.47275999999999,50.78527,0 92.5736,50.75778,0 92.66081,50.68166,0 92.76028,50.71249,0 92.80276000000001,50.79361,0 92.97500000000001,50.7911,0 92.99915,50.7514,0 92.97102,50.66649,0 93.03333000000001,50.6086,0 93.44886,50.62249000000001,0 93.55832000000001,50.58972000000001,0 94.27499,50.56944,0 94.3522,50.41499,0 94.38998000000001,50.21444000000001,0 94.51582999999999,50.16109,0 94.62276,50.02999,0 94.97609,50.0561,0 95.06608,49.96193000000001,0 95.42249000000001,49.95610000000001,0 95.49157,49.9077,0 95.53859,49.89472,0 95.59193000000001,49.94083,0 95.73526,49.95471000000001,0 95.83472,50.02499000000001,0 95.90721000000002,50.01415999999999,0 95.96026999999999,49.94415000000001,0 96.07444,50.00694,0 96.29443999999999,49.94665000000001,0 96.37916,49.89360000000001,0 96.54749,49.92583,0 96.59248000000001,49.86500000000001,0 96.72248999999999,49.9211,0 96.99693000000002,49.89415000000001,0 97.16943000000001,49.76167,0 97.31303,49.7311,0 97.58638000000001,49.84361000000001,0 97.59415000000001,49.92749,0 97.78609,49.96915,0 97.86388000000001,49.93277,0 98.10721000000002,50.04888,0 98.29221,50.29861,0 98.28554,50.41361000000001,0 98.32555000000001,50.51083000000001,0 98.27443,50.56055,0 98.16748,50.56889,0 98.06331000000002,50.63054000000001,0 97.96388,50.77832,0 98.01304,50.85583,0 97.87747,50.92972,0 97.83195000000001,50.98999000000001,0 97.9586,51.22332,0 97.93777,51.31249,0 98.06469000000001,51.46694,0 98.23235,51.45989000000001,0 98.25999,51.51583000000002,0 98.24802,51.5811,0 98.33527000000001,51.71804000000001,0 98.62442,51.77999000000001,0 98.70804000000001,51.82805,0 98.86942999999999,52.03861,0 98.88109,52.11416,0 98.94189,52.14068,0 98.91304,52.2011,0 98.81360000000001,52.18693,0 98.80721,52.27444,0 98.72248999999999,52.29527000000001,0 98.64444,52.26167000000001,0 98.67970000000001,52.36999,0 98.62553,52.42416,0 98.72083000000001,52.46054000000001,0 98.73522000000001,52.5118,0 98.81527,52.52054,0 98.82721000000001,52.53999000000001,0 98.78276,52.57333,0 98.80415000000001,52.61166,0 98.93248000000001,52.65444000000001,0 98.9408,52.79722000000001,0 98.86526000000001,52.79167,0 98.84444000000001,52.83194,0 98.93107999999999,52.925,0 99.20610000000002,52.8511,0 99.24997000000001,52.95378,0 98.98553,53.03444,0 99.06526000000001,53.10249,0 98.92360000000001,53.15388,0 98.8772,53.11944,0 98.68637000000001,53.15611000000001,0 98.60249000000002,53.10139000000001,0 98.29998999999999,53.10055,0 98.28581,53.22721,0 98.03027,53.25054000000001,0 97.96998000000002,53.29639000000001,0 97.96304000000001,53.35999,0 97.59972000000001,53.37138,0 97.58749,53.43888000000001,0 97.44107,53.46027000000002,0 97.33221,53.59999,0 97.12275,53.60944,0 96.88666000000001,53.72887000000001,0 96.72776,53.70665,0 96.68415,53.6386,0 96.60860000000001,53.67583,0 96.57165999999999,53.64554,0 96.5,53.68499000000001,0 96.20721,53.92638,0 96.04943,53.99554,0 96.08167000000003,54.05749000000001,0 96.05332,54.09389000000002,0 95.98803000000001,54.08721,0 95.91805000000002,54.15999,0 95.65860000000002,54.25943,0 95.66303000000004,54.33999,0 95.70526,54.37999,0 95.79082,54.42082000000001,0 95.91577000000002,54.3956,0 95.98665,54.44833,0 95.97638000000001,54.47721000000001,0 96.05582,54.5761,0 96.21720999999999,54.54084,0 96.31582,54.57139000000001,0 96.57083,54.51250000000001,0 96.55053,54.58082,0 96.58888,54.65972,0 96.56192,54.69694,0 96.67359999999999,54.80222000000001,0 96.71527,54.92138000000001,0 96.57777,55.02028,0 96.68692,55.08083,0 96.65192,55.0986,0 96.69721,55.17276,0 96.70055000000001,55.25528,0 96.92027,55.32472,0 96.84137000000001,55.43749,0 96.85526000000002,55.47776,0 96.81721,55.55915,0 96.85582000000001,55.59444000000001,0 96.74638,55.65138000000001,0 96.82471,55.69749,0 96.75526000000002,55.74722,0 96.82111,55.79166,0 96.96971000000001,55.85583,0 96.98054999999999,56.02221999999999,0 97.0611,56.02556,0 97.12361,56.11639,0 97.35220000000001,56.04861,0 97.43248,56.09583000000001,0 97.42859,56.14666,0 97.58693000000001,56.18943000000001,0 97.55663000000001,56.3875,0 97.88193,56.39249000000002,0 97.87943,56.55944,0 97.74498,56.55860000000001,0 97.77528000000002,56.6075,0 97.75193000000003,56.64054,0 97.78581,56.66415000000001,0 97.75027000000002,56.70417000000001,0 97.77609,56.78054,0 97.48581000000003,56.81028,0 97.48055000000001,56.89111000000001,0 97.62302,56.95528000000001,0 97.47693000000001,56.96444,0 97.34009000000002,57.04317,0 97.91721,57.80694,0 98.76944,57.79166000000001,0 98.85415999999999,57.72804,0 98.97415,57.72165,0 99.08414999999999,57.77416,0 99.42165000000001,57.79333000000001,0 99.49442999999999,57.93415,0 99.61971,58.00166,0 99.61582,58.04805000000001,0 99.68193000000001,58.08111,0 99.80138000000001,58.05721,0 100.0441,58.07944,0 100.0775,58.0561,0 100.0767,57.96111,0 100.123,57.86554,0 100.2744,57.80915,0 100.2664,57.76139,0 100.373,57.7311,0 100.328,57.68250000000001,0 100.3664,57.67556,0 100.3461,57.63833,0 100.3958,57.59887,0 100.4036,57.54804,0 100.6505,57.47444,0 100.7419,57.40193000000001,0 100.855,57.465,0 100.9112,57.44835,0 100.9628,57.50083000000001,0 100.9391,57.51583,0 100.9536,57.5611,0 100.8461,57.60999000000001,0 100.7969,57.66833000000001,0 100.8911,57.77361,0 100.84,57.80083000000001,0 100.8505,57.84222,0 100.8077,57.88611,0 100.953,57.86694000000001,0 101.0353,57.89804000000001,0 101.0281,57.92249000000002,0 101.1394,57.98249,0 101.1583,58.02471000000001,0 101.1608,58.06055,0 101.105,58.10528,0 101.1097,58.11528000000001,0 101.2161,58.14444,0 101.2764,58.21861000000001,0 101.5347,58.22471,0 101.685,58.41888,0 102.1944,58.52527000000001,0 102.3105,58.64527,0 102.5114,58.71667,0 102.5669,58.79694,0 102.54,58.89777000000001,0 102.4369,58.94304000000001,0 102.4508,59.00111,0 102.4044,59.07249000000001,0 102.4433,59.14471,0 102.5353,59.19166000000001,0 102.8286,59.21194,0 102.8717,59.26527999999999,0 103.0155,59.32193,0 103.0822,59.26416,0 103.1644,59.25999000000001,0 103.2064,59.28972,0 103.3264,59.26082000000002,0 103.338,59.22721,0 103.2366,59.2286,0 103.2444,59.17944,0 103.3892,59.02138000000002,0 103.5383,58.98611,0 103.5919,58.95193,0 103.5928,58.91304,0 103.8933,58.90555,0 103.9542,58.84859,0 103.9458,58.76582,0 103.8558,58.73498000000001,0 103.9922,58.73555,0 104.0444,58.77304,0 104.2364,58.75866000000001,0 104.2836,58.71305000000001,0 104.3991,58.69915000000001,0 104.3936,58.64526,0 104.4583,58.60054,0 104.5233,58.63832000000001,0 104.5828,58.61415,0 104.6314,58.64804,0 104.795,58.66859,0 104.8733,58.72164000000001,0 104.7558,58.81526000000001,0 104.8386,58.89443,0 105.085,58.99277,0 105.1439,59.04582,0 105.3628,59.09499,0 105.3019,59.14861000000001,0 105.3319,59.1986,0 105.2961,59.26111,0 105.1841,59.31055000000001,0 105.2455,59.35082,0 105.2094,59.40192,0 105.2136,59.40777,0 105.2308,59.42527000000001,0 105.183,59.47305,0 104.9853,59.46028,0 104.8828,59.52527,0 104.8561,59.55110000000001,0 104.8769,59.58582,0 104.8005,59.6361,0 104.7944,59.69332,0 104.8922,59.75027000000001,0 105.0191,59.77083,0 105.0191,59.83721,0 105.1853,59.86027000000001,0 105.3783,59.82083000000001,0 105.4952,59.84554000000001,0 105.4305,59.89388,0 105.4889,60.01194000000002,0 105.4208,60.10999000000001,0 105.4786,60.19249,0 105.4772,60.25443,0 105.3758,60.24917000000001,0 105.2967,60.29860999999999,0 105.2219,60.27528,0 104.8772,60.30388000000001,0 104.7642,60.38221,0 104.6539,60.40249,0 104.6764,60.42499999999999,0 104.6414,60.49416000000002,0 104.568,60.54084,0 104.5577,60.61721,0 104.5167,60.63332,0 104.6022,60.74333000000001,0 104.4569,60.83972,0 104.6344,60.89388,0 104.5597,60.94554000000001,0 104.6144,60.97639,0 104.6,61.00054,0 104.6419,61.03804,0 104.6003,61.05416,0 104.6147,61.07444,0 104.7103,61.08999000000001,0 104.835,61.17776000000001,0 105.0119,61.17749,0 104.9628,61.26498999999999,0 104.9314,61.26944,0 104.9272,61.31944,0 104.785,61.34943,0 105,61.40661000000001,0 105.2758,61.41999,0 105.2736,61.47805000000002,0 105.3664,61.53278,0 105.5575,61.56554000000001,0 105.5925,61.61721,0 105.6947,61.64943,0 105.8028,61.61776,0 105.8647,61.67389,0 105.9491,61.68333,0 105.8894,61.82305000000001,0 106.0431,61.90277,0 106.0478,61.9086,0 106.2,61.99749000000001,0 106.4133,62.02750000000001,0 106.3789,62.06528,0 106.4097,62.08472,0 106.373,62.10277,0 106.4475,62.18581,0 106.4477,62.24167,0 106.3192,62.26194000000001,0 106.3939,62.31777000000001,0 106.4792,62.31721000000002,0 106.4275,62.38388,0 106.5308,62.37249000000001,0 106.7144,62.47721000000001,0 106.6533,62.53833,0 106.7072,62.58277,0 106.8144,62.59972,0 106.4691,62.68166000000001,0 106.5258,62.74722000000001,0 106.4678,62.77694,0 106.4447,62.84361,0 106.2161,62.8961,0 106.2194,62.94194000000001,0 106.1561,62.9586,0 106.1875,62.98611,0 106.1216,63.05833000000001,0 106.3033,63.07277,0 106.4108,63.11527000000001,0 106.3836,63.1461,0 106.433,63.20055,0 106.3583,63.21999,0 106.3619,63.27139,0 106.4441,63.33111,0 106.6741,63.29667,0 106.7364,63.3686,0 106.5069,63.49166000000002,0 106.685,63.61361000000001,0 106.6283,63.69833,0 106.7972,63.84415,0 106.6803,63.92499,0 106.7028,63.98555000000002,0 106.8603,63.97721,0 107.0714,63.88528,0 107.1819,63.95361,0 107.2911,63.95083,0 107.3592,63.86775999999999,0 107.5628,63.85695000000001,0 107.6219,63.91361000000001,0 107.6194,63.9575,0 107.6792,63.98999,0 108.2619,63.99083000000002,0 108.3222,64.03943,0 108.2211,64.20833,0 108.15,64.24082,0 108.1253,64.24054,0 108.0265,64.22346,0 108.14,64.26221,0 108.3075,64.24915,0 108.3569,64.30081,0 108.4614,64.28581,0 + + + 1 + + + + + +112.8831,77.93326,0 112.5097,77.85098000000001,0 112.5144,79.90003,0 112.5259,84.90002,0 112.5374,89.90000000000001,0 113.5351,89.90000000000001,0 114.5329,89.90000000000001,0 115.5306,89.90000000000001,0 116.5284,89.90000000000001,0 117.5262,89.90000000000001,0 118.5239,89.90000000000001,0 119.5217,89.90000000000001,0 120.5195,89.90000000000001,0 121.5172,89.90000000000001,0 122.515,89.90000000000001,0 123.5128,89.90000000000001,0 124.5105,89.90000000000001,0 125.5083,89.90000000000001,0 126.5061,89.90000000000001,0 127.5038,89.90000000000001,0 127.5198,84.90002,0 127.5317,81.16092,0 122.6489,80.08503,0 117.766,79.00914,0 112.8831,77.93326,0 + + + 1 + + + + + GMT +09:00 + + +]]> + #khStyle0900 + + + + + +131.1522,-31.47416,0 131.7691,-31.72222,0 132.0908,-31.92111,0 132.2039,-32.03168,0 132.4142,-32.01167,0 132.4794,-32.03251,0 132.4508,-31.97277,0 132.5491,-31.93889,0 132.7644,-31.95084,0 132.8355,-31.97972,0 132.9774,-32.11306,0 133.0591,-32.11473,0 133.1447,-32.20583,0 133.1855,-32.18666,0 133.2672,-32.22084000000001,0 133.3041,-32.19694,0 133.4172,-32.21334,0 133.5382,-32.32338,0 133.7763,-32.43159,0 133.8505,-32.54055,0 133.9055,-32.54501,0 133.9314,-32.50084,0 133.9938,-32.50611,0 134.0355,-32.46389,0 134.143,-32.4575,0 134.2822,-32.60000000000001,0 134.2969,-32.68028,0 134.2241,-32.78389,0 134.2144,-32.81306,0 134.1941,-32.79029,0 134.2177,-32.72834,0 134.0683,-32.71667,0 134.1294,-32.84277,0 134.0611,-32.92139,0 134.1947,-32.95223,0 134.2039,-33.01112,0 134.1478,-33.0275,0 134.2355,-33.05140000000001,0 134.2691,-33.15972,0 134.3375,-33.20403,0 134.4536,-33.4363,0 134.4445,-33.78327,0 134.6956,-33.95219,0 135.0562,-34.44981,0 135.1056,-34.59302,0 135.2188,-34.56417,0 135.3219,-34.62166,0 135.3488,-34.65305,0 135.3225,-34.69111,0 135.4747,-34.75111,0 135.6061,-34.89305,0 135.6241,-34.95361,0 135.6778,-34.95555,0 135.7213,-34.86861,0 135.7867,-34.86029,0 135.928,-34.95945,0 135.9541,-35.01028,0 136.4239,-35.18024,0 136.4753,-35.25469,0 136.4895,-35.57197,0 136.5725,-35.77633,0 136.5344,-35.9125,0 136.6678,-35.98778,0 136.7164,-36.07168,0 136.8466,-36.03083,0 136.9061,-36.06028,0 137.0161,-36.02695,0 137.1566,-36.04361,0 137.2219,-35.98361000000001,0 137.3544,-36.00195,0 137.4577,-36.08666,0 137.6141,-36.01472,0 137.6055,-35.92945,0 137.7494,-35.86777,0 137.9289,-35.87666,0 138.038,-35.92418,0 138.1369,-35.855,0 138.2088,-35.71732000000001,0 138.3009,-35.65432,0 138.5355,-35.65445,0 138.6555,-35.56056,0 138.8005,-35.53694,0 139.2314,-35.76361,0 139.573,-36.0925,0 139.8269,-36.57778,0 139.8616,-36.66639,0 139.8547,-36.82611,0 139.8003,-36.89472,0 139.6697,-36.96362,0 139.7314,-37.00973000000001,0 139.7411,-37.08278,0 139.7803,-37.10778,0 139.7836,-37.15361,0 139.7375,-37.17805,0 139.8144,-37.29973,0 140.0022,-37.50501000000001,0 140.0408,-37.48721,0 140.1283,-37.53612,0 140.1141,-37.58055,0 140.228,-37.65944,0 140.405,-37.92805,0 140.675,-38.06861,0 140.968,-38.06421,0 141.2825,-38.22084,0 141.4022,-38.3289,0 141.3842,-38.39889,0 141.4694,-38.37527,0 141.5472,-38.44305,0 141.5908,-38.39917,0 141.6536,-38.40222,0 141.6213,-38.31751,0 141.7436,-38.26751,0 141.9619,-38.29083,0 142.163,-38.40111,0 142.3813,-38.36362,0 142.4572,-38.40722,0 142.5023,-38.37652,0 142.5023,-43.37653,0 142.5023,-48.37652000000001,0 142.5023,-53.37653,0 142.5023,-58.37653000000002,0 142.5023,-63.37653000000001,0 142.5023,-68.37653,0 142.5023,-73.37653,0 142.5023,-75.57653000000001,0 142.5023,-80.57653000000001,0 142.5023,-85.57653000000001,0 142.5023,-88.17653,0 142.5023,-89.90000000000001,0 141.5026,-89.90000000000001,0 140.503,-89.90000000000001,0 139.5034,-89.90000000000001,0 138.5038,-89.90000000000001,0 137.5042,-89.90000000000001,0 136.5045,-89.90000000000001,0 135.5049,-89.90000000000001,0 134.5053,-89.90000000000001,0 133.5057,-89.90000000000001,0 132.5061,-89.90000000000001,0 131.5064,-89.90000000000001,0 130.5068,-89.90000000000001,0 129.5072,-89.90000000000001,0 128.5076,-89.90000000000001,0 127.508,-89.90000000000001,0 127.508,-84.89999,0 127.508,-82.02666000000001,0 127.508,-77.02666000000001,0 127.508,-72.02666000000001,0 127.508,-68.42665,0 127.508,-63.42665,0 127.508,-58.42665,0 127.508,-53.42665000000001,0 127.508,-48.42665000000001,0 127.508,-43.42665,0 127.508,-38.42665,0 127.508,-33.42665,0 127.508,-32.22667,0 127.7539,-32.1286,0 128.0039,-32.09223,0 128.2483,-32.01084,0 129.0003,-31.69261,0 130.1489,-31.57916000000001,0 130.838,-31.60584,0 131.1522,-31.47416,0 + + + 1 + + + + + +140.948,46.03066,0 145.5292,44.44866,0 145.6765,43.53654,0 145.8775,43.38366,0 145.8579,43.31955,0 145.8469,43.2832,0 145.5455,43.11722,0 144.8695,42.9269,0 144.7778,42.92555,0 144.4636,42.93083,0 144.325,42.99805,0 144.0244,42.92139,0 143.8928,42.84916,0 143.5955,42.61971000000001,0 143.3738,42.36167,0 143.3297,42.28167,0 143.3169,42.04277,0 143.2463,41.92527,0 142.943,42.10665,0 142.501,42.25373,0 142.501,37.25373,0 142.501,32.25372,0 142.501,28.64826,0 137.5011,28.62327,0 135.5122,28.61333,0 135.5122,23.61333000000001,0 135.5122,19.23089,0 140.5122,19.23089,0 142.501,19.23089,0 142.501,14.23089,0 142.501,12,0 138.3636,12,0 137,11.16666,0 137,6.166665000000001,0 137,1.199996,0 141,-5.400000000000001e-007,0 141.0025,-2.607085,0 141.0035,-4.128462,0 141.007,-9.128467000000001,0 142.1419,-10.95666,0 142.1589,-11.14944,0 142.1241,-11.36722,0 141.9422,-11.95472,0 142.0289,-12.06221,0 141.9644,-12.04084,0 141.9175,-12.10528,0 141.8905,-11.98833,0 141.91,-11.95944,0 141.8524,-11.98445,0 141.7503,-12.205,0 141.8058,-12.2375,0 141.7161,-12.23305,0 141.6689,-12.38195,0 141.6658,-12.38666,0 141.593,-12.5575,0 141.6953,-12.54805,0 141.6544,-12.52833,0 141.6614,-12.44833,0 141.7444,-12.46111,0 141.6941,-12.50445,0 141.7589,-12.53222,0 141.7722,-12.57361,0 141.8191,-12.59695,0 141.9255,-12.56111,0 141.9753,-12.58944,0 141.8892,-12.60916,0 141.8297,-12.66278,0 141.9172,-12.71805,0 142.005,-12.72166,0 141.908,-12.75028,0 141.935,-12.91111,0 141.8905,-12.84639,0 141.8686,-12.70084,0 141.8158,-12.70361,0 141.8055,-12.67195,0 141.7597,-12.80805,0 141.6522,-12.9125,0 141.6299,-12.89528,0 141.5839,-12.98916,0 141.6883,-13.26083,0 141.6678,-13.34778,0 141.6297,-13.35416,0 141.5269,-13.57416,0 141.4661,-13.90667,0 141.6,-14.13445,0 141.5916,-14.26473,0 141.5203,-14.475,0 141.5677,-14.76889,0 141.6658,-15.03611,0 141.4605,-15.53611,0 141.3758,-15.92944,0 141.4269,-16.07917,0 141.3486,-16.21916,0 141.3269,-16.33195,0 141.2119,-16.6725,0 141.1299,-16.78083,0 141.0764,-16.80333,0 141.0511,-16.88389000000001,0 140.9491,-17.01362,0 140.8774,-17.37833,0 140.8352,-17.45027,0 140.758,-17.47778,0 140.7361,-17.52,0 140.3966,-17.67334,0 140.0514,-17.71806,0 139.9819,-17.70027,0 139.9308,-17.63139,0 139.8091,-17.57223,0 139.6219,-17.52556,0 139.4717,-17.40412,0 139.4543,-17.27115,0 139.4833,-17.18898,0 139.5816,-17.09876,0 139.5639,-17.02948,0 139.5075,-16.98919,0 139.4736,-16.83612,0 139.5574,-16.67661,0 139.7443,-16.50259,0 139.7379,-16.44136,0 139.5574,-16.3898,0 139.4543,-16.43814,0 139.3061,-16.45425,0 139.1562,-16.5896,0 139.1192,-16.78778,0 138.9894,-16.89061,0 138.8486,-16.87777,0 138.6466,-16.77973,0 138.4869,-16.78778,0 138.3039,-16.75112,0 138.1902,-16.705,0 138.0003,-16.55472,0 137.8605,-16.44,0 137.7355,-16.24916,0 137.4283,-16.15722,0 137.2488,-16.02194,0 137.0683,-15.93743,0 137.0997,-15.77525,0 137.0845,-15.66302,0 136.8828,-15.49533,0 136.7517,-15.55584,0 136.5764,-15.50668,0 136.4158,-15.62276,0 136.2791,-15.56722,0 136.2122,-15.39445,0 135.9369,-15.25361,0 135.7971,-15.14682,0 135.7612,-14.96609,0 135.7868,-14.90858,0 136.9212,-14.31743,0 136.9755,-14.26311,0 136.9308,-13.75824,0 136.7199,-13.64,0 136.6489,-13.01466,0 136.645,-12.9575,0 136.5392,-12.91639,0 136.5514,-12.88611,0 136.4843,-12.84594,0 136.4677,-12.78111,0 136.5397,-12.8175,0 136.5486,-12.74361,0 136.6186,-12.83584,0 136.6055,-12.72083,0 136.6808,-12.71029,0 136.6978,-12.62306,0 136.7683,-12.56972,0 136.7325,-12.48722,0 136.7986,-12.45667,0 136.7831,-12.545,0 136.9172,-12.3875,0 136.9794,-12.36139,0 136.9386,-12.35639,0 136.9336,-12.28694,0 136.8573,-12.21335,0 136.8317,-12.06468,0 136.6352,-11.74354,0 136.5952,-11.40484,0 136.7342,-11.20672,0 136.7838,-11.04376,0 136.7646,-11.00381,0 136.4738,-11.45757,0 136.2765,-11.5646,0 135.9633,-11.67485,0 135.0559,-11.9113,0 134.8282,-12.03977,0 134.8014,-12.04333,0 134.7661,-11.95055,0 134.6986,-11.9575,0 134.5941,-12.06611,0 134.415,-12.0575,0 134.2805,-11.97417,0 134.1855,-12.08277,0 134.1664,-11.97194,0 134.1997,-11.95861,0 134.1411,-11.88139,0 134.0841,-11.92805,0 134.045,-11.8425,0 133.9511,-11.91222,0 133.875,-11.89139,0 133.8352,-11.82695,0 133.9391,-11.75611,0 133.9136,-11.72722,0 133.8262,-11.72145,0 133.5198,-11.51235,0 133.479,-11.45118,0 132.5958,-10.95671,0 132.4684,-11.01023,0 132.346,-11.12238,0 131.9803,-11.11982,0 131.807,-11.1912,0 131.259,-11.1861,0 131.1188,-11.25238,0 130.8333,-11.31863,0 130.6982,-11.31863,0 130.5147,-11.27021,0 130.4051,-11.14532,0 130.3643,-11.16826,0 130.3516,-11.28041,0 130.2445,-11.33648,0 130.14,-11.47157,0 129.9998,-11.77998,0 130.0941,-11.84624,0 130.3133,-11.79272,0 130.4637,-11.85899,0 130.558,-12.07055,0 130.5766,-12.40278,0 130.6177,-12.43278,0 130.5875,-12.4575,0 130.6049,-12.49861,0 130.5733,-12.5825,0 130.6194,-12.60833,0 130.5536,-12.63029,0 130.598,-12.67666,0 130.6953,-12.7025,0 130.5855,-12.71472,0 130.505,-12.60221,0 130.5094,-12.65834,0 130.4433,-12.63083,0 130.3972,-12.68722,0 130.3558,-12.67,0 130.3408,-12.87611,0 130.235,-12.9475,0 130.1855,-12.9075,0 130.1408,-12.92416,0 130.1157,-13.14503,0 130.0907,-13.21581,0 130.2073,-13.22924,0 130.3264,-13.35389,0 130.2542,-13.32889,0 130.145,-13.45973,0 129.9861,-13.52778,0 129.9136,-13.51389,0 129.8861,-13.44528,0 129.8708,-13.50194,0 129.8275,-13.51945,0 129.7827,-13.69221,0 129.7844,-13.76305,0 129.8105,-13.75167,0 129.8152,-13.77779,0 129.7169,-13.86722,0 129.75,-13.93222,0 129.7327,-13.99472,0 129.6308,-14.04056,0 129.5977,-13.99945,0 129.6136,-14.05833,0 129.5889,-14.09722,0 129.4789,-14.04722,0 129.4925,-14.14223,0 129.4122,-14.23111,0 129.3632,-14.4277,0 129.4171,-14.63216,0 129.3895,-14.71341,0 129.0917,-14.90135,0 129,-14.87108,0 128.5417,-14.75778,0 128.3877,-14.79719,0 128.3259,-14.71017,0 128.2153,-14.69975,0 128.0697,-14.64584,0 128.0036,-14.56111,0 127.9453,-14.57639,0 127.9494,-14.52667,0 127.8855,-14.47277,0 127.8514,-14.48222,0 127.865,-14.42056,0 127.8247,-14.44444,0 127.8228,-14.38694,0 127.7605,-14.30055,0 127.6136,-14.13611,0 127.5044,-14.06334,0 127.4466,-14.05916,0 127.4278,-13.95666,0 127.3967,-13.965,0 127.3328,-13.90662,0 127.3328,-8.906616,0 127.3328,-7.298002000000002,0 125.441,-7.306758,0 125.441,-3.067723,0 124.3024,-3.067723,0 124.3024,-1.202193,0 127.1436,2.912129,0 127.5079,3.439736,0 127.5079,8.439740000000001,0 127.5079,13.43974,0 127.5079,18.43974,0 127.5079,23.43974,0 127.5079,23.5489,0 122.8135,23.56643,0 122.8135,27.5252,0 127.5079,27.5252,0 127.5079,32.5252,0 127.5079,32.96414,0 124.1097,32.96414,0 124.1097,37.96414,0 124.1097,39.48034,0 124.3702,40.0028,0 124.3736,40.09361,0 124.5547,40.24222000000001,0 124.7084,40.30505,0 124.7433,40.37,0 124.8328,40.40915,0 124.8805,40.47054,0 125.04,40.45722,0 125.0178,40.53082,0 125.248,40.60388,0 125.2861,40.64749,0 125.4058,40.62082,0 125.4642,40.7136,0 125.5447,40.7186,0 125.5641,40.77832,0 125.6803,40.76554,0 125.6531,40.82166,0 125.7619,40.88361,0 125.8214,40.86139,0 125.8786,40.89472,0 126.0169,40.89999,0 125.9775,40.91331,0 126.0733,40.97305,0 126.1322,41.04416000000001,0 126.1239,41.08111,0 126.2792,41.15277,0 126.4561,41.35722,0 126.5272,41.3575,0 126.5008,41.43194,0 126.5844,41.56860000000001,0 126.5633,41.61092,0 126.6151,41.66418,0 126.7222,41.69804000000001,0 126.6789,41.72444,0 126.6947,41.74027,0 126.7869,41.69222,0 126.7975,41.7311,0 126.9361,41.79444,0 126.9364,41.76305,0 127.0453,41.72444,0 127.078,41.68194,0 127.04,41.67194,0 127.057,41.64351,0 127.1786,41.58749,0 127.1022,41.53528,0 127.2872,41.50111,0 127.2708,41.4725,0 127.5391,41.46361,0 127.5572,41.42972,0 127.6475,41.40277,0 127.8583,41.40444,0 127.8739,41.43943,0 127.9814,41.42276,0 128.0008,41.44555,0 128.0208,41.4086,0 128.0475,41.41888,0 128.0441,41.38943,0 128.1061,41.39415,0 128.1127,41.36971,0 128.2044,41.41667000000001,0 128.3019,41.57778,0 128.1019,41.7961,0 128.0589,42.00332,0 128.2825,42.03916,0 128.4894,41.99555,0 128.7291,42.04695,0 128.9122,42.0211,0 128.9577,42.08111,0 129.0141,42.0942,0 129.2102,42.21721,0 129.1758,42.23499,0 129.2244,42.29639,0 129.1905,42.31333,0 129.2377,42.32194,0 129.24,42.37417,0 129.3441,42.41471,0 129.3419,42.44583,0 129.4422,42.43443000000001,0 129.5397,42.36361,0 129.5908,42.44526,0 129.7119,42.44415,0 129.725,42.56139,0 129.7608,42.60332,0 129.7427,42.64083,0 129.7875,42.675,0 129.7533,42.69415,0 129.7578,42.72971,0 129.8512,42.95998,0 129.9056,42.96999,0 129.8756,42.9897,0 129.9075,43.00581,0 129.9996,42.96142,0 130.1075,42.97833,0 130.1358,42.96221,0 130.1008,42.91194,0 130.2522,42.89249,0 130.2433,42.71833,0 130.4255,42.60222,0 130.4372,42.545,0 130.4725,42.55694,0 130.4614,42.59389,0 130.5147,42.60222,0 130.5675,42.44305,0 130.6044,42.42186,0 130.6591,42.37665,0 130.655,42.31388,0 130.6974,42.29221,0 130.7539,42.34749,0 130.7789,42.45194,0 130.8305,42.46388,0 130.8383,42.51832,0 130.8711,42.52333,0 130.7703,42.59638,0 130.7258,42.575,0 130.7366,42.61361,0 130.6733,42.64749,0 130.7108,42.68499,0 130.8411,42.6875,0 130.7861,42.64277,0 130.9528,42.645,0 130.93,42.61388,0 130.8191,42.62693,0 130.9253,42.59333,0 131.0228,42.645,0 131.1022,42.61804,0 131.1133,42.66444,0 131.1397,42.60917,0 131.1919,42.59527,0 131.1678,42.57138,0 131.2207,42.55566000000001,0 131.4794,42.62341,0 131.486,42.78592,0 131.8044,42.90532000000001,0 132.0598,43.06119,0 132.1858,43.00813,0 132.2953,42.74943,0 132.3549,42.70301000000001,0 132.4611,42.77265,0 132.6667,42.8224,0 132.853,42.73888,0 132.8878,42.80555,0 132.9905,42.82054,0 133.0775,42.7411,0 133.0008,42.72222,0 133.0236,42.68776,0 133.1583,42.68306,0 133.2269,42.74249,0 133.3747,42.7575,0 133.5944,42.84694,0 133.6602,42.85443,0 133.7105,42.81332,0 133.86,42.90387,0 133.9142,42.87555,0 134.115,42.99722,0 134.1883,43.07972000000001,0 134.4167,43.14833,0 134.6997,43.30111,0 134.7639,43.30694,0 134.9686,43.4586,0 135.1297,43.49888,0 135.2225,43.6386,0 135.2266,43.68749,0 135.1833,43.70943,0 135.2497,43.72915,0 135.273,43.68639,0 135.42,43.75417,0 135.5178,43.88499,0 135.4769,43.8761,0 135.4572,43.94332,0 135.5128,43.92139,0 135.5305,43.99166000000001,0 135.6319,44.04944,0 135.6483,44.15943,0 135.7216,44.23499,0 135.8005,44.26333,0 135.8847,44.39832,0 136.1844,44.51305,0 136.2491,44.67194,0 136.3336,44.70361,0 136.3075,44.73777000000001,0 136.3608,44.79027,0 136.4413,44.76832,0 136.4497,44.82695,0 136.5533,44.88889,0 136.5547,44.93833000000001,0 136.6522,45.02804,0 136.7622,45.08721,0 136.8167,45.19554,0 137.1414,45.37028,0 137.3383,45.57721,0 137.6569,45.78221,0 137.7037,45.85810000000001,0 140.948,46.03066,0 + + + 1 + + + + + +142.5194,79.90000000000001,0 142.5194,77.68817,0 138.667,77.71629,0 133.9557,76.04201000000001,0 131.8621,75.29801999999999,0 131.8621,71.38942,0 132.2701,66.40608,0 132.678,61.42275999999999,0 132.8709,59.06711,0 132.8588,59.02208000000001,0 132.9268,58.97153000000001,0 132.905,58.92134000000001,0 132.6281,58.88062,0 132.5582,58.80028999999999,0 132.5681,58.63096000000001,0 132.539,58.58086,0 132.404,58.50661,0 132.2431,58.51441000000001,0 132.1915,58.47281,0 132.2631,58.30735,0 132.0923,58.2122,0 132.1542,58.06819,0 131.732,58.18654,0 131.5646,58.1936,0 131.5448,58.17016000000001,0 131.5467,58.14072,0 131.6564,58.07726000000001,0 131.6874,58.0066,0 131.8208,57.9631,0 131.8702,57.83329000000001,0 132.1476,57.72349000000001,0 132.0838,57.63795,0 131.8647,57.60706,0 131.6878,57.45025,0 131.66,57.27824,0 131.5491,57.25599,0 131.2796,57.36280000000001,0 131.2694,57.28938,0 131.1433,57.21137000000001,0 131.1787,57.17673,0 131.3337,57.16616000000001,0 131.5165,57.0938,0 131.8783,56.76854,0 131.7752,56.62872,0 131.7346,56.49774000000001,0 131.5154,56.54887000000001,0 131.4501,56.48512000000001,0 131.3082,56.48672,0 131.182,56.41776000000001,0 131.1664,56.29863,0 130.974,55.9278,0 131.0924,55.7413,0 131.0922,55.68167,0 131.5875,55.7055,0 131.8277,55.67754,0 132.2958,55.75039,0 132.5187,55.73038,0 132.6783,55.64597,0 132.6778,55.5961,0 132.6198,55.5598,0 132.6032,55.50863,0 132.8499,55.45721000000001,0 132.9172,55.40487,0 132.7062,55.3788,0 132.5812,55.26958,0 132.4052,55.2324,0 132.3182,55.10742,0 132.102,55.05344000000001,0 131.8497,54.86316000000001,0 131.6391,54.78865,0 131.4381,54.76270000000001,0 131.2688,54.64863,0 131.2404,54.51491,0 131.1084,54.36098,0 131.0439,54.32481000000001,0 130.7881,54.30889,0 130.5956,54.16706,0 130.4401,53.95286000000001,0 130.4453,53.91442,0 130.5371,53.88297000000001,0 130.6684,53.88879,0 130.7704,53.82110999999999,0 130.8468,53.80831,0 131.0603,53.87516000000001,0 131.369,53.75986,0 131.4433,53.50145,0 131.4033,53.26408,0 131.4342,53.24406,0 131.7383,53.28881000000001,0 131.8331,53.2546,0 131.8363,53.20384,0 131.9606,53.16412,0 132.0767,53.2618,0 132.1492,53.28006000000001,0 132.7966,53.23391,0 132.9397,53.31208,0 133.1567,53.32175,0 133.2816,53.50229000000001,0 133.5405,53.55013,0 133.6865,53.48001000000001,0 133.7953,53.50423,0 134.045,53.46778000000001,0 134.4765,53.65137,0 134.8939,53.42523000000001,0 134.8608,53.39223,0 134.8063,53.39867,0 134.7772,53.35156000000001,0 134.8416,53.30129,0 134.8581,53.2211,0 134.6294,52.97923,0 134.572,52.87017000000001,0 134.5818,52.77556,0 134.7453,52.68349,0 134.605,52.58288,0 134.5947,52.53989,0 134.644,52.49686,0 134.5898,52.42293,0 134.1073,52.49435,0 133.9606,52.47187,0 133.4076,52.67120000000001,0 133.2485,52.66451,0 133.1741,52.56192000000001,0 133.2161,52.52879,0 133.1884,52.43139000000001,0 133.3646,52.27884,0 133.3551,52.22758,0 133.1079,52.16774000000001,0 132.7906,52.16892,0 132.5923,52.10018000000001,0 132.4668,51.94439000000001,0 132.3687,51.9752,0 132.2938,51.84838000000001,0 132.2201,51.81065,0 132.0319,51.81518,0 131.6162,51.66434000000002,0 131.3763,51.68487,0 131.4344,51.40771,0 131.4163,51.37443,0 131.1841,51.33065,0 131.1296,51.25358000000001,0 130.8823,51.1259,0 130.8353,51.0568,0 130.6651,50.99669,0 130.649,50.9649,0 130.7764,50.89289,0 130.5924,50.61773000000001,0 130.6539,50.59364000000001,0 130.7555,50.65919000000002,0 130.8691,50.65911,0 130.9657,50.59039000000001,0 130.9257,50.52943,0 130.84,50.48763,0 130.848,50.43361,0 131.0443,50.37701,0 131.2058,50.37281,0 131.4482,50.18406000000001,0 131.3611,50.08953,0 131.4545,49.94840000000001,0 131.4792,49.77464,0 131.4655,49.74212,0 131.3354,49.7038,0 131.3988,49.67189000000001,0 131.456,49.56964,0 131.4312,49.3426,0 131.3584,49.25607,0 131.0539,49.22533,0 130.9823,49.16279999999999,0 130.9003,48.97752000000001,0 130.5996,48.93345,0 130.5044,48.85194,0 130.418,48.8961,0 130.2289,48.86221,0 129.9164,49.02963,0 129.9127,49.08241,0 129.833,49.11796,0 129.8474,49.15796000000001,0 129.7327,49.19294,0 129.7219,49.26626,0 129.545,49.29318,0 129.5235,49.39124,0 129.4122,49.43176,0 129.3691,49.41396000000001,0 129.3535,49.3423,0 129.1997,49.39059000000001,0 129.0769,49.35279,0 128.9927,49.44165,0 128.8752,49.47776,0 128.7525,49.46804000000001,0 128.8025,49.55916,0 128.6689,49.61193,0 128.6259,49.56967000000001,0 128.5052,49.58694,0 128.1911,49.53416000000001,0 128.075,49.54222000000001,0 127.9744,49.60249000000001,0 127.8214,49.5911,0 127.6914,49.66721,0 127.6717,49.74889000000001,0 127.5419,49.78249000000001,0 127.5083,49.82,0 127.5314,49.91972000000001,0 127.4878,49.98055000000002,0 127.4883,50.04221,0 127.5697,50.12833,0 127.5861,50.20856,0 127.3366,50.31027,0 127.3542,50.41332,0 127.2894,50.46027000000001,0 127.3677,50.57083,0 127.28,50.68083,0 127.2972,50.73249,0 127.2175,50.78416,0 127.1272,50.91555,0 126.9305,51.05999000000001,0 126.8986,51.18665,0 126.9755,51.31360999999999,0 126.8611,51.30693999999999,0 126.8933,51.23915000000001,0 126.8161,51.26639000000001,0 126.8214,51.33028000000001,0 126.9019,51.33943,0 126.9153,51.37915,0 126.7905,51.42443000000001,0 126.8247,51.50139,0 126.8025,51.53694,0 126.6728,51.57471,0 126.7292,51.63833000000001,0 126.7214,51.7086,0 126.6414,51.74527,0 126.4422,51.98804,0 126.4616,52.02694,0 126.5122,52.03889,0 126.5572,52.13055,0 126.3064,52.20417,0 126.4364,52.28082000000001,0 126.3203,52.30832,0 126.3403,52.38942999999999,0 126.2675,52.4586,0 126.1977,52.46444,0 126.2094,52.50139000000002,0 126.0939,52.58804,0 126.0308,52.56333,0 125.9886,52.58222,0 125.973,52.64167,0 126.0642,52.67638,0 126.0355,52.7211,0 126.0955,52.76444,0 126.0508,52.78583,0 125.9705,52.76333,0 125.8592,52.85166000000001,0 125.8447,52.89943000000002,0 125.6469,52.87887000000001,0 125.6486,52.91276,0 125.7191,52.94222,0 125.7289,52.97943,0 125.623,53.05,0 125.5061,53.03832,0 125.4661,53.08388000000001,0 125.1342,53.19749000000001,0 124.9122,53.16972,0 124.8755,53.14388000000001,0 124.89,53.09471,0 124.8516,53.08915,0 124.805,53.13305,0 124.7058,53.13443000000001,0 124.6528,53.18581,0 124.4022,53.21221,0 124.2553,53.35665,0 124.1044,53.34083,0 123.9108,53.46471,0 123.6975,53.49583,0 123.6194,53.54277,0 123.5294,53.49944,0 123.5428,53.53388,0 123.4975,53.54694,0 123.4789,53.49917,0 123.2461,53.55305,0 123.1533,53.50054999999999,0 122.8244,53.45,0 122.41,53.43721000000001,0 122.3144,53.48777,0 122.0261,53.41397,0 121.83,53.41305,0 121.4738,53.32382,0 121.325,53.31833,0 121.2083,53.27055000000001,0 120.8639,53.27972000000001,0 120.2728,52.85777,0 120.0292,52.76805,0 120.0306,52.61721,0 120.073,52.59,0 120.1891,52.58028,0 120.4403,52.63722,0 120.7136,52.54472000000001,0 120.6867,52.43361000000001,0 120.6228,52.34026999999999,0 120.7592,52.23916,0 120.7828,52.15526,0 120.7531,52.07917,0 120.695,52.04860999999999,0 120.7128,51.98249000000001,0 120.6578,51.9175,0 120.4886,51.8772,0 120.1972,51.68610000000002,0 120.0969,51.66138,0 120.0491,51.54777000000001,0 119.983,51.49305,0 119.9566,51.38999,0 119.8914,51.37417,0 119.9208,51.33638,0 119.8097,51.26416,0 119.818,51.21416,0 119.7553,51.20750000000001,0 119.7805,51.1661,0 119.7467,51.0736,0 119.5225,50.90499,0 119.5022,50.74221000000001,0 119.2869,50.59389000000001,0 119.2422,50.44526,0 119.1353,50.38972,0 119.1983,50.34527,0 119.348,50.34833,0 119.368,50.30999,0 119.3289,50.27388000000001,0 119.3481,50.15948,0 119.3222,50.09722000000001,0 119.2141,50.01528,0 119.0996,49.99044,0 118.5833,49.92694,0 118.4647,49.82444,0 118.3855,49.81667000000001,0 118.3658,49.77832000000002,0 117.8958,49.55,0 117.872,49.51022,0 117.4944,49.62305,0 117.17,49.6525,0 116.7114,49.83046000000001,0 116.6155,49.93138,0 116.2461,50.02749000000001,0 116.0697,50.00278,0 115.7547,49.88443000000001,0 115.3964,49.90110000000001,0 115.2053,49.99833,0 115.0236,50.15193,0 114.8542,50.22832,0 114.6758,50.26415999999999,0 114.4439,50.24527,0 114.313,50.28416,0 114.1764,50.24833,0 113.8747,50.08693000000002,0 113.7825,50.08693000000002,0 113.5861,50.01639,0 113.2167,49.81917,0 113.1014,49.67888,0 113.0908,49.59859,0 112.7669,49.50083,0 112.4917,49.54138,0 111.9639,49.40694,0 111.6822,49.40665,0 111.498,49.34916000000001,0 111.3714,49.37416,0 110.9811,49.20083,0 110.7886,49.14944,0 110.6303,49.15249,0 110.4011,49.25500000000001,0 110.2369,49.16945,0 109.8503,49.18999,0 109.7394,49.23499000000001,0 109.5442,49.23249,0 109.3519,49.33694,0 109.2069,49.36028,0 108.6511,49.33173000000001,0 108.5275,49.34555,0 108.3589,49.44526000000001,0 108.2719,49.53555000000001,0 108.1375,49.55804,0 108.0419,49.61082,0 108.0319,49.67471,0 107.9475,49.68333,0 107.9892,49.74499,0 107.9553,49.85167,0 107.9806,49.94083,0 107.8133,49.94860000000001,0 107.7536,49.97955000000001,0 107.7989,50.02999,0 107.8008,50.09166000000001,0 107.7619,50.10471,0 107.7736,50.15749000000002,0 107.8205,50.20665000000002,0 107.8936,50.19249000000001,0 107.9375,50.22221,0 107.9855,50.33721,0 108.0761,50.35332,0 108.1325,50.31444,0 108.2042,50.41109,0 108.3386,50.40444000000001,0 108.4369,50.46249000000002,0 108.6039,50.45221999999999,0 108.6853,50.50417,0 108.6583,50.53777,0 108.5447,50.52777,0 108.4167,50.61361,0 108.1794,50.65915,0 108.0655,50.75804999999999,0 108.2515,50.83393,0 108.3322,51.04887999999999,0 108.4997,51.05915000000002,0 108.5747,51.11528,0 108.4542,51.22776000000001,0 108.3525,51.26528,0 108.4736,51.34499,0 108.547,51.47527,0 108.6208,51.51306,0 108.743,51.44583000000001,0 108.945,51.43999000000002,0 109.0636,51.50861,0 109.2522,51.36221000000001,0 109.3386,51.39138,0 109.38,51.34666,0 109.4289,51.41610000000001,0 109.6789,51.46305,0 110.0491,51.62000000000001,0 110.3947,51.57944,0 110.4205,51.52222,0 110.5447,51.49471,0 110.6961,51.50277,0 110.7817,51.57471,0 110.8639,51.59222,0 110.8414,51.66915000000002,0 111.0019,51.72222,0 111.015,51.78221000000001,0 111.1397,51.83527,0 111.198,51.82361000000001,0 111.6078,51.92778,0 112.0608,52.27833,0 112.1683,52.30389000000001,0 112.2089,52.24054,0 112.2964,52.25278000000001,0 112.4022,52.20694,0 112.4925,52.25000000000001,0 112.5389,52.34972000000001,0 112.9303,52.33665000000001,0 113.2733,52.47805000000001,0 113.5341,52.49416,0 113.5792,52.45027,0 113.738,52.57722,0 113.8978,52.63499,0 113.9542,52.62555,0 114.1236,52.71832,0 114.2422,52.82388,0 114.2144,52.89054000000001,0 114.2422,52.92749,0 114.2322,52.96527,0 114.3172,52.96721,0 114.2814,53.02139,0 114.3253,53.06777,0 114.2314,53.10361000000001,0 114.1269,53.07194,0 114.2017,53.19222,0 114.0925,53.2047,0 114.0464,53.22359,0 114.048,53.25249,0 113.9822,53.23305,0 113.94,53.28444,0 113.9639,53.31945,0 113.9433,53.35638,0 113.8322,53.38971999999999,0 113.8278,53.4575,0 113.8955,53.53472,0 113.8147,53.61644,0 113.9744,53.64444000000001,0 113.9686,53.69944000000001,0 113.9947,53.71694,0 114.1431,53.75610000000001,0 114.2961,53.74666000000001,0 114.3747,53.81249,0 114.4453,53.80249000000001,0 114.5031,53.80915000000001,0 114.5958,53.90277,0 114.9758,53.99249,0 115.0239,54.03082,0 115.0241,54.07027000000002,0 115.1494,54.12027000000001,0 115.1833,54.18444,0 115.4993,54.30138000000001,0 115.5092,54.36472000000001,0 115.6708,54.42388,0 116.185,54.50722,0 116.5228,54.46408,0 116.5372,54.50943,0 116.7119,54.52944,0 116.7144,54.56333000000001,0 116.77,54.59222,0 116.7697,54.66109,0 116.8739,54.70416,0 116.8694,54.7686,0 116.9239,54.79554,0 116.8778,54.90527,0 116.8892,54.94165,0 116.8264,54.97860000000001,0 116.8411,55.02138,0 116.7825,55.11028,0 116.6991,55.11472000000001,0 116.4694,55.22748,0 116.4616,55.30555,0 116.4022,55.36082,0 116.1144,55.34749000000002,0 116.0694,55.37944,0 115.9639,55.36555,0 115.93,55.39694,0 115.9672,55.44526000000001,0 115.8894,55.49889000000001,0 115.913,55.6461,0 115.8411,55.67222000000001,0 115.8683,55.74499,0 115.8419,55.82638000000001,0 115.898,55.91667000000001,0 115.7586,56.04111000000001,0 115.7855,56.07193000000001,0 115.7691,56.11694,0 115.8369,56.14943,0 115.7619,56.17416,0 115.6841,56.29694,0 115.6797,56.39721,0 115.7844,56.40193,0 115.7988,56.42968000000001,0 115.6755,56.49277,0 115.6819,56.56527000000001,0 115.4647,56.58971,0 115.4311,56.62823,0 115.443,56.66388,0 115.5903,56.71554,0 115.6136,56.78611,0 115.5864,56.87249000000001,0 115.7368,56.95655,0 115.8617,56.93277000000001,0 115.9628,56.86111,0 116.0417,56.86361,0 116.1211,56.81221000000002,0 116.3639,56.84860000000001,0 116.5594,56.7589,0 116.7386,56.76083000000001,0 116.8072,56.72388,0 116.9672,56.78111,0 117.0403,56.77638,0 117.0017,56.79943000000001,0 117.0222,56.81554,0 117.1355,56.80111,0 117.1933,56.87943,0 117.3311,56.9486,0 117.3642,56.91610000000001,0 117.3447,56.86693000000001,0 117.4153,56.85777,0 117.4103,56.82583000000001,0 117.4605,56.81694000000001,0 117.498,56.87137,0 117.5728,56.84722,0 117.57,56.93555000000001,0 117.6744,56.9747,0 117.6889,57.01444999999999,0 117.6783,57.06666,0 117.5969,57.15332,0 117.7452,57.19583000000001,0 117.7955,57.28722,0 117.7758,57.30249000000001,0 117.5964,57.32333,0 117.5464,57.25999,0 117.4742,57.23778,0 117.4264,57.25861,0 117.4444,57.32972,0 117.365,57.32778,0 117.3286,57.45443,0 117.2889,57.45833,0 117.2522,57.51333000000002,0 117.3105,57.56555,0 117.2878,57.61306,0 117.1378,57.63972,0 117.1783,57.73888000000002,0 117.0844,57.80416000000001,0 117.123,57.84277,0 117.31,57.84388000000001,0 117.4175,57.90666,0 117.3661,57.92749,0 117.3647,57.99554,0 117.3958,58.02610000000001,0 117.3725,58.0611,0 117.4139,58.08749000000001,0 117.4075,58.12721,0 117.44,58.15721,0 117.5739,58.13582,0 117.5906,58.18555,0 117.4714,58.28278,0 117.4792,58.31361,0 117.6644,58.3711,0 117.6722,58.40055,0 117.8308,58.4122,0 118.013,58.39305,0 118.0639,58.33832000000001,0 118.1354,58.38744,0 118.3072,58.36028000000001,0 118.4892,58.21111,0 118.5614,58.21444,0 118.6475,58.17028000000001,0 118.803,58.21666000000001,0 119.1084,58.22268,0 119.1317,58.29027,0 119.0655,58.36388,0 119.1261,58.40833000000001,0 119.1297,58.48249,0 118.763,58.61249,0 118.8269,58.61527,0 118.8875,58.69554000000001,0 118.8969,58.81471000000001,0 118.7867,58.8875,0 118.7922,58.9397,0 118.8539,58.94360000000001,0 118.8478,59.01441000000001,0 118.7369,59.02361000000001,0 118.7025,59.06554,0 118.7014,59.21305000000001,0 118.8514,59.28611,0 118.7553,59.33333,0 118.7633,59.38722000000001,0 118.7644,59.4011,0 118.3903,59.51777,0 118.3503,59.58888,0 118.2836,59.61055,0 118.0572,59.58333,0 117.9864,59.53638,0 117.94,59.45471,0 117.8836,59.44165,0 117.8189,59.44944000000001,0 117.7583,59.54084000000001,0 117.5989,59.47083,0 117.2361,59.52777,0 117.1966,59.56916,0 117.0844,59.58721,0 117.2008,59.65499,0 117.2275,59.82943,0 117.0572,59.90889,0 117.1139,59.96333,0 117.2333,59.95694,0 117.3089,59.99528,0 117.2975,60.01943,0 117.0486,60.03583,0 117.0444,60.08250000000001,0 116.9736,60.15777,0 116.84,60.24222,0 116.7322,60.25777,0 116.6008,60.35722000000001,0 116.078,60.40417,0 116.0032,60.45931000000002,0 115.8428,60.465,0 115.6755,60.52666,0 115.1891,60.42972000000001,0 115.0906,60.38276000000001,0 115.013,60.27167,0 114.8139,60.18054,0 114.6966,60.21998,0 114.5461,60.11388000000001,0 114.5211,60.04527,0 114.5667,59.99777000000001,0 114.3155,59.88361,0 114.1655,59.74582000000002,0 114.0433,59.74110000000001,0 114.0419,59.68054999999999,0 113.8492,59.68832,0 113.7836,59.60999,0 113.6089,59.58111000000001,0 113.5864,59.55915000000002,0 113.6097,59.49527000000001,0 113.4728,59.43860000000001,0 113.4211,59.37665,0 113.4869,59.33333,0 113.4558,59.29889,0 113.4694,59.26500000000001,0 113.2817,59.16109000000001,0 112.9714,59.13444000000001,0 112.9117,59.15499,0 112.8822,59.11833,0 112.7314,59.0872,0 112.6453,59.03249,0 112.5742,59.07168,0 112.5555,59.02665,0 112.6276,58.96118,0 112.5003,58.86999,0 112.4461,58.92805,0 112.46,59.16166,0 112.5378,59.23694,0 112.6386,59.26944000000001,0 112.6322,59.31082000000001,0 112.438,59.33028,0 112.2839,59.30305,0 112.3075,59.33666000000002,0 112.2728,59.365,0 112.3341,59.41694,0 112.2714,59.46638,0 112.2739,59.50444000000001,0 112.2214,59.50361,0 111.9933,59.34470000000001,0 111.9419,59.2711,0 111.7681,59.27805,0 111.6461,59.2061,0 111.4353,59.27388,0 111.3042,59.25694000000001,0 111.1822,59.18332000000001,0 111.0831,59.23944,0 110.9969,59.20805000000001,0 110.6927,59.25777000000001,0 110.5789,59.19166000000001,0 110.5917,59.13110000000001,0 110.5425,59.10556,0 110.5386,59.06221000000001,0 110.4819,59.03334,0 110.3522,59.03582,0 110.2783,58.98194,0 109.9355,59.00917,0 109.8203,58.97971,0 109.7411,59.07194000000001,0 109.6405,59.06166,0 109.6286,59.1511,0 109.5281,59.18027,0 109.5405,59.22083,0 109.5172,59.23082,0 109.5167,59.29193,0 109.2605,59.31694,0 109.245,59.36306,0 109.3558,59.41667000000001,0 109.2594,59.4511,0 109.5339,59.64555,0 109.4842,59.68721000000002,0 109.4947,59.75027000000001,0 109.6514,59.86193000000001,0 109.62,59.90305,0 109.7694,60.02887000000001,0 109.7164,60.05222000000001,0 109.6936,60.11193,0 109.7264,60.22610000000001,0 109.8069,60.25443,0 109.8055,60.31305,0 109.8789,60.33805,0 109.8611,60.37417000000001,0 109.9519,60.40359999999999,0 109.9164,60.45889,0 110.0219,60.51694,0 110.0389,60.55833,0 110.1178,60.57972,0 110.1222,60.62416,0 110.04,60.66915,0 110.2678,60.69194,0 110.2703,60.76222,0 110.2947,60.76999000000001,0 110.225,60.79610000000002,0 110.23,60.81916,0 110.448,60.97694000000001,0 110.4575,61.03667,0 110.5208,61.08138,0 110.483,61.15971,0 110.3972,61.18111,0 110.3211,61.14638000000001,0 110.1797,61.15639,0 110.0903,61.27027,0 109.8553,61.29139000000001,0 109.7875,61.32721000000001,0 109.8492,61.43054000000001,0 109.8247,61.47748,0 109.8653,61.49305,0 109.8742,61.53333000000001,0 109.7061,61.64804,0 109.7161,61.67666,0 109.6126,61.71394000000001,0 109.6389,61.76083000000001,0 109.5858,61.77443,0 109.5864,61.82333000000001,0 109.6116,61.89277000000001,0 109.8183,62.00363000000001,0 109.9036,62.11306,0 109.9997,62.16361,0 109.9333,62.23472,0 110,62.28220000000001,0 109.96,62.31639,0 109.9628,62.32249000000002,0 109.8911,62.35333,0 109.9247,62.39722,0 109.9036,62.41388,0 109.5442,62.4325,0 109.4711,62.40499,0 109.4205,62.45832,0 109.3158,62.47554000000001,0 109.2642,62.52332,0 109.2444,62.57277,0 109.3869,62.58306000000001,0 109.375,62.64583,0 109.4561,62.66637999999999,0 109.5039,62.77527,0 109.6505,62.82444000000002,0 109.6158,62.87609,0 109.4683,62.93388000000002,0 109.4811,62.9961,0 109.4553,62.99972000000001,0 109.4811,63.02777,0 109.4472,63.03611,0 109.4647,63.07749,0 109.4317,63.09361,0 109.46,63.15055,0 109.4061,63.18277,0 109.4564,63.21860000000001,0 109.3753,63.25528000000001,0 109.3917,63.32472,0 109.363,63.36193,0 109.2717,63.34722,0 109.2289,63.44027,0 109.0433,63.55416000000002,0 108.8566,63.53582000000002,0 108.5586,63.59972000000001,0 108.1314,63.56777,0 108.1164,63.62249,0 108.2703,63.67888,0 108.2886,63.80805,0 108.3716,63.82638,0 108.4661,63.78944000000001,0 108.6056,63.80749,0 108.6489,63.78582,0 108.7719,63.86472,0 108.6839,63.9086,0 108.7383,63.98082,0 108.49,64.1147,0 108.5441,64.1747,0 108.4769,64.20081999999999,0 108.5394,64.23248,0 108.4614,64.28581,0 108.3569,64.30081,0 108.3075,64.24915,0 108.14,64.26221,0 108.0265,64.22346,0 107.9933,64.16971,0 107.8508,64.18053999999999,0 107.5947,64.29915,0 107.3344,64.24442999999999,0 107.2366,64.28693,0 107.2342,64.33138,0 107.1022,64.33693,0 106.8864,64.41609,0 106.7533,64.41193,0 106.6733,64.49802,0 106.6042,64.51331999999999,0 106.5655,64.49582,0 106.5858,64.44443,0 106.3944,64.44331,0 106.1867,64.39639,0 106.0661,64.42081,0 106.1475,64.48526,0 106.0389,64.51609999999999,0 105.7925,64.47803999999999,0 105.8042,64.53055000000001,0 105.7261,64.57222,0 105.7494,64.61443,0 105.7039,64.65886999999999,0 105.8772,64.65804,0 105.8289,64.74193,0 105.8472,64.79165999999999,0 105.898,64.82138000000001,0 106.0097,64.81805,0 105.9491,64.89499000000001,0 106.0408,64.90470999999999,0 106.1058,64.85915,0 106.2233,64.85722,0 105.9748,65.00305,0 105.9986,65.03915000000001,0 106.1658,65.09027,0 106.1925,65.12858,0 106.2911,65.13889,0 106.3736,65.20499,0 106.5117,65.20387,0 106.4269,65.26138,0 106.4422,65.30888,0 106.6116,65.39276,0 106.8414,65.37608,0 106.8761,65.44108,0 106.9647,65.50443,0 106.6989,65.55109,0 106.715,65.59305999999999,0 106.6219,65.61053,0 106.6439,65.6322,0 106.4214,65.66692999999999,0 106.4153,65.70139,0 106.4711,65.74108,0 106.448,65.77415000000001,0 106.4764,65.80443,0 106.4483,65.82138000000001,0 106.4961,65.895,0 106.4667,65.93192999999999,0 106.4889,66.00471,0 106.353,66.15082,0 106.1833,66.15555999999999,0 106.1158,66.19859,0 106.1489,66.25776999999999,0 106.1008,66.37803,0 106.3269,66.47553000000001,0 106.2939,66.50221000000001,0 106.3058,66.55359000000001,0 106.2417,66.58167,0 106.2272,66.66052999999999,0 106.26,66.69942,0 106.1461,66.72693,0 106.1361,66.7561,0 106.1997,66.78333000000001,0 106.1875,66.80247,0 105.9889,66.79776000000001,0 106.075,66.86081,0 106.0683,66.89525999999999,0 105.8686,66.91804999999999,0 105.8189,66.94859,0 105.6436,66.94664,0 105.5283,67.02222,0 105.9053,67.04553,0 105.9955,67.07887,0 106.0539,67.16804999999999,0 106.2325,67.18498,0 106.5036,67.28637000000001,0 106.6678,67.24387,0 106.7989,67.33832,0 106.8766,67.84166999999999,0 106.8908,68.86026,0 106.1367,69.41971,0 106.2853,69.45833,0 106.4547,69.57249,0 106.5911,69.51666,0 106.8147,69.51361,0 107.6053,69.6636,0 107.9022,69.67498999999999,0 108.0181,69.70749000000001,0 108.0536,69.77970999999999,0 108.2366,69.85444,0 108.8725,69.84109000000001,0 108.9539,69.78526000000001,0 109.2261,69.77164999999999,0 109.3644,69.83832,0 109.4211,69.89276,0 109.3836,69.92944,0 109.5439,70.03498,0 109.3811,70.07944000000001,0 109.3828,70.11942999999999,0 109.3055,70.17776000000001,0 109.3205,70.21887,0 109.5695,70.265,0 109.633,70.31972,0 109.5817,70.35526000000002,0 109.6417,70.38499,0 110.2725,70.41721000000001,0 110.3036,70.44942,0 110.1405,70.47859,0 110.1461,70.52388000000001,0 110.0989,70.55776,0 110.1594,70.55247,0 110.1625,70.56554,0 110.1236,70.63612000000001,0 110.3236,70.70471000000001,0 110.5136,70.71693000000001,0 110.5031,70.77083,0 110.5383,70.79721000000001,0 110.7223,70.82165999999999,0 110.8808,70.79638000000001,0 111.0057,70.84365,0 111.3625,70.85526,0 111.4647,70.93864000000001,0 111.9772,70.98276,0 112.0775,71.06164,0 112.2561,71.00000000000001,0 112.385,71.0647,0 112.5975,71.10471,0 112.5219,71.16388000000001,0 112.6869,71.20277,0 112.7258,71.24359,0 112.6428,71.2897,0 112.5128,71.26582999999999,0 112.333,71.34333,0 112.0111,71.40694000000001,0 112.0122,72.13332,0 111.775,72.14499000000001,0 111.7436,72.20721,0 111.6242,72.21361,0 111.6686,72.26582999999999,0 111.5806,72.31944,0 111.3592,72.31693,0 111.0883,72.37220000000001,0 111.0758,72.4061,0 111.3036,72.47832,0 111.3155,72.51277,0 110.89,72.58110000000002,0 110.925,72.63193,0 110.7303,72.64472000000001,0 110.6322,72.78665000000001,0 110.7317,72.82999,0 110.6597,72.85305,0 110.6466,72.89554,0 110.8755,72.94859,0 110.8155,72.95359999999999,0 110.7778,73.00054,0 110.9417,73.03888000000001,0 110.8583,73.07805000000002,0 110.7978,73.17303,0 110.423,73.18997,0 110.6272,73.26888,0 110.5667,73.31944,0 110.1644,73.40248,0 110.5641,73.40637,0 110.8036,73.50832,0 110.8483,73.56554,0 111.0547,73.57165999999999,0 111.1178,73.59359000000001,0 111.1433,73.63777,0 111.0803,73.65860000000001,0 110.9143,73.69668,0 110.8775,73.72859,0 110.9169,73.76028,0 110.8934,73.76541,0 111.2942,73.85934,0 111.6379,73.93545,0 111.6826,74.06952,0 111.34,74.27808,0 111.3847,74.42704000000001,0 112.6509,74.76967999999999,0 113.8128,75.26125999999999,0 114.1406,75.88692,0 113.9618,76.43810000000001,0 113.351,76.87012,0 112.5083,77.24612000000001,0 112.5097,77.85098000000001,0 112.8831,77.93326,0 117.766,79.00914,0 122.6489,80.08503,0 127.5317,81.16092,0 127.5198,84.90002,0 127.5038,89.90000000000001,0 128.4423,89.90000000000001,0 129.3808,89.90000000000001,0 130.3193,89.90000000000001,0 131.2577,89.90000000000001,0 132.1962,89.90000000000001,0 133.1347,89.90000000000001,0 134.0732,89.90000000000001,0 135.0116,89.90000000000001,0 135.9501,89.90000000000001,0 136.8886,89.90000000000001,0 137.827,89.90000000000001,0 138.7655,89.90000000000001,0 139.704,89.90000000000001,0 140.6425,89.90000000000001,0 141.5809,89.90000000000001,0 142.5194,89.90000000000001,0 142.5194,84.90001,0 142.5194,79.90000000000001,0 + + + 1 + + + + + GMT +09:30 + + +]]> + #khStyle0950 + + + + +129,-14.87108,0 129.0917,-14.90135,0 129.3895,-14.71341,0 129.4171,-14.63216,0 129.3632,-14.4277,0 129.4122,-14.23111,0 129.4925,-14.14223,0 129.4789,-14.04722,0 129.5889,-14.09722,0 129.6136,-14.05833,0 129.5977,-13.99945,0 129.6308,-14.04056,0 129.7327,-13.99472,0 129.75,-13.93222,0 129.7169,-13.86722,0 129.8152,-13.77779,0 129.8105,-13.75167,0 129.7844,-13.76305,0 129.7827,-13.69221,0 129.8275,-13.51945,0 129.8708,-13.50194,0 129.8861,-13.44528,0 129.9136,-13.51389,0 129.9861,-13.52778,0 130.145,-13.45973,0 130.2542,-13.32889,0 130.3264,-13.35389,0 130.2073,-13.22924,0 130.0907,-13.21581,0 130.1157,-13.14503,0 130.1408,-12.92416,0 130.1855,-12.9075,0 130.235,-12.9475,0 130.3408,-12.87611,0 130.3558,-12.67,0 130.3972,-12.68722,0 130.4433,-12.63083,0 130.5094,-12.65834,0 130.505,-12.60221,0 130.5855,-12.71472,0 130.6953,-12.7025,0 130.598,-12.67666,0 130.5536,-12.63029,0 130.6194,-12.60833,0 130.5733,-12.5825,0 130.6049,-12.49861,0 130.5875,-12.4575,0 130.6177,-12.43278,0 130.5766,-12.40278,0 130.558,-12.07055,0 130.4637,-11.85899,0 130.3133,-11.79272,0 130.0941,-11.84624,0 129.9998,-11.77998,0 130.14,-11.47157,0 130.2445,-11.33648,0 130.3516,-11.28041,0 130.3643,-11.16826,0 130.4051,-11.14532,0 130.5147,-11.27021,0 130.6982,-11.31863,0 130.8333,-11.31863,0 131.1188,-11.25238,0 131.259,-11.1861,0 131.807,-11.1912,0 131.9803,-11.11982,0 132.346,-11.12238,0 132.4684,-11.01023,0 132.5958,-10.95671,0 133.479,-11.45118,0 133.5198,-11.51235,0 133.8262,-11.72145,0 133.9136,-11.72722,0 133.9391,-11.75611,0 133.8352,-11.82695,0 133.875,-11.89139,0 133.9511,-11.91222,0 134.045,-11.8425,0 134.0841,-11.92805,0 134.1411,-11.88139,0 134.1997,-11.95861,0 134.1664,-11.97194,0 134.1855,-12.08277,0 134.2805,-11.97417,0 134.415,-12.0575,0 134.5941,-12.06611,0 134.6986,-11.9575,0 134.7661,-11.95055,0 134.8014,-12.04333,0 134.8282,-12.03977,0 135.0559,-11.9113,0 135.9633,-11.67485,0 136.2765,-11.5646,0 136.4738,-11.45757,0 136.7646,-11.00381,0 136.7838,-11.04376,0 136.7342,-11.20672,0 136.5952,-11.40484,0 136.6352,-11.74354,0 136.8317,-12.06468,0 136.8573,-12.21335,0 136.9336,-12.28694,0 136.9386,-12.35639,0 136.9794,-12.36139,0 136.9172,-12.3875,0 136.7831,-12.545,0 136.7986,-12.45667,0 136.7325,-12.48722,0 136.7683,-12.56972,0 136.6978,-12.62306,0 136.6808,-12.71029,0 136.6055,-12.72083,0 136.6186,-12.83584,0 136.5486,-12.74361,0 136.5397,-12.8175,0 136.4677,-12.78111,0 136.4843,-12.84594,0 136.5514,-12.88611,0 136.5392,-12.91639,0 136.645,-12.9575,0 136.6489,-13.01466,0 136.7199,-13.64,0 136.9308,-13.75824,0 136.9755,-14.26311,0 136.9212,-14.31743,0 135.7868,-14.90858,0 135.7612,-14.96609,0 135.7971,-15.14682,0 135.9369,-15.25361,0 136.2122,-15.39445,0 136.2791,-15.56722,0 136.4158,-15.62276,0 136.5764,-15.50668,0 136.7517,-15.55584,0 136.8828,-15.49533,0 137.0845,-15.66302,0 137.0997,-15.77525,0 137.0683,-15.93743,0 137.2488,-16.02194,0 137.4283,-16.15722,0 137.7355,-16.24916,0 137.8605,-16.44,0 138.0003,-16.55472,0 138.0004,-21.55472,0 138.0005,-25.99945,0 141.0005,-25.99971,0 141.0027,-29.00021,0 140.9979,-34.00021,0 140.9979,-34.02403,0 140.968,-38.06421,0 140.675,-38.06861,0 140.405,-37.92805,0 140.228,-37.65944,0 140.1141,-37.58055,0 140.1283,-37.53612,0 140.0408,-37.48721,0 140.0022,-37.50501000000001,0 139.8144,-37.29973,0 139.7375,-37.17805,0 139.7836,-37.15361,0 139.7803,-37.10778,0 139.7411,-37.08278,0 139.7314,-37.00973000000001,0 139.6697,-36.96362,0 139.8003,-36.89472,0 139.8547,-36.82611,0 139.8616,-36.66639,0 139.8269,-36.57778,0 139.573,-36.0925,0 139.2314,-35.76361,0 138.8005,-35.53694,0 138.6555,-35.56056,0 138.5355,-35.65445,0 138.3009,-35.65432,0 138.2088,-35.71732000000001,0 138.1369,-35.855,0 138.038,-35.92418,0 137.9289,-35.87666,0 137.7494,-35.86777,0 137.6055,-35.92945,0 137.6141,-36.01472,0 137.4577,-36.08666,0 137.3544,-36.00195,0 137.2219,-35.98361000000001,0 137.1566,-36.04361,0 137.0161,-36.02695,0 136.9061,-36.06028,0 136.8466,-36.03083,0 136.7164,-36.07168,0 136.6678,-35.98778,0 136.5344,-35.9125,0 136.5725,-35.77633,0 136.4895,-35.57197,0 136.4753,-35.25469,0 136.4239,-35.18024,0 135.9541,-35.01028,0 135.928,-34.95945,0 135.7867,-34.86029,0 135.7213,-34.86861,0 135.6778,-34.95555,0 135.6241,-34.95361,0 135.6061,-34.89305,0 135.4747,-34.75111,0 135.3225,-34.69111,0 135.3488,-34.65305,0 135.3219,-34.62166,0 135.2188,-34.56417,0 135.1056,-34.59302,0 135.0562,-34.44981,0 134.6956,-33.95219,0 134.4445,-33.78327,0 134.4536,-33.4363,0 134.3375,-33.20403,0 134.2691,-33.15972,0 134.2355,-33.05140000000001,0 134.1478,-33.0275,0 134.2039,-33.01112,0 134.1947,-32.95223,0 134.0611,-32.92139,0 134.1294,-32.84277,0 134.0683,-32.71667,0 134.2177,-32.72834,0 134.1941,-32.79029,0 134.2144,-32.81306,0 134.2241,-32.78389,0 134.2969,-32.68028,0 134.2822,-32.60000000000001,0 134.143,-32.4575,0 134.0355,-32.46389,0 133.9938,-32.50611,0 133.9314,-32.50084,0 133.9055,-32.54501,0 133.8505,-32.54055,0 133.7763,-32.43159,0 133.5382,-32.32338,0 133.4172,-32.21334,0 133.3041,-32.19694,0 133.2672,-32.22084000000001,0 133.1855,-32.18666,0 133.1447,-32.20583,0 133.0591,-32.11473,0 132.9774,-32.11306,0 132.8355,-31.97972,0 132.7644,-31.95084,0 132.5491,-31.93889,0 132.4508,-31.97277,0 132.4794,-32.03251,0 132.4142,-32.01167,0 132.2039,-32.03168,0 132.0908,-31.92111,0 131.7691,-31.72222,0 131.1522,-31.47416,0 130.838,-31.60584,0 130.1489,-31.57916000000001,0 129.0003,-31.69261,0 129.0052,-26.69261,0 129.0059,-26.0049,0 129.0032,-21.0049,0 129.0006,-16.0049,0 129,-14.87108,0 + + + 1 + + + + GMT +10:00 + + +]]> + #khStyle1000 + + + + + +157.5176,-9.204364,0 157.5176,-14.20437,0 157.5176,-19.20436,0 157.5176,-24.20437,0 157.5176,-29.20436000000001,0 157.5176,-34.20436,0 157.5176,-39.20436,0 157.5176,-39.30436,0 157.5176,-44.30436,0 157.5176,-49.30437,0 157.5176,-54.30436,0 157.5176,-59.00436,0 157.5176,-64.00436000000001,0 157.5176,-69.00436000000001,0 157.5176,-74.00436000000001,0 157.5176,-79.00436000000001,0 157.5176,-84.00436000000001,0 157.5176,-89.00436000000001,0 157.5176,-89.90000000000001,0 156.5791,-89.90000000000001,0 155.6407,-89.90000000000001,0 154.7022,-89.90000000000001,0 153.7638,-89.90000000000001,0 152.8253,-89.90000000000001,0 151.8868,-89.90000000000001,0 150.9484,-89.90000000000001,0 150.0099,-89.90000000000001,0 149.0715,-89.90000000000001,0 148.133,-89.90000000000001,0 147.1945,-89.90000000000001,0 146.2561,-89.90000000000001,0 145.3176,-89.90000000000001,0 144.3792,-89.90000000000001,0 143.4407,-89.90000000000001,0 142.5023,-89.90000000000001,0 142.5023,-88.17653,0 142.5023,-85.57653000000001,0 142.5023,-80.57653000000001,0 142.5023,-75.57653000000001,0 142.5023,-73.37653,0 142.5023,-68.37653,0 142.5023,-63.37653000000001,0 142.5023,-58.37653000000002,0 142.5023,-53.37653,0 142.5023,-48.37652000000001,0 142.5023,-43.37653,0 142.5023,-38.37652,0 142.4572,-38.40722,0 142.3813,-38.36362,0 142.163,-38.40111,0 141.9619,-38.29083,0 141.7436,-38.26751,0 141.6213,-38.31751,0 141.6536,-38.40222,0 141.5908,-38.39917,0 141.5472,-38.44305,0 141.4694,-38.37527,0 141.3842,-38.39889,0 141.4022,-38.3289,0 141.2825,-38.22084,0 140.968,-38.06421,0 140.9979,-34.02403,0 140.9979,-34.00021,0 141.0027,-29.00021,0 141.0005,-25.99971,0 138.0005,-25.99945,0 138.0004,-21.55472,0 138.0003,-16.55472,0 138.1902,-16.705,0 138.3039,-16.75112,0 138.4869,-16.78778,0 138.6466,-16.77973,0 138.8486,-16.87777,0 138.9894,-16.89061,0 139.1192,-16.78778,0 139.1562,-16.5896,0 139.3061,-16.45425,0 139.4543,-16.43814,0 139.5574,-16.3898,0 139.7379,-16.44136,0 139.7443,-16.50259,0 139.5574,-16.67661,0 139.4736,-16.83612,0 139.5075,-16.98919,0 139.5639,-17.02948,0 139.5816,-17.09876,0 139.4833,-17.18898,0 139.4543,-17.27115,0 139.4717,-17.40412,0 139.6219,-17.52556,0 139.8091,-17.57223,0 139.9308,-17.63139,0 139.9819,-17.70027,0 140.0514,-17.71806,0 140.3966,-17.67334,0 140.7361,-17.52,0 140.758,-17.47778,0 140.8352,-17.45027,0 140.8774,-17.37833,0 140.9491,-17.01362,0 141.0511,-16.88389000000001,0 141.0764,-16.80333,0 141.1299,-16.78083,0 141.2119,-16.6725,0 141.3269,-16.33195,0 141.3486,-16.21916,0 141.4269,-16.07917,0 141.3758,-15.92944,0 141.4605,-15.53611,0 141.6658,-15.03611,0 141.5677,-14.76889,0 141.5203,-14.475,0 141.5916,-14.26473,0 141.6,-14.13445,0 141.4661,-13.90667,0 141.5269,-13.57416,0 141.6297,-13.35416,0 141.6678,-13.34778,0 141.6883,-13.26083,0 141.5839,-12.98916,0 141.6299,-12.89528,0 141.6522,-12.9125,0 141.7597,-12.80805,0 141.8055,-12.67195,0 141.8158,-12.70361,0 141.8686,-12.70084,0 141.8905,-12.84639,0 141.935,-12.91111,0 141.908,-12.75028,0 142.005,-12.72166,0 141.9172,-12.71805,0 141.8297,-12.66278,0 141.8892,-12.60916,0 141.9753,-12.58944,0 141.9255,-12.56111,0 141.8191,-12.59695,0 141.7722,-12.57361,0 141.7589,-12.53222,0 141.6941,-12.50445,0 141.7444,-12.46111,0 141.6614,-12.44833,0 141.6544,-12.52833,0 141.6953,-12.54805,0 141.593,-12.5575,0 141.6658,-12.38666,0 141.6689,-12.38195,0 141.7161,-12.23305,0 141.8058,-12.2375,0 141.7503,-12.205,0 141.8524,-11.98445,0 141.91,-11.95944,0 141.8905,-11.98833,0 141.9175,-12.10528,0 141.9644,-12.04084,0 142.0289,-12.06221,0 141.9422,-11.95472,0 142.1241,-11.36722,0 142.1589,-11.14944,0 142.1419,-10.95666,0 141.007,-9.128467000000001,0 141.0035,-4.128462,0 141.0025,-2.607085,0 141,-5.400000000000001e-007,0 146,-0.00688554,0 151,-0.01377954,0 156,-0.02066454,0 157.5176,-0.02275254,0 157.5176,-5.022757,0 157.5176,-5.728428,0 155,-7.3,0 157.5176,-9.204364,0 + + + 1 + + + + + +157.5082,43.79277,0 157.5082,38.79276,0 157.5082,33.79276,0 157.5082,28.79276,0 157.5082,23.79276000000001,0 157.5082,18.79276,0 157.5082,17,0 157.5082,12,0 157.501,12,0 152.501,12,0 147.501,12,0 142.501,12,0 142.501,14.23089,0 142.501,19.23089,0 140.5122,19.23089,0 135.5122,19.23089,0 135.5122,23.61333000000001,0 135.5122,28.61333,0 137.5011,28.62327,0 142.501,28.64826,0 142.501,32.25372,0 142.501,37.25373,0 142.501,42.25373,0 142.943,42.10665,0 143.2463,41.92527,0 143.3169,42.04277,0 143.3297,42.28167,0 143.3738,42.36167,0 143.5955,42.61971000000001,0 143.8928,42.84916,0 144.0244,42.92139,0 144.325,42.99805,0 144.4636,42.93083,0 144.7778,42.92555,0 144.8695,42.9269,0 145.5455,43.11722,0 145.8469,43.2832,0 145.8579,43.31955,0 146.017,43.30567,0 147.0505,43.68716,0 147.4426,44.61853,0 150.3838,45.74596,0 152.32,46.87341,0 153.7416,48.22143,0 154.6484,48.93221,0 155.1141,49.64299000000001,0 156.4621,50.57436,0 156.6092,50.81945,0 156.6455,50.88888000000002,0 156.693,50.89138,0 156.8188,50.97971,0 156.8247,51.01221000000002,0 156.9511,51.06028,0 157.1417,51.19221000000002,0 157.2567,51.22970999999999,0 157.3572,51.33471,0 157.5086,51.39201,0 157.5082,50.69276,0 157.5082,48.79276000000002,0 157.5082,43.79277,0 + + + 1 + + + + + +157.5071,79.90000000000001,0 157.5071,77.646,0 158.1819,76.97113,0 158.435,76.60558,0 158.5194,76.15566,0 158.4631,75.95882,0 158.1257,75.79011,0 157.0853,75.4808,0 152.1637,74.59863,0 151.1239,74.41226,0 149.3243,74.29978,0 145.7813,74.66534,0 144.2066,74.66534,0 142.2944,74.52473000000001,0 142.2944,74.13106999999999,0 143.5036,73.76551000000001,0 143.9254,73.48432,0 144.0097,73.25936,0 143.9816,72.92194000000001,0 143.8973,72.69698,0 142.6355,67.8588,0 141.3738,63.02061,0 141.2248,62.44925000000001,0 141.3777,62.25851,0 141.469,62.21404,0 141.6523,62.03364000000001,0 141.809,62.01836000000001,0 142.0864,62.06575,0 142.2051,61.94452,0 142.2928,61.90464000000001,0 142.5545,61.97489000000001,0 142.8312,61.9179,0 142.8849,61.9355,0 143.0034,62.08195,0 143.0821,62.13218,0 143.2357,62.03323,0 143.4179,62.06457000000001,0 143.5195,62.03001,0 143.533,61.92546,0 143.6266,61.89821,0 143.7727,61.98169,0 143.8912,61.96601,0 143.9069,61.93699000000001,0 143.8109,61.79792,0 144.1019,61.75510000000001,0 144.1931,61.77938000000002,0 144.3145,61.86486,0 144.4896,61.91393,0 144.5109,61.9786,0 144.672,62.10590000000001,0 144.8737,62.09342000000001,0 145.0974,61.9896,0 145.3697,62.02246,0 145.4535,61.96645,0 145.5982,62.08148,0 145.6794,62.08096,0 146.3024,61.84119,0 146.3988,61.79554,0 146.4794,61.71044000000001,0 146.6458,61.46524000000002,0 146.5954,61.35341,0 146.6452,61.12606000000001,0 146.597,61.07125,0 146.623,61.02689,0 146.6056,61.00037,0 146.3812,60.95324,0 146.4342,60.87623000000001,0 146.3924,60.75424,0 146.2405,60.70178,0 146.0911,60.76063,0 145.9837,60.76147,0 145.8941,60.69299,0 145.6304,60.62862000000001,0 145.4411,60.52949,0 145.403,60.4785,0 145.4866,60.43041000000001,0 145.4511,60.35231,0 145.6592,60.22936,0 146.2814,60.24876,0 146.4616,60.14434000000001,0 146.5698,60.12513,0 146.6143,60.07499,0 146.6149,59.98568000000001,0 146.6968,59.94598,0 146.9257,59.95415,0 147.1046,59.86969000000001,0 147.1353,59.79827,0 147.079,59.73552,0 147.0555,59.47459000000001,0 147.0332,59.43111,0 146.8809,59.39854,0 146.8662,59.35934000000001,0 142.1674,59.0727,0 141.702,54.09441,0 141.2365,49.11613,0 140.948,46.03066,0 137.7037,45.85810000000001,0 137.6569,45.78221,0 137.3383,45.57721,0 137.1414,45.37028,0 136.8167,45.19554,0 136.7622,45.08721,0 136.6522,45.02804,0 136.5547,44.93833000000001,0 136.5533,44.88889,0 136.4497,44.82695,0 136.4413,44.76832,0 136.3608,44.79027,0 136.3075,44.73777000000001,0 136.3336,44.70361,0 136.2491,44.67194,0 136.1844,44.51305,0 135.8847,44.39832,0 135.8005,44.26333,0 135.7216,44.23499,0 135.6483,44.15943,0 135.6319,44.04944,0 135.5305,43.99166000000001,0 135.5128,43.92139,0 135.4572,43.94332,0 135.4769,43.8761,0 135.5178,43.88499,0 135.42,43.75417,0 135.273,43.68639,0 135.2497,43.72915,0 135.1833,43.70943,0 135.2266,43.68749,0 135.2225,43.6386,0 135.1297,43.49888,0 134.9686,43.4586,0 134.7639,43.30694,0 134.6997,43.30111,0 134.4167,43.14833,0 134.1883,43.07972000000001,0 134.115,42.99722,0 133.9142,42.87555,0 133.86,42.90387,0 133.7105,42.81332,0 133.6602,42.85443,0 133.5944,42.84694,0 133.3747,42.7575,0 133.2269,42.74249,0 133.1583,42.68306,0 133.0236,42.68776,0 133.0008,42.72222,0 133.0775,42.7411,0 132.9905,42.82054,0 132.8878,42.80555,0 132.853,42.73888,0 132.6667,42.8224,0 132.4611,42.77265,0 132.3549,42.70301000000001,0 132.2953,42.74943,0 132.1858,43.00813,0 132.0598,43.06119,0 131.8044,42.90532000000001,0 131.486,42.78592,0 131.4794,42.62341,0 131.2207,42.55566000000001,0 131.1678,42.57138,0 131.1919,42.59527,0 131.1397,42.60917,0 131.1133,42.66444,0 131.1022,42.61804,0 131.0228,42.645,0 130.9253,42.59333,0 130.8191,42.62693,0 130.93,42.61388,0 130.9528,42.645,0 130.7861,42.64277,0 130.8411,42.6875,0 130.7108,42.68499,0 130.6733,42.64749,0 130.7366,42.61361,0 130.7258,42.575,0 130.7703,42.59638,0 130.8711,42.52333,0 130.8383,42.51832,0 130.8305,42.46388,0 130.7789,42.45194,0 130.7539,42.34749,0 130.6974,42.29221,0 130.655,42.31388,0 130.6591,42.37665,0 130.6044,42.42186,0 130.5591,42.50667000000001,0 130.618,42.57944000000001,0 130.6052,42.61971000000001,0 130.5389,42.68194,0 130.4589,42.67999,0 130.4052,42.71804,0 130.638,42.83167,0 130.7705,42.83194,0 130.8186,42.87610000000001,0 131.0153,42.855,0 131.0458,42.90193,0 131.1322,42.91916,0 131.1047,43.03611,0 131.2144,43.13305,0 131.1911,43.19665,0 131.2611,43.26445,0 131.2741,43.36333,0 131.3114,43.39222,0 131.3044,43.45583,0 131.223,43.51167,0 131.1944,43.52777,0 131.1889,43.53666,0 131.2205,43.59527,0 131.1991,43.81889,0 131.2461,43.91806,0 131.2311,43.97387,0 131.2472,44.0275,0 131.298,44.05194,0 131.0955,44.69137,0 130.9539,44.8461,0 131.0425,44.86333,0 131.118,44.92583,0 131.2125,44.91055,0 131.35,44.97471,0 131.4666,44.96721,0 131.6444,45.10555,0 131.6464,45.19887,0 131.7536,45.21305000000001,0 131.8647,45.34555,0 131.9886,45.24194,0 132.9233,45.02194000000001,0 133.0333,45.06167,0 133.1222,45.12860000000001,0 133.0925,45.24415,0 133.1491,45.45083000000001,0 133.1905,45.50416000000001,0 133.4171,45.5691,0 133.4191,45.60722,0 133.4683,45.62222,0 133.4533,45.64722,0 133.4886,45.68277000000001,0 133.4419,45.69804,0 133.508,45.77777,0 133.4747,45.82027999999999,0 133.5222,45.88665,0 133.583,45.87137,0 133.6108,45.93194,0 133.6605,45.93458,0 133.7247,46.06528,0 133.6869,46.14332,0 133.9002,46.25031000000001,0 133.8839,46.29361,0 133.9102,46.31444,0 133.8619,46.33138,0 133.9286,46.39249,0 133.85,46.43999,0 133.8458,46.47554000000001,0 133.9016,46.57222,0 133.9977,46.64016,0 134.0438,46.75289999999999,0 134.0119,46.82389,0 134.0669,46.9161,0 134.0627,46.97527000000001,0 134.1312,47.07423,0 134.2222,47.11083000000001,0 134.1947,47.20665000000001,0 134.1478,47.24942999999999,0 134.1825,47.32332000000001,0 134.3147,47.4211,0 134.4791,47.42778,0 134.5521,47.46692,0 134.6741,47.57194,0 134.6836,47.62972,0 134.7672,47.7075,0 134.7703,47.73944,0 134.6844,47.80090000000001,0 134.6619,47.87417,0 134.5988,47.90471,0 134.5572,47.99471000000001,0 134.5839,48.06276,0 134.6678,48.10722,0 134.6814,48.22055,0 134.7408,48.26712,0 134.6105,48.30694,0 134.5718,48.36446000000001,0 134.4827,48.35028,0 134.4153,48.39112,0 134.0458,48.32528000000001,0 133.978,48.25972000000001,0 133.7514,48.24972,0 133.6964,48.18694,0 133.5936,48.17249,0 133.5067,48.07138000000001,0 133.3872,48.10528,0 133.0886,48.10167,0 133.018,48.03528000000001,0 132.8844,48.00860999999999,0 132.8089,47.94194,0 132.6714,47.94972000000001,0 132.6597,47.86583,0 132.5425,47.71389000000001,0 132.3411,47.74248999999999,0 131.9194,47.66999,0 131.6783,47.69915000000002,0 131.5755,47.6561,0 131.5372,47.71888,0 131.4167,47.7386,0 131.0405,47.67583,0 130.9464,47.71138,0 130.9461,47.80055,0 130.8897,47.90028,0 130.6814,48.04554,0 130.6594,48.0986,0 130.8322,48.29694,0 130.7375,48.41833,0 130.7578,48.48805,0 130.6269,48.47720000000001,0 130.6175,48.56194000000001,0 130.523,48.60277,0 130.675,48.84415000000001,0 130.6277,48.87465,0 130.5044,48.85194,0 130.5996,48.93345,0 130.9003,48.97752000000001,0 130.9823,49.16279999999999,0 131.0539,49.22533,0 131.3584,49.25607,0 131.4312,49.3426,0 131.456,49.56964,0 131.3988,49.67189000000001,0 131.3354,49.7038,0 131.4655,49.74212,0 131.4792,49.77464,0 131.4545,49.94840000000001,0 131.3611,50.08953,0 131.4482,50.18406000000001,0 131.2058,50.37281,0 131.0443,50.37701,0 130.848,50.43361,0 130.84,50.48763,0 130.9257,50.52943,0 130.9657,50.59039000000001,0 130.8691,50.65911,0 130.7555,50.65919000000002,0 130.6539,50.59364000000001,0 130.5924,50.61773000000001,0 130.7764,50.89289,0 130.649,50.9649,0 130.6651,50.99669,0 130.8353,51.0568,0 130.8823,51.1259,0 131.1296,51.25358000000001,0 131.1841,51.33065,0 131.4163,51.37443,0 131.4344,51.40771,0 131.3763,51.68487,0 131.6162,51.66434000000002,0 132.0319,51.81518,0 132.2201,51.81065,0 132.2938,51.84838000000001,0 132.3687,51.9752,0 132.4668,51.94439000000001,0 132.5923,52.10018000000001,0 132.7906,52.16892,0 133.1079,52.16774000000001,0 133.3551,52.22758,0 133.3646,52.27884,0 133.1884,52.43139000000001,0 133.2161,52.52879,0 133.1741,52.56192000000001,0 133.2485,52.66451,0 133.4076,52.67120000000001,0 133.9606,52.47187,0 134.1073,52.49435,0 134.5898,52.42293,0 134.644,52.49686,0 134.5947,52.53989,0 134.605,52.58288,0 134.7453,52.68349,0 134.5818,52.77556,0 134.572,52.87017000000001,0 134.6294,52.97923,0 134.8581,53.2211,0 134.8416,53.30129,0 134.7772,53.35156000000001,0 134.8063,53.39867,0 134.8608,53.39223,0 134.8939,53.42523000000001,0 134.4765,53.65137,0 134.045,53.46778000000001,0 133.7953,53.50423,0 133.6865,53.48001000000001,0 133.5405,53.55013,0 133.2816,53.50229000000001,0 133.1567,53.32175,0 132.9397,53.31208,0 132.7966,53.23391,0 132.1492,53.28006000000001,0 132.0767,53.2618,0 131.9606,53.16412,0 131.8363,53.20384,0 131.8331,53.2546,0 131.7383,53.28881000000001,0 131.4342,53.24406,0 131.4033,53.26408,0 131.4433,53.50145,0 131.369,53.75986,0 131.0603,53.87516000000001,0 130.8468,53.80831,0 130.7704,53.82110999999999,0 130.6684,53.88879,0 130.5371,53.88297000000001,0 130.4453,53.91442,0 130.4401,53.95286000000001,0 130.5956,54.16706,0 130.7881,54.30889,0 131.0439,54.32481000000001,0 131.1084,54.36098,0 131.2404,54.51491,0 131.2688,54.64863,0 131.4381,54.76270000000001,0 131.6391,54.78865,0 131.8497,54.86316000000001,0 132.102,55.05344000000001,0 132.3182,55.10742,0 132.4052,55.2324,0 132.5812,55.26958,0 132.7062,55.3788,0 132.9172,55.40487,0 132.8499,55.45721000000001,0 132.6032,55.50863,0 132.6198,55.5598,0 132.6778,55.5961,0 132.6783,55.64597,0 132.5187,55.73038,0 132.2958,55.75039,0 131.8277,55.67754,0 131.5875,55.7055,0 131.0922,55.68167,0 131.0924,55.7413,0 130.974,55.9278,0 131.1664,56.29863,0 131.182,56.41776000000001,0 131.3082,56.48672,0 131.4501,56.48512000000001,0 131.5154,56.54887000000001,0 131.7346,56.49774000000001,0 131.7752,56.62872,0 131.8783,56.76854,0 131.5165,57.0938,0 131.3337,57.16616000000001,0 131.1787,57.17673,0 131.1433,57.21137000000001,0 131.2694,57.28938,0 131.2796,57.36280000000001,0 131.5491,57.25599,0 131.66,57.27824,0 131.6878,57.45025,0 131.8647,57.60706,0 132.0838,57.63795,0 132.1476,57.72349000000001,0 131.8702,57.83329000000001,0 131.8208,57.9631,0 131.6874,58.0066,0 131.6564,58.07726000000001,0 131.5467,58.14072,0 131.5448,58.17016000000001,0 131.5646,58.1936,0 131.732,58.18654,0 132.1542,58.06819,0 132.0923,58.2122,0 132.2631,58.30735,0 132.1915,58.47281,0 132.2431,58.51441000000001,0 132.404,58.50661,0 132.539,58.58086,0 132.5681,58.63096000000001,0 132.5582,58.80028999999999,0 132.6281,58.88062,0 132.905,58.92134000000001,0 132.9268,58.97153000000001,0 132.8588,59.02208000000001,0 132.8709,59.06711,0 132.678,61.42275999999999,0 132.2701,66.40608,0 131.8621,71.38942,0 131.8621,75.29801999999999,0 133.9557,76.04201000000001,0 138.667,77.71629,0 142.5194,77.68817,0 142.5194,79.90000000000001,0 142.5194,84.90001,0 142.5194,89.90000000000001,0 143.5186,89.90000000000001,0 144.5178,89.90000000000001,0 145.5169,89.90000000000001,0 146.5161,89.90000000000001,0 147.5153,89.90000000000001,0 148.5145,89.90000000000001,0 149.5136,89.90000000000001,0 150.5128,89.90000000000001,0 151.512,89.90000000000001,0 152.5112,89.90000000000001,0 153.5104,89.90000000000001,0 154.5095,89.90000000000001,0 155.5087,89.90000000000001,0 156.5079,89.90000000000001,0 157.5071,89.90000000000001,0 157.5071,84.90001,0 157.5071,79.90000000000001,0 + + + 1 + + + + + GMT +10:30 + + +]]> + #khStyle1050 + + + + +157.8347,-33.62319,0 157.833,-30.36589,0 162.833,-30.36515,0 164.8248,-30.36486,0 164.8248,-33.62319,0 159.8248,-33.62319,0 157.8347,-33.62319,0 + + + 1 + + + + GMT +11:00 + + +]]> + #khStyle1100 + + + + + +166.3565,-27.96984000000001,0 166.3565,-30.78259,0 167.5012,-30.78259,0 172.5012,-30.78259,0 172.5012,-32.24902,0 169.8135,-36.46523,0 167.1259,-40.68143,0 165.0656,-43.91332,0 165.0573,-48.91331,0 165.049,-53.9133,0 165.048,-54.52042000000001,0 170.048,-54.52042000000001,0 172.5188,-54.52042000000001,0 172.5163,-59.52043,0 172.5138,-64.52042,0 172.5113,-69.52042,0 172.5088,-74.52042,0 172.5063,-79.52042,0 172.5038,-84.52042000000002,0 172.5013,-89.52042,0 172.5011,-89.90000000000001,0 171.5022,-89.90000000000001,0 170.5033,-89.90000000000001,0 169.5044,-89.90000000000001,0 168.5055,-89.90000000000001,0 167.5066,-89.90000000000001,0 166.5077,-89.90000000000001,0 165.5088,-89.90000000000001,0 164.5099,-89.90000000000001,0 163.511,-89.90000000000001,0 162.5121,-89.90000000000001,0 161.5132,-89.90000000000001,0 160.5143,-89.90000000000001,0 159.5154,-89.90000000000001,0 158.5165,-89.90000000000001,0 157.5176,-89.90000000000001,0 157.5176,-89.00436000000001,0 157.5176,-84.00436000000001,0 157.5176,-79.00436000000001,0 157.5176,-74.00436000000001,0 157.5176,-69.00436000000001,0 157.5176,-64.00436000000001,0 157.5176,-59.00436,0 157.5176,-54.30436,0 157.5176,-49.30437,0 157.5176,-44.30436,0 157.5176,-39.30436,0 157.5176,-39.20436,0 157.5176,-34.20436,0 157.5176,-29.20436000000001,0 157.5176,-24.20437,0 157.5176,-19.20436,0 157.5176,-14.20437,0 157.5176,-9.204364,0 155,-7.3,0 157.5176,-5.728428,0 157.5176,-5.022757,0 157.5176,-0.02275254,0 156,-0.02066454,0 151,-0.01377954,0 146,-0.00688554,0 141,-5.400000000000001e-007,0 137,1.199996,0 137,6.166665000000001,0 137,11.16666,0 138.3636,12,0 142.501,12,0 147.501,12,0 152.501,12,0 157.501,12,0 157.5082,12,0 157.5082,17,0 157.5082,18.79276,0 157.5082,23.79276000000001,0 157.5082,28.79276,0 157.5082,33.79276,0 157.5082,38.79276,0 157.5082,43.79277,0 157.5082,48.79276000000002,0 157.5082,50.69276,0 162.5082,50.68582000000001,0 167.5082,50.67888,0 172.5082,50.67194,0 172.5127,50.67192,0 172.5106,45.67193000000001,0 172.5085,40.67192,0 172.5064,35.67193,0 172.5043,30.67193,0 172.5022,25.67193,0 172.5002,20.86006,0 167.5002,20.85992,0 162.5002,20.85979,0 160.5733,20.85973,0 160.5671,15.85973,0 160.5609,10.85973,0 160.5546,5.859737,0 160.5484,0.8597425000000001,0 160.5444,-2.353266,0 165.5444,-2.354284,0 170.5444,-2.355309,0 172.5015,-2.355705,0 172.5014,-7.35571,0 172.5014,-12.35571,0 172.5013,-17.35571,0 172.5013,-22.35571,0 172.5013,-27.35571,0 172.5013,-27.96984000000001,0 171.3565,-27.96984000000001,0 166.3565,-27.96984000000001,0 + + + + + +157.833,-30.36589,0 157.8347,-33.62319,0 159.8248,-33.62319,0 164.8248,-33.62319,0 164.8248,-30.36486,0 162.833,-30.36515,0 157.833,-30.36589,0 + + + 1 + + + + + +172.5346,74.89999,0 172.5346,71.32091,0 167.5346,71.32091,0 162.5346,71.32091,0 159.7593,71.32091,0 160.3981,70.18025,0 160.6752,70.07872999999999,0 160.9,70.04337,0 162.2945,69.98492,0 162.3981,69.86644,0 162.4037,69.67095000000001,0 162.271,69.58094000000001,0 162.2592,69.52155000000001,0 162.1759,69.45047,0 162.1934,69.42339,0 162.4407,69.38332,0 162.8192,69.22402,0 162.5843,69.15031000000001,0 162.5256,69.11716,0 162.4894,69.04481,0 162.4924,69.00284000000001,0 162.5952,68.95761,0 162.6687,68.86439000000001,0 162.5342,68.81356,0 162.4721,68.75452,0 162.6575,68.64811,0 162.5248,68.5097,0 162.516,68.39265,0 162.4043,68.32226,0 161.9774,68.33798,0 161.3543,68.46493,0 160.8015,68.27876000000001,0 160.4726,68.27036,0 160.0085,68.31707,0 159.7156,68.27837,0 159.6493,68.22415,0 159.4943,68.19717,0 159.219,68.22060000000001,0 158.8942,68.17033000000001,0 158.4859,68.15252,0 158.1873,68.05862000000001,0 157.957,67.91137000000001,0 157.9457,67.8794,0 158.1858,67.82414000000001,0 158.2565,67.76581,0 158.1298,67.73808,0 157.772,67.74168,0 157.6639,67.70263,0 157.6332,67.61433,0 157.822,67.39413999999999,0 157.8414,67.30539,0 158.5028,67.09791,0 158.7005,67.06403,0 158.7453,66.92084,0 158.8598,66.84213,0 158.8488,66.78941,0 158.6252,66.67805,0 158.4739,66.56100000000001,0 158.2896,66.48923000000001,0 158.2673,66.45123,0 158.4219,66.36732000000001,0 158.5064,66.35485,0 158.7805,66.2747,0 159.2178,66.20954999999999,0 159.1812,66.14093,0 158.9673,65.98079,0 158.9386,65.85458000000001,0 158.8529,65.72281,0 159.01,65.70184,0 159.2512,65.61183,0 160.0269,65.49356,0 160.2953,65.31647,0 160.4545,65.15871,0 161.2346,65.12815000000001,0 161.595,64.98701,0 161.8677,64.81350000000001,0 162.2872,64.74589,0 162.4811,64.75023,0 162.7342,64.67844,0 163.1004,64.66866,0 163.1754,64.69203,0 163.1694,64.79909000000001,0 163.2627,64.74456000000001,0 163.1777,64.67222,0 163.1747,64.62662,0 163.3588,64.38509000000001,0 163.2731,64.30114,0 163.2748,64.25255,0 163.2118,64.2088,0 163.0435,64.23567,0 162.7443,64.17494000000001,0 162.7434,64.14100000000001,0 162.8791,64.04618000000001,0 162.9514,63.91394,0 162.7401,63.85479,0 162.6724,63.80212,0 162.7899,63.71773,0 162.9543,63.65721000000001,0 162.9894,63.51587000000001,0 162.6794,63.42236000000001,0 162.7222,63.37083,0 162.8369,63.33097,0 162.835,63.26305,0 162.6071,63.20139000000001,0 162.5314,63.12977,0 162.2438,63.13342000000001,0 162.169,63.02766,0 162.1873,62.96365000000001,0 162.244,62.93481,0 162.5737,62.85993,0 162.633,62.83200000000002,0 162.6456,62.77090000000001,0 162.8105,62.71667000000002,0 162.72,62.65807,0 162.7746,62.47603,0 162.7042,62.35186,0 162.529,62.28267000000001,0 162.1591,62.23799,0 162.1606,62.20911000000001,0 162.5421,62.11821000000001,0 162.5609,62.07495,0 162.5376,62.0244,0 162.4909,61.99523,0 162.3335,61.98738,0 162.3959,61.93176,0 162.4478,61.67067000000001,0 162.2883,61.62471000000001,0 162.2875,61.58943,0 162.0422,61.45555,0 162.023,61.41777,0 161.9286,61.37778,0 161.883,61.42944,0 161.8658,61.35054,0 161.8005,61.38082000000001,0 161.7422,61.30804000000001,0 161.5633,61.26694000000001,0 161.6155,61.24305,0 161.5725,61.20193,0 161.473,61.20444000000001,0 161.4155,61.16693,0 161.43,61.13221000000001,0 161.2161,61.06555,0 161.1658,61.00054,0 160.9008,60.90942,0 160.7978,60.73527,0 160.6705,60.77638,0 160.6186,60.7311,0 160.5602,60.75861,0 160.443,60.71249,0 160.4003,60.73332,0 160.4228,60.75722,0 160.3777,60.75139999999999,0 160.3389,60.71776,0 160.3533,60.69332,0 160.2611,60.62555,0 160.1378,60.58359999999999,0 160.1244,60.6786,0 160.1852,60.68888,0 160.2247,60.73721,0 160.2247,60.78443999999999,0 160.1619,60.83778,0 160.3519,60.92221,0 160.3322,60.9547,0 160.4319,61.04721,0 160.1642,61.05082,0 159.8705,60.9286,0 159.7805,60.94083,0 159.7964,60.97776,0 159.9769,61.12111,0 159.94,61.14360000000001,0 159.9516,61.1825,0 159.9011,61.21083,0 159.918,61.24888,0 159.7455,61.25083,0 159.84,61.31192999999999,0 159.9325,61.28334,0 159.9922,61.30888,0 159.8905,61.32861,0 159.9708,61.39861000000001,0 160.0369,61.38694,0 160.0255,61.41526,0 160.0791,61.44833,0 160.0083,61.46194000000001,0 160.2297,61.56361,0 160.2311,61.63611,0 160.2839,61.66249,0 160.2372,61.70249,0 160.3738,61.77804,0 160.3461,61.81889,0 160.3736,61.84276,0 160.3452,61.87082000000001,0 160.3652,61.9086,0 160.3344,61.92333,0 160.3549,61.94749000000001,0 159.9602,61.82333000000001,0 159.8375,61.71221,0 159.6711,61.7236,0 159.5311,61.66276,0 159.485,61.7197,0 159.5378,61.82027000000001,0 159.4458,61.77443,0 159.3341,61.82666,0 159.3816,61.85917,0 159.3697,61.88777000000001,0 159.2475,61.92222,0 158.9055,61.89582,0 158.8386,61.85749,0 158.8472,61.81777,0 158.6333,61.83500000000001,0 158.5189,61.79167000000001,0 158.4377,61.82444,0 158.2978,61.82167,0 158.0283,61.72999,0 157.9,61.78556,0 157.5038,61.80479,0 157.5038,57.82619,0 157.4064,57.785,0 157.1744,57.77193000000001,0 157.0489,57.80028,0 156.985,57.85361,0 156.7869,57.76361,0 156.7488,57.72833000000001,0 156.8455,57.72554000000002,0 156.9355,57.64054,0 156.9805,57.52777,0 156.9778,57.41444,0 156.6953,57.10860000000001,0 156.7194,57.08416,0 156.6794,57.0425,0 156.5472,57.1075,0 156.4544,56.95722,0 156.1997,56.85666,0 156.1978,56.81694000000001,0 156.0633,56.71471,0 156.0747,56.75999000000002,0 156.1689,56.83526000000001,0 156.1044,56.81527000000001,0 155.9408,56.63360999999999,0 155.7361,56.13693,0 155.76,56.1061,0 155.6986,56.06554000000001,0 155.6461,55.91194000000002,0 155.6183,55.62138,0 155.5441,55.3036,0 155.6994,54.51250000000001,0 155.9408,53.84694,0 155.9194,53.83749,0 156.0858,53.09778000000001,0 156.1033,52.84916,0 156.2608,52.56722,0 156.365,52.51666,0 156.4411,52.52083,0 156.37,52.44249,0 156.3655,52.49527,0 156.2775,52.52361,0 156.4247,52.20916,0 156.4919,51.93166000000001,0 156.4727,51.51361000000001,0 156.5164,51.41667,0 156.518,51.32277,0 156.5514,51.27388,0 156.6736,51.22943000000001,0 156.708,51.18444,0 156.7016,51.09833,0 156.7461,51.07443,0 156.7455,50.98777000000001,0 156.6455,50.88888000000002,0 156.6092,50.81945,0 156.4621,50.57436,0 155.1141,49.64299000000001,0 154.6484,48.93221,0 153.7416,48.22143,0 152.32,46.87341,0 150.3838,45.74596,0 147.4426,44.61853,0 147.0505,43.68716,0 146.017,43.30567,0 145.8579,43.31955,0 145.8775,43.38366,0 145.6765,43.53654,0 145.5292,44.44866,0 140.948,46.03066,0 141.2365,49.11613,0 141.702,54.09441,0 142.1674,59.0727,0 146.8662,59.35934000000001,0 146.8809,59.39854,0 147.0332,59.43111,0 147.0555,59.47459000000001,0 147.079,59.73552,0 147.1353,59.79827,0 147.1046,59.86969000000001,0 146.9257,59.95415,0 146.6968,59.94598,0 146.6149,59.98568000000001,0 146.6143,60.07499,0 146.5698,60.12513,0 146.4616,60.14434000000001,0 146.2814,60.24876,0 145.6592,60.22936,0 145.4511,60.35231,0 145.4866,60.43041000000001,0 145.403,60.4785,0 145.4411,60.52949,0 145.6304,60.62862000000001,0 145.8941,60.69299,0 145.9837,60.76147,0 146.0911,60.76063,0 146.2405,60.70178,0 146.3924,60.75424,0 146.4342,60.87623000000001,0 146.3812,60.95324,0 146.6056,61.00037,0 146.623,61.02689,0 146.597,61.07125,0 146.6452,61.12606000000001,0 146.5954,61.35341,0 146.6458,61.46524000000002,0 146.4794,61.71044000000001,0 146.3988,61.79554,0 146.3024,61.84119,0 145.6794,62.08096,0 145.5982,62.08148,0 145.4535,61.96645,0 145.3697,62.02246,0 145.0974,61.9896,0 144.8737,62.09342000000001,0 144.672,62.10590000000001,0 144.5109,61.9786,0 144.4896,61.91393,0 144.3145,61.86486,0 144.1931,61.77938000000002,0 144.1019,61.75510000000001,0 143.8109,61.79792,0 143.9069,61.93699000000001,0 143.8912,61.96601,0 143.7727,61.98169,0 143.6266,61.89821,0 143.533,61.92546,0 143.5195,62.03001,0 143.4179,62.06457000000001,0 143.2357,62.03323,0 143.0821,62.13218,0 143.0034,62.08195,0 142.8849,61.9355,0 142.8312,61.9179,0 142.5545,61.97489000000001,0 142.2928,61.90464000000001,0 142.2051,61.94452,0 142.0864,62.06575,0 141.809,62.01836000000001,0 141.6523,62.03364000000001,0 141.469,62.21404,0 141.3777,62.25851,0 141.2248,62.44925000000001,0 141.3738,63.02061,0 142.6355,67.8588,0 143.8973,72.69698,0 143.9816,72.92194000000001,0 144.0097,73.25936,0 143.9254,73.48432,0 143.5036,73.76551000000001,0 142.2944,74.13106999999999,0 142.2944,74.52473000000001,0 144.2066,74.66534,0 145.7813,74.66534,0 149.3243,74.29978,0 151.1239,74.41226,0 152.1637,74.59863,0 157.0853,75.4808,0 158.1257,75.79011,0 158.4631,75.95882,0 158.5194,76.15566,0 158.435,76.60558,0 158.1819,76.97113,0 157.5071,77.646,0 157.5071,79.90000000000001,0 157.5071,84.90001,0 157.5071,89.90000000000001,0 158.4463,89.90000000000001,0 159.3855,89.90000000000001,0 160.3247,89.90000000000001,0 161.264,89.90000000000001,0 162.2032,89.90000000000001,0 163.1424,89.90000000000001,0 164.0816,89.90000000000001,0 165.0208,89.90000000000001,0 165.9601,89.90000000000001,0 166.8993,89.90000000000001,0 167.8385,89.90000000000001,0 168.7777,89.90000000000001,0 169.7169,89.90000000000001,0 170.6562,89.90000000000001,0 171.5954,89.90000000000001,0 172.5346,89.90000000000001,0 172.5346,84.90001,0 172.5346,79.90000000000001,0 172.5346,74.89999,0 + + + 1 + + + + + GMT +11:30 + + +]]> + #khStyle1150 + + + + +172.5013,-27.96984000000001,0 172.5012,-30.78259,0 167.5012,-30.78259,0 166.3565,-30.78259,0 166.3565,-27.96984000000001,0 171.3565,-27.96984000000001,0 172.5013,-27.96984000000001,0 + + + 1 + + + + GMT +12:00 + + +]]> + #khStyle1200 + + + + + +-172.5,-38.5,0 -172.5,-43.5,0 -172.5,-45,0 -176.2216,-48.22535,0 -180,-51.50000000000001,0 -180,-46.50682,0 -175.0824,-46.50682,0 -175.0824,-43.00079,0 -180,-43.00079,0 -180,-38.5,0 -180,-33.5,0 -180,-28.5,0 -180,-23.5,0 -175,-23.5,0 -172.5,-23.5,0 -172.5,-28.5,0 -172.5,-33.5,0 -172.5,-38.5,0 + + + 1 + + + + + +-177,-20.99139,0 -180,-21.87818,0 -180,-20,0 -180,-15,0 -180,-10,0 -180,-4.999996,0 -177,-9.000000999999999,0 -174,-13,0 -172.5,-15,0 -177,-15,0 -177,-15.99139,0 -177,-20.99139,0 + + + 1 + + + + + +-177.5929,60.38517000000001,0 -180,58.95238000000001,0 -180,60.00000000000001,0 -180,65,0 -180,70,0 -180,75,0 -175.7817,72.31562,0 -172.509,70.23302,0 -169,68,0 -169,65.5,0 -173.2965,62.94258000000001,0 -177.5929,60.38517000000001,0 + + + 1 + + + + + +180,68.95238000000001,0 180,63.95238000000001,0 180,58.95238000000001,0 177.7114,57.59015000000001,0 173.415,55.03272,0 170,53,0 171.5334,52.23330000000001,0 176.0055,49.99722,0 180,48,0 180,46.99903,0 180,41.99904,0 180,36.99903,0 180,31.99903000000001,0 180,26.99904,0 180,21.99903,0 180,16.99904,0 180,11.99903,0 180,6.999039000000001,0 180,1.999034,0 180,-3.000961,0 180,-8.000964,0 180,-13.00097,0 180,-18.00096,0 180,-23.00097,0 180,-28.00096,0 180,-33.00097,0 180,-38.00096,0 180,-43.00097,0 177.8549,-43.00097,0 176.0435,-45.19365,0 176.0435,-46.50451,0 180,-46.50451,0 180,-49.90001,0 180,-54.9,0 180,-59.90001,0 180,-64.90000000000001,0 180,-69.90000000000001,0 180,-74.90000000000001,0 180,-79.90000000000001,0 180,-84.89999,0 180,-89.90000000000001,0 179.0627,-89.90000000000001,0 178.1253,-89.90000000000001,0 177.1879,-89.90000000000001,0 176.2506,-89.90000000000001,0 175.3132,-89.90000000000001,0 174.3758,-89.90000000000001,0 173.4385,-89.90000000000001,0 172.5011,-89.90000000000001,0 172.5013,-89.52042,0 172.5038,-84.52042000000002,0 172.5063,-79.52042,0 172.5088,-74.52042,0 172.5113,-69.52042,0 172.5138,-64.52042,0 172.5163,-59.52043,0 172.5188,-54.52042000000001,0 170.048,-54.52042000000001,0 165.048,-54.52042000000001,0 165.049,-53.9133,0 165.0573,-48.91331,0 165.0656,-43.91332,0 167.1259,-40.68143,0 169.8135,-36.46523,0 172.5012,-32.24902,0 172.5012,-30.78259,0 172.5013,-27.96984000000001,0 172.5013,-27.35571,0 172.5013,-22.35571,0 172.5013,-17.35571,0 172.5014,-12.3557,0 172.5014,-7.35571,0 172.5015,-2.355705,0 170.5444,-2.355309,0 165.5444,-2.354284,0 160.5444,-2.353266,0 160.5484,0.8597425000000001,0 160.5546,5.859737,0 160.5609,10.85973,0 160.5671,15.85973,0 160.5733,20.85973,0 162.5002,20.85979,0 167.5002,20.85992,0 172.5002,20.86006,0 172.5022,25.67193,0 172.5043,30.67193,0 172.5064,35.67193,0 172.5085,40.67192,0 172.5106,45.67193000000001,0 172.5127,50.67192,0 172.5082,50.67194,0 167.5082,50.67888,0 162.5082,50.68582000000001,0 157.5082,50.69276,0 157.5086,51.39201,0 157.3572,51.33471,0 157.2567,51.22970999999999,0 157.1417,51.19221000000002,0 156.9511,51.06028,0 156.8247,51.01221000000002,0 156.8188,50.97971,0 156.693,50.89138,0 156.6455,50.88888000000002,0 156.7455,50.98777000000001,0 156.7461,51.07443,0 156.7016,51.09833,0 156.708,51.18444,0 156.6736,51.22943000000001,0 156.5514,51.27388,0 156.518,51.32277,0 156.5164,51.41667,0 156.4727,51.51361000000001,0 156.4919,51.93166000000001,0 156.4247,52.20916,0 156.2775,52.52361,0 156.3655,52.49527,0 156.37,52.44249,0 156.4411,52.52083,0 156.365,52.51666,0 156.2608,52.56722,0 156.1033,52.84916,0 156.0858,53.09778000000001,0 155.9194,53.83749,0 155.9408,53.84694,0 155.6994,54.51250000000001,0 155.5441,55.3036,0 155.6183,55.62138,0 155.6461,55.91194000000002,0 155.6986,56.06554000000001,0 155.76,56.1061,0 155.7361,56.13693,0 155.9408,56.63360999999999,0 156.1044,56.81527000000001,0 156.1689,56.83526000000001,0 156.0747,56.75999000000002,0 156.0633,56.71471,0 156.1978,56.81694000000001,0 156.1997,56.85666,0 156.4544,56.95722,0 156.5472,57.1075,0 156.6794,57.0425,0 156.7194,57.08416,0 156.6953,57.10860000000001,0 156.9778,57.41444,0 156.9805,57.52777,0 156.9355,57.64054,0 156.8455,57.72554000000002,0 156.7488,57.72833000000001,0 156.7869,57.76361,0 156.985,57.85361,0 157.0489,57.80028,0 157.1744,57.77193000000001,0 157.4064,57.785,0 157.5038,57.82619,0 157.5038,61.80479,0 157.9,61.78556,0 158.0283,61.72999,0 158.2978,61.82167,0 158.4377,61.82444,0 158.5189,61.79167000000001,0 158.6333,61.83500000000001,0 158.8472,61.81777,0 158.8386,61.85749,0 158.9055,61.89582,0 159.2475,61.92222,0 159.3697,61.88777000000001,0 159.3816,61.85917,0 159.3341,61.82666,0 159.4458,61.77443,0 159.5378,61.82027000000001,0 159.485,61.7197,0 159.5311,61.66276,0 159.6711,61.7236,0 159.8375,61.71221,0 159.9602,61.82333000000001,0 160.3549,61.94749000000001,0 160.3344,61.92333,0 160.3652,61.9086,0 160.3452,61.87082000000001,0 160.3736,61.84276,0 160.3461,61.81889,0 160.3738,61.77804,0 160.2372,61.70249,0 160.2839,61.66249,0 160.2311,61.63611,0 160.2297,61.56361,0 160.0083,61.46194000000001,0 160.0791,61.44833,0 160.0255,61.41526,0 160.0369,61.38694,0 159.9708,61.39861000000001,0 159.8905,61.32861,0 159.9922,61.30888,0 159.9325,61.28334,0 159.84,61.31192999999999,0 159.7455,61.25083,0 159.918,61.24888,0 159.9011,61.21083,0 159.9516,61.1825,0 159.94,61.14360000000001,0 159.9769,61.12111,0 159.7964,60.97776,0 159.7805,60.94083,0 159.8705,60.9286,0 160.1642,61.05082,0 160.4319,61.04721,0 160.3322,60.9547,0 160.3519,60.92221,0 160.1619,60.83778,0 160.2247,60.78443999999999,0 160.2247,60.73721,0 160.1852,60.68888,0 160.1244,60.6786,0 160.1378,60.58359999999999,0 160.2611,60.62555,0 160.3533,60.69332,0 160.3389,60.71776,0 160.3777,60.75139999999999,0 160.4228,60.75722,0 160.4003,60.73332,0 160.443,60.71249,0 160.5602,60.75861,0 160.6186,60.7311,0 160.6705,60.77638,0 160.7978,60.73527,0 160.9008,60.90942,0 161.1658,61.00054,0 161.2161,61.06555,0 161.43,61.13221000000001,0 161.4155,61.16693,0 161.473,61.20444000000001,0 161.5725,61.20193,0 161.6155,61.24305,0 161.5633,61.26694000000001,0 161.7422,61.30804000000001,0 161.8005,61.38082000000001,0 161.8658,61.35054,0 161.883,61.42944,0 161.9286,61.37778,0 162.023,61.41777,0 162.0422,61.45555,0 162.2875,61.58943,0 162.2883,61.62471000000001,0 162.4478,61.67067000000001,0 162.3959,61.93176,0 162.3335,61.98738,0 162.4909,61.99523,0 162.5376,62.0244,0 162.5609,62.07495,0 162.5421,62.11821000000001,0 162.1606,62.20911000000001,0 162.1591,62.23799,0 162.529,62.28267000000001,0 162.7042,62.35186,0 162.7746,62.47603,0 162.72,62.65807,0 162.8105,62.71667000000002,0 162.6456,62.77090000000001,0 162.633,62.83200000000002,0 162.5737,62.85993,0 162.244,62.93481,0 162.1873,62.96365000000001,0 162.169,63.02766,0 162.2438,63.13342000000001,0 162.5314,63.12977,0 162.6071,63.20139000000001,0 162.835,63.26305,0 162.8369,63.33097,0 162.7222,63.37083,0 162.6794,63.42236000000001,0 162.9894,63.51587000000001,0 162.9543,63.65721000000001,0 162.7899,63.71773,0 162.6724,63.80212,0 162.7401,63.85479,0 162.9514,63.91394,0 162.8791,64.04618000000001,0 162.7434,64.14100000000001,0 162.7443,64.17494000000001,0 163.0435,64.23567,0 163.2118,64.2088,0 163.2748,64.25255,0 163.2731,64.30114,0 163.3588,64.38509000000001,0 163.1747,64.62662,0 163.1777,64.67222,0 163.2627,64.74456000000001,0 163.1694,64.79909000000001,0 163.1754,64.69203,0 163.1004,64.66866,0 162.7342,64.67844,0 162.4811,64.75023,0 162.2872,64.74589,0 161.8677,64.81350000000001,0 161.595,64.98701,0 161.2346,65.12815000000001,0 160.4545,65.15871,0 160.2953,65.31647,0 160.0269,65.49356,0 159.2512,65.61183,0 159.01,65.70184,0 158.8529,65.72281,0 158.9386,65.85458000000001,0 158.9673,65.98079,0 159.1812,66.14093,0 159.2178,66.20954999999999,0 158.7805,66.2747,0 158.5064,66.35485,0 158.4219,66.36732000000001,0 158.2673,66.45123,0 158.2896,66.48923000000001,0 158.4739,66.56100000000001,0 158.6252,66.67805,0 158.8488,66.78941,0 158.8598,66.84213,0 158.7453,66.92084,0 158.7005,67.06403,0 158.5028,67.09791,0 157.8414,67.30539,0 157.822,67.39413999999999,0 157.6332,67.61433,0 157.6639,67.70263,0 157.772,67.74168,0 158.1298,67.73808,0 158.2565,67.76581,0 158.1858,67.82414000000001,0 157.9457,67.8794,0 157.957,67.91137000000001,0 158.1873,68.05862000000001,0 158.4859,68.15252,0 158.8942,68.17033000000001,0 159.219,68.22060000000001,0 159.4943,68.19717,0 159.6493,68.22415,0 159.7156,68.27837,0 160.0085,68.31707,0 160.4726,68.27036,0 160.8015,68.27876000000001,0 161.3543,68.46493,0 161.9774,68.33798,0 162.4043,68.32226,0 162.516,68.39265,0 162.5248,68.5097,0 162.6575,68.64811,0 162.4721,68.75452,0 162.5342,68.81356,0 162.6687,68.86439000000001,0 162.5952,68.95761,0 162.4924,69.00284000000001,0 162.4894,69.04481,0 162.5256,69.11716,0 162.5843,69.15031000000001,0 162.8192,69.22402,0 162.4407,69.38332,0 162.1934,69.42339,0 162.1759,69.45047,0 162.2592,69.52155000000001,0 162.271,69.58094000000001,0 162.4037,69.67095000000001,0 162.3981,69.86644,0 162.2945,69.98492,0 160.9,70.04337,0 160.6752,70.07872999999999,0 160.3981,70.18025,0 159.7593,71.32091,0 162.5346,71.32091,0 167.5346,71.32091,0 172.5346,71.32091,0 172.5346,74.89999,0 172.5346,79.90000000000001,0 172.5346,84.90001,0 172.5346,89.90000000000001,0 173.4678,89.90000000000001,0 174.401,89.90000000000001,0 175.3341,89.90000000000001,0 176.2673,89.90000000000001,0 177.2005,89.90000000000001,0 178.1337,89.90000000000001,0 179.0668,89.90000000000001,0 180,89.90000000000001,0 180,88.95238000000001,0 180,83.95238000000002,0 180,78.95237,0 180,73.95238000000001,0 180,68.95238000000001,0 + + + 1 + + + + + GMT +12:45 + + +]]> + #khStyle1275 + + + + + +180,-46.50451,0 176.0435,-46.50451,0 176.0435,-45.19365,0 177.8549,-43.00097,0 180,-43.00097,0 180,-46.50451,0 + + + 1 + + + + + +-175.0824,-46.50682,0 -180,-46.50682,0 -180,-43.00079,0 -175.0824,-43.00079,0 -175.0824,-46.50682,0 + + + 1 + + + + + GMT +13:00 + + +]]> + #khStyle1300 + + + + +-180,-21.87818,0 -177,-20.99139,0 -177,-15.99139,0 -177,-15,0 -172.5,-15,0 -172.5,-20,0 -172.5,-23.5,0 -175,-23.5,0 -180,-23.5,0 -180,-21.87818,0 + + + 1 + + + + diff --git a/float-no-zero/examples/data/ogcsample.xml b/float-no-zero/examples/data/ogcsample.xml new file mode 100644 index 0000000000..0d4c52da60 --- /dev/null +++ b/float-no-zero/examples/data/ogcsample.xml @@ -0,0 +1,284 @@ + + + + WMS + Acme Corp. Map Server + Map Server maintained by Acme Corporation. Contact: webmaster@wmt.acme.com. High-quality maps showing roadrunner nests and possible ambush locations. + + + bird + roadrunner + ambush + + + + + + + Jeff Smith + NASA + + Computer Scientist + + + postal +
NASA Goddard Space Flight Center
+ Greenbelt + MD + 20771 + + USA +
+ +1 301 555-1212 + user@host.com +
+ + none + + none + 16 + 2048 + 2048 +
+ + + + + text/xml + + + + + + + + + + + + + + image/gif + image/png + image/jpeg + + + + + + + + + + + + text/xml + text/plain + text/html + + + + + + + + + + + + XML + + INIMAGE + BLANK + + + Acme Corp. Map Server + CRS:84 + + + + + + + + ROADS_RIVERS + Roads and Rivers + + EPSG:26986 + + -71.63 + -70.78 + 41.75 + 42.90 + + + + + + State College University + + + + image/gif + + + + 123456 + + + XML + + + + 1000 + 250000 + + ROADS_1M + Roads at 1:1M scale + Roads at a scale of 1 to 1 million. + + + road + transportation + atlas + + 123456 + + + text/plain + + + + text/xml + + + + + + + RIVERS_1M + Rivers at 1:1M scale + Rivers at a scale of 1 to 1 million. + + + river + canal + waterway + + + + + + Weather Forecast Data + CRS:84 + + + -180 + 180 + + -90 + 90 + + 1999-01-01/2000-08-22/P1D + + + Clouds + Forecast cloud cover + + + Temperature + Forecast temperature + + + + Pressure + Forecast barometric pressure + + + 1999-01-01/2000-08-22/P1D + + 0,1000,3000,5000,10000 + + + + ozone_image + Global ozone distribution (1992) + + + -180 + 180 + -90 + 90 + + 1992 + + + + population + World population, annual + + -180 + + 180 + -90 + 90 + + 1990/2000/P1Y + + + + +
diff --git a/float-no-zero/examples/data/osm/map.osm b/float-no-zero/examples/data/osm/map.osm new file mode 100644 index 0000000000..135e798e1d --- /dev/null +++ b/float-no-zero/examples/data/osm/map.osm @@ -0,0 +1,2223 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/float-no-zero/examples/data/sld/countries.sld b/float-no-zero/examples/data/sld/countries.sld new file mode 100644 index 0000000000..9ae5eebea3 --- /dev/null +++ b/float-no-zero/examples/data/sld/countries.sld @@ -0,0 +1,43 @@ + + + + countries + + countries + A sample style for countries + 1 + A sample style for countries + + name + + Sample + Sample + + + #ff0000 + 0.6 + + + #00FF00 + 0.5 + 4 + + + + + 20000000 + + + name + + + Arial + 10 + Normal + + + + + + + diff --git a/float-no-zero/examples/data/topojson/us.json b/float-no-zero/examples/data/topojson/us.json new file mode 100644 index 0000000000..721f640680 --- /dev/null +++ b/float-no-zero/examples/data/topojson/us.json @@ -0,0 +1 @@ +{"type":"Topology","objects":{"counties":{"type":"GeometryCollection","geometries":[{"type":"Polygon","id":53073,"arcs":[[0,1,2,3]]},{"type":"Polygon","id":30105,"arcs":[[4,5,6,7,8,9]]},{"type":"Polygon","id":30029,"arcs":[[10,11,12,13,14,15,16,17,18,19]]},{"type":"Polygon","id":16021,"arcs":[[20,21,22,23]]},{"type":"Polygon","id":30071,"arcs":[[-9,24,25,26,27,28,29]]},{"type":"Polygon","id":38079,"arcs":[[30,31,32,33]]},{"type":"Polygon","id":30053,"arcs":[[-19,34,35,-21,36]]},{"type":"Polygon","id":38009,"arcs":[[-32,37,38,39,40]]},{"type":"Polygon","id":30035,"arcs":[[41,42,-11,43]]},{"type":"Polygon","id":30041,"arcs":[[44,45,46,47]]},{"type":"Polygon","id":30005,"arcs":[[-29,-28,48,49,-48,50]]},{"type":"Polygon","id":30019,"arcs":[[51,52,-5,53]]},{"type":"Polygon","id":38067,"arcs":[[54,55,56,57]]},{"type":"Polygon","id":27069,"arcs":[[58,59,-55,60]]},{"type":"Polygon","id":38095,"arcs":[[61,62,63,-34,64,65]]},{"type":"Polygon","id":38019,"arcs":[[-57,66,67,-66,68]]},{"type":"Polygon","id":53047,"arcs":[[69,70,71,72,73,74,-1,75]]},{"type":"Polygon","id":53065,"arcs":[[76,77,78,79,80]]},{"type":"Polygon","id":53051,"arcs":[[-23,81,82,-77,83]]},{"type":"Polygon","id":53019,"arcs":[[-80,84,-70,85]]},{"type":"Polygon","id":30051,"arcs":[[86,87,88,-46,89]]},{"type":"Polygon","id":38023,"arcs":[[90,91,92,93]]},{"type":"Polygon","id":38013,"arcs":[[94,95,96,97,-91,98]]},{"type":"Polygon","id":30101,"arcs":[[99,-88,100,-42]]},{"type":"Polygon","id":38075,"arcs":[[101,102,-95,103,-40]]},{"type":"Polygon","id":27135,"arcs":[[104,105,-59,106,107]]},{"type":"Polygon","id":30091,"arcs":[[-93,108,109,-52,110]]},{"type":"Polygon","id":16017,"arcs":[[-36,111,112,113,114,-82,-22]]},{"type":"Polygon","id":38101,"arcs":[[-103,115,116,117,-96]]},{"type":"MultiPolygon","id":53055,"arcs":[[[118]],[[119]],[[120]]]},{"type":"Polygon","id":27071,"arcs":[[121,122,123,124,125]]},{"type":"Polygon","id":53057,"arcs":[[126,-2,-75,127,128,129]]},{"type":"Polygon","id":38105,"arcs":[[-98,130,131,132,-109,-92]]},{"type":"Polygon","id":38049,"arcs":[[133,134,135,-116,-102,-39]]},{"type":"Polygon","id":27137,"arcs":[[136,137,138,139,140,141,142,143,144,145,146,147,148,149,150,-122,151]]},{"type":"Polygon","id":30085,"arcs":[[-110,-133,152,153,-6,-53]]},{"type":"Polygon","id":53007,"arcs":[[-74,154,155,156,157,-128]]},{"type":"Polygon","id":38061,"arcs":[[158,159,160,-131,-97,-118]]},{"type":"Polygon","id":27089,"arcs":[[161,162,163,164,165,-60,-106]]},{"type":"Polygon","id":38069,"arcs":[[-64,166,167,168,-134,-38,-31]]},{"type":"Polygon","id":38071,"arcs":[[169,170,171,-62,-68]]},{"type":"Polygon","id":38099,"arcs":[[-56,-166,172,173,-170,-67]]},{"type":"Polygon","id":27007,"arcs":[[-124,174,175,176,177,178,-162,-105,179]]},{"type":"Polygon","id":30073,"arcs":[[-101,-87,180,181,-12,-43]]},{"type":"MultiPolygon","id":53029,"arcs":[[[182,183]],[[184]]]},{"type":"Polygon","id":53009,"arcs":[[185,186,187]]},{"type":"Polygon","id":38005,"arcs":[[-63,-172,188,189,190,-167]]},{"type":"Polygon","id":30015,"arcs":[[-50,191,192,193,194,-181,-90,-45]]},{"type":"Polygon","id":53061,"arcs":[[-158,195,196,-183,197,-129]]},{"type":"Polygon","id":30089,"arcs":[[-18,198,199,200,201,-112,-35]]},{"type":"Polygon","id":27075,"arcs":[[202,203,-137,204]]},{"type":"Polygon","id":38063,"arcs":[[205,206,207,208,-189,-171,-174]]},{"type":"Polygon","id":38035,"arcs":[[-165,209,210,211,-206,-173]]},{"type":"Polygon","id":27119,"arcs":[[212,213,214,215,216,217,218,-210,-164]]},{"type":"Polygon","id":27113,"arcs":[[-179,219,-215,220,-213,-163]]},{"type":"Polygon","id":30083,"arcs":[[221,222,223,224,-153]]},{"type":"Polygon","id":53017,"arcs":[[225,226,-155,-73]]},{"type":"Polygon","id":38053,"arcs":[[-161,227,228,229,230,-222,-132]]},{"type":"Polygon","id":53031,"arcs":[[231,232,233,-186,234]]},{"type":"Polygon","id":30099,"arcs":[[-195,235,236,-13,-182]]},{"type":"Polygon","id":30055,"arcs":[[-225,237,238,239,-7,-154]]},{"type":"Polygon","id":16079,"arcs":[[-202,240,241,242,243,244,-113]]},{"type":"Polygon","id":30047,"arcs":[[245,-199,-17]]},{"type":"Polygon","id":53063,"arcs":[[-83,-115,246,247,248,249,-78]]},{"type":"Polygon","id":27029,"arcs":[[250,251,252,-216,-220,-178]]},{"type":"Polygon","id":16055,"arcs":[[-245,253,-247,-114]]},{"type":"Polygon","id":30033,"arcs":[[-240,254,255,256,257,-25,-8]]},{"type":"Polygon","id":27125,"arcs":[[-214,-221]]},{"type":"Polygon","id":53025,"arcs":[[-72,258,259,260,261,262,263,-226]]},{"type":"Polygon","id":53043,"arcs":[[-85,-79,-250,264,265,-259,-71]]},{"type":"Polygon","id":30049,"arcs":[[266,267,268,269,270,-14,-237]]},{"type":"MultiPolygon","id":53035,"arcs":[[[271]],[[272,273,274,275,276]]]},{"type":"Polygon","id":27061,"arcs":[[-151,277,278,-175,-123]]},{"type":"Polygon","id":38055,"arcs":[[279,280,281,282,283,-159,-117,-136]]},{"type":"Polygon","id":38027,"arcs":[[-209,284,285,286,-190]]},{"type":"Polygon","id":38103,"arcs":[[-191,-287,287,288,289,290,-168]]},{"type":"Polygon","id":38083,"arcs":[[-169,-291,291,292,-280,-135]]},{"type":"Polygon","id":38025,"arcs":[[-284,293,294,295,-228,-160]]},{"type":"Polygon","id":30027,"arcs":[[-27,296,297,298,299,300,-192,-49]]},{"type":"Polygon","id":30021,"arcs":[[-224,301,302,-238]]},{"type":"MultiPolygon","id":53033,"arcs":[[[303]],[[-157,304,305,306,307,-196]]]},{"type":"Polygon","id":30013,"arcs":[[308,309,-267,-236,-194]]},{"type":"Polygon","id":38091,"arcs":[[-212,310,311,312,313,-207]]},{"type":"Polygon","id":38039,"arcs":[[-314,314,315,316,-285,-208]]},{"type":"Polygon","id":38097,"arcs":[[317,318,-311,-211,-219]]},{"type":"MultiPolygon","id":53045,"arcs":[[[319,-276,320,321,322,323,-232]]]},{"type":"Polygon","id":30063,"arcs":[[-16,324,325,326,327,328,329,-200,-246]]},{"type":"Polygon","id":30077,"arcs":[[-271,330,331,332,-325,-15]]},{"type":"Polygon","id":30069,"arcs":[[-258,333,334,-297,-26]]},{"type":"Polygon","id":53037,"arcs":[[-227,-264,335,-305,-156]]},{"type":"Polygon","id":38031,"arcs":[[-317,336,-288,-286]]},{"type":"Polygon","id":38057,"arcs":[[337,338,339,-294,-283]]},{"type":"Polygon","id":53027,"arcs":[[-324,340,341,342,343,-233]]},{"type":"Polygon","id":27087,"arcs":[[344,345,-217,-253]]},{"type":"Polygon","id":27107,"arcs":[[-218,-346,346,347,348,-318]]},{"type":"Polygon","id":30061,"arcs":[[-330,349,-241,-201]]},{"type":"Polygon","id":27021,"arcs":[[350,351,352,353,354,355,-176,-279]]},{"type":"Polygon","id":23003,"arcs":[[356,357,358,359,360]]},{"type":"Polygon","id":30045,"arcs":[[-301,361,362,-309,-193]]},{"type":"Polygon","id":16009,"arcs":[[-244,363,364,-248,-254]]},{"type":"Polygon","id":27057,"arcs":[[-356,365,366,-251,-177]]},{"type":"MultiPolygon","id":53053,"arcs":[[[-307,-306,367,368,369,370]],[[-273,371]],[[-321,-275,372]]]},{"type":"Polygon","id":30109,"arcs":[[-231,373,374,375,-302,-223]]},{"type":"Polygon","id":38007,"arcs":[[-296,376,377,378,-229]]},{"type":"Polygon","id":38033,"arcs":[[-379,379,380,-374,-230]]},{"type":"Polygon","id":38043,"arcs":[[381,382,383,384,-292,-290]]},{"type":"Polygon","id":38093,"arcs":[[-316,385,386,387,-382,-289,-337]]},{"type":"Polygon","id":38015,"arcs":[[-385,388,389,390,-281,-293]]},{"type":"Polygon","id":38065,"arcs":[[-391,391,-338,-282]]},{"type":"Polygon","id":53001,"arcs":[[392,393,-260,-266]]},{"type":"Polygon","id":53075,"arcs":[[-249,-365,394,395,396,397,398,399,-393,-265]]},{"type":"Polygon","id":38003,"arcs":[[-313,400,401,402,-386,-315]]},{"type":"Polygon","id":38017,"arcs":[[-319,-349,403,404,405,-401,-312]]},{"type":"Polygon","id":53067,"arcs":[[-370,406,-341,-323,407]]},{"type":"Polygon","id":30079,"arcs":[[-376,408,409,-255,-239,-303]]},{"type":"Polygon","id":27005,"arcs":[[-367,410,411,412,-347,-345,-252]]},{"type":"Polygon","id":27027,"arcs":[[-413,413,414,415,-404,-348]]},{"type":"Polygon","id":16057,"arcs":[[-243,416,417,-395,-364]]},{"type":"Polygon","id":53077,"arcs":[[-263,418,419,420,421,-368,-336]]},{"type":"Polygon","id":30059,"arcs":[[-363,422,423,424,425,426,-268,-310]]},{"type":"Polygon","id":27001,"arcs":[[-150,427,428,429,430,431,-351,-278]]},{"type":"Polygon","id":26131,"arcs":[[432,433,434,435]]},{"type":"Polygon","id":38089,"arcs":[[-340,436,437,438,439,-377,-295]]},{"type":"Polygon","id":38059,"arcs":[[-390,440,441,442,-437,-339,-392]]},{"type":"Polygon","id":26013,"arcs":[[443,444,445,446]]},{"type":"Polygon","id":16035,"arcs":[[-350,-329,447,448,449,-417,-242]]},{"type":"Polygon","id":30017,"arcs":[[450,451,452,453,-256,-410]]},{"type":"Polygon","id":30087,"arcs":[[-454,454,455,456,457,458,-334,-257]]},{"type":"Polygon","id":30039,"arcs":[[459,460,-326,-333]]},{"type":"Polygon","id":27159,"arcs":[[-355,461,462,-411,-366]]},{"type":"Polygon","id":27035,"arcs":[[-432,463,464,-352]]},{"type":"Polygon","id":53049,"arcs":[[465,466,467,-343]]},{"type":"Polygon","id":53041,"arcs":[[-407,-369,-422,468,469,470,-466,-342]]},{"type":"Polygon","id":30007,"arcs":[[-427,471,472,-269]]},{"type":"Polygon","id":27017,"arcs":[[473,474,-428,-149]]},{"type":"Polygon","id":26053,"arcs":[[475,476,477,478,479,480,481,482,483,484,-434]]},{"type":"Polygon","id":30065,"arcs":[[-459,485,486,-298,-335]]},{"type":"Polygon","id":26095,"arcs":[[487,488,489,490,491]]},{"type":"Polygon","id":30037,"arcs":[[-487,492,493,494,495,-299]]},{"type":"Polygon","id":30107,"arcs":[[-300,-496,496,-423,-362]]},{"type":"Polygon","id":53021,"arcs":[[497,498,499,-261,-394,-400]]},{"type":"Polygon","id":53005,"arcs":[[500,501,502,503,-419,-262,-500]]},{"type":"Polygon","id":27111,"arcs":[[-463,504,505,506,507,-414,-412]]},{"type":"Polygon","id":38037,"arcs":[[508,509,510,-438,-443]]},{"type":"Polygon","id":53023,"arcs":[[511,512,513,-398]]},{"type":"Polygon","id":30025,"arcs":[[-381,514,515,516,517,-451,-409,-375]]},{"type":"Polygon","id":16049,"arcs":[[518,519,520,521,522,523,524,-448,-328]]},{"type":"Polygon","id":30081,"arcs":[[-461,525,526,527,-519,-327]]},{"type":"Polygon","id":38029,"arcs":[[-384,528,529,530,531,-441,-389]]},{"type":"Polygon","id":38047,"arcs":[[-388,532,533,-529,-383]]},{"type":"Polygon","id":16069,"arcs":[[-450,534,-524,535,536,-396,-418]]},{"type":"Polygon","id":38087,"arcs":[[537,538,539,-515,-380,-378,-440]]},{"type":"Polygon","id":38045,"arcs":[[540,541,542,-533,-387,-403]]},{"type":"Polygon","id":38041,"arcs":[[-511,543,-538,-439]]},{"type":"Polygon","id":27167,"arcs":[[-508,544,545,546,-415]]},{"type":"Polygon","id":38073,"arcs":[[-406,547,548,549,-541,-402]]},{"type":"Polygon","id":38077,"arcs":[[-547,550,551,552,-548,-405,-416]]},{"type":"Polygon","id":53013,"arcs":[[553,554,555,-498,-399,-514]]},{"type":"Polygon","id":53071,"arcs":[[-556,556,-501,-499]]},{"type":"Polygon","id":55051,"arcs":[[557,-484,-483,-482,-481,-480,-479,558,559,560,561]]},{"type":"Polygon","id":23025,"arcs":[[562,563,564,565,566,567,-360]]},{"type":"Polygon","id":23021,"arcs":[[568,-563,-359]]},{"type":"Polygon","id":30043,"arcs":[[-473,569,570,571,572,-331,-270]]},{"type":"Polygon","id":26153,"arcs":[[-490,573,574,575,576]]},{"type":"Polygon","id":30111,"arcs":[[577,578,579,580,-493,-486,-458]]},{"type":"Polygon","id":30103,"arcs":[[581,-578,-457]]},{"type":"Polygon","id":16061,"arcs":[[-449,-525,-535]]},{"type":"Polygon","id":53003,"arcs":[[-537,582,-512,-397]]},{"type":"Polygon","id":38085,"arcs":[[-532,583,584,-509,-442]]},{"type":"Polygon","id":26071,"arcs":[[-445,585,586,587,588,589,590,-476,-433,591]]},{"type":"Polygon","id":27115,"arcs":[[592,593,594,595,596,-429,-475]]},{"type":"Polygon","id":23019,"arcs":[[597,598,599,600,-564,-569,-358]]},{"type":"Polygon","id":53059,"arcs":[[-421,601,602,603,604,605,-469]]},{"type":"Polygon","id":53015,"arcs":[[-606,606,607,608,609,-470]]},{"type":"Polygon","id":53069,"arcs":[[-471,-610,610,-467]]},{"type":"Polygon","id":27153,"arcs":[[-354,611,612,613,-505,-462]]},{"type":"Polygon","id":27097,"arcs":[[-465,614,615,616,-612,-353]]},{"type":"Polygon","id":55125,"arcs":[[617,618,-559,-478,-477,-591,619]]},{"type":"Polygon","id":41007,"arcs":[[620,621,622]]},{"type":"Polygon","id":38001,"arcs":[[-510,-585,623,624,625,626,-539,-544]]},{"type":"Polygon","id":38081,"arcs":[[-553,627,628,629,-549]]},{"type":"Polygon","id":38051,"arcs":[[-543,630,631,632,-530,-534]]},{"type":"Polygon","id":38021,"arcs":[[-550,-630,633,634,-631,-542]]},{"type":"Polygon","id":38011,"arcs":[[-627,635,-516,-540]]},{"type":"Polygon","id":30023,"arcs":[[-573,636,637,-526,-460,-332]]},{"type":"Polygon","id":26043,"arcs":[[638,639,640,-587,641]]},{"type":"Polygon","id":27095,"arcs":[[642,643,644,645,-615,-464,-431]]},{"type":"Polygon","id":30097,"arcs":[[-495,646,647,-424,-497]]},{"type":"Polygon","id":30031,"arcs":[[-426,648,649,650,651,652,-570,-472]]},{"type":"Polygon","id":30067,"arcs":[[-648,653,654,655,-649,-425]]},{"type":"Polygon","id":30093,"arcs":[[656,657,-637,-572]]},{"type":"Polygon","id":41009,"arcs":[[658,659,660,-621,661,-608]]},{"type":"Polygon","id":27065,"arcs":[[-597,662,-643,-430]]},{"type":"Polygon","id":55013,"arcs":[[663,664,665,666,-595,-594,667]]},{"type":"Polygon","id":55113,"arcs":[[668,669,670,671,672]]},{"type":"Polygon","id":55129,"arcs":[[-672,673,-664,674]]},{"type":"Polygon","id":30011,"arcs":[[675,676,677,678,-452,-518]]},{"type":"Polygon","id":30095,"arcs":[[-581,679,-654,-647,-494]]},{"type":"Polygon","id":27051,"arcs":[[-507,680,681,682,-545]]},{"type":"Polygon","id":27041,"arcs":[[-614,683,684,-681,-506]]},{"type":"Polygon","id":55041,"arcs":[[685,686,687,688,689,-620,-590]]},{"type":"Polygon","id":53011,"arcs":[[-605,690,-659,-607]]},{"type":"Polygon","id":53039,"arcs":[[-504,691,692,693,694,695,-602,-420]]},{"type":"Polygon","id":30003,"arcs":[[-456,696,697,698,699,-579,-582]]},{"type":"Polygon","id":27155,"arcs":[[-683,700,701,702,-551,-546]]},{"type":"Polygon","id":55037,"arcs":[[-588,-641,703,-686,-589]]},{"type":"Polygon","id":41059,"arcs":[[-555,704,705,706,707,-502,-557]]},{"type":"Polygon","id":41063,"arcs":[[-513,-583,-536,-523,708,709,710,-705,-554]]},{"type":"Polygon","id":26109,"arcs":[[711,712,713,714,-639,715]]},{"type":"Polygon","id":55099,"arcs":[[-619,716,717,718,719,-670,720,-560]]},{"type":"Polygon","id":46105,"arcs":[[721,722,723,724,725,-625]]},{"type":"Polygon","id":46031,"arcs":[[726,727,728,729,-722,-624,-584]]},{"type":"Polygon","id":46063,"arcs":[[-626,-726,730,-676,-517,-636]]},{"type":"Polygon","id":46021,"arcs":[[-633,731,732,-727,-531]]},{"type":"Polygon","id":30001,"arcs":[[-658,733,734,735,736,-527,-638]]},{"type":"Polygon","id":46089,"arcs":[[-635,737,738,739,-732,-632]]},{"type":"Polygon","id":46013,"arcs":[[-629,740,741,742,743,744,-738,-634]]},{"type":"Polygon","id":46109,"arcs":[[-703,745,746,747,748,-552]]},{"type":"Polygon","id":46091,"arcs":[[-749,749,-741,-628]]},{"type":"Polygon","id":41049,"arcs":[[-708,750,751,752,-692,-503]]},{"type":"Polygon","id":55085,"arcs":[[-690,753,754,-717,-618]]},{"type":"Polygon","id":41061,"arcs":[[755,756,-706,-711]]},{"type":"Polygon","id":30057,"arcs":[[-653,757,-734,-657,-571]]},{"type":"Polygon","id":27009,"arcs":[[-646,758,759,-616]]},{"type":"Polygon","id":41021,"arcs":[[760,761,762,-693,-753]]},{"type":"Polygon","id":30075,"arcs":[[-679,763,764,765,-697,-455,-453]]},{"type":"Polygon","id":26031,"arcs":[[766,767,768,769,770,771]]},{"type":"Polygon","id":41057,"arcs":[[772,773,774,775,776,-622]]},{"type":"Polygon","id":41067,"arcs":[[777,778,779,-773,-661]]},{"type":"Polygon","id":27145,"arcs":[[-760,780,781,782,783,784,-684,-613,-617]]},{"type":"Polygon","id":27149,"arcs":[[785,786,787,-701,-682]]},{"type":"Polygon","id":27121,"arcs":[[-785,788,789,-786,-685]]},{"type":"Polygon","id":41055,"arcs":[[790,-694,-763]]},{"type":"Polygon","id":27059,"arcs":[[791,792,793,-644,-663]]},{"type":"Polygon","id":27025,"arcs":[[-667,794,795,796,-792,-596]]},{"type":"Polygon","id":55095,"arcs":[[797,798,799,-795,-666]]},{"type":"Polygon","id":41051,"arcs":[[-691,-604,800,801,-778,-660]]},{"type":"Polygon","id":41027,"arcs":[[802,803,-801,-603,-696]]},{"type":"Polygon","id":41065,"arcs":[[-791,-762,804,805,806,807,-803,-695]]},{"type":"Polygon","id":16059,"arcs":[[-737,808,809,810,811,-520,-528]]},{"type":"Polygon","id":23029,"arcs":[[812,-598,-357,813]]},{"type":"Polygon","id":23007,"arcs":[[814,815,816,817,-567]]},{"type":"Polygon","id":26141,"arcs":[[818,819,-767,820]]},{"type":"Polygon","id":55005,"arcs":[[-674,821,822,823,-798,-665]]},{"type":"Polygon","id":55107,"arcs":[[-720,824,825,-822,-671]]},{"type":"Polygon","id":30009,"arcs":[[-700,826,827,-655,-680,-580]]},{"type":"Polygon","id":46129,"arcs":[[-740,828,829,830,-728,-733]]},{"type":"Polygon","id":46045,"arcs":[[-745,831,832,-829,-739]]},{"type":"Polygon","id":46037,"arcs":[[-750,-748,833,834,835,836,-742]]},{"type":"Polygon","id":27011,"arcs":[[-702,-788,837,838,839,840,-746]]},{"type":"Polygon","id":27141,"arcs":[[-645,-794,841,842,843,-781,-759]]},{"type":"Polygon","id":55069,"arcs":[[844,845,846,-718,-755]]},{"type":"Polygon","id":46041,"arcs":[[-831,847,848,849,850,-729]]},{"type":"Polygon","id":46137,"arcs":[[-851,851,852,-723,-730]]},{"type":"Polygon","id":55067,"arcs":[[-689,853,854,855,856,-845,-754]]},{"type":"Polygon","id":41005,"arcs":[[-804,-808,857,858,-779,-802]]},{"type":"Polygon","id":41071,"arcs":[[-859,859,860,861,-774,-780]]},{"type":"Polygon","id":27171,"arcs":[[-844,862,863,864,865,-782]]},{"type":"Polygon","id":27003,"arcs":[[-797,866,867,868,-842,-793]]},{"type":"Polygon","id":27067,"arcs":[[869,870,871,872,-789,-784]]},{"type":"Polygon","id":27151,"arcs":[[-873,873,874,-838,-787,-790]]},{"type":"Polygon","id":55119,"arcs":[[-847,875,876,877,-825,-719]]},{"type":"Polygon","id":55083,"arcs":[[878,879,880,881,882,883,884,-854,-688]]},{"type":"Polygon","id":23017,"arcs":[[-817,885,886,887,888,-889,889,890,891]]},{"type":"Polygon","id":46051,"arcs":[[-841,892,893,894,-834,-747]]},{"type":"Polygon","id":27093,"arcs":[[-866,895,896,-870,-783]]},{"type":"Polygon","id":33007,"arcs":[[897,898,899,900,-891]]},{"type":"Polygon","id":27163,"arcs":[[-800,901,902,903,904,-867,-796]]},{"type":"Polygon","id":55017,"arcs":[[-878,905,906,907,-823,-826]]},{"type":"Polygon","id":41047,"arcs":[[-860,-858,-807,908,909,910,-861]]},{"type":"Polygon","id":16003,"arcs":[[911,912,913,914,-709,-522]]},{"type":"Polygon","id":27073,"arcs":[[-839,-875,915,916,917,-893,-840]]},{"type":"MultiPolygon","id":23009,"arcs":[[[918]],[[919]],[[920,-599,-813]]]},{"type":"Polygon","id":46107,"arcs":[[-833,921,922,923,-848,-830]]},{"type":"Polygon","id":46049,"arcs":[[-744,924,925,926,-922,-832]]},{"type":"Polygon","id":27053,"arcs":[[-843,-869,927,928,929,930,-863]]},{"type":"Polygon","id":46115,"arcs":[[-837,931,932,933,-925,-743]]},{"type":"Polygon","id":16085,"arcs":[[-812,934,935,936,-912,-521]]},{"type":"Polygon","id":46019,"arcs":[[-725,937,938,939,-677,-731]]},{"type":"Polygon","id":55109,"arcs":[[940,941,-902,-799]]},{"type":"Polygon","id":55033,"arcs":[[-908,942,943,944,-941,-824]]},{"type":"Polygon","id":26009,"arcs":[[945,946,947,948,949]]},{"type":"Polygon","id":26137,"arcs":[[950,951,-946,952,-769]]},{"type":"Polygon","id":26119,"arcs":[[953,954,-951,-768,-820]]},{"type":"Polygon","id":46025,"arcs":[[955,956,957,958,-932,-836]]},{"type":"Polygon","id":46029,"arcs":[[-895,959,960,-956,-835]]},{"type":"Polygon","id":27023,"arcs":[[-872,961,962,-916,-874]]},{"type":"Polygon","id":27123,"arcs":[[-905,963,-928,-868]]},{"type":"Polygon","id":55073,"arcs":[[-846,-857,964,965,966,967,-876]]},{"type":"Polygon","id":55078,"arcs":[[-885,968,-855]]},{"type":"Polygon","id":41001,"arcs":[[-915,969,970,971,-756,-710]]},{"type":"Polygon","id":41053,"arcs":[[-911,972,973,974,-775,-862]]},{"type":"Polygon","id":41069,"arcs":[[-752,975,976,977,-805,-761]]},{"type":"Polygon","id":41041,"arcs":[[-975,978,979,980,-776]]},{"type":"Polygon","id":46093,"arcs":[[-853,981,982,983,-938,-724]]},{"type":"Polygon","id":55019,"arcs":[[-968,984,985,986,-906,-877]]},{"type":"Polygon","id":55115,"arcs":[[-969,-884,987,988,989,-965,-856]]},{"type":"Polygon","id":50011,"arcs":[[990,991,992,993,994]]},{"type":"Polygon","id":50009,"arcs":[[995,996,997,998,-900]]},{"type":"Polygon","id":50013,"arcs":[[999,1000,1001,-994]]},{"type":"Polygon","id":36019,"arcs":[[1002,1003,1004,1005,-1001]]},{"type":"Polygon","id":50019,"arcs":[[-998,1006,1007,-991,1008]]},{"type":"Polygon","id":56029,"arcs":[[1009,1010,1011,1012,1013,-650,-656,-828]]},{"type":"Polygon","id":36089,"arcs":[[1014,1015,1016,1017,1018,1019]]},{"type":"Polygon","id":56003,"arcs":[[1020,1021,1022,-1010,-827,-699]]},{"type":"Polygon","id":56005,"arcs":[[1023,1024,1025,1026,1027,-765]]},{"type":"Polygon","id":56033,"arcs":[[-766,-1028,1028,-1021,-698]]},{"type":"Polygon","id":36033,"arcs":[[-1005,1029,1030,-1015,1031]]},{"type":"Polygon","id":56011,"arcs":[[-678,-940,1032,1033,-1024,-764]]},{"type":"Polygon","id":41023,"arcs":[[-757,-972,1034,1035,1036,-976,-751,-707]]},{"type":"Polygon","id":27085,"arcs":[[-865,1037,1038,1039,-896]]},{"type":"Polygon","id":27019,"arcs":[[-931,1040,1041,-1038,-864]]},{"type":"Polygon","id":46039,"arcs":[[-918,1042,1043,1044,1045,-960,-894]]},{"type":"Polygon","id":27173,"arcs":[[1046,1047,1048,1049,-1043,-917,-963]]},{"type":"Polygon","id":27037,"arcs":[[-904,1050,1051,1052,1053,-929,-964]]},{"type":"Polygon","id":46119,"arcs":[[1054,1055,1056,-849,-924]]},{"type":"Polygon","id":46069,"arcs":[[-927,1057,1058,1059,1060,-1055,-923]]},{"type":"Polygon","id":46059,"arcs":[[-934,1061,1062,1063,-1058,-926]]},{"type":"Polygon","id":27129,"arcs":[[-897,-1040,1064,1065,1066,1067,-1047,-962,-871]]},{"type":"Polygon","id":16037,"arcs":[[1068,1069,1070,1071,1072,-935,-811]]},{"type":"Polygon","id":55093,"arcs":[[-945,1073,1074,-1051,-903,-942]]},{"type":"Polygon","id":26001,"arcs":[[1075,1076,1077,1078]]},{"type":"Polygon","id":26079,"arcs":[[1079,1080,1081,-947]]},{"type":"Polygon","id":26039,"arcs":[[1082,1083,-1080,-952]]},{"type":"Polygon","id":55035,"arcs":[[-987,1084,1085,1086,1087,-943,-907]]},{"type":"Polygon","id":26135,"arcs":[[-1078,1088,-1083,-955]]},{"type":"Polygon","id":16087,"arcs":[[1089,1090,1091,-970,-914]]},{"type":"Polygon","id":41031,"arcs":[[-978,1092,1093,1094,-909,-806]]},{"type":"Polygon","id":27139,"arcs":[[-1054,1095,1096,1097,-1041,-930]]},{"type":"Polygon","id":46057,"arcs":[[-1046,1098,1099,-957,-961]]},{"type":"Polygon","id":50015,"arcs":[[1100,1101,1102,-992,-1008]]},{"type":"Polygon","id":41043,"arcs":[[-1095,1103,1104,1105,-973,-910]]},{"type":"Polygon","id":46117,"arcs":[[-1057,1106,1107,1108,1109,-850]]},{"type":"Polygon","id":26019,"arcs":[[1110,1111,1112,1113]]},{"type":"Polygon","id":50005,"arcs":[[1114,1115,1116,-1101,-1007,-997]]},{"type":"MultiPolygon","id":23027,"arcs":[[[-601,1117,1118,1119,1120,-565]]]},{"type":"Polygon","id":16043,"arcs":[[1121,1122,1123,1124,1125,-735,-758,-652]]},{"type":"Polygon","id":46055,"arcs":[[1126,1127,1128,-982,-852,-1110]]},{"type":"Polygon","id":50007,"arcs":[[-1103,1129,1130,1131,-1003,-1000,-993]]},{"type":"Polygon","id":41003,"arcs":[[-1106,1132,-979,-974]]},{"type":"Polygon","id":23011,"arcs":[[1133,1134,1135,1136,-815,-566,-1121]]},{"type":"Polygon","id":27143,"arcs":[[-1042,-1098,1137,1138,-1065,-1039]]},{"type":"Polygon","id":27049,"arcs":[[1139,1140,1141,1142,1143,-1052,-1075]]},{"type":"Polygon","id":27127,"arcs":[[1144,1145,1146,1147,-1048,-1068]]},{"type":"Polygon","id":55097,"arcs":[[1148,1149,1150,1151,-966]]},{"type":"Polygon","id":55141,"arcs":[[-1152,1152,1153,1154,-985,-967]]},{"type":"Polygon","id":55009,"arcs":[[-883,1155,1156,1157,1158,1159,-988]]},{"type":"Polygon","id":55091,"arcs":[[-1088,1160,1161,-1140,-1074,-944]]},{"type":"Polygon","id":55135,"arcs":[[1162,1163,1164,-1149,-990]]},{"type":"Polygon","id":55061,"arcs":[[1165,1166,-1157,1167,1168]]},{"type":"Polygon","id":56039,"arcs":[[1169,1170,1171,1172,1173,-1122,-651,-1014]]},{"type":"Polygon","id":46005,"arcs":[[-959,1174,1175,1176,-1062,-933]]},{"type":"Polygon","id":27081,"arcs":[[1177,1178,1179,-1044,-1050]]},{"type":"Polygon","id":27083,"arcs":[[-1148,1180,1181,-1178,-1049]]},{"type":"Polygon","id":46081,"arcs":[[-984,1182,1183,-1033,-939]]},{"type":"Polygon","id":55011,"arcs":[[-1087,1184,1185,1186,-1161]]},{"type":"Polygon","id":55121,"arcs":[[1187,1188,1189,1190,-1185,-1086]]},{"type":"Polygon","id":55053,"arcs":[[-986,-1155,1191,1192,1193,-1188,-1085]]},{"type":"Polygon","id":55087,"arcs":[[-989,-1160,1194,1195,-1163]]},{"type":"Polygon","id":16033,"arcs":[[-1126,1196,1197,-809,-736]]},{"type":"Polygon","id":56019,"arcs":[[-1027,1198,1199,1200,-1022,-1029]]},{"type":"Polygon","id":41013,"arcs":[[-977,-1037,1201,1202,-1093]]},{"type":"Polygon","id":46065,"arcs":[[-1061,1203,-1107,-1056]]},{"type":"Polygon","id":36031,"arcs":[[1204,1205,1206,1207,-1030,-1004,-1132]]},{"type":"Polygon","id":27079,"arcs":[[1208,1209,1210,1211,-1138,-1097]]},{"type":"Polygon","id":27131,"arcs":[[-1053,-1144,1212,1213,1214,-1209,-1096]]},{"type":"Polygon","id":46077,"arcs":[[-1100,1215,1216,1217,1218,-1175,-958]]},{"type":"Polygon","id":46011,"arcs":[[-1180,1219,1220,1221,-1216,-1099,-1045]]},{"type":"Polygon","id":26101,"arcs":[[1222,1223,1224,1225,-1112]]},{"type":"Polygon","id":26165,"arcs":[[1226,1227,1228,-1223,1229]]},{"type":"Polygon","id":26143,"arcs":[[1230,1231,1232,1233,-1084]]},{"type":"Polygon","id":26113,"arcs":[[-1234,1234,1235,-1227,-1081]]},{"type":"Polygon","id":26069,"arcs":[[1236,1237,1238,-1077]]},{"type":"Polygon","id":26129,"arcs":[[-1239,1239,1240,-1231,-1089]]},{"type":"Polygon","id":16045,"arcs":[[-937,1241,1242,1243,1244,-1090,-913]]},{"type":"Polygon","id":46103,"arcs":[[-1129,1245,1246,1247,1248,-1183,-983]]},{"type":"Polygon","id":50023,"arcs":[[1249,1250,-1130,-1102,-1117]]},{"type":"Polygon","id":27015,"arcs":[[1251,1252,1253,1254,-1145,-1067]]},{"type":"Polygon","id":23001,"arcs":[[1255,1256,-886,-816,-1137]]},{"type":"Polygon","id":27103,"arcs":[[1257,-1252,-1066,-1139,-1212]]},{"type":"Polygon","id":27157,"arcs":[[-1162,-1187,1258,1259,-1141]]},{"type":"Polygon","id":41045,"arcs":[[-1092,1260,1261,1262,1263,1264,-1035,-971]]},{"type":"Polygon","id":33009,"arcs":[[1265,1266,1267,1268,1269,1270,-1115,-996,-899]]},{"type":"Polygon","id":41017,"arcs":[[-1203,1271,1272,1273,1274,-1104,-1094]]},{"type":"Polygon","id":36045,"arcs":[[1275,1276,-1019,1277,1278,1279,1280,1281]]},{"type":"MultiPolygon","id":23013,"arcs":[[[1282,1283,-1119]]]},{"type":"Polygon","id":16015,"arcs":[[-1073,1284,1285,-1242,-936]]},{"type":"Polygon","id":23015,"arcs":[[-1120,-1284,1286,1287,1288,-1134]]},{"type":"Polygon","id":55071,"arcs":[[-1167,1289,1290,1291,-1158]]},{"type":"Polygon","id":50001,"arcs":[[-1251,1292,1293,1294,1295,-1205,-1131]]},{"type":"Polygon","id":41039,"arcs":[[-1275,1296,1297,1298,-980,-1133,-1105]]},{"type":"Polygon","id":33003,"arcs":[[-890,888,1299,1300,1301,-1266,-898]]},{"type":"Polygon","id":27013,"arcs":[[-1211,1302,1303,1304,1305,-1253,-1258]]},{"type":"Polygon","id":55057,"arcs":[[1306,1307,1308,1309,-1192,-1154]]},{"type":"Polygon","id":55001,"arcs":[[-1151,1310,1311,1312,-1307,-1153]]},{"type":"Polygon","id":55137,"arcs":[[-1165,1313,1314,1315,-1311,-1150]]},{"type":"Polygon","id":55139,"arcs":[[1316,1317,1318,-1314,-1164,-1196]]},{"type":"Polygon","id":55015,"arcs":[[-1159,-1292,1319,1320,-1317,-1195]]},{"type":"Polygon","id":16023,"arcs":[[-1198,1321,1322,1323,-1070,-1069,-810]]},{"type":"Polygon","id":50017,"arcs":[[-1271,1324,-1293,-1250,-1116]]},{"type":"Polygon","id":36049,"arcs":[[1325,1326,-1278,-1018,1327]]},{"type":"Polygon","id":46085,"arcs":[[1328,1329,1330,1331,1332,-1108,-1204,-1060,1333]]},{"type":"Polygon","id":27117,"arcs":[[-1182,1334,1335,1336,-1220,-1179]]},{"type":"Polygon","id":27101,"arcs":[[-1147,1337,1338,1339,-1335,-1181]]},{"type":"Polygon","id":46073,"arcs":[[-1177,1340,1341,1342,1343,-1063]]},{"type":"Polygon","id":27147,"arcs":[[1344,1345,1346,1347,-1214]]},{"type":"Polygon","id":27039,"arcs":[[1348,1349,-1345,-1213,-1143]]},{"type":"Polygon","id":46101,"arcs":[[-1337,1350,1351,-1221]]},{"type":"Polygon","id":27161,"arcs":[[-1348,1352,1353,-1303,-1210,-1215]]},{"type":"Polygon","id":46017,"arcs":[[-1344,1354,-1334,-1059,-1064]]},{"type":"Polygon","id":46111,"arcs":[[-1219,1355,1356,1357,1358,-1341,-1176]]},{"type":"Polygon","id":27109,"arcs":[[-1260,1359,1360,1361,-1349,-1142]]},{"type":"Polygon","id":27033,"arcs":[[-1255,1362,1363,1364,-1338,-1146]]},{"type":"Polygon","id":46079,"arcs":[[-1222,-1352,1365,1366,1367,-1217]]},{"type":"Polygon","id":46097,"arcs":[[-1368,1368,1369,-1356,-1218]]},{"type":"Polygon","id":27169,"arcs":[[-1186,-1191,1370,1371,1372,-1360,-1259]]},{"type":"Polygon","id":56045,"arcs":[[-1184,-1249,1373,1374,1375,-1025,-1034]]},{"type":"Polygon","id":26105,"arcs":[[1376,1377,1378,-1225]]},{"type":"Polygon","id":23005,"arcs":[[-1257,1379,1380,1381,1382,1383,-887]]},{"type":"Polygon","id":46075,"arcs":[[-1333,1384,1385,-1386,1386,-1127,-1109]]},{"type":"Polygon","id":56043,"arcs":[[-1201,1387,1388,1389,-1011,-1023]]},{"type":"MultiPolygon","id":23023,"arcs":[[[-1382,1390]],[[-1288,1391]],[[1392,-1380,-1256,-1136]]]},{"type":"Polygon","id":26085,"arcs":[[-1224,-1229,1393,1394,-1377]]},{"type":"Polygon","id":26133,"arcs":[[-1236,1395,1396,-1394,-1228]]},{"type":"Polygon","id":26035,"arcs":[[-1233,1397,1398,-1396,-1235]]},{"type":"Polygon","id":26051,"arcs":[[1399,1400,1401,-1398,-1232,-1241]]},{"type":"Polygon","id":55081,"arcs":[[-1310,1402,1403,-1193]]},{"type":"Polygon","id":16075,"arcs":[[-1245,1404,-1261,-1091]]},{"type":"Polygon","id":36041,"arcs":[[1405,1406,1407,1408,-1016,-1031,-1208]]},{"type":"Polygon","id":27165,"arcs":[[-1306,1409,1410,-1363,-1254]]},{"type":"Polygon","id":16039,"arcs":[[-1072,1411,1412,1413,1414,1415,1416,-1285]]},{"type":"Polygon","id":36043,"arcs":[[-1409,1417,1418,1419,1420,-1328,-1017]]},{"type":"Polygon","id":55063,"arcs":[[-1194,-1404,1421,1422,-1371,-1190,-1189]]},{"type":"Polygon","id":56017,"arcs":[[-1390,1423,-1012]]},{"type":"Polygon","id":16051,"arcs":[[-1125,1424,1425,1426,-1322,-1197]]},{"type":"Polygon","id":41025,"arcs":[[-1265,1427,1428,1429,-1272,-1202,-1036]]},{"type":"Polygon","id":56013,"arcs":[[-1424,-1389,1430,1431,1432,1433,-1170,-1013]]},{"type":"Polygon","id":26017,"arcs":[[1434,1435,1436,1437,-1401,1438]]},{"type":"Polygon","id":46071,"arcs":[[-1387,1385,1439,1440,1441,-1246,-1128]]},{"type":"Polygon","id":16013,"arcs":[[-1324,1442,1443,1444,1445,1446,1447,-1412,-1071]]},{"type":"Polygon","id":16081,"arcs":[[-1174,1448,1449,-1123]]},{"type":"Polygon","id":55047,"arcs":[[-1319,1450,1451,1452,1453,-1315]]},{"type":"Polygon","id":55077,"arcs":[[-1454,1454,-1312,-1316]]},{"type":"Polygon","id":50027,"arcs":[[-1270,1455,1456,1457,1458,-1294,-1325]]},{"type":"Polygon","id":41019,"arcs":[[1459,1460,1461,1462,1463,1464,-1298]]},{"type":"Polygon","id":55039,"arcs":[[1465,1466,1467,-1451,-1318,-1321]]},{"type":"Polygon","id":46003,"arcs":[[-1359,1468,1469,1470,1471,-1342]]},{"type":"Polygon","id":46015,"arcs":[[-1472,1472,-1329,-1355,-1343]]},{"type":"Polygon","id":16065,"arcs":[[-1450,1473,-1425,-1124]]},{"type":"Polygon","id":55117,"arcs":[[1474,1475,1476,-1466,-1320,-1291]]},{"type":"Polygon","id":16027,"arcs":[[-1244,1477,1478,-1262,-1405]]},{"type":"Polygon","id":46095,"arcs":[[-1332,1479,1480,-1440,-1386,-1385]]},{"type":"Polygon","id":16025,"arcs":[[1481,1482,-1413,-1448]]},{"type":"Polygon","id":50021,"arcs":[[1483,1484,-1295,-1459]]},{"type":"Polygon","id":46033,"arcs":[[1485,1486,1487,-1374,-1248]]},{"type":"Polygon","id":27133,"arcs":[[-1340,1488,1489,1490,-1336]]},{"type":"Polygon","id":27105,"arcs":[[-1365,1491,1492,1493,-1489,-1339]]},{"type":"Polygon","id":27047,"arcs":[[1494,1495,1496,1497,-1353,-1347]]},{"type":"Polygon","id":27099,"arcs":[[-1362,1498,1499,1500,1501,-1495,-1346,-1350]]},{"type":"Polygon","id":27055,"arcs":[[-1423,1502,1503,1504,1505,-1372]]},{"type":"Polygon","id":46035,"arcs":[[1506,1507,1508,-1469,-1358]]},{"type":"Polygon","id":46061,"arcs":[[-1370,1509,1510,-1507,-1357]]},{"type":"Polygon","id":27045,"arcs":[[-1373,-1506,1511,1512,-1499,-1361]]},{"type":"Polygon","id":27063,"arcs":[[-1411,1513,1514,1515,1516,-1492,-1364]]},{"type":"Polygon","id":27043,"arcs":[[-1354,-1498,1517,1518,1519,-1304]]},{"type":"Polygon","id":46099,"arcs":[[1520,1521,1522,1523,-1366,-1351,-1491]]},{"type":"Polygon","id":27091,"arcs":[[-1305,-1520,1524,1525,-1514,-1410]]},{"type":"Polygon","id":46087,"arcs":[[-1367,-1524,1526,1527,-1510,-1369]]},{"type":"Polygon","id":26111,"arcs":[[-1438,1528,1529,1530,-1402]]},{"type":"Polygon","id":26127,"arcs":[[1531,1532,1533,-1378]]},{"type":"Polygon","id":26073,"arcs":[[-1531,1534,1535,1536,-1399]]},{"type":"Polygon","id":23031,"arcs":[[1537,1538,-1300,-889,-888,-1384]]},{"type":"Polygon","id":26107,"arcs":[[-1537,1539,1540,-1397]]},{"type":"Polygon","id":26123,"arcs":[[-1541,1541,1542,1543,-1532,-1395]]},{"type":"Polygon","id":36115,"arcs":[[-1485,1544,1545,1546,1547,-1206,-1296]]},{"type":"Polygon","id":16001,"arcs":[[-1286,-1417,1548,-1478,-1243]]},{"type":"Polygon","id":36113,"arcs":[[1549,-1406,-1207,-1548]]},{"type":"Polygon","id":46123,"arcs":[[1550,1551,1552,-1480,-1331]]},{"type":"Polygon","id":33001,"arcs":[[1553,1554,-1267,-1302]]},{"type":"Polygon","id":26157,"arcs":[[1555,1556,1557,1558,1559,-1436,1560,1561]]},{"type":"Polygon","id":55123,"arcs":[[1562,1563,1564,1565,-1503,-1422,-1403,-1309]]},{"type":"Polygon","id":36075,"arcs":[[-1327,1566,1567,1568,1569,1570,-1279]]},{"type":"Polygon","id":46113,"arcs":[[1571,1572,1573,1574,-1486,-1247,-1442]]},{"type":"Polygon","id":26151,"arcs":[[1575,1576,-1557,1577,1578]]},{"type":"Polygon","id":16073,"arcs":[[-1549,-1416,1579,1580,1581,-1263,-1479]]},{"type":"Polygon","id":55021,"arcs":[[1582,1583,1584,-1313,-1455,-1453]]},{"type":"Polygon","id":55111,"arcs":[[-1585,1585,1586,1587,-1563,-1308]]},{"type":"Polygon","id":55027,"arcs":[[1588,1589,1590,1591,-1583,-1452,-1468]]},{"type":"Polygon","id":16019,"arcs":[[-1474,-1449,-1173,1592,1593,1594,-1426]]},{"type":"Polygon","id":16011,"arcs":[[1595,1596,1597,-1443,-1323,-1427,-1595]]},{"type":"Polygon","id":41035,"arcs":[[1598,1599,1600,1601,-1460,-1297,-1274]]},{"type":"Polygon","id":41037,"arcs":[[1602,1603,-1599,-1273,-1430]]},{"type":"Polygon","id":36065,"arcs":[[1604,1605,-1567,-1326,-1421]]},{"type":"Polygon","id":33013,"arcs":[[-1555,1606,1607,1608,1609,-1268]]},{"type":"Polygon","id":41011,"arcs":[[1610,1611,-1464]]},{"type":"Polygon","id":33019,"arcs":[[-1610,1612,1613,1614,-1456,-1269]]},{"type":"Polygon","id":33017,"arcs":[[-1539,1615,1616,-1607,-1554,-1301]]},{"type":"Polygon","id":26145,"arcs":[[-1560,1617,1618,1619,-1529,-1437]]},{"type":"Polygon","id":55103,"arcs":[[1620,1621,1622,-1564,-1588]]},{"type":"Polygon","id":55089,"arcs":[[1623,1624,1625,-1476]]},{"type":"Polygon","id":55131,"arcs":[[-1477,-1626,1626,-1589,-1467]]},{"type":"Polygon","id":19189,"arcs":[[1627,1628,1629,-1518,-1497]]},{"type":"Polygon","id":19109,"arcs":[[1630,1631,1632,-1525,-1519,-1630,1633]]},{"type":"Polygon","id":19059,"arcs":[[1634,1635,-1516,1636]]},{"type":"Polygon","id":19063,"arcs":[[1637,-1637,-1515,-1526,-1633]]},{"type":"Polygon","id":19195,"arcs":[[1638,-1628,-1496,-1502,1639]]},{"type":"Polygon","id":19143,"arcs":[[1640,1641,-1493,-1517,-1636]]},{"type":"Polygon","id":56027,"arcs":[[-1488,1642,1643,1644,1645,1646,-1375]]},{"type":"Polygon","id":19131,"arcs":[[1647,1648,-1640,-1501,1649]]},{"type":"Polygon","id":19119,"arcs":[[1650,1651,-1521,-1490,-1494,-1642]]},{"type":"Polygon","id":19089,"arcs":[[1652,1653,-1650,-1500,-1513]]},{"type":"Polygon","id":19005,"arcs":[[-1566,1654,1655,1656,-1504]]},{"type":"Polygon","id":19191,"arcs":[[1657,1658,-1653,-1512,-1505,-1657]]},{"type":"Polygon","id":46083,"arcs":[[-1652,1659,1660,1661,1662,-1522]]},{"type":"Polygon","id":56009,"arcs":[[-1647,1663,1664,1665,1666,-1199,-1026,-1376]]},{"type":"Polygon","id":46023,"arcs":[[-1471,1667,1668,1669,1670,1671,1672,-1473]]},{"type":"Polygon","id":46125,"arcs":[[-1523,-1663,1673,1674,1675,-1527]]},{"type":"Polygon","id":46067,"arcs":[[-1528,-1676,1676,1677,-1669,1678,-1508,-1511]]},{"type":"Polygon","id":56025,"arcs":[[-1200,-1667,1679,-1431,-1388]]},{"type":"Polygon","id":46043,"arcs":[[-1509,-1679,-1668,-1470]]},{"type":"Polygon","id":46053,"arcs":[[-1673,1680,1681,-1551,-1330]]},{"type":"Polygon","id":46047,"arcs":[[-1575,1682,1683,-1643,-1487]]},{"type":"Polygon","id":26121,"arcs":[[-1544,1684,1685,1686,-1533]]},{"type":"Polygon","id":26117,"arcs":[[-1536,1687,1688,1689,-1542,-1540]]},{"type":"Polygon","id":56035,"arcs":[[1690,1691,-1171,-1434]]},{"type":"Polygon","id":26057,"arcs":[[-1530,-1620,1692,1693,-1688,-1535]]},{"type":"Polygon","id":55023,"arcs":[[-1623,1694,1695,-1655,-1565]]},{"type":"Polygon","id":36011,"arcs":[[1696,1697,1698,1699,1700,1701,-1570]]},{"type":"Polygon","id":36091,"arcs":[[-1547,1702,1703,1704,1705,1706,-1407,-1550]]},{"type":"Polygon","id":46007,"arcs":[[1707,1708,-1572,-1441]]},{"type":"Polygon","id":46121,"arcs":[[-1553,1709,-1708,-1481]]},{"type":"Polygon","id":36073,"arcs":[[1710,1711,1712,1713]]},{"type":"Polygon","id":36063,"arcs":[[-1713,1714,1715,1716]]},{"type":"Polygon","id":36055,"arcs":[[1717,1718,1719,1720,-1711,1721]]},{"type":"Polygon","id":36117,"arcs":[[1722,1723,-1718,1724,-1701]]},{"type":"Polygon","id":26087,"arcs":[[1725,1726,1727,1728,-1558,-1577]]},{"type":"Polygon","id":56023,"arcs":[[-1692,1729,1730,1731,1732,1733,-1593,-1172]]},{"type":"Polygon","id":50003,"arcs":[[-1458,1734,1735,1736,1737,-1545,-1484]]},{"type":"Polygon","id":55025,"arcs":[[-1592,1738,1739,1740,1741,-1586,-1584]]},{"type":"Polygon","id":26081,"arcs":[[1742,1743,1744,1745,-1685,-1543,-1690]]},{"type":"Polygon","id":36035,"arcs":[[-1707,1746,-1418,-1408]]},{"type":"Polygon","id":33015,"arcs":[[1747,1748,1749,-1608,-1617]]},{"type":"Polygon","id":36067,"arcs":[[1750,1751,-1697,-1569]]},{"type":"Polygon","id":50025,"arcs":[[-1615,1752,1753,-1735,-1457]]},{"type":"Polygon","id":19167,"arcs":[[1754,1755,1756,-1660,-1651]]},{"type":"Polygon","id":19141,"arcs":[[1757,1758,-1755,-1641]]},{"type":"Polygon","id":19033,"arcs":[[-1649,1759,1760,1761,-1639]]},{"type":"Polygon","id":19081,"arcs":[[-1762,1762,-1634,-1629]]},{"type":"Polygon","id":19147,"arcs":[[-1632,1763,1764,-1638]]},{"type":"Polygon","id":19041,"arcs":[[-1765,1765,-1758,-1635]]},{"type":"Polygon","id":26049,"arcs":[[-1729,1766,1767,1768,-1618,-1559]]},{"type":"Polygon","id":19037,"arcs":[[-1659,1769,1770,1771,-1654]]},{"type":"Polygon","id":19067,"arcs":[[-1772,1772,-1760,-1648]]},{"type":"Polygon","id":55049,"arcs":[[-1587,-1742,1773,1774,1775,-1621]]},{"type":"Polygon","id":55043,"arcs":[[-1776,1776,1777,1778,1779,-1695,-1622]]},{"type":"Polygon","id":33011,"arcs":[[-1750,1780,1781,1782,1783,-1613,-1609]]},{"type":"Polygon","id":26139,"arcs":[[-1746,1784,1785,-1686]]},{"type":"Polygon","id":16063,"arcs":[[1786,1787,1788,-1482,-1447]]},{"type":"Polygon","id":16047,"arcs":[[-1789,1789,1790,1791,-1414,-1483]]},{"type":"Polygon","id":55055,"arcs":[[1792,1793,1794,-1739,-1591]]},{"type":"Polygon","id":16067,"arcs":[[1795,1796,-1787,-1446]]},{"type":"Polygon","id":55133,"arcs":[[-1627,1797,1798,1799,-1793,-1590]]},{"type":"Polygon","id":55079,"arcs":[[1800,1801,-1798,-1625]]},{"type":"Polygon","id":36053,"arcs":[[-1606,1802,1803,1804,-1751,-1568]]},{"type":"Polygon","id":33005,"arcs":[[-1784,1805,1806,-1753,-1614]]},{"type":"Polygon","id":46135,"arcs":[[1807,1808,1809,1810,-1677,-1675]]},{"type":"Polygon","id":46009,"arcs":[[-1811,1811,-1670,-1678]]},{"type":"Polygon","id":26155,"arcs":[[-1769,1812,1813,1814,-1693,-1619]]},{"type":"Polygon","id":36037,"arcs":[[1815,1816,1817,-1715,-1712,-1721]]},{"type":"Polygon","id":26067,"arcs":[[1818,1819,1820,-1743,-1689]]},{"type":"Polygon","id":26037,"arcs":[[-1815,1821,1822,-1819,-1694]]},{"type":"Polygon","id":16077,"arcs":[[-1598,1823,1824,1825,-1444]]},{"type":"MultiPolygon","id":36029,"arcs":[[[1826]],[[-1818,1827,1828,1829,1830,1831,-1716]]]},{"type":"Polygon","id":46127,"arcs":[[-1757,1832,1833,1834,1835,1836,-1661]]},{"type":"Polygon","id":46027,"arcs":[[-1837,1837,1838,-1808,-1674,-1662]]},{"type":"Polygon","id":19065,"arcs":[[1839,1840,1841,-1770,-1658]]},{"type":"Polygon","id":19043,"arcs":[[-1696,-1780,1842,1843,-1840,-1656]]},{"type":"Polygon","id":36057,"arcs":[[-1706,1844,1845,1846,-1419,-1747]]},{"type":"Polygon","id":36069,"arcs":[[1847,1848,1849,1850,-1719,-1724]]},{"type":"Polygon","id":16005,"arcs":[[1851,1852,1853,-1824,-1597]]},{"type":"Polygon","id":16029,"arcs":[[-1594,-1734,1854,1855,-1852,-1596]]},{"type":"Polygon","id":36099,"arcs":[[1856,1857,1858,-1848,-1723,-1700]]},{"type":"Polygon","id":31165,"arcs":[[1859,1860,1861,-1644,-1684,1862]]},{"type":"Polygon","id":31161,"arcs":[[1863,1864,1865,1866,1867,-1573,1868]]},{"type":"Polygon","id":31045,"arcs":[[1869,-1863,-1683,-1574,-1868]]},{"type":"Polygon","id":31015,"arcs":[[1870,1871,1872,-1681,-1672]]},{"type":"Polygon","id":31103,"arcs":[[-1873,1873,1874,1875,-1552,-1682]]},{"type":"Polygon","id":31031,"arcs":[[-1710,-1876,1876,1877,1878,1879,1880,-1869,-1709]]},{"type":"Polygon","id":41029,"arcs":[[-1602,1881,1882,-1461]]},{"type":"Polygon","id":36051,"arcs":[[-1851,1883,1884,1885,-1816,-1720]]},{"type":"Polygon","id":36083,"arcs":[[-1738,1886,1887,1888,-1703,-1546]]},{"type":"Polygon","id":36093,"arcs":[[1889,1890,-1845,-1705]]},{"type":"Polygon","id":41015,"arcs":[[-1463,1891,1892,1893,-1611]]},{"type":"Polygon","id":16083,"arcs":[[-1791,1894,1895,1896,-1580,-1415,-1792]]},{"type":"Polygon","id":19149,"arcs":[[1897,1898,-1833,-1756]]},{"type":"Polygon","id":19021,"arcs":[[1899,1900,1901,-1766]]},{"type":"Polygon","id":19035,"arcs":[[-1902,1902,1903,-1898,-1759]]},{"type":"Polygon","id":19151,"arcs":[[1904,1905,1906,-1900,-1764]]},{"type":"Polygon","id":19197,"arcs":[[1907,1908,1909,1910,-1763]]},{"type":"Polygon","id":19091,"arcs":[[-1911,1911,-1905,-1631]]},{"type":"Polygon","id":19069,"arcs":[[1912,1913,-1908,-1761]]},{"type":"Polygon","id":19023,"arcs":[[1914,1915,1916,-1913,-1773]]},{"type":"Polygon","id":19017,"arcs":[[-1842,1917,-1915,-1771]]},{"type":"Polygon","id":36077,"arcs":[[-1847,1918,1919,1920,-1803,-1605,-1420]]},{"type":"Polygon","id":31089,"arcs":[[1921,1922,1923,1924,1925,1926,-1872]]},{"type":"Polygon","id":26099,"arcs":[[1927,1928,1929,-1727,1930]]},{"type":"Polygon","id":26125,"arcs":[[1931,1932,1933,-1767,-1728,-1930]]},{"type":"Polygon","id":25009,"arcs":[[1934,1935,1936,-1781,-1749]]},{"type":"Polygon","id":31107,"arcs":[[-1812,-1810,1937,1938,1939,-1922,-1871,-1671]]},{"type":"Polygon","id":31027,"arcs":[[-1839,1940,1941,1942,-1938,-1809]]},{"type":"Polygon","id":36121,"arcs":[[-1886,1943,1944,-1828,-1817]]},{"type":"Polygon","id":55045,"arcs":[[1945,1946,1947,1948,-1774,-1741]]},{"type":"Polygon","id":16053,"arcs":[[-1797,1949,-1895,-1790,-1788]]},{"type":"Polygon","id":55105,"arcs":[[-1795,1950,1951,1952,-1946,-1740]]},{"type":"Polygon","id":31017,"arcs":[[1953,1954,1955,-1877,-1875]]},{"type":"Polygon","id":55127,"arcs":[[-1800,1956,1957,1958,1959,-1951,-1794]]},{"type":"Polygon","id":55101,"arcs":[[1960,1961,-1957,-1799,-1802]]},{"type":"Polygon","id":36095,"arcs":[[-1891,1962,1963,1964,-1919,-1846]]},{"type":"Polygon","id":36001,"arcs":[[-1889,1965,-1963,-1890,-1704]]},{"type":"Polygon","id":55065,"arcs":[[-1949,1966,1967,-1777,-1775]]},{"type":"Polygon","id":31149,"arcs":[[1968,-1954,-1874,-1927]]},{"type":"Polygon","id":36023,"arcs":[[1969,1970,-1698,-1752,-1805,1971,1972]]},{"type":"Polygon","id":41033,"arcs":[[-1462,-1883,1973,1974,-1892]]},{"type":"Polygon","id":26093,"arcs":[[-1934,1975,1976,1977,-1813,-1768]]},{"type":"Polygon","id":26065,"arcs":[[-1978,1978,1979,-1822,-1814]]},{"type":"Polygon","id":26045,"arcs":[[-1823,-1980,1980,1981,1982,-1820]]},{"type":"Polygon","id":26015,"arcs":[[-1983,1983,1984,1985,-1744,-1821]]},{"type":"Polygon","id":26005,"arcs":[[-1745,-1986,1986,1987,1988,-1785]]},{"type":"Polygon","id":36123,"arcs":[[1989,1990,-1849,-1859]]},{"type":"Polygon","id":31051,"arcs":[[-1836,1991,1992,1993,-1941,-1838]]},{"type":"Polygon","id":25003,"arcs":[[1994,1995,1996,1997,1998,1999,-1887,-1737]]},{"type":"Polygon","id":36017,"arcs":[[-1921,2000,2001,2002,-1972,-1804]]},{"type":"Polygon","id":25011,"arcs":[[2003,-1995,-1736,-1754,-1807,2004]]},{"type":"Polygon","id":25017,"arcs":[[2005,2006,2007,2008,2009,2010,2011,2012,2013,-1782,-1937]]},{"type":"Polygon","id":25027,"arcs":[[-1783,-2014,2014,2015,2016,2017,2018,2019,-2005,-1806]]},{"type":"Polygon","id":16031,"arcs":[[-1826,2020,2021,2022,-1896,-1950,-1796,-1445]]},{"type":"Polygon","id":19061,"arcs":[[2023,2024,2025,2026,-1843,-1779]]},{"type":"Polygon","id":55059,"arcs":[[2027,2028,2029,-1958,-1962]]},{"type":"Polygon","id":19055,"arcs":[[-2027,2030,2031,2032,-1844]]},{"type":"Polygon","id":19187,"arcs":[[-1910,2033,2034,2035,2036,-1906,-1912]]},{"type":"Polygon","id":19019,"arcs":[[-2033,2037,2038,2039,-1841]]},{"type":"Polygon","id":19013,"arcs":[[-2040,2040,2041,2042,-1916,-1918]]},{"type":"Polygon","id":36109,"arcs":[[-1971,2043,2044,2045,-1857,-1699]]},{"type":"Polygon","id":56015,"arcs":[[-1862,2046,2047,2048,2049,-1645]]},{"type":"Polygon","id":56031,"arcs":[[-2050,2050,2051,-1664,-1646]]},{"type":"Polygon","id":16007,"arcs":[[-1733,2052,2053,-1855]]},{"type":"Polygon","id":36101,"arcs":[[-1850,-1991,2054,2055,2056,2057,2058,-1884]]},{"type":"Polygon","id":36013,"arcs":[[2059,2060,2061,2062,-1831]]},{"type":"Polygon","id":19193,"arcs":[[-1904,2063,2064,2065,2066,-1834,-1899]]},{"type":"Polygon","id":19161,"arcs":[[2067,2068,2069,2070,-1901]]},{"type":"Polygon","id":19093,"arcs":[[-2071,2071,-2064,-1903]]},{"type":"Polygon","id":19025,"arcs":[[-2037,2072,2073,-2068,-1907]]},{"type":"Polygon","id":19079,"arcs":[[2074,2075,2076,-2034,-1909]]},{"type":"Polygon","id":19083,"arcs":[[-1914,2077,2078,2079,-2075]]},{"type":"Polygon","id":19075,"arcs":[[-2043,2080,2081,-2078,-1917]]},{"type":"Polygon","id":25015,"arcs":[[-2020,2082,-1996,-2004]]},{"type":"Polygon","id":36097,"arcs":[[-2046,2083,-2055,-1990,-1858]]},{"type":"Polygon","id":36009,"arcs":[[-1829,-1945,2084,2085,2086,-2060,-1830]]},{"type":"Polygon","id":31043,"arcs":[[-1835,-2067,2087,-1992]]},{"type":"Polygon","id":36003,"arcs":[[-1885,-2059,2088,2089,-2085,-1944]]},{"type":"Polygon","id":36025,"arcs":[[-1965,2090,2091,2092,2093,2094,-2001,-1920]]},{"type":"Polygon","id":17085,"arcs":[[-1968,2095,2096,2097,-2024,-1778]]},{"type":"Polygon","id":36021,"arcs":[[2098,2099,2100,-1888,-2000]]},{"type":"Polygon","id":17177,"arcs":[[2101,-2096,-1967,-1948,2102,2103]]},{"type":"Polygon","id":17201,"arcs":[[2104,2105,-2103,-1947,-1953]]},{"type":"Polygon","id":16071,"arcs":[[-1854,2106,2107,2108,-2021,-1825]]},{"type":"Polygon","id":17111,"arcs":[[2109,2110,2111,2112,2113,-1959,-2030]]},{"type":"Polygon","id":17007,"arcs":[[-1960,-2114,2114,-2105,-1952]]},{"type":"Polygon","id":17097,"arcs":[[2115,-2110,-2029,2116]]},{"type":"Polygon","id":36039,"arcs":[[2117,-2091,-1964,-1966,-2101]]},{"type":"MultiPolygon","id":25025,"arcs":[[[2118,2119,-2012,2120,-2010]]]},{"type":"Polygon","id":31139,"arcs":[[2121,2122,2123,-1939,-1943]]},{"type":"Polygon","id":31013,"arcs":[[2124,2125,-1860,-1870,-1867]]},{"type":"Polygon","id":31003,"arcs":[[-2124,2126,2127,2128,-1923,-1940]]},{"type":"Polygon","id":26161,"arcs":[[2129,2130,2131,-1976,-1933,2132]]},{"type":"Polygon","id":56007,"arcs":[[-1666,2133,2134,2135,2136,2137,-1432,-1680]]},{"type":"Polygon","id":56001,"arcs":[[-2052,2138,2139,2140,-2134,-1665]]},{"type":"Polygon","id":16041,"arcs":[[-2054,2141,-2107,-1853,-1856]]},{"type":"Polygon","id":26075,"arcs":[[-1977,-2132,2142,2143,2144,-1981,-1979]]},{"type":"Polygon","id":26025,"arcs":[[-2145,2145,2146,2147,-1984,-1982]]},{"type":"Polygon","id":26159,"arcs":[[2148,2149,2150,2151,-1988]]},{"type":"Polygon","id":26077,"arcs":[[-2148,2152,-2149,-1987,-1985]]},{"type":"Polygon","id":36007,"arcs":[[-2002,-2095,2153,2154,2155,-1973,-2003]]},{"type":"Polygon","id":36107,"arcs":[[-2156,2156,2157,2158,-2044,-1970]]},{"type":"Polygon","id":19097,"arcs":[[-2098,2159,2160,2161,-2025]]},{"type":"Polygon","id":31179,"arcs":[[-1994,2162,2163,2164,-2122,-1942]]},{"type":"Polygon","id":25021,"arcs":[[-2120,2165,2166,2167,2168,-2015,-2013]]},{"type":"Polygon","id":25013,"arcs":[[-2019,2169,2170,2171,-1997,-2083]]},{"type":"Polygon","id":25023,"arcs":[[2172,2173,2174,2175,2176,-2167,2177]]},{"type":"Polygon","id":19011,"arcs":[[2178,2179,2180,-2041,-2039]]},{"type":"Polygon","id":19113,"arcs":[[-2032,2181,2182,2183,-2179,-2038]]},{"type":"Polygon","id":19171,"arcs":[[-2181,2184,2185,-2081,-2042]]},{"type":"Polygon","id":19105,"arcs":[[-2026,-2162,2186,2187,-2182,-2031]]},{"type":"Polygon","id":36015,"arcs":[[-2045,-2159,2188,2189,-2056,-2084]]},{"type":"Polygon","id":31173,"arcs":[[-2066,2190,2191,2192,-2163,-1993,-2088]]},{"type":"Polygon","id":56037,"arcs":[[-1433,-2138,2193,2194,2195,2196,-1730,-1691]]},{"type":"Polygon","id":42049,"arcs":[[2197,2198,2199,2200,-2062]]},{"type":"Polygon","id":26021,"arcs":[[2201,2202,2203,2204,-2151]]},{"type":"Polygon","id":19133,"arcs":[[2205,2206,2207,-2191,-2065]]},{"type":"Polygon","id":19127,"arcs":[[-2186,2208,2209,-2079,-2082]]},{"type":"Polygon","id":19027,"arcs":[[-2074,2210,2211,2212,2213,-2069]]},{"type":"Polygon","id":19047,"arcs":[[-2072,-2070,-2214,2214,2215,-2206]]},{"type":"Polygon","id":19015,"arcs":[[-2077,2216,2217,2218,2219,-2035]]},{"type":"Polygon","id":19073,"arcs":[[-2220,2220,2221,-2211,-2073,-2036]]},{"type":"Polygon","id":19169,"arcs":[[-2080,-2210,2222,2223,-2217,-2076]]},{"type":"Polygon","id":17141,"arcs":[[2224,2225,2226,2227,-2104,-2106]]},{"type":"Polygon","id":17015,"arcs":[[-2228,2228,2229,-2160,-2097,-2102]]},{"type":"Polygon","id":36111,"arcs":[[-2100,2230,2231,2232,-2092,-2118]]},{"type":"Polygon","id":17031,"arcs":[[-2116,2233,2234,2235,2236,2237,2238,-2111]]},{"type":"Polygon","id":17037,"arcs":[[2239,2240,2241,2242,-2225,-2115,-2113]]},{"type":"Polygon","id":17089,"arcs":[[-2239,2243,2244,-2240,-2112]]},{"type":"Polygon","id":31075,"arcs":[[2245,2246,2247,-1864,-1881]]},{"type":"Polygon","id":25005,"arcs":[[2248,2249,2250,2251,2252,-2168,-2177]]},{"type":"Polygon","id":31091,"arcs":[[2253,2254,2255,-2246,-1880]]},{"type":"Polygon","id":31039,"arcs":[[-2193,2256,2257,2258,2259,-2164]]},{"type":"Polygon","id":31119,"arcs":[[2260,2261,2262,-2127,-2123]]},{"type":"Polygon","id":31167,"arcs":[[-2260,2263,2264,-2261,-2165]]},{"type":"Polygon","id":31171,"arcs":[[2265,2266,2267,-2254,-1879]]},{"type":"Polygon","id":31183,"arcs":[[2268,2269,2270,2271,-1924,-2129]]},{"type":"Polygon","id":31009,"arcs":[[-1878,-1956,2272,2273,2274,-2266]]},{"type":"Polygon","id":31115,"arcs":[[2275,2276,-2273,-1955,-1969,-1926]]},{"type":"Polygon","id":31071,"arcs":[[-2272,2277,2278,-2276,-1925]]},{"type":"Polygon","id":26091,"arcs":[[2279,2280,2281,2282,-2143,-2131]]},{"type":"Polygon","id":36027,"arcs":[[-1999,2283,2284,2285,2286,-2231,-2099]]},{"type":"Polygon","id":25001,"arcs":[[-2175,2287]]},{"type":"Polygon","id":26023,"arcs":[[2288,2289,2290,2291,-2147]]},{"type":"Polygon","id":26059,"arcs":[[-2283,2292,2293,2294,-2289,-2146,-2144]]},{"type":"Polygon","id":26149,"arcs":[[-2292,2295,2296,2297,-2153]]},{"type":"Polygon","id":26027,"arcs":[[-2298,2298,2299,-2202,-2150]]},{"type":"Polygon","id":9005,"arcs":[[-2172,2300,2301,2302,-2284,-1998]]},{"type":"Polygon","id":31021,"arcs":[[2303,2304,2305,-2257,-2192,-2208]]},{"type":"Polygon","id":9003,"arcs":[[2306,2307,2308,2309,-2301,-2171]]},{"type":"Polygon","id":9013,"arcs":[[-2018,2310,2311,-2307,-2170]]},{"type":"Polygon","id":19045,"arcs":[[-2230,2312,2313,2314,2315,2316,-2187,-2161]]},{"type":"Polygon","id":9015,"arcs":[[2317,2318,2319,-2311,-2017]]},{"type":"Polygon","id":44007,"arcs":[[-2253,2320,2321,2322,-2318,-2016,-2169]]},{"type":"Polygon","id":36105,"arcs":[[2323,2324,2325,-2093,-2233]]},{"type":"Polygon","id":6093,"arcs":[[-1601,2326,2327,2328,2329,2330,-1974,-1882]]},{"type":"Polygon","id":31069,"arcs":[[-2248,2331,2332,2333,2334,2335,-1865]]},{"type":"Polygon","id":31123,"arcs":[[-2336,2336,2337,2338,-2125,-1866]]},{"type":"Polygon","id":49005,"arcs":[[2339,2340,2341,-2108,-2142]]},{"type":"Polygon","id":31157,"arcs":[[-2339,2342,-2047,-1861,-2126]]},{"type":"Polygon","id":49033,"arcs":[[-1732,2343,2344,2345,2346,-2340,-2053]]},{"type":"Polygon","id":42015,"arcs":[[-2189,-2158,2347,2348,2349,2350,2351]]},{"type":"Polygon","id":42117,"arcs":[[-2190,-2352,2352,2353,-2057]]},{"type":"Polygon","id":49003,"arcs":[[2354,2355,2356,-2022,-2109,-2342]]},{"type":"Polygon","id":32013,"arcs":[[2357,2358,2359,-1428,-1264,-1582,2360]]},{"type":"Polygon","id":32007,"arcs":[[-2023,-2357,2361,2362,2363,2364,-2361,-1581,-1897]]},{"type":"Polygon","id":42083,"arcs":[[-2090,2365,2366,2367,2368,-2086]]},{"type":"Polygon","id":42105,"arcs":[[-2058,-2354,2369,2370,2371,-2366,-2089]]},{"type":"Polygon","id":6015,"arcs":[[-2331,2372,2373,-1893,-1975]]},{"type":"Polygon","id":42127,"arcs":[[-2094,-2326,2374,2375,2376,2377,-2154]]},{"type":"Polygon","id":42115,"arcs":[[2378,2379,-2348,-2157,-2155,-2378]]},{"type":"Polygon","id":42123,"arcs":[[-2369,2380,2381,2382,-2198,-2061,-2087]]},{"type":"Polygon","id":6049,"arcs":[[-1604,2383,2384,2385,-2327,-1600]]},{"type":"Polygon","id":32031,"arcs":[[2386,2387,2388,2389,2390,2391,2392,2393,2394,-2384,-1603,-1429,-2360]]},{"type":"Polygon","id":17043,"arcs":[[2395,2396,-2244,-2238]]},{"type":"Polygon","id":39007,"arcs":[[2397,2398,2399,2400,2401,-2200]]},{"type":"Polygon","id":19031,"arcs":[[-2188,-2317,2402,2403,2404,-2183]]},{"type":"Polygon","id":17195,"arcs":[[-2227,2405,2406,2407,2408,-2313,-2229]]},{"type":"Polygon","id":31011,"arcs":[[-2263,2409,2410,2411,-2269,-2128]]},{"type":"Polygon","id":17103,"arcs":[[-2243,2412,2413,-2406,-2226]]},{"type":"Polygon","id":19085,"arcs":[[-2216,2414,2415,2416,-2304,-2207]]},{"type":"Polygon","id":19095,"arcs":[[2417,2418,2419,2420,-2180]]},{"type":"Polygon","id":19049,"arcs":[[2421,2422,2423,-2221,-2219]]},{"type":"Polygon","id":19165,"arcs":[[2424,2425,2426,-2415,-2215]]},{"type":"Polygon","id":19009,"arcs":[[2427,2428,-2425,-2213]]},{"type":"Polygon","id":19157,"arcs":[[-2421,2429,2430,2431,-2185]]},{"type":"Polygon","id":19153,"arcs":[[-2224,2432,2433,2434,-2422,-2218]]},{"type":"Polygon","id":19099,"arcs":[[-2209,-2432,2435,2436,-2433,-2223]]},{"type":"Polygon","id":19077,"arcs":[[-2424,2437,-2428,-2212,-2222]]},{"type":"Polygon","id":19103,"arcs":[[-2405,2438,2439,2440,-2418,-2184]]},{"type":"Polygon","id":39085,"arcs":[[2441,2442,2443,-2401]]},{"type":"Polygon","id":42039,"arcs":[[-2383,2444,2445,2446,-2398,-2199]]},{"type":"Polygon","id":17161,"arcs":[[2447,2448,2449,2450,2451,-2314,-2409]]},{"type":"Polygon","id":44001,"arcs":[[2452,-2321,-2252]]},{"type":"Polygon","id":19163,"arcs":[[-2452,2453,-2403,-2316,-2315]]},{"type":"Polygon","id":44003,"arcs":[[2454,2455,2456,-2319,-2323]]},{"type":"Polygon","id":18039,"arcs":[[2457,2458,2459,2460,2461,-2299,-2297]]},{"type":"Polygon","id":18141,"arcs":[[2462,2463,2464,-2203,-2300,-2462]]},{"type":"Polygon","id":18091,"arcs":[[2465,2466,2467,-2204,-2465]]},{"type":"Polygon","id":18151,"arcs":[[2468,2469,-2290,-2295,2470]]},{"type":"Polygon","id":18087,"arcs":[[2471,-2458,-2296,-2291,-2470]]},{"type":"Polygon","id":31037,"arcs":[[-2259,2472,2473,2474,-2264]]},{"type":"Polygon","id":31141,"arcs":[[-2475,2475,2476,2477,2478,-2410,-2262,-2265]]},{"type":"Polygon","id":31053,"arcs":[[-2306,2479,2480,2481,2482,-2473,-2258]]},{"type":"Polygon","id":31117,"arcs":[[-2268,2483,2484,2485,2486,-2255]]},{"type":"Polygon","id":31005,"arcs":[[-2487,2487,-2332,-2247,-2256]]},{"type":"Polygon","id":31077,"arcs":[[2488,2489,2490,2491,-2270,-2412]]},{"type":"Polygon","id":31041,"arcs":[[-2279,2492,2493,2494,2495,2496,2497,-2274,-2277]]},{"type":"Polygon","id":31113,"arcs":[[-2275,-2498,2498,-2484,-2267]]},{"type":"Polygon","id":31175,"arcs":[[-2271,-2492,2499,-2493,-2278]]},{"type":"Polygon","id":39095,"arcs":[[2500,2501,2502,2503,-2281,2504,2505,2506,2507,2508,2509]]},{"type":"Polygon","id":17197,"arcs":[[-2237,2510,2511,2512,2513,-2396]]},{"type":"Polygon","id":39123,"arcs":[[2514,2515,2516,2517,2518,-2501]]},{"type":"Polygon","id":17093,"arcs":[[-2514,2519,2520,-2241,-2245,-2397]]},{"type":"Polygon","id":39051,"arcs":[[2521,2522,-2293,-2282,-2504]]},{"type":"Polygon","id":39055,"arcs":[[2523,2524,2525,-2442,-2400]]},{"type":"Polygon","id":9011,"arcs":[[-2457,2526,2527,2528,-2308,-2312,-2320]]},{"type":"Polygon","id":18089,"arcs":[[2529,2530,2531,2532,-2511,-2236,2533]]},{"type":"Polygon","id":18127,"arcs":[[2534,-2530,2535,-2467]]},{"type":"Polygon","id":39171,"arcs":[[2536,2537,2538,-2471,-2294,-2523]]},{"type":"Polygon","id":31007,"arcs":[[-2338,2539,2540,2541,-2048,-2343]]},{"type":"Polygon","id":31177,"arcs":[[-2417,2542,2543,-2480,-2305]]},{"type":"MultiPolygon","id":44005,"arcs":[[[2544]],[[2545,-2250]]]},{"type":"Polygon","id":9001,"arcs":[[2546,2547,2548,2549,-2285,-2303]]},{"type":"Polygon","id":56021,"arcs":[[-2049,-2542,2550,2551,2552,-2139,-2051]]},{"type":"Polygon","id":44009,"arcs":[[-2527,-2456,2553]]},{"type":"Polygon","id":42131,"arcs":[[-2380,2554,2555,2556,-2349]]},{"type":"Polygon","id":9007,"arcs":[[-2529,2557,2558,-2309]]},{"type":"Polygon","id":9009,"arcs":[[-2559,2559,2560,2561,-2547,-2302,-2310]]},{"type":"Polygon","id":42069,"arcs":[[-2377,2562,2563,-2555,-2379]]},{"type":"Polygon","id":36071,"arcs":[[-2287,2564,2565,2566,2567,2568,-2324,-2232]]},{"type":"Polygon","id":17099,"arcs":[[-2521,2569,2570,2571,2572,2573,2574,-2413,-2242]]},{"type":"Polygon","id":39035,"arcs":[[-2526,2575,2576,2577,2578,2579,-2443]]},{"type":"Polygon","id":42047,"arcs":[[2580,2581,2582,2583,-2368]]},{"type":"Polygon","id":42053,"arcs":[[-2584,2584,2585,2586,-2381]]},{"type":"Polygon","id":42121,"arcs":[[2587,2588,2589,-2445,-2382,-2587]]},{"type":"Polygon","id":39043,"arcs":[[2590,2591,2592,2593,2594,2595]]},{"type":"Polygon","id":39173,"arcs":[[-2519,2596,2597,2598,2599,-2502]]},{"type":"Polygon","id":42023,"arcs":[[-2372,2600,2601,-2581,-2367]]},{"type":"Polygon","id":42103,"arcs":[[-2569,2602,2603,-2375,-2325]]},{"type":"Polygon","id":19139,"arcs":[[-2404,-2454,-2451,2604,-2439]]},{"type":"Polygon","id":42081,"arcs":[[2605,2606,2607,2608,2609,2610,-2370,-2353,-2351]]},{"type":"Polygon","id":42113,"arcs":[[-2606,-2350,-2557,2611,2612]]},{"type":"Polygon","id":17011,"arcs":[[-2575,2613,2614,2615,2616,-2407,-2414]]},{"type":"Polygon","id":17073,"arcs":[[-2617,2617,2618,2619,-2448,-2408]]},{"type":"Polygon","id":56041,"arcs":[[-2197,2620,-2344,-1731]]},{"type":"Polygon","id":18033,"arcs":[[2621,2622,2623,-2469,-2539]]},{"type":"Polygon","id":18113,"arcs":[[-2624,2624,2625,2626,-2459,-2472]]},{"type":"Polygon","id":31125,"arcs":[[2627,2628,-2489,-2411,-2479]]},{"type":"Polygon","id":36079,"arcs":[[2629,2630,-2565,-2286,-2550,2631]]},{"type":"Polygon","id":25007,"arcs":[[2632]]},{"type":"Polygon","id":39093,"arcs":[[-2579,2633,2634,2635,-2591,2636]]},{"type":"Polygon","id":19183,"arcs":[[2637,2638,2639,2640,-2419,-2441]]},{"type":"Polygon","id":19181,"arcs":[[2641,2642,2643,2644,-2435]]},{"type":"Polygon","id":19107,"arcs":[[-2641,2645,2646,2647,-2430,-2420]]},{"type":"Polygon","id":19121,"arcs":[[2648,2649,2650,-2423,-2645]]},{"type":"Polygon","id":19123,"arcs":[[-2648,2651,2652,2653,-2436,-2431]]},{"type":"Polygon","id":19125,"arcs":[[-2654,2654,2655,-2642,-2434,-2437]]},{"type":"Polygon","id":19155,"arcs":[[-2427,2656,2657,2658,2659,2660,-2543,-2416]]},{"type":"Polygon","id":19029,"arcs":[[-2429,2661,2662,2663,-2657,-2426]]},{"type":"Polygon","id":19001,"arcs":[[-2438,-2651,2664,2665,-2662]]},{"type":"Polygon","id":39155,"arcs":[[-2447,2666,2667,2668,-2524,-2399]]},{"type":"Polygon","id":39143,"arcs":[[2669,-2593,2670,2671,-2597,-2518]]},{"type":"Polygon","id":42085,"arcs":[[-2590,2672,2673,2674,-2667,-2446]]},{"type":"Polygon","id":39069,"arcs":[[-2503,-2600,2675,2676,-2537,-2522]]},{"type":"Polygon","id":18099,"arcs":[[-2461,2677,2678,2679,-2463]]},{"type":"Polygon","id":42035,"arcs":[[-2611,2680,2681,2682,-2601,-2371]]},{"type":"Polygon","id":6023,"arcs":[[-2330,2683,2684,2685,-2373]]},{"type":"Polygon","id":17063,"arcs":[[2686,2687,-2570,-2520,-2513]]},{"type":"Polygon","id":31023,"arcs":[[-2483,2688,2689,2690,2691,-2476,-2474]]},{"type":"Polygon","id":31155,"arcs":[[2692,2693,2694,2695,-2689,-2482]]},{"type":"Polygon","id":18085,"arcs":[[-2627,2696,2697,2698,-2678,-2460]]},{"type":"Polygon","id":31033,"arcs":[[-2335,2699,2700,2701,2702,-2540,-2337]]},{"type":"Polygon","id":42031,"arcs":[[2703,2704,2705,-2588,-2586]]},{"type":"Polygon","id":49057,"arcs":[[-2341,-2347,2706,2707,-2355]]},{"type":"Polygon","id":18149,"arcs":[[-2680,2708,2709,-2466,-2464]]},{"type":"Polygon","id":42079,"arcs":[[2710,2711,2712,2713,-2612,-2556,-2564]]},{"type":"Polygon","id":39039,"arcs":[[2714,2715,2716,-2622,-2538,-2677]]},{"type":"Polygon","id":19115,"arcs":[[-2605,-2450,2717,2718,2719,-2638,-2440]]},{"type":"Polygon","id":31101,"arcs":[[2720,2721,2722,-2333,-2488,-2486]]},{"type":"Polygon","id":31111,"arcs":[[-2499,-2497,2723,2724,2725,2726,-2721,-2485]]},{"type":"Polygon","id":25019,"arcs":[[2727]]},{"type":"Polygon","id":31143,"arcs":[[2728,2729,2730,-2477,-2692]]},{"type":"Polygon","id":31105,"arcs":[[-2703,2731,2732,-2551,-2541]]},{"type":"Polygon","id":31121,"arcs":[[-2731,2733,2734,2735,-2628,-2478]]},{"type":"Polygon","id":31093,"arcs":[[-2629,-2736,2736,2737,2738,-2490]]},{"type":"Polygon","id":31163,"arcs":[[-2491,-2739,2739,-2494,-2500]]},{"type":"Polygon","id":31055,"arcs":[[-2544,-2661,2740,-2693,-2481]]},{"type":"Polygon","id":49029,"arcs":[[2741,2742,2743,-2707,-2346]]},{"type":"Polygon","id":42065,"arcs":[[2744,2745,2746,-2704,-2585,-2583]]},{"type":"Polygon","id":6105,"arcs":[[2747,2748,2749,-2684,-2329]]},{"type":"Polygon","id":36119,"arcs":[[2750,2751,-2632,-2549,2752]]},{"type":"Polygon","id":34037,"arcs":[[2753,2754,2755,2756,-2603,-2568]]},{"type":"Polygon","id":39153,"arcs":[[2757,2758,2759,2760,-2577]]},{"type":"Polygon","id":39133,"arcs":[[-2669,2761,2762,-2758,-2576,-2525]]},{"type":"Polygon","id":17131,"arcs":[[-2620,2763,2764,2765,2766,-2718,-2449]]},{"type":"Polygon","id":17155,"arcs":[[-2574,2767,-2614]]},{"type":"Polygon","id":36087,"arcs":[[2768,2769,-2566,-2631,2770]]},{"type":"Polygon","id":42037,"arcs":[[2771,2772,2773,-2607,-2613,-2714]]},{"type":"Polygon","id":17091,"arcs":[[-2533,2774,2775,2776,2777,-2687,-2512]]},{"type":"Polygon","id":18183,"arcs":[[2778,2779,2780,-2697,-2626]]},{"type":"MultiPolygon","id":36103,"arcs":[[[2781,2782]]]},{"type":"Polygon","id":39077,"arcs":[[-2636,2783,2784,2785,2786,-2671,-2592]]},{"type":"Polygon","id":18073,"arcs":[[-2710,2787,2788,2789,2790,-2531,-2535]]},{"type":"Polygon","id":39103,"arcs":[[-2761,2791,2792,-2634,-2578]]},{"type":"Polygon","id":18003,"arcs":[[2793,2794,2795,2796,2797,-2779,-2625,-2623,-2717]]},{"type":"Polygon","id":39147,"arcs":[[-2787,2798,2799,2800,-2598,-2672]]},{"type":"Polygon","id":42033,"arcs":[[2801,2802,2803,2804,-2745,-2582,-2602,-2683]]},{"type":"Polygon","id":49043,"arcs":[[-2621,-2196,2805,2806,2807,2808,-2742,-2345]]},{"type":"Polygon","id":42027,"arcs":[[2809,2810,2811,2812,-2802,-2682]]},{"type":"Polygon","id":42089,"arcs":[[-2757,2813,2814,2815,-2711,-2563,-2376,-2604]]},{"type":"Polygon","id":39125,"arcs":[[2816,2817,-2794,-2716]]},{"type":"Polygon","id":17175,"arcs":[[-2616,2818,2819,2820,-2618]]},{"type":"Polygon","id":31049,"arcs":[[-2723,2821,2822,-2700,-2334]]},{"type":"Polygon","id":18111,"arcs":[[2823,2824,-2775,-2532,-2791]]},{"type":"Polygon","id":34031,"arcs":[[2825,2826,-2754,-2567,-2770,2827]]},{"type":"Polygon","id":31153,"arcs":[[-2660,2828,2829,-2694,-2741]]},{"type":"Polygon","id":6035,"arcs":[[-2395,2830,2831,2832,-2385]]},{"type":"Polygon","id":6089,"arcs":[[-2386,-2833,2833,2834,-2748,-2328]]},{"type":"Polygon","id":42097,"arcs":[[2835,-2773,2836,2837,2838,2839,2840,-2609]]},{"type":"Polygon","id":18049,"arcs":[[2841,2842,2843,2844,-2679,-2699]]},{"type":"Polygon","id":31081,"arcs":[[2845,2846,2847,2848,-2734,-2730]]},{"type":"Polygon","id":18131,"arcs":[[-2845,2849,2850,-2788,-2709]]},{"type":"Polygon","id":42093,"arcs":[[-2774,-2836,-2608]]},{"type":"Polygon","id":42019,"arcs":[[-2706,2851,2852,2853,2854,-2673,-2589]]},{"type":"Polygon","id":42005,"arcs":[[-2747,2855,2856,2857,-2852,-2705]]},{"type":"Polygon","id":39063,"arcs":[[-2801,2858,2859,2860,2861,-2599]]},{"type":"Polygon","id":39137,"arcs":[[-2862,2862,2863,-2817,-2715,-2676]]},{"type":"Polygon","id":19101,"arcs":[[-2640,2864,2865,2866,-2646]]},{"type":"Polygon","id":19087,"arcs":[[-2720,2867,2868,2869,-2865,-2639]]},{"type":"Polygon","id":19179,"arcs":[[-2867,2870,2871,-2652,-2647]]},{"type":"Polygon","id":19039,"arcs":[[2872,2873,2874,-2649,-2644]]},{"type":"Polygon","id":19117,"arcs":[[-2656,2875,2876,-2873,-2643]]},{"type":"Polygon","id":19135,"arcs":[[-2872,2877,-2876,-2655,-2653]]},{"type":"Polygon","id":19129,"arcs":[[2878,2879,2880,-2829,-2659]]},{"type":"Polygon","id":19137,"arcs":[[-2664,2881,2882,-2879,-2658]]},{"type":"Polygon","id":19003,"arcs":[[-2666,2883,2884,-2882,-2663]]},{"type":"Polygon","id":19175,"arcs":[[-2650,-2875,2885,-2884,-2665]]},{"type":"Polygon","id":49011,"arcs":[[-2744,2886,2887,-2708]]},{"type":"Polygon","id":17095,"arcs":[[-2821,2888,2889,2890,-2764,-2619]]},{"type":"Polygon","id":42119,"arcs":[[2891,2892,-2810,-2681,-2610,-2841]]},{"type":"Polygon","id":17123,"arcs":[[-2768,-2573,2893,2894,-2819,-2615]]},{"type":"Polygon","id":34003,"arcs":[[2895,2896,-2828,-2769,2897]]},{"type":"Polygon","id":39099,"arcs":[[-2675,2898,2899,2900,-2762,-2668]]},{"type":"Polygon","id":42025,"arcs":[[-2816,2901,2902,2903,-2712]]},{"type":"Polygon","id":42073,"arcs":[[-2855,2904,2905,-2899,-2674]]},{"type":"Polygon","id":17105,"arcs":[[-2778,2906,2907,2908,-2571,-2688]]},{"type":"Polygon","id":34041,"arcs":[[2909,2910,2911,2912,-2814,-2756]]},{"type":"Polygon","id":34027,"arcs":[[2913,2914,2915,2916,-2910,-2755,-2827]]},{"type":"Polygon","id":49045,"arcs":[[2917,2918,2919,2920,-2362,-2356,-2888]]},{"type":"Polygon","id":19057,"arcs":[[-2767,2921,2922,2923,-2868,-2719]]},{"type":"Polygon","id":17071,"arcs":[[2924,2925,2926,2927,-2922,-2766]]},{"type":"Polygon","id":17187,"arcs":[[-2891,2928,2929,-2925,-2765]]},{"type":"Polygon","id":39005,"arcs":[[-2793,2930,2931,2932,2933,-2784,-2635]]},{"type":"Polygon","id":31025,"arcs":[[-2881,2934,2935,2936,-2695,-2830]]},{"type":"Polygon","id":31185,"arcs":[[2937,2938,2939,-2846,-2729]]},{"type":"Polygon","id":31079,"arcs":[[-2735,-2849,2940,2941,-2737]]},{"type":"Polygon","id":31047,"arcs":[[2942,2943,2944,2945,-2724,-2496]]},{"type":"Polygon","id":31019,"arcs":[[-2738,-2942,2946,2947,2948,-2943,-2495,-2740]]},{"type":"Polygon","id":31159,"arcs":[[2949,2950,-2938,-2691]]},{"type":"Polygon","id":31109,"arcs":[[-2937,2951,2952,2953,-2950,-2690,-2696]]},{"type":"Polygon","id":18169,"arcs":[[-2781,2954,2955,2956,-2842,-2698]]},{"type":"Polygon","id":17075,"arcs":[[-2825,2957,2958,2959,-2776]]},{"type":"Polygon","id":18069,"arcs":[[-2798,2960,2961,-2955,-2780]]},{"type":"Polygon","id":8123,"arcs":[[2962,2963,2964,2965,2966,-2552,-2733,2967]]},{"type":"Polygon","id":31135,"arcs":[[-2727,2968,2969,2970,2971,-2822,-2722]]},{"type":"Polygon","id":8107,"arcs":[[2972,2973,2974,2975,2976,-2136,2977]]},{"type":"Polygon","id":8057,"arcs":[[2978,-2978,-2135,-2141,2979]]},{"type":"Polygon","id":8081,"arcs":[[-2977,2980,2981,2982,-2194,-2137]]},{"type":"Polygon","id":8075,"arcs":[[2983,2984,2985,-2968,-2732,-2702,2986,2987]]},{"type":"Polygon","id":8115,"arcs":[[2988,-2987,-2701,-2823,-2972]]},{"type":"Polygon","id":49009,"arcs":[[2989,2990,-2806,-2195,-2983]]},{"type":"Polygon","id":32011,"arcs":[[2991,2992,2993,-2364]]},{"type":"Polygon","id":32015,"arcs":[[-2994,2994,2995,2996,-2358,-2365]]},{"type":"Polygon","id":8069,"arcs":[[2997,2998,-2980,-2140,-2553,-2967]]},{"type":"Polygon","id":18103,"arcs":[[-2957,2999,3000,3001,-2843]]},{"type":"Polygon","id":39033,"arcs":[[3002,3003,3004,3005,-2799,-2786]]},{"type":"Polygon","id":17053,"arcs":[[3006,3007,3008,-2907,-2777,-2960]]},{"type":"Polygon","id":39139,"arcs":[[-2934,3009,3010,-3003,-2785]]},{"type":"Polygon","id":39175,"arcs":[[-3006,3011,3012,-2859,-2800]]},{"type":"Polygon","id":39169,"arcs":[[-2760,3013,3014,-2931,-2792]]},{"type":"Polygon","id":39161,"arcs":[[-2864,3015,3016,3017,3018,-2795,-2818]]},{"type":"Polygon","id":39151,"arcs":[[-2901,3019,3020,3021,3022,-3014,-2759,-2763]]},{"type":"Polygon","id":17143,"arcs":[[-2895,3023,3024,3025,-2889,-2820]]},{"type":"Polygon","id":42095,"arcs":[[3026,3027,-2902,-2815,-2913]]},{"type":"Polygon","id":32027,"arcs":[[-2997,3028,-2387,-2359]]},{"type":"Polygon","id":42107,"arcs":[[-2904,3029,3030,3031,3032,-2837,-2772,-2713]]},{"type":"Polygon","id":39029,"arcs":[[-2906,3033,3034,3035,3036,-3020,-2900]]},{"type":"Polygon","id":17203,"arcs":[[3037,3038,-3024,-2894,-2572,-2909]]},{"type":"Polygon","id":18001,"arcs":[[3039,3040,3041,-2796,-3019]]},{"type":"Polygon","id":39003,"arcs":[[-2861,3042,3043,-3016,-2863]]},{"type":"Polygon","id":49035,"arcs":[[-2743,-2809,3044,3045,-2918,-2887]]},{"type":"Polygon","id":36005,"arcs":[[3046,3047,3048,-2751]]},{"type":"Polygon","id":18179,"arcs":[[-3042,3049,3050,3051,-2961,-2797]]},{"type":"Polygon","id":36059,"arcs":[[-2782,3052,3053,3054,3055,3056]]},{"type":"Polygon","id":18181,"arcs":[[3057,3058,3059,3060,-2789,-2851]]},{"type":"Polygon","id":18017,"arcs":[[-2844,-3002,3061,3062,-3058,-2850]]},{"type":"Polygon","id":42063,"arcs":[[-2805,3063,3064,-2856,-2746]]},{"type":"Polygon","id":34013,"arcs":[[-2826,-2897,3065,3066,3067,-2914]]},{"type":"Polygon","id":19071,"arcs":[[3068,3069,3070,-2935,-2880]]},{"type":"Polygon","id":19145,"arcs":[[3071,3072,3073,-3069,-2883]]},{"type":"Polygon","id":19173,"arcs":[[3074,3075,3076,-3072,-2885]]},{"type":"Polygon","id":19177,"arcs":[[-2870,3077,3078,3079,3080,-2866]]},{"type":"Polygon","id":19051,"arcs":[[-3081,3081,3082,3083,-2871]]},{"type":"Polygon","id":19159,"arcs":[[3084,3085,3086,-3075,-2886]]},{"type":"Polygon","id":19053,"arcs":[[3087,3088,3089,-3085,-2874]]},{"type":"Polygon","id":19185,"arcs":[[3090,3091,3092,-3088,-2877]]},{"type":"Polygon","id":19007,"arcs":[[-3084,3093,3094,-3091,-2878]]},{"type":"Polygon","id":42109,"arcs":[[-2840,3095,3096,-2892]]},{"type":"Polygon","id":36061,"arcs":[[3097,-3048]]},{"type":"Polygon","id":49047,"arcs":[[-2982,3098,3099,3100,3101,3102,3103,-2990]]},{"type":"Polygon","id":42007,"arcs":[[-2854,3104,3105,3106,-3034,-2905]]},{"type":"Polygon","id":42087,"arcs":[[3107,-2811,-2893,-3097,3108]]},{"type":"Polygon","id":49013,"arcs":[[-2991,-3104,3109,3110,3111,-2807]]},{"type":"Polygon","id":39065,"arcs":[[-3013,3112,3113,3114,3115,-3043,-2860]]},{"type":"Polygon","id":34017,"arcs":[[3116,-3066,-2896]]},{"type":"Polygon","id":19111,"arcs":[[-2924,-2923,-2928,3117,3118,-3078,-2869]]},{"type":"Polygon","id":36081,"arcs":[[-3056,3119,3120,3121]]},{"type":"Polygon","id":34019,"arcs":[[3122,3123,3124,-2911,-2917]]},{"type":"Polygon","id":42077,"arcs":[[3125,3126,3127,-3030,-2903,-3028]]},{"type":"Polygon","id":31131,"arcs":[[-3071,3128,3129,3130,-2952,-2936]]},{"type":"Polygon","id":34035,"arcs":[[3131,3132,3133,-3123,-2916]]},{"type":"Polygon","id":17113,"arcs":[[-3009,3134,3135,3136,3137,3138,-3038,-2908]]},{"type":"Polygon","id":8095,"arcs":[[-2971,3139,3140,-2988,-2989]]},{"type":"Polygon","id":17179,"arcs":[[-3139,3141,3142,3143,-3025,-3039]]},{"type":"Polygon","id":42061,"arcs":[[-3108,3144,3145,3146,3147,3148,3149,-2812]]},{"type":"Polygon","id":42013,"arcs":[[-3149,3150,3151,-2803,-2813,-3150]]},{"type":"Polygon","id":36047,"arcs":[[3152,-3121]]},{"type":"Polygon","id":18007,"arcs":[[-2790,-3061,3153,3154,3155,-2958,-2824]]},{"type":"Polygon","id":34039,"arcs":[[3156,3157,-3132,-2915,-3068]]},{"type":"Polygon","id":18015,"arcs":[[-3063,3158,3159,3160,-3059]]},{"type":"Polygon","id":39019,"arcs":[[-3037,3161,3162,3163,-3021]]},{"type":"Polygon","id":39107,"arcs":[[3164,3165,3166,3167,-3040,-3018]]},{"type":"Polygon","id":42021,"arcs":[[-3152,3168,3169,3170,-3064,-2804]]},{"type":"Polygon","id":17057,"arcs":[[-3026,-3144,3171,3172,3173,-2929,-2890]]},{"type":"Polygon","id":39117,"arcs":[[-3011,3174,3175,3176,-3004]]},{"type":"Polygon","id":39101,"arcs":[[-3177,3177,3178,-3113,-3012,-3005]]},{"type":"Polygon","id":31063,"arcs":[[-2946,3179,3180,3181,3182,3183,-2725]]},{"type":"Polygon","id":31001,"arcs":[[-2848,3184,3185,3186,-2947,-2941]]},{"type":"Polygon","id":31073,"arcs":[[3187,3188,-3180,-2945]]},{"type":"Polygon","id":31085,"arcs":[[-3184,3189,3190,3191,-2969,-2726]]},{"type":"Polygon","id":31029,"arcs":[[-3192,3192,3193,-3140,-2970]]},{"type":"Polygon","id":31059,"arcs":[[3194,3195,3196,3197,-2939]]},{"type":"Polygon","id":31151,"arcs":[[-2951,-2954,3198,3199,-3195]]},{"type":"Polygon","id":31035,"arcs":[[-3198,3200,3201,-3185,-2847,-2940]]},{"type":"Polygon","id":42067,"arcs":[[-2839,3202,3203,-3145,-3109,-3096]]},{"type":"Polygon","id":49051,"arcs":[[-3112,3204,-3045,-2808]]},{"type":"Polygon","id":31099,"arcs":[[3205,3206,3207,-2948,-3187]]},{"type":"Polygon","id":39011,"arcs":[[-3116,3208,3209,-3165,-3017,-3044]]},{"type":"Polygon","id":31137,"arcs":[[-2949,-3208,3210,3211,-3188,-2944]]},{"type":"Polygon","id":42129,"arcs":[[-3065,-3171,3212,3213,3214,3215,-2857]]},{"type":"Polygon","id":42011,"arcs":[[3216,3217,3218,3219,-3031,-3128]]},{"type":"Polygon","id":42003,"arcs":[[-2858,-3216,3220,-3105,-2853]]},{"type":"Polygon","id":39075,"arcs":[[-3023,3221,3222,3223,-2932,-3015]]},{"type":"Polygon","id":39157,"arcs":[[-3164,3224,3225,3226,-3222,-3022]]},{"type":"Polygon","id":42043,"arcs":[[-3033,3227,3228,3229,3230,3231,-2838]]},{"type":"Polygon","id":18053,"arcs":[[-3052,3232,3233,3234,3235,3236,-3000,-2956,-2962]]},{"type":"Polygon","id":36085,"arcs":[[3237]]},{"type":"Polygon","id":17067,"arcs":[[3238,3239,3240,3241,3242,-3118,-2927]]},{"type":"Polygon","id":54029,"arcs":[[3243,3244,3245,-3035,-3107]]},{"type":"Polygon","id":17109,"arcs":[[-3174,3246,-3239,-2926,-2930]]},{"type":"Polygon","id":42099,"arcs":[[3247,3248,-3203,-3232]]},{"type":"Polygon","id":29045,"arcs":[[-3243,3249,3250,3251,-3079,-3119]]},{"type":"Polygon","id":42017,"arcs":[[3252,3253,3254,3255,-3126,-3027,-2912,-3125]]},{"type":"Polygon","id":34023,"arcs":[[3256,3257,3258,-3133,-3158]]},{"type":"Polygon","id":29199,"arcs":[[-3252,3259,3260,3261,-3082,-3080]]},{"type":"Polygon","id":39081,"arcs":[[-3246,3262,3263,3264,3265,-3162,-3036]]},{"type":"Polygon","id":29197,"arcs":[[3266,3267,-3094,-3083,-3262]]},{"type":"Polygon","id":29171,"arcs":[[-3268,3268,3269,3270,-3092,-3095]]},{"type":"Polygon","id":29005,"arcs":[[-3074,3271,3272,3273,-3129,-3070]]},{"type":"Polygon","id":29129,"arcs":[[-3271,3274,3275,3276,-3089,-3093]]},{"type":"Polygon","id":29147,"arcs":[[-3077,3277,3278,3279,3280,-3272,-3073]]},{"type":"Polygon","id":49049,"arcs":[[-3111,3281,3282,3283,-2919,-3046,-3205]]},{"type":"Polygon","id":29081,"arcs":[[-3277,3284,3285,3286,3287,-3086,-3090]]},{"type":"Polygon","id":39083,"arcs":[[3288,3289,3290,-3175,-3010,-2933,-3224]]},{"type":"Polygon","id":18075,"arcs":[[-3168,3291,3292,3293,3294,-3050,-3041]]},{"type":"Polygon","id":29227,"arcs":[[-3288,3295,-3278,-3076,-3087]]},{"type":"Polygon","id":18009,"arcs":[[-3295,3296,-3233,-3051]]},{"type":"Polygon","id":18067,"arcs":[[3297,3298,-3159,-3062,-3001,-3237]]},{"type":"Polygon","id":18157,"arcs":[[-3161,3299,3300,3301,3302,-3154,-3060]]},{"type":"Polygon","id":31127,"arcs":[[3303,3304,3305,3306,-3130,-3274]]},{"type":"Polygon","id":42075,"arcs":[[-3228,-3032,-3220,3307]]},{"type":"Polygon","id":39091,"arcs":[[-3115,3308,3309,3310,-3209]]},{"type":"Polygon","id":8087,"arcs":[[-2986,3311,3312,-2963]]},{"type":"Polygon","id":31067,"arcs":[[3313,3314,3315,3316,3317,-3199,-2953]]},{"type":"Polygon","id":31097,"arcs":[[-3307,3318,-3314,-3131]]},{"type":"Polygon","id":39159,"arcs":[[3319,3320,3321,-3309,-3114,-3179,3322]]},{"type":"Polygon","id":17183,"arcs":[[-3156,3323,3324,3325,3326,-3007,-2959]]},{"type":"Polygon","id":8049,"arcs":[[3327,3328,3329,3330,3331,-2973,-2979,-2999]]},{"type":"Polygon","id":39149,"arcs":[[-3311,3332,3333,3334,-3166,-3210]]},{"type":"Polygon","id":42125,"arcs":[[-3221,-3215,3335,3336,3337,3338,3339,-3244,-3106]]},{"type":"Polygon","id":18171,"arcs":[[-3303,3340,3341,-3324,-3155]]},{"type":"Polygon","id":34025,"arcs":[[3342,3343,3344,3345,-3258,3346]]},{"type":"Polygon","id":39031,"arcs":[[-3227,3347,3348,3349,-3289,-3223]]},{"type":"Polygon","id":42091,"arcs":[[3350,3351,3352,3353,-3217,-3127,-3256]]},{"type":"Polygon","id":6103,"arcs":[[3354,3355,3356,3357,-2749,-2835]]},{"type":"Polygon","id":6063,"arcs":[[-2832,3358,3359,3360,-3355,-2834]]},{"type":"Polygon","id":39041,"arcs":[[-3291,3361,3362,-3323,-3178,-3176]]},{"type":"Polygon","id":8125,"arcs":[[-3194,3363,3364,3365,3366,-2984,-3141]]},{"type":"Polygon","id":8121,"arcs":[[-3367,3367,3368,3369,3370,-3312,-2985]]},{"type":"Polygon","id":17125,"arcs":[[3371,3372,3373,3374,-3172,-3143]]},{"type":"Polygon","id":39067,"arcs":[[-3266,3375,3376,-3225,-3163]]},{"type":"Polygon","id":18023,"arcs":[[-3299,3377,3378,3379,3380,-3300,-3160]]},{"type":"Polygon","id":34021,"arcs":[[-3259,-3346,3381,-3253,-3124,-3134]]},{"type":"Polygon","id":18159,"arcs":[[-3236,3382,3383,-3378,-3298]]},{"type":"Polygon","id":54009,"arcs":[[-3340,3384,-3263,-3245]]},{"type":"Polygon","id":17019,"arcs":[[-3327,3385,3386,-3135,-3008]]},{"type":"Polygon","id":29211,"arcs":[[3387,3388,3389,-3275,-3270]]},{"type":"Polygon","id":29075,"arcs":[[-3287,3390,3391,3392,-3279,-3296]]},{"type":"Polygon","id":18095,"arcs":[[3393,3394,3395,3396,-3383,-3235]]},{"type":"Polygon","id":18035,"arcs":[[-3297,-3294,3397,3398,-3394,-3234]]},{"type":"Polygon","id":18045,"arcs":[[-3302,3399,3400,3401,-3341]]},{"type":"Polygon","id":39037,"arcs":[[-3335,3402,3403,3404,3405,3406,-3292,-3167]]},{"type":"Polygon","id":31181,"arcs":[[-3202,3407,3408,3409,3410,-3206,-3186]]},{"type":"Polygon","id":31061,"arcs":[[-3411,3411,3412,3413,-3207]]},{"type":"Polygon","id":31129,"arcs":[[-3197,3414,3415,3416,-3408,-3201]]},{"type":"Polygon","id":31057,"arcs":[[3417,3418,3419,-3364,-3193,-3191]]},{"type":"Polygon","id":31065,"arcs":[[-3212,3420,3421,3422,3423,-3181,-3189]]},{"type":"Polygon","id":31169,"arcs":[[3424,3425,-3415,-3196]]},{"type":"Polygon","id":31095,"arcs":[[-3200,-3318,3426,-3425]]},{"type":"Polygon","id":31145,"arcs":[[-3424,3427,3428,3429,-3182]]},{"type":"Polygon","id":31087,"arcs":[[-3183,-3430,3430,-3418,-3190]]},{"type":"Polygon","id":31083,"arcs":[[-3414,3431,3432,-3421,-3211]]},{"type":"Polygon","id":29001,"arcs":[[-3261,3433,3434,3435,-3388,-3269,-3267]]},{"type":"Polygon","id":42041,"arcs":[[3436,3437,3438,-3248,-3231]]},{"type":"Polygon","id":17107,"arcs":[[3439,3440,3441,3442,-3372,-3142,-3138]]},{"type":"Polygon","id":42009,"arcs":[[-3148,3443,3444,3445,-3169,-3151]]},{"type":"Polygon","id":42071,"arcs":[[3446,3447,3448,3449,-3229,-3308,-3219]]},{"type":"Polygon","id":18135,"arcs":[[-3407,3450,3451,-3398,-3293]]},{"type":"Polygon","id":29103,"arcs":[[-3251,3452,3453,3454,-3434,-3260]]},{"type":"Polygon","id":42055,"arcs":[[-3439,3455,3456,3457,3458,-3146,-3204,-3249]]},{"type":"Polygon","id":42111,"arcs":[[-3446,3459,3460,3461,-3213,-3170]]},{"type":"Polygon","id":17039,"arcs":[[3462,3463,-3440,-3137]]},{"type":"Polygon","id":17169,"arcs":[[-3173,-3375,3464,3465,3466,-3240,-3247]]},{"type":"Polygon","id":17147,"arcs":[[-3387,3467,3468,3469,-3463,-3136]]},{"type":"Polygon","id":39089,"arcs":[[-3350,3470,3471,3472,3473,-3362,-3290]]},{"type":"Polygon","id":39021,"arcs":[[-3322,3474,3475,3476,-3333,-3310]]},{"type":"Polygon","id":29079,"arcs":[[-3390,3477,3478,3479,-3285,-3276]]},{"type":"Polygon","id":8013,"arcs":[[-2966,3480,3481,3482,-3328,-2998]]},{"type":"Polygon","id":31133,"arcs":[[-3306,3483,3484,3485,-3315,-3319]]},{"type":"Polygon","id":31147,"arcs":[[3486,3487,3488,3489,-3484,-3305]]},{"type":"Polygon","id":29087,"arcs":[[-3281,3490,3491,-3487,-3304,-3273]]},{"type":"Polygon","id":29111,"arcs":[[-3242,3492,3493,3494,-3453,-3250]]},{"type":"Polygon","id":42029,"arcs":[[3495,3496,3497,-3447,-3218,-3354]]},{"type":"Polygon","id":42133,"arcs":[[-3450,3498,3499,3500,3501,-3437,-3230]]},{"type":"Polygon","id":8103,"arcs":[[3502,-3099,-2981,-2976]]},{"type":"Polygon","id":39059,"arcs":[[3503,3504,-3348,-3226,-3377,3505]]},{"type":"Polygon","id":18057,"arcs":[[3506,3507,3508,-3379,-3384,-3397]]},{"type":"Polygon","id":18107,"arcs":[[-3381,3509,3510,3511,3512,-3400,-3301]]},{"type":"Polygon","id":17001,"arcs":[[-3467,3513,3514,3515,-3493,-3241]]},{"type":"Polygon","id":39109,"arcs":[[-3477,3516,3517,-3403,-3334]]},{"type":"Polygon","id":54069,"arcs":[[-3339,3518,3519,-3264,-3385]]},{"type":"Polygon","id":34005,"arcs":[[-3345,3520,3521,3522,3523,3524,3525,-3254,-3382]]},{"type":"Polygon","id":18011,"arcs":[[-3509,3526,3527,-3510,-3380]]},{"type":"Polygon","id":39013,"arcs":[[-3265,-3520,3528,3529,3530,-3506,-3376]]},{"type":"Polygon","id":34029,"arcs":[[-3343,3531,-3521,-3344]]},{"type":"Polygon","id":39119,"arcs":[[-3505,3532,3533,3534,-3471,-3349]]},{"type":"Polygon","id":42057,"arcs":[[-3459,3535,3536,-3444,-3147]]},{"type":"Polygon","id":17129,"arcs":[[-3443,3537,3538,-3373]]},{"type":"Polygon","id":6007,"arcs":[[3539,3540,3541,3542,-3356,-3361]]},{"type":"Polygon","id":18165,"arcs":[[-3402,3543,3544,3545,-3325,-3342]]},{"type":"Polygon","id":42051,"arcs":[[-3462,3546,3547,3548,3549,-3336,-3214]]},{"type":"Polygon","id":39049,"arcs":[[-3474,3550,3551,3552,-3320,-3363]]},{"type":"Polygon","id":42101,"arcs":[[-3526,3553,3554,-3352,-3351,-3255]]},{"type":"Polygon","id":29061,"arcs":[[-3286,-3480,3555,3556,3557,-3391]]},{"type":"Polygon","id":29003,"arcs":[[-3393,3558,3559,3560,-3491,-3280]]},{"type":"Polygon","id":32033,"arcs":[[-2921,3561,3562,3563,3564,-2992,-2363]]},{"type":"Polygon","id":17017,"arcs":[[-3374,-3539,3565,3566,3567,-3465]]},{"type":"Polygon","id":39097,"arcs":[[3568,3569,3570,3571,-3475,-3321,-3553]]},{"type":"Polygon","id":17009,"arcs":[[-3568,3572,3573,-3514,-3466]]},{"type":"Polygon","id":8045,"arcs":[[-2975,3574,3575,3576,3577,-3100,-3503]]},{"type":"Polygon","id":18065,"arcs":[[-3452,3578,3579,3580,3581,-3395,-3399]]},{"type":"Polygon","id":42001,"arcs":[[3582,3583,-3456,-3438,-3502]]},{"type":"Polygon","id":42045,"arcs":[[-3555,3584,3585,3586,3587,-3496,-3353]]},{"type":"Polygon","id":17115,"arcs":[[-3470,3588,3589,3590,3591,-3441,-3464]]},{"type":"Polygon","id":8014,"arcs":[[3592,3593,3594,-3481,-2965]]},{"type":"Polygon","id":29121,"arcs":[[-3455,3595,3596,3597,3598,3599,-3435]]},{"type":"Polygon","id":39023,"arcs":[[-3572,3600,3601,-3517,-3476]]},{"type":"Polygon","id":29115,"arcs":[[-3600,3602,3603,-3478,-3389,-3436]]},{"type":"Polygon","id":29063,"arcs":[[-3558,3604,3605,3606,-3559,-3392]]},{"type":"Polygon","id":54051,"arcs":[[3607,3608,-3529,-3519,-3338,3609]]},{"type":"Polygon","id":42059,"arcs":[[-3550,3610,3611,-3610,-3337]]},{"type":"Polygon","id":49023,"arcs":[[-3284,3612,3613,-3562,-2920]]},{"type":"Polygon","id":18177,"arcs":[[-3406,3614,3615,3616,-3579,-3451]]},{"type":"Polygon","id":20023,"arcs":[[3617,3618,3619,-3365,-3420]]},{"type":"Polygon","id":20153,"arcs":[[-3429,3620,3621,3622,-3618,-3419,-3431]]},{"type":"Polygon","id":6045,"arcs":[[-2750,-3358,3623,3624,3625,3626,-2685]]},{"type":"Polygon","id":20089,"arcs":[[3627,3628,3629,3630,3631,-3409,-3417]]},{"type":"Polygon","id":20183,"arcs":[[-3632,3632,3633,3634,-3412,-3410]]},{"type":"Polygon","id":20157,"arcs":[[3635,3636,-3628,-3416,-3426]]},{"type":"Polygon","id":20201,"arcs":[[-3317,3637,3638,3639,3640,-3636,-3427]]},{"type":"Polygon","id":20039,"arcs":[[-3423,3641,3642,3643,-3621,-3428]]},{"type":"Polygon","id":32001,"arcs":[[-2996,3644,3645,3646,-2388,-3029]]},{"type":"Polygon","id":20137,"arcs":[[3647,3648,3649,-3642,-3422,-3433]]},{"type":"Polygon","id":20147,"arcs":[[-3635,3650,3651,-3648,-3432,-3413]]},{"type":"Polygon","id":20117,"arcs":[[-3486,3652,3653,3654,-3638,-3316]]},{"type":"Polygon","id":8001,"arcs":[[-3371,3655,3656,3657,-3594,-3593,-2964,-3313]]},{"type":"Polygon","id":20013,"arcs":[[3658,3659,3660,3661,-3489]]},{"type":"Polygon","id":20131,"arcs":[[-3490,-3662,3662,3663,-3653,-3485]]},{"type":"Polygon","id":20043,"arcs":[[-3492,-3561,3664,3665,-3659,-3488]]},{"type":"Polygon","id":34007,"arcs":[[3666,3667,3668,-3524]]},{"type":"Polygon","id":17167,"arcs":[[-3592,3669,3670,3671,3672,-3566,-3538,-3442]]},{"type":"Polygon","id":29117,"arcs":[[3673,3674,3675,-3556,-3479,-3604]]},{"type":"Polygon","id":29205,"arcs":[[-3495,3676,3677,-3596,-3454]]},{"type":"Polygon","id":18121,"arcs":[[-3513,3678,3679,3680,-3544,-3401]]},{"type":"Polygon","id":39121,"arcs":[[-3531,3681,3682,3683,-3533,-3504]]},{"type":"Polygon","id":29127,"arcs":[[-3516,3684,3685,3686,-3677,-3494]]},{"type":"Polygon","id":18059,"arcs":[[-3582,3687,3688,3689,-3507,-3396]]},{"type":"Polygon","id":39045,"arcs":[[-3473,3690,3691,3692,-3551]]},{"type":"Polygon","id":8047,"arcs":[[3693,3694,-3329,-3483]]},{"type":"Polygon","id":39127,"arcs":[[3695,3696,3697,-3691,-3472,-3535]]},{"type":"Polygon","id":18097,"arcs":[[-3690,3698,3699,3700,3701,-3527,-3508]]},{"type":"Polygon","id":8037,"arcs":[[3702,3703,3704,-3575,-2974,-3332]]},{"type":"Polygon","id":8117,"arcs":[[3705,3706,3707,-3703,-3331]]},{"type":"Polygon","id":18063,"arcs":[[-3702,3708,3709,-3511,-3528]]},{"type":"Polygon","id":39113,"arcs":[[-3602,3710,3711,3712,3713,-3404,-3518]]},{"type":"Polygon","id":39135,"arcs":[[-3714,3714,3715,-3615,-3405]]},{"type":"Polygon","id":8059,"arcs":[[-3658,3716,3717,3718,3719,3720,3721,-3694,-3482,-3595]]},{"type":"Polygon","id":8031,"arcs":[[3722,-3717,-3657]]},{"type":"Polygon","id":34015,"arcs":[[3723,3724,3725,3726,-3668]]},{"type":"Polygon","id":17045,"arcs":[[3727,3728,3729,3730,-3326,-3546]]},{"type":"Polygon","id":17041,"arcs":[[-3731,3731,3732,-3468,-3386]]},{"type":"Polygon","id":17137,"arcs":[[-3673,3733,3734,3735,3736,-3573,-3567]]},{"type":"Polygon","id":39111,"arcs":[[-3609,3737,3738,3739,-3682,-3530]]},{"type":"Polygon","id":18133,"arcs":[[-3710,3740,3741,3742,-3679,-3512]]},{"type":"Polygon","id":8019,"arcs":[[-3722,3743,-3706,-3330,-3695]]},{"type":"Polygon","id":39057,"arcs":[[-3571,3744,3745,3746,-3711,-3601]]},{"type":"Polygon","id":17149,"arcs":[[-3737,3747,3748,3749,3750,3751,-3685,-3515,-3574]]},{"type":"Polygon","id":10003,"arcs":[[3752,3753,3754,3755,-3497,-3588,3756,-3586]]},{"type":"Polygon","id":17021,"arcs":[[-3591,3757,3758,-3670]]},{"type":"Polygon","id":29021,"arcs":[[-3607,3759,3760,3761,-3665,-3560]]},{"type":"Polygon","id":49007,"arcs":[[-3110,-3103,3762,3763,-3282]]},{"type":"Polygon","id":49039,"arcs":[[-3764,3764,3765,3766,-3613,-3283]]},{"type":"Polygon","id":39129,"arcs":[[-3693,3767,3768,3769,-3569,-3552]]},{"type":"Polygon","id":6021,"arcs":[[-3543,3770,3771,-3624,-3357]]},{"type":"Polygon","id":17139,"arcs":[[-3733,3772,3773,-3589,-3469]]},{"type":"Polygon","id":18041,"arcs":[[3774,3775,3776,-3580,-3617]]},{"type":"Polygon","id":18139,"arcs":[[-3777,3777,3778,3779,-3688,-3581]]},{"type":"Polygon","id":17171,"arcs":[[3780,-3748,-3736]]},{"type":"Polygon","id":29025,"arcs":[[-3676,3781,3782,3783,-3605,-3557]]},{"type":"Polygon","id":34033,"arcs":[[3784,3785,3786,3787,3788,3789,-3726]]},{"type":"Polygon","id":6091,"arcs":[[-2831,-2394,3790,3791,-3359]]},{"type":"Polygon","id":39115,"arcs":[[-3684,3792,3793,-3696,-3534]]},{"type":"Polygon","id":29049,"arcs":[[-3784,3794,3795,3796,-3760,-3606]]},{"type":"Polygon","id":8005,"arcs":[[-3370,3797,3798,3799,-3718,-3723,-3656]]},{"type":"Polygon","id":32019,"arcs":[[3800,3801,3802,3803,3804,-2389,-3647]]},{"type":"Polygon","id":34001,"arcs":[[3805,3806,3807,-3724,-3667,-3523]]},{"type":"Polygon","id":18161,"arcs":[[-3716,3808,3809,-3775,-3616]]},{"type":"Polygon","id":24043,"arcs":[[-3458,3810,3811,3812,3813,3814,3815,-3536]]},{"type":"Polygon","id":24001,"arcs":[[-3537,-3816,3816,3817,3818,3819,-3460,-3445]]},{"type":"Polygon","id":24023,"arcs":[[-3820,3820,3821,3822,-3547,-3461]]},{"type":"Polygon","id":24015,"arcs":[[-3756,3823,3824,3825,-3448,-3498]]},{"type":"Polygon","id":54061,"arcs":[[-3549,3826,3827,3828,3829,-3611]]},{"type":"Polygon","id":54077,"arcs":[[-3823,3830,3831,3832,3833,-3827,-3548]]},{"type":"Polygon","id":24025,"arcs":[[-3449,-3826,3834,3835,-3499]]},{"type":"Polygon","id":54103,"arcs":[[-3612,-3830,3836,3837,3838,3839,-3738,-3608]]},{"type":"Polygon","id":24005,"arcs":[[-3836,3840,3841,3842,3843,3844,-3500]]},{"type":"Polygon","id":24013,"arcs":[[-3845,3845,3846,-3583,-3501]]},{"type":"Polygon","id":24021,"arcs":[[-3847,3847,3848,3849,-3811,-3457,-3584]]},{"type":"Polygon","id":39047,"arcs":[[-3770,3850,3851,3852,-3745,-3570]]},{"type":"Polygon","id":49015,"arcs":[[-3102,3853,3854,3855,-3765,-3763]]},{"type":"Polygon","id":29041,"arcs":[[-3599,3856,3857,3858,3859,-3674,-3603]]},{"type":"Polygon","id":18145,"arcs":[[-3780,3860,3861,3862,-3699,-3689]]},{"type":"Polygon","id":54065,"arcs":[[3863,3864,3865,-3817,-3815]]},{"type":"Polygon","id":29173,"arcs":[[-3752,3866,3867,3868,-3686]]},{"type":"Polygon","id":17029,"arcs":[[-3730,3869,3870,3871,-3773,-3732]]},{"type":"Polygon","id":29137,"arcs":[[-3687,-3869,3872,3873,-3597,-3678]]},{"type":"Polygon","id":39073,"arcs":[[3874,3875,3876,-3768,-3692,-3698]]},{"type":"Polygon","id":20029,"arcs":[[-3641,3877,3878,3879,-3629,-3637]]},{"type":"Polygon","id":20085,"arcs":[[3880,3881,3882,3883,-3663,-3661]]},{"type":"Polygon","id":20005,"arcs":[[-3762,3884,3885,3886,-3881,-3660,-3666]]},{"type":"Polygon","id":17173,"arcs":[[-3774,-3872,3887,3888,3889,3890,-3758,-3590]]},{"type":"Polygon","id":54057,"arcs":[[3891,3892,-3821,-3819]]},{"type":"Polygon","id":39167,"arcs":[[-3740,3893,3894,3895,3896,-3793,-3683]]},{"type":"Polygon","id":54049,"arcs":[[-3829,3897,3898,-3837]]},{"type":"Polygon","id":18081,"arcs":[[-3863,3899,3900,3901,-3700]]},{"type":"Polygon","id":6115,"arcs":[[-3792,3902,3903,3904,-3540,-3360]]},{"type":"Polygon","id":18109,"arcs":[[-3902,3905,3906,3907,-3741,-3709,-3701]]},{"type":"Polygon","id":32029,"arcs":[[-2390,-3805]]},{"type":"Polygon","id":54003,"arcs":[[-3814,3908,3909,-3864]]},{"type":"Polygon","id":29033,"arcs":[[-3860,3910,3911,3912,-3782,-3675]]},{"type":"Polygon","id":29175,"arcs":[[-3874,3913,3914,3915,-3857,-3598]]},{"type":"Polygon","id":18167,"arcs":[[3916,3917,3918,-3728,-3545,-3681]]},{"type":"Polygon","id":18021,"arcs":[[-3743,3919,3920,3921,-3917,-3680]]},{"type":"Polygon","id":54095,"arcs":[[3922,3923,3924,-3894,-3739,-3840]]},{"type":"Polygon","id":29163,"arcs":[[3925,3926,3927,-3867,-3751,3928]]},{"type":"Polygon","id":39017,"arcs":[[3929,3930,3931,-3809,-3715,-3713]]},{"type":"Polygon","id":39165,"arcs":[[-3747,3932,3933,3934,-3930,-3712]]},{"type":"Polygon","id":6033,"arcs":[[3935,3936,3937,3938,-3625,-3772]]},{"type":"Polygon","id":8063,"arcs":[[-3620,3939,3940,3941,3942,-3368,-3366]]},{"type":"Polygon","id":34011,"arcs":[[3943,3944,-3785,-3725,-3808,3945,3946]]},{"type":"Polygon","id":20163,"arcs":[[3947,3948,3949,3950,-3651,-3634]]},{"type":"Polygon","id":39027,"arcs":[[3951,3952,-3933,-3746,-3853,3953]]},{"type":"Polygon","id":20181,"arcs":[[-3623,3954,3955,3956,-3940,-3619]]},{"type":"Polygon","id":20193,"arcs":[[-3644,3957,3958,3959,-3955,-3622]]},{"type":"Polygon","id":20141,"arcs":[[-3631,3960,3961,3962,3963,-3948,-3633]]},{"type":"Polygon","id":20179,"arcs":[[-3650,3964,3965,-3958,-3643]]},{"type":"Polygon","id":20027,"arcs":[[3966,3967,3968,3969,-3878,-3640]]},{"type":"Polygon","id":20123,"arcs":[[-3880,3970,3971,-3961,-3630]]},{"type":"Polygon","id":20065,"arcs":[[-3951,3972,3973,-3965,-3649,-3652]]},{"type":"Polygon","id":20161,"arcs":[[3974,3975,3976,-3967,-3639,-3655]]},{"type":"Polygon","id":8035,"arcs":[[3977,3978,3979,-3719,-3800]]},{"type":"Polygon","id":8039,"arcs":[[3980,3981,-3978,-3799]]},{"type":"Polygon","id":20149,"arcs":[[-3664,-3884,3982,3983,-3975,-3654]]},{"type":"Polygon","id":8073,"arcs":[[-3943,3984,3985,3986,3987,-3981,-3798,-3369]]},{"type":"Polygon","id":8093,"arcs":[[-3721,3988,3989,3990,3991,-3707,-3744]]},{"type":"Polygon","id":39009,"arcs":[[-3897,3992,3993,3994,-3875,-3697,-3794]]},{"type":"Polygon","id":49027,"arcs":[[-3767,3995,3996,3997,-3563,-3614]]},{"type":"Polygon","id":54027,"arcs":[[-3866,3998,3999,-3892,-3818]]},{"type":"Polygon","id":29165,"arcs":[[-3761,-3797,4000,4001,4002,-3885]]},{"type":"Polygon","id":18047,"arcs":[[-3810,-3932,4003,4004,4005,-3778,-3776]]},{"type":"Polygon","id":29177,"arcs":[[-3913,4006,4007,4008,-3795,-3783]]},{"type":"Polygon","id":17135,"arcs":[[-3759,-3891,4009,4010,4011,4012,-3671]]},{"type":"Polygon","id":17117,"arcs":[[-4013,4013,4014,4015,-3734,-3672]]},{"type":"Polygon","id":6057,"arcs":[[-2393,4016,-3903,-3791]]},{"type":"Polygon","id":17061,"arcs":[[-3735,-4016,4017,4018,-3749,-3781]]},{"type":"Polygon","id":39141,"arcs":[[-3877,4019,4020,4021,4022,-3851,-3769]]},{"type":"Polygon","id":54037,"arcs":[[4023,4024,-3909,-3813]]},{"type":"Polygon","id":49019,"arcs":[[-3578,4025,4026,-3854,-3101]]},{"type":"Polygon","id":17023,"arcs":[[-3919,4027,4028,4029,4030,-3870,-3729]]},{"type":"Polygon","id":54073,"arcs":[[4031,4032,-3895,-3925]]},{"type":"Polygon","id":18119,"arcs":[[-3908,4033,4034,-3920,-3742]]},{"type":"Polygon","id":54033,"arcs":[[4035,4036,4037,4038,4039,-3838,-3899]]},{"type":"Polygon","id":51069,"arcs":[[4040,4041,4042,4043,-3999,-3865,-3910]]},{"type":"Polygon","id":29047,"arcs":[[-3796,-4009,4044,4045,-4001]]},{"type":"Polygon","id":18031,"arcs":[[-4006,4046,4047,4048,-3861,-3779]]},{"type":"Polygon","id":54091,"arcs":[[4049,-4036,-3898,-3828,-3834]]},{"type":"Polygon","id":54017,"arcs":[[-4040,4050,4051,4052,-3923,-3839]]},{"type":"Polygon","id":20087,"arcs":[[4053,4054,4055,-3882,-3887]]},{"type":"Polygon","id":20103,"arcs":[[-4003,4056,4057,4058,-4054,-3886]]},{"type":"Polygon","id":6011,"arcs":[[-3542,4059,4060,-3936,-3771]]},{"type":"Polygon","id":29195,"arcs":[[-3859,4061,4062,4063,4064,-3911]]},{"type":"Polygon","id":54107,"arcs":[[-4033,4065,4066,4067,4068,-3993,-3896]]},{"type":"Polygon","id":17013,"arcs":[[-4019,4069,4070,4071,-3929,-3750]]},{"type":"Polygon","id":39163,"arcs":[[-3995,4072,4073,4074,-4020,-3876]]},{"type":"Polygon","id":54085,"arcs":[[-4053,4075,4076,4077,-4066,-4032,-3924]]},{"type":"Polygon","id":24029,"arcs":[[-3755,4078,4079,4080,-3824]]},{"type":"Polygon","id":8065,"arcs":[[-3708,-3992,4081,4082,-3704]]},{"type":"Polygon","id":17035,"arcs":[[-4031,4083,4084,-3888,-3871]]},{"type":"Polygon","id":39071,"arcs":[[-4023,4085,4086,4087,-3954,-3852]]},{"type":"Polygon","id":24510,"arcs":[[4088,4089,-3842]]},{"type":"Polygon","id":24027,"arcs":[[-3844,4090,4091,4092,-3848,-3846]]},{"type":"Polygon","id":8077,"arcs":[[4093,4094,4095,4096,-4026,-3577]]},{"type":"Polygon","id":8097,"arcs":[[-4083,4097,4098,-4094,-3576,-3705]]},{"type":"Polygon","id":10001,"arcs":[[4099,4100,4101,-4079,-3754,4102]]},{"type":"Polygon","id":18105,"arcs":[[4103,4104,4105,4106,-4034,-3907]]},{"type":"Polygon","id":18005,"arcs":[[-4049,4107,4108,4109,-3900,-3862]]},{"type":"Polygon","id":29007,"arcs":[[-3868,-3928,4110,4111,4112,-3914,-3873]]},{"type":"Polygon","id":24031,"arcs":[[4113,4114,4115,4116,-3849,-4093]]},{"type":"Polygon","id":18013,"arcs":[[-4110,4117,-4104,-3906,-3901]]},{"type":"Polygon","id":29089,"arcs":[[4118,-4062,-3858,-3916,4119]]},{"type":"Polygon","id":54023,"arcs":[[4120,4121,4122,4123,-3831,-3822,-3893]]},{"type":"Polygon","id":34009,"arcs":[[4124,-3946,-3807]]},{"type":"Polygon","id":51107,"arcs":[[-4117,4125,4126,4127,4128,-4024,-3812,-3850]]},{"type":"Polygon","id":6061,"arcs":[[-2392,4129,4130,4131,4132,4133,-3904,-4017]]},{"type":"Polygon","id":39061,"arcs":[[-3935,4134,4135,4136,4137,4138,-3931]]},{"type":"Polygon","id":18137,"arcs":[[4139,4140,4141,4142,4143,-4047,-4005]]},{"type":"Polygon","id":18029,"arcs":[[-4004,-4139,4144,4145,-4140]]},{"type":"Polygon","id":20143,"arcs":[[-3970,4146,4147,4148,-3971,-3879]]},{"type":"Polygon","id":6101,"arcs":[[-3905,-4134,4149,4150,-4060,-3541]]},{"type":"Polygon","id":54001,"arcs":[[4151,4152,4153,-4037,-4050,-3833]]},{"type":"Polygon","id":29107,"arcs":[[4154,4155,4156,-4007,-3912,-4065]]},{"type":"Polygon","id":54093,"arcs":[[4157,-4152,-3832,-4124]]},{"type":"Polygon","id":39025,"arcs":[[4158,4159,4160,-4135,-3934,-3953,4161]]},{"type":"Polygon","id":51043,"arcs":[[-4129,4162,4163,-4041,-4025]]},{"type":"Polygon","id":17083,"arcs":[[-4015,4164,4165,-4070,-4018]]},{"type":"MultiPolygon","id":24035,"arcs":[[[4166]],[[-4102,4167,4168,4169,-4080]]]},{"type":"Polygon","id":18153,"arcs":[[-3922,4170,4171,4172,-4028,-3918]]},{"type":"Polygon","id":8051,"arcs":[[-4099,4173,4174,4175,4176,4177,4178,-4095]]},{"type":"Polygon","id":39015,"arcs":[[4179,4180,4181,-4162,-3952,-4088]]},{"type":"Polygon","id":29019,"arcs":[[-4113,4182,4183,4184,4185,-4120,-3915]]},{"type":"Polygon","id":32510,"arcs":[[4186,-4130,-2391,-3804]]},{"type":"Polygon","id":54031,"arcs":[[-4044,4187,4188,4189,-4121,-4000]]},{"type":"Polygon","id":24003,"arcs":[[4190,4191,-4091,-3843,-4090,4192,4193,4194]]},{"type":"Polygon","id":29095,"arcs":[[-4008,-4157,4195,4196,4197,4198,-4045]]},{"type":"Polygon","id":29113,"arcs":[[-4072,4199,4200,4201,-3926]]},{"type":"Polygon","id":20061,"arcs":[[4202,4203,4204,-3968,-3977]]},{"type":"Polygon","id":8029,"arcs":[[-4179,4205,-4096]]},{"type":"Polygon","id":20105,"arcs":[[-4149,4206,4207,4208,-3962,-3972]]},{"type":"Polygon","id":20177,"arcs":[[-4056,4209,4210,4211,-3983,-3883]]},{"type":"Polygon","id":17051,"arcs":[[-3890,4212,4213,4214,4215,4216,-4010]]},{"type":"Polygon","id":17049,"arcs":[[-4085,4217,4218,-4213,-3889]]},{"type":"Polygon","id":20197,"arcs":[[-4212,4219,4220,4221,-4203,-3976,-3984]]},{"type":"Polygon","id":39079,"arcs":[[4222,4223,4224,4225,-4021,-4075]]},{"type":"Polygon","id":39105,"arcs":[[4226,4227,-4073,-3994,-4069,4228]]},{"type":"Polygon","id":20209,"arcs":[[-4002,-4046,-4199,4229,-4057]]},{"type":"Polygon","id":39131,"arcs":[[4230,4231,-4086,-4022,-4226]]},{"type":"Polygon","id":18079,"arcs":[[4232,4233,4234,-4108,-4048,-4144]]},{"type":"Polygon","id":54105,"arcs":[[4235,4236,4237,-4067,-4078]]},{"type":"Polygon","id":17033,"arcs":[[-4173,4238,4239,4240,4241,-4029]]},{"type":"Polygon","id":17079,"arcs":[[-4242,4242,4243,-4218,-4084,-4030]]},{"type":"Polygon","id":18055,"arcs":[[-4035,-4107,4244,4245,4246,4247,-4171,-3921]]},{"type":"Polygon","id":54041,"arcs":[[4248,4249,4250,4251,-4051,-4039]]},{"type":"Polygon","id":32023,"arcs":[[-2993,-3565,4252,4253,4254,4255,4256,-3645,-2995]]},{"type":"Polygon","id":29139,"arcs":[[-3927,-4202,4257,4258,4259,4260,-4111]]},{"type":"Polygon","id":21015,"arcs":[[4261,4262,4263,4264,4265,-4145,-4138]]},{"type":"Polygon","id":24011,"arcs":[[4266,4267,4268,4269,-4168,-4101]]},{"type":"Polygon","id":20109,"arcs":[[4270,4271,4272,4273,-3956,-3960]]},{"type":"Polygon","id":20199,"arcs":[[-4274,4274,4275,4276,-3941,-3957]]},{"type":"Polygon","id":20051,"arcs":[[-3964,4277,4278,4279,4280,-3949]]},{"type":"Polygon","id":20063,"arcs":[[-3966,-3974,4281,4282,4283,4284,-4271,-3959]]},{"type":"Polygon","id":20041,"arcs":[[-4205,4285,4286,4287,-4147,-3969]]},{"type":"Polygon","id":20167,"arcs":[[-4209,4288,4289,4290,-4278,-3963]]},{"type":"Polygon","id":20195,"arcs":[[-3950,-4281,4291,-4282,-3973]]},{"type":"Polygon","id":24033,"arcs":[[-4192,4292,4293,4294,4295,4296,-4114,-4092]]},{"type":"Polygon","id":8119,"arcs":[[4297,4298,-3989,-3720,-3980]]},{"type":"Polygon","id":8041,"arcs":[[-3982,-3988,4299,4300,-4298,-3979]]},{"type":"Polygon","id":21037,"arcs":[[-4161,4301,4302,-4136]]},{"type":"Polygon","id":54083,"arcs":[[-4123,4303,4304,4305,4306,-4153,-4158]]},{"type":"Polygon","id":32005,"arcs":[[-3803,4307,4308,4309,-4131,-4187]]},{"type":"Polygon","id":54097,"arcs":[[-4154,-4307,4310,-4249,-4038]]},{"type":"Polygon","id":54021,"arcs":[[-4252,4311,4312,-4076,-4052]]},{"type":"Polygon","id":51171,"arcs":[[4313,4314,4315,-4188,-4043]]},{"type":"Polygon","id":21117,"arcs":[[-4303,4316,4317,-4262,-4137]]},{"type":"Polygon","id":54035,"arcs":[[-4238,4318,4319,4320,4321,-4229,-4068]]},{"type":"Polygon","id":32021,"arcs":[[-4257,4322,4323,-3801,-3646]]},{"type":"Polygon","id":18071,"arcs":[[-4235,4324,4325,4326,-4105,-4118,-4109]]},{"type":"Polygon","id":20045,"arcs":[[-4059,4327,4328,4329,-4210,-4055]]},{"type":"Polygon","id":6017,"arcs":[[-4310,4330,4331,4332,-4132]]},{"type":"Polygon","id":29027,"arcs":[[-4112,-4261,4333,4334,-4183]]},{"type":"Polygon","id":29053,"arcs":[[-4186,4335,4336,4337,-4063,-4119]]},{"type":"Polygon","id":51059,"arcs":[[4338,4339,4340,4341,4342,4343,-4126,-4116]]},{"type":"Polygon","id":8015,"arcs":[[-3991,4344,4345,-4174,-4098,-4082]]},{"type":"Polygon","id":20091,"arcs":[[-4198,4346,4347,-4328,-4058,-4230]]},{"type":"Polygon","id":39001,"arcs":[[4348,4349,4350,-4180,-4087,-4232]]},{"type":"Polygon","id":49041,"arcs":[[-3856,4351,4352,4353,-3996,-3766]]},{"type":"Polygon","id":8017,"arcs":[[-4277,4354,4355,-3985,-3942]]},{"type":"Polygon","id":54013,"arcs":[[-4313,4356,4357,4358,-4236,-4077]]},{"type":"Polygon","id":51187,"arcs":[[4359,4360,4361,-4314,-4042,-4164]]},{"type":"Polygon","id":39053,"arcs":[[4362,4363,4364,-4223,-4074,-4228]]},{"type":"Polygon","id":18115,"arcs":[[4365,-4141,-4146,-4266]]},{"type":"Polygon","id":54053,"arcs":[[-4322,4366,4367,-4363,-4227]]},{"type":"Polygon","id":17005,"arcs":[[-4217,4368,4369,-4011]]},{"type":"Polygon","id":39145,"arcs":[[-4225,4370,4371,4372,-4349,-4231]]},{"type":"Polygon","id":51061,"arcs":[[4373,4374,4375,4376,-4360,-4163,-4128]]},{"type":"Polygon","id":17119,"arcs":[[-4014,-4012,-4370,4377,4378,4379,4380,4381,-4165]]},{"type":"Polygon","id":29219,"arcs":[[4382,4383,4384,-4258,-4201]]},{"type":"Polygon","id":11001,"arcs":[[4385,4386,-4115,-4297]]},{"type":"Polygon","id":18093,"arcs":[[-4327,4387,4388,4389,-4245,-4106]]},{"type":"Polygon","id":29183,"arcs":[[-4382,4390,4391,-4383,-4200,-4071,-4166]]},{"type":"Polygon","id":10005,"arcs":[[4392,4393,4394,4395,4396,4397,-4267,-4100]]},{"type":"Polygon","id":20169,"arcs":[[-4288,4398,4399,-4207,-4148]]},{"type":"Polygon","id":54071,"arcs":[[-4190,4400,4401,4402,4403,-4304,-4122]]},{"type":"Polygon","id":29159,"arcs":[[-4338,4404,4405,4406,4407,-4155,-4064]]},{"type":"Polygon","id":24041,"arcs":[[-4270,4408,-4169]]},{"type":"Polygon","id":51153,"arcs":[[-4344,4409,4410,-4374,-4127]]},{"type":"Polygon","id":54087,"arcs":[[-4359,4411,4412,-4319,-4237]]},{"type":"Polygon","id":29101,"arcs":[[-4408,4413,4414,-4196,-4156]]},{"type":"Polygon","id":51013,"arcs":[[4415,-4341,4416,-4339,-4387,4417]]},{"type":"Polygon","id":6003,"arcs":[[4418,4419,4420,4421,-4331,-4309]]},{"type":"Polygon","id":18155,"arcs":[[-4265,4422,4423,4424,-4142,-4366]]},{"type":"Polygon","id":29135,"arcs":[[4425,4426,4427,-4336,-4185]]},{"type":"Polygon","id":6113,"arcs":[[-4151,4428,4429,4430,-4431,4431,-3937,-4061]]},{"type":"Polygon","id":18077,"arcs":[[-4425,4432,4433,4434,4435,-4233,-4143]]},{"type":"Polygon","id":17025,"arcs":[[-4244,4436,4437,4438,-4214,-4219]]},{"type":"Polygon","id":18083,"arcs":[[4439,4440,4441,4442,4443,4444,-4239,-4172,-4248]]},{"type":"Polygon","id":18101,"arcs":[[-4390,4445,4446,4447,-4246]]},{"type":"Polygon","id":18027,"arcs":[[4448,4449,-4440,-4247,-4448]]},{"type":"Polygon","id":54007,"arcs":[[-4251,4450,4451,4452,-4357,-4312]]},{"type":"Polygon","id":29189,"arcs":[[-4381,4453,4454,4455,4456,4457,-4391]]},{"type":"Polygon","id":21191,"arcs":[[4458,4459,4460,-4317,-4302,-4160,4461]]},{"type":"Polygon","id":20127,"arcs":[[-4222,4462,4463,4464,-4286,-4204]]},{"type":"Polygon","id":20053,"arcs":[[-4400,4465,4466,4467,-4289,-4208]]},{"type":"Polygon","id":20139,"arcs":[[-4330,4468,4469,4470,-4220,-4211]]},{"type":"Polygon","id":6055,"arcs":[[4430,4471,4472,4473,4474,4475,-3938,-4432]]},{"type":"Polygon","id":51157,"arcs":[[4476,4477,4478,-4361,-4377]]},{"type":"Polygon","id":21077,"arcs":[[4479,4480,4481,-4423,-4264]]},{"type":"Polygon","id":6097,"arcs":[[-3939,-4476,4482,4483,4484,-3626]]},{"type":"Polygon","id":17101,"arcs":[[4485,4486,-4240,-4445]]},{"type":"Polygon","id":51165,"arcs":[[-4316,4487,4488,4489,4490,-4401,-4189]]},{"type":"Polygon","id":17159,"arcs":[[-4241,-4487,4491,4492,4493,-4437,-4243]]},{"type":"Polygon","id":39087,"arcs":[[4494,4495,4496,4497,-4371,-4224,-4365]]},{"type":"Polygon","id":29037,"arcs":[[-4415,4498,4499,4500,-4347,-4197]]},{"type":"Polygon","id":51139,"arcs":[[-4479,4501,4502,-4488,-4315,-4362]]},{"type":"Polygon","id":18143,"arcs":[[-4436,4503,4504,-4325,-4234]]},{"type":"Polygon","id":21023,"arcs":[[-4182,4505,4506,4507,-4462,-4159]]},{"type":"Polygon","id":17121,"arcs":[[-4439,4508,4509,4510,4511,-4215]]},{"type":"Polygon","id":21081,"arcs":[[-4318,-4461,4512,4513,4514,-4480,-4263]]},{"type":"Polygon","id":18175,"arcs":[[-4505,4515,4516,4517,4518,4519,-4388,-4326]]},{"type":"Polygon","id":29510,"arcs":[[-4454,-4380,4520]]},{"type":"Polygon","id":24009,"arcs":[[4521,-4293,-4191]]},{"type":"Polygon","id":21161,"arcs":[[-4351,4522,4523,4524,-4506,-4181]]},{"type":"Polygon","id":21041,"arcs":[[4525,4526,4527,-4433,-4424,-4482]]},{"type":"Polygon","id":21089,"arcs":[[-4498,4528,4529,4530,-4372]]},{"type":"Polygon","id":17027,"arcs":[[-4216,-4512,4531,4532,4533,-4378,-4369]]},{"type":"Polygon","id":54075,"arcs":[[-4404,4534,4535,4536,4537,-4305]]},{"type":"Polygon","id":29051,"arcs":[[-4335,4538,4539,-4426,-4184]]},{"type":"Polygon","id":20111,"arcs":[[-4471,4540,4541,4542,-4463,-4221]]},{"type":"Polygon","id":20059,"arcs":[[4543,4544,4545,-4469,-4329]]},{"type":"Polygon","id":20121,"arcs":[[-4501,4546,4547,-4544,-4348]]},{"type":"Polygon","id":54101,"arcs":[[-4311,-4306,-4538,4548,4549,-4451,-4250]]},{"type":"Polygon","id":6067,"arcs":[[4550,4551,4552,4553,-4429,-4150,-4133,-4333]]},{"type":"Polygon","id":21223,"arcs":[[-4528,4554,4555,4556,-4434]]},{"type":"Polygon","id":21187,"arcs":[[-4515,4557,4558,4559,-4526,-4481]]},{"type":"Polygon","id":21135,"arcs":[[4560,4561,4562,-4523,-4350,-4373,-4531]]},{"type":"Polygon","id":29073,"arcs":[[-4385,4563,4564,4565,4566,4567,-4259]]},{"type":"Polygon","id":6051,"arcs":[[-3802,-4324,4568,4569,4570,4571,4572,-4419,-4308]]},{"type":"Polygon","id":29071,"arcs":[[-4392,-4458,4573,4574,4575,-4564,-4384]]},{"type":"Polygon","id":29151,"arcs":[[-4260,-4568,4576,4577,-4539,-4334]]},{"type":"Polygon","id":6005,"arcs":[[-4422,4578,4579,-4551,-4332]]},{"type":"Polygon","id":24019,"arcs":[[-4268,-4398,4580,4581]]},{"type":"Polygon","id":20171,"arcs":[[-4285,4582,4583,4584,4585,-4272]]},{"type":"Polygon","id":20101,"arcs":[[4586,4587,-4583,-4284]]},{"type":"Polygon","id":20071,"arcs":[[4588,4589,4590,4591,-4355,-4276]]},{"type":"Polygon","id":20203,"arcs":[[-4586,4592,4593,-4589,-4275,-4273]]},{"type":"Polygon","id":51047,"arcs":[[4594,4595,4596,4597,-4477,-4376]]},{"type":"Polygon","id":20135,"arcs":[[-4292,-4280,4598,4599,4600,4601,-4587,-4283]]},{"type":"Polygon","id":29141,"arcs":[[-4428,4602,4603,4604,-4405,-4337]]},{"type":"Polygon","id":20009,"arcs":[[-4468,4605,4606,4607,4608,-4290]]},{"type":"Polygon","id":8043,"arcs":[[-4301,4609,4610,4611,-4345,-3990,-4299]]},{"type":"Polygon","id":20165,"arcs":[[-4291,-4609,4612,-4599,-4279]]},{"type":"Polygon","id":24017,"arcs":[[-4295,4613,4614,4615]]},{"type":"Polygon","id":18117,"arcs":[[-4520,4616,4617,-4446,-4389]]},{"type":"Polygon","id":54079,"arcs":[[4618,4619,-4367,-4321,4620]]},{"type":"Polygon","id":32017,"arcs":[[-3998,4621,4622,4623,4624,4625,-4253,-3564]]},{"type":"Polygon","id":8085,"arcs":[[-4178,4626,4627,4628,-4097,-4206]]},{"type":"Polygon","id":54015,"arcs":[[4629,4630,-4412,-4358,-4453]]},{"type":"Polygon","id":17163,"arcs":[[-4534,4631,4632,4633,-4455,-4521,-4379]]},{"type":"Polygon","id":51113,"arcs":[[-4598,4634,4635,-4502,-4478]]},{"type":"Polygon","id":54039,"arcs":[[-4413,-4631,4636,4637,4638,4639,4640,-4621,-4320]]},{"type":"Polygon","id":8061,"arcs":[[-4592,4641,4642,4643,4644,-3986,-4356]]},{"type":"Polygon","id":20113,"arcs":[[4645,4646,4647,4648,-4466,-4399]]},{"type":"Polygon","id":20115,"arcs":[[-4465,4649,4650,4651,-4646,-4287]]},{"type":"Polygon","id":21201,"arcs":[[-4525,4652,4653,4654,-4507]]},{"type":"Polygon","id":17191,"arcs":[[-4494,4655,4656,4657,4658,-4509,-4438]]},{"type":"Polygon","id":18019,"arcs":[[-4557,4659,4660,4661,-4516,-4504,-4435]]},{"type":"Polygon","id":54011,"arcs":[[-4368,-4620,4662,4663,-4495,-4364]]},{"type":"Polygon","id":21103,"arcs":[[4664,4665,4666,-4555,-4527,-4560]]},{"type":"Polygon","id":51091,"arcs":[[4667,4668,-4535,-4403]]},{"type":"Polygon","id":51179,"arcs":[[4669,4670,4671,4672,4673,4674,-4595,-4375,-4411]]},{"type":"Polygon","id":21097,"arcs":[[-4655,4675,4676,4677,-4513,-4460,-4459,-4508]]},{"type":"Polygon","id":49001,"arcs":[[-4354,4678,4679,4680,-4622,-3997]]},{"type":"Polygon","id":17047,"arcs":[[4681,4682,-4656,-4493]]},{"type":"Polygon","id":17185,"arcs":[[-4492,-4486,-4444,4683,4684,-4682]]},{"type":"Polygon","id":29083,"arcs":[[-4407,4685,4686,4687,-4499,-4414]]},{"type":"Polygon","id":24045,"arcs":[[4688,4689,4690,-4581,-4397]]},{"type":"Polygon","id":54067,"arcs":[[-4550,4691,4692,-4637,-4630,-4452]]},{"type":"Polygon","id":18125,"arcs":[[4693,4694,4695,-4441,-4450]]},{"type":"MultiPolygon","id":6095,"arcs":[[[4696,-4474]],[[-4554,4697,-4472,-4431,-4430]]]},{"type":"Polygon","id":29015,"arcs":[[-4605,4698,4699,4700,-4686,-4406]]},{"type":"Polygon","id":18051,"arcs":[[4701,4702,4703,4704,-4684,-4443,-4442,-4696]]},{"type":"Polygon","id":18037,"arcs":[[-4618,4705,4706,4707,4708,-4694,-4449,-4447]]},{"type":"Polygon","id":21069,"arcs":[[4709,4710,4711,-4653,-4524,-4563]]},{"type":"Polygon","id":21185,"arcs":[[-4667,4712,4713,-4660,-4556]]},{"type":"Polygon","id":20017,"arcs":[[-4543,4714,4715,-4650,-4464]]},{"type":"Polygon","id":8101,"arcs":[[4716,4717,4718,4719,4720,-4610,-4300]]},{"type":"Polygon","id":8025,"arcs":[[-4645,4721,4722,-4717,-3987]]},{"type":"Polygon","id":20159,"arcs":[[-4649,4723,4724,-4606,-4467]]},{"type":"Polygon","id":17133,"arcs":[[4725,4726,4727,-4456,-4634]]},{"type":"Polygon","id":17189,"arcs":[[-4532,-4511,4728,4729,4730,-4632,-4533]]},{"type":"Polygon","id":24037,"arcs":[[-4615,4731]]},{"type":"Polygon","id":6009,"arcs":[[-4421,4732,4733,4734,-4579]]},{"type":"Polygon","id":49031,"arcs":[[4735,4736,-4679,-4353]]},{"type":"Polygon","id":49055,"arcs":[[-3855,4737,4738,-4736,-4352]]},{"type":"Polygon","id":29099,"arcs":[[-4728,4739,4740,4741,-4574,-4457]]},{"type":"Polygon","id":21019,"arcs":[[4742,4743,-4529,-4497,4744]]},{"type":"Polygon","id":21043,"arcs":[[-4744,4745,4746,4747,-4561,-4530]]},{"type":"Polygon","id":49037,"arcs":[[-4629,4748,4749,4750,4751,4752,4753,4754,4755,-4738,-4027]]},{"type":"Polygon","id":21209,"arcs":[[4756,4757,4758,4759,-4558,-4514,-4678]]},{"type":"Polygon","id":51079,"arcs":[[4760,4761,-4489,-4503,-4636]]},{"type":"Polygon","id":51015,"arcs":[[4762,4763,4764,4765,-4668,-4402,-4491]]},{"type":"Polygon","id":17081,"arcs":[[-4659,4766,4767,4768,-4729,-4510]]},{"type":"Polygon","id":29013,"arcs":[[-4688,4769,4770,4771,-4547,-4500]]},{"type":"Polygon","id":32009,"arcs":[[4772,-4569,-4323,-4256]]},{"type":"Polygon","id":21181,"arcs":[[-4712,4773,4774,-4676,-4654]]},{"type":"Polygon","id":8109,"arcs":[[-4612,4775,4776,4777,4778,4779,4780,-4175,-4346]]},{"type":"MultiPolygon","id":24047,"arcs":[[[4781,4782,4783,-4689,-4396,4784]]]},{"type":"Polygon","id":6109,"arcs":[[-4573,4785,4786,4787,-4733,-4420]]},{"type":"Polygon","id":20031,"arcs":[[-4546,4788,4789,4790,-4541,-4470]]},{"type":"Polygon","id":29131,"arcs":[[-4540,-4578,4791,4792,4793,-4603,-4427]]},{"type":"Polygon","id":18025,"arcs":[[4794,4795,4796,-4706,-4617,-4519]]},{"type":"Polygon","id":18061,"arcs":[[4797,4798,4799,4800,-4795,-4518]]},{"type":"Polygon","id":54099,"arcs":[[-4664,4801,4802,4803,4804,-4745,-4496]]},{"type":"Polygon","id":18043,"arcs":[[-4662,4805,-4798,-4517]]},{"type":"Polygon","id":51099,"arcs":[[4806,4807,4808,4809,-4671,4810]]},{"type":"Polygon","id":21205,"arcs":[[-4748,4811,4812,4813,4814,-4710,-4562]]},{"type":"Polygon","id":51137,"arcs":[[4815,4816,4817,-4761,-4635,-4597]]},{"type":"Polygon","id":20003,"arcs":[[4818,4819,-4789,-4545]]},{"type":"Polygon","id":20107,"arcs":[[-4772,4820,4821,-4819,-4548]]},{"type":"Polygon","id":21111,"arcs":[[4822,4823,4824,4825,-4799,-4806,-4661,-4714]]},{"type":"Polygon","id":51177,"arcs":[[-4675,4826,-4673,4827,4828,4829,-4816,-4596]]},{"type":"Polygon","id":54043,"arcs":[[-4619,-4641,4830,4831,4832,-4802,-4663]]},{"type":"Polygon","id":21073,"arcs":[[-4559,-4760,4833,4834,4835,-4665]]},{"type":"Polygon","id":21017,"arcs":[[4836,4837,4838,-4757,-4677,-4775]]},{"type":"Polygon","id":21211,"arcs":[[4839,4840,-4823,-4713,-4666,-4836]]},{"type":"Polygon","id":20145,"arcs":[[-4608,4841,4842,4843,-4600,-4613]]},{"type":"Polygon","id":8091,"arcs":[[-4177,4844,4845,4846,-4627]]},{"type":"Polygon","id":6041,"arcs":[[4847,-4484]]},{"type":"Polygon","id":21011,"arcs":[[-4815,4848,4849,-4774,-4711]]},{"type":"Polygon","id":6077,"arcs":[[-4580,-4735,4850,4851,4852,4853,-4552]]},{"type":"Polygon","id":29125,"arcs":[[-4567,4854,4855,-4792,-4577]]},{"type":"Polygon","id":24039,"arcs":[[-4690,-4784,4856,4857,4858]]},{"type":"Polygon","id":51003,"arcs":[[-4818,4859,4860,4861,4862,-4763,-4490,-4762]]},{"type":"Polygon","id":51193,"arcs":[[4863,4864,4865,-4807,4866]]},{"type":"Polygon","id":29029,"arcs":[[-4794,4867,4868,4869,4870,-4699,-4604]]},{"type":"Polygon","id":21127,"arcs":[[-4805,4871,4872,4873,4874,-4746,-4743]]},{"type":"Polygon","id":51017,"arcs":[[-4669,-4766,4875,4876,4877,-4536]]},{"type":"Polygon","id":8099,"arcs":[[-4591,4878,4879,4880,4881,-4642]]},{"type":"Polygon","id":54025,"arcs":[[-4878,4882,4883,4884,4885,-4692,-4549,-4537]]},{"type":"Polygon","id":21063,"arcs":[[-4875,4886,-4812,-4747]]},{"type":"Polygon","id":8027,"arcs":[[-4721,4887,-4776,-4611]]},{"type":"Polygon","id":8011,"arcs":[[-4882,4888,4889,4890,-4643]]},{"type":"Polygon","id":8089,"arcs":[[-4891,4891,-4718,-4723,-4722,-4644]]},{"type":"Polygon","id":18123,"arcs":[[4892,4893,4894,4895,-4707,-4797]]},{"type":"Polygon","id":54019,"arcs":[[-4693,-4886,4896,4897,-4638]]},{"type":"Polygon","id":20093,"arcs":[[4898,4899,4900,-4593,-4585]]},{"type":"Polygon","id":20055,"arcs":[[-4588,-4602,4901,4902,4903,-4899,-4584]]},{"type":"Polygon","id":20075,"arcs":[[-4901,4904,-4879,-4590,-4594]]},{"type":"Polygon","id":17193,"arcs":[[-4685,-4705,4905,4906,4907,-4657,-4683]]},{"type":"Polygon","id":20185,"arcs":[[-4725,4908,4909,4910,-4842,-4607]]},{"type":"Polygon","id":20083,"arcs":[[-4844,4911,4912,4913,-4902,-4601]]},{"type":"Polygon","id":17065,"arcs":[[-4908,4914,4915,4916,-4767,-4658]]},{"type":"Polygon","id":51033,"arcs":[[-4810,4917,4918,4919,4920,-4828,-4672]]},{"type":"Polygon","id":18173,"arcs":[[-4709,4921,4922,4923,4924,4925,-4702,-4695]]},{"type":"Polygon","id":18129,"arcs":[[4926,4927,4928,4929,-4906,-4704]]},{"type":"Polygon","id":54005,"arcs":[[4930,4931,4932,-4831,-4640]]},{"type":"Polygon","id":17157,"arcs":[[-4633,-4731,4933,4934,4935,4936,-4726]]},{"type":"Polygon","id":29185,"arcs":[[-4701,4937,4938,4939,4940,-4770,-4687]]},{"type":"Polygon","id":17145,"arcs":[[-4730,-4769,4941,4942,-4934]]},{"type":"Polygon","id":29055,"arcs":[[-4576,4943,4944,4945,4946,-4565]]},{"type":"Polygon","id":21067,"arcs":[[4947,4948,4949,4950,-4758,-4839]]},{"type":"Polygon","id":29221,"arcs":[[-4742,4951,4952,-4944,-4575]]},{"type":"Polygon","id":18147,"arcs":[[-4896,4953,4954,-4923,-4922,-4708]]},{"type":"Polygon","id":21163,"arcs":[[4955,4956,-4893,-4796,-4801]]},{"type":"Polygon","id":21239,"arcs":[[-4951,4957,4958,4959,-4834,-4759]]},{"type":"Polygon","id":21173,"arcs":[[4960,4961,4962,-4837,-4850]]},{"type":"Polygon","id":20079,"arcs":[[4963,4964,4965,-4647,-4652]]},{"type":"Polygon","id":20073,"arcs":[[-4542,-4791,4966,4967,4968,4969,-4715]]},{"type":"Polygon","id":20155,"arcs":[[-4648,-4966,4970,4971,4972,-4909,-4724]]},{"type":"Polygon","id":18163,"arcs":[[-4926,4973,4974,-4927,-4703]]},{"type":"Polygon","id":29161,"arcs":[[-4947,4975,4976,4977,-4855,-4566]]},{"type":"Polygon","id":49017,"arcs":[[-4756,4978,4979,-4680,-4737,-4739]]},{"type":"Polygon","id":51057,"arcs":[[4980,4981,-4918,-4809,4982]]},{"type":"Polygon","id":8113,"arcs":[[-4847,4983,4984,-4749,-4628]]},{"type":"Polygon","id":51109,"arcs":[[-4830,4985,4986,4987,-4860,-4817]]},{"type":"Polygon","id":49021,"arcs":[[-4980,4988,4989,-4623,-4681]]},{"type":"Polygon","id":21215,"arcs":[[4990,4991,4992,-4824,-4841]]},{"type":"Polygon","id":8053,"arcs":[[-4781,4993,4994,4995,4996,-4845,-4176]]},{"type":"Polygon","id":21005,"arcs":[[-4960,4997,4998,4999,-4991,-4840,-4835]]},{"type":"Polygon","id":17055,"arcs":[[-4917,5000,5001,5002,-4942,-4768]]},{"type":"Polygon","id":51159,"arcs":[[5003,5004,5005,-4865]]},{"type":"Polygon","id":29186,"arcs":[[-4937,5006,5007,-4740,-4727]]},{"type":"Polygon","id":21029,"arcs":[[5008,5009,-4825,-4993]]},{"type":"Polygon","id":21175,"arcs":[[-4874,5010,5011,5012,5013,-4813,-4887]]},{"type":"Polygon","id":21049,"arcs":[[5014,5015,5016,-4948,-4838,-4963]]},{"type":"Polygon","id":6013,"arcs":[[-4853,5017,5018]]},{"type":"Polygon","id":20015,"arcs":[[-4716,-4970,5019,5020,5021,-4964,-4651]]},{"type":"Polygon","id":20047,"arcs":[[-4911,5022,5023,5024,-4912,-4843]]},{"type":"Polygon","id":51163,"arcs":[[5025,5026,5027,5028,-4876,-4765,5029]]},{"type":"Polygon","id":29187,"arcs":[[-5008,5030,5031,5032,-4952,-4741]]},{"type":"Polygon","id":6099,"arcs":[[5033,5034,5035,-4851,-4734,-4788]]},{"type":"Polygon","id":29085,"arcs":[[-4871,5036,5037,-4938,-4700]]},{"type":"Polygon","id":29217,"arcs":[[-4941,5038,5039,5040,5041,-4821,-4771]]},{"type":"Polygon","id":21165,"arcs":[[-4814,-5014,5042,5043,-4961,-4849]]},{"type":"Polygon","id":51125,"arcs":[[5044,5045,5046,-5030,-4764,-4863]]},{"type":"Polygon","id":21027,"arcs":[[5047,5048,5049,5050,-4894,-4957]]},{"type":"Polygon","id":20207,"arcs":[[5051,5052,-4967,-4790]]},{"type":"Polygon","id":20001,"arcs":[[5053,5054,-5052,-4820]]},{"type":"Polygon","id":20011,"arcs":[[-5042,5055,5056,-5054,-4822]]},{"type":"MultiPolygon","id":51001,"arcs":[[[5057,5058,-4782,5059]]]},{"type":"Polygon","id":54045,"arcs":[[-4933,5060,5061,-4832]]},{"type":"Polygon","id":51133,"arcs":[[5062,-5004,-4864,5063]]},{"type":"Polygon","id":29169,"arcs":[[-4856,-4978,5064,5065,-4868,-4793]]},{"type":"Polygon","id":8055,"arcs":[[-4720,5066,5067,5068,-4777,-4888]]},{"type":"Polygon","id":51085,"arcs":[[-4921,5069,5070,5071,5072,-4986,-4829]]},{"type":"Polygon","id":51065,"arcs":[[5073,5074,-4861,-4988,5075]]},{"type":"Polygon","id":21093,"arcs":[[5076,5077,5078,5079,5080,-5048,-4956,-4800,-4826,-5010]]},{"type":"Polygon","id":21113,"arcs":[[5081,5082,5083,-4958,-4950]]},{"type":"Polygon","id":21115,"arcs":[[5084,5085,5086,-5011,-4873]]},{"type":"Polygon","id":20069,"arcs":[[-4914,5087,5088,5089,-4903]]},{"type":"Polygon","id":21091,"arcs":[[-5051,5090,5091,-4954,-4895]]},{"type":"Polygon","id":54081,"arcs":[[-4639,-4898,5092,5093,5094,-4931]]},{"type":"Polygon","id":21179,"arcs":[[-5000,5095,5096,5097,-5077,-5009,-4992]]},{"type":"Polygon","id":54059,"arcs":[[5098,5099,5100,5101,5102,-4803,-4833,-5062]]},{"type":"Polygon","id":21101,"arcs":[[-4974,-4925,5103,5104,5105,5106,-4928,-4975]]},{"type":"Polygon","id":51097,"arcs":[[-4982,5107,5108,5109,5110,-4919]]},{"type":"Polygon","id":8111,"arcs":[[-4997,5111,5112,-4984,-4846]]},{"type":"Polygon","id":21167,"arcs":[[-5084,5113,5114,5115,-4998,-4959]]},{"type":"Polygon","id":8079,"arcs":[[5116,5117,-4994,-4780]]},{"type":"Polygon","id":21159,"arcs":[[-4804,-5103,5118,5119,-5085,-4872]]},{"type":"Polygon","id":51005,"arcs":[[-5029,5120,5121,5122,-4883,-4877]]},{"type":"Polygon","id":17077,"arcs":[[-5003,5123,5124,5125,-4935,-4943]]},{"type":"Polygon","id":21197,"arcs":[[-5044,5126,5127,5128,-5015,-4962]]},{"type":"Polygon","id":21059,"arcs":[[5129,5130,-5104,-4924,-4955,-5092]]},{"type":"Polygon","id":21151,"arcs":[[5131,5132,5133,5134,-5082,-4949,-5017]]},{"type":"Polygon","id":17059,"arcs":[[-4930,5135,5136,5137,-4915,-4907]]},{"type":"Polygon","id":21229,"arcs":[[-5116,5138,5139,-5096,-4999]]},{"type":"Polygon","id":20057,"arcs":[[-5025,5140,5141,5142,-5088,-4913]]},{"type":"Polygon","id":20173,"arcs":[[-5022,5143,5144,-4971,-4965]]},{"type":"Polygon","id":17165,"arcs":[[-5138,5145,5146,5147,-5001,-4916]]},{"type":"Polygon","id":51101,"arcs":[[-5111,5148,5149,-5070,-4920]]},{"type":"Polygon","id":29059,"arcs":[[-4870,5150,5151,5152,5153,-5037]]},{"type":"Polygon","id":6001,"arcs":[[-4852,-5036,5154,5155,-5018]]},{"type":"Polygon","id":51075,"arcs":[[5156,5157,5158,-5076,-4987,-5073]]},{"type":"Polygon","id":29157,"arcs":[[-5126,5159,5160,5161,5162,-5031,-5007,-4936]]},{"type":"Polygon","id":29039,"arcs":[[5163,5164,5165,-5039,-4940]]},{"type":"Polygon","id":6043,"arcs":[[5166,5167,-4787]]},{"type":"Polygon","id":21225,"arcs":[[5168,5169,5170,-5136,-4929,-5107]]},{"type":"Polygon","id":29105,"arcs":[[-5066,5171,5172,5173,-5151,-4869]]},{"type":"Polygon","id":8033,"arcs":[[-5113,5174,-4750,-4985]]},{"type":"Polygon","id":21153,"arcs":[[-5087,5175,5176,5177,5178,-5012]]},{"type":"Polygon","id":54089,"arcs":[[5179,5180,-5093,-4897,-4885,5181]]},{"type":"Polygon","id":17199,"arcs":[[-5148,5182,5183,-5124,-5002]]},{"type":"Polygon","id":21237,"arcs":[[-5179,5184,5185,-5127,-5043,-5013]]},{"type":"Polygon","id":21065,"arcs":[[-5129,5186,5187,-5132,-5016]]},{"type":"Polygon","id":51103,"arcs":[[-5005,-5063,5188]]},{"type":"Polygon","id":8105,"arcs":[[-4779,5189,5190,5191,-5117]]},{"type":"Polygon","id":6075,"arcs":[[5192,5193]]},{"type":"Polygon","id":29167,"arcs":[[-5038,-5154,5194,5195,-5164,-4939]]},{"type":"Polygon","id":21079,"arcs":[[-5135,5196,5197,5198,-5114,-5083]]},{"type":"Polygon","id":20151,"arcs":[[-4973,5199,5200,5201,-5023,-4910]]},{"type":"Polygon","id":51009,"arcs":[[5202,5203,5204,5205,-5026,-5047]]},{"type":"Polygon","id":8071,"arcs":[[-4890,5206,5207,5208,5209,-5067,-4719,-4892]]},{"type":"Polygon","id":51023,"arcs":[[5210,5211,5212,-5121,-5028]]},{"type":"Polygon","id":29065,"arcs":[[-4946,5213,5214,5215,5216,-4976]]},{"type":"Polygon","id":54109,"arcs":[[5217,5218,-5099,-5061,-4932,-5095]]},{"type":"Polygon","id":51029,"arcs":[[5219,5220,5221,-5045,-4862,-5075]]},{"type":"Polygon","id":6039,"arcs":[[-4572,5222,5223,-5167,-4786]]},{"type":"Polygon","id":51119,"arcs":[[5224,-5108,-4981,5225]]},{"type":"Polygon","id":21071,"arcs":[[-5120,5226,5227,-5176,-5086]]},{"type":"Polygon","id":8003,"arcs":[[-5069,5228,5229,-5190,-4778]]},{"type":"Polygon","id":51049,"arcs":[[-5159,5230,5231,5232,-5220,-5074]]},{"type":"Polygon","id":21195,"arcs":[[5233,5234,5235,5236,5237,-5227,-5119,-5102]]},{"type":"Polygon","id":29093,"arcs":[[-5033,5238,5239,5240,-5214,-4945,-4953]]},{"type":"Polygon","id":20187,"arcs":[[5241,5242,5243,5244,-4880,-4905]]},{"type":"Polygon","id":21183,"arcs":[[-5050,5245,5246,5247,5248,-5130,-5091]]},{"type":"Polygon","id":20067,"arcs":[[5249,5250,-5242,-4900]]},{"type":"Polygon","id":20081,"arcs":[[-5090,5251,5252,5253,-5250,-4904]]},{"type":"Polygon","id":20097,"arcs":[[-5202,5254,5255,5256,-5141,-5024]]},{"type":"Polygon","id":20095,"arcs":[[-5145,5257,5258,5259,-5200,-4972]]},{"type":"Polygon","id":20205,"arcs":[[5260,5261,5262,-4968,-5053]]},{"type":"Polygon","id":20133,"arcs":[[-5057,5263,5264,5265,-5261,-5055]]},{"type":"Polygon","id":21123,"arcs":[[5266,5267,5268,5269,-5078,-5098]]},{"type":"Polygon","id":21155,"arcs":[[-5140,5270,5271,5272,-5267,-5097]]},{"type":"Polygon","id":54063,"arcs":[[-5123,5273,5274,-5182,-4884]]},{"type":"Polygon","id":21129,"arcs":[[-5186,5275,5276,5277,-5187,-5128]]},{"type":"Polygon","id":21021,"arcs":[[-5199,5278,5279,-5271,-5139,-5115]]},{"type":"Polygon","id":51087,"arcs":[[5280,5281,5282,5283,5284,5285,5286,5287,-5157,-5072]]},{"type":"Polygon","id":6081,"arcs":[[5288,5289,5290,5291,-5193]]},{"type":"Polygon","id":21025,"arcs":[[-5178,5292,5293,5294,-5276,-5185]]},{"type":"Polygon","id":51145,"arcs":[[5295,5296,-5231,-5158]]},{"type":"Polygon","id":21149,"arcs":[[-5249,5297,5298,5299,-5105,-5131]]},{"type":"Polygon","id":20037,"arcs":[[-5041,5300,5301,5302,5303,-5264,-5056]]},{"type":"Polygon","id":51045,"arcs":[[5304,5305,5306,-5274,-5122,-5213]]},{"type":"Polygon","id":8023,"arcs":[[-5210,5307,5308,5309,-5229,-5068]]},{"type":"Polygon","id":29011,"arcs":[[-5166,5310,5311,-5301,-5040]]},{"type":"Polygon","id":21233,"arcs":[[5312,5313,5314,-5169,-5106,-5300]]},{"type":"Polygon","id":29123,"arcs":[[-5163,5315,5316,-5239,-5032]]},{"type":"Polygon","id":8009,"arcs":[[-5245,5317,5318,5319,-5207,-4889,-4881]]},{"type":"Polygon","id":8083,"arcs":[[5320,5321,-4751,-5175]]},{"type":"Polygon","id":8067,"arcs":[[-4996,5322,5323,-5321,-5112]]},{"type":"Polygon","id":6047,"arcs":[[-5224,5324,5325,5326,-5034,-5168]]},{"type":"Polygon","id":21137,"arcs":[[5327,5328,5329,-5279,-5198]]},{"type":"Polygon","id":51127,"arcs":[[5330,5331,5332,-5281,-5071,-5150]]},{"type":"Polygon","id":21085,"arcs":[[-5081,-5080,5333,5334,5335,-5246,-5049]]},{"type":"Polygon","id":51019,"arcs":[[5336,5337,5338,5339,5340,-5211,-5027,-5206]]},{"type":"Polygon","id":49053,"arcs":[[5341,5342,-4624,-4990]]},{"type":"Polygon","id":20049,"arcs":[[-5263,5343,5344,5345,-5020,-4969]]},{"type":"Polygon","id":29179,"arcs":[[5346,5347,5348,-5215,-5241]]},{"type":"Polygon","id":29031,"arcs":[[5349,5350,5351,5352,5353,-5161]]},{"type":"Polygon","id":29215,"arcs":[[-4977,-5217,5354,5355,5356,5357,-5172,-5065]]},{"type":"Polygon","id":17069,"arcs":[[-5137,-5171,5358,5359,5360,-5146]]},{"type":"Polygon","id":17151,"arcs":[[-5361,5361,5362,5363,-5147]]},{"type":"Polygon","id":51760,"arcs":[[-5285,5364,-5287,-5286]]},{"type":"Polygon","id":17087,"arcs":[[-5364,5365,5366,5367,-5183]]},{"type":"Polygon","id":17181,"arcs":[[-5184,-5368,5368,5369,-5350,-5160,-5125]]},{"type":"Polygon","id":51073,"arcs":[[5370,5371,5372,-5109,-5225]]},{"type":"Polygon","id":29017,"arcs":[[-5354,5373,5374,-5316,-5162]]},{"type":"Polygon","id":54055,"arcs":[[-5181,5375,5376,5377,5378,-5218,-5094]]},{"type":"Polygon","id":6019,"arcs":[[5379,5380,5381,5382,5383,-5325,-5223,-4571]]},{"type":"Polygon","id":29057,"arcs":[[-5196,5384,5385,5386,-5311,-5165]]},{"type":"Polygon","id":21109,"arcs":[[-5278,5387,5388,5389,5390,-5133,-5188]]},{"type":"Polygon","id":21107,"arcs":[[5391,5392,5393,-5313,-5299]]},{"type":"Polygon","id":51041,"arcs":[[-5365,-5284,5394,5395,5396,5397,5398,5399,5400,5401,-5296,-5288]]},{"type":"Polygon","id":51011,"arcs":[[5402,5403,5404,-5203,-5046,-5222]]},{"type":"MultiPolygon","id":51131,"arcs":[[[5405,-5058]]]},{"type":"Polygon","id":21045,"arcs":[[-5330,5406,5407,5408,5409,-5272,-5280]]},{"type":"Polygon","id":54047,"arcs":[[-5379,5410,5411,-5100,-5219]]},{"type":"Polygon","id":21055,"arcs":[[-5315,5412,5413,5414,-5359,-5170]]},{"type":"Polygon","id":49025,"arcs":[[-4979,-4755,5415,5416,-5342,-4989]]},{"type":"Polygon","id":21189,"arcs":[[-5295,5417,5418,-5388,-5277]]},{"type":"Polygon","id":21203,"arcs":[[-5391,5419,5420,-5328,-5197,-5134]]},{"type":"Polygon","id":51027,"arcs":[[-5412,5421,5422,5423,-5234,-5101]]},{"type":"Polygon","id":51115,"arcs":[[-5372,5424]]},{"type":"Polygon","id":21119,"arcs":[[-5177,-5228,-5238,5425,5426,-5293]]},{"type":"Polygon","id":51007,"arcs":[[-5402,5427,5428,5429,-5232,-5297]]},{"type":"Polygon","id":51036,"arcs":[[5430,5431,-5282,-5333]]},{"type":"Polygon","id":29225,"arcs":[[-5174,5432,5433,5434,5435,-5152]]},{"type":"Polygon","id":6085,"arcs":[[-5035,-5327,5436,5437,-5290,5438,-5155]]},{"type":"Polygon","id":21217,"arcs":[[-5273,-5410,5439,5440,-5268]]},{"type":"Polygon","id":29229,"arcs":[[-5358,5441,-5433,-5173]]},{"type":"Polygon","id":51071,"arcs":[[-5307,5442,5443,5444,-5376,-5180,-5275]]},{"type":"Polygon","id":20035,"arcs":[[-5346,5445,5446,5447,5448,-5021]]},{"type":"Polygon","id":20191,"arcs":[[-5449,5449,5450,5451,-5258,-5144]]},{"type":"Polygon","id":20119,"arcs":[[-5143,5452,5453,5454,-5252,-5089]]},{"type":"Polygon","id":20025,"arcs":[[-5257,5455,5456,5457,-5453,-5142]]},{"type":"Polygon","id":20007,"arcs":[[-5260,5458,5459,5460,5461,-5255,-5201]]},{"type":"Polygon","id":21087,"arcs":[[-5441,5462,5463,5464,-5269]]},{"type":"Polygon","id":51680,"arcs":[[-5205,5465,-5337]]},{"type":"Polygon","id":6027,"arcs":[[-4773,-4255,5466,5467,5468,5469,-5380,-4570]]},{"type":"Polygon","id":51095,"arcs":[[5470,5471,5472,-5431,-5332,5473,5474,5475]]},{"type":"Polygon","id":21099,"arcs":[[-5270,-5465,5476,5477,5478,-5334,-5079]]},{"type":"Polygon","id":21193,"arcs":[[-5427,5479,5480,5481,5482,-5418,-5294]]},{"type":"Polygon","id":51031,"arcs":[[-5405,5483,5484,5485,-5338,-5466,-5204]]},{"type":"Polygon","id":29077,"arcs":[[-5153,-5436,5486,5487,-5385,-5195]]},{"type":"Polygon","id":21139,"arcs":[[-5415,5488,5489,5490,5491,-5362,-5360]]},{"type":"Polygon","id":29203,"arcs":[[-5349,5492,5493,5494,-5355,-5216]]},{"type":"Polygon","id":8007,"arcs":[[-5118,-5192,5495,5496,5497,-5323,-4995]]},{"type":"Polygon","id":51161,"arcs":[[-5341,5498,5499,5500,-5305,-5212],[5501,5502]]},{"type":"Polygon","id":21177,"arcs":[[5503,5504,5505,5506,-5392,-5298,-5248]]},{"type":"Polygon","id":51147,"arcs":[[-5233,-5430,5507,5508,5509,-5403,-5221]]},{"type":"Polygon","id":8021,"arcs":[[-5191,-5230,-5310,5510,5511,-5496]]},{"type":"Polygon","id":21031,"arcs":[[5512,5513,-5504,-5247,-5336,5514]]},{"type":"Polygon","id":20129,"arcs":[[5515,5516,5517,-5318,-5244]]},{"type":"Polygon","id":20189,"arcs":[[-5254,5518,5519,-5516,-5243,-5251]]},{"type":"Polygon","id":20175,"arcs":[[-5455,5520,5521,-5519,-5253]]},{"type":"Polygon","id":20125,"arcs":[[-5262,-5266,5522,5523,5524,5525,-5344]]},{"type":"Polygon","id":20077,"arcs":[[5526,5527,-5459,-5259,-5452]]},{"type":"Polygon","id":20033,"arcs":[[5528,5529,-5456,-5256,-5462]]},{"type":"Polygon","id":20099,"arcs":[[-5304,5530,5531,5532,-5523,-5265]]},{"type":"Polygon","id":21033,"arcs":[[-5394,5533,5534,5535,-5413,-5314]]},{"type":"Polygon","id":51199,"arcs":[[5536,5537,5538,5539,-5471,5540,-5475]]},{"type":"Polygon","id":29097,"arcs":[[-5387,5541,5542,5543,-5302,-5312]]},{"type":"Polygon","id":51121,"arcs":[[5544,5545,5546,5547,-5443,-5306,-5501]]},{"type":"Polygon","id":21051,"arcs":[[-5483,5548,5549,5550,5551,-5389,-5419]]},{"type":"Polygon","id":21199,"arcs":[[5552,5553,5554,-5407,-5329,-5421,5555]]},{"type":"Polygon","id":20021,"arcs":[[-5544,5556,5557,5558,-5531,-5303]]},{"type":"Polygon","id":21061,"arcs":[[-5479,5559,5560,-5515,-5335]]},{"type":"Polygon","id":51770,"arcs":[[5561,-5503]]},{"type":"Polygon","id":17127,"arcs":[[-5492,5562,5563,-5366,-5363]]},{"type":"Polygon","id":51185,"arcs":[[-5378,5564,5565,5566,-5422,-5411]]},{"type":"Polygon","id":17003,"arcs":[[5567,5568,5569,5570,-5351,-5370]]},{"type":"Polygon","id":21125,"arcs":[[-5552,5571,5572,5573,-5556,-5420,-5390]]},{"type":"Polygon","id":17153,"arcs":[[-5367,-5564,5574,5575,-5568,-5369]]},{"type":"Polygon","id":21131,"arcs":[[5576,5577,-5549,-5482]]},{"type":"Polygon","id":29223,"arcs":[[-5375,5578,5579,5580,-5347,-5240,-5317]]},{"type":"Polygon","id":51149,"arcs":[[5581,5582,5583,5584,5585,-5397,5586]]},{"type":"Polygon","id":21001,"arcs":[[-5409,5587,5588,5589,-5463,-5440]]},{"type":"Polygon","id":51051,"arcs":[[5590,5591,-5235,-5424]]},{"type":"Polygon","id":20019,"arcs":[[-5526,5592,5593,-5446,-5345]]},{"type":"Polygon","id":51021,"arcs":[[5594,5595,5596,-5565,-5377,-5445]]},{"type":"Polygon","id":51135,"arcs":[[5597,5598,-5508,-5429,5599]]},{"type":"Polygon","id":29109,"arcs":[[-5488,5600,5601,5602,5603,-5542,-5386]]},{"type":"Polygon","id":6087,"arcs":[[5604,5605,5606,-5291,-5438]]},{"type":"Polygon","id":51053,"arcs":[[5607,-5585,5608,5609,5610,-5600,-5428,-5401]]},{"type":"Polygon","id":21133,"arcs":[[-5237,5611,5612,-5480,-5426]]},{"type":"Polygon","id":29201,"arcs":[[5613,5614,5615,-5352,-5571]]},{"type":"Polygon","id":51037,"arcs":[[5616,5617,5618,-5484,-5404,-5510]]},{"type":"Polygon","id":51155,"arcs":[[5619,-5546,5620,5621,5622,-5595,-5444,-5548]]},{"type":"Polygon","id":51181,"arcs":[[5623,5624,5625,-5583,5626]]},{"type":"Polygon","id":51067,"arcs":[[5627,5628,5629,5630,-5499,-5340]]},{"type":"Polygon","id":21007,"arcs":[[5631,5632,-5569,-5576,5633]]},{"type":"Polygon","id":21145,"arcs":[[-5491,5634,5635,5636,-5634,-5575,-5563]]},{"type":"Polygon","id":51700,"arcs":[[5637,5638,-5472,-5540]]},{"type":"Polygon","id":51195,"arcs":[[5639,5640,5641,5642,-5612,-5236,-5592]]},{"type":"Polygon","id":21227,"arcs":[[-5561,5643,5644,5645,5646,-5513]]},{"type":"Polygon","id":21207,"arcs":[[-5555,5647,5648,5649,-5588,-5408]]},{"type":"Polygon","id":21169,"arcs":[[-5590,5650,5651,5652,-5477,-5464]]},{"type":"Polygon","id":21143,"arcs":[[-5536,5653,5654,-5489,-5414]]},{"type":"Polygon","id":21009,"arcs":[[5655,5656,-5644,-5560,-5478,-5653]]},{"type":"Polygon","id":21047,"arcs":[[-5507,5657,5658,5659,5660,-5534,-5393]]},{"type":"Polygon","id":51093,"arcs":[[5661,5662,5663,5664,-5624,5665]]},{"type":"Polygon","id":51167,"arcs":[[5666,5667,5668,-5640,-5591,-5423,-5567]]},{"type":"Polygon","id":51143,"arcs":[[5669,5670,5671,5672,5673,5674,-5628,-5339,-5486]]},{"type":"Polygon","id":51063,"arcs":[[-5631,5675,5676,-5621,-5545,-5500]]},{"type":"Polygon","id":29207,"arcs":[[-5353,-5616,5677,5678,5679,-5579,-5374]]},{"type":"Polygon","id":51111,"arcs":[[-5599,5680,5681,-5617,-5509]]},{"type":"Polygon","id":51650,"arcs":[[-5638,-5539,-5683,5683]]},{"type":"Polygon","id":51183,"arcs":[[5684,5685,-5609,-5584,-5626]]},{"type":"Polygon","id":29035,"arcs":[[-5581,5686,5687,5688,-5493,-5348]]},{"type":"Polygon","id":29043,"arcs":[[-5435,5689,5690,5691,-5601,-5487]]},{"type":"Polygon","id":51197,"arcs":[[5692,5693,5694,-5596,-5623]]},{"type":"Polygon","id":21141,"arcs":[[5695,5696,5697,-5505,-5514,-5647]]},{"type":"Polygon","id":21219,"arcs":[[-5698,5698,5699,-5658,-5506]]},{"type":"Polygon","id":29067,"arcs":[[-5442,-5357,5700,5701,5702,-5690,-5434]]},{"type":"Polygon","id":21157,"arcs":[[-5655,5703,5704,5705,-5635,-5490]]},{"type":"Polygon","id":29133,"arcs":[[-5633,5706,5707,5708,5709,-5614,-5570]]},{"type":"Polygon","id":51083,"arcs":[[-5619,5710,5711,5712,5713,-5670,-5485]]},{"type":"Polygon","id":29091,"arcs":[[-5495,5714,5715,5716,-5701,-5356]]},{"type":"Polygon","id":29145,"arcs":[[-5604,5717,5718,5719,-5557,-5543]]},{"type":"Polygon","id":21121,"arcs":[[5720,5721,-5572,-5551]]},{"type":"Polygon","id":51025,"arcs":[[-5611,5722,5723,5724,5725,-5681,-5598]]},{"type":"Polygon","id":21095,"arcs":[[-5613,-5643,5726,5727,-5577,-5481]]},{"type":"Polygon","id":51173,"arcs":[[-5597,-5695,5728,5729,-5667,-5566]]},{"type":"Polygon","id":4017,"arcs":[[5730,5731,5732,5733,-4753]]},{"type":"Polygon","id":4005,"arcs":[[-5734,5734,5735,5736,-5416,-4754]]},{"type":"Polygon","id":21221,"arcs":[[5737,5738,-5704,-5654,-5535,-5661]]},{"type":"Polygon","id":40105,"arcs":[[-5533,5739,5740,5741,-5524]]},{"type":"Polygon","id":40113,"arcs":[[5742,5743,5744,5745,5746,-5447,-5594]]},{"type":"Polygon","id":40151,"arcs":[[-5461,5747,5748,5749,5750,5751,-5529]]},{"type":"Polygon","id":40035,"arcs":[[-5559,5752,5753,5754,5755,-5740,-5532]]},{"type":"Polygon","id":40147,"arcs":[[-5742,5756,5757,-5743,-5593,-5525]]},{"type":"Polygon","id":40053,"arcs":[[5758,5759,5760,-5527,-5451]]},{"type":"Polygon","id":40003,"arcs":[[-5528,-5761,5761,5762,-5748,-5460]]},{"type":"Polygon","id":40071,"arcs":[[-5747,5763,5764,-5759,-5450,-5448]]},{"type":"Polygon","id":40115,"arcs":[[-5720,5765,5766,-5753,-5558]]},{"type":"Polygon","id":40059,"arcs":[[-5530,-5752,-5751,5767,5768,5769,-5457]]},{"type":"Polygon","id":35039,"arcs":[[-5512,5770,5771,5772,5773,5774,5775,-5497]]},{"type":"Polygon","id":35045,"arcs":[[-5776,5776,5777,5778,-5322,-5324,-5498]]},{"type":"Polygon","id":4001,"arcs":[[-5779,5779,5780,5781,5782,5783,-5731,-4752]]},{"type":"Polygon","id":35059,"arcs":[[5784,5785,5786,5787,5788,5789,-5208,-5320]]},{"type":"Polygon","id":40025,"arcs":[[-5518,5790,5791,5792,-5785,-5319]]},{"type":"Polygon","id":40139,"arcs":[[5793,5794,5795,5796,-5791,-5517,-5520,-5522]]},{"type":"Polygon","id":40007,"arcs":[[-5458,-5770,5797,5798,5799,-5794,-5521,-5454]]},{"type":"Polygon","id":51175,"arcs":[[5800,-5663,5801,5802,5803,5804,5805,-5685,-5625,-5665]]},{"type":"Polygon","id":21231,"arcs":[[5806,5807,5808,5809,-5648,-5554]]},{"type":"Polygon","id":35055,"arcs":[[5810,5811,-5771,-5511,-5309]]},{"type":"Polygon","id":35007,"arcs":[[-5790,5812,5813,-5811,-5308,-5209]]},{"type":"Polygon","id":29209,"arcs":[[5814,5815,5816,-5602,-5692]]},{"type":"Polygon","id":6069,"arcs":[[-5326,-5384,5817,-5605,-5437]]},{"type":"Polygon","id":21235,"arcs":[[-5722,5818,5819,5820,5821,-5573]]},{"type":"Polygon","id":51710,"arcs":[[5822,5823]]},{"type":"Polygon","id":21147,"arcs":[[-5822,5824,5825,-5807,-5553,-5574]]},{"type":"Polygon","id":21013,"arcs":[[-5578,-5728,5826,5827,-5819,-5721,-5550]]},{"type":"Polygon","id":21039,"arcs":[[-5637,5828,5829,-5707,-5632]]},{"type":"Polygon","id":21083,"arcs":[[-5706,5830,5831,5832,5833,-5829,-5636]]},{"type":"Polygon","id":21057,"arcs":[[5834,5835,5836,-5651,-5589,-5650]]},{"type":"Polygon","id":21003,"arcs":[[-5657,5837,5838,5839,5840,-5645]]},{"type":"Polygon","id":29009,"arcs":[[-5817,5841,5842,5843,-5718,-5603]]},{"type":"Polygon","id":51810,"arcs":[[5844,5845,5846,5847,5848,5849,5850,-5823,5851]]},{"type":"Polygon","id":51035,"arcs":[[5852,5853,5854,5855,5856,-5693,-5622,-5677]]},{"type":"Polygon","id":51191,"arcs":[[5857,5858,5859,-5668,-5730,5860,5861,5862,5863]]},{"type":"Polygon","id":29023,"arcs":[[-5680,5864,5865,5866,-5687,-5580]]},{"type":"Polygon","id":51800,"arcs":[[-5868,5868,5869,5870,-5802,-5662,5871]]},{"type":"Polygon","id":6053,"arcs":[[-5818,-5383,5872,5873,5874,-5606]]},{"type":"Polygon","id":51081,"arcs":[[-5686,-5806,5875,-5723,-5610]]},{"type":"Polygon","id":51105,"arcs":[[5876,5877,5878,-5827,-5727,-5642]]},{"type":"Polygon","id":51117,"arcs":[[-5726,5879,5880,5881,-5711,-5618,-5682]]},{"type":"Polygon","id":21053,"arcs":[[-5810,5882,5883,-5835,-5649]]},{"type":"Polygon","id":29149,"arcs":[[-5689,5884,5885,5886,5887,-5715,-5494]]},{"type":"Polygon","id":51169,"arcs":[[-5669,-5860,5888,5889,5890,-5877,-5641]]},{"type":"Polygon","id":21213,"arcs":[[5891,5892,-5696,-5646,-5841]]},{"type":"Polygon","id":51141,"arcs":[[5893,5894,5895,-5853,-5676,-5630]]},{"type":"Polygon","id":29143,"arcs":[[-5710,5896,5897,5898,5899,5900,5901,-5678,-5615]]},{"type":"Polygon","id":51550,"arcs":[[5902,-5904,5904,5905,-5850,5906,5907,-5869,-5909]]},{"type":"Polygon","id":51089,"arcs":[[5909,5910,-5894,-5629,-5675]]},{"type":"Polygon","id":32003,"arcs":[[5911,5912,-5467,-4254,-4626]]},{"type":"Polygon","id":21171,"arcs":[[-5837,5913,5914,-5838,-5656,-5652]]},{"type":"Polygon","id":29181,"arcs":[[-5867,5915,5916,-5885,-5688]]},{"type":"Polygon","id":29213,"arcs":[[-5703,5917,5918,5919,5920,-5815,-5691]]},{"type":"Polygon","id":40153,"arcs":[[5921,5922,5923,-5768,5750,-5751,-5750]]},{"type":"Polygon","id":51077,"arcs":[[-5857,5924,-5855,5925,5926,5927,5928,-5861,-5729,-5694]]},{"type":"Polygon","id":29153,"arcs":[[-5717,5929,5930,5931,-5918,-5702]]},{"type":"Polygon","id":21105,"arcs":[[-5834,5932,5933,5934,-5708,-5830]]},{"type":"Polygon","id":29119,"arcs":[[-5844,5935,5936,-5766,-5719]]},{"type":"Polygon","id":21035,"arcs":[[-5739,5937,5938,-5831,-5705]]},{"type":"Polygon","id":6107,"arcs":[[5939,5940,-5381,-5470]]},{"type":"Polygon","id":47161,"arcs":[[-5660,5941,5942,5943,5944,-5938,-5738]]},{"type":"Polygon","id":40041,"arcs":[[-5937,5945,5946,5947,5948,-5754,-5767]]},{"type":"Polygon","id":47147,"arcs":[[5949,5950,5951,-5699,-5697,-5893,5952]]},{"type":"Polygon","id":47165,"arcs":[[5953,5954,5955,5956,-5953,-5892,-5840]]},{"type":"MultiPolygon","id":21075,"arcs":[[[5957,5958,-5897,-5709,-5935]]]},{"type":"Polygon","id":47125,"arcs":[[-5952,5959,5960,5961,-5942,-5659,-5700]]},{"type":"Polygon","id":51590,"arcs":[[5962,-5672]]},{"type":"Polygon","id":47111,"arcs":[[5963,5964,5965,-5954,-5839,-5915,5966]]},{"type":"Polygon","id":29069,"arcs":[[-5902,5967,5968,5969,5970,5971,5972,-5865,-5679]]},{"type":"Polygon","id":47137,"arcs":[[5973,5974,5975,5976,-5883,-5809]]},{"type":"Polygon","id":47027,"arcs":[[5977,5978,-5967,-5914,-5836,-5884,-5977]]},{"type":"Polygon","id":47163,"arcs":[[5979,5980,5981,-5889,-5859,-5983,-5863,5983]]},{"type":"Polygon","id":47091,"arcs":[[-5929,5984,5985,5986,5987,-5984,-5862]]},{"type":"Polygon","id":47151,"arcs":[[5988,5989,5990,5991,-5974,-5808,-5826]]},{"type":"Polygon","id":47025,"arcs":[[5992,5993,5994,5995,-5820,-5828,-5879]]},{"type":"Polygon","id":40103,"arcs":[[5996,5997,5998,5999,-5764,-5746]]},{"type":"Polygon","id":47067,"arcs":[[-5891,6000,6001,-5993,-5878]]},{"type":"Polygon","id":40131,"arcs":[[6002,6003,6004,-5757,-5741,-5756]]},{"type":"Polygon","id":47013,"arcs":[[6005,6006,-5989,-5825,-5821,-5996]]},{"type":"Polygon","id":47073,"arcs":[[-5982,6007,6008,6009,6010,-6001,-5890]]},{"type":"Polygon","id":40047,"arcs":[[-5765,-6000,6011,6012,6013,-5762,-5760]]},{"type":"Polygon","id":40045,"arcs":[[-5924,6014,6015,6016,6017,-5798,-5769]]},{"type":"Polygon","id":37009,"arcs":[[6018,6019,6020,-5985,-5928]]},{"type":"Polygon","id":47049,"arcs":[[-5992,6021,6022,6023,6024,-5975]]},{"type":"Polygon","id":37005,"arcs":[[6025,6026,-6019,-5927]]},{"type":"Polygon","id":40117,"arcs":[[6027,6028,6029,-5997,-5745]]},{"type":"Polygon","id":37171,"arcs":[[-5896,6030,6031,6032,6033,-6026,-5926,-5854]]},{"type":"Polygon","id":37073,"arcs":[[6034,6035,6036,6037,6038,6039,-5803,-5871]]},{"type":"MultiPolygon","id":37053,"arcs":[[[6040,-5907,-5849,6041]],[[-5845,6042,6043,6044]]]},{"type":"Polygon","id":37169,"arcs":[[-5911,6045,6046,-6031,-5895]]},{"type":"Polygon","id":37029,"arcs":[[-5870,-5908,-6041,6047,6048,-6035]]},{"type":"Polygon","id":37185,"arcs":[[6049,6050,6051,6052,-5880,-5725]]},{"type":"Polygon","id":37131,"arcs":[[6053,6054,-6050,-5724,-5876,-5805,6055]]},{"type":"Polygon","id":37091,"arcs":[[-6040,6056,6057,-6056,-5804]]},{"type":"Polygon","id":37145,"arcs":[[6058,6059,6060,6061,-5713]]},{"type":"Polygon","id":37181,"arcs":[[-6053,6062,6063,-5881]]},{"type":"Polygon","id":37077,"arcs":[[6064,6065,6066,-6059,-5712,-5882,-6064]]},{"type":"Polygon","id":37157,"arcs":[[-5674,6067,6068,6069,-6046,-5910]]},{"type":"Polygon","id":37033,"arcs":[[-6062,6070,6071,-6068,-5673,-5963,-5671,-5714]]},{"type":"Polygon","id":47133,"arcs":[[-6025,6072,6073,-5978,-5976]]},{"type":"Polygon","id":47087,"arcs":[[-6074,6074,6075,-5964,-5979]]},{"type":"Polygon","id":37083,"arcs":[[6076,6077,6078,6079,-6051,-6055]]},{"type":"Polygon","id":40097,"arcs":[[-5949,6080,6081,-6003,-5755]]},{"type":"Polygon","id":47019,"arcs":[[6082,6083,6084,6085,-5980,-5988]]},{"type":"Polygon","id":37139,"arcs":[[6086,6087,-6036,-6049]]},{"type":"Polygon","id":47131,"arcs":[[-5934,6088,6089,6090,6091,-5958]]},{"type":"Polygon","id":40093,"arcs":[[-5763,-6014,6092,6093,6094,-5922,-5749]]},{"type":"Polygon","id":47183,"arcs":[[6095,6096,6097,-6089,-5933,-5833]]},{"type":"Polygon","id":47095,"arcs":[[6098,6099,-5900,-6101,-5898,-5959,-6092]]},{"type":"Polygon","id":48421,"arcs":[[6101,6102,-5792,-5797,6103]]},{"type":"Polygon","id":47079,"arcs":[[-5945,6104,6105,-6096,-5832,-5939]]},{"type":"Polygon","id":48195,"arcs":[[6106,6107,-6104,-5796,6108]]},{"type":"Polygon","id":48111,"arcs":[[-5793,-6103,6109,-5786]]},{"type":"Polygon","id":48357,"arcs":[[6110,6111,-6109,-5795,-5800]]},{"type":"Polygon","id":48295,"arcs":[[6112,6113,-6111,-5799,-6018]]},{"type":"Polygon","id":5007,"arcs":[[-5843,6114,6115,6116,6117,-5946,-5936]]},{"type":"Polygon","id":5049,"arcs":[[6118,6119,6120,-5930,-5716,-5888]]},{"type":"Polygon","id":5015,"arcs":[[-5816,-5921,6121,6122,6123,-6115,-5842]]},{"type":"Polygon","id":5135,"arcs":[[-5887,6124,6125,6126,6127,-6119]]},{"type":"Polygon","id":5121,"arcs":[[6128,6129,-6125,-5886,-5917,6130]]},{"type":"Polygon","id":5009,"arcs":[[6131,6132,6133,-6122,-5920]]},{"type":"Polygon","id":5089,"arcs":[[6134,6135,-6132,-5919,-5932]]},{"type":"Polygon","id":5005,"arcs":[[-6121,6136,6137,6138,-6135,-5931]]},{"type":"Polygon","id":5021,"arcs":[[-5866,-5973,6139,-6131,-5916]]},{"type":"Polygon","id":6031,"arcs":[[6140,6141,-5873,-5382,-5941]]},{"type":"Polygon","id":47169,"arcs":[[-5966,6142,6143,-5955]]},{"type":"Polygon","id":47021,"arcs":[[6144,6145,6146,6147,-5960,-5951]]},{"type":"Polygon","id":47179,"arcs":[[-6086,6148,6149,-6008,-5981]]},{"type":"Polygon","id":37193,"arcs":[[-6034,6150,6151,6152,6153,6154,-6020,-6027]]},{"type":"Polygon","id":47173,"arcs":[[6155,6156,6157,-6006,-5995]]},{"type":"Polygon","id":47159,"arcs":[[-6076,6158,6159,6160,-6143,-5965]]},{"type":"Polygon","id":29155,"arcs":[[-6100,6161,6162,-5968,-5901]]},{"type":"Polygon","id":40143,"arcs":[[-6005,6163,6164,6165,-6028,-5744,-5758]]},{"type":"Polygon","id":47057,"arcs":[[-6002,-6011,6166,6167,6168,-6156,-5994]]},{"type":"Polygon","id":47037,"arcs":[[-5957,6169,6170,6171,-6145,-5950]]},{"type":"Polygon","id":47059,"arcs":[[6172,6173,6174,6175,6176,-6009,-6150]]},{"type":"Polygon","id":37189,"arcs":[[-6155,6177,6178,-5986,-6021]]},{"type":"Polygon","id":37143,"arcs":[[6179,6180,-6037,-6088]]},{"type":"Polygon","id":47129,"arcs":[[-5991,6181,6182,6183,-6022]]},{"type":"Polygon","id":47083,"arcs":[[-5962,6184,6185,6186,-5943]]},{"type":"Polygon","id":47005,"arcs":[[-6187,6187,6188,6189,6190,-6105,-5944]]},{"type":"Polygon","id":47189,"arcs":[[-6144,-6161,6191,6192,6193,-6170,-5956]]},{"type":"Polygon","id":37041,"arcs":[[6194,-6038,-6181]]},{"type":"Polygon","id":47063,"arcs":[[-6177,6195,6196,-6167,-6010]]},{"type":"Polygon","id":47043,"arcs":[[-6148,-6147,6197,6198,6199,-6185,-5961]]},{"type":"Polygon","id":5087,"arcs":[[6200,6201,6202,6203,6204,-6116,-6124]]},{"type":"Polygon","id":47141,"arcs":[[-6024,6205,6206,6207,-6159,-6075,-6073]]},{"type":"Polygon","id":47001,"arcs":[[-6158,6208,6209,-6182,-5990,-6007]]},{"type":"Polygon","id":37197,"arcs":[[6210,6211,6212,-6151,-6033]]},{"type":"Polygon","id":37011,"arcs":[[6213,6214,6215,6216,6217,-6083,-5987,-6179]]},{"type":"Polygon","id":37069,"arcs":[[6218,6219,-6065,-6063,-6052]]},{"type":"Polygon","id":5055,"arcs":[[-5972,-5971,6220,6221,-6129,-6140]]},{"type":"Polygon","id":35033,"arcs":[[-5814,6222,6223,6224,-5772,-5812]]},{"type":"Polygon","id":37067,"arcs":[[6225,6226,6227,-6211,-6032,-6047]]},{"type":"Polygon","id":5065,"arcs":[[-6128,6228,6229,-6137,-6120]]},{"type":"Polygon","id":47171,"arcs":[[6230,6231,6232,-6173,-6149,-6085]]},{"type":"Polygon","id":5075,"arcs":[[-6222,6233,6234,6235,-6126,-6130]]},{"type":"Polygon","id":37081,"arcs":[[6236,6237,6238,-6226,-6070]]},{"type":"Polygon","id":37001,"arcs":[[6239,6240,6241,-6237,-6069,-6072]]},{"type":"Polygon","id":40119,"arcs":[[6242,6243,6244,-5998,-6030]]},{"type":"Polygon","id":47085,"arcs":[[-6200,6245,6246,-6188,-6186]]},{"type":"Polygon","id":37015,"arcs":[[6247,6248,6249,-6250,6250,-6077,-6054,-6058]]},{"type":"Polygon","id":37135,"arcs":[[-6061,6251,6252,-6240,-6071]]},{"type":"Polygon","id":37063,"arcs":[[-6067,6253,6254,-6252,-6060]]},{"type":"Polygon","id":5143,"arcs":[[6255,6256,-6117,-6205]]},{"type":"MultiPolygon","id":37055,"arcs":[[[6257,6258]],[[-6044,6259]]]},{"type":"Polygon","id":47053,"arcs":[[6260,6261,6262,6263,-6090,-6098]]},{"type":"Polygon","id":35043,"arcs":[[6264,6265,6266,6267,6268,-5777,-5775]]},{"type":"Polygon","id":35021,"arcs":[[-5789,6269,6270,-6223,-5813]]},{"type":"Polygon","id":47045,"arcs":[[6271,6272,6273,-6162,-6099,-6091,-6264]]},{"type":"Polygon","id":37127,"arcs":[[-6080,6274,6275,6276,-6219]]},{"type":"Polygon","id":47089,"arcs":[[-6197,6277,6278,6279,-6168]]},{"type":"Polygon","id":47093,"arcs":[[-6280,6280,6281,6282,6283,-6209,-6157,-6169]]},{"type":"Polygon","id":47029,"arcs":[[-6175,6284,6285,6286,6287,-6278,-6196,-6176]]},{"type":"Polygon","id":47035,"arcs":[[-6184,6288,6289,6290,6291,6292,6293,6294,-6206,-6023]]},{"type":"Polygon","id":40073,"arcs":[[6295,6296,6297,-6093,-6013]]},{"type":"Polygon","id":40083,"arcs":[[-5999,-6245,6298,6299,-6296,-6012]]},{"type":"Polygon","id":40011,"arcs":[[-6298,6300,6301,6302,6303,-6094]]},{"type":"Polygon","id":40043,"arcs":[[6304,6305,-6015,-5923,-6095,-6304]]},{"type":"Polygon","id":40037,"arcs":[[-6166,6306,6307,6308,-6243,-6029]]},{"type":"Polygon","id":40145,"arcs":[[-6082,6309,6310,6311,-6164,-6004]]},{"type":"Polygon","id":40021,"arcs":[[-5948,6312,6313,6314,-6310,-6081]]},{"type":"Polygon","id":40001,"arcs":[[-6118,-6257,6315,6316,-6313,-5947]]},{"type":"Polygon","id":37121,"arcs":[[-6218,6317,6318,-6231,-6084]]},{"type":"Polygon","id":37065,"arcs":[[6319,6320,6321,-6275,-6079]]},{"type":"Polygon","id":47017,"arcs":[[-6191,6322,6323,6324,-6261,-6097,-6106]]},{"type":"Polygon","id":47041,"arcs":[[6325,6326,6327,-6192,-6160,-6208]]},{"type":"Polygon","id":5137,"arcs":[[6328,6329,6330,6331,-6138,-6230]]},{"type":"Polygon","id":5101,"arcs":[[-6134,6332,6333,6334,-6201,-6123]]},{"type":"Polygon","id":37027,"arcs":[[-6154,6335,6336,6337,-6214,-6178]]},{"type":"Polygon","id":5129,"arcs":[[-6139,-6332,6338,6339,-6333,-6133,-6136]]},{"type":"Polygon","id":47149,"arcs":[[6340,6341,6342,6343,6344,-6171,-6194]]},{"type":"Polygon","id":37199,"arcs":[[6345,6346,6347,-6232,-6319]]},{"type":"Polygon","id":47185,"arcs":[[-6295,6348,6349,-6326,-6207]]},{"type":"Polygon","id":37183,"arcs":[[-6220,6350,6351,6352,-6254,-6066]]},{"type":"Polygon","id":37117,"arcs":[[6249,6353,6354,6355,-6320,-6078,-6251]]},{"type":"Polygon","id":37115,"arcs":[[-6233,-6348,6356,6357,-6285,6174,-6175,-6174]]},{"type":"Polygon","id":37059,"arcs":[[6358,6359,6360,-6212,-6228]]},{"type":"Polygon","id":48393,"arcs":[[-6114,6361,6362,6363,6364,-6107,-6112]]},{"type":"Polygon","id":48211,"arcs":[[-6113,-6017,6365,6366,-6362]]},{"type":"Polygon","id":48233,"arcs":[[-6108,-6365,6367,6368]]},{"type":"Polygon","id":48205,"arcs":[[6369,6370,6371,-5787,-6110]]},{"type":"Polygon","id":37097,"arcs":[[-6213,-6361,6372,6373,6374,6375,6376,6377,-6152]]},{"type":"Polygon","id":48341,"arcs":[[-6369,6378,6379,6380,-6370,-6102]]},{"type":"Polygon","id":47187,"arcs":[[-6345,6381,6382,6383,-6198,-6146,-6172]]},{"type":"Polygon","id":37003,"arcs":[[6384,-6336,-6153,-6378]]},{"type":"Polygon","id":47145,"arcs":[[6385,6386,6387,6388,-6289,-6183,-6210,-6284,6389]]},{"type":"Polygon","id":47155,"arcs":[[-6288,-6287,6286,6390,6391,6392,-6281,-6279]]},{"type":"Polygon","id":37057,"arcs":[[-6239,6393,6394,6395,-6359,-6227]]},{"type":"Polygon","id":40129,"arcs":[[-6306,6396,6397,6398,-6366,-6016]]},{"type":"Polygon","id":35031,"arcs":[[-6269,6399,-5780,-5778]]},{"type":"Polygon","id":35049,"arcs":[[-6225,6400,6401,6402,-6266,6403,6404,6405,-5773]]},{"type":"Polygon","id":5093,"arcs":[[6406,6407,6408,6409,6410,6411,6412,-5969,-6163,-6274]]},{"type":"Polygon","id":37023,"arcs":[[-6338,6413,6414,6415,6416,6417,-6216,-6215]]},{"type":"Polygon","id":47033,"arcs":[[6418,6419,6420,-6272,-6263]]},{"type":"Polygon","id":5031,"arcs":[[-6413,6421,6422,-6234,-6221,-5970]]},{"type":"Polygon","id":37177,"arcs":[[6423,6424,6425]]},{"type":"Polygon","id":47081,"arcs":[[-6384,6426,6427,6428,-6246,-6199]]},{"type":"Polygon","id":37187,"arcs":[[-6425,6429,6430,-6354,-6250,-6249,6431]]},{"type":"Polygon","id":35028,"arcs":[[-5774,-6406,6432,-6404,-6265]]},{"type":"Polygon","id":47015,"arcs":[[6433,6434,-6341,-6193,-6328]]},{"type":"Polygon","id":37111,"arcs":[[6435,6436,-6346,-6318,-6217,-6418]]},{"type":"Polygon","id":47097,"arcs":[[-6421,6437,6438,-6407,-6273]]},{"type":"Polygon","id":40081,"arcs":[[-6309,6439,6440,6441,-6299,-6244]]},{"type":"Polygon","id":5063,"arcs":[[-6236,6442,6443,6444,-6329,-6229,-6127]]},{"type":"Polygon","id":37151,"arcs":[[-6242,6445,6446,6447,-6394,-6238]]},{"type":"Polygon","id":47105,"arcs":[[-6390,-6283,6448,6449,6450,-6386]]},{"type":"Polygon","id":5067,"arcs":[[-6235,-6423,6451,6452,6453,6454,-6443]]},{"type":"Polygon","id":47009,"arcs":[[6455,6456,6457,-6449,-6282,-6393]]},{"type":"Polygon","id":37037,"arcs":[[-6255,-6353,6458,6459,6460,6461,-6446,-6241,-6253]]},{"type":"Polygon","id":35047,"arcs":[[-6271,6462,6463,6464,-6401,-6224]]},{"type":"Polygon","id":37195,"arcs":[[6465,6466,6467,6468,-6276,-6322]]},{"type":"Polygon","id":37159,"arcs":[[-6396,6469,6470,-6373,-6360]]},{"type":"Polygon","id":40111,"arcs":[[-6165,-6312,6471,6472,6473,-6307]]},{"type":"Polygon","id":40101,"arcs":[[-6315,6474,6475,6476,-6472,-6311]]},{"type":"Polygon","id":47177,"arcs":[[-6350,6477,6478,6479,6480,-6434,-6327]]},{"type":"Polygon","id":47119,"arcs":[[6481,6482,6483,6484,-6427,-6383]]},{"type":"Polygon","id":47039,"arcs":[[6485,6486,6487,6488,-6323,-6190]]},{"type":"Polygon","id":47135,"arcs":[[-6429,6489,6490,-6486,-6189,-6247]]},{"type":"Polygon","id":37147,"arcs":[[-6356,6491,6492,6493,6494,6495,6496,-6466,-6321]]},{"type":"Polygon","id":37035,"arcs":[[-6377,6497,-6414,-6337,-6385]]},{"type":"Polygon","id":37021,"arcs":[[-6437,6498,6499,6500,-6357,-6347]]},{"type":"Polygon","id":47143,"arcs":[[6501,6502,6503,-6290,-6389]]},{"type":"Polygon","id":47175,"arcs":[[-6294,6504,-6292,6505,6506,-6478,-6349]]},{"type":"Polygon","id":47077,"arcs":[[-6489,6507,6508,6509,-6324]]},{"type":"Polygon","id":47075,"arcs":[[6510,6511,6512,6513,-6438,-6420]]},{"type":"Polygon","id":37101,"arcs":[[-6469,6514,6515,6516,-6351,-6277]]},{"type":"Polygon","id":40039,"arcs":[[-6303,6517,6518,6519,-6397,-6305]]},{"type":"Polygon","id":6071,"arcs":[[6520,6521,6522,6523,6524,6525,-5468,-5913]]},{"type":"Polygon","id":6079,"arcs":[[-6142,6526,6527,6528,-5874]]},{"type":"Polygon","id":6029,"arcs":[[-6526,6529,6530,6531,-6527,-6141,-5940,-5469]]},{"type":"Polygon","id":47113,"arcs":[[-6325,-6510,6532,6533,-6511,-6419,-6262]]},{"type":"Polygon","id":5141,"arcs":[[-6331,6534,6535,6536,6537,-6339]]},{"type":"Polygon","id":37087,"arcs":[[-6501,6538,6539,6540,-6391,-6287,-6286,-6358]]},{"type":"Polygon","id":5047,"arcs":[[6541,6542,6543,-6203,6544]]},{"type":"Polygon","id":47007,"arcs":[[-6504,6545,6546,-6506,-6291]]},{"type":"Polygon","id":5071,"arcs":[[-6202,-6335,6547,6548,-6545]]},{"type":"Polygon","id":5033,"arcs":[[6549,6550,-6316,-6256,-6204,-6544]]},{"type":"Polygon","id":47121,"arcs":[[6551,6552,6553,-6502,-6388]]},{"type":"Polygon","id":35037,"arcs":[[-6372,6554,6555,6556,6557,6558,6559,-6463,-6270,-5788]]},{"type":"MultiPolygon","id":37013,"arcs":[[[6560,6561,6562,-6494]],[[-6431,6563,6564,-6492,-6355]]]},{"type":"Polygon","id":5115,"arcs":[[-6340,-6538,6565,6566,6567,-6548,-6334]]},{"type":"Polygon","id":40017,"arcs":[[6568,6569,6570,6571,6572,-6301,-6297]]},{"type":"Polygon","id":40109,"arcs":[[-6442,6573,6574,-6569,-6300]]},{"type":"Polygon","id":5023,"arcs":[[-6445,6575,6576,-6535,-6330]]},{"type":"Polygon","id":47117,"arcs":[[6577,6578,6579,-6482,-6382,-6344]]},{"type":"Polygon","id":5111,"arcs":[[-6412,6580,6581,-6452,-6422]]},{"type":"Polygon","id":37095,"arcs":[[-6424,6582,-6258,6583,-6564,-6430]]},{"type":"Polygon","id":47031,"arcs":[[-6435,-6481,6584,6585,6586,6587,-6342]]},{"type":"Polygon","id":47003,"arcs":[[-6588,6588,6589,-6578,-6343]]},{"type":"Polygon","id":37173,"arcs":[[6590,6591,6592,-6456,-6392,-6541]]},{"type":"Polygon","id":47123,"arcs":[[-6458,6593,6594,6595,6596,6597,6598,-6450]]},{"type":"Polygon","id":47101,"arcs":[[-6485,6599,6600,-6490,-6428]]},{"type":"Polygon","id":37079,"arcs":[[6601,6602,-6467,-6497]]},{"type":"MultiPolygon","id":47167,"arcs":[[[6603,6604,-6410]],[[-6514,6605,6606,-6408,-6439]]]},{"type":"Polygon","id":47107,"arcs":[[-6451,-6599,6607,-6597,6608,6609,-6552,-6387]]},{"type":"Polygon","id":40135,"arcs":[[-6317,-6551,6610,6611,6612,-6475,-6314]]},{"type":"Polygon","id":40107,"arcs":[[-6474,6613,6614,6615,6616,-6440,-6308]]},{"type":"Polygon","id":37105,"arcs":[[6617,6618,-6461,-6460]]},{"type":"Polygon","id":48359,"arcs":[[-6381,6619,6620,-6555,-6371]]},{"type":"Polygon","id":48065,"arcs":[[-6364,6621,6622,6623,-6379,-6368]]},{"type":"Polygon","id":48179,"arcs":[[6624,6625,-6622,-6363]]},{"type":"Polygon","id":48483,"arcs":[[-6399,6626,6627,-6625,-6367]]},{"type":"Polygon","id":48375,"arcs":[[-6624,6628,-6620,-6380]]},{"type":"Polygon","id":37161,"arcs":[[6629,6630,6631,6632,6633,-6499,-6436,-6417]]},{"type":"Polygon","id":37191,"arcs":[[-6603,6634,6635,6636,-6515,-6468]]},{"type":"Polygon","id":47023,"arcs":[[6637,6638,6639,-6533,-6509]]},{"type":"Polygon","id":37085,"arcs":[[-6517,6640,6641,6642,-6618,-6459,-6352]]},{"type":"Polygon","id":37045,"arcs":[[6643,6644,6645,6646,-6630,-6416]]},{"type":"Polygon","id":37109,"arcs":[[-6376,6647,6648,-6644,-6415,-6498]]},{"type":"Polygon","id":47153,"arcs":[[6649,6650,6651,-6479,-6507,-6547]]},{"type":"Polygon","id":40091,"arcs":[[6652,6653,6654,-6614,-6473,-6477]]},{"type":"Polygon","id":40015,"arcs":[[-6573,6655,6656,6657,6658,-6518,-6302]]},{"type":"Polygon","id":5145,"arcs":[[-6455,6659,6660,6661,6662,-6576,-6444]]},{"type":"Polygon","id":47061,"arcs":[[6663,6664,-6585,-6480,-6652]]},{"type":"Polygon","id":4025,"arcs":[[6665,6666,6667,6668,6669,-5736]]},{"type":"Polygon","id":37099,"arcs":[[-6540,6670,6671,6672,6673,-6591]]},{"type":"Polygon","id":37119,"arcs":[[6674,6675,6676,6677,6678,-6648,-6375]]},{"type":"Polygon","id":37125,"arcs":[[-6619,-6643,6679,6680,6681,6682,-6447,-6462]]},{"type":"Polygon","id":37123,"arcs":[[-6683,6683,6684,-6395,-6448]]},{"type":"Polygon","id":37025,"arcs":[[6685,6686,-6675,-6374,-6471]]},{"type":"Polygon","id":40009,"arcs":[[-6520,6687,6688,6689,6690,6691,-6627,-6398]]},{"type":"Polygon","id":37167,"arcs":[[-6685,6692,6693,-6686,-6470]]},{"type":"Polygon","id":37089,"arcs":[[-6634,6694,6695,6696,-6500]]},{"type":"Polygon","id":47181,"arcs":[[6697,6698,6699,-6487,-6491,-6601]]},{"type":"Polygon","id":40133,"arcs":[[6700,6701,6702,-6616]]},{"type":"Polygon","id":37075,"arcs":[[6703,6704,-6594,-6457,-6593]]},{"type":"Polygon","id":40149,"arcs":[[-6659,6705,-6688,-6519]]},{"type":"Polygon","id":40125,"arcs":[[-6617,-6703,6706,6707,6708,-6574,-6441]]},{"type":"Polygon","id":5029,"arcs":[[6709,6710,6711,-6566,-6537]]},{"type":"Polygon","id":47099,"arcs":[[-6484,6712,6713,-6698,-6600]]},{"type":"Polygon","id":40061,"arcs":[[6714,6715,6716,-6653,-6476,-6613]]},{"type":"Polygon","id":47065,"arcs":[[-6554,6717,6718,6719,6720,6721,-6650,-6546,-6503]]},{"type":"Polygon","id":47055,"arcs":[[-6580,6722,6723,6724,-6713,-6483]]},{"type":"Polygon","id":5131,"arcs":[[-6543,6725,6726,6727,-6611,-6550]]},{"type":"Polygon","id":5037,"arcs":[[6728,6729,6730,-6453,-6582]]},{"type":"Polygon","id":5147,"arcs":[[-6731,6731,6732,6733,-6660,-6454]]},{"type":"Polygon","id":5035,"arcs":[[-6411,-6605,6734,6735,6736,6737,6738,-6729,-6581]]},{"type":"Polygon","id":47069,"arcs":[[-6534,-6640,6739,6740,6741,6742,6743,-6512]]},{"type":"Polygon","id":37107,"arcs":[[6744,6745,6746,-6635,-6602,-6496]]},{"type":"Polygon","id":5083,"arcs":[[-6549,-6568,6747,6748,-6726,-6542]]},{"type":"Polygon","id":37175,"arcs":[[6749,6750,6751,-6671,-6539,-6697]]},{"type":"Polygon","id":47071,"arcs":[[-6700,6752,6753,6754,6755,-6638,-6508,-6488]]},{"type":"Polygon","id":37071,"arcs":[[-6679,6756,-6645,-6649]]},{"type":"MultiPolygon","id":37049,"arcs":[[[6757,6758,6759]],[[-6563,6760,6761,6762,-6745,-6495]]]},{"type":"Polygon","id":47127,"arcs":[[6763,6764,-6589,-6587]]},{"type":"Polygon","id":47157,"arcs":[[6765,6766,6767,-6735,-6604,-6409,-6607]]},{"type":"Polygon","id":37149,"arcs":[[6768,6769,-6695,-6633]]},{"type":"Polygon","id":47047,"arcs":[[-6744,6770,6771,-6766,-6606,-6513]]},{"type":"Polygon","id":47109,"arcs":[[-6756,6772,-6740,-6639]]},{"type":"Polygon","id":40079,"arcs":[[6773,6774,6775,6776,6777,-6715,-6612,-6728]]},{"type":"Polygon","id":40051,"arcs":[[6778,6779,6780,6781,-6656,-6572]]},{"type":"Polygon","id":40027,"arcs":[[-6709,6782,-6570,-6575]]},{"type":"Polygon","id":47103,"arcs":[[-6765,6783,6784,6785,-6723,-6579,-6590]]},{"type":"Polygon","id":5045,"arcs":[[-6577,-6663,6786,6787,6788,-6710,-6536]]},{"type":"Polygon","id":47051,"arcs":[[-6665,6789,6790,6791,-6784,-6764,-6586]]},{"type":"Polygon","id":47011,"arcs":[[6792,6793,6794,-6718,-6553,-6610]]},{"type":"Polygon","id":35006,"arcs":[[-6268,6795,6796,6797,6798,-5781,-6400]]},{"type":"Polygon","id":40087,"arcs":[[-6708,6799,6800,-6779,-6571,-6783]]},{"type":"Polygon","id":37113,"arcs":[[6801,6802,6803,-6704,-6592,-6674]]},{"type":"Polygon","id":37137,"arcs":[[-6761,-6562,6804]]},{"type":"Polygon","id":47115,"arcs":[[-6722,6805,6806,-6790,-6664,-6651]]},{"type":"Polygon","id":37163,"arcs":[[-6637,6807,6808,6809,6810,-6641,-6516]]},{"type":"Polygon","id":5149,"arcs":[[-6712,6811,6812,6813,6814,-6748,-6567]]},{"type":"Polygon","id":40121,"arcs":[[-6717,6815,6816,6817,6818,6819,-6654]]},{"type":"Polygon","id":37039,"arcs":[[-6804,6820,6821,6822,6823,-6595,-6705]]},{"type":"Polygon","id":40063,"arcs":[[-6655,-6820,6824,6825,-6701,-6615]]},{"type":"Polygon","id":47139,"arcs":[[-6824,6826,6827,-6793,-6609,-6596]]},{"type":"Polygon","id":37051,"arcs":[[-6811,6828,6829,6830,-6680,-6642]]},{"type":"Polygon","id":37103,"arcs":[[6831,-6759,6832,6833,6834,-6746,-6763]]},{"type":"Polygon","id":35001,"arcs":[[-6403,6835,6836,-6796,-6267]]},{"type":"Polygon","id":35019,"arcs":[[-6560,6837,6838,6839,-6464]]},{"type":"Polygon","id":45045,"arcs":[[-6770,6840,6841,6842,6843,6844,-6750,-6696]]},{"type":"Polygon","id":37007,"arcs":[[6845,6846,6847,6848,-6693]]},{"type":"Polygon","id":37093,"arcs":[[-6831,6849,6850,6851,-6681]]},{"type":"Polygon","id":37179,"arcs":[[-6849,6852,6853,-6676,-6687,-6694]]},{"type":"Polygon","id":45083,"arcs":[[6854,6855,-6841,-6769,-6632,6856]]},{"type":"Polygon","id":37061,"arcs":[[-6747,-6835,6857,6858,-6808,-6636]]},{"type":"Polygon","id":48117,"arcs":[[6859,6860,6861,6862,-6556,-6621]]},{"type":"Polygon","id":45021,"arcs":[[6863,6864,-6857,-6631,-6647,6865]]},{"type":"Polygon","id":48129,"arcs":[[6866,6867,6868,6869,-6626]]},{"type":"Polygon","id":48087,"arcs":[[-6692,6870,6871,6872,-6867,-6628]]},{"type":"Polygon","id":48381,"arcs":[[6873,6874,6875,-6860,-6629]]},{"type":"Polygon","id":37153,"arcs":[[-6682,6876,6877,-6846,-6684]]},{"type":"Polygon","id":48011,"arcs":[[-6870,6878,6879,-6874,-6623]]},{"type":"Polygon","id":45091,"arcs":[[6880,6881,6882,-6866,-6646,-6757,-6678]]},{"type":"Polygon","id":37043,"arcs":[[-6803,6883,6884,6885,-6821]]},{"type":"Polygon","id":5123,"arcs":[[-6739,6886,6887,-6732,-6730]]},{"type":"Polygon","id":40075,"arcs":[[-6658,6888,6889,6890,6891,-6689,-6706]]},{"type":"MultiPolygon","id":37031,"arcs":[[[6892,-6833,-6758,6893]]]},{"type":"Polygon","id":40055,"arcs":[[-6892,6894,6895,-6690]]},{"type":"MultiPolygon","id":6083,"arcs":[[[6896]],[[6897]],[[-6532,6898,6899,-6528]]]},{"type":"Polygon","id":5105,"arcs":[[6900,6901,6902,-6812,-6711,-6789]]},{"type":"Polygon","id":5127,"arcs":[[-6815,6903,6904,-6774,-6727,-6749]]},{"type":"Polygon","id":5117,"arcs":[[-6734,6905,6906,6907,-6661]]},{"type":"Polygon","id":45077,"arcs":[[-6845,6908,6909,-6751]]},{"type":"Polygon","id":5085,"arcs":[[-6908,6910,6911,6912,-6787,-6662]]},{"type":"Polygon","id":45057,"arcs":[[-6854,6913,6914,6915,6916,-6881,-6677]]},{"type":"Polygon","id":40077,"arcs":[[-6778,6917,-6816,-6716]]},{"type":"Polygon","id":45073,"arcs":[[6918,6919,6920,6921,6922,6923,-6672,-6752,-6910]]},{"type":"Polygon","id":35057,"arcs":[[-6840,6924,6925,6926,-6836,-6402,-6465]]},{"type":"Polygon","id":37165,"arcs":[[-6851,6927,6928,-6877,-6852]]},{"type":"Polygon","id":40057,"arcs":[[-6896,6929,6930,6931,-6871,-6691]]},{"type":"Polygon","id":5119,"arcs":[[-6913,6932,6933,6934,-6901,-6788]]},{"type":"Polygon","id":1077,"arcs":[[6935,6936,6937,-6753,-6699,-6714,-6725,6938]]},{"type":"Polygon","id":5095,"arcs":[[-6888,6939,6940,6941,-6906,-6733]]},{"type":"Polygon","id":13241,"arcs":[[6942,6943,-6884,-6802,-6673,-6924]]},{"type":"Polygon","id":1083,"arcs":[[-6786,6944,6945,6946,-6939,-6724]]},{"type":"Polygon","id":28003,"arcs":[[6947,6948,-6741,-6773,-6755,6949]]},{"type":"Polygon","id":28141,"arcs":[[6950,6951,6952,-6950,-6754,-6938,6953]]},{"type":"Polygon","id":28139,"arcs":[[6954,6955,6956,-6742,-6949]]},{"type":"Polygon","id":28033,"arcs":[[6957,6958,6959,-6736,-6768,6960]]},{"type":"Polygon","id":28009,"arcs":[[6961,6962,-6771,-6743,-6957]]},{"type":"Polygon","id":28093,"arcs":[[6963,6964,6965,-6961,-6767,-6772,-6963]]},{"type":"Polygon","id":13281,"arcs":[[-6944,6966,6967,6968,-6885]]},{"type":"Polygon","id":1089,"arcs":[[-6792,6969,6970,6971,-6945,-6785]]},{"type":"Polygon","id":1071,"arcs":[[6972,6973,-6970,-6791,-6807,6974]]},{"type":"Polygon","id":13213,"arcs":[[6975,6976,6977,6978,-6794,-6828,6979]]},{"type":"Polygon","id":13111,"arcs":[[-6823,6980,6981,6982,6983,-6980,-6827]]},{"type":"Polygon","id":13313,"arcs":[[-6978,6984,6985,6986,-6795,-6979]]},{"type":"Polygon","id":13047,"arcs":[[6987,-6719,-6987]]},{"type":"Polygon","id":13291,"arcs":[[-6886,-6969,6988,6989,-6981,-6822]]},{"type":"Polygon","id":37133,"arcs":[[-6893,6990,6991,-6858,-6834]]},{"type":"Polygon","id":13083,"arcs":[[-6806,-6721,6992,6993,-6975]]},{"type":"Polygon","id":13295,"arcs":[[-6986,6994,6995,6996,6997,-6993,-6720,-6988]]},{"type":"Polygon","id":40123,"arcs":[[-6702,-6826,6998,6999,7000,7001,-6800,-6707]]},{"type":"Polygon","id":35061,"arcs":[[-6837,-6927,7002,-6797]]},{"type":"Polygon","id":37155,"arcs":[[7003,7004,7005,7006,7007,-6928,-6850,-6830]]},{"type":"Polygon","id":35009,"arcs":[[-6863,7008,7009,7010,-6557]]},{"type":"Polygon","id":45087,"arcs":[[-6864,-6883,7011,7012,7013,7014,-6855,-6865]]},{"type":"Polygon","id":5077,"arcs":[[-6738,7015,7016,-6940,-6887]]},{"type":"Polygon","id":1033,"arcs":[[7017,7018,-6954,-6937]]},{"type":"MultiPolygon","id":6111,"arcs":[[[7019]],[[7020,-6899,-6531,7021]]]},{"type":"Polygon","id":28143,"arcs":[[-6737,-6960,7022,7023,7024,7025,7026,-7016]]},{"type":"Polygon","id":1049,"arcs":[[-6998,7027,7028,7029,7030,-6973,-6994]]},{"type":"Polygon","id":37017,"arcs":[[7031,7032,-7004,-6829,-6810]]},{"type":"Polygon","id":40065,"arcs":[[7033,7034,7035,7036,-6930,-6895,-6891]]},{"type":"Polygon","id":5125,"arcs":[[-6935,7037,7038,7039,-6902]]},{"type":"Polygon","id":40031,"arcs":[[-6657,-6782,7040,7041,7042,-6889]]},{"type":"Polygon","id":40049,"arcs":[[-7002,7043,7044,7045,-6780,-6801]]},{"type":"Polygon","id":13123,"arcs":[[7046,7047,7048,-6976,-6984]]},{"type":"Polygon","id":13137,"arcs":[[-6923,7049,7050,7051,7052,-6967,-6943]]},{"type":"MultiPolygon","id":6037,"arcs":[[[7053]],[[7054]],[[-6525,7055,7056,-7022,-6530]]]},{"type":"Polygon","id":45023,"arcs":[[-6917,7057,-7012,-6882]]},{"type":"Polygon","id":45007,"arcs":[[-6843,7058,7059,7060,-6919,-6909,-6844]]},{"type":"Polygon","id":45025,"arcs":[[7061,7062,7063,-6914,-6853,-6848,7064]]},{"type":"Polygon","id":45069,"arcs":[[-7008,7065,7066,7067,-7065,-6847,-6878,-6929]]},{"type":"Polygon","id":1079,"arcs":[[-6947,7068,7069,7070,7071,-7018,-6936]]},{"type":"Polygon","id":13311,"arcs":[[7072,7073,-6989,-6968,-7053]]},{"type":"Polygon","id":45059,"arcs":[[-7015,7074,7075,7076,-6842,-6856]]},{"type":"Polygon","id":35011,"arcs":[[7077,7078,7079,-6838,-6559]]},{"type":"Polygon","id":28137,"arcs":[[-6966,7080,7081,-7023,-6959,-6958]]},{"type":"Polygon","id":5051,"arcs":[[-7040,7082,7083,-6813,-6903]]},{"type":"Polygon","id":40029,"arcs":[[-6819,7084,7085,-6999,-6825]]},{"type":"Polygon","id":28117,"arcs":[[-6953,7086,7087,7088,-6955,-6948]]},{"type":"Polygon","id":48437,"arcs":[[-6880,7089,7090,7091,7092,-6875]]},{"type":"Polygon","id":48045,"arcs":[[-6869,7093,7094,7095,-7090,-6879]]},{"type":"Polygon","id":48069,"arcs":[[-7093,7096,7097,7098,-6861,-6876]]},{"type":"Polygon","id":48191,"arcs":[[-6873,7099,7100,7101,-7094,-6868]]},{"type":"Polygon","id":48075,"arcs":[[-6932,7102,7103,-7100,-6872]]},{"type":"Polygon","id":5097,"arcs":[[-7084,7104,7105,7106,7107,-6904,-6814]]},{"type":"Polygon","id":48369,"arcs":[[-7099,7108,7109,-7009,-6862]]},{"type":"Polygon","id":13187,"arcs":[[-7074,7110,7111,-6982,-6990]]},{"type":"Polygon","id":37141,"arcs":[[-6992,7112,7113,7114,7115,-7032,-6809,-6859]]},{"type":"Polygon","id":5113,"arcs":[[7116,7117,7118,-6775,-6905,-7108]]},{"type":"Polygon","id":1103,"arcs":[[-6972,7119,7120,-7069,-6946]]},{"type":"Polygon","id":13257,"arcs":[[7121,7122,-7050,-6922]]},{"type":"Polygon","id":40137,"arcs":[[-7046,7123,7124,7125,-7041,-6781]]},{"type":"Polygon","id":40005,"arcs":[[7126,7127,7128,7129,-7085,-6818]]},{"type":"Polygon","id":40127,"arcs":[[-6777,7130,7131,-7127,-6817,-6918]]},{"type":"Polygon","id":5107,"arcs":[[-7027,7132,7133,7134,7135,-6941,-7017]]},{"type":"Polygon","id":40099,"arcs":[[-7001,7136,7137,-7044]]},{"type":"Polygon","id":40141,"arcs":[[-7043,7138,7139,7140,-7035,-7034,-6890]]},{"type":"Polygon","id":13129,"arcs":[[-7049,7141,7142,7143,-6995,-6985,-6977]]},{"type":"Polygon","id":45033,"arcs":[[7144,7145,7146,-7066,-7007]]},{"type":"Polygon","id":13085,"arcs":[[-7112,7147,7148,7149,7150,-7047,-6983]]},{"type":"Polygon","id":45055,"arcs":[[-7063,7151,7152,7153,7154,7155,-6915,-7064]]},{"type":"Polygon","id":35041,"arcs":[[-7011,7156,7157,7158,7159,-7078,-6558]]},{"type":"Polygon","id":28145,"arcs":[[-7089,7160,7161,7162,-6964,-6962,-6956]]},{"type":"Polygon","id":1095,"arcs":[[-7031,7163,7164,7165,-7120,-6971,-6974]]},{"type":"Polygon","id":13055,"arcs":[[7166,7167,-7028,-6997]]},{"type":"Polygon","id":13115,"arcs":[[-7144,7168,7169,7170,-7167,-6996]]},{"type":"Polygon","id":35053,"arcs":[[-6926,7171,7172,7173,-6798,-7003]]},{"type":"Polygon","id":35003,"arcs":[[-7174,7174,7175,7176,-5782,-6799]]},{"type":"Polygon","id":1059,"arcs":[[-7072,7177,7178,7179,-6951,-7019]]},{"type":"Polygon","id":48197,"arcs":[[-7037,7180,7181,7182,-7103,-6931]]},{"type":"Polygon","id":45039,"arcs":[[-6916,-7156,7183,7184,-7013,-7058]]},{"type":"Polygon","id":5001,"arcs":[[-6942,-7136,7185,7186,7187,-6911,-6907]]},{"type":"Polygon","id":13227,"arcs":[[-7151,7188,-7142,-7048]]},{"type":"Polygon","id":28071,"arcs":[[-7163,7189,7190,7191,7192,-7081,-6965]]},{"type":"Polygon","id":28107,"arcs":[[-7193,7193,7194,7195,-7024,-7082]]},{"type":"Polygon","id":13119,"arcs":[[7196,7197,7198,-7122,-6921]]},{"type":"Polygon","id":45031,"arcs":[[-7068,7199,7200,-7152,-7062]]},{"type":"Polygon","id":45071,"arcs":[[-7185,7201,7202,7203,7204,-7075,-7014]]},{"type":"Polygon","id":1019,"arcs":[[-7171,7205,7206,7207,7208,-7029,-7168]]},{"type":"Polygon","id":28027,"arcs":[[7209,7210,7211,-7133,-7026,7212]]},{"type":"Polygon","id":28119,"arcs":[[-7196,7213,-7213,-7025]]},{"type":"Polygon","id":13139,"arcs":[[-7052,7214,7215,7216,7217,-7148,-7111,-7073]]},{"type":"Polygon","id":28081,"arcs":[[7218,7219,7220,7221,-7161,-7088]]},{"type":"Polygon","id":40019,"arcs":[[-7138,7222,7223,7224,7225,-7124,-7045]]},{"type":"Polygon","id":40069,"arcs":[[-7000,-7086,-7130,7226,7227,-7223,-7137]]},{"type":"Polygon","id":40033,"arcs":[[-7126,7228,7229,7230,-7139,-7042]]},{"type":"Polygon","id":40089,"arcs":[[-7119,7231,7232,7233,7234,7235,-7131,-6776]]},{"type":"Polygon","id":5059,"arcs":[[-7039,7236,7237,7238,-7105,-7083]]},{"type":"Polygon","id":4007,"arcs":[[-5733,7239,7240,7241,-6667,-6666,-5735]]},{"type":"Polygon","id":13147,"arcs":[[-7061,7242,7243,-7197,-6920]]},{"type":"Polygon","id":5053,"arcs":[[-6934,7244,7245,7246,-7237,-7038]]},{"type":"Polygon","id":5069,"arcs":[[-6912,-7188,7247,7248,-7245,-6933]]},{"type":"Polygon","id":13011,"arcs":[[7249,7250,-7215,-7051,-7123,-7199]]},{"type":"Polygon","id":37047,"arcs":[[-7116,7251,7252,-7005,-7033]]},{"type":"Polygon","id":45001,"arcs":[[7253,7254,7255,-7059,-7077]]},{"type":"Polygon","id":28057,"arcs":[[-6952,-7180,7256,7257,-7219,-7087]]},{"type":"Polygon","id":48487,"arcs":[[-7141,7258,7259,7260,-7181,-7036]]},{"type":"Polygon","id":13015,"arcs":[[7261,7262,7263,-7169,-7143,7264]]},{"type":"Polygon","id":13057,"arcs":[[-7150,7265,7266,7267,-7265,-7189]]},{"type":"Polygon","id":45047,"arcs":[[-7205,7268,7269,7270,-7254,-7076]]},{"type":"Polygon","id":37129,"arcs":[[7271,7272,7273,7274,-7114]]},{"type":"Polygon","id":28115,"arcs":[[-7222,7275,7276,-7190,-7162]]},{"type":"Polygon","id":45061,"arcs":[[7277,7278,-7153,-7201]]},{"type":"Polygon","id":37019,"arcs":[[-7275,7279,7280,7281,7282,-7252,-7115]]},{"type":"Polygon","id":5061,"arcs":[[7283,7284,7285,7286,-7117]]},{"type":"Polygon","id":5109,"arcs":[[7287,7288,7289,-7284,-7107]]},{"type":"Polygon","id":35027,"arcs":[[-7080,7290,7291,7292,-7172,-6925,-6839]]},{"type":"Polygon","id":5019,"arcs":[[-7239,7293,7294,7295,-7288,-7106]]},{"type":"Polygon","id":13117,"arcs":[[-7218,7296,7297,-7266,-7149]]},{"type":"Polygon","id":1093,"arcs":[[7298,7299,7300,7301,7302,-7257,-7179]]},{"type":"Polygon","id":4012,"arcs":[[-6669,7303,7304,7305,7306,-6522,7307]]},{"type":"Polygon","id":48345,"arcs":[[7308,7309,7310,-7095,-7102]]},{"type":"Polygon","id":48101,"arcs":[[-7104,-7183,7311,7312,-7309,-7101]]},{"type":"Polygon","id":1043,"arcs":[[-7166,7313,7314,7315,-7070,-7121]]},{"type":"Polygon","id":48153,"arcs":[[-7311,7316,7317,-7091,-7096]]},{"type":"Polygon","id":48189,"arcs":[[-7097,-7092,-7318,7318,7319]]},{"type":"Polygon","id":48279,"arcs":[[-7320,7320,7321,-7109,-7098]]},{"type":"Polygon","id":45041,"arcs":[[7322,7323,7324,7325,-7278,-7200,-7067,-7147]]},{"type":"Polygon","id":48017,"arcs":[[-7322,7326,-7157,-7010,-7110]]},{"type":"Polygon","id":1133,"arcs":[[-7071,-7316,7327,-7299,-7178]]},{"type":"Polygon","id":45051,"arcs":[[-7253,-7283,7328,7329,7330,-7145,-7006]]},{"type":"Polygon","id":45067,"arcs":[[-7331,7331,7332,-7323,-7146]]},{"type":"Polygon","id":13157,"arcs":[[7333,7334,7335,-7216,-7251]]},{"type":"Polygon","id":40067,"arcs":[[-7226,7336,7337,7338,-7229,-7125]]},{"type":"Polygon","id":13105,"arcs":[[-7256,7339,7340,7341,7342,7343,-7243,-7060]]},{"type":"Polygon","id":13195,"arcs":[[-7344,7344,7345,7346,-7334,-7250,-7198,-7244]]},{"type":"Polygon","id":45079,"arcs":[[7347,7348,7349,-7202,-7184,-7155]]},{"type":"Polygon","id":1009,"arcs":[[-7165,7350,7351,7352,7353,-7314]]},{"type":"Polygon","id":48155,"arcs":[[-7182,-7261,7354,7355,7356,-7312]]},{"type":"Polygon","id":48485,"arcs":[[-7231,7357,7358,-7259,-7140]]},{"type":"Polygon","id":1055,"arcs":[[-7209,7359,7360,-7351,-7164,-7030]]},{"type":"Polygon","id":45063,"arcs":[[7361,7362,7363,7364,-7203,-7350]]},{"type":"Polygon","id":28161,"arcs":[[7365,7366,7367,-7194,-7192]]},{"type":"Polygon","id":5133,"arcs":[[7368,-7232,-7118,-7287]]},{"type":"Polygon","id":45081,"arcs":[[-7365,7369,7370,-7269,-7204]]},{"type":"Polygon","id":13121,"arcs":[[-7298,7371,7372,7373,7374,7375,7376,7377,7378,-7267]]},{"type":"Polygon","id":40095,"arcs":[[7379,7380,7381,-7224,-7228]]},{"type":"Polygon","id":5079,"arcs":[[-7187,7382,7383,7384,-7248]]},{"type":"Polygon","id":45085,"arcs":[[-7326,7385,7386,-7348,-7154,-7279]]},{"type":"Polygon","id":13135,"arcs":[[7387,7388,7389,7390,-7372,-7297,-7217]]},{"type":"Polygon","id":28135,"arcs":[[-7368,7391,7392,7393,-7210,-7214,-7195]]},{"type":"Polygon","id":28013,"arcs":[[-7277,7394,7395,7396,-7366,-7191]]},{"type":"Polygon","id":40013,"arcs":[[7397,7398,7399,7400,-7380,-7227,-7129]]},{"type":"Polygon","id":40023,"arcs":[[-7236,7401,7402,-7398,-7128,-7132]]},{"type":"Polygon","id":5039,"arcs":[[-7247,7403,7404,7405,-7294,-7238]]},{"type":"Polygon","id":48077,"arcs":[[-7339,7406,7407,7408,-7358,-7230]]},{"type":"Polygon","id":13013,"arcs":[[7409,7410,-7388,-7336]]},{"type":"Polygon","id":28011,"arcs":[[7411,7412,7413,7414,-7134,-7212]]},{"type":"Polygon","id":5041,"arcs":[[-7415,7415,7416,-7383,-7186,-7135]]},{"type":"Polygon","id":13233,"arcs":[[-7264,7417,7418,7419,-7206,-7170]]},{"type":"Polygon","id":28095,"arcs":[[-7258,-7303,7420,7421,7422,7423,-7220]]},{"type":"Polygon","id":35005,"arcs":[[-7160,7424,7425,7426,-7291,-7079]]},{"type":"Polygon","id":13067,"arcs":[[-7379,7427,7428,-7262,-7268]]},{"type":"Polygon","id":6065,"arcs":[[7429,7430,7431,-6523,-7307]]},{"type":"Polygon","id":13223,"arcs":[[-7429,7432,7433,7434,-7418,-7263]]},{"type":"Polygon","id":45065,"arcs":[[-7271,7435,7436,7437,-7340,-7255]]},{"type":"Polygon","id":28017,"arcs":[[-7221,-7424,7438,7439,-7395,-7276]]},{"type":"Polygon","id":40085,"arcs":[[-7382,7440,7441,7442,-7337,-7225]]},{"type":"Polygon","id":5025,"arcs":[[-7385,7443,7444,7445,-7404,-7246,-7249]]},{"type":"Polygon","id":1075,"arcs":[[7446,7447,7448,-7421,-7302]]},{"type":"Polygon","id":13221,"arcs":[[-7343,7449,7450,7451,7452,7453,-7346,-7345]]},{"type":"Polygon","id":4013,"arcs":[[-7242,7454,7455,7456,-7304,-6668]]},{"type":"Polygon","id":13059,"arcs":[[-7454,7457,-7335,-7347]]},{"type":"Polygon","id":5057,"arcs":[[7458,7459,7460,7461,-7285,-7290]]},{"type":"Polygon","id":1127,"arcs":[[-7315,-7354,7462,7463,7464,-7300,-7328]]},{"type":"Polygon","id":13317,"arcs":[[7465,7466,7467,7468,-7450,-7342]]},{"type":"Polygon","id":48337,"arcs":[[-7443,7469,7470,7471,-7407,-7338]]},{"type":"Polygon","id":1115,"arcs":[[7472,7473,7474,7475,-7352,-7361]]},{"type":"Polygon","id":28133,"arcs":[[-7394,7476,7477,7478,-7412,-7211]]},{"type":"Polygon","id":13181,"arcs":[[-7438,7479,7480,-7466,-7341]]},{"type":"Polygon","id":45037,"arcs":[[7481,7482,7483,-7436,-7270,-7371]]},{"type":"Polygon","id":13089,"arcs":[[-7391,7484,7485,7486,-7373]]},{"type":"Polygon","id":1015,"arcs":[[7487,-7473,-7360,-7208,7488]]},{"type":"Polygon","id":13219,"arcs":[[-7453,7489,7490,7491,-7410,-7458]]},{"type":"Polygon","id":1029,"arcs":[[-7420,7492,7493,7494,7495,7496,-7489,-7207]]},{"type":"Polygon","id":48387,"arcs":[[-7235,7497,7498,7499,7500,7501,7502,-7402]]},{"type":"Polygon","id":5099,"arcs":[[-7296,7503,7504,7505,-7459,-7289]]},{"type":"Polygon","id":48181,"arcs":[[-7401,7506,7507,7508,7509,-7441,-7381]]},{"type":"Polygon","id":48097,"arcs":[[-7510,7510,7511,-7470,-7442]]},{"type":"Polygon","id":5081,"arcs":[[-7286,-7462,7512,7513,-7233,-7369]]},{"type":"Polygon","id":45027,"arcs":[[7514,7515,7516,7517,-7386,-7325]]},{"type":"Polygon","id":6059,"arcs":[[-6524,-7432,7518,7519,-7056]]},{"type":"Polygon","id":48277,"arcs":[[-7503,7520,7521,-7399,-7403]]},{"type":"Polygon","id":13297,"arcs":[[-7492,7522,7523,7524,-7389,-7411]]},{"type":"Polygon","id":1057,"arcs":[[-7465,7525,7526,-7447,-7301]]},{"type":"Polygon","id":13143,"arcs":[[7527,-7493,-7419,-7435]]},{"type":"Polygon","id":28043,"arcs":[[-7397,7528,7529,7530,7531,-7392,-7367]]},{"type":"Polygon","id":45089,"arcs":[[-7333,7532,7533,-7515,-7324]]},{"type":"Polygon","id":48147,"arcs":[[-7522,7534,7535,7536,-7507,-7400]]},{"type":"Polygon","id":45017,"arcs":[[-7387,-7518,7537,-7362,-7349]]},{"type":"Polygon","id":45003,"arcs":[[7538,7539,7540,7541,-7482,-7370,-7364]]},{"type":"Polygon","id":1073,"arcs":[[-7476,7542,7543,7544,-7463,-7353]]},{"type":"Polygon","id":48269,"arcs":[[-7357,7545,7546,7547,-7313]]},{"type":"Polygon","id":48275,"arcs":[[7548,7549,-7546,-7356]]},{"type":"Polygon","id":48009,"arcs":[[-7409,7550,7551,7552,-7359]]},{"type":"Polygon","id":48125,"arcs":[[-7548,7553,7554,-7310]]},{"type":"Polygon","id":48107,"arcs":[[-7555,7555,7556,-7317]]},{"type":"Polygon","id":48023,"arcs":[[-7553,7557,-7549,-7355,-7260]]},{"type":"Polygon","id":48303,"arcs":[[-7557,7558,7559,-7319]]},{"type":"Polygon","id":48079,"arcs":[[7560,7561,7562,-7158,-7327]]},{"type":"Polygon","id":48219,"arcs":[[-7560,7563,-7561,-7321]]},{"type":"Polygon","id":5103,"arcs":[[-7406,7564,7565,7566,-7504,-7295]]},{"type":"Polygon","id":13211,"arcs":[[7567,7568,7569,7570,-7523,-7491]]},{"type":"Polygon","id":13045,"arcs":[[-7377,7571,7572,7573,-7494,-7528,-7434,7574]]},{"type":"Polygon","id":28083,"arcs":[[-7532,7575,7576,7577,-7477,-7393]]},{"type":"Polygon","id":28025,"arcs":[[-7423,7578,7579,7580,-7439]]},{"type":"Polygon","id":13097,"arcs":[[-7378,-7575,-7433,-7428]]},{"type":"Polygon","id":5013,"arcs":[[7581,7582,-7565,-7405,-7446]]},{"type":"Polygon","id":5043,"arcs":[[-7417,7583,7584,7585,-7444,-7384]]},{"type":"Polygon","id":13247,"arcs":[[7586,-7485,-7390,-7525,7587]]},{"type":"Polygon","id":45043,"arcs":[[-7330,7588,7589,7590,-7533,-7332]]},{"type":"Polygon","id":4011,"arcs":[[-7177,7591,7592,7593,7594,-5783]]},{"type":"Polygon","id":13133,"arcs":[[7595,7596,7597,-7568,-7490,-7452]]},{"type":"Polygon","id":28087,"arcs":[[-7449,7598,7599,7600,-7579,-7422]]},{"type":"Polygon","id":13217,"arcs":[[-7571,7601,7602,7603,-7588,-7524]]},{"type":"Polygon","id":28155,"arcs":[[-7581,7604,7605,7606,-7529,-7396,-7440]]},{"type":"Polygon","id":13265,"arcs":[[7607,7608,7609,-7596,-7451,-7469]]},{"type":"Polygon","id":48037,"arcs":[[-7514,7610,7611,7612,-7498,-7234]]},{"type":"Polygon","id":45075,"arcs":[[-7517,7613,7614,7615,7616,7617,-7539,-7363,-7538]]},{"type":"Polygon","id":5011,"arcs":[[-7586,7618,7619,-7582,-7445]]},{"type":"Polygon","id":13073,"arcs":[[-7437,-7484,7620,7621,-7480]]},{"type":"Polygon","id":1121,"arcs":[[-7488,-7497,7622,7623,7624,-7474]]},{"type":"Polygon","id":28097,"arcs":[[-7607,7625,7626,7627,-7530]]},{"type":"Polygon","id":28015,"arcs":[[-7628,7628,7629,-7576,-7531]]},{"type":"Polygon","id":13189,"arcs":[[-7481,-7622,7630,7631,7632,7633,-7467]]},{"type":"Polygon","id":4009,"arcs":[[-7595,7634,7635,7636,-7240,-5732,-5784]]},{"type":"Polygon","id":13063,"arcs":[[-7487,7637,7638,7639,-7374]]},{"type":"Polygon","id":13151,"arcs":[[-7587,-7604,7640,7641,-7638,-7486]]},{"type":"Polygon","id":5091,"arcs":[[7642,7643,7644,7645,-7611,-7513,-7461]]},{"type":"Polygon","id":13301,"arcs":[[7646,7647,7648,-7609,-7608,-7468,-7634]]},{"type":"Polygon","id":1125,"arcs":[[-7464,-7545,7649,7650,7651,7652,-7526]]},{"type":"Polygon","id":35025,"arcs":[[-7563,7653,7654,7655,7656,7657,7658,-7425,-7159]]},{"type":"Polygon","id":28105,"arcs":[[-7601,7659,7660,7661,-7605,-7580]]},{"type":"Polygon","id":5017,"arcs":[[-7414,7662,7663,7664,7665,7666,7667,-7584,-7416]]},{"type":"Polygon","id":13113,"arcs":[[7668,7669,-7375,-7640]]},{"type":"Polygon","id":1117,"arcs":[[-7625,7670,7671,7672,-7543,-7475]]},{"type":"Polygon","id":13245,"arcs":[[7673,7674,7675,-7631,-7621,-7483,-7542]]},{"type":"Polygon","id":1107,"arcs":[[-7527,-7653,7676,7677,7678,-7599,-7448]]},{"type":"Polygon","id":28019,"arcs":[[-7662,7679,7680,-7626,-7606]]},{"type":"Polygon","id":28151,"arcs":[[-7479,7681,7682,7683,-7663,-7413]]},{"type":"Polygon","id":13159,"arcs":[[7684,7685,7686,7687,-7602,-7570]]},{"type":"Polygon","id":13077,"arcs":[[-7670,7688,7689,7690,7691,-7572,-7376]]},{"type":"Polygon","id":45015,"arcs":[[-7591,7692,7693,7694,7695,-7614,-7516,-7534]]},{"type":"Polygon","id":6073,"arcs":[[7696,7697,-7519,-7431]]},{"type":"Polygon","id":1111,"arcs":[[-7574,7698,7699,7700,7701,7702,-7495]]},{"type":"Polygon","id":1027,"arcs":[[-7703,7703,7704,-7623,-7496]]},{"type":"Polygon","id":48119,"arcs":[[-7502,7705,7706,7707,-7535,-7521]]},{"type":"Polygon","id":45011,"arcs":[[7708,7709,7710,-7540,-7618]]},{"type":"Polygon","id":13237,"arcs":[[7711,7712,7713,-7685,-7569,-7598]]},{"type":"Polygon","id":35051,"arcs":[[-7293,7714,7715,7716,7717,-7175,-7173]]},{"type":"Polygon","id":5073,"arcs":[[-7506,7718,7719,7720,-7643,-7460]]},{"type":"Polygon","id":13141,"arcs":[[-7649,7721,7722,7723,-7712,-7597,-7610]]},{"type":"Polygon","id":4027,"arcs":[[-7457,7724,7725,7726,-7305]]},{"type":"Polygon","id":4021,"arcs":[[-7241,-7637,7727,-7455]]},{"type":"Polygon","id":48237,"arcs":[[-7472,7728,7729,7730,7731,-7551,-7408]]},{"type":"Polygon","id":5027,"arcs":[[-7567,7732,7733,7734,-7719,-7505]]},{"type":"Polygon","id":13035,"arcs":[[-7688,7735,7736,7737,-7641,-7603]]},{"type":"Polygon","id":45009,"arcs":[[7738,7739,-7709,-7617]]},{"type":"Polygon","id":6025,"arcs":[[-7727,7740,-7697,-7430,-7306]]},{"type":"Polygon","id":48497,"arcs":[[-7512,7741,7742,7743,-7729,-7471]]},{"type":"Polygon","id":48121,"arcs":[[7744,7745,7746,-7742,-7511,-7509]]},{"type":"Polygon","id":13149,"arcs":[[-7692,7747,-7699,-7573]]},{"type":"Polygon","id":48231,"arcs":[[7748,7749,7750,7751,7752,-7536,-7708,7753]]},{"type":"Polygon","id":48085,"arcs":[[-7537,-7753,7754,7755,-7745,-7508]]},{"type":"Polygon","id":48263,"arcs":[[7756,7757,7758,7759,-7554]]},{"type":"Polygon","id":48433,"arcs":[[7760,7761,7762,-7757,-7547]]},{"type":"Polygon","id":48449,"arcs":[[7763,7764,7765,-7500]]},{"type":"Polygon","id":48169,"arcs":[[-7760,7766,7767,7768,-7556]]},{"type":"Polygon","id":48447,"arcs":[[7769,7770,7771,7772,-7558]]},{"type":"Polygon","id":48503,"arcs":[[-7732,7773,7774,-7770,-7552]]},{"type":"Polygon","id":48207,"arcs":[[-7773,7775,7776,-7761,-7550]]},{"type":"Polygon","id":5003,"arcs":[[-7668,7777,7778,-7619,-7585]]},{"type":"Polygon","id":48305,"arcs":[[-7769,7779,7780,7781,-7559]]},{"type":"Polygon","id":35035,"arcs":[[-7427,7782,7783,7784,7785,7786,-7715,-7292]]},{"type":"Polygon","id":48501,"arcs":[[7787,7788,-7654,-7562]]},{"type":"Polygon","id":48445,"arcs":[[-7782,7789,7790,-7788,-7564]]},{"type":"Polygon","id":48159,"arcs":[[-7766,7791,7792,7793,-7706,-7501]]},{"type":"Polygon","id":5139,"arcs":[[-7583,-7620,-7779,7794,7795,-7733,-7566]]},{"type":"Polygon","id":48223,"arcs":[[-7794,7796,7797,-7754,-7707]]},{"type":"Polygon","id":48343,"arcs":[[-7613,7798,7799,7800,7801,-7764,-7499]]},{"type":"Polygon","id":28051,"arcs":[[-7630,7802,7803,7804,-7577]]},{"type":"Polygon","id":13255,"arcs":[[-7738,7805,7806,7807,-7689,-7669,-7639,-7642]]},{"type":"Polygon","id":45035,"arcs":[[-7696,7808,7809,-7615]]},{"type":"Polygon","id":28053,"arcs":[[-7578,-7805,7810,7811,-7682,-7478]]},{"type":"Polygon","id":13125,"arcs":[[7812,7813,7814,-7722,-7648]]},{"type":"Polygon","id":13163,"arcs":[[-7675,7815,7816,7817,7818,-7813,-7647,-7633,-7632,-7676]]},{"type":"Polygon","id":48067,"arcs":[[-7646,7819,7820,-7799,-7612]]},{"type":"Polygon","id":13033,"arcs":[[-7541,-7711,7821,7822,7823,7824,-7816,-7674]]},{"type":"Polygon","id":28103,"arcs":[[-7679,7825,7826,7827,-7660,-7600]]},{"type":"Polygon","id":28159,"arcs":[[-7828,7828,7829,7830,-7680,-7661]]},{"type":"Polygon","id":28007,"arcs":[[-7831,7831,7832,-7803,-7629,-7627,-7681]]},{"type":"Polygon","id":1007,"arcs":[[7833,7834,7835,-7650,-7544,-7673]]},{"type":"Polygon","id":13303,"arcs":[[-7815,-7814,-7819,7836,7837,7838,-7723]]},{"type":"Polygon","id":13199,"arcs":[[-7808,7839,7840,7841,7842,7843,-7690]]},{"type":"Polygon","id":13285,"arcs":[[-7844,7844,7845,-7700,-7748,-7691]]},{"type":"Polygon","id":35017,"arcs":[[-7718,7846,7847,-7592,-7176]]},{"type":"Polygon","id":13231,"arcs":[[7848,7849,-7840,-7807]]},{"type":"Polygon","id":13171,"arcs":[[7850,7851,-7849,-7806,-7737]]},{"type":"Polygon","id":13207,"arcs":[[-7687,7852,7853,7854,7855,-7851,-7736]]},{"type":"Polygon","id":13009,"arcs":[[-7724,-7839,7856,7857,-7713]]},{"type":"Polygon","id":13169,"arcs":[[-7858,7858,7859,7860,-7853,-7686,-7714]]},{"type":"Polygon","id":45029,"arcs":[[-7810,7861,7862,7863,7864,-7739,-7616]]},{"type":"Polygon","id":45005,"arcs":[[-7740,7865,7866,7867,-7822,-7710]]},{"type":"Polygon","id":1063,"arcs":[[7868,7869,7870,-7677,-7652]]},{"type":"Polygon","id":1017,"arcs":[[-7846,7871,7872,7873,-7701]]},{"type":"Polygon","id":1123,"arcs":[[-7874,7874,7875,7876,7877,-7704,-7702]]},{"type":"Polygon","id":1037,"arcs":[[-7878,7878,7879,-7671,-7624,-7705]]},{"type":"Polygon","id":28125,"arcs":[[-7812,7880,7881,-7683]]},{"type":"Polygon","id":48063,"arcs":[[-7802,7882,7883,-7792,-7765]]},{"type":"Polygon","id":1021,"arcs":[[-7880,7884,7885,7886,7887,-7834,-7672]]},{"type":"Polygon","id":35013,"arcs":[[7888,7889,7890,-7716,-7787]]},{"type":"Polygon","id":13251,"arcs":[[-7867,7891,7892,7893,7894,7895,-7823,-7868]]},{"type":"Polygon","id":45049,"arcs":[[7896,7897,7898,-7892,-7866,-7865]]},{"type":"Polygon","id":28163,"arcs":[[7899,7900,7901,7902,7903,-7881,-7811,-7804]]},{"type":"Polygon","id":22017,"arcs":[[7904,7905,7906,7907,7908,-7820,-7645,7909]]},{"type":"Polygon","id":22015,"arcs":[[7910,7911,7912,-7910,-7644,-7721]]},{"type":"Polygon","id":22119,"arcs":[[7913,-7911,-7720,-7735,7914]]},{"type":"Polygon","id":22027,"arcs":[[7915,7916,-7915,-7734,-7796,7917]]},{"type":"Polygon","id":22111,"arcs":[[7918,7919,-7918,-7795,7920]]},{"type":"Polygon","id":48499,"arcs":[[7921,7922,7923,7924,7925,-7797,-7793,-7884]]},{"type":"Polygon","id":28055,"arcs":[[-7882,-7904,7926,7927,-7664,-7684]]},{"type":"Polygon","id":13319,"arcs":[[-7838,7928,7929,7930,-7859,-7857]]},{"type":"Polygon","id":22067,"arcs":[[-7667,7931,7932,7933,-7921,-7778]]},{"type":"Polygon","id":1065,"arcs":[[-7836,7934,7935,-7869,-7651]]},{"type":"Polygon","id":22123,"arcs":[[7936,7937,-7932,-7666]]},{"type":"Polygon","id":48363,"arcs":[[7938,7939,7940,7941,7942,-7774,-7731]]},{"type":"Polygon","id":22035,"arcs":[[7943,7944,7945,-7937,-7665,-7928]]},{"type":"Polygon","id":48367,"arcs":[[7946,7947,7948,-7939,-7730,-7744]]},{"type":"Polygon","id":13293,"arcs":[[-7852,-7856,7949,7950,7951,-7841,-7850]]},{"type":"Polygon","id":1119,"arcs":[[7952,7953,7954,7955,-7826,-7678,-7871]]},{"type":"Polygon","id":48439,"arcs":[[-7743,-7747,7956,7957,7958,-7947]]},{"type":"Polygon","id":48113,"arcs":[[-7756,7959,7960,7961,-7957,-7746]]},{"type":"Polygon","id":48397,"arcs":[[-7752,7962,-7960,-7755]]},{"type":"Polygon","id":48379,"arcs":[[-7926,7963,-7749,-7798]]},{"type":"Polygon","id":48415,"arcs":[[7964,7965,7966,-7767,-7759]]},{"type":"Polygon","id":35015,"arcs":[[-7659,7967,7968,7969,-7783,-7426]]},{"type":"Polygon","id":48151,"arcs":[[-7763,7970,7971,-7965,-7758]]},{"type":"Polygon","id":48033,"arcs":[[-7967,7972,7973,7974,-7780,-7768]]},{"type":"Polygon","id":48115,"arcs":[[-7975,7975,7976,-7790,-7781]]},{"type":"Polygon","id":48165,"arcs":[[-7791,-7977,7977,7978,-7655,-7789]]},{"type":"Polygon","id":48253,"arcs":[[-7777,7979,7980,7981,-7971,-7762]]},{"type":"Polygon","id":48417,"arcs":[[7982,7983,7984,-7980,-7776,-7772]]},{"type":"Polygon","id":48429,"arcs":[[-7943,7985,-7983,-7771,-7775]]},{"type":"Polygon","id":13165,"arcs":[[-7896,7986,7987,-7824]]},{"type":"Polygon","id":13021,"arcs":[[7988,7989,7990,7991,-7854,-7861]]},{"type":"Polygon","id":28099,"arcs":[[7992,7993,7994,-7830]]},{"type":"Polygon","id":28079,"arcs":[[-7995,7995,7996,7997,-7832]]},{"type":"Polygon","id":28069,"arcs":[[-7956,7998,-7993,-7829,-7827]]},{"type":"Polygon","id":48459,"arcs":[[-7801,7999,8000,8001,8002,-7922,-7883]]},{"type":"Polygon","id":13289,"arcs":[[8003,8004,-7990,-7989,-7860,-7931]]},{"type":"Polygon","id":13263,"arcs":[[8005,8006,8007,8008,8009,-7842,-7952]]},{"type":"Polygon","id":48315,"arcs":[[-7909,8010,-8000,-7800,-7821]]},{"type":"Polygon","id":28089,"arcs":[[-7998,8011,8012,8013,-7901,-7900,-7833]]},{"type":"Polygon","id":1105,"arcs":[[-7888,8014,8015,-7935,-7835]]},{"type":"Polygon","id":13145,"arcs":[[-8010,8016,8017,-7872,-7845,-7843]]},{"type":"Polygon","id":13079,"arcs":[[-7992,8018,8019,8020,-7950,-7855]]},{"type":"Polygon","id":48257,"arcs":[[8021,8022,8023,-7961,-7963,-7751]]},{"type":"Polygon","id":13107,"arcs":[[-7825,-7988,8024,8025,8026,8027,8028,8029,-7817]]},{"type":"Polygon","id":48467,"arcs":[[-7964,-7925,8030,8031,-8022,-7750]]},{"type":"Polygon","id":13167,"arcs":[[-8030,8032,-7929,-7837,-7818]]},{"type":"Polygon","id":48203,"arcs":[[-7908,8033,8034,8035,-8001,-8011]]},{"type":"Polygon","id":35023,"arcs":[[8036,8037,8038,-7593,-7848]]},{"type":"Polygon","id":1051,"arcs":[[8039,8040,8041,-7885,-7879,-7877]]},{"type":"Polygon","id":22061,"arcs":[[8042,8043,8044,-7916,-7920]]},{"type":"Polygon","id":45053,"arcs":[[8045,8046,8047,8048,8049,8050,8051,8052,8053,8054,8055,8056,-7898]]},{"type":"Polygon","id":13269,"arcs":[[-8021,8057,8058,8059,8060,-8006,-7951]]},{"type":"Polygon","id":1081,"arcs":[[-8018,8061,8062,8063,-7875,-7873]]},{"type":"Polygon","id":1047,"arcs":[[8064,8065,8066,8067,-8015,-7887]]},{"type":"Polygon","id":22073,"arcs":[[8068,8069,8070,-8043,-7919,-7934]]},{"type":"Polygon","id":13175,"arcs":[[8071,8072,8073,-7930,-8033,8074]]},{"type":"Polygon","id":1001,"arcs":[[-8042,8075,8076,-8065,-7886]]},{"type":"MultiPolygon","id":45013,"arcs":[[[8077]],[[-8053,-8052,8078]],[[8079]],[[8080]],[[8081,-8046,-7897,-7864]]]},{"type":"Polygon","id":13225,"arcs":[[8082,-8058,-8020,8083]]},{"type":"Polygon","id":13153,"arcs":[[-8005,8084,8085,8086,8087,-8084,-8019,-7991]]},{"type":"Polygon","id":48423,"arcs":[[-7923,-8003,8088,8089,8090,8091,-8031,-7924]]},{"type":"Polygon","id":22083,"arcs":[[-7946,8092,8093,8094,-8069,-7933,-7938]]},{"type":"Polygon","id":48183,"arcs":[[-8036,8095,-8089,-8002]]},{"type":"Polygon","id":13031,"arcs":[[-7894,8096,8097,8098,8099,-8025,-7987,-7895]]},{"type":"Polygon","id":28123,"arcs":[[-7997,8100,8101,8102,-8012]]},{"type":"Polygon","id":28149,"arcs":[[8103,8104,8105,8106,8107,8108,-7944,-7927,-7903]]},{"type":"Polygon","id":13215,"arcs":[[-8009,8109,8110,-8062,-8017]]},{"type":"Polygon","id":35029,"arcs":[[-7891,8111,-8037,-7847,-7717]]},{"type":"Polygon","id":13103,"arcs":[[-8057,-8056,8112,8113,-8097,-7893,-7899]]},{"type":"Polygon","id":1087,"arcs":[[8114,8115,8116,8117,-8040,-7876,-8064]]},{"type":"Polygon","id":28121,"arcs":[[-8103,8118,8119,8120,-8013]]},{"type":"Polygon","id":22013,"arcs":[[-8045,8121,8122,8123,8124,-7912,-7914,-7917]]},{"type":"Polygon","id":13023,"arcs":[[8125,8126,-8085,-8004,-8074]]},{"type":"Polygon","id":28075,"arcs":[[-7955,8127,8128,8129,-7999]]},{"type":"Polygon","id":28101,"arcs":[[-8130,8130,-8101,-7996,-7994]]},{"type":"Polygon","id":28049,"arcs":[[-8121,8131,8132,-8104,-7902,-8014]]},{"type":"Polygon","id":22065,"arcs":[[8133,8134,-8093,-7945,-8109]]},{"type":"Polygon","id":13197,"arcs":[[8135,8136,8137,8138,8139,-8007,-8061]]},{"type":"Polygon","id":13043,"arcs":[[8140,8141,-8026,-8100]]},{"type":"Polygon","id":48221,"arcs":[[8142,8143,8144,-7940,-7949]]},{"type":"Polygon","id":48251,"arcs":[[8145,8146,8147,8148,-8143,-7948,-7959]]},{"type":"Polygon","id":48139,"arcs":[[-7962,-8024,8149,8150,8151,-8146,-7958]]},{"type":"Polygon","id":1091,"arcs":[[-7936,-8016,-8068,8152,8153,8154,-7953,-7870]]},{"type":"Polygon","id":13053,"arcs":[[-8140,8155,8156,-8110,-8008]]},{"type":"Polygon","id":48227,"arcs":[[8157,8158,8159,8160,-7974]]},{"type":"Polygon","id":48335,"arcs":[[8161,8162,8163,-8158,-7973,-7966]]},{"type":"Polygon","id":48353,"arcs":[[8164,8165,8166,-8162,-7972]]},{"type":"Polygon","id":48317,"arcs":[[-8161,8167,8168,8169,-7978,-7976]]},{"type":"Polygon","id":48003,"arcs":[[-8170,8170,8171,8172,-7656,-7979]]},{"type":"Polygon","id":13193,"arcs":[[-8083,-8088,8173,8174,8175,-8059]]},{"type":"Polygon","id":48441,"arcs":[[8176,8177,8178,-8165,-7982]]},{"type":"Polygon","id":48133,"arcs":[[-7942,8179,8180,8181,8182,-7984,-7986]]},{"type":"Polygon","id":48143,"arcs":[[-7941,-8145,8183,8184,8185,8186,-8180]]},{"type":"Polygon","id":48059,"arcs":[[-8183,8187,8188,-8177,-7981,-7985]]},{"type":"Polygon","id":4019,"arcs":[[-7636,8189,8190,8191,-7725,-7456,-7728]]},{"type":"Polygon","id":13283,"arcs":[[8192,8193,-8075,-8029]]},{"type":"Polygon","id":1113,"arcs":[[-8111,-8157,8194,8195,8196,-8115,-8063]]},{"type":"Polygon","id":1101,"arcs":[[-8118,-8117,8197,8198,8199,8200,-8076,-8041]]},{"type":"Polygon","id":22049,"arcs":[[-8071,8201,8202,-8122,-8044]]},{"type":"Polygon","id":13091,"arcs":[[8203,8204,8205,8206,-8126,-8073]]},{"type":"Polygon","id":13249,"arcs":[[-8176,8207,-8136,-8060]]},{"type":"Polygon","id":4003,"arcs":[[-7594,-8039,8208,8209,-8190,-7635]]},{"type":"Polygon","id":1085,"arcs":[[-8201,8210,8211,8212,-8066,-8077]]},{"type":"Polygon","id":48401,"arcs":[[8213,8214,8215,8216,-8090,-8096,-8035]]},{"type":"Polygon","id":22041,"arcs":[[-8135,8217,8218,8219,-8094]]},{"type":"Polygon","id":13235,"arcs":[[-8127,-8207,8220,8221,-8086]]},{"type":"Polygon","id":48365,"arcs":[[-7907,8222,8223,-8214,-8034]]},{"type":"Polygon","id":48213,"arcs":[[-8032,-8092,8224,8225,8226,8227,-8150,-8023]]},{"type":"Polygon","id":13209,"arcs":[[8228,8229,-8193,8230]]},{"type":"Polygon","id":13279,"arcs":[[-8028,8231,8232,8233,-8231]]},{"type":"Polygon","id":22031,"arcs":[[8234,8235,8236,8237,-8223,-7906]]},{"type":"Polygon","id":48349,"arcs":[[8238,8239,8240,-8151,-8228]]},{"type":"Polygon","id":48425,"arcs":[[-8149,8241,-8184,-8144]]},{"type":"Polygon","id":13267,"arcs":[[8242,8243,8244,8245,8246,-8232,-8027,-8142]]},{"type":"Polygon","id":1023,"arcs":[[8247,8248,8249,8250,-8128,-7954,-8155]]},{"type":"Polygon","id":13309,"arcs":[[-8230,8251,8252,-8204,-8072,-8194]]},{"type":"Polygon","id":1011,"arcs":[[-8197,8253,8254,-8198,-8116]]},{"type":"Polygon","id":13093,"arcs":[[-8222,8255,8256,8257,8258,-8174,-8087]]},{"type":"Polygon","id":13109,"arcs":[[-8099,8259,8260,-8243,-8141]]},{"type":"Polygon","id":22021,"arcs":[[-8095,-8220,8261,8262,8263,-8202,-8070]]},{"type":"Polygon","id":1131,"arcs":[[-8067,-8213,8264,8265,8266,-8153]]},{"type":"Polygon","id":48217,"arcs":[[-8241,8267,8268,8269,-8147,-8152]]},{"type":"Polygon","id":48093,"arcs":[[8270,8271,8272,-8181,-8187]]},{"type":"Polygon","id":22107,"arcs":[[-8108,8273,-8106,8274,8275,8276,8277,8278,-8218,-8134]]},{"type":"Polygon","id":13029,"arcs":[[8279,8280,8281,-8260,-8098,-8114]]},{"type":"Polygon","id":22081,"arcs":[[-7913,-8125,8282,-8235,-7905]]},{"type":"MultiPolygon","id":13051,"arcs":[[[8283]],[[8284]],[[8285,-8280,-8113,-8055]]]},{"type":"Polygon","id":13307,"arcs":[[8286,8287,8288,8289,-8138]]},{"type":"Polygon","id":13259,"arcs":[[-8290,8290,8291,8292,-8195,-8156,-8139]]},{"type":"Polygon","id":13261,"arcs":[[-8259,-8258,8293,8294,8295,-8287,-8137,-8208,-8175]]},{"type":"Polygon","id":28023,"arcs":[[-8251,8296,8297,-8129]]},{"type":"Polygon","id":28021,"arcs":[[-8133,8298,8299,-8275,-8105]]},{"type":"Polygon","id":28061,"arcs":[[-8298,8300,8301,8302,-8131]]},{"type":"Polygon","id":28129,"arcs":[[-8303,8303,8304,8305,-8119,-8102]]},{"type":"Polygon","id":48035,"arcs":[[-8148,-8270,8306,8307,8308,-8185,-8242]]},{"type":"Polygon","id":13271,"arcs":[[8309,8310,8311,8312,-8205,-8253]]},{"type":"Polygon","id":22127,"arcs":[[-8203,-8264,8313,8314,8315,-8123]]},{"type":"Polygon","id":22069,"arcs":[[-8316,8316,8317,8318,8319,-8236,-8283,-8124]]},{"type":"Polygon","id":1005,"arcs":[[-8293,8320,8321,8322,8323,8324,8325,-8254,-8196]]},{"type":"Polygon","id":48073,"arcs":[[-8217,8326,8327,8328,8329,-8225,-8091]]},{"type":"Polygon","id":13315,"arcs":[[-8206,-8313,8330,8331,8332,-8256,-8221]]},{"type":"MultiPolygon","id":13179,"arcs":[[[8333]],[[8334,8335,-8244,-8261,-8282,8336]]]},{"type":"Polygon","id":48431,"arcs":[[-8164,8337,8338,8339,8340,-8159]]},{"type":"Polygon","id":48173,"arcs":[[-8341,8341,8342,-8168,-8160]]},{"type":"Polygon","id":48329,"arcs":[[-8343,8343,8344,-8171,-8169]]},{"type":"Polygon","id":48135,"arcs":[[-8345,8345,8346,8347,8348,-8172]]},{"type":"Polygon","id":48495,"arcs":[[-8349,8349,8350,-7657,-8173]]},{"type":"Polygon","id":48081,"arcs":[[-8167,8351,8352,-8338,-8163]]},{"type":"Polygon","id":48001,"arcs":[[8353,8354,8355,-8226,-8330]]},{"type":"Polygon","id":48083,"arcs":[[-8189,8356,8357,8358,8359,-8178]]},{"type":"Polygon","id":48399,"arcs":[[-8360,8360,8361,-8352,-8166,-8179]]},{"type":"Polygon","id":48049,"arcs":[[-8273,8362,8363,8364,-8357,-8188,-8182]]},{"type":"Polygon","id":1109,"arcs":[[-8326,-8325,8365,8366,8367,-8199,-8255]]},{"type":"Polygon","id":1041,"arcs":[[-8368,8368,8369,8370,-8211,-8200]]},{"type":"Polygon","id":28029,"arcs":[[8371,8372,8373,8374,-8299,-8132]]},{"type":"Polygon","id":28127,"arcs":[[-8306,8375,8376,8377,-8372,-8120]]},{"type":"Polygon","id":13081,"arcs":[[-8333,8378,8379,8380,-8294,-8257]]},{"type":"Polygon","id":48193,"arcs":[[8381,-8271,-8186,-8309,8382,8383]]},{"type":"Polygon","id":13183,"arcs":[[8384,8385,-8245,-8336]]},{"type":"Polygon","id":48161,"arcs":[[8386,8387,-8239,-8227,-8356]]},{"type":"Polygon","id":48109,"arcs":[[8388,8389,8390,-7784,-7970]]},{"type":"Polygon","id":48229,"arcs":[[8391,8392,8393,-7785,-8391]]},{"type":"Polygon","id":48141,"arcs":[[8394,-7889,-7786,-8394]]},{"type":"Polygon","id":48301,"arcs":[[8395,8396,-7968,-7658,-8351]]},{"type":"Polygon","id":48389,"arcs":[[8397,8398,8399,-8389,-7969,-8397]]},{"type":"Polygon","id":13239,"arcs":[[8400,8401,-8321,-8292]]},{"type":"Polygon","id":1025,"arcs":[[-8267,8402,8403,8404,-8248,-8154]]},{"type":"Polygon","id":48419,"arcs":[[8405,8406,8407,8408,-8215,-8224,-8238]]},{"type":"Polygon","id":22025,"arcs":[[-8279,8409,8410,8411,-8262,-8219]]},{"type":"Polygon","id":13161,"arcs":[[8412,8413,8414,-8310,-8252,-8229,-8234]]},{"type":"Polygon","id":13273,"arcs":[[8415,8416,8417,8418,-8288,-8296]]},{"type":"Polygon","id":13001,"arcs":[[-8247,8419,8420,8421,-8413,-8233]]},{"type":"Polygon","id":1013,"arcs":[[-8371,8422,8423,8424,-8265,-8212]]},{"type":"Polygon","id":13243,"arcs":[[-8289,-8419,8425,8426,-8401,-8291]]},{"type":"Polygon","id":22059,"arcs":[[-8412,8427,8428,8429,-8314,-8263]]},{"type":"Polygon","id":13177,"arcs":[[-8381,8430,8431,-8416,-8295]]},{"type":"Polygon","id":28153,"arcs":[[8432,8433,8434,-8301,-8297,-8250,8435]]},{"type":"Polygon","id":28063,"arcs":[[-8375,8436,8437,8438,-8276,-8300]]},{"type":"Polygon","id":48309,"arcs":[[8439,-8307,-8269,8440,8441,8442]]},{"type":"Polygon","id":13287,"arcs":[[8443,8444,8445,8446,-8379,-8332]]},{"type":"Polygon","id":13017,"arcs":[[-8312,8447,8448,-8444,-8331]]},{"type":"Polygon","id":13321,"arcs":[[-8380,-8447,8449,8450,8451,8452,-8431]]},{"type":"Polygon","id":48347,"arcs":[[-8409,8453,8454,-8327,-8216]]},{"type":"Polygon","id":22085,"arcs":[[-8320,8455,8456,8457,-8406,-8237]]},{"type":"Polygon","id":13305,"arcs":[[-8246,-8386,8458,8459,8460,8461,-8420]]},{"type":"Polygon","id":1099,"arcs":[[-8425,8462,8463,8464,-8403,-8266]]},{"type":"Polygon","id":28067,"arcs":[[8465,8466,8467,-8304,-8302,-8435]]},{"type":"Polygon","id":48293,"arcs":[[8468,-8441,-8268,-8240,-8388,8469,8470]]},{"type":"Polygon","id":13069,"arcs":[[8471,8472,8473,8474,8475,-8448,-8311,-8415]]},{"type":"Polygon","id":22043,"arcs":[[-8430,8476,-8317,-8315]]},{"type":"Polygon","id":28031,"arcs":[[-8468,8477,8478,8479,-8376,-8305]]},{"type":"Polygon","id":13061,"arcs":[[-8427,8480,8481,8482,-8322,-8402]]},{"type":"Polygon","id":1067,"arcs":[[-8483,8483,8484,8485,-8323]]},{"type":"Polygon","id":28065,"arcs":[[8486,8487,8488,-8377,-8480]]},{"type":"Polygon","id":13155,"arcs":[[-8476,8489,8490,-8445,-8449]]},{"type":"Polygon","id":22029,"arcs":[[-8278,8491,8492,8493,8494,8495,8496,-8410]]},{"type":"Polygon","id":28077,"arcs":[[8497,8498,8499,-8373,-8378,-8489]]},{"type":"Polygon","id":1035,"arcs":[[8500,8501,-8463,-8424]]},{"type":"Polygon","id":28001,"arcs":[[8502,8503,-8492,-8277,-8439]]},{"type":"Polygon","id":4023,"arcs":[[-8210,8504,-8191]]},{"type":"Polygon","id":48333,"arcs":[[8505,8506,-8363,-8272,-8382]]},{"type":"Polygon","id":28085,"arcs":[[8507,8508,8509,8510,-8437,-8374,-8500]]},{"type":"Polygon","id":13005,"arcs":[[8511,8512,-8472,-8414,-8422]]},{"type":"Polygon","id":48099,"arcs":[[8513,-8383,-8308,-8440,8514]]},{"type":"Polygon","id":48451,"arcs":[[-8362,8515,8516,8517,8518,-8339,-8353]]},{"type":"Polygon","id":1129,"arcs":[[-8405,8519,8520,8521,-8436,-8249]]},{"type":"MultiPolygon","id":13191,"arcs":[[[8522]],[[8523,8524,-8459,-8385,-8335]]]},{"type":"Polygon","id":48289,"arcs":[[8525,8526,8527,-8470,-8387,-8355]]},{"type":"Polygon","id":48461,"arcs":[[8528,8529,8530,-8346,-8344]]},{"type":"Polygon","id":48103,"arcs":[[-8531,8531,8532,8533,-8347]]},{"type":"Polygon","id":48405,"arcs":[[8534,8535,8536,-8454,-8408]]},{"type":"Polygon","id":48383,"arcs":[[-8340,-8519,8537,8538,-8529,-8342]]},{"type":"Polygon","id":48475,"arcs":[[-8396,-8350,-8348,-8534,8539,-8398]]},{"type":"Polygon","id":13095,"arcs":[[-8453,8540,8541,8542,-8417,-8432]]},{"type":"Polygon","id":13037,"arcs":[[-8418,-8543,8543,8544,-8481,-8426]]},{"type":"Polygon","id":1045,"arcs":[[-8486,8545,8546,8547,-8366,-8324]]},{"type":"Polygon","id":1031,"arcs":[[8548,8549,-8369,-8367,-8548]]},{"type":"Polygon","id":28037,"arcs":[[-8511,8550,8551,-8503,-8438]]},{"type":"Polygon","id":48403,"arcs":[[-8458,8552,8553,-8535,-8407]]},{"type":"Polygon","id":13277,"arcs":[[-8491,8554,8555,8556,-8450,-8446]]},{"type":"Polygon","id":48225,"arcs":[[8557,8558,8559,8560,-8526,-8354,-8329]]},{"type":"Polygon","id":48095,"arcs":[[-8359,8561,8562,-8516,-8361]]},{"type":"Polygon","id":13229,"arcs":[[-8462,8563,8564,-8512,-8421]]},{"type":"Polygon","id":1039,"arcs":[[-8550,8565,8566,8567,8568,-8501,-8423,-8370]]},{"type":"Polygon","id":48235,"arcs":[[8569,8570,-8538,-8518]]},{"type":"Polygon","id":48005,"arcs":[[-8537,8571,8572,8573,8574,-8558,-8328,-8455]]},{"type":"Polygon","id":13099,"arcs":[[-8545,8575,8576,8577,8578,-8484,-8482]]},{"type":"Polygon","id":48145,"arcs":[[8579,8580,-8442,-8469,8581]]},{"type":"Polygon","id":22079,"arcs":[[-8429,8582,8583,8584,8585,-8318,-8477]]},{"type":"Polygon","id":48307,"arcs":[[-8365,8586,8587,8588,-8562,-8358]]},{"type":"Polygon","id":48411,"arcs":[[-8507,8589,8590,8591,8592,-8587,-8364]]},{"type":"Polygon","id":13019,"arcs":[[-8475,8593,8594,8595,8596,-8555,-8490]]},{"type":"Polygon","id":13299,"arcs":[[-8565,8597,8598,8599,8600,8601,8602,-8473,-8513]]},{"type":"Polygon","id":48281,"arcs":[[8603,8604,-8590,-8506,-8384,-8514]]},{"type":"MultiPolygon","id":13127,"arcs":[[[8605,8606]],[[8607,8608,8609,8610,8611,-8460,-8525]]]},{"type":"Polygon","id":13007,"arcs":[[-8542,8612,8613,8614,-8576,-8544]]},{"type":"Polygon","id":13205,"arcs":[[-8452,8615,8616,8617,8618,-8613,-8541]]},{"type":"Polygon","id":28041,"arcs":[[-8522,8619,8620,8621,-8433]]},{"type":"Polygon","id":28035,"arcs":[[8622,8623,8624,8625,-8478,-8467]]},{"type":"Polygon","id":28073,"arcs":[[-8479,-8626,8626,8627,-8487]]},{"type":"Polygon","id":28111,"arcs":[[-8434,-8622,8628,8629,-8623,-8466]]},{"type":"Polygon","id":28091,"arcs":[[-8628,8630,8631,8632,-8498,-8488]]},{"type":"Polygon","id":13003,"arcs":[[-8603,-8602,8633,8634,-8594,-8474]]},{"type":"Polygon","id":48455,"arcs":[[8635,8636,8637,-8559,-8575]]},{"type":"Polygon","id":48371,"arcs":[[-8533,8638,8639,8640,8641,-8399,-8540]]},{"type":"Polygon","id":13025,"arcs":[[-8612,8642,8643,-8598,-8564,-8461]]},{"type":"Polygon","id":28157,"arcs":[[-8552,8644,8645,8646,-8493,-8504]]},{"type":"Polygon","id":22115,"arcs":[[-8586,8647,8648,8649,-8456,-8319]]},{"type":"Polygon","id":48395,"arcs":[[8650,8651,8652,-8582,-8471,-8528]]},{"type":"Polygon","id":13075,"arcs":[[8653,8654,8655,8656,-8556,-8597]]},{"type":"Polygon","id":28005,"arcs":[[-8510,8657,8658,8659,8660,-8645,-8551]]},{"type":"Polygon","id":28113,"arcs":[[8661,8662,8663,-8658,-8509]]},{"type":"Polygon","id":28147,"arcs":[[-8633,8664,-8662,-8508,-8499]]},{"type":"Polygon","id":22009,"arcs":[[-8411,-8497,8665,8666,8667,8668,-8583,-8428]]},{"type":"Polygon","id":13071,"arcs":[[-8557,-8657,8669,8670,-8616,-8451]]},{"type":"Polygon","id":48027,"arcs":[[-8581,8671,8672,8673,-8604,-8515,-8443]]},{"type":"Polygon","id":1003,"arcs":[[-8465,8674,8675,8676,8677,8678,8679,-8520,-8404]]},{"type":"Polygon","id":1069,"arcs":[[-8579,8680,8681,8682,-8546,-8485]]},{"type":"Polygon","id":1053,"arcs":[[-8569,8683,8684,8685,-8675,-8464,-8502]]},{"type":"Polygon","id":13201,"arcs":[[-8615,8686,8687,-8577]]},{"type":"Polygon","id":1061,"arcs":[[8688,8689,8690,-8566,-8549,-8547,-8683]]},{"type":"Polygon","id":48351,"arcs":[[8691,8692,8693,8694,-8553,-8457,-8650]]},{"type":"Polygon","id":13065,"arcs":[[-8601,8695,8696,8697,8698,-8634]]},{"type":"Polygon","id":13173,"arcs":[[-8699,8699,8700,-8595,-8635]]},{"type":"Polygon","id":1097,"arcs":[[8701,8702,8703,-8620,-8521,-8680]]},{"type":"MultiPolygon","id":13039,"arcs":[[[8704]],[[8705,8706,8707,-8643,-8611]]]},{"type":"Polygon","id":48241,"arcs":[[8708,8709,8710,-8572,-8536,-8554,-8695]]},{"type":"Polygon","id":48373,"arcs":[[8711,8712,8713,8714,-8636,-8574]]},{"type":"Polygon","id":48331,"arcs":[[8715,8716,8717,-8672,-8580,-8653]]},{"type":"Polygon","id":48243,"arcs":[[8718,-8392,-8390,-8400,-8642,8719]]},{"type":"Polygon","id":48313,"arcs":[[8720,8721,8722,-8527,-8561]]},{"type":"Polygon","id":48327,"arcs":[[-8589,8723,8724,8725,-8563]]},{"type":"Polygon","id":48413,"arcs":[[-8726,8726,8727,-8570,-8517]]},{"type":"Polygon","id":48105,"arcs":[[-8530,-8539,-8571,-8728,8728,8729,8730,-8639,-8532]]},{"type":"Polygon","id":13087,"arcs":[[-8614,-8619,8731,8732,8733,-8687]]},{"type":"Polygon","id":13131,"arcs":[[8734,8735,8736,-8732,-8618]]},{"type":"Polygon","id":13027,"arcs":[[-8655,8737,8738,8739,8740,-8670,-8656]]},{"type":"Polygon","id":13275,"arcs":[[-8671,-8741,8741,8742,-8735,-8617]]},{"type":"Polygon","id":13253,"arcs":[[-8734,8743,8744,-8681,-8578,-8688]]},{"type":"Polygon","id":13049,"arcs":[[8745,8746,-8599,-8644,-8708]]},{"type":"Polygon","id":48457,"arcs":[[-8711,8747,-8712,-8573]]},{"type":"Polygon","id":48471,"arcs":[[8748,8749,8750,-8721,-8560,-8638]]},{"type":"MultiPolygon","id":22125,"arcs":[[[8751,8752,-8494,-8647,8753]]]},{"type":"Polygon","id":48053,"arcs":[[-8674,8754,8755,8756,8757,-8591,-8605]]},{"type":"Polygon","id":13185,"arcs":[[-8596,-8701,8758,8759,8760,8761,-8738,-8654]]},{"type":"Polygon","id":22077,"arcs":[[-8495,-8753,8762,8763,8764,8765,-8667,-8767]]},{"type":"Polygon","id":28109,"arcs":[[-8625,8767,8768,8769,8770,-8631,-8627]]},{"type":"Polygon","id":22117,"arcs":[[-8771,8771,8772,-8663,-8665,-8632]]},{"type":"Polygon","id":22039,"arcs":[[-8669,8773,8774,8775,8776,-8584]]},{"type":"Polygon","id":12063,"arcs":[[-8745,8777,8778,8779,8780,8781,-8689,-8682]]},{"type":"Polygon","id":22105,"arcs":[[-8773,8782,8783,8784,8785,8786,-8659,-8664]]},{"type":"Polygon","id":12033,"arcs":[[8787,-8676,-8686,8788]]},{"type":"Polygon","id":12113,"arcs":[[8789,8790,-8789,-8685]]},{"type":"Polygon","id":28039,"arcs":[[-8704,8791,8792,-8629,-8621]]},{"type":"Polygon","id":22091,"arcs":[[-8787,8793,8794,8795,-8660]]},{"type":"MultiPolygon","id":12091,"arcs":[[[-8568,8796,8797,-8790,-8684]]]},{"type":"Polygon","id":22037,"arcs":[[-8796,8798,8799,-8754,-8646,-8661]]},{"type":"Polygon","id":12059,"arcs":[[-8782,8800,8801,-8690]]},{"type":"Polygon","id":12131,"arcs":[[-8691,-8802,8802,8803,8804,-8806,8806,-8797,-8567]]},{"type":"Polygon","id":48041,"arcs":[[8807,8808,8809,-8651,-8723]]},{"type":"Polygon","id":48319,"arcs":[[-8593,8810,8811,8812,-8724,-8588]]},{"type":"Polygon","id":48299,"arcs":[[-8758,8813,8814,-8811,-8592]]},{"type":"Polygon","id":28131,"arcs":[[-8793,8815,8816,-8768,-8624,-8630]]},{"type":"Polygon","id":48491,"arcs":[[8817,8818,8819,-8755,-8673,-8718]]},{"type":"Polygon","id":48407,"arcs":[[-8715,8820,8821,-8749,-8637]]},{"type":"Polygon","id":22003,"arcs":[[-8777,8822,8823,-8648,-8585]]},{"type":"Polygon","id":22011,"arcs":[[-8824,8824,8825,-8692,-8649]]},{"type":"Polygon","id":13101,"arcs":[[8826,8827,-8759,-8700,-8698]]},{"type":"Polygon","id":48185,"arcs":[[-8751,8828,8829,8830,-8808,-8722]]},{"type":"Polygon","id":22097,"arcs":[[-8766,8831,8832,8833,-8774,-8668]]},{"type":"Polygon","id":12133,"arcs":[[8834,-8803,-8801,-8781]]},{"type":"Polygon","id":12089,"arcs":[[-8707,8835,8836,8837,-8746]]},{"type":"Polygon","id":28059,"arcs":[[-8703,8838,8839,-8816,-8792]]},{"type":"Polygon","id":48051,"arcs":[[-8810,8840,8841,-8716,-8652]]},{"type":"Polygon","id":22033,"arcs":[[8842,8843,8844,8845,-8799,-8795]]},{"type":"Polygon","id":22103,"arcs":[[-8770,8846,8847,8848,8849,-8783,-8772]]},{"type":"Polygon","id":12039,"arcs":[[-8737,8850,8851,-8778,-8744,-8733]]},{"type":"Polygon","id":48267,"arcs":[[8852,8853,8854,8855,-8725,-8813]]},{"type":"Polygon","id":48435,"arcs":[[-8856,8856,8857,-8729,-8727]]},{"type":"Polygon","id":12073,"arcs":[[-8743,8858,8859,8860,-8851,-8736]]},{"type":"Polygon","id":28047,"arcs":[[-8840,8861,8862,-8817]]},{"type":"Polygon","id":12065,"arcs":[[-8740,8863,8864,8865,8866,-8859,-8742]]},{"type":"Polygon","id":48043,"arcs":[[8867,-8720,-8641,8868,8869]]},{"type":"Polygon","id":22121,"arcs":[[8870,-8763,-8752,-8800,-8846]]},{"type":"Polygon","id":48443,"arcs":[[8871,8872,-8869,-8640,-8731]]},{"type":"Polygon","id":22063,"arcs":[[-8786,8873,8874,-8843,-8794]]},{"type":"Polygon","id":12079,"arcs":[[-8762,8875,8876,8877,8878,8879,-8864,-8739]]},{"type":"Polygon","id":28045,"arcs":[[-8863,8880,-8847,-8769]]},{"type":"Polygon","id":12047,"arcs":[[-8828,8881,8882,-8877,-8760]]},{"type":"Polygon","id":48377,"arcs":[[-8868,8883,-8719]]},{"type":"Polygon","id":48339,"arcs":[[-8822,8884,8885,8886,-8829,-8750]]},{"type":"Polygon","id":48453,"arcs":[[8887,8888,8889,8890,-8756,-8820]]},{"type":"Polygon","id":12013,"arcs":[[8891,8892,8893,-8779]]},{"type":"Polygon","id":12077,"arcs":[[-8861,8894,8895,8896,-8892,-8852]]},{"type":"Polygon","id":12023,"arcs":[[-8697,8897,8898,8899,8900,8901,-8882,-8827]]},{"type":"MultiPolygon","id":12031,"arcs":[[[8902,8903]],[[8904,8905]],[[8906,8907,8908,-8837]]]},{"type":"Polygon","id":12003,"arcs":[[-8838,-8909,8909,8910,8911,-8898,-8696,-8600,-8747]]},{"type":"MultiPolygon","id":12005,"arcs":[[[8912,8913]],[[-8894,8914,8915,-8804,-8835,-8780]]]},{"type":"Polygon","id":48287,"arcs":[[8916,8917,8918,-8818,-8717,-8842]]},{"type":"Polygon","id":48199,"arcs":[[-8710,8919,8920,8921,-8713,-8748]]},{"type":"Polygon","id":48171,"arcs":[[-8815,8922,8923,8924,-8853,-8812]]},{"type":"Polygon","id":48031,"arcs":[[-8757,-8891,8925,8926,8927,-8923,-8814]]},{"type":"MultiPolygon","id":22099,"arcs":[[[8928,8929,8930]],[[8931,8932,-8832,-8765,8933]]]},{"type":"Polygon","id":22047,"arcs":[[-8871,-8845,8934,8935,8936,-8934,-8764]]},{"type":"Polygon","id":48291,"arcs":[[-8922,8937,8938,8939,-8885,-8821,-8714]]},{"type":"Polygon","id":22019,"arcs":[[8940,8941,8942,-8693,-8826]]},{"type":"Polygon","id":22053,"arcs":[[-8776,8943,8944,8945,8946,-8941,-8825,-8823]]},{"type":"Polygon","id":22001,"arcs":[[-8834,8947,8948,8949,-8945,-8944,-8775]]},{"type":"Polygon","id":12121,"arcs":[[-8902,8950,8951,-8878,-8883]]},{"type":"Polygon","id":48021,"arcs":[[8952,8953,-8888,-8819,-8919]]},{"type":"Polygon","id":48477,"arcs":[[-8831,8954,8955,8956,-8917,-8841,-8809]]},{"type":"Polygon","id":22055,"arcs":[[-8933,8957,8958,-8948,-8833]]},{"type":"Polygon","id":48209,"arcs":[[8959,8960,-8926,-8890,8961]]},{"type":"Polygon","id":22005,"arcs":[[-8875,8962,8963,8964,8965,-8935,-8844]]},{"type":"Polygon","id":12123,"arcs":[[8966,8967,8968,-8865,-8880]]},{"type":"Polygon","id":12129,"arcs":[[-8867,8969,8970,-8895,-8860]]},{"type":"Polygon","id":22095,"arcs":[[8971,8972,8973,8974,-8963,-8874,-8785]]},{"type":"Polygon","id":48465,"arcs":[[-8858,8975,8976,8977,-8872,-8730]]},{"type":"Polygon","id":48137,"arcs":[[8978,8979,8980,8981,-8976,-8857,-8855]]},{"type":"Polygon","id":48265,"arcs":[[8982,8983,8984,-8979,-8854,-8925]]},{"type":"Polygon","id":12067,"arcs":[[-8952,8985,8986,-8967,-8879]]},{"type":"MultiPolygon","id":12109,"arcs":[[[8987,8988,8989,8990,8991,-8903,8992]],[[-8905,8993]]]},{"type":"Polygon","id":48361,"arcs":[[-8943,8994,8995,-8920,-8709,-8694]]},{"type":"Polygon","id":48473,"arcs":[[8996,8997,8998,-8955,-8830,-8887]]},{"type":"Polygon","id":22089,"arcs":[[8999,-8972,9000]]},{"type":"Polygon","id":22051,"arcs":[[9001,9002,9003,9004,-9001,-8784,-8850]]},{"type":"Polygon","id":12045,"arcs":[[-8897,9005,9006,9007,9008,-8913,9009,-8915,-8893]]},{"type":"Polygon","id":22071,"arcs":[[9010,9011,9012,-9002,-8849]]},{"type":"Polygon","id":12019,"arcs":[[9013,9014,9015,-8910,-8908]]},{"type":"Polygon","id":48245,"arcs":[[-8996,9016,9017,9018,-8938,-8921]]},{"type":"Polygon","id":48201,"arcs":[[-8940,9019,9020,9021,9022,9023,-8997,-8886]]},{"type":"MultiPolygon","id":22087,"arcs":[[[9024,9025,9026,-9012,9027]],[[9028]]]},{"type":"Polygon","id":22093,"arcs":[[9029,9030,-8965,-8964,-8975]]},{"type":"Polygon","id":48149,"arcs":[[9031,9032,9033,9034,9035,-8953,-8918,-8957]]},{"type":"Polygon","id":22113,"arcs":[[-8959,9036,9037,9038,-8946,-8950,-8949]]},{"type":"Polygon","id":12007,"arcs":[[-9016,9039,9040,9041,-8911]]},{"type":"Polygon","id":12125,"arcs":[[-9042,9042,-8899,-8912]]},{"type":"Polygon","id":48259,"arcs":[[-8928,9043,9044,9045,-8983,-8924]]},{"type":"MultiPolygon","id":22045,"arcs":[[[9046]],[[-8937,9047,-8930,9048,9049,-9037,-8958,-8932]]]},{"type":"Polygon","id":48015,"arcs":[[-8999,9050,9051,9052,-9032,-8956]]},{"type":"Polygon","id":22007,"arcs":[[-8965,8964,-9031,9053,9054,9055,-8931,-9048,-8936,-8966]]},{"type":"Polygon","id":48385,"arcs":[[-8985,9056,9057,-8980]]},{"type":"Polygon","id":48055,"arcs":[[-8954,-9036,9058,9059,-8962,-8889]]},{"type":"Polygon","id":22023,"arcs":[[-8947,-9039,9060,-9017,-8995,-8942]]},{"type":"Polygon","id":48091,"arcs":[[9061,9062,-9044,-8927,-8961]]},{"type":"MultiPolygon","id":12037,"arcs":[[[9063]],[[-9008,9064]],[[-8971,9065,-9006,-8896]]]},{"type":"Polygon","id":48089,"arcs":[[9066,9067,9068,-9033,-9053]]},{"type":"Polygon","id":22101,"arcs":[[-9056,9069,9070,-9049,-8929]]},{"type":"Polygon","id":12001,"arcs":[[-9041,9071,9072,9073,9074,-8900,-9043]]},{"type":"Polygon","id":12041,"arcs":[[-9075,9075,9076,-8986,-8951,-8901]]},{"type":"Polygon","id":22057,"arcs":[[9077,9078,9079,9080,9081,9082,9083,-9054,-9030,-8974,-8973,-9000,-9005,9084]]},{"type":"Polygon","id":48019,"arcs":[[9085,-9057,-8984,-9046,9086,9087]]},{"type":"MultiPolygon","id":22075,"arcs":[[[9088]],[[-9003,-9013,-9027,9089]]]},{"type":"Polygon","id":48071,"arcs":[[-9019,9090,9091,9092,-9020,-8939]]},{"type":"Polygon","id":48187,"arcs":[[9093,9094,9095,-9062,-8960,-9060]]},{"type":"MultiPolygon","id":12107,"arcs":[[[-8991,9096,9097,9098]],[[9099,9100,-9072,-9040,-9015]]]},{"type":"Polygon","id":48157,"arcs":[[9101,9102,9103,-9051,-8998,-9024]]},{"type":"Polygon","id":48177,"arcs":[[9104,9105,9106,9107,-9094,-9059,-9035]]},{"type":"MultiPolygon","id":22109,"arcs":[[[9108]],[[-9070,-9055,-9084,9109]]]},{"type":"Polygon","id":48029,"arcs":[[-9096,9110,9111,9112,-9087,-9045,-9063]]},{"type":"Polygon","id":48325,"arcs":[[9113,9114,9115,-9088,-9113]]},{"type":"Polygon","id":12035,"arcs":[[9116,9117,-9097,-8990]]},{"type":"Polygon","id":48481,"arcs":[[-9104,9118,9119,9120,-9067,-9052]]},{"type":"Polygon","id":48285,"arcs":[[9121,9122,9123,-9105,-9034,-9069]]},{"type":"Polygon","id":48463,"arcs":[[-9116,9124,9125,-8981,-9058,-9086]]},{"type":"Polygon","id":48271,"arcs":[[-9126,9126,9127,-8977,-8982]]},{"type":"MultiPolygon","id":48167,"arcs":[[[9128]],[[9129,-9022,9130]],[[9131,-9092]]]},{"type":"Polygon","id":48039,"arcs":[[-9130,9132,9133,-9119,-9103,-9102,-9023]]},{"type":"Polygon","id":12075,"arcs":[[-9074,9134,9135,9136,9137,9138,-9076]]},{"type":"Polygon","id":12083,"arcs":[[9139,9140,9141,9142,-9135,-9073,-9101]]},{"type":"Polygon","id":48493,"arcs":[[-9108,9143,9144,-9111,-9095]]},{"type":"MultiPolygon","id":12127,"arcs":[[[9145,9146,9147,9148,9149,9150,9151,9152,-9098,-9118,9153]]]},{"type":"Polygon","id":48123,"arcs":[[9154,9155,-9106,-9124,9156]]},{"type":"Polygon","id":12069,"arcs":[[-9152,-9151,9157,9158,9159,9160,-9141,9161]]},{"type":"Polygon","id":48239,"arcs":[[9162,9163,9164,9165,9166,9167,9168,9169,-9122,-9068,-9121]]},{"type":"Polygon","id":48013,"arcs":[[9170,9171,-9114,-9112,-9145,9172,9173]]},{"type":"Polygon","id":48321,"arcs":[[9174,-9163,-9120,-9134,9175]]},{"type":"Polygon","id":48255,"arcs":[[9176,9177,-9173,-9144,-9107,-9156,9178]]},{"type":"Polygon","id":48469,"arcs":[[-9170,9179,9180,9181,9182,-9157,-9123]]},{"type":"Polygon","id":48163,"arcs":[[-9172,9183,9184,9185,-9115]]},{"type":"Polygon","id":48507,"arcs":[[-9186,9186,9187,-9125]]},{"type":"Polygon","id":48323,"arcs":[[-9188,9188,9189,9190,-9127]]},{"type":"Polygon","id":12017,"arcs":[[-9136,-9143,9191,9192,9193]]},{"type":"Polygon","id":12119,"arcs":[[-9161,9194,9195,9196,-9192,-9142]]},{"type":"Polygon","id":48175,"arcs":[[-9183,9197,9198,-9179,-9155]]},{"type":"Polygon","id":12117,"arcs":[[-9149,9199,-9158,-9150]]},{"type":"MultiPolygon","id":12009,"arcs":[[[9200,9201,9202,9203,-9148]],[[9204,9205,9206,-9146]]]},{"type":"Polygon","id":48297,"arcs":[[9207,9208,9209,-9174,-9178,9210,9211]]},{"type":"Polygon","id":12095,"arcs":[[-9200,-9204,9212,-9159]]},{"type":"MultiPolygon","id":48057,"arcs":[[[9213,9214]],[[9215,-9181,9216]],[[-9166,9217]]]},{"type":"Polygon","id":48025,"arcs":[[-9199,9218,9219,-9211,-9177]]},{"type":"Polygon","id":12053,"arcs":[[-9197,9220,9221,-9193]]},{"type":"Polygon","id":48283,"arcs":[[9222,9223,9224,-9184]]},{"type":"Polygon","id":48311,"arcs":[[-9210,9225,-9223,-9171]]},{"type":"Polygon","id":48127,"arcs":[[-9185,-9225,9226,-9189,-9187]]},{"type":"Polygon","id":48391,"arcs":[[-9216,9227,9228,9229,9230,9231,-9219,-9198,-9182]]},{"type":"Polygon","id":12101,"arcs":[[-9196,9232,9233,9234,9235,-9221]]},{"type":"Polygon","id":12105,"arcs":[[9236,9237,9238,9239,-9233,-9195,-9160]]},{"type":"Polygon","id":12097,"arcs":[[-9203,9240,9241,-9237,-9213]]},{"type":"MultiPolygon","id":48007,"arcs":[[[9242]],[[9243,9244,-9231]],[[9245,9246]],[[-9229,9247,9248,9249]]]},{"type":"Polygon","id":48479,"arcs":[[9250,9251,9252,9253,-9190,-9227,-9224]]},{"type":"Polygon","id":48409,"arcs":[[-9245,9254,-9246,9255,9256,9257,9258,9259,9260,-9212,-9220,-9232]]},{"type":"Polygon","id":12103,"arcs":[[9261,9262,-9235]]},{"type":"Polygon","id":12057,"arcs":[[-9240,9263,9264,-9262,-9234]]},{"type":"Polygon","id":48131,"arcs":[[9265,9266,9267,-9251,-9226,-9209]]},{"type":"Polygon","id":48249,"arcs":[[-9261,-9260,9268,9269,9270,-9266,-9208]]},{"type":"MultiPolygon","id":48355,"arcs":[[[9271]],[[9272,-9269,-9259,9273]]]},{"type":"MultiPolygon","id":12061,"arcs":[[[9274,9275,-9241,-9202,9276]]]},{"type":"Polygon","id":12055,"arcs":[[9277,9278,9279,9280,-9238]]},{"type":"Polygon","id":12049,"arcs":[[-9281,9281,9282,-9239]]},{"type":"Polygon","id":12081,"arcs":[[-9283,9283,9284,9285,-9264]]},{"type":"Polygon","id":12093,"arcs":[[-9276,9286,9287,9288,-9278,-9242]]},{"type":"MultiPolygon","id":48273,"arcs":[[[9289,9290,9291,9292]],[[9293,9294,9295,-9270,-9273]]]},{"type":"Polygon","id":12111,"arcs":[[9296,9297,9298,9299,-9287,-9275]]},{"type":"Polygon","id":12115,"arcs":[[-9285,9300,9301,9302,9303,9304]]},{"type":"Polygon","id":48247,"arcs":[[9305,9306,9307,-9252,-9268]]},{"type":"Polygon","id":12027,"arcs":[[-9280,9308,-9301,-9284,-9282]]},{"type":"Polygon","id":48505,"arcs":[[-9308,9309,9310,-9253]]},{"type":"MultiPolygon","id":48261,"arcs":[[[9311,9312]],[[9313,-9290,9314]],[[9315,9316,9317,-9295,9318]]]},{"type":"Polygon","id":48047,"arcs":[[-9271,-9296,-9318,9319,9320,-9306,-9267]]},{"type":"MultiPolygon","id":12085,"arcs":[[[9321,9322,9323,9324,9325,-9288,-9300,9326]]]},{"type":"Polygon","id":12043,"arcs":[[9327,9328,-9279,-9289]]},{"type":"MultiPolygon","id":12015,"arcs":[[[-9304,9329]],[[-9329,9330,9331,-9302,-9309]]]},{"type":"Polygon","id":12099,"arcs":[[9332,9333,9334,-9326]]},{"type":"Polygon","id":12051,"arcs":[[9335,9336,9337,-9328,-9335]]},{"type":"MultiPolygon","id":12071,"arcs":[[[9338]],[[-9338,9339,9340,-9331]]]},{"type":"Polygon","id":48427,"arcs":[[-9321,9341,9342,-9310,-9307]]},{"type":"Polygon","id":48215,"arcs":[[-9317,9343,9344,9345,-9342,-9320]]},{"type":"Polygon","id":48489,"arcs":[[9346,-9344,-9316,9347]]},{"type":"MultiPolygon","id":12021,"arcs":[[[9348,9349,9350,9351,-9340,-9337]]]},{"type":"Polygon","id":48061,"arcs":[[-9345,-9347,9352]]},{"type":"Polygon","id":12011,"arcs":[[9353,9354,-9349,-9336,-9334]]},{"type":"Polygon","id":12086,"arcs":[[9355,9356,9357,9358,9359,-9350,-9355,9360]]},{"type":"MultiPolygon","id":12087,"arcs":[[[9361]],[[-9360,9362,-9351]]]},{"type":"Polygon","id":4015,"arcs":[[-5737,-6670,-7308,-6521,-5912,-4625,-5343,-5417]]},{"type":"Polygon","id":12029,"arcs":[[-9077,-9139,9363,-8968,-8987]]},{"type":"Polygon","id":27077,"arcs":[[-125,-180,-108,9364]]},{"type":"Polygon","id":27031,"arcs":[[9365,-203,9366]]},{"type":"Polygon","id":55031,"arcs":[[9367,-675,-668,-593,-474,-148,9368]]},{"type":"Polygon","id":55007,"arcs":[[9369,-673,-9368,9370]]},{"type":"Polygon","id":55003,"arcs":[[-561,-721,-669,-9370,9371]]},{"type":"Polygon","id":55003,"arcs":[[9372]]},{"type":"Polygon","id":26083,"arcs":[[9373,9374,9375]]},{"type":"Polygon","id":26083,"arcs":[[9376]]},{"type":"Polygon","id":26061,"arcs":[[9377,-446,-592,-436,9378]]},{"type":"Polygon","id":26061,"arcs":[[9379,-9375]]},{"type":"Polygon","id":26103,"arcs":[[9380,9381,-716,-642,-586,-444,9382]]},{"type":"Polygon","id":26003,"arcs":[[-577,9383,-9381,9384,-491]]},{"type":"Polygon","id":26041,"arcs":[[-9384,-576,9385,-712,-9382]]},{"type":"Polygon","id":55075,"arcs":[[-715,9386,-879,-687,-704,-640]]},{"type":"Polygon","id":55029,"arcs":[[-1169,9387]]},{"type":"Polygon","id":26033,"arcs":[[9388,9389]]},{"type":"Polygon","id":26033,"arcs":[[9390]]},{"type":"Polygon","id":26033,"arcs":[[9391,9392,9393,-488,9394]]},{"type":"Polygon","id":26097,"arcs":[[9395]]},{"type":"Polygon","id":26097,"arcs":[[9396,9397,-574,-489,-9394]]},{"type":"Polygon","id":26047,"arcs":[[-771,9398,9399]]},{"type":"Polygon","id":26029,"arcs":[[-9399,-770,-953,-950,9400]]},{"type":"Polygon","id":26029,"arcs":[[9401]]},{"type":"Polygon","id":26089,"arcs":[[9402]]},{"type":"Polygon","id":26089,"arcs":[[9403,-1114,9404]]},{"type":"Polygon","id":26055,"arcs":[[-948,-1082,-1230,-1111,-9404,9405]]},{"type":"Polygon","id":26007,"arcs":[[9406,-1079,-954,-819]]},{"type":"Polygon","id":26011,"arcs":[[9407,-1439,-1400,-1240,-1238]]},{"type":"Polygon","id":26063,"arcs":[[-1578,-1556,9408]]},{"type":"Polygon","id":26147,"arcs":[[-1931,-1726,-1576,9409]]},{"type":"Polygon","id":26163,"arcs":[[9410,9411,-2133,-1932,-1929]]},{"type":"Polygon","id":26115,"arcs":[[9412,-2505,-2280,-2130,-9412]]},{"type":"MultiPolygon","id":45019,"arcs":[[[9413,9414,9415,-7862,-7809,-7695]],[[-7693,-7590,9416]]]},{"type":"Polygon","id":15001,"arcs":[[9417]]},{"type":"Polygon","id":15007,"arcs":[[9418]]},{"type":"Polygon","id":15009,"arcs":[[-9420,9420]]},{"type":"Polygon","id":15009,"arcs":[[9421]]},{"type":"Polygon","id":15009,"arcs":[[9422]]},{"type":"Polygon","id":15009,"arcs":[[9423]]},{"type":"Polygon","id":15003,"arcs":[[9424]]},{"type":"Polygon","id":15007,"arcs":[[9425]]},{"type":"MultiPolygon","id":2016,"arcs":[[[9426]],[[9427]],[[9428]],[[9429]],[[9430]],[[9431]],[[9432]],[[9433]],[[9434]],[[9435]],[[9436]],[[9437]],[[9438]],[[9439]],[[9440]],[[9441]],[[9442]],[[9443]],[[9444]],[[9445]],[[9446]],[[9447]],[[9448]],[[9449]]]},{"type":"MultiPolygon","id":2013,"arcs":[[[9450]],[[9451]],[[9452]],[[9453]],[[9454]],[[9455]],[[9456]],[[9457]],[[9458]],[[9459]],[[9460]],[[9461]],[[9462,9463,9464,9465]]]},{"type":"MultiPolygon","id":2130,"arcs":[[[9466]],[[9467]]]},{"type":"Polygon","id":2060,"arcs":[[9468,9469]]},{"type":"MultiPolygon","id":2070,"arcs":[[[9470]],[[9471,9472]],[[9473,9474,9475]]]},{"type":"MultiPolygon","id":2164,"arcs":[[[9476]],[[9477,9478,9479,-9465,9480,-9470,9481,-9475,9482]]]},{"type":"MultiPolygon","id":2150,"arcs":[[[9483]],[[9484]],[[9485]],[[9486]],[[9487]],[[9488]],[[9489]],[[9490]],[[9491]],[[9492]],[[9493,-9479,9494,9495]]]},{"type":"MultiPolygon","id":2110,"arcs":[[[9496,9497,9498,9499]],[[9500]],[[9501,9502,9503,9504,9505,9506]],[[9507,9508]]]},{"type":"MultiPolygon","id":2280,"arcs":[[[9509]],[[9510]],[[9511]],[[9512]],[[9513]],[[9514]],[[9515]],[[9516,9517,9518,9519]]]},{"type":"MultiPolygon","id":2232,"arcs":[[[9520,9521,9522,9523]],[[9524]],[[-9520,9525,9526,9527,-9503,9528]],[[-9497,9529,9530,9531]],[[9532,9533]],[[-9499,9534]],[[9535,9536,9537,9538]],[[9539,9540,9541,9542]]]},{"type":"MultiPolygon","id":2100,"arcs":[[[-9507,9543,-9508,9544,-9540,9545]],[[9546,-9538,9547,-9542]]]},{"type":"MultiPolygon","id":2220,"arcs":[[[9548]],[[9549,9550]],[[-9521,9551,-9533,9552]]]},{"type":"MultiPolygon","id":2270,"arcs":[[[9553]],[[9554]],[[9555]],[[9556,9557,9558,9559]]]},{"type":"MultiPolygon","id":2050,"arcs":[[[9560]],[[9561]],[[9562]],[[9563]],[[-9559,9564,9565,9566,-9483,-9474,9567,-9473,9568]]]},{"type":"Polygon","id":2170,"arcs":[[9569,9570,9571,9572,-9566,9573,9574,9575]]},{"type":"Polygon","id":2068,"arcs":[[9576,9577,-9575,9578]]},{"type":"Polygon","id":2020,"arcs":[[-9571,9579,9580,9581]]},{"type":"MultiPolygon","id":2261,"arcs":[[[9582]],[[9583]],[[9584]],[[9585]],[[9586]],[[9587]],[[9588]],[[9589]],[[9590,9591]],[[9592]],[[9593]],[[9594]],[[9595,9596]],[[9597]],[[9598,-9580,-9570,9599,9600,9601,9602]]]},{"type":"MultiPolygon","id":2122,"arcs":[[[9603]],[[9604]],[[9605]],[[-9581,-9599,9606,-9596,9607,-9591,9608]],[[-9495,-9478,-9567,-9573,9609]]]},{"type":"Polygon","id":2282,"arcs":[[-9602,9610,-9536,9611]]},{"type":"Polygon","id":2290,"arcs":[[9612,9613,9614,-9579,-9574,-9565,-9558,9615,9616,9617]]},{"type":"Polygon","id":2090,"arcs":[[9618,-9577,-9615]]},{"type":"Polygon","id":2240,"arcs":[[-9600,-9576,-9578,-9619,-9614,9619]]},{"type":"MultiPolygon","id":2185,"arcs":[[[9620]],[[-9618,9621,9622]]]},{"type":"Polygon","id":2188,"arcs":[[-9617,9623,9624,-9622]]},{"type":"MultiPolygon","id":2180,"arcs":[[[9625]],[[9626]],[[9627]],[[-9624,-9616,-9557,9628]]]},{"type":"Polygon","id":2201,"arcs":[[9629]]},{"type":"Polygon","id":2201,"arcs":[[9630]]},{"type":"Polygon","id":2201,"arcs":[[9631]]},{"type":"Polygon","id":2201,"arcs":[[9632]]},{"type":"Polygon","id":2201,"arcs":[[9633]]},{"type":"Polygon","id":2201,"arcs":[[9634]]},{"type":"Polygon","id":2201,"arcs":[[9635]]},{"type":"Polygon","id":2201,"arcs":[[9636]]},{"type":"Polygon","id":2201,"arcs":[[9637]]},{"type":"Polygon","id":2201,"arcs":[[9638]]},{"type":"Polygon","id":2201,"arcs":[[9639]]},{"type":"Polygon","id":2201,"arcs":[[9640]]},{"type":"Polygon","id":2201,"arcs":[[9641]]},{"type":"Polygon","id":2201,"arcs":[[9642]]},{"type":"Polygon","id":2201,"arcs":[[9643]]},{"type":"Polygon","id":2201,"arcs":[[-9518,9644]]},{"type":"Polygon","id":72125,"arcs":[[9645,9646,9647,9648,9649,9650]]},{"type":"Polygon","id":72003,"arcs":[[9651,9652,9653,9654,9655]]},{"type":"Polygon","id":72097,"arcs":[[9656,9657,-9651,9658,9659,9660,9661]]},{"type":"Polygon","id":72065,"arcs":[[9662,9663,9664,9665,9666]]},{"type":"Polygon","id":72055,"arcs":[[9667,9668,9669,9670]]},{"type":"Polygon","id":72083,"arcs":[[9671,9672,-9657,9673,9674]]},{"type":"Polygon","id":72025,"arcs":[[9675,9676,9677,9678,9679,9680,9681]]},{"type":"Polygon","id":72045,"arcs":[[9682,9683,9684,9685,9686]]},{"type":"Polygon","id":72133,"arcs":[[9687,9688,9689,9690]]},{"type":"Polygon","id":72121,"arcs":[[-9671,9691,-9647,9692,9693]]},{"type":"Polygon","id":72027,"arcs":[[-9666,9694,9695,9696,9697]]},{"type":"Polygon","id":72001,"arcs":[[9698,9699,9700,9701,9702,9703]]},{"type":"Polygon","id":72111,"arcs":[[9704,9705,9706,-9700]]},{"type":"Polygon","id":72047,"arcs":[[9707,9708,9709,9710,9711,9712]]},{"type":"Polygon","id":72091,"arcs":[[9713,9714,9715,9716,9717,9718]]},{"type":"Polygon","id":72013,"arcs":[[9719,9720,9721,9722,-9663,9723]]},{"type":"Polygon","id":72145,"arcs":[[9724,9725,-9714,9726]]},{"type":"Polygon","id":72031,"arcs":[[9727,9728,9729,9730,9731,9732]]},{"type":"Polygon","id":72061,"arcs":[[9733,9734,9735,9736,9737]]},{"type":"Polygon","id":72129,"arcs":[[9738,9739,9740,9741,9742,-9678,9743]]},{"type":"Polygon","id":72075,"arcs":[[9744,9745,-9691,9746,9747,9748,9749]]},{"type":"Polygon","id":72063,"arcs":[[-9729,9750,-9744,-9677,9751]]},{"type":"Polygon","id":72073,"arcs":[[9752,-9749,9753,9754,9755]]},{"type":"Polygon","id":72143,"arcs":[[9756,9757,-9712,9758,-9725,9759]]},{"type":"Polygon","id":72011,"arcs":[[9760,-9674,-9662,9761,9762,-9653,9763]]},{"type":"Polygon","id":72081,"arcs":[[-9665,9764,-9703,9765,9766,-9672,9767,-9695]]},{"type":"Polygon","id":72079,"arcs":[[-9692,-9670,9768,9769,-9648]]},{"type":"Polygon","id":72009,"arcs":[[9770,9771,9772,9773,9774]]},{"type":"Polygon","id":72099,"arcs":[[9775,9776,-9764,-9652,9777]]},{"type":"Polygon","id":72023,"arcs":[[9778,-9649,-9770,9779,-9660]]},{"type":"Polygon","id":72109,"arcs":[[9780,9781,9782,-9784,9784,9785,-9742]]},{"type":"Polygon","id":72101,"arcs":[[-9759,-9711,9786,9787,-9715,-9726]]},{"type":"Polygon","id":72005,"arcs":[[-9778,-9656,9788,9789]]},{"type":"Polygon","id":72059,"arcs":[[-9707,9790,9791,-9701]]},{"type":"Polygon","id":72021,"arcs":[[-9736,9792,-9683,9793,9794,9795,9796]]},{"type":"Polygon","id":72141,"arcs":[[9797,-9755,9798,-9704,-9765,-9664,-9723]]},{"type":"Polygon","id":72041,"arcs":[[-9680,9799,-9775,9800,-9685,9801]]},{"type":"Polygon","id":72123,"arcs":[[9802,9803,-9689,9804,-9772,9805]]},{"type":"Polygon","id":72131,"arcs":[[9806,-9696,-9768,-9675,-9761,-9777,9807]]},{"type":"Polygon","id":72035,"arcs":[[-9743,-9786,9808,-9806,-9771,-9800,-9679]]},{"type":"Polygon","id":72135,"arcs":[[-9795,9809,-9713,-9758,9810,9811]]},{"type":"Polygon","id":72115,"arcs":[[-9697,-9807,9812,9813]]},{"type":"Polygon","id":72054,"arcs":[[-9717,9814,-9721,9815]]},{"type":"Polygon","id":72105,"arcs":[[-9794,-9687,9816,-9708,-9810]]},{"type":"Polygon","id":72017,"arcs":[[-9718,-9816,-9720,9817]]},{"type":"Polygon","id":72127,"arcs":[[-9731,9818,-9682,9819,-9734,9820]]},{"type":"Polygon","id":72139,"arcs":[[-9730,-9752,-9676,-9819]]},{"type":"Polygon","id":72057,"arcs":[[-9785,-9822,9822,-9803,-9809]]},{"type":"Polygon","id":72153,"arcs":[[-9702,-9792,9823,-9668,-9694,9824,-9766]]},{"type":"Polygon","id":72043,"arcs":[[9825,9826,-9773,-9805,-9688,-9746,9827]]},{"type":"Polygon","id":72149,"arcs":[[-9828,-9745,9828]]},{"type":"Polygon","id":72039,"arcs":[[-9788,9829,-9756,-9798,-9722,-9815,-9716]]},{"type":"Polygon","id":72113,"arcs":[[-9748,9830,-9705,-9699,-9799,-9754]]},{"type":"Polygon","id":72107,"arcs":[[9831,-9826,-9829,-9750,-9753,-9830,-9787,-9710]]},{"type":"Polygon","id":72071,"arcs":[[-9813,-9808,-9776,-9790,9832]]},{"type":"Polygon","id":72007,"arcs":[[-9681,-9802,-9684,-9793,-9735,-9820]]},{"type":"Polygon","id":72019,"arcs":[[-9686,-9801,-9774,-9827,-9832,-9709,-9817]]},{"type":"Polygon","id":72093,"arcs":[[-9767,-9825,-9693,-9646,-9658,-9673]]},{"type":"Polygon","id":72151,"arcs":[[9833,9834,9835,-9781,-9741,9836]]},{"type":"Polygon","id":72137,"arcs":[[9837,-9796,-9812,9838,9839]]},{"type":"Polygon","id":78030,"arcs":[[9840]]},{"type":"Polygon","id":72089,"arcs":[[9841,9842,9843,9844]]},{"type":"Polygon","id":72087,"arcs":[[9845,9846,-9733,9847]]},{"type":"Polygon","id":72095,"arcs":[[9848,-9782,-9836]]},{"type":"Polygon","id":72119,"arcs":[[-9844,9849,9850,9851,9852,-9846,9853]]},{"type":"Polygon","id":72103,"arcs":[[9854,9855,9856,9857,-9851]]},{"type":"Polygon","id":72085,"arcs":[[-9858,9858,-9837,-9740,9859,9860,-9852]]},{"type":"Polygon","id":72029,"arcs":[[-9853,-9861,9861,-9728,-9847]]},{"type":"Polygon","id":72053,"arcs":[[9862,-9842,9863]]},{"type":"Polygon","id":72077,"arcs":[[-9860,-9739,-9751,-9862]]},{"type":"Polygon","id":72037,"arcs":[[9864,-9855,-9850,-9843,-9863]]},{"type":"Polygon","id":72069,"arcs":[[9865,-9834,-9859,-9857]]},{"type":"Polygon","id":72147,"arcs":[[9866]]},{"type":"Polygon","id":78010,"arcs":[[9867]]},{"type":"Polygon","id":72051,"arcs":[[-9839,-9811,-9757,9868]]}]},"states":{"type":"GeometryCollection","geometries":[{"type":"MultiPolygon","id":2,"arcs":[[[9426]],[[9427]],[[9428]],[[9429]],[[9430]],[[9431]],[[9432]],[[9433]],[[9434]],[[9435]],[[9436]],[[9437]],[[9438]],[[9439]],[[9440]],[[9441]],[[9442]],[[9443]],[[9444]],[[9445]],[[9446]],[[9447]],[[9450]],[[9451]],[[9452]],[[9453]],[[9629]],[[9454]],[[9630]],[[9455]],[[9456]],[[9631]],[[9457]],[[9632]],[[9633]],[[9458]],[[9634]],[[9459]],[[9460]],[[9466]],[[9635]],[[9461]],[[9636]],[[9637]],[[9638]],[[9639]],[[9483]],[[9640]],[[9509]],[[9467]],[[9641]],[[9642]],[[9510]],[[9643]],[[9511]],[[9512]],[[9484]],[[9476]],[[9485]],[[9486]],[[9448]],[[9513]],[[9514]],[[9515]],[[9487]],[[9449]],[[9548]],[[9869,9550]],[[9488]],[[9489]],[[9524]],[[9490]],[[9552,9521,9870,9523,9551,9533]],[[9500]],[[9499,9529,9871,9531,9497,9534]],[[9491]],[[9492]],[[9470]],[[9603]],[[9604]],[[9582]],[[9583]],[[9584]],[[9585]],[[9560]],[[9586]],[[9587]],[[9561]],[[9588]],[[9605]],[[9589]],[[9562]],[[9592]],[[9593]],[[9594]],[[9563]],[[9597]],[[9553]],[[9554]],[[9555]],[[9625]],[[9626]],[[9627]],[[9620]],[[9611,9602,9606,9596,9607,9591,9608,9581,9571,9609,9872,9493,9479,9465,9873,9463,9480,9468,9481,9475,9567,9471,9568,9559,9628,9624,9622,9612,9619,9600,9610,9536,9547,9542,9545,9501,9528,9516,9644,9518,9525,9874,9527,9503,9875,9505,9543,9508,9544,9540,9546,9538]]]},{"type":"MultiPolygon","id":15,"arcs":[[[9417]],[[9422]],[[9421]],[[9423]],[[9876,9420]],[[9424]],[[9425]],[[9418]]]},{"type":"MultiPolygon","id":72,"arcs":[[[9866]],[[9813,9697,9666,9723,9817,9718,9726,9759,9868,9839,9877,9737,9820,9731,9847,9853,9844,9863,9864,9855,9865,9834,9848,9782,9878,9822,9803,9689,9746,9830,9705,9790,9823,9668,9768,9779,9660,9761,9879,9654,9788,9832]]]},{"type":"Polygon","id":1,"arcs":[[-6786,-6785,-6792,-6791,-6807,6974,-6994,-6998,7027,-7168,-7171,7205,-7420,7492,7493,-7574,7698,7699,-7846,7871,-8018,8061,-8111,-8157,8194,-8293,8320,8321,-8483,8483,-8579,8680,8681,8688,8689,8690,8566,8567,8683,8684,8685,8675,8676,9880,8678,8701,8702,8703,-8620,8521,-8436,8249,8250,-8128,7954,7955,-7826,7678,-7599,7448,-7421,7302,-7257,7179,-6951,-6954,6937,-6753,-6699,-6714,-6725,-6724]]},{"type":"Polygon","id":5,"arcs":[[-5843,-5842,-5816,-5921,-5920,-5919,-5932,-5931,-5930,-5716,-5888,-5887,-5886,-5917,-5916,-5866,-5973,-5972,-5971,-5970,-5969,-6163,-6274,6406,6407,6408,6409,-6605,6734,6735,6736,7015,-7027,7132,7133,-7415,-7414,7662,7663,7664,7665,7666,7777,7794,7795,7733,7734,7719,7720,7643,7644,7645,-7611,7513,-7233,-7232,7118,-6775,-6774,6727,-6611,6550,-6316,6256,6117,-5946,-5936]]},{"type":"Polygon","id":4,"arcs":[[-4752,-5779,5779,5780,5781,-7177,7591,7592,-8039,8208,8504,8191,7725,7726,7305,7306,-6522,-6521,-5912,-4625,-5343,-5417,-5416,-4754,-4753]]},{"type":"MultiPolygon","id":6,"arcs":[[[7053]],[[7019]],[[7054]],[[6896]],[[6897]],[[-1601,-1600,-1604,2383,-2395,-2394,-2393,-2392,4129,4130,-4310,-4309,-4308,-3802,-4324,4568,-4773,-4255,5466,-5913,6520,6521,-7307,-7306,-7727,7740,7697,7519,7056,7020,6899,6528,5874,5606,5291,5193,5288,5438,5155,5018,4853,4552,4697,4472,4696,4474,4482,4847,4484,3626,2685,2373,-1893,-1975,-1974,-1882]]]},{"type":"Polygon","id":8,"arcs":[[-2141,-2140,-2553,-2552,-2733,-2732,-2702,-2701,-2823,-2972,-2971,3139,-3194,3363,3364,-3620,3939,3940,-4277,4354,-4592,-4591,4878,4879,-5245,5317,5318,5319,5207,5208,5307,5308,5510,5511,5496,5497,5323,5321,-4751,-4750,-4749,4628,-4026,3577,-3100,-3099,2981,2982,-2194,-2137,-2136,-2135]]},{"type":"Polygon","id":9,"arcs":[[-2172,-2171,-2170,-2018,-2017,2317,2318,-2457,2526,2527,2557,2559,9881,2561,2547,2548,2549,-2285,-2284,-1998]]},{"type":"Polygon","id":11,"arcs":[[4385,4386,-4115,-4297]]},{"type":"Polygon","id":10,"arcs":[[3752,4102,4392,4393,4394,4395,4396,4397,-4267,4100,4101,-4079,3754,3755,-3497,-3588,3756,-3586]]},{"type":"MultiPolygon","id":12,"arcs":[[[9361]],[[9338]],[[9063]],[[9882,9883]],[[8993,8905]],[[9884,9356,9885,9358,9362,9351,9340,9331,9302,9329,9304,9285,9264,9262,9235,9221,9193,9886,9137,9363,8968,8865,8969,9065,9006,9064,9008,8913,9009,8915,8804,9887,8806,8797,8790,8787,-8676,-8686,-8685,-8684,-8568,-8567,-8691,-8690,-8689,-8682,-8745,-8744,-8733,-8737,-8736,-8743,-8742,-8740,-8739,-8762,8875,-8760,-8828,-8827,-8697,-8696,-8600,-8747,-8746,-8707,8835,8906,9013,9099,9139,9161,9152,9098,8991,8903,8992,9888,8988,9116,9153,9204,9889,9206,9146,9200,9276,9296,9890,9298,9326,9891,9322,9892,9324,9332,9353,9360]]]},{"type":"MultiPolygon","id":13,"arcs":[[[8704]],[[9893,8606]],[[8522]],[[8333]],[[8283]],[[8284]],[[8523,8607,9894,8609,8705,8706,8745,8746,8599,8695,8696,8826,8827,8759,-8876,8761,8738,8739,8741,8742,8735,8736,8732,8743,8744,-8681,8578,-8484,8482,-8322,-8321,8292,-8195,8156,8110,-8062,8017,-7872,7845,-7700,-7699,7573,-7494,-7493,7419,-7206,7170,7167,-7028,6997,6993,-6975,-6806,-6721,-6720,-6719,-6795,-6794,-6828,-6827,-6823,-6822,-6886,-6885,-6884,-6802,-6673,-6924,-6923,-6922,-6921,-6920,-7061,-7060,-7256,7339,-7438,-7437,-7484,-7483,-7542,-7541,-7711,7821,-7868,-7867,7891,-7899,-8057,-8056,-8055,8285,8280,8336]]]},{"type":"Polygon","id":19,"arcs":[[-1566,1654,-1696,-1780,-1779,2023,-2098,2159,-2230,2312,2313,-2452,-2451,-2450,2717,-2767,2921,-2928,3117,3118,3078,3079,3081,3082,3093,3094,3091,3092,3088,3089,3085,3086,3075,3076,3072,3073,3069,3070,-2935,2880,-2829,2659,2660,-2543,2416,-2304,2207,-2191,2065,2066,-1834,-1833,1756,-1660,1651,-1521,-1490,-1494,-1493,-1517,-1516,-1515,-1526,-1525,-1519,-1518,-1497,-1496,-1502,-1501,-1500,-1513,-1512,-1505,-1504]]},{"type":"Polygon","id":16,"arcs":[[20,-36,111,-202,240,-350,-329,-328,518,-528,-737,-736,-735,-758,-652,1121,-1174,-1173,1592,-1734,-1733,2052,2141,2107,2108,2021,2022,1896,1580,1581,-1263,-1262,-1261,1091,-970,914,-709,522,535,536,-396,-395,364,-248,-247,114,-82,22,23]]},{"type":"Polygon","id":17,"arcs":[[-1968,-1967,-1948,-1947,-1953,-1952,-1960,-1959,-2030,-2029,2116,2233,2234,2235,2510,-2533,2774,-2825,2957,-3156,3323,3324,-3546,3727,-3919,4027,-4173,4238,-4445,-4444,4683,-4705,4905,-4930,5135,-5171,5358,5359,5361,-5492,5562,5574,5575,5568,5569,5570,-5351,-5350,-5160,5125,4935,4936,4726,4727,-4456,-4455,-4521,4379,4380,4381,4165,4070,4071,-3929,3750,3751,-3685,3515,-3493,3241,3242,-3118,2927,-2922,2766,-2718,2449,2450,2451,-2314,-2313,2229,-2160,2097,-2024,-1778]]},{"type":"Polygon","id":18,"arcs":[[-2297,-2296,-2291,-2290,-2295,2470,-2539,2621,-2717,2793,2794,-3019,3039,-3168,3291,-3407,-3406,3614,-3716,3808,-3932,-4139,4144,-4266,-4265,4422,4423,4432,4433,-4557,4659,4660,4805,4798,4799,4800,4795,4892,4893,4894,4953,4954,4923,4924,4973,4974,4927,4928,4929,-4906,4704,-4684,4443,4444,-4239,4172,-4028,3918,-3728,3545,-3325,-3324,3155,-2958,2824,-2775,2532,-2511,-2236,2533,2535,2467,-2204,-2203,-2300,-2299]]},{"type":"Polygon","id":20,"arcs":[[-3419,-3431,-3429,-3428,-3423,-3422,-3433,-3432,-3413,-3412,-3410,-3409,-3417,-3416,-3426,-3427,-3317,-3316,-3486,-3485,-3490,-3489,-3488,-3492,-3561,3664,-3762,3884,-4003,-4002,-4046,-4199,-4198,4346,-4501,4546,-4772,4820,-5042,-5041,5300,5301,-5544,5556,5557,5558,5531,5532,5523,5524,5592,5593,5446,5447,5449,5450,5526,5527,5459,5460,5528,5529,5456,5457,5453,5520,5521,5519,5516,5517,-5318,5244,-4880,-4879,4590,4591,-4355,4276,-3941,-3940,3619,-3365,-3420]]},{"type":"MultiPolygon","id":21,"arcs":[[[-4137,-4136,-4161,-4160,-4159,-4182,-4181,-4351,-4350,-4373,-4372,-4498,-4497,4744,-4805,-4804,-5103,-5102,5233,5234,5235,5611,-5643,5726,5826,5827,5819,5820,5824,5825,5807,5808,5882,5883,5835,5913,5914,5838,5839,5891,5892,5696,5698,5699,5658,5659,5737,5937,5938,5831,5832,5932,5933,5957,5958,-5897,-5709,-5708,-5707,5632,-5569,-5576,-5575,-5563,5491,-5362,-5360,-5359,5170,-5136,-4929,-4928,-4975,-4974,-4925,-4924,-4955,-4954,-4895,-4894,-4893,-4796,-4801,-4800,-4799,-4806,-4661,-4660,4556,-4434,-4433,-4424,-4423,4264,4265,-4145,-4138]]]},{"type":"MultiPolygon","id":22,"arcs":[[[9108]],[[9088]],[[9046]],[[9028]],[[9899,9025,9089,9003,9084,9900,9078,9901,9080,9902,9082,9109,9070,9049,9037,9060,-9017,-8995,8942,-8693,-8692,8649,8456,8457,-8406,8237,-8223,7906,7907,7908,-7820,-7645,-7644,-7721,-7720,-7735,-7734,-7796,-7795,-7778,-7667,-7666,-7665,-7928,7943,-8109,-8108,-8107,-8106,8274,8275,8276,8491,8492,-8647,-8646,-8661,-8660,-8659,-8664,-8663,-8665,-8632,-8771,-8770,8846,8847,9010,9027]]]},{"type":"MultiPolygon","id":25,"arcs":[[[2727]],[[2632]],[[2175,2248,2249,2250,2251,2252,2168,2015,2016,2017,2169,2170,2171,1997,1998,1999,-1887,-1737,-1736,-1754,-1807,-1806,-1783,-1782,-1781,-1749,1934,9903,2006,9904,2008,2118,2165,2177,9905,2173,2287]]]},{"type":"MultiPolygon","id":24,"arcs":[[[4166]],[[4781,4782,4856,4857,4858,4690,4581,4268,4408,4169,4080,3824,3834,3840,4088,4192,9906,4194,4521,4293,4613,4731,4615,4295,4296,4114,4115,4116,3849,3811,3812,3813,3814,3816,3817,3818,3820,3821,3822,-3547,-3461,-3460,-3445,-3537,-3536,-3458,-3457,-3584,-3583,-3501,-3500,-3499,-3449,-3448,-3498,-3756,-3755,4078,-4102,-4101,4266,-4398,-4397,-4396,4784]]]},{"type":"MultiPolygon","id":23,"arcs":[[[918]],[[919]],[[1288,1134,1392,1380,1390,1382,1537,1538,-1300,-889,889,890,891,817,567,360,813,920,599,1117,1282,1286,1391]]]},{"type":"MultiPolygon","id":26,"arcs":[[[9402]],[[9401]],[[771,820,9406,1075,1236,9407,1434,1560,1561,9408,1578,9409,1927,9410,9412,-2505,2280,2281,2292,2293,2294,2289,2290,2295,2296,2298,2299,2202,2203,2204,2151,1988,1785,1686,1533,1378,1225,1112,9404,9405,948,9400,9399]],[[9395]],[[9388,9389]],[[9390]],[[9377,446,9382,9384,491,9394,9907,9392,9396,9397,574,9385,712,713,714,639,640,587,588,589,590,476,477,478,479,480,481,482,483,484,434,9378]],[[9373,9379,9375]],[[9376]]]},{"type":"Polygon","id":27,"arcs":[[125,151,204,9366,9365,203,137,138,139,140,141,142,143,144,145,146,147,473,592,593,594,-667,794,-800,901,902,1050,-1075,1139,-1162,-1187,-1186,-1191,1370,-1423,1502,1503,1504,1511,1512,1499,1500,1501,1495,1496,1517,1518,1524,1525,1514,1515,1516,1492,1493,1489,1490,1336,-1220,1179,-1044,-1043,917,-893,840,-746,702,-551,546,415,-404,348,-318,218,-210,164,165,-55,60,106,9364]]},{"type":"Polygon","id":29,"arcs":[[-3119,-3243,-3242,3492,-3516,3684,-3752,-3751,3928,-4072,-4071,-4166,-4382,-4381,-4380,4520,4454,4455,-4728,-4727,-4937,-4936,-5126,5159,5349,5350,-5571,-5570,-5633,5706,5707,5708,5896,5897,5898,5899,-6100,6161,6162,5968,5969,5970,5971,5972,5865,5915,5916,5885,5886,5887,5715,5929,5930,5931,5918,5919,5920,5815,5841,5842,5935,5936,-5766,5719,-5557,5543,-5302,-5301,5040,5041,-4821,4771,-4547,4500,-4347,4197,4198,4045,4001,4002,-3885,3761,-3665,3560,3491,-3487,-3304,3273,-3129,-3070,-3074,-3073,-3077,-3076,-3087,-3086,-3090,-3089,-3093,-3092,-3095,-3094,-3083,-3082,-3080,-3079]]},{"type":"Polygon","id":28,"arcs":[[-6755,-6754,-6938,6953,6950,-7180,7256,-7303,7420,-7449,7598,-7679,7825,-7956,-7955,8127,-8251,-8250,8435,-8522,8619,-8704,-8703,8838,8861,8880,-8847,8769,8770,8631,8664,8662,8663,8658,8659,8660,8645,8646,-8493,-8492,-8277,-8276,-8275,8105,8106,8107,8108,-7944,7927,-7664,-7663,7413,7414,-7134,-7133,7026,-7016,-6737,-6736,-6768,-6767,-6772,-6771,-6743,-6742,-6741,-6773]]},{"type":"Polygon","id":30,"arcs":[[43,99,88,46,50,29,9,53,110,-93,108,-133,221,-231,373,-381,514,515,516,675,676,677,763,764,765,697,698,826,827,655,649,650,651,757,734,735,736,527,-519,327,328,349,-241,201,-112,35,-21,36,19]]},{"type":"MultiPolygon","id":37,"arcs":[[[-5845,6042,6259,6044]],[[6047,6086,6179,6194,6038,6056,6247,6431,6425,6582,6258,6583,6564,6492,6560,6804,6761,6831,6759,6893,6990,7112,7271,9920,7273,7279,7280,7281,7282,7252,7005,7006,7007,6928,6877,6846,6847,6852,6853,6676,6677,6756,6645,6646,6630,6631,6768,6769,6695,6749,6750,6751,6671,6672,6801,6883,6884,6885,6821,6822,6823,-6595,-6594,-6457,-6456,-6392,-6391,-6287,-6286,-6285,6174,-6175,-6174,-6233,-6232,-6231,-6084,-6083,-5987,-5986,-5985,-5928,-5927,-5926,-5854,-5896,-5895,-5911,-5910,-5674,-5673,-5963,-5671,-5714,-5713,-5712,-5882,-5881,-5880,-5725,-5724,-5876,-5805,-5804,-5803,-5871,-5870,-5908,-5907,-5849,6041]]]},{"type":"Polygon","id":38,"arcs":[[54,-166,-165,209,-219,317,-349,403,-416,-547,550,551,627,628,633,634,631,632,530,583,623,624,625,635,-516,-515,380,-374,230,-222,132,-109,92,93,98,103,40,32,64,68,57]]},{"type":"Polygon","id":31,"arcs":[[-1710,-1552,-1682,-1681,-1672,-1671,-1812,-1810,-1809,-1839,-1838,-1836,-1835,-2067,-2066,2190,-2208,2303,-2417,2542,-2661,-2660,2828,-2881,2934,-3071,3128,-3274,3303,3486,3487,3488,3489,3484,3485,3315,3316,3426,3425,3415,3416,3408,3409,3411,3412,3431,3432,3421,3422,3427,3428,3430,3418,3419,-3364,3193,-3140,2970,2971,2822,2700,2701,2731,2732,-2551,2541,-2048,-2047,1861,-1644,-1684,-1683,-1574,-1573,-1709]]},{"type":"Polygon","id":33,"arcs":[[-890,888,1299,-1539,1615,1747,1748,1780,1781,1782,1805,1806,-1753,1614,-1456,1269,1270,-1115,-996,899,900,-891]]},{"type":"Polygon","id":34,"arcs":[[9921,3944,3785,3786,3787,3788,3789,3726,3668,3524,3525,-3254,-3253,3124,2911,2912,-2814,2756,-2603,-2568,-2567,-2770,-2769,2897,3116,3066,3156,3256,3346,3531,3521,3805,4124,3946]]},{"type":"Polygon","id":35,"arcs":[[5784,5785,5786,-6372,6554,6555,-6863,7008,7009,7156,7157,-7563,7653,7654,7655,7656,7657,7967,7968,7969,7783,7784,7785,7888,7889,8111,8037,8038,-7593,-7592,7176,-5782,-5781,-5780,5778,-5322,-5324,-5498,-5497,-5512,-5511,-5309,-5308,-5209,-5208,-5320]]},{"type":"Polygon","id":32,"arcs":[[-2023,-2357,2361,-2921,3561,3562,-3998,4621,4622,4623,4624,5911,5912,-5467,4254,4772,-4569,4323,3801,4307,4308,4309,-4131,-4130,2391,2392,2393,2394,-2384,-1603,-1429,-1428,-1264,-1582,-1581,-1897]]},{"type":"MultiPolygon","id":36,"arcs":[[[3237]],[[3052,9922,3054,3119,3152,3121,3056,2782]],[[1826]],[[3046,3097,3048,2751,2629,2770,2768,2769,2566,2567,2568,2324,2325,2093,2153,2154,2156,2157,2188,2189,2056,2057,2088,2089,2085,2086,2060,2061,2062,1831,1716,1713,1721,1724,1701,1570,1279,9923,1281,1275,1276,1019,1031,1005,-1001,1002,-1132,1204,-1296,-1485,1544,-1738,1886,-2000,-1999,2283,2284,-2550,-2549,2752]]]},{"type":"Polygon","id":39,"arcs":[[2397,-2447,2666,-2675,2898,-2906,3033,3034,-3246,3262,3263,-3520,3528,-3609,3737,3738,3893,3894,3895,3992,-4069,4228,4226,4362,4363,4494,4495,4496,4497,4371,4372,4349,4350,4180,4181,4158,4159,4160,4135,4136,4137,4138,3931,-3809,3715,-3615,3405,3406,-3292,3167,-3040,3018,-2795,-2794,2716,-2622,2538,-2471,-2294,-2293,-2282,-2281,2504,2505,2506,2507,2508,2509,2514,9926,2516,2669,2593,2594,2595,2636,2579,2443,2401,-2200]]},{"type":"Polygon","id":40,"arcs":[[-5458,-5457,-5530,-5529,-5461,-5460,-5528,-5527,-5451,-5450,-5448,-5447,-5594,-5593,-5525,-5524,-5533,-5532,-5559,-5558,-5720,5765,-5937,5945,-6118,-6257,6315,-6551,6610,-6728,6773,6774,-7119,7231,7232,7233,7234,7401,7402,7398,7399,7400,7380,7440,7441,7442,7337,7338,7229,7230,7139,7140,7035,7036,6930,6931,-6871,6691,-6627,6398,-6366,6016,6017,5798,5799,5794,5795,5796,5791,5792,-5785,-5319,-5518,-5517,-5520,-5522,-5521,-5454]]},{"type":"Polygon","id":41,"arcs":[[661,-608,658,-691,-604,-603,-696,-695,-694,-693,-692,-503,-502,-557,-555,-554,-513,-583,-536,-523,708,-915,969,-1092,1260,1261,1262,1263,1427,1428,1602,1603,1599,1600,1881,1973,1974,1892,1893,1611,1464,1298,980,776,622]]},{"type":"Polygon","id":42,"arcs":[[-2061,-2087,-2086,-2090,-2089,-2058,-2057,-2190,-2189,-2158,-2157,-2155,-2154,-2094,-2326,-2325,-2569,2602,-2757,2813,-2913,-2912,-3125,3252,3253,-3526,3553,3584,3585,-3757,3587,3496,3497,3447,3448,3498,3499,3500,3582,3583,3456,3457,3535,3536,3444,3459,3460,3546,3547,3548,3610,3611,-3610,3337,3338,3339,-3244,3106,-3034,2905,-2899,2674,-2667,2446,-2398,2199,2200,-2062]]},{"type":"MultiPolygon","id":44,"arcs":[[[2544]],[[2545,-2250]],[[-2253,-2252,2452,2321,2454,2553,-2527,2456,-2319,-2318,-2016,-2169]]]},{"type":"MultiPolygon","id":45,"arcs":[[[8077]],[[8079]],[[8080]],[[7693,9413,9930,9415,7862,8081,8046,9931,8048,9932,8050,8078,8053,8054,8055,8056,7898,-7892,7866,7867,-7822,7710,7540,7541,7482,7483,7436,7437,-7340,7255,7059,7060,6919,6920,6921,6922,6923,-6672,-6752,-6751,-6750,-6696,-6770,-6769,-6632,-6631,-6647,-6646,-6757,-6678,-6677,-6854,-6853,-6848,-6847,-6878,-6929,-7008,-7007,-7006,-7253,-7283,7328,7588,9416]]]},{"type":"Polygon","id":46,"arcs":[[-624,-584,-531,-633,-632,-635,-634,-629,-628,-552,-703,745,-841,892,-918,1042,1043,-1180,1219,-1337,-1491,1520,-1652,1659,-1757,1832,1833,1834,1835,1837,1838,1808,1809,1811,1670,1671,1680,1681,1551,1709,1708,1572,1573,1682,1683,-1643,1487,-1374,1248,1183,-1033,939,-677,-676,-517,-636,-626,-625]]},{"type":"Polygon","id":47,"arcs":[[-5660,-5659,-5700,-5699,-5697,-5893,-5892,-5840,-5839,-5915,-5914,-5836,-5884,-5883,-5809,-5808,-5826,-5825,-5821,-5820,-5828,-5879,-5878,-5891,-5890,-5889,-5859,-5983,-5863,-5862,-5929,5984,5985,5986,6082,6083,6230,6231,6232,6173,6174,-6175,6284,6285,6286,6390,6391,6455,6456,6593,6594,-6824,6826,6827,6793,6794,6718,6719,6720,6805,6806,6790,6791,6784,6785,6723,6724,6713,6698,6752,6753,6754,6772,6740,6741,6742,6770,6771,6766,6767,-6735,6604,-6410,-6409,-6408,-6407,6273,-6162,6099,-5900,-6101,-5898,-5959,-5958,-5934,-5933,-5833,-5832,-5939,-5938,-5738]]},{"type":"MultiPolygon","id":48,"arcs":[[[9933]],[[9311,9312]],[[9313,9290,9934,9292,9314]],[[9271]],[[9242]],[[9935,9214]],[[9128]],[[9132,9175,9936,9164,9217,9166,9937,9168,9179,9216,9227,9247,9938,9249,9229,9243,9254,9246,9255,9939,9257,9273,9293,9318,9347,9352,9345,9342,9310,9253,9190,9127,8977,8872,8869,8883,8392,8394,-7889,-7786,-7785,-7784,-7970,-7969,-7968,-7658,-7657,-7656,-7655,-7654,7562,-7158,-7157,-7010,-7009,6862,-6556,-6555,6371,-5787,-5786,-5793,-5792,-5797,-5796,-5795,-5800,-5799,-6018,-6017,6365,-6399,6626,-6692,6870,-6932,-6931,-7037,-7036,-7141,-7140,-7231,-7230,-7339,-7338,-7443,-7442,-7441,-7381,-7401,-7400,-7399,-7403,-7402,-7235,-7234,-7514,7610,-7646,7819,-7909,-7908,-7907,8222,-8238,8405,-8458,-8457,-8650,8691,8692,-8943,8994,9016,9017,9090,9131,9092,9020,9130]]]},{"type":"Polygon","id":49,"arcs":[[-1732,2343,-2621,-2196,-2195,-2983,-2982,3098,3099,-3578,4025,-4629,4748,4749,4750,4751,4752,4753,5415,5416,5342,-4624,-4623,-4622,3997,-3563,-3562,2920,-2362,2356,-2022,-2109,-2108,-2142,-2053]]},{"type":"MultiPolygon","id":51,"arcs":[[[5405,5058,-4782,5059]],[[5005,4865,4807,4982,5225,5370,5424,5372,5109,5148,5330,5473,5536,9940,5683,5638,5472,5431,5282,5394,9941,5581,5626,5665,5871,9942,5902,9943,9944,5905,5850,5823,5851,5844,5845,5846,5847,5848,5906,5907,5869,5870,5802,5803,5804,5875,5723,5724,5879,5880,5881,5711,5712,5713,5670,5962,5672,5673,5909,5910,5894,5895,5853,5925,5926,5927,5928,5861,5862,5982,5858,5888,5889,5890,5877,5878,-5827,-5727,5642,-5612,-5236,-5235,-5234,-5101,-5412,-5411,-5378,-5377,-5376,-5180,-5275,-5274,5122,-4883,4877,-4536,-4535,-4403,-4402,-4401,-4189,-4188,4043,-3999,-3865,-3910,-4025,-4024,-3812,-3850,-4117,-4116,-4387,4417,9945,4342,4409,4669,4810,4866,5063,5188]]]},{"type":"Polygon","id":50,"arcs":[[1008,998,-900,995,1114,-1271,-1270,1455,-1615,1752,1753,1735,1736,1737,-1545,1484,1295,-1205,1131,-1003,1000,1001,994]]},{"type":"MultiPolygon","id":53,"arcs":[[[303]],[[271]],[[184]],[[118]],[[119]],[[120]],[[126,2,3,75,85,80,83,-23,81,-115,246,247,-365,394,395,-537,582,512,553,554,556,501,502,691,692,693,694,695,602,603,690,-659,607,608,610,467,343,233,186,187,234,319,276,371,273,372,321,407,370,307,196,183,197,129]]]},{"type":"MultiPolygon","id":55,"arcs":[[[9372]],[[9371,561,557,-484,-483,-482,-481,-480,-479,-478,-477,-591,-590,-589,-588,-641,-640,-715,9386,879,9949,881,1155,1167,9387,1165,1289,1474,1623,1800,1960,2027,2028,2029,1958,1959,1951,1952,1946,1947,1966,1967,1777,1778,1779,1695,-1655,1565,-1503,1422,-1371,1190,1185,1186,1161,-1140,1074,-1051,-903,-902,799,-795,666,-595,-594,-593,-474,-148,9368,9370]]]},{"type":"Polygon","id":54,"arcs":[[3243,-3340,-3339,-3338,3609,-3612,-3611,-3549,-3548,-3823,-3822,-3821,-3819,-3818,-3817,-3815,-3814,-3813,4023,4024,3909,3864,3998,-4044,4187,4188,4400,4401,4402,4534,4535,-4878,4882,-5123,5273,5274,5179,5375,5376,5377,5410,5411,5100,5101,5102,4803,4804,-4745,-4496,-4495,-4364,-4363,-4227,-4229,4068,-3993,-3896,-3895,-3894,-3739,-3738,3608,-3529,3519,-3264,-3263,3245,-3035,-3107]]},{"type":"Polygon","id":56,"arcs":[[-827,-699,-698,-766,-765,-764,-678,-940,1032,-1184,-1249,1373,-1488,1642,1643,-1862,2046,2047,-2542,2550,2551,2552,2139,2140,2134,2135,2136,2193,2194,2195,2620,-2344,1731,1732,1733,-1593,1172,1173,-1122,-651,-650,-656,-828]]},{"type":"MultiPolygon","id":78,"arcs":[[[9867]],[[9840]]]}]},"land":{"type":"MultiPolygon","arcs":[[[9361]],[[9933]],[[9338]],[[9311,9312]],[[9313,9290,9934,9292,9314]],[[9271]],[[9242]],[[9935,9214]],[[9128]],[[9108]],[[9088]],[[9046]],[[9063]],[[9882,9883]],[[9028]],[[8993,8905]],[[8704]],[[9893,8606]],[[8522]],[[8333]],[[8283]],[[8284]],[[8077]],[[8079]],[[8080]],[[7053]],[[7019]],[[7054]],[[6896]],[[6897]],[[4166]],[[3237]],[[3052,9922,3054,3119,3152,3121,3056,2782]],[[2727]],[[2632]],[[2544]],[[1826]],[[918]],[[919]],[[9402]],[[9401]],[[9395]],[[9388,9389]],[[9390]],[[9372]],[[9373,9379,9375]],[[-9918]],[[1275,1276,1019,1031,1005,1001,994,1008,998,900,891,817,567,360,813,920,599,1117,1282,1286,1391,1288,1134,1392,1380,1390,1382,1537,1615,1747,1934,9903,2006,9904,2008,2118,2165,2177,9905,2173,2287,2175,2248,2545,2250,2452,2321,2454,2553,2527,2557,2559,9881,2561,2547,2752,3046,3097,3048,2751,2629,2770,2897,3116,3066,3156,3256,3346,3531,3521,3805,4124,3946,9921,3944,3785,9954,3787,9955,3789,3726,3668,3524,3553,3584,3752,4102,4392,9956,4394,4784,5059,5405,5058,4782,4856,9957,4858,4690,4581,4268,4408,4169,4080,3824,3834,3840,4088,4192,9906,4194,4521,4293,4613,4731,4615,4295,4385,4417,9945,4342,4409,4669,4810,4866,5063,5188,5005,4865,4807,4982,5225,5370,5424,5372,5109,5148,5330,5473,5536,9940,5683,5638,5472,5431,5282,5394,9941,5581,5626,5665,5871,9942,5902,9943,9944,5905,5850,5823,5851,6042,6259,6044,5845,9958,9959,9960,5847,6041,6047,6086,6179,6194,6038,6056,6247,6431,6425,6582,6258,6583,6564,6492,6560,6804,6761,6831,6759,6893,6990,7112,7271,9920,7273,7279,9961,7281,7328,7588,9416,7693,9413,9930,9415,7862,8081,8046,9931,8048,9932,8050,8078,8053,8285,8280,8336,8523,8607,9894,8609,8705,8835,8906,9013,9099,9139,9161,9152,9098,8991,8903,8992,9888,8988,9116,9153,9204,9889,9206,9146,9200,9276,9296,9890,9298,9326,9891,9322,9892,9324,9332,9353,9360,9884,9356,9885,9358,9362,9351,9340,9331,9302,9329,9304,9285,9264,9262,9235,9221,9193,9886,9137,9363,8968,8865,8969,9065,9006,9064,9008,8913,9009,8915,8804,9887,8806,8797,8790,8787,8676,9880,8678,8701,8838,8861,8880,8847,9010,9027,9899,9025,9089,9003,9084,9900,9078,9901,9080,9902,9082,9109,9070,9049,9037,9060,9017,9090,9131,9092,9020,9130,9132,9175,9936,9164,9217,9166,9937,9168,9179,9216,9227,9247,9938,9249,9229,9243,9254,9246,9255,9939,9257,9273,9293,9318,9347,9352,9345,9342,9310,9253,9190,9127,8977,8872,8869,8883,8392,8394,7889,8111,8037,8208,8504,8191,7725,7740,7697,7519,7056,7020,6899,6528,5874,5606,5291,5193,5288,5438,5155,5018,4853,4552,4697,4472,4696,4474,4482,4847,4484,3626,2685,2373,1893,1611,1464,1298,980,776,622,661,608,610,467,343,233,186,9946,9962,9948,3,75,85,80,83,23,36,19,43,99,88,46,50,29,9,53,110,93,98,103,40,32,64,68,57,60,106,9364,125,151,204,9366,9365,203,137,138,139,140,141,142,143,144,145,146,9368,9370,9371,561,557,484,434,9378,9377,446,9382,9384,491,9394,9907,9392,9396,9397,574,9385,712,713,9386,879,9949,881,1155,1167,9387,1165,1289,1474,1623,1800,1960,2027,2116,2233,2234,2533,2535,2467,2204,2151,1988,1785,1686,1533,1378,1225,1112,9404,9405,948,9400,9399,771,820,9406,1075,1236,9407,1434,1560,1561,9408,1578,9409,1927,9410,9412,2505,-9912,2507,-9910,2509,2514,9926,2516,2669,2593,2594,2595,2636,2579,2443,2401,2200,2062,1831,1716,1713,1721,1724,1701,1570,1279,9923,1281]],[[9612,9619,9600,9610,9536,9547,9542,9545,9501,9528,9516,9644,9518,9525,9874,9527,9503,9875,9505,9543,9508,9544,9540,9546,9538,9611,9602,9606,9596,9607,9591,9608,9581,9571,9609,9872,9493,9479,9465,9873,9463,9480,9468,9481,9475,9567,9471,9568,9559,9628,9624,9622]],[[9489]],[[9626]],[[9552,9521,9870,9523,9551,9533]],[[9561]],[[9499,9529,9871,9531,9497,9534]],[[9869,9550]],[[9455]],[[9515]],[[9447]],[[9563]],[[9514]],[[9491]],[[9445]],[[9555]],[[9554]],[[9440]],[[9586]],[[9510]],[[9444]],[[9434]],[[9513]],[[9512]],[[9588]],[[9511]],[[9431]],[[9548]],[[9642]],[[9460]],[[9438]],[[9562]],[[9432]],[[9470]],[[9451]],[[9589]],[[9487]],[[9458]],[[9426]],[[9553]],[[9437]],[[9524]],[[9492]],[[9500]],[[9441]],[[9435]],[[9490]],[[9592]],[[9439]],[[9625]],[[9486]],[[9485]],[[9488]],[[9442]],[[9452]],[[9443]],[[9597]],[[9454]],[[9436]],[[9453]],[[9585]],[[9483]],[[9449]],[[9428]],[[9456]],[[9446]],[[9620]],[[9603]],[[9459]],[[9448]],[[9457]],[[9450]],[[9594]],[[9583]],[[9584]],[[9582]],[[9476]],[[9587]],[[9605]],[[9604]],[[9484]],[[9627]],[[9461]],[[9560]],[[9429]],[[9427]],[[9433]],[[9593]],[[9430]],[[9629]],[[9630]],[[9631]],[[9632]],[[9633]],[[9634]],[[9466]],[[9635]],[[9636]],[[9637]],[[9638]],[[9639]],[[9640]],[[9509]],[[9467]],[[9641]],[[9643]],[[9867]],[[9866]],[[9840]],[[9813,9697,9666,9723,9817,9718,9726,9759,9868,9839,9877,9737,9820,9731,9847,9853,9844,9863,9864,9855,9865,9834,9848,9782,9878,9822,9803,9689,9746,9830,9705,9790,9823,9668,9768,9779,9660,9761,9879,9654,9788,9832]],[[9417]],[[9422]],[[9421]],[[9423]],[[9876,9420]],[[9424]],[[9425]],[[9418]]]}},"arcs":[[[162416,583189],[236,-863],[94,-3199],[220,-1079],[-271,-1241]],[[162695,576807],[-443,-309],[-4396,83]],[[157856,576581],[-6,1800],[-436,606],[-476,3062],[167,1173]],[[157105,583222],[2782,-89],[2529,56]],[[203483,583173],[-111,-3268],[363,0],[1,-4838],[604,-14]],[[204340,575053],[0,-6406],[-109,-3],[-1,-3886]],[[204230,564758],[-1074,300],[-478,661],[-49,-1946]],[[202629,563773],[-411,-2654],[-860,-2419],[-1043,-435],[-462,561]],[[199853,558826],[29,9804],[98,1617],[303,-7],[-114,3279],[302,529],[-36,7508],[72,1628]],[[200507,583184],[2976,-11]],[[181317,583162],[311,-3373],[318,707],[389,-2530],[-133,-1970],[788,-1235],[-38,-1636],[347,-662],[20,-2123]],[[183319,570340],[343,-1416],[-25,-1101],[608,-791]],[[184245,567032],[386,-2907],[-296,-416]],[[184335,563709],[-284,-667],[56,-2637],[-277,-1038],[59,-2316]],[[183889,557051],[-896,68]],[[182993,557119],[-468,-2]],[[182525,557117],[101,1562],[-233,2072],[31,1860],[-477,1550],[-122,1357],[-537,-515],[111,-1134],[-1263,-12],[41,-3203],[-354,-5]],[[179823,560649],[-1,1601],[-1073,-52],[-59,2655]],[[178690,564853],[-26,3920],[480,4],[-5,6466],[-109,1581],[659,10],[112,1730],[-222,1681],[-105,2947]],[[179474,583192],[1843,-30]],[[175797,583199],[0,-9287]],[[175797,573912],[-2052,-28],[-1,6456],[-689,-16]],[[173055,580324],[0,2844]],[[173055,583168],[2742,31]],[[199853,558826],[-98,-1296],[-681,144],[-597,-3335]],[[198477,554339],[-62,2205],[-374,544],[-690,-278]],[[197351,556810],[-1278,1156],[-333,1655]],[[195740,559621],[8,3507],[732,-36],[49,1307],[484,-269],[0,4521],[87,4167]],[[197100,572818],[159,-390],[75,5957],[166,-2],[64,4793]],[[197564,583176],[2943,8]],[[221924,574709],[-1820,8]],[[220104,574717],[-102,3252],[0,5201]],[[220002,583170],[1830,2]],[[221832,583172],[3,-5232],[89,-3231]],[[178690,564853],[-400,43],[-118,-1893],[-228,-480],[-676,326],[-48,1381],[-615,5245],[-698,-1923],[-112,1018]],[[175795,568570],[2,5342]],[[175797,583199],[3677,-7]],[[220104,574717],[-363,-10]],[[219741,574707],[-362,-1],[-1,1624],[-1819,10],[0,-1619]],[[217559,574721],[-1091,11],[0,3239],[-126,10],[-1,5192]],[[216341,583173],[3661,-3]],[[186539,583158],[25,-9701]],[[186564,573457],[-1094,108],[-9,-3230],[-2142,5]],[[181317,583162],[5222,-4]],[[193948,567081],[-538,-46],[0,1653],[-330,-43],[0,1617],[-2172,10],[0,-1617],[-363,1]],[[190545,568656],[35,14501]],[[190580,583157],[3492,32]],[[194072,583189],[-44,-7981],[115,-2218],[-242,-2960],[47,-2949]],[[195740,559621],[-133,1040],[-934,55],[-434,-1362],[-302,351]],[[193937,559705],[11,7376]],[[194072,583189],[3492,-13]],[[206421,583169],[53,-6498],[181,-1619]],[[206655,575052],[-2315,1]],[[203483,583173],[2938,-4]],[[228232,583191],[206,-4516],[166,-1312],[-187,-2686]],[[228417,574677],[-2130,0]],[[226287,574677],[-64,8514]],[[226223,583191],[2009,0]],[[230526,583184],[49,-8486]],[[230575,574698],[-2158,-21]],[[228232,583191],[2294,-7]],[[223380,574698],[-1,-3220],[-639,-11]],[[222740,571467],[-816,5]],[[221924,571472],[0,3237]],[[221832,583172],[1466,10]],[[223298,583182],[0,-5247],[82,-3237]],[[226287,574677],[-1090,12]],[[225197,574689],[-1817,9]],[[223298,583182],[2925,9]],[[168030,583185],[-42,-19407]],[[167988,563778],[-338,-262]],[[167650,563516],[-25,343]],[[167625,563859],[88,1056],[-308,2218],[-251,148],[-798,-1281],[-586,-1450],[-104,1725],[-570,-648],[55,-1799]],[[165151,563828],[-497,4],[-263,1945],[-611,1931],[-82,1381],[-532,1417],[-331,3957]],[[162835,574463],[-140,2344]],[[162416,583189],[2209,-15],[3405,11]],[[171951,583192],[-373,-3049],[-183,-3367],[361,7],[-7,-9706],[182,-1632]],[[171931,565445],[-274,12],[-1,-4693],[-436,1680],[-359,-1132]],[[170861,561312],[-166,418],[-548,-890],[-371,2707],[-364,-947]],[[169412,562600],[-132,2358],[405,757],[-4,1210],[289,2381],[-187,3288],[316,4420],[-331,3951],[45,2219]],[[169813,583184],[2138,8]],[[173055,580324],[-26,-14910]],[[173029,565414],[-1098,31]],[[171951,583192],[1104,-24]],[[169412,562600],[-45,-983],[-485,620],[-109,1069],[-446,-598],[-339,1070]],[[168030,583185],[1783,-1]],[[188725,567028],[0,1624]],[[188725,568652],[374,0],[11,14480]],[[189110,583132],[1470,25]],[[190545,568656],[-200,-1611],[-1620,-17]],[[212324,583170],[-3,-5175],[150,-1639]],[[212471,576356],[-3238,15]],[[209233,576371],[-1,6810]],[[209232,583181],[3092,-11]],[[214880,583162],[-1,-3570]],[[214879,579592],[-364,-1],[-1,-1615],[-226,0],[0,-3239]],[[214288,574737],[-1816,1]],[[212472,574738],[-1,1618]],[[212324,583170],[2556,-8]],[[186539,583158],[2571,-26]],[[188725,568652],[-718,-1],[2,2422],[-362,804],[-543,30],[-81,1075],[-459,475]],[[217559,574721],[0,-1621]],[[217559,573100],[-2179,21],[-1,4852],[-499,6],[-1,1613]],[[214880,583162],[1461,11]],[[233488,574623],[-724,-26]],[[232764,574597],[-2189,101]],[[230526,583184],[3019,-21]],[[233545,583163],[240,-2188],[402,728],[5,-3862],[-704,-3],[0,-3215]],[[209233,576371],[4,-4555]],[[209237,571816],[-1620,-4],[1,1622],[-363,4],[0,1612],[-600,2]],[[206421,583169],[2811,12]],[[175795,568570],[0,-4401]],[[175795,564169],[-503,1656],[-278,-929],[18,-2373]],[[175032,562523],[-508,-3],[3,1885],[-1501,-262]],[[173026,564143],[3,1271]],[[217559,573100],[127,-1619],[-2,-6492],[124,-2],[-3,-3238]],[[217805,561749],[-2509,-20]],[[215296,561729],[1,3269],[-141,0],[0,6485],[-143,10],[0,3259],[-725,-15]],[[156776,574866],[145,-2337],[-336,700],[191,1637]],[[156018,576188],[367,-1161],[-54,-1921],[-274,763],[-39,2319]],[[156711,577874],[437,-1003],[-572,-1182],[-174,1060],[309,1125]],[[239768,576252],[-26,-7172],[46,-6528]],[[239788,562552],[-1935,133],[-2,-978],[-1789,-11]],[[236062,561696],[-29,9709]],[[236033,571405],[-4,6210]],[[236029,577615],[339,173],[235,-1132],[1047,-347],[154,-2131],[907,561],[6,841],[719,948],[332,-276]],[[157403,572219],[-142,1501],[248,575],[362,-1247],[-15,3533]],[[162835,574463],[-341,252],[-585,-931],[-106,-3299],[197,-417]],[[162000,570068],[-3852,30]],[[158148,570098],[-745,2121]],[[212472,574738],[0,-3235],[160,6],[-1,-4641]],[[212631,566868],[-1041,215],[-260,-1783],[-494,-878],[-372,2570],[-383,-709],[-219,-2110],[-618,322]],[[209244,564495],[-7,7321]],[[219741,574707],[109,-3230],[1,-6504],[110,0],[-1,-3243]],[[219960,561730],[-1079,-3]],[[218881,561727],[-1076,22]],[[243362,568344],[29,-12216],[-17,-11280]],[[243374,544848],[-834,-2840],[212,-1505]],[[242752,540503],[-2,-7]],[[242750,540496],[-224,823]],[[242526,541319],[-10,0]],[[242516,541319],[-187,-592]],[[242329,540727],[-9,7]],[[242320,540734],[-75,-212]],[[242245,540522],[-5,-38]],[[242240,540484],[-9,-872]],[[242231,539612],[3,11]],[[242234,539623],[-248,57]],[[241986,539680],[-26,1879],[-2117,44]],[[239843,541603],[15,4838]],[[239858,546441],[-15,12915],[-55,3196]],[[239768,576252],[1003,-1644],[260,59],[-216,-1483],[572,-280],[382,-4206],[280,489],[20,1987],[577,82],[135,-1750],[581,-1162]],[[209244,564495],[-258,1115],[-593,-179],[-307,1362],[-1057,19],[-145,560],[-288,-1583],[-558,-1]],[[206038,565788],[-93,498],[-752,103],[-963,-1631]],[[165151,563828],[-359,-3363],[-516,-331],[-139,-2995],[-195,-1515],[49,-2367],[561,-1042],[-25,-1385]],[[164527,550830],[-822,-18],[-768,1529],[-383,1474],[-339,202],[-528,3049]],[[161687,557066],[129,2030],[-144,1373]],[[161672,560469],[135,875],[-307,1331],[76,2648],[386,644],[303,1650],[-265,2451]],[[215296,561729],[-1431,3],[-2,-1673]],[[213863,560059],[-714,1226]],[[213149,561285],[-15,1450],[265,1806],[-308,1452],[-460,875]],[[232764,574597],[24,-6811]],[[232788,567786],[-2527,21]],[[230261,567807],[-1799,-6]],[[228462,567801],[14,367]],[[228476,568168],[71,2441],[-130,4068]],[[221924,571472],[-986,7],[-3,-6507],[100,-3249]],[[221035,561723],[-716,0]],[[220319,561723],[-359,7]],[[225197,574689],[73,-6488]],[[225270,568201],[-362,-8],[-2,-3234],[-287,1],[0,-1975]],[[224619,562985],[-263,25],[-571,2718],[-293,-1216],[-752,3114],[0,3841]],[[228476,568168],[-2123,27]],[[226353,568195],[-1083,6]],[[236062,561696],[6,-7465]],[[236068,554231],[0,-615],[-707,-32]],[[235361,553584],[-1430,50]],[[233931,553634],[-29,8560],[-224,1564],[125,1180],[-986,11]],[[232817,564949],[-29,2837]],[[233488,574623],[363,-5],[3,-3239],[2179,26]],[[188725,567028],[1,-2703]],[[188726,564325],[-1602,-42],[-179,1901],[-363,820],[-2337,28]],[[158090,569229],[27,-389]],[[158117,568840],[-233,-1009],[277,-1641],[-369,861],[-55,2156],[353,22]],[[157568,571941],[243,-1776],[-417,-307],[-219,-1059],[350,-339],[185,-3598],[45,1502],[415,-1154],[-2,-2382],[-642,2318],[-20,2344],[-434,1258],[298,3296],[198,-103]],[[156634,565779],[-60,-3687],[-1564,-7],[0,264],[-3066,-4]],[[151944,562345],[-337,5365],[202,2998],[-202,971]],[[151607,571679],[463,-265],[484,-1494],[396,-424],[748,-1863],[763,58],[868,-995],[776,701],[529,-1618]],[[224619,562985],[0,-1281]],[[224619,561704],[-2151,10]],[[222468,561714],[-1433,9]],[[193937,559705],[-803,-422],[-51,-3212],[-1027,-2365]],[[192056,553706],[-1187,-7]],[[190869,553699],[-361,552],[1,1469],[-266,4],[-517,1364],[204,1867],[-1205,-7]],[[188725,558948],[1,5377]],[[161672,560469],[-3555,-37]],[[158117,560432],[249,3191],[301,1598],[-407,1180],[-143,2439]],[[158090,569229],[58,869]],[[179823,560649],[58,-3498],[649,4],[-91,-2233],[238,251],[-154,-1949],[417,-649],[44,-4053]],[[180984,548522],[-292,-238],[-171,1188],[-551,1163],[-685,298]],[[179285,550933],[-478,836],[-38,1568],[-837,1677],[-963,-135]],[[176969,554879],[-354,1336],[183,799],[-95,1862],[-283,1075],[-625,4218]],[[245498,568091],[24,-13480]],[[245522,554611],[-1265,-6316],[-883,-3447]],[[243362,568344],[242,-1593],[425,-163],[-24,-1207],[886,751],[607,1959]],[[226353,568195],[59,-3242],[-1,-6490]],[[226411,558463],[-285,2]],[[226126,558465],[-1436,0]],[[224690,558465],[-71,3239]],[[228462,567801],[350,-5611],[344,-3679]],[[229156,558511],[-1603,-50]],[[227553,558461],[-1142,2]],[[230261,567807],[50,-3920]],[[230311,563887],[2,-2161],[360,-5],[2,-1615],[1435,5],[0,1629],[356,7],[-1,1624]],[[232465,563371],[355,-34]],[[232820,563337],[77,-8073]],[[232897,555264],[-1430,-21]],[[231467,555243],[-2182,14]],[[229285,555257],[-129,3254]],[[232817,564949],[3,-1612]],[[232465,563371],[-1,531],[-2153,-15]],[[209244,564495],[-2,-11147]],[[209242,553348],[-241,-806],[-805,9]],[[208196,552551],[-259,2],[1,3249],[-225,-5],[0,1619],[-1072,7],[1,1622],[-715,4],[0,1622]],[[205927,560671],[111,1440],[0,3677]],[[167625,563859],[-339,-5],[-301,-1380],[-1,-1619],[-240,-1347],[-120,-2159],[-533,-1577],[-2,-1607],[-955,-85],[-358,-2172],[-6,-1862]],[[164770,550046],[-243,784]],[[213149,561285],[0,-2790],[-1274,10],[2,-6436]],[[211877,552069],[-1581,12]],[[210296,552081],[-1055,15]],[[209241,552096],[1,1252]],[[156465,557234],[-1439,15],[0,-1663]],[[155026,555586],[-1512,9],[-857,298]],[[152657,555893],[-215,4015],[-498,2437]],[[156634,565779],[273,1293],[567,-4576],[-189,-396],[-251,-3033],[-105,2479],[-246,-3231],[-218,-1081]],[[188725,558948],[-718,-7],[0,-1612],[-713,3],[0,-1972],[-347,194]],[[186947,555554],[-644,-185],[-426,1863],[-409,506],[-656,-490],[-280,1681],[6,2406],[-203,2374]],[[205927,560671],[-357,-7],[-3,-4859],[-120,-3],[2,-6473]],[[205449,549329],[-1188,-10],[0,-1636],[-355,-3],[0,1641],[-354,-3]],[[203552,549318],[-232,0],[-1,3235],[-355,-6],[105,3251],[-2,6316],[-270,1],[-168,1658]],[[176969,554879],[-257,-1008],[473,-1408],[60,-942],[526,-680],[549,-2997],[263,-2458],[250,-686]],[[178833,544700],[-3820,28]],[[175013,544728],[0,1637]],[[175013,546365],[0,7286]],[[175013,553651],[19,8872]],[[182525,557117],[-825,-26],[-58,-2280],[224,-1574],[136,-3906],[-311,-808],[-707,-1]],[[173026,564143],[8,-11380]],[[173034,552763],[0,-1987]],[[173034,550776],[-2181,20]],[[170853,550796],[8,10516]],[[233931,553634],[40,-4845]],[[233971,548789],[-1065,-20]],[[232906,548769],[-9,6495]],[[175013,553651],[-715,16],[-120,-800],[-1144,-104]],[[203552,549318],[2,-5970]],[[203554,543348],[0,-266]],[[203554,543082],[-1766,-14],[-2,268],[-3263,-152]],[[198523,543184],[-142,489],[173,2154],[-209,2560],[-11,4245],[143,1707]],[[167650,563516],[-17,-12700]],[[167633,550816],[-9,-6518],[-1075,22],[-3,-3262]],[[166546,541058],[-233,-1081]],[[166313,539977],[-187,857],[-295,-1494],[-690,-306]],[[165141,539034],[-276,2022]],[[164865,541056],[127,1141],[-311,5065],[89,2784]],[[170853,550796],[-381,1]],[[170472,550797],[-2839,19]],[[186947,555554],[7,-6012],[711,-1191],[-2,-4005],[368,-11]],[[188031,544335],[35,-1328],[411,-1480]],[[188477,541527],[-392,-449],[14,-3150],[-430,-3]],[[187669,537925],[-672,2],[-784,-2757]],[[186213,535170],[46,3441],[-325,1748],[-347,-22],[-1,2529],[-723,-49],[-4,6432],[-731,40],[-1,5728],[-238,2034]],[[157723,558953],[152,-2103],[-263,244],[111,1859]],[[157679,553460],[-209,2]],[[157470,553462],[-20,-1]],[[157450,553461],[-465,10]],[[156985,553471],[3,2161],[-621,2]],[[156367,555634],[297,1874],[455,873],[193,2438],[440,2118],[103,-3144],[-199,149],[-132,-3407],[313,-1094],[-158,-1981]],[[239858,546441],[-2004,75]],[[237854,546516],[-6,4597],[-694,1379],[-255,2407],[-570,-1212],[-261,544]],[[218881,561727],[0,-3232],[-241,5],[-5,-6449]],[[218635,552051],[-211,-1],[0,-3173],[-602,-11]],[[217822,548866],[-251,2540],[-563,-513]],[[217008,550893],[-256,567],[-256,3108],[36,1844],[-852,-555],[-222,-665],[-1091,1453]],[[214367,556645],[-155,784],[-3,3078],[-346,-448]],[[224690,558465],[0,-1585]],[[224690,556880],[-2133,9]],[[222557,556889],[-89,4825]],[[222557,556889],[-2,-4848]],[[222555,552041],[-597,-4]],[[221958,552037],[-1539,4]],[[220419,552041],[1,6449],[-101,3233]],[[220419,552041],[-222,0]],[[220197,552041],[-1562,10]],[[214367,556645],[0,-4588],[170,0],[-1,-5915]],[[214536,546142],[-1061,-2],[0,-539],[-1412,-13]],[[212063,545588],[-1,6481],[-185,0]],[[197351,556810],[-6,-4998],[-770,-161],[-356,-670],[-49,-3204],[356,-6],[-61,-6487]],[[196465,541284],[-1055,22]],[[195410,541306],[-1057,8],[-1,-1068]],[[194352,540246],[-993,3]],[[193359,540249],[-236,2014],[209,1754],[-4,5386],[-1034,1610],[0,1620],[-238,1073]],[[208196,552551],[218,-2029],[102,-3785],[-297,-2572],[-534,-806]],[[207685,543359],[-1181,12],[-117,1073],[-355,1],[0,1079],[-356,1],[0,3802],[-227,2]],[[157999,553531],[-253,-1157],[151,3089],[102,-1932]],[[161687,557066],[-282,-523],[-596,-2846],[-98,-1164],[460,-3838],[-225,-1131]],[[160946,547564],[-1160,1608],[-293,-321]],[[159493,548851],[-540,718],[-133,1180],[-534,2],[-231,1165]],[[158055,551916],[258,528],[-269,4233],[225,530],[-269,1061],[117,2164]],[[190869,553699],[1,-1066],[-358,1],[-13,-4900],[354,-2],[-21,-5066]],[[190832,542666],[-725,2921],[-441,463],[-28,1539],[-216,-1426],[-1061,-216],[1,-1610],[-331,-2]],[[227553,558461],[-3,-6470],[62,-1591]],[[227612,550400],[-709,17]],[[226903,550417],[-711,10]],[[226192,550427],[-72,1593],[6,6445]],[[226192,550427],[-1411,-1]],[[224781,550426],[-88,1602]],[[224693,552028],[-3,4852]],[[229285,555257],[53,-4884]],[[229338,550373],[-1726,27]],[[156465,557234],[-98,-1600]],[[156985,553471],[-2,-837]],[[156983,552634],[-349,-1455],[-54,-1446],[-357,-1953]],[[156223,547780],[-354,-250]],[[155869,547530],[-801,-41],[-42,8097]],[[182993,557119],[1,-7838],[454,9],[0,-6466]],[[183448,542824],[-493,-548],[1,-1075],[-524,-539],[1,-1072],[-447,49]],[[181986,539639],[-1407,-5]],[[180579,539634],[-732,-499]],[[179847,539135],[-222,1916]],[[179625,541051],[352,195],[-48,4028],[320,550],[-90,1379],[-636,2137],[-238,1593]],[[186213,535170],[-690,-2887]],[[185523,532283],[-1333,17]],[[184190,532300],[-6,8737],[-214,-420],[-522,2207]],[[198523,543184],[180,-1780]],[[198703,541404],[-2238,-120]],[[164865,541056],[-1495,18],[1,1609],[-349,24],[-1,1604],[-1091,-12],[-177,1484],[-533,1821],[-274,-40]],[[224693,552028],[-2138,13]],[[217008,550893],[-1,-451],[-1411,-2],[0,-4839]],[[215596,545601],[-928,-4]],[[214668,545597],[-132,545]],[[155869,547530],[120,-1651],[-5,-3776]],[[155984,542103],[-587,-24]],[[155397,542079],[-2025,38]],[[153372,542117],[-110,2053],[253,-202],[623,1195],[-914,1191],[-230,4847],[-241,1362],[-96,3330]],[[232906,548769],[-1437,4]],[[231469,548773],[-2,6470]],[[231469,548773],[-356,-11]],[[231113,548762],[-1799,-4]],[[229314,548758],[24,1615]],[[179625,541051],[-761,2278],[-31,1371]],[[237854,546516],[-2,-4237]],[[237852,542279],[-1578,50],[42,-9604],[-40,-223]],[[236276,532502],[-231,1006],[-307,-538],[-332,854]],[[235406,533824],[-216,372]],[[235190,534196],[-133,486],[-22,7620]],[[235035,542302],[353,-11],[-27,11293]],[[310206,521389],[-674,-758]],[[309532,520631],[-1071,-1126],[-11,14936],[-1066,258]],[[307384,534699],[-8,3291],[-2505,26]],[[304871,538016],[-841,2]],[[304030,538018],[72,2263],[2153,14228],[505,-616],[6,-3382],[393,-1252],[815,1288],[76,747],[564,5],[41,1253],[358,12],[783,-2953],[455,-2410],[25,-20921],[-70,-4891]],[[193359,540249],[-620,1062],[-850,-749]],[[191889,540562],[-514,-598],[-543,2702]],[[175013,546365],[-1409,188],[-569,1764]],[[173035,548317],[-1,2459]],[[235035,542302],[-1048,14]],[[233987,542316],[-16,6473]],[[160946,547564],[-215,-3053],[-185,-928],[189,-1670]],[[160735,541913],[-845,11],[-206,-1040],[-1032,654]],[[158652,541538],[-352,1507],[-447,420],[-411,2054],[-166,2243]],[[157276,547762],[314,1630],[142,2452],[323,72]],[[157679,553460],[-93,-2779],[-243,609],[127,2172]],[[157450,553461],[-258,-1218],[-95,-3180],[-196,1415],[82,2156]],[[209241,552096],[0,-12823]],[[209241,539273],[-860,0],[-178,810],[-527,0]],[[207676,540083],[9,3276]],[[212063,545588],[-553,-13],[-2,-6518]],[[211508,539057],[-1052,-1]],[[210456,539056],[-1,6519],[-160,-2],[1,6508]],[[210456,539056],[-534,-4],[0,-1652],[-681,3]],[[209241,537403],[0,1870]],[[221958,552037],[-1,-6447],[97,4],[-9,-6501]],[[222045,539093],[-1299,23]],[[220746,539116],[-462,8]],[[220284,539124],[18,6480],[-110,4],[5,6433]],[[224781,550426],[0,-4857],[78,2],[0,-6489]],[[224859,539082],[-1664,-10]],[[223195,539072],[-1150,21]],[[220284,539124],[-1617,18]],[[218667,539142],[-333,973],[-96,2185],[-334,3330]],[[217904,545630],[153,619],[-235,2617]],[[217904,545630],[-2308,-29]],[[170472,550797],[5,-6432],[-150,-2317],[-550,-959]],[[169777,541089],[-3231,-31]],[[173035,548317],[0,-10901]],[[173035,537416],[-1,-2155]],[[173034,535261],[-435,-110],[-89,788]],[[172510,535939],[-70,1545],[-616,2886],[-769,-192],[-280,-1214]],[[170775,538964],[-894,-1263],[-120,595]],[[169761,538296],[16,2793]],[[226903,550417],[68,-4868],[-1,-6487]],[[226970,539062],[-981,13]],[[225989,539075],[-1130,7]],[[229314,548758],[6,-2652],[212,-1371],[-110,-2548],[10,-3117]],[[229432,539070],[-1342,-24]],[[228090,539046],[-1120,16]],[[158652,541538],[-2669,23],[1,542]],[[156223,547780],[371,1366],[-165,-1818],[270,11],[248,1911],[329,-1488]],[[207676,540083],[-352,-1344]],[[207324,538739],[-349,-4],[-351,-1338],[-710,7],[-585,557],[-127,1621],[-225,-2],[-117,3243],[-599,530],[-707,-5]],[[233987,542316],[-1,-1623]],[[233986,540693],[-2817,4]],[[231169,540697],[-56,8065]],[[231169,540697],[7,-1623],[-303,3]],[[230873,539077],[-1399,-8]],[[229474,539069],[-42,1]],[[175013,544728],[1,-5708],[-353,21]],[[174661,539041],[-461,-3],[-274,-1604],[-891,-18]],[[165141,539034],[20,-10944]],[[165161,528090],[-2024,0],[-2593,63]],[[160544,528153],[0,6416]],[[160544,534569],[359,11],[-157,2684],[251,3313],[-262,1336]],[[191889,540562],[-24,-9125]],[[191865,531437],[0,-675]],[[191865,530762],[-1399,153]],[[190466,530915],[-777,9]],[[189689,530924],[-178,1515],[195,2306],[-474,569],[-329,2182],[-426,4031]],[[239843,541603],[18,-6465]],[[239861,535138],[2,-4863]],[[239863,530275],[-1052,-76]],[[238811,530199],[4,1716],[-1019,-55]],[[237796,531860],[-43,6341],[94,109],[5,3969]],[[251183,535146],[2,-1610]],[[251185,533536],[-1045,-5],[1,3214],[-1046,-7],[1,1617],[-346,13],[-67,3221]],[[248683,541589],[281,995],[1035,453],[493,1189],[335,1615],[517,690]],[[251344,546531],[2,-4943],[190,-1609],[-348,15],[-5,-4848]],[[214668,545597],[3,-4901]],[[214671,540696],[-1,-1616]],[[214670,539080],[-2316,-18]],[[212354,539062],[-846,-5]],[[218667,539142],[262,-751],[-62,-3093]],[[218867,535298],[-369,-884],[-548,257],[-360,-2039]],[[217590,532632],[0,1615],[-698,1],[0,4816],[-1166,16],[-1,1620],[-1054,-4]],[[253820,544308],[0,-2728],[148,-1606],[-346,-13],[-2,-4817]],[[253620,535144],[-1568,10]],[[252052,535154],[1,8035],[354,0],[-1,1615],[281,8]],[[252687,544812],[-46,-3487],[634,3347],[545,-364]],[[179847,539135],[-2885,-2989],[-517,-3856],[-988,1959]],[[175457,534249],[-555,1774]],[[174902,536023],[-222,561],[-19,2457]],[[207324,538739],[0,-2429],[-481,-1],[56,-6431]],[[206899,529878],[-149,-3],[0,-6510],[-119,1]],[[206631,523366],[-3371,30]],[[203260,523396],[2,6487],[106,4],[-6,6446],[97,2],[-1,6474],[96,273]],[[203260,523396],[-118,-5],[-3,-8127],[-123,-27],[0,-3173]],[[203016,512064],[-1361,-4],[-1,3224],[108,-22],[0,5983],[-512,206],[100,2748],[-171,715]],[[201179,524914],[0,4963],[-191,-49],[-58,4866],[-348,2],[-60,1616],[-1571,-11]],[[198951,536301],[-119,265]],[[198832,536566],[-129,4838]],[[184190,532300],[-1,-814],[-687,-6],[15,-3299],[-666,-1967]],[[182851,526214],[-255,180],[-220,1599],[-323,48],[141,1392],[-197,1673],[207,1275],[-352,4420],[134,2838]],[[235190,534196],[-1183,4]],[[234007,534200],[-21,6493]],[[237796,531860],[-40,-1612]],[[237756,530248],[-1572,8],[92,2246]],[[155397,542079],[36,-7597]],[[155433,534482],[-1024,26],[-6,-1764]],[[154403,532744],[-413,-941],[-401,1402],[-173,-855],[164,5828],[40,-3886],[154,66],[163,3197],[-178,1201],[335,1945],[-445,-237],[-277,1653]],[[160544,534569],[-1998,-62]],[[158546,534507],[-2722,-5]],[[155824,534502],[-391,-20]],[[189689,530924],[-790,-90],[-193,-3456],[-681,-3145]],[[188025,524233],[-2,4020],[-344,10],[-10,9662]],[[241986,539680],[-2,-4580]],[[241984,535100],[-2123,38]],[[251185,533536],[-1,-4392]],[[251184,529144],[-281,766],[-2333,3002]],[[248570,532912],[1,-217]],[[248571,532695],[-1,217]],[[248570,532912],[-533,692],[-150,1914]],[[247887,535518],[-158,1305]],[[247729,536823],[-232,120]],[[247497,536943],[-117,450]],[[247380,537393],[-170,465]],[[247210,537858],[1092,2058],[381,1673]],[[198832,536566],[-2,-1875],[-409,1],[-280,-2448],[-812,5],[-234,-521],[0,-1926],[-1045,-3]],[[196050,529799],[2,2685],[-229,1641],[-121,3955],[-233,23],[-59,3203]],[[261640,541399],[0,-9499]],[[261640,531900],[-1747,-14]],[[259893,531886],[0,4842]],[[259893,536728],[1,3448]],[[259894,540176],[1066,-173],[680,1396]],[[196050,529799],[-402,-5]],[[195648,529794],[-1369,1],[-6,-1634]],[[194273,528161],[-522,16],[-137,3239]],[[193614,531416],[699,2],[39,8828]],[[193614,531416],[-1749,21]],[[169761,538296],[-37,88]],[[169724,538384],[-623,62],[-454,-1721],[-56,-1735],[-390,-2246],[-741,-1821]],[[167460,530923],[-633,1584],[-9,4567],[-505,2903]],[[167460,530923],[206,-1170],[-54,-2423]],[[167612,527330],[-388,-1247],[-851,-272]],[[166373,525811],[-390,134],[-275,-1277],[-551,-390]],[[165157,524278],[4,3812]],[[234007,534200],[29,-4880]],[[234036,529320],[-1739,14]],[[232297,529334],[-1380,20]],[[230917,529354],[-44,9723]],[[217590,532632],[-397,-2552],[-436,-1343],[-920,-1191],[-478,1151],[-416,-370]],[[214943,528327],[1,2829]],[[214944,531156],[-135,1457],[-12,6465],[-127,2]],[[172510,535939],[0,-949],[-531,-522],[0,-4866],[-168,2],[-1,-2312]],[[171810,527292],[-342,20]],[[171468,527312],[-26,6322],[-175,-16],[-173,2490],[-351,-8],[32,2864]],[[209241,537403],[-2,-4854]],[[209239,532549],[2,-6235]],[[209241,526314],[3,-1180]],[[209244,525134],[-252,2],[0,1618],[-714,26],[2,1575],[-351,-6],[0,1522],[-1030,7]],[[180579,539634],[-29,-2628],[-262,-4539],[-67,-3326],[-131,-1223],[266,-995],[5,-2349],[-249,-34],[-187,-1420],[189,-1949],[-181,-2072]],[[179933,519099],[-282,-1616],[-344,766],[-14,-1410],[527,-2617],[-250,-1838]],[[179570,512384],[-3571,-27],[-470,-1640]],[[175529,510717],[-390,422],[-163,2564],[-956,-4]],[[174020,513699],[362,4439],[258,2019],[-236,2563],[-686,1930]],[[173718,524650],[258,2608]],[[173976,527258],[446,46],[76,2435],[240,1363],[665,-892],[157,1127],[335,203],[-438,2709]],[[182851,526214],[3,-24]],[[182854,526190],[-34,-1070],[-471,-700],[-670,-2752]],[[181679,521668],[-944,-3979],[-194,-400],[-349,1946],[-259,-136]],[[220746,539116],[-2,-6512],[105,-7]],[[220849,532597],[-3,-6355]],[[220846,526242],[-1761,43]],[[219085,526285],[-327,3734],[198,1955],[-89,3324]],[[223195,539072],[-2,-6466]],[[223193,532606],[-2344,-9]],[[174902,536023],[1,-2306],[-958,-326],[31,-6133]],[[173718,524650],[-339,2599]],[[173379,527249],[-122,1925],[104,1310],[-372,3279],[45,1498]],[[212354,539062],[9,-6489]],[[212363,532573],[-197,-14]],[[212166,532559],[-2927,-10]],[[225989,539075],[-2,-6478]],[[225987,532597],[-2698,1]],[[223289,532598],[-96,8]],[[214944,531156],[-1391,13],[0,1436],[-1190,-32]],[[230917,529354],[-1,-1621]],[[230916,527733],[-866,4]],[[230050,527737],[45,1766],[-114,3993],[-380,2928],[-127,2645]],[[228090,539046],[-2,-6457]],[[228088,532589],[-2023,4]],[[226065,532593],[-78,4]],[[230050,527737],[35,-1611]],[[230085,526126],[-1852,-1]],[[228233,526125],[-87,1154],[-58,5310]],[[171468,527312],[-1045,34]],[[170423,527346],[-53,1]],[[170370,527347],[16,3854],[-350,1],[2,1631],[-349,-8],[35,5559]],[[170370,527347],[-2758,-17]],[[247207,537862],[3,-4]],[[248571,532695],[0,-5698],[-321,-1]],[[248250,526996],[-719,-11]],[[247531,526985],[-3,3230],[-343,-15],[1,1609],[-352,7],[6,6374]],[[246840,538190],[367,-328]],[[304871,538016],[-24,-11134],[233,-2084],[-240,-2015],[-258,-234],[344,-2135],[-221,-1593],[445,-9902],[739,1165]],[[305889,510084],[248,-6545]],[[306137,503539],[-330,592],[-241,-1132]],[[305566,502999],[-450,139],[79,-2294],[-907,625]],[[304288,501469],[-183,1244],[-102,3478],[-276,-236],[62,1778],[-139,3374],[-376,-344],[-347,651],[-372,9721]],[[302555,521135],[466,1247],[-87,1101],[431,1781],[-152,2424],[219,2371],[-153,838],[286,2948],[372,1242],[93,2931]],[[307384,534699],[-16,-13241],[-374,-415],[-14,-2790],[297,274],[227,-5338],[-292,-284],[68,-1531],[-1391,-1290]],[[188025,524233],[-403,-667]],[[187622,523566],[-350,1101],[-490,-286],[-233,-1732]],[[186549,522649],[-588,1549],[-293,6520],[-198,-55]],[[185470,530663],[53,1620]],[[259893,531886],[-1,-5144]],[[259892,526742],[-133,-900],[-413,823],[-698,-828],[-156,-2487],[-258,-538]],[[258234,522812],[-83,2590],[0,4873],[-349,11]],[[257802,530286],[0,3251],[697,-26],[0,3238],[1394,-21]],[[198951,536301],[351,-3235],[408,-2428],[-126,-2500]],[[199584,528138],[-454,7],[0,-1079],[-345,0],[-233,-1614],[-461,6],[-62,-7075],[-689,-1094],[-914,66]],[[196426,517355],[-551,2736]],[[195875,520091],[-174,1330],[10,5159],[-63,3214]],[[201179,524914],[-661,1614],[-693,2],[0,1610],[-241,-2]],[[173379,527249],[-1569,43]],[[219085,526285],[-4142,17]],[[214943,526302],[0,2025]],[[253620,535144],[-3,-3220]],[[253617,531924],[2,-6051]],[[253619,525873],[-776,1095]],[[252843,526968],[-385,757],[-418,-132]],[[252040,527593],[-694,1110]],[[251346,528703],[-162,441]],[[251183,535146],[869,8]],[[241984,535100],[-2,-4840]],[[241982,530260],[-158,-2623],[-854,-1719]],[[240970,525918],[-513,-3612]],[[240457,522306],[-838,12]],[[239619,522318],[-5,4660],[247,5],[2,3292]],[[309532,520631],[304,-6938],[-325,-226]],[[309511,513467],[-690,-626],[93,-2259],[-353,-313],[61,-1593],[-355,-304],[157,-4050],[-1023,-1483]],[[307401,502839],[-7,-12]],[[307394,502827],[-61,341],[-964,-1079],[-232,1450]],[[160544,528153],[-247,-4],[10,-4864],[241,-1079]],[[160548,522206],[-796,-345],[-318,-1062]],[[159434,520799],[-910,-1886]],[[158524,518913],[9,9424]],[[158533,528337],[13,6170]],[[158533,528337],[-318,-1795],[-454,494],[-602,-1308],[-130,-1178]],[[157029,524550],[-330,4339],[-600,1896],[-259,-235]],[[155840,530550],[-2,54]],[[155838,530604],[-14,3898]],[[155838,530604],[-183,-462],[-495,2189],[-757,413]],[[235406,533824],[28,-10701]],[[235434,523123],[-1381,-10]],[[234053,523113],[-17,6207]],[[237756,530248],[0,-3231],[116,-9],[14,-2987]],[[237886,524021],[-1641,-2],[226,-872]],[[236471,523147],[-1037,-24]],[[251026,525384],[-2773,33]],[[248253,525417],[-3,1579]],[[251346,528703],[-2,-1704],[-318,2],[0,-1617]],[[155418,529962],[8,-6731]],[[155426,523231],[-1689,63]],[[153737,523294],[-68,3037],[184,1180],[-262,4093],[309,-882],[393,425],[493,-351],[259,901],[373,-1735]],[[214943,526302],[-5,-2]],[[214938,526300],[-2623,9]],[[212315,526309],[-150,2]],[[212165,526311],[1,6248]],[[228233,526125],[-2090,12]],[[226143,526137],[-83,1]],[[226060,526138],[5,6455]],[[223289,532598],[-7,-6387]],[[223282,526211],[-1986,21]],[[221296,526232],[-450,10]],[[226060,526138],[-1995,52]],[[224065,526190],[-783,21]],[[212165,526311],[-2924,3]],[[185470,530663],[-558,-802],[1,-1628],[-449,-1027],[40,-1093],[-451,-1375]],[[184053,524738],[-389,163],[-476,-1895],[-334,3184]],[[255011,527072],[0,-1623],[-222,0],[-2,-3274],[-416,-8]],[[254371,522167],[-587,1081]],[[253784,523248],[-213,794],[48,1831]],[[253617,531924],[1399,-8],[-5,-4844]],[[238811,530199],[-2,-3213],[-238,7],[11,-4605]],[[238582,522388],[9,-3269]],[[238591,519119],[-694,16]],[[237897,519135],[-11,4886]],[[194273,528161],[-16,-1570],[-232,-20],[-119,-1641],[-35,-4874],[-1029,-1611],[-3,-3241],[-365,3],[-1,-3287]],[[192473,511920],[-459,14],[21,11394],[-200,2],[30,7432]],[[190466,530915],[-30,-11211],[-346,-1209],[4,-3242],[-336,0],[-17,-6512]],[[189741,508741],[-32,-6238]],[[189709,502503],[19,-3579]],[[189728,498924],[-493,1905],[18,850],[-441,2415]],[[188812,504094],[13,11149],[64,-1],[-3,5424],[-518,4],[-341,1882],[-405,1014]],[[192473,511920],[739,-89]],[[193212,511831],[-1,-3075]],[[193211,508756],[-2525,-184],[-945,169]],[[186549,522649],[-756,-104],[-628,-2190]],[[185165,520355],[-202,2288],[-910,2095]],[[157029,524550],[63,-2277]],[[157092,522273],[-463,-110]],[[156629,522163],[-284,1059],[-919,9]],[[155418,529962],[422,588]],[[239619,522318],[-1037,70]],[[242661,530268],[51,-9640]],[[242712,520628],[-343,-3]],[[242369,520625],[1,1598],[-1042,59],[-2,-1612],[-997,38]],[[240329,520708],[128,1598]],[[241982,530260],[679,8]],[[245796,530213],[-1,-3233],[691,9]],[[246486,526989],[-5,-6392]],[[246481,520597],[-2401,-12]],[[244080,520585],[-30,9671]],[[244050,530256],[1746,-43]],[[244080,520585],[-1368,43]],[[242661,530268],[1389,-12]],[[209244,525134],[12,-12455]],[[209256,512679],[-50,-4012]],[[209206,508667],[-2732,55]],[[206474,508722],[1,6547],[142,-1],[14,8098]],[[195875,520091],[-795,-463],[-177,-2270],[-459,3],[-573,-1888],[-130,-1894],[-228,1],[-3,-1752],[-298,3]],[[232297,529334],[32,-6470]],[[232329,522864],[-1381,-3]],[[230948,522861],[-32,4872]],[[234053,523113],[0,-269]],[[234053,522844],[-1724,20]],[[252040,527593],[20,-5420],[700,-8]],[[252760,522165],[-8,-6432]],[[252752,515733],[-696,32]],[[252056,515765],[-692,-1],[9,1610],[-345,-7]],[[251028,517367],[-2,8017]],[[158524,518913],[-1068,1088],[-329,768],[-35,1504]],[[165157,524278],[-366,-437]],[[164791,523841],[-600,-1643],[-745,-544],[-478,786]],[[162968,522440],[-730,-1784]],[[162238,520656],[-782,-457],[-46,928],[-635,569]],[[160775,521696],[-227,510]],[[203016,512064],[45,-3465]],[[203061,508599],[-4592,141]],[[198469,508740],[-941,-34]],[[197528,508706],[337,4066],[-1591,0],[48,4006],[104,577]],[[230948,522861],[3,-3246]],[[230951,519615],[-1623,13]],[[229328,519628],[-7,1157],[513,1813],[251,3528]],[[253784,523248],[-5,-1258],[-1019,175]],[[170423,527346],[14,-2610]],[[170437,524736],[-401,-3204],[0,-4052],[-226,-813],[-642,33],[1,-1372],[-752,-187],[118,-2760],[304,1],[77,-3742]],[[168916,508640],[-1798,-1]],[[167118,508639],[49,1621],[4,8063],[-288,1],[0,1596],[-518,16],[8,5875]],[[174020,513699],[-270,-3512]],[[173750,510187],[-1345,32]],[[172405,510219],[-2,1583],[-584,-9],[-295,3221],[-171,-21],[-111,3312],[-289,3248],[113,3191],[-629,-8]],[[255706,527058],[117,-1614],[-5,-6481],[175,-7]],[[255993,518956],[-481,-4769],[-453,-2674],[26,-1006]],[[255085,510507],[-74,93]],[[255011,510600],[-348,1798],[263,2651],[-666,243],[263,2751],[-117,1110],[148,2102],[-183,912]],[[255011,527072],[695,-14]],[[248253,525417],[-2,-6367]],[[248251,519050],[4,-3225]],[[248255,515825],[-1774,-77]],[[246481,515748],[0,4849]],[[246486,526989],[1045,-4]],[[214938,526300],[2,-8789]],[[214940,517511],[-1,-8089]],[[214939,509422],[-2667,29]],[[212272,509451],[0,3227]],[[212272,512678],[43,13631]],[[219085,526285],[420,-1613],[146,-2779],[-339,-2104]],[[219312,519789],[-135,-1298],[382,-971]],[[219559,517520],[-3145,-9]],[[216414,517511],[-1474,0]],[[212272,512678],[-3016,1]],[[221296,526232],[3,-6469]],[[221299,519763],[-1987,26]],[[185165,520355],[-3,-2744],[506,-650],[135,-1730],[3,-4866],[343,-1],[-3,-1637],[400,-13],[67,-3224],[282,-801],[790,-48],[2,-1347],[860,8]],[[188547,503302],[-99,-3225],[-305,274]],[[188143,500351],[-567,-772],[-129,1024],[-637,-765],[-533,835],[-280,-2222],[-238,584],[-857,90],[-96,-2021]],[[184806,497104],[-526,1386],[-10,1397],[-348,4611],[-316,914],[-262,-706],[-323,1502],[13,3600],[-287,1010],[-383,2793],[-233,2701],[-86,3613],[-272,361],[-94,1382]],[[224065,526190],[-1,-6467]],[[224064,519723],[-2739,40]],[[221325,519763],[-26,0]],[[226143,526137],[-2,-6467]],[[226141,519670],[-6,-6480]],[[226135,513190],[-2051,63]],[[224084,513253],[-13,1]],[[224071,513254],[-7,6469]],[[229328,519628],[389,-3087],[628,-1746]],[[230345,514795],[-1456,6],[-40,-559],[-610,15]],[[228239,514257],[-2,4850]],[[228237,519107],[-4,7018]],[[228237,519107],[-408,548],[-1688,15]],[[167118,508639],[-1414,-28]],[[165704,508611],[-332,4],[2,1361]],[[165374,509976],[84,1859],[-342,39],[1,1607],[-347,28],[21,10332]],[[251028,517367],[-1054,48]],[[249974,517415],[-9,1640],[-1714,-5]],[[172405,510219],[-826,-23],[-2,-1616],[-596,-10],[-301,1240],[-304,-1200],[-378,943],[-318,-1615]],[[169680,507938],[-764,702]],[[188812,504094],[-265,-792]],[[237897,519135],[-1085,-11]],[[236812,519124],[-341,4023]],[[165374,509976],[-1964,15]],[[163410,509991],[-24,269]],[[163386,510260],[-111,2406],[145,4765],[366,767],[-140,1600],[-678,2642]],[[206474,508722],[-142,2]],[[206332,508724],[-2606,-129]],[[203726,508595],[-665,4]],[[264518,520373],[-131,-4],[15,-7954]],[[264402,512415],[-335,1]],[[264067,512416],[-1024,59]],[[263043,512475],[5,1628]],[[263048,514103],[0,9277]],[[263048,523380],[752,-2508],[718,-499]],[[155426,523231],[0,-1322],[-345,8],[171,-1358],[345,-537],[-450,-2154],[-12,-1076]],[[155135,516792],[6,-4051],[-896,-4],[0,-2601],[169,-5]],[[154414,510131],[-4,-597]],[[154410,509534],[-766,17]],[[153644,509551],[191,6727],[-98,7016]],[[156629,522163],[0,-1647],[515,-2132],[1,-1597]],[[157145,516787],[-1,-1893],[-346,-271]],[[156798,514623],[-744,2159],[-919,10]],[[236812,519124],[284,-2536]],[[237096,516588],[-222,-1934],[-374,-651]],[[236500,514003],[-341,795],[-1058,-11]],[[235101,514787],[1,1614],[-1027,-8]],[[234075,516393],[-22,6451]],[[232329,522864],[30,-6471]],[[232359,516393],[-1030,-8]],[[231329,516385],[-347,13],[-31,3217]],[[234075,516393],[-344,3]],[[233731,516396],[-1372,-3]],[[163386,510260],[-629,17],[17,874],[-376,1203],[-462,444],[26,1607],[414,1539],[112,2268],[-250,2444]],[[239619,522318],[0,-3212],[333,-17],[8,-2705]],[[239960,516384],[-1367,53]],[[238593,516437],[-2,2682]],[[240329,520708],[8,-1270],[308,-144],[354,-2360],[-276,-2707]],[[240723,514227],[-762,15]],[[239961,514242],[-1,2142]],[[242369,520625],[-6,-8009]],[[242363,512616],[-1675,1]],[[240688,512617],[35,1610]],[[159434,520799],[0,-1905],[284,-1586]],[[159718,517308],[-2288,-7],[-285,-514]],[[160775,521696],[0,-3313],[-116,6],[3,-4865],[-600,-5]],[[160062,513519],[3,2149],[-347,1640]],[[163410,509991],[119,-3799],[225,-798]],[[163754,505394],[-3866,76]],[[159888,505470],[69,1165]],[[159957,506635],[-196,2311],[405,1008],[-239,2616],[135,949]],[[184806,497104],[3,-2717],[-506,66]],[[184303,494453],[-906,-18]],[[183397,494435],[-56,1597],[-348,2544],[-106,-614],[-845,1225],[-633,3398],[-141,1578],[-365,-189],[52,2183],[-181,-234],[-402,-2430],[55,-905],[-491,-1771],[-716,3192],[20,1138]],[[179240,505147],[217,1310],[9,5102],[104,825]],[[309697,499440],[-326,8144],[343,307],[-203,5576]],[[310206,521389],[551,-1389],[510,-516],[-213,-1647],[200,-1810],[-163,-2048],[408,-2916],[145,1141],[349,-534],[352,-3817],[161,-2744],[-592,-2997],[-880,-140],[-164,-1985],[-252,636],[-149,-1354],[-202,2089],[-181,-786],[-141,-3116],[-248,1984]],[[304288,501469],[-305,-404],[-9,-1934],[-241,39]],[[303733,499170],[-304,-527]],[[303429,498643],[-117,2061],[-640,1070],[-291,3135],[-430,-1180],[-152,5251],[122,80],[-151,4819]],[[301770,513879],[26,2283],[518,-340],[-235,2392],[476,2921]],[[266792,512571],[-1372,-94]],[[265420,512477],[-1018,-62]],[[264518,520373],[261,-2225],[563,-388],[377,-1459],[555,-1119],[218,171],[319,-1624],[-19,-1158]],[[244080,520585],[-2,-6434]],[[244078,514151],[-2,-1590],[-344,26]],[[243732,512587],[-1369,29]],[[246481,515748],[-686,31],[0,-1629]],[[245795,514150],[-1717,1]],[[197528,508706],[-1036,15]],[[196492,508721],[-3281,35]],[[221325,519763],[-3,-6470]],[[221322,513293],[-1536,18]],[[219786,513311],[-158,1348],[120,1153],[-189,1708]],[[224071,513254],[-2371,30]],[[221700,513284],[-378,9]],[[228239,514257],[0,-2714]],[[228239,511543],[-746,-4]],[[227493,511539],[-1359,31]],[[226134,511570],[1,1620]],[[231329,516385],[38,-4380]],[[231367,512005],[-336,821]],[[231031,512826],[-637,896]],[[230394,513722],[-49,1073]],[[238593,516437],[-6,-3147]],[[238587,513290],[-26,17]],[[238561,513307],[-163,843],[-522,101],[-780,2337]],[[249974,517415],[-2,-6482]],[[249972,510933],[-1721,20]],[[248251,510953],[4,4872]],[[219786,513311],[-178,-2703],[123,-1550],[-312,142],[-35,-2389]],[[219384,506811],[-387,-2543],[-370,1156],[-115,-974]],[[218512,504450],[-583,57],[-208,-834],[-377,334]],[[217344,504007],[2,4597],[-1015,-5],[83,8912]],[[217344,504007],[-269,-1030],[-621,-1015],[-210,-1237],[-503,175],[-264,-1035],[-539,-243]],[[214938,499622],[1,9800]],[[252056,515765],[-7,-3234],[109,-1632]],[[252158,510899],[-950,13],[2,-1661]],[[251210,509251],[-675,9]],[[250535,509260],[-1,1662],[-562,11]],[[159957,506635],[-1846,-55],[-387,968],[-169,1538],[-534,2059],[129,2390],[-300,15]],[[156850,513550],[-52,1073]],[[156850,513550],[-43,-124]],[[156807,513426],[-486,-577],[117,-1993],[-201,-742]],[[156237,510114],[-1823,17]],[[238561,513307],[-382,-977],[-277,-2080],[-23,-1945]],[[237879,508305],[-685,14]],[[237194,508319],[-679,14]],[[236515,508333],[-15,5670]],[[239961,514242],[-4,-3220]],[[239957,511022],[-577,12],[2,-1654]],[[239382,509380],[-216,1965],[-579,1945]],[[235101,514787],[15,-8081]],[[235116,506706],[-1367,-14]],[[233749,506692],[6,4861]],[[233755,511553],[-24,4843]],[[233755,511553],[-2201,-4]],[[231554,511549],[-187,456]],[[248251,510953],[-430,7],[0,-1618],[-327,3]],[[247494,509345],[-1694,-51]],[[245800,509294],[-5,4856]],[[252752,515733],[340,-44],[-9,-3220],[342,-69],[182,-3245],[999,-1069]],[[254606,508086],[-385,-2583],[-242,-2789]],[[253979,502714],[-8,-1]],[[253971,502713],[-10,-1]],[[253961,502712],[-693,38]],[[253268,502750],[-16,3221],[-670,52]],[[252582,506023],[14,4857],[-438,19]],[[303429,498643],[-266,-4622],[-406,-3326]],[[302757,490695],[-370,576],[-32,2012],[-647,-2107],[393,-1789],[-189,-2754]],[[301912,486633],[-573,-426]],[[301339,486207],[0,-16]],[[301339,486207],[-59,9193]],[[301280,495400],[-86,9641],[-121,9365]],[[301073,514406],[217,752],[480,-1279]],[[230394,513722],[3,-5426]],[[230397,508296],[-1199,-12]],[[229198,508284],[-5,3228],[-954,31]],[[236515,508333],[-686,5],[-1,-1627]],[[235828,506711],[-712,-5]],[[301280,495400],[-90,-875],[-585,121],[-254,-2830],[-201,2230]],[[300150,494046],[-446,795],[-524,2812]],[[299180,497653],[520,1849],[112,1480],[-264,3054],[383,3039],[-19,1891]],[[299912,508966],[388,4730],[214,623],[386,-1123],[173,1210]],[[240688,512617],[-96,-2433],[64,-4037]],[[240656,506147],[-95,-2137]],[[240561,504010],[-562,444],[-38,2207]],[[239961,506661],[97,22],[-1,4337],[-100,2]],[[245800,509294],[3,-3236]],[[245803,506058],[-2030,-24]],[[243773,506034],[-41,6553]],[[159888,505470],[-167,-669],[70,-1970]],[[159791,502831],[-1153,206],[-234,1076],[-631,10],[-781,720],[-578,-1960],[-382,1172]],[[156032,504055],[-98,1557],[388,2208],[-85,2294]],[[175529,510717],[154,-826],[-340,-5246],[151,-1455],[0,-3805]],[[175494,499385],[-398,-1021]],[[175096,498364],[-634,868],[-4,2312],[-267,893],[0,3275],[-765,34]],[[173426,505746],[189,1739],[-44,1635],[179,1067]],[[231554,511549],[662,-3749],[173,-272]],[[232389,507528],[-309,-828],[-3,-1608],[-1680,19]],[[230397,505111],[0,3185]],[[307819,495119],[63,-2040],[-255,1149],[192,891]],[[308823,498239],[322,-1210],[-422,-2791],[-256,1682],[356,2319]],[[309697,499440],[-194,-3153],[-121,2654],[-613,1160],[154,-1192],[-465,-1333],[31,1761],[-402,-1706],[118,-3275],[-828,3345],[180,1911],[-237,2132],[81,1095]],[[221700,513284],[1,-6478]],[[221701,506806],[-279,1]],[[221422,506807],[-2038,4]],[[224084,513253],[3,-6454]],[[224087,506799],[-1659,3]],[[222428,506802],[-727,4]],[[239382,509380],[134,-2743]],[[239516,506637],[-427,-1841]],[[239089,504796],[-534,227]],[[238555,505023],[9,1658],[-687,3],[2,1621]],[[226134,511570],[12,-9713]],[[226146,501857],[-2029,49]],[[224117,501906],[-30,4893]],[[179240,505147],[-395,-1629],[-367,938],[-230,-2310],[-308,-655],[142,-3509],[-185,-1566]],[[177897,496416],[-297,-1464],[-332,-476],[-1622,25],[-30,-1653],[-277,66]],[[175339,492914],[2,3219],[164,2],[-11,3250]],[[212272,509451],[-19,-8102],[-1681,-4]],[[210572,501345],[-701,13],[-661,-630]],[[209210,500728],[-4,7939]],[[242363,512616],[57,-6548]],[[242420,506068],[-1764,79]],[[243773,506034],[0,-3210]],[[243773,502824],[-1350,15]],[[242423,502839],[-3,3229]],[[262700,510887],[28,-4815]],[[262728,506072],[-1240,27],[-113,-876]],[[261375,505223],[-305,883]],[[261070,506106],[220,4694],[-69,1784]],[[261221,512584],[458,-42],[1,-1633],[1020,-22]],[[264067,512416],[-14,-6399]],[[264053,506017],[-1325,55]],[[262700,510887],[342,-32],[1,1620]],[[265420,512477],[-20,-6431]],[[265400,506046],[-1347,-29]],[[227493,511539],[8,-6473]],[[227501,505066],[-4,-4842]],[[227497,500224],[-1004,10]],[[226493,500234],[-9,1613],[-338,10]],[[229198,508284],[-7,-3209]],[[229191,505075],[-1690,-9]],[[233749,506692],[-652,-11],[0,-2565]],[[233097,504116],[-708,3412]],[[239961,506661],[-445,-24]],[[250535,509260],[0,-6476]],[[250535,502784],[-1731,65]],[[248804,502849],[-1313,5]],[[247491,502854],[3,6491]],[[252582,506023],[-689,18],[2,1616],[-685,-6],[0,1600]],[[173426,505746],[-385,-1718],[-296,-3771],[-219,-1145],[9,-3403]],[[172535,495709],[-741,0],[0,1607],[-294,1057],[-1059,-21],[-726,-3486]],[[169715,494866],[-738,-18],[245,2192],[-29,1556],[314,2473],[-552,1434],[612,1573],[-29,2092],[142,1770]],[[156032,504055],[-16,-548]],[[156016,503507],[-1264,17]],[[154752,503524],[-340,334],[-2,5676]],[[165704,508611],[55,-3187],[-11,-9610]],[[165748,495814],[-676,-6],[-1,1543],[-342,912],[-1014,-19],[1,2354]],[[163716,500598],[38,4796]],[[154752,503524],[16,-5366],[-345,3],[16,-1350],[-284,-293],[116,-1140]],[[154271,495378],[-947,-137]],[[153324,495241],[89,2631],[44,7616],[170,1569],[17,2494]],[[214938,499622],[-3,-12]],[[214935,499610],[-311,-1407],[-474,240],[-222,-2776],[-71,-2959],[-2964,12]],[[210893,492720],[-2,2156],[-338,-10],[19,6479]],[[247491,502854],[1,-4850]],[[247492,498004],[-1354,-31],[0,1610],[-337,6],[2,1612]],[[245803,501201],[0,4857]],[[253268,502750],[-7,-1765]],[[253261,500985],[-1005,107]],[[252256,501092],[2,1635],[-1723,57]],[[296979,508865],[60,-3257],[-127,-958]],[[296912,504650],[-471,86],[-134,-1750],[-359,-1102]],[[295948,501884],[-849,1672]],[[295099,503556],[103,5410]],[[295202,508966],[1777,-101]],[[299180,497653],[-205,-1076]],[[298975,496577],[-266,1736],[213,1023],[-144,948],[183,1193],[-188,668],[204,1295],[-286,977]],[[298691,504417],[181,2000],[-64,2446]],[[298808,508863],[1104,103]],[[295099,503556],[-145,-2596],[-226,-366]],[[294728,500594],[-75,974],[149,3512],[-119,604],[97,3231]],[[294780,508915],[422,51]],[[294728,500594],[65,-315]],[[294793,500279],[-930,-2003],[-662,-178]],[[293201,498098],[-213,5176],[-115,5362]],[[292873,508636],[1907,279]],[[298691,504417],[-203,-1307],[-284,945],[-413,-3859],[-312,777]],[[297479,500973],[-299,925],[174,1659],[-442,1093]],[[296979,508865],[1829,-2]],[[196492,508721],[81,-2400],[-1,-6524],[53,-2],[-1,-6560],[65,0]],[[196689,493235],[-1,-1658]],[[196688,491577],[-673,4],[0,-1650],[-344,-3],[9,-1603],[-502,-5],[2,-1644],[-615,-55]],[[194565,486621],[-361,2183],[-278,575],[-278,-718],[-65,-1424],[-340,-839],[-198,2909],[-378,-147],[-165,1088]],[[192502,490248],[0,2320],[-270,2958],[-406,2562],[50,1661],[-272,1204],[-814,-4],[0,1554],[-1081,0]],[[290927,508615],[234,-781],[324,-14558],[-26,-1329]],[[291459,491947],[-889,-543]],[[290570,491404],[-581,-367],[-299,867]],[[289690,491904],[-769,2247]],[[288921,494151],[-1154,3457]],[[287767,497608],[260,2084],[1343,6200],[870,2516],[687,207]],[[198469,508740],[221,-3931],[453,-2060],[152,402],[684,-2631]],[[199979,500520],[185,-1795],[287,-397],[154,-2198],[-5,-2947]],[[200600,493183],[-3911,52]],[[206332,508724],[28,-15346]],[[206360,493378],[-1,-12616]],[[206359,480762],[-2612,-66]],[[203747,480696],[21,19902]],[[203768,500598],[-42,7997]],[[203768,500598],[-1168,-134],[-2621,56]],[[293201,498098],[-645,-417],[133,-5014],[-525,-324]],[[292164,492343],[-705,-396]],[[290927,508615],[1946,21]],[[209210,500728],[5,-7271]],[[209215,493457],[-2855,-79]],[[169715,494866],[13,-4024]],[[169728,490842],[-1637,145],[-4,-1633],[-2343,-17]],[[165744,489337],[4,6477]],[[237194,508319],[5,-4865]],[[237199,503454],[-679,9],[-2,-1632],[-677,-6],[-1,1627]],[[235840,503452],[-12,3259]],[[238555,505023],[-264,-1740],[-417,-1264]],[[237874,502019],[-336,1431],[-339,4]],[[230397,505111],[0,-3258]],[[230397,501853],[0,-1635]],[[230397,500218],[-1208,4]],[[229189,500222],[2,4853]],[[233097,504116],[341,-1014]],[[233438,503102],[0,-2921],[-654,12]],[[232784,500193],[-25,1632],[-1362,11]],[[231397,501836],[-1000,17]],[[240561,504010],[200,-612]],[[240761,503398],[-169,-3191],[-689,-567],[0,-757]],[[239903,498883],[-674,2],[0,1341]],[[239229,500226],[-140,4570]],[[221422,506807],[-9,-6505]],[[221413,500302],[-2368,-13]],[[219045,500289],[-317,676],[77,2217],[-293,1268]],[[222428,506802],[33,-13076]],[[222461,493726],[-769,-45]],[[221692,493681],[-243,467]],[[221449,494148],[-36,6154]],[[224117,501906],[15,-8145]],[[224132,493761],[-628,-3]],[[223504,493758],[-1043,-32]],[[235840,503452],[-367,-8],[16,-4852]],[[235489,498592],[-437,8]],[[235052,498600],[-236,771]],[[234816,499371],[-1378,3731]],[[183397,494435],[-268,4],[1,-3240],[-116,1],[10,-3446],[227,-982],[-443,-1878]],[[182808,484894],[-596,-1711],[-145,-1114]],[[182067,482069],[-654,3911],[-113,-748],[-563,1718],[-9,879],[-657,322],[-39,-921],[-426,1521],[-370,1],[1,1214],[-439,-1021]],[[178798,488945],[-56,216]],[[178742,489161],[-154,1983],[62,1848],[-398,879],[-33,1744],[-322,801]],[[242423,502839],[0,-2695],[-505,27]],[[241918,500171],[-647,507],[-510,2720]],[[266980,506080],[138,-2703],[-131,-3752]],[[266987,499625],[-1582,-51]],[[265405,499574],[-5,6472]],[[265400,506046],[1580,34]],[[262728,506072],[-10,-6460]],[[262718,499612],[-1346,23]],[[261372,499635],[3,5588]],[[264053,506017],[3,-6475]],[[264056,499542],[-1338,70]],[[245803,501201],[-678,11]],[[245125,501212],[-1014,-15]],[[244111,501197],[-336,9]],[[243775,501206],[-2,1618]],[[265405,499574],[-1349,-32]],[[175096,498364],[-132,-2275],[-32,-3181],[-260,7]],[[174672,492915],[-1240,21]],[[173432,492936],[-217,1684],[-680,1089]],[[163716,500598],[-1231,-21],[0,-1605],[-451,-3],[2,-1609],[-331,10]],[[161705,497370],[-2049,35]],[[159656,497405],[135,5426]],[[239229,500226],[-676,-7]],[[238553,500219],[-1077,-9]],[[237476,500210],[398,1809]],[[229189,500222],[-676,-12]],[[228513,500210],[-1016,14]],[[297479,500973],[-166,-1451]],[[297313,499522],[-157,-1497],[-296,998],[-160,-1510],[-420,996]],[[296280,498509],[-67,1872],[-265,1503]],[[159656,497405],[121,-2501]],[[159777,494904],[-1469,-89],[-166,-673],[-532,204],[-411,1117],[-498,-541],[-6,-1096],[-722,-4],[-55,1558]],[[155918,495380],[-123,1127],[43,2998],[-132,924],[521,1787],[-211,1291]],[[219045,500289],[-133,-1711],[523,-288],[58,-1572],[780,-877],[539,-1239],[-128,-869]],[[220684,493733],[-1196,-11],[0,-483]],[[219488,493239],[-1893,-6]],[[217595,493233],[-334,-5],[34,9715],[49,1064]],[[260032,504518],[-8,-4869]],[[260024,499649],[-1160,99]],[[258864,499748],[-13,3454],[458,1388]],[[259309,504590],[723,-72]],[[298975,496577],[-544,-513],[-20,-3063]],[[298411,493001],[-914,898]],[[297497,493899],[402,4106],[-586,1517]],[[307394,502827],[-140,-1573],[180,-625],[-64,-1886],[-523,-588],[177,-1427],[-225,-1986]],[[306799,494742],[-257,115],[-412,2029],[-390,-679]],[[305740,496207],[-272,275]],[[305468,496482],[309,2126],[8,3412],[-219,979]],[[189728,498924],[5,-9133]],[[189733,489791],[-389,-951],[-593,-175]],[[188751,488665],[-448,-740],[-1162,820]],[[187141,488745],[-1,811],[-499,8],[1,1607]],[[186642,491171],[338,-6],[2,1607],[490,820],[15,2406],[170,1557],[484,19],[2,2777]],[[217595,493233],[-48,-3229]],[[217547,490004],[-2628,-7]],[[214919,489997],[16,9613]],[[296280,498509],[-410,-5407]],[[295870,493102],[-68,2572],[-938,-658]],[[294864,495016],[48,3058],[-119,2205]],[[155918,495380],[-1647,-2]],[[305468,496482],[-133,-1505],[-266,329],[-18,-2929],[-277,307]],[[304774,492684],[-7,9]],[[304767,492693],[-269,531],[-119,-1120],[-300,314]],[[304079,492418],[-196,1521],[-150,5231]],[[237476,500210],[-51,-1566]],[[237425,498644],[-1936,-52]],[[241918,500171],[207,-1615]],[[242125,498556],[-525,16],[0,-1617],[-334,5],[-1,-3232]],[[241265,493728],[-356,11]],[[240909,493739],[-1010,22]],[[239899,493761],[4,5122]],[[234816,499371],[-1,-4018],[-672,-9],[-5,-1614]],[[234138,493730],[-984,19]],[[233154,493749],[-366,-7]],[[232788,493742],[-4,6451]],[[250535,502784],[-3,-8151]],[[250532,494633],[-1040,40]],[[249492,494673],[-353,36]],[[249139,494709],[-6,4906],[-327,5],[-2,3229]],[[249139,494709],[-495,33]],[[248644,494742],[-1141,-12]],[[247503,494730],[-11,3274]],[[253961,502712],[-152,-2104],[333,-532],[464,2018]],[[254606,502094],[-10,-5904]],[[254596,496190],[-339,8],[-1,-1624],[-432,11]],[[253824,494585],[-416,19]],[[253408,494604],[6,6419],[-153,-38]],[[243775,501206],[-1056,-193],[-152,-3331]],[[242567,497682],[-442,874]],[[252256,501092],[-365,1],[-8,-6465]],[[251883,494628],[-410,-12]],[[251473,494616],[-941,17]],[[255685,502676],[-302,-3069],[-169,-3411]],[[255214,496196],[-618,-6]],[[254606,502094],[72,609]],[[254678,502703],[1007,-27]],[[192502,490248],[5,-10113]],[[192507,480135],[-16,-1620],[-799,3],[0,-1615],[-653,8],[-1,-1051]],[[191038,475860],[-655,-1],[0,1504],[-643,-3]],[[189740,477360],[-2,3452]],[[189738,480812],[-5,8979]],[[226493,500234],[-2,-6499]],[[226491,493735],[-1332,24]],[[225159,493759],[-1027,2]],[[231397,501836],[40,-8076]],[[231437,493760],[-1042,2]],[[230395,493762],[2,6456]],[[232788,493742],[-1310,16]],[[231478,493758],[-41,2]],[[210893,492720],[-1678,5]],[[209215,492725],[0,732]],[[244111,501197],[-1,-6504],[-219,-857],[207,-1948],[-69,-1318]],[[244029,490570],[-834,3122]],[[243195,493692],[-279,3080],[-349,910]],[[245125,501212],[38,-9630]],[[245163,491582],[-120,124]],[[245043,491706],[-313,-400],[-41,-1496],[-287,-3]],[[244402,489807],[-373,763]],[[247503,494730],[-1,-1740]],[[247502,492990],[-1654,56],[-187,-1630]],[[245661,491416],[-498,166]],[[253408,494604],[-589,39]],[[252819,494643],[-936,-15]],[[186642,491171],[-1501,14],[-1,-1610]],[[185140,489575],[-834,8],[-3,4870]],[[203747,480696],[-170,-9]],[[203577,480687],[-2877,-39],[0,148]],[[200700,480796],[-49,12388],[-51,-1]],[[165744,489337],[-329,0],[-5,-4859],[-338,5]],[[165072,484483],[-1001,8],[0,1610],[-336,-4],[-2,1618],[-1027,-13],[-1,1606],[-664,64],[-2,3219],[-321,77],[-13,4702]],[[221449,494148],[180,-1781],[-749,47],[-196,1319]],[[294864,495016],[-214,-1344],[-132,-2763],[162,-4374]],[[294680,486535],[-165,-92]],[[294515,486443],[-1724,-1101]],[[292791,485342],[28,960],[-465,275],[-343,2130],[225,833],[-72,2803]],[[238553,500219],[-2,-6472]],[[238551,493747],[-677,-2]],[[237874,493745],[1,807],[-681,-7]],[[237194,494545],[221,1970],[10,2129]],[[239899,493761],[-13,0]],[[239886,493761],[-1006,-6]],[[238880,493755],[-329,-8]],[[228513,500210],[-4,-6463]],[[228509,493747],[-670,-20]],[[227839,493727],[-1336,7]],[[226503,493734],[-12,1]],[[230395,493762],[0,-2]],[[230395,493760],[-1217,-20]],[[229178,493740],[-669,7]],[[260024,499649],[-9,-6494]],[[260015,493155],[-615,55]],[[259400,493210],[-964,215]],[[258436,493425],[364,3555],[64,2768]],[[261372,499635],[-2,-6463]],[[261370,493172],[-640,-4]],[[260730,493168],[-715,-13]],[[260024,499649],[1348,-14]],[[264056,499542],[8,-6454]],[[264064,493088],[-669,-1]],[[263395,493087],[-679,16]],[[262716,493103],[2,6509]],[[262716,493103],[-656,52]],[[262060,493155],[-690,17]],[[266987,499625],[-62,-3376],[-470,-1067],[-157,-2040]],[[266298,493142],[-886,-31]],[[265412,493111],[-7,6463]],[[265412,493111],[-786,0]],[[264626,493111],[-562,-23]],[[175339,492914],[-169,-3],[-23,-6408]],[[175147,486503],[-644,5]],[[174503,486508],[-557,-1]],[[173946,486507],[0,3241],[391,-17],[114,1594],[220,-13],[1,1603]],[[214919,489997],[-33,-5323],[-334,-145]],[[214552,484529],[-104,-245],[-1766,9]],[[212682,484293],[343,3115],[-3812,-38]],[[209213,487370],[2,5355]],[[297497,493899],[-208,-1404],[-408,589],[-262,-2738],[-163,304]],[[296456,490650],[-487,788],[-99,1664]],[[235052,498600],[861,-2186],[275,-1379]],[[236188,495035],[12,-2914]],[[236200,492121],[-1368,-13]],[[234832,492108],[-669,3],[-25,1619]],[[304079,492418],[-79,-2770]],[[304000,489648],[-229,-1286],[-556,2438],[-134,-953],[-324,848]],[[237194,494545],[-162,-1485],[-844,1975]],[[243195,493692],[-616,1],[0,-1602]],[[242579,492091],[-668,7],[-1,1620],[-645,10]],[[173432,492936],[-215,-1206],[111,-1864],[-135,-2004]],[[173193,487862],[-118,-728],[-1,-2989]],[[173074,484145],[-2,-31284]],[[173072,452861],[-3259,-52]],[[169813,452809],[-49,5195],[-6,11887],[-34,1],[4,20950]],[[300150,494046],[150,-5520],[-565,-417],[90,-2385]],[[299825,485724],[28,-1263],[-360,-306],[-213,-2182]],[[299280,481973],[-251,-349],[-88,1241],[-239,-1545]],[[298702,481320],[-1098,1335]],[[297604,482655],[73,1782],[273,1403]],[[297950,485840],[461,7161]],[[165072,484483],[0,-1675]],[[165072,482808],[-3996,131]],[[161076,482939],[-1867,-3]],[[159209,482936],[78,4514],[296,1024],[283,3753],[-89,2677]],[[286590,490299],[-326,1891]],[[286264,492190],[242,1614],[1261,3804]],[[288921,494151],[-278,-2136],[171,-535],[-163,-1981],[-600,-1658],[-229,98],[184,-3632]],[[288006,484307],[-698,337],[-439,-517]],[[286869,484127],[-30,11]],[[286839,484138],[-17,6]],[[286822,484144],[-93,2654],[-183,296],[473,1068],[-221,1526],[192,1728],[-400,-1117]],[[306799,494742],[-208,-3178],[83,-580],[-394,-2170],[-422,630],[40,936]],[[305898,490380],[198,677],[-157,2940],[-190,25],[-9,2185]],[[178742,489161],[-408,649],[-97,1865],[-374,-2892],[-523,-708],[-420,-3554],[-518,-1775],[-403,-257]],[[175999,482489],[-852,4014]],[[305898,490380],[-88,1150],[-333,-4456],[-153,1112],[-294,-803],[27,3034],[-191,-1422]],[[304866,488995],[63,1229],[-293,335]],[[304636,490559],[138,2125]],[[255214,496196],[10,-3137],[-283,-948],[-252,-4020]],[[254689,488091],[-861,-9]],[[253828,488082],[-4,6503]],[[296456,490650],[-138,-1260]],[[296318,489390],[-526,-1476],[60,-1043]],[[295852,486871],[-725,197],[35,-1311],[-435,-257]],[[294727,485500],[-47,1035]],[[159209,482936],[-356,-1083],[-4,-2172]],[[158849,479681],[-1695,-61],[-4,1999],[-1023,-130],[-80,4507],[-584,9],[-506,918],[-251,1689],[-581,464],[-272,-1480],[-649,-38]],[[153204,487558],[120,7683]],[[301339,486191],[74,-4637]],[[301413,481554],[-561,-31]],[[300852,481523],[-271,609],[-756,3592]],[[237874,493745],[1,-6477]],[[237875,487268],[-1335,-3]],[[236540,487265],[-340,-1]],[[236200,487264],[0,4857]],[[248644,494742],[4,-1203],[-356,-1775],[167,-1777],[17,-2211],[270,-1702],[223,-2658]],[[248969,483416],[-1467,-1]],[[247502,483415],[1,1681]],[[247503,485096],[-1,7894]],[[249492,494673],[0,-4905]],[[249492,489768],[-4,-6324]],[[249488,483444],[-519,-28]],[[251473,494616],[2,-4829]],[[251475,489787],[-785,-8]],[[250690,489779],[-1198,-11]],[[252819,494643],[-1,-5695]],[[252818,488948],[3,-842],[-1344,42]],[[251477,488148],[-2,1639]],[[253828,488082],[-336,-5]],[[253492,488077],[2,862],[-676,9]],[[185140,489575],[-7,-6496]],[[185133,483079],[-5,-1541],[-325,-81],[-2,-1617],[-333,6],[-31,-3059],[-167,-6]],[[184270,476781],[-988,-2],[0,1538],[-762,6],[71,2286],[-253,1758],[-271,-298]],[[297950,485840],[-1609,2937],[-23,613]],[[289857,482936],[-1180,-3640],[-620,942]],[[288057,480238],[-51,4069]],[[289690,491904],[167,-8968]],[[222306,488875],[139,-1400],[-277,-1473],[-155,-2285],[239,-7],[214,-2924]],[[222466,480786],[-655,1]],[[221811,480787],[-251,2],[-1,4520],[-205,288],[-400,-1289],[-686,-69],[-402,533]],[[219866,484772],[-299,59]],[[219567,484831],[-77,2419],[-2,5989]],[[221692,493681],[38,-1693],[582,-1977],[-6,-1136]],[[231478,493758],[-2,-6467]],[[231476,487291],[-1083,9]],[[230393,487300],[2,6460]],[[233154,493749],[0,-6482]],[[233154,487267],[-1644,21]],[[231510,487288],[-34,3]],[[225159,493759],[1,-4821]],[[225160,488938],[-1327,-45]],[[223833,488893],[-333,-2]],[[223500,488891],[4,4867]],[[239886,493761],[1,-6484]],[[239887,487277],[-11,1]],[[239876,487278],[-996,-7]],[[238880,487271],[0,6484]],[[240909,493739],[-31,-6461]],[[240878,487278],[-991,-1]],[[230393,487300],[-1213,-24]],[[229180,487276],[-2,6464]],[[238880,487271],[-672,1]],[[238208,487272],[-333,-4]],[[223500,488891],[-1194,-16]],[[226503,493734],[-5,-6430]],[[226498,487304],[-323,15]],[[226175,487319],[-998,7]],[[225177,487326],[-17,1612]],[[242579,492091],[0,-4839]],[[242579,487252],[-1030,-242]],[[241549,487010],[-671,268]],[[234832,492108],[2,-4840]],[[234834,487268],[-1653,0]],[[233181,487268],[-27,-1]],[[229180,487276],[-670,-7]],[[228510,487269],[-670,12]],[[227840,487281],[-1,6446]],[[227840,487281],[-666,8]],[[227174,487289],[-676,15]],[[244402,489807],[392,-2555]],[[244794,487252],[-1243,-3]],[[243551,487249],[-972,3]],[[209213,487370],[2,-6520]],[[209215,480850],[-2355,-66]],[[206860,480784],[-501,-22]],[[259400,493210],[11,-6545]],[[259411,486665],[-1095,72]],[[258316,486737],[-227,4105],[347,2583]],[[304000,489648],[314,-1030]],[[304314,488618],[155,528]],[[304469,489146],[-41,-1011]],[[304428,488135],[-42,-1969],[-144,1438],[-555,-1235],[-307,-2321],[164,-2049],[-435,-545]],[[303109,481454],[-386,1324],[-161,2030],[-306,-178],[3,1605],[-347,398]],[[219567,484831],[-690,962],[-261,-1066],[-279,233],[-415,1973],[-376,207]],[[217546,487140],[0,-1]],[[217546,487140],[1,2864]],[[200700,480796],[-1181,20]],[[199519,480816],[-168,0]],[[199351,480816],[0,2700],[-338,-12],[1,1631],[-671,1],[0,1587],[-983,520],[0,1054],[-332,2],[5,1652],[-345,1626]],[[304469,489146],[96,425],[146,-4224],[-211,-753],[-72,3541]],[[304866,488995],[-144,-863],[186,-1284],[-136,-1342],[-199,4245],[63,808]],[[304767,492693],[-187,-2521],[-266,-1554]],[[260730,493168],[6,-6502]],[[260736,486666],[-1325,-1]],[[262060,493155],[-5,-6525]],[[262055,486630],[-1319,36]],[[263395,493087],[5,-6429]],[[263400,486658],[-1345,-28]],[[264626,493111],[-1,-3070]],[[264625,490041],[-2,-3183]],[[264623,486858],[-1223,-200]],[[247503,485096],[-1667,-111]],[[245836,484985],[-8,6443],[-167,-12]],[[173946,486507],[-392,-272],[-361,1627]],[[292791,485342],[-439,-295],[152,-6649]],[[292504,478398],[55,-2188]],[[292559,476210],[-1099,-481],[-496,1080]],[[290964,476809],[-432,1000],[257,2733],[-219,10862]],[[236200,487264],[-1352,5]],[[234848,487269],[-14,-1]],[[178798,488945],[-51,-1480]],[[178747,487465],[-147,-2107],[27,-2295],[-141,-364],[-9,-7526]],[[178477,475173],[-2,-5280],[149,-49]],[[178624,469844],[-11,-2674]],[[178613,467170],[-1161,-3],[35,3027],[-978,384],[-398,937],[-84,-1083],[-654,1955],[-183,1188]],[[175190,473575],[801,17],[8,8897]],[[290964,476809],[48,-2087],[-179,-2358]],[[290833,472364],[-10,-3429]],[[290823,468935],[-322,652],[-79,-1360],[-540,1549],[-309,-528]],[[289573,469248],[-20,3211],[418,3255],[-260,632],[239,1293],[-93,5297]],[[245836,484985],[-965,57]],[[244871,485042],[-77,2210]],[[199351,480816],[0,-542],[-2071,-233],[-330,808],[-664,541],[-332,1359],[-996,270],[0,1480],[-393,2122]],[[187141,488745],[-18,-3230],[155,229],[839,-2595]],[[188117,483149],[-2489,-4]],[[185628,483145],[-495,-66]],[[169813,452809],[-3140,-59]],[[166673,452750],[-102,8]],[[166571,452758],[-13,14052],[-1606,-147],[6,8084],[116,22],[-2,8039]],[[199519,480816],[49,-535],[44,-12867],[-117,0],[4,-6462],[53,0]],[[199552,460952],[1,-3214]],[[199553,457738],[-4238,36]],[[195315,457774],[-81,8002],[-208,644],[-621,4049],[-508,1245],[-388,4713],[-175,3678],[-827,30]],[[265345,488432],[-13,-4364],[594,-1608]],[[265926,482460],[2,-2061]],[[265928,480399],[-330,807],[-651,39],[-327,827]],[[264620,482072],[3,4786]],[[264625,490041],[337,2],[2,-1583],[381,-28]],[[217546,487139],[-458,-846],[2,-7566]],[[217090,478727],[-2459,14]],[[214631,478741],[-79,1615],[0,4173]],[[184270,476781],[-1,-3235]],[[184269,473546],[-657,2],[18,-6493],[161,-1616],[-161,-935]],[[183630,464504],[-371,1135],[-285,-316]],[[182974,465323],[1,3349],[164,1],[-2,6527],[-838,4]],[[182299,475204],[-1840,-8]],[[180459,475196],[-55,2307],[-390,208],[75,2719],[-486,2042],[-29,3598],[-455,236],[-372,1159]],[[189738,480812],[-430,714],[-126,1528],[-434,6]],[[188748,483060],[3,5605]],[[251477,488148],[-2,-4871]],[[251475,483277],[-336,-10]],[[251139,483267],[-664,186]],[[250475,483453],[215,6326]],[[250475,483453],[-987,-9]],[[297604,482655],[-139,-531],[-150,-6299]],[[297315,475825],[-695,-198],[-380,613]],[[296240,476240],[-135,842]],[[296105,477082],[40,1309],[261,-315],[91,2132],[-178,490],[251,3497],[-332,632],[104,1629],[-255,1003],[-235,-588]],[[158849,479681],[187,-616],[254,-2713],[-330,-3406],[-529,-206],[-3,-1355]],[[158428,471385],[-331,3],[-437,-1062],[-659,-2951],[-995,-473],[-214,-851]],[[155792,466051],[-606,-123],[-747,708],[-3,821]],[[154436,467457],[-267,104]],[[154169,467561],[-22,3824],[329,1721],[-5,3184],[-170,-23],[1,3263],[-310,1557],[0,1719],[-955,38]],[[153037,482844],[167,4714]],[[253492,488077],[4,-6488]],[[253496,481589],[-667,11]],[[252829,481600],[-2,1626],[-1352,51]],[[225177,487326],[14,-6561]],[[225191,480765],[-1074,13]],[[224117,480778],[-247,-3]],[[223870,480775],[-37,8118]],[[223870,480775],[-1404,11]],[[188748,483060],[-631,89]],[[254689,488091],[84,-3796],[-251,-2704]],[[254522,481591],[-691,-12]],[[253831,481579],[-335,10]],[[174503,486508],[-1,-3222],[107,-1],[3,-3245],[-111,-9],[5,-3147]],[[174506,476884],[-751,3480],[-169,2160],[-512,1621]],[[219866,484772],[49,-6023]],[[219915,478749],[-2825,-22]],[[180459,475196],[-612,-25]],[[179847,475171],[-1370,2]],[[296105,477082],[-1078,260]],[[295027,477342],[17,4427],[-151,1362],[-345,330],[179,2039]],[[212682,484293],[-532,-1541],[1,-2393]],[[212151,480359],[-2937,18]],[[209214,480377],[1,473]],[[231510,487288],[-3,-6495]],[[231507,480793],[-1113,5]],[[230394,480798],[-1,6502]],[[233181,487268],[-6,-6467]],[[233175,480801],[-1132,-10]],[[232043,480791],[-536,2]],[[239876,487278],[3,-6493]],[[239879,480785],[-1250,-4]],[[238629,480781],[-423,3]],[[238206,480784],[2,6488]],[[241549,487010],[0,-6211]],[[241549,480799],[-290,-4]],[[241259,480795],[-1313,-10]],[[239946,480785],[-67,0]],[[244871,485042],[-35,-2081],[144,-2160]],[[244980,480801],[-1096,2]],[[243884,480803],[-334,1]],[[243550,480804],[1,6445]],[[226175,487319],[6,-6546]],[[226181,480773],[-417,-14]],[[225764,480759],[-573,6]],[[227174,487289],[5,-6502]],[[227179,480787],[-998,-14]],[[243550,480804],[-972,-1]],[[242578,480803],[-1029,-4]],[[234848,487269],[-4,-6462]],[[234844,480807],[-164,-8]],[[234680,480799],[-1319,-4]],[[233361,480795],[-186,6]],[[238206,480784],[-897,-1]],[[237309,480783],[-772,10]],[[236537,480793],[3,6472]],[[230394,480798],[-407,0]],[[229987,480798],[-908,-8]],[[229079,480790],[-570,-5]],[[228509,480785],[1,6484]],[[236537,480793],[-544,5]],[[235993,480798],[-1149,9]],[[228509,480785],[-758,1]],[[227751,480786],[-572,1]],[[264620,482072],[-6,-1618],[-556,-296]],[[264058,480158],[-662,0]],[[263396,480158],[4,6500]],[[259411,486665],[-4,-6481]],[[259407,480184],[-1175,91]],[[258232,480275],[-219,3393],[303,3069]],[[263396,480158],[-664,2]],[[262732,480160],[-666,1]],[[262066,480161],[-11,6469]],[[303109,481454],[-237,-3363],[-309,-544],[-343,-4752],[-437,1185]],[[301783,473980],[56,1699],[-493,2897],[67,2978]],[[262066,480161],[-1330,37]],[[260736,480198],[0,6468]],[[260736,480198],[0,-3238]],[[260736,476960],[-635,-23]],[[260101,476937],[-693,9],[-1,3238]],[[295027,477342],[-54,-6909]],[[294973,470433],[-1008,-44]],[[293965,470389],[167,2590],[-54,4202]],[[294078,477181],[-94,3357],[378,3142],[153,2763]],[[175190,473575],[-334,1506],[-129,1913],[-221,-110]],[[294078,477181],[-671,-975],[-134,2686],[-769,-494]],[[221811,480787],[-2,-9343]],[[221809,471444],[-1850,12]],[[219959,471456],[-44,7293]],[[300852,481523],[10,-3416],[-211,-1325]],[[300651,476782],[-895,3175],[-123,-380],[-353,2396]],[[266573,485031],[2,-1116],[972,143]],[[267547,484058],[-7,-6487]],[[267540,477571],[-652,-91],[7,-1620],[-304,-225]],[[266591,475635],[-654,-32]],[[265937,475603],[-9,4796]],[[265926,482460],[77,10]],[[266003,482470],[432,2693],[138,-132]],[[247502,483415],[3,-1619]],[[247505,481796],[-1004,-19],[9,-2420]],[[246510,479357],[-1496,-1]],[[245014,479356],[-34,1445]],[[288057,480238],[-163,246],[-201,-2951],[7,-3154]],[[287700,474379],[-304,516]],[[287396,474895],[-580,1634],[-156,-692],[-618,-119]],[[286042,475718],[-350,485],[-33,3060]],[[285659,479263],[575,1959],[489,118],[146,2787]],[[214631,478741],[5,-4840],[73,-2432]],[[214709,471469],[-1978,12]],[[212731,471481],[-580,15]],[[212151,471496],[0,8863]],[[269259,474627],[-1374,-276]],[[267885,474351],[-11,2434],[-334,786]],[[267547,484058],[1423,278]],[[268970,484336],[189,-4720],[100,-4989]],[[178613,467170],[-2,-14382]],[[178611,452788],[-3086,41],[-2428,19]],[[173097,452848],[-25,13]],[[251139,483267],[-6,-6483]],[[251133,476784],[-1982,151]],[[249151,476935],[334,1631],[4,3332],[-358,174],[-162,1344]],[[249151,476935],[-328,-1617]],[[248823,475318],[-991,-774]],[[247832,474544],[6,7269],[-333,-17]],[[252829,481600],[-49,-6493]],[[252780,475107],[-328,24]],[[252452,475131],[-1318,30]],[[251134,475161],[-1,1623]],[[189740,477360],[2,-5505]],[[189742,471855],[-1523,-1]],[[188219,471854],[6,4870],[-654,10],[0,1562],[-614,11],[-169,1087],[-1161,0],[1,3751]],[[188219,471854],[-1319,42]],[[186900,471896],[-1651,-7],[-264,-1313]],[[184985,470576],[-183,-1642],[-532,-4],[-1,4616]],[[161076,482939],[-47,-16196],[1299,-29],[11,-13965]],[[162339,452749],[-1582,70]],[[160757,452819],[-2346,190]],[[158411,453009],[17,18376]],[[166571,452758],[-1779,10]],[[164792,452768],[-2453,-19]],[[289573,469248],[-100,-158]],[[289473,469090],[-527,-154],[-20,1300],[-279,-24],[-23,1968],[-519,2370],[-405,-171]],[[300651,476782],[-32,-195]],[[300619,476587],[-404,-4938]],[[300215,471649],[-352,1116],[-342,-274],[-74,1832],[-524,-693],[-159,1711],[-267,-361]],[[298497,474980],[-226,2506],[101,2208],[330,1626]],[[154169,467561],[-316,-270],[-199,-1661],[-396,-276],[-61,3940],[-268,1346],[-619,4]],[[152310,470644],[269,5888],[458,6312]],[[298497,474980],[-81,-1100]],[[298416,473880],[-391,59],[61,931],[-822,-385]],[[297264,474485],[51,1340]],[[301783,473980],[-163,-962]],[[301620,473018],[-513,-14],[127,1049],[-615,2534]],[[265937,475603],[-658,-19],[7,-1630]],[[265286,473954],[-1222,-81]],[[264064,473873],[-6,6285]],[[247832,474544],[-657,679]],[[247175,475223],[-660,-544]],[[246515,474679],[-5,4678]],[[254522,481591],[-329,-5330],[49,-1204]],[[254242,475057],[-476,2]],[[253766,475059],[65,6520]],[[253766,475059],[-986,48]],[[238629,480781],[-1,-4543]],[[238628,476238],[-1318,-2]],[[237310,476236],[-1,4547]],[[237308,469765],[-1315,6]],[[235993,469771],[0,6459]],[[235993,476230],[0,4568]],[[237310,476236],[-2,-6471]],[[234682,476230],[-1321,3]],[[233361,476233],[0,4562]],[[234680,480799],[2,-4569]],[[235993,476230],[-1311,0]],[[239947,476239],[-1319,-1]],[[239946,480785],[1,-4546]],[[233361,476233],[-1320,43]],[[232041,476276],[2,4515]],[[209214,480377],[5,-8812]],[[209219,471565],[0,-7313]],[[209219,464252],[-1679,-40]],[[207540,464212],[-659,-10]],[[206881,464202],[-21,16582]],[[241256,475444],[-1309,0]],[[239947,475444],[0,795]],[[241259,480795],[-3,-5351]],[[232041,476276],[-1933,42]],[[230108,476318],[88,2490],[-209,1990]],[[242578,480803],[-3,-5357]],[[242575,475446],[-1319,-2]],[[245014,479356],[4,-1361],[405,-1717],[-331,-3302]],[[245092,472976],[-1192,26]],[[243900,473002],[-16,7801]],[[243900,473002],[-1326,21]],[[242574,473023],[1,2423]],[[230108,476318],[224,-745],[59,-2539]],[[230391,473034],[-980,6]],[[229411,473040],[-330,1]],[[229081,473041],[-2,7749]],[[206881,464202],[-1098,-58],[7,-3247]],[[205790,460897],[-134,-6],[-121,-2624],[-664,265],[160,2348],[-1441,51]],[[203590,460931],[-7,-1]],[[203583,460930],[-6,19757]],[[224117,480778],[91,-2393],[1571,-3239]],[[225779,475146],[90,-530]],[[225869,474616],[-47,-3529],[-165,-2603]],[[225657,468484],[-436,813]],[[225221,469297],[-526,2160]],[[224695,471457],[-1032,3041],[-78,1580],[-470,1325],[-243,2027],[-406,1356]],[[229081,473041],[-659,-11]],[[228422,473030],[0,1617],[-665,-11]],[[227757,474636],[-6,6150]],[[227757,474636],[-663,-12]],[[227094,474624],[-1225,-8]],[[225779,475146],[-15,5613]],[[203583,460930],[-1530,-51],[-2501,73]],[[224695,471457],[-2109,-11]],[[222586,471446],[-777,-2]],[[212151,471496],[-1401,0]],[[210750,471496],[-1531,69]],[[260101,476937],[-1,-1635]],[[260100,475302],[-329,14],[4,-1620],[-1016,-10]],[[258759,473686],[-527,6589]],[[262732,480160],[25,-6465]],[[262757,473695],[-1325,-1]],[[261432,473694],[1,3265],[-697,1]],[[195315,457774],[-2814,132]],[[192501,457906],[-1359,125],[-5,3185],[-131,-2],[32,14646]],[[264064,473873],[0,-195]],[[264064,473678],[-1307,17]],[[246515,474679],[-1111,-3345],[-255,-73]],[[245149,471261],[-57,1715]],[[286042,475718],[-35,-4144],[115,-2963],[261,67],[229,-1455]],[[286612,467223],[26,-2749]],[[286638,464474],[-1117,-2]],[[285521,464472],[-187,1943],[55,5513]],[[285389,471928],[-24,5905]],[[285365,477833],[294,1430]],[[293965,470389],[-115,-2942]],[[293850,467447],[-369,-82]],[[293481,467365],[-266,2462],[-523,832]],[[292692,470659],[-14,505]],[[292678,471164],[-119,5046]],[[217090,478727],[0,-7285]],[[217090,471442],[-2381,27]],[[219959,471456],[-2869,-14]],[[281818,478275],[-5,-4317]],[[281813,473958],[-1305,-81]],[[280508,473877],[0,4510]],[[280508,478387],[1310,-112]],[[280508,473877],[4,-838]],[[280512,473039],[-752,7],[-414,-1125]],[[279346,471921],[-518,1158],[12,3307],[719,1122],[949,879]],[[283548,476628],[9,-4501]],[[283557,472127],[-318,-2],[8,-1701],[-272,15]],[[282975,470439],[-429,33],[9,794],[-498,-13]],[[282057,471253],[10,2716],[-254,-11]],[[281818,478275],[657,-443],[527,-1887],[546,683]],[[285389,471928],[-697,-201]],[[284692,471727],[-474,498],[-661,-98]],[[283548,476628],[635,251],[429,-526],[753,1480]],[[267885,474351],[36,-4847]],[[267921,469504],[-333,-96]],[[267588,469408],[-976,-152]],[[266612,469256],[-21,6379]],[[192501,457906],[15,-12908]],[[192516,444998],[-2779,45]],[[189737,445043],[-3,7851]],[[189734,452894],[0,9524]],[[189734,462418],[8,9437]],[[296240,476240],[-137,-2650],[-357,111],[-31,-3519],[241,-61],[-25,-3494]],[[295931,466627],[-259,37]],[[295672,466664],[-674,89]],[[294998,466753],[-25,3680]],[[251134,475161],[-13,-6521]],[[251121,468640],[-991,-43]],[[250130,468597],[-1307,230]],[[248823,468827],[0,6491]],[[261432,473694],[8,-6496]],[[261440,467198],[-657,-32]],[[260783,467166],[-660,1]],[[260123,467167],[-23,8135]],[[292678,471164],[-1239,47],[-606,1153]],[[301620,473018],[189,655],[301,-1389],[-295,-3187]],[[301815,469097],[-594,-238],[-94,-983],[-503,-1186]],[[300624,466690],[-506,1531],[-67,1971],[164,1457]],[[287396,474895],[215,-2005],[56,-5300]],[[287667,467590],[-1055,-367]],[[297264,474485],[21,-2797],[-310,-2918],[270,-2372]],[[297245,466398],[-1314,229]],[[232041,476276],[7,-6486]],[[232048,469790],[-1892,-6]],[[230156,469784],[78,2628],[157,622]],[[233361,476233],[0,-6428]],[[233361,469805],[-1313,-15]],[[239947,475444],[-4,-5679]],[[239943,469765],[-1318,14]],[[238625,469779],[3,6459]],[[238625,469779],[-1317,-14]],[[235993,469771],[-1311,30]],[[234682,469801],[0,6429]],[[234682,469801],[-1321,4]],[[266612,469256],[-658,-171],[8,-1638]],[[265962,467447],[-657,-45]],[[265305,467402],[-19,6552]],[[242574,473023],[-2,-3272]],[[242572,469751],[-1316,2]],[[241256,469753],[0,5691]],[[241256,469753],[-1313,12]],[[248823,468827],[0,-812]],[[248823,468015],[-1640,-18]],[[247183,467997],[-8,7226]],[[247183,467997],[1,-5692]],[[247184,462305],[-597,23]],[[246587,462328],[-172,2280],[-542,826]],[[245873,465434],[-469,1433],[-255,4394]],[[300624,466690],[-29,-121]],[[300595,466569],[-107,-729],[-1684,270]],[[298804,466110],[-84,15]],[[298720,466125],[-215,4313],[-157,16],[68,3426]],[[260123,467167],[-1187,-13]],[[258936,467154],[-50,4104],[-127,2428]],[[182299,475204],[2,-6522],[-141,-1591],[-469,14]],[[181691,467105],[-327,810],[-823,11],[-55,776],[-638,0]],[[179848,468702],[-1,6469]],[[179848,468702],[-63,-3749]],[[179785,464953],[-565,398],[-162,1616]],[[179058,466967],[-63,1875],[-371,1002]],[[252452,475131],[-16,-6573]],[[252436,468558],[-656,-5]],[[251780,468553],[-659,87]],[[182974,465323],[-238,-239],[-275,-2258],[-767,3]],[[181694,462829],[-3,4276]],[[253766,475059],[-16,-6494]],[[253750,468565],[-660,-23]],[[253090,468542],[-654,16]],[[254242,475057],[185,-6512]],[[254427,468545],[-677,20]],[[289473,469090],[-133,-2371]],[[289340,466719],[-1655,-378]],[[287685,466341],[-18,1249]],[[298720,466125],[-986,173]],[[297734,466298],[-489,100]],[[228422,473030],[0,-5278]],[[228422,467752],[-410,1264],[-493,-321]],[[227519,468695],[-420,21]],[[227099,468716],[-5,5908]],[[227099,468716],[-647,153],[-239,-1688],[-225,-93],[-331,1396]],[[265305,467402],[-657,-79]],[[264648,467323],[-572,-16]],[[264076,467307],[-12,6371]],[[282057,471253],[-126,-2331]],[[281931,468922],[-1419,93]],[[280512,469015],[0,4024]],[[262757,473695],[0,-6486]],[[262757,467209],[-661,6]],[[262096,467215],[-656,-17]],[[264076,467307],[-666,-109]],[[263410,467198],[-653,11]],[[184985,470576],[7,-703],[463,1104],[183,-1172],[54,-3295],[325,-1616],[-111,-2670]],[[185906,462224],[-218,4],[1,-1621],[-435,0],[0,-1622],[-966,-25]],[[184288,458960],[-6,4851],[-652,693]],[[279029,472686],[285,-724],[-124,-1251],[-161,1975]],[[280512,469015],[1,-6165]],[[280513,462850],[-1219,-1634]],[[279294,461216],[-444,1662]],[[278850,462878],[-210,586]],[[278640,463464],[245,2248],[543,1799],[-163,3149],[81,1261]],[[230156,469784],[-257,-2656],[18,-1098],[319,-1424],[30,-1300]],[[230266,463306],[144,-1322]],[[230410,461984],[-513,643]],[[229897,462627],[-187,2346],[-300,1001]],[[229410,465974],[1,7066]],[[229410,465974],[-586,1070]],[[228824,467044],[-402,708]],[[243900,473002],[-5,-8148]],[[243895,464854],[-1323,-36]],[[242572,464818],[0,4933]],[[245873,465434],[-1,-548],[-656,3]],[[245216,464889],[-1321,-35]],[[292692,470659],[24,-1088],[-500,-1877]],[[292216,467694],[-534,-438],[-538,1053]],[[291144,468309],[-321,626]],[[284692,471727],[-24,-4636]],[[284668,467091],[-949,-53],[-149,-3444]],[[283570,463594],[-344,17]],[[283226,463611],[9,1733],[-312,31],[52,5064]],[[186900,471896],[-241,-2319],[147,-3747],[355,398],[146,-1874],[116,-3740]],[[187423,460614],[-60,-2973],[-639,535]],[[186724,458176],[-180,1226],[-380,-494],[84,2409],[-342,907]],[[189734,462418],[-524,-641],[35,1743],[-1064,341],[14,-3257]],[[188195,460604],[-772,10]],[[285521,464472],[224,-1369],[-308,-60]],[[285437,463043],[-555,-97]],[[284882,462946],[2,2100],[-216,2045]],[[210915,461007],[1,-6453],[118,-1623]],[[211034,452931],[-1815,-34]],[[209219,452897],[0,11355]],[[210750,471496],[65,-4017],[1,-6473],[99,1]],[[214922,454659],[-168,-1624]],[[214754,453035],[-1702,-71]],[[213052,452964],[-57,-9]],[[212995,452955],[-124,1630],[-20,6469],[-66,0]],[[212785,461054],[0,6430],[-54,3997]],[[214709,471469],[45,-10348],[76,-3],[-4,-6452],[96,-7]],[[212785,461054],[-1870,-47]],[[225221,469297],[13,-2261]],[[225234,467036],[-777,345],[-862,1235],[-166,869],[-848,-1646]],[[222581,467839],[5,3607]],[[222581,467839],[-781,-1614],[-391,247]],[[221409,466472],[-1271,1432],[-179,713]],[[219959,468617],[0,2839]],[[219959,468617],[86,-14154]],[[220045,454463],[-279,6]],[[219766,454469],[-1612,38]],[[218154,454507],[-1617,75]],[[216537,454582],[-1615,77]],[[158411,453009],[-2622,-72]],[[155789,452937],[3,13114]],[[283226,463611],[-473,58],[-176,-2031]],[[282577,461638],[-328,866],[-551,60]],[[281698,462564],[229,2735],[4,3623]],[[294998,466753],[-244,-4393]],[[294754,462360],[-1202,-852]],[[293552,461508],[61,2653],[237,3286]],[[293481,467365],[-1033,-910]],[[292448,466455],[-257,-293],[25,1532]],[[154436,467457],[-322,-2815],[-164,-2462],[-328,-79],[-48,-2548],[372,-119],[281,-2180],[-183,-1761],[99,-2713]],[[154143,452780],[-1087,57]],[[153056,452837],[-394,1953],[-208,4302],[105,4473],[-71,1599],[-264,1356],[-114,2029],[200,2095]],[[179785,464953],[674,-952],[683,-1920],[360,583]],[[181502,462664],[-185,-223],[-6,-1813],[-601,5],[9,-7878]],[[180719,452755],[-2108,33]],[[232048,469790],[-2,-6489]],[[232046,463301],[-1780,5]],[[234682,469801],[-2,-6505]],[[234680,463296],[-1319,27]],[[233361,463323],[0,6482]],[[233361,463323],[-985,-8]],[[232376,463315],[-330,-14]],[[235993,469771],[0,-4895]],[[235993,464876],[0,-1607]],[[235993,463269],[-1313,27]],[[238625,469779],[-3,-6531]],[[238622,463248],[-1315,8]],[[237307,463256],[0,1612]],[[237307,464868],[1,4897]],[[237307,464868],[-1314,8]],[[239943,469765],[-4,-6533]],[[239939,463232],[-1317,16]],[[241256,469753],[-1,-4930]],[[241255,464823],[1,-1610]],[[241256,463213],[-1317,19]],[[242572,464818],[-1317,5]],[[291144,468309],[49,-3778],[-226,-2026]],[[290967,462505],[-369,-97],[-984,-2871],[-607,-823]],[[289007,458714],[112,1789],[-67,1881],[190,1044],[98,3291]],[[225234,467036],[12,-6037]],[[225246,460999],[0,-6480]],[[225246,454519],[-1283,-6]],[[223963,454513],[-1286,-11]],[[222677,454502],[-33,1]],[[222644,454503],[-31,12930],[-32,406]],[[268694,465642],[-316,-1305],[-142,-3076]],[[268236,461261],[-593,-71]],[[267643,461190],[-55,8218]],[[267921,469504],[681,71],[92,-3933]],[[267643,461190],[-1306,-223]],[[266337,460967],[-314,-75]],[[266023,460892],[-61,6555]],[[301815,469097],[129,-3011],[504,-1291],[-172,-917],[-656,-1009],[-20,-1435],[-247,-532]],[[301353,460902],[-115,246]],[[301238,461148],[-90,2974],[-550,962],[-3,1485]],[[227519,468695],[-2,-7665]],[[227517,461030],[-972,-16]],[[226545,461014],[-1299,-15]],[[228824,467044],[-4,-7638]],[[228820,459406],[-975,10]],[[227845,459416],[1,1618],[-329,-4]],[[281698,462564],[-753,1]],[[280945,462565],[-432,285]],[[250130,468597],[9,-6418]],[[250139,462179],[-99,3]],[[250040,462182],[-1216,98]],[[248824,462280],[-1,5735]],[[181694,462829],[-192,-165]],[[251780,468553],[1,-6529]],[[251781,462024],[-457,58]],[[251324,462082],[-1185,97]],[[221409,466472],[43,-12006]],[[221452,454466],[-68,2]],[[221384,454468],[-1339,-5]],[[253090,468542],[2,-4305]],[[253092,464237],[4,-2164]],[[253096,462073],[-1122,-19]],[[251974,462054],[-193,-30]],[[254427,468545],[185,-1078],[-127,-2165]],[[254485,465302],[-1064,31],[0,-1088],[-329,-8]],[[292448,466455],[-171,-3336],[-36,-2654]],[[292241,460465],[-527,-991]],[[291714,459474],[-489,1291],[-258,1740]],[[293552,461508],[-1311,-1043]],[[248824,462280],[-247,1]],[[248577,462281],[-1393,24]],[[222644,454503],[-1192,-37]],[[287015,460504],[-343,-51]],[[286672,460453],[-34,4021]],[[287685,466341],[71,-5738]],[[287756,460603],[-741,-99]],[[155789,452937],[-801,-56]],[[154988,452881],[-845,-101]],[[266023,460892],[-1299,-123]],[[264724,460769],[-27,1]],[[264697,460770],[-49,6553]],[[264697,460770],[-1281,-49]],[[263416,460721],[-6,6477]],[[263416,460721],[-329,-8]],[[263087,460713],[-985,-2]],[[262102,460711],[-6,6504]],[[262102,460711],[-632,-30]],[[261470,460681],[-681,30]],[[260789,460711],[-6,6455]],[[260789,460711],[-616,-16]],[[260173,460695],[-1419,-24]],[[258754,460671],[182,6483]],[[284882,462946],[17,-1460],[-606,385]],[[284293,461871],[-102,1733],[-621,-10]],[[229897,462627],[-253,6],[-13,-4592]],[[229631,458041],[-268,-255]],[[229363,457786],[-543,3],[0,1617]],[[295672,466664],[201,-1871],[-69,-1578]],[[295804,463215],[-69,-4535]],[[295735,458680],[-148,-5073]],[[295587,453607],[-1209,182]],[[294378,453789],[-26,1]],[[294352,453790],[-31,692],[433,7878]],[[289007,458714],[-9,-2219]],[[288998,456495],[-609,12],[-4,988],[-551,-86]],[[287834,457409],[-78,3194]],[[297645,459260],[-169,1432],[-916,-278],[9,882],[-474,583],[-291,1336]],[[297734,466298],[148,-1093],[-43,-2779],[-194,-3166]],[[301238,461148],[-70,-970]],[[301168,460178],[-67,-41]],[[301101,460137],[28,-397]],[[301129,459740],[-2,-4]],[[301127,459736],[-256,-726]],[[300871,459010],[-22,-492]],[[300849,458518],[-74,-390]],[[300775,458128],[-385,553],[-40,-2081],[-373,-819]],[[299977,455781],[-294,713],[-11,1200],[281,1310],[-388,368],[185,1162],[57,2438],[-390,-234],[39,1513],[-540,411],[-112,1448]],[[299977,455781],[-56,-2596]],[[299921,453185],[-840,-171]],[[299081,453014],[-844,387]],[[298237,453401],[-93,27]],[[298144,453428],[2,2448],[-359,413],[119,1141]],[[297906,457430],[27,1226],[-288,604]],[[184288,458960],[0,-6128]],[[184288,452832],[-2898,-86]],[[181390,452746],[-671,9]],[[246587,462328],[-37,-556],[502,-1805]],[[247052,459967],[-532,14],[-2,-1629],[-648,10]],[[245870,458362],[-647,9]],[[245223,458371],[-7,6518]],[[254485,465302],[3,-3266]],[[254488,462036],[-1092,47]],[[253396,462083],[-300,-10]],[[245223,458371],[-649,13]],[[244574,458384],[-652,-1]],[[243922,458383],[-27,6471]],[[237307,463256],[111,-1603],[1,-4876]],[[237419,456777],[-650,-3]],[[236769,456774],[-649,-15]],[[236120,456759],[0,4918],[-127,1592]],[[243922,458383],[-651,50]],[[243271,458433],[-651,-34]],[[242620,458399],[-48,6419]],[[242620,458399],[-653,5]],[[241967,458404],[-654,-10]],[[241313,458394],[-57,4819]],[[286672,460453],[9,-2065],[-460,403],[-3,-1030],[-340,349]],[[285878,458110],[-226,21]],[[285652,458131],[-201,28],[-14,4884]],[[209219,452897],[0,-5656]],[[209219,447241],[2,-2488]],[[209221,444753],[-1673,14],[-1,1638]],[[207547,446405],[-7,17807]],[[207547,446405],[-1742,68]],[[205805,446473],[-15,14424]],[[189734,452894],[-1286,-39]],[[188448,452855],[-243,1756],[-87,2141],[178,1265],[-101,2587]],[[284293,461871],[21,-3935],[375,114]],[[284689,458050],[-2,-5187]],[[284687,452863],[-1795,-1]],[[282892,452862],[-390,-48]],[[282502,452814],[75,8824]],[[278850,462878],[-1,-10015]],[[278849,452863],[-1529,-47]],[[277320,452816],[-423,27],[0,5034]],[[276897,457877],[602,1758],[633,2570],[508,1259]],[[232376,463315],[-1,-1600],[202,-13],[-4,-4901]],[[232573,456801],[-1911,67]],[[230662,456868],[1,1145]],[[230663,458013],[-154,1201],[39,2679],[-138,91]],[[234680,463296],[161,-1608],[-5,-4919]],[[234836,456769],[-647,13]],[[234189,456782],[-648,10]],[[233541,456792],[3,4901],[-183,1630]],[[233541,456792],[-968,9]],[[236120,456759],[-644,5]],[[235476,456764],[-640,5]],[[238622,463248],[103,-1618],[-1,-4868]],[[238724,456762],[-656,0]],[[238068,456762],[-649,15]],[[239939,463232],[70,-6471]],[[240009,456761],[-640,-7]],[[239369,456754],[-645,8]],[[241313,458394],[-653,-6],[2,-1611]],[[240662,456777],[-653,-16]],[[297906,457430],[-486,-1106],[-24,856],[-523,-374],[-118,1160],[-154,-1681],[-621,1035],[76,1737],[-321,-377]],[[285652,458131],[-963,-81]],[[280945,462565],[4,-9702]],[[280949,452863],[-1704,-50]],[[279245,452813],[-396,50]],[[230663,458013],[-1032,28]],[[282502,452814],[-1272,49]],[[281230,452863],[-281,0]],[[291714,459474],[-261,-2859],[238,-600]],[[291691,456015],[-916,-2845]],[[290775,453170],[-1003,-3057]],[[289772,450113],[-329,184],[-290,2566]],[[289153,452863],[-165,772],[10,2860]],[[248577,462281],[18,-5761]],[[248595,456520],[-1108,-48]],[[247487,456472],[-211,623],[-224,2872]],[[294352,453790],[-85,-1335],[-514,519],[-607,1358]],[[293146,454332],[53,903]],[[293199,455235],[352,2851],[1,3422]],[[249240,456572],[-645,-52]],[[250040,462182],[14,-5553]],[[250054,456629],[-814,-57]],[[251324,462082],[2,-6381]],[[251326,455701],[-650,-38],[2,1005],[-624,-39]],[[186724,458176],[47,-5357]],[[186771,452819],[-155,1]],[[186616,452820],[-2328,12]],[[253396,462083],[-8,-6346]],[[253388,455737],[-109,0]],[[253279,455737],[-975,-13]],[[252304,455724],[-325,0]],[[251979,455724],[-5,6330]],[[251979,455724],[-653,-23]],[[254614,455702],[-1226,35]],[[254488,462036],[-82,-3532],[208,-2802]],[[293199,455235],[-367,801],[-92,-1372],[-647,330],[-402,1021]],[[301127,459736],[69,-1616]],[[301196,458120],[-253,-1012],[-168,1020]],[[300849,458518],[22,492]],[[227845,459416],[-2,-4858]],[[227843,454558],[-1298,-23]],[[226545,454535],[0,6479]],[[212995,452955],[-1853,-35]],[[211142,452920],[-108,11]],[[226545,454535],[3,-3229]],[[226548,451306],[-1288,-24]],[[225260,451282],[-14,3237]],[[266372,454459],[-653,-60]],[[265719,454399],[-998,-201]],[[264721,454198],[3,6571]],[[266337,460967],[35,-6508]],[[203590,460931],[13,-19328],[-708,2],[8,-7373]],[[202903,434232],[-1501,65]],[[201402,434297],[-1279,5]],[[200123,434302],[-1673,-16]],[[198450,434286],[-31,12241],[1170,-39],[16,8015],[-52,3235]],[[205805,446473],[4,-12257]],[[205809,434216],[-2545,-6]],[[203264,434210],[-361,22]],[[188448,452855],[-1677,-36]],[[264721,454198],[-644,35]],[[264077,454233],[-965,-59]],[[263112,454174],[-25,6539]],[[263112,454174],[-326,40]],[[262786,454214],[-1301,-17]],[[261485,454197],[-15,6484]],[[260173,460695],[3,-6540]],[[260176,454155],[-1280,41]],[[258896,454196],[-2,3199],[-393,-4]],[[258501,457391],[253,3280]],[[261485,454197],[-1309,-42]],[[289153,452863],[-334,-23]],[[288819,452840],[-1736,23]],[[287083,452863],[-29,3458],[98,834],[-137,3349]],[[287083,452863],[-115,0]],[[286968,452863],[-1145,0]],[[285823,452863],[55,5247]],[[247487,456472],[432,-1434],[26,-1577]],[[247945,453461],[-2077,28]],[[245868,453489],[2,4873]],[[229363,457786],[-2,-3238]],[[229361,454548],[-545,3]],[[228816,454551],[-973,7]],[[301196,458120],[304,-647]],[[301500,457473],[18,-1677],[-433,-1150]],[[301085,454646],[-839,-2060]],[[300246,452586],[-325,599]],[[298144,453428],[-1041,73]],[[297103,453501],[-1391,88]],[[295712,453589],[-125,18]],[[301793,457791],[116,-445]],[[301909,457346],[403,-2846],[-196,-1501],[475,-1514],[5,-2152]],[[302596,449333],[-234,-1189]],[[302362,448144],[-280,-204],[-97,-1526],[-241,-453]],[[301744,445961],[-218,3011],[-291,-217],[146,1519],[-214,1940],[-82,2432]],[[301500,457473],[293,318]],[[243271,458433],[-1,-8140]],[[243270,450293],[-1301,18]],[[241969,450311],[-2,8093]],[[244574,458384],[-7,-6498]],[[244567,451886],[-1,-1627]],[[244566,450259],[-1296,34]],[[241969,450311],[-1303,-7]],[[240666,450304],[-4,6473]],[[245868,453489],[0,-1629]],[[245868,451860],[-1301,26]],[[285823,452863],[-1027,0]],[[284796,452863],[-109,0]],[[230662,456868],[249,-1941],[-15,-1182]],[[230896,453745],[-107,-597],[-679,13]],[[230110,453161],[-2,1379],[-747,8]],[[198450,434286],[-3154,-25]],[[195296,434261],[-2647,-56]],[[192649,434205],[-133,0]],[[192516,434205],[0,10793]],[[277320,452816],[-6,-2742]],[[277314,450074],[-2528,-14]],[[274786,450060],[0,2383]],[[274786,452443],[526,1090],[1585,4344]],[[258896,454196],[-10,-5792]],[[258886,448404],[-830,-14]],[[258056,448390],[-837,12]],[[257219,448402],[579,2539],[358,3966],[345,2484]],[[232573,456801],[-5,-6484]],[[232568,450317],[-1299,59]],[[231269,450376],[19,2011],[-392,1358]],[[240666,450304],[-1299,5]],[[239367,450309],[2,6445]],[[235476,456764],[0,-6454]],[[235476,450310],[-323,-7]],[[235153,450303],[-970,19]],[[234183,450322],[6,6460]],[[234183,450322],[-1294,1]],[[232889,450323],[-321,-6]],[[238068,456762],[0,-6440]],[[238068,450322],[-326,1]],[[237742,450323],[-971,-4]],[[236771,450319],[-2,6455]],[[236771,450319],[-324,-4]],[[236447,450315],[-971,-5]],[[239367,450309],[-322,8]],[[239045,450317],[-977,5]],[[251326,455701],[-4,-4851]],[[251322,450850],[-1168,-69],[-750,255]],[[249404,451036],[-159,538]],[[249245,451574],[-5,4998]],[[249245,451574],[-1296,-32]],[[247949,451542],[-4,1919]],[[293146,454332],[-66,-9100]],[[293080,445232],[-482,-138],[-384,934],[-288,-777]],[[291926,445251],[-77,1003],[-501,1869],[338,2426],[-911,2621]],[[254614,455702],[218,-1446],[316,-5438]],[[255148,448818],[123,-1399]],[[255271,447419],[-6,-4485]],[[255265,442934],[-737,66],[-9,1648],[-322,-35],[-7,1623],[-327,774]],[[253863,447010],[319,582],[-16,5161],[-954,-144]],[[253212,452609],[67,3128]],[[252304,455724],[-37,-8080]],[[252267,447644],[0,-1641]],[[252267,446003],[-938,-57]],[[251329,445946],[-7,4904]],[[253212,452609],[3,-4870]],[[253215,447739],[-948,-95]],[[216537,454582],[2,-6500]],[[216539,448082],[-1559,-14]],[[214980,448068],[-230,-4],[4,4971]],[[301744,445961],[-236,-1674],[-533,-780]],[[300975,443507],[-36,3034],[-176,277]],[[300763,446818],[-87,707]],[[300676,447525],[-253,1172]],[[300423,448697],[-177,3889]],[[218154,454507],[10,-6475]],[[218164,448032],[-1572,52]],[[216592,448084],[-53,-2]],[[230110,453161],[-2,-5099]],[[230108,448062],[-976,13]],[[229132,448075],[-318,5]],[[228814,448080],[2,6471]],[[227843,454558],[1,-6473]],[[227844,448085],[-1288,-18]],[[226556,448067],[-8,3239]],[[228814,448080],[-648,2]],[[228166,448082],[-322,3]],[[219766,454469],[6,-6447]],[[219772,448022],[-1243,-2]],[[218529,448020],[-365,12]],[[225260,451282],[0,-3235]],[[225260,448047],[-1272,-15]],[[223988,448032],[-19,0]],[[223969,448032],[-6,6481]],[[221384,454468],[0,-6437]],[[221384,448031],[-1572,-10]],[[219812,448021],[-40,1]],[[222677,454502],[3,-6462]],[[222680,448040],[-1296,-9]],[[223969,448032],[-1263,4]],[[222706,448036],[-26,4]],[[265719,454399],[30,-6681]],[[265749,447718],[-327,-64]],[[265422,447654],[-1337,-251]],[[264085,447403],[-8,6830]],[[294378,453789],[-86,-7126]],[[294292,446663],[-33,-2600]],[[294259,444063],[-1125,-725],[-133,-918]],[[293001,442420],[79,2812]],[[302596,449333],[321,-1189],[408,-369],[764,1511],[-341,4569],[401,-2137],[107,-3239],[-210,-1768],[-1085,-604],[-241,-1586],[-502,-404],[144,4027]],[[262786,454214],[4,-5818]],[[262790,448396],[-1035,-6]],[[261755,448390],[-267,4]],[[261488,448394],[-3,5803]],[[264085,447403],[-109,-15]],[[263976,447388],[-1133,-180]],[[262843,447208],[-53,1188]],[[261488,448394],[-1023,-15]],[[260465,448379],[-349,0]],[[260116,448379],[69,741],[-9,5035]],[[260116,448379],[-774,27]],[[259342,448406],[-456,-2]],[[295712,453589],[-58,-1345],[397,121],[-173,-3103],[-189,-155],[94,-2951]],[[295783,446156],[-481,-2335],[-431,-845]],[[294871,442976],[-365,419],[-214,3268]],[[231269,450376],[205,-1283],[-160,-2129]],[[231314,446964],[-897,11]],[[230417,446975],[1,1083],[-310,4]],[[297103,453501],[5,-4180],[88,63],[182,-3932]],[[297378,445452],[-156,-333]],[[297222,445119],[-108,1173],[-581,-358],[-107,-908]],[[296426,445026],[-541,-412],[-102,1542]],[[298237,453401],[8,-1301],[-328,-15],[-2,-2289],[170,-1515],[-230,-737]],[[297855,447544],[-477,-2092]],[[247949,451542],[-252,-2717]],[[247697,448825],[-205,-1009]],[[247492,447816],[-632,692]],[[246860,448508],[-476,-580],[-516,680]],[[245868,448608],[0,3252]],[[299081,453014],[27,-5277]],[[299108,447737],[6,-1575]],[[299114,446162],[-459,-104],[-560,583],[-240,903]],[[300423,448697],[-95,-429]],[[300328,448268],[-110,206]],[[300218,448474],[-189,-592],[-921,-145]],[[291926,445251],[-301,-1608],[-771,-203],[-6,-1282]],[[290848,442158],[-634,1017],[-245,2280]],[[289969,445455],[47,2798],[-244,1860]],[[160757,452819],[3,-15155]],[[160760,437664],[-2931,-15]],[[157829,437649],[50,2566],[-253,887],[-643,-3074],[-236,36],[-242,-1729],[156,-2198],[-334,192],[-289,1393],[-274,-63],[-470,1939]],[[155294,437598],[-187,3492],[-519,272]],[[154588,441362],[111,941],[-260,2964],[146,1892],[-113,2512],[387,1397],[129,1813]],[[214980,448068],[2,-6471]],[[214982,441597],[-197,8],[0,-3232]],[[214785,438373],[-1547,1]],[[213238,438374],[-73,4047]],[[213165,442421],[1,5662],[-117,1089],[3,3792]],[[213165,442421],[-2040,-26]],[[211125,442395],[-4,4869]],[[211121,447264],[21,5656]],[[188448,452855],[2,-2742],[226,-3238],[-46,-2736],[-189,-2015]],[[188441,442124],[-433,106],[-167,-983],[-443,939]],[[187398,442186],[-88,2093],[-182,-89],[-193,3078],[-4,3038],[-315,2514]],[[211121,447264],[-1902,-23]],[[189737,445043],[-2,-6109]],[[189735,438934],[-608,-2000]],[[189127,436934],[120,1271],[-305,2684],[-249,88]],[[188693,440977],[-252,1147]],[[286968,452863],[88,-6473]],[[287056,446390],[-234,-102],[-57,-1948]],[[286765,444340],[-1655,896]],[[285110,445236],[-170,121]],[[284940,445357],[-144,7506]],[[284940,445357],[-238,-844],[-1781,-169]],[[282921,444344],[-29,8518]],[[187398,442186],[-205,139],[-194,-1813],[-584,5],[-711,-4841]],[[185704,435676],[-852,-1423],[-3463,-5]],[[181389,434248],[1,18498]],[[173097,434253],[-1,-6651],[-636,-10],[-149,-2165]],[[172311,425427],[-25,2930],[-933,15],[0,3230],[-3183,-37],[0,1955],[-1457,-9]],[[166713,433511],[-57,0],[17,19239]],[[173097,452848],[0,-18595]],[[181389,434248],[-13,-16439]],[[181376,417809],[-3391,104],[-1592,99]],[[176393,418012],[-461,-9],[-438,10035],[-1,6209],[-1195,9]],[[174298,434256],[-1201,-3]],[[281230,452863],[9,-7106]],[[281239,445757],[-601,-298]],[[280638,445459],[-179,516],[-1317,-113]],[[279142,445862],[103,6951]],[[282921,444344],[4,-1186]],[[282925,443158],[-1089,-71]],[[281836,443087],[-171,12],[-426,2658]],[[154588,441362],[-303,-18],[-4,1572],[-819,-16]],[[153462,442900],[-267,5082],[-262,812],[123,4043]],[[289969,445455],[-804,-6748]],[[289165,438707],[-411,-130]],[[288754,438577],[180,478],[-59,7138]],[[288875,446193],[-56,6647]],[[288875,446193],[-721,12]],[[288154,446205],[-1098,185]],[[279142,445862],[-1549,13]],[[277593,445875],[-281,-13]],[[277312,445862],[2,4212]],[[164792,452768],[-2,-15095]],[[164790,437673],[-3709,-1]],[[161081,437672],[-321,-8]],[[166713,433511],[-9,-8230],[-71,-9],[-2,-9666],[318,13]],[[166949,415619],[45,-3525],[106,-405],[-51,-2898]],[[167049,408791],[-264,-205]],[[166785,408586],[-505,-709],[-438,-1338],[-205,182],[104,-3535],[-151,-1501]],[[165590,401685],[-469,-1590],[-343,3]],[[164778,400098],[-9,2800]],[[164769,402898],[12,2458]],[[164781,405356],[6,5108]],[[164787,410464],[3,27209]],[[253863,447010],[-4,809],[-643,-82]],[[253216,447737],[-1,2]],[[274786,450060],[0,-6514]],[[274786,443546],[-1348,42]],[[273438,443588],[-1,3974]],[[273437,447562],[3,2573]],[[273440,450135],[1346,2308]],[[245868,448608],[-3,-3243]],[[245865,445365],[-1300,22]],[[244565,445387],[1,4872]],[[249404,451036],[-5,-5898]],[[249399,445138],[-644,-16]],[[248755,445122],[-900,11]],[[247855,445133],[-158,3692]],[[226556,448067],[2,-4023]],[[226558,444044],[-753,-845],[-533,-1]],[[225272,443198],[-12,4849]],[[251329,445946],[-636,7],[1,-814]],[[250694,445139],[-1295,-1]],[[232889,450323],[0,-4862],[165,-1791]],[[233054,443670],[-1389,16]],[[231665,443686],[-256,439],[-95,2839]],[[243270,450293],[6,-6524]],[[243276,443769],[-326,-13]],[[242950,443756],[-979,-17]],[[241971,443739],[-2,6572]],[[237742,450323],[68,-6545]],[[237810,443778],[-1255,-153]],[[236555,443625],[-107,1818],[-1,4872]],[[234183,450322],[1,-4860],[144,-1818]],[[234328,443644],[-317,10]],[[234011,443654],[-957,16]],[[235153,450303],[2,-4797],[121,-1872]],[[235276,443634],[-948,10]],[[241971,443739],[-319,-4]],[[241652,443735],[-960,-14]],[[240692,443721],[-26,6583]],[[239045,450317],[53,-6615]],[[239098,443702],[0,-314]],[[239098,443388],[-1288,390]],[[240692,443721],[-320,-6]],[[240372,443715],[-1274,-13]],[[236555,443625],[-1279,9]],[[244565,445387],[-5,-3261]],[[244560,442126],[-322,12]],[[244238,442138],[-104,1623],[-858,8]],[[273437,447562],[-275,-15],[3,-1357],[-539,-11],[-3,-1320],[-265,-4]],[[272358,444855],[-272,1146]],[[272086,446001],[570,2452],[784,1682]],[[277312,445862],[-602,-34],[-476,-2456]],[[276234,443372],[-1448,-20]],[[274786,443352],[0,194]],[[247855,445133],[-29,-825],[-657,-1555],[-5,-2418]],[[247164,440335],[-1778,120]],[[245386,440455],[0,4]],[[245386,440459],[89,1581],[707,640]],[[246182,442680],[363,171],[871,2340],[76,2625]],[[300676,447525],[-94,-1308],[-254,2051]],[[246182,442680],[7,2674],[-324,11]],[[300218,448474],[-108,-2110]],[[300110,446364],[-154,-894],[-847,-110]],[[299109,445360],[5,802]],[[260465,448379],[14,-4389]],[[260479,443990],[3,-1610]],[[260482,442380],[-1130,-18]],[[259352,442362],[-1,806]],[[259351,443168],[-9,5238]],[[259351,443168],[-1136,-50],[2,-810]],[[258217,442308],[-163,-1]],[[258054,442307],[104,4029],[-102,2054]],[[258054,442307],[-490,-569],[-231,-2173],[-408,-905]],[[256925,438660],[-7,8808]],[[256918,447468],[301,934]],[[262847,444118],[-1085,-69]],[[261762,444049],[-7,4341]],[[262843,447208],[4,-3090]],[[261762,444049],[-1283,-59]],[[229132,448075],[0,-5329]],[[229132,442746],[-759,-1483],[-211,138]],[[228162,441401],[4,6681]],[[228162,441401],[-318,227]],[[227844,441628],[-643,-1180]],[[227201,440448],[0,1151],[-292,1]],[[226909,441600],[0,2456],[-351,-12]],[[230417,446975],[2,-2974],[320,-2434]],[[230739,441567],[-395,2]],[[230344,441569],[-276,747],[-936,373]],[[229132,442689],[0,57]],[[218529,448020],[-5,-6446]],[[218524,441574],[-1550,27]],[[216974,441601],[-383,9]],[[216591,441610],[1,6474]],[[216591,441610],[-1609,-13]],[[225272,443198],[0,-1617]],[[225272,441581],[-1262,6]],[[224010,441587],[-20,-2]],[[223990,441585],[-2,6447]],[[222706,448036],[25,-6450]],[[222731,441586],[-12,-6463]],[[222719,435123],[-609,-9]],[[222110,435114],[-2224,2]],[[219886,435116],[-74,6454]],[[219812,441570],[0,6451]],[[219812,441570],[-1288,4]],[[223990,441585],[-1259,1]],[[267414,445850],[-697,-80]],[[266717,445770],[-430,-32],[-394,-2264],[-479,-1510]],[[265414,441964],[1,1360]],[[265415,443324],[7,4330]],[[265749,447718],[781,161]],[[266530,447879],[6,1]],[[266536,447880],[30,6]],[[266566,447886],[16,1]],[[266582,447887],[26,6]],[[266608,447893],[806,-2043]],[[255265,442934],[-2,-3134]],[[255263,439800],[-1357,-110],[6,-1614],[-648,-80]],[[253264,437996],[-23,4868]],[[253241,442864],[-25,4873]],[[267414,445850],[546,-1925],[381,1255],[294,-1578],[-868,-836]],[[267767,442766],[-50,-4]],[[267717,442762],[-15,-1]],[[267702,442761],[-769,5],[-213,794]],[[266720,443560],[-3,2210]],[[253241,442864],[-956,-107]],[[252285,442757],[-18,3246]],[[265415,443324],[-1279,-37]],[[264136,443287],[-108,529],[-52,3572]],[[273438,443588],[0,-2864]],[[273438,440724],[-1081,8]],[[272357,440732],[1,4123]],[[299109,445360],[-23,-3357],[-140,-1618]],[[298946,440385],[-436,-421],[-482,288],[-416,-840],[-291,2723]],[[297321,442135],[350,235],[-50,1824],[-299,-181],[-100,1106]],[[256110,445860],[11,-7106]],[[256121,438754],[-158,-435]],[[255963,438319],[-386,-1051],[-314,71]],[[255263,437339],[0,2461]],[[255271,447419],[248,-1015],[591,-544]],[[256925,438660],[-559,918],[-245,-824]],[[256110,445860],[808,1608]],[[264136,443287],[1,-1079]],[[264137,442208],[-1288,-29]],[[262849,442179],[-2,1939]],[[211125,442395],[-24,-800]],[[211101,441595],[-1879,-26]],[[209222,441569],[-1,3184]],[[231665,443686],[164,-2163]],[[231829,441523],[-1090,44]],[[300704,446133],[-85,-2793],[-210,505],[295,2288]],[[300975,443507],[-208,-748],[-4,4059]],[[294871,442976],[348,-1153],[336,-2034],[-121,-1229]],[[295434,438560],[-200,-1187],[-705,-2090],[-626,-1185]],[[293903,434098],[-195,2025],[683,2086],[-173,2860]],[[294218,441069],[41,2994]],[[209222,441569],[-4,-7295]],[[209218,434274],[-2479,-59]],[[206739,434215],[-930,1]],[[300110,446364],[27,-3366],[-179,-1833],[-1042,-1242],[30,462]],[[288154,446205],[-316,-4003]],[[287838,442202],[-487,-794],[-761,-136]],[[286590,441272],[175,3068]],[[297321,442135],[207,-2884],[-531,-114]],[[296997,439137],[-298,3270],[-256,-278],[-17,2897]],[[296997,439137],[9,-62]],[[297006,439075],[21,-79]],[[297027,438996],[-1112,58],[-473,-1600],[-8,1106]],[[288754,438577],[-264,-1321]],[[288490,437256],[-133,486],[-104,2827],[-415,1633]],[[293001,442420],[-13,-2190]],[[292988,440230],[-683,-3302]],[[292305,436928],[-373,1054]],[[291932,437982],[-934,2867]],[[290998,440849],[-150,1309]],[[252285,442757],[26,-6500]],[[252311,436257],[-960,-39],[-1,-3314]],[[251350,432904],[-324,-34]],[[251026,432870],[0,3329],[-319,-14]],[[250707,436185],[-5,3838]],[[250702,440023],[-8,5116]],[[272357,440732],[-1,0]],[[272356,440732],[-569,47],[73,-1359],[-321,-13]],[[271539,439407],[-538,-38]],[[271001,439369],[3,1405],[-263,14],[8,2861]],[[270749,443649],[623,-332],[714,2684]],[[280638,445459],[-3,-3672],[463,-4],[46,-3243]],[[281144,438540],[-1140,433],[-177,-968]],[[279827,438005],[-70,1137],[-624,1848],[-379,-396]],[[278754,440594],[88,2092],[292,-302],[8,3478]],[[278754,440594],[-317,-166]],[[278437,440428],[5,1839],[-538,103],[-216,-927]],[[277688,441443],[-95,4432]],[[277688,441443],[-1,-945],[-351,-264],[-253,-2768]],[[277083,437466],[-849,-18]],[[276234,437448],[0,5924]],[[269692,442195],[16,-2668]],[[269708,439527],[-1391,120]],[[268317,439647],[-18,2605],[-150,10]],[[268149,442262],[253,825],[384,-407]],[[268786,442680],[-5,-153]],[[268781,442527],[480,-1172],[431,840]],[[266720,443560],[-15,-4583]],[[266705,438977],[-3,-1624]],[[266702,437353],[-1282,19]],[[265420,437372],[-6,4592]],[[281836,443087],[1,-1967],[-292,-2833]],[[281545,438287],[-401,253]],[[290998,440849],[-384,-1439],[-427,-3445]],[[290187,435965],[-461,1079],[82,1909],[-643,-246]],[[245386,440459],[-830,46],[4,1621]],[[285110,445236],[175,-3416],[441,-1905],[405,-536]],[[286131,439379],[-539,-2232]],[[285592,437147],[-256,304]],[[285336,437451],[-455,-615]],[[284881,436836],[-228,-951],[-463,-355]],[[284190,435530],[-1068,5402],[-197,2226]],[[286590,441272],[-78,-1277]],[[286512,439995],[-381,-616]],[[250702,440023],[-480,-176],[-57,-1256],[-306,11],[0,-1588]],[[249859,437014],[-479,1]],[[249380,437015],[-1,1587],[-610,12]],[[248769,438614],[-14,6508]],[[248769,438614],[-31,-1592],[-323,7]],[[248415,437029],[-1262,34]],[[247153,437063],[11,3272]],[[192516,434205],[-2782,5],[1,4724]],[[262849,442179],[1,-2880]],[[262850,439299],[-1082,-133]],[[261768,439166],[-6,4883]],[[261768,439166],[-323,-1]],[[261445,439165],[-639,38],[-321,533]],[[260485,439736],[-3,2644]],[[226909,441600],[-6,-1597],[-967,-298],[-621,-536],[-31,2413]],[[225284,441582],[-12,-1]],[[293006,440243],[-18,-18]],[[292988,440225],[0,5]],[[294218,441069],[-1212,-826]],[[302428,442673],[372,-1939],[-773,-264],[113,1840],[288,363]],[[271001,439369],[-263,5],[-6,-1403],[-273,-2],[-271,-1169],[-5,-1369]],[[270183,435431],[-459,41]],[[269724,435472],[-16,4055]],[[269692,442195],[936,1653],[121,-199]],[[244238,442138],[-5,-4866]],[[244233,437272],[-641,8]],[[243592,437280],[-640,13]],[[242952,437293],[-2,6463]],[[239098,443388],[2,-6149]],[[239100,437239],[-639,12]],[[238461,437251],[-646,14]],[[237815,437265],[-5,6513]],[[242952,437293],[-653,-16]],[[242299,437277],[-642,-14]],[[241657,437263],[-5,6472]],[[237815,437265],[-627,-98]],[[237188,437167],[-633,7]],[[236555,437174],[0,6451]],[[241657,437263],[-642,-12]],[[241015,437251],[-638,-8]],[[240377,437243],[-5,6472]],[[240377,437243],[-639,-2]],[[239738,437241],[-638,-2]],[[234011,443654],[-4,-6441]],[[234007,437213],[-636,14]],[[233371,437227],[-1382,-2]],[[231989,437225],[-120,575]],[[231869,437800],[88,2413],[-128,1310]],[[235276,443634],[0,-6443]],[[235276,437191],[-633,8]],[[234643,437199],[-636,14]],[[236555,437174],[-638,8]],[[235917,437182],[-641,9]],[[274786,443352],[1,-6623]],[[274787,436729],[-1339,18]],[[273448,436747],[-10,3977]],[[267702,442761],[447,-499]],[[268317,439647],[3,-645]],[[268320,439002],[-1615,-25]],[[276234,437448],[-271,-1900]],[[275963,435548],[-140,819],[-1037,201]],[[274786,436568],[1,161]],[[265420,437372],[-967,-37]],[[264453,437335],[-1,4878],[-315,-5]],[[259352,442362],[14,-4890],[-65,-6]],[[259301,437466],[-1086,-26]],[[258215,437440],[2,4868]],[[284190,435530],[0,-456]],[[284190,435074],[-1015,-1516],[-180,1961],[-470,731],[-132,1393],[-289,-77],[-14,1365],[-389,-1859]],[[281701,437072],[-156,1215]],[[155294,437598],[-138,-2080],[141,-717],[-208,-2138],[-386,312],[218,-3716],[-6,-13593]],[[154915,415666],[-1334,-12]],[[153581,415654],[-243,1901],[-703,2914],[-129,3412],[387,4770],[132,-280],[308,6363],[-131,874],[260,7292]],[[253264,437996],[-21,-1627]],[[253243,436369],[-932,-112]],[[229132,442689],[-7,-7583]],[[229125,435106],[-7,1]],[[229118,435107],[-1274,15]],[[227844,435122],[0,6506]],[[230344,441569],[400,-3784]],[[230744,437785],[23,-2699]],[[230767,435086],[-404,-540]],[[230363,434546],[0,542],[-1238,18]],[[260485,439736],[-89,-4618]],[[260396,435118],[-728,-71]],[[259668,435047],[-364,782],[-3,1637]],[[213238,438374],[-29,-4081]],[[213209,434293],[-91,-1]],[[213118,434292],[-2030,-1]],[[211088,434291],[13,7304]],[[278437,440428],[-17,-5242]],[[278420,435186],[-185,-771],[-669,-629],[-401,1395],[-70,2246]],[[277095,437427],[-12,39]],[[188693,440977],[-212,-2506],[-449,-761],[-413,552],[-140,-1426]],[[187479,436836],[-928,257],[-847,-1417]],[[258215,437440],[-1290,17]],[[256925,437457],[0,1203]],[[288490,437256],[-135,-732]],[[288355,436524],[-329,-581],[98,-1543],[-739,-1772]],[[287385,432628],[-586,684]],[[286799,433312],[-59,3514],[-251,1238],[23,1931]],[[264453,437335],[-316,-6]],[[264137,437329],[-325,1637],[-962,-17]],[[262850,438949],[0,350]],[[245386,440455],[-115,-1740],[344,-1568],[113,-1545]],[[245728,435602],[-1175,26]],[[244553,435628],[2,1613],[-322,31]],[[216974,441601],[-2,-6470],[56,-810]],[[217028,434321],[-2233,-1]],[[214795,434320],[-10,4053]],[[219886,435116],[3,-6448]],[[219889,428668],[-1545,-2]],[[218344,428666],[-1309,-44]],[[217035,428622],[-7,5699]],[[304069,440802],[121,-1847],[-424,-197],[303,2044]],[[227844,435122],[-1276,-6]],[[226568,435116],[-6,2365]],[[226562,437481],[639,2967]],[[211088,434291],[-535,-10]],[[210553,434281],[-1335,-7]],[[226562,437481],[-534,-2005],[-733,-3605]],[[225295,431871],[-11,3241]],[[225284,435112],[0,6470]],[[225284,435112],[-1212,5]],[[224072,435117],[-74,0]],[[223998,435117],[12,6470]],[[223998,435117],[-1279,6]],[[231869,437800],[-1125,-15]],[[189127,436934],[-680,-1517],[-235,-1307],[316,-2474],[-193,-1471],[-256,343]],[[188079,430508],[-272,1154]],[[187807,431662],[-214,1796],[-114,3378]],[[279827,438005],[-264,-1317],[-1,-4191]],[[279562,432497],[-1143,101]],[[278419,432598],[1,2588]],[[157829,437649],[146,-436],[-429,-4820],[-421,-4012],[145,-2152],[-836,-2813],[-185,-2444]],[[156249,420972],[222,-710],[144,-5037]],[[156615,415225],[-1701,-22],[1,463]],[[293524,432082],[-325,588]],[[293199,432670],[123,2992],[-28,2071],[-288,2510]],[[293903,434098],[-379,-2016]],[[291932,437982],[-383,-2133]],[[291549,435849],[-417,-3054],[-322,-187]],[[290810,432608],[-554,3400]],[[290256,436008],[-69,-43]],[[272356,440732],[-5,-6697]],[[272351,434035],[-74,-1524],[-634,144]],[[271643,432655],[-114,1381]],[[271529,434036],[10,5371]],[[273448,436747],[0,-2714],[-243,-5]],[[273205,434028],[-854,7]],[[247153,437063],[-6,-1623]],[[247147,435440],[-963,88]],[[246184,435528],[-456,35]],[[245728,435563],[0,39]],[[250707,436185],[-548,-8],[-300,837]],[[293219,434221],[-863,2534]],[[292356,436755],[-51,173]],[[292988,440225],[220,-3323],[11,-2681]],[[286799,433312],[-277,-2753],[-204,-490]],[[286318,430069],[-412,1992]],[[285906,432061],[44,1187],[-292,2181],[-66,1718]],[[255263,437339],[2,-2898]],[[255265,434441],[-1688,-234]],[[253577,434207],[-321,-56]],[[253256,434151],[-13,2218]],[[261445,439165],[-77,-4820]],[[261368,434345],[-859,-54]],[[260509,434291],[-113,827]],[[294554,427872],[-111,3761]],[[294443,431633],[-93,1192],[769,-305],[174,1128],[1072,-46],[376,298],[903,2985],[-441,-2838],[-371,-1388],[292,-372],[379,1926],[532,898],[205,-1023],[552,1761],[82,-626],[-1554,-3632],[-192,472],[-405,-1606],[-231,346],[-428,-1336],[-389,99],[-351,-945],[-238,353],[-532,-1102]],[[269724,435472],[-278,-7],[9,-1349]],[[269455,434116],[-813,51]],[[268642,434167],[-292,19]],[[268350,434186],[-30,4816]],[[256925,437457],[-1,-4839]],[[256924,432618],[-156,-1387],[-315,-5],[2,-1882]],[[256455,429344],[-469,-1]],[[255986,429343],[-23,8976]],[[271529,434036],[-1228,59]],[[270301,434095],[-118,1336]],[[262850,438949],[1,-4898]],[[262851,434051],[1,-1244]],[[262852,432807],[-755,-89]],[[262097,432718],[-730,-14]],[[261367,432704],[1,1641]],[[268350,434186],[-789,-60]],[[267561,434126],[-857,-30]],[[266704,434096],[-2,3257]],[[281701,437072],[-194,-834],[74,-2825],[-363,-706],[-462,-3035],[47,-403]],[[280803,429269],[26,-143]],[[280829,429126],[-1257,-6]],[[279572,429120],[-10,3377]],[[192649,434205],[0,-3424]],[[192649,430781],[-728,405],[-315,-879],[-787,-888],[-261,131],[-420,-1293]],[[190138,428257],[-340,-1866],[-343,-529],[-618,1479],[-69,1143],[-267,-1698],[-177,190]],[[188324,426976],[-245,3532]],[[284190,435074],[-613,-3675]],[[283577,431399],[-884,-2182]],[[282693,429217],[-399,259],[-333,-970],[-479,890]],[[281482,429396],[-679,-127]],[[290256,436008],[-428,-2351]],[[289828,433657],[-466,-1940],[-519,-917]],[[288843,430800],[-280,2542],[218,671],[-426,2511]],[[264137,437329],[-1,-3255],[-160,-7]],[[263976,434067],[-1125,-16]],[[249380,437015],[-1,-3256]],[[249379,433759],[-966,19]],[[248413,433778],[2,3251]],[[214795,434320],[-2,-28]],[[214793,434292],[-1584,1]],[[255986,429343],[-721,8]],[[255265,429351],[0,5090]],[[292587,430897],[-395,1442]],[[292192,432339],[-104,1880],[-539,1630]],[[292356,436755],[-165,-2166],[367,-971],[29,-2721]],[[231989,437225],[3,-1985]],[[231992,435240],[-431,236],[-484,-1309],[-310,919]],[[164787,410464],[-407,-275]],[[164380,410189],[102,1081],[5,3235],[-258,1376],[-24,1351],[-366,545],[-472,2488],[-707,1250],[-457,-2310],[-371,1200],[1,3539],[-743,-22]],[[161090,423922],[22,8573],[-31,5177]],[[161090,423922],[-473,4]],[[160617,423926],[-1427,-349],[-831,-1032],[-549,336],[-407,-1138],[-271,689],[-883,-1460]],[[285336,437451],[-167,-4196],[366,397],[371,-1591]],[[286318,430069],[-895,-2188]],[[285423,427881],[-525,-887],[-165,332]],[[284733,427326],[26,188]],[[284759,427514],[265,1448],[124,3090]],[[285148,432052],[-223,1660],[-44,3124]],[[259668,435047],[-2,-813]],[[259666,434234],[-620,-58],[0,-1610]],[[259046,432566],[-835,5]],[[258211,432571],[4,4869]],[[226568,435116],[1,-6480]],[[226569,428636],[-1260,-4]],[[225309,428632],[-14,-1]],[[225295,428631],[0,3240]],[[258211,432571],[-314,19]],[[257897,432590],[-973,28]],[[277095,437427],[-6,-9328]],[[277089,428099],[-1270,90]],[[275819,428189],[-27,3362]],[[275792,431551],[-19,2706],[190,1291]],[[278419,432598],[1,-2521],[-655,-4576]],[[277765,425501],[-675,2580]],[[277090,428081],[-1,18]],[[266704,434096],[-266,-3234]],[[266438,430862],[-1015,34]],[[265423,430896],[-1,1871]],[[265422,432767],[-2,4605]],[[265422,432767],[-638,-293],[0,-813],[-644,-36]],[[264140,431625],[-164,2442]],[[243592,437280],[-8,-4878]],[[243584,432402],[-1283,-20]],[[242301,432382],[-2,4895]],[[244553,435628],[-3,-4868],[-104,1]],[[244446,430761],[-862,15]],[[243584,430776],[0,1626]],[[242301,432382],[-1281,-16]],[[241020,432366],[-5,4885]],[[238461,437251],[3,-4896]],[[238464,432355],[-1277,-24]],[[237187,432331],[1,4836]],[[239738,437241],[4,-4883]],[[239742,432358],[-1278,-3]],[[241020,432366],[-1278,-8]],[[233371,437227],[-2,-4811]],[[233369,432416],[-1193,2]],[[232176,432418],[-184,2822]],[[234643,437199],[-2,-4800]],[[234641,432399],[-1272,17]],[[235917,437182],[-1,-4805]],[[235916,432377],[-1275,22]],[[237187,432331],[-1271,46]],[[187807,431662],[-565,-723],[-182,1854],[-716,-2763]],[[186344,430030],[-640,5646]],[[248413,433778],[-2,-4886]],[[248411,428892],[-1277,44]],[[247134,428936],[13,6504]],[[285148,432052],[-398,107],[-1152,-1498]],[[283598,430661],[-21,738]],[[251026,432870],[-1183,-88]],[[249843,432782],[68,968],[-532,9]],[[292970,430541],[-431,-269]],[[292539,430272],[48,625]],[[293219,434221],[-249,-3680]],[[274786,436568],[0,-4189]],[[274786,432379],[-1580,38]],[[273206,432417],[-1,1611]],[[288843,430800],[-376,-510]],[[288467,430290],[-415,-967]],[[288052,429323],[-667,3305]],[[275792,431551],[-1004,-68]],[[274788,431483],[-2,896]],[[253256,434151],[34,-7012],[-625,-15]],[[252665,427124],[-321,-16],[-28,2626],[-961,-79]],[[251355,429655],[-5,3249]],[[290810,432608],[-339,-2310]],[[290471,430298],[-220,-1439],[-616,-2210]],[[289635,426649],[-20,311]],[[289615,426960],[68,3155],[341,1723],[-196,1819]],[[292192,432339],[-162,208],[-116,-3152]],[[291914,429395],[-248,-1212]],[[291666,428183],[-265,1560],[-471,-723]],[[290930,429020],[-459,1278]],[[186344,430030],[155,-1074],[97,-4631]],[[186596,424325],[-109,-154],[37,-2824],[149,-2529],[-95,-2971]],[[186578,415847],[-452,-1998],[-1271,-19],[-3480,52]],[[181375,413882],[1,3927]],[[245728,435563],[-37,-2695],[-356,-1884],[-63,-2389]],[[245272,428595],[-424,1079]],[[244848,429674],[-402,1087]],[[246184,435528],[-12,-8061]],[[246172,427467],[-319,64]],[[245853,427531],[-783,-26]],[[245070,427505],[202,1090]],[[247134,428936],[-3,-1616]],[[247131,427320],[-959,147]],[[270301,434095],[8,-6024]],[[270309,428071],[-263,-11],[2,-1850]],[[270048,426210],[-326,-246]],[[269722,425964],[-6,3195],[-215,1865],[-46,3092]],[[232176,432418],[-58,-2195]],[[232118,430223],[-1754,3]],[[230364,430226],[-1,4320]],[[227844,435122],[-1,-6484]],[[227843,428638],[-1271,-2]],[[226572,428636],[-3,0]],[[225295,428631],[-1221,12]],[[224074,428643],[-2,6474]],[[222110,435114],[25,-6995]],[[222135,428119],[-630,263]],[[221505,428382],[-943,281]],[[220562,428663],[-673,5]],[[224074,428643],[-9,-170]],[[224065,428473],[-507,-690],[-760,186]],[[222798,427969],[-663,150]],[[229118,435107],[-7,-6481]],[[229111,428626],[-1268,12]],[[230364,430226],[0,-4858]],[[230364,425368],[-1251,12]],[[229113,425380],[-2,3246]],[[260509,434291],[14,-6500]],[[260523,427791],[-630,-27]],[[259893,427764],[-208,-13],[-19,6483]],[[255265,429351],[-1,-4575]],[[255264,424776],[-1140,-98]],[[254124,424678],[-508,40],[-39,9489]],[[261367,432704],[3,-4889],[-318,-15]],[[261052,427800],[-529,-9]],[[210532,425375],[-1577,18],[-7,-9746]],[[208948,415647],[-2260,-10]],[[206688,415637],[-254,-1]],[[206434,415636],[-6,4869]],[[206428,420505],[-5,1629],[310,-3],[6,12084]],[[210553,434281],[-21,-8906]],[[217035,428622],[-272,6]],[[216763,428628],[-1968,-10]],[[214795,428618],[0,969]],[[214795,429587],[-2,4705]],[[201978,423908],[55,-1918],[16,-7760]],[[202049,414230],[-1129,-108]],[[200920,414122],[-15,3214]],[[200905,417336],[-2,2479],[-1118,-26]],[[199785,419789],[29,5937],[320,1081],[-11,7495]],[[201402,434297],[26,-1459],[436,-670],[159,-1784],[-185,-3985],[140,-2491]],[[204199,424684],[-292,-2572],[-164,468],[-589,-929],[-98,691],[-519,-162],[-107,1114],[-340,-603],[-112,1217]],[[203264,434210],[15,-1191],[530,-3758],[390,-4577]],[[199785,419789],[-1878,-31],[-2612,18]],[[195295,419776],[7,8024]],[[195302,427800],[-6,6461]],[[213087,423794],[-321,0]],[[212766,423794],[-1910,-39]],[[210856,423755],[-5,1618],[-319,2]],[[213118,434292],[7,-4708]],[[213125,429584],[-38,-5790]],[[214795,429587],[-1670,-3]],[[195302,427800],[-315,562],[-118,3255],[-531,-11],[-250,-2208],[-269,1599],[-807,-1146],[-299,857]],[[192713,430708],[-64,73]],[[176393,418012],[113,-5116],[-101,-2197],[49,-2635],[-263,-2403],[2,-5633]],[[176193,400028],[-1933,-7]],[[174260,400021],[29,16934],[-18,16297],[27,1004]],[[174260,400021],[-2037,36],[-1236,-1303]],[[170987,398754],[153,2224],[-118,2607],[482,3073],[266,298],[86,1838],[-89,2169],[75,3206],[-204,1481]],[[171638,415650],[673,9777]],[[206428,420505],[-1667,-25]],[[204761,420480],[-562,4204]],[[259893,427764],[3,-1604]],[[259896,426160],[-839,-53]],[[259057,426107],[-11,6459]],[[268642,434167],[-7,-5295]],[[268635,428872],[-365,-116]],[[268270,428756],[-705,-39]],[[267565,428717],[-4,5409]],[[254124,424678],[8,-1608]],[[254132,423070],[-1470,-13]],[[252662,423057],[3,4067]],[[269722,425964],[-798,-95]],[[268924,425869],[-10,2970],[-279,33]],[[267565,428717],[-860,-299]],[[266705,428418],[-211,275],[-56,2169]],[[271643,432655],[-7,-4586]],[[271636,428069],[-1327,2]],[[264140,431625],[-158,-803],[1,-2439]],[[263983,428383],[-165,-1]],[[263818,428382],[0,807],[-964,-2]],[[262854,429187],[-2,3620]],[[273206,432417],[-2,-3235]],[[273204,429182],[-418,-80],[-224,-1340]],[[272562,427762],[-923,-316]],[[271639,427446],[-3,623]],[[249843,432782],[-231,-3232]],[[249612,429550],[-356,-3635],[-528,-731]],[[248728,425184],[-4,2060],[-320,38],[7,1610]],[[289615,426960],[-382,-1335]],[[289233,425625],[-268,2542],[-150,-335],[-348,2458]],[[171638,415650],[-2672,-44],[-2017,13]],[[288052,429323],[-372,-1084]],[[287680,428239],[-781,-2648],[-748,-727]],[[286151,424864],[-265,1103]],[[285886,425967],[-463,1914]],[[274788,431483],[-1,-3962]],[[274787,427521],[-415,-1047]],[[274372,426474],[-540,317]],[[273832,426791],[-154,2374],[-474,17]],[[251355,429655],[-154,-1644],[-415,-1270],[-378,-47]],[[250408,426694],[-162,394],[-9,2476],[-625,-14]],[[262854,429187],[-1,-2903]],[[262853,426284],[-742,-74]],[[262111,426210],[-14,6508]],[[265423,430896],[0,-3263]],[[265423,427633],[-634,-31],[-321,800],[-485,-19]],[[188324,426976],[-114,-601]],[[188210,426375],[-465,-891],[-618,-2134],[-142,895],[-389,80]],[[293524,432082],[-12,-1259],[-325,-351]],[[293187,430472],[-27,1524]],[[293160,431996],[39,674]],[[262111,426210],[-369,-18]],[[261742,426192],[-685,-6]],[[261057,426186],[-5,1614]],[[294554,427872],[-875,-1167]],[[293679,426705],[-79,470]],[[293600,427175],[63,323]],[[293663,427498],[119,2121],[-126,535]],[[293656,430154],[90,1670],[410,854],[287,-1045]],[[257897,432590],[-1,-3261]],[[257896,429329],[-463,33],[-65,-3266]],[[257368,426096],[-903,15]],[[256465,426111],[-10,3233]],[[259057,426107],[-583,-24]],[[258474,426083],[2,2440],[-422,-1],[-158,807]],[[279572,429120],[-482,-6118]],[[279090,423002],[-351,-508],[-158,819],[-661,807],[-155,1381]],[[292539,430272],[83,-963]],[[292622,429309],[-118,-889]],[[292504,428420],[-590,975]],[[233369,432416],[31,-5977]],[[233400,426439],[-1091,87]],[[232309,426526],[-329,3028],[138,669]],[[234641,432399],[38,-6061]],[[234679,426338],[-801,63]],[[233878,426401],[-478,38]],[[235916,432377],[-1,-6119]],[[235915,426258],[-449,10]],[[235466,426268],[-787,70]],[[243584,430776],[5,-4002]],[[243589,426774],[-630,136]],[[242959,426910],[-660,-98]],[[242299,426812],[2,5570]],[[242299,426812],[-476,-61]],[[241823,426751],[-800,-120]],[[241023,426631],[-3,5735]],[[237187,432331],[-2,-6015]],[[237185,426316],[-604,-38]],[[236581,426278],[-666,-20]],[[238464,432355],[-1,-5921]],[[238463,426434],[-606,-50]],[[237857,426384],[-672,-68]],[[239742,432358],[1,-5855]],[[239743,426503],[-772,-67]],[[238971,426436],[-508,-2]],[[241023,426631],[-213,-26]],[[240810,426605],[-1067,-102]],[[284759,427514],[-273,768],[-697,261]],[[283789,428543],[-185,151],[-6,1967]],[[293187,430472],[-271,-1807],[244,3331]],[[195295,419776],[-1,-10465]],[[195294,409311],[0,-3031]],[[195294,406280],[-156,-665],[-2555,-5]],[[192583,405610],[1,135]],[[192584,405745],[-39,1805],[122,2542],[304,1923],[-230,5]],[[192741,412020],[-28,18688]],[[275819,428189],[-81,-1216],[-510,-2451]],[[275228,424522],[-441,-3]],[[274787,424519],[0,3002]],[[282497,422685],[-451,359],[271,1888],[-71,939],[431,2360],[16,986]],[[283789,428543],[-584,-2082],[-708,-3776]],[[192741,412020],[-2481,120]],[[190260,412140],[-95,1614]],[[190165,413754],[-27,14503]],[[266705,428418],[4,-3381]],[[266709,425037],[-283,-21]],[[266426,425016],[-1003,645]],[[265423,425661],[0,1972]],[[292970,430541],[-211,-2552],[-210,-378],[73,1698]],[[245070,427505],[-470,-582],[-146,-1016],[115,-2813],[-151,-420]],[[244418,422674],[-829,4100]],[[293663,427498],[-315,245]],[[293348,427743],[-288,1615]],[[293060,429358],[139,999],[457,-203]],[[290930,429020],[33,-2516],[-174,-1499],[76,-1477]],[[290865,423528],[-301,-1443],[-241,-92]],[[290323,421993],[-332,1496],[-16,2220],[-340,940]],[[289233,425625],[-418,-2203]],[[288815,423422],[-127,532]],[[288688,423954],[-1008,4285]],[[232309,426526],[155,-1143]],[[232464,425383],[-995,-12]],[[231469,425371],[-1105,-3]],[[291666,428183],[-6,-1402]],[[291660,426781],[-177,-793],[187,-1217],[-446,-2170]],[[291224,422601],[-359,927]],[[252662,423057],[2,-2183]],[[252664,420874],[-322,-1]],[[252342,420873],[-1598,9]],[[250744,420882],[-321,803]],[[250423,421685],[-15,5009]],[[214795,428618],[0,-4795]],[[214795,423823],[-1708,-29]],[[250423,421685],[-945,-94]],[[249478,421591],[-311,-17],[-6,2159],[-579,14]],[[248582,423747],[146,1437]],[[282497,422685],[136,-2142]],[[282633,420543],[-450,-3766]],[[282183,416777],[-753,1929]],[[281430,418706],[-282,1104],[-60,1366]],[[281088,421176],[343,3266],[-54,1256]],[[281377,425698],[-185,2188],[290,1510]],[[281088,421176],[-85,-1011],[-408,1094],[-38,-1088],[-480,1549]],[[280077,421720],[157,810],[68,2530],[527,4066]],[[293348,427743],[-53,-1237],[-451,497],[216,2355]],[[256465,426111],[5,-1623]],[[256470,424488],[-1206,27]],[[255264,424515],[0,261]],[[292504,428420],[-134,-1705]],[[292370,426715],[-710,66]],[[258474,426083],[-4,-2412]],[[258470,423671],[-889,5]],[[257581,423676],[-3,2416],[-210,4]],[[273832,426791],[-165,-804],[-57,-2449]],[[273610,423538],[-915,163]],[[272695,423701],[15,2450],[-148,1611]],[[263818,428382],[2,-6071],[59,-79]],[[263879,422232],[-1,-5]],[[263878,422227],[-1029,-28]],[[262849,422199],[4,4085]],[[280077,421720],[-106,-1566]],[[279971,420154],[-653,120],[-455,659]],[[278863,420933],[227,2069]],[[248582,423747],[-330,-1227],[-73,-1405],[-363,-2059]],[[247816,419056],[-702,92],[4,1628]],[[247118,420776],[13,6544]],[[268924,425869],[-64,-3813],[-274,84]],[[268586,422140],[-515,158],[-254,1409]],[[267817,423707],[174,1059],[2,2875],[277,1115]],[[267817,423707],[-635,190]],[[267182,423897],[2,1173],[-475,-33]],[[220562,428663],[2,-4872],[-317,7],[0,-1627]],[[220247,422171],[-287,-23]],[[219960,422148],[-1562,-10]],[[218398,422138],[-52,0]],[[218346,422138],[-2,6528]],[[225309,428632],[0,-6478]],[[225309,422154],[-1242,1]],[[224067,422155],[-2,6318]],[[221505,428382],[3,-6212]],[[221508,422170],[-1261,1]],[[218346,422138],[-1521,20]],[[216825,422158],[-55,-2]],[[216770,422156],[-7,6472]],[[216770,422156],[-1975,-23]],[[214795,422133],[0,1690]],[[227843,428638],[0,-6483]],[[227843,422155],[-1260,3]],[[226583,422158],[-9,0]],[[226574,422158],[-2,6478]],[[229113,425380],[-8,-3237]],[[229105,422143],[-1262,12]],[[226574,422158],[-1253,-4]],[[225321,422154],[-12,0]],[[284733,427326],[-651,-856],[-995,-3406],[-367,-2037]],[[282720,421027],[-87,-484]],[[190165,413754],[-530,18],[-2,802],[-456,2164],[59,2009],[-250,2239],[-310,-14],[-357,1412],[-183,1615],[74,2376]],[[224067,422155],[-8,0]],[[224059,422155],[-1261,5]],[[222798,422160],[0,5809]],[[265423,425661],[-341,-1036]],[[265082,424625],[-938,-40],[1,-1903],[-266,-450]],[[222798,422160],[-1257,8]],[[221541,422168],[-33,2]],[[278863,420933],[-360,-3256],[-302,-1293]],[[278201,416384],[-562,1959],[-401,-1171],[-297,845],[-366,-25]],[[276575,417992],[19,1314]],[[276594,419306],[179,812],[290,5226],[-200,1084],[227,1653]],[[288688,423954],[-466,-3820]],[[288222,420134],[-493,-1946]],[[287729,418188],[-773,3321]],[[286956,421509],[-805,3355]],[[276594,419306],[-123,1029],[-749,1490],[-494,2697]],[[271639,427446],[-58,-3551],[-110,16]],[[271471,423911],[-1324,215]],[[270147,424126],[-99,2084]],[[272695,423701],[-15,-2420],[-175,-1661]],[[272505,419620],[-793,132]],[[271712,419752],[19,2733],[-268,49],[8,1377]],[[285886,425967],[-397,-1498],[304,-5190]],[[285793,419279],[-424,-1382]],[[285369,417897],[-35,1119],[-345,857]],[[284989,419873],[-161,1874]],[[284828,421747],[-318,1084],[208,1376],[-107,1919],[122,1200]],[[261057,426186],[8,-3496]],[[261065,422690],[-374,7]],[[260691,422697],[-791,-21]],[[259900,422676],[0,530]],[[259900,423206],[-4,2954]],[[292731,427719],[-75,-1794],[-401,-1052],[179,2727],[297,119]],[[245853,427531],[-16,-6606]],[[245837,420925],[-6,-1698]],[[245831,419227],[-1653,137]],[[244178,419364],[22,898]],[[244200,420262],[218,2412]],[[274787,424519],[3,-1461]],[[274790,423058],[-309,-66]],[[274481,422992],[90,1247],[-199,2235]],[[247118,420776],[-1281,149]],[[284828,421747],[-989,-927],[-267,651],[-693,-2144]],[[282879,419327],[-159,1700]],[[244200,420262],[-1263,158]],[[242937,420420],[2,812]],[[242939,421232],[20,5678]],[[290323,421993],[609,-3619]],[[290932,418374],[-696,-1839]],[[290236,416535],[-114,1663]],[[290122,418198],[-1307,5224]],[[292370,426715],[-184,-1985],[143,-700]],[[292329,424030],[-474,-3179],[-254,-504]],[[291601,420347],[-383,1322],[6,932]],[[242939,421232],[-1108,36]],[[241831,421268],[-6,813]],[[241825,422081],[-2,4670]],[[274481,422992],[82,-1388],[-230,-2519]],[[274333,419085],[-58,-527]],[[274275,418558],[-502,43]],[[273773,418601],[49,4903],[-212,34]],[[241825,422081],[-931,-55]],[[240894,422026],[21,2915],[-105,1664]],[[240894,422026],[-478,-14]],[[240416,422012],[1,803],[-1426,-54]],[[238991,422761],[-20,3675]],[[233878,426401],[60,-5898]],[[233938,420503],[-1042,58]],[[232896,420561],[-163,921],[-269,3901]],[[238991,422761],[0,-2171]],[[238991,420590],[-1104,-44]],[[237887,420546],[-30,5838]],[[235466,426268],[95,-3437]],[[235561,422831],[-21,-4851]],[[235540,417980],[-1218,74]],[[234322,418054],[-79,2428],[-305,21]],[[190260,412140],[-1085,14]],[[189175,412154],[-1095,-4]],[[188080,412150],[-519,2499],[-397,-2608],[-336,-472],[101,2059],[-351,2219]],[[237887,420546],[-2,-2440]],[[237885,418106],[-1261,68]],[[236624,418174],[7,4610]],[[236631,422784],[-50,3494]],[[270147,424126],[-32,-4044]],[[270115,420082],[-784,126],[-762,580]],[[268569,420788],[17,1352]],[[262849,422199],[1,-796]],[[262850,421403],[-1157,-62]],[[261693,421341],[-3,1350]],[[261690,422691],[52,3501]],[[236631,422784],[-1070,47]],[[261690,422691],[-625,-1]],[[259900,423206],[-1060,-73],[0,-541]],[[258840,422592],[-370,1079]],[[257581,423676],[-3,-4054]],[[257578,419622],[-1105,9]],[[256473,419631],[1,2822]],[[256474,422453],[-4,2035]],[[232896,420561],[7,-55]],[[232903,420506],[-1276,-7]],[[231627,420499],[-157,10]],[[231470,420509],[-1,4862]],[[286956,421509],[-435,-1129],[-728,-1101]],[[266426,425016],[-87,-5114]],[[266339,419902],[-1291,820]],[[265048,420722],[34,3903]],[[210856,423755],[-18,-8096],[-651,-3]],[[210187,415656],[-1239,-9]],[[230364,425368],[0,-4857]],[[230364,420511],[0,-4861]],[[230364,415650],[-953,8]],[[229411,415658],[-308,1]],[[229103,415659],[2,6484]],[[231470,420509],[-1106,2]],[[267401,418295],[-101,-658]],[[267300,417637],[-828,69]],[[266472,417706],[25,2123],[-158,73]],[[267182,423897],[1,-3714],[212,-4],[6,-1884]],[[255264,424515],[-14,-6129]],[[255250,418386],[-5,-4933]],[[255245,413453],[-1127,-59]],[[254118,413394],[14,9676]],[[204761,420480],[44,-3995],[-107,-2111]],[[204698,414374],[-40,-1499]],[[204658,412875],[-515,-982],[-138,-1866]],[[204005,410027],[-269,-196],[-186,2235],[-440,1922],[-526,245]],[[202584,414233],[-535,-3]],[[265048,420722],[-23,-1666]],[[265025,419056],[-1141,243]],[[263884,419299],[-6,2928]],[[276575,417992],[2,-1690],[-338,-982]],[[276239,415320],[-807,669],[-645,-1057]],[[274787,414932],[1,1006]],[[274788,415938],[-1,2667]],[[274787,418605],[3,4453]],[[256474,422453],[-391,-1026],[-571,-2640],[86,-782]],[[255598,418005],[-348,381]],[[292681,417933],[-2,100]],[[292679,418033],[-411,-199],[-60,940],[-392,65],[-407,-1734]],[[291409,417105],[-97,1099]],[[291312,418204],[289,2143]],[[292329,424030],[617,-741],[71,-1974],[-164,-3756],[-172,374]],[[271712,419752],[-260,-1288]],[[271452,418464],[-1312,274]],[[270140,418738],[-25,1344]],[[290122,418198],[-263,-1712]],[[289859,416486],[-319,873],[49,-1506],[-196,-651]],[[289393,415202],[-235,1650]],[[289158,416852],[-265,413],[-399,2752],[-272,117]],[[160617,423926],[82,-1783],[339,-681],[-59,-1870],[-213,-1153]],[[160766,418439],[-393,-947],[-168,-2179],[-364,-1740],[-738,-94],[-15,-1615]],[[159088,411864],[-2483,10]],[[156605,411874],[10,3351]],[[164380,410189],[-1412,-44],[-74,-533],[-535,1856],[-381,-2584]],[[161978,408884],[-186,-741]],[[161792,408143],[-928,5114],[-31,2656],[120,1726],[-187,800]],[[268569,420788],[-30,-2813]],[[268539,417975],[-1138,320]],[[214795,422133],[0,-6444]],[[214795,415689],[6,-7987]],[[214801,407702],[-2099,-116]],[[212702,407586],[-2,8093],[66,8115]],[[212702,407586],[-979,-41]],[[211723,407545],[-1541,11]],[[210182,407556],[3,3232]],[[210185,410788],[2,4868]],[[249478,421591],[4,-3680]],[[249482,417911],[-1008,385],[-87,-647]],[[248387,417649],[-390,-864],[-421,-125],[-193,1284]],[[247383,417944],[433,1112]],[[273773,418601],[-955,197]],[[272818,418798],[-313,822]],[[258840,422592],[0,-2942]],[[258840,419650],[1,-653]],[[258841,418997],[-1263,-39]],[[257578,418958],[0,664]],[[291312,418204],[-380,170]],[[259900,422676],[0,-2968]],[[259900,419708],[-1060,-58]],[[274787,418605],[-454,480]],[[254118,413394],[-1462,-13]],[[252656,413381],[8,7493]],[[240416,422012],[-1,-5688]],[[240415,416324],[-1409,-76]],[[239006,416248],[-15,4342]],[[236624,418174],[-6,-1893]],[[236618,416281],[-1077,81]],[[235541,416362],[-1,1618]],[[260691,422697],[7,-5629]],[[260698,417068],[-1,-2446]],[[260697,414622],[-797,-40]],[[259900,414582],[0,5126]],[[261693,421341],[13,-4278]],[[261706,417063],[-1008,5]],[[256473,419631],[4,-4874]],[[256477,414757],[-917,-11]],[[255560,414746],[38,3259]],[[263884,419299],[17,-5164]],[[263901,414135],[-164,-21]],[[263737,414114],[-912,-29]],[[262825,414085],[5,1641]],[[262830,415726],[20,5677]],[[225321,422154],[-1,-6473]],[[225320,415681],[-642,-7]],[[224678,415674],[-618,2]],[[224060,415676],[-1,6479]],[[224060,415676],[-949,-1]],[[223111,415675],[-312,-4]],[[222799,415671],[-1,6489]],[[226583,422158],[-2,-6488]],[[226581,415670],[-307,0]],[[226274,415670],[-954,11]],[[216825,422158],[-7,-6476]],[[216818,415682],[-238,-3]],[[216580,415679],[-1785,10]],[[221541,422168],[6,-6503]],[[221547,415665],[-1532,-5]],[[220015,415660],[-43,2]],[[219972,415662],[-12,6486]],[[227843,422155],[-2,-6487]],[[227841,415668],[-1260,2]],[[229103,415659],[-1262,9]],[[219972,415662],[-1519,9]],[[218453,415671],[-56,3]],[[218397,415674],[1,6464]],[[218397,415674],[-1579,8]],[[222799,415671],[-1245,-6]],[[221554,415665],[-7,0]],[[241831,421268],[7,-4945]],[[241838,416323],[-1399,2]],[[240439,416325],[-24,-1]],[[284989,419873],[-135,-1158],[-365,-437],[-280,-1345]],[[284209,416933],[-135,-748],[-607,-656],[-188,-939]],[[283279,414590],[-400,4737]],[[250744,420882],[11,-4342]],[[250755,416540],[4,-2437],[-209,-17]],[[250550,414086],[-738,301],[-265,799]],[[249547,415186],[-65,2725]],[[281430,418706],[-459,-6339],[-226,-1900]],[[280745,410467],[-1192,6]],[[279553,410473],[143,1890],[-17,4331],[292,3460]],[[287729,418188],[-193,-522],[-134,-4476],[-402,-2750]],[[287000,410440],[-272,4]],[[286728,410444],[-19,0]],[[286709,410444],[-635,4132],[-197,2069],[-508,1252]],[[262830,415726],[-1089,-10]],[[261741,415716],[-35,1347]],[[242937,420420],[-5,-5731]],[[242932,414689],[-936,53]],[[241996,414742],[-158,1581]],[[283279,414590],[33,-4171]],[[283312,410419],[-28,0]],[[283284,410419],[-1756,39]],[[281528,410458],[270,1944],[385,4375]],[[279553,410473],[-342,-2]],[[279211,410471],[-1285,-23]],[[277926,410448],[-70,2461],[345,3475]],[[252342,420873],[-474,-4214]],[[251868,416659],[-1113,-119]],[[247383,417944],[-442,-2539]],[[246941,415405],[-262,-106],[-246,2264],[-607,13]],[[245826,417576],[5,1651]],[[252656,413381],[-31,-1626]],[[252625,411755],[-759,5]],[[251866,411760],[2,4899]],[[270140,418738],[-33,-4034],[-98,-688]],[[270009,414016],[-637,319]],[[269372,414335],[-891,172]],[[268481,414507],[58,3468]],[[266472,417706],[-35,-1885]],[[266437,415821],[-1449,559]],[[264988,416380],[37,2676]],[[239006,416248],[0,-1219]],[[239006,415029],[-1115,-150]],[[237891,414879],[-6,3227]],[[206434,415636],[-263,-1609]],[[206171,414027],[-698,-18]],[[205473,414009],[-2,412],[-773,-47]],[[231627,420499],[-1,-4856]],[[231626,415643],[-637,4]],[[230989,415647],[-625,3]],[[232903,420506],[433,-2548],[-67,-1276],[313,-1051]],[[233582,415631],[-87,0]],[[233495,415631],[-1249,8]],[[232246,415639],[-620,4]],[[234322,418054],[138,-4323]],[[234460,413731],[-255,-671],[-623,2571]],[[244178,419364],[30,-3037],[165,-1715]],[[244373,414612],[-1128,56]],[[243245,414668],[-313,21]],[[289158,416852],[-454,-2262],[-196,-1986]],[[288508,412604],[-541,-2144]],[[287967,410460],[-967,-20]],[[286709,410444],[-918,-3]],[[285791,410441],[-606,-7]],[[285185,410434],[-592,-13]],[[284593,410421],[124,2546],[-179,2926],[-329,1040]],[[200905,417336],[-779,-15],[-5,-3273],[-315,52],[0,-1664],[-1412,-62],[0,-2430],[-1717,-16],[1,-809],[-1384,192]],[[272795,414723],[-423,-10],[-218,-1045],[-319,59],[-5,-1092],[-317,67]],[[271513,412702],[-96,1662],[35,4100]],[[272818,418798],[-23,-4075]],[[259900,414582],[-209,-308]],[[259691,414274],[-843,-20]],[[258848,414254],[-7,4743]],[[257578,418958],[2,-4763]],[[257580,414195],[0,-1081]],[[257580,413114],[-876,36]],[[256704,413150],[-229,10],[2,1597]],[[245826,417576],[-7,-4829]],[[245819,412747],[1,-1636],[-1253,29]],[[244567,411140],[-193,1581],[-1,1891]],[[264988,416380],[-41,-2986]],[[264947,413394],[-298,808],[-748,-67]],[[274788,415938],[-600,318]],[[274188,416256],[87,2302]],[[291409,417105],[453,-5673],[-67,-3974]],[[291795,407458],[-8,-68]],[[291787,407390],[-674,1374],[-215,1839]],[[290898,410603],[-464,1137],[-81,1797],[-341,1921]],[[290012,415458],[-13,49]],[[289999,415507],[237,1028]],[[258848,414254],[-240,-36]],[[258608,414218],[-1028,-23]],[[274188,416256],[-53,-2245],[-194,-1195]],[[273941,412816],[-1155,355]],[[272786,413171],[9,1552]],[[292681,417933],[179,-418],[-159,-5398],[-46,2228],[-255,-3465],[103,-763],[-505,-2576],[-203,-83]],[[271513,412702],[-9,-1621]],[[271504,411081],[-1056,287]],[[270448,411368],[-261,927],[22,1648],[-200,73]],[[281528,410458],[-678,3]],[[280850,410461],[-105,6]],[[249547,415186],[-334,-14],[-11,-1088],[-814,-276]],[[248388,413808],[-1,3841]],[[161792,408143],[-203,-1301],[-432,-149],[-282,-3313],[-609,-861]],[[160266,402519],[-794,177]],[[159472,402696],[52,1463]],[[159524,404159],[106,2863],[-398,-48],[-7,2486],[153,591],[-290,1813]],[[255560,414746],[183,-1655],[-78,-4758]],[[255665,408333],[-417,-12]],[[255248,408321],[-3,5132]],[[277926,410448],[-234,-9]],[[277692,410439],[-800,-6]],[[276892,410433],[-426,0]],[[276466,410433],[-22,3775],[-205,1112]],[[268481,414507],[-116,-2692]],[[268365,411815],[-1169,326]],[[267196,412141],[-43,3579],[147,1917]],[[289999,415507],[-235,-1943],[-206,-350]],[[289558,413214],[-165,1988]],[[237891,414879],[8,-3256]],[[237899,411623],[-1244,79]],[[236655,411702],[-37,4579]],[[235541,416362],[8,-4089]],[[235549,412273],[-763,19]],[[234786,412292],[-326,1439]],[[181375,413882],[-2,-6764]],[[181373,407118],[-6,-16110]],[[181367,391008],[-2649,0]],[[178718,391008],[-2525,9020]],[[248388,413808],[0,-544]],[[248388,413264],[-1641,72]],[[246747,413336],[194,2069]],[[267196,412141],[-24,-2179]],[[267172,409962],[-1117,398]],[[266055,410360],[17,1046]],[[266072,411406],[162,-81],[203,4496]],[[246747,413336],[32,-697]],[[246779,412639],[-960,108]],[[200920,414122],[-228,4],[1,-10296]],[[200693,403830],[-885,2]],[[199808,403832],[-4513,9]],[[195295,403841],[-1,2439]],[[261741,415716],[-55,-4023]],[[261686,411693],[-223,-17]],[[261463,411676],[-823,-18]],[[260640,411658],[57,2964]],[[284593,410421],[-604,-5]],[[283989,410416],[-677,3]],[[289558,413214],[-576,-1173]],[[288982,412041],[-434,587]],[[288548,412628],[-38,-23]],[[288510,412605],[-2,-1]],[[251866,411760],[-181,-2587]],[[251685,409173],[-599,19]],[[251086,409192],[-316,21],[-7,2708],[-211,269]],[[250552,412190],[-2,1896]],[[206688,415637],[-41,-6]],[[206647,415631],[-213,-1605]],[[206434,414026],[-263,1]],[[241996,414742],[-30,-6459]],[[241966,408283],[-4,0]],[[241962,408283],[-1090,94]],[[240872,408377],[8,1624],[-470,45]],[[240410,410046],[29,6279]],[[266072,411406],[-502,924],[-631,517]],[[264939,412847],[8,547]],[[240410,410046],[-1140,66]],[[239270,410112],[-272,4],[8,4913]],[[236655,411702],[-1,-802]],[[236654,410900],[-1104,25]],[[235550,410925],[-1,1348]],[[274786,410447],[-874,-18]],[[273912,410429],[29,2387]],[[274787,414932],[-1,-4485]],[[276466,410433],[-1406,8]],[[275060,410441],[-274,6]],[[188080,412150],[154,-1357],[-372,-847],[15,-4365],[-94,-1439],[-489,-27],[-259,-1246]],[[187035,402869],[-502,281],[-66,4178],[-5094,-210]],[[262825,414085],[-5,-3544]],[[262820,410541],[-613,-224]],[[262207,410317],[-419,17],[-102,1359]],[[216580,415679],[-8,-8083]],[[216572,407596],[-1771,-4]],[[214801,407592],[0,110]],[[218453,415671],[-6,-8082]],[[218447,407589],[-1806,7]],[[216641,407596],[-69,0]],[[156605,411874],[135,-4012]],[[156740,407862],[1,-964],[-483,-512],[-38,-1771],[225,-3191],[-238,-1152],[-36,-1898],[296,-1405],[109,-1803],[362,-938]],[[156938,394228],[-728,41],[-164,-808],[-645,-63],[-455,-694]],[[154946,392704],[-541,2801],[109,2093],[-386,5926],[150,3428],[-35,2228],[-194,3368],[-468,3106]],[[226274,415670],[1,-6485]],[[226275,409185],[-1,-1617]],[[226274,407568],[-1548,10]],[[224726,407578],[-50,3]],[[224676,407581],[2,8093]],[[224676,407581],[-1502,8]],[[223174,407589],[-61,1]],[[223113,407590],[-2,8085]],[[227841,415668],[2,-6478]],[[227843,409190],[-1568,-5]],[[229411,415658],[-2,-8099]],[[229409,407559],[-425,-1]],[[228984,407558],[-1141,12]],[[227843,407570],[0,1620]],[[220015,415660],[-6,-8093]],[[220009,407567],[-1504,22]],[[218505,407589],[-58,0]],[[170987,398754],[-249,-368]],[[170738,398386],[-2476,18]],[[168262,398404],[-1,696],[-1014,5147],[112,6217],[-310,-1673]],[[221554,415665],[-6,-8087]],[[221548,407578],[-1487,-3]],[[220061,407575],[-52,-8]],[[223113,407590],[-1493,-14]],[[221620,407576],[-72,2]],[[230989,415647],[1,-8092]],[[230990,407555],[-955,2]],[[230035,407557],[-626,2]],[[210185,410788],[-3283,6]],[[206902,410794],[415,545],[-67,968],[390,99],[54,1354],[-365,-16],[-165,-1868],[-731,-135]],[[206433,411741],[1,2285]],[[233495,415631],[0,-6461]],[[233495,409170],[-625,0]],[[232870,409170],[-626,1]],[[232244,409171],[2,6468]],[[232244,409171],[-1,-1611],[-687,-7]],[[231556,407553],[-566,2]],[[234786,412292],[-21,-1748],[-200,350],[-276,-2271]],[[234289,408623],[-168,539],[-626,8]],[[290898,410603],[-392,-2264]],[[290506,408339],[-409,2275],[-302,2865]],[[289795,413479],[217,1979]],[[250552,412190],[-498,-1355],[-387,-1885],[5,-2169]],[[249672,406781],[-468,-23]],[[249204,406758],[-627,-24]],[[248577,406734],[-163,3649],[-26,2881]],[[239270,410112],[-32,-1637]],[[239238,408475],[-1337,-78]],[[237901,408397],[-2,3226]],[[243245,414668],[-19,-5394]],[[243226,409274],[-941,82],[-5,-1096],[-314,23]],[[256704,413150],[-11,-4877]],[[256693,408273],[-517,45]],[[256176,408318],[-511,15]],[[272786,413171],[-213,31],[-15,-3018],[100,-1891]],[[272658,408293],[-850,-351]],[[271808,407942],[-304,3139]],[[244567,411140],[169,-1392]],[[244736,409748],[-1143,47],[1,-537]],[[243594,409258],[-368,16]],[[260640,411658],[-101,-1640]],[[260539,410018],[-888,-25]],[[259651,409993],[40,4281]],[[269372,414335],[-25,-1734],[207,-77],[64,-3317]],[[269618,409207],[-318,124],[-21,-1094],[-338,108],[-318,-1009]],[[268623,407336],[-310,141],[52,4338]],[[205473,414009],[-1,-3086]],[[205472,410923],[-407,495],[-407,1457]],[[270448,411368],[146,-862],[-65,-3237]],[[270529,407269],[-311,107]],[[270218,407376],[-615,748],[15,1083]],[[259651,409993],[-1,-1094]],[[259650,408899],[-829,-88]],[[258821,408811],[-213,-27]],[[258608,408784],[0,5434]],[[202584,414233],[137,-2936],[562,-2151],[-209,-2932],[145,-2133]],[[203219,404081],[-612,-329]],[[202607,403752],[-1914,78]],[[204005,410027],[367,-1170],[-102,-1326]],[[204270,407531],[-525,-3718],[-328,267]],[[203417,404080],[-198,1]],[[258608,408784],[-389,-585],[-532,8]],[[257687,408207],[-86,542],[-21,4365]],[[264939,412847],[-109,-226],[-59,-4847]],[[264771,407774],[-700,215]],[[264071,407989],[-317,28]],[[263754,408017],[-17,6097]],[[263754,408017],[1,-413],[-936,-24]],[[262819,407580],[1,2961]],[[206433,411741],[-1,-3287]],[[206432,408454],[13,-903]],[[206445,407551],[-516,-5958],[-264,-2164]],[[205665,399429],[-5,0]],[[205660,399429],[-187,-2],[-3,8127]],[[205470,407554],[2,3369]],[[206902,410794],[-80,-2161],[-167,812],[-223,-991]],[[290506,408339],[-301,-1740]],[[290205,406599],[-214,1002]],[[289991,407601],[-385,1831],[-352,446],[-281,1743]],[[288973,411621],[822,1858]],[[255248,408321],[1,-2424]],[[255249,405897],[-1194,77]],[[254055,405974],[-17,3810]],[[254038,409784],[80,3610]],[[254038,409784],[-270,-622],[-1139,-17]],[[252629,409145],[-4,2610]],[[248577,406734],[-633,-33]],[[247944,406701],[-412,-2]],[[247532,406699],[2,2166],[-201,554],[5,1620],[-635,683]],[[246703,411722],[76,917]],[[273912,410429],[-309,-2118]],[[273603,408311],[-264,-1244]],[[273339,407067],[6,599],[-687,627]],[[257687,408207],[-84,-2441]],[[257603,405766],[-705,61]],[[256898,405827],[-209,8],[4,2438]],[[205470,407554],[-1200,-23]],[[266055,410360],[-47,-3101]],[[266008,407259],[-855,352]],[[265153,407611],[-382,163]],[[246703,411722],[-132,-1725],[183,-3269]],[[246754,406728],[-92,-2345]],[[246662,404383],[-900,73]],[[245762,404456],[-253,771],[-419,2924]],[[245090,408151],[-354,1597]],[[288982,412041],[-534,-3560],[147,-1015],[-73,-1880],[204,-1804]],[[288726,403782],[-376,-1333],[-304,88]],[[288046,402537],[-18,1506]],[[288028,404043],[-61,6417]],[[288510,412605],[38,23]],[[251086,409192],[2,-5734],[-320,52]],[[250768,403510],[-1088,3],[-8,3268]],[[235550,410925],[3,-4037]],[[235553,406888],[-1398,56]],[[234155,406944],[134,1679]],[[192584,405745],[-2935,12],[-153,2687],[-321,1686]],[[189175,410130],[0,2024]],[[189175,410130],[1,-4419],[-152,2],[6,-8099]],[[189030,397614],[-1545,14],[-447,229]],[[187038,397857],[-3,5012]],[[268623,407336],[-26,-1603]],[[268597,405733],[-717,218],[40,496],[-788,178]],[[267132,406625],[40,3337]],[[159524,404159],[-693,578],[2,-532],[-1674,-52]],[[157159,404153],[9,3692],[-428,17]],[[252629,409145],[5,-3808]],[[252634,405337],[-318,9],[-371,2452],[-255,17],[-5,1358]],[[262207,410317],[-5,-3506]],[[262202,406811],[-729,-13]],[[261473,406798],[-10,4878]],[[261473,406798],[1,-1345]],[[261474,405453],[-925,-9]],[[260549,405444],[-10,4574]],[[247532,406699],[-778,29]],[[237901,408397],[-2,-1616]],[[237899,406781],[-1252,49]],[[236647,406830],[7,4070]],[[289991,407601],[-61,-2065],[-434,1889],[-494,-3193]],[[289002,404232],[-350,2027]],[[288652,406259],[12,7]],[[288664,406266],[-51,2043]],[[288613,408309],[-8,430]],[[288605,408739],[368,2882]],[[164781,405356],[-1401,-15],[-152,1283],[-273,170],[-234,-1182],[-772,-1245]],[[161949,404367],[29,4517]],[[271808,407942],[-352,-103],[16,-1874],[-379,-569]],[[271093,405396],[-587,184],[23,1689]],[[236647,406830],[-6,-1351]],[[236641,405479],[-1087,27]],[[235554,405506],[-1,1382]],[[210182,407556],[-20,1]],[[210162,407557],[-2635,-8]],[[207527,407549],[-1082,2]],[[168262,398404],[-491,-22],[-237,-2422],[1,-1714],[313,16],[-13,-8145],[-697,1]],[[167138,386118],[-482,2257]],[[166656,388375],[-55,3726],[-157,-50],[-42,4120],[307,671],[-2,1728],[-666,42]],[[166041,398612],[-32,2039],[-419,1034]],[[165590,401685],[652,1617],[543,5284]],[[291787,407390],[22,-3591],[-686,-1401]],[[291123,402398],[-572,644]],[[290551,403042],[14,1877],[-360,1680]],[[262819,407580],[-2,-848]],[[262817,406732],[-615,79]],[[283284,410419],[-281,-1862],[-298,-5500]],[[282705,403057],[-115,-74]],[[282590,402983],[-298,3217]],[[282292,406200],[-167,1078],[132,1025],[-513,247]],[[281744,408550],[-440,1436],[-237,-1383],[-192,274]],[[280875,408877],[-25,1584]],[[280875,408877],[-278,-307],[-96,-1937]],[[280501,406633],[-526,345]],[[279975,406978],[-386,1376],[-475,-3170],[-283,767]],[[278831,405951],[380,4520]],[[278831,405951],[-568,-2831]],[[278263,403120],[-600,-2270]],[[277663,400850],[29,9589]],[[288028,404043],[-186,-68]],[[287842,403975],[-578,293],[198,3147],[-296,-282]],[[287166,407133],[-438,3311]],[[276892,410433],[-365,-5307]],[[276527,405126],[-123,314]],[[276404,405440],[-598,2940],[-675,502]],[[275131,408882],[-71,1559]],[[277663,400850],[0,-206]],[[277663,400644],[-557,1424],[-342,-761]],[[276764,401307],[-239,1285]],[[276525,402592],[2,2534]],[[287166,407133],[-74,-2015],[-419,-1267],[83,1880],[-379,-1384]],[[286377,404347],[-194,1934],[-292,888],[-100,3272]],[[275131,408882],[-285,-1378],[11,-1745]],[[274857,405759],[-140,-755]],[[274717,405004],[-207,396]],[[274510,405400],[-283,562],[-368,2261],[-256,88]],[[286377,404347],[69,-1031],[-251,-2457],[-293,640]],[[285902,401499],[0,2434],[-506,6],[2,-1756],[256,-748]],[[285654,401435],[-221,-442]],[[285433,400993],[-513,2542]],[[284920,403535],[-27,1753],[292,5146]],[[284920,403535],[-797,69]],[[284123,403604],[171,2561],[-558,2378],[253,1873]],[[284123,403604],[-2,-8]],[[284121,403596],[-805,-2420]],[[283316,401176],[-301,1526],[-310,355]],[[267132,406625],[-296,-2585]],[[266836,404040],[-607,26]],[[266229,404066],[40,3087],[-261,106]],[[192583,405610],[37,-825],[-294,-4891],[-129,-5401],[227,-2018],[156,-4770]],[[192580,387705],[-3568,0],[0,191]],[[189012,387896],[18,9718]],[[240872,408377],[-43,-5375]],[[240829,403002],[-232,408],[-163,-2184]],[[240434,401226],[-711,2931]],[[239723,404157],[-347,980],[-138,3338]],[[260549,405444],[-153,-1912]],[[260396,403532],[-746,-50]],[[259650,403482],[0,5417]],[[281744,408550],[-325,-479],[-251,-3773]],[[281168,404298],[-330,1391]],[[280838,405689],[-337,944]],[[245090,408151],[-786,-2744],[61,-2460]],[[244365,402947],[-779,381]],[[243586,403328],[8,5930]],[[254055,405974],[-144,-1904]],[[253911,404070],[-1278,-83]],[[252633,403987],[1,1350]],[[243586,403328],[-1650,162]],[[241936,403490],[26,4793]],[[270218,407376],[-23,-1681],[-315,124],[-26,-1652]],[[269854,404167],[-626,216],[-9,-491],[-644,-24]],[[268575,403868],[22,1865]],[[227843,407570],[-4,-4859]],[[227839,402711],[-1559,8]],[[226280,402719],[-6,4849]],[[232870,409170],[-17,-4355]],[[232853,404815],[-53,-3774]],[[232800,401041],[-1244,5]],[[231556,401046],[0,6507]],[[234155,406944],[373,-2132]],[[234528,404812],[-590,6]],[[233938,404818],[-1085,-3]],[[252633,403987],[0,-2970]],[[252633,401017],[-933,24]],[[251700,401041],[-932,31]],[[250768,401072],[0,2438]],[[279975,406978],[-539,-3798],[-360,-1739]],[[279076,401441],[-431,1393],[-382,286]],[[273339,407067],[-230,-1522]],[[273109,405545],[-695,-2161]],[[272414,403384],[-195,1249],[-314,-1223],[-55,-1445],[-293,114],[-131,-1044]],[[271426,401035],[10,997],[-367,905],[24,2459]],[[276404,405440],[-240,-950],[-479,-156]],[[275685,404334],[-828,1425]],[[259650,403482],[-372,-61]],[[259278,403421],[-462,-45]],[[258816,403376],[5,5435]],[[161949,404367],[-299,-280],[-426,-2782],[0,-3647]],[[161224,397658],[-376,-706]],[[160848,396952],[-363,-449],[-90,-981],[-129,6997]],[[258816,403376],[-362,-36]],[[258454,403340],[-695,149]],[[257759,403489],[-4,2280],[-152,-3]],[[282292,406200],[-394,-2354],[-185,-1907]],[[281713,401939],[-545,2359]],[[239723,404157],[-203,523],[-147,-1561],[-300,-406],[-194,-1441],[-195,1193]],[[238684,402465],[-29,-1189],[-453,360],[-301,-768]],[[237901,400868],[-2,5913]],[[241936,403490],[-12,-1887]],[[241924,401603],[-322,44]],[[241602,401647],[-773,1355]],[[256176,408318],[-109,-1613],[-6,-4868]],[[256061,401837],[-1014,8]],[[255047,401845],[202,1649],[0,2403]],[[256898,405827],[-7,-2443],[-310,8],[-2,-3248]],[[256579,400144],[-520,69]],[[256059,400213],[2,1624]],[[274510,405400],[-752,-2906]],[[273758,402494],[-136,1719],[-196,-664]],[[273426,403549],[-49,2100],[-268,-104]],[[246361,401187],[-1284,58],[-7,-1638],[-209,11]],[[244861,399618],[-414,50]],[[244447,399668],[-82,3279]],[[245762,404456],[468,-1904],[131,-1365]],[[264071,407989],[93,-711],[-59,-4822]],[[264105,402456],[-1299,240]],[[262806,402696],[11,4036]],[[265153,407611],[-83,-5848]],[[265070,401763],[-704,292]],[[264366,402055],[-261,401]],[[157159,404153],[-103,-1293],[316,-1811],[516,-796],[-42,-2231],[424,-2417]],[[158270,395605],[-153,-1117]],[[158117,394488],[-193,-2961],[-454,-702]],[[157470,390825],[-532,3403]],[[214801,407592],[7,-8099]],[[214808,399493],[2,-1604]],[[214810,397889],[-3111,-174]],[[211699,397715],[24,9830]],[[289029,404122],[-16,45]],[[289013,404167],[-11,65]],[[290551,403042],[-150,-2724]],[[290401,400318],[-533,654],[-508,1437],[-331,1713]],[[223174,407589],[-9,-8099]],[[223165,399490],[-1516,-10]],[[221649,399480],[-38,0]],[[221611,399480],[9,8096]],[[265463,401619],[-346,126]],[[265117,401745],[-47,18]],[[266229,404066],[-541,-2162],[-225,-285]],[[216641,407596],[-7,-8066]],[[216634,399530],[-241,-6]],[[216393,399524],[-1585,-31]],[[218505,407589],[-3,-8092]],[[218502,399497],[-253,0]],[[218249,399497],[-1615,33]],[[224726,407578],[-8,-6473]],[[224718,401105],[0,-1621]],[[224718,399484],[-1525,8]],[[223193,399492],[-28,-2]],[[220061,407575],[-7,-8104]],[[220054,399471],[-1552,26]],[[228984,407558],[-8,-6447]],[[228976,401111],[-4,-1634]],[[228972,399477],[-1137,-7]],[[227835,399470],[4,3241]],[[226280,402719],[-2,-1625]],[[226278,401094],[-1560,11]],[[221611,399480],[-1512,-5]],[[220099,399475],[-45,-4]],[[230035,407557],[-404,-3028],[468,-4114],[473,-185]],[[230572,400230],[-5,-2410],[-307,8]],[[230260,397828],[0,542],[-975,290],[5,2433],[-314,18]],[[207527,407549],[-7,-8122]],[[207520,399427],[-1032,5]],[[206488,399432],[-823,-3]],[[210162,407557],[-14,-13021],[-936,36]],[[209212,394572],[12,4830],[-1704,25]],[[231556,401046],[-18,-1625]],[[231538,399421],[-118,1200],[-442,280],[-406,-671]],[[211699,397715],[-29,-7916]],[[211670,389799],[2,-1622],[-925,-165]],[[210747,388012],[-1530,111]],[[209217,388123],[-5,6449]],[[205660,399429],[4,-8051]],[[205664,391378],[-1785,-68]],[[203879,391310],[176,2110],[-338,2531],[-236,-28],[-218,2136]],[[203263,398059],[20,4732],[134,1289]],[[271426,401035],[-87,-662]],[[271339,400373],[-1426,435]],[[269913,400808],[-59,3359]],[[187038,397857],[-586,-3353],[17,-2559],[-254,-958],[-384,92],[-188,-2026]],[[185643,389053],[-4276,11]],[[181367,389064],[0,1944]],[[280838,405689],[20,-2091],[-220,-1799],[43,-1667],[-291,-1467]],[[280390,398665],[-1091,2059],[-223,717]],[[235554,405506],[-2,-5520]],[[235552,399986],[-482,732]],[[235070,400718],[-348,1876],[57,1415],[-251,803]],[[262806,402696],[-686,37]],[[262120,402733],[-425,22],[-218,-746]],[[261477,402009],[-3,3444]],[[237901,400868],[-183,147],[-782,-1329]],[[236936,399686],[-300,1183]],[[236636,400869],[5,4610]],[[250768,401072],[-307,-8],[0,-3525]],[[250461,397539],[-935,2],[-151,-542]],[[249375,396999],[-164,-3]],[[249211,396996],[-7,9762]],[[249211,396996],[-1245,20]],[[247966,397016],[-6,4876]],[[247960,401892],[-16,4809]],[[164769,402898],[-1779,-16],[-231,-508],[-692,-3277],[-169,-1785],[-674,346]],[[247960,401892],[-463,-687],[1,-945],[-743,197],[-64,-1253]],[[246691,399204],[-29,5179]],[[268575,403868],[-39,-2983]],[[268536,400885],[-64,-729]],[[268472,400156],[-1582,537]],[[266890,400693],[-54,3347]],[[282590,402983],[-306,-3506]],[[282284,399477],[-571,2462]],[[195295,403841],[-25,-16136]],[[195270,387705],[-2690,0]],[[255047,401845],[-69,-1900]],[[254978,399945],[-895,326]],[[254083,400271],[-160,-18]],[[253923,400253],[-12,3817]],[[273426,403549],[-646,-1538]],[[272780,402011],[-366,1373]],[[257759,403489],[-152,-219],[7,-3170]],[[257614,400100],[-1035,44]],[[275685,404334],[85,-2807]],[[275770,401527],[-169,-2411]],[[275601,399116],[-203,-165]],[[275398,398951],[-825,1176]],[[274573,400127],[195,794],[-216,1514],[165,2569]],[[281713,401939],[-331,-4249]],[[281382,397690],[-453,-530]],[[280929,397160],[-54,1697],[-336,-1326],[-249,538]],[[280290,398069],[100,596]],[[236636,400869],[-257,453],[-437,-2067],[-407,-128]],[[235535,399127],[17,859]],[[261477,402009],[-400,-1353]],[[261077,400656],[-346,-1150],[-342,-59]],[[260389,399447],[7,4085]],[[276525,402592],[-354,-957],[-401,-108]],[[274573,400127],[-368,-1330]],[[274205,398797],[-236,255]],[[273969,399052],[-281,3046],[70,396]],[[233938,404818],[-18,-6982]],[[233920,397836],[-872,234]],[[233048,398070],[-272,169],[24,2802]],[[235070,400718],[-349,74],[-25,-3937]],[[234696,396855],[-411,-173]],[[234285,396682],[-361,-327],[-4,1481]],[[159472,402696],[-103,-2315],[298,-2192],[9,-2579]],[[159676,395610],[-1406,-5]],[[240434,401226],[-265,-1911],[27,-1099]],[[240196,398216],[-322,-2537]],[[239874,395679],[-1243,272]],[[238631,395951],[53,6514]],[[272780,402011],[-162,-1543]],[[272618,400468],[-357,-942],[-433,-2022]],[[271828,397504],[-465,1315]],[[271363,398819],[-24,1554]],[[246691,399204],[104,-2426],[318,-370]],[[247113,396408],[-268,-1767],[-327,1147]],[[246518,395788],[-157,5399]],[[269913,400808],[-106,32],[-45,-3310]],[[269762,397530],[-314,137]],[[269448,397667],[30,1913],[-311,800],[-631,505]],[[273969,399052],[-615,-1858]],[[273354,397194],[-359,392]],[[272995,397586],[-242,74],[-135,2808]],[[288046,402537],[11,-942]],[[288057,401595],[-639,-5]],[[287418,401590],[-372,-2533],[-163,577],[-139,-1617],[-138,1747],[461,4160],[775,51]],[[203263,398059],[-1079,33]],[[202184,398092],[232,2578],[24,2143],[167,939]],[[253923,400253],[-983,-53]],[[252940,400200],[-307,817]],[[266890,400693],[-89,-2651]],[[266801,398042],[-801,-648]],[[266000,397394],[-555,16],[18,4209]],[[285902,401499],[-150,-622]],[[285752,400877],[-98,558]],[[285433,400993],[-397,-2058]],[[285036,398935],[-134,518]],[[284902,399453],[-167,-26],[-614,4169]],[[199808,403832],[101,-2046]],[[199909,401786],[-296,-714]],[[199613,401072],[-737,-3251],[-270,662],[-334,-354],[-440,-2814],[-665,-1480],[1,-2999]],[[197168,390836],[-2,-3131],[-1896,0]],[[202184,398092],[-58,-1116]],[[202126,396976],[-415,809],[-150,-1174],[-541,1039],[-198,1577],[-600,-2],[-313,2561]],[[289289,396094],[-480,-882],[-190,-1251],[-469,-135]],[[288150,393826],[-70,5854]],[[288080,399680],[-23,1915]],[[288726,403782],[311,-1995],[21,-3695],[231,-1998]],[[258454,403340],[32,-5425],[144,8]],[[258630,397923],[2,-1078]],[[258632,396845],[-1016,28]],[[257616,396873],[-2,3227]],[[260389,399447],[-315,-33],[3,-1128]],[[260077,398286],[-173,-511],[-611,176]],[[259293,397951],[-15,5470]],[[244447,399668],[-615,99],[-12,-1654]],[[243820,398113],[-1328,97]],[[242492,398210],[16,3269],[-584,124]],[[284902,399453],[-317,-3074]],[[284585,396379],[-327,-588]],[[284258,395791],[-575,2284]],[[283683,398075],[-376,337],[-185,1327],[194,1437]],[[259293,397951],[-663,-28]],[[241246,396473],[-791,166],[-259,1577]],[[241602,401647],[-356,-5174]],[[279076,401441],[-306,-3713],[122,-2044],[-246,-2142]],[[278646,393542],[-601,2684]],[[278045,396226],[-22,130]],[[278023,396356],[164,2029],[-157,242],[174,1961],[-541,56]],[[291123,402398],[69,-689],[-433,-4685],[-217,-1125],[-299,-2],[197,2821],[-39,1600]],[[283683,398075],[-584,-3904]],[[283099,394171],[-333,1776]],[[282766,395947],[-855,1322]],[[281911,397269],[373,2208]],[[164778,400098],[2,-985]],[[164780,399113],[3,-842]],[[164783,398271],[-389,10],[-272,-829],[-495,64],[-430,-2100],[-547,1772],[-795,-2034],[-254,-3502]],[[161601,391652],[-950,430]],[[160651,392082],[48,3551],[149,1319]],[[264366,402055],[-167,-4639]],[[264199,397416],[-520,1367]],[[263679,398783],[-327,-384]],[[263352,398399],[-336,1361],[-212,-782]],[[262804,398978],[2,3718]],[[262120,402733],[-187,-6686]],[[261933,396047],[-9,-343]],[[261924,395704],[-187,-294]],[[261737,395410],[-674,-15]],[[261063,395395],[14,5261]],[[262804,398978],[-161,-1387]],[[262643,397591],[-710,-1544]],[[227835,399470],[-1,-3241]],[[227834,396229],[-1551,10]],[[226283,396239],[-5,4855]],[[160651,392082],[-328,7]],[[160323,392089],[-249,595],[-92,1588],[-306,1338]],[[276764,401307],[-43,-2135]],[[276721,399172],[-197,-2650],[-527,-489]],[[275997,396033],[78,1671],[-474,1412]],[[238631,395951],[-2,-269]],[[238629,395682],[-940,177],[-5,-542],[-774,158]],[[236910,395475],[26,4211]],[[278023,396356],[-421,199],[-771,1158],[-110,1459]],[[264942,392757],[-495,1045]],[[264447,393802],[-4,881]],[[264443,394683],[-244,2733]],[[265117,401745],[-175,-8988]],[[281911,397269],[-117,-636]],[[281794,396633],[-412,1057]],[[247966,397016],[-356,-13],[-7,-1413]],[[247603,395590],[-490,818]],[[286601,396690],[-270,-2438],[180,3428],[90,-990]],[[288080,399680],[-243,-645],[-318,-3541]],[[287519,395494],[-452,119]],[[287067,395613],[-237,-813],[-18,1649],[166,2200],[440,2941]],[[256059,400213],[0,-4914]],[[256059,395299],[-785,-99]],[[255274,395200],[-296,4745]],[[202126,396976],[391,-1636],[384,-265],[-241,-1239],[-125,-2430],[202,-1122],[70,-1956],[300,-2059]],[[203107,386269],[-2100,52],[-1,-5185]],[[201006,381136],[-1582,2]],[[199424,381138],[-184,2879]],[[199240,384017],[376,1],[-3,6826]],[[199613,390844],[0,10228]],[[266000,397394],[-90,-7128]],[[265910,390266],[-554,2430]],[[265356,392696],[-414,61]],[[242492,398210],[-119,-2235],[32,-2529],[-220,-3074]],[[242185,390372],[-394,741],[-91,1045]],[[241700,392158],[-289,3405]],[[241411,395563],[-165,910]],[[166041,398612],[-586,525],[-675,-24]],[[280290,398069],[-483,-2836],[-192,-318],[-231,-2313]],[[279384,392602],[-347,1620],[-177,-1641]],[[278860,392581],[-214,961]],[[285904,391677],[-438,651]],[[285466,392328],[40,2580],[-96,1946],[-374,2081]],[[285752,400877],[17,-34]],[[285769,400843],[123,37]],[[285892,400880],[302,-2195],[-274,-289],[359,-1162],[-397,-2847],[22,-2710]],[[236910,395475],[-14,-1566]],[[236896,393909],[-1362,260]],[[235534,394169],[1,3667]],[[235535,397836],[0,1291]],[[246518,395788],[-459,-1047],[-357,-130]],[[245702,394611],[-426,36],[-426,2233]],[[244850,396880],[11,2738]],[[230260,397828],[-3,-3239]],[[230257,394589],[-1081,7]],[[229176,394596],[-204,1767],[0,3114]],[[199613,390844],[-2445,-8]],[[226283,396239],[-1,-1625]],[[226282,394614],[-1549,-5]],[[224733,394609],[-15,4875]],[[233048,398070],[-2,-3479]],[[233046,394591],[-1241,3]],[[231805,394594],[-1,4258],[-266,569]],[[251700,401041],[-3,-5671],[315,56]],[[252012,395426],[-4,-1645]],[[252008,393781],[-1234,-55],[-1,-1621]],[[250773,392105],[-323,107]],[[250450,392212],[11,5327]],[[252940,400200],[-3,-4846]],[[252937,395354],[-925,72]],[[231805,394594],[2,-2436]],[[231807,392158],[-1134,-2]],[[230673,392156],[-105,1611],[-311,822]],[[269448,397667],[-55,-3546],[-336,-2]],[[269057,394119],[-207,85]],[[268850,394204],[-308,109],[-130,1734]],[[268412,396047],[60,4109]],[[270916,394754],[20,1086],[-281,1702],[-269,-1234]],[[270386,396308],[9,758],[-633,464]],[[271363,398819],[-98,-3218],[-349,-847]],[[235535,397836],[-738,278],[-101,-1259]],[[268412,396047],[-1128,225],[-164,1037]],[[267120,397309],[-319,733]],[[261063,395395],[-665,-1817]],[[260398,393578],[-311,-147]],[[260087,393431],[-10,4855]],[[272995,397586],[-322,-2153]],[[272673,395433],[-626,51]],[[272047,395484],[-219,2020]],[[255274,395200],[-23,-931]],[[255251,394269],[-1050,-45]],[[254201,394224],[-106,0]],[[254095,394224],[-12,6047]],[[254095,394224],[-871,-49]],[[253224,394175],[-287,84],[0,1095]],[[257616,396873],[-2,-1632]],[[257614,395241],[-617,-10]],[[256997,395231],[-542,-4]],[[256455,395227],[-396,72]],[[275398,398951],[-49,-2705],[-193,-1560],[-17,-2747]],[[275139,391939],[-179,223]],[[274960,392162],[-177,2249],[-237,821]],[[274546,395232],[-309,1940],[-32,1625]],[[178718,391008],[0,-11659],[-2488,-10],[-9,-22498]],[[176221,356841],[9,-15660]],[[176230,341181],[-3544,18062]],[[172686,359243],[1,19187],[-1464,8789]],[[171223,387219],[-1407,8282],[-2,1512],[924,1373]],[[244850,396880],[-2,-2773],[-421,28],[-7,-2523]],[[244420,391612],[-356,-627],[-262,515]],[[243802,391500],[-20,-7]],[[243782,391493],[38,6620]],[[263352,398399],[22,-5065]],[[263374,393334],[-124,-465]],[[263250,392869],[-377,1491]],[[262873,394360],[-210,810]],[[262663,395170],[-20,2421]],[[288150,393826],[43,-3599]],[[288193,390227],[-151,927],[-491,-152]],[[287551,391002],[-166,1427],[180,785]],[[287565,393214],[-46,2280]],[[218249,399497],[-18,-8071]],[[218231,391426],[-863,14]],[[217368,391440],[-992,-7]],[[216376,391433],[17,8091]],[[216376,391433],[-231,-10]],[[216145,391423],[-1332,-39]],[[214813,391384],[-3,6505]],[[223193,399492],[-14,-8122]],[[223179,391370],[-1512,-4]],[[221667,391366],[-36,-1]],[[221631,391365],[18,8115]],[[220099,399475],[-16,-8095]],[[220083,391380],[-260,15]],[[219823,391395],[-1228,34]],[[218595,391429],[-364,-3]],[[229176,394596],[-104,-1079],[-8,-3775]],[[229064,389742],[-1230,0]],[[227834,389742],[0,6487]],[[224733,394609],[-4,-3237]],[[224729,391372],[-1523,-3]],[[223206,391369],[-27,1]],[[221631,391365],[-1548,15]],[[285466,392328],[-31,-1556]],[[285435,390772],[-7,-2276]],[[285428,388496],[-134,1401],[-606,809],[-230,-837],[-81,1376]],[[284377,391245],[169,2219]],[[284546,393464],[298,1555],[-259,1360]],[[206488,399432],[13,-4858],[-121,-1295],[371,-47],[-10,-2736]],[[206741,390496],[-830,-42],[-247,924]],[[209217,388123],[-2473,-52]],[[206744,388071],[-3,2425]],[[264443,394683],[-524,-1280]],[[263919,393403],[-110,901],[24,2588],[-154,1891]],[[278045,396226],[-294,-515],[-232,-1658],[80,-1120],[-325,-2167]],[[277274,390766],[-416,1407],[-243,-3513],[-463,-1711],[-244,275],[-358,-1593]],[[275550,385631],[171,2537],[-267,3168]],[[275454,391336],[428,949],[115,3748]],[[166656,388375],[-699,3239]],[[165957,391614],[-901,4159]],[[165056,395773],[-269,1240],[-4,1258]],[[275454,391336],[-315,603]],[[274546,395232],[-268,-471],[-788,-2996]],[[273490,391765],[-200,1393],[150,994],[-86,3042]],[[280929,397160],[39,-1197],[-240,-2110]],[[280728,393853],[-452,-1704],[-259,-2493]],[[280017,389656],[-633,2946]],[[263919,393403],[-308,-257]],[[263611,393146],[-237,188]],[[272047,395484],[-122,-4567],[68,-1111]],[[271993,389806],[-308,-1084],[-178,1340]],[[271507,390062],[-213,1013]],[[271294,391075],[-378,3679]],[[171223,387219],[-1840,-10801],[-214,48]],[[169169,376466],[-2031,9652]],[[260087,393431],[-260,-1361]],[[259827,392070],[-266,627],[-811,-80]],[[258750,392617],[-16,4231],[-102,-3]],[[234285,396682],[0,-4534]],[[234285,392148],[-1239,4]],[[233046,392152],[0,2439]],[[165056,395773],[67,-1276],[-536,-3016]],[[164587,391481],[-681,-2964],[-867,-752],[-370,962],[-735,-860]],[[161934,387867],[-256,3852],[-77,-67]],[[243782,391493],[-600,-672],[-237,-1354]],[[242945,389467],[-301,-676],[-459,1581]],[[241411,395563],[-330,-4505],[-622,73]],[[240459,391131],[-612,170]],[[239847,391301],[27,4378]],[[284258,395791],[-146,-762]],[[284112,395029],[62,-330]],[[284174,394699],[109,-599]],[[284283,394100],[166,-999]],[[284449,393101],[22,-1315],[-319,-1468],[-235,541]],[[283917,390859],[-818,3312]],[[203879,391310],[232,-1351],[-63,-2148],[-283,-1101]],[[203765,386710],[-658,-441]],[[235534,394169],[-3,-2030]],[[235531,392139],[-1246,9]],[[267120,397309],[10,-7398]],[[267130,389911],[-689,1520],[-363,-1183]],[[266078,390248],[-168,18]],[[189012,387896],[-1284,-154]],[[187728,387742],[-2094,148]],[[185634,387890],[9,1163]],[[214813,391384],[1,-1534]],[[214814,389850],[-3144,-51]],[[273490,391765],[-131,-932]],[[273359,390833],[-145,-1041]],[[273214,389792],[-209,606],[-29,1581],[-303,3454]],[[281794,396633],[-352,-2134]],[[281442,394499],[-181,-1569],[-249,-398]],[[281012,392532],[-284,1321]],[[270386,396308],[-126,-2312],[-210,-922],[124,-3421],[-112,-240]],[[270062,389413],[-201,-166]],[[269861,389247],[-208,45],[20,1691],[-328,121],[-31,1670],[-276,128],[19,1217]],[[262663,395170],[-751,43],[12,491]],[[271294,391075],[-509,-438],[-303,-919],[26,-2485]],[[270508,387233],[-446,2180]],[[250450,392212],[-956,23]],[[249494,392235],[-119,4764]],[[268850,394204],[-252,-4689],[-210,-491]],[[268388,389024],[-201,3414],[-398,-533]],[[267789,391905],[-350,-1991],[-309,-3]],[[282766,395947],[-168,-2056],[513,-5136]],[[283111,388755],[-288,-2729]],[[282823,386026],[-280,58],[-558,5269]],[[281985,391353],[-543,3146]],[[249494,392235],[6,-1626],[-311,-14]],[[249189,390595],[-1322,101]],[[247867,390696],[42,2085]],[[247909,392781],[135,617]],[[248044,393398],[6,862],[-447,1330]],[[245702,394611],[-17,-6019]],[[245685,388592],[-299,1157],[-435,348],[-393,1319]],[[244558,391416],[-138,196]],[[284546,393464],[-223,1829]],[[284323,395293],[-65,498]],[[258750,392617],[-93,-1410]],[[258657,391207],[-1043,-28]],[[257614,391179],[0,4062]],[[248044,393398],[-494,1528],[-406,-1104],[-259,-2536],[-553,-983]],[[246332,390303],[-515,-1949],[-132,238]],[[289289,396094],[351,-2735],[270,-53],[-16,-3322],[132,-3186]],[[290026,386798],[-57,0]],[[289969,386798],[-44,0]],[[289925,386798],[-712,13]],[[289213,386811],[-982,153],[-22,1873]],[[288209,388837],[-16,1390]],[[227834,389742],[-1541,10]],[[226293,389752],[-11,4862]],[[278860,392581],[-466,-5287]],[[278394,387294],[-254,-1223]],[[278140,386071],[-449,839],[-166,1723],[-310,768]],[[277215,389401],[59,1365]],[[239847,391301],[-20,-3034]],[[239827,388267],[-622,98],[-4,-541],[-615,114]],[[238586,387938],[4,815]],[[238590,388753],[39,6929]],[[287565,393214],[-230,-1318],[167,-933],[-195,-1781],[-402,1979],[-480,1174],[215,1900],[256,-1835],[-68,1744],[239,1469]],[[283917,390859],[-162,-3064]],[[283755,387795],[-414,1424],[-230,-464]],[[273214,389792],[-307,-1569]],[[272907,388223],[-755,413],[-159,1170]],[[238590,388753],[-1541,208]],[[237049,388961],[-153,25],[0,4923]],[[284458,394060],[-175,40]],[[284174,394699],[-62,330]],[[284323,395293],[135,-1233]],[[165957,391614],[-111,-1812],[217,-2118],[-268,-3202]],[[165795,384482],[-318,1675],[-351,-1063],[-392,1451]],[[164734,386545],[-147,1347]],[[164587,387892],[0,3589]],[[262873,394360],[-58,-1367],[-578,-418]],[[262237,392575],[-496,-1308]],[[261741,391267],[-4,4143]],[[241700,392158],[-280,-5796]],[[241420,386362],[-362,56]],[[241058,386418],[-603,3090],[4,1623]],[[160323,392089],[-77,-1062],[333,-1452],[-117,-1633],[135,-802],[-46,-1999],[-216,-908]],[[160335,384233],[-267,44],[0,3908],[-681,143],[-458,-370]],[[158929,387958],[0,-4]],[[158929,387958],[-514,6077],[-298,453]],[[261741,391267],[-366,837]],[[261375,392104],[-331,-489],[66,-2303]],[[261110,389312],[-395,371]],[[260715,389683],[-3,1350],[-313,1080],[-1,1465]],[[253224,394175],[-108,-3960],[133,-658]],[[253249,389557],[-1250,128]],[[251999,389685],[9,4096]],[[256455,395227],[-410,-1812],[-93,-2129],[104,-2737]],[[256056,388549],[-615,-232]],[[255441,388317],[-297,-785]],[[255144,387532],[-486,-1420]],[[254658,386112],[-34,905],[308,954],[-17,1005]],[[254915,388976],[435,3214],[-99,2079]],[[257614,391179],[2,-2983]],[[257616,388196],[-674,-391]],[[256942,387805],[55,7426]],[[256942,387805],[-413,171]],[[256529,387976],[-473,573]],[[274960,392162],[-143,-1744],[-396,-2216]],[[274421,388202],[-376,577],[-266,-940]],[[273779,387839],[-420,2994]],[[247909,392781],[-238,-998],[-192,-2324],[175,-1160]],[[247654,388299],[-24,-168]],[[247630,388131],[-211,-2528]],[[247419,385603],[-176,2124],[-512,9],[-410,-650]],[[246321,387086],[11,3217]],[[264517,389239],[-698,-957]],[[263819,388282],[-57,221]],[[263762,388503],[-151,4643]],[[264447,393802],[70,-4563]],[[230673,392156],[-3,-4046]],[[230670,388110],[-1298,15]],[[229372,388125],[-307,-1],[-1,1618]],[[226293,389752],[2,-1622]],[[226295,388130],[-1550,-17]],[[224745,388113],[-16,3259]],[[233046,392152],[-20,-5676]],[[233026,386476],[-1232,4]],[[231794,386480],[13,5678]],[[158929,387954],[-62,-1644],[169,-2032],[-399,3],[-19,-2538],[-216,-434]],[[158402,381309],[-24,5]],[[158378,381314],[-291,-21]],[[158087,381293],[-3,45]],[[158084,381338],[140,477],[-107,2272],[-522,4538],[-125,2200]],[[281985,391353],[-669,-3258],[-157,217]],[[281159,388312],[-296,1764]],[[280863,390076],[149,2456]],[[263250,392869],[-350,-1063]],[[262900,391806],[-413,-1090]],[[262487,390716],[-250,1859]],[[158084,381338],[-237,-853],[-152,859]],[[157695,381344],[-539,908],[-435,1971],[-296,-310]],[[156425,383913],[-353,2861],[-569,2152],[-557,3778]],[[254915,388976],[-726,35]],[[254189,389011],[12,5213]],[[280017,389656],[-138,-1763],[572,-1648]],[[280451,386245],[-493,-2674]],[[279958,383571],[-240,-1325]],[[279718,382246],[-1324,5048]],[[254189,389011],[-119,3]],[[254070,389014],[-537,-21]],[[253533,388993],[-284,564]],[[269861,389247],[-95,-2476],[-512,-708]],[[269254,386063],[-253,186]],[[269001,386249],[-194,1565]],[[268807,387814],[-419,1210]],[[237049,388961],[-4,-2241]],[[237045,386720],[-1525,568]],[[235520,387288],[11,4851]],[[280863,390076],[-319,-2827]],[[280544,387249],[-93,-1004]],[[260715,389683],[-623,-25],[-151,-811]],[[259941,388847],[-106,262],[-8,2961]],[[265356,392696],[-244,-3246]],[[265112,389450],[-475,-738]],[[264637,388712],[-120,527]],[[251999,389685],[-2,-2447]],[[251997,387238],[-1241,-17]],[[250756,387221],[2,543]],[[250758,387764],[15,4341]],[[263762,388503],[-226,-927]],[[263536,387576],[-64,-376]],[[263472,387200],[-541,2720],[-31,1886]],[[259941,388847],[-406,-1355],[-4,-1306]],[[259531,386186],[-106,-8]],[[259425,386178],[-618,89]],[[258807,386267],[-150,4]],[[258657,386271],[0,4936]],[[247867,390696],[-213,-2397]],[[285904,391677],[33,-3347],[377,-2748],[-110,-1238],[-607,2727],[-162,3701]],[[266078,390248],[8,-2072]],[[266086,388176],[-605,-1279],[-198,665]],[[265283,387562],[-171,1888]],[[262487,390716],[-392,-1207]],[[262095,389509],[-262,-210]],[[261833,389299],[-458,2805]],[[268807,387814],[-424,-2456]],[[268383,385358],[-426,367],[-546,2055]],[[267411,387780],[397,3341],[-19,784]],[[250758,387764],[-457,107]],[[250301,387871],[-488,-745],[-369,60],[-248,-998]],[[249196,386188],[-7,4407]],[[277215,389401],[-117,-2971],[-334,-2300],[41,-777]],[[276805,383353],[-350,-1565],[-111,-2182]],[[276344,379606],[-848,-338],[-274,1261],[9,2076]],[[275231,382605],[22,2224],[297,802]],[[242945,389467],[-266,-2385],[-345,60],[127,-1459],[-203,-1038]],[[242258,384645],[-596,107],[14,1563],[-256,47]],[[231794,386480],[-23,-4900]],[[231771,381580],[-1110,51]],[[230661,381631],[9,6479]],[[234285,392148],[-26,-6491]],[[234259,385657],[-1233,6]],[[233026,385663],[0,813]],[[235520,387288],[0,-1654]],[[235520,385634],[-1261,23]],[[275231,382605],[-213,772]],[[275018,383377],[-482,1699],[-115,3126]],[[161934,387867],[6,-3922]],[[161940,383945],[-1040,-1303],[-210,591],[-282,-2812]],[[160408,380421],[-311,-431],[76,1800]],[[160173,381790],[162,2443]],[[261833,389299],[-405,-1730]],[[261428,387569],[-332,583]],[[261096,388152],[14,1160]],[[263472,387200],[-446,-2246]],[[263026,384954],[-363,80]],[[262663,385034],[-258,1506],[-110,2136],[-200,833]],[[267411,387780],[-197,-1449],[23,-1521],[-313,-464]],[[266924,384346],[-311,1158]],[[266613,385504],[-354,897],[-173,1775]],[[244558,391416],[4,-9113]],[[244562,382303],[-467,23],[2,-1088]],[[244097,381238],[-267,17]],[[243830,381255],[-40,2514]],[[243790,383769],[12,7731]],[[169169,376466],[1659,-8029]],[[170828,368437],[-2625,-35]],[[168203,368402],[-689,2284]],[[167514,370686],[-267,2691],[-422,166]],[[166825,373543],[187,2774],[-290,1077],[-121,2597],[-312,216],[-475,1906],[-19,2369]],[[246321,387086],[-122,-4889]],[[246199,382197],[-880,-1]],[[245319,382196],[-757,107]],[[243790,383769],[-1536,69]],[[242254,383838],[4,807]],[[164587,387892],[-720,-834],[-259,133],[-515,-1390],[-61,-1062],[-1009,-2141]],[[162023,382598],[-83,1347]],[[288209,388837],[-340,-1484],[-14,-1069]],[[287855,386284],[-365,-3226],[-285,1002],[9,-1396],[-759,4562],[218,1227],[-54,1256],[301,244],[335,-1096],[296,2145]],[[218595,391429],[0,-8114]],[[218595,383315],[-1157,7]],[[217438,383322],[-63,-1]],[[217375,383321],[-7,8119]],[[219823,391395],[8,-8114]],[[219831,383281],[-1236,34]],[[216145,391423],[-1,-8126]],[[216144,383297],[-1330,-14]],[[214814,383283],[1,118]],[[214815,383401],[-1,6449]],[[217375,383321],[-1161,-23]],[[216214,383298],[-70,-1]],[[282823,386026],[45,-780]],[[282868,385246],[-236,-135]],[[282632,385111],[-191,603],[-899,-1519]],[[281542,384195],[7,1473],[-390,2644]],[[221667,391366],[1,-6464]],[[221668,384902],[2,-1623]],[[221670,383279],[-1791,1]],[[219879,383280],[-48,1]],[[241058,386418],[-180,-1533],[-17,-2354]],[[240861,382531],[-193,-605],[-544,142],[-327,1182]],[[239797,383250],[30,5017]],[[224745,388113],[2,-4860]],[[224747,383253],[-1206,6]],[[223541,383259],[-334,2],[0,1622]],[[223207,384883],[-1,6486]],[[206744,388071],[3,-4865],[-303,-5]],[[206444,383201],[-2083,130]],[[204361,383331],[-596,3379]],[[223207,384883],[-1539,19]],[[285428,388496],[2,-844]],[[285430,387652],[-211,220],[-263,-2218]],[[284956,385654],[81,-2289],[-234,434],[-329,2869],[-459,-1569],[-187,2281],[549,3865]],[[258657,386271],[-1,-537],[-1038,13]],[[257618,385747],[-2,2449]],[[270898,384461],[-214,-1052],[-154,1960]],[[270530,385369],[-22,1864]],[[271507,390062],[-150,-656],[68,-2319],[-484,-1260],[-43,-1366]],[[181367,389064],[0,-7900]],[[181367,381164],[-7,-10123]],[[181360,371041],[4,-11253]],[[181364,359788],[2,-2927]],[[181366,356861],[-1984,13],[0,178],[-2727,-7],[-434,-204]],[[199240,384017],[-2,565],[-1384,-11],[128,-1422],[415,-674],[-79,-1241]],[[198318,381234],[-2999,12]],[[195319,381246],[-49,6459]],[[273779,387839],[177,-533],[-261,-1185],[-892,-2812]],[[272803,383309],[-146,3878],[250,1036]],[[249196,386188],[3,-3707]],[[249199,382481],[-545,27]],[[248654,382508],[-40,1621],[-342,19],[-642,3983]],[[281542,384195],[-437,-1435],[-99,693]],[[281006,383453],[-396,1782],[-66,2014]],[[272803,383309],[-1,-6]],[[272802,383303],[-272,-1508],[-143,-3971]],[[272387,377824],[-212,340]],[[272175,378164],[-165,2328],[-356,2011],[-528,-202]],[[271126,382301],[46,1976],[-274,184]],[[214815,383401],[-1944,-34]],[[212871,383367],[-1832,-28]],[[211039,383339],[-284,-8]],[[210755,383331],[-8,4681]],[[227834,389742],[0,-8111]],[[227834,381631],[-920,3]],[[226914,381634],[-613,-2]],[[226301,381632],[-6,6498]],[[229372,388125],[-59,-8133]],[[229313,379992],[-869,39]],[[228444,380031],[-2,1618],[-608,-18]],[[265283,387562],[-139,-989]],[[265144,386573],[-341,379]],[[264803,386952],[-166,1760]],[[253533,388993],[-9,-5827]],[[253524,383166],[-612,-14]],[[252912,383152],[-924,24]],[[251988,383176],[9,4062]],[[261096,388152],[-573,-2670]],[[260523,385482],[-285,-2089],[-141,377]],[[260097,383770],[-46,2157],[-520,259]],[[270530,385369],[-363,-645],[-243,-2058]],[[269924,382666],[-670,3397]],[[262663,385034],[-353,-388]],[[262310,384646],[-796,417]],[[261514,385063],[-86,2506]],[[278140,386071],[-341,-3644],[-207,-671]],[[277592,381756],[-787,1597]],[[283755,387795],[-68,-3119]],[[283687,384676],[-6,-1714]],[[283681,382962],[-121,26]],[[283560,382988],[-214,707]],[[283346,383695],[-232,459]],[[283114,384154],[-246,1092]],[[264803,386952],[-255,-1635]],[[264548,385317],[-418,-1608],[-274,-40]],[[263856,383669],[-44,1680],[-276,2227]],[[185634,387890],[509,-3310],[-59,-2002],[-242,-1389]],[[185842,381189],[-97,-48]],[[185745,381141],[-4378,23]],[[254070,389014],[36,-2007],[-137,-3775]],[[253969,383232],[-445,-66]],[[254658,386112],[-463,-2723],[-218,-213]],[[253977,383176],[-8,56]],[[238586,387938],[-30,-5629]],[[238556,382309],[-1467,73]],[[237089,382382],[-71,8],[27,4330]],[[289213,386811],[95,-1816],[-160,-1192],[-692,-216]],[[288456,383587],[-506,-230]],[[287950,383357],[-283,-697],[-32,1164],[220,2460]],[[275018,383377],[-768,-3505],[-473,452]],[[273777,380324],[-279,2237],[-256,-553],[-440,1295]],[[256529,387976],[-3,-5248]],[[256526,382728],[-678,251]],[[255848,382979],[2,2497],[-255,-92],[-154,2933]],[[158378,381314],[146,-1464],[-437,1443]],[[160173,381790],[-408,-2224],[-354,-188],[-351,1518],[-215,-1698],[-283,502],[-160,1609]],[[239797,383250],[35,-3689]],[[239832,379561],[-1222,173]],[[238610,379734],[-54,2575]],[[255848,382979],[-1,-825],[-418,-677]],[[255429,381477],[-616,58]],[[254813,381535],[-309,1118],[-517,34]],[[253987,382687],[-10,489]],[[257618,385747],[6,-2451]],[[257624,383296],[-312,-1080]],[[257312,382216],[-630,-29]],[[256682,382187],[-156,541]],[[266613,385504],[-146,-2035],[-362,-1580]],[[266105,381889],[-246,1825],[-347,209]],[[265512,383923],[-368,2650]],[[261514,385063],[-513,-1353]],[[261001,383710],[-478,1772]],[[230661,381631],[-3,-1635],[-459,10]],[[230199,380006],[-886,-14]],[[209217,388123],[-12,-6998]],[[209205,381125],[-8,-7666]],[[209197,373459],[-808,1541]],[[208389,375000],[-823,1546],[-1023,-359],[-102,637]],[[206441,376824],[3,6377]],[[210755,383331],[-21,-1721],[-306,-20],[0,-1082],[-596,-8],[-593,529]],[[209239,381029],[-34,96]],[[226301,381632],[-1535,-18]],[[224766,381614],[-19,1639]],[[248654,382508],[-383,35],[1,-1620],[-477,-883]],[[247795,380040],[-127,736]],[[247668,380776],[-303,1892],[54,2935]],[[250756,387221],[-8,-4860]],[[250748,382361],[-1241,119]],[[249507,382480],[-308,1]],[[285430,387652],[553,-2587],[494,-4061],[-10,-1655],[-344,2010],[-710,2346],[-112,-1069],[-345,3018]],[[164734,386545],[-434,-1184],[-950,-7856],[-382,-2239]],[[162968,375266],[-758,4581]],[[162210,379847],[-187,2751]],[[187728,387742],[-228,-1434],[16,-5094]],[[187516,381214],[-1674,-25]],[[192580,387705],[27,-2493],[351,-3273],[-106,-713]],[[192852,381226],[-4142,-34],[-1194,22]],[[247668,380776],[-455,-1591]],[[247213,379185],[-466,-722],[-158,1359]],[[246589,379822],[-390,2375]],[[268978,383008],[-530,-70]],[[268448,382938],[-65,2420]],[[269001,386249],[-23,-3241]],[[268448,382938],[-363,-1281]],[[268085,381657],[-378,305],[-289,1389],[-223,-1372]],[[267195,381979],[-271,2367]],[[195319,381246],[2,-5061]],[[195321,376185],[-5,-7382]],[[195316,368803],[-5,-9039]],[[195311,359764],[-2662,-21]],[[192649,359743],[-2090,97]],[[190559,359840],[-1844,-32]],[[188715,359808],[653,1884],[604,385],[346,3275],[287,901],[-33,1956],[278,1645]],[[190850,369854],[446,2473],[227,3835],[527,220],[571,4056],[231,788]],[[263856,383669],[113,-1403]],[[263969,382266],[-621,-1698]],[[263348,380568],[-281,1465]],[[263067,382033],[-41,2921]],[[281006,383453],[-231,-1615]],[[280775,381838],[-817,1733]],[[279718,382246],[-89,-2346],[-162,-617]],[[279467,379283],[-168,-1840],[-296,-1251],[-422,177]],[[278581,376369],[-906,3632]],[[277675,380001],[127,1436],[-210,319]],[[251988,383176],[-8,-2447]],[[251980,380729],[-1183,-9]],[[250797,380720],[-49,1641]],[[237089,382382],[-24,-3302]],[[237065,379080],[-1548,436]],[[235517,379516],[3,6118]],[[172686,359243],[-1858,9194]],[[265512,383923],[-362,-1946]],[[265150,381977],[-326,1245],[-276,2095]],[[204361,383331],[336,-2212],[254,-3271],[312,-1387]],[[205263,376461],[44,-2691]],[[205307,373770],[-1620,-57]],[[203687,373713],[-1526,-10],[-2,1613],[-297,15]],[[201862,375331],[0,678],[-568,1790],[-287,-220]],[[201007,377579],[-1,3557]],[[289111,378680],[-677,-384]],[[288434,378296],[-6,32]],[[288428,378328],[-108,834],[337,902],[-201,3523]],[[289925,386798],[-186,-3801],[-305,-810],[-323,-3507]],[[166825,373543],[-110,722]],[[166715,374265],[-627,2326],[-335,-1722],[-420,-936],[-390,89],[-379,1183],[-853,-3610]],[[163711,371595],[-743,3671]],[[233026,385663],[-31,-6553]],[[232995,379110],[-1225,36]],[[231770,379146],[1,2434]],[[242254,383838],[30,-5137]],[[242284,378701],[-616,91]],[[241668,378792],[-306,22],[-345,3550],[-156,167]],[[258807,386267],[-62,-3640],[-147,-849]],[[258598,381778],[-366,-1124]],[[258232,380654],[2,1594],[-309,13],[3,1094],[-304,-59]],[[259425,386178],[1,-1624],[368,-2837]],[[259794,381717],[-134,-3193]],[[259660,378524],[-140,-131]],[[259520,378393],[-503,215],[-244,853],[-175,2317]],[[269924,382666],[-59,-1571],[261,-1815],[-318,-1930]],[[269808,377350],[-304,-1659]],[[269504,375691],[-230,1692]],[[269274,377383],[-144,2308],[-237,1273],[85,2044]],[[260097,383770],[-303,-2053]],[[284512,383385],[-92,-1945]],[[284420,381440],[-8,-27]],[[284412,381413],[-144,-224]],[[284268,381189],[-437,1843],[-150,-70]],[[283687,384676],[250,-96],[535,1272],[40,-2467]],[[267195,381979],[-57,-1464]],[[267138,380515],[-472,-1482]],[[266666,379033],[-181,318]],[[266485,379351],[-380,2538]],[[282632,385111],[-701,-4528]],[[281931,380583],[-408,650],[-297,-356]],[[281226,380877],[-451,961]],[[234259,385657],[-34,-6557]],[[234225,379100],[-1230,10]],[[235517,379516],[0,-428]],[[235517,379088],[-1292,12]],[[261001,383710],[173,-405],[-53,-2162]],[[261121,381143],[-14,-546]],[[261107,380597],[-355,-820],[-434,244],[-629,-1650]],[[259689,378371],[-29,153]],[[283114,384154],[232,-459]],[[283560,382988],[-758,-4755]],[[282802,378233],[-126,314]],[[282676,378547],[-383,1648],[-362,388]],[[271126,382301],[-263,-1063],[-13,-2367]],[[270850,378871],[-720,-941]],[[270130,377930],[-322,-580]],[[263067,382033],[-389,-1467]],[[262678,380566],[-442,233]],[[262236,380799],[74,3847]],[[265150,381977],[-286,-1440]],[[264864,380537],[-573,-892]],[[264291,379645],[-263,850],[-59,1771]],[[262236,380799],[-219,-1712]],[[262017,379087],[-896,2056]],[[223541,383259],[-1,-4853],[-304,-4]],[[223236,378402],[-914,9],[-1,1610],[-610,3]],[[221711,380024],[-41,3255]],[[199424,381138],[158,-1618],[-158,-1773]],[[199424,377747],[-472,-1110]],[[198952,376637],[-30,888],[-421,1384],[24,1647],[-207,678]],[[157695,381344],[162,-972],[-41,-3299],[179,-856],[-251,-1183],[-370,1731],[-114,-336],[-479,2414],[-374,-283],[165,2872],[317,-1457],[-464,3938]],[[266485,379351],[-223,-717],[-503,-259]],[[265759,378375],[-341,2566],[-268,1036]],[[162210,379847],[2,-6325],[-188,423],[-596,-1237],[-739,-3958]],[[160689,368750],[-239,1114],[0,5132]],[[160450,374996],[-71,4167]],[[160379,379163],[29,1258]],[[243830,381255],[-6,-1908],[-732,4],[-351,-755]],[[242741,378596],[-457,105]],[[288428,378328],[-760,-1368],[99,2154],[225,837]],[[287992,379951],[5,43]],[[287997,379994],[-216,-302],[-1,1870],[-264,-794],[434,2589]],[[281226,380877],[-275,-2361]],[[280951,378516],[-515,-3903]],[[280436,374613],[-425,-1184]],[[280011,373429],[-544,5854]],[[285766,378696],[-155,-920]],[[285611,377776],[-363,657],[-314,2280],[-163,-800]],[[284771,379913],[-351,1527]],[[284512,383385],[528,-1942],[635,-277],[253,-1943],[-162,-527]],[[241668,378792],[-8,-3016]],[[241660,375776],[-363,-1063],[-225,1683],[-655,61]],[[240417,376457],[-605,128]],[[239812,376585],[20,2976]],[[269274,377383],[-231,160],[-89,-1393]],[[268954,376150],[-910,2229],[-138,-652]],[[267906,377727],[-93,803]],[[267813,378530],[371,1947],[-99,1180]],[[277675,380001],[-469,-3994]],[[277206,376007],[-657,395],[-135,1144],[-337,-42]],[[276077,377504],[267,2102]],[[214814,383283],[8,-9753]],[[214822,373530],[1,-1754]],[[214823,371776],[-1967,-12]],[[212856,371764],[15,11603]],[[276077,377504],[-296,-1431],[-373,-3413]],[[275408,372660],[-430,-146],[-592,890]],[[274386,373404],[-399,2555]],[[273987,375959],[102,2169],[-312,2196]],[[267813,378530],[-479,65],[-196,1920]],[[206441,376824],[-330,1926],[-322,-2223],[-84,711],[-442,-777]],[[212856,371764],[-914,-4]],[[211942,371760],[-915,4]],[[211027,371764],[12,11575]],[[211027,371764],[-1822,7],[-8,1688]],[[258232,380654],[-83,-1403]],[[258149,379251],[-55,-2225],[-404,-1554]],[[257690,375472],[32,1005],[-295,274],[-178,1615]],[[257249,378366],[114,-4],[-51,3854]],[[273987,375959],[-386,-927]],[[273601,375032],[-357,1057],[-619,250],[-238,1485]],[[217438,383322],[-3,-8107],[40,-1726]],[[217475,373489],[-1218,0]],[[216257,373489],[-44,1699],[1,8110]],[[219879,383280],[1,-4863]],[[219880,378417],[-1219,28],[33,-4957]],[[218694,373488],[-1219,1]],[[216257,373489],[-1435,41]],[[253987,382687],[206,-1256],[-505,-5063]],[[253688,376368],[-787,325]],[[252901,376693],[11,6459]],[[224766,381614],[1,-6484]],[[224767,375130],[-1507,16]],[[223260,375146],[-24,3256]],[[221711,380024],[-1,-3245]],[[221710,376779],[-1831,17]],[[219879,376796],[1,1621]],[[252901,376693],[0,-15]],[[252901,376678],[-925,-16]],[[251976,376662],[4,4067]],[[284268,381189],[-150,-1311],[278,-2136]],[[284396,377742],[-309,-256],[-1,-1105]],[[284086,376381],[-456,-1904]],[[283630,374477],[-165,-177],[-222,1929],[-441,2004]],[[256682,382187],[-392,-3475]],[[256290,378712],[-307,-2568]],[[255983,376144],[-94,369]],[[255889,376513],[-415,787]],[[255474,377300],[-45,4177]],[[254813,381535],[-35,-5040]],[[254778,376495],[-630,72]],[[254148,376567],[54,-1761],[-336,-146]],[[253866,374660],[-178,1708]],[[272175,378164],[-318,-1099],[158,-2552]],[[272015,374513],[-260,-47]],[[271755,374466],[-295,397],[-169,2098],[-573,1278],[132,632]],[[249507,382480],[-7,-4915]],[[249500,377565],[-220,-2832]],[[249280,374733],[-473,1903],[-262,-565]],[[248545,376071],[-165,1642],[-585,2327]],[[238610,379734],[-22,-2902],[-171,-1635]],[[238417,375197],[-154,26]],[[238263,375223],[-509,95],[7,1074],[-716,163]],[[237045,376555],[20,2525]],[[250797,380720],[-133,-3247]],[[250664,377473],[-1164,92]],[[245319,382196],[-11,-8638]],[[245308,373558],[-149,-795]],[[245159,372763],[-438,51],[4,1622],[-612,34]],[[244113,374470],[-16,6768]],[[264291,379645],[-143,-3260]],[[264148,376385],[-273,-833]],[[263875,375552],[-122,1730],[-504,1185]],[[263249,378467],[99,2101]],[[246589,379822],[-14,-6361]],[[246575,373461],[-1267,97]],[[257249,378366],[-460,-1268]],[[256789,377098],[-280,-2533],[-526,1579]],[[259520,378393],[-23,-3367],[-403,-371]],[[259094,374655],[-945,4596]],[[263249,378467],[-138,-2638]],[[263111,375829],[-141,-279],[-100,2291]],[[262870,377841],[-192,2725]],[[265759,378375],[-26,-1497]],[[265733,376878],[-550,230]],[[265183,377108],[-319,3429]],[[228444,380031],[1,-3258]],[[228445,376773],[-1531,-4]],[[226914,376769],[0,4865]],[[231770,379146],[-5,-5695]],[[231765,373451],[0,-2430]],[[231765,371021],[-1573,61]],[[230192,371082],[7,8924]],[[226914,376769],[9,-3303],[-304,-24]],[[226619,373442],[-1831,-22]],[[224788,373420],[-21,1710]],[[255474,377300],[-169,-643],[-206,1280]],[[255099,377937],[-83,-2666],[-238,1224]],[[244113,374470],[-771,42],[-10,-3582]],[[243332,370930],[-613,69]],[[242719,370999],[22,7597]],[[190850,369854],[-4778,-85],[-898,125]],[[185174,369894],[-16,4888],[309,-23],[-28,1599],[335,1],[-29,4782]],[[285474,374121],[-189,-776]],[[285285,373345],[-143,1232],[-392,-213],[-211,1145],[-143,2233]],[[284412,381413],[24,-1012],[357,-714],[24,-1757],[347,-1481],[310,-2328]],[[198952,376637],[-342,-2418]],[[198610,374219],[-358,1511],[-614,-665],[-130,1368],[-1561,20],[-626,-268]],[[282676,378547],[-305,-5181]],[[282371,373366],[-288,723],[-132,1443],[-320,1091]],[[281631,376623],[-680,1893]],[[185174,369894],[-607,4],[0,-813]],[[184567,369085],[-377,-469],[-604,143],[0,868],[-616,2],[-1,1663],[-315,-252],[-1294,1]],[[262017,379087],[-182,-1209]],[[261835,377878],[-647,-598],[-256,976]],[[260932,378256],[175,2341]],[[201007,377579],[-383,-319],[-19,-4903],[45,-4703]],[[200650,367654],[-984,-5]],[[199666,367649],[-1,4038]],[[199665,371687],[0,2392],[-241,3668]],[[262870,377841],[-381,-297],[-271,-1165]],[[262218,376379],[-341,113]],[[261877,376492],[-42,1386]],[[251976,376662],[-1,-808]],[[251975,375854],[-1238,-25]],[[250737,375829],[-73,1644]],[[285611,377776],[352,-2379]],[[285963,375397],[-300,-592]],[[285663,374805],[-240,293],[-546,3121],[-106,1694]],[[248545,376071],[-481,-3793]],[[248064,372278],[-249,-32],[-722,3898],[380,1913],[-260,1128]],[[260932,378256],[-418,-2942],[-267,-430]],[[260247,374884],[-558,3487]],[[267906,377727],[-44,-1950]],[[267862,375777],[-303,91],[-437,-1812],[23,-1008]],[[267145,373048],[-650,2775]],[[266495,375823],[171,3210]],[[265183,377108],[-100,-1732]],[[265083,375376],[-218,283]],[[264865,375659],[-717,726]],[[160450,374996],[-1125,-1844],[-234,1488],[-260,115],[-482,1735]],[[158349,376490],[-209,1238],[349,1656],[315,-572],[373,668],[783,-708],[357,1506],[62,-1115]],[[230192,371082],[-1,-2432]],[[230191,368650],[-1749,-16]],[[228442,368634],[3,8139]],[[223260,375146],[0,-1720]],[[223260,373426],[-1521,36]],[[221739,373462],[-29,3317]],[[278540,374733],[-257,-158],[-226,-2494],[-255,-813]],[[277802,371268],[-172,-1567]],[[277630,369701],[-515,2398],[26,1888]],[[277141,373987],[65,2020]],[[278581,376369],[-41,-1636]],[[248064,372278],[-101,-552]],[[247963,371726],[-1081,38]],[[246882,371764],[-315,-16],[8,1713]],[[163711,371595],[-1656,-4355],[43,-1065],[-727,-3846]],[[161371,362329],[-154,872],[-328,-612],[-163,2474],[146,498],[-186,3197]],[[160686,368758],[3,-8]],[[239812,376585],[-307,30],[-14,-1889]],[[239491,374726],[-1074,471]],[[237045,376555],[-22,-4864]],[[237023,371691],[-1517,258]],[[235506,371949],[0,363]],[[235506,372312],[11,6776]],[[266495,375823],[-378,-675]],[[266117,375148],[-384,1730]],[[280011,373429],[-196,-1763],[-242,63],[-67,-1661]],[[279506,370068],[-122,-195]],[[279384,369873],[-552,4224],[-292,636]],[[259094,374655],[-346,-3823]],[[258748,370832],[-372,-503],[-265,1038],[-246,-1075]],[[257865,370292],[-129,1809]],[[257736,372101],[-46,3371]],[[232995,379110],[-18,-5688]],[[232977,373422],[-1212,29]],[[234225,379100],[-29,-5681]],[[234196,373419],[-1219,3]],[[235506,372312],[-1310,27]],[[234196,372339],[0,1080]],[[287953,369117],[-126,1004]],[[287827,370121],[-283,134],[320,3324],[379,1762],[191,2955]],[[289111,378680],[-116,-2440],[-517,-3407],[-55,-2436],[-470,-1280]],[[271755,374466],[-438,-677],[176,-948],[-282,-761]],[[271211,372080],[-347,405],[-184,-776],[-249,1135],[-83,2839],[-218,2247]],[[286401,372837],[-192,2274],[-246,286]],[[285766,378696],[289,-8],[647,-2450],[-301,-3401]],[[242719,370999],[-614,37]],[[242105,371036],[2,817],[-459,1220],[12,2703]],[[208389,375000],[-289,-1427],[-262,-3093],[-561,-3167],[-509,-171],[-616,-1904]],[[206152,365238],[46,2010],[-135,4024],[-310,764],[-525,-1496]],[[205228,370540],[79,3230]],[[283630,374477],[147,-1396],[514,-1038],[-44,-591]],[[284247,371452],[-292,-1688]],[[283955,369764],[-489,1286],[-105,1395],[-525,503]],[[282836,372948],[-465,418]],[[281362,373717],[-225,-1081]],[[281137,372636],[-621,1277],[-80,700]],[[281631,376623],[-269,-2906]],[[260247,374884],[160,-1473]],[[260407,373411],[-544,-3500],[-48,-1933]],[[259815,367978],[-431,176]],[[259384,368154],[-184,2177],[-263,88]],[[258937,370419],[-189,413]],[[263875,375552],[-250,-1451]],[[263625,374101],[-126,-753],[-407,1614]],[[263092,374962],[19,867]],[[268954,376150],[-162,-516],[84,-2449]],[[268876,373185],[-340,667],[-495,-733]],[[268041,373119],[-179,2658]],[[219879,376796],[30,-8168]],[[219909,368628],[-1216,-7]],[[218693,368621],[1,4867]],[[257736,372101],[-514,1415]],[[257222,373516],[-85,1915],[-348,1667]],[[273601,375032],[187,-2459],[-193,530],[-410,-2364]],[[273185,370739],[-292,-249],[-64,-1205]],[[272829,369285],[-281,1663],[-394,3474],[-139,91]],[[261877,376492],[-288,-708],[-405,-2399]],[[261184,373385],[-333,-3287]],[[260851,370098],[-286,-39],[142,1604],[-300,1748]],[[271211,372080],[-148,-2078]],[[271063,370002],[-199,-676]],[[270864,369326],[-114,472]],[[270750,369798],[-437,240],[-582,3546]],[[269731,373584],[-227,2107]],[[255889,376513],[81,-2236],[-378,-1771]],[[255592,372506],[-241,-671]],[[255351,371835],[-666,-172]],[[254685,371663],[-57,1803],[-480,3101]],[[285285,373345],[270,-2335]],[[285555,371010],[-138,-2862]],[[285417,368148],[-256,2601]],[[285161,370749],[-819,3092],[-256,2540]],[[199665,371687],[-1364,1]],[[198301,371688],[8,1040],[301,1491]],[[263092,374962],[-79,-1906]],[[263013,373056],[-780,-638]],[[262233,372418],[68,3271],[-83,690]],[[201862,375331],[-47,-8024]],[[201815,367307],[-1165,-220],[0,567]],[[269731,373584],[-340,-1357],[-300,301]],[[269091,372528],[-215,657]],[[277141,373987],[-397,706],[-568,-2859]],[[276176,371834],[-345,-947],[-213,581]],[[275618,371468],[-210,1192]],[[250737,375829],[-7,-4869]],[[250730,370960],[-827,-8],[-198,-520]],[[249705,370432],[27,2111],[-434,1360],[-18,830]],[[266117,375148],[-215,-2029]],[[265902,373119],[-39,-3]],[[265863,373116],[-510,788],[-270,1472]],[[257222,373516],[17,-1185],[-615,-2106]],[[256624,370225],[-1032,2281]],[[264865,375659],[-28,-5332]],[[264837,370327],[-303,-813]],[[264534,369514],[-414,301]],[[264120,369815],[-495,4286]],[[253866,374660],[-364,-2527],[71,-1661]],[[253573,370472],[-674,471]],[[252899,370943],[2,5735]],[[262233,372418],[-14,-886]],[[262219,371532],[-865,379],[-170,1474]],[[221739,373462],[9,-4974]],[[221748,368488],[-1535,133]],[[220213,368621],[-304,7]],[[228442,368634],[-1822,-25]],[[226620,368609],[-1,4833]],[[252899,370943],[-103,7]],[[252796,370950],[-827,-12]],[[251969,370938],[6,4916]],[[285161,370749],[-468,-117]],[[284693,370632],[-446,820]],[[240417,376457],[5,-7665]],[[240422,368792],[-608,47],[-4,-1332]],[[239810,367507],[-305,42]],[[239505,367549],[-14,7177]],[[160686,368758],[-1094,44],[-338,-404]],[[159254,368398],[-341,754],[-149,3106],[-463,2406],[48,1826]],[[282836,372948],[-67,-2692]],[[282769,370256],[-815,2165],[-30,-1006],[-320,603]],[[281604,372018],[-242,1699]],[[249705,370432],[0,-110]],[[249705,370322],[-946,616]],[[248759,370938],[-796,-36]],[[247963,370902],[0,824]],[[238263,375223],[35,-4781]],[[238298,370442],[-1280,166]],[[237018,370608],[5,1083]],[[166715,374265],[-765,-4053],[-188,-2675],[-313,4],[-790,-4320]],[[164659,363221],[-270,1013],[-380,3367],[-298,3994]],[[254685,371663],[-553,-2946]],[[254132,368717],[-234,1246],[-124,-776]],[[253774,369187],[-201,1285]],[[242105,371036],[-9,-2451]],[[242096,368585],[-1210,161]],[[240886,368746],[-464,46]],[[198301,371688],[-2633,-143],[-352,-2742]],[[268041,373119],[135,-3677],[-93,-602]],[[268083,368840],[-64,308]],[[268019,369148],[-398,2375],[-439,724]],[[267182,372247],[-37,801]],[[273842,367755],[-4,20]],[[273838,367775],[-653,2964]],[[274386,373404],[-544,-5649]],[[251969,370938],[-926,-51]],[[251043,370887],[-313,73]],[[267182,372247],[-389,564],[-373,-1145]],[[266420,371666],[-518,1453]],[[265863,373116],[-284,-991],[-227,-2237]],[[265352,369888],[-515,439]],[[286401,372837],[-31,-1676],[-479,915],[-228,2729]],[[203687,373713],[-2,-6471]],[[203685,367242],[-1781,53]],[[201904,367295],[-89,12]],[[158120,372965],[-303,-2]],[[157817,372963],[-33,1344],[287,552],[49,-1894]],[[239505,367549],[-1221,189]],[[238284,367738],[14,2704]],[[264120,369815],[-276,-992]],[[263844,368823],[-589,2769]],[[263255,371592],[-242,1464]],[[224788,373420],[0,-4871]],[[224788,368549],[-1526,-10]],[[223262,368539],[-2,4887]],[[279384,369873],[-416,-2088]],[[278968,367785],[-186,-655]],[[278782,367130],[-282,1313]],[[278500,368443],[-442,1074],[-256,1751]],[[211942,371760],[-29,-11975]],[[211913,359785],[-2568,-74]],[[209345,359711],[-3196,-18]],[[206149,359693],[3,5545]],[[277630,369701],[-234,-1501],[-213,613],[-430,-1507],[-95,-1769]],[[276658,365537],[-630,2108]],[[276028,367645],[291,2275],[-143,1914]],[[245159,372763],[-5,-2033]],[[245154,370730],[-438,88],[-5,-1634],[288,-70],[-3,-1602]],[[244996,367512],[-1212,138]],[[243784,367650],[-301,26],[0,3252],[-151,2]],[[272829,369285],[-248,-1599]],[[272581,367686],[-815,1322],[-628,339],[-75,655]],[[281137,372636],[-25,-1023],[-602,-5508]],[[280510,366105],[-361,1084]],[[280149,367189],[-643,2879]],[[167514,370686],[-806,-4323],[-52,-2727],[-160,-1067],[-478,-108],[49,-890],[-436,-1627],[-319,-2893],[-1552,-1282],[-242,1461],[-239,3370]],[[163279,360600],[183,976],[522,1046],[675,599]],[[285850,370354],[-295,656]],[[285474,374121],[422,-2948],[651,-1011],[-346,-835],[-351,1027]],[[269091,372528],[-167,-3365],[109,-686],[-352,-3385]],[[268681,365092],[-160,2649],[-438,1099]],[[205228,370540],[-718,-4116]],[[204510,366424],[-823,2],[-2,816]],[[281604,372018],[-166,-3772]],[[281438,368246],[-287,-1612]],[[281151,366634],[-415,-1159],[-226,630]],[[270750,369798],[-954,-4452]],[[269796,365346],[-678,-1792]],[[269118,363554],[-32,-122]],[[269086,363432],[-466,1404]],[[268620,364836],[61,256]],[[246882,371764],[-42,-6070]],[[246840,365694],[-2,-838],[-515,-29]],[[246323,364827],[-104,1909],[11,4271],[-1076,-277]],[[216257,373489],[3,-6477]],[[216260,367012],[-86,2]],[[216174,367014],[-1351,13]],[[214823,367027],[0,4749]],[[257865,370292],[-200,-146],[146,-3006]],[[257811,367140],[-547,-1924],[-253,-1484]],[[257011,363732],[-559,3794]],[[256452,367526],[172,2699]],[[217475,373489],[0,-6490]],[[217475,366999],[-1215,13]],[[218693,368621],[0,-1623]],[[218693,366998],[-1158,2]],[[217535,367000],[-60,-1]],[[223262,368539],[4,-1605]],[[223266,366934],[-1483,-59]],[[221783,366875],[-35,1613]],[[226620,368609],[1,-1637]],[[226621,366972],[-1512,-41]],[[225109,366931],[-321,1],[0,1617]],[[232977,373422],[0,-6492]],[[232977,366930],[-1214,49]],[[231763,366979],[2,4042]],[[234196,372339],[0,-5412]],[[234196,366927],[-1206,3]],[[232990,366930],[-13,0]],[[260851,370098],[153,-1651]],[[261004,368447],[-327,81]],[[260677,368528],[-206,-892]],[[260471,367636],[-656,342]],[[262219,371532],[-27,-1601]],[[262192,369931],[-95,-2448]],[[262097,367483],[-273,950],[-278,-893],[-215,1025],[-327,-118]],[[275618,371468],[-300,-1181],[80,-1044],[-490,-1589]],[[274908,367654],[-100,1094],[-720,-2036],[-246,1043]],[[266420,371666],[-159,-2460]],[[266261,369206],[-144,586],[-553,-948],[-155,568]],[[265409,369412],[-57,476]],[[263255,371592],[-527,-1618]],[[262728,369974],[-536,-43]],[[283955,369764],[143,-836]],[[284098,368928],[-199,-2026]],[[283899,366902],[-182,62]],[[283717,366964],[-298,1139]],[[283419,368103],[99,1639],[-146,1185]],[[283372,370927],[-246,-568]],[[283126,370359],[-198,-214]],[[282928,370145],[-159,111]],[[158120,372965],[96,-2153],[271,-374],[409,-1981]],[[158896,368457],[-209,-644],[106,-2702]],[[158793,365111],[-4,-1304],[-465,-535],[78,-1485]],[[158402,361787],[-314,1660],[11,3040],[-319,2976],[37,3500]],[[268019,369148],[-408,283],[-84,-2105]],[[267527,367326],[-252,702],[-463,-1950],[-186,747],[-277,-816]],[[266349,366009],[-88,3197]],[[282769,370256],[-560,-2687]],[[282209,367569],[-433,1404],[-338,-727]],[[256452,367526],[-546,-453]],[[255906,367073],[-158,651],[-62,2671]],[[255686,370395],[-335,1440]],[[235506,371949],[0,-5388]],[[235506,366561],[0,-480]],[[235506,366081],[-1273,28]],[[234233,366109],[-37,818]],[[276028,367645],[-525,-1521]],[[275503,366124],[-183,485],[-294,-965]],[[275026,365644],[-118,2010]],[[206149,359693],[-184,-2]],[[205965,359691],[-1385,13]],[[204580,359704],[-148,938],[143,4466],[-65,1316]],[[237018,370608],[-19,-4325]],[[236999,366283],[-1493,278]],[[255686,370395],[-1221,-4085]],[[254465,366310],[33,525]],[[254498,366835],[-359,563],[-7,1319]],[[247963,370902],[3,-5312],[-200,55]],[[247766,365645],[-926,49]],[[214823,367027],[-1,-7366]],[[214822,359661],[-2676,121]],[[212146,359782],[-233,3]],[[198301,371688],[-141,-896],[-30,-2362],[-478,-2240],[-241,-2267],[2,-1425],[-247,-2726]],[[197166,359772],[-1855,-8]],[[199666,367649],[1,-7868]],[[199667,359781],[-2501,-9]],[[163279,360600],[-1049,-5634]],[[162230,354966],[-621,1774],[-205,2320]],[[161404,359060],[-33,3269]],[[263844,368823],[-156,-2927]],[[263688,365896],[-150,509],[-457,-2191]],[[263081,364214],[-5,2272],[-355,1236],[7,2252]],[[284693,370632],[402,-618],[175,-1717]],[[285270,368297],[-384,-511],[-28,-974]],[[284858,366812],[-760,2116]],[[259384,368154],[-65,-2032],[-241,-92]],[[259078,366030],[-868,-273]],[[258210,365757],[-399,1383]],[[278500,368443],[-229,-637],[32,-1405]],[[278303,366401],[-518,-5580]],[[277785,360821],[-108,-926],[-313,672]],[[277364,360567],[-363,2794],[-342,617]],[[276659,363978],[-1,1559]],[[184567,369085],[6,-9298]],[[184573,359787],[-3209,1]],[[231763,366979],[-8,-1628]],[[231755,365351],[-1561,66]],[[230194,365417],[-3,3233]],[[246323,364827],[-123,-4110]],[[246200,360717],[-515,62],[-148,783]],[[245537,361562],[-47,1372],[-348,1595],[-44,2975],[-102,8]],[[249705,370322],[275,-3108],[-171,-1185]],[[249809,366029],[-13,-1567]],[[249796,364462],[-367,-344],[-402,-1991]],[[249027,362127],[-283,3]],[[248744,362130],[15,8808]],[[243784,367650],[-24,-6958]],[[243760,360692],[-1208,136]],[[242552,360828],[-452,64]],[[242100,360892],[-4,7693]],[[253774,369187],[-63,-598],[-543,-370],[-221,-906]],[[252947,367313],[-159,350]],[[252788,367663],[8,3287]],[[252788,367663],[-169,-665],[-98,-2358],[240,-2056],[-183,-1537]],[[252578,361047],[0,1701],[-613,3308]],[[251965,366056],[4,4882]],[[283419,368103],[-491,2042]],[[251965,366056],[-546,-28],[-64,-613]],[[251355,365415],[-321,507]],[[251034,365922],[9,4965]],[[251034,365922],[-568,97]],[[250466,366019],[-657,10]],[[285850,370354],[308,-1052]],[[286158,369302],[-18,-1124]],[[286140,368178],[152,-3489],[-321,-310],[-554,3769]],[[248744,362130],[-259,20],[1,-1356],[-425,-246]],[[248061,360548],[-311,844],[16,4253]],[[273838,367775],[29,-1536],[-368,-994]],[[273499,365245],[-679,-1091]],[[272820,364154],[-382,1913]],[[272438,366067],[143,1619]],[[168203,368402],[-33,-2228],[201,-311],[166,-3441],[607,-1527],[212,-3239],[-22,-2583]],[[169334,355073],[-1716,-82],[-1,-1560],[-890,26],[-3,-1596],[-460,19],[-298,-1620]],[[165966,350260],[-246,-1296],[-814,-375],[-3,-4045],[-992,-5108]],[[163911,339436],[-928,3750],[56,1793],[-140,1162]],[[162899,346141],[229,1144],[-1,2966],[-897,4715]],[[238284,367738],[-14,-2707]],[[238270,365031],[-1188,150]],[[237082,365181],[-83,1102]],[[265409,369412],[279,-3141]],[[265688,366271],[-442,-1825]],[[265246,364446],[-535,1287]],[[264711,365733],[-177,3781]],[[255906,367073],[-251,-1812],[146,-2556]],[[255801,362705],[-529,-954],[-438,809]],[[254834,362560],[-346,1711],[-23,2039]],[[283717,366964],[-7,-1436]],[[283710,365528],[-51,69]],[[283659,365597],[-117,-1255]],[[283542,364342],[-75,-143]],[[283467,364199],[-36,-77]],[[283431,364122],[-87,-195]],[[283344,363927],[-565,790]],[[282779,364717],[-265,34],[-366,1828],[61,990]],[[280149,367189],[-243,-2778]],[[279906,364411],[-397,-807]],[[279509,363604],[-259,695],[-282,3486]],[[287953,369117],[-346,-3597],[-150,-3563],[-151,2650],[266,5441],[255,73]],[[263081,364214],[-502,-2273]],[[262579,361941],[-398,1304]],[[262181,363245],[-37,1322],[-302,999]],[[261842,365566],[255,1917]],[[272438,366067],[-555,-2439],[-498,578]],[[271385,364206],[-316,930],[-383,3657],[178,533]],[[254498,366835],[-802,-2923],[-19,-787]],[[253677,363125],[-271,-607]],[[253406,362518],[-71,2344],[-388,2451]],[[188715,359808],[-3142,-15]],[[185573,359793],[-1000,-6]],[[266349,366009],[57,-1412]],[[266406,364597],[-349,1839],[-369,-165]],[[264711,365733],[-224,-683],[-203,-2441]],[[264284,362609],[-596,3287]],[[271385,364206],[-448,-1771]],[[270937,362435],[-326,-1378],[-364,-500]],[[270247,360557],[-283,4288],[-168,501]],[[286158,369302],[207,215],[310,-1575],[-73,-2372],[-462,2608]],[[268620,364836],[-243,-50],[-502,-1356]],[[267875,363430],[-354,1381],[6,2515]],[[282779,364717],[-405,-1350]],[[282374,363367],[-1213,1929]],[[281161,365296],[-10,1338]],[[284858,366812],[77,-164]],[[284935,366648],[-7,-2001],[-380,948],[-673,137],[24,1170]],[[240886,368746],[3,-7717]],[[240889,361029],[-605,67]],[[240284,361096],[-452,335]],[[239832,361431],[-22,6076]],[[161404,359060],[-763,407],[-257,-1537]],[[160384,357930],[-486,2766],[-658,1780],[-447,2635]],[[158896,368457],[358,-59]],[[261842,365566],[-523,-2202]],[[261319,363364],[-642,5164]],[[242100,360892],[-1211,137]],[[275026,365644],[-484,-1303]],[[274542,364341],[-690,-1814]],[[273852,362527],[-445,2380],[92,338]],[[230194,365417],[-2,-5660]],[[230192,359757],[-625,5]],[[229567,359762],[-1109,1]],[[228458,359763],[-16,8871]],[[228458,359763],[-876,-6]],[[227582,359757],[-948,0]],[[226634,359757],[-13,7215]],[[220213,368621],[49,-8799]],[[220262,359822],[-1515,-40]],[[218747,359782],[-2,7215],[-52,1]],[[221783,366875],[7,-7101]],[[221790,359774],[-1286,38]],[[220504,359812],[-242,10]],[[225109,366931],[7,-7184]],[[225116,359747],[-550,11]],[[224566,359758],[-1269,13]],[[223297,359771],[-31,7163]],[[261319,363364],[-484,-1545]],[[260835,361819],[-445,1353]],[[260390,363172],[-31,2226],[112,2238]],[[278782,367130],[-479,-729]],[[176230,341181],[676,-3535]],[[176906,337646],[-237,-293],[-2131,-6],[-3163,16]],[[171375,337363],[-1036,-168]],[[170339,337195],[74,1516],[-404,8051],[81,566],[-423,2802],[-72,2164],[-261,2779]],[[285483,364729],[247,-950]],[[285730,363779],[-49,-868]],[[285681,362911],[-94,912],[-633,479],[-19,2346]],[[285270,368297],[233,-1659]],[[285503,366638],[-153,-1180]],[[285350,365458],[133,-729]],[[260390,363172],[-160,-225]],[[260230,362947],[-453,-403],[-418,352]],[[259359,362896],[21,897],[-302,2237]],[[267875,363430],[-170,-1501],[19,-1797],[-189,-331]],[[267535,359801],[-167,368]],[[267368,360169],[-60,2882],[-338,936],[-80,1342],[-349,-222],[-82,-931]],[[266459,364176],[-53,421]],[[279509,363604],[-224,-3408]],[[279285,360196],[-519,775]],[[278766,360971],[-292,-175],[-159,1424],[-530,-1399]],[[239832,361431],[-1514,177]],[[238318,361608],[-48,3423]],[[253406,362518],[-128,-3094]],[[253278,359424],[-344,1547],[-334,-766]],[[252600,360205],[-233,1071]],[[252367,361276],[211,-229]],[[245537,361562],[-556,-176],[-16,-3767]],[[244965,357619],[-1212,97]],[[243753,357716],[7,2976]],[[201904,367295],[0,-3259],[564,-4371]],[[202468,359665],[-2632,116]],[[199836,359781],[-169,0]],[[276659,363978],[-321,-1646],[-128,663],[-334,-926]],[[275876,362069],[-139,-177]],[[275737,361892],[-37,2241],[-197,1991]],[[276171,365518],[-31,-845]],[[276140,364673],[211,-935],[217,1690],[-397,90]],[[257011,363732],[-118,-2665]],[[256893,361067],[-311,-151]],[[256582,360916],[-548,-371],[-28,565]],[[256006,361110],[-205,1595]],[[281161,365296],[-22,-3279]],[[281139,362017],[-569,-758]],[[280570,361259],[-694,2327],[30,825]],[[204580,359704],[-804,-10]],[[203776,359694],[-1308,-29]],[[258405,362945],[-625,205],[-142,-3375]],[[257638,359775],[-745,1292]],[[258210,365757],[195,-2812]],[[216174,367014],[4,-7320]],[[216178,359694],[-1317,-41]],[[214861,359653],[-39,8]],[[217535,367000],[4,-7258]],[[217539,359742],[-1361,-48]],[[218747,359782],[-870,-30]],[[217877,359752],[-338,-10]],[[232990,366930],[-4,-7162]],[[232986,359768],[-736,0]],[[232250,359768],[-495,-4]],[[231755,359764],[0,5587]],[[226634,359757],[-863,-11]],[[225771,359746],[-655,1]],[[223297,359771],[-1270,0]],[[222027,359771],[-237,3]],[[234233,366109],[3,-6336]],[[234236,359773],[-930,-5]],[[233306,359768],[-320,0]],[[254834,362560],[-147,-2742]],[[254687,359818],[-400,-772]],[[254287,359046],[-461,3988],[-149,91]],[[285503,366638],[154,-1165],[635,-2093],[-66,-1012]],[[286226,362368],[53,-609]],[[286279,361759],[-115,-211]],[[286164,361548],[-434,2231]],[[285483,364729],[-133,729]],[[237082,365181],[-19,-4504]],[[237063,360677],[-1557,162]],[[235506,360839],[0,5242]],[[275737,361892],[-473,-1709],[-546,-689]],[[274718,359494],[-101,1954]],[[274617,361448],[153,1099]],[[274770,362547],[-228,1794]],[[266459,364176],[-121,-2911],[119,-2630]],[[266457,358635],[-224,322]],[[266233,358957],[-784,1845]],[[265449,360802],[-274,2103],[71,1541]],[[264091,359038],[-613,-1731]],[[263478,357307],[-281,2109],[-435,319]],[[262762,359735],[-183,2206]],[[264284,362609],[-193,-3571]],[[235506,360839],[0,-1078]],[[235506,359761],[-1085,11]],[[234421,359772],[-185,1]],[[259359,362896],[-159,-1977]],[[259200,360919],[-468,373],[-327,1653]],[[276140,364673],[31,845]],[[252367,361276],[-1008,2722]],[[251359,363998],[-4,1417]],[[272820,364154],[-287,-1786],[161,-862],[-535,-1063],[70,-474]],[[272229,359969],[-685,-1435],[-271,477]],[[271273,359011],[-336,3424]],[[250466,366019],[-48,-4180],[274,-850]],[[250692,360989],[92,-1564]],[[250784,359425],[-347,1556],[-155,-1005]],[[250282,359976],[-177,539],[-309,3947]],[[265449,360802],[-249,-1448],[-375,-410]],[[264825,358944],[-564,-169]],[[264261,358775],[-170,263]],[[251359,363998],[-15,-29]],[[251344,363969],[-427,-1199],[-225,-1781]],[[267368,360169],[-217,-969],[-641,-1367]],[[266510,357833],[-53,802]],[[248061,360548],[-409,-2218]],[[247652,358330],[-1170,82]],[[246482,358412],[-282,2305]],[[283884,365227],[441,265],[239,-1371]],[[284564,364121],[-405,-2255]],[[284159,361866],[-678,-2215]],[[283481,359651],[-2,3311]],[[283479,362962],[63,1380]],[[283659,365597],[225,-370]],[[262181,363245],[-452,-3529],[-71,-1327]],[[261658,358389],[-614,240]],[[261044,358629],[-209,3190]],[[270247,360557],[-500,-1318]],[[269747,359239],[-387,951],[-242,3364]],[[231755,359764],[-101,-4]],[[231654,359760],[-1462,-3]],[[273852,362527],[-162,-1380]],[[273690,361147],[-561,-945],[-310,462],[-429,-1770]],[[272390,358894],[-161,1075]],[[282112,359572],[-317,633]],[[281795,360205],[-220,-114],[-436,1926]],[[282374,363367],[-290,-906],[28,-2889]],[[238318,361608],[-4,-1905]],[[238314,359703],[-2,-1358]],[[238312,358345],[-1259,166]],[[237053,358511],[10,2166]],[[160384,357930],[-174,-102]],[[160210,357828],[-281,264],[-164,-998]],[[159765,357094],[-379,2271],[-464,-404],[-520,2826]],[[283344,363927],[135,-965]],[[283481,359651],[-614,-2145]],[[282867,357506],[-109,311]],[[282758,357817],[-299,1492],[-347,263]],[[269086,363432],[-450,-1508],[10,-1311],[-407,-1312]],[[268239,359301],[-193,764],[-584,-1127],[73,863]],[[250282,359976],[-572,-2622]],[[249710,357354],[-479,-188]],[[249231,357166],[11,1267],[-274,2900],[59,794]],[[280570,361259],[-138,-3504]],[[280432,357755],[-433,-3598]],[[279999,354157],[-48,2703],[-666,3336]],[[274770,362547],[-153,-1099]],[[274718,359494],[-251,-983]],[[274467,358511],[-297,-983]],[[274170,357528],[-480,3619]],[[285497,362381],[-63,-1487],[-424,-1183]],[[285010,359711],[-289,-964]],[[284721,358747],[-34,2055],[-528,1064]],[[284564,364121],[581,-507],[352,-1233]],[[277364,360567],[-130,-3464]],[[277234,357103],[-337,-1260],[-663,787],[-116,-677]],[[276118,355953],[-70,868],[-471,580]],[[275577,357401],[360,2850],[-61,1818]],[[251671,358926],[-486,-648],[-308,443]],[[250877,358721],[-93,704]],[[251344,363969],[327,-5043]],[[252600,360205],[-4,-1497]],[[252596,358708],[-916,78]],[[251680,358786],[-9,140]],[[286164,361548],[133,-1960]],[[286297,359588],[-664,2557],[48,766]],[[269747,359239],[82,-1209],[-301,-552]],[[269528,357478],[-635,40],[-381,-1462]],[[268512,356056],[-298,1723]],[[268214,357779],[25,1522]],[[259200,360919],[-148,-2366]],[[259052,358553],[-666,-2939]],[[258386,355614],[14,578],[-508,429],[-79,979]],[[257813,357600],[-175,2175]],[[262762,359735],[-638,-2584]],[[262124,357151],[-421,-78]],[[261703,357073],[-45,1316]],[[261044,358629],[-402,-2234]],[[260642,356395],[-399,432]],[[260243,356827],[-13,6120]],[[254287,359046],[-781,-1739]],[[253506,357307],[-228,2117]],[[260243,356827],[-662,-2212]],[[259581,354615],[-529,3938]],[[256006,361110],[-211,-8003]],[[255795,353107],[-851,-64]],[[254944,353043],[-147,-18]],[[254797,353025],[95,6137],[-205,656]],[[285916,358061],[-1039,-4907]],[[284877,353154],[-34,77]],[[284843,353231],[-42,1109]],[[284801,354340],[305,3818],[-96,1553]],[[285497,362381],[59,-1873],[467,-1557],[-107,-890]],[[271273,359011],[-157,-551]],[[271116,358460],[-308,-1199],[-364,-179],[-73,-1054],[-635,-1658]],[[269736,354370],[-208,3108]],[[278766,360971],[-356,-9724]],[[278410,351247],[-345,-4]],[[278065,351243],[106,760],[-263,1161],[-285,-493],[86,-1438]],[[277709,351233],[-112,-1]],[[277597,351232],[-569,21]],[[277028,351253],[206,5850]],[[275577,357401],[-419,-1374],[-218,-1669]],[[274940,354358],[-473,4153]],[[249231,357166],[-25,-4320],[-720,33]],[[248486,352879],[-527,25]],[[247959,352904],[-9,1582],[-298,3844]],[[281795,360205],[-66,-4560]],[[281729,355645],[-596,561],[-701,1549]],[[286315,361864],[-36,-105]],[[286315,361864],[307,-509],[-325,-1767]],[[284721,358747],[-1328,-4408]],[[283393,354339],[-167,252],[88,2639],[-447,276]],[[246482,358412],[44,-2141]],[[246526,356271],[-1263,227]],[[245263,356498],[-303,38],[5,1083]],[[240284,361096],[-17,-4867]],[[240267,356229],[-1101,142]],[[239166,356371],[-106,8],[13,3262],[-759,62]],[[274170,357528],[-841,-1351]],[[273329,356177],[-156,-696],[-455,-110]],[[272718,355371],[-328,3523]],[[257813,357600],[-221,-728],[-203,-3628]],[[257389,353244],[-828,-107]],[[256561,353137],[21,7779]],[[256561,353137],[-151,-14]],[[256410,353123],[-615,-16]],[[242552,360828],[-65,-4878]],[[242487,355950],[-1819,221]],[[240668,356171],[-401,58]],[[253506,357307],[130,-2237]],[[253636,355070],[-1045,64]],[[252591,355134],[5,3574]],[[250877,358721],[-61,-2945]],[[250816,355776],[-215,-1258],[64,-1202]],[[250665,353316],[-204,-1647],[-215,1259]],[[250246,352928],[-536,4426]],[[279999,354157],[-151,-412],[-88,-2492]],[[279760,351253],[-173,-5]],[[279587,351248],[-953,1]],[[278634,351249],[-224,-2]],[[243753,357716],[-40,-7253]],[[243713,350463],[-1248,-11]],[[242465,350452],[22,5498]],[[237053,358511],[-17,-3425]],[[237036,355086],[-1531,348]],[[235505,355434],[1,4327]],[[266233,358957],[17,-976],[-599,-2205],[-221,-1818]],[[265430,353958],[-521,3091],[-84,1895]],[[282758,357817],[6,-3369],[-310,-3129]],[[282454,351319],[-369,-16]],[[282085,351303],[-408,-9]],[[281677,351294],[52,4351]],[[268214,357779],[-540,-708],[-177,-2081],[-906,-1448]],[[266591,353542],[-141,2662],[60,1629]],[[272718,355371],[-733,-1028],[-226,-1288]],[[271759,353055],[-261,2813],[-382,2592]],[[192649,359743],[0,-24860],[483,-3],[-46,-2691],[-3,-12919],[-57,-4902],[46,-1624],[-29,-12941],[-91,-9],[0,-3908]],[[192952,295886],[-303,169]],[[192649,296055],[0,7877],[-2090,0],[0,4900]],[[190559,308832],[0,51008]],[[190559,308832],[-267,69],[-549,2097],[-586,1352],[-625,-723],[-214,1094]],[[188318,312721],[8,6150],[-629,15],[-1,3313],[-1550,-154],[-3,3263],[-297,21],[4,2068],[-380,-319],[-149,1054],[-899,1045],[-616,2799],[-445,401]],[[183361,332377],[1,5120],[66,1656],[-122,2775],[363,944],[70,1118],[518,1618],[615,865],[469,2332],[-89,1927],[91,1455],[24,3834],[237,2874],[-31,898]],[[254797,353025],[-1049,763]],[[253748,353788],[-112,1282]],[[233306,359768],[-67,-1052],[1,-6427]],[[233240,352289],[-1054,-2]],[[232186,352287],[-1,6412],[65,1069]],[[231654,359760],[-1,-10708]],[[231653,349052],[-2,-4884],[-743,12]],[[230908,344180],[41,1148],[-278,232],[-357,1844],[-191,-673],[-230,2345],[-236,376],[-145,2238],[-299,-1766],[-371,677]],[[228842,350601],[273,1701],[-395,-68]],[[228720,352234],[-26,1706],[357,-36],[129,1256],[379,564],[8,4038]],[[224566,359758],[31,-9970]],[[224597,349788],[-210,-1342],[-482,1078],[-172,1064],[-325,12]],[[223408,350600],[-48,1718],[-452,3424],[-433,679]],[[222475,356421],[0,1]],[[222475,356422],[-448,3349]],[[234421,359772],[22,-6122]],[[234443,353650],[-18,-2995]],[[234425,350655],[-897,9]],[[233528,350664],[-1,1625],[-287,0]],[[232186,352287],[-8,-3237]],[[232178,349050],[-525,2]],[[227582,359757],[-1,-7542]],[[227581,352215],[-1788,-1]],[[225793,352214],[-22,7532]],[[225793,352214],[0,-2428]],[[225793,349786],[-1196,2]],[[228720,352234],[-1136,-19]],[[227584,352215],[-3,0]],[[235505,355434],[1,-1837]],[[235506,353597],[-1063,53]],[[222475,356421],[0,-4177],[-865,-45]],[[221610,352199],[-1108,8]],[[220502,352207],[2,7605]],[[203776,359694],[98,-2074],[-26,-3169],[117,-4650],[-91,-2222],[-239,-893],[559,-1233],[337,-2424],[573,-1622]],[[205104,341407],[-115,-753],[-407,115]],[[204582,340769],[2,439],[-988,-6],[48,-1326],[-533,2]],[[203111,339878],[-7,660]],[[203104,340538],[1,655],[-1776,-49],[0,4052],[-2059,59]],[[199270,345255],[16,10890],[481,2044],[69,1592]],[[199270,345255],[-7,-4085]],[[199263,341170],[-3954,38]],[[195309,341208],[2,18556]],[[195309,341208],[0,-19410]],[[195309,321798],[-1,-7083]],[[195308,314715],[-3,-14913]],[[195305,299802],[-837,-13],[-15,-900],[-398,-1421]],[[194055,297468],[-881,-3135],[-222,1553]],[[212146,359782],[0,-9302]],[[212146,350480],[-110,1],[3,-8289]],[[212039,342192],[-2,-5881]],[[212037,336311],[-929,13]],[[211108,336324],[28,6448],[-1196,-12],[1,1644],[-599,9],[0,810]],[[209342,345223],[3,14488]],[[214861,359653],[-12,-9170]],[[214849,350483],[-362,-4]],[[214487,350479],[-2341,1]],[[217877,359752],[-24,-9286]],[[217853,350466],[-365,-7]],[[217488,350459],[-1501,5]],[[215987,350464],[-1138,19]],[[220502,352207],[-2,-1740]],[[220500,350467],[-1510,-6]],[[218990,350461],[-1137,5]],[[284801,354340],[42,-1109]],[[284877,353154],[-51,-1711]],[[284826,351443],[-1,-153]],[[284825,351290],[-691,44]],[[284134,351334],[-370,-26]],[[283764,351308],[-248,1789],[-323,550],[200,692]],[[263478,357307],[2,-789],[-559,-4123]],[[262921,352395],[-20,2]],[[262901,352397],[-528,227]],[[262373,352624],[-249,4527]],[[205965,359691],[58,-1482],[-85,-3570],[-387,-996],[-22,-2199],[163,-1118],[-61,-4279]],[[205631,346047],[-184,-448],[-36,-1983],[-307,-2209]],[[209342,345223],[-1191,14]],[[208151,345237],[-1196,-14],[2,803],[-1326,21]],[[239166,356371],[-30,-5933]],[[239136,350438],[-750,14]],[[238386,350452],[29,5979],[-103,1914]],[[162899,346141],[-231,-1190],[-456,1973],[-261,-928],[-61,1185],[-572,3411],[-183,-60],[-19,1981],[-417,1414],[44,778],[-533,3123]],[[265430,353958],[-148,-1853]],[[265282,352105],[-222,46]],[[265060,352151],[-603,35]],[[264457,352186],[-224,1544],[-135,2569],[163,2476]],[[286870,358327],[-79,-1657]],[[286791,356670],[-328,768],[3,1656],[404,-767]],[[264457,352186],[-96,-2]],[[264361,352184],[-1440,211]],[[266591,353542],[-596,-1193]],[[265995,352349],[-713,-244]],[[251680,358786],[-1,-3231]],[[251679,355555],[-863,221]],[[252591,355134],[-9,-4639]],[[252582,350495],[-78,9]],[[252504,350504],[-835,20]],[[251669,350524],[10,5031]],[[261703,357073],[-226,-4256]],[[261477,352817],[-391,-141]],[[261086,352676],[-444,3719]],[[259581,354615],[12,-1749]],[[259593,352866],[-647,210]],[[258946,353076],[-576,206]],[[258370,353282],[16,2332]],[[238386,350452],[-787,-3]],[[237599,350449],[-586,0]],[[237013,350449],[23,4637]],[[287748,351418],[-69,0]],[[287679,351418],[-139,3114],[-110,-3118]],[[287430,351414],[-90,0]],[[287340,351414],[-61,2]],[[287279,351416],[-242,-2]],[[287037,351414],[1,2143],[150,496],[-378,1441],[-61,1239]],[[286749,356733],[42,-63]],[[286870,358327],[530,-179],[348,-6730]],[[274940,354358],[-364,-882],[-48,-1926]],[[274528,351550],[-629,24]],[[273899,351574],[-213,1696]],[[273686,353270],[-50,397]],[[273636,353667],[-307,2510]],[[270321,353193],[-338,-940]],[[269983,352253],[-141,1]],[[269842,352254],[-106,2116]],[[271759,353055],[-114,-499]],[[271645,352556],[-501,43]],[[271144,352599],[-890,-363]],[[270254,352236],[67,957]],[[247959,352904],[-202,-2471]],[[247757,350433],[-990,13]],[[246767,350446],[-44,3365],[-197,2460]],[[286206,357292],[36,565]],[[286206,357292],[-103,-959],[-95,-4917]],[[286008,351416],[-140,0]],[[285868,351416],[-1042,27]],[[285916,358061],[-22,-1250],[348,1046]],[[163911,339436],[276,-2210]],[[164187,337226],[-3149,125]],[[161038,337351],[-326,1746],[-77,1735],[-231,787],[-396,3161],[-503,2053],[-222,5105],[442,1739],[40,3417]],[[283764,351308],[-1310,11]],[[268512,356056],[-491,-2310],[-105,-1529]],[[267916,352217],[-1356,67]],[[266560,352284],[-565,65]],[[281677,351294],[-774,-7]],[[280903,351287],[-371,-27]],[[280532,351260],[-772,-7]],[[262373,352624],[-838,204]],[[261535,352828],[-58,-11]],[[245263,356498],[-29,-6068]],[[245234,350430],[-782,-12]],[[244452,350418],[-119,11]],[[244333,350429],[-620,34]],[[269842,352254],[-878,-31]],[[268964,352223],[-617,-6]],[[268347,352217],[-431,0]],[[258370,353282],[-422,-315]],[[257948,352967],[-559,277]],[[276118,355953],[-148,-277],[114,-4413]],[[276084,351263],[-1077,152]],[[275007,351415],[-479,135]],[[250246,352928],[-253,-2473]],[[249993,350455],[-186,-21]],[[249807,350434],[-151,5]],[[249656,350439],[-18,-3004]],[[249638,347435],[-129,1228],[-367,441],[-80,-746],[-582,45]],[[248480,348403],[6,4476]],[[286305,356800],[-51,-466]],[[286570,356468],[-316,-134]],[[286570,356468],[124,213]],[[286694,356681],[55,52]],[[287037,351414],[-532,-2]],[[286505,351412],[-497,4]],[[286305,356800],[-99,492]],[[277028,351253],[-871,10]],[[276157,351263],[-73,0]],[[181366,356861],[18,-12097],[-305,-3169],[-223,-192],[-381,2417],[-725,-8],[-350,-1053],[144,-4362],[76,-6300],[227,-3470],[73,-3058],[-216,-1125],[36,-1876]],[[179740,322568],[-2834,15078]],[[261086,352676],[-980,65]],[[260106,352741],[-513,125]],[[246767,350446],[-580,-1]],[[246187,350445],[-953,-15]],[[240668,356171],[-20,-5742]],[[240648,350429],[-227,4]],[[240421,350433],[-1234,7]],[[239187,350440],[-51,-2]],[[223408,350600],[12,-6428]],[[223420,344172],[-1187,51]],[[222233,344223],[-596,-4],[-27,7980]],[[273636,353667],[50,-397]],[[273899,351574],[-178,50]],[[273721,351624],[-1258,239]],[[272463,351863],[-903,250]],[[271560,352113],[85,443]],[[242465,350452],[-84,-5]],[[242381,350447],[-1055,0]],[[241326,350447],[-678,-18]],[[251669,350524],[-28,4]],[[251641,350528],[-22,-4]],[[251619,350524],[-191,1382],[-763,1410]],[[237013,350449],[-1507,13]],[[235506,350462],[0,3135]],[[253748,353788],[47,-3358]],[[253795,350430],[-1213,65]],[[170339,337195],[-4266,60]],[[166073,337255],[29,8917],[143,-16],[5,2474],[-284,1630]],[[254944,353043],[136,-5034]],[[255080,348009],[-640,-725],[-443,466]],[[253997,347750],[-26,131]],[[253971,347881],[-176,2549]],[[235506,350462],[154,-6283]],[[235660,344179],[-653,-10]],[[235007,344169],[-597,8]],[[234410,344177],[15,6478]],[[257414,348712],[-201,-1047],[-242,621]],[[256971,348286],[-207,-250],[-369,1607]],[[256395,349643],[15,3480]],[[257948,352967],[-373,-4227],[-161,-28]],[[258946,353076],[-66,-2837]],[[258880,350239],[-152,-2605]],[[258728,347634],[-470,-221],[-397,-1687]],[[257861,345726],[-447,2986]],[[251619,350524],[-1425,9]],[[250194,350533],[-201,-78]],[[256395,349643],[-463,-2485]],[[255932,347158],[-632,238]],[[255300,347396],[-220,613]],[[278065,351243],[-356,-10]],[[260035,350463],[-39,-1632]],[[259996,348831],[-420,265]],[[259576,349096],[-528,339],[-168,804]],[[260106,352741],[-71,-2278]],[[248480,348403],[6,-7256]],[[248486,341147],[-919,-50]],[[247567,341097],[-247,-13]],[[247320,341084],[102,953]],[[247422,342037],[419,2876]],[[247841,344913],[353,1892],[-44,1811],[-209,1819],[-184,-2]],[[262901,352397],[149,-1465]],[[263050,350932],[-592,1050],[-298,-536],[-193,-2703]],[[261967,348743],[-458,2312]],[[261509,351055],[26,1773]],[[261509,351055],[-433,-573],[-153,-1811]],[[260923,348671],[-582,2219],[-306,-427]],[[270706,350628],[-572,-2009],[-308,-73]],[[269826,348546],[-389,912],[-672,-256]],[[268765,349202],[199,3021]],[[270254,352236],[-271,17]],[[271144,352599],[-438,-1971]],[[271560,352113],[-142,-3665]],[[271418,348448],[-528,-1943]],[[270890,346505],[-41,-397]],[[270849,346108],[-351,1893],[300,1976],[-92,651]],[[264361,352184],[5,-1438],[-252,-900],[56,-3382],[-120,-1264]],[[264050,345200],[-190,-992]],[[263860,344208],[-474,1989],[-250,1871]],[[263136,348068],[117,454],[-203,2410]],[[266560,352284],[206,-1169],[31,-2258]],[[266797,348857],[-174,-720],[-607,-562]],[[266016,347575],[-183,13],[-202,1691],[-279,-297]],[[265352,348982],[-292,3169]],[[228842,350601],[-61,-3232],[298,0],[0,-1617]],[[229079,345752],[-602,-1],[-1,-1624],[-593,-2]],[[227883,344125],[-297,101]],[[227586,344226],[-2,7989]],[[268347,352217],[-502,-559],[-752,-3147]],[[267093,348511],[-296,346]],[[233528,350664],[-299,-2],[-14,-8097]],[[233215,342565],[-365,1],[-131,1627],[-399,1]],[[232320,344194],[-150,-1],[8,4857]],[[265352,348982],[-275,-2785]],[[265077,346197],[-193,-790],[-429,315],[-38,-1252],[-367,730]],[[268765,349202],[-61,-397]],[[268704,348805],[-665,-1448],[-393,-1682]],[[267646,345675],[-224,1917],[-258,-1046]],[[267164,346546],[-71,1965]],[[227586,344226],[-599,4]],[[226987,344230],[-1193,4]],[[225794,344234],[-1,5552]],[[222233,344223],[3,-2818]],[[222236,341405],[-226,-158],[-275,-2614],[-162,-422],[-441,841],[-101,2156],[-521,-2268]],[[220510,338940],[0,3261]],[[220510,342201],[-10,8266]],[[272463,351863],[277,-3899]],[[272740,347964],[-622,-2325]],[[272118,345639],[-700,2809]],[[263136,348068],[-494,-1684],[-81,-2308]],[[262561,344076],[-537,-332]],[[262024,343744],[-54,115]],[[261970,343859],[103,956],[-106,3928]],[[273721,351624],[-182,-2986]],[[273539,348638],[-167,-516],[-189,1242],[-443,-1400]],[[230908,344180],[-82,5]],[[230826,344185],[-902,-44]],[[229924,344141],[-550,-15],[0,1626],[-295,0]],[[275007,351415],[-33,-5379]],[[274974,346036],[-1,-378]],[[274973,345658],[-247,762],[-926,-859]],[[273800,345561],[12,1685],[-273,1392]],[[285868,351416],[140,-749]],[[286008,350667],[106,-2464]],[[286114,348203],[-296,-486]],[[285818,347717],[-335,-961]],[[285483,346756],[-266,1180],[-452,774]],[[284765,348710],[60,2580]],[[287331,347551],[-272,271],[-554,3590]],[[287279,351416],[112,-2597],[320,-2367],[229,-3945],[-412,3972],[-197,1072]],[[287748,351418],[261,-5943]],[[288009,345475],[-7,-9]],[[288002,345466],[-124,1107],[-199,4845]],[[276157,351263],[-22,-5309]],[[276135,345954],[-1161,82]],[[287331,347551],[294,-3319],[-296,418],[-595,3435]],[[286734,348085],[-726,2582]],[[282085,351303],[5,-704]],[[282090,350599],[-40,-2323],[-263,-3337]],[[281787,344939],[-837,1178]],[[280950,346117],[82,750],[-129,4420]],[[284010,345759],[-232,-1457]],[[283778,344302],[-264,840],[-153,2057],[-292,-389],[-26,2140],[-250,1169],[-703,480]],[[284134,351334],[123,-1350],[-247,-4225]],[[284765,348710],[428,-835],[170,-2171]],[[285363,345704],[-1353,55]],[[279587,351248],[-16,-5691]],[[279571,345557],[-415,60]],[[279156,345617],[-565,56]],[[278591,345673],[43,5576]],[[280950,346117],[-322,-1897],[-207,205]],[[280421,344425],[-40,5196],[151,1639]],[[280421,344425],[-138,-2849]],[[280283,341576],[-564,914]],[[279719,342490],[-155,442],[7,2625]],[[277597,351232],[-60,-5440]],[[277537,345792],[-1,-133]],[[277536,345659],[-1401,295]],[[278591,345673],[-288,31]],[[278303,345704],[-766,88]],[[261970,343859],[-836,1715],[-211,1218]],[[260923,346792],[0,1879]],[[260923,346792],[-350,-1703],[-444,506]],[[260129,345595],[-184,949],[51,2287]],[[283778,344302],[137,-1341],[-235,-398]],[[283680,342563],[-211,-1306]],[[283469,341257],[-343,603],[-21,992],[-459,1162]],[[282646,344014],[-526,-168],[-333,1093]],[[234410,344177],[-298,-3],[1,-1624],[-250,5]],[[233863,342555],[-648,10]],[[270849,346108],[-412,-3021]],[[270437,343087],[-395,999]],[[270042,344086],[-95,1419],[-234,366]],[[269713,345871],[113,2675]],[[286734,348085],[37,-1381],[441,-2720],[-295,-510],[-337,1726]],[[286580,345200],[-247,781],[-219,2222]],[[251641,350528],[29,-1722],[-373,-22],[-27,-3471]],[[251270,345313],[-542,-338]],[[250728,344975],[-915,150]],[[249813,345125],[341,3659],[40,1749]],[[225794,344234],[-297,0]],[[225497,344234],[-1188,0]],[[224309,344234],[-889,-62]],[[252504,350504],[-37,-6508]],[[252467,343996],[-452,-1664]],[[252015,342332],[-416,1162],[-329,1819]],[[249813,345125],[-408,-510]],[[249405,344615],[-185,1255],[449,35],[-218,1039],[187,491]],[[249807,350434],[-151,5]],[[215987,342196],[-1502,-4]],[[214485,342192],[2,8287]],[[215987,350464],[0,-8268]],[[253971,347881],[-287,-10],[29,-1851],[-361,-2614]],[[253352,343406],[3,475],[-888,115]],[[217486,342236],[0,-44]],[[217486,342192],[-1499,4]],[[217488,350459],[-2,-8223]],[[214485,342192],[-2446,0]],[[218990,350461],[-2,-8244]],[[218988,342217],[-1502,19]],[[220510,342201],[-1504,15]],[[219006,342216],[-18,1]],[[237599,350449],[-67,-2392],[210,-1186]],[[237742,346871],[-201,-1331]],[[237541,345540],[-238,-554],[-1004,172],[-161,-2143],[-448,53]],[[235690,343068],[-30,1111]],[[244333,350429],[-13,-3019],[-310,36],[-1,-1628],[-349,62]],[[243660,345880],[-1297,148]],[[242363,346028],[18,4419]],[[239187,350440],[-9,-7019]],[[239178,343421],[-500,72]],[[238678,343493],[-199,24],[-297,3289],[-440,65]],[[244452,350418],[273,-1429],[140,-3024]],[[244865,345965],[-253,-501],[-21,-6336]],[[244591,339128],[-295,860],[-689,92]],[[243607,340080],[77,1094],[-24,4706]],[[246124,346133],[-9,-2184]],[[246115,343949],[-921,327],[-329,1689]],[[246187,350445],[91,-4020],[-154,-292]],[[240421,350433],[-86,-130],[-16,-7014]],[[240319,343289],[-151,19]],[[240168,343308],[-990,113]],[[241326,350447],[-51,-4301],[214,-302],[163,-1657],[2,-1854]],[[241654,342333],[-1188,137],[-147,819]],[[242363,346028],[-109,-2389]],[[242254,343639],[-4,-1372],[-299,33],[-7,-1620],[-298,35]],[[241646,340715],[8,1618]],[[247841,344913],[-363,-14],[3,1092],[-1357,142]],[[166073,337255],[-1825,-24]],[[164248,337231],[-61,-5]],[[259576,349096],[-441,-2425]],[[259135,346671],[-407,963]],[[256971,348286],[-234,-4732],[-157,-1542]],[[256580,342012],[-358,78]],[[256222,342090],[31,3291]],[[256253,345381],[-11,1627],[-310,150]],[[269713,345871],[-270,-1826],[-440,-1091]],[[269003,342954],[-147,935],[39,5066],[-191,-150]],[[273800,345561],[-24,-3359]],[[273776,342202],[-410,-186]],[[273366,342016],[-834,-921]],[[272532,341095],[-604,2256]],[[271928,343351],[190,2288]],[[266016,347575],[-182,-3347]],[[265834,344228],[-583,406]],[[265251,344634],[-174,1563]],[[260129,345595],[-76,-1981]],[[260053,343614],[-159,-706],[-544,-143]],[[259350,342765],[-215,3906]],[[249405,344615],[100,-1065],[-238,-811],[-78,-1540]],[[249189,341199],[-703,-52]],[[232320,344194],[0,-4873],[-163,-839]],[[232157,338482],[-593,17]],[[231564,338499],[9,4068],[-746,8],[-1,1610]],[[267164,346546],[-203,141],[-387,-2271]],[[266574,344416],[-254,92],[-305,-1843]],[[266015,342665],[-181,1563]],[[257861,345726],[219,-2689]],[[258080,343037],[-288,-2464]],[[257792,340573],[-469,1261],[-395,312],[-275,-1179],[-73,1045]],[[269003,342954],[-22,-1048]],[[268981,341906],[-95,483],[-414,-1436],[-99,-1242],[-215,430]],[[268158,340141],[0,1]],[[268158,340142],[-746,4390]],[[267412,344532],[234,1143]],[[271928,343351],[-738,-110]],[[271190,343241],[-274,1942],[-26,1322]],[[286580,345200],[260,-2059],[-166,-58],[-563,1793],[417,-1963],[-516,-159]],[[286012,342754],[-231,471],[37,4492]],[[263860,344208],[277,-2133]],[[264137,342075],[-291,-1173],[-653,-1442]],[[263193,339460],[-112,1610],[-520,3006]],[[255300,347396],[-148,-2919]],[[255152,344477],[-646,1243],[-422,-29]],[[254084,345691],[-87,2059]],[[254084,345691],[77,-2250],[-252,-3270],[243,-246],[-104,-1722]],[[254048,338203],[-22,-470]],[[254026,337733],[-578,561]],[[253448,338294],[-109,14],[13,5098]],[[259350,342765],[125,-2327]],[[259475,340438],[-385,-123]],[[259090,340315],[-438,450],[-572,2272]],[[286012,342754],[225,-326],[-290,-1136],[-496,1123],[-83,1530],[115,2811]],[[267412,344532],[-191,-1784]],[[267221,342748],[-165,990],[-482,678]],[[256222,342090],[-60,-1686]],[[256162,340404],[-921,638]],[[255241,341042],[-89,3435]],[[238678,343493],[80,-2934],[-203,-1599],[13,-2199]],[[238568,336761],[-493,96]],[[238075,336857],[-599,-165]],[[237476,336692],[-145,21]],[[237331,336713],[52,6147],[158,2680]],[[262024,343744],[-409,-705],[-49,-2263]],[[261566,340776],[-126,977],[-554,938],[-379,-1246]],[[260507,341445],[-454,2169]],[[265251,344634],[-424,-2187],[97,-598],[-378,-805],[-214,-1553]],[[264332,339491],[-195,2584]],[[274973,345658],[38,-1939],[-162,-1685]],[[274849,342034],[-546,79]],[[274303,342113],[-527,89]],[[271190,343241],[205,-849],[-197,-1935]],[[271198,340457],[-257,707]],[[270941,341164],[-122,-754]],[[270819,340410],[-107,-893]],[[270712,339517],[-146,572],[-129,2998]],[[281787,344939],[-692,-7162]],[[281095,337777],[-139,1398],[-673,2401]],[[247320,341084],[-33,-576],[-1290,60]],[[245997,340568],[118,3381]],[[208151,345237],[293,-4778],[-163,-1891],[63,-1472]],[[208344,337096],[-1781,-187],[-951,1848],[-1038,6]],[[204574,338763],[8,2006]],[[276135,345954],[-22,-4592]],[[276113,341362],[-980,-698]],[[275133,340664],[-284,1370]],[[243607,340080],[-387,-1384]],[[243220,338696],[-296,1224],[-438,78],[155,1793],[-387,1848]],[[270042,344086],[-542,-1570]],[[269500,342516],[-247,-1768]],[[269253,340748],[-294,-190],[22,1348]],[[245997,340568],[-63,-1620],[-438,76]],[[245496,339024],[-464,93]],[[245032,339117],[-441,11]],[[277536,345659],[-27,-6364]],[[277509,339295],[-1406,392]],[[276103,339687],[10,1675]],[[278303,345704],[22,-6834]],[[278325,338870],[33,-603],[-850,-17]],[[277508,338250],[1,1045]],[[229924,344141],[1,-4065]],[[229925,340076],[-1447,8]],[[228478,340084],[-594,800],[-1,3241]],[[255241,341042],[-480,-1635],[-27,-1245]],[[254734,338162],[-379,-650],[-307,691]],[[285363,345704],[-90,-1720],[200,-3016],[-54,-1230]],[[285419,339738],[-161,-1089]],[[285258,338649],[0,-1]],[[285258,338649],[-207,364],[-191,-1126],[-97,1433],[-186,-785],[-144,1522],[-394,-15],[-22,1228],[-337,1293]],[[279156,345617],[-183,-6999]],[[278973,338618],[-648,252]],[[279719,342490],[139,-1156],[-370,-2639],[-207,11]],[[279281,338706],[-308,-88]],[[237331,336713],[-1478,-32]],[[235853,336681],[-163,6387]],[[287690,334442],[-349,563]],[[287341,335005],[74,4092],[488,660],[174,-762],[41,-4814],[-337,-751],[-91,1012]],[[288009,345475],[568,-6870],[-469,3339],[-106,3522]],[[252015,342332],[-40,-5057]],[[251975,337275],[-583,117]],[[251392,337392],[-539,1204],[-221,2559]],[[250632,341155],[96,3820]],[[203104,340538],[-422,-118],[-2,-2837],[423,-966]],[[203103,336617],[9,-10066]],[[203112,326551],[-2650,80]],[[200462,326631],[-119,1601],[-198,-3]],[[200145,328229],[4,12910],[-886,31]],[[211108,336324],[-14,-6367],[-716,-155]],[[210378,329802],[-244,606],[-702,7065],[-124,-377],[-964,0]],[[250632,341155],[-254,-2106],[-175,-101]],[[250203,338948],[-180,1222],[-661,-786]],[[249362,339384],[-173,1815]],[[282646,344014],[-362,-5323]],[[282284,338691],[-1014,-2547]],[[281270,336144],[-175,1633]],[[267221,342748],[-212,-3523]],[[267009,339225],[-457,517],[-553,2139]],[[265999,341881],[16,784]],[[265999,341881],[52,-1240],[-389,-1579]],[[265662,339062],[-165,-855],[-257,652],[-539,-385],[-75,-938]],[[264626,337536],[-271,1710]],[[264355,339246],[-23,245]],[[268158,340141],[-176,-2867]],[[267982,337274],[-326,-27],[-492,-1365]],[[267164,335882],[-1,-24]],[[267163,335858],[-154,3367]],[[263193,339460],[-282,-1555]],[[262911,337905],[-375,-1179]],[[262536,336726],[-941,75]],[[261595,336801],[0,25]],[[261595,336826],[-52,385]],[[261543,337211],[10,106]],[[261553,337317],[156,2178],[-143,1281]],[[226987,344230],[5,-8168]],[[226992,336062],[-1485,-16]],[[225507,336046],[-10,8188]],[[228478,340084],[-1,-4054]],[[228477,336030],[-1485,32]],[[225507,336046],[-296,-3],[0,-3229]],[[225211,332814],[-863,2]],[[224348,332816],[-25,4855]],[[224323,337671],[-14,6563]],[[224323,337671],[-2072,-4]],[[222251,337667],[-15,3738]],[[231564,338499],[-444,3],[-1,-4058]],[[231119,334444],[-1192,-1]],[[229927,334443],[-2,5633]],[[233863,342555],[-208,-1974],[145,-1820],[-98,-1074]],[[233702,337687],[-1043,-408],[-29,1219],[-323,-7]],[[232307,338491],[-150,-9]],[[235007,344169],[-28,-9734]],[[234979,334435],[-892,6]],[[234087,334441],[0,3236],[-385,10]],[[235853,336681],[58,-2247]],[[235911,334434],[-932,1]],[[270712,339517],[-422,-1622]],[[270290,337895],[-183,3520],[-607,1101]],[[283469,341257],[168,-1847],[-22,-1611]],[[283615,337799],[-112,244],[-755,-2883]],[[282748,335160],[-250,2798],[-214,733]],[[253448,338294],[-3,-541]],[[253445,337753],[-1089,148],[-102,-658]],[[252254,337243],[-279,32]],[[260507,341445],[21,-2479],[-126,-943]],[[260402,338023],[-565,156]],[[259837,338179],[-362,2259]],[[243220,338696],[34,-3025]],[[243254,335671],[-1124,134]],[[242130,335805],[-496,72],[5,1351]],[[241639,337228],[7,3487]],[[240168,343308],[-18,-7271]],[[240150,336037],[-594,79]],[[239556,336116],[-989,104],[1,541]],[[272532,341095],[-16,-3720]],[[272516,337375],[-83,-532]],[[272433,336843],[-535,176],[-700,3438]],[[241639,337228],[-595,42],[-2,-1349],[-498,75]],[[240544,335996],[-394,41]],[[259090,340315],[-150,-4665]],[[258940,335650],[-106,-1338]],[[258834,334312],[-300,532],[-141,-775],[-313,1293],[-345,-45]],[[257735,335317],[-130,449]],[[257605,335766],[203,1497],[-16,3310]],[[270290,337895],[-396,-2233]],[[269894,335662],[-202,1972],[-170,143]],[[269522,337777],[-269,2971]],[[261553,337317],[-455,475],[-475,-445]],[[260623,337347],[-221,676]],[[281095,337777],[-585,-2047],[-679,-3519]],[[279831,332211],[-571,1186]],[[279260,333397],[-227,517],[248,4792]],[[285258,338648],[-235,-2967]],[[285023,335681],[-392,-875],[-524,1390]],[[284107,336196],[-492,1603]],[[269522,337777],[-293,-274],[-813,-2185],[-219,-149]],[[268197,335169],[-215,2105]],[[275133,340664],[83,-1448],[-296,-1329],[32,-1467]],[[274952,336420],[-480,1873],[-210,137]],[[274262,338430],[41,3683]],[[219006,342216],[1,-8139]],[[219007,334077],[-1521,-4]],[[217486,334073],[0,114]],[[217486,334187],[0,8005]],[[220510,338940],[0,-4867]],[[220510,334073],[-1503,4]],[[217486,334187],[-1496,-22]],[[215990,334165],[-3,8031]],[[214485,342192],[1,-7963]],[[214486,334229],[-2449,-95]],[[212037,334134],[0,2177]],[[274262,338430],[-178,-3320],[96,-3115]],[[274180,331995],[-135,-24]],[[274045,331971],[-450,-339]],[[273595,331632],[-36,1117]],[[273559,332749],[96,1381],[-522,2938]],[[273133,337068],[300,3339],[-67,1609]],[[215990,334165],[0,-71]],[[215990,334094],[-1504,-3]],[[214486,334091],[0,138]],[[257605,335766],[-267,-59]],[[257338,335707],[-1207,2676]],[[256131,338383],[31,2021]],[[273133,337068],[-79,883],[-538,-576]],[[263585,335029],[-124,-484]],[[263461,334545],[-99,4]],[[263362,334549],[-9,1249],[-281,766]],[[263072,336564],[-161,1341]],[[264355,339246],[-770,-4217]],[[267163,335858],[4,-355]],[[267167,335503],[-680,-2475],[-459,116]],[[266028,333144],[-109,2607],[-257,3311]],[[276103,339687],[-56,-7726]],[[276047,331961],[-323,-24]],[[275724,331937],[-70,1389],[-359,2653],[-343,441]],[[222251,337667],[32,-5647]],[[222283,332020],[-589,1],[-2,-1624],[-1182,13]],[[220510,330410],[0,3663]],[[200145,328229],[-3228,29],[-2,-6474],[-1606,14]],[[204574,338763],[16,-15442]],[[204590,323321],[-1474,-28]],[[203116,323293],[-4,3258]],[[203103,336617],[208,1296],[-208,257]],[[203103,338170],[0,312]],[[203103,338482],[8,1396]],[[249362,339384],[-275,31],[115,-1382],[-335,-1404],[-366,-378],[270,-1925],[-281,-846],[135,-919]],[[248625,332561],[-364,176],[-4,-2806]],[[248257,329931],[-36,-137]],[[248221,329794],[-36,1335],[-212,-483]],[[247973,330646],[-400,66]],[[247573,330712],[0,4865]],[[247573,335577],[-6,5520]],[[272433,336843],[-475,-3705]],[[271958,333138],[-10,-83]],[[271948,333055],[-430,282]],[[271518,333337],[-367,-86]],[[271151,333251],[-126,2692],[-326,1639],[222,1422],[-102,1406]],[[251392,337392],[-291,-2345],[-136,397]],[[250965,335444],[-553,1154],[-247,1169]],[[250165,337767],[38,1181]],[[247573,335577],[-2090,162]],[[245483,335739],[13,3285]],[[286926,335501],[-145,-1821],[-233,206],[79,1506],[-351,140]],[[286276,335532],[78,4358]],[[286354,339890],[552,1171],[303,-80],[50,-5636],[-333,156]],[[256131,338383],[-53,-2345],[-292,-1220]],[[255786,334818],[-336,-820],[-354,712],[-199,-818]],[[254897,333892],[-239,1015],[76,3255]],[[286276,335532],[-676,145]],[[285600,335677],[-577,4]],[[285419,339738],[847,1102],[88,-950]],[[203103,338482],[0,-312]],[[259837,338179],[-278,-1956],[-1,-1386]],[[259558,334837],[-289,-248],[-329,1061]],[[271151,333251],[-416,-936],[-546,60]],[[270189,332375],[-338,1184],[43,2103]],[[250165,337767],[-126,96],[-281,-4503]],[[249758,333360],[-309,1168],[-404,124],[-420,-2091]],[[229927,334443],[-12,-3281]],[[229915,331162],[-1439,22]],[[228476,331184],[1,4846]],[[245032,339117],[-92,-1440],[-340,-1929],[-44,-3402],[-591,77]],[[243965,332423],[-591,68]],[[243374,332491],[12,3306],[-132,-126]],[[277508,338250],[-37,-6115]],[[277471,332135],[-595,-66]],[[276876,332069],[-829,-108]],[[264626,337536],[88,-2617],[-150,-1005]],[[264564,333914],[-285,822],[-464,206],[-191,-774]],[[263624,334168],[-163,377]],[[245483,335739],[-6,-4945]],[[245477,330794],[-2,-1651]],[[245475,329143],[-590,63],[-3,1642],[-263,-127]],[[244619,330721],[-662,64],[8,1638]],[[266028,333144],[-304,-143],[-504,-1878]],[[265220,331123],[-22,58]],[[265198,331181],[-124,1694],[-214,-289],[-296,1328]],[[279260,333397],[-157,-1140]],[[279103,332257],[-411,1984],[-405,-1720],[-166,127]],[[278121,332648],[-77,-460]],[[278044,332188],[-573,-53]],[[210378,329802],[0,-2771],[-614,433],[-745,-2270]],[[209019,325194],[-2,1368],[-3247,12],[1,-3243]],[[205771,323331],[-1181,-10]],[[282748,335160],[-108,-471]],[[282640,334689],[-343,-1479]],[[282297,333210],[-672,237]],[[281625,333447],[-169,331],[-186,2366]],[[275724,331937],[-313,-27]],[[275411,331910],[-1231,85]],[[232307,338491],[0,-2433],[148,-23],[1,-3216]],[[232456,332819],[-305,-2],[-149,-3256],[-295,1]],[[231707,329562],[-295,1],[-1,3262],[-292,-4],[0,1623]],[[234087,334441],[-14,-2089],[230,-1261]],[[234303,331091],[-538,-3686],[-283,598]],[[233482,328003],[-1,4815],[-1025,1]],[[260623,337347],[23,-3296],[103,-1581]],[[260749,332470],[-138,-25]],[[260611,332445],[-753,-140]],[[259858,332305],[-300,2532]],[[257338,335707],[-156,-2905],[-342,-2492]],[[256840,330310],[-446,716],[-239,-414]],[[256155,330612],[-245,215]],[[255910,330827],[24,1814],[-148,2177]],[[254026,337733],[-164,-1607],[-17,-2092],[167,-1717],[-89,-1888]],[[253923,330429],[-48,-579]],[[253875,329850],[-477,-215],[-128,791]],[[253270,330426],[-3,1967],[147,1493],[31,3867]],[[254897,333892],[-166,-2346]],[[254731,331546],[-712,-436],[-96,-681]],[[284107,336196],[0,-1815],[235,-1426]],[[284342,332955],[-25,-150]],[[284317,332805],[-216,-594],[-40,-1864]],[[284061,330347],[-198,-1249],[-361,-217]],[[283502,328881],[-237,1612]],[[283265,330493],[-76,1699],[-549,2497]],[[273559,332749],[-1601,389]],[[270189,332375],[-269,-1121]],[[269920,331254],[-1335,-829]],[[268585,330425],[-153,883],[95,1791],[-330,2070]],[[263072,336564],[-195,-3681],[-172,-21],[-175,-2137],[-273,-558]],[[262257,330167],[-331,919]],[[261926,331086],[76,2096],[534,3544]],[[261543,337211],[52,-385]],[[261595,336801],[-473,-3690]],[[261122,333111],[-373,-641]],[[253270,330426],[-331,-79]],[[252939,330347],[-8,1375],[-395,358],[-301,1417]],[[252235,333497],[19,3746]],[[250965,335444],[-26,-4865]],[[250939,330579],[-293,-638]],[[250646,329941],[-810,109]],[[249836,330050],[-78,3310]],[[281625,333447],[-251,-3124],[4,-1252],[-421,-1196]],[[280957,327875],[-522,-413],[-138,954]],[[280297,328416],[-332,3370],[-134,425]],[[224348,332816],[-1,-1627]],[[224347,331189],[-2064,20]],[[222283,331209],[0,811]],[[179740,322568],[3,-2452],[444,-2894],[103,-2182],[267,-2704],[564,-2760]],[[181121,309576],[-326,-2417],[-494,-1592]],[[180301,305567],[-2460,-124],[1,-805],[-4499,-63],[2,-553],[-829,-9],[-928,528],[-315,-3026]],[[171273,301515],[-312,1400]],[[170961,302915],[145,1407],[238,4958],[-64,9969]],[[171280,319249],[98,4],[-3,18110]],[[164248,337231],[-3,-3233],[301,-23],[0,-1605],[244,-1640],[325,-33],[5,-1631],[192,12],[4,-1614],[397,-45],[3,-1614],[314,77],[-22,-1690],[246,-211],[0,-3299]],[[166254,320682],[-755,1375],[-936,2625],[-284,-1411],[-421,-724],[101,-1704],[-444,1648],[-536,-409]],[[162979,322082],[-5,3222],[-296,222],[-393,1771],[197,1535],[-165,1791],[-326,509],[-446,3198],[-339,588],[-168,2433]],[[171280,319249],[-3410,-90],[36,-551]],[[167906,318608],[-267,446],[-750,39],[-88,1202],[-462,376]],[[166339,320671],[-85,11]],[[252235,333497],[-177,-1852],[-458,-1134]],[[251600,330511],[-661,68]],[[242130,335805],[-34,-6486]],[[242096,329319],[-637,87]],[[241459,329406],[3,1623],[-1032,137]],[[240430,331166],[104,1602],[10,3228]],[[268585,330425],[-242,-1949],[-248,-496]],[[268095,327980],[-738,4146]],[[267357,332126],[82,740],[-272,2637]],[[238036,329533],[-270,1020],[-9,-2177],[-298,111],[-9,-1669],[-302,-290]],[[237148,326528],[-149,21],[20,4291]],[[237019,330840],[144,2397],[-140,1638],[249,-26],[204,1843]],[[238075,336857],[-39,-7324]],[[261926,331086],[-253,-1944]],[[261673,329142],[-494,2572],[-57,1397]],[[239556,336116],[-9,-2441],[-149,23],[-7,-2427],[-202,25],[-8,-2654]],[[239181,328642],[-294,242],[-94,1576],[-757,-927]],[[237019,330840],[-164,-1085],[-526,-532],[-175,1675],[-128,-957]],[[236026,329941],[-115,4493]],[[263362,334549],[-670,-5484]],[[262692,329065],[-240,-1164]],[[262452,327901],[-195,2266]],[[212037,334134],[-2,-8177]],[[212035,325957],[-1,-4264]],[[212034,321693],[-669,4],[-4,-1665],[-293,7],[-3,-1619],[-292,8],[-1,-1623],[-585,17],[-91,-1634]],[[210096,315188],[-586,7]],[[209510,315195],[-502,3],[-1,3241]],[[209007,318439],[12,6755]],[[284317,332805],[371,-2175],[955,-1730],[26,-1206]],[[285669,327694],[-54,-767],[-593,-358],[-140,698]],[[284882,327267],[-821,3080]],[[285600,335677],[126,-1604],[273,-883]],[[285999,333190],[-398,-1100],[175,-2297],[-1124,1768],[-310,1394]],[[240430,331166],[-12,-5402],[-114,-39]],[[240304,325725],[-550,-592],[-185,1872],[-331,1451]],[[239238,328456],[-57,186]],[[226992,336062],[8,-6492]],[[227000,329570],[-1,-749]],[[226999,328821],[0,-19]],[[226999,328802],[-475,-44],[-290,766],[-418,55]],[[225816,329579],[-586,-9],[-19,3244]],[[228476,331184],[-1,-1622]],[[228475,329562],[-1475,8]],[[243374,332491],[-161,-3273],[-723,82]],[[242490,329300],[-394,19]],[[257735,335317],[-73,-4276],[185,-1700]],[[257847,329341],[-411,-2087],[-227,202]],[[257209,327456],[-369,2854]],[[247573,330712],[-600,58]],[[246973,330770],[-1496,24]],[[286926,335501],[415,-496]],[[287690,334442],[20,-1175],[-419,-3065],[-333,-1394],[-288,214],[-380,1512],[-221,-1047],[-325,2540],[265,-143],[-10,1306]],[[259858,332305],[-101,-4380]],[[259757,327925],[-680,1377],[-289,-544]],[[258788,328758],[11,1469]],[[258799,330227],[35,4085]],[[258799,330227],[-519,-1708],[-228,632]],[[258052,329151],[-205,190]],[[267357,332126],[-461,-863],[33,-2552]],[[266929,328711],[-948,-960]],[[265981,327751],[263,2892],[-1024,480]],[[265198,331181],[-169,-1111],[-21,-2086]],[[265008,327984],[-272,-947],[-243,467],[-219,-1109]],[[264274,326395],[-566,1467]],[[263708,327862],[264,835],[-23,1267],[-316,3898]],[[263633,333862],[1,202]],[[263634,334064],[-10,104]],[[255910,330827],[-429,244],[-353,-1106]],[[255128,329965],[-397,1581]],[[283265,330493],[-572,-1458],[-346,398]],[[282347,329433],[-50,3777]],[[248221,329794],[-58,-95]],[[248163,329699],[-190,947]],[[249836,330050],[-441,-507]],[[249395,329543],[-1138,388]],[[263634,334064],[-1,-202]],[[263708,327862],[-580,-828]],[[263128,327034],[-436,2031]],[[236026,329941],[-4,-304]],[[236022,329637],[-175,-1477],[-443,-195],[-252,1214],[-191,-612]],[[234961,328567],[-77,886],[-581,1638]],[[231707,329562],[0,-1617]],[[231707,327945],[-1281,2]],[[230426,327947],[0,3299],[-261,-1414],[-247,176]],[[229918,330008],[-3,1154]],[[279103,332257],[-595,-3991]],[[278508,328266],[-251,855],[-213,3067]],[[214486,334091],[-13,-8132]],[[214473,325959],[-2438,-2]],[[217486,334073],[-2,-8135]],[[217484,325938],[-1494,19]],[[215990,325957],[0,8137]],[[219007,334077],[3,-8124]],[[219010,325953],[-1526,-15]],[[220510,330410],[0,-4461]],[[220510,325949],[-1500,4]],[[215990,325957],[-1517,2]],[[271518,333337],[-29,-4139],[-182,-3291]],[[271307,325907],[-296,68]],[[271011,325975],[-264,59]],[[270747,326034],[1,1307],[-511,2796],[-304,-278]],[[269933,329859],[-13,1395]],[[282347,329433],[-80,-3574]],[[282267,325859],[-165,-563],[-420,837],[-332,-60]],[[281350,326073],[-393,1802]],[[252939,330347],[-5,-701]],[[252934,329646],[-672,-91],[-323,-2399],[-173,1]],[[251766,327157],[-166,3354]],[[280297,328416],[-211,-1293]],[[280086,327123],[-581,255],[-754,-1252]],[[278751,326126],[-353,1413],[110,727]],[[271948,333055],[227,-2695]],[[272175,330360],[382,-2967],[-24,-1802]],[[272533,325591],[-107,26]],[[272426,325617],[-1119,290]],[[273595,331632],[-24,-1620]],[[273571,330012],[-1396,348]],[[261673,329142],[-449,-3851]],[[261224,325291],[-188,2236],[-289,965]],[[260747,328492],[203,1622],[-339,2331]],[[233482,328003],[-312,226]],[[233170,328229],[-399,-1548],[-1070,-1312]],[[231701,325369],[6,2576]],[[225816,329579],[10,-9732]],[[225826,319847],[-1469,0]],[[224357,319847],[-5,4513]],[[224352,324360],[-5,6829]],[[244619,330721],[-212,-1147],[105,-2458],[-223,-2903]],[[244289,324213],[-330,36],[-3,-1236],[-368,689],[-238,-589]],[[243350,323113],[-586,854],[-297,-183]],[[242467,323784],[23,5516]],[[260747,328492],[-422,-561],[-84,-1375],[-372,150]],[[259869,326706],[-112,1219]],[[188318,312721],[-108,-986]],[[188210,311735],[-183,-611],[-147,-4378],[653,-3],[-47,-2816]],[[188486,303927],[-643,1],[-1223,898],[-311,-3086],[-1306,2189],[-1641,-13]],[[183362,303916],[1,5933]],[[183363,309849],[-2,22528]],[[268095,327980],[-175,-2988],[-203,-1444],[134,-484]],[[267851,323064],[-277,-501]],[[267574,322563],[-1,-3]],[[267573,322560],[-644,6151]],[[274045,331971],[332,-4443],[324,-1102]],[[274701,326426],[-806,-3867]],[[273895,322559],[-185,1400]],[[273710,323959],[-377,-576],[22,1922]],[[273355,325305],[216,4707]],[[278751,326126],[-5,-338]],[[278746,325788],[-367,682],[-294,-913],[-345,-2209]],[[277740,323348],[-312,427],[-120,1819]],[[277308,325594],[-233,1635],[-199,4840]],[[277308,325594],[-662,369],[-623,-753]],[[276023,325210],[-58,1792],[126,2469],[-367,2466]],[[275411,331910],[-586,-5936]],[[274825,325974],[-124,452]],[[222283,331209],[11,-6489]],[[222294,324720],[-137,-41]],[[222157,324679],[-1041,42],[0,-1614],[-294,3]],[[220822,323110],[-312,20]],[[220510,323130],[0,2819]],[[276023,325210],[-562,989]],[[275461,326199],[-228,-565],[-408,340]],[[269933,329859],[-238,-2104],[-19,-1655]],[[269676,326100],[-619,-853]],[[269057,325247],[-122,2958],[-350,2220]],[[255128,329965],[-90,-7353]],[[255038,322612],[-1051,45]],[[253987,322657],[8,5395],[-120,1798]],[[230426,327947],[0,-3244],[-137,1],[-1,-3821]],[[230288,320883],[-667,-984],[-127,786]],[[229494,320685],[-2,9491],[426,-168]],[[265981,327751],[-64,-576]],[[265917,327175],[-396,127],[-315,-711],[-198,1393]],[[224352,324360],[-359,353],[-1699,7]],[[229494,320685],[-431,1199]],[[229063,321884],[-238,-1062],[-352,454]],[[228473,321276],[2,8286]],[[241459,329406],[-204,-4750]],[[241255,324656],[-449,-779],[-905,103]],[[239901,323980],[403,1745]],[[256155,330612],[-49,-8076]],[[256106,322536],[-1068,76]],[[234961,328567],[-3,-2253],[-315,-6],[0,-2676]],[[234643,323632],[-1174,5]],[[233469,323637],[0,1895],[-295,3],[-4,2694]],[[262452,327901],[-222,-2978],[129,-2605]],[[262359,322318],[-796,-48]],[[261563,322270],[-276,-33]],[[261287,322237],[-306,-7]],[[260981,322230],[247,1084],[-4,1977]],[[257209,327456],[-20,-5059]],[[257189,322397],[-1046,132]],[[256143,322529],[-37,7]],[[237148,326528],[-7,-1358],[-305,-767]],[[236836,324403],[-229,-383],[-21,-2059],[-606,-644]],[[235980,321317],[42,8320]],[[246973,330770],[-2,-5539]],[[246971,325231],[-1504,75]],[[245467,325306],[8,3837]],[[245467,325306],[-8,-2742],[-290,30]],[[245169,322594],[-399,-324],[-210,-1347]],[[244560,320923],[13,2577],[-284,713]],[[248163,329699],[-214,-2387],[219,-627],[20,-1533],[-293,-395],[-116,-1725],[-268,-566]],[[247511,322466],[186,-1296],[-172,-1230]],[[247525,319940],[-289,-503]],[[247236,319437],[-2,1326]],[[247234,320763],[22,4543],[-285,-75]],[[251766,327157],[-13,-4699]],[[251753,322458],[-101,0]],[[251652,322458],[-541,-5]],[[251111,322453],[-505,-9]],[[250606,322444],[40,7497]],[[283502,328881],[-231,-2074]],[[283271,326807],[-356,-2933],[-358,-1181]],[[282557,322693],[-108,2562],[-182,604]],[[239238,328456],[-4,-1941],[-493,49],[-203,-1309],[-493,-195],[5,-2146]],[[238050,322914],[-1029,136],[-185,1353]],[[269057,325247],[-524,-1430]],[[268533,323817],[-371,-223]],[[268162,323594],[-311,-530]],[[253987,322657],[-600,-192]],[[253387,322465],[-453,-3]],[[252934,322462],[-51,3]],[[252883,322465],[51,7181]],[[273355,325305],[-822,286]],[[285469,320638],[-203,-948],[-926,-816]],[[284340,318874],[-64,5013]],[[284276,323887],[204,503],[398,-2748],[591,-1004]],[[284882,327267],[-235,-2198],[118,-897]],[[284765,324172],[-259,864],[-282,-1162]],[[284224,323874],[-953,2933]],[[258788,328758],[-158,-3843]],[[258630,324915],[-206,2015],[-376,1415],[4,806]],[[249395,329543],[-32,-7084]],[[249363,322459],[-223,-9]],[[249140,322450],[-1629,16]],[[270747,326034],[-688,163]],[[270059,326197],[-383,-97]],[[250606,322444],[-430,-12]],[[250176,322432],[-813,27]],[[252883,322465],[-1130,-7]],[[235980,321317],[-18,-3815]],[[235962,317502],[-20,-4124]],[[235942,313378],[-1326,-11]],[[234616,313367],[-2,3239],[-338,-2]],[[234276,316604],[0,3244],[171,1607],[196,17],[0,2160]],[[226999,328802],[9,-8951]],[[227008,319851],[-1,-3236]],[[227007,316615],[-1172,1]],[[225835,316616],[-9,3231]],[[228473,321276],[-555,611],[-74,2247],[-845,4687]],[[258630,324915],[-2,-2532]],[[258628,322383],[-1295,15]],[[257333,322398],[-144,-1]],[[242467,323784],[-5,-1009]],[[242462,322775],[-297,41],[-5,-1617],[-876,479]],[[241284,321678],[-151,871],[122,2107]],[[259869,326706],[27,-4377]],[[259896,322329],[-1243,53]],[[258653,322382],[-25,1]],[[263128,327034],[11,-1303],[-212,-3409]],[[262927,322322],[-101,-5]],[[262826,322317],[-467,1]],[[200462,326631],[361,-4881]],[[200823,321750],[-379,16],[-5,-7060]],[[200439,314706],[-1451,-14]],[[198988,314692],[-3680,23]],[[229063,321884],[-7,-2046]],[[229056,319838],[-2048,13]],[[267573,322560],[-1043,-137]],[[266530,322423],[-489,3118],[-223,-91]],[[265818,325450],[99,1725]],[[285669,327694],[310,746],[30,-1788],[-452,-995],[295,-346],[-138,-1387],[-575,-2025],[-396,1477],[22,796]],[[260981,322230],[-364,32]],[[260617,322262],[-721,67]],[[281350,326073],[46,-5342],[-149,-3077],[243,-284]],[[281490,317370],[-394,-3132]],[[281096,314238],[-204,2184],[-465,3449]],[[280427,319871],[-419,2517],[-71,1882],[149,2853]],[[239901,323980],[-690,-4023],[1,-1632]],[[239212,318325],[-296,-555]],[[238916,317770],[-881,35]],[[238035,317805],[15,5109]],[[233469,323637],[-441,-557],[-20,-6469]],[[233008,316611],[1,-1619],[-439,-6]],[[232570,314986],[-587,-6],[0,1619],[-585,2]],[[231398,316601],[2,1620]],[[231400,318221],[7,5253],[294,1895]],[[265818,325450],[-331,-347],[-413,-2793]],[[265074,322310],[-349,6]],[[264725,322316],[-533,16]],[[264192,322332],[82,4063]],[[231400,318221],[-877,0]],[[230523,318221],[1,2620],[-236,42]],[[264192,322332],[-835,-2]],[[263357,322330],[-430,-8]],[[280427,319871],[-1132,-401]],[[279295,319470],[-372,2213]],[[278923,321683],[-155,1648],[-22,2457]],[[284224,323874],[52,13]],[[284340,318874],[-211,-331]],[[284129,318543],[-198,2128],[-360,239],[-380,1072],[-481,71]],[[282710,322053],[-153,640]],[[203116,323293],[0,-1615],[261,2],[1,-1550],[-729,1]],[[202649,320131],[-58,616],[-705,53],[-101,-673],[-844,4],[-118,1619]],[[209007,318439],[-587,-7],[1,-1615],[-294,-10],[-3,-1617],[-1242,-7],[0,-4792]],[[206882,310391],[-1173,-5]],[[205709,310386],[1,4846],[62,-6],[-1,8105]],[[270059,326197],[-28,-6431],[221,-1212]],[[270252,318554],[-254,-3697],[-212,-1915]],[[269786,312942],[-11,23]],[[269775,312965],[-379,2612],[-91,3608]],[[269305,319185],[-142,3645],[-154,854],[-476,133]],[[276023,325210],[227,-1072],[186,597],[147,-1356],[71,-2679],[-218,-1752]],[[276436,318948],[-6,0]],[[276430,318948],[-1089,137]],[[275341,319085],[120,7114]],[[278923,321683],[-437,-2239],[-436,98]],[[278050,319542],[11,671]],[[278061,320213],[-25,1291],[-296,1844]],[[275341,319085],[-679,65]],[[274662,319150],[-651,42],[43,2132],[-159,1235]],[[271464,320921],[-199,-1405],[-198,-4516]],[[271067,315000],[-604,2048],[-211,1506]],[[271011,325975],[333,-4682],[120,-372]],[[282710,322053],[66,-1015],[-81,-3692]],[[282695,317346],[-1205,24]],[[214473,325959],[-5,-8115]],[[214468,317844],[-992,-9]],[[213476,317835],[-1442,8]],[[212034,317843],[0,3850]],[[272173,319555],[-237,565]],[[271936,320120],[-472,801]],[[272426,325617],[-120,-2206],[-216,-215],[83,-3641]],[[219010,325953],[-5,-8103]],[[219005,317850],[-1126,11]],[[217879,317861],[-406,0]],[[217473,317861],[11,8077]],[[220510,323130],[0,-5304]],[[220510,317826],[-1158,20]],[[219352,317846],[-347,4]],[[215990,325957],[-18,-8108]],[[215972,317849],[-1028,11]],[[214944,317860],[-476,-16]],[[277740,323348],[-316,-945],[31,-1526],[-351,-1962]],[[277104,318915],[-668,33]],[[217473,317861],[-1061,-16]],[[216412,317845],[-440,4]],[[273710,323959],[112,-2797],[-91,-1953]],[[273731,319209],[-1617,15]],[[272114,319224],[59,331]],[[266530,322423],[-186,-14]],[[266344,322409],[-1079,-93]],[[265265,322316],[-191,-6]],[[247234,320763],[-1924,142],[-2,-829]],[[245308,320076],[-139,2518]],[[224357,319847],[-575,10],[0,-4860]],[[223782,314997],[-488,-1],[-284,811]],[[223010,315807],[139,1188],[-267,11],[14,2696],[-285,-467]],[[222611,319235],[-167,661],[-83,3113],[-204,1670]],[[284158,318179],[-29,364]],[[285469,320638],[29,1355],[695,561],[-107,-1081],[521,322],[-484,-2668],[-165,-1717],[-182,-44],[-131,1684],[-204,-1777],[-551,162],[-575,-954],[-157,1698]],[[222611,319235],[-441,-168],[-51,-1639],[-679,-8]],[[221440,317420],[-149,817],[-33,3268],[-436,-2],[0,1607]],[[164640,304627],[231,-1775],[-418,-877],[-322,2121],[509,531]],[[165054,305328],[976,-1440],[-461,-704],[-359,131],[-156,2013]],[[166339,320671],[-2,-7969],[-90,-1807]],[[166247,310895],[-250,760],[-867,-159],[-357,994],[-804,202],[-490,-416],[-116,1396],[-373,1056],[124,2395],[-24,2471],[-171,1150],[60,1338]],[[241284,321678],[-584,-794],[39,-1065]],[[240739,319819],[-931,86],[-3,-1605]],[[239805,318300],[-593,25]],[[238035,317805],[-614,-1483]],[[237421,316322],[-244,500],[-834,91],[-381,589]],[[244560,320923],[-20,-4593],[-199,25],[193,-1934]],[[244534,314421],[-604,81],[-3,-1622],[-230,23]],[[243697,312903],[96,2891],[-160,660],[20,4598],[-307,36],[4,2025]],[[269305,319185],[-840,-2741],[-145,-912]],[[268320,315532],[-168,2206],[10,5856]],[[243697,312903],[-75,13]],[[243622,312916],[-905,125]],[[242717,313041],[1,2457],[-235,29],[98,2072],[20,5168],[-139,8]],[[274662,319150],[434,-3775]],[[275096,315375],[-397,-1019],[74,-878],[-605,-586],[-6,1090],[-378,-1531]],[[273784,312451],[4,1591]],[[273788,314042],[49,2841],[-106,2326]],[[234276,316604],[-1268,7]],[[268320,315532],[-415,-2628]],[[267905,312904],[-174,218]],[[267731,313122],[-145,795]],[[267586,313917],[-653,2806]],[[266933,316723],[-40,540]],[[266893,317263],[305,3008],[323,1133],[53,1159]],[[205709,310386],[-2,-1614],[-1700,0]],[[204007,308772],[-1371,-6],[-3,3352]],[[202633,312118],[-147,1515],[16,6496],[147,2]],[[278050,319542],[43,-1242],[-360,-2633]],[[277733,315667],[-629,3248]],[[221440,317420],[1,-4034],[-493,-32]],[[220948,313354],[-223,1273],[-207,-261]],[[220518,314366],[-8,3460]],[[242717,313041],[-496,63]],[[242221,313104],[-106,14]],[[242115,313118],[5,1627],[-291,31],[-264,1665],[-303,325],[6,1345],[-291,53],[9,1622],[-247,33]],[[256004,318053],[-462,772]],[[255542,318825],[-243,556],[-714,-1852],[-404,1290],[-162,1541],[-347,181]],[[253672,320541],[-285,1924]],[[256143,322529],[-11,-3407],[-128,-1069]],[[245308,320076],[-7,-2464],[140,-1661]],[[245441,315951],[-7,-3254],[151,-26],[-6,-2481],[-150,6]],[[245429,310196],[-103,136],[-579,3569],[-213,520]],[[266893,317263],[-555,643],[-280,1346]],[[266058,319252],[-12,1037],[298,2120]],[[257333,322398],[-17,-8213]],[[257316,314185],[-332,545],[-546,1972]],[[256438,316702],[-434,1351]],[[252925,317998],[-982,22]],[[251943,318020],[-96,1897],[-197,-2],[2,2543]],[[252934,322462],[-9,-4464]],[[253555,314761],[-47,-2207]],[[253508,312554],[-481,7]],[[253027,312561],[-4,5160],[-98,277]],[[253672,320541],[-117,-5780]],[[251943,318020],[-47,-2986]],[[251896,315034],[-984,33]],[[250912,315067],[1,4042],[197,807],[1,2537]],[[249142,318304],[-519,9],[-251,-975]],[[248372,317338],[-343,700],[-215,-623]],[[247814,317415],[-5,2533],[-284,-8]],[[249140,322450],[2,-4146]],[[250912,315067],[-438,-278]],[[250474,314789],[-147,-6],[-2,4867],[-149,0],[0,2782]],[[250474,314789],[-2,-1631]],[[250472,313158],[-642,1090],[-534,3]],[[249296,314251],[-2,2446],[-152,1607]],[[266058,319252],[-82,-420]],[[265976,318832],[-275,-140]],[[265701,318692],[-106,2241],[-330,1383]],[[258653,322382],[-137,-6674],[89,-612]],[[258605,315096],[-29,-1679],[-447,-518],[-146,1195]],[[257983,314094],[-427,804],[-240,-713]],[[260678,319948],[-562,-4378],[-610,-2702],[-150,-76]],[[259356,312792],[-223,839],[-30,1451],[-498,14]],[[260617,322262],[61,-2314]],[[263365,319856],[101,-595],[-208,-1794],[7,-2679]],[[263265,314788],[-172,733],[-550,214]],[[262543,315735],[233,4869]],[[262776,320604],[50,1713]],[[263357,322330],[8,-2474]],[[264725,322316],[-135,-684],[239,-2782],[-180,-2853]],[[264649,315997],[-86,-841]],[[264563,315156],[-22,277]],[[264541,315433],[-329,3527],[-293,882],[-554,14]],[[262543,315735],[-381,-217]],[[262162,315518],[-1,1816],[-262,888]],[[261899,318222],[232,964],[228,3132]],[[261899,318222],[-334,1613],[-2,2435]],[[265701,318692],[-212,-1319]],[[265489,317373],[-231,351],[-271,-1838],[-338,111]],[[284158,318179],[119,-1091],[-640,-3358],[-489,-1594]],[[283148,312136],[-159,657],[-294,4553]],[[261287,322237],[-239,-2821],[0,-1352],[-233,-2520]],[[260815,315544],[-137,4404]],[[262162,315518],[-52,-656]],[[262110,314862],[-108,4]],[[262002,314866],[-1168,24]],[[260834,314890],[-19,654]],[[230523,318221],[0,-1628],[-295,-3],[-4,-3251]],[[230224,313339],[-873,12]],[[229351,313351],[0,1622],[-293,812]],[[229058,315785],[-2,4053]],[[202633,312118],[-979,1703],[-317,896],[-898,-11]],[[279295,319470],[266,-2708],[-183,-3842]],[[279378,312920],[-224,-636],[-333,-2783]],[[278821,309501],[-4,24]],[[278817,309525],[-1052,5966]],[[277765,315491],[-32,176]],[[212034,317843],[-3,-8091]],[[212031,309752],[0,-188]],[[212031,309564],[-1940,9],[5,5615]],[[272114,319224],[155,-4645]],[[272269,314579],[-1,-1445]],[[272268,313134],[-327,-920],[-286,1648]],[[271655,313862],[-588,1138]],[[247236,319437],[-213,565],[88,-2172],[-320,-435],[282,-923],[-325,-595]],[[246748,315877],[-1307,74]],[[255542,318825],[30,-628],[-318,-3711]],[[255254,314486],[-1699,275]],[[166086,290611],[276,-965],[-300,-16],[24,981]],[[167726,304768],[-743,1873],[-183,2255],[-553,1999]],[[167906,318608],[691,-9433],[-104,-2110],[-329,6],[-438,-2303]],[[247814,317415],[-122,-2322],[127,-841]],[[247819,314252],[0,-807]],[[247819,313445],[-294,-28],[6,-1584],[-272,-13]],[[247259,311820],[-473,1881]],[[246786,313701],[-38,2176]],[[260834,314890],[37,-1200]],[[260871,313690],[-340,-2929],[-579,-3107]],[[259952,307654],[-731,14]],[[259221,307668],[-12,4227],[147,897]],[[281096,314238],[217,-1643],[-222,-1225]],[[281091,311370],[-528,-425],[-618,1727],[-567,248]],[[223010,315807],[-346,-3461]],[[222664,312346],[46,-2146]],[[222710,310200],[-463,2268],[-59,-1528],[-214,361]],[[221974,311301],[-292,391],[-321,-718],[-413,2380]],[[242115,313118],[-438,43],[-4,-817],[-514,69],[-222,-771]],[[240937,311642],[-45,1094],[-302,570]],[[240590,313306],[-42,1616],[-478,872],[30,2513],[-295,-7]],[[225835,316616],[-146,-4],[-1,-3243]],[[225688,313369],[-284,3],[-145,-1083],[-582,7],[-438,-808]],[[224239,311488],[-1,1890],[-456,-2],[0,1621]],[[229058,315785],[-745,-262],[155,-2162],[-579,4]],[[227889,313365],[-586,3]],[[227303,313368],[-1,3244],[-295,3]],[[264541,315433],[-415,-1026]],[[264126,314407],[-860,-258]],[[263266,314149],[-1,639]],[[266933,316723],[-339,-3833]],[[266594,312890],[-433,-921]],[[266161,311969],[-142,1338]],[[266019,313307],[139,813],[-135,1990],[115,1469],[-162,1253]],[[168718,285870],[613,-3553],[-362,241],[-251,3312]],[[168675,294217],[663,-1336],[119,-1995],[-366,418],[-149,2047],[-267,866]],[[170961,302915],[-533,9],[-383,-3729]],[[170045,299195],[-299,468],[-188,-1226],[-342,667],[55,1824],[-185,2348],[-237,1371],[-531,-106],[-203,-603],[-389,830]],[[273788,314042],[-1519,537]],[[269786,312942],[-1189,-5125]],[[268597,307817],[-93,1502]],[[268504,309319],[-251,3128],[-348,457]],[[276707,313833],[-152,-754],[-450,18],[-676,-2348]],[[275429,310749],[-151,2724]],[[275278,313473],[-182,1902]],[[276430,318948],[164,-2140],[207,-809],[-94,-2166]],[[277765,315491],[-510,-6013]],[[277255,309478],[-68,132]],[[277187,309610],[-190,3520],[-290,703]],[[256438,316702],[-14,-6930]],[[256424,309772],[0,-270]],[[256424,309502],[-1170,99]],[[255254,309601],[0,4885]],[[266019,313307],[-494,36]],[[265525,313343],[-95,2291],[59,1739]],[[271655,313862],[-387,-3128],[-316,-1221],[-138,-1800]],[[270814,307713],[-619,2360],[-220,1485]],[[269975,311558],[-189,1384]],[[209510,315195],[7,-9723]],[[209517,305472],[-585,10],[0,-1637],[-1755,87],[0,1633],[-298,9]],[[206879,305574],[3,4817]],[[249296,314251],[-147,-1]],[[249149,314250],[-1330,2]],[[240590,313306],[-340,47],[-91,-2176],[-1279,142]],[[238880,311319],[36,6451]],[[231398,316601],[2,-3247],[-148,-1629],[-731,-2]],[[230521,311723],[-297,19],[0,1597]],[[253027,312561],[-593,32]],[[252434,312593],[1,817],[-542,-5]],[[251893,313405],[3,1629]],[[216412,317845],[0,-8101]],[[216412,309744],[-260,3]],[[216152,309747],[-1208,11]],[[214944,309758],[0,8102]],[[217879,317861],[-4,-8109]],[[217875,309752],[-265,-6]],[[217610,309746],[-1198,-2]],[[214944,309758],[-258,1]],[[214686,309759],[-1211,-2]],[[213475,309757],[1,8078]],[[219352,317846],[-4,-8079]],[[219348,309767],[-278,10]],[[219070,309777],[-1195,-25]],[[220518,314366],[0,-4631]],[[220518,309735],[-1170,32]],[[238880,311319],[-3,-1067]],[[238877,310252],[-196,24]],[[238681,310276],[-1273,171]],[[237408,310447],[13,5875]],[[213475,309757],[-250,-2]],[[213225,309755],[-1194,-3]],[[265525,313343],[-379,-1617]],[[265146,311726],[-589,2243],[6,1187]],[[283148,312136],[-617,-2746]],[[282531,309390],[-232,1787],[-388,-117],[-188,-953]],[[281723,310107],[-370,469]],[[281353,310576],[-262,794]],[[237408,310447],[-890,102],[31,-3035]],[[236549,307514],[-631,-50]],[[235918,307464],[24,5914]],[[257983,314094],[-89,-4491]],[[257894,309603],[-1470,169]],[[267586,313917],[-206,-1091],[-615,-312]],[[266765,312514],[-171,376]],[[227303,313368],[-1,-4055]],[[227302,309313],[-1606,12]],[[225696,309325],[-8,4044]],[[232570,314986],[0,-1620],[-300,-11],[2,-6507]],[[232272,306848],[-593,2]],[[231679,306850],[-1159,9]],[[230520,306859],[1,4864]],[[234616,313367],[-304,7],[0,-4907],[-291,4],[-15,-1618]],[[234006,306853],[-1734,-5]],[[246786,313701],[-19,-2054],[-497,-863],[38,-1147],[-293,-1724],[-253,399],[310,-1738],[-364,-407]],[[245708,306167],[3,-24]],[[245711,306143],[-453,5]],[[245258,306148],[92,410],[79,3638]],[[229351,313351],[-149,-2],[-1,-3219],[-146,-6]],[[229055,310124],[-301,797],[-865,13],[0,2431]],[[224239,311488],[147,-1345],[-3,-3288]],[[224383,306855],[-432,-385],[-522,1415]],[[223429,307885],[-656,27],[-63,2288]],[[263266,314149],[3,-2538]],[[263269,311611],[-982,-374]],[[262287,311237],[-274,215],[97,3410]],[[278817,309525],[-155,-872]],[[278662,308653],[-702,872],[-466,-1308]],[[277494,308217],[-239,1261]],[[265146,311726],[62,-1577]],[[265208,310149],[-838,21]],[[264370,310170],[1,855]],[[264371,311025],[-245,3382]],[[275429,310749],[0,-38]],[[275429,310711],[-371,-1301],[-162,-2339]],[[274896,307071],[-379,-1286]],[[274517,305785],[-288,-570],[-418,2121],[121,1598]],[[273932,308934],[155,2001],[-303,1516]],[[212031,309564],[-10,-8889]],[[212021,300675],[-15,-4739]],[[212006,295936],[-1274,-7]],[[210732,295929],[1,1618],[-582,-19],[5,3039],[-348,-1],[0,4885],[-291,21]],[[251893,313405],[-148,-262],[-98,-2422]],[[251647,310721],[-1175,275]],[[250472,310996],[0,2162]],[[259221,307668],[-550,-1892]],[[258671,305776],[-416,2982]],[[258255,308758],[-361,845]],[[262002,314866],[-202,-2820],[-428,-1223],[-148,-1566],[-209,4]],[[261015,309261],[-144,4429]],[[262287,311237],[-115,-5511]],[[262172,305726],[-1045,-291]],[[261127,305435],[-112,3826]],[[204007,308772],[-2,-8089],[-357,6],[0,-3269],[-895,189],[3,-3357]],[[202756,294252],[-282,-80],[-3451,20]],[[199023,294192],[-10,14576],[-25,5924]],[[199023,294192],[-802,21],[0,-5147]],[[198221,289066],[-2916,138]],[[195305,289204],[0,10598]],[[255254,309601],[-292,45]],[[254962,309646],[-1501,262]],[[253461,309908],[47,2646]],[[221974,311301],[-1,-5776]],[[221973,305525],[-842,203],[-613,2379]],[[220518,308107],[0,1628]],[[273932,308934],[-751,-1023],[-232,-720],[-385,1197]],[[272564,308388],[-296,4746]],[[245258,306148],[-220,-1244],[179,-1807],[-328,48],[-478,1054]],[[244411,304199],[-66,1224]],[[244345,305423],[-235,2560],[-507,303],[19,4630]],[[264371,311025],[-903,8],[-199,578]],[[250472,310996],[3,-4065]],[[250475,306931],[-737,17]],[[249738,306948],[0,538],[-588,29]],[[249150,307515],[-1,6735]],[[249150,307515],[-2,-541],[-585,15]],[[248563,306989],[-568,-78]],[[247995,306911],[2,1971],[-165,659],[-13,3904]],[[267731,313122],[-172,-4100]],[[267559,309022],[-165,-650],[-348,481],[-159,-755]],[[266887,308098],[-122,4416]],[[277187,309610],[-200,-184],[-957,-3894]],[[276030,305532],[-239,1408],[128,659],[-179,3128],[-311,-16]],[[272564,308388],[-61,-777]],[[272503,307611],[-371,-2256]],[[272132,305355],[-182,82],[-533,1971],[-394,-959]],[[271023,306449],[-209,1264]],[[261127,305435],[65,-2172]],[[261192,303263],[-366,-424]],[[260826,302839],[-582,505]],[[260244,303344],[-292,4310]],[[247116,305288],[0,-1624]],[[247116,303664],[-574,36]],[[246542,303700],[-7,2441],[-827,26]],[[247259,311820],[2,-3021],[-145,16],[0,-3527]],[[247995,306911],[-1,-1623],[-878,0]],[[266161,311969],[-151,-1209],[137,-1333]],[[266147,309427],[-550,-3124]],[[265597,306303],[-143,-536],[-540,1289]],[[264914,307056],[377,2075],[-83,1018]],[[252434,312593],[-3,-7006]],[[252431,305587],[-491,-269]],[[251940,305318],[-293,8]],[[251647,305326],[0,5395]],[[229055,310124],[0,-2981]],[[229055,307143],[-102,-1894]],[[228953,305249],[-1646,5]],[[227307,305254],[-5,4059]],[[230520,306859],[-129,-799],[-366,1]],[[230025,306061],[-236,1077],[-734,5]],[[225696,309325],[4,-2728]],[[225700,306597],[-87,-540],[-545,799],[-164,-1383]],[[224904,305473],[-175,-372],[-346,1754]],[[235918,307464],[-20,-4634]],[[235898,302830],[-25,-5641]],[[235873,297189],[-725,1210]],[[235148,298399],[-85,1118],[-236,-357],[-302,2195],[-518,1395]],[[234007,302750],[-1,4103]],[[240937,311642],[-27,-4926]],[[240910,306716],[-580,117]],[[240330,306833],[-387,76],[-25,1423],[-898,817],[-143,1103]],[[192649,296055],[0,-2067],[-471,-22],[-761,-1596],[-17,-3435]],[[191400,288935],[-519,-982],[-411,-2924],[-457,4942],[-260,4020]],[[189753,293991],[-316,3938],[-198,-1382],[-453,2730],[43,1284],[-343,3366]],[[268504,309319],[-576,-1452],[-270,224]],[[267658,308091],[-99,931]],[[242221,313104],[-71,-8013]],[[242150,305091],[-288,-50]],[[241862,305041],[-455,1583],[-497,92]],[[244345,305423],[-785,1742],[-49,-1484],[-582,-12],[0,-545]],[[242929,305124],[-779,-33]],[[266887,308098],[-133,-492]],[[266754,307606],[-217,1202],[-390,619]],[[281353,310576],[-256,-2617],[-334,-211],[-135,-1226],[-339,132],[-50,-1711],[-247,-2039]],[[279992,302904],[-1171,6597]],[[269975,311558],[-244,-1242],[240,-2297],[-54,-2071],[-167,-825]],[[269750,305123],[-567,148],[-179,-1083]],[[269004,304188],[-407,3629]],[[253461,309908],[-84,-4366]],[[253377,305542],[-946,45]],[[223429,307885],[-1,-7045]],[[223428,300840],[-1456,0]],[[221972,300840],[1,4685]],[[263252,305382],[-219,27]],[[263033,305409],[-515,58]],[[262518,305467],[-346,259]],[[263269,311611],[-17,-6229]],[[264370,310170],[-2,-2778]],[[264368,307392],[-267,-204],[-179,-1893]],[[263922,305295],[-670,87]],[[271023,306449],[-385,-3232]],[[270638,303217],[-108,-158]],[[270530,303059],[5,561],[-727,-210],[-58,1713]],[[282531,309390],[61,24]],[[282592,309414],[10,-65]],[[282602,309349],[-405,-2626],[-165,-1820],[-109,2615]],[[281923,307518],[-200,2589]],[[251647,305326],[-877,-15]],[[250770,305311],[-293,-4],[-2,1624]],[[276030,305532],[200,-730]],[[276230,304802],[-500,-1759],[-394,2383],[-444,601],[4,1044]],[[281923,307518],[8,-4063],[-186,-1610],[-387,486],[-737,-285],[-373,-589]],[[280248,301457],[-33,176]],[[280215,301633],[-11,67]],[[280204,301700],[-212,1204]],[[237408,310447],[27,-3044],[293,-50],[-7,-3257]],[[237721,304096],[-23,-4862],[-351,60]],[[237347,299294],[-4,1]],[[237343,299295],[-252,2449],[-133,5739],[-409,31]],[[238681,310276],[-66,-2358],[143,-158],[46,-2922],[169,-1709]],[[238973,303129],[-231,-2]],[[238742,303127],[-202,-247],[-819,1216]],[[206879,305574],[2,-12856],[-37,-4822],[-1146,-121]],[[205698,287775],[-6,3219],[-1134,-5],[-3,1594],[-1724,6]],[[202831,292589],[-75,1663]],[[240330,306833],[-20,-6441]],[[240310,300392],[-587,-612]],[[239723,299780],[-511,1233],[-239,2116]],[[264914,307056],[-97,-2181]],[[264817,304875],[-449,1093],[0,1424]],[[254962,309646],[-4,-5675]],[[254958,303971],[0,-1619]],[[254958,302352],[-879,89]],[[254079,302441],[-98,2459],[-614,117]],[[253367,305017],[10,525]],[[183362,303916],[0,-11575]],[[183362,292341],[-1740,3],[0,1620],[-862,-20],[-3,-8075],[-686,-61]],[[180071,285808],[-439,260],[-94,887],[82,3389],[-151,600],[21,1938],[272,564]],[[179762,293446],[283,2148],[77,2692],[-106,4262],[274,1899],[11,1120]],[[181121,309576],[281,-790],[1201,-586],[253,1502],[507,147]],[[219070,309777],[-4,-8906]],[[219066,300871],[-1455,-38]],[[217611,300833],[-1,8913]],[[220518,308107],[-138,101],[-4,-7331]],[[220376,300877],[-1310,-6]],[[258255,308758],[-186,-144],[-224,-2438],[-291,-747],[-162,-1946],[-430,-1123],[-129,-1066]],[[256833,301294],[-358,590],[-165,1921]],[[256310,303805],[109,-16],[5,5713]],[[217611,300833],[-1456,-60]],[[216155,300773],[-3,8974]],[[216155,300773],[-1454,-106]],[[214701,300667],[-15,9092]],[[214701,300667],[-1476,8]],[[213225,300675],[0,9080]],[[277494,308217],[-65,-786],[217,-4445],[468,-2796]],[[278114,300190],[-479,-436],[-840,1115],[-215,922]],[[276580,301791],[-276,1144]],[[276304,302935],[225,772],[-299,1095]],[[213225,300675],[-1204,0]],[[256310,303805],[-1352,166]],[[280204,301700],[21,-471],[-685,-2076],[-529,-3188]],[[279011,295965],[-269,-6],[-253,2493]],[[278489,298452],[-185,3128],[-229,1784],[245,1596],[342,3693]],[[278489,298452],[-265,205],[-88,1174]],[[278136,299831],[-22,359]],[[266754,307606],[118,-2921]],[[266872,304685],[-494,-1390]],[[266378,303295],[-72,1227],[-571,652],[-138,1129]],[[227307,305254],[-1,-3184]],[[227306,302070],[-352,1622],[-507,-2568],[-302,757]],[[226145,301881],[90,1860],[-381,232],[-154,2624]],[[269004,304188],[84,-1081]],[[269088,303107],[-225,529]],[[268863,303636],[-374,-245]],[[268489,303391],[-548,1345]],[[267941,304736],[-283,3355]],[[267941,304736],[-591,-490]],[[267350,304246],[-195,-334]],[[267155,303912],[-283,773]],[[274517,305785],[-85,-1864],[134,-4155],[-61,-616]],[[274505,299150],[-581,663],[-511,1884]],[[273413,301697],[-135,2327],[-372,1680],[-227,39],[-176,1868]],[[258671,305776],[-63,-2961]],[[258608,302815],[-229,-1970],[-471,-601],[9,-685]],[[257917,299559],[-515,1403],[-542,-470]],[[256860,300492],[-27,802]],[[221972,300840],[4,-1864]],[[221976,298976],[-229,1201],[-392,509],[-834,191]],[[220521,300877],[-145,0]],[[224904,305473],[0,-4595]],[[224904,300878],[-1476,-38]],[[260244,303344],[-448,-474],[-461,-1878]],[[259335,300992],[-374,2733],[-353,-910]],[[273413,301697],[-85,-3220]],[[273328,298477],[-403,-1010]],[[272925,297467],[-503,1412],[-567,2766]],[[271855,301645],[277,3710]],[[249738,306948],[7,-5486]],[[249745,301462],[-730,-2],[-438,571]],[[248577,302031],[-14,4958]],[[237343,299295],[-645,694],[-800,2841]],[[271855,301645],[-224,-1169]],[[271631,300476],[-514,964],[-162,2031],[-317,-254]],[[264817,304875],[-499,-1732]],[[264318,303143],[-198,104],[-7,-5871]],[[264113,297376],[-299,18],[-3,-1823]],[[263811,295571],[-420,-902]],[[263391,294669],[-672,168]],[[262719,294837],[116,1165]],[[262835,296002],[415,1551],[228,1602]],[[263478,299155],[298,1539],[245,2560],[-99,2041]],[[230025,306061],[101,-881],[-211,-1084],[101,-2120]],[[230016,301976],[-186,350],[-327,-1482],[-269,387],[-183,1849]],[[229051,303080],[-98,2169]],[[244411,304199],[-353,-701],[-25,-3600]],[[244033,299898],[-1166,155]],[[242867,300053],[62,5071]],[[276304,302935],[-783,-2654],[-394,-674],[-382,-2307]],[[274745,297300],[-240,1850]],[[265597,306303],[-143,-2279],[195,-1400]],[[265649,302624],[-510,-2675]],[[265139,299949],[-116,-620]],[[265023,299329],[-659,3103],[-46,711]],[[248577,302031],[0,-1380],[-585,-270],[-2,-1632]],[[247990,298749],[-442,543],[316,1089],[-750,38]],[[247114,300419],[2,3245]],[[250770,305311],[4,-4878],[-150,-1369]],[[250624,299064],[-878,-312]],[[249746,298752],[-1,2710]],[[231679,306850],[149,-590],[1,-3199],[271,-1474],[224,-5]],[[232324,301582],[-241,-630]],[[232083,300952],[-247,888],[-429,-565],[-250,-1798],[-558,-652]],[[230599,298825],[-125,949],[-568,1263],[110,939]],[[234007,302750],[-176,481],[-257,-1570]],[[233574,301661],[-669,201],[-133,967],[-448,-1247]],[[241862,305041],[-376,-48],[-11,-1571],[394,-3307]],[[241869,300115],[-693,133]],[[241176,300248],[-866,144]],[[226145,301881],[-3,-7871]],[[226142,294010],[-1232,-6]],[[224910,294004],[-6,6874]],[[266378,303295],[-305,-1110]],[[266073,302185],[-424,439]],[[246542,303700],[-5,-6913],[-293,-2],[0,-1616]],[[246244,295169],[-1256,-5]],[[244988,295164],[-45,601]],[[244943,295765],[269,599],[-236,1265],[282,815],[-40,1455],[303,-382],[-185,3716],[560,1252],[-185,1658]],[[244943,295765],[-41,-823],[-579,866]],[[244323,295808],[8,4034],[-298,56]],[[262518,305467],[-156,-2441],[-200,-874]],[[262162,302152],[-936,-50]],[[261226,302102],[-34,1161]],[[253367,305017],[-117,-5834]],[[253250,299183],[-737,-1766]],[[252513,297417],[38,554],[-611,6],[-2,2436]],[[251938,300413],[2,4905]],[[210732,295929],[-587,-11],[-3,-3235],[-124,-7],[0,-8008],[-134,-3]],[[209884,284665],[-2861,-35],[-28,-8243]],[[206995,276387],[-1400,-32],[4,8250],[101,1],[-2,3169]],[[263478,299155],[-127,1132],[-280,33]],[[263071,300320],[-38,5089]],[[179762,293446],[-4058,-181]],[[175704,293265],[-2643,-5],[-585,89],[-362,1122],[-387,245]],[[171727,294716],[267,2870],[-339,971],[-382,2958]],[[263071,300320],[-494,-473]],[[262577,299847],[-380,582]],[[262197,300429],[-35,1723]],[[270530,303059],[-303,-446],[112,-1813],[-159,-1241],[160,-3138]],[[270340,296421],[-326,1801]],[[270014,298222],[-319,2646],[-607,2239]],[[251938,300413],[-588,24],[-1,-1081],[-287,-276]],[[251062,299080],[-438,-16]],[[229051,303080],[-27,-97]],[[229024,302983],[-420,-2885],[-33,-1359],[-271,1490],[50,1869],[-342,-239],[-177,-1289],[-249,387],[-61,1401]],[[227521,302358],[-215,-288]],[[242867,300053],[0,-1626]],[[242867,298427],[-989,64]],[[241878,298491],[-9,1624]],[[254079,302441],[14,-7371]],[[254093,295070],[-914,185]],[[253179,295255],[71,3928]],[[268489,303391],[-191,-580],[-387,-2963],[106,-884]],[[268017,298964],[-130,-739]],[[267887,298225],[-343,99],[-450,1171]],[[267094,299495],[12,1605]],[[267106,301100],[49,2812]],[[189753,293991],[-1506,-3],[-6,-4849],[-1376,-19],[-349,1601],[-5,-14590]],[[186511,276131],[-3149,-35]],[[183362,276096],[0,16245]],[[267106,301100],[-728,2195]],[[238742,303127],[-74,-8950]],[[238668,294177],[-668,109]],[[238000,294286],[-287,2381]],[[237713,296667],[-388,1098],[22,1529]],[[256860,300492],[-290,-2960],[-338,-792],[-245,-1877]],[[255987,294863],[-144,1386],[-293,274]],[[255550,296523],[0,1620],[-291,54],[-9,3268],[-292,887]],[[268863,303636],[139,-2861],[323,-3555]],[[269325,297220],[-471,-581]],[[268854,296639],[-87,-160]],[[268767,296479],[-371,1042],[-216,-421],[-163,1864]],[[227521,302358],[-8,-8969]],[[227513,293389],[-1201,1]],[[226312,293390],[-170,620]],[[259335,300992],[56,-1316],[-280,-1720]],[[259111,297956],[-212,-1709],[70,-887],[-508,-2769]],[[258461,292591],[2,2075],[-386,811]],[[258077,295477],[-160,4082]],[[247114,300419],[-4,-8971]],[[247110,291448],[-285,-7],[1,-1091],[-449,-9]],[[246377,290341],[-133,6],[0,4822]],[[270014,298222],[-538,-798]],[[269476,297424],[-151,-204]],[[271631,300476],[-1005,-5256]],[[270626,295220],[-44,238]],[[270582,295458],[-242,963]],[[265023,299329],[-257,-2572],[-190,585]],[[264576,297342],[-271,24]],[[264305,297366],[-192,10]],[[260085,295668],[2,547],[-556,17],[-158,1641],[-262,83]],[[260826,302839],[-296,-1218],[-7,-4236],[-438,-1717]],[[267094,299495],[-351,-1180]],[[266743,298315],[-277,2222]],[[266466,300537],[-393,1648]],[[261226,302102],[133,-4629]],[[261359,297473],[96,-3170]],[[261455,294303],[-945,242]],[[260510,294545],[-581,52]],[[259929,294597],[156,1071]],[[235148,298399],[-1,-6962]],[[235147,291437],[-172,647]],[[234975,292084],[-223,645],[-660,-165]],[[234092,292564],[-504,-212]],[[233588,292352],[-6,49]],[[233582,292401],[-8,9260]],[[239723,299780],[-33,-6035]],[[239690,293745],[-694,-157]],[[238996,293588],[-328,589]],[[230599,298825],[-15,-6105]],[[230584,292720],[-1252,143]],[[229332,292863],[-306,203]],[[229026,293066],[-2,9917]],[[229026,293066],[-1224,262]],[[227802,293328],[-289,61]],[[237713,296667],[-606,-1073]],[[237107,295594],[-320,702],[-637,-837],[-277,1730]],[[276580,301791],[-335,-2182],[7,-1181],[-302,-3863]],[[275950,294565],[-336,-991]],[[275614,293574],[-478,39],[-285,2097]],[[274851,295710],[-106,1590]],[[171727,294716],[-239,-2194]],[[171488,292522],[-527,2873],[-607,2124],[-309,1676]],[[233582,292401],[-516,1393],[-745,742],[-269,-626]],[[232052,293910],[31,7042]],[[266466,300537],[-488,-4110]],[[265978,296427],[-652,2740]],[[265326,299167],[-187,782]],[[255550,296523],[-579,144],[-98,-1641],[-485,59]],[[254388,295085],[-295,-15]],[[262197,300429],[-36,-1811],[-802,-1145]],[[249746,298752],[0,-823]],[[249746,297929],[-780,-17]],[[248966,297912],[-952,5]],[[248014,297917],[-24,832]],[[278136,299831],[-261,-1729],[-65,-2062],[-295,-1492],[-382,-3555]],[[277133,290993],[-221,469],[-599,3177],[-363,-74]],[[232052,293910],[-3,-968]],[[232049,292942],[-1216,-1076]],[[230833,291866],[-249,854]],[[274851,295710],[-156,131],[-298,-1760],[-415,2481],[-367,85],[-287,1830]],[[272925,297467],[-517,-3023]],[[272408,294444],[-1070,-5442]],[[271338,289002],[-265,919]],[[271073,289921],[-257,2318],[43,1727],[-233,1254]],[[258077,295477],[-439,-1478],[-435,-2504],[-548,-1594]],[[256655,289901],[-109,9]],[[256546,289910],[-267,1112],[-470,3450],[178,391]],[[220521,300877],[16,-8166]],[[220537,292711],[-1467,10]],[[219070,292721],[-4,8150]],[[221976,298976],[5,-6234]],[[221981,292742],[-1444,-31]],[[224910,294004],[2,-1315]],[[224912,292689],[-1486,26]],[[223426,292715],[2,8125]],[[219070,292721],[-1453,-13]],[[217617,292708],[-6,8125]],[[217617,292708],[-1443,-45]],[[216174,292663],[-19,8110]],[[223426,292715],[-1445,27]],[[216174,292663],[-1446,-96]],[[214728,292567],[-27,8100]],[[213225,300675],[57,-8129]],[[213282,292546],[-1287,-1]],[[211995,292545],[11,3391]],[[214728,292567],[-1446,-21]],[[241176,300248],[-12,-1321],[-518,-4118],[192,-1475],[382,-1184]],[[241220,292150],[-1146,188]],[[240074,292338],[-391,56],[7,1351]],[[266743,298315],[382,-3067],[-30,-933]],[[267095,294315],[-707,-913]],[[266388,293402],[-414,1708]],[[265974,295110],[4,1317]],[[262719,294837],[-459,-1602]],[[262260,293235],[-776,48]],[[261484,293283],[-29,1020]],[[262577,299847],[-12,-3859],[270,14]],[[248014,297917],[76,-4060],[-205,-780],[1,-1558]],[[247886,291519],[-437,-567]],[[247449,290952],[-227,-1245],[-112,1741]],[[252513,297417],[69,-2403],[-508,-277]],[[252074,294737],[0,1098],[-968,-56]],[[251106,295779],[-44,3301]],[[241878,298491],[54,-3825],[-183,-2389],[75,-1398]],[[241824,290879],[-230,-523],[-374,1794]],[[244323,295808],[-11,-3253]],[[244312,292555],[-1484,172]],[[242828,292727],[39,5700]],[[264965,295106],[-389,2236]],[[265326,299167],[-46,-1734],[-315,-2327]],[[279011,295965],[-403,-3616],[-92,-2363],[-262,1132],[231,-2620],[-212,-589],[-375,805]],[[277898,288714],[-123,574]],[[277775,289288],[-642,1705]],[[195305,289204],[0,-8032]],[[195305,281172],[-1,-6537]],[[195304,274635],[-186,-4]],[[195118,274631],[-312,2178],[43,3573],[-198,582],[-596,5810],[0,10694]],[[267887,298225],[124,-661],[-175,-1445],[3,-2070]],[[267839,294049],[-421,-2128]],[[267418,291921],[-323,2394]],[[253179,295255],[-83,-4574]],[[253096,290681],[-1016,-26]],[[252080,290655],[-6,4082]],[[265974,295110],[21,-726],[-419,-926],[-105,-1288]],[[265471,292170],[-170,1415]],[[265301,293585],[-336,1521]],[[251106,295779],[-194,-540]],[[250912,295239],[-465,-210],[-350,-1146]],[[250097,293883],[-350,16],[-1,4030]],[[268767,296479],[-104,-668]],[[268663,295811],[-273,-796],[-103,-1445]],[[268287,293570],[-448,479]],[[237107,295594],[1,-5232]],[[237108,290362],[-341,757],[-196,-1322],[-639,965],[-521,-443]],[[235411,290319],[-264,1118]],[[275614,293574],[-88,-2688],[-301,-779]],[[275225,290107],[-353,382],[-40,1051],[-800,-2860]],[[274032,288680],[-22,-72]],[[274010,288608],[-398,2352],[-785,2545]],[[272827,293505],[-419,939]],[[242828,292727],[22,-1854],[-368,-1418],[-65,-1107]],[[242417,288348],[-241,1667],[-352,864]],[[270582,295458],[-741,-3541]],[[269841,291917],[-395,3623],[30,1884]],[[259929,294597],[-147,0],[-211,-3806],[-383,38],[-157,-3571]],[[259031,287258],[-882,-28]],[[258149,287230],[-35,1334],[210,2007],[198,282],[-61,1738]],[[250097,293883],[-203,-505],[0,-2741]],[[249894,290637],[-534,-9]],[[249360,290628],[-4,2180],[-385,256],[-5,4848]],[[249360,290628],[-290,-1321]],[[249070,289307],[-1184,2212]],[[269841,291917],[-165,-789]],[[269676,291128],[-4,-5]],[[269672,291123],[-80,1]],[[269592,291124],[-424,845],[-314,4670]],[[195118,274631],[-3725,22]],[[191393,274653],[0,1610]],[[191393,276263],[7,12672]],[[264305,297366],[79,-1215],[-282,-4274]],[[264102,291877],[-95,1]],[[264007,291878],[19,2058],[-215,1635]],[[265301,293585],[-113,-1287],[-385,-1434]],[[264803,290864],[-134,698],[-567,315]],[[238000,294286],[55,-4237],[-203,-2132],[-208,87],[128,-2331]],[[237772,285673],[-29,1]],[[237743,285674],[-635,-3]],[[237108,285671],[0,4691]],[[269592,291124],[-134,-694]],[[269458,290430],[-356,976],[-547,-1372]],[[268555,290034],[-268,3536]],[[256546,289910],[-601,-2119],[-102,-2363],[-288,-51]],[[255555,285377],[-818,63]],[[254737,285440],[-326,195],[-14,2539]],[[254397,288174],[-9,6911]],[[211995,292545],[-22,-7993]],[[211973,284552],[0,-8133]],[[211973,276419],[1,-8101]],[[211974,268318],[0,-1611],[-731,-3]],[[211243,266704],[-1104,-3]],[[210139,266701],[0,9724],[-255,-1],[0,8241]],[[252080,290655],[-401,-9]],[[251679,290646],[-766,-8]],[[250913,290638],[-1,4601]],[[244988,295164],[-59,-1673],[289,734],[-26,-3356],[151,-2943],[-317,-598],[225,-984],[-128,-820]],[[245123,285524],[0,-134]],[[245123,285390],[-271,18]],[[244852,285408],[-481,19]],[[244371,285427],[-67,-3]],[[244304,285424],[8,7131]],[[264007,291878],[-125,-1789],[-179,18]],[[263703,290107],[-245,1867],[-67,2695]],[[258149,287230],[-73,-1530]],[[258076,285700],[-260,915],[-756,37],[2,-410]],[[257062,286242],[-403,2158],[-4,1501]],[[271073,289921],[-669,-319],[-229,1236],[-260,-546]],[[269915,290292],[-148,616]],[[269767,290908],[-91,220]],[[254397,288174],[-931,-2937]],[[253466,285237],[-470,-87]],[[252996,285150],[100,5531]],[[250913,290638],[-58,-1638],[-291,-9],[-3,-1640],[-289,-10]],[[250272,287341],[5,3289],[-383,7]],[[246377,290341],[40,-3234]],[[246417,287107],[-592,20],[0,-1670]],[[245825,285457],[-702,67]],[[266388,293402],[-34,-4888]],[[266354,288514],[-753,-747]],[[265601,287767],[-17,901]],[[265584,288668],[-113,3502]],[[263703,290107],[-14,-676]],[[263689,289431],[-975,44],[-28,-604]],[[262686,288871],[-213,626]],[[262473,289497],[-213,3738]],[[277775,289288],[-200,-1210],[-345,-446],[-431,-3536]],[[276799,284096],[-357,-1958],[-73,1501]],[[276369,283639],[-170,-185],[-119,1854],[-263,409]],[[275817,285717],[-479,2444],[-113,1946]],[[175704,293265],[8,-6545],[-64,-14],[-11,-8498]],[[175637,278208],[-2838,-1564],[17,2580],[-320,834],[-131,1949],[82,971],[-206,4490],[-532,4208],[-221,846]],[[261484,293283],[160,-5557]],[[261644,287726],[11,-400]],[[261655,287326],[-1005,-14]],[[260650,287312],[-168,-13]],[[260482,287299],[28,7246]],[[260482,287299],[-991,-305]],[[259491,286994],[-460,264]],[[233588,292352],[-6,-55]],[[233582,292297],[-854,-556],[-398,-900],[-289,-1444]],[[232041,289397],[8,3545]],[[272827,293505],[-15,-5200],[98,-784]],[[272910,287521],[-478,-195],[-495,933],[-201,-1171]],[[271736,287088],[-363,872],[-35,1042]],[[267418,291921],[45,-836],[-297,-951],[-55,-1334]],[[267111,288800],[-431,-35]],[[266680,288765],[-326,-251]],[[202831,292589],[15,-6292]],[[202846,286297],[-1525,-4281],[1,-811],[-1146,18],[-2,-3253]],[[200174,277970],[-860,-3]],[[199314,277967],[-358,449],[43,2766],[-165,3253],[-161,392],[-104,4258],[-348,-19]],[[238996,293588],[-214,-3466],[-111,31],[-24,-4496]],[[238647,285657],[-85,2]],[[238562,285659],[-790,14]],[[268555,290034],[21,-284]],[[268576,289750],[-391,-1856],[-455,-1079]],[[267730,286815],[-127,1309],[-492,676]],[[183362,276096],[1,-8676]],[[183363,267420],[-4125,8475],[13,2284],[251,1898]],[[179502,280077],[536,715],[179,2807],[-146,2209]],[[191393,276263],[-1966,-35],[0,-192],[-2916,95]],[[226312,293390],[-10,-8052]],[[226302,285338],[-375,38]],[[225927,285376],[-1032,85]],[[224895,285461],[17,7228]],[[240074,292338],[-28,-6700]],[[240046,285638],[-697,10]],[[239349,285648],[-702,9]],[[265584,288668],[-611,418]],[[264973,289086],[-229,4]],[[264744,289090],[59,1774]],[[274010,288608],[-793,-2802]],[[273217,285806],[-307,1715]],[[179502,280077],[-3865,-1869]],[[227802,293328],[-42,-8197]],[[227760,285131],[-406,73]],[[227354,285204],[-1052,134]],[[229332,292863],[-29,-7782]],[[229303,285081],[-523,-53]],[[228780,285028],[-1020,103]],[[262473,289497],[-829,-1771]],[[232039,284934],[-231,5],[-115,-1982],[146,-674]],[[231839,282283],[-397,23]],[[231442,282306],[-615,61]],[[230827,282367],[1,2606]],[[230828,284973],[5,6893]],[[232041,289397],[-2,-4463]],[[230828,284973],[-612,11]],[[230216,284984],[-913,97]],[[219070,292721],[-5,-8098]],[[219065,284623],[-381,10]],[[218684,284633],[-1066,127]],[[217618,284760],[-1,7948]],[[220537,292711],[5,-8140]],[[220542,284571],[-432,-2]],[[220110,284569],[-1045,54]],[[234975,292084],[-31,-7088]],[[234944,284996],[-292,1575],[-561,-613]],[[234091,285958],[1,6606]],[[217618,284760],[-376,-125]],[[217242,284635],[-1070,-47]],[[216172,284588],[2,8075]],[[223426,292715],[8,-8204]],[[223434,284511],[-404,2]],[[223030,284513],[-1045,0]],[[221985,284513],[-4,8229]],[[224895,285461],[-2,-1035],[-413,38]],[[224480,284464],[-1046,47]],[[221985,284513],[-393,-1]],[[221592,284512],[-1050,59]],[[244304,285424],[-1696,42]],[[242608,285466],[-191,2882]],[[216172,284588],[-374,14]],[[215798,284602],[-1072,-38]],[[214726,284564],[2,8003]],[[206995,276387],[10,-9680]],[[207005,266707],[-197,-1]],[[206808,266706],[-3007,34]],[[203801,266740],[-1057,-19]],[[202744,266721],[2,17810],[100,1766]],[[213282,292546],[0,-7999]],[[213282,284547],[-1309,5]],[[214726,284564],[-368,-14]],[[214358,284550],[-1076,-3]],[[234091,285958],[-73,-393]],[[234018,285565],[-60,-961],[-377,12]],[[233581,284616],[1,7681]],[[242608,285466],[-1828,115]],[[240780,285581],[-734,57]],[[233581,284616],[-993,-39]],[[232588,284577],[-549,357]],[[235411,290319],[-5,-7248]],[[235406,283071],[-145,-6]],[[235261,283065],[-39,471]],[[235222,283536],[-278,1460]],[[249070,289307],[-206,-1883],[-209,-3399],[-189,-953]],[[248466,283072],[-1108,2439]],[[247358,285511],[-151,1938],[245,380],[-3,3123]],[[264744,289090],[-346,-257]],[[264398,288833],[-567,369],[-126,-463]],[[263705,288739],[-16,692]],[[275817,285717],[197,-1750],[-222,-2037],[-677,747]],[[275115,282677],[4,3611],[-520,96],[-567,2296]],[[247358,285511],[-237,-29],[-3,-1592],[-571,-19]],[[246547,283871],[-8,3240],[-122,-4]],[[269458,290430],[-641,-2764]],[[268817,287666],[-197,886]],[[268620,288552],[-44,1198]],[[269915,290292],[98,-679],[-163,-3128],[52,-2328],[-122,-1899]],[[269780,282258],[-329,-1370]],[[269451,280888],[-242,1119]],[[269209,282007],[-81,3665],[-311,1994]],[[237108,285671],[0,-2571]],[[237108,283100],[-1702,-29]],[[271736,287088],[202,-924]],[[271938,286164],[-630,-2537]],[[271308,283627],[-251,828],[-618,-687],[-182,-1942]],[[270257,281826],[-477,432]],[[252996,285150],[-21,-1156]],[[252975,283994],[-1295,-59]],[[251680,283935],[-1,6711]],[[251680,283935],[-283,11]],[[251397,283946],[-1128,96]],[[250269,284042],[3,3299]],[[250269,284042],[-1132,-33],[-12,-840]],[[249125,283169],[-659,-97]],[[257062,286242],[14,-3976],[-399,14]],[[256677,282280],[-836,-103],[-284,800]],[[255557,282977],[-2,2400]],[[269209,282007],[-689,-991],[-95,755],[-402,-936]],[[268023,280835],[-353,3484]],[[267670,284319],[60,2496]],[[263705,288739],[-84,-3973]],[[263621,284766],[55,-1652]],[[263676,283114],[-539,-692]],[[263137,282422],[-449,518]],[[262688,282940],[-2,5931]],[[262688,282940],[-898,-38]],[[261790,282902],[-135,4424]],[[199314,277967],[-878,-19],[0,-1622],[-852,-5],[-2,-8135],[36,-4019]],[[197618,264167],[-857,-7],[-37,4023],[2,8133],[-306,3],[2,1614],[-576,1],[-5,3232],[-536,6]],[[264398,288833],[-62,-3686]],[[264336,285147],[-715,-381]],[[264973,289086],[-7,-4742],[-221,-294]],[[264745,284050],[2,1070],[-411,27]],[[265601,287767],[265,-1986],[29,-1346]],[[265895,284435],[-506,-1945]],[[265389,282490],[-646,23]],[[264743,282513],[2,1537]],[[267670,284319],[-205,1161],[-587,-1542]],[[266878,283938],[-198,4827]],[[266878,283938],[-137,-519]],[[266741,283419],[-297,-993]],[[266444,282426],[-403,799],[-146,1210]],[[275115,282677],[-128,-2424],[77,-2306]],[[275064,277947],[21,-1799],[-453,1073]],[[274632,277221],[-397,2101],[-304,487]],[[273931,279809],[-206,2389],[-508,3608]],[[273217,285806],[-382,-1361],[-117,-2128],[-399,-1751]],[[272319,280566],[-269,3521],[-24,1416]],[[272026,285503],[-88,661]],[[254737,285440],[-323,-2639],[122,-3923],[141,-1192],[-210,-1223]],[[254467,276463],[-114,140]],[[254353,276603],[-184,1820],[-374,-689],[-62,3380],[-367,2778],[100,1345]],[[261790,282902],[136,-2308]],[[261926,280594],[-1276,-334]],[[260650,280260],[0,7052]],[[260650,280260],[-288,-579],[2,-1890]],[[260364,277791],[-286,-278],[4,-1615],[-248,-23]],[[259834,275875],[-17,4870],[-320,8]],[[259497,280753],[-6,6241]],[[259497,280753],[-1025,-27]],[[258472,280726],[-231,1150],[-165,3824]],[[246547,283871],[-292,-1615],[176,-342],[-73,-2890]],[[246358,279024],[-674,12],[3,3263],[138,3158]],[[235222,283536],[-1204,-38]],[[234018,283498],[0,2067]],[[258472,280726],[-106,-860]],[[258366,279866],[-839,-31],[-2,-819],[-563,45]],[[256962,279061],[-281,-16],[0,1226]],[[256681,280271],[-4,2009]],[[202744,266721],[-672,-16],[-49,-2500],[301,-1531]],[[202324,262674],[-2142,-5]],[[200182,262669],[-8,15301]],[[272319,280566],[44,-2784]],[[272363,277782],[-442,-1977]],[[271921,275805],[-595,2074]],[[271326,277879],[-222,903]],[[271104,278782],[-65,751],[269,4094]],[[273931,279809],[-121,-807]],[[273810,279002],[-90,-725],[-314,2439],[-742,-3661]],[[272664,277055],[-301,727]],[[248466,283072],[-231,-2682],[-557,-1363]],[[247678,279027],[-560,-1640]],[[247118,277387],[-289,-1241]],[[246829,276146],[-463,2072]],[[246366,278218],[-8,806]],[[238701,271113],[-400,6]],[[238301,271119],[-149,1513],[-322,444],[-467,-2738],[-254,8]],[[237109,270346],[-1,3653]],[[237108,273999],[0,5600]],[[237108,279599],[0,3501]],[[237743,285674],[-73,-1364],[157,-1652],[-2,-3964],[475,-5512],[401,-2069]],[[238562,285659],[194,-3036],[29,-8285],[191,-5]],[[238976,274333],[-156,-3244]],[[238820,271089],[-119,24]],[[239516,277585],[89,-2415],[-250,-839],[-379,2]],[[239349,285648],[4,-5606],[141,-1],[22,-2456]],[[240779,280837],[-287,-14],[-146,-3236]],[[240346,277587],[-830,-2]],[[240780,285581],[-1,-4744]],[[242619,280157],[-575,-2639],[-400,30]],[[241644,277548],[0,1623],[-290,937],[-575,729]],[[242608,285466],[11,-5309]],[[234018,283498],[-3,-6187]],[[234015,277311],[-813,788]],[[233202,278099],[-417,1389]],[[232785,279488],[-113,619]],[[232672,280107],[-84,4470]],[[246366,278218],[-28,-989],[-363,176],[-2,-2478],[-251,42],[-36,2444],[-221,12]],[[245465,277425],[-297,1279],[258,1420],[-227,256],[-7,1864],[186,934],[-62,1882],[-224,-1603],[31,1933]],[[268023,280835],[-29,-951]],[[267994,279884],[-750,-2311]],[[267244,277573],[-503,5846]],[[244371,285427],[-163,-2146],[-308,-2022],[-90,-2138]],[[243810,279121],[-368,-2107],[-400,-899]],[[243042,276115],[-26,3010],[-397,1032]],[[255557,282977],[-143,-816],[-4,-3254],[-143,-3],[2,-3233]],[[255269,275671],[-569,-21],[-233,813]],[[244852,285408],[-216,-2699],[-7,-2066],[-283,-3112]],[[244346,277531],[-420,5],[-116,1585]],[[225927,285376],[-30,-8275]],[[225897,277101],[-4,-879]],[[225893,276222],[-1134,26]],[[224759,276248],[-281,39]],[[224478,276287],[2,8177]],[[245465,277425],[-76,-261]],[[245389,277164],[-175,-453],[-903,-2]],[[244311,276709],[35,822]],[[227354,285204],[-18,-8167]],[[227336,277037],[-186,1]],[[227150,277038],[-1253,63]],[[264743,282513],[-219,-2968]],[[264524,279545],[-235,1092]],[[264289,280637],[-264,580],[-349,1897]],[[254353,276603],[-498,-1834],[-40,-1059],[323,-1231]],[[254138,272479],[-1368,-35]],[[252770,272444],[91,5015]],[[252861,277459],[114,6535]],[[228780,285028],[-17,-8118]],[[228763,276910],[-135,16]],[[228628,276926],[-1292,111]],[[230216,284984],[-6,-3141]],[[230210,281843],[-31,-4995]],[[230179,276848],[-1416,62]],[[230827,282367],[0,-513],[-617,-11]],[[232672,280107],[-600,939],[-233,1237]],[[218684,284633],[-13,-8156]],[[218671,276477],[-1432,43]],[[217239,276520],[3,8115]],[[210139,266701],[-717,-2]],[[209422,266699],[-123,-1]],[[209299,266698],[-2294,9]],[[220110,284569],[-7,-8139]],[[220103,276430],[-1432,47]],[[217239,276520],[0,-66]],[[217239,276454],[-1432,21]],[[215807,276475],[-9,8127]],[[215807,276475],[-1432,-37]],[[214375,276438],[-17,8112]],[[214375,276438],[-25,-1]],[[214350,276437],[-2377,-18]],[[221592,284512],[0,-8234]],[[221592,276278],[-49,0]],[[221543,276278],[-1440,152]],[[223030,284513],[0,-8233]],[[223030,276280],[-51,1]],[[222979,276281],[-1387,-3]],[[224478,276287],[-1448,-7]],[[271104,278782],[-447,-786]],[[270657,277996],[-226,1046],[-174,2784]],[[266444,282426],[-237,-2443]],[[266207,279983],[2,-920]],[[266209,279063],[-288,519]],[[265921,279582],[-345,931],[-187,1977]],[[251397,283946],[0,-6508]],[[251397,277438],[-1123,-9]],[[250274,277429],[-5,6613]],[[250274,277429],[-14,-1]],[[250260,277428],[-1136,15],[0,1061]],[[249124,278504],[1,4665]],[[252861,277459],[-1464,-21]],[[235261,283065],[11,-1603]],[[235272,281462],[1,-2618]],[[235273,278844],[-795,-2143]],[[234478,276701],[-463,610]],[[267244,277573],[-756,-2456]],[[266488,275117],[-124,3123],[-155,823]],[[264289,280637],[-142,-524],[-197,-2955],[-99,3]],[[263851,277161],[-538,-506]],[[263313,276655],[-159,-301]],[[263154,276354],[0,1215]],[[263154,277569],[-17,4853]],[[237108,279599],[-281,902],[-86,-872],[-299,1007],[-286,-1037],[-341,13],[-543,1850]],[[249124,278504],[-151,-881]],[[248973,277623],[-205,-34],[-580,-3455]],[[248188,274134],[-494,8],[0,1631],[-576,8],[0,1606]],[[256681,280271],[-69,-2498],[-191,-1960],[-869,-125],[4,-3255],[-143,-9]],[[255413,272424],[-143,-6],[-1,3253]],[[263154,277569],[-1076,448]],[[262078,278017],[-152,2577]],[[265921,279582],[1,-28]],[[265922,279554],[-184,35],[-659,-3027]],[[265079,276562],[-284,2688],[-271,295]],[[231442,282306],[2,-8953]],[[231444,273353],[-1049,21]],[[230395,273374],[-216,3474]],[[270657,277996],[-80,-1269]],[[270577,276727],[-329,-341],[-291,-3111],[55,-643]],[[270012,272632],[0,-5]],[[270012,272627],[-338,-491],[-153,1148]],[[269521,273284],[74,1606],[-301,1073],[-437,275]],[[268857,276238],[507,2500],[87,2150]],[[232785,279488],[1,-3858],[404,-2322]],[[233190,273308],[-1746,45]],[[268857,276238],[-59,1856],[-542,1927],[-262,-137]],[[237108,273999],[-848,-1143],[-402,1183]],[[235858,274039],[-244,1]],[[235614,274040],[-342,532],[1,4272]],[[197618,264167],[24,-1497]],[[197642,262670],[0,-8384],[-2346,-23]],[[195296,254263],[8,20372]],[[259834,275875],[18,-769],[-399,-590]],[[259453,274516],[-479,386],[-118,1013],[-486,-1586]],[[258370,274329],[-4,5537]],[[241644,277548],[-1,-1627]],[[241643,275921],[-577,18],[2,-799],[-433,-2]],[[240635,275138],[-285,12],[-4,2437]],[[273810,279002],[98,-1654]],[[273908,277348],[8,-2098]],[[273916,275250],[-11,-827]],[[273905,274423],[15,-90]],[[273920,274333],[-20,-184]],[[273900,274149],[-60,-392]],[[273840,273757],[-438,-2518],[175,-1903]],[[273577,269336],[17,-224]],[[273594,269112],[-42,-1026],[-431,800]],[[273121,268886],[-76,2024]],[[273045,270910],[44,2085],[-299,3226]],[[272790,276221],[-126,834]],[[265079,276562],[-41,-437]],[[265038,276125],[-259,143],[-399,-2644]],[[264380,273624],[-384,781]],[[263996,274405],[-145,2756]],[[262078,278017],[222,-1817]],[[262300,276200],[-162,-699],[-765,-79],[10,-1076],[-289,-21]],[[261094,274325],[-155,1623],[-575,1843]],[[256962,279061],[29,-2256],[255,-3763]],[[257246,273042],[-260,-2156],[4,-3296]],[[256990,267590],[-755,-8],[-207,1771],[-614,2276]],[[255414,271629],[-1,795]],[[243042,276115],[-252,-2320],[-86,-1940]],[[242704,271855],[-773,7]],[[241931,271862],[-288,2425],[0,1634]],[[268650,272453],[-454,-2106]],[[268196,270347],[-296,-908],[-412,5134]],[[267488,274573],[-244,3000]],[[268857,276238],[-273,-3365],[66,-420]],[[258370,274329],[-238,-1220]],[[258132,273109],[-630,1133],[-256,-1200]],[[274213,271739],[154,-1026],[-395,-1964],[241,2990]],[[273840,273757],[261,-1594],[-185,-2612],[-322,-439]],[[274414,275981],[264,-153],[280,-1524],[-294,-990],[-167,-1798],[-139,1959],[56,2506]],[[274160,276707],[170,-315],[46,-4156],[-277,1435],[-122,1906],[183,1130]],[[274632,277221],[33,-1171],[-536,816],[-157,-984],[-64,1466]],[[265516,275419],[-478,706]],[[265922,279554],[-53,-2957],[-353,-1178]],[[266488,275117],[0,-942]],[[266488,274175],[-328,-2106]],[[266160,272069],[-649,44]],[[265511,272113],[5,3306]],[[234478,276701],[5,-3100]],[[234483,273601],[0,-4335]],[[234483,269266],[-1322,-45]],[[233161,269221],[-81,1800],[110,2287]],[[244311,276709],[-53,-2458]],[[244258,274251],[-441,-8],[-351,-1303],[-29,-1625],[-344,-1798]],[[243093,269517],[-234,272],[-155,2066]],[[235614,274040],[-175,-434],[-956,-5]],[[271921,275805],[37,-1771],[275,-2845]],[[272233,271189],[-961,-1642]],[[271272,269547],[-98,1564],[-427,591]],[[270747,271702],[140,2717],[-310,2308]],[[250260,277428],[-1,-6571]],[[250259,270857],[-1135,-31]],[[249124,270826],[0,2438],[-151,4359]],[[246829,276146],[-140,-527],[-67,-2600],[-183,267],[-97,-2398]],[[246342,270888],[-114,-1301],[-411,-1386],[-315,624]],[[245502,268825],[-3,115]],[[245499,268940],[-61,70]],[[245438,269010],[-315,191],[118,1426]],[[245241,270627],[337,223],[252,2167],[-256,411],[68,1606],[-306,122],[53,2008]],[[263154,276354],[-211,-1787],[-562,-838]],[[262381,273729],[-81,2471]],[[200182,262669],[-2540,1]],[[273045,270910],[-142,209],[-547,-2637]],[[272356,268482],[-123,2707]],[[261094,274325],[1,-3262]],[[261095,271063],[-1173,-46],[-180,788]],[[259742,271805],[-224,1640]],[[259518,273445],[-65,1071]],[[249124,270826],[0,-3253]],[[249124,267573],[-1393,50]],[[247731,267623],[-42,2293],[499,4218]],[[240635,275138],[6,-4081],[-110,-1625]],[[240531,269432],[-347,19]],[[240184,269451],[-691,9]],[[239493,269460],[-75,1632],[-598,-3]],[[267488,274573],[-96,548],[-482,-3351]],[[266910,271770],[-422,2405]],[[252770,272444],[-27,-1509]],[[252743,270935],[-1345,-64]],[[251398,270871],[-1,6567]],[[251398,270871],[-1139,-14]],[[247731,267623],[-1360,-26]],[[246371,267597],[-29,3291]],[[245241,270627],[-1027,-144]],[[244214,270483],[-103,1786],[147,1982]],[[263996,274405],[-106,-4613]],[[263890,269792],[-3,-599]],[[263887,269193],[-267,9],[-340,1832]],[[263280,271034],[-27,-2]],[[263253,271032],[60,5623]],[[270747,271702],[-157,187]],[[270590,271889],[-578,743]],[[227150,277038],[6,-4410]],[[227156,272628],[-469,-47],[-452,-1537]],[[226235,271044],[-342,5178]],[[228628,276926],[1,-5287]],[[228629,271639],[-1086,-1713]],[[227543,269926],[-107,-742],[-280,1303]],[[227156,270487],[0,2141]],[[230395,273374],[194,-555]],[[230589,272819],[-1430,-4745]],[[229159,268074],[-124,-408],[-406,3973]],[[255414,271629],[-142,-188],[4,-2273],[-284,-8],[4,-2361],[-126,-263]],[[254870,266536],[-1130,-23]],[[253740,266513],[-126,1159],[208,569],[68,3761],[248,477]],[[263253,271032],[-736,-38]],[[262517,270994],[98,589],[-330,1226],[96,920]],[[217239,276454],[-26,-8133]],[[217213,268321],[-225,-2]],[[216988,268319],[-1199,8]],[[215789,268327],[18,8148]],[[218671,276477],[-13,-8190]],[[218658,268287],[-436,22]],[[218222,268309],[-1009,12]],[[220103,276430],[-15,-8195]],[[220088,268235],[-232,-5]],[[219856,268230],[-1198,57]],[[215789,268327],[-226,-12]],[[215563,268315],[-1213,-2]],[[214350,268313],[0,8124]],[[214350,268313],[-210,4]],[[214140,268317],[-1427,-23]],[[212713,268294],[-739,24]],[[265511,272113],[-316,-757],[-183,-1474]],[[265012,269882],[-430,1091]],[[264582,270973],[-206,1238],[4,1413]],[[221543,276278],[-5,-8068]],[[221538,268210],[-231,14]],[[221307,268224],[-1219,11]],[[224759,276248],[2,-3983],[-213,-701]],[[224548,271564],[-1040,-3414]],[[223508,268150],[-541,29]],[[222967,268179],[12,8102]],[[226235,271044],[225,-2721]],[[226460,268323],[-392,-1293]],[[226068,267030],[-565,-1869]],[[225503,265161],[-119,1166],[-213,-724],[-623,5961]],[[222967,268179],[-215,-7]],[[222752,268172],[-1214,38]],[[191393,274653],[-1,-12960]],[[191392,261693],[-1985,-97],[1,-3801],[-565,-10],[0,-1773]],[[188843,256012],[-5480,11408]],[[269521,273284],[-686,-1046]],[[268835,272238],[-185,215]],[[262517,270994],[-386,-1847],[16,-1276]],[[262147,267871],[-360,-24],[-203,1604],[-425,-24]],[[261159,269427],[-64,1636]],[[259742,271805],[-223,-445],[6,-3713]],[[259525,267647],[5,-1554],[-546,-20]],[[258984,266073],[-309,-26],[-4,1611],[-286,-16]],[[258385,267642],[-7,3607],[-246,1860]],[[241931,271862],[-1,-2445]],[[241930,269417],[-1399,15]],[[268196,270347],[-120,-1132]],[[268076,269215],[-774,-4371]],[[267302,264844],[-222,1408],[-144,2418]],[[266936,268670],[128,1356],[-154,1744]],[[264582,270973],[-5,-1325],[-687,144]],[[195296,254263],[-3927,9]],[[191369,254272],[23,7421]],[[258385,267642],[-117,-1603]],[[258268,266039],[-1141,-46]],[[257127,265993],[-137,1597]],[[235858,274039],[-247,-3595],[-56,-4246],[248,15]],[[235803,266213],[165,-2415]],[[235968,263798],[-1351,24]],[[234617,263822],[-133,12],[-1,5432]],[[244214,270483],[8,-2105],[-240,-3867]],[[243982,264511],[-60,1623],[-510,-1824],[-304,1856]],[[243108,266166],[-15,3351]],[[266936,268670],[-756,231]],[[266180,268901],[-20,3168]],[[237109,270346],[74,-4024]],[[237183,266322],[-1380,-109]],[[233161,269221],[87,-951]],[[233248,268270],[-1739,-1463]],[[231509,266807],[-6,123]],[[231503,266930],[-162,2701],[-752,3188]],[[269315,266119],[-168,-187]],[[269147,265932],[-152,1040],[-160,5266]],[[269521,273284],[-206,-7165]],[[270012,272627],[143,-2843],[-121,-4705]],[[270034,265079],[-575,985]],[[269459,266064],[-144,55]],[[238301,271119],[215,-818],[-12,-1664],[522,-3202]],[[239026,265435],[-240,-345],[-1,-1274]],[[238785,263816],[-1220,-19]],[[237565,263797],[-382,2525]],[[231503,266930],[-1231,-4027]],[[230272,262903],[-620,348]],[[229652,263251],[-493,4823]],[[227156,270487],[-696,-2164]],[[270590,271889],[127,-3676],[608,-623]],[[271325,267590],[-175,-617]],[[271150,266973],[-403,-4199]],[[270747,262774],[-221,704]],[[270526,263478],[-177,1370],[-315,231]],[[253740,266513],[-294,-3347],[251,-2068]],[[253697,261098],[-1046,-26]],[[252651,261072],[-26,3649]],[[252625,264721],[118,6214]],[[269147,265932],[-285,-745]],[[268862,265187],[-233,1642],[-442,1367],[-111,1019]],[[261159,269427],[-50,-2453],[-440,-327],[-199,-2179]],[[260470,264468],[-372,2],[4,1617],[-263,0],[-26,1492],[-288,68]],[[266180,268901],[-4,-1686]],[[266176,267215],[-979,52]],[[265197,267267],[-144,1878]],[[265053,269145],[-41,737]],[[271272,269547],[173,-1188]],[[271445,268359],[-120,-769]],[[243108,266166],[-323,-822]],[[242785,265344],[-856,1]],[[241929,265345],[1,4072]],[[257127,265993],[-143,-9],[6,-2440]],[[256990,263544],[-1656,-27]],[[255334,263517],[-331,-38],[-133,3057]],[[229652,263251],[-593,-1974]],[[229059,261277],[-293,2871],[-669,-2188]],[[228097,261960],[2,1607],[-453,1892],[173,815],[-272,611],[-4,3041]],[[225503,265161],[144,-1412],[-855,-2935]],[[224792,260814],[-82,738],[-489,-431]],[[224221,261121],[-713,7029]],[[245438,269010],[61,-70]],[[245502,268825],[-127,-1815],[-313,-1032],[-168,-1704]],[[244894,264274],[-270,-484],[77,-1752]],[[244701,262038],[-172,-287]],[[244529,261751],[-462,332]],[[244067,262083],[-85,2428]],[[272356,268482],[444,-3810]],[[272800,264672],[248,-708],[-50,-2336],[-442,1524]],[[272556,263152],[-244,2510],[-518,506],[-349,2191]],[[239493,269460],[179,-3272],[-322,2],[-3,-1288],[-321,533]],[[273103,263918],[241,-620],[-261,-1764],[-124,1738],[144,646]],[[273429,267956],[229,-1123],[-211,-968],[-18,2091]],[[273121,268886],[209,-711],[80,-2196],[219,-966],[-158,-953],[-438,1415],[-233,-803]],[[263887,269193],[-34,-3123]],[[263853,266070],[-27,-877],[-408,18]],[[263418,265211],[-156,2]],[[263262,265213],[18,5821]],[[263262,265213],[-700,78]],[[262562,265291],[-449,1252]],[[262113,266543],[34,1328]],[[265197,267267],[107,-2252]],[[265304,265015],[-1157,121],[0,-794]],[[264147,264342],[-294,1728]],[[252625,264721],[-414,-683],[-803,-568]],[[251408,263470],[-10,7401]],[[246371,267597],[-50,-4882]],[[246321,262715],[-773,1410],[-654,149]],[[251408,263470],[-93,-39]],[[251315,263431],[-1039,-418]],[[250276,263013],[-17,7844]],[[250276,263013],[-235,-98]],[[250041,262915],[-702,-302]],[[249339,262613],[-25,4964],[-190,-4]],[[228097,261960],[-913,-2938]],[[227184,259022],[-236,2295],[-214,-718]],[[226734,260599],[-666,6431]],[[268862,265187],[-531,-2011]],[[268331,263176],[-444,-556]],[[267887,262620],[-507,1245]],[[267380,263865],[-78,979]],[[241929,265345],[-140,-2434]],[[241789,262911],[-714,10],[-2,-1631],[-985,-12]],[[240088,261278],[64,2739],[215,1718],[-183,3716]],[[240088,261278],[187,-1588],[292,-495],[230,-1479]],[[240797,257716],[-541,-2780],[-190,-403]],[[240066,254533],[-710,332]],[[239356,254865],[-1,3236],[-281,-4],[-5,3280],[-287,5],[3,2434]],[[262113,266543],[-202,-2490],[-1,-1443]],[[261910,262610],[38,-331]],[[261948,262279],[-247,-1122],[-557,78],[-1,-1623]],[[261143,259612],[-925,-26]],[[260218,259586],[89,792]],[[260307,260378],[163,4090]],[[234617,263822],[-104,-1184],[69,-2704],[234,-2044]],[[234816,257890],[-383,-1877]],[[234433,256013],[-270,786],[-111,1767],[-372,551]],[[233680,259117],[-7,1203],[-351,1944],[-118,1559],[44,4447]],[[267380,263865],[-842,-11]],[[266538,263854],[-369,126]],[[266169,263980],[7,3235]],[[273082,261033],[-133,-2581],[-38,2028],[171,553]],[[272467,260258],[-390,845]],[[272077,261103],[-418,1230],[-343,2022],[41,1842],[-207,776]],[[272556,263152],[364,-1898],[-453,-996]],[[218222,268309],[-10,-7269]],[[218212,261040],[-112,-2492],[-1121,-109]],[[216979,258439],[2,1757]],[[216981,260196],[7,8123]],[[216981,260196],[-1417,10]],[[215564,260206],[-1,8109]],[[215564,260206],[-1425,-1]],[[214139,260205],[1,8112]],[[214139,260205],[-87,1]],[[214052,260206],[-1250,7]],[[212802,260213],[-89,1]],[[212713,260214],[0,8080]],[[212713,260214],[-1472,-6]],[[211241,260208],[2,6496]],[[219856,268230],[-1,-7250]],[[219855,260980],[-1643,60]],[[233680,259117],[-1054,-950],[-246,-706]],[[232380,257461],[15,2779],[-147,-648]],[[232248,259592],[-249,2566],[-298,601],[38,1653],[-230,2395]],[[222752,268172],[-19,-11396]],[[222733,256776],[-311,-1069],[-354,1218],[-198,-944],[-249,1262]],[[221621,257243],[-334,1575]],[[221287,258818],[20,9406]],[[221287,258818],[-1085,65]],[[220202,258883],[-345,20],[-2,2077]],[[224221,261121],[-256,-235],[-55,-1438],[-590,-2354]],[[223320,257094],[-275,-434]],[[223045,256660],[-312,116]],[[260218,259586],[-114,-1]],[[260104,259585],[-994,-4]],[[259110,259581],[-7,3224],[-142,-9],[23,3277]],[[259110,259581],[-135,-3310]],[[258975,256271],[-230,291],[-9,1358],[-330,-1425],[-5,1399],[-275,-34]],[[258126,257860],[-1,2419],[142,6],[1,5754]],[[247731,267623],[274,-3564],[25,-1966]],[[248030,262093],[-341,-656]],[[247689,261437],[-106,-329],[-1263,-24]],[[246320,261084],[1,1631]],[[249339,262613],[-284,-111]],[[249055,262502],[-612,-243]],[[248443,262259],[-413,-166]],[[266169,263980],[-1,-929],[-528,-12]],[[265640,263039],[-382,824]],[[265258,263863],[46,1152]],[[225328,255832],[-536,4982]],[[226734,260599],[-1152,-3887]],[[225582,256712],[-254,-880]],[[272077,261103],[-207,-2290],[-271,-705]],[[271599,258108],[-852,4666]],[[232248,259592],[-1251,-3816]],[[230997,255776],[-725,7127]],[[209299,266698],[-218,-16661]],[[209081,250037],[-2269,-8219]],[[206812,241818],[27,3208],[-31,21680]],[[206812,241818],[-175,-639]],[[206637,241179],[-655,3287],[-500,980],[-452,2433],[-137,1784],[-467,1522],[-266,2270],[-357,1834]],[[203803,255289],[-2,11451]],[[203803,255289],[-618,1714],[-454,4718],[-407,953]],[[211241,260208],[-789,7]],[[210452,260215],[-226,1786],[-294,419],[-120,2210],[-128,-359],[-262,2428]],[[210452,260215],[261,-433],[176,-3774],[534,31],[187,-1030],[512,-17]],[[212122,254992],[-1599,-11259]],[[210523,243733],[-1442,6304]],[[262562,265291],[-9,-2748],[-135,18]],[[262418,262561],[-508,49]],[[255334,263517],[-41,-2445],[-142,-14],[4,-2674],[-156,-742],[132,-1478],[-365,-604],[-167,-1944]],[[254599,253616],[-506,-1944]],[[254093,251672],[-63,1221],[229,2446],[-147,-275],[95,2173],[-484,2051],[-26,1810]],[[237565,263797],[234,-2648],[-111,-2155]],[[237688,258994],[-417,-314]],[[237271,258680],[-297,954],[-857,614]],[[236117,260248],[-149,3550]],[[244067,262083],[-416,-314],[-36,-1776],[-276,-171],[-2,-3574],[-156,-1569],[81,-1641]],[[243262,253038],[-258,531],[-178,-1296],[-48,1873]],[[242778,254146],[7,11198]],[[269459,266064],[0,-2383],[-247,7],[-4,-2375]],[[269208,261313],[-295,-711]],[[268913,260602],[-583,-22],[1,2596]],[[264147,264342],[212,-842],[-100,-3841]],[[264259,259659],[-425,-12]],[[263834,259647],[-269,0]],[[263565,259647],[-156,2805],[9,2759]],[[270526,263478],[-236,-1000],[1,-5622]],[[270291,256856],[-262,1105]],[[270029,257961],[-821,3352]],[[258126,257860],[-564,-27]],[[257562,257833],[-384,26],[-188,2000],[3,2240]],[[256993,262099],[-3,1445]],[[263565,259647],[-754,-30]],[[262811,259617],[-348,-20],[-45,2964]],[[242778,254146],[-219,178]],[[242559,254324],[-305,2653]],[[242254,256977],[-195,277],[-241,2436],[-29,3221]],[[265258,263863],[-181,-811],[-39,-2867]],[[265038,260185],[-69,-496],[-710,-30]],[[252692,256194],[-1093,-41]],[[251599,256153],[-284,-4]],[[251315,256149],[0,7282]],[[252651,261072],[41,-4878]],[[246320,261084],[-2,-1627]],[[246318,259457],[-1160,-19]],[[245158,259438],[-408,1159],[-49,1441]],[[227703,254041],[-519,4981]],[[229059,261277],[364,-3474]],[[229423,257803],[-1328,-4514]],[[228095,253289],[-182,-662],[-210,1414]],[[266538,263854],[73,-1664]],[[266611,262190],[-131,-3053]],[[266480,259137],[-414,-482]],[[266066,258655],[-411,1022],[-15,3362]],[[267887,262620],[-7,-2008]],[[267880,260612],[-912,138],[0,1415],[-357,25]],[[266066,258655],[-13,-4419]],[[266053,254236],[-962,79]],[[265091,254315],[4,2025]],[[265095,256340],[-57,3845]],[[236117,260248],[245,-1198],[-44,-6786]],[[236318,252264],[-314,1644],[-175,1815],[-632,880],[-381,1287]],[[239356,254865],[-430,-6],[-146,-1627],[-240,7],[-65,-1705]],[[238475,251534],[-133,-174]],[[238342,251360],[-234,2339],[-88,3954],[-332,1341]],[[271599,258108],[109,-1595]],[[271708,256513],[-299,-2289]],[[271409,254224],[-861,806]],[[270548,255030],[-29,1447],[-228,379]],[[256993,262099],[-405,-645],[-234,-1413],[-90,-2314],[-724,-4800]],[[255540,252927],[-525,-296]],[[255015,252631],[-416,985]],[[251315,256149],[-565,11]],[[250750,256160],[-705,0]],[[250045,256160],[-4,6755]],[[229993,252193],[-570,5610]],[[230997,255776],[-230,-1047]],[[230767,254729],[-774,-2536]],[[268913,260602],[84,-3783]],[[268997,256819],[-88,-1964]],[[268909,254855],[-525,10],[-61,691],[-839,350]],[[267484,255906],[-15,966]],[[267469,256872],[411,3740]],[[242254,256977],[-1212,-1625],[-245,2364]],[[250045,256160],[-145,0]],[[249900,256160],[-376,-7]],[[249524,256153],[-46,1959],[-425,1320],[2,3070]],[[262811,259617],[-6,-2207]],[[262805,257410],[-584,-281],[-45,579]],[[262176,257708],[-228,4571]],[[262176,257708],[-117,-3882]],[[262059,253826],[-920,118]],[[261139,253944],[4,5668]],[[249524,256153],[-188,2]],[[249336,256155],[-474,-1],[2,-814],[-378,9]],[[248486,255349],[-43,6910]],[[267469,256872],[-538,69]],[[266931,256941],[-451,2196]],[[244529,261751],[-62,-2123],[-258,460],[229,-1495],[-276,-599],[18,-3120],[-205,750],[174,-2365],[-387,-521],[182,-1100]],[[243944,251638],[-102,-1383],[173,-931],[-202,-1256]],[[243813,248068],[-73,-540]],[[243740,247528],[12,447]],[[243752,247975],[-182,929]],[[243570,248904],[129,2677],[-437,1457]],[[248486,255349],[-225,-1013]],[[248261,254336],[-569,265]],[[247692,254601],[-3,6836]],[[257562,257833],[96,-2876],[-100,-437],[8,-2858]],[[257566,251662],[-179,1283],[-1847,-18]],[[245158,259438],[-12,-4904]],[[245146,254534],[-217,450],[-649,-954],[-49,-1688],[-287,-704]],[[191369,254272],[-1713,-9],[-813,1749]],[[225328,255832],[-812,-3459]],[[224516,252373],[-177,743],[-194,2530],[-443,141],[-382,1307]],[[247692,254601],[-45,0]],[[247647,254601],[-802,-13]],[[246845,254588],[-237,-7]],[[246608,254581],[0,4882],[-290,-6]],[[270029,257961],[-328,-1873],[-203,-243]],[[269498,255845],[-501,974]],[[226342,249372],[-760,7340]],[[227703,254041],[-1361,-4669]],[[220202,258883],[-12,-9165]],[[220190,249718],[-1597,-27]],[[218593,249691],[-12,8144],[-1602,88]],[[216979,257923],[0,516]],[[254093,251672],[-73,-563]],[[254020,251109],[-140,-343],[-854,-8],[-285,-550]],[[252741,250208],[-49,5986]],[[272895,258076],[-221,-2947],[-140,1836],[361,1111]],[[272467,260258],[359,-497],[69,-955],[-372,-536],[-14,-3438],[142,-738],[-530,300]],[[272121,254394],[-413,2119]],[[232380,257461],[233,-3410],[-192,-919],[-109,-3298]],[[232312,249834],[-587,-40],[-741,-2203]],[[230984,247591],[-246,5282],[29,1856]],[[215564,260206],[-1,-10641]],[[215563,249565],[-1463,119]],[[214100,249684],[-48,10522]],[[214100,249684],[-246,18]],[[213854,249702],[-112,1974],[-687,2489],[-255,-616]],[[212800,253549],[2,6664]],[[237271,258680],[3,-1922],[-169,-1045],[14,-5133]],[[237119,250580],[-252,-652]],[[236867,249928],[-549,2336]],[[216979,257923],[-20,-8366]],[[216959,249557],[-1396,8]],[[212800,253549],[-158,-489],[-520,1932]],[[265095,256340],[-399,-67]],[[264696,256273],[-805,-61]],[[263891,256212],[-57,3435]],[[263891,256212],[-578,-54]],[[263313,256158],[-423,46],[-85,1206]],[[261139,253944],[-190,-1282],[-485,462],[-142,-1410]],[[260322,251714],[-224,22]],[[260098,251736],[6,7849]],[[260098,251736],[-1121,-78]],[[258977,251658],[-2,4613]],[[246608,254581],[-1058,-7],[-230,-519]],[[245320,254055],[-174,479]],[[238342,251360],[-866,-337]],[[237476,251023],[-357,-443]],[[266931,256941],[-267,-2338]],[[266664,254603],[-217,-428]],[[266447,254175],[-394,61]],[[234433,256013],[126,-728]],[[234559,255285],[-1328,-6123]],[[233231,249162],[-512,-2377]],[[232719,246785],[-160,1025],[33,1830],[-280,194]],[[221621,257243],[-4,-7538]],[[221617,249705],[-1427,13]],[[270548,255030],[135,-1217],[-559,-1966],[-260,400]],[[269864,252247],[-282,1360],[-84,2238]],[[258977,251658],[18,-3690]],[[258995,247968],[-561,3]],[[258434,247971],[-835,7]],[[257599,247978],[-33,3684]],[[218593,249691],[-762,-75]],[[217831,249616],[-872,-59]],[[236867,249928],[-914,-1225]],[[235953,248703],[-290,477]],[[235663,249180],[-783,1632]],[[234880,250812],[-186,3541],[-135,932]],[[263313,256158],[-12,-3257]],[[263301,252901],[-768,-60],[-14,-3409]],[[262519,249432],[-296,57]],[[262223,249489],[-201,1664],[37,2673]],[[229345,250051],[-671,-2227]],[[228674,247824],[-579,5465]],[[229993,252193],[-648,-2142]],[[242559,254324],[-409,-313],[69,-6634],[-201,53]],[[242018,247430],[-298,679],[-278,-1715],[-307,-248]],[[241135,246146],[-630,-114]],[[240505,246032],[-17,6745],[-422,1756]],[[223045,256660],[-5,-9678]],[[223040,246982],[-1093,-7]],[[221947,246975],[-331,2],[1,2728]],[[224516,252373],[110,-2638],[233,-1105]],[[224859,248630],[-17,-2012]],[[224842,246618],[-1446,-2]],[[223396,246616],[-356,366]],[[267484,255906],[289,-2603],[-29,-1804]],[[267744,251499],[-329,-678],[-91,-2266]],[[267324,248555],[-270,35]],[[267054,248590],[-114,4038],[-276,1975]],[[269864,252247],[216,-986],[1,-1604],[213,-1377]],[[270294,248280],[-791,53],[-15,-4066],[756,-202],[-181,-4018]],[[270063,240047],[-569,247]],[[269494,240294],[-47,4435],[-166,-9],[13,2675],[-283,1029],[-221,3072]],[[268790,251496],[-78,1758],[187,-78]],[[268899,253176],[10,1679]],[[226342,249372],[-12,-642]],[[226330,248730],[-1471,-100]],[[272518,253791],[20,18]],[[272538,253809],[99,-1699],[-281,-1544],[-109,1279],[124,2060],[147,-114]],[[272121,254394],[4,-51]],[[272125,254343],[81,-132]],[[272206,254211],[155,-845],[-204,-1996],[71,-2600],[-325,802]],[[271903,249572],[-591,1666]],[[271312,251238],[97,2986]],[[264696,256273],[-167,-1561],[-391,-949],[-69,-1201],[-328,-1573],[-68,-1447]],[[263673,249542],[-96,10]],[[263577,249552],[15,3293],[-291,56]],[[265091,254315],[-12,-4796]],[[265079,249519],[-315,12]],[[264764,249531],[-724,18]],[[264040,249549],[-367,-7]],[[252741,250208],[18,-2159]],[[252759,248049],[-1139,-6]],[[251620,248043],[-21,8110]],[[250750,256160],[24,-9758]],[[250774,246402],[-565,1]],[[250209,246403],[-23,1870]],[[250186,248273],[3,6261],[-287,-6],[-2,1632]],[[250186,248273],[-850,-146]],[[249336,248127],[0,8028]],[[251620,248043],[-141,-1624]],[[251479,246419],[-705,-17]],[[249336,248127],[-206,-4]],[[249130,248123],[-300,-5]],[[248830,248118],[0,1358],[-237,-6],[-309,1882],[-23,2984]],[[268790,251496],[-833,9]],[[267957,251505],[-213,-6]],[[234880,250812],[-269,-1952],[-727,-4046]],[[233884,244814],[-145,1529],[-209,-878]],[[233530,245465],[-193,-35],[-106,3732]],[[213854,249702],[556,-1560],[549,-266],[329,-1468],[180,-3869],[116,-913]],[[215584,241626],[-1029,50],[-1,-1090],[-571,24],[0,-5857],[-623,-16],[0,-4293]],[[213360,230444],[-2433,11417]],[[210927,241861],[-404,1872]],[[271312,251238],[-472,-2258]],[[270840,248980],[-349,503],[-197,-1203]],[[245320,254055],[101,-733],[-2,-5263]],[[245419,248059],[-325,3]],[[245094,248062],[-1281,6]],[[240505,246032],[-431,-220]],[[240074,245812],[-1234,93],[-382,-268]],[[238458,245637],[138,2982],[-121,2915]],[[230984,247591],[-297,-1133],[-306,-3132],[-307,-919]],[[230074,242407],[-150,660]],[[229924,243067],[-83,1790],[-230,1424],[-92,2592],[-174,1178]],[[267054,248590],[-504,85]],[[266550,248675],[-89,305]],[[266461,248980],[-188,553]],[[266273,249533],[181,2384],[-7,2258]],[[246845,254588],[1,-6514]],[[246846,248074],[-55,0]],[[246791,248074],[-720,-7]],[[246071,248067],[-652,-8]],[[247647,254601],[2,-6508]],[[247649,248093],[-244,-6]],[[247405,248087],[-559,-13]],[[248830,248118],[-1181,-25]],[[243570,248904],[-75,-474]],[[243495,248430],[-154,-909],[-26,-2268]],[[243315,245253],[-1107,8]],[[242208,245261],[-190,2169]],[[266273,249533],[3,-822],[-452,71]],[[265824,248782],[-746,72],[1,665]],[[228674,247824],[-526,-1799],[-157,-2556]],[[227991,243469],[-863,2199],[-567,665]],[[226561,246333],[-231,2397]],[[255015,252631],[47,-4598]],[[255062,248033],[-100,-2449],[292,-2293],[343,-1258],[-72,-3553]],[[255525,238480],[118,-709],[-472,-3244],[-776,-834],[-363,138],[617,1003],[-445,2269],[13,2457],[-99,3216],[-227,556]],[[253891,243332],[-3,424]],[[253888,243756],[51,358]],[[253939,244114],[171,4892],[-90,2103]],[[262223,249489],[73,-1396]],[[262296,248093],[-1355,-67]],[[260941,248026],[8,3775],[-627,-87]],[[257599,247978],[-271,46]],[[257328,248024],[-1052,37]],[[256276,248061],[-1214,-28]],[[263577,249552],[-524,-184]],[[263053,249368],[-534,64]],[[260941,248026],[-26,-3]],[[260915,248023],[-1496,-68]],[[259419,247955],[-424,13]],[[238458,245637],[-203,-3553],[-301,-2557],[116,-1801],[-122,-774]],[[237948,236952],[-67,-1097],[156,-1846]],[[238037,234009],[-534,-28]],[[237503,233981],[98,13117],[-125,3925]],[[269494,240294],[-114,45]],[[269380,240339],[-346,137]],[[269034,240476],[-18,2136],[-493,492],[-222,1908],[-346,636]],[[267955,245648],[2,5857]],[[267955,245648],[-134,-370]],[[267821,245278],[-66,1821],[-380,52],[-51,1404]],[[253939,244114],[-283,-5327],[-10,-2293],[-805,174]],[[252841,236668],[-47,6490]],[[252794,243158],[-35,4891]],[[272307,246842],[-203,-3711],[-81,2742],[284,969]],[[271903,249572],[306,-2478],[-160,-4072],[-292,-203]],[[271757,242819],[-831,2065]],[[270926,244884],[0,3895],[-86,201]],[[237503,233981],[-603,-19]],[[236900,233962],[96,1937],[-93,1644],[125,1714]],[[237028,239257],[57,2122],[-200,796],[-362,6258],[-570,270]],[[235663,249180],[-268,-877],[313,-9029]],[[235708,239274],[21,-670],[-542,-17]],[[235187,238587],[-329,77]],[[234858,238664],[56,882],[-384,658],[-240,1922],[-168,-357],[-46,2247],[-192,798]],[[229924,243067],[-953,-3232]],[[228971,239835],[-534,-1857]],[[228437,237978],[-325,5186],[-121,305]],[[209922,237143],[-279,-6],[-3006,4042]],[[210927,241861],[-1005,-4718]],[[232719,246785],[-682,-1234]],[[232037,245551],[-850,-766]],[[231187,244785],[-203,2806]],[[221947,246975],[2,-4279]],[[221949,242696],[-1761,-8]],[[220188,242688],[2,7030]],[[220188,242688],[-2353,-81]],[[217835,242607],[-4,7009]],[[217835,242607],[0,-7787]],[[217835,234820],[-2223,6]],[[215612,234826],[279,1284],[-229,1216],[263,2565],[-18,1122],[-323,613]],[[264040,249549],[-12,-7241]],[[264028,242308],[-1345,403]],[[262683,242711],[300,3247],[70,3410]],[[264764,249531],[114,-3092],[-22,-4394]],[[264856,242045],[-554,176]],[[264302,242221],[-274,87]],[[266550,248675],[98,-2368],[249,-1172],[-274,-444],[-99,-1222],[356,-2141]],[[266880,241328],[-709,260]],[[266171,241588],[-368,134]],[[265803,241722],[21,7060]],[[265803,241722],[-735,254]],[[265068,241976],[-212,69]],[[262683,242711],[-3,0]],[[262680,242711],[-384,5382]],[[270926,244884],[-366,-1369],[-37,-1852],[123,-1709],[-124,-3745]],[[270522,236209],[-335,-64],[-107,1022],[-17,2880]],[[237028,239257],[-1320,17]],[[233530,245465],[-89,-6610]],[[233441,238855],[-666,84],[-646,2258]],[[232129,241197],[-92,4354]],[[244740,241601],[-76,124]],[[244664,241725],[-138,1864],[-596,-160],[213,1883],[-298,-206],[-105,2422]],[[245094,248062],[-354,-6461]],[[226561,246333],[-375,-2252],[-241,-2998]],[[225945,241083],[-212,-3685]],[[225733,237398],[-624,1108]],[[225109,238506],[-245,3503],[173,1353],[-5,1659],[-190,1597]],[[267821,245278],[-326,-1352],[-1,-2846]],[[267494,241080],[-481,193]],[[267013,241273],[-88,37]],[[266925,241310],[-45,18]],[[244664,241725],[-233,-2739],[-196,-268]],[[244235,238718],[-602,5]],[[243633,238723],[-154,6]],[[243479,238729],[63,3797],[-227,2727]],[[243752,247975],[-257,455]],[[250209,246403],[-2,-4881]],[[250207,241522],[-565,12],[0,-2449],[-406,-1071]],[[249236,238014],[-349,2359],[-75,1498]],[[248812,241871],[318,6252]],[[248812,241871],[-426,-22],[-726,870]],[[247660,242719],[-255,5368]],[[242208,245261],[112,-1501],[-109,-3720],[-662,-628],[-123,-1003]],[[241426,238409],[-387,12]],[[241039,238421],[5,125]],[[241044,238546],[92,1719],[-1,5881]],[[262680,242711],[-189,-1959]],[[262491,240752],[-656,31],[-11,-813],[-591,47]],[[261233,240017],[-143,13]],[[261090,240030],[8,4056],[-466,837]],[[260632,244923],[283,3100]],[[247660,242719],[34,-9078]],[[247694,233641],[-96,120]],[[247598,233761],[-55,1170],[-290,-153]],[[247253,234778],[-284,1435],[-176,2313],[-2,3039]],[[246791,241565],[0,6509]],[[256232,239600],[16,-2077],[-262,-1642],[-543,-650],[107,1725],[233,527],[-258,997]],[[256276,248061],[-334,-1385],[-81,-3536],[371,-3540]],[[257328,248024],[-39,-10998]],[[257289,237026],[-1052,-1037],[665,1910],[-225,961],[-136,-1053],[-250,2451],[-59,-658]],[[252794,243158],[-1314,0]],[[251480,243158],[-1,3261]],[[246791,241565],[-956,-12]],[[245835,241553],[167,1301]],[[246002,242854],[-21,4096],[90,1117]],[[258434,247971],[-17,-10056]],[[258417,237915],[-166,1067],[-410,-2043],[-552,87]],[[246002,242854],[-1125,-260],[-121,-1038]],[[244756,241556],[-16,45]],[[260632,244923],[-55,-1607],[-562,869],[-66,-1633]],[[259949,242552],[-537,37],[7,5366]],[[259949,242552],[-196,-1239],[99,-2459],[-315,-2140]],[[259537,236714],[-9,-2240]],[[259528,234474],[-1118,2046]],[[258410,236875],[0,-355]],[[258410,236875],[816,-133],[-426,1780],[-383,-607]],[[231187,244785],[-45,-4378],[221,-3089],[-139,-1697]],[[231224,235621],[12,737],[-414,180]],[[230822,236538],[-165,3013],[-358,1438],[-320,391],[95,1027]],[[223396,246616],[1,-7873]],[[223397,238743],[-946,26]],[[222451,238769],[-503,-4],[1,3931]],[[225109,238506],[-674,264]],[[224435,238770],[-1038,-27]],[[251480,243158],[0,-1087]],[[251480,242071],[-990,-2],[-283,-547]],[[228437,237978],[-499,-1008]],[[227938,236970],[-97,304]],[[227841,237274],[-634,1522],[-437,-1264],[-263,726],[-303,2900],[-259,-75]],[[234858,238664],[-878,-2778]],[[233980,235886],[-396,1124],[-143,1845]],[[241044,238546],[-396,8],[-9,-943],[-990,-262]],[[239649,237349],[2,3245],[421,9],[2,5209]],[[239649,237349],[0,-382]],[[239649,236967],[-709,-8],[2,1629],[-283,7],[1,-1639],[-712,-4]],[[269034,240476],[-293,113]],[[268741,240589],[-1247,491]],[[232129,241197],[72,-7162]],[[232201,234035],[-806,-384]],[[231395,233651],[-171,1970]],[[243479,238729],[216,-1917],[-535,411],[-328,-897]],[[242832,236326],[-172,207],[-257,-1508]],[[242403,235025],[-94,2569],[-194,809],[-689,6]],[[261090,240030],[-142,0],[-5,-2437],[-1018,73],[-388,-952]],[[271757,242819],[498,-308],[-34,-3432],[-155,926],[-295,-107]],[[271771,239898],[-322,203],[-925,-5548]],[[270524,234553],[-2,1656]],[[252841,236668],[-233,-1277],[-178,1270],[-575,-702],[-371,1453]],[[251484,237412],[-4,4659]],[[230822,236538],[-952,-1549]],[[229870,234989],[-278,409],[-621,4437]],[[245835,241553],[-210,-1460],[-15,-2062],[278,-2140]],[[245888,235891],[-360,-439]],[[245528,235452],[-338,30]],[[245190,235482],[-277,639],[124,2784],[-183,-36],[-98,2687]],[[249236,238014],[203,-4319],[261,-907]],[[249700,232788],[-283,-440]],[[249417,232348],[-471,-68],[-254,869],[-304,-894],[-309,779]],[[248079,233034],[-385,607]],[[264302,242221],[-267,-2074],[-54,-1701],[-693,-1753]],[[263288,236693],[-375,1330],[-2,1097],[-281,268],[-139,1364]],[[222451,238769],[6,-3970]],[[222457,234799],[-1261,76]],[[221196,234875],[-1009,-7]],[[220187,234868],[1,7820]],[[220187,234868],[-1627,-38]],[[218560,234830],[-725,-10]],[[265068,241976],[85,-2796],[-178,-1],[-97,-4622]],[[264878,234557],[-479,557],[-1297,-63]],[[263102,235051],[186,1642]],[[251484,237412],[-1134,-2305],[-141,1298]],[[250209,236405],[-2,5117]],[[266171,241588],[21,-1291],[-370,-1383],[42,-1369],[-274,-2432]],[[265590,235113],[-266,-1104],[-213,-2775]],[[265111,231234],[-234,66]],[[264877,231300],[1,3257]],[[209944,215738],[-22,21405]],[[213360,230444],[686,-3232]],[[214046,227212],[-190,-2194],[-356,428],[-422,-724],[-393,-4187],[-190,-3082],[-26,-2697],[-288,-495],[-452,-3923],[-784,1354],[-338,2103],[-458,443],[-205,1500]],[[245190,235482],[-472,-15],[-483,3251]],[[215612,234826],[-8,-9436]],[[215604,225390],[-988,210],[-570,1612]],[[247253,234778],[-437,-1709],[-207,516]],[[246609,233585],[-184,-841],[-537,3147]],[[266925,241310],[88,-37]],[[267013,241273],[105,-135],[78,-2865],[203,-1637]],[[267399,236636],[-213,-2319]],[[267186,234317],[-334,-5]],[[266852,234312],[-283,815],[-979,-14]],[[250209,236405],[34,-1301],[-543,-2316]],[[268741,240589],[-104,-715],[226,-2817],[-101,-1193],[-315,-130]],[[268447,235734],[-586,1764],[-462,-862]],[[209944,215738],[-499,619],[-308,933],[-500,3117],[-209,111],[-481,2314],[-467,5014],[-27,4955],[-481,3934],[-35,2230],[-300,2214]],[[233980,235886],[192,-3310]],[[234172,232576],[-466,-2513],[-754,2533],[-380,-1253],[-369,-201]],[[232203,231142],[-2,2893]],[[227841,237274],[-344,-3901],[-437,-2646]],[[227060,230727],[-169,-807]],[[226891,229920],[-1289,6177]],[[225602,236097],[131,1301]],[[262491,240752],[-511,-7567]],[[261980,233185],[-763,18]],[[261217,233203],[16,6814]],[[263102,235051],[119,-3211],[349,-2174]],[[263570,229666],[-1288,55],[-50,-791]],[[262232,228930],[-308,1351],[56,2904]],[[269380,240339],[4,-8335]],[[269384,232004],[-309,-3002],[110,-640]],[[269185,228362],[-359,-2062]],[[268826,226300],[-394,1903]],[[268432,228203],[15,7531]],[[272248,234159],[-9,-2722],[-434,368]],[[271805,231805],[-186,100],[91,1895],[-113,885],[151,2029],[471,-634],[29,-1921]],[[272388,234172],[-135,-12]],[[272253,234160],[-2,2672],[137,-2660]],[[271771,239898],[387,-696],[23,-1979],[-488,-401],[1,-1430],[-265,-958],[92,-1411]],[[271521,233023],[-998,-79]],[[270523,232944],[1,1609]],[[270523,232944],[0,-816]],[[270523,232128],[-259,0]],[[270264,232128],[-880,-124]],[[261213,230026],[6,-1939]],[[261219,228087],[-831,3621],[181,87],[319,-1692],[325,-77]],[[261217,233203],[-4,-3055]],[[261213,230148],[-256,-46],[-113,1656],[-199,-122],[-386,1289],[-6,-1143],[-725,2692]],[[229870,234989],[-428,-2537]],[[229442,232452],[-640,-2032]],[[228802,230420],[-160,3872],[-704,2678]],[[236900,233962],[5,-1513]],[[236905,232449],[-445,185],[-184,-1246],[-288,178]],[[235988,231566],[-422,-16],[-379,7037]],[[224435,238770],[11,-6721]],[[224446,232049],[-926,-12]],[[223520,232037],[-1061,-73],[-2,2835]],[[225602,236097],[-347,-5926]],[[225255,230171],[-325,-1870]],[[224930,228301],[-484,3748]],[[245308,223867],[-799,1569],[36,944],[-274,2264]],[[244271,228644],[603,287]],[[244874,228931],[203,-2331],[251,-832],[-20,-1901]],[[244558,230559],[-645,-479],[-351,1662],[-258,-1459],[-367,543]],[[242937,230826],[126,1509],[-231,3991]],[[243633,238723],[169,-1018],[54,-2471],[406,-1498],[38,-2365],[258,-812]],[[245528,235452],[-238,-4825]],[[245290,230627],[-329,-692]],[[244961,229935],[-403,624]],[[235988,231566],[8,-4159]],[[235996,227407],[-1499,-100]],[[234497,227307],[-325,5269]],[[239649,236967],[279,-442],[95,-4141],[287,-11],[14,-1373],[-301,-819]],[[240023,230181],[-367,261],[-1652,-20]],[[238004,230422],[33,3587]],[[241039,238421],[19,-2543]],[[241058,235878],[90,-2556],[-90,-2140]],[[241058,231182],[-312,-1023]],[[240746,230159],[-723,22]],[[242403,235025],[-396,-2817]],[[242007,232208],[-408,-1799],[-460,906]],[[241139,231315],[-81,-133]],[[268432,228203],[-222,-845]],[[268210,227358],[-526,3596],[-439,645],[-59,2718]],[[228802,230420],[-812,-4930]],[[227990,225490],[-930,5237]],[[231395,233651],[-275,-1643],[131,-1238]],[[231251,230770],[-412,483],[-916,-965]],[[229923,230288],[-71,1866],[-410,298]],[[242937,230826],[-38,-676]],[[242899,230150],[-457,1473],[-435,585]],[[226432,226825],[-346,-1970]],[[226086,224855],[-87,1789],[-744,3527]],[[226891,229920],[-513,-2622],[54,-473]],[[246609,233585],[-25,-1023]],[[246584,232562],[-762,-996],[-135,-865]],[[245687,230701],[0,-1]],[[245687,230700],[-397,-73]],[[266852,234312],[-10,-6935],[145,-1217]],[[266987,226160],[-200,-2815]],[[266787,223345],[-399,937],[-283,2980],[-405,1944],[-589,2028]],[[264877,231300],[-794,-653],[8,-1736],[-255,56]],[[263836,228967],[-266,699]],[[247598,233761],[-477,-3687],[-248,-294],[-10,-2337]],[[246863,227443],[-276,26]],[[246587,227469],[-43,-63]],[[246544,227406],[-91,2727],[131,2429]],[[218560,234830],[1,-12369]],[[218561,222461],[3,-3801],[-131,-3064],[-135,-246]],[[218298,215350],[-586,2295],[-155,1738],[-559,1471],[-109,1938],[-428,2706],[-230,-539],[-627,431]],[[221196,234875],[-9,-4032]],[[221187,230843],[-585,153],[-126,-5325],[-5,-3218]],[[220471,222453],[-272,-3]],[[220199,222450],[-1638,11]],[[223520,232037],[7,-6643]],[[223527,225394],[-721,2115],[-1183,235]],[[221623,227744],[-251,17],[4,3079],[-189,3]],[[268210,227358],[-114,-1168]],[[268096,226190],[-1109,-30]],[[272837,223331],[-14,0]],[[272823,223331],[-64,-213]],[[272759,223118],[-215,-625],[-556,-55]],[[271988,222438],[-4,2546]],[[271984,224984],[-177,2427],[99,1442],[-322,1679],[221,1273]],[[272248,234159],[350,-6434],[-19,-1080],[258,-3314]],[[272388,234172],[216,-5656],[-351,5644]],[[238004,230422],[-370,-3472]],[[237634,226950],[-15,2086],[-480,949],[-234,2464]],[[232203,231142],[-438,1363],[375,-6983]],[[232140,225522],[-575,-1123]],[[231565,224399],[-196,1520],[-118,4851]],[[247737,223729],[-329,25],[-92,1327],[-453,2362]],[[247598,233761],[-7,-4805],[112,-2059],[203,-841],[-169,-2327]],[[248079,233034],[-93,-5082],[222,493],[142,-926]],[[248350,227519],[-169,-1243],[4,-1675],[243,-2463],[7,-2735]],[[248435,219403],[-412,1679],[32,1884],[-166,601]],[[247889,223567],[-152,162]],[[262232,228930],[-64,-3572]],[[262168,225358],[-1,-31]],[[262167,225327],[-472,-1559]],[[261695,223768],[-260,-97],[30,2044],[-246,2372]],[[261213,230026],[0,122]],[[249417,232348],[-288,-1736],[-365,-1099]],[[248764,229513],[-363,-244],[-62,-812],[282,-1440]],[[248621,227017],[-271,502]],[[271521,233023],[-209,-1367],[211,19],[-61,-1459],[280,-1434],[17,-2305]],[[271759,226477],[-575,-58],[-356,-1658],[-304,-535]],[[270524,224226],[-1,7902]],[[237634,226950],[-209,-1155],[251,-2061]],[[237676,223734],[-488,-232],[-948,-2204]],[[236240,221298],[-9,6070],[-235,39]],[[234497,227307],[188,-998],[-40,-2779]],[[234645,223530],[-249,562],[-163,2138],[-77,-1073],[335,-1692],[-100,-2415]],[[234391,221050],[-400,-946],[-152,1094]],[[233839,221198],[-128,697],[-451,-247]],[[233260,221648],[-1120,3874]],[[249637,222999],[-31,137]],[[249606,223136],[-17,-11]],[[249589,223125],[-854,2530],[-114,1362]],[[248764,229513],[178,-1314],[189,484],[62,-1577],[278,-41],[74,2259],[374,1265],[70,-3363],[267,-194],[-426,-2469],[-490,256],[297,-1820]],[[250525,230647],[-312,-71],[261,1146],[51,-1075]],[[246544,227406],[-360,597],[-279,-302]],[[245905,227701],[-208,1350],[-10,1649]],[[229923,230288],[145,-1541]],[[230068,228747],[-848,-6121]],[[229220,222626],[-749,-87]],[[228471,222539],[-487,2914]],[[227984,225453],[6,37]],[[242899,230150],[-21,-3785]],[[242878,226365],[-34,-727],[-510,-1743],[182,-15],[-22,-1563],[-530,-1558],[-885,886]],[[241079,221645],[5,8529],[-338,-15]],[[270524,224226],[-18,-8]],[[270506,224218],[-216,2191],[-389,132],[-406,1491]],[[269495,228032],[311,619],[458,3477]],[[269495,228032],[-310,330]],[[224930,228301],[-647,-3579]],[[224283,224722],[-370,-472]],[[223913,224250],[-386,1144]],[[243094,222650],[507,-1497],[-373,-1379],[-504,1635],[370,1241]],[[244961,229935],[-87,-1004]],[[244271,228644],[-426,-208],[-645,-3854]],[[243200,224582],[80,1697],[-402,86]],[[231565,224399],[21,-2330],[-179,-21]],[[231407,222048],[-240,599]],[[231167,222647],[-226,617],[-208,2752],[-251,273],[-414,2458]],[[245905,227701],[-338,-3548]],[[245567,224153],[-211,-1645]],[[245356,222508],[-48,1359]],[[221623,227744],[-6,-5221]],[[221617,222523],[-1146,-70]],[[227984,225453],[-780,-2865],[-98,358]],[[227106,222946],[-308,892],[-366,2987]],[[241079,221645],[-915,2302],[-643,1244],[-860,-33],[-722,-625],[-263,-799]],[[226086,224855],[-251,-1276],[-617,-1664]],[[225218,221915],[-190,1265],[73,1338],[-818,204]],[[261984,223666],[48,-1027],[-349,843],[301,184]],[[262167,225327],[153,-1172],[-625,-387]],[[263836,228967],[267,-1312],[-501,151],[-1029,-3276],[-405,828]],[[231167,222647],[-368,-2222],[-115,-1978],[-812,-2987]],[[229872,215460],[-51,299]],[[229821,215759],[273,1332],[-648,4505],[-226,1030]],[[245356,222508],[-369,-726]],[[244987,221782],[-280,-1858],[-256,1228],[-396,-628],[-7,2090],[-206,-84],[-20,2140],[-622,-88]],[[270506,224218],[-1,-4598]],[[270505,219620],[-384,-936],[-50,1175],[-543,18]],[[269528,219877],[-418,-93],[-2,1070],[-275,505]],[[268833,221359],[-7,4941]],[[268833,221359],[-783,495]],[[268050,221854],[-36,3076],[82,1260]],[[248195,214699],[-70,-748]],[[248125,213951],[-368,-1498],[-381,4155],[-144,-1654]],[[247232,214954],[0,260]],[[247232,215214],[0,103]],[[247232,215317],[15,318]],[[247247,215635],[13,86]],[[247260,215721],[55,1625],[-668,4635],[-414,1833],[-105,1452],[-208,-1076],[-353,-37]],[[247889,223567],[32,-2068],[-180,-982],[125,-870],[386,-448],[38,-1287],[-225,-2000],[130,-1213]],[[222150,222529],[-533,-6]],[[223913,224250],[-73,-521]],[[223840,223729],[-340,-2416],[-157,1139],[-1193,77]],[[249173,217874],[111,-1305],[-400,134],[289,1171]],[[249589,223125],[-488,-958],[203,-1847],[362,-1192],[-111,-777],[530,-230],[375,-1687],[141,831],[307,-3039],[-50,-1667],[-254,-1182],[-172,579],[-447,-2429],[422,3793],[-138,1557],[-368,-603],[-134,2620],[-304,1182],[-628,94],[58,1184],[-307,734],[-151,-685]],[[236240,221298],[-45,-112]],[[236195,221186],[-276,35]],[[235919,221221],[-211,269],[-540,-841],[124,4279],[-302,699],[-198,-2304],[-147,207]],[[227106,222946],[-578,-5086]],[[226528,217860],[-680,53],[-139,1116]],[[225709,219029],[22,814],[-513,2072]],[[271988,222438],[9,-2348],[241,-1825]],[[272238,218265],[-390,-928]],[[271848,217337],[-291,1592],[-5,2834],[246,456],[-91,1669],[277,1096]],[[271759,226477],[138,-1242],[-266,-1802],[-119,-4400],[73,-1266]],[[271585,217767],[-204,-13],[-96,2166],[-186,606],[-594,-906]],[[233260,221648],[-107,-2624],[-243,-16],[-116,-2071]],[[232794,216937],[-175,-671],[-275,621],[-264,-1151]],[[232080,215736],[-404,3185],[-269,3127]],[[228471,222539],[-170,-901],[-100,-3633]],[[228201,218005],[-1040,-5116]],[[227161,212889],[-321,2085]],[[226840,214974],[-364,2442],[52,444]],[[244928,217715],[211,-933],[-107,-1820],[-305,1569],[201,1184]],[[247260,215721],[-525,940],[-7,-1505],[-198,-130],[-95,-1883],[-522,-151],[-171,914],[376,1325],[-332,809],[-84,1095],[-261,-2776],[-233,825],[15,1953],[-358,1998],[122,2647]],[[225709,219029],[-761,-6052]],[[224948,212977],[-1106,2536]],[[223842,215513],[-2,8216]],[[223842,215513],[-1,-2983]],[[223841,212530],[-1697,16]],[[222144,212546],[6,9983]],[[272759,223118],[386,-4323]],[[273145,218795],[-132,-298],[16,-2699],[-744,-89],[-47,2556]],[[232080,215736],[-73,-613]],[[232007,215123],[-254,-1543],[-960,-3417]],[[230793,210163],[-921,5297]],[[229821,215759],[-780,-3735]],[[229041,212024],[-105,759]],[[228936,212783],[-735,5222]],[[222144,212546],[-1943,-92]],[[220201,212454],[-2,9996]],[[220201,212454],[-1549,-37]],[[218652,212417],[-301,1679],[-53,1254]],[[235183,217123],[-168,-988],[-897,-3581],[738,3848],[327,721]],[[234284,214573],[-491,4941],[46,1684]],[[234391,221050],[301,-995],[33,-3555],[-122,190],[-319,-2117]],[[236195,221186],[-1085,-2978],[545,2519],[264,494]],[[234284,214573],[-259,-341],[-245,-3555],[-456,-2355],[-295,-718]],[[233029,207604],[-168,76],[-313,2527],[-238,31],[-6,1604],[-193,734],[-104,2547]],[[269528,219877],[10,-5017],[-370,-17],[1,-3161]],[[269169,211682],[-610,-875]],[[268559,210807],[-4,-26]],[[268555,210781],[11,1180],[-229,1769],[-631,423],[-130,2753]],[[267576,216906],[349,3015],[125,1933]],[[271585,217767],[74,-1765]],[[271659,216002],[-47,-5892],[-823,-7]],[[270789,210103],[-996,7]],[[269793,210110],[-470,1716],[-154,-144]],[[226840,214974],[-1288,-6318]],[[225552,208656],[-604,4321]],[[274038,206958],[-133,1]],[[273905,206959],[-39,-1]],[[273866,206958],[-329,-17],[-54,-3299]],[[273483,203642],[-296,3940]],[[273187,207582],[-245,-773],[-517,1780]],[[272425,208589],[33,1990],[-268,1417]],[[272190,211996],[-290,2402]],[[271900,214398],[73,2026],[-125,913]],[[273145,218795],[71,-1438],[822,-10399]],[[228017,208315],[-311,1140],[-437,-2085]],[[227269,207370],[-501,3617],[393,1902]],[[228936,212783],[-919,-4468]],[[272425,208589],[-133,-1746]],[[272292,206843],[-680,-113],[4,-8039]],[[271616,198691],[-837,-35]],[[270779,198656],[10,11447]],[[271659,216002],[241,-1604]],[[230793,210163],[-40,-5357]],[[230753,204806],[-186,-16]],[[230567,204790],[-105,611]],[[230462,205401],[-405,-37]],[[230057,205364],[-229,272]],[[229828,205636],[-9,-8]],[[229819,205628],[-2,32]],[[229817,205660],[-203,3106],[-295,2552],[-278,706]],[[225150,203636],[-1,663],[-1297,-17]],[[223852,204282],[-11,8248]],[[225552,208656],[258,-1776]],[[225810,206880],[-660,-3244]],[[230757,204203],[-4,603]],[[233029,207604],[-514,-1808],[-270,336],[-409,-941],[-73,-1321],[716,1768],[-1755,-5263],[983,3206],[18,865],[-525,-948],[-443,705]],[[226700,204666],[-382,955],[-249,-541]],[[226069,205080],[-259,1800]],[[227269,207370],[-569,-2704]],[[229817,205660],[1,-376]],[[229818,205284],[-753,-2126],[109,-1486]],[[229174,201672],[-69,-398],[-683,1260]],[[228422,202534],[5,4144],[-122,1448],[-288,189]],[[223852,204282],[-1657,-123]],[[222195,204159],[-37,-4]],[[222158,204155],[-14,8391]],[[222158,204155],[-1965,141]],[[220193,204296],[8,8158]],[[220193,204296],[2,-8383]],[[220195,195913],[-275,-20]],[[219920,195893],[-228,1634],[-299,5632],[-270,1346],[-137,3111],[-290,2181],[-44,2620]],[[269793,210110],[391,-3170],[-256,-2281]],[[269928,204659],[-433,506],[-598,-8]],[[268897,205157],[-149,697],[-6,3295],[-183,1658]],[[270779,198656],[-274,-620]],[[270505,198036],[2,3099]],[[270507,201135],[2,766],[-428,978],[-153,1780]],[[228422,202534],[-599,-3072]],[[227823,199462],[-496,1215],[-66,1282],[-333,364],[-228,2343]],[[273483,203642],[-949,-51],[-367,555],[125,2697]],[[273866,206958],[152,-4435],[384,-6703],[460,-6126],[-21,-545]],[[274841,189149],[-1029,-223]],[[273812,188926],[17,9772]],[[273829,198698],[-61,3007],[-285,1937]],[[274038,206958],[411,-2425],[-276,2427]],[[274173,206960],[19,0]],[[274192,206960],[437,-3794],[144,-2446],[-167,-836],[-12,3069],[-288,-3646],[-72,100],[-11,3804],[-174,606],[153,1506],[-297,1636]],[[226409,193288],[-981,21]],[[225428,193309],[-276,-3]],[[225152,193306],[-2,10330]],[[226069,205080],[-235,-508],[782,-8928],[-25,-123]],[[226591,195521],[-240,-1164],[58,-1069]],[[273829,198698],[-2213,-7]],[[229313,193901],[29,366]],[[229342,194267],[112,1478],[226,125],[508,2370],[340,470],[-1215,-4809]],[[229467,200562],[-293,1110]],[[229818,205284],[138,-1955],[593,-2862],[-702,-2230],[-380,2325]],[[230462,205401],[-19,-1857],[-353,715],[-33,1105]],[[227823,199462],[-461,-4167]],[[227362,195295],[-76,-648],[-695,874]],[[270507,201135],[-552,2],[0,-813],[-1166,-23]],[[268789,200301],[108,4856]],[[223852,204282],[-7,-10983]],[[223845,193299],[-1631,-503],[-15,3242]],[[222199,196038],[-4,8121]],[[225152,193306],[-1307,-7]],[[222199,196038],[-2004,-125]],[[229467,200562],[-206,-608],[191,-1783]],[[229452,198171],[-926,-864],[295,-1302]],[[228821,196005],[-626,-2606]],[[228195,193399],[-53,240]],[[228142,193639],[-158,1151],[-622,505]],[[270505,198036],[-139,-2611]],[[270366,195425],[-1519,30]],[[268847,195455],[-374,-12]],[[268473,195443],[316,4858]],[[271616,198691],[0,-1635],[277,2],[94,-2171],[192,-1069],[303,-11],[-262,-959],[585,-3549],[246,-3711]],[[273051,185588],[-1173,63]],[[271878,185651],[-1368,-4]],[[270510,185647],[-6,9777],[-138,1]],[[273812,188926],[-11,-3356]],[[273801,185570],[-750,18]],[[229222,193536],[-326,-2723],[39,1456],[287,1267]],[[228195,193399],[229,-262],[-76,-1380]],[[228348,191757],[-206,1882]],[[228490,190446],[-134,1235]],[[228356,191681],[444,2665],[-7,-1493],[-303,-2407]],[[229452,198171],[-21,-806]],[[229431,197365],[-30,-1032]],[[229401,196333],[-338,-1783],[-242,1455]],[[223845,193299],[14,-13095]],[[223859,180204],[1,-1601],[-436,24]],[[223424,178627],[-1056,73],[-103,854],[-232,-1005]],[[222033,178549],[-141,1379],[72,2611],[-322,2960],[-327,370],[-463,2627],[-155,3392],[-155,198],[-278,2896],[-344,911]],[[228348,191757],[8,-76]],[[228490,190446],[-3,-28]],[[228487,190418],[-16,-156]],[[228471,190262],[-133,-1330],[-231,1091],[-604,-774]],[[227503,189249],[-413,475],[-457,1288],[12,1137]],[[226645,192149],[-45,799]],[[226600,192948],[-191,340]],[[268847,195455],[7,-2885]],[[268854,192570],[-198,-1538],[342,-1335],[-115,-2957],[-287,863],[-300,2065],[148,2365],[29,3410]],[[270510,185647],[-1388,-19]],[[269122,185628],[467,3254],[-294,1838],[49,-1786],[-175,307],[19,1799],[-334,1530]],[[225428,193309],[7,-14809]],[[225435,178500],[-810,49]],[[224625,178549],[3,1455],[-769,200]],[[226645,192149],[-378,-2056],[-22,-4642]],[[226245,185451],[-328,-1],[5,-6978]],[[225922,178472],[-487,28]],[[228402,187096],[249,1941],[-343,-3973],[94,2032]],[[227963,184054],[-1438,-46],[-280,1443]],[[227503,189249],[288,8],[201,-2841],[170,164],[-199,-2526]],[[275241,183987],[-902,23]],[[274339,184010],[-271,4],[-3,1573],[-264,-17]],[[274841,189149],[341,-3281],[59,-1881]],[[273051,185588],[-176,-2846],[396,-2050],[334,-3158]],[[273605,177534],[-628,-17],[1,-1639],[-277,-12],[2,-1649],[-824,22]],[[271879,174239],[-2,5717]],[[271877,179956],[1,5695]],[[271877,179956],[-1371,-47]],[[270506,179909],[4,5738]],[[270506,179909],[-2,-2429]],[[270504,177480],[-549,22],[3,3302],[-874,53]],[[269084,180857],[-345,1646],[240,734],[143,2391]],[[274339,184010],[6,-6562]],[[274345,177448],[1,-1562],[-580,-3038]],[[273766,172848],[42,3614],[-203,1072]],[[227901,178788],[-37,1]],[[227864,178789],[9,1767],[307,3881]],[[228180,184437],[70,-94]],[[228250,184343],[-349,-5555]],[[227963,184054],[-251,-4475],[-258,-852],[114,2438],[-407,-1626],[-336,1829],[200,-2389],[-320,-88]],[[226705,178891],[-582,-1386]],[[226123,177505],[-201,967]],[[275241,183987],[343,-5478]],[[275584,178509],[-145,-584]],[[275439,177925],[-1,-410]],[[275438,177515],[-1093,-67]],[[270504,177480],[-3,-3270]],[[270501,174210],[-551,17],[0,-506]],[[269950,173721],[0,-130]],[[269950,173591],[-1,-996],[-273,12]],[[269676,172607],[-254,2093],[-338,6157]],[[224625,178549],[159,-3917],[135,10],[-13,-5059]],[[224906,169583],[-1481,40]],[[223425,169623],[-1,9004]],[[271879,174239],[-1378,-29]],[[223425,169623],[-158,-2061],[-441,-1922]],[[222826,165640],[-276,5054],[-494,3303],[54,2886],[-77,1666]],[[228015,167092],[-166,1925],[-8,2670]],[[227841,171687],[174,-4595]],[[227841,171687],[-52,110],[22,6050],[53,942]],[[227901,178788],[-82,-3294],[22,-3807]],[[227632,166164],[-1163,-35],[-267,256]],[[226202,166385],[-78,3148]],[[226124,169533],[-1,7972]],[[226705,178891],[360,-137],[283,-871],[341,625],[-132,-4582],[-184,-313],[-31,-3271],[212,-1257],[78,-2921]],[[226124,169533],[-934,42]],[[225190,169575],[-284,8]],[[275994,173067],[-63,2]],[[275931,173069],[-9,1]],[[275922,173070],[-37,2]],[[275885,173072],[-22,0]],[[275863,173072],[-26,-266],[-2071,42]],[[275438,177515],[375,-1551],[181,-2897]],[[273766,172848],[-167,-3535],[-1729,10]],[[271870,169323],[9,4916]],[[269950,173591],[197,-1158],[100,-2595],[-427,921],[-144,1848]],[[271870,169323],[-1374,16]],[[270496,169339],[-105,2644],[304,1032],[-368,4],[-94,-803],[-283,1505]],[[275863,173072],[173,-517],[58,-7156],[-69,-4426]],[[276025,160973],[-424,252],[-1823,-64]],[[273778,161161],[-12,11687]],[[273778,161161],[4,-1336]],[[273782,159825],[-1083,-119],[-9,4916],[-814,-70]],[[271876,164552],[-6,4771]],[[270224,168129],[277,-3877],[-101,-154],[-176,4031]],[[271876,164552],[5,-1688],[-271,-31],[4,-1924],[-522,237]],[[271092,161146],[-65,2473],[-474,1226],[-124,2786],[67,1708]],[[225190,169575],[-740,-9780]],[[224450,159795],[-249,-323],[-357,2361],[-856,1101],[54,931],[-216,1775]],[[226202,166385],[-130,-3036],[395,-282],[0,-1591]],[[226467,161476],[2,-5174]],[[226469,156302],[-921,-317],[-542,1946],[-162,1244],[-394,620]],[[227781,162637],[-161,-1600],[-221,-469],[-932,908]],[[227632,166164],[36,-3208],[113,-319]],[[273782,159825],[19,-5212]],[[273801,154613],[0,-3238]],[[273801,151375],[-1312,-39]],[[272489,151336],[-461,1867],[-228,-193],[-395,1936],[-191,1815],[-122,4385]],[[227781,162637],[266,-4006],[-45,-1342],[291,-825],[-120,-2091],[-349,-1094],[6,-1266],[-411,861],[-516,2812],[-434,616]],[[276025,160973],[-123,-6440]],[[275902,154533],[-491,-343],[-1072,2],[-538,421]],[[275036,140768],[-16,1]],[[275020,140769],[-149,-434]],[[274871,140335],[3,-76]],[[274874,140259],[-199,601],[-388,-1467],[-445,274]],[[273842,139667],[-42,3489],[1,8219]],[[275902,154533],[-196,-4031],[-305,-2455],[-117,-2922],[81,-1855],[-329,-2502]],[[275491,142866],[-401,-4417],[-362,-2015],[523,3742],[240,2690]],[[273842,139667],[-118,-686],[-512,-438],[-244,1966],[102,2254],[184,-1641],[296,-971],[166,920],[-246,1771],[-349,146],[-259,2834],[-188,3420],[234,599],[-210,868],[-82,-1356],[-127,1983]],[[267576,216906],[-181,85],[-177,1931],[-468,2015],[37,2408]],[[233545,583163],[470,-1],[0,7179],[546,-266],[367,-1412],[396,-7638],[-21,-1975],[288,-1125],[438,-310]],[[249572,564554],[-1138,-3158],[-1287,-1848],[-816,-1938],[-809,-2999]],[[245498,568091],[407,1054],[402,-2818],[1697,311],[722,-2325],[296,673],[550,-432]],[[244050,541402],[0,-11146]],[[242234,539623],[263,1550],[296,-1143],[509,150],[748,1222]],[[245788,538230],[8,-8017]],[[244050,541402],[832,1557],[406,335],[672,1956],[311,-1206],[-365,-2639],[91,-1053],[-209,-2122]],[[245788,538230],[630,1480],[422,-1520]],[[246668,543604],[119,-491],[-601,-1772],[482,2263]],[[254361,554779],[386,-1343],[-683,-275],[52,-770],[-806,-2719]],[[253310,549672],[-198,1603],[-596,-3]],[[252516,551272],[245,1549],[576,1487],[1024,471]],[[252129,567028],[638,1075],[-743,-3451],[-872,-1783],[142,-551],[-582,-1037],[-166,1627],[1583,4120]],[[252473,548019],[214,-3207]],[[251344,546531],[128,1308],[717,2354],[12,-1815],[272,-359]],[[253310,549672],[-511,-4124],[-63,2158],[-507,612],[-28,1852],[315,1102]],[[256406,536544],[0,-6253]],[[256406,530291],[-348,-1],[-4,-3236],[-348,4]],[[253820,544308],[634,-392],[509,-1456],[171,-1720],[674,-4188],[598,-8]],[[257802,530286],[-1396,5]],[[256406,536544],[265,725],[573,-1784],[182,767],[315,-1250],[489,2628],[901,2228],[763,318]],[[258234,522812],[-689,-2000],[491,3712],[-698,206],[-249,-2795],[-468,641],[-361,-1504],[-267,-2116]],[[255011,510600],[-35,-2168],[-370,-346]],[[254678,502703],[346,2967],[570,1286],[473,4864],[330,489],[143,1898],[235,8],[-572,-6086],[-44,-1740],[-320,-1641],[-154,-2072]],[[266291,525881],[-781,769]],[[265510,526650],[490,1336],[-121,1234],[374,-217],[304,-1926],[-266,-1196]],[[264534,537282],[192,-119],[-169,-2149],[-263,1387],[240,881]],[[264771,527003],[-281,49]],[[264490,527052],[-48,-2]],[[264442,527050],[-19,1612],[-346,2],[-1,1612],[-2086,1],[-3,1628],[-347,-5]],[[261640,541399],[788,243],[-207,-1485],[-13,-3740],[568,-816],[557,744],[103,-1308],[702,1641],[226,-1325],[215,-3355],[-110,-1628],[279,286],[140,-1587],[477,-2056],[-594,-10]],[[263518,523913],[579,-847],[-387,-679],[-192,1526]],[[264442,527050],[-1182,1276],[-230,-2015],[-35,-1966],[-708,3125],[-1172,1762],[-254,-167],[-506,-2455]],[[260355,526610],[-463,132]],[[263048,514103],[-754,-309],[-259,1732]],[[262035,515526],[484,1050],[-316,238],[-233,2467],[498,2959],[580,1140]],[[261221,512584],[62,1278],[458,1591],[294,73]],[[260809,522684],[123,-2641],[-358,-487],[235,3128]],[[259619,509895],[-266,697],[189,946],[77,-1643]],[[260516,504530],[-484,-12]],[[259309,504590],[9,2168],[372,1310],[375,-215],[515,4334],[143,-2358],[-221,-3319],[14,-1980]],[[260516,504530],[127,-152],[342,4121],[-150,-4481],[235,2088]],[[266792,512571],[208,-2839],[-312,126],[-6,-2477],[298,-1301]],[[266298,493142],[-35,-2125],[-276,-1072],[-460,40],[-182,-1553]],[[266573,485031],[572,4601],[580,621],[347,1131],[524,-1430],[297,-2969],[77,-2649]],[[269259,474627],[236,-3607],[-157,-1606],[-122,-4884],[-353,83],[-169,1029]],[[268236,461261],[-80,-1234],[-498,-1330],[-248,-2669],[-87,-2521]],[[267323,453507],[-275,1112],[-676,-160]],[[267323,453507],[-736,-4608],[-57,-1020]],[[276369,283639],[51,-2897],[155,-81],[-317,-2464],[-721,-1619]],[[275537,276578],[-263,-628]],[[275274,275950],[-210,1997]],[[277898,288714],[355,-1067],[-412,-2026],[-248,443],[-747,-4416],[-356,-321],[309,2769]],[[64909,48285],[735,-2763],[362,-391],[488,-1483],[555,-3196],[-25,-2084],[244,11],[54,-1736],[492,-2286],[-474,-3219],[-428,-1373],[-453,-186],[-605,-2496],[-405,-3858],[-627,2125],[-103,1501],[89,4218],[-292,5441],[-196,1715],[345,2265],[317,3334],[-187,1774],[-23,2014],[137,673]],[[55028,84760],[233,-813],[-51,-4138],[-317,-1724],[-531,856],[-341,1190],[-70,1626],[168,1566],[392,1359],[517,78]],[[61944,65038],[-272,274]],[[61944,65038],[565,-356],[-456,-1900],[-525,1012],[-688,11],[160,2281],[672,-774]],[[61752,60573],[246,-292],[244,-1961],[-82,-859],[-351,-533],[-258,3324],[201,321]],[[62904,54516],[45,-1246],[-351,-599],[9,965],[297,880]],[[62814,62495],[340,-2480],[439,903],[263,-353],[320,-1916],[312,-600],[35,-1559],[-160,-1021],[-712,-1316],[-391,412],[-54,3221],[-459,616],[-172,1326],[59,2293],[180,474]],[[58972,75138],[409,-3430],[-19,-1219],[215,21],[315,-3031],[-404,-786],[-271,1419],[-580,-706],[-493,5221],[435,169],[393,2342]],[[53118,80469],[25,-1794],[-233,-683],[-126,-1603],[-75,1953],[409,2127]],[[996993,632383],[817,-1163],[91,-906],[715,-2639],[-621,1211],[-350,1710],[-879,1732],[227,55]],[[949,635992],[99,-1643],[-281,619],[182,1024]],[[7983,636500],[-23,-2275],[-307,-73],[-67,2101],[397,247]],[[8254,636861],[430,-729],[-177,-971],[-343,386],[90,1314]],[[8791,637399],[79,-1229],[-422,751],[343,478]],[[2943,637533],[355,-28],[110,-1138],[762,-730],[-472,-573],[-84,-1947],[-423,-823],[-299,1293],[442,1083],[-738,1716],[347,1147]],[[5406,633632],[-183,-597],[-329,1038],[-855,-380],[1115,1264],[256,737],[15,1940],[429,-501],[-230,-1194],[22,-1773],[-240,-534]],[[996376,638802],[311,-785],[-243,-852],[-68,1637]],[[7153,639094],[-123,-3160],[551,52],[-111,-1993],[-622,-692],[-248,-1116],[-148,1715],[-276,-2445],[-150,1181],[346,1636],[-142,1180],[574,-355],[-294,2578],[643,1419]],[[999634,639522],[333,-975],[-327,-1865],[-356,430],[-110,1601],[460,809]],[[8394,641129],[361,-843],[-150,-1151],[-356,-113],[145,2107]],[[993962,641501],[134,-1164],[-301,-1591],[5,-1345],[-561,-90],[-112,-1517],[-310,1266],[482,1562],[297,123],[366,2756]],[[15681,641867],[-88,-644],[551,-599],[499,441],[600,-278],[-1374,-850],[-663,468],[-396,-613],[-512,1117],[346,752],[243,-725],[794,931]],[[18716,646240],[355,-1060],[-312,-984],[-542,-452],[86,1790],[413,706]],[[13937,646817],[445,-1871],[-209,-1713],[-378,-563],[294,-1046],[-846,-839],[-955,-1616],[-414,666],[-938,-680],[1039,1800],[664,138],[756,1388],[293,1606],[-346,796],[246,1637],[349,297]],[[983194,648582],[-58,-2897],[-305,734],[-723,157],[686,1802],[400,204]],[[23639,652034],[277,-453],[-113,-1345],[-515,-1146],[-83,1789],[434,1155]],[[26147,655623],[246,-1330],[-168,-813],[-713,1494],[635,649]],[[980646,657671],[765,-147],[436,-2390],[463,-235],[-708,-1136],[-317,775],[-432,-1614],[-470,872],[165,1668],[-516,-336],[77,1140],[-541,-71],[552,1545],[526,-71]],[[28035,654543],[906,4624],[-94,1472],[527,2186],[747,66],[-272,830],[81,1805],[502,2014],[613,648],[607,-970],[-156,-2372],[-1193,-2675],[-517,-3466],[-1751,-4162]],[[36357,673363],[-391,-2467],[-196,1415],[587,1052]],[[34797,676523],[213,-3286],[496,2734],[387,-123],[69,-1817],[-313,-391],[-520,-2697],[580,1301],[182,-1595],[-673,-869],[-156,-1540],[-280,592],[46,-1877],[-401,265],[-1841,-3579],[-465,-1377],[-652,1241],[1054,2460],[1094,1206],[-224,1758],[468,338],[-151,1493],[938,464],[-875,524],[-340,2033],[352,1704],[1012,1038]],[[26197,724966],[756,-263],[-288,-1191],[-468,1454]],[[25148,736553],[-442,-1993],[-390,1138],[832,855]],[[39421,678834],[125,-1114],[-550,-30],[-134,746],[559,398]],[[36825,680387],[730,-1661],[-578,-1781],[-479,150],[-104,2381],[431,911]],[[38083,681762],[-169,-1483],[356,-62],[-384,-1861],[-336,2175],[180,1214],[353,17]],[[45571,685391],[688,-1487],[-645,-37],[-43,1524]],[[46952,694607],[166,-1890],[-229,-1028],[-301,1739],[364,1179]],[[42853,695877],[635,14],[266,-1568],[335,-4089],[373,437],[214,-1478],[-487,52],[-124,932],[-254,-1722],[-453,-779],[-609,441],[-827,-359],[-641,-1585],[-62,-1249],[-802,-1375],[-569,491],[-279,2148],[72,1348],[583,1047],[405,3984],[357,1064],[527,-514],[982,2495],[358,265]],[[48297,698203],[503,-1314],[-281,-972],[-458,2014],[236,272]],[[54719,699114],[35,-1698],[-430,-1611],[395,3309]],[[53768,699716],[-57,-3065],[-690,-2054],[16,3270],[392,-758],[85,2465],[254,142]],[[52387,701641],[19,-2213],[-523,1390],[504,823]],[[51366,702388],[94,-1872],[270,219],[343,-2313],[-187,-1094],[-921,1412],[40,2470],[361,1178]],[[52632,703466],[224,-1137],[-482,351],[258,786]],[[56428,729876],[0,-164]],[[56428,729712],[1,-1271]],[[56429,728441],[-376,-902],[0,-1576],[-688,44],[0,-1691],[-885,0],[-1,-1609],[-854,-47],[-10,-3153],[262,-17],[11,-6313],[-174,-1752],[845,0],[0,-4665]],[[54559,706760],[-221,3584],[-465,487],[-226,-1331],[-227,543],[-128,-1791],[-942,-1954],[-501,-2558],[-203,1961],[-156,-2246],[-321,-160],[-388,1335],[-213,-1550],[-896,-1527],[-526,87],[101,2154],[312,2133],[-635,501],[-315,-1612],[38,-2336],[-533,-3433],[-423,296],[235,-2134],[-319,-953],[-328,1503],[-197,-2494],[-614,575],[-124,3742],[-387,952],[-195,-964],[305,-1471],[135,-4091],[-322,1731],[-87,-1650],[-581,-104],[-229,2389],[-557,961],[-44,-1927],[533,-1473],[-911,-2585],[204,4150],[-79,1484],[293,977],[934,318],[218,2402],[379,1261],[396,-106],[-126,1804],[846,4218],[1241,3631],[1202,1199],[764,131],[636,709],[-429,-1919],[670,-3198],[315,-565],[-272,3531],[664,-282],[156,-1434],[616,-516],[78,1328],[-802,1925],[-146,1183],[588,5125],[1475,4921],[1402,2354],[1201,3895]],[[131839,702693],[478,-1815],[-261,-3590],[-338,3444],[121,1961]],[[133475,712615],[472,-2306],[365,-3908],[-109,-3956],[-237,-2723],[-412,-1256],[-725,1926],[513,3110],[-666,-3077],[-842,2748],[552,2915],[-268,716],[-19,1677],[519,1253],[-147,1905],[1004,976]],[[60956,762087],[579,2152],[207,3039]],[[61742,767278],[1861,118],[1,-5313],[-2648,4]],[[51410,765657],[-525,-4199],[-534,-542],[50,2808],[1009,1933]],[[50361,766039],[-741,-1613]],[[49620,764426],[-84,1634],[825,-21]],[[50463,766367],[0,3048],[447,4],[153,1512],[-4,3289],[475,13],[-1,1618],[474,68],[155,1546],[1,3271],[484,-4],[8,3225],[637,43],[12,3203],[445,89],[14,3067],[182,1579],[477,25],[0,3225],[493,-12],[187,1563],[6,3225],[507,4],[7,1610],[466,16],[197,3194],[2958,4],[8,-1469],[509,-23],[-9,1634],[498,0],[0,1661],[983,-7],[4,-1637],[3363,-86]],[[64599,804865],[6,-22904],[-455,-40],[-4,-1619],[-951,22],[-1,-1609],[-472,18],[-264,-3260],[-959,50],[-1,-1622],[-475,33],[8,-3299],[224,-22],[8,-3864]],[[61263,766749],[-1094,-1969],[-1642,-2596],[-488,694],[-100,1404],[-595,1396],[200,3649],[-346,-1592],[-442,-553],[-70,-2804],[-205,-87],[353,-4364],[-131,-1596],[-719,558],[-940,6038],[-710,1488],[71,1756],[-303,-417],[-191,-2035],[-311,-514],[-282,1932],[-662,238],[-84,2398],[-285,617],[-1091,-3021],[-733,-1002]],[[61033,724292],[684,-545],[-930,-219],[246,764]],[[71633,804882],[114,-1587],[1,-6528],[-370,-12],[-9,-6508],[-350,-18],[4,-6265],[-356,2],[-2,-1646],[-479,-11],[4,-3276],[-475,-9],[9,-1643],[-816,-49],[14,-3240],[-942,-29],[5,-3278],[149,-20],[-2,-6355],[154,-1634],[924,0]],[[69210,762776],[7,-3471],[-453,-1843],[-736,-1056],[-774,-256],[-138,-1018],[-764,-799],[4,-5901],[-324,-916],[-689,-542],[-206,-2415],[-365,-3],[219,-1278],[-365,-813],[-334,533],[-169,-1391],[-664,236],[-689,-3490],[-377,-3219],[1107,-39]],[[63500,735095],[-534,-3229],[-498,991],[-283,-2643],[-165,1250],[-876,-3730],[-513,1840],[-93,-1738],[-418,-1467],[297,-1220],[-476,-272],[-290,1208],[-838,-1435],[-237,-1294],[835,518],[-97,-1512],[-773,886],[47,-1061],[-586,328],[-1008,-4054],[729,1416],[658,-1055],[-890,-5668],[-359,2476],[4,-2388],[-569,564],[-201,-1660],[-1170,-915],[-208,-1647],[-122,1992],[-209,-168],[97,-2311],[-195,-2337]],[[56429,728441],[768,-812],[-200,4018],[209,1634],[848,4197],[641,1528],[416,1983],[586,1663],[449,-1864],[-119,2914],[-249,-206],[-35,2059],[292,6723],[196,1491],[338,171],[-417,2931],[211,2814],[593,2402]],[[61742,767278],[-123,1251],[-356,-1780]],[[64599,804865],[4288,-12],[2746,29]],[[65699,709069],[-504,744],[538,1338],[-34,-2082]],[[70400,724037],[-204,-1087],[-508,-19],[712,1106]],[[68718,724702],[-249,-2013],[-521,-1694],[196,2303],[574,1404]],[[69851,724354],[-436,-1711],[-363,957],[373,1310],[426,-556]],[[72263,735888],[654,-276],[179,-1133],[-749,-602],[-369,-1913],[-213,2136],[498,1788]],[[71587,750055],[468,-1112],[218,-1969],[-712,1537],[26,1544]],[[72121,750653],[752,-1609],[143,801],[402,-896],[-319,-1580],[498,-23],[268,1873],[864,-1804],[-645,-1900],[256,-24],[-10,-2224],[878,340],[-525,-3652],[-488,209],[-628,1356],[-204,-635],[516,-1217],[-216,-2411],[-309,-183],[-530,1368],[-251,-544],[428,-942],[-369,-902],[-533,226],[-638,-2935],[-448,348],[322,-1679],[-993,-4198],[-693,-436],[211,1779],[606,2267],[-320,-122],[143,1970],[-433,-1663],[-186,436],[448,2279],[-693,794],[-670,-679],[120,-1420],[344,1135],[575,213],[-523,-3914],[-670,1507],[-38,3723],[-597,1836],[85,2427],[257,1668],[757,2434],[973,102],[63,-1862],[628,-4462],[-147,2063],[79,2795],[-204,1554],[706,-247],[-928,1791],[8,1470],[588,1559],[419,-1165],[70,-2442],[174,2478],[786,-908],[-91,1984],[527,-1432],[-621,2635],[26,690]],[[72294,752633],[298,-243],[384,-2001],[-771,1279],[-524,168],[436,1600],[177,-803]],[[74768,758552],[203,-1494],[403,602],[-149,-1955],[513,1173],[-64,-2164],[-263,-1096],[-683,1715],[168,-2076],[-475,81],[-333,-1022],[-37,2484],[-168,-2623],[-420,-227],[-2,-1319],[-1063,2147],[-114,1830],[590,-260],[-304,1148],[155,946],[718,-477],[-72,2281],[417,1422],[495,-330],[341,-2521],[144,1735]],[[73815,761335],[865,1186],[-376,-3031],[-417,471],[-72,1374]],[[72144,766667],[-256,-165],[-279,-2562],[-649,-1819],[-613,-91],[-174,-2213],[-343,-43],[106,-2403],[-387,-650],[215,-848],[-602,-2221],[-49,-1387],[-356,1779],[54,-1574],[-325,275],[-479,-1769],[-793,237],[-111,-2260],[-819,-2014],[-130,-1038],[-600,882],[68,-2347],[-396,-579],[9,-1505],[-775,384],[-35,-2432],[-520,654],[-902,-2724],[-22,-1053],[573,813],[-196,-1902],[142,-997]],[[69210,762776],[1368,8],[-5,1620],[1015,10],[-7,2250],[405,-14]],[[71986,766650],[158,17]],[[124853,753145],[-549,-606],[-394,-1297],[-255,1284]],[[123655,752526],[58,1721]],[[123713,754247],[93,682]],[[123806,754929],[27,-1188],[798,113],[222,-709]],[[124293,757146],[749,-2547],[-1014,763],[-164,962],[429,822]],[[124853,768717],[211,-1953],[1165,-2450],[370,-2181],[920,-3383],[-235,-797],[808,-4371]],[[128092,753582],[-945,-4191]],[[127147,749391],[-329,-1604]],[[126818,747787],[-267,-754]],[[126551,747033],[-348,2791],[-600,2743],[-36,3375],[303,711],[-120,1531],[-569,-3645],[-841,2824],[-590,340],[-226,2827],[-376,2538],[-6,5749]],[[123142,768817],[1711,-100]],[[122507,768865],[608,-35]],[[123115,768830],[94,-1237],[-284,-3190],[-329,1968],[-89,2494]],[[125028,711856],[427,56],[-445,-1309],[18,1253]],[[130215,719801],[107,-2063],[756,-2315],[-338,-626],[254,-2100],[-618,-805],[-298,1242],[209,718],[-487,1319],[-280,-690],[-164,3076],[325,413],[163,1718],[371,113]],[[129378,721918],[249,-1134],[-115,-2167],[-590,-788],[-540,1882],[182,1807],[814,400]],[[130830,716910],[-489,1840],[74,2204],[-143,1693],[379,-778],[302,-2036],[326,196],[295,-2757],[-436,-1557],[-308,1195]],[[128815,728558],[1034,-4174],[-772,-1663],[-360,265],[62,2359],[-148,3099],[184,114]],[[126153,727422],[-66,1104],[446,-558],[-459,-4949],[-272,-4761],[208,396],[-146,-3602],[-196,615],[-111,3651],[-137,-5807],[-277,1260],[-136,3641],[146,2921],[525,49],[-191,2101],[-591,341],[101,963],[-332,2219],[-28,2428],[338,-759],[186,2187],[562,-1046],[430,-2394]],[[126096,733937],[1281,-1597],[902,-116],[343,-1458],[134,-4906],[-199,-1131],[-500,1925],[-370,3179],[207,-4437],[380,-383],[50,-1490],[-321,-1688],[-659,1031],[14,-897],[-617,-308],[-202,4527],[180,2218],[-303,119],[-132,1682],[-636,2448],[448,1282]],[[130329,738612],[336,-2561],[-336,-2230],[901,-864],[-218,-3192],[698,-1259],[105,-3850],[709,243],[1430,-3886]],[[133954,721013],[215,-2257],[-268,-1573],[-450,60],[-523,-1243],[217,-2328],[-367,57],[-534,1418],[-526,-1313],[-53,-1739],[-415,-1188],[272,-1077],[-70,-1918],[-374,-1019],[-347,1785]],[[130731,708678],[461,1375],[54,2694],[202,40],[-10,3932],[574,625],[-464,526],[-186,2188],[-506,719],[-71,1280],[-436,1390],[254,2614],[-500,-62],[-115,1369],[-779,1724],[-462,2944],[356,-607],[-84,2467],[-160,-1289],[-1099,1537],[-631,1283]],[[127129,735427],[607,1116],[481,-957],[392,2691],[952,1778],[768,-1443]],[[120135,747679],[-911,-75]],[[119224,747604],[-113,-9]],[[119111,747595],[-67,-5]],[[119044,747590],[175,3136],[916,-3047]],[[118824,752542],[436,-1596],[-323,-3068],[-279,1217],[166,3447]],[[127129,735427],[-11,1829],[1069,643],[-784,626],[-296,2733],[133,1559],[-543,1078],[247,1825],[1153,-2770],[-708,2710],[-430,722],[26,2218]],[[126985,748600],[107,525]],[[127092,749125],[55,266]],[[128092,753582],[282,-2841],[560,-2991],[880,-6389],[515,-2749]],[[124853,753145],[18,23]],[[124871,753168],[418,537]],[[125289,753705],[-148,-676],[909,-5880],[23,-2256],[-213,92],[-809,7066],[78,-1904],[-258,510],[590,-4994],[507,-2211],[51,-2144],[-521,218],[645,-2298],[-310,-1473],[-533,1666],[53,-3416],[-405,-716],[-196,-1446],[-544,-1275],[-190,2104],[50,2518],[367,839],[-3,1567],[-686,5962],[69,2065],[-286,4181],[126,722]],[[120491,750760],[-344,-2996]],[[120147,747764],[-1106,4388],[166,2241],[347,-765],[278,1062],[445,-194],[427,1507],[913,-2103],[-367,-2249],[68,-1158],[543,2952],[316,-1048],[502,33],[561,-2130],[-236,-1608],[-622,1179],[757,-2767],[-774,-493],[-454,1349],[-1420,2800]],[[123713,754247],[-95,-1670],[-341,1775],[-156,4018],[685,-3441]],[[114794,765672],[1165,1936]],[[115959,767608],[1943,4721],[682,110],[264,1748]],[[118848,774187],[1665,-1619],[529,-1279],[326,-2198],[-480,-4537],[582,-819],[409,-1530],[231,-2153],[-489,-11]],[[121621,760041],[49,-2296],[-405,961],[-824,-873],[206,2553],[-684,5535],[900,1274],[-791,545],[-394,2927],[235,-3862],[-191,-2032],[-886,1580],[-101,2460],[-280,-1505],[-688,1343],[-390,-1137],[761,-460],[670,-1418],[-346,-493],[774,-1580],[-470,-1770],[538,847],[342,-513],[455,-4297],[-639,-1196],[-13,909],[-621,-1129],[-298,1069],[41,-2621],[-717,2666],[-654,322],[-1470,4078],[-936,3744]],[[122912,775799],[-900,-103]],[[122012,775696],[-90,222]],[[121922,775918],[-936,7001]],[[120986,782919],[676,1289],[685,-1898],[571,-2465],[-202,-2534],[196,-1512]],[[123142,768817],[-27,13]],[[122507,768865],[-495,6831]],[[122912,775799],[198,-1219],[722,-593],[59,-1056],[546,-1130],[416,-3084]],[[121922,775918],[-145,-2315],[-358,301],[513,-2663],[-50,-2481],[722,-6540],[-70,-1018],[302,-3962],[-98,-2100],[-512,-56],[-321,1677],[-284,3280]],[[118848,774187],[34,3836],[479,-24],[183,1767],[-318,752],[1118,1161],[642,1240]],[[120877,738496],[389,-2216],[137,-2451],[-166,-1459],[-605,-380],[11,6413],[234,93]],[[123928,718235],[-2,-1610]],[[123926,716625],[-393,1362],[-697,5371],[278,1647],[-447,-368],[-256,2377],[77,1437],[-515,245],[-59,2351],[446,1679],[-481,1224],[98,2800],[-464,-184],[-452,2135],[588,60],[-326,842],[146,1989],[629,565],[-77,-1197],[395,257],[557,-1676],[490,7],[-81,-2391],[463,-6886],[222,-4906],[-139,-7130]],[[120135,747679],[12,85]],[[120491,750760],[1455,-3708],[395,-1834],[349,1018],[504,16],[258,-5147],[-689,-337],[-265,1057],[-1794,4644],[718,-3300],[33,-2583],[-443,-1626],[-365,435],[-451,2590],[538,-1592],[-959,3723],[84,790],[-635,2698]],[[40063,839903],[770,-536],[-859,-2772],[-125,3412],[214,-104]],[[40964,844347],[883,-2223],[79,-1915],[441,-2171],[-40,-1740],[-704,2418],[-1774,1537],[90,1825],[445,2301],[580,-32]],[[42065,848667],[903,-976],[563,-1663],[-706,-1821],[-339,-2285],[-564,-2],[-711,2401],[-620,812],[14,1297],[651,1761],[809,476]],[[46153,848898],[568,1],[10,-1610],[529,1],[18,-1676],[524,-12],[-4,-1547],[3176,0]],[[50974,844055],[-395,-2136],[-20,-6445],[-126,-25],[-6,-6437],[383,-5],[-10,-4748],[1058,-39]],[[51858,824220],[180,-1451],[604,-215],[-1456,-2220],[-980,-2588],[-900,-571],[-1213,-1602],[-1234,662],[-494,709],[-1854,-1999],[-659,648],[-690,-2756],[-941,669],[31,-2392],[-389,-2165],[-92,-1943],[-1046,-1523],[-746,776],[-935,-1159]],[[39044,805100],[-172,1112],[664,830],[-1128,3201],[-13,-2176],[-520,182],[-234,2567],[116,849],[-614,571],[-207,2123],[418,1187],[-481,1394],[-546,-1187],[-95,2644],[1073,795],[-526,599],[-413,1924],[1380,582],[-440,3023],[251,2549],[1109,5289],[619,2101],[570,-119],[933,3977],[823,-896],[965,-4031],[-209,4581],[-457,1793],[12,1197],[848,640],[78,1725],[725,1785],[524,-1399],[778,464],[610,2670],[668,1252]],[[46896,791982],[261,-1285],[-270,-665],[9,1950]],[[36192,795959],[180,-1952],[581,363],[562,-947],[-123,-4413],[448,-2402],[-1265,-1162],[-486,-2126],[-685,2000],[-493,-131],[-1055,2670],[-324,-89],[-644,1570],[-206,2197],[272,858],[1286,-625],[56,1283],[1008,2111],[905,-187],[-17,982]],[[17304,799216],[126,-1745],[804,-2158],[616,-183],[448,-1365],[-1028,65],[-1000,3083],[-322,373],[356,1930]],[[39654,805231],[136,-1106],[641,589],[-101,-1482],[649,41],[525,-808],[139,-1889],[-482,-1833],[-426,-534],[213,-1308],[-375,-571],[-319,-2845],[-422,135],[-775,2413],[439,1980],[-612,-774],[-640,997],[1252,2977],[-199,1359],[401,589],[-44,2070]],[[51858,824220],[3536,-32],[10,1609],[2034,-5],[-4,1617],[4083,203],[1,-1838],[5893,-29],[3388,4],[-14,1716],[962,59],[3,1571],[903,-11],[192,1616]],[[72845,830700],[-3,-16190]],[[72842,814510],[-1303,45],[-14,-5422],[124,-21],[-16,-4230]],[[50463,766367],[-102,-328]],[[49620,764426],[-139,-1468],[-1061,-1905],[-97,1293],[-1035,446],[862,1205],[617,1650],[-307,160],[-238,3846],[703,1138],[-113,1059],[-716,-1213],[-383,2903],[195,2895],[687,2210],[-441,2484],[-273,3082],[-346,1471],[-416,3726],[137,1138],[-767,3115],[393,1259],[285,3791],[-129,577],[-402,-4189],[-434,-1001],[311,-2534],[-69,-3036],[-406,-1085],[-1628,-2447],[-1520,-851],[-1012,789],[-258,2086],[267,429],[-760,1956],[-694,3087],[-87,1177],[383,1597],[-110,1291],[397,379],[-183,1458],[364,50],[277,1573],[411,342],[228,1752],[702,-118],[-16,-3249],[425,240],[607,2498],[-384,1562],[-1050,843],[629,147],[400,1001],[-600,267],[-481,-1345],[-125,3490],[-458,-1834],[195,-1307],[-1242,-569],[-216,1520],[-538,-627],[-174,927],[-743,-457]],[[91002,847056],[9,-3988],[145,-1795],[8,-11469],[-1548,26],[56,-1646],[46,-12769],[-726,14],[-2,-927],[-3493,32]],[[85497,814534],[-2026,-32],[-141,995]],[[83330,815497],[-404,601],[-735,-459],[-672,-2022],[-283,-2604],[-1335,126],[-328,2166],[-15,-1517],[-1058,-1636]],[[78500,810152],[-4,1152],[-1002,21],[-4,3164],[-4648,21]],[[72845,830700],[0,8044]],[[72845,838744],[3088,-82],[10,1347],[6637,9993],[4096,-25],[12,2587],[2946,186]],[[89634,852750],[1353,59],[15,-5753]],[[86653,868811],[757,-1570],[2145,14]],[[89555,867255],[87,-6323],[-8,-8182]],[[72845,838744],[1580,8236],[-1,2534],[-536,-83],[-516,926],[-152,2433],[36,3161],[1704,93],[24,3109],[496,-4],[22,3291],[619,95],[97,1432],[588,58],[151,-985],[625,-419],[1536,6612],[4538,-401],[2997,-21]],[[85497,814534],[-37,-10730],[-760,-83],[1,-2090]],[[84701,801631],[-828,17],[9,1987]],[[83882,803635],[-435,1931],[-460,-308],[-1062,1669],[-902,2471],[707,3049],[1129,2748],[471,302]],[[97244,787641],[-970,-3439],[63,995],[907,2444]],[[87222,789210],[-181,-1772],[-422,-410],[603,2182]],[[86635,788749],[223,2200],[232,-961],[-455,-1239]],[[86658,791573],[-369,-3115],[-330,1166],[699,1949]],[[89188,794370],[360,-14],[-243,-1523],[503,637],[-806,-2688],[-814,-3927],[156,-1241],[-672,-1392],[-694,-249],[130,1479],[1249,4306],[686,2953],[145,1659]],[[86769,795107],[-71,-1859],[-324,817],[395,1042]],[[90857,797012],[511,-366],[-57,-1276],[666,500],[124,-712],[-950,-1371],[-533,-1467],[-218,828],[596,1566],[-651,-377],[-25,892],[537,1783]],[[87021,792777],[237,3392],[601,-294],[-413,-4995],[-425,1897]],[[84910,786500],[234,323],[68,9012],[-286,660]],[[84926,796495],[584,1623],[519,-1019],[523,1881],[285,-1347],[30,-1922],[-996,-2869],[605,-1030],[-717,-2215],[-215,-2677],[-634,-420]],[[92921,798974],[-9,-545],[-1147,-2071],[-222,1208],[1378,1408]],[[88339,800844],[383,-576],[-511,-771],[128,1347]],[[86236,802132],[283,-1843],[-421,600],[138,1243]],[[84951,797243],[-1,3142]],[[84950,800385],[697,2105],[-36,-2998],[388,2501],[244,-2671],[-390,-1481],[-418,814],[-484,-1412]],[[86676,805210],[325,-2117],[-624,-286],[299,2403]],[[84951,801507],[-250,124]],[[91002,847056],[976,234],[63,648],[2682,18],[0,-1651],[1595,-292],[4037,-37],[350,-2273],[-454,-2972],[436,-1269],[-270,-2840],[732,-302],[295,1951],[1174,-336],[-15,-1588],[537,-65],[-10,-1550],[466,-24],[-40,-6434],[413,-697],[4,-4218],[2303,15]],[[106276,823374],[-1,-28114]],[[106275,795260],[-589,822],[-1600,-31],[4,1610],[-3847,-34],[-2014,-8871],[13,-855]],[[98242,787901],[-1021,2713],[47,775],[-1005,-33],[-276,1650],[-683,426],[369,3141],[18,2628],[-612,-1565],[-178,-1401],[-659,-2022],[-457,1505],[-714,1071],[-573,-359],[943,3800],[-1116,-764],[259,1691],[-925,-1558],[532,2101],[-1009,-888],[-677,62],[-94,801],[1014,956],[446,1115],[-1050,-704],[-516,1833],[317,3213],[1053,57],[-177,903],[-744,-283],[-1116,-3389],[-359,1426],[-193,-1467],[-586,-1116],[-376,408],[6,3472],[-402,-3497],[-547,-1350],[-586,2075],[324,2590],[504,2086],[123,1742],[-770,-3524],[-194,-1549],[-275,1236],[-413,-4415],[-943,-1986]],[[71670,777076],[233,-1112],[-578,-408],[345,1520]],[[79473,776784],[-279,-2074],[90,2387],[189,-313]],[[75949,796147],[-337,-1236],[224,2635],[113,-1399]],[[84951,801507],[-1,-1122]],[[84951,797243],[-25,-748]],[[84910,786500],[-1245,807],[240,1474],[-371,-167],[-386,-2038],[-206,3702],[-29,-2396],[-481,-1666],[-173,-1732],[-183,2620],[-197,-5326],[-848,3357],[-39,-1545],[420,-800],[-371,-1104],[-68,-1569],[-635,-858],[208,3841],[-673,-5212],[-363,1475],[21,-2088],[-388,-20],[-756,-4011],[-74,2111],[-347,-2231],[-660,934],[-173,-859],[-799,-887],[-18,1049],[-623,715],[205,2741],[546,1203],[718,23],[17,1317],[737,963],[-66,842],[764,2927],[-372,25],[-1227,-2967],[-387,246],[-629,2275],[460,4880],[786,3381],[112,2715],[231,475],[102,3025],[-410,3227],[967,1254],[994,2799],[846,1832],[515,-1977],[448,-352],[796,1052],[346,-814],[1490,-887],[200,-646]],[[78500,810152],[-529,-2655],[-889,-709],[-891,-2927],[268,-2258],[-402,43],[-550,-1341],[-153,-1302],[-582,-1608],[-230,-3803],[-474,-1479],[-1035,411],[707,-1449],[308,-1771],[-381,-2913],[-287,-680],[-1149,-274],[-159,-989],[796,2],[-164,-2224],[-453,-1068],[-562,296],[227,1314],[-337,1411],[33,-1984],[-398,-2576],[-671,-197],[279,-1966],[-1055,-1700],[-61,-2764],[-263,-488],[166,-2860],[277,1050],[1025,35],[413,-1682],[604,-1164],[58,-1233]],[[106275,795260],[0,-1588],[1343,-1612],[173,1644],[1330,-2348],[801,2853],[1723,322],[-345,-4919],[404,-1740],[964,-1648],[226,-2564],[2839,-9771],[300,-4810],[-74,-1471]],[[114794,765672],[-73,1821],[-694,2541],[-828,1292],[163,1473],[-568,-631],[-1881,4464],[-679,903],[-783,1959],[551,424],[542,2604],[-421,3603],[333,1618],[530,-2532],[164,177],[-480,2635],[-360,838],[-174,-1871],[-463,-2242],[-1472,-2407],[-1544,735],[-1623,2726],[527,2089],[-371,3153],[-375,-856],[437,-1616],[-624,-1272],[-2761,2302],[-2696,-711],[-929,-990]],[[106279,946179],[-1,-49412]],[[106278,896767],[-929,-2457],[-130,-1600],[-1321,-3359],[-907,419],[-783,-1693],[-450,408],[-349,-3372],[-325,-1449],[-654,-436],[-1188,-2953],[58,-3794],[-686,-1988],[-821,654]],[[97793,875147],[-205,2151],[358,3325],[-316,719],[513,846],[-159,1080],[-963,-156],[-338,-900],[-1244,1394],[-886,-1195],[-579,221],[-639,-953],[-286,1202],[374,853],[-1289,1884],[-166,1202],[398,1802],[-514,869],[-625,-618],[-460,-1403],[-1061,-1321],[-1073,-10],[-601,-1159],[-3102,6],[49,-11363],[273,317],[853,-2473],[548,-2656]],[[50974,844055],[10,4776],[492,29],[-58,4949],[548,10],[4,1425],[1103,13],[-17,1635],[486,23],[-3,1682],[645,-27],[-89,4840],[-627,-26],[-61,12986],[569,33],[-9,3217],[557,13],[-4,6309],[539,-18],[-5,4867],[-575,-8]],[[54479,890783],[-5,8105],[1752,-14],[2,3093],[2984,34],[5,6543],[2343,38],[1,-3290],[1183,54],[6,3236],[1194,12],[-3,-1576],[600,61],[1,-1630],[1168,-18],[135,4836],[1805,-29],[9,2778],[1841,-6],[167,1643],[-10,6646],[-437,-20],[-10,1684],[-1234,59],[4,4809],[169,1664],[-624,-6],[17,1606],[-634,-27],[7,1645],[-621,10],[151,4212]],[[66445,936935],[6419,-2],[8315,-30],[7299,18],[3888,6],[-10,9096],[4663,309],[4790,-300],[4470,147]],[[97793,875147],[-1158,-1860],[-1437,-204],[-262,-1096],[-804,-486],[-476,-1291],[-576,796],[-732,-1427],[-433,43],[-568,-2104],[-1792,-263]],[[106278,896767],[-2,-73393]],[[79659,983425],[-186,-1458],[-395,1373],[581,85]],[[66445,936935],[-1,525],[-2610,-23],[-8,1900],[-2541,-186],[-15,1669],[-3117,28],[-4016,91],[-18,1253],[-1129,58],[26,-1250],[-2705,21],[-18,1268],[-1182,3],[11,-1279],[-1329,46],[-7,1283],[-2020,165],[0,-1272],[-4957,-98],[15,-3782],[-2411,70]],[[38413,937425],[-1695,2109],[-331,1545],[-1320,2645],[530,804],[403,3101],[38,5653],[2426,-416],[2905,1304],[905,1071],[1222,2916],[1184,4349],[538,5906],[-329,649],[1231,3476],[365,2385],[846,2065],[658,2577],[521,-1587],[1146,663],[1622,2412],[1470,3493],[882,527],[-302,-3710],[454,-2622],[-62,3461],[380,972],[-494,2433],[-541,46],[1260,3273],[1370,1209],[-523,-1007],[415,-852],[3297,1404],[1421,2118],[704,1933],[1322,4593],[409,808],[627,-1392],[915,-472],[117,-1342],[1298,-97],[153,-1576],[-589,-1821],[-1263,-1269],[606,-390],[-400,-1319],[1303,-54],[456,606],[-100,1673],[703,1368],[285,1695],[248,-1305],[706,928],[682,-1755],[-272,-1975],[1375,-2189],[693,2096],[1211,87],[987,691],[970,-830],[279,-2575],[299,2682],[989,-1071],[-561,-2519],[5,-1532],[1009,-525],[-1482,-681],[2474,169],[-499,-2280],[1552,-378],[326,-1080],[240,1607],[1280,271],[-195,-2495],[904,1573],[845,524],[665,1466],[1963,-425],[886,-1703],[688,50],[281,-1515],[1081,464],[877,-2131],[2068,-1579],[1439,785],[1493,-1038],[433,638],[1637,-3240],[1773,-387],[359,912],[3399,1866],[1396,-1344],[1104,-2165],[387,-1505],[1266,-1051],[1131,-2960],[450,854],[588,-630],[-1,-21362]],[[54479,890783],[-578,0],[-10,-1617],[-6227,42],[-4789,-36],[-1,3200],[-592,6],[0,3250],[-769,-10],[8,6456],[-205,26],[-5,6430],[-226,1957]],[[41085,910487],[1578,205],[202,-2556],[-311,-1225],[120,-2178],[-263,-1028],[215,-1763],[590,-1196],[375,540],[1138,-445],[965,699],[321,-1177],[667,-159],[982,797],[546,-2004],[189,2045],[810,3513],[796,-959],[609,527],[-495,1902],[-1494,1020],[-695,-1271],[194,3234],[-839,3465],[-836,788],[-422,2410],[386,1581],[446,30],[876,-3094],[-154,-2498],[448,-1913],[931,-1944],[1114,1832],[1074,-3146],[1511,331],[131,1770],[-331,2163],[-932,-162],[-460,1241],[-885,-263],[-253,-1860],[-717,-285],[-1099,3517],[232,3056],[871,1516],[-974,1717],[-1121,-1076],[-1026,-153],[-389,1249],[-528,-564],[-2241,1824],[-397,5492],[-677,3578],[-1097,2080],[-2353,5735]],[[46592,855663],[131,-1524],[-910,378],[779,1146]],[[20846,858392],[155,-1918],[1767,-2169],[1395,2514],[527,-232],[506,-1478],[153,-2243],[1093,-1044],[302,-1308],[1483,-327],[899,-741],[-443,-2851],[-1263,664],[-756,-2937],[125,-925],[-599,-398],[122,1508],[-581,2032],[-993,769],[95,1587],[-980,2254],[-777,1164],[-1179,-1499],[-406,-1269],[-853,1089],[-307,2233],[515,5525]],[[40155,909679],[-378,-812],[-1698,-1707],[2076,2519]],[[46153,848898],[640,3384],[128,1617],[836,-1042],[-394,-958],[1743,358],[1080,995],[1027,4968],[-512,5797],[-74,2808],[-783,2760],[-729,205],[138,2075],[1089,-245],[770,2178],[52,1988],[-320,1965],[-760,1982],[-574,-2906],[-898,82],[-597,-1411],[-710,-399],[-196,-1163],[-840,-1617],[-252,-2634],[-446,-1194],[-161,3173],[-951,2836],[-459,-1140],[680,-1515],[9,-1792],[-1367,2870],[-2018,-58],[-2019,-2251],[-807,901],[-2508,1784],[-689,2790],[279,1486],[-107,1445],[-749,1760],[-607,2842],[664,-527],[574,1254],[301,1828],[876,-777],[601,-2903],[499,-323],[640,1345],[-382,828],[-828,195],[-166,-711],[-669,2577],[-1941,1613],[-1534,482],[-1420,2818],[-465,461],[786,2442],[578,22],[0,1593],[845,1741],[325,-909],[992,2481],[418,1888],[1044,1672],[643,-1028],[1215,99],[319,783],[-1041,1553],[504,1846],[720,1193],[1099,506],[107,-679],[853,2834],[831,668]],[[129335,693546],[271,-1010],[-142,-1955],[-385,2864],[256,101]],[[133465,694933],[144,-1619],[-433,-1116],[-420,1401],[709,1334]],[[129050,698432],[385,-3029],[-187,-665],[-381,868],[233,1060],[-50,1766]],[[128271,699419],[264,-2151],[-73,-1620],[899,-5179],[112,-1526],[-465,199],[-651,4105],[-450,3522],[53,2603],[311,47]],[[132791,699517],[329,-1553],[-33,-2741],[-745,304],[319,2136],[-199,1261],[329,593]],[[127590,701351],[340,-1447],[-98,-960],[-490,-120],[14,2204],[234,323]],[[126995,702605],[287,-601],[-587,-1676],[300,2277]],[[127349,703974],[-507,-707],[254,1440],[253,-733]],[[126549,705223],[400,-333],[-240,-1814],[-293,1014],[133,1133]],[[127577,705503],[192,-1281],[-213,-946],[-252,1520],[273,707]],[[126975,710441],[673,-1209],[-593,136],[46,-1542],[-470,1638],[344,977]],[[127738,711890],[119,-2595],[-286,1329],[167,1266]],[[132951,712558],[-517,-394],[513,1288],[4,-894]],[[127377,716539],[387,-260],[-15,-2495],[-236,369],[-706,-1255],[-240,-1211],[-257,709],[519,3076],[548,1067]],[[126878,720140],[451,-579],[750,57],[384,-2788],[-191,-1469],[383,-1822],[435,266],[497,-1761],[456,-2620],[47,-3196],[267,734],[169,-1960],[371,-1718],[-850,2044],[-552,-1434],[684,586],[160,-2342],[299,487],[445,-2791],[-464,-922],[454,-352],[205,1480],[89,-3147],[-431,-827],[396,-512],[101,-2502],[-398,-59],[421,-1193],[-183,-2479],[-613,702],[-449,4336],[-561,-35],[258,2640],[-329,-710],[132,1822],[-300,-502],[-725,2251],[-725,264],[28,1947],[514,-21],[-361,1667],[236,2818],[-439,-873],[-448,796],[643,3530],[-238,1458],[-150,5160],[-814,306],[-187,1877],[133,1386]],[[133954,721013],[796,-683],[442,-1861],[432,-443],[118,-1890],[501,-841],[396,492],[280,-2136],[-1,-1873],[-414,-2628],[68,-3449],[429,-5569],[-359,-1662],[-236,-2416],[-441,-2702],[-867,-2699],[-213,1932],[-286,-2060],[-269,663],[-207,4192],[490,1686],[-537,-477],[-156,1948],[582,2169],[-76,7458],[-887,5088],[-486,-470],[-72,869],[-950,-2430],[-396,-118],[344,-1651],[-545,-5283],[-588,1664],[-115,2845]],[[312327,9345],[187,-607]],[[312514,8738],[-15,-1699]],[[312499,7039],[-350,67]],[[312149,7106],[17,912]],[[312166,8018],[43,812]],[[312209,8830],[118,515]],[[312084,13310],[6,-1330]],[[312090,11980],[-147,-91]],[[311943,11889],[-157,1158]],[[311786,13047],[223,739]],[[312009,13786],[75,-476]],[[312224,10808],[178,-1249]],[[312402,9559],[-75,-214]],[[312209,8830],[-202,83]],[[312007,8913],[-56,276]],[[311951,9189],[-19,1837]],[[311932,11026],[292,-218]],[[313107,15065],[-14,-2951]],[[313093,12114],[-156,-33]],[[312937,12081],[5,365]],[[312942,12446],[-35,2687]],[[312907,15133],[200,-68]],[[312774,6524],[70,-1308]],[[312844,5216],[-339,-42]],[[312505,5174],[62,1491]],[[312567,6665],[207,-141]],[[312709,10759],[26,-1200]],[[312735,9559],[-333,0]],[[312224,10808],[123,645]],[[312347,11453],[362,-694]],[[315123,11875],[54,-128]],[[315177,11747],[78,-1803]],[[315255,9944],[-163,-1770]],[[315092,8174],[-119,1033]],[[314973,9207],[-63,762]],[[314910,9969],[144,1736]],[[315054,11705],[69,170]],[[314670,11208],[37,-330]],[[314707,10878],[60,-642]],[[314767,10236],[-199,-737]],[[314568,9499],[-72,1129]],[[314496,10628],[174,580]],[[314052,6833],[264,-476]],[[314316,6357],[-19,-702]],[[314297,5655],[-318,75]],[[313979,5730],[73,1103]],[[312567,6665],[-68,374]],[[312514,8738],[144,137]],[[312658,8875],[116,-2351]],[[312942,12446],[-192,449]],[[312750,12895],[-16,-17]],[[312734,12878],[-7,2191]],[[312727,15069],[180,64]],[[313370,8907],[-65,-415]],[[313305,8492],[-209,82]],[[313096,8574],[-80,-28]],[[313016,8546],[-82,705]],[[312934,9251],[27,1093]],[[312961,10344],[345,-244],[64,-1193]],[[313305,8492],[-14,-2847]],[[313291,5645],[-154,398]],[[313137,6043],[-41,2531]],[[314464,12204],[-98,-1501]],[[314366,10703],[-105,-151]],[[314261,10552],[-75,983]],[[314186,11535],[35,729]],[[314221,12264],[129,637]],[[314350,12901],[114,-697]],[[314016,15104],[-14,-2136]],[[314002,12968],[-54,9]],[[313948,12977],[-196,-375]],[[313752,12602],[-27,1006]],[[313725,13608],[25,1394]],[[313750,15002],[266,102]],[[313604,15085],[-4,-1775]],[[313600,13310],[-8,-955]],[[313592,12355],[-45,-184]],[[313547,12171],[-454,-57]],[[313107,15065],[497,20]],[[314264,15070],[-76,-2600]],[[314188,12470],[-186,498]],[[314016,15104],[248,-34]],[[315464,13512],[1,-2420]],[[315465,11092],[-66,434]],[[315399,11526],[-159,1610]],[[315240,13136],[-103,1307]],[[315137,14443],[122,138]],[[315259,14581],[205,-1069]],[[314938,14053],[76,-2457]],[[315014,11596],[-176,-329]],[[314838,11267],[34,2700]],[[314872,13967],[51,292]],[[314923,14259],[15,-206]],[[315375,10330],[63,-1609]],[[315438,8721],[6,-427]],[[315444,8294],[-234,-827]],[[315210,7467],[-116,640]],[[315094,8107],[-2,67]],[[315255,9944],[120,386]],[[313784,8891],[255,-1303]],[[314039,7588],[13,-755]],[[313979,5730],[-242,-150]],[[313737,5580],[-39,3313]],[[313698,8893],[16,19]],[[313714,8912],[70,-21]],[[315465,11092],[-90,-762]],[[315177,11747],[222,-221]],[[313725,9097],[-11,-185]],[[313698,8893],[-269,126]],[[313429,9019],[231,2602]],[[313660,11621],[65,-2524]],[[314361,14911],[31,-1699]],[[314392,13212],[-42,-311]],[[314221,12264],[-33,206]],[[314264,15070],[97,-159]],[[312306,11771],[41,-318]],[[311932,11026],[-107,569]],[[311825,11595],[118,294]],[[312090,11980],[216,-209]],[[312937,12081],[24,-1737]],[[312934,9251],[-27,-13]],[[312907,9238],[-172,321]],[[312709,10759],[41,2136]],[[312505,5174],[-359,-115]],[[312146,5059],[3,2047]],[[314634,8728],[-21,-893]],[[314613,7835],[-92,-362]],[[314521,7473],[-160,1420]],[[314361,8893],[201,525]],[[314562,9418],[72,-690]],[[312295,14639],[81,-1251]],[[312376,13388],[-70,-1617]],[[312084,13310],[211,1329]],[[312007,8913],[159,-895]],[[312146,5059],[-281,903],[86,3227]],[[315210,7467],[60,-308]],[[315270,7159],[221,-1461]],[[315491,5698],[-308,-32]],[[315009,6674],[174,-1008]],[[315009,6674],[81,1384]],[[315090,8058],[4,49]],[[314186,11535],[-217,-675]],[[313969,10860],[-21,2117]],[[312009,13786],[157,1824]],[[312166,15610],[129,-971]],[[313137,6043],[-273,-821]],[[312864,5222],[152,3324]],[[314838,11267],[-131,-389]],[[314670,11208],[-8,753]],[[314662,11961],[28,1346]],[[314690,13307],[76,779]],[[314766,14086],[106,-119]],[[313547,12171],[113,-550]],[[313429,9019],[-59,-112]],[[314973,9207],[-339,-479]],[[314562,9418],[6,81]],[[314767,10236],[143,-267]],[[314776,6994],[-112,-1632]],[[314664,5362],[-367,293]],[[314316,6357],[205,1116]],[[314613,7835],[163,-841]],[[312679,13385],[55,-507]],[[312376,13388],[303,-3]],[[315090,8058],[-314,-1064]],[[314662,11961],[-198,243]],[[314392,13212],[143,200]],[[314535,13412],[155,-105]],[[312679,13385],[-109,1772]],[[312570,15157],[157,-88]],[[313752,12602],[-160,-247]],[[313600,13310],[125,298]],[[314496,10628],[-130,75]],[[313604,15085],[146,-83]],[[315240,13136],[-117,-1261]],[[315054,11705],[-40,-109]],[[314938,14053],[199,390]],[[315043,5450],[-34,1224]],[[315043,5450],[-379,-88]],[[312864,5222],[-20,-6]],[[312658,8875],[249,363]],[[314001,9350],[196,-57]],[[314197,9293],[164,-400]],[[314039,7588],[-38,1762]],[[313784,8891],[217,459]],[[313969,10860],[-244,-1763]],[[313737,5580],[-446,65]],[[314261,10552],[-64,-1259]],[[312166,15610],[404,-453]],[[315579,8262],[226,-901]],[[315805,7361],[-150,-1087]],[[315655,6274],[-385,885]],[[315444,8294],[135,-32]],[[314849,14669],[-83,-583]],[[314535,13412],[108,1312]],[[314643,14724],[206,-55]],[[318309,12804],[169,-865],[-544,829],[375,36]],[[316158,12800],[-233,-1215]],[[315925,11585],[-15,-114]],[[315910,11471],[23,1757]],[[315933,13228],[225,-428]],[[315714,13935],[-106,-832]],[[315608,13103],[-144,409]],[[315259,14581],[455,-646]],[[315655,6274],[-164,-576]],[[315910,11471],[-22,-197]],[[315888,11274],[-160,-129]],[[315728,11145],[-34,40]],[[315694,11185],[-86,1918]],[[315714,13935],[219,-707]],[[315888,11274],[293,-1348]],[[316181,9926],[-216,-625]],[[315965,9301],[-242,491]],[[315723,9792],[5,1353]],[[315723,9792],[-144,-1530]],[[315438,8721],[211,2085]],[[315649,10806],[45,379]],[[315649,10806],[-184,286]],[[316256,11346],[-331,239]],[[316158,12800],[154,393],[-56,-1847]],[[316256,11346],[125,-1004],[-200,-416]],[[315965,9301],[-160,-1940]],[[316936,9055],[328,-560],[-757,-909],[-91,685],[520,784]],[[318661,1986],[376,-1085],[-740,-781],[24,1181],[340,685]],[[314361,14911],[282,-187]],[[123928,718235],[-2,-1610]],[[119111,747595],[-67,-5]],[[124871,753168],[418,537]],[[71986,766650],[158,17]],[[56428,729876],[0,-164]],[[126985,748600],[107,525]],[[126818,747787],[-267,-754]],[[61672,65312],[272,-274]],[[314849,14669],[74,-410]],[[315183,5666],[-140,-216]],[[311825,11595],[-39,1452]],[[253891,243332],[-3,424]],[[297006,439075],[21,-79]],[[273150,218795],[-218,2571],[-109,2556],[341,-5125]],[[273164,218797],[-14,-2]],[[275036,140768],[-16,1]],[[274871,140335],[3,-76]],[[268559,210807],[-4,-26]],[[258410,236520],[0,355]],[[272837,223331],[-14,0]],[[274173,206960],[19,0]],[[275584,178509],[-145,-584]],[[275994,173067],[-63,2]],[[275922,173070],[-37,2]],[[272518,253791],[20,18]],[[272125,254343],[81,-132]],[[256680,462075],[-142,-2897],[-384,-10769]],[[256154,448409],[-883,-7],[0,-983]],[[254488,462036],[2192,39]],[[256154,448409],[1065,-7]],[[249637,222999],[-31,137]],[[248195,214699],[-70,-748]],[[247232,214954],[0,260]],[[247232,215317],[15,318]],[[301353,460902],[-185,-724]],[[301101,460137],[28,-397]],[[301793,457791],[116,-445]],[[285769,400843],[123,37]],[[264771,527003],[-281,49]],[[267568,452013],[-852,-4103],[-108,-17]],[[266608,447893],[-26,-6]],[[266582,447887],[-16,-1]],[[266566,447886],[-30,-6]],[[266536,447880],[-6,-1]],[[256680,462075],[-375,16538],[12,3500],[187,5880],[609,12037],[445,5943],[542,3980],[721,3116],[-1423,3912],[-936,-37],[-588,-3704],[-267,-718],[-95,-2358],[-427,343]],[[247207,537862],[1281,13508]],[[248488,551370],[1322,13439]],[[249810,564809],[408,-727],[1834,5024],[865,1148],[2109,-5688],[7666,-20686],[271,-4739],[574,-3230],[509,900],[683,396],[-47,-2079],[105,-3301],[426,-3438],[360,1156],[708,-243],[385,-2004],[-455,-3293],[3005,-8985],[1103,-32532],[-926,-12370],[-34,-3060],[-156,-2886],[-328,-976],[-521,-3379],[-656,-1036],[-180,-1472],[-60,-3681],[110,-1615]],[[252129,567028],[-1583,-4120],[166,-1627],[582,1037],[-142,551],[872,1783],[743,3451],[-638,-1075]],[[248488,551370],[-1963,212],[-2260,-6869],[-1513,-4210]],[[249572,564554],[238,255]],[[282592,309414],[10,-65]],[[289029,404122],[-16,45]],[[293679,426705],[-79,470]],[[286839,484138],[-17,6]],[[276897,457877],[-3,4558]],[[276894,462435],[2305,5850],[8,2378],[-220,544],[-164,5160],[-363,3502],[1422,3362],[1923,0],[3353,0],[997,8619],[109,340]],[[267767,442766],[-50,-4]],[[267568,452013],[114,-1687],[1085,-3482],[787,0],[3209,9884],[2039,2175]],[[274802,458903],[-16,-6460]],[[274802,458903],[1209,1289],[883,2243]],[[275537,276578],[-263,-628]],[[273916,275250],[-11,-827]],[[273920,274333],[-20,-184]],[[228015,167092],[147,-2633],[-252,2651],[105,-18]],[[228180,184437],[70,-94]],[[229313,193901],[29,366]],[[230757,204203],[-190,587]],[[229828,205636],[-9,-8]],[[229431,197365],[-30,-1032]],[[228487,190418],[-16,-156]],[[286226,362368],[89,-504]],[[283710,365528],[174,-301]],[[286242,357857],[63,-1057]],[[286254,356334],[304,311]],[[286558,356645],[136,36]],[[284458,394060],[-9,-959]],[[151607,571679],[12,2074],[1993,-3664],[1312,-1342],[815,1107],[372,2584],[-289,2342],[-137,2706],[722,1361],[0,1194],[-873,3181],[648,-1]],[[156182,583221],[153,1]],[[156335,583222],[770,0]],[[253979,502714],[-8,-1]],[[242231,539612],[9,872]],[[242245,540522],[75,212]],[[242329,540727],[187,592]],[[242526,541319],[224,-823]],[[288652,406259],[12,7]],[[288613,408309],[-8,430]],[[290026,386798],[-57,0]],[[287992,379951],[5,43]],[[287430,351414],[50,-2]],[[287480,351412],[118,4]],[[287598,351416],[-258,-2]],[[280248,301457],[-33,176]],[[156182,583221],[153,1]]],"transform":{"scale":[0.00035892617892657177,0.00005371486851395936],"translate":[-179.1473400003406,17.67439566600018]}} diff --git a/float-no-zero/examples/data/topojson/world-110m.json b/float-no-zero/examples/data/topojson/world-110m.json new file mode 100644 index 0000000000..2f4dd1fa57 --- /dev/null +++ b/float-no-zero/examples/data/topojson/world-110m.json @@ -0,0 +1 @@ +{"type":"Topology","transform":{"scale":[0.0036000360003600037,0.0016925586033320111],"translate":[-180,-85.60903777459777]},"objects":{"land":{"type":"MultiPolygon","arcs":[[[0]],[[1]],[[2]],[[3]],[[4]],[[5]],[[6]],[[7,8,9]],[[10,11]],[[12]],[[13]],[[14]],[[15]],[[16]],[[17]],[[18]],[[19]],[[20]],[[21]],[[22]],[[23]],[[24]],[[25]],[[26]],[[27]],[[28]],[[29,30]],[[31]],[[32]],[[33]],[[34]],[[35]],[[36]],[[37]],[[38]],[[39]],[[40]],[[41]],[[42,43]],[[44]],[[45]],[[46]],[[47,48,49,50]],[[51]],[[52]],[[53]],[[54]],[[55]],[[56]],[[57]],[[58]],[[59]],[[60]],[[61]],[[62,63]],[[64]],[[65]],[[66]],[[67]],[[68]],[[69]],[[70]],[[71]],[[72]],[[73]],[[74]],[[75]],[[76,77]],[[78]],[[79]],[[80]],[[81]],[[82]],[[83]],[[84]],[[85]],[[86]],[[87]],[[88]],[[89]],[[90,91]],[[92]],[[93]],[[94]],[[95]],[[96]],[[97]],[[98]],[[99]],[[100]],[[101]],[[102]],[[103]],[[104]],[[105]],[[106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,137,138,139,140,141,142,143,144,145,146,147,148,149,150,151,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,189,190,191,192,193,194,195,196,197,198,199,200,201,202,203,204,205,206,207,208,209,210,211,212,213,214,215,216,217,218,219,220,221]],[[222,223]],[[224]],[[225]],[[226]],[[227]],[[228]],[[229]],[[230,231,232,233]],[[234]],[[235]],[[236]],[[237]],[[238]],[[239]],[[240]],[[241]],[[242,243,244,245,246,247,248,249,250,251,252,253,254,255,256,257,258,259,260,261,262,263,264,265,266,267,268,269,270,271,272,273,274,275,276,277,278,279,280,281,282,283,284,285,286,287,288,289,290,291,292,293,294,295,296,297,298,299,300,301,302,303,304,305,306,307,308,309,310,311,312,313,314,315,316,317,318,319,320,321,322,323,324,325,326,327,328,329,330,331,332,333,334,335,336,337,338,339,340,341,342,343,344,345,346,347,348,349,350,351,352,353,354,355,356,357,358,359,360,361,362,363,364,365,366,367,368,369,370,371,372,373,374,375,376,377,378,379,380,381,382,383,384,385,386,387,388,389,390,391,392,393,394,395,396,397,398,399,400,401,402,403,404,405,406,407,408,409,410,411,412,413,414,415,416,417,418,419,420,421,422,423,424,425,426,427,428,429,430,431,432,433,434,435,436,437,438,439,440,441,442,443,444,445,446,447,448,449,450,451,452,453,454,455,456,457,458,459,460,461,462,463,464,465,466,467,468,469,470,471,472,473,474,475,476,477],[478,479,480,481,482,483,484]],[[485]],[[486]],[[487]],[[488]],[[489]],[[490]],[[491]],[[492]],[[493]],[[494]],[[495]],[[496]],[[497]],[[498]]]},"countries":{"type":"GeometryCollection","geometries":[{"type":"Polygon","arcs":[[499,500,501,502,503,504]],"id":4},{"type":"MultiPolygon","arcs":[[[505,506,352,507]],[[354,508,509]]],"id":24},{"type":"Polygon","arcs":[[510,511,414,512,513,514]],"id":8},{"type":"Polygon","arcs":[[312,515,314,516,517]],"id":784},{"type":"MultiPolygon","arcs":[[[518,11]],[[519,520,521,166,522,168,523,524]]],"id":32},{"type":"Polygon","arcs":[[525,526,527,528,529]],"id":51},{"type":"MultiPolygon","arcs":[[[0]],[[1]],[[2]],[[3]],[[4]],[[5]],[[6]],[[530,531]]],"id":10},{"type":"Polygon","arcs":[[13]],"id":260},{"type":"MultiPolygon","arcs":[[[14]],[[24]]],"id":36},{"type":"Polygon","arcs":[[532,533,534,535,536,537,538]],"id":40},{"type":"MultiPolygon","arcs":[[[539,-528]],[[484,540,479,541,-526,542,543]]],"id":31},{"type":"Polygon","arcs":[[544,545,546]],"id":108},{"type":"Polygon","arcs":[[547,548,549,550,437]],"id":56},{"type":"Polygon","arcs":[[551,552,553,554,366]],"id":204},{"type":"Polygon","arcs":[[555,556,557,-553,558,559]],"id":854},{"type":"Polygon","arcs":[[560,561,289,562]],"id":50},{"type":"Polygon","arcs":[[563,404,564,565,566,567]],"id":100},{"type":"MultiPolygon","arcs":[[[71]],[[73]],[[74]]],"id":44},{"type":"Polygon","arcs":[[568,569,570]],"id":70},{"type":"Polygon","arcs":[[571,572,573,574,575]],"id":112},{"type":"Polygon","arcs":[[576,145,577]],"id":84},{"type":"Polygon","arcs":[[578,579,580,581,-525]],"id":68},{"type":"Polygon","arcs":[[-521,582,-581,583,584,585,586,587,588,164,589]],"id":76},{"type":"Polygon","arcs":[[48,590]],"id":96},{"type":"Polygon","arcs":[[591,592]],"id":64},{"type":"Polygon","arcs":[[593,594,595,596]],"id":72},{"type":"Polygon","arcs":[[597,598,599,600,601,602,603]],"id":140},{"type":"MultiPolygon","arcs":[[[84]],[[85]],[[86]],[[87]],[[88]],[[96]],[[97]],[[99]],[[101]],[[103]],[[604,107,605,109,606,111,607,113,608,115,609,117,610,199,611,201,612,215,613,217,614,219,615,221]],[[616,223]],[[224]],[[225]],[[226]],[[227]],[[229]],[[230,617,232,618]],[[235]],[[237]],[[238]],[[240]],[[241]],[[485]],[[486]],[[488]],[[489]],[[490]],[[496]],[[497]]],"id":124},{"type":"Polygon","arcs":[[-536,619,620,621]],"id":756},{"type":"MultiPolygon","arcs":[[[-519,622,623,624]],[[-524,169,625,171,626,-579]]],"id":152},{"type":"MultiPolygon","arcs":[[[64]],[[627,274,628,276,629,278,630,280,631,632,633,634,635,-593,636,637,638,639,-503,640,641,642,643,644,645]]],"id":156},{"type":"Polygon","arcs":[[369,646,647,648,-556,649]],"id":384},{"type":"Polygon","arcs":[[650,651,652,359,653,654,655,656,-604,657]],"id":120},{"type":"Polygon","arcs":[[658,659,-545,660,661,662,663,-508,353,-510,664,-602,665]],"id":180},{"type":"Polygon","arcs":[[-509,355,666,-658,-603,-665]],"id":178},{"type":"Polygon","arcs":[[667,174,668,155,669,-585,670]],"id":170},{"type":"Polygon","arcs":[[178,671,151,672]],"id":188},{"type":"Polygon","arcs":[[70]],"id":192},{"type":"Polygon","arcs":[[77,673]],"id":-99},{"type":"Polygon","arcs":[[76,-674]],"id":196},{"type":"Polygon","arcs":[[-538,674,675,676]],"id":203},{"type":"Polygon","arcs":[[445,677,-675,-537,-622,678,679,-549,680,441,681]],"id":276},{"type":"Polygon","arcs":[[337,682,683,684]],"id":262},{"type":"MultiPolygon","arcs":[[[92]],[[-682,442,685,444]]],"id":208},{"type":"Polygon","arcs":[[62,686]],"id":214},{"type":"Polygon","arcs":[[687,688,689,690,691,384,692,693]],"id":12},{"type":"Polygon","arcs":[[173,-668,694]],"id":218},{"type":"Polygon","arcs":[[333,695,696,390,697]],"id":818},{"type":"Polygon","arcs":[[698,699,700,336,-685]],"id":232},{"type":"Polygon","arcs":[[431,701,433,702,427,703,429,704]],"id":724},{"type":"Polygon","arcs":[[450,705,706]],"id":233},{"type":"Polygon","arcs":[[-684,707,708,709,710,711,712,-699]],"id":231},{"type":"Polygon","arcs":[[713,452,714,715,455,716,717]],"id":246},{"type":"MultiPolygon","arcs":[[[18]],[[19]],[[20]]],"id":242},{"type":"Polygon","arcs":[[12]],"id":238},{"type":"MultiPolygon","arcs":[[[718,719,163,-589]],[[82]],[[720,-679,-621,721,426,-703,434,722,436,-551]]],"id":250},{"type":"Polygon","arcs":[[356,723,-651,-667]],"id":266},{"type":"MultiPolygon","arcs":[[[724,90]],[[725,726,727,728,729,730,731,732]]],"id":826},{"type":"Polygon","arcs":[[400,733,-543,-530,734]],"id":268},{"type":"Polygon","arcs":[[368,-650,-560,735]],"id":288},{"type":"Polygon","arcs":[[736,737,374,738,739,740,-648]],"id":324},{"type":"Polygon","arcs":[[741,377]],"id":270},{"type":"Polygon","arcs":[[375,742,-739]],"id":624},{"type":"Polygon","arcs":[[357,-652,-724]],"id":226},{"type":"MultiPolygon","arcs":[[[78]],[[407,743,409,744,411,745,413,-512,746,-566,747]]],"id":300},{"type":"Polygon","arcs":[[498]],"id":304},{"type":"Polygon","arcs":[[185,748,-578,146,749,750]],"id":320},{"type":"Polygon","arcs":[[161,751,-587,752]],"id":328},{"type":"Polygon","arcs":[[182,753,754,-750,147,755,149,756]],"id":340},{"type":"Polygon","arcs":[[757,-571,758,417,759,419,760,761]],"id":191},{"type":"Polygon","arcs":[[-687,63]],"id":332},{"type":"Polygon","arcs":[[-533,762,763,764,765,-762,766]],"id":348},{"type":"MultiPolygon","arcs":[[[26]],[[767,30]],[[31]],[[32]],[[35]],[[36]],[[39]],[[40]],[[768,43]],[[44]],[[45]],[[769,50]],[[46]]],"id":360},{"type":"Polygon","arcs":[[-639,770,-637,-592,-636,771,-563,290,772,292,773,294,774,296,775]],"id":356},{"type":"Polygon","arcs":[[91,-725]],"id":372},{"type":"Polygon","arcs":[[776,-505,777,300,778,302,779,780,781,-540,-527,-542,480]],"id":364},{"type":"Polygon","arcs":[[782,783,784,785,786,-781,787]],"id":368},{"type":"Polygon","arcs":[[100]],"id":352},{"type":"Polygon","arcs":[[788,789,-698,391,790,791,792]],"id":376},{"type":"MultiPolygon","arcs":[[[79]],[[80]],[[793,421,794,423,795,425,-722,-620,-535]]],"id":380},{"type":"Polygon","arcs":[[61]],"id":388},{"type":"Polygon","arcs":[[796,-785,797,332,-790,798,-793]],"id":400},{"type":"MultiPolygon","arcs":[[[75]],[[81]],[[83]]],"id":392},{"type":"Polygon","arcs":[[799,800,482,801,-643,802]],"id":398},{"type":"Polygon","arcs":[[342,803,804,805,-710,806]],"id":404},{"type":"Polygon","arcs":[[-803,-642,807,808]],"id":417},{"type":"Polygon","arcs":[[809,810,811,283]],"id":116},{"type":"Polygon","arcs":[[265,812,267,813]],"id":410},{"type":"Polygon","arcs":[[-515,814,815,816]],"id":-99},{"type":"Polygon","arcs":[[304,817,-783]],"id":414},{"type":"Polygon","arcs":[[818,819,-634,820,-811]],"id":418},{"type":"Polygon","arcs":[[-791,392,821]],"id":422},{"type":"Polygon","arcs":[[370,822,372,823,-737,-647]],"id":430},{"type":"Polygon","arcs":[[824,-694,825,388,826,-697,827,828]],"id":434},{"type":"Polygon","arcs":[[52]],"id":144},{"type":"Polygon","arcs":[[829]],"id":426},{"type":"Polygon","arcs":[[830,448,831,-572,832]],"id":440},{"type":"Polygon","arcs":[[-680,-721,-550]],"id":442},{"type":"Polygon","arcs":[[449,-707,833,-573,-832]],"id":428},{"type":"Polygon","arcs":[[-692,834,835,836,837,383]],"id":504},{"type":"Polygon","arcs":[[838,839]],"id":498},{"type":"Polygon","arcs":[[23]],"id":450},{"type":"Polygon","arcs":[[840,-577,-749,186,841,188,842,190,843,192,844,194,845]],"id":484},{"type":"Polygon","arcs":[[-817,846,-567,-747,-511]],"id":807},{"type":"Polygon","arcs":[[847,-689,848,-557,-649,-741,849]],"id":466},{"type":"Polygon","arcs":[[287,-561,-772,-635,-820,850]],"id":104},{"type":"Polygon","arcs":[[416,-759,-570,851,-815,-514,852]],"id":499},{"type":"Polygon","arcs":[[853,-645]],"id":496},{"type":"Polygon","arcs":[[854,344,855,856,347,857,858,859,860,861,862]],"id":508},{"type":"Polygon","arcs":[[863,379,864,-690,-848]],"id":478},{"type":"Polygon","arcs":[[-863,865,866]],"id":454},{"type":"MultiPolygon","arcs":[[[285,867]],[[-770,47,-591,49]]],"id":458},{"type":"Polygon","arcs":[[351,-507,868,-595,869]],"id":516},{"type":"Polygon","arcs":[[17]],"id":540},{"type":"Polygon","arcs":[[-558,-849,-688,-825,870,-656,871,-554]],"id":562},{"type":"Polygon","arcs":[[361,872,363,873,365,-555,-872,-655]],"id":566},{"type":"Polygon","arcs":[[179,874,181,-757,150,-672]],"id":558},{"type":"Polygon","arcs":[[-681,-548,438,875,440]],"id":528},{"type":"MultiPolygon","arcs":[[[876,-718,877,457,878,459,879,461]],[[487]],[[492]],[[493]]],"id":578},{"type":"Polygon","arcs":[[-771,-638]],"id":524},{"type":"MultiPolygon","arcs":[[[15]],[[16]]],"id":554},{"type":"MultiPolygon","arcs":[[[880,319,881,882,883,-517,315,884,317]],[[-516,313]]],"id":512},{"type":"Polygon","arcs":[[-640,-776,297,885,299,-778,-504]],"id":586},{"type":"Polygon","arcs":[[175,886,177,-673,152,887,154,-669]],"id":591},{"type":"Polygon","arcs":[[-627,172,-695,-671,-584,-580]],"id":604},{"type":"MultiPolygon","arcs":[[[51]],[[54]],[[55]],[[56]],[[57]],[[58]],[[59]]],"id":608},{"type":"MultiPolygon","arcs":[[[37]],[[38]],[[-769,42]],[[41]]],"id":598},{"type":"Polygon","arcs":[[-678,446,888,-833,-576,889,890,-676]],"id":616},{"type":"Polygon","arcs":[[60]],"id":630},{"type":"Polygon","arcs":[[262,891,264,-814,892,269,893,271,894,273,-628,895]],"id":408},{"type":"Polygon","arcs":[[-705,430]],"id":620},{"type":"Polygon","arcs":[[-582,-583,-520]],"id":600},{"type":"Polygon","arcs":[[-799,-789]],"id":275},{"type":"Polygon","arcs":[[308,896,310,897]],"id":634},{"type":"Polygon","arcs":[[898,-840,899,403,-564,900,-765]],"id":642},{"type":"MultiPolygon","arcs":[[[89]],[[-889,447,-831]],[[102]],[[104]],[[105]],[[228]],[[234]],[[236]],[[239]],[[901,243,902,245,903,247,904,249,905,251,906,253,907,255,908,257,909,259,910,261,-896,-646,-854,-644,-802,483,-544,-734,401,911,-574,-834,-706,451,-714,-877,912,913,914,915,464,916,466,917,468,918,470,919,920,473,921,475,922,477]],[[491]],[[494]],[[495]]],"id":643},{"type":"Polygon","arcs":[[923,-546,-660,924]],"id":646},{"type":"Polygon","arcs":[[-691,-865,380,-835]],"id":732},{"type":"Polygon","arcs":[[925,329,926,331,-798,-784,-818,305,927,307,-898,311,-518,-884,928]],"id":682},{"type":"Polygon","arcs":[[-599,929,-828,-696,334,-700,-713,930,931,932]],"id":729},{"type":"Polygon","arcs":[[-711,-806,933,-666,-601,934,-932,935]],"id":728},{"type":"Polygon","arcs":[[378,-864,-850,-740,-743,376,-742]],"id":686},{"type":"MultiPolygon","arcs":[[[25]],[[27]],[[28]],[[33]],[[34]]],"id":90},{"type":"Polygon","arcs":[[373,-738,-824]],"id":694},{"type":"Polygon","arcs":[[184,-751,-755,936]],"id":222},{"type":"Polygon","arcs":[[-708,-683,338,937,340,938]],"id":-99},{"type":"Polygon","arcs":[[-807,-709,-939,341]],"id":706},{"type":"Polygon","arcs":[[-568,-847,-816,-852,-569,-758,-766,-901]],"id":688},{"type":"Polygon","arcs":[[162,-720,939,-588,-752]],"id":740},{"type":"Polygon","arcs":[[-891,940,-763,-539,-677]],"id":703},{"type":"Polygon","arcs":[[-534,-767,-761,420,-794]],"id":705},{"type":"Polygon","arcs":[[-878,-717,456]],"id":752},{"type":"Polygon","arcs":[[941,-859]],"id":748},{"type":"Polygon","arcs":[[-797,-792,-822,393,942,-786]],"id":760},{"type":"Polygon","arcs":[[-871,-829,-930,-598,-657]],"id":148},{"type":"Polygon","arcs":[[-736,-559,-552,367]],"id":768},{"type":"Polygon","arcs":[[284,-868,286,-851,-819,-810]],"id":764},{"type":"Polygon","arcs":[[-808,-641,-502,943]],"id":762},{"type":"Polygon","arcs":[[-777,481,-801,944,-500]],"id":795},{"type":"Polygon","arcs":[[29,-768]],"id":626},{"type":"Polygon","arcs":[[53]],"id":780},{"type":"Polygon","arcs":[[-693,385,945,387,-826]],"id":788},{"type":"MultiPolygon","arcs":[[[399,-735,-529,-782,-787,-943,394,946,947,397,948]],[[949,-748,-565,405]]],"id":792},{"type":"Polygon","arcs":[[72]],"id":158},{"type":"Polygon","arcs":[[-804,343,-855,-867,950,-663,951,-661,-547,-924,952]],"id":834},{"type":"Polygon","arcs":[[-925,-659,-934,-805,-953]],"id":800},{"type":"Polygon","arcs":[[-912,402,-900,-839,-899,-764,-941,-890,-575]],"id":804},{"type":"Polygon","arcs":[[-590,165,-522]],"id":858},{"type":"MultiPolygon","arcs":[[[65]],[[66]],[[67]],[[68]],[[69]],[[118,953,120,954,122,955,124,956,126,957,128,958,130,959,132,960,134,961,136,962,138,963,140,964,142,-846,195,965,966,967,968,969,-611]],[[93]],[[95]],[[98]],[[-613,202,970,204,971,206,972,208,973,210,974,212,975,214]]],"id":840},{"type":"Polygon","arcs":[[-945,-800,-809,-944,-501]],"id":860},{"type":"Polygon","arcs":[[156,976,158,977,160,-753,-586,-670]],"id":862},{"type":"Polygon","arcs":[[282,-812,-821,-633]],"id":704},{"type":"MultiPolygon","arcs":[[[21]],[[22]]],"id":548},{"type":"Polygon","arcs":[[321,978,323,979,325,980,327,-929,-883,981]],"id":887},{"type":"Polygon","arcs":[[982,350,-870,-594,983,-860,-942,-858,348],[-830]],"id":710},{"type":"Polygon","arcs":[[-866,-862,984,-596,-869,-506,-664,-951]],"id":894},{"type":"Polygon","arcs":[[-984,-597,-985,-861]],"id":716}]}},"arcs":[[[31586,3163],[625,-23],[599,-58],[207,243],[147,208],[288,-243],[-82,-301],[-81,-266],[-582,81],[-621,-35],[-348,197],[0,23],[-152,174]],[[4524,4144],[169,220],[517,-93],[277,-185],[212,-209],[76,-266],[-533,-81],[-364,208],[-163,209],[-11,35],[-180,162]],[[34954,2940],[49,243],[593,162],[239,197],[174,254],[126,220],[168,209],[180,243],[141,0],[414,127],[419,-127],[342,-255],[120,-359],[33,-254],[11,-301],[-430,-186],[-452,-150],[-522,-139],[-582,-116],[-658,35],[-365,197]],[[15938,7061],[60,197],[332,-104],[359,-93],[332,104],[-158,-208],[-261,-151],[-386,47],[-278,208]],[[14643,7177],[202,127],[277,-139],[425,-231],[-164,23],[-359,58],[-381,162]],[[21575,8103],[174,104],[353,-81],[403,-46],[305,-81],[304,69],[163,-335],[-217,46],[-337,-23],[-343,23],[-376,-35],[-283,116],[-146,243]],[[29163,8241],[305,231],[190,70],[321,-23],[82,301],[16,219],[-6,475],[158,278],[256,93],[147,-220],[65,-220],[120,-267],[92,-254],[76,-267],[33,-266],[-49,-231],[-76,-220],[-326,-81],[-311,-116],[-364,11],[136,232],[-327,-81],[-310,-81],[-212,174],[-16,243]],[[794,704],[78,49],[94,61],[81,52],[41,26]],[[1088,892],[41,-1],[29,-10]],[[1158,881],[402,-246],[352,246],[63,34],[816,104],[265,-138],[130,-71],[419,-196],[789,-151],[625,-185],[1072,-139],[800,162],[1181,-116],[669,-185],[734,174],[773,162],[60,278],[-1094,23],[-898,139],[-234,231],[-745,128],[49,266],[103,243],[104,220],[-55,243],[-462,162],[-212,209],[-430,185],[675,-35],[642,93],[402,-197],[495,173],[457,220],[223,197],[-98,243],[-359,162],[-408,174],[-571,35],[-500,81],[-539,58],[-180,220],[-359,185],[-217,208],[-87,672],[136,-58],[250,-185],[457,58],[441,81],[228,-255],[441,58],[370,127],[348,162],[315,197],[419,58],[-11,220],[-97,220],[81,208],[359,104],[163,-196],[425,115],[321,151],[397,12],[375,57],[376,139],[299,128],[337,127],[218,-35],[190,-46],[414,81],[370,-104],[381,11],[364,81],[375,-57],[414,-58],[386,23],[403,-12],[413,-11],[381,23],[283,174],[337,92],[349,-127],[331,104],[300,208],[179,-185],[98,-208],[180,-197],[288,174],[332,-220],[375,-70],[321,-162],[392,35],[354,104],[418,-23],[376,-81],[381,-104],[147,254],[-180,197],[-136,209],[-359,46],[-158,220],[-60,220],[-98,440],[213,-81],[364,-35],[359,35],[327,-93],[283,-174],[119,-208],[376,-35],[359,81],[381,116],[342,70],[283,-139],[370,46],[239,451],[224,-266],[321,-104],[348,58],[228,-232],[365,-23],[337,-69],[332,-128],[218,220],[108,209],[278,-232],[381,58],[283,-127],[190,-197],[370,58],[288,127],[283,151],[337,81],[392,69],[354,81],[272,127],[163,186],[65,254],[-32,244],[-87,231],[-98,232],[-87,231],[-71,209],[-16,231],[27,232],[130,220],[109,243],[44,231],[-55,255],[-32,232],[136,266],[152,173],[180,220],[190,186],[223,173],[109,255],[152,162],[174,151],[267,34],[174,186],[196,115],[228,70],[202,150],[157,186],[218,69],[163,-151],[-103,-196],[-283,-174],[-120,-127],[-206,92],[-229,-58],[-190,-139],[-202,-150],[-136,-174],[-38,-231],[17,-220],[130,-197],[-190,-139],[-261,-46],[-153,-197],[-163,-185],[-174,-255],[-44,-220],[98,-243],[147,-185],[229,-139],[212,-185],[114,-232],[60,-220],[82,-232],[130,-196],[82,-220],[38,-544],[81,-220],[22,-232],[87,-231],[-38,-313],[-152,-243],[-163,-197],[-370,-81],[-125,-208],[-169,-197],[-419,-220],[-370,-93],[-348,-127],[-376,-128],[-223,-243],[-446,-23],[-489,23],[-441,-46],[-468,0],[87,-232],[424,-104],[311,-162],[174,-208],[-310,-185],[-479,58],[-397,-151],[-17,-243],[-11,-232],[327,-196],[60,-220],[353,-220],[588,-93],[500,-162],[398,-185],[506,-186],[690,-92],[681,-162],[473,-174],[517,-197],[272,-278],[136,-220],[337,209],[457,173],[484,186],[577,150],[495,162],[691,12],[680,-81],[560,-139],[180,255],[386,173],[702,12],[550,127],[522,128],[577,81],[614,104],[430,150],[-196,209],[-119,208],[0,220],[-539,-23],[-571,-93],[-544,0],[-77,220],[39,440],[125,128],[397,138],[468,139],[337,174],[337,174],[251,231],[380,104],[376,81],[190,47],[430,23],[408,81],[343,116],[337,139],[305,139],[386,185],[245,197],[261,173],[82,232],[-294,139],[98,243],[185,185],[288,116],[305,139],[283,185],[217,232],[136,277],[202,163],[331,-35],[136,-197],[332,-23],[11,220],[142,231],[299,-58],[71,-220],[331,-34],[360,104],[348,69],[315,-34],[120,-243],[305,196],[283,105],[315,81],[310,81],[283,139],[310,92],[240,128],[168,208],[207,-151],[288,81],[202,-277],[157,-209],[316,116],[125,232],[283,162],[365,-35],[108,-220],[229,220],[299,69],[326,23],[294,-11],[310,-70],[300,-34],[130,-197],[180,-174],[304,104],[327,24],[315,0],[310,11],[278,81],[294,70],[245,162],[261,104],[283,58],[212,162],[152,324],[158,197],[288,-93],[109,-208],[239,-139],[289,46],[196,-208],[206,-151],[283,139],[98,255],[250,104],[289,197],[272,81],[326,116],[218,127],[228,139],[218,127],[261,-69],[250,208],[180,162],[261,-11],[229,139],[54,208],[234,162],[228,116],[278,93],[256,46],[244,-35],[262,-58],[223,-162],[27,-254],[245,-197],[168,-162],[332,-70],[185,-162],[229,-162],[266,-35],[223,116],[240,243],[261,-127],[272,-70],[261,-69],[272,-46],[277,0],[229,-614],[-11,-150],[-33,-267],[-266,-150],[-218,-220],[38,-232],[310,12],[-38,-232],[-141,-220],[-131,-243],[212,-185],[321,-58],[321,104],[153,232],[92,220],[153,185],[174,174],[70,208],[147,289],[174,58],[316,24],[277,69],[283,93],[136,231],[82,220],[190,220],[272,151],[234,115],[153,197],[157,104],[202,93],[277,-58],[250,58],[272,69],[305,-34],[201,162],[142,393],[103,-162],[131,-278],[234,-115],[266,-47],[267,70],[283,-46],[261,-12],[174,58],[234,-35],[212,-127],[250,81],[300,0],[255,81],[289,-81],[185,197],[141,196],[191,163],[348,439],[179,-81],[212,-162],[185,-208],[354,-359],[272,-12],[256,0],[299,70],[299,81],[229,162],[190,174],[310,23],[207,127],[218,-116],[141,-185],[196,-185],[305,23],[190,-150],[332,-151],[348,-58],[288,47],[218,185],[185,185],[250,46],[251,-81],[288,-58],[261,93],[250,0],[245,-58],[256,-58],[250,104],[299,93],[283,23],[316,0],[255,58],[251,46],[76,290],[11,243],[174,-162],[49,-266],[92,-244],[115,-196],[234,-105],[315,35],[365,12],[250,35],[364,0],[262,11],[364,-23],[310,-46],[196,-186],[-54,-220],[179,-173],[299,-139],[310,-151],[360,-104],[375,-92],[283,-93],[315,-12],[180,197],[245,-162],[212,-185],[245,-139],[337,-58],[321,-69],[136,-232],[316,-139],[212,-208],[310,-93],[321,12],[299,-35],[332,12],[332,-47],[310,-81],[288,-139],[289,-116],[195,-173],[-32,-232],[-147,-208],[-125,-266],[-98,-209],[-131,-243],[-364,-93],[-163,-208],[-360,-127],[-125,-232],[-190,-220],[-201,-185],[-115,-243],[-70,-220],[-28,-266],[6,-220],[158,-232],[60,-220],[130,-208],[517,-81],[109,-255],[-501,-93],[-424,-127],[-528,-23],[-234,-336],[-49,-278],[-119,-220],[-147,-220],[370,-196],[141,-244],[239,-219],[338,-197],[386,-186],[419,-185],[636,-185],[142,-289],[800,-128],[53,-45],[208,-175],[767,151],[636,-186],[-99504,-147],[245,344],[501,-185],[32,21]],[[31400,18145],[-92,-239],[-238,-183],[-301,67],[-202,177],[-291,86],[-350,330],[-283,317],[-383,662],[229,-124],[390,-395],[369,-212],[143,271],[90,405],[256,244],[198,-70]],[[30935,19481],[106,-274],[139,-443],[361,-355],[389,-147],[-125,-296],[-264,-29],[-141,208]],[[33000,19946],[333,354],[236,-148],[167,237],[222,-266],[-83,-207],[-375,-177],[-125,207],[-236,-266],[-139,266]],[[69088,21486],[41,244],[19,121],[179,-186],[263,-74],[9,-112],[-77,-269],[-427,-38],[-7,314]],[[90199,26260],[7,271],[181,-52],[269,-204],[151,81],[217,113],[166,-39],[20,-702],[-95,-203],[-29,-476],[-97,162],[-193,-412],[-57,32],[-171,19],[-171,505],[-38,390],[-160,515]],[[96252,23489],[149,438],[349,583],[179,111],[200,225],[238,310],[167,306],[123,441],[106,149],[41,330],[195,273],[61,-251],[63,-244],[198,239],[80,-249],[0,-249],[-103,-274],[-182,-435],[-142,-238],[103,-284],[-214,-7],[-238,-223],[-75,-387],[-157,-597],[-219,-264],[-138,-169],[-256,13],[-180,194],[-302,42],[-46,217]],[[97953,30179],[104,46],[151,-328],[216,-153],[78,-526],[202,-622],[5,403],[126,-161],[41,-447],[224,-192],[188,-48],[158,226],[141,-69],[-67,-524],[-85,-345],[-212,12],[-74,-179],[26,-254],[-41,-110],[-105,-319],[-138,-404],[-214,-236],[-48,155],[-116,85],[160,486],[-91,326],[-299,236],[8,214],[201,206],[47,455],[-13,382],[-113,396],[8,104],[-133,244],[-218,523],[-117,418]],[[95563,38701],[119,-9],[156,-201],[122,-200],[89,-166],[228,-366],[144,-272],[-105,-142],[-153,160],[-199,266],[-179,313],[-184,416],[-38,201]],[[99245,40108],[107,203],[126,-74],[69,98],[96,-171],[-46,-308],[-172,-81],[-153,73],[-27,260]],[[99609,40749],[139,121],[88,33],[163,184],[0,-289],[-177,-145],[-177,-124],[-36,220]],[[0,40798],[0,289],[57,27],[-34,-284],[-23,-32]],[[96438,41032],[10,158],[175,-339],[-92,-78],[-93,259]],[[96285,41938],[133,-182],[45,-476],[-75,74],[-58,-32],[-39,163],[-6,453]],[[62014,37548],[50,426],[128,102],[1,197],[133,447],[25,377],[-65,280],[-52,372],[-23,544],[97,331],[38,375],[138,22],[155,121],[103,107],[122,7],[158,337],[229,364],[83,297],[-38,253],[118,-71],[153,410],[6,356],[92,264],[96,-254],[74,-251],[69,-390],[45,-711],[72,-276],[-28,-284],[-49,-174],[-94,347],[-53,-175],[53,-438],[-24,-250],[-77,-137],[-18,-500],[-109,-689],[-137,-814],[-172,-1120],[-106,-821],[-125,-685],[-226,-140],[-243,-250],[-160,151],[-220,211],[-77,312],[-18,524],[-98,471],[-26,425]],[[81482,35149],[122,-255],[-93,548],[137,-171],[83,-229],[-5,303],[-138,465],[-26,186],[-65,177],[31,341],[56,146],[38,295],[-29,346],[114,425],[21,-450],[118,406],[225,198],[136,252],[212,217],[126,46],[77,-73],[219,220],[168,66],[42,129],[74,54],[153,-14],[292,173],[151,262],[71,316],[163,300],[13,236],[7,321],[194,502],[117,-510],[119,118],[-99,279],[87,287],[122,-128],[34,449],[152,291],[67,233],[140,101],[4,165],[122,-69],[5,148],[122,85],[134,80],[205,-271],[155,-350],[173,-4],[177,-56],[-59,325],[133,473],[126,155],[-44,147],[121,338],[168,208],[142,-70],[234,111],[-5,302],[-204,195],[148,86],[184,-147],[148,-242],[234,-151],[79,60],[172,-182],[162,169],[105,-51],[65,113],[127,-292],[-74,-316],[-105,-239],[-96,-20],[32,-236],[-81,-295],[-99,-291],[20,-166],[221,-327],[214,-189],[143,-204],[201,-350],[78,1],[145,-151],[43,-183],[265,-200],[183,202],[55,317],[56,262],[34,324],[85,470],[-39,286],[20,171],[-32,339],[37,445],[53,120],[-43,197],[67,313],[52,325],[7,168],[104,222],[78,-289],[19,-371],[70,-71],[11,-249],[101,-300],[21,-335],[-10,-214],[100,-464],[179,223],[92,-250],[133,-231],[-29,-262],[60,-506],[42,-295],[70,-72],[75,-505],[-27,-307],[90,-400],[301,-309],[197,-281],[186,-257],[-37,-143],[159,-371],[108,-639],[111,130],[113,-256],[68,91],[48,-626],[197,-363],[129,-226],[217,-478],[78,-475],[7,-337],[-19,-365],[132,-502],[-16,-523],[-48,-274],[-75,-527],[6,-339],[-55,-423],[-123,-538],[-205,-290],[-102,-458],[-93,-292],[-82,-510],[-107,-294],[-70,-442],[-36,-407],[14,-187],[-159,-205],[-311,-22],[-257,-242],[-127,-229],[-168,-254],[-230,262],[-170,104],[43,308],[-152,-112],[-243,-428],[-240,160],[-158,94],[-159,42],[-269,171],[-179,364],[-52,449],[-64,298],[-137,240],[-267,71],[91,287],[-67,438],[-136,-408],[-247,-109],[146,327],[42,341],[107,289],[-22,438],[-226,-504],[-174,-202],[-106,-470],[-217,243],[9,313],[-174,429],[-147,221],[52,137],[-356,358],[-195,17],[-267,287],[-498,-56],[-359,-211],[-317,-197],[-265,39],[-294,-303],[-241,-137],[-53,-309],[-103,-240],[-236,-15],[-174,-52],[-246,107],[-199,-64],[-191,-27],[-165,-315],[-81,26],[-140,-167],[-133,-187],[-203,23],[-186,0],[-295,377],[-149,113],[6,338],[138,81],[47,134],[-10,212],[34,411],[-31,350],[-147,598],[-45,337],[12,336],[-111,385],[-7,174],[-123,235],[-35,463],[-158,467],[-39,252]],[[94810,44550],[166,-142],[56,-22],[78,-203],[-194,4],[-106,363]],[[83046,44933],[259,116],[146,-180],[97,-180],[-17,-159],[-117,-11],[-368,414]],[[94344,44884],[17,235],[183,-93],[91,-124],[45,-155],[-108,-14],[-170,60],[-58,91]],[[94605,45664],[94,0],[100,-473],[111,-283],[-42,-109],[-206,512],[-57,353]],[[84713,45326],[32,139],[239,133],[194,20],[87,74],[105,-74],[-102,-160],[-289,-258],[-233,-170]],[[84746,45030],[-181,-441],[-238,-130],[-33,71],[25,201],[119,360],[275,235]],[[82427,45243],[95,340],[153,5],[74,209],[100,-158],[172,48],[69,-251],[-321,-119],[-193,-79],[-149,5]],[[83311,45374],[0,216],[220,123],[174,-177],[185,45],[249,216],[-41,-328],[-417,-168],[-370,73]],[[93947,46195],[41,60],[128,-142],[228,-272],[65,-187],[12,-119],[-218,251],[-152,212],[-104,197]],[[93469,46582],[14,99],[166,-250],[111,-193],[-56,-33],[-121,134],[-114,243]],[[79267,46532],[191,564],[337,-35],[224,-231],[115,-45],[38,-210],[533,-59],[61,244],[515,-284],[101,-383],[417,-108],[341,-351],[-317,-225],[-306,238],[-251,-16],[-288,44],[-260,106],[-322,225],[-204,59],[-116,-74],[-506,243],[-48,254],[-255,44]],[[87253,46951],[49,212],[58,200],[63,-173],[0,-282],[-143,-402],[-27,445]],[[92920,47543],[38,57],[30,-175],[84,-134],[135,-375],[131,-200],[-39,-166],[-78,-59],[-120,227],[-122,375],[-59,450]],[[91199,47184],[23,183],[249,-86],[152,46],[42,283],[40,15],[27,-314],[158,45],[78,202],[155,211],[-30,348],[166,11],[56,-97],[-5,-327],[-93,-361],[-146,-48],[-44,-166],[-152,-144],[-142,-138],[-148,1],[-228,171],[-158,165]],[[84996,48702],[281,29],[69,-195],[-104,-196],[-192,108],[-54,254]],[[85527,48575],[65,325],[344,24],[305,-172],[101,-452],[-234,244],[-232,49],[-157,-39],[-192,21]],[[91850,48960],[77,143],[150,-166],[94,-130],[117,-142],[111,-248],[106,-189],[33,-307],[-87,-157],[-52,348],[-65,229],[-126,193],[-158,252],[-200,174]],[[89166,49043],[482,-407],[513,-338],[192,-302],[154,-297],[43,-349],[462,-365],[68,-313],[-256,-64],[62,-393],[248,-388],[180,-627],[159,20],[-11,-262],[215,-100],[-84,-111],[295,-249],[-30,-171],[-184,-41],[-69,153],[-238,66],[-281,89],[-216,377],[-158,325],[-144,517],[-362,259],[-235,-169],[-170,-195],[35,-436],[-218,-203],[-155,99],[-288,25]],[[89175,45193],[-247,485],[-282,118],[-69,-168],[-352,-18],[118,481],[175,164],[-72,642],[-134,496],[-538,500],[-229,50],[-417,546],[-82,-287],[-107,-52],[-63,216],[-1,257],[-212,290],[299,213],[198,-11],[-23,156],[-407,1],[-110,352],[-248,109],[-117,293],[374,143],[142,192],[446,-242],[44,-220],[78,-955],[287,-354],[232,627],[319,356],[247,1],[238,-206],[206,-212],[298,-113]],[[82990,48924],[115,387],[40,469],[139,891],[58,243],[237,439],[217,-174],[350,-82],[319,25],[275,429],[48,-132],[-223,-587],[-209,-113],[-267,115],[-463,-29],[-243,-85],[-39,-447],[248,-526],[150,268],[518,201],[-22,-272],[-121,86],[-121,-347],[-245,-229],[263,-757],[-50,-203],[249,-682],[-2,-388],[-148,-173],[-109,207],[134,484],[-273,-229],[-69,164],[36,228],[-200,346],[21,576],[-186,-179],[24,-689],[11,-846],[-176,-85],[-119,173],[79,544],[-43,570],[-117,4],[-86,405]],[[85388,51177],[56,472],[92,215],[20,-322],[164,-52],[26,-241],[-15,-517],[-143,58],[-42,-359],[114,-312],[-78,-71],[-112,374],[-82,755]],[[76470,53817],[178,-24],[430,-114],[246,-577],[215,-401],[153,-246],[263,-635],[283,-9],[233,-405],[161,-495],[211,-270],[-111,-482],[159,-205],[100,-15],[47,-412],[97,-330],[204,-52],[135,-374],[-70,-735],[-11,-914],[-308,-12],[-234,494],[-356,482],[-119,358],[-210,481],[-138,443],[-212,827],[-244,493],[-81,508],[-103,461],[-250,372],[-145,506],[-209,330],[-290,652],[-24,300]],[[80461,51765],[204,-202],[214,110],[56,500],[119,112],[333,128],[199,467],[137,374]],[[81723,53254],[110,221],[236,323]],[[82069,53798],[214,411],[140,462],[112,2],[143,-299],[13,-257],[183,-165],[231,-177],[-20,-232],[-186,-29],[50,-289],[-205,-201]],[[82744,53024],[-158,-533],[204,-560],[-48,-272],[312,-546],[-329,-70],[-93,-403],[12,-535],[-267,-404],[-7,-589],[-107,-903],[-41,210],[-316,-266],[-110,361],[-198,34],[-139,189],[-330,-212],[-101,285],[-182,-32],[-229,68],[-43,793],[-138,164],[-134,505],[-38,517],[32,548],[165,392]],[[83866,54829],[109,498],[175,166],[151,223],[98,-268],[212,162],[45,264],[196,15],[-16,457],[225,-280],[23,-297],[20,-218],[28,-392],[16,-332],[-94,-540],[-102,602],[-130,-300],[89,-435],[-79,-277],[-327,343],[-78,428],[84,280],[-176,280],[-87,-245],[-131,23],[-205,-330],[-46,173]],[[72137,55425],[126,959],[192,-328],[129,-416],[134,-616],[-42,-615],[-116,-168],[-242,-135],[-132,470],[-49,849]],[[32791,56541],[81,163],[-6,233],[160,77],[58,-21],[-11,-440],[-232,-65],[-50,53]],[[83994,56319],[57,158],[70,165],[30,367],[153,35],[-44,-398],[205,570],[-26,-563],[-100,-195],[-87,-373],[-87,-175],[-171,409]],[[82548,55523],[136,414],[200,364],[167,409],[146,587],[49,-482],[-183,-325],[-146,-406],[-369,-561]],[[83856,57606],[166,-183],[177,1],[-5,-247],[-129,-251],[-176,-178],[-10,275],[20,301],[-43,282]],[[84518,57999],[266,-13],[77,-220],[78,-660],[-214,157],[5,-199],[68,-364],[-132,-133],[-11,416],[-84,31],[-43,357],[163,-47],[-4,224],[-169,451]],[[83422,58536],[238,-22],[97,-213],[-74,-510],[-119,295],[-142,450]],[[83300,60248],[112,-195],[29,925],[90,535],[169,-1],[171,-168],[85,153],[26,-150],[-46,-245],[95,-423],[-73,-491],[-164,-196],[-43,-476],[62,-471],[147,-65],[123,70],[347,-328],[-27,-321],[91,-142],[-29,-272],[-216,290],[-103,310],[-71,-217],[-177,354],[-253,-87],[-138,130],[14,244],[87,151],[-83,136],[-36,-213],[-137,340],[-41,257],[-11,566]],[[31321,61436],[40,86],[227,-3],[142,-52],[50,-118],[-71,-149],[-209,4],[-163,-21],[-16,253]],[[28239,61348],[34,135],[116,41],[64,-20],[187,-53],[147,-142],[46,-161],[-195,-11],[-84,-99],[-156,95],[-159,215]],[[30080,62227],[34,101],[217,-3],[165,-152],[73,15],[50,-209],[152,11],[-9,-176],[124,-21],[136,-217],[-103,-240],[-132,128],[-127,-25],[-92,28],[-50,-107],[-106,-37],[-43,144],[-92,-85],[-111,-405],[-71,94],[-14,170]],[[30081,61241],[-185,100],[-131,-41],[-169,43],[-130,-110],[-149,184],[24,190],[256,-82],[210,-47],[100,131],[-127,256],[2,226],[-175,92],[62,163],[170,-26],[241,-93]],[[80173,62023],[137,267],[304,166],[159,-14],[62,-226],[-122,-260],[-64,-341],[-240,-284],[-228,183],[-8,509]],[[6646,62221],[14,65],[48,97],[-19,116],[16,55],[21,-11],[107,-100],[49,-51],[45,-79],[71,-207],[-7,-33],[-108,-126],[-89,-92],[-41,-99],[-69,84],[8,165],[-46,216]],[[6469,62944],[27,50],[99,-56],[73,-90],[-23,-71],[-94,-43],[-47,125],[-32,48],[-3,37]],[[6298,63045],[21,72],[137,-26],[-9,-63],[-149,17]],[[6030,63329],[74,82],[23,-38],[80,-196],[-15,-34],[-19,8],[-97,21],[-35,133],[-11,24]],[[5611,63616],[14,43],[43,58],[64,-12],[5,-138],[-33,-58],[-93,107]],[[26396,63516],[146,183],[60,213],[126,131],[142,116],[210,56],[67,65],[240,-42],[219,-7],[261,-201],[110,-216],[260,66],[98,-138],[235,-366],[173,-267],[92,8],[165,-120],[-20,-167],[205,-24],[210,-242],[-33,-138],[-185,-75],[-187,-29],[-191,46],[-398,-57],[186,329],[-113,154],[-179,39],[-96,171],[-66,336],[-157,-23],[-259,159],[-83,124],[-362,91],[-97,115],[104,148],[-273,30],[-199,-307],[-115,-8],[-40,-144],[-138,-65],[-118,56]],[[28220,65099],[60,375],[84,-23],[97,-491],[1,-343],[-68,-29],[-70,340],[-104,171]],[[83362,64497],[163,581],[223,447],[127,-176],[-49,-357],[-167,-947],[-119,-485],[-146,499],[-32,438]],[[28061,66408],[130,47],[184,-18],[8,-153],[-303,-95],[-19,219]],[[28391,66555],[220,-265],[-48,-420],[-51,75],[4,309],[-124,234],[-1,67]],[[86767,70070],[2,281],[154,352],[158,-68],[114,248],[204,-127],[35,-203],[-156,-357],[-114,189],[-143,-137],[-73,-346],[-181,168]],[[59437,71293],[8,-48],[-285,-240],[-136,77],[-64,237],[132,22]],[[59092,71341],[19,3],[40,143],[200,-8],[253,176],[-188,-251],[21,-111]],[[56531,71424],[52,251],[152,-199],[216,34],[207,-42],[-7,-103],[151,71],[-35,-175],[-400,-50],[3,98],[-339,115]],[[53453,72802],[38,304],[325,-54],[284,64],[211,51],[-100,-465],[41,-183],[-58,-303],[-213,222],[-141,64],[-387,300]],[[52266,74774],[153,-30],[139,183],[166,-419],[-39,-782],[-126,38],[-113,-197],[-105,156],[-11,713],[-64,338]],[[85946,70252],[263,182],[145,371],[280,306],[203,403],[553,177],[297,-121],[291,1050],[185,-282],[408,591],[158,229],[174,723],[-47,664],[117,374],[295,108],[152,-819],[-9,-479],[-256,-595],[4,-610],[-104,-472],[48,-296],[-145,-416],[-355,-278],[-488,-36],[-396,-675],[-186,227],[-12,442],[-483,-130],[-329,-279],[-325,-11],[282,-435],[-186,-1004],[-179,-248],[-135,229],[69,533],[-176,172],[-113,405]],[[52373,75546],[56,219],[179,226],[47,-507],[-92,-456],[-126,120],[-64,398]],[[88837,75727],[138,455],[296,33],[81,817],[83,460],[326,-615],[213,-198],[195,-126],[197,250],[62,-663],[-412,-162],[-244,-587],[-436,404],[-152,-646],[-308,-9],[-39,587]],[[32113,78187],[105,183],[97,-288],[202,-79],[257,16],[-137,-242],[-102,-38],[-353,250],[-69,198]],[[32078,80046],[96,49],[365,-148],[284,-247],[8,-108],[-135,-11],[-360,186],[-258,279]],[[14321,80439],[24,137],[291,-129],[171,-89],[261,-63],[94,-204],[138,-280],[277,-244],[115,-327],[-140,-82],[-456,269],[-84,209],[-248,207],[-50,168],[-286,107],[-107,321]],[[33494,78880],[173,208],[-121,160],[234,356],[287,941],[172,336],[241,204],[129,-26],[-54,-160],[-148,-372],[-184,-517],[181,199],[187,-126],[-98,-206],[247,-162],[128,144],[277,-182],[-86,-433],[194,101],[36,-313],[86,-367],[-117,-520],[-125,-22],[-183,111],[60,484],[-77,75],[-322,-513],[-166,21],[196,277],[-267,144],[-298,-35],[-539,18],[-43,175]],[[12989,82396],[16,188],[131,-76],[267,47],[-84,-671],[242,-475],[-111,1],[-167,270],[-103,272],[-140,184],[-51,260]],[[89331,81264],[24,808],[257,271],[-110,274],[123,83],[73,-391],[96,-569],[-7,-581],[114,-597],[280,-1046],[-411,195],[-171,-854],[271,-605],[-8,-413],[-211,356],[-182,-457],[-51,496],[31,575],[-32,638],[64,446],[13,790],[-163,581]],[[47896,83153],[233,24],[298,-365],[-149,-406]],[[48278,82406],[46,-422],[-210,-528],[-493,-349],[-393,89],[225,617],[-145,601],[378,463],[210,276]],[[53028,83536],[408,195],[88,-296],[-166,-478],[-291,333],[-39,246]],[[7036,84529],[252,210],[148,90],[185,-40],[117,-183],[-240,-281],[-277,-225],[-142,152],[-43,277]],[[48291,84129],[101,611],[216,480],[222,-47],[335,49],[-297,-639],[283,81],[304,-3],[-72,-481],[-250,-530],[287,-38],[270,-759],[190,-95],[171,-673],[79,-233],[337,-113],[-34,-378],[-142,-173],[111,-305],[-250,-310],[-371,6],[-473,-163],[-130,116],[-183,-276],[-257,67],[-195,-226],[-148,118],[407,621],[249,127],[-436,99],[-79,235],[291,183],[-152,319],[52,387],[414,-54],[40,343],[-190,372],[-337,104],[-66,160],[101,264],[-92,163],[-149,-279],[-17,569],[-140,301]],[[3485,86155],[274,101],[220,-54],[27,-226],[-171,-92],[-182,110],[-168,161]],[[27677,87220],[13,41],[107,177],[114,-13],[70,-121],[-108,-310],[-123,50],[-73,176]],[[26668,87478],[207,273],[381,-6],[-6,-114],[-325,-326],[-196,13],[-61,160]],[[2280,88041],[17,223],[171,-113],[173,61],[225,-156],[276,-79],[-23,-64],[-211,-125],[-211,128],[-106,107],[-245,-34],[-66,52]],[[25771,88121],[242,292],[35,465],[95,542],[201,-49],[51,-259],[143,91],[161,-155],[304,-203],[318,-184],[25,-281],[204,46],[199,-196],[-247,-186],[-432,142],[-156,266],[-275,-314],[-396,-306],[-95,346],[-377,-57]],[[43242,89344],[188,385],[421,87],[433,-400],[422,321],[349,-167],[453,315],[461,-42],[-64,-382],[314,-403],[-361,-451],[-801,-405],[-240,-107],[-365,87],[-775,187],[273,261],[-605,289],[492,114],[-12,174],[-583,137]],[[28545,90512],[118,331],[255,82],[217,-163],[3,-253],[-32,-82],[-180,-174],[-312,-30],[-69,289]],[[0,88971],[0,2354],[681,-451],[728,-588],[-24,-367],[187,-147],[-64,429],[754,-88],[544,-553],[-276,-257],[-455,-61],[-7,-578],[-111,-122],[-260,17],[-212,206],[-369,172],[-62,257],[-283,96],[-315,-76],[-151,207],[60,219],[-333,-140],[126,-278],[-158,-251]],[[22278,91583],[245,183],[194,256],[295,-168],[166,-106],[84,-112],[169,-226],[-173,-207],[-374,179],[-226,-65],[-380,266]],[[99645,92586],[354,247],[0,-404],[-305,-30],[-49,187]],[[0,92429],[0,404],[36,24],[235,-1],[402,-169],[-24,-81],[-286,-141],[-363,-36]],[[26228,91219],[16,648],[394,-45]],[[26638,91822],[411,-87],[373,-293],[17,-293],[-207,-315],[196,-316],[-36,-288],[-544,-413],[-386,-91],[-287,178],[-83,-297],[-268,-498]],[[25824,89109],[-81,-258],[-322,-400]],[[25421,88451],[-397,-39],[-220,-250],[-18,-384],[-323,-74],[-340,-479],[-301,-665],[-108,-466]],[[23714,86094],[-15,-686],[408,-99]],[[24107,85309],[125,-553],[130,-448],[388,117],[517,-256],[277,-225],[199,-279]],[[25743,83665],[348,-162],[294,-249]],[[26385,83254],[459,-34],[302,-58],[-45,-511],[86,-594],[201,-661],[414,-561],[214,192],[150,607],[-145,934],[-196,311],[445,276],[314,415],[154,411]],[[28738,83981],[-22,395],[-189,502]],[[28527,84878],[-338,445],[328,619],[-121,535],[-93,922],[194,137],[476,-161],[286,-57],[230,155],[258,-200],[342,-343],[85,-229],[495,-45],[-8,-496],[92,-747],[254,-92],[201,-348],[402,328],[266,652],[184,274],[216,-527],[362,-754],[307,-709],[-112,-371],[370,-333],[250,-338],[442,-152],[179,-189],[110,-500],[216,-78],[112,-223],[20,-664],[-202,-222],[-199,-207],[-458,-210],[-349,-486],[-470,-96],[-594,125],[-417,4],[-287,-41],[-233,-424],[-354,-262],[-401,-782],[-320,-545],[236,97],[446,776],[583,493]],[[31513,79609],[416,59],[245,-290]],[[32174,79378],[-262,-397],[88,-637],[91,-446],[361,-295],[459,86],[278,664],[19,-429],[180,-214],[-344,-387],[-615,-351],[-276,-239],[-310,-426],[-211,44],[-11,500],[483,488],[-445,-19],[-309,-72]],[[31350,77248],[48,-194],[-296,-286],[-286,-204],[-293,-175]],[[30523,76389],[-159,-386],[-35,-98]],[[30329,75905],[-3,-313],[92,-313],[115,-15],[-29,216],[83,-131],[-22,-169],[-188,-96]],[[30377,75084],[-133,12],[-205,-104]],[[30039,74992],[-121,-29],[-162,-29],[-231,-171],[408,111],[82,-112],[-389,-177],[-177,-1],[8,72],[-84,-164],[82,-27],[-60,-424],[-203,-455],[-20,152]],[[29172,73738],[-61,31],[-91,147]],[[29020,73916],[57,-318]],[[29077,73598],[66,-106],[8,-222]],[[29151,73270],[-89,-230],[-157,-472],[-25,24],[86,402]],[[28966,72994],[-142,226],[-33,490]],[[28791,73710],[-53,-255],[59,-375]],[[28797,73080],[-175,88],[183,-186]],[[28805,72982],[12,-562],[79,-41],[29,-204],[39,-591],[-176,-439],[-288,-175],[-182,-346],[-139,-38],[-141,-217],[-39,-199],[-305,-383],[-157,-281],[-131,-351],[-43,-419],[50,-411],[92,-505],[124,-418],[1,-256],[132,-685],[-9,-398],[-12,-230],[-69,-361]],[[27672,65472],[-83,-74],[-137,71]],[[27452,65469],[-44,259]],[[27408,65728],[-106,136],[-147,508]],[[27155,66372],[-129,452],[-42,231],[57,393],[-77,325],[-217,494]],[[26747,68267],[-108,91],[-281,-269]],[[26358,68089],[-49,30]],[[26309,68119],[-135,276],[-174,146]],[[26000,68541],[-314,-75],[-247,66],[-212,-41]],[[25227,68491],[-118,-83],[54,-166]],[[25163,68242],[-5,-240],[59,-117],[-53,-77],[-103,87],[-104,-112],[-202,18]],[[24755,67801],[-207,313],[-242,-74]],[[24306,68040],[-202,137],[-173,-42],[-234,-138],[-253,-438],[-276,-255],[-152,-282],[-63,-266],[-3,-407],[14,-284],[52,-201]],[[23016,65864],[1,-1],[-1,-1],[-107,-516]],[[22909,65346],[-49,-426],[-20,-791],[-27,-289],[48,-322],[86,-288],[56,-458],[184,-440],[65,-337],[109,-291],[295,-157],[114,-247],[244,165],[212,60],[208,106],[175,101],[176,241],[67,345],[22,496],[48,173],[188,155],[294,137],[246,-21],[169,50],[66,-125],[-9,-285],[-149,-351],[-66,-360],[51,-103],[-42,-255],[-69,-461],[-71,152],[-58,-10]],[[25472,61510],[1,-87],[53,-3],[-5,-160],[-45,-256],[24,-91],[-29,-212],[18,-56],[-32,-299],[-55,-156],[-50,-19],[-55,-205]],[[25297,59966],[90,-107],[24,88],[82,-75]],[[25493,59872],[29,-23],[61,104],[79,8],[26,-48],[43,29],[129,-53]],[[25860,59889],[128,16],[90,65]],[[26078,59970],[32,66],[89,-31],[66,-40],[73,14],[55,51],[127,-82],[44,-13],[85,-110],[80,-132],[101,-91],[73,-162]],[[26903,59440],[-24,-57],[-14,-132],[29,-216],[-64,-202],[-30,-237],[-9,-261],[15,-152],[7,-266],[-43,-58],[-26,-253],[19,-156],[-56,-151],[12,-159],[43,-97]],[[26762,57043],[70,-321],[108,-238],[130,-252]],[[27070,56232],[100,-212]],[[27170,56020],[-6,-125],[111,-27]],[[27275,55868],[26,48],[77,-145],[136,42],[119,150],[168,119],[95,176],[153,-34],[-10,-58],[155,-21],[124,-102],[90,-177],[105,-164]],[[28513,55702],[143,-18],[209,412],[114,63],[3,195],[51,500],[159,274],[175,11],[22,123],[218,-49],[218,298],[109,132],[134,285],[98,-36],[73,-156],[-54,-199]],[[30185,57537],[-8,-139],[-163,-69],[91,-268],[-3,-309]],[[30102,56752],[-123,-343],[105,-469]],[[30084,55940],[120,38],[62,427],[-86,208],[-14,447],[346,241],[-38,278],[97,186],[100,-415],[195,-9],[180,-330],[11,-195],[249,-6],[297,61],[159,-264]],[[31762,56607],[213,-73],[155,184]],[[32130,56718],[4,149],[344,35],[333,9],[-236,-175],[95,-279],[222,-44],[210,-291],[45,-473],[144,13],[109,-139]],[[33400,55523],[183,-217],[171,-385],[8,-304],[105,-14],[149,-289],[109,-205]],[[34125,54109],[333,-119],[30,107],[225,43],[298,-159]],[[35011,53981],[95,-65],[204,-140],[294,-499],[46,-242]],[[35650,53035],[95,28],[69,-327],[155,-1033],[149,-97],[7,-408],[-208,-487],[86,-178],[491,-92],[10,-593],[211,388],[349,-212],[462,-361],[135,-346],[-45,-327],[323,182],[540,-313],[415,23],[411,-489],[355,-662],[214,-170],[237,-24],[101,-186],[94,-752],[46,-358],[-110,-977],[-142,-385],[-391,-822],[-177,-668],[-206,-513],[-69,-11],[-78,-435],[20,-1107],[-77,-910],[-30,-390],[-88,-233],[-49,-790],[-282,-771],[-47,-610],[-225,-256],[-65,-355],[-302,2],[-437,-227],[-195,-263],[-311,-173],[-327,-470],[-235,-586],[-41,-441],[46,-326],[-51,-597],[-63,-289],[-195,-325],[-308,-1040],[-244,-468],[-189,-277],[-127,-562],[-183,-337]],[[35174,30629],[-121,-372],[-313,-328],[-205,118],[-151,-63],[-256,253],[-189,-19],[-169,327]],[[33770,30545],[-19,-308],[353,-506],[-38,-408],[173,-257],[-14,-289],[-267,-757],[-412,-317],[-557,-123],[-305,59],[59,-352],[-57,-442],[51,-298],[-167,-208],[-284,-82],[-267,216],[-108,-155],[39,-587],[188,-178],[152,186],[82,-307],[-255,-183],[-223,-367],[-41,-595],[-66,-316],[-262,-2],[-218,-302],[-80,-443]],[[31227,23224],[274,-433],[265,-119]],[[31766,22672],[-96,-531],[-328,-333],[-180,-692],[-254,-234],[-113,-276],[89,-614],[185,-342],[-117,30]],[[30952,19680],[-247,4],[-134,-145],[-250,-213],[-45,-552],[-118,-14],[-313,192],[-318,412],[-346,338],[-87,374],[79,346],[-140,393],[-36,1007],[119,568],[293,457],[-422,172],[265,522],[94,982],[309,-208],[145,1224],[-186,157],[-87,-738],[-175,83],[87,845],[95,1095],[127,404]],[[29661,27385],[-79,576],[-23,666]],[[29559,28627],[117,19],[170,954],[192,945],[118,881],[-64,885],[83,487],[-34,730],[163,721],[50,1143],[89,1227],[87,1321],[-20,967],[-58,832]],[[30452,39739],[-279,340],[-24,242],[-551,593],[-498,646],[-214,365],[-115,488],[46,170],[-236,775],[-274,1090],[-262,1177],[-114,269],[-87,435],[-216,386],[-198,239],[90,264],[-134,563],[86,414],[221,373]],[[27693,48568],[148,442],[-60,258],[-106,-275],[-166,259],[56,167],[-47,536],[97,89],[52,368],[105,381],[-20,241],[153,126],[190,236]],[[28095,51396],[-37,183],[103,44],[-12,296],[65,214],[138,40],[117,371],[106,310],[-102,141],[52,343],[-62,540],[59,155],[-44,500],[-112,315]],[[28366,54848],[-93,170],[-59,319],[68,158],[-70,40]],[[28212,55535],[-52,195],[-138,165]],[[28022,55895],[-122,-38],[-56,-205],[-112,-149],[-61,-20],[-27,-123],[132,-321],[-75,-76],[-40,-87],[-130,-30],[-48,353],[-36,-101],[-92,35],[-56,238],[-114,39],[-72,69],[-119,-1],[-8,-128],[-32,89]],[[26954,55439],[-151,131],[-56,124],[32,103],[-11,130],[-77,142],[-109,116],[-95,76],[-19,173],[-73,105],[18,-172],[-55,-141],[-64,164],[-89,58],[-38,120],[2,179],[36,187],[-78,83],[64,114]],[[26191,57131],[-96,186],[-130,238],[-61,200],[-117,185],[-140,267]],[[25647,58207],[31,92],[46,-89]],[[25724,58210],[21,41]],[[25745,58251],[-48,185]],[[25697,58436],[-84,52],[-31,-140]],[[25582,58348],[-161,9],[-100,57],[-115,117],[-154,37],[-79,127]],[[24973,58695],[-142,103],[-174,11],[-127,117],[-149,244]],[[24381,59170],[-314,636]],[[24067,59806],[-144,192],[-226,154]],[[23697,60152],[-156,-43],[-223,-223],[-140,-58],[-196,156],[-208,112],[-260,271],[-208,83],[-314,275],[-233,282],[-70,158],[-155,35],[-284,187],[-116,270],[-299,335],[-139,373],[-66,288],[93,57],[-29,169],[64,153],[1,204],[-93,266],[-25,235],[-94,298],[-244,587],[-280,462],[-135,368],[-238,241],[-51,145],[42,365]],[[19641,66203],[-142,137],[-164,288]],[[19335,66628],[-69,412],[-149,48],[-162,311],[-130,288],[-12,184],[-149,446],[-99,452],[5,227]],[[18570,68996],[-201,235],[-93,-26]],[[18276,69205],[-159,163],[-44,-240],[46,-284],[27,-444],[95,-243],[206,-407],[46,-139],[42,-42],[37,-203],[49,8],[56,-381],[85,-150],[59,-210],[174,-300],[92,-550],[83,-259],[77,-277],[15,-311],[134,-20],[112,-268],[100,-264],[-6,-106],[-117,-217],[-49,3],[-74,359]],[[19362,64423],[-182,337],[-200,286]],[[18980,65046],[-142,150],[9,432],[-42,320],[-132,183],[-191,264],[-37,-76],[-70,154],[-171,143],[-164,343],[20,44],[115,-33],[103,221],[10,266],[-214,422],[-163,163],[-102,369],[-103,388],[-129,472],[-113,531]],[[17464,69802],[-46,302],[-180,340],[-130,71],[-30,169],[-156,30],[-100,159],[-258,59]],[[16564,70932],[-70,95],[-34,324]],[[16460,71351],[-270,594],[-231,821],[10,137],[-123,195],[-215,495],[-38,482],[-148,323],[61,489],[-10,507],[-89,453],[109,557],[67,1072],[-50,792],[-88,506],[-80,274],[33,115],[402,-200],[148,-558]],[[15948,78405],[68,156],[-44,485],[-94,484]],[[15878,79530],[-38,1],[-537,581],[-199,255]],[[15104,80367],[-503,245],[-155,523],[40,362]],[[14486,81497],[-356,252],[-48,476],[-336,429],[-6,304]],[[13740,82958],[-153,223],[-245,188],[-78,515],[-358,478],[-150,558],[-267,38],[-441,15],[-326,170],[-574,613],[-266,112],[-486,211]],[[10396,86079],[-385,-50],[-546,271]],[[9465,86300],[-330,252],[-309,-125],[58,-411],[-154,-38],[-321,-123],[-245,-199]],[[8164,85656],[-307,-126],[-40,348]],[[7817,85878],[125,580],[295,182],[-76,148],[-354,-329],[-190,-394],[-400,-420],[203,-287],[-262,-424]],[[7158,84934],[-299,-247],[-278,-181]],[[6581,84506],[-69,-261],[-434,-305],[-87,-278],[-325,-252],[-191,45],[-259,-165],[-282,-201],[-231,-197],[-477,-169],[-43,99],[304,276],[271,182],[296,324],[345,66],[137,243],[385,353],[62,119],[205,208],[48,448],[141,349],[-320,-179],[-90,102],[-150,-215],[-181,300],[-75,-212],[-104,294],[-278,-236],[-170,0],[-24,352]],[[4985,85596],[50,217],[-179,210]],[[4856,86023],[-361,-113],[-235,277],[-190,142],[-1,334],[-214,252],[108,340],[226,330],[99,303],[225,43],[191,-94],[224,285],[201,-51],[212,183],[-52,270],[-155,106],[205,228],[-170,-7],[-295,-128],[-85,-131],[-219,131],[-392,-67],[-407,142],[-117,238],[-351,343],[390,247],[620,289],[228,0]],[[4541,89915],[-38,-295],[586,22]],[[5089,89642],[-225,366]],[[4864,90008],[-342,226],[-197,295]],[[4325,90529],[-267,252],[-381,187],[155,309],[493,19],[350,270],[66,287],[284,281],[271,68],[526,262],[256,-40],[427,315],[421,-124],[201,-266],[123,114],[469,-35],[-16,-136],[425,-101],[283,59],[585,-186],[534,-56],[214,-77],[370,96],[421,-177],[302,-83]],[[10837,91767],[518,-142]],[[11355,91625],[438,-284],[289,-55]],[[12082,91286],[244,247],[336,184],[413,-72],[416,259],[455,148],[191,-245],[207,138],[62,278],[192,-63],[470,-530],[369,401]],[[15437,92031],[38,-448],[341,96]],[[15816,91679],[105,173],[337,-34],[424,-248],[650,-217],[383,-100],[272,38]],[[17987,91291],[375,-300],[-391,-293]],[[17971,90698],[502,-127],[750,70],[236,103],[296,-354],[302,299],[-283,251],[179,202],[338,27],[223,59],[224,-141],[279,-321],[310,47],[491,-266],[431,94],[405,-14],[-32,367],[247,103],[431,-200],[-2,-559],[177,471],[223,-16],[126,594],[-298,364],[-324,239],[22,653],[329,429],[366,-95],[281,-261],[378,-666],[-247,-290],[517,-120],[-1,-604],[371,463],[332,-380],[-83,-438],[269,-399],[290,427],[202,510]],[[19722,91216],[-824,-103],[-374,-41]],[[18524,91072],[-151,279],[-379,161],[-246,-66],[-343,468],[185,62],[429,101],[392,-26],[362,103],[-537,138],[-594,-47],[-394,12],[-146,217],[644,237],[-428,-9],[-485,156],[233,443],[193,235],[744,359],[284,-114],[-139,-277],[618,179],[386,-298],[314,302],[254,-194],[227,-580],[140,244],[-197,606],[244,86],[276,-94],[311,-239],[175,-575],[86,-417],[466,-293],[502,-279],[-31,-260],[-456,-48],[178,-227],[-94,-217],[-503,93],[-478,160],[-322,-36],[-522,-201]],[[20294,93981],[95,83],[372,24],[211,-130],[-244,-390],[-434,413]],[[27534,93906],[12,213],[133,39],[636,-63],[479,-325],[25,-163],[-296,17],[-299,13],[-304,-80],[-80,36],[-306,313]],[[24943,93258],[213,528],[286,241],[717,158],[-204,-382],[219,-369],[256,477],[704,242],[477,-611],[-42,-387],[550,172],[263,235],[616,-299],[383,-282],[36,-258],[515,134],[290,-376],[670,-234],[242,-238],[263,-553],[-510,-275],[654,-386],[441,-130],[400,-543],[437,-39],[-87,-414],[-487,-687],[-342,253],[-437,568],[-359,-74],[-35,-338],[292,-344],[377,-272],[114,-157],[181,-584],[-96,-425],[-350,160],[-697,473],[393,-509],[289,-357],[45,-206],[-753,236],[-596,343],[-337,287],[97,167],[-414,304],[-405,286],[5,-171],[-803,-94],[-235,203],[183,435],[522,10],[571,76],[-92,211],[96,294],[360,576],[-77,261],[-107,203],[-425,286],[-563,201],[178,150],[-294,367],[-245,34],[-219,201],[-149,-175],[-503,-76],[-1011,132],[-588,174],[-450,89],[-231,207],[290,270],[-394,2],[-88,599]],[[21528,93420],[5,189],[567,-73],[-306,386],[329,286],[331,-124],[496,75],[72,-172],[-259,-283],[420,-254],[-50,-532],[-455,-229],[-268,50],[-192,225],[-690,456]],[[88850,93928],[263,234],[348,54],[394,-226],[34,-155],[-421,-4],[-569,66],[-49,31]],[[23324,93674],[4,294],[145,251],[276,161],[579,-20],[530,-144],[-415,-526],[-331,-115],[-298,-442],[-317,22],[-173,519]],[[15808,92470],[-147,259],[-641,312]],[[15020,93041],[93,193],[218,489]],[[15331,93723],[241,388],[-272,362],[939,93],[397,-123],[709,-33],[270,-171],[298,-249],[-349,-149],[-681,-415],[-344,-414]],[[16539,93012],[0,-248],[-731,-294]],[[90588,94993],[66,192],[518,-89],[697,-155],[-321,-234],[-444,53],[-516,233]],[[23105,94849],[148,266],[399,159],[243,-208],[101,-187],[-151,-229],[-403,44],[-337,155]],[[88048,95046],[149,406],[366,111],[734,-26],[1004,-313],[-219,-439],[-1023,16],[-461,-139],[-550,384]],[[21509,95681],[299,-18],[419,201],[390,-34],[22,77],[212,-273],[9,-303],[-127,-440],[-458,-60],[-298,94],[5,345],[-455,-46],[-18,457]],[[17302,95023],[379,577],[262,165],[782,-199],[493,-350],[485,-45],[-397,565],[255,215],[286,-68],[94,-282],[109,-210],[247,99],[291,-26],[49,-289],[-169,-281],[-940,-91],[-701,-256],[-423,-14],[-35,193],[577,261],[-1255,-70],[-389,106]],[[64293,93128],[284,126],[-10,323],[551,503],[-255,73],[665,518],[-75,268],[621,312],[917,380],[925,110],[475,220],[541,76],[193,-233],[-187,-184],[-984,-293],[-848,-282],[-863,-562],[-414,-577],[-435,-568],[56,-491],[531,-484],[-164,-52],[-907,77],[-74,262],[-503,158],[-40,320]],[[23022,95926],[104,242],[573,-37],[308,-190],[547,1],[240,-194],[-64,-222],[319,-134],[177,-140],[374,-26],[406,-50],[441,128],[566,51],[451,-42],[298,-223],[62,-244],[-174,-157],[-414,-127],[-355,72],[-797,-91],[-570,-11],[-449,73],[-738,190],[-96,325],[-34,293],[-279,258],[-574,72],[-322,183]],[[15873,95551],[472,442],[570,383],[426,-9],[381,87],[-38,-454],[-214,-205],[-259,-29],[-517,-252],[-444,-91],[-377,128]],[[81143,94175],[250,112],[142,-379]],[[81535,93908],[122,153],[444,93],[892,-97],[67,-276],[1162,-88],[15,451]],[[84237,94144],[590,-103],[443,3]],[[85270,94044],[449,-312],[128,-378],[-165,-247],[349,-465],[437,-240],[268,620],[446,-266],[473,159],[538,-182],[204,166],[455,-83],[-201,549],[367,256],[2509,-384],[236,-351],[727,-451],[1122,112],[553,-98],[231,-244],[-33,-432],[342,-168],[372,121],[492,15],[525,-116],[526,66],[484,-526],[344,189],[-224,378]],[[97224,91732],[123,263],[886,-166]],[[98233,91829],[578,36],[799,-282],[389,-258],[0,-2354],[-2,-3],[-357,-260],[-360,44],[250,-315],[166,-487],[128,-159],[32,-244],[-71,-157],[-518,129],[-777,-445],[-247,-69],[-425,-415],[-403,-362],[-102,-269],[-397,409],[-724,-464]],[[96192,85904],[-126,220],[-268,-254]],[[95798,85870],[-371,81],[-90,-388],[-333,-572],[10,-239],[316,-132],[-37,-860],[-258,-22],[-119,-494],[116,-255]],[[95032,82989],[-486,-301],[-96,-675]],[[94450,82013],[-415,-144],[-83,-600],[-400,-551],[-103,407],[-119,862],[-155,1313],[134,819],[234,353]],[[93543,84472],[15,276],[431,132]],[[93989,84880],[496,744],[479,608],[499,471],[223,833],[-337,-50],[-167,-487]],[[95182,86999],[-705,-648],[-227,726]],[[94250,87077],[-717,-201],[-696,-990],[230,-362],[-620,-154],[-430,-61],[20,427],[-431,90],[-344,-291],[-850,102]],[[90412,85637],[-913,-175],[-900,-1153]],[[88599,84309],[-1065,-1394],[438,-74],[136,-370],[270,-132]],[[88378,82339],[178,296],[305,-39]],[[88861,82596],[401,-650]],[[89262,81946],[9,-502],[-217,-591]],[[89054,80853],[-23,-705],[-126,-945],[-418,-855],[-94,-409],[-377,-688],[-374,-682],[-179,-349],[-370,-346],[-175,-8],[-175,287],[-373,-432],[-43,-197]],[[86327,75524],[-106,36]],[[86221,75560],[-120,-201],[-83,-201]],[[86018,75158],[10,-424],[-143,-130],[-50,-105],[-104,-174],[-185,-97],[-121,-159],[-9,-256],[-32,-65],[111,-96],[157,-259]],[[85652,73393],[240,-697],[68,-383],[3,-681],[-105,-325],[-252,-113],[-222,-245],[-250,-51],[-31,322]],[[85103,71220],[52,443],[-123,615]],[[85032,72278],[206,99],[-190,506]],[[85048,72883],[-135,113],[-34,-112]],[[84879,72884],[-81,-49],[-10,112],[-72,54],[-75,94]],[[84641,73095],[77,260],[65,69]],[[84783,73424],[-25,108],[71,319]],[[84829,73851],[-18,97],[-163,64]],[[84648,74012],[-131,158]],[[84517,74170],[-388,-171],[-204,-277],[-300,-161],[148,274],[-58,230],[220,397],[-147,310],[-242,-209],[-314,-411],[-171,-381],[-272,-29],[-142,-275],[147,-400],[227,-97],[9,-265]],[[83030,72705],[220,-172],[311,421]],[[83561,72954],[247,-230],[179,-15]],[[83987,72709],[46,-310],[-394,-165]],[[83639,72234],[-130,-319],[-270,-296],[-142,-414]],[[83097,71205],[299,-324],[109,-582]],[[83505,70299],[169,-541],[189,-454],[-5,-439],[-174,-161],[66,-315],[164,-184],[-43,-481],[-71,-468],[-155,-53],[-203,-640],[-225,-775],[-258,-705],[-382,-545],[-386,-498],[-313,-68],[-170,-262],[-96,192],[-157,-294],[-388,-296],[-294,-90],[-95,-624],[-154,-35],[-73,429],[66,228]],[[80517,63220],[-373,190],[-131,-97]],[[80013,63313],[-371,-505],[-231,-558],[-61,-410],[212,-623],[260,-772],[252,-365],[169,-475],[127,-1093],[-37,-1039],[-232,-389],[-318,-381],[-227,-492],[-346,-550],[-101,378],[78,401],[-206,335]],[[78981,56775],[-233,87],[-112,307],[-141,611]],[[78495,57780],[-249,271],[-238,-11],[41,464],[-245,-3],[-22,-650],[-150,-863],[-90,-522],[19,-428],[181,-18],[113,-539],[50,-512],[155,-338],[168,-69],[144,-306]],[[78372,54256],[64,-56],[164,-356],[116,-396],[16,-398],[-29,-269],[27,-203],[20,-349],[98,-163],[109,-523],[-5,-199],[-197,-40],[-263,438],[-329,469],[-32,301],[-161,395],[-38,489],[-100,322],[30,431],[-61,250]],[[77801,54399],[-110,227],[-47,292],[-148,334],[-135,280],[-45,-347],[-53,328],[30,369],[82,566]],[[77375,56448],[-27,439],[86,452],[-94,350],[23,644],[-113,306],[-90,707],[-50,746],[-121,490],[-183,-297],[-315,-421],[-156,53],[-172,138],[96,732],[-58,554],[-218,681],[34,213],[-163,76],[-197,481]],[[75657,62792],[-79,309],[-16,301],[-53,284]],[[75509,63686],[-116,344],[-256,23],[25,-243],[-87,-329],[-118,120],[-41,-108],[-78,65],[-108,53]],[[74730,63611],[-39,-216],[-189,7],[-343,-122],[16,-445],[-148,-349],[-400,-398],[-311,-695],[-209,-373]],[[73107,61020],[-276,-386],[-1,-272]],[[72830,60362],[-138,-146]],[[72692,60216],[-250,-212],[-130,-31]],[[72312,59973],[-84,-450],[58,-769],[15,-490],[-118,-561],[-1,-1004],[-144,-29],[-126,-450],[84,-195]],[[71996,56025],[-253,-167],[-93,-402]],[[71650,55456],[-112,-170],[-263,552],[-128,827],[-107,596],[-97,279],[-148,568],[-69,739],[-48,369],[-253,811],[-115,1145],[-83,756],[1,716],[-54,553],[-404,-353],[-196,70],[-362,716],[133,214],[-82,232],[-326,501]],[[68937,64577],[-203,150]],[[68734,64727],[-83,425],[-215,449]],[[68436,65601],[-512,-111],[-451,-11],[-391,-83]],[[67082,65396],[-523,179]],[[66559,65575],[-302,136],[-314,76]],[[65943,65787],[-118,725],[-133,105],[-214,-106],[-280,-286],[-339,196],[-281,454],[-267,168],[-186,561],[-205,788],[-149,-96],[-177,196]],[[63594,68492],[-103,-231],[-165,29]],[[63326,68290],[58,-261],[-25,-135],[89,-445]],[[63448,67449],[109,-510],[137,-135],[47,-207]],[[63741,66597],[190,-248],[16,-244]],[[63947,66105],[-27,-197],[35,-199],[80,-165],[37,-194],[41,-145]],[[64113,65205],[-18,430],[75,310],[76,64]],[[64246,66009],[84,-186],[5,-345]],[[64335,65478],[-61,-348]],[[64274,65130],[53,-226]],[[64327,64904],[49,29],[11,-162],[217,93],[230,-15],[168,-18],[190,400],[207,379],[176,364]],[[65575,65974],[80,201],[35,-51],[-26,-244],[-37,-108]],[[65627,65772],[38,-466]],[[65665,65306],[125,-404],[155,-214]],[[65945,64688],[204,-78],[164,-107]],[[66313,64503],[125,-339],[75,-196],[100,-75],[-1,-132],[-101,-352],[-44,-166],[-117,-189],[-104,-404],[-126,31],[-58,-141],[-44,-300],[34,-395],[-26,-72],[-128,2],[-174,-221],[-27,-288],[-63,-125],[-173,5],[-109,-149]],[[65352,60997],[1,-239],[-134,-164]],[[65219,60594],[-153,56],[-186,-199]],[[64880,60451],[-128,-33],[-201,-159]],[[64551,60259],[-54,-263],[-6,-201],[-277,-249],[-444,-276],[-249,-417]],[[63521,58853],[-122,-32],[-83,34]],[[63316,58855],[-163,-245]],[[63153,58610],[-177,-113],[-233,-31]],[[62743,58466],[-70,-34],[-61,-156],[-73,-43]],[[62539,58233],[-42,-150],[-138,13]],[[62359,58096],[-89,-80],[-192,30],[-72,345],[8,323],[-46,174],[-54,437],[-80,243],[56,29],[-29,270],[34,114],[-12,257]],[[61883,60238],[-36,253],[-84,177]],[[61763,60668],[-22,236],[-143,212],[-148,495],[-79,482],[-192,406],[-124,97],[-184,563],[-32,411],[12,350],[-159,655],[-130,231],[-150,122],[-92,339],[15,133]],[[60335,65400],[-77,307],[-81,131]],[[60177,65838],[-108,440],[-170,476],[-141,406],[-139,-3],[44,325],[12,206],[34,236]],[[59709,67924],[-9,86]],[[59700,68010],[-78,-238],[-60,-446],[-75,-308],[-65,-103],[-93,191],[-125,263],[-198,847],[-29,-53],[115,-624],[171,-594],[210,-920],[102,-321],[90,-334],[249,-654],[-55,-103],[9,-384],[323,-530],[49,-121]],[[60240,63578],[90,-580],[-61,-107],[40,-608],[102,-706],[106,-145],[152,-219]],[[60669,61213],[161,-683],[77,-543]],[[60907,59987],[152,-288],[379,-558],[154,-336],[151,-341],[87,-203],[136,-178]],[[61966,58083],[66,-183],[-9,-245],[-158,-142],[119,-161]],[[61984,57352],[91,-109]],[[62075,57243],[54,-244],[125,-248]],[[62254,56751],[138,-2],[262,151],[302,70],[245,184],[138,39],[99,108],[158,20]],[[63596,57321],[89,12],[128,88],[147,59],[132,202],[105,2],[6,-163],[-25,-344],[1,-310],[-59,-214],[-78,-639],[-134,-659],[-172,-755],[-238,-866],[-237,-661],[-327,-806],[-278,-479],[-415,-586],[-259,-450],[-304,-715],[-64,-312],[-63,-140]],[[61551,49585],[-195,-236],[-68,-246],[-104,-44],[-40,-416],[-89,-238],[-54,-393],[-112,-195]],[[60889,47817],[-128,-728],[16,-335],[178,-216],[8,-153],[-76,-357],[16,-180],[-18,-282],[97,-370],[115,-583],[101,-129]],[[61198,44484],[45,-265],[-11,-588],[34,-519],[11,-923],[49,-290],[-83,-422],[-108,-410],[-177,-366],[-254,-225],[-313,-287],[-313,-634],[-107,-108],[-194,-420],[-115,-136],[-23,-421],[132,-448],[54,-346],[4,-177],[49,29],[-8,-579]],[[59870,36949],[-45,-274],[65,-102]],[[59890,36573],[-41,-246],[-116,-210]],[[59733,36117],[-229,-199],[-334,-320],[-122,-219],[24,-248],[71,-40],[-24,-311]],[[59119,34780],[-70,-430],[-32,-491],[-72,-267],[-190,-298],[-54,-86],[-118,-300],[-77,-303],[-158,-424],[-314,-609],[-196,-355]],[[57838,31217],[-209,-269],[-291,-229]],[[57338,30719],[-141,-31],[-36,-164],[-169,88],[-138,-113],[-301,114],[-168,-72],[-115,31],[-286,-233],[-238,-94],[-171,-223],[-127,-14],[-117,210],[-94,11],[-120,264],[-13,-82],[-37,159],[2,346],[-90,396],[89,108],[-7,453],[-182,553],[-139,501],[-1,1],[-199,768]],[[54540,33696],[-207,446],[-108,432],[-62,575],[-68,428],[-93,910],[-7,707],[-35,322],[-108,243],[-144,489],[-146,708],[-60,371],[-226,577],[-17,453]],[[53259,40357],[-26,372],[38,519],[96,541],[15,254],[90,532],[66,243],[159,386],[90,263],[29,438],[-15,335],[-83,211],[-74,358],[-68,355],[15,122],[85,235],[-84,570],[-57,396],[-139,374],[26,115]],[[53422,46976],[-39,183]],[[53383,47159],[-74,444]],[[53309,47603],[-228,626]],[[53081,48229],[-285,596],[-184,488],[-169,610],[9,196],[61,189],[67,430],[56,438]],[[52636,51176],[-52,90],[96,663]],[[52680,51929],[40,467],[-108,390]],[[52612,52786],[-127,100],[-56,265]],[[52429,53151],[-71,85],[3,163]],[[52361,53399],[-289,-213]],[[52072,53186],[-105,32],[-107,-133]],[[51860,53085],[-222,13],[-149,370],[-91,427]],[[51398,53895],[-197,390],[-209,-8]],[[50992,54277],[-245,1]],[[50747,54278],[-229,-69]],[[50518,54209],[-224,-126]],[[50294,54083],[-436,-346],[-154,-203],[-250,-171],[-248,168]],[[49206,53531],[-126,-7],[-194,116],[-178,-7],[-329,-103],[-193,-170],[-275,-217],[-54,15]],[[47857,53158],[-73,-5],[-286,282]],[[47498,53435],[-252,450],[-237,323]],[[47009,54208],[-187,381]],[[46822,54589],[-75,44],[-200,238],[-144,316],[-49,216],[-34,437]],[[46320,55840],[-122,349],[-108,232],[-71,76],[-69,118],[-32,261],[-41,130],[-80,97]],[[45797,57103],[-149,247],[-117,39],[-63,166],[1,90],[-84,125],[-18,127]],[[45367,57897],[-46,453]],[[45321,58350],[36,262]],[[45357,58612],[-115,460],[-138,210],[122,112],[134,415],[66,304]],[[45426,60113],[-24,318],[78,291],[34,557],[-30,583],[-34,294],[28,295],[-72,281],[-146,255]],[[45260,62987],[12,249]],[[45272,63236],[13,274],[106,161],[91,308],[-18,200],[96,417],[155,376],[93,95],[74,344],[6,315],[100,365],[185,216],[177,603],[144,235]],[[46494,67145],[259,66],[219,403],[139,158]],[[47111,67772],[232,493],[-70,735],[106,508],[37,312],[179,399],[278,270],[206,244],[186,612],[87,362],[205,-2],[167,-251],[264,41],[288,-131],[121,-6]],[[49397,71358],[267,323],[300,102],[175,244],[268,180],[471,105],[459,48],[140,-87],[262,232],[297,5],[113,-137],[190,35]],[[52339,72408],[302,239],[195,-71],[-9,-299],[236,217],[20,-113]],[[53083,72381],[-139,-289],[-2,-274]],[[52942,71818],[96,-147],[-36,-511],[-183,-297],[53,-322],[143,-10],[70,-281],[106,-92]],[[53191,70158],[326,-204],[117,51],[232,-98],[368,-264],[130,-526],[250,-114],[391,-248],[296,-293],[136,153],[133,272],[-65,452],[87,288],[200,277],[192,80],[375,-121],[95,-264],[104,-2],[88,-101]],[[56646,69496],[276,-69],[68,-196]],[[56990,69231],[369,10],[268,-156],[275,-175],[129,-92],[214,188],[114,169],[245,49],[198,-75],[75,-293],[65,193],[222,-140],[217,-33],[137,149]],[[59518,69025],[80,194],[-19,34],[74,276],[56,446],[40,149],[8,6]],[[59757,70130],[99,482],[138,416],[5,21]],[[59999,71049],[-26,452],[68,243]],[[60041,71744],[-102,268],[105,222],[-169,-51],[-233,136],[-191,-340],[-421,-66],[-225,317],[-300,20],[-64,-245]],[[58441,72005],[-192,-71],[-268,315]],[[57981,72249],[-303,-10],[-165,587]],[[57513,72826],[-203,328],[135,459],[-176,283],[308,565],[428,23],[117,449],[529,-78],[334,383],[324,167],[459,13]],[[59768,75418],[485,-416],[399,-229]],[[60652,74773],[323,91],[239,-53],[328,309]],[[61542,75120],[42,252],[-70,403],[-160,218],[-154,68],[-102,181]],[[61098,76242],[-354,499],[-317,223],[-240,347],[202,95],[231,494],[-156,234],[410,241],[-8,129],[-249,-95]],[[60617,78409],[-222,-48],[-185,-191],[-260,-31],[-239,-220],[16,-368],[136,-142],[284,35],[-55,-210],[-304,-103],[-377,-342],[-154,121],[61,277],[-304,173],[50,113],[265,197],[-80,135],[-432,149],[-19,221],[-257,-73],[-103,-325],[-215,-437]],[[58223,77340],[6,-152],[-135,-128],[-84,56],[-78,-713]],[[57932,76403],[-144,-245],[-101,-422],[89,-337]],[[57776,75399],[33,-228],[243,-190],[-51,-145],[-330,-33],[-118,-182],[-232,-319]],[[57321,74302],[-87,275],[3,122]],[[57237,74699],[-169,17],[-145,56],[-336,-154],[192,-332],[-141,-96]],[[56638,74190],[-154,0],[-147,304]],[[56337,74494],[-52,-130],[62,-353],[139,-277]],[[56486,73734],[-105,-130],[155,-272]],[[56536,73332],[137,-171],[4,-334],[-257,157],[82,-302],[-176,-62],[105,-521]],[[56431,72099],[-184,-7],[-228,257],[-104,472]],[[55915,72821],[-49,393],[-108,272],[-143,337],[-18,168]],[[55597,73991],[-48,41],[-5,130],[-154,199],[-24,281],[23,403],[38,184]],[[55427,75229],[-46,93],[-59,46]],[[55322,75368],[-78,192],[-120,118]],[[55124,75678],[-261,218],[-161,213],[-254,176]],[[54448,76285],[-233,435],[56,44]],[[54271,76764],[-127,248],[-5,200],[-179,93],[-85,-255],[-82,198],[6,205],[10,9]],[[53809,77462],[62,54]],[[53871,77516],[-221,86],[-226,-210],[15,-293],[-34,-168],[91,-301],[261,-298],[140,-488],[309,-476],[217,3],[68,-130],[-78,-118]],[[54413,75123],[249,-213],[204,-179]],[[54866,74731],[238,-308],[29,-111],[-52,-211],[-154,276],[-242,97],[-116,-382],[200,-219],[-33,-309],[-116,-35],[-148,-506],[-116,-46],[1,181],[57,317],[60,126],[-108,342],[-85,298],[-115,74],[-82,255],[-179,107],[-120,238],[-206,38],[-217,267],[-254,384]],[[53108,75604],[-189,341],[-86,584]],[[52833,76529],[-138,68],[-226,195],[-128,-80],[-161,-274],[-115,-43]],[[52065,76395],[-252,-334],[-548,160],[-404,-192],[-32,-355]],[[50829,75674],[15,-344],[-263,-393],[-356,-125],[-25,-199],[-171,-327],[-107,-481],[108,-338],[-160,-263],[-60,-384],[-210,-118]],[[49600,72702],[-197,-455],[-352,-8]],[[49051,72239],[-265,11],[-174,-209],[-106,-223],[-136,49],[-103,199],[-79,340],[-259,92]],[[47929,72498],[-112,-153],[-146,83],[-143,-65],[42,462],[-26,363],[-124,55],[-67,224],[22,386],[111,215],[20,239],[58,355],[-6,250],[-56,212],[-12,200]],[[47490,75324],[14,420],[-114,257],[393,426]],[[47783,76427],[340,-107],[373,4]],[[48496,76324],[296,-101],[230,31],[449,-19]],[[49471,76235],[144,354],[53,1177],[-287,620],[-205,299]],[[49176,78685],[-424,228],[-28,430]],[[48724,79343],[360,129],[466,-152],[-88,669],[263,-254],[646,461],[84,484],[243,119]],[[50698,80799],[222,117]],[[50920,80916],[143,162]],[[51063,81078],[244,870],[380,247]],[[51687,82195],[231,-17]],[[51918,82178],[54,125],[232,32],[52,-130],[188,291],[-63,222],[-13,335]],[[52368,83053],[-113,328],[-8,604],[46,159]],[[52293,84144],[80,178],[244,36]],[[52617,84358],[98,163],[223,167],[-9,-304],[-82,-192],[33,-166],[151,-89],[-68,-223],[-83,64],[-200,-425],[76,-288]],[[52756,83065],[4,-228],[281,-138],[-3,-210],[283,111],[156,162],[313,-233],[132,-189]],[[53922,82340],[189,174],[434,273],[350,200],[277,-100],[21,-144],[268,-7]],[[55461,82736],[63,260],[383,191]],[[55907,83187],[-59,497]],[[55848,83684],[10,445],[136,371],[262,202],[221,-442],[223,12],[53,453]],[[56753,84725],[32,349],[-102,-75],[-176,210],[-24,340],[351,164],[350,86],[301,-97],[287,17]],[[57772,85719],[316,327],[-291,280]],[[57797,86326],[-504,-47],[-489,-216],[-452,-125]],[[56352,85938],[-161,322],[-269,195],[62,581]],[[55984,87036],[-135,534],[133,344]],[[55982,87914],[252,371],[635,640],[185,124],[-28,250],[-387,279]],[[56639,89578],[-478,-167],[-269,-413],[43,-361],[-441,-475],[-537,-509],[-202,-832],[198,-416],[265,-328],[-255,-666],[-289,-138],[-106,-992],[-157,-554],[-337,57],[-158,-468],[-321,-27],[-89,558],[-232,671],[-211,835]],[[53063,85353],[-187,363],[-548,-684]],[[52328,85032],[-370,-138],[-385,301]],[[51573,85195],[-99,635]],[[51474,85830],[-88,1364],[256,380]],[[51642,87574],[733,496],[549,609],[508,824],[668,1141],[465,444],[763,741],[610,259],[457,-31],[423,489],[506,-26],[499,118],[869,-433],[-358,-158],[305,-371]],[[58639,91676],[286,206],[456,-358],[761,-140],[1050,-668],[213,-281],[18,-393],[-308,-311],[-454,-157],[-1240,449],[-204,-75],[453,-433],[36,-878],[358,-180],[217,-153],[36,286]],[[60317,88590],[-174,263],[183,215]],[[60326,89068],[672,-368]],[[60998,88700],[234,144],[-187,433]],[[61045,89277],[647,578],[256,-34],[260,-206],[161,406],[-231,352],[136,353],[-204,367],[777,-190],[158,-331],[-351,-73]],[[62654,90499],[2,-328],[218,-203]],[[62874,89968],[429,128],[68,377]],[[63371,90473],[581,282],[969,507]],[[64921,91262],[209,-29],[-273,-359],[344,-61],[199,202],[521,16],[412,245],[317,-356],[315,391],[-291,343],[145,195],[820,-179],[385,-185],[1006,-675],[186,309],[-282,313],[-8,125],[-335,58],[92,280],[-149,461],[-8,189],[512,535]],[[69038,93080],[182,537],[207,116]],[[69427,93733],[735,-156],[58,-328]],[[70220,93249],[-263,-479],[173,-189],[89,-413],[-63,-809],[307,-362],[-120,-395],[-544,-839],[318,-87],[110,213],[306,151],[74,293],[240,281],[-162,336],[130,390],[-304,49],[-67,328]],[[70444,91717],[222,594],[-361,481]],[[70305,92792],[497,398],[-64,421],[139,13],[145,-328],[-109,-570],[297,-108],[-127,426],[465,233],[577,31],[513,-337],[-247,492],[-28,630]],[[72363,94093],[484,119],[668,-26]],[[73515,94186],[602,77],[-226,309],[321,388],[319,16],[540,293],[734,79],[93,162],[729,55],[227,-133],[624,314],[510,-10],[77,255],[265,252],[656,242],[476,-191],[-378,-146],[629,-90],[75,-292],[254,143],[812,-7],[626,-289],[223,-221],[-69,-307],[-307,-175],[-730,-328],[-209,-175],[345,-83],[410,-149]],[[63720,73858],[-47,-207],[-102,-138]],[[63571,73513],[7,-293]],[[63578,73220],[88,-436],[263,-123],[193,-296],[395,-102],[434,156],[27,139]],[[64978,72558],[-52,417],[40,618],[-216,200],[71,405],[-184,34],[61,498],[262,-145],[244,189],[-202,355],[-80,338],[-224,-151],[-28,-433],[-87,383]],[[64583,75266],[-15,144],[68,246],[-53,206],[-322,202],[-125,530],[-154,150],[-9,192],[270,-56],[11,432],[236,96],[243,-88],[50,576],[-50,365],[-278,-28],[-236,144],[-321,-260],[-259,-124]],[[63639,77993],[-127,-350],[-269,-97],[-276,-610],[252,-561],[-27,-398],[303,-696]],[[63495,75281],[146,-311],[141,-419],[130,-28],[85,-159],[-228,-47],[-49,-459]],[[23212,96566],[559,-9],[195,-109],[-33,-68],[-126,-17],[-521,38],[-74,165]],[[18463,96506],[224,188],[406,60],[392,-92],[-93,-177],[-518,-170],[-411,191]],[[55757,96473],[191,152],[-167,189],[575,119],[110,-222],[401,-134],[-620,-241],[-490,137]],[[18738,96905],[5,84],[285,177],[149,-27],[361,-120],[-339,-115],[-461,1]],[[22602,97179],[360,-24],[162,-39],[332,-205],[-76,-214],[-411,-122],[-226,138],[-119,221],[-22,245]],[[20696,97433],[546,-81],[751,-215],[212,-281],[108,-247],[-453,66],[-457,192],[-619,21],[268,176],[-335,142],[-21,227]],[[77621,96617],[507,776],[229,66],[208,-38],[704,-336],[-82,-240],[-1566,-228]],[[52901,97640],[757,212],[152,-207],[396,8],[105,202],[408,20],[350,-206],[915,-440],[-699,-233],[-155,-435],[-243,-111],[-132,-490],[-335,-23],[-598,361],[252,210],[-416,170],[-541,499],[-216,463]],[[54824,98034],[858,165],[403,-142],[281,177],[702,-148],[545,-207],[-412,-318],[-806,-70],[-819,98],[-50,163],[-398,11],[-304,271]],[[62457,98194],[542,107],[422,8],[57,-160],[159,142],[262,97],[412,-129],[-107,-90],[-373,-78],[-250,-45],[-39,-97],[-324,-98],[-301,140],[158,185],[-618,18]],[[75327,98047],[722,404],[600,133],[540,-297],[640,-572],[-69,-531],[-606,-73],[-773,170],[-462,226],[-213,423],[-379,117]],[[23136,97939],[193,262],[192,180],[285,42],[-122,135],[646,30],[355,-315],[468,-127],[455,-112],[220,-390],[334,-190],[-381,-176],[-513,-445],[-492,-42],[-575,76],[-299,240],[4,215],[220,157],[-508,-4],[-306,196],[-176,268]],[[24559,98965],[413,112],[324,19],[545,96],[409,220],[344,-30],[300,-166],[211,319],[367,95],[498,65],[849,24],[148,-63],[802,100],[601,-38],[602,-37],[742,-47],[597,-75],[508,-161],[-12,-157],[-678,-257],[-672,-119],[-251,-133],[605,3],[-656,-358],[-452,-167],[-476,-483],[-573,-98],[-177,-120],[-841,-64],[383,-74],[-192,-105],[230,-292],[-264,-202],[-429,-167],[-132,-232],[-388,-176],[39,-134],[475,23],[6,-144],[-742,-355],[-726,163],[-816,-91],[-414,71],[-525,31],[-35,284],[514,133],[-137,427],[170,41],[742,-255],[-379,379],[-450,113],[225,229],[492,141],[79,206],[-392,231],[-118,304],[759,-26],[220,-64],[433,216],[-625,68],[-972,-38],[-491,201],[-232,239],[-324,173],[-61,202]],[[29639,96690],[39,229],[1051,285],[1018,284],[107,214],[-750,213],[243,235],[961,413],[404,63],[-115,265],[658,156],[854,93],[853,5],[303,-184],[737,325],[663,-221],[390,-46],[577,-192],[-660,318],[38,253],[932,353],[975,-27],[354,218],[982,57],[2219,-74],[1737,-469],[-513,-227],[-1062,-26],[-1496,-58],[140,-105],[984,65],[836,-204],[540,181],[231,-212],[-305,-344],[707,220],[1348,229],[833,-114],[156,-253],[-1132,-420],[-157,-136],[-888,-102],[643,-28],[-324,-431],[-224,-383],[9,-658],[333,-386],[-434,-24],[-457,-187],[513,-313],[65,-502],[-297,-55],[360,-508],[-617,-42],[322,-241],[-91,-208],[-391,-91],[-388,-2],[348,-400],[4,-263],[-549,244],[-143,-158],[375,-148],[364,-361],[105,-476],[-495,-114],[-214,228],[-344,340],[95,-401],[-322,-311],[732,-25],[383,-32],[-745,-515],[-755,-466],[-813,-204],[-306,-2],[-288,-228],[-386,-624],[-597,-414],[-192,-24],[-370,-145],[-399,-138],[-238,-365],[-4,-415],[-141,-388],[-453,-472],[112,-462],[-125,-488],[-142,-577],[-391,-36],[-410,482],[-556,3],[-269,324],[-186,577],[-481,735],[-141,385],[-38,530],[-384,546],[100,435],[-186,208],[275,691],[418,220],[110,247],[58,461],[-318,-209],[-151,-88],[-249,-84],[-341,193],[-19,401],[109,314],[258,9],[567,-157],[-478,375],[-249,202],[-276,-83],[-232,147],[310,550],[-169,220],[-220,409],[-335,626],[-353,230],[3,247],[-745,346],[-590,43],[-743,-24],[-677,-44],[-323,188],[-482,372],[729,186],[559,31],[-1188,154],[-627,241]],[[67002,71642],[284,-224],[209,79],[58,268],[219,89],[157,180],[55,472],[234,114],[44,211],[131,-158],[84,-19]],[[68477,72654],[154,-4],[210,-124]],[[68841,72526],[85,-72],[201,189],[93,-114],[90,271],[166,-12],[43,86],[29,239],[120,205],[150,-134],[-30,-181],[84,-28],[-26,-496],[110,-194],[97,125],[123,58],[173,265],[192,-44],[286,-1]],[[70827,72688],[50,-169]],[[70877,72519],[-162,-67],[-141,-109],[-319,-68],[-298,-124],[-163,-258],[66,-250],[32,-294],[-139,-248],[12,-227],[-76,-213],[-265,18],[110,-390],[-177,-150],[-118,-356],[15,-355],[-108,-166],[-103,55],[-212,-77],[-31,-166],[-207,1],[-154,-334],[-10,-503],[-361,-246],[-194,52],[-56,-129],[-166,75],[-278,-88],[-465,301]],[[66909,68203],[252,536],[-23,380],[-210,100],[-22,375],[-91,472],[119,323],[-121,87],[76,430],[113,736]],[[56642,44124],[29,-184],[-32,-286],[49,-277],[-41,-222],[24,-203],[-579,7],[-13,-1880],[188,-483],[181,-369]],[[56448,40227],[-510,-241],[-673,83],[-192,284],[-1126,-26],[-42,-41],[-166,267],[-180,17],[-166,-100],[-134,-113]],[[53422,46976],[115,79],[80,-11],[98,71],[820,-8],[68,-440],[80,-354],[64,-191],[106,-309],[184,47],[91,83],[154,-83],[42,148],[69,344],[172,23],[15,103],[142,2],[-24,-213],[337,5],[5,-372],[56,-228],[-41,-356],[21,-363],[93,-219],[-15,-703],[68,54],[121,-15],[172,89],[127,-35]],[[53309,47603],[112,255],[84,100],[104,-203]],[[53609,47755],[-101,-124],[-45,-152],[-9,-258],[-71,-62]],[[55719,75309],[-35,-201],[39,-254],[115,-144]],[[55838,74710],[-5,-155],[-91,-85],[-16,-192],[-129,-287]],[[55427,75229],[-47,93]],[[55380,75322],[-18,188],[120,291],[18,-111],[75,52]],[[55575,75742],[59,-159],[66,-60],[19,-214]],[[65575,65974],[52,-202]],[[65665,65306],[-142,-3],[-23,-384],[50,-82],[-126,-117],[-1,-241],[-81,-245],[-7,-238]],[[65335,63996],[-56,-125],[-835,298],[-106,599],[-11,136]],[[31400,18145],[-168,16],[-297,1],[0,1319]],[[32587,37434],[511,-964],[227,-89],[339,-437],[286,-231],[40,-261],[-273,-898],[280,-160],[312,-91],[220,95],[252,453],[45,521]],[[34826,35372],[138,114],[139,-341],[-6,-472],[-234,-326],[-186,-241],[-314,-573],[-370,-806]],[[33993,32727],[-70,-473],[-74,-607],[3,-588],[-61,-132],[-21,-382]],[[31227,23224],[273,-433],[266,-119]],[[30952,19680],[-257,93],[-672,79],[-115,344],[6,443],[-185,-38],[-98,214],[-24,626],[213,260],[88,375],[-33,299],[148,504],[101,782],[-30,347],[122,112],[-30,223],[-129,118],[92,248],[-126,224],[-65,682],[112,120],[-47,720],[65,605],[75,527],[166,215],[-84,576],[-1,543],[210,386],[-7,494],[159,576],[1,544],[-72,108],[-128,1020],[171,607],[-27,572],[100,537],[182,555],[196,367],[-83,232],[58,190],[-9,985],[302,291],[96,614],[-34,148]],[[31359,37147],[231,534],[364,-144],[163,-427],[109,475],[316,-24],[45,-127]],[[62492,74950],[57,-155],[106,-103],[-56,-148],[148,-202],[-78,-189],[118,-160],[124,-97],[7,-410]],[[62918,73486],[-101,-17]],[[62817,73469],[-113,342],[1,91],[-123,-2],[-82,159],[-58,-16]],[[62442,74043],[-109,172],[-207,147],[27,288],[-47,208]],[[62106,74858],[386,92]],[[1088,892],[38,-7],[32,-4]],[[1158,881],[402,-246],[352,246],[63,34],[816,104],[265,-138],[130,-71],[419,-196],[789,-151],[625,-185],[1072,-139],[800,162],[1181,-116],[669,-185],[734,174],[773,162],[60,278],[-1094,23],[-898,139],[-234,231],[-745,128],[49,266],[103,243],[104,220],[-55,243],[-462,162],[-212,209],[-430,185],[675,-35],[642,93],[402,-197],[495,173],[457,220],[223,197],[-98,243],[-359,162],[-408,174],[-571,35],[-500,81],[-539,58],[-180,220],[-359,185],[-217,208],[-87,672],[136,-58],[250,-185],[457,58],[441,81],[228,-255],[441,58],[370,127],[348,162],[315,197],[419,58],[-11,220],[-97,220],[81,208],[359,104],[163,-196],[425,115],[321,151],[397,12],[375,57],[376,139],[299,128],[337,127],[218,-35],[190,-46],[414,81],[370,-104],[381,11],[364,81],[375,-57],[414,-58],[386,23],[403,-12],[413,-11],[381,23],[283,174],[337,92],[349,-127],[331,104],[300,208],[179,-185],[98,-208],[180,-197],[288,174],[332,-220],[375,-70],[321,-162],[392,35],[354,104],[418,-23],[376,-81],[381,-104],[147,254],[-180,197],[-136,209],[-359,46],[-158,220],[-60,220],[-98,440],[213,-81],[364,-35],[359,35],[327,-93],[283,-174],[119,-208],[376,-35],[359,81],[381,116],[342,70],[283,-139],[370,46],[239,451],[224,-266],[321,-104],[348,58],[228,-232],[365,-23],[337,-69],[332,-128],[218,220],[108,209],[278,-232],[381,58],[283,-127],[190,-197],[370,58],[288,127],[283,151],[337,81],[392,69],[354,81],[272,127],[163,186],[65,254],[-32,244],[-87,231],[-98,232],[-87,231],[-71,209],[-16,231],[27,232],[130,220],[109,243],[44,231],[-55,255],[-32,232],[136,266],[152,173],[180,220],[190,186],[223,173],[109,255],[152,162],[174,151],[267,34],[174,186],[196,115],[228,70],[202,150],[157,186],[218,69],[163,-151],[-103,-196],[-283,-174],[-120,-127],[-206,92],[-229,-58],[-190,-139],[-202,-150],[-136,-174],[-38,-231],[17,-220],[130,-197],[-190,-139],[-261,-46],[-153,-197],[-163,-185],[-174,-255],[-44,-220],[98,-243],[147,-185],[229,-139],[212,-185],[114,-232],[60,-220],[82,-232],[130,-196],[82,-220],[38,-544],[81,-220],[22,-232],[87,-231],[-38,-313],[-152,-243],[-163,-197],[-370,-81],[-125,-208],[-169,-197],[-419,-220],[-370,-93],[-348,-127],[-376,-128],[-223,-243],[-446,-23],[-489,23],[-441,-46],[-468,0],[87,-232],[424,-104],[311,-162],[174,-208],[-310,-185],[-479,58],[-397,-151],[-17,-243],[-11,-232],[327,-196],[60,-220],[353,-220],[588,-93],[500,-162],[398,-185],[506,-186],[690,-92],[681,-162],[473,-174],[517,-197],[272,-278],[136,-220],[337,209],[457,173],[484,186],[577,150],[495,162],[691,12],[680,-81],[560,-139],[180,255],[386,173],[702,12],[550,127],[522,128],[577,81],[614,104],[430,150],[-196,209],[-119,208],[0,220],[-539,-23],[-571,-93],[-544,0],[-77,220],[39,440],[125,128],[397,138],[468,139],[337,174],[337,174],[251,231],[380,104],[376,81],[190,47],[430,23],[408,81],[343,116],[337,139],[305,139],[386,185],[245,197],[261,173],[82,232],[-294,139],[98,243],[185,185],[288,116],[305,139],[283,185],[217,232],[136,277],[202,163],[331,-35],[136,-197],[332,-23],[11,220],[142,231],[299,-58],[71,-220],[331,-34],[360,104],[348,69],[315,-34],[120,-243],[305,196],[283,105],[315,81],[310,81],[283,139],[310,92],[240,128],[168,208],[207,-151],[288,81],[202,-277],[157,-209],[316,116],[125,232],[283,162],[365,-35],[108,-220],[229,220],[299,69],[326,23],[294,-11],[310,-70],[300,-34],[130,-197],[180,-174],[304,104],[327,24],[315,0],[310,11],[278,81],[294,70],[245,162],[261,104],[283,58],[212,162],[152,324],[158,197],[288,-93],[109,-208],[239,-139],[289,46],[196,-208],[206,-151],[283,139],[98,255],[250,104],[289,197],[272,81],[326,116],[218,127],[228,139],[218,127],[261,-69],[250,208],[180,162],[261,-11],[229,139],[54,208],[234,162],[228,116],[278,93],[256,46],[244,-35],[262,-58],[223,-162],[27,-254],[245,-197],[168,-162],[332,-70],[185,-162],[229,-162],[266,-35],[223,116],[240,243],[261,-127],[272,-70],[261,-69],[272,-46],[277,0],[229,-614],[-11,-150],[-33,-267],[-266,-150],[-218,-220],[38,-232],[310,12],[-38,-232],[-141,-220],[-131,-243],[212,-185],[321,-58],[321,104],[153,232],[92,220],[153,185],[174,174],[70,208],[147,289],[174,58],[316,24],[277,69],[283,93],[136,231],[82,220],[190,220],[272,151],[234,115],[153,197],[157,104],[202,93],[277,-58],[250,58],[272,69],[305,-34],[201,162],[142,393],[103,-162],[131,-278],[234,-115],[266,-47],[267,70],[283,-46],[261,-12],[174,58],[234,-35],[212,-127],[250,81],[300,0],[255,81],[289,-81],[185,197],[141,196],[191,163],[348,439],[179,-81],[212,-162],[185,-208],[354,-359],[272,-12],[256,0],[299,70],[299,81],[229,162],[190,174],[310,23],[207,127],[218,-116],[141,-185],[196,-185],[305,23],[190,-150],[332,-151],[348,-58],[288,47],[218,185],[185,185],[250,46],[251,-81],[288,-58],[261,93],[250,0],[245,-58],[256,-58],[250,104],[299,93],[283,23],[316,0],[255,58],[251,46],[76,290],[11,243],[174,-162],[49,-266],[92,-244],[115,-196],[234,-105],[315,35],[365,12],[250,35],[364,0],[262,11],[364,-23],[310,-46],[196,-186],[-54,-220],[179,-173],[299,-139],[310,-151],[360,-104],[375,-92],[283,-93],[315,-12],[180,197],[245,-162],[212,-185],[245,-139],[337,-58],[321,-69],[136,-232],[316,-139],[212,-208],[310,-93],[321,12],[299,-35],[332,12],[332,-47],[310,-81],[288,-139],[289,-116],[195,-173],[-32,-232],[-147,-208],[-125,-266],[-98,-209],[-131,-243],[-364,-93],[-163,-208],[-360,-127],[-125,-232],[-190,-220],[-201,-185],[-115,-243],[-70,-220],[-28,-266],[6,-220],[158,-232],[60,-220],[130,-208],[517,-81],[109,-255],[-501,-93],[-424,-127],[-528,-23],[-234,-336],[-49,-278],[-119,-220],[-147,-220],[370,-196],[141,-244],[239,-219],[338,-197],[386,-186],[419,-185],[636,-185],[142,-289],[800,-128],[53,-45],[208,-175],[767,151],[636,-186],[-99504,-147],[245,344],[501,-185],[32,21],[294,188]],[[54716,79012],[-21,-241],[-156,-2],[53,-128],[-92,-380]],[[54500,78261],[-53,-100],[-243,-14],[-140,-134],[-229,45]],[[53835,78058],[-398,153],[-62,205],[-274,-102],[-32,-113],[-169,84]],[[52900,78285],[-142,16],[-125,108],[42,145],[-10,104]],[[52665,78658],[83,33],[141,-164],[39,156],[245,-25],[199,106],[133,-18],[87,-121],[26,100],[-40,385],[100,75],[98,272]],[[53776,79457],[206,-190],[157,242],[98,44],[215,-180],[131,30],[128,-111]],[[54711,79292],[-23,-75],[28,-205]],[[62817,73469],[-190,78],[-141,273],[-44,223]],[[63720,73858],[-48,-207],[-101,-138]],[[63578,73220],[-69,-29],[-173,309],[95,292],[-82,174],[-104,-44],[-327,-436]],[[62492,74950],[68,96],[207,-169],[149,-36],[38,70],[-136,319],[72,82]],[[62890,75312],[78,-20],[191,-359],[122,-40],[48,150],[166,238]],[[58149,47921],[-17,713],[-70,268]],[[58062,48902],[169,-46],[85,336],[147,-38]],[[58463,49154],[16,-233],[60,-134],[3,-192],[-69,-124],[-108,-308],[-101,-214],[-115,-28]],[[50920,80916],[204,-47],[257,123],[176,-258],[153,-138]],[[51710,80596],[-32,-400]],[[51678,80196],[-72,-22],[-30,-331]],[[51576,79843],[-243,269],[-143,-46],[-194,279],[-129,237],[-129,10],[-40,207]],[[50518,54209],[-69,407],[13,1357],[-56,122],[-11,290],[-96,207],[-85,174],[35,311]],[[50249,57077],[96,67],[56,258],[136,56],[61,176]],[[50598,57634],[93,173],[100,2],[212,-340]],[[51003,57469],[-11,-197],[62,-350],[-54,-238],[29,-159],[-135,-366],[-86,-181],[-52,-372],[7,-376],[-16,-952]],[[49214,56277],[-190,152],[-130,-22],[-97,-149],[-125,125],[-49,195],[-125,129]],[[48498,56707],[-18,343],[76,250],[-7,200],[221,490],[41,405],[76,144],[134,-79],[116,120],[38,152],[216,265],[53,184],[259,246],[153,84],[70,-114],[178,3]],[[50104,59400],[-22,-286],[37,-269],[156,-386],[9,-286],[320,-134],[-6,-405]],[[50249,57077],[-243,13]],[[50006,57090],[-128,47],[-90,-96],[-123,43],[-482,-27],[-7,-336],[38,-444]],[[75742,63602],[-6,-424],[-97,90],[18,-476]],[[75657,62792],[-79,308],[-16,301],[-53,285]],[[74730,63611],[-43,486],[-96,444],[47,356],[-171,159],[62,215],[173,220],[-200,313],[98,401],[220,-255],[133,-30],[24,-410],[265,-81],[257,8],[160,-101],[-128,-500],[-124,-34],[-86,-336],[152,-306],[46,377],[76,2],[147,-937]],[[56293,76715],[80,-243],[108,43],[213,-92],[408,-31],[138,150],[327,138],[202,-215],[163,-62]],[[57776,75399],[-239,79],[-283,-186]],[[57254,75292],[-3,-294],[-252,-56],[-196,206],[-222,-162],[-206,17]],[[56375,75003],[-20,391],[-139,189]],[[56216,75583],[46,84],[-30,70],[47,188],[105,185],[-135,255],[-24,216],[68,134]],[[55279,77084],[100,2],[-69,-260],[134,-227],[-41,-278],[-65,-27]],[[55338,76294],[-52,-53],[-90,-138],[-41,-325]],[[55155,75778],[-246,224],[-105,247],[-106,130],[-127,221],[-61,183],[-136,277],[59,245],[99,-136],[60,123],[130,13],[239,-98],[192,8],[126,-131]],[[56523,82432],[268,-4],[302,223],[64,333],[228,190],[-26,264]],[[57359,83438],[169,100],[298,228]],[[57826,83766],[293,-149],[39,-146],[146,70],[272,-141],[27,-277],[-60,-159],[174,-387],[113,-108],[-16,-107],[187,-104],[80,-157],[-108,-129],[-224,20],[-54,-55],[66,-196],[68,-379]],[[58829,81362],[-239,-35],[-85,-129],[-18,-298],[-111,57],[-250,-28],[-73,138],[-104,-103],[-105,86],[-218,12],[-310,141],[-281,47],[-215,-14],[-152,-160],[-133,-23]],[[56535,81053],[-6,263],[-85,274],[166,121],[2,235],[-77,225],[-12,261]],[[25238,61101],[-2,87],[33,27],[51,-70],[99,357],[53,8]],[[25297,59966],[-83,0],[22,667],[2,468]],[[31359,37147],[-200,-81],[-109,814],[-150,663],[88,572],[-146,250],[-37,426],[-136,402]],[[30669,40193],[175,638],[-119,496],[63,199],[-49,219],[108,295],[6,503],[13,415],[60,200],[-240,951]],[[30686,44109],[206,-50],[143,13],[62,179],[243,239],[147,222],[363,100],[-29,-443],[34,-227],[-23,-396],[302,-529],[311,-98],[109,-220],[188,-117],[115,-172],[175,6],[161,-175],[12,-342],[55,-172],[3,-255],[-81,-10],[107,-688],[533,-24],[-41,-342],[30,-233],[151,-166],[66,-367],[-49,-465],[-77,-259],[27,-337],[-87,-122]],[[33842,38659],[-4,182],[-259,302],[-258,9],[-484,-172],[-133,-520],[-7,-318],[-110,-708]],[[34826,35372],[54,341],[38,350],[0,325],[-100,107],[-104,-96],[-103,26],[-33,228],[-26,541],[-52,177],[-187,160],[-114,-116],[-293,113],[18,802],[-82,329]],[[30686,44109],[-157,-102],[-126,68],[18,898],[-228,-348],[-245,15],[-105,315],[-184,34],[59,254],[-155,359],[-115,532],[73,108],[0,250],[168,171],[-28,319],[71,206],[20,275],[318,402],[227,114],[37,89],[251,-28]],[[30585,48040],[125,1620],[6,256],[-43,339],[-123,215],[1,430],[156,97],[56,-61],[9,226],[-162,61],[-4,370],[541,-13],[92,203],[77,-187],[55,-349],[52,73]],[[31423,51320],[153,-312],[216,38],[54,181],[206,138],[115,97],[32,250],[198,168],[-15,124],[-235,51],[-39,372],[12,396],[-125,153],[52,55],[206,-76],[221,-148],[80,140],[200,92],[310,221],[102,225],[-37,167]],[[33129,53652],[145,26],[64,-136],[-36,-259],[96,-90],[63,-274],[-77,-209],[-44,-502],[71,-299],[20,-274],[171,-277],[137,-29],[30,116],[88,25],[126,104],[90,157],[154,-50],[67,21]],[[34294,51702],[151,-48],[25,120],[-46,118],[28,171],[112,-53],[131,61],[159,-125]],[[34854,51946],[121,-122],[86,160],[62,-25],[38,-166],[133,42],[107,224],[85,436],[164,540]],[[35174,30629],[-77,334],[122,280],[-160,402],[-218,327],[-286,379],[-103,-18],[-279,457],[-180,-63]],[[82069,53798],[-13,-291],[-16,-377],[-133,19],[-58,-202],[-126,307]],[[75471,66988],[113,-189],[-20,-363],[-227,-17],[-234,39],[-175,-92],[-252,224],[-6,119]],[[74670,66709],[184,439],[150,150],[198,-137],[147,-14],[122,-159]],[[58175,37528],[-393,-435],[-249,-442],[-93,-393],[-83,-222],[-152,-47],[-48,-283],[-28,-184],[-178,-138],[-226,29],[-133,166],[-117,71],[-135,-137],[-68,-283],[-132,-177],[-139,-264],[-199,-60],[-62,207],[26,360],[-165,562],[-75,88]],[[55526,35946],[0,1725],[274,20],[8,2105],[207,19],[428,207],[106,-243],[177,231],[85,2],[156,133]],[[56967,40145],[50,-44]],[[57017,40101],[107,-473],[56,-105],[87,-342],[315,-649],[119,-64],[0,-208],[82,-375],[215,-90],[177,-267]],[[54244,54965],[229,44],[52,152],[46,-11],[69,-134],[350,226],[118,230],[145,207],[-28,208],[78,54],[269,-36],[261,273],[201,645],[141,239],[176,101]],[[56351,57163],[31,-253],[160,-369],[1,-241],[-45,-246],[18,-184],[96,-170]],[[56612,55700],[212,-258]],[[56824,55442],[152,-239],[2,-192],[187,-308],[116,-255],[70,-355],[208,-234],[44,-187]],[[57603,53672],[-91,-63],[-178,14],[-209,62],[-104,-51],[-41,-143],[-90,-18],[-110,125],[-309,-295],[-127,60],[-38,-46],[-83,-357],[-207,115],[-203,59],[-177,218],[-229,200],[-149,-190],[-108,-300],[-25,-412]],[[55125,52650],[-178,33],[-188,99],[-166,-313],[-146,-550]],[[54447,51919],[-29,172],[-12,269],[-127,190],[-103,305],[-23,212],[-132,309],[23,176],[-28,249],[21,458],[67,107],[140,599]],[[26228,91219],[16,649],[394,-46]],[[25824,89109],[-81,-259],[-322,-399]],[[23714,86094],[-16,-686],[409,-99]],[[25743,83665],[348,-163],[294,-248]],[[28738,83981],[-23,395],[-188,502]],[[31513,79609],[415,58],[246,-289]],[[31350,77248],[-181,334],[0,805],[-123,171],[-187,-100],[-92,155],[-212,-446],[-84,-460],[-99,-269],[-118,-91],[-89,-30],[-28,-146],[-512,0],[-422,-4],[-125,-109],[-294,-425],[-34,-46],[-89,-231],[-255,1],[-273,-3],[-125,-93],[44,-116],[25,-181],[-5,-60],[-363,-293],[-286,-93],[-323,-316],[-70,0],[-94,93],[-31,85],[6,61],[61,207],[131,325],[81,349],[-56,514],[-59,536],[-290,277],[35,105],[-41,73],[-76,0],[-56,93],[-14,140],[-54,-61],[-75,18],[17,59],[-65,58],[-27,155],[-216,189],[-224,197],[-272,229],[-261,214],[-248,-167],[-91,-6],[-342,154],[-225,-77],[-269,183],[-284,94],[-194,36],[-86,100],[-49,325],[-94,-3],[-1,-227],[-575,0],[-951,0],[-944,0],[-833,0],[-834,0],[-819,0],[-847,0],[-273,0],[-825,0],[-788,0]],[[15104,80367],[-503,244],[-155,523],[40,363]],[[13740,82958],[154,285],[-7,373],[-473,376],[-284,674],[-173,424],[-255,266],[-187,242],[-147,306],[-279,-192],[-270,-330],[-247,388],[-194,259],[-271,164],[-273,17],[1,3364],[2,2193]],[[11355,91625],[438,-285],[289,-54]],[[15437,92031],[38,-449],[341,97]],[[17987,91291],[374,-300],[-390,-293]],[[19722,91216],[-704,-88],[-494,-56]],[[15020,93041],[119,250],[192,432]],[[16539,93012],[0,-257],[-731,-285]],[[52900,78285],[-22,-242],[-122,-100],[-206,75],[-60,-239],[-132,-19],[-48,94],[-156,-200],[-134,-28],[-120,126]],[[51900,77752],[-95,259],[-133,-92],[5,267],[203,332],[-9,150],[126,-54],[77,101]],[[52074,78715],[236,-4],[57,128],[298,-181]],[[31400,18145],[-92,-239],[-238,-183]],[[31070,17723],[-137,19],[-164,48]],[[30769,17790],[-202,177],[-291,86],[-350,330],[-283,317],[-383,662],[229,-124],[390,-395],[369,-212],[143,271],[90,405],[256,244],[198,-70]],[[29661,27385],[-80,576],[-22,666]],[[30452,39739],[143,151],[74,303]],[[86288,75628],[-179,348],[-111,-331],[-429,-254],[44,-312],[-241,22],[-131,185],[-191,-419],[-306,-318],[-227,-379]],[[83030,72705],[220,-173],[311,422]],[[83987,72709],[45,-310],[-393,-165]],[[83097,71205],[299,-325],[109,-581]],[[80517,63220],[-373,189],[-131,-96]],[[80013,63313],[-280,154],[-132,240],[44,340],[-254,108],[-134,222],[-236,-315],[-271,-68],[-221,3],[-149,-145]],[[78380,63852],[-144,-86],[42,-676],[-148,16],[-25,139]],[[78105,63245],[-9,244],[-203,-172],[-121,109],[-206,222],[81,490],[-176,115],[-66,544],[-293,-98],[33,701],[263,493],[11,487],[-8,452],[-121,141],[-93,348],[-162,-44]],[[77035,67277],[-300,89],[94,248],[-130,367],[-198,-249],[-233,145],[-321,-376],[-252,-439],[-224,-74]],[[74670,66709],[-23,465],[-170,-124]],[[74477,67050],[-324,57],[-314,136],[-225,259],[-216,117],[-93,284],[-157,84],[-280,385],[-223,182],[-115,-141]],[[72530,68413],[-386,413],[-273,374],[-78,651],[200,-79],[9,301],[-111,303],[28,482],[-298,692]],[[71621,71550],[-457,239],[-82,454],[-205,276]],[[70827,72688],[-42,337],[10,230],[-169,134],[-91,-59],[-70,546]],[[70465,73876],[79,136],[-39,138],[266,279],[192,116],[294,-80],[105,378],[356,70],[99,234],[438,320],[39,134]],[[72294,75601],[-22,337],[190,154],[-250,1026],[550,236],[143,131],[200,1058],[551,-194],[155,267],[13,592],[230,56],[212,393]],[[74266,79657],[109,49]],[[74375,79706],[73,-413],[233,-313],[396,-222],[192,-476],[-107,-690],[100,-256],[330,-101],[374,-83],[336,-368],[171,-66],[127,-544],[163,-351],[306,14],[574,-133],[369,82],[274,-88],[411,-359],[336,1],[123,-184],[324,318],[448,205],[417,22],[324,208],[200,316],[194,199],[-45,195],[-89,227],[146,381],[156,-53],[286,-120],[277,313],[423,229],[204,391],[195,168],[404,78],[219,-66],[30,210],[-251,413],[-223,189],[-214,-219],[-274,92],[-157,-74],[-72,241],[197,590],[135,446]],[[82410,80055],[333,-223],[392,373],[-3,260],[251,627],[155,189],[-4,326],[-152,141],[229,294],[345,106],[369,16],[415,-176],[244,-217],[172,-596],[104,-254],[97,-363],[103,-579],[483,-189],[329,-420],[112,-555],[423,-1],[240,233],[459,175],[-146,-532],[-107,-216],[-96,-647],[-186,-575],[-338,104],[-238,-208],[73,-506],[-40,-698],[-142,-16],[2,-300]],[[47857,53158],[22,487],[26,74],[-8,233],[-118,247],[-88,40],[-81,162],[60,262],[-28,286],[13,172]],[[47655,55121],[44,0],[17,258],[-22,114],[27,82],[103,71],[-69,473],[-64,245],[23,200],[55,46]],[[47769,56610],[36,54],[77,-89],[215,-5],[51,172],[48,-11],[80,67],[43,-253],[65,74],[114,88]],[[49214,56277],[74,-841],[-117,-496],[-73,-667],[121,-509],[-13,-233]],[[53632,51919],[-35,32],[-164,-76],[-169,79],[-132,-38]],[[53132,51916],[-452,13]],[[52680,51929],[40,466],[-108,391]],[[52429,53151],[-72,85],[4,163]],[[52361,53399],[71,418],[132,570],[81,6],[165,345],[105,10],[156,-243],[191,199],[26,246],[63,238],[43,299],[148,243],[56,414],[59,132],[39,307],[74,377],[234,457],[14,196],[31,107],[-110,235]],[[53939,57955],[9,188],[78,34]],[[54026,58177],[111,-378],[18,-392],[-10,-393],[151,-537],[-155,6],[-78,-42],[-127,60],[-60,-279],[164,-345],[121,-100],[39,-245],[87,-407],[-43,-160]],[[54447,51919],[-20,-319],[-220,140],[-225,156],[-350,23]],[[58564,52653],[-16,-691],[111,-80],[-89,-210],[-107,-157],[-106,-308],[-59,-274],[-15,-475],[-65,-225],[-2,-446]],[[58216,49787],[-80,-165],[-10,-351],[-38,-46],[-26,-323]],[[58149,47921],[50,-544],[-27,-307]],[[58172,47070],[55,-343],[161,-330]],[[58388,46397],[150,-745]],[[58538,45652],[-109,60],[-373,-99],[-75,-71],[-79,-377],[62,-261],[-49,-699],[-34,-593],[75,-105],[194,-230],[76,107],[23,-637],[-212,5],[-114,325],[-103,252],[-213,82],[-62,310],[-170,-187],[-222,83],[-93,268],[-176,55],[-131,-15],[-15,184],[-96,15]],[[53609,47755],[73,-60],[95,226],[152,-6],[17,-167],[104,-105],[164,370],[161,289],[71,189],[-10,486],[121,574],[127,304],[183,285],[32,189],[7,216],[45,205],[-14,335],[34,524],[55,368],[83,316],[16,357]],[[57603,53672],[169,-488],[124,-71],[75,99],[128,-39],[155,125],[66,-252],[244,-393]],[[53081,48229],[212,326],[-105,391],[95,148],[187,73],[23,261],[148,-283],[245,-25],[85,279],[36,393],[-31,461],[-131,350],[120,684],[-69,117],[-207,-48],[-78,305],[21,258]],[[29063,50490],[-119,140],[-137,195],[-79,-94],[-235,82],[-68,255],[-52,-10],[-278,338]],[[28366,54848],[36,287],[89,-43],[52,176],[-64,348],[34,86]],[[30185,57537],[-178,-99],[-71,-295],[-107,-169],[-81,-220],[-34,-422],[-77,-345],[144,-40],[35,-271],[62,-130],[21,-238],[-33,-219],[10,-123],[69,-49],[66,-207],[357,57],[161,-75],[196,-508],[112,63],[200,-32],[158,68],[99,-102],[-50,-318],[-62,-199],[-22,-423],[56,-393],[79,-175],[9,-133],[-140,-294],[100,-130],[74,-207],[85,-589]],[[30585,48040],[-139,314],[-83,14],[179,602],[-213,276],[-166,-51],[-101,103],[-153,-157],[-207,74],[-163,620],[-129,152],[-89,279],[-184,280],[-74,-56]],[[26191,57131],[42,76],[183,-156],[63,77],[89,-50],[46,-121],[82,-40],[66,126]],[[27070,56232],[-107,-53],[1,-238],[58,-88],[-41,-70],[10,-107],[-23,-120],[-14,-117]],[[59437,71293],[-30,21],[-53,-45],[-42,12],[-14,-22],[-5,59],[-20,37],[-54,6],[-75,-51],[-52,31]],[[53776,79457],[-157,254],[-141,142],[-30,249],[-49,176],[202,129],[103,147],[200,114],[70,113],[73,-68],[124,62]],[[54171,80775],[132,-191],[207,-51],[-17,-163],[151,-122],[41,153],[191,-66],[26,-185],[207,-36],[127,-291]],[[55236,79823],[-82,-1],[-43,-106],[-64,-26],[-18,-134],[-54,-28],[-7,-55],[-95,-61],[-123,10],[-39,-130]],[[53922,82340],[64,-300],[-77,-158],[101,-210],[69,-316],[-22,-204],[114,-377]],[[52074,78715],[35,421],[140,404],[-400,109],[-131,155]],[[51718,79804],[16,259],[-56,133]],[[51710,80596],[-47,619],[167,0],[70,222],[69,541],[-51,200]],[[52368,83053],[210,-78],[178,90]],[[61984,57352],[-102,-317]],[[61882,57035],[-62,106],[-67,-42],[-155,10],[-4,180],[-22,163],[94,277],[98,261]],[[61764,57990],[119,-51],[83,144]],[[52293,84144],[80,177],[244,37]],[[30081,61241],[5,161],[-71,177],[68,99],[21,228],[-24,321]],[[53333,64447],[-952,-1126],[-804,-1161],[-392,-263]],[[51185,61897],[-308,-58],[-3,376],[-129,96],[-173,169],[-66,277],[-937,1289],[-937,1289]],[[48632,65335],[-1045,1431]],[[47587,66766],[6,114],[-1,40]],[[47592,66920],[-2,700],[449,436],[277,90],[227,159],[107,295],[324,234],[12,438],[161,51],[126,219],[363,99],[51,230],[-73,125],[-96,624],[-17,359],[-104,379]],[[52339,72408],[-57,-303],[44,-563],[-65,-487],[-171,-330],[24,-445],[227,-352],[3,-143],[171,-238],[118,-1061]],[[52633,68486],[90,-522],[15,-274],[-49,-482],[21,-270],[-36,-323],[24,-371],[-110,-247],[164,-431],[11,-253],[99,-330],[130,109],[219,-275],[122,-370]],[[29063,50490],[38,-449],[-86,-384],[-303,-619],[-334,-233],[-170,-514],[-53,-398],[-157,-243],[-116,298],[-113,64],[-114,-47],[-8,216],[79,141],[-33,246]],[[60240,63578],[-1102,0],[-1077,0],[-1117,0]],[[56944,63578],[0,2175],[0,2101],[-83,476],[71,365],[-43,253],[101,283]],[[59518,69025],[182,-1015]],[[61764,57990],[-95,191],[-114,346],[-124,190],[-71,204],[-242,237],[-191,7],[-67,124],[-163,-139],[-168,268],[-87,-441],[-323,124]],[[60119,59101],[-30,236],[120,868],[27,393],[88,181],[204,97],[141,337]],[[60669,61213],[161,-684],[77,-542]],[[47783,76427],[340,-106],[373,3]],[[49471,76235],[111,-230],[511,-268],[101,127],[313,-267],[322,77]],[[49600,72702],[-197,-454],[-352,-9]],[[47929,72498],[-23,195],[103,222],[38,161],[-96,175],[77,388],[-111,355],[120,48],[11,280],[45,86],[3,461],[129,160],[-78,296],[-162,21],[-47,-75],[-164,0],[-70,289],[-113,-86],[-101,-150]],[[57772,85719],[42,-103],[-198,-341],[83,-551],[-120,-187]],[[57579,84537],[-229,1],[-239,219],[-121,73],[-237,-105]],[[61882,57035],[-61,-209],[103,-325],[102,-285],[106,-210],[909,-702],[233,4]],[[63274,55308],[-785,-1773],[-362,-26],[-247,-417],[-178,-11],[-76,-186]],[[61626,52895],[-190,0],[-112,200],[-254,-247],[-82,-247],[-185,47],[-62,68],[-65,-16],[-87,6],[-352,502],[-193,0],[-95,194],[0,332],[-145,99]],[[59804,53833],[-164,643],[-127,137],[-48,236],[-141,288],[-171,42],[95,337],[147,14],[42,181]],[[59437,55711],[-4,531]],[[59433,56242],[82,618],[132,166],[28,241],[119,451],[168,293],[112,582],[45,508]],[[57942,91385],[-41,-414],[425,-394],[-256,-445],[323,-673],[-187,-506],[250,-440],[-113,-385],[411,-405],[-105,-301],[-258,-341],[-594,-755]],[[56352,85938],[-161,323],[-269,193],[62,582]],[[55984,87036],[-135,533],[133,345]],[[56639,89578],[-93,230],[-8,910],[-433,402],[-371,289]],[[55734,91409],[167,156],[309,-312],[362,29],[298,-143],[265,262],[137,433],[431,200],[356,-235],[-117,-414]],[[34854,51946],[70,252],[24,269],[48,253],[-107,349]],[[34889,53069],[-22,404],[144,508]],[[51576,79843],[62,-52],[80,13]],[[51900,77752],[-11,-167],[82,-222],[-97,-180],[72,-457],[151,-75],[-32,-256]],[[49176,78685],[-424,227],[-28,431]],[[52636,51176],[94,35],[404,-6],[-2,711]],[[48278,82406],[-210,122],[-172,-9],[57,317],[-57,317]],[[49420,83612],[22,-62],[248,-697]],[[49690,82853],[190,-95],[171,-673],[79,-233],[337,-113],[-34,-378],[-142,-173],[111,-305],[-250,-310],[-371,6],[-473,-163],[-130,116],[-183,-276],[-257,67],[-195,-226],[-148,118],[407,621],[249,127]],[[49051,80963],[-2,1],[-434,98]],[[48615,81062],[-79,235],[291,183],[-152,319],[52,387]],[[48727,82186],[413,-54],[1,0]],[[49141,82132],[40,343]],[[49181,82475],[-186,364],[-4,8]],[[48991,82847],[-337,104],[-66,160],[101,264],[-92,163],[-149,-279],[-17,569],[-140,301],[101,611],[216,480],[222,-47],[335,49],[-297,-639],[283,81],[304,-3],[-72,-481],[-250,-530],[287,-38]],[[61098,76242],[34,70],[235,-101],[409,-96],[378,-283],[48,-110],[169,93],[259,-124],[85,-242],[175,-137]],[[62106,74858],[-268,290],[-296,-28]],[[50006,57090],[-20,-184],[116,-305],[-1,-429],[27,-466],[69,-215],[-61,-532],[22,-294],[74,-375],[62,-207]],[[47655,55121],[-78,15],[-57,-238],[-78,3],[-55,126],[19,237],[-116,362],[-73,-67],[-59,-13]],[[47158,55546],[-77,-34],[3,217],[-44,155],[9,171],[-60,249],[-78,211],[-222,1],[-65,-112],[-76,-13],[-48,-128],[-32,-163],[-148,-260]],[[45797,57103],[123,288],[84,-11],[73,99],[61,1],[44,78],[-24,196],[31,62],[5,200]],[[46194,58016],[134,-6],[200,-144],[61,13],[21,66],[151,-47],[40,33]],[[46801,57931],[16,-216],[44,1],[73,78],[46,-19],[77,-150],[119,-48],[76,128],[90,79],[67,83],[55,-15],[62,-130],[33,-163],[114,-248],[-57,-152],[-11,-192],[59,58],[35,-69],[-15,-176],[85,-170]],[[45357,58612],[302,17],[63,140],[88,9],[110,-145],[86,-3],[92,99],[56,-170],[-120,-133],[-121,11],[-119,124],[-103,-136],[-50,-5],[-67,-83],[-253,13]],[[45367,57897],[147,96],[92,-19],[75,67],[513,-25]],[[56638,74190],[-154,-1],[-147,305]],[[56486,73734],[-105,-129],[155,-273]],[[56431,72099],[-184,-8],[-228,257],[-104,473]],[[55838,74710],[182,53],[106,129],[150,-12],[46,103],[53,20]],[[57254,75292],[135,-157],[-86,-369],[-66,-67]],[[24381,59170],[7,172],[32,138],[-39,111],[133,481],[357,2],[7,201],[-45,36],[-31,128],[-103,136],[-103,198],[125,1],[1,333],[259,1],[257,-7]],[[25493,59872],[-127,-225],[-131,-166],[-20,-113],[22,-116],[-58,-150]],[[25179,59102],[-65,-37],[15,-69],[-52,-66],[-95,-149],[-9,-86]],[[34125,54109],[-44,-532],[-169,-154],[15,-139],[-51,-305],[123,-429],[89,-1],[37,-333],[169,-514]],[[33129,53652],[-188,448],[75,163],[-5,273],[171,95],[69,110],[-95,220],[24,215],[220,347]],[[25697,58436],[-84,51]],[[25613,58487],[19,237],[-38,64],[-57,42],[-122,-70],[-10,79],[-84,95],[-60,118],[-82,50]],[[25860,59889],[128,15],[90,66]],[[26903,59440],[-95,12],[-38,-81],[-97,-77],[-70,0],[-61,-76],[-56,27],[-47,90],[-29,-17],[-36,-141],[-27,5],[-4,-121],[-97,-163],[-51,-70],[-29,-74],[-82,120],[-60,-158],[-58,4],[-65,-14],[6,-290],[-41,-5],[-35,-135],[-86,-25]],[[55230,77704],[67,-229],[89,-169],[-107,-222]],[[55155,75778],[-31,-100]],[[54448,76285],[-233,434],[56,45]],[[53809,77462],[194,-20],[51,100],[94,-97],[109,-11],[-1,165],[97,60],[27,239],[221,157]],[[54601,78055],[88,-73],[208,-253],[229,-114],[104,89]],[[54716,79012],[141,-151],[103,-65],[233,73],[22,118],[111,18],[135,92],[30,-38],[130,74],[66,139],[91,36],[297,-180],[59,61]],[[56134,79189],[155,-161],[19,-159]],[[56308,78869],[-170,-123],[-131,-401],[-168,-401],[-223,-111]],[[55616,77833],[-173,26],[-213,-155]],[[54601,78055],[-54,200],[-47,6]],[[84713,45326],[28,-117],[5,-179]],[[89166,49043],[5,-1925],[4,-1925]],[[80461,51765],[47,-395],[190,-334],[179,121],[177,-43],[162,299],[133,52],[263,-166],[226,126],[143,822],[107,205],[96,672],[319,0],[241,-100]],[[72530,68413],[-176,-268],[-108,-553],[269,-224],[262,-289],[362,-332],[381,-76],[160,-301],[215,-56],[334,-138],[231,10],[32,234],[-36,375],[21,255]],[[77035,67277],[20,-224],[-97,-108],[23,-364],[-199,107],[-359,-408],[8,-338],[-153,-496],[-14,-288],[-124,-487],[-217,135],[-11,-612],[-63,-201],[30,-251],[-137,-140]],[[73107,61020],[-276,-387],[-1,-271]],[[72692,60216],[-251,-212],[-129,-31]],[[71996,56025],[-253,-168],[-93,-401]],[[68937,64577],[185,395],[612,-2],[-56,507],[-156,300],[-31,455],[-182,265],[306,619],[323,-45],[290,620],[174,599],[270,593],[-4,421],[236,342],[-224,292],[-96,400],[-99,517],[137,255],[421,-144],[310,88],[268,496]],[[64978,72558],[244,114],[197,338],[186,-17],[122,110],[197,-55],[308,-299],[221,-65],[318,-523],[207,-21],[24,-498]],[[66909,68203],[137,-310],[112,-357],[266,-260],[7,-520],[133,-96],[23,-272],[-400,-305],[-105,-687]],[[66559,65575],[-303,136],[-313,76]],[[63594,68492],[-104,-231]],[[63490,68261],[-153,311],[-3,314],[-89,0],[46,428],[-143,449],[-340,324],[-193,562],[65,461],[139,204],[-21,345],[-182,177],[-180,705]],[[62436,72541],[-152,473],[55,183],[-87,678],[190,168]],[[63326,68290],[-187,49],[-204,-567]],[[62935,67772],[-516,47],[-784,1188],[-413,414],[-335,160]],[[60887,69581],[-112,720]],[[60775,70301],[615,614],[105,715],[-26,431],[152,146],[142,369]],[[61763,72576],[119,92],[324,-77],[97,-150],[133,100]],[[63490,68261],[-164,29]],[[59873,69719],[-100,82],[-58,-394],[69,-66],[-71,-81],[-12,-156],[131,80]],[[59832,69184],[7,-230],[-139,-944]],[[59757,70130],[93,-1],[25,104],[75,8]],[[59950,70241],[4,-242],[-38,-90],[6,-4]],[[59922,69905],[-49,-186]],[[53835,78058],[-31,-291],[67,-251]],[[54413,75123],[249,-214],[204,-178]],[[53108,75604],[-189,340],[-86,585]],[[59922,69905],[309,-234],[544,630]],[[60887,69581],[-53,-89],[-556,-296],[277,-591],[-92,-101],[-46,-197],[-212,-82],[-66,-213],[-120,-182],[-310,94]],[[59832,69184],[41,173],[0,362]],[[69711,75551],[-159,-109],[-367,-412],[-121,-422],[-104,-4],[-76,280],[-353,19],[-57,484],[-135,4],[21,593],[-333,431],[-476,-46],[-326,-86],[-265,533],[-227,223],[-431,423],[-52,51],[-715,-349],[11,-2178]],[[65546,74986],[-142,-29],[-195,463],[-188,166],[-315,-123],[-123,-197]],[[63639,77993],[-142,96],[29,304],[-177,395],[-207,-17],[-235,401],[160,448],[-81,120],[222,649],[285,-342],[35,431],[573,643],[434,15],[612,-409],[329,-239],[295,249],[440,12],[356,-306],[80,175],[391,-25],[69,280],[-450,406],[267,288],[-52,161],[266,153],[-200,405],[127,202],[1039,205],[136,146],[695,218],[250,245],[499,-127],[88,-612],[290,144],[356,-202],[-23,-322],[267,33],[696,558],[-102,-185],[355,-457],[620,-1500],[148,309],[383,-340],[399,151],[154,-106],[133,-341],[194,-115],[119,-251],[358,79],[147,-361]],[[72294,75601],[-171,87],[-140,212],[-412,62],[-461,16],[-100,-65],[-396,248],[-158,-122],[-43,-349],[-457,204],[-183,-84],[-62,-259]],[[60889,47817],[-399,590],[-19,343],[-1007,1203],[-47,65]],[[59417,50018],[-3,627],[80,239],[137,391],[101,431],[-123,678],[-32,296],[-132,411]],[[59445,53091],[171,352],[188,390]],[[61626,52895],[-243,-670],[3,-2152],[165,-488]],[[70465,73876],[-526,-89],[-343,192],[-301,-46],[26,340],[303,-98],[101,182]],[[69725,74357],[212,-58],[355,425],[-329,311],[-198,-147],[-205,223],[234,382],[-83,58]],[[78495,57780],[-66,713],[178,492],[359,112],[261,-84]],[[79227,59013],[229,-232],[126,407],[246,-217]],[[79828,58971],[64,-394],[-34,-708],[-467,-455],[122,-358],[-292,-43],[-240,-238]],[[85103,71220],[51,443],[-122,615]],[[85048,72883],[17,54],[124,-21],[108,266],[197,29],[118,39],[40,143]],[[55575,75742],[52,132]],[[55627,75874],[66,43],[38,196],[50,33],[40,-84],[52,-36],[36,-94],[46,-28],[54,-110],[39,4],[-31,-144],[-33,-71],[9,-44]],[[55993,75539],[-62,-23],[-164,-91],[-13,-121],[-35,5]],[[63448,67449],[-196,-16],[-69,282],[-248,57]],[[79227,59013],[90,266],[12,500],[-224,515],[-18,583],[-211,480],[-210,40],[-56,-205],[-163,-17],[-83,104],[-293,-353],[-6,530],[68,623],[-188,27],[-16,355],[-120,182]],[[77809,62643],[59,218],[237,384]],[[78380,63852],[162,-466],[125,-537],[342,-5],[108,-515],[-178,-155],[-80,-212],[333,-353],[231,-699],[175,-520],[210,-411],[70,-418],[-50,-590]],[[59999,71049],[125,-31],[45,-231],[-151,-223],[-68,-323]],[[47498,53435],[-252,449],[-237,324]],[[46822,54589],[66,189],[15,172],[126,320],[129,276]],[[54125,64088],[-197,-220],[-156,324],[-439,255]],[[52633,68486],[136,137],[24,250],[-30,244],[191,228],[86,189],[135,170],[16,454]],[[56646,69496],[276,-70],[68,-195]],[[56944,63578],[0,-1180],[-320,-2],[-3,-248]],[[56621,62148],[-1108,1131],[-1108,1132],[-280,-323]],[[57499,32928],[148,374],[151,232],[130,120],[121,-182],[96,-178],[-85,-288],[-47,-192],[-155,-93],[-51,-188],[-99,-59],[-209,454]],[[56314,82678],[-23,150],[30,162],[-123,94],[-291,103]],[[55848,83684],[318,181],[466,-38],[273,59],[39,-123],[148,-38],[267,-287]],[[56523,82432],[-67,182],[-142,64]],[[57579,84537],[134,-136],[24,-287],[89,-348]],[[47592,66920],[-42,0],[7,-317],[-172,-19],[-90,-134],[-126,0],[-100,76],[-234,-63],[-91,-460],[-86,-44],[-131,-745],[-386,-637],[-92,-816],[-114,-265],[-33,-213],[-625,-48],[-5,1]],[[45272,63236],[13,274],[106,161],[91,308],[-18,200],[96,417],[155,376],[93,95],[74,344],[6,315],[100,365],[185,216],[177,603]],[[46350,66910],[5,8],[139,227]],[[46494,67145],[259,65],[218,404],[140,158]],[[57394,79070],[66,87],[185,58],[204,-184],[115,-22],[125,-159],[-20,-200],[101,-97],[40,-247],[97,-150],[-19,-88],[52,-60],[-74,-44],[-164,18],[-27,81],[-58,-47],[20,-106],[-76,-188],[-49,-203],[-70,-64]],[[57842,77455],[-50,270],[30,252],[-9,259],[-160,352],[-89,249],[-86,175],[-84,58]],[[23016,65864],[-107,-518],[-49,-426],[-20,-791],[-27,-289],[48,-322],[86,-288],[56,-458],[184,-440],[65,-337],[109,-291],[295,-157],[114,-247],[244,165],[212,60],[208,106],[175,101],[176,241],[67,345],[22,496],[48,173],[188,155],[294,137],[246,-21],[169,50],[66,-125],[-9,-285],[-149,-351],[-66,-360],[51,-103],[-42,-255],[-69,-461],[-71,152],[-58,-10]],[[24067,59806],[-144,191],[-226,155]],[[19641,66203],[-142,138],[-164,287]],[[18570,68996],[-201,234],[-93,-25]],[[19362,64423],[-181,337],[-201,286]],[[17464,69802],[316,46],[353,64],[-26,-116],[419,-287],[634,-416],[552,4],[221,0],[0,244],[481,0],[102,-210],[142,-186],[165,-260],[92,-309],[69,-325],[144,-178],[230,-177],[175,467],[227,11],[196,-236],[139,-404],[96,-346],[164,-337],[61,-414],[78,-277],[217,-184],[197,-130],[108,18]],[[55993,75539],[95,35],[128,9]],[[46619,59216],[93,107],[47,348],[88,14],[194,-165],[157,117],[107,-39],[42,131],[1114,9],[62,414],[-48,73],[-134,2550],[-134,2550],[425,10]],[[51185,61897],[1,-1361],[-152,-394],[-24,-364],[-247,-94],[-379,-51],[-102,-210],[-178,-23]],[[46801,57931],[13,184],[-24,229],[-104,166],[-54,338],[-13,368]],[[77809,62643],[-159,-137],[-162,-256],[-196,-26],[-127,-639],[-117,-107],[134,-519],[177,-431],[113,-390],[-101,-514],[-96,-109],[66,-296],[185,-470],[32,-330],[-4,-274],[108,-539],[-152,-551],[-135,-607]],[[55338,76294],[74,-101],[40,-82],[91,-63],[106,-123],[-22,-51]],[[55380,75322],[-58,46]],[[74375,79706],[292,102],[530,509],[423,278],[242,-182],[289,-8],[186,-276],[277,-22],[402,-148],[270,411],[-113,348],[288,612],[311,-244],[252,-69],[327,-152],[53,-443],[394,-248],[263,109],[351,78],[279,-78],[272,-284],[168,-302],[258,6],[350,-96],[255,146],[366,98],[407,416],[166,-63],[146,-198],[331,49]],[[59599,43773],[209,48],[334,-166],[73,74],[193,16],[99,177],[167,-10],[303,230],[221,342]],[[59870,36949],[-45,-275],[65,-101]],[[59890,36573],[-41,-245],[-116,-211]],[[59119,34780],[-211,5]],[[58908,34785],[-24,261],[-41,265]],[[58843,35311],[-23,212],[49,659],[-72,419],[-133,832]],[[58664,37433],[292,671],[74,426],[42,53],[31,348],[-45,175],[12,442],[54,409],[0,748],[-145,190],[-132,43],[-60,146],[-128,125],[-232,-12],[-18,220]],[[58409,41417],[-26,421],[843,487]],[[59226,42325],[159,-284],[77,54],[110,-149],[16,-237],[-59,-274],[21,-417],[181,-365],[85,410],[120,124],[-24,760],[-116,427],[-100,191],[-97,-9],[-77,768],[77,449]],[[46619,59216],[-184,405],[-168,435],[-184,157],[-133,173],[-155,-6],[-135,-129],[-138,51],[-96,-189]],[[45260,62987],[60,197],[1088,-4],[-53,853],[68,304],[261,53],[-9,1512],[911,-31],[1,895]],[[59226,42325],[-147,153],[85,549],[87,205],[-53,490],[56,479],[47,160],[-71,501],[-131,264]],[[59099,45126],[273,-110],[55,-164],[95,-275],[77,-804]],[[77801,54399],[48,105],[227,-258],[22,-304],[183,71],[91,243]],[[56448,40227],[228,134],[180,-34],[109,-133],[2,-49]],[[55526,35946],[0,-2182],[-248,-302],[-149,-43],[-175,112],[-125,43],[-47,252],[-109,162],[-133,-292]],[[54125,64088],[68,-919],[104,-153],[4,-188],[116,-203],[-60,-254],[-107,-1199],[-15,-769],[-354,-557],[-120,-778],[115,-219],[0,-380],[178,-13],[-28,-279]],[[53939,57955],[-52,-13],[-188,647],[-65,24],[-217,-331],[-215,173],[-150,34],[-80,-83],[-163,18],[-164,-252],[-141,-14],[-337,305],[-131,-145],[-142,10],[-104,223],[-279,221],[-298,-70],[-72,-128],[-39,-340],[-80,-238],[-19,-527]],[[52072,53186],[-105,31],[-107,-132]],[[51398,53895],[-197,389],[-209,-7]],[[25647,58207],[31,91],[46,-88]],[[51063,81078],[244,869],[380,248]],[[58639,91676],[-473,-237],[-224,-54]],[[55734,91409],[-172,-24],[-41,-389],[-523,95],[-74,-329],[-267,2],[-183,-421],[-278,-655],[-431,-831],[101,-202],[-97,-234],[-275,10],[-180,-554],[17,-784],[177,-300],[-92,-694],[-231,-405],[-122,-341]],[[52328,85032],[-371,-138],[-384,301]],[[51474,85830],[-88,1363],[256,381]],[[65352,60997],[1,-238],[-134,-165]],[[64880,60451],[-128,-34]],[[64752,60417],[-91,413],[-217,975]],[[64444,61805],[833,591],[185,1182],[-127,418]],[[65945,64688],[203,-78],[165,-107]],[[68734,64727],[-83,424],[-215,450]],[[28212,55535],[-52,196],[-138,164]],[[27170,56020],[-6,-126],[111,-26]],[[55461,82736],[342,-67],[511,9]],[[56535,81053],[139,-515],[-29,-166],[-138,-69],[-252,-491],[71,-266],[-60,35]],[[56266,79581],[-264,227],[-200,-84],[-131,61],[-165,-127],[-140,210],[-114,-81],[-16,36]],[[86221,75560],[-120,-200],[-83,-202]],[[85048,72883],[-135,112],[-34,-111]],[[84641,73095],[76,260],[66,69]],[[84829,73851],[-18,96],[-163,65]],[[86288,75628],[39,-104]],[[64246,66009],[84,-185],[5,-346]],[[64274,65130],[-77,-42],[-84,117]],[[56308,78869],[120,127],[172,-65],[178,-3],[129,-144],[95,91],[205,56],[69,139],[118,0]],[[57842,77455],[124,-109],[131,95],[126,-101]],[[56293,76715],[-51,103],[65,99],[-69,74],[-87,-133],[-162,172],[-22,244],[-169,139],[-31,188],[-151,232]],[[81143,94175],[251,112],[141,-379]],[[84237,94144],[590,-104],[443,4]],[[97224,91732],[123,262],[886,-165]],[[96192,85904],[-126,219],[-268,-253]],[[95032,82989],[-486,-302],[-96,-674]],[[93543,84472],[14,276],[432,132]],[[95182,86999],[-705,-649],[-227,727]],[[90412,85637],[-914,-175],[-899,-1153]],[[88378,82339],[178,295],[305,-38]],[[89262,81946],[9,-503],[-217,-590]],[[60617,78409],[9,262],[143,165],[269,43],[44,197],[-62,326],[113,310],[-3,173],[-410,192],[-162,-6],[-172,277],[-213,-94],[-352,208],[6,116],[-99,256],[-222,29],[-23,183],[70,120],[-178,334],[-288,-57],[-84,30],[-70,-134],[-104,23]],[[58639,91676],[286,206],[456,-358],[761,-140],[1050,-668],[213,-281],[18,-393],[-308,-311],[-454,-157],[-1240,449],[-204,-75],[453,-433]],[[59670,89515],[18,-274],[18,-604]],[[59706,88637],[358,-180],[217,-153],[36,286]],[[60317,88590],[-168,254],[177,224]],[[60998,88700],[233,144],[-186,433]],[[62654,90499],[1,-328],[219,-203]],[[63371,90473],[580,282],[970,507]],[[69038,93080],[183,537],[206,116]],[[69427,93733],[736,-156],[57,-328]],[[70444,91717],[222,593],[-361,482]],[[72363,94093],[483,119],[669,-26]],[[58449,49909],[110,-333],[-16,-348],[-80,-74]],[[58216,49787],[67,-60],[166,182]],[[61883,60238],[-37,252],[-83,178]],[[60335,65400],[-77,306],[-81,132]],[[63741,66597],[190,-249],[16,-243]],[[64444,61805],[-801,-226],[-259,-266],[-199,-620],[-130,-99],[-70,197],[-106,-30],[-269,60],[-50,59],[-321,-14],[-75,-53],[-114,153],[-74,-290],[28,-249],[-121,-189]],[[56351,57163],[3,143],[-102,174],[-3,343],[-58,228],[-98,-34],[28,217],[72,246],[-32,245],[92,181],[-58,138],[73,365],[127,435],[240,-41],[-14,2345]],[[59433,56242],[1,-71]],[[59434,56171],[-39,12],[5,294],[-33,203],[-143,233],[-34,426],[34,436],[-129,41],[-19,-132],[-167,-30],[67,-173],[23,-355],[-152,-324],[-138,-426],[-144,-61],[-233,345],[-105,-122],[-29,-172],[-143,-112],[-9,-122],[-277,0],[-38,122],[-200,20],[-100,-101],[-77,51],[-143,344],[-48,163],[-200,-81],[-76,-274],[-72,-528],[-95,-111],[-85,-65]],[[56635,55672],[-23,28]],[[59445,53091],[-171,-272],[-195,1],[-224,-138],[-176,132],[-115,-161]],[[56824,55442],[-189,230]],[[59434,56171],[3,-460]],[[25613,58487],[-31,-139]],[[62075,57243],[54,-245],[125,-247]],[[63596,57321],[-2,-9],[-1,-244],[0,-596],[0,-308],[-125,-363],[-194,-493]],[[34889,53069],[109,-351],[-49,-254],[-24,-270],[-71,-248]],[[56266,79581],[-77,-154],[-55,-238]],[[58908,34785],[-56,-263],[-163,-63],[-166,320],[-2,204],[76,222],[26,172],[80,42],[140,-108]],[[60041,71744],[74,129],[75,130],[15,329],[91,-115],[306,165],[147,-112],[229,2],[320,222],[149,-10],[316,92]],[[68841,72526],[156,598],[-60,440],[-204,140],[72,261],[232,-28],[132,326],[89,380],[371,137],[-58,-274],[40,-164],[114,15]],[[65546,74986],[313,8],[-45,297],[237,204],[234,343],[374,-312],[30,-471],[106,-121],[301,27],[93,-108],[137,-609],[317,-408],[181,-278],[291,-289],[369,-253],[-7,-362]],[[53083,72381],[-139,-290],[-2,-273]],[[58441,72005],[-192,-70],[-268,314]],[[57981,72249],[-303,-11],[-165,588]],[[59768,75418],[485,-417],[399,-228]],[[57321,74302],[-87,276],[3,121]],[[59099,45126],[-157,177],[-177,100],[-111,99],[-116,150]],[[58388,46397],[-161,331],[-55,342]],[[58449,49909],[98,71],[304,-7],[566,45]],[[30523,76389],[-147,-351],[-47,-133]],[[30377,75084],[-133,11],[-205,-103]],[[29172,73738],[-61,30],[-91,148]],[[29077,73598],[69,-105],[5,-223]],[[28966,72994],[-142,225],[-33,491]],[[28797,73080],[-183,93],[191,-191]],[[27672,65472],[-83,-75],[-137,72]],[[27408,65728],[-105,136],[-148,508]],[[26747,68267],[-108,90],[-281,-268]],[[26309,68119],[-135,275],[-174,147]],[[25227,68491],[-114,-92],[50,-157]],[[24755,67801],[-207,312],[-242,-73]],[[16564,70932],[-71,95],[-33,324]],[[16460,71351],[-270,594],[-231,821],[10,137],[-123,195],[-215,495],[-38,482],[-148,323],[61,489],[-10,507],[-89,453],[109,557]],[[15516,76404],[34,536],[33,536]],[[15583,77476],[-50,792],[-88,506],[-80,274],[33,115],[402,-200],[148,-558]],[[15948,78405],[69,156],[-45,484],[-94,485]],[[10396,86079],[-385,-51],[-546,272]],[[8164,85656],[-308,-126],[-39,348]],[[7158,84934],[-299,-248],[-278,-180]],[[4985,85596],[50,216],[-179,211]],[[4541,89915],[-38,-296],[586,23]],[[4864,90008],[-342,225],[-197,296]],[[30102,56752],[-123,-344],[105,-468]],[[31762,56607],[213,-74],[155,185]],[[63521,58853],[-122,-33],[-83,35]],[[63153,58610],[-177,-114],[-233,-30]],[[62539,58233],[-43,-150],[-137,13]],[[64752,60417],[-201,-158]],[[57838,31217],[-210,-269],[-290,-229]],[[58175,37528],[113,-7],[134,-100],[94,71],[148,-59]],[[58409,41417],[-210,-81],[-159,-235],[-33,-205],[-100,-46],[-241,-486],[-154,-383],[-94,-13],[-90,68],[-311,65]]]} diff --git a/float-no-zero/examples/device-orientation-require.js b/float-no-zero/examples/device-orientation-require.js new file mode 100644 index 0000000000..762abf5972 --- /dev/null +++ b/float-no-zero/examples/device-orientation-require.js @@ -0,0 +1,6 @@ +goog.require('ol.DeviceOrientation'); +goog.require('ol.Map'); +goog.require('ol.View2D'); +goog.require('ol.dom.Input'); +goog.require('ol.layer.Tile'); +goog.require('ol.source.OSM'); diff --git a/float-no-zero/examples/device-orientation.html b/float-no-zero/examples/device-orientation.html new file mode 100644 index 0000000000..192ae81066 --- /dev/null +++ b/float-no-zero/examples/device-orientation.html @@ -0,0 +1,58 @@ + + + + + + + + + + + Device-Orientation example + + + + + +
+ +
+
+
+
+
+ +
+ +
+

Device orientation example

+ +

α :

+

β :

+

γ :

+

heading :

+

Listen to DeviceOrientation events

+
+

See the device-orientation.js source to see how this is done.

+
+
orientation, openstreetmap
+
+ +
+ +
+ + + + + + + diff --git a/float-no-zero/examples/device-orientation.js b/float-no-zero/examples/device-orientation.js new file mode 100644 index 0000000000..041c88c542 --- /dev/null +++ b/float-no-zero/examples/device-orientation.js @@ -0,0 +1,39 @@ +var view = new ol.View2D({ + center: [0, 0], + zoom: 2 +}); +var map = new ol.Map({ + layers: [ + new ol.layer.Tile({ + source: new ol.source.OSM() + }) + ], + renderer: exampleNS.getRendererFromQueryString(), + target: 'map', + view: view +}); + +var deviceOrientation = new ol.DeviceOrientation(); +var track = new ol.dom.Input(document.getElementById('track')); +track.bindTo('checked', deviceOrientation, 'tracking'); + +deviceOrientation.on('propertychange', function(event) { + // event.key is the changed property name + var element = document.getElementById(event.key); + if (element) { + element.innerHTML = deviceOrientation.get(event.key); + } +}); + +// tilt the map +deviceOrientation.on(['change:beta', 'change:gamma'], function(event) { + var center = view.getCenter(); + var resolution = view.getResolution(); + var beta = event.target.getBeta() || 0; + var gamma = event.target.getGamma() || 0; + + center[0] -= resolution * gamma * 25; + center[1] += resolution * beta * 25; + + view.setCenter(center); +}); diff --git a/float-no-zero/examples/drag-and-drop-image-vector-require.js b/float-no-zero/examples/drag-and-drop-image-vector-require.js new file mode 100644 index 0000000000..b0a4c95d9f --- /dev/null +++ b/float-no-zero/examples/drag-and-drop-image-vector-require.js @@ -0,0 +1,18 @@ +goog.require('ol.Map'); +goog.require('ol.View2D'); +goog.require('ol.format.GPX'); +goog.require('ol.format.GeoJSON'); +goog.require('ol.format.IGC'); +goog.require('ol.format.KML'); +goog.require('ol.format.TopoJSON'); +goog.require('ol.interaction'); +goog.require('ol.interaction.DragAndDrop'); +goog.require('ol.layer.Image'); +goog.require('ol.layer.Tile'); +goog.require('ol.source.BingMaps'); +goog.require('ol.source.ImageVector'); +goog.require('ol.source.Vector'); +goog.require('ol.style.Circle'); +goog.require('ol.style.Fill'); +goog.require('ol.style.Stroke'); +goog.require('ol.style.Style'); diff --git a/float-no-zero/examples/drag-and-drop-image-vector.html b/float-no-zero/examples/drag-and-drop-image-vector.html new file mode 100644 index 0000000000..f813a0e88c --- /dev/null +++ b/float-no-zero/examples/drag-and-drop-image-vector.html @@ -0,0 +1,56 @@ + + + + + + + + + + + Drag-and-Drop image vector example + + + + + +
+ +
+
+
+
+
+ +
+ +
+

Drag-and-Drop image vector example

+

Example of using the drag-and-drop interaction with a ol.source.ImageVector. Drag and drop GPX, GeoJSON, IGC, KML, or TopoJSON files on to the map. Each file is rendered to an image on the client.

+
+

See the drag-and-drop-image-vector.js source to see how this is done.

+
+
drag-and-drop-image-vector, gpx, geojson, igc, kml, topojson, vector, image
+
+
+
+   +
+
+ +
+ +
+ + + + + + + diff --git a/float-no-zero/examples/drag-and-drop-image-vector.js b/float-no-zero/examples/drag-and-drop-image-vector.js new file mode 100644 index 0000000000..cd5b275628 --- /dev/null +++ b/float-no-zero/examples/drag-and-drop-image-vector.js @@ -0,0 +1,134 @@ +var defaultStyle = { + 'Point': [new ol.style.Style({ + image: new ol.style.Circle({ + fill: new ol.style.Fill({ + color: 'rgba(255,255,0,0.5)' + }), + radius: 5, + stroke: new ol.style.Stroke({ + color: '#ff0', + width: 1 + }) + }) + })], + 'LineString': [new ol.style.Style({ + stroke: new ol.style.Stroke({ + color: '#f00', + width: 3 + }) + })], + 'Polygon': [new ol.style.Style({ + fill: new ol.style.Fill({ + color: 'rgba(0,255,255,0.5)' + }), + stroke: new ol.style.Stroke({ + color: '#0ff', + width: 1 + }) + })], + 'MultiPoint': [new ol.style.Style({ + image: new ol.style.Circle({ + fill: new ol.style.Fill({ + color: 'rgba(255,0,255,0.5)' + }), + radius: 5, + stroke: new ol.style.Stroke({ + color: '#f0f', + width: 1 + }) + }) + })], + 'MultiLineString': [new ol.style.Style({ + stroke: new ol.style.Stroke({ + color: '#0f0', + width: 3 + }) + })], + 'MultiPolygon': [new ol.style.Style({ + fill: new ol.style.Fill({ + color: 'rgba(0,0,255,0.5)' + }), + stroke: new ol.style.Stroke({ + color: '#00f', + width: 1 + }) + })] +}; + +var styleFunction = function(feature, resolution) { + var featureStyleFunction = feature.getStyleFunction(); + if (featureStyleFunction) { + return featureStyleFunction.call(feature, resolution); + } else { + return defaultStyle[feature.getGeometry().getType()]; + } +}; + +var dragAndDropInteraction = new ol.interaction.DragAndDrop({ + formatConstructors: [ + ol.format.GPX, + ol.format.GeoJSON, + ol.format.IGC, + ol.format.KML, + ol.format.TopoJSON + ] +}); + +var map = new ol.Map({ + interactions: ol.interaction.defaults().extend([dragAndDropInteraction]), + layers: [ + new ol.layer.Tile({ + source: new ol.source.BingMaps({ + imagerySet: 'Aerial', + key: 'Ak-dzM4wZjSqTlzveKz5u0d4IQ4bRzVI309GxmkgSVr1ewS6iPSrOvOKhA-CJlm3' + }) + }) + ], + renderer: exampleNS.getRendererFromQueryString(), + target: 'map', + view: new ol.View2D({ + center: [0, 0], + zoom: 2 + }) +}); + +dragAndDropInteraction.on('addfeatures', function(event) { + var vectorSource = new ol.source.Vector({ + features: event.features, + projection: event.projection + }); + map.getLayers().push(new ol.layer.Image({ + source: new ol.source.ImageVector({ + source: vectorSource, + style: styleFunction + }) + })); + var view2D = map.getView().getView2D(); + view2D.fitExtent(vectorSource.getExtent(), map.getSize()); +}); + +var displayFeatureInfo = function(pixel) { + var features = []; + map.forEachFeatureAtPixel(pixel, function(feature, layer) { + features.push(feature); + }); + if (features.length > 0) { + var info = []; + var i, ii; + for (i = 0, ii = features.length; i < ii; ++i) { + info.push(features[i].get('name')); + } + document.getElementById('info').innerHTML = info.join(', ') || ' '; + } else { + document.getElementById('info').innerHTML = ' '; + } +}; + +$(map.getViewport()).on('mousemove', function(evt) { + var pixel = map.getEventPixel(evt.originalEvent); + displayFeatureInfo(pixel); +}); + +map.on('singleclick', function(evt) { + displayFeatureInfo(evt.pixel); +}); diff --git a/float-no-zero/examples/drag-and-drop-require.js b/float-no-zero/examples/drag-and-drop-require.js new file mode 100644 index 0000000000..c51fe2a759 --- /dev/null +++ b/float-no-zero/examples/drag-and-drop-require.js @@ -0,0 +1,17 @@ +goog.require('ol.Map'); +goog.require('ol.View2D'); +goog.require('ol.format.GPX'); +goog.require('ol.format.GeoJSON'); +goog.require('ol.format.IGC'); +goog.require('ol.format.KML'); +goog.require('ol.format.TopoJSON'); +goog.require('ol.interaction'); +goog.require('ol.interaction.DragAndDrop'); +goog.require('ol.layer.Tile'); +goog.require('ol.layer.Vector'); +goog.require('ol.source.BingMaps'); +goog.require('ol.source.Vector'); +goog.require('ol.style.Circle'); +goog.require('ol.style.Fill'); +goog.require('ol.style.Stroke'); +goog.require('ol.style.Style'); diff --git a/float-no-zero/examples/drag-and-drop.html b/float-no-zero/examples/drag-and-drop.html new file mode 100644 index 0000000000..df4ad8c5dc --- /dev/null +++ b/float-no-zero/examples/drag-and-drop.html @@ -0,0 +1,56 @@ + + + + + + + + + + + Drag-and-Drop example + + + + + +
+ +
+
+
+
+
+ +
+ +
+

Drag-and-Drop example

+

Example of using the drag-and-drop interaction. Drag and drop GPX, GeoJSON, IGC, KML, or TopoJSON files on to the map.

+
+

See the drag-and-drop.js source to see how this is done.

+
+
drag-and-drop, gpx, geojson, igc, kml, topojson
+
+
+
+   +
+
+ +
+ +
+ + + + + + + diff --git a/float-no-zero/examples/drag-and-drop.js b/float-no-zero/examples/drag-and-drop.js new file mode 100644 index 0000000000..3a3d646c87 --- /dev/null +++ b/float-no-zero/examples/drag-and-drop.js @@ -0,0 +1,132 @@ +var defaultStyle = { + 'Point': [new ol.style.Style({ + image: new ol.style.Circle({ + fill: new ol.style.Fill({ + color: 'rgba(255,255,0,0.5)' + }), + radius: 5, + stroke: new ol.style.Stroke({ + color: '#ff0', + width: 1 + }) + }) + })], + 'LineString': [new ol.style.Style({ + stroke: new ol.style.Stroke({ + color: '#f00', + width: 3 + }) + })], + 'Polygon': [new ol.style.Style({ + fill: new ol.style.Fill({ + color: 'rgba(0,255,255,0.5)' + }), + stroke: new ol.style.Stroke({ + color: '#0ff', + width: 1 + }) + })], + 'MultiPoint': [new ol.style.Style({ + image: new ol.style.Circle({ + fill: new ol.style.Fill({ + color: 'rgba(255,0,255,0.5)' + }), + radius: 5, + stroke: new ol.style.Stroke({ + color: '#f0f', + width: 1 + }) + }) + })], + 'MultiLineString': [new ol.style.Style({ + stroke: new ol.style.Stroke({ + color: '#0f0', + width: 3 + }) + })], + 'MultiPolygon': [new ol.style.Style({ + fill: new ol.style.Fill({ + color: 'rgba(0,0,255,0.5)' + }), + stroke: new ol.style.Stroke({ + color: '#00f', + width: 1 + }) + })] +}; + +var styleFunction = function(feature, resolution) { + var featureStyleFunction = feature.getStyleFunction(); + if (featureStyleFunction) { + return featureStyleFunction.call(feature, resolution); + } else { + return defaultStyle[feature.getGeometry().getType()]; + } +}; + +var dragAndDropInteraction = new ol.interaction.DragAndDrop({ + formatConstructors: [ + ol.format.GPX, + ol.format.GeoJSON, + ol.format.IGC, + ol.format.KML, + ol.format.TopoJSON + ] +}); + +var map = new ol.Map({ + interactions: ol.interaction.defaults().extend([dragAndDropInteraction]), + layers: [ + new ol.layer.Tile({ + source: new ol.source.BingMaps({ + imagerySet: 'Aerial', + key: 'Ak-dzM4wZjSqTlzveKz5u0d4IQ4bRzVI309GxmkgSVr1ewS6iPSrOvOKhA-CJlm3' + }) + }) + ], + renderer: 'canvas', + target: 'map', + view: new ol.View2D({ + center: [0, 0], + zoom: 2 + }) +}); + +dragAndDropInteraction.on('addfeatures', function(event) { + var vectorSource = new ol.source.Vector({ + features: event.features, + projection: event.projection + }); + map.getLayers().push(new ol.layer.Vector({ + source: vectorSource, + style: styleFunction + })); + var view2D = map.getView().getView2D(); + view2D.fitExtent(vectorSource.getExtent(), map.getSize()); +}); + +var displayFeatureInfo = function(pixel) { + var features = []; + map.forEachFeatureAtPixel(pixel, function(feature, layer) { + features.push(feature); + }); + if (features.length > 0) { + var info = []; + var i, ii; + for (i = 0, ii = features.length; i < ii; ++i) { + info.push(features[i].get('name')); + } + document.getElementById('info').innerHTML = info.join(', ') || ' '; + } else { + document.getElementById('info').innerHTML = ' '; + } +}; + +$(map.getViewport()).on('mousemove', function(evt) { + var pixel = map.getEventPixel(evt.originalEvent); + displayFeatureInfo(pixel); +}); + +map.on('singleclick', function(evt) { + displayFeatureInfo(evt.pixel); +}); diff --git a/float-no-zero/examples/drag-rotate-and-zoom-require.js b/float-no-zero/examples/drag-rotate-and-zoom-require.js new file mode 100644 index 0000000000..b594f4d607 --- /dev/null +++ b/float-no-zero/examples/drag-rotate-and-zoom-require.js @@ -0,0 +1,6 @@ +goog.require('ol.Map'); +goog.require('ol.View2D'); +goog.require('ol.interaction'); +goog.require('ol.interaction.DragRotateAndZoom'); +goog.require('ol.layer.Tile'); +goog.require('ol.source.MapQuest'); diff --git a/float-no-zero/examples/drag-rotate-and-zoom.html b/float-no-zero/examples/drag-rotate-and-zoom.html new file mode 100644 index 0000000000..ebe543f794 --- /dev/null +++ b/float-no-zero/examples/drag-rotate-and-zoom.html @@ -0,0 +1,52 @@ + + + + + + + + + + + Drag rotate and zoom example + + + + + +
+ +
+
+
+
+
+ +
+ +
+

Drag rotate and zoom example

+

A single interaction to drag, rotate, and zoom.

+
+

Shift + Drag to rotate and zoom the map around its center.

+

See the drag-rotate-and-zoom.js source to see how this is done.

+
+
drag, rotate, zoom, interaction
+
+ +
+ +
+ + + + + + + diff --git a/float-no-zero/examples/drag-rotate-and-zoom.js b/float-no-zero/examples/drag-rotate-and-zoom.js new file mode 100644 index 0000000000..bece1b7bd2 --- /dev/null +++ b/float-no-zero/examples/drag-rotate-and-zoom.js @@ -0,0 +1,16 @@ +var map = new ol.Map({ + interactions: ol.interaction.defaults().extend([ + new ol.interaction.DragRotateAndZoom() + ]), + layers: [ + new ol.layer.Tile({ + source: new ol.source.MapQuest({layer: 'sat'}) + }) + ], + renderer: exampleNS.getRendererFromQueryString(), + target: 'map', + view: new ol.View2D({ + center: [0, 0], + zoom: 2 + }) +}); diff --git a/float-no-zero/examples/draw-features-require.js b/float-no-zero/examples/draw-features-require.js new file mode 100644 index 0000000000..bb7a5240e3 --- /dev/null +++ b/float-no-zero/examples/draw-features-require.js @@ -0,0 +1,12 @@ +goog.require('ol.Map'); +goog.require('ol.View2D'); +goog.require('ol.interaction'); +goog.require('ol.interaction.Draw'); +goog.require('ol.layer.Tile'); +goog.require('ol.layer.Vector'); +goog.require('ol.source.MapQuest'); +goog.require('ol.source.Vector'); +goog.require('ol.style.Circle'); +goog.require('ol.style.Fill'); +goog.require('ol.style.Stroke'); +goog.require('ol.style.Style'); diff --git a/float-no-zero/examples/draw-features.html b/float-no-zero/examples/draw-features.html new file mode 100644 index 0000000000..8a7014c428 --- /dev/null +++ b/float-no-zero/examples/draw-features.html @@ -0,0 +1,60 @@ + + + + + + + + + + + Draw features example + + + + + +
+ +
+
+
+
+
+ +
+ +
+

Draw features example

+

Example of using the ol.interaction.Draw interaction.

+
+ + +
+ +
+

See the draw-features.js source to see how this is done.

+
+
draw, edit, vector
+
+ +
+ +
+ + + + + + + diff --git a/float-no-zero/examples/draw-features.js b/float-no-zero/examples/draw-features.js new file mode 100644 index 0000000000..6e89aff8d9 --- /dev/null +++ b/float-no-zero/examples/draw-features.js @@ -0,0 +1,57 @@ +var raster = new ol.layer.Tile({ + source: new ol.source.MapQuest({layer: 'sat'}) +}); + +var source = new ol.source.Vector(); + +var vector = new ol.layer.Vector({ + source: source, + style: new ol.style.Style({ + fill: new ol.style.Fill({ + color: 'rgba(255, 255, 255, 0.2)' + }), + stroke: new ol.style.Stroke({ + color: '#ffcc33', + width: 2 + }), + image: new ol.style.Circle({ + radius: 7, + fill: new ol.style.Fill({ + color: '#ffcc33' + }) + }) + }) +}); + +var map = new ol.Map({ + layers: [raster, vector], + renderer: 'canvas', + target: 'map', + view: new ol.View2D({ + center: [-11000000, 4600000], + zoom: 4 + }) +}); + +var typeSelect = document.getElementById('type'); + +var draw; // global so we can remove it later +function addInteraction() { + draw = new ol.interaction.Draw({ + source: source, + type: /** @type {ol.geom.GeometryType} */ (typeSelect.value) + }); + map.addInteraction(draw); +} + + +/** + * Let user change the geometry type. + * @param {Event} e Change event. + */ +typeSelect.onchange = function(e) { + map.removeInteraction(draw); + addInteraction(); +}; + +addInteraction(); diff --git a/float-no-zero/examples/dynamic-data-require.js b/float-no-zero/examples/dynamic-data-require.js new file mode 100644 index 0000000000..2d04b486fa --- /dev/null +++ b/float-no-zero/examples/dynamic-data-require.js @@ -0,0 +1,8 @@ +goog.require('ol.Map'); +goog.require('ol.View2D'); +goog.require('ol.geom.MultiPoint'); +goog.require('ol.layer.Tile'); +goog.require('ol.source.MapQuest'); +goog.require('ol.style.Circle'); +goog.require('ol.style.Fill'); +goog.require('ol.style.Stroke'); diff --git a/float-no-zero/examples/dynamic-data.html b/float-no-zero/examples/dynamic-data.html new file mode 100644 index 0000000000..86dfbcea3d --- /dev/null +++ b/float-no-zero/examples/dynamic-data.html @@ -0,0 +1,51 @@ + + + + + + + + + + + Dynamic data example + + + + + +
+ +
+
+
+
+
+ +
+ +
+

Dynamic data example

+

Example of dynamic data.

+
+

See the dynamic-data.js source to see how this is done.

+
+
dynamic-data
+
+ +
+ +
+ + + + + + + diff --git a/float-no-zero/examples/dynamic-data.js b/float-no-zero/examples/dynamic-data.js new file mode 100644 index 0000000000..cb05a69786 --- /dev/null +++ b/float-no-zero/examples/dynamic-data.js @@ -0,0 +1,43 @@ +var map = new ol.Map({ + layers: [ + new ol.layer.Tile({ + source: new ol.source.MapQuest({layer: 'sat'}) + }) + ], + renderer: 'canvas', + target: 'map', + view: new ol.View2D({ + center: [0, 0], + zoom: 2 + }) +}); + +var imageStyle = new ol.style.Circle({ + radius: 5, + fill: new ol.style.Fill({color: 'yellow'}), + stroke: new ol.style.Stroke({color: 'red', width: 1}) +}); + +var n = 200; +var omegaTheta = 30000; // Rotation period in ms +var R = 7e6; +var r = 2e6; +var p = 2e6; +map.on('postcompose', function(event) { + var vectorContext = event.vectorContext; + var frameState = event.frameState; + var theta = 2 * Math.PI * frameState.time / omegaTheta; + var coordinates = []; + var i; + for (i = 0; i < n; ++i) { + var t = theta + 2 * Math.PI * i / n; + var x = (R + r) * Math.cos(t) + p * Math.cos((R + r) * t / r); + var y = (R + r) * Math.sin(t) + p * Math.sin((R + r) * t / r); + coordinates.push([x, y]); + } + vectorContext.setImageStyle(imageStyle); + vectorContext.drawMultiPointGeometry( + new ol.geom.MultiPoint(coordinates), null); + map.render(); +}); +map.render(); diff --git a/float-no-zero/examples/epsg-4326-require.js b/float-no-zero/examples/epsg-4326-require.js new file mode 100644 index 0000000000..aeebd3cae4 --- /dev/null +++ b/float-no-zero/examples/epsg-4326-require.js @@ -0,0 +1,6 @@ +goog.require('ol.Map'); +goog.require('ol.View2D'); +goog.require('ol.control'); +goog.require('ol.control.ScaleLine'); +goog.require('ol.layer.Tile'); +goog.require('ol.source.TileWMS'); diff --git a/float-no-zero/examples/epsg-4326.html b/float-no-zero/examples/epsg-4326.html new file mode 100644 index 0000000000..41e6fefcb9 --- /dev/null +++ b/float-no-zero/examples/epsg-4326.html @@ -0,0 +1,51 @@ + + + + + + + + + + + EPSG:4326 example + + + + + +
+ +
+
+
+
+
+ +
+ +
+

EPSG:4326 example

+

Example of a map in EPSG:4326.

+
+

See the epsg-4326.js source to see how this is done.

+
+
epsg4326
+
+ +
+ +
+ + + + + + + diff --git a/float-no-zero/examples/epsg-4326.js b/float-no-zero/examples/epsg-4326.js new file mode 100644 index 0000000000..79886eb98b --- /dev/null +++ b/float-no-zero/examples/epsg-4326.js @@ -0,0 +1,29 @@ +var layers = [ + new ol.layer.Tile({ + source: new ol.source.TileWMS({ + url: 'http://vmap0.tiles.osgeo.org/wms/vmap0', + params: { + 'VERSION': '1.1.1', + 'LAYERS': 'basic', + 'FORMAT': 'image/jpeg' + } + }) + }) +]; + +var map = new ol.Map({ + controls: ol.control.defaults().extend([ + new ol.control.ScaleLine({ + units: 'degrees' + }) + ]), + layers: layers, + // The OSgeo server does not set cross origin headers, so we cannot use WebGL + renderer: ['canvas', 'dom'], + target: 'map', + view: new ol.View2D({ + projection: 'EPSG:4326', + center: [0, 0], + zoom: 2 + }) +}); diff --git a/float-no-zero/examples/example-list.js b/float-no-zero/examples/example-list.js new file mode 100644 index 0000000000..7422f9a197 --- /dev/null +++ b/float-no-zero/examples/example-list.js @@ -0,0 +1 @@ +var info={"index": {"parsing": {"66": 2}, "moveend": {"45": 2}, "code": {"9": 2, "12": 2}, "background": {"27": 1}, "geolocation": {"42": 1, "20": 3}, "api": {"51": 1}, "please": {"51": 1}, "over": {"36": 1}, "top": {"22": 1}, "dynamic": {"13": 3}, "feature": {"64": 1, "27": 1}, "openaerial": {"48": 1, "47": 1}, "getcapabilities": {"66": 3}, "manipulation": {"36": 1, "28": 1}, "selection": {"53": 1}, "openlayers": {"2": 1}, "same": {"27": 1, "55": 1}, "proj4js": {"67": 2}, "d3": {"7": 3}, "localized": {"38": 3}, "rtree": {"51": 1}, "layers": {"67": 1, "68": 1, "5": 1, "70": 1, "41": 1, "55": 1, "57": 2}, "current": {"41": 1}, "style": {"64": 1, "75": 1, "24": 1, "26": 1, "31": 1, "30": 1, "63": 1}, "group": {"35": 3}, "how": {"46": 1, "21": 1, "6": 1}, "wms": {"66": 3, "67": 3, "68": 3, "69": 3, "70": 3, "71": 3, "21": 2}, "show": {"41": 1}, "complex": {"27": 1}, "controls": {"75": 1, "46": 2, "6": 2}, "transparent": {"54": 3}, "to": {"2": 1, "70": 1, "6": 1, "8": 1, "9": 2, "10": 1, "11": 1, "46": 1, "48": 1, "21": 1, "22": 1, "26": 1, "27": 1, "28": 1, "61": 1, "30": 1, "53": 2}, "only": {"25": 1, "51": 1, "4": 1}, "animation": {"1": 2}, "projection": {"67": 3, "68": 2, "70": 3}, "input": {"2": 3, "35": 1}, "earthquakes": {"24": 1, "30": 1}, "tiles": {"73": 1, "5": 2}, "move": {"45": 1}, "attribution": {"38": 1}, "read": {"27": 1}, "rotated": {"50": 1}, "watercolor": {"57": 2}, "popover": {"47": 1}, "terrain": {"57": 2}, "five": {"27": 1}, "tiled": {"67": 2, "71": 2}, "base": {"57": 1, "38": 1, "22": 1}, "not": {"51": 2, "38": 1}, "using": {"32": 1, "65": 1, "67": 1, "70": 1, "7": 1, "9": 1, "10": 1, "43": 1, "12": 1, "53": 1, "73": 1, "23": 1, "26": 1}, "rotation": {"1": 1, "50": 2, "55": 1}, "unique": {"27": 1}, "fractal": {"16": 3}, "day": {"27": 1}, "zoomslider": {"75": 3}, "rotate": {"17": 3, "11": 3}, "imagevector": {"9": 1}, "semi": {"54": 2}, "brightness": {"4": 3}, "edit": {"43": 1, "12": 1}, "xyz": {"73": 3}, "drop": {"9": 4, "10": 4}, "zoom": {"64": 1, "1": 1, "11": 3, "75": 1, "17": 3, "27": 1}, "000": {"67": 2}, "server": {"38": 2}, "spy": {"36": 2}, "vector": {"64": 3, "51": 1, "65": 1, "9": 3, "43": 1, "12": 1, "63": 1, "16": 1, "19": 1, "53": 1, "24": 1, "26": 1, "59": 1, "60": 1, "29": 3, "30": 1, "31": 1}, "min": {"41": 1}, "each": {"9": 1}, "osm": {"65": 3}, "works": {"51": 1}, "side": {"55": 4}, "view": {"41": 1, "36": 1}, "accessible": {"0": 1}, "www": {"27": 1, "38": 2}, "google": {"22": 3}, "saturation": {"25": 3}, "timezones": {"31": 2}, "national": {"67": 1}, "707": {"27": 1}, "mapguide": {"39": 3}, "sync": {"55": 1}, "4326": {"14": 2}, "mapquest": {"40": 3, "48": 1, "54": 1, "47": 1}, "see": {"27": 1}, "popup": {"48": 3, "26": 1, "47": 1}, "export": {"15": 2}, "examples": {"51": 1}, "hosted": {"51": 1}, "wmts": {"72": 3}, "http": {"58": 1, "27": 1, "38": 3}, "click": {"21": 1}, "bootstrap": {"47": 1}, "fullscreen": {"42": 1}, "canvas": {"5": 2, "55": 3}, "preloading": {"49": 1}, "hide": {"41": 1}, "for": {"5": 1, "21": 1}, "overlay": {"48": 2, "64": 1, "38": 1, "47": 2}, "support": {"38": 1}, "demonstrates": {"1": 1, "2": 1, "47": 1, "24": 1, "63": 1, "30": 1, "31": 1}, "labels": {"64": 1, "57": 2}, "kml": {"32": 3, "9": 2, "10": 2, "24": 1, "30": 2, "31": 3}, "recorded": {"27": 1}, "integration": {"22": 1, "7": 1}, "polygons": {"53": 1}, "content": {"22": 1}, "outside": {"44": 1}, "heatmap": {"24": 3}, "various": {"75": 1}, "deviceorientation": {"8": 1}, "exporting": {"15": 1}, "it": {"51": 2}, "parks": {"67": 1}, "three": {"55": 1}, "contrast": {"4": 3}, "shows": {"46": 1, "21": 1, "6": 1}, "preload": {"49": 2}, "synthetic": {"59": 2, "60": 2}, "full": {"17": 3, "18": 3, "42": 2}, "untiled": {"39": 2}, "screen": {"17": 3, "18": 3, "42": 2}, "contain": {"27": 1}, "modify": {"43": 3}, "styling": {"75": 1}, "composed": {"57": 1}, "by": {"53": 1, "55": 2}, "xml": {"65": 3}, "topojson": {"9": 2, "10": 2, "63": 3}, "objects": {"2": 1}, "extent": {"46": 1}, "openseamap": {"38": 4}, "org": {"27": 1, "38": 3}, "epsg4326": {"14": 1}, "earthquake": {"30": 1}, "topology": {"63": 1}, "on": {"64": 1, "4": 1, "9": 2, "10": 1, "21": 1, "22": 1, "41": 1, "25": 1, "27": 1}, "ol": {"9": 1, "12": 1}, "geometry": {"27": 1}, "of": {"0": 1, "2": 1, "3": 1, "4": 1, "7": 1, "9": 1, "10": 1, "12": 1, "13": 1, "14": 1, "15": 1, "16": 1, "17": 1, "18": 1, "19": 1, "20": 1, "22": 1, "23": 1, "24": 1, "25": 1, "27": 2, "29": 1, "30": 1, "32": 1, "35": 1, "36": 1, "37": 1, "38": 1, "39": 1, "40": 1, "42": 1, "43": 1, "44": 1, "45": 1, "49": 1, "50": 1, "52": 1, "53": 1, "54": 1, "56": 1, "57": 1, "58": 1, "61": 1, "62": 1, "63": 1, "64": 1, "65": 1, "66": 1, "67": 1, "68": 1, "69": 1, "70": 1, "71": 1, "72": 1, "73": 1, "74": 1, "75": 1}, "tracks": {"27": 2}, "filter": {"28": 3}, "openstreetmap": {"33": 1, "2": 1, "5": 1, "38": 4, "8": 1, "44": 1, "34": 1, "15": 1, "50": 1, "19": 1, "20": 1, "56": 1, "52": 1, "61": 1, "37": 1}, "ol3": {"22": 2, "7": 1}, "unknown": {"70": 1}, "moving": {"61": 1}, "requests": {"21": 1}, "symbolize": {"26": 1}, "navigation": {"46": 3}, "or": {"9": 1, "10": 1}, "tabindex": {"0": 1}, "key": {"53": 1}, "control": {"4": 1, "6": 1, "75": 2, "44": 1, "46": 1, "17": 1, "18": 2, "22": 1, "25": 1}, "rendered": {"9": 1}, "features": {"43": 1, "19": 1, "12": 1, "53": 2, "63": 1}, "render": {"30": 1}, "point": {"26": 1}, "simple": {"56": 3}, "image": {"36": 1, "69": 3, "9": 4, "15": 1, "21": 1, "68": 3, "58": 3, "28": 2, "29": 3}, "cors": {"38": 3}, "clipping": {"33": 3, "34": 3}, "zoomify": {"74": 3}, "one": {"36": 1, "61": 1, "55": 3}, "rendering": {"63": 1, "31": 1}, "tilelayer": {"67": 1, "71": 1}, "href": {"58": 1, "27": 1, "38": 3}, "coordinates": {"27": 1, "5": 1}, "another": {"36": 1, "61": 1}, "marker": {"26": 1}, "apply": {"28": 1}, "total": {"27": 1}, "opencyclemap": {"27": 3, "38": 2}, "tilejson": {"35": 1, "62": 3, "54": 1}, "select": {"53": 4}, "esri": {"73": 3}, "use": {"24": 1, "45": 1, "30": 1}, "from": {"63": 1, "27": 3, "61": 1, "38": 1, "31": 1}, "com": {"58": 2}, "source": {"32": 1, "65": 1, "72": 1, "9": 1, "74": 1, "73": 1, "23": 1, "57": 1, "58": 1}, "css": {"75": 1}, "epsg": {"67": 1, "70": 1, "14": 2}, "create": {"48": 1, "6": 1}, "swipe": {"37": 3}, "two": {"57": 2, "2": 1, "67": 1, "68": 1, "70": 1}, "symbolizer": {"30": 1}, "custom": {"68": 1, "38": 2, "6": 3}, "pixelmap": {"67": 1}, "trigger": {"21": 1}, "gpx": {"9": 2, "10": 2, "23": 3}, "way": {"2": 1}, "countries": {"64": 1}, "listen": {"8": 1}, "files": {"9": 1, "10": 1}, "hue": {"25": 3}, "enable": {"38": 1}, "that": {"51": 1}, "clicking": {"53": 1}, "share": {"55": 1}, "levels": {"64": 1}, "locations": {"30": 1}, "slider": {"75": 1}, "interaction": {"43": 1, "9": 1, "10": 1, "11": 2, "12": 2, "53": 1}, "because": {"51": 1}, "21781": {"67": 1, "70": 1}, "gmaps": {"22": 1}, "getfeatureinfo": {"21": 3}, "line": {"52": 3}, "hold": {"53": 1}, "with": {"64": 1, "35": 1, "68": 1, "5": 1, "38": 2, "9": 1, "17": 1, "67": 1, "22": 2, "57": 1, "54": 1}, "png": {"15": 2}, "static": {"58": 3}, "target": {"61": 1}, "this": {"51": 2, "21": 1, "6": 1}, "points": {"60": 2}, "work": {"51": 1}, "tree": {"51": 3}, "as": {"22": 1, "15": 1}, "accesses": {"51": 1}, "paraglider": {"27": 1}, "xkcd": {"58": 3}, "headers": {"38": 1}, "r": {"51": 3}, "renders": {"5": 1}, "shape": {"30": 1}, "256": {"58": 2}, "shift": {"53": 1}, "locally": {"51": 1}, "animated": {"1": 1}, "example": {"0": 2, "1": 1, "2": 1, "3": 2, "4": 2, "5": 1, "6": 1, "7": 2, "8": 1, "9": 2, "10": 2, "11": 1, "12": 2, "13": 2, "14": 2, "15": 2, "16": 2, "17": 2, "18": 2, "19": 2, "20": 2, "21": 2, "22": 2, "23": 2, "25": 2, "26": 2, "27": 2, "28": 1, "29": 2, "32": 2, "33": 2, "34": 2, "35": 2, "36": 1, "37": 2, "38": 2, "39": 2, "40": 2, "41": 1, "42": 2, "43": 2, "44": 2, "45": 1, "46": 1, "47": 1, "48": 1, "49": 2, "50": 2, "51": 3, "52": 2, "53": 2, "54": 2, "55": 1, "56": 2, "57": 2, "58": 2, "59": 2, "60": 2, "61": 2, "62": 2, "63": 1, "64": 2, "65": 2, "66": 2, "67": 2, "68": 2, "69": 2, "70": 2, "71": 2, "72": 2, "73": 2, "74": 2, "75": 1}, "capabilities": {"66": 1}, "are": {"57": 1, "51": 2}, "and": {"64": 1, "1": 1, "67": 1, "38": 1, "7": 1, "9": 4, "10": 4, "11": 2, "17": 2, "55": 1}, "debugging": {"5": 1}, "layer": {"64": 2, "33": 2, "34": 2, "3": 1, "36": 2, "37": 2, "38": 1, "71": 1, "35": 2, "21": 1, "54": 2, "24": 1, "57": 1, "58": 1, "27": 1, "29": 1, "62": 1, "69": 1}, "flights": {"27": 1}, "orientation": {"8": 2}, "give": {"22": 1}, "is": {"9": 1, "27": 1, "70": 1, "38": 1, "51": 1}, "internals": {"51": 1}, "binding": {"2": 1}, "accessibility": {"0": 2}, "layergroup": {"35": 1}, "an": {"0": 1, "38": 1, "9": 1, "48": 1, "22": 1, "26": 1, "27": 1, "29": 1}, "single": {"11": 1, "68": 3, "69": 2}, "hover": {"64": 1}, "at": {"64": 1}, "file": {"9": 1, "27": 1}, "in": {"51": 1, "27": 1, "30": 1, "14": 1, "31": 1}, "1": {"67": 2}, "overlays": {"47": 1}, "mouse": {"44": 3}, "teleport": {"61": 2}, "end": {"45": 1}, "49": {"27": 1}, "country": {"64": 2}, "webgl": {"25": 2, "55": 2, "4": 2, "33": 3}, "when": {"51": 1}, "detail": {"27": 1}, "geojson": {"64": 1, "9": 2, "10": 2, "19": 3}, "event": {"45": 2}, "note": {"51": 1}, "maps": {"17": 1, "18": 1, "3": 3, "22": 1, "55": 1}, "html": {"2": 2}, "igc": {"9": 2, "10": 2, "27": 3}, "which": {"51": 1, "70": 1}, "tile": {"49": 1, "71": 1, "67": 1, "38": 2, "57": 1}, "events": {"8": 1}, "pan": {"1": 1}, "higher": {"64": 1}, "stamen": {"57": 3}, "map": {"0": 1, "61": 1, "35": 1, "37": 1, "38": 1, "39": 1, "40": 1, "9": 1, "10": 1, "44": 1, "45": 1, "14": 1, "15": 2, "50": 1, "20": 1, "22": 3, "56": 1, "54": 1, "42": 1}, "draw": {"12": 3}, "elements": {"2": 1}, "multiple": {"27": 1}, "users": {"22": 1}, "closest": {"27": 1}, "information": {"64": 1}, "max": {"41": 1}, "object": {"55": 1}, "effect": {"17": 1}, "drag": {"9": 4, "10": 4, "11": 3, "17": 3}, "scale": {"52": 3}, "uses": {"48": 1}, "exported": {"51": 1}, "position": {"44": 3}, "device": {"8": 1}, "data": {"51": 1, "13": 3}, "response": {"66": 1}, "structure": {"51": 1}, "icon": {"26": 3}, "a": {"3": 1, "9": 1, "11": 1, "14": 1, "15": 2, "16": 1, "18": 1, "20": 1, "21": 1, "22": 2, "24": 1, "26": 1, "27": 3, "28": 1, "30": 1, "35": 1, "36": 1, "37": 1, "38": 9, "39": 1, "40": 1, "42": 1, "44": 1, "48": 1, "50": 1, "52": 1, "54": 2, "56": 1, "57": 1, "58": 3, "61": 1, "62": 1, "63": 1, "64": 1, "66": 1, "69": 1, "71": 1, "72": 1, "73": 1, "74": 1}, "imagery": {"28": 1}, "center": {"55": 1}, "dom": {"55": 2}, "mobile": {"42": 2}, "bind": {"2": 2, "35": 1}, "bing": {"17": 2, "18": 2, "3": 4, "42": 1, "49": 1}, "depending": {"41": 1}, "lines": {"59": 2}, "together": {"7": 1}, "without": {"70": 1}, "more": {"27": 1}, "portion": {"36": 1}, "client": {"9": 1, "4": 1, "70": 2, "25": 1}, "does": {"51": 1, "38": 1}, "add": {"53": 1, "46": 1}, "maxresolution": {"41": 1}, "the": {"32": 1, "57": 2, "67": 1, "4": 1, "70": 2, "38": 2, "65": 1, "9": 3, "10": 2, "43": 1, "12": 1, "45": 1, "44": 1, "51": 3, "55": 2, "53": 3, "23": 1, "24": 1, "25": 1, "27": 3, "30": 1}, "resolution": {"41": 3, "55": 1}, "minresolution": {"41": 1}}, "examples": [{"author": "Tom Payne", "tags": "accessibility, tabindex", "modified": "2014-02-26T17:58:43+0100", "classes": [], "link": "accessible.html", "shortdesc": "Example of an accessible map.", "title": "Accessibility example", "example": "accessible.html"}, {"author": "Tom Payne", "tags": "animation", "modified": "2014-02-26T17:58:43+0100", "classes": [], "link": "animation.html", "shortdesc": "Demonstrates animated pan, zoom, and rotation.", "title": "Animation example", "example": "animation.html"}, {"author": "Tom Payne", "tags": "input, bind, openstreetmap", "modified": "2014-02-26T17:58:43+0100", "classes": [], "link": "bind-input.html", "shortdesc": "Demonstrates two-way binding of HTML input elements to OpenLayers objects.", "title": "Bind HTML input example", "example": "bind-input.html"}, {"author": "Tom Payne", "tags": "bing, bing-maps", "modified": "2014-02-26T17:58:43+0100", "classes": [], "link": "bing-maps.html", "shortdesc": "Example of a Bing Maps layer.", "title": "Bing Maps example", "example": "bing-maps.html"}, {"author": "Tom Payne", "tags": "brightness, contrast, webgl", "modified": "2014-02-26T17:58:43+0100", "classes": [], "link": "brightness-contrast.html", "shortdesc": "Example of brightness/contrast control on the client (WebGL only).", "title": "Brightness/contrast example", "example": "brightness-contrast.html"}, {"author": "Tom Payne", "tags": "layers, openstreetmap, canvas", "modified": "2014-02-26T17:58:43+0100", "classes": [], "link": "canvas-tiles.html", "shortdesc": "Renders tiles with coordinates for debugging.", "title": "Canvas tiles example", "example": "canvas-tiles.html"}, {"author": "Tom Payne", "tags": "custom, control", "modified": "2014-02-26T17:58:43+0100", "classes": [], "link": "custom-controls.html", "shortdesc": "This example shows how to create custom controls.", "title": "Custom controls", "example": "custom-controls.html"}, {"author": "Tim Schaub", "tags": "d3", "modified": "2014-02-21T18:45:46-0700", "classes": [], "link": "d3.html", "shortdesc": "Example of using ol3 and d3 together.", "title": "d3 integration example", "example": "d3.html"}, {"author": "Tom Payne", "tags": "orientation, openstreetmap", "modified": "2014-02-26T17:58:43+0100", "classes": [], "link": "device-orientation.html", "shortdesc": "Listen to DeviceOrientation events", "title": "Device orientation example", "example": "device-orientation.html"}, {"author": "Tom Payne", "tags": "drag-and-drop-image-vector, gpx, geojson, igc, kml, topojson, vector, image", "modified": "2014-02-26T17:58:43+0100", "classes": [], "link": "drag-and-drop-image-vector.html", "shortdesc": "Example of using the drag-and-drop interaction with a ol.source.ImageVector. Drag and drop GPX, GeoJSON, IGC, KML, or TopoJSON files on to the map. Each file is rendered to an image on the client.", "title": "Drag-and-Drop image vector example", "example": "drag-and-drop-image-vector.html"}, {"author": "Tom Payne", "tags": "drag-and-drop, gpx, geojson, igc, kml, topojson", "modified": "2014-02-26T17:58:43+0100", "classes": [], "link": "drag-and-drop.html", "shortdesc": "Example of using the drag-and-drop interaction. Drag and drop GPX, GeoJSON, IGC, KML, or TopoJSON files on to the map.", "title": "Drag-and-Drop example", "example": "drag-and-drop.html"}, {"author": "Tom Payne", "tags": "drag, rotate, zoom, interaction", "modified": "2014-02-26T17:58:43+0100", "classes": [], "link": "drag-rotate-and-zoom.html", "shortdesc": "A single interaction to drag, rotate, and zoom.", "title": "Drag rotate and zoom example", "example": "drag-rotate-and-zoom.html"}, {"author": "Tom Payne", "tags": "draw, edit, vector", "modified": "2014-02-26T17:58:43+0100", "classes": [], "link": "draw-features.html", "shortdesc": "Example of using the ol.interaction.Draw interaction.", "title": "Draw features example", "example": "draw-features.html"}, {"author": "Tom Payne", "tags": "dynamic-data", "modified": "2014-02-26T17:58:43+0100", "classes": [], "link": "dynamic-data.html", "shortdesc": "Example of dynamic data.", "title": "Dynamic data example", "example": "dynamic-data.html"}, {"author": "Tom Payne", "tags": "epsg4326", "modified": "2014-02-26T17:58:43+0100", "classes": [], "link": "epsg-4326.html", "shortdesc": "Example of a map in EPSG:4326.", "title": "EPSG:4326 example", "example": "epsg-4326.html"}, {"author": "Tom Payne", "tags": "export, png, openstreetmap", "modified": "2014-02-26T17:58:43+0100", "classes": [], "link": "export-map.html", "shortdesc": "Example of exporting a map as a PNG image.", "title": "Export map example", "example": "export-map.html"}, {"author": "Tim Schaub", "tags": "fractal, vector", "modified": "2014-02-21T17:48:17-0700", "classes": [], "link": "fractal.html", "shortdesc": "Example of a fractal.", "title": "Fractal Example", "example": "fractal.html"}, {"author": "Tom Payne", "tags": "full-screen, drag, rotate, zoom, bing, bing-maps", "modified": "2014-02-26T17:58:43+0100", "classes": [], "link": "full-screen-drag-rotate-and-zoom.html", "shortdesc": "Example of drag rotate and zoom control with full screen effect.", "title": "Full screen drag rotate and zoom example", "example": "full-screen-drag-rotate-and-zoom.html"}, {"author": "Frederic Junod", "tags": "full-screen, bing, bing-maps", "modified": "2014-02-26T15:18:14+0100", "classes": [], "link": "full-screen.html", "shortdesc": "Example of a full screen control.", "title": "Full screen control example", "example": "full-screen.html"}, {"author": "Tom Payne", "tags": "geojson, vector, openstreetmap", "modified": "2014-02-26T17:58:43+0100", "classes": [], "link": "geojson.html", "shortdesc": "Example of GeoJSON features.", "title": "GeoJSON example", "example": "geojson.html"}, {"author": "Tom Payne", "tags": "geolocation, openstreetmap", "modified": "2014-02-26T17:58:43+0100", "classes": [], "link": "geolocation.html", "shortdesc": "Example of a geolocation map.", "title": "Geolocation example", "example": "geolocation.html"}, {"author": "Tom Payne", "tags": "getfeatureinfo", "modified": "2014-02-26T17:58:43+0100", "classes": [], "link": "getfeatureinfo.html", "shortdesc": "This example shows how to trigger WMS GetFeatureInfo requests on click for a WMS image layer.", "title": "GetFeatureInfo example", "example": "getfeatureinfo.html"}, {"author": "ahocevar", "tags": "google", "modified": "2014-03-02T15:56:21+0100", "classes": [], "link": "google-map.html", "shortdesc": "Example of a GMaps map with an ol3 map as control, to give users a Google base map with ol3 content on top.", "title": "Google Maps integration example", "example": "google-map.html"}, {"author": "Tom Payne", "tags": "GPX", "modified": "2014-02-26T17:58:43+0100", "classes": [], "link": "gpx.html", "shortdesc": "Example of using the GPX source.", "title": "GPX example", "example": "gpx.html"}, {"author": "Frederic Junod", "tags": "heatmap, kml, vector, style", "modified": "2014-02-19T12:06:13+0100", "classes": [], "link": "heatmap-earthquakes.html", "shortdesc": "Demonstrates the use of a heatmap layer.", "title": "Earthquakes heatmap", "example": "heatmap-earthquakes.html"}, {"author": "Tom Payne", "tags": "hue, saturation, webgl", "modified": "2014-02-26T17:58:43+0100", "classes": [], "link": "hue-saturation.html", "shortdesc": "Example of hue/saturation control on the client (WebGL only).", "title": "Hue/saturation example", "example": "hue-saturation.html"}, {"author": "Tom Payne", "tags": "vector, style, icon, marker, popup", "modified": "2014-02-26T17:58:43+0100", "classes": [], "link": "icon.html", "shortdesc": "Example using an icon to symbolize a point.", "title": "Icon example", "example": "icon.html"}, {"author": "Frederic Junod", "tags": "complex-geometry, closest-feature, igc, opencyclemap", "modified": "2014-02-28T10:25:19+0100", "classes": [], "link": "igc.html", "shortdesc": "Example of tracks recorded from multiple paraglider flights on the same day, read from an IGC file. The five tracks contain a total of 49,707 unique coordinates. Zoom in to see more detail. The background layer is from OpenCycleMap.", "title": "IGC example", "example": "igc.html"}, {"author": "Tim Schaub", "tags": "filter, image manipulation", "modified": "2014-03-01T17:44:43-0700", "classes": [], "link": "image-filter.html", "shortdesc": "Apply a filter to imagery", "title": "Image filter example", "example": "image-filter.html"}, {"author": "Tom Payne", "tags": "vector, image", "modified": "2014-02-26T17:58:43+0100", "classes": [], "link": "image-vector-layer.html", "shortdesc": "Example of an image vector layer.", "title": "Image vector example", "example": "image-vector-layer.html"}, {"author": "Tom Payne", "tags": "KML, vector, style", "modified": "2014-02-26T17:58:43+0100", "classes": [], "link": "kml-earthquakes.html", "shortdesc": "Demonstrates the use of a Shape symbolizer to render earthquake locations.", "title": "Earthquakes in KML", "example": "kml-earthquakes.html"}, {"author": "Tom Payne", "tags": "KML, vector, style", "modified": "2014-02-26T17:58:43+0100", "classes": [], "link": "kml-timezones.html", "shortdesc": "Demonstrates rendering timezones from KML.", "title": "Timezones in KML", "example": "kml-timezones.html"}, {"author": "Tom Payne", "tags": "KML", "modified": "2014-02-26T17:58:43+0100", "classes": [], "link": "kml.html", "shortdesc": "Example of using the KML source.", "title": "KML example", "example": "kml.html"}, {"author": "Tim Schaub", "tags": "clipping, webgl, openstreetmap", "modified": "2014-02-21T18:45:46-0700", "classes": [], "link": "layer-clipping-webgl.html", "shortdesc": "Layer WebGL clipping example.", "title": "Layer WebGL clipping example", "example": "layer-clipping-webgl.html"}, {"author": "Tom Payne", "tags": "clipping, openstreetmap", "modified": "2014-02-26T17:58:43+0100", "classes": [], "link": "layer-clipping.html", "shortdesc": "Layer clipping example.", "title": "Layer clipping example", "example": "layer-clipping.html"}, {"author": "Tom Payne", "tags": "tilejson, input, bind, group, layergroup", "modified": "2014-02-26T17:58:43+0100", "classes": [], "link": "layer-group.html", "shortdesc": "Example of a map with layer group.", "title": "Layer group example", "example": "layer-group.html"}, {"author": "Tom Payne", "tags": "spy, image manipulation", "modified": "2014-02-26T17:58:43+0100", "classes": [], "link": "layer-spy.html", "shortdesc": "View a portion of one layer over another", "title": "Layer spy example", "example": "layer-spy.html"}, {"author": "Tom Payne", "tags": "swipe, openstreetmap", "modified": "2014-02-26T17:58:43+0100", "classes": [], "link": "layer-swipe.html", "shortdesc": "Example of a Layer swipe map.", "title": "Layer Swipe example", "example": "layer-swipe.html"}, {"author": "Tom Payne", "tags": "cors, localized-openstreetmap, openseamap, openstreetmap", "modified": "2014-02-26T17:58:43+0100", "classes": [], "link": "localized-openstreetmap.html", "shortdesc": "Example of a localized OpenStreetMap map with a custom tile server and a custom attribution. The base layer is OpenCycleMap with an overlay from OpenSeaMap. The OpenSeaMap tile server does not support CORS headers.", "title": "Localized OpenStreetMap example", "example": "localized-openstreetmap.html"}, {"author": "Tom Payne", "tags": "mapguide", "modified": "2014-02-26T17:58:43+0100", "classes": [], "link": "mapguide-untiled.html", "shortdesc": "Example of a untiled MapGuide map.", "title": "MapGuide untiled example", "example": "mapguide-untiled.html"}, {"author": "Tom Payne", "tags": "mapquest", "modified": "2014-02-26T17:58:43+0100", "classes": [], "link": "mapquest.html", "shortdesc": "Example of a MapQuest map.", "title": "MapQuest example", "example": "mapquest.html"}, {"author": "Tim Schaub", "tags": "minResolution, maxResolution, resolution", "modified": "2014-02-21T18:45:46-0700", "classes": [], "link": "min-max-resolution.html", "shortdesc": "Show/hide layers depending on current view resolution.", "title": "Min/max resolution example", "example": "min-max-resolution.html"}, {"author": "Antoine Abt", "tags": "fullscreen, bing, geolocation, mobile", "modified": "2014-02-13T16:50:49+0100", "classes": [], "link": "mobile-full-screen.html", "shortdesc": "Example of a full screen map.", "title": "Mobile full screen example", "example": "mobile-full-screen.html"}, {"author": "ahocevar", "tags": "modify, edit, vector", "modified": "2014-03-06T22:43:10+0100", "classes": [], "link": "modify-features.html", "shortdesc": "Example of using the Modify interaction.", "title": "Modify features example", "example": "modify-features.html"}, {"author": "Tom Payne", "tags": "mouse-position, openstreetmap", "modified": "2014-02-26T17:58:43+0100", "classes": [], "link": "mouse-position.html", "shortdesc": "Example of a mouse position control, outside the map.", "title": "Mouse position example", "example": "mouse-position.html"}, {"author": "Tom Payne", "tags": "moveend, map, event", "modified": "2014-02-26T17:58:43+0100", "classes": [], "link": "moveend.html", "shortdesc": "Use of the moveend event.", "title": "Move end example", "example": "moveend.html"}, {"author": "Tom Payne", "tags": "control, navigation, extent", "modified": "2014-02-26T17:58:43+0100", "classes": ["ol.control.Zoom "], "link": "navigation-controls.html", "shortdesc": "Shows how to add navigation controls.", "title": "Navigation controls example", "example": "navigation-controls.html"}, {"author": "Tom Payne", "tags": "overlay, popup, bootstrap, popover, mapquest, openaerial", "modified": "2014-02-26T17:58:43+0100", "classes": [], "link": "overlay.html", "shortdesc": "Demonstrates overlays.", "title": "Overlay example", "example": "overlay.html"}, {"author": "Tom Payne", "tags": "overlay, popup, mapquest, openaerial", "modified": "2014-02-26T17:58:43+0100", "classes": [], "link": "popup.html", "shortdesc": "Uses an overlay to create a popup.", "title": "Popup example", "example": "popup.html"}, {"author": "Tom Payne", "tags": "preload, bing", "modified": "2014-02-26T17:58:43+0100", "classes": [], "link": "preload.html", "shortdesc": "Example of tile preloading.", "title": "Preload example", "example": "preload.html"}, {"author": "Tom Payne", "tags": "rotation, openstreetmap", "modified": "2014-02-26T17:58:43+0100", "classes": [], "link": "rotation.html", "shortdesc": "Example of a rotated map.", "title": "Rotation example", "example": "rotation.html"}, {"author": "Tim Schaub", "tags": "vector, rtree", "modified": "2014-02-21T18:45:46-0700", "classes": [], "link": "rtree.html", "shortdesc": "R-Tree example. Please note that this example only works locally, it does not work when the examples are hosted. This is because it accesses internals the R-Tree data structure, which are not exported in the API.", "title": "R-Tree example", "example": "rtree.html"}, {"author": "Tom Payne", "tags": "scale-line, openstreetmap", "modified": "2014-02-26T17:58:43+0100", "classes": [], "link": "scale-line.html", "shortdesc": "Example of a scale line.", "title": "Scale line example", "example": "scale-line.html"}, {"author": "Tom Payne", "tags": "select, vector", "modified": "2014-02-26T17:58:43+0100", "classes": [], "link": "select-features.html", "shortdesc": "Example of using the Select interaction. Select features by clicking polygons. Hold the Shift-key to add to the selection.", "title": "Select features example", "example": "select-features.html"}, {"author": "Tom Payne", "tags": "transparent, mapquest, tilejson", "modified": "2014-02-26T17:58:43+0100", "classes": [], "link": "semi-transparent-layer.html", "shortdesc": "Example of a map with a semi-transparent layer.", "title": "Semi-transparent layer example", "example": "semi-transparent-layer.html"}, {"author": "Tom Payne", "tags": "side-by-side, canvas, webgl, dom, canvas, sync, object", "modified": "2014-02-26T17:58:43+0100", "classes": [], "link": "side-by-side.html", "shortdesc": "The three maps, one WebGL, one Canvas, one DOM, share the same center, resolution, rotation and layers.", "title": "Side-by-side example", "example": "side-by-side.html"}, {"author": "Tom Payne", "tags": "simple, openstreetmap", "modified": "2014-02-26T17:58:43+0100", "classes": [], "link": "simple.html", "shortdesc": "Example of a simple map.", "title": "Simple example", "example": "simple.html"}, {"author": "Tom Payne", "tags": "stamen, watercolor, terrain-labels, two-layers", "modified": "2014-02-26T17:58:43+0100", "classes": [], "link": "stamen.html", "shortdesc": "Example of a Stamen tile source. Two layers are composed: the watercolor base layer with the terrain labels.", "title": "Stamen example", "example": "stamen.html"}, {"author": "Tom Payne", "tags": "static image, xkcd", "modified": "2014-02-26T17:58:43+0100", "classes": [], "link": "static-image.html", "shortdesc": "Example of a static image layer. Source: xkcd.com/256/", "title": "Static image example", "example": "static-image.html"}, {"author": "Tim Schaub", "tags": "vector", "modified": "2014-02-21T18:45:46-0700", "classes": [], "link": "synthetic-lines.html", "shortdesc": "Synthetic lines example.", "title": "Synthetic lines example", "example": "synthetic-lines.html"}, {"author": "Tim Schaub", "tags": "vector", "modified": "2014-02-21T18:45:46-0700", "classes": [], "link": "synthetic-points.html", "shortdesc": "Synthetic points example.", "title": "Synthetic points example", "example": "synthetic-points.html"}, {"author": "Tom Payne", "tags": "teleport, openstreetmap", "modified": "2014-02-26T17:58:43+0100", "classes": [], "link": "teleport.html", "shortdesc": "Example of moving a map from one target to another.", "title": "Teleport example", "example": "teleport.html"}, {"author": "Tom Payne", "tags": "tilejson", "modified": "2014-02-26T17:58:43+0100", "classes": [], "link": "tilejson.html", "shortdesc": "Example of a TileJSON layer.", "title": "TileJSON example", "example": "tilejson.html"}, {"author": "Tom Payne", "tags": "vector, topojson, style", "modified": "2014-02-26T17:58:43+0100", "classes": [], "link": "topojson.html", "shortdesc": "Demonstrates rendering of features from a TopoJSON topology.", "title": "TopoJSON example", "example": "topojson.html"}, {"author": "Tom Payne", "tags": "vector, geojson, style, feature overlay", "modified": "2014-02-26T17:58:43+0100", "classes": [], "link": "vector-layer.html", "shortdesc": "Example of a countries vector layer with country information on hover and country labels at higher zoom levels.", "title": "Vector layer example", "example": "vector-layer.html"}, {"author": "Frederic Junod", "tags": "vector, osm, xml", "modified": "2014-01-20T17:16:03+0100", "classes": [], "link": "vector-osm.html", "shortdesc": "Example of using the OSM XML source.", "title": "OSM XML example", "example": "vector-osm.html"}, {"author": "Tom Payne", "tags": "wms, capabilities, getcapabilities", "modified": "2014-02-26T17:58:43+0100", "classes": [], "link": "wms-capabilities.html", "shortdesc": "Example of parsing a WMS GetCapabilities response.", "title": "WMS GetCapabilities parsing example", "example": "wms-capabilities.html"}, {"author": "Tom Payne", "tags": "wms, tile, tilelayer, proj4js, projection", "modified": "2014-02-26T17:58:43+0100", "classes": [], "link": "wms-custom-proj.html", "shortdesc": "Example of two tiled WMS layers (Pixelmap 1:1'000'000 and national parks) using the projection EPSG:21781.", "title": "Tiled WMS with Proj4js projection example", "example": "wms-custom-proj.html"}, {"author": "Tom Payne", "tags": "wms, single image, projection", "modified": "2014-02-26T17:58:43+0100", "classes": [], "link": "wms-image-custom-proj.html", "shortdesc": "Example of two single image WMS layers.", "title": "Single image WMS with custom projection example", "example": "wms-image-custom-proj.html"}, {"author": "Tom Payne", "tags": "wms, image", "modified": "2014-02-26T17:58:43+0100", "classes": [], "link": "wms-image.html", "shortdesc": "Example of a single image WMS layer.", "title": "Single image WMS example", "example": "wms-image.html"}, {"author": "Tom Payne", "tags": "wms, projection", "modified": "2014-02-26T17:58:43+0100", "classes": [], "link": "wms-no-proj.html", "shortdesc": "Example of two WMS layers using the projection EPSG:21781, which is unknown to the client.", "title": "WMS without client projection example", "example": "wms-no-proj.html"}, {"author": "Tom Payne", "tags": "wms, tile, tilelayer", "modified": "2014-02-26T17:58:43+0100", "classes": [], "link": "wms-tiled.html", "shortdesc": "Example of a tiled WMS layer.", "title": "Tiled WMS example", "example": "wms-tiled.html"}, {"author": "Tom Payne", "tags": "wmts", "modified": "2014-02-26T17:58:43+0100", "classes": [], "link": "wmts.html", "shortdesc": "Example of a WMTS source.", "title": "WMTS example", "example": "wmts.html"}, {"author": "Tom Payne", "tags": "xyz, esri", "modified": "2014-02-26T17:58:43+0100", "classes": [], "link": "xyz-esri.html", "shortdesc": "Example of a XYZ source using Esri tiles.", "title": "XYZ Esri example", "example": "xyz-esri.html"}, {"author": "Tom Payne", "tags": "zoomify", "modified": "2014-02-26T17:58:43+0100", "classes": [], "link": "zoomify.html", "shortdesc": "Example of a Zoomify source.", "title": "Zoomify example", "example": "zoomify.html"}, {"author": "Tom Payne", "tags": "zoom, zoomslider, slider, style, styling, css, control", "modified": "2014-02-26T17:58:43+0100", "classes": [], "link": "zoomslider.html", "shortdesc": "Example of various ZoomSlider controls.", "title": "ZoomSlider control", "example": "zoomslider.html"}]}; \ No newline at end of file diff --git a/float-no-zero/examples/example-list.xml b/float-no-zero/examples/example-list.xml new file mode 100644 index 0000000000..f0789c975e --- /dev/null +++ b/float-no-zero/examples/example-list.xml @@ -0,0 +1 @@ +OpenLayers Exampleshttp://openlayers.github.io/ol3/master/examples/example-list.xml#2014-03-07T09:54:05Z2014-03-07T09:54:05ZModify features examplemodify, edit, vectorExample of using the Modify interaction.2014-03-06T22:43:10+0100ahocevarhttp://openlayers.github.io/ol3/master/examples/modify-features.html#2014-03-06T22:43:10+0100Google Maps integration examplegoogleExample of a GMaps map with an ol3 map as control, to give users a Google base map with ol3 content on top.2014-03-02T15:56:21+0100ahocevarhttp://openlayers.github.io/ol3/master/examples/google-map.html#2014-03-02T15:56:21+0100Image filter examplefilter, image manipulationApply a filter to imagery2014-03-01T17:44:43-0700Tim Schaubhttp://openlayers.github.io/ol3/master/examples/image-filter.html#2014-03-01T17:44:43-0700IGC examplecomplex-geometry, closest-feature, igc, opencyclemapExample of tracks recorded from multiple paraglider flights on the same day, read from an IGC file. The five tracks contain a total of 49,707 unique coordinates. Zoom in to see more detail. The background layer is from <a href="http://www.opencyclemap.org/">OpenCycleMap</a>.2014-02-28T10:25:19+0100Frederic Junodhttp://openlayers.github.io/ol3/master/examples/igc.html#2014-02-28T10:25:19+0100Accessibility exampleaccessibility, tabindexExample of an accessible map.2014-02-26T17:58:43+0100Tom Paynehttp://openlayers.github.io/ol3/master/examples/accessible.html#2014-02-26T17:58:43+0100Animation exampleanimationDemonstrates animated pan, zoom, and rotation.2014-02-26T17:58:43+0100Tom Paynehttp://openlayers.github.io/ol3/master/examples/animation.html#2014-02-26T17:58:43+0100Bind HTML input exampleinput, bind, openstreetmapDemonstrates two-way binding of HTML input elements to OpenLayers objects.2014-02-26T17:58:43+0100Tom Paynehttp://openlayers.github.io/ol3/master/examples/bind-input.html#2014-02-26T17:58:43+0100Bing Maps examplebing, bing-mapsExample of a Bing Maps layer.2014-02-26T17:58:43+0100Tom Paynehttp://openlayers.github.io/ol3/master/examples/bing-maps.html#2014-02-26T17:58:43+0100Brightness/contrast examplebrightness, contrast, webglExample of brightness/contrast control on the client (WebGL only).2014-02-26T17:58:43+0100Tom Paynehttp://openlayers.github.io/ol3/master/examples/brightness-contrast.html#2014-02-26T17:58:43+0100Canvas tiles examplelayers, openstreetmap, canvasRenders tiles with coordinates for debugging.2014-02-26T17:58:43+0100Tom Paynehttp://openlayers.github.io/ol3/master/examples/canvas-tiles.html#2014-02-26T17:58:43+0100Custom controlscustom, controlThis example shows how to create custom controls.2014-02-26T17:58:43+0100Tom Paynehttp://openlayers.github.io/ol3/master/examples/custom-controls.html#2014-02-26T17:58:43+0100Device orientation exampleorientation, openstreetmapListen to DeviceOrientation events2014-02-26T17:58:43+0100Tom Paynehttp://openlayers.github.io/ol3/master/examples/device-orientation.html#2014-02-26T17:58:43+0100Drag-and-Drop image vector exampledrag-and-drop-image-vector, gpx, geojson, igc, kml, topojson, vector, imageExample of using the drag-and-drop interaction with a <code>ol.source.ImageVector</code>. Drag and drop GPX, GeoJSON, IGC, KML, or TopoJSON files on to the map. Each file is rendered to an image on the client.2014-02-26T17:58:43+0100Tom Paynehttp://openlayers.github.io/ol3/master/examples/drag-and-drop-image-vector.html#2014-02-26T17:58:43+0100Drag-and-Drop exampledrag-and-drop, gpx, geojson, igc, kml, topojsonExample of using the drag-and-drop interaction. Drag and drop GPX, GeoJSON, IGC, KML, or TopoJSON files on to the map.2014-02-26T17:58:43+0100Tom Paynehttp://openlayers.github.io/ol3/master/examples/drag-and-drop.html#2014-02-26T17:58:43+0100Drag rotate and zoom exampledrag, rotate, zoom, interactionA single interaction to drag, rotate, and zoom.2014-02-26T17:58:43+0100Tom Paynehttp://openlayers.github.io/ol3/master/examples/drag-rotate-and-zoom.html#2014-02-26T17:58:43+0100Draw features exampledraw, edit, vectorExample of using the <code>ol.interaction.Draw</code> interaction.2014-02-26T17:58:43+0100Tom Paynehttp://openlayers.github.io/ol3/master/examples/draw-features.html#2014-02-26T17:58:43+0100Dynamic data exampledynamic-dataExample of dynamic data.2014-02-26T17:58:43+0100Tom Paynehttp://openlayers.github.io/ol3/master/examples/dynamic-data.html#2014-02-26T17:58:43+0100EPSG:4326 exampleepsg4326Example of a map in EPSG:4326.2014-02-26T17:58:43+0100Tom Paynehttp://openlayers.github.io/ol3/master/examples/epsg-4326.html#2014-02-26T17:58:43+0100Export map exampleexport, png, openstreetmapExample of exporting a map as a PNG image.2014-02-26T17:58:43+0100Tom Paynehttp://openlayers.github.io/ol3/master/examples/export-map.html#2014-02-26T17:58:43+0100Full screen drag rotate and zoom examplefull-screen, drag, rotate, zoom, bing, bing-mapsExample of drag rotate and zoom control with full screen effect.2014-02-26T17:58:43+0100Tom Paynehttp://openlayers.github.io/ol3/master/examples/full-screen-drag-rotate-and-zoom.html#2014-02-26T17:58:43+0100GeoJSON examplegeojson, vector, openstreetmapExample of GeoJSON features.2014-02-26T17:58:43+0100Tom Paynehttp://openlayers.github.io/ol3/master/examples/geojson.html#2014-02-26T17:58:43+0100Geolocation examplegeolocation, openstreetmapExample of a geolocation map.2014-02-26T17:58:43+0100Tom Paynehttp://openlayers.github.io/ol3/master/examples/geolocation.html#2014-02-26T17:58:43+0100GetFeatureInfo examplegetfeatureinfoThis example shows how to trigger WMS GetFeatureInfo requests on click for a WMS image layer.2014-02-26T17:58:43+0100Tom Paynehttp://openlayers.github.io/ol3/master/examples/getfeatureinfo.html#2014-02-26T17:58:43+0100GPX exampleGPXExample of using the GPX source.2014-02-26T17:58:43+0100Tom Paynehttp://openlayers.github.io/ol3/master/examples/gpx.html#2014-02-26T17:58:43+0100Hue/saturation examplehue, saturation, webglExample of hue/saturation control on the client (WebGL only).2014-02-26T17:58:43+0100Tom Paynehttp://openlayers.github.io/ol3/master/examples/hue-saturation.html#2014-02-26T17:58:43+0100Icon examplevector, style, icon, marker, popupExample using an icon to symbolize a point.2014-02-26T17:58:43+0100Tom Paynehttp://openlayers.github.io/ol3/master/examples/icon.html#2014-02-26T17:58:43+0100Image vector examplevector, imageExample of an image vector layer.2014-02-26T17:58:43+0100Tom Paynehttp://openlayers.github.io/ol3/master/examples/image-vector-layer.html#2014-02-26T17:58:43+0100Earthquakes in KMLKML, vector, styleDemonstrates the use of a Shape symbolizer to render earthquake locations.2014-02-26T17:58:43+0100Tom Paynehttp://openlayers.github.io/ol3/master/examples/kml-earthquakes.html#2014-02-26T17:58:43+0100Timezones in KMLKML, vector, styleDemonstrates rendering timezones from KML.2014-02-26T17:58:43+0100Tom Paynehttp://openlayers.github.io/ol3/master/examples/kml-timezones.html#2014-02-26T17:58:43+0100KML exampleKMLExample of using the KML source.2014-02-26T17:58:43+0100Tom Paynehttp://openlayers.github.io/ol3/master/examples/kml.html#2014-02-26T17:58:43+0100Layer clipping exampleclipping, openstreetmapLayer clipping example.2014-02-26T17:58:43+0100Tom Paynehttp://openlayers.github.io/ol3/master/examples/layer-clipping.html#2014-02-26T17:58:43+0100Layer group exampletilejson, input, bind, group, layergroupExample of a map with layer group.2014-02-26T17:58:43+0100Tom Paynehttp://openlayers.github.io/ol3/master/examples/layer-group.html#2014-02-26T17:58:43+0100Layer spy examplespy, image manipulationView a portion of one layer over another2014-02-26T17:58:43+0100Tom Paynehttp://openlayers.github.io/ol3/master/examples/layer-spy.html#2014-02-26T17:58:43+0100Layer Swipe exampleswipe, openstreetmapExample of a Layer swipe map.2014-02-26T17:58:43+0100Tom Paynehttp://openlayers.github.io/ol3/master/examples/layer-swipe.html#2014-02-26T17:58:43+0100Localized OpenStreetMap examplecors, localized-openstreetmap, openseamap, openstreetmapExample of a localized OpenStreetMap map with a custom tile server and a custom attribution. The base layer is <a href="http://www.opencyclemap.org/">OpenCycleMap</a> with an overlay from <a href="http://www.openseamap.org/">OpenSeaMap</a>. The OpenSeaMap tile server does not support <a href="http://enable-cors.org/">CORS</a> headers.2014-02-26T17:58:43+0100Tom Paynehttp://openlayers.github.io/ol3/master/examples/localized-openstreetmap.html#2014-02-26T17:58:43+0100MapGuide untiled examplemapguideExample of a untiled MapGuide map.2014-02-26T17:58:43+0100Tom Paynehttp://openlayers.github.io/ol3/master/examples/mapguide-untiled.html#2014-02-26T17:58:43+0100MapQuest examplemapquestExample of a MapQuest map.2014-02-26T17:58:43+0100Tom Paynehttp://openlayers.github.io/ol3/master/examples/mapquest.html#2014-02-26T17:58:43+0100Mouse position examplemouse-position, openstreetmapExample of a mouse position control, outside the map.2014-02-26T17:58:43+0100Tom Paynehttp://openlayers.github.io/ol3/master/examples/mouse-position.html#2014-02-26T17:58:43+0100Move end examplemoveend, map, eventUse of the moveend event.2014-02-26T17:58:43+0100Tom Paynehttp://openlayers.github.io/ol3/master/examples/moveend.html#2014-02-26T17:58:43+0100Navigation controls examplecontrol, navigation, extentShows how to add navigation controls.2014-02-26T17:58:43+0100Tom Paynehttp://openlayers.github.io/ol3/master/examples/navigation-controls.html#2014-02-26T17:58:43+0100Overlay exampleoverlay, popup, bootstrap, popover, mapquest, openaerialDemonstrates overlays.2014-02-26T17:58:43+0100Tom Paynehttp://openlayers.github.io/ol3/master/examples/overlay.html#2014-02-26T17:58:43+0100Popup exampleoverlay, popup, mapquest, openaerialUses an overlay to create a popup.2014-02-26T17:58:43+0100Tom Paynehttp://openlayers.github.io/ol3/master/examples/popup.html#2014-02-26T17:58:43+0100Preload examplepreload, bingExample of tile preloading.2014-02-26T17:58:43+0100Tom Paynehttp://openlayers.github.io/ol3/master/examples/preload.html#2014-02-26T17:58:43+0100Rotation examplerotation, openstreetmapExample of a rotated map.2014-02-26T17:58:43+0100Tom Paynehttp://openlayers.github.io/ol3/master/examples/rotation.html#2014-02-26T17:58:43+0100Scale line examplescale-line, openstreetmapExample of a scale line.2014-02-26T17:58:43+0100Tom Paynehttp://openlayers.github.io/ol3/master/examples/scale-line.html#2014-02-26T17:58:43+0100Select features exampleselect, vectorExample of using the Select interaction. Select features by clicking polygons. Hold the Shift-key to add to the selection.2014-02-26T17:58:43+0100Tom Paynehttp://openlayers.github.io/ol3/master/examples/select-features.html#2014-02-26T17:58:43+0100Semi-transparent layer exampletransparent, mapquest, tilejsonExample of a map with a semi-transparent layer.2014-02-26T17:58:43+0100Tom Paynehttp://openlayers.github.io/ol3/master/examples/semi-transparent-layer.html#2014-02-26T17:58:43+0100Side-by-side exampleside-by-side, canvas, webgl, dom, canvas, sync, objectThe three maps, one WebGL, one Canvas, one DOM, share the same center, resolution, rotation and layers.2014-02-26T17:58:43+0100Tom Paynehttp://openlayers.github.io/ol3/master/examples/side-by-side.html#2014-02-26T17:58:43+0100Simple examplesimple, openstreetmapExample of a simple map.2014-02-26T17:58:43+0100Tom Paynehttp://openlayers.github.io/ol3/master/examples/simple.html#2014-02-26T17:58:43+0100Stamen examplestamen, watercolor, terrain-labels, two-layersExample of a Stamen tile source. Two layers are composed: the watercolor base layer with the terrain labels.2014-02-26T17:58:43+0100Tom Paynehttp://openlayers.github.io/ol3/master/examples/stamen.html#2014-02-26T17:58:43+0100Static image examplestatic image, xkcdExample of a static image layer. Source: <a href="http://xkcd.com/256/">xkcd.com/256/</a>2014-02-26T17:58:43+0100Tom Paynehttp://openlayers.github.io/ol3/master/examples/static-image.html#2014-02-26T17:58:43+0100Teleport exampleteleport, openstreetmapExample of moving a map from one target to another.2014-02-26T17:58:43+0100Tom Paynehttp://openlayers.github.io/ol3/master/examples/teleport.html#2014-02-26T17:58:43+0100TileJSON exampletilejsonExample of a TileJSON layer.2014-02-26T17:58:43+0100Tom Paynehttp://openlayers.github.io/ol3/master/examples/tilejson.html#2014-02-26T17:58:43+0100TopoJSON examplevector, topojson, styleDemonstrates rendering of features from a TopoJSON topology.2014-02-26T17:58:43+0100Tom Paynehttp://openlayers.github.io/ol3/master/examples/topojson.html#2014-02-26T17:58:43+0100Vector layer examplevector, geojson, style, feature overlayExample of a countries vector layer with country information on hover and country labels at higher zoom levels.2014-02-26T17:58:43+0100Tom Paynehttp://openlayers.github.io/ol3/master/examples/vector-layer.html#2014-02-26T17:58:43+0100WMS GetCapabilities parsing examplewms, capabilities, getcapabilitiesExample of parsing a WMS GetCapabilities response.2014-02-26T17:58:43+0100Tom Paynehttp://openlayers.github.io/ol3/master/examples/wms-capabilities.html#2014-02-26T17:58:43+0100Tiled WMS with Proj4js projection examplewms, tile, tilelayer, proj4js, projectionExample of two tiled WMS layers (Pixelmap 1:1'000'000 and national parks) using the projection EPSG:21781.2014-02-26T17:58:43+0100Tom Paynehttp://openlayers.github.io/ol3/master/examples/wms-custom-proj.html#2014-02-26T17:58:43+0100Single image WMS with custom projection examplewms, single image, projectionExample of two single image WMS layers.2014-02-26T17:58:43+0100Tom Paynehttp://openlayers.github.io/ol3/master/examples/wms-image-custom-proj.html#2014-02-26T17:58:43+0100Single image WMS examplewms, imageExample of a single image WMS layer.2014-02-26T17:58:43+0100Tom Paynehttp://openlayers.github.io/ol3/master/examples/wms-image.html#2014-02-26T17:58:43+0100WMS without client projection examplewms, projectionExample of two WMS layers using the projection EPSG:21781, which is unknown to the client.2014-02-26T17:58:43+0100Tom Paynehttp://openlayers.github.io/ol3/master/examples/wms-no-proj.html#2014-02-26T17:58:43+0100Tiled WMS examplewms, tile, tilelayerExample of a tiled WMS layer.2014-02-26T17:58:43+0100Tom Paynehttp://openlayers.github.io/ol3/master/examples/wms-tiled.html#2014-02-26T17:58:43+0100WMTS examplewmtsExample of a WMTS source.2014-02-26T17:58:43+0100Tom Paynehttp://openlayers.github.io/ol3/master/examples/wmts.html#2014-02-26T17:58:43+0100XYZ Esri examplexyz, esriExample of a XYZ source using Esri tiles.2014-02-26T17:58:43+0100Tom Paynehttp://openlayers.github.io/ol3/master/examples/xyz-esri.html#2014-02-26T17:58:43+0100Zoomify examplezoomifyExample of a Zoomify source.2014-02-26T17:58:43+0100Tom Paynehttp://openlayers.github.io/ol3/master/examples/zoomify.html#2014-02-26T17:58:43+0100ZoomSlider controlzoom, zoomslider, slider, style, styling, css, controlExample of various ZoomSlider controls.2014-02-26T17:58:43+0100Tom Paynehttp://openlayers.github.io/ol3/master/examples/zoomslider.html#2014-02-26T17:58:43+0100Full screen control examplefull-screen, bing, bing-mapsExample of a full screen control.2014-02-26T15:18:14+0100Frederic Junodhttp://openlayers.github.io/ol3/master/examples/full-screen.html#2014-02-26T15:18:14+0100d3 integration exampled3Example of using ol3 and d3 together.2014-02-21T18:45:46-0700Tim Schaubhttp://openlayers.github.io/ol3/master/examples/d3.html#2014-02-21T18:45:46-0700Layer WebGL clipping exampleclipping, webgl, openstreetmapLayer WebGL clipping example.2014-02-21T18:45:46-0700Tim Schaubhttp://openlayers.github.io/ol3/master/examples/layer-clipping-webgl.html#2014-02-21T18:45:46-0700Min/max resolution exampleminResolution, maxResolution, resolutionShow/hide layers depending on current view resolution.2014-02-21T18:45:46-0700Tim Schaubhttp://openlayers.github.io/ol3/master/examples/min-max-resolution.html#2014-02-21T18:45:46-0700R-Tree examplevector, rtreeR-Tree example. Please note that this example only works locally, it does not work when the examples are hosted. This is because it accesses internals the R-Tree data structure, which are not exported in the API.2014-02-21T18:45:46-0700Tim Schaubhttp://openlayers.github.io/ol3/master/examples/rtree.html#2014-02-21T18:45:46-0700Synthetic lines examplevectorSynthetic lines example.2014-02-21T18:45:46-0700Tim Schaubhttp://openlayers.github.io/ol3/master/examples/synthetic-lines.html#2014-02-21T18:45:46-0700Synthetic points examplevectorSynthetic points example.2014-02-21T18:45:46-0700Tim Schaubhttp://openlayers.github.io/ol3/master/examples/synthetic-points.html#2014-02-21T18:45:46-0700Fractal Examplefractal, vectorExample of a fractal.2014-02-21T17:48:17-0700Tim Schaubhttp://openlayers.github.io/ol3/master/examples/fractal.html#2014-02-21T17:48:17-0700Earthquakes heatmapheatmap, kml, vector, styleDemonstrates the use of a heatmap layer.2014-02-19T12:06:13+0100Frederic Junodhttp://openlayers.github.io/ol3/master/examples/heatmap-earthquakes.html#2014-02-19T12:06:13+0100Mobile full screen examplefullscreen, bing, geolocation, mobileExample of a full screen map.2014-02-13T16:50:49+0100Antoine Abthttp://openlayers.github.io/ol3/master/examples/mobile-full-screen.html#2014-02-13T16:50:49+0100OSM XML examplevector, osm, xmlExample of using the OSM XML source.2014-01-20T17:16:03+0100Frederic Junodhttp://openlayers.github.io/ol3/master/examples/vector-osm.html#2014-01-20T17:16:03+0100 \ No newline at end of file diff --git a/float-no-zero/examples/export-map-require.js b/float-no-zero/examples/export-map-require.js new file mode 100644 index 0000000000..b59a219231 --- /dev/null +++ b/float-no-zero/examples/export-map-require.js @@ -0,0 +1,4 @@ +goog.require('ol.Map'); +goog.require('ol.View2D'); +goog.require('ol.layer.Tile'); +goog.require('ol.source.OSM'); diff --git a/float-no-zero/examples/export-map.html b/float-no-zero/examples/export-map.html new file mode 100644 index 0000000000..8a89927510 --- /dev/null +++ b/float-no-zero/examples/export-map.html @@ -0,0 +1,56 @@ + + + + + + + + + + + Export map example + + + + + +
+ +
+
+
+ + Export PNG +
+
+ +
+ +
+

Export map example

+

Example of exporting a map as a PNG image.

+
+

See the export-map.js source to see how this is done.

+
+
export, png, openstreetmap
+
+ +
+ +
+ + + + + + + diff --git a/float-no-zero/examples/export-map.js b/float-no-zero/examples/export-map.js new file mode 100644 index 0000000000..d8adbdd320 --- /dev/null +++ b/float-no-zero/examples/export-map.js @@ -0,0 +1,31 @@ +var map = new ol.Map({ + layers: [ + new ol.layer.Tile({ + source: new ol.source.OSM() + }) + ], + renderer: 'canvas', + target: 'map', + view: new ol.View2D({ + center: [0, 0], + zoom: 2 + }) +}); + +var exportPNGElement = document.getElementById('export-png'); + +if ('download' in exportPNGElement) { + exportPNGElement.addEventListener('click', function(e) { + map.once('postcompose', function(event) { + var canvas = event.context.canvas; + exportPNGElement.href = canvas.toDataURL('image/png'); + }); + map.render(); + }, false); +} else { + var info = document.getElementById('no-download'); + /** + * display error message + */ + info.style.display = ''; +} diff --git a/float-no-zero/examples/fractal-require.js b/float-no-zero/examples/fractal-require.js new file mode 100644 index 0000000000..562724110e --- /dev/null +++ b/float-no-zero/examples/fractal-require.js @@ -0,0 +1,6 @@ +goog.require('ol.Feature'); +goog.require('ol.Map'); +goog.require('ol.View2D'); +goog.require('ol.geom.LineString'); +goog.require('ol.layer.Vector'); +goog.require('ol.source.Vector'); diff --git a/float-no-zero/examples/fractal.html b/float-no-zero/examples/fractal.html new file mode 100644 index 0000000000..b576c4d94b --- /dev/null +++ b/float-no-zero/examples/fractal.html @@ -0,0 +1,64 @@ + + + + + + + + + + + Fractal Example + + + + + + +
+ +
+
+
+
+
+ +
+ +
+

Fractal Example

+

Example of a fractal.

+ +
+

See the fractal.js source to see how this is done.

+
+
fractal, vector
+
+ +
+ +
+ + + + + + + diff --git a/float-no-zero/examples/fractal.js b/float-no-zero/examples/fractal.js new file mode 100644 index 0000000000..7896625941 --- /dev/null +++ b/float-no-zero/examples/fractal.js @@ -0,0 +1,118 @@ +var radius = 10e6; +var cos30 = Math.cos(Math.PI / 6); +var sin30 = Math.sin(Math.PI / 6); +var rise = radius * sin30; +var run = radius * cos30; + +var triangle = new ol.geom.LineString([ + [0, radius], [run, -rise], [-run, -rise], [0, radius] +]); + +var feature = new ol.Feature(triangle); + +var layer = new ol.layer.Vector({ + source: new ol.source.Vector({ + features: [feature] + }) +}); + +var map = new ol.Map({ + layers: [layer], + renderer: 'canvas', + target: 'map', + view: new ol.View2D({ + center: [0, 0], + zoom: 1 + }) +}); + +function makeFractal(depth) { + var geometry = /** @type {ol.geom.LineString} */ (triangle.clone()); + var graph = coordsToGraph(geometry.getCoordinates()); + for (var i = 0; i < depth; ++i) { + var node = graph; + while (node.next) { + var next = node.next; + injectNodes(node); + node = next; + } + } + var coordinates = graphToCoords(graph); + document.getElementById('count').innerHTML = coordinates.length; + geometry.setCoordinates(coordinates); + feature.setGeometry(geometry); +} + +function injectNodes(startNode) { + var endNode = startNode.next; + + var start = startNode.point; + var end = startNode.next.point; + var dx = end[0] - start[0]; + var dy = end[1] - start[1]; + + // first point at 1/3 along the segment + var firstNode = { + point: [start[0] + dx / 3, start[1] + dy / 3] + }; + + // second point at peak of _/\_ + var r = Math.sqrt(dx * dx + dy * dy) / (2 * cos30); + var a = Math.atan2(dy, dx) + Math.PI / 6; + var secondNode = { + point: [start[0] + r * Math.cos(a), start[1] + r * Math.sin(a)] + }; + + // third point at 2/3 along the segment + var thirdNode = { + point: [end[0] - dx / 3, end[1] - dy / 3] + }; + + startNode.next = firstNode; + firstNode.next = secondNode; + secondNode.next = thirdNode; + thirdNode.next = endNode; +} + + +function coordsToGraph(coordinates) { + var graph = { + point: coordinates[0] + }; + var length = coordinates.length; + for (var level = 0, node = graph; level < length - 1; ++level) { + node.next = { + point: coordinates[level + 1] + }; + node = node.next; + } + return graph; +} + +function graphToCoords(graph) { + var coordinates = [graph.point]; + for (var node = graph, i = 1; node.next; node = node.next, ++i) { + coordinates[i] = node.next.point; + } + return coordinates; +} + +var depthInput = document.getElementById('depth'); + +function update() { + makeFractal(Number(depthInput.value)); +} + +var updateTimer; + + +/** + * Regenerate fractal on depth change. Change events are debounced so updates + * only occur every 200ms. + */ +depthInput.onchange = function() { + window.clearTimeout(updateTimer); + updateTimer = window.setTimeout(update, 200); +}; + +update(); diff --git a/float-no-zero/examples/full-screen-drag-rotate-and-zoom-require.js b/float-no-zero/examples/full-screen-drag-rotate-and-zoom-require.js new file mode 100644 index 0000000000..bddc0a4eba --- /dev/null +++ b/float-no-zero/examples/full-screen-drag-rotate-and-zoom-require.js @@ -0,0 +1,8 @@ +goog.require('ol.Map'); +goog.require('ol.View2D'); +goog.require('ol.control'); +goog.require('ol.control.FullScreen'); +goog.require('ol.interaction'); +goog.require('ol.interaction.DragRotateAndZoom'); +goog.require('ol.layer.Tile'); +goog.require('ol.source.BingMaps'); diff --git a/float-no-zero/examples/full-screen-drag-rotate-and-zoom.html b/float-no-zero/examples/full-screen-drag-rotate-and-zoom.html new file mode 100644 index 0000000000..0ec6518aa7 --- /dev/null +++ b/float-no-zero/examples/full-screen-drag-rotate-and-zoom.html @@ -0,0 +1,64 @@ + + + + + + + + + + + + Full screen drag rotate and zoom example + + + + + +
+ +
+
+
+
+
+ +
+ +
+

Full screen drag rotate and zoom example

+

Example of drag rotate and zoom control with full screen effect.

+
+

Hold down Shift + drag to rotate and zoom. Click the button in the top right corner to go full screen. Then do the Shift + drag thing again.

+

If there is no button on the map, your browser does not support the Full Screen API.

+

See the full-screen-drag-rotate-and-zoom.js source to see how this is done.

+
+
full-screen, drag, rotate, zoom, bing, bing-maps
+
+ +
+ +
+ + + + + + + diff --git a/float-no-zero/examples/full-screen-drag-rotate-and-zoom.js b/float-no-zero/examples/full-screen-drag-rotate-and-zoom.js new file mode 100644 index 0000000000..ab2d9aa0e5 --- /dev/null +++ b/float-no-zero/examples/full-screen-drag-rotate-and-zoom.js @@ -0,0 +1,24 @@ +var map = new ol.Map({ + controls: ol.control.defaults().extend([ + new ol.control.FullScreen() + ]), + interactions: ol.interaction.defaults().extend([ + new ol.interaction.DragRotateAndZoom() + ]), + layers: [ + new ol.layer.Tile({ + source: new ol.source.BingMaps({ + key: 'Ak-dzM4wZjSqTlzveKz5u0d4IQ4bRzVI309GxmkgSVr1ewS6iPSrOvOKhA-CJlm3', + imagerySet: 'Aerial' + }) + }) + ], + // Use the canvas renderer because it's currently the fastest + renderer: 'canvas', + target: 'map', + view: new ol.View2D({ + center: [-33519607, 5616436], + rotation: -Math.PI / 8, + zoom: 8 + }) +}); diff --git a/float-no-zero/examples/full-screen-require.js b/float-no-zero/examples/full-screen-require.js new file mode 100644 index 0000000000..f7ed70ab7b --- /dev/null +++ b/float-no-zero/examples/full-screen-require.js @@ -0,0 +1,6 @@ +goog.require('ol.Map'); +goog.require('ol.View2D'); +goog.require('ol.control'); +goog.require('ol.control.FullScreen'); +goog.require('ol.layer.Tile'); +goog.require('ol.source.BingMaps'); diff --git a/float-no-zero/examples/full-screen.html b/float-no-zero/examples/full-screen.html new file mode 100644 index 0000000000..a1cf2a3c38 --- /dev/null +++ b/float-no-zero/examples/full-screen.html @@ -0,0 +1,67 @@ + + + + + + + + + + + + Full screen control example + + + + + +
+ +
+
+
+
+
+ +
+ +
+

Full screen control example

+

Example of a full screen control.

+
+

Click the control in the top right corner to go full screen. Click it again to exit full screen.

+

If there is no button on the map, your browser does not support the Full Screen API.

+

See the full-screen.js source to see how this is done.

+
+
full-screen, bing, bing-maps
+
+ +
+ +
+ + + + + + + diff --git a/float-no-zero/examples/full-screen.js b/float-no-zero/examples/full-screen.js new file mode 100644 index 0000000000..f86b2a63d6 --- /dev/null +++ b/float-no-zero/examples/full-screen.js @@ -0,0 +1,21 @@ +var view = new ol.View2D({ + center: [-9101767, 2822912], + zoom: 14 +}); + +var map = new ol.Map({ + controls: ol.control.defaults().extend([ + new ol.control.FullScreen() + ]), + layers: [ + new ol.layer.Tile({ + source: new ol.source.BingMaps({ + key: 'Ak-dzM4wZjSqTlzveKz5u0d4IQ4bRzVI309GxmkgSVr1ewS6iPSrOvOKhA-CJlm3', + imagerySet: 'Aerial' + }) + }) + ], + renderer: exampleNS.getRendererFromQueryString(), + target: 'map', + view: view +}); diff --git a/float-no-zero/examples/geojson-require.js b/float-no-zero/examples/geojson-require.js new file mode 100644 index 0000000000..9b107f338a --- /dev/null +++ b/float-no-zero/examples/geojson-require.js @@ -0,0 +1,12 @@ +goog.require('ol.Feature'); +goog.require('ol.Map'); +goog.require('ol.View2D'); +goog.require('ol.geom.Circle'); +goog.require('ol.layer.Tile'); +goog.require('ol.layer.Vector'); +goog.require('ol.source.GeoJSON'); +goog.require('ol.source.OSM'); +goog.require('ol.style.Circle'); +goog.require('ol.style.Fill'); +goog.require('ol.style.Stroke'); +goog.require('ol.style.Style'); diff --git a/float-no-zero/examples/geojson.html b/float-no-zero/examples/geojson.html new file mode 100644 index 0000000000..c44be2a2bb --- /dev/null +++ b/float-no-zero/examples/geojson.html @@ -0,0 +1,51 @@ + + + + + + + + + + + GeoJSON example + + + + + +
+ +
+
+
+
+
+ +
+ +
+

GeoJSON example

+

Example of GeoJSON features.

+
+

See the geojson.js source to see how this is done.

+
+
geojson, vector, openstreetmap
+
+ +
+ +
+ + + + + + + diff --git a/float-no-zero/examples/geojson.js b/float-no-zero/examples/geojson.js new file mode 100644 index 0000000000..c77722b93d --- /dev/null +++ b/float-no-zero/examples/geojson.js @@ -0,0 +1,182 @@ +var image = new ol.style.Circle({ + radius: 5, + fill: null, + stroke: new ol.style.Stroke({color: 'red', width: 1}) +}); + +var styles = { + 'Point': [new ol.style.Style({ + image: image + })], + 'LineString': [new ol.style.Style({ + stroke: new ol.style.Stroke({ + color: 'green', + width: 1 + }) + })], + 'MultiLineString': [new ol.style.Style({ + stroke: new ol.style.Stroke({ + color: 'green', + width: 1 + }) + })], + 'MultiPoint': [new ol.style.Style({ + image: image + })], + 'MultiPolygon': [new ol.style.Style({ + stroke: new ol.style.Stroke({ + color: 'yellow', + width: 1 + }), + fill: new ol.style.Fill({ + color: 'rgba(255, 255, 0, 0.1)' + }) + })], + 'Polygon': [new ol.style.Style({ + stroke: new ol.style.Stroke({ + color: 'blue', + lineDash: [4], + width: 3 + }), + fill: new ol.style.Fill({ + color: 'rgba(0, 0, 255, 0.1)' + }) + })], + 'GeometryCollection': [new ol.style.Style({ + stroke: new ol.style.Stroke({ + color: 'magenta', + width: 2 + }), + fill: new ol.style.Fill({ + color: 'magenta' + }), + image: new ol.style.Circle({ + radius: 10, + fill: null, + stroke: new ol.style.Stroke({ + color: 'magenta' + }) + }) + })], + 'Circle': [new ol.style.Style({ + stroke: new ol.style.Stroke({ + color: 'red', + width: 2 + }), + fill: new ol.style.Fill({ + color: 'rgba(255,0,0,0.2)' + }) + })] +}; + +var styleFunction = function(feature, resolution) { + return styles[feature.getGeometry().getType()]; +}; + +var vectorSource = new ol.source.GeoJSON( + /** @type {olx.source.GeoJSONOptions} */ ({ + object: { + 'type': 'FeatureCollection', + 'crs': { + 'type': 'name', + 'properties': { + 'name': 'EPSG:3857' + } + }, + 'features': [ + { + 'type': 'Feature', + 'geometry': { + 'type': 'Point', + 'coordinates': [0, 0] + } + }, + { + 'type': 'Feature', + 'geometry': { + 'type': 'LineString', + 'coordinates': [[4e6, -2e6], [8e6, 2e6]] + } + }, + { + 'type': 'Feature', + 'geometry': { + 'type': 'LineString', + 'coordinates': [[4e6, 2e6], [8e6, -2e6]] + } + }, + { + 'type': 'Feature', + 'geometry': { + 'type': 'Polygon', + 'coordinates': [[[-5e6, -1e6], [-4e6, 1e6], [-3e6, -1e6]]] + } + }, + { + 'type': 'Feature', + 'geometry': { + 'type': 'MultiLineString', + 'coordinates': [ + [[-1e6, -7.5e5], [-1e6, 7.5e5]], + [[1e6, -7.5e5], [1e6, 7.5e5]], + [[-7.5e5, -1e6], [7.5e5, -1e6]], + [[-7.5e5, 1e6], [7.5e5, 1e6]] + ] + } + }, + { + 'type': 'Feature', + 'geometry': { + 'type': 'MultiPolygon', + 'coordinates': [ + [[[-5e6, 6e6], [-5e6, 8e6], [-3e6, 8e6], [-3e6, 6e6]]], + [[[-2e6, 6e6], [-2e6, 8e6], [0e6, 8e6], [0e6, 6e6]]], + [[[1e6, 6e6], [1e6, 8e6], [3e6, 8e6], [3e6, 6e6]]] + ] + } + }, + { + 'type': 'Feature', + 'geometry': { + 'type': 'GeometryCollection', + 'geometries': [ + { + 'type': 'LineString', + 'coordinates': [[-5e6, -5e6], [0e6, -5e6]] + }, + { + 'type': 'Point', + 'coordinates': [4e6, -5e6] + }, + { + 'type': 'Polygon', + 'coordinates': [[[1e6, -6e6], [2e6, -4e6], [3e6, -6e6]]] + } + ] + } + } + ] + } + })); + +vectorSource.addFeature(new ol.Feature(new ol.geom.Circle([5e6, 7e6], 1e6))); + +var vectorLayer = new ol.layer.Vector({ + source: vectorSource, + style: styleFunction +}); + +var map = new ol.Map({ + layers: [ + new ol.layer.Tile({ + source: new ol.source.OSM() + }), + vectorLayer + ], + renderer: 'canvas', + target: 'map', + view: new ol.View2D({ + center: [0, 0], + zoom: 2 + }) +}); diff --git a/float-no-zero/examples/geolocation-require.js b/float-no-zero/examples/geolocation-require.js new file mode 100644 index 0000000000..52f472a0e6 --- /dev/null +++ b/float-no-zero/examples/geolocation-require.js @@ -0,0 +1,7 @@ +goog.require('ol.Geolocation'); +goog.require('ol.Map'); +goog.require('ol.Overlay'); +goog.require('ol.View2D'); +goog.require('ol.dom.Input'); +goog.require('ol.layer.Tile'); +goog.require('ol.source.OSM'); diff --git a/float-no-zero/examples/geolocation.html b/float-no-zero/examples/geolocation.html new file mode 100644 index 0000000000..8b5ec77a5d --- /dev/null +++ b/float-no-zero/examples/geolocation.html @@ -0,0 +1,71 @@ + + + + + + + + + + + + Geolocation example + + + + + +
+ +
+
+
+
+
+ +
+ +
+

Geolocation example

+ +

position accuracy :

+

altitude :

+

altitude accuracy :

+

heading :

+

speed :

+ +

Example of a geolocation map.

+
+

See the geolocation.js source to see how this is done.

+
+
geolocation, openstreetmap
+
+
+ +
+ +
+ + + + + + + + diff --git a/float-no-zero/examples/geolocation.js b/float-no-zero/examples/geolocation.js new file mode 100644 index 0000000000..0aa150414a --- /dev/null +++ b/float-no-zero/examples/geolocation.js @@ -0,0 +1,49 @@ +var view = new ol.View2D({ + center: [0, 0], + zoom: 2 +}); + +var map = new ol.Map({ + layers: [ + new ol.layer.Tile({ + source: new ol.source.OSM() + }) + ], + renderer: exampleNS.getRendererFromQueryString(), + target: 'map', + view: view +}); + +var geolocation = new ol.Geolocation(); +geolocation.bindTo('projection', view); + +var track = new ol.dom.Input(document.getElementById('track')); +track.bindTo('checked', geolocation, 'tracking'); + +geolocation.on('propertychange', function() { + $('#accuracy').text(geolocation.getAccuracy() + ' [m]'); + $('#altitude').text(geolocation.getAltitude() + ' [m]'); + $('#altitudeAccuracy').text(geolocation.getAltitudeAccuracy() + ' [m]'); + $('#heading').text(geolocation.getHeading() + ' [rad]'); + $('#speed').text(geolocation.getSpeed() + ' [m/s]'); +}); + +var marker = new ol.Overlay({ + element: /** @type {Element} */ ($('').addClass('icon-flag').get(0)), + positioning: 'bottom-left', + stopEvent: false +}); +map.addOverlay(marker); +// bind the marker position to the device location. +marker.bindTo('position', geolocation); + +geolocation.on('change:accuracy', function() { + $(marker.getElement()).tooltip({ + title: this.getAccuracy() + 'm from this point' + }); +}); +geolocation.on('error', function(error) { + var info = document.getElementById('info'); + info.innerHTML = error.message; + info.style.display = ''; +}); diff --git a/float-no-zero/examples/getfeatureinfo-require.js b/float-no-zero/examples/getfeatureinfo-require.js new file mode 100644 index 0000000000..3fc2530e20 --- /dev/null +++ b/float-no-zero/examples/getfeatureinfo-require.js @@ -0,0 +1,4 @@ +goog.require('ol.Map'); +goog.require('ol.View2D'); +goog.require('ol.layer.Tile'); +goog.require('ol.source.TileWMS'); diff --git a/float-no-zero/examples/getfeatureinfo.html b/float-no-zero/examples/getfeatureinfo.html new file mode 100644 index 0000000000..ce4404151d --- /dev/null +++ b/float-no-zero/examples/getfeatureinfo.html @@ -0,0 +1,57 @@ + + + + + + + + + + + + Get feature info example + + + + + +
+ +
+
+
+
+
+ +
+ +
+

GetFeatureInfo example

+

This example shows how to trigger WMS GetFeatureInfo requests on click for a WMS image layer.

+
+

See the getfeatureinfo.js source to see how this is done.

+
+
getfeatureinfo
+
+
+
+   +
+
+ +
+ +
+ + + + + + + diff --git a/float-no-zero/examples/getfeatureinfo.js b/float-no-zero/examples/getfeatureinfo.js new file mode 100644 index 0000000000..6f8eb6d29c --- /dev/null +++ b/float-no-zero/examples/getfeatureinfo.js @@ -0,0 +1,35 @@ +var wmsSource = new ol.source.TileWMS({ + url: 'http://demo.opengeo.org/geoserver/wms', + params: {'LAYERS': 'ne:ne'} +}); + +var wmsLayer = new ol.layer.Tile({ + source: wmsSource +}); + +var view = new ol.View2D({ + center: [0, 0], + zoom: 1 +}); + +var viewProjection = /** @type {ol.proj.Projection} */ + (view.getProjection()); + +var map = new ol.Map({ + layers: [wmsLayer], + renderer: 'canvas', + target: 'map', + view: view +}); + +map.on('singleclick', function(evt) { + document.getElementById('info').innerHTML = ''; + var viewResolution = /** @type {number} */ (view.getResolution()); + var url = wmsSource.getGetFeatureInfoUrl( + evt.coordinate, viewResolution, viewProjection, + {'INFO_FORMAT': 'text/html'}); + if (url) { + document.getElementById('info').innerHTML = + ''; + } +}); diff --git a/float-no-zero/examples/google-map-require.js b/float-no-zero/examples/google-map-require.js new file mode 100644 index 0000000000..2c9694d9c9 --- /dev/null +++ b/float-no-zero/examples/google-map-require.js @@ -0,0 +1,10 @@ +goog.require('ol.Map'); +goog.require('ol.View2D'); +goog.require('ol.interaction'); +goog.require('ol.interaction.DragPan'); +goog.require('ol.layer.Vector'); +goog.require('ol.proj'); +goog.require('ol.source.GeoJSON'); +goog.require('ol.style.Fill'); +goog.require('ol.style.Stroke'); +goog.require('ol.style.Style'); diff --git a/float-no-zero/examples/google-map.html b/float-no-zero/examples/google-map.html new file mode 100644 index 0000000000..fd82495071 --- /dev/null +++ b/float-no-zero/examples/google-map.html @@ -0,0 +1,65 @@ + + + + + + + + + + + + + + Google Maps integration example + + + + + +
+ +
+
+
+
+
+
+
+
+ +
+ +
+

Google Maps integration example

+

Example of a GMaps map with an ol3 map as control, to give users a Google base map with ol3 content on top.

+
+

See the google-map.js source to see how this is done.

+
+
google
+
+ +
+ +
+ + + + + + + diff --git a/float-no-zero/examples/google-map.js b/float-no-zero/examples/google-map.js new file mode 100644 index 0000000000..54d7be6d1b --- /dev/null +++ b/float-no-zero/examples/google-map.js @@ -0,0 +1,51 @@ +var gmap = new google.maps.Map(document.getElementById('gmap'), { + disableDefaultUI: true, + keyboardShortcuts: false, + draggable: false, + disableDoubleClickZoom: true, + scrollwheel: false, + streetViewControl: false +}); + +var view = new ol.View2D(); +view.on('change:center', function() { + var center = ol.proj.transform(view.getCenter(), 'EPSG:3857', 'EPSG:4326'); + gmap.setCenter(new google.maps.LatLng(center[1], center[0])); +}); +view.on('change:resolution', function() { + gmap.setZoom(view.getZoom()); +}); + +var vector = new ol.layer.Vector({ + source: new ol.source.GeoJSON({ + url: 'data/geojson/countries.geojson', + projection: 'EPSG:3857' + }), + style: new ol.style.Style({ + fill: new ol.style.Fill({ + color: 'rgba(255, 255, 255, 0.6)' + }), + stroke: new ol.style.Stroke({ + color: '#319FD3', + width: 1 + }) + }) +}); + +var olMapDiv = document.getElementById('olmap'); +var map = new ol.Map({ + layers: [vector], + interactions: ol.interaction.defaults({ + altShiftDragRotate: false, + dragPan: false, + touchRotate: false + }).extend([new ol.interaction.DragPan({kinetic: false})]), + renderer: 'canvas', + target: olMapDiv, + view: view +}); +view.setCenter([0, 0]); +view.setZoom(1); + +olMapDiv.parentNode.removeChild(olMapDiv); +gmap.controls[google.maps.ControlPosition.TOP_LEFT].push(olMapDiv); diff --git a/float-no-zero/examples/gpx-require.js b/float-no-zero/examples/gpx-require.js new file mode 100644 index 0000000000..8609425fb3 --- /dev/null +++ b/float-no-zero/examples/gpx-require.js @@ -0,0 +1,10 @@ +goog.require('ol.Map'); +goog.require('ol.View2D'); +goog.require('ol.layer.Tile'); +goog.require('ol.layer.Vector'); +goog.require('ol.source.BingMaps'); +goog.require('ol.source.GPX'); +goog.require('ol.style.Circle'); +goog.require('ol.style.Fill'); +goog.require('ol.style.Stroke'); +goog.require('ol.style.Style'); diff --git a/float-no-zero/examples/gpx.html b/float-no-zero/examples/gpx.html new file mode 100644 index 0000000000..decc16d0b1 --- /dev/null +++ b/float-no-zero/examples/gpx.html @@ -0,0 +1,56 @@ + + + + + + + + + + + GPX example + + + + + +
+ +
+
+
+
+
+ +
+ +
+

GPX example

+

Example of using the GPX source.

+
+

See the gpx.js source to see how this is done.

+
+
GPX
+
+
+
+   +
+
+ +
+ +
+ + + + + + + diff --git a/float-no-zero/examples/gpx.js b/float-no-zero/examples/gpx.js new file mode 100644 index 0000000000..a24fa7da69 --- /dev/null +++ b/float-no-zero/examples/gpx.js @@ -0,0 +1,81 @@ +var raster = new ol.layer.Tile({ + source: new ol.source.BingMaps({ + imagerySet: 'Aerial', + key: 'Ak-dzM4wZjSqTlzveKz5u0d4IQ4bRzVI309GxmkgSVr1ewS6iPSrOvOKhA-CJlm3' + }) +}); + +var style = { + 'Point': [new ol.style.Style({ + image: new ol.style.Circle({ + fill: new ol.style.Fill({ + color: 'rgba(255,255,0,0.4)' + }), + radius: 5, + stroke: new ol.style.Stroke({ + color: '#ff0', + width: 1 + }) + }) + })], + 'LineString': [new ol.style.Style({ + stroke: new ol.style.Stroke({ + color: '#f00', + width: 3 + }) + })], + 'MultiLineString': [new ol.style.Style({ + stroke: new ol.style.Stroke({ + color: '#0f0', + width: 3 + }) + })] +}; + +var vector = new ol.layer.Vector({ + source: new ol.source.GPX({ + projection: 'EPSG:3857', + url: 'data/gpx/fells_loop.gpx' + }), + style: function(feature, resolution) { + return style[feature.getGeometry().getType()]; + } +}); + +var map = new ol.Map({ + layers: [raster, vector], + renderer: 'canvas', + target: document.getElementById('map'), + view: new ol.View2D({ + center: [-7916041.528716288, 5228379.045749711], + zoom: 12 + }) +}); + +var displayFeatureInfo = function(pixel) { + var features = []; + map.forEachFeatureAtPixel(pixel, function(feature, layer) { + features.push(feature); + }); + if (features.length > 0) { + var info = []; + var i, ii; + for (i = 0, ii = features.length; i < ii; ++i) { + info.push(features[i].get('desc')); + } + document.getElementById('info').innerHTML = info.join(', ') || '(unknown)'; + map.getTarget().style.cursor = 'pointer'; + } else { + document.getElementById('info').innerHTML = ' '; + map.getTarget().style.cursor = ''; + } +}; + +$(map.getViewport()).on('mousemove', function(evt) { + var pixel = map.getEventPixel(evt.originalEvent); + displayFeatureInfo(pixel); +}); + +map.on('singleclick', function(evt) { + displayFeatureInfo(evt.pixel); +}); diff --git a/float-no-zero/examples/heatmap-earthquakes-require.js b/float-no-zero/examples/heatmap-earthquakes-require.js new file mode 100644 index 0000000000..90f268d5a1 --- /dev/null +++ b/float-no-zero/examples/heatmap-earthquakes-require.js @@ -0,0 +1,6 @@ +goog.require('ol.Map'); +goog.require('ol.View2D'); +goog.require('ol.layer.Heatmap'); +goog.require('ol.layer.Tile'); +goog.require('ol.source.KML'); +goog.require('ol.source.Stamen'); diff --git a/float-no-zero/examples/heatmap-earthquakes.html b/float-no-zero/examples/heatmap-earthquakes.html new file mode 100644 index 0000000000..f65000e383 --- /dev/null +++ b/float-no-zero/examples/heatmap-earthquakes.html @@ -0,0 +1,52 @@ + + + + + + + + + + Earthquakes heatmap + + + + + +
+ +
+
+
+
+
+ +
+ +
+

Earthquakes heatmap

+

Demonstrates the use of a heatmap layer.

+
+

+ This example parses a KML file and renders the features as a ol.layer.Heatmap layer. +

+

See the heatmap-earthquakes.js source to see how this is done.

+
+
heatmap, kml, vector, style
+
+
+ +
+ + + + + + + diff --git a/float-no-zero/examples/heatmap-earthquakes.js b/float-no-zero/examples/heatmap-earthquakes.js new file mode 100644 index 0000000000..6230b91e42 --- /dev/null +++ b/float-no-zero/examples/heatmap-earthquakes.js @@ -0,0 +1,32 @@ +var vector = new ol.layer.Heatmap({ + source: new ol.source.KML({ + projection: 'EPSG:3857', + url: 'data/kml/2012_Earthquakes_Mag5.kml' + }), + radius: 5 +}); + +vector.getSource().on('addfeature', function(event) { + // 2012_Earthquakes_Mag5.kml stores the magnitude of each earthquake in a + // standards-violating tag in each Placemark. We extract it from + // the Placemark's name instead. + var name = event.feature.get('name'); + var magnitude = parseFloat(name.substr(2)); + event.feature.set('weight', magnitude - 5); +}); + +var raster = new ol.layer.Tile({ + source: new ol.source.Stamen({ + layer: 'toner' + }) +}); + +var map = new ol.Map({ + layers: [raster, vector], + renderer: 'canvas', + target: 'map', + view: new ol.View2D({ + center: [0, 0], + zoom: 2 + }) +}); diff --git a/float-no-zero/examples/hue-saturation-require.js b/float-no-zero/examples/hue-saturation-require.js new file mode 100644 index 0000000000..44a855d5ce --- /dev/null +++ b/float-no-zero/examples/hue-saturation-require.js @@ -0,0 +1,6 @@ +goog.require('ol.BrowserFeature'); +goog.require('ol.Map'); +goog.require('ol.View2D'); +goog.require('ol.layer.Tile'); +goog.require('ol.proj'); +goog.require('ol.source.BingMaps'); diff --git a/float-no-zero/examples/hue-saturation.html b/float-no-zero/examples/hue-saturation.html new file mode 100644 index 0000000000..48596561fb --- /dev/null +++ b/float-no-zero/examples/hue-saturation.html @@ -0,0 +1,74 @@ + + + + + + + + + + + Hue/saturation example + + + + + + +
+ +
+
+
+ + + +
+ + + +
+
+ + + +
+
+
+ +
+ +
+

Hue/saturation example

+

Example of hue/saturation control on the client (WebGL only).

+
+

See the hue-saturation.js source to see how this is done.

+
+
hue, saturation, webgl
+
+ +
+ +
+ + + + + + + diff --git a/float-no-zero/examples/hue-saturation.js b/float-no-zero/examples/hue-saturation.js new file mode 100644 index 0000000000..61c0559201 --- /dev/null +++ b/float-no-zero/examples/hue-saturation.js @@ -0,0 +1,71 @@ +function setResetHueButtonHTML() { + resetHue.innerHTML = 'Hue (' + layer.getHue().toFixed(2) + ')'; +} + +function setResetSaturationButtonHTML() { + resetSaturation.innerHTML = 'Saturation (' + + layer.getSaturation().toFixed(2) + ')'; +} + +if (!ol.BrowserFeature.HAS_WEBGL) { + var info = document.getElementById('no-webgl'); + /** + * display error message + */ + info.style.display = ''; +} else { + var layer = new ol.layer.Tile({ + source: new ol.source.BingMaps({ + key: 'Ak-dzM4wZjSqTlzveKz5u0d4IQ4bRzVI309GxmkgSVr1ewS6iPSrOvOKhA-CJlm3', + imagerySet: 'Aerial' + }) + }); + + var map = new ol.Map({ + layers: [layer], + renderer: 'webgl', + target: 'map', + view: new ol.View2D({ + center: ol.proj.transform([-9.375, 51.483333], 'EPSG:4326', 'EPSG:3857'), + zoom: 15 + }) + }); + + var increaseHue = document.getElementById('increase-hue'); + var resetHue = document.getElementById('reset-hue'); + var decreaseHue = document.getElementById('decrease-hue'); + + setResetHueButtonHTML(); + + increaseHue.addEventListener('click', function() { + layer.setHue(layer.getHue() + 0.25); + setResetHueButtonHTML(); + }, false); + resetHue.addEventListener('click', function() { + layer.setHue(0); + setResetHueButtonHTML(); + }, false); + decreaseHue.addEventListener('click', function() { + layer.setHue(layer.getHue() - 0.25); + setResetHueButtonHTML(); + }, false); + + var increaseSaturation = document.getElementById('increase-saturation'); + var resetSaturation = document.getElementById('reset-saturation'); + var decreaseSaturation = document.getElementById('decrease-saturation'); + + setResetSaturationButtonHTML(); + + increaseSaturation.addEventListener('click', function() { + layer.setSaturation(layer.getSaturation() + 0.25); + setResetSaturationButtonHTML(); + }, false); + resetSaturation.addEventListener('click', function() { + layer.setSaturation(1); + setResetSaturationButtonHTML(); + }, false); + decreaseSaturation.addEventListener('click', function() { + layer.setSaturation(Math.max(layer.getSaturation() - 0.25, 0)); + setResetSaturationButtonHTML(); + }, false); +} diff --git a/float-no-zero/examples/icon-require.js b/float-no-zero/examples/icon-require.js new file mode 100644 index 0000000000..247038475b --- /dev/null +++ b/float-no-zero/examples/icon-require.js @@ -0,0 +1,11 @@ +goog.require('ol.Feature'); +goog.require('ol.Map'); +goog.require('ol.Overlay'); +goog.require('ol.View2D'); +goog.require('ol.geom.Point'); +goog.require('ol.layer.Tile'); +goog.require('ol.layer.Vector'); +goog.require('ol.source.TileJSON'); +goog.require('ol.source.Vector'); +goog.require('ol.style.Icon'); +goog.require('ol.style.Style'); diff --git a/float-no-zero/examples/icon.html b/float-no-zero/examples/icon.html new file mode 100644 index 0000000000..b789f8be38 --- /dev/null +++ b/float-no-zero/examples/icon.html @@ -0,0 +1,62 @@ + + + + + + + + + + + Vector Icon Example + + + + + + +
+ +
+
+
+ +
+
+
+ +
+ +
+

Icon example

+

Example using an icon to symbolize a point.

+
+

See the icon.js source to see how this is done.

+
+
vector, style, icon, marker, popup
+
+ +
+ +
+ + + + + + + + diff --git a/float-no-zero/examples/icon.js b/float-no-zero/examples/icon.js new file mode 100644 index 0000000000..36a28b7450 --- /dev/null +++ b/float-no-zero/examples/icon.js @@ -0,0 +1,85 @@ +var iconFeature = new ol.Feature({ + geometry: new ol.geom.Point([0, 0]), + name: 'Null Island', + population: 4000, + rainfall: 500 +}); + +var iconStyle = new ol.style.Style({ + image: new ol.style.Icon(/** @type {olx.style.IconOptions} */ ({ + anchor: [0.5, 46], + anchorXUnits: 'fraction', + anchorYUnits: 'pixels', + opacity: 0.75, + src: 'data/icon.png' + })) +}); + +iconFeature.setStyle(iconStyle); + +var vectorSource = new ol.source.Vector({ + features: [iconFeature] +}); + +var vectorLayer = new ol.layer.Vector({ + source: vectorSource +}); + +var rasterLayer = new ol.layer.Tile({ + source: new ol.source.TileJSON({ + url: 'http://api.tiles.mapbox.com/v3/mapbox.geography-class.jsonp' + }) +}); + +var map = new ol.Map({ + layers: [rasterLayer, vectorLayer], + renderer: 'canvas', + target: document.getElementById('map'), + view: new ol.View2D({ + center: [0, 0], + zoom: 3 + }) +}); + +var element = document.getElementById('popup'); + +var popup = new ol.Overlay({ + element: element, + positioning: 'bottom-center', + stopEvent: false +}); +map.addOverlay(popup); + +// display popup on click +map.on('singleclick', function(evt) { + var feature = map.forEachFeatureAtPixel(evt.pixel, + function(feature, layer) { + return feature; + }); + if (feature) { + var geometry = feature.getGeometry(); + var coord = geometry.getCoordinates(); + popup.setPosition(coord); + $(element).popover({ + 'placement': 'top', + 'html': true, + 'content': feature.get('name') + }); + $(element).popover('show'); + } else { + $(element).popover('destroy'); + } +}); + +// change mouse cursor when over marker +$(map.getViewport()).on('mousemove', function(e) { + var pixel = map.getEventPixel(e.originalEvent); + var hit = map.forEachFeatureAtPixel(pixel, function(feature, layer) { + return true; + }); + if (hit) { + map.getTarget().style.cursor = 'pointer'; + } else { + map.getTarget().style.cursor = ''; + } +}); diff --git a/float-no-zero/examples/igc-require.js b/float-no-zero/examples/igc-require.js new file mode 100644 index 0000000000..7216add6b1 --- /dev/null +++ b/float-no-zero/examples/igc-require.js @@ -0,0 +1,15 @@ +goog.require('ol.Attribution'); +goog.require('ol.Feature'); +goog.require('ol.FeatureOverlay'); +goog.require('ol.Map'); +goog.require('ol.View2D'); +goog.require('ol.geom.LineString'); +goog.require('ol.geom.Point'); +goog.require('ol.layer.Tile'); +goog.require('ol.layer.Vector'); +goog.require('ol.source.IGC'); +goog.require('ol.source.OSM'); +goog.require('ol.style.Circle'); +goog.require('ol.style.Fill'); +goog.require('ol.style.Stroke'); +goog.require('ol.style.Style'); diff --git a/float-no-zero/examples/igc.html b/float-no-zero/examples/igc.html new file mode 100644 index 0000000000..5fd0925a10 --- /dev/null +++ b/float-no-zero/examples/igc.html @@ -0,0 +1,57 @@ + + + + + + + + + + + IGC example + + + + + +
+ +
+
+
+
+
+ +
+ +
+

IGC example

+

Example of tracks recorded from multiple paraglider flights on the same day, read from an IGC file. The five tracks contain a total of 49,707 unique coordinates. Zoom in to see more detail. The background layer is from OpenCycleMap.

+
+

See the igc.js source to see how this is done.

+
+ +
complex-geometry, closest-feature, igc, opencyclemap
+
+
+
+   +
+
+ +
+ +
+ + + + + + + diff --git a/float-no-zero/examples/igc.js b/float-no-zero/examples/igc.js new file mode 100644 index 0000000000..6583c017d4 --- /dev/null +++ b/float-no-zero/examples/igc.js @@ -0,0 +1,169 @@ +var colors = { + 'Clement Latour': 'rgba(0, 0, 255, 0.7)', + 'Damien de Baesnt': 'rgba(0, 215, 255, 0.7)', + 'Sylvain Dhonneur': 'rgba(0, 165, 255, 0.7)', + 'Tom Payne': 'rgba(0, 255, 255, 0.7)', + 'Ulrich Prinz': 'rgba(0, 215, 255, 0.7)' +}; + +var styleCache = {}; +var styleFunction = function(feature, resolution) { + var color = colors[feature.get('PLT')]; + var styleArray = styleCache[color]; + if (!styleArray) { + styleArray = [new ol.style.Style({ + stroke: new ol.style.Stroke({ + color: color, + width: 3 + }) + })]; + styleCache[color] = styleArray; + } + return styleArray; +}; + +var vectorSource = new ol.source.IGC({ + projection: 'EPSG:3857', + urls: [ + 'data/igc/Clement-Latour.igc', + 'data/igc/Damien-de-Baenst.igc', + 'data/igc/Sylvain-Dhonneur.igc', + 'data/igc/Tom-Payne.igc', + 'data/igc/Ulrich-Prinz.igc' + ] +}); + +var time = { + start: Infinity, + stop: -Infinity, + duration: 0 +}; +vectorSource.on('addfeature', function(event) { + var geometry = event.feature.getGeometry(); + time.start = Math.min(time.start, geometry.getFirstCoordinate()[2]); + time.stop = Math.max(time.stop, geometry.getLastCoordinate()[2]); + time.duration = time.stop - time.start; +}); + + +var map = new ol.Map({ + layers: [ + new ol.layer.Tile({ + source: new ol.source.OSM({ + attributions: [ + new ol.Attribution({ + html: 'All maps © ' + + 'OpenCycleMap' + }), + ol.source.OSM.DATA_ATTRIBUTION + ], + url: 'http://{a-c}.tile.opencyclemap.org/cycle/{z}/{x}/{y}.png' + }) + }), + new ol.layer.Vector({ + source: vectorSource, + style: styleFunction + }) + ], + renderer: 'canvas', + target: 'map', + view: new ol.View2D({ + center: [703365.7089403362, 5714629.865071137], + zoom: 9 + }) +}); + + +var point = null; +var line = null; +var displaySnap = function(coordinate) { + var closestFeature = vectorSource.getClosestFeatureToCoordinate(coordinate); + var info = document.getElementById('info'); + if (closestFeature === null) { + point = null; + line = null; + info.innerHTML = ' '; + } else { + var geometry = closestFeature.getGeometry(); + var closestPoint = geometry.getClosestPoint(coordinate); + if (point === null) { + point = new ol.geom.Point(closestPoint); + } else { + point.setCoordinates(closestPoint); + } + var date = new Date(closestPoint[2] * 1000); + info.innerHTML = + closestFeature.get('PLT') + ' (' + date.toUTCString() + ')'; + var coordinates = [coordinate, [closestPoint[0], closestPoint[1]]]; + if (line === null) { + line = new ol.geom.LineString(coordinates); + } else { + line.setCoordinates(coordinates); + } + } + map.render(); +}; + +$(map.getViewport()).on('mousemove', function(evt) { + var coordinate = map.getEventCoordinate(evt.originalEvent); + displaySnap(coordinate); +}); + +map.on('singleclick', function(evt) { + displaySnap(evt.coordinate); +}); + +var imageStyle = new ol.style.Circle({ + radius: 5, + fill: null, + stroke: new ol.style.Stroke({ + color: 'rgba(255,0,0,0.9)', + width: 1 + }) +}); +var strokeStyle = new ol.style.Stroke({ + color: 'rgba(255,0,0,0.9)', + width: 1 +}); +map.on('postcompose', function(evt) { + var vectorContext = evt.vectorContext; + if (point !== null) { + vectorContext.setImageStyle(imageStyle); + vectorContext.drawPointGeometry(point); + } + if (line !== null) { + vectorContext.setFillStrokeStyle(null, strokeStyle); + vectorContext.drawLineStringGeometry(line); + } +}); + +var featureOverlay = new ol.FeatureOverlay({ + map: map, + style: new ol.style.Style({ + image: new ol.style.Circle({ + radius: 5, + fill: new ol.style.Fill({ + color: 'rgba(255,0,0,0.9)' + }), + stroke: null + }) + }) +}); + +$('#time').on('input', function(event) { + var value = parseInt($(this).val(), 10) / 100; + var m = time.start + (time.duration * value); + vectorSource.forEachFeature(function(feature) { + var geometry = /** @type {ol.geom.LineString} */ (feature.getGeometry()); + var coordinate = geometry.getCoordinateAtM(m, true); + var highlight = feature.get('highlight'); + if (highlight == undefined) { + highlight = new ol.Feature(new ol.geom.Point(coordinate)); + feature.set('highlight', highlight); + featureOverlay.addFeature(highlight); + } else { + highlight.getGeometry().setCoordinates(coordinate); + } + }); + map.render(); +}); diff --git a/float-no-zero/examples/image-filter-require.js b/float-no-zero/examples/image-filter-require.js new file mode 100644 index 0000000000..6ef82a9158 --- /dev/null +++ b/float-no-zero/examples/image-filter-require.js @@ -0,0 +1,5 @@ +goog.require('ol.Map'); +goog.require('ol.View2D'); +goog.require('ol.layer.Tile'); +goog.require('ol.proj'); +goog.require('ol.source.BingMaps'); diff --git a/float-no-zero/examples/image-filter.html b/float-no-zero/examples/image-filter.html new file mode 100644 index 0000000000..64c6e12438 --- /dev/null +++ b/float-no-zero/examples/image-filter.html @@ -0,0 +1,65 @@ + + + + + + + + + + + Image Filter Example + + + + + +
+ +
+
+
+
+
+ +
+ +
+

Image filter example

+

Apply a filter to imagery

+ +
+

+ Layer rendering can be manipulated in precompose and postcompose event listeners. + These listeners get an event with a reference to the Canvas rendering context. + In this example, the postcompose listener applies a filter to the image data. +

+

See the image-filter.js source for details on how this is done.

+
+
filter, image manipulation
+
+ +
+ +
+ + + + + + + diff --git a/float-no-zero/examples/image-filter.js b/float-no-zero/examples/image-filter.js new file mode 100644 index 0000000000..ec43d6ffa8 --- /dev/null +++ b/float-no-zero/examples/image-filter.js @@ -0,0 +1,141 @@ +var key = 'Ak-dzM4wZjSqTlzveKz5u0d4IQ4bRzVI309GxmkgSVr1ewS6iPSrOvOKhA-CJlm3'; + +var imagery = new ol.layer.Tile({ + source: new ol.source.BingMaps({key: key, imagerySet: 'Aerial'}) +}); + +var map = new ol.Map({ + layers: [imagery], + renderer: 'canvas', + target: 'map', + view: new ol.View2D({ + center: ol.proj.transform([-120, 50], 'EPSG:4326', 'EPSG:3857'), + zoom: 6 + }) +}); + +var kernels = { + none: [ + 0, 0, 0, + 0, 1, 0, + 0, 0, 0 + ], + sharpen: [ + 0, -1, 0, + -1, 5, -1, + 0, -1, 0 + ], + sharpenless: [ + 0, -1, 0, + -1, 10, -1, + 0, -1, 0 + ], + blur: [ + 1, 1, 1, + 1, 1, 1, + 1, 1, 1 + ], + shadow: [ + 1, 2, 1, + 0, 1, 0, + -1, -2, -1 + ], + emboss: [ + -2, 1, 0, + -1, 1, 1, + 0, 1, 2 + ], + edge: [ + 0, 1, 0, + 1, -4, 1, + 0, 1, 0 + ] +}; + +function normalize(kernel) { + var len = kernel.length; + var normal = new Array(len); + var i, sum = 0; + for (i = 0; i < len; ++i) { + sum += kernel[i]; + } + if (sum <= 0) { + normal.normalized = false; + sum = 1; + } else { + normal.normalized = true; + } + for (i = 0; i < len; ++i) { + normal[i] = kernel[i] / sum; + } + return normal; +} + +var select = document.getElementById('kernel'); +var selectedKernel = normalize(kernels[select.value]); + + +/** + * Update the kernel and re-render on change. + */ +select.onchange = function() { + selectedKernel = normalize(kernels[select.value]); + map.render(); +}; + + +/** + * Apply a filter on "postcompose" events. + * @param {ol.render.Event} event Render event. + */ +imagery.on('postcompose', function(event) { + convolve(event.context, selectedKernel); +}); + + +/** + * Apply a convolution kernel to canvas. This works for any size kernel, but + * performance starts degrading above 3 x 3. + * @param {CanvasRenderingContext2D} context Canvas 2d context. + * @param {Array.} kernel Kernel. + */ +function convolve(context, kernel) { + var canvas = context.canvas; + var width = canvas.width; + var height = canvas.height; + + var size = Math.sqrt(kernel.length); + var half = Math.floor(size / 2); + + var inputData = context.getImageData(0, 0, width, height).data; + + var output = context.createImageData(width, height); + var outputData = output.data; + + for (var pixelY = 0; pixelY < height; ++pixelY) { + var pixelsAbove = pixelY * width; + for (var pixelX = 0; pixelX < width; ++pixelX) { + var r = 0, g = 0, b = 0, a = 0; + for (var kernelY = 0; kernelY < size; ++kernelY) { + for (var kernelX = 0; kernelX < size; ++kernelX) { + var weight = kernel[kernelY * size + kernelX]; + var neighborY = Math.min( + height - 1, Math.max(0, pixelY + kernelY - half)); + var neighborX = Math.min( + width - 1, Math.max(0, pixelX + kernelX - half)); + var inputIndex = (neighborY * width + neighborX) * 4; + r += inputData[inputIndex] * weight; + g += inputData[inputIndex + 1] * weight; + b += inputData[inputIndex + 2] * weight; + a += inputData[inputIndex + 3] * weight; + } + } + var outputIndex = (pixelsAbove + pixelX) * 4; + outputData[outputIndex] = r; + outputData[outputIndex + 1] = g; + outputData[outputIndex + 2] = b; + outputData[outputIndex + 3] = kernel.normalized ? a : 255; + } + } + context.putImageData(output, 0, 0); +} diff --git a/float-no-zero/examples/image-vector-layer-require.js b/float-no-zero/examples/image-vector-layer-require.js new file mode 100644 index 0000000000..c8f29858f5 --- /dev/null +++ b/float-no-zero/examples/image-vector-layer-require.js @@ -0,0 +1,11 @@ +goog.require('ol.FeatureOverlay'); +goog.require('ol.Map'); +goog.require('ol.View2D'); +goog.require('ol.layer.Image'); +goog.require('ol.layer.Tile'); +goog.require('ol.source.GeoJSON'); +goog.require('ol.source.ImageVector'); +goog.require('ol.source.MapQuest'); +goog.require('ol.style.Fill'); +goog.require('ol.style.Stroke'); +goog.require('ol.style.Style'); diff --git a/float-no-zero/examples/image-vector-layer.html b/float-no-zero/examples/image-vector-layer.html new file mode 100644 index 0000000000..5995d9a630 --- /dev/null +++ b/float-no-zero/examples/image-vector-layer.html @@ -0,0 +1,59 @@ + + + + + + + + + + + Image vector layer example + + + + + +
+ +
+
+
+
+
+ +
+ +
+

Image vector example

+

Example of an image vector layer.

+
+

This example uses a ol.source.ImageVector source. That source gets vector features from the + ol.source.Vector it's configured with, and draw these features to an HTML5 canvas element that + is then used as the image of an image layer.

+

See the image-vector-layer.js source to see how this is done.

+
+
vector, image
+
+
+
+   +
+
+ +
+ +
+ + + + + + + diff --git a/float-no-zero/examples/image-vector-layer.js b/float-no-zero/examples/image-vector-layer.js new file mode 100644 index 0000000000..184c17965f --- /dev/null +++ b/float-no-zero/examples/image-vector-layer.js @@ -0,0 +1,78 @@ +var map = new ol.Map({ + layers: [ + new ol.layer.Tile({ + source: new ol.source.MapQuest({layer: 'sat'}) + }), + new ol.layer.Image({ + source: new ol.source.ImageVector({ + source: new ol.source.GeoJSON({ + projection: 'EPSG:3857', + url: 'data/geojson/countries.geojson' + }), + style: new ol.style.Style({ + fill: new ol.style.Fill({ + color: 'rgba(255, 255, 255, 0.6)' + }), + stroke: new ol.style.Stroke({ + color: '#319FD3', + width: 1 + }) + }) + }) + }) + ], + renderer: 'canvas', + target: 'map', + view: new ol.View2D({ + center: [0, 0], + zoom: 1 + }) +}); + +var featureOverlay = new ol.FeatureOverlay({ + map: map, + style: new ol.style.Style({ + stroke: new ol.style.Stroke({ + color: '#f00', + width: 1 + }), + fill: new ol.style.Fill({ + color: 'rgba(255,0,0,0.1)' + }) + }) +}); + +var highlight; +var displayFeatureInfo = function(pixel) { + + var feature = map.forEachFeatureAtPixel(pixel, function(feature, layer) { + return feature; + }); + + var info = document.getElementById('info'); + if (feature) { + info.innerHTML = feature.getId() + ': ' + feature.get('name'); + } else { + info.innerHTML = ' '; + } + + if (feature !== highlight) { + if (highlight) { + featureOverlay.removeFeature(highlight); + } + if (feature) { + featureOverlay.addFeature(feature); + } + highlight = feature; + } + +}; + +$(map.getViewport()).on('mousemove', function(evt) { + var pixel = map.getEventPixel(evt.originalEvent); + displayFeatureInfo(pixel); +}); + +map.on('singleclick', function(evt) { + displayFeatureInfo(evt.pixel); +}); diff --git a/float-no-zero/examples/index.html b/float-no-zero/examples/index.html new file mode 100644 index 0000000000..696db3930d --- /dev/null +++ b/float-no-zero/examples/index.html @@ -0,0 +1,209 @@ + + + + + + + + + + + + + + + + OpenLayers 3 Examples + + + + + +
+ +
+ +
+
+ +
+
+ +
+ + diff --git a/float-no-zero/examples/jquery.min.js b/float-no-zero/examples/jquery.min.js new file mode 100644 index 0000000000..16ad06c5ac --- /dev/null +++ b/float-no-zero/examples/jquery.min.js @@ -0,0 +1,4 @@ +/*! jQuery v1.7.2 jquery.com | jquery.org/license */ +(function(a,b){function cy(a){return f.isWindow(a)?a:a.nodeType===9?a.defaultView||a.parentWindow:!1}function cu(a){if(!cj[a]){var b=c.body,d=f("<"+a+">").appendTo(b),e=d.css("display");d.remove();if(e==="none"||e===""){ck||(ck=c.createElement("iframe"),ck.frameBorder=ck.width=ck.height=0),b.appendChild(ck);if(!cl||!ck.createElement)cl=(ck.contentWindow||ck.contentDocument).document,cl.write((f.support.boxModel?"":"")+""),cl.close();d=cl.createElement(a),cl.body.appendChild(d),e=f.css(d,"display"),b.removeChild(ck)}cj[a]=e}return cj[a]}function ct(a,b){var c={};f.each(cp.concat.apply([],cp.slice(0,b)),function(){c[this]=a});return c}function cs(){cq=b}function cr(){setTimeout(cs,0);return cq=f.now()}function ci(){try{return new a.ActiveXObject("Microsoft.XMLHTTP")}catch(b){}}function ch(){try{return new a.XMLHttpRequest}catch(b){}}function cb(a,c){a.dataFilter&&(c=a.dataFilter(c,a.dataType));var d=a.dataTypes,e={},g,h,i=d.length,j,k=d[0],l,m,n,o,p;for(g=1;g0){if(c!=="border")for(;e=0===c})}function S(a){return!a||!a.parentNode||a.parentNode.nodeType===11}function K(){return!0}function J(){return!1}function n(a,b,c){var d=b+"defer",e=b+"queue",g=b+"mark",h=f._data(a,d);h&&(c==="queue"||!f._data(a,e))&&(c==="mark"||!f._data(a,g))&&setTimeout(function(){!f._data(a,e)&&!f._data(a,g)&&(f.removeData(a,d,!0),h.fire())},0)}function m(a){for(var b in a){if(b==="data"&&f.isEmptyObject(a[b]))continue;if(b!=="toJSON")return!1}return!0}function l(a,c,d){if(d===b&&a.nodeType===1){var e="data-"+c.replace(k,"-$1").toLowerCase();d=a.getAttribute(e);if(typeof d=="string"){try{d=d==="true"?!0:d==="false"?!1:d==="null"?null:f.isNumeric(d)?+d:j.test(d)?f.parseJSON(d):d}catch(g){}f.data(a,c,d)}else d=b}return d}function h(a){var b=g[a]={},c,d;a=a.split(/\s+/);for(c=0,d=a.length;c)[^>]*$|#([\w\-]*)$)/,j=/\S/,k=/^\s+/,l=/\s+$/,m=/^<(\w+)\s*\/?>(?:<\/\1>)?$/,n=/^[\],:{}\s]*$/,o=/\\(?:["\\\/bfnrt]|u[0-9a-fA-F]{4})/g,p=/"[^"\\\n\r]*"|true|false|null|-?\d+(?:\.\d*)?(?:[eE][+\-]?\d+)?/g,q=/(?:^|:|,)(?:\s*\[)+/g,r=/(webkit)[ \/]([\w.]+)/,s=/(opera)(?:.*version)?[ \/]([\w.]+)/,t=/(msie) ([\w.]+)/,u=/(mozilla)(?:.*? rv:([\w.]+))?/,v=/-([a-z]|[0-9])/ig,w=/^-ms-/,x=function(a,b){return(b+"").toUpperCase()},y=d.userAgent,z,A,B,C=Object.prototype.toString,D=Object.prototype.hasOwnProperty,E=Array.prototype.push,F=Array.prototype.slice,G=String.prototype.trim,H=Array.prototype.indexOf,I={};e.fn=e.prototype={constructor:e,init:function(a,d,f){var g,h,j,k;if(!a)return this;if(a.nodeType){this.context=this[0]=a,this.length=1;return this}if(a==="body"&&!d&&c.body){this.context=c,this[0]=c.body,this.selector=a,this.length=1;return this}if(typeof a=="string"){a.charAt(0)!=="<"||a.charAt(a.length-1)!==">"||a.length<3?g=i.exec(a):g=[null,a,null];if(g&&(g[1]||!d)){if(g[1]){d=d instanceof e?d[0]:d,k=d?d.ownerDocument||d:c,j=m.exec(a),j?e.isPlainObject(d)?(a=[c.createElement(j[1])],e.fn.attr.call(a,d,!0)):a=[k.createElement(j[1])]:(j=e.buildFragment([g[1]],[k]),a=(j.cacheable?e.clone(j.fragment):j.fragment).childNodes);return e.merge(this,a)}h=c.getElementById(g[2]);if(h&&h.parentNode){if(h.id!==g[2])return f.find(a);this.length=1,this[0]=h}this.context=c,this.selector=a;return this}return!d||d.jquery?(d||f).find(a):this.constructor(d).find(a)}if(e.isFunction(a))return f.ready(a);a.selector!==b&&(this.selector=a.selector,this.context=a.context);return e.makeArray(a,this)},selector:"",jquery:"1.7.2",length:0,size:function(){return this.length},toArray:function(){return F.call(this,0)},get:function(a){return a==null?this.toArray():a<0?this[this.length+a]:this[a]},pushStack:function(a,b,c){var d=this.constructor();e.isArray(a)?E.apply(d,a):e.merge(d,a),d.prevObject=this,d.context=this.context,b==="find"?d.selector=this.selector+(this.selector?" ":"")+c:b&&(d.selector=this.selector+"."+b+"("+c+")");return d},each:function(a,b){return e.each(this,a,b)},ready:function(a){e.bindReady(),A.add(a);return this},eq:function(a){a=+a;return a===-1?this.slice(a):this.slice(a,a+1)},first:function(){return this.eq(0)},last:function(){return this.eq(-1)},slice:function(){return this.pushStack(F.apply(this,arguments),"slice",F.call(arguments).join(","))},map:function(a){return this.pushStack(e.map(this,function(b,c){return a.call(b,c,b)}))},end:function(){return this.prevObject||this.constructor(null)},push:E,sort:[].sort,splice:[].splice},e.fn.init.prototype=e.fn,e.extend=e.fn.extend=function(){var a,c,d,f,g,h,i=arguments[0]||{},j=1,k=arguments.length,l=!1;typeof i=="boolean"&&(l=i,i=arguments[1]||{},j=2),typeof i!="object"&&!e.isFunction(i)&&(i={}),k===j&&(i=this,--j);for(;j0)return;A.fireWith(c,[e]),e.fn.trigger&&e(c).trigger("ready").off("ready")}},bindReady:function(){if(!A){A=e.Callbacks("once memory");if(c.readyState==="complete")return setTimeout(e.ready,1);if(c.addEventListener)c.addEventListener("DOMContentLoaded",B,!1),a.addEventListener("load",e.ready,!1);else if(c.attachEvent){c.attachEvent("onreadystatechange",B),a.attachEvent("onload",e.ready);var b=!1;try{b=a.frameElement==null}catch(d){}c.documentElement.doScroll&&b&&J()}}},isFunction:function(a){return e.type(a)==="function"},isArray:Array.isArray||function(a){return e.type(a)==="array"},isWindow:function(a){return a!=null&&a==a.window},isNumeric:function(a){return!isNaN(parseFloat(a))&&isFinite(a)},type:function(a){return a==null?String(a):I[C.call(a)]||"object"},isPlainObject:function(a){if(!a||e.type(a)!=="object"||a.nodeType||e.isWindow(a))return!1;try{if(a.constructor&&!D.call(a,"constructor")&&!D.call(a.constructor.prototype,"isPrototypeOf"))return!1}catch(c){return!1}var d;for(d in a);return d===b||D.call(a,d)},isEmptyObject:function(a){for(var b in a)return!1;return!0},error:function(a){throw new Error(a)},parseJSON:function(b){if(typeof b!="string"||!b)return null;b=e.trim(b);if(a.JSON&&a.JSON.parse)return a.JSON.parse(b);if(n.test(b.replace(o,"@").replace(p,"]").replace(q,"")))return(new Function("return "+b))();e.error("Invalid JSON: "+b)},parseXML:function(c){if(typeof c!="string"||!c)return null;var d,f;try{a.DOMParser?(f=new DOMParser,d=f.parseFromString(c,"text/xml")):(d=new ActiveXObject("Microsoft.XMLDOM"),d.async="false",d.loadXML(c))}catch(g){d=b}(!d||!d.documentElement||d.getElementsByTagName("parsererror").length)&&e.error("Invalid XML: "+c);return d},noop:function(){},globalEval:function(b){b&&j.test(b)&&(a.execScript||function(b){a.eval.call(a,b)})(b)},camelCase:function(a){return a.replace(w,"ms-").replace(v,x)},nodeName:function(a,b){return a.nodeName&&a.nodeName.toUpperCase()===b.toUpperCase()},each:function(a,c,d){var f,g=0,h=a.length,i=h===b||e.isFunction(a);if(d){if(i){for(f in a)if(c.apply(a[f],d)===!1)break}else for(;g0&&a[0]&&a[j-1]||j===0||e.isArray(a));if(k)for(;i1?i.call(arguments,0):b,j.notifyWith(k,e)}}function l(a){return function(c){b[a]=arguments.length>1?i.call(arguments,0):c,--g||j.resolveWith(j,b)}}var b=i.call(arguments,0),c=0,d=b.length,e=Array(d),g=d,h=d,j=d<=1&&a&&f.isFunction(a.promise)?a:f.Deferred(),k=j.promise();if(d>1){for(;c
a",d=p.getElementsByTagName("*"),e=p.getElementsByTagName("a")[0];if(!d||!d.length||!e)return{};g=c.createElement("select"),h=g.appendChild(c.createElement("option")),i=p.getElementsByTagName("input")[0],b={leadingWhitespace:p.firstChild.nodeType===3,tbody:!p.getElementsByTagName("tbody").length,htmlSerialize:!!p.getElementsByTagName("link").length,style:/top/.test(e.getAttribute("style")),hrefNormalized:e.getAttribute("href")==="/a",opacity:/^0.55/.test(e.style.opacity),cssFloat:!!e.style.cssFloat,checkOn:i.value==="on",optSelected:h.selected,getSetAttribute:p.className!=="t",enctype:!!c.createElement("form").enctype,html5Clone:c.createElement("nav").cloneNode(!0).outerHTML!=="<:nav>",submitBubbles:!0,changeBubbles:!0,focusinBubbles:!1,deleteExpando:!0,noCloneEvent:!0,inlineBlockNeedsLayout:!1,shrinkWrapBlocks:!1,reliableMarginRight:!0,pixelMargin:!0},f.boxModel=b.boxModel=c.compatMode==="CSS1Compat",i.checked=!0,b.noCloneChecked=i.cloneNode(!0).checked,g.disabled=!0,b.optDisabled=!h.disabled;try{delete p.test}catch(r){b.deleteExpando=!1}!p.addEventListener&&p.attachEvent&&p.fireEvent&&(p.attachEvent("onclick",function(){b.noCloneEvent=!1}),p.cloneNode(!0).fireEvent("onclick")),i=c.createElement("input"),i.value="t",i.setAttribute("type","radio"),b.radioValue=i.value==="t",i.setAttribute("checked","checked"),i.setAttribute("name","t"),p.appendChild(i),j=c.createDocumentFragment(),j.appendChild(p.lastChild),b.checkClone=j.cloneNode(!0).cloneNode(!0).lastChild.checked,b.appendChecked=i.checked,j.removeChild(i),j.appendChild(p);if(p.attachEvent)for(n in{submit:1,change:1,focusin:1})m="on"+n,o=m in p,o||(p.setAttribute(m,"return;"),o=typeof p[m]=="function"),b[n+"Bubbles"]=o;j.removeChild(p),j=g=h=p=i=null,f(function(){var d,e,g,h,i,j,l,m,n,q,r,s,t,u=c.getElementsByTagName("body")[0];!u||(m=1,t="padding:0;margin:0;border:",r="position:absolute;top:0;left:0;width:1px;height:1px;",s=t+"0;visibility:hidden;",n="style='"+r+t+"5px solid #000;",q="
"+""+"
",d=c.createElement("div"),d.style.cssText=s+"width:0;height:0;position:static;top:0;margin-top:"+m+"px",u.insertBefore(d,u.firstChild),p=c.createElement("div"),d.appendChild(p),p.innerHTML="
t
",k=p.getElementsByTagName("td"),o=k[0].offsetHeight===0,k[0].style.display="",k[1].style.display="none",b.reliableHiddenOffsets=o&&k[0].offsetHeight===0,a.getComputedStyle&&(p.innerHTML="",l=c.createElement("div"),l.style.width="0",l.style.marginRight="0",p.style.width="2px",p.appendChild(l),b.reliableMarginRight=(parseInt((a.getComputedStyle(l,null)||{marginRight:0}).marginRight,10)||0)===0),typeof p.style.zoom!="undefined"&&(p.innerHTML="",p.style.width=p.style.padding="1px",p.style.border=0,p.style.overflow="hidden",p.style.display="inline",p.style.zoom=1,b.inlineBlockNeedsLayout=p.offsetWidth===3,p.style.display="block",p.style.overflow="visible",p.innerHTML="
",b.shrinkWrapBlocks=p.offsetWidth!==3),p.style.cssText=r+s,p.innerHTML=q,e=p.firstChild,g=e.firstChild,i=e.nextSibling.firstChild.firstChild,j={doesNotAddBorder:g.offsetTop!==5,doesAddBorderForTableAndCells:i.offsetTop===5},g.style.position="fixed",g.style.top="20px",j.fixedPosition=g.offsetTop===20||g.offsetTop===15,g.style.position=g.style.top="",e.style.overflow="hidden",e.style.position="relative",j.subtractsBorderForOverflowNotVisible=g.offsetTop===-5,j.doesNotIncludeMarginInBodyOffset=u.offsetTop!==m,a.getComputedStyle&&(p.style.marginTop="1%",b.pixelMargin=(a.getComputedStyle(p,null)||{marginTop:0}).marginTop!=="1%"),typeof d.style.zoom!="undefined"&&(d.style.zoom=1),u.removeChild(d),l=p=d=null,f.extend(b,j))});return b}();var j=/^(?:\{.*\}|\[.*\])$/,k=/([A-Z])/g;f.extend({cache:{},uuid:0,expando:"jQuery"+(f.fn.jquery+Math.random()).replace(/\D/g,""),noData:{embed:!0,object:"clsid:D27CDB6E-AE6D-11cf-96B8-444553540000",applet:!0},hasData:function(a){a=a.nodeType?f.cache[a[f.expando]]:a[f.expando];return!!a&&!m(a)},data:function(a,c,d,e){if(!!f.acceptData(a)){var g,h,i,j=f.expando,k=typeof c=="string",l=a.nodeType,m=l?f.cache:a,n=l?a[j]:a[j]&&j,o=c==="events";if((!n||!m[n]||!o&&!e&&!m[n].data)&&k&&d===b)return;n||(l?a[j]=n=++f.uuid:n=j),m[n]||(m[n]={},l||(m[n].toJSON=f.noop));if(typeof c=="object"||typeof c=="function")e?m[n]=f.extend(m[n],c):m[n].data=f.extend(m[n].data,c);g=h=m[n],e||(h.data||(h.data={}),h=h.data),d!==b&&(h[f.camelCase(c)]=d);if(o&&!h[c])return g.events;k?(i=h[c],i==null&&(i=h[f.camelCase(c)])):i=h;return i}},removeData:function(a,b,c){if(!!f.acceptData(a)){var d,e,g,h=f.expando,i=a.nodeType,j=i?f.cache:a,k=i?a[h]:h;if(!j[k])return;if(b){d=c?j[k]:j[k].data;if(d){f.isArray(b)||(b in d?b=[b]:(b=f.camelCase(b),b in d?b=[b]:b=b.split(" ")));for(e=0,g=b.length;e1,null,!1)},removeData:function(a){return this.each(function(){f.removeData(this,a)})}}),f.extend({_mark:function(a,b){a&&(b=(b||"fx")+"mark",f._data(a,b,(f._data(a,b)||0)+1))},_unmark:function(a,b,c){a!==!0&&(c=b,b=a,a=!1);if(b){c=c||"fx";var d=c+"mark",e=a?0:(f._data(b,d)||1)-1;e?f._data(b,d,e):(f.removeData(b,d,!0),n(b,c,"mark"))}},queue:function(a,b,c){var d;if(a){b=(b||"fx")+"queue",d=f._data(a,b),c&&(!d||f.isArray(c)?d=f._data(a,b,f.makeArray(c)):d.push(c));return d||[]}},dequeue:function(a,b){b=b||"fx";var c=f.queue(a,b),d=c.shift(),e={};d==="inprogress"&&(d=c.shift()),d&&(b==="fx"&&c.unshift("inprogress"),f._data(a,b+".run",e),d.call(a,function(){f.dequeue(a,b)},e)),c.length||(f.removeData(a,b+"queue "+b+".run",!0),n(a,b,"queue"))}}),f.fn.extend({queue:function(a,c){var d=2;typeof a!="string"&&(c=a,a="fx",d--);if(arguments.length1)},removeAttr:function(a){return this.each(function(){f.removeAttr(this,a)})},prop:function(a,b){return f.access(this,f.prop,a,b,arguments.length>1)},removeProp:function(a){a=f.propFix[a]||a;return this.each(function(){try{this[a]=b,delete this[a]}catch(c){}})},addClass:function(a){var b,c,d,e,g,h,i;if(f.isFunction(a))return this.each(function(b){f(this).addClass(a.call(this,b,this.className))});if(a&&typeof a=="string"){b=a.split(p);for(c=0,d=this.length;c-1)return!0;return!1},val:function(a){var c,d,e,g=this[0];{if(!!arguments.length){e=f.isFunction(a);return this.each(function(d){var g=f(this),h;if(this.nodeType===1){e?h=a.call(this,d,g.val()):h=a,h==null?h="":typeof h=="number"?h+="":f.isArray(h)&&(h=f.map(h,function(a){return a==null?"":a+""})),c=f.valHooks[this.type]||f.valHooks[this.nodeName.toLowerCase()];if(!c||!("set"in c)||c.set(this,h,"value")===b)this.value=h}})}if(g){c=f.valHooks[g.type]||f.valHooks[g.nodeName.toLowerCase()];if(c&&"get"in c&&(d=c.get(g,"value"))!==b)return d;d=g.value;return typeof d=="string"?d.replace(q,""):d==null?"":d}}}}),f.extend({valHooks:{option:{get:function(a){var b=a.attributes.value;return!b||b.specified?a.value:a.text}},select:{get:function(a){var b,c,d,e,g=a.selectedIndex,h=[],i=a.options,j=a.type==="select-one";if(g<0)return null;c=j?g:0,d=j?g+1:i.length;for(;c=0}),c.length||(a.selectedIndex=-1);return c}}},attrFn:{val:!0,css:!0,html:!0,text:!0,data:!0,width:!0,height:!0,offset:!0},attr:function(a,c,d,e){var g,h,i,j=a.nodeType;if(!!a&&j!==3&&j!==8&&j!==2){if(e&&c in f.attrFn)return f(a)[c](d);if(typeof a.getAttribute=="undefined")return f.prop(a,c,d);i=j!==1||!f.isXMLDoc(a),i&&(c=c.toLowerCase(),h=f.attrHooks[c]||(u.test(c)?x:w));if(d!==b){if(d===null){f.removeAttr(a,c);return}if(h&&"set"in h&&i&&(g=h.set(a,d,c))!==b)return g;a.setAttribute(c,""+d);return d}if(h&&"get"in h&&i&&(g=h.get(a,c))!==null)return g;g=a.getAttribute(c);return g===null?b:g}},removeAttr:function(a,b){var c,d,e,g,h,i=0;if(b&&a.nodeType===1){d=b.toLowerCase().split(p),g=d.length;for(;i=0}})});var z=/^(?:textarea|input|select)$/i,A=/^([^\.]*)?(?:\.(.+))?$/,B=/(?:^|\s)hover(\.\S+)?\b/,C=/^key/,D=/^(?:mouse|contextmenu)|click/,E=/^(?:focusinfocus|focusoutblur)$/,F=/^(\w*)(?:#([\w\-]+))?(?:\.([\w\-]+))?$/,G=function( +a){var b=F.exec(a);b&&(b[1]=(b[1]||"").toLowerCase(),b[3]=b[3]&&new RegExp("(?:^|\\s)"+b[3]+"(?:\\s|$)"));return b},H=function(a,b){var c=a.attributes||{};return(!b[1]||a.nodeName.toLowerCase()===b[1])&&(!b[2]||(c.id||{}).value===b[2])&&(!b[3]||b[3].test((c["class"]||{}).value))},I=function(a){return f.event.special.hover?a:a.replace(B,"mouseenter$1 mouseleave$1")};f.event={add:function(a,c,d,e,g){var h,i,j,k,l,m,n,o,p,q,r,s;if(!(a.nodeType===3||a.nodeType===8||!c||!d||!(h=f._data(a)))){d.handler&&(p=d,d=p.handler,g=p.selector),d.guid||(d.guid=f.guid++),j=h.events,j||(h.events=j={}),i=h.handle,i||(h.handle=i=function(a){return typeof f!="undefined"&&(!a||f.event.triggered!==a.type)?f.event.dispatch.apply(i.elem,arguments):b},i.elem=a),c=f.trim(I(c)).split(" ");for(k=0;k=0&&(h=h.slice(0,-1),k=!0),h.indexOf(".")>=0&&(i=h.split("."),h=i.shift(),i.sort());if((!e||f.event.customEvent[h])&&!f.event.global[h])return;c=typeof c=="object"?c[f.expando]?c:new f.Event(h,c):new f.Event(h),c.type=h,c.isTrigger=!0,c.exclusive=k,c.namespace=i.join("."),c.namespace_re=c.namespace?new RegExp("(^|\\.)"+i.join("\\.(?:.*\\.)?")+"(\\.|$)"):null,o=h.indexOf(":")<0?"on"+h:"";if(!e){j=f.cache;for(l in j)j[l].events&&j[l].events[h]&&f.event.trigger(c,d,j[l].handle.elem,!0);return}c.result=b,c.target||(c.target=e),d=d!=null?f.makeArray(d):[],d.unshift(c),p=f.event.special[h]||{};if(p.trigger&&p.trigger.apply(e,d)===!1)return;r=[[e,p.bindType||h]];if(!g&&!p.noBubble&&!f.isWindow(e)){s=p.delegateType||h,m=E.test(s+h)?e:e.parentNode,n=null;for(;m;m=m.parentNode)r.push([m,s]),n=m;n&&n===e.ownerDocument&&r.push([n.defaultView||n.parentWindow||a,s])}for(l=0;le&&j.push({elem:this,matches:d.slice(e)});for(k=0;k0?this.on(b,null,a,c):this.trigger(b)},f.attrFn&&(f.attrFn[b]=!0),C.test(b)&&(f.event.fixHooks[b]=f.event.keyHooks),D.test(b)&&(f.event.fixHooks[b]=f.event.mouseHooks)}),function(){function x(a,b,c,e,f,g){for(var h=0,i=e.length;h0){k=j;break}}j=j[a]}e[h]=k}}}function w(a,b,c,e,f,g){for(var h=0,i=e.length;h+~,(\[\\]+)+|[>+~])(\s*,\s*)?((?:.|\r|\n)*)/g,d="sizcache"+(Math.random()+"").replace(".",""),e=0,g=Object.prototype.toString,h=!1,i=!0,j=/\\/g,k=/\r\n/g,l=/\W/;[0,0].sort(function(){i=!1;return 0});var m=function(b,d,e,f){e=e||[],d=d||c;var h=d;if(d.nodeType!==1&&d.nodeType!==9)return[];if(!b||typeof b!="string")return e;var i,j,k,l,n,q,r,t,u=!0,v=m.isXML(d),w=[],x=b;do{a.exec(""),i=a.exec(x);if(i){x=i[3],w.push(i[1]);if(i[2]){l=i[3];break}}}while(i);if(w.length>1&&p.exec(b))if(w.length===2&&o.relative[w[0]])j=y(w[0]+w[1],d,f);else{j=o.relative[w[0]]?[d]:m(w.shift(),d);while(w.length)b=w.shift(),o.relative[b]&&(b+=w.shift()),j=y(b,j,f)}else{!f&&w.length>1&&d.nodeType===9&&!v&&o.match.ID.test(w[0])&&!o.match.ID.test(w[w.length-1])&&(n=m.find(w.shift(),d,v),d=n.expr?m.filter(n.expr,n.set)[0]:n.set[0]);if(d){n=f?{expr:w.pop(),set:s(f)}:m.find(w.pop(),w.length===1&&(w[0]==="~"||w[0]==="+")&&d.parentNode?d.parentNode:d,v),j=n.expr?m.filter(n.expr,n.set):n.set,w.length>0?k=s(j):u=!1;while(w.length)q=w.pop(),r=q,o.relative[q]?r=w.pop():q="",r==null&&(r=d),o.relative[q](k,r,v)}else k=w=[]}k||(k=j),k||m.error(q||b);if(g.call(k)==="[object Array]")if(!u)e.push.apply(e,k);else if(d&&d.nodeType===1)for(t=0;k[t]!=null;t++)k[t]&&(k[t]===!0||k[t].nodeType===1&&m.contains(d,k[t]))&&e.push(j[t]);else for(t=0;k[t]!=null;t++)k[t]&&k[t].nodeType===1&&e.push(j[t]);else s(k,e);l&&(m(l,h,e,f),m.uniqueSort(e));return e};m.uniqueSort=function(a){if(u){h=i,a.sort(u);if(h)for(var b=1;b0},m.find=function(a,b,c){var d,e,f,g,h,i;if(!a)return[];for(e=0,f=o.order.length;e":function(a,b){var c,d=typeof b=="string",e=0,f=a.length;if(d&&!l.test(b)){b=b.toLowerCase();for(;e=0)?c||d.push(h):c&&(b[g]=!1));return!1},ID:function(a){return a[1].replace(j,"")},TAG:function(a,b){return a[1].replace(j,"").toLowerCase()},CHILD:function(a){if(a[1]==="nth"){a[2]||m.error(a[0]),a[2]=a[2].replace(/^\+|\s*/g,"");var b=/(-?)(\d*)(?:n([+\-]?\d*))?/.exec(a[2]==="even"&&"2n"||a[2]==="odd"&&"2n+1"||!/\D/.test(a[2])&&"0n+"+a[2]||a[2]);a[2]=b[1]+(b[2]||1)-0,a[3]=b[3]-0}else a[2]&&m.error(a[0]);a[0]=e++;return a},ATTR:function(a,b,c,d,e,f){var g=a[1]=a[1].replace(j,"");!f&&o.attrMap[g]&&(a[1]=o.attrMap[g]),a[4]=(a[4]||a[5]||"").replace(j,""),a[2]==="~="&&(a[4]=" "+a[4]+" ");return a},PSEUDO:function(b,c,d,e,f){if(b[1]==="not")if((a.exec(b[3])||"").length>1||/^\w/.test(b[3]))b[3]=m(b[3],null,null,c);else{var g=m.filter(b[3],c,d,!0^f);d||e.push.apply(e,g);return!1}else if(o.match.POS.test(b[0])||o.match.CHILD.test(b[0]))return!0;return b},POS:function(a){a.unshift(!0);return a}},filters:{enabled:function(a){return a.disabled===!1&&a.type!=="hidden"},disabled:function(a){return a.disabled===!0},checked:function(a){return a.checked===!0},selected:function(a){a.parentNode&&a.parentNode.selectedIndex;return a.selected===!0},parent:function(a){return!!a.firstChild},empty:function(a){return!a.firstChild},has:function(a,b,c){return!!m(c[3],a).length},header:function(a){return/h\d/i.test(a.nodeName)},text:function(a){var b=a.getAttribute("type"),c=a.type;return a.nodeName.toLowerCase()==="input"&&"text"===c&&(b===c||b===null)},radio:function(a){return a.nodeName.toLowerCase()==="input"&&"radio"===a.type},checkbox:function(a){return a.nodeName.toLowerCase()==="input"&&"checkbox"===a.type},file:function(a){return a.nodeName.toLowerCase()==="input"&&"file"===a.type},password:function(a){return a.nodeName.toLowerCase()==="input"&&"password"===a.type},submit:function(a){var b=a.nodeName.toLowerCase();return(b==="input"||b==="button")&&"submit"===a.type},image:function(a){return a.nodeName.toLowerCase()==="input"&&"image"===a.type},reset:function(a){var b=a.nodeName.toLowerCase();return(b==="input"||b==="button")&&"reset"===a.type},button:function(a){var b=a.nodeName.toLowerCase();return b==="input"&&"button"===a.type||b==="button"},input:function(a){return/input|select|textarea|button/i.test(a.nodeName)},focus:function(a){return a===a.ownerDocument.activeElement}},setFilters:{first:function(a,b){return b===0},last:function(a,b,c,d){return b===d.length-1},even:function(a,b){return b%2===0},odd:function(a,b){return b%2===1},lt:function(a,b,c){return bc[3]-0},nth:function(a,b,c){return c[3]-0===b},eq:function(a,b,c){return c[3]-0===b}},filter:{PSEUDO:function(a,b,c,d){var e=b[1],f=o.filters[e];if(f)return f(a,c,b,d);if(e==="contains")return(a.textContent||a.innerText||n([a])||"").indexOf(b[3])>=0;if(e==="not"){var g=b[3];for(var h=0,i=g.length;h=0}},ID:function(a,b){return a.nodeType===1&&a.getAttribute("id")===b},TAG:function(a,b){return b==="*"&&a.nodeType===1||!!a.nodeName&&a.nodeName.toLowerCase()===b},CLASS:function(a,b){return(" "+(a.className||a.getAttribute("class"))+" ").indexOf(b)>-1},ATTR:function(a,b){var c=b[1],d=m.attr?m.attr(a,c):o.attrHandle[c]?o.attrHandle[c](a):a[c]!=null?a[c]:a.getAttribute(c),e=d+"",f=b[2],g=b[4];return d==null?f==="!=":!f&&m.attr?d!=null:f==="="?e===g:f==="*="?e.indexOf(g)>=0:f==="~="?(" "+e+" ").indexOf(g)>=0:g?f==="!="?e!==g:f==="^="?e.indexOf(g)===0:f==="$="?e.substr(e.length-g.length)===g:f==="|="?e===g||e.substr(0,g.length+1)===g+"-":!1:e&&d!==!1},POS:function(a,b,c,d){var e=b[2],f=o.setFilters[e];if(f)return f(a,c,b,d)}}},p=o.match.POS,q=function(a,b){return"\\"+(b-0+1)};for(var r in o.match)o.match[r]=new RegExp(o.match[r].source+/(?![^\[]*\])(?![^\(]*\))/.source),o.leftMatch[r]=new RegExp(/(^(?:.|\r|\n)*?)/.source+o.match[r].source.replace(/\\(\d+)/g,q));o.match.globalPOS=p;var s=function(a,b){a=Array.prototype.slice.call(a,0);if(b){b.push.apply(b,a);return b}return a};try{Array.prototype.slice.call(c.documentElement.childNodes,0)[0].nodeType}catch(t){s=function(a,b){var c=0,d=b||[];if(g.call(a)==="[object Array]")Array.prototype.push.apply(d,a);else if(typeof a.length=="number")for(var e=a.length;c",e.insertBefore(a,e.firstChild),c.getElementById(d)&&(o.find.ID=function(a,c,d){if(typeof c.getElementById!="undefined"&&!d){var e=c.getElementById(a[1]);return e?e.id===a[1]||typeof e.getAttributeNode!="undefined"&&e.getAttributeNode("id").nodeValue===a[1]?[e]:b:[]}},o.filter.ID=function(a,b){var c=typeof a.getAttributeNode!="undefined"&&a.getAttributeNode("id");return a.nodeType===1&&c&&c.nodeValue===b}),e.removeChild(a),e=a=null}(),function(){var a=c.createElement("div");a.appendChild(c.createComment("")),a.getElementsByTagName("*").length>0&&(o.find.TAG=function(a,b){var c=b.getElementsByTagName(a[1]);if(a[1]==="*"){var d=[];for(var e=0;c[e];e++)c[e].nodeType===1&&d.push(c[e]);c=d}return c}),a.innerHTML="",a.firstChild&&typeof a.firstChild.getAttribute!="undefined"&&a.firstChild.getAttribute("href")!=="#"&&(o.attrHandle.href=function(a){return a.getAttribute("href",2)}),a=null}(),c.querySelectorAll&&function(){var a=m,b=c.createElement("div"),d="__sizzle__";b.innerHTML="

";if(!b.querySelectorAll||b.querySelectorAll(".TEST").length!==0){m=function(b,e,f,g){e=e||c;if(!g&&!m.isXML(e)){var h=/^(\w+$)|^\.([\w\-]+$)|^#([\w\-]+$)/.exec(b);if(h&&(e.nodeType===1||e.nodeType===9)){if(h[1])return s(e.getElementsByTagName(b),f);if(h[2]&&o.find.CLASS&&e.getElementsByClassName)return s(e.getElementsByClassName(h[2]),f)}if(e.nodeType===9){if(b==="body"&&e.body)return s([e.body],f);if(h&&h[3]){var i=e.getElementById(h[3]);if(!i||!i.parentNode)return s([],f);if(i.id===h[3])return s([i],f)}try{return s(e.querySelectorAll(b),f)}catch(j){}}else if(e.nodeType===1&&e.nodeName.toLowerCase()!=="object"){var k=e,l=e.getAttribute("id"),n=l||d,p=e.parentNode,q=/^\s*[+~]/.test(b);l?n=n.replace(/'/g,"\\$&"):e.setAttribute("id",n),q&&p&&(e=e.parentNode);try{if(!q||p)return s(e.querySelectorAll("[id='"+n+"'] "+b),f)}catch(r){}finally{l||k.removeAttribute("id")}}}return a(b,e,f,g)};for(var e in a)m[e]=a[e];b=null}}(),function(){var a=c.documentElement,b=a.matchesSelector||a.mozMatchesSelector||a.webkitMatchesSelector||a.msMatchesSelector;if(b){var d=!b.call(c.createElement("div"),"div"),e=!1;try{b.call(c.documentElement,"[test!='']:sizzle")}catch(f){e=!0}m.matchesSelector=function(a,c){c=c.replace(/\=\s*([^'"\]]*)\s*\]/g,"='$1']");if(!m.isXML(a))try{if(e||!o.match.PSEUDO.test(c)&&!/!=/.test(c)){var f=b.call(a,c);if(f||!d||a.document&&a.document.nodeType!==11)return f}}catch(g){}return m(c,null,null,[a]).length>0}}}(),function(){var a=c.createElement("div");a.innerHTML="
";if(!!a.getElementsByClassName&&a.getElementsByClassName("e").length!==0){a.lastChild.className="e";if(a.getElementsByClassName("e").length===1)return;o.order.splice(1,0,"CLASS"),o.find.CLASS=function(a,b,c){if(typeof b.getElementsByClassName!="undefined"&&!c)return b.getElementsByClassName(a[1])},a=null}}(),c.documentElement.contains?m.contains=function(a,b){return a!==b&&(a.contains?a.contains(b):!0)}:c.documentElement.compareDocumentPosition?m.contains=function(a,b){return!!(a.compareDocumentPosition(b)&16)}:m.contains=function(){return!1},m.isXML=function(a){var b=(a?a.ownerDocument||a:0).documentElement;return b?b.nodeName!=="HTML":!1};var y=function(a,b,c){var d,e=[],f="",g=b.nodeType?[b]:b;while(d=o.match.PSEUDO.exec(a))f+=d[0],a=a.replace(o.match.PSEUDO,"");a=o.relative[a]?a+"*":a;for(var h=0,i=g.length;h0)for(h=g;h=0:f.filter(a,this).length>0:this.filter(a).length>0)},closest:function(a,b){var c=[],d,e,g=this[0];if(f.isArray(a)){var h=1;while(g&&g.ownerDocument&&g!==b){for(d=0;d-1:f.find.matchesSelector(g,a)){c.push(g);break}g=g.parentNode;if(!g||!g.ownerDocument||g===b||g.nodeType===11)break}}c=c.length>1?f.unique(c):c;return this.pushStack(c,"closest",a)},index:function(a){if(!a)return this[0]&&this[0].parentNode?this.prevAll().length:-1;if(typeof a=="string")return f.inArray(this[0],f(a));return f.inArray(a.jquery?a[0]:a,this)},add:function(a,b){var c=typeof a=="string"?f(a,b):f.makeArray(a&&a.nodeType?[a]:a),d=f.merge(this.get(),c);return this.pushStack(S(c[0])||S(d[0])?d:f.unique(d))},andSelf:function(){return this.add(this.prevObject)}}),f.each({parent:function(a){var b=a.parentNode;return b&&b.nodeType!==11?b:null},parents:function(a){return f.dir(a,"parentNode")},parentsUntil:function(a,b,c){return f.dir(a,"parentNode",c)},next:function(a){return f.nth(a,2,"nextSibling")},prev:function(a){return f.nth(a,2,"previousSibling")},nextAll:function(a){return f.dir(a,"nextSibling")},prevAll:function(a){return f.dir(a,"previousSibling")},nextUntil:function(a,b,c){return f.dir(a,"nextSibling",c)},prevUntil:function(a,b,c){return f.dir(a,"previousSibling",c)},siblings:function(a){return f.sibling((a.parentNode||{}).firstChild,a)},children:function(a){return f.sibling(a.firstChild)},contents:function(a){return f.nodeName(a,"iframe")?a.contentDocument||a.contentWindow.document:f.makeArray(a.childNodes)}},function(a,b){f.fn[a]=function(c,d){var e=f.map(this,b,c);L.test(a)||(d=c),d&&typeof d=="string"&&(e=f.filter(d,e)),e=this.length>1&&!R[a]?f.unique(e):e,(this.length>1||N.test(d))&&M.test(a)&&(e=e.reverse());return this.pushStack(e,a,P.call(arguments).join(","))}}),f.extend({filter:function(a,b,c){c&&(a=":not("+a+")");return b.length===1?f.find.matchesSelector(b[0],a)?[b[0]]:[]:f.find.matches(a,b)},dir:function(a,c,d){var e=[],g=a[c];while(g&&g.nodeType!==9&&(d===b||g.nodeType!==1||!f(g).is(d)))g.nodeType===1&&e.push(g),g=g[c];return e},nth:function(a,b,c,d){b=b||1;var e=0;for(;a;a=a[c])if(a.nodeType===1&&++e===b)break;return a},sibling:function(a,b){var c=[];for(;a;a=a.nextSibling)a.nodeType===1&&a!==b&&c.push(a);return c}});var V="abbr|article|aside|audio|bdi|canvas|data|datalist|details|figcaption|figure|footer|header|hgroup|mark|meter|nav|output|progress|section|summary|time|video",W=/ jQuery\d+="(?:\d+|null)"/g,X=/^\s+/,Y=/<(?!area|br|col|embed|hr|img|input|link|meta|param)(([\w:]+)[^>]*)\/>/ig,Z=/<([\w:]+)/,$=/]","i"),bd=/checked\s*(?:[^=]|=\s*.checked.)/i,be=/\/(java|ecma)script/i,bf=/^\s*",""],legend:[1,"
","
"],thead:[1,"","
"],tr:[2,"","
"],td:[3,"","
"],col:[2,"","
"],area:[1,"",""],_default:[0,"",""]},bh=U(c);bg.optgroup=bg.option,bg.tbody=bg.tfoot=bg.colgroup=bg.caption=bg.thead,bg.th=bg.td,f.support.htmlSerialize||(bg._default=[1,"div
","
"]),f.fn.extend({text:function(a){return f.access(this,function(a){return a===b?f.text(this):this.empty().append((this[0]&&this[0].ownerDocument||c).createTextNode(a))},null,a,arguments.length)},wrapAll:function(a){if(f.isFunction(a))return this.each(function(b){f(this).wrapAll(a.call(this,b))});if(this[0]){var b=f(a,this[0].ownerDocument).eq(0).clone(!0);this[0].parentNode&&b.insertBefore(this[0]),b.map(function(){var a=this;while(a.firstChild&&a.firstChild.nodeType===1)a=a.firstChild;return a}).append(this)}return this},wrapInner:function(a){if(f.isFunction(a))return this.each(function(b){f(this).wrapInner(a.call(this,b))});return this.each(function(){var b=f(this),c=b.contents();c.length?c.wrapAll(a):b.append(a)})},wrap:function(a){var b=f.isFunction(a);return this.each(function(c){f(this).wrapAll(b?a.call(this,c):a)})},unwrap:function(){return this.parent().each(function(){f.nodeName(this,"body")||f(this).replaceWith(this.childNodes)}).end()},append:function(){return this.domManip(arguments,!0,function(a){this.nodeType===1&&this.appendChild(a)})},prepend:function(){return this.domManip(arguments,!0,function(a){this.nodeType===1&&this.insertBefore(a,this.firstChild)})},before:function(){if(this[0]&&this[0].parentNode)return this.domManip(arguments,!1,function(a){this.parentNode.insertBefore(a,this)});if(arguments.length){var a=f +.clean(arguments);a.push.apply(a,this.toArray());return this.pushStack(a,"before",arguments)}},after:function(){if(this[0]&&this[0].parentNode)return this.domManip(arguments,!1,function(a){this.parentNode.insertBefore(a,this.nextSibling)});if(arguments.length){var a=this.pushStack(this,"after",arguments);a.push.apply(a,f.clean(arguments));return a}},remove:function(a,b){for(var c=0,d;(d=this[c])!=null;c++)if(!a||f.filter(a,[d]).length)!b&&d.nodeType===1&&(f.cleanData(d.getElementsByTagName("*")),f.cleanData([d])),d.parentNode&&d.parentNode.removeChild(d);return this},empty:function(){for(var a=0,b;(b=this[a])!=null;a++){b.nodeType===1&&f.cleanData(b.getElementsByTagName("*"));while(b.firstChild)b.removeChild(b.firstChild)}return this},clone:function(a,b){a=a==null?!1:a,b=b==null?a:b;return this.map(function(){return f.clone(this,a,b)})},html:function(a){return f.access(this,function(a){var c=this[0]||{},d=0,e=this.length;if(a===b)return c.nodeType===1?c.innerHTML.replace(W,""):null;if(typeof a=="string"&&!ba.test(a)&&(f.support.leadingWhitespace||!X.test(a))&&!bg[(Z.exec(a)||["",""])[1].toLowerCase()]){a=a.replace(Y,"<$1>");try{for(;d1&&l0?this.clone(!0):this).get();f(e[h])[b](j),d=d.concat(j)}return this.pushStack(d,a,e.selector)}}),f.extend({clone:function(a,b,c){var d,e,g,h=f.support.html5Clone||f.isXMLDoc(a)||!bc.test("<"+a.nodeName+">")?a.cloneNode(!0):bo(a);if((!f.support.noCloneEvent||!f.support.noCloneChecked)&&(a.nodeType===1||a.nodeType===11)&&!f.isXMLDoc(a)){bk(a,h),d=bl(a),e=bl(h);for(g=0;d[g];++g)e[g]&&bk(d[g],e[g])}if(b){bj(a,h);if(c){d=bl(a),e=bl(h);for(g=0;d[g];++g)bj(d[g],e[g])}}d=e=null;return h},clean:function(a,b,d,e){var g,h,i,j=[];b=b||c,typeof b.createElement=="undefined"&&(b=b.ownerDocument||b[0]&&b[0].ownerDocument||c);for(var k=0,l;(l=a[k])!=null;k++){typeof l=="number"&&(l+="");if(!l)continue;if(typeof l=="string")if(!_.test(l))l=b.createTextNode(l);else{l=l.replace(Y,"<$1>");var m=(Z.exec(l)||["",""])[1].toLowerCase(),n=bg[m]||bg._default,o=n[0],p=b.createElement("div"),q=bh.childNodes,r;b===c?bh.appendChild(p):U(b).appendChild(p),p.innerHTML=n[1]+l+n[2];while(o--)p=p.lastChild;if(!f.support.tbody){var s=$.test(l),t=m==="table"&&!s?p.firstChild&&p.firstChild.childNodes:n[1]===""&&!s?p.childNodes:[];for(i=t.length-1;i>=0;--i)f.nodeName(t[i],"tbody")&&!t[i].childNodes.length&&t[i].parentNode.removeChild(t[i])}!f.support.leadingWhitespace&&X.test(l)&&p.insertBefore(b.createTextNode(X.exec(l)[0]),p.firstChild),l=p.childNodes,p&&(p.parentNode.removeChild(p),q.length>0&&(r=q[q.length-1],r&&r.parentNode&&r.parentNode.removeChild(r)))}var u;if(!f.support.appendChecked)if(l[0]&&typeof (u=l.length)=="number")for(i=0;i1)},f.extend({cssHooks:{opacity:{get:function(a,b){if(b){var c=by(a,"opacity");return c===""?"1":c}return a.style.opacity}}},cssNumber:{fillOpacity:!0,fontWeight:!0,lineHeight:!0,opacity:!0,orphans:!0,widows:!0,zIndex:!0,zoom:!0},cssProps:{"float":f.support.cssFloat?"cssFloat":"styleFloat"},style:function(a,c,d,e){if(!!a&&a.nodeType!==3&&a.nodeType!==8&&!!a.style){var g,h,i=f.camelCase(c),j=a.style,k=f.cssHooks[i];c=f.cssProps[i]||i;if(d===b){if(k&&"get"in k&&(g=k.get(a,!1,e))!==b)return g;return j[c]}h=typeof d,h==="string"&&(g=bu.exec(d))&&(d=+(g[1]+1)*+g[2]+parseFloat(f.css(a,c)),h="number");if(d==null||h==="number"&&isNaN(d))return;h==="number"&&!f.cssNumber[i]&&(d+="px");if(!k||!("set"in k)||(d=k.set(a,d))!==b)try{j[c]=d}catch(l){}}},css:function(a,c,d){var e,g;c=f.camelCase(c),g=f.cssHooks[c],c=f.cssProps[c]||c,c==="cssFloat"&&(c="float");if(g&&"get"in g&&(e=g.get(a,!0,d))!==b)return e;if(by)return by(a,c)},swap:function(a,b,c){var d={},e,f;for(f in b)d[f]=a.style[f],a.style[f]=b[f];e=c.call(a);for(f in b)a.style[f]=d[f];return e}}),f.curCSS=f.css,c.defaultView&&c.defaultView.getComputedStyle&&(bz=function(a,b){var c,d,e,g,h=a.style;b=b.replace(br,"-$1").toLowerCase(),(d=a.ownerDocument.defaultView)&&(e=d.getComputedStyle(a,null))&&(c=e.getPropertyValue(b),c===""&&!f.contains(a.ownerDocument.documentElement,a)&&(c=f.style(a,b))),!f.support.pixelMargin&&e&&bv.test(b)&&bt.test(c)&&(g=h.width,h.width=c,c=e.width,h.width=g);return c}),c.documentElement.currentStyle&&(bA=function(a,b){var c,d,e,f=a.currentStyle&&a.currentStyle[b],g=a.style;f==null&&g&&(e=g[b])&&(f=e),bt.test(f)&&(c=g.left,d=a.runtimeStyle&&a.runtimeStyle.left,d&&(a.runtimeStyle.left=a.currentStyle.left),g.left=b==="fontSize"?"1em":f,f=g.pixelLeft+"px",g.left=c,d&&(a.runtimeStyle.left=d));return f===""?"auto":f}),by=bz||bA,f.each(["height","width"],function(a,b){f.cssHooks[b]={get:function(a,c,d){if(c)return a.offsetWidth!==0?bB(a,b,d):f.swap(a,bw,function(){return bB(a,b,d)})},set:function(a,b){return bs.test(b)?b+"px":b}}}),f.support.opacity||(f.cssHooks.opacity={get:function(a,b){return bq.test((b&&a.currentStyle?a.currentStyle.filter:a.style.filter)||"")?parseFloat(RegExp.$1)/100+"":b?"1":""},set:function(a,b){var c=a.style,d=a.currentStyle,e=f.isNumeric(b)?"alpha(opacity="+b*100+")":"",g=d&&d.filter||c.filter||"";c.zoom=1;if(b>=1&&f.trim(g.replace(bp,""))===""){c.removeAttribute("filter");if(d&&!d.filter)return}c.filter=bp.test(g)?g.replace(bp,e):g+" "+e}}),f(function(){f.support.reliableMarginRight||(f.cssHooks.marginRight={get:function(a,b){return f.swap(a,{display:"inline-block"},function(){return b?by(a,"margin-right"):a.style.marginRight})}})}),f.expr&&f.expr.filters&&(f.expr.filters.hidden=function(a){var b=a.offsetWidth,c=a.offsetHeight;return b===0&&c===0||!f.support.reliableHiddenOffsets&&(a.style&&a.style.display||f.css(a,"display"))==="none"},f.expr.filters.visible=function(a){return!f.expr.filters.hidden(a)}),f.each({margin:"",padding:"",border:"Width"},function(a,b){f.cssHooks[a+b]={expand:function(c){var d,e=typeof c=="string"?c.split(" "):[c],f={};for(d=0;d<4;d++)f[a+bx[d]+b]=e[d]||e[d-2]||e[0];return f}}});var bC=/%20/g,bD=/\[\]$/,bE=/\r?\n/g,bF=/#.*$/,bG=/^(.*?):[ \t]*([^\r\n]*)\r?$/mg,bH=/^(?:color|date|datetime|datetime-local|email|hidden|month|number|password|range|search|tel|text|time|url|week)$/i,bI=/^(?:about|app|app\-storage|.+\-extension|file|res|widget):$/,bJ=/^(?:GET|HEAD)$/,bK=/^\/\//,bL=/\?/,bM=/)<[^<]*)*<\/script>/gi,bN=/^(?:select|textarea)/i,bO=/\s+/,bP=/([?&])_=[^&]*/,bQ=/^([\w\+\.\-]+:)(?:\/\/([^\/?#:]*)(?::(\d+))?)?/,bR=f.fn.load,bS={},bT={},bU,bV,bW=["*/"]+["*"];try{bU=e.href}catch(bX){bU=c.createElement("a"),bU.href="",bU=bU.href}bV=bQ.exec(bU.toLowerCase())||[],f.fn.extend({load:function(a,c,d){if(typeof a!="string"&&bR)return bR.apply(this,arguments);if(!this.length)return this;var e=a.indexOf(" ");if(e>=0){var g=a.slice(e,a.length);a=a.slice(0,e)}var h="GET";c&&(f.isFunction(c)?(d=c,c=b):typeof c=="object"&&(c=f.param(c,f.ajaxSettings.traditional),h="POST"));var i=this;f.ajax({url:a,type:h,dataType:"html",data:c,complete:function(a,b,c){c=a.responseText,a.isResolved()&&(a.done(function(a){c=a}),i.html(g?f("
").append(c.replace(bM,"")).find(g):c)),d&&i.each(d,[c,b,a])}});return this},serialize:function(){return f.param(this.serializeArray())},serializeArray:function(){return this.map(function(){return this.elements?f.makeArray(this.elements):this}).filter(function(){return this.name&&!this.disabled&&(this.checked||bN.test(this.nodeName)||bH.test(this.type))}).map(function(a,b){var c=f(this).val();return c==null?null:f.isArray(c)?f.map(c,function(a,c){return{name:b.name,value:a.replace(bE,"\r\n")}}):{name:b.name,value:c.replace(bE,"\r\n")}}).get()}}),f.each("ajaxStart ajaxStop ajaxComplete ajaxError ajaxSuccess ajaxSend".split(" "),function(a,b){f.fn[b]=function(a){return this.on(b,a)}}),f.each(["get","post"],function(a,c){f[c]=function(a,d,e,g){f.isFunction(d)&&(g=g||e,e=d,d=b);return f.ajax({type:c,url:a,data:d,success:e,dataType:g})}}),f.extend({getScript:function(a,c){return f.get(a,b,c,"script")},getJSON:function(a,b,c){return f.get(a,b,c,"json")},ajaxSetup:function(a,b){b?b$(a,f.ajaxSettings):(b=a,a=f.ajaxSettings),b$(a,b);return a},ajaxSettings:{url:bU,isLocal:bI.test(bV[1]),global:!0,type:"GET",contentType:"application/x-www-form-urlencoded; charset=UTF-8",processData:!0,async:!0,accepts:{xml:"application/xml, text/xml",html:"text/html",text:"text/plain",json:"application/json, text/javascript","*":bW},contents:{xml:/xml/,html:/html/,json:/json/},responseFields:{xml:"responseXML",text:"responseText"},converters:{"* text":a.String,"text html":!0,"text json":f.parseJSON,"text xml":f.parseXML},flatOptions:{context:!0,url:!0}},ajaxPrefilter:bY(bS),ajaxTransport:bY(bT),ajax:function(a,c){function w(a,c,l,m){if(s!==2){s=2,q&&clearTimeout(q),p=b,n=m||"",v.readyState=a>0?4:0;var o,r,u,w=c,x=l?ca(d,v,l):b,y,z;if(a>=200&&a<300||a===304){if(d.ifModified){if(y=v.getResponseHeader("Last-Modified"))f.lastModified[k]=y;if(z=v.getResponseHeader("Etag"))f.etag[k]=z}if(a===304)w="notmodified",o=!0;else try{r=cb(d,x),w="success",o=!0}catch(A){w="parsererror",u=A}}else{u=w;if(!w||a)w="error",a<0&&(a=0)}v.status=a,v.statusText=""+(c||w),o?h.resolveWith(e,[r,w,v]):h.rejectWith(e,[v,w,u]),v.statusCode(j),j=b,t&&g.trigger("ajax"+(o?"Success":"Error"),[v,d,o?r:u]),i.fireWith(e,[v,w]),t&&(g.trigger("ajaxComplete",[v,d]),--f.active||f.event.trigger("ajaxStop"))}}typeof a=="object"&&(c=a,a=b),c=c||{};var d=f.ajaxSetup({},c),e=d.context||d,g=e!==d&&(e.nodeType||e instanceof f)?f(e):f.event,h=f.Deferred(),i=f.Callbacks("once memory"),j=d.statusCode||{},k,l={},m={},n,o,p,q,r,s=0,t,u,v={readyState:0,setRequestHeader:function(a,b){if(!s){var c=a.toLowerCase();a=m[c]=m[c]||a,l[a]=b}return this},getAllResponseHeaders:function(){return s===2?n:null},getResponseHeader:function(a){var c;if(s===2){if(!o){o={};while(c=bG.exec(n))o[c[1].toLowerCase()]=c[2]}c=o[a.toLowerCase()]}return c===b?null:c},overrideMimeType:function(a){s||(d.mimeType=a);return this},abort:function(a){a=a||"abort",p&&p.abort(a),w(0,a);return this}};h.promise(v),v.success=v.done,v.error=v.fail,v.complete=i.add,v.statusCode=function(a){if(a){var b;if(s<2)for(b in a)j[b]=[j[b],a[b]];else b=a[v.status],v.then(b,b)}return this},d.url=((a||d.url)+"").replace(bF,"").replace(bK,bV[1]+"//"),d.dataTypes=f.trim(d.dataType||"*").toLowerCase().split(bO),d.crossDomain==null&&(r=bQ.exec(d.url.toLowerCase()),d.crossDomain=!(!r||r[1]==bV[1]&&r[2]==bV[2]&&(r[3]||(r[1]==="http:"?80:443))==(bV[3]||(bV[1]==="http:"?80:443)))),d.data&&d.processData&&typeof d.data!="string"&&(d.data=f.param(d.data,d.traditional)),bZ(bS,d,c,v);if(s===2)return!1;t=d.global,d.type=d.type.toUpperCase(),d.hasContent=!bJ.test(d.type),t&&f.active++===0&&f.event.trigger("ajaxStart");if(!d.hasContent){d.data&&(d.url+=(bL.test(d.url)?"&":"?")+d.data,delete d.data),k=d.url;if(d.cache===!1){var x=f.now(),y=d.url.replace(bP,"$1_="+x);d.url=y+(y===d.url?(bL.test(d.url)?"&":"?")+"_="+x:"")}}(d.data&&d.hasContent&&d.contentType!==!1||c.contentType)&&v.setRequestHeader("Content-Type",d.contentType),d.ifModified&&(k=k||d.url,f.lastModified[k]&&v.setRequestHeader("If-Modified-Since",f.lastModified[k]),f.etag[k]&&v.setRequestHeader("If-None-Match",f.etag[k])),v.setRequestHeader("Accept",d.dataTypes[0]&&d.accepts[d.dataTypes[0]]?d.accepts[d.dataTypes[0]]+(d.dataTypes[0]!=="*"?", "+bW+"; q=0.01":""):d.accepts["*"]);for(u in d.headers)v.setRequestHeader(u,d.headers[u]);if(d.beforeSend&&(d.beforeSend.call(e,v,d)===!1||s===2)){v.abort();return!1}for(u in{success:1,error:1,complete:1})v[u](d[u]);p=bZ(bT,d,c,v);if(!p)w(-1,"No Transport");else{v.readyState=1,t&&g.trigger("ajaxSend",[v,d]),d.async&&d.timeout>0&&(q=setTimeout(function(){v.abort("timeout")},d.timeout));try{s=1,p.send(l,w)}catch(z){if(s<2)w(-1,z);else throw z}}return v},param:function(a,c){var d=[],e=function(a,b){b=f.isFunction(b)?b():b,d[d.length]=encodeURIComponent(a)+"="+encodeURIComponent(b)};c===b&&(c=f.ajaxSettings.traditional);if(f.isArray(a)||a.jquery&&!f.isPlainObject(a))f.each(a,function(){e(this.name,this.value)});else for(var g in a)b_(g,a[g],c,e);return d.join("&").replace(bC,"+")}}),f.extend({active:0,lastModified:{},etag:{}});var cc=f.now(),cd=/(\=)\?(&|$)|\?\?/i;f.ajaxSetup({jsonp:"callback",jsonpCallback:function(){return f.expando+"_"+cc++}}),f.ajaxPrefilter("json jsonp",function(b,c,d){var e=typeof b.data=="string"&&/^application\/x\-www\-form\-urlencoded/.test(b.contentType);if(b.dataTypes[0]==="jsonp"||b.jsonp!==!1&&(cd.test(b.url)||e&&cd.test(b.data))){var g,h=b.jsonpCallback=f.isFunction(b.jsonpCallback)?b.jsonpCallback():b.jsonpCallback,i=a[h],j=b.url,k=b.data,l="$1"+h+"$2";b.jsonp!==!1&&(j=j.replace(cd,l),b.url===j&&(e&&(k=k.replace(cd,l)),b.data===k&&(j+=(/\?/.test(j)?"&":"?")+b.jsonp+"="+h))),b.url=j,b.data=k,a[h]=function(a){g=[a]},d.always(function(){a[h]=i,g&&f.isFunction(i)&&a[h](g[0])}),b.converters["script json"]=function(){g||f.error(h+" was not called");return g[0]},b.dataTypes[0]="json";return"script"}}),f.ajaxSetup({accepts:{script:"text/javascript, application/javascript, application/ecmascript, application/x-ecmascript"},contents:{script:/javascript|ecmascript/},converters:{"text script":function(a){f.globalEval(a);return a}}}),f.ajaxPrefilter("script",function(a){a.cache===b&&(a.cache=!1),a.crossDomain&&(a.type="GET",a.global=!1)}),f.ajaxTransport("script",function(a){if(a.crossDomain){var d,e=c.head||c.getElementsByTagName("head")[0]||c.documentElement;return{send:function(f,g){d=c.createElement("script"),d.async="async",a.scriptCharset&&(d.charset=a.scriptCharset),d.src=a.url,d.onload=d.onreadystatechange=function(a,c){if(c||!d.readyState||/loaded|complete/.test(d.readyState))d.onload=d.onreadystatechange=null,e&&d.parentNode&&e.removeChild(d),d=b,c||g(200,"success")},e.insertBefore(d,e.firstChild)},abort:function(){d&&d.onload(0,1)}}}});var ce=a.ActiveXObject?function(){for(var a in cg)cg[a](0,1)}:!1,cf=0,cg;f.ajaxSettings.xhr=a.ActiveXObject?function(){return!this.isLocal&&ch()||ci()}:ch,function(a){f.extend(f.support,{ajax:!!a,cors:!!a&&"withCredentials"in a})}(f.ajaxSettings.xhr()),f.support.ajax&&f.ajaxTransport(function(c){if(!c.crossDomain||f.support.cors){var d;return{send:function(e,g){var h=c.xhr(),i,j;c.username?h.open(c.type,c.url,c.async,c.username,c.password):h.open(c.type,c.url,c.async);if(c.xhrFields)for(j in c.xhrFields)h[j]=c.xhrFields[j];c.mimeType&&h.overrideMimeType&&h.overrideMimeType(c.mimeType),!c.crossDomain&&!e["X-Requested-With"]&&(e["X-Requested-With"]="XMLHttpRequest");try{for(j in e)h.setRequestHeader(j,e[j])}catch(k){}h.send(c.hasContent&&c.data||null),d=function(a,e){var j,k,l,m,n;try{if(d&&(e||h.readyState===4)){d=b,i&&(h.onreadystatechange=f.noop,ce&&delete cg[i]);if(e)h.readyState!==4&&h.abort();else{j=h.status,l=h.getAllResponseHeaders(),m={},n=h.responseXML,n&&n.documentElement&&(m.xml=n);try{m.text=h.responseText}catch(a){}try{k=h.statusText}catch(o){k=""}!j&&c.isLocal&&!c.crossDomain?j=m.text?200:404:j===1223&&(j=204)}}}catch(p){e||g(-1,p)}m&&g(j,k,m,l)},!c.async||h.readyState===4?d():(i=++cf,ce&&(cg||(cg={},f(a).unload(ce)),cg[i]=d),h.onreadystatechange=d)},abort:function(){d&&d(0,1)}}}});var cj={},ck,cl,cm=/^(?:toggle|show|hide)$/,cn=/^([+\-]=)?([\d+.\-]+)([a-z%]*)$/i,co,cp=[["height","marginTop","marginBottom","paddingTop","paddingBottom"],["width","marginLeft","marginRight","paddingLeft","paddingRight"],["opacity"]],cq;f.fn.extend({show:function(a,b,c){var d,e;if(a||a===0)return this.animate(ct("show",3),a,b,c);for(var g=0,h=this.length;g=i.duration+this.startTime){this.now=this.end,this.pos=this.state=1,this.update(),i.animatedProperties[this.prop]=!0;for(b in i.animatedProperties)i.animatedProperties[b]!==!0&&(g=!1);if(g){i.overflow!=null&&!f.support.shrinkWrapBlocks&&f.each(["","X","Y"],function(a,b){h.style["overflow"+b]=i.overflow[a]}),i.hide&&f(h).hide();if(i.hide||i.show)for(b in i.animatedProperties)f.style(h,b,i.orig[b]),f.removeData(h,"fxshow"+b,!0),f.removeData(h,"toggle"+b,!0);d=i.complete,d&&(i.complete=!1,d.call(h))}return!1}i.duration==Infinity?this.now=e:(c=e-this.startTime,this.state=c/i.duration,this.pos=f.easing[i.animatedProperties[this.prop]](this.state,c,0,1,i.duration),this.now=this.start+(this.end-this.start)*this.pos),this.update();return!0}},f.extend(f.fx,{tick:function(){var a,b=f.timers,c=0;for(;c-1,k={},l={},m,n;j?(l=e.position(),m=l.top,n=l.left):(m=parseFloat(h)||0,n=parseFloat(i)||0),f.isFunction(b)&&(b=b.call(a,c,g)),b.top!=null&&(k.top=b.top-g.top+m),b.left!=null&&(k.left=b.left-g.left+n),"using"in b?b.using.call(a,k):e.css(k)}},f.fn.extend({position:function(){if(!this[0])return null;var a=this[0],b=this.offsetParent(),c=this.offset(),d=cx.test(b[0].nodeName)?{top:0,left:0}:b.offset();c.top-=parseFloat(f.css(a,"marginTop"))||0,c.left-=parseFloat(f.css(a,"marginLeft"))||0,d.top+=parseFloat(f.css(b[0],"borderTopWidth"))||0,d.left+=parseFloat(f.css(b[0],"borderLeftWidth"))||0;return{top:c.top-d.top,left:c.left-d.left}},offsetParent:function(){return this.map(function(){var a=this.offsetParent||c.body;while(a&&!cx.test(a.nodeName)&&f.css(a,"position")==="static")a=a.offsetParent;return a})}}),f.each({scrollLeft:"pageXOffset",scrollTop:"pageYOffset"},function(a,c){var d=/Y/.test(c);f.fn[a]=function(e){return f.access(this,function(a,e,g){var h=cy(a);if(g===b)return h?c in h?h[c]:f.support.boxModel&&h.document.documentElement[e]||h.document.body[e]:a[e];h?h.scrollTo(d?f(h).scrollLeft():g,d?g:f(h).scrollTop()):a[e]=g},a,e,arguments.length,null)}}),f.each({Height:"height",Width:"width"},function(a,c){var d="client"+a,e="scroll"+a,g="offset"+a;f.fn["inner"+a]=function(){var a=this[0];return a?a.style?parseFloat(f.css(a,c,"padding")):this[c]():null},f.fn["outer"+a]=function(a){var b=this[0];return b?b.style?parseFloat(f.css(b,c,a?"margin":"border")):this[c]():null},f.fn[c]=function(a){return f.access(this,function(a,c,h){var i,j,k,l;if(f.isWindow(a)){i=a.document,j=i.documentElement[d];return f.support.boxModel&&j||i.body&&i.body[d]||j}if(a.nodeType===9){i=a.documentElement;if(i[d]>=i[e])return i[d];return Math.max(a.body[e],i[e],a.body[g],i[g])}if(h===b){k=f.css(a,c),l=parseFloat(k);return f.isNumeric(l)?l:k}f(a).css(c,h)},c,a,arguments.length,null)}}),a.jQuery=a.$=f,typeof define=="function"&&define.amd&&define.amd.jQuery&&define("jquery",[],function(){return f})})(window); \ No newline at end of file diff --git a/float-no-zero/examples/kml-earthquakes-require.js b/float-no-zero/examples/kml-earthquakes-require.js new file mode 100644 index 0000000000..0d54042bec --- /dev/null +++ b/float-no-zero/examples/kml-earthquakes-require.js @@ -0,0 +1,10 @@ +goog.require('ol.Map'); +goog.require('ol.View2D'); +goog.require('ol.layer.Tile'); +goog.require('ol.layer.Vector'); +goog.require('ol.source.KML'); +goog.require('ol.source.Stamen'); +goog.require('ol.style.Circle'); +goog.require('ol.style.Fill'); +goog.require('ol.style.Stroke'); +goog.require('ol.style.Style'); diff --git a/float-no-zero/examples/kml-earthquakes.html b/float-no-zero/examples/kml-earthquakes.html new file mode 100644 index 0000000000..cb0a3c2ab5 --- /dev/null +++ b/float-no-zero/examples/kml-earthquakes.html @@ -0,0 +1,75 @@ + + + + + + + + + + + Earthquakes in KML + + + + + + +
+ +
+
+
+
+
+ +
+ +
+

Earthquakes in KML

+

Demonstrates the use of a Shape symbolizer to render earthquake locations.

+
+

+ This example parses a KML file and renders the features as a vector layer. The layer is given a style that renders earthquake locations with a size relative to their magnitude. +

+

See the kml-earthquakes.js source to see how this is done.

+
+
KML, vector, style
+
+
+ +
+ + + + + + + + diff --git a/float-no-zero/examples/kml-earthquakes.js b/float-no-zero/examples/kml-earthquakes.js new file mode 100644 index 0000000000..7e1729c038 --- /dev/null +++ b/float-no-zero/examples/kml-earthquakes.js @@ -0,0 +1,82 @@ +var styleCache = {}; +var styleFunction = function(feature, resolution) { + // 2012_Earthquakes_Mag5.kml stores the magnitude of each earthquake in a + // standards-violating tag in each Placemark. We extract it from + // the Placemark's name instead. + var name = feature.get('name'); + var magnitude = parseFloat(name.substr(2)); + var radius = 5 + 20 * (magnitude - 5); + var style = styleCache[radius]; + if (!style) { + style = [new ol.style.Style({ + image: new ol.style.Circle({ + radius: radius, + fill: new ol.style.Fill({ + color: 'rgba(255, 153, 0, 0.4)' + }), + stroke: new ol.style.Stroke({ + color: 'rgba(255, 204, 0, 0.2)', + width: 1 + }) + }) + })]; + styleCache[radius] = style; + } + return style; +}; + +var vector = new ol.layer.Vector({ + source: new ol.source.KML({ + projection: 'EPSG:3857', + url: 'data/kml/2012_Earthquakes_Mag5.kml' + }), + style: styleFunction +}); + +var raster = new ol.layer.Tile({ + source: new ol.source.Stamen({ + layer: 'toner' + }) +}); + +var map = new ol.Map({ + layers: [raster, vector], + renderer: 'canvas', + target: 'map', + view: new ol.View2D({ + center: [0, 0], + zoom: 2 + }) +}); + +var info = $('#info'); +info.tooltip({ + animation: false, + trigger: 'manual' +}); + +var displayFeatureInfo = function(pixel) { + info.css({ + left: pixel[0] + 'px', + top: (pixel[1] - 15) + 'px' + }); + var feature = map.forEachFeatureAtPixel(pixel, function(feature, layer) { + return feature; + }); + if (feature) { + info.tooltip('hide') + .attr('data-original-title', feature.get('name')) + .tooltip('fixTitle') + .tooltip('show'); + } else { + info.tooltip('hide'); + } +}; + +$(map.getViewport()).on('mousemove', function(evt) { + displayFeatureInfo(map.getEventPixel(evt.originalEvent)); +}); + +map.on('singleclick', function(evt) { + displayFeatureInfo(evt.pixel); +}); diff --git a/float-no-zero/examples/kml-require.js b/float-no-zero/examples/kml-require.js new file mode 100644 index 0000000000..b61eebcd75 --- /dev/null +++ b/float-no-zero/examples/kml-require.js @@ -0,0 +1,6 @@ +goog.require('ol.Map'); +goog.require('ol.View2D'); +goog.require('ol.layer.Tile'); +goog.require('ol.layer.Vector'); +goog.require('ol.source.BingMaps'); +goog.require('ol.source.KML'); diff --git a/float-no-zero/examples/kml-timezones-require.js b/float-no-zero/examples/kml-timezones-require.js new file mode 100644 index 0000000000..e3e3f9bcd6 --- /dev/null +++ b/float-no-zero/examples/kml-timezones-require.js @@ -0,0 +1,9 @@ +goog.require('ol.Map'); +goog.require('ol.View2D'); +goog.require('ol.layer.Tile'); +goog.require('ol.layer.Vector'); +goog.require('ol.source.KML'); +goog.require('ol.source.Stamen'); +goog.require('ol.style.Fill'); +goog.require('ol.style.Stroke'); +goog.require('ol.style.Style'); diff --git a/float-no-zero/examples/kml-timezones.html b/float-no-zero/examples/kml-timezones.html new file mode 100644 index 0000000000..9db9d00077 --- /dev/null +++ b/float-no-zero/examples/kml-timezones.html @@ -0,0 +1,63 @@ + + + + + + + + + + + Timezones in KML + + + + + + +
+ +
+
+
+
+
+ +
+ +
+

Timezones in KML

+

Demonstrates rendering timezones from KML.

+
+

This example parses a KML file and renders the features as a vector layer. The layer is given a ol.style.Style that fills timezones yellow with an opacity calculated based on the current offset to local noon.

+

See the kml-timezones.js source to see how this is done.

+
+
KML, vector, style
+
+
+ +
+ + + + + + + + diff --git a/float-no-zero/examples/kml-timezones.js b/float-no-zero/examples/kml-timezones.js new file mode 100644 index 0000000000..1626671e3b --- /dev/null +++ b/float-no-zero/examples/kml-timezones.js @@ -0,0 +1,90 @@ +/* + * Compute the style of the feature. Here we want the opacity of polygons to + * be based on the offset from local noon. For example, a timezone where it is + * currently noon would have an opacity of 0.75. And a timezone where it is + * currently midnight would have an opacity of 0. This doesn't account for + * daylight savings, so don't use it to plan your vacation. + */ +var styleFunction = function(feature, resolution) { + var offset = 0; + var name = feature.get('name'); // e.g. GMT -08:30 + var match = name.match(/([\-+]\d{2}):(\d{2})$/); + if (match) { + var hours = parseInt(match[1], 10); + var minutes = parseInt(match[2], 10); + offset = 60 * hours + minutes; + } + var date = new Date(); + var local = new Date(date.getTime() + + (date.getTimezoneOffset() + offset) * 60000); + // offset from local noon (in hours) + var delta = Math.abs(12 - local.getHours() + (local.getMinutes() / 60)); + if (delta > 12) { + delta = 24 - delta; + } + var opacity = 0.75 * (1 - delta / 12); + return [new ol.style.Style({ + fill: new ol.style.Fill({ + color: [0xff, 0xff, 0x33, opacity] + }), + stroke: new ol.style.Stroke({ + color: '#ffffff' + }) + })]; +}; + +var vector = new ol.layer.Vector({ + source: new ol.source.KML({ + projection: 'EPSG:3857', + url: 'data/kml/timezones.kml' + }), + style: styleFunction +}); + +var raster = new ol.layer.Tile({ + source: new ol.source.Stamen({ + layer: 'toner' + }) +}); + +var map = new ol.Map({ + layers: [raster, vector], + renderer: 'canvas', + target: 'map', + view: new ol.View2D({ + center: [0, 0], + zoom: 2 + }) +}); + +var info = $('#info'); +info.tooltip({ + animation: false, + trigger: 'manual' +}); + +var displayFeatureInfo = function(pixel) { + info.css({ + left: pixel[0] + 'px', + top: (pixel[1] - 15) + 'px' + }); + var feature = map.forEachFeatureAtPixel(pixel, function(feature, layer) { + return feature; + }); + if (feature) { + info.tooltip('hide') + .attr('data-original-title', feature.get('name')) + .tooltip('fixTitle') + .tooltip('show'); + } else { + info.tooltip('hide'); + } +}; + +$(map.getViewport()).on('mousemove', function(evt) { + displayFeatureInfo(map.getEventPixel(evt.originalEvent)); +}); + +map.on('singleclick', function(evt) { + displayFeatureInfo(evt.pixel); +}); diff --git a/float-no-zero/examples/kml.html b/float-no-zero/examples/kml.html new file mode 100644 index 0000000000..aac41b78c9 --- /dev/null +++ b/float-no-zero/examples/kml.html @@ -0,0 +1,56 @@ + + + + + + + + + + + KML example + + + + + +
+ +
+
+
+
+
+ +
+ +
+

KML example

+

Example of using the KML source.

+
+

See the kml.js source to see how this is done.

+
+
KML
+
+
+
+   +
+
+ +
+ +
+ + + + + + + diff --git a/float-no-zero/examples/kml.js b/float-no-zero/examples/kml.js new file mode 100644 index 0000000000..f472ce5452 --- /dev/null +++ b/float-no-zero/examples/kml.js @@ -0,0 +1,51 @@ +var raster = new ol.layer.Tile({ + source: new ol.source.BingMaps({ + imagerySet: 'Aerial', + key: 'Ak-dzM4wZjSqTlzveKz5u0d4IQ4bRzVI309GxmkgSVr1ewS6iPSrOvOKhA-CJlm3' + }) +}); + +var vector = new ol.layer.Vector({ + source: new ol.source.KML({ + projection: 'EPSG:3857', + url: 'data/kml/2012-02-10.kml' + }) +}); + +var map = new ol.Map({ + layers: [raster, vector], + renderer: 'canvas', + target: document.getElementById('map'), + view: new ol.View2D({ + center: [876970.8463461736, 5859807.853963373], + zoom: 10 + }) +}); + +var displayFeatureInfo = function(pixel) { + var features = []; + map.forEachFeatureAtPixel(pixel, function(feature, layer) { + features.push(feature); + }); + if (features.length > 0) { + var info = []; + var i, ii; + for (i = 0, ii = features.length; i < ii; ++i) { + info.push(features[i].get('name')); + } + document.getElementById('info').innerHTML = info.join(', ') || '(unknown)'; + map.getTarget().style.cursor = 'pointer'; + } else { + document.getElementById('info').innerHTML = ' '; + map.getTarget().style.cursor = ''; + } +}; + +$(map.getViewport()).on('mousemove', function(evt) { + var pixel = map.getEventPixel(evt.originalEvent); + displayFeatureInfo(pixel); +}); + +map.on('singleclick', function(evt) { + displayFeatureInfo(evt.pixel); +}); diff --git a/float-no-zero/examples/layer-clipping-require.js b/float-no-zero/examples/layer-clipping-require.js new file mode 100644 index 0000000000..b59a219231 --- /dev/null +++ b/float-no-zero/examples/layer-clipping-require.js @@ -0,0 +1,4 @@ +goog.require('ol.Map'); +goog.require('ol.View2D'); +goog.require('ol.layer.Tile'); +goog.require('ol.source.OSM'); diff --git a/float-no-zero/examples/layer-clipping-webgl-require.js b/float-no-zero/examples/layer-clipping-webgl-require.js new file mode 100644 index 0000000000..f3cf7e066c --- /dev/null +++ b/float-no-zero/examples/layer-clipping-webgl-require.js @@ -0,0 +1,5 @@ +goog.require('ol.BrowserFeature'); +goog.require('ol.Map'); +goog.require('ol.View2D'); +goog.require('ol.layer.Tile'); +goog.require('ol.source.OSM'); diff --git a/float-no-zero/examples/layer-clipping-webgl.html b/float-no-zero/examples/layer-clipping-webgl.html new file mode 100644 index 0000000000..bd8dbb4f56 --- /dev/null +++ b/float-no-zero/examples/layer-clipping-webgl.html @@ -0,0 +1,56 @@ + + + + + + + + + + + Layer WebGL clipping example + + + + + +
+ +
+
+
+
+
+ + + +
+ +
+

Layer WebGL clipping example

+

Layer WebGL clipping example.

+
+

This example shows how to use the precompose and postcompose rendering hooks to clip layers using WebGL.

+

See the layer-clipping-webgl.js source to see how this is done.

+
+
clipping, webgl, openstreetmap
+
+ +
+ +
+ + + + + + + diff --git a/float-no-zero/examples/layer-clipping-webgl.js b/float-no-zero/examples/layer-clipping-webgl.js new file mode 100644 index 0000000000..f3fb361ccc --- /dev/null +++ b/float-no-zero/examples/layer-clipping-webgl.js @@ -0,0 +1,96 @@ +if (!ol.BrowserFeature.HAS_WEBGL) { + var info = document.getElementById('no-webgl'); + /** + * display error message + */ + info.style.display = ''; +} else { + + var osm = new ol.layer.Tile({ + source: new ol.source.OSM() + }); + + var map = new ol.Map({ + layers: [osm], + renderer: 'webgl', + target: 'map', + view: new ol.View2D({ + center: [0, 0], + zoom: 2 + }) + }); + + var fragmentShaderSource = [ + 'precision mediump float;', + 'void main() {', + '}' + ].join(''); + + var vertexShaderSource = [ + 'attribute vec2 a_position;', + 'void main() {', + ' gl_Position = vec4(a_position, 0, 1);', + '}' + ].join(''); + + osm.on('precompose', function(event) { + var context = event.glContext; + + var gl = context.getGL(); + var program = gl.createProgram(); + + var vertexShader = gl.createShader(gl.VERTEX_SHADER); + gl.shaderSource(vertexShader, vertexShaderSource); + gl.compileShader(vertexShader); + gl.attachShader(program, vertexShader); + + var fragmentShader = gl.createShader(gl.FRAGMENT_SHADER); + gl.shaderSource(fragmentShader, fragmentShaderSource); + gl.compileShader(fragmentShader); + gl.attachShader(program, fragmentShader); + + gl.linkProgram(program); + context.useProgram(program); + + var positionLocation = gl.getAttribLocation(program, 'a_position'); + + gl.enable(gl.STENCIL_TEST); + gl.colorMask(false, false, false, false); + gl.stencilOp(gl.KEEP, gl.KEEP, gl.REPLACE); + gl.stencilFunc(gl.ALWAYS, 1, 0xff); + + var buffer = gl.createBuffer(); + gl.bindBuffer(gl.ARRAY_BUFFER, buffer); + gl.bufferData(gl.ARRAY_BUFFER, new Float32Array([ + // first band + -1.0, -1.0, -0.75, -1.0, -1.0, 1.0, + -1.0, 1.0, -0.75, -1.0, -0.75, 1.0, + // second band + -0.5, -1.0, -0.25, -1.0, -0.5, 1.0, + -0.5, 1.0, -0.25, -1.0, -0.25, 1.0, + // third band + 0.0, -1.0, 0.25, -1.0, 0.0, 1.0, + 0.0, 1.0, 0.25, -1.0, 0.25, 1.0, + // forth band + 0.5, -1.0, 0.75, -1.0, 0.5, 1.0, + 0.5, 1.0, 0.75, -1.0, 0.75, 1.0 + ]), gl.STATIC_DRAW); + + gl.enableVertexAttribArray(positionLocation); + gl.vertexAttribPointer(positionLocation, 2, gl.FLOAT, false, 0, 0); + gl.drawArrays(gl.TRIANGLES, 0, 24); + + gl.bindBuffer(gl.ARRAY_BUFFER, null); + gl.deleteBuffer(buffer); + + gl.colorMask(true, true, true, true); + gl.stencilFunc(gl.NOTEQUAL, 0, 0xff); + gl.stencilOp(gl.KEEP, gl.KEEP, gl.KEEP); + }); + + osm.on('postcompose', function(event) { + var context = event.glContext; + var gl = context.getGL(); + gl.disable(gl.STENCIL_TEST); + }); +} diff --git a/float-no-zero/examples/layer-clipping.html b/float-no-zero/examples/layer-clipping.html new file mode 100644 index 0000000000..44ca7a1abb --- /dev/null +++ b/float-no-zero/examples/layer-clipping.html @@ -0,0 +1,51 @@ + + + + + + + + + + + Layer clipping example + + + + + +
+ +
+
+
+
+
+ +
+ +
+

Layer clipping example

+

Layer clipping example.

+
+

See the layer-clipping.js source to see how this is done.

+
+
clipping, openstreetmap
+
+ +
+ +
+ + + + + + + diff --git a/float-no-zero/examples/layer-clipping.js b/float-no-zero/examples/layer-clipping.js new file mode 100644 index 0000000000..f7bc51ce01 --- /dev/null +++ b/float-no-zero/examples/layer-clipping.js @@ -0,0 +1,36 @@ +var osm = new ol.layer.Tile({ + source: new ol.source.OSM() +}); + +var map = new ol.Map({ + layers: [osm], + renderer: 'canvas', + target: 'map', + view: new ol.View2D({ + center: [0, 0], + zoom: 2 + }) +}); + +osm.on('precompose', function(event) { + var ctx = event.context; + ctx.save(); + ctx.translate(ctx.canvas.width / 2, ctx.canvas.height / 2); + ctx.scale(3, 3); + ctx.translate(-75, -80); + ctx.beginPath(); + ctx.moveTo(75, 40); + ctx.bezierCurveTo(75, 37, 70, 25, 50, 25); + ctx.bezierCurveTo(20, 25, 20, 62.5, 20, 62.5); + ctx.bezierCurveTo(20, 80, 40, 102, 75, 120); + ctx.bezierCurveTo(110, 102, 130, 80, 130, 62.5); + ctx.bezierCurveTo(130, 62.5, 130, 25, 100, 25); + ctx.bezierCurveTo(85, 25, 75, 37, 75, 40); + ctx.clip(); + ctx.setTransform(1, 0, 0, 1, 0, 0); +}); + +osm.on('postcompose', function(event) { + var ctx = event.context; + ctx.restore(); +}); diff --git a/float-no-zero/examples/layer-group-require.js b/float-no-zero/examples/layer-group-require.js new file mode 100644 index 0000000000..21fcec0af1 --- /dev/null +++ b/float-no-zero/examples/layer-group-require.js @@ -0,0 +1,8 @@ +goog.require('ol.Map'); +goog.require('ol.View2D'); +goog.require('ol.dom.Input'); +goog.require('ol.layer.Group'); +goog.require('ol.layer.Tile'); +goog.require('ol.proj'); +goog.require('ol.source.MapQuest'); +goog.require('ol.source.TileJSON'); diff --git a/float-no-zero/examples/layer-group.html b/float-no-zero/examples/layer-group.html new file mode 100644 index 0000000000..cd5bba33d2 --- /dev/null +++ b/float-no-zero/examples/layer-group.html @@ -0,0 +1,126 @@ + + + + + + + + + + + + Layer group example + + + + + +
+ +
+
+
+ +

Layer group example

+

Example of a map with layer group.

+
+

See the layer-group.js source to see how this is done.

+
+
tilejson, input, bind, group, layergroup
+
+ +
+
Click on layer nodes below to change their properties.
+
    +
  • OpenAerial layer +
    + + + + + + + + + + + +
    +
  • +
  • Layer group +
    + + + + + + + + + + + +
    +
      +
    • Food insecurity layer +
      + + + + + + + + + + + +
      +
    • +
    • World borders layer +
      + + + + + + + + + + + +
      +
    • +
    +
  • +
+ +
+ +
+ + + + + + + diff --git a/float-no-zero/examples/layer-group.js b/float-no-zero/examples/layer-group.js new file mode 100644 index 0000000000..bfa1e7a897 --- /dev/null +++ b/float-no-zero/examples/layer-group.js @@ -0,0 +1,54 @@ +var map = new ol.Map({ + layers: [ + new ol.layer.Tile({ + source: new ol.source.MapQuest({layer: 'sat'}) + }), new ol.layer.Group({ + layers: [ + new ol.layer.Tile({ + source: new ol.source.TileJSON({ + url: 'http://api.tiles.mapbox.com/v3/' + + 'mapbox.20110804-hoa-foodinsecurity-3month.jsonp', + crossOrigin: 'anonymous' + }) + }), + new ol.layer.Tile({ + source: new ol.source.TileJSON({ + url: 'http://api.tiles.mapbox.com/v3/' + + 'mapbox.world-borders-light.jsonp', + crossOrigin: 'anonymous' + }) + }) + ] + }) + ], + renderer: exampleNS.getRendererFromQueryString(), + target: 'map', + view: new ol.View2D({ + center: ol.proj.transform([37.40570, 8.81566], 'EPSG:4326', 'EPSG:3857'), + zoom: 4 + }) +}); + +function bindInputs(layerid, layer) { + new ol.dom.Input($(layerid + ' .visible')[0]) + .bindTo('checked', layer, 'visible'); + $.each(['opacity', 'hue', 'saturation', 'contrast', 'brightness'], + function(i, v) { + new ol.dom.Input($(layerid + ' .' + v)[0]) + .bindTo('value', layer, v) + .transform(parseFloat, String); + } + ); +} +map.getLayers().forEach(function(layer, i) { + bindInputs('#layer' + i, layer); + if (layer instanceof ol.layer.Group) { + layer.getLayers().forEach(function(sublayer, j) { + bindInputs('#layer' + i + j, sublayer); + }); + } +}); + +$('#layertree li > span').click(function() { + $(this).siblings('fieldset').toggle(); +}).siblings('fieldset').hide(); diff --git a/float-no-zero/examples/layer-spy-require.js b/float-no-zero/examples/layer-spy-require.js new file mode 100644 index 0000000000..6ef82a9158 --- /dev/null +++ b/float-no-zero/examples/layer-spy-require.js @@ -0,0 +1,5 @@ +goog.require('ol.Map'); +goog.require('ol.View2D'); +goog.require('ol.layer.Tile'); +goog.require('ol.proj'); +goog.require('ol.source.BingMaps'); diff --git a/float-no-zero/examples/layer-spy.html b/float-no-zero/examples/layer-spy.html new file mode 100644 index 0000000000..3197da3bc9 --- /dev/null +++ b/float-no-zero/examples/layer-spy.html @@ -0,0 +1,60 @@ + + + + + + + + + + + Layer Spy Example + + + + + +
+ +
+
+
+
+
+ +
+ +
+

Layer spy example

+

View a portion of one layer over another

+
+

+ Layer rendering can be manipulated in precompose and postcompose event listeners. + These listeners get an event with a reference to the Canvas rendering context. + In this example, the precompose listener sets a clipping mask around the most + recent mouse position, giving you a spyglass effect for viewing one layer over another. +

+

+ Move around the map to see the effect. Use the ↑ up and ↓ down arrow keys to adjust the spyglass size. +

+

See the layer-spy.js source to see how this is done.

+
+
spy, image manipulation
+
+ +
+ +
+ + + + + + + diff --git a/float-no-zero/examples/layer-spy.js b/float-no-zero/examples/layer-spy.js new file mode 100644 index 0000000000..fc97da1cfe --- /dev/null +++ b/float-no-zero/examples/layer-spy.js @@ -0,0 +1,61 @@ +var key = 'Ak-dzM4wZjSqTlzveKz5u0d4IQ4bRzVI309GxmkgSVr1ewS6iPSrOvOKhA-CJlm3'; + +var roads = new ol.layer.Tile({ + source: new ol.source.BingMaps({key: key, imagerySet: 'Road'}) +}); + +var imagery = new ol.layer.Tile({ + source: new ol.source.BingMaps({key: key, imagerySet: 'Aerial'}) +}); + +var map = new ol.Map({ + layers: [roads, imagery], + renderer: 'canvas', + target: 'map', + view: new ol.View2D({ + center: ol.proj.transform([-109, 46.5], 'EPSG:4326', 'EPSG:3857'), + zoom: 6 + }) +}); + +var radius = 75; +$(document).keydown(function(evt) { + if (evt.which === 38) { + radius = Math.min(radius + 5, 150); + map.render(); + } else if (evt.which === 40) { + radius = Math.max(radius - 5, 25); + map.render(); + } +}); + +// get the pixel position with every move +var mousePosition = null; +$(map.getViewport()).on('mousemove', function(evt) { + mousePosition = map.getEventPixel(evt.originalEvent); + map.render(); +}).on('mouseout', function() { + mousePosition = null; + map.render(); +}); + +// before rendering the layer, do some clipping +imagery.on('precompose', function(event) { + var ctx = event.context; + ctx.save(); + ctx.beginPath(); + if (mousePosition) { + // only show a circle around the mouse + ctx.arc(mousePosition[0], mousePosition[1], radius, 0, 2 * Math.PI); + ctx.lineWidth = 5; + ctx.strokeStyle = 'rgba(0,0,0,0.5)'; + ctx.stroke(); + } + ctx.clip(); +}); + +// after rendering the layer, restore the canvas context +imagery.on('postcompose', function(event) { + var ctx = event.context; + ctx.restore(); +}); diff --git a/float-no-zero/examples/layer-swipe-require.js b/float-no-zero/examples/layer-swipe-require.js new file mode 100644 index 0000000000..e197f81e73 --- /dev/null +++ b/float-no-zero/examples/layer-swipe-require.js @@ -0,0 +1,5 @@ +goog.require('ol.Map'); +goog.require('ol.View2D'); +goog.require('ol.layer.Tile'); +goog.require('ol.source.BingMaps'); +goog.require('ol.source.OSM'); diff --git a/float-no-zero/examples/layer-swipe.html b/float-no-zero/examples/layer-swipe.html new file mode 100644 index 0000000000..c766274bfe --- /dev/null +++ b/float-no-zero/examples/layer-swipe.html @@ -0,0 +1,52 @@ + + + + + + + + + + + Layer Swipe example + + + + + +
+ +
+
+
+ +
+
+ +
+ +
+

Layer Swipe example

+

Example of a Layer swipe map.

+
+

See the layer-swipe.js source to see how this is done.

+
+
swipe, openstreetmap
+
+ +
+ +
+ + + + + + + diff --git a/float-no-zero/examples/layer-swipe.js b/float-no-zero/examples/layer-swipe.js new file mode 100644 index 0000000000..62ae9920af --- /dev/null +++ b/float-no-zero/examples/layer-swipe.js @@ -0,0 +1,40 @@ +var osm = new ol.layer.Tile({ + source: new ol.source.OSM() +}); +var bing = new ol.layer.Tile({ + source: new ol.source.BingMaps({ + key: 'Ak-dzM4wZjSqTlzveKz5u0d4IQ4bRzVI309GxmkgSVr1ewS6iPSrOvOKhA-CJlm3', + imagerySet: 'Aerial' + }) +}); + +var map = new ol.Map({ + layers: [osm, bing], + renderer: 'canvas', + target: 'map', + view: new ol.View2D({ + center: [0, 0], + zoom: 2 + }) +}); + +var swipe = document.getElementById('swipe'); + +bing.on('precompose', function(event) { + var ctx = event.context; + var width = ctx.canvas.width * (swipe.value / 100); + + ctx.save(); + ctx.beginPath(); + ctx.rect(width, 0, ctx.canvas.width - width, ctx.canvas.height); + ctx.clip(); +}); + +bing.on('postcompose', function(event) { + var ctx = event.context; + ctx.restore(); +}); + +swipe.addEventListener('input', function() { + map.render(); +}, false); diff --git a/float-no-zero/examples/loader.js b/float-no-zero/examples/loader.js new file mode 100644 index 0000000000..d5dda87429 --- /dev/null +++ b/float-no-zero/examples/loader.js @@ -0,0 +1,78 @@ +/** + * Loader to add ol.css, ol.js and the example-specific js file to the + * documents. + * + * This loader is used for the hosted examples. It is used in place of the + * development loader (examples/loader.js). + * + * ol.js, ol-simple.js, ol-whitespace.js, and ol-deps.js are built + * by OL3's build.py script. They are located in the ../build/ directory, + * relatively to this script. + * + * The script must be named loader.js. + * + * Usage: + * + * + */ + +(function() { + + var i, pair; + + var href = window.location.href, start, end, paramsString, pairs, + pageParams = {}; + if (href.indexOf('?') > 0) { + start = href.indexOf('?') + 1; + end = href.indexOf('#') > 0 ? href.indexOf('#') : href.length; + paramsString = href.substring(start, end); + pairs = paramsString.split(/[&;]/); + for (i = 0; i < pairs.length; ++i) { + pair = pairs[i].split('='); + if (pair[0]) { + pageParams[decodeURIComponent(pair[0])] = + decodeURIComponent(pair[1]); + } + } + } + + var scripts = document.getElementsByTagName('script'); + var src, index, search, chunks, scriptParams = {}; + for (i = scripts.length - 1; i >= 0; --i) { + src = scripts[i].getAttribute('src'); + if (~(index = src.indexOf('loader.js?'))) { + search = src.substr(index + 10); + chunks = search ? search.split('&') : []; + for (i = chunks.length - 1; i >= 0; --i) { + pair = chunks[i].split('='); + if (pair[0]) { + scriptParams[decodeURIComponent(pair[0])] = + decodeURIComponent(pair[1]); + } + } + break; + } + } + + var oljs = 'ol.js', mode; + if ('mode' in pageParams) { + mode = pageParams.mode.toLowerCase(); + if (mode == 'debug') { + mode = 'raw'; + } + if (mode != 'advanced' && mode != 'raw') { + oljs = 'ol-' + mode + '.js'; + } + } + + var scriptId = encodeURIComponent(scriptParams.id); + if (mode != 'raw') { + document.write(''); + } else { + window.CLOSURE_NO_DEPS = true; // we've got our own deps file + document.write(''); + document.write(''); + document.write(''); + } + document.write(''); +}()); diff --git a/float-no-zero/examples/localized-openstreetmap-require.js b/float-no-zero/examples/localized-openstreetmap-require.js new file mode 100644 index 0000000000..e76328140e --- /dev/null +++ b/float-no-zero/examples/localized-openstreetmap-require.js @@ -0,0 +1,5 @@ +goog.require('ol.Attribution'); +goog.require('ol.Map'); +goog.require('ol.View2D'); +goog.require('ol.layer.Tile'); +goog.require('ol.source.OSM'); diff --git a/float-no-zero/examples/localized-openstreetmap.html b/float-no-zero/examples/localized-openstreetmap.html new file mode 100644 index 0000000000..cdcc3b8f3a --- /dev/null +++ b/float-no-zero/examples/localized-openstreetmap.html @@ -0,0 +1,51 @@ + + + + + + + + + + + Localized OpenStreetMap example + + + + + +
+ +
+
+
+
+
+ +
+ +
+

Localized OpenStreetMap example

+

Example of a localized OpenStreetMap map with a custom tile server and a custom attribution. The base layer is OpenCycleMap with an overlay from OpenSeaMap. The OpenSeaMap tile server does not support CORS headers.

+
+

See the localized-openstreetmap.js source to see how this is done.

+
+
cors, localized-openstreetmap, openseamap, openstreetmap
+
+ +
+ +
+ + + + + + + diff --git a/float-no-zero/examples/localized-openstreetmap.js b/float-no-zero/examples/localized-openstreetmap.js new file mode 100644 index 0000000000..5e47ed3207 --- /dev/null +++ b/float-no-zero/examples/localized-openstreetmap.js @@ -0,0 +1,44 @@ +// tiles.openseamap.org does not set CORS headers, so we have to disable +// crossOrigin and we cannot use WebGL. + +var openCycleMapLayer = new ol.layer.Tile({ + source: new ol.source.OSM({ + attributions: [ + new ol.Attribution({ + html: 'All maps © ' + + 'OpenCycleMap' + }), + ol.source.OSM.DATA_ATTRIBUTION + ], + url: 'http://{a-c}.tile.opencyclemap.org/cycle/{z}/{x}/{y}.png' + }) +}); + +var openSeaMapLayer = new ol.layer.Tile({ + source: new ol.source.OSM({ + attributions: [ + new ol.Attribution({ + html: 'All maps © ' + + 'OpenSeaMap' + }), + ol.source.OSM.DATA_ATTRIBUTION + ], + crossOrigin: null, + url: 'http://tiles.openseamap.org/seamark/{z}/{x}/{y}.png' + }) +}); + + +var map = new ol.Map({ + layers: [ + openCycleMapLayer, + openSeaMapLayer + ], + renderer: 'canvas', + target: 'map', + view: new ol.View2D({ + maxZoom: 18, + center: [-244780.24508882355, 5986452.183179816], + zoom: 15 + }) +}); diff --git a/float-no-zero/examples/mapguide-untiled-require.js b/float-no-zero/examples/mapguide-untiled-require.js new file mode 100644 index 0000000000..6e15a9385c --- /dev/null +++ b/float-no-zero/examples/mapguide-untiled-require.js @@ -0,0 +1,4 @@ +goog.require('ol.Map'); +goog.require('ol.View2D'); +goog.require('ol.layer.Image'); +goog.require('ol.source.MapGuide'); diff --git a/float-no-zero/examples/mapguide-untiled.html b/float-no-zero/examples/mapguide-untiled.html new file mode 100644 index 0000000000..a0acdfc64f --- /dev/null +++ b/float-no-zero/examples/mapguide-untiled.html @@ -0,0 +1,51 @@ + + + + + + + + + + + MapGuide untiled example + + + + + +
+ +
+
+
+
+
+ +
+ +
+

MapGuide untiled example

+

Example of a untiled MapGuide map.

+
+

See the mapguide-untiled.js source to see how this is done.

+
+
mapguide
+
+ +
+ +
+ + + + + + + diff --git a/float-no-zero/examples/mapguide-untiled.js b/float-no-zero/examples/mapguide-untiled.js new file mode 100644 index 0000000000..6bb00678b3 --- /dev/null +++ b/float-no-zero/examples/mapguide-untiled.js @@ -0,0 +1,34 @@ +var mdf = 'Library://Samples/Sheboygan/Maps/Sheboygan.MapDefinition'; +var agentUrl = + 'http://data.mapguide.com/mapguide/mapagent/mapagent.fcgi?USERNAME=Anonymous'; +var bounds = [ + -87.865114442365922, + 43.665065564837931, + -87.595394059497067, + 43.823852564430069 +]; +var map = new ol.Map({ + layers: [ + new ol.layer.Image({ + source: new ol.source.MapGuide({ + projection: 'EPSG:4326', + url: agentUrl, + useOverlay: false, + metersPerUnit: 111319.4908, //value returned from mapguide + params: { + MAPDEFINITION: mdf, + FORMAT: 'PNG' + }, + ratio: 2, + extent: bounds + }) + }) + ], + renderer: 'canvas', + target: 'map', + view: new ol.View2D({ + center: [-87.7302542509315, 43.744459064634], + projection: 'EPSG:4326', + zoom: 12 + }) +}); diff --git a/float-no-zero/examples/mapquest-require.js b/float-no-zero/examples/mapquest-require.js new file mode 100644 index 0000000000..0149e26ed2 --- /dev/null +++ b/float-no-zero/examples/mapquest-require.js @@ -0,0 +1,6 @@ +goog.require('ol.Map'); +goog.require('ol.View2D'); +goog.require('ol.layer.Group'); +goog.require('ol.layer.Tile'); +goog.require('ol.proj'); +goog.require('ol.source.MapQuest'); diff --git a/float-no-zero/examples/mapquest.html b/float-no-zero/examples/mapquest.html new file mode 100644 index 0000000000..4cf374813b --- /dev/null +++ b/float-no-zero/examples/mapquest.html @@ -0,0 +1,56 @@ + + + + + + + + + + + MapQuest example + + + + + +
+ +
+
+
+ +
+
+ +
+ +
+

MapQuest example

+

Example of a MapQuest map.

+
+

See the mapquest.js source to see how this is done.

+
+
mapquest
+
+ +
+ +
+ + + + + + + diff --git a/float-no-zero/examples/mapquest.js b/float-no-zero/examples/mapquest.js new file mode 100644 index 0000000000..9c6aa559c2 --- /dev/null +++ b/float-no-zero/examples/mapquest.js @@ -0,0 +1,43 @@ +var layers = [ + new ol.layer.Tile({ + style: 'Road', + source: new ol.source.MapQuest({layer: 'osm'}) + }), + new ol.layer.Tile({ + style: 'Aerial', + visible: false, + source: new ol.source.MapQuest({layer: 'sat'}) + }), + new ol.layer.Group({ + style: 'AerialWithLabels', + visible: false, + layers: [ + new ol.layer.Tile({ + source: new ol.source.MapQuest({layer: 'sat'}) + }), + new ol.layer.Tile({ + source: new ol.source.MapQuest({layer: 'hyb'}) + }) + ] + }) +]; + +var map = new ol.Map({ + layers: layers, + renderer: exampleNS.getRendererFromQueryString(), + target: 'map', + view: new ol.View2D({ + center: ol.proj.transform( + [-73.979378, 40.702222], 'EPSG:4326', 'EPSG:3857'), + zoom: 9 + }) +}); + +$('#layer-select').change(function() { + var style = $(this).find(':selected').val(); + var i, ii; + for (i = 0, ii = layers.length; i < ii; ++i) { + layers[i].set('visible', (layers[i].get('style') == style)); + } +}); +$('#layer-select').trigger('change'); diff --git a/float-no-zero/examples/min-max-resolution-require.js b/float-no-zero/examples/min-max-resolution-require.js new file mode 100644 index 0000000000..6ed5346733 --- /dev/null +++ b/float-no-zero/examples/min-max-resolution-require.js @@ -0,0 +1,5 @@ +goog.require('ol.Map'); +goog.require('ol.View2D'); +goog.require('ol.layer.Tile'); +goog.require('ol.source.OSM'); +goog.require('ol.source.TileJSON'); diff --git a/float-no-zero/examples/min-max-resolution.html b/float-no-zero/examples/min-max-resolution.html new file mode 100644 index 0000000000..cce4c11a8f --- /dev/null +++ b/float-no-zero/examples/min-max-resolution.html @@ -0,0 +1,60 @@ + + + + + + + + + + + Min/max resolution example + + + + + +
+ +
+
+
+
+
+ +
+ +
+

Min/max resolution example

+

Show/hide layers depending on current view resolution.

+
+

+ Zoom in twice: the MapBox layer should hide whereas the OSM layer should be shown. +

+

+ If you continue to zoom in, you'll see the OSM layer also disappear. +

+

+ The rendering of the layers are here controlled using minResolution and maxResolution options. +

+

See the min-max-resolution.js source to see how this is done.

+
+
minResolution, maxResolution, resolution
+
+ +
+ +
+ + + + + + + diff --git a/float-no-zero/examples/min-max-resolution.js b/float-no-zero/examples/min-max-resolution.js new file mode 100644 index 0000000000..b5dc2f0cf3 --- /dev/null +++ b/float-no-zero/examples/min-max-resolution.js @@ -0,0 +1,27 @@ +/** + * Create the map. + */ +var map = new ol.Map({ + layers: [ + new ol.layer.Tile({ + source: new ol.source.OSM(), + minResolution: 200, + maxResolution: 2000 + }), + new ol.layer.Tile({ + source: new ol.source.TileJSON({ + url: 'http://api.tiles.mapbox.com/v3/' + + 'mapbox.natural-earth-hypso-bathy.jsonp', + crossOrigin: 'anonymous' + }), + minResolution: 2000, + maxResolution: 20000 + }) + ], + renderer: exampleNS.getRendererFromQueryString(), + target: 'map', + view: new ol.View2D({ + center: [653600, 5723680], + zoom: 5 + }) +}); diff --git a/float-no-zero/examples/mobile-full-screen-require.js b/float-no-zero/examples/mobile-full-screen-require.js new file mode 100644 index 0000000000..bb9a112f35 --- /dev/null +++ b/float-no-zero/examples/mobile-full-screen-require.js @@ -0,0 +1,5 @@ +goog.require('ol.Geolocation'); +goog.require('ol.Map'); +goog.require('ol.View2D'); +goog.require('ol.layer.Tile'); +goog.require('ol.source.BingMaps'); diff --git a/float-no-zero/examples/mobile-full-screen.html b/float-no-zero/examples/mobile-full-screen.html new file mode 100644 index 0000000000..bc146cd230 --- /dev/null +++ b/float-no-zero/examples/mobile-full-screen.html @@ -0,0 +1,29 @@ + + + + + + + Mobile full screen example + + + +
+ + + + +
+
Mobile full screen example
+
Example of a full screen map.
+
fullscreen, bing, geolocation, mobile
+
+ + diff --git a/float-no-zero/examples/mobile-full-screen.js b/float-no-zero/examples/mobile-full-screen.js new file mode 100644 index 0000000000..bde27ee0ff --- /dev/null +++ b/float-no-zero/examples/mobile-full-screen.js @@ -0,0 +1,27 @@ +var view = new ol.View2D({ + center: [0, 0], + zoom: 2 +}); + +var map = new ol.Map({ + layers: [ + new ol.layer.Tile({ + source: new ol.source.BingMaps({ + key: 'Ak-dzM4wZjSqTlzveKz5u0d4IQ4bRzVI309GxmkgSVr1ewS6iPSrOvOKhA-CJlm3', + imagerySet: 'Road' + }) + }) + ], + renderer: exampleNS.getRendererFromQueryString(), + target: 'map', + view: view +}); + +var geolocation = new ol.Geolocation({ + tracking: true +}); +geolocation.bindTo('projection', view); +geolocation.once('change:position', function() { + view.setCenter(geolocation.getPosition()); + view.setResolution(2.388657133911758); +}); diff --git a/float-no-zero/examples/modify-features-require.js b/float-no-zero/examples/modify-features-require.js new file mode 100644 index 0000000000..2649db675f --- /dev/null +++ b/float-no-zero/examples/modify-features-require.js @@ -0,0 +1,13 @@ +goog.require('ol.Map'); +goog.require('ol.View2D'); +goog.require('ol.interaction'); +goog.require('ol.interaction.Modify'); +goog.require('ol.interaction.Select'); +goog.require('ol.layer.Tile'); +goog.require('ol.layer.Vector'); +goog.require('ol.source.GeoJSON'); +goog.require('ol.source.MapQuest'); +goog.require('ol.style.Circle'); +goog.require('ol.style.Fill'); +goog.require('ol.style.Stroke'); +goog.require('ol.style.Style'); diff --git a/float-no-zero/examples/modify-features.html b/float-no-zero/examples/modify-features.html new file mode 100644 index 0000000000..9be79fe94a --- /dev/null +++ b/float-no-zero/examples/modify-features.html @@ -0,0 +1,57 @@ + + + + + + + + + + + + Modify features example + + + + + +
+ +
+
+
+ +
+
+ +
+ +
+

Modify features example

+

Example of using the Modify interaction.

+
+

Select a feature on the Test Data layer and drag the circle that appears when the cursor gets close to the selected geometry. On the Real data (topology) layer, editing adjacent countries that are selected preserves the topology.

+

See the modify-features.js source to see how this is done.

+
+
modify, edit, vector
+
+ +
+ +
+ + + + + + + diff --git a/float-no-zero/examples/modify-features.js b/float-no-zero/examples/modify-features.js new file mode 100644 index 0000000000..0793608ad1 --- /dev/null +++ b/float-no-zero/examples/modify-features.js @@ -0,0 +1,261 @@ +var raster = new ol.layer.Tile({ + style: 'Aerial', + source: new ol.source.MapQuest({ + layer: 'sat' + }) +}); + +var styleFunction = (function() { + var styles = {}; + var image = new ol.style.Circle({ + radius: 5, + fill: null, + stroke: new ol.style.Stroke({color: 'orange', width: 2}) + }); + styles['Point'] = [new ol.style.Style({image: image})]; + styles['Polygon'] = [new ol.style.Style({ + stroke: new ol.style.Stroke({ + color: 'blue', + width: 3 + }), + fill: new ol.style.Fill({ + color: 'rgba(0, 0, 255, 0.1)' + }) + })]; + styles['MultiLinestring'] = [new ol.style.Style({ + stroke: new ol.style.Stroke({ + color: 'green', + width: 3 + }) + })]; + styles['MultiPolygon'] = [new ol.style.Style({ + stroke: new ol.style.Stroke({ + color: 'yellow', + width: 1 + }), + fill: new ol.style.Fill({ + color: 'rgba(255, 255, 0, 0.1)' + }) + })]; + styles['default'] = [new ol.style.Style({ + stroke: new ol.style.Stroke({ + color: 'red', + width: 3 + }), + fill: new ol.style.Fill({ + color: 'rgba(255, 0, 0, 0.1)' + }), + image: image + })]; + return function(feature, resolution) { + return styles[feature.getGeometry().getType()] || styles['default']; + }; +})(); + +var testDataSource = new ol.source.GeoJSON( + /** @type {olx.source.GeoJSONOptions} */ ({ + object: { + 'type': 'FeatureCollection', + 'crs': { + 'type': 'name', + 'properties': { + 'name': 'EPSG:3857' + } + }, + 'features': [ + { + 'type': 'Feature', + 'geometry': { + 'type': 'Point', + 'coordinates': [0, 0] + } + }, + { + 'type': 'Feature', + 'geometry': { + 'type': 'MultiPoint', + 'coordinates': [[-2e6, 0], [0, -2e6]] + } + }, + { + 'type': 'Feature', + 'geometry': { + 'type': 'LineString', + 'coordinates': [[4e6, -2e6], [8e6, 2e6], [9e6, 2e6]] + } + }, + { + 'type': 'Feature', + 'geometry': { + 'type': 'LineString', + 'coordinates': [[4e6, -2e6], [8e6, 2e6], [8e6, 3e6]] + } + }, + { + 'type': 'Feature', + 'geometry': { + 'type': 'Polygon', + 'coordinates': [[[-5e6, -1e6], [-4e6, 1e6], + [-3e6, -1e6], [-5e6, -1e6]]] + } + }, + { + 'type': 'Feature', + 'geometry': { + 'type': 'MultiLineString', + 'coordinates': [ + [[-1e6, -7.5e5], [-1e6, 7.5e5]], + [[1e6, -7.5e5], [1e6, 7.5e5]], + [[-7.5e5, -1e6], [7.5e5, -1e6]], + [[-7.5e5, 1e6], [7.5e5, 1e6]] + ] + } + }, + { + 'type': 'Feature', + 'geometry': { + 'type': 'MultiPolygon', + 'coordinates': [ + [[[-5e6, 6e6], [-5e6, 8e6], [-3e6, 8e6], + [-3e6, 6e6], [-5e6, 6e6]]], + [[[-2e6, 6e6], [-2e6, 8e6], [0e6, 8e6], + [0e6, 6e6], [-2e6, 6e6]]], + [[[1e6, 6e6], [1e6, 8e6], [3e6, 8e6], + [3e6, 6e6], [1e6, 6e6]]] + ] + } + }, + { + 'type': 'Feature', + 'geometry': { + 'type': 'GeometryCollection', + 'geometries': [ + { + 'type': 'LineString', + 'coordinates': [[-5e6, -5e6], [0e6, -5e6]] + }, + { + 'type': 'Point', + 'coordinates': [4e6, -5e6] + }, + { + 'type': 'Polygon', + 'coordinates': [ + [[1e6, -6e6], [2e6, -4e6], [3e6, -6e6], [1e6, -6e6]] + ] + } + ] + } + } + ] + } + })); + +var testDataLayer = new ol.layer.Vector({ + source: testDataSource, + style: styleFunction +}); + +var realDataSource = new ol.source.GeoJSON({ + projection: 'EPSG:3857', + url: 'data/geojson/countries.geojson' +}); + +var realDataLayer = new ol.layer.Vector({ + source: realDataSource, + style: styleFunction +}); + +var overlayStyle = (function() { + var styles = {}; + styles['Polygon'] = [ + new ol.style.Style({ + fill: new ol.style.Fill({ + color: [255, 255, 255, 0.5] + }) + }), + new ol.style.Style({ + stroke: new ol.style.Stroke({ + color: [255, 255, 255, 1], + width: 5 + }) + }), + new ol.style.Style({ + stroke: new ol.style.Stroke({ + color: [0, 153, 255, 1], + width: 3 + }) + }) + ]; + styles['MultiPolygon'] = styles['Polygon']; + + styles['LineString'] = [ + new ol.style.Style({ + stroke: new ol.style.Stroke({ + color: [255, 255, 255, 1], + width: 5 + }) + }), + new ol.style.Style({ + stroke: new ol.style.Stroke({ + color: [0, 153, 255, 1], + width: 3 + }) + }) + ]; + styles['MultiLineString'] = styles['LineString']; + + styles['Point'] = [ + new ol.style.Style({ + image: new ol.style.Circle({ + radius: 7, + fill: new ol.style.Fill({ + color: [0, 153, 255, 1] + }), + stroke: new ol.style.Stroke({ + color: [255, 255, 255, 0.75], + width: 1.5 + }) + }), + zIndex: 100000 + }) + ]; + styles['MultiPoint'] = styles['Point']; + + styles['GeometryCollection'] = styles['Polygon'].concat(styles['Point']); + + return function(feature, resolution) { + return styles[feature.getGeometry().getType()]; + }; +})(); + +var select = new ol.interaction.Select({ + style: overlayStyle +}); + +var modify = new ol.interaction.Modify({ + features: select.getFeatures(), + style: overlayStyle +}); + +var map = new ol.Map({ + interactions: ol.interaction.defaults().extend([select, modify]), + layers: [raster, testDataLayer, realDataLayer], + renderer: 'canvas', + target: 'map', + view: new ol.View2D({ + center: [0, 0], + zoom: 2 + }) +}); + +$('#layer-select').change(function() { + select.getFeatures().clear(); + var index = $(this).children().index($(this).find(':selected')); + var layers = [testDataLayer, realDataLayer]; + var i, ii; + for (i = 0, ii = layers.length; i < ii; ++i) { + layers[i].setVisible(index == i); + } +}); +$('#layer-select').trigger('change'); diff --git a/float-no-zero/examples/mouse-position-require.js b/float-no-zero/examples/mouse-position-require.js new file mode 100644 index 0000000000..77780918bb --- /dev/null +++ b/float-no-zero/examples/mouse-position-require.js @@ -0,0 +1,9 @@ +goog.require('ol.Map'); +goog.require('ol.View2D'); +goog.require('ol.control'); +goog.require('ol.control.MousePosition'); +goog.require('ol.coordinate'); +goog.require('ol.dom.Input'); +goog.require('ol.layer.Tile'); +goog.require('ol.proj'); +goog.require('ol.source.OSM'); diff --git a/float-no-zero/examples/mouse-position.html b/float-no-zero/examples/mouse-position.html new file mode 100644 index 0000000000..1f81320e37 --- /dev/null +++ b/float-no-zero/examples/mouse-position.html @@ -0,0 +1,59 @@ + + + + + + + + + + + Mouse position example + + + + + +
+ +
+
+
+
+
+ +
+
+

Mouse position example

+

Example of a mouse position control, outside the map.

+
+

See the mouse-position.js source to see how this is done.

+
+
mouse-position, openstreetmap
+
+ + + + + +
+
 
+
+ +
+ + + + + + + diff --git a/float-no-zero/examples/mouse-position.js b/float-no-zero/examples/mouse-position.js new file mode 100644 index 0000000000..e2acd89bdd --- /dev/null +++ b/float-no-zero/examples/mouse-position.js @@ -0,0 +1,42 @@ +var mousePositionControl = new ol.control.MousePosition({ + coordinateFormat: ol.coordinate.createStringXY(4), + projection: 'EPSG:4326', + // comment the following two lines to have the mouse position + // be placed within the map. + className: 'custom-mouse-position', + target: document.getElementById('mouse-position'), + undefinedHTML: ' ' +}); + +var map = new ol.Map({ + controls: ol.control.defaults().extend([mousePositionControl]), + layers: [ + new ol.layer.Tile({ + source: new ol.source.OSM() + }) + ], + renderer: exampleNS.getRendererFromQueryString(), + target: 'map', + view: new ol.View2D({ + center: [0, 0], + zoom: 2 + }) +}); + +var projectionSelect = new ol.dom.Input(document.getElementById('projection')); +projectionSelect.bindTo('value', mousePositionControl, 'projection') + .transform( + function(code) { + // projectionSelect.value -> mousePositionControl.projection + return ol.proj.get(/** @type {string} */ (code)); + }, + function(projection) { + // mousePositionControl.projection -> projectionSelect.value + return projection.getCode(); + }); + +var precisionInput = document.getElementById('precision'); +precisionInput.addEventListener('change', function() { + var format = ol.coordinate.createStringXY(precisionInput.valueAsNumber); + mousePositionControl.setCoordinateFormat(format); +}, false); diff --git a/float-no-zero/examples/moveend-require.js b/float-no-zero/examples/moveend-require.js new file mode 100644 index 0000000000..221faa5f7d --- /dev/null +++ b/float-no-zero/examples/moveend-require.js @@ -0,0 +1,6 @@ +goog.require('ol.Map'); +goog.require('ol.View2D'); +goog.require('ol.extent'); +goog.require('ol.layer.Tile'); +goog.require('ol.proj'); +goog.require('ol.source.OSM'); diff --git a/float-no-zero/examples/moveend.html b/float-no-zero/examples/moveend.html new file mode 100644 index 0000000000..4293b19b93 --- /dev/null +++ b/float-no-zero/examples/moveend.html @@ -0,0 +1,54 @@ + + + + + + + + + + + Moveend Example + + + + + +
+
+
+
+
+
+ +
+
+

Move end example

+

Use of the moveend event.

+
+

In this example, a listener is registered for the map's moveend event. Whenever this listener is called, it updates the inputs below with the map extent in decimal degrees.

+

See the moveend.js source for details on how this is done.

+
+
moveend, map, event
+ + + + +
+ +
+ +
+ + + + + + + diff --git a/float-no-zero/examples/moveend.js b/float-no-zero/examples/moveend.js new file mode 100644 index 0000000000..482ffedff9 --- /dev/null +++ b/float-no-zero/examples/moveend.js @@ -0,0 +1,37 @@ +var map = new ol.Map({ + layers: [ + new ol.layer.Tile({ + source: new ol.source.OSM() + }) + ], + renderer: exampleNS.getRendererFromQueryString(), + target: 'map', + view: new ol.View2D({ + center: [0, 0], + zoom: 2 + }) +}); + +function display(id, value) { + document.getElementById(id).value = value.toFixed(2); +} + +function wrapLon(value) { + var worlds = Math.floor((value + 180) / 360); + return value - (worlds * 360); +} + +function onMoveEnd(evt) { + var map = evt.map; + var extent = map.getView().calculateExtent(map.getSize()); + var bottomLeft = ol.proj.transform(ol.extent.getBottomLeft(extent), + 'EPSG:3857', 'EPSG:4326'); + var topRight = ol.proj.transform(ol.extent.getTopRight(extent), + 'EPSG:3857', 'EPSG:4326'); + display('left', wrapLon(bottomLeft[0])); + display('bottom', bottomLeft[1]); + display('right', wrapLon(topRight[0])); + display('top', topRight[1]); +} + +map.on('moveend', onMoveEnd); diff --git a/float-no-zero/examples/navigation-controls-require.js b/float-no-zero/examples/navigation-controls-require.js new file mode 100644 index 0000000000..bc5b68a6c2 --- /dev/null +++ b/float-no-zero/examples/navigation-controls-require.js @@ -0,0 +1,6 @@ +goog.require('ol.Map'); +goog.require('ol.View2D'); +goog.require('ol.control'); +goog.require('ol.control.ZoomToExtent'); +goog.require('ol.layer.Tile'); +goog.require('ol.source.OSM'); diff --git a/float-no-zero/examples/navigation-controls.html b/float-no-zero/examples/navigation-controls.html new file mode 100644 index 0000000000..5f26bf6ddc --- /dev/null +++ b/float-no-zero/examples/navigation-controls.html @@ -0,0 +1,56 @@ + + + + + + + + + + + Navigation controls example + + + + + +
+ +
+
+
+
+
+ +
+ +
+

Navigation controls example

+

Shows how to add navigation controls.

+ The following navigation controls are added to the map: +
    +
  • ol.control.Zoom (added by default)
  • +
  • ol.control.ZoomToExtent
  • +
+
+

See the navigation-controls.js source to see how this is done.

+
+
control, navigation, extent
+
+ +
+ +
+ + + + + + + diff --git a/float-no-zero/examples/navigation-controls.js b/float-no-zero/examples/navigation-controls.js new file mode 100644 index 0000000000..97a1055f1e --- /dev/null +++ b/float-no-zero/examples/navigation-controls.js @@ -0,0 +1,21 @@ +var map = new ol.Map({ + controls: ol.control.defaults().extend([ + new ol.control.ZoomToExtent({ + extent: [ + 813079.7791264898, 5929220.284081122, + 848966.9639063801, 5936863.986909639 + ] + }) + ]), + layers: [ + new ol.layer.Tile({ + source: new ol.source.OSM() + }) + ], + renderer: exampleNS.getRendererFromQueryString(), + target: 'map', + view: new ol.View2D({ + center: [0, 0], + zoom: 2 + }) +}); diff --git a/float-no-zero/examples/overlay-require.js b/float-no-zero/examples/overlay-require.js new file mode 100644 index 0000000000..89c096d414 --- /dev/null +++ b/float-no-zero/examples/overlay-require.js @@ -0,0 +1,7 @@ +goog.require('ol.Map'); +goog.require('ol.Overlay'); +goog.require('ol.View2D'); +goog.require('ol.coordinate'); +goog.require('ol.layer.Tile'); +goog.require('ol.proj'); +goog.require('ol.source.MapQuest'); diff --git a/float-no-zero/examples/overlay.html b/float-no-zero/examples/overlay.html new file mode 100644 index 0000000000..fbcd35d983 --- /dev/null +++ b/float-no-zero/examples/overlay.html @@ -0,0 +1,85 @@ + + + + + + + + + + + + Overlay example + + + + + +
+ +
+
+
+
+
+ +
+ +
+

Overlay example

+

Demonstrates overlays.

+
+

The popups are created using + Popovers from Bootstrap.

+

See the overlay.js source to see how this is done.

+
+
overlay, popup, bootstrap, popover, mapquest, openaerial
+
+ +
+ +
+ +
+ + Vienna +
+ + +
+ + + + + + + + diff --git a/float-no-zero/examples/overlay.js b/float-no-zero/examples/overlay.js new file mode 100644 index 0000000000..75a59366b6 --- /dev/null +++ b/float-no-zero/examples/overlay.js @@ -0,0 +1,55 @@ +var layer = new ol.layer.Tile({ + source: new ol.source.MapQuest({layer: 'sat'}) +}); + +var map = new ol.Map({ + layers: [layer], + renderer: exampleNS.getRendererFromQueryString(), + target: 'map', + view: new ol.View2D({ + center: [0, 0], + zoom: 2 + }) +}); + +var pos = ol.proj.transform([16.3725, 48.208889], 'EPSG:4326', 'EPSG:3857'); + +// Vienna marker +var marker = new ol.Overlay({ + position: pos, + positioning: 'center-center', + element: document.getElementById('marker'), + stopEvent: false +}); +map.addOverlay(marker); + +// Vienna label +var vienna = new ol.Overlay({ + position: pos, + element: document.getElementById('vienna') +}); +map.addOverlay(vienna); + +// Popup showing the position the user clicked +var popup = new ol.Overlay({ + element: document.getElementById('popup') +}); +map.addOverlay(popup); + +map.on('singleclick', function(evt) { + var element = popup.getElement(); + var coordinate = evt.coordinate; + var hdms = ol.coordinate.toStringHDMS(ol.proj.transform( + coordinate, 'EPSG:3857', 'EPSG:4326')); + + $(element).popover('destroy'); + popup.setPosition(coordinate); + // the keys are quoted to prevent renaming in ADVANCED_OPTIMIZATIONS mode. + $(element).popover({ + 'placement': 'top', + 'animation': false, + 'html': true, + 'content': '

The location you clicked was:

' + hdms + '' + }); + $(element).popover('show'); +}); diff --git a/float-no-zero/examples/popup-require.js b/float-no-zero/examples/popup-require.js new file mode 100644 index 0000000000..8bc5f759b7 --- /dev/null +++ b/float-no-zero/examples/popup-require.js @@ -0,0 +1,7 @@ +goog.require('ol.Map'); +goog.require('ol.Overlay'); +goog.require('ol.View2D'); +goog.require('ol.coordinate'); +goog.require('ol.layer.Tile'); +goog.require('ol.proj'); +goog.require('ol.source.TileJSON'); diff --git a/float-no-zero/examples/popup.html b/float-no-zero/examples/popup.html new file mode 100644 index 0000000000..cac36a8c1e --- /dev/null +++ b/float-no-zero/examples/popup.html @@ -0,0 +1,106 @@ + + + + + + + + + + + + Popup example + + + + + +
+ +
+
+
+ +
+
+
+ +
+ +
+

Popup example

+

Uses an overlay to create a popup.

+
+

+ Click on the map to get a popup. The popup is composed of a few basic elements: a container, a close button, and a place for the content. To anchor the popup to the map, an ol.Overlay is created with the popup container. A listener is registered for the map's click event to display the popup, and another listener is set as the click handler for the close button to hide the popup. +

+

+ See the popup.js source to see how this is done. +

+
+
overlay, popup, mapquest, openaerial
+
+ +
+ +
+ + + + + + + diff --git a/float-no-zero/examples/popup.js b/float-no-zero/examples/popup.js new file mode 100644 index 0000000000..c01236e212 --- /dev/null +++ b/float-no-zero/examples/popup.js @@ -0,0 +1,64 @@ +/** + * Elements that make up the popup. + */ +var container = document.getElementById('popup'); +var content = document.getElementById('popup-content'); +var closer = document.getElementById('popup-closer'); + + +/** + * Add a click handler to hide the popup. + * @return {boolean} Don't follow the href. + */ +closer.onclick = function() { + container.style.display = 'none'; + closer.blur(); + return false; +}; + + +/** + * Create an overlay to anchor the popup to the map. + */ +var overlay = new ol.Overlay({ + element: container +}); + + +/** + * Create the map. + */ +var map = new ol.Map({ + layers: [ + new ol.layer.Tile({ + source: new ol.source.TileJSON({ + url: 'http://api.tiles.mapbox.com/v3/' + + 'mapbox.natural-earth-hypso-bathy.jsonp', + crossOrigin: 'anonymous' + }) + }) + ], + renderer: exampleNS.getRendererFromQueryString(), + overlays: [overlay], + target: 'map', + view: new ol.View2D({ + center: [0, 0], + zoom: 2 + }) +}); + + +/** + * Add a click handler to the map to render the popup. + */ +map.on('singleclick', function(evt) { + var coordinate = evt.coordinate; + var hdms = ol.coordinate.toStringHDMS(ol.proj.transform( + coordinate, 'EPSG:3857', 'EPSG:4326')); + + overlay.setPosition(coordinate); + content.innerHTML = '

You clicked here:

' + hdms + + ''; + container.style.display = 'block'; + +}); diff --git a/float-no-zero/examples/preload-require.js b/float-no-zero/examples/preload-require.js new file mode 100644 index 0000000000..a99a9ac828 --- /dev/null +++ b/float-no-zero/examples/preload-require.js @@ -0,0 +1,4 @@ +goog.require('ol.Map'); +goog.require('ol.View2D'); +goog.require('ol.layer.Tile'); +goog.require('ol.source.BingMaps'); diff --git a/float-no-zero/examples/preload.html b/float-no-zero/examples/preload.html new file mode 100644 index 0000000000..ea7991a48c --- /dev/null +++ b/float-no-zero/examples/preload.html @@ -0,0 +1,55 @@ + + + + + + + + + + + Preload example + + + + + +
+ +
+
+
+
+
+
+
+
+ +
+ +
+

Preload example

+

Example of tile preloading.

+
+

The map on the left preloads low resolution tiles. The map on the right does not use any preloading. Try zooming out and panning to see the difference.

+

See the preload.js source to see how this is done.

+
+
preload, bing
+
+ +
+ +
+ + + + + + + diff --git a/float-no-zero/examples/preload.js b/float-no-zero/examples/preload.js new file mode 100644 index 0000000000..4f06ac2ed1 --- /dev/null +++ b/float-no-zero/examples/preload.js @@ -0,0 +1,32 @@ +var map1 = new ol.Map({ + layers: [ + new ol.layer.Tile({ + preload: Infinity, + source: new ol.source.BingMaps({ + key: 'Ak-dzM4wZjSqTlzveKz5u0d4IQ4bRzVI309GxmkgSVr1ewS6iPSrOvOKhA-CJlm3', + imagerySet: 'Aerial' + }) + }) + ], + renderer: exampleNS.getRendererFromQueryString(), + target: 'map1', + view: new ol.View2D({ + center: [-4808600, -2620936], + zoom: 8 + }) +}); + +var map2 = new ol.Map({ + layers: [ + new ol.layer.Tile({ + preload: 0, // default value + source: new ol.source.BingMaps({ + key: 'Ak-dzM4wZjSqTlzveKz5u0d4IQ4bRzVI309GxmkgSVr1ewS6iPSrOvOKhA-CJlm3', + imagerySet: 'AerialWithLabels' + }) + }) + ], + renderer: exampleNS.getRendererFromQueryString(), + target: 'map2' +}); +map2.bindTo('view', map1); diff --git a/float-no-zero/examples/rotation-require.js b/float-no-zero/examples/rotation-require.js new file mode 100644 index 0000000000..b59a219231 --- /dev/null +++ b/float-no-zero/examples/rotation-require.js @@ -0,0 +1,4 @@ +goog.require('ol.Map'); +goog.require('ol.View2D'); +goog.require('ol.layer.Tile'); +goog.require('ol.source.OSM'); diff --git a/float-no-zero/examples/rotation.html b/float-no-zero/examples/rotation.html new file mode 100644 index 0000000000..c9aeda2df1 --- /dev/null +++ b/float-no-zero/examples/rotation.html @@ -0,0 +1,52 @@ + + + + + + + + + + + Rotation example + + + + + +
+ +
+
+
+
+
+ +
+ +
+

Rotation example

+

Example of a rotated map.

+
+

Use Alt+Shift+drag to rotate the map.

+

See the rotation.js source to see how this is done.

+
+
rotation, openstreetmap
+
+ +
+ +
+ + + + + + + diff --git a/float-no-zero/examples/rotation.js b/float-no-zero/examples/rotation.js new file mode 100644 index 0000000000..cd4ec486df --- /dev/null +++ b/float-no-zero/examples/rotation.js @@ -0,0 +1,14 @@ +var map = new ol.Map({ + layers: [ + new ol.layer.Tile({ + source: new ol.source.OSM() + }) + ], + renderer: exampleNS.getRendererFromQueryString(), + target: 'map', + view: new ol.View2D({ + center: [-25860000, 4130000], + rotation: Math.PI / 6, + zoom: 10 + }) +}); diff --git a/float-no-zero/examples/rtree-require.js b/float-no-zero/examples/rtree-require.js new file mode 100644 index 0000000000..8633f97fae --- /dev/null +++ b/float-no-zero/examples/rtree-require.js @@ -0,0 +1,11 @@ +goog.require('ol.Feature'); +goog.require('ol.Map'); +goog.require('ol.View2D'); +goog.require('ol.extent'); +goog.require('ol.geom.Point'); +goog.require('ol.geom.Polygon'); +goog.require('ol.layer.Vector'); +goog.require('ol.source.Vector'); +goog.require('ol.style.Circle'); +goog.require('ol.style.Stroke'); +goog.require('ol.style.Style'); diff --git a/float-no-zero/examples/rtree.html b/float-no-zero/examples/rtree.html new file mode 100644 index 0000000000..937100ce3b --- /dev/null +++ b/float-no-zero/examples/rtree.html @@ -0,0 +1,51 @@ + + + + + + + + + + + R-Tree example + + + + + +
+ +
+
+
+
+
+ +
+ +
+

R-Tree example

+

R-Tree example. Please note that this example only works locally, it does not work when the examples are hosted. This is because it accesses internals the R-Tree data structure, which are not exported in the API.

+
+

See the rtree.js source to see how this is done.

+
+
vector, rtree
+
+ +
+ +
+ + + + + + + diff --git a/float-no-zero/examples/rtree.js b/float-no-zero/examples/rtree.js new file mode 100644 index 0000000000..804689ced3 --- /dev/null +++ b/float-no-zero/examples/rtree.js @@ -0,0 +1,91 @@ +var i, ii, j, jj; + +var count = 2000; +var features = new Array(count); +var e = 18000000; +for (i = 0; i < count; ++i) { + features[i] = new ol.Feature({ + 'geometry': new ol.geom.Point( + [2 * e * Math.random() - e, 2 * e * Math.random() - e]) + }); +} +var vectorSource = new ol.source.Vector({ + features: features +}); + +var styleArray = [new ol.style.Style({ + image: new ol.style.Circle({ + radius: 3, + fill: null, + stroke: new ol.style.Stroke({color: 'red', width: 1}) + }) +})]; + +var colors = ['red', 'orange', 'yellow', 'green', 'blue', 'indigo', 'violet']; +var depthStyle = []; +for (i = 0, ii = colors.length; i < ii; ++i) { + depthStyle[i] = new ol.style.Style({ + fill: null, + image: null, + stroke: new ol.style.Stroke({ + color: colors[i], + width: (7 - i) / 2 + }), + zIndex: i + }); +} +var extentsByDepth = []; +vectorSource.rBush_.forEachNode(function(node) { + if (node.height > 0) { + if (goog.isDef(extentsByDepth[node.height])) { + extentsByDepth[node.height].push(node.extent); + } else { + extentsByDepth[node.height] = [node.extent]; + } + } +}); +var rtreeExtentFeatures = []; +for (i = 0, ii = extentsByDepth.length; i < ii; ++i) { + var extents = extentsByDepth[i]; + if (!goog.isDef(extents)) { + continue; + } + for (j = 0, jj = extents.length; j < jj; ++j) { + var extent = extents[j]; + var geometry = new ol.geom.Polygon([[ + ol.extent.getBottomLeft(extent), + ol.extent.getTopLeft(extent), + ol.extent.getTopRight(extent), + ol.extent.getBottomRight(extent) + ]]); + var feature = new ol.Feature({ + 'geometry': geometry, + 'styleArray': [depthStyle[i]] + }); + rtreeExtentFeatures.push(feature); + } +} + +var vector = new ol.layer.Vector({ + source: vectorSource, + style: styleArray +}); + +var rtree = new ol.layer.Vector({ + source: new ol.source.Vector({ + features: rtreeExtentFeatures + }), + style: function(feature, resolution) { + return feature.get('styleArray'); + } +}); + +var map = new ol.Map({ + layers: [vector, rtree], + renderer: 'canvas', + target: 'map', + view: new ol.View2D({ + center: [0, 0], + zoom: 2 + }) +}); diff --git a/float-no-zero/examples/scale-line-require.js b/float-no-zero/examples/scale-line-require.js new file mode 100644 index 0000000000..7458a596eb --- /dev/null +++ b/float-no-zero/examples/scale-line-require.js @@ -0,0 +1,7 @@ +goog.require('ol.Map'); +goog.require('ol.View2D'); +goog.require('ol.control'); +goog.require('ol.control.ScaleLine'); +goog.require('ol.dom.Input'); +goog.require('ol.layer.Tile'); +goog.require('ol.source.OSM'); diff --git a/float-no-zero/examples/scale-line.html b/float-no-zero/examples/scale-line.html new file mode 100644 index 0000000000..41ff9734e1 --- /dev/null +++ b/float-no-zero/examples/scale-line.html @@ -0,0 +1,56 @@ + + + + + + + + + + + Scale line example + + + + + +
+ +
+
+
+ +
+
+ +
+ +
+

Scale line example

+

Example of a scale line.

+
+

See the scale-line.js source to see how this is done.

+
+
scale-line, openstreetmap
+
+ +
+ +
+ + + + + + + diff --git a/float-no-zero/examples/scale-line.js b/float-no-zero/examples/scale-line.js new file mode 100644 index 0000000000..00c028030b --- /dev/null +++ b/float-no-zero/examples/scale-line.js @@ -0,0 +1,22 @@ +var scaleLineControl = new ol.control.ScaleLine(); + +var map = new ol.Map({ + controls: ol.control.defaults().extend([ + scaleLineControl + ]), + layers: [ + new ol.layer.Tile({ + source: new ol.source.OSM() + }) + ], + renderer: exampleNS.getRendererFromQueryString(), + target: 'map', + view: new ol.View2D({ + center: [0, 0], + zoom: 2 + }) +}); + + +var unitsSelect = new ol.dom.Input(document.getElementById('units')); +unitsSelect.bindTo('value', scaleLineControl, 'units'); diff --git a/float-no-zero/examples/select-features-require.js b/float-no-zero/examples/select-features-require.js new file mode 100644 index 0000000000..f4660c9b96 --- /dev/null +++ b/float-no-zero/examples/select-features-require.js @@ -0,0 +1,11 @@ +goog.require('ol.Map'); +goog.require('ol.View2D'); +goog.require('ol.interaction'); +goog.require('ol.interaction.Select'); +goog.require('ol.layer.Tile'); +goog.require('ol.layer.Vector'); +goog.require('ol.source.GeoJSON'); +goog.require('ol.source.MapQuest'); +goog.require('ol.style.Fill'); +goog.require('ol.style.Stroke'); +goog.require('ol.style.Style'); diff --git a/float-no-zero/examples/select-features.html b/float-no-zero/examples/select-features.html new file mode 100644 index 0000000000..b2d66b34b3 --- /dev/null +++ b/float-no-zero/examples/select-features.html @@ -0,0 +1,52 @@ + + + + + + + + + + + + Select features example + + + + + +
+ +
+
+
+
+
+ +
+ +
+

Select features example

+

Example of using the Select interaction. Select features by clicking polygons. Hold the Shift-key to add to the selection.

+
+

See the select-features.js source to see how this is done.

+
+
select, vector
+
+ +
+ +
+ + + + + + + diff --git a/float-no-zero/examples/select-features.js b/float-no-zero/examples/select-features.js new file mode 100644 index 0000000000..caf9905550 --- /dev/null +++ b/float-no-zero/examples/select-features.js @@ -0,0 +1,37 @@ +var raster = new ol.layer.Tile({ + source: new ol.source.MapQuest({layer: 'sat'}) +}); + +var vector = new ol.layer.Vector({ + source: new ol.source.GeoJSON({ + projection: 'EPSG:3857', + url: 'data/geojson/countries.geojson' + }), + style: new ol.style.Style({ + fill: new ol.style.Fill({ + color: 'rgba(255,255,255,0.25)' + }), + stroke: new ol.style.Stroke({ + color: '#6666ff' + }) + }) +}); + +var select = new ol.interaction.Select({ + style: new ol.style.Style({ + fill: new ol.style.Fill({ + color: 'rgba(255,255,255,0.5)' + }) + }) +}); + +var map = new ol.Map({ + interactions: ol.interaction.defaults().extend([select]), + layers: [raster, vector], + renderer: 'canvas', + target: 'map', + view: new ol.View2D({ + center: [0, 0], + zoom: 2 + }) +}); diff --git a/float-no-zero/examples/semi-transparent-layer-require.js b/float-no-zero/examples/semi-transparent-layer-require.js new file mode 100644 index 0000000000..3b7758e7f4 --- /dev/null +++ b/float-no-zero/examples/semi-transparent-layer-require.js @@ -0,0 +1,6 @@ +goog.require('ol.Map'); +goog.require('ol.View2D'); +goog.require('ol.layer.Tile'); +goog.require('ol.proj'); +goog.require('ol.source.MapQuest'); +goog.require('ol.source.TileJSON'); diff --git a/float-no-zero/examples/semi-transparent-layer.html b/float-no-zero/examples/semi-transparent-layer.html new file mode 100644 index 0000000000..0884ae3cfe --- /dev/null +++ b/float-no-zero/examples/semi-transparent-layer.html @@ -0,0 +1,51 @@ + + + + + + + + + + + Semi-transparent layer example + + + + + +
+ +
+
+
+
+
+ +
+ +
+

Semi-transparent layer example

+

Example of a map with a semi-transparent layer.

+
+

See the semi-transparent-layer.js source to see how this is done.

+
+
transparent, mapquest, tilejson
+
+ +
+ +
+ + + + + + + diff --git a/float-no-zero/examples/semi-transparent-layer.js b/float-no-zero/examples/semi-transparent-layer.js new file mode 100644 index 0000000000..2ddb88013c --- /dev/null +++ b/float-no-zero/examples/semi-transparent-layer.js @@ -0,0 +1,19 @@ +var map = new ol.Map({ + layers: [ + new ol.layer.Tile({ + source: new ol.source.MapQuest({layer: 'sat'}) + }), + new ol.layer.Tile({ + source: new ol.source.TileJSON({ + url: 'http://api.tiles.mapbox.com/v3/mapbox.va-quake-aug.jsonp', + crossOrigin: 'anonymous' + }) + }) + ], + renderer: exampleNS.getRendererFromQueryString(), + target: 'map', + view: new ol.View2D({ + center: ol.proj.transform([-77.93255, 37.9555], 'EPSG:4326', 'EPSG:3857'), + zoom: 5 + }) +}); diff --git a/float-no-zero/examples/side-by-side-require.js b/float-no-zero/examples/side-by-side-require.js new file mode 100644 index 0000000000..30f445845f --- /dev/null +++ b/float-no-zero/examples/side-by-side-require.js @@ -0,0 +1,5 @@ +goog.require('ol.BrowserFeature'); +goog.require('ol.Map'); +goog.require('ol.View2D'); +goog.require('ol.layer.Tile'); +goog.require('ol.source.MapQuest'); diff --git a/float-no-zero/examples/side-by-side.html b/float-no-zero/examples/side-by-side.html new file mode 100644 index 0000000000..92607bdb6d --- /dev/null +++ b/float-no-zero/examples/side-by-side.html @@ -0,0 +1,63 @@ + + + + + + + + + + + Side-by-side example + + + + + +
+ +
+
+

Canvas

+
+
+
+

WebGL

+
+ +
+
+

DOM

+
+
+
+ +
+ +
+

Side-by-side example

+

The three maps, one WebGL, one Canvas, one DOM, share the same center, resolution, rotation and layers.

+
+

See the side-by-side.js source to see how this is done.

+
+
side-by-side, canvas, webgl, dom, canvas, sync, object
+
+ +
+ +
+ + + + + + + diff --git a/float-no-zero/examples/side-by-side.js b/float-no-zero/examples/side-by-side.js new file mode 100644 index 0000000000..f32716246d --- /dev/null +++ b/float-no-zero/examples/side-by-side.js @@ -0,0 +1,35 @@ +var domMap = new ol.Map({ + layers: [ + new ol.layer.Tile({ + source: new ol.source.MapQuest({layer: 'sat'}) + }) + ], + renderer: 'dom', + target: 'domMap', + view: new ol.View2D({ + center: [0, 0], + zoom: 1 + }) +}); + +if (ol.BrowserFeature.HAS_WEBGL) { + var webglMap = new ol.Map({ + renderer: 'webgl', + target: 'webglMap' + }); + webglMap.bindTo('layergroup', domMap); + webglMap.bindTo('view', domMap); +} else { + var info = document.getElementById('no-webgl'); + /** + * display error message + */ + info.style.display = ''; +} + +var canvasMap = new ol.Map({ + renderer: 'canvas', + target: 'canvasMap' +}); +canvasMap.bindTo('layergroup', domMap); +canvasMap.bindTo('view', domMap); diff --git a/float-no-zero/examples/simple-require.js b/float-no-zero/examples/simple-require.js new file mode 100644 index 0000000000..b59a219231 --- /dev/null +++ b/float-no-zero/examples/simple-require.js @@ -0,0 +1,4 @@ +goog.require('ol.Map'); +goog.require('ol.View2D'); +goog.require('ol.layer.Tile'); +goog.require('ol.source.OSM'); diff --git a/float-no-zero/examples/simple.html b/float-no-zero/examples/simple.html new file mode 100644 index 0000000000..e25cbb6228 --- /dev/null +++ b/float-no-zero/examples/simple.html @@ -0,0 +1,51 @@ + + + + + + + + + + + Simple example + + + + + +
+ +
+
+
+
+
+ +
+ +
+

Simple example

+

Example of a simple map.

+
+

See the simple.js source to see how this is done.

+
+
simple, openstreetmap
+
+ +
+ +
+ + + + + + + diff --git a/float-no-zero/examples/simple.js b/float-no-zero/examples/simple.js new file mode 100644 index 0000000000..0b035bdd41 --- /dev/null +++ b/float-no-zero/examples/simple.js @@ -0,0 +1,13 @@ +var map = new ol.Map({ + layers: [ + new ol.layer.Tile({ + source: new ol.source.OSM() + }) + ], + renderer: exampleNS.getRendererFromQueryString(), + target: 'map', + view: new ol.View2D({ + center: [0, 0], + zoom: 2 + }) +}); diff --git a/float-no-zero/examples/stamen-require.js b/float-no-zero/examples/stamen-require.js new file mode 100644 index 0000000000..b03c98a672 --- /dev/null +++ b/float-no-zero/examples/stamen-require.js @@ -0,0 +1,5 @@ +goog.require('ol.Map'); +goog.require('ol.View2D'); +goog.require('ol.layer.Tile'); +goog.require('ol.proj'); +goog.require('ol.source.Stamen'); diff --git a/float-no-zero/examples/stamen.html b/float-no-zero/examples/stamen.html new file mode 100644 index 0000000000..7e010089d7 --- /dev/null +++ b/float-no-zero/examples/stamen.html @@ -0,0 +1,51 @@ + + + + + + + + + + + Stamen example + + + + + +
+ +
+
+
+
+
+ +
+ +
+

Stamen example

+

Example of a Stamen tile source. Two layers are composed: the watercolor base layer with the terrain labels.

+
+

See the stamen.js source to see how this is done.

+
+
stamen, watercolor, terrain-labels, two-layers
+
+ +
+ +
+ + + + + + + diff --git a/float-no-zero/examples/stamen.js b/float-no-zero/examples/stamen.js new file mode 100644 index 0000000000..119da38371 --- /dev/null +++ b/float-no-zero/examples/stamen.js @@ -0,0 +1,21 @@ +var map = new ol.Map({ + layers: [ + new ol.layer.Tile({ + source: new ol.source.Stamen({ + layer: 'watercolor' + }) + }), + new ol.layer.Tile({ + source: new ol.source.Stamen({ + layer: 'terrain-labels' + }) + }) + ], + renderer: exampleNS.getRendererFromQueryString(), + target: 'map', + view: new ol.View2D({ + center: ol.proj.transform( + [-122.416667, 37.783333], 'EPSG:4326', 'EPSG:3857'), + zoom: 12 + }) +}); diff --git a/float-no-zero/examples/static-image-require.js b/float-no-zero/examples/static-image-require.js new file mode 100644 index 0000000000..a50d9b0761 --- /dev/null +++ b/float-no-zero/examples/static-image-require.js @@ -0,0 +1,7 @@ +goog.require('ol.Attribution'); +goog.require('ol.Map'); +goog.require('ol.View2D'); +goog.require('ol.extent'); +goog.require('ol.layer.Image'); +goog.require('ol.proj.Projection'); +goog.require('ol.source.ImageStatic'); diff --git a/float-no-zero/examples/static-image.html b/float-no-zero/examples/static-image.html new file mode 100644 index 0000000000..9dc9142288 --- /dev/null +++ b/float-no-zero/examples/static-image.html @@ -0,0 +1,51 @@ + + + + + + + + + + + Static image example + + + + + +
+ +
+
+
+
+
+ +
+ +
+

Static image example

+

Example of a static image layer. Source: xkcd.com/256/

+
+

See the static-image.js source to see how this is done.

+
+
static image, xkcd
+
+ +
+ +
+ + + + + + + diff --git a/float-no-zero/examples/static-image.js b/float-no-zero/examples/static-image.js new file mode 100644 index 0000000000..c6d25bc311 --- /dev/null +++ b/float-no-zero/examples/static-image.js @@ -0,0 +1,33 @@ +// Maps always need a projection, but the static image is not geo-referenced, +// and are only measured in pixels. So, we create a fake projection that the +// map can use to properly display the layer. +var pixelProjection = new ol.proj.Projection({ + code: 'pixel', + units: 'pixels', + extent: [0, 0, 1024, 968] +}); + +var map = new ol.Map({ + layers: [ + new ol.layer.Image({ + source: new ol.source.ImageStatic({ + attributions: [ + new ol.Attribution({ + html: '© xkcd' + }) + ], + url: 'http://imgs.xkcd.com/comics/online_communities.png', + imageSize: [1024, 968], + projection: pixelProjection, + imageExtent: pixelProjection.getExtent() + }) + }) + ], + renderer: 'canvas', + target: 'map', + view: new ol.View2D({ + projection: pixelProjection, + center: ol.extent.getCenter(pixelProjection.getExtent()), + zoom: 2 + }) +}); diff --git a/float-no-zero/examples/synthetic-lines-require.js b/float-no-zero/examples/synthetic-lines-require.js new file mode 100644 index 0000000000..57461b3176 --- /dev/null +++ b/float-no-zero/examples/synthetic-lines-require.js @@ -0,0 +1,8 @@ +goog.require('ol.Feature'); +goog.require('ol.Map'); +goog.require('ol.View2D'); +goog.require('ol.geom.LineString'); +goog.require('ol.layer.Vector'); +goog.require('ol.source.Vector'); +goog.require('ol.style.Stroke'); +goog.require('ol.style.Style'); diff --git a/float-no-zero/examples/synthetic-lines.html b/float-no-zero/examples/synthetic-lines.html new file mode 100644 index 0000000000..50cb31c7bf --- /dev/null +++ b/float-no-zero/examples/synthetic-lines.html @@ -0,0 +1,110 @@ + + + + + + + + + + + Synthetic lines example + + + + + +
+ +
+
+
+
+
+ +
+ +
+

Synthetic lines example

+

Synthetic lines example.

+
+

See the synthetic-lines.js source to see how this is done.

+

Performance results:

+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Device/Browser200 lines500 lines1000 lines2000 lines5000 lines10000 lines20000 lines
Mac Book Air / Chrome 33 canary60 fps60 fps60 fps60 fps60 fps60 fps60 fps
Mac Book Air / FireFox 2560 fps60 fps60 fps60 fps60 fps22 fps6 fps
Mac Book Air / Safari 760 fps60 fps60 fps40 fps10 fpsN/AN/A
iPhone 4S / iOS 7 / Safari60 fps33 fps15 fps5 fpsN/AN/AN/A
+ +
+
vector
+ + + + + + + + + + + + + diff --git a/float-no-zero/examples/synthetic-lines.js b/float-no-zero/examples/synthetic-lines.js new file mode 100644 index 0000000000..06018a906e --- /dev/null +++ b/float-no-zero/examples/synthetic-lines.js @@ -0,0 +1,51 @@ +var count = 10000; +var features = new Array(count); + +var startPoint = [0, 0]; +var endPoint; + +var delta, deltaX, deltaY; +var signX = 1; +var signY = -1; + +// Create a square spiral. +var i; +for (i = 0; i < count; ++i) { + delta = (i + 1) * 2500; + if (i % 2 === 0) { + signY *= -1; + } else { + signX *= -1; + } + deltaX = delta * signX; + deltaY = delta * signY; + endPoint = [startPoint[0] + deltaX, startPoint[1] + deltaY]; + features[i] = new ol.Feature({ + 'geometry': new ol.geom.LineString([startPoint, endPoint]) + }); + startPoint = endPoint; +} + +var vector = new ol.layer.Vector({ + source: new ol.source.Vector({ + features: features + }), + style: new ol.style.Style({ + stroke: new ol.style.Stroke({ + color: '#666666', + width: 1 + }) + }) +}); + +var view = new ol.View2D({ + center: [0, 0], + zoom: 0 +}); + +var map = new ol.Map({ + layers: [vector], + renderer: 'canvas', + target: 'map', + view: view +}); diff --git a/float-no-zero/examples/synthetic-points-require.js b/float-no-zero/examples/synthetic-points-require.js new file mode 100644 index 0000000000..e5ab72e833 --- /dev/null +++ b/float-no-zero/examples/synthetic-points-require.js @@ -0,0 +1,12 @@ +goog.require('ol.Feature'); +goog.require('ol.Map'); +goog.require('ol.Overlay'); +goog.require('ol.View2D'); +goog.require('ol.geom.LineString'); +goog.require('ol.geom.Point'); +goog.require('ol.layer.Vector'); +goog.require('ol.source.Vector'); +goog.require('ol.style.Circle'); +goog.require('ol.style.Fill'); +goog.require('ol.style.Stroke'); +goog.require('ol.style.Style'); diff --git a/float-no-zero/examples/synthetic-points.html b/float-no-zero/examples/synthetic-points.html new file mode 100644 index 0000000000..60cc6ddb71 --- /dev/null +++ b/float-no-zero/examples/synthetic-points.html @@ -0,0 +1,52 @@ + + + + + + + + + + + Synthetic points example + + + + + +
+ +
+
+
+
+
+ +
+ +
+

Synthetic points example

+

Synthetic points example.

+
+

See the synthetic-points.js source to see how this is done.

+
+
vector
+
+ +
+ +
+ + + + + + + + diff --git a/float-no-zero/examples/synthetic-points.js b/float-no-zero/examples/synthetic-points.js new file mode 100644 index 0000000000..f14e189489 --- /dev/null +++ b/float-no-zero/examples/synthetic-points.js @@ -0,0 +1,124 @@ +var count = 20000; +var features = new Array(count); +var e = 18000000; +for (var i = 0; i < count; ++i) { + features[i] = new ol.Feature({ + 'geometry': new ol.geom.Point( + [2 * e * Math.random() - e, 2 * e * Math.random() - e]), + 'i': i, + 'size': i % 2 ? 10 : 20 + }); +} + +var styles = { + '10': [new ol.style.Style({ + image: new ol.style.Circle({ + radius: 5, + fill: new ol.style.Fill({color: '#666666'}), + stroke: new ol.style.Stroke({color: '#bada55', width: 1}) + }) + })], + '20': [new ol.style.Style({ + image: new ol.style.Circle({ + radius: 10, + fill: new ol.style.Fill({color: '#666666'}), + stroke: new ol.style.Stroke({color: '#bada55', width: 1}) + }) + })] +}; + +var vectorSource = new ol.source.Vector({ + features: features +}); +var vector = new ol.layer.Vector({ + source: vectorSource, + style: function(feature, resolution) { + return styles[feature.get('size')]; + } +}); + +var popup = new ol.Overlay({ + element: document.getElementById('popup') +}); + +var map = new ol.Map({ + layers: [vector], + renderer: 'canvas', + target: document.getElementById('map'), + view: new ol.View2D({ + center: [0, 0], + zoom: 2 + }), + overlays: [popup] +}); + +var point = null; +var line = null; +var displaySnap = function(coordinate) { + var closestFeature = vectorSource.getClosestFeatureToCoordinate(coordinate); + if (closestFeature === null) { + point = null; + line = null; + } else { + var geometry = closestFeature.getGeometry(); + var closestPoint = geometry.getClosestPoint(coordinate); + if (point === null) { + point = new ol.geom.Point(closestPoint); + } else { + point.setCoordinates(closestPoint); + } + if (line === null) { + line = new ol.geom.LineString([coordinate, closestPoint]); + } else { + line.setCoordinates([coordinate, closestPoint]); + } + } + map.render(); +}; + +$(map.getViewport()).on('mousemove', function(evt) { + var coordinate = map.getEventCoordinate(evt.originalEvent); + displaySnap(coordinate); +}); + +map.on('singleclick', function(evt) { + displaySnap(evt.coordinate); +}); + +var imageStyle = new ol.style.Circle({ + radius: 10, + fill: null, + stroke: new ol.style.Stroke({ + color: 'rgba(255,255,0,0.9)', + width: 3 + }) +}); +var strokeStyle = new ol.style.Stroke({ + color: 'rgba(255,255,0,0.9)', + width: 3 +}); +map.on('postcompose', function(evt) { + var vectorContext = evt.vectorContext; + if (point !== null) { + vectorContext.setImageStyle(imageStyle); + vectorContext.drawPointGeometry(point); + } + if (line !== null) { + vectorContext.setFillStrokeStyle(null, strokeStyle); + vectorContext.drawLineStringGeometry(line); + } +}); + +$(map.getViewport()).on('mousemove', function(e) { + var pixel = map.getEventPixel(e.originalEvent); + + var hit = map.forEachFeatureAtPixel(pixel, function(feature, layer) { + return true; + }); + + if (hit) { + map.getTarget().style.cursor = 'pointer'; + } else { + map.getTarget().style.cursor = ''; + } +}); diff --git a/float-no-zero/examples/teleport-require.js b/float-no-zero/examples/teleport-require.js new file mode 100644 index 0000000000..b59a219231 --- /dev/null +++ b/float-no-zero/examples/teleport-require.js @@ -0,0 +1,4 @@ +goog.require('ol.Map'); +goog.require('ol.View2D'); +goog.require('ol.layer.Tile'); +goog.require('ol.source.OSM'); diff --git a/float-no-zero/examples/teleport.html b/float-no-zero/examples/teleport.html new file mode 100644 index 0000000000..41e5b87fc3 --- /dev/null +++ b/float-no-zero/examples/teleport.html @@ -0,0 +1,61 @@ + + + + + + + + + + + Teleport example + + + + + +
+ +
+
+
+
+
+
+
+
+ +
+
+ Teleport +
+
+ +
+ +
+

Teleport example

+

Example of moving a map from one target to another.

+
+

Click on the Teleport button below the map to move the map from one target to another.

+

See the teleport.js source to see how this is done.

+
+
teleport, openstreetmap
+
+ +
+ +
+ + + + + + + diff --git a/float-no-zero/examples/teleport.js b/float-no-zero/examples/teleport.js new file mode 100644 index 0000000000..4986d312c5 --- /dev/null +++ b/float-no-zero/examples/teleport.js @@ -0,0 +1,21 @@ +var map = new ol.Map({ + layers: [ + new ol.layer.Tile({ + source: new ol.source.OSM() + }) + ], + renderer: exampleNS.getRendererFromQueryString(), + view: new ol.View2D({ + center: [0, 0], + zoom: 2 + }) +}); + +map.setTarget('map1'); + +var teleportButton = document.getElementById('teleport'); + +teleportButton.addEventListener('click', function() { + var target = map.getTarget() === 'map1' ? 'map2' : 'map1'; + map.setTarget(target); +}, false); diff --git a/float-no-zero/examples/tilejson-require.js b/float-no-zero/examples/tilejson-require.js new file mode 100644 index 0000000000..c4ca0376fa --- /dev/null +++ b/float-no-zero/examples/tilejson-require.js @@ -0,0 +1,4 @@ +goog.require('ol.Map'); +goog.require('ol.View2D'); +goog.require('ol.layer.Tile'); +goog.require('ol.source.TileJSON'); diff --git a/float-no-zero/examples/tilejson.html b/float-no-zero/examples/tilejson.html new file mode 100644 index 0000000000..79f4906f04 --- /dev/null +++ b/float-no-zero/examples/tilejson.html @@ -0,0 +1,51 @@ + + + + + + + + + + + TileJSON example + + + + + +
+ +
+
+
+
+
+ +
+ +
+

TileJSON example

+

Example of a TileJSON layer.

+
+

See the tilejson.js source to see how this is done.

+
+
tilejson
+
+ +
+ +
+ + + + + + + diff --git a/float-no-zero/examples/tilejson.js b/float-no-zero/examples/tilejson.js new file mode 100644 index 0000000000..ed1f71ad93 --- /dev/null +++ b/float-no-zero/examples/tilejson.js @@ -0,0 +1,16 @@ +var map = new ol.Map({ + layers: [ + new ol.layer.Tile({ + source: new ol.source.TileJSON({ + url: 'http://api.tiles.mapbox.com/v3/mapbox.geography-class.jsonp', + crossOrigin: 'anonymous' + }) + }) + ], + renderer: exampleNS.getRendererFromQueryString(), + target: 'map', + view: new ol.View2D({ + center: [0, 0], + zoom: 2 + }) +}); diff --git a/float-no-zero/examples/topojson-require.js b/float-no-zero/examples/topojson-require.js new file mode 100644 index 0000000000..d6d7f076d2 --- /dev/null +++ b/float-no-zero/examples/topojson-require.js @@ -0,0 +1,9 @@ +goog.require('ol.Map'); +goog.require('ol.View2D'); +goog.require('ol.layer.Tile'); +goog.require('ol.layer.Vector'); +goog.require('ol.source.TileJSON'); +goog.require('ol.source.TopoJSON'); +goog.require('ol.style.Fill'); +goog.require('ol.style.Stroke'); +goog.require('ol.style.Style'); diff --git a/float-no-zero/examples/topojson.html b/float-no-zero/examples/topojson.html new file mode 100644 index 0000000000..7ee61092be --- /dev/null +++ b/float-no-zero/examples/topojson.html @@ -0,0 +1,53 @@ + + + + + + + + + + + + TopoJSON Example + + + + + +
+ +
+
+
+
+
+ +
+ +
+

TopoJSON example

+

Demonstrates rendering of features from a TopoJSON topology.

+
+

See the topojson.js source to see how this is done.

+
+
vector, topojson, style
+
+
 
+ +
+ +
+ + + + + + + diff --git a/float-no-zero/examples/topojson.js b/float-no-zero/examples/topojson.js new file mode 100644 index 0000000000..ad35bc0758 --- /dev/null +++ b/float-no-zero/examples/topojson.js @@ -0,0 +1,36 @@ +var raster = new ol.layer.Tile({ + source: new ol.source.TileJSON({ + url: 'http://api.tiles.mapbox.com/v3/mapbox.world-dark.jsonp' + }) +}); + +var styleArray = [new ol.style.Style({ + fill: new ol.style.Fill({ + color: 'rgba(255, 255, 255, 0.6)' + }), + stroke: new ol.style.Stroke({ + color: '#319FD3', + width: 1 + }) +})]; + +var vector = new ol.layer.Vector({ + source: new ol.source.TopoJSON({ + projection: 'EPSG:3857', + url: 'data/topojson/world-110m.json' + }), + style: function(feature, resolution) { + // don't want to render the full world polygon, which repeats all countries + return feature.getId() !== undefined ? styleArray : null; + } +}); + +var map = new ol.Map({ + layers: [raster, vector], + renderer: 'canvas', + target: 'map', + view: new ol.View2D({ + center: [0, 0], + zoom: 1 + }) +}); diff --git a/float-no-zero/examples/vector-layer-require.js b/float-no-zero/examples/vector-layer-require.js new file mode 100644 index 0000000000..4d31e1f10e --- /dev/null +++ b/float-no-zero/examples/vector-layer-require.js @@ -0,0 +1,11 @@ +goog.require('ol.FeatureOverlay'); +goog.require('ol.Map'); +goog.require('ol.View2D'); +goog.require('ol.layer.Tile'); +goog.require('ol.layer.Vector'); +goog.require('ol.source.GeoJSON'); +goog.require('ol.source.MapQuest'); +goog.require('ol.style.Fill'); +goog.require('ol.style.Stroke'); +goog.require('ol.style.Style'); +goog.require('ol.style.Text'); diff --git a/float-no-zero/examples/vector-layer.html b/float-no-zero/examples/vector-layer.html new file mode 100644 index 0000000000..96be2d6075 --- /dev/null +++ b/float-no-zero/examples/vector-layer.html @@ -0,0 +1,56 @@ + + + + + + + + + + + Vector layer example + + + + + +
+ +
+
+
+
+
+ +
+ +
+

Vector layer example

+

Example of a countries vector layer with country information on hover and country labels at higher zoom levels.

+
+

See the vector-layer.js source to see how this is done.

+
+
vector, geojson, style, feature overlay
+
+
+
+   +
+
+ +
+ +
+ + + + + + + diff --git a/float-no-zero/examples/vector-layer.js b/float-no-zero/examples/vector-layer.js new file mode 100644 index 0000000000..5130ee4420 --- /dev/null +++ b/float-no-zero/examples/vector-layer.js @@ -0,0 +1,115 @@ +var styleCache = {}; +var vectorLayer = new ol.layer.Vector({ + source: new ol.source.GeoJSON({ + projection: 'EPSG:3857', + url: 'data/geojson/countries.geojson' + }), + style: function(feature, resolution) { + var text = resolution < 5000 ? feature.get('name') : ''; + if (!styleCache[text]) { + styleCache[text] = [new ol.style.Style({ + fill: new ol.style.Fill({ + color: 'rgba(255, 255, 255, 0.6)' + }), + stroke: new ol.style.Stroke({ + color: '#319FD3', + width: 1 + }), + text: new ol.style.Text({ + font: '12px Calibri,sans-serif', + text: text, + fill: new ol.style.Fill({ + color: '#000' + }), + stroke: new ol.style.Stroke({ + color: '#fff', + width: 3 + }) + }) + })]; + } + return styleCache[text]; + } +}); + +var map = new ol.Map({ + layers: [ + new ol.layer.Tile({ + source: new ol.source.MapQuest({layer: 'sat'}) + }), + vectorLayer + ], + renderer: 'canvas', + target: 'map', + view: new ol.View2D({ + center: [0, 0], + zoom: 1 + }) +}); + +var highlightStyleCache = {}; + +var featureOverlay = new ol.FeatureOverlay({ + map: map, + style: function(feature, resolution) { + var text = resolution < 5000 ? feature.get('name') : ''; + if (!highlightStyleCache[text]) { + highlightStyleCache[text] = [new ol.style.Style({ + stroke: new ol.style.Stroke({ + color: '#f00', + width: 1 + }), + fill: new ol.style.Fill({ + color: 'rgba(255,0,0,0.1)' + }), + text: new ol.style.Text({ + font: '12px Calibri,sans-serif', + text: text, + fill: new ol.style.Fill({ + color: '#000' + }), + stroke: new ol.style.Stroke({ + color: '#f00', + width: 3 + }) + }) + })]; + } + return highlightStyleCache[text]; + } +}); + +var highlight; +var displayFeatureInfo = function(pixel) { + + var feature = map.forEachFeatureAtPixel(pixel, function(feature, layer) { + return feature; + }); + + var info = document.getElementById('info'); + if (feature) { + info.innerHTML = feature.getId() + ': ' + feature.get('name'); + } else { + info.innerHTML = ' '; + } + + if (feature !== highlight) { + if (highlight) { + featureOverlay.removeFeature(highlight); + } + if (feature) { + featureOverlay.addFeature(feature); + } + highlight = feature; + } + +}; + +$(map.getViewport()).on('mousemove', function(evt) { + var pixel = map.getEventPixel(evt.originalEvent); + displayFeatureInfo(pixel); +}); + +map.on('singleclick', function(evt) { + displayFeatureInfo(evt.pixel); +}); diff --git a/float-no-zero/examples/vector-osm-require.js b/float-no-zero/examples/vector-osm-require.js new file mode 100644 index 0000000000..473190d457 --- /dev/null +++ b/float-no-zero/examples/vector-osm-require.js @@ -0,0 +1,10 @@ +goog.require('ol.Map'); +goog.require('ol.View2D'); +goog.require('ol.layer.Tile'); +goog.require('ol.layer.Vector'); +goog.require('ol.source.BingMaps'); +goog.require('ol.source.OSMXML'); +goog.require('ol.style.Circle'); +goog.require('ol.style.Fill'); +goog.require('ol.style.Stroke'); +goog.require('ol.style.Style'); diff --git a/float-no-zero/examples/vector-osm.html b/float-no-zero/examples/vector-osm.html new file mode 100644 index 0000000000..6a0e5ea7ef --- /dev/null +++ b/float-no-zero/examples/vector-osm.html @@ -0,0 +1,56 @@ + + + + + + + + + + + OSM XML example + + + + + +
+ +
+
+
+
+
+ +
+ +
+

OSM XML example

+

Example of using the OSM XML source.

+
+

See the vector-osm.js source to see how this is done.

+
+
vector, osm, xml
+
+
+
+   +
+
+ +
+ +
+ + + + + + + diff --git a/float-no-zero/examples/vector-osm.js b/float-no-zero/examples/vector-osm.js new file mode 100644 index 0000000000..ec58a276fb --- /dev/null +++ b/float-no-zero/examples/vector-osm.js @@ -0,0 +1,112 @@ +var styles = { + 'amenity': { + 'parking': [ + new ol.style.Style({ + stroke: new ol.style.Stroke({ + color: 'rgba(170, 170, 170, 1.0)', + width: 1 + }), + fill: new ol.style.Fill({ + color: 'rgba(170, 170, 170, 0.3)' + }) + }) + ] + }, + 'building': { + '.*': [ + new ol.style.Style({ + zIndex: 100, + stroke: new ol.style.Stroke({ + color: 'rgba(246, 99, 79, 1.0)', + width: 1 + }), + fill: new ol.style.Fill({ + color: 'rgba(246, 99, 79, 0.3)' + }) + }) + ] + }, + 'highway': { + 'service': [ + new ol.style.Style({ + stroke: new ol.style.Stroke({ + color: 'rgba(255, 255, 255, 1.0)', + width: 2 + }) + }) + ], + '.*': [ + new ol.style.Style({ + stroke: new ol.style.Stroke({ + color: 'rgba(255, 255, 255, 1.0)', + width: 3 + }) + }) + ] + }, + 'landuse': { + 'forest|grass|allotments': [ + new ol.style.Style({ + stroke: new ol.style.Stroke({ + color: 'rgba(140, 208, 95, 1.0)', + width: 1 + }), + fill: new ol.style.Fill({ + color: 'rgba(140, 208, 95, 0.3)' + }) + }) + ] + }, + 'natural': { + 'tree': [ + new ol.style.Style({ + image: new ol.style.Circle({ + radius: 2, + fill: new ol.style.Fill({ + color: 'rgba(140, 208, 95, 1.0)' + }), + stroke: null + }) + }) + ] + } +}; + +var vectorSource = new ol.source.OSMXML({ + projection: 'EPSG:3857', + url: 'data/osm/map.osm' +}); + +var vector = new ol.layer.Vector({ + source: vectorSource, + style: function(feature, resolution) { + for (var key in styles) { + var value = feature.get(key); + if (value !== undefined) { + for (var regexp in styles[key]) { + if (new RegExp(regexp).test(value)) { + return styles[key][regexp]; + } + } + } + } + return null; + } +}); + +var raster = new ol.layer.Tile({ + source: new ol.source.BingMaps({ + imagerySet: 'Aerial', + key: 'Ak-dzM4wZjSqTlzveKz5u0d4IQ4bRzVI309GxmkgSVr1ewS6iPSrOvOKhA-CJlm3' + }) +}); + +var map = new ol.Map({ + layers: [raster, vector], + renderer: 'canvas', + target: document.getElementById('map'), + view: new ol.View2D({ + center: [739218, 5906096], + zoom: 17 + }) +}); diff --git a/float-no-zero/examples/wms-capabilities-require.js b/float-no-zero/examples/wms-capabilities-require.js new file mode 100644 index 0000000000..504d6c437d --- /dev/null +++ b/float-no-zero/examples/wms-capabilities-require.js @@ -0,0 +1 @@ +goog.require('ol.parser.ogc.WMSCapabilities'); diff --git a/float-no-zero/examples/wms-capabilities.html b/float-no-zero/examples/wms-capabilities.html new file mode 100644 index 0000000000..9fb393e496 --- /dev/null +++ b/float-no-zero/examples/wms-capabilities.html @@ -0,0 +1,49 @@ + + + + + + + + + + + WMS GetCapabilities parsing example + + + + + +
+ +
+ +
+

WMS GetCapabilities parsing example

+

Example of parsing a WMS GetCapabilities response.

+
+

See the wms-capabilities.js source to see how this is done.

+
+
wms, capabilities, getcapabilities
+
+ +
+

+        
+ +
+ +
+ + + + + + + diff --git a/float-no-zero/examples/wms-capabilities.js b/float-no-zero/examples/wms-capabilities.js new file mode 100644 index 0000000000..6ea9ee5bda --- /dev/null +++ b/float-no-zero/examples/wms-capabilities.js @@ -0,0 +1,18 @@ +var parser = new ol.parser.ogc.WMSCapabilities(), result; +var url = 'data/ogcsample.xml'; + +var xhr = new XMLHttpRequest(); +xhr.open('GET', url, true); + + +/** + * onload handler for the XHR request. + */ +xhr.onload = function() { + if (xhr.status == 200) { + result = parser.read(xhr.responseXML); + document.getElementById('log').innerHTML = + window.JSON.stringify(result, undefined, 2); + } +}; +xhr.send(); diff --git a/float-no-zero/examples/wms-custom-proj-require.js b/float-no-zero/examples/wms-custom-proj-require.js new file mode 100644 index 0000000000..a824a7b876 --- /dev/null +++ b/float-no-zero/examples/wms-custom-proj-require.js @@ -0,0 +1,8 @@ +goog.require('ol.Attribution'); +goog.require('ol.Map'); +goog.require('ol.View2D'); +goog.require('ol.control'); +goog.require('ol.control.ScaleLine'); +goog.require('ol.layer.Tile'); +goog.require('ol.proj'); +goog.require('ol.source.TileWMS'); diff --git a/float-no-zero/examples/wms-custom-proj.html b/float-no-zero/examples/wms-custom-proj.html new file mode 100644 index 0000000000..12a1dec0f1 --- /dev/null +++ b/float-no-zero/examples/wms-custom-proj.html @@ -0,0 +1,53 @@ + + + + + + + + + + + Tiled WMS with Proj4js projection example + + + + + +
+ +
+
+
+
+
+ +
+ +
+

Tiled WMS with Proj4js projection example

+

Example of two tiled WMS layers (Pixelmap 1:1'000'000 and national parks) using the projection EPSG:21781.

+
+

See the wms-custom-proj.js source to see how this is done.

+
+
wms, tile, tilelayer, proj4js, projection
+
+ +
+ +
+ + + + + + + + + diff --git a/float-no-zero/examples/wms-custom-proj.js b/float-no-zero/examples/wms-custom-proj.js new file mode 100644 index 0000000000..5773f30d78 --- /dev/null +++ b/float-no-zero/examples/wms-custom-proj.js @@ -0,0 +1,58 @@ +var projection = ol.proj.configureProj4jsProjection({ + code: 'EPSG:21781', + extent: [485869.5728, 76443.1884, 837076.5648, 299941.7864] +}); + +var extent = [420000, 30000, 900000, 350000]; +var layers = [ + new ol.layer.Tile({ + source: new ol.source.TileWMS({ + url: 'http://wms.geo.admin.ch/', + crossOrigin: 'anonymous', + attributions: [new ol.Attribution({ + html: '© ' + + '' + + 'Pixelmap 1:1000000 / geo.admin.ch' + })], + params: { + 'LAYERS': 'ch.swisstopo.pixelkarte-farbe-pk1000.noscale', + 'FORMAT': 'image/jpeg' + }, + extent: extent, + serverType: 'mapserver' + }) + }), + new ol.layer.Tile({ + source: new ol.source.TileWMS({ + url: 'http://wms.geo.admin.ch/', + crossOrigin: 'anonymous', + attributions: [new ol.Attribution({ + html: '© ' + + '' + + 'National parks / geo.admin.ch' + })], + params: {'LAYERS': 'ch.bafu.schutzgebiete-paerke_nationaler_bedeutung'}, + extent: extent, + serverType: 'mapserver' + }) + }) +]; + +var map = new ol.Map({ + controls: ol.control.defaults().extend([ + new ol.control.ScaleLine({ + units: 'metric' + }) + ]), + layers: layers, + renderer: exampleNS.getRendererFromQueryString(), + target: 'map', + view: new ol.View2D({ + projection: projection, + center: [660000, 190000], + extent: extent, + zoom: 2 + }) +}); diff --git a/float-no-zero/examples/wms-image-custom-proj-require.js b/float-no-zero/examples/wms-image-custom-proj-require.js new file mode 100644 index 0000000000..dd04beec9f --- /dev/null +++ b/float-no-zero/examples/wms-image-custom-proj-require.js @@ -0,0 +1,6 @@ +goog.require('ol.Attribution'); +goog.require('ol.Map'); +goog.require('ol.View2D'); +goog.require('ol.layer.Image'); +goog.require('ol.proj'); +goog.require('ol.source.ImageWMS'); diff --git a/float-no-zero/examples/wms-image-custom-proj.html b/float-no-zero/examples/wms-image-custom-proj.html new file mode 100644 index 0000000000..e8c7230996 --- /dev/null +++ b/float-no-zero/examples/wms-image-custom-proj.html @@ -0,0 +1,54 @@ + + + + + + + + + + + Single image WMS with custom projection example + + + + + +
+ +
+
+
+
+
+ +
+ +
+

Single image WMS with custom projection example

+

Example of two single image WMS layers.

+
+

Pixelmap 1:1'000'000 with National Parks overlay using the projection EPSG:21781.

+

See the wms-image-custom-proj.js source to see how this is done.

+
+
wms, single image, projection
+
+ +
+ +
+ + + + + + + + + diff --git a/float-no-zero/examples/wms-image-custom-proj.js b/float-no-zero/examples/wms-image-custom-proj.js new file mode 100644 index 0000000000..f0e79ab19c --- /dev/null +++ b/float-no-zero/examples/wms-image-custom-proj.js @@ -0,0 +1,53 @@ +var projection = ol.proj.configureProj4jsProjection({ + code: 'EPSG:21781', + extent: [485869.5728, 76443.1884, 837076.5648, 299941.7864] +}); + +var extent = [420000, 30000, 900000, 350000]; +var layers = [ + new ol.layer.Image({ + source: new ol.source.ImageWMS({ + url: 'http://wms.geo.admin.ch/', + crossOrigin: 'anonymous', + attributions: [new ol.Attribution({ + html: '© ' + + '' + + 'Pixelmap 1:1000000 / geo.admin.ch' + })], + params: { + 'LAYERS': 'ch.swisstopo.pixelkarte-farbe-pk1000.noscale', + 'FORMAT': 'image/jpeg' + }, + serverType: /** @type {ol.source.wms.ServerType} */ ('mapserver'), + extent: extent + }) + }), + new ol.layer.Image({ + source: new ol.source.ImageWMS({ + url: 'http://wms.geo.admin.ch/', + crossOrigin: 'anonymous', + attributions: [new ol.Attribution({ + html: '© ' + + '' + + 'National parks / geo.admin.ch' + })], + params: {'LAYERS': 'ch.bafu.schutzgebiete-paerke_nationaler_bedeutung'}, + serverType: /** @type {ol.source.wms.ServerType} */ ('mapserver'), + extent: extent + }) + }) +]; + +var map = new ol.Map({ + layers: layers, + renderer: exampleNS.getRendererFromQueryString(), + target: 'map', + view: new ol.View2D({ + projection: projection, + center: [660000, 190000], + extent: extent, + zoom: 2 + }) +}); diff --git a/float-no-zero/examples/wms-image-require.js b/float-no-zero/examples/wms-image-require.js new file mode 100644 index 0000000000..15d77d23fb --- /dev/null +++ b/float-no-zero/examples/wms-image-require.js @@ -0,0 +1,6 @@ +goog.require('ol.Map'); +goog.require('ol.View2D'); +goog.require('ol.layer.Image'); +goog.require('ol.layer.Tile'); +goog.require('ol.source.ImageWMS'); +goog.require('ol.source.MapQuest'); diff --git a/float-no-zero/examples/wms-image.html b/float-no-zero/examples/wms-image.html new file mode 100644 index 0000000000..04be1175dd --- /dev/null +++ b/float-no-zero/examples/wms-image.html @@ -0,0 +1,51 @@ + + + + + + + + + + + Single image WMS example + + + + + +
+ +
+
+
+
+
+ +
+ +
+

Single image WMS example

+

Example of a single image WMS layer.

+
+

See the wms-image.js source to see how this is done.

+
+
wms, image
+
+ +
+ +
+ + + + + + + diff --git a/float-no-zero/examples/wms-image.js b/float-no-zero/examples/wms-image.js new file mode 100644 index 0000000000..474663c8ea --- /dev/null +++ b/float-no-zero/examples/wms-image.js @@ -0,0 +1,22 @@ +var layers = [ + new ol.layer.Tile({ + source: new ol.source.MapQuest({layer: 'sat'}) + }), + new ol.layer.Image({ + source: new ol.source.ImageWMS({ + url: 'http://demo.opengeo.org/geoserver/wms', + params: {'LAYERS': 'topp:states'}, + serverType: 'geoserver', + extent: [-13884991, 2870341, -7455066, 6338219] + }) + }) +]; +var map = new ol.Map({ + renderer: 'canvas', + layers: layers, + target: 'map', + view: new ol.View2D({ + center: [-10997148, 4569099], + zoom: 4 + }) +}); diff --git a/float-no-zero/examples/wms-no-proj-require.js b/float-no-zero/examples/wms-no-proj-require.js new file mode 100644 index 0000000000..4f855ab5cf --- /dev/null +++ b/float-no-zero/examples/wms-no-proj-require.js @@ -0,0 +1,8 @@ +goog.require('ol.Attribution'); +goog.require('ol.Map'); +goog.require('ol.View2D'); +goog.require('ol.layer.Image'); +goog.require('ol.layer.Tile'); +goog.require('ol.proj.Projection'); +goog.require('ol.source.ImageWMS'); +goog.require('ol.source.TileWMS'); diff --git a/float-no-zero/examples/wms-no-proj.html b/float-no-zero/examples/wms-no-proj.html new file mode 100644 index 0000000000..e694e758cc --- /dev/null +++ b/float-no-zero/examples/wms-no-proj.html @@ -0,0 +1,51 @@ + + + + + + + + + + + WMS without client projection example + + + + + +
+ +
+
+
+
+
+ +
+ +
+

WMS without client projection example

+

Example of two WMS layers using the projection EPSG:21781, which is unknown to the client.

+
+

See the wms-no-proj.js source to see how this is done.

+
+
wms, projection
+
+ +
+ +
+ + + + + + + diff --git a/float-no-zero/examples/wms-no-proj.js b/float-no-zero/examples/wms-no-proj.js new file mode 100644 index 0000000000..3d9f8e6d88 --- /dev/null +++ b/float-no-zero/examples/wms-no-proj.js @@ -0,0 +1,51 @@ +var layers = [ + new ol.layer.Tile({ + source: new ol.source.TileWMS({ + attributions: [new ol.Attribution({ + html: '© ' + + '' + + 'Pixelmap 1:1000000 / geo.admin.ch' + })], + crossOrigin: 'anonymous', + params: { + 'LAYERS': 'ch.swisstopo.pixelkarte-farbe-pk1000.noscale', + 'FORMAT': 'image/jpeg' + }, + url: 'http://wms.geo.admin.ch/' + }) + }), + new ol.layer.Image({ + source: new ol.source.ImageWMS({ + attributions: [new ol.Attribution({ + html: '© ' + + '' + + 'National parks / geo.admin.ch' + })], + crossOrigin: 'anonymous', + params: {'LAYERS': 'ch.bafu.schutzgebiete-paerke_nationaler_bedeutung'}, + serverType: 'mapserver', + url: 'http://wms.geo.admin.ch/' + }) + }) +]; + +// A minimal projection object is configured with only the SRS code and the map +// units. No client side coordinate transforms are possible with such a +// projection object. +var projection = new ol.proj.Projection({ + code: 'EPSG:21781', + units: 'm' +}); + +var map = new ol.Map({ + layers: layers, + renderer: exampleNS.getRendererFromQueryString(), + target: 'map', + view: new ol.View2D({ + center: [660000, 190000], + projection: projection, + zoom: 9 + }) +}); diff --git a/float-no-zero/examples/wms-tiled-require.js b/float-no-zero/examples/wms-tiled-require.js new file mode 100644 index 0000000000..27998b1a08 --- /dev/null +++ b/float-no-zero/examples/wms-tiled-require.js @@ -0,0 +1,5 @@ +goog.require('ol.Map'); +goog.require('ol.View2D'); +goog.require('ol.layer.Tile'); +goog.require('ol.source.MapQuest'); +goog.require('ol.source.TileWMS'); diff --git a/float-no-zero/examples/wms-tiled.html b/float-no-zero/examples/wms-tiled.html new file mode 100644 index 0000000000..5fe680ccca --- /dev/null +++ b/float-no-zero/examples/wms-tiled.html @@ -0,0 +1,51 @@ + + + + + + + + + + + Tiled WMS example + + + + + +
+ +
+
+
+
+
+ +
+ +
+

Tiled WMS example

+

Example of a tiled WMS layer.

+
+

See the wms-tiled.js source to see how this is done.

+
+
wms, tile, tilelayer
+
+ +
+ +
+ + + + + + + diff --git a/float-no-zero/examples/wms-tiled.js b/float-no-zero/examples/wms-tiled.js new file mode 100644 index 0000000000..4449f5a204 --- /dev/null +++ b/float-no-zero/examples/wms-tiled.js @@ -0,0 +1,22 @@ +var layers = [ + new ol.layer.Tile({ + source: new ol.source.MapQuest({layer: 'sat'}) + }), + new ol.layer.Tile({ + source: new ol.source.TileWMS(/** @type {olx.source.TileWMSOptions} */ ({ + url: 'http://demo.opengeo.org/geoserver/wms', + params: {'LAYERS': 'topp:states', 'TILED': true}, + extent: [-13884991, 2870341, -7455066, 6338219], + serverType: 'geoserver' + })) + }) +]; +var map = new ol.Map({ + renderer: 'canvas', + layers: layers, + target: 'map', + view: new ol.View2D({ + center: [-10997148, 4569099], + zoom: 4 + }) +}); diff --git a/float-no-zero/examples/wmts-require.js b/float-no-zero/examples/wmts-require.js new file mode 100644 index 0000000000..ea815d5585 --- /dev/null +++ b/float-no-zero/examples/wmts-require.js @@ -0,0 +1,8 @@ +goog.require('ol.Map'); +goog.require('ol.View2D'); +goog.require('ol.extent'); +goog.require('ol.layer.Tile'); +goog.require('ol.proj'); +goog.require('ol.source.OSM'); +goog.require('ol.source.WMTS'); +goog.require('ol.tilegrid.WMTS'); diff --git a/float-no-zero/examples/wmts.html b/float-no-zero/examples/wmts.html new file mode 100644 index 0000000000..46619f9ce0 --- /dev/null +++ b/float-no-zero/examples/wmts.html @@ -0,0 +1,51 @@ + + + + + + + + + + + WMTS example + + + + + +
+ +
+
+
+
+
+ +
+ +
+

WMTS example

+

Example of a WMTS source.

+
+

See the wmts.js source to see how this is done.

+
+
wmts
+
+ +
+ +
+ + + + + + + diff --git a/float-no-zero/examples/wmts.js b/float-no-zero/examples/wmts.js new file mode 100644 index 0000000000..ffd06c18ce --- /dev/null +++ b/float-no-zero/examples/wmts.js @@ -0,0 +1,43 @@ +var projection = ol.proj.get('EPSG:900913'); +var projectionExtent = projection.getExtent(); +var size = ol.extent.getWidth(projectionExtent) / 256; +var resolutions = new Array(18); +var matrixIds = new Array(18); +for (var z = 0; z < 18; ++z) { + // generate resolutions and matrixIds arrays for this WMTS + resolutions[z] = size / Math.pow(2, z); + matrixIds[z] = z; +} + +var map = new ol.Map({ + layers: [ + new ol.layer.Tile({ + source: new ol.source.OSM(), + opacity: 0.7 + }), + new ol.layer.Tile({ + opacity: 0.7, + source: new ol.source.WMTS({ + url: 'http://demo-apollo.geospatial.intergraph.com/erdas-iws/ogc/wmts/', + layer: 'sampleiws_images_geodetic_worldgeodemo.ecw', + matrixSet: 'ogc:1.0:googlemapscompatible', + format: 'image/jpeg', + projection: projection, + tileGrid: new ol.tilegrid.WMTS({ + origin: ol.extent.getTopLeft(projectionExtent), + resolutions: resolutions, + matrixIds: matrixIds + }), + extent: [-20037508.34, -20037508.34, 20037508.34, 20037508.34], + style: 'default' + }) + }) + ], + renderer: 'canvas', + target: 'map', + view: new ol.View2D({ + center: [0, 0], + zoom: 0, + maxResolution: resolutions[1] + }) +}); diff --git a/float-no-zero/examples/xyz-esri-require.js b/float-no-zero/examples/xyz-esri-require.js new file mode 100644 index 0000000000..ce07e4e817 --- /dev/null +++ b/float-no-zero/examples/xyz-esri-require.js @@ -0,0 +1,6 @@ +goog.require('ol.Attribution'); +goog.require('ol.Map'); +goog.require('ol.View2D'); +goog.require('ol.layer.Tile'); +goog.require('ol.proj'); +goog.require('ol.source.XYZ'); diff --git a/float-no-zero/examples/xyz-esri.html b/float-no-zero/examples/xyz-esri.html new file mode 100644 index 0000000000..89d7b91178 --- /dev/null +++ b/float-no-zero/examples/xyz-esri.html @@ -0,0 +1,51 @@ + + + + + + + + + + + XYZ Esri example + + + + + +
+ +
+
+
+
+
+ +
+ +
+

XYZ Esri example

+

Example of a XYZ source using Esri tiles.

+
+

See the xyz-esri.js source for details on how this is done.

+
+
xyz, esri
+
+ +
+ +
+ + + + + + + diff --git a/float-no-zero/examples/xyz-esri.js b/float-no-zero/examples/xyz-esri.js new file mode 100644 index 0000000000..9953229fde --- /dev/null +++ b/float-no-zero/examples/xyz-esri.js @@ -0,0 +1,22 @@ +var attribution = new ol.Attribution({ + html: 'Tiles © ArcGIS' +}); + +var map = new ol.Map({ + target: 'map', + layers: [ + new ol.layer.Tile({ + source: new ol.source.XYZ({ + attributions: [attribution], + url: 'http://server.arcgisonline.com/ArcGIS/rest/services/' + + 'World_Topo_Map/MapServer/tile/{z}/{y}/{x}' + }) + }) + ], + renderer: 'canvas', + view: new ol.View2D({ + center: ol.proj.transform([-121.1, 47.5], 'EPSG:4326', 'EPSG:3857'), + zoom: 7 + }) +}); diff --git a/float-no-zero/examples/zoomify-require.js b/float-no-zero/examples/zoomify-require.js new file mode 100644 index 0000000000..588c09d980 --- /dev/null +++ b/float-no-zero/examples/zoomify-require.js @@ -0,0 +1,6 @@ +goog.require('ol.Map'); +goog.require('ol.View2D'); +goog.require('ol.layer.Tile'); +goog.require('ol.proj'); +goog.require('ol.proj.Projection'); +goog.require('ol.source.Zoomify'); diff --git a/float-no-zero/examples/zoomify.html b/float-no-zero/examples/zoomify.html new file mode 100644 index 0000000000..be050323af --- /dev/null +++ b/float-no-zero/examples/zoomify.html @@ -0,0 +1,51 @@ + + + + + + + + + + + Zoomify example + + + + + +
+ +
+
+
+
+
+ +
+ +
+

Zoomify example

+

Example of a Zoomify source.

+
+

See the zoomify.js source to see how this is done.

+
+
zoomify
+
+ +
+ +
+ + + + + + + diff --git a/float-no-zero/examples/zoomify.js b/float-no-zero/examples/zoomify.js new file mode 100644 index 0000000000..1eaa3dc272 --- /dev/null +++ b/float-no-zero/examples/zoomify.js @@ -0,0 +1,43 @@ +// This server does not support CORS, and so is incompatible with WebGL. +//var imgWidth = 8001; +//var imgHeight = 6943; +//var url = 'http://mapy.mzk.cz/AA22/0103/'; +//var crossOrigin = undefined; + +var imgWidth = 9911; +var imgHeight = 6100; +var url = 'http://vips.vtech.fr/cgi-bin/iipsrv.fcgi?zoomify=' + + '/mnt/MD1/AD00/plan_CHU-4HD-01/FOND.TIF/'; +var crossOrigin = 'anonymous'; + +var imgCenter = [imgWidth / 2, - imgHeight / 2]; + +// Maps always need a projection, but Zoomify layers are not geo-referenced, and +// are only measured in pixels. So, we create a fake projection that the map +// can use to properly display the layer. +var proj = new ol.proj.Projection({ + code: 'ZOOMIFY', + units: 'pixels', + extent: [0, 0, imgWidth, imgHeight] +}); + +var source = new ol.source.Zoomify({ + url: url, + size: [imgWidth, imgHeight], + crossOrigin: crossOrigin +}); + +var map = new ol.Map({ + layers: [ + new ol.layer.Tile({ + source: source + }) + ], + renderer: exampleNS.getRendererFromQueryString(), + target: 'map', + view: new ol.View2D({ + projection: proj, + center: imgCenter, + zoom: 0 + }) +}); diff --git a/float-no-zero/examples/zoomslider-require.js b/float-no-zero/examples/zoomslider-require.js new file mode 100644 index 0000000000..2e66ea18e6 --- /dev/null +++ b/float-no-zero/examples/zoomslider-require.js @@ -0,0 +1,5 @@ +goog.require('ol.Map'); +goog.require('ol.View2D'); +goog.require('ol.control.ZoomSlider'); +goog.require('ol.layer.Tile'); +goog.require('ol.source.MapQuest'); diff --git a/float-no-zero/examples/zoomslider.html b/float-no-zero/examples/zoomslider.html new file mode 100644 index 0000000000..cdb173dc33 --- /dev/null +++ b/float-no-zero/examples/zoomslider.html @@ -0,0 +1,116 @@ + + + + + + + + + + + + ol3 ZoomSlider demo + + + + + +
+ +
+
+

Default style

+
+
+
+

Placed between zoom controls

+
+
+
+

Horizontal and completely re-styled

+
+
+
+ +
+ +
+

ZoomSlider control

+

Example of various ZoomSlider controls.

+
+

+ See the zoomslider.js + source to see how this is done. +

+
+
+ zoom, zoomslider, slider, style, styling, css, control +
+
+
+
+ + + + + + + + diff --git a/float-no-zero/examples/zoomslider.js b/float-no-zero/examples/zoomslider.js new file mode 100644 index 0000000000..5e7b69ba6e --- /dev/null +++ b/float-no-zero/examples/zoomslider.js @@ -0,0 +1,29 @@ +/** + * Helper method for map-creation. + * + * @param {string} divId The id of the div for the map. + * @return {ol.Map} The ol.Map instance. + */ +var createMap = function(divId) { + var source, layer, map, zoomslider, resolutions; + + source = new ol.source.MapQuest({layer: 'sat'}); + layer = new ol.layer.Tile({ + source: source + }); + map = new ol.Map({ + layers: [layer], + target: divId, + view: new ol.View2D({ + center: [0, 0], + zoom: 2 + }) + }); + zoomslider = new ol.control.ZoomSlider(); + map.addControl(zoomslider); + return map; +}; + +var map1 = createMap('map1'); +var map2 = createMap('map2'); +var map3 = createMap('map3'); diff --git a/float-no-zero/ol/ol/animation.exports b/float-no-zero/ol/ol/animation.exports new file mode 100644 index 0000000000..5cab49819d --- /dev/null +++ b/float-no-zero/ol/ol/animation.exports @@ -0,0 +1,4 @@ +@exportSymbol ol.animation.bounce +@exportSymbol ol.animation.pan +@exportSymbol ol.animation.rotate +@exportSymbol ol.animation.zoom diff --git a/float-no-zero/ol/ol/animation.js b/float-no-zero/ol/ol/animation.js new file mode 100644 index 0000000000..17207baea0 --- /dev/null +++ b/float-no-zero/ol/ol/animation.js @@ -0,0 +1,154 @@ +// FIXME works for View2D only + +goog.provide('ol.animation'); + +goog.require('ol.PreRenderFunction'); +goog.require('ol.ViewHint'); +goog.require('ol.easing'); + + +/** + * @param {olx.animation.BounceOptions} options Bounce options. + * @return {ol.PreRenderFunction} Pre-render function. + * @todo stability experimental + */ +ol.animation.bounce = function(options) { + var resolution = options.resolution; + var start = goog.isDef(options.start) ? options.start : goog.now(); + var duration = goog.isDef(options.duration) ? options.duration : 1000; + var easing = goog.isDef(options.easing) ? + options.easing : ol.easing.upAndDown; + return ( + /** + * @param {ol.Map} map Map. + * @param {?ol.FrameState} frameState Frame state. + */ + function(map, frameState) { + if (frameState.time < start) { + frameState.animate = true; + frameState.viewHints[ol.ViewHint.ANIMATING] += 1; + return true; + } else if (frameState.time < start + duration) { + var delta = easing((frameState.time - start) / duration); + var deltaResolution = resolution - frameState.view2DState.resolution; + frameState.animate = true; + frameState.view2DState.resolution += delta * deltaResolution; + frameState.viewHints[ol.ViewHint.ANIMATING] += 1; + return true; + } else { + return false; + } + }); +}; + + +/** + * @param {olx.animation.PanOptions} options Pan options. + * @return {ol.PreRenderFunction} Pre-render function. + * @todo stability experimental + */ +ol.animation.pan = function(options) { + var source = options.source; + var start = goog.isDef(options.start) ? options.start : goog.now(); + var sourceX = source[0]; + var sourceY = source[1]; + var duration = goog.isDef(options.duration) ? options.duration : 1000; + var easing = goog.isDef(options.easing) ? + options.easing : ol.easing.inAndOut; + return ( + /** + * @param {ol.Map} map Map. + * @param {?ol.FrameState} frameState Frame state. + */ + function(map, frameState) { + if (frameState.time < start) { + frameState.animate = true; + frameState.viewHints[ol.ViewHint.ANIMATING] += 1; + return true; + } else if (frameState.time < start + duration) { + var delta = 1 - easing((frameState.time - start) / duration); + var deltaX = sourceX - frameState.view2DState.center[0]; + var deltaY = sourceY - frameState.view2DState.center[1]; + frameState.animate = true; + frameState.view2DState.center[0] += delta * deltaX; + frameState.view2DState.center[1] += delta * deltaY; + frameState.viewHints[ol.ViewHint.ANIMATING] += 1; + return true; + } else { + return false; + } + }); +}; + + +/** + * @param {olx.animation.RotateOptions} options Rotate options. + * @return {ol.PreRenderFunction} Pre-render function. + * @todo stability experimental + */ +ol.animation.rotate = function(options) { + var sourceRotation = options.rotation; + var start = goog.isDef(options.start) ? options.start : goog.now(); + var duration = goog.isDef(options.duration) ? options.duration : 1000; + var easing = goog.isDef(options.easing) ? + options.easing : ol.easing.inAndOut; + + return ( + /** + * @param {ol.Map} map Map. + * @param {?ol.FrameState} frameState Frame state. + */ + function(map, frameState) { + if (frameState.time < start) { + frameState.animate = true; + frameState.viewHints[ol.ViewHint.ANIMATING] += 1; + return true; + } else if (frameState.time < start + duration) { + var delta = 1 - easing((frameState.time - start) / duration); + var deltaRotation = + sourceRotation - frameState.view2DState.rotation; + frameState.animate = true; + frameState.view2DState.rotation += delta * deltaRotation; + frameState.viewHints[ol.ViewHint.ANIMATING] += 1; + return true; + } else { + return false; + } + }); +}; + + +/** + * @param {olx.animation.ZoomOptions} options Zoom options. + * @return {ol.PreRenderFunction} Pre-render function. + * @todo stability experimental + */ +ol.animation.zoom = function(options) { + var sourceResolution = options.resolution; + var start = goog.isDef(options.start) ? options.start : goog.now(); + var duration = goog.isDef(options.duration) ? options.duration : 1000; + var easing = goog.isDef(options.easing) ? + options.easing : ol.easing.inAndOut; + return ( + /** + * @param {ol.Map} map Map. + * @param {?ol.FrameState} frameState Frame state. + */ + function(map, frameState) { + if (frameState.time < start) { + frameState.animate = true; + frameState.viewHints[ol.ViewHint.ANIMATING] += 1; + return true; + } else if (frameState.time < start + duration) { + var delta = 1 - easing((frameState.time - start) / duration); + var deltaResolution = + sourceResolution - frameState.view2DState.resolution; + frameState.animate = true; + frameState.view2DState.resolution += delta * deltaResolution; + frameState.viewHints[ol.ViewHint.ANIMATING] += 1; + return true; + } else { + return false; + } + }); +}; diff --git a/float-no-zero/ol/ol/animation.jsdoc b/float-no-zero/ol/ol/animation.jsdoc new file mode 100644 index 0000000000..0c748f124d --- /dev/null +++ b/float-no-zero/ol/ol/animation.jsdoc @@ -0,0 +1,12 @@ +/** + * The {ol.animation} static methods are designed to be used with the {@link ol.Map#beforeRender} method. For example: + * + * var map = new ol.Map({ ... }); + * var zoom = ol.animation.zoom({ + * resolution: map.getView().getResolution() + * }); + * map.beforeRender(zoom); + * map.getView().setResolution(map.getView().getResolution() * 2); + * + * @namespace ol.animation + */ diff --git a/float-no-zero/ol/ol/array.js b/float-no-zero/ol/ol/array.js new file mode 100644 index 0000000000..882a501262 --- /dev/null +++ b/float-no-zero/ol/ol/array.js @@ -0,0 +1,104 @@ +goog.provide('ol.array'); + +goog.require('goog.array'); +goog.require('goog.asserts'); + + +/** + * @param {Array.} arr Array. + * @param {number} target Target. + * @return {number} Index. + */ +ol.array.binaryFindNearest = function(arr, target) { + var index = goog.array.binarySearch(arr, target, + /** + * @param {number} a A. + * @param {number} b B. + * @return {number} b minus a. + */ + function(a, b) { + return b - a; + }); + if (index >= 0) { + return index; + } else if (index == -1) { + return 0; + } else if (index == -arr.length - 1) { + return arr.length - 1; + } else { + var left = -index - 2; + var right = -index - 1; + if (arr[left] - target < target - arr[right]) { + return left; + } else { + return right; + } + } +}; + + +/** + * @param {Array.} arr Array. + * @param {number} target Target. + * @param {number} direction 0 means return the nearest, > 0 + * means return the largest nearest, < 0 means return the + * smallest nearest. + * @return {number} Index. + */ +ol.array.linearFindNearest = function(arr, target, direction) { + var n = arr.length; + if (arr[0] <= target) { + return 0; + } else if (target <= arr[n - 1]) { + return n - 1; + } else { + var i; + if (direction > 0) { + for (i = 1; i < n; ++i) { + if (arr[i] < target) { + return i - 1; + } + } + } else if (direction < 0) { + for (i = 1; i < n; ++i) { + if (arr[i] <= target) { + return i; + } + } + } else { + for (i = 1; i < n; ++i) { + if (arr[i] == target) { + return i; + } else if (arr[i] < target) { + if (arr[i - 1] - target < target - arr[i]) { + return i - 1; + } else { + return i; + } + } + } + } + // We should never get here, but the compiler complains + // if it finds a path for which no number is returned. + goog.asserts.fail(); + return n - 1; + } +}; + + +/** + * @param {Array.<*>} arr Array. + * @param {number} begin Begin index. + * @param {number} end End index. + */ +ol.array.reverseSubArray = function(arr, begin, end) { + goog.asserts.assert(begin >= 0); + goog.asserts.assert(end < arr.length); + while (begin < end) { + var tmp = arr[begin]; + arr[begin] = arr[end]; + arr[end] = tmp; + ++begin; + --end; + } +}; diff --git a/float-no-zero/ol/ol/attribution.exports b/float-no-zero/ol/ol/attribution.exports new file mode 100644 index 0000000000..053c0abeae --- /dev/null +++ b/float-no-zero/ol/ol/attribution.exports @@ -0,0 +1 @@ +@exportSymbol ol.Attribution diff --git a/float-no-zero/ol/ol/attribution.js b/float-no-zero/ol/ol/attribution.js new file mode 100644 index 0000000000..3c95c8b83d --- /dev/null +++ b/float-no-zero/ol/ol/attribution.js @@ -0,0 +1,74 @@ +goog.provide('ol.Attribution'); + +goog.require('ol.TileRange'); + + + +/** + * Create a new attribution to be associated with a layer source. + * + * Example: + * + * source: new ol.source.OSM({ + * attributions: [ + * new ol.Attribution({ + * html: 'All maps © ' + + * 'OpenCycleMap' + * }), + * ol.source.OSM.DATA_ATTRIBUTION + * ], + * .. + * + * @constructor + * @param {olx.AttributionOptions} options Attribution options. + * @struct + * @todo stability experimental + */ +ol.Attribution = function(options) { + + /** + * @private + * @type {string} + */ + this.html_ = options.html; + + /** + * @private + * @type {Object.>} + */ + this.tileRanges_ = goog.isDef(options.tileRanges) ? + options.tileRanges : null; + +}; + + +/** + * @return {string} HTML. + */ +ol.Attribution.prototype.getHTML = function() { + return this.html_; +}; + + +/** + * @param {Object.} tileRanges Tile ranges. + * @return {boolean} Intersects any tile range. + */ +ol.Attribution.prototype.intersectsAnyTileRange = function(tileRanges) { + if (goog.isNull(this.tileRanges_)) { + return true; + } + var i, ii, tileRange, z; + for (z in tileRanges) { + if (!(z in this.tileRanges_)) { + continue; + } + tileRange = tileRanges[z]; + for (i = 0, ii = this.tileRanges_[z].length; i < ii; ++i) { + if (this.tileRanges_[z][i].intersects(tileRange)) { + return true; + } + } + } + return false; +}; diff --git a/float-no-zero/ol/ol/binary.js b/float-no-zero/ol/ol/binary.js new file mode 100644 index 0000000000..96f27492ee --- /dev/null +++ b/float-no-zero/ol/ol/binary.js @@ -0,0 +1,174 @@ +// FIXME Test on Internet Explorer with VBArray + +goog.provide('ol.binary.Buffer'); +goog.provide('ol.binary.IReader'); + +goog.require('goog.asserts'); +goog.require('goog.userAgent'); +goog.require('ol.BrowserFeature'); + + + +/** + * @constructor + * @param {ArrayBuffer|string} data Data. + */ +ol.binary.Buffer = function(data) { + + /** + * @private + * @type {ArrayBuffer|string} + */ + this.data_ = data; + +}; + + +/** + * @return {ol.binary.IReader} Reader. + */ +ol.binary.Buffer.prototype.getReader = function() { + var data = this.data_; + if (ol.BrowserFeature.HAS_ARRAY_BUFFER) { + var arrayBuffer; + if (data instanceof ArrayBuffer) { + arrayBuffer = data; + } else if (goog.isString(data)) { + // FIXME check what happens with Unicode + arrayBuffer = new ArrayBuffer(data.length); + var uint8View = new Uint8Array(arrayBuffer); + var i, ii; + for (i = 0, ii = data.length; i < ii; ++i) { + uint8View[i] = data.charCodeAt(i); + } + } else { + goog.asserts.fail(); + return null; + } + return new ol.binary.ArrayBufferReader(arrayBuffer); + } else { + goog.asserts.assert(goog.isString(data)); + goog.asserts.assert( + goog.userAgent.IE && !goog.userAgent.isVersionOrHigher('10.0')); + return new ol.binary.ArrayReader(new VBArray(data).toArray()); + } +}; + + + +/** + * @interface + */ +ol.binary.IReader = function() {}; + + +/** + * @return {boolean} At EOF. + */ +ol.binary.IReader.prototype.atEOF = function() {}; + + +/** + * @return {number} Byte. + */ +ol.binary.IReader.prototype.readByte = function() {}; + + + +/** + * @constructor + * @param {ArrayBuffer} arrayBuffer Array buffer. + * @implements {ol.binary.IReader} + */ +ol.binary.ArrayBufferReader = function(arrayBuffer) { + + /** + * @private + * @type {Uint8Array} + */ + this.uint8View_ = new Uint8Array(arrayBuffer); + + /** + * @private + * @type {number} + */ + this.length_ = this.uint8View_.length; + + /** + * @private + * @type {number} + */ + this.offset_ = 0; + +}; + + +/** + * @inheritDoc + */ +ol.binary.ArrayBufferReader.prototype.atEOF = function() { + return this.offset_ == this.length_; +}; + + +/** + * @inheritDoc + */ +ol.binary.ArrayBufferReader.prototype.readByte = function() { + if (this.offset_ < this.length_) { + return this.uint8View_[this.offset_++]; + } else { + goog.asserts.fail(); + return 0; + } +}; + + + +/** + * @constructor + * @implements {ol.binary.IReader} + * @param {Array.} array Array. + */ +ol.binary.ArrayReader = function(array) { + + /** + * @private + * @type {Array.} + */ + this.array_ = array; + + /** + * @private + * @type {number} + */ + this.length_ = array.length; + + /** + * @private + * @type {number} + */ + this.offset_ = 0; + +}; + + +/** + * @inheritDoc + */ +ol.binary.ArrayReader.prototype.atEOF = function() { + return this.offset_ == this.length_; +}; + + +/** + * @inheritDoc + */ +ol.binary.ArrayReader.prototype.readByte = function() { + if (this.offset_ < this.length_) { + return this.array_[this.offset_++]; + } else { + goog.asserts.fail(); + return 0; + } +}; diff --git a/float-no-zero/ol/ol/browserfeature.exports b/float-no-zero/ol/ol/browserfeature.exports new file mode 100644 index 0000000000..832c611d89 --- /dev/null +++ b/float-no-zero/ol/ol/browserfeature.exports @@ -0,0 +1,7 @@ +@exportSymbol ol.BrowserFeature +@exportProperty ol.BrowserFeature.DEVICE_PIXEL_RATIO +@exportProperty ol.BrowserFeature.HAS_CANVAS +@exportProperty ol.BrowserFeature.HAS_DEVICE_ORIENTATION +@exportProperty ol.BrowserFeature.HAS_GEOLOCATION +@exportProperty ol.BrowserFeature.HAS_TOUCH +@exportProperty ol.BrowserFeature.HAS_WEBGL diff --git a/float-no-zero/ol/ol/browserfeature.js b/float-no-zero/ol/ol/browserfeature.js new file mode 100644 index 0000000000..265ba06fdd --- /dev/null +++ b/float-no-zero/ol/ol/browserfeature.js @@ -0,0 +1,188 @@ +goog.provide('ol.BrowserFeature'); + +goog.require('goog.dom'); +goog.require('goog.dom.TagName'); +goog.require('goog.userAgent'); +goog.require('ol.webgl'); + + +/** + * @define {boolean} Assume touch. + */ +ol.ASSUME_TOUCH = false; + + +/** + * @define {boolean} Whether to enable canvas. + */ +ol.ENABLE_CANVAS = true; + + +/** + * @define {boolean} Whether to enable DOM. + */ +ol.ENABLE_DOM = true; + + +/** + * @define {boolean} Whether to enable rendering of image layers. + */ +ol.ENABLE_IMAGE = true; + + +/** + * @define {boolean} Whether to enable rendering of tile layers. + */ +ol.ENABLE_TILE = true; + + +/** + * @define {boolean} Whether to enable rendering of vector layers. + */ +ol.ENABLE_VECTOR = true; + + +/** + * @define {boolean} Whether to enable WebGL. + */ +ol.ENABLE_WEBGL = true; + + +/** + * @define {boolean} Whether to support legacy IE (7-8). + */ +ol.LEGACY_IE_SUPPORT = false; + + +/** + * Whether the current browser is legacy IE + * @const + * @type {boolean} + */ +ol.IS_LEGACY_IE = goog.userAgent.IE && + !goog.userAgent.isVersionOrHigher('9.0') && goog.userAgent.VERSION !== ''; + + +/** + * The ratio between physical pixels and device-independent pixels + * (dips) on the device (`window.devicePixelRatio`). + * @const + * @type {number} + * @todo stability experimental + */ +ol.BrowserFeature.DEVICE_PIXEL_RATIO = goog.global.devicePixelRatio || 1; + + +/** + * True if the browser supports ArrayBuffers. + * @type {boolean} + * @todo stability experimental + */ +ol.BrowserFeature.HAS_ARRAY_BUFFER = 'ArrayBuffer' in goog.global; + + +/** + * True if the browser's Canvas implementation implements {get,set}LineDash. + * @type {boolean} + * @todo stability experimental + */ +ol.BrowserFeature.HAS_CANVAS_LINE_DASH = false; + + +/** + * True if browser supports Canvas. + * @const + * @type {boolean} + * @todo stability experimental + */ +ol.BrowserFeature.HAS_CANVAS = ol.ENABLE_CANVAS && ( + /** + * @return {boolean} Canvas supported. + */ + function() { + if (!('HTMLCanvasElement' in goog.global)) { + return false; + } + try { + var canvas = /** @type {HTMLCanvasElement} */ + (goog.dom.createElement(goog.dom.TagName.CANVAS)); + var context = /** @type {CanvasRenderingContext2D} */ + (canvas.getContext('2d')); + if (goog.isNull(context)) { + return false; + } else { + if (goog.isDef(context.setLineDash)) { + ol.BrowserFeature.HAS_CANVAS_LINE_DASH = true; + } + return true; + } + } catch (e) { + return false; + } + })(); + + +/** + * Indicates if DeviceOrientation is supported in the user's browser. + * @const + * @type {boolean} + * @todo stability experimental + */ +ol.BrowserFeature.HAS_DEVICE_ORIENTATION = + 'DeviceOrientationEvent' in goog.global; + + +/** + * True if browser supports DOM. + * @const + * @type {boolean} + * @todo stability experimental + */ +ol.BrowserFeature.HAS_DOM = ol.ENABLE_DOM; + + +/** + * Is HTML5 geolocation supported in the current browser? + * @const + * @type {boolean} + * @todo stability experimental + */ +ol.BrowserFeature.HAS_GEOLOCATION = 'geolocation' in goog.global.navigator; + + +/** + * True if browser supports touch events. + * @const + * @type {boolean} + * @todo stability experimental + */ +ol.BrowserFeature.HAS_TOUCH = ol.ASSUME_TOUCH || + (goog.global.document && + 'ontouchstart' in goog.global.document.documentElement) || + !!(goog.global.navigator.msPointerEnabled); + + +/** + * True if browser supports WebGL. + * @const + * @type {boolean} + * @todo stability experimental + */ +ol.BrowserFeature.HAS_WEBGL = ol.ENABLE_WEBGL && ( + /** + * @return {boolean} WebGL supported. + */ + function() { + if (!('WebGLRenderingContext' in goog.global)) { + return false; + } + try { + var canvas = /** @type {HTMLCanvasElement} */ + (goog.dom.createElement(goog.dom.TagName.CANVAS)); + return !goog.isNull(ol.webgl.getContext(canvas, { + failIfMajorPerformanceCaveat: true + })); + } catch (e) { + return false; + } + })(); diff --git a/float-no-zero/ol/ol/browserfeature.jsdoc b/float-no-zero/ol/ol/browserfeature.jsdoc new file mode 100644 index 0000000000..b07b409986 --- /dev/null +++ b/float-no-zero/ol/ol/browserfeature.jsdoc @@ -0,0 +1,3 @@ +/** + * @namespace ol.BrowserFeature + */ diff --git a/float-no-zero/ol/ol/canvasfunction.js b/float-no-zero/ol/ol/canvasfunction.js new file mode 100644 index 0000000000..10caa4be88 --- /dev/null +++ b/float-no-zero/ol/ol/canvasfunction.js @@ -0,0 +1,17 @@ +goog.provide('ol.CanvasFunctionType'); + + +/** + * A function returning the canvas element (`{HTMLCanvasElement}`) + * used by the source as an image. The arguments passed to the function are: + * {@link ol.Extent} the image extent, `{number}` the image resolution, + * `{number}` the device pixel ratio, {@link ol.Size} the image size, and + * {@link ol.proj.Projection} the image projection. The canvas returned by + * this function is cached by the source. The this keyword inside the function + * references the {@link ol.source.ImageCanvas}. + * + * @typedef {function(this:ol.source.ImageCanvas, ol.Extent, number, + * number, ol.Size, ol.proj.Projection): HTMLCanvasElement} + * @todo stability experimental + */ +ol.CanvasFunctionType; diff --git a/float-no-zero/ol/ol/centerconstraint.js b/float-no-zero/ol/ol/centerconstraint.js new file mode 100644 index 0000000000..790e53237f --- /dev/null +++ b/float-no-zero/ol/ol/centerconstraint.js @@ -0,0 +1,43 @@ +goog.provide('ol.CenterConstraint'); +goog.provide('ol.CenterConstraintType'); + +goog.require('goog.math'); + + +/** + * @typedef {function((ol.Coordinate|undefined)): (ol.Coordinate|undefined)} + * @todo stability experimental + */ +ol.CenterConstraintType; + + +/** + * @param {ol.Extent} extent Extent. + * @return {ol.CenterConstraintType} + */ +ol.CenterConstraint.createExtent = function(extent) { + return ( + /** + * @param {ol.Coordinate|undefined} center Center. + * @return {ol.Coordinate|undefined} Center. + */ + function(center) { + if (goog.isDef(center)) { + return [ + goog.math.clamp(center[0], extent[0], extent[2]), + goog.math.clamp(center[1], extent[1], extent[3]) + ]; + } else { + return undefined; + } + }); +}; + + +/** + * @param {ol.Coordinate|undefined} center Center. + * @return {ol.Coordinate|undefined} Center. + */ +ol.CenterConstraint.none = function(center) { + return center; +}; diff --git a/float-no-zero/ol/ol/collection.exports b/float-no-zero/ol/ol/collection.exports new file mode 100644 index 0000000000..afd0bd9b97 --- /dev/null +++ b/float-no-zero/ol/ol/collection.exports @@ -0,0 +1,13 @@ +@exportSymbol ol.Collection +@exportProperty ol.Collection.prototype.clear +@exportProperty ol.Collection.prototype.extend +@exportProperty ol.Collection.prototype.forEach +@exportProperty ol.Collection.prototype.getArray +@exportProperty ol.Collection.prototype.getAt +@exportProperty ol.Collection.prototype.getLength +@exportProperty ol.Collection.prototype.insertAt +@exportProperty ol.Collection.prototype.pop +@exportProperty ol.Collection.prototype.push +@exportProperty ol.Collection.prototype.remove +@exportProperty ol.Collection.prototype.removeAt +@exportProperty ol.Collection.prototype.setAt diff --git a/float-no-zero/ol/ol/collection.js b/float-no-zero/ol/ol/collection.js new file mode 100644 index 0000000000..4ef1849391 --- /dev/null +++ b/float-no-zero/ol/ol/collection.js @@ -0,0 +1,254 @@ + +/** + * An implementation of Google Maps' MVCArray. + * @see https://developers.google.com/maps/documentation/javascript/reference + */ + +goog.provide('ol.Collection'); +goog.provide('ol.CollectionEvent'); +goog.provide('ol.CollectionEventType'); + +goog.require('goog.array'); +goog.require('goog.events.Event'); +goog.require('ol.Object'); + + +/** + * @enum {string} + */ +ol.CollectionEventType = { + ADD: 'add', + REMOVE: 'remove' +}; + + + +/** + * @constructor + * @extends {goog.events.Event} + * @implements {oli.CollectionEvent} + * @param {ol.CollectionEventType} type Type. + * @param {*=} opt_element Element. + * @param {Object=} opt_target Target. + */ +ol.CollectionEvent = function(type, opt_element, opt_target) { + + goog.base(this, type, opt_target); + + /** + * @type {*} + */ + this.element = opt_element; + +}; +goog.inherits(ol.CollectionEvent, goog.events.Event); + + +/** + * @enum {string} + */ +ol.CollectionProperty = { + LENGTH: 'length' +}; + + + +/** + * A mutable MVC Array. + * @constructor + * @extends {ol.Object} + * @param {Array=} opt_array Array. + * @todo stability experimental + * @todo observable length {number} readonly the length of the array + */ +ol.Collection = function(opt_array) { + + goog.base(this); + + /** + * @private + * @type {Array.<*>} + */ + this.array_ = opt_array || []; + + this.updateLength_(); + +}; +goog.inherits(ol.Collection, ol.Object); + + +/** + * Remove all elements from the collection. + * @todo stability experimental + */ +ol.Collection.prototype.clear = function() { + while (this.getLength() > 0) { + this.pop(); + } +}; + + +/** + * @param {Array} arr Array. + * @return {ol.Collection} This collection. + * @todo stability experimental + */ +ol.Collection.prototype.extend = function(arr) { + var i, ii; + for (i = 0, ii = arr.length; i < ii; ++i) { + this.push(arr[i]); + } + return this; +}; + + +/** + * Iterate over each element, calling the provided callback. + * @param {function(this: S, T, number, Array.): *} f The function to call + * for every element. This function takes 3 arguments (the element, the + * index and the array). The return value is ignored. + * @param {S=} opt_this The object to use as `this` in `f`. + * @template T,S + * @todo stability experimental + */ +ol.Collection.prototype.forEach = function(f, opt_this) { + goog.array.forEach(this.array_, f, opt_this); +}; + + +/** + * Get a reference to the underlying Array object. Warning: if the array + * is mutated, no events will be dispatched by the collection, and the + * collection's "length" property won't be in sync with the actual length + * of the array. + * @return {Array} Array. + * @todo stability experimental + */ +ol.Collection.prototype.getArray = function() { + return this.array_; +}; + + +/** + * Get the element at the provided index. + * @param {number} index Index. + * @return {*} Element. + * @todo stability experimental + */ +ol.Collection.prototype.getAt = function(index) { + return this.array_[index]; +}; + + +/** + * Get the length of this collection. + * @return {number} Length. + * @todo stability experimental + */ +ol.Collection.prototype.getLength = function() { + return /** @type {number} */ (this.get(ol.CollectionProperty.LENGTH)); +}; + + +/** + * Insert an element at the provided index. + * @param {number} index Index. + * @param {*} elem Element. + * @todo stability experimental + */ +ol.Collection.prototype.insertAt = function(index, elem) { + goog.array.insertAt(this.array_, elem, index); + this.updateLength_(); + this.dispatchEvent( + new ol.CollectionEvent(ol.CollectionEventType.ADD, elem, this)); +}; + + +/** + * Remove the last element of the collection. + * @return {*} Element. + * @todo stability experimental + */ +ol.Collection.prototype.pop = function() { + return this.removeAt(this.getLength() - 1); +}; + + +/** + * Insert the provided element at the end of the collection. + * @param {*} elem Element. + * @return {number} Length. + * @todo stability experimental + */ +ol.Collection.prototype.push = function(elem) { + var n = this.array_.length; + this.insertAt(n, elem); + return n; +}; + + +/** + * Removes the first occurence of elem from the collection. + * @param {*} elem Element. + * @return {*} The removed element or undefined if elem was not found. + * @todo stability experimental + */ +ol.Collection.prototype.remove = function(elem) { + var arr = this.array_; + var i, ii; + for (i = 0, ii = arr.length; i < ii; ++i) { + if (arr[i] === elem) { + return this.removeAt(i); + } + } + return undefined; +}; + + +/** + * Remove the element at the provided index. + * @param {number} index Index. + * @return {*} Value. + * @todo stability experimental + */ +ol.Collection.prototype.removeAt = function(index) { + var prev = this.array_[index]; + goog.array.removeAt(this.array_, index); + this.updateLength_(); + this.dispatchEvent( + new ol.CollectionEvent(ol.CollectionEventType.REMOVE, prev, this)); + return prev; +}; + + +/** + * Set the element at the provided index. + * @param {number} index Index. + * @param {*} elem Element. + * @todo stability experimental + */ +ol.Collection.prototype.setAt = function(index, elem) { + var n = this.getLength(); + if (index < n) { + var prev = this.array_[index]; + this.array_[index] = elem; + this.dispatchEvent( + new ol.CollectionEvent(ol.CollectionEventType.REMOVE, prev, this)); + this.dispatchEvent( + new ol.CollectionEvent(ol.CollectionEventType.ADD, elem, this)); + } else { + var j; + for (j = n; j < index; ++j) { + this.insertAt(j, undefined); + } + this.insertAt(index, elem); + } +}; + + +/** + * @private + */ +ol.Collection.prototype.updateLength_ = function() { + this.set(ol.CollectionProperty.LENGTH, this.array_.length); +}; diff --git a/float-no-zero/ol/ol/color/color.exports b/float-no-zero/ol/ol/color/color.exports new file mode 100644 index 0000000000..cc1d37a73a --- /dev/null +++ b/float-no-zero/ol/ol/color/color.exports @@ -0,0 +1,2 @@ +@exportSymbol ol.color.asArray +@exportSymbol ol.color.asString diff --git a/float-no-zero/ol/ol/color/color.js b/float-no-zero/ol/ol/color/color.js new file mode 100644 index 0000000000..a0befe3df5 --- /dev/null +++ b/float-no-zero/ol/ol/color/color.js @@ -0,0 +1,354 @@ +// We can't use goog.color or goog.color.alpha because they interally use a hex +// string representation that encodes each channel in a single byte. This +// causes occasional loss of precision and rounding errors, especially in the +// alpha channel. + +goog.provide('ol.color'); + +goog.require('goog.array'); +goog.require('goog.asserts'); +goog.require('goog.color'); +goog.require('goog.color.names'); +goog.require('goog.math'); +goog.require('goog.vec.Mat4'); + + +/** + * @define {boolean} Enable named colors. + * Enabling named colors adds about 3KB uncompressed / 1.5KB compressed to the + * final build size. + */ +ol.color.ENABLE_NAMED_COLORS = true; + + +/** + * A color represented as a short array [red, green, blue, alpha]. + * red, green, and blue should be integers in the range 0..255 inclusive. + * alpha should be a float in the range 0..1 inclusive. + * @typedef {Array.} + */ +ol.Color; + + +/** + * This RegExp matches # followed by 3 or 6 hex digits. + * @const + * @type {RegExp} + * @private + */ +ol.color.hexColorRe_ = /^#(?:[0-9a-f]{3}){1,2}$/i; + + +/** + * @see goog.color.rgbColorRe_ + * @const + * @type {RegExp} + * @private + */ +ol.color.rgbColorRe_ = + /^(?:rgb)?\((0|[1-9]\d{0,2}),\s?(0|[1-9]\d{0,2}),\s?(0|[1-9]\d{0,2})\)$/i; + + +/** + * @see goog.color.alpha.rgbaColorRe_ + * @const + * @type {RegExp} + * @private + */ +ol.color.rgbaColorRe_ = + /^(?:rgba)?\((0|[1-9]\d{0,2}),\s?(0|[1-9]\d{0,2}),\s?(0|[1-9]\d{0,2}),\s?(0|1|0\.\d{0,10})\)$/i; + + +/** + * @param {ol.Color} dst Destination. + * @param {ol.Color} src Source. + * @param {ol.Color=} opt_color Color. + * @return {ol.Color} Color. + */ +ol.color.blend = function(dst, src, opt_color) { + // http://en.wikipedia.org/wiki/Alpha_compositing + // FIXME do we need to scale by 255? + var out = goog.isDef(opt_color) ? opt_color : []; + var dstA = dst[3]; + var srcA = dst[3]; + if (dstA == 1) { + out[0] = (src[0] * srcA + dst[0] * (1 - srcA) + 0.5) | 0; + out[1] = (src[1] * srcA + dst[1] * (1 - srcA) + 0.5) | 0; + out[2] = (src[2] * srcA + dst[2] * (1 - srcA) + 0.5) | 0; + out[4] = 1; + } else if (srcA === 0) { + out[0] = dst[0]; + out[1] = dst[1]; + out[2] = dst[2]; + out[3] = dstA; + } else { + var outA = srcA + dstA * (1 - srcA); + if (outA === 0) { + out[0] = 0; + out[1] = 0; + out[2] = 0; + out[3] = 0; + } else { + out[0] = ((src[0] * srcA + dst[0] * dstA * (1 - srcA)) / outA + 0.5) | 0; + out[1] = ((src[1] * srcA + dst[1] * dstA * (1 - srcA)) / outA + 0.5) | 0; + out[2] = ((src[2] * srcA + dst[2] * dstA * (1 - srcA)) / outA + 0.5) | 0; + out[3] = outA; + } + } + goog.asserts.assert(ol.color.isValid(out)); + return out; +}; + + +/** + * @param {ol.Color|string} color Color. + * @return {ol.Color} Color. + */ +ol.color.asArray = function(color) { + if (goog.isArray(color)) { + return color; + } else { + goog.asserts.assert(goog.isString(color)); + return ol.color.fromString(color); + } +}; + + +/** + * @param {ol.Color|string} color Color. + * @return {string} String. + */ +ol.color.asString = function(color) { + if (goog.isString(color)) { + return color; + } else { + goog.asserts.assert(goog.isArray(color)); + return ol.color.toString(color); + } +}; + + +/** + * @param {ol.Color} color1 Color1. + * @param {ol.Color} color2 Color2. + * @return {boolean} Equals. + */ +ol.color.equals = function(color1, color2) { + return color1 === color2 || ( + color1[0] == color2[0] && color1[1] == color2[1] && + color1[2] == color2[2] && color1[3] == color2[3]); +}; + + +/** + * @param {string} s String. + * @param {ol.Color=} opt_color Color. + * @return {ol.Color} Color. + */ +ol.color.fromString = ( + /** + * @return {function(string, ol.Color=): ol.Color} + */ + function() { + + // We maintain a small cache of parsed strings. To provide cheap LRU-like + // semantics, whenever the cache grows too large we simply delete an + // arbitrary 25% of the entries. + + /** + * @const + * @type {number} + */ + var MAX_CACHE_SIZE = 1024; + + /** + * @type {Object.} + */ + var cache = {}; + + /** + * @type {number} + */ + var cacheSize = 0; + + return ( + /** + * @param {string} s String. + * @param {ol.Color=} opt_color Color. + * @return {ol.Color} Color. + */ + function(s, opt_color) { + var color; + if (cache.hasOwnProperty(s)) { + color = cache[s]; + } else { + if (cacheSize >= MAX_CACHE_SIZE) { + var i = 0; + var key; + for (key in cache) { + if ((i++ & 3) === 0) { + delete cache[key]; + --cacheSize; + } + } + } + color = ol.color.fromStringInternal_(s); + cache[s] = color; + ++cacheSize; + } + return ol.color.returnOrUpdate(color, opt_color); + }); + + })(); + + +/** + * @param {string} s String. + * @private + * @return {ol.Color} Color. + */ +ol.color.fromStringInternal_ = function(s) { + + var isHex = false; + if (ol.color.ENABLE_NAMED_COLORS && goog.color.names.hasOwnProperty(s)) { + // goog.color.names does not have a type declaration, so add a typecast + s = /** @type {string} */ (goog.color.names[s]); + isHex = true; + } + + var r, g, b, a, color, match; + if (isHex || (match = ol.color.hexColorRe_.exec(s))) { // hex + var n = s.length - 1; // number of hex digits + goog.asserts.assert(n == 3 || n == 6); + var d = n == 3 ? 1 : 2; // number of digits per channel + r = parseInt(s.substr(1 + 0 * d, d), 16); + g = parseInt(s.substr(1 + 1 * d, d), 16); + b = parseInt(s.substr(1 + 2 * d, d), 16); + if (d == 1) { + r = (r << 4) + r; + g = (g << 4) + g; + b = (b << 4) + b; + } + a = 1; + color = [r, g, b, a]; + goog.asserts.assert(ol.color.isValid(color)); + return color; + } else if ((match = ol.color.rgbaColorRe_.exec(s))) { // rgba() + r = Number(match[1]); + g = Number(match[2]); + b = Number(match[3]); + a = Number(match[4]); + color = [r, g, b, a]; + return ol.color.normalize(color, color); + } else if ((match = ol.color.rgbColorRe_.exec(s))) { // rgb() + r = Number(match[1]); + g = Number(match[2]); + b = Number(match[3]); + color = [r, g, b, 1]; + return ol.color.normalize(color, color); + } else { + throw new Error(s + ' is not a valid color'); + } + +}; + + +/** + * @param {ol.Color} color Color. + * @return {boolean} Is valid. + */ +ol.color.isValid = function(color) { + return 0 <= color[0] && color[0] < 256 && + 0 <= color[1] && color[1] < 256 && + 0 <= color[2] && color[2] < 256 && + 0 <= color[3] && color[3] <= 1; +}; + + +/** + * @param {ol.Color} color Color. + * @param {ol.Color=} opt_color Color. + * @return {ol.Color} Clamped color. + */ +ol.color.normalize = function(color, opt_color) { + var result = goog.isDef(opt_color) ? opt_color : []; + result[0] = goog.math.clamp((color[0] + 0.5) | 0, 0, 255); + result[1] = goog.math.clamp((color[1] + 0.5) | 0, 0, 255); + result[2] = goog.math.clamp((color[2] + 0.5) | 0, 0, 255); + result[3] = goog.math.clamp(color[3], 0, 1); + return result; +}; + + +/** + * @param {ol.Color} color Color. + * @param {ol.Color=} opt_color Color. + * @return {ol.Color} Color. + */ +ol.color.returnOrUpdate = function(color, opt_color) { + if (goog.isDef(opt_color)) { + opt_color[0] = color[0]; + opt_color[1] = color[1]; + opt_color[2] = color[2]; + opt_color[3] = color[3]; + return opt_color; + } else { + return color; + } +}; + + +/** + * @param {ol.Color} color Color. + * @return {string} String. + */ +ol.color.toString = function(color) { + var r = color[0]; + if (r != (r | 0)) { + r = (r + 0.5) | 0; + } + var g = color[1]; + if (g != (g | 0)) { + g = (g + 0.5) | 0; + } + var b = color[2]; + if (b != (b | 0)) { + b = (b + 0.5) | 0; + } + var a = color[3]; + return 'rgba(' + r + ',' + g + ',' + b + ',' + a + ')'; +}; + + +/** + * @param {ol.Color} color Color. + * @param {goog.vec.Mat4.Number} transform Transform. + * @param {ol.Color=} opt_color Color. + * @return {ol.Color} Transformed color. + */ +ol.color.transform = function(color, transform, opt_color) { + var result = goog.isDef(opt_color) ? opt_color : []; + result = goog.vec.Mat4.multVec3(transform, color, result); + goog.asserts.assert(goog.isArray(result)); + result[3] = color[3]; + return ol.color.normalize(result, result); +}; + + +/** + * @param {ol.Color|string} color1 Color2. + * @param {ol.Color|string} color2 Color2. + * @return {boolean} Equals. + */ +ol.color.stringOrColorEquals = function(color1, color2) { + if (color1 === color2 || color1 == color2) { + return true; + } + if (goog.isString(color1)) { + color1 = ol.color.fromString(color1); + } + if (goog.isString(color2)) { + color2 = ol.color.fromString(color2); + } + return ol.color.equals(color1, color2); +}; diff --git a/float-no-zero/ol/ol/color/colormatrix.js b/float-no-zero/ol/ol/color/colormatrix.js new file mode 100644 index 0000000000..ac947263fc --- /dev/null +++ b/float-no-zero/ol/ol/color/colormatrix.js @@ -0,0 +1,205 @@ +goog.provide('ol.color.Matrix'); + +goog.require('goog.vec.Mat4'); + + + +/** + * @constructor + */ +ol.color.Matrix = function() { + + /** + * @private + * @type {!goog.vec.Mat4.Number} + */ + this.colorMatrix_ = goog.vec.Mat4.createNumber(); + + /** + * @private + * @type {number|undefined} + */ + this.brightness_ = undefined; + + /** + * @private + * @type {!goog.vec.Mat4.Number} + */ + this.brightnessMatrix_ = goog.vec.Mat4.createNumber(); + + /** + * @private + * @type {number|undefined} + */ + this.contrast_ = undefined; + + /** + * @private + * @type {!goog.vec.Mat4.Number} + */ + this.contrastMatrix_ = goog.vec.Mat4.createNumber(); + + /** + * @private + * @type {number|undefined} + */ + this.hue_ = undefined; + + /** + * @private + * @type {!goog.vec.Mat4.Number} + */ + this.hueMatrix_ = goog.vec.Mat4.createNumber(); + + /** + * @private + * @type {number|undefined} + */ + this.saturation_ = undefined; + + /** + * @private + * @type {!goog.vec.Mat4.Number} + */ + this.saturationMatrix_ = goog.vec.Mat4.createNumber(); + +}; + + +/** + * @param {!goog.vec.Mat4.Number} matrix Matrix. + * @param {number} value Brightness value. + * @return {!goog.vec.Mat4.Number} Matrix. + */ +ol.color.Matrix.makeBrightness = function(matrix, value) { + goog.vec.Mat4.makeTranslate(matrix, value, value, value); + return matrix; +}; + + +/** + * @param {!goog.vec.Mat4.Number} matrix Matrix. + * @param {number} value Contrast value. + * @return {!goog.vec.Mat4.Number} Matrix. + */ +ol.color.Matrix.makeContrast = function(matrix, value) { + goog.vec.Mat4.makeScale(matrix, value, value, value); + var translateValue = (-0.5 * value + 0.5); + goog.vec.Mat4.setColumnValues(matrix, 3, + translateValue, translateValue, translateValue, 1); + return matrix; +}; + + +/** + * @param {!goog.vec.Mat4.Number} matrix Matrix. + * @param {number} value Hue value. + * @return {!goog.vec.Mat4.Number} Matrix. + */ +ol.color.Matrix.makeHue = function(matrix, value) { + var cosHue = Math.cos(value); + var sinHue = Math.sin(value); + var v00 = 0.213 + cosHue * 0.787 - sinHue * 0.213; + var v01 = 0.715 - cosHue * 0.715 - sinHue * 0.715; + var v02 = 0.072 - cosHue * 0.072 + sinHue * 0.928; + var v03 = 0; + var v10 = 0.213 - cosHue * 0.213 + sinHue * 0.143; + var v11 = 0.715 + cosHue * 0.285 + sinHue * 0.140; + var v12 = 0.072 - cosHue * 0.072 - sinHue * 0.283; + var v13 = 0; + var v20 = 0.213 - cosHue * 0.213 - sinHue * 0.787; + var v21 = 0.715 - cosHue * 0.715 + sinHue * 0.715; + var v22 = 0.072 + cosHue * 0.928 + sinHue * 0.072; + var v23 = 0; + var v30 = 0; + var v31 = 0; + var v32 = 0; + var v33 = 1; + goog.vec.Mat4.setFromValues(matrix, + v00, v10, v20, v30, + v01, v11, v21, v31, + v02, v12, v22, v32, + v03, v13, v23, v33); + return matrix; +}; + + +/** + * @param {!goog.vec.Mat4.Number} matrix Matrix. + * @param {number} value Saturation value. + * @return {!goog.vec.Mat4.Number} Matrix. + */ +ol.color.Matrix.makeSaturation = function(matrix, value) { + var v00 = 0.213 + 0.787 * value; + var v01 = 0.715 - 0.715 * value; + var v02 = 0.072 - 0.072 * value; + var v03 = 0; + var v10 = 0.213 - 0.213 * value; + var v11 = 0.715 + 0.285 * value; + var v12 = 0.072 - 0.072 * value; + var v13 = 0; + var v20 = 0.213 - 0.213 * value; + var v21 = 0.715 - 0.715 * value; + var v22 = 0.072 + 0.928 * value; + var v23 = 0; + var v30 = 0; + var v31 = 0; + var v32 = 0; + var v33 = 1; + goog.vec.Mat4.setFromValues(matrix, + v00, v10, v20, v30, + v01, v11, v21, v31, + v02, v12, v22, v32, + v03, v13, v23, v33); + return matrix; +}; + + +/** + * @param {number|undefined} brightness Brightness. + * @param {number|undefined} contrast Contrast. + * @param {number|undefined} hue Hue. + * @param {number|undefined} saturation Saturation. + * @return {!goog.vec.Mat4.Number} Matrix. + */ +ol.color.Matrix.prototype.getMatrix = function( + brightness, contrast, hue, saturation) { + var colorMatrixDirty = false; + if (goog.isDef(brightness) && brightness !== this.brightness_) { + ol.color.Matrix.makeBrightness(this.brightnessMatrix_, brightness); + this.brightness_ = brightness; + colorMatrixDirty = true; + } + if (goog.isDef(contrast) && contrast !== this.contrast_) { + ol.color.Matrix.makeContrast(this.contrastMatrix_, contrast); + this.contrast_ = contrast; + colorMatrixDirty = true; + } + if (goog.isDef(hue) && hue !== this.hue_) { + ol.color.Matrix.makeHue(this.hueMatrix_, hue); + this.hue_ = hue; + colorMatrixDirty = true; + } + if (goog.isDef(saturation) && saturation !== this.saturation_) { + ol.color.Matrix.makeSaturation(this.saturationMatrix_, saturation); + this.saturation_ = saturation; + colorMatrixDirty = true; + } + if (colorMatrixDirty) { + var colorMatrix = this.colorMatrix_; + goog.vec.Mat4.makeIdentity(colorMatrix); + if (goog.isDef(contrast)) { + goog.vec.Mat4.multMat(colorMatrix, this.contrastMatrix_, colorMatrix); + } + if (goog.isDef(brightness)) { + goog.vec.Mat4.multMat(colorMatrix, this.brightnessMatrix_, colorMatrix); + } + if (goog.isDef(saturation)) { + goog.vec.Mat4.multMat(colorMatrix, this.saturationMatrix_, colorMatrix); + } + if (goog.isDef(hue)) { + goog.vec.Mat4.multMat(colorMatrix, this.hueMatrix_, colorMatrix); + } + } + return this.colorMatrix_; +}; diff --git a/float-no-zero/ol/ol/constraints.js b/float-no-zero/ol/ol/constraints.js new file mode 100644 index 0000000000..84fc289b6f --- /dev/null +++ b/float-no-zero/ol/ol/constraints.js @@ -0,0 +1,35 @@ +goog.provide('ol.Constraints'); + +goog.require('ol.CenterConstraintType'); +goog.require('ol.ResolutionConstraintType'); +goog.require('ol.RotationConstraintType'); + + + +/** + * @constructor + * @param {ol.CenterConstraintType} centerConstraint Center constraint. + * @param {ol.ResolutionConstraintType} resolutionConstraint + * Resolution constraint. + * @param {ol.RotationConstraintType} rotationConstraint + * Rotation constraint. + */ +ol.Constraints = + function(centerConstraint, resolutionConstraint, rotationConstraint) { + + /** + * @type {ol.CenterConstraintType} + */ + this.center = centerConstraint; + + /** + * @type {ol.ResolutionConstraintType} + */ + this.resolution = resolutionConstraint; + + /** + * @type {ol.RotationConstraintType} + */ + this.rotation = rotationConstraint; + +}; diff --git a/float-no-zero/ol/ol/control.jsdoc b/float-no-zero/ol/ol/control.jsdoc new file mode 100644 index 0000000000..bd09e4c9b2 --- /dev/null +++ b/float-no-zero/ol/ol/control.jsdoc @@ -0,0 +1,3 @@ +/** + * @namespace ol.control + */ diff --git a/float-no-zero/ol/ol/control/attributioncontrol.exports b/float-no-zero/ol/ol/control/attributioncontrol.exports new file mode 100644 index 0000000000..a9fa893101 --- /dev/null +++ b/float-no-zero/ol/ol/control/attributioncontrol.exports @@ -0,0 +1,2 @@ +@exportSymbol ol.control.Attribution +@exportProperty ol.control.Attribution.prototype.setMap diff --git a/float-no-zero/ol/ol/control/attributioncontrol.js b/float-no-zero/ol/ol/control/attributioncontrol.js new file mode 100644 index 0000000000..b8e6e63b58 --- /dev/null +++ b/float-no-zero/ol/ol/control/attributioncontrol.js @@ -0,0 +1,189 @@ +// FIXME handle date line wrap + +goog.provide('ol.control.Attribution'); + +goog.require('goog.array'); +goog.require('goog.dom'); +goog.require('goog.dom.TagName'); +goog.require('goog.object'); +goog.require('goog.style'); +goog.require('ol.Attribution'); +goog.require('ol.FrameState'); +goog.require('ol.control.Control'); +goog.require('ol.css'); + + + +/** + * Create a new attribution control to show all the attributions associated + * with the layer sources in the map. A default map has this control included. + * By default it will show in the bottom right portion of the map, but it can + * be changed by using a css selector for `.ol-attribution`. + * @constructor + * @extends {ol.control.Control} + * @param {olx.control.AttributionOptions=} opt_options Attribution options. + * @todo stability experimental + */ +ol.control.Attribution = function(opt_options) { + + var options = goog.isDef(opt_options) ? opt_options : {}; + + /** + * @private + * @type {Element} + */ + this.ulElement_ = goog.dom.createElement(goog.dom.TagName.UL); + + var className = goog.isDef(options.className) ? + options.className : 'ol-attribution'; + var element = goog.dom.createDom(goog.dom.TagName.DIV, { + 'class': className + ' ' + ol.css.CLASS_UNSELECTABLE + }, this.ulElement_); + + goog.base(this, { + element: element, + target: options.target + }); + + /** + * @private + * @type {boolean} + */ + this.renderedVisible_ = true; + + /** + * @private + * @type {Object.} + */ + this.attributionElements_ = {}; + + /** + * @private + * @type {Object.} + */ + this.attributionElementRenderedVisible_ = {}; + +}; +goog.inherits(ol.control.Attribution, ol.control.Control); + + +/** + * @param {?ol.FrameState} frameState Frame state. + * @return {Array.>} Attributions. + */ +ol.control.Attribution.prototype.getSourceAttributions = + function(frameState) { + var i, ii, j, jj, tileRanges, source, sourceAttribution, + sourceAttributionKey, sourceAttributions, sourceKey; + var layers = frameState.layersArray; + /** @type {Object.} */ + var attributions = goog.object.clone(frameState.attributions); + /** @type {Object.} */ + var hiddenAttributions = {}; + for (i = 0, ii = layers.length; i < ii; i++) { + source = layers[i].getSource(); + sourceKey = goog.getUid(source).toString(); + sourceAttributions = source.getAttributions(); + if (goog.isNull(sourceAttributions)) { + continue; + } + for (j = 0, jj = sourceAttributions.length; j < jj; j++) { + sourceAttribution = sourceAttributions[j]; + sourceAttributionKey = goog.getUid(sourceAttribution).toString(); + if (sourceAttributionKey in attributions) { + continue; + } + tileRanges = frameState.usedTiles[sourceKey]; + if (goog.isDef(tileRanges) && + sourceAttribution.intersectsAnyTileRange(tileRanges)) { + if (sourceAttributionKey in hiddenAttributions) { + delete hiddenAttributions[sourceAttributionKey]; + } + attributions[sourceAttributionKey] = sourceAttribution; + } + else { + hiddenAttributions[sourceAttributionKey] = sourceAttribution; + } + } + } + return [attributions, hiddenAttributions]; +}; + + +/** + * @inheritDoc + */ +ol.control.Attribution.prototype.handleMapPostrender = function(mapEvent) { + this.updateElement_(mapEvent.frameState); +}; + + +/** + * @private + * @param {?ol.FrameState} frameState Frame state. + */ +ol.control.Attribution.prototype.updateElement_ = function(frameState) { + + if (goog.isNull(frameState)) { + if (this.renderedVisible_) { + goog.style.setElementShown(this.element, false); + this.renderedVisible_ = false; + } + return; + } + + var attributions = this.getSourceAttributions(frameState); + /** @type {Object.} */ + var visibleAttributions = attributions[0]; + /** @type {Object.} */ + var hiddenAttributions = attributions[1]; + + var attributionElement, attributionKey; + for (attributionKey in this.attributionElements_) { + if (attributionKey in visibleAttributions) { + if (!this.attributionElementRenderedVisible_[attributionKey]) { + goog.style.setElementShown( + this.attributionElements_[attributionKey], true); + this.attributionElementRenderedVisible_[attributionKey] = true; + } + delete visibleAttributions[attributionKey]; + } + else if (attributionKey in hiddenAttributions) { + if (this.attributionElementRenderedVisible_[attributionKey]) { + goog.style.setElementShown( + this.attributionElements_[attributionKey], false); + delete this.attributionElementRenderedVisible_[attributionKey]; + } + delete hiddenAttributions[attributionKey]; + } + else { + goog.dom.removeNode(this.attributionElements_[attributionKey]); + delete this.attributionElements_[attributionKey]; + delete this.attributionElementRenderedVisible_[attributionKey]; + } + } + for (attributionKey in visibleAttributions) { + attributionElement = goog.dom.createElement(goog.dom.TagName.LI); + attributionElement.innerHTML = + visibleAttributions[attributionKey].getHTML(); + goog.dom.appendChild(this.ulElement_, attributionElement); + this.attributionElements_[attributionKey] = attributionElement; + this.attributionElementRenderedVisible_[attributionKey] = true; + } + for (attributionKey in hiddenAttributions) { + attributionElement = goog.dom.createElement(goog.dom.TagName.LI); + attributionElement.innerHTML = + hiddenAttributions[attributionKey].getHTML(); + goog.style.setElementShown(attributionElement, false); + goog.dom.appendChild(this.ulElement_, attributionElement); + this.attributionElements_[attributionKey] = attributionElement; + } + + var renderVisible = + !goog.object.isEmpty(this.attributionElementRenderedVisible_); + if (this.renderedVisible_ != renderVisible) { + goog.style.setElementShown(this.element, renderVisible); + this.renderedVisible_ = renderVisible; + } + +}; diff --git a/float-no-zero/ol/ol/control/control.exports b/float-no-zero/ol/ol/control/control.exports new file mode 100644 index 0000000000..1d184d239e --- /dev/null +++ b/float-no-zero/ol/ol/control/control.exports @@ -0,0 +1,3 @@ +@exportSymbol ol.control.Control +@exportProperty ol.control.Control.prototype.getMap +@exportProperty ol.control.Control.prototype.setMap diff --git a/float-no-zero/ol/ol/control/control.js b/float-no-zero/ol/ol/control/control.js new file mode 100644 index 0000000000..ab61fc8c0b --- /dev/null +++ b/float-no-zero/ol/ol/control/control.js @@ -0,0 +1,108 @@ +goog.provide('ol.control.Control'); + +goog.require('goog.array'); +goog.require('goog.dom'); +goog.require('goog.events'); +goog.require('ol.MapEventType'); +goog.require('ol.Object'); + + + +/** + * Something to be painted over the map to provide a means for interaction + * (buttons) or to show annotations (status bars). + * + * @constructor + * @extends {ol.Object} + * @implements {oli.control.Control} + * @param {olx.control.ControlOptions} options Control options. + * @todo stability experimental + */ +ol.control.Control = function(options) { + + goog.base(this); + + /** + * @protected + * @type {Element} + */ + this.element = goog.isDef(options.element) ? options.element : null; + + /** + * @private + * @type {Element} + */ + this.target_ = goog.isDef(options.target) ? + goog.dom.getElement(options.target) : null; + + /** + * @private + * @type {ol.Map} + */ + this.map_ = null; + + /** + * @protected + * @type {!Array.} + */ + this.listenerKeys = []; + +}; +goog.inherits(ol.control.Control, ol.Object); + + +/** + * @inheritDoc + */ +ol.control.Control.prototype.disposeInternal = function() { + goog.dom.removeNode(this.element); + goog.base(this, 'disposeInternal'); +}; + + +/** + * Get the map associated with this control. + * @return {ol.Map} Map. + * @todo stability experimental + */ +ol.control.Control.prototype.getMap = function() { + return this.map_; +}; + + +/** + * Function called on each map render. Executes in a requestAnimationFrame + * callback. Can be implemented in sub-classes to re-render the control's + * UI. + * @param {ol.MapEvent} mapEvent Map event. + */ +ol.control.Control.prototype.handleMapPostrender = goog.nullFunction; + + +/** + * Remove the control from its current map and attach it to the new map. + * Subclasses may set up event handlers to get notified about changes to + * the map here. + * @param {ol.Map} map Map. + * @todo stability experimental + */ +ol.control.Control.prototype.setMap = function(map) { + if (!goog.isNull(this.map_)) { + goog.dom.removeNode(this.element); + } + if (!goog.array.isEmpty(this.listenerKeys)) { + goog.array.forEach(this.listenerKeys, goog.events.unlistenByKey); + this.listenerKeys.length = 0; + } + this.map_ = map; + if (!goog.isNull(this.map_)) { + var target = !goog.isNull(this.target_) ? + this.target_ : map.getOverlayContainerStopEvent(); + goog.dom.appendChild(target, this.element); + if (this.handleMapPostrender !== goog.nullFunction) { + this.listenerKeys.push(goog.events.listen(map, + ol.MapEventType.POSTRENDER, this.handleMapPostrender, false, this)); + } + map.render(); + } +}; diff --git a/float-no-zero/ol/ol/control/controldefaults.exports b/float-no-zero/ol/ol/control/controldefaults.exports new file mode 100644 index 0000000000..a9c4315ac3 --- /dev/null +++ b/float-no-zero/ol/ol/control/controldefaults.exports @@ -0,0 +1 @@ +@exportSymbol ol.control.defaults diff --git a/float-no-zero/ol/ol/control/controldefaults.js b/float-no-zero/ol/ol/control/controldefaults.js new file mode 100644 index 0000000000..9a771c14ab --- /dev/null +++ b/float-no-zero/ol/ol/control/controldefaults.js @@ -0,0 +1,46 @@ +goog.provide('ol.control'); + +goog.require('ol.Collection'); +goog.require('ol.control.Attribution'); +goog.require('ol.control.Logo'); +goog.require('ol.control.Zoom'); + + +/** + * @param {olx.control.DefaultsOptions=} opt_options Defaults options. + * @return {ol.Collection} Controls. + * @todo stability experimental + */ +ol.control.defaults = function(opt_options) { + + var options = goog.isDef(opt_options) ? opt_options : {}; + + var controls = new ol.Collection(); + + var zoomControl = goog.isDef(options.zoom) ? + options.zoom : true; + if (zoomControl) { + var zoomControlOptions = goog.isDef(options.zoomOptions) ? + options.zoomOptions : undefined; + controls.push(new ol.control.Zoom(zoomControlOptions)); + } + + var attributionControl = goog.isDef(options.attribution) ? + options.attribution : true; + if (attributionControl) { + var attributionControlOptions = goog.isDef(options.attributionOptions) ? + options.attributionOptions : undefined; + controls.push(new ol.control.Attribution(attributionControlOptions)); + } + + var logoControl = goog.isDef(options.logo) ? + options.logo : true; + if (logoControl) { + var logoControlOptions = goog.isDef(options.logoOptions) ? + options.logoOptions : undefined; + controls.push(new ol.control.Logo(logoControlOptions)); + } + + return controls; + +}; diff --git a/float-no-zero/ol/ol/control/fullscreencontrol.exports b/float-no-zero/ol/ol/control/fullscreencontrol.exports new file mode 100644 index 0000000000..6b8c9b566c --- /dev/null +++ b/float-no-zero/ol/ol/control/fullscreencontrol.exports @@ -0,0 +1 @@ +@exportSymbol ol.control.FullScreen diff --git a/float-no-zero/ol/ol/control/fullscreencontrol.js b/float-no-zero/ol/ol/control/fullscreencontrol.js new file mode 100644 index 0000000000..ffc8a89ab8 --- /dev/null +++ b/float-no-zero/ol/ol/control/fullscreencontrol.js @@ -0,0 +1,131 @@ +goog.provide('ol.control.FullScreen'); + +goog.require('goog.asserts'); +goog.require('goog.dom'); +goog.require('goog.dom.TagName'); +goog.require('goog.dom.classes'); +goog.require('goog.events'); +goog.require('goog.events.EventType'); +goog.require('googx.dom.fullscreen'); +goog.require('googx.dom.fullscreen.EventType'); +goog.require('ol.control.Control'); +goog.require('ol.css'); + + + +/** + * Provides a button that when clicked fills up the full screen with the map. + * When in full screen mode, a close button is shown to exit full screen mode. + * The [Fullscreen API](http://www.w3.org/TR/fullscreen/) is used to + * toggle the map in full screen mode. + * + * + * @constructor + * @extends {ol.control.Control} + * @param {olx.control.FullScreenOptions=} opt_options Options. + * @todo stability experimental + */ +ol.control.FullScreen = function(opt_options) { + + var options = goog.isDef(opt_options) ? opt_options : {}; + + /** + * @private + * @type {string} + */ + this.cssClassName_ = goog.isDef(options.className) ? + options.className : 'ol-full-screen'; + + var tipLabel = goog.isDef(options.tipLabel) ? + options.tipLabel : 'Toggle full-screen'; + var tip = goog.dom.createDom(goog.dom.TagName.SPAN, { + 'role' : 'tooltip' + }, tipLabel); + + var button = goog.dom.createDom(goog.dom.TagName.BUTTON, { + 'class': this.cssClassName_ + '-' + googx.dom.fullscreen.isFullScreen() + + ' ol-has-tooltip' + }); + goog.dom.appendChild(button, tip); + goog.events.listen(button, [ + goog.events.EventType.CLICK, + goog.events.EventType.TOUCHEND + ], this.handleClick_, false, this); + + goog.events.listen(button, [ + goog.events.EventType.MOUSEOUT, + goog.events.EventType.FOCUSOUT + ], function() { + this.blur(); + }, false); + + goog.events.listen(goog.global.document, + googx.dom.fullscreen.EventType.CHANGE, + this.handleFullScreenChange_, false, this); + + var element = goog.dom.createDom(goog.dom.TagName.DIV, { + 'class': this.cssClassName_ + ' ' + ol.css.CLASS_UNSELECTABLE + ' ' + + (!googx.dom.fullscreen.isSupported() ? ol.css.CLASS_UNSUPPORTED : '') + }, button); + + goog.base(this, { + element: element, + target: options.target + }); + + /** + * @private + * @type {boolean} + */ + this.keys_ = goog.isDef(options.keys) ? options.keys : false; + +}; +goog.inherits(ol.control.FullScreen, ol.control.Control); + + +/** + * @param {goog.events.BrowserEvent} browserEvent Browser event. + * @private + */ +ol.control.FullScreen.prototype.handleClick_ = function(browserEvent) { + if (!googx.dom.fullscreen.isSupported()) { + return; + } + browserEvent.preventDefault(); + var map = this.getMap(); + if (goog.isNull(map)) { + return; + } + if (googx.dom.fullscreen.isFullScreen()) { + googx.dom.fullscreen.exitFullScreen(); + } else { + var target = map.getTarget(); + goog.asserts.assert(goog.isDefAndNotNull(target)); + var element = goog.dom.getElement(target); + goog.asserts.assert(goog.isDefAndNotNull(element)); + if (this.keys_) { + googx.dom.fullscreen.requestFullScreenWithKeys(element); + } else { + googx.dom.fullscreen.requestFullScreen(element); + } + } +}; + + +/** + * @private + */ +ol.control.FullScreen.prototype.handleFullScreenChange_ = function() { + var opened = this.cssClassName_ + '-true'; + var closed = this.cssClassName_ + '-false'; + var anchor = goog.dom.getFirstElementChild(this.element); + var map = this.getMap(); + if (googx.dom.fullscreen.isFullScreen()) { + goog.dom.classes.swap(anchor, closed, opened); + } else { + goog.dom.classes.swap(anchor, opened, closed); + } + if (!goog.isNull(map)) { + map.updateSize(); + } +}; diff --git a/float-no-zero/ol/ol/control/logocontrol.exports b/float-no-zero/ol/ol/control/logocontrol.exports new file mode 100644 index 0000000000..ccae41d4aa --- /dev/null +++ b/float-no-zero/ol/ol/control/logocontrol.exports @@ -0,0 +1,2 @@ +@exportSymbol ol.control.Logo +@exportProperty ol.control.Logo.prototype.setMap diff --git a/float-no-zero/ol/ol/control/logocontrol.js b/float-no-zero/ol/ol/control/logocontrol.js new file mode 100644 index 0000000000..a25d09ced9 --- /dev/null +++ b/float-no-zero/ol/ol/control/logocontrol.js @@ -0,0 +1,121 @@ +goog.provide('ol.control.Logo'); + +goog.require('goog.dom'); +goog.require('goog.dom.TagName'); +goog.require('goog.object'); +goog.require('goog.style'); +goog.require('ol.FrameState'); +goog.require('ol.control.Control'); +goog.require('ol.css'); + + + +/** + * Shows a logo for all the layer sources in the map that have a logo + * associated with them, such as Bing. This control is part of a default map. + * By default it will show in the bottom-left portion of the map, but it can + * be styled by using a css selector for `.ol-logo`. + * @constructor + * @extends {ol.control.Control} + * @param {olx.control.LogoOptions=} opt_options Logo options. + * @todo stability experimental + */ +ol.control.Logo = function(opt_options) { + + var options = goog.isDef(opt_options) ? opt_options : {}; + + /** + * @private + * @type {Element} + */ + this.ulElement_ = goog.dom.createElement(goog.dom.TagName.UL); + + var className = goog.isDef(options.className) ? options.className : 'ol-logo'; + + var element = goog.dom.createDom(goog.dom.TagName.DIV, { + 'class': className + ' ' + ol.css.CLASS_UNSELECTABLE + }, this.ulElement_); + + goog.base(this, { + element: element, + target: options.target + }); + + /** + * @private + * @type {boolean} + */ + this.renderedVisible_ = true; + + /** + * @private + * @type {Object.} + */ + this.logoElements_ = {}; + +}; +goog.inherits(ol.control.Logo, ol.control.Control); + + +/** + * @param {ol.MapEvent} mapEvent Map event. + */ +ol.control.Logo.prototype.handleMapPostrender = function(mapEvent) { + this.updateElement_(mapEvent.frameState); +}; + + +/** + * @param {?ol.FrameState} frameState Frame state. + * @private + */ +ol.control.Logo.prototype.updateElement_ = function(frameState) { + + if (goog.isNull(frameState)) { + if (this.renderedVisible_) { + goog.style.setElementShown(this.element, false); + this.renderedVisible_ = false; + } + return; + } + + var logo; + var logos = frameState.logos; + var logoElements = this.logoElements_; + + for (logo in logoElements) { + if (!(logo in logos)) { + goog.dom.removeNode(logoElements[logo]); + delete logoElements[logo]; + } + } + + var image, logoElement, logoKey; + for (logoKey in logos) { + if (!(logoKey in logoElements)) { + image = new Image(); + image.src = logoKey; + var logoValue = logos[logoKey]; + var child; + if (logoValue === '') { + child = image; + } else { + child = goog.dom.createDom(goog.dom.TagName.A, { + 'href': logoValue, + 'target': '_blank' + }); + child.appendChild(image); + } + logoElement = goog.dom.createDom(goog.dom.TagName.LI, undefined, child); + goog.dom.appendChild(this.ulElement_, logoElement); + logoElements[logoKey] = logoElement; + } + } + + var renderVisible = !goog.object.isEmpty(logos); + if (this.renderedVisible_ != renderVisible) { + goog.style.setElementShown(this.element, renderVisible); + this.renderedVisible_ = renderVisible; + } + +}; diff --git a/float-no-zero/ol/ol/control/mousepositioncontrol.exports b/float-no-zero/ol/ol/control/mousepositioncontrol.exports new file mode 100644 index 0000000000..73f28771eb --- /dev/null +++ b/float-no-zero/ol/ol/control/mousepositioncontrol.exports @@ -0,0 +1,2 @@ +@exportSymbol ol.control.MousePosition +@exportProperty ol.control.MousePosition.prototype.setMap diff --git a/float-no-zero/ol/ol/control/mousepositioncontrol.js b/float-no-zero/ol/ol/control/mousepositioncontrol.js new file mode 100644 index 0000000000..c103e9ad84 --- /dev/null +++ b/float-no-zero/ol/ol/control/mousepositioncontrol.js @@ -0,0 +1,260 @@ +// FIXME should listen on appropriate pane, once it is defined +// FIXME works for View2D only + +goog.provide('ol.control.MousePosition'); + +goog.require('goog.array'); +goog.require('goog.dom'); +goog.require('goog.dom.TagName'); +goog.require('goog.events'); +goog.require('goog.events.EventType'); +goog.require('goog.style'); +goog.require('ol.CoordinateFormatType'); +goog.require('ol.Object'); +goog.require('ol.Pixel'); +goog.require('ol.TransformFunction'); +goog.require('ol.control.Control'); +goog.require('ol.proj'); +goog.require('ol.proj.Projection'); + + +/** + * @enum {string} + */ +ol.control.MousePositionProperty = { + PROJECTION: 'projection', + COORDINATE_FORMAT: 'coordinateFormat' +}; + + + +/** + * Create a new control to show the position of the mouse in the map's + * projection (or any other supplied projection). By default the control is + * shown in the top right corner of the map but this can be changed by using + * a css selector `.ol-mouse-position`. + * + * @constructor + * @extends {ol.control.Control} + * @param {olx.control.MousePositionOptions=} opt_options Mouse position + * options. + * @todo stability experimental + * @todo observable projection {ol.proj.Projection} the projection to report + * mouse position in + * @todo observable coordinateFormat {ol.CoordinateFormatType} the format to + * render the current position in + */ +ol.control.MousePosition = function(opt_options) { + + var options = goog.isDef(opt_options) ? opt_options : {}; + + var className = goog.isDef(options.className) ? + options.className : 'ol-mouse-position'; + + var element = goog.dom.createDom(goog.dom.TagName.DIV, { + 'class': className + }); + + goog.base(this, { + element: element, + target: options.target + }); + + goog.events.listen(this, + ol.Object.getChangeEventType(ol.control.MousePositionProperty.PROJECTION), + this.handleProjectionChanged_, false, this); + + if (goog.isDef(options.coordinateFormat)) { + this.setCoordinateFormat(options.coordinateFormat); + } + if (goog.isDef(options.projection)) { + this.setProjection(ol.proj.get(options.projection)); + } + + /** + * @private + * @type {string} + */ + this.undefinedHTML_ = goog.isDef(options.undefinedHTML) ? + options.undefinedHTML : ''; + + /** + * @private + * @type {string} + */ + this.renderedHTML_ = element.innerHTML; + + /** + * @private + * @type {ol.proj.Projection} + */ + this.mapProjection_ = null; + + /** + * @private + * @type {?ol.TransformFunction} + */ + this.transform_ = null; + + /** + * @private + * @type {ol.Pixel} + */ + this.lastMouseMovePixel_ = null; + +}; +goog.inherits(ol.control.MousePosition, ol.control.Control); + + +/** + * @inheritDoc + */ +ol.control.MousePosition.prototype.handleMapPostrender = function(mapEvent) { + var frameState = mapEvent.frameState; + if (goog.isNull(frameState)) { + this.mapProjection_ = null; + } else { + if (this.mapProjection_ != frameState.view2DState.projection) { + this.mapProjection_ = frameState.view2DState.projection; + this.transform_ = null; + } + } + this.updateHTML_(this.lastMouseMovePixel_); +}; + + +/** + * @private + */ +ol.control.MousePosition.prototype.handleProjectionChanged_ = function() { + this.transform_ = null; +}; + + +/** + * @return {ol.CoordinateFormatType|undefined} projection. + * @todo stability experimental + */ +ol.control.MousePosition.prototype.getCoordinateFormat = function() { + return /** @type {ol.CoordinateFormatType|undefined} */ ( + this.get(ol.control.MousePositionProperty.COORDINATE_FORMAT)); +}; +goog.exportProperty( + ol.control.MousePosition.prototype, + 'getCoordinateFormat', + ol.control.MousePosition.prototype.getCoordinateFormat); + + +/** + * @return {ol.proj.Projection|undefined} projection. + * @todo stability experimental + */ +ol.control.MousePosition.prototype.getProjection = function() { + return /** @type {ol.proj.Projection|undefined} */ ( + this.get(ol.control.MousePositionProperty.PROJECTION)); +}; +goog.exportProperty( + ol.control.MousePosition.prototype, + 'getProjection', + ol.control.MousePosition.prototype.getProjection); + + +/** + * @param {goog.events.BrowserEvent} browserEvent Browser event. + * @protected + */ +ol.control.MousePosition.prototype.handleMouseMove = function(browserEvent) { + var map = this.getMap(); + var eventPosition = goog.style.getRelativePosition( + browserEvent, map.getViewport()); + this.lastMouseMovePixel_ = [eventPosition.x, eventPosition.y]; + this.updateHTML_(this.lastMouseMovePixel_); +}; + + +/** + * @param {goog.events.BrowserEvent} browserEvent Browser event. + * @protected + */ +ol.control.MousePosition.prototype.handleMouseOut = function(browserEvent) { + this.updateHTML_(null); + this.lastMouseMovePixel_ = null; +}; + + +/** + * @inheritDoc + */ +ol.control.MousePosition.prototype.setMap = function(map) { + goog.base(this, 'setMap', map); + if (!goog.isNull(map)) { + var viewport = map.getViewport(); + this.listenerKeys.push( + goog.events.listen(viewport, goog.events.EventType.MOUSEMOVE, + this.handleMouseMove, false, this), + goog.events.listen(viewport, goog.events.EventType.MOUSEOUT, + this.handleMouseOut, false, this) + ); + } +}; + + +/** + * @param {ol.CoordinateFormatType} format Coordinate format. + * @todo stability experimental + */ +ol.control.MousePosition.prototype.setCoordinateFormat = function(format) { + this.set(ol.control.MousePositionProperty.COORDINATE_FORMAT, format); +}; +goog.exportProperty( + ol.control.MousePosition.prototype, + 'setCoordinateFormat', + ol.control.MousePosition.prototype.setCoordinateFormat); + + +/** + * @param {ol.proj.Projection} projection Projection. + * @todo stability experimental + */ +ol.control.MousePosition.prototype.setProjection = function(projection) { + this.set(ol.control.MousePositionProperty.PROJECTION, projection); +}; +goog.exportProperty( + ol.control.MousePosition.prototype, + 'setProjection', + ol.control.MousePosition.prototype.setProjection); + + +/** + * @param {?ol.Pixel} pixel Pixel. + * @private + */ +ol.control.MousePosition.prototype.updateHTML_ = function(pixel) { + var html = this.undefinedHTML_; + if (!goog.isNull(pixel) && !goog.isNull(this.mapProjection_)) { + if (goog.isNull(this.transform_)) { + var projection = this.getProjection(); + if (goog.isDef(projection)) { + this.transform_ = ol.proj.getTransformFromProjections( + this.mapProjection_, projection); + } else { + this.transform_ = ol.proj.identityTransform; + } + } + var map = this.getMap(); + var coordinate = map.getCoordinateFromPixel(pixel); + if (!goog.isNull(coordinate)) { + this.transform_(coordinate, coordinate); + var coordinateFormat = this.getCoordinateFormat(); + if (goog.isDef(coordinateFormat)) { + html = coordinateFormat(coordinate); + } else { + html = coordinate.toString(); + } + } + } + if (!goog.isDef(this.renderedHTML_) || html != this.renderedHTML_) { + this.element.innerHTML = html; + this.renderedHTML_ = html; + } +}; diff --git a/float-no-zero/ol/ol/control/scalelinecontrol.exports b/float-no-zero/ol/ol/control/scalelinecontrol.exports new file mode 100644 index 0000000000..4493ffde49 --- /dev/null +++ b/float-no-zero/ol/ol/control/scalelinecontrol.exports @@ -0,0 +1,2 @@ +@exportSymbol ol.control.ScaleLine +@exportProperty ol.control.ScaleLine.prototype.setMap diff --git a/float-no-zero/ol/ol/control/scalelinecontrol.js b/float-no-zero/ol/ol/control/scalelinecontrol.js new file mode 100644 index 0000000000..2aafe41044 --- /dev/null +++ b/float-no-zero/ol/ol/control/scalelinecontrol.js @@ -0,0 +1,329 @@ +goog.provide('ol.control.ScaleLine'); +goog.provide('ol.control.ScaleLineProperty'); +goog.provide('ol.control.ScaleLineUnits'); + +goog.require('goog.array'); +goog.require('goog.asserts'); +goog.require('goog.dom'); +goog.require('goog.dom.TagName'); +goog.require('goog.events'); +goog.require('goog.math'); +goog.require('goog.style'); +goog.require('ol.Object'); +goog.require('ol.TransformFunction'); +goog.require('ol.View2DState'); +goog.require('ol.control.Control'); +goog.require('ol.css'); +goog.require('ol.proj'); +goog.require('ol.proj.Units'); +goog.require('ol.sphere.NORMAL'); + + +/** + * @enum {string} + * @todo stability experimental + */ +ol.control.ScaleLineProperty = { + UNITS: 'units' +}; + + +/** + * @enum {string} + * @todo stability experimental + */ +ol.control.ScaleLineUnits = { + DEGREES: 'degrees', + IMPERIAL: 'imperial', + NAUTICAL: 'nautical', + METRIC: 'metric', + US: 'us' +}; + + + +/** + * Create a control to help users estimate distances on a map. + * By default it will show in the bottom left portion of the map, but it can + * be changed by using a css selector for `.ol-scale-line`. + * + * @constructor + * @extends {ol.control.Control} + * @param {olx.control.ScaleLineOptions=} opt_options Scale line options. + * @todo stability experimental + * @todo observable units {ol.control.ScaleLineUnits} the units to use in the + * scale line + */ +ol.control.ScaleLine = function(opt_options) { + + var options = opt_options || {}; + + var className = goog.isDef(options.className) ? + options.className : 'ol-scale-line'; + + /** + * @private + * @type {Element} + */ + this.innerElement_ = goog.dom.createDom(goog.dom.TagName.DIV, { + 'class': className + '-inner' + }); + + /** + * @private + * @type {Element} + */ + this.element_ = goog.dom.createDom(goog.dom.TagName.DIV, { + 'class': className + ' ' + ol.css.CLASS_UNSELECTABLE + }, this.innerElement_); + + /** + * @private + * @type {?ol.View2DState} + */ + this.view2DState_ = null; + + /** + * @private + * @type {number} + */ + this.minWidth_ = goog.isDef(options.minWidth) ? options.minWidth : 64; + + /** + * @private + * @type {boolean} + */ + this.renderedVisible_ = false; + + /** + * @private + * @type {number|undefined} + */ + this.renderedWidth_ = undefined; + + /** + * @private + * @type {string} + */ + this.renderedHTML_ = ''; + + /** + * @private + * @type {?ol.TransformFunction} + */ + this.toEPSG4326_ = null; + + goog.base(this, { + element: this.element_, + target: options.target + }); + + goog.events.listen( + this, ol.Object.getChangeEventType(ol.control.ScaleLineProperty.UNITS), + this.handleUnitsChanged_, false, this); + + this.setUnits(/** @type {ol.control.ScaleLineUnits} */ (options.units) || + ol.control.ScaleLineUnits.METRIC); + +}; +goog.inherits(ol.control.ScaleLine, ol.control.Control); + + +/** + * @const + * @type {Array.} + * @todo stability experimental + */ +ol.control.ScaleLine.LEADING_DIGITS = [1, 2, 5]; + + +/** + * @return {ol.control.ScaleLineUnits|undefined} units. + * @todo stability experimental + */ +ol.control.ScaleLine.prototype.getUnits = function() { + return /** @type {ol.control.ScaleLineUnits|undefined} */ ( + this.get(ol.control.ScaleLineProperty.UNITS)); +}; +goog.exportProperty( + ol.control.ScaleLine.prototype, + 'getUnits', + ol.control.ScaleLine.prototype.getUnits); + + +/** + * @inheritDoc + */ +ol.control.ScaleLine.prototype.handleMapPostrender = function(mapEvent) { + var frameState = mapEvent.frameState; + if (goog.isNull(frameState)) { + this.view2DState_ = null; + } else { + this.view2DState_ = frameState.view2DState; + } + this.updateElement_(); +}; + + +/** + * @private + */ +ol.control.ScaleLine.prototype.handleUnitsChanged_ = function() { + this.updateElement_(); +}; + + +/** + * @param {ol.control.ScaleLineUnits} units Units. + * @todo stability experimental + */ +ol.control.ScaleLine.prototype.setUnits = function(units) { + this.set(ol.control.ScaleLineProperty.UNITS, units); +}; +goog.exportProperty( + ol.control.ScaleLine.prototype, + 'setUnits', + ol.control.ScaleLine.prototype.setUnits); + + +/** + * @private + */ +ol.control.ScaleLine.prototype.updateElement_ = function() { + var view2DState = this.view2DState_; + + if (goog.isNull(view2DState)) { + if (this.renderedVisible_) { + goog.style.setElementShown(this.element_, false); + this.renderedVisible_ = false; + } + return; + } + + var center = view2DState.center; + var projection = view2DState.projection; + var pointResolution = + projection.getPointResolution(view2DState.resolution, center); + var projectionUnits = projection.getUnits(); + + var cosLatitude; + var units = this.getUnits(); + if (projectionUnits == ol.proj.Units.DEGREES && + (units == ol.control.ScaleLineUnits.METRIC || + units == ol.control.ScaleLineUnits.IMPERIAL)) { + + // Convert pointResolution from degrees to meters + this.toEPSG4326_ = null; + cosLatitude = Math.cos(goog.math.toRadians(center[1])); + pointResolution *= Math.PI * cosLatitude * ol.sphere.NORMAL.radius / 180; + projectionUnits = ol.proj.Units.METERS; + + } else if ((projectionUnits == ol.proj.Units.FEET || + projectionUnits == ol.proj.Units.METERS) && + units == ol.control.ScaleLineUnits.DEGREES) { + + // Convert pointResolution from meters or feet to degrees + if (goog.isNull(this.toEPSG4326_)) { + this.toEPSG4326_ = ol.proj.getTransformFromProjections( + projection, ol.proj.get('EPSG:4326')); + } + cosLatitude = Math.cos(goog.math.toRadians(this.toEPSG4326_(center)[1])); + var radius = ol.sphere.NORMAL.radius; + if (projectionUnits == ol.proj.Units.FEET) { + radius /= 0.3048; + } + pointResolution *= 180 / (Math.PI * cosLatitude * radius); + projectionUnits = ol.proj.Units.DEGREES; + + } else { + this.toEPSG4326_ = null; + } + + goog.asserts.assert( + ((units == ol.control.ScaleLineUnits.METRIC || + units == ol.control.ScaleLineUnits.IMPERIAL) && + projectionUnits == ol.proj.Units.METERS) || + (units == ol.control.ScaleLineUnits.DEGREES && + projectionUnits == ol.proj.Units.DEGREES)); + + var nominalCount = this.minWidth_ * pointResolution; + var suffix = ''; + if (units == ol.control.ScaleLineUnits.DEGREES) { + if (nominalCount < 1 / 60) { + suffix = '\u2033'; // seconds + pointResolution *= 3600; + } else if (nominalCount < 1) { + suffix = '\u2032'; // minutes + pointResolution *= 60; + } else { + suffix = '\u00b0'; // degrees + } + } else if (units == ol.control.ScaleLineUnits.IMPERIAL) { + if (nominalCount < 0.9144) { + suffix = 'in'; + pointResolution /= 0.0254; + } else if (nominalCount < 1609.344) { + suffix = 'ft'; + pointResolution /= 0.3048; + } else { + suffix = 'mi'; + pointResolution /= 1609.344; + } + } else if (units == ol.control.ScaleLineUnits.NAUTICAL) { + pointResolution /= 1852; + suffix = 'nm'; + } else if (units == ol.control.ScaleLineUnits.METRIC) { + if (nominalCount < 1) { + suffix = 'mm'; + pointResolution *= 1000; + } else if (nominalCount < 1000) { + suffix = 'm'; + } else { + suffix = 'km'; + pointResolution /= 1000; + } + } else if (units == ol.control.ScaleLineUnits.US) { + if (nominalCount < 0.9144) { + suffix = 'in'; + pointResolution *= 39.37; + } else if (nominalCount < 1609.344) { + suffix = 'ft'; + pointResolution /= 0.30480061; + } else { + suffix = 'mi'; + pointResolution /= 1609.3472; + } + } else { + goog.asserts.fail(); + } + + var i = 3 * Math.floor( + Math.log(this.minWidth_ * pointResolution) / Math.log(10)); + var count, width; + while (true) { + count = ol.control.ScaleLine.LEADING_DIGITS[i % 3] * + Math.pow(10, Math.floor(i / 3)); + width = Math.round(count / pointResolution); + if (width >= this.minWidth_) { + break; + } + ++i; + } + + var html = count + suffix; + if (this.renderedHTML_ != html) { + this.innerElement_.innerHTML = html; + this.renderedHTML_ = html; + } + + if (this.renderedWidth_ != width) { + this.innerElement_.style.width = width + 'px'; + this.renderedWidth_ = width; + } + + if (!this.renderedVisible_) { + goog.style.setElementShown(this.element_, true); + this.renderedVisible_ = true; + } + +}; diff --git a/float-no-zero/ol/ol/control/zoomcontrol.exports b/float-no-zero/ol/ol/control/zoomcontrol.exports new file mode 100644 index 0000000000..8d8123f761 --- /dev/null +++ b/float-no-zero/ol/ol/control/zoomcontrol.exports @@ -0,0 +1,2 @@ +@exportSymbol ol.control.Zoom +@exportProperty ol.control.Zoom.prototype.setMap diff --git a/float-no-zero/ol/ol/control/zoomcontrol.js b/float-no-zero/ol/ol/control/zoomcontrol.js new file mode 100644 index 0000000000..c5eb49ad42 --- /dev/null +++ b/float-no-zero/ol/ol/control/zoomcontrol.js @@ -0,0 +1,131 @@ +// FIXME works for View2D only + +goog.provide('ol.control.Zoom'); + +goog.require('goog.asserts'); +goog.require('goog.dom'); +goog.require('goog.dom.TagName'); +goog.require('goog.events'); +goog.require('goog.events.EventType'); +goog.require('ol.View2D'); +goog.require('ol.animation'); +goog.require('ol.control.Control'); +goog.require('ol.css'); +goog.require('ol.easing'); + + + +/** + * Create a new control with 2 buttons, one for zoom in and one for zoom out. + * This control is part of the default controls of a map. To style this control + * use css selectors `.ol-zoom-in` and `.ol-zoom-out`. + * @constructor + * @extends {ol.control.Control} + * @param {olx.control.ZoomOptions=} opt_options Zoom options. + * @todo stability experimental + */ +ol.control.Zoom = function(opt_options) { + + var options = goog.isDef(opt_options) ? opt_options : {}; + + var className = goog.isDef(options.className) ? options.className : 'ol-zoom'; + + var delta = goog.isDef(options.delta) ? options.delta : 1; + + var zoomInLabel = goog.isDef(options.zoomInLabel) ? + options.zoomInLabel : '+'; + var zoomOutLabel = goog.isDef(options.zoomOutLabel) ? + options.zoomOutLabel : '\u2212'; + + var zoomInTipLabel = goog.isDef(options.zoomInTipLabel) ? + options.zoomInTipLabel : 'Zoom in'; + var zoomOutTipLabel = goog.isDef(options.zoomOutTipLabel) ? + options.zoomOutTipLabel : 'Zoom out'; + + var tTipZoomIn = goog.dom.createDom(goog.dom.TagName.SPAN, { + 'role' : 'tooltip' + }, zoomInTipLabel); + var inElement = goog.dom.createDom(goog.dom.TagName.BUTTON, { + 'class': className + '-in ol-has-tooltip', + 'name' : 'ZoomIn', + 'type' : 'button' + }, tTipZoomIn, zoomInLabel); + + goog.events.listen(inElement, [ + goog.events.EventType.TOUCHEND, + goog.events.EventType.CLICK + ], goog.partial(ol.control.Zoom.prototype.zoomByDelta_, delta), false, this); + + goog.events.listen(inElement, [ + goog.events.EventType.MOUSEOUT, + goog.events.EventType.FOCUSOUT + ], function() { + this.blur(); + }, false); + + var tTipsZoomOut = goog.dom.createDom(goog.dom.TagName.SPAN, { + 'role' : 'tooltip', + 'type' : 'button' + }, zoomOutTipLabel); + var outElement = goog.dom.createDom(goog.dom.TagName.BUTTON, { + 'class': className + '-out ol-has-tooltip', + 'name' : 'ZoomOut' + }, tTipsZoomOut, zoomOutLabel); + goog.events.listen(outElement, [ + goog.events.EventType.TOUCHEND, + goog.events.EventType.CLICK + ], goog.partial(ol.control.Zoom.prototype.zoomByDelta_, -delta), false, this); + + goog.events.listen(outElement, [ + goog.events.EventType.MOUSEOUT, + goog.events.EventType.FOCUSOUT + ], function() { + this.blur(); + }, false); + + var cssClasses = className + ' ' + ol.css.CLASS_UNSELECTABLE; + var element = goog.dom.createDom(goog.dom.TagName.DIV, cssClasses, inElement, + outElement); + + goog.base(this, { + element: element, + target: options.target + }); + + /** + * @type {number} + * @private + */ + this.duration_ = goog.isDef(options.duration) ? options.duration : 250; + +}; +goog.inherits(ol.control.Zoom, ol.control.Control); + + +/** + * @param {number} delta Zoom delta. + * @param {goog.events.BrowserEvent} browserEvent The browser event to handle. + * @private + */ +ol.control.Zoom.prototype.zoomByDelta_ = function(delta, browserEvent) { + browserEvent.preventDefault(); + // prevent the anchor from getting appended to the url + var map = this.getMap(); + // FIXME works for View2D only + var view = map.getView(); + goog.asserts.assert(goog.isDef(view)); + var view2D = view.getView2D(); + goog.asserts.assertInstanceof(view2D, ol.View2D); + var currentResolution = view2D.getResolution(); + if (goog.isDef(currentResolution)) { + if (this.duration_ > 0) { + map.beforeRender(ol.animation.zoom({ + resolution: currentResolution, + duration: this.duration_, + easing: ol.easing.easeOut + })); + } + var newResolution = view2D.constrainResolution(currentResolution, delta); + view2D.setResolution(newResolution); + } +}; diff --git a/float-no-zero/ol/ol/control/zoomslidercontrol.exports b/float-no-zero/ol/ol/control/zoomslidercontrol.exports new file mode 100644 index 0000000000..3be7924ba6 --- /dev/null +++ b/float-no-zero/ol/ol/control/zoomslidercontrol.exports @@ -0,0 +1 @@ +@exportSymbol ol.control.ZoomSlider diff --git a/float-no-zero/ol/ol/control/zoomslidercontrol.js b/float-no-zero/ol/ol/control/zoomslidercontrol.js new file mode 100644 index 0000000000..c2cf84481e --- /dev/null +++ b/float-no-zero/ol/ol/control/zoomslidercontrol.js @@ -0,0 +1,304 @@ +// FIXME works for View2D only +// FIXME should possibly show tooltip when dragging? + +goog.provide('ol.control.ZoomSlider'); + +goog.require('goog.array'); +goog.require('goog.asserts'); +goog.require('goog.dom'); +goog.require('goog.dom.TagName'); +goog.require('goog.events'); +goog.require('goog.events.Event'); +goog.require('goog.events.EventType'); +goog.require('goog.fx.Dragger'); +goog.require('goog.fx.Dragger.EventType'); +goog.require('goog.math'); +goog.require('goog.math.Rect'); +goog.require('goog.style'); +goog.require('ol.animation'); +goog.require('ol.control.Control'); +goog.require('ol.css'); +goog.require('ol.easing'); + + +/** + * @define {number} Animation duration. + */ +ol.control.ZOOMSLIDER_ANIMATION_DURATION = 200; + + + +/** + * A slider type of control for zooming. + * + * Example: + * + * map.addControl(new ol.control.ZoomSlider()); + * + * @constructor + * @extends {ol.control.Control} + * @param {olx.control.ZoomSliderOptions=} opt_options Zoom slider options. + * @todo stability experimental + */ +ol.control.ZoomSlider = function(opt_options) { + + var options = goog.isDef(opt_options) ? opt_options : {}; + + /** + * Will hold the current resolution of the view. + * + * @type {number|undefined} + * @private + */ + this.currentResolution_ = undefined; + + /** + * The direction of the slider. Will be determined from actual display of the + * container and defaults to ol.control.ZoomSlider.direction.VERTICAL. + * + * @type {ol.control.ZoomSlider.direction} + * @private + */ + this.direction_ = ol.control.ZoomSlider.direction.VERTICAL; + + /** + * Whether the slider is initialized. + * @type {boolean} + * @private + */ + this.sliderInitialized_ = false; + + var className = goog.isDef(options.className) ? + options.className : 'ol-zoomslider'; + var thumbElement = goog.dom.createDom(goog.dom.TagName.DIV, + [className + '-thumb', ol.css.CLASS_UNSELECTABLE]); + var sliderElement = goog.dom.createDom(goog.dom.TagName.DIV, + [className, ol.css.CLASS_UNSELECTABLE], thumbElement); + + /** + * @type {goog.fx.Dragger} + * @private + */ + this.dragger_ = new goog.fx.Dragger(thumbElement); + this.registerDisposable(this.dragger_); + + goog.events.listen(this.dragger_, [ + goog.fx.Dragger.EventType.DRAG, + goog.fx.Dragger.EventType.END + ], this.handleSliderChange_, undefined, this); + + goog.events.listen(sliderElement, goog.events.EventType.CLICK, + this.handleContainerClick_, false, this); + goog.events.listen(thumbElement, goog.events.EventType.CLICK, + goog.events.Event.stopPropagation); + + goog.base(this, { + element: sliderElement + }); +}; +goog.inherits(ol.control.ZoomSlider, ol.control.Control); + + +/** + * The enum for available directions. + * + * @enum {number} + */ +ol.control.ZoomSlider.direction = { + VERTICAL: 0, + HORIZONTAL: 1 +}; + + +/** + * @inheritDoc + */ +ol.control.ZoomSlider.prototype.setMap = function(map) { + goog.base(this, 'setMap', map); + if (!goog.isNull(map)) { + map.render(); + } +}; + + +/** + * Initializes the slider element. This will determine and set this controls + * direction_ and also constrain the dragging of the thumb to always be within + * the bounds of the container. + * + * @private + */ +ol.control.ZoomSlider.prototype.initSlider_ = function() { + var container = this.element, + thumb = goog.dom.getFirstElementChild(container), + elemSize = goog.style.getContentBoxSize(container), + thumbBounds = goog.style.getBounds(thumb), + thumbMargins = goog.style.getMarginBox(thumb), + thumbBorderBox = goog.style.getBorderBox(thumb), + w = elemSize.width - + thumbMargins.left - thumbMargins.right - + thumbBorderBox.left - thumbBorderBox.right - + thumbBounds.width, + h = elemSize.height - + thumbMargins.top - thumbMargins.bottom - + thumbBorderBox.top - thumbBorderBox.bottom - + thumbBounds.height, + limits; + if (elemSize.width > elemSize.height) { + this.direction_ = ol.control.ZoomSlider.direction.HORIZONTAL; + limits = new goog.math.Rect(0, 0, w, 0); + } else { + this.direction_ = ol.control.ZoomSlider.direction.VERTICAL; + limits = new goog.math.Rect(0, 0, 0, h); + } + this.dragger_.setLimits(limits); + this.sliderInitialized_ = true; +}; + + +/** + * @inheritDoc + */ +ol.control.ZoomSlider.prototype.handleMapPostrender = function(mapEvent) { + if (goog.isNull(mapEvent.frameState)) { + return; + } + goog.asserts.assert( + goog.isDefAndNotNull(mapEvent.frameState.view2DState)); + if (!this.sliderInitialized_) { + this.initSlider_(); + } + var res = mapEvent.frameState.view2DState.resolution; + if (res !== this.currentResolution_) { + this.currentResolution_ = res; + this.positionThumbForResolution_(res); + } +}; + + +/** + * @param {goog.events.BrowserEvent} browserEvent The browser event to handle. + * @private + */ +ol.control.ZoomSlider.prototype.handleContainerClick_ = function(browserEvent) { + var map = this.getMap(); + var view = map.getView().getView2D(); + var resolution; + var amountDragged = this.amountDragged_(browserEvent.offsetX, + browserEvent.offsetY); + resolution = this.resolutionForAmount_(amountDragged); + goog.asserts.assert(goog.isDef(resolution)); + map.beforeRender(ol.animation.zoom({ + resolution: resolution, + duration: ol.control.ZOOMSLIDER_ANIMATION_DURATION, + easing: ol.easing.easeOut + })); + resolution = view.constrainResolution(resolution); + view.setResolution(resolution); +}; + + +/** + * Positions the thumb inside its container according to the given resolution. + * + * @param {number} res The res. + * @private + */ +ol.control.ZoomSlider.prototype.positionThumbForResolution_ = function(res) { + var amount = this.amountForResolution_(res), + dragger = this.dragger_, + thumb = goog.dom.getFirstElementChild(this.element); + + if (this.direction_ == ol.control.ZoomSlider.direction.HORIZONTAL) { + var left = dragger.limits.left + dragger.limits.width * amount; + goog.style.setPosition(thumb, left); + } else { + var top = dragger.limits.top + dragger.limits.height * amount; + goog.style.setPosition(thumb, dragger.limits.left, top); + } +}; + + +/** + * Calculates the amount the thumb has been dragged to allow for calculation + * of the corresponding resolution. + * + * @param {number} x Pixel position relative to the left of the slider. + * @param {number} y Pixel position relative to the top of the slider. + * @return {number} The amount the thumb has been dragged. + * @private + */ +ol.control.ZoomSlider.prototype.amountDragged_ = function(x, y) { + var draggerLimits = this.dragger_.limits, + amount = 0; + if (this.direction_ === ol.control.ZoomSlider.direction.HORIZONTAL) { + amount = (x - draggerLimits.left) / draggerLimits.width; + } else { + amount = (y - draggerLimits.top) / draggerLimits.height; + } + return amount; +}; + + +/** + * Calculates the corresponding resolution of the thumb by the amount it has + * been dragged from its minimum. + * + * @param {number} amount The amount the thumb has been dragged. + * @return {number} The corresponding resolution. + * @private + */ +ol.control.ZoomSlider.prototype.resolutionForAmount_ = function(amount) { + // FIXME do we really need this affine transform? + amount = (goog.math.clamp(amount, 0, 1) - 1) * -1; + var fn = this.getMap().getView().getView2D().getResolutionForValueFunction(); + return fn(amount); +}; + + +/** + * Determines an amount of dragging relative to this minimum position by the + * given resolution. + * + * @param {number} res The resolution to get the amount for. + * @return {number} The corresponding value (between 0 and 1). + * @private + */ +ol.control.ZoomSlider.prototype.amountForResolution_ = function(res) { + var fn = this.getMap().getView().getView2D().getValueForResolutionFunction(); + var value = fn(res); + // FIXME do we really need this affine transform? + return (value - 1) * -1; +}; + + +/** + * Handles the user caused changes of the slider thumb and adjusts the + * resolution of our map accordingly. Will be called both while dragging and + * when dragging ends. + * + * @param {goog.fx.DragDropEvent} e The dragdropevent. + * @private + */ +ol.control.ZoomSlider.prototype.handleSliderChange_ = function(e) { + var map = this.getMap(); + var view = map.getView().getView2D(); + var resolution; + if (e.type === goog.fx.Dragger.EventType.DRAG) { + var amountDragged = this.amountDragged_(e.left, e.top); + resolution = this.resolutionForAmount_(amountDragged); + if (resolution !== this.currentResolution_) { + this.currentResolution_ = resolution; + view.setResolution(resolution); + } + } else { + goog.asserts.assert(goog.isDef(this.currentResolution_)); + map.beforeRender(ol.animation.zoom({ + resolution: this.currentResolution_, + duration: ol.control.ZOOMSLIDER_ANIMATION_DURATION, + easing: ol.easing.easeOut + })); + resolution = view.constrainResolution(this.currentResolution_); + view.setResolution(resolution); + } +}; diff --git a/float-no-zero/ol/ol/control/zoomtoextentcontrol.exports b/float-no-zero/ol/ol/control/zoomtoextentcontrol.exports new file mode 100644 index 0000000000..485e551f42 --- /dev/null +++ b/float-no-zero/ol/ol/control/zoomtoextentcontrol.exports @@ -0,0 +1 @@ +@exportSymbol ol.control.ZoomToExtent diff --git a/float-no-zero/ol/ol/control/zoomtoextentcontrol.js b/float-no-zero/ol/ol/control/zoomtoextentcontrol.js new file mode 100644 index 0000000000..9db50f69d0 --- /dev/null +++ b/float-no-zero/ol/ol/control/zoomtoextentcontrol.js @@ -0,0 +1,84 @@ +// FIXME works for View2D only + +goog.provide('ol.control.ZoomToExtent'); + +goog.require('goog.asserts'); +goog.require('goog.dom'); +goog.require('goog.dom.TagName'); +goog.require('goog.events'); +goog.require('goog.events.EventType'); +goog.require('ol.control.Control'); +goog.require('ol.css'); + + + +/** + * Create a control that adds a button, which, when pressed, changes + * the map view to a specific extent. To style this control use the + * css selector `.ol-zoom-extent`. + * @constructor + * @extends {ol.control.Control} + * @param {olx.control.ZoomToExtentOptions=} opt_options Options. + * @todo stability experimental + */ +ol.control.ZoomToExtent = function(opt_options) { + var options = goog.isDef(opt_options) ? opt_options : {}; + + /** + * @type {ol.Extent} + * @private + */ + this.extent_ = goog.isDef(options.extent) ? options.extent : null; + + var className = goog.isDef(options.className) ? options.className : + 'ol-zoom-extent'; + + var tipLabel = goog.isDef(options.tipLabel) ? + options.tipLabel : 'Fit to extent'; + var tip = goog.dom.createDom(goog.dom.TagName.SPAN, { + 'role' : 'tooltip' + }, tipLabel); + var element = goog.dom.createDom(goog.dom.TagName.DIV, { + 'class': className + ' ' + ol.css.CLASS_UNSELECTABLE + }); + var button = goog.dom.createDom(goog.dom.TagName.BUTTON, { + 'class': 'ol-has-tooltip' + }); + goog.dom.appendChild(button, tip); + goog.dom.appendChild(element, button); + + goog.events.listen(button, [ + goog.events.EventType.TOUCHEND, + goog.events.EventType.CLICK + ], this.handleZoomToExtent_, false, this); + + goog.events.listen(button, [ + goog.events.EventType.MOUSEOUT, + goog.events.EventType.FOCUSOUT + ], function() { + this.blur(); + }, false); + + goog.base(this, { + element: element, + target: options.target + }); +}; +goog.inherits(ol.control.ZoomToExtent, ol.control.Control); + + +/** + * @param {goog.events.BrowserEvent} browserEvent Browser event. + * @private + */ +ol.control.ZoomToExtent.prototype.handleZoomToExtent_ = function(browserEvent) { + browserEvent.preventDefault(); + // prevent #zoomExtent anchor from getting appended to the url + var map = this.getMap(); + var view = map.getView(); + goog.asserts.assert(goog.isDef(view)); + var view2D = view.getView2D(); + var extent = goog.isNull(this.extent_) ? + view2D.getProjection().getExtent() : this.extent_; + view2D.fitExtent(extent, map.getSize()); +}; diff --git a/float-no-zero/ol/ol/coordinate.exports b/float-no-zero/ol/ol/coordinate.exports new file mode 100644 index 0000000000..49eedf5f75 --- /dev/null +++ b/float-no-zero/ol/ol/coordinate.exports @@ -0,0 +1,6 @@ +@exportSymbol ol.coordinate.createStringXY +@exportSymbol ol.coordinate.format +@exportSymbol ol.coordinate.fromProjectedArray +@exportSymbol ol.coordinate.rotate +@exportSymbol ol.coordinate.toStringHDMS +@exportSymbol ol.coordinate.toStringXY diff --git a/float-no-zero/ol/ol/coordinate.js b/float-no-zero/ol/ol/coordinate.js new file mode 100644 index 0000000000..e027da504d --- /dev/null +++ b/float-no-zero/ol/ol/coordinate.js @@ -0,0 +1,251 @@ +goog.provide('ol.Coordinate'); +goog.provide('ol.CoordinateArray'); +goog.provide('ol.CoordinateFormatType'); +goog.provide('ol.coordinate'); + +goog.require('goog.math'); + + +/** + * A function that takes a {@link ol.Coordinate} and transforms it into a + * `{string}`. + * + * @typedef {function((ol.Coordinate|undefined)): string} + * @todo stability experimental + */ +ol.CoordinateFormatType; + + +/** + * An array of numbers representing a coordinate. + * @typedef {Array.} ol.Coordinate + * @todo stability experimental + */ +ol.Coordinate; + + +/** + * An array of coordinate arrays. + * @typedef {Array.} + * @todo stability experimental + */ +ol.CoordinateArray; + + +/** + * @param {ol.Coordinate} coordinate Coordinate. + * @param {ol.Coordinate} delta Delta. + * @return {ol.Coordinate} Coordinate. + */ +ol.coordinate.add = function(coordinate, delta) { + coordinate[0] += delta[0]; + coordinate[1] += delta[1]; + return coordinate; +}; + + +/** + * Calculates the point closest to the passed coordinate on the passed segment. + * This is the foot of the perpendicular of the coordinate to the segment when + * the foot is on the segment, or the closest segment coordinate when the foot + * is outside the segment. + * + * @param {ol.Coordinate} coordinate The coordinate. + * @param {Array.} segment The two coordinates of the segment. + * @return {ol.Coordinate} The foot of the perpendicular of the coordinate to + * the segment. + */ +ol.coordinate.closestOnSegment = function(coordinate, segment) { + var x0 = coordinate[0]; + var y0 = coordinate[1]; + var start = segment[0]; + var end = segment[1]; + var x1 = start[0]; + var y1 = start[1]; + var x2 = end[0]; + var y2 = end[1]; + var dx = x2 - x1; + var dy = y2 - y1; + var along = (dx == 0 && dy == 0) ? 0 : + ((dx * (x0 - x1)) + (dy * (y0 - y1))) / ((dx * dx + dy * dy) || 0); + var x, y; + if (along <= 0) { + x = x1; + y = y1; + } else if (along >= 1) { + x = x2; + y = y2; + } else { + x = x1 + along * dx; + y = y1 + along * dy; + } + return [x, y]; +}; + + +/** + * @param {number=} opt_fractionDigits The number of digits to include + * after the decimal point. Default is `0`. + * @return {ol.CoordinateFormatType} Coordinate format. + * @todo stability experimental + */ +ol.coordinate.createStringXY = function(opt_fractionDigits) { + return ( + /** + * @param {ol.Coordinate|undefined} coordinate Coordinate. + * @return {string} String XY. + */ + function(coordinate) { + return ol.coordinate.toStringXY(coordinate, opt_fractionDigits); + }); +}; + + +/** + * @private + * @param {number} degrees Degrees. + * @param {string} hemispheres Hemispheres. + * @return {string} String. + */ +ol.coordinate.degreesToStringHDMS_ = function(degrees, hemispheres) { + var normalizedDegrees = goog.math.modulo(degrees + 180, 360) - 180; + var x = Math.abs(Math.round(3600 * normalizedDegrees)); + return Math.floor(x / 3600) + '\u00b0 ' + + Math.floor((x / 60) % 60) + '\u2032 ' + + Math.floor(x % 60) + '\u2033 ' + + hemispheres.charAt(normalizedDegrees < 0 ? 1 : 0); +}; + + +/** + * @param {ol.Coordinate|undefined} coordinate Coordinate. + * @param {string} template A template string with `{x}` and `{y}` placeholders + * that will be replaced by first and second coordinate values. + * @param {number=} opt_fractionDigits The number of digits to include + * after the decimal point. Default is `0`. + * @return {string} Formated coordinate. + * @todo stability experimental + */ +ol.coordinate.format = function(coordinate, template, opt_fractionDigits) { + if (goog.isDef(coordinate)) { + return template + .replace('{x}', coordinate[0].toFixed(opt_fractionDigits)) + .replace('{y}', coordinate[1].toFixed(opt_fractionDigits)); + } else { + return ''; + } +}; + + +/** + * @param {ol.Coordinate} coordinate1 First coordinate. + * @param {ol.Coordinate} coordinate2 Second coordinate. + * @return {boolean} Whether the passed coordinates are equal. + */ +ol.coordinate.equals = function(coordinate1, coordinate2) { + var equals = true; + for (var i = coordinate1.length - 1; i >= 0; --i) { + if (coordinate1[i] != coordinate2[i]) { + equals = false; + break; + } + } + return equals; +}; + + +/** + * @param {ol.Coordinate} coordinate Coordinate. + * @param {number} angle Angle. + * @return {ol.Coordinate} Coordinate. + */ +ol.coordinate.rotate = function(coordinate, angle) { + var cosAngle = Math.cos(angle); + var sinAngle = Math.sin(angle); + var x = coordinate[0] * cosAngle - coordinate[1] * sinAngle; + var y = coordinate[1] * cosAngle + coordinate[0] * sinAngle; + coordinate[0] = x; + coordinate[1] = y; + return coordinate; +}; + + +/** + * @param {ol.Coordinate} coordinate Coordinate. + * @param {number} s Scale. + * @return {ol.Coordinate} Coordinate. + */ +ol.coordinate.scale = function(coordinate, s) { + coordinate[0] *= s; + coordinate[1] *= s; + return coordinate; +}; + + +/** + * @param {ol.Coordinate} coord1 First coordinate. + * @param {ol.Coordinate} coord2 Second coordinate. + * @return {number} Squared distance between coord1 and coord2. + */ +ol.coordinate.squaredDistance = function(coord1, coord2) { + var dx = coord1[0] - coord2[0]; + var dy = coord1[1] - coord2[1]; + return dx * dx + dy * dy; +}; + + +/** + * Calculate the squared distance from a coordinate to a line segment. + * + * @param {ol.Coordinate} coordinate Coordinate of the point. + * @param {Array.} segment Line segment (2 coordinates). + * @return {number} Squared distance from the point to the line segment. + */ +ol.coordinate.squaredDistanceToSegment = function(coordinate, segment) { + return ol.coordinate.squaredDistance(coordinate, + ol.coordinate.closestOnSegment(coordinate, segment)); +}; + + +/** + * @param {ol.Coordinate|undefined} coordinate Coordinate. + * @return {string} Hemisphere, degrees, minutes and seconds. + * @todo stability experimental + */ +ol.coordinate.toStringHDMS = function(coordinate) { + if (goog.isDef(coordinate)) { + return ol.coordinate.degreesToStringHDMS_(coordinate[1], 'NS') + ' ' + + ol.coordinate.degreesToStringHDMS_(coordinate[0], 'EW'); + } else { + return ''; + } +}; + + +/** + * @param {ol.Coordinate|undefined} coordinate Coordinate. + * @param {number=} opt_fractionDigits The number of digits to include + * after the decimal point. Default is `0`. + * @return {string} XY. + * @todo stability experimental + */ +ol.coordinate.toStringXY = function(coordinate, opt_fractionDigits) { + return ol.coordinate.format(coordinate, '{x}, {y}', opt_fractionDigits); +}; + + +/** + * Create an ol.Coordinate from an Array and take into account axis order. + * @param {Array} array The array with coordinates. + * @param {string} axis the axis info. + * @return {ol.Coordinate} The coordinate created. + * @todo stability experimental + */ +ol.coordinate.fromProjectedArray = function(array, axis) { + var firstAxis = axis.charAt(0); + if (firstAxis === 'n' || firstAxis === 's') { + return [array[1], array[0]]; + } else { + return array; + } +}; diff --git a/float-no-zero/ol/ol/css.js b/float-no-zero/ol/ol/css.js new file mode 100644 index 0000000000..80eb7b523d --- /dev/null +++ b/float-no-zero/ol/ol/css.js @@ -0,0 +1,19 @@ +goog.provide('ol.css'); + + +/** + * The CSS class that we'll give the DOM elements to have them unselectable. + * + * @const + * @type {string} + */ +ol.css.CLASS_UNSELECTABLE = 'ol-unselectable'; + + +/** + * The CSS class for unsupported feature. + * + * @const + * @type {string} + */ +ol.css.CLASS_UNSUPPORTED = 'ol-unsupported'; diff --git a/float-no-zero/ol/ol/deviceorientation.exports b/float-no-zero/ol/ol/deviceorientation.exports new file mode 100644 index 0000000000..4496aa24b9 --- /dev/null +++ b/float-no-zero/ol/ol/deviceorientation.exports @@ -0,0 +1 @@ +@exportSymbol ol.DeviceOrientation diff --git a/float-no-zero/ol/ol/deviceorientation.js b/float-no-zero/ol/ol/deviceorientation.js new file mode 100644 index 0000000000..aab556ebef --- /dev/null +++ b/float-no-zero/ol/ol/deviceorientation.js @@ -0,0 +1,249 @@ +goog.provide('ol.DeviceOrientation'); +goog.provide('ol.DeviceOrientationProperty'); + +goog.require('goog.events'); +goog.require('goog.math'); +goog.require('ol.BrowserFeature'); +goog.require('ol.Object'); + + +/** + * @enum {string} + */ +ol.DeviceOrientationProperty = { + ALPHA: 'alpha', + BETA: 'beta', + GAMMA: 'gamma', + HEADING: 'heading', + TRACKING: 'tracking' +}; + + + +/** + * The ol.DeviceOrientation class provides access to DeviceOrientation + * information and events, see the [HTML 5 DeviceOrientation Specification]( + * http://dev.w3.org/geo/api/spec-source-orientation) for more details. + * + * Many new computers, and especially mobile phones + * and tablets, provide hardware support for device orientation. Web + * developers targetting mobile devices will be especially interested in this + * class. + * + * Device orientation data are relative to a common starting point. For mobile + * devices, the starting point is to lay your phone face up on a table with the + * top of the phone pointing north. This represents the zero state. All + * angles are then relative to this state. For computers, it is the same except + * the screen is open at 90 degrees. + * + * Device orientation is reported as three angles - `alpha`, `beta`, and + * `gamma` - relative to the starting position along the three planar axes X, Y + * and Z. The X axis runs from the left edge to the right edge through the + * middle of the device. Similarly, the Y axis runs from the bottom to the top + * of the device through the middle. The Z axis runs from the back to the front + * through the middle. In the starting position, the X axis points to the + * right, the Y axis points away from you and the Z axis points straight up + * from the device lying flat. + * + * The three angles representing the device orientation are relative to the + * three axes. `alpha` indicates how much the device has been rotated around the + * Z axis, which is commonly interpreted as the compass heading (see note + * below). `beta` indicates how much the device has been rotated around the X + * axis, or how much it is tilted from front to back. `gamma` indicates how + * much the device has been rotated around the Y axis, or how much it is tilted + * from left to right. + * + * For most browsers, the `alpha` value returns the compass heading so if the + * device points north, it will be 0. With Safari on iOS, the 0 value of + * `alpha` is calculated from when device orientation was first requested. + * ol.DeviceOrientation provides the `heading` property which normalizes this + * behavior across all browsers for you. + * + * It is important to note that the HTML 5 DeviceOrientation specification + * indicates that `alpha`, `beta` and `gamma` are in degrees while the + * equivalent properties in ol.DeviceOrientation are in radians for consistency + * with all other uses of angles throughout OpenLayers. + * + * @see http://dev.w3.org/geo/api/spec-source-orientation + * + * @constructor + * @extends {ol.Object} + * @param {olx.DeviceOrientationOptions=} opt_options Options. + * @todo stability experimental + * @todo observable alpha {number} readonly the euler angle in radians of the + * device from the standard X axis + * @todo observable beta {number} readonly the euler angle in radians of the + * device from the planar Z axis + * @todo observable gamma {number} readonly the euler angle in radians of the + * device from the planar X axis + * @todo observable heading {number} readonly the euler angle in radians of the + * device from the planar Y axis + * @todo observable tracking {boolean} the status of tracking changes to alpha, + * beta and gamma. If true, changes are tracked and reported immediately. + */ +ol.DeviceOrientation = function(opt_options) { + + goog.base(this); + + var options = goog.isDef(opt_options) ? opt_options : {}; + + /** + * @private + * @type {goog.events.Key} + */ + this.listenerKey_ = null; + + goog.events.listen(this, + ol.Object.getChangeEventType(ol.DeviceOrientationProperty.TRACKING), + this.handleTrackingChanged_, false, this); + + this.setTracking(goog.isDef(options.tracking) ? options.tracking : false); + +}; +goog.inherits(ol.DeviceOrientation, ol.Object); + + +/** + * @inheritDoc + */ +ol.DeviceOrientation.prototype.disposeInternal = function() { + this.setTracking(false); + goog.base(this, 'disposeInternal'); +}; + + +/** + * @private + * @param {goog.events.BrowserEvent} browserEvent Event. + */ +ol.DeviceOrientation.prototype.orientationChange_ = function(browserEvent) { + var event = /** @type {DeviceOrientationEvent} */ + (browserEvent.getBrowserEvent()); + if (goog.isDefAndNotNull(event.alpha)) { + var alpha = goog.math.toRadians(event.alpha); + this.set(ol.DeviceOrientationProperty.ALPHA, alpha); + // event.absolute is undefined in iOS. + if (goog.isBoolean(event.absolute) && event.absolute) { + this.set(ol.DeviceOrientationProperty.HEADING, alpha); + } else if (goog.isDefAndNotNull(event.webkitCompassHeading) && + goog.isDefAndNotNull(event.webkitCompassAccuracy) && + event.webkitCompassAccuracy != -1) { + var heading = goog.math.toRadians(event.webkitCompassHeading); + this.set(ol.DeviceOrientationProperty.HEADING, heading); + } + } + if (goog.isDefAndNotNull(event.beta)) { + this.set(ol.DeviceOrientationProperty.BETA, + goog.math.toRadians(event.beta)); + } + if (goog.isDefAndNotNull(event.gamma)) { + this.set(ol.DeviceOrientationProperty.GAMMA, + goog.math.toRadians(event.gamma)); + } +}; + + +/** + * @return {number|undefined} The alpha value of the DeviceOrientation, + * in radians. + * @todo stability experimental + */ +ol.DeviceOrientation.prototype.getAlpha = function() { + return /** @type {number|undefined} */ ( + this.get(ol.DeviceOrientationProperty.ALPHA)); +}; +goog.exportProperty( + ol.DeviceOrientation.prototype, + 'getAlpha', + ol.DeviceOrientation.prototype.getAlpha); + + +/** + * @return {number|undefined} The beta value of the DeviceOrientation, + * in radians. + * @todo stability experimental + */ +ol.DeviceOrientation.prototype.getBeta = function() { + return /** @type {number|undefined} */ ( + this.get(ol.DeviceOrientationProperty.BETA)); +}; +goog.exportProperty( + ol.DeviceOrientation.prototype, + 'getBeta', + ol.DeviceOrientation.prototype.getBeta); + + +/** + * @return {number|undefined} The gamma value of the DeviceOrientation, + * in radians. + * @todo stability experimental + */ +ol.DeviceOrientation.prototype.getGamma = function() { + return /** @type {number|undefined} */ ( + this.get(ol.DeviceOrientationProperty.GAMMA)); +}; +goog.exportProperty( + ol.DeviceOrientation.prototype, + 'getGamma', + ol.DeviceOrientation.prototype.getGamma); + + +/** + * @return {number|undefined} The heading of the device relative to + * north, in radians, normalizing for different browser behavior. + * @todo stability experimental + */ +ol.DeviceOrientation.prototype.getHeading = function() { + return /** @type {number|undefined} */ ( + this.get(ol.DeviceOrientationProperty.HEADING)); +}; +goog.exportProperty( + ol.DeviceOrientation.prototype, + 'getHeading', + ol.DeviceOrientation.prototype.getHeading); + + +/** + * Are we tracking the device's orientation? + * @return {boolean} The current tracking state, true if tracking is on. + * @todo stability experimental + */ +ol.DeviceOrientation.prototype.getTracking = function() { + return /** @type {boolean} */ ( + this.get(ol.DeviceOrientationProperty.TRACKING)); +}; +goog.exportProperty( + ol.DeviceOrientation.prototype, + 'getTracking', + ol.DeviceOrientation.prototype.getTracking); + + +/** + * @private + */ +ol.DeviceOrientation.prototype.handleTrackingChanged_ = function() { + if (ol.BrowserFeature.HAS_DEVICE_ORIENTATION) { + var tracking = this.getTracking(); + if (tracking && goog.isNull(this.listenerKey_)) { + this.listenerKey_ = goog.events.listen(goog.global, 'deviceorientation', + this.orientationChange_, false, this); + } else if (!tracking && !goog.isNull(this.listenerKey_)) { + goog.events.unlistenByKey(this.listenerKey_); + this.listenerKey_ = null; + } + } +}; + + +/** + * Enable or disable tracking of DeviceOrientation events. + * @param {boolean} tracking True to enable and false to disable tracking. + * @todo stability experimental + */ +ol.DeviceOrientation.prototype.setTracking = function(tracking) { + this.set(ol.DeviceOrientationProperty.TRACKING, tracking); +}; +goog.exportProperty( + ol.DeviceOrientation.prototype, + 'setTracking', + ol.DeviceOrientation.prototype.setTracking); diff --git a/float-no-zero/ol/ol/dom/dom.js b/float-no-zero/ol/ol/dom/dom.js new file mode 100644 index 0000000000..a95e591dda --- /dev/null +++ b/float-no-zero/ol/ol/dom/dom.js @@ -0,0 +1,282 @@ +// FIXME add tests for browser features (Modernizr?) + +goog.provide('ol.dom'); +goog.provide('ol.dom.BrowserFeature'); + +goog.require('goog.asserts'); +goog.require('goog.dom'); +goog.require('goog.dom.TagName'); +goog.require('goog.style'); +goog.require('goog.userAgent'); +goog.require('goog.vec.Mat4'); + + +/** + * @enum {boolean} + */ +ol.dom.BrowserFeature = { + USE_MS_MATRIX_TRANSFORM: ol.LEGACY_IE_SUPPORT && ol.IS_LEGACY_IE, + USE_MS_ALPHA_FILTER: ol.LEGACY_IE_SUPPORT && ol.IS_LEGACY_IE +}; + + +/** + * Detect 2d transform. + * Adapted from http://stackoverflow.com/q/5661671/130442 + * http://caniuse.com/#feat=transforms2d + * @return {boolean} + */ +ol.dom.canUseCssTransform = (function() { + var canUseCssTransform; + return function() { + if (!goog.isDef(canUseCssTransform)) { + goog.asserts.assert(!goog.isNull(document.body)); + if (!goog.global.getComputedStyle) { + // this browser is ancient + canUseCssTransform = false; + } else { + var el = goog.dom.createElement(goog.dom.TagName.P), + has2d, + transforms = { + 'webkitTransform': '-webkit-transform', + 'OTransform': '-o-transform', + 'msTransform': '-ms-transform', + 'MozTransform': '-moz-transform', + 'transform': 'transform' + }; + goog.dom.appendChild(document.body, el); + for (var t in transforms) { + if (t in el.style) { + el.style[t] = 'translate(1px,1px)'; + has2d = goog.global.getComputedStyle(el).getPropertyValue( + transforms[t]); + } + } + goog.dom.removeNode(el); + + canUseCssTransform = (has2d && has2d !== 'none'); + } + } + return canUseCssTransform; + }; +}()); + + +/** + * Detect 3d transform. + * Adapted from http://stackoverflow.com/q/5661671/130442 + * http://caniuse.com/#feat=transforms3d + * @return {boolean} + */ +ol.dom.canUseCssTransform3D = (function() { + var canUseCssTransform3D; + return function() { + if (!goog.isDef(canUseCssTransform3D)) { + goog.asserts.assert(!goog.isNull(document.body)); + if (!goog.global.getComputedStyle) { + // this browser is ancient + canUseCssTransform3D = false; + } else { + var el = goog.dom.createElement(goog.dom.TagName.P), + has3d, + transforms = { + 'webkitTransform': '-webkit-transform', + 'OTransform': '-o-transform', + 'msTransform': '-ms-transform', + 'MozTransform': '-moz-transform', + 'transform': 'transform' + }; + goog.dom.appendChild(document.body, el); + for (var t in transforms) { + if (t in el.style) { + el.style[t] = 'translate3d(1px,1px,1px)'; + has3d = goog.global.getComputedStyle(el).getPropertyValue( + transforms[t]); + } + } + goog.dom.removeNode(el); + + canUseCssTransform3D = (has3d && has3d !== 'none'); + } + } + return canUseCssTransform3D; + }; +}()); + + +/** + * @param {Element} element Element. + * @param {string} value Value. + */ +ol.dom.setTransform = function(element, value) { + var style = element.style; + style.WebkitTransform = value; + style.MozTransform = value; + style.OTransform = value; + style.msTransform = value; + style.transform = value; + + // IE 9+ seems to assume transform-origin: 100% 100%; for some unknown reason + if (goog.userAgent.IE && !ol.IS_LEGACY_IE) { + element.style.transformOrigin = '0 0'; + } +}; + + +/** + * Sets the opacity of an element, in an IE-compatible way + * @param {!Element} element Element + * @param {number} value Opacity, [0..1] + */ +ol.dom.setOpacity = function(element, value) { + if (ol.dom.BrowserFeature.USE_MS_ALPHA_FILTER) { + /** @type {string} */ + var filter = element.currentStyle.filter; + + /** @type {RegExp} */ + var regex; + + /** @type {string} */ + var alpha; + + if (goog.userAgent.VERSION == '8.0') { + regex = /progid:DXImageTransform\.Microsoft\.Alpha\(.*?\)/i, + alpha = 'progid:DXImageTransform.Microsoft.Alpha(Opacity=' + + (value * 100) + ')'; + } else { + regex = /alpha\(.*?\)/i; + alpha = 'alpha(opacity=' + (value * 100) + ')'; + } + + var newFilter = filter.replace(regex, alpha); + if (newFilter === filter) { + // no replace was made? just append the new alpha filter instead + newFilter += ' ' + alpha; + } + + element.style.filter = newFilter; + + // Fix to apply filter to absolutely-positioned children element + if (element.currentStyle.zIndex === 'auto') { + element.style.zIndex = 0; + } + } else { + goog.style.setOpacity(element, value); + } +}; + + +/** + * Sets the IE matrix transform without replacing other filters + * @private + * @param {!Element} element Element + * @param {string} value The new progid string + */ +ol.dom.setIEMatrix_ = function(element, value) { + var filter = element.currentStyle.filter; + var newFilter = + filter.replace(/progid:DXImageTransform.Microsoft.Matrix\(.*?\)/i, value); + + if (newFilter === filter) { + newFilter = ' ' + value; + } + + element.style.filter = newFilter; + + // Fix to apply filter to absolutely-positioned children element + if (element.currentStyle.zIndex === 'auto') { + element.style.zIndex = 0; + } +}; + + +/** + * @param {!Element} element Element. + * @param {goog.vec.Mat4.Number} transform Matrix. + * @param {number=} opt_precision Precision. + * @param {Element=} opt_translationElement Required for IE7-8 + */ +ol.dom.transformElement2D = + function(element, transform, opt_precision, opt_translationElement) { + // using matrix() causes gaps in Chrome and Firefox on Mac OS X, so prefer + // matrix3d() + var i; + if (ol.dom.canUseCssTransform3D()) { + var value3D; + + if (goog.isDef(opt_precision)) { + /** @type {Array.} */ + var strings3D = new Array(16); + for (i = 0; i < 16; ++i) { + strings3D[i] = transform[i].toFixed(opt_precision); + } + value3D = strings3D.join(','); + } else { + value3D = transform.join(','); + } + ol.dom.setTransform(element, 'matrix3d(' + value3D + ')'); + } else if (ol.dom.canUseCssTransform()) { + /** @type {Array.} */ + var transform2D = [ + goog.vec.Mat4.getElement(transform, 0, 0), + goog.vec.Mat4.getElement(transform, 1, 0), + goog.vec.Mat4.getElement(transform, 0, 1), + goog.vec.Mat4.getElement(transform, 1, 1), + goog.vec.Mat4.getElement(transform, 0, 3), + goog.vec.Mat4.getElement(transform, 1, 3) + ]; + var value2D; + if (goog.isDef(opt_precision)) { + /** @type {Array.} */ + var strings2D = new Array(6); + for (i = 0; i < 6; ++i) { + strings2D[i] = transform2D[i].toFixed(opt_precision); + } + value2D = strings2D.join(','); + } else { + value2D = transform2D.join(','); + } + ol.dom.setTransform(element, 'matrix(' + value2D + ')'); + } else if (ol.dom.BrowserFeature.USE_MS_MATRIX_TRANSFORM) { + var m11 = goog.vec.Mat4.getElement(transform, 0, 0), + m12 = goog.vec.Mat4.getElement(transform, 0, 1), + m21 = goog.vec.Mat4.getElement(transform, 1, 0), + m22 = goog.vec.Mat4.getElement(transform, 1, 1), + dx = goog.vec.Mat4.getElement(transform, 0, 3), + dy = goog.vec.Mat4.getElement(transform, 1, 3); + + // See: http://msdn.microsoft.com/en-us/library/ms533014(v=vs.85).aspx + // and: http://extremelysatisfactorytotalitarianism.com/blog/?p=1002 + // @TODO: fix terrible IE bbox rotation issue. + var s = 'progid:DXImageTransform.Microsoft.Matrix('; + s += 'sizingMethod="auto expand"'; + s += ',M11=' + m11.toFixed(opt_precision || 20); + s += ',M12=' + m12.toFixed(opt_precision || 20); + s += ',M21=' + m21.toFixed(opt_precision || 20); + s += ',M22=' + m22.toFixed(opt_precision || 20); + s += ')'; + ol.dom.setIEMatrix_(element, s); + + // scale = m11 = m22 = target resolution [m/px] / current res [m/px] + // dx = (viewport width [px] / 2) * scale + // + (layer.x [m] - view.x [m]) / target resolution [m / px] + // except that we're positioning the child element relative to the + // viewport, not the map. + // dividing by the scale factor isn't the exact correction, but it's + // close enough that you can barely tell unless you're looking for it + dx /= m11; + dy /= m22; + + opt_translationElement.style.left = Math.round(dx) + 'px'; + opt_translationElement.style.top = Math.round(dy) + 'px'; + } else { + element.style.left = + Math.round(goog.vec.Mat4.getElement(transform, 0, 3)) + 'px'; + element.style.top = + Math.round(goog.vec.Mat4.getElement(transform, 1, 3)) + 'px'; + + // TODO: Add scaling here. This isn't quite as simple as multiplying + // width/height, because that only changes the container size, not the + // content size. + } +}; diff --git a/float-no-zero/ol/ol/dom/input.exports b/float-no-zero/ol/ol/dom/input.exports new file mode 100644 index 0000000000..0b6e668625 --- /dev/null +++ b/float-no-zero/ol/ol/dom/input.exports @@ -0,0 +1 @@ +@exportSymbol ol.dom.Input diff --git a/float-no-zero/ol/ol/dom/input.js b/float-no-zero/ol/ol/dom/input.js new file mode 100644 index 0000000000..45ab97ff5b --- /dev/null +++ b/float-no-zero/ol/ol/dom/input.js @@ -0,0 +1,145 @@ +goog.provide('ol.dom.Input'); +goog.provide('ol.dom.InputProperty'); + +goog.require('goog.asserts'); +goog.require('goog.events'); +goog.require('goog.events.EventType'); +goog.require('ol.Object'); + + +/** + * @enum {string} + */ +ol.dom.InputProperty = { + VALUE: 'value', + CHECKED: 'checked' +}; + + + +/** + * Helper class for binding HTML input to an {@link ol.Object}. + * + * Example: + * + * // bind a checkbox with id 'visible' to a layer's visibility + * var visible = new ol.dom.Input(document.getElementById('visible')); + * visible.bindTo('checked', layer, 'visible'); + * + * @constructor + * @extends {ol.Object} + * @param {Element} target Target element. + * @todo stability experimental + * @todo observable value {string} the value of the Input + * @todo observable checked {boolean} the checked state of the Input + */ +ol.dom.Input = function(target) { + goog.base(this); + + /** + * @private + * @type {HTMLInputElement} + */ + this.target_ = /** @type {HTMLInputElement} */ (target); + + goog.events.listen(this.target_, + [goog.events.EventType.CHANGE, goog.events.EventType.INPUT], + this.handleInputChanged_, false, this); + + goog.events.listen(this, + ol.Object.getChangeEventType(ol.dom.InputProperty.VALUE), + this.handleValueChanged_, false, this); + goog.events.listen(this, + ol.Object.getChangeEventType(ol.dom.InputProperty.CHECKED), + this.handleCheckedChanged_, false, this); +}; +goog.inherits(ol.dom.Input, ol.Object); + + +/** + * If the input is a checkbox, return whether or not the checbox is checked. + * @return {boolean|undefined} checked. + * @todo stability experimental + */ +ol.dom.Input.prototype.getChecked = function() { + return /** @type {boolean} */ (this.get(ol.dom.InputProperty.CHECKED)); +}; +goog.exportProperty( + ol.dom.Input.prototype, + 'getChecked', + ol.dom.Input.prototype.getChecked); + + +/** + * Get the value of the input. + * @return {string|undefined} input value. + * @todo stability experimental + */ +ol.dom.Input.prototype.getValue = function() { + return /** @type {string} */ (this.get(ol.dom.InputProperty.VALUE)); +}; +goog.exportProperty( + ol.dom.Input.prototype, + 'getValue', + ol.dom.Input.prototype.getValue); + + +/** + * Sets the value of the input. + * @param {string} value Value. + * @todo stability experimental + */ +ol.dom.Input.prototype.setValue = function(value) { + this.set(ol.dom.InputProperty.VALUE, value); +}; +goog.exportProperty( + ol.dom.Input.prototype, + 'setValue', + ol.dom.Input.prototype.setValue); + + +/** + * Set whether or not a checkbox is checked. + * @param {boolean} checked Checked. + * @todo stability experimental + */ +ol.dom.Input.prototype.setChecked = function(checked) { + this.set(ol.dom.InputProperty.CHECKED, checked); +}; +goog.exportProperty( + ol.dom.Input.prototype, + 'setChecked', + ol.dom.Input.prototype.setChecked); + + +/** + * @param {goog.events.BrowserEvent} browserEvent Browser event. + * @private + */ +ol.dom.Input.prototype.handleInputChanged_ = function(browserEvent) { + goog.asserts.assert(browserEvent.currentTarget == this.target_); + var target = this.target_; + if (target.type === 'checkbox' || target.type === 'radio') { + this.setChecked(target.checked); + } else { + this.setValue(target.value); + } +}; + + +/** + * @param {goog.events.Event} event Change event. + * @private + */ +ol.dom.Input.prototype.handleCheckedChanged_ = function(event) { + this.target_.checked = /** @type {boolean} */ (this.getChecked()); +}; + + +/** + * @param {goog.events.Event} event Change event. + * @private + */ +ol.dom.Input.prototype.handleValueChanged_ = function(event) { + this.target_.value = /** @type {string} */ (this.getValue()); +}; diff --git a/float-no-zero/ol/ol/easing.exports b/float-no-zero/ol/ol/easing.exports new file mode 100644 index 0000000000..d8653acfe3 --- /dev/null +++ b/float-no-zero/ol/ol/easing.exports @@ -0,0 +1,7 @@ +@exportSymbol ol.easing.bounce +@exportSymbol ol.easing.easeIn +@exportSymbol ol.easing.easeOut +@exportSymbol ol.easing.elastic +@exportSymbol ol.easing.inAndOut +@exportSymbol ol.easing.linear +@exportSymbol ol.easing.upAndDown diff --git a/float-no-zero/ol/ol/easing.js b/float-no-zero/ol/ol/easing.js new file mode 100644 index 0000000000..9e829f3a93 --- /dev/null +++ b/float-no-zero/ol/ol/easing.js @@ -0,0 +1,83 @@ +goog.provide('ol.easing'); + +goog.require('goog.fx.easing'); + + +/** + * from https://raw.github.com/DmitryBaranovskiy/raphael/master/raphael.js + * @param {number} t Input between 0 and 1. + * @return {number} Output between 0 and 1. + */ +ol.easing.bounce = function(t) { + var s = 7.5625, p = 2.75, l; + if (t < (1 / p)) { + l = s * t * t; + } else { + if (t < (2 / p)) { + t -= (1.5 / p); + l = s * t * t + 0.75; + } else { + if (t < (2.5 / p)) { + t -= (2.25 / p); + l = s * t * t + 0.9375; + } else { + t -= (2.625 / p); + l = s * t * t + 0.984375; + } + } + } + return l; +}; + + +/** + * @param {number} t Input between 0 and 1. + * @return {number} Output between 0 and 1. + */ +ol.easing.easeIn = goog.fx.easing.easeIn; + + +/** + * @param {number} t Input between 0 and 1. + * @return {number} Output between 0 and 1. + */ +ol.easing.easeOut = goog.fx.easing.easeOut; + + +/** + * from https://raw.github.com/DmitryBaranovskiy/raphael/master/raphael.js + * @param {number} t Input between 0 and 1. + * @return {number} Output between 0 and 1. + */ +ol.easing.elastic = function(t) { + return Math.pow(2, -10 * t) * Math.sin((t - 0.075) * (2 * Math.PI) / 0.3) + 1; +}; + + +/** + * @param {number} t Input between 0 and 1. + * @return {number} Output between 0 and 1. + */ +ol.easing.inAndOut = goog.fx.easing.inAndOut; + + +/** + * @param {number} t Input between 0 and 1. + * @return {number} Output between 0 and 1. + */ +ol.easing.linear = function(t) { + return t; +}; + + +/** + * @param {number} t Input between 0 and 1. + * @return {number} Output between 0 and 1. + */ +ol.easing.upAndDown = function(t) { + if (t < 0.5) { + return ol.easing.inAndOut(2 * t); + } else { + return 1 - ol.easing.inAndOut(2 * (t - 0.5)); + } +}; diff --git a/float-no-zero/ol/ol/ellipsoid/bessel1841ellipsoid.js b/float-no-zero/ol/ol/ellipsoid/bessel1841ellipsoid.js new file mode 100644 index 0000000000..198a8eb76b --- /dev/null +++ b/float-no-zero/ol/ol/ellipsoid/bessel1841ellipsoid.js @@ -0,0 +1,10 @@ +goog.provide('ol.ellipsoid.BESSEL1841'); + +goog.require('ol.Ellipsoid'); + + +/** + * @const + * @type {ol.Ellipsoid} + */ +ol.ellipsoid.BESSEL1841 = new ol.Ellipsoid(6377397.155, 1 / 299.15281285); diff --git a/float-no-zero/ol/ol/ellipsoid/ellipsoid.js b/float-no-zero/ol/ol/ellipsoid/ellipsoid.js new file mode 100644 index 0000000000..88ef01335f --- /dev/null +++ b/float-no-zero/ol/ol/ellipsoid/ellipsoid.js @@ -0,0 +1,185 @@ +goog.provide('ol.Ellipsoid'); + +goog.require('goog.math'); +goog.require('ol.Coordinate'); + + + +/** + * @constructor + * @param {number} a Major radius. + * @param {number} flattening Flattening. + */ +ol.Ellipsoid = function(a, flattening) { + + /** + * @const + * @type {number} + */ + this.a = a; + + /** + * @const + * @type {number} + */ + this.flattening = flattening; + + /** + * @const + * @type {number} + */ + this.b = this.a * (1 - this.flattening); + + /** + * @const + * @type {number} + */ + this.eSquared = 2 * flattening - flattening * flattening; + + /** + * @const + * @type {number} + */ + this.e = Math.sqrt(this.eSquared); + +}; + + +/** + * @param {ol.Coordinate} c1 Coordinate 1. + * @param {ol.Coordinate} c2 Coordinate 1. + * @param {number=} opt_minDeltaLambda Minimum delta lambda for convergence. + * @param {number=} opt_maxIterations Maximum iterations. + * @return {{distance: number, initialBearing: number, finalBearing: number}} + * Vincenty. + */ +ol.Ellipsoid.prototype.vincenty = + function(c1, c2, opt_minDeltaLambda, opt_maxIterations) { + var minDeltaLambda = goog.isDef(opt_minDeltaLambda) ? + opt_minDeltaLambda : 1e-12; + var maxIterations = goog.isDef(opt_maxIterations) ? + opt_maxIterations : 100; + var f = this.flattening; + var lat1 = goog.math.toRadians(c1[1]); + var lat2 = goog.math.toRadians(c2[1]); + var deltaLon = goog.math.toRadians(c2[0] - c1[0]); + var U1 = Math.atan((1 - f) * Math.tan(lat1)); + var cosU1 = Math.cos(U1); + var sinU1 = Math.sin(U1); + var U2 = Math.atan((1 - f) * Math.tan(lat2)); + var cosU2 = Math.cos(U2); + var sinU2 = Math.sin(U2); + var lambda = deltaLon; + var cosSquaredAlpha, sinAlpha; + var cosLambda, deltaLambda = Infinity, sinLambda; + var cos2SigmaM, cosSigma, sigma, sinSigma; + var i; + for (i = maxIterations; i > 0; --i) { + cosLambda = Math.cos(lambda); + sinLambda = Math.sin(lambda); + var x = cosU2 * sinLambda; + var y = cosU1 * sinU2 - sinU1 * cosU2 * cosLambda; + sinSigma = Math.sqrt(x * x + y * y); + if (sinSigma === 0) { + return { + distance: 0, + initialBearing: 0, + finalBearing: 0 + }; + } + cosSigma = sinU1 * sinU2 + cosU1 * cosU2 * cosLambda; + sigma = Math.atan2(sinSigma, cosSigma); + sinAlpha = cosU1 * cosU2 * sinLambda / sinSigma; + cosSquaredAlpha = 1 - sinAlpha * sinAlpha; + cos2SigmaM = cosSigma - 2 * sinU1 * sinU2 / cosSquaredAlpha; + if (isNaN(cos2SigmaM)) { + cos2SigmaM = 0; + } + var C = f / 16 * cosSquaredAlpha * (4 + f * (4 - 3 * cosSquaredAlpha)); + var lambdaPrime = deltaLon + (1 - C) * f * sinAlpha * (sigma + + C * sinSigma * (cos2SigmaM + + C * cosSigma * (2 * cos2SigmaM * cos2SigmaM - 1))); + deltaLambda = Math.abs(lambdaPrime - lambda); + lambda = lambdaPrime; + if (deltaLambda < minDeltaLambda) { + break; + } + } + if (i === 0) { + return { + distance: NaN, + finalBearing: NaN, + initialBearing: NaN + }; + } + var aSquared = this.a * this.a; + var bSquared = this.b * this.b; + var uSquared = cosSquaredAlpha * (aSquared - bSquared) / bSquared; + var A = 1 + uSquared / 16384 * + (4096 + uSquared * (uSquared * (320 - 175 * uSquared) - 768)); + var B = uSquared / 1024 * + (256 + uSquared * (uSquared * (74 - 47 * uSquared) - 128)); + var deltaSigma = B * sinSigma * (cos2SigmaM + B / 4 * + (cosSigma * (2 * cos2SigmaM * cos2SigmaM - 1) - + B / 6 * cos2SigmaM * (4 * sinSigma * sinSigma - 3) * + (4 * cos2SigmaM * cos2SigmaM - 3))); + cosLambda = Math.cos(lambda); + sinLambda = Math.sin(lambda); + var alpha1 = Math.atan2(cosU2 * sinLambda, + cosU1 * sinU2 - sinU1 * cosU2 * cosLambda); + var alpha2 = Math.atan2(cosU1 * sinLambda, + cosU1 * sinU2 * cosLambda - sinU1 * cosU2); + return { + distance: this.b * A * (sigma - deltaSigma), + initialBearing: goog.math.toDegrees(alpha1), + finalBearing: goog.math.toDegrees(alpha2) + }; +}; + + +/** + * Returns the distance from c1 to c2 using Vincenty. + * + * @param {ol.Coordinate} c1 Coordinate 1. + * @param {ol.Coordinate} c2 Coordinate 1. + * @param {number=} opt_minDeltaLambda Minimum delta lambda for convergence. + * @param {number=} opt_maxIterations Maximum iterations. + * @return {number} Vincenty distance. + */ +ol.Ellipsoid.prototype.vincentyDistance = + function(c1, c2, opt_minDeltaLambda, opt_maxIterations) { + var vincenty = this.vincenty(c1, c2, opt_minDeltaLambda, opt_maxIterations); + return vincenty.distance; +}; + + +/** + * Returns the final bearing from c1 to c2 using Vincenty. + * + * @param {ol.Coordinate} c1 Coordinate 1. + * @param {ol.Coordinate} c2 Coordinate 1. + * @param {number=} opt_minDeltaLambda Minimum delta lambda for convergence. + * @param {number=} opt_maxIterations Maximum iterations. + * @return {number} Initial bearing. + */ +ol.Ellipsoid.prototype.vincentyFinalBearing = + function(c1, c2, opt_minDeltaLambda, opt_maxIterations) { + var vincenty = this.vincenty(c1, c2, opt_minDeltaLambda, opt_maxIterations); + return vincenty.finalBearing; +}; + + +/** + * Returns the initial bearing from c1 to c2 using Vincenty. + * + * @param {ol.Coordinate} c1 Coordinate 1. + * @param {ol.Coordinate} c2 Coordinate 1. + * @param {number=} opt_minDeltaLambda Minimum delta lambda for convergence. + * @param {number=} opt_maxIterations Maximum iterations. + * @return {number} Initial bearing. + */ +ol.Ellipsoid.prototype.vincentyInitialBearing = + function(c1, c2, opt_minDeltaLambda, opt_maxIterations) { + var vincenty = this.vincenty(c1, c2, opt_minDeltaLambda, opt_maxIterations); + return vincenty.initialBearing; +}; diff --git a/float-no-zero/ol/ol/ellipsoid/wgs84ellipsoid.js b/float-no-zero/ol/ol/ellipsoid/wgs84ellipsoid.js new file mode 100644 index 0000000000..e5244b80d7 --- /dev/null +++ b/float-no-zero/ol/ol/ellipsoid/wgs84ellipsoid.js @@ -0,0 +1,10 @@ +goog.provide('ol.ellipsoid.WGS84'); + +goog.require('ol.Ellipsoid'); + + +/** + * @const + * @type {ol.Ellipsoid} + */ +ol.ellipsoid.WGS84 = new ol.Ellipsoid(6378137, 1 / 298.257223563); diff --git a/float-no-zero/ol/ol/events/condition.exports b/float-no-zero/ol/ol/events/condition.exports new file mode 100644 index 0000000000..c61f44c6a2 --- /dev/null +++ b/float-no-zero/ol/ol/events/condition.exports @@ -0,0 +1,7 @@ +@exportSymbol ol.events.condition.altKeyOnly +@exportSymbol ol.events.condition.altShiftKeysOnly +@exportSymbol ol.events.condition.always +@exportSymbol ol.events.condition.noModifierKeys +@exportSymbol ol.events.condition.platformModifierKeyOnly +@exportSymbol ol.events.condition.shiftKeyOnly +@exportSymbol ol.events.condition.targetNotEditable diff --git a/float-no-zero/ol/ol/events/condition.js b/float-no-zero/ol/ol/events/condition.js new file mode 100644 index 0000000000..d6afa87bfc --- /dev/null +++ b/float-no-zero/ol/ol/events/condition.js @@ -0,0 +1,122 @@ +goog.provide('ol.events.ConditionType'); +goog.provide('ol.events.condition'); + +goog.require('goog.asserts'); +goog.require('goog.dom.TagName'); +goog.require('goog.functions'); +goog.require('ol.MapBrowserEvent.EventType'); + + +/** + * A function that takes an {@link ol.MapBrowserEvent} and returns a + * `{boolean}`. If the condition is met, true should be returned. + * + * @typedef {function(ol.MapBrowserEvent): boolean} + * @todo stability experimental + */ +ol.events.ConditionType; + + +/** + * @param {ol.MapBrowserEvent} mapBrowserEvent Map browser event. + * @return {boolean} True if only the alt key is pressed. + * @todo stability experimental + */ +ol.events.condition.altKeyOnly = function(mapBrowserEvent) { + var browserEvent = mapBrowserEvent.browserEvent; + return ( + browserEvent.altKey && + !browserEvent.platformModifierKey && + !browserEvent.shiftKey); +}; + + +/** + * @param {ol.MapBrowserEvent} mapBrowserEvent Map browser event. + * @return {boolean} True if only the alt and shift keys are pressed. + * @todo stability experimental + */ +ol.events.condition.altShiftKeysOnly = function(mapBrowserEvent) { + var browserEvent = mapBrowserEvent.browserEvent; + return ( + browserEvent.altKey && + !browserEvent.platformModifierKey && + browserEvent.shiftKey); +}; + + +/** + * Always true. + * @param {ol.MapBrowserEvent} mapBrowserEvent Map browser event. + * @return {boolean} True. + * @todo stability experimental + */ +ol.events.condition.always = goog.functions.TRUE; + + +/** + * @param {ol.MapBrowserEvent} mapBrowserEvent Map browser event. + * @return {boolean} True if the event is a click event. + * @todo stability experimental + */ +ol.events.condition.singleClick = function(mapBrowserEvent) { + return mapBrowserEvent.type == ol.MapBrowserEvent.EventType.SINGLECLICK; +}; + + +/** + * @param {ol.MapBrowserEvent} mapBrowserEvent Map browser event. + * @return {boolean} True only if there no modifier keys are pressed. + * @todo stability experimental + */ +ol.events.condition.noModifierKeys = function(mapBrowserEvent) { + var browserEvent = mapBrowserEvent.browserEvent; + return ( + !browserEvent.altKey && + !browserEvent.platformModifierKey && + !browserEvent.shiftKey); +}; + + +/** + * @param {ol.MapBrowserEvent} mapBrowserEvent Map browser event. + * @return {boolean} True if only the platform modifier key is pressed. + * @todo stability experimental + */ +ol.events.condition.platformModifierKeyOnly = function(mapBrowserEvent) { + var browserEvent = mapBrowserEvent.browserEvent; + return ( + !browserEvent.altKey && + browserEvent.platformModifierKey && + !browserEvent.shiftKey); +}; + + +/** + * @param {ol.MapBrowserEvent} mapBrowserEvent Map browser event. + * @return {boolean} True if only the shift key is pressed. + * @todo stability experimental + */ +ol.events.condition.shiftKeyOnly = function(mapBrowserEvent) { + var browserEvent = mapBrowserEvent.browserEvent; + return ( + !browserEvent.altKey && + !browserEvent.platformModifierKey && + browserEvent.shiftKey); +}; + + +/** + * @param {ol.MapBrowserEvent} mapBrowserEvent Map browser event. + * @return {boolean} True only if the target element is not editable. + * @todo stability experimental + */ +ol.events.condition.targetNotEditable = function(mapBrowserEvent) { + var target = mapBrowserEvent.browserEvent.target; + goog.asserts.assertInstanceof(target, Element); + var tagName = target.tagName; + return ( + tagName !== goog.dom.TagName.INPUT && + tagName !== goog.dom.TagName.SELECT && + tagName !== goog.dom.TagName.TEXTAREA); +}; diff --git a/float-no-zero/ol/ol/events/condition.jsdoc b/float-no-zero/ol/ol/events/condition.jsdoc new file mode 100644 index 0000000000..74ed0abb2b --- /dev/null +++ b/float-no-zero/ol/ol/events/condition.jsdoc @@ -0,0 +1,3 @@ +/** + * @namespace ol.events.condition + */ diff --git a/float-no-zero/ol/ol/extent.exports b/float-no-zero/ol/ol/extent.exports new file mode 100644 index 0000000000..387a75529f --- /dev/null +++ b/float-no-zero/ol/ol/extent.exports @@ -0,0 +1,18 @@ +@exportSymbol ol.extent.boundingExtent +@exportSymbol ol.extent.buffer +@exportSymbol ol.extent.containsCoordinate +@exportSymbol ol.extent.containsExtent +@exportSymbol ol.extent.createEmpty +@exportSymbol ol.extent.equals +@exportSymbol ol.extent.extend +@exportSymbol ol.extent.getBottomLeft +@exportSymbol ol.extent.getBottomRight +@exportSymbol ol.extent.getCenter +@exportSymbol ol.extent.getHeight +@exportSymbol ol.extent.getSize +@exportSymbol ol.extent.getTopLeft +@exportSymbol ol.extent.getTopRight +@exportSymbol ol.extent.getWidth +@exportSymbol ol.extent.intersects +@exportSymbol ol.extent.isEmpty +@exportSymbol ol.extent.transform diff --git a/float-no-zero/ol/ol/extent.js b/float-no-zero/ol/ol/extent.js new file mode 100644 index 0000000000..ba146637fc --- /dev/null +++ b/float-no-zero/ol/ol/extent.js @@ -0,0 +1,766 @@ +goog.provide('ol.Extent'); +goog.provide('ol.extent'); +goog.provide('ol.extent.Relationship'); + +goog.require('goog.asserts'); +goog.require('goog.vec.Mat4'); +goog.require('ol.Coordinate'); +goog.require('ol.Size'); +goog.require('ol.TransformFunction'); + + +/** + * An array of numbers representing an extent: `[minx, miny, maxx, maxy]`. + * @typedef {Array.} + * @todo stability experimental + */ +ol.Extent; + + +/** + * Relationship to an extent. + * @enum {number} + */ +ol.extent.Relationship = { + UNKNOWN: 0, + INTERSECTING: 1, + ABOVE: 2, + RIGHT: 4, + BELOW: 8, + LEFT: 16 +}; + + +/** + * Builds an extent that includes all given coordinates. + * + * @param {Array.} coordinates Coordinates. + * @return {ol.Extent} Bounding extent. + * @todo stability experimental + */ +ol.extent.boundingExtent = function(coordinates) { + var extent = ol.extent.createEmpty(); + for (var i = 0, ii = coordinates.length; i < ii; ++i) { + ol.extent.extendCoordinate(extent, coordinates[i]); + } + return extent; +}; + + +/** + * @param {Array.} xs Xs. + * @param {Array.} ys Ys. + * @param {ol.Extent=} opt_extent Destination extent. + * @private + * @return {ol.Extent} Extent. + * @todo stability experimental + */ +ol.extent.boundingExtentXYs_ = function(xs, ys, opt_extent) { + goog.asserts.assert(xs.length > 0); + goog.asserts.assert(ys.length > 0); + var minX = Math.min.apply(null, xs); + var minY = Math.min.apply(null, ys); + var maxX = Math.max.apply(null, xs); + var maxY = Math.max.apply(null, ys); + return ol.extent.createOrUpdate(minX, minY, maxX, maxY, opt_extent); +}; + + +/** + * Return extent increased by the provided value. + * @param {ol.Extent} extent Extent. + * @param {number} value The amount by wich the extent should be buffered. + * @param {ol.Extent=} opt_extent Extent. + * @return {ol.Extent} Extent. + */ +ol.extent.buffer = function(extent, value, opt_extent) { + if (goog.isDef(opt_extent)) { + opt_extent[0] = extent[0] - value; + opt_extent[1] = extent[1] - value; + opt_extent[2] = extent[2] + value; + opt_extent[3] = extent[3] + value; + return opt_extent; + } else { + return [ + extent[0] - value, + extent[1] - value, + extent[2] + value, + extent[3] + value + ]; + } +}; + + +/** + * Creates a clone of an extent. + * + * @param {ol.Extent} extent Extent to clone. + * @param {ol.Extent=} opt_extent Extent. + * @return {ol.Extent} The clone. + * @todo stability experimental + */ +ol.extent.clone = function(extent, opt_extent) { + if (goog.isDef(opt_extent)) { + opt_extent[0] = extent[0]; + opt_extent[1] = extent[1]; + opt_extent[2] = extent[2]; + opt_extent[3] = extent[3]; + return opt_extent; + } else { + return extent.slice(); + } +}; + + +/** + * @param {ol.Extent} extent Extent. + * @param {number} x X. + * @param {number} y Y. + * @return {number} Closest squared distance. + */ +ol.extent.closestSquaredDistanceXY = function(extent, x, y) { + var dx, dy; + if (x < extent[0]) { + dx = extent[0] - x; + } else if (extent[2] < x) { + dx = x - extent[2]; + } else { + dx = 0; + } + if (y < extent[1]) { + dy = extent[1] - y; + } else if (extent[3] < y) { + dy = y - extent[3]; + } else { + dy = 0; + } + return dx * dx + dy * dy; +}; + + +/** + * Checks if the passed coordinate is contained or on the edge of the extent. + * + * @param {ol.Extent} extent Extent. + * @param {ol.Coordinate} coordinate Coordinate. + * @return {boolean} Contains. + * @todo stability experimental + */ +ol.extent.containsCoordinate = function(extent, coordinate) { + return extent[0] <= coordinate[0] && coordinate[0] <= extent[2] && + extent[1] <= coordinate[1] && coordinate[1] <= extent[3]; +}; + + +/** + * Checks if `extent2` is contained by or on the edge of `extent1`. + * + * @param {ol.Extent} extent1 Extent 1. + * @param {ol.Extent} extent2 Extent 2. + * @return {boolean} Contains. + * @todo stability experimental + */ +ol.extent.containsExtent = function(extent1, extent2) { + return extent1[0] <= extent2[0] && extent2[2] <= extent1[2] && + extent1[1] <= extent2[1] && extent2[3] <= extent1[3]; +}; + + +/** + * Get the relationship between a coordinate and extent. + * @param {ol.Extent} extent The extent. + * @param {ol.Coordinate} coordinate The coordinate. + * @return {number} The relationship (bitwise compare with + * ol.extent.Relationship). + */ +ol.extent.coordinateRelationship = function(extent, coordinate) { + var minX = extent[0]; + var minY = extent[1]; + var maxX = extent[2]; + var maxY = extent[3]; + var x = coordinate[0]; + var y = coordinate[1]; + var relationship = ol.extent.Relationship.UNKNOWN; + if (x < minX) { + relationship = relationship | ol.extent.Relationship.LEFT; + } else if (x > maxX) { + relationship = relationship | ol.extent.Relationship.RIGHT; + } + if (y < minY) { + relationship = relationship | ol.extent.Relationship.BELOW; + } else if (y > maxY) { + relationship = relationship | ol.extent.Relationship.ABOVE; + } + if (relationship === ol.extent.Relationship.UNKNOWN) { + relationship = ol.extent.Relationship.INTERSECTING; + } + return relationship; +}; + + +/** + * @return {ol.Extent} Empty extent. + * @todo stability experimental + */ +ol.extent.createEmpty = function() { + return [Infinity, Infinity, -Infinity, -Infinity]; +}; + + +/** + * @param {number} minX Minimum X. + * @param {number} minY Minimum Y. + * @param {number} maxX Maximum X. + * @param {number} maxY Maximum Y. + * @param {ol.Extent=} opt_extent Destination extent. + * @return {ol.Extent} Extent. + * @todo stability experimental + */ +ol.extent.createOrUpdate = function(minX, minY, maxX, maxY, opt_extent) { + if (goog.isDef(opt_extent)) { + opt_extent[0] = minX; + opt_extent[1] = minY; + opt_extent[2] = maxX; + opt_extent[3] = maxY; + return opt_extent; + } else { + return [minX, minY, maxX, maxY]; + } +}; + + +/** + * @param {ol.Extent=} opt_extent Extent. + * @return {ol.Extent} Extent. + */ +ol.extent.createOrUpdateEmpty = function(opt_extent) { + return ol.extent.createOrUpdate( + Infinity, Infinity, -Infinity, -Infinity, opt_extent); +}; + + +/** + * @param {ol.Coordinate} coordinate Coordinate. + * @param {ol.Extent=} opt_extent Extent. + * @return {ol.Extent} Extent. + */ +ol.extent.createOrUpdateFromCoordinate = function(coordinate, opt_extent) { + var x = coordinate[0]; + var y = coordinate[1]; + return ol.extent.createOrUpdate(x, y, x, y, opt_extent); +}; + + +/** + * @param {Array.} coordinates Coordinates. + * @param {ol.Extent=} opt_extent Extent. + * @return {ol.Extent} Extent. + */ +ol.extent.createOrUpdateFromCoordinates = function(coordinates, opt_extent) { + var extent = ol.extent.createOrUpdateEmpty(opt_extent); + return ol.extent.extendCoordinates(extent, coordinates); +}; + + +/** + * @param {Array.} flatCoordinates Flat coordinates. + * @param {number} offset Offset. + * @param {number} end End. + * @param {number} stride Stride. + * @param {ol.Extent=} opt_extent Extent. + * @return {ol.Extent} Extent. + */ +ol.extent.createOrUpdateFromFlatCoordinates = + function(flatCoordinates, offset, end, stride, opt_extent) { + var extent = ol.extent.createOrUpdateEmpty(opt_extent); + return ol.extent.extendFlatCoordinates( + extent, flatCoordinates, offset, end, stride); +}; + + +/** + * @param {Array.>} rings Rings. + * @param {ol.Extent=} opt_extent Extent. + * @return {ol.Extent} Extent. + */ +ol.extent.createOrUpdateFromRings = function(rings, opt_extent) { + var extent = ol.extent.createOrUpdateEmpty(opt_extent); + return ol.extent.extendRings(extent, rings); +}; + + +/** + * Empties extent in place. + * @param {ol.Extent} extent Extent. + * @return {ol.Extent} Extent. + * @todo stability experimental + */ +ol.extent.empty = function(extent) { + extent[0] = extent[1] = Infinity; + extent[2] = extent[3] = -Infinity; + return extent; +}; + + +/** + * @param {ol.Extent} extent1 Extent 1. + * @param {ol.Extent} extent2 Extent 2. + * @return {boolean} Equals. + * @todo stability experimental + */ +ol.extent.equals = function(extent1, extent2) { + return extent1[0] == extent2[0] && extent1[2] == extent2[2] && + extent1[1] == extent2[1] && extent1[3] == extent2[3]; +}; + + +/** + * @param {ol.Extent} extent1 Extent 1. + * @param {ol.Extent} extent2 Extent 2. + * @return {ol.Extent} Extent. + * @todo stability experimental + */ +ol.extent.extend = function(extent1, extent2) { + if (extent2[0] < extent1[0]) { + extent1[0] = extent2[0]; + } + if (extent2[2] > extent1[2]) { + extent1[2] = extent2[2]; + } + if (extent2[1] < extent1[1]) { + extent1[1] = extent2[1]; + } + if (extent2[3] > extent1[3]) { + extent1[3] = extent2[3]; + } + return extent1; +}; + + +/** + * @param {ol.Extent} extent Extent. + * @param {ol.Coordinate} coordinate Coordinate. + * @todo stability experimental + */ +ol.extent.extendCoordinate = function(extent, coordinate) { + if (coordinate[0] < extent[0]) { + extent[0] = coordinate[0]; + } + if (coordinate[0] > extent[2]) { + extent[2] = coordinate[0]; + } + if (coordinate[1] < extent[1]) { + extent[1] = coordinate[1]; + } + if (coordinate[1] > extent[3]) { + extent[3] = coordinate[1]; + } +}; + + +/** + * @param {ol.Extent} extent Extent. + * @param {Array.} coordinates Coordinates. + * @return {ol.Extent} Extent. + */ +ol.extent.extendCoordinates = function(extent, coordinates) { + var i, ii; + for (i = 0, ii = coordinates.length; i < ii; ++i) { + ol.extent.extendCoordinate(extent, coordinates[i]); + } + return extent; +}; + + +/** + * @param {ol.Extent} extent Extent. + * @param {Array.} flatCoordinates Flat coordinates. + * @param {number} offset Offset. + * @param {number} end End. + * @param {number} stride Stride. + * @return {ol.Extent} Extent. + */ +ol.extent.extendFlatCoordinates = + function(extent, flatCoordinates, offset, end, stride) { + for (; offset < end; offset += stride) { + ol.extent.extendXY( + extent, flatCoordinates[offset], flatCoordinates[offset + 1]); + } + return extent; +}; + + +/** + * @param {ol.Extent} extent Extent. + * @param {Array.>} rings Rings. + * @return {ol.Extent} Extent. + */ +ol.extent.extendRings = function(extent, rings) { + var i, ii; + for (i = 0, ii = rings.length; i < ii; ++i) { + ol.extent.extendCoordinates(extent, rings[i]); + } + return extent; +}; + + +/** + * @param {ol.Extent} extent Extent. + * @param {number} x X. + * @param {number} y Y. + */ +ol.extent.extendXY = function(extent, x, y) { + extent[0] = Math.min(extent[0], x); + extent[1] = Math.min(extent[1], y); + extent[2] = Math.max(extent[2], x); + extent[3] = Math.max(extent[3], y); +}; + + +/** + * @param {ol.Extent} extent Extent. + * @return {number} Area. + */ +ol.extent.getArea = function(extent) { + return ol.extent.getWidth(extent) * ol.extent.getHeight(extent); +}; + + +/** + * @param {ol.Extent} extent Extent. + * @return {ol.Coordinate} Bottom left coordinate. + * @todo stability experimental + */ +ol.extent.getBottomLeft = function(extent) { + return [extent[0], extent[1]]; +}; + + +/** + * @param {ol.Extent} extent Extent. + * @return {ol.Coordinate} Bottom right coordinate. + * @todo stability experimental + */ +ol.extent.getBottomRight = function(extent) { + return [extent[2], extent[1]]; +}; + + +/** + * @param {ol.Extent} extent Extent. + * @return {ol.Coordinate} Center. + * @todo stability experimental + */ +ol.extent.getCenter = function(extent) { + return [(extent[0] + extent[2]) / 2, (extent[1] + extent[3]) / 2]; +}; + + +/** + * @param {ol.Extent} extent1 Extent 1. + * @param {ol.Extent} extent2 Extent 2. + * @return {number} Enlarged area. + */ +ol.extent.getEnlargedArea = function(extent1, extent2) { + var minX = Math.min(extent1[0], extent2[0]); + var minY = Math.min(extent1[1], extent2[1]); + var maxX = Math.max(extent1[2], extent2[2]); + var maxY = Math.max(extent1[3], extent2[3]); + return (maxX - minX) * (maxY - minY); +}; + + +/** + * @param {ol.Coordinate} center Center. + * @param {number} resolution Resolution. + * @param {number} rotation Rotation. + * @param {ol.Size} size Size. + * @param {ol.Extent=} opt_extent Destination extent. + * @return {ol.Extent} Extent. + * @todo stability experimental + */ +ol.extent.getForView2DAndSize = + function(center, resolution, rotation, size, opt_extent) { + var dx = resolution * size[0] / 2; + var dy = resolution * size[1] / 2; + var cosRotation = Math.cos(rotation); + var sinRotation = Math.sin(rotation); + /** @type {Array.} */ + var xs = [-dx, -dx, dx, dx]; + /** @type {Array.} */ + var ys = [-dy, dy, -dy, dy]; + var i, x, y; + for (i = 0; i < 4; ++i) { + x = xs[i]; + y = ys[i]; + xs[i] = center[0] + x * cosRotation - y * sinRotation; + ys[i] = center[1] + x * sinRotation + y * cosRotation; + } + return ol.extent.boundingExtentXYs_(xs, ys, opt_extent); +}; + + +/** + * @param {ol.Extent} extent Extent. + * @return {number} Height. + * @todo stability experimental + */ +ol.extent.getHeight = function(extent) { + return extent[3] - extent[1]; +}; + + +/** + * @param {ol.Extent} extent1 Extent 1. + * @param {ol.Extent} extent2 Extent 2. + * @return {number} Intersection area. + */ +ol.extent.getIntersectionArea = function(extent1, extent2) { + var minX = Math.max(extent1[0], extent2[0]); + var minY = Math.max(extent1[1], extent2[1]); + var maxX = Math.min(extent1[2], extent2[2]); + var maxY = Math.min(extent1[3], extent2[3]); + return Math.max(0, maxX - minX) * Math.max(0, maxY - minY); +}; + + +/** + * @param {ol.Extent} extent Extent. + * @return {number} Margin. + */ +ol.extent.getMargin = function(extent) { + return ol.extent.getWidth(extent) + ol.extent.getHeight(extent); +}; + + +/** + * @param {ol.Extent} extent Extent. + * @return {ol.Size} Size. + * @todo stability experimental + */ +ol.extent.getSize = function(extent) { + return [extent[2] - extent[0], extent[3] - extent[1]]; +}; + + +/** + * @param {ol.Extent} extent Extent. + * @return {ol.Coordinate} Top left coordinate. + * @todo stability experimental + */ +ol.extent.getTopLeft = function(extent) { + return [extent[0], extent[3]]; +}; + + +/** + * @param {ol.Extent} extent Extent. + * @return {ol.Coordinate} Top right coordinate. + * @todo stability experimental + */ +ol.extent.getTopRight = function(extent) { + return [extent[2], extent[3]]; +}; + + +/** + * @param {ol.Extent} extent Extent. + * @return {number} Width. + * @todo stability experimental + */ +ol.extent.getWidth = function(extent) { + return extent[2] - extent[0]; +}; + + +/** + * @param {ol.Extent} extent1 Extent 1. + * @param {ol.Extent} extent2 Extent. + * @return {boolean} Intersects. + * @todo stability experimental + */ +ol.extent.intersects = function(extent1, extent2) { + return extent1[0] <= extent2[2] && + extent1[2] >= extent2[0] && + extent1[1] <= extent2[3] && + extent1[3] >= extent2[1]; +}; + + +/** + * @param {ol.Extent} extent Extent. + * @return {boolean} Is empty. + * @todo stability experimental + */ +ol.extent.isEmpty = function(extent) { + return extent[2] < extent[0] || extent[3] < extent[1]; +}; + + +/** + * @param {ol.Extent} extent Extent. + * @param {ol.Coordinate} coordinate Coordinate. + * @return {ol.Coordinate} Coordinate. + * @todo stability experimental + */ +ol.extent.normalize = function(extent, coordinate) { + return [ + (coordinate[0] - extent[0]) / (extent[2] - extent[0]), + (coordinate[1] - extent[1]) / (extent[3] - extent[1]) + ]; +}; + + +/** + * @param {ol.Extent} extent Extent. + * @param {ol.Extent=} opt_extent Extent. + * @return {ol.Extent} Extent. + */ +ol.extent.returnOrUpdate = function(extent, opt_extent) { + if (goog.isDef(opt_extent)) { + opt_extent[0] = extent[0]; + opt_extent[1] = extent[1]; + opt_extent[2] = extent[2]; + opt_extent[3] = extent[3]; + return opt_extent; + } else { + return extent; + } +}; + + +/** + * @param {ol.Extent} extent Extent. + * @param {number} value Value. + * @todo stability experimental + */ +ol.extent.scaleFromCenter = function(extent, value) { + var deltaX = ((extent[2] - extent[0]) / 2) * (value - 1); + var deltaY = ((extent[3] - extent[1]) / 2) * (value - 1); + extent[0] -= deltaX; + extent[2] += deltaX; + extent[1] -= deltaY; + extent[3] += deltaY; +}; + + +/** + * Determine if the segment between two coordinates intersects (crosses, + * touches, or is contained by) the provided extent. + * @param {ol.Extent} extent The extent. + * @param {ol.Coordinate} start Segment start coordinate. + * @param {ol.Coordinate} end Segment end coordinate. + * @return {boolean} The segment intersects the extent. + */ +ol.extent.segmentIntersects = function(extent, start, end) { + var intersects = false; + var startRel = ol.extent.coordinateRelationship(extent, start); + var endRel = ol.extent.coordinateRelationship(extent, end); + if (startRel === ol.extent.Relationship.INTERSECTING || + endRel === ol.extent.Relationship.INTERSECTING) { + intersects = true; + } else { + var minX = extent[0]; + var minY = extent[1]; + var maxX = extent[2]; + var maxY = extent[3]; + var startX = start[0]; + var startY = start[1]; + var endX = end[0]; + var endY = end[1]; + var slope = (endY - startY) / (endX - startX); + var x, y; + if (!!(endRel & ol.extent.Relationship.ABOVE) && + !(startRel & ol.extent.Relationship.ABOVE)) { + // potentially intersects top + x = endX - ((endY - maxY) / slope); + intersects = x >= minX && x <= maxX; + } else if (!!(endRel & ol.extent.Relationship.RIGHT) && + !(startRel & ol.extent.Relationship.RIGHT)) { + // potentially intersects right + y = endY - ((endX - maxX) * slope); + intersects = y >= minY && y <= maxY; + } else if (!!(endRel & ol.extent.Relationship.BELOW) && + !(startRel & ol.extent.Relationship.BELOW)) { + // potentially intersects bottom + x = endX - ((endY - minY) / slope); + intersects = x >= minX && x <= maxX; + } else if (!!(endRel & ol.extent.Relationship.LEFT) && + !(startRel & ol.extent.Relationship.LEFT)) { + // potentially intersects left + y = endY - ((endX - minX) * slope); + intersects = y >= minY && y <= maxY; + } + + } + return intersects; +}; + + +/** + * @param {ol.Extent} extent1 Extent 1. + * @param {ol.Extent} extent2 Extent 2. + * @return {boolean} Touches. + * @todo stability experimental + */ +ol.extent.touches = function(extent1, extent2) { + var intersects = ol.extent.intersects(extent1, extent2); + return intersects && + (extent1[0] == extent2[2] || extent1[2] == extent2[0] || + extent1[1] == extent2[3] || extent1[3] == extent2[1]); +}; + + +/** + * @param {ol.Extent} extent Extent. + * @param {ol.TransformFunction} transformFn Transform function. + * @param {ol.Extent=} opt_extent Destination extent. + * @return {ol.Extent} Extent. + * @todo stability experimental + */ +ol.extent.transform = function(extent, transformFn, opt_extent) { + var coordinates = [ + extent[0], extent[1], + extent[0], extent[3], + extent[2], extent[1], + extent[2], extent[3] + ]; + transformFn(coordinates, coordinates, 2); + var xs = [coordinates[0], coordinates[2], coordinates[4], coordinates[6]]; + var ys = [coordinates[1], coordinates[3], coordinates[5], coordinates[7]]; + return ol.extent.boundingExtentXYs_(xs, ys, opt_extent); +}; + + +/** + * Apply a 2d transform to an extent. + * @param {ol.Extent} extent Input extent. + * @param {goog.vec.Mat4.Number} transform The transform matrix. + * @param {ol.Extent=} opt_extent Optional extent for return values. + * @return {ol.Extent} The transformed extent. + */ +ol.extent.transform2D = function(extent, transform, opt_extent) { + var dest = goog.isDef(opt_extent) ? opt_extent : []; + var m00 = goog.vec.Mat4.getElement(transform, 0, 0); + var m10 = goog.vec.Mat4.getElement(transform, 1, 0); + var m01 = goog.vec.Mat4.getElement(transform, 0, 1); + var m11 = goog.vec.Mat4.getElement(transform, 1, 1); + var m03 = goog.vec.Mat4.getElement(transform, 0, 3); + var m13 = goog.vec.Mat4.getElement(transform, 1, 3); + var xi = [0, 2, 0, 2]; + var yi = [1, 1, 3, 3]; + var xs = []; + var ys = []; + var i, x, y; + for (i = 0; i < 4; ++i) { + x = extent[xi[i]]; + y = extent[yi[i]]; + xs[i] = m00 * x + m01 * y + m03; + ys[i] = m10 * x + m11 * y + m13; + } + dest[0] = Math.min.apply(null, xs); + dest[1] = Math.min.apply(null, ys); + dest[2] = Math.max.apply(null, xs); + dest[3] = Math.max.apply(null, ys); + return dest; +}; diff --git a/float-no-zero/ol/ol/feature.exports b/float-no-zero/ol/ol/feature.exports new file mode 100644 index 0000000000..6c1f200ea6 --- /dev/null +++ b/float-no-zero/ol/ol/feature.exports @@ -0,0 +1,8 @@ +@exportSymbol ol.Feature +@exportProperty ol.Feature.prototype.getGeometryName +@exportProperty ol.Feature.prototype.getId +@exportProperty ol.Feature.prototype.getStyle +@exportProperty ol.Feature.prototype.getStyleFunction +@exportProperty ol.Feature.prototype.setGeometryName +@exportProperty ol.Feature.prototype.setId +@exportProperty ol.Feature.prototype.setStyle diff --git a/float-no-zero/ol/ol/feature.js b/float-no-zero/ol/ol/feature.js new file mode 100644 index 0000000000..642b602d80 --- /dev/null +++ b/float-no-zero/ol/ol/feature.js @@ -0,0 +1,340 @@ +goog.provide('ol.Feature'); +goog.provide('ol.feature'); + +goog.require('goog.asserts'); +goog.require('goog.events'); +goog.require('goog.events.EventType'); +goog.require('goog.functions'); +goog.require('ol.Object'); +goog.require('ol.geom.Geometry'); +goog.require('ol.style.Circle'); +goog.require('ol.style.Fill'); +goog.require('ol.style.Stroke'); +goog.require('ol.style.Style'); + + + +/** + * @constructor + * @extends {ol.Object} + * @param {ol.geom.Geometry|Object.=} opt_geometryOrValues + * Values or geometry. + * @todo stability experimental + */ +ol.Feature = function(opt_geometryOrValues) { + + goog.base(this); + + /** + * @private + * @type {number|string|undefined} + */ + this.id_ = undefined; + + /** + * @type {string} + * @private + */ + this.geometryName_ = 'geometry'; + + /** + * User provided style. + * @private + * @type {ol.style.Style|Array.| + * ol.feature.FeatureStyleFunction} + */ + this.style_ = null; + + /** + * @private + * @type {ol.feature.FeatureStyleFunction|undefined} + */ + this.styleFunction_ = undefined; + + /** + * @private + * @type {goog.events.Key} + */ + this.geometryChangeKey_ = null; + + goog.events.listen( + this, ol.Object.getChangeEventType(this.geometryName_), + this.handleGeometryChanged_, false, this); + + if (goog.isDefAndNotNull(opt_geometryOrValues)) { + if (opt_geometryOrValues instanceof ol.geom.Geometry) { + var geometry = /** @type {ol.geom.Geometry} */ (opt_geometryOrValues); + this.setGeometry(geometry); + } else { + goog.asserts.assert(goog.isObject(opt_geometryOrValues)); + var values = /** @type {Object.} */ (opt_geometryOrValues); + this.setValues(values); + } + } else { + this.setGeometry(null); + } +}; +goog.inherits(ol.Feature, ol.Object); + + +/** + * @return {ol.geom.Geometry|undefined} Geometry. + * @todo stability experimental + */ +ol.Feature.prototype.getGeometry = function() { + return /** @type {ol.geom.Geometry|undefined} */ ( + this.get(this.geometryName_)); +}; +goog.exportProperty( + ol.Feature.prototype, + 'getGeometry', + ol.Feature.prototype.getGeometry); + + +/** + * @return {number|string|undefined} Id. + * @todo stability experimental + */ +ol.Feature.prototype.getId = function() { + return this.id_; +}; + + +/** + * @return {string} Geometry property name. + * @todo stability experimental + */ +ol.Feature.prototype.getGeometryName = function() { + return this.geometryName_; +}; + + +/** + * @return {ol.style.Style|Array.| + * ol.feature.FeatureStyleFunction} User provided style. + * @todo stability experimental + */ +ol.Feature.prototype.getStyle = function() { + return this.style_; +}; + + +/** + * @return {ol.feature.FeatureStyleFunction|undefined} Style function. + * @todo stability experimental + */ +ol.Feature.prototype.getStyleFunction = function() { + return this.styleFunction_; +}; + + +/** + * @private + */ +ol.Feature.prototype.handleGeometryChange_ = function() { + this.dispatchChangeEvent(); +}; + + +/** + * @private + */ +ol.Feature.prototype.handleGeometryChanged_ = function() { + if (!goog.isNull(this.geometryChangeKey_)) { + goog.events.unlistenByKey(this.geometryChangeKey_); + this.geometryChangeKey_ = null; + } + var geometry = this.getGeometry(); + if (goog.isDefAndNotNull(geometry)) { + this.geometryChangeKey_ = goog.events.listen(geometry, + goog.events.EventType.CHANGE, this.handleGeometryChange_, false, this); + } + this.dispatchChangeEvent(); +}; + + +/** + * @param {ol.geom.Geometry|undefined} geometry Geometry. + * @todo stability experimental + */ +ol.Feature.prototype.setGeometry = function(geometry) { + this.set(this.geometryName_, geometry); +}; +goog.exportProperty( + ol.Feature.prototype, + 'setGeometry', + ol.Feature.prototype.setGeometry); + + +/** + * @param {ol.style.Style|Array.| + * ol.feature.FeatureStyleFunction} style Feature style. + * @todo stability experimental + */ +ol.Feature.prototype.setStyle = function(style) { + this.style_ = style; + this.styleFunction_ = ol.feature.createFeatureStyleFunction(style); + this.dispatchChangeEvent(); +}; + + +/** + * @param {number|string|undefined} id Id. + * @todo stability experimental + */ +ol.Feature.prototype.setId = function(id) { + this.id_ = id; +}; + + +/** + * @param {string} name Geometry property name. + * @todo stability experimental + */ +ol.Feature.prototype.setGeometryName = function(name) { + goog.events.unlisten( + this, ol.Object.getChangeEventType(this.geometryName_), + this.handleGeometryChanged_, false, this); + this.geometryName_ = name; + goog.events.listen( + this, ol.Object.getChangeEventType(this.geometryName_), + this.handleGeometryChanged_, false, this); + this.handleGeometryChanged_(); +}; + + +/** + * A function that takes a `{number}` representing the view's resolution. It + * returns an Array of {@link ol.style.Style}. This way individual features + * can be styled. The this keyword inside the function references the + * {@link ol.Feature} to be styled. + * + * @typedef {function(this: ol.Feature, number): Array.} + * @todo stability experimental + */ +ol.feature.FeatureStyleFunction; + + +/** + * Default style function for features. + * @param {number} resolution Resolution. + * @return {Array.} Style. + * @this {ol.Feature} + * @todo stability experimental + */ +ol.feature.defaultFeatureStyleFunction = (function() { + var fill = new ol.style.Fill({ + color: 'rgba(255,255,255,0.4)' + }); + var stroke = new ol.style.Stroke({ + color: '#3399CC', + width: 1.25 + }); + var styles = [ + new ol.style.Style({ + image: new ol.style.Circle({ + fill: fill, + stroke: stroke, + radius: 5 + }), + fill: fill, + stroke: stroke + }) + ]; + return function(resolution) { + return styles; + }; +})(); + + +/** + * A function that takes an {@link ol.Feature} and a `{number}` representing + * the view's resolution. The function should return an array of + * {@link ol.style.Style}. This way e.g. a vector layer can be styled. + * + * @typedef {function(ol.Feature, number): Array.} + * @todo stability experimental + */ +ol.feature.StyleFunction; + + +/** + * @param {ol.Feature} feature Feature. + * @param {number} resolution Resolution. + * @return {Array.} Style. + * @todo stability experimental + */ +ol.feature.defaultStyleFunction = function(feature, resolution) { + var featureStyleFunction = feature.getStyleFunction(); + if (!goog.isDef(featureStyleFunction)) { + featureStyleFunction = ol.feature.defaultFeatureStyleFunction; + } + return featureStyleFunction.call(feature, resolution); +}; + + +/** + * Convert the provided object into a feature style function. Functions passed + * through unchanged. Arrays of ol.style.Style or single style objects wrapped + * in a new feature style function. + * @param {ol.feature.FeatureStyleFunction|Array.| + * ol.style.Style} obj A feature style function, a single style, or an array + * of styles. + * @return {ol.feature.FeatureStyleFunction} A style function. + */ +ol.feature.createFeatureStyleFunction = function(obj) { + /** + * @type {ol.feature.FeatureStyleFunction} + */ + var styleFunction; + + if (goog.isFunction(obj)) { + styleFunction = /** @type {ol.feature.FeatureStyleFunction} */ (obj); + } else { + /** + * @type {Array.} + */ + var styles; + if (goog.isArray(obj)) { + styles = obj; + } else { + goog.asserts.assertInstanceof(obj, ol.style.Style); + styles = [obj]; + } + styleFunction = goog.functions.constant(styles); + } + return styleFunction; +}; + + +/** + * Convert the provided object into a style function. Functions passed through + * unchanged. Arrays of ol.style.Style or single style objects wrapped in a + * new style function. + * @param {ol.feature.StyleFunction|Array.|ol.style.Style} obj + * A style function, a single style, or an array of styles. + * @return {ol.feature.StyleFunction} A style function. + */ +ol.feature.createStyleFunction = function(obj) { + /** + * @type {ol.feature.StyleFunction} + */ + var styleFunction; + + if (goog.isFunction(obj)) { + styleFunction = /** @type {ol.feature.StyleFunction} */ (obj); + } else { + /** + * @type {Array.} + */ + var styles; + if (goog.isArray(obj)) { + styles = obj; + } else { + goog.asserts.assertInstanceof(obj, ol.style.Style); + styles = [obj]; + } + styleFunction = goog.functions.constant(styles); + } + return styleFunction; +}; diff --git a/float-no-zero/ol/ol/feature.jsdoc b/float-no-zero/ol/ol/feature.jsdoc new file mode 100644 index 0000000000..7eeb59f500 --- /dev/null +++ b/float-no-zero/ol/ol/feature.jsdoc @@ -0,0 +1,3 @@ +/** + * @namespace ol.feature + */ diff --git a/float-no-zero/ol/ol/featureoverlay.exports b/float-no-zero/ol/ol/featureoverlay.exports new file mode 100644 index 0000000000..b471a281f6 --- /dev/null +++ b/float-no-zero/ol/ol/featureoverlay.exports @@ -0,0 +1,9 @@ +@exportSymbol ol.FeatureOverlay +@exportProperty ol.FeatureOverlay.prototype.addFeature +@exportProperty ol.FeatureOverlay.prototype.getFeatures +@exportProperty ol.FeatureOverlay.prototype.getStyle +@exportProperty ol.FeatureOverlay.prototype.getStyleFunction +@exportProperty ol.FeatureOverlay.prototype.removeFeature +@exportProperty ol.FeatureOverlay.prototype.setFeatures +@exportProperty ol.FeatureOverlay.prototype.setMap +@exportProperty ol.FeatureOverlay.prototype.setStyle diff --git a/float-no-zero/ol/ol/featureoverlay.js b/float-no-zero/ol/ol/featureoverlay.js new file mode 100644 index 0000000000..84df05262a --- /dev/null +++ b/float-no-zero/ol/ol/featureoverlay.js @@ -0,0 +1,275 @@ +goog.provide('ol.FeatureOverlay'); + +goog.require('goog.array'); +goog.require('goog.asserts'); +goog.require('goog.events'); +goog.require('goog.events.EventType'); +goog.require('goog.object'); +goog.require('ol.Collection'); +goog.require('ol.CollectionEventType'); +goog.require('ol.Feature'); +goog.require('ol.feature'); +goog.require('ol.render.EventType'); + + + +/** + * @constructor + * @param {olx.FeatureOverlayOptions=} opt_options Options. + * @todo stability experimental + */ +ol.FeatureOverlay = function(opt_options) { + + var options = goog.isDef(opt_options) ? opt_options : {}; + + /** + * @private + * @type {ol.Collection} + */ + this.features_ = null; + + /** + * @private + * @type {Array.} + */ + this.featuresListenerKeys_ = null; + + /** + * @private + * @type {Object.} + */ + this.featureChangeListenerKeys_ = null; + + /** + * @private + * @type {ol.Map} + */ + this.map_ = null; + + /** + * @private + * @type {goog.events.Key} + */ + this.postComposeListenerKey_ = null; + + /** + * @private + * @type {ol.style.Style|Array.|ol.feature.StyleFunction} + */ + this.style_ = null; + + /** + * @private + * @type {ol.feature.StyleFunction|undefined} + */ + this.styleFunction_ = goog.isDef(options.style) ? + ol.feature.createStyleFunction(options.style) : undefined; + + if (goog.isDef(options.features)) { + if (goog.isArray(options.features)) { + this.setFeatures(new ol.Collection(goog.array.clone(options.features))); + } else { + goog.asserts.assertInstanceof(options.features, ol.Collection); + this.setFeatures(options.features); + } + } else { + this.setFeatures(new ol.Collection()); + } + + if (goog.isDef(options.map)) { + this.setMap(options.map); + } + +}; + + +/** + * @param {ol.Feature} feature Feature. + * @todo stability experimental + */ +ol.FeatureOverlay.prototype.addFeature = function(feature) { + this.features_.push(feature); +}; + + +/** + * @return {ol.Collection} Features collection. + * @todo stability experimental + */ +ol.FeatureOverlay.prototype.getFeatures = function() { + return this.features_; +}; + + +/** + * @private + */ +ol.FeatureOverlay.prototype.handleFeatureChange_ = function() { + this.render_(); +}; + + +/** + * @private + * @param {ol.CollectionEvent} collectionEvent Collection event. + */ +ol.FeatureOverlay.prototype.handleFeaturesAdd_ = + function(collectionEvent) { + goog.asserts.assert(!goog.isNull(this.featureChangeListenerKeys_)); + var feature = /** @type {ol.Feature} */ (collectionEvent.element); + this.featureChangeListenerKeys_[goog.getUid(feature).toString()] = + goog.events.listen(feature, goog.events.EventType.CHANGE, + this.handleFeatureChange_, false, this); + this.render_(); +}; + + +/** + * @private + * @param {ol.CollectionEvent} collectionEvent Collection event. + */ +ol.FeatureOverlay.prototype.handleFeaturesRemove_ = + function(collectionEvent) { + goog.asserts.assert(!goog.isNull(this.featureChangeListenerKeys_)); + var feature = /** @type {ol.Feature} */ (collectionEvent.element); + var key = goog.getUid(feature).toString(); + goog.events.unlistenByKey(this.featureChangeListenerKeys_[key]); + delete this.featureChangeListenerKeys_[key]; + this.render_(); +}; + + +/** + * @param {ol.render.Event} event Event. + * @private + */ +ol.FeatureOverlay.prototype.handleMapPostCompose_ = function(event) { + if (goog.isNull(this.features_) || !goog.isDef(this.styleFunction_)) { + return; + } + var resolution = event.frameState.view2DState.resolution; + var vectorContext = event.vectorContext; + var i, ii, feature, styles; + this.features_.forEach(function(feature) { + styles = this.styleFunction_(feature, resolution); + if (!goog.isDefAndNotNull(styles)) { + return; + } + ii = styles.length; + for (i = 0; i < ii; ++i) { + vectorContext.drawFeature(feature, styles[i]); + } + }, this); +}; + + +/** + * @param {ol.Feature} feature Feature. + * @todo stability experimental + */ +ol.FeatureOverlay.prototype.removeFeature = function(feature) { + this.features_.remove(feature); +}; + + +/** + * @private + */ +ol.FeatureOverlay.prototype.render_ = function() { + if (!goog.isNull(this.map_)) { + this.map_.render(); + } +}; + + +/** + * @param {ol.Collection} features Features collection. + * @todo stability experimental + */ +ol.FeatureOverlay.prototype.setFeatures = function(features) { + if (!goog.isNull(this.featuresListenerKeys_)) { + goog.array.forEach(this.featuresListenerKeys_, goog.events.unlistenByKey); + this.featuresListenerKeys_ = null; + } + if (!goog.isNull(this.featureChangeListenerKeys_)) { + goog.array.forEach( + goog.object.getValues(this.featureChangeListenerKeys_), + goog.events.unlistenByKey); + this.featureChangeListenerKeys_ = null; + } + this.features_ = features; + if (!goog.isNull(features)) { + this.featuresListenerKeys_ = [ + goog.events.listen(features, ol.CollectionEventType.ADD, + this.handleFeaturesAdd_, false, this), + goog.events.listen(features, ol.CollectionEventType.REMOVE, + this.handleFeaturesRemove_, false, this) + ]; + this.featureChangeListenerKeys_ = {}; + var featuresArray = features.getArray(); + var i, ii = featuresArray.length; + var feature; + for (i = 0; i < ii; ++i) { + feature = featuresArray[i]; + this.featureChangeListenerKeys_[goog.getUid(feature).toString()] = + goog.events.listen(feature, goog.events.EventType.CHANGE, + this.handleFeatureChange_, false, this); + } + } + this.render_(); +}; + + +/** + * @param {ol.Map} map Map. + * @todo stability experimental + */ +ol.FeatureOverlay.prototype.setMap = function(map) { + if (!goog.isNull(this.postComposeListenerKey_)) { + goog.events.unlistenByKey(this.postComposeListenerKey_); + this.postComposeListenerKey_ = null; + } + this.render_(); + this.map_ = map; + if (!goog.isNull(map)) { + this.postComposeListenerKey_ = goog.events.listen( + map, ol.render.EventType.POSTCOMPOSE, this.handleMapPostCompose_, false, + this); + map.render(); + } +}; + + +/** + * Set the style for features. This can be a single style object, an array + * of styles, or a function that takes a feature and resolution and returns + * an array of styles. + * @param {ol.style.Style|Array.|ol.feature.StyleFunction} style + * Overlay style. + * @todo stability experimental + */ +ol.FeatureOverlay.prototype.setStyle = function(style) { + this.style_ = style; + this.styleFunction_ = ol.feature.createStyleFunction(style); + this.render_(); +}; + + +/** + * Get the style for features. This returns whatever was passed to the `style` + * option at construction or to the `setStyle` method. + * @return {ol.style.Style|Array.|ol.feature.StyleFunction} + * Overlay style. + */ +ol.FeatureOverlay.prototype.getStyle = function() { + return this.style_; +}; + + +/** + * Get the style function. + * @return {ol.feature.StyleFunction|undefined} Style function. + */ +ol.FeatureOverlay.prototype.getStyleFunction = function() { + return this.styleFunction_; +}; diff --git a/float-no-zero/ol/ol/format/binaryfeatureformat.js b/float-no-zero/ol/ol/format/binaryfeatureformat.js new file mode 100644 index 0000000000..a3f6f5cdc9 --- /dev/null +++ b/float-no-zero/ol/ol/format/binaryfeatureformat.js @@ -0,0 +1,111 @@ +goog.provide('ol.format.BinaryFeature'); + +goog.require('goog.asserts'); +goog.require('ol.BrowserFeature'); +goog.require('ol.binary.Buffer'); +goog.require('ol.format.Feature'); +goog.require('ol.format.FormatType'); +goog.require('ol.proj'); + + + +/** + * @constructor + * @extends {ol.format.Feature} + */ +ol.format.BinaryFeature = function() { + goog.base(this); +}; +goog.inherits(ol.format.BinaryFeature, ol.format.Feature); + + +/** + * @param {ArrayBuffer|Document|Node|Object|string} source Source. + * @private + * @return {ol.binary.Buffer} Buffer. + */ +ol.format.BinaryFeature.getBuffer_ = function(source) { + if (ol.BrowserFeature.HAS_ARRAY_BUFFER && source instanceof ArrayBuffer) { + return new ol.binary.Buffer(source); + } else if (goog.isString(source)) { + return new ol.binary.Buffer(source); + } else { + goog.asserts.fail(); + return null; + } +}; + + +/** + * @inheritDoc + */ +ol.format.BinaryFeature.prototype.getType = function() { + return ol.format.FormatType.BINARY; +}; + + +/** + * @inheritDoc + */ +ol.format.BinaryFeature.prototype.readFeature = function(source) { + return this.readFeatureFromBuffer(ol.format.BinaryFeature.getBuffer_(source)); +}; + + +/** + * @inheritDoc + */ +ol.format.BinaryFeature.prototype.readFeatures = function(source) { + return this.readFeaturesFromBuffer( + ol.format.BinaryFeature.getBuffer_(source)); +}; + + +/** + * @param {ol.binary.Buffer} buffer Buffer. + * @protected + * @return {ol.Feature} Feature. + */ +ol.format.BinaryFeature.prototype.readFeatureFromBuffer = goog.abstractMethod; + + +/** + * @param {ol.binary.Buffer} buffer Buffer. + * @protected + * @return {Array.} Feature. + */ +ol.format.BinaryFeature.prototype.readFeaturesFromBuffer = goog.abstractMethod; + + +/** + * @inheritDoc + */ +ol.format.BinaryFeature.prototype.readGeometry = function(source) { + return this.readGeometryFromBuffer( + ol.format.BinaryFeature.getBuffer_(source)); +}; + + +/** + * @param {ol.binary.Buffer} buffer Buffer. + * @protected + * @return {ol.geom.Geometry} Geometry. + */ +ol.format.BinaryFeature.prototype.readGeometryFromBuffer = goog.abstractMethod; + + +/** + * @inheritDoc + */ +ol.format.BinaryFeature.prototype.readProjection = function(source) { + return this.readProjectionFromBuffer( + ol.format.BinaryFeature.getBuffer_(source)); +}; + + +/** + * @param {ol.binary.Buffer} buffer Buffer. + * @return {ol.proj.Projection} Projection. + */ +ol.format.BinaryFeature.prototype.readProjectionFromBuffer = + goog.abstractMethod; diff --git a/float-no-zero/ol/ol/format/featureformat.js b/float-no-zero/ol/ol/format/featureformat.js new file mode 100644 index 0000000000..62d7b4b4ad --- /dev/null +++ b/float-no-zero/ol/ol/format/featureformat.js @@ -0,0 +1,72 @@ +goog.provide('ol.format.Feature'); + +goog.require('goog.functions'); + + + +/** + * @constructor + */ +ol.format.Feature = function() { +}; + + +/** + * @return {Array.} Extensions. + */ +ol.format.Feature.prototype.getExtensions = goog.abstractMethod; + + +/** + * @return {ol.format.FormatType} Format. + */ +ol.format.Feature.prototype.getType = goog.abstractMethod; + + +/** + * @param {ArrayBuffer|Document|Node|Object|string} source Source. + * @return {ol.Feature} Feature. + */ +ol.format.Feature.prototype.readFeature = goog.abstractMethod; + + +/** + * @param {ArrayBuffer|Document|Node|Object|string} source Source. + * @return {Array.} Features. + */ +ol.format.Feature.prototype.readFeatures = goog.abstractMethod; + + +/** + * @param {ArrayBuffer|Document|Node|Object|string} source Source. + * @return {ol.geom.Geometry} Geometry. + */ +ol.format.Feature.prototype.readGeometry = goog.abstractMethod; + + +/** + * @param {ArrayBuffer|Document|Node|Object|string} source Source. + * @return {ol.proj.Projection} Projection. + */ +ol.format.Feature.prototype.readProjection = goog.abstractMethod; + + +/** + * @param {ol.Feature} feature Feature. + * @return {ArrayBuffer|Node|Object|string} Result. + */ +ol.format.Feature.prototype.writeFeature = goog.abstractMethod; + + +/** + * @param {Array.} features Features. + * @return {ArrayBuffer|Node|Object|string} Result. + */ +ol.format.Feature.prototype.writeFeatures = goog.abstractMethod; + + +/** + * @param {ol.geom.Geometry} geometry Geometry. + * @return {ArrayBuffer|Node|Object|string} Node. + */ +ol.format.Feature.prototype.writeGeometry = goog.abstractMethod; diff --git a/float-no-zero/ol/ol/format/format.js b/float-no-zero/ol/ol/format/format.js new file mode 100644 index 0000000000..bdedb916d1 --- /dev/null +++ b/float-no-zero/ol/ol/format/format.js @@ -0,0 +1,12 @@ +goog.provide('ol.format.FormatType'); + + +/** + * @enum {string} + */ +ol.format.FormatType = { + BINARY: 'binary', + JSON: 'json', + TEXT: 'text', + XML: 'xml' +}; diff --git a/float-no-zero/ol/ol/format/geojsonformat.exports b/float-no-zero/ol/ol/format/geojsonformat.exports new file mode 100644 index 0000000000..620f1bfad7 --- /dev/null +++ b/float-no-zero/ol/ol/format/geojsonformat.exports @@ -0,0 +1,8 @@ +@exportSymbol ol.format.GeoJSON +@exportProperty ol.format.GeoJSON.prototype.readFeature +@exportProperty ol.format.GeoJSON.prototype.readFeatures +@exportProperty ol.format.GeoJSON.prototype.readGeometry +@exportProperty ol.format.GeoJSON.prototype.readProjection +@exportProperty ol.format.GeoJSON.prototype.writeFeature +@exportProperty ol.format.GeoJSON.prototype.writeFeatures +@exportProperty ol.format.GeoJSON.prototype.writeGeometry diff --git a/float-no-zero/ol/ol/format/geojsonformat.js b/float-no-zero/ol/ol/format/geojsonformat.js new file mode 100644 index 0000000000..903affd392 --- /dev/null +++ b/float-no-zero/ol/ol/format/geojsonformat.js @@ -0,0 +1,438 @@ +// FIXME coordinate order +// FIXME reprojection + +goog.provide('ol.format.GeoJSON'); + +goog.require('goog.array'); +goog.require('goog.asserts'); +goog.require('goog.object'); +goog.require('ol.Feature'); +goog.require('ol.format.JSONFeature'); +goog.require('ol.geom.GeometryCollection'); +goog.require('ol.geom.GeometryType'); +goog.require('ol.geom.LineString'); +goog.require('ol.geom.MultiLineString'); +goog.require('ol.geom.MultiPoint'); +goog.require('ol.geom.MultiPolygon'); +goog.require('ol.geom.Point'); +goog.require('ol.geom.Polygon'); +goog.require('ol.proj'); + + + +/** + * @constructor + * @extends {ol.format.JSONFeature} + * @param {olx.format.GeoJSONOptions=} opt_options Options. + * @todo stability experimental + */ +ol.format.GeoJSON = function(opt_options) { + + var options = goog.isDef(opt_options) ? opt_options : {}; + + goog.base(this); + + /** + * @private + * @type {ol.proj.Projection} + */ + this.defaultProjection_ = ol.proj.get(options.defaultProjection ? + options.defaultProjection : 'EPSG:4326'); + +}; +goog.inherits(ol.format.GeoJSON, ol.format.JSONFeature); + + +/** + * @const + * @type {Array.} + * @private + */ +ol.format.GeoJSON.EXTENSIONS_ = ['.geojson']; + + +/** + * @param {GeoJSONObject} object Object. + * @private + * @return {ol.geom.Geometry} Geometry. + */ +ol.format.GeoJSON.readGeometry_ = function(object) { + if (goog.isNull(object)) { + return null; + } + var geometryReader = ol.format.GeoJSON.GEOMETRY_READERS_[object.type]; + goog.asserts.assert(goog.isDef(geometryReader)); + return geometryReader(object); +}; + + +/** + * @param {GeoJSONGeometryCollection} object Object. + * @private + * @return {ol.geom.GeometryCollection} Geometry collection. + */ +ol.format.GeoJSON.readGeometryCollectionGeometry_ = function(object) { + goog.asserts.assert(object.type == 'GeometryCollection'); + var geometries = goog.array.map( + object.geometries, ol.format.GeoJSON.readGeometry_); + return new ol.geom.GeometryCollection(geometries); +}; + + +/** + * @param {GeoJSONGeometry} object Object. + * @private + * @return {ol.geom.Point} Point. + */ +ol.format.GeoJSON.readPointGeometry_ = function(object) { + goog.asserts.assert(object.type == 'Point'); + return new ol.geom.Point(object.coordinates); +}; + + +/** + * @param {GeoJSONGeometry} object Object. + * @private + * @return {ol.geom.LineString} LineString. + */ +ol.format.GeoJSON.readLineStringGeometry_ = function(object) { + goog.asserts.assert(object.type == 'LineString'); + return new ol.geom.LineString(object.coordinates); +}; + + +/** + * @param {GeoJSONGeometry} object Object. + * @private + * @return {ol.geom.MultiLineString} MultiLineString. + */ +ol.format.GeoJSON.readMultiLineStringGeometry_ = function(object) { + goog.asserts.assert(object.type == 'MultiLineString'); + return new ol.geom.MultiLineString(object.coordinates); +}; + + +/** + * @param {GeoJSONGeometry} object Object. + * @private + * @return {ol.geom.MultiPoint} MultiPoint. + */ +ol.format.GeoJSON.readMultiPointGeometry_ = function(object) { + goog.asserts.assert(object.type == 'MultiPoint'); + return new ol.geom.MultiPoint(object.coordinates); +}; + + +/** + * @param {GeoJSONGeometry} object Object. + * @private + * @return {ol.geom.MultiPolygon} MultiPolygon. + */ +ol.format.GeoJSON.readMultiPolygonGeometry_ = function(object) { + goog.asserts.assert(object.type == 'MultiPolygon'); + return new ol.geom.MultiPolygon(object.coordinates); +}; + + +/** + * @param {GeoJSONGeometry} object Object. + * @private + * @return {ol.geom.Polygon} Polygon. + */ +ol.format.GeoJSON.readPolygonGeometry_ = function(object) { + goog.asserts.assert(object.type == 'Polygon'); + return new ol.geom.Polygon(object.coordinates); +}; + + +/** + * @param {ol.geom.Geometry} geometry Geometry. + * @private + * @return {GeoJSONObject} GeoJSON geometry. + */ +ol.format.GeoJSON.writeGeometry_ = function(geometry) { + var geometryWriter = ol.format.GeoJSON.GEOMETRY_WRITERS_[geometry.getType()]; + goog.asserts.assert(goog.isDef(geometryWriter)); + return geometryWriter(geometry); +}; + + +/** + * @param {ol.geom.Geometry} geometry Geometry. + * @private + * @return {GeoJSONGeometryCollection} Empty GeoJSON geometry collection. + */ +ol.format.GeoJSON.writeEmptyGeometryCollectionGeometry_ = function(geometry) { + return /** @type {GeoJSONGeometryCollection} */ ({ + 'type': 'GeometryCollection', + 'geometries': [] + }); +}; + + +/** + * @param {ol.geom.Geometry} geometry Geometry. + * @private + * @return {GeoJSONGeometryCollection} GeoJSON geometry collection. + */ +ol.format.GeoJSON.writeGeometryCollectionGeometry_ = function(geometry) { + goog.asserts.assertInstanceof(geometry, ol.geom.GeometryCollection); + var geometries = goog.array.map( + geometry.getGeometriesArray(), ol.format.GeoJSON.writeGeometry_); + return /** @type {GeoJSONGeometryCollection} */ ({ + 'type': 'GeometryCollection', + 'geometries': geometries + }); +}; + + +/** + * @param {ol.geom.Geometry} geometry Geometry. + * @private + * @return {GeoJSONGeometry} GeoJSON geometry. + */ +ol.format.GeoJSON.writeLineStringGeometry_ = function(geometry) { + goog.asserts.assertInstanceof(geometry, ol.geom.LineString); + return /** @type {GeoJSONGeometry} */ ({ + 'type': 'LineString', + 'coordinates': geometry.getCoordinates() + }); +}; + + +/** + * @param {ol.geom.Geometry} geometry Geometry. + * @private + * @return {GeoJSONGeometry} GeoJSON geometry. + */ +ol.format.GeoJSON.writeMultiLineStringGeometry_ = function(geometry) { + goog.asserts.assertInstanceof(geometry, ol.geom.MultiLineString); + goog.asserts.assert( + geometry.getType() == ol.geom.GeometryType.MULTI_LINE_STRING); + return /** @type {GeoJSONGeometry} */ ({ + 'type': 'MultiLineString', + 'coordinates': geometry.getCoordinates() + }); +}; + + +/** + * @param {ol.geom.Geometry} geometry Geometry. + * @private + * @return {GeoJSONGeometry} GeoJSON geometry. + */ +ol.format.GeoJSON.writeMultiPointGeometry_ = function(geometry) { + goog.asserts.assertInstanceof(geometry, ol.geom.MultiPoint); + return /** @type {GeoJSONGeometry} */ ({ + 'type': 'MultiPoint', + 'coordinates': geometry.getCoordinates() + }); +}; + + +/** + * @param {ol.geom.Geometry} geometry Geometry. + * @private + * @return {GeoJSONGeometry} GeoJSON geometry. + */ +ol.format.GeoJSON.writeMultiPolygonGeometry_ = function(geometry) { + goog.asserts.assertInstanceof(geometry, ol.geom.MultiPolygon); + return /** @type {GeoJSONGeometry} */ ({ + 'type': 'MultiPolygon', + 'coordinates': geometry.getCoordinates() + }); +}; + + +/** + * @param {ol.geom.Geometry} geometry Geometry. + * @private + * @return {GeoJSONGeometry} GeoJSON geometry. + */ +ol.format.GeoJSON.writePointGeometry_ = function(geometry) { + goog.asserts.assertInstanceof(geometry, ol.geom.Point); + return /** @type {GeoJSONGeometry} */ ({ + 'type': 'Point', + 'coordinates': geometry.getCoordinates() + }); +}; + + +/** + * @param {ol.geom.Geometry} geometry Geometry. + * @private + * @return {GeoJSONGeometry} GeoJSON geometry. + */ +ol.format.GeoJSON.writePolygonGeometry_ = function(geometry) { + goog.asserts.assertInstanceof(geometry, ol.geom.Polygon); + return /** @type {GeoJSONGeometry} */ ({ + 'type': 'Polygon', + 'coordinates': geometry.getCoordinates() + }); +}; + + +/** + * @const + * @private + * @type {Object.} + */ +ol.format.GeoJSON.GEOMETRY_READERS_ = { + 'Point': ol.format.GeoJSON.readPointGeometry_, + 'LineString': ol.format.GeoJSON.readLineStringGeometry_, + 'Polygon': ol.format.GeoJSON.readPolygonGeometry_, + 'MultiPoint': ol.format.GeoJSON.readMultiPointGeometry_, + 'MultiLineString': ol.format.GeoJSON.readMultiLineStringGeometry_, + 'MultiPolygon': ol.format.GeoJSON.readMultiPolygonGeometry_, + 'GeometryCollection': ol.format.GeoJSON.readGeometryCollectionGeometry_ +}; + + +/** + * @const + * @private + * @type {Object.} + */ +ol.format.GeoJSON.GEOMETRY_WRITERS_ = { + 'Point': ol.format.GeoJSON.writePointGeometry_, + 'LineString': ol.format.GeoJSON.writeLineStringGeometry_, + 'Polygon': ol.format.GeoJSON.writePolygonGeometry_, + 'MultiPoint': ol.format.GeoJSON.writeMultiPointGeometry_, + 'MultiLineString': ol.format.GeoJSON.writeMultiLineStringGeometry_, + 'MultiPolygon': ol.format.GeoJSON.writeMultiPolygonGeometry_, + 'GeometryCollection': ol.format.GeoJSON.writeGeometryCollectionGeometry_, + 'Circle': ol.format.GeoJSON.writeEmptyGeometryCollectionGeometry_ +}; + + +/** + * @inheritDoc + */ +ol.format.GeoJSON.prototype.getExtensions = function() { + return ol.format.GeoJSON.EXTENSIONS_; +}; + + +/** + * @inheritDoc + */ +ol.format.GeoJSON.prototype.readFeatureFromObject = function(object) { + var geoJSONFeature = /** @type {GeoJSONFeature} */ (object); + goog.asserts.assert(geoJSONFeature.type == 'Feature'); + var geometry = ol.format.GeoJSON.readGeometry_(geoJSONFeature.geometry); + var feature = new ol.Feature(geometry); + if (goog.isDef(geoJSONFeature.id)) { + feature.setId(geoJSONFeature.id); + } + if (goog.isDef(geoJSONFeature.properties)) { + feature.setValues(geoJSONFeature.properties); + } + return feature; +}; + + +/** + * @inheritDoc + */ +ol.format.GeoJSON.prototype.readFeaturesFromObject = function(object) { + var geoJSONObject = /** @type {GeoJSONObject} */ (object); + if (geoJSONObject.type == 'Feature') { + return [this.readFeatureFromObject(object)]; + } else if (geoJSONObject.type == 'FeatureCollection') { + var geoJSONFeatureCollection = /** @type {GeoJSONFeatureCollection} */ + (object); + /** @type {Array.} */ + var features = []; + var geoJSONFeatures = geoJSONFeatureCollection.features; + var i, ii; + for (i = 0, ii = geoJSONFeatures.length; i < ii; ++i) { + features.push(this.readFeatureFromObject(geoJSONFeatures[i])); + } + return features; + } else { + goog.asserts.fail(); + return []; + } +}; + + +/** + * @inheritDoc + */ +ol.format.GeoJSON.prototype.readGeometryFromObject = function(object) { + return ol.format.GeoJSON.readGeometry_( + /** @type {GeoJSONGeometry} */ (object)); +}; + + +/** + * @inheritDoc + */ +ol.format.GeoJSON.prototype.readProjection = function(object) { + var geoJSONObject = /** @type {GeoJSONObject} */ (object); + var crs = geoJSONObject.crs; + if (goog.isDefAndNotNull(crs)) { + if (crs.type == 'name') { + return ol.proj.get(crs.properties.name); + } else if (crs.type == 'EPSG') { + // 'EPSG' is not part of the GeoJSON specification, but is generated by + // GeoServer. + // TODO: remove this when http://jira.codehaus.org/browse/GEOS-5996 + // is fixed and widely deployed. + return ol.proj.get('EPSG:' + crs.properties.code); + } else { + goog.asserts.fail(); + return null; + } + } else { + return this.defaultProjection_; + } +}; + + +/** + * @inheritDoc + */ +ol.format.GeoJSON.prototype.writeFeatureObject = function(feature) { + var object = { + 'type': 'Feature' + }; + var id = feature.getId(); + if (goog.isDefAndNotNull(id)) { + goog.object.set(object, 'id', id); + } + var geometry = feature.getGeometry(); + if (goog.isDefAndNotNull(geometry)) { + goog.object.set( + object, 'geometry', ol.format.GeoJSON.writeGeometry_(geometry)); + } + var properties = feature.getProperties(); + goog.object.remove(properties, 'geometry'); + if (!goog.object.isEmpty(properties)) { + goog.object.set(object, 'properties', properties); + } + return object; +}; + + +/** + * @inheritDoc + */ +ol.format.GeoJSON.prototype.writeFeaturesObject = function(features) { + var objects = []; + var i, ii; + for (i = 0, ii = features.length; i < ii; ++i) { + objects.push(this.writeFeatureObject(features[i])); + } + return /** @type {GeoJSONFeatureCollection} */ ({ + 'type': 'FeatureCollection', + 'features': objects + }); +}; + + +/** + * @inheritDoc + */ +ol.format.GeoJSON.prototype.writeGeometryObject = + ol.format.GeoJSON.writeGeometry_; diff --git a/float-no-zero/ol/ol/format/gmlformat.js b/float-no-zero/ol/ol/format/gmlformat.js new file mode 100644 index 0000000000..0eaeabf093 --- /dev/null +++ b/float-no-zero/ol/ol/format/gmlformat.js @@ -0,0 +1,1632 @@ +goog.provide('ol.format.GML'); + +goog.require('goog.array'); +goog.require('goog.asserts'); +goog.require('goog.dom'); +goog.require('goog.dom.NodeType'); +goog.require('goog.object'); +goog.require('goog.string'); +goog.require('ol.Feature'); +goog.require('ol.extent'); +goog.require('ol.format.XMLFeature'); +goog.require('ol.format.XSD'); +goog.require('ol.geom.Geometry'); +goog.require('ol.geom.LineString'); +goog.require('ol.geom.LinearRing'); +goog.require('ol.geom.MultiLineString'); +goog.require('ol.geom.MultiPoint'); +goog.require('ol.geom.MultiPolygon'); +goog.require('ol.geom.Point'); +goog.require('ol.geom.Polygon'); +goog.require('ol.proj'); +goog.require('ol.xml'); + + + +/** + * @constructor + * @param {olx.format.GMLOptions=} opt_options + * Optional configuration object. + * @extends {ol.format.XMLFeature} + * @todo stability experimental + */ +ol.format.GML = function(opt_options) { + var options = /** @type {olx.format.GMLOptions} */ + (goog.isDef(opt_options) ? opt_options : {}); + + /** + * @private + * @type {string} + */ + this.featureType_ = options.featureType; + + /** + * @private + * @type {string} + */ + this.featureNS_ = options.featureNS; + + /** + * @private + * @type {string} + */ + this.srsName_ = options.srsName; + + /** + * @private + * @type {boolean} + */ + this.surface_ = goog.isDef(options.surface) ? + options.surface : false; + + /** + * @private + * @type {boolean} + */ + this.curve_ = goog.isDef(options.curve) ? + options.curve : false; + + /** + * @private + * @type {boolean} + */ + this.multiCurve_ = goog.isDef(options.multiCurve) ? + options.multiCurve : true; + + /** + * @private + * @type {boolean} + */ + this.multiSurface_ = goog.isDef(options.multiSurface) ? + options.multiSurface : true; + + /** + * @private + * @type {string} + */ + this.schemaLocation_ = goog.isDef(options.schemaLocation) ? + options.schemaLocation : ol.format.GML.schemaLocation_; + + goog.base(this); +}; +goog.inherits(ol.format.GML, ol.format.XMLFeature); + + +/** + * @const + * @type {string} + * @private + */ +ol.format.GML.schemaLocation_ = 'http://www.opengis.net/gml ' + + 'http://schemas.opengis.net/gml/3.1.1/profiles/gmlsfProfile/' + + '1.0.0/gmlsf.xsd'; + + +/** + * @param {Node} node Node. + * @param {Array.<*>} objectStack Object stack. + * @return {Array.} Features. + * @private + */ +ol.format.GML.readFeatures_ = function(node, objectStack) { + goog.asserts.assert(node.nodeType == goog.dom.NodeType.ELEMENT); + var localName = ol.xml.getLocalName(node); + var context = objectStack[0]; + goog.asserts.assert(goog.isObject(context)); + var featureType = goog.object.get(context, 'featureType'); + var features; + if (localName == 'FeatureCollection') { + features = ol.xml.pushParseAndPop(null, + ol.format.GML.FEATURE_COLLECTION_PARSERS_, node, objectStack); + } else if (localName == 'featureMembers') { + var parsers = {}; + var parsersNS = {}; + parsers[featureType] = ol.xml.makeArrayPusher(ol.format.GML.readFeature_); + parsersNS[goog.object.get(context, 'featureNS')] = parsers; + features = ol.xml.pushParseAndPop([], parsersNS, node, objectStack); + } + if (!goog.isDef(features)) { + features = []; + } + return features; +}; + + +/** + * @type {Object.>} + * @private + */ +ol.format.GML.FEATURE_COLLECTION_PARSERS_ = { + 'http://www.opengis.net/gml': { + 'featureMembers': ol.xml.makeReplacer(ol.format.GML.readFeatures_) + } +}; + + +/** + * @param {Node} node Node. + * @param {Array.<*>} objectStack Object stack. + * @return {ol.geom.Geometry|undefined} Geometry. + * @private + */ +ol.format.GML.readGeometry_ = function(node, objectStack) { + var context = objectStack[0]; + goog.asserts.assert(goog.isObject(context)); + goog.object.set(context, 'srsName', + node.firstElementChild.getAttribute('srsName')); + var geometry = ol.xml.pushParseAndPop(/** @type {ol.geom.Geometry} */(null), + ol.format.GML.GEOMETRY_PARSERS_, node, objectStack); + if (goog.isDefAndNotNull(geometry)) { + return geometry; + } else { + return undefined; + } +}; + + +/** + * @param {Node} node Node. + * @param {Array.<*>} objectStack Object stack. + * @return {ol.Feature} Feature. + * @private + */ +ol.format.GML.readFeature_ = function(node, objectStack) { + var n; + var fid = node.getAttribute('fid') || + ol.xml.getAttributeNS(node, 'http://www.opengis.net/gml', 'id'); + var values = {}, geometryName; + for (n = node.firstElementChild; !goog.isNull(n); + n = n.nextElementSibling) { + // Assume attribute elements have one child node and that the child + // is a text node. Otherwise assume it is a geometry node. + if (n.childNodes.length === 0 || + (n.childNodes.length === 1 && + n.firstChild.nodeType === 3)) { + var value = ol.xml.getAllTextContent(n, false); + if (goog.string.isEmpty(value)) { + value = undefined; + } + values[ol.xml.getLocalName(n)] = value; + } else { + geometryName = ol.xml.getLocalName(n); + values[geometryName] = ol.format.GML.readGeometry_(n, objectStack); + } + } + var feature = new ol.Feature(values); + if (goog.isDef(geometryName)) { + feature.setGeometryName(geometryName); + } + if (fid) { + feature.setId(fid); + } + return feature; +}; + + +/** + * @param {Node} node Node. + * @param {Array.<*>} objectStack Object stack. + * @private + * @return {ol.geom.Point|undefined} Point. + */ +ol.format.GML.readPoint_ = function(node, objectStack) { + goog.asserts.assert(node.nodeType == goog.dom.NodeType.ELEMENT); + goog.asserts.assert(node.localName == 'Point'); + var flatCoordinates = + ol.format.GML.readFlatCoordinatesFromNode_(node, objectStack); + if (goog.isDefAndNotNull(flatCoordinates)) { + var point = new ol.geom.Point(null); + goog.asserts.assert(flatCoordinates.length == 3); + point.setFlatCoordinates(ol.geom.GeometryLayout.XYZ, flatCoordinates); + return point; + } +}; + + +/** + * @param {Node} node Node. + * @param {Array.<*>} objectStack Object stack. + * @private + * @return {ol.geom.MultiPoint|undefined} MultiPoint. + */ +ol.format.GML.readMultiPoint_ = function(node, objectStack) { + goog.asserts.assert(node.nodeType == goog.dom.NodeType.ELEMENT); + goog.asserts.assert(node.localName == 'MultiPoint'); + var coordinates = ol.xml.pushParseAndPop( + /** @type {Array.>} */ ([]), + ol.format.GML.MULTIPOINT_PARSERS_, node, objectStack); + if (goog.isDef(coordinates)) { + return new ol.geom.MultiPoint(coordinates); + } else { + return undefined; + } +}; + + +/** + * @param {Node} node Node. + * @param {Array.<*>} objectStack Object stack. + * @private + * @return {ol.geom.MultiLineString|undefined} MultiLineString. + */ +ol.format.GML.readMultiLineString_ = function(node, objectStack) { + goog.asserts.assert(node.nodeType == goog.dom.NodeType.ELEMENT); + goog.asserts.assert(node.localName == 'MultiLineString'); + var lineStrings = ol.xml.pushParseAndPop( + /** @type {Array.} */ ([]), + ol.format.GML.MULTILINESTRING_PARSERS_, node, objectStack); + if (goog.isDef(lineStrings)) { + var multiLineString = new ol.geom.MultiLineString(null); + multiLineString.setLineStrings(lineStrings); + return multiLineString; + } else { + return undefined; + } +}; + + +/** + * @param {Node} node Node. + * @param {Array.<*>} objectStack Object stack. + * @private + * @return {ol.geom.MultiLineString|undefined} MultiLineString. + */ +ol.format.GML.readMultiCurve_ = function(node, objectStack) { + goog.asserts.assert(node.nodeType == goog.dom.NodeType.ELEMENT); + goog.asserts.assert(node.localName == 'MultiCurve'); + var lineStrings = ol.xml.pushParseAndPop( + /** @type {Array.} */ ([]), + ol.format.GML.MULTICURVE_PARSERS_, node, objectStack); + if (goog.isDef(lineStrings)) { + var multiLineString = new ol.geom.MultiLineString(null); + multiLineString.setLineStrings(lineStrings); + return multiLineString; + } else { + return undefined; + } +}; + + +/** + * @param {Node} node Node. + * @param {Array.<*>} objectStack Object stack. + * @private + * @return {ol.geom.MultiPolygon|undefined} MultiPolygon. + */ +ol.format.GML.readMultiSurface_ = function(node, objectStack) { + goog.asserts.assert(node.nodeType == goog.dom.NodeType.ELEMENT); + goog.asserts.assert(node.localName == 'MultiSurface'); + var polygons = ol.xml.pushParseAndPop( + /** @type {Array.} */ ([]), + ol.format.GML.MULTISURFACE_PARSERS_, node, objectStack); + if (goog.isDef(polygons)) { + var multiPolygon = new ol.geom.MultiPolygon(null); + multiPolygon.setPolygons(polygons); + return multiPolygon; + } else { + return undefined; + } +}; + + +/** + * @param {Node} node Node. + * @param {Array.<*>} objectStack Object stack. + * @private + * @return {ol.geom.MultiPolygon|undefined} MultiPolygon. + */ +ol.format.GML.readMultiPolygon_ = function(node, objectStack) { + goog.asserts.assert(node.nodeType == goog.dom.NodeType.ELEMENT); + goog.asserts.assert(node.localName == 'MultiPolygon'); + var polygons = ol.xml.pushParseAndPop( + /** @type {Array.} */ ([]), + ol.format.GML.MULTIPOLYGON_PARSERS_, node, objectStack); + if (goog.isDef(polygons)) { + var multiPolygon = new ol.geom.MultiPolygon(null); + multiPolygon.setPolygons(polygons); + return multiPolygon; + } else { + return undefined; + } +}; + + +/** + * @param {Node} node Node. + * @param {Array.<*>} objectStack Object stack. + * @private + */ +ol.format.GML.pointMemberParser_ = function(node, objectStack) { + goog.asserts.assert(node.nodeType == goog.dom.NodeType.ELEMENT); + goog.asserts.assert(node.localName == 'pointMember' || + node.localName == 'pointMembers'); + ol.xml.parse(ol.format.GML.POINTMEMBER_PARSERS_, node, objectStack); +}; + + +/** + * @param {Node} node Node. + * @param {Array.<*>} objectStack Object stack. + * @private + */ +ol.format.GML.lineStringMemberParser_ = function(node, objectStack) { + goog.asserts.assert(node.nodeType == goog.dom.NodeType.ELEMENT); + goog.asserts.assert(node.localName == 'lineStringMember' || + node.localName == 'lineStringMembers'); + ol.xml.parse(ol.format.GML.LINESTRINGMEMBER_PARSERS_, node, objectStack); +}; + + +/** + * @param {Node} node Node. + * @param {Array.<*>} objectStack Object stack. + * @private + */ +ol.format.GML.curveMemberParser_ = function(node, objectStack) { + goog.asserts.assert(node.nodeType == goog.dom.NodeType.ELEMENT); + goog.asserts.assert(node.localName == 'curveMember' || + node.localName == 'curveMembers'); + ol.xml.parse(ol.format.GML.CURVEMEMBER_PARSERS_, node, objectStack); +}; + + +/** + * @param {Node} node Node. + * @param {Array.<*>} objectStack Object stack. + * @private + */ +ol.format.GML.surfaceMemberParser_ = function(node, objectStack) { + goog.asserts.assert(node.nodeType == goog.dom.NodeType.ELEMENT); + goog.asserts.assert(node.localName == 'surfaceMember' || + node.localName == 'surfaceMembers'); + ol.xml.parse(ol.format.GML.SURFACEMEMBER_PARSERS_, node, objectStack); +}; + + +/** + * @param {Node} node Node. + * @param {Array.<*>} objectStack Object stack. + * @private + */ +ol.format.GML.polygonMemberParser_ = function(node, objectStack) { + goog.asserts.assert(node.nodeType == goog.dom.NodeType.ELEMENT); + goog.asserts.assert(node.localName == 'polygonMember' || + node.localName == 'polygonMembers'); + ol.xml.parse(ol.format.GML.POLYGONMEMBER_PARSERS_, node, objectStack); +}; + + +/** + * @param {Node} node Node. + * @param {Array.<*>} objectStack Object stack. + * @private + * @return {ol.geom.LineString|undefined} LineString. + */ +ol.format.GML.readLineString_ = function(node, objectStack) { + goog.asserts.assert(node.nodeType == goog.dom.NodeType.ELEMENT); + goog.asserts.assert(node.localName == 'LineString'); + var flatCoordinates = + ol.format.GML.readFlatCoordinatesFromNode_(node, objectStack); + if (goog.isDefAndNotNull(flatCoordinates)) { + var lineString = new ol.geom.LineString(null); + lineString.setFlatCoordinates(ol.geom.GeometryLayout.XYZ, flatCoordinates); + return lineString; + } else { + return undefined; + } +}; + + +/** + * @param {Node} node Node. + * @param {Array.<*>} objectStack Object stack. + * @private + * @return {Array.<(Array.)>|undefined} flat coordinates. + */ +ol.format.GML.readPatch_ = function(node, objectStack) { + goog.asserts.assert(node.nodeType == goog.dom.NodeType.ELEMENT); + goog.asserts.assert(node.localName == 'patches'); + return ol.xml.pushParseAndPop( + /** @type {Array.>} */ ([null]), + ol.format.GML.PATCHES_PARSERS_, node, objectStack); +}; + + +/** + * @param {Node} node Node. + * @param {Array.<*>} objectStack Object stack. + * @private + * @return {Array.|undefined} flat coordinates. + */ +ol.format.GML.readSegment_ = function(node, objectStack) { + goog.asserts.assert(node.nodeType == goog.dom.NodeType.ELEMENT); + goog.asserts.assert(node.localName == 'segments'); + return ol.xml.pushParseAndPop( + /** @type {Array.} */ ([null]), + ol.format.GML.SEGMENTS_PARSERS_, node, objectStack); +}; + + +/** + * @param {Node} node Node. + * @param {Array.<*>} objectStack Object stack. + * @private + * @return {Array.<(Array.)>|undefined} flat coordinates. + */ +ol.format.GML.readPolygonPatch_ = function(node, objectStack) { + goog.asserts.assert(node.nodeType == goog.dom.NodeType.ELEMENT); + goog.asserts.assert(node.localName == 'PolygonPatch'); + return ol.xml.pushParseAndPop( + /** @type {Array.>} */ ([null]), + ol.format.GML.FLAT_LINEAR_RINGS_PARSERS_, node, objectStack); +}; + + +/** + * @param {Node} node Node. + * @param {Array.<*>} objectStack Object stack. + * @private + * @return {Array.|undefined} flat coordinates. + */ +ol.format.GML.readLineStringSegment_ = function(node, objectStack) { + goog.asserts.assert(node.nodeType == goog.dom.NodeType.ELEMENT); + goog.asserts.assert(node.localName == 'LineStringSegment'); + return ol.xml.pushParseAndPop( + /** @type {Array.} */ ([null]), + ol.format.GML.GEOMETRY_FLAT_COORDINATES_PARSERS_, node, objectStack); +}; + + +/** + * @param {Node} node Node. + * @param {Array.<*>} objectStack Object stack. + * @private + */ +ol.format.GML.interiorParser_ = function(node, objectStack) { + goog.asserts.assert(node.nodeType == goog.dom.NodeType.ELEMENT); + goog.asserts.assert(node.localName == 'interior'); + var flatLinearRing = ol.xml.pushParseAndPop( + /** @type {Array.|undefined} */ (undefined), + ol.format.GML.RING_PARSERS_, node, objectStack); + if (goog.isDef(flatLinearRing)) { + var flatLinearRings = /** @type {Array.>} */ + (objectStack[objectStack.length - 1]); + goog.asserts.assert(goog.isArray(flatLinearRings)); + goog.asserts.assert(flatLinearRings.length > 0); + flatLinearRings.push(flatLinearRing); + } +}; + + +/** + * @param {Node} node Node. + * @param {Array.<*>} objectStack Object stack. + * @private + */ +ol.format.GML.exteriorParser_ = function(node, objectStack) { + goog.asserts.assert(node.nodeType == goog.dom.NodeType.ELEMENT); + goog.asserts.assert(node.localName == 'exterior'); + var flatLinearRing = ol.xml.pushParseAndPop( + /** @type {Array.|undefined} */ (undefined), + ol.format.GML.RING_PARSERS_, node, objectStack); + if (goog.isDef(flatLinearRing)) { + var flatLinearRings = /** @type {Array.>} */ + (objectStack[objectStack.length - 1]); + goog.asserts.assert(goog.isArray(flatLinearRings)); + goog.asserts.assert(flatLinearRings.length > 0); + flatLinearRings[0] = flatLinearRing; + } +}; + + +/** + * @param {Node} node Node. + * @param {Array.<*>} objectStack Object stack. + * @private + * @return {Array.|undefined} LinearRing flat coordinates. + */ +ol.format.GML.readFlatLinearRing_ = function(node, objectStack) { + goog.asserts.assert(node.nodeType == goog.dom.NodeType.ELEMENT); + goog.asserts.assert(node.localName == 'LinearRing'); + var ring = ol.xml.pushParseAndPop(/** @type {Array.} */(null), + ol.format.GML.GEOMETRY_FLAT_COORDINATES_PARSERS_, node, objectStack); + if (goog.isDefAndNotNull(ring)) { + return ring; + } else { + return undefined; + } +}; + + +/** + * @param {Node} node Node. + * @param {Array.<*>} objectStack Object stack. + * @private + * @return {ol.geom.LinearRing|undefined} LinearRing. + */ +ol.format.GML.readLinearRing_ = function(node, objectStack) { + goog.asserts.assert(node.nodeType == goog.dom.NodeType.ELEMENT); + goog.asserts.assert(node.localName == 'LinearRing'); + var flatCoordinates = + ol.format.GML.readFlatCoordinatesFromNode_(node, objectStack); + if (goog.isDef(flatCoordinates)) { + var ring = new ol.geom.LinearRing(null); + ring.setFlatCoordinates(ol.geom.GeometryLayout.XYZ, flatCoordinates); + return ring; + } else { + return undefined; + } +}; + + +/** + * @param {Node} node Node. + * @param {Array.<*>} objectStack Object stack. + * @private + * @return {ol.geom.Polygon|undefined} Polygon. + */ +ol.format.GML.readPolygon_ = function(node, objectStack) { + goog.asserts.assert(node.nodeType == goog.dom.NodeType.ELEMENT); + goog.asserts.assert(node.localName == 'Polygon'); + var flatLinearRings = ol.xml.pushParseAndPop( + /** @type {Array.>} */ ([null]), + ol.format.GML.FLAT_LINEAR_RINGS_PARSERS_, node, objectStack); + if (goog.isDef(flatLinearRings) && + !goog.isNull(flatLinearRings[0])) { + var polygon = new ol.geom.Polygon(null); + var flatCoordinates = flatLinearRings[0]; + var ends = [flatCoordinates.length]; + var i, ii; + for (i = 1, ii = flatLinearRings.length; i < ii; ++i) { + goog.array.extend(flatCoordinates, flatLinearRings[i]); + ends.push(flatCoordinates.length); + } + polygon.setFlatCoordinates( + ol.geom.GeometryLayout.XYZ, flatCoordinates, ends); + return polygon; + } else { + return undefined; + } +}; + + +/** + * @param {Node} node Node. + * @param {Array.<*>} objectStack Object stack. + * @private + * @return {ol.geom.Polygon|undefined} Polygon. + */ +ol.format.GML.readSurface_ = function(node, objectStack) { + goog.asserts.assert(node.nodeType == goog.dom.NodeType.ELEMENT); + goog.asserts.assert(node.localName == 'Surface'); + var flatLinearRings = ol.xml.pushParseAndPop( + /** @type {Array.>} */ ([null]), + ol.format.GML.SURFACE_PARSERS_, node, objectStack); + if (goog.isDef(flatLinearRings) && + !goog.isNull(flatLinearRings[0])) { + var polygon = new ol.geom.Polygon(null); + var flatCoordinates = flatLinearRings[0]; + var ends = [flatCoordinates.length]; + var i, ii; + for (i = 1, ii = flatLinearRings.length; i < ii; ++i) { + goog.array.extend(flatCoordinates, flatLinearRings[i]); + ends.push(flatCoordinates.length); + } + polygon.setFlatCoordinates( + ol.geom.GeometryLayout.XYZ, flatCoordinates, ends); + return polygon; + } else { + return undefined; + } +}; + + +/** + * @param {Node} node Node. + * @param {Array.<*>} objectStack Object stack. + * @private + * @return {ol.geom.LineString|undefined} LineString. + */ +ol.format.GML.readCurve_ = function(node, objectStack) { + goog.asserts.assert(node.nodeType == goog.dom.NodeType.ELEMENT); + goog.asserts.assert(node.localName == 'Curve'); + var flatCoordinates = ol.xml.pushParseAndPop( + /** @type {Array.} */ ([null]), + ol.format.GML.CURVE_PARSERS_, node, objectStack); + if (goog.isDef(flatCoordinates)) { + var lineString = new ol.geom.LineString(null); + lineString.setFlatCoordinates(ol.geom.GeometryLayout.XYZ, flatCoordinates); + return lineString; + } else { + return undefined; + } +}; + + +/** + * @param {Node} node Node. + * @param {Array.<*>} objectStack Object stack. + * @private + * @return {ol.Extent|undefined} Envelope. + */ +ol.format.GML.readEnvelope_ = function(node, objectStack) { + goog.asserts.assert(node.nodeType == goog.dom.NodeType.ELEMENT); + goog.asserts.assert(node.localName == 'Envelope'); + var flatCoordinates = ol.xml.pushParseAndPop( + /** @type {Array.} */ ([null]), + ol.format.GML.ENVELOPE_PARSERS_, node, objectStack); + return ol.extent.createOrUpdate(flatCoordinates[1][0], + flatCoordinates[1][1], flatCoordinates[2][0], + flatCoordinates[2][1]); +}; + + +/** + * @param {Node} node Node. + * @param {Array.<*>} objectStack Object stack. + * @private + * @return {Array.} Flat coordinates. + */ +ol.format.GML.readFlatCoordinatesFromNode_ = function(node, objectStack) { + goog.asserts.assert(node.nodeType == goog.dom.NodeType.ELEMENT); + return /** @type {Array.} */ (ol.xml.pushParseAndPop( + null, + ol.format.GML.GEOMETRY_FLAT_COORDINATES_PARSERS_, node, objectStack)); +}; + + +/** + * @param {Node} node Node. + * @param {Array.<*>} objectStack Object stack. + * @private + * @return {Array.|undefined} Flat coordinates. + */ +ol.format.GML.readFlatPos_ = function(node, objectStack) { + var s = ol.xml.getAllTextContent(node, false).replace(/^\s*|\s*$/g, ''); + var flatCoordinates = goog.array.map(s.split(/\s+/), parseFloat); + var context = objectStack[0]; + goog.asserts.assert(goog.isObject(context)); + var containerSrs = goog.object.get(context, 'srsName'); + var axisOrientation = 'enu'; + if (!goog.isNull(containerSrs)) { + var proj = ol.proj.get(containerSrs); + axisOrientation = proj.getAxisOrientation(); + } + if (axisOrientation === 'neu') { + flatCoordinates = flatCoordinates.reverse(); + } + var len = flatCoordinates.length; + if (len == 2) { + flatCoordinates.push(0); + } + if (len === 0) { + return undefined; + } + return flatCoordinates; +}; + + +/** + * @param {Node} node Node. + * @param {Array.<*>} objectStack Object stack. + * @private + * @return {Array.|undefined} Flat coordinates. + */ +ol.format.GML.readFlatPosList_ = function(node, objectStack) { + var s = ol.xml.getAllTextContent(node, false).replace(/^\s*|\s*$/g, ''); + var context = objectStack[0]; + goog.asserts.assert(goog.isObject(context)); + var containerSrs = goog.object.get(context, 'srsName'); + var containerDimension = node.parentNode.getAttribute('srsDimension'); + var axisOrientation = 'enu'; + if (!goog.isNull(containerSrs)) { + var proj = ol.proj.get(containerSrs); + axisOrientation = proj.getAxisOrientation(); + } + var coords = s.split(/\s+/); + // The "dimension" attribute is from the GML 3.0.1 spec. + var dim = 2; + if (!goog.isNull(node.getAttribute('srsDimension'))) { + dim = ol.format.XSD.readNonNegativeIntegerString( + node.getAttribute('srsDimension')); + } else if (!goog.isNull(node.getAttribute('dimension'))) { + dim = ol.format.XSD.readNonNegativeIntegerString( + node.getAttribute('dimension')); + } else if (!goog.isNull(containerDimension)) { + dim = ol.format.XSD.readNonNegativeIntegerString(containerDimension); + } + var x, y, z; + var flatCoordinates = []; + for (var i = 0, ii = coords.length; i < ii; i += dim) { + x = parseFloat(coords[i]); + y = parseFloat(coords[i + 1]); + z = (dim === 3) ? parseFloat(coords[i + 2]) : 0; + if (axisOrientation.substr(0, 2) === 'en') { + flatCoordinates.push(x, y, z); + } else { + flatCoordinates.push(y, x, z); + } + } + return flatCoordinates; +}; + + +/** + * @const + * @type {Object.>} + * @private + */ +ol.format.GML.GEOMETRY_PARSERS_ = { + 'http://www.opengis.net/gml' : { + 'Point': ol.xml.makeReplacer(ol.format.GML.readPoint_), + 'MultiPoint': ol.xml.makeReplacer(ol.format.GML.readMultiPoint_), + 'LineString': ol.xml.makeReplacer(ol.format.GML.readLineString_), + 'MultiLineString': ol.xml.makeReplacer( + ol.format.GML.readMultiLineString_), + 'LinearRing' : ol.xml.makeReplacer(ol.format.GML.readLinearRing_), + 'Polygon': ol.xml.makeReplacer(ol.format.GML.readPolygon_), + 'MultiPolygon': ol.xml.makeReplacer(ol.format.GML.readMultiPolygon_), + 'Surface': ol.xml.makeReplacer(ol.format.GML.readSurface_), + 'MultiSurface': ol.xml.makeReplacer(ol.format.GML.readMultiSurface_), + 'Curve': ol.xml.makeReplacer(ol.format.GML.readCurve_), + 'MultiCurve': ol.xml.makeReplacer(ol.format.GML.readMultiCurve_), + 'Envelope': ol.xml.makeReplacer(ol.format.GML.readEnvelope_) + } +}; + + +/** + * @const + * @type {Object.>} + * @private + */ +ol.format.GML.GEOMETRY_FLAT_COORDINATES_PARSERS_ = { + 'http://www.opengis.net/gml' : { + 'pos': ol.xml.makeReplacer(ol.format.GML.readFlatPos_), + 'posList': ol.xml.makeReplacer(ol.format.GML.readFlatPosList_) + } +}; + + +/** + * @const + * @type {Object.>} + * @private + */ +ol.format.GML.FLAT_LINEAR_RINGS_PARSERS_ = { + 'http://www.opengis.net/gml' : { + 'interior': ol.format.GML.interiorParser_, + 'exterior': ol.format.GML.exteriorParser_ + } +}; + + +/** + * @const + * @type {Object.>} + * @private + */ +ol.format.GML.MULTIPOINT_PARSERS_ = { + 'http://www.opengis.net/gml' : { + 'pointMember': ol.xml.makeArrayPusher(ol.format.GML.pointMemberParser_), + 'pointMembers': ol.xml.makeArrayPusher(ol.format.GML.pointMemberParser_) + } +}; + + +/** + * @const + * @type {Object.>} + * @private + */ +ol.format.GML.MULTILINESTRING_PARSERS_ = { + 'http://www.opengis.net/gml' : { + 'lineStringMember': ol.xml.makeArrayPusher( + ol.format.GML.lineStringMemberParser_), + 'lineStringMembers': ol.xml.makeArrayPusher( + ol.format.GML.lineStringMemberParser_) + } +}; + + +/** + * @const + * @type {Object.>} + * @private + */ +ol.format.GML.MULTICURVE_PARSERS_ = { + 'http://www.opengis.net/gml' : { + 'curveMember': ol.xml.makeArrayPusher( + ol.format.GML.curveMemberParser_), + 'curveMembers': ol.xml.makeArrayPusher( + ol.format.GML.curveMemberParser_) + } +}; + + +/** + * @const + * @type {Object.>} + * @private + */ +ol.format.GML.MULTISURFACE_PARSERS_ = { + 'http://www.opengis.net/gml' : { + 'surfaceMember': ol.xml.makeArrayPusher( + ol.format.GML.surfaceMemberParser_), + 'surfaceMembers': ol.xml.makeArrayPusher( + ol.format.GML.surfaceMemberParser_) + } +}; + + +/** + * @const + * @type {Object.>} + * @private + */ +ol.format.GML.MULTIPOLYGON_PARSERS_ = { + 'http://www.opengis.net/gml' : { + 'polygonMember': ol.xml.makeArrayPusher( + ol.format.GML.polygonMemberParser_), + 'polygonMembers': ol.xml.makeArrayPusher( + ol.format.GML.polygonMemberParser_) + } +}; + + +/** + * @const + * @type {Object.>} + * @private + */ +ol.format.GML.POINTMEMBER_PARSERS_ = { + 'http://www.opengis.net/gml' : { + 'Point': ol.xml.makeArrayPusher( + ol.format.GML.readFlatCoordinatesFromNode_) + } +}; + + +/** + * @const + * @type {Object.>} + * @private + */ +ol.format.GML.LINESTRINGMEMBER_PARSERS_ = { + 'http://www.opengis.net/gml' : { + 'LineString': ol.xml.makeArrayPusher( + ol.format.GML.readLineString_) + } +}; + + +/** + * @const + * @type {Object.>} + * @private + */ +ol.format.GML.CURVEMEMBER_PARSERS_ = { + 'http://www.opengis.net/gml' : { + 'LineString': ol.xml.makeArrayPusher(ol.format.GML.readLineString_), + 'Curve': ol.xml.makeArrayPusher(ol.format.GML.readCurve_) + } +}; + + +/** + * @const + * @type {Object.>} + * @private + */ +ol.format.GML.SURFACEMEMBER_PARSERS_ = { + 'http://www.opengis.net/gml' : { + 'Polygon': ol.xml.makeArrayPusher(ol.format.GML.readPolygon_), + 'Surface': ol.xml.makeArrayPusher(ol.format.GML.readSurface_) + } +}; + + +/** + * @const + * @type {Object.>} + * @private + */ +ol.format.GML.POLYGONMEMBER_PARSERS_ = { + 'http://www.opengis.net/gml' : { + 'Polygon': ol.xml.makeArrayPusher( + ol.format.GML.readPolygon_) + } +}; + + +/** + * @const + * @type {Object.>} + * @private + */ +ol.format.GML.SURFACE_PARSERS_ = { + 'http://www.opengis.net/gml' : { + 'patches': ol.xml.makeReplacer(ol.format.GML.readPatch_) + } +}; + + +/** + * @const + * @type {Object.>} + * @private + */ +ol.format.GML.CURVE_PARSERS_ = { + 'http://www.opengis.net/gml' : { + 'segments': ol.xml.makeReplacer(ol.format.GML.readSegment_) + } +}; + + +/** + * @const + * @type {Object.>} + * @private + */ +ol.format.GML.ENVELOPE_PARSERS_ = { + 'http://www.opengis.net/gml' : { + 'lowerCorner': ol.xml.makeArrayPusher(ol.format.GML.readFlatPosList_), + 'upperCorner': ol.xml.makeArrayPusher(ol.format.GML.readFlatPosList_) + } +}; + + +/** + * @const + * @type {Object.>} + * @private + */ +ol.format.GML.PATCHES_PARSERS_ = { + 'http://www.opengis.net/gml' : { + 'PolygonPatch': ol.xml.makeReplacer(ol.format.GML.readPolygonPatch_) + } +}; + + +/** + * @const + * @type {Object.>} + * @private + */ +ol.format.GML.SEGMENTS_PARSERS_ = { + 'http://www.opengis.net/gml' : { + 'LineStringSegment': ol.xml.makeReplacer( + ol.format.GML.readLineStringSegment_) + } +}; + + +/** + * @const + * @type {Object.>} + * @private + */ +ol.format.GML.RING_PARSERS_ = { + 'http://www.opengis.net/gml' : { + 'LinearRing': ol.xml.makeReplacer(ol.format.GML.readFlatLinearRing_) + } +}; + + +/** + * @inheritDoc + */ +ol.format.GML.prototype.readGeometryFromNode = function(node) { + var geometry = ol.format.GML.readGeometry_(node, [{}]); + return (goog.isDef(geometry)) ? geometry : null; +}; + + +/** + * @inheritDoc + */ +ol.format.GML.prototype.readFeaturesFromNode = function(node) { + var objectStack = [{ + 'featureType': this.featureType_, + 'featureNS': this.featureNS_ + }]; + return ol.format.GML.readFeatures_(node, objectStack); +}; + + +/** + * @param {Node} node Node. + * @param {ol.geom.Point} value Point geometry. + * @param {Array.<*>} objectStack Node stack. + * @private + */ +ol.format.GML.writePos_ = function(node, value, objectStack) { + var context = objectStack[objectStack.length - 1]; + goog.asserts.assert(goog.isObject(context)); + var srsName = goog.object.get(context, 'srsName'); + var axisOrientation = 'enu'; + if (goog.isDefAndNotNull(srsName)) { + axisOrientation = ol.proj.get(srsName).getAxisOrientation(); + } + var point = value.getCoordinates(); + var coords; + // only 2d for simple features profile + if (axisOrientation.substr(0, 2) === 'en') { + coords = (point[0] + ' ' + point[1]); + } else { + coords = (point[1] + ' ' + point[0]); + } + ol.format.XSD.writeStringTextNode(node, coords); +}; + + +/** + * @param {Array.} point Point geometry. + * @param {string=} opt_srsName Optional srsName + * @return {string} + * @private + */ +ol.format.GML.getCoords_ = function(point, opt_srsName) { + var axisOrientation = 'enu'; + if (goog.isDefAndNotNull(opt_srsName)) { + axisOrientation = ol.proj.get(opt_srsName).getAxisOrientation(); + } + return ((axisOrientation.substr(0, 2) === 'en') ? + point[0] + ' ' + point[1] : + point[1] + ' ' + point[0]); +}; + + +/** + * @param {Node} node Node. + * @param {ol.geom.LineString|ol.geom.LinearRing} value Geometry. + * @param {Array.<*>} objectStack Node stack. + * @private + */ +ol.format.GML.writePosList_ = function(node, value, objectStack) { + var context = objectStack[objectStack.length - 1]; + goog.asserts.assert(goog.isObject(context)); + var srsName = goog.object.get(context, 'srsName'); + // only 2d for simple features profile + var points = value.getCoordinates(); + var len = points.length; + var parts = new Array(len); + var point; + for (var i = 0; i < len; ++i) { + point = points[i]; + parts[i] = ol.format.GML.getCoords_(point, srsName); + } + ol.format.XSD.writeStringTextNode(node, parts.join(' ')); +}; + + +/** + * @param {Node} node Node. + * @param {ol.geom.Point} geometry Point geometry. + * @param {Array.<*>} objectStack Node stack. + * @private + */ +ol.format.GML.writePoint_ = function(node, geometry, objectStack) { + var context = objectStack[objectStack.length - 1]; + goog.asserts.assert(goog.isObject(context)); + var srsName = goog.object.get(context, 'srsName'); + if (goog.isDefAndNotNull(srsName)) { + node.setAttribute('srsName', srsName); + } + var pos = ol.xml.createElementNS(node.namespaceURI, 'pos'); + node.appendChild(pos); + ol.format.GML.writePos_(pos, geometry, objectStack); +}; + + +/** + * @param {Node} node Node. + * @param {ol.geom.LinearRing} geometry LinearRing geometry. + * @param {Array.<*>} objectStack Node stack. + * @private + */ +ol.format.GML.writeLinearRing_ = function(node, geometry, objectStack) { + var context = objectStack[objectStack.length - 1]; + goog.asserts.assert(goog.isObject(context)); + var srsName = goog.object.get(context, 'srsName'); + if (goog.isDefAndNotNull(srsName)) { + node.setAttribute('srsName', srsName); + } + var posList = ol.xml.createElementNS(node.namespaceURI, 'posList'); + node.appendChild(posList); + ol.format.GML.writePosList_(posList, geometry, objectStack); +}; + + +/** + * @param {*} value Value. + * @param {Array.<*>} objectStack Object stack. + * @param {string=} opt_nodeName Node name. + * @return {Node} Node. + * @private + */ +ol.format.GML.RING_NODE_FACTORY_ = function(value, objectStack, opt_nodeName) { + var context = objectStack[objectStack.length - 1]; + var parentNode = context.node; + goog.asserts.assert(goog.isObject(context)); + var exteriorWritten = goog.object.get(context, 'exteriorWritten'); + if (!goog.isDef(exteriorWritten)) { + goog.object.set(context, 'exteriorWritten', true); + } + return ol.xml.createElementNS(parentNode.namespaceURI, + goog.isDef(exteriorWritten) ? 'interior' : 'exterior'); +}; + + +/** + * @param {Node} node Node. + * @param {ol.geom.Polygon} geometry Polygon geometry. + * @param {Array.<*>} objectStack Node stack. + * @private + */ +ol.format.GML.writeSurfaceOrPolygon_ = function(node, geometry, objectStack) { + var context = objectStack[objectStack.length - 1]; + goog.asserts.assert(goog.isObject(context)); + var srsName = goog.object.get(context, 'srsName'); + if (node.nodeName !== 'PolygonPatch' && goog.isDefAndNotNull(srsName)) { + node.setAttribute('srsName', srsName); + } + if (node.nodeName === 'Polygon' || node.nodeName === 'PolygonPatch') { + var rings = geometry.getLinearRings(); + ol.xml.pushSerializeAndPop( + {node: node, srsName: srsName}, + ol.format.GML.RING_SERIALIZERS_, ol.format.GML.RING_NODE_FACTORY_, + rings, objectStack); + } else if (node.nodeName === 'Surface') { + var patches = ol.xml.createElementNS(node.namespaceURI, 'patches'); + node.appendChild(patches); + ol.format.GML.writeSurfacePatches_(patches, geometry, objectStack); + } +}; + + +/** + * @param {Node} node Node. + * @param {ol.geom.LineString} geometry LineString geometry. + * @param {Array.<*>} objectStack Node stack. + * @private + */ +ol.format.GML.writeCurveOrLineString_ = function(node, geometry, objectStack) { + var context = objectStack[objectStack.length - 1]; + goog.asserts.assert(goog.isObject(context)); + var srsName = goog.object.get(context, 'srsName'); + if (node.nodeName !== 'LineStringSegment' && goog.isDefAndNotNull(srsName)) { + node.setAttribute('srsName', srsName); + } + if (node.nodeName === 'LineString' || node.nodeName === 'LineStringSegment') { + var posList = ol.xml.createElementNS(node.namespaceURI, 'posList'); + node.appendChild(posList); + ol.format.GML.writePosList_(posList, geometry, objectStack); + } else if (node.nodeName === 'Curve') { + var segments = ol.xml.createElementNS(node.namespaceURI, 'segments'); + node.appendChild(segments); + ol.format.GML.writeCurveSegments_(segments, geometry, objectStack); + } +}; + + +/** + * @param {Node} node Node. + * @param {ol.geom.MultiPolygon} geometry MultiPolygon geometry. + * @param {Array.<*>} objectStack Node stack. + * @private + */ +ol.format.GML.writeMultiSurfaceOrPolygon_ = function(node, geometry, + objectStack) { + var context = objectStack[objectStack.length - 1]; + goog.asserts.assert(goog.isObject(context)); + var srsName = goog.object.get(context, 'srsName'); + var surface = goog.object.get(context, 'surface'); + if (goog.isDefAndNotNull(srsName)) { + node.setAttribute('srsName', srsName); + } + var polygons = geometry.getPolygons(); + ol.xml.pushSerializeAndPop({node: node, srsName: srsName, surface: surface}, + ol.format.GML.SURFACEORPOLYGONMEMBER_SERIALIZERS_, + ol.format.GML.MULTIGEOMETRY_MEMBER_NODE_FACTORY_, polygons, + objectStack); +}; + + +/** + * @param {Node} node Node. + * @param {ol.geom.MultiPoint} geometry MultiPoint geometry. + * @param {Array.<*>} objectStack Node stack. + * @private + */ +ol.format.GML.writeMultiPoint_ = function(node, geometry, + objectStack) { + var context = objectStack[objectStack.length - 1]; + goog.asserts.assert(goog.isObject(context)); + var srsName = goog.object.get(context, 'srsName'); + if (goog.isDefAndNotNull(srsName)) { + node.setAttribute('srsName', srsName); + } + var points = geometry.getPoints(); + ol.xml.pushSerializeAndPop({node: node, srsName: srsName}, + ol.format.GML.POINTMEMBER_SERIALIZERS_, + ol.xml.makeSimpleNodeFactory('pointMember'), points, + objectStack); +}; + + +/** + * @param {Node} node Node. + * @param {ol.geom.MultiLineString} geometry MultiLineString geometry. + * @param {Array.<*>} objectStack Node stack. + * @private + */ +ol.format.GML.writeMultiCurveOrLineString_ = function(node, geometry, + objectStack) { + var context = objectStack[objectStack.length - 1]; + goog.asserts.assert(goog.isObject(context)); + var srsName = goog.object.get(context, 'srsName'); + var curve = goog.object.get(context, 'curve'); + if (goog.isDefAndNotNull(srsName)) { + node.setAttribute('srsName', srsName); + } + var lines = geometry.getLineStrings(); + ol.xml.pushSerializeAndPop({node: node, srsName: srsName, curve: curve}, + ol.format.GML.LINESTRINGORCURVEMEMBER_SERIALIZERS_, + ol.format.GML.MULTIGEOMETRY_MEMBER_NODE_FACTORY_, lines, + objectStack); +}; + + +/** + * @param {Node} node Node. + * @param {ol.geom.LinearRing} ring LinearRing geometry. + * @param {Array.<*>} objectStack Node stack. + * @private + */ +ol.format.GML.writeRing_ = function(node, ring, objectStack) { + var linearRing = ol.xml.createElementNS(node.namespaceURI, 'LinearRing'); + node.appendChild(linearRing); + ol.format.GML.writeLinearRing_(linearRing, ring, objectStack); +}; + + +/** + * @param {Node} node Node. + * @param {ol.geom.Polygon} polygon Polygon geometry. + * @param {Array.<*>} objectStack Node stack. + * @private + */ +ol.format.GML.writeSurfaceOrPolygonMember_ = function(node, polygon, + objectStack) { + var context = objectStack[objectStack.length - 1]; + goog.asserts.assert(goog.isObject(context)); + var child = ol.format.GML.GEOMETRY_NODE_FACTORY_(polygon, objectStack); + if (goog.isDef(child)) { + node.appendChild(child); + ol.format.GML.writeSurfaceOrPolygon_(child, polygon, objectStack); + } +}; + + +/** + * @param {Node} node Node. + * @param {ol.geom.Point} point Point geometry. + * @param {Array.<*>} objectStack Node stack. + * @private + */ +ol.format.GML.writePointMember_ = function(node, point, objectStack) { + var child = ol.xml.createElementNS(node.namespaceURI, 'Point'); + node.appendChild(child); + ol.format.GML.writePoint_(child, point, objectStack); +}; + + +/** + * @param {Node} node Node. + * @param {ol.geom.LineString} line LineString geometry. + * @param {Array.<*>} objectStack Node stack. + * @private + */ +ol.format.GML.writeLineStringOrCurveMember_ = function(node, line, + objectStack) { + var context = objectStack[objectStack.length - 1]; + goog.asserts.assert(goog.isObject(context)); + var child = ol.format.GML.GEOMETRY_NODE_FACTORY_(line, objectStack); + if (goog.isDef(child)) { + node.appendChild(child); + ol.format.GML.writeCurveOrLineString_(child, line, objectStack); + } +}; + + +/** + * @param {Node} node Node. + * @param {ol.geom.Polygon} polygon Polygon geometry. + * @param {Array.<*>} objectStack Node stack. + * @private + */ +ol.format.GML.writeSurfacePatches_ = function(node, polygon, objectStack) { + var child = ol.xml.createElementNS(node.namespaceURI, 'PolygonPatch'); + node.appendChild(child); + ol.format.GML.writeSurfaceOrPolygon_(child, polygon, objectStack); +}; + + +/** + * @param {Node} node Node. + * @param {ol.geom.LineString} line LineString geometry. + * @param {Array.<*>} objectStack Node stack. + * @private + */ +ol.format.GML.writeCurveSegments_ = function(node, line, objectStack) { + var child = ol.xml.createElementNS(node.namespaceURI, 'LineStringSegment'); + node.appendChild(child); + ol.format.GML.writeCurveOrLineString_(child, line, objectStack); +}; + + +/** + * @param {Node} node Node. + * @param {ol.geom.Geometry} geometry Geometry. + * @param {Array.<*>} objectStack Node stack. + * @private + */ +ol.format.GML.writeGeometry_ = function(node, geometry, objectStack) { + var context = objectStack[objectStack.length - 1]; + goog.asserts.assert(goog.isObject(context)); + var item = goog.object.clone(context); + item.node = node; + ol.xml.pushSerializeAndPop(/** @type {ol.xml.NodeStackItem} */ + (item), ol.format.GML.GEOMETRY_SERIALIZERS_, + ol.format.GML.GEOMETRY_NODE_FACTORY_, [geometry], objectStack); +}; + + +/** + * @param {Node} node Node. + * @param {ol.Feature} feature Feature. + * @param {Array.<*>} objectStack Node stack. + * @private + */ +ol.format.GML.writeFeature_ = function(node, feature, objectStack) { + var fid = feature.getId(); + if (goog.isDef(fid)) { + node.setAttribute('fid', fid); + } + var context = objectStack[objectStack.length - 1]; + goog.asserts.assert(goog.isObject(context)); + var featureNS = goog.object.get(context, 'featureNS'); + var geometryName = feature.getGeometryName(); + if (!goog.isDef(context.serializers)) { + context.serializers = {}; + context.serializers[featureNS] = {}; + } + var properties = feature.getProperties(); + var keys = [], values = []; + for (var key in properties) { + keys.push(key); + values.push(properties[key]); + if (key == geometryName) { + if (!(key in context.serializers[featureNS])) { + context.serializers[featureNS][key] = ol.xml.makeChildAppender( + ol.format.GML.writeGeometry_); + } + } else { + if (!(key in context.serializers[featureNS])) { + context.serializers[featureNS][key] = ol.xml.makeChildAppender( + ol.format.XSD.writeStringTextNode); + } + } + } + var item = goog.object.clone(context); + item.node = node; + ol.xml.pushSerializeAndPop(/** @type {ol.xml.NodeStackItem} */ + (item), context.serializers, + ol.xml.OBJECT_PROPERTY_NODE_FACTORY, + values, + objectStack, keys); +}; + + +/** + * @param {Node} node Node. + * @param {Array.} features Features. + * @param {Array.<*>} objectStack Node stack. + * @private + */ +ol.format.GML.writeFeatureMembers_ = function(node, features, objectStack) { + var context = objectStack[objectStack.length - 1]; + goog.asserts.assert(goog.isObject(context)); + var featureType = goog.object.get(context, 'featureType'); + var featureNS = goog.object.get(context, 'featureNS'); + var serializers = {}; + serializers[featureNS] = {}; + serializers[featureNS][featureType] = ol.xml.makeChildAppender( + ol.format.GML.writeFeature_); + var item = goog.object.clone(context); + item.node = node; + ol.xml.pushSerializeAndPop(/** @type {ol.xml.NodeStackItem} */ + (item), + serializers, + ol.xml.makeSimpleNodeFactory(featureType, featureNS), features, + objectStack); +}; + + +/** + * @type {Object.>} + * @private + */ +ol.format.GML.SURFACEORPOLYGONMEMBER_SERIALIZERS_ = { + 'http://www.opengis.net/gml': { + 'surfaceMember': ol.xml.makeChildAppender( + ol.format.GML.writeSurfaceOrPolygonMember_), + 'polygonMember': ol.xml.makeChildAppender( + ol.format.GML.writeSurfaceOrPolygonMember_) + } +}; + + +/** + * @type {Object.>} + * @private + */ +ol.format.GML.POINTMEMBER_SERIALIZERS_ = { + 'http://www.opengis.net/gml': { + 'pointMember': ol.xml.makeChildAppender(ol.format.GML.writePointMember_) + } +}; + + +/** + * @type {Object.>} + * @private + */ +ol.format.GML.LINESTRINGORCURVEMEMBER_SERIALIZERS_ = { + 'http://www.opengis.net/gml': { + 'lineStringMember': ol.xml.makeChildAppender( + ol.format.GML.writeLineStringOrCurveMember_), + 'curveMember': ol.xml.makeChildAppender( + ol.format.GML.writeLineStringOrCurveMember_) + } +}; + + +/** + * @type {Object.>} + * @private + */ +ol.format.GML.RING_SERIALIZERS_ = { + 'http://www.opengis.net/gml': { + 'exterior': ol.xml.makeChildAppender(ol.format.GML.writeRing_), + 'interior': ol.xml.makeChildAppender(ol.format.GML.writeRing_) + } +}; + + +/** + * @type {Object.>} + * @private + */ +ol.format.GML.GEOMETRY_SERIALIZERS_ = { + 'http://www.opengis.net/gml': { + 'Curve': ol.xml.makeChildAppender(ol.format.GML.writeCurveOrLineString_), + 'MultiCurve': ol.xml.makeChildAppender( + ol.format.GML.writeMultiCurveOrLineString_), + 'Point': ol.xml.makeChildAppender(ol.format.GML.writePoint_), + 'MultiPoint': ol.xml.makeChildAppender(ol.format.GML.writeMultiPoint_), + 'LineString': ol.xml.makeChildAppender( + ol.format.GML.writeCurveOrLineString_), + 'MultiLineString': ol.xml.makeChildAppender( + ol.format.GML.writeMultiCurveOrLineString_), + 'LinearRing': ol.xml.makeChildAppender(ol.format.GML.writeLinearRing_), + 'Polygon': ol.xml.makeChildAppender(ol.format.GML.writeSurfaceOrPolygon_), + 'MultiPolygon': ol.xml.makeChildAppender( + ol.format.GML.writeMultiSurfaceOrPolygon_), + 'Surface': ol.xml.makeChildAppender(ol.format.GML.writeSurfaceOrPolygon_), + 'MultiSurface': ol.xml.makeChildAppender( + ol.format.GML.writeMultiSurfaceOrPolygon_) + } +}; + + +/** + * @const + * @type {Object.} + * @private + */ +ol.format.GML.MULTIGEOMETRY_TO_MEMBER_NODENAME_ = { + 'MultiLineString': 'lineStringMember', + 'MultiCurve': 'curveMember', + 'MultiPolygon': 'polygonMember', + 'MultiSurface': 'surfaceMember' +}; + + +/** + * @const + * @param {*} value Value. + * @param {Array.<*>} objectStack Object stack. + * @param {string=} opt_nodeName Node name. + * @return {Node|undefined} Node. + * @private + */ +ol.format.GML.MULTIGEOMETRY_MEMBER_NODE_FACTORY_ = function(value, + objectStack, opt_nodeName) { + var parentNode = objectStack[objectStack.length - 1].node; + goog.asserts.assert(ol.xml.isNode(parentNode)); + return ol.xml.createElementNS('http://www.opengis.net/gml', + ol.format.GML.MULTIGEOMETRY_TO_MEMBER_NODENAME_[parentNode.nodeName]); +}; + + +/** + * @const + * @param {*} value Value. + * @param {Array.<*>} objectStack Object stack. + * @param {string=} opt_nodeName Node name. + * @return {Node|undefined} Node. + * @private + */ +ol.format.GML.GEOMETRY_NODE_FACTORY_ = function(value, objectStack, + opt_nodeName) { + var context = objectStack[objectStack.length - 1]; + goog.asserts.assert(goog.isObject(context)); + var multiSurface = goog.object.get(context, 'multiSurface'); + var surface = goog.object.get(context, 'surface'); + var curve = goog.object.get(context, 'curve'); + var multiCurve = goog.object.get(context, 'multiCurve'); + goog.asserts.assertInstanceof(value, ol.geom.Geometry); + var parentNode = objectStack[objectStack.length - 1].node; + goog.asserts.assert(ol.xml.isNode(parentNode)); + var nodeName = value.getType(); + if (nodeName === 'MultiPolygon' && multiSurface === true) { + nodeName = 'MultiSurface'; + } else if (nodeName === 'Polygon' && surface === true) { + nodeName = 'Surface'; + } else if (nodeName === 'LineString' && curve === true) { + nodeName = 'Curve'; + } else if (nodeName === 'MultiLineString' && multiCurve === true) { + nodeName = 'MultiCurve'; + } + return ol.xml.createElementNS('http://www.opengis.net/gml', + nodeName); +}; + + +/** + * @inheritDoc + */ +ol.format.GML.prototype.writeGeometryNode = function(geometry) { + var geom = ol.xml.createElementNS('http://www.opengis.net/gml', 'geom'); + var context = {node: geom, srsName: this.srsName_, + curve: this.curve_, surface: this.surface_, + multiSurface: this.multiSurface_, multiCurve: this.multiCurve_}; + ol.xml.pushSerializeAndPop(/** @type {ol.xml.NodeStackItem} */ + (context), ol.format.GML.GEOMETRY_SERIALIZERS_, + ol.format.GML.GEOMETRY_NODE_FACTORY_, [geometry], []); + return geom; +}; + + +/** + * @inheritDoc + */ +ol.format.GML.prototype.writeFeaturesNode = function(features) { + var node = ol.xml.createElementNS('http://www.opengis.net/gml', + 'featureMembers'); + ol.xml.setAttributeNS(node, 'http://www.w3.org/2001/XMLSchema-instance', + 'xsi:schemaLocation', this.schemaLocation_); + var context = { + srsName: this.srsName_, + curve: this.curve_, + surface: this.surface_, + multiSurface: this.multiSurface_, + multiCurve: this.multiCurve_, + featureNS: this.featureNS_, + featureType: this.featureType_ + }; + ol.format.GML.writeFeatureMembers_(node, features, [context]); + return node; +}; diff --git a/float-no-zero/ol/ol/format/gpxformat.exports b/float-no-zero/ol/ol/format/gpxformat.exports new file mode 100644 index 0000000000..82582fd4ac --- /dev/null +++ b/float-no-zero/ol/ol/format/gpxformat.exports @@ -0,0 +1,3 @@ +@exportSymbol ol.format.GPX +@exportProperty ol.format.GPX.prototype.readFeature +@exportProperty ol.format.GPX.prototype.readFeatures diff --git a/float-no-zero/ol/ol/format/gpxformat.js b/float-no-zero/ol/ol/format/gpxformat.js new file mode 100644 index 0000000000..9217c15719 --- /dev/null +++ b/float-no-zero/ol/ol/format/gpxformat.js @@ -0,0 +1,783 @@ +goog.provide('ol.format.GPX'); +goog.provide('ol.format.GPX.V1_1'); + +goog.require('goog.array'); +goog.require('goog.asserts'); +goog.require('goog.dom.NodeType'); +goog.require('goog.object'); +goog.require('ol.Feature'); +goog.require('ol.format.XMLFeature'); +goog.require('ol.format.XSD'); +goog.require('ol.geom.LineString'); +goog.require('ol.geom.MultiLineString'); +goog.require('ol.geom.Point'); +goog.require('ol.proj'); +goog.require('ol.xml'); + + + +/** + * @constructor + * @extends {ol.format.XMLFeature} + * @todo stability experimental + */ +ol.format.GPX = function() { + goog.base(this); +}; +goog.inherits(ol.format.GPX, ol.format.XMLFeature); + + +/** + * @const + * @private + * @type {Array.} + */ +ol.format.GPX.NAMESPACE_URIS_ = [ + null, + 'http://www.topografix.com/GPX/1/0', + 'http://www.topografix.com/GPX/1/1' +]; + + +/** + * @param {Array.} flatCoordinates Flat coordinates. + * @param {Node} node Node. + * @param {Object} values Values. + * @private + * @return {Array.} Flat coordinates. + */ +ol.format.GPX.appendCoordinate_ = function(flatCoordinates, node, values) { + goog.asserts.assert(node.nodeType == goog.dom.NodeType.ELEMENT); + flatCoordinates.push( + parseFloat(node.getAttribute('lon')), + parseFloat(node.getAttribute('lat'))); + if (goog.object.containsKey(values, 'ele')) { + flatCoordinates.push( + /** @type {number} */ (goog.object.get(values, 'ele'))); + goog.object.remove(values, 'ele'); + } else { + flatCoordinates.push(0); + } + if (goog.object.containsKey(values, 'time')) { + flatCoordinates.push( + /** @type {number} */ (goog.object.get(values, 'time'))); + goog.object.remove(values, 'time'); + } else { + flatCoordinates.push(0); + } + return flatCoordinates; +}; + + +/** + * @param {Node} node Node. + * @param {Array.<*>} objectStack Object stack. + * @private + */ +ol.format.GPX.parseLink_ = function(node, objectStack) { + goog.asserts.assert(node.nodeType == goog.dom.NodeType.ELEMENT); + goog.asserts.assert(node.localName == 'link'); + var values = /** @type {Object} */ (objectStack[objectStack.length - 1]); + var href = node.getAttribute('href'); + if (!goog.isNull(href)) { + goog.object.set(values, 'link', href); + } + ol.xml.parse(ol.format.GPX.LINK_PARSERS_, node, objectStack); +}; + + +/** + * @param {Node} node Node. + * @param {Array.<*>} objectStack Object stack. + * @private + */ +ol.format.GPX.parseRtePt_ = function(node, objectStack) { + goog.asserts.assert(node.nodeType == goog.dom.NodeType.ELEMENT); + goog.asserts.assert(node.localName == 'rtept'); + var values = ol.xml.pushParseAndPop( + {}, ol.format.GPX.RTEPT_PARSERS_, node, objectStack); + if (goog.isDef(values)) { + var rteValues = /** @type {Object} */ (objectStack[objectStack.length - 1]); + var flatCoordinates = /** @type {Array.} */ + (goog.object.get(rteValues, 'flatCoordinates')); + ol.format.GPX.appendCoordinate_(flatCoordinates, node, values); + } +}; + + +/** + * @param {Node} node Node. + * @param {Array.<*>} objectStack Object stack. + * @private + */ +ol.format.GPX.parseTrkPt_ = function(node, objectStack) { + goog.asserts.assert(node.nodeType == goog.dom.NodeType.ELEMENT); + goog.asserts.assert(node.localName == 'trkpt'); + var values = ol.xml.pushParseAndPop( + {}, ol.format.GPX.TRKPT_PARSERS_, node, objectStack); + if (goog.isDef(values)) { + var trkValues = /** @type {Object} */ (objectStack[objectStack.length - 1]); + var flatCoordinates = /** @type {Array.} */ + (goog.object.get(trkValues, 'flatCoordinates')); + ol.format.GPX.appendCoordinate_(flatCoordinates, node, values); + } +}; + + +/** + * @param {Node} node Node. + * @param {Array.<*>} objectStack Object stack. + * @private + */ +ol.format.GPX.parseTrkSeg_ = function(node, objectStack) { + goog.asserts.assert(node.nodeType == goog.dom.NodeType.ELEMENT); + goog.asserts.assert(node.localName == 'trkseg'); + var values = /** @type {Object} */ (objectStack[objectStack.length - 1]); + ol.xml.parse(ol.format.GPX.TRKSEG_PARSERS_, node, objectStack); + var flatCoordinates = /** @type {Array.} */ + (goog.object.get(values, 'flatCoordinates')); + var ends = /** @type {Array.} */ (goog.object.get(values, 'ends')); + ends.push(flatCoordinates.length); +}; + + +/** + * @param {Node} node Node. + * @param {Array.<*>} objectStack Object stack. + * @private + * @return {ol.Feature|undefined} Track. + */ +ol.format.GPX.readRte_ = function(node, objectStack) { + goog.asserts.assert(node.nodeType == goog.dom.NodeType.ELEMENT); + goog.asserts.assert(node.localName == 'rte'); + var values = ol.xml.pushParseAndPop({ + 'flatCoordinates': [] + }, ol.format.GPX.RTE_PARSERS_, node, objectStack); + if (!goog.isDef(values)) { + return undefined; + } + var flatCoordinates = /** @type {Array.} */ + (goog.object.get(values, 'flatCoordinates')); + goog.object.remove(values, 'flatCoordinates'); + var geometry = new ol.geom.LineString(null); + geometry.setFlatCoordinates(ol.geom.GeometryLayout.XYZM, flatCoordinates); + var feature = new ol.Feature(geometry); + feature.setValues(values); + return feature; +}; + + +/** + * @param {Node} node Node. + * @param {Array.<*>} objectStack Object stack. + * @private + * @return {ol.Feature|undefined} Track. + */ +ol.format.GPX.readTrk_ = function(node, objectStack) { + goog.asserts.assert(node.nodeType == goog.dom.NodeType.ELEMENT); + goog.asserts.assert(node.localName == 'trk'); + var values = ol.xml.pushParseAndPop({ + 'flatCoordinates': [], + 'ends': [] + }, ol.format.GPX.TRK_PARSERS_, node, objectStack); + if (!goog.isDef(values)) { + return undefined; + } + var flatCoordinates = /** @type {Array.} */ + (goog.object.get(values, 'flatCoordinates')); + goog.object.remove(values, 'flatCoordinates'); + var ends = /** @type {Array.} */ (goog.object.get(values, 'ends')); + goog.object.remove(values, 'ends'); + var geometry = new ol.geom.MultiLineString(null); + geometry.setFlatCoordinates( + ol.geom.GeometryLayout.XYZM, flatCoordinates, ends); + var feature = new ol.Feature(geometry); + feature.setValues(values); + return feature; +}; + + +/** + * @param {Node} node Node. + * @param {Array.<*>} objectStack Object stack. + * @private + * @return {ol.Feature|undefined} Waypoint. + */ +ol.format.GPX.readWpt_ = function(node, objectStack) { + goog.asserts.assert(node.nodeType == goog.dom.NodeType.ELEMENT); + goog.asserts.assert(node.localName == 'wpt'); + var values = ol.xml.pushParseAndPop( + {}, ol.format.GPX.WPT_PARSERS_, node, objectStack); + if (!goog.isDef(values)) { + return undefined; + } + var coordinates = ol.format.GPX.appendCoordinate_([], node, values); + var geometry = new ol.geom.Point( + coordinates, ol.geom.GeometryLayout.XYZM); + var feature = new ol.Feature(geometry); + feature.setValues(values); + return feature; +}; + + +/** + * @const + * @type {Object.): (ol.Feature|undefined)>} + * @private + */ +ol.format.GPX.FEATURE_READER_ = { + 'rte': ol.format.GPX.readRte_, + 'trk': ol.format.GPX.readTrk_, + 'wpt': ol.format.GPX.readWpt_ +}; + + +/** + * @const + * @type {Object.>} + * @private + */ +ol.format.GPX.GPX_PARSERS_ = ol.xml.makeParsersNS( + ol.format.GPX.NAMESPACE_URIS_, { + 'rte': ol.xml.makeArrayPusher(ol.format.GPX.readRte_), + 'trk': ol.xml.makeArrayPusher(ol.format.GPX.readTrk_), + 'wpt': ol.xml.makeArrayPusher(ol.format.GPX.readWpt_) + }); + + +/** + * @const + * @type {Object.>} + * @private + */ +ol.format.GPX.LINK_PARSERS_ = ol.xml.makeParsersNS( + ol.format.GPX.NAMESPACE_URIS_, { + 'text': + ol.xml.makeObjectPropertySetter(ol.format.XSD.readString, 'linkText'), + 'type': + ol.xml.makeObjectPropertySetter(ol.format.XSD.readString, 'linkType') + }); + + +/** + * @const + * @type {Object.>} + * @private + */ +ol.format.GPX.RTE_PARSERS_ = ol.xml.makeParsersNS( + ol.format.GPX.NAMESPACE_URIS_, { + 'name': ol.xml.makeObjectPropertySetter(ol.format.XSD.readString), + 'cmt': ol.xml.makeObjectPropertySetter(ol.format.XSD.readString), + 'desc': ol.xml.makeObjectPropertySetter(ol.format.XSD.readString), + 'src': ol.xml.makeObjectPropertySetter(ol.format.XSD.readString), + 'link': ol.format.GPX.parseLink_, + 'number': + ol.xml.makeObjectPropertySetter(ol.format.XSD.readNonNegativeInteger), + 'type': ol.xml.makeObjectPropertySetter(ol.format.XSD.readString), + 'rtept': ol.format.GPX.parseRtePt_ + }); + + +/** + * @const + * @type {Object.>} + * @private + */ +ol.format.GPX.RTEPT_PARSERS_ = ol.xml.makeParsersNS( + ol.format.GPX.NAMESPACE_URIS_, { + 'ele': ol.xml.makeObjectPropertySetter(ol.format.XSD.readDecimal), + 'time': ol.xml.makeObjectPropertySetter(ol.format.XSD.readDateTime) + }); + + +/** + * @const + * @type {Object.>} + * @private + */ +ol.format.GPX.TRK_PARSERS_ = ol.xml.makeParsersNS( + ol.format.GPX.NAMESPACE_URIS_, { + 'name': ol.xml.makeObjectPropertySetter(ol.format.XSD.readString), + 'cmt': ol.xml.makeObjectPropertySetter(ol.format.XSD.readString), + 'desc': ol.xml.makeObjectPropertySetter(ol.format.XSD.readString), + 'src': ol.xml.makeObjectPropertySetter(ol.format.XSD.readString), + 'link': ol.format.GPX.parseLink_, + 'number': + ol.xml.makeObjectPropertySetter(ol.format.XSD.readNonNegativeInteger), + 'type': ol.xml.makeObjectPropertySetter(ol.format.XSD.readString), + 'trkseg': ol.format.GPX.parseTrkSeg_ + }); + + +/** + * @const + * @type {Object.>} + * @private + */ +ol.format.GPX.TRKSEG_PARSERS_ = ol.xml.makeParsersNS( + ol.format.GPX.NAMESPACE_URIS_, { + 'trkpt': ol.format.GPX.parseTrkPt_ + }); + + +/** + * @const + * @type {Object.>} + * @private + */ +ol.format.GPX.TRKPT_PARSERS_ = ol.xml.makeParsersNS( + ol.format.GPX.NAMESPACE_URIS_, { + 'ele': ol.xml.makeObjectPropertySetter(ol.format.XSD.readDecimal), + 'time': ol.xml.makeObjectPropertySetter(ol.format.XSD.readDateTime) + }); + + +/** + * @const + * @type {Object.>} + * @private + */ +ol.format.GPX.WPT_PARSERS_ = ol.xml.makeParsersNS( + ol.format.GPX.NAMESPACE_URIS_, { + 'ele': ol.xml.makeObjectPropertySetter(ol.format.XSD.readDecimal), + 'time': ol.xml.makeObjectPropertySetter(ol.format.XSD.readDateTime), + 'magvar': ol.xml.makeObjectPropertySetter(ol.format.XSD.readDecimal), + 'geoidheight': ol.xml.makeObjectPropertySetter(ol.format.XSD.readDecimal), + 'name': ol.xml.makeObjectPropertySetter(ol.format.XSD.readString), + 'cmt': ol.xml.makeObjectPropertySetter(ol.format.XSD.readString), + 'desc': ol.xml.makeObjectPropertySetter(ol.format.XSD.readString), + 'src': ol.xml.makeObjectPropertySetter(ol.format.XSD.readString), + 'link': ol.format.GPX.parseLink_, + 'sym': ol.xml.makeObjectPropertySetter(ol.format.XSD.readString), + 'type': ol.xml.makeObjectPropertySetter(ol.format.XSD.readString), + 'fix': ol.xml.makeObjectPropertySetter(ol.format.XSD.readString), + 'sat': ol.xml.makeObjectPropertySetter( + ol.format.XSD.readNonNegativeInteger), + 'hdop': ol.xml.makeObjectPropertySetter(ol.format.XSD.readDecimal), + 'vdop': ol.xml.makeObjectPropertySetter(ol.format.XSD.readDecimal), + 'pdop': ol.xml.makeObjectPropertySetter(ol.format.XSD.readDecimal), + 'ageofdgpsdata': + ol.xml.makeObjectPropertySetter(ol.format.XSD.readDecimal), + 'dgpsid': + ol.xml.makeObjectPropertySetter(ol.format.XSD.readNonNegativeInteger) + }); + + +/** + * @inheritDoc + */ +ol.format.GPX.prototype.readFeatureFromNode = function(node) { + goog.asserts.assert(node.nodeType == goog.dom.NodeType.ELEMENT); + if (goog.array.indexOf(ol.format.GPX.NAMESPACE_URIS_, node.namespaceURI) == + -1) { + return null; + } + var featureReader = ol.format.GPX.FEATURE_READER_[node.localName]; + if (!goog.isDef(featureReader)) { + return null; + } + var feature = featureReader(node, []); + if (!goog.isDef(feature)) { + return null; + } + return feature; +}; + + +/** + * @inheritDoc + */ +ol.format.GPX.prototype.readFeaturesFromNode = function(node) { + goog.asserts.assert(node.nodeType == goog.dom.NodeType.ELEMENT); + if (goog.array.indexOf(ol.format.GPX.NAMESPACE_URIS_, node.namespaceURI) == + -1) { + return []; + } + if (node.localName == 'gpx') { + var features = ol.xml.pushParseAndPop( + /** @type {Array.} */ ([]), ol.format.GPX.GPX_PARSERS_, + node, []); + if (goog.isDef(features)) { + return features; + } else { + return []; + } + } + return []; +}; + + +/** + * @inheritDoc + */ +ol.format.GPX.prototype.readProjectionFromDocument = function(doc) { + return ol.proj.get('EPSG:4326'); +}; + + +/** + * @inheritDoc + */ +ol.format.GPX.prototype.readProjectionFromNode = function(node) { + return ol.proj.get('EPSG:4326'); +}; + + +/** + * @param {Node} node Node. + * @param {string} value Value for the link's `href` attribute. + * @param {Array.<*>} objectStack Node stack. + * @private + */ +ol.format.GPX.writeLink_ = function(node, value, objectStack) { + node.setAttribute('href', value); + var context = objectStack[objectStack.length - 1]; + goog.asserts.assert(goog.isObject(context)); + var properties = goog.object.get(context, 'properties'); + var link = [ + goog.object.get(properties, 'linkText'), + goog.object.get(properties, 'linkType') + ]; + ol.xml.pushSerializeAndPop(/** @type {ol.xml.NodeStackItem} */ ({node: node}), + ol.format.GPX.LINK_SERIALIZERS_, ol.xml.OBJECT_PROPERTY_NODE_FACTORY, + link, objectStack, ol.format.GPX.LINK_SEQUENCE_); +}; + + +/** + * @param {Node} node Node. + * @param {ol.Coordinate} coordinate Coordinate. + * @param {Array.<*>} objectStack Object stack. + * @private + */ +ol.format.GPX.writeWptType_ = function(node, coordinate, objectStack) { + var context = objectStack[objectStack.length - 1]; + goog.asserts.assert(goog.isObject(context)); + var parentNode = context.node; + goog.asserts.assert(ol.xml.isNode(parentNode)); + var namespaceURI = parentNode.namespaceURI; + var properties = goog.object.get(context, 'properties'); + //FIXME Projection handling + ol.xml.setAttributeNS(node, null, 'lat', coordinate[1]); + ol.xml.setAttributeNS(node, null, 'lon', coordinate[0]); + var geometryLayout = goog.object.get(context, 'geometryLayout'); + switch (geometryLayout) { + case ol.geom.GeometryLayout.XYZM: + if (coordinate[3] !== 0) { + goog.object.set(properties, 'time', coordinate[3]); + } + case ol.geom.GeometryLayout.XYZ: + if (coordinate[2] !== 0) { + goog.object.set(properties, 'ele', coordinate[2]); + } + break; + case ol.geom.GeometryLayout.XYM: + if (coordinate[2] !== 0) { + goog.object.set(properties, 'time', coordinate[2]); + } + } + var orderedKeys = ol.format.GPX.WPT_TYPE_SEQUENCE_[namespaceURI]; + var values = ol.xml.makeSequence(properties, orderedKeys); + ol.xml.pushSerializeAndPop(/** @type {ol.xml.NodeStackItem} */ + ({node: node, 'properties': properties}), + ol.format.GPX.WPT_TYPE_SERIALIZERS_, ol.xml.OBJECT_PROPERTY_NODE_FACTORY, + values, objectStack, orderedKeys); +}; + + +/** + * @param {Node} node Node. + * @param {ol.Feature} feature Feature. + * @param {Array.<*>} objectStack Object stack. + * @private + */ +ol.format.GPX.writeRte_ = function(node, feature, objectStack) { + var properties = feature.getProperties(); + var context = {node: node, 'properties': properties}; + var geometry = feature.getGeometry(); + if (goog.isDef(geometry)) { + goog.asserts.assertInstanceof(geometry, ol.geom.LineString); + goog.object.set(context, 'geometryLayout', geometry.getLayout()); + goog.object.set(properties, 'rtept', geometry.getCoordinates()); + } + var parentNode = objectStack[objectStack.length - 1].node; + var orderedKeys = ol.format.GPX.RTE_SEQUENCE_[parentNode.namespaceURI]; + var values = ol.xml.makeSequence(properties, orderedKeys); + ol.xml.pushSerializeAndPop(/** @type {ol.xml.NodeStackItem} */ (context), + ol.format.GPX.RTE_SERIALIZERS_, ol.xml.OBJECT_PROPERTY_NODE_FACTORY, + values, objectStack, orderedKeys); +}; + + +/** + * @param {Node} node Node. + * @param {ol.Feature} feature Feature. + * @param {Array.<*>} objectStack Object stack. + * @private + */ +ol.format.GPX.writeTrk_ = function(node, feature, objectStack) { + var properties = feature.getProperties(); + var context = {node: node, 'properties': properties}; + var geometry = feature.getGeometry(); + if (goog.isDef(geometry)) { + goog.asserts.assertInstanceof(geometry, ol.geom.MultiLineString); + goog.object.set(properties, 'trkseg', geometry.getLineStrings()); + } + var parentNode = objectStack[objectStack.length - 1].node; + var orderedKeys = ol.format.GPX.TRK_SEQUENCE_[parentNode.namespaceURI]; + var values = ol.xml.makeSequence(properties, orderedKeys); + ol.xml.pushSerializeAndPop(/** @type {ol.xml.NodeStackItem} */ (context), + ol.format.GPX.TRK_SERIALIZERS_, ol.xml.OBJECT_PROPERTY_NODE_FACTORY, + values, objectStack, orderedKeys); +}; + + +/** + * @param {Node} node Node. + * @param {ol.geom.LineString} lineString LineString. + * @param {Array.<*>} objectStack Object stack. + * @private + */ +ol.format.GPX.writeTrkSeg_ = function(node, lineString, objectStack) { + var context = {node: node, 'geometryLayout': lineString.getLayout(), + 'properties': {}}; + ol.xml.pushSerializeAndPop(/** @type {ol.xml.NodeStackItem} */ (context), + ol.format.GPX.TRKSEG_SERIALIZERS_, ol.format.GPX.TRKSEG_NODE_FACTORY_, + lineString.getCoordinates(), objectStack); +}; + + +/** + * @param {Node} node Node. + * @param {ol.Feature} feature Feature. + * @param {Array.<*>} objectStack Object stack. + * @private + */ +ol.format.GPX.writeWpt_ = function(node, feature, objectStack) { + var context = objectStack[objectStack.length - 1]; + goog.asserts.assert(goog.isObject(context)); + goog.object.set(context, 'properties', feature.getProperties()); + var geometry = feature.getGeometry(); + if (goog.isDef(geometry)) { + goog.asserts.assertInstanceof(geometry, ol.geom.Point); + goog.object.set(context, 'geometryLayout', geometry.getLayout()); + ol.format.GPX.writeWptType_(node, geometry.getCoordinates(), objectStack); + } +}; + + +/** + * @const + * @type {Array.} + * @private + */ +ol.format.GPX.LINK_SEQUENCE_ = ['text', 'type']; + + +/** + * @type {Object.>} + * @private + */ +ol.format.GPX.LINK_SERIALIZERS_ = ol.xml.makeStructureNS( + ol.format.GPX.NAMESPACE_URIS_, { + 'text': ol.xml.makeChildAppender(ol.format.XSD.writeStringTextNode), + 'type': ol.xml.makeChildAppender(ol.format.XSD.writeStringTextNode) + }); + + +/** + * @const + * @type {Object.>} + * @private + */ +ol.format.GPX.RTE_SEQUENCE_ = ol.xml.makeStructureNS( + ol.format.GPX.NAMESPACE_URIS_, [ + 'name', 'cmt', 'desc', 'src', 'link', 'number', 'type', 'rtept' + ]); + + +/** + * @const + * @type {Object.>} + * @private + */ +ol.format.GPX.RTE_SERIALIZERS_ = ol.xml.makeStructureNS( + ol.format.GPX.NAMESPACE_URIS_, { + 'name': ol.xml.makeChildAppender(ol.format.XSD.writeStringTextNode), + 'cmt': ol.xml.makeChildAppender(ol.format.XSD.writeStringTextNode), + 'desc': ol.xml.makeChildAppender(ol.format.XSD.writeStringTextNode), + 'src': ol.xml.makeChildAppender(ol.format.XSD.writeStringTextNode), + 'link': ol.xml.makeChildAppender(ol.format.GPX.writeLink_), + 'number': ol.xml.makeChildAppender( + ol.format.XSD.writeNonNegativeIntegerTextNode), + 'type': ol.xml.makeChildAppender(ol.format.XSD.writeStringTextNode), + 'rtept': ol.xml.makeArraySerializer(ol.xml.makeChildAppender( + ol.format.GPX.writeWptType_)) + }); + + +/** + * @const + * @type {Object.>} + * @private + */ +ol.format.GPX.TRK_SEQUENCE_ = ol.xml.makeStructureNS( + ol.format.GPX.NAMESPACE_URIS_, [ + 'name', 'cmt', 'desc', 'src', 'link', 'number', 'type', 'trkseg' + ]); + + +/** + * @const + * @type {Object.>} + * @private + */ +ol.format.GPX.TRK_SERIALIZERS_ = ol.xml.makeStructureNS( + ol.format.GPX.NAMESPACE_URIS_, { + 'name': ol.xml.makeChildAppender(ol.format.XSD.writeStringTextNode), + 'cmt': ol.xml.makeChildAppender(ol.format.XSD.writeStringTextNode), + 'desc': ol.xml.makeChildAppender(ol.format.XSD.writeStringTextNode), + 'src': ol.xml.makeChildAppender(ol.format.XSD.writeStringTextNode), + 'link': ol.xml.makeChildAppender(ol.format.GPX.writeLink_), + 'number': ol.xml.makeChildAppender( + ol.format.XSD.writeNonNegativeIntegerTextNode), + 'type': ol.xml.makeChildAppender(ol.format.XSD.writeStringTextNode), + 'trkseg': ol.xml.makeArraySerializer(ol.xml.makeChildAppender( + ol.format.GPX.writeTrkSeg_)) + }); + + +/** + * @const + * @param {*} value Value. + * @param {Array.<*>} objectStack Object stack. + * @param {string=} opt_nodeName Node name. + * @return {Node|undefined} Node. + * @private + */ +ol.format.GPX.TRKSEG_NODE_FACTORY_ = ol.xml.makeSimpleNodeFactory('trkpt'); + + +/** + * @const + * @type {Object.>} + * @private + */ +ol.format.GPX.TRKSEG_SERIALIZERS_ = ol.xml.makeStructureNS( + ol.format.GPX.NAMESPACE_URIS_, { + 'trkpt': ol.xml.makeChildAppender(ol.format.GPX.writeWptType_) + }); + + +/** + * @const + * @type {Object.>} + * @private + */ +ol.format.GPX.WPT_TYPE_SEQUENCE_ = ol.xml.makeStructureNS( + ol.format.GPX.NAMESPACE_URIS_, [ + 'ele', 'time', 'magvar', 'geoidheight', 'name', 'cmt', 'desc', 'src', + 'link', 'sym', 'type', 'fix', 'sat', 'hdop', 'vdop', 'pdop', + 'ageofdgpsdata', 'dgpsid' + ]); + + +/** + * @type {Object.>} + * @private + */ +ol.format.GPX.WPT_TYPE_SERIALIZERS_ = ol.xml.makeStructureNS( + ol.format.GPX.NAMESPACE_URIS_, { + 'ele': ol.xml.makeChildAppender(ol.format.XSD.writeDecimalTextNode), + 'time': ol.xml.makeChildAppender(ol.format.XSD.writeDateTimeTextNode), + 'magvar': ol.xml.makeChildAppender(ol.format.XSD.writeDecimalTextNode), + 'geoidheight': ol.xml.makeChildAppender( + ol.format.XSD.writeDecimalTextNode), + 'name': ol.xml.makeChildAppender(ol.format.XSD.writeStringTextNode), + 'cmt': ol.xml.makeChildAppender(ol.format.XSD.writeStringTextNode), + 'desc': ol.xml.makeChildAppender(ol.format.XSD.writeStringTextNode), + 'src': ol.xml.makeChildAppender(ol.format.XSD.writeStringTextNode), + 'link': ol.xml.makeChildAppender(ol.format.GPX.writeLink_), + 'sym': ol.xml.makeChildAppender(ol.format.XSD.writeStringTextNode), + 'type': ol.xml.makeChildAppender(ol.format.XSD.writeStringTextNode), + 'fix': ol.xml.makeChildAppender(ol.format.XSD.writeStringTextNode), + 'sat': ol.xml.makeChildAppender( + ol.format.XSD.writeNonNegativeIntegerTextNode), + 'hdop': ol.xml.makeChildAppender(ol.format.XSD.writeDecimalTextNode), + 'vdop': ol.xml.makeChildAppender(ol.format.XSD.writeDecimalTextNode), + 'pdop': ol.xml.makeChildAppender(ol.format.XSD.writeDecimalTextNode), + 'ageofdgpsdata': ol.xml.makeChildAppender( + ol.format.XSD.writeDecimalTextNode), + 'dgpsid': ol.xml.makeChildAppender( + ol.format.XSD.writeNonNegativeIntegerTextNode) + }); + + +/** + * @const + * @type {Object.} + * @private + */ +ol.format.GPX.GEOMETRY_TYPE_TO_NODENAME_ = { + 'Point': 'wpt', + 'LineString': 'rte', + 'MultiLineString': 'trk' +}; + + +/** + * @const + * @param {*} value Value. + * @param {Array.<*>} objectStack Object stack. + * @param {string=} opt_nodeName Node name. + * @return {Node|undefined} Node. + * @private + */ +ol.format.GPX.GPX_NODE_FACTORY_ = function(value, objectStack, opt_nodeName) { + goog.asserts.assertInstanceof(value, ol.Feature); + var geometry = value.getGeometry(); + if (goog.isDef(geometry)) { + var parentNode = objectStack[objectStack.length - 1].node; + goog.asserts.assert(ol.xml.isNode(parentNode)); + return ol.xml.createElementNS(parentNode.namespaceURI, + ol.format.GPX.GEOMETRY_TYPE_TO_NODENAME_[geometry.getType()]); + } +}; + + +/** + * @const + * @type {Object.>} + * @private + */ +ol.format.GPX.GPX_SERIALIZERS_ = ol.xml.makeStructureNS( + ol.format.GPX.NAMESPACE_URIS_, { + 'rte': ol.xml.makeChildAppender(ol.format.GPX.writeRte_), + 'trk': ol.xml.makeChildAppender(ol.format.GPX.writeTrk_), + 'wpt': ol.xml.makeChildAppender(ol.format.GPX.writeWpt_) + }); + + + +/** + * @constructor + * @extends {ol.format.GPX} + * @todo stability experimental + */ +ol.format.GPX.V1_1 = function() { + goog.base(this); +}; +goog.inherits(ol.format.GPX.V1_1, ol.format.GPX); + + +/** + * @inheritDoc + */ +ol.format.GPX.V1_1.prototype.writeFeaturesNode = function(features) { + //FIXME Serialize metadata + var gpx = ol.xml.createElementNS('http://www.topografix.com/GPX/1/1', 'gpx'); + ol.xml.pushSerializeAndPop(/** @type {ol.xml.NodeStackItem} */ + ({node: gpx}), ol.format.GPX.GPX_SERIALIZERS_, + ol.format.GPX.GPX_NODE_FACTORY_, features, []); + return gpx; +}; diff --git a/float-no-zero/ol/ol/format/igcformat.exports b/float-no-zero/ol/ol/format/igcformat.exports new file mode 100644 index 0000000000..f5faa5c4fb --- /dev/null +++ b/float-no-zero/ol/ol/format/igcformat.exports @@ -0,0 +1,3 @@ +@exportSymbol ol.format.IGC +@exportProperty ol.format.IGC.prototype.readFeature +@exportProperty ol.format.IGC.prototype.readFeatures diff --git a/float-no-zero/ol/ol/format/igcformat.js b/float-no-zero/ol/ol/format/igcformat.js new file mode 100644 index 0000000000..449abe3e39 --- /dev/null +++ b/float-no-zero/ol/ol/format/igcformat.js @@ -0,0 +1,177 @@ +goog.provide('ol.format.IGC'); +goog.provide('ol.format.IGCZ'); + +goog.require('goog.asserts'); +goog.require('goog.string'); +goog.require('goog.string.newlines'); +goog.require('ol.Feature'); +goog.require('ol.format.TextFeature'); +goog.require('ol.geom.LineString'); +goog.require('ol.proj'); + + +/** + * @enum {string} + */ +ol.format.IGCZ = { + BAROMETRIC: 'barometric', + GPS: 'gps', + NONE: 'none' +}; + + + +/** + * @constructor + * @extends {ol.format.TextFeature} + * @param {olx.format.IGCOptions=} opt_options Options. + * @todo stability experimental + */ +ol.format.IGC = function(opt_options) { + + var options = goog.isDef(opt_options) ? opt_options : {}; + + goog.base(this); + + /** + * @private + * @type {ol.format.IGCZ} + */ + this.altitudeMode_ = goog.isDef(options.altitudeMode) ? + options.altitudeMode : ol.format.IGCZ.NONE; + +}; +goog.inherits(ol.format.IGC, ol.format.TextFeature); + + +/** + * @const + * @type {Array.} + * @private + */ +ol.format.IGC.EXTENSIONS_ = ['.igc']; + + +/** + * @const + * @type {RegExp} + * @private + */ +ol.format.IGC.B_RECORD_RE_ = + /^B(\d{2})(\d{2})(\d{2})(\d{2})(\d{5})([NS])(\d{3})(\d{5})([EW])([AV])(\d{5})(\d{5})/; + + +/** + * @const + * @type {RegExp} + * @private + */ +ol.format.IGC.H_RECORD_RE_ = /^H.([A-Z]{3}).*?:(.*)/; + + +/** + * @const + * @type {RegExp} + * @private + */ +ol.format.IGC.HFDTE_RECORD_RE_ = /^HFDTE(\d{2})(\d{2})(\d{2})/; + + +/** + * @inheritDoc + */ +ol.format.IGC.prototype.getExtensions = function() { + return ol.format.IGC.EXTENSIONS_; +}; + + +/** + * @inheritDoc + */ +ol.format.IGC.prototype.readFeatureFromText = function(text) { + var altitudeMode = this.altitudeMode_; + var lines = goog.string.newlines.splitLines(text); + /** @type {Object.} */ + var properties = {}; + var flatCoordinates = []; + var year = 2000; + var month = 0; + var day = 1; + var i, ii; + for (i = 0, ii = lines.length; i < ii; ++i) { + var line = lines[i]; + var m; + if (line.charAt(0) == 'B') { + m = ol.format.IGC.B_RECORD_RE_.exec(line); + if (m) { + var hour = parseInt(m[1], 10); + var minute = parseInt(m[2], 10); + var second = parseInt(m[3], 10); + var y = parseInt(m[4], 10) + parseInt(m[5], 10) / 60000; + if (m[6] == 'S') { + y = -y; + } + var x = parseInt(m[7], 10) + parseInt(m[8], 10) / 60000; + if (m[9] == 'W') { + x = -x; + } + flatCoordinates.push(x, y); + if (altitudeMode != ol.format.IGCZ.NONE) { + var z; + if (altitudeMode == ol.format.IGCZ.GPS) { + z = parseInt(m[11], 10); + } else if (altitudeMode == ol.format.IGCZ.BAROMETRIC) { + z = parseInt(m[12], 10); + } else { + goog.asserts.fail(); + z = 0; + } + flatCoordinates.push(z); + } + var dateTime = Date.UTC(year, month, day, hour, minute, second); + flatCoordinates.push(dateTime / 1000); + } + } else if (line.charAt(0) == 'H') { + m = ol.format.IGC.HFDTE_RECORD_RE_.exec(line); + if (m) { + day = parseInt(m[1], 10); + month = parseInt(m[2], 10) - 1; + year = 2000 + parseInt(m[3], 10); + } else { + m = ol.format.IGC.H_RECORD_RE_.exec(line); + if (m) { + properties[m[1]] = goog.string.trim(m[2]); + m = ol.format.IGC.HFDTE_RECORD_RE_.exec(line); + } + } + } + } + var lineString = new ol.geom.LineString(null); + var layout = altitudeMode == ol.format.IGCZ.NONE ? + ol.geom.GeometryLayout.XYM : ol.geom.GeometryLayout.XYZM; + lineString.setFlatCoordinates(layout, flatCoordinates); + var feature = new ol.Feature(lineString); + feature.setValues(properties); + return feature; +}; + + +/** + * @inheritDoc + */ +ol.format.IGC.prototype.readFeaturesFromText = function(text) { + var feature = this.readFeatureFromText(text); + if (!goog.isNull(feature)) { + return [feature]; + } else { + return []; + } +}; + + +/** + * @inheritDoc + */ +ol.format.IGC.prototype.readProjectionFromText = function(text) { + return ol.proj.get('EPSG:4326'); +}; diff --git a/float-no-zero/ol/ol/format/jsonfeatureformat.js b/float-no-zero/ol/ol/format/jsonfeatureformat.js new file mode 100644 index 0000000000..9e2e3f9417 --- /dev/null +++ b/float-no-zero/ol/ol/format/jsonfeatureformat.js @@ -0,0 +1,155 @@ +goog.provide('ol.format.JSONFeature'); + +goog.require('goog.asserts'); +goog.require('goog.json'); +goog.require('ol.format.Feature'); +goog.require('ol.format.FormatType'); + + + +/** + * @constructor + * @extends {ol.format.Feature} + */ +ol.format.JSONFeature = function() { + goog.base(this); +}; +goog.inherits(ol.format.JSONFeature, ol.format.Feature); + + +/** + * @param {Document|Node|Object|string} source Source. + * @private + * @return {Object} Object. + */ +ol.format.JSONFeature.prototype.getObject_ = function(source) { + if (goog.isObject(source)) { + return source; + } else if (goog.isString(source)) { + var object = goog.json.parse(source); + return goog.isDef(object) ? object : null; + } else { + goog.asserts.fail(); + return null; + } +}; + + +/** + * @inheritDoc + */ +ol.format.JSONFeature.prototype.getType = function() { + return ol.format.FormatType.JSON; +}; + + +/** + * @inheritDoc + */ +ol.format.JSONFeature.prototype.readFeature = function(source) { + return this.readFeatureFromObject(this.getObject_(source)); +}; + + +/** + * @inheritDoc + */ +ol.format.JSONFeature.prototype.readFeatures = function(source) { + return this.readFeaturesFromObject(this.getObject_(source)); +}; + + +/** + * @param {Object} object Object. + * @protected + * @return {ol.Feature} Feature. + */ +ol.format.JSONFeature.prototype.readFeatureFromObject = goog.abstractMethod; + + +/** + * @param {Object} object Object. + * @protected + * @return {Array.} Features. + */ +ol.format.JSONFeature.prototype.readFeaturesFromObject = goog.abstractMethod; + + +/** + * @inheritDoc + */ +ol.format.JSONFeature.prototype.readGeometry = function(source) { + return this.readGeometryFromObject(this.getObject_(source)); +}; + + +/** + * @param {Object} object Object. + * @protected + * @return {ol.geom.Geometry} Geometry. + */ +ol.format.JSONFeature.prototype.readGeometryFromObject = goog.abstractMethod; + + +/** + * @inheritDoc + */ +ol.format.JSONFeature.prototype.readProjection = function(source) { + return this.readProjectionFromObject(this.getObject_(source)); +}; + + +/** + * @param {Object} object Object. + * @protected + * @return {ol.proj.Projection} Projection. + */ +ol.format.JSONFeature.prototype.readProjectionFromObject = goog.abstractMethod; + + +/** + * @inheritDoc + */ +ol.format.JSONFeature.prototype.writeFeature = function(feature) { + return this.writeFeatureObject(feature); +}; + + +/** + * @param {ol.Feature} feature Feature. + * @protected + * @return {Object} Object. + */ +ol.format.JSONFeature.prototype.writeFeatureObject = goog.abstractMethod; + + +/** + * @inheritDoc + */ +ol.format.JSONFeature.prototype.writeFeatures = function(features) { + return this.writeFeaturesObject(features); +}; + + +/** + * @param {Array.} features Features. + * @protected + * @return {Object} Object. + */ +ol.format.JSONFeature.prototype.writeFeaturesObject = goog.abstractMethod; + + +/** + * @inheritDoc + */ +ol.format.JSONFeature.prototype.writeGeometry = function(geometry) { + return this.writeGeometryObject(geometry); +}; + + +/** + * @param {ol.geom.Geometry} geometry Geometry. + * @protected + * @return {Object} Object. + */ +ol.format.JSONFeature.prototype.writeGeometryObject = goog.abstractMethod; diff --git a/float-no-zero/ol/ol/format/kmlformat.exports b/float-no-zero/ol/ol/format/kmlformat.exports new file mode 100644 index 0000000000..72929f6fd4 --- /dev/null +++ b/float-no-zero/ol/ol/format/kmlformat.exports @@ -0,0 +1,6 @@ +@exportSymbol ol.format.KML +@exportProperty ol.format.KML.prototype.readFeature +@exportProperty ol.format.KML.prototype.readFeatures +@exportProperty ol.format.KML.prototype.readGeometry +@exportProperty ol.format.KML.prototype.readName +@exportProperty ol.format.KML.prototype.readProjection diff --git a/float-no-zero/ol/ol/format/kmlformat.js b/float-no-zero/ol/ol/format/kmlformat.js new file mode 100644 index 0000000000..b6d73fbb56 --- /dev/null +++ b/float-no-zero/ol/ol/format/kmlformat.js @@ -0,0 +1,1589 @@ +// FIXME http://earth.google.com/kml/1.0 namespace? +// FIXME why does node.getAttribute return an unknown type? +// FIXME text + +goog.provide('ol.format.KML'); + +goog.require('goog.Uri'); +goog.require('goog.array'); +goog.require('goog.asserts'); +goog.require('goog.dom.NodeType'); +goog.require('goog.math'); +goog.require('goog.object'); +goog.require('goog.string'); +goog.require('ol.Feature'); +goog.require('ol.feature'); +goog.require('ol.format.XMLFeature'); +goog.require('ol.format.XSD'); +goog.require('ol.geom.GeometryCollection'); +goog.require('ol.geom.GeometryType'); +goog.require('ol.geom.LineString'); +goog.require('ol.geom.MultiLineString'); +goog.require('ol.geom.MultiPoint'); +goog.require('ol.geom.MultiPolygon'); +goog.require('ol.geom.Point'); +goog.require('ol.geom.Polygon'); +goog.require('ol.proj'); +goog.require('ol.style.Fill'); +goog.require('ol.style.Icon'); +goog.require('ol.style.IconAnchorOrigin'); +goog.require('ol.style.IconAnchorUnits'); +goog.require('ol.style.Image'); +goog.require('ol.style.Stroke'); +goog.require('ol.style.Style'); +goog.require('ol.xml'); + + +/** + * @typedef {{x: number, xunits: (ol.style.IconAnchorUnits|undefined), + * y: number, yunits: (ol.style.IconAnchorUnits|undefined)}} + */ +ol.format.KMLVec2_; + + +/** + * @typedef {{flatCoordinates: Array., + * whens: Array.}} + */ +ol.format.KMLGxTrackObject_; + + + +/** + * @constructor + * @extends {ol.format.XMLFeature} + * @param {olx.format.KMLOptions=} opt_options Options. + * @todo stability experimental + */ +ol.format.KML = function(opt_options) { + + var options = goog.isDef(opt_options) ? opt_options : {}; + + goog.base(this); + + var defaultStyle = goog.isDef(options.defaultStyle) ? + options.defaultStyle : ol.format.KML.DEFAULT_STYLE_ARRAY_; + + /** @type {Object.|string)>} */ + var sharedStyles = {}; + + var findStyle = + /** + * @param {Array.|string|undefined} styleValue Style + * value. + * @return {Array.} Style. + */ + function(styleValue) { + if (goog.isArray(styleValue)) { + return styleValue; + } else if (goog.isString(styleValue)) { + // KML files in the wild occasionally forget the leading `#` on styleUrls + // defined in the same document. Add a leading `#` if it enables to find + // a style. + if (!(styleValue in sharedStyles) && ('#' + styleValue in sharedStyles)) { + styleValue = '#' + styleValue; + } + return findStyle(sharedStyles[styleValue]); + } else { + return defaultStyle; + } + }; + + /** + * @private + * @type {Object.|string)>} + */ + this.sharedStyles_ = sharedStyles; + + /** + * @private + * @type {ol.feature.FeatureStyleFunction} + */ + this.featureStyleFunction_ = + /** + * @param {number} resolution Resolution. + * @return {Array.} Style. + * @this {ol.Feature} + */ + function(resolution) { + var style = /** @type {Array.|undefined} */ + (this.get('Style')); + if (goog.isDef(style)) { + return style; + } + var styleUrl = /** @type {string|undefined} */ (this.get('styleUrl')); + if (goog.isDef(styleUrl)) { + return findStyle(styleUrl); + } + return defaultStyle; + }; + +}; +goog.inherits(ol.format.KML, ol.format.XMLFeature); + + +/** + * @const + * @type {Array.} + * @private + */ +ol.format.KML.EXTENSIONS_ = ['.kml']; + + +/** + * @const + * @type {Array.} + * @private + */ +ol.format.KML.GX_NAMESPACE_URIS_ = [ + 'http://www.google.com/kml/ext/2.2' +]; + + +/** + * @const + * @type {Array.} + * @private + */ +ol.format.KML.NAMESPACE_URIS_ = [ + null, + 'http://earth.google.com/kml/2.0', + 'http://earth.google.com/kml/2.1', + 'http://earth.google.com/kml/2.2', + 'http://www.opengis.net/kml/2.2' +]; + + +/** + * @const + * @type {ol.Color} + * @private + */ +ol.format.KML.DEFAULT_COLOR_ = [255, 255, 255, 1]; + + +/** + * @const + * @type {ol.style.Fill} + * @private + */ +ol.format.KML.DEFAULT_FILL_STYLE_ = new ol.style.Fill({ + color: ol.format.KML.DEFAULT_COLOR_ +}); + + +/** + * @const + * @type {ol.Size} + * @private + */ +ol.format.KML.DEFAULT_IMAGE_STYLE_ANCHOR_ = [2, 20]; // FIXME maybe [8, 32] ? + + +/** + * @const + * @type {ol.style.IconAnchorUnits} + * @private + */ +ol.format.KML.DEFAULT_IMAGE_STYLE_ANCHOR_X_UNITS_ = + ol.style.IconAnchorUnits.PIXELS; + + +/** + * @const + * @type {ol.style.IconAnchorUnits} + * @private + */ +ol.format.KML.DEFAULT_IMAGE_STYLE_ANCHOR_Y_UNITS_ = + ol.style.IconAnchorUnits.PIXELS; + + +/** + * @const + * @type {ol.Size} + * @private + */ +ol.format.KML.DEFAULT_IMAGE_STYLE_SIZE_ = [32, 32]; + + +/** + * @const + * @type {string} + * @private + */ +ol.format.KML.DEFAULT_IMAGE_STYLE_SRC_ = + 'https://maps.google.com/mapfiles/kml/pushpin/ylw-pushpin.png'; + + +/** + * @const + * @type {ol.style.Image} + * @private + */ +ol.format.KML.DEFAULT_IMAGE_STYLE_ = new ol.style.Icon({ + anchor: ol.format.KML.DEFAULT_IMAGE_STYLE_ANCHOR_, + anchorXUnits: ol.format.KML.DEFAULT_IMAGE_STYLE_ANCHOR_X_UNITS_, + anchorYUnits: ol.format.KML.DEFAULT_IMAGE_STYLE_ANCHOR_Y_UNITS_, + crossOrigin: 'anonymous', + rotation: 0, + scale: 1, + size: ol.format.KML.DEFAULT_IMAGE_STYLE_SIZE_, + src: ol.format.KML.DEFAULT_IMAGE_STYLE_SRC_ +}); + + +/** + * @const + * @type {ol.style.Stroke} + * @private + */ +ol.format.KML.DEFAULT_STROKE_STYLE_ = new ol.style.Stroke({ + color: ol.format.KML.DEFAULT_COLOR_, + width: 1 +}); + + +/** + * @const + * @type {ol.style.Style} + * @private + */ +ol.format.KML.DEFAULT_STYLE_ = new ol.style.Style({ + fill: ol.format.KML.DEFAULT_FILL_STYLE_, + image: ol.format.KML.DEFAULT_IMAGE_STYLE_, + text: null, // FIXME + stroke: ol.format.KML.DEFAULT_STROKE_STYLE_, + zIndex: 0 +}); + + +/** + * @const + * @type {Array.} + * @private + */ +ol.format.KML.DEFAULT_STYLE_ARRAY_ = [ol.format.KML.DEFAULT_STYLE_]; + + +/** + * @const + * @type {Object.} + * @private + */ +ol.format.KML.ICON_ANCHOR_UNITS_MAP_ = { + 'fraction': ol.style.IconAnchorUnits.FRACTION, + 'pixels': ol.style.IconAnchorUnits.PIXELS +}; + + +/** + * @param {Node} node Node. + * @private + * @return {ol.Color|undefined} Color. + */ +ol.format.KML.readColor_ = function(node) { + var s = ol.xml.getAllTextContent(node, false); + // The KML specification states that colors should not include a leading `#` + // but we tolerate them. + var m = /^\s*#?\s*([0-9A-Fa-f]{8})\s*$/.exec(s); + if (m) { + var hexColor = m[1]; + return [ + parseInt(hexColor.substr(6, 2), 16), + parseInt(hexColor.substr(4, 2), 16), + parseInt(hexColor.substr(2, 2), 16), + parseInt(hexColor.substr(0, 2), 16) / 255 + ]; + + } else { + return undefined; + } +}; + + +/** + * @param {Node} node Node. + * @private + * @return {Array.|undefined} Flat coordinates. + */ +ol.format.KML.readFlatCoordinates_ = function(node) { + var s = ol.xml.getAllTextContent(node, false); + var flatCoordinates = []; + // The KML specification states that coordinate tuples should not include + // spaces, but we tolerate them. + var re = + /^\s*([+\-]?\d*\.?\d+(?:e[+\-]?\d+)?)\s*,\s*([+\-]?\d*\.?\d+(?:e[+\-]?\d+)?)(?:\s*,\s*([+\-]?\d*\.?\d+(?:e[+\-]?\d+)?))?\s*/i; + var m; + while ((m = re.exec(s))) { + var x = parseFloat(m[1]); + var y = parseFloat(m[2]); + var z = m[3] ? parseFloat(m[3]) : 0; + flatCoordinates.push(x, y, z); + s = s.substr(m[0].length); + } + if (s !== '') { + return undefined; + } + return flatCoordinates; +}; + + +/** + * @param {Node} node Node. + * @private + * @return {string|undefined} Style URL. + */ +ol.format.KML.readStyleUrl_ = function(node) { + var s = goog.string.trim(ol.xml.getAllTextContent(node, false)); + if (goog.isDefAndNotNull(node.baseURI)) { + return goog.Uri.resolve(node.baseURI, s).toString(); + } else { + return s; + } + +}; + + +/** + * @param {Node} node Node. + * @private + * @return {string} URI. + */ +ol.format.KML.readURI_ = function(node) { + var s = ol.xml.getAllTextContent(node, false); + if (goog.isDefAndNotNull(node.baseURI)) { + return goog.Uri.resolve(node.baseURI, goog.string.trim(s)).toString(); + } else { + return goog.string.trim(s); + } +}; + + +/** + * @param {Node} node Node. + * @private + * @return {ol.format.KMLVec2_} Vec2. + */ +ol.format.KML.readVec2_ = function(node) { + var xunits = node.getAttribute('xunits'); + var yunits = node.getAttribute('yunits'); + return { + x: parseFloat(node.getAttribute('x')), + xunits: ol.format.KML.ICON_ANCHOR_UNITS_MAP_[xunits], + y: parseFloat(node.getAttribute('y')), + yunits: ol.format.KML.ICON_ANCHOR_UNITS_MAP_[yunits] + }; +}; + + +/** + * @param {Node} node Node. + * @private + * @return {number|undefined} Scale. + */ +ol.format.KML.readScale_ = function(node) { + var number = ol.format.XSD.readDecimal(node); + if (goog.isDef(number)) { + return Math.sqrt(number); + } else { + return undefined; + } +}; + + +/** + * @param {Node} node Node. + * @param {Array.<*>} objectStack Object stack. + * @private + * @return {Array.|string|undefined} StyleMap. + */ +ol.format.KML.readStyleMapValue_ = function(node, objectStack) { + return ol.xml.pushParseAndPop( + /** @type {Array.|string|undefined} */ (undefined), + ol.format.KML.STYLE_MAP_PARSERS_, node, objectStack); +}; + + +/** + * @param {Node} node Node. + * @param {Array.<*>} objectStack Object stack. + * @private + */ +ol.format.KML.IconStyleParser_ = function(node, objectStack) { + goog.asserts.assert(node.nodeType == goog.dom.NodeType.ELEMENT); + goog.asserts.assert(node.localName == 'IconStyle'); + // FIXME gx:x + // FIXME gx:y + // FIXME gx:w + // FIXME gx:h + // FIXME refreshMode + // FIXME refreshInterval + // FIXME viewRefreshTime + // FIXME viewBoundScale + // FIXME viewFormat + // FIXME httpQuery + var object = ol.xml.pushParseAndPop( + {}, ol.format.KML.ICON_STYLE_PARSERS_, node, objectStack); + if (!goog.isDef(object)) { + return; + } + var styleObject = /** @type {Object} */ (objectStack[objectStack.length - 1]); + goog.asserts.assert(goog.isObject(styleObject)); + var IconObject = /** @type {Object} */ (goog.object.get(object, 'Icon', {})); + var src; + var href = /** @type {string|undefined} */ + (goog.object.get(IconObject, 'href')); + if (goog.isDef(href)) { + src = href; + } else { + src = ol.format.KML.DEFAULT_IMAGE_STYLE_SRC_; + } + var anchor, anchorXUnits, anchorYUnits; + var hotSpot = /** @type {ol.format.KMLVec2_|undefined} */ + (goog.object.get(object, 'hotSpot')); + if (goog.isDef(hotSpot)) { + anchor = [hotSpot.x, hotSpot.y]; + anchorXUnits = hotSpot.xunits; + anchorYUnits = hotSpot.yunits; + } else if (src === ol.format.KML.DEFAULT_IMAGE_STYLE_SRC_) { + anchor = ol.format.KML.DEFAULT_IMAGE_STYLE_ANCHOR_; + anchorXUnits = ol.format.KML.DEFAULT_IMAGE_STYLE_ANCHOR_X_UNITS_; + anchorYUnits = ol.format.KML.DEFAULT_IMAGE_STYLE_ANCHOR_Y_UNITS_; + } else if (/^http:\/\/maps\.(?:google|gstatic)\.com\//.test(src)) { + anchor = [0.5, 1]; + anchorXUnits = ol.style.IconAnchorUnits.FRACTION; + anchorYUnits = ol.style.IconAnchorUnits.FRACTION; + } + + var rotation; + var heading = /** @type {number|undefined} */ + (goog.object.get(object, 'heading')); + if (goog.isDef(heading)) { + rotation = goog.math.toRadians(heading); + } + + var scale = /** @type {number|undefined} */ + (goog.object.get(object, 'scale')); + var size; + if (src == ol.format.KML.DEFAULT_IMAGE_STYLE_SRC_) { + size = ol.format.KML.DEFAULT_IMAGE_STYLE_SIZE_; + } + + var imageStyle = new ol.style.Icon({ + anchor: anchor, + anchorOrigin: ol.style.IconAnchorOrigin.TOP_LEFT, + anchorXUnits: anchorXUnits, + anchorYUnits: anchorYUnits, + crossOrigin: 'anonymous', // FIXME should this be configurable? + rotation: rotation, + scale: scale, + size: size, + src: src + }); + goog.object.set(styleObject, 'imageStyle', imageStyle); +}; + + +/** + * @param {Node} node Node. + * @param {Array.<*>} objectStack Object stack. + * @private + */ +ol.format.KML.LineStyleParser_ = function(node, objectStack) { + goog.asserts.assert(node.nodeType == goog.dom.NodeType.ELEMENT); + goog.asserts.assert(node.localName == 'LineStyle'); + // FIXME colorMode + // FIXME gx:outerColor + // FIXME gx:outerWidth + // FIXME gx:physicalWidth + // FIXME gx:labelVisibility + var object = ol.xml.pushParseAndPop( + {}, ol.format.KML.LINE_STYLE_PARSERS_, node, objectStack); + if (!goog.isDef(object)) { + return; + } + var styleObject = objectStack[objectStack.length - 1]; + goog.asserts.assert(goog.isObject(styleObject)); + var strokeStyle = new ol.style.Stroke({ + color: /** @type {ol.Color} */ + (goog.object.get(object, 'color', ol.format.KML.DEFAULT_COLOR_)), + width: /** @type {number} */ (goog.object.get(object, 'width', 1)) + }); + goog.object.set(styleObject, 'strokeStyle', strokeStyle); +}; + + +/** + * @param {Node} node Node. + * @param {Array.<*>} objectStack Object stack. + * @private + */ +ol.format.KML.PolyStyleParser_ = function(node, objectStack) { + goog.asserts.assert(node.nodeType == goog.dom.NodeType.ELEMENT); + goog.asserts.assert(node.localName == 'PolyStyle'); + // FIXME colorMode + var object = ol.xml.pushParseAndPop( + {}, ol.format.KML.POLY_STYLE_PARSERS_, node, objectStack); + if (!goog.isDef(object)) { + return; + } + var styleObject = objectStack[objectStack.length - 1]; + goog.asserts.assert(goog.isObject(styleObject)); + var fillStyle = new ol.style.Fill({ + color: /** @type {ol.Color} */ + (goog.object.get(object, 'color', ol.format.KML.DEFAULT_COLOR_)) + }); + goog.object.set(styleObject, 'fillStyle', fillStyle); + var fill = /** @type {boolean|undefined} */ (goog.object.get(object, 'fill')); + if (goog.isDef(fill)) { + goog.object.set(styleObject, 'fill', fill); + } + var outline = + /** @type {boolean|undefined} */ (goog.object.get(object, 'outline')); + if (goog.isDef(outline)) { + goog.object.set(styleObject, 'outline', outline); + } +}; + + +/** + * @param {Node} node Node. + * @param {Array.<*>} objectStack Object stack. + * @private + * @return {Array.} LinearRing flat coordinates. + */ +ol.format.KML.readFlatLinearRing_ = function(node, objectStack) { + goog.asserts.assert(node.nodeType == goog.dom.NodeType.ELEMENT); + goog.asserts.assert(node.localName == 'LinearRing'); + return /** @type {Array.} */ (ol.xml.pushParseAndPop( + null, ol.format.KML.FLAT_LINEAR_RING_PARSERS_, node, objectStack)); +}; + + +/** + * @param {Node} node Node. + * @param {Array.<*>} objectStack Object stack. + * @private + */ +ol.format.KML.gxCoordParser_ = function(node, objectStack) { + goog.asserts.assert(node.nodeType == goog.dom.NodeType.ELEMENT); + goog.asserts.assert(goog.array.indexOf( + ol.format.KML.GX_NAMESPACE_URIS_, node.namespaceURI) != -1); + goog.asserts.assert(node.localName == 'coord'); + var gxTrackObject = /** @type {ol.format.KMLGxTrackObject_} */ + (objectStack[objectStack.length - 1]); + goog.asserts.assert(goog.isObject(gxTrackObject)); + var flatCoordinates = gxTrackObject.flatCoordinates; + var s = ol.xml.getAllTextContent(node, false); + var re = + /^\s*([+\-]?\d+(?:\.\d*)?(?:e[+\-]?\d*)?)\s+([+\-]?\d+(?:\.\d*)?(?:e[+\-]?\d*)?)\s+([+\-]?\d+(?:\.\d*)?(?:e[+\-]?\d*)?)\s*$/i; + var m = re.exec(s); + if (m) { + var x = parseFloat(m[1]); + var y = parseFloat(m[2]); + var z = parseFloat(m[3]); + flatCoordinates.push(x, y, z, 0); + } else { + flatCoordinates.push(0, 0, 0, 0); + } +}; + + +/** + * @param {Node} node Node. + * @param {Array.<*>} objectStack Object stack. + * @private + * @return {ol.geom.MultiLineString|undefined} MultiLineString. + */ +ol.format.KML.readGxMultiTrack_ = function(node, objectStack) { + goog.asserts.assert(node.nodeType == goog.dom.NodeType.ELEMENT); + goog.asserts.assert(goog.array.indexOf( + ol.format.KML.GX_NAMESPACE_URIS_, node.namespaceURI) != -1); + goog.asserts.assert(node.localName == 'MultiTrack'); + var lineStrings = ol.xml.pushParseAndPop( + /** @type {Array.} */ ([]), + ol.format.KML.GX_MULTITRACK_GEOMETRY_PARSERS_, node, objectStack); + if (!goog.isDef(lineStrings)) { + return undefined; + } + var multiLineString = new ol.geom.MultiLineString(null); + multiLineString.setLineStrings(lineStrings); + return multiLineString; +}; + + +/** + * @param {Node} node Node. + * @param {Array.<*>} objectStack Object stack. + * @private + * @return {ol.geom.LineString|undefined} LineString. + */ +ol.format.KML.readGxTrack_ = function(node, objectStack) { + goog.asserts.assert(node.nodeType == goog.dom.NodeType.ELEMENT); + goog.asserts.assert(goog.array.indexOf( + ol.format.KML.GX_NAMESPACE_URIS_, node.namespaceURI) != -1); + goog.asserts.assert(node.localName == 'Track'); + var gxTrackObject = ol.xml.pushParseAndPop( + /** @type {ol.format.KMLGxTrackObject_} */ ({ + flatCoordinates: [], + whens: [] + }), ol.format.KML.GX_TRACK_PARSERS_, node, objectStack); + if (!goog.isDef(gxTrackObject)) { + return undefined; + } + var flatCoordinates = gxTrackObject.flatCoordinates; + var whens = gxTrackObject.whens; + goog.asserts.assert(flatCoordinates.length / 4 == whens.length); + var i, ii; + for (i = 0, ii = Math.min(flatCoordinates.length, whens.length); i < ii; + ++i) { + flatCoordinates[4 * i + 3] = whens[i]; + } + var lineString = new ol.geom.LineString(null); + lineString.setFlatCoordinates(ol.geom.GeometryLayout.XYZM, flatCoordinates); + return lineString; +}; + + +/** + * @param {Node} node Node. + * @param {Array.<*>} objectStack Object stack. + * @private + * @return {Object} Icon object. + */ +ol.format.KML.readIcon_ = function(node, objectStack) { + goog.asserts.assert(node.nodeType == goog.dom.NodeType.ELEMENT); + goog.asserts.assert(node.localName == 'Icon'); + var iconObject = ol.xml.pushParseAndPop( + {}, ol.format.KML.ICON_PARSERS_, node, objectStack); + if (goog.isDef(iconObject)) { + return iconObject; + } else { + return null; + } +}; + + +/** + * @param {Node} node Node. + * @param {Array.<*>} objectStack Object stack. + * @private + * @return {Array.} Flat coordinates. + */ +ol.format.KML.readFlatCoordinatesFromNode_ = function(node, objectStack) { + goog.asserts.assert(node.nodeType == goog.dom.NodeType.ELEMENT); + return /** @type {Array.} */ (ol.xml.pushParseAndPop(null, + ol.format.KML.GEOMETRY_FLAT_COORDINATES_PARSERS_, node, objectStack)); +}; + + +/** + * @param {Node} node Node. + * @param {Array.<*>} objectStack Object stack. + * @private + * @return {ol.geom.LineString|undefined} LineString. + */ +ol.format.KML.readLineString_ = function(node, objectStack) { + goog.asserts.assert(node.nodeType == goog.dom.NodeType.ELEMENT); + goog.asserts.assert(node.localName == 'LineString'); + var flatCoordinates = + ol.format.KML.readFlatCoordinatesFromNode_(node, objectStack); + if (goog.isDef(flatCoordinates)) { + var lineString = new ol.geom.LineString(null); + lineString.setFlatCoordinates(ol.geom.GeometryLayout.XYZ, flatCoordinates); + return lineString; + } else { + return undefined; + } +}; + + +/** + * @param {Node} node Node. + * @param {Array.<*>} objectStack Object stack. + * @private + * @return {ol.geom.Polygon|undefined} Polygon. + */ +ol.format.KML.readLinearRing_ = function(node, objectStack) { + goog.asserts.assert(node.nodeType == goog.dom.NodeType.ELEMENT); + goog.asserts.assert(node.localName == 'LinearRing'); + var flatCoordinates = + ol.format.KML.readFlatCoordinatesFromNode_(node, objectStack); + if (goog.isDef(flatCoordinates)) { + var polygon = new ol.geom.Polygon(null); + polygon.setFlatCoordinates(ol.geom.GeometryLayout.XYZ, flatCoordinates, + [flatCoordinates.length]); + return polygon; + } else { + return undefined; + } +}; + + +/** + * @param {Node} node Node. + * @param {Array.<*>} objectStack Object stack. + * @private + * @return {ol.geom.Geometry} Geometry. + */ +ol.format.KML.readMultiGeometry_ = function(node, objectStack) { + goog.asserts.assert(node.nodeType == goog.dom.NodeType.ELEMENT); + goog.asserts.assert(node.localName == 'MultiGeometry'); + var geometries = ol.xml.pushParseAndPop( + /** @type {Array.} */ ([]), + ol.format.KML.MULTI_GEOMETRY_PARSERS_, node, objectStack); + if (!goog.isDef(geometries)) { + return null; + } + if (geometries.length === 0) { + return new ol.geom.GeometryCollection(geometries); + } + var homogeneous = true; + var type = geometries[0].getType(); + var geometry, i, ii; + for (i = 1, ii = geometries.length; i < ii; ++i) { + geometry = geometries[i]; + if (geometry.getType() != type) { + homogeneous = false; + break; + } + } + if (homogeneous) { + /** @type {ol.geom.GeometryLayout} */ + var layout; + /** @type {Array.} */ + var flatCoordinates; + if (type == ol.geom.GeometryType.POINT) { + var point = geometries[0]; + goog.asserts.assertInstanceof(point, ol.geom.Point); + layout = point.getLayout(); + flatCoordinates = point.getFlatCoordinates(); + for (i = 1, ii = geometries.length; i < ii; ++i) { + geometry = geometries[i]; + goog.asserts.assertInstanceof(geometry, ol.geom.Point); + goog.asserts.assert(geometry.getLayout() == layout); + goog.array.extend(flatCoordinates, geometry.getFlatCoordinates()); + } + var multiPoint = new ol.geom.MultiPoint(null); + multiPoint.setFlatCoordinates(layout, flatCoordinates); + return multiPoint; + } else if (type == ol.geom.GeometryType.LINE_STRING) { + var multiLineString = new ol.geom.MultiLineString(null); + multiLineString.setLineStrings(geometries); + return multiLineString; + } else if (type == ol.geom.GeometryType.POLYGON) { + var multiPolygon = new ol.geom.MultiPolygon(null); + multiPolygon.setPolygons(geometries); + return multiPolygon; + } else if (type == ol.geom.GeometryType.GEOMETRY_COLLECTION) { + return new ol.geom.GeometryCollection(geometries); + } else { + goog.asserts.fail(); + return null; + } + } else { + return new ol.geom.GeometryCollection(geometries); + } +}; + + +/** + * @param {Node} node Node. + * @param {Array.<*>} objectStack Object stack. + * @private + * @return {ol.geom.Point|undefined} Point. + */ +ol.format.KML.readPoint_ = function(node, objectStack) { + goog.asserts.assert(node.nodeType == goog.dom.NodeType.ELEMENT); + goog.asserts.assert(node.localName == 'Point'); + var flatCoordinates = + ol.format.KML.readFlatCoordinatesFromNode_(node, objectStack); + if (goog.isDefAndNotNull(flatCoordinates)) { + var point = new ol.geom.Point(null); + goog.asserts.assert(flatCoordinates.length == 3); + point.setFlatCoordinates(ol.geom.GeometryLayout.XYZ, flatCoordinates); + return point; + } else { + return undefined; + } +}; + + +/** + * @param {Node} node Node. + * @param {Array.<*>} objectStack Object stack. + * @private + * @return {ol.geom.Polygon|undefined} Polygon. + */ +ol.format.KML.readPolygon_ = function(node, objectStack) { + goog.asserts.assert(node.nodeType == goog.dom.NodeType.ELEMENT); + goog.asserts.assert(node.localName == 'Polygon'); + var flatLinearRings = ol.xml.pushParseAndPop( + /** @type {Array.>} */ ([null]), + ol.format.KML.FLAT_LINEAR_RINGS_PARSERS_, node, objectStack); + if (goog.isDefAndNotNull(flatLinearRings) && + !goog.isNull(flatLinearRings[0])) { + var polygon = new ol.geom.Polygon(null); + var flatCoordinates = flatLinearRings[0]; + var ends = [flatCoordinates.length]; + var i, ii; + for (i = 1, ii = flatLinearRings.length; i < ii; ++i) { + goog.array.extend(flatCoordinates, flatLinearRings[i]); + ends.push(flatCoordinates.length); + } + polygon.setFlatCoordinates( + ol.geom.GeometryLayout.XYZ, flatCoordinates, ends); + return polygon; + } else { + return undefined; + } +}; + + +/** + * @param {Node} node Node. + * @param {Array.<*>} objectStack Object stack. + * @private + * @return {Array.} Style. + */ +ol.format.KML.readStyle_ = function(node, objectStack) { + goog.asserts.assert(node.nodeType == goog.dom.NodeType.ELEMENT); + goog.asserts.assert(node.localName == 'Style'); + var styleObject = ol.xml.pushParseAndPop( + {}, ol.format.KML.STYLE_PARSERS_, node, objectStack); + if (!goog.isDef(styleObject)) { + return null; + } + var fillStyle = /** @type {ol.style.Fill} */ (goog.object.get( + styleObject, 'fillStyle', ol.format.KML.DEFAULT_FILL_STYLE_)); + var fill = /** @type {boolean|undefined} */ + (goog.object.get(styleObject, 'fill')); + if (goog.isDef(fill) && !fill) { + fillStyle = null; + } + var imageStyle = /** @type {ol.style.Image} */ (goog.object.get( + styleObject, 'imageStyle', ol.format.KML.DEFAULT_IMAGE_STYLE_)); + var strokeStyle = /** @type {ol.style.Stroke} */ (goog.object.get( + styleObject, 'strokeStyle', ol.format.KML.DEFAULT_STROKE_STYLE_)); + var outline = /** @type {boolean|undefined} */ + (goog.object.get(styleObject, 'outline')); + if (goog.isDef(outline) && !outline) { + strokeStyle = null; + } + return [new ol.style.Style({ + fill: fillStyle, + image: imageStyle, + stroke: strokeStyle, + text: null, // FIXME + zIndex: undefined // FIXME + })]; +}; + + +/** + * @param {Node} node Node. + * @param {Array.<*>} objectStack Object stack. + * @private + */ +ol.format.KML.DataParser_ = function(node, objectStack) { + goog.asserts.assert(node.nodeType == goog.dom.NodeType.ELEMENT); + goog.asserts.assert(node.localName == 'Data'); + var name = node.getAttribute('name'); + if (!goog.isNull(name)) { + var data = ol.xml.pushParseAndPop( + undefined, ol.format.KML.DATA_PARSERS_, node, objectStack); + if (goog.isDef(data)) { + var featureObject = + /** @type {Object} */ (objectStack[objectStack.length - 1]); + goog.asserts.assert(goog.isObject(featureObject)); + goog.object.set(featureObject, name, data); + } + } +}; + + +/** + * @param {Node} node Node. + * @param {Array.<*>} objectStack Object stack. + * @private + */ +ol.format.KML.ExtendedDataParser_ = function(node, objectStack) { + goog.asserts.assert(node.nodeType == goog.dom.NodeType.ELEMENT); + goog.asserts.assert(node.localName == 'ExtendedData'); + ol.xml.parse(ol.format.KML.EXTENDED_DATA_PARSERS_, node, objectStack); +}; + + +/** + * @param {Node} node Node. + * @param {Array.<*>} objectStack Object stack. + * @private + */ +ol.format.KML.PairDataParser_ = function(node, objectStack) { + goog.asserts.assert(node.nodeType == goog.dom.NodeType.ELEMENT); + goog.asserts.assert(node.localName == 'Pair'); + var pairObject = ol.xml.pushParseAndPop( + {}, ol.format.KML.PAIR_PARSERS_, node, objectStack); + if (!goog.isDef(pairObject)) { + return; + } + var key = /** @type {string|undefined} */ + (goog.object.get(pairObject, 'key')); + if (goog.isDef(key) && key == 'normal') { + var styleUrl = /** @type {string|undefined} */ + (goog.object.get(pairObject, 'styleUrl')); + if (goog.isDef(styleUrl)) { + objectStack[objectStack.length - 1] = styleUrl; + } + var Style = /** @type {ol.style.Style} */ + (goog.object.get(pairObject, 'Style')); + if (goog.isDef(Style)) { + objectStack[objectStack.length - 1] = Style; + } + } +}; + + +/** + * @param {Node} node Node. + * @param {Array.<*>} objectStack Object stack. + * @private + */ +ol.format.KML.PlacemarkStyleMapParser_ = function(node, objectStack) { + goog.asserts.assert(node.nodeType == goog.dom.NodeType.ELEMENT); + goog.asserts.assert(node.localName == 'StyleMap'); + var styleMapValue = ol.format.KML.readStyleMapValue_(node, objectStack); + if (!goog.isDef(styleMapValue)) { + return; + } + var placemarkObject = objectStack[objectStack.length - 1]; + goog.asserts.assert(goog.isObject(placemarkObject)); + if (goog.isArray(styleMapValue)) { + goog.object.set(placemarkObject, 'Style', styleMapValue); + } else if (goog.isString(styleMapValue)) { + goog.object.set(placemarkObject, 'styleUrl', styleMapValue); + } else { + goog.asserts.fail(); + } +}; + + +/** + * @param {Node} node Node. + * @param {Array.<*>} objectStack Object stack. + * @private + */ +ol.format.KML.SchemaDataParser_ = function(node, objectStack) { + goog.asserts.assert(node.nodeType == goog.dom.NodeType.ELEMENT); + goog.asserts.assert(node.localName == 'SchemaData'); + ol.xml.parse(ol.format.KML.SCHEMA_DATA_PARSERS_, node, objectStack); +}; + + +/** + * @param {Node} node Node. + * @param {Array.<*>} objectStack Object stack. + * @private + */ +ol.format.KML.SimpleDataParser_ = function(node, objectStack) { + goog.asserts.assert(node.nodeType == goog.dom.NodeType.ELEMENT); + goog.asserts.assert(node.localName == 'SimpleData'); + var name = node.getAttribute('name'); + if (!goog.isNull(name)) { + var data = ol.format.XSD.readString(node); + var featureObject = + /** @type {Object} */ (objectStack[objectStack.length - 1]); + goog.object.set(featureObject, name, data); + } +}; + + +/** + * @param {Node} node Node. + * @param {Array.<*>} objectStack Object stack. + * @private + */ +ol.format.KML.innerBoundaryIsParser_ = function(node, objectStack) { + goog.asserts.assert(node.nodeType == goog.dom.NodeType.ELEMENT); + goog.asserts.assert(node.localName == 'innerBoundaryIs'); + var flatLinearRing = ol.xml.pushParseAndPop( + /** @type {Array.|undefined} */ (undefined), + ol.format.KML.INNER_BOUNDARY_IS_PARSERS_, node, objectStack); + if (goog.isDef(flatLinearRing)) { + var flatLinearRings = /** @type {Array.>} */ + (objectStack[objectStack.length - 1]); + goog.asserts.assert(goog.isArray(flatLinearRings)); + goog.asserts.assert(flatLinearRings.length > 0); + flatLinearRings.push(flatLinearRing); + } +}; + + +/** + * @param {Node} node Node. + * @param {Array.<*>} objectStack Object stack. + * @private + */ +ol.format.KML.outerBoundaryIsParser_ = function(node, objectStack) { + goog.asserts.assert(node.nodeType == goog.dom.NodeType.ELEMENT); + goog.asserts.assert(node.localName == 'outerBoundaryIs'); + var flatLinearRing = ol.xml.pushParseAndPop( + /** @type {Array.|undefined} */ (undefined), + ol.format.KML.OUTER_BOUNDARY_IS_PARSERS_, node, objectStack); + if (goog.isDef(flatLinearRing)) { + var flatLinearRings = /** @type {Array.>} */ + (objectStack[objectStack.length - 1]); + goog.asserts.assert(goog.isArray(flatLinearRings)); + goog.asserts.assert(flatLinearRings.length > 0); + flatLinearRings[0] = flatLinearRing; + } +}; + + +/** + * @param {Node} node Node. + * @param {Array.<*>} objectStack Object stack. + * @private + */ +ol.format.KML.whenParser_ = function(node, objectStack) { + goog.asserts.assert(node.nodeType == goog.dom.NodeType.ELEMENT); + goog.asserts.assert(node.localName == 'when'); + var gxTrackObject = /** @type {ol.format.KMLGxTrackObject_} */ + (objectStack[objectStack.length - 1]); + goog.asserts.assert(goog.isObject(gxTrackObject)); + var whens = gxTrackObject.whens; + var s = ol.xml.getAllTextContent(node, false); + var re = + /^\s*(\d{4})($|-(\d{2})($|-(\d{2})($|T(\d{2}):(\d{2}):(\d{2})(Z|(?:([+\-])(\d{2})(?::(\d{2}))?)))))\s*$/; + var m = re.exec(s); + if (m) { + var year = parseInt(m[1], 10); + var month = goog.isDef(m[3]) ? parseInt(m[3], 10) - 1 : 0; + var day = goog.isDef(m[5]) ? parseInt(m[5], 10) : 1; + var hour = goog.isDef(m[7]) ? parseInt(m[7], 10) : 0; + var minute = goog.isDef(m[8]) ? parseInt(m[8], 10) : 0; + var second = goog.isDef(m[9]) ? parseInt(m[9], 10) : 0; + var when = Date.UTC(year, month, day, hour, minute, second); + if (goog.isDef(m[10]) && m[10] != 'Z') { + var sign = m[11] == '-' ? -1 : 1; + when += sign * 60 * parseInt(m[12], 10); + if (goog.isDef(m[13])) { + when += sign * 60 * 60 * parseInt(m[13], 10); + } + } + whens.push(when); + } else { + whens.push(0); + } +}; + + +/** + * @const + * @type {Object.>} + * @private + */ +ol.format.KML.DATA_PARSERS_ = ol.xml.makeParsersNS( + ol.format.KML.NAMESPACE_URIS_, { + 'value': ol.xml.makeReplacer(ol.format.XSD.readString) + }); + + +/** + * @const + * @type {Object.>} + * @private + */ +ol.format.KML.EXTENDED_DATA_PARSERS_ = ol.xml.makeParsersNS( + ol.format.KML.NAMESPACE_URIS_, { + 'Data': ol.format.KML.DataParser_, + 'SchemaData': ol.format.KML.SchemaDataParser_ + }); + + +/** + * @const + * @type {Object.>} + * @private + */ +ol.format.KML.FLAT_LINEAR_RING_PARSERS_ = ol.xml.makeParsersNS( + ol.format.KML.NAMESPACE_URIS_, { + 'coordinates': ol.xml.makeReplacer(ol.format.KML.readFlatCoordinates_) + }); + + +/** + * @const + * @type {Object.>} + * @private + */ +ol.format.KML.FLAT_LINEAR_RINGS_PARSERS_ = ol.xml.makeParsersNS( + ol.format.KML.NAMESPACE_URIS_, { + 'innerBoundaryIs': ol.format.KML.innerBoundaryIsParser_, + 'outerBoundaryIs': ol.format.KML.outerBoundaryIsParser_ + }); + + +/** + * @const + * @type {Object.>} + * @private + */ +ol.format.KML.GX_TRACK_PARSERS_ = ol.xml.makeParsersNS( + ol.format.KML.NAMESPACE_URIS_, { + 'when': ol.format.KML.whenParser_ + }, ol.xml.makeParsersNS( + ol.format.KML.GX_NAMESPACE_URIS_, { + 'coord': ol.format.KML.gxCoordParser_ + })); + + +/** + * @const + * @type {Object.>} + * @private + */ +ol.format.KML.GEOMETRY_FLAT_COORDINATES_PARSERS_ = ol.xml.makeParsersNS( + ol.format.KML.NAMESPACE_URIS_, { + 'coordinates': ol.xml.makeReplacer(ol.format.KML.readFlatCoordinates_) + }); + + +/** + * @const + * @type {Object.>} + * @private + */ +ol.format.KML.ICON_PARSERS_ = ol.xml.makeParsersNS( + ol.format.KML.NAMESPACE_URIS_, { + 'href': ol.xml.makeObjectPropertySetter(ol.format.KML.readURI_) + }); + + +/** + * @const + * @type {Object.>} + * @private + */ +ol.format.KML.ICON_STYLE_PARSERS_ = ol.xml.makeParsersNS( + ol.format.KML.NAMESPACE_URIS_, { + 'Icon': ol.xml.makeObjectPropertySetter(ol.format.KML.readIcon_), + 'heading': ol.xml.makeObjectPropertySetter(ol.format.XSD.readDecimal), + 'hotSpot': ol.xml.makeObjectPropertySetter(ol.format.KML.readVec2_), + 'scale': ol.xml.makeObjectPropertySetter(ol.format.KML.readScale_) + }); + + +/** + * @const + * @type {Object.>} + * @private + */ +ol.format.KML.INNER_BOUNDARY_IS_PARSERS_ = ol.xml.makeParsersNS( + ol.format.KML.NAMESPACE_URIS_, { + 'LinearRing': ol.xml.makeReplacer(ol.format.KML.readFlatLinearRing_) + }); + + +/** + * @const + * @type {Object.>} + * @private + */ +ol.format.KML.LINE_STYLE_PARSERS_ = ol.xml.makeParsersNS( + ol.format.KML.NAMESPACE_URIS_, { + 'color': ol.xml.makeObjectPropertySetter(ol.format.KML.readColor_), + 'width': ol.xml.makeObjectPropertySetter(ol.format.XSD.readDecimal) + }); + + +/** + * @const + * @type {Object.>} + * @private + */ +ol.format.KML.MULTI_GEOMETRY_PARSERS_ = ol.xml.makeParsersNS( + ol.format.KML.NAMESPACE_URIS_, { + 'LineString': ol.xml.makeArrayPusher(ol.format.KML.readLineString_), + 'LinearRing': ol.xml.makeArrayPusher(ol.format.KML.readLinearRing_), + 'MultiGeometry': ol.xml.makeArrayPusher(ol.format.KML.readMultiGeometry_), + 'Point': ol.xml.makeArrayPusher(ol.format.KML.readPoint_), + 'Polygon': ol.xml.makeArrayPusher(ol.format.KML.readPolygon_) + }); + + +/** + * @const + * @type {Object.>} + * @private + */ +ol.format.KML.GX_MULTITRACK_GEOMETRY_PARSERS_ = ol.xml.makeParsersNS( + ol.format.KML.GX_NAMESPACE_URIS_, { + 'Track': ol.xml.makeArrayPusher(ol.format.KML.readGxTrack_) + }); + + +/** + * @const + * @type {Object.>} + * @private + */ +ol.format.KML.OUTER_BOUNDARY_IS_PARSERS_ = ol.xml.makeParsersNS( + ol.format.KML.NAMESPACE_URIS_, { + 'LinearRing': ol.xml.makeReplacer(ol.format.KML.readFlatLinearRing_) + }); + + +/** + * @const + * @type {Object.>} + * @private + */ +ol.format.KML.PAIR_PARSERS_ = ol.xml.makeParsersNS( + ol.format.KML.NAMESPACE_URIS_, { + 'Style': ol.xml.makeObjectPropertySetter(ol.format.KML.readStyle_), + 'key': ol.xml.makeObjectPropertySetter(ol.format.XSD.readString), + 'styleUrl': ol.xml.makeObjectPropertySetter(ol.format.KML.readStyleUrl_) + }); + + +/** + * @const + * @type {Object.>} + * @private + */ +ol.format.KML.PLACEMARK_PARSERS_ = ol.xml.makeParsersNS( + ol.format.KML.NAMESPACE_URIS_, { + 'ExtendedData': ol.format.KML.ExtendedDataParser_, + 'MultiGeometry': ol.xml.makeObjectPropertySetter( + ol.format.KML.readMultiGeometry_, 'geometry'), + 'LineString': ol.xml.makeObjectPropertySetter( + ol.format.KML.readLineString_, 'geometry'), + 'LinearRing': ol.xml.makeObjectPropertySetter( + ol.format.KML.readLinearRing_, 'geometry'), + 'Point': ol.xml.makeObjectPropertySetter( + ol.format.KML.readPoint_, 'geometry'), + 'Polygon': ol.xml.makeObjectPropertySetter( + ol.format.KML.readPolygon_, 'geometry'), + 'Style': ol.xml.makeObjectPropertySetter(ol.format.KML.readStyle_), + 'StyleMap': ol.format.KML.PlacemarkStyleMapParser_, + 'address': ol.xml.makeObjectPropertySetter(ol.format.XSD.readString), + 'description': ol.xml.makeObjectPropertySetter(ol.format.XSD.readString), + 'name': ol.xml.makeObjectPropertySetter(ol.format.XSD.readString), + 'open': ol.xml.makeObjectPropertySetter(ol.format.XSD.readBoolean), + 'phoneNumber': ol.xml.makeObjectPropertySetter(ol.format.XSD.readString), + 'styleUrl': ol.xml.makeObjectPropertySetter(ol.format.KML.readURI_), + 'visibility': ol.xml.makeObjectPropertySetter(ol.format.XSD.readBoolean) + }, ol.xml.makeParsersNS( + ol.format.KML.GX_NAMESPACE_URIS_, { + 'MultiTrack': ol.xml.makeObjectPropertySetter( + ol.format.KML.readGxMultiTrack_, 'geometry'), + 'Track': ol.xml.makeObjectPropertySetter( + ol.format.KML.readGxTrack_, 'geometry') + } + )); + + +/** + * @const + * @type {Object.>} + * @private + */ +ol.format.KML.POLY_STYLE_PARSERS_ = ol.xml.makeParsersNS( + ol.format.KML.NAMESPACE_URIS_, { + 'color': ol.xml.makeObjectPropertySetter(ol.format.KML.readColor_), + 'fill': ol.xml.makeObjectPropertySetter(ol.format.XSD.readBoolean), + 'outline': ol.xml.makeObjectPropertySetter(ol.format.XSD.readBoolean) + }); + + +/** + * @const + * @type {Object.>} + * @private + */ +ol.format.KML.SCHEMA_DATA_PARSERS_ = ol.xml.makeParsersNS( + ol.format.KML.NAMESPACE_URIS_, { + 'SimpleData': ol.format.KML.SimpleDataParser_ + }); + + +/** + * @const + * @type {Object.>} + * @private + */ +ol.format.KML.STYLE_PARSERS_ = ol.xml.makeParsersNS( + ol.format.KML.NAMESPACE_URIS_, { + 'IconStyle': ol.format.KML.IconStyleParser_, + 'LineStyle': ol.format.KML.LineStyleParser_, + 'PolyStyle': ol.format.KML.PolyStyleParser_ + }); + + +/** + * @const + * @type {Object.>} + * @private + */ +ol.format.KML.STYLE_MAP_PARSERS_ = ol.xml.makeParsersNS( + ol.format.KML.NAMESPACE_URIS_, { + 'Pair': ol.format.KML.PairDataParser_ + }); + + +/** + * @inheritDoc + */ +ol.format.KML.prototype.getExtensions = function() { + return ol.format.KML.EXTENSIONS_; +}; + + +/** + * @param {Node} node Node. + * @param {Array.<*>} objectStack Object stack. + * @private + * @return {Array.|undefined} Features. + */ +ol.format.KML.prototype.readDocumentOrFolder_ = function(node, objectStack) { + goog.asserts.assert(node.nodeType == goog.dom.NodeType.ELEMENT); + var localName = ol.xml.getLocalName(node); + goog.asserts.assert(localName == 'Document' || localName == 'Folder'); + // FIXME use scope somehow + var parsersNS = ol.xml.makeParsersNS( + ol.format.KML.NAMESPACE_URIS_, { + 'Folder': ol.xml.makeArrayExtender(this.readDocumentOrFolder_, this), + 'Placemark': ol.xml.makeArrayPusher(this.readPlacemark_, this), + 'Style': goog.bind(this.readSharedStyle_, this), + 'StyleMap': goog.bind(this.readSharedStyleMap_, this) + }); + var features = ol.xml.pushParseAndPop(/** @type {Array.} */ ([]), + parsersNS, node, objectStack, this); + if (goog.isDef(features)) { + return features; + } else { + return undefined; + } +}; + + +/** + * @param {Node} node Node. + * @param {Array.<*>} objectStack Object stack. + * @private + * @return {ol.Feature|undefined} Feature. + */ +ol.format.KML.prototype.readPlacemark_ = function(node, objectStack) { + goog.asserts.assert(node.nodeType == goog.dom.NodeType.ELEMENT); + goog.asserts.assert(node.localName == 'Placemark'); + var object = ol.xml.pushParseAndPop({'geometry': null}, + ol.format.KML.PLACEMARK_PARSERS_, node, objectStack); + if (!goog.isDef(object)) { + return undefined; + } + var feature = new ol.Feature(); + var id = node.getAttribute('id'); + if (!goog.isNull(id)) { + feature.setId(id); + } + feature.setValues(object); + feature.setStyle(this.featureStyleFunction_); + return feature; +}; + + +/** + * @param {Node} node Node. + * @param {Array.<*>} objectStack Object stack. + * @private + */ +ol.format.KML.prototype.readSharedStyle_ = function(node, objectStack) { + goog.asserts.assert(node.nodeType == goog.dom.NodeType.ELEMENT); + goog.asserts.assert(node.localName == 'Style'); + var id = node.getAttribute('id'); + if (!goog.isNull(id)) { + var style = ol.format.KML.readStyle_(node, objectStack); + if (goog.isDef(style)) { + var styleUri; + if (goog.isDefAndNotNull(node.baseURI)) { + styleUri = goog.Uri.resolve(node.baseURI, '#' + id).toString(); + } else { + styleUri = '#' + id; + } + this.sharedStyles_[styleUri] = style; + } + } +}; + + +/** + * @param {Node} node Node. + * @param {Array.<*>} objectStack Object stack. + * @private + */ +ol.format.KML.prototype.readSharedStyleMap_ = function(node, objectStack) { + goog.asserts.assert(node.nodeType == goog.dom.NodeType.ELEMENT); + goog.asserts.assert(node.localName == 'StyleMap'); + var id = node.getAttribute('id'); + if (goog.isNull(id)) { + return; + } + var styleMapValue = ol.format.KML.readStyleMapValue_(node, objectStack); + if (!goog.isDef(styleMapValue)) { + return; + } + var styleUri; + if (goog.isDefAndNotNull(node.baseURI)) { + styleUri = goog.Uri.resolve(node.baseURI, '#' + id).toString(); + } else { + styleUri = '#' + id; + } + this.sharedStyles_[styleUri] = styleMapValue; +}; + + +/** + * @inheritDoc + */ +ol.format.KML.prototype.readFeatureFromNode = function(node) { + goog.asserts.assert(node.nodeType == goog.dom.NodeType.ELEMENT); + if (goog.array.indexOf(ol.format.KML.NAMESPACE_URIS_, node.namespaceURI) == + -1) { + return null; + } + goog.asserts.assert(node.localName == 'Placemark'); + var feature = this.readPlacemark_(node, []); + if (goog.isDef(feature)) { + return feature; + } else { + return null; + } +}; + + +/** + * @inheritDoc + */ +ol.format.KML.prototype.readFeaturesFromNode = function(node) { + goog.asserts.assert(node.nodeType == goog.dom.NodeType.ELEMENT); + if (goog.array.indexOf(ol.format.KML.NAMESPACE_URIS_, node.namespaceURI) == + -1) { + return []; + } + var features; + var localName = ol.xml.getLocalName(node); + if (localName == 'Document' || localName == 'Folder') { + features = this.readDocumentOrFolder_(node, []); + if (goog.isDef(features)) { + return features; + } else { + return []; + } + } else if (localName == 'Placemark') { + var feature = this.readPlacemark_(node, []); + if (goog.isDef(feature)) { + return [feature]; + } else { + return []; + } + } else if (localName == 'kml') { + features = []; + var n; + for (n = node.firstElementChild; !goog.isNull(n); + n = n.nextElementSibling) { + var fs = this.readFeaturesFromNode(n); + if (goog.isDef(fs)) { + goog.array.extend(features, fs); + } + } + return features; + } else { + return []; + } +}; + + +/** + * @param {Document|Node|string} source Souce. + * @return {string|undefined} Name. + * @todo stability experimental + */ +ol.format.KML.prototype.readName = function(source) { + if (ol.xml.isDocument(source)) { + return this.readNameFromDocument(/** @type {Document} */ (source)); + } else if (ol.xml.isNode(source)) { + return this.readNameFromNode(/** @type {Node} */ (source)); + } else if (goog.isString(source)) { + var doc = ol.xml.load(source); + return this.readNameFromDocument(doc); + } else { + goog.asserts.fail(); + return undefined; + } +}; + + +/** + * @param {Document} doc Document. + * @return {string|undefined} Name. + */ +ol.format.KML.prototype.readNameFromDocument = function(doc) { + var n; + for (n = doc.firstChild; !goog.isNull(n); n = n.nextSibling) { + if (n.nodeType == goog.dom.NodeType.ELEMENT) { + var name = this.readNameFromNode(n); + if (goog.isDef(name)) { + return name; + } + } + } + return undefined; +}; + + +/** + * @param {Node} node Node. + * @return {string|undefined} Name. + */ +ol.format.KML.prototype.readNameFromNode = function(node) { + var n; + for (n = node.firstElementChild; !goog.isNull(n); n = n.nextElementSibling) { + if (goog.array.indexOf(ol.format.KML.NAMESPACE_URIS_, + n.namespaceURI) != -1 && + n.localName == 'name') { + return ol.format.XSD.readString(n); + } + } + for (n = node.firstElementChild; !goog.isNull(n); n = n.nextElementSibling) { + var localName = ol.xml.getLocalName(n); + if (goog.array.indexOf(ol.format.KML.NAMESPACE_URIS_, + n.namespaceURI) != -1 && + (localName == 'Document' || + localName == 'Folder' || + localName == 'Placemark' || + localName == 'kml')) { + var name = this.readNameFromNode(n); + if (goog.isDef(name)) { + return name; + } + } + } + return undefined; +}; + + +/** + * @inheritDoc + */ +ol.format.KML.prototype.readProjectionFromDocument = function(doc) { + return ol.proj.get('EPSG:4326'); +}; + + +/** + * @inheritDoc + */ +ol.format.KML.prototype.readProjectionFromNode = function(node) { + return ol.proj.get('EPSG:4326'); +}; diff --git a/float-no-zero/ol/ol/format/osmxmlformat.js b/float-no-zero/ol/ol/format/osmxmlformat.js new file mode 100644 index 0000000000..3b7278a093 --- /dev/null +++ b/float-no-zero/ol/ol/format/osmxmlformat.js @@ -0,0 +1,213 @@ +// FIXME add typedef for stack state objects +goog.provide('ol.format.OSMXML'); + +goog.require('goog.array'); +goog.require('goog.asserts'); +goog.require('goog.dom.NodeType'); +goog.require('goog.object'); +goog.require('ol.Feature'); +goog.require('ol.format.XMLFeature'); +goog.require('ol.geom.LineString'); +goog.require('ol.geom.Point'); +goog.require('ol.geom.Polygon'); +goog.require('ol.proj'); +goog.require('ol.xml'); + + + +/** + * @constructor + * @extends {ol.format.XMLFeature} + */ +ol.format.OSMXML = function() { + goog.base(this); +}; +goog.inherits(ol.format.OSMXML, ol.format.XMLFeature); + + +/** + * @const + * @type {Array.} + * @private + */ +ol.format.OSMXML.EXTENSIONS_ = ['.osm']; + + +/** + * @inheritDoc + */ +ol.format.OSMXML.prototype.getExtensions = function() { + return ol.format.OSMXML.EXTENSIONS_; +}; + + +/** + * @param {Node} node Node. + * @param {Array.<*>} objectStack Object stack. + * @private + */ +ol.format.OSMXML.readNode_ = function(node, objectStack) { + goog.asserts.assert(node.nodeType == goog.dom.NodeType.ELEMENT); + goog.asserts.assert(node.localName == 'node'); + var state = /** @type {Object} */ (objectStack[objectStack.length - 1]); + var id = node.getAttribute('id'); + var coordinates = /** @type {Array.} */ ([ + parseFloat(node.getAttribute('lon')), + parseFloat(node.getAttribute('lat')) + ]); + goog.object.set(state.nodes, id, coordinates); + + var values = ol.xml.pushParseAndPop({ + tags: {} + }, ol.format.OSMXML.NODE_PARSERS_, node, objectStack); + if (!goog.object.isEmpty(values.tags)) { + var geometry = new ol.geom.Point(coordinates); + var feature = new ol.Feature(geometry); + feature.setId(id); + feature.setValues(values.tags); + state.features.push(feature); + } +}; + + +/** + * @param {Node} node Node. + * @param {Array.<*>} objectStack Object stack. + * @private + */ +ol.format.OSMXML.readWay_ = function(node, objectStack) { + goog.asserts.assert(node.nodeType == goog.dom.NodeType.ELEMENT); + goog.asserts.assert(node.localName == 'way'); + var id = node.getAttribute('id'); + var values = ol.xml.pushParseAndPop({ + ndrefs: [], + tags: {} + }, ol.format.OSMXML.WAY_PARSERS_, node, objectStack); + var state = /** @type {Object} */ (objectStack[objectStack.length - 1]); + var flatCoordinates = /** @type {Array.} */ ([]); + for (var i = 0, ii = values.ndrefs.length; i < ii; i++) { + var point = goog.object.get(state.nodes, values.ndrefs[i]); + goog.array.extend(flatCoordinates, point); + } + var geometry; + if (values.ndrefs[0] == values.ndrefs[values.ndrefs.length - 1]) { + // closed way + geometry = new ol.geom.Polygon(null); + geometry.setFlatCoordinates(ol.geom.GeometryLayout.XY, flatCoordinates, + [flatCoordinates.length]); + } else { + geometry = new ol.geom.LineString(null); + geometry.setFlatCoordinates(ol.geom.GeometryLayout.XY, flatCoordinates); + } + var feature = new ol.Feature(geometry); + feature.setId(id); + feature.setValues(values.tags); + state.features.push(feature); +}; + + +/** + * @param {Node} node Node. + * @param {Array.<*>} objectStack Object stack. + * @private + * @return {ol.Feature|undefined} Track. + */ +ol.format.OSMXML.readNd_ = function(node, objectStack) { + goog.asserts.assert(node.nodeType == goog.dom.NodeType.ELEMENT); + goog.asserts.assert(node.localName == 'nd'); + var values = /** @type {Object} */ (objectStack[objectStack.length - 1]); + values.ndrefs.push(node.getAttribute('ref')); +}; + + +/** + * @param {Node} node Node. + * @param {Array.<*>} objectStack Object stack. + * @private + * @return {ol.Feature|undefined} Track. + */ +ol.format.OSMXML.readTag_ = function(node, objectStack) { + goog.asserts.assert(node.nodeType == goog.dom.NodeType.ELEMENT); + goog.asserts.assert(node.localName == 'tag'); + var values = /** @type {Object} */ (objectStack[objectStack.length - 1]); + goog.object.set(values.tags, node.getAttribute('k'), node.getAttribute('v')); +}; + + +/** + * @const + * @private + * @type {Array.} + */ +ol.format.OSMXML.NAMESPACE_URIS_ = [ + null +]; + + +/** + * @const + * @type {Object.>} + * @private + */ +ol.format.OSMXML.WAY_PARSERS_ = ol.xml.makeParsersNS( + ol.format.OSMXML.NAMESPACE_URIS_, { + 'nd': ol.format.OSMXML.readNd_, + 'tag': ol.format.OSMXML.readTag_ + }); + + +/** + * @const + * @type {Object.>} + * @private + */ +ol.format.OSMXML.PARSERS_ = ol.xml.makeParsersNS( + ol.format.OSMXML.NAMESPACE_URIS_, { + 'node': ol.format.OSMXML.readNode_, + 'way': ol.format.OSMXML.readWay_ + }); + + +/** + * @const + * @type {Object.>} + * @private + */ +ol.format.OSMXML.NODE_PARSERS_ = ol.xml.makeParsersNS( + ol.format.OSMXML.NAMESPACE_URIS_, { + 'tag': ol.format.OSMXML.readTag_ + }); + + +/** + * @inheritDoc + */ +ol.format.OSMXML.prototype.readFeaturesFromNode = function(node) { + goog.asserts.assert(node.nodeType == goog.dom.NodeType.ELEMENT); + if (node.localName == 'osm') { + var state = ol.xml.pushParseAndPop({ + nodes: {}, + features: [] + }, ol.format.OSMXML.PARSERS_, node, []); + if (goog.isDef(state.features)) { + return state.features; + } + } + return []; +}; + + +/** + * @inheritDoc + */ +ol.format.OSMXML.prototype.readProjectionFromDocument = function(doc) { + return ol.proj.get('EPSG:4326'); +}; + + +/** + * @inheritDoc + */ +ol.format.OSMXML.prototype.readProjectionFromNode = function(node) { + return ol.proj.get('EPSG:4326'); +}; diff --git a/float-no-zero/ol/ol/format/polylineformat.js b/float-no-zero/ol/ol/format/polylineformat.js new file mode 100644 index 0000000000..a376e827ec --- /dev/null +++ b/float-no-zero/ol/ol/format/polylineformat.js @@ -0,0 +1,327 @@ +goog.provide('ol.format.Polyline'); + +goog.require('goog.asserts'); +goog.require('ol.Feature'); +goog.require('ol.format.TextFeature'); +goog.require('ol.geom.LineString'); +goog.require('ol.geom.flat'); +goog.require('ol.proj'); + + + +/** + * @constructor + * @extends {ol.format.TextFeature} + */ +ol.format.Polyline = function() { + goog.base(this); +}; +goog.inherits(ol.format.Polyline, ol.format.TextFeature); + + +/** + * Encode a list of coordinates in a flat array and return an encoded string + * + * Attention: This function will modify the passed array! + * + * @param {Array.} flatPoints A flat array of coordinates. + * @param {number=} opt_dimension The dimension of the coordinates in the array. + * @return {string} The encoded string. + */ +ol.format.Polyline.encodeFlatCoordinates = function(flatPoints, opt_dimension) { + var dimension = goog.isDef(opt_dimension) ? opt_dimension : 2; + return ol.format.Polyline.encodeDeltas(flatPoints, dimension); +}; + + +/** + * Decode a list of coordinates from an encoded string into a flat array + * + * @param {string} encoded An encoded string. + * @param {number=} opt_dimension The dimension of the coordinates in the + * encoded string. + * @return {Array.} A flat array of coordinates. + */ +ol.format.Polyline.decodeFlatCoordinates = function(encoded, opt_dimension) { + var dimension = goog.isDef(opt_dimension) ? opt_dimension : 2; + return ol.format.Polyline.decodeDeltas(encoded, dimension); +}; + + +/** + * Encode a list of n-dimensional points and return an encoded string + * + * Attention: This function will modify the passed array! + * + * @param {Array.} numbers A list of n-dimensional points. + * @param {number} dimension The dimension of the points in the list. + * @param {number=} opt_factor The factor by which the numbers will be + * multiplied. The remaining decimal places will get rounded away. + * Default is `1e5`. + * @return {string} The encoded string. + */ +ol.format.Polyline.encodeDeltas = function(numbers, dimension, opt_factor) { + var factor = goog.isDef(opt_factor) ? opt_factor : 1e5; + var d; + + var lastNumbers = new Array(dimension); + for (d = 0; d < dimension; ++d) { + lastNumbers[d] = 0; + } + + var i, ii; + for (i = 0, ii = numbers.length; i < ii;) { + for (d = 0; d < dimension; ++d, ++i) { + var num = numbers[i]; + var delta = num - lastNumbers[d]; + lastNumbers[d] = num; + + numbers[i] = delta; + } + } + + return ol.format.Polyline.encodeFloats(numbers, factor); +}; + + +/** + * Decode a list of n-dimensional points from an encoded string + * + * @param {string} encoded An encoded string. + * @param {number} dimension The dimension of the points in the encoded string. + * @param {number=} opt_factor The factor by which the resulting numbers will + * be divided. Default is `1e5`. + * @return {Array.} A list of n-dimensional points. + */ +ol.format.Polyline.decodeDeltas = function(encoded, dimension, opt_factor) { + var factor = goog.isDef(opt_factor) ? opt_factor : 1e5; + var d; + + /** @type {Array.} */ + var lastNumbers = new Array(dimension); + for (d = 0; d < dimension; ++d) { + lastNumbers[d] = 0; + } + + var numbers = ol.format.Polyline.decodeFloats(encoded, factor); + + var i, ii; + for (i = 0, ii = numbers.length; i < ii;) { + for (d = 0; d < dimension; ++d, ++i) { + lastNumbers[d] += numbers[i]; + + numbers[i] = lastNumbers[d]; + } + } + + return numbers; +}; + + +/** + * Encode a list of floating point numbers and return an encoded string + * + * Attention: This function will modify the passed array! + * + * @param {Array.} numbers A list of floating point numbers. + * @param {number=} opt_factor The factor by which the numbers will be + * multiplied. The remaining decimal places will get rounded away. + * Default is `1e5`. + * @return {string} The encoded string. + */ +ol.format.Polyline.encodeFloats = function(numbers, opt_factor) { + var factor = goog.isDef(opt_factor) ? opt_factor : 1e5; + + var i, ii; + for (i = 0, ii = numbers.length; i < ii; ++i) { + numbers[i] = Math.round(numbers[i] * factor); + } + + return ol.format.Polyline.encodeSignedIntegers(numbers); +}; + + +/** + * Decode a list of floating point numbers from an encoded string + * + * @param {string} encoded An encoded string. + * @param {number=} opt_factor The factor by which the result will be divided. + * Default is `1e5`. + * @return {Array.} A list of floating point numbers. + */ +ol.format.Polyline.decodeFloats = function(encoded, opt_factor) { + var factor = goog.isDef(opt_factor) ? opt_factor : 1e5; + var numbers = ol.format.Polyline.decodeSignedIntegers(encoded); + var i, ii; + for (i = 0, ii = numbers.length; i < ii; ++i) { + numbers[i] /= factor; + } + return numbers; +}; + + +/** + * Encode a list of signed integers and return an encoded string + * + * Attention: This function will modify the passed array! + * + * @param {Array.} numbers A list of signed integers. + * @return {string} The encoded string. + */ +ol.format.Polyline.encodeSignedIntegers = function(numbers) { + var i, ii; + for (i = 0, ii = numbers.length; i < ii; ++i) { + var num = numbers[i]; + numbers[i] = (num < 0) ? ~(num << 1) : (num << 1); + } + return ol.format.Polyline.encodeUnsignedIntegers(numbers); +}; + + +/** + * Decode a list of signed integers from an encoded string + * + * @param {string} encoded An encoded string. + * @return {Array.} A list of signed integers. + */ +ol.format.Polyline.decodeSignedIntegers = function(encoded) { + var numbers = ol.format.Polyline.decodeUnsignedIntegers(encoded); + var i, ii; + for (i = 0, ii = numbers.length; i < ii; ++i) { + var num = numbers[i]; + numbers[i] = (num & 1) ? ~(num >> 1) : (num >> 1); + } + return numbers; +}; + + +/** + * Encode a list of unsigned integers and return an encoded string + * + * @param {Array.} numbers A list of unsigned integers. + * @return {string} The encoded string. + */ +ol.format.Polyline.encodeUnsignedIntegers = function(numbers) { + var encoded = ''; + var i, ii; + for (i = 0, ii = numbers.length; i < ii; ++i) { + encoded += ol.format.Polyline.encodeUnsignedInteger(numbers[i]); + } + return encoded; +}; + + +/** + * Decode a list of unsigned integers from an encoded string + * + * @param {string} encoded An encoded string. + * @return {Array.} A list of unsigned integers. + */ +ol.format.Polyline.decodeUnsignedIntegers = function(encoded) { + var numbers = []; + var current = 0; + var shift = 0; + var i, ii; + for (i = 0, ii = encoded.length; i < ii; ++i) { + var b = encoded.charCodeAt(i) - 63; + current |= (b & 0x1f) << shift; + if (b < 0x20) { + numbers.push(current); + current = 0; + shift = 0; + } else { + shift += 5; + } + } + return numbers; +}; + + +/** + * Encode one single unsigned integer and return an encoded string + * + * @param {number} num Unsigned integer that should be encoded. + * @return {string} The encoded string. + */ +ol.format.Polyline.encodeUnsignedInteger = function(num) { + var value, encoded = ''; + while (num >= 0x20) { + value = (0x20 | (num & 0x1f)) + 63; + encoded += String.fromCharCode(value); + num >>= 5; + } + value = num + 63; + encoded += String.fromCharCode(value); + return encoded; +}; + + +/** + * @inheritDoc + */ +ol.format.Polyline.prototype.readFeatureFromText = function(text) { + var geometry = this.readGeometryFromText(text); + return new ol.Feature(geometry); +}; + + +/** + * @inheritDoc + */ +ol.format.Polyline.prototype.readFeaturesFromText = function(text) { + var feature = this.readFeatureFromText(text); + return [feature]; +}; + + +/** + * @inheritDoc + */ +ol.format.Polyline.prototype.readGeometryFromText = function(text) { + var flatCoordinates = ol.format.Polyline.decodeFlatCoordinates(text, 2); + var coordinates = ol.geom.flat.inflateCoordinates( + flatCoordinates, 0, flatCoordinates.length, 2); + return new ol.geom.LineString(coordinates); +}; + + +/** + * @inheritDoc + */ +ol.format.Polyline.prototype.readProjectionFromText = function(text) { + return ol.proj.get('EPSG:4326'); +}; + + +/** + * @inheritDoc + */ +ol.format.Polyline.prototype.writeFeatureText = function(feature) { + var geometry = feature.getGeometry(); + if (goog.isDefAndNotNull(geometry)) { + return this.writeGeometryText(geometry); + } else { + goog.asserts.fail(); + return ''; + } +}; + + +/** + * @inheritDoc + */ +ol.format.Polyline.prototype.writeFeaturesText = function(features) { + goog.asserts.assert(features.length == 1); + return this.writeFeatureText(features[0]); +}; + + +/** + * @inheritDoc + */ +ol.format.Polyline.prototype.writeGeometryText = function(geometry) { + goog.asserts.assertInstanceof(geometry, ol.geom.LineString); + var flatCoordinates = geometry.getFlatCoordinates(); + var stride = geometry.getStride(); + return ol.format.Polyline.encodeFlatCoordinates(flatCoordinates, stride); +}; diff --git a/float-no-zero/ol/ol/format/textfeatureformat.js b/float-no-zero/ol/ol/format/textfeatureformat.js new file mode 100644 index 0000000000..eea4cb5322 --- /dev/null +++ b/float-no-zero/ol/ol/format/textfeatureformat.js @@ -0,0 +1,151 @@ +goog.provide('ol.format.TextFeature'); + +goog.require('goog.asserts'); +goog.require('ol.format.Feature'); +goog.require('ol.format.FormatType'); + + + +/** + * @constructor + * @extends {ol.format.Feature} + */ +ol.format.TextFeature = function() { + goog.base(this); +}; +goog.inherits(ol.format.TextFeature, ol.format.Feature); + + +/** + * @param {Document|Node|Object|string} source Source. + * @private + * @return {string} Text. + */ +ol.format.TextFeature.prototype.getText_ = function(source) { + if (goog.isString(source)) { + return source; + } else { + goog.asserts.fail(); + return ''; + } +}; + + +/** + * @inheritDoc + */ +ol.format.TextFeature.prototype.getType = function() { + return ol.format.FormatType.TEXT; +}; + + +/** + * @inheritDoc + */ +ol.format.TextFeature.prototype.readFeature = function(source) { + return this.readFeatureFromText(this.getText_(source)); +}; + + +/** + * @param {string} text Text. + * @protected + * @return {ol.Feature} Feature. + */ +ol.format.TextFeature.prototype.readFeatureFromText = goog.abstractMethod; + + +/** + * @inheritDoc + */ +ol.format.TextFeature.prototype.readFeatures = function(source) { + return this.readFeaturesFromText(this.getText_(source)); +}; + + +/** + * @param {string} text Text. + * @protected + * @return {Array.} Features. + */ +ol.format.TextFeature.prototype.readFeaturesFromText = goog.abstractMethod; + + +/** + * @inheritDoc + */ +ol.format.TextFeature.prototype.readGeometry = function(source) { + return this.readGeometryFromText(this.getText_(source)); +}; + + +/** + * @param {string} text Text. + * @protected + * @return {ol.geom.Geometry} Geometry. + */ +ol.format.TextFeature.prototype.readGeometryFromText = goog.abstractMethod; + + +/** + * @inheritDoc + */ +ol.format.TextFeature.prototype.readProjection = function(source) { + return this.readProjectionFromText(this.getText_(source)); +}; + + +/** + * @param {string} text Text. + * @protected + * @return {ol.proj.Projection} Projection. + */ +ol.format.TextFeature.prototype.readProjectionFromText = goog.abstractMethod; + + +/** + * @inheritDoc + */ +ol.format.TextFeature.prototype.writeFeature = function(feature) { + return this.writeFeatureText(feature); +}; + + +/** + * @param {ol.Feature} feature Features. + * @protected + * @return {string} Text. + */ +ol.format.TextFeature.prototype.writeFeatureText = goog.abstractMethod; + + +/** + * @inheritDoc + */ +ol.format.TextFeature.prototype.writeFeatures = function(features) { + return this.writeFeaturesText(features); +}; + + +/** + * @param {Array.} features Features. + * @protected + * @return {string} Text. + */ +ol.format.TextFeature.prototype.writeFeaturesText = goog.abstractMethod; + + +/** + * @inheritDoc + */ +ol.format.TextFeature.prototype.writeGeometry = function(geometry) { + return this.writeGeometryText(geometry); +}; + + +/** + * @param {ol.geom.Geometry} geometry Geometry. + * @protected + * @return {string} Text. + */ +ol.format.TextFeature.prototype.writeGeometryText = goog.abstractMethod; diff --git a/float-no-zero/ol/ol/format/topojsonformat.exports b/float-no-zero/ol/ol/format/topojsonformat.exports new file mode 100644 index 0000000000..367c42efb8 --- /dev/null +++ b/float-no-zero/ol/ol/format/topojsonformat.exports @@ -0,0 +1,3 @@ +@exportSymbol ol.format.TopoJSON +@exportProperty ol.format.TopoJSON.prototype.readFeatures +@exportProperty ol.format.TopoJSON.prototype.readProjection diff --git a/float-no-zero/ol/ol/format/topojsonformat.js b/float-no-zero/ol/ol/format/topojsonformat.js new file mode 100644 index 0000000000..3095cf7078 --- /dev/null +++ b/float-no-zero/ol/ol/format/topojsonformat.js @@ -0,0 +1,386 @@ +goog.provide('ol.format.TopoJSON'); + +goog.require('goog.array'); +goog.require('goog.asserts'); +goog.require('goog.object'); +goog.require('ol.Feature'); +goog.require('ol.format.JSONFeature'); +goog.require('ol.geom.LineString'); +goog.require('ol.geom.MultiLineString'); +goog.require('ol.geom.MultiPoint'); +goog.require('ol.geom.MultiPolygon'); +goog.require('ol.geom.Point'); +goog.require('ol.geom.Polygon'); +goog.require('ol.proj'); + + + +/** + * @constructor + * @extends {ol.format.JSONFeature} + * @param {olx.format.TopoJSONOptions=} opt_options Options. + * @todo stability experimental + */ +ol.format.TopoJSON = function(opt_options) { + + var options = goog.isDef(opt_options) ? opt_options : {}; + + goog.base(this); + + /** + * @private + * @type {ol.proj.Projection} + */ + this.defaultProjection_ = + ol.proj.get(options.defaultProjection || 'EPSG:4326'); + +}; +goog.inherits(ol.format.TopoJSON, ol.format.JSONFeature); + + +/** + * @const {Array.} + * @private + */ +ol.format.TopoJSON.EXTENSIONS_ = ['.topojson']; + + +/** + * Concatenate arcs into a coordinate array. + * @param {Array.} indices Indices of arcs to concatenate. Negative + * values indicate arcs need to be reversed. + * @param {Array.>} arcs Array of arcs (already + * transformed). + * @return {Array.>} Coordinates array. + * @private + */ +ol.format.TopoJSON.concatenateArcs_ = function(indices, arcs) { + var coordinates = []; + var index, arc; + var i, ii; + var j, jj; + for (i = 0, ii = indices.length; i < ii; ++i) { + index = indices[i]; + if (i > 0) { + // splicing together arcs, discard last point + coordinates.pop(); + } + if (index >= 0) { + // forward arc + arc = arcs[index]; + } else { + // reverse arc + arc = arcs[~index].slice().reverse(); + } + coordinates.push.apply(coordinates, arc); + } + // provide fresh copies of coordinate arrays + for (j = 0, jj = coordinates.length; j < jj; ++j) { + coordinates[j] = coordinates[j].slice(); + } + return coordinates; +}; + + +/** + * Create a point from a TopoJSON geometry object. + * + * @param {TopoJSONGeometry} object TopoJSON object. + * @param {Array.} scale Scale for each dimension. + * @param {Array.} translate Translation for each dimension. + * @return {ol.geom.Point} Geometry. + * @private + */ +ol.format.TopoJSON.readPointGeometry_ = + function(object, scale, translate) { + var coordinates = object.coordinates; + if (goog.isDef(scale) && goog.isDef(translate)) { + ol.format.TopoJSON.transformVertex_(coordinates, scale, translate); + } + return new ol.geom.Point(coordinates); +}; + + +/** + * Create a multi-point from a TopoJSON geometry object. + * + * @param {TopoJSONGeometry} object TopoJSON object. + * @param {Array.} scale Scale for each dimension. + * @param {Array.} translate Translation for each dimension. + * @return {ol.geom.MultiPoint} Geometry. + * @private + */ +ol.format.TopoJSON.readMultiPointGeometry_ = function(object, scale, + translate) { + var coordinates = object.coordinates; + var i, ii; + if (goog.isDef(scale) && goog.isDef(translate)) { + for (i = 0, ii = coordinates.length; i < ii; ++i) { + ol.format.TopoJSON.transformVertex_(coordinates[i], scale, translate); + } + } + return new ol.geom.MultiPoint(coordinates); +}; + + +/** + * Create a linestring from a TopoJSON geometry object. + * + * @param {TopoJSONGeometry} object TopoJSON object. + * @param {Array.>} arcs Array of arcs. + * @return {ol.geom.LineString} Geometry. + * @private + */ +ol.format.TopoJSON.readLineStringGeometry_ = function(object, arcs) { + var coordinates = ol.format.TopoJSON.concatenateArcs_(object.arcs, arcs); + return new ol.geom.LineString(goog.array.flatten(coordinates)); +}; + + +/** + * Create a multi-linestring from a TopoJSON geometry object. + * + * @param {TopoJSONGeometry} object TopoJSON object. + * @param {Array.>} arcs Array of arcs. + * @return {ol.geom.MultiLineString} Geometry. + * @private + */ +ol.format.TopoJSON.readMultiLineStringGeometry_ = function(object, arcs) { + var coordinates = []; + var i, ii; + for (i = 0, ii = object.arcs.length; i < ii; ++i) { + coordinates[i] = ol.format.TopoJSON.concatenateArcs_(object.arcs[i], arcs); + } + return new ol.geom.MultiLineString(coordinates); +}; + + +/** + * Create a polygon from a TopoJSON geometry object. + * + * @param {TopoJSONGeometry} object TopoJSON object. + * @param {Array.>} arcs Array of arcs. + * @return {ol.geom.Polygon} Geometry. + * @private + */ +ol.format.TopoJSON.readPolygonGeometry_ = function(object, arcs) { + var coordinates = []; + var i, ii; + for (i = 0, ii = object.arcs.length; i < ii; ++i) { + coordinates[i] = ol.format.TopoJSON.concatenateArcs_(object.arcs[i], arcs); + } + return new ol.geom.Polygon(coordinates); +}; + + +/** + * Create a multi-polygon from a TopoJSON geometry object. + * + * @param {TopoJSONGeometry} object TopoJSON object. + * @param {Array.>} arcs Array of arcs. + * @return {ol.geom.MultiPolygon} Geometry. + * @private + */ +ol.format.TopoJSON.readMultiPolygonGeometry_ = function(object, arcs) { + var coordinates = []; + var polyArray, ringCoords, j, jj; + var i, ii; + for (i = 0, ii = object.arcs.length; i < ii; ++i) { + // for each polygon + polyArray = object.arcs[i]; + ringCoords = []; + for (j = 0, jj = polyArray.length; j < jj; ++j) { + // for each ring + ringCoords[j] = ol.format.TopoJSON.concatenateArcs_(polyArray[j], arcs); + } + coordinates[i] = ringCoords; + } + return new ol.geom.MultiPolygon(coordinates); +}; + + +/** + * @inheritDoc + */ +ol.format.TopoJSON.prototype.getExtensions = function() { + return ol.format.TopoJSON.EXTENSIONS_; +}; + + +/** + * Create features from a TopoJSON GeometryCollection object. + * + * @param {TopoJSONGeometryCollection} collection TopoJSON Geometry + * object. + * @param {Array.>} arcs Array of arcs. + * @param {Array.} scale Scale for each dimension. + * @param {Array.} translate Translation for each dimension. + * @return {Array.} Array of features. + * @private + */ +ol.format.TopoJSON.readFeaturesFromGeometryCollection_ = function( + collection, arcs, scale, translate) { + var geometries = collection.geometries; + var features = []; + var i, ii; + for (i = 0, ii = geometries.length; i < ii; ++i) { + features[i] = ol.format.TopoJSON.readFeatureFromGeometry_( + geometries[i], arcs, scale, translate); + } + return features; +}; + + +/** + * Create a feature from a TopoJSON geometry object. + * + * @param {TopoJSONGeometry} object TopoJSON geometry object. + * @param {Array.>} arcs Array of arcs. + * @param {Array.} scale Scale for each dimension. + * @param {Array.} translate Translation for each dimension. + * @return {ol.Feature} Feature. + * @private + */ +ol.format.TopoJSON.readFeatureFromGeometry_ = function(object, arcs, + scale, translate) { + var geometry; + var type = object.type; + var geometryReader = ol.format.TopoJSON.GEOMETRY_READERS_[type]; + goog.asserts.assert(goog.isDef(geometryReader)); + if ((type === 'Point') || (type === 'MultiPoint')) { + geometry = geometryReader(object, scale, translate); + } else { + geometry = geometryReader(object, arcs); + } + var feature = new ol.Feature(); + feature.setGeometry(geometry); + if (goog.isDef(object.id)) { + feature.setId(object.id); + } + if (goog.isDef(object.properties)) { + feature.setValues(object.properties); + } + return feature; +}; + + +/** + * @inheritDoc + */ +ol.format.TopoJSON.prototype.readFeaturesFromObject = function(object) { + if (object.type == 'Topology') { + var topoJSONTopology = /** @type {TopoJSONTopology} */ (object); + var transform, scale = null, translate = null; + if (goog.isDef(topoJSONTopology.transform)) { + transform = /** @type {TopoJSONTransform} */ + (topoJSONTopology.transform); + scale = transform.scale; + translate = transform.translate; + } + var arcs = topoJSONTopology.arcs; + if (goog.isDef(transform)) { + ol.format.TopoJSON.transformArcs_(arcs, scale, translate); + } + /** @type {Array.} */ + var features = []; + var topoJSONFeatures = goog.object.getValues(topoJSONTopology.objects); + var i, ii; + var feature; + for (i = 0, ii = topoJSONFeatures.length; i < ii; ++i) { + if (topoJSONFeatures[i].type === 'GeometryCollection') { + feature = /** @type {TopoJSONGeometryCollection} */ + (topoJSONFeatures[i]); + features.push.apply(features, + ol.format.TopoJSON.readFeaturesFromGeometryCollection_( + feature, arcs, scale, translate)); + } else { + feature = /** @type {TopoJSONGeometry} */ + (topoJSONFeatures[i]); + features.push(ol.format.TopoJSON.readFeatureFromGeometry_( + feature, arcs, scale, translate)); + } + } + return features; + } else { + return []; + } +}; + + +/** + * Apply a linear transform to array of arcs. The provided array of arcs is + * modified in place. + * + * @param {Array.>} arcs Array of arcs. + * @param {Array.} scale Scale for each dimension. + * @param {Array.} translate Translation for each dimension. + * @private + */ +ol.format.TopoJSON.transformArcs_ = function(arcs, scale, translate) { + var i, ii; + for (i = 0, ii = arcs.length; i < ii; ++i) { + ol.format.TopoJSON.transformArc_(arcs[i], scale, translate); + } +}; + + +/** + * Apply a linear transform to an arc. The provided arc is modified in place. + * + * @param {Array.} arc Arc. + * @param {Array.} scale Scale for each dimension. + * @param {Array.} translate Translation for each dimension. + * @private + */ +ol.format.TopoJSON.transformArc_ = function(arc, scale, translate) { + var x = 0; + var y = 0; + var vertex; + var i, ii; + for (i = 0, ii = arc.length; i < ii; ++i) { + vertex = arc[i]; + x += vertex[0]; + y += vertex[1]; + vertex[0] = x; + vertex[1] = y; + ol.format.TopoJSON.transformVertex_(vertex, scale, translate); + } +}; + + +/** + * Apply a linear transform to a vertex. The provided vertex is modified in + * place. + * + * @param {ol.Coordinate} vertex Vertex. + * @param {Array.} scale Scale for each dimension. + * @param {Array.} translate Translation for each dimension. + * @private + */ +ol.format.TopoJSON.transformVertex_ = function(vertex, scale, translate) { + vertex[0] = vertex[0] * scale[0] + translate[0]; + vertex[1] = vertex[1] * scale[1] + translate[1]; +}; + + +/** + * @inheritDoc + */ +ol.format.TopoJSON.prototype.readProjection = function(object) { + return this.defaultProjection_; +}; + + +/** + * @const + * @private + * @type {Object.} + */ +ol.format.TopoJSON.GEOMETRY_READERS_ = { + 'Point': ol.format.TopoJSON.readPointGeometry_, + 'LineString': ol.format.TopoJSON.readLineStringGeometry_, + 'Polygon': ol.format.TopoJSON.readPolygonGeometry_, + 'MultiPoint': ol.format.TopoJSON.readMultiPointGeometry_, + 'MultiLineString': ol.format.TopoJSON.readMultiLineStringGeometry_, + 'MultiPolygon': ol.format.TopoJSON.readMultiPolygonGeometry_ +}; diff --git a/float-no-zero/ol/ol/format/xmlfeatureformat.js b/float-no-zero/ol/ol/format/xmlfeatureformat.js new file mode 100644 index 0000000000..443484da42 --- /dev/null +++ b/float-no-zero/ol/ol/format/xmlfeatureformat.js @@ -0,0 +1,226 @@ +goog.provide('ol.format.XMLFeature'); + +goog.require('goog.array'); +goog.require('goog.asserts'); +goog.require('goog.dom.NodeType'); +goog.require('ol.format.Feature'); +goog.require('ol.format.FormatType'); +goog.require('ol.xml'); + + + +/** + * @constructor + * @extends {ol.format.Feature} + */ +ol.format.XMLFeature = function() { + goog.base(this); +}; +goog.inherits(ol.format.XMLFeature, ol.format.Feature); + + +/** + * @inheritDoc + */ +ol.format.XMLFeature.prototype.getType = function() { + return ol.format.FormatType.XML; +}; + + +/** + * @inheritDoc + */ +ol.format.XMLFeature.prototype.readFeature = function(source) { + if (ol.xml.isDocument(source)) { + return this.readFeatureFromDocument(/** @type {Document} */ (source)); + } else if (ol.xml.isNode(source)) { + return this.readFeatureFromNode(/** @type {Node} */ (source)); + } else if (goog.isString(source)) { + var doc = ol.xml.load(source); + return this.readFeatureFromDocument(doc); + } else { + goog.asserts.fail(); + return null; + } +}; + + +/** + * @param {Document} doc Document. + * @return {ol.Feature} Feature. + */ +ol.format.XMLFeature.prototype.readFeatureFromDocument = function(doc) { + var features = this.readFeaturesFromDocument(doc); + if (features.length > 0) { + return features[0]; + } else { + return null; + } +}; + + +/** + * @param {Node} node Node. + * @return {ol.Feature} Feature. + */ +ol.format.XMLFeature.prototype.readFeatureFromNode = goog.abstractMethod; + + +/** + * @inheritDoc + */ +ol.format.XMLFeature.prototype.readFeatures = function(source) { + if (ol.xml.isDocument(source)) { + return this.readFeaturesFromDocument(/** @type {Document} */ (source)); + } else if (ol.xml.isNode(source)) { + return this.readFeaturesFromNode(/** @type {Node} */ (source)); + } else if (goog.isString(source)) { + var doc = ol.xml.load(source); + return this.readFeaturesFromDocument(doc); + } else { + goog.asserts.fail(); + return []; + } +}; + + +/** + * @param {Document} doc Document. + * @protected + * @return {Array.} Features. + */ +ol.format.XMLFeature.prototype.readFeaturesFromDocument = function(doc) { + /** @type {Array.} */ + var features = []; + var n; + for (n = doc.firstChild; !goog.isNull(n); n = n.nextSibling) { + if (n.nodeType == goog.dom.NodeType.ELEMENT) { + goog.array.extend(features, this.readFeaturesFromNode(n)); + } + } + return features; +}; + + +/** + * @param {Node} node Node. + * @protected + * @return {Array.} Features. + */ +ol.format.XMLFeature.prototype.readFeaturesFromNode = goog.abstractMethod; + + +/** + * @inheritDoc + */ +ol.format.XMLFeature.prototype.readGeometry = function(source) { + if (ol.xml.isDocument(source)) { + return this.readGeometryFromDocument(/** @type {Document} */ (source)); + } else if (ol.xml.isNode(source)) { + return this.readGeometryFromNode(/** @type {Node} */ (source)); + } else if (goog.isString(source)) { + var doc = ol.xml.load(source); + return this.readGeometryFromDocument(doc); + } else { + goog.asserts.fail(); + return null; + } +}; + + +/** + * @param {Document} doc Document. + * @protected + * @return {ol.geom.Geometry} Geometry. + */ +ol.format.XMLFeature.prototype.readGeometryFromDocument = goog.abstractMethod; + + +/** + * @param {Node} node Node. + * @protected + * @return {ol.geom.Geometry} Geometry. + */ +ol.format.XMLFeature.prototype.readGeometryFromNode = goog.abstractMethod; + + +/** + * @inheritDoc + */ +ol.format.XMLFeature.prototype.readProjection = function(source) { + if (ol.xml.isDocument(source)) { + return this.readProjectionFromDocument(/** @type {Document} */ (source)); + } else if (ol.xml.isNode(source)) { + return this.readProjectionFromNode(/** @type {Node} */ (source)); + } else if (goog.isString(source)) { + var doc = ol.xml.load(source); + return this.readProjectionFromDocument(doc); + } else { + goog.asserts.fail(); + return null; + } +}; + + +/** + * @param {Document} doc Document. + * @protected + * @return {ol.proj.Projection} Projection. + */ +ol.format.XMLFeature.prototype.readProjectionFromDocument = goog.abstractMethod; + + +/** + * @param {Node} node Node. + * @protected + * @return {ol.proj.Projection} Projection. + */ +ol.format.XMLFeature.prototype.readProjectionFromNode = goog.abstractMethod; + + +/** + * @inheritDoc + */ +ol.format.XMLFeature.prototype.writeFeature = function(feature) { + return this.writeFeatureNode(feature); +}; + + +/** + * @param {ol.Feature} feature Feature. + * @protected + * @return {Node} Node. + */ +ol.format.XMLFeature.prototype.writeFeatureNode = goog.abstractMethod; + + +/** + * @inheritDoc + */ +ol.format.XMLFeature.prototype.writeFeatures = function(features) { + return this.writeFeaturesNode(features); +}; + + +/** + * @param {Array.} features Features. + * @protected + * @return {Node} Node. + */ +ol.format.XMLFeature.prototype.writeFeaturesNode = goog.abstractMethod; + + +/** + * @inheritDoc + */ +ol.format.XMLFeature.prototype.writeGeometry = function(geometry) { + return this.writeGeometryNode(geometry); +}; + + +/** + * @param {ol.geom.Geometry} geometry Geometry. + * @protected + * @return {Node} Node. + */ +ol.format.XMLFeature.prototype.writeGeometryNode = goog.abstractMethod; diff --git a/float-no-zero/ol/ol/format/xsdformat.js b/float-no-zero/ol/ol/format/xsdformat.js new file mode 100644 index 0000000000..f60fa4cc4f --- /dev/null +++ b/float-no-zero/ol/ol/format/xsdformat.js @@ -0,0 +1,174 @@ +goog.provide('ol.format.XSD'); + +goog.require('goog.asserts'); +goog.require('goog.string'); +goog.require('ol.xml'); + + +/** + * @const + * @type {string} + */ +ol.format.XSD.NAMESPACE_URI = 'http://www.w3.org/2001/XMLSchema'; + + +/** + * @param {Node} node Node. + * @return {boolean|undefined} Boolean. + */ +ol.format.XSD.readBoolean = function(node) { + var s = ol.xml.getAllTextContent(node, false); + return ol.format.XSD.readBooleanString(s); +}; + + +/** + * @param {string} string String. + * @return {boolean|undefined} Boolean. + */ +ol.format.XSD.readBooleanString = function(string) { + var m = /^\s*(true|1)|(false|0)\s*$/.exec(string); + if (m) { + return goog.isDef(m[1]) || false; + } else { + return undefined; + } +}; + + +/** + * @param {Node} node Node. + * @return {number|undefined} DateTime in seconds. + */ +ol.format.XSD.readDateTime = function(node) { + var s = ol.xml.getAllTextContent(node, false); + var re = + /^\s*(\d{4})-(\d{2})-(\d{2})T(\d{2}):(\d{2}):(\d{2})(Z|(?:([+\-])(\d{2})(?::(\d{2}))?))\s*$/; + var m = re.exec(s); + if (m) { + var year = parseInt(m[1], 10); + var month = parseInt(m[2], 10) - 1; + var day = parseInt(m[3], 10); + var hour = parseInt(m[4], 10); + var minute = parseInt(m[5], 10); + var second = parseInt(m[6], 10); + var dateTime = Date.UTC(year, month, day, hour, minute, second) / 1000; + if (m[7] != 'Z') { + var sign = m[8] == '-' ? -1 : 1; + dateTime += sign * 60 * parseInt(m[9], 10); + if (goog.isDef(m[10])) { + dateTime += sign * 60 * 60 * parseInt(m[10], 10); + } + } + return dateTime; + } else { + return undefined; + } +}; + + +/** + * @param {Node} node Node. + * @return {number|undefined} Decimal. + */ +ol.format.XSD.readDecimal = function(node) { + var s = ol.xml.getAllTextContent(node, false); + return ol.format.XSD.readDecimalString(s); +}; + + +/** + * @param {string} string String. + * @return {number|undefined} Decimal. + */ +ol.format.XSD.readDecimalString = function(string) { + // FIXME check spec + var m = /^\s*([+\-]?\d*\.?\d+(?:e[+\-]?\d+)?)\s*$/i.exec(string); + if (m) { + return parseFloat(m[1]); + } else { + return undefined; + } +}; + + +/** + * @param {Node} node Node. + * @return {number|undefined} Non negative integer. + */ +ol.format.XSD.readNonNegativeInteger = function(node) { + var s = ol.xml.getAllTextContent(node, false); + return ol.format.XSD.readNonNegativeIntegerString(s); +}; + + +/** + * @param {string} string String. + * @return {number|undefined} Non negative integer. + */ +ol.format.XSD.readNonNegativeIntegerString = function(string) { + var m = /^\s*(\d+)\s*$/.exec(string); + if (m) { + return parseInt(m[1], 10); + } else { + return undefined; + } +}; + + +/** + * @param {Node} node Node. + * @return {string|undefined} String. + */ +ol.format.XSD.readString = function(node) { + var s = ol.xml.getAllTextContent(node, false); + return goog.string.trim(s); +}; + + +/** + * @param {Node} node Node to append a TextNode with the dateTime to. + * @param {number} dateTime DateTime in seconds. + */ +ol.format.XSD.writeDateTimeTextNode = function(node, dateTime) { + var date = new Date(dateTime * 1000); + var string = date.getUTCFullYear() + '-' + + goog.string.padNumber(date.getUTCMonth() + 1, 2) + '-' + + goog.string.padNumber(date.getUTCDate(), 2) + 'T' + + goog.string.padNumber(date.getUTCHours(), 2) + ':' + + goog.string.padNumber(date.getUTCMinutes(), 2) + ':' + + goog.string.padNumber(date.getUTCSeconds(), 2) + 'Z'; + node.appendChild(ol.xml.DOCUMENT.createTextNode(string)); +}; + + +/** + * @param {Node} node Node to append a TextNode with the decimal to. + * @param {number} decimal Decimal. + */ +ol.format.XSD.writeDecimalTextNode = function(node, decimal) { + var string = decimal.toPrecision(); + node.appendChild(ol.xml.DOCUMENT.createTextNode(string)); +}; + + +/** + * @param {Node} node Node to append a TextNode with the decimal to. + * @param {number} nonNegativeInteger Non negative integer. + */ +ol.format.XSD.writeNonNegativeIntegerTextNode = + function(node, nonNegativeInteger) { + goog.asserts.assert(nonNegativeInteger >= 0); + goog.asserts.assert(nonNegativeInteger == (nonNegativeInteger | 0)); + var string = nonNegativeInteger.toString(); + node.appendChild(ol.xml.DOCUMENT.createTextNode(string)); +}; + + +/** + * @param {Node} node Node to append a TextNode with the string to. + * @param {string} string String. + */ +ol.format.XSD.writeStringTextNode = function(node, string) { + node.appendChild(ol.xml.DOCUMENT.createTextNode(string)); +}; diff --git a/float-no-zero/ol/ol/framestate.js b/float-no-zero/ol/ol/framestate.js new file mode 100644 index 0000000000..23bfee5234 --- /dev/null +++ b/float-no-zero/ol/ol/framestate.js @@ -0,0 +1,52 @@ +// FIXME add view3DState +// FIXME factor out common code between usedTiles and wantedTiles + +goog.provide('ol.FrameState'); +goog.provide('ol.PostRenderFunction'); +goog.provide('ol.PreRenderFunction'); + +goog.require('goog.vec.Mat4'); +goog.require('ol.Attribution'); +goog.require('ol.Extent'); +goog.require('ol.Size'); +goog.require('ol.TileQueue'); +goog.require('ol.TileRange'); +goog.require('ol.View2DState'); +goog.require('ol.layer.Layer'); +goog.require('ol.layer.LayerState'); + + +/** + * @typedef {{animate: boolean, + * attributions: Object., + * coordinateToPixelMatrix: goog.vec.Mat4.Number, + * extent: (null|ol.Extent), + * focus: ol.Coordinate, + * index: number, + * layersArray: Array., + * layerStates: Object., + * logos: Object., + * pixelRatio: number, + * pixelToCoordinateMatrix: goog.vec.Mat4.Number, + * postRenderFunctions: Array., + * size: ol.Size, + * tileQueue: ol.TileQueue, + * time: number, + * usedTiles: Object.>, + * view2DState: ol.View2DState, + * viewHints: Array., + * wantedTiles: Object.>}} + */ +ol.FrameState; + + +/** + * @typedef {function(ol.Map, ?ol.FrameState): boolean} + */ +ol.PostRenderFunction; + + +/** + * @typedef {function(ol.Map, ?ol.FrameState): boolean} + */ +ol.PreRenderFunction; diff --git a/float-no-zero/ol/ol/geolocation.exports b/float-no-zero/ol/ol/geolocation.exports new file mode 100644 index 0000000000..adc26edc01 --- /dev/null +++ b/float-no-zero/ol/ol/geolocation.exports @@ -0,0 +1 @@ +@exportSymbol ol.Geolocation diff --git a/float-no-zero/ol/ol/geolocation.js b/float-no-zero/ol/ol/geolocation.js new file mode 100644 index 0000000000..cc489b1b9e --- /dev/null +++ b/float-no-zero/ol/ol/geolocation.js @@ -0,0 +1,373 @@ +// FIXME handle geolocation not supported + +goog.provide('ol.Geolocation'); +goog.provide('ol.GeolocationProperty'); + +goog.require('goog.events'); +goog.require('goog.events.EventType'); +goog.require('goog.math'); +goog.require('ol.BrowserFeature'); +goog.require('ol.Coordinate'); +goog.require('ol.Object'); +goog.require('ol.proj'); + + +/** + * @enum {string} + */ +ol.GeolocationProperty = { + ACCURACY: 'accuracy', + ALTITUDE: 'altitude', + ALTITUDE_ACCURACY: 'altitudeAccuracy', + HEADING: 'heading', + POSITION: 'position', + PROJECTION: 'projection', + SPEED: 'speed', + TRACKING: 'tracking', + TRACKING_OPTIONS: 'trackingOptions' +}; + + + +/** + * Helper class for providing HTML5 Geolocation capabilities. + * The [Geolocation API](http://dev.w3.org/geo/api/spec-source.html) + * is used to locate a user's position. + * + * Example: + * + * var geolocation = new ol.Geolocation(); + * // take the projection to use from the map's view + * geolocation.bindTo('projection', map.getView()); + * // listen to changes in position + * geolocation.on('change:position', function(evt) { + * window.console.log(geolocation.getPosition()); + * }); + * + * @constructor + * @extends {ol.Object} + * @param {olx.GeolocationOptions=} opt_options Options. + * @todo stability experimental + * @todo observable accuracy {number} readonly the accuracy of the position + * measurement in meters + * @todo observable altitude {number} readonly the altitude of the position in + * meters above mean sea level + * @todo observable altitudeAccuracy {number} readonly the accuracy of the + * altitude measurement in meters + * @todo observable heading {number} readonly the heading of the device in + * radians from north + * @todo observable position {ol.Coordinate} readonly the current position of + * the device reported in the current projection + * @todo observable projection {ol.proj.Projection} readonly the projection to + * report the position in + * @todo observable speed {number} readonly the instantaneous speed of the + * device in meters per second + * @todo observable tracking {number} track the device's position. + * @todo observable trackingOptions {GeolocationPositionOptions} PositionOptions + * as defined by the HTML5 Geolocation spec at + * http://dev.w3.org/geo/api/spec-source.html + */ +ol.Geolocation = function(opt_options) { + + goog.base(this); + + var options = goog.isDef(opt_options) ? opt_options : {}; + + /** + * The unprojected (EPSG:4326) device position. + * @private + * @type {ol.Coordinate} + */ + this.position_ = null; + + /** + * @private + * @type {ol.TransformFunction} + */ + this.transform_ = ol.proj.identityTransform; + + /** + * @private + * @type {number|undefined} + */ + this.watchId_ = undefined; + + goog.events.listen( + this, ol.Object.getChangeEventType(ol.GeolocationProperty.PROJECTION), + this.handleProjectionChanged_, false, this); + goog.events.listen( + this, ol.Object.getChangeEventType(ol.GeolocationProperty.TRACKING), + this.handleTrackingChanged_, false, this); + + if (goog.isDef(options.projection)) { + this.setProjection(ol.proj.get(options.projection)); + } + if (goog.isDef(options.trackingOptions)) { + this.setTrackingOptions(options.trackingOptions); + } + + this.setTracking(goog.isDef(options.tracking) ? options.tracking : false); + +}; +goog.inherits(ol.Geolocation, ol.Object); + + +/** + * @inheritDoc + */ +ol.Geolocation.prototype.disposeInternal = function() { + this.setTracking(false); + goog.base(this, 'disposeInternal'); +}; + + +/** + * @private + */ +ol.Geolocation.prototype.handleProjectionChanged_ = function() { + var projection = this.getProjection(); + if (goog.isDefAndNotNull(projection)) { + this.transform_ = ol.proj.getTransformFromProjections( + ol.proj.get('EPSG:4326'), projection); + if (!goog.isNull(this.position_)) { + this.set( + ol.GeolocationProperty.POSITION, this.transform_(this.position_)); + } + } +}; + + +/** + * @private + */ +ol.Geolocation.prototype.handleTrackingChanged_ = function() { + if (ol.BrowserFeature.HAS_GEOLOCATION) { + var tracking = this.getTracking(); + if (tracking && !goog.isDef(this.watchId_)) { + this.watchId_ = goog.global.navigator.geolocation.watchPosition( + goog.bind(this.positionChange_, this), + goog.bind(this.positionError_, this), + this.getTrackingOptions()); + } else if (!tracking && goog.isDef(this.watchId_)) { + goog.global.navigator.geolocation.clearWatch(this.watchId_); + this.watchId_ = undefined; + } + } +}; + + +/** + * @private + * @param {GeolocationPosition} position position event. + */ +ol.Geolocation.prototype.positionChange_ = function(position) { + var coords = position.coords; + this.set(ol.GeolocationProperty.ACCURACY, coords.accuracy); + this.set(ol.GeolocationProperty.ALTITUDE, + goog.isNull(coords.altitude) ? undefined : coords.altitude); + this.set(ol.GeolocationProperty.ALTITUDE_ACCURACY, + goog.isNull(coords.altitudeAccuracy) ? + undefined : coords.altitudeAccuracy); + this.set(ol.GeolocationProperty.HEADING, goog.isNull(coords.heading) ? + undefined : goog.math.toRadians(coords.heading)); + if (goog.isNull(this.position_)) { + this.position_ = [coords.longitude, coords.latitude]; + } else { + this.position_[0] = coords.longitude; + this.position_[1] = coords.latitude; + } + this.set(ol.GeolocationProperty.POSITION, this.transform_(this.position_)); + this.set(ol.GeolocationProperty.SPEED, + goog.isNull(coords.speed) ? undefined : coords.speed); +}; + + +/** + * @private + * @param {GeolocationPositionError} error error object. + */ +ol.Geolocation.prototype.positionError_ = function(error) { + error.type = goog.events.EventType.ERROR; + this.dispatchEvent(error); +}; + + +/** + * Get the accuracy of the position in meters. + * @return {number|undefined} Position accuracy in meters. + * @todo stability experimental + */ +ol.Geolocation.prototype.getAccuracy = function() { + return /** @type {number|undefined} */ ( + this.get(ol.GeolocationProperty.ACCURACY)); +}; +goog.exportProperty( + ol.Geolocation.prototype, + 'getAccuracy', + ol.Geolocation.prototype.getAccuracy); + + +/** + * Get the altitude associated with the position. + * @return {number|undefined} The altitude in meters above the mean sea level. + * @todo stability experimental + */ +ol.Geolocation.prototype.getAltitude = function() { + return /** @type {number|undefined} */ ( + this.get(ol.GeolocationProperty.ALTITUDE)); +}; +goog.exportProperty( + ol.Geolocation.prototype, + 'getAltitude', + ol.Geolocation.prototype.getAltitude); + + +/** + * Get the altitude accuracy of the position. + * @return {number|undefined} Altitude accuracy in meters. + * @todo stability experimental + */ +ol.Geolocation.prototype.getAltitudeAccuracy = function() { + return /** @type {number|undefined} */ ( + this.get(ol.GeolocationProperty.ALTITUDE_ACCURACY)); +}; +goog.exportProperty( + ol.Geolocation.prototype, + 'getAltitudeAccuracy', + ol.Geolocation.prototype.getAltitudeAccuracy); + + +/** + * Get the heading as radians clockwise from North. + * @return {number|undefined} Heading. + * @todo stability experimental + */ +ol.Geolocation.prototype.getHeading = function() { + return /** @type {number|undefined} */ ( + this.get(ol.GeolocationProperty.HEADING)); +}; +goog.exportProperty( + ol.Geolocation.prototype, + 'getHeading', + ol.Geolocation.prototype.getHeading); + + +/** + * Get the position of the device. + * @return {ol.Coordinate|undefined} position. + * @todo stability experimental + */ +ol.Geolocation.prototype.getPosition = function() { + return /** @type {ol.Coordinate|undefined} */ ( + this.get(ol.GeolocationProperty.POSITION)); +}; +goog.exportProperty( + ol.Geolocation.prototype, + 'getPosition', + ol.Geolocation.prototype.getPosition); + + +/** + * Get the projection associated with the position. + * @return {ol.proj.Projection|undefined} projection. + * @todo stability experimental + */ +ol.Geolocation.prototype.getProjection = function() { + return /** @type {ol.proj.Projection|undefined} */ ( + this.get(ol.GeolocationProperty.PROJECTION)); +}; +goog.exportProperty( + ol.Geolocation.prototype, + 'getProjection', + ol.Geolocation.prototype.getProjection); + + +/** + * Get the speed in meters per second. + * @return {number|undefined} Speed. + * @todo stability experimental + */ +ol.Geolocation.prototype.getSpeed = function() { + return /** @type {number|undefined} */ ( + this.get(ol.GeolocationProperty.SPEED)); +}; +goog.exportProperty( + ol.Geolocation.prototype, + 'getSpeed', + ol.Geolocation.prototype.getSpeed); + + +/** + * Are we tracking the user's position? + * @return {boolean} tracking. + * @todo stability experimental + */ +ol.Geolocation.prototype.getTracking = function() { + return /** @type {boolean} */ ( + this.get(ol.GeolocationProperty.TRACKING)); +}; +goog.exportProperty( + ol.Geolocation.prototype, + 'getTracking', + ol.Geolocation.prototype.getTracking); + + +/** + * Get the tracking options. + * @see http://www.w3.org/TR/geolocation-API/#position-options + * @return {GeolocationPositionOptions|undefined} HTML 5 Gelocation + * tracking options. + * @todo stability experimental + */ +ol.Geolocation.prototype.getTrackingOptions = function() { + return /** @type {GeolocationPositionOptions|undefined} */ ( + this.get(ol.GeolocationProperty.TRACKING_OPTIONS)); +}; +goog.exportProperty( + ol.Geolocation.prototype, + 'getTrackingOptions', + ol.Geolocation.prototype.getTrackingOptions); + + +/** + * Set the projection to use for transforming the coordinates. + * @param {ol.proj.Projection} projection Projection. + * @todo stability experimental + */ +ol.Geolocation.prototype.setProjection = function(projection) { + this.set(ol.GeolocationProperty.PROJECTION, projection); +}; +goog.exportProperty( + ol.Geolocation.prototype, + 'setProjection', + ol.Geolocation.prototype.setProjection); + + +/** + * Enable/disable tracking. + * @param {boolean} tracking Enable or disable tracking. + * @todo stability experimental + */ +ol.Geolocation.prototype.setTracking = function(tracking) { + this.set(ol.GeolocationProperty.TRACKING, tracking); +}; +goog.exportProperty( + ol.Geolocation.prototype, + 'setTracking', + ol.Geolocation.prototype.setTracking); + + +/** + * Set the tracking options. + * @see http://www.w3.org/TR/geolocation-API/#position-options + * @param {GeolocationPositionOptions} options HTML 5 Geolocation + * tracking options. + * @todo stability experimental + */ +ol.Geolocation.prototype.setTrackingOptions = function(options) { + this.set(ol.GeolocationProperty.TRACKING_OPTIONS, options); +}; +goog.exportProperty( + ol.Geolocation.prototype, + 'setTrackingOptions', + ol.Geolocation.prototype.setTrackingOptions); diff --git a/float-no-zero/ol/ol/geom/circle.exports b/float-no-zero/ol/ol/geom/circle.exports new file mode 100644 index 0000000000..e08d6f83be --- /dev/null +++ b/float-no-zero/ol/ol/geom/circle.exports @@ -0,0 +1,11 @@ +@exportSymbol ol.geom.Circle +@exportProperty ol.geom.Circle.prototype.clone +@exportProperty ol.geom.Circle.prototype.getCenter +@exportProperty ol.geom.Circle.prototype.getExtent +@exportProperty ol.geom.Circle.prototype.getRadius +@exportProperty ol.geom.Circle.prototype.getSimplifiedGeometry +@exportProperty ol.geom.Circle.prototype.getType +@exportProperty ol.geom.Circle.prototype.setCenter +@exportProperty ol.geom.Circle.prototype.setCenterAndRadius +@exportProperty ol.geom.Circle.prototype.setRadius +@exportProperty ol.geom.Circle.prototype.transform diff --git a/float-no-zero/ol/ol/geom/circle.js b/float-no-zero/ol/ol/geom/circle.js new file mode 100644 index 0000000000..94d4293deb --- /dev/null +++ b/float-no-zero/ol/ol/geom/circle.js @@ -0,0 +1,215 @@ +goog.provide('ol.geom.Circle'); + +goog.require('goog.asserts'); +goog.require('ol.extent'); +goog.require('ol.geom.GeometryType'); +goog.require('ol.geom.SimpleGeometry'); +goog.require('ol.geom.flat'); + + + +/** + * @constructor + * @extends {ol.geom.SimpleGeometry} + * @param {ol.geom.RawPoint} center Center. + * @param {number=} opt_radius Radius. + * @param {ol.geom.GeometryLayout=} opt_layout Layout. + * @todo stability experimental + */ +ol.geom.Circle = function(center, opt_radius, opt_layout) { + goog.base(this); + var radius = goog.isDef(opt_radius) ? opt_radius : 0; + this.setCenterAndRadius(center, radius, opt_layout); +}; +goog.inherits(ol.geom.Circle, ol.geom.SimpleGeometry); + + +/** + * @inheritDoc + */ +ol.geom.Circle.prototype.clone = function() { + var circle = new ol.geom.Circle(null); + circle.setFlatCoordinates(this.layout, this.flatCoordinates.slice()); + return circle; +}; + + +/** + * @inheritDoc + */ +ol.geom.Circle.prototype.closestPointXY = + function(x, y, closestPoint, minSquaredDistance) { + var flatCoordinates = this.flatCoordinates; + var dx = x - flatCoordinates[0]; + var dy = y - flatCoordinates[1]; + var squaredDistance = dx * dx + dy * dy; + if (squaredDistance < minSquaredDistance) { + var i; + if (squaredDistance === 0) { + for (i = 0; i < this.stride; ++i) { + closestPoint[i] = flatCoordinates[i]; + } + } else { + var delta = this.getRadius() / Math.sqrt(squaredDistance); + closestPoint[0] = flatCoordinates[0] + delta * dx; + closestPoint[1] = flatCoordinates[1] + delta * dy; + for (i = 2; i < this.stride; ++i) { + closestPoint[i] = flatCoordinates[i]; + } + } + closestPoint.length = this.stride; + return squaredDistance; + } else { + return minSquaredDistance; + } +}; + + +/** + * @inheritDoc + */ +ol.geom.Circle.prototype.containsXY = function(x, y) { + var flatCoordinates = this.flatCoordinates; + var dx = x - flatCoordinates[0]; + var dy = y - flatCoordinates[1]; + return dx * dx + dy * dy <= this.getRadiusSquared_(); +}; + + +/** + * @return {ol.geom.RawPoint} Center. + * @todo stability experimental + */ +ol.geom.Circle.prototype.getCenter = function() { + return this.flatCoordinates.slice(0, this.stride); +}; + + +/** + * @inheritDoc + */ +ol.geom.Circle.prototype.getExtent = function(opt_extent) { + if (this.extentRevision != this.getRevision()) { + var flatCoordinates = this.flatCoordinates; + var radius = flatCoordinates[this.stride] - flatCoordinates[0]; + this.extent = ol.extent.createOrUpdate( + flatCoordinates[0] - radius, flatCoordinates[1] - radius, + flatCoordinates[0] + radius, flatCoordinates[1] + radius, + this.extent); + this.extentRevision = this.getRevision(); + } + goog.asserts.assert(goog.isDef(this.extent)); + return ol.extent.returnOrUpdate(this.extent, opt_extent); +}; + + +/** + * @return {number} Radius. + * @todo stability experimental + */ +ol.geom.Circle.prototype.getRadius = function() { + return Math.sqrt(this.getRadiusSquared_()); +}; + + +/** + * @private + * @return {number} Radius squared. + */ +ol.geom.Circle.prototype.getRadiusSquared_ = function() { + var dx = this.flatCoordinates[this.stride] - this.flatCoordinates[0]; + var dy = this.flatCoordinates[this.stride + 1] - this.flatCoordinates[1]; + return dx * dx + dy * dy; +}; + + +/** + * @inheritDoc + */ +ol.geom.Circle.prototype.getSimplifiedGeometry = function(squaredTolerance) { + return this; +}; + + +/** + * @inheritDoc + */ +ol.geom.Circle.prototype.getType = function() { + return ol.geom.GeometryType.CIRCLE; +}; + + +/** + * @param {ol.geom.RawPoint} center Center. + * @todo stability experimental + */ +ol.geom.Circle.prototype.setCenter = function(center) { + var stride = this.stride; + goog.asserts.assert(center.length == stride); + var radius = this.flatCoordinates[stride] - this.flatCoordinates[0]; + var flatCoordinates = center.slice(); + flatCoordinates[stride] = flatCoordinates[0] + radius; + var i; + for (i = 1; i < stride; ++i) { + flatCoordinates[stride + i] = center[i]; + } + this.setFlatCoordinates(this.layout, flatCoordinates); +}; + + +/** + * @param {ol.geom.RawPoint} center Center. + * @param {number} radius Radius. + * @param {ol.geom.GeometryLayout=} opt_layout Layout. + * @todo stability experimental + */ +ol.geom.Circle.prototype.setCenterAndRadius = + function(center, radius, opt_layout) { + if (goog.isNull(center)) { + this.setFlatCoordinates(ol.geom.GeometryLayout.XY, null); + } else { + this.setLayout(opt_layout, center, 0); + if (goog.isNull(this.flatCoordinates)) { + this.flatCoordinates = []; + } + /** @type {Array.} */ + var flatCoordinates = this.flatCoordinates; + var offset = ol.geom.flat.deflateCoordinate( + flatCoordinates, 0, center, this.stride); + flatCoordinates[offset++] = flatCoordinates[0] + radius; + var i, ii; + for (i = 1, ii = this.stride; i < ii; ++i) { + flatCoordinates[offset++] = flatCoordinates[i]; + } + flatCoordinates.length = offset; + this.dispatchChangeEvent(); + } +}; + + +/** + * @param {ol.geom.GeometryLayout} layout Layout. + * @param {Array.} flatCoordinates Flat coordinates. + */ +ol.geom.Circle.prototype.setFlatCoordinates = + function(layout, flatCoordinates) { + this.setFlatCoordinatesInternal(layout, flatCoordinates); + this.dispatchChangeEvent(); +}; + + +/** + * @param {number} radius Radius. + * @todo stability experimental + */ +ol.geom.Circle.prototype.setRadius = function(radius) { + goog.asserts.assert(!goog.isNull(this.flatCoordinates)); + this.flatCoordinates[this.stride] = this.flatCoordinates[0] + radius; + this.dispatchChangeEvent(); +}; + + +/** + * @inheritDoc + */ +ol.geom.Circle.prototype.transform = goog.abstractMethod; diff --git a/float-no-zero/ol/ol/geom/closestgeom.js b/float-no-zero/ol/ol/geom/closestgeom.js new file mode 100644 index 0000000000..0084a0d6f6 --- /dev/null +++ b/float-no-zero/ol/ol/geom/closestgeom.js @@ -0,0 +1,219 @@ +// FIXME find better names for these functions + +goog.provide('ol.geom.closest'); + +goog.require('goog.asserts'); +goog.require('ol.geom.flat'); + + +/** + * Return the squared of the largest distance between any pair of consecutive + * coordinates. + * @param {Array.} flatCoordinates Flat coordinates. + * @param {number} offset Offset. + * @param {number} end End. + * @param {number} stride Stride. + * @param {number} maxSquaredDelta Max squared delta. + * @return {number} Max squared delta. + */ +ol.geom.closest.getMaxSquaredDelta = + function(flatCoordinates, offset, end, stride, maxSquaredDelta) { + var x1 = flatCoordinates[offset]; + var y1 = flatCoordinates[offset + 1]; + for (offset += stride; offset < end; offset += stride) { + var x2 = flatCoordinates[offset]; + var y2 = flatCoordinates[offset + 1]; + var squaredDelta = ol.geom.flat.squaredDistance(x1, y1, x2, y2); + if (squaredDelta > maxSquaredDelta) { + maxSquaredDelta = squaredDelta; + } + x1 = x2; + y1 = y2; + } + return maxSquaredDelta; +}; + + +/** + * @param {Array.} flatCoordinates Flat coordinates. + * @param {number} offset Offset. + * @param {Array.} ends Ends. + * @param {number} stride Stride. + * @param {number} maxSquaredDelta Max squared delta. + * @return {number} Max squared delta. + */ +ol.geom.closest.getsMaxSquaredDelta = + function(flatCoordinates, offset, ends, stride, maxSquaredDelta) { + var i, ii; + for (i = 0, ii = ends.length; i < ii; ++i) { + var end = ends[i]; + maxSquaredDelta = ol.geom.closest.getMaxSquaredDelta( + flatCoordinates, offset, end, stride, maxSquaredDelta); + offset = end; + } + return maxSquaredDelta; +}; + + +/** + * @param {Array.} flatCoordinates Flat coordinates. + * @param {number} offset Offset. + * @param {Array.>} endss Endss. + * @param {number} stride Stride. + * @param {number} maxSquaredDelta Max squared delta. + * @return {number} Max squared delta. + */ +ol.geom.closest.getssMaxSquaredDelta = + function(flatCoordinates, offset, endss, stride, maxSquaredDelta) { + var i, ii; + for (i = 0, ii = endss.length; i < ii; ++i) { + var ends = endss[i]; + maxSquaredDelta = ol.geom.closest.getsMaxSquaredDelta( + flatCoordinates, offset, ends, stride, maxSquaredDelta); + offset = ends[ends.length - 1]; + } + return maxSquaredDelta; +}; + + +/** + * @param {Array.} flatCoordinates Flat coordinates. + * @param {number} offset Offset. + * @param {number} end End. + * @param {number} stride Stride. + * @param {number} maxDelta Max delta. + * @param {boolean} isRing Is ring. + * @param {number} x X. + * @param {number} y Y. + * @param {Array.} closestPoint Closest point. + * @param {number} minSquaredDistance Minimum squared distance. + * @param {Array.=} opt_tmpPoint Temporary point object. + * @return {number} Minimum squared distance. + */ +ol.geom.closest.getClosestPoint = function(flatCoordinates, offset, end, stride, + maxDelta, isRing, x, y, closestPoint, minSquaredDistance, opt_tmpPoint) { + if (offset == end) { + return minSquaredDistance; + } + var i, squaredDistance; + if (maxDelta === 0) { + // All points are identical, so just test the first point. + squaredDistance = ol.geom.flat.squaredDistance( + x, y, flatCoordinates[offset], flatCoordinates[offset + 1]); + if (squaredDistance < minSquaredDistance) { + for (i = 0; i < stride; ++i) { + closestPoint[i] = flatCoordinates[offset + i]; + } + closestPoint.length = stride; + return squaredDistance; + } else { + return minSquaredDistance; + } + } + goog.asserts.assert(maxDelta > 0); + var tmpPoint = goog.isDef(opt_tmpPoint) ? opt_tmpPoint : [NaN, NaN]; + var index = offset + stride; + while (index < end) { + ol.geom.flat.closestPoint( + flatCoordinates, index - stride, index, stride, x, y, tmpPoint); + squaredDistance = ol.geom.flat.squaredDistance( + x, y, tmpPoint[0], tmpPoint[1]); + if (squaredDistance < minSquaredDistance) { + minSquaredDistance = squaredDistance; + for (i = 0; i < stride; ++i) { + closestPoint[i] = tmpPoint[i]; + } + closestPoint.length = stride; + index += stride; + } else { + // Skip ahead multiple points, because we know that all the skipped + // points cannot be any closer than the closest point we have found so + // far. We know this because we know how close the current point is, how + // close the closest point we have found so far is, and the maximum + // distance between consecutive points. For example, if we're currently + // at distance 10, the best we've found so far is 3, and that the maximum + // distance between consecutive points is 2, then we'll need to skip at + // least (10 - 3) / 2 == 3 (rounded down) points to have any chance of + // finding a closer point. We use Math.max(..., 1) to ensure that we + // always advance at least one point, to avoid an infinite loop. + index += stride * Math.max( + ((Math.sqrt(squaredDistance) - + Math.sqrt(minSquaredDistance)) / maxDelta) | 0, 1); + } + } + if (isRing) { + // Check the closing segment. + ol.geom.flat.closestPoint( + flatCoordinates, end - stride, offset, stride, x, y, tmpPoint); + squaredDistance = ol.geom.flat.squaredDistance( + x, y, tmpPoint[0], tmpPoint[1]); + if (squaredDistance < minSquaredDistance) { + minSquaredDistance = squaredDistance; + for (i = 0; i < stride; ++i) { + closestPoint[i] = tmpPoint[i]; + } + closestPoint.length = stride; + } + } + return minSquaredDistance; +}; + + +/** + * @param {Array.} flatCoordinates Flat coordinates. + * @param {number} offset Offset. + * @param {Array.} ends Ends. + * @param {number} stride Stride. + * @param {number} maxDelta Max delta. + * @param {boolean} isRing Is ring. + * @param {number} x X. + * @param {number} y Y. + * @param {Array.} closestPoint Closest point. + * @param {number} minSquaredDistance Minimum squared distance. + * @param {Array.=} opt_tmpPoint Temporary point object. + * @return {number} Minimum squared distance. + */ +ol.geom.closest.getsClosestPoint = function(flatCoordinates, offset, ends, + stride, maxDelta, isRing, x, y, closestPoint, minSquaredDistance, + opt_tmpPoint) { + var tmpPoint = goog.isDef(opt_tmpPoint) ? opt_tmpPoint : [NaN, NaN]; + var i, ii; + for (i = 0, ii = ends.length; i < ii; ++i) { + var end = ends[i]; + minSquaredDistance = ol.geom.closest.getClosestPoint( + flatCoordinates, offset, end, stride, + maxDelta, isRing, x, y, closestPoint, minSquaredDistance, tmpPoint); + offset = end; + } + return minSquaredDistance; +}; + + +/** + * @param {Array.} flatCoordinates Flat coordinates. + * @param {number} offset Offset. + * @param {Array.>} endss Endss. + * @param {number} stride Stride. + * @param {number} maxDelta Max delta. + * @param {boolean} isRing Is ring. + * @param {number} x X. + * @param {number} y Y. + * @param {Array.} closestPoint Closest point. + * @param {number} minSquaredDistance Minimum squared distance. + * @param {Array.=} opt_tmpPoint Temporary point object. + * @return {number} Minimum squared distance. + */ +ol.geom.closest.getssClosestPoint = function(flatCoordinates, offset, endss, + stride, maxDelta, isRing, x, y, closestPoint, minSquaredDistance, + opt_tmpPoint) { + var tmpPoint = goog.isDef(opt_tmpPoint) ? opt_tmpPoint : [NaN, NaN]; + var i, ii; + for (i = 0, ii = endss.length; i < ii; ++i) { + var ends = endss[i]; + minSquaredDistance = ol.geom.closest.getsClosestPoint( + flatCoordinates, offset, ends, stride, + maxDelta, isRing, x, y, closestPoint, minSquaredDistance, tmpPoint); + offset = ends[ends.length - 1]; + } + return minSquaredDistance; +}; diff --git a/float-no-zero/ol/ol/geom/flatgeom.js b/float-no-zero/ol/ol/geom/flatgeom.js new file mode 100644 index 0000000000..c463be099f --- /dev/null +++ b/float-no-zero/ol/ol/geom/flatgeom.js @@ -0,0 +1,933 @@ +goog.provide('ol.geom.flat'); + +goog.require('goog.array'); +goog.require('goog.asserts'); +goog.require('goog.math'); +goog.require('goog.vec.Mat4'); +goog.require('ol.extent'); + + +/** + * Returns the point on the 2D line segment flatCoordinates[offset1] to + * flatCoordinates[offset2] that is closest to the point (x, y). Extra + * dimensions are linearly interpolated. + * @param {Array.} flatCoordinates Flat coordinates. + * @param {number} offset1 Offset 1. + * @param {number} offset2 Offset 2. + * @param {number} stride Stride. + * @param {number} x X. + * @param {number} y Y. + * @param {Array.} closestPoint Closest point. + */ +ol.geom.flat.closestPoint = + function(flatCoordinates, offset1, offset2, stride, x, y, closestPoint) { + var x1 = flatCoordinates[offset1]; + var y1 = flatCoordinates[offset1 + 1]; + var dx = flatCoordinates[offset2] - x1; + var dy = flatCoordinates[offset2 + 1] - y1; + var i, offset; + if (dx === 0 && dy === 0) { + offset = offset1; + } else { + var t = ((x - x1) * dx + (y - y1) * dy) / (dx * dx + dy * dy); + if (t > 1) { + offset = offset2; + } else if (t > 0) { + for (i = 0; i < stride; ++i) { + closestPoint[i] = goog.math.lerp(flatCoordinates[offset1 + i], + flatCoordinates[offset2 + i], t); + } + closestPoint.length = stride; + return; + } else { + offset = offset1; + } + } + for (i = 0; i < stride; ++i) { + closestPoint[i] = flatCoordinates[offset + i]; + } + closestPoint.length = stride; +}; + + +/** + * @param {Array.} flatCoordinates Flat coordinates. + * @param {number} offset Offset. + * @param {ol.Coordinate} coordinate Coordinate. + * @param {number} stride Stride. + * @return {number} offset Offset. + */ +ol.geom.flat.deflateCoordinate = + function(flatCoordinates, offset, coordinate, stride) { + goog.asserts.assert(coordinate.length == stride); + var i, ii; + for (i = 0, ii = coordinate.length; i < ii; ++i) { + flatCoordinates[offset++] = coordinate[i]; + } + return offset; +}; + + +/** + * @param {Array.} flatCoordinates Flat coordinates. + * @param {number} offset Offset. + * @param {Array.} coordinates Coordinates. + * @param {number} stride Stride. + * @return {number} offset Offset. + */ +ol.geom.flat.deflateCoordinates = + function(flatCoordinates, offset, coordinates, stride) { + var i, ii; + for (i = 0, ii = coordinates.length; i < ii; ++i) { + var coordinate = coordinates[i]; + goog.asserts.assert(coordinate.length == stride); + var j; + for (j = 0; j < stride; ++j) { + flatCoordinates[offset++] = coordinate[j]; + } + } + return offset; +}; + + +/** + * @param {Array.} flatCoordinates Flat coordinates. + * @param {number} offset Offset. + * @param {Array.>} coordinatess Coordinatess. + * @param {number} stride Stride. + * @param {Array.=} opt_ends Ends. + * @return {Array.} Ends. + */ +ol.geom.flat.deflateCoordinatess = + function(flatCoordinates, offset, coordinatess, stride, opt_ends) { + var ends = goog.isDef(opt_ends) ? opt_ends : []; + var i = 0; + var j, jj; + for (j = 0, jj = coordinatess.length; j < jj; ++j) { + var end = ol.geom.flat.deflateCoordinates( + flatCoordinates, offset, coordinatess[j], stride); + ends[i++] = end; + offset = end; + } + ends.length = i; + return ends; +}; + + +/** + * @param {Array.} flatCoordinates Flat coordinates. + * @param {number} offset Offset. + * @param {Array.>>} coordinatesss Coordinatesss. + * @param {number} stride Stride. + * @param {Array.>=} opt_endss Endss. + * @return {Array.>} Endss. + */ +ol.geom.flat.deflateCoordinatesss = + function(flatCoordinates, offset, coordinatesss, stride, opt_endss) { + var endss = goog.isDef(opt_endss) ? opt_endss : []; + var i = 0; + var j, jj; + for (j = 0, jj = coordinatesss.length; j < jj; ++j) { + var ends = ol.geom.flat.deflateCoordinatess( + flatCoordinates, offset, coordinatesss[j], stride, endss[i]); + endss[i++] = ends; + offset = ends[ends.length - 1]; + } + endss.length = i; + return endss; +}; + + +/** + * @param {Array.} flatCoordinates Flat coordinates. + * @param {number} offset Offset. + * @param {number} end End. + * @param {number} stride Stride. + * @param {Array.=} opt_dest Destination. + * @param {number=} opt_destOffset Destination offset. + * @return {Array.} Flat coordinates. + */ +ol.geom.flat.flipXY = + function(flatCoordinates, offset, end, stride, opt_dest, opt_destOffset) { + var dest, destOffset; + if (goog.isDef(opt_dest)) { + dest = opt_dest; + destOffset = goog.isDef(opt_destOffset) ? opt_destOffset : 0; + } else { + goog.asserts.assert(!goog.isDef(opt_destOffset)); + dest = []; + destOffset = 0; + } + var j, k; + for (j = offset; j < end; ) { + var x = flatCoordinates[j++]; + dest[destOffset++] = flatCoordinates[j++]; + dest[destOffset++] = x; + for (k = 2; k < stride; ++k) { + dest[destOffset++] = flatCoordinates[j++]; + } + } + dest.length = destOffset; + return dest; +}; + + +/** + * @param {Array.} flatCoordinates Flat coordinates. + * @param {number} offset Offset. + * @param {number} end End. + * @param {number} stride Stride. + * @param {Array.=} opt_coordinates Coordinates. + * @return {Array.} Coordinates. + */ +ol.geom.flat.inflateCoordinates = + function(flatCoordinates, offset, end, stride, opt_coordinates) { + var coordinates = goog.isDef(opt_coordinates) ? opt_coordinates : []; + var i = 0; + var j; + for (j = offset; j < end; j += stride) { + coordinates[i++] = flatCoordinates.slice(j, j + stride); + } + coordinates.length = i; + return coordinates; +}; + + +/** + * @param {Array.} flatCoordinates Flat coordinates. + * @param {number} offset Offset. + * @param {Array.} ends Ends. + * @param {number} stride Stride. + * @param {Array.>=} opt_coordinatess Coordinatess. + * @return {Array.>} Coordinatess. + */ +ol.geom.flat.inflateCoordinatess = + function(flatCoordinates, offset, ends, stride, opt_coordinatess) { + var coordinatess = goog.isDef(opt_coordinatess) ? opt_coordinatess : []; + var i = 0; + var j, jj; + for (j = 0, jj = ends.length; j < jj; ++j) { + var end = ends[j]; + coordinatess[i++] = ol.geom.flat.inflateCoordinates( + flatCoordinates, offset, end, stride, coordinatess[i]); + offset = end; + } + coordinatess.length = i; + return coordinatess; +}; + + +/** + * @param {Array.} flatCoordinates Flat coordinates. + * @param {number} offset Offset. + * @param {Array.>} endss Endss. + * @param {number} stride Stride. + * @param {Array.>>=} opt_coordinatesss + * Coordinatesss. + * @return {Array.>>} Coordinatesss. + */ +ol.geom.flat.inflateCoordinatesss = + function(flatCoordinates, offset, endss, stride, opt_coordinatesss) { + var coordinatesss = goog.isDef(opt_coordinatesss) ? opt_coordinatesss : []; + var i = 0; + var j, jj; + for (j = 0, jj = endss.length; j < jj; ++j) { + var ends = endss[j]; + coordinatesss[i++] = ol.geom.flat.inflateCoordinatess( + flatCoordinates, offset, ends, stride, coordinatesss[i]); + offset = ends[ends.length - 1]; + } + coordinatesss.length = i; + return coordinatesss; +}; + + +/** + * @param {Array.} flatCoordinates Flat coordinates. + * @param {number} offset Offset. + * @param {number} end End. + * @param {number} stride Stride. + * @param {number} fraction Fraction. + * @param {Array.=} opt_dest Destination. + * @return {Array.} Destination. + */ +ol.geom.flat.lineStringInterpolate = + function(flatCoordinates, offset, end, stride, fraction, opt_dest) { + // FIXME interpolate extra dimensions + goog.asserts.assert(0 <= fraction && fraction <= 1); + var pointX = NaN; + var pointY = NaN; + var n = (end - offset) / stride; + if (n === 0) { + goog.asserts.fail(); + } else if (n == 1) { + pointX = flatCoordinates[offset]; + pointY = flatCoordinates[offset + 1]; + } else if (n == 2) { + pointX = (1 - fraction) * flatCoordinates[offset] + + fraction * flatCoordinates[offset + stride]; + pointY = (1 - fraction) * flatCoordinates[offset + 1] + + fraction * flatCoordinates[offset + stride + 1]; + } else { + var x1 = flatCoordinates[offset]; + var y1 = flatCoordinates[offset + 1]; + var length = 0; + var cumulativeLengths = [0]; + var i; + for (i = offset + stride; i < end; i += stride) { + var x2 = flatCoordinates[i]; + var y2 = flatCoordinates[i + 1]; + length += Math.sqrt((x2 - x1) * (x2 - x1) + (y2 - y1) * (y2 - y1)); + cumulativeLengths.push(length); + x1 = x2; + y1 = y2; + } + var target = fraction * length; + var index = goog.array.binarySearch(cumulativeLengths, target); + if (index < 0) { + var t = (target - cumulativeLengths[-index - 2]) / + (cumulativeLengths[-index - 1] - cumulativeLengths[-index - 2]); + var o = offset + (-index - 2) * stride; + pointX = (1 - t) * flatCoordinates[o] + t * flatCoordinates[o + stride]; + pointY = (1 - t) * flatCoordinates[o + 1] + + t * flatCoordinates[o + stride + 1]; + } else { + pointX = flatCoordinates[offset + index * stride]; + pointY = flatCoordinates[offset + index * stride + 1]; + } + } + if (goog.isDefAndNotNull(opt_dest)) { + opt_dest.push(pointX, pointY); + return opt_dest; + } else { + return [pointX, pointY]; + } +}; + + +/** + * @param {Array.} flatCoordinates Flat coordinates. + * @param {number} offset Offset. + * @param {number} end End. + * @param {number} stride Stride. + * @param {number} m M. + * @param {boolean} extrapolate Extrapolate. + * @return {ol.Coordinate} Coordinate. + */ +ol.geom.flat.lineStringCoordinateAtM = + function(flatCoordinates, offset, end, stride, m, extrapolate) { + if (end == offset) { + return null; + } + var coordinate; + if (m < flatCoordinates[offset + stride - 1]) { + if (extrapolate) { + coordinate = flatCoordinates.slice(offset, offset + stride); + coordinate[stride - 1] = m; + return coordinate; + } else { + return null; + } + } else if (flatCoordinates[end - 1] < m) { + if (extrapolate) { + coordinate = flatCoordinates.slice(end - stride, end); + coordinate[stride - 1] = m; + return coordinate; + } else { + return null; + } + } + // FIXME use O(1) search + if (m == flatCoordinates[offset + stride - 1]) { + return flatCoordinates.slice(offset, offset + stride); + } + var lo = offset / stride; + var hi = end / stride; + while (lo < hi) { + var mid = (lo + hi) >> 1; + if (m < flatCoordinates[(mid + 1) * stride - 1]) { + hi = mid; + } else { + lo = mid + 1; + } + } + var m0 = flatCoordinates[lo * stride - 1]; + if (m == m0) { + return flatCoordinates.slice((lo - 1) * stride, (lo - 1) * stride + stride); + } + var m1 = flatCoordinates[(lo + 1) * stride - 1]; + goog.asserts.assert(m0 < m); + goog.asserts.assert(m <= m1); + var t = (m - m0) / (m1 - m0); + coordinate = []; + var i; + for (i = 0; i < stride - 1; ++i) { + coordinate.push((1 - t) * flatCoordinates[(lo - 1) * stride + i] + + t * flatCoordinates[lo * stride + i]); + } + coordinate.push(m); + goog.asserts.assert(coordinate.length == stride); + return coordinate; +}; + + +/** + * @param {Array.} flatCoordinates Flat coordinates. + * @param {number} offset Offset. + * @param {Array.} ends Ends. + * @param {number} stride Stride. + * @param {number} m M. + * @param {boolean} extrapolate Extrapolate. + * @param {boolean} interpolate Interpolate. + * @return {ol.Coordinate} Coordinate. + */ +ol.geom.flat.lineStringsCoordinateAtM = function( + flatCoordinates, offset, ends, stride, m, extrapolate, interpolate) { + if (interpolate) { + return ol.geom.flat.lineStringCoordinateAtM( + flatCoordinates, offset, ends[ends.length - 1], stride, m, extrapolate); + } + var coordinate; + if (m < flatCoordinates[stride - 1]) { + if (extrapolate) { + coordinate = flatCoordinates.slice(0, stride); + coordinate[stride - 1] = m; + return coordinate; + } else { + return null; + } + } + if (flatCoordinates[flatCoordinates.length - 1] < m) { + if (extrapolate) { + coordinate = flatCoordinates.slice(flatCoordinates.length - stride); + coordinate[stride - 1] = m; + return coordinate; + } else { + return null; + } + } + var i, ii; + for (i = 0, ii = ends.length; i < ii; ++i) { + var end = ends[i]; + if (offset == end) { + continue; + } + if (m < flatCoordinates[offset + stride - 1]) { + return null; + } else if (m <= flatCoordinates[end - 1]) { + return ol.geom.flat.lineStringCoordinateAtM( + flatCoordinates, offset, end, stride, m, false); + } + offset = end; + } + goog.asserts.fail(); + return null; +}; + + +/** + * @param {Array.} flatCoordinates Flat coordinates. + * @param {number} offset Offset. + * @param {number} end End. + * @param {number} stride Stride. + * @return {number} Length. + */ +ol.geom.flat.lineStringLength = function(flatCoordinates, offset, end, stride) { + var x1 = flatCoordinates[offset]; + var y1 = flatCoordinates[offset + 1]; + var length = 0; + var i; + for (i = offset + stride; i < end; i += stride) { + var x2 = flatCoordinates[i]; + var y2 = flatCoordinates[i + 1]; + length += Math.sqrt((x2 - x1) * (x2 - x1) + (y2 - y1) * (y2 - y1)); + x1 = x2; + y1 = y2; + } + return length; +}; + + +/** + * @param {Array.} flatCoordinates Flat coordinates. + * @param {number} offset Offset. + * @param {number} end End. + * @param {number} stride Stride. + * @return {number} Area. + */ +ol.geom.flat.linearRingArea = function(flatCoordinates, offset, end, stride) { + var twiceArea = 0; + var x1 = flatCoordinates[end - stride]; + var y1 = flatCoordinates[end - stride + 1]; + for (; offset < end; offset += stride) { + var x2 = flatCoordinates[offset]; + var y2 = flatCoordinates[offset + 1]; + twiceArea += y1 * x2 - x1 * y2; + x1 = x2; + y1 = y2; + } + return twiceArea / 2; +}; + + +/** + * @param {Array.} flatCoordinates Flat coordinates. + * @param {number} offset Offset. + * @param {number} end End. + * @param {number} stride Stride. + * @param {number} x X. + * @param {number} y Y. + * @return {boolean} Contains (x, y). + */ +ol.geom.flat.linearRingContainsXY = + function(flatCoordinates, offset, end, stride, x, y) { + // http://www.ecse.rpi.edu/Homepages/wrf/Research/Short_Notes/pnpoly.html + var contains = false; + var x1 = flatCoordinates[end - stride]; + var y1 = flatCoordinates[end - stride + 1]; + for (; offset < end; offset += stride) { + var x2 = flatCoordinates[offset]; + var y2 = flatCoordinates[offset + 1]; + var intersect = ((y1 > y) != (y2 > y)) && + (x < (x2 - x1) * (y - y1) / (y2 - y1) + x1); + if (intersect) { + contains = !contains; + } + x1 = x2; + y1 = y2; + } + return contains; +}; + + +/** + * @param {Array.} flatCoordinates Flat coordinates. + * @param {number} offset Offset. + * @param {number} end End. + * @param {number} stride Stride. + * @return {boolean} Is clockwise. + */ +ol.geom.flat.linearRingIsClockwise = + function(flatCoordinates, offset, end, stride) { + // http://tinyurl.com/clockwise-method + // https://github.com/OSGeo/gdal/blob/trunk/gdal/ogr/ogrlinearring.cpp + var edge = 0; + var x1 = flatCoordinates[end - stride]; + var y1 = flatCoordinates[end - stride + 1]; + for (; offset < end; offset += stride) { + var x2 = flatCoordinates[offset]; + var y2 = flatCoordinates[offset + 1]; + edge += (x2 - x1) * (y2 + y1); + x1 = x2; + y1 = y2; + } + return edge > 0; +}; + + +/** + * @param {Array.} flatCoordinates Flat coordinates. + * @param {number} offset Offset. + * @param {number} end End. + * @param {number} stride Stride. + * @return {number} Perimeter. + */ +ol.geom.flat.linearRingPerimeter = + function(flatCoordinates, offset, end, stride) { + var perimeter = + ol.geom.flat.lineStringLength(flatCoordinates, offset, end, stride); + var dx = flatCoordinates[end - stride] - flatCoordinates[offset]; + var dy = flatCoordinates[end - stride + 1] - flatCoordinates[offset + 1]; + perimeter += Math.sqrt(dx * dx + dy * dy); + return perimeter; +}; + + +/** + * @param {Array.} flatCoordinates Flat coordinates. + * @param {number} offset Offset. + * @param {Array.} ends Ends. + * @param {number} stride Stride. + * @return {number} Area. + */ +ol.geom.flat.linearRingsArea = function(flatCoordinates, offset, ends, stride) { + var area = 0; + var i, ii; + for (i = 0, ii = ends.length; i < ii; ++i) { + var end = ends[i]; + area += ol.geom.flat.linearRingArea(flatCoordinates, offset, end, stride); + offset = end; + } + return area; +}; + + +/** + * @param {Array.} flatCoordinates Flat coordinates. + * @param {number} offset Offset. + * @param {Array.} ends Ends. + * @param {number} stride Stride. + * @param {number} x X. + * @param {number} y Y. + * @return {boolean} Contains (x, y). + */ +ol.geom.flat.linearRingsContainsXY = + function(flatCoordinates, offset, ends, stride, x, y) { + goog.asserts.assert(ends.length > 0); + if (ends.length === 0) { + return false; + } + if (!ol.geom.flat.linearRingContainsXY( + flatCoordinates, offset, ends[0], stride, x, y)) { + return false; + } + var i, ii; + for (i = 1, ii = ends.length; i < ii; ++i) { + if (ol.geom.flat.linearRingContainsXY( + flatCoordinates, ends[i - 1], ends[i], stride, x, y)) { + return false; + } + } + return true; +}; + + +/** + * Calculates a point that is likely to lie in the interior of the linear rings. + * Inspired by JTS's com.vividsolutions.jts.geom.Geometry#getInteriorPoint. + * @param {Array.} flatCoordinates Flat coordinates. + * @param {number} offset Offset. + * @param {Array.} ends Ends. + * @param {number} stride Stride. + * @param {Array.} flatCenters Flat centers. + * @param {number} flatCentersOffset Flat center offset. + * @param {Array.=} opt_dest Destination. + * @return {Array.} Destination. + */ +ol.geom.flat.linearRingsGetInteriorPoint = function(flatCoordinates, offset, + ends, stride, flatCenters, flatCentersOffset, opt_dest) { + var i, ii, x, x1, x2, y1, y2; + var y = flatCenters[flatCentersOffset + 1]; + /** @type {Array.} */ + var intersections = []; + // Calculate intersections with the horizontal line + var end = ends[0]; + x1 = flatCoordinates[end - stride]; + y1 = flatCoordinates[end - stride + 1]; + for (i = offset; i < end; i += stride) { + x2 = flatCoordinates[i]; + y2 = flatCoordinates[i + 1]; + if ((y <= y1 && y2 <= y) || (y1 <= y && y <= y2)) { + x = (y - y1) / (y2 - y1) * (x2 - x1) + x1; + intersections.push(x); + } + x1 = x2; + y1 = y2; + } + // Find the longest segment of the horizontal line that has its center point + // inside the linear ring. + var pointX = NaN; + var maxSegmentLength = -Infinity; + intersections.sort(); + x1 = intersections[0]; + for (i = 1, ii = intersections.length; i < ii; ++i) { + x2 = intersections[i]; + var segmentLength = Math.abs(x2 - x1); + if (segmentLength > maxSegmentLength) { + x = (x1 + x2) / 2; + if (ol.geom.flat.linearRingsContainsXY( + flatCoordinates, offset, ends, stride, x, y)) { + pointX = x; + maxSegmentLength = segmentLength; + } + } + x1 = x2; + } + if (isNaN(pointX)) { + // There is no horizontal line that has its center point inside the linear + // ring. Use the center of the the linear ring's extent. + pointX = flatCenters[flatCentersOffset]; + } + if (goog.isDef(opt_dest)) { + opt_dest.push(pointX, y); + return opt_dest; + } else { + return [pointX, y]; + } +}; + + +/** + * @param {Array.} flatCoordinates Flat coordinates. + * @param {number} offset Offset. + * @param {Array.} ends Ends. + * @param {number} stride Stride. + * @return {boolean} `true` if all rings are correctly oriented, `false` + * otherwise. + */ +ol.geom.flat.linearRingsAreOriented = + function(flatCoordinates, offset, ends, stride) { + var i, ii; + for (i = 0, ii = ends.length; i < ii; ++i) { + var end = ends[i]; + var isClockwise = ol.geom.flat.linearRingIsClockwise( + flatCoordinates, offset, end, stride); + if (i === 0 ? !isClockwise : isClockwise) { + return false; + } + offset = end; + } + return true; +}; + + +/** + * @param {Array.} flatCoordinates Flat coordinates. + * @param {number} offset Offset. + * @param {Array.>} endss Endss. + * @param {number} stride Stride. + * @return {boolean} `true` if all rings are correctly oriented, `false` + * otherwise. + */ +ol.geom.flat.linearRingssAreOriented = + function(flatCoordinates, offset, endss, stride) { + var i, ii; + for (i = 0, ii = endss.length; i < ii; ++i) { + if (!ol.geom.flat.linearRingsAreOriented( + flatCoordinates, offset, endss[i], stride)) { + return false; + } + } + return true; +}; + + +/** + * @param {Array.} flatCoordinates Flat coordinates. + * @param {number} offset Offset. + * @param {Array.>} endss Endss. + * @param {number} stride Stride. + * @return {number} Area. + */ +ol.geom.flat.linearRingssArea = + function(flatCoordinates, offset, endss, stride) { + var area = 0; + var i, ii; + for (i = 0, ii = endss.length; i < ii; ++i) { + var ends = endss[i]; + area += ol.geom.flat.linearRingsArea(flatCoordinates, offset, ends, stride); + offset = ends[ends.length - 1]; + } + return area; +}; + + +/** + * @param {Array.} flatCoordinates Flat coordinates. + * @param {number} offset Offset. + * @param {Array.>} endss Endss. + * @param {number} stride Stride. + * @param {number} x X. + * @param {number} y Y. + * @return {boolean} Contains (x, y). + */ +ol.geom.flat.linearRingssContainsXY = + function(flatCoordinates, offset, endss, stride, x, y) { + goog.asserts.assert(endss.length > 0); + if (endss.length === 0) { + return false; + } + var i, ii; + for (i = 0, ii = endss.length; i < ii; ++i) { + var ends = endss[i]; + if (ol.geom.flat.linearRingsContainsXY( + flatCoordinates, offset, ends, stride, x, y)) { + return true; + } + offset = ends[ends.length - 1]; + } + return false; +}; + + +/** + * @param {Array.} flatCoordinates Flat coordinates. + * @param {number} offset Offset. + * @param {Array.>} endss Endss. + * @param {number} stride Stride. + * @param {Array.} flatCenters Flat centers. + * @return {Array.} Interior points. + */ +ol.geom.flat.linearRingssGetInteriorPoints = + function(flatCoordinates, offset, endss, stride, flatCenters) { + goog.asserts.assert(2 * endss.length == flatCenters.length); + var interiorPoints = []; + var i, ii; + for (i = 0, ii = endss.length; i < ii; ++i) { + var ends = endss[i]; + interiorPoints = ol.geom.flat.linearRingsGetInteriorPoint(flatCoordinates, + offset, ends, stride, flatCenters, 2 * i, interiorPoints); + offset = ends[ends.length - 1]; + } + return interiorPoints; +}; + + +/** + * @param {Array.} flatCoordinates Flat coordinates. + * @param {number} offset Offset. + * @param {Array.>} endss Endss. + * @param {number} stride Stride. + * @return {Array.} Flat centers. + */ +ol.geom.flat.linearRingssGetFlatCenters = + function(flatCoordinates, offset, endss, stride) { + var flatCenters = []; + var i, ii; + var extent = ol.extent.createEmpty(); + for (i = 0, ii = endss.length; i < ii; ++i) { + var ends = endss[i]; + extent = ol.extent.createOrUpdateFromFlatCoordinates( + flatCoordinates, offset, ends[0], stride); + flatCenters.push((extent[0] + extent[2]) / 2, (extent[1] + extent[3]) / 2); + offset = ends[ends.length - 1]; + } + return flatCenters; +}; + + +/** + * @param {Array.} flatCoordinates Flat coordinates. + * @param {number} offset Offset. + * @param {Array.} ends Ends. + * @param {number} stride Stride. + * @return {number} End. + */ +ol.geom.flat.orientLinearRings = + function(flatCoordinates, offset, ends, stride) { + var i, ii; + for (i = 0, ii = ends.length; i < ii; ++i) { + var end = ends[i]; + var isClockwise = ol.geom.flat.linearRingIsClockwise( + flatCoordinates, offset, end, stride); + var reverse = i === 0 ? !isClockwise : isClockwise; + if (reverse) { + ol.geom.flat.reverseCoordinates(flatCoordinates, offset, end, stride); + } + offset = end; + } + return offset; +}; + + +/** + * @param {Array.} flatCoordinates Flat coordinates. + * @param {number} offset Offset. + * @param {Array.>} endss Endss. + * @param {number} stride Stride. + * @return {number} End. + */ +ol.geom.flat.orientLinearRingss = + function(flatCoordinates, offset, endss, stride) { + var i, ii; + for (i = 0, ii = endss.length; i < ii; ++i) { + offset = ol.geom.flat.orientLinearRings( + flatCoordinates, offset, endss[i], stride); + } + return offset; +}; + + +/** + * @param {Array.} flatCoordinates Flat coordinates. + * @param {number} offset Offset. + * @param {number} end End. + * @param {number} stride Stride. + */ +ol.geom.flat.reverseCoordinates = + function(flatCoordinates, offset, end, stride) { + while (offset < end - stride) { + var i; + for (i = 0; i < stride; ++i) { + var tmp = flatCoordinates[offset + i]; + flatCoordinates[offset + i] = flatCoordinates[end - stride + i]; + flatCoordinates[end - stride + i] = tmp; + } + offset += stride; + end -= stride; + } +}; + + +/** + * Returns the square of the closest distance between the point (x, y) and the + * line segment (x1, y1) to (x2, y2). + * @param {number} x X. + * @param {number} y Y. + * @param {number} x1 X1. + * @param {number} y1 Y1. + * @param {number} x2 X2. + * @param {number} y2 Y2. + * @return {number} Squared distance. + */ +ol.geom.flat.squaredSegmentDistance = function(x, y, x1, y1, x2, y2) { + var dx = x2 - x1; + var dy = y2 - y1; + if (dx !== 0 || dy !== 0) { + var t = ((x - x1) * dx + (y - y1) * dy) / (dx * dx + dy * dy); + if (t > 1) { + x1 = x2; + y1 = y2; + } else if (t > 0) { + x1 += dx * t; + y1 += dy * t; + } + } + return ol.geom.flat.squaredDistance(x, y, x1, y1); +}; + + +/** + * Returns the square of the distance between the points (x1, y1) and (x2, y2). + * @param {number} x1 X1. + * @param {number} y1 Y1. + * @param {number} x2 X2. + * @param {number} y2 Y2. + * @return {number} Squared distance. + */ +ol.geom.flat.squaredDistance = function(x1, y1, x2, y2) { + var dx = x2 - x1; + var dy = y2 - y1; + return dx * dx + dy * dy; +}; + + +/** + * @param {Array.} flatCoordinates Flat coordinates. + * @param {number} stride Stride. + * @param {goog.vec.Mat4.Number} transform Transform. + * @param {Array.=} opt_dest Destination. + * @return {Array.} Transformed coordinates. + */ +ol.geom.flat.transform2D = + function(flatCoordinates, stride, transform, opt_dest) { + var m00 = goog.vec.Mat4.getElement(transform, 0, 0); + var m10 = goog.vec.Mat4.getElement(transform, 1, 0); + var m01 = goog.vec.Mat4.getElement(transform, 0, 1); + var m11 = goog.vec.Mat4.getElement(transform, 1, 1); + var m03 = goog.vec.Mat4.getElement(transform, 0, 3); + var m13 = goog.vec.Mat4.getElement(transform, 1, 3); + var dest = goog.isDef(opt_dest) ? opt_dest : []; + var i = 0; + var j, jj; + for (j = 0, jj = flatCoordinates.length; j < jj; j += stride) { + var x = flatCoordinates[j]; + var y = flatCoordinates[j + 1]; + dest[i++] = m00 * x + m01 * y + m03; + dest[i++] = m10 * x + m11 * y + m13; + } + if (goog.isDef(opt_dest) && dest.length != i) { + dest.length = i; + } + return dest; +}; diff --git a/float-no-zero/ol/ol/geom/geom.jsdoc b/float-no-zero/ol/ol/geom/geom.jsdoc new file mode 100644 index 0000000000..1a947e51f3 --- /dev/null +++ b/float-no-zero/ol/ol/geom/geom.jsdoc @@ -0,0 +1,3 @@ +/** + * @namespace ol.geom + */ diff --git a/float-no-zero/ol/ol/geom/geometry.exports b/float-no-zero/ol/ol/geom/geometry.exports new file mode 100644 index 0000000000..4c332d46de --- /dev/null +++ b/float-no-zero/ol/ol/geom/geometry.exports @@ -0,0 +1,3 @@ +@exportSymbol ol.geom.Geometry +@exportProperty ol.geom.Geometry.prototype.getClosestPoint +@exportProperty ol.geom.Geometry.prototype.getType diff --git a/float-no-zero/ol/ol/geom/geometry.js b/float-no-zero/ol/ol/geom/geometry.js new file mode 100644 index 0000000000..0cf308b55f --- /dev/null +++ b/float-no-zero/ol/ol/geom/geometry.js @@ -0,0 +1,198 @@ +goog.provide('ol.geom.Geometry'); +goog.provide('ol.geom.GeometryType'); + +goog.require('goog.asserts'); +goog.require('goog.functions'); +goog.require('ol.Observable'); + + +/** + * @enum {string} + */ +ol.geom.GeometryType = { + POINT: 'Point', + LINE_STRING: 'LineString', + LINEAR_RING: 'LinearRing', + POLYGON: 'Polygon', + MULTI_POINT: 'MultiPoint', + MULTI_LINE_STRING: 'MultiLineString', + MULTI_POLYGON: 'MultiPolygon', + GEOMETRY_COLLECTION: 'GeometryCollection', + CIRCLE: 'Circle' +}; + + +/** + * @enum {string} + */ +ol.geom.GeometryLayout = { + XY: 'XY', + XYZ: 'XYZ', + XYM: 'XYM', + XYZM: 'XYZM' +}; + + + +/** + * @constructor + * @extends {ol.Observable} + * @todo stability experimental + */ +ol.geom.Geometry = function() { + + goog.base(this); + + /** + * @protected + * @type {ol.Extent|undefined} + */ + this.extent = undefined; + + /** + * @protected + * @type {number} + */ + this.extentRevision = -1; + + /** + * @protected + * @type {Object.} + */ + this.simplifiedGeometryCache = {}; + + /** + * @protected + * @type {number} + */ + this.simplifiedGeometryMaxMinSquaredTolerance = 0; + + /** + * @protected + * @type {number} + */ + this.simplifiedGeometryRevision = 0; + +}; +goog.inherits(ol.geom.Geometry, ol.Observable); + + +/** + * @return {ol.geom.Geometry} Clone. + * @todo stability experimental + */ +ol.geom.Geometry.prototype.clone = goog.abstractMethod; + + +/** + * @param {number} x X. + * @param {number} y Y. + * @param {ol.Coordinate} closestPoint Closest point. + * @param {number} minSquaredDistance Minimum squared distance. + * @return {number} Minimum squared distance. + */ +ol.geom.Geometry.prototype.closestPointXY = goog.abstractMethod; + + +/** + * @param {ol.Coordinate} point Point. + * @param {ol.Coordinate=} opt_closestPoint Closest point. + * @return {ol.Coordinate} Closest point. + * @todo stability experimental + */ +ol.geom.Geometry.prototype.getClosestPoint = function(point, opt_closestPoint) { + var closestPoint = goog.isDef(opt_closestPoint) ? + opt_closestPoint : [NaN, NaN]; + this.closestPointXY(point[0], point[1], closestPoint, Infinity); + return closestPoint; +}; + + +/** + * @param {ol.Coordinate} coordinate Coordinate. + * @return {boolean} Contains coordinate. + * @todo stability experimental + */ +ol.geom.Geometry.prototype.containsCoordinate = function(coordinate) { + return this.containsXY(coordinate[0], coordinate[1]); +}; + + +/** + * @param {number} x X. + * @param {number} y Y. + * @return {boolean} Contains (x, y). + */ +ol.geom.Geometry.prototype.containsXY = goog.functions.FALSE; + + +/** + * @param {ol.Extent=} opt_extent Extent. + * @return {ol.Extent} extent Extent. + * @todo stability experimental + */ +ol.geom.Geometry.prototype.getExtent = goog.abstractMethod; + + +/** + * @param {number} squaredTolerance Squared tolerance. + * @return {ol.geom.Geometry} Simplified geometry. + */ +ol.geom.Geometry.prototype.getSimplifiedGeometry = goog.abstractMethod; + + +/** + * @return {ol.geom.GeometryType} Geometry type. + * @todo stability experimental + */ +ol.geom.Geometry.prototype.getType = goog.abstractMethod; + + +/** + * @param {ol.TransformFunction} transformFn Transform. + * @todo stability experimental + */ +ol.geom.Geometry.prototype.transform = goog.abstractMethod; + + +/** + * @typedef {ol.Coordinate} + */ +ol.geom.RawPoint; + + +/** + * @typedef {Array.} + */ +ol.geom.RawLineString; + + +/** + * @typedef {Array.} + * + */ +ol.geom.RawLinearRing; + + +/** + * @typedef {Array.} + */ +ol.geom.RawPolygon; + + +/** + * @typedef {Array.} + */ +ol.geom.RawMultiPoint; + + +/** + * @typedef {Array.} + */ +ol.geom.RawMultiLineString; + + +/** + * @typedef {Array.} + */ +ol.geom.RawMultiPolygon; diff --git a/float-no-zero/ol/ol/geom/geometrycollection.exports b/float-no-zero/ol/ol/geom/geometrycollection.exports new file mode 100644 index 0000000000..103ce2c40f --- /dev/null +++ b/float-no-zero/ol/ol/geom/geometrycollection.exports @@ -0,0 +1,7 @@ +@exportSymbol ol.geom.GeometryCollection +@exportProperty ol.geom.GeometryCollection.prototype.clone +@exportProperty ol.geom.GeometryCollection.prototype.getExtent +@exportProperty ol.geom.GeometryCollection.prototype.getGeometries +@exportProperty ol.geom.GeometryCollection.prototype.getSimplifiedGeometry +@exportProperty ol.geom.GeometryCollection.prototype.getType +@exportProperty ol.geom.GeometryCollection.prototype.setGeometries diff --git a/float-no-zero/ol/ol/geom/geometrycollection.js b/float-no-zero/ol/ol/geom/geometrycollection.js new file mode 100644 index 0000000000..12b8f5a0b5 --- /dev/null +++ b/float-no-zero/ol/ol/geom/geometrycollection.js @@ -0,0 +1,263 @@ +goog.provide('ol.geom.GeometryCollection'); + +goog.require('goog.array'); +goog.require('goog.asserts'); +goog.require('goog.events'); +goog.require('goog.events.EventType'); +goog.require('goog.object'); +goog.require('ol.extent'); +goog.require('ol.geom.Geometry'); +goog.require('ol.geom.GeometryType'); + + + +/** + * @constructor + * @extends {ol.geom.Geometry} + * @param {Array.=} opt_geometries Geometries. + * @todo stability experimental + */ +ol.geom.GeometryCollection = function(opt_geometries) { + + goog.base(this); + + /** + * @private + * @type {Array.} + */ + this.geometries_ = goog.isDef(opt_geometries) ? opt_geometries : null; + + this.listenGeometriesChange_(); +}; +goog.inherits(ol.geom.GeometryCollection, ol.geom.Geometry); + + +/** + * @param {Array.} geometries Geometries. + * @private + * @return {Array.} Cloned geometries. + */ +ol.geom.GeometryCollection.cloneGeometries_ = function(geometries) { + var clonedGeometries = []; + var i, ii; + for (i = 0, ii = geometries.length; i < ii; ++i) { + clonedGeometries.push(geometries[i].clone()); + } + return clonedGeometries; +}; + + +/** + * @private + */ +ol.geom.GeometryCollection.prototype.unlistenGeometriesChange_ = function() { + var i, ii; + if (goog.isNull(this.geometries_)) { + return; + } + for (i = 0, ii = this.geometries_.length; i < ii; ++i) { + goog.events.unlisten( + this.geometries_[i], goog.events.EventType.CHANGE, + this.dispatchChangeEvent, false, this); + } +}; + + +/** + * @private + */ +ol.geom.GeometryCollection.prototype.listenGeometriesChange_ = function() { + var i, ii; + if (goog.isNull(this.geometries_)) { + return; + } + for (i = 0, ii = this.geometries_.length; i < ii; ++i) { + goog.events.listen( + this.geometries_[i], goog.events.EventType.CHANGE, + this.dispatchChangeEvent, false, this); + } +}; + + +/** + * @inheritDoc + */ +ol.geom.GeometryCollection.prototype.clone = function() { + var geometryCollection = new ol.geom.GeometryCollection(null); + geometryCollection.setGeometries(this.geometries_); + return geometryCollection; +}; + + +/** + * @inheritDoc + */ +ol.geom.GeometryCollection.prototype.closestPointXY = + function(x, y, closestPoint, minSquaredDistance) { + if (minSquaredDistance < + ol.extent.closestSquaredDistanceXY(this.getExtent(), x, y)) { + return minSquaredDistance; + } + var geometries = this.geometries_; + var i, ii; + for (i = 0, ii = geometries.length; i < ii; ++i) { + minSquaredDistance = geometries[i].closestPointXY( + x, y, closestPoint, minSquaredDistance); + } + return minSquaredDistance; +}; + + +/** + * @inheritDoc + */ +ol.geom.GeometryCollection.prototype.containsXY = function(x, y) { + var geometries = this.geometries_; + var i, ii; + for (i = 0, ii = geometries.length; i < ii; ++i) { + if (geometries[i].containsXY(x, y)) { + return true; + } + } + return false; +}; + + +/** + * @inheritDoc + */ +ol.geom.GeometryCollection.prototype.getExtent = function(opt_extent) { + if (this.extentRevision != this.getRevision()) { + var extent = ol.extent.createOrUpdateEmpty(this.extent); + var geometries = this.geometries_; + var i, ii; + for (i = 0, ii = geometries.length; i < ii; ++i) { + ol.extent.extend(extent, geometries[i].getExtent()); + } + this.extent = extent; + this.extentRevision = this.getRevision(); + } + goog.asserts.assert(goog.isDef(this.extent)); + return ol.extent.returnOrUpdate(this.extent, opt_extent); +}; + + +/** + * @return {Array.} Geometries. + * @todo stability experimental + */ +ol.geom.GeometryCollection.prototype.getGeometries = function() { + return ol.geom.GeometryCollection.cloneGeometries_(this.geometries_); +}; + + +/** + * @return {Array.} Geometries. + */ +ol.geom.GeometryCollection.prototype.getGeometriesArray = function() { + return this.geometries_; +}; + + +/** + * @inheritDoc + */ +ol.geom.GeometryCollection.prototype.getSimplifiedGeometry = + function(squaredTolerance) { + if (this.simplifiedGeometryRevision != this.getRevision()) { + goog.object.clear(this.simplifiedGeometryCache); + this.simplifiedGeometryMaxMinSquaredTolerance = 0; + this.simplifiedGeometryRevision = this.getRevision(); + } + if (squaredTolerance < 0 || + (this.simplifiedGeometryMaxMinSquaredTolerance !== 0 && + squaredTolerance < this.simplifiedGeometryMaxMinSquaredTolerance)) { + return this; + } + var key = squaredTolerance.toString(); + if (this.simplifiedGeometryCache.hasOwnProperty(key)) { + return this.simplifiedGeometryCache[key]; + } else { + var simplifiedGeometries = []; + var geometries = this.geometries_; + var simplified = false; + var i, ii; + for (i = 0, ii = geometries.length; i < ii; ++i) { + var geometry = geometries[i]; + var simplifiedGeometry = geometry.getSimplifiedGeometry(squaredTolerance); + simplifiedGeometries.push(simplifiedGeometry); + if (simplifiedGeometry !== geometry) { + simplified = true; + } + } + if (simplified) { + var simplifiedGeometryCollection = new ol.geom.GeometryCollection(null); + simplifiedGeometryCollection.setGeometriesArray(simplifiedGeometries); + this.simplifiedGeometryCache[key] = simplifiedGeometryCollection; + return simplifiedGeometryCollection; + } else { + this.simplifiedGeometryMaxMinSquaredTolerance = squaredTolerance; + return this; + } + } +}; + + +/** + * @inheritDoc + */ +ol.geom.GeometryCollection.prototype.getType = function() { + return ol.geom.GeometryType.GEOMETRY_COLLECTION; +}; + + +/** + * @return {boolean} Is empty. + * @todo stability experimental + */ +ol.geom.GeometryCollection.prototype.isEmpty = function() { + return goog.array.isEmpty(this.geometries_); +}; + + +/** + * @param {Array.} geometries Geometries. + * @todo stability experimental + */ +ol.geom.GeometryCollection.prototype.setGeometries = function(geometries) { + this.setGeometriesArray( + ol.geom.GeometryCollection.cloneGeometries_(geometries)); +}; + + +/** + * @param {Array.} geometries Geometries. + */ +ol.geom.GeometryCollection.prototype.setGeometriesArray = function(geometries) { + this.unlistenGeometriesChange_(); + this.geometries_ = geometries; + this.listenGeometriesChange_(); + this.dispatchChangeEvent(); +}; + + +/** + * @inheritDoc + */ +ol.geom.GeometryCollection.prototype.transform = function(transformFn) { + var geometries = this.geometries_; + var i, ii; + for (i = 0, ii = geometries.length; i < ii; ++i) { + geometries[i].transform(transformFn); + } + this.dispatchChangeEvent(); +}; + + +/** + * @inheritDoc + */ +ol.geom.GeometryCollection.prototype.disposeInternal = function() { + this.unlistenGeometriesChange_(); + goog.base(this, 'disposeInternal'); +}; diff --git a/float-no-zero/ol/ol/geom/linearring.exports b/float-no-zero/ol/ol/geom/linearring.exports new file mode 100644 index 0000000000..568949b1bb --- /dev/null +++ b/float-no-zero/ol/ol/geom/linearring.exports @@ -0,0 +1,6 @@ +@exportSymbol ol.geom.LinearRing +@exportProperty ol.geom.LinearRing.prototype.clone +@exportProperty ol.geom.LinearRing.prototype.getArea +@exportProperty ol.geom.LinearRing.prototype.getCoordinates +@exportProperty ol.geom.LinearRing.prototype.getType +@exportProperty ol.geom.LinearRing.prototype.setCoordinates diff --git a/float-no-zero/ol/ol/geom/linearring.js b/float-no-zero/ol/ol/geom/linearring.js new file mode 100644 index 0000000000..92d1ec19e1 --- /dev/null +++ b/float-no-zero/ol/ol/geom/linearring.js @@ -0,0 +1,144 @@ +goog.provide('ol.geom.LinearRing'); + +goog.require('ol.extent'); +goog.require('ol.geom.GeometryType'); +goog.require('ol.geom.SimpleGeometry'); +goog.require('ol.geom.closest'); +goog.require('ol.geom.flat'); +goog.require('ol.geom.simplify'); + + + +/** + * @constructor + * @extends {ol.geom.SimpleGeometry} + * @param {ol.geom.RawLinearRing} coordinates Coordinates. + * @param {ol.geom.GeometryLayout=} opt_layout Layout. + * @todo stability experimental + */ +ol.geom.LinearRing = function(coordinates, opt_layout) { + + goog.base(this); + + /** + * @private + * @type {number} + */ + this.maxDelta_ = -1; + + /** + * @private + * @type {number} + */ + this.maxDeltaRevision_ = -1; + + this.setCoordinates(coordinates, opt_layout); + +}; +goog.inherits(ol.geom.LinearRing, ol.geom.SimpleGeometry); + + +/** + * @inheritDoc + */ +ol.geom.LinearRing.prototype.clone = function() { + var linearRing = new ol.geom.LinearRing(null); + linearRing.setFlatCoordinates(this.layout, this.flatCoordinates.slice()); + return linearRing; +}; + + +/** + * @inheritDoc + */ +ol.geom.LinearRing.prototype.closestPointXY = + function(x, y, closestPoint, minSquaredDistance) { + if (minSquaredDistance < + ol.extent.closestSquaredDistanceXY(this.getExtent(), x, y)) { + return minSquaredDistance; + } + if (this.maxDeltaRevision_ != this.getRevision()) { + this.maxDelta_ = Math.sqrt(ol.geom.closest.getMaxSquaredDelta( + this.flatCoordinates, 0, this.flatCoordinates.length, this.stride, 0)); + this.maxDeltaRevision_ = this.getRevision(); + } + return ol.geom.closest.getClosestPoint( + this.flatCoordinates, 0, this.flatCoordinates.length, this.stride, + this.maxDelta_, true, x, y, closestPoint, minSquaredDistance); +}; + + +/** + * @return {number} Area. + * @todo stability experimental + */ +ol.geom.LinearRing.prototype.getArea = function() { + return ol.geom.flat.linearRingArea( + this.flatCoordinates, 0, this.flatCoordinates.length, this.stride); +}; + + +/** + * @return {ol.geom.RawLinearRing} Coordinates. + * @todo stability experimental + */ +ol.geom.LinearRing.prototype.getCoordinates = function() { + return ol.geom.flat.inflateCoordinates( + this.flatCoordinates, 0, this.flatCoordinates.length, this.stride); +}; + + +/** + * @inheritDoc + */ +ol.geom.LinearRing.prototype.getSimplifiedGeometryInternal = + function(squaredTolerance) { + var simplifiedFlatCoordinates = []; + simplifiedFlatCoordinates.length = ol.geom.simplify.douglasPeucker( + this.flatCoordinates, 0, this.flatCoordinates.length, this.stride, + squaredTolerance, simplifiedFlatCoordinates, 0); + var simplifiedLinearRing = new ol.geom.LinearRing(null); + simplifiedLinearRing.setFlatCoordinates( + ol.geom.GeometryLayout.XY, simplifiedFlatCoordinates); + return simplifiedLinearRing; +}; + + +/** + * @inheritDoc + */ +ol.geom.LinearRing.prototype.getType = function() { + return ol.geom.GeometryType.LINEAR_RING; +}; + + +/** + * @param {ol.geom.RawLinearRing} coordinates Coordinates. + * @param {ol.geom.GeometryLayout=} opt_layout Layout. + * @todo stability experimental + */ +ol.geom.LinearRing.prototype.setCoordinates = + function(coordinates, opt_layout) { + if (goog.isNull(coordinates)) { + this.setFlatCoordinates(ol.geom.GeometryLayout.XY, null); + } else { + this.setLayout(opt_layout, coordinates, 1); + if (goog.isNull(this.flatCoordinates)) { + this.flatCoordinates = []; + } + this.flatCoordinates.length = ol.geom.flat.deflateCoordinates( + this.flatCoordinates, 0, coordinates, this.stride); + this.dispatchChangeEvent(); + } +}; + + +/** + * @param {ol.geom.GeometryLayout} layout Layout. + * @param {Array.} flatCoordinates Flat coordinates. + */ +ol.geom.LinearRing.prototype.setFlatCoordinates = + function(layout, flatCoordinates) { + this.setFlatCoordinatesInternal(layout, flatCoordinates); + this.dispatchChangeEvent(); +}; diff --git a/float-no-zero/ol/ol/geom/linestring.exports b/float-no-zero/ol/ol/geom/linestring.exports new file mode 100644 index 0000000000..f5c50bdf5c --- /dev/null +++ b/float-no-zero/ol/ol/geom/linestring.exports @@ -0,0 +1,7 @@ +@exportSymbol ol.geom.LineString +@exportProperty ol.geom.LineString.prototype.clone +@exportProperty ol.geom.LineString.prototype.getCoordinateAtM +@exportProperty ol.geom.LineString.prototype.getCoordinates +@exportProperty ol.geom.LineString.prototype.getLength +@exportProperty ol.geom.LineString.prototype.getType +@exportProperty ol.geom.LineString.prototype.setCoordinates diff --git a/float-no-zero/ol/ol/geom/linestring.js b/float-no-zero/ol/ol/geom/linestring.js new file mode 100644 index 0000000000..989c9c88bb --- /dev/null +++ b/float-no-zero/ol/ol/geom/linestring.js @@ -0,0 +1,194 @@ +goog.provide('ol.geom.LineString'); + +goog.require('ol.extent'); +goog.require('ol.geom.GeometryType'); +goog.require('ol.geom.SimpleGeometry'); +goog.require('ol.geom.closest'); +goog.require('ol.geom.flat'); +goog.require('ol.geom.simplify'); + + + +/** + * @constructor + * @extends {ol.geom.SimpleGeometry} + * @param {ol.geom.RawLineString} coordinates Coordinates. + * @param {ol.geom.GeometryLayout=} opt_layout Layout. + * @todo stability experimental + */ +ol.geom.LineString = function(coordinates, opt_layout) { + + goog.base(this); + + /** + * @private + * @type {ol.Coordinate} + */ + this.flatMidpoint_ = null; + + /** + * @private + * @type {number} + */ + this.flatMidpointRevision_ = -1; + + /** + * @private + * @type {number} + */ + this.maxDelta_ = -1; + + /** + * @private + * @type {number} + */ + this.maxDeltaRevision_ = -1; + + this.setCoordinates(coordinates, opt_layout); + +}; +goog.inherits(ol.geom.LineString, ol.geom.SimpleGeometry); + + +/** + * @inheritDoc + */ +ol.geom.LineString.prototype.clone = function() { + var lineString = new ol.geom.LineString(null); + lineString.setFlatCoordinates(this.layout, this.flatCoordinates.slice()); + return lineString; +}; + + +/** + * @inheritDoc + */ +ol.geom.LineString.prototype.closestPointXY = + function(x, y, closestPoint, minSquaredDistance) { + if (minSquaredDistance < + ol.extent.closestSquaredDistanceXY(this.getExtent(), x, y)) { + return minSquaredDistance; + } + if (this.maxDeltaRevision_ != this.getRevision()) { + this.maxDelta_ = Math.sqrt(ol.geom.closest.getMaxSquaredDelta( + this.flatCoordinates, 0, this.flatCoordinates.length, this.stride, 0)); + this.maxDeltaRevision_ = this.getRevision(); + } + return ol.geom.closest.getClosestPoint( + this.flatCoordinates, 0, this.flatCoordinates.length, this.stride, + this.maxDelta_, false, x, y, closestPoint, minSquaredDistance); +}; + + +/** + * Returns the coordinate at `m` using linear interpolation, or `null` if no + * such coordinate exists. + * + * `opt_extrapolate` controls extrapolation beyond the range of Ms in the + * MultiLineString. If `opt_extrapolate` is `true` then Ms less than the first + * M will return the first coordinate and Ms greater than the last M will + * return the last coordinate. + * + * @param {number} m M. + * @param {boolean=} opt_extrapolate Extrapolate. + * @return {ol.Coordinate} Coordinate. + */ +ol.geom.LineString.prototype.getCoordinateAtM = function(m, opt_extrapolate) { + if (this.layout != ol.geom.GeometryLayout.XYM && + this.layout != ol.geom.GeometryLayout.XYZM) { + return null; + } + var extrapolate = goog.isDef(opt_extrapolate) ? opt_extrapolate : false; + return ol.geom.flat.lineStringCoordinateAtM(this.flatCoordinates, 0, + this.flatCoordinates.length, this.stride, m, extrapolate); +}; + + +/** + * @return {ol.geom.RawLineString} Coordinates. + * @todo stability experimental + */ +ol.geom.LineString.prototype.getCoordinates = function() { + return ol.geom.flat.inflateCoordinates( + this.flatCoordinates, 0, this.flatCoordinates.length, this.stride); +}; + + +/** + * @return {number} Length. + * @todo stability experimental + */ +ol.geom.LineString.prototype.getLength = function() { + return ol.geom.flat.lineStringLength( + this.flatCoordinates, 0, this.flatCoordinates.length, this.stride); +}; + + +/** + * @return {Array.} Flat midpoint. + */ +ol.geom.LineString.prototype.getFlatMidpoint = function() { + if (this.flatMidpointRevision_ != this.getRevision()) { + this.flatMidpoint_ = ol.geom.flat.lineStringInterpolate( + this.flatCoordinates, 0, this.flatCoordinates.length, this.stride, + 0.5, this.flatMidpoint_); + this.flatMidpointRevision_ = this.getRevision(); + } + return this.flatMidpoint_; +}; + + +/** + * @inheritDoc + */ +ol.geom.LineString.prototype.getSimplifiedGeometryInternal = + function(squaredTolerance) { + var simplifiedFlatCoordinates = []; + simplifiedFlatCoordinates.length = ol.geom.simplify.douglasPeucker( + this.flatCoordinates, 0, this.flatCoordinates.length, this.stride, + squaredTolerance, simplifiedFlatCoordinates, 0); + var simplifiedLineString = new ol.geom.LineString(null); + simplifiedLineString.setFlatCoordinates( + ol.geom.GeometryLayout.XY, simplifiedFlatCoordinates); + return simplifiedLineString; +}; + + +/** + * @inheritDoc + */ +ol.geom.LineString.prototype.getType = function() { + return ol.geom.GeometryType.LINE_STRING; +}; + + +/** + * @param {ol.geom.RawLineString} coordinates Coordinates. + * @param {ol.geom.GeometryLayout=} opt_layout Layout. + * @todo stability experimental + */ +ol.geom.LineString.prototype.setCoordinates = + function(coordinates, opt_layout) { + if (goog.isNull(coordinates)) { + this.setFlatCoordinates(ol.geom.GeometryLayout.XY, null); + } else { + this.setLayout(opt_layout, coordinates, 1); + if (goog.isNull(this.flatCoordinates)) { + this.flatCoordinates = []; + } + this.flatCoordinates.length = ol.geom.flat.deflateCoordinates( + this.flatCoordinates, 0, coordinates, this.stride); + this.dispatchChangeEvent(); + } +}; + + +/** + * @param {ol.geom.GeometryLayout} layout Layout. + * @param {Array.} flatCoordinates Flat coordinates. + */ +ol.geom.LineString.prototype.setFlatCoordinates = + function(layout, flatCoordinates) { + this.setFlatCoordinatesInternal(layout, flatCoordinates); + this.dispatchChangeEvent(); +}; diff --git a/float-no-zero/ol/ol/geom/multilinestring.exports b/float-no-zero/ol/ol/geom/multilinestring.exports new file mode 100644 index 0000000000..23b3e5987e --- /dev/null +++ b/float-no-zero/ol/ol/geom/multilinestring.exports @@ -0,0 +1,7 @@ +@exportSymbol ol.geom.MultiLineString +@exportProperty ol.geom.MultiLineString.prototype.clone +@exportProperty ol.geom.MultiLineString.prototype.getCoordinateAtM +@exportProperty ol.geom.MultiLineString.prototype.getCoordinates +@exportProperty ol.geom.MultiLineString.prototype.getLineStrings +@exportProperty ol.geom.MultiLineString.prototype.getType +@exportProperty ol.geom.MultiLineString.prototype.setCoordinates diff --git a/float-no-zero/ol/ol/geom/multilinestring.js b/float-no-zero/ol/ol/geom/multilinestring.js new file mode 100644 index 0000000000..b096e2fe65 --- /dev/null +++ b/float-no-zero/ol/ol/geom/multilinestring.js @@ -0,0 +1,252 @@ +goog.provide('ol.geom.MultiLineString'); + +goog.require('goog.array'); +goog.require('goog.asserts'); +goog.require('ol.extent'); +goog.require('ol.geom.GeometryType'); +goog.require('ol.geom.LineString'); +goog.require('ol.geom.SimpleGeometry'); +goog.require('ol.geom.closest'); +goog.require('ol.geom.flat'); +goog.require('ol.geom.simplify'); + + + +/** + * @constructor + * @extends {ol.geom.SimpleGeometry} + * @param {ol.geom.RawMultiLineString} coordinates Coordinates. + * @param {ol.geom.GeometryLayout=} opt_layout Layout. + * @todo stability experimental + */ +ol.geom.MultiLineString = function(coordinates, opt_layout) { + + goog.base(this); + + /** + * @type {Array.} + * @private + */ + this.ends_ = []; + + /** + * @private + * @type {number} + */ + this.maxDelta_ = -1; + + /** + * @private + * @type {number} + */ + this.maxDeltaRevision_ = -1; + + this.setCoordinates(coordinates, opt_layout); + +}; +goog.inherits(ol.geom.MultiLineString, ol.geom.SimpleGeometry); + + +/** + * @inheritDoc + */ +ol.geom.MultiLineString.prototype.clone = function() { + var multiLineString = new ol.geom.MultiLineString(null); + multiLineString.setFlatCoordinates( + this.layout, this.flatCoordinates.slice(), this.ends_.slice()); + return multiLineString; +}; + + +/** + * @inheritDoc + */ +ol.geom.MultiLineString.prototype.closestPointXY = + function(x, y, closestPoint, minSquaredDistance) { + if (minSquaredDistance < + ol.extent.closestSquaredDistanceXY(this.getExtent(), x, y)) { + return minSquaredDistance; + } + if (this.maxDeltaRevision_ != this.getRevision()) { + this.maxDelta_ = Math.sqrt(ol.geom.closest.getsMaxSquaredDelta( + this.flatCoordinates, 0, this.ends_, this.stride, 0)); + this.maxDeltaRevision_ = this.getRevision(); + } + return ol.geom.closest.getsClosestPoint( + this.flatCoordinates, 0, this.ends_, this.stride, + this.maxDelta_, false, x, y, closestPoint, minSquaredDistance); +}; + + +/** + * Returns the coordinate at `m` using linear interpolation, or `null` if no + * such coordinate exists. + * + * `opt_extrapolate` controls extrapolation beyond the range of Ms in the + * MultiLineString. If `opt_extrapolate` is `true` then Ms less than the first + * M will return the first coordinate and Ms greater than the last M will + * return the last coordinate. + * + * `opt_interpolate` controls interpolation between consecutive LineStrings + * within the MultiLineString. If `opt_interpolate` is `true` the coordinates + * will be linearly interpolated between the last coordinate of one LineString + * and the first coordinate of the next LineString. If `opt_interpolate` is + * `false` then the function will return `null` for Ms falling between + * LineStrings. + * + * @param {number} m M. + * @param {boolean=} opt_extrapolate Extrapolate. + * @param {boolean=} opt_interpolate Interpolate. + * @return {ol.Coordinate} Coordinate. + */ +ol.geom.MultiLineString.prototype.getCoordinateAtM = + function(m, opt_extrapolate, opt_interpolate) { + if ((this.layout != ol.geom.GeometryLayout.XYM && + this.layout != ol.geom.GeometryLayout.XYZM) || + this.flatCoordinates.length === 0) { + return null; + } + var extrapolate = goog.isDef(opt_extrapolate) ? opt_extrapolate : false; + var interpolate = goog.isDef(opt_interpolate) ? opt_interpolate : false; + return ol.geom.flat.lineStringsCoordinateAtM(this.flatCoordinates, 0, + this.ends_, this.stride, m, extrapolate, interpolate); +}; + + +/** + * @return {ol.geom.RawMultiLineString} Coordinates. + * @todo stability experimental + */ +ol.geom.MultiLineString.prototype.getCoordinates = function() { + return ol.geom.flat.inflateCoordinatess( + this.flatCoordinates, 0, this.ends_, this.stride); +}; + + +/** + * @return {Array.} Ends. + */ +ol.geom.MultiLineString.prototype.getEnds = function() { + return this.ends_; +}; + + +/** + * @return {Array.} LineStrings. + * @todo stability experimental + */ +ol.geom.MultiLineString.prototype.getLineStrings = function() { + // FIXME we should construct the line strings from the flat coordinates + var coordinates = this.getCoordinates(); + var lineStrings = []; + var i, ii; + for (i = 0, ii = coordinates.length; i < ii; ++i) { + lineStrings.push(new ol.geom.LineString(coordinates[i])); + } + return lineStrings; +}; + + +/** + * @return {Array.} Flat midpoints. + */ +ol.geom.MultiLineString.prototype.getFlatMidpoints = function() { + var midpoints = []; + var flatCoordinates = this.flatCoordinates; + var offset = 0; + var ends = this.ends_; + var stride = this.stride; + var i, ii; + for (i = 0, ii = ends.length; i < ii; ++i) { + var end = ends[i]; + var midpoint = ol.geom.flat.lineStringInterpolate( + flatCoordinates, offset, end, stride, 0.5); + goog.array.extend(midpoints, midpoint); + offset = end; + } + return midpoints; +}; + + +/** + * @inheritDoc + */ +ol.geom.MultiLineString.prototype.getSimplifiedGeometryInternal = + function(squaredTolerance) { + var simplifiedFlatCoordinates = []; + var simplifiedEnds = []; + simplifiedFlatCoordinates.length = ol.geom.simplify.douglasPeuckers( + this.flatCoordinates, 0, this.ends_, this.stride, squaredTolerance, + simplifiedFlatCoordinates, 0, simplifiedEnds); + var simplifiedMultiLineString = new ol.geom.MultiLineString(null); + simplifiedMultiLineString.setFlatCoordinates( + ol.geom.GeometryLayout.XY, simplifiedFlatCoordinates, simplifiedEnds); + return simplifiedMultiLineString; +}; + + +/** + * @inheritDoc + */ +ol.geom.MultiLineString.prototype.getType = function() { + return ol.geom.GeometryType.MULTI_LINE_STRING; +}; + + +/** + * @param {ol.geom.RawMultiLineString} coordinates Coordinates. + * @param {ol.geom.GeometryLayout=} opt_layout Layout. + * @todo stability experimental + */ +ol.geom.MultiLineString.prototype.setCoordinates = + function(coordinates, opt_layout) { + if (goog.isNull(coordinates)) { + this.setFlatCoordinates(ol.geom.GeometryLayout.XY, null, this.ends_); + } else { + this.setLayout(opt_layout, coordinates, 2); + if (goog.isNull(this.flatCoordinates)) { + this.flatCoordinates = []; + } + var ends = ol.geom.flat.deflateCoordinatess( + this.flatCoordinates, 0, coordinates, this.stride, this.ends_); + this.flatCoordinates.length = ends.length === 0 ? 0 : ends[ends.length - 1]; + this.dispatchChangeEvent(); + } +}; + + +/** + * @param {ol.geom.GeometryLayout} layout Layout. + * @param {Array.} flatCoordinates Flat coordinates. + * @param {Array.} ends Ends. + */ +ol.geom.MultiLineString.prototype.setFlatCoordinates = + function(layout, flatCoordinates, ends) { + this.setFlatCoordinatesInternal(layout, flatCoordinates); + this.ends_ = ends; + this.dispatchChangeEvent(); +}; + + +/** + * @param {Array.} lineStrings LineStrings. + * @todo stability experimental + */ +ol.geom.MultiLineString.prototype.setLineStrings = function(lineStrings) { + var layout = ol.geom.GeometryLayout.XY; + var flatCoordinates = []; + var ends = []; + var i, ii; + for (i = 0, ii = lineStrings.length; i < ii; ++i) { + var lineString = lineStrings[i]; + if (i === 0) { + layout = lineString.getLayout(); + } else { + // FIXME better handle the case of non-matching layouts + goog.asserts.assert(lineString.getLayout() == layout); + } + goog.array.extend(flatCoordinates, lineString.getFlatCoordinates()); + ends.push(flatCoordinates.length); + } + this.setFlatCoordinates(layout, flatCoordinates, ends); +}; diff --git a/float-no-zero/ol/ol/geom/multipoint.exports b/float-no-zero/ol/ol/geom/multipoint.exports new file mode 100644 index 0000000000..97dff56f42 --- /dev/null +++ b/float-no-zero/ol/ol/geom/multipoint.exports @@ -0,0 +1,6 @@ +@exportSymbol ol.geom.MultiPoint +@exportProperty ol.geom.MultiPoint.prototype.clone +@exportProperty ol.geom.MultiPoint.prototype.getCoordinates +@exportProperty ol.geom.MultiPoint.prototype.getPoints +@exportProperty ol.geom.MultiPoint.prototype.getType +@exportProperty ol.geom.MultiPoint.prototype.setCoordinates diff --git a/float-no-zero/ol/ol/geom/multipoint.js b/float-no-zero/ol/ol/geom/multipoint.js new file mode 100644 index 0000000000..ad1d767e7a --- /dev/null +++ b/float-no-zero/ol/ol/geom/multipoint.js @@ -0,0 +1,125 @@ +goog.provide('ol.geom.MultiPoint'); + +goog.require('ol.extent'); +goog.require('ol.geom.GeometryType'); +goog.require('ol.geom.Point'); +goog.require('ol.geom.SimpleGeometry'); +goog.require('ol.geom.flat'); + + + +/** + * @constructor + * @extends {ol.geom.SimpleGeometry} + * @param {ol.geom.RawMultiPoint} coordinates Coordinates. + * @param {ol.geom.GeometryLayout=} opt_layout Layout. + * @todo stability experimental + */ +ol.geom.MultiPoint = function(coordinates, opt_layout) { + goog.base(this); + this.setCoordinates(coordinates, opt_layout); +}; +goog.inherits(ol.geom.MultiPoint, ol.geom.SimpleGeometry); + + +/** + * @inheritDoc + */ +ol.geom.MultiPoint.prototype.clone = function() { + var multiPoint = new ol.geom.MultiPoint(null); + multiPoint.setFlatCoordinates(this.layout, this.flatCoordinates.slice()); + return multiPoint; +}; + + +/** + * @inheritDoc + */ +ol.geom.MultiPoint.prototype.closestPointXY = + function(x, y, closestPoint, minSquaredDistance) { + if (minSquaredDistance < + ol.extent.closestSquaredDistanceXY(this.getExtent(), x, y)) { + return minSquaredDistance; + } + var flatCoordinates = this.flatCoordinates; + var stride = this.stride; + var i, ii, j; + for (i = 0, ii = flatCoordinates.length; i < ii; i += stride) { + var squaredDistance = ol.geom.flat.squaredDistance( + x, y, flatCoordinates[i], flatCoordinates[i + 1]); + if (squaredDistance < minSquaredDistance) { + minSquaredDistance = squaredDistance; + for (j = 0; j < stride; ++j) { + closestPoint[j] = flatCoordinates[i + j]; + } + closestPoint.length = stride; + } + } + return minSquaredDistance; +}; + + +/** + * @return {ol.geom.RawMultiPoint} Coordinates. + * @todo stability experimental + */ +ol.geom.MultiPoint.prototype.getCoordinates = function() { + return ol.geom.flat.inflateCoordinates( + this.flatCoordinates, 0, this.flatCoordinates.length, this.stride); +}; + + +/** + * @return {Array.} Points. + * @todo stability experimental + */ +ol.geom.MultiPoint.prototype.getPoints = function() { + // FIXME we should construct the points from the flat coordinates + var coordinates = this.getCoordinates(); + var points = []; + var i, ii; + for (i = 0, ii = coordinates.length; i < ii; ++i) { + points.push(new ol.geom.Point(coordinates[i])); + } + return points; +}; + + +/** + * @inheritDoc + */ +ol.geom.MultiPoint.prototype.getType = function() { + return ol.geom.GeometryType.MULTI_POINT; +}; + + +/** + * @param {ol.geom.RawMultiPoint} coordinates Coordinates. + * @param {ol.geom.GeometryLayout=} opt_layout Layout. + * @todo stability experimental + */ +ol.geom.MultiPoint.prototype.setCoordinates = + function(coordinates, opt_layout) { + if (goog.isNull(coordinates)) { + this.setFlatCoordinates(ol.geom.GeometryLayout.XY, null); + } else { + this.setLayout(opt_layout, coordinates, 1); + if (goog.isNull(this.flatCoordinates)) { + this.flatCoordinates = []; + } + this.flatCoordinates.length = ol.geom.flat.deflateCoordinates( + this.flatCoordinates, 0, coordinates, this.stride); + this.dispatchChangeEvent(); + } +}; + + +/** + * @param {ol.geom.GeometryLayout} layout Layout. + * @param {Array.} flatCoordinates Flat coordinates. + */ +ol.geom.MultiPoint.prototype.setFlatCoordinates = + function(layout, flatCoordinates) { + this.setFlatCoordinatesInternal(layout, flatCoordinates); + this.dispatchChangeEvent(); +}; diff --git a/float-no-zero/ol/ol/geom/multipolygon.exports b/float-no-zero/ol/ol/geom/multipolygon.exports new file mode 100644 index 0000000000..07d0d094b8 --- /dev/null +++ b/float-no-zero/ol/ol/geom/multipolygon.exports @@ -0,0 +1,8 @@ +@exportSymbol ol.geom.MultiPolygon +@exportProperty ol.geom.MultiPolygon.prototype.clone +@exportProperty ol.geom.MultiPolygon.prototype.getArea +@exportProperty ol.geom.MultiPolygon.prototype.getCoordinates +@exportProperty ol.geom.MultiPolygon.prototype.getInteriorPoints +@exportProperty ol.geom.MultiPolygon.prototype.getPolygons +@exportProperty ol.geom.MultiPolygon.prototype.getType +@exportProperty ol.geom.MultiPolygon.prototype.setCoordinates diff --git a/float-no-zero/ol/ol/geom/multipolygon.js b/float-no-zero/ol/ol/geom/multipolygon.js new file mode 100644 index 0000000000..4b8db45894 --- /dev/null +++ b/float-no-zero/ol/ol/geom/multipolygon.js @@ -0,0 +1,304 @@ +goog.provide('ol.geom.MultiPolygon'); + +goog.require('goog.array'); +goog.require('goog.asserts'); +goog.require('ol.extent'); +goog.require('ol.geom.GeometryType'); +goog.require('ol.geom.MultiPoint'); +goog.require('ol.geom.Polygon'); +goog.require('ol.geom.SimpleGeometry'); +goog.require('ol.geom.closest'); +goog.require('ol.geom.flat'); +goog.require('ol.geom.simplify'); + + + +/** + * @constructor + * @extends {ol.geom.SimpleGeometry} + * @param {ol.geom.RawMultiPolygon} coordinates Coordinates. + * @param {ol.geom.GeometryLayout=} opt_layout Layout. + * @todo stability experimental + */ +ol.geom.MultiPolygon = function(coordinates, opt_layout) { + + goog.base(this); + + /** + * @type {Array.>} + * @private + */ + this.endss_ = []; + + /** + * @private + * @type {number} + */ + this.flatInteriorPointsRevision_ = -1; + + /** + * @private + * @type {Array.} + */ + this.flatInteriorPoints_ = null; + + /** + * @private + * @type {number} + */ + this.maxDelta_ = -1; + + /** + * @private + * @type {number} + */ + this.maxDeltaRevision_ = -1; + + /** + * @private + * @type {number} + */ + this.orientedRevision_ = -1; + + /** + * @private + * @type {Array.} + */ + this.orientedFlatCoordinates_ = null; + + this.setCoordinates(coordinates, opt_layout); + +}; +goog.inherits(ol.geom.MultiPolygon, ol.geom.SimpleGeometry); + + +/** + * @inheritDoc + */ +ol.geom.MultiPolygon.prototype.clone = function() { + var multiPolygon = new ol.geom.MultiPolygon(null); + multiPolygon.setFlatCoordinates( + this.layout, this.flatCoordinates.slice(), this.endss_.slice()); + return multiPolygon; +}; + + +/** + * @inheritDoc + */ +ol.geom.MultiPolygon.prototype.closestPointXY = + function(x, y, closestPoint, minSquaredDistance) { + if (minSquaredDistance < + ol.extent.closestSquaredDistanceXY(this.getExtent(), x, y)) { + return minSquaredDistance; + } + if (this.maxDeltaRevision_ != this.getRevision()) { + this.maxDelta_ = Math.sqrt(ol.geom.closest.getssMaxSquaredDelta( + this.flatCoordinates, 0, this.endss_, this.stride, 0)); + this.maxDeltaRevision_ = this.getRevision(); + } + return ol.geom.closest.getssClosestPoint( + this.getOrientedFlatCoordinates(), 0, this.endss_, this.stride, + this.maxDelta_, true, x, y, closestPoint, minSquaredDistance); +}; + + +/** + * @inheritDoc + */ +ol.geom.MultiPolygon.prototype.containsXY = function(x, y) { + return ol.geom.flat.linearRingssContainsXY( + this.getOrientedFlatCoordinates(), 0, this.endss_, this.stride, x, y); +}; + + +/** + * @return {number} Area. + * @todo stability experimental + */ +ol.geom.MultiPolygon.prototype.getArea = function() { + return ol.geom.flat.linearRingssArea( + this.getOrientedFlatCoordinates(), 0, this.endss_, this.stride); +}; + + +/** + * @return {ol.geom.RawMultiPolygon} Coordinates. + * @todo stability experimental + */ +ol.geom.MultiPolygon.prototype.getCoordinates = function() { + return ol.geom.flat.inflateCoordinatesss( + this.flatCoordinates, 0, this.endss_, this.stride); +}; + + +/** + * @return {Array.>} Endss. + */ +ol.geom.MultiPolygon.prototype.getEndss = function() { + return this.endss_; +}; + + +/** + * @return {Array.} Flat interior points. + */ +ol.geom.MultiPolygon.prototype.getFlatInteriorPoints = function() { + if (this.flatInteriorPointsRevision_ != this.getRevision()) { + var flatCenters = ol.geom.flat.linearRingssGetFlatCenters( + this.flatCoordinates, 0, this.endss_, this.stride); + this.flatInteriorPoints_ = ol.geom.flat.linearRingssGetInteriorPoints( + this.getOrientedFlatCoordinates(), 0, this.endss_, this.stride, + flatCenters); + this.flatInteriorPointsRevision_ = this.getRevision(); + } + return this.flatInteriorPoints_; +}; + + +/** + * @return {ol.geom.MultiPoint} Interior points. + */ +ol.geom.MultiPolygon.prototype.getInteriorPoints = function() { + var interiorPoints = new ol.geom.MultiPoint(null); + interiorPoints.setFlatCoordinates(ol.geom.GeometryLayout.XY, + this.getFlatInteriorPoints().slice()); + return interiorPoints; +}; + + +/** + * @return {Array.} Oriented flat coordinates. + */ +ol.geom.MultiPolygon.prototype.getOrientedFlatCoordinates = function() { + if (this.orientedRevision_ != this.getRevision()) { + var flatCoordinates = this.flatCoordinates; + if (ol.geom.flat.linearRingssAreOriented( + flatCoordinates, 0, this.endss_, this.stride)) { + this.orientedFlatCoordinates_ = flatCoordinates; + } else { + this.orientedFlatCoordinates_ = flatCoordinates.slice(); + this.orientedFlatCoordinates_.length = ol.geom.flat.orientLinearRingss( + this.orientedFlatCoordinates_, 0, this.endss_, this.stride); + } + this.orientedRevision_ = this.getRevision(); + } + return this.orientedFlatCoordinates_; +}; + + +/** + * @inheritDoc + */ +ol.geom.MultiPolygon.prototype.getSimplifiedGeometryInternal = + function(squaredTolerance) { + var simplifiedFlatCoordinates = []; + var simplifiedEndss = []; + simplifiedFlatCoordinates.length = ol.geom.simplify.quantizess( + this.flatCoordinates, 0, this.endss_, this.stride, + Math.sqrt(squaredTolerance), + simplifiedFlatCoordinates, 0, simplifiedEndss); + var simplifiedMultiPolygon = new ol.geom.MultiPolygon(null); + simplifiedMultiPolygon.setFlatCoordinates( + ol.geom.GeometryLayout.XY, simplifiedFlatCoordinates, simplifiedEndss); + return simplifiedMultiPolygon; +}; + + +/** + * @return {Array.} Polygons. + * @todo stability experimental + */ +ol.geom.MultiPolygon.prototype.getPolygons = function() { + var layout = this.layout; + var flatCoordinates = this.flatCoordinates; + var endss = this.endss_; + var polygons = []; + var offset = 0; + var i, ii; + for (i = 0, ii = endss.length; i < ii; ++i) { + var ends = endss[i]; + var end = ends[ends.length - 1]; + var polygon = new ol.geom.Polygon(null); + polygon.setFlatCoordinates( + layout, flatCoordinates.slice(offset, end), ends.slice()); + polygons.push(polygon); + offset = end; + } + return polygons; +}; + + +/** + * @inheritDoc + */ +ol.geom.MultiPolygon.prototype.getType = function() { + return ol.geom.GeometryType.MULTI_POLYGON; +}; + + +/** + * @param {ol.geom.RawMultiPolygon} coordinates Coordinates. + * @param {ol.geom.GeometryLayout=} opt_layout Layout. + * @todo stability experimental + */ +ol.geom.MultiPolygon.prototype.setCoordinates = + function(coordinates, opt_layout) { + if (goog.isNull(coordinates)) { + this.setFlatCoordinates(ol.geom.GeometryLayout.XY, null, this.endss_); + } else { + this.setLayout(opt_layout, coordinates, 3); + if (goog.isNull(this.flatCoordinates)) { + this.flatCoordinates = []; + } + var endss = ol.geom.flat.deflateCoordinatesss( + this.flatCoordinates, 0, coordinates, this.stride, this.endss_); + var lastEnds = endss[endss.length - 1]; + this.flatCoordinates.length = lastEnds.length === 0 ? + 0 : lastEnds[lastEnds.length - 1]; + this.dispatchChangeEvent(); + } +}; + + +/** + * @param {ol.geom.GeometryLayout} layout Layout. + * @param {Array.} flatCoordinates Flat coordinates. + * @param {Array.>} endss Endss. + */ +ol.geom.MultiPolygon.prototype.setFlatCoordinates = + function(layout, flatCoordinates, endss) { + this.setFlatCoordinatesInternal(layout, flatCoordinates); + this.endss_ = endss; + this.dispatchChangeEvent(); +}; + + +/** + * @param {Array.} polygons Polygons. + * @todo stability experimental + */ +ol.geom.MultiPolygon.prototype.setPolygons = function(polygons) { + var layout = ol.geom.GeometryLayout.XY; + var flatCoordinates = []; + var endss = []; + var i, ii, ends; + for (i = 0, ii = polygons.length; i < ii; ++i) { + var polygon = polygons[i]; + if (i === 0) { + layout = polygon.getLayout(); + } else { + // FIXME better handle the case of non-matching layouts + goog.asserts.assert(polygon.getLayout() == layout); + } + var offset = flatCoordinates.length; + ends = polygon.getEnds(); + var j, jj; + for (j = 0, jj = ends.length; j < jj; ++j) { + ends[j] += offset; + } + goog.array.extend(flatCoordinates, polygon.getFlatCoordinates()); + endss.push(ends); + } + this.setFlatCoordinates(layout, flatCoordinates, endss); +}; diff --git a/float-no-zero/ol/ol/geom/point.exports b/float-no-zero/ol/ol/geom/point.exports new file mode 100644 index 0000000000..f48a3b7a4d --- /dev/null +++ b/float-no-zero/ol/ol/geom/point.exports @@ -0,0 +1,5 @@ +@exportSymbol ol.geom.Point +@exportProperty ol.geom.Point.prototype.clone +@exportProperty ol.geom.Point.prototype.getCoordinates +@exportProperty ol.geom.Point.prototype.getType +@exportProperty ol.geom.Point.prototype.setCoordinates diff --git a/float-no-zero/ol/ol/geom/point.js b/float-no-zero/ol/ol/geom/point.js new file mode 100644 index 0000000000..3e32ef01cb --- /dev/null +++ b/float-no-zero/ol/ol/geom/point.js @@ -0,0 +1,115 @@ +goog.provide('ol.geom.Point'); + +goog.require('goog.asserts'); +goog.require('ol.extent'); +goog.require('ol.geom.GeometryType'); +goog.require('ol.geom.SimpleGeometry'); +goog.require('ol.geom.flat'); + + + +/** + * @constructor + * @extends {ol.geom.SimpleGeometry} + * @param {ol.geom.RawPoint} coordinates Coordinates. + * @param {ol.geom.GeometryLayout=} opt_layout Layout. + * @todo stability experimental + */ +ol.geom.Point = function(coordinates, opt_layout) { + goog.base(this); + this.setCoordinates(coordinates, opt_layout); +}; +goog.inherits(ol.geom.Point, ol.geom.SimpleGeometry); + + +/** + * @inheritDoc + */ +ol.geom.Point.prototype.clone = function() { + var point = new ol.geom.Point(null); + point.setFlatCoordinates(this.layout, this.flatCoordinates.slice()); + return point; +}; + + +/** + * @inheritDoc + */ +ol.geom.Point.prototype.closestPointXY = + function(x, y, closestPoint, minSquaredDistance) { + var flatCoordinates = this.flatCoordinates; + var squaredDistance = ol.geom.flat.squaredDistance( + x, y, flatCoordinates[0], flatCoordinates[1]); + if (squaredDistance < minSquaredDistance) { + var stride = this.stride; + var i; + for (i = 0; i < stride; ++i) { + closestPoint[i] = flatCoordinates[i]; + } + closestPoint.length = stride; + return squaredDistance; + } else { + return minSquaredDistance; + } +}; + + +/** + * @return {ol.geom.RawPoint} Coordinates. + * @todo stability experimental + */ +ol.geom.Point.prototype.getCoordinates = function() { + return this.flatCoordinates.slice(); +}; + + +/** + * @inheritDoc + */ +ol.geom.Point.prototype.getExtent = function(opt_extent) { + if (this.extentRevision != this.getRevision()) { + this.extent = ol.extent.createOrUpdateFromCoordinate( + this.flatCoordinates, this.extent); + this.extentRevision = this.getRevision(); + } + goog.asserts.assert(goog.isDef(this.extent)); + return ol.extent.returnOrUpdate(this.extent, opt_extent); +}; + + +/** + * @inheritDoc + */ +ol.geom.Point.prototype.getType = function() { + return ol.geom.GeometryType.POINT; +}; + + +/** + * @param {ol.geom.RawPoint} coordinates Coordinates. + * @param {ol.geom.GeometryLayout=} opt_layout Layout. + * @todo stability experimental + */ +ol.geom.Point.prototype.setCoordinates = function(coordinates, opt_layout) { + if (goog.isNull(coordinates)) { + this.setFlatCoordinates(ol.geom.GeometryLayout.XY, null); + } else { + this.setLayout(opt_layout, coordinates, 0); + if (goog.isNull(this.flatCoordinates)) { + this.flatCoordinates = []; + } + this.flatCoordinates.length = ol.geom.flat.deflateCoordinate( + this.flatCoordinates, 0, coordinates, this.stride); + this.dispatchChangeEvent(); + } +}; + + +/** + * @param {ol.geom.GeometryLayout} layout Layout. + * @param {Array.} flatCoordinates Flat coordinates. + */ +ol.geom.Point.prototype.setFlatCoordinates = function(layout, flatCoordinates) { + this.setFlatCoordinatesInternal(layout, flatCoordinates); + this.dispatchChangeEvent(); +}; diff --git a/float-no-zero/ol/ol/geom/polygon.exports b/float-no-zero/ol/ol/geom/polygon.exports new file mode 100644 index 0000000000..7500491823 --- /dev/null +++ b/float-no-zero/ol/ol/geom/polygon.exports @@ -0,0 +1,8 @@ +@exportSymbol ol.geom.Polygon +@exportProperty ol.geom.Polygon.prototype.clone +@exportProperty ol.geom.Polygon.prototype.getArea +@exportProperty ol.geom.Polygon.prototype.getCoordinates +@exportProperty ol.geom.Polygon.prototype.getInteriorPoint +@exportProperty ol.geom.Polygon.prototype.getLinearRings +@exportProperty ol.geom.Polygon.prototype.getType +@exportProperty ol.geom.Polygon.prototype.setCoordinates diff --git a/float-no-zero/ol/ol/geom/polygon.js b/float-no-zero/ol/ol/geom/polygon.js new file mode 100644 index 0000000000..667a121e43 --- /dev/null +++ b/float-no-zero/ol/ol/geom/polygon.js @@ -0,0 +1,263 @@ +goog.provide('ol.geom.Polygon'); + +goog.require('ol.extent'); +goog.require('ol.geom.GeometryType'); +goog.require('ol.geom.LinearRing'); +goog.require('ol.geom.Point'); +goog.require('ol.geom.SimpleGeometry'); +goog.require('ol.geom.closest'); +goog.require('ol.geom.flat'); +goog.require('ol.geom.simplify'); + + + +/** + * @constructor + * @extends {ol.geom.SimpleGeometry} + * @param {ol.geom.RawPolygon} coordinates Coordinates. + * @param {ol.geom.GeometryLayout=} opt_layout Layout. + * @todo stability experimental + */ +ol.geom.Polygon = function(coordinates, opt_layout) { + + goog.base(this); + + /** + * @type {Array.} + * @private + */ + this.ends_ = []; + + /** + * @private + * @type {number} + */ + this.flatInteriorPointRevision_ = -1; + + /** + * @private + * @type {ol.Coordinate} + */ + this.flatInteriorPoint_ = null; + + /** + * @private + * @type {number} + */ + this.maxDelta_ = -1; + + /** + * @private + * @type {number} + */ + this.maxDeltaRevision_ = -1; + + /** + * @private + * @type {number} + */ + this.orientedRevision_ = -1; + + /** + * @private + * @type {Array.} + */ + this.orientedFlatCoordinates_ = null; + + this.setCoordinates(coordinates, opt_layout); + +}; +goog.inherits(ol.geom.Polygon, ol.geom.SimpleGeometry); + + +/** + * @inheritDoc + */ +ol.geom.Polygon.prototype.clone = function() { + var polygon = new ol.geom.Polygon(null); + polygon.setFlatCoordinates( + this.layout, this.flatCoordinates.slice(), this.ends_.slice()); + return polygon; +}; + + +/** + * @inheritDoc + */ +ol.geom.Polygon.prototype.closestPointXY = + function(x, y, closestPoint, minSquaredDistance) { + if (minSquaredDistance < + ol.extent.closestSquaredDistanceXY(this.getExtent(), x, y)) { + return minSquaredDistance; + } + if (this.maxDeltaRevision_ != this.getRevision()) { + this.maxDelta_ = Math.sqrt(ol.geom.closest.getsMaxSquaredDelta( + this.flatCoordinates, 0, this.ends_, this.stride, 0)); + this.maxDeltaRevision_ = this.getRevision(); + } + return ol.geom.closest.getsClosestPoint( + this.flatCoordinates, 0, this.ends_, this.stride, + this.maxDelta_, true, x, y, closestPoint, minSquaredDistance); +}; + + +/** + * @inheritDoc + */ +ol.geom.Polygon.prototype.containsXY = function(x, y) { + return ol.geom.flat.linearRingsContainsXY( + this.getOrientedFlatCoordinates(), 0, this.ends_, this.stride, x, y); +}; + + +/** + * @return {number} Area. + * @todo stability experimental + */ +ol.geom.Polygon.prototype.getArea = function() { + return ol.geom.flat.linearRingsArea( + this.getOrientedFlatCoordinates(), 0, this.ends_, this.stride); +}; + + +/** + * @return {ol.geom.RawPolygon} Coordinates. + * @todo stability experimental + */ +ol.geom.Polygon.prototype.getCoordinates = function() { + return ol.geom.flat.inflateCoordinatess( + this.flatCoordinates, 0, this.ends_, this.stride); +}; + + +/** + * @return {Array.} Ends. + */ +ol.geom.Polygon.prototype.getEnds = function() { + return this.ends_; +}; + + +/** + * @return {Array.} Interior point. + */ +ol.geom.Polygon.prototype.getFlatInteriorPoint = function() { + if (this.flatInteriorPointRevision_ != this.getRevision()) { + var flatCenter = ol.extent.getCenter(this.getExtent()); + this.flatInteriorPoint_ = ol.geom.flat.linearRingsGetInteriorPoint( + this.getOrientedFlatCoordinates(), 0, this.ends_, this.stride, + flatCenter, 0); + this.flatInteriorPointRevision_ = this.getRevision(); + } + return this.flatInteriorPoint_; +}; + + +/** + * @return {ol.geom.Point} Interior point. + */ +ol.geom.Polygon.prototype.getInteriorPoint = function() { + return new ol.geom.Point(this.getFlatInteriorPoint()); +}; + + +/** + * @return {Array.} Linear rings. + * @todo stability experimental + */ +ol.geom.Polygon.prototype.getLinearRings = function() { + var layout = this.layout; + var flatCoordinates = this.flatCoordinates; + var ends = this.ends_; + var linearRings = []; + var offset = 0; + var i, ii; + for (i = 0, ii = ends.length; i < ii; ++i) { + var end = ends[i]; + var linearRing = new ol.geom.LinearRing(null); + linearRing.setFlatCoordinates(layout, flatCoordinates.slice(offset, end)); + linearRings.push(linearRing); + offset = end; + } + return linearRings; +}; + + +/** + * @return {Array.} Oriented flat coordinates. + */ +ol.geom.Polygon.prototype.getOrientedFlatCoordinates = function() { + if (this.orientedRevision_ != this.getRevision()) { + var flatCoordinates = this.flatCoordinates; + if (ol.geom.flat.linearRingsAreOriented( + flatCoordinates, 0, this.ends_, this.stride)) { + this.orientedFlatCoordinates_ = flatCoordinates; + } else { + this.orientedFlatCoordinates_ = flatCoordinates.slice(); + this.orientedFlatCoordinates_.length = ol.geom.flat.orientLinearRings( + this.orientedFlatCoordinates_, 0, this.ends_, this.stride); + } + this.orientedRevision_ = this.getRevision(); + } + return this.orientedFlatCoordinates_; +}; + + +/** + * @inheritDoc + */ +ol.geom.Polygon.prototype.getSimplifiedGeometryInternal = + function(squaredTolerance) { + var simplifiedFlatCoordinates = []; + var simplifiedEnds = []; + simplifiedFlatCoordinates.length = ol.geom.simplify.quantizes( + this.flatCoordinates, 0, this.ends_, this.stride, + Math.sqrt(squaredTolerance), + simplifiedFlatCoordinates, 0, simplifiedEnds); + var simplifiedPolygon = new ol.geom.Polygon(null); + simplifiedPolygon.setFlatCoordinates( + ol.geom.GeometryLayout.XY, simplifiedFlatCoordinates, simplifiedEnds); + return simplifiedPolygon; +}; + + +/** + * @inheritDoc + */ +ol.geom.Polygon.prototype.getType = function() { + return ol.geom.GeometryType.POLYGON; +}; + + +/** + * @param {ol.geom.RawPolygon} coordinates Coordinates. + * @param {ol.geom.GeometryLayout=} opt_layout Layout. + * @todo stability experimental + */ +ol.geom.Polygon.prototype.setCoordinates = function(coordinates, opt_layout) { + if (goog.isNull(coordinates)) { + this.setFlatCoordinates(ol.geom.GeometryLayout.XY, null, this.ends_); + } else { + this.setLayout(opt_layout, coordinates, 2); + if (goog.isNull(this.flatCoordinates)) { + this.flatCoordinates = []; + } + var ends = ol.geom.flat.deflateCoordinatess( + this.flatCoordinates, 0, coordinates, this.stride, this.ends_); + this.flatCoordinates.length = ends.length === 0 ? 0 : ends[ends.length - 1]; + this.dispatchChangeEvent(); + } +}; + + +/** + * @param {ol.geom.GeometryLayout} layout Layout. + * @param {Array.} flatCoordinates Flat coordinates. + * @param {Array.} ends Ends. + */ +ol.geom.Polygon.prototype.setFlatCoordinates = + function(layout, flatCoordinates, ends) { + this.setFlatCoordinatesInternal(layout, flatCoordinates); + this.ends_ = ends; + this.dispatchChangeEvent(); +}; diff --git a/float-no-zero/ol/ol/geom/simplegeometry.exports b/float-no-zero/ol/ol/geom/simplegeometry.exports new file mode 100644 index 0000000000..9ba0b04b69 --- /dev/null +++ b/float-no-zero/ol/ol/geom/simplegeometry.exports @@ -0,0 +1,7 @@ +@exportSymbol ol.geom.SimpleGeometry +@exportProperty ol.geom.SimpleGeometry.prototype.getExtent +@exportProperty ol.geom.SimpleGeometry.prototype.getFirstCoordinate +@exportProperty ol.geom.SimpleGeometry.prototype.getLastCoordinate +@exportProperty ol.geom.SimpleGeometry.prototype.getLayout +@exportProperty ol.geom.SimpleGeometry.prototype.getSimplifiedGeometry +@exportProperty ol.geom.SimpleGeometry.prototype.transform diff --git a/float-no-zero/ol/ol/geom/simplegeometry.js b/float-no-zero/ol/ol/geom/simplegeometry.js new file mode 100644 index 0000000000..879a84f2e9 --- /dev/null +++ b/float-no-zero/ol/ol/geom/simplegeometry.js @@ -0,0 +1,266 @@ +goog.provide('ol.geom.SimpleGeometry'); + +goog.require('goog.asserts'); +goog.require('goog.functions'); +goog.require('goog.object'); +goog.require('ol.extent'); +goog.require('ol.geom.Geometry'); +goog.require('ol.geom.flat'); + + + +/** + * @constructor + * @extends {ol.geom.Geometry} + * @todo stability experimental + */ +ol.geom.SimpleGeometry = function() { + + goog.base(this); + + /** + * @protected + * @type {ol.geom.GeometryLayout} + */ + this.layout = ol.geom.GeometryLayout.XY; + + /** + * @protected + * @type {number} + */ + this.stride = 2; + + /** + * @protected + * @type {Array.} + */ + this.flatCoordinates = null; + +}; +goog.inherits(ol.geom.SimpleGeometry, ol.geom.Geometry); + + +/** + * @param {number} stride Stride. + * @private + * @return {ol.geom.GeometryLayout} layout Layout. + */ +ol.geom.SimpleGeometry.getLayoutForStride_ = function(stride) { + if (stride == 2) { + return ol.geom.GeometryLayout.XY; + } else if (stride == 3) { + return ol.geom.GeometryLayout.XYZ; + } else if (stride == 4) { + return ol.geom.GeometryLayout.XYZM; + } else { + throw new Error('unsupported stride: ' + stride); + } +}; + + +/** + * @param {ol.geom.GeometryLayout} layout Layout. + * @private + * @return {number} Stride. + */ +ol.geom.SimpleGeometry.getStrideForLayout_ = function(layout) { + if (layout == ol.geom.GeometryLayout.XY) { + return 2; + } else if (layout == ol.geom.GeometryLayout.XYZ) { + return 3; + } else if (layout == ol.geom.GeometryLayout.XYM) { + return 3; + } else if (layout == ol.geom.GeometryLayout.XYZM) { + return 4; + } else { + throw new Error('unsupported layout: ' + layout); + } +}; + + +/** + * @inheritDoc + */ +ol.geom.SimpleGeometry.prototype.containsXY = goog.functions.FALSE; + + +/** + * @inheritDoc + */ +ol.geom.SimpleGeometry.prototype.getExtent = function(opt_extent) { + if (this.extentRevision != this.getRevision()) { + this.extent = ol.extent.createOrUpdateFromFlatCoordinates( + this.flatCoordinates, 0, this.flatCoordinates.length, this.stride, + this.extent); + this.extentRevision = this.getRevision(); + } + goog.asserts.assert(goog.isDef(this.extent)); + return ol.extent.returnOrUpdate(this.extent, opt_extent); +}; + + +/** + * @return {ol.Coordinate} First coordinate. + */ +ol.geom.SimpleGeometry.prototype.getFirstCoordinate = function() { + return this.flatCoordinates.slice(0, this.stride); +}; + + +/** + * @return {Array.} Flat coordinates. + */ +ol.geom.SimpleGeometry.prototype.getFlatCoordinates = function() { + return this.flatCoordinates; +}; + + +/** + * @return {ol.Coordinate} Last point. + */ +ol.geom.SimpleGeometry.prototype.getLastCoordinate = function() { + return this.flatCoordinates.slice(this.flatCoordinates.length - this.stride); +}; + + +/** + * @return {ol.geom.GeometryLayout} Layout. + * @todo stability experimental + */ +ol.geom.SimpleGeometry.prototype.getLayout = function() { + return this.layout; +}; + + +/** + * @inheritDoc + */ +ol.geom.SimpleGeometry.prototype.getSimplifiedGeometry = + function(squaredTolerance) { + if (this.simplifiedGeometryRevision != this.getRevision()) { + goog.object.clear(this.simplifiedGeometryCache); + this.simplifiedGeometryMaxMinSquaredTolerance = 0; + this.simplifiedGeometryRevision = this.getRevision(); + } + // If squaredTolerance is negative or if we know that simplification will not + // have any effect then just return this. + if (squaredTolerance < 0 || + (this.simplifiedGeometryMaxMinSquaredTolerance !== 0 && + squaredTolerance <= this.simplifiedGeometryMaxMinSquaredTolerance)) { + return this; + } + var key = squaredTolerance.toString(); + if (this.simplifiedGeometryCache.hasOwnProperty(key)) { + return this.simplifiedGeometryCache[key]; + } else { + var simplifiedGeometry = + this.getSimplifiedGeometryInternal(squaredTolerance); + var simplifiedFlatCoordinates = simplifiedGeometry.getFlatCoordinates(); + if (simplifiedFlatCoordinates.length < this.flatCoordinates.length) { + this.simplifiedGeometryCache[key] = simplifiedGeometry; + return simplifiedGeometry; + } else { + // Simplification did not actually remove any coordinates. We now know + // that any calls to getSimplifiedGeometry with a squaredTolerance less + // than or equal to the current squaredTolerance will also not have any + // effect. This allows us to short circuit simplification (saving CPU + // cycles) and prevents the cache of simplified geometries from filling + // up with useless identical copies of this geometry (saving memory). + this.simplifiedGeometryMaxMinSquaredTolerance = squaredTolerance; + return this; + } + } +}; + + +/** + * @param {number} squaredTolerance Squared tolerance. + * @return {ol.geom.SimpleGeometry} Simplified geometry. + * @protected + */ +ol.geom.SimpleGeometry.prototype.getSimplifiedGeometryInternal = + function(squaredTolerance) { + return this; +}; + + +/** + * @return {number} Stride. + */ +ol.geom.SimpleGeometry.prototype.getStride = function() { + return this.stride; +}; + + +/** + * @param {ol.geom.GeometryLayout} layout Layout. + * @param {Array.} flatCoordinates Flat coordinates. + * @protected + */ +ol.geom.SimpleGeometry.prototype.setFlatCoordinatesInternal = + function(layout, flatCoordinates) { + this.stride = ol.geom.SimpleGeometry.getStrideForLayout_(layout); + this.layout = layout; + this.flatCoordinates = flatCoordinates; +}; + + +/** + * @param {ol.geom.GeometryLayout|undefined} layout Layout. + * @param {Array} coordinates Coordinates. + * @param {number} nesting Nesting. + * @protected + */ +ol.geom.SimpleGeometry.prototype.setLayout = + function(layout, coordinates, nesting) { + /** @type {number} */ + var stride; + if (goog.isDef(layout)) { + stride = ol.geom.SimpleGeometry.getStrideForLayout_(layout); + } else { + var i; + for (i = 0; i < nesting; ++i) { + if (coordinates.length === 0) { + this.layout = ol.geom.GeometryLayout.XY; + this.stride = 2; + return; + } else { + coordinates = /** @type {Array} */ (coordinates[0]); + } + } + stride = (/** @type {Array} */ (coordinates)).length; + layout = ol.geom.SimpleGeometry.getLayoutForStride_(stride); + } + this.layout = layout; + this.stride = stride; +}; + + +/** + * @inheritDoc + */ +ol.geom.SimpleGeometry.prototype.transform = function(transformFn) { + if (!goog.isNull(this.flatCoordinates)) { + transformFn(this.flatCoordinates, this.flatCoordinates, this.stride); + this.dispatchChangeEvent(); + } +}; + + +/** + * @param {ol.geom.SimpleGeometry} simpleGeometry Simple geometry. + * @param {goog.vec.Mat4.Number} transform Transform. + * @param {Array.=} opt_dest Destination. + * @return {Array.} Transformed flat coordinates. + */ +ol.geom.transformSimpleGeometry2D = + function(simpleGeometry, transform, opt_dest) { + var flatCoordinates = simpleGeometry.getFlatCoordinates(); + if (goog.isNull(flatCoordinates)) { + return null; + } else { + var stride = simpleGeometry.getStride(); + return ol.geom.flat.transform2D( + flatCoordinates, stride, transform, opt_dest); + } +}; diff --git a/float-no-zero/ol/ol/geom/simplifygeom.js b/float-no-zero/ol/ol/geom/simplifygeom.js new file mode 100644 index 0000000000..1e361ae3e5 --- /dev/null +++ b/float-no-zero/ol/ol/geom/simplifygeom.js @@ -0,0 +1,400 @@ +// Based on simplify-js https://github.com/mourner/simplify-js +// Copyright (c) 2012, Vladimir Agafonkin +// All rights reserved. +// +// 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. + +goog.provide('ol.geom.simplify'); + +goog.require('ol.geom.flat'); + + +/** + * @param {Array.} flatCoordinates Flat coordinates. + * @param {number} offset Offset. + * @param {number} end End. + * @param {number} stride Stride. + * @param {number} squaredTolerance Squared tolerance. + * @param {boolean} highQuality Highest quality. + * @param {Array.=} opt_simplifiedFlatCoordinates Simplified flat + * coordinates. + * @return {Array.} Simplified line string. + */ +ol.geom.simplify.lineString = function(flatCoordinates, offset, end, stride, + squaredTolerance, highQuality, opt_simplifiedFlatCoordinates) { + var simplifiedFlatCoordinates = goog.isDef(opt_simplifiedFlatCoordinates) ? + opt_simplifiedFlatCoordinates : []; + if (!highQuality) { + end = ol.geom.simplify.radialDistance(flatCoordinates, offset, end, + stride, squaredTolerance, + simplifiedFlatCoordinates, 0); + flatCoordinates = simplifiedFlatCoordinates; + offset = 0; + stride = 2; + } + simplifiedFlatCoordinates.length = ol.geom.simplify.douglasPeucker( + flatCoordinates, offset, end, stride, squaredTolerance, + simplifiedFlatCoordinates, 0); + return simplifiedFlatCoordinates; +}; + + +/** + * @param {Array.} flatCoordinates Flat coordinates. + * @param {number} offset Offset. + * @param {number} end End. + * @param {number} stride Stride. + * @param {number} squaredTolerance Squared tolerance. + * @param {Array.} simplifiedFlatCoordinates Simplified flat + * coordinates. + * @param {number} simplifiedOffset Simplified offset. + * @return {number} Simplified offset. + */ +ol.geom.simplify.douglasPeucker = function(flatCoordinates, offset, end, + stride, squaredTolerance, simplifiedFlatCoordinates, simplifiedOffset) { + var n = (end - offset) / stride; + if (n < 3) { + for (; offset < end; offset += stride) { + simplifiedFlatCoordinates[simplifiedOffset++] = + flatCoordinates[offset]; + simplifiedFlatCoordinates[simplifiedOffset++] = + flatCoordinates[offset + 1]; + } + return simplifiedOffset; + } + /** @type {Array.} */ + var markers = new Array(n); + markers[0] = 1; + markers[n - 1] = 1; + /** @type {Array.} */ + var stack = [offset, end - stride]; + var index = 0; + var i; + while (stack.length > 0) { + var last = stack.pop(); + var first = stack.pop(); + var maxSquaredDistance = 0; + var x1 = flatCoordinates[first]; + var y1 = flatCoordinates[first + 1]; + var x2 = flatCoordinates[last]; + var y2 = flatCoordinates[last + 1]; + for (i = first + stride; i < last; i += stride) { + var x = flatCoordinates[i]; + var y = flatCoordinates[i + 1]; + var squaredDistance = ol.geom.flat.squaredSegmentDistance( + x, y, x1, y1, x2, y2); + if (squaredDistance > maxSquaredDistance) { + index = i; + maxSquaredDistance = squaredDistance; + } + } + if (maxSquaredDistance > squaredTolerance) { + markers[(index - offset) / stride] = 1; + if (first + stride < index) { + stack.push(first, index); + } + if (index + stride < last) { + stack.push(index, last); + } + } + } + for (i = 0; i < n; ++i) { + if (markers[i]) { + simplifiedFlatCoordinates[simplifiedOffset++] = + flatCoordinates[offset + i * stride]; + simplifiedFlatCoordinates[simplifiedOffset++] = + flatCoordinates[offset + i * stride + 1]; + } + } + return simplifiedOffset; +}; + + +/** + * @param {Array.} flatCoordinates Flat coordinates. + * @param {number} offset Offset. + * @param {Array.} ends Ends. + * @param {number} stride Stride. + * @param {number} squaredTolerance Squared tolerance. + * @param {Array.} simplifiedFlatCoordinates Simplified flat + * coordinates. + * @param {number} simplifiedOffset Simplified offset. + * @param {Array.} simplifiedEnds Simplified ends. + * @return {number} Simplified offset. + */ +ol.geom.simplify.douglasPeuckers = function(flatCoordinates, offset, + ends, stride, squaredTolerance, simplifiedFlatCoordinates, + simplifiedOffset, simplifiedEnds) { + var i, ii; + for (i = 0, ii = ends.length; i < ii; ++i) { + var end = ends[i]; + simplifiedOffset = ol.geom.simplify.douglasPeucker( + flatCoordinates, offset, end, stride, squaredTolerance, + simplifiedFlatCoordinates, simplifiedOffset); + simplifiedEnds.push(simplifiedOffset); + offset = end; + } + return simplifiedOffset; +}; + + +/** + * @param {Array.} flatCoordinates Flat coordinates. + * @param {number} offset Offset. + * @param {Array.>} endss Endss. + * @param {number} stride Stride. + * @param {number} squaredTolerance Squared tolerance. + * @param {Array.} simplifiedFlatCoordinates Simplified flat + * coordinates. + * @param {number} simplifiedOffset Simplified offset. + * @param {Array.>} simplifiedEndss Simplified endss. + * @return {number} Simplified offset. + */ +ol.geom.simplify.douglasPeuckerss = function( + flatCoordinates, offset, endss, stride, squaredTolerance, + simplifiedFlatCoordinates, simplifiedOffset, simplifiedEndss) { + var i, ii; + for (i = 0, ii = endss.length; i < ii; ++i) { + var ends = endss[i]; + var simplifiedEnds = []; + simplifiedOffset = ol.geom.simplify.douglasPeuckers( + flatCoordinates, offset, ends, stride, squaredTolerance, + simplifiedFlatCoordinates, simplifiedOffset, simplifiedEnds); + simplifiedEndss.push(simplifiedEnds); + offset = ends[ends.length - 1]; + } + return simplifiedOffset; +}; + + +/** + * @param {Array.} flatCoordinates Flat coordinates. + * @param {number} offset Offset. + * @param {number} end End. + * @param {number} stride Stride. + * @param {number} squaredTolerance Squared tolerance. + * @param {Array.} simplifiedFlatCoordinates Simplified flat + * coordinates. + * @param {number} simplifiedOffset Simplified offset. + * @return {number} Simplified offset. + */ +ol.geom.simplify.radialDistance = function(flatCoordinates, offset, end, + stride, squaredTolerance, simplifiedFlatCoordinates, simplifiedOffset) { + if (end <= offset + stride) { + // zero or one point, no simplification possible, so copy and return + for (; offset < end; offset += stride) { + simplifiedFlatCoordinates[simplifiedOffset++] = flatCoordinates[offset]; + simplifiedFlatCoordinates[simplifiedOffset++] = + flatCoordinates[offset + 1]; + } + return simplifiedOffset; + } + var x1 = flatCoordinates[offset]; + var y1 = flatCoordinates[offset + 1]; + // copy first point + simplifiedFlatCoordinates[simplifiedOffset++] = x1; + simplifiedFlatCoordinates[simplifiedOffset++] = y1; + var x2 = x1; + var y2 = y1; + for (offset += stride; offset < end; offset += stride) { + x2 = flatCoordinates[offset]; + y2 = flatCoordinates[offset + 1]; + if (ol.geom.flat.squaredDistance(x1, y1, x2, y2) > squaredTolerance) { + // copy point at offset + simplifiedFlatCoordinates[simplifiedOffset++] = x2; + simplifiedFlatCoordinates[simplifiedOffset++] = y2; + x1 = x2; + y1 = y2; + } + } + if (x2 != x1 || y2 != y1) { + // copy last point + simplifiedFlatCoordinates[simplifiedOffset++] = x2; + simplifiedFlatCoordinates[simplifiedOffset++] = y2; + } + return simplifiedOffset; +}; + + +/** + * @param {number} value Value. + * @param {number} tolerance Squared tolerance. + * @return {number} Rounded value. + */ +ol.geom.simplify.snap = function(value, tolerance) { + return tolerance * Math.round(value / tolerance); +}; + + +/** + * Simplifies a line string using an algorithm designed by Tim Schaub. + * Coordinates are snapped to the nearest value in a virtual grid and + * consecutive duplicate coordinates are discarded. This effectively preserves + * topology as the simplification of any subsection of a line string is + * independent of the rest of the line string. This means that, for examples, + * the common edge between two polygons will be simplified to the same line + * string independently in both polygons. This implementation uses a single + * pass over the coordinates and eliminates intermediate collinear points. + * @param {Array.} flatCoordinates Flat coordinates. + * @param {number} offset Offset. + * @param {number} end End. + * @param {number} stride Stride. + * @param {number} tolerance Squared tolerance. + * @param {Array.} simplifiedFlatCoordinates Simplified flat + * coordinates. + * @param {number} simplifiedOffset Simplified offset. + * @return {number} Simplified offset. + */ +ol.geom.simplify.quantize = function(flatCoordinates, offset, end, stride, + tolerance, simplifiedFlatCoordinates, simplifiedOffset) { + // do nothing if the line is empty + if (offset == end) { + return simplifiedOffset; + } + // snap the first coordinate (P1) + var x1 = ol.geom.simplify.snap(flatCoordinates[offset], tolerance); + var y1 = ol.geom.simplify.snap(flatCoordinates[offset + 1], tolerance); + offset += stride; + // add the first coordinate to the output + simplifiedFlatCoordinates[simplifiedOffset++] = x1; + simplifiedFlatCoordinates[simplifiedOffset++] = y1; + // find the next coordinate that does not snap to the same value as the first + // coordinate (P2) + var x2, y2; + do { + x2 = ol.geom.simplify.snap(flatCoordinates[offset], tolerance); + y2 = ol.geom.simplify.snap(flatCoordinates[offset + 1], tolerance); + offset += stride; + if (offset == end) { + // all coordinates snap to the same value, the line collapses to a point + // push the last snapped value anyway to ensure that the output contains + // at least two points + // FIXME should we really return at least two points anyway? + simplifiedFlatCoordinates[simplifiedOffset++] = x2; + simplifiedFlatCoordinates[simplifiedOffset++] = y2; + return simplifiedOffset; + } + } while (x2 == x1 && y2 == y1); + while (offset < end) { + var x3, y3; + // snap the next coordinate (P3) + x3 = ol.geom.simplify.snap(flatCoordinates[offset], tolerance); + y3 = ol.geom.simplify.snap(flatCoordinates[offset + 1], tolerance); + offset += stride; + // skip P3 if it is equal to P2 + if (x3 == x2 && y3 == y2) { + continue; + } + // calculate the delta between P1 and P2 + var dx1 = x2 - x1; + var dy1 = y2 - y1; + // calculate the delta between P3 and P1 + var dx2 = x3 - x1; + var dy2 = y3 - y1; + // if P1, P2, and P3 are colinear and P3 is further from P1 than P2 is from + // P1 in the same direction then P2 is on the straight line between P1 and + // P3 + if ((dx1 * dy2 == dy1 * dx2) && + ((dx1 < 0 && dx2 < dx1) || dx1 == dx2 || (dx1 > 0 && dx2 > dx1)) && + ((dy1 < 0 && dy2 < dy1) || dy1 == dy2 || (dy1 > 0 && dy2 > dy1))) { + // discard P2 and set P2 = P3 + x2 = x3; + y2 = y3; + continue; + } + // either P1, P2, and P3 are not colinear, or they are colinear but P3 is + // between P3 and P1 or on the opposite half of the line to P2. add P2, + // and continue with P1 = P2 and P2 = P3 + simplifiedFlatCoordinates[simplifiedOffset++] = x2; + simplifiedFlatCoordinates[simplifiedOffset++] = y2; + x1 = x2; + y1 = y2; + x2 = x3; + y2 = y3; + } + // add the last point (P2) + simplifiedFlatCoordinates[simplifiedOffset++] = x2; + simplifiedFlatCoordinates[simplifiedOffset++] = y2; + return simplifiedOffset; +}; + + +/** + * @param {Array.} flatCoordinates Flat coordinates. + * @param {number} offset Offset. + * @param {Array.} ends Ends. + * @param {number} stride Stride. + * @param {number} tolerance Squared tolerance. + * @param {Array.} simplifiedFlatCoordinates Simplified flat + * coordinates. + * @param {number} simplifiedOffset Simplified offset. + * @param {Array.} simplifiedEnds Simplified ends. + * @return {number} Simplified offset. + */ +ol.geom.simplify.quantizes = function( + flatCoordinates, offset, ends, stride, + tolerance, + simplifiedFlatCoordinates, simplifiedOffset, simplifiedEnds) { + var i, ii; + for (i = 0, ii = ends.length; i < ii; ++i) { + var end = ends[i]; + simplifiedOffset = ol.geom.simplify.quantize( + flatCoordinates, offset, end, stride, + tolerance, + simplifiedFlatCoordinates, simplifiedOffset); + simplifiedEnds.push(simplifiedOffset); + offset = end; + } + return simplifiedOffset; +}; + + +/** + * @param {Array.} flatCoordinates Flat coordinates. + * @param {number} offset Offset. + * @param {Array.>} endss Endss. + * @param {number} stride Stride. + * @param {number} tolerance Squared tolerance. + * @param {Array.} simplifiedFlatCoordinates Simplified flat + * coordinates. + * @param {number} simplifiedOffset Simplified offset. + * @param {Array.>} simplifiedEndss Simplified endss. + * @return {number} Simplified offset. + */ +ol.geom.simplify.quantizess = function( + flatCoordinates, offset, endss, stride, + tolerance, + simplifiedFlatCoordinates, simplifiedOffset, simplifiedEndss) { + var i, ii; + for (i = 0, ii = endss.length; i < ii; ++i) { + var ends = endss[i]; + var simplifiedEnds = []; + simplifiedOffset = ol.geom.simplify.quantizes( + flatCoordinates, offset, ends, stride, + tolerance, + simplifiedFlatCoordinates, simplifiedOffset, simplifiedEnds); + simplifiedEndss.push(simplifiedEnds); + offset = ends[ends.length - 1]; + } + return simplifiedOffset; +}; diff --git a/float-no-zero/ol/ol/image.js b/float-no-zero/ol/ol/image.js new file mode 100644 index 0000000000..963e4bdff8 --- /dev/null +++ b/float-no-zero/ol/ol/image.js @@ -0,0 +1,139 @@ +goog.provide('ol.Image'); + +goog.require('goog.array'); +goog.require('goog.asserts'); +goog.require('goog.events'); +goog.require('goog.events.EventType'); +goog.require('goog.object'); +goog.require('ol.ImageBase'); +goog.require('ol.ImageState'); + + + +/** + * @constructor + * @extends {ol.ImageBase} + * @param {ol.Extent} extent Extent. + * @param {number} resolution Resolution. + * @param {number} pixelRatio Pixel ratio. + * @param {Array.} attributions Attributions. + * @param {string} src Image source URI. + * @param {?string} crossOrigin Cross origin. + */ +ol.Image = + function(extent, resolution, pixelRatio, attributions, src, crossOrigin) { + + goog.base(this, extent, resolution, pixelRatio, ol.ImageState.IDLE, + attributions); + + /** + * @private + * @type {string} + */ + this.src_ = src; + + /** + * @private + * @type {Image} + */ + this.image_ = new Image(); + if (!goog.isNull(crossOrigin)) { + this.image_.crossOrigin = crossOrigin; + } + + /** + * @private + * @type {Object.} + */ + this.imageByContext_ = {}; + + /** + * @private + * @type {Array.} + */ + this.imageListenerKeys_ = null; + + /** + * @protected + * @type {ol.ImageState} + */ + this.state = ol.ImageState.IDLE; +}; +goog.inherits(ol.Image, ol.ImageBase); + + +/** + * @param {Object=} opt_context Object. + * @return {HTMLCanvasElement|Image|HTMLVideoElement} Image. + */ +ol.Image.prototype.getImageElement = function(opt_context) { + if (goog.isDef(opt_context)) { + var image; + var key = goog.getUid(opt_context); + if (key in this.imageByContext_) { + return this.imageByContext_[key]; + } else if (goog.object.isEmpty(this.imageByContext_)) { + image = this.image_; + } else { + image = /** @type {Image} */ (this.image_.cloneNode(false)); + } + this.imageByContext_[key] = image; + return image; + } else { + return this.image_; + } +}; + + +/** + * Tracks loading or read errors. + * + * @private + */ +ol.Image.prototype.handleImageError_ = function() { + this.state = ol.ImageState.ERROR; + this.unlistenImage_(); + this.dispatchChangeEvent(); +}; + + +/** + * Tracks successful image load. + * + * @private + */ +ol.Image.prototype.handleImageLoad_ = function() { + this.state = ol.ImageState.LOADED; + this.unlistenImage_(); + this.dispatchChangeEvent(); +}; + + +/** + * Load not yet loaded URI. + */ +ol.Image.prototype.load = function() { + if (this.state == ol.ImageState.IDLE) { + this.state = ol.ImageState.LOADING; + goog.asserts.assert(goog.isNull(this.imageListenerKeys_)); + this.imageListenerKeys_ = [ + goog.events.listenOnce(this.image_, goog.events.EventType.ERROR, + this.handleImageError_, false, this), + goog.events.listenOnce(this.image_, goog.events.EventType.LOAD, + this.handleImageLoad_, false, this) + ]; + this.image_.src = this.src_; + } +}; + + +/** + * Discards event handlers which listen for load completion or errors. + * + * @private + */ +ol.Image.prototype.unlistenImage_ = function() { + goog.asserts.assert(!goog.isNull(this.imageListenerKeys_)); + goog.array.forEach(this.imageListenerKeys_, goog.events.unlistenByKey); + this.imageListenerKeys_ = null; +}; diff --git a/float-no-zero/ol/ol/imagebase.js b/float-no-zero/ol/ol/imagebase.js new file mode 100644 index 0000000000..8924be9a5f --- /dev/null +++ b/float-no-zero/ol/ol/imagebase.js @@ -0,0 +1,127 @@ +goog.provide('ol.ImageBase'); +goog.provide('ol.ImageState'); + +goog.require('goog.events.EventTarget'); +goog.require('goog.events.EventType'); +goog.require('ol.Attribution'); +goog.require('ol.Extent'); + + +/** + * @enum {number} + */ +ol.ImageState = { + IDLE: 0, + LOADING: 1, + LOADED: 2, + ERROR: 3 +}; + + + +/** + * @constructor + * @extends {goog.events.EventTarget} + * @param {ol.Extent} extent Extent. + * @param {number} resolution Resolution. + * @param {number} pixelRatio Pixel ratio. + * @param {ol.ImageState} state State. + * @param {Array.} attributions Attributions. + */ +ol.ImageBase = function(extent, resolution, pixelRatio, state, attributions) { + + goog.base(this); + + /** + * @private + * @type {Array.} + */ + this.attributions_ = attributions; + + /** + * @private + * @type {ol.Extent} + */ + this.extent_ = extent; + + /** + * @private + * @type {number} + */ + this.pixelRatio_ = pixelRatio; + + /** + * @private + * @type {number} + */ + this.resolution_ = resolution; + + /** + * @protected + * @type {ol.ImageState} + */ + this.state = state; + +}; +goog.inherits(ol.ImageBase, goog.events.EventTarget); + + +/** + * @protected + */ +ol.ImageBase.prototype.dispatchChangeEvent = function() { + this.dispatchEvent(goog.events.EventType.CHANGE); +}; + + +/** + * @return {Array.} Attributions. + */ +ol.ImageBase.prototype.getAttributions = function() { + return this.attributions_; +}; + + +/** + * @return {ol.Extent} Extent. + */ +ol.ImageBase.prototype.getExtent = function() { + return this.extent_; +}; + + +/** + * @param {Object=} opt_context Object. + * @return {HTMLCanvasElement|Image|HTMLVideoElement} Image. + */ +ol.ImageBase.prototype.getImageElement = goog.abstractMethod; + + +/** + * @return {number} PixelRatio. + */ +ol.ImageBase.prototype.getPixelRatio = function() { + return this.pixelRatio_; +}; + + +/** + * @return {number} Resolution. + */ +ol.ImageBase.prototype.getResolution = function() { + return this.resolution_; +}; + + +/** + * @return {ol.ImageState} State. + */ +ol.ImageBase.prototype.getState = function() { + return this.state; +}; + + +/** + * Load not yet loaded URI. + */ +ol.ImageBase.prototype.load = goog.abstractMethod; diff --git a/float-no-zero/ol/ol/imagecanvas.js b/float-no-zero/ol/ol/imagecanvas.js new file mode 100644 index 0000000000..3cd7ac9f2b --- /dev/null +++ b/float-no-zero/ol/ol/imagecanvas.js @@ -0,0 +1,38 @@ +goog.provide('ol.ImageCanvas'); + +goog.require('ol.ImageBase'); +goog.require('ol.ImageState'); + + + +/** + * @constructor + * @extends {ol.ImageBase} + * @param {ol.Extent} extent Extent. + * @param {number} resolution Resolution. + * @param {number} pixelRatio Pixel ratio. + * @param {Array.} attributions Attributions. + * @param {HTMLCanvasElement} canvas Canvas. + */ +ol.ImageCanvas = function(extent, resolution, pixelRatio, attributions, + canvas) { + + goog.base(this, extent, resolution, pixelRatio, ol.ImageState.LOADED, + attributions); + + /** + * @private + * @type {HTMLCanvasElement} + */ + this.canvas_ = canvas; + +}; +goog.inherits(ol.ImageCanvas, ol.ImageBase); + + +/** + * @inheritDoc + */ +ol.ImageCanvas.prototype.getImageElement = function(opt_context) { + return this.canvas_; +}; diff --git a/float-no-zero/ol/ol/imagetile.exports b/float-no-zero/ol/ol/imagetile.exports new file mode 100644 index 0000000000..25d191acba --- /dev/null +++ b/float-no-zero/ol/ol/imagetile.exports @@ -0,0 +1 @@ +@exportProperty ol.ImageTile.prototype.getImage diff --git a/float-no-zero/ol/ol/imagetile.js b/float-no-zero/ol/ol/imagetile.js new file mode 100644 index 0000000000..1fa5c9b866 --- /dev/null +++ b/float-no-zero/ol/ol/imagetile.js @@ -0,0 +1,160 @@ +goog.provide('ol.ImageTile'); + +goog.require('goog.array'); +goog.require('goog.asserts'); +goog.require('goog.events'); +goog.require('goog.events.EventType'); +goog.require('goog.object'); +goog.require('ol.Tile'); +goog.require('ol.TileCoord'); +goog.require('ol.TileLoadFunctionType'); +goog.require('ol.TileState'); + + + +/** + * @constructor + * @extends {ol.Tile} + * @param {ol.TileCoord} tileCoord Tile coordinate. + * @param {ol.TileState} state State. + * @param {string} src Image source URI. + * @param {?string} crossOrigin Cross origin. + * @param {ol.TileLoadFunctionType} tileLoadFunction Tile load function. + * @todo stability experimental + */ +ol.ImageTile = + function(tileCoord, state, src, crossOrigin, tileLoadFunction) { + + goog.base(this, tileCoord, state); + + /** + * Image URI + * + * @private + * @type {string} + */ + this.src_ = src; + + /** + * @private + * @type {Image} + */ + this.image_ = new Image(); + if (!goog.isNull(crossOrigin)) { + this.image_.crossOrigin = crossOrigin; + } + + /** + * @private + * @type {Object.} + */ + this.imageByContext_ = {}; + + /** + * @private + * @type {Array.} + */ + this.imageListenerKeys_ = null; + + /** + * @private + * @type {ol.TileLoadFunctionType} + */ + this.tileLoadFunction_ = tileLoadFunction; + +}; +goog.inherits(ol.ImageTile, ol.Tile); + + +/** + * @inheritDoc + * @todo stability experimental + */ +ol.ImageTile.prototype.getImage = function(opt_context) { + if (goog.isDef(opt_context)) { + var image; + var key = goog.getUid(opt_context); + if (key in this.imageByContext_) { + return this.imageByContext_[key]; + } else if (goog.object.isEmpty(this.imageByContext_)) { + image = this.image_; + } else { + image = /** @type {Image} */ (this.image_.cloneNode(false)); + } + this.imageByContext_[key] = image; + return image; + } else { + return this.image_; + } +}; + + +/** + * @inheritDoc + */ +ol.ImageTile.prototype.getKey = function() { + return this.src_; +}; + + +/** + * Tracks loading or read errors. + * + * @private + */ +ol.ImageTile.prototype.handleImageError_ = function() { + this.state = ol.TileState.ERROR; + this.unlistenImage_(); + this.dispatchChangeEvent(); +}; + + +/** + * Tracks successful image load. + * + * @private + */ +ol.ImageTile.prototype.handleImageLoad_ = function() { + if (!goog.isDef(this.image_.naturalWidth)) { + this.image_.naturalWidth = this.image_.width; + this.image_.naturalHeight = this.image_.height; + } + + if (this.image_.naturalWidth && this.image_.naturalHeight) { + this.state = ol.TileState.LOADED; + } else { + this.state = ol.TileState.EMPTY; + } + this.unlistenImage_(); + this.dispatchChangeEvent(); +}; + + +/** + * Load not yet loaded URI. + */ +ol.ImageTile.prototype.load = function() { + if (this.state == ol.TileState.IDLE) { + this.state = ol.TileState.LOADING; + goog.asserts.assert(goog.isNull(this.imageListenerKeys_)); + this.imageListenerKeys_ = [ + goog.events.listenOnce(this.image_, goog.events.EventType.ERROR, + this.handleImageError_, false, this), + goog.events.listenOnce(this.image_, goog.events.EventType.LOAD, + this.handleImageLoad_, false, this) + ]; + this.tileLoadFunction_(this, this.src_); + } +}; + + +/** + * Discards event handlers which listen for load completion or errors. + * + * @private + */ +ol.ImageTile.prototype.unlistenImage_ = function() { + goog.asserts.assert(!goog.isNull(this.imageListenerKeys_)); + goog.array.forEach(this.imageListenerKeys_, goog.events.unlistenByKey); + this.imageListenerKeys_ = null; +}; diff --git a/float-no-zero/ol/ol/imageurlfunction.js b/float-no-zero/ol/ol/imageurlfunction.js new file mode 100644 index 0000000000..fe52c718c0 --- /dev/null +++ b/float-no-zero/ol/ol/imageurlfunction.js @@ -0,0 +1,46 @@ +goog.provide('ol.ImageUrlFunction'); +goog.provide('ol.ImageUrlFunctionType'); + +goog.require('ol.Size'); + + +/** + * @typedef {function(this:ol.source.Image, ol.Extent, ol.Size, + * ol.proj.Projection): (string|undefined)} + */ +ol.ImageUrlFunctionType; + + +/** + * @param {string} baseUrl Base URL (may have query data). + * @param {Object.} params to encode in the URL. + * @param {function(string, Object., ol.Extent, ol.Size, + * ol.proj.Projection): (string|undefined)} paramsFunction params function. + * @return {ol.ImageUrlFunctionType} Image URL function. + */ +ol.ImageUrlFunction.createFromParamsFunction = + function(baseUrl, params, paramsFunction) { + return ( + /** + * @this {ol.source.Image} + * @param {ol.Extent} extent Extent. + * @param {ol.Size} size Size. + * @param {ol.proj.Projection} projection Projection. + * @return {string|undefined} URL. + */ + function(extent, size, projection) { + return paramsFunction(baseUrl, params, extent, size, projection); + }); +}; + + +/** + * @this {ol.source.Image} + * @param {ol.Extent} extent Extent. + * @param {ol.Size} size Size. + * @return {string|undefined} Image URL. + */ +ol.ImageUrlFunction.nullImageUrlFunction = + function(extent, size) { + return undefined; +}; diff --git a/float-no-zero/ol/ol/interaction/doubleclickzoom.exports b/float-no-zero/ol/ol/interaction/doubleclickzoom.exports new file mode 100644 index 0000000000..796868f1f1 --- /dev/null +++ b/float-no-zero/ol/ol/interaction/doubleclickzoom.exports @@ -0,0 +1 @@ +@exportSymbol ol.interaction.DoubleClickZoom diff --git a/float-no-zero/ol/ol/interaction/doubleclickzoominteraction.js b/float-no-zero/ol/ol/interaction/doubleclickzoominteraction.js new file mode 100644 index 0000000000..e5b019de33 --- /dev/null +++ b/float-no-zero/ol/ol/interaction/doubleclickzoominteraction.js @@ -0,0 +1,61 @@ +// FIXME works for View2D only + +goog.provide('ol.interaction.DoubleClickZoom'); + +goog.require('goog.asserts'); +goog.require('ol.MapBrowserEvent'); +goog.require('ol.MapBrowserEvent.EventType'); +goog.require('ol.interaction.Interaction'); + + + +/** + * Allows the user to zoom by double-clicking on the map. + * + * @constructor + * @extends {ol.interaction.Interaction} + * @param {olx.interaction.DoubleClickZoomOptions=} opt_options Options. + * @todo stability experimental + */ +ol.interaction.DoubleClickZoom = function(opt_options) { + + var options = goog.isDef(opt_options) ? opt_options : {}; + + /** + * @private + * @type {number} + */ + this.delta_ = goog.isDef(options.delta) ? options.delta : 1; + + goog.base(this); + + /** + * @private + * @type {number} + */ + this.duration_ = goog.isDef(options.duration) ? options.duration : 250; + +}; +goog.inherits(ol.interaction.DoubleClickZoom, ol.interaction.Interaction); + + +/** + * @inheritDoc + */ +ol.interaction.DoubleClickZoom.prototype.handleMapBrowserEvent = + function(mapBrowserEvent) { + var stopEvent = false; + var browserEvent = mapBrowserEvent.browserEvent; + if (mapBrowserEvent.type == ol.MapBrowserEvent.EventType.DBLCLICK) { + var map = mapBrowserEvent.map; + var anchor = mapBrowserEvent.coordinate; + var delta = browserEvent.shiftKey ? -this.delta_ : this.delta_; + // FIXME works for View2D only + var view = map.getView().getView2D(); + ol.interaction.Interaction.zoomByDelta( + map, view, delta, anchor, this.duration_); + mapBrowserEvent.preventDefault(); + stopEvent = true; + } + return !stopEvent; +}; diff --git a/float-no-zero/ol/ol/interaction/draganddropinteraction.exports b/float-no-zero/ol/ol/interaction/draganddropinteraction.exports new file mode 100644 index 0000000000..50e9fef9e3 --- /dev/null +++ b/float-no-zero/ol/ol/interaction/draganddropinteraction.exports @@ -0,0 +1 @@ +@exportSymbol ol.interaction.DragAndDrop diff --git a/float-no-zero/ol/ol/interaction/draganddropinteraction.js b/float-no-zero/ol/ol/interaction/draganddropinteraction.js new file mode 100644 index 0000000000..7af957e4ee --- /dev/null +++ b/float-no-zero/ol/ol/interaction/draganddropinteraction.js @@ -0,0 +1,208 @@ +// FIXME should handle all geo-referenced data, not just vector data + +goog.provide('ol.interaction.DragAndDrop'); +goog.provide('ol.interaction.DragAndDropEvent'); + +goog.require('goog.array'); +goog.require('goog.asserts'); +goog.require('goog.events'); +goog.require('goog.events.Event'); +goog.require('goog.events.FileDropHandler'); +goog.require('goog.events.FileDropHandler.EventType'); +goog.require('goog.fs.FileReader'); +goog.require('goog.functions'); +goog.require('ol.interaction.Interaction'); +goog.require('ol.proj'); + + + +/** + * @constructor + * @extends {ol.interaction.Interaction} + * @param {olx.interaction.DragAndDropOptions=} opt_options Options. + */ +ol.interaction.DragAndDrop = function(opt_options) { + + var options = goog.isDef(opt_options) ? opt_options : {}; + + goog.base(this); + + /** + * @private + * @type {Array.} + */ + this.formatConstructors_ = goog.isDef(options.formatConstructors) ? + options.formatConstructors : []; + + /** + * @private + * @type {ol.proj.Projection} + */ + this.reprojectTo_ = goog.isDef(options.reprojectTo) ? + ol.proj.get(options.reprojectTo) : null; + + /** + * @private + * @type {goog.events.FileDropHandler} + */ + this.fileDropHandler_ = null; + + /** + * @private + * @type {goog.events.Key|undefined} + */ + this.dropListenKey_ = undefined; + +}; +goog.inherits(ol.interaction.DragAndDrop, ol.interaction.Interaction); + + +/** + * @inheritDoc + */ +ol.interaction.DragAndDrop.prototype.disposeInternal = function() { + if (goog.isDef(this.dropListenKey_)) { + goog.events.unlistenByKey(this.dropListenKey_); + } + goog.base(this, 'disposeInternal'); +}; + + +/** + * @param {goog.events.BrowserEvent} event Event. + * @private + */ +ol.interaction.DragAndDrop.prototype.handleDrop_ = function(event) { + var files = event.getBrowserEvent().dataTransfer.files; + var i, ii; + for (i = 0, ii = files.length; i < ii; ++i) { + // The empty string param is a workaround for + // https://code.google.com/p/closure-library/issues/detail?id=524 + var reader = goog.fs.FileReader.readAsText(files[i], ''); + reader.addCallback(this.handleResult_, this); + } +}; + + +/** + * @param {string} result Result. + * @private + */ +ol.interaction.DragAndDrop.prototype.handleResult_ = function(result) { + var map = this.getMap(); + goog.asserts.assert(!goog.isNull(map)); + var projection = this.reprojectTo_; + if (goog.isNull(projection)) { + var view = map.getView(); + goog.asserts.assert(goog.isDef(view)); + projection = view.getView2D().getProjection(); + goog.asserts.assert(goog.isDef(projection)); + } + var formatConstructors = this.formatConstructors_; + var features = []; + var i, ii; + for (i = 0, ii = formatConstructors.length; i < ii; ++i) { + var formatConstructor = formatConstructors[i]; + var format = new formatConstructor(); + var readFeatures = this.tryReadFeatures_(format, result); + if (!goog.isNull(readFeatures)) { + var featureProjection = format.readProjection(result); + var transform = ol.proj.getTransform(featureProjection, projection); + var j, jj; + for (j = 0, jj = readFeatures.length; j < jj; ++j) { + var feature = readFeatures[j]; + var geometry = feature.getGeometry(); + if (!goog.isNull(geometry)) { + geometry.transform(transform); + } + features.push(feature); + } + } + } + this.dispatchEvent( + new ol.interaction.DragAndDropEvent( + ol.interaction.DragAndDropEventType.ADD_FEATURES, this, features, + projection)); +}; + + +/** + * @inheritDoc + */ +ol.interaction.DragAndDrop.prototype.handleMapBrowserEvent = + goog.functions.TRUE; + + +/** + * @inheritDoc + */ +ol.interaction.DragAndDrop.prototype.setMap = function(map) { + if (goog.isDef(this.dropListenKey_)) { + goog.events.unlistenByKey(this.dropListenKey_); + this.dropListenKey_ = undefined; + } + if (!goog.isNull(this.fileDropHandler_)) { + goog.dispose(this.fileDropHandler_); + this.fileDropHandler_ = null; + } + goog.asserts.assert(!goog.isDef(this.dropListenKey_)); + goog.base(this, 'setMap', map); + if (!goog.isNull(map)) { + this.fileDropHandler_ = new goog.events.FileDropHandler(map.getViewport()); + this.dropListenKey_ = goog.events.listen( + this.fileDropHandler_, goog.events.FileDropHandler.EventType.DROP, + this.handleDrop_, false, this); + } +}; + + +/** + * @param {ol.format.Feature} format Format. + * @param {string} text Text. + * @private + * @return {Array.} Features. + */ +ol.interaction.DragAndDrop.prototype.tryReadFeatures_ = function(format, text) { + try { + return format.readFeatures(text); + } catch (e) { + return null; + } +}; + + +/** + * @enum {string} + */ +ol.interaction.DragAndDropEventType = { + ADD_FEATURES: 'addfeatures' +}; + + + +/** + * @constructor + * @extends {goog.events.Event} + * @implements {oli.interaction.DragAndDropEvent} + * @param {ol.interaction.DragAndDropEventType} type Type. + * @param {Object=} opt_target Target. + * @param {Array.=} opt_features Features. + * @param {ol.proj.Projection=} opt_projection Projection. + */ +ol.interaction.DragAndDropEvent = + function(type, opt_target, opt_features, opt_projection) { + + goog.base(this, type, opt_target); + + /** + * @type {Array.|undefined} + */ + this.features = opt_features; + + /** + * @type {ol.proj.Projection|undefined} + */ + this.projection = opt_projection; + +}; +goog.inherits(ol.interaction.DragAndDropEvent, goog.events.Event); diff --git a/float-no-zero/ol/ol/interaction/dragboxinteraction.exports b/float-no-zero/ol/ol/interaction/dragboxinteraction.exports new file mode 100644 index 0000000000..7b578e067a --- /dev/null +++ b/float-no-zero/ol/ol/interaction/dragboxinteraction.exports @@ -0,0 +1,2 @@ +@exportSymbol ol.interaction.DragBox +@exportProperty ol.interaction.DragBox.prototype.getGeometry diff --git a/float-no-zero/ol/ol/interaction/dragboxinteraction.js b/float-no-zero/ol/ol/interaction/dragboxinteraction.js new file mode 100644 index 0000000000..f12f1c2f7c --- /dev/null +++ b/float-no-zero/ol/ol/interaction/dragboxinteraction.js @@ -0,0 +1,160 @@ +// FIXME draw drag box +// FIXME works for View2D only + +goog.provide('ol.DragBoxEvent'); +goog.provide('ol.interaction.DragBox'); + +goog.require('goog.asserts'); +goog.require('goog.events.Event'); +goog.require('ol.events.ConditionType'); +goog.require('ol.events.condition'); +goog.require('ol.interaction.Drag'); +goog.require('ol.render.Box'); + + +/** + * @define {number} Hysterisis pixels. + */ +ol.DRAG_BOX_HYSTERESIS_PIXELS = 8; + + +/** + * @const + * @type {number} + */ +ol.DRAG_BOX_HYSTERESIS_PIXELS_SQUARED = + ol.DRAG_BOX_HYSTERESIS_PIXELS * + ol.DRAG_BOX_HYSTERESIS_PIXELS; + + +/** + * @enum {string} + */ +ol.DragBoxEventType = { + BOXSTART: 'boxstart', + BOXEND: 'boxend' +}; + + + +/** + * Object representing a dragbox event. + * + * @param {string} type The event type. + * @param {ol.Coordinate} coordinate The event coordinate. + * @extends {goog.events.Event} + * @constructor + * @implements {oli.DragBoxEvent} + */ +ol.DragBoxEvent = function(type, coordinate) { + goog.base(this, type); + + /** + * The coordinate of the drag event. + * @const + * @type {ol.Coordinate} + */ + this.coordinate = coordinate; + +}; +goog.inherits(ol.DragBoxEvent, goog.events.Event); + + + +/** + * @constructor + * @extends {ol.interaction.Drag} + * @param {olx.interaction.DragBoxOptions=} opt_options Options. + * @todo stability experimental + */ +ol.interaction.DragBox = function(opt_options) { + + goog.base(this); + + var options = goog.isDef(opt_options) ? opt_options : {}; + + /** + * @private + * @type {ol.style.Style} + */ + var style = goog.isDef(options.style) ? options.style : null; + + /** + * @type {ol.render.Box} + * @private + */ + this.box_ = new ol.render.Box(style); + + /** + * @type {ol.Pixel} + * @private + */ + this.startPixel_ = null; + + /** + * @private + * @type {ol.events.ConditionType} + */ + this.condition_ = goog.isDef(options.condition) ? + options.condition : ol.events.condition.always; + +}; +goog.inherits(ol.interaction.DragBox, ol.interaction.Drag); + + +/** + * @inheritDoc + */ +ol.interaction.DragBox.prototype.handleDrag = function(mapBrowserEvent) { + this.box_.setPixels(this.startPixel_, mapBrowserEvent.pixel); +}; + + +/** + * Returns geometry of last drawn box. + * @return {ol.geom.Geometry} Geometry. + */ +ol.interaction.DragBox.prototype.getGeometry = function() { + return this.box_.getGeometry(); +}; + + +/** + * To be overriden by child classes. + * @protected + */ +ol.interaction.DragBox.prototype.onBoxEnd = goog.nullFunction; + + +/** + * @inheritDoc + */ +ol.interaction.DragBox.prototype.handleDragEnd = + function(mapBrowserEvent) { + this.box_.setMap(null); + if (this.deltaX * this.deltaX + this.deltaY * this.deltaY >= + ol.DRAG_BOX_HYSTERESIS_PIXELS_SQUARED) { + this.onBoxEnd(mapBrowserEvent); + this.dispatchEvent(new ol.DragBoxEvent(ol.DragBoxEventType.BOXEND, + mapBrowserEvent.coordinate)); + } +}; + + +/** + * @inheritDoc + */ +ol.interaction.DragBox.prototype.handleDragStart = + function(mapBrowserEvent) { + var browserEvent = mapBrowserEvent.browserEvent; + if (browserEvent.isMouseActionButton() && this.condition_(mapBrowserEvent)) { + this.startPixel_ = mapBrowserEvent.pixel; + this.box_.setMap(mapBrowserEvent.map); + this.box_.setPixels(this.startPixel_, this.startPixel_); + this.dispatchEvent(new ol.DragBoxEvent(ol.DragBoxEventType.BOXSTART, + mapBrowserEvent.coordinate)); + return true; + } else { + return false; + } +}; diff --git a/float-no-zero/ol/ol/interaction/draginteraction.js b/float-no-zero/ol/ol/interaction/draginteraction.js new file mode 100644 index 0000000000..1ed4480374 --- /dev/null +++ b/float-no-zero/ol/ol/interaction/draginteraction.js @@ -0,0 +1,145 @@ +goog.provide('ol.interaction.Drag'); + +goog.require('goog.asserts'); +goog.require('goog.events.BrowserEvent'); +goog.require('goog.functions'); +goog.require('ol.Coordinate'); +goog.require('ol.MapBrowserEvent'); +goog.require('ol.MapBrowserEvent.EventType'); +goog.require('ol.interaction.Interaction'); + + + +/** + * Base class for interactions that drag the map. + * @constructor + * @extends {ol.interaction.Interaction} + */ +ol.interaction.Drag = function() { + + goog.base(this); + + /** + * @private + * @type {boolean} + */ + this.dragging_ = false; + + /** + * @type {number} + */ + this.startX = 0; + + /** + * @type {number} + */ + this.startY = 0; + + /** + * @type {number} + */ + this.deltaX = 0; + + /** + * @type {number} + */ + this.deltaY = 0; + + /** + * @type {ol.Coordinate} + */ + this.startCenter = null; + + /** + * @type {ol.Coordinate} + */ + this.startCoordinate = null; + +}; +goog.inherits(ol.interaction.Drag, ol.interaction.Interaction); + + +/** + * @return {boolean} Whether we're dragging. + */ +ol.interaction.Drag.prototype.getDragging = function() { + return this.dragging_; +}; + + +/** + * @param {ol.MapBrowserEvent} mapBrowserEvent Event. + * @protected + */ +ol.interaction.Drag.prototype.handleDrag = goog.nullFunction; + + +/** + * @param {ol.MapBrowserEvent} mapBrowserEvent Event. + * @protected + */ +ol.interaction.Drag.prototype.handleDragEnd = goog.nullFunction; + + +/** + * @param {ol.MapBrowserEvent} mapBrowserEvent Event. + * @protected + * @return {boolean} Capture dragging. + */ +ol.interaction.Drag.prototype.handleDragStart = goog.functions.FALSE; + + +/** + * @param {ol.MapBrowserEvent} mapBrowserEvent Event. + * @protected + */ +ol.interaction.Drag.prototype.handleDown = goog.nullFunction; + + +/** + * @inheritDoc + */ +ol.interaction.Drag.prototype.handleMapBrowserEvent = + function(mapBrowserEvent) { + var map = mapBrowserEvent.map; + if (!map.isDef()) { + return true; + } + var stopEvent = false; + var view = map.getView(); + var browserEvent = mapBrowserEvent.browserEvent; + if (mapBrowserEvent.type == ol.MapBrowserEvent.EventType.DOWN) { + goog.asserts.assertInstanceof(browserEvent, goog.events.BrowserEvent); + this.handleDown(mapBrowserEvent); + } + if (this.dragging_) { + if (mapBrowserEvent.type == ol.MapBrowserEvent.EventType.DRAG) { + goog.asserts.assertInstanceof(browserEvent, goog.events.BrowserEvent); + this.deltaX = browserEvent.clientX - this.startX; + this.deltaY = browserEvent.clientY - this.startY; + this.handleDrag(mapBrowserEvent); + } else if (mapBrowserEvent.type == ol.MapBrowserEvent.EventType.DRAGEND) { + goog.asserts.assertInstanceof(browserEvent, goog.events.BrowserEvent); + this.deltaX = browserEvent.clientX - this.startX; + this.deltaY = browserEvent.clientY - this.startY; + this.dragging_ = false; + this.handleDragEnd(mapBrowserEvent); + } + } else if (mapBrowserEvent.type == ol.MapBrowserEvent.EventType.DRAGSTART) { + goog.asserts.assertInstanceof(browserEvent, goog.events.BrowserEvent); + var view2DState = view.getView2D().getView2DState(); + this.startX = browserEvent.clientX; + this.startY = browserEvent.clientY; + this.deltaX = 0; + this.deltaY = 0; + this.startCenter = view2DState.center; + this.startCoordinate = mapBrowserEvent.coordinate; + var handled = this.handleDragStart(mapBrowserEvent); + if (handled) { + this.dragging_ = true; + mapBrowserEvent.preventDefault(); + stopEvent = true; + } + } + return !stopEvent; +}; diff --git a/float-no-zero/ol/ol/interaction/dragpan.exports b/float-no-zero/ol/ol/interaction/dragpan.exports new file mode 100644 index 0000000000..dbc71bf21a --- /dev/null +++ b/float-no-zero/ol/ol/interaction/dragpan.exports @@ -0,0 +1 @@ +@exportSymbol ol.interaction.DragPan diff --git a/float-no-zero/ol/ol/interaction/dragpaninteraction.js b/float-no-zero/ol/ol/interaction/dragpaninteraction.js new file mode 100644 index 0000000000..27c9521d6a --- /dev/null +++ b/float-no-zero/ol/ol/interaction/dragpaninteraction.js @@ -0,0 +1,146 @@ +// FIXME works for View2D only + +goog.provide('ol.interaction.DragPan'); + +goog.require('goog.asserts'); +goog.require('ol.Kinetic'); +goog.require('ol.PreRenderFunction'); +goog.require('ol.View2D'); +goog.require('ol.ViewHint'); +goog.require('ol.coordinate'); +goog.require('ol.events.ConditionType'); +goog.require('ol.events.condition'); +goog.require('ol.interaction.Drag'); + + + +/** + * Allows the user to pan the map by clickng and dragging. + * @constructor + * @extends {ol.interaction.Drag} + * @param {olx.interaction.DragPanOptions=} opt_options Options. + * @todo stability experimental + */ +ol.interaction.DragPan = function(opt_options) { + + goog.base(this); + + var options = goog.isDef(opt_options) ? opt_options : {}; + + /** + * @private + * @type {ol.events.ConditionType} + */ + this.condition_ = goog.isDef(options.condition) ? + options.condition : ol.events.condition.noModifierKeys; + + /** + * @private + * @type {ol.Kinetic|undefined} + */ + this.kinetic_ = options.kinetic; + + /** + * @private + * @type {?ol.PreRenderFunction} + */ + this.kineticPreRenderFn_ = null; + +}; +goog.inherits(ol.interaction.DragPan, ol.interaction.Drag); + + +/** + * @inheritDoc + */ +ol.interaction.DragPan.prototype.handleDrag = function(mapBrowserEvent) { + if (this.kinetic_) { + this.kinetic_.update( + mapBrowserEvent.browserEvent.clientX, + mapBrowserEvent.browserEvent.clientY); + } + var map = mapBrowserEvent.map; + // FIXME works for View2D only + var view = map.getView(); + goog.asserts.assertInstanceof(view, ol.View2D); + var view2DState = view.getView2DState(); + var newCenter = [ + -view2DState.resolution * this.deltaX, + view2DState.resolution * this.deltaY + ]; + ol.coordinate.rotate(newCenter, view2DState.rotation); + ol.coordinate.add(newCenter, this.startCenter); + newCenter = view.constrainCenter(newCenter); + map.render(); + view.setCenter(newCenter); +}; + + +/** + * @inheritDoc + */ +ol.interaction.DragPan.prototype.handleDragEnd = function(mapBrowserEvent) { + + // FIXME works for View2D only + + var map = mapBrowserEvent.map; + var view = map.getView(); + view.setHint(ol.ViewHint.INTERACTING, -1); + + if (this.kinetic_ && this.kinetic_.end()) { + var view2D = view.getView2D(); + goog.asserts.assertInstanceof(view2D, ol.View2D); + var view2DState = view2D.getView2DState(); + var distance = this.kinetic_.getDistance(); + var angle = this.kinetic_.getAngle(); + this.kineticPreRenderFn_ = this.kinetic_.pan(view2DState.center); + map.beforeRender(this.kineticPreRenderFn_); + + var centerpx = map.getPixelFromCoordinate(view2DState.center); + var dest = map.getCoordinateFromPixel([ + centerpx[0] - distance * Math.cos(angle), + centerpx[1] - distance * Math.sin(angle) + ]); + dest = view2D.constrainCenter(dest); + view2D.setCenter(dest); + } + map.render(); +}; + + +/** + * @inheritDoc + */ +ol.interaction.DragPan.prototype.handleDragStart = function(mapBrowserEvent) { + var browserEvent = mapBrowserEvent.browserEvent; + if (browserEvent.isMouseActionButton() && this.condition_(mapBrowserEvent)) { + if (this.kinetic_) { + this.kinetic_.begin(); + this.kinetic_.update(browserEvent.clientX, browserEvent.clientY); + } + var map = mapBrowserEvent.map; + map.getView().setHint(ol.ViewHint.INTERACTING, 1); + map.render(); + return true; + } else { + return false; + } +}; + + +/** + * @inheritDoc + */ +ol.interaction.DragPan.prototype.handleDown = function(mapBrowserEvent) { + var map = mapBrowserEvent.map; + // FIXME works for View2D only + var view = map.getView(); + goog.asserts.assertInstanceof(view, ol.View2D); + goog.asserts.assert(!goog.isNull(mapBrowserEvent.frameState)); + if (!goog.isNull(this.kineticPreRenderFn_) && + map.removePreRenderFunction(this.kineticPreRenderFn_)) { + map.render(); + view.setCenter(mapBrowserEvent.frameState.view2DState.center); + this.kineticPreRenderFn_ = null; + } +}; diff --git a/float-no-zero/ol/ol/interaction/dragrotate.exports b/float-no-zero/ol/ol/interaction/dragrotate.exports new file mode 100644 index 0000000000..b17241c644 --- /dev/null +++ b/float-no-zero/ol/ol/interaction/dragrotate.exports @@ -0,0 +1 @@ +@exportSymbol ol.interaction.DragRotate diff --git a/float-no-zero/ol/ol/interaction/dragrotateandzoom.exports b/float-no-zero/ol/ol/interaction/dragrotateandzoom.exports new file mode 100644 index 0000000000..f39bc1cf2a --- /dev/null +++ b/float-no-zero/ol/ol/interaction/dragrotateandzoom.exports @@ -0,0 +1 @@ +@exportSymbol ol.interaction.DragRotateAndZoom diff --git a/float-no-zero/ol/ol/interaction/dragrotateandzoominteraction.js b/float-no-zero/ol/ol/interaction/dragrotateandzoominteraction.js new file mode 100644 index 0000000000..0d5f095365 --- /dev/null +++ b/float-no-zero/ol/ol/interaction/dragrotateandzoominteraction.js @@ -0,0 +1,135 @@ +// FIXME works for View2D only + +goog.provide('ol.interaction.DragRotateAndZoom'); + +goog.require('goog.asserts'); +goog.require('goog.math.Vec2'); +goog.require('ol.ViewHint'); +goog.require('ol.events.ConditionType'); +goog.require('ol.events.condition'); +goog.require('ol.interaction.Drag'); +goog.require('ol.interaction.Interaction'); + + +/** + * @define {number} Animation duration. + */ +ol.interaction.DRAGROTATEANDZOOM_ANIMATION_DURATION = 400; + + + +/** + * Allows the user to zoom and rotate the map by clicking and dragging + * on the map. By default, this interaction is limited to when the shift + * key is held down. + * + * This interaction is not included in the default interactions. + * @constructor + * @extends {ol.interaction.Drag} + * @param {olx.interaction.DragRotateAndZoomOptions=} opt_options Options. + * @todo stability experimental + */ +ol.interaction.DragRotateAndZoom = function(opt_options) { + + var options = goog.isDef(opt_options) ? opt_options : {}; + + goog.base(this); + + /** + * @private + * @type {ol.events.ConditionType} + */ + this.condition_ = goog.isDef(options.condition) ? + options.condition : ol.events.condition.shiftKeyOnly; + + /** + * @private + * @type {number|undefined} + */ + this.lastAngle_ = undefined; + + /** + * @private + * @type {number|undefined} + */ + this.lastMagnitude_ = undefined; + + /** + * @private + * @type {number} + */ + this.lastScaleDelta_ = 0; + +}; +goog.inherits(ol.interaction.DragRotateAndZoom, ol.interaction.Drag); + + +/** + * @inheritDoc + */ +ol.interaction.DragRotateAndZoom.prototype.handleDrag = + function(mapBrowserEvent) { + var map = mapBrowserEvent.map; + var size = map.getSize(); + var offset = mapBrowserEvent.pixel; + var delta = new goog.math.Vec2( + offset[0] - size[0] / 2, + size[1] / 2 - offset[1]); + var theta = Math.atan2(delta.y, delta.x); + var magnitude = delta.magnitude(); + // FIXME works for View2D only + var view = map.getView().getView2D(); + var view2DState = view.getView2DState(); + map.render(); + if (goog.isDef(this.lastAngle_)) { + var angleDelta = theta - this.lastAngle_; + ol.interaction.Interaction.rotateWithoutConstraints( + map, view, view2DState.rotation - angleDelta); + } + this.lastAngle_ = theta; + if (goog.isDef(this.lastMagnitude_)) { + var resolution = this.lastMagnitude_ * (view2DState.resolution / magnitude); + ol.interaction.Interaction.zoomWithoutConstraints(map, view, resolution); + } + if (goog.isDef(this.lastMagnitude_)) { + this.lastScaleDelta_ = this.lastMagnitude_ / magnitude; + } + this.lastMagnitude_ = magnitude; +}; + + +/** + * @inheritDoc + */ +ol.interaction.DragRotateAndZoom.prototype.handleDragEnd = + function(mapBrowserEvent) { + var map = mapBrowserEvent.map; + // FIXME works for View2D only + var view = map.getView(); + view.setHint(ol.ViewHint.INTERACTING, -1); + var view2D = view.getView2D(); + var view2DState = view2D.getView2DState(); + var direction = this.lastScaleDelta_ - 1; + ol.interaction.Interaction.rotate(map, view2D, view2DState.rotation); + ol.interaction.Interaction.zoom(map, view2D, view2DState.resolution, + undefined, ol.interaction.DRAGROTATEANDZOOM_ANIMATION_DURATION, + direction); + this.lastScaleDelta_ = 0; + return true; +}; + + +/** + * @inheritDoc + */ +ol.interaction.DragRotateAndZoom.prototype.handleDragStart = + function(mapBrowserEvent) { + if (this.condition_(mapBrowserEvent)) { + mapBrowserEvent.map.getView().setHint(ol.ViewHint.INTERACTING, 1); + this.lastAngle_ = undefined; + this.lastMagnitude_ = undefined; + return true; + } else { + return false; + } +}; diff --git a/float-no-zero/ol/ol/interaction/dragrotateinteraction.js b/float-no-zero/ol/ol/interaction/dragrotateinteraction.js new file mode 100644 index 0000000000..e82c72a2ce --- /dev/null +++ b/float-no-zero/ol/ol/interaction/dragrotateinteraction.js @@ -0,0 +1,101 @@ +goog.provide('ol.interaction.DragRotate'); + +goog.require('goog.asserts'); +goog.require('ol.ViewHint'); +goog.require('ol.events.ConditionType'); +goog.require('ol.events.condition'); +goog.require('ol.interaction.Drag'); +goog.require('ol.interaction.Interaction'); + + +/** + * @define {number} Animation duration. + */ +ol.interaction.DRAGROTATE_ANIMATION_DURATION = 250; + + + +/** + * Allows the user to rotate the map by clicking and dragging on the map, + * normally combined with an {@link ol.events.condition} that limits + * it to when the alt and shift keys are held down. + * @constructor + * @extends {ol.interaction.Drag} + * @param {olx.interaction.DragRotateOptions=} opt_options Options. + */ +ol.interaction.DragRotate = function(opt_options) { + + var options = goog.isDef(opt_options) ? opt_options : {}; + + goog.base(this); + + /** + * @private + * @type {ol.events.ConditionType} + */ + this.condition_ = goog.isDef(options.condition) ? + options.condition : ol.events.condition.altShiftKeysOnly; + + /** + * @private + * @type {number|undefined} + */ + this.lastAngle_ = undefined; + +}; +goog.inherits(ol.interaction.DragRotate, ol.interaction.Drag); + + +/** + * @inheritDoc + */ +ol.interaction.DragRotate.prototype.handleDrag = function(mapBrowserEvent) { + var map = mapBrowserEvent.map; + var size = map.getSize(); + var offset = mapBrowserEvent.pixel; + var theta = + Math.atan2(size[1] / 2 - offset[1], offset[0] - size[0] / 2); + if (goog.isDef(this.lastAngle_)) { + var delta = theta - this.lastAngle_; + // FIXME works for View2D only + var view = map.getView().getView2D(); + var view2DState = view.getView2DState(); + map.render(); + ol.interaction.Interaction.rotateWithoutConstraints( + map, view, view2DState.rotation - delta); + } + this.lastAngle_ = theta; +}; + + +/** + * @inheritDoc + */ +ol.interaction.DragRotate.prototype.handleDragEnd = function(mapBrowserEvent) { + var map = mapBrowserEvent.map; + // FIXME works for View2D only + var view = map.getView(); + view.setHint(ol.ViewHint.INTERACTING, -1); + var view2D = view.getView2D(); + var view2DState = view2D.getView2DState(); + ol.interaction.Interaction.rotate(map, view2D, view2DState.rotation, + undefined, ol.interaction.DRAGROTATE_ANIMATION_DURATION); +}; + + +/** + * @inheritDoc + */ +ol.interaction.DragRotate.prototype.handleDragStart = + function(mapBrowserEvent) { + var browserEvent = mapBrowserEvent.browserEvent; + if (browserEvent.isMouseActionButton() && this.condition_(mapBrowserEvent)) { + var map = mapBrowserEvent.map; + map.getView().setHint(ol.ViewHint.INTERACTING, 1); + map.render(); + this.lastAngle_ = undefined; + return true; + } else { + return false; + } +}; diff --git a/float-no-zero/ol/ol/interaction/dragzoominteraction.exports b/float-no-zero/ol/ol/interaction/dragzoominteraction.exports new file mode 100644 index 0000000000..204afabe7e --- /dev/null +++ b/float-no-zero/ol/ol/interaction/dragzoominteraction.exports @@ -0,0 +1 @@ +@exportSymbol ol.interaction.DragZoom diff --git a/float-no-zero/ol/ol/interaction/dragzoominteraction.js b/float-no-zero/ol/ol/interaction/dragzoominteraction.js new file mode 100644 index 0000000000..3955158a15 --- /dev/null +++ b/float-no-zero/ol/ol/interaction/dragzoominteraction.js @@ -0,0 +1,66 @@ +goog.provide('ol.interaction.DragZoom'); + +goog.require('goog.asserts'); +goog.require('ol.events.condition'); +goog.require('ol.extent'); +goog.require('ol.interaction.DragBox'); +goog.require('ol.interaction.Interaction'); +goog.require('ol.style.Stroke'); +goog.require('ol.style.Style'); + + +/** + * @define {number} Animation duration. + */ +ol.interaction.DRAGZOOM_ANIMATION_DURATION = 200; + + + +/** + * Allows the user to zoom the map by clicking and dragging on the map, + * normally combined with an {@link ol.events.condition} that limits + * it to when the shift key is held down. + * @constructor + * @extends {ol.interaction.DragBox} + * @param {olx.interaction.DragZoomOptions=} opt_options Options. + * @todo stability experimental + */ +ol.interaction.DragZoom = function(opt_options) { + var options = goog.isDef(opt_options) ? opt_options : {}; + + var condition = goog.isDef(options.condition) ? + options.condition : ol.events.condition.shiftKeyOnly; + + /** + * @private + * @type {ol.style.Style} + */ + var style = goog.isDef(options.style) ? + options.style : new ol.style.Style({ + stroke: new ol.style.Stroke({ + color: [0, 0, 255, 1] + }) + }); + + goog.base(this, { + condition: condition, + style: style + }); + +}; +goog.inherits(ol.interaction.DragZoom, ol.interaction.DragBox); + + +/** + * @inheritDoc + */ +ol.interaction.DragZoom.prototype.onBoxEnd = function() { + // FIXME works for View2D only + var map = this.getMap(); + var view = map.getView().getView2D(); + var extent = this.getGeometry().getExtent(); + var center = ol.extent.getCenter(extent); + ol.interaction.Interaction.zoom(map, view, + view.getResolutionForExtent(extent, map.getSize()), + center, ol.interaction.DRAGZOOM_ANIMATION_DURATION); +}; diff --git a/float-no-zero/ol/ol/interaction/drawinteraction.exports b/float-no-zero/ol/ol/interaction/drawinteraction.exports new file mode 100644 index 0000000000..890ae0f515 --- /dev/null +++ b/float-no-zero/ol/ol/interaction/drawinteraction.exports @@ -0,0 +1 @@ +@exportSymbol ol.interaction.Draw diff --git a/float-no-zero/ol/ol/interaction/drawinteraction.js b/float-no-zero/ol/ol/interaction/drawinteraction.js new file mode 100644 index 0000000000..5c972ac8ae --- /dev/null +++ b/float-no-zero/ol/ol/interaction/drawinteraction.js @@ -0,0 +1,570 @@ +goog.provide('ol.DrawEvent'); +goog.provide('ol.interaction.Draw'); + +goog.require('goog.asserts'); +goog.require('goog.events.Event'); +goog.require('ol.Collection'); +goog.require('ol.Coordinate'); +goog.require('ol.Feature'); +goog.require('ol.FeatureOverlay'); +goog.require('ol.Map'); +goog.require('ol.MapBrowserEvent'); +goog.require('ol.MapBrowserEvent.EventType'); +goog.require('ol.geom.GeometryType'); +goog.require('ol.geom.LineString'); +goog.require('ol.geom.MultiLineString'); +goog.require('ol.geom.MultiPoint'); +goog.require('ol.geom.MultiPolygon'); +goog.require('ol.geom.Point'); +goog.require('ol.geom.Polygon'); +goog.require('ol.interaction.Interaction'); +goog.require('ol.source.Vector'); +goog.require('ol.style.Circle'); +goog.require('ol.style.Fill'); +goog.require('ol.style.Stroke'); +goog.require('ol.style.Style'); + + +/** + * @enum {string} + */ +ol.DrawEventType = { + DRAWSTART: 'drawstart', + DRAWEND: 'drawend' +}; + + + +/** + * @constructor + * @extends {goog.events.Event} + * @implements {oli.DrawEvent} + * @param {ol.DrawEventType} type Type. + * @param {ol.Feature} feature The feature drawn. + */ +ol.DrawEvent = function(type, feature) { + + goog.base(this, type); + + /** + * @type {ol.Feature} + */ + this.feature = feature; + +}; +goog.inherits(ol.DrawEvent, goog.events.Event); + + + +/** + * Interaction that allows drawing geometries + * @constructor + * @extends {ol.interaction.Interaction} + * @param {olx.interaction.DrawOptions} options Options. + * @todo stability experimental + */ +ol.interaction.Draw = function(options) { + + goog.base(this); + + /** + * Target source for drawn features. + * @type {ol.source.Vector} + * @private + */ + this.source_ = goog.isDef(options.source) ? options.source : null; + + /** + * Target collection for drawn features. + * @type {ol.Collection} + * @private + */ + this.features_ = goog.isDef(options.features) ? options.features : null; + + /** + * Pixel distance for snapping. + * @type {number} + * @private + */ + this.snapTolerance_ = goog.isDef(options.snapTolerance) ? + options.snapTolerance : 12; + + /** + * The number of points that must be drawn before a polygon ring can be + * finished. The default is 3. + * @type {number} + * @private + */ + this.minPointsPerRing_ = goog.isDef(options.minPointsPerRing) ? + options.minPointsPerRing : 3; + + /** + * Geometry type. + * @type {ol.geom.GeometryType} + * @private + */ + this.type_ = options.type; + + /** + * Drawing mode (derived from geometry type. + * @type {ol.interaction.DrawMode} + * @private + */ + this.mode_ = ol.interaction.Draw.getMode_(this.type_); + + /** + * Finish coordinate for the feature (first point for polygons, last point for + * linestrings). + * @type {ol.Coordinate} + * @private + */ + this.finishCoordinate_ = null; + + /** + * Sketch feature. + * @type {ol.Feature} + * @private + */ + this.sketchFeature_ = null; + + /** + * Sketch point. + * @type {ol.Feature} + * @private + */ + this.sketchPoint_ = null; + + /** + * Sketch line. Used when drawing polygon. + * @type {ol.Feature} + * @private + */ + this.sketchLine_ = null; + + /** + * Sketch polygon. Used when drawing polygon. + * @type {ol.geom.RawPolygon} + * @private + */ + this.sketchRawPolygon_ = null; + + /** + * Squared tolerance for handling click events. If the squared distance + * between a down and click event is greater than this tolerance, click events + * will not be handled. + * @type {number} + * @private + */ + this.squaredClickTolerance_ = 4; + + /** + * Draw overlay where are sketch features are drawn. + * @type {ol.FeatureOverlay} + * @private + */ + this.overlay_ = new ol.FeatureOverlay({ + style: goog.isDef(options.style) ? + options.style : ol.interaction.Draw.getDefaultStyleFunction() + }); + +}; +goog.inherits(ol.interaction.Draw, ol.interaction.Interaction); + + +/** + * @return {ol.feature.StyleFunction} Styles. + */ +ol.interaction.Draw.getDefaultStyleFunction = function() { + /** @type {Object.>} */ + var styles = {}; + styles[ol.geom.GeometryType.POLYGON] = [ + new ol.style.Style({ + fill: new ol.style.Fill({ + color: [255, 255, 255, 0.5] + }) + }) + ]; + styles[ol.geom.GeometryType.MULTI_POLYGON] = + styles[ol.geom.GeometryType.POLYGON]; + + styles[ol.geom.GeometryType.LINE_STRING] = [ + new ol.style.Style({ + stroke: new ol.style.Stroke({ + color: [255, 255, 255, 1], + width: 5 + }) + }), + new ol.style.Style({ + stroke: new ol.style.Stroke({ + color: [0, 153, 255, 1], + width: 3 + }) + }) + ]; + styles[ol.geom.GeometryType.MULTI_LINE_STRING] = + styles[ol.geom.GeometryType.LINE_STRING]; + + styles[ol.geom.GeometryType.POINT] = [ + new ol.style.Style({ + image: new ol.style.Circle({ + radius: 7, + fill: new ol.style.Fill({ + color: [0, 153, 255, 1] + }), + stroke: new ol.style.Stroke({ + color: [255, 255, 255, 0.75], + width: 1.5 + }) + }), + zIndex: 100000 + }) + ]; + styles[ol.geom.GeometryType.MULTI_POINT] = + styles[ol.geom.GeometryType.POINT]; + + return function(feature, resolution) { + return styles[feature.getGeometry().getType()]; + }; +}; + + +/** + * @inheritDoc + */ +ol.interaction.Draw.prototype.setMap = function(map) { + if (goog.isNull(map)) { + // removing from a map, clean up + this.abortDrawing_(); + } + this.overlay_.setMap(map); + goog.base(this, 'setMap', map); +}; + + +/** + * @inheritDoc + */ +ol.interaction.Draw.prototype.handleMapBrowserEvent = function(event) { + var map = event.map; + if (!map.isDef()) { + return true; + } + var pass = true; + if (event.type === ol.MapBrowserEvent.EventType.CLICK) { + pass = this.handleClick_(event); + } else if (event.type === ol.MapBrowserEvent.EventType.MOUSEMOVE) { + pass = this.handleMove_(event); + } else if (event.type === ol.MapBrowserEvent.EventType.DBLCLICK) { + pass = false; + } + return pass; +}; + + +/** + * Handle click events. + * @param {ol.MapBrowserEvent} event A click event. + * @return {boolean} Pass the event to other interactions. + * @private + */ +ol.interaction.Draw.prototype.handleClick_ = function(event) { + var downPx = event.map.getEventPixel(event.target.getDown()); + var clickPx = event.pixel; + var dx = downPx[0] - clickPx[0]; + var dy = downPx[1] - clickPx[1]; + var squaredDistance = dx * dx + dy * dy; + var pass = true; + if (squaredDistance <= this.squaredClickTolerance_) { + if (goog.isNull(this.finishCoordinate_)) { + this.startDrawing_(event); + } else if (this.mode_ === ol.interaction.DrawMode.POINT || + this.atFinish_(event)) { + this.finishDrawing_(event); + } else { + this.addToDrawing_(event); + } + pass = false; + } + return pass; +}; + + +/** + * Handle mousemove events. + * @param {ol.MapBrowserEvent} event A mousemove event. + * @return {boolean} Pass the event to other interactions. + * @private + */ +ol.interaction.Draw.prototype.handleMove_ = function(event) { + if (this.mode_ === ol.interaction.DrawMode.POINT && + goog.isNull(this.finishCoordinate_)) { + this.startDrawing_(event); + } else if (!goog.isNull(this.finishCoordinate_)) { + this.modifyDrawing_(event); + } + return true; +}; + + +/** + * Determine if an event is within the snapping tolerance of the start coord. + * @param {ol.MapBrowserEvent} event Event. + * @return {boolean} The event is within the snapping tolerance of the start. + * @private + */ +ol.interaction.Draw.prototype.atFinish_ = function(event) { + var at = false; + if (!goog.isNull(this.sketchFeature_)) { + var geometry = this.sketchFeature_.getGeometry(); + var potentiallyDone = false; + var potentiallyFinishCoordinates = [this.finishCoordinate_]; + if (this.mode_ === ol.interaction.DrawMode.LINE_STRING) { + goog.asserts.assertInstanceof(geometry, ol.geom.LineString); + potentiallyDone = geometry.getCoordinates().length > 2; + } else if (this.mode_ === ol.interaction.DrawMode.POLYGON) { + goog.asserts.assertInstanceof(geometry, ol.geom.Polygon); + potentiallyDone = geometry.getCoordinates()[0].length > + this.minPointsPerRing_; + potentiallyFinishCoordinates = [this.sketchRawPolygon_[0][0], + this.sketchRawPolygon_[0][this.sketchRawPolygon_[0].length - 2]]; + } + if (potentiallyDone) { + var map = event.map; + for (var i = 0, ii = potentiallyFinishCoordinates.length; i < ii; i++) { + var finishCoordinate = potentiallyFinishCoordinates[i]; + var finishPixel = map.getPixelFromCoordinate(finishCoordinate); + var pixel = event.pixel; + var dx = pixel[0] - finishPixel[0]; + var dy = pixel[1] - finishPixel[1]; + at = Math.sqrt(dx * dx + dy * dy) <= this.snapTolerance_; + if (at) { + this.finishCoordinate_ = finishCoordinate; + break; + } + } + } + } + return at; +}; + + +/** + * Start the drawing. + * @param {ol.MapBrowserEvent} event Event. + * @private + */ +ol.interaction.Draw.prototype.startDrawing_ = function(event) { + var start = event.coordinate; + this.finishCoordinate_ = start; + var geometry; + if (this.mode_ === ol.interaction.DrawMode.POINT) { + geometry = new ol.geom.Point(start.slice()); + } else { + this.sketchPoint_ = new ol.Feature(new ol.geom.Point(start.slice())); + + if (this.mode_ === ol.interaction.DrawMode.LINE_STRING) { + geometry = new ol.geom.LineString([start.slice(), start.slice()]); + } else if (this.mode_ === ol.interaction.DrawMode.POLYGON) { + this.sketchLine_ = new ol.Feature(new ol.geom.LineString([start.slice(), + start.slice()])); + this.sketchRawPolygon_ = [[start.slice(), start.slice()]]; + geometry = new ol.geom.Polygon(this.sketchRawPolygon_); + } + } + goog.asserts.assert(goog.isDef(geometry)); + this.sketchFeature_ = new ol.Feature(geometry); + this.updateSketchFeatures_(); + this.dispatchEvent(new ol.DrawEvent(ol.DrawEventType.DRAWSTART, + this.sketchFeature_)); +}; + + +/** + * Modify the drawing. + * @param {ol.MapBrowserEvent} event Event. + * @private + */ +ol.interaction.Draw.prototype.modifyDrawing_ = function(event) { + var coordinate = event.coordinate; + var geometry = this.sketchFeature_.getGeometry(); + var coordinates, last; + if (this.mode_ === ol.interaction.DrawMode.POINT) { + goog.asserts.assertInstanceof(geometry, ol.geom.Point); + last = geometry.getCoordinates(); + last[0] = coordinate[0]; + last[1] = coordinate[1]; + geometry.setCoordinates(last); + } else { + if (this.mode_ === ol.interaction.DrawMode.LINE_STRING) { + goog.asserts.assertInstanceof(geometry, ol.geom.LineString); + coordinates = geometry.getCoordinates(); + } else if (this.mode_ === ol.interaction.DrawMode.POLYGON) { + goog.asserts.assertInstanceof(geometry, ol.geom.Polygon); + coordinates = this.sketchRawPolygon_[0]; + } + if (this.atFinish_(event)) { + // snap to finish + coordinate = this.finishCoordinate_.slice(); + } + var sketchPointGeom = this.sketchPoint_.getGeometry(); + goog.asserts.assertInstanceof(sketchPointGeom, ol.geom.Point); + sketchPointGeom.setCoordinates(coordinate); + last = coordinates[coordinates.length - 1]; + last[0] = coordinate[0]; + last[1] = coordinate[1]; + if (this.mode_ === ol.interaction.DrawMode.LINE_STRING) { + goog.asserts.assertInstanceof(geometry, ol.geom.LineString); + geometry.setCoordinates(coordinates); + } else if (this.mode_ === ol.interaction.DrawMode.POLYGON) { + var sketchLineGeom = this.sketchLine_.getGeometry(); + goog.asserts.assertInstanceof(sketchLineGeom, ol.geom.LineString); + sketchLineGeom.setCoordinates(coordinates); + goog.asserts.assertInstanceof(geometry, ol.geom.Polygon); + geometry.setCoordinates(this.sketchRawPolygon_); + } + } + this.updateSketchFeatures_(); +}; + + +/** + * Add a new coordinate to the drawing. + * @param {ol.MapBrowserEvent} event Event. + * @private + */ +ol.interaction.Draw.prototype.addToDrawing_ = function(event) { + var coordinate = event.coordinate; + var geometry = this.sketchFeature_.getGeometry(); + var coordinates, last; + if (this.mode_ === ol.interaction.DrawMode.LINE_STRING) { + this.finishCoordinate_ = coordinate.slice(); + goog.asserts.assertInstanceof(geometry, ol.geom.LineString); + coordinates = geometry.getCoordinates(); + coordinates.push(coordinate.slice()); + geometry.setCoordinates(coordinates); + } else if (this.mode_ === ol.interaction.DrawMode.POLYGON) { + this.sketchRawPolygon_[0].push(coordinate.slice()); + goog.asserts.assertInstanceof(geometry, ol.geom.Polygon); + geometry.setCoordinates(this.sketchRawPolygon_); + } + this.updateSketchFeatures_(); +}; + + +/** + * Stop drawing and add the sketch feature to the target layer. + * @param {ol.MapBrowserEvent} event Event. + * @private + */ +ol.interaction.Draw.prototype.finishDrawing_ = function(event) { + var sketchFeature = this.abortDrawing_(); + goog.asserts.assert(!goog.isNull(sketchFeature)); + var coordinates; + var geometry = sketchFeature.getGeometry(); + if (this.mode_ === ol.interaction.DrawMode.POINT) { + goog.asserts.assertInstanceof(geometry, ol.geom.Point); + coordinates = geometry.getCoordinates(); + } else if (this.mode_ === ol.interaction.DrawMode.LINE_STRING) { + goog.asserts.assertInstanceof(geometry, ol.geom.LineString); + coordinates = geometry.getCoordinates(); + // remove the redundant last point + coordinates.pop(); + geometry.setCoordinates(coordinates); + } else if (this.mode_ === ol.interaction.DrawMode.POLYGON) { + goog.asserts.assertInstanceof(geometry, ol.geom.Polygon); + // When we finish drawing a polygon on the last point, + // the last coordinate is duplicated as for LineString + // we force the replacement by the first point + this.sketchRawPolygon_[0].pop(); + this.sketchRawPolygon_[0].push(this.sketchRawPolygon_[0][0]); + geometry.setCoordinates(this.sketchRawPolygon_); + coordinates = geometry.getCoordinates(); + } + + // cast multi-part geometries + if (this.type_ === ol.geom.GeometryType.MULTI_POINT) { + sketchFeature.setGeometry(new ol.geom.MultiPoint([coordinates])); + } else if (this.type_ === ol.geom.GeometryType.MULTI_LINE_STRING) { + sketchFeature.setGeometry(new ol.geom.MultiLineString([coordinates])); + } else if (this.type_ === ol.geom.GeometryType.MULTI_POLYGON) { + sketchFeature.setGeometry(new ol.geom.MultiPolygon([coordinates])); + } + + if (!goog.isNull(this.features_)) { + this.features_.push(sketchFeature); + } + if (!goog.isNull(this.source_)) { + this.source_.addFeature(sketchFeature); + } + this.dispatchEvent(new ol.DrawEvent(ol.DrawEventType.DRAWEND, sketchFeature)); +}; + + +/** + * Stop drawing without adding the sketch feature to the target layer. + * @return {ol.Feature} The sketch feature (or null if none). + * @private + */ +ol.interaction.Draw.prototype.abortDrawing_ = function() { + this.finishCoordinate_ = null; + var sketchFeature = this.sketchFeature_; + if (!goog.isNull(sketchFeature)) { + this.sketchFeature_ = null; + this.sketchPoint_ = null; + this.sketchLine_ = null; + this.overlay_.getFeatures().clear(); + } + return sketchFeature; +}; + + +/** + * Redraw the skecth features. + * @private + */ +ol.interaction.Draw.prototype.updateSketchFeatures_ = function() { + var sketchFeatures = [this.sketchFeature_]; + if (!goog.isNull(this.sketchLine_)) { + sketchFeatures.push(this.sketchLine_); + } + if (!goog.isNull(this.sketchPoint_)) { + sketchFeatures.push(this.sketchPoint_); + } + this.overlay_.setFeatures(new ol.Collection(sketchFeatures)); +}; + + +/** + * Get the drawing mode. The mode for mult-part geometries is the same as for + * their single-part cousins. + * @param {ol.geom.GeometryType} type Geometry type. + * @return {ol.interaction.DrawMode} Drawing mode. + * @private + */ +ol.interaction.Draw.getMode_ = function(type) { + var mode; + if (type === ol.geom.GeometryType.POINT || + type === ol.geom.GeometryType.MULTI_POINT) { + mode = ol.interaction.DrawMode.POINT; + } else if (type === ol.geom.GeometryType.LINE_STRING || + type === ol.geom.GeometryType.MULTI_LINE_STRING) { + mode = ol.interaction.DrawMode.LINE_STRING; + } else if (type === ol.geom.GeometryType.POLYGON || + type === ol.geom.GeometryType.MULTI_POLYGON) { + mode = ol.interaction.DrawMode.POLYGON; + } + goog.asserts.assert(goog.isDef(mode)); + return mode; +}; + + +/** + * Draw mode. This collapses multi-part geometry types with their single-part + * cousins. + * @enum {string} + */ +ol.interaction.DrawMode = { + POINT: 'Point', + LINE_STRING: 'LineString', + POLYGON: 'Polygon' +}; diff --git a/float-no-zero/ol/ol/interaction/interaction.js b/float-no-zero/ol/ol/interaction/interaction.js new file mode 100644 index 0000000000..dbc57deee1 --- /dev/null +++ b/float-no-zero/ol/ol/interaction/interaction.js @@ -0,0 +1,216 @@ +// FIXME factor out key precondition (shift et. al) + +goog.provide('ol.interaction.Interaction'); + +goog.require('goog.asserts'); +goog.require('ol.MapBrowserEvent'); +goog.require('ol.Observable'); +goog.require('ol.View2D'); +goog.require('ol.animation'); +goog.require('ol.easing'); + + + +/** + * @constructor + * @extends {ol.Observable} + */ +ol.interaction.Interaction = function() { + goog.base(this); + + /** + * @private + * @type {ol.Map} + */ + this.map_ = null; + +}; +goog.inherits(ol.interaction.Interaction, ol.Observable); + + +/** + * Get the map associated with this interaction. + * @return {ol.Map} Map. + */ +ol.interaction.Interaction.prototype.getMap = function() { + return this.map_; +}; + + +/** + * @param {ol.MapBrowserEvent} mapBrowserEvent Map browser event. + * @return {boolean} Whether the map browser event should continue + * through the chain of interactions. false means stop, true + * means continue. + */ +ol.interaction.Interaction.prototype.handleMapBrowserEvent = + goog.abstractMethod; + + +/** + * Remove the interaction from its current map and attach it to the new map. + * Subclasses may set up event handlers to get notified about changes to + * the map here. + * @param {ol.Map} map Map. + */ +ol.interaction.Interaction.prototype.setMap = function(map) { + this.map_ = map; +}; + + +/** + * @param {ol.Map} map Map. + * @param {ol.IView2D} view View. + * @param {ol.Coordinate} delta Delta. + * @param {number=} opt_duration Duration. + */ +ol.interaction.Interaction.pan = function( + map, view, delta, opt_duration) { + goog.asserts.assertInstanceof(view, ol.View2D); + var currentCenter = view.getCenter(); + if (goog.isDef(currentCenter)) { + if (goog.isDef(opt_duration) && opt_duration > 0) { + map.beforeRender(ol.animation.pan({ + source: currentCenter, + duration: opt_duration, + easing: ol.easing.linear + })); + } + var center = view.constrainCenter( + [currentCenter[0] + delta[0], currentCenter[1] + delta[1]]); + view.setCenter(center); + } +}; + + +/** + * @param {ol.Map} map Map. + * @param {ol.IView2D} view View. + * @param {number|undefined} rotation Rotation. + * @param {ol.Coordinate=} opt_anchor Anchor coordinate. + * @param {number=} opt_duration Duration. + */ +ol.interaction.Interaction.rotate = + function(map, view, rotation, opt_anchor, opt_duration) { + goog.asserts.assertInstanceof(view, ol.View2D); + rotation = view.constrainRotation(rotation, 0); + ol.interaction.Interaction.rotateWithoutConstraints( + map, view, rotation, opt_anchor, opt_duration); +}; + + +/** + * @param {ol.Map} map Map. + * @param {ol.IView2D} view View. + * @param {number|undefined} rotation Rotation. + * @param {ol.Coordinate=} opt_anchor Anchor coordinate. + * @param {number=} opt_duration Duration. + */ +ol.interaction.Interaction.rotateWithoutConstraints = + function(map, view, rotation, opt_anchor, opt_duration) { + goog.asserts.assertInstanceof(view, ol.View2D); + if (goog.isDefAndNotNull(rotation)) { + var currentRotation = view.getRotation(); + var currentCenter = view.getCenter(); + if (goog.isDef(currentRotation) && goog.isDef(currentCenter) && + goog.isDef(opt_duration) && opt_duration > 0) { + map.beforeRender(ol.animation.rotate({ + rotation: currentRotation, + duration: opt_duration, + easing: ol.easing.easeOut + })); + if (goog.isDef(opt_anchor)) { + map.beforeRender(ol.animation.pan({ + source: currentCenter, + duration: opt_duration, + easing: ol.easing.easeOut + })); + } + } + goog.asserts.assertInstanceof(view, ol.View2D); + if (goog.isDefAndNotNull(opt_anchor)) { + var center = view.calculateCenterRotate(rotation, opt_anchor); + view.setCenter(center); + } + view.setRotation(rotation); + } +}; + + +/** + * @param {ol.Map} map Map. + * @param {ol.IView2D} view View. + * @param {number|undefined} resolution Resolution to go to. + * @param {ol.Coordinate=} opt_anchor Anchor coordinate. + * @param {number=} opt_duration Duration. + * @param {number=} opt_direction Zooming direction; > 0 indicates + * zooming out, in which case the constraints system will select + * the largest nearest resolution; < 0 indicates zooming in, in + * which case the constraints system will select the smallest + * nearest resolution; == 0 indicates that the zooming direction + * is unknown/not relevant, in which case the constraints system + * will select the nearest resolution. If not defined 0 is + * assumed. + */ +ol.interaction.Interaction.zoom = + function(map, view, resolution, opt_anchor, opt_duration, opt_direction) { + goog.asserts.assertInstanceof(view, ol.View2D); + resolution = view.constrainResolution(resolution, 0, opt_direction); + ol.interaction.Interaction.zoomWithoutConstraints( + map, view, resolution, opt_anchor, opt_duration); +}; + + +/** + * @param {ol.Map} map Map. + * @param {ol.IView2D} view View. + * @param {number} delta Delta from previous zoom level. + * @param {ol.Coordinate=} opt_anchor Anchor coordinate. + * @param {number=} opt_duration Duration. + */ +ol.interaction.Interaction.zoomByDelta = + function(map, view, delta, opt_anchor, opt_duration) { + goog.asserts.assertInstanceof(view, ol.View2D); + var currentResolution = view.getResolution(); + var resolution = view.constrainResolution(currentResolution, delta, 0); + ol.interaction.Interaction.zoomWithoutConstraints( + map, view, resolution, opt_anchor, opt_duration); +}; + + +/** + * @param {ol.Map} map Map. + * @param {ol.IView2D} view View. + * @param {number|undefined} resolution Resolution to go to. + * @param {ol.Coordinate=} opt_anchor Anchor coordinate. + * @param {number=} opt_duration Duration. + */ +ol.interaction.Interaction.zoomWithoutConstraints = + function(map, view, resolution, opt_anchor, opt_duration) { + goog.asserts.assertInstanceof(view, ol.View2D); + if (goog.isDefAndNotNull(resolution)) { + var currentResolution = view.getResolution(); + var currentCenter = view.getCenter(); + if (goog.isDef(currentResolution) && goog.isDef(currentCenter) && + goog.isDef(opt_duration) && opt_duration > 0) { + map.beforeRender(ol.animation.zoom({ + resolution: currentResolution, + duration: opt_duration, + easing: ol.easing.easeOut + })); + if (goog.isDef(opt_anchor)) { + map.beforeRender(ol.animation.pan({ + source: currentCenter, + duration: opt_duration, + easing: ol.easing.easeOut + })); + } + } + goog.asserts.assertInstanceof(view, ol.View2D); + if (goog.isDefAndNotNull(opt_anchor)) { + var center = view.calculateCenterZoom(resolution, opt_anchor); + view.setCenter(center); + } + view.setResolution(resolution); + } +}; diff --git a/float-no-zero/ol/ol/interaction/interaction.jsdoc b/float-no-zero/ol/ol/interaction/interaction.jsdoc new file mode 100644 index 0000000000..6da0d140d4 --- /dev/null +++ b/float-no-zero/ol/ol/interaction/interaction.jsdoc @@ -0,0 +1,3 @@ +/** + * @namespace ol.interaction + */ diff --git a/float-no-zero/ol/ol/interaction/interactiondefaults.exports b/float-no-zero/ol/ol/interaction/interactiondefaults.exports new file mode 100644 index 0000000000..6a928864a2 --- /dev/null +++ b/float-no-zero/ol/ol/interaction/interactiondefaults.exports @@ -0,0 +1 @@ +@exportSymbol ol.interaction.defaults diff --git a/float-no-zero/ol/ol/interaction/interactiondefaults.js b/float-no-zero/ol/ol/interaction/interactiondefaults.js new file mode 100644 index 0000000000..32b4e5569c --- /dev/null +++ b/float-no-zero/ol/ol/interaction/interactiondefaults.js @@ -0,0 +1,110 @@ +goog.provide('ol.interaction'); + +goog.require('ol.Collection'); +goog.require('ol.Kinetic'); +goog.require('ol.interaction.DoubleClickZoom'); +goog.require('ol.interaction.DragPan'); +goog.require('ol.interaction.DragRotate'); +goog.require('ol.interaction.DragZoom'); +goog.require('ol.interaction.KeyboardPan'); +goog.require('ol.interaction.KeyboardZoom'); +goog.require('ol.interaction.MouseWheelZoom'); +goog.require('ol.interaction.TouchPan'); +goog.require('ol.interaction.TouchRotate'); +goog.require('ol.interaction.TouchZoom'); + + +/** + * This method is a convenience method to create a set of interactions + * to be used with an {@link ol.Map}. Specific interactions can be excluded by + * setting the appropriate option to false in the constructor options, + * but the order of the interactions is fixed. If you want to specify a + * different order for interactions, you will need to create your own + * {@link ol.interaction} instances and insert them into an + * {@link ol.Collection} in the order you want before creating your ol.Map + * instance. + * @param {olx.interaction.DefaultsOptions=} opt_options Defaults options. + * @return {ol.Collection} A collection of interactions to be used with + * the ol.Map constructor's interactions option. + * @todo stability experimental + */ +ol.interaction.defaults = function(opt_options) { + + var options = goog.isDef(opt_options) ? opt_options : {}; + + var interactions = new ol.Collection(); + + var kinetic = new ol.Kinetic(-0.005, 0.05, 100); + + var altShiftDragRotate = goog.isDef(options.altShiftDragRotate) ? + options.altShiftDragRotate : true; + if (altShiftDragRotate) { + interactions.push(new ol.interaction.DragRotate()); + } + + var doubleClickZoom = goog.isDef(options.doubleClickZoom) ? + options.doubleClickZoom : true; + if (doubleClickZoom) { + interactions.push(new ol.interaction.DoubleClickZoom({ + delta: options.zoomDelta, + duration: options.zoomDuration + })); + } + + var touchPan = goog.isDef(options.touchPan) ? + options.touchPan : true; + if (touchPan) { + interactions.push(new ol.interaction.TouchPan({ + kinetic: kinetic + })); + } + + var touchRotate = goog.isDef(options.touchRotate) ? + options.touchRotate : true; + if (touchRotate) { + interactions.push(new ol.interaction.TouchRotate()); + } + + var touchZoom = goog.isDef(options.touchZoom) ? + options.touchZoom : true; + if (touchZoom) { + interactions.push(new ol.interaction.TouchZoom({ + duration: options.zoomDuration + })); + } + + var dragPan = goog.isDef(options.dragPan) ? + options.dragPan : true; + if (dragPan) { + interactions.push(new ol.interaction.DragPan({ + kinetic: kinetic + })); + } + + var keyboard = goog.isDef(options.keyboard) ? + options.keyboard : true; + if (keyboard) { + interactions.push(new ol.interaction.KeyboardPan()); + interactions.push(new ol.interaction.KeyboardZoom({ + delta: options.zoomDelta, + duration: options.zoomDuration + })); + } + + var mouseWheelZoom = goog.isDef(options.mouseWheelZoom) ? + options.mouseWheelZoom : true; + if (mouseWheelZoom) { + interactions.push(new ol.interaction.MouseWheelZoom({ + duration: options.zoomDuration + })); + } + + var shiftDragZoom = goog.isDef(options.shiftDragZoom) ? + options.shiftDragZoom : true; + if (shiftDragZoom) { + interactions.push(new ol.interaction.DragZoom()); + } + + return interactions; + +}; diff --git a/float-no-zero/ol/ol/interaction/keyboardpan.exports b/float-no-zero/ol/ol/interaction/keyboardpan.exports new file mode 100644 index 0000000000..a09f837004 --- /dev/null +++ b/float-no-zero/ol/ol/interaction/keyboardpan.exports @@ -0,0 +1 @@ +@exportSymbol ol.interaction.KeyboardPan diff --git a/float-no-zero/ol/ol/interaction/keyboardpaninteraction.js b/float-no-zero/ol/ol/interaction/keyboardpaninteraction.js new file mode 100644 index 0000000000..d609846e43 --- /dev/null +++ b/float-no-zero/ol/ol/interaction/keyboardpaninteraction.js @@ -0,0 +1,102 @@ +// FIXME works for View2D only + +goog.provide('ol.interaction.KeyboardPan'); + +goog.require('goog.asserts'); +goog.require('goog.events.KeyCodes'); +goog.require('goog.events.KeyHandler.EventType'); +goog.require('goog.functions'); +goog.require('ol.View2D'); +goog.require('ol.coordinate'); +goog.require('ol.events.ConditionType'); +goog.require('ol.events.condition'); +goog.require('ol.interaction.Interaction'); + + +/** + * @define {number} Pan duration. + */ +ol.interaction.KEYBOARD_PAN_DURATION = 100; + + + +/** + * Allows the user to pan the map using keyboard arrows. + * Note that, although this interaction is by default included in maps, + * the keys can only be used when browser focus is on the element to which + * the keyboard events are attached. By default, this is the map div, + * though you can change this with the `keyboardTargetElement` in + * {@link ol.Map}. `document` never loses focus but, for any other element, + * focus will have to be on, and returned to, this element if the keys are to + * function. + * See also {@link ol.interaction.KeyboardZoom}. + * @constructor + * @extends {ol.interaction.Interaction} + * @param {olx.interaction.KeyboardPanOptions=} opt_options Options. + * @todo stability experimental + */ +ol.interaction.KeyboardPan = function(opt_options) { + + goog.base(this); + + var options = goog.isDef(opt_options) ? opt_options : {}; + + /** + * @private + * @type {ol.events.ConditionType} + */ + this.condition_ = goog.isDef(options.condition) ? options.condition : + goog.functions.and(ol.events.condition.noModifierKeys, + ol.events.condition.targetNotEditable); + + /** + * @private + * @type {number} + */ + this.pixelDelta_ = goog.isDef(options.pixelDelta) ? options.pixelDelta : 128; + +}; +goog.inherits(ol.interaction.KeyboardPan, ol.interaction.Interaction); + + +/** + * @inheritDoc + */ +ol.interaction.KeyboardPan.prototype.handleMapBrowserEvent = + function(mapBrowserEvent) { + var stopEvent = false; + if (mapBrowserEvent.type == goog.events.KeyHandler.EventType.KEY) { + var keyEvent = /** @type {goog.events.KeyEvent} */ + (mapBrowserEvent.browserEvent); + var keyCode = keyEvent.keyCode; + if (this.condition_(mapBrowserEvent) && + (keyCode == goog.events.KeyCodes.DOWN || + keyCode == goog.events.KeyCodes.LEFT || + keyCode == goog.events.KeyCodes.RIGHT || + keyCode == goog.events.KeyCodes.UP)) { + var map = mapBrowserEvent.map; + // FIXME works for View2D only + var view = map.getView(); + goog.asserts.assertInstanceof(view, ol.View2D); + var view2DState = view.getView2DState(); + var mapUnitsDelta = view2DState.resolution * this.pixelDelta_; + var deltaX = 0, deltaY = 0; + if (keyCode == goog.events.KeyCodes.DOWN) { + deltaY = -mapUnitsDelta; + } else if (keyCode == goog.events.KeyCodes.LEFT) { + deltaX = -mapUnitsDelta; + } else if (keyCode == goog.events.KeyCodes.RIGHT) { + deltaX = mapUnitsDelta; + } else { + deltaY = mapUnitsDelta; + } + var delta = [deltaX, deltaY]; + ol.coordinate.rotate(delta, view2DState.rotation); + ol.interaction.Interaction.pan( + map, view, delta, ol.interaction.KEYBOARD_PAN_DURATION); + mapBrowserEvent.preventDefault(); + stopEvent = true; + } + } + return !stopEvent; +}; diff --git a/float-no-zero/ol/ol/interaction/keyboardzoom.exports b/float-no-zero/ol/ol/interaction/keyboardzoom.exports new file mode 100644 index 0000000000..01a6a9d315 --- /dev/null +++ b/float-no-zero/ol/ol/interaction/keyboardzoom.exports @@ -0,0 +1 @@ +@exportSymbol ol.interaction.KeyboardZoom diff --git a/float-no-zero/ol/ol/interaction/keyboardzoominteraction.js b/float-no-zero/ol/ol/interaction/keyboardzoominteraction.js new file mode 100644 index 0000000000..b0b452284b --- /dev/null +++ b/float-no-zero/ol/ol/interaction/keyboardzoominteraction.js @@ -0,0 +1,81 @@ +// FIXME works for View2D only + +goog.provide('ol.interaction.KeyboardZoom'); + +goog.require('goog.asserts'); +goog.require('goog.events.KeyHandler.EventType'); +goog.require('ol.events.ConditionType'); +goog.require('ol.events.condition'); +goog.require('ol.interaction.Interaction'); + + + +/** + * Allows the user to zoom the map using keyboard + and -. + * Note that, although this interaction is by default included in maps, + * the keys can only be used when browser focus is on the element to which + * the keyboard events are attached. By default, this is the map div, + * though you can change this with the `keyboardTargetElement` in + * {@link ol.Map}. `document` never loses focus but, for any other element, + * focus will have to be on, and returned to, this element if the keys are to + * function. + * See also {@link ol.interaction.KeyboardPan}. + * @constructor + * @param {olx.interaction.KeyboardZoomOptions=} opt_options Options. + * @extends {ol.interaction.Interaction} + * @todo stability experimental + */ +ol.interaction.KeyboardZoom = function(opt_options) { + + goog.base(this); + + var options = goog.isDef(opt_options) ? opt_options : {}; + + /** + * @private + * @type {ol.events.ConditionType} + */ + this.condition_ = goog.isDef(options.condition) ? options.condition : + ol.events.condition.targetNotEditable; + + /** + * @private + * @type {number} + */ + this.delta_ = goog.isDef(options.delta) ? options.delta : 1; + + /** + * @private + * @type {number} + */ + this.duration_ = goog.isDef(options.duration) ? options.duration : 100; + +}; +goog.inherits(ol.interaction.KeyboardZoom, ol.interaction.Interaction); + + +/** + * @inheritDoc + */ +ol.interaction.KeyboardZoom.prototype.handleMapBrowserEvent = + function(mapBrowserEvent) { + var stopEvent = false; + if (mapBrowserEvent.type == goog.events.KeyHandler.EventType.KEY) { + var keyEvent = /** @type {goog.events.KeyEvent} */ + (mapBrowserEvent.browserEvent); + var charCode = keyEvent.charCode; + if (this.condition_(mapBrowserEvent) && + (charCode == '+'.charCodeAt(0) || charCode == '-'.charCodeAt(0))) { + var map = mapBrowserEvent.map; + var delta = (charCode == '+'.charCodeAt(0)) ? this.delta_ : -this.delta_; + map.render(); + // FIXME works for View2D only + var view = map.getView().getView2D(); + ol.interaction.Interaction.zoomByDelta( + map, view, delta, undefined, this.duration_); + mapBrowserEvent.preventDefault(); + stopEvent = true; + } + } + return !stopEvent; +}; diff --git a/float-no-zero/ol/ol/interaction/modifyinteraction.exports b/float-no-zero/ol/ol/interaction/modifyinteraction.exports new file mode 100644 index 0000000000..60378a3759 --- /dev/null +++ b/float-no-zero/ol/ol/interaction/modifyinteraction.exports @@ -0,0 +1 @@ +@exportSymbol ol.interaction.Modify diff --git a/float-no-zero/ol/ol/interaction/modifyinteraction.js b/float-no-zero/ol/ol/interaction/modifyinteraction.js new file mode 100644 index 0000000000..6296fc8748 --- /dev/null +++ b/float-no-zero/ol/ol/interaction/modifyinteraction.js @@ -0,0 +1,633 @@ +goog.provide('ol.interaction.Modify'); + +goog.require('goog.array'); +goog.require('goog.asserts'); +goog.require('goog.events'); +goog.require('ol.Collection'); +goog.require('ol.CollectionEventType'); +goog.require('ol.Feature'); +goog.require('ol.FeatureOverlay'); +goog.require('ol.MapBrowserEvent.EventType'); +goog.require('ol.ViewHint'); +goog.require('ol.coordinate'); +goog.require('ol.extent'); +goog.require('ol.geom.GeometryType'); +goog.require('ol.geom.LineString'); +goog.require('ol.geom.MultiLineString'); +goog.require('ol.geom.MultiPoint'); +goog.require('ol.geom.MultiPolygon'); +goog.require('ol.geom.Point'); +goog.require('ol.geom.Polygon'); +goog.require('ol.interaction.Drag'); +goog.require('ol.structs.RBush'); + + +/** + * @typedef {{feature: ol.Feature, + * geometry: ol.geom.Geometry, + * index: (number|undefined), + * segment: Array.}} + */ +ol.interaction.SegmentDataType; + + + +/** + * @constructor + * @extends {ol.interaction.Drag} + * @param {olx.interaction.ModifyOptions} options Options. + */ +ol.interaction.Modify = function(options) { + + goog.base(this); + + + /** + * Editing vertex. + * @type {ol.Feature} + * @private + */ + this.vertexFeature_ = null; + + /** + * Segments intersecting {@link this.vertexFeature_} by segment uid. + * @type {Object.} + * @private + */ + this.vertexSegments_ = null; + + /** + * @type {boolean} + * @private + */ + this.modifiable_ = false; + + /** + * @type {ol.Pixel} + * @private + */ + this.lastPixel_ = null; + + /** + * Segment RTree for each layer + * @type {Object.<*, ol.structs.RBush>} + * @private + */ + this.rBush_ = null; + + /** + * @type {number} + * @private + */ + this.pixelTolerance_ = goog.isDef(options.pixelTolerance) ? + options.pixelTolerance : 20; + + /** + * @type {Array} + * @private + */ + this.dragSegments_ = null; + + /** + * Draw overlay where are sketch features are drawn. + * @type {ol.FeatureOverlay} + * @private + */ + this.overlay_ = new ol.FeatureOverlay({ + style: options.style + }); + + /** + * @type {ol.Collection} + * @private + */ + this.features_ = options.features; + + goog.events.listen(this.features_, ol.CollectionEventType.ADD, + this.addFeature_, false, this); + goog.events.listen(this.features_, ol.CollectionEventType.REMOVE, + this.removeFeature_, false, this); + + /** + * @const + * @private + * @type {Object. } + */ + this.SEGMENT_WRITERS_ = { + 'Point': this.writePointGeometry_, + 'LineString': this.writeLineStringGeometry_, + 'LinearRing': this.writeLineStringGeometry_, + 'Polygon': this.writePolygonGeometry_, + 'MultiPoint': this.writeMultiPointGeometry_, + 'MultiLineString': this.writeMultiLineStringGeometry_, + 'MultiPolygon': this.writeMultiPolygonGeometry_, + 'GeometryCollection': this.writeGeometryCollectionGeometry_ + }; + +}; +goog.inherits(ol.interaction.Modify, ol.interaction.Drag); + + +/** + * @inheritDoc + */ +ol.interaction.Modify.prototype.setMap = function(map) { + if (!goog.isNull(map)) { + if (goog.isNull(this.rBush_)) { + this.rBush_ = new ol.structs.RBush(); + } + } else { + // removing from a map, clean up + this.rBush_ = null; + } + + this.overlay_.setMap(map); + goog.base(this, 'setMap', map); +}; + + +/** + * @param {ol.CollectionEvent} evt Event. + * @private + */ +ol.interaction.Modify.prototype.addFeature_ = function(evt) { + var feature = evt.element; + goog.asserts.assertInstanceof(feature, ol.Feature); + var geometry = feature.getGeometry(); + if (goog.isDef(this.SEGMENT_WRITERS_[geometry.getType()])) { + this.SEGMENT_WRITERS_[geometry.getType()].call(this, feature, geometry); + } + this.handleMouseAtPixel_(this.lastPixel_, this.getMap()); +}; + + +/** + * @param {ol.Feature} feature Feature + * @param {ol.geom.Point} geometry Geometry. + * @private + */ +ol.interaction.Modify.prototype.writePointGeometry_ = + function(feature, geometry) { + var coordinates = geometry.getCoordinates(); + var segmentData = /** @type {ol.interaction.SegmentDataType} */ ({ + feature: feature, + geometry: geometry, + segment: [coordinates, coordinates] + }); + this.rBush_.insert(geometry.getExtent(), segmentData); +}; + + +/** + * @param {ol.Feature} feature Feature + * @param {ol.geom.MultiPoint} geometry Geometry. + * @private + */ +ol.interaction.Modify.prototype.writeMultiPointGeometry_ = + function(feature, geometry) { + var points = geometry.getCoordinates(); + var coordinates, i, ii, segmentData; + for (i = 0, ii = points.length; i < ii; ++i) { + coordinates = points[i]; + segmentData = /** @type {ol.interaction.SegmentDataType} */ ({ + feature: feature, + geometry: geometry, + depth: [i], + index: i, + segment: [coordinates, coordinates] + }); + this.rBush_.insert(geometry.getExtent(), segmentData); + } +}; + + +/** + * @param {ol.Feature} feature Feature + * @param {ol.geom.LineString} geometry Geometry. + * @private + */ +ol.interaction.Modify.prototype.writeLineStringGeometry_ = + function(feature, geometry) { + var coordinates = geometry.getCoordinates(); + var i, ii, segment, segmentData; + for (i = 0, ii = coordinates.length - 1; i < ii; ++i) { + segment = coordinates.slice(i, i + 2); + segmentData = /** @type {ol.interaction.SegmentDataType} */ ({ + feature: feature, + geometry: geometry, + index: i, + segment: segment + }); + this.rBush_.insert(ol.extent.boundingExtent(segment), segmentData); + } +}; + + +/** + * @param {ol.Feature} feature Feature + * @param {ol.geom.MultiLineString} geometry Geometry. + * @private + */ +ol.interaction.Modify.prototype.writeMultiLineStringGeometry_ = + function(feature, geometry) { + var lines = geometry.getCoordinates(); + var coordinates, i, ii, j, jj, segment, segmentData; + for (j = 0, jj = lines.length; j < jj; ++j) { + coordinates = lines[j]; + for (i = 0, ii = coordinates.length - 1; i < ii; ++i) { + segment = coordinates.slice(i, i + 2); + segmentData = /** @type {ol.interaction.SegmentDataType} */ ({ + feature: feature, + geometry: geometry, + depth: [j], + index: i, + segment: segment + }); + this.rBush_.insert(ol.extent.boundingExtent(segment), segmentData); + } + } +}; + + +/** + * @param {ol.Feature} feature Feature + * @param {ol.geom.Polygon} geometry Geometry. + * @private + */ +ol.interaction.Modify.prototype.writePolygonGeometry_ = + function(feature, geometry) { + var rings = geometry.getCoordinates(); + var coordinates = rings[0]; + var i, ii, segment, segmentData; + for (i = 0, ii = coordinates.length - 1; i < ii; ++i) { + segment = coordinates.slice(i, i + 2); + segmentData = /** @type {ol.interaction.SegmentDataType} */ ({ + feature: feature, + geometry: geometry, + index: i, + segment: segment + }); + this.rBush_.insert(ol.extent.boundingExtent(segment), segmentData); + } +}; + + +/** + * @param {ol.Feature} feature Feature + * @param {ol.geom.MultiPolygon} geometry Geometry. + * @private + */ +ol.interaction.Modify.prototype.writeMultiPolygonGeometry_ = + function(feature, geometry) { + var polygons = geometry.getCoordinates(); + var coordinates, i, ii, j, jj, segment, segmentData; + for (j = 0, jj = polygons.length; j < jj; ++j) { + coordinates = polygons[j][0]; + for (i = 0, ii = coordinates.length - 1; i < ii; ++i) { + segment = coordinates.slice(i, i + 2); + segmentData = /** @type {ol.interaction.SegmentDataType} */ ({ + feature: feature, + geometry: geometry, + depth: [j], + index: i, + segment: segment + }); + this.rBush_.insert(ol.extent.boundingExtent(segment), segmentData); + } + } +}; + + +/** + * @param {ol.Feature} feature Feature + * @param {ol.geom.GeometryCollection} geometry Geometry. + * @private + */ +ol.interaction.Modify.prototype.writeGeometryCollectionGeometry_ = + function(feature, geometry) { + var i, geometries = geometry.getGeometriesArray(); + for (i = 0; i < geometries.length; ++i) { + this.SEGMENT_WRITERS_[geometries[i].getType()].call( + this, feature, geometries[i]); + } +}; + + +/** + * @param {ol.CollectionEvent} evt Event. + * @private + */ +ol.interaction.Modify.prototype.removeFeature_ = function(evt) { + var feature = evt.element; + var rBush = this.rBush_; + var i, nodesToRemove = []; + rBush.forEachInExtent(feature.getGeometry().getExtent(), function(node) { + if (feature === node.feature) { + nodesToRemove.push(node); + } + }); + for (i = nodesToRemove.length - 1; i >= 0; --i) { + rBush.remove(nodesToRemove[i]); + } + // There remains only vertexFeature… + if (!goog.isNull(this.vertexFeature_) && + this.features_.getLength() === 0) { + this.overlay_.removeFeature(this.vertexFeature_); + this.vertexFeature_ = null; + } +}; + + +/** + * @param {ol.Coordinate} coordinates Coordinates. + * @return {ol.Feature} Vertex feature. + * @private + */ +ol.interaction.Modify.prototype.createOrUpdateVertexFeature_ = + function(coordinates) { + var vertexFeature = this.vertexFeature_; + if (goog.isNull(vertexFeature)) { + vertexFeature = new ol.Feature(new ol.geom.Point(coordinates)); + this.vertexFeature_ = vertexFeature; + this.overlay_.addFeature(vertexFeature); + } else { + var geometry = /** @type {ol.geom.Point} */ (vertexFeature.getGeometry()); + geometry.setCoordinates(coordinates); + } + return vertexFeature; +}; + + +/** + * @inheritDoc + */ +ol.interaction.Modify.prototype.handleDragStart = function(evt) { + this.dragSegments_ = []; + var vertexFeature = this.vertexFeature_; + if (!goog.isNull(vertexFeature)) { + var insertVertices = []; + var geometry = /** @type {ol.geom.Point} */ (vertexFeature.getGeometry()); + var vertex = geometry.getCoordinates(); + var vertexExtent = ol.extent.boundingExtent([vertex]); + var segmentDataMatches = []; + this.rBush_.forEachInExtent(vertexExtent, + function(segmentData) { + segmentDataMatches.push(segmentData); + }); + var distinctFeatures = {}; + for (var i = 0, ii = segmentDataMatches.length; i < ii; ++i) { + var segmentDataMatch = segmentDataMatches[i]; + var segment = segmentDataMatch.segment; + if (!(goog.getUid(segmentDataMatch.feature) in distinctFeatures)) { + var feature = segmentDataMatch.feature; + distinctFeatures[goog.getUid(feature)] = true; + } + if (ol.coordinate.equals(segment[0], vertex)) { + this.dragSegments_.push([segmentDataMatch, 0]); + } else if (ol.coordinate.equals(segment[1], vertex)) { + this.dragSegments_.push([segmentDataMatch, 1]); + } else if (goog.getUid(segment) in this.vertexSegments_) { + insertVertices.push([segmentDataMatch, vertex]); + } + } + for (i = insertVertices.length - 1; i >= 0; --i) { + this.insertVertex_.apply(this, insertVertices[i]); + } + } + return this.modifiable_; +}; + + +/** + * @inheritDoc + */ +ol.interaction.Modify.prototype.handleDrag = function(evt) { + var vertex = evt.coordinate; + for (var i = 0, ii = this.dragSegments_.length; i < ii; ++i) { + var dragSegment = this.dragSegments_[i]; + var segmentData = dragSegment[0]; + var depth = segmentData.depth; + var geometry = segmentData.geometry; + var coordinates = geometry.getCoordinates(); + var segment = segmentData.segment; + var index = dragSegment[1]; + + switch (geometry.getType()) { + case ol.geom.GeometryType.POINT: + coordinates = vertex; + segment[0] = segment[1] = vertex; + break; + case ol.geom.GeometryType.MULTI_POINT: + coordinates[segmentData.index] = vertex; + segment[0] = segment[1] = vertex; + break; + case ol.geom.GeometryType.LINE_STRING: + coordinates[segmentData.index + index] = vertex; + segment[index] = vertex; + break; + case ol.geom.GeometryType.MULTI_LINE_STRING: + coordinates[depth[0]][segmentData.index + index] = vertex; + segment[index] = vertex; + break; + case ol.geom.GeometryType.POLYGON: + coordinates[0][segmentData.index + index] = vertex; + segment[index] = vertex; + break; + case ol.geom.GeometryType.MULTI_POLYGON: + coordinates[depth[0]][0][segmentData.index + index] = vertex; + segment[index] = vertex; + break; + } + + geometry.setCoordinates(coordinates); + var newBounds = ol.extent.boundingExtent(segment); + this.createOrUpdateVertexFeature_(vertex); + this.rBush_.remove(segmentData); + this.rBush_.insert(newBounds, segmentData); + } +}; + + +/** + * @inheritDoc + */ +ol.interaction.Modify.prototype.handleDragEnd = function(evt) { + var segmentData; + for (var i = this.dragSegments_.length - 1; i >= 0; --i) { + segmentData = this.dragSegments_[i][0]; + this.rBush_.update(ol.extent.boundingExtent(segmentData.segment), + segmentData); + } +}; + + +/** + * @inheritDoc + */ +ol.interaction.Modify.prototype.handleMapBrowserEvent = + function(mapBrowserEvent) { + if (!mapBrowserEvent.map.getView().getHints()[ol.ViewHint.INTERACTING] && + !this.getDragging() && + mapBrowserEvent.type == ol.MapBrowserEvent.EventType.MOUSEMOVE) { + this.handleMouseMove_(mapBrowserEvent); + } + goog.base(this, 'handleMapBrowserEvent', mapBrowserEvent); + return !this.modifiable_; +}; + + +/** + * @param {ol.MapBrowserEvent} evt Event. + * @private + */ +ol.interaction.Modify.prototype.handleMouseMove_ = function(evt) { + this.lastPixel_ = evt.pixel; + this.handleMouseAtPixel_(evt.pixel, evt.map); +}; + + +/** + * @param {ol.Pixel} pixel Pixel + * @param {ol.Map} map Map. + * @private + */ +ol.interaction.Modify.prototype.handleMouseAtPixel_ = function(pixel, map) { + var pixelCoordinate = map.getCoordinateFromPixel(pixel); + var sortByDistance = function(a, b) { + return ol.coordinate.squaredDistanceToSegment(pixelCoordinate, a.segment) - + ol.coordinate.squaredDistanceToSegment(pixelCoordinate, b.segment); + }; + + var lowerLeft = map.getCoordinateFromPixel( + [pixel[0] - this.pixelTolerance_, pixel[1] + this.pixelTolerance_]); + var upperRight = map.getCoordinateFromPixel( + [pixel[0] + this.pixelTolerance_, pixel[1] - this.pixelTolerance_]); + var box = ol.extent.boundingExtent([lowerLeft, upperRight]); + + this.modifiable_ = false; + var rBush = this.rBush_; + var nodes = rBush.getInExtent(box); + if (nodes.length > 0) { + nodes.sort(sortByDistance); + var node = nodes[0]; + var closestSegment = node.segment; + var vertex = (ol.coordinate.closestOnSegment(pixelCoordinate, + closestSegment)); + var vertexPixel = map.getPixelFromCoordinate(vertex); + if (Math.sqrt(ol.coordinate.squaredDistance(pixel, vertexPixel)) <= + this.pixelTolerance_) { + var pixel1 = map.getPixelFromCoordinate(closestSegment[0]); + var pixel2 = map.getPixelFromCoordinate(closestSegment[1]); + var squaredDist1 = ol.coordinate.squaredDistance(vertexPixel, pixel1); + var squaredDist2 = ol.coordinate.squaredDistance(vertexPixel, pixel2); + var dist = Math.sqrt(Math.min(squaredDist1, squaredDist2)); + if (dist <= 10) { + vertex = squaredDist1 > squaredDist2 ? + closestSegment[1] : closestSegment[0]; + } + this.createOrUpdateVertexFeature_(vertex); + var vertexSegments = {}; + vertexSegments[goog.getUid(closestSegment)] = true; + var segment; + for (var i = 1, ii = nodes.length; i < ii; ++i) { + segment = nodes[i].segment; + if ((ol.coordinate.equals(closestSegment[0], segment[0]) && + ol.coordinate.equals(closestSegment[1], segment[1]) || + (ol.coordinate.equals(closestSegment[0], segment[1]) && + ol.coordinate.equals(closestSegment[1], segment[0])))) { + vertexSegments[goog.getUid(segment)] = true; + } else { + break; + } + } + this.vertexSegments_ = vertexSegments; + this.modifiable_ = true; + return; + } + } + if (!goog.isNull(this.vertexFeature_)) { + this.overlay_.removeFeature(this.vertexFeature_); + this.vertexFeature_ = null; + } +}; + + +/** + * @param {ol.interaction.SegmentDataType} segmentData Segment data. + * @param {ol.Coordinate} vertex Vertex. + * @private + */ +ol.interaction.Modify.prototype.insertVertex_ = function(segmentData, vertex) { + var segment = segmentData.segment; + var feature = segmentData.feature; + var geometry = segmentData.geometry; + var depth = segmentData.depth; + var index = segmentData.index; + var coordinates; + + switch (geometry.getType()) { + case ol.geom.GeometryType.MULTI_LINE_STRING: + goog.asserts.assertInstanceof(geometry, ol.geom.MultiLineString); + coordinates = geometry.getCoordinates(); + coordinates[depth[0]].splice(index + 1, 0, vertex); + break; + case ol.geom.GeometryType.POLYGON: + goog.asserts.assertInstanceof(geometry, ol.geom.Polygon); + coordinates = geometry.getCoordinates(); + coordinates[0].splice(index + 1, 0, vertex); + break; + case ol.geom.GeometryType.MULTI_POLYGON: + goog.asserts.assertInstanceof(geometry, ol.geom.MultiPolygon); + coordinates = geometry.getCoordinates(); + coordinates[depth[0]][0].splice(index + 1, 0, vertex); + break; + case ol.geom.GeometryType.LINE_STRING: + goog.asserts.assertInstanceof(geometry, ol.geom.LineString); + coordinates = geometry.getCoordinates(); + coordinates.splice(index + 1, 0, vertex); + break; + default: + return; + } + + geometry.setCoordinates(coordinates); + var rTree = this.rBush_; + goog.asserts.assert(goog.isDef(segment)); + rTree.remove(segmentData); + var uid = goog.getUid(feature); + var segmentDataMatches = []; + this.rBush_.forEachInExtent(geometry.getExtent(), + function(segmentData) { + if (goog.getUid(segmentData.feature) === uid) { + segmentDataMatches.push(segmentData); + } + }); + for (var i = 0, ii = segmentDataMatches.length; i < ii; ++i) { + var segmentDataMatch = segmentDataMatches[i]; + if (segmentDataMatch.geometry === geometry && + segmentDataMatch.index > index) { + ++segmentDataMatch.index; + } + } + var newSegmentData = /** @type {ol.interaction.SegmentDataType} */ ({ + segment: [segment[0], vertex], + feature: feature, + geometry: geometry, + depth: depth, + index: index + }); + rTree.insert(ol.extent.boundingExtent(newSegmentData.segment), + newSegmentData); + this.dragSegments_.push([newSegmentData, 1]); + + var newSegmentData2 = /** @type {ol.interaction.SegmentDataType} */ ({ + segment: [vertex, segment[1]], + feature: feature, + geometry: geometry, + depth: depth, + index: index + 1 + }); + rTree.insert(ol.extent.boundingExtent(newSegmentData2.segment), + newSegmentData2); + this.dragSegments_.push([newSegmentData2, 0]); +}; diff --git a/float-no-zero/ol/ol/interaction/mousewheelzoom.exports b/float-no-zero/ol/ol/interaction/mousewheelzoom.exports new file mode 100644 index 0000000000..bd6f492da3 --- /dev/null +++ b/float-no-zero/ol/ol/interaction/mousewheelzoom.exports @@ -0,0 +1 @@ +@exportSymbol ol.interaction.MouseWheelZoom diff --git a/float-no-zero/ol/ol/interaction/mousewheelzoominteraction.js b/float-no-zero/ol/ol/interaction/mousewheelzoominteraction.js new file mode 100644 index 0000000000..956c82d315 --- /dev/null +++ b/float-no-zero/ol/ol/interaction/mousewheelzoominteraction.js @@ -0,0 +1,125 @@ +// FIXME works for View2D only + +goog.provide('ol.interaction.MouseWheelZoom'); + +goog.require('goog.asserts'); +goog.require('goog.events.MouseWheelEvent'); +goog.require('goog.events.MouseWheelHandler.EventType'); +goog.require('goog.math'); +goog.require('ol.Coordinate'); +goog.require('ol.interaction.Interaction'); + + +/** + * @define {number} Maximum delta. + */ +ol.interaction.MOUSEWHEELZOOM_MAXDELTA = 1; + + +/** + * @define {number} Timeout duration. + */ +ol.interaction.MOUSEWHEELZOOM_TIMEOUT_DURATION = 80; + + + +/** + * Allows the user to zoom the map by scrolling the mouse wheel. + * @constructor + * @extends {ol.interaction.Interaction} + * @param {olx.interaction.MouseWheelZoomOptions=} opt_options Options. + * @todo stability experimental + */ +ol.interaction.MouseWheelZoom = function(opt_options) { + + var options = goog.isDef(opt_options) ? opt_options : {}; + + goog.base(this); + + /** + * @private + * @type {number} + */ + this.delta_ = 0; + + /** + * @private + * @type {number} + */ + this.duration_ = goog.isDef(options.duration) ? options.duration : 250; + + /** + * @private + * @type {?ol.Coordinate} + */ + this.lastAnchor_ = null; + + /** + * @private + * @type {number|undefined} + */ + this.startTime_ = undefined; + + /** + * @private + * @type {number|undefined} + */ + this.timeoutId_ = undefined; + +}; +goog.inherits(ol.interaction.MouseWheelZoom, ol.interaction.Interaction); + + +/** + * @inheritDoc + */ +ol.interaction.MouseWheelZoom.prototype.handleMapBrowserEvent = + function(mapBrowserEvent) { + var stopEvent = false; + if (mapBrowserEvent.type == + goog.events.MouseWheelHandler.EventType.MOUSEWHEEL) { + var map = mapBrowserEvent.map; + var mouseWheelEvent = mapBrowserEvent.browserEvent; + goog.asserts.assertInstanceof(mouseWheelEvent, goog.events.MouseWheelEvent); + + this.lastAnchor_ = mapBrowserEvent.coordinate; + this.delta_ += mouseWheelEvent.deltaY / 3; + + if (!goog.isDef(this.startTime_)) { + this.startTime_ = goog.now(); + } + + var duration = ol.interaction.MOUSEWHEELZOOM_TIMEOUT_DURATION; + var timeLeft = Math.max(duration - (goog.now() - this.startTime_), 0); + + goog.global.clearTimeout(this.timeoutId_); + this.timeoutId_ = goog.global.setTimeout( + goog.bind(this.doZoom_, this, map), timeLeft); + + mapBrowserEvent.preventDefault(); + stopEvent = true; + } + return !stopEvent; +}; + + +/** + * @private + * @param {ol.Map} map Map. + */ +ol.interaction.MouseWheelZoom.prototype.doZoom_ = function(map) { + var maxDelta = ol.interaction.MOUSEWHEELZOOM_MAXDELTA; + var delta = goog.math.clamp(this.delta_, -maxDelta, maxDelta); + + // FIXME works for View2D only + var view = map.getView().getView2D(); + + map.render(); + ol.interaction.Interaction.zoomByDelta(map, view, -delta, this.lastAnchor_, + this.duration_); + + this.delta_ = 0; + this.lastAnchor_ = null; + this.startTime_ = undefined; + this.timeoutId_ = undefined; +}; diff --git a/float-no-zero/ol/ol/interaction/selectinteraction.exports b/float-no-zero/ol/ol/interaction/selectinteraction.exports new file mode 100644 index 0000000000..eeccc7e10a --- /dev/null +++ b/float-no-zero/ol/ol/interaction/selectinteraction.exports @@ -0,0 +1,3 @@ +@exportSymbol ol.interaction.Select +@exportProperty ol.interaction.Select.prototype.getFeatures +@exportProperty ol.interaction.Select.prototype.setMap diff --git a/float-no-zero/ol/ol/interaction/selectinteraction.js b/float-no-zero/ol/ol/interaction/selectinteraction.js new file mode 100644 index 0000000000..4c9e85d63b --- /dev/null +++ b/float-no-zero/ol/ol/interaction/selectinteraction.js @@ -0,0 +1,148 @@ +goog.provide('ol.interaction.Select'); + +goog.require('goog.array'); +goog.require('goog.functions'); +goog.require('ol.FeatureOverlay'); +goog.require('ol.events.condition'); +goog.require('ol.interaction.Interaction'); + + + +/** + * @constructor + * @extends {ol.interaction.Interaction} + * @param {olx.interaction.SelectOptions} options Options. + * @todo stability experimental + */ +ol.interaction.Select = function(options) { + + goog.base(this); + + /** + * @private + * @type {ol.events.ConditionType} + */ + this.condition_ = goog.isDef(options.condition) ? + options.condition : ol.events.condition.singleClick; + + /** + * @private + * @type {ol.events.ConditionType} + */ + this.addCondition_ = goog.isDef(options.addCondition) ? + options.addCondition : ol.events.condition.shiftKeyOnly; + + var layerFilter; + if (goog.isDef(options.layerFilter)) { + layerFilter = options.layerFilter; + } else if (goog.isDef(options.layer)) { + var layer = options.layer; + layerFilter = + /** + * @param {ol.layer.Layer} l Layer. + * @return {boolean} Include. + */ + function(l) { + return l === layer; + }; + } else if (goog.isDef(options.layers)) { + var layers = options.layers; + layerFilter = + /** + * @param {ol.layer.Layer} layer Layer. + * @return {boolean} Include. + */ + function(layer) { + return goog.array.indexOf(layers, layer) != -1; + }; + } else { + layerFilter = goog.functions.TRUE; + } + + /** + * @private + * @type {function(ol.layer.Layer): boolean} + */ + this.layerFilter_ = layerFilter; + + /** + * @private + * @type {ol.FeatureOverlay} + */ + this.featureOverlay_ = new ol.FeatureOverlay({ + style: options.style + }); + +}; +goog.inherits(ol.interaction.Select, ol.interaction.Interaction); + + +/** + * @return {ol.Collection} Features collection. + * @todo stability experimental + */ +ol.interaction.Select.prototype.getFeatures = function() { + return this.featureOverlay_.getFeatures(); +}; + + +/** + * @inheritDoc + */ +ol.interaction.Select.prototype.handleMapBrowserEvent = + function(mapBrowserEvent) { + if (!this.condition_(mapBrowserEvent)) { + return true; + } + var add = this.addCondition_(mapBrowserEvent); + var map = mapBrowserEvent.map; + var features = this.featureOverlay_.getFeatures(); + if (add) { + map.forEachFeatureAtPixel(mapBrowserEvent.pixel, + /** + * @param {ol.Feature} feature Feature. + * @param {ol.layer.Layer} layer Layer. + */ + function(feature, layer) { + if (goog.array.indexOf(features.getArray(), feature) == -1) { + features.push(feature); + } + }, undefined, this.layerFilter_); + } else { + /** @type {ol.Feature|undefined} */ + var feature = map.forEachFeatureAtPixel(mapBrowserEvent.pixel, + /** + * @param {ol.Feature} feature Feature. + * @param {ol.layer.Layer} layer Layer. + */ + function(feature, layer) { + return feature; + }, undefined, this.layerFilter_); + if (goog.isDef(feature)) { + if (features.getLength() == 1) { + if (features.getAt(0) !== feature) { + features.setAt(0, feature); + } + } else { + if (features.getLength() != 1) { + features.clear(); + } + features.push(feature); + } + } else { + if (features.getLength() !== 0) { + features.clear(); + } + } + } + return false; +}; + + +/** + * @inheritDoc + */ +ol.interaction.Select.prototype.setMap = function(map) { + goog.base(this, 'setMap', map); + this.featureOverlay_.setMap(map); +}; diff --git a/float-no-zero/ol/ol/interaction/touchinteraction.js b/float-no-zero/ol/ol/interaction/touchinteraction.js new file mode 100644 index 0000000000..987cbb4e29 --- /dev/null +++ b/float-no-zero/ol/ol/interaction/touchinteraction.js @@ -0,0 +1,151 @@ + +goog.provide('ol.interaction.Touch'); + +goog.require('goog.asserts'); +goog.require('goog.functions'); +goog.require('goog.object'); +goog.require('ol.MapBrowserEvent'); +goog.require('ol.MapBrowserEvent.EventType'); +goog.require('ol.Pixel'); +goog.require('ol.ViewHint'); +goog.require('ol.interaction.Interaction'); + + + +/** + * Base class for touch interactions. + * @constructor + * @extends {ol.interaction.Interaction} + */ +ol.interaction.Touch = function() { + + goog.base(this); + + /** + * @type {boolean} + * @private + */ + this.handled_ = false; + + /** + * @type {Object} + * @private + */ + this.trackedTouches_ = {}; + + /** + * @type {Array.} + * @protected + */ + this.targetTouches = []; + +}; +goog.inherits(ol.interaction.Touch, ol.interaction.Interaction); + + +/** + * @param {Array.} touches TouchEvents. + * @return {ol.Pixel} Centroid pixel. + */ +ol.interaction.Touch.centroid = function(touches) { + var length = touches.length; + var clientX = 0; + var clientY = 0; + for (var i = 0; i < length; i++) { + clientX += touches[i].clientX; + clientY += touches[i].clientY; + } + return [clientX / length, clientY / length]; +}; + + +/** + * @param {ol.MapBrowserEvent} mapBrowserEvent Event. + * @return {boolean} Whether the event is a touchstart, touchmove + * or touchend event. + * @private + */ +ol.interaction.Touch.isTouchEvent_ = function(mapBrowserEvent) { + var type = mapBrowserEvent.type; + return ( + type === ol.MapBrowserEvent.EventType.TOUCHSTART || + type === ol.MapBrowserEvent.EventType.TOUCHMOVE || + type === ol.MapBrowserEvent.EventType.TOUCHEND); +}; + + +/** + * @param {ol.MapBrowserEvent} mapBrowserEvent Event. + * @private + */ +ol.interaction.Touch.prototype.updateTrackedTouches_ = + function(mapBrowserEvent) { + if (ol.interaction.Touch.isTouchEvent_(mapBrowserEvent)) { + var event = mapBrowserEvent.originalEvent; + if (goog.isDef(event.targetTouches)) { + // W3C touch events + this.targetTouches = event.targetTouches; + } else if (goog.isDef(event.pointerId)) { + // IE pointer event + if (mapBrowserEvent.type == ol.MapBrowserEvent.EventType.TOUCHEND) { + delete this.trackedTouches_[event.pointerId]; + } else { + this.trackedTouches_[event.pointerId] = event; + } + this.targetTouches = goog.object.getValues(this.trackedTouches_); + } else { + goog.asserts.fail('unknown touch event model'); + } + } +}; + + +/** + * @param {ol.MapBrowserEvent} mapBrowserEvent Event. + * @protected + */ +ol.interaction.Touch.prototype.handleTouchMove = goog.nullFunction; + + +/** + * @param {ol.MapBrowserEvent} mapBrowserEvent Event. + * @protected + * @return {boolean} Capture dragging. + */ +ol.interaction.Touch.prototype.handleTouchEnd = goog.functions.FALSE; + + +/** + * @param {ol.MapBrowserEvent} mapBrowserEvent Event. + * @protected + * @return {boolean} Capture dragging. + */ +ol.interaction.Touch.prototype.handleTouchStart = goog.functions.FALSE; + + +/** + * @inheritDoc + */ +ol.interaction.Touch.prototype.handleMapBrowserEvent = + function(mapBrowserEvent) { + var view = mapBrowserEvent.map.getView(); + this.updateTrackedTouches_(mapBrowserEvent); + if (this.handled_) { + if (mapBrowserEvent.type == ol.MapBrowserEvent.EventType.TOUCHMOVE) { + this.handleTouchMove(mapBrowserEvent); + } else if (mapBrowserEvent.type == ol.MapBrowserEvent.EventType.TOUCHEND) { + this.handled_ = this.handleTouchEnd(mapBrowserEvent); + if (!this.handled_) { + view.setHint(ol.ViewHint.INTERACTING, -1); + } + } + } + if (mapBrowserEvent.type == ol.MapBrowserEvent.EventType.TOUCHSTART) { + var handled = this.handleTouchStart(mapBrowserEvent); + if (!this.handled_ && handled) { + view.setHint(ol.ViewHint.INTERACTING, 1); + } + this.handled_ = handled; + } + return true; +}; diff --git a/float-no-zero/ol/ol/interaction/touchpan.exports b/float-no-zero/ol/ol/interaction/touchpan.exports new file mode 100644 index 0000000000..e50ab8ec1c --- /dev/null +++ b/float-no-zero/ol/ol/interaction/touchpan.exports @@ -0,0 +1 @@ +@exportSymbol ol.interaction.TouchPan diff --git a/float-no-zero/ol/ol/interaction/touchpaninteraction.js b/float-no-zero/ol/ol/interaction/touchpaninteraction.js new file mode 100644 index 0000000000..53dd8fdfb9 --- /dev/null +++ b/float-no-zero/ol/ol/interaction/touchpaninteraction.js @@ -0,0 +1,142 @@ +// FIXME works for View2D only +goog.provide('ol.interaction.TouchPan'); + +goog.require('goog.asserts'); +goog.require('ol.Kinetic'); +goog.require('ol.Pixel'); +goog.require('ol.PreRenderFunction'); +goog.require('ol.View2D'); +goog.require('ol.coordinate'); +goog.require('ol.interaction.Touch'); + + + +/** + * Allows the user to pan the map by touching and dragging + * on a touch screen. + * @constructor + * @extends {ol.interaction.Touch} + * @param {olx.interaction.TouchPanOptions=} opt_options Options. + * @todo stability experimental + */ +ol.interaction.TouchPan = function(opt_options) { + + goog.base(this); + + var options = goog.isDef(opt_options) ? opt_options : {}; + + /** + * @private + * @type {ol.Kinetic|undefined} + */ + this.kinetic_ = options.kinetic; + + /** + * @private + * @type {?ol.PreRenderFunction} + */ + this.kineticPreRenderFn_ = null; + + /** + * @type {ol.Pixel} + */ + this.lastCentroid = null; + + /** + * @private + * @type {boolean} + */ + this.noKinetic_ = false; + +}; +goog.inherits(ol.interaction.TouchPan, ol.interaction.Touch); + + +/** + * @inheritDoc + */ +ol.interaction.TouchPan.prototype.handleTouchMove = function(mapBrowserEvent) { + goog.asserts.assert(this.targetTouches.length >= 1); + var centroid = ol.interaction.Touch.centroid(this.targetTouches); + if (!goog.isNull(this.lastCentroid)) { + if (this.kinetic_) { + this.kinetic_.update(centroid[0], centroid[1]); + } + var deltaX = this.lastCentroid[0] - centroid[0]; + var deltaY = centroid[1] - this.lastCentroid[1]; + var map = mapBrowserEvent.map; + var view2D = map.getView().getView2D(); + goog.asserts.assertInstanceof(view2D, ol.View2D); + var view2DState = view2D.getView2DState(); + var center = [deltaX, deltaY]; + ol.coordinate.scale(center, view2DState.resolution); + ol.coordinate.rotate(center, view2DState.rotation); + ol.coordinate.add(center, view2DState.center); + center = view2D.constrainCenter(center); + map.render(); + view2D.setCenter(center); + } + this.lastCentroid = centroid; +}; + + +/** + * @inheritDoc + */ +ol.interaction.TouchPan.prototype.handleTouchEnd = + function(mapBrowserEvent) { + var map = mapBrowserEvent.map; + var view2D = map.getView().getView2D(); + goog.asserts.assertInstanceof(view2D, ol.View2D); + if (this.targetTouches.length === 0) { + if (!this.noKinetic_ && this.kinetic_ && this.kinetic_.end()) { + var distance = this.kinetic_.getDistance(); + var angle = this.kinetic_.getAngle(); + var center = view2D.getCenter(); + goog.asserts.assert(goog.isDef(center)); + this.kineticPreRenderFn_ = this.kinetic_.pan(center); + map.beforeRender(this.kineticPreRenderFn_); + var centerpx = map.getPixelFromCoordinate(center); + var dest = map.getCoordinateFromPixel([ + centerpx[0] - distance * Math.cos(angle), + centerpx[1] - distance * Math.sin(angle) + ]); + dest = view2D.constrainCenter(dest); + view2D.setCenter(dest); + } + map.render(); + return false; + } else { + this.lastCentroid = null; + return true; + } +}; + + +/** + * @inheritDoc + */ +ol.interaction.TouchPan.prototype.handleTouchStart = + function(mapBrowserEvent) { + if (this.targetTouches.length > 0) { + var map = mapBrowserEvent.map; + var view2D = map.getView().getView2D(); + goog.asserts.assertInstanceof(view2D, ol.View2D); + this.lastCentroid = null; + map.render(); + if (!goog.isNull(this.kineticPreRenderFn_) && + map.removePreRenderFunction(this.kineticPreRenderFn_)) { + view2D.setCenter(mapBrowserEvent.frameState.view2DState.center); + this.kineticPreRenderFn_ = null; + } + if (this.kinetic_) { + this.kinetic_.begin(); + } + // No kinetic as soon as more than one fingers on the screen is + // detected. This is to prevent nasty pans after pinch. + this.noKinetic_ = this.targetTouches.length > 1; + return true; + } else { + return false; + } +}; diff --git a/float-no-zero/ol/ol/interaction/touchrotate.exports b/float-no-zero/ol/ol/interaction/touchrotate.exports new file mode 100644 index 0000000000..b7045b88ab --- /dev/null +++ b/float-no-zero/ol/ol/interaction/touchrotate.exports @@ -0,0 +1 @@ +@exportSymbol ol.interaction.TouchRotate diff --git a/float-no-zero/ol/ol/interaction/touchrotateinteraction.js b/float-no-zero/ol/ol/interaction/touchrotateinteraction.js new file mode 100644 index 0000000000..af99eb3feb --- /dev/null +++ b/float-no-zero/ol/ol/interaction/touchrotateinteraction.js @@ -0,0 +1,155 @@ +// FIXME works for View2D only + +goog.provide('ol.interaction.TouchRotate'); + +goog.require('goog.asserts'); +goog.require('goog.style'); +goog.require('ol.Coordinate'); +goog.require('ol.interaction.Interaction'); +goog.require('ol.interaction.Touch'); + + +/** + * @define {number} Animation duration. + */ +ol.interaction.TOUCHROTATE_ANIMATION_DURATION = 250; + + + +/** + * Allows the user to rotate the map by twisting with two fingers + * on a touch screen. + * @constructor + * @extends {ol.interaction.Touch} + * @param {olx.interaction.TouchRotateOptions=} opt_options Options. + * @todo stability experimental + */ +ol.interaction.TouchRotate = function(opt_options) { + + goog.base(this); + + var options = goog.isDef(opt_options) ? opt_options : {}; + + /** + * @private + * @type {ol.Coordinate} + */ + this.anchor_ = null; + + /** + * @private + * @type {number|undefined} + */ + this.lastAngle_ = undefined; + + /** + * @private + * @type {boolean} + */ + this.rotating_ = false; + + /** + * @private + * @type {number} + */ + this.rotationDelta_ = 0.0; + + /** + * @private + * @type {number} + */ + this.threshold_ = goog.isDef(options.threshold) ? options.threshold : 0.3; + +}; +goog.inherits(ol.interaction.TouchRotate, ol.interaction.Touch); + + +/** + * @inheritDoc + */ +ol.interaction.TouchRotate.prototype.handleTouchMove = + function(mapBrowserEvent) { + goog.asserts.assert(this.targetTouches.length >= 2); + var rotationDelta = 0.0; + + var touch0 = this.targetTouches[0]; + var touch1 = this.targetTouches[1]; + + // angle between touches + var angle = Math.atan2( + touch1.clientY - touch0.clientY, + touch1.clientX - touch0.clientX); + + if (goog.isDef(this.lastAngle_)) { + var delta = angle - this.lastAngle_; + this.rotationDelta_ += delta; + if (!this.rotating_ && + Math.abs(this.rotationDelta_) > this.threshold_) { + this.rotating_ = true; + } + rotationDelta = delta; + } + this.lastAngle_ = angle; + + var map = mapBrowserEvent.map; + + // rotate anchor point. + // FIXME: should be the intersection point between the lines: + // touch0,touch1 and previousTouch0,previousTouch1 + var viewportPosition = goog.style.getClientPosition(map.getViewport()); + var centroid = ol.interaction.Touch.centroid(this.targetTouches); + centroid[0] -= viewportPosition.x; + centroid[1] -= viewportPosition.y; + this.anchor_ = map.getCoordinateFromPixel(centroid); + + // rotate + if (this.rotating_) { + // FIXME works for View2D only + var view = map.getView().getView2D(); + var view2DState = view.getView2DState(); + map.render(); + ol.interaction.Interaction.rotateWithoutConstraints(map, view, + view2DState.rotation + rotationDelta, this.anchor_); + } +}; + + +/** + * @inheritDoc + */ +ol.interaction.TouchRotate.prototype.handleTouchEnd = + function(mapBrowserEvent) { + if (this.targetTouches.length < 2) { + var map = mapBrowserEvent.map; + // FIXME works for View2D only + var view = map.getView().getView2D(); + var view2DState = view.getView2DState(); + if (this.rotating_) { + ol.interaction.Interaction.rotate( + map, view, view2DState.rotation, this.anchor_, + ol.interaction.TOUCHROTATE_ANIMATION_DURATION); + } + return false; + } else { + return true; + } +}; + + +/** + * @inheritDoc + */ +ol.interaction.TouchRotate.prototype.handleTouchStart = + function(mapBrowserEvent) { + if (this.targetTouches.length >= 2) { + var map = mapBrowserEvent.map; + this.anchor_ = null; + this.lastAngle_ = undefined; + this.rotating_ = false; + this.rotationDelta_ = 0.0; + map.render(); + return true; + } else { + return false; + } +}; diff --git a/float-no-zero/ol/ol/interaction/touchzoom.exports b/float-no-zero/ol/ol/interaction/touchzoom.exports new file mode 100644 index 0000000000..0e62f50746 --- /dev/null +++ b/float-no-zero/ol/ol/interaction/touchzoom.exports @@ -0,0 +1 @@ +@exportSymbol ol.interaction.TouchZoom diff --git a/float-no-zero/ol/ol/interaction/touchzoominteraction.js b/float-no-zero/ol/ol/interaction/touchzoominteraction.js new file mode 100644 index 0000000000..0ee00db57f --- /dev/null +++ b/float-no-zero/ol/ol/interaction/touchzoominteraction.js @@ -0,0 +1,137 @@ +// FIXME works for View2D only + +goog.provide('ol.interaction.TouchZoom'); + +goog.require('goog.asserts'); +goog.require('goog.style'); +goog.require('ol.Coordinate'); +goog.require('ol.interaction.Interaction'); +goog.require('ol.interaction.Touch'); + + + +/** + * Allows the user to zoom the map by pinching with two fingers + * on a touch screen. + * @constructor + * @extends {ol.interaction.Touch} + * @param {olx.interaction.TouchZoomOptions=} opt_options Options. + * @todo stability experimental + */ +ol.interaction.TouchZoom = function(opt_options) { + + var options = goog.isDef(opt_options) ? opt_options : {}; + + goog.base(this); + + /** + * @private + * @type {ol.Coordinate} + */ + this.anchor_ = null; + + /** + * @private + * @type {number} + */ + this.duration_ = goog.isDef(options.duration) ? options.duration : 400; + + /** + * @private + * @type {number|undefined} + */ + this.lastDistance_ = undefined; + + /** + * @private + * @type {number} + */ + this.lastScaleDelta_ = 1; + +}; +goog.inherits(ol.interaction.TouchZoom, ol.interaction.Touch); + + +/** + * @inheritDoc + */ +ol.interaction.TouchZoom.prototype.handleTouchMove = + function(mapBrowserEvent) { + goog.asserts.assert(this.targetTouches.length >= 2); + var scaleDelta = 1.0; + + var touch0 = this.targetTouches[0]; + var touch1 = this.targetTouches[1]; + var dx = touch0.clientX - touch1.clientX; + var dy = touch0.clientY - touch1.clientY; + + // distance between touches + var distance = Math.sqrt(dx * dx + dy * dy); + + if (goog.isDef(this.lastDistance_)) { + scaleDelta = this.lastDistance_ / distance; + } + this.lastDistance_ = distance; + if (scaleDelta != 1.0) { + this.lastScaleDelta_ = scaleDelta; + } + + var map = mapBrowserEvent.map; + // FIXME works for View2D only + var view = map.getView().getView2D(); + var view2DState = view.getView2DState(); + + // scale anchor point. + var viewportPosition = goog.style.getClientPosition(map.getViewport()); + var centroid = ol.interaction.Touch.centroid(this.targetTouches); + centroid[0] -= viewportPosition.x; + centroid[1] -= viewportPosition.y; + this.anchor_ = map.getCoordinateFromPixel(centroid); + + // scale, bypass the resolution constraint + map.render(); + ol.interaction.Interaction.zoomWithoutConstraints( + map, view, view2DState.resolution * scaleDelta, this.anchor_); + +}; + + +/** + * @inheritDoc + */ +ol.interaction.TouchZoom.prototype.handleTouchEnd = + function(mapBrowserEvent) { + if (this.targetTouches.length < 2) { + var map = mapBrowserEvent.map; + // FIXME works for View2D only + var view = map.getView().getView2D(); + var view2DState = view.getView2DState(); + // Zoom to final resolution, with an animation, and provide a + // direction not to zoom out/in if user was pinching in/out. + // Direction is > 0 if pinching out, and < 0 if pinching in. + var direction = this.lastScaleDelta_ - 1; + ol.interaction.Interaction.zoom(map, view, view2DState.resolution, + this.anchor_, this.duration_, direction); + return false; + } else { + return true; + } +}; + + +/** + * @inheritDoc + */ +ol.interaction.TouchZoom.prototype.handleTouchStart = + function(mapBrowserEvent) { + if (this.targetTouches.length >= 2) { + var map = mapBrowserEvent.map; + this.anchor_ = null; + this.lastDistance_ = undefined; + this.lastScaleDelta_ = 1; + map.render(); + return true; + } else { + return false; + } +}; diff --git a/float-no-zero/ol/ol/iview.js b/float-no-zero/ol/ol/iview.js new file mode 100644 index 0000000000..37d828d3e2 --- /dev/null +++ b/float-no-zero/ol/ol/iview.js @@ -0,0 +1,34 @@ +goog.provide('ol.IView'); + +goog.require('ol.IView2D'); +goog.require('ol.IView3D'); + + + +/** + * Interface for views. + * @interface + */ +ol.IView = function() { +}; + + +/** + * @return {ol.IView2D} View2D. + */ +ol.IView.prototype.getView2D = function() { +}; + + +/** + * @return {ol.IView3D} View3D. + */ +ol.IView.prototype.getView3D = function() { +}; + + +/** + * @return {boolean} Is defined. + */ +ol.IView.prototype.isDef = function() { +}; diff --git a/float-no-zero/ol/ol/iview2d.js b/float-no-zero/ol/ol/iview2d.js new file mode 100644 index 0000000000..0969e6d696 --- /dev/null +++ b/float-no-zero/ol/ol/iview2d.js @@ -0,0 +1,68 @@ +goog.provide('ol.IView2D'); +goog.provide('ol.View2DState'); + +goog.require('ol.Coordinate'); + + +/** + * @typedef {{center: ol.Coordinate, + * projection: ol.proj.Projection, + * resolution: number, + * rotation: number}} + */ +ol.View2DState; + + + +/** + * Interface for views. + * @interface + */ +ol.IView2D = function() { +}; + + +/** + * @return {ol.Coordinate|undefined} Map center. + * @todo stability experimental + */ +ol.IView2D.prototype.getCenter = function() { +}; + + +/** + * @return {ol.proj.Projection|undefined} Map projection. + * @todo stability experimental + */ +ol.IView2D.prototype.getProjection = function() { +}; + + +/** + * @return {number|undefined} Map resolution. + * @todo stability experimental + */ +ol.IView2D.prototype.getResolution = function() { +}; + + +/** + * @return {number|undefined} Map rotation. + * @todo stability experimental + */ +ol.IView2D.prototype.getRotation = function() { +}; + + +/** + * @return {ol.View2DState} View2D state. + */ +ol.IView2D.prototype.getView2DState = function() { +}; + + +/** + * @return {boolean} Is defined. + */ +ol.IView2D.prototype.isDef = function() { +}; diff --git a/float-no-zero/ol/ol/iview3d.js b/float-no-zero/ol/ol/iview3d.js new file mode 100644 index 0000000000..b54f7d7e42 --- /dev/null +++ b/float-no-zero/ol/ol/iview3d.js @@ -0,0 +1,17 @@ +goog.provide('ol.IView3D'); + + + +/** + * Interface for views. + * @interface + */ +ol.IView3D = function() { +}; + + +/** + * @return {boolean} Is defined. + */ +ol.IView3D.prototype.isDef = function() { +}; diff --git a/float-no-zero/ol/ol/kinetic.exports b/float-no-zero/ol/ol/kinetic.exports new file mode 100644 index 0000000000..aa3f543286 --- /dev/null +++ b/float-no-zero/ol/ol/kinetic.exports @@ -0,0 +1 @@ +@exportSymbol ol.Kinetic diff --git a/float-no-zero/ol/ol/kinetic.js b/float-no-zero/ol/ol/kinetic.js new file mode 100644 index 0000000000..56833aed1b --- /dev/null +++ b/float-no-zero/ol/ol/kinetic.js @@ -0,0 +1,152 @@ + +goog.provide('ol.Kinetic'); + +goog.require('ol.Coordinate'); +goog.require('ol.PreRenderFunction'); +goog.require('ol.animation'); + + + +/** + * @constructor + * @param {number} decay Rate of decay (must be negative). + * @param {number} minVelocity Minimum velocity (pixels/millisecond). + * @param {number} delay Delay to consider to calculate the kinetic + * initial values (milliseconds). + * @struct + * @todo stability experimental + */ +ol.Kinetic = function(decay, minVelocity, delay) { + + /** + * @private + * @type {number} + */ + this.decay_ = decay; + + /** + * @private + * @type {number} + */ + this.minVelocity_ = minVelocity; + + /** + * @private + * @type {number} + */ + this.delay_ = delay; + + /** + * @private + * @type {Array.} + */ + this.points_ = []; + + /** + * @private + * @type {number} + */ + this.angle_ = 0; + + /** + * @private + * @type {number} + */ + this.initialVelocity_ = 0; +}; + + +/** + * FIXME empty description for jsdoc + */ +ol.Kinetic.prototype.begin = function() { + this.points_.length = 0; + this.angle_ = 0; + this.initialVelocity_ = 0; +}; + + +/** + * @param {number} x X. + * @param {number} y Y. + */ +ol.Kinetic.prototype.update = function(x, y) { + this.points_.push(x, y, goog.now()); +}; + + +/** + * @return {boolean} Whether we should do kinetic animation. + */ +ol.Kinetic.prototype.end = function() { + var delay = goog.now() - this.delay_; + var lastIndex = this.points_.length - 3; + if (this.points_[lastIndex + 2] < delay) { + // the user stopped panning before releasing the map + return false; + } + var firstIndex = lastIndex - 3; + while (firstIndex >= 0 && this.points_[firstIndex + 2] > delay) { + firstIndex -= 3; + } + if (firstIndex >= 0) { + var duration = this.points_[lastIndex + 2] - this.points_[firstIndex + 2]; + var dx = this.points_[lastIndex] - this.points_[firstIndex]; + var dy = this.points_[lastIndex + 1] - this.points_[firstIndex + 1]; + this.angle_ = Math.atan2(dy, dx); + this.initialVelocity_ = Math.sqrt(dx * dx + dy * dy) / duration; + return this.initialVelocity_ > this.minVelocity_; + } + return false; +}; + + +/** + * @param {ol.Coordinate} source Source coordinate for the animation. + * @return {ol.PreRenderFunction} Pre-render function for kinetic animation. + */ +ol.Kinetic.prototype.pan = function(source) { + var decay = this.decay_; + var initialVelocity = this.initialVelocity_; + var minVelocity = this.minVelocity_; + var duration = this.getDuration_(); + var easingFunction = ( + /** + * @param {number} t T. + * @return {number} Easing. + */ + function(t) { + return initialVelocity * (Math.exp((decay * t) * duration) - 1) / + (minVelocity - initialVelocity); + }); + return ol.animation.pan({ + source: source, + duration: duration, + easing: easingFunction + }); +}; + + +/** + * @private + * @return {number} Duration of animation (milliseconds). + */ +ol.Kinetic.prototype.getDuration_ = function() { + return Math.log(this.minVelocity_ / this.initialVelocity_) / this.decay_; +}; + + +/** + * @return {number} Total distance travelled (pixels). + */ +ol.Kinetic.prototype.getDistance = function() { + return (this.minVelocity_ - this.initialVelocity_) / this.decay_; +}; + + +/** + * @return {number} Angle of the kinetic panning animation (radians). + */ +ol.Kinetic.prototype.getAngle = function() { + return this.angle_; +}; diff --git a/float-no-zero/ol/ol/layer/heatmaplayer.exports b/float-no-zero/ol/ol/layer/heatmaplayer.exports new file mode 100644 index 0000000000..be2de928b7 --- /dev/null +++ b/float-no-zero/ol/ol/layer/heatmaplayer.exports @@ -0,0 +1 @@ +@exportSymbol ol.layer.Heatmap diff --git a/float-no-zero/ol/ol/layer/heatmaplayer.js b/float-no-zero/ol/ol/layer/heatmaplayer.js new file mode 100644 index 0000000000..c0a567c1bd --- /dev/null +++ b/float-no-zero/ol/ol/layer/heatmaplayer.js @@ -0,0 +1,195 @@ +// FIXME feature weight property +goog.provide('ol.layer.Heatmap'); + +goog.require('goog.asserts'); +goog.require('goog.dom'); +goog.require('goog.dom.TagName'); +goog.require('goog.events'); +goog.require('ol.Object'); +goog.require('ol.layer.Vector'); +goog.require('ol.render.EventType'); +goog.require('ol.style.Icon'); +goog.require('ol.style.Style'); + + +/** + * @enum {string} + */ +ol.layer.HeatmapLayerProperty = { + GRADIENT: 'gradient' +}; + + + +/** + * @constructor + * @extends {ol.layer.Vector} + * @param {olx.layer.HeatmapOptions=} opt_options Options. + * @todo stability experimental + */ +ol.layer.Heatmap = function(opt_options) { + var options = goog.isDef(opt_options) ? opt_options : {}; + + goog.base(this, /** @type {olx.layer.VectorOptions} */ (options)); + + /** + * @private + * @type {Uint8ClampedArray} + */ + this.gradient_ = null; + + goog.events.listen(this, + ol.Object.getChangeEventType(ol.layer.HeatmapLayerProperty.GRADIENT), + this.handleGradientChanged_, false, this); + + this.setGradient(goog.isDef(options.gradient) ? + options.gradient : ol.layer.Heatmap.DEFAULT_GRADIENT); + + var radius = goog.isDef(options.radius) ? options.radius : 8; + var blur = goog.isDef(options.blur) ? options.blur : 15; + var shadow = goog.isDef(options.shadow) ? options.shadow : 250; + + var style = new ol.style.Style({ + image: ol.layer.Heatmap.createIcon_(radius, blur, shadow) + }); + + // FIXME: styles are immutable + // /** + // * @param {ol.Feature} feature + // * @param {number} resolution + // * @return {number} weight + // */ + // var weightFunction = function(feature, resolution) { + // var weight = /** @type {number} */ (feature.get('weight')); + // return goog.isDef(weight) ? weight : 1; + // }; + // + // var styleArray = [style]; + // this.setStyle(function(feature, resolution) { + // var image = style.getImage(); + // image.setOpacity(weightFunction(feature, resolution)); + // return styleArray; + // }); + + this.setStyle(style); + + goog.events.listen(this, ol.render.EventType.RENDER, + this.handleRender_, false, this); + +}; +goog.inherits(ol.layer.Heatmap, ol.layer.Vector); + + +/** + * @const + * @type {Array.} + */ +ol.layer.Heatmap.DEFAULT_GRADIENT = ['#00f', '#0ff', '#0f0', '#ff0', '#f00']; + + +/** + * @param {Array.} colors + * @return {Uint8ClampedArray} + * @private + */ +ol.layer.Heatmap.createGradient_ = function(colors) { + var canvas = goog.dom.createElement(goog.dom.TagName.CANVAS); + var context = canvas.getContext('2d'); + var width = 1; + var height = 256; + canvas.width = width; + canvas.height = height; + + var gradient = context.createLinearGradient(0, 0, width, height); + var step = 1 / colors.length; + for (var i = 0, ii = colors.length; i < ii; ++i) { + gradient.addColorStop(i * step, colors[i]); + } + + context.fillStyle = gradient; + context.fillRect(0, 0, width, height); + + return context.getImageData(0, 0, width, height).data; +}; + + +/** + * @param {number} radius Radius size in pixel. + * @param {number} blur Blur size in pixel. + * @param {number} shadow Shadow offset size in pixel. + * @return {ol.style.Icon} icon + * @private + */ +ol.layer.Heatmap.createIcon_ = function(radius, blur, shadow) { + var canvas = /** @type {HTMLCanvasElement} */ + (goog.dom.createElement(goog.dom.TagName.CANVAS)); + var context = canvas.getContext('2d'); + var halfSize = radius + blur + 1; + canvas.width = canvas.height = halfSize * 2; + context.shadowOffsetX = context.shadowOffsetY = shadow; + context.shadowBlur = blur; + context.shadowColor = '#000'; + context.beginPath(); + var center = halfSize - shadow; + context.arc(center, center, radius, 0, Math.PI * 2, true); + context.fill(); + return new ol.style.Icon({ + src: canvas.toDataURL() + }); +}; + + +/** + * @return {Array.} Colors. + */ +ol.layer.Heatmap.prototype.getGradient = function() { + return /** @type {Array.} */ ( + this.get(ol.layer.HeatmapLayerProperty.GRADIENT)); +}; +goog.exportProperty( + ol.layer.Heatmap.prototype, + 'getGradient', + ol.layer.Heatmap.prototype.getGradient); + + +/** + * @private + */ +ol.layer.Heatmap.prototype.handleGradientChanged_ = function() { + this.gradient_ = ol.layer.Heatmap.createGradient_(this.getGradient()); +}; + + +/** + * @param {ol.render.Event} event Post compose event + * @private + */ +ol.layer.Heatmap.prototype.handleRender_ = function(event) { + goog.asserts.assert(event.type == ol.render.EventType.RENDER); + var context = event.context; + var canvas = context.canvas; + var image = context.getImageData(0, 0, canvas.width, canvas.height); + var view8 = image.data; + var i, ii, alpha, offset; + for (i = 0, ii = view8.length; i < ii; i += 4) { + alpha = view8[i + 3] * 4; + if (alpha) { + view8[i] = this.gradient_[alpha]; + view8[i + 1] = this.gradient_[alpha + 1]; + view8[i + 2] = this.gradient_[alpha + 2]; + } + } + context.putImageData(image, 0, 0); +}; + + +/** + * @param {Array.} colors Gradient. + */ +ol.layer.Heatmap.prototype.setGradient = function(colors) { + this.set(ol.layer.HeatmapLayerProperty.GRADIENT, colors); +}; +goog.exportProperty( + ol.layer.Heatmap.prototype, + 'setGradient', + ol.layer.Heatmap.prototype.setGradient); diff --git a/float-no-zero/ol/ol/layer/imagelayer.exports b/float-no-zero/ol/ol/layer/imagelayer.exports new file mode 100644 index 0000000000..0027269144 --- /dev/null +++ b/float-no-zero/ol/ol/layer/imagelayer.exports @@ -0,0 +1 @@ +@exportSymbol ol.layer.Image diff --git a/float-no-zero/ol/ol/layer/imagelayer.js b/float-no-zero/ol/ol/layer/imagelayer.js new file mode 100644 index 0000000000..9f8d1bf4e3 --- /dev/null +++ b/float-no-zero/ol/ol/layer/imagelayer.js @@ -0,0 +1,16 @@ +goog.provide('ol.layer.Image'); + +goog.require('ol.layer.Layer'); + + + +/** + * @constructor + * @extends {ol.layer.Layer} + * @param {olx.layer.LayerOptions} options Layer options. + * @todo stability experimental + */ +ol.layer.Image = function(options) { + goog.base(this, options); +}; +goog.inherits(ol.layer.Image, ol.layer.Layer); diff --git a/float-no-zero/ol/ol/layer/layer.exports b/float-no-zero/ol/ol/layer/layer.exports new file mode 100644 index 0000000000..1bc8b440a7 --- /dev/null +++ b/float-no-zero/ol/ol/layer/layer.exports @@ -0,0 +1,2 @@ +@exportSymbol ol.layer.Layer +@exportProperty ol.layer.Layer.prototype.getSource diff --git a/float-no-zero/ol/ol/layer/layer.js b/float-no-zero/ol/ol/layer/layer.js new file mode 100644 index 0000000000..4ab377a0a4 --- /dev/null +++ b/float-no-zero/ol/ol/layer/layer.js @@ -0,0 +1,93 @@ +goog.provide('ol.layer.Layer'); + +goog.require('goog.asserts'); +goog.require('goog.events'); +goog.require('goog.events.EventType'); +goog.require('goog.object'); +goog.require('ol.layer.Base'); +goog.require('ol.source.Source'); + + + +/** + * @constructor + * @extends {ol.layer.Base} + * @param {olx.layer.LayerOptions} options Layer options. + * @todo stability experimental + * @todo observable brightness {number} the brightness of the layer + * @todo observable contrast {number} the contrast of the layer + * @todo observable hue {number} the hue of the layer + * @todo observable opacity {number} the opacity of the layer + * @todo observable saturation {number} the saturation of the layer + * @todo observable visible {boolean} the visiblity of the layer + * @todo observable maxResolution {number} the maximum resolution of the layer + * @todo observable minResolution {number} the minimum resolution of the layer + */ +ol.layer.Layer = function(options) { + + var baseOptions = goog.object.clone(options); + delete baseOptions.source; + + goog.base(this, /** @type {olx.layer.LayerOptions} */ (baseOptions)); + + /** + * @private + * @type {ol.source.Source} + */ + this.source_ = options.source; + + goog.events.listen(this.source_, goog.events.EventType.CHANGE, + this.handleSourceChange_, false, this); + +}; +goog.inherits(ol.layer.Layer, ol.layer.Base); + + +/** + * @inheritDoc + */ +ol.layer.Layer.prototype.getLayersArray = function(opt_array) { + var array = (goog.isDef(opt_array)) ? opt_array : []; + array.push(this); + return array; +}; + + +/** + * @inheritDoc + */ +ol.layer.Layer.prototype.getLayerStatesArray = function(opt_obj) { + var obj = (goog.isDef(opt_obj)) ? opt_obj : { + layers: [], + layerStates: [] + }; + goog.asserts.assert(obj.layers.length === obj.layerStates.length); + obj.layers.push(this); + obj.layerStates.push(this.getLayerState()); + return obj; +}; + + +/** + * @return {ol.source.Source} Source. + * @todo stability experimental + */ +ol.layer.Layer.prototype.getSource = function() { + return this.source_; +}; + + +/** + * @inheritDoc + */ +ol.layer.Layer.prototype.getSourceState = function() { + return this.getSource().getState(); +}; + + +/** + * @private + */ +ol.layer.Layer.prototype.handleSourceChange_ = function() { + this.dispatchChangeEvent(); +}; diff --git a/float-no-zero/ol/ol/layer/layer.jsdoc b/float-no-zero/ol/ol/layer/layer.jsdoc new file mode 100644 index 0000000000..29e9851de5 --- /dev/null +++ b/float-no-zero/ol/ol/layer/layer.jsdoc @@ -0,0 +1,3 @@ +/** + * @namespace ol.layer + */ diff --git a/float-no-zero/ol/ol/layer/layerbase.js b/float-no-zero/ol/ol/layer/layerbase.js new file mode 100644 index 0000000000..46bc1b7d2c --- /dev/null +++ b/float-no-zero/ol/ol/layer/layerbase.js @@ -0,0 +1,355 @@ +goog.provide('ol.layer.Base'); +goog.provide('ol.layer.LayerProperty'); +goog.provide('ol.layer.LayerState'); + +goog.require('goog.events'); +goog.require('goog.math'); +goog.require('goog.object'); +goog.require('ol.Object'); +goog.require('ol.source.State'); + + +/** + * @enum {string} + */ +ol.layer.LayerProperty = { + BRIGHTNESS: 'brightness', + CONTRAST: 'contrast', + HUE: 'hue', + OPACITY: 'opacity', + SATURATION: 'saturation', + VISIBLE: 'visible', + MAX_RESOLUTION: 'maxResolution', + MIN_RESOLUTION: 'minResolution' +}; + + +/** + * @typedef {{brightness: number, + * contrast: number, + * hue: number, + * opacity: number, + * saturation: number, + * sourceState: ol.source.State, + * visible: boolean, + * maxResolution: number, + * minResolution: number}} + */ +ol.layer.LayerState; + + + +/** + * @constructor + * @extends {ol.Object} + * @param {olx.layer.BaseOptions} options Layer options. + */ +ol.layer.Base = function(options) { + + goog.base(this); + + var values = goog.object.clone(options); + + /** @type {number} */ + values.brightness = goog.isDef(values.brightness) ? values.brightness : 0; + /** @type {number} */ + values.contrast = goog.isDef(values.contrast) ? values.contrast : 1; + /** @type {number} */ + values.hue = goog.isDef(values.hue) ? values.hue : 0; + /** @type {number} */ + values.opacity = goog.isDef(values.opacity) ? values.opacity : 1; + /** @type {number} */ + values.saturation = goog.isDef(values.saturation) ? values.saturation : 1; + /** @type {boolean} */ + values.visible = goog.isDef(values.visible) ? values.visible : true; + /** @type {number} */ + values.maxResolution = goog.isDef(values.maxResolution) ? + values.maxResolution : Infinity; + /** @type {number} */ + values.minResolution = goog.isDef(values.minResolution) ? + values.minResolution : 0; + + this.setValues(values); +}; +goog.inherits(ol.layer.Base, ol.Object); + + +/** + * @return {number|undefined} Brightness. + */ +ol.layer.Base.prototype.getBrightness = function() { + return /** @type {number|undefined} */ ( + this.get(ol.layer.LayerProperty.BRIGHTNESS)); +}; +goog.exportProperty( + ol.layer.Base.prototype, + 'getBrightness', + ol.layer.Base.prototype.getBrightness); + + +/** + * @return {number|undefined} Contrast. + */ +ol.layer.Base.prototype.getContrast = function() { + return /** @type {number|undefined} */ ( + this.get(ol.layer.LayerProperty.CONTRAST)); +}; +goog.exportProperty( + ol.layer.Base.prototype, + 'getContrast', + ol.layer.Base.prototype.getContrast); + + +/** + * @return {number|undefined} Hue. + */ +ol.layer.Base.prototype.getHue = function() { + return /** @type {number|undefined} */ (this.get(ol.layer.LayerProperty.HUE)); +}; +goog.exportProperty( + ol.layer.Base.prototype, + 'getHue', + ol.layer.Base.prototype.getHue); + + +/** + * @return {ol.layer.LayerState} Layer state. + */ +ol.layer.Base.prototype.getLayerState = function() { + var brightness = this.getBrightness(); + var contrast = this.getContrast(); + var hue = this.getHue(); + var opacity = this.getOpacity(); + var saturation = this.getSaturation(); + var sourceState = this.getSourceState(); + var visible = this.getVisible(); + var maxResolution = this.getMaxResolution(); + var minResolution = this.getMinResolution(); + return { + brightness: goog.isDef(brightness) ? goog.math.clamp(brightness, -1, 1) : 0, + contrast: goog.isDef(contrast) ? Math.max(contrast, 0) : 1, + hue: goog.isDef(hue) ? hue : 0, + opacity: goog.isDef(opacity) ? goog.math.clamp(opacity, 0, 1) : 1, + saturation: goog.isDef(saturation) ? Math.max(saturation, 0) : 1, + sourceState: sourceState, + visible: goog.isDef(visible) ? !!visible : true, + maxResolution: goog.isDef(maxResolution) ? maxResolution : Infinity, + minResolution: goog.isDef(minResolution) ? Math.max(minResolution, 0) : 0 + }; +}; + + +/** + * @param {Array.=} opt_array Array of layers (to be + * modified in place). + * @return {Array.} Array of layers. + */ +ol.layer.Base.prototype.getLayersArray = goog.abstractMethod; + + +/** + * @param {{ + * layers: Array., + * layerStates: Array.}=} opt_obj Object that store + * both the layers and the layerStates (to be modified in place). + * @return {{ + * layers: Array., + * layerStates: Array.}} Object that store both the + * layers and the layerStates. + */ +ol.layer.Base.prototype.getLayerStatesArray = goog.abstractMethod; + + +/** + * @return {number|undefined} MaxResolution. + */ +ol.layer.Base.prototype.getMaxResolution = function() { + return /** @type {number|undefined} */ ( + this.get(ol.layer.LayerProperty.MAX_RESOLUTION)); +}; +goog.exportProperty( + ol.layer.Base.prototype, + 'getMaxResolution', + ol.layer.Base.prototype.getMaxResolution); + + +/** + * @return {number|undefined} MinResolution. + */ +ol.layer.Base.prototype.getMinResolution = function() { + return /** @type {number|undefined} */ ( + this.get(ol.layer.LayerProperty.MIN_RESOLUTION)); +}; +goog.exportProperty( + ol.layer.Base.prototype, + 'getMinResolution', + ol.layer.Base.prototype.getMinResolution); + + +/** + * @return {number|undefined} Opacity. + */ +ol.layer.Base.prototype.getOpacity = function() { + return /** @type {number|undefined} */ ( + this.get(ol.layer.LayerProperty.OPACITY)); +}; +goog.exportProperty( + ol.layer.Base.prototype, + 'getOpacity', + ol.layer.Base.prototype.getOpacity); + + +/** + * @return {number|undefined} Saturation. + */ +ol.layer.Base.prototype.getSaturation = function() { + return /** @type {number|undefined} */ ( + this.get(ol.layer.LayerProperty.SATURATION)); +}; +goog.exportProperty( + ol.layer.Base.prototype, + 'getSaturation', + ol.layer.Base.prototype.getSaturation); + + +/** + * @return {ol.source.State} Source state. + */ +ol.layer.Base.prototype.getSourceState = goog.abstractMethod; + + +/** + * @return {boolean|undefined} Visible. + */ +ol.layer.Base.prototype.getVisible = function() { + return /** @type {boolean|undefined} */ ( + this.get(ol.layer.LayerProperty.VISIBLE)); +}; +goog.exportProperty( + ol.layer.Base.prototype, + 'getVisible', + ol.layer.Base.prototype.getVisible); + + +/** + * Adjust the layer brightness. A value of -1 will render the layer completely + * black. A value of 0 will leave the brightness unchanged. A value of 1 will + * render the layer completely white. Other values are linear multipliers on + * the effect (values are clamped between -1 and 1). + * + * The filter effects draft [1] says the brightness function is supposed to + * render 0 black, 1 unchanged, and all other values as a linear multiplier. + * + * The current WebKit implementation clamps values between -1 (black) and 1 + * (white) [2]. There is a bug open to change the filter effect spec [3]. + * + * TODO: revisit this if the spec is still unmodified before we release + * + * [1] https://dvcs.w3.org/hg/FXTF/raw-file/tip/filters/index.html + * [2] https://github.com/WebKit/webkit/commit/8f4765e569 + * [3] https://www.w3.org/Bugs/Public/show_bug.cgi?id=15647 + * + * @param {number|undefined} brightness Brightness. + */ +ol.layer.Base.prototype.setBrightness = function(brightness) { + this.set(ol.layer.LayerProperty.BRIGHTNESS, brightness); +}; +goog.exportProperty( + ol.layer.Base.prototype, + 'setBrightness', + ol.layer.Base.prototype.setBrightness); + + +/** + * Adjust the layer contrast. A value of 0 will render the layer completely + * grey. A value of 1 will leave the contrast unchanged. Other values are + * linear multipliers on the effect (and values over 1 are permitted). + * + * @param {number|undefined} contrast Contrast. + */ +ol.layer.Base.prototype.setContrast = function(contrast) { + this.set(ol.layer.LayerProperty.CONTRAST, contrast); +}; +goog.exportProperty( + ol.layer.Base.prototype, + 'setContrast', + ol.layer.Base.prototype.setContrast); + + +/** + * Apply a hue-rotation to the layer. A value of 0 will leave the hue + * unchanged. Other values are radians around the color circle. + * @param {number|undefined} hue Hue. + */ +ol.layer.Base.prototype.setHue = function(hue) { + this.set(ol.layer.LayerProperty.HUE, hue); +}; +goog.exportProperty( + ol.layer.Base.prototype, + 'setHue', + ol.layer.Base.prototype.setHue); + + +/** + * @param {number|undefined} maxResolution MaxResolution. + */ +ol.layer.Base.prototype.setMaxResolution = function(maxResolution) { + this.set(ol.layer.LayerProperty.MAX_RESOLUTION, maxResolution); +}; +goog.exportProperty( + ol.layer.Base.prototype, + 'setMaxResolution', + ol.layer.Base.prototype.setMaxResolution); + + +/** + * @param {number|undefined} minResolution MinResolution. + */ +ol.layer.Base.prototype.setMinResolution = function(minResolution) { + this.set(ol.layer.LayerProperty.MIN_RESOLUTION, minResolution); +}; +goog.exportProperty( + ol.layer.Base.prototype, + 'setMinResolution', + ol.layer.Base.prototype.setMinResolution); + + +/** + * @param {number|undefined} opacity Opacity. + */ +ol.layer.Base.prototype.setOpacity = function(opacity) { + this.set(ol.layer.LayerProperty.OPACITY, opacity); +}; +goog.exportProperty( + ol.layer.Base.prototype, + 'setOpacity', + ol.layer.Base.prototype.setOpacity); + + +/** + * Adjust layer saturation. A value of 0 will render the layer completely + * unsaturated. A value of 1 will leave the saturation unchanged. Other + * values are linear multipliers of the effect (and values over 1 are + * permitted). + * + * @param {number|undefined} saturation Saturation. + */ +ol.layer.Base.prototype.setSaturation = function(saturation) { + this.set(ol.layer.LayerProperty.SATURATION, saturation); +}; +goog.exportProperty( + ol.layer.Base.prototype, + 'setSaturation', + ol.layer.Base.prototype.setSaturation); + + +/** + * @param {boolean|undefined} visible Visible. + */ +ol.layer.Base.prototype.setVisible = function(visible) { + this.set(ol.layer.LayerProperty.VISIBLE, visible); +}; +goog.exportProperty( + ol.layer.Base.prototype, + 'setVisible', + ol.layer.Base.prototype.setVisible); diff --git a/float-no-zero/ol/ol/layer/layergroup.exports b/float-no-zero/ol/ol/layer/layergroup.exports new file mode 100644 index 0000000000..54bd439663 --- /dev/null +++ b/float-no-zero/ol/ol/layer/layergroup.exports @@ -0,0 +1 @@ +@exportSymbol ol.layer.Group diff --git a/float-no-zero/ol/ol/layer/layergroup.js b/float-no-zero/ol/ol/layer/layergroup.js new file mode 100644 index 0000000000..390cff2c0b --- /dev/null +++ b/float-no-zero/ol/ol/layer/layergroup.js @@ -0,0 +1,224 @@ +goog.provide('ol.layer.Group'); + +goog.require('goog.array'); +goog.require('goog.asserts'); +goog.require('goog.events'); +goog.require('goog.events.EventType'); +goog.require('goog.math'); +goog.require('goog.object'); +goog.require('ol.Collection'); +goog.require('ol.CollectionEvent'); +goog.require('ol.CollectionEventType'); +goog.require('ol.Object'); +goog.require('ol.ObjectEventType'); +goog.require('ol.layer.Base'); +goog.require('ol.source.State'); + + +/** + * @enum {string} + */ +ol.layer.GroupProperty = { + LAYERS: 'layers' +}; + + + +/** + * @constructor + * @extends {ol.layer.Base} + * @param {olx.layer.GroupOptions=} opt_options Layer options. + * @todo stability experimental + * @todo observable layers {ol.Collection} collection of layers that are part + * of this group + */ +ol.layer.Group = function(opt_options) { + + var options = goog.isDef(opt_options) ? opt_options : {}; + var baseOptions = /** @type {olx.layer.GroupOptions} */ + (goog.object.clone(options)); + delete baseOptions.layers; + + var layers = options.layers; + + goog.base(this, baseOptions); + + /** + * @private + * @type {Object.} + */ + this.listenerKeys_ = null; + + goog.events.listen(this, + ol.Object.getChangeEventType(ol.layer.GroupProperty.LAYERS), + this.handleLayersChanged_, false, this); + + if (goog.isDef(layers)) { + if (goog.isArray(layers)) { + layers = new ol.Collection(goog.array.clone(layers)); + } else { + goog.asserts.assertInstanceof(layers, ol.Collection); + layers = layers; + } + } else { + layers = new ol.Collection(); + } + + this.setLayers(layers); + +}; +goog.inherits(ol.layer.Group, ol.layer.Base); + + +/** + * @private + */ +ol.layer.Group.prototype.handleLayerChange_ = function() { + if (this.getVisible()) { + this.dispatchChangeEvent(); + } +}; + + +/** + * @param {goog.events.Event} event Event. + * @private + */ +ol.layer.Group.prototype.handleLayersChanged_ = function(event) { + if (!goog.isNull(this.listenerKeys_)) { + goog.array.forEach( + goog.object.getValues(this.listenerKeys_), goog.events.unlistenByKey); + this.listenerKeys_ = null; + } + + var layers = this.getLayers(); + if (goog.isDefAndNotNull(layers)) { + this.listenerKeys_ = { + 'add': goog.events.listen(layers, ol.CollectionEventType.ADD, + this.handleLayersAdd_, false, this), + 'remove': goog.events.listen(layers, ol.CollectionEventType.REMOVE, + this.handleLayersRemove_, false, this) + }; + + var layersArray = layers.getArray(); + var i, ii, layer; + for (i = 0, ii = layersArray.length; i < ii; i++) { + layer = layersArray[i]; + this.listenerKeys_[goog.getUid(layer).toString()] = + goog.events.listen(layer, + [ol.ObjectEventType.PROPERTYCHANGE, goog.events.EventType.CHANGE], + this.handleLayerChange_, false, this); + } + } + + this.dispatchChangeEvent(); +}; + + +/** + * @param {ol.CollectionEvent} collectionEvent Collection event. + * @private + */ +ol.layer.Group.prototype.handleLayersAdd_ = function(collectionEvent) { + var layer = /** @type {ol.layer.Base} */ (collectionEvent.element); + this.listenerKeys_[goog.getUid(layer).toString()] = goog.events.listen( + layer, [ol.ObjectEventType.PROPERTYCHANGE, goog.events.EventType.CHANGE], + this.handleLayerChange_, false, this); + this.dispatchChangeEvent(); +}; + + +/** + * @param {ol.CollectionEvent} collectionEvent Collection event. + * @private + */ +ol.layer.Group.prototype.handleLayersRemove_ = function(collectionEvent) { + var layer = /** @type {ol.layer.Base} */ (collectionEvent.element); + var key = goog.getUid(layer).toString(); + goog.events.unlistenByKey(this.listenerKeys_[key]); + delete this.listenerKeys_[key]; + this.dispatchChangeEvent(); +}; + + +/** + * @return {ol.Collection|undefined} Collection of layers. + * @todo stability experimental + */ +ol.layer.Group.prototype.getLayers = function() { + return /** @type {ol.Collection|undefined} */ (this.get( + ol.layer.GroupProperty.LAYERS)); +}; +goog.exportProperty( + ol.layer.Group.prototype, + 'getLayers', + ol.layer.Group.prototype.getLayers); + + +/** + * @param {ol.Collection|undefined} layers Collection of layers. + * @todo stability experimental + */ +ol.layer.Group.prototype.setLayers = function(layers) { + this.set(ol.layer.GroupProperty.LAYERS, layers); +}; +goog.exportProperty( + ol.layer.Group.prototype, + 'setLayers', + ol.layer.Group.prototype.setLayers); + + +/** + * @inheritDoc + */ +ol.layer.Group.prototype.getLayersArray = function(opt_array) { + var array = (goog.isDef(opt_array)) ? opt_array : []; + this.getLayers().forEach(function(layer) { + layer.getLayersArray(array); + }); + return array; +}; + + +/** + * @inheritDoc + */ +ol.layer.Group.prototype.getLayerStatesArray = function(opt_obj) { + var obj = (goog.isDef(opt_obj)) ? opt_obj : { + layers: [], + layerStates: [] + }; + goog.asserts.assert(obj.layers.length === obj.layerStates.length); + var pos = obj.layers.length; + + this.getLayers().forEach(function(layer) { + layer.getLayerStatesArray(obj); + }); + + var ownLayerState = this.getLayerState(); + var i, ii, layerState; + for (i = pos, ii = obj.layerStates.length; i < ii; i++) { + layerState = obj.layerStates[i]; + layerState.brightness = goog.math.clamp( + layerState.brightness + ownLayerState.brightness, -1, 1); + layerState.contrast *= ownLayerState.contrast; + layerState.hue += ownLayerState.hue; + layerState.opacity *= ownLayerState.opacity; + layerState.saturation *= ownLayerState.saturation; + layerState.visible = layerState.visible && ownLayerState.visible; + layerState.maxResolution = Math.min( + layerState.maxResolution, ownLayerState.maxResolution); + layerState.minResolution = Math.max( + layerState.minResolution, ownLayerState.minResolution); + } + + return obj; +}; + + +/** + * @inheritDoc + */ +ol.layer.Group.prototype.getSourceState = function() { + return ol.source.State.READY; +}; diff --git a/float-no-zero/ol/ol/layer/tilelayer.exports b/float-no-zero/ol/ol/layer/tilelayer.exports new file mode 100644 index 0000000000..941be6ffc8 --- /dev/null +++ b/float-no-zero/ol/ol/layer/tilelayer.exports @@ -0,0 +1 @@ +@exportSymbol ol.layer.Tile diff --git a/float-no-zero/ol/ol/layer/tilelayer.js b/float-no-zero/ol/ol/layer/tilelayer.js new file mode 100644 index 0000000000..6f97bf72ce --- /dev/null +++ b/float-no-zero/ol/ol/layer/tilelayer.js @@ -0,0 +1,83 @@ +goog.provide('ol.layer.Tile'); + +goog.require('ol.layer.Layer'); + + +/** + * @enum {string} + */ +ol.layer.TileProperty = { + PRELOAD: 'preload', + USE_INTERIM_TILES_ON_ERROR: 'useInterimTilesOnError' +}; + + + +/** + * @constructor + * @extends {ol.layer.Layer} + * @param {olx.layer.TileOptions} options Tile layer options. + * @todo stability experimental + * @todo observable preload {number} the level to preload tiles up to + */ +ol.layer.Tile = function(options) { + goog.base(this, options); + +}; +goog.inherits(ol.layer.Tile, ol.layer.Layer); + + +/** + * @return {number|undefined} Preload. + * @todo stability experimental + */ +ol.layer.Tile.prototype.getPreload = function() { + return /** @type {number|undefined} */ ( + this.get(ol.layer.TileProperty.PRELOAD)); +}; +goog.exportProperty( + ol.layer.Tile.prototype, + 'getPreload', + ol.layer.Tile.prototype.getPreload); + + +/** + * @param {number} preload Preload. + * @todo stability experimental + */ +ol.layer.Tile.prototype.setPreload = function(preload) { + this.set(ol.layer.TileProperty.PRELOAD, preload); +}; +goog.exportProperty( + ol.layer.Tile.prototype, + 'setPreload', + ol.layer.Tile.prototype.setPreload); + + +/** + * @return {boolean|undefined} Use interim tiles on error. + * @todo stability experimental + */ +ol.layer.Tile.prototype.getUseInterimTilesOnError = function() { + return /** @type {boolean|undefined} */ ( + this.get(ol.layer.TileProperty.USE_INTERIM_TILES_ON_ERROR)); +}; +goog.exportProperty( + ol.layer.Tile.prototype, + 'getUseInterimTilesOnError', + ol.layer.Tile.prototype.getUseInterimTilesOnError); + + +/** + * @param {boolean|undefined} useInterimTilesOnError Use interim tiles on error. + * @todo stability experimental + */ +ol.layer.Tile.prototype.setUseInterimTilesOnError = + function(useInterimTilesOnError) { + this.set( + ol.layer.TileProperty.USE_INTERIM_TILES_ON_ERROR, useInterimTilesOnError); +}; +goog.exportProperty( + ol.layer.Tile.prototype, + 'setUseInterimTilesOnError', + ol.layer.Tile.prototype.setUseInterimTilesOnError); diff --git a/float-no-zero/ol/ol/layer/vectorlayer.exports b/float-no-zero/ol/ol/layer/vectorlayer.exports new file mode 100644 index 0000000000..be493b810d --- /dev/null +++ b/float-no-zero/ol/ol/layer/vectorlayer.exports @@ -0,0 +1,4 @@ +@exportSymbol ol.layer.Vector +@exportProperty ol.layer.Vector.prototype.getStyle +@exportProperty ol.layer.Vector.prototype.getStyleFunction +@exportProperty ol.layer.Vector.prototype.setStyle diff --git a/float-no-zero/ol/ol/layer/vectorlayer.js b/float-no-zero/ol/ol/layer/vectorlayer.js new file mode 100644 index 0000000000..9fe1f28092 --- /dev/null +++ b/float-no-zero/ol/ol/layer/vectorlayer.js @@ -0,0 +1,118 @@ +goog.provide('ol.layer.Vector'); + +goog.require('goog.object'); +goog.require('ol.feature'); +goog.require('ol.layer.Layer'); + + +/** + * @enum {string} + */ +ol.layer.VectorProperty = { + RENDER_GEOMETRY_FUNCTIONS: 'renderGeometryFunctions' +}; + + + +/** + * @constructor + * @extends {ol.layer.Layer} + * @param {olx.layer.VectorOptions=} opt_options Options. + * @todo stability experimental + */ +ol.layer.Vector = function(opt_options) { + + var options = goog.isDef(opt_options) ? + opt_options : /** @type {olx.layer.VectorOptions} */ ({}); + + var baseOptions = goog.object.clone(options); + + delete baseOptions.style; + goog.base(this, /** @type {olx.layer.LayerOptions} */ (baseOptions)); + + /** + * User provided style. + * @type {ol.style.Style|Array.|ol.feature.StyleFunction} + * @private + */ + this.style_ = null; + + /** + * Style function for use within the library. + * @type {ol.feature.StyleFunction|undefined} + * @private + */ + this.styleFunction_ = undefined; + + if (goog.isDef(options.style)) { + this.setStyle(options.style); + } + +}; +goog.inherits(ol.layer.Vector, ol.layer.Layer); + + +/** + * @return {ol.Collection|undefined} Render geometry functions. + * @todo stability experimental + */ +ol.layer.Vector.prototype.getRenderGeometryFunctions = function() { + return /** @type {ol.Collection|undefined} */ ( + this.get(ol.layer.VectorProperty.RENDER_GEOMETRY_FUNCTIONS)); +}; +goog.exportProperty( + ol.layer.Vector.prototype, + 'getRenderGeometryFunctions', + ol.layer.Vector.prototype.getRenderGeometryFunctions); + + +/** + * Get the style for features. This returns whatever was passed to the `style` + * option at construction or to the `setStyle` method. + * @return {ol.style.Style|Array.|ol.feature.StyleFunction} + * Layer style. + */ +ol.layer.Vector.prototype.getStyle = function() { + return this.style_; +}; + + +/** + * Get the style function. + * @return {ol.feature.StyleFunction|undefined} Layer style function. + * @todo stability experimental + */ +ol.layer.Vector.prototype.getStyleFunction = function() { + return this.styleFunction_; +}; + + +/** + * @param {ol.Collection|undefined} renderGeometryFunctions Render geometry + * functions. + * @todo stability experimental + */ +ol.layer.Vector.prototype.setRenderGeometryFunctions = + function(renderGeometryFunctions) { + this.set(ol.layer.VectorProperty.RENDER_GEOMETRY_FUNCTIONS, + renderGeometryFunctions); +}; +goog.exportProperty( + ol.layer.Vector.prototype, + 'setRenderGeometryFunctions', + ol.layer.Vector.prototype.setRenderGeometryFunctions); + + +/** + * Set the style for features. This can be a single style object, an array + * of styles, or a function that takes a feature and resolution and returns + * an array of styles. + * @param {ol.style.Style|Array.|ol.feature.StyleFunction} style + * Layer style. + * @todo stability experimental + */ +ol.layer.Vector.prototype.setStyle = function(style) { + this.style_ = style; + this.styleFunction_ = ol.feature.createStyleFunction(style); + this.dispatchChangeEvent(); +}; diff --git a/float-no-zero/ol/ol/map.exports b/float-no-zero/ol/ol/map.exports new file mode 100644 index 0000000000..53dcfd0a63 --- /dev/null +++ b/float-no-zero/ol/ol/map.exports @@ -0,0 +1,23 @@ +@exportSymbol ol.Map +@exportProperty ol.Map.prototype.addControl +@exportProperty ol.Map.prototype.addInteraction +@exportProperty ol.Map.prototype.addLayer +@exportProperty ol.Map.prototype.addOverlay +@exportProperty ol.Map.prototype.beforeRender +@exportProperty ol.Map.prototype.forEachFeatureAtPixel +@exportProperty ol.Map.prototype.getControls +@exportProperty ol.Map.prototype.getCoordinateFromPixel +@exportProperty ol.Map.prototype.getEventCoordinate +@exportProperty ol.Map.prototype.getEventPixel +@exportProperty ol.Map.prototype.getInteractions +@exportProperty ol.Map.prototype.getLayers +@exportProperty ol.Map.prototype.getOverlays +@exportProperty ol.Map.prototype.getPixelFromCoordinate +@exportProperty ol.Map.prototype.getViewport +@exportProperty ol.Map.prototype.removeControl +@exportProperty ol.Map.prototype.removeInteraction +@exportProperty ol.Map.prototype.removeLayer +@exportProperty ol.Map.prototype.removeOverlay +@exportProperty ol.Map.prototype.render +@exportProperty ol.Map.prototype.renderSync +@exportProperty ol.Map.prototype.updateSize diff --git a/float-no-zero/ol/ol/map.js b/float-no-zero/ol/ol/map.js new file mode 100644 index 0000000000..54829e887c --- /dev/null +++ b/float-no-zero/ol/ol/map.js @@ -0,0 +1,1472 @@ +// FIXME recheck layer/map projection compatability when projection changes +// FIXME layer renderers should skip when they can't reproject +// FIXME add tilt and height? + +goog.provide('ol.Map'); +goog.provide('ol.MapProperty'); +goog.provide('ol.RendererHint'); + +goog.require('goog.Uri.QueryData'); +goog.require('goog.array'); +goog.require('goog.asserts'); +goog.require('goog.async.AnimationDelay'); +goog.require('goog.async.nextTick'); +goog.require('goog.debug.Console'); +goog.require('goog.dom'); +goog.require('goog.dom.TagName'); +goog.require('goog.dom.ViewportSizeMonitor'); +goog.require('goog.events'); +goog.require('goog.events.BrowserEvent'); +goog.require('goog.events.Event'); +goog.require('goog.events.EventType'); +goog.require('goog.events.KeyHandler'); +goog.require('goog.events.KeyHandler.EventType'); +goog.require('goog.events.MouseWheelHandler'); +goog.require('goog.events.MouseWheelHandler.EventType'); +goog.require('goog.log'); +goog.require('goog.log.Level'); +goog.require('goog.object'); +goog.require('goog.style'); +goog.require('goog.vec.Mat4'); +goog.require('ol.BrowserFeature'); +goog.require('ol.Collection'); +goog.require('ol.CollectionEventType'); +goog.require('ol.FrameState'); +goog.require('ol.IView'); +goog.require('ol.MapBrowserEvent'); +goog.require('ol.MapBrowserEvent.EventType'); +goog.require('ol.MapBrowserEventHandler'); +goog.require('ol.MapEvent'); +goog.require('ol.MapEventType'); +goog.require('ol.Object'); +goog.require('ol.ObjectEvent'); +goog.require('ol.ObjectEventType'); +goog.require('ol.Pixel'); +goog.require('ol.PostRenderFunction'); +goog.require('ol.PreRenderFunction'); +goog.require('ol.Size'); +goog.require('ol.Tile'); +goog.require('ol.TileQueue'); +goog.require('ol.View'); +goog.require('ol.View2D'); +goog.require('ol.ViewHint'); +goog.require('ol.control'); +goog.require('ol.extent'); +goog.require('ol.interaction'); +goog.require('ol.layer.Base'); +goog.require('ol.layer.Group'); +goog.require('ol.proj'); +goog.require('ol.proj.common'); +goog.require('ol.renderer.Map'); +goog.require('ol.renderer.canvas.Map'); +goog.require('ol.renderer.dom.Map'); +goog.require('ol.renderer.webgl.Map'); +goog.require('ol.structs.PriorityQueue'); +goog.require('ol.vec.Mat4'); + + +/** + * @const + * @type {string} + */ +ol.OL3_URL = 'http://ol3js.org/'; + + +/** + * @const + * @type {string} + */ +ol.OL3_LOGO_URL = 'data:image/png;base64,' + + 'iVBORw0KGgoAAAANSUhEUgAAACAAAAAgCAMAAABEpIrGAAAAA3NCSVQICAjb4U/gAAAACXBI' + + 'WXMAAAHGAAABxgEXwfpGAAAAGXRFWHRTb2Z0d2FyZQB3d3cuaW5rc2NhcGUub3Jnm+48GgAA' + + 'AhNQTFRF////AP//AICAgP//AFVVQECA////K1VVSbbbYL/fJ05idsTYJFtbbcjbJllmZszW' + + 'WMTOIFhoHlNiZszTa9DdUcHNHlNlV8XRIVdiasrUHlZjIVZjaMnVH1RlIFRkH1RkH1ZlasvY' + + 'asvXVsPQH1VkacnVa8vWIVZjIFRjVMPQa8rXIVVkXsXRsNveIFVkIFZlIVVj3eDeh6GmbMvX' + + 'H1ZkIFRka8rWbMvXIFVkIFVjIFVkbMvWH1VjbMvWIFVlbcvWIFVla8vVIFVkbMvWbMvVH1Vk' + + 'bMvWIFVlbcvWIFVkbcvVbMvWjNPbIFVkU8LPwMzNIFVkbczWIFVkbsvWbMvXIFVkRnB8bcvW' + + '2+TkW8XRIFVkIlZlJVloJlpoKlxrLl9tMmJwOWd0Omh1RXF8TneCT3iDUHiDU8LPVMLPVcLP' + + 'VcPQVsPPVsPQV8PQWMTQWsTQW8TQXMXSXsXRX4SNX8bSYMfTYcfTYsfTY8jUZcfSZsnUaIqT' + + 'acrVasrVa8jTa8rWbI2VbMvWbcvWdJObdcvUdszUd8vVeJaee87Yfc3WgJyjhqGnitDYjaar' + + 'ldPZnrK2oNbborW5o9bbo9fbpLa6q9ndrL3ArtndscDDutzfu8fJwN7gwt7gxc/QyuHhy+Hi' + + 'zeHi0NfX0+Pj19zb1+Tj2uXk29/e3uLg3+Lh3+bl4uXj4ufl4+fl5Ofl5ufl5ujm5+jmySDn' + + 'BAAAAFp0Uk5TAAECAgMEBAYHCA0NDg4UGRogIiMmKSssLzU7PkJJT1JTVFliY2hrdHZ3foSF' + + 'hYeJjY2QkpugqbG1tre5w8zQ09XY3uXn6+zx8vT09vf4+Pj5+fr6/P39/f3+gz7SsAAAAVVJ' + + 'REFUOMtjYKA7EBDnwCPLrObS1BRiLoJLnte6CQy8FLHLCzs2QUG4FjZ5GbcmBDDjxJBXDWxC' + + 'Brb8aM4zbkIDzpLYnAcE9VXlJSWlZRU13koIeW57mGx5XjoMZEUqwxWYQaQbSzLSkYGfKFSe' + + '0QMsX5WbjgY0YS4MBplemI4BdGBW+DQ11eZiymfqQuXZIjqwyadPNoSZ4L+0FVM6e+oGI6g8' + + 'a9iKNT3o8kVzNkzRg5lgl7p4wyRUL9Yt2jAxVh6mQCogae6GmflI8p0r13VFWTHBQ0rWPW7a' + + 'hgWVcPm+9cuLoyy4kCJDzCm6d8PSFoh0zvQNC5OjDJhQopPPJqph1doJBUD5tnkbZiUEqaCn' + + 'B3bTqLTFG1bPn71kw4b+GFdpLElKIzRxxgYgWNYc5SCENVHKeUaltHdXx0dZ8uBI1hJ2UUDg' + + 'q82CM2MwKeibqAvSO7MCABq0wXEPiqWEAAAAAElFTkSuQmCC'; + + +/** + * @enum {string} + * @todo stability experimental + */ +ol.RendererHint = { + CANVAS: 'canvas', + DOM: 'dom', + WEBGL: 'webgl' +}; + + +/** + * @type {Array.} + */ +ol.DEFAULT_RENDERER_HINTS = [ + ol.RendererHint.WEBGL, + ol.RendererHint.CANVAS, + ol.RendererHint.DOM +]; + + +/** + * @enum {string} + */ +ol.MapProperty = { + LAYERGROUP: 'layergroup', + SIZE: 'size', + TARGET: 'target', + VIEW: 'view' +}; + + + +/** + * @class + * The map is the core component of OpenLayers. In its minimal configuration it + * needs a view, one or more layers, and a target container: + * + * var map = new ol.Map({ + * view: new ol.View2D({ + * center: [0, 0], + * zoom: 1 + * }), + * layers: [ + * new ol.layer.Tile({ + * source: new ol.source.MapQuestOSM() + * }) + * ], + * target: 'map' + * }); + * + * The above snippet creates a map with a MapQuest OSM layer on a 2D view and + * renders it to a DOM element with the id `map`. + * + * @constructor + * @extends {ol.Object} + * @param {olx.MapOptions} options Map options. + * @todo stability experimental + * @todo observable layergroup {ol.layer.LayerGroup} a layer group containing + * the layers in this map. + * @todo observable size {ol.Size} the size in pixels of the map in the DOM + * @todo observable target {string|Element} the Element or id of the Element + * that the map is rendered in. + * @todo observable view {ol.IView} the view that controls this map + */ +ol.Map = function(options) { + + goog.base(this); + + var optionsInternal = ol.Map.createOptionsInternal(options); + + /** + * @private + * @type {number} + */ + this.pixelRatio_ = goog.isDef(options.pixelRatio) ? + options.pixelRatio : ol.BrowserFeature.DEVICE_PIXEL_RATIO; + + /** + * @private + * @type {boolean} + */ + this.ol3Logo_ = optionsInternal.ol3Logo; + + /** + * @private + * @type {goog.async.AnimationDelay} + */ + this.animationDelay_ = + new goog.async.AnimationDelay(this.renderFrame_, undefined, this); + this.registerDisposable(this.animationDelay_); + + /** + * @private + * @type {goog.vec.Mat4.Number} + */ + this.coordinateToPixelMatrix_ = goog.vec.Mat4.createNumber(); + + /** + * @private + * @type {goog.vec.Mat4.Number} + */ + this.pixelToCoordinateMatrix_ = goog.vec.Mat4.createNumber(); + + /** + * @private + * @type {number} + */ + this.frameIndex_ = 0; + + /** + * @private + * @type {?ol.FrameState} + */ + this.frameState_ = null; + + /** + * @private + * @type {goog.events.Key} + */ + this.viewPropertyListenerKey_ = null; + + /** + * @private + * @type {Array.} + */ + this.layerGroupPropertyListenerKeys_ = null; + + /** + * @private + * @type {Element} + */ + this.viewport_ = goog.dom.createDom(goog.dom.TagName.DIV, 'ol-viewport'); + this.viewport_.style.position = 'relative'; + this.viewport_.style.overflow = 'hidden'; + this.viewport_.style.width = '100%'; + this.viewport_.style.height = '100%'; + // prevent page zoom on IE >= 10 browsers + this.viewport_.style.msTouchAction = 'none'; + if (ol.BrowserFeature.HAS_TOUCH) { + this.viewport_.className = 'ol-touch'; + } + + /** + * @private + * @type {Element} + */ + this.overlayContainer_ = goog.dom.createDom(goog.dom.TagName.DIV, + 'ol-overlaycontainer'); + goog.dom.appendChild(this.viewport_, this.overlayContainer_); + + /** + * @private + * @type {Element} + */ + this.overlayContainerStopEvent_ = goog.dom.createDom(goog.dom.TagName.DIV, + 'ol-overlaycontainer-stopevent'); + goog.events.listen(this.overlayContainerStopEvent_, [ + goog.events.EventType.CLICK, + goog.events.EventType.DBLCLICK, + goog.events.EventType.MOUSEDOWN, + goog.events.EventType.TOUCHSTART, + goog.events.EventType.MSPOINTERDOWN + ], goog.events.Event.stopPropagation); + goog.dom.appendChild(this.viewport_, this.overlayContainerStopEvent_); + + var mapBrowserEventHandler = new ol.MapBrowserEventHandler(this); + goog.events.listen(mapBrowserEventHandler, + goog.object.getValues(ol.MapBrowserEvent.EventType), + this.handleMapBrowserEvent, false, this); + this.registerDisposable(mapBrowserEventHandler); + + /** + * @private + * @type {Element|Document} + */ + this.keyboardEventTarget_ = optionsInternal.keyboardEventTarget; + + /** + * @private + * @type {goog.events.KeyHandler} + */ + this.keyHandler_ = new goog.events.KeyHandler(); + goog.events.listen(this.keyHandler_, goog.events.KeyHandler.EventType.KEY, + this.handleBrowserEvent, false, this); + this.registerDisposable(this.keyHandler_); + + var mouseWheelHandler = new goog.events.MouseWheelHandler(this.viewport_); + goog.events.listen(mouseWheelHandler, + goog.events.MouseWheelHandler.EventType.MOUSEWHEEL, + this.handleBrowserEvent, false, this); + this.registerDisposable(mouseWheelHandler); + + /** + * @type {ol.Collection} + * @private + */ + this.controls_ = optionsInternal.controls; + + /** + * @type {olx.DeviceOptions} + * @private + */ + this.deviceOptions_ = optionsInternal.deviceOptions; + + /** + * @type {ol.Collection} + * @private + */ + this.interactions_ = optionsInternal.interactions; + + /** + * @type {ol.Collection} + * @private + */ + this.overlays_ = optionsInternal.overlays; + + /** + * @type {ol.renderer.Map} + * @private + */ + this.renderer_ = + new optionsInternal.rendererConstructor(this.viewport_, this); + this.registerDisposable(this.renderer_); + + /** + * @private + */ + this.viewportSizeMonitor_ = new goog.dom.ViewportSizeMonitor(); + + goog.events.listen(this.viewportSizeMonitor_, goog.events.EventType.RESIZE, + this.updateSize, false, this); + + /** + * @private + * @type {ol.Coordinate} + */ + this.focus_ = null; + + /** + * @private + * @type {Array.} + */ + this.preRenderFunctions_ = []; + + /** + * @private + * @type {Array.} + */ + this.postRenderFunctions_ = []; + + /** + * @private + * @type {ol.TileQueue} + */ + this.tileQueue_ = new ol.TileQueue( + goog.bind(this.getTilePriority, this), + goog.bind(this.handleTileChange_, this)); + + goog.events.listen( + this, ol.Object.getChangeEventType(ol.MapProperty.LAYERGROUP), + this.handleLayerGroupChanged_, false, this); + goog.events.listen(this, ol.Object.getChangeEventType(ol.MapProperty.VIEW), + this.handleViewChanged_, false, this); + goog.events.listen(this, ol.Object.getChangeEventType(ol.MapProperty.SIZE), + this.handleSizeChanged_, false, this); + goog.events.listen(this, ol.Object.getChangeEventType(ol.MapProperty.TARGET), + this.handleTargetChanged_, false, this); + + // setValues will trigger the rendering of the map if the map + // is "defined" already. + this.setValues(optionsInternal.values); + + this.controls_.forEach( + /** + * @param {ol.control.Control} control Control. + * @this {ol.Map} + */ + function(control) { + control.setMap(this); + }, this); + + goog.events.listen(this.controls_, ol.CollectionEventType.ADD, + /** + * @param {ol.CollectionEvent} event Collection event. + */ + function(event) { + event.element.setMap(this); + }, false, this); + + goog.events.listen(this.controls_, ol.CollectionEventType.REMOVE, + /** + * @param {ol.CollectionEvent} event Collection event. + */ + function(event) { + event.element.setMap(null); + }, false, this); + + this.interactions_.forEach( + /** + * @param {ol.interaction.Interaction} interaction Interaction. + * @this {ol.Map} + */ + function(interaction) { + interaction.setMap(this); + }, this); + + goog.events.listen(this.interactions_, ol.CollectionEventType.ADD, + /** + * @param {ol.CollectionEvent} event Collection event. + */ + function(event) { + event.element.setMap(this); + }, false, this); + + goog.events.listen(this.interactions_, ol.CollectionEventType.REMOVE, + /** + * @param {ol.CollectionEvent} event Collection event. + */ + function(event) { + event.element.setMap(null); + }, false, this); + + this.overlays_.forEach( + /** + * @param {ol.Overlay} overlay Overlay. + * @this {ol.Map} + */ + function(overlay) { + overlay.setMap(this); + }, this); + + goog.events.listen(this.overlays_, ol.CollectionEventType.ADD, + /** + * @param {ol.CollectionEvent} event Collection event. + */ + function(event) { + event.element.setMap(this); + }, false, this); + + goog.events.listen(this.overlays_, ol.CollectionEventType.REMOVE, + /** + * @param {ol.CollectionEvent} event Collection event. + */ + function(event) { + event.element.setMap(null); + }, false, this); + +}; +goog.inherits(ol.Map, ol.Object); + + +/** + * Add the given control to the map. + * @param {ol.control.Control} control Control. + * @todo stability experimental + */ +ol.Map.prototype.addControl = function(control) { + var controls = this.getControls(); + goog.asserts.assert(goog.isDef(controls)); + controls.push(control); +}; + + +/** + * Add the given interaction to the map. + * @param {ol.interaction.Interaction} interaction Interaction to add. + */ +ol.Map.prototype.addInteraction = function(interaction) { + var interactions = this.getInteractions(); + goog.asserts.assert(goog.isDef(interactions)); + interactions.push(interaction); +}; + + +/** + * Adds the given layer to the top of this map. + * @param {ol.layer.Base} layer Layer. + * @todo stability experimental + */ +ol.Map.prototype.addLayer = function(layer) { + var layers = this.getLayerGroup().getLayers(); + goog.asserts.assert(goog.isDef(layers)); + layers.push(layer); +}; + + +/** + * Add the given overlay to the map. + * @param {ol.Overlay} overlay Overlay. + * @todo stability experimental + */ +ol.Map.prototype.addOverlay = function(overlay) { + var overlays = this.getOverlays(); + goog.asserts.assert(goog.isDef(overlays)); + overlays.push(overlay); +}; + + +/** + * Add functions to be called before rendering. This can be used for attaching + * animations before updating the map's view. The {@link ol.animation} + * namespace provides several static methods for creating prerender functions. + * @param {...ol.PreRenderFunction} var_args Any number of pre-render functions. + * @todo stability experimental + */ +ol.Map.prototype.beforeRender = function(var_args) { + this.render(); + Array.prototype.push.apply(this.preRenderFunctions_, arguments); +}; + + +/** + * @param {ol.PreRenderFunction} preRenderFunction Pre-render function. + * @return {boolean} Whether the preRenderFunction has been found and removed. + */ +ol.Map.prototype.removePreRenderFunction = function(preRenderFunction) { + return goog.array.remove(this.preRenderFunctions_, preRenderFunction); +}; + + +/** + * + * @inheritDoc + */ +ol.Map.prototype.disposeInternal = function() { + goog.dom.removeNode(this.viewport_); + goog.base(this, 'disposeInternal'); +}; + + +/** + * @param {ol.Pixel} pixel Pixel. + * @param {function(this: S, ol.Feature, ol.layer.Layer): T} callback Feature + * callback. + * @param {S=} opt_this Value to use as `this` when executing `callback`. + * @param {function(this: U, ol.layer.Layer): boolean=} opt_layerFilter Layer + * filter function, only layers which are visible and for which this + * function returns `true` will be tested for features. By default, all + * visible layers will be tested. + * @param {U=} opt_this2 Value to use as `this` when executing `layerFilter`. + * @return {T|undefined} Callback result. + * @template S,T,U + */ +ol.Map.prototype.forEachFeatureAtPixel = + function(pixel, callback, opt_this, opt_layerFilter, opt_this2) { + if (goog.isNull(this.frameState_)) { + return; + } + var coordinate = this.getCoordinateFromPixel(pixel); + var thisArg = goog.isDef(opt_this) ? opt_this : null; + var layerFilter = goog.isDef(opt_layerFilter) ? + opt_layerFilter : goog.functions.TRUE; + var thisArg2 = goog.isDef(opt_this2) ? opt_this2 : null; + return this.renderer_.forEachFeatureAtPixel( + coordinate, this.frameState_, callback, thisArg, + layerFilter, thisArg2); +}; + + +/** + * Returns the geographical coordinate for a browser event. + * @param {Event} event Event. + * @return {ol.Coordinate} Coordinate. + * @todo stability experimental + */ +ol.Map.prototype.getEventCoordinate = function(event) { + return this.getCoordinateFromPixel(this.getEventPixel(event)); +}; + + +/** + * Returns the map pixel position for a browser event. + * @param {Event} event Event. + * @return {ol.Pixel} Pixel. + * @todo stability experimental + */ +ol.Map.prototype.getEventPixel = function(event) { + // goog.style.getRelativePosition is based on event.targetTouches, + // but touchend and touchcancel events have no targetTouches when + // the last finger is removed from the screen. + // So we ourselves compute the position of touch events. + // See https://code.google.com/p/closure-library/issues/detail?id=588 + if (goog.isDef(event.changedTouches)) { + var touch = event.changedTouches.item(0); + var viewportPosition = goog.style.getClientPosition(this.viewport_); + return [ + touch.clientX - viewportPosition.x, + touch.clientY - viewportPosition.y + ]; + } else { + var eventPosition = goog.style.getRelativePosition(event, this.viewport_); + return [eventPosition.x, eventPosition.y]; + } +}; + + +/** + * Get the target in which this map is rendered. + * Note that this returns what is entered as an option or in setTarget: + * if that was an element, it returns an element; if a string, it returns that. + * @return {Element|string|undefined} Target. + * @todo stability experimental + */ +ol.Map.prototype.getTarget = function() { + return /** @type {Element|string|undefined} */ ( + this.get(ol.MapProperty.TARGET)); +}; +goog.exportProperty( + ol.Map.prototype, + 'getTarget', + ol.Map.prototype.getTarget); + + +/** + * @param {ol.Pixel} pixel Pixel. + * @return {ol.Coordinate} Coordinate. + */ +ol.Map.prototype.getCoordinateFromPixel = function(pixel) { + var frameState = this.frameState_; + if (goog.isNull(frameState)) { + return null; + } else { + var vec2 = pixel.slice(); + return ol.vec.Mat4.multVec2(frameState.pixelToCoordinateMatrix, vec2, vec2); + } +}; + + +/** + * @return {ol.Collection} Controls. + * @todo stability experimental + */ +ol.Map.prototype.getControls = function() { + return this.controls_; +}; + + +/** + * @return {ol.Collection} Overlays. + * @todo stability experimental + */ +ol.Map.prototype.getOverlays = function() { + return this.overlays_; +}; + + +/** + * Gets the collection of + * {@link ol.interaction|ol.interaction.Interaction} instances + * associated with this map. Modifying this collection + * changes the interactions associated with the map. + * + * Interactions are used for e.g. pan, zoom and rotate. + * @return {ol.Collection} Interactions. + * @todo stability experimental + */ +ol.Map.prototype.getInteractions = function() { + return this.interactions_; +}; + + +/** + * Get the layergroup associated with this map. + * @return {ol.layer.Group} LayerGroup. + * @todo stability experimental + */ +ol.Map.prototype.getLayerGroup = function() { + return /** @type {ol.layer.Group} */ ( + this.get(ol.MapProperty.LAYERGROUP)); +}; +goog.exportProperty( + ol.Map.prototype, + 'getLayerGroup', + ol.Map.prototype.getLayerGroup); + + +/** + * Get the collection of layers associated with this map. + * @return {ol.Collection|undefined} Layers. + * @todo stability experimental + */ +ol.Map.prototype.getLayers = function() { + var layerGroup = this.getLayerGroup(); + if (goog.isDef(layerGroup)) { + return layerGroup.getLayers(); + } else { + return undefined; + } +}; + + +/** + * @param {ol.Coordinate} coordinate Coordinate. + * @return {ol.Pixel} Pixel. + */ +ol.Map.prototype.getPixelFromCoordinate = function(coordinate) { + var frameState = this.frameState_; + if (goog.isNull(frameState)) { + return null; + } else { + var vec2 = coordinate.slice(0, 2); + return ol.vec.Mat4.multVec2(frameState.coordinateToPixelMatrix, vec2, vec2); + } +}; + + +/** + * Get the size of this map. + * @return {ol.Size|undefined} Size. + * @todo stability experimental + */ +ol.Map.prototype.getSize = function() { + return /** @type {ol.Size|undefined} */ (this.get(ol.MapProperty.SIZE)); +}; +goog.exportProperty( + ol.Map.prototype, + 'getSize', + ol.Map.prototype.getSize); + + +/** + * Get the view associated with this map. This can be a 2D or 3D view. A 2D + * view manages properties such as center and resolution. + * @return {ol.View|undefined} View. + * @todo stability experimental + */ +ol.Map.prototype.getView = function() { + return /** @type {ol.View} */ (this.get(ol.MapProperty.VIEW)); +}; +goog.exportProperty( + ol.Map.prototype, + 'getView', + ol.Map.prototype.getView); + + +/** + * @return {Element} Viewport. + * @todo stability experimental + */ +ol.Map.prototype.getViewport = function() { + return this.viewport_; +}; + + +/** + * @return {Element} The map's overlay container. Elements added to this + * container will let mousedown and touchstart events through to the map, so + * clicks and gestures on an overlay will trigger MapBrowserEvent events. + */ +ol.Map.prototype.getOverlayContainer = function() { + return this.overlayContainer_; +}; + + +/** + * @return {Element} The map's overlay container. Elements added to this + * container won't let mousedown and touchstart events through to the map, so + * clicks and gestures on an overlay don't trigger any MapBrowserEvent. + */ +ol.Map.prototype.getOverlayContainerStopEvent = function() { + return this.overlayContainerStopEvent_; +}; + + +/** + * @param {ol.Tile} tile Tile. + * @param {string} tileSourceKey Tile source key. + * @param {ol.Coordinate} tileCenter Tile center. + * @param {number} tileResolution Tile resolution. + * @return {number} Tile priority. + */ +ol.Map.prototype.getTilePriority = + function(tile, tileSourceKey, tileCenter, tileResolution) { + // Filter out tiles at higher zoom levels than the current zoom level, or that + // are outside the visible extent. + var frameState = this.frameState_; + if (goog.isNull(frameState) || !(tileSourceKey in frameState.wantedTiles)) { + return ol.structs.PriorityQueue.DROP; + } + var coordKey = tile.tileCoord.toString(); + if (!frameState.wantedTiles[tileSourceKey][coordKey]) { + return ol.structs.PriorityQueue.DROP; + } + // Prioritize the highest zoom level tiles closest to the focus. + // Tiles at higher zoom levels are prioritized using Math.log(tileResolution). + // Within a zoom level, tiles are prioritized by the distance in pixels + // between the center of the tile and the focus. The factor of 65536 means + // that the prioritization should behave as desired for tiles up to + // 65536 * Math.log(2) = 45426 pixels from the focus. + var deltaX = tileCenter[0] - frameState.focus[0]; + var deltaY = tileCenter[1] - frameState.focus[1]; + return 65536 * Math.log(tileResolution) + + Math.sqrt(deltaX * deltaX + deltaY * deltaY) / tileResolution; +}; + + +/** + * @param {goog.events.BrowserEvent} browserEvent Browser event. + * @param {string=} opt_type Type. + */ +ol.Map.prototype.handleBrowserEvent = function(browserEvent, opt_type) { + var type = opt_type || browserEvent.type; + var mapBrowserEvent = new ol.MapBrowserEvent(type, this, browserEvent); + this.handleMapBrowserEvent(mapBrowserEvent); +}; + + +/** + * @param {ol.MapBrowserEvent} mapBrowserEvent The event to handle. + */ +ol.Map.prototype.handleMapBrowserEvent = function(mapBrowserEvent) { + if (goog.isNull(this.frameState_)) { + // With no view defined, we cannot translate pixels into geographical + // coordinates so interactions cannot be used. + return; + } + this.focus_ = mapBrowserEvent.coordinate; + mapBrowserEvent.frameState = this.frameState_; + var interactions = this.getInteractions(); + var interactionsArray = /** @type {Array.} */ + (interactions.getArray()); + var i; + if (this.dispatchEvent(mapBrowserEvent) !== false) { + for (i = interactionsArray.length - 1; i >= 0; i--) { + var interaction = interactionsArray[i]; + var cont = interaction.handleMapBrowserEvent(mapBrowserEvent); + if (!cont) { + break; + } + } + } +}; + + +/** + * @protected + */ +ol.Map.prototype.handlePostRender = function() { + + var frameState = this.frameState_; + + // Manage the tile queue + // Image loads are expensive and a limited resource, so try to use them + // efficiently: + // * When the view is static we allow a large number of parallel tile loads + // to complete the frame as quickly as possible. + // * When animating or interacting, image loads can cause janks, so we reduce + // the maximum number of loads per frame and limit the number of parallel + // tile loads to remain reactive to view changes and to reduce the chance of + // loading tiles that will quickly disappear from view. + var tileQueue = this.tileQueue_; + if (!tileQueue.isEmpty()) { + var maxTotalLoading = 16; + var maxNewLoads = maxTotalLoading; + var tileSourceCount = 0; + if (!goog.isNull(frameState)) { + var hints = frameState.viewHints; + var deviceOptions = this.deviceOptions_; + if (hints[ol.ViewHint.ANIMATING]) { + maxTotalLoading = deviceOptions.loadTilesWhileAnimating === false ? + 0 : 8; + maxNewLoads = 2; + } + if (hints[ol.ViewHint.INTERACTING]) { + maxTotalLoading = deviceOptions.loadTilesWhileInteracting === false ? + 0 : 8; + maxNewLoads = 2; + } + tileSourceCount = goog.object.getCount(frameState.wantedTiles); + } + maxTotalLoading *= tileSourceCount; + maxNewLoads *= tileSourceCount; + if (tileQueue.getTilesLoading() < maxTotalLoading) { + tileQueue.reprioritize(); // FIXME only call if view has changed + tileQueue.loadMoreTiles(maxTotalLoading, maxNewLoads); + } + } + + var postRenderFunctions = this.postRenderFunctions_; + var i, ii; + for (i = 0, ii = postRenderFunctions.length; i < ii; ++i) { + postRenderFunctions[i](this, frameState); + } + postRenderFunctions.length = 0; +}; + + +/** + * @private + */ +ol.Map.prototype.handleSizeChanged_ = function() { + this.render(); +}; + + +/** + * @private + */ +ol.Map.prototype.handleTargetChanged_ = function() { + // target may be undefined, null, a string or an Element. + // If it's a string we convert it to an Element before proceeding. + // If it's not now an Element we remove the viewport from the DOM. + // If it's an Element we append the viewport element to it. + + var target = this.getTarget(); + + /** + * @type {Element} + */ + var targetElement = goog.isDef(target) ? + goog.dom.getElement(target) : null; + + this.keyHandler_.detach(); + + if (goog.isNull(targetElement)) { + goog.dom.removeNode(this.viewport_); + } else { + goog.dom.appendChild(targetElement, this.viewport_); + + var keyboardEventTarget = goog.isNull(this.keyboardEventTarget_) ? + targetElement : this.keyboardEventTarget_; + this.keyHandler_.attach(keyboardEventTarget); + } + + this.updateSize(); + // updateSize calls setSize, so no need to call this.render + // ourselves here. +}; + + +/** + * @private + */ +ol.Map.prototype.handleTileChange_ = function() { + this.render(); +}; + + +/** + * @private + */ +ol.Map.prototype.handleViewPropertyChanged_ = function() { + this.render(); +}; + + +/** + * @private + */ +ol.Map.prototype.handleViewChanged_ = function() { + if (!goog.isNull(this.viewPropertyListenerKey_)) { + goog.events.unlistenByKey(this.viewPropertyListenerKey_); + this.viewPropertyListenerKey_ = null; + } + var view = this.getView(); + if (goog.isDefAndNotNull(view)) { + this.viewPropertyListenerKey_ = goog.events.listen( + view, ol.ObjectEventType.PROPERTYCHANGE, + this.handleViewPropertyChanged_, false, this); + } + this.render(); +}; + + +/** + * @param {goog.events.Event} event Event. + * @private + */ +ol.Map.prototype.handleLayerGroupMemberChanged_ = function(event) { + goog.asserts.assertInstanceof(event, goog.events.Event); + this.render(); +}; + + +/** + * @param {ol.ObjectEvent} event Event. + * @private + */ +ol.Map.prototype.handleLayerGroupPropertyChanged_ = function(event) { + goog.asserts.assertInstanceof(event, ol.ObjectEvent); + this.render(); +}; + + +/** + * @private + */ +ol.Map.prototype.handleLayerGroupChanged_ = function() { + if (!goog.isNull(this.layerGroupPropertyListenerKeys_)) { + var length = this.layerGroupPropertyListenerKeys_.length; + for (var i = 0; i < length; ++i) { + goog.events.unlistenByKey(this.layerGroupPropertyListenerKeys_[i]); + } + this.layerGroupPropertyListenerKeys_ = null; + } + var layerGroup = this.getLayerGroup(); + if (goog.isDefAndNotNull(layerGroup)) { + this.layerGroupPropertyListenerKeys_ = [ + goog.events.listen( + layerGroup, ol.ObjectEventType.PROPERTYCHANGE, + this.handleLayerGroupPropertyChanged_, false, this), + goog.events.listen( + layerGroup, goog.events.EventType.CHANGE, + this.handleLayerGroupMemberChanged_, false, this) + ]; + } + this.render(); +}; + + +/** + * Returns `true` if the map is defined, `false` otherwise. The map is defined + * if it is contained in `document`, visible, has non-zero height and width, and + * has a defined view. + * @return {boolean} Is defined. + */ +ol.Map.prototype.isDef = function() { + if (!goog.dom.contains(document, this.viewport_)) { + return false; + } + if (!goog.style.isElementShown(this.viewport_)) { + return false; + } + var size = this.getSize(); + if (!goog.isDefAndNotNull(size) || size[0] <= 0 || size[1] <= 0) { + return false; + } + var view = this.getView(); + if (!goog.isDef(view) || !view.isDef()) { + return false; + } + return true; +}; + + +/** + * @return {boolean} Is rendered. + */ +ol.Map.prototype.isRendered = function() { + return !goog.isNull(this.frameState_); +}; + + +/** + * Render. + */ +ol.Map.prototype.renderSync = function() { + this.animationDelay_.fire(); +}; + + +/** + * Request that renderFrame_ be called some time in the future. + */ +ol.Map.prototype.render = function() { + if (!this.animationDelay_.isActive()) { + this.animationDelay_.start(); + } +}; + + +/** + * Remove the given control from the map. + * @param {ol.control.Control} control Control. + * @return {ol.control.Control|undefined} The removed control of undefined + * if the control was not found. + * @todo stability experimental + */ +ol.Map.prototype.removeControl = function(control) { + var controls = this.getControls(); + goog.asserts.assert(goog.isDef(controls)); + if (goog.isDef(controls.remove(control))) { + return control; + } + return undefined; +}; + + +/** + * Remove the given interaction from the map. + * @param {ol.interaction.Interaction} interaction Interaction to remove. + * @return {ol.interaction.Interaction|undefined} The removed interaction (or + * undefined if the interaction was not found). + */ +ol.Map.prototype.removeInteraction = function(interaction) { + var removed; + var interactions = this.getInteractions(); + goog.asserts.assert(goog.isDef(interactions)); + if (goog.isDef(interactions.remove(interaction))) { + removed = interaction; + } + return removed; +}; + + +/** + * Removes the given layer from the map. + * @param {ol.layer.Base} layer Layer. + * @return {ol.layer.Base|undefined} The removed layer or undefined if the + * layer was not found. + * @todo stability experimental + */ +ol.Map.prototype.removeLayer = function(layer) { + var layers = this.getLayerGroup().getLayers(); + goog.asserts.assert(goog.isDef(layers)); + return /** @type {ol.layer.Base|undefined} */ (layers.remove(layer)); +}; + + +/** + * Remove the given overlay from the map. + * @param {ol.Overlay} overlay Overlay. + * @return {ol.Overlay|undefined} The removed overlay of undefined + * if the overlay was not found. + * @todo stability experimental + */ +ol.Map.prototype.removeOverlay = function(overlay) { + var overlays = this.getOverlays(); + goog.asserts.assert(goog.isDef(overlays)); + if (goog.isDef(overlays.remove(overlay))) { + return overlay; + } + return undefined; +}; + + +/** + * @param {number} time Time. + * @private + */ +ol.Map.prototype.renderFrame_ = function(time) { + + var i, ii, view2DState; + + /** + * Check whether a size has non-zero width and height. Note that this + * function is here because the compiler doesn't recognize that size is + * defined in the frameState assignment below when the same code is inline in + * the condition below. The compiler inlines this function itself, so the + * resulting code is the same. + * + * @param {ol.Size} size The size to test. + * @return {boolean} Has non-zero width and height. + */ + function hasArea(size) { + return size[0] > 0 && size[1] > 0; + } + + var size = this.getSize(); + var view = this.getView(); + var view2D = goog.isDef(view) ? this.getView().getView2D() : undefined; + /** @type {?ol.FrameState} */ + var frameState = null; + if (goog.isDef(size) && hasArea(size) && + goog.isDef(view2D) && view2D.isDef()) { + var viewHints = view.getHints(); + var obj = this.getLayerGroup().getLayerStatesArray(); + var layersArray = obj.layers; + var layerStatesArray = obj.layerStates; + var layerStates = {}; + var layer; + for (i = 0, ii = layersArray.length; i < ii; ++i) { + layer = layersArray[i]; + layerStates[goog.getUid(layer)] = layerStatesArray[i]; + } + view2DState = view2D.getView2DState(); + frameState = { + animate: false, + attributions: {}, + coordinateToPixelMatrix: this.coordinateToPixelMatrix_, + extent: null, + focus: goog.isNull(this.focus_) ? view2DState.center : this.focus_, + index: this.frameIndex_++, + layersArray: layersArray, + layerStates: layerStates, + logos: {}, + pixelRatio: this.pixelRatio_, + pixelToCoordinateMatrix: this.pixelToCoordinateMatrix_, + postRenderFunctions: [], + size: size, + tileQueue: this.tileQueue_, + time: time, + usedTiles: {}, + view2DState: view2DState, + viewHints: viewHints, + wantedTiles: {} + }; + if (this.ol3Logo_) { + frameState.logos[ol.OL3_LOGO_URL] = ol.OL3_URL; + } + } + + var preRenderFunctions = this.preRenderFunctions_; + var n = 0, preRenderFunction; + for (i = 0, ii = preRenderFunctions.length; i < ii; ++i) { + preRenderFunction = preRenderFunctions[i]; + if (preRenderFunction(this, frameState)) { + preRenderFunctions[n++] = preRenderFunction; + } + } + preRenderFunctions.length = n; + + if (!goog.isNull(frameState)) { + // FIXME works for View2D only + frameState.extent = ol.extent.getForView2DAndSize(view2DState.center, + view2DState.resolution, view2DState.rotation, frameState.size); + } + + this.frameState_ = frameState; + this.renderer_.renderFrame(frameState); + + if (!goog.isNull(frameState)) { + if (frameState.animate) { + this.render(); + } + Array.prototype.push.apply( + this.postRenderFunctions_, frameState.postRenderFunctions); + + var idle = this.preRenderFunctions_.length == 0 && + !frameState.animate && + !frameState.viewHints[ol.ViewHint.ANIMATING] && + !frameState.viewHints[ol.ViewHint.INTERACTING]; + + if (idle) { + this.dispatchEvent(new ol.MapEvent(ol.MapEventType.MOVEEND, this)); + } + } + + this.dispatchEvent( + new ol.MapEvent(ol.MapEventType.POSTRENDER, this, frameState)); + + goog.async.nextTick(this.handlePostRender, this); + +}; + + +/** + * Sets the layergroup of this map. + * @param {ol.layer.Group} layerGroup Layergroup. + * @todo stability experimental + */ +ol.Map.prototype.setLayerGroup = function(layerGroup) { + this.set(ol.MapProperty.LAYERGROUP, layerGroup); +}; +goog.exportProperty( + ol.Map.prototype, + 'setLayerGroup', + ol.Map.prototype.setLayerGroup); + + +/** + * Set the size of this map. + * @param {ol.Size|undefined} size Size. + * @todo stability experimental + */ +ol.Map.prototype.setSize = function(size) { + this.set(ol.MapProperty.SIZE, size); +}; +goog.exportProperty( + ol.Map.prototype, + 'setSize', + ol.Map.prototype.setSize); + + +/** + * Set the target element to render this map into. + * @param {Element|string|undefined} target Target. + * @todo stability experimental + */ +ol.Map.prototype.setTarget = function(target) { + this.set(ol.MapProperty.TARGET, target); +}; +goog.exportProperty( + ol.Map.prototype, + 'setTarget', + ol.Map.prototype.setTarget); + + +/** + * Set the view for this map. + * @param {ol.IView} view View. + * @todo stability experimental + */ +ol.Map.prototype.setView = function(view) { + this.set(ol.MapProperty.VIEW, view); +}; +goog.exportProperty( + ol.Map.prototype, + 'setView', + ol.Map.prototype.setView); + + +/** + * Force a recalculation of the map viewport size. This should be called when + * third-party code changes the size of the map viewport. + * @todo stability experimental + */ +ol.Map.prototype.updateSize = function() { + var target = this.getTarget(); + + /** + * @type {Element} + */ + var targetElement = goog.isDef(target) ? + goog.dom.getElement(target) : null; + + if (goog.isNull(targetElement)) { + this.setSize(undefined); + } else { + var size = goog.style.getContentBoxSize(targetElement); + this.setSize([size.width, size.height]); + } +}; + + +/** + * @typedef {{controls: ol.Collection, + * deviceOptions: olx.DeviceOptions, + * interactions: ol.Collection, + * keyboardEventTarget: (Element|Document), + * ol3Logo: boolean, + * overlays: ol.Collection, + * rendererConstructor: + * function(new: ol.renderer.Map, Element, ol.Map), + * values: Object.}} + */ +ol.MapOptionsInternal; + + +/** + * @param {olx.MapOptions} options Map options. + * @return {ol.MapOptionsInternal} Internal map options. + */ +ol.Map.createOptionsInternal = function(options) { + + /** + * @type {Element|Document} + */ + var keyboardEventTarget = null; + if (goog.isDef(options.keyboardEventTarget)) { + // cannot use goog.dom.getElement because its argument cannot be + // of type Document + keyboardEventTarget = goog.isString(options.keyboardEventTarget) ? + document.getElementById(options.keyboardEventTarget) : + options.keyboardEventTarget; + } + + /** + * @type {Object.} + */ + var values = {}; + + var ol3Logo = goog.isDef(options.ol3Logo) ? options.ol3Logo : true; + + var layerGroup = (options.layers instanceof ol.layer.Group) ? + options.layers : new ol.layer.Group({layers: options.layers}); + values[ol.MapProperty.LAYERGROUP] = layerGroup; + + values[ol.MapProperty.TARGET] = options.target; + + values[ol.MapProperty.VIEW] = goog.isDef(options.view) ? + options.view : new ol.View2D(); + + /** + * @type {function(new: ol.renderer.Map, Element, ol.Map)} + */ + var rendererConstructor = ol.renderer.Map; + + /** + * @type {Array.} + */ + var rendererHints; + if (goog.isDef(options.renderer)) { + if (goog.isArray(options.renderer)) { + rendererHints = options.renderer; + } else if (goog.isString(options.renderer)) { + rendererHints = [options.renderer]; + } else { + goog.asserts.fail('Incorrect format for renderer option'); + } + } else { + rendererHints = ol.DEFAULT_RENDERER_HINTS; + } + + var i, ii; + for (i = 0, ii = rendererHints.length; i < ii; ++i) { + /** @type {ol.RendererHint} */ + var rendererHint = rendererHints[i]; + if (ol.ENABLE_CANVAS && rendererHint == ol.RendererHint.CANVAS) { + if (ol.BrowserFeature.HAS_CANVAS) { + rendererConstructor = ol.renderer.canvas.Map; + break; + } + } else if (ol.ENABLE_DOM && rendererHint == ol.RendererHint.DOM) { + if (ol.BrowserFeature.HAS_DOM) { + rendererConstructor = ol.renderer.dom.Map; + break; + } + } else if (ol.ENABLE_WEBGL && rendererHint == ol.RendererHint.WEBGL) { + if (ol.BrowserFeature.HAS_WEBGL) { + rendererConstructor = ol.renderer.webgl.Map; + break; + } + } + } + + var controls; + if (goog.isDef(options.controls)) { + if (goog.isArray(options.controls)) { + controls = new ol.Collection(goog.array.clone(options.controls)); + } else { + goog.asserts.assertInstanceof(options.controls, ol.Collection); + controls = options.controls; + } + } else { + controls = ol.control.defaults(); + } + + var deviceOptions = goog.isDef(options.deviceOptions) ? + options.deviceOptions : /** @type {olx.DeviceOptions} */ ({}); + + var interactions; + if (goog.isDef(options.interactions)) { + if (goog.isArray(options.interactions)) { + interactions = new ol.Collection(goog.array.clone(options.interactions)); + } else { + goog.asserts.assertInstanceof(options.interactions, ol.Collection); + interactions = options.interactions; + } + } else { + interactions = ol.interaction.defaults(); + } + + var overlays; + if (goog.isDef(options.overlays)) { + if (goog.isArray(options.overlays)) { + overlays = new ol.Collection(goog.array.clone(options.overlays)); + } else { + goog.asserts.assertInstanceof(options.overlays, ol.Collection); + overlays = options.overlays; + } + } else { + overlays = new ol.Collection(); + } + + return { + controls: controls, + deviceOptions: deviceOptions, + interactions: interactions, + keyboardEventTarget: keyboardEventTarget, + ol3Logo: ol3Logo, + overlays: overlays, + rendererConstructor: rendererConstructor, + values: values + }; + +}; + + +ol.proj.common.add(); + + +if (goog.DEBUG) { + (function() { + goog.debug.Console.autoInstall(); + var logger = goog.log.getLogger('ol'); + logger.setLevel(goog.log.Level.FINEST); + })(); +} diff --git a/float-no-zero/ol/ol/mapbrowserevent.exports b/float-no-zero/ol/ol/mapbrowserevent.exports new file mode 100644 index 0000000000..0ad1d2a276 --- /dev/null +++ b/float-no-zero/ol/ol/mapbrowserevent.exports @@ -0,0 +1,2 @@ +@exportProperty ol.MapBrowserEvent.prototype.preventDefault +@exportProperty ol.MapBrowserEvent.prototype.stopPropagation diff --git a/float-no-zero/ol/ol/mapbrowserevent.js b/float-no-zero/ol/ol/mapbrowserevent.js new file mode 100644 index 0000000000..326505f967 --- /dev/null +++ b/float-no-zero/ol/ol/mapbrowserevent.js @@ -0,0 +1,515 @@ +goog.provide('ol.MapBrowserEvent'); +goog.provide('ol.MapBrowserEvent.EventType'); +goog.provide('ol.MapBrowserEventHandler'); + +goog.require('goog.array'); +goog.require('goog.asserts'); +goog.require('goog.events'); +goog.require('goog.events.BrowserEvent'); +goog.require('goog.events.EventTarget'); +goog.require('goog.events.EventType'); +goog.require('goog.object'); +goog.require('ol.Coordinate'); +goog.require('ol.FrameState'); +goog.require('ol.MapEvent'); +goog.require('ol.Pixel'); + + + +/** + * @constructor + * @extends {ol.MapEvent} + * @implements {oli.MapBrowserEvent} + * @param {string} type Event type. + * @param {ol.Map} map Map. + * @param {goog.events.BrowserEvent} browserEvent Browser event. + * @param {?ol.FrameState=} opt_frameState Frame state. + * @todo stability experimental + */ +ol.MapBrowserEvent = function(type, map, browserEvent, opt_frameState) { + + goog.base(this, type, map, opt_frameState); + + /** + * @const + * @type {goog.events.BrowserEvent} + */ + this.browserEvent = browserEvent; + + /** + * @const + * @type {Event} + */ + this.originalEvent = browserEvent.getBrowserEvent(); + + /** + * @type {ol.Coordinate} + */ + this.coordinate = map.getEventCoordinate(this.originalEvent); + + /** + * @type {ol.Pixel} + */ + this.pixel = map.getEventPixel(this.originalEvent); + +}; +goog.inherits(ol.MapBrowserEvent, ol.MapEvent); + + +/** + * Prevents the default browser action. + * @see https://developer.mozilla.org/en-US/docs/Web/API/event.preventDefault + * @override + * @todo stability experimental + */ +ol.MapBrowserEvent.prototype.preventDefault = function() { + goog.base(this, 'preventDefault'); + this.browserEvent.preventDefault(); +}; + + +/** + * Prevents further propagation of the current event. + * @see https://developer.mozilla.org/en-US/docs/Web/API/event.stopPropagation + * @override + * @todo stability experimental + */ +ol.MapBrowserEvent.prototype.stopPropagation = function() { + goog.base(this, 'stopPropagation'); + this.browserEvent.stopPropagation(); +}; + + + +/** + * @param {ol.Map} map The map with the viewport to listen to events on. + * @constructor + * @extends {goog.events.EventTarget} + */ +ol.MapBrowserEventHandler = function(map) { + + goog.base(this); + + /** + * This is the element that we will listen to the real events on. + * @type {ol.Map} + * @private + */ + this.map_ = map; + + /** + * @type {number} + * @private + */ + this.clickTimeoutId_ = 0; + + /** + * @type {boolean} + * @private + */ + this.dragged_ = false; + + /** + * @type {Array.} + * @private + */ + this.dragListenerKeys_ = null; + + /** + * @type {goog.events.Key} + * @private + */ + this.mousedownListenerKey_ = null; + + /** + * @type {goog.events.Key} + * @private + */ + this.pointerdownListenerKey_ = null; + + /** + * @type {goog.events.Key} + * @private + */ + this.touchstartListenerKey_ = null; + + if (ol.LEGACY_IE_SUPPORT && ol.IS_LEGACY_IE) { + /** + * @type {goog.events.Key} + * @private + */ + this.ieDblclickListenerKey_ = null; + } + + /** + * @type {goog.events.BrowserEvent} + * @private + */ + this.down_ = null; + + var element = this.map_.getViewport(); + + this.relayedListenerKeys_ = [ + goog.events.listen(element, + goog.events.EventType.MOUSEMOVE, + this.relayEvent_, false, this), + goog.events.listen(element, + goog.events.EventType.CLICK, + this.relayEvent_, false, this) + ]; + + this.mousedownListenerKey_ = goog.events.listen(element, + goog.events.EventType.MOUSEDOWN, + this.handleMouseDown_, false, this); + + this.pointerdownListenerKey_ = goog.events.listen(element, + goog.events.EventType.MSPOINTERDOWN, + this.handlePointerDown_, false, this); + + this.touchstartListenerKey_ = goog.events.listen(element, + goog.events.EventType.TOUCHSTART, + this.handleTouchStart_, false, this); + + if (ol.LEGACY_IE_SUPPORT && ol.IS_LEGACY_IE) { + this.ieDblclickListenerKey_ = goog.events.listen(element, + goog.events.EventType.DBLCLICK, this.emulateClick_, false, this); + } +}; +goog.inherits(ol.MapBrowserEventHandler, goog.events.EventTarget); + + +/** + * Get the last "down" type event. This will be set on mousedown, + * touchstart, and pointerdown. + * @return {goog.events.BrowserEvent} The most recent "down" type event (or null + * if none have occurred). + */ +ol.MapBrowserEventHandler.prototype.getDown = function() { + return this.down_; +}; + + +/** + * @param {goog.events.BrowserEvent} browserEvent Browser event. + * @private + */ +ol.MapBrowserEventHandler.prototype.emulateClick_ = function(browserEvent) { + if (this.clickTimeoutId_ !== 0) { + // double-click + goog.global.clearTimeout(this.clickTimeoutId_); + this.clickTimeoutId_ = 0; + var newEvent = new ol.MapBrowserEvent( + ol.MapBrowserEvent.EventType.DBLCLICK, this.map_, browserEvent); + this.dispatchEvent(newEvent); + } else { + // click + + if (ol.LEGACY_IE_SUPPORT && ol.IS_LEGACY_IE) { + // In IE 7-8, referring to the original event object after the current + // call stack causes "member not found" exceptions, such as in the timeout + // we use here. + var ev = /** @type {Event} */ ( + goog.object.clone(browserEvent.getBrowserEvent())); + this.clickTimeoutId_ = goog.global.setTimeout(goog.bind(function() { + this.clickTimeoutId_ = 0; + var newEvent = new ol.MapBrowserEvent( + ol.MapBrowserEvent.EventType.SINGLECLICK, this.map_, + new goog.events.BrowserEvent(ev, browserEvent.currentTarget)); + this.dispatchEvent(newEvent); + }, this), 250); + } else { + this.clickTimeoutId_ = goog.global.setTimeout(goog.bind(function() { + this.clickTimeoutId_ = 0; + var newEvent = new ol.MapBrowserEvent( + ol.MapBrowserEvent.EventType.SINGLECLICK, this.map_, browserEvent); + this.dispatchEvent(newEvent); + }, this), 250); + } + } +}; + + +/** + * @param {goog.events.BrowserEvent} browserEvent Browser event. + * @private + */ +ol.MapBrowserEventHandler.prototype.handleMouseUp_ = function(browserEvent) { + if (this.down_) { + goog.array.forEach(this.dragListenerKeys_, goog.events.unlistenByKey); + this.dragListenerKeys_ = null; + if (this.dragged_) { + var newEvent = new ol.MapBrowserEvent( + ol.MapBrowserEvent.EventType.DRAGEND, this.map_, browserEvent); + this.dispatchEvent(newEvent); + } else if (browserEvent.isMouseActionButton()) { + this.emulateClick_(browserEvent); + } + } +}; + + +/** + * @param {goog.events.BrowserEvent} browserEvent Browser event. + * @private + */ +ol.MapBrowserEventHandler.prototype.handleMouseDown_ = function(browserEvent) { + if (!goog.isNull(this.pointerdownListenerKey_)) { + // mouse device detected - unregister the pointerdown and touchstart + // listeners + goog.events.unlistenByKey(this.pointerdownListenerKey_); + this.pointerdownListenerKey_ = null; + + goog.asserts.assert(!goog.isNull(this.touchstartListenerKey_)); + goog.events.unlistenByKey(this.touchstartListenerKey_); + this.touchstartListenerKey_ = null; + } + + var newEvent = new ol.MapBrowserEvent( + ol.MapBrowserEvent.EventType.DOWN, this.map_, browserEvent); + this.dispatchEvent(newEvent); + this.down_ = browserEvent; + this.dragged_ = false; + this.dragListenerKeys_ = [ + goog.events.listen(goog.global.document, goog.events.EventType.MOUSEMOVE, + this.handleMouseMove_, false, this), + goog.events.listen(goog.global.document, goog.events.EventType.MOUSEUP, + this.handleMouseUp_, false, this) + ]; + // prevent browser image dragging with the dom renderer + browserEvent.preventDefault(); +}; + + +/** + * @param {goog.events.BrowserEvent} browserEvent Browser event. + * @private + */ +ol.MapBrowserEventHandler.prototype.handleMouseMove_ = function(browserEvent) { + var newEvent; + if (!this.dragged_) { + this.dragged_ = true; + newEvent = new ol.MapBrowserEvent( + ol.MapBrowserEvent.EventType.DRAGSTART, this.map_, this.down_); + this.dispatchEvent(newEvent); + } + newEvent = new ol.MapBrowserEvent( + ol.MapBrowserEvent.EventType.DRAG, this.map_, browserEvent); + this.dispatchEvent(newEvent); +}; + + +/** + * @param {goog.events.BrowserEvent} browserEvent Browser event. + * @private + */ +ol.MapBrowserEventHandler.prototype.handlePointerDown_ = + function(browserEvent) { + if (!goog.isNull(this.mousedownListenerKey_)) { + // pointer device detected - unregister the mousedown and touchstart + // listeners + goog.events.unlistenByKey(this.mousedownListenerKey_); + this.mousedownListenerKey_ = null; + + goog.asserts.assert(!goog.isNull(this.touchstartListenerKey_)); + goog.events.unlistenByKey(this.touchstartListenerKey_); + this.touchstartListenerKey_ = null; + } + + var newEvent = new ol.MapBrowserEvent( + ol.MapBrowserEvent.EventType.TOUCHSTART, this.map_, browserEvent); + this.dispatchEvent(newEvent); + + this.down_ = browserEvent; + this.dragged_ = false; + this.dragListenerKeys_ = [ + goog.events.listen(goog.global.document, + goog.events.EventType.MSPOINTERMOVE, + this.handlePointerMove_, false, this), + goog.events.listen(goog.global.document, goog.events.EventType.MSPOINTERUP, + this.handlePointerUp_, false, this) + ]; + + // FIXME check if/when this is necessary + // prevent context menu + browserEvent.preventDefault(); +}; + + +/** + * @param {goog.events.BrowserEvent} browserEvent Browser event. + * @private + */ +ol.MapBrowserEventHandler.prototype.handlePointerMove_ = + function(browserEvent) { + // Fix IE10 on windows Surface : When you tap the tablet, it triggers + // multiple pointermove events between pointerdown and pointerup with + // the exact same coordinates of the pointerdown event. To avoid a + // 'false' touchmove event to be dispatched , we test if the pointer + // effectively moved. + if (browserEvent.clientX != this.down_.clientX || + browserEvent.clientY != this.down_.clientY) { + this.dragged_ = true; + var newEvent = new ol.MapBrowserEvent( + ol.MapBrowserEvent.EventType.TOUCHMOVE, this.map_, browserEvent); + this.dispatchEvent(newEvent); + } +}; + + +/** + * @param {goog.events.BrowserEvent} browserEvent Browser event. + * @private + */ +ol.MapBrowserEventHandler.prototype.handlePointerUp_ = function(browserEvent) { + var newEvent = new ol.MapBrowserEvent( + ol.MapBrowserEvent.EventType.TOUCHEND, this.map_, browserEvent); + this.dispatchEvent(newEvent); + goog.array.forEach(this.dragListenerKeys_, goog.events.unlistenByKey); + + // We emulate click event on left mouse button click, touch contact, and pen + // contact. isMouseActionButton returns true in these cases (evt.button is set + // to 0). + // See http://www.w3.org/TR/pointerevents/#button-states . + if (!this.dragged_ && browserEvent.isMouseActionButton()) { + goog.asserts.assert(!goog.isNull(this.down_)); + this.emulateClick_(this.down_); + } +}; + + +/** + * @param {goog.events.BrowserEvent} browserEvent Browser event. + * @private + */ +ol.MapBrowserEventHandler.prototype.handleTouchStart_ = function(browserEvent) { + if (!goog.isNull(this.mousedownListenerKey_)) { + // touch device detected - unregister the mousedown and pointerdown + // listeners + goog.events.unlistenByKey(this.mousedownListenerKey_); + this.mousedownListenerKey_ = null; + + goog.asserts.assert(!goog.isNull(this.pointerdownListenerKey_)); + goog.events.unlistenByKey(this.pointerdownListenerKey_); + this.pointerdownListenerKey_ = null; + } + + var newEvent = new ol.MapBrowserEvent( + ol.MapBrowserEvent.EventType.TOUCHSTART, this.map_, browserEvent); + this.dispatchEvent(newEvent); + + this.down_ = browserEvent; + this.dragged_ = false; + + if (goog.isNull(this.dragListenerKeys_)) { + this.dragListenerKeys_ = [ + goog.events.listen(goog.global.document, goog.events.EventType.TOUCHMOVE, + this.handleTouchMove_, false, this), + goog.events.listen(goog.global.document, goog.events.EventType.TOUCHEND, + this.handleTouchEnd_, false, this) + ]; + } + + // FIXME check if/when this is necessary + browserEvent.preventDefault(); +}; + + +/** + * @param {goog.events.BrowserEvent} browserEvent Browser event. + * @private + */ +ol.MapBrowserEventHandler.prototype.handleTouchMove_ = function(browserEvent) { + this.dragged_ = true; + var newEvent = new ol.MapBrowserEvent( + ol.MapBrowserEvent.EventType.TOUCHMOVE, this.map_, browserEvent); + this.dispatchEvent(newEvent); + + // Some native android browser triggers mousemove events during small period + // of time. See: https://code.google.com/p/android/issues/detail?id=5491 or + // https://code.google.com/p/android/issues/detail?id=19827 + // ex: Galaxy Tab P3110 + Android 4.1.1 + browserEvent.preventDefault(); +}; + + +/** + * @param {goog.events.BrowserEvent} browserEvent Browser event. + * @private + */ +ol.MapBrowserEventHandler.prototype.handleTouchEnd_ = function(browserEvent) { + var newEvent = new ol.MapBrowserEvent( + ol.MapBrowserEvent.EventType.TOUCHEND, this.map_, browserEvent); + this.dispatchEvent(newEvent); + if (browserEvent.getBrowserEvent().targetTouches.length === 0) { + goog.array.forEach(this.dragListenerKeys_, goog.events.unlistenByKey); + this.dragListenerKeys_ = null; + } + if (!this.dragged_) { + goog.asserts.assert(!goog.isNull(this.down_)); + this.emulateClick_(this.down_); + } +}; + + +/** + * FIXME empty description for jsdoc + */ +ol.MapBrowserEventHandler.prototype.disposeInternal = function() { + if (!goog.isNull(this.relayedListenerKeys_)) { + goog.array.forEach(this.relayedListenerKeys_, goog.events.unlistenByKey); + this.relayedListenerKeys_ = null; + } + if (!goog.isNull(this.mousedownListenerKey_)) { + goog.events.unlistenByKey(this.mousedownListenerKey_); + this.mousedownListenerKey_ = null; + } + if (!goog.isNull(this.pointerdownListenerKey_)) { + goog.events.unlistenByKey(this.pointerdownListenerKey_); + this.pointerdownListenerKey_ = null; + } + if (!goog.isNull(this.touchstartListenerKey_)) { + goog.events.unlistenByKey(this.touchstartListenerKey_); + this.touchstartListenerKey_ = null; + } + if (!goog.isNull(this.dragListenerKeys_)) { + goog.array.forEach(this.dragListenerKeys_, goog.events.unlistenByKey); + this.dragListenerKeys_ = null; + } + if (ol.LEGACY_IE_SUPPORT && ol.IS_LEGACY_IE && + !goog.isNull(this.ieDblclickListenerKey_)) { + goog.events.unlistenByKey(this.ieDblclickListenerKey_); + this.ieDblclickListenerKey_ = null; + } + goog.base(this, 'disposeInternal'); +}; + + +/** + * Wrap and relay a browser event. Note that this requires that the type + * string for the MapBrowserEvent matches the BrowserEvent type. + * @param {goog.events.BrowserEvent} browserEvent Browser event. + * @private + */ +ol.MapBrowserEventHandler.prototype.relayEvent_ = function(browserEvent) { + this.dispatchEvent(new ol.MapBrowserEvent( + browserEvent.type, this.map_, browserEvent)); +}; + + +/** + * Constants for event names. + * @enum {string} + */ +ol.MapBrowserEvent.EventType = { + CLICK: goog.events.EventType.CLICK, + DBLCLICK: goog.events.EventType.DBLCLICK, + MOUSEMOVE: goog.events.EventType.MOUSEMOVE, + DOWN: 'down', + DRAGSTART: 'dragstart', + DRAG: 'drag', + DRAGEND: 'dragend', + SINGLECLICK: 'singleclick', + TOUCHSTART: goog.events.EventType.TOUCHSTART, + TOUCHMOVE: goog.events.EventType.TOUCHMOVE, + TOUCHEND: goog.events.EventType.TOUCHEND +}; diff --git a/float-no-zero/ol/ol/mapevent.js b/float-no-zero/ol/ol/mapevent.js new file mode 100644 index 0000000000..3629fb4936 --- /dev/null +++ b/float-no-zero/ol/ol/mapevent.js @@ -0,0 +1,40 @@ +goog.provide('ol.MapEvent'); +goog.provide('ol.MapEventType'); + +goog.require('goog.events.Event'); +goog.require('ol.FrameState'); + + +/** + * @enum {string} + */ +ol.MapEventType = { + POSTRENDER: 'postrender', + MOVEEND: 'moveend' +}; + + + +/** + * @constructor + * @extends {goog.events.Event} + * @param {string} type Event type. + * @param {ol.Map} map Map. + * @param {?ol.FrameState=} opt_frameState Frame state. + */ +ol.MapEvent = function(type, map, opt_frameState) { + + goog.base(this, type); + + /** + * @type {ol.Map} + */ + this.map = map; + + /** + * @type {?ol.FrameState} + */ + this.frameState = goog.isDef(opt_frameState) ? opt_frameState : null; + +}; +goog.inherits(ol.MapEvent, goog.events.Event); diff --git a/float-no-zero/ol/ol/math.js b/float-no-zero/ol/ol/math.js new file mode 100644 index 0000000000..14ffd2977a --- /dev/null +++ b/float-no-zero/ol/ol/math.js @@ -0,0 +1,69 @@ +goog.provide('ol.math'); + +goog.require('goog.asserts'); + + +/** + * @param {number} x X. + * @return {number} Hyperbolic cosine of x. + */ +ol.math.cosh = function(x) { + return (Math.exp(x) + Math.exp(-x)) / 2; +}; + + +/** + * @param {number} x X. + * @return {number} Hyperbolic cotangent of x. + */ +ol.math.coth = function(x) { + var expMinusTwoX = Math.exp(-2 * x); + return (1 + expMinusTwoX) / (1 - expMinusTwoX); +}; + + +/** + * @param {number} x X. + * @return {number} Hyperbolic cosecant of x. + */ +ol.math.csch = function(x) { + return 2 / (Math.exp(x) - Math.exp(-x)); +}; + + +/** + * @param {number} x X. + * @return {number} The smallest power of two greater than or equal to x. + */ +ol.math.roundUpToPowerOfTwo = function(x) { + goog.asserts.assert(0 < x); + return Math.pow(2, Math.ceil(Math.log(x) / Math.LN2)); +}; + + +/** + * @param {number} x X. + * @return {number} Hyperbolic secant of x. + */ +ol.math.sech = function(x) { + return 2 / (Math.exp(x) + Math.exp(-x)); +}; + + +/** + * @param {number} x X. + * @return {number} Hyperbolic sine of x. + */ +ol.math.sinh = function(x) { + return (Math.exp(x) - Math.exp(-x)) / 2; +}; + + +/** + * @param {number} x X. + * @return {number} Hyperbolic tangent of x. + */ +ol.math.tanh = function(x) { + var expMinusTwoX = Math.exp(-2 * x); + return (1 - expMinusTwoX) / (1 + expMinusTwoX); +}; diff --git a/float-no-zero/ol/ol/object.exports b/float-no-zero/ol/ol/object.exports new file mode 100644 index 0000000000..89426170a5 --- /dev/null +++ b/float-no-zero/ol/ol/object.exports @@ -0,0 +1,9 @@ +@exportSymbol ol.Object +@exportProperty ol.Object.prototype.bindTo +@exportProperty ol.Object.prototype.get +@exportProperty ol.Object.prototype.getProperties +@exportProperty ol.Object.prototype.notify +@exportProperty ol.Object.prototype.set +@exportProperty ol.Object.prototype.setValues +@exportProperty ol.Object.prototype.unbind +@exportProperty ol.Object.prototype.unbindAll diff --git a/float-no-zero/ol/ol/object.js b/float-no-zero/ol/ol/object.js new file mode 100644 index 0000000000..59f8f54f88 --- /dev/null +++ b/float-no-zero/ol/ol/object.js @@ -0,0 +1,470 @@ + +/** + * An implementation of Google Maps' MVCObject. + * @see https://developers.google.com/maps/articles/mvcfun + * @see https://developers.google.com/maps/documentation/javascript/reference + */ + +goog.provide('ol.Object'); +goog.provide('ol.ObjectEvent'); +goog.provide('ol.ObjectEventType'); + +goog.require('goog.array'); +goog.require('goog.events'); +goog.require('goog.events.Event'); +goog.require('goog.functions'); +goog.require('goog.object'); +goog.require('ol.Observable'); + + +/** + * @enum {string} + */ +ol.ObjectEventType = { + BEFOREPROPERTYCHANGE: 'beforepropertychange', + PROPERTYCHANGE: 'propertychange' +}; + + + +/** + * Object representing a property change event. + * + * @param {string} type The event type. + * @param {string} key The property name. + * @extends {goog.events.Event} + * @implements {oli.ObjectEvent} + * @constructor + */ +ol.ObjectEvent = function(type, key) { + goog.base(this, type); + + /** + * The name of the property whose value is changing. + * @type {string} + */ + this.key = key; + +}; +goog.inherits(ol.ObjectEvent, goog.events.Event); + + + +/** + * @constructor + * @param {ol.Object} target + * @param {string} key + * @todo stability experimental + */ +ol.ObjectAccessor = function(target, key) { + + /** + * @type {ol.Object} + */ + this.target = target; + + /** + * @type {string} + */ + this.key = key; + + /** + * @type {function(?): ?} + */ + this.from = goog.functions.identity; + + /** + * @type {function(?): ?} + */ + this.to = goog.functions.identity; +}; + + +/** + * @param {function(?): ?} from A function that transforms the source value + * before it is set to the target. + * @param {function(?): ?} to A function that transforms the target value + * before it is set to the source. + */ +ol.ObjectAccessor.prototype.transform = function(from, to) { + this.from = from; + this.to = to; + + this.target.notify(this.key); +}; + + + +/** + * Base class implementing KVO (Key Value Observing). + * @constructor + * @extends {ol.Observable} + * @param {Object.=} opt_values Values. + * @todo stability experimental + */ +ol.Object = function(opt_values) { + goog.base(this); + + /** + * @private + * @type {Object.} + */ + this.values_ = {}; + + /** + * @private + * @type {Object.} + */ + this.accessors_ = {}; + + /** + * Lookup of beforechange listener keys. + * @type {Object.} + * @private + */ + this.beforeChangeListeners_ = {}; + + /** + * @private + * @type {Object.} + */ + this.listeners_ = {}; + + if (goog.isDef(opt_values)) { + this.setValues(opt_values); + } +}; +goog.inherits(ol.Object, ol.Observable); + + +/** + * @private + * @type {Object.} + */ +ol.Object.changeEventTypeCache_ = {}; + + +/** + * @private + * @type {Object.} + */ +ol.Object.getterNameCache_ = {}; + + +/** + * @private + * @type {Object.} + */ +ol.Object.setterNameCache_ = {}; + + +/** + * @param {string} str String. + * @return {string} Capitalized string. + */ +ol.Object.capitalize = function(str) { + return str.substr(0, 1).toUpperCase() + str.substr(1); +}; + + +/** + * @param {string} key Key name. + * @return {string} Change name. + */ +ol.Object.getChangeEventType = function(key) { + return ol.Object.changeEventTypeCache_.hasOwnProperty(key) ? + ol.Object.changeEventTypeCache_[key] : + (ol.Object.changeEventTypeCache_[key] = 'change:' + key.toLowerCase()); +}; + + +/** + * @param {string} key String. + * @return {string} Getter name. + */ +ol.Object.getGetterName = function(key) { + return ol.Object.getterNameCache_.hasOwnProperty(key) ? + ol.Object.getterNameCache_[key] : + (ol.Object.getterNameCache_[key] = 'get' + ol.Object.capitalize(key)); +}; + + +/** + * @param {string} key String. + * @return {string} Setter name. + */ +ol.Object.getSetterName = function(key) { + return ol.Object.setterNameCache_.hasOwnProperty(key) ? + ol.Object.setterNameCache_[key] : + (ol.Object.setterNameCache_[key] = 'set' + ol.Object.capitalize(key)); +}; + + +/** + * The bindTo method allows you to set up a two-way binding between a + * `source` and `target` object. The method returns an + * ol.ObjectAccessor with a transform method that lets you transform + * values on the way from the source to the target and on the way back. + * + * For example, if you had two map views (sourceView and targetView) + * and you wanted the target view to have double the resolution of the + * source view, you could transform the resolution on the way to and + * from the target with the following: + * + * sourceView.bindTo('resolution', targetView) + * .transform( + * function(sourceResolution) { + * // from sourceView.resolution to targetView.resolution + * return 2 * sourceResolution; + * }, + * function(targetResolution) { + * // from targetView.resolution to sourceView.resolution + * return targetResolution / 2; + * } + * ); + * + * @param {string} key Key name. + * @param {ol.Object} target Target. + * @param {string=} opt_targetKey Target key. + * @return {ol.ObjectAccessor} + * @todo stability experimental + */ +ol.Object.prototype.bindTo = function(key, target, opt_targetKey) { + var targetKey = opt_targetKey || key; + this.unbind(key); + + // listen for change:targetkey events + var eventType = ol.Object.getChangeEventType(targetKey); + this.listeners_[key] = goog.events.listen(target, eventType, + /** + * @this {ol.Object} + */ + function() { + this.notifyInternal_(key); + }, undefined, this); + + // listen for beforechange events and relay if key matches + this.beforeChangeListeners_[key] = goog.events.listen(target, + ol.ObjectEventType.BEFOREPROPERTYCHANGE, + this.createBeforeChangeListener_(key, targetKey), + undefined, this); + + var accessor = new ol.ObjectAccessor(target, targetKey); + this.accessors_[key] = accessor; + this.notifyInternal_(key); + return accessor; +}; + + +/** + * Create a listener for beforechange events on a target object. This listener + * will relay events on this object if the event key matches the provided target + * key. + * @param {string} key The key on this object whose value will be changing. + * @param {string} targetKey The key on the target object. + * @return {function(this: ol.Object, ol.ObjectEvent)} Listener. + * @private + */ +ol.Object.prototype.createBeforeChangeListener_ = function(key, targetKey) { + /** + * Conditionally relay beforechange events if event key matches target key. + * @param {ol.ObjectEvent} event The beforechange event from the target. + * @this {ol.Object} + */ + return function(event) { + if (event.key === targetKey) { + this.dispatchEvent( + new ol.ObjectEvent(ol.ObjectEventType.BEFOREPROPERTYCHANGE, key)); + } + }; +}; + + +/** + * Gets a value. + * @param {string} key Key name. + * @return {*} Value. + * @todo stability experimental + */ +ol.Object.prototype.get = function(key) { + var value; + var accessors = this.accessors_; + if (accessors.hasOwnProperty(key)) { + var accessor = accessors[key]; + var target = accessor.target; + var targetKey = accessor.key; + var getterName = ol.Object.getGetterName(targetKey); + var getter = /** @type {function(): *|undefined} */ + (goog.object.get(target, getterName)); + if (goog.isDef(getter)) { + value = getter.call(target); + } else { + value = target.get(targetKey); + } + value = accessor.to(value); + } else if (this.values_.hasOwnProperty(key)) { + value = this.values_[key]; + } + return value; +}; + + +/** + * Get a list of object property names. + * @return {Array.} List of property names. + */ +ol.Object.prototype.getKeys = function() { + var accessors = this.accessors_; + var keysObject; + if (goog.object.isEmpty(this.values_)) { + if (goog.object.isEmpty(accessors)) { + return []; + } else { + keysObject = accessors; + } + } else { + if (goog.object.isEmpty(accessors)) { + keysObject = this.values_; + } else { + keysObject = {}; + var key; + for (key in this.values_) { + keysObject[key] = true; + } + for (key in accessors) { + keysObject[key] = true; + } + } + } + return goog.object.getKeys(keysObject); +}; + + +/** + * Get an object of all property names and values. + * @return {Object.} Object. + * @todo stability experimental + */ +ol.Object.prototype.getProperties = function() { + var properties = {}; + var key; + for (key in this.values_) { + properties[key] = this.values_[key]; + } + for (key in this.accessors_) { + properties[key] = this.get(key); + } + return properties; +}; + + +/** + * Notify all observers of a change on this property. This notifies both + * objects that are bound to the object's property as well as the object + * that it is bound to. + * @param {string} key Key name. + * @todo stability experimental + */ +ol.Object.prototype.notify = function(key) { + var accessors = this.accessors_; + if (accessors.hasOwnProperty(key)) { + var accessor = accessors[key]; + var target = accessor.target; + var targetKey = accessor.key; + target.notify(targetKey); + } else { + this.notifyInternal_(key); + } +}; + + +/** + * @param {string} key Key name. + * @private + */ +ol.Object.prototype.notifyInternal_ = function(key) { + var eventType = ol.Object.getChangeEventType(key); + this.dispatchEvent(eventType); + this.dispatchEvent( + new ol.ObjectEvent(ol.ObjectEventType.PROPERTYCHANGE, key)); +}; + + +/** + * Sets a value. + * @param {string} key Key name. + * @param {*} value Value. + * @todo stability experimental + */ +ol.Object.prototype.set = function(key, value) { + this.dispatchEvent( + new ol.ObjectEvent(ol.ObjectEventType.BEFOREPROPERTYCHANGE, key)); + var accessors = this.accessors_; + if (accessors.hasOwnProperty(key)) { + var accessor = accessors[key]; + var target = accessor.target; + var targetKey = accessor.key; + value = accessor.from(value); + var setterName = ol.Object.getSetterName(targetKey); + var setter = /** @type {function(*)|undefined} */ + (goog.object.get(target, setterName)); + if (goog.isDef(setter)) { + setter.call(target, value); + } else { + target.set(targetKey, value); + } + } else { + this.values_[key] = value; + this.notifyInternal_(key); + } +}; + + +/** + * Sets a collection of key-value pairs. + * @param {Object.} values Values. + * @todo stability experimental + */ +ol.Object.prototype.setValues = function(values) { + var key; + for (key in values) { + this.set(key, values[key]); + } +}; + + +/** + * Removes a binding. Unbinding will set the unbound property to the current + * value. The object will not be notified, as the value has not changed. + * @param {string} key Key name. + * @todo stability experimental + */ +ol.Object.prototype.unbind = function(key) { + var listeners = this.listeners_; + var listener = listeners[key]; + if (listener) { + delete listeners[key]; + goog.events.unlistenByKey(listener); + var value = this.get(key); + delete this.accessors_[key]; + this.values_[key] = value; + } + + // unregister any beforechange listener + var listenerKey = this.beforeChangeListeners_[key]; + if (listenerKey) { + goog.events.unlistenByKey(listenerKey); + delete this.beforeChangeListeners_[key]; + } +}; + + +/** + * Removes all bindings. + * @todo stability experimental + */ +ol.Object.prototype.unbindAll = function() { + for (var key in this.listeners_) { + this.unbind(key); + } +}; diff --git a/float-no-zero/ol/ol/observable.exports b/float-no-zero/ol/ol/observable.exports new file mode 100644 index 0000000000..cd9d88898b --- /dev/null +++ b/float-no-zero/ol/ol/observable.exports @@ -0,0 +1,6 @@ +@exportSymbol ol.Observable +@exportProperty ol.Observable.prototype.dispatchChangeEvent +@exportProperty ol.Observable.prototype.on +@exportProperty ol.Observable.prototype.once +@exportProperty ol.Observable.prototype.un +@exportProperty ol.Observable.prototype.unByKey diff --git a/float-no-zero/ol/ol/observable.js b/float-no-zero/ol/ol/observable.js new file mode 100644 index 0000000000..1d6431ac08 --- /dev/null +++ b/float-no-zero/ol/ol/observable.js @@ -0,0 +1,95 @@ +goog.provide('ol.Observable'); + +goog.require('goog.events'); +goog.require('goog.events.EventTarget'); +goog.require('goog.events.EventType'); + + + +/** + * An event target providing convenient methods for listener registration + * and unregistration. + * @constructor + * @extends {goog.events.EventTarget} + * @suppress {checkStructDictInheritance} + * @struct + * @todo stability experimental + */ +ol.Observable = function() { + + goog.base(this); + + /** + * @private + * @type {number} + */ + this.revision_ = 0; + +}; +goog.inherits(ol.Observable, goog.events.EventTarget); + + +/** + * @todo stability experimental + */ +ol.Observable.prototype.dispatchChangeEvent = function() { + ++this.revision_; + this.dispatchEvent(goog.events.EventType.CHANGE); +}; + + +/** + * @return {number} Revision. + * @todo stability experimental + */ +ol.Observable.prototype.getRevision = function() { + return this.revision_; +}; + + +/** + * Listen for a certain type of event. + * @param {string|Array.} type The event type or array of event types. + * @param {function(?): ?} listener The listener function. + * @param {Object=} opt_this The object to use as `this` in `listener`. + * @return {goog.events.Key} Unique key for the listener. + * @todo stability experimental + */ +ol.Observable.prototype.on = function(type, listener, opt_this) { + return goog.events.listen(this, type, listener, false, opt_this); +}; + + +/** + * Listen once for a certain type of event. + * @param {string|Array.} type The event type or array of event types. + * @param {function(?): ?} listener The listener function. + * @param {Object=} opt_this The object to use as `this` in `listener`. + * @return {goog.events.Key} Unique key for the listener. + * @todo stability experimental + */ +ol.Observable.prototype.once = function(type, listener, opt_this) { + return goog.events.listenOnce(this, type, listener, false, opt_this); +}; + + +/** + * Unlisten for a certain type of event. + * @param {string|Array.} type The event type or array of event types. + * @param {function(?): ?} listener The listener function. + * @param {Object=} opt_this The object to use as `this` in `listener`. + * @todo stability experimental + */ +ol.Observable.prototype.un = function(type, listener, opt_this) { + goog.events.unlisten(this, type, listener, false, opt_this); +}; + + +/** + * Removes an event listener using the key returned by `on()` or `once()`. + * @param {goog.events.Key} key Key. + * @todo stability experimental + */ +ol.Observable.prototype.unByKey = function(key) { + goog.events.unlistenByKey(key); +}; diff --git a/float-no-zero/ol/ol/ol.exports b/float-no-zero/ol/ol/ol.exports new file mode 100644 index 0000000000..e6371ba44b --- /dev/null +++ b/float-no-zero/ol/ol/ol.exports @@ -0,0 +1 @@ +@exportSymbol ol.inherits diff --git a/float-no-zero/ol/ol/ol.js b/float-no-zero/ol/ol/ol.js new file mode 100644 index 0000000000..6a7e7312e6 --- /dev/null +++ b/float-no-zero/ol/ol/ol.js @@ -0,0 +1,15 @@ +goog.provide('ol'); + + +/** + * ol.inherits is an alias to the goog.inherits function. It is exported + * for use in non-compiled application code. See ol.exports. + * + * FIXME: We use a new line to fake the linter. Without the new line the + * linter complains with: + * + * "Missing newline between constructor and goog.inherits" + * @todo stability experimental + */ +ol.inherits = + goog.inherits; diff --git a/float-no-zero/ol/ol/overlay.exports b/float-no-zero/ol/ol/overlay.exports new file mode 100644 index 0000000000..c2ce24085b --- /dev/null +++ b/float-no-zero/ol/ol/overlay.exports @@ -0,0 +1 @@ +@exportSymbol ol.Overlay diff --git a/float-no-zero/ol/ol/overlay.js b/float-no-zero/ol/ol/overlay.js new file mode 100644 index 0000000000..c2221ee7f2 --- /dev/null +++ b/float-no-zero/ol/ol/overlay.js @@ -0,0 +1,400 @@ +goog.provide('ol.Overlay'); +goog.provide('ol.OverlayPositioning'); +goog.provide('ol.OverlayProperty'); + +goog.require('goog.asserts'); +goog.require('goog.dom'); +goog.require('goog.dom.TagName'); +goog.require('goog.events'); +goog.require('goog.style'); +goog.require('ol.Coordinate'); +goog.require('ol.Map'); +goog.require('ol.MapEventType'); +goog.require('ol.Object'); + + +/** + * @enum {string} + */ +ol.OverlayProperty = { + ELEMENT: 'element', + MAP: 'map', + POSITION: 'position', + POSITIONING: 'positioning' +}; + + +/** + * @enum {string} + * @todo stability experimental + */ +ol.OverlayPositioning = { + BOTTOM_LEFT: 'bottom-left', + BOTTOM_CENTER: 'bottom-center', + BOTTOM_RIGHT: 'bottom-right', + CENTER_LEFT: 'center-left', + CENTER_CENTER: 'center-center', + CENTER_RIGHT: 'center-right', + TOP_LEFT: 'top-left', + TOP_CENTER: 'top-center', + TOP_RIGHT: 'top-right' +}; + + + +/** + * An element to show on top of the map, such as for a popup. + * + * Example: + * + * var popup = new ol.Overlay({ + * element: document.getElementById('popup') + * }); + * popup.setPosition(coordinate); + * map.addOverlay(popup); + * + * @constructor + * @extends {ol.Object} + * @param {olx.OverlayOptions} options Overlay options. + * @todo stability experimental + * @todo observable element {Element} the Element containing the overlay + * @todo observable map {ol.Map} the map that the overlay is part of + * @todo observable position {ol.Coordinate} the spatial point that the overlay + * is anchored at + * @todo observable positioning {ol.OverlayPositioning} how the overlay is + * positioned relative to its point on the map + */ +ol.Overlay = function(options) { + + goog.base(this); + + /** + * @private + * @type {boolean} + */ + this.insertFirst_ = goog.isDef(options.insertFirst) ? + options.insertFirst : true; + + /** + * @private + * @type {boolean} + */ + this.stopEvent_ = goog.isDef(options.stopEvent) ? options.stopEvent : true; + + /** + * @private + * @type {Element} + */ + this.element_ = goog.dom.createElement(goog.dom.TagName.DIV); + this.element_.style.position = 'absolute'; + + /** + * @private + * @type {{bottom_: string, + * left_: string, + * right_: string, + * top_: string, + * visible: boolean}} + */ + this.rendered_ = { + bottom_: '', + left_: '', + right_: '', + top_: '', + visible: true + }; + + /** + * @private + * @type {goog.events.Key} + */ + this.mapPostrenderListenerKey_ = null; + + goog.events.listen( + this, ol.Object.getChangeEventType(ol.OverlayProperty.ELEMENT), + this.handleElementChanged, false, this); + + goog.events.listen( + this, ol.Object.getChangeEventType(ol.OverlayProperty.MAP), + this.handleMapChanged, false, this); + + goog.events.listen( + this, ol.Object.getChangeEventType(ol.OverlayProperty.POSITION), + this.handlePositionChanged, false, this); + + goog.events.listen( + this, + ol.Object.getChangeEventType(ol.OverlayProperty.POSITIONING), + this.handlePositioningChanged, false, this); + + if (goog.isDef(options.element)) { + this.setElement(options.element); + } + if (goog.isDef(options.position)) { + this.setPosition(options.position); + } + if (goog.isDef(options.positioning)) { + this.setPositioning( + /** @type {ol.OverlayPositioning} */ (options.positioning)); + } + +}; +goog.inherits(ol.Overlay, ol.Object); + + +/** + * Get the DOM element of this overlay. + * @return {Element|undefined} Element. + * @todo stability experimental + */ +ol.Overlay.prototype.getElement = function() { + return /** @type {Element|undefined} */ ( + this.get(ol.OverlayProperty.ELEMENT)); +}; +goog.exportProperty( + ol.Overlay.prototype, + 'getElement', + ol.Overlay.prototype.getElement); + + +/** + * Get the map associated with this overlay. + * @return {ol.Map|undefined} Map. + * @todo stability experimental + */ +ol.Overlay.prototype.getMap = function() { + return /** @type {ol.Map|undefined} */ ( + this.get(ol.OverlayProperty.MAP)); +}; +goog.exportProperty( + ol.Overlay.prototype, + 'getMap', + ol.Overlay.prototype.getMap); + + +/** + * Get the current position of this overlay. + * @return {ol.Coordinate|undefined} Position. + * @todo stability experimental + */ +ol.Overlay.prototype.getPosition = function() { + return /** @type {ol.Coordinate|undefined} */ ( + this.get(ol.OverlayProperty.POSITION)); +}; +goog.exportProperty( + ol.Overlay.prototype, + 'getPosition', + ol.Overlay.prototype.getPosition); + + +/** + * Get the current positioning of this overlay. + * @return {ol.OverlayPositioning|undefined} Positioning. + * @todo stability experimental + */ +ol.Overlay.prototype.getPositioning = function() { + return /** @type {ol.OverlayPositioning|undefined} */ ( + this.get(ol.OverlayProperty.POSITIONING)); +}; +goog.exportProperty( + ol.Overlay.prototype, + 'getPositioning', + ol.Overlay.prototype.getPositioning); + + +/** + * @protected + */ +ol.Overlay.prototype.handleElementChanged = function() { + goog.dom.removeChildren(this.element_); + var element = this.getElement(); + if (goog.isDefAndNotNull(element)) { + goog.dom.append(/** @type {!Node} */ (this.element_), element); + } +}; + + +/** + * @protected + */ +ol.Overlay.prototype.handleMapChanged = function() { + if (!goog.isNull(this.mapPostrenderListenerKey_)) { + goog.dom.removeNode(this.element_); + goog.events.unlistenByKey(this.mapPostrenderListenerKey_); + this.mapPostrenderListenerKey_ = null; + } + var map = this.getMap(); + if (goog.isDefAndNotNull(map)) { + this.mapPostrenderListenerKey_ = goog.events.listen(map, + ol.MapEventType.POSTRENDER, this.handleMapPostrender, false, this); + this.updatePixelPosition_(); + var container = this.stopEvent_ ? + map.getOverlayContainerStopEvent() : map.getOverlayContainer(); + if (this.insertFirst_) { + goog.dom.insertChildAt(/** @type {!Element} */ ( + container), this.element_, 0); + } else { + goog.dom.append(/** @type {!Node} */ (container), this.element_); + } + } +}; + + +/** + * @protected + */ +ol.Overlay.prototype.handleMapPostrender = function() { + this.updatePixelPosition_(); +}; + + +/** + * @protected + */ +ol.Overlay.prototype.handlePositionChanged = function() { + this.updatePixelPosition_(); +}; + + +/** + * @protected + */ +ol.Overlay.prototype.handlePositioningChanged = function() { + this.updatePixelPosition_(); +}; + + +/** + * Set the DOM element to be associated with this overlay. + * @param {Element|undefined} element Element. + * @todo stability experimental + */ +ol.Overlay.prototype.setElement = function(element) { + this.set(ol.OverlayProperty.ELEMENT, element); +}; +goog.exportProperty( + ol.Overlay.prototype, + 'setElement', + ol.Overlay.prototype.setElement); + + +/** + * Set the map to be associated with this overlay. + * @param {ol.Map|undefined} map Map. + * @todo stability experimental + */ +ol.Overlay.prototype.setMap = function(map) { + this.set(ol.OverlayProperty.MAP, map); +}; +goog.exportProperty( + ol.Overlay.prototype, + 'setMap', + ol.Overlay.prototype.setMap); + + +/** + * Set the position for this overlay. + * @param {ol.Coordinate|undefined} position Position. + * @todo stability experimental + */ +ol.Overlay.prototype.setPosition = function(position) { + this.set(ol.OverlayProperty.POSITION, position); +}; +goog.exportProperty( + ol.Overlay.prototype, + 'setPosition', + ol.Overlay.prototype.setPosition); + + +/** + * Set the positioning for this overlay. + * @param {ol.OverlayPositioning|undefined} positioning Positioning. + * @todo stability experimental + */ +ol.Overlay.prototype.setPositioning = function(positioning) { + this.set(ol.OverlayProperty.POSITIONING, positioning); +}; +goog.exportProperty( + ol.Overlay.prototype, + 'setPositioning', + ol.Overlay.prototype.setPositioning); + + +/** + * @private + */ +ol.Overlay.prototype.updatePixelPosition_ = function() { + + var map = this.getMap(); + var position = this.getPosition(); + if (!goog.isDef(map) || !map.isRendered() || !goog.isDef(position)) { + if (this.rendered_.visible) { + goog.style.setElementShown(this.element_, false); + this.rendered_.visible = false; + } + return; + } + + var pixel = map.getPixelFromCoordinate(position); + goog.asserts.assert(!goog.isNull(pixel)); + var mapSize = map.getSize(); + goog.asserts.assert(goog.isDef(mapSize)); + var style = this.element_.style; + var positioning = this.getPositioning(); + if (positioning == ol.OverlayPositioning.BOTTOM_RIGHT || + positioning == ol.OverlayPositioning.CENTER_RIGHT || + positioning == ol.OverlayPositioning.TOP_RIGHT) { + if (this.rendered_.left_ !== '') { + this.rendered_.left_ = style.left = ''; + } + var right = Math.round(mapSize[0] - pixel[0]) + 'px'; + if (this.rendered_.right_ != right) { + this.rendered_.right_ = style.right = right; + } + } else { + if (this.rendered_.right_ !== '') { + this.rendered_.right_ = style.right = ''; + } + var offsetX = 0; + if (positioning == ol.OverlayPositioning.BOTTOM_CENTER || + positioning == ol.OverlayPositioning.CENTER_CENTER || + positioning == ol.OverlayPositioning.TOP_CENTER) { + offsetX = goog.style.getSize(this.element_).width / 2; + } + var left = Math.round(pixel[0] - offsetX) + 'px'; + if (this.rendered_.left_ != left) { + this.rendered_.left_ = style.left = left; + } + } + if (positioning == ol.OverlayPositioning.BOTTOM_LEFT || + positioning == ol.OverlayPositioning.BOTTOM_CENTER || + positioning == ol.OverlayPositioning.BOTTOM_RIGHT) { + if (this.rendered_.top_ !== '') { + this.rendered_.top_ = style.top = ''; + } + var bottom = Math.round(mapSize[1] - pixel[1]) + 'px'; + if (this.rendered_.bottom_ != bottom) { + this.rendered_.bottom_ = style.bottom = bottom; + } + } else { + if (this.rendered_.bottom_ !== '') { + this.rendered_.bottom_ = style.bottom = ''; + } + var offsetY = 0; + if (positioning == ol.OverlayPositioning.CENTER_LEFT || + positioning == ol.OverlayPositioning.CENTER_CENTER || + positioning == ol.OverlayPositioning.CENTER_RIGHT) { + offsetY = goog.style.getSize(this.element_).height / 2; + } + var top = Math.round(pixel[1] - offsetY) + 'px'; + if (this.rendered_.top_ != top) { + this.rendered_.top_ = style.top = top; + } + } + + if (!this.rendered_.visible) { + goog.style.setElementShown(this.element_, true); + this.rendered_.visible = true; + } + +}; diff --git a/float-no-zero/ol/ol/parser/ogc/exceptionreportparser.js b/float-no-zero/ol/ol/parser/ogc/exceptionreportparser.js new file mode 100644 index 0000000000..606e96f26a --- /dev/null +++ b/float-no-zero/ol/ol/parser/ogc/exceptionreportparser.js @@ -0,0 +1,96 @@ +goog.provide('ol.parser.ogc.ExceptionReport'); +goog.require('goog.dom.xml'); +goog.require('ol.parser.XML'); + + + +/** + * @constructor + * @extends {ol.parser.XML} + */ +ol.parser.ogc.ExceptionReport = function() { + var exceptionReader = function(node, exceptionReport) { + var exception = { + code: node.getAttribute('exceptionCode'), + locator: node.getAttribute('locator'), + texts: [] + }; + exceptionReport.exceptions.push(exception); + this.readChildNodes(node, exception); + }; + var exceptionTextReader = function(node, exception) { + var text = this.getChildValue(node); + exception.texts.push(text); + }; + this.readers = { + 'http://www.opengis.net/ogc': { + 'ServiceExceptionReport': function(node, obj) { + obj['exceptionReport'] = {}; + obj['exceptionReport']['exceptions'] = []; + this.readChildNodes(node, obj['exceptionReport']); + }, + 'ServiceException': function(node, exceptionReport) { + var exception = {}; + exception['code'] = node.getAttribute('code'); + exception['locator'] = node.getAttribute('locator'); + exception['text'] = this.getChildValue(node); + exceptionReport['exceptions'].push(exception); + } + }, + 'http://www.opengis.net/ows': { + 'ExceptionReport': function(node, obj) { + obj.success = false; + obj.exceptionReport = { + version: node.getAttribute('version'), + language: node.getAttribute('language'), + exceptions: [] + }; + this.readChildNodes(node, obj.exceptionReport); + }, + 'Exception': function(node, exceptionReport) { + exceptionReader.apply(this, arguments); + }, + 'ExceptionText': function(node, exception) { + exceptionTextReader.apply(this, arguments); + } + }, + 'http://www.opengis.net/ows/1.1': { + 'ExceptionReport': function(node, obj) { + obj.exceptionReport = { + version: node.getAttribute('version'), + language: node.getAttribute('xml:lang'), + exceptions: [] + }; + this.readChildNodes(node, obj.exceptionReport); + }, + 'Exception': function(node, exceptionReport) { + exceptionReader.apply(this, arguments); + }, + 'ExceptionText': function(node, exception) { + exceptionTextReader.apply(this, arguments); + } + } + }; + goog.base(this); +}; +goog.inherits(ol.parser.ogc.ExceptionReport, ol.parser.XML); + + +/** + * Read OGC exception report data from a string, and return an object with + * information about the exceptions. + * + * @param {string|Document} data to read/parse. + * @return {Object} Information about the exceptions that occurred. + */ +ol.parser.ogc.ExceptionReport.prototype.read = function(data) { + if (goog.isString(data)) { + data = goog.dom.xml.loadXml(data); + } + var exceptionInfo = {}; + exceptionInfo['exceptionReport'] = null; + if (data) { + this.readChildNodes(data, exceptionInfo); + } + return exceptionInfo; +}; diff --git a/float-no-zero/ol/ol/parser/ogc/versionedparser.js b/float-no-zero/ol/ol/parser/ogc/versionedparser.js new file mode 100644 index 0000000000..2685b66e93 --- /dev/null +++ b/float-no-zero/ol/ol/parser/ogc/versionedparser.js @@ -0,0 +1,121 @@ +goog.provide('ol.parser.ogc.Versioned'); +goog.require('goog.dom.xml'); +goog.require('ol.parser.ogc.ExceptionReport'); + + + +/** + * @constructor + * @param {Object=} opt_options Options which will be set on this object. + */ +ol.parser.ogc.Versioned = function(opt_options) { + var options = goog.isDef(opt_options) ? opt_options : {}; + this.options = options; + this.defaultVersion = options.defaultVersion || null; + this.version = options.version; + this.profile = options.profile; + if (goog.isDef(options.allowFallback)) { + this.allowFallback = options.allowFallback; + } else { + this.allowFallback = false; + } + if (goog.isDef(options.stringifyOutput)) { + this.stringifyOutput = options.stringifyOutput; + } else { + this.stringifyOutput = false; + } +}; + + +/** + * @param {Element} root root element. + * @param {Object=} opt_options optional configuration object. + * @return {string} the version to use. + */ +ol.parser.ogc.Versioned.prototype.getVersion = function(root, opt_options) { + var version; + // read + if (root) { + version = this.version; + if (!version) { + version = root.getAttribute('version'); + if (!version) { + version = this.defaultVersion; + } + } + } else { + // write + version = (opt_options && opt_options.version) || + this.version || this.defaultVersion; + } + return version; +}; + + +/** + * @param {string} version the version to use. + * @return {Object} the parser to use. + */ +ol.parser.ogc.Versioned.prototype.getParser = function(version) { + version = version || this.defaultVersion; + var profile = this.profile ? '_' + this.profile : ''; + if (!this.parser || this.parser.VERSION != version) { + var format = this.parsers['v' + version.replace(/\./g, '_') + profile]; + if (!format) { + if (profile !== '' && this.allowFallback) { + // fallback to the non-profiled version of the parser + profile = ''; + format = this.parsers['v' + version.replace(/\./g, '_') + profile]; + } + if (!format) { + throw 'Can\'t find a parser for version ' + + version + profile; + } + } + this.parser = new format(this.options); + } + return this.parser; +}; + + +/** + * Write a document. + * + * @param {Object} obj An object representing the document. + * @param {Object=} opt_options Optional configuration object. + * @return {Element|string} the XML created. + */ +ol.parser.ogc.Versioned.prototype.write = function(obj, opt_options) { + var version = this.getVersion(null, opt_options); + this.parser = this.getParser(version); + var root = this.parser.write(obj, opt_options); + if (this.stringifyOutput === false) { + return root; + } else { + return goog.dom.xml.serialize(root); + } +}; + + +/** + * @param {string|Document} data Data to read. + * @param {Object=} opt_options Options for the reader. + * @return {Object} An object representing the document. + */ +ol.parser.ogc.Versioned.prototype.read = function(data, opt_options) { + if (goog.isString(data)) { + data = goog.dom.xml.loadXml(data); + } + var root = data.documentElement; + var version = this.getVersion(root); + this.parser = this.getParser(version); + var obj = this.parser.read(data, opt_options); + var errorProperty = this.parser.errorProperty || null; + if (errorProperty !== null && obj[errorProperty] === undefined) { + // an error must have happened, so parse it and report back + var format = new ol.parser.ogc.ExceptionReport(); + obj.error = format.read(data); + } + obj.version = version; + return obj; +}; diff --git a/float-no-zero/ol/ol/parser/ogc/wmscapabilitiesparser.exports b/float-no-zero/ol/ol/parser/ogc/wmscapabilitiesparser.exports new file mode 100644 index 0000000000..2552ec6664 --- /dev/null +++ b/float-no-zero/ol/ol/parser/ogc/wmscapabilitiesparser.exports @@ -0,0 +1,2 @@ +@exportSymbol ol.parser.ogc.WMSCapabilities +@exportProperty ol.parser.ogc.WMSCapabilities.prototype.read diff --git a/float-no-zero/ol/ol/parser/ogc/wmscapabilitiesparser.js b/float-no-zero/ol/ol/parser/ogc/wmscapabilitiesparser.js new file mode 100644 index 0000000000..b2e699c8af --- /dev/null +++ b/float-no-zero/ol/ol/parser/ogc/wmscapabilitiesparser.js @@ -0,0 +1,69 @@ +goog.provide('ol.parser.ogc.WMSCapabilities'); +goog.require('ol.parser.ogc.Versioned'); +goog.require('ol.parser.ogc.WMSCapabilities_v1_0_0'); +goog.require('ol.parser.ogc.WMSCapabilities_v1_1_0'); +goog.require('ol.parser.ogc.WMSCapabilities_v1_1_1'); +goog.require('ol.parser.ogc.WMSCapabilities_v1_1_1_WMSC'); +goog.require('ol.parser.ogc.WMSCapabilities_v1_3_0'); + + +/** + * @define {boolean} Whether to enable WMS Capabilities version 1.0.0. + */ +ol.ENABLE_WMSCAPS_1_0_0 = false; + + +/** + * @define {boolean} Whether to enable WMS Capabilities version 1.1.0. + */ +ol.ENABLE_WMSCAPS_1_1_0 = true; + + +/** + * @define {boolean} Whether to enable WMS Capabilities version 1.1.1. + */ +ol.ENABLE_WMSCAPS_1_1_1 = true; + + +/** + * @define {boolean} Whether to enable WMS Capabilities version 1.3.0. + */ +ol.ENABLE_WMSCAPS_1_3_0 = true; + + +/** + * @define {boolean} Whether to enable WMS Capabilities version 1.1.1. + * WMSC profile. + */ +ol.ENABLE_WMSCAPS_1_1_1_WMSC = true; + + + +/** + * @constructor + * @param {Object=} opt_options Options which will be set on this object. + * @extends {ol.parser.ogc.Versioned} + * @todo stability experimental + */ +ol.parser.ogc.WMSCapabilities = function(opt_options) { + opt_options = opt_options || {}; + opt_options['defaultVersion'] = '1.1.1'; + this.parsers = {}; + if (ol.ENABLE_WMSCAPS_1_0_0) { + this.parsers['v1_0_0'] = ol.parser.ogc.WMSCapabilities_v1_0_0; + } + if (ol.ENABLE_WMSCAPS_1_1_0) { + this.parsers['v1_1_0'] = ol.parser.ogc.WMSCapabilities_v1_1_0; + } + if (ol.ENABLE_WMSCAPS_1_1_1) { + this.parsers['v1_1_1'] = ol.parser.ogc.WMSCapabilities_v1_1_1; + } + if (ol.ENABLE_WMSCAPS_1_1_1_WMSC) { + this.parsers['v1_1_1_WMSC'] = ol.parser.ogc.WMSCapabilities_v1_1_1_WMSC; + } + if (ol.ENABLE_WMSCAPS_1_3_0) { + this.parsers['v1_3_0'] = ol.parser.ogc.WMSCapabilities_v1_3_0; + } + goog.base(this, opt_options); +}; +goog.inherits(ol.parser.ogc.WMSCapabilities, ol.parser.ogc.Versioned); diff --git a/float-no-zero/ol/ol/parser/ogc/wmscapabilitiesparser_v1.js b/float-no-zero/ol/ol/parser/ogc/wmscapabilitiesparser_v1.js new file mode 100644 index 0000000000..55ed0c5a07 --- /dev/null +++ b/float-no-zero/ol/ol/parser/ogc/wmscapabilitiesparser_v1.js @@ -0,0 +1,317 @@ +goog.provide('ol.parser.ogc.WMSCapabilities_v1'); +goog.require('goog.dom.xml'); +goog.require('goog.object'); +goog.require('ol.parser.XML'); + + + +/** + * Read [WMS](http://www.opengeospatial.org/standards/wms) capabilities + * + * @constructor + * @extends {ol.parser.XML} + */ +ol.parser.ogc.WMSCapabilities_v1 = function() { + this.defaultNamespaceURI = 'http://www.opengis.net/wms'; + this.errorProperty = 'service'; + this.readers = { + 'http://www.opengis.net/wms': { + 'Service': function(node, obj) { + obj['service'] = {}; + this.readChildNodes(node, obj['service']); + }, + 'Name': function(node, obj) { + obj['name'] = this.getChildValue(node); + }, + 'Title': function(node, obj) { + obj['title'] = this.getChildValue(node); + }, + 'Abstract': function(node, obj) { + obj['abstract'] = this.getChildValue(node); + }, + 'BoundingBox': function(node, obj) { + var bbox = {}; + bbox['bbox'] = [ + parseFloat(node.getAttribute('minx')), + parseFloat(node.getAttribute('miny')), + parseFloat(node.getAttribute('maxx')), + parseFloat(node.getAttribute('maxy')) + ]; + var res = { + x: parseFloat(node.getAttribute('resx')), + y: parseFloat(node.getAttribute('resy')) + }; + if (! (isNaN(res.x) && isNaN(res.y))) { + bbox['res'] = res; + } + // return the bbox so that descendant classes can set the + // CRS and SRS and add it to the obj + return bbox; + }, + 'OnlineResource': function(node, obj) { + obj['href'] = this.getAttributeNS(node, 'http://www.w3.org/1999/xlink', + 'href'); + }, + 'ContactInformation': function(node, obj) { + obj['contactInformation'] = {}; + this.readChildNodes(node, obj['contactInformation']); + }, + 'ContactPersonPrimary': function(node, obj) { + obj['personPrimary'] = {}; + this.readChildNodes(node, obj['personPrimary']); + }, + 'ContactPerson': function(node, obj) { + obj['person'] = this.getChildValue(node); + }, + 'ContactOrganization': function(node, obj) { + obj['organization'] = this.getChildValue(node); + }, + 'ContactPosition': function(node, obj) { + obj['position'] = this.getChildValue(node); + }, + 'ContactAddress': function(node, obj) { + obj['contactAddress'] = {}; + this.readChildNodes(node, obj['contactAddress']); + }, + 'AddressType': function(node, obj) { + obj['type'] = this.getChildValue(node); + }, + 'Address': function(node, obj) { + obj['address'] = this.getChildValue(node); + }, + 'City': function(node, obj) { + obj['city'] = this.getChildValue(node); + }, + 'StateOrProvince': function(node, obj) { + obj['stateOrProvince'] = this.getChildValue(node); + }, + 'PostCode': function(node, obj) { + obj['postcode'] = this.getChildValue(node); + }, + 'Country': function(node, obj) { + obj['country'] = this.getChildValue(node); + }, + 'ContactVoiceTelephone': function(node, obj) { + obj['phone'] = this.getChildValue(node); + }, + 'ContactFacsimileTelephone': function(node, obj) { + obj['fax'] = this.getChildValue(node); + }, + 'ContactElectronicMailAddress': function(node, obj) { + obj['email'] = this.getChildValue(node); + }, + 'Fees': function(node, obj) { + var fees = this.getChildValue(node); + if (fees && fees.toLowerCase() != 'none') { + obj['fees'] = fees; + } + }, + 'AccessConstraints': function(node, obj) { + var constraints = this.getChildValue(node); + if (constraints && constraints.toLowerCase() != 'none') { + obj['accessConstraints'] = constraints; + } + }, + 'Capability': function(node, obj) { + obj['capability'] = {}; + obj['capability']['nestedLayers'] = []; + obj['capability']['layers'] = []; + this.readChildNodes(node, obj['capability']); + }, + 'Request': function(node, obj) { + obj['request'] = {}; + this.readChildNodes(node, obj['request']); + }, + 'GetCapabilities': function(node, obj) { + obj['getcapabilities'] = {}; + obj['getcapabilities']['formats'] = []; + this.readChildNodes(node, obj['getcapabilities']); + }, + 'Format': function(node, obj) { + if (goog.isArray(obj['formats'])) { + obj['formats'].push(this.getChildValue(node)); + } else { + obj['format'] = this.getChildValue(node); + } + }, + 'DCPType': function(node, obj) { + this.readChildNodes(node, obj); + }, + 'HTTP': function(node, obj) { + this.readChildNodes(node, obj); + }, + 'Get': function(node, obj) { + obj['get'] = {}; + this.readChildNodes(node, obj['get']); + }, + 'Post': function(node, obj) { + obj['post'] = {}; + this.readChildNodes(node, obj['post']); + }, + 'GetMap': function(node, obj) { + obj['getmap'] = {}; + obj['getmap']['formats'] = []; + this.readChildNodes(node, obj['getmap']); + }, + 'GetFeatureInfo': function(node, obj) { + obj['getfeatureinfo'] = {}; + obj['getfeatureinfo']['formats'] = []; + this.readChildNodes(node, obj['getfeatureinfo']); + }, + 'Exception': function(node, obj) { + obj['exception'] = {}; + obj['exception']['formats'] = []; + this.readChildNodes(node, obj['exception']); + }, + 'Layer': function(node, obj) { + var parentLayer, capability; + if (obj['capability']) { + capability = obj['capability']; + parentLayer = obj; + } else { + capability = obj; + } + var attrNode = node.getAttributeNode('queryable'); + var queryable = (attrNode && attrNode.specified) ? + node.getAttribute('queryable') : null; + attrNode = node.getAttributeNode('cascaded'); + var cascaded = (attrNode && attrNode.specified) ? + node.getAttribute('cascaded') : null; + attrNode = node.getAttributeNode('opaque'); + var opaque = (attrNode && attrNode.specified) ? + node.getAttribute('opaque') : null; + var noSubsets = node.getAttribute('noSubsets'); + var fixedWidth = node.getAttribute('fixedWidth'); + var fixedHeight = node.getAttribute('fixedHeight'); + var parent = parentLayer || {}; + var layer = { + 'nestedLayers': [], + 'styles': parentLayer ? [].concat(parentLayer['styles']) : [], + 'srs': {}, + 'metadataURLs': [], + 'bbox': {}, + 'llbbox': parent['llbbox'], + 'dimensions': {}, + 'authorityURLs': {}, + 'identifiers': {}, + 'keywords': [], + 'queryable': (queryable && queryable !== '') ? + (queryable === '1' || queryable === 'true') : + (parent['queryable'] || false), + 'cascaded': (cascaded !== null) ? parseInt(cascaded, 10) : + (parent['cascaded'] || 0), + 'opaque': opaque ? + (opaque === '1' || opaque === 'true') : + (parent['opaque'] || false), + 'noSubsets': (noSubsets !== null) ? + (noSubsets === '1' || noSubsets === 'true') : + (parent['noSubsets'] || false), + 'fixedWidth': (fixedWidth !== null) ? + parseInt(fixedWidth, 10) : (parent['fixedWidth'] || 0), + 'fixedHeight': (fixedHeight !== null) ? + parseInt(fixedHeight, 10) : (parent['fixedHeight'] || 0), + 'minScale': parent['minScale'], + 'maxScale': parent['maxScale'], + 'attribution': parent['attribution'] + }; + if (parentLayer) { + goog.object.extend(layer['srs'], parent['srs']); + goog.object.extend(layer['bbox'], parent['bbox']); + goog.object.extend(layer['dimensions'], parent['dimensions']); + goog.object.extend(layer['authorityURLs'], parent['authorityURLs']); + } + obj['nestedLayers'].push(layer); + layer['capability'] = capability; + this.readChildNodes(node, layer); + delete layer['capability']; + if (layer['name']) { + var parts = layer['name'].split(':'), + request = capability['request'], + gfi = request['getfeatureinfo']; + if (parts.length > 0) { + layer['prefix'] = parts[0]; + } + capability['layers'].push(layer); + if (!goog.isDef(layer['formats'])) { + layer['formats'] = request['getmap']['formats']; + } + if (!goog.isDef(layer['infoFormats']) && gfi) { + layer['infoFormats'] = gfi['formats']; + } + } + }, + 'Attribution': function(node, obj) { + obj['attribution'] = {}; + this.readChildNodes(node, obj['attribution']); + }, + 'LogoURL': function(node, obj) { + obj['logo'] = { + 'width': node.getAttribute('width'), + 'height': node.getAttribute('height') + }; + this.readChildNodes(node, obj['logo']); + }, + 'Style': function(node, obj) { + var style = {}; + obj['styles'].push(style); + this.readChildNodes(node, style); + }, + 'LegendURL': function(node, obj) { + var legend = { + 'width': node.getAttribute('width'), + 'height': node.getAttribute('height') + }; + obj['legend'] = legend; + this.readChildNodes(node, legend); + }, + 'MetadataURL': function(node, obj) { + var metadataURL = {'type': node.getAttribute('type')}; + obj['metadataURLs'].push(metadataURL); + this.readChildNodes(node, metadataURL); + }, + 'DataURL': function(node, obj) { + obj['dataURL'] = {}; + this.readChildNodes(node, obj['dataURL']); + }, + 'FeatureListURL': function(node, obj) { + obj['featureListURL'] = {}; + this.readChildNodes(node, obj['featureListURL']); + }, + 'AuthorityURL': function(node, obj) { + var name = node.getAttribute('name'); + var authority = {}; + this.readChildNodes(node, authority); + obj['authorityURLs'][name] = authority['href']; + }, + 'Identifier': function(node, obj) { + var authority = node.getAttribute('authority'); + obj['identifiers'][authority] = this.getChildValue(node); + }, + 'KeywordList': function(node, obj) { + this.readChildNodes(node, obj); + }, + 'SRS': function(node, obj) { + obj['srs'][this.getChildValue(node)] = true; + } + } + }; + goog.base(this); +}; +goog.inherits(ol.parser.ogc.WMSCapabilities_v1, ol.parser.XML); + + +/** + * @param {string|Document|Element} data Data to read. + * @return {Object} An object representing the document. + */ +ol.parser.ogc.WMSCapabilities_v1.prototype.read = function(data) { + if (goog.isString(data)) { + data = goog.dom.xml.loadXml(data); + } + if (data && data.nodeType == 9) { + data = data.documentElement; + } + var obj = {}; + this.readNode(data, obj); + return obj; +}; diff --git a/float-no-zero/ol/ol/parser/ogc/wmscapabilitiesparser_v1_0_0.js b/float-no-zero/ol/ol/parser/ogc/wmscapabilitiesparser_v1_0_0.js new file mode 100644 index 0000000000..3053a2ad8b --- /dev/null +++ b/float-no-zero/ol/ol/parser/ogc/wmscapabilitiesparser_v1_0_0.js @@ -0,0 +1,66 @@ +goog.provide('ol.parser.ogc.WMSCapabilities_v1_0_0'); + +goog.require('goog.object'); +goog.require('goog.string'); +goog.require('ol.parser.ogc.WMSCapabilities_v1_1_0'); + + + +/** + * Read [WMS](http://www.opengeospatial.org/standards/wms) capabilities + * version 1.0.0 + * + * @constructor + * @extends {ol.parser.ogc.WMSCapabilities_v1_1_0} + */ +ol.parser.ogc.WMSCapabilities_v1_0_0 = function() { + goog.base(this); + this.version = '1.0.0'; + goog.object.extend(this.readers['http://www.opengis.net/wms'], { + 'Format': function(node, obj) { + for (var i = 0, ii = node.childNodes.length; i < ii; i++) { + var child = node.childNodes[i]; + var local = child.localName || child.nodeName.split(':').pop(); + if (goog.isArray(obj['formats'])) { + obj['formats'].push(local); + } else { + obj['format'] = local; + } + } + }, + 'Keywords': function(node, obj) { + if (!goog.isDef(obj['keywords'])) { + obj['keywords'] = []; + } + var keywords = this.getChildValue(node).split(/ +/); + for (var i = 0, ii = keywords.length; i < ii; ++i) { + if (!goog.string.isEmpty(keywords[i])) { + obj['keywords'].push({'value': keywords[i]}); + } + } + }, + 'OnlineResource': function(node, obj) { + obj['href'] = this.getChildValue(node); + }, + 'Get': function(node, obj) { + obj['get'] = {'href': node.getAttribute('onlineResource')}; + }, + 'Post': function(node, obj) { + obj['post'] = {'href': node.getAttribute('onlineResource')}; + }, + 'Map': function(node, obj) { + var reader = this.readers[this.defaultNamespaceURI]['GetMap']; + reader.apply(this, arguments); + }, + 'Capabilities': function(node, obj) { + var reader = this.readers[this.defaultNamespaceURI]['GetCapabilities']; + reader.apply(this, arguments); + }, + 'FeatureInfo': function(node, obj) { + var reader = this.readers[this.defaultNamespaceURI]['GetFeatureInfo']; + reader.apply(this, arguments); + } + }); +}; +goog.inherits(ol.parser.ogc.WMSCapabilities_v1_0_0, + ol.parser.ogc.WMSCapabilities_v1_1_0); diff --git a/float-no-zero/ol/ol/parser/ogc/wmscapabilitiesparser_v1_1.js b/float-no-zero/ol/ol/parser/ogc/wmscapabilitiesparser_v1_1.js new file mode 100644 index 0000000000..b367cfa339 --- /dev/null +++ b/float-no-zero/ol/ol/parser/ogc/wmscapabilitiesparser_v1_1.js @@ -0,0 +1,101 @@ +goog.provide('ol.parser.ogc.WMSCapabilities_v1_1'); + +goog.require('goog.object'); +goog.require('ol.parser.ogc.WMSCapabilities_v1'); + + + +/** + * @constructor + * @extends {ol.parser.ogc.WMSCapabilities_v1} + */ +ol.parser.ogc.WMSCapabilities_v1_1 = function() { + goog.base(this); + var bboxreader = this.readers['http://www.opengis.net/wms']['BoundingBox']; + goog.object.extend(this.readers['http://www.opengis.net/wms'], { + 'WMT_MS_Capabilities': function(node, obj) { + this.readChildNodes(node, obj); + }, + 'Keyword': function(node, obj) { + if (obj['keywords']) { + obj['keywords'].push({'value': this.getChildValue(node)}); + } + }, + 'DescribeLayer': function(node, obj) { + obj['describelayer'] = {'formats': []}; + this.readChildNodes(node, obj['describelayer']); + }, + 'GetLegendGraphic': function(node, obj) { + obj['getlegendgraphic'] = {'formats': []}; + this.readChildNodes(node, obj['getlegendgraphic']); + }, + 'GetStyles': function(node, obj) { + obj['getstyles'] = {'formats': []}; + this.readChildNodes(node, obj['getstyles']); + }, + 'PutStyles': function(node, obj) { + obj['putstyles'] = {'formats': []}; + this.readChildNodes(node, obj['putstyles']); + }, + 'UserDefinedSymbolization': function(node, obj) { + var userSymbols = { + 'supportSLD': parseInt(node.getAttribute('SupportSLD'), 10) == 1, + 'userLayer': parseInt(node.getAttribute('UserLayer'), 10) == 1, + 'userStyle': parseInt(node.getAttribute('UserStyle'), 10) == 1, + 'remoteWFS': parseInt(node.getAttribute('RemoteWFS'), 10) == 1 + }; + obj['userSymbols'] = userSymbols; + }, + 'LatLonBoundingBox': function(node, obj) { + obj['llbbox'] = [ + parseFloat(node.getAttribute('minx')), + parseFloat(node.getAttribute('miny')), + parseFloat(node.getAttribute('maxx')), + parseFloat(node.getAttribute('maxy')) + ]; + }, + 'BoundingBox': function(node, obj) { + var bbox = bboxreader.apply(this, arguments); + bbox['srs'] = node.getAttribute('SRS'); + obj['bbox'][bbox['srs']] = bbox; + }, + 'ScaleHint': function(node, obj) { + var min = parseFloat(node.getAttribute('min')); + var max = parseFloat(node.getAttribute('max')); + var rad2 = Math.pow(2, 0.5); + var dpi = (25.4 / 0.28); + var ipm = 39.37; + if (min !== 0) { + obj['maxScale'] = parseFloat((min / rad2) * ipm * dpi); + } + if (max != Infinity) { + obj['minScale'] = parseFloat((max / rad2) * ipm * dpi); + } + }, + 'Dimension': function(node, obj) { + var name = node.getAttribute('name').toLowerCase(); + var dim = { + 'name': name, + 'units': node.getAttribute('units'), + 'unitsymbol': node.getAttribute('unitSymbol') + }; + obj['dimensions'][dim.name] = dim; + }, + 'Extent': function(node, obj) { + var name = node.getAttribute('name').toLowerCase(); + if (name in obj['dimensions']) { + var extent = obj['dimensions'][name]; + extent['nearestVal'] = + node.getAttribute('nearestValue') === '1'; + extent['multipleVal'] = + node.getAttribute('multipleValues') === '1'; + extent['current'] = node.getAttribute('current') === '1'; + extent['default'] = node.getAttribute('default') || ''; + var values = this.getChildValue(node); + extent['values'] = values.split(','); + } + } + }); +}; +goog.inherits(ol.parser.ogc.WMSCapabilities_v1_1, + ol.parser.ogc.WMSCapabilities_v1); diff --git a/float-no-zero/ol/ol/parser/ogc/wmscapabilitiesparser_v1_1_0.js b/float-no-zero/ol/ol/parser/ogc/wmscapabilitiesparser_v1_1_0.js new file mode 100644 index 0000000000..018d3cb78f --- /dev/null +++ b/float-no-zero/ol/ol/parser/ogc/wmscapabilitiesparser_v1_1_0.js @@ -0,0 +1,29 @@ +goog.provide('ol.parser.ogc.WMSCapabilities_v1_1_0'); + +goog.require('goog.object'); +goog.require('ol.parser.ogc.WMSCapabilities_v1_1'); + + + +/** + * Read [WMS](http://www.opengeospatial.org/standards/wms) capabilities + * version 1.1.0 + * + * @constructor + * @extends {ol.parser.ogc.WMSCapabilities_v1_1} + */ +ol.parser.ogc.WMSCapabilities_v1_1_0 = function() { + goog.base(this); + this.version = '1.1.0'; + goog.object.extend(this.readers['http://www.opengis.net/wms'], { + 'SRS': function(node, obj) { + var srs = this.getChildValue(node); + var values = srs.split(/ +/); + for (var i = 0, ii = values.length; i < ii; i++) { + obj['srs'][values[i]] = true; + } + } + }); +}; +goog.inherits(ol.parser.ogc.WMSCapabilities_v1_1_0, + ol.parser.ogc.WMSCapabilities_v1_1); diff --git a/float-no-zero/ol/ol/parser/ogc/wmscapabilitiesparser_v1_1_1.js b/float-no-zero/ol/ol/parser/ogc/wmscapabilitiesparser_v1_1_1.js new file mode 100644 index 0000000000..6dd29470da --- /dev/null +++ b/float-no-zero/ol/ol/parser/ogc/wmscapabilitiesparser_v1_1_1.js @@ -0,0 +1,25 @@ +goog.provide('ol.parser.ogc.WMSCapabilities_v1_1_1'); + +goog.require('goog.object'); +goog.require('ol.parser.ogc.WMSCapabilities_v1_1'); + + + +/** + * Read [WMS](http://www.opengeospatial.org/standards/wms) capabilities + * version 1.1.1 + * + * @constructor + * @extends {ol.parser.ogc.WMSCapabilities_v1_1} + */ +ol.parser.ogc.WMSCapabilities_v1_1_1 = function() { + goog.base(this); + this.version = '1.1.1'; + goog.object.extend(this.readers['http://www.opengis.net/wms'], { + 'SRS': function(node, obj) { + obj['srs'][this.getChildValue(node)] = true; + } + }); +}; +goog.inherits(ol.parser.ogc.WMSCapabilities_v1_1_1, + ol.parser.ogc.WMSCapabilities_v1_1); diff --git a/float-no-zero/ol/ol/parser/ogc/wmscapabilitiesparser_v1_1_1_WMSC.js b/float-no-zero/ol/ol/parser/ogc/wmscapabilitiesparser_v1_1_1_WMSC.js new file mode 100644 index 0000000000..3b665c8bd4 --- /dev/null +++ b/float-no-zero/ol/ol/parser/ogc/wmscapabilitiesparser_v1_1_1_WMSC.js @@ -0,0 +1,48 @@ +goog.provide('ol.parser.ogc.WMSCapabilities_v1_1_1_WMSC'); + +goog.require('goog.object'); +goog.require('ol.parser.ogc.WMSCapabilities_v1_1_1'); + + + +/** + * @constructor + * @extends {ol.parser.ogc.WMSCapabilities_v1_1_1} + */ +ol.parser.ogc.WMSCapabilities_v1_1_1_WMSC = function() { + goog.base(this); + this.profile = 'WMSC'; + goog.object.extend(this.readers['http://www.opengis.net/wms'], { + 'VendorSpecificCapabilities': function(node, obj) { + obj['vendorSpecific'] = {'tileSets': []}; + this.readChildNodes(node, obj['vendorSpecific']); + }, + 'TileSet': function(node, vendorSpecific) { + var tileset = {'srs': {}, 'bbox': {}, 'resolutions': []}; + this.readChildNodes(node, tileset); + vendorSpecific.tileSets.push(tileset); + }, + 'Resolutions': function(node, tileset) { + var res = this.getChildValue(node).split(' '); + for (var i = 0, ii = res.length; i < ii; i++) { + if (res[i] !== '') { + tileset['resolutions'].push(parseFloat(res[i])); + } + } + }, + 'Width': function(node, tileset) { + tileset['width'] = parseInt(this.getChildValue(node), 10); + }, + 'Height': function(node, tileset) { + tileset['height'] = parseInt(this.getChildValue(node), 10); + }, + 'Layers': function(node, tileset) { + tileset['layers'] = this.getChildValue(node); + }, + 'Styles': function(node, tileset) { + tileset['styles'] = this.getChildValue(node); + } + }); +}; +goog.inherits(ol.parser.ogc.WMSCapabilities_v1_1_1_WMSC, + ol.parser.ogc.WMSCapabilities_v1_1_1); diff --git a/float-no-zero/ol/ol/parser/ogc/wmscapabilitiesparser_v1_3_0.js b/float-no-zero/ol/ol/parser/ogc/wmscapabilitiesparser_v1_3_0.js new file mode 100644 index 0000000000..fc6a79c685 --- /dev/null +++ b/float-no-zero/ol/ol/parser/ogc/wmscapabilitiesparser_v1_3_0.js @@ -0,0 +1,114 @@ +goog.provide('ol.parser.ogc.WMSCapabilities_v1_3_0'); + +goog.require('goog.object'); +goog.require('ol.parser.ogc.WMSCapabilities_v1'); + + + +/** + * Read [WMS](http://www.opengeospatial.org/standards/wms) capabilities + * version 1.3.0 + * + * @constructor + * @extends {ol.parser.ogc.WMSCapabilities_v1} + */ +ol.parser.ogc.WMSCapabilities_v1_3_0 = function() { + goog.base(this); + var bboxreader = this.readers['http://www.opengis.net/wms']['BoundingBox']; + goog.object.extend(this.readers['http://www.opengis.net/wms'], { + 'WMS_Capabilities': function(node, obj) { + this.readChildNodes(node, obj); + }, + 'LayerLimit': function(node, obj) { + obj['layerLimit'] = parseInt(this.getChildValue(node), 10); + }, + 'MaxWidth': function(node, obj) { + obj['maxWidth'] = parseInt(this.getChildValue(node), 10); + }, + 'MaxHeight': function(node, obj) { + obj['maxHeight'] = parseInt(this.getChildValue(node), 10); + }, + 'BoundingBox': function(node, obj) { + var bbox = bboxreader.apply(this, arguments); + bbox['srs'] = node.getAttribute('CRS'); + obj['bbox'][bbox['srs']] = bbox; + }, + 'CRS': function(node, obj) { + // CRS is the synonym of SRS + this.readers['http://www.opengis.net/wms']['SRS'].apply(this, arguments); + }, + 'EX_GeographicBoundingBox': function(node, obj) { + // replacement of LatLonBoundingBox + obj['llbbox'] = []; + this.readChildNodes(node, obj['llbbox']); + }, + 'westBoundLongitude': function(node, obj) { + obj[0] = this.getChildValue(node); + }, + 'eastBoundLongitude': function(node, obj) { + obj[2] = this.getChildValue(node); + }, + 'southBoundLatitude': function(node, obj) { + obj[1] = this.getChildValue(node); + }, + 'northBoundLatitude': function(node, obj) { + obj[3] = this.getChildValue(node); + }, + 'MinScaleDenominator': function(node, obj) { + obj['maxScale'] = parseFloat(this.getChildValue(node)).toPrecision(16); + }, + 'MaxScaleDenominator': function(node, obj) { + obj['minScale'] = parseFloat(this.getChildValue(node)).toPrecision(16); + }, + 'Dimension': function(node, obj) { + // dimension has extra attributes: default, multipleValues, + // nearestValue, current which used to be part of Extent. It now + // also contains the values. + var name = node.getAttribute('name').toLowerCase(); + var dim = { + 'name': name, + 'units': node.getAttribute('units'), + 'unitsymbol': node.getAttribute('unitSymbol'), + 'nearestVal': node.getAttribute('nearestValue') === '1', + 'multipleVal': node.getAttribute('multipleValues') === '1', + 'default': node.getAttribute('default') || '', + 'current': node.getAttribute('current') === '1', + 'values': this.getChildValue(node).split(',') + }; + // Theoretically there can be more dimensions with the same + // name, but with a different unit. Until we meet such a case, + // let's just keep the same structure as the WMS 1.1 + // GetCapabilities parser uses. We will store the last + // one encountered. + obj['dimensions'][dim['name']] = dim; + }, + 'Keyword': function(node, obj) { + var keyword = {'value': this.getChildValue(node), + 'vocabulary': node.getAttribute('vocabulary')}; + if (obj['keywords']) { + obj['keywords'].push(keyword); + } + } + }); + this.readers['sld'] = { + 'UserDefinedSymbolization': function(node, obj) { + var readers = this.readers['http://www.opengis.net/wms']; + readers.UserDefinedSymbolization.apply(this, arguments); + // add the two extra attributes + var value = node.getAttribute('InlineFeature'); + obj['userSymbols']['inlineFeature'] = parseInt(value, 10) == 1; + value = node.getAttribute('RemoteWCS'); + obj['userSymbols']['remoteWCS'] = parseInt(value, 10) == 1; + }, + 'DescribeLayer': function(node, obj) { + var readers = this.readers['http://www.opengis.net/wms']; + readers.DescribeLayer.apply(this, arguments); + }, + 'GetLegendGraphic': function(node, obj) { + var readers = this.readers['http://www.opengis.net/wms']; + readers.GetLegendGraphic.apply(this, arguments); + } + }; +}; +goog.inherits(ol.parser.ogc.WMSCapabilities_v1_3_0, + ol.parser.ogc.WMSCapabilities_v1); diff --git a/float-no-zero/ol/ol/parser/parser.js b/float-no-zero/ol/ol/parser/parser.js new file mode 100644 index 0000000000..bf79f729a6 --- /dev/null +++ b/float-no-zero/ol/ol/parser/parser.js @@ -0,0 +1,9 @@ +goog.provide('ol.parser.Parser'); + + + +/** + * @constructor + * @todo stability experimental + */ +ol.parser.Parser = function() {}; diff --git a/float-no-zero/ol/ol/parser/xmlparser.js b/float-no-zero/ol/ol/parser/xmlparser.js new file mode 100644 index 0000000000..a531e276eb --- /dev/null +++ b/float-no-zero/ol/ol/parser/xmlparser.js @@ -0,0 +1,296 @@ +goog.provide('ol.parser.XML'); + +goog.require('goog.dom.xml'); +goog.require('ol.parser.Parser'); + + + +/** + * @constructor + * @extends {ol.parser.Parser} + * @todo stability experimental + */ +ol.parser.XML = function() { + if (goog.global.ActiveXObject) { + this.xmldom = new ActiveXObject('Microsoft.XMLDOM'); + } + this.regExes = { + trimSpace: (/^\s*|\s*$/g), + removeSpace: (/\s*/g), + splitSpace: (/\s+/), + trimComma: (/\s*,\s*/g) + }; +}; +goog.inherits(ol.parser.XML, ol.parser.Parser); + + +/** + * Shorthand for applying one of the named readers given the node + * namespace and local name. Readers take two args (node, obj) and + * generally extend or modify the second. + * + * @param {Element|Document} node The node to be read (required). + * @param {Object} obj The object to be modified (optional). + * @return {Object} The input object, modified (or a new one if none was + * provided). + */ +ol.parser.XML.prototype.readNode = function(node, obj) { + if (!obj) { + obj = {}; + } + var group = this.readers[node.namespaceURI] || + this.readers[this.defaultNamespaceURI]; + if (group) { + var local = node.localName || node.nodeName.split(':').pop(); + var reader = group[local] || group['*']; + if (reader) { + reader.apply(this, [node, obj]); + } + } + return obj; +}; + + +/** + * Shorthand for applying the named readers to all children of a node. + * For each child of type 1 (element), is called. + * + * @param {Element|Document} node The node to be read (required). + * @param {Object} obj The object to be modified (optional). + * @return {Object} The input object, modified. + */ +ol.parser.XML.prototype.readChildNodes = function(node, obj) { + if (!obj) { + obj = {}; + } + var children = node.childNodes; + var child; + for (var i = 0, len = children.length; i < len; ++i) { + child = children[i]; + if (child.nodeType == 1) { + this.readNode(child, obj); + } + } + return obj; +}; + + +/** + * Get the textual value of the node if it exists, or return an + * optional default string. Returns an empty string if no first child + * exists and no default value is supplied. + * + * @param {Element} node The element used to look for a first child value. + * @param {string} def Optional string to return in the event that no + * first child value exists. + * @return {string} The value of the first child of the given node. + */ +ol.parser.XML.prototype.getChildValue = function(node, def) { + var value = def || ''; + if (node) { + for (var child = node.firstChild; child; child = child.nextSibling) { + switch (child.nodeType) { + case 3: // text node + case 4: // cdata section + value += child.nodeValue; + break; + default: + break; + } + } + } + return value; +}; + + +/** + * Get an attribute node given the namespace URI and local name. + * + * @param {Element} node Node on which to search for attribute nodes. + * @param {string} uri Namespace URI. + * @param {string} name Local name of the attribute (without the prefix). + * @return {?Element} An attribute node or null if none found. + */ +ol.parser.XML.prototype.getAttributeNodeNS = function(node, uri, name) { + var attributeNode = null; + if (node.getAttributeNodeNS) { + attributeNode = node.getAttributeNodeNS(uri, name); + } else { + var attributes = node.attributes; + var potentialNode, fullName; + for (var i = 0, len = attributes.length; i < len; ++i) { + potentialNode = attributes[i]; + if (potentialNode.namespaceURI == uri) { + fullName = (potentialNode.prefix) ? + (potentialNode.prefix + ':' + name) : name; + if (fullName == potentialNode.nodeName) { + attributeNode = potentialNode; + break; + } + } + } + } + return attributeNode; +}; + + +/** + * Get an attribute value given the namespace URI and local name. + * + * @param {Element} node Node on which to search for an attribute. + * @param {string} uri Namespace URI. + * @param {string} name Local name of the attribute (without the prefix). + * @return {string} An attribute value or and empty string if none found. + */ +ol.parser.XML.prototype.getAttributeNS = function(node, uri, name) { + var attributeValue = ''; + if (node.getAttributeNS) { + attributeValue = node.getAttributeNS(uri, name) || ''; + } else { + var attributeNode = this.getAttributeNodeNS(node, uri, name); + if (attributeNode) { + attributeValue = attributeNode.nodeValue; + } + } + return attributeValue; +}; + + +/** + * Create a new element with namespace. This node can be appended to + * another node with the standard node.appendChild method. For + * cross-browser support, this method must be used instead of + * document.createElementNS. + * + * @param {string} name The qualified name of the element (prefix:localname). + * @param {string=} opt_uri Namespace URI for the element. + * @return {Element} A DOM element with namespace. + */ +ol.parser.XML.prototype.createElementNS = function(name, opt_uri) { + var uri = opt_uri ? opt_uri : this.defaultNamespaceURI; + var element; + if (this.xmldom) { + element = this.xmldom.createNode(1, name, uri); + } else { + element = document.createElementNS(uri, name); + } + return element; +}; + + +/** + * Shorthand for applying one of the named writers and appending the + * results to a node. + * + * @param {string} name The name of a node to generate. Only use a local name. + * @param {Object|string|number} obj Structure containing data for the writer. + * @param {?string=} opt_uri The name space uri to which the node + * belongs. + * @param {Element=} opt_parent Result will be appended to this node. If no + * parent is supplied, the node will not be appended to anything. + * @return {?Element} The child node. + */ +ol.parser.XML.prototype.writeNode = function(name, obj, opt_uri, opt_parent) { + var child = null; + if (goog.isDef(this.writers)) { + var uri = opt_uri ? opt_uri : this.defaultNamespaceURI; + child = this.writers[uri][name].apply(this, [obj]); + if (opt_parent && child) { + opt_parent.appendChild(child); + } + } + return child; +}; + + +/** + * Create a text node. This node can be appended to another node with + * the standard node.appendChild method. For cross-browser support, + * this method must be used instead of document.createTextNode. + * + * @param {string} text The text of the node. + * @return {Element} A DOM text node. + */ +ol.parser.XML.prototype.createTextNode = function(text) { + var node; + if (this.xmldom) { + node = this.xmldom.createTextNode(text); + } else { + node = document.createTextNode(text); + } + return node; +}; + + +/** + * Adds a new attribute or changes the value of an attribute with the given + * namespace and name. + * + * @param {Element} node Element node on which to set the attribute. + * @param {string} uri Namespace URI for the attribute. + * @param {string} name Qualified name (prefix:localname) for the attribute. + * @param {string} value Attribute value. + */ +ol.parser.XML.prototype.setAttributeNS = function(node, uri, name, value) { + if (node.setAttributeNS) { + node.setAttributeNS(uri, name, value); + } else { + if (this.xmldom) { + if (uri) { + var attribute = node.ownerDocument.createNode( + 2, name, uri); + attribute.nodeValue = value; + node.setAttributeNode(attribute); + } else { + node.setAttribute(name, value); + } + } else { + throw new Error('setAttributeNS not implemented'); + } + } +}; + + +/** + * Serializes a node. + * + * @param {Element} node Element node to serialize. + * @return {string} The serialized XML string. + */ +ol.parser.XML.prototype.serialize = function(node) { + if (this.xmldom) { + return node.xml; + } else if (node.nodeType == 1) { + // Add nodes to a document before serializing. Everything else + // is serialized as is. This is also needed to get all namespaces + // defined in some browsers such as Chrome (xmlns attributes). + var doc = document.implementation.createDocument('', '', null); + if (doc.importNode) { + doc.appendChild(doc.importNode(node, true)); + } else { + doc.appendChild(node); + } + return goog.dom.xml.serialize(doc); + } else { + return goog.dom.xml.serialize(node); + } +}; + + +/** + * Create a document fragment node that can be appended to another node + * created by createElementNS. This will call + * document.createDocumentFragment outside of IE. In IE, the ActiveX + * object's createDocumentFragment method is used. + * + * @return {Element} A document fragment. + */ +ol.parser.XML.prototype.createDocumentFragment = function() { + var element; + if (this.xmldom) { + element = this.xmldom.createDocumentFragment(); + } else { + element = document.createDocumentFragment(); + } + return element; +}; diff --git a/float-no-zero/ol/ol/pixel.js b/float-no-zero/ol/ol/pixel.js new file mode 100644 index 0000000000..40c8a11da8 --- /dev/null +++ b/float-no-zero/ol/ol/pixel.js @@ -0,0 +1,7 @@ +goog.provide('ol.Pixel'); + + +/** + * @typedef {Array.} + */ +ol.Pixel; diff --git a/float-no-zero/ol/ol/proj/chprojection.js b/float-no-zero/ol/ol/proj/chprojection.js new file mode 100644 index 0000000000..50b5fd3818 --- /dev/null +++ b/float-no-zero/ol/ol/proj/chprojection.js @@ -0,0 +1,468 @@ +goog.provide('ol.proj.CH'); +goog.provide('ol.proj.EPSG2056'); +goog.provide('ol.proj.EPSG21781'); + +goog.require('goog.asserts'); +goog.require('goog.math'); +goog.require('ol.ellipsoid.BESSEL1841'); +goog.require('ol.proj'); +goog.require('ol.proj.EPSG4326'); +goog.require('ol.proj.Projection'); +goog.require('ol.proj.Units'); + + + +/** + * Internal base class for Swiss grid projections. + * @constructor + * @extends {ol.proj.Projection} + * @param {{code: string, extent: ol.Extent}} options Options. + */ +ol.proj.CH = function(options) { + goog.base(this, { + code: options.code, + extent: options.extent, + global: false, + units: ol.proj.Units.METERS + }); +}; +goog.inherits(ol.proj.CH, ol.proj.Projection); + + +/** + * @const + * @type {number} + */ +ol.proj.CH.PHI0 = goog.math.toRadians((3600 * 46 + 60 * 57 + 8.66) / 3600); + + +/** + * @const + * @type {number} + */ +ol.proj.CH.LAMBDA0 = goog.math.toRadians((3600 * 7 + 60 * 26 + 22.5) / 3600); + + +/** + * @const + * @type {ol.Ellipsoid} + */ +ol.proj.CH.ELLIPSOID = ol.ellipsoid.BESSEL1841; + + +/** + * @const + * @type {number} + */ +ol.proj.CH.COS_PHI0 = Math.cos(ol.proj.CH.PHI0); + + +/** + * @const + * @type {number} + */ +ol.proj.CH.SIN_PHI0 = Math.sin(ol.proj.CH.PHI0); + + +/** + * @const + * @type {number} + */ +ol.proj.CH.R = ol.proj.CH.ELLIPSOID.a * Math.sqrt(1 - + ol.proj.CH.ELLIPSOID.eSquared) / (1 - ol.proj.CH.ELLIPSOID.eSquared * + ol.proj.CH.SIN_PHI0 * ol.proj.CH.SIN_PHI0); + + +/** + * @const + * @type {number} + */ +ol.proj.CH.ALPHA = Math.sqrt(1 + + ol.proj.CH.ELLIPSOID.eSquared * Math.pow(ol.proj.CH.COS_PHI0, 4) / + (1 - ol.proj.CH.ELLIPSOID.eSquared)); + + +/** + * @const + * @type {number} + */ +ol.proj.CH.SIN_B0 = ol.proj.CH.SIN_PHI0 / ol.proj.CH.ALPHA; + + +/** + * @const + * @type {number} + */ +ol.proj.CH.B0 = Math.asin(ol.proj.CH.SIN_B0); + + +/** + * @const + * @type {number} + */ +ol.proj.CH.COS_B0 = Math.cos(ol.proj.CH.B0); +// FIXME should we use Math.sqrt(1 - ol.proj.CH.SIN_B0 * ol.proj.CH.SIN_B0) ? + + +/** + * @const + * @type {number} + */ +ol.proj.CH.K = Math.log(Math.tan(Math.PI / 4 + ol.proj.CH.B0 / 2)) - + ol.proj.CH.ALPHA * Math.log(Math.tan(Math.PI / 4 + ol.proj.CH.PHI0 / 2)) + + ol.proj.CH.ALPHA * ol.proj.CH.ELLIPSOID.e * Math.log( + (1 + ol.proj.CH.ELLIPSOID.e * ol.proj.CH.SIN_PHI0) / + (1 - ol.proj.CH.ELLIPSOID.e * ol.proj.CH.SIN_PHI0)) / 2; + + +/** + * Add EPSG:2056 and EPSG:21781 projections, and transformations between them. + */ +ol.proj.CH.add = function() { + ol.proj.EPSG2056.add(); + ol.proj.EPSG21781.add(); + var epsg2056 = ol.proj.get('EPSG:2056'); + var epsg21781 = ol.proj.get('EPSG:21781'); + ol.proj.addTransform(epsg2056, epsg21781, + goog.partial(ol.proj.CH.translate_, -2000000, -1000000)); + ol.proj.addTransform(epsg21781, epsg2056, + goog.partial(ol.proj.CH.translate_, 2000000, 1000000)); +}; + + +/** + * Transformation from EPSG:4326 to EPSG:2056/EPSG:21781. + * + * This uses an approximation that is accurate to about 1m. + * + * @see http://www.swisstopo.admin.ch/internet/swisstopo/en/home/products/software/products/skripts.html + * + * @param {number} offsetY Y offset. + * @param {number} offsetX X offset. + * @param {Array.} input Input array of coordinate values. + * @param {Array.=} opt_output Output array of coordinate values. + * @param {number=} opt_dimension Dimension (default is `2`). + * @private + * @return {Array.} Output array of coordinate values. + */ +ol.proj.CH.fromEPSG4326Approximate_ = + function(offsetY, offsetX, input, opt_output, opt_dimension) { + var n = input.length; + var dimension = goog.isDef(opt_dimension) ? opt_dimension : 2; + var output; + if (goog.isDef(opt_output)) { + output = opt_output; + } else { + if (dimension > 2) { + output = input.slice(); + } else { + output = new Array(n); + } + } + goog.asserts.assert(dimension >= 2); + goog.asserts.assert(output.length % dimension === 0); + var auxLat, auxLon, i; + for (i = 0; i < n; i += dimension) { + auxLat = 36 * input[i + 1] / 100 - 16.902866; + auxLon = 36 * input[i] / 100 - 2.67825; + output[i] = offsetY + 72.37 + + 211455.93 * auxLon - + 10938.51 * auxLon * auxLat - + 0.36 * auxLon * auxLat * auxLat - + 44.54 * auxLon * auxLon * auxLon; + output[i + 1] = offsetX + 147.07 + + 308807.95 * auxLat + + 3745.25 * auxLon * auxLon + + 76.63 * auxLat * auxLat - + 194.56 * auxLon * auxLon * auxLat + + 119.79 * auxLat * auxLat * auxLat; + } + return output; +}; + + +/** + * Transformation from EPSG:4326 to EPSG:2056/EPSG:21781. + * + * @see http://www.swisstopo.admin.ch/internet/swisstopo/en/home/topics/survey/sys/refsys/projections.html + * + * @param {number} offsetY Y offset. + * @param {number} offsetX X offset. + * @param {Array.} input Input array of coordinate values. + * @param {Array.=} opt_output Output array of coordinate values. + * @param {number=} opt_dimension Dimension (default is `2`). + * @private + * @return {Array.} Output array of coordinate values. + */ +ol.proj.CH.fromEPSG4326Rigorous_ = + function(offsetY, offsetX, input, opt_output, opt_dimension) { + var n = input.length; + var dimension = goog.isDef(opt_dimension) ? opt_dimension : 2; + var output; + if (goog.isDef(opt_output)) { + output = opt_output; + } else { + if (dimension > 2) { + output = input.slice(); + } else { + output = new Array(n); + } + } + goog.asserts.assert(dimension >= 2); + goog.asserts.assert(output.length % dimension === 0); + var b, bBar, eSinPhi, i, l, lambda, lBar, phi, s; + for (i = 0; i < n; i += dimension) { + lambda = goog.math.toRadians(input[i]); + phi = goog.math.toRadians(input[i + 1]); + eSinPhi = ol.proj.CH.ELLIPSOID.e * Math.sin(phi); + s = ol.proj.CH.ALPHA * Math.log(Math.tan(Math.PI / 4 + phi / 2)) - + ol.proj.CH.ALPHA * ol.proj.CH.ELLIPSOID.e * Math.log( + (1 + eSinPhi) / (1 - eSinPhi)) / 2 + ol.proj.CH.K; + b = 2 * (Math.atan(Math.exp(s)) - Math.PI / 4); + l = ol.proj.CH.ALPHA * (lambda - ol.proj.CH.LAMBDA0); + lBar = Math.atan2(Math.sin(l), + ol.proj.CH.SIN_B0 * Math.tan(b) + ol.proj.CH.COS_B0 * Math.cos(l)); + bBar = Math.asin(ol.proj.CH.COS_B0 * Math.sin(b) - + ol.proj.CH.SIN_B0 * Math.cos(b) * Math.cos(l)); + output[i] = offsetY + ol.proj.CH.R * lBar; + output[i + 1] = offsetX + ol.proj.CH.R * + Math.log((1 + Math.sin(bBar)) / (1 - Math.sin(bBar))) / 2; + } + return output; +}; + + +/** + * Transformation from EPSG:2056/EPSG:21781 to EPSG:4326. + * + * This uses an approximation that is accurate to about 1m. + * + * @see http://www.swisstopo.admin.ch/internet/swisstopo/en/home/products/software/products/skripts.html + * + * @param {number} offsetY Y offset. + * @param {number} offsetX X offset. + * @param {Array.} input Input array of coordinate values. + * @param {Array.=} opt_output Output array of coordinate values. + * @param {number=} opt_dimension Dimension (default is `2`). + * @private + * @return {Array.} Output array of coordinate values. + */ +ol.proj.CH.toEPSG4326Approximate_ = + function(offsetY, offsetX, input, opt_output, opt_dimension) { + var n = input.length; + var dimension = goog.isDef(opt_dimension) ? opt_dimension : 2; + var output; + if (goog.isDef(opt_output)) { + output = opt_output; + } else { + if (dimension > 2) { + output = input.slice(); + } else { + output = new Array(n); + } + } + goog.asserts.assert(dimension >= 2); + goog.asserts.assert(output.length % dimension === 0); + var auxX, auxY, i; + for (i = 0; i < n; i += dimension) { + auxY = (input[i] - offsetY) / 1000000; + auxX = (input[i + 1] - offsetX) / 1000000; + output[i] = 100 * (2.6779094 + + 4.728982 * auxY + + 0.791484 * auxY * auxX + + 0.1306 * auxY * auxX * auxX - + 0.0436 * auxY * auxY * auxY) / 36; + output[i + 1] = 100 * (16.9023892 + + 3.238272 * auxX - + 0.270978 * auxY * auxY - + 0.002528 * auxX * auxX - + 0.0447 * auxY * auxY * auxX - + 0.014 * auxX * auxX * auxX) / 36; + } + return output; +}; + + +/** + * Transformation from EPSG:2056/EPSG:21781 to EPSG:4326. + * + * @see http://www.swisstopo.admin.ch/internet/swisstopo/en/home/topics/survey/sys/refsys/projections.html + * + * @param {number} offsetY Y offset. + * @param {number} offsetX X offset. + * @param {Array.} input Input array of coordinate values. + * @param {Array.=} opt_output Output array of coordinate values. + * @param {number=} opt_dimension Dimension (default is `2`). + * @private + * @return {Array.} Output array of coordinate values. + */ +ol.proj.CH.toEPSG4326Rigorous_ = + function(offsetY, offsetX, input, opt_output, opt_dimension) { + var n = input.length; + var dimension = goog.isDef(opt_dimension) ? opt_dimension : 2; + var output; + if (goog.isDef(opt_output)) { + output = opt_output; + } else { + if (dimension > 2) { + output = input.slice(); + } else { + output = new Array(n); + } + } + goog.asserts.assert(dimension >= 2); + goog.asserts.assert(output.length % dimension === 0); + var b, bBar, eSinPhi, i, iterations, l, lambda, lastPhi, lBar, phi, s, x, y; + for (i = 0; i < n; i += dimension) { + y = input[i] - offsetY; + x = input[i + 1] - offsetX; + lBar = y / ol.proj.CH.R; + bBar = 2 * (Math.atan(Math.exp(x / ol.proj.CH.R)) - Math.PI / 4); + b = Math.asin(ol.proj.CH.COS_B0 * Math.sin(bBar) + + ol.proj.CH.SIN_B0 * Math.cos(bBar) * Math.cos(lBar)); + l = Math.atan2(Math.sin(lBar), ol.proj.CH.COS_B0 * Math.cos(lBar) - + ol.proj.CH.SIN_B0 * Math.tan(bBar)); + lambda = ol.proj.CH.LAMBDA0 + l / ol.proj.CH.ALPHA; + lastPhi = phi = b; + // Empirically, about 18 iterations are required for 1e-7 radian accuracy + for (iterations = 20; iterations > 0; --iterations) { + s = (Math.log(Math.tan(Math.PI / 4 + b / 2)) - + ol.proj.CH.K) / ol.proj.CH.ALPHA + + ol.proj.CH.ELLIPSOID.e * Math.log(Math.tan(Math.PI / 4 + + Math.asin(ol.proj.CH.ELLIPSOID.e * Math.sin(phi)) / 2)); + phi = 2 * Math.atan(Math.exp(s)) - Math.PI / 2; + if (Math.abs(phi - lastPhi) < 1e-7) { + break; + } + lastPhi = phi; + } + goog.asserts.assert(iterations !== 0); + output[i] = goog.math.toDegrees(lambda); + output[i + 1] = goog.math.toDegrees(phi); + } + return output; +}; + + +/** + * Transformation between EPSG:2056 and EPSG:21781. + * + * Currently a simple offset is used. This is accurate to within 3m. + * + * @param {number} offsetY Y offset. + * @param {number} offsetX X offset. + * @param {Array.} input Input array of coordinate values. + * @param {Array.=} opt_output Output array of coordinate values. + * @param {number=} opt_dimension Dimension (default is `2`). + * @private + * @return {Array.} Output array of coordinate values. + */ +ol.proj.CH.translate_ = + function(offsetY, offsetX, input, opt_output, opt_dimension) { + var n = input.length; + var dimension = goog.isDef(opt_dimension) ? opt_dimension : 2; + var output; + if (goog.isDef(opt_output)) { + output = opt_output; + } else { + if (dimension > 2) { + output = input.slice(); + } else { + output = new Array(n); + } + } + goog.asserts.assert(dimension >= 2); + goog.asserts.assert(output.length % dimension === 0); + var i; + for (i = 0; i < n; i += dimension) { + output[i] = input[i] + offsetY; + output[i + 1] = input[i + 1] + offsetX; + } + return output; +}; + + +/** + * @inheritDoc + */ +ol.proj.CH.prototype.getPointResolution = function(resolution, point) { + return resolution; +}; + + + +/** + * The EPSG:2056 projection, also known as LV95 (CH1903+). + * @constructor + * @extends {ol.proj.CH} + */ +ol.proj.EPSG2056 = function() { + goog.base(this, { + code: 'EPSG:2056', + extent: ol.proj.EPSG2056.EXTENT + }); +}; +goog.inherits(ol.proj.EPSG2056, ol.proj.CH); + + +/** + * @const + * @type {ol.Extent} + */ +ol.proj.EPSG2056.EXTENT = + [2485869.5728, 1076443.1884, 2837076.5648, 1299941.7864]; + + +/** + * Add the EPSG:2056 projection and transformations to and from EPSG:4326. + */ +ol.proj.EPSG2056.add = function() { + ol.proj.addEquivalentProjections(ol.proj.EPSG4326.PROJECTIONS); + var epsg2056 = new ol.proj.EPSG2056(); + ol.proj.addProjection(epsg2056); + ol.proj.addEquivalentTransforms( + ol.proj.EPSG4326.PROJECTIONS, + [epsg2056], + goog.partial(ol.proj.CH.fromEPSG4326Rigorous_, 2600000, 1200000), + goog.partial(ol.proj.CH.toEPSG4326Rigorous_, 2600000, 1200000)); +}; + + + +/** + * The EPSG:21781 projection, also known as LV03 (CH1903). + * @constructor + * @extends {ol.proj.CH} + */ +ol.proj.EPSG21781 = function() { + goog.base(this, { + code: 'EPSG:21781', + extent: ol.proj.EPSG21781.EXTENT + }); +}; +goog.inherits(ol.proj.EPSG21781, ol.proj.CH); + + +/** + * @const + * @type {ol.Extent} + */ +ol.proj.EPSG21781.EXTENT = [ + 485869.5728, 76443.1884, + 837076.5648, 299941.7864 +]; + + +/** + * Add the EPSG:21781 projection and transformations to and from EPSG:4326. + */ +ol.proj.EPSG21781.add = function() { + ol.proj.addEquivalentProjections(ol.proj.EPSG4326.PROJECTIONS); + var epsg21781 = new ol.proj.EPSG21781(); + ol.proj.addProjection(epsg21781); + ol.proj.addEquivalentTransforms( + ol.proj.EPSG4326.PROJECTIONS, + [epsg21781], + goog.partial(ol.proj.CH.fromEPSG4326Rigorous_, 600000, 200000), + goog.partial(ol.proj.CH.toEPSG4326Rigorous_, 600000, 200000)); +}; diff --git a/float-no-zero/ol/ol/proj/common.js b/float-no-zero/ol/ol/proj/common.js new file mode 100644 index 0000000000..00965a28e6 --- /dev/null +++ b/float-no-zero/ol/ol/proj/common.js @@ -0,0 +1,23 @@ +goog.provide('ol.proj.common'); + +goog.require('ol.proj'); +goog.require('ol.proj.EPSG3857'); +goog.require('ol.proj.EPSG4326'); + + +/** + * FIXME empty description for jsdoc + */ +ol.proj.common.add = function() { + // Add transformations that don't alter coordinates to convert within set of + // projections with equal meaning. + ol.proj.addEquivalentProjections(ol.proj.EPSG3857.PROJECTIONS); + ol.proj.addEquivalentProjections(ol.proj.EPSG4326.PROJECTIONS); + // Add transformations to convert EPSG:4326 like coordinates to EPSG:3857 like + // coordinates and back. + ol.proj.addEquivalentTransforms( + ol.proj.EPSG4326.PROJECTIONS, + ol.proj.EPSG3857.PROJECTIONS, + ol.proj.EPSG3857.fromEPSG4326, + ol.proj.EPSG3857.toEPSG4326); +}; diff --git a/float-no-zero/ol/ol/proj/epsg3857projection.js b/float-no-zero/ol/ol/proj/epsg3857projection.js new file mode 100644 index 0000000000..1137e4a343 --- /dev/null +++ b/float-no-zero/ol/ol/proj/epsg3857projection.js @@ -0,0 +1,144 @@ +goog.provide('ol.proj.EPSG3857'); + +goog.require('goog.array'); +goog.require('goog.asserts'); +goog.require('ol.math'); +goog.require('ol.proj'); +goog.require('ol.proj.Projection'); +goog.require('ol.proj.Units'); + + + +/** + * @constructor + * @extends {ol.proj.Projection} + * @param {string} code Code. + */ +ol.proj.EPSG3857 = function(code) { + goog.base(this, { + code: code, + units: ol.proj.Units.METERS, + extent: ol.proj.EPSG3857.EXTENT, + global: true + }); +}; +goog.inherits(ol.proj.EPSG3857, ol.proj.Projection); + + +/** + * @const + * @type {number} + */ +ol.proj.EPSG3857.RADIUS = 6378137; + + +/** + * @const + * @type {number} + */ +ol.proj.EPSG3857.HALF_SIZE = Math.PI * ol.proj.EPSG3857.RADIUS; + + +/** + * @const + * @type {ol.Extent} + */ +ol.proj.EPSG3857.EXTENT = [ + -ol.proj.EPSG3857.HALF_SIZE, -ol.proj.EPSG3857.HALF_SIZE, + ol.proj.EPSG3857.HALF_SIZE, ol.proj.EPSG3857.HALF_SIZE +]; + + +/** + * Lists several projection codes with the same meaning as EPSG:3857. + * + * @type {Array.} + */ +ol.proj.EPSG3857.CODES = [ + 'EPSG:3857', + 'EPSG:102100', + 'EPSG:102113', + 'EPSG:900913', + 'urn:ogc:def:crs:EPSG:6.18:3:3857' +]; + + +/** + * Projections equal to EPSG:3857. + * + * @const + * @type {Array.} + */ +ol.proj.EPSG3857.PROJECTIONS = goog.array.map( + ol.proj.EPSG3857.CODES, + function(code) { + return new ol.proj.EPSG3857(code); + }); + + +/** + * Transformation from EPSG:4326 to EPSG:3857. + * + * @param {Array.} input Input array of coordinate values. + * @param {Array.=} opt_output Output array of coordinate values. + * @param {number=} opt_dimension Dimension (default is `2`). + * @return {Array.} Output array of coordinate values. + */ +ol.proj.EPSG3857.fromEPSG4326 = function(input, opt_output, opt_dimension) { + var length = input.length, + dimension = opt_dimension > 1 ? opt_dimension : 2, + output = opt_output; + if (!goog.isDef(output)) { + if (dimension > 2) { + // preserve values beyond second dimension + output = input.slice(); + } else { + output = new Array(length); + } + } + goog.asserts.assert(output.length % dimension === 0); + for (var i = 0; i < length; i += dimension) { + output[i] = ol.proj.EPSG3857.RADIUS * Math.PI * input[i] / 180; + output[i + 1] = ol.proj.EPSG3857.RADIUS * + Math.log(Math.tan(Math.PI * (input[i + 1] + 90) / 360)); + } + return output; +}; + + +/** + * Transformation from EPSG:3857 to EPSG:4326. + * + * @param {Array.} input Input array of coordinate values. + * @param {Array.=} opt_output Output array of coordinate values. + * @param {number=} opt_dimension Dimension (default is `2`). + * @return {Array.} Output array of coordinate values. + */ +ol.proj.EPSG3857.toEPSG4326 = function(input, opt_output, opt_dimension) { + var length = input.length, + dimension = opt_dimension > 1 ? opt_dimension : 2, + output = opt_output; + if (!goog.isDef(output)) { + if (dimension > 2) { + // preserve values beyond second dimension + output = input.slice(); + } else { + output = new Array(length); + } + } + goog.asserts.assert(output.length % dimension === 0); + for (var i = 0; i < length; i += dimension) { + output[i] = 180 * input[i] / (ol.proj.EPSG3857.RADIUS * Math.PI); + output[i + 1] = 360 * Math.atan( + Math.exp(input[i + 1] / ol.proj.EPSG3857.RADIUS)) / Math.PI - 90; + } + return output; +}; + + +/** + * @inheritDoc + */ +ol.proj.EPSG3857.prototype.getPointResolution = function(resolution, point) { + return resolution / ol.math.cosh(point[1] / ol.proj.EPSG3857.RADIUS); +}; diff --git a/float-no-zero/ol/ol/proj/epsg4326projection.js b/float-no-zero/ol/ol/proj/epsg4326projection.js new file mode 100644 index 0000000000..3f291ef5f1 --- /dev/null +++ b/float-no-zero/ol/ol/proj/epsg4326projection.js @@ -0,0 +1,58 @@ +goog.provide('ol.proj.EPSG4326'); + +goog.require('ol.proj'); +goog.require('ol.proj.Projection'); +goog.require('ol.proj.Units'); + + + +/** + * @constructor + * @extends {ol.proj.Projection} + * @param {string} code Code. + * @param {string=} opt_axisOrientation Axis orientation. + */ +ol.proj.EPSG4326 = function(code, opt_axisOrientation) { + goog.base(this, { + code: code, + units: ol.proj.Units.DEGREES, + extent: ol.proj.EPSG4326.EXTENT, + axisOrientation: opt_axisOrientation, + global: true + }); +}; +goog.inherits(ol.proj.EPSG4326, ol.proj.Projection); + + +/** + * Extent of the EPSG:4326 projection which is the whole world. + * + * @const + * @type {ol.Extent} + */ +ol.proj.EPSG4326.EXTENT = [-180, -90, 180, 90]; + + +/** + * Projections equal to EPSG:4326. + * + * @const + * @type {Array.} + */ +ol.proj.EPSG4326.PROJECTIONS = [ + new ol.proj.EPSG4326('CRS:84'), + new ol.proj.EPSG4326('EPSG:4326', 'neu'), + new ol.proj.EPSG4326('urn:ogc:def:crs:EPSG:6.6:4326', 'neu'), + new ol.proj.EPSG4326('urn:ogc:def:crs:OGC:1.3:CRS84'), + new ol.proj.EPSG4326('urn:ogc:def:crs:OGC:2:84'), + new ol.proj.EPSG4326('http://www.opengis.net/gml/srs/epsg.xml#4326', 'neu'), + new ol.proj.EPSG4326('urn:x-ogc:def:crs:EPSG:4326', 'neu') +]; + + +/** + * @inheritDoc + */ +ol.proj.EPSG4326.prototype.getPointResolution = function(resolution, point) { + return resolution; +}; diff --git a/float-no-zero/ol/ol/proj/proj.exports b/float-no-zero/ol/ol/proj/proj.exports new file mode 100644 index 0000000000..e78ec36f9a --- /dev/null +++ b/float-no-zero/ol/ol/proj/proj.exports @@ -0,0 +1,16 @@ +@exportSymbol ol.proj.Projection +@exportProperty ol.proj.Projection.prototype.getCode +@exportProperty ol.proj.Projection.prototype.getExtent +@exportProperty ol.proj.Projection.prototype.getUnits + +@exportSymbol ol.proj.addProjection +@exportSymbol ol.proj.get +@exportSymbol ol.proj.getTransform +@exportSymbol ol.proj.getTransformFromProjections +@exportSymbol ol.proj.transform +@exportSymbol ol.proj.transformWithProjections +@exportSymbol ol.proj.configureProj4jsProjection + +@exportSymbol ol.proj.common.add + +@exportSymbol ol.proj.METERS_PER_UNIT diff --git a/float-no-zero/ol/ol/proj/proj.js b/float-no-zero/ol/ol/proj/proj.js new file mode 100644 index 0000000000..bf3ddc3882 --- /dev/null +++ b/float-no-zero/ol/ol/proj/proj.js @@ -0,0 +1,725 @@ +goog.provide('ol.proj'); +goog.provide('ol.proj.METERS_PER_UNIT'); +goog.provide('ol.proj.Projection'); +goog.provide('ol.proj.ProjectionLike'); +goog.provide('ol.proj.Units'); + +goog.require('goog.array'); +goog.require('goog.asserts'); +goog.require('goog.object'); +goog.require('ol.Extent'); +goog.require('ol.TransformFunction'); +goog.require('ol.sphere.NORMAL'); + + +/** + * @define {boolean} Enable Proj4js. + */ +ol.ENABLE_PROJ4JS = true; + + +/** + * Have Proj4js. + * @const + * @type {boolean} + */ +ol.HAVE_PROJ4JS = ol.ENABLE_PROJ4JS && typeof Proj4js == 'object'; + + +/** + * A projection as {@link ol.proj.Projection}, SRS identifier string or + * undefined. + * @typedef {ol.proj.Projection|string|undefined} ol.proj.ProjectionLike + * @todo stability experimental + */ +ol.proj.ProjectionLike; + + +/** + * @enum {string} + * @todo stability experimental + */ +ol.proj.Units = { + DEGREES: 'degrees', + FEET: 'ft', + METERS: 'm', + PIXELS: 'pixels' +}; + + +/** + * Meters per unit lookup table. + * @const + * @type {Object.} + */ +ol.proj.METERS_PER_UNIT[ol.proj.Units.DEGREES] = + 2 * Math.PI * ol.sphere.NORMAL.radius / 360; +ol.proj.METERS_PER_UNIT[ol.proj.Units.FEET] = 0.3048; +ol.proj.METERS_PER_UNIT[ol.proj.Units.METERS] = 1; + + + +/** + * @constructor + * @param {olx.ProjectionOptions} options Projection options. + * @struct + * @todo stability experimental + */ +ol.proj.Projection = function(options) { + + /** + * @private + * @type {string} + */ + this.code_ = options.code; + + /** + * @private + * @type {ol.proj.Units} + */ + this.units_ = /** @type {ol.proj.Units} */ (options.units); + + /** + * @private + * @type {ol.Extent} + */ + this.extent_ = goog.isDef(options.extent) ? options.extent : null; + + /** + * @private + * @type {string} + */ + this.axisOrientation_ = goog.isDef(options.axisOrientation) ? + options.axisOrientation : 'enu'; + + /** + * @private + * @type {boolean} + */ + this.global_ = goog.isDef(options.global) ? options.global : false; + + /** + * @private + * @type {ol.tilegrid.TileGrid} + */ + this.defaultTileGrid_ = null; + +}; + + +/** + * Get the code for this projection, e.g. 'EPSG:4326'. + * @return {string} Code. + */ +ol.proj.Projection.prototype.getCode = function() { + return this.code_; +}; + + +/** + * Get the validity extent for this projection. + * @return {ol.Extent} Extent. + */ +ol.proj.Projection.prototype.getExtent = function() { + return this.extent_; +}; + + +/** + * Get the resolution of the point in degrees. For projections with degrees as + * the unit this will simply return the provided resolution. For other + * projections the point resolution is estimated by transforming the center + * pixel to EPSG:4326, measuring its width and height on the normal sphere, + * and taking the average of the width and height. + * @param {number} resolution Resolution. + * @param {ol.Coordinate} point Point. + * @return {number} Point resolution. + */ +ol.proj.Projection.prototype.getPointResolution = goog.abstractMethod; + + +/** + * Get the units of this projection. + * @return {ol.proj.Units} Units. + */ +ol.proj.Projection.prototype.getUnits = function() { + return this.units_; +}; + + +/** + * Get the amount of meters per unit of this projection. If the projection is + * not configured with a units identifier, the return is `undefined`. + * @return {number|undefined} Meters. + */ +ol.proj.Projection.prototype.getMetersPerUnit = function() { + return ol.proj.METERS_PER_UNIT[this.units_]; +}; + + +/** + * Get the axis orientation of this projection. + * Example values are: + * enu - the default easting, northing, elevation. + * neu - northing, easting, up - useful for "lat/long" geographic coordinates, + * or south orientated transverse mercator. + * wnu - westing, northing, up - some planetary coordinate systems have + * "west positive" coordinate systems + * @return {string} Axis orientation. + */ +ol.proj.Projection.prototype.getAxisOrientation = function() { + return this.axisOrientation_; +}; + + +/** + * Is this projection a global projection which spans the whole world? + * @return {boolean} Wether the projection is global. + */ +ol.proj.Projection.prototype.isGlobal = function() { + return this.global_; +}; + + +/** + * @return {ol.tilegrid.TileGrid} The default tile grid. + */ +ol.proj.Projection.prototype.getDefaultTileGrid = function() { + return this.defaultTileGrid_; +}; + + +/** + * @param {ol.tilegrid.TileGrid} tileGrid The default tile grid. + */ +ol.proj.Projection.prototype.setDefaultTileGrid = function(tileGrid) { + this.defaultTileGrid_ = tileGrid; +}; + + + +/** + * @constructor + * @extends {ol.proj.Projection} + * @param {Proj4js.Proj} proj4jsProj Proj4js projection. + * @param {olx.Proj4jsProjectionOptions} options Proj4js projection options. + * @private + * @struct + */ +ol.Proj4jsProjection_ = function(proj4jsProj, options) { + + var units = /** @type {ol.proj.Units} */ (proj4jsProj.units); + + var config = /** @type {olx.ProjectionOptions} */ ({ + units: units, + axisOrientation: proj4jsProj.axis + }); + goog.object.extend(config, options); + + goog.base(this, config); + + /** + * @private + * @type {Proj4js.Proj} + */ + this.proj4jsProj_ = proj4jsProj; + + /** + * @private + * @type {?ol.TransformFunction} + */ + this.toEPSG4326_ = null; + +}; +goog.inherits(ol.Proj4jsProjection_, ol.proj.Projection); + + +/** + * @inheritDoc + */ +ol.Proj4jsProjection_.prototype.getMetersPerUnit = function() { + var metersPerUnit = this.proj4jsProj_.to_meter; + if (!goog.isDef(metersPerUnit)) { + metersPerUnit = ol.proj.METERS_PER_UNIT[this.units_]; + } + return metersPerUnit; +}; + + +/** + * @inheritDoc + */ +ol.Proj4jsProjection_.prototype.getPointResolution = + function(resolution, point) { + if (this.getUnits() == ol.proj.Units.DEGREES) { + return resolution; + } else { + // Estimate point resolution by transforming the center pixel to EPSG:4326, + // measuring its width and height on the normal sphere, and taking the + // average of the width and height. + if (goog.isNull(this.toEPSG4326_)) { + this.toEPSG4326_ = ol.proj.getTransformFromProjections( + this, ol.proj.getProj4jsProjectionFromCode_({ + code: 'EPSG:4326', + extent: null + })); + } + var vertices = [ + point[0] - resolution / 2, point[1], + point[0] + resolution / 2, point[1], + point[0], point[1] - resolution / 2, + point[0], point[1] + resolution / 2 + ]; + vertices = this.toEPSG4326_(vertices, vertices, 2); + var width = ol.sphere.NORMAL.haversineDistance( + vertices.slice(0, 2), vertices.slice(2, 4)); + var height = ol.sphere.NORMAL.haversineDistance( + vertices.slice(4, 6), vertices.slice(6, 8)); + var pointResolution = (width + height) / 2; + if (this.getUnits() == ol.proj.Units.FEET) { + // The radius of the normal sphere is defined in meters, so we must + // convert back to feet. + pointResolution /= 0.3048; + } + return pointResolution; + } +}; + + +/** + * @return {Proj4js.Proj} Proj4js projection. + */ +ol.Proj4jsProjection_.prototype.getProj4jsProj = function() { + return this.proj4jsProj_; +}; + + +/** + * @private + * @type {Object.} + */ +ol.proj.proj4jsProjections_ = {}; + + +/** + * @private + * @type {Object.} + */ +ol.proj.projections_ = {}; + + +/** + * @private + * @type {Object.>} + */ +ol.proj.transforms_ = {}; + + +/** + * Registers transformation functions that don't alter coordinates. Those allow + * to transform between projections with equal meaning. + * + * @param {Array.} projections Projections. + */ +ol.proj.addEquivalentProjections = function(projections) { + ol.proj.addProjections(projections); + goog.array.forEach(projections, function(source) { + goog.array.forEach(projections, function(destination) { + if (source !== destination) { + ol.proj.addTransform(source, destination, ol.proj.cloneTransform); + } + }); + }); +}; + + +/** + * Registers transformation functions to convert coordinates in any projection + * in projection1 to any projection in projection2. + * + * @param {Array.} projections1 Projections with equal + * meaning. + * @param {Array.} projections2 Projections with equal + * meaning. + * @param {ol.TransformFunction} forwardTransform Transformation from any + * projection in projection1 to any projection in projection2. + * @param {ol.TransformFunction} inverseTransform Transform from any projection + * in projection2 to any projection in projection1.. + */ +ol.proj.addEquivalentTransforms = + function(projections1, projections2, forwardTransform, inverseTransform) { + goog.array.forEach(projections1, function(projection1) { + goog.array.forEach(projections2, function(projection2) { + ol.proj.addTransform(projection1, projection2, forwardTransform); + ol.proj.addTransform(projection2, projection1, inverseTransform); + }); + }); +}; + + +/** + * @param {ol.Proj4jsProjection_} proj4jsProjection Proj4js projection. + * @private + */ +ol.proj.addProj4jsProjection_ = function(proj4jsProjection) { + var proj4jsProjections = ol.proj.proj4jsProjections_; + var code = proj4jsProjection.getCode(); + goog.asserts.assert(!goog.object.containsKey(proj4jsProjections, code)); + proj4jsProjections[code] = proj4jsProjection; +}; + + +/** + * @param {ol.proj.Projection} projection Projection. + * @todo stability experimental + */ +ol.proj.addProjection = function(projection) { + var projections = ol.proj.projections_; + var code = projection.getCode(); + projections[code] = projection; + ol.proj.addTransform(projection, projection, ol.proj.cloneTransform); +}; + + +/** + * @param {Array.} projections Projections. + */ +ol.proj.addProjections = function(projections) { + goog.array.forEach(projections, function(projection) { + ol.proj.addProjection(projection); + }); +}; + + +/** + * FIXME empty description for jsdoc + */ +ol.proj.clearAllProjections = function() { + if (ol.ENABLE_PROJ4JS) { + ol.proj.proj4jsProjections_ = {}; + } + ol.proj.projections_ = {}; + ol.proj.transforms_ = {}; +}; + + +/** + * @param {ol.proj.Projection|string|undefined} projection Projection. + * @param {string} defaultCode Default code. + * @return {ol.proj.Projection} Projection. + */ +ol.proj.createProjection = function(projection, defaultCode) { + if (!goog.isDefAndNotNull(projection)) { + return ol.proj.get(defaultCode); + } else if (goog.isString(projection)) { + return ol.proj.get(projection); + } else { + goog.asserts.assertInstanceof(projection, ol.proj.Projection); + return projection; + } +}; + + +/** + * Registers a conversion function to convert coordinates from the source + * projection to the destination projection. + * + * @param {ol.proj.Projection} source Source. + * @param {ol.proj.Projection} destination Destination. + * @param {ol.TransformFunction} transformFn Transform. + */ +ol.proj.addTransform = function(source, destination, transformFn) { + var sourceCode = source.getCode(); + var destinationCode = destination.getCode(); + var transforms = ol.proj.transforms_; + if (!goog.object.containsKey(transforms, sourceCode)) { + transforms[sourceCode] = {}; + } + transforms[sourceCode][destinationCode] = transformFn; +}; + + +/** + * Unregisters the conversion function to convert coordinates from the source + * projection to the destination projection. This method is used to clean up + * cached transforms during testing. + * + * @param {ol.proj.Projection} source Source projection. + * @param {ol.proj.Projection} destination Destination projection. + * @return {ol.TransformFunction} transformFn The unregistered transform. + */ +ol.proj.removeTransform = function(source, destination) { + var sourceCode = source.getCode(); + var destinationCode = destination.getCode(); + var transforms = ol.proj.transforms_; + goog.asserts.assert(sourceCode in transforms); + goog.asserts.assert(destinationCode in transforms[sourceCode]); + var transform = transforms[sourceCode][destinationCode]; + delete transforms[sourceCode][destinationCode]; + var keys = goog.object.getKeys(transforms[sourceCode]); + if (keys.length === 0) { + delete transforms[sourceCode]; + } + return transform; +}; + + +/** + * @param {ol.proj.ProjectionLike} projectionLike Either a code string which is + * a combination of authority and identifier such as "EPSG:4326", or an + * existing projection object, or undefined. + * @return {ol.proj.Projection} Projection. + * @todo stability experimental + */ +ol.proj.get = function(projectionLike) { + var projection; + if (projectionLike instanceof ol.proj.Projection) { + projection = projectionLike; + } else if (goog.isString(projectionLike)) { + var code = projectionLike; + projection = ol.proj.projections_[code]; + if (ol.HAVE_PROJ4JS && !goog.isDef(projection)) { + projection = ol.proj.getProj4jsProjectionFromCode_({ + code: code, + extent: null + }); + } + if (!goog.isDef(projection)) { + goog.asserts.assert(goog.isDef(projection)); + projection = null; + } + } else { + projection = null; + } + return projection; +}; + + +/** + * @param {olx.Proj4jsProjectionOptions} options Proj4js projection options. + * @private + * @return {ol.Proj4jsProjection_} Proj4js projection. + */ +ol.proj.getProj4jsProjectionFromCode_ = function(options) { + var code = options.code; + var proj4jsProjections = ol.proj.proj4jsProjections_; + var proj4jsProjection = proj4jsProjections[code]; + if (!goog.isDef(proj4jsProjection)) { + var proj4jsProj = new Proj4js.Proj(code); + var srsCode = proj4jsProj.srsCode; + proj4jsProjection = proj4jsProjections[srsCode]; + if (!goog.isDef(proj4jsProjection)) { + var config = /** @type {olx.Proj4jsProjectionOptions} */ + (goog.object.clone(options)); + config.code = srsCode; + proj4jsProjection = new ol.Proj4jsProjection_(proj4jsProj, config); + proj4jsProjections[srsCode] = proj4jsProjection; + } + proj4jsProjections[code] = proj4jsProjection; + } + return proj4jsProjection; +}; + + +/** + * Checks if two projections are the same, that is every coordinate in one + * projection does represent the same geographic point as the same coordinate in + * the other projection. + * + * @param {ol.proj.Projection} projection1 Projection 1. + * @param {ol.proj.Projection} projection2 Projection 2. + * @return {boolean} Equivalent. + */ +ol.proj.equivalent = function(projection1, projection2) { + if (projection1 === projection2) { + return true; + } else if (projection1.getUnits() != projection2.getUnits()) { + return false; + } else { + var transformFn = ol.proj.getTransformFromProjections( + projection1, projection2); + return transformFn === ol.proj.cloneTransform; + } +}; + + +/** + * Given the projection-like objects this method searches for a transformation + * function to convert a coordinates array from the source projection to the + * destination projection. + * + * @param {ol.proj.ProjectionLike} source Source. + * @param {ol.proj.ProjectionLike} destination Destination. + * @return {ol.TransformFunction} Transform. + * @todo stability experimental + */ +ol.proj.getTransform = function(source, destination) { + var sourceProjection = ol.proj.get(source); + var destinationProjection = ol.proj.get(destination); + return ol.proj.getTransformFromProjections( + sourceProjection, destinationProjection); +}; + + +/** + * Searches a function that can be used to convert coordinates from the source + * projection to the destination projection. + * + * @param {ol.proj.Projection} sourceProjection Source projection. + * @param {ol.proj.Projection} destinationProjection Destination projection. + * @return {ol.TransformFunction} Transform. + * @todo stability experimental + */ +ol.proj.getTransformFromProjections = + function(sourceProjection, destinationProjection) { + var transforms = ol.proj.transforms_; + var sourceCode = sourceProjection.getCode(); + var destinationCode = destinationProjection.getCode(); + var transform; + if (goog.object.containsKey(transforms, sourceCode) && + goog.object.containsKey(transforms[sourceCode], destinationCode)) { + transform = transforms[sourceCode][destinationCode]; + } + if (ol.HAVE_PROJ4JS && !goog.isDef(transform)) { + var proj4jsSource; + if (sourceProjection instanceof ol.Proj4jsProjection_) { + proj4jsSource = sourceProjection; + } else { + proj4jsSource = + ol.proj.getProj4jsProjectionFromCode_({ + code: sourceCode, + extent: null + }); + } + var sourceProj4jsProj = proj4jsSource.getProj4jsProj(); + var proj4jsDestination; + if (destinationProjection instanceof ol.Proj4jsProjection_) { + proj4jsDestination = destinationProjection; + } else { + proj4jsDestination = + ol.proj.getProj4jsProjectionFromCode_({ + code: destinationCode, + extent: null + }); + } + var destinationProj4jsProj = proj4jsDestination.getProj4jsProj(); + transform = + /** + * @param {Array.} input Input coordinate values. + * @param {Array.=} opt_output Output array of coordinates. + * @param {number=} opt_dimension Dimension. + * @return {Array.} Output coordinate values. + */ + function(input, opt_output, opt_dimension) { + var length = input.length, + dimension = opt_dimension > 1 ? opt_dimension : 2, + output = opt_output; + if (!goog.isDef(output)) { + if (dimension > 2) { + // preserve values beyond second dimension + output = input.slice(); + } else { + output = new Array(length); + } + } + goog.asserts.assert(output.length % dimension === 0); + var proj4jsPoint; + for (var i = 0; i < length; i += dimension) { + proj4jsPoint = new Proj4js.Point(input[i], input[i + 1]); + proj4jsPoint = Proj4js.transform( + sourceProj4jsProj, destinationProj4jsProj, proj4jsPoint); + output[i] = proj4jsPoint.x; + output[i + 1] = proj4jsPoint.y; + } + return output; + }; + ol.proj.addTransform(sourceProjection, destinationProjection, transform); + } + if (!goog.isDef(transform)) { + goog.asserts.assert(goog.isDef(transform)); + transform = ol.proj.identityTransform; + } + return transform; +}; + + +/** + * @param {Array.} input Input coordinate array. + * @param {Array.=} opt_output Output array of coordinate values. + * @param {number=} opt_dimension Dimension. + * @return {Array.} Input coordinate array (same array as input). + */ +ol.proj.identityTransform = function(input, opt_output, opt_dimension) { + if (goog.isDef(opt_output) && input !== opt_output) { + // TODO: consider making this a warning instead + goog.asserts.fail('This should not be used internally.'); + for (var i = 0, ii = input.length; i < ii; ++i) { + opt_output[i] = input[i]; + } + input = opt_output; + } + return input; +}; + + +/** + * @param {Array.} input Input coordinate array. + * @param {Array.=} opt_output Output array of coordinate values. + * @param {number=} opt_dimension Dimension. + * @return {Array.} Output coordinate array (new array, same coordinate + * values). + */ +ol.proj.cloneTransform = function(input, opt_output, opt_dimension) { + var output; + if (goog.isDef(opt_output)) { + for (var i = 0, ii = input.length; i < ii; ++i) { + opt_output[i] = input[i]; + } + output = opt_output; + } else { + output = input.slice(); + } + return output; +}; + + +/** + * @param {ol.Coordinate} point Point. + * @param {ol.proj.ProjectionLike} source Source. + * @param {ol.proj.ProjectionLike} destination Destination. + * @return {ol.Coordinate} Point. + * @todo stability experimental + */ +ol.proj.transform = function(point, source, destination) { + var transformFn = ol.proj.getTransform(source, destination); + return transformFn(point); +}; + + +/** + * Transforms the given point to the destination projection. + * + * @param {ol.Coordinate} point Point. + * @param {ol.proj.Projection} sourceProjection Source projection. + * @param {ol.proj.Projection} destinationProjection Destination projection. + * @return {ol.Coordinate} Point. + * @todo stability experimental + */ +ol.proj.transformWithProjections = + function(point, sourceProjection, destinationProjection) { + var transformFn = ol.proj.getTransformFromProjections( + sourceProjection, destinationProjection); + return transformFn(point); +}; + + +/** + * @param {olx.Proj4jsProjectionOptions} options Proj4js projection options. + * @return {ol.proj.Projection} Proj4js projection. + * @todo stability experimental + */ +ol.proj.configureProj4jsProjection = function(options) { + goog.asserts.assert(!goog.object.containsKey( + ol.proj.proj4jsProjections_, options.code)); + return ol.proj.getProj4jsProjectionFromCode_(options); +}; diff --git a/float-no-zero/ol/ol/proj/proj.jsdoc b/float-no-zero/ol/ol/proj/proj.jsdoc new file mode 100644 index 0000000000..2b4b835bfa --- /dev/null +++ b/float-no-zero/ol/ol/proj/proj.jsdoc @@ -0,0 +1,3 @@ +/** + * @namespace ol.proj + */ diff --git a/float-no-zero/ol/ol/render/box.js b/float-no-zero/ol/ol/render/box.js new file mode 100644 index 0000000000..87a1ec7d83 --- /dev/null +++ b/float-no-zero/ol/ol/render/box.js @@ -0,0 +1,160 @@ +// FIXME add rotation + +goog.provide('ol.render.Box'); + +goog.require('goog.Disposable'); +goog.require('goog.array'); +goog.require('goog.asserts'); +goog.require('goog.events'); +goog.require('ol.geom.Polygon'); +goog.require('ol.render.EventType'); + + + +/** + * @constructor + * @extends {goog.Disposable} + * @param {ol.style.Style} style Style. + */ +ol.render.Box = function(style) { + + /** + * @private + * @type {ol.Map} + */ + this.map_ = null; + + /** + * @private + * @type {goog.events.Key} + */ + this.postComposeListenerKey_ = null; + + /** + * @private + * @type {ol.Pixel} + */ + this.startPixel_ = null; + + /** + * @private + * @type {ol.Pixel} + */ + this.endPixel_ = null; + + /** + * @private + * @type {ol.geom.Polygon} + */ + this.geometry_ = null; + + /** + * @private + * @type {ol.style.Style} + */ + this.style_ = style; + +}; +goog.inherits(ol.render.Box, goog.Disposable); + + +/** + * @private + * @return {ol.geom.Polygon} Geometry. + */ +ol.render.Box.prototype.createGeometry_ = function() { + goog.asserts.assert(!goog.isNull(this.startPixel_)); + goog.asserts.assert(!goog.isNull(this.endPixel_)); + goog.asserts.assert(!goog.isNull(this.map_)); + var startPixel = this.startPixel_; + var endPixel = this.endPixel_; + var pixels = [ + startPixel, + [startPixel[0], endPixel[1]], + endPixel, + [endPixel[0], startPixel[1]] + ]; + var coordinates = goog.array.map(pixels, + this.map_.getCoordinateFromPixel, this.map_); + // close the polygon + coordinates[4] = coordinates[0].slice(); + return new ol.geom.Polygon([coordinates]); +}; + + +/** + * @inheritDoc + */ +ol.render.Box.prototype.disposeInternal = function() { + this.setMap(null); +}; + + +/** + * @param {ol.render.Event} event Event. + * @private + */ +ol.render.Box.prototype.handleMapPostCompose_ = function(event) { + var geometry = this.geometry_; + goog.asserts.assert(!goog.isNull(geometry)); + var style = this.style_; + goog.asserts.assert(!goog.isNull(style)); + // use drawAsync(Infinity) to draw above everything + event.vectorContext.drawAsync(Infinity, function(render) { + render.setFillStrokeStyle(style.getFill(), style.getStroke()); + render.setTextStyle(style.getText()); + render.drawPolygonGeometry(geometry, null); + }); +}; + + +/** + * @return {ol.geom.Polygon} Geometry. + */ +ol.render.Box.prototype.getGeometry = function() { + return this.geometry_; +}; + + +/** + * @private + */ +ol.render.Box.prototype.requestMapRenderFrame_ = function() { + if (!goog.isNull(this.map_) && + !goog.isNull(this.startPixel_) && + !goog.isNull(this.endPixel_)) { + this.map_.render(); + } +}; + + +/** + * @param {ol.Map} map Map. + */ +ol.render.Box.prototype.setMap = function(map) { + if (!goog.isNull(this.postComposeListenerKey_)) { + goog.events.unlistenByKey(this.postComposeListenerKey_); + this.postComposeListenerKey_ = null; + this.map_.render(); + this.map_ = null; + } + this.map_ = map; + if (!goog.isNull(this.map_)) { + this.postComposeListenerKey_ = goog.events.listen( + map, ol.render.EventType.POSTCOMPOSE, this.handleMapPostCompose_, false, + this); + this.requestMapRenderFrame_(); + } +}; + + +/** + * @param {ol.Pixel} startPixel Start pixel. + * @param {ol.Pixel} endPixel End pixel. + */ +ol.render.Box.prototype.setPixels = function(startPixel, endPixel) { + this.startPixel_ = startPixel; + this.endPixel_ = endPixel; + this.geometry_ = this.createGeometry_(); + this.requestMapRenderFrame_(); +}; diff --git a/float-no-zero/ol/ol/render/canvas/canvas.js b/float-no-zero/ol/ol/render/canvas/canvas.js new file mode 100644 index 0000000000..0fec04de99 --- /dev/null +++ b/float-no-zero/ol/ol/render/canvas/canvas.js @@ -0,0 +1,98 @@ +goog.provide('ol.render.canvas'); + +goog.require('ol.color'); + + +/** + * @typedef {{fillStyle: string}} + */ +ol.render.canvas.FillState; + + +/** + * @typedef {{lineCap: string, + * lineDash: Array., + * lineJoin: string, + * lineWidth: number, + * miterLimit: number, + * strokeStyle: string}} + */ +ol.render.canvas.StrokeState; + + +/** + * @typedef {{font: string, + * textAlign: string, + * textBaseline: string}} + */ +ol.render.canvas.TextState; + + +/** + * @const + * @type {string} + */ +ol.render.canvas.defaultFont = '10px sans-serif'; + + +/** + * @const + * @type {ol.Color} + */ +ol.render.canvas.defaultFillStyle = ol.color.fromString('black'); + + +/** + * @const + * @type {string} + */ +ol.render.canvas.defaultLineCap = 'round'; + + +/** + * @const + * @type {Array.} + */ +ol.render.canvas.defaultLineDash = []; + + +/** + * @const + * @type {string} + */ +ol.render.canvas.defaultLineJoin = 'round'; + + +/** + * @const + * @type {number} + */ +ol.render.canvas.defaultMiterLimit = 10; + + +/** + * @const + * @type {ol.Color} + */ +ol.render.canvas.defaultStrokeStyle = [0, 0, 0, 1]; + + +/** + * @const + * @type {string} + */ +ol.render.canvas.defaultTextAlign = 'center'; + + +/** + * @const + * @type {string} + */ +ol.render.canvas.defaultTextBaseline = 'middle'; + + +/** + * @const + * @type {number} + */ +ol.render.canvas.defaultLineWidth = 1; diff --git a/float-no-zero/ol/ol/render/canvas/canvasimmediate.exports b/float-no-zero/ol/ol/render/canvas/canvasimmediate.exports new file mode 100644 index 0000000000..8654add64a --- /dev/null +++ b/float-no-zero/ol/ol/render/canvas/canvasimmediate.exports @@ -0,0 +1,12 @@ +@exportProperty ol.render.canvas.Immediate.prototype.drawAsync +@exportProperty ol.render.canvas.Immediate.prototype.drawCircleGeometry +@exportProperty ol.render.canvas.Immediate.prototype.drawFeature +@exportProperty ol.render.canvas.Immediate.prototype.drawLineStringGeometry +@exportProperty ol.render.canvas.Immediate.prototype.drawMultiLineStringGeometry +@exportProperty ol.render.canvas.Immediate.prototype.drawMultiPointGeometry +@exportProperty ol.render.canvas.Immediate.prototype.drawMultiPointGeometry +@exportProperty ol.render.canvas.Immediate.prototype.drawPointGeometry +@exportProperty ol.render.canvas.Immediate.prototype.drawPolygonGeometry +@exportProperty ol.render.canvas.Immediate.prototype.setFillStrokeStyle +@exportProperty ol.render.canvas.Immediate.prototype.setImageStyle +@exportProperty ol.render.canvas.Immediate.prototype.setTextStyle diff --git a/float-no-zero/ol/ol/render/canvas/canvasimmediate.js b/float-no-zero/ol/ol/render/canvas/canvasimmediate.js new file mode 100644 index 0000000000..933724d370 --- /dev/null +++ b/float-no-zero/ol/ol/render/canvas/canvasimmediate.js @@ -0,0 +1,907 @@ +// FIXME test, especially polygons with holes and multipolygons +// FIXME need to handle large thick features (where pixel size matters) +// FIXME add offset and end to ol.geom.flat.transform2D? + +goog.provide('ol.render.canvas.Immediate'); + +goog.require('goog.array'); +goog.require('goog.asserts'); +goog.require('goog.object'); +goog.require('goog.vec.Mat4'); +goog.require('ol.BrowserFeature'); +goog.require('ol.color'); +goog.require('ol.extent'); +goog.require('ol.geom.flat'); +goog.require('ol.render.IVectorContext'); +goog.require('ol.render.canvas'); +goog.require('ol.vec.Mat4'); + + + +/** + * @constructor + * @implements {ol.render.IVectorContext} + * @param {CanvasRenderingContext2D} context Context. + * @param {number} pixelRatio Pixel ratio. + * @param {ol.Extent} extent Extent. + * @param {goog.vec.Mat4.Number} transform Transform. + * @param {number} viewRotation View rotation. + * @struct + */ +ol.render.canvas.Immediate = + function(context, pixelRatio, extent, transform, viewRotation) { + + /** + * @private + * @type {Object.>} + */ + this.callbacksByZIndex_ = {}; + + /** + * @private + * @type {CanvasRenderingContext2D} + */ + this.context_ = context; + + /** + * @private + * @type {number} + */ + this.pixelRatio_ = pixelRatio; + + /** + * @private + * @type {ol.Extent} + */ + this.extent_ = extent; + + /** + * @private + * @type {goog.vec.Mat4.Number} + */ + this.transform_ = transform; + + /** + * @private + * @type {number} + */ + this.viewRotation_ = viewRotation; + + /** + * @private + * @type {?ol.render.canvas.FillState} + */ + this.contextFillState_ = null; + + /** + * @private + * @type {?ol.render.canvas.StrokeState} + */ + this.contextStrokeState_ = null; + + /** + * @private + * @type {?ol.render.canvas.TextState} + */ + this.contextTextState_ = null; + + /** + * @private + * @type {?ol.render.canvas.FillState} + */ + this.fillState_ = null; + + /** + * @private + * @type {?ol.render.canvas.StrokeState} + */ + this.strokeState_ = null; + + /** + * @private + * @type {HTMLCanvasElement|HTMLVideoElement|Image} + */ + this.image_ = null; + + /** + * @private + * @type {number} + */ + this.imageAnchorX_ = 0; + + /** + * @private + * @type {number} + */ + this.imageAnchorY_ = 0; + + /** + * @private + * @type {number} + */ + this.imageHeight_ = 0; + + /** + * @private + * @type {number} + */ + this.imageOpacity_ = 0; + + /** + * @private + * @type {boolean} + */ + this.imageRotateWithView_ = false; + + /** + * @private + * @type {number} + */ + this.imageRotation_ = 0; + + /** + * @private + * @type {number} + */ + this.imageScale_ = 0; + + /** + * @private + * @type {boolean} + */ + this.imageSnapToPixel_ = false; + + /** + * @private + * @type {number} + */ + this.imageWidth_ = 0; + + /** + * @private + * @type {string} + */ + this.text_ = ''; + + /** + * @private + * @type {number} + */ + this.textRotation_ = 0; + + /** + * @private + * @type {number} + */ + this.textScale_ = 0; + + /** + * @private + * @type {?ol.render.canvas.FillState} + */ + this.textFillState_ = null; + + /** + * @private + * @type {?ol.render.canvas.StrokeState} + */ + this.textStrokeState_ = null; + + /** + * @private + * @type {?ol.render.canvas.TextState} + */ + this.textState_ = null; + + /** + * @private + * @type {Array.} + */ + this.pixelCoordinates_ = []; + + /** + * @private + * @type {!goog.vec.Mat4.Number} + */ + this.tmpLocalTransform_ = goog.vec.Mat4.createNumber(); + +}; + + +/** + * @param {Array.} flatCoordinates Flat coordinates. + * @param {number} offset Offset. + * @param {number} end End. + * @param {number} stride Stride. + * @private + */ +ol.render.canvas.Immediate.prototype.drawImages_ = + function(flatCoordinates, offset, end, stride) { + if (goog.isNull(this.image_)) { + return; + } + goog.asserts.assert(offset === 0); + goog.asserts.assert(end == flatCoordinates.length); + var pixelCoordinates = ol.geom.flat.transform2D( + flatCoordinates, 2, this.transform_, this.pixelCoordinates_); + var context = this.context_; + var localTransform = this.tmpLocalTransform_; + var alpha = context.globalAlpha; + if (this.imageOpacity_ != 1) { + context.globalAlpha = alpha * this.imageOpacity_; + } + var rotation = this.imageRotation_; + if (this.imageRotateWithView_) { + rotation += this.viewRotation_; + } + var i, ii; + for (i = 0, ii = pixelCoordinates.length; i < ii; i += 2) { + var x = pixelCoordinates[i] - this.imageAnchorX_; + var y = pixelCoordinates[i + 1] - this.imageAnchorY_; + if (this.imageSnapToPixel_) { + x = (x + 0.5) | 0; + y = (y + 0.5) | 0; + } + if (rotation !== 0 || this.imageScale_ != 1) { + var centerX = x + this.imageAnchorX_; + var centerY = y + this.imageAnchorY_; + ol.vec.Mat4.makeTransform2D(localTransform, + centerX, centerY, this.imageScale_, this.imageScale_, + rotation, -centerX, -centerY); + context.setTransform( + goog.vec.Mat4.getElement(localTransform, 0, 0), + goog.vec.Mat4.getElement(localTransform, 1, 0), + goog.vec.Mat4.getElement(localTransform, 0, 1), + goog.vec.Mat4.getElement(localTransform, 1, 1), + goog.vec.Mat4.getElement(localTransform, 0, 3), + goog.vec.Mat4.getElement(localTransform, 1, 3)); + } + context.drawImage(this.image_, x, y, this.imageWidth_, this.imageHeight_); + } + if (rotation !== 0 || this.imageScale_ != 1) { + context.setTransform(1, 0, 0, 1, 0, 0); + } + if (this.imageOpacity_ != 1) { + context.globalAlpha = alpha; + } +}; + + +/** + * @param {Array.} flatCoordinates Flat coordinates. + * @param {number} offset Offset. + * @param {number} end End. + * @param {number} stride Stride. + * @private + */ +ol.render.canvas.Immediate.prototype.drawText_ = + function(flatCoordinates, offset, end, stride) { + if (goog.isNull(this.textState_) || this.text_ === '') { + return; + } + if (!goog.isNull(this.textFillState_)) { + this.setContextFillState_(this.textFillState_); + } + if (!goog.isNull(this.textStrokeState_)) { + this.setContextStrokeState_(this.textStrokeState_); + } + this.setContextTextState_(this.textState_); + goog.asserts.assert(offset === 0); + goog.asserts.assert(end == flatCoordinates.length); + var pixelCoordinates = ol.geom.flat.transform2D( + flatCoordinates, stride, this.transform_, this.pixelCoordinates_); + var context = this.context_; + for (; offset < end; offset += stride) { + var x = pixelCoordinates[offset]; + var y = pixelCoordinates[offset + 1]; + if (this.textRotation_ !== 0 || this.textScale_ != 1) { + var localTransform = ol.vec.Mat4.makeTransform2D(this.tmpLocalTransform_, + x, y, this.textScale_, this.textScale_, this.textRotation_, -x, -y); + context.setTransform( + goog.vec.Mat4.getElement(localTransform, 0, 0), + goog.vec.Mat4.getElement(localTransform, 1, 0), + goog.vec.Mat4.getElement(localTransform, 0, 1), + goog.vec.Mat4.getElement(localTransform, 1, 1), + goog.vec.Mat4.getElement(localTransform, 0, 3), + goog.vec.Mat4.getElement(localTransform, 1, 3)); + } + if (!goog.isNull(this.textStrokeState_)) { + context.strokeText(this.text_, x, y); + } + if (!goog.isNull(this.textFillState_)) { + context.fillText(this.text_, x, y); + } + } + if (this.textRotation_ !== 0 || this.textScale_ != 1) { + context.setTransform(1, 0, 0, 1, 0, 0); + } +}; + + +/** + * @param {Array.} pixelCoordinates Pixel coordinates. + * @param {number} offset Offset. + * @param {number} end End. + * @param {boolean} close Close. + * @private + * @return {number} end End. + */ +ol.render.canvas.Immediate.prototype.moveToLineTo_ = + function(pixelCoordinates, offset, end, close) { + var context = this.context_; + context.moveTo(pixelCoordinates[offset], pixelCoordinates[offset + 1]); + var i; + for (i = offset + 2; i < end; i += 2) { + context.lineTo(pixelCoordinates[i], pixelCoordinates[i + 1]); + } + if (close) { + context.lineTo(pixelCoordinates[offset], pixelCoordinates[offset + 1]); + } + return end; +}; + + +/** + * @param {Array.} pixelCoordinates Pixel coordinates. + * @param {number} offset Offset. + * @param {Array.} ends Ends. + * @private + * @return {number} End. + */ +ol.render.canvas.Immediate.prototype.drawRings_ = + function(pixelCoordinates, offset, ends) { + var context = this.context_; + var i, ii; + for (i = 0, ii = ends.length; i < ii; ++i) { + offset = this.moveToLineTo_(pixelCoordinates, offset, ends[i], true); + context.closePath(); // FIXME is this needed here? + } + return offset; +}; + + +/** + * @inheritDoc + */ +ol.render.canvas.Immediate.prototype.drawAsync = function(zIndex, callback) { + var zIndexKey = zIndex.toString(); + var callbacks = this.callbacksByZIndex_[zIndexKey]; + if (goog.isDef(callbacks)) { + callbacks.push(callback); + } else { + this.callbacksByZIndex_[zIndexKey] = [callback]; + } +}; + + +/** + * @inheritDoc + */ +ol.render.canvas.Immediate.prototype.drawCircleGeometry = + function(circleGeometry, data) { + if (!ol.extent.intersects(this.extent_, circleGeometry.getExtent())) { + return; + } + if (!goog.isNull(this.fillState_) || !goog.isNull(this.strokeState_)) { + if (!goog.isNull(this.fillState_)) { + this.setContextFillState_(this.fillState_); + } + if (!goog.isNull(this.strokeState_)) { + this.setContextStrokeState_(this.strokeState_); + } + var pixelCoordinates = ol.geom.transformSimpleGeometry2D( + circleGeometry, this.transform_, this.pixelCoordinates_); + var dx = pixelCoordinates[2] - pixelCoordinates[0]; + var dy = pixelCoordinates[3] - pixelCoordinates[1]; + var radius = Math.sqrt(dx * dx + dy * dy); + var context = this.context_; + context.beginPath(); + context.arc( + pixelCoordinates[0], pixelCoordinates[1], radius, 0, 2 * Math.PI); + if (!goog.isNull(this.fillState_)) { + context.fill(); + } + if (!goog.isNull(this.strokeState_)) { + context.stroke(); + } + } + if (this.text_ !== '') { + this.drawText_(circleGeometry.getCenter(), 0, 2, 2); + } +}; + + +/** + * @inheritDoc + */ +ol.render.canvas.Immediate.prototype.drawFeature = function(feature, style) { + var geometry = feature.getGeometry(); + if (goog.isNull(geometry) || + !ol.extent.intersects(this.extent_, geometry.getExtent())) { + return; + } + var zIndex = style.getZIndex(); + if (!goog.isDef(zIndex)) { + zIndex = 0; + } + this.drawAsync(zIndex, function(render) { + render.setFillStrokeStyle(style.getFill(), style.getStroke()); + render.setImageStyle(style.getImage()); + render.setTextStyle(style.getText()); + var renderGeometry = + ol.render.canvas.Immediate.GEOMETRY_RENDERES_[geometry.getType()]; + goog.asserts.assert(goog.isDef(renderGeometry)); + renderGeometry.call(render, geometry, null); + }); +}; + + +/** + * @inheritDoc + */ +ol.render.canvas.Immediate.prototype.drawGeometryCollectionGeometry = + function(geometryCollectionGeometry, data) { + var geometries = geometryCollectionGeometry.getGeometriesArray(); + var i, ii; + for (i = 0, ii = geometries.length; i < ii; ++i) { + var geometry = geometries[i]; + var geometryRenderer = + ol.render.canvas.Immediate.GEOMETRY_RENDERES_[geometry.getType()]; + goog.asserts.assert(goog.isDef(geometryRenderer)); + geometryRenderer.call(this, geometry, data); + } +}; + + +/** + * @inheritDoc + */ +ol.render.canvas.Immediate.prototype.drawPointGeometry = + function(pointGeometry, data) { + var flatCoordinates = pointGeometry.getFlatCoordinates(); + var stride = pointGeometry.getStride(); + if (!goog.isNull(this.image_)) { + this.drawImages_(flatCoordinates, 0, flatCoordinates.length, stride); + } + if (this.text_ !== '') { + this.drawText_(flatCoordinates, 0, flatCoordinates.length, stride); + } +}; + + +/** + * @inheritDoc + */ +ol.render.canvas.Immediate.prototype.drawMultiPointGeometry = + function(multiPointGeometry, data) { + var flatCoordinates = multiPointGeometry.getFlatCoordinates(); + var stride = multiPointGeometry.getStride(); + if (!goog.isNull(this.image_)) { + this.drawImages_(flatCoordinates, 0, flatCoordinates.length, stride); + } + if (this.text_ !== '') { + this.drawText_(flatCoordinates, 0, flatCoordinates.length, stride); + } +}; + + +/** + * @inheritDoc + */ +ol.render.canvas.Immediate.prototype.drawLineStringGeometry = + function(lineStringGeometry, data) { + if (!ol.extent.intersects(this.extent_, lineStringGeometry.getExtent())) { + return; + } + if (!goog.isNull(this.strokeState_)) { + this.setContextStrokeState_(this.strokeState_); + var pixelCoordinates = ol.geom.transformSimpleGeometry2D( + lineStringGeometry, this.transform_, this.pixelCoordinates_); + var context = this.context_; + context.beginPath(); + this.moveToLineTo_(pixelCoordinates, 0, pixelCoordinates.length, false); + context.stroke(); + } + if (this.text_ !== '') { + var flatMidpoint = lineStringGeometry.getFlatMidpoint(); + this.drawText_(flatMidpoint, 0, 2, 2); + } +}; + + +/** + * @inheritDoc + */ +ol.render.canvas.Immediate.prototype.drawMultiLineStringGeometry = + function(multiLineStringGeometry, data) { + var geometryExtent = multiLineStringGeometry.getExtent(); + if (!ol.extent.intersects(this.extent_, geometryExtent)) { + return; + } + var pixelCoordinates; + if (!goog.isNull(this.strokeState_)) { + this.setContextStrokeState_(this.strokeState_); + pixelCoordinates = ol.geom.transformSimpleGeometry2D( + multiLineStringGeometry, this.transform_, this.pixelCoordinates_); + var context = this.context_; + context.beginPath(); + var ends = multiLineStringGeometry.getEnds(); + var offset = 0; + var i, ii; + for (i = 0, ii = ends.length; i < ii; ++i) { + offset = this.moveToLineTo_(pixelCoordinates, offset, ends[i], false); + } + context.stroke(); + } + if (this.text_ !== '') { + var flatMidpoints = multiLineStringGeometry.getFlatMidpoints(); + this.drawText_(flatMidpoints, 0, flatMidpoints.length, 2); + } +}; + + +/** + * @inheritDoc + */ +ol.render.canvas.Immediate.prototype.drawPolygonGeometry = + function(polygonGeometry, data) { + if (!ol.extent.intersects(this.extent_, polygonGeometry.getExtent())) { + return; + } + var pixelCoordinates; + if (!goog.isNull(this.strokeState_) || !goog.isNull(this.fillState_)) { + if (!goog.isNull(this.fillState_)) { + this.setContextFillState_(this.fillState_); + } + if (!goog.isNull(this.strokeState_)) { + this.setContextStrokeState_(this.strokeState_); + } + pixelCoordinates = ol.geom.transformSimpleGeometry2D( + polygonGeometry, this.transform_, this.pixelCoordinates_); + var context = this.context_; + context.beginPath(); + this.drawRings_(pixelCoordinates, 0, polygonGeometry.getEnds()); + if (!goog.isNull(this.fillState_)) { + context.fill(); + } + if (!goog.isNull(this.strokeState_)) { + context.stroke(); + } + } + if (this.text_ !== '') { + var flatInteriorPoint = polygonGeometry.getFlatInteriorPoint(); + this.drawText_(flatInteriorPoint, 0, 2, 2); + } +}; + + +/** + * @inheritDoc + */ +ol.render.canvas.Immediate.prototype.drawMultiPolygonGeometry = + function(multiPolygonGeometry, data) { + if (!ol.extent.intersects(this.extent_, multiPolygonGeometry.getExtent())) { + return; + } + var pixelCoordinates; + if (!goog.isNull(this.strokeState_) || !goog.isNull(this.fillState_)) { + if (!goog.isNull(this.fillState_)) { + this.setContextFillState_(this.fillState_); + } + if (!goog.isNull(this.strokeState_)) { + this.setContextStrokeState_(this.strokeState_); + } + pixelCoordinates = ol.geom.transformSimpleGeometry2D( + multiPolygonGeometry, this.transform_, this.pixelCoordinates_); + var context = this.context_; + var endss = multiPolygonGeometry.getEndss(); + var offset = 0; + var i, ii; + for (i = 0, ii = endss.length; i < ii; ++i) { + var ends = endss[i]; + context.beginPath(); + offset = this.drawRings_(pixelCoordinates, offset, ends); + if (!goog.isNull(this.fillState_)) { + context.fill(); + } + if (!goog.isNull(this.strokeState_)) { + context.stroke(); + } + } + } + if (this.text_ !== '') { + var flatInteriorPoints = multiPolygonGeometry.getFlatInteriorPoints(); + this.drawText_(flatInteriorPoints, 0, flatInteriorPoints.length, 2); + } +}; + + +/** + * @inheritDoc + */ +ol.render.canvas.Immediate.prototype.drawText = goog.abstractMethod; + + +/** + * FIXME: empty description for jsdoc + */ +ol.render.canvas.Immediate.prototype.flush = function() { + /** @type {Array.} */ + var zs = goog.array.map(goog.object.getKeys(this.callbacksByZIndex_), Number); + goog.array.sort(zs); + var i, ii, callbacks, j, jj; + for (i = 0, ii = zs.length; i < ii; ++i) { + callbacks = this.callbacksByZIndex_[zs[i].toString()]; + for (j = 0, jj = callbacks.length; j < jj; ++j) { + callbacks[j](this); + } + } +}; + + +/** + * @param {ol.render.canvas.FillState} fillState Fill state. + * @private + */ +ol.render.canvas.Immediate.prototype.setContextFillState_ = + function(fillState) { + var context = this.context_; + var contextFillState = this.contextFillState_; + if (goog.isNull(contextFillState)) { + context.fillStyle = fillState.fillStyle; + this.contextFillState_ = { + fillStyle: fillState.fillStyle + }; + } else { + if (contextFillState.fillStyle != fillState.fillStyle) { + contextFillState.fillStyle = context.fillStyle = fillState.fillStyle; + } + } +}; + + +/** + * @param {ol.render.canvas.StrokeState} strokeState Stroke state. + * @private + */ +ol.render.canvas.Immediate.prototype.setContextStrokeState_ = + function(strokeState) { + var context = this.context_; + var contextStrokeState = this.contextStrokeState_; + if (goog.isNull(contextStrokeState)) { + context.lineCap = strokeState.lineCap; + if (ol.BrowserFeature.HAS_CANVAS_LINE_DASH) { + context.setLineDash(strokeState.lineDash); + } + context.lineJoin = strokeState.lineJoin; + context.lineWidth = strokeState.lineWidth; + context.miterLimit = strokeState.miterLimit; + context.strokeStyle = strokeState.strokeStyle; + this.contextStrokeState_ = { + lineCap: strokeState.lineCap, + lineDash: strokeState.lineDash, + lineJoin: strokeState.lineJoin, + lineWidth: strokeState.lineWidth, + miterLimit: strokeState.miterLimit, + strokeStyle: strokeState.strokeStyle + }; + } else { + if (contextStrokeState.lineCap != strokeState.lineCap) { + contextStrokeState.lineCap = context.lineCap = strokeState.lineCap; + } + if (ol.BrowserFeature.HAS_CANVAS_LINE_DASH) { + if (!goog.array.equals( + contextStrokeState.lineDash, strokeState.lineDash)) { + context.setLineDash(contextStrokeState.lineDash = strokeState.lineDash); + } + } + if (contextStrokeState.lineJoin != strokeState.lineJoin) { + contextStrokeState.lineJoin = context.lineJoin = strokeState.lineJoin; + } + if (contextStrokeState.lineWidth != strokeState.lineWidth) { + contextStrokeState.lineWidth = context.lineWidth = strokeState.lineWidth; + } + if (contextStrokeState.miterLimit != strokeState.miterLimit) { + contextStrokeState.miterLimit = context.miterLimit = + strokeState.miterLimit; + } + if (contextStrokeState.strokeStyle != strokeState.strokeStyle) { + contextStrokeState.strokeStyle = context.strokeStyle = + strokeState.strokeStyle; + } + } +}; + + +/** + * @param {ol.render.canvas.TextState} textState Text state. + * @private + */ +ol.render.canvas.Immediate.prototype.setContextTextState_ = + function(textState) { + var context = this.context_; + var contextTextState = this.contextTextState_; + if (goog.isNull(contextTextState)) { + context.font = textState.font; + context.textAlign = textState.textAlign; + context.textBaseline = textState.textBaseline; + this.contextTextState_ = { + font: textState.font, + textAlign: textState.textAlign, + textBaseline: textState.textBaseline + }; + } else { + if (contextTextState.font != textState.font) { + contextTextState.font = context.font = textState.font; + } + if (contextTextState.textAlign != textState.textAlign) { + contextTextState.textAlign = context.textAlign = textState.textAlign; + } + if (contextTextState.textBaseline != textState.textBaseline) { + contextTextState.textBaseline = context.textBaseline = + textState.textBaseline; + } + } +}; + + +/** + * @inheritDoc + */ +ol.render.canvas.Immediate.prototype.setFillStrokeStyle = + function(fillStyle, strokeStyle) { + if (goog.isNull(fillStyle)) { + this.fillState_ = null; + } else { + var fillStyleColor = fillStyle.getColor(); + this.fillState_ = { + fillStyle: ol.color.asString(!goog.isNull(fillStyleColor) ? + fillStyleColor : ol.render.canvas.defaultFillStyle) + }; + } + if (goog.isNull(strokeStyle)) { + this.strokeState_ = null; + } else { + var strokeStyleColor = strokeStyle.getColor(); + var strokeStyleLineCap = strokeStyle.getLineCap(); + var strokeStyleLineDash = strokeStyle.getLineDash(); + var strokeStyleLineJoin = strokeStyle.getLineJoin(); + var strokeStyleWidth = strokeStyle.getWidth(); + var strokeStyleMiterLimit = strokeStyle.getMiterLimit(); + this.strokeState_ = { + lineCap: goog.isDef(strokeStyleLineCap) ? + strokeStyleLineCap : ol.render.canvas.defaultLineCap, + lineDash: goog.isDefAndNotNull(strokeStyleLineDash) ? + strokeStyleLineDash : ol.render.canvas.defaultLineDash, + lineJoin: goog.isDef(strokeStyleLineJoin) ? + strokeStyleLineJoin : ol.render.canvas.defaultLineJoin, + lineWidth: this.pixelRatio_ * (goog.isDef(strokeStyleWidth) ? + strokeStyleWidth : ol.render.canvas.defaultLineWidth), + miterLimit: goog.isDef(strokeStyleMiterLimit) ? + strokeStyleMiterLimit : ol.render.canvas.defaultMiterLimit, + strokeStyle: ol.color.asString(!goog.isNull(strokeStyleColor) ? + strokeStyleColor : ol.render.canvas.defaultStrokeStyle) + }; + } +}; + + +/** + * @inheritDoc + */ +ol.render.canvas.Immediate.prototype.setImageStyle = function(imageStyle) { + if (goog.isNull(imageStyle)) { + this.image_ = null; + } else { + var imageAnchor = imageStyle.getAnchor(); + // FIXME pixel ratio + var imageImage = imageStyle.getImage(1); + var imageOpacity = imageStyle.getOpacity(); + var imageRotateWithView = imageStyle.getRotateWithView(); + var imageRotation = imageStyle.getRotation(); + var imageScale = imageStyle.getScale(); + var imageSize = imageStyle.getSize(); + var imageSnapToPixel = imageStyle.getSnapToPixel(); + goog.asserts.assert(!goog.isNull(imageAnchor)); + goog.asserts.assert(!goog.isNull(imageImage)); + goog.asserts.assert(!goog.isNull(imageSize)); + this.imageAnchorX_ = imageAnchor[0]; + this.imageAnchorY_ = imageAnchor[1]; + this.imageHeight_ = imageSize[1]; + this.image_ = imageImage; + this.imageOpacity_ = goog.isDef(imageOpacity) ? imageOpacity : 1; + this.imageRotateWithView_ = goog.isDef(imageRotateWithView) ? + imageRotateWithView : false; + this.imageRotation_ = goog.isDef(imageRotation) ? imageRotation : 0; + this.imageScale_ = goog.isDef(imageScale) ? imageScale : 1; + this.imageSnapToPixel_ = goog.isDef(imageSnapToPixel) ? + imageSnapToPixel : false; + this.imageWidth_ = imageSize[0]; + } +}; + + +/** + * @inheritDoc + */ +ol.render.canvas.Immediate.prototype.setTextStyle = function(textStyle) { + if (goog.isNull(textStyle)) { + this.text_ = ''; + } else { + var textFillStyle = textStyle.getFill(); + if (goog.isNull(textFillStyle)) { + this.textFillState_ = null; + } else { + var textFillStyleColor = textFillStyle.getColor(); + this.textFillState_ = { + fillStyle: ol.color.asString(!goog.isNull(textFillStyleColor) ? + textFillStyleColor : ol.render.canvas.defaultFillStyle) + }; + } + var textStrokeStyle = textStyle.getStroke(); + if (goog.isNull(textStrokeStyle)) { + this.textStrokeState_ = null; + } else { + var textStrokeStyleColor = textStrokeStyle.getColor(); + var textStrokeStyleLineCap = textStrokeStyle.getLineCap(); + var textStrokeStyleLineDash = textStrokeStyle.getLineDash(); + var textStrokeStyleLineJoin = textStrokeStyle.getLineJoin(); + var textStrokeStyleWidth = textStrokeStyle.getWidth(); + var textStrokeStyleMiterLimit = textStrokeStyle.getMiterLimit(); + this.textStrokeState_ = { + lineCap: goog.isDef(textStrokeStyleLineCap) ? + textStrokeStyleLineCap : ol.render.canvas.defaultLineCap, + lineDash: goog.isDefAndNotNull(textStrokeStyleLineDash) ? + textStrokeStyleLineDash : ol.render.canvas.defaultLineDash, + lineJoin: goog.isDef(textStrokeStyleLineJoin) ? + textStrokeStyleLineJoin : ol.render.canvas.defaultLineJoin, + lineWidth: this.pixelRatio_ * (goog.isDef(textStrokeStyleWidth) ? + textStrokeStyleWidth : ol.render.canvas.defaultLineWidth), + miterLimit: goog.isDef(textStrokeStyleMiterLimit) ? + textStrokeStyleMiterLimit : ol.render.canvas.defaultMiterLimit, + strokeStyle: ol.color.asString(!goog.isNull(textStrokeStyleColor) ? + textStrokeStyleColor : ol.render.canvas.defaultStrokeStyle) + }; + } + var textFont = textStyle.getFont(); + var textRotation = textStyle.getRotation(); + var textScale = textStyle.getScale(); + var textText = textStyle.getText(); + var textTextAlign = textStyle.getTextAlign(); + var textTextBaseline = textStyle.getTextBaseline(); + this.textState_ = { + font: goog.isDef(textFont) ? + textFont : ol.render.canvas.defaultFont, + textAlign: goog.isDef(textTextAlign) ? + textTextAlign : ol.render.canvas.defaultTextAlign, + textBaseline: goog.isDef(textTextBaseline) ? + textTextBaseline : ol.render.canvas.defaultTextBaseline + }; + this.text_ = goog.isDef(textText) ? textText : ''; + this.textRotation_ = goog.isDef(textRotation) ? textRotation : 0; + this.textScale_ = this.pixelRatio_ * (goog.isDef(textScale) ? + textScale : 1); + } +}; + + +/** + * @const + * @private + * @type {Object.} + */ +ol.render.canvas.Immediate.GEOMETRY_RENDERES_ = { + 'Point': ol.render.canvas.Immediate.prototype.drawPointGeometry, + 'LineString': ol.render.canvas.Immediate.prototype.drawLineStringGeometry, + 'Polygon': ol.render.canvas.Immediate.prototype.drawPolygonGeometry, + 'MultiPoint': ol.render.canvas.Immediate.prototype.drawMultiPointGeometry, + 'MultiLineString': + ol.render.canvas.Immediate.prototype.drawMultiLineStringGeometry, + 'MultiPolygon': ol.render.canvas.Immediate.prototype.drawMultiPolygonGeometry, + 'GeometryCollection': + ol.render.canvas.Immediate.prototype.drawGeometryCollectionGeometry, + 'Circle': ol.render.canvas.Immediate.prototype.drawCircleGeometry +}; diff --git a/float-no-zero/ol/ol/render/canvas/canvasreplay.js b/float-no-zero/ol/ol/render/canvas/canvasreplay.js new file mode 100644 index 0000000000..15fef376c8 --- /dev/null +++ b/float-no-zero/ol/ol/render/canvas/canvasreplay.js @@ -0,0 +1,1961 @@ +// FIXME decide default snapToPixel behaviour +// FIXME add option to apply snapToPixel to all coordinates? +// FIXME can eliminate empty set styles and strokes (when all geoms skipped) + +goog.provide('ol.render.canvas.ReplayGroup'); + +goog.require('goog.array'); +goog.require('goog.asserts'); +goog.require('goog.dom'); +goog.require('goog.dom.TagName'); +goog.require('goog.object'); +goog.require('goog.vec.Mat4'); +goog.require('ol.BrowserFeature'); +goog.require('ol.array'); +goog.require('ol.color'); +goog.require('ol.extent'); +goog.require('ol.extent.Relationship'); +goog.require('ol.geom.flat'); +goog.require('ol.geom.simplify'); +goog.require('ol.render.IReplayGroup'); +goog.require('ol.render.IVectorContext'); +goog.require('ol.render.canvas'); +goog.require('ol.vec.Mat4'); + + +/** + * @enum {number} + */ +ol.render.canvas.Instruction = { + BEGIN_GEOMETRY: 0, + BEGIN_PATH: 1, + CIRCLE: 2, + CLOSE_PATH: 3, + DRAW_IMAGE: 4, + DRAW_TEXT: 5, + END_GEOMETRY: 6, + FILL: 7, + MOVE_TO_LINE_TO: 8, + SET_FILL_STYLE: 9, + SET_STROKE_STYLE: 10, + SET_TEXT_STYLE: 11, + STROKE: 12 +}; + + + +/** + * @constructor + * @implements {ol.render.IVectorContext} + * @param {number} tolerance Tolerance. + * @param {ol.Extent} maxExtent Maximum extent. + * @protected + * @struct + */ +ol.render.canvas.Replay = function(tolerance, maxExtent) { + + /** + * @protected + * @type {number} + */ + this.tolerance = tolerance; + + /** + * @protected + * @type {ol.Extent} + */ + this.maxExtent = maxExtent; + + /** + * @private + * @type {Array.<*>} + */ + this.beginGeometryInstruction1_ = null; + + /** + * @private + * @type {Array.<*>} + */ + this.beginGeometryInstruction2_ = null; + + /** + * @protected + * @type {Array.<*>} + */ + this.instructions = []; + + /** + * @protected + * @type {Array.} + */ + this.coordinates = []; + + /** + * @private + * @type {goog.vec.Mat4.Number} + */ + this.renderedTransform_ = goog.vec.Mat4.createNumber(); + + /** + * @protected + * @type {Array.<*>} + */ + this.hitDetectionInstructions = []; + + /** + * @private + * @type {Array.} + */ + this.pixelCoordinates_ = []; + + /** + * @private + * @type {ol.Extent} + */ + this.extent_ = ol.extent.createEmpty(); + + /** + * @private + * @type {!goog.vec.Mat4.Number} + */ + this.tmpLocalTransform_ = goog.vec.Mat4.createNumber(); + +}; + + +/** + * @param {Array.} flatCoordinates Flat coordinates. + * @param {number} offset Offset. + * @param {number} end End. + * @param {number} stride Stride. + * @param {boolean} close Close. + * @protected + * @return {number} My end. + */ +ol.render.canvas.Replay.prototype.appendFlatCoordinates = + function(flatCoordinates, offset, end, stride, close) { + + var myEnd = this.coordinates.length; + var extent = this.maxExtent; + var lastCoord = [flatCoordinates[offset], flatCoordinates[offset + 1]]; + var nextCoord = [NaN, NaN]; + var skipped = true; + + var i, lastRel, nextRel; + for (i = offset + stride; i < end; i += stride) { + nextCoord[0] = flatCoordinates[i]; + nextCoord[1] = flatCoordinates[i + 1]; + nextRel = ol.extent.coordinateRelationship(extent, nextCoord); + if (nextRel !== lastRel) { + if (skipped) { + this.coordinates[myEnd++] = lastCoord[0]; + this.coordinates[myEnd++] = lastCoord[1]; + } + this.coordinates[myEnd++] = nextCoord[0]; + this.coordinates[myEnd++] = nextCoord[1]; + skipped = false; + } else if (nextRel === ol.extent.Relationship.INTERSECTING) { + this.coordinates[myEnd++] = nextCoord[0]; + this.coordinates[myEnd++] = nextCoord[1]; + skipped = false; + } else { + skipped = true; + } + lastCoord[0] = nextCoord[0]; + lastCoord[1] = nextCoord[1]; + lastRel = nextRel; + } + + if (close) { + this.coordinates[myEnd++] = flatCoordinates[offset]; + this.coordinates[myEnd++] = flatCoordinates[offset + 1]; + } + return myEnd; +}; + + +/** + * @protected + * @param {ol.geom.Geometry} geometry Geometry. + */ +ol.render.canvas.Replay.prototype.beginGeometry = function(geometry) { + this.beginGeometryInstruction1_ = + [ol.render.canvas.Instruction.BEGIN_GEOMETRY, geometry, 0]; + this.instructions.push(this.beginGeometryInstruction1_); + this.beginGeometryInstruction2_ = + [ol.render.canvas.Instruction.BEGIN_GEOMETRY, geometry, 0]; + this.hitDetectionInstructions.push(this.beginGeometryInstruction2_); +}; + + +/** + * @private + * @param {CanvasRenderingContext2D} context Context. + * @param {number} pixelRatio Pixel ratio. + * @param {goog.vec.Mat4.Number} transform Transform. + * @param {number} viewRotation View rotation. + * @param {function(ol.geom.Geometry): boolean} renderGeometryFunction Render + * geometry function. + * @param {Array.<*>} instructions Instructions array. + * @param {function(ol.geom.Geometry, Object): T|undefined} geometryCallback + * Geometry callback. + * @return {T|undefined} Callback result. + * @template T + */ +ol.render.canvas.Replay.prototype.replay_ = function( + context, pixelRatio, transform, viewRotation, renderGeometryFunction, + instructions, geometryCallback) { + /** @type {Array.} */ + var pixelCoordinates; + if (ol.vec.Mat4.equals2D(transform, this.renderedTransform_)) { + pixelCoordinates = this.pixelCoordinates_; + } else { + pixelCoordinates = ol.geom.flat.transform2D( + this.coordinates, 2, transform, this.pixelCoordinates_); + goog.vec.Mat4.setFromArray(this.renderedTransform_, transform); + goog.asserts.assert(pixelCoordinates === this.pixelCoordinates_); + } + var i = 0; // instruction index + var ii = instructions.length; // end of instructions + var d = 0; // data index + var dd; // end of per-instruction data + var localTransform = this.tmpLocalTransform_; + while (i < ii) { + var instruction = instructions[i]; + var type = /** @type {ol.render.canvas.Instruction} */ (instruction[0]); + var fill, geometry, stroke, text, x, y; + switch (type) { + case ol.render.canvas.Instruction.BEGIN_GEOMETRY: + geometry = /** @type {ol.geom.Geometry} */ (instruction[1]); + if (renderGeometryFunction(geometry)) { + ++i; + } else { + i = /** @type {number} */ (instruction[2]); + } + break; + case ol.render.canvas.Instruction.BEGIN_PATH: + context.beginPath(); + ++i; + break; + case ol.render.canvas.Instruction.CIRCLE: + var x1 = pixelCoordinates[d]; + var y1 = pixelCoordinates[d + 1]; + var x2 = pixelCoordinates[d + 2]; + var y2 = pixelCoordinates[d + 3]; + var dx = x2 - x1; + var dy = y2 - y1; + var r = Math.sqrt(dx * dx + dy * dy); + context.arc(x1, y1, r, 0, 2 * Math.PI, true); + d += 4; + ++i; + break; + case ol.render.canvas.Instruction.CLOSE_PATH: + context.closePath(); + ++i; + break; + case ol.render.canvas.Instruction.DRAW_IMAGE: + goog.asserts.assert(goog.isNumber(instruction[1])); + d = /** @type {number} */ (instruction[1]); + goog.asserts.assert(goog.isNumber(instruction[2])); + dd = /** @type {number} */ (instruction[2]); + var image = /** @type {HTMLCanvasElement|HTMLVideoElement|Image} */ + (instruction[3]); + // Remaining arguments in DRAW_IMAGE are in alphabetical order + var anchorX = /** @type {number} */ (instruction[4]) * pixelRatio; + var anchorY = /** @type {number} */ (instruction[5]) * pixelRatio; + var height = /** @type {number} */ (instruction[6]) * pixelRatio; + var opacity = /** @type {number} */ (instruction[7]); + var rotateWithView = /** @type {boolean} */ (instruction[8]); + var rotation = /** @type {number} */ (instruction[9]); + var scale = /** @type {number} */ (instruction[10]); + var snapToPixel = /** @type {boolean|undefined} */ (instruction[11]); + var width = /** @type {number} */ (instruction[12]) * pixelRatio; + if (rotateWithView) { + rotation += viewRotation; + } + for (; d < dd; d += 2) { + x = pixelCoordinates[d] - anchorX; + y = pixelCoordinates[d + 1] - anchorY; + if (snapToPixel) { + x = (x + 0.5) | 0; + y = (y + 0.5) | 0; + } + if (scale != 1 || rotation !== 0) { + var centerX = x + anchorX; + var centerY = y + anchorY; + ol.vec.Mat4.makeTransform2D( + localTransform, centerX, centerY, scale, scale, + rotation, -centerX, -centerY); + context.setTransform( + goog.vec.Mat4.getElement(localTransform, 0, 0), + goog.vec.Mat4.getElement(localTransform, 1, 0), + goog.vec.Mat4.getElement(localTransform, 0, 1), + goog.vec.Mat4.getElement(localTransform, 1, 1), + goog.vec.Mat4.getElement(localTransform, 0, 3), + goog.vec.Mat4.getElement(localTransform, 1, 3)); + } + var alpha = context.globalAlpha; + if (opacity != 1) { + context.globalAlpha = alpha * opacity; + } + + context.drawImage(image, x, y, width, height); + + if (opacity != 1) { + context.globalAlpha = alpha; + } + if (scale != 1 || rotation !== 0) { + context.setTransform(1, 0, 0, 1, 0, 0); + } + } + ++i; + break; + case ol.render.canvas.Instruction.DRAW_TEXT: + goog.asserts.assert(goog.isNumber(instruction[1])); + d = /** @type {number} */ (instruction[1]); + goog.asserts.assert(goog.isNumber(instruction[2])); + dd = /** @type {number} */ (instruction[2]); + goog.asserts.assert(goog.isString(instruction[3])); + text = /** @type {string} */ (instruction[3]); + goog.asserts.assert(goog.isNumber(instruction[4])); + rotation = /** @type {number} */ (instruction[4]); + goog.asserts.assert(goog.isNumber(instruction[5])); + scale = /** @type {number} */ (instruction[5]) * pixelRatio; + goog.asserts.assert(goog.isBoolean(instruction[6])); + fill = /** @type {boolean} */ (instruction[6]); + goog.asserts.assert(goog.isBoolean(instruction[7])); + stroke = /** @type {boolean} */ (instruction[7]); + for (; d < dd; d += 2) { + x = pixelCoordinates[d]; + y = pixelCoordinates[d + 1]; + if (scale != 1 || rotation !== 0) { + ol.vec.Mat4.makeTransform2D( + localTransform, x, y, scale, scale, rotation, -x, -y); + context.setTransform( + goog.vec.Mat4.getElement(localTransform, 0, 0), + goog.vec.Mat4.getElement(localTransform, 1, 0), + goog.vec.Mat4.getElement(localTransform, 0, 1), + goog.vec.Mat4.getElement(localTransform, 1, 1), + goog.vec.Mat4.getElement(localTransform, 0, 3), + goog.vec.Mat4.getElement(localTransform, 1, 3)); + } + if (stroke) { + context.strokeText(text, x, y); + } + if (fill) { + context.fillText(text, x, y); + } + if (scale != 1 || rotation !== 0) { + context.setTransform(1, 0, 0, 1, 0, 0); + } + } + ++i; + break; + case ol.render.canvas.Instruction.END_GEOMETRY: + if (goog.isDef(geometryCallback)) { + geometry = /** @type {ol.geom.Geometry} */ (instruction[1]); + var data = /** @type {Object} */ (instruction[2]); + var result = geometryCallback(geometry, data); + if (result) { + return result; + } + } + ++i; + break; + case ol.render.canvas.Instruction.FILL: + context.fill(); + ++i; + break; + case ol.render.canvas.Instruction.MOVE_TO_LINE_TO: + goog.asserts.assert(goog.isNumber(instruction[1])); + d = /** @type {number} */ (instruction[1]); + goog.asserts.assert(goog.isNumber(instruction[2])); + dd = /** @type {number} */ (instruction[2]); + context.moveTo(pixelCoordinates[d], pixelCoordinates[d + 1]); + for (d += 2; d < dd; d += 2) { + context.lineTo(pixelCoordinates[d], pixelCoordinates[d + 1]); + } + ++i; + break; + case ol.render.canvas.Instruction.SET_FILL_STYLE: + goog.asserts.assert(goog.isString(instruction[1])); + context.fillStyle = /** @type {string} */ (instruction[1]); + ++i; + break; + case ol.render.canvas.Instruction.SET_STROKE_STYLE: + goog.asserts.assert(goog.isString(instruction[1])); + goog.asserts.assert(goog.isNumber(instruction[2])); + goog.asserts.assert(goog.isString(instruction[3])); + goog.asserts.assert(goog.isString(instruction[4])); + goog.asserts.assert(goog.isNumber(instruction[5])); + goog.asserts.assert(!goog.isNull(instruction[6])); + context.strokeStyle = /** @type {string} */ (instruction[1]); + context.lineWidth = /** @type {number} */ (instruction[2]) * pixelRatio; + context.lineCap = /** @type {string} */ (instruction[3]); + context.lineJoin = /** @type {string} */ (instruction[4]); + context.miterLimit = /** @type {number} */ (instruction[5]); + if (ol.BrowserFeature.HAS_CANVAS_LINE_DASH) { + context.setLineDash(/** @type {Array.} */ (instruction[6])); + } + ++i; + break; + case ol.render.canvas.Instruction.SET_TEXT_STYLE: + goog.asserts.assert(goog.isString(instruction[1])); + goog.asserts.assert(goog.isString(instruction[2])); + goog.asserts.assert(goog.isString(instruction[3])); + context.font = /** @type {string} */ (instruction[1]); + context.textAlign = /** @type {string} */ (instruction[2]); + context.textBaseline = /** @type {string} */ (instruction[3]); + ++i; + break; + case ol.render.canvas.Instruction.STROKE: + context.stroke(); + ++i; + break; + default: + goog.asserts.fail(); + ++i; // consume the instruction anyway, to avoid an infinite loop + break; + } + } + // assert that all instructions were consumed + goog.asserts.assert(i == instructions.length); + return undefined; +}; + + +/** + * @param {CanvasRenderingContext2D} context Context. + * @param {number} pixelRatio Pixel ratio. + * @param {goog.vec.Mat4.Number} transform Transform. + * @param {number} viewRotation View rotation. + * @param {function(ol.geom.Geometry): boolean} renderGeometryFunction Render + * geometry function. + * @return {T|undefined} Callback result. + * @template T + */ +ol.render.canvas.Replay.prototype.replay = function( + context, pixelRatio, transform, viewRotation, renderGeometryFunction) { + var instructions = this.instructions; + return this.replay_(context, pixelRatio, transform, viewRotation, + renderGeometryFunction, instructions, undefined); +}; + + +/** + * @param {CanvasRenderingContext2D} context Context. + * @param {goog.vec.Mat4.Number} transform Transform. + * @param {number} viewRotation View rotation. + * @param {function(ol.geom.Geometry): boolean} renderGeometryFunction Render + * geometry function. + * @param {function(ol.geom.Geometry, Object): T=} opt_geometryCallback + * Geometry callback. + * @return {T|undefined} Callback result. + * @template T + */ +ol.render.canvas.Replay.prototype.replayHitDetection = function( + context, transform, viewRotation, renderGeometryFunction, + opt_geometryCallback) { + var instructions = this.hitDetectionInstructions; + return this.replay_(context, 1, transform, viewRotation, + renderGeometryFunction, instructions, opt_geometryCallback); +}; + + +/** + * @private + */ +ol.render.canvas.Replay.prototype.reverseHitDetectionInstructions_ = + function() { + var hitDetectionInstructions = this.hitDetectionInstructions; + // step 1 - reverse array + hitDetectionInstructions.reverse(); + // step 2 - reverse instructions within geometry blocks + var i; + var n = hitDetectionInstructions.length; + var instruction; + var type; + var begin = -1; + for (i = 0; i < n; ++i) { + instruction = hitDetectionInstructions[i]; + type = /** @type {ol.render.canvas.Instruction} */ (instruction[0]); + if (type == ol.render.canvas.Instruction.END_GEOMETRY) { + goog.asserts.assert(begin == -1); + begin = i; + } else if (type == ol.render.canvas.Instruction.BEGIN_GEOMETRY) { + goog.asserts.assert(begin >= 0); + ol.array.reverseSubArray(this.hitDetectionInstructions, begin, i); + begin = -1; + } + } +}; + + +/** + * @inheritDoc + */ +ol.render.canvas.Replay.prototype.drawAsync = goog.abstractMethod; + + +/** + * @inheritDoc + */ +ol.render.canvas.Replay.prototype.drawCircleGeometry = goog.abstractMethod; + + +/** + * @inheritDoc + */ +ol.render.canvas.Replay.prototype.drawFeature = goog.abstractMethod; + + +/** + * @inheritDoc + */ +ol.render.canvas.Replay.prototype.drawGeometryCollectionGeometry = + goog.abstractMethod; + + +/** + * @inheritDoc + */ +ol.render.canvas.Replay.prototype.drawLineStringGeometry = goog.abstractMethod; + + +/** + * @inheritDoc + */ +ol.render.canvas.Replay.prototype.drawMultiLineStringGeometry = + goog.abstractMethod; + + +/** + * @inheritDoc + */ +ol.render.canvas.Replay.prototype.drawPointGeometry = goog.abstractMethod; + + +/** + * @inheritDoc + */ +ol.render.canvas.Replay.prototype.drawMultiPointGeometry = goog.abstractMethod; + + +/** + * @inheritDoc + */ +ol.render.canvas.Replay.prototype.drawPolygonGeometry = goog.abstractMethod; + + +/** + * @inheritDoc + */ +ol.render.canvas.Replay.prototype.drawMultiPolygonGeometry = + goog.abstractMethod; + + +/** + * @inheritDoc + */ +ol.render.canvas.Replay.prototype.drawText = goog.abstractMethod; + + +/** + * @param {ol.geom.Geometry} geometry Geometry. + * @param {Object} data Opaque data object. + */ +ol.render.canvas.Replay.prototype.endGeometry = + function(geometry, data) { + goog.asserts.assert(!goog.isNull(this.beginGeometryInstruction1_)); + this.beginGeometryInstruction1_[2] = this.instructions.length; + this.beginGeometryInstruction1_ = null; + goog.asserts.assert(!goog.isNull(this.beginGeometryInstruction2_)); + this.beginGeometryInstruction2_[2] = this.hitDetectionInstructions.length; + this.beginGeometryInstruction2_ = null; + var endGeometryInstruction = + [ol.render.canvas.Instruction.END_GEOMETRY, geometry, data]; + this.instructions.push(endGeometryInstruction); + this.hitDetectionInstructions.push(endGeometryInstruction); +}; + + +/** + * FIXME empty description for jsdoc + */ +ol.render.canvas.Replay.prototype.finish = goog.nullFunction; + + +/** + * @return {ol.Extent} Extent. + */ +ol.render.canvas.Replay.prototype.getExtent = function() { + return this.extent_; +}; + + +/** + * @inheritDoc + */ +ol.render.canvas.Replay.prototype.setFillStrokeStyle = goog.abstractMethod; + + +/** + * @inheritDoc + */ +ol.render.canvas.Replay.prototype.setImageStyle = goog.abstractMethod; + + +/** + * @inheritDoc + */ +ol.render.canvas.Replay.prototype.setTextStyle = goog.abstractMethod; + + + +/** + * @constructor + * @extends {ol.render.canvas.Replay} + * @param {number} tolerance Tolerance. + * @param {ol.Extent} maxExtent Maximum extent. + * @protected + * @struct + */ +ol.render.canvas.ImageReplay = function(tolerance, maxExtent) { + + goog.base(this, tolerance, maxExtent); + + /** + * @private + * @type {HTMLCanvasElement|HTMLVideoElement|Image} + */ + this.hitDetectionImage_ = null; + + /** + * @private + * @type {HTMLCanvasElement|HTMLVideoElement|Image} + */ + this.image_ = null; + + /** + * @private + * @type {number|undefined} + */ + this.anchorX_ = undefined; + + /** + * @private + * @type {number|undefined} + */ + this.anchorY_ = undefined; + + /** + * @private + * @type {number|undefined} + */ + this.height_ = undefined; + + /** + * @private + * @type {number|undefined} + */ + this.opacity_ = undefined; + + /** + * @private + * @type {boolean|undefined} + */ + this.rotateWithView_ = undefined; + + /** + * @private + * @type {number|undefined} + */ + this.rotation_ = undefined; + + /** + * @private + * @type {number|undefined} + */ + this.scale_ = undefined; + + /** + * @private + * @type {boolean|undefined} + */ + this.snapToPixel_ = undefined; + + /** + * @private + * @type {number|undefined} + */ + this.width_ = undefined; + +}; +goog.inherits(ol.render.canvas.ImageReplay, ol.render.canvas.Replay); + + +/** + * @param {Array.} flatCoordinates Flat coordinates. + * @param {number} offset Offset. + * @param {number} end End. + * @param {number} stride Stride. + * @private + * @return {number} My end. + */ +ol.render.canvas.ImageReplay.prototype.drawCoordinates_ = + function(flatCoordinates, offset, end, stride) { + return this.appendFlatCoordinates( + flatCoordinates, offset, end, stride, false); +}; + + +/** + * @inheritDoc + */ +ol.render.canvas.ImageReplay.prototype.drawPointGeometry = + function(pointGeometry, data) { + if (goog.isNull(this.image_)) { + return; + } + goog.asserts.assert(goog.isDef(this.anchorX_)); + goog.asserts.assert(goog.isDef(this.anchorY_)); + goog.asserts.assert(goog.isDef(this.height_)); + goog.asserts.assert(goog.isDef(this.opacity_)); + goog.asserts.assert(goog.isDef(this.rotateWithView_)); + goog.asserts.assert(goog.isDef(this.rotation_)); + goog.asserts.assert(goog.isDef(this.scale_)); + goog.asserts.assert(goog.isDef(this.width_)); + ol.extent.extend(this.extent_, pointGeometry.getExtent()); + this.beginGeometry(pointGeometry); + var flatCoordinates = pointGeometry.getFlatCoordinates(); + var stride = pointGeometry.getStride(); + var myBegin = this.coordinates.length; + var myEnd = this.drawCoordinates_( + flatCoordinates, 0, flatCoordinates.length, stride); + this.instructions.push([ + ol.render.canvas.Instruction.DRAW_IMAGE, myBegin, myEnd, this.image_, + // Remaining arguments to DRAW_IMAGE are in alphabetical order + this.anchorX_, this.anchorY_, this.height_, this.opacity_, + this.rotateWithView_, this.rotation_, this.scale_, this.snapToPixel_, + this.width_ + ]); + this.hitDetectionInstructions.push([ + ol.render.canvas.Instruction.DRAW_IMAGE, myBegin, myEnd, + this.hitDetectionImage_, + // Remaining arguments to DRAW_IMAGE are in alphabetical order + this.anchorX_, this.anchorY_, this.height_, this.opacity_, + this.rotateWithView_, this.rotation_, this.scale_, this.snapToPixel_, + this.width_ + ]); + this.endGeometry(pointGeometry, data); +}; + + +/** + * @inheritDoc + */ +ol.render.canvas.ImageReplay.prototype.drawMultiPointGeometry = + function(multiPointGeometry, data) { + if (goog.isNull(this.image_)) { + return; + } + goog.asserts.assert(goog.isDef(this.anchorX_)); + goog.asserts.assert(goog.isDef(this.anchorY_)); + goog.asserts.assert(goog.isDef(this.height_)); + goog.asserts.assert(goog.isDef(this.opacity_)); + goog.asserts.assert(goog.isDef(this.rotateWithView_)); + goog.asserts.assert(goog.isDef(this.rotation_)); + goog.asserts.assert(goog.isDef(this.scale_)); + goog.asserts.assert(goog.isDef(this.width_)); + ol.extent.extend(this.extent_, multiPointGeometry.getExtent()); + this.beginGeometry(multiPointGeometry); + var flatCoordinates = multiPointGeometry.getFlatCoordinates(); + var stride = multiPointGeometry.getStride(); + var myBegin = this.coordinates.length; + var myEnd = this.drawCoordinates_( + flatCoordinates, 0, flatCoordinates.length, stride); + this.instructions.push([ + ol.render.canvas.Instruction.DRAW_IMAGE, myBegin, myEnd, this.image_, + // Remaining arguments to DRAW_IMAGE are in alphabetical order + this.anchorX_, this.anchorY_, this.height_, this.opacity_, + this.rotateWithView_, this.rotation_, this.scale_, this.snapToPixel_, + this.width_ + ]); + this.hitDetectionInstructions.push([ + ol.render.canvas.Instruction.DRAW_IMAGE, myBegin, myEnd, + this.hitDetectionImage_, + // Remaining arguments to DRAW_IMAGE are in alphabetical order + this.anchorX_, this.anchorY_, this.height_, this.opacity_, + this.rotateWithView_, this.rotation_, this.scale_, this.snapToPixel_, + this.width_ + ]); + this.endGeometry(multiPointGeometry, data); +}; + + +/** + * @inheritDoc + */ +ol.render.canvas.ImageReplay.prototype.finish = function() { + this.reverseHitDetectionInstructions_(); + // FIXME this doesn't really protect us against further calls to draw*Geometry + this.anchorX_ = undefined; + this.anchorY_ = undefined; + this.hitDetectionImage_ = null; + this.image_ = null; + this.height_ = undefined; + this.scale_ = undefined; + this.opacity_ = undefined; + this.rotateWithView_ = undefined; + this.rotation_ = undefined; + this.snapToPixel_ = undefined; + this.width_ = undefined; +}; + + +/** + * @inheritDoc + */ +ol.render.canvas.ImageReplay.prototype.setImageStyle = function(imageStyle) { + goog.asserts.assert(!goog.isNull(imageStyle)); + var anchor = imageStyle.getAnchor(); + goog.asserts.assert(!goog.isNull(anchor)); + var size = imageStyle.getSize(); + goog.asserts.assert(!goog.isNull(size)); + var hitDetectionImage = imageStyle.getHitDetectionImage(1); + goog.asserts.assert(!goog.isNull(hitDetectionImage)); + var image = imageStyle.getImage(1); + goog.asserts.assert(!goog.isNull(image)); + this.anchorX_ = anchor[0]; + this.anchorY_ = anchor[1]; + this.hitDetectionImage_ = hitDetectionImage; + this.image_ = image; + this.height_ = size[1]; + this.opacity_ = imageStyle.getOpacity(); + this.rotateWithView_ = imageStyle.getRotateWithView(); + this.rotation_ = imageStyle.getRotation(); + this.scale_ = imageStyle.getScale(); + this.snapToPixel_ = imageStyle.getSnapToPixel(); + this.width_ = size[0]; +}; + + + +/** + * @constructor + * @extends {ol.render.canvas.Replay} + * @param {number} tolerance Tolerance. + * @param {ol.Extent} maxExtent Maximum extent. + * @protected + * @struct + */ +ol.render.canvas.LineStringReplay = function(tolerance, maxExtent) { + + goog.base(this, tolerance, maxExtent); + + /** + * @private + * @type {{currentStrokeStyle: (string|undefined), + * currentLineCap: (string|undefined), + * currentLineDash: Array., + * currentLineJoin: (string|undefined), + * currentLineWidth: (number|undefined), + * currentMiterLimit: (number|undefined), + * lastStroke: number, + * strokeStyle: (string|undefined), + * lineCap: (string|undefined), + * lineDash: Array., + * lineJoin: (string|undefined), + * lineWidth: (number|undefined), + * miterLimit: (number|undefined)}|null} + */ + this.state_ = { + currentStrokeStyle: undefined, + currentLineCap: undefined, + currentLineDash: null, + currentLineJoin: undefined, + currentLineWidth: undefined, + currentMiterLimit: undefined, + lastStroke: 0, + strokeStyle: undefined, + lineCap: undefined, + lineDash: null, + lineJoin: undefined, + lineWidth: undefined, + miterLimit: undefined + }; + +}; +goog.inherits(ol.render.canvas.LineStringReplay, ol.render.canvas.Replay); + + +/** + * @param {Array.} flatCoordinates Flat coordinates. + * @param {number} offset Offset. + * @param {number} end End. + * @param {number} stride Stride. + * @private + * @return {number} end. + */ +ol.render.canvas.LineStringReplay.prototype.drawFlatCoordinates_ = + function(flatCoordinates, offset, end, stride) { + var myBegin = this.coordinates.length; + var myEnd = this.appendFlatCoordinates( + flatCoordinates, offset, end, stride, false); + var moveToLineToInstruction = + [ol.render.canvas.Instruction.MOVE_TO_LINE_TO, myBegin, myEnd]; + this.instructions.push(moveToLineToInstruction); + this.hitDetectionInstructions.push(moveToLineToInstruction); + return end; +}; + + +/** + * @private + */ +ol.render.canvas.LineStringReplay.prototype.setStrokeStyle_ = function() { + var state = this.state_; + var strokeStyle = state.strokeStyle; + var lineCap = state.lineCap; + var lineDash = state.lineDash; + var lineJoin = state.lineJoin; + var lineWidth = state.lineWidth; + var miterLimit = state.miterLimit; + goog.asserts.assert(goog.isDef(strokeStyle)); + goog.asserts.assert(goog.isDef(lineCap)); + goog.asserts.assert(!goog.isNull(lineDash)); + goog.asserts.assert(goog.isDef(lineJoin)); + goog.asserts.assert(goog.isDef(lineWidth)); + goog.asserts.assert(goog.isDef(miterLimit)); + if (state.currentStrokeStyle != strokeStyle || + state.currentLineCap != lineCap || + !goog.array.equals(state.currentLineDash, lineDash) || + state.currentLineJoin != lineJoin || + state.currentLineWidth != lineWidth || + state.currentMiterLimit != miterLimit) { + if (state.lastStroke != this.coordinates.length) { + this.instructions.push( + [ol.render.canvas.Instruction.STROKE]); + state.lastStroke = this.coordinates.length; + } + this.instructions.push( + [ol.render.canvas.Instruction.SET_STROKE_STYLE, + strokeStyle, lineWidth, lineCap, lineJoin, miterLimit, lineDash], + [ol.render.canvas.Instruction.BEGIN_PATH]); + state.currentStrokeStyle = strokeStyle; + state.currentLineCap = lineCap; + state.currentLineDash = lineDash; + state.currentLineJoin = lineJoin; + state.currentLineWidth = lineWidth; + state.currentMiterLimit = miterLimit; + } +}; + + +/** + * @inheritDoc + */ +ol.render.canvas.LineStringReplay.prototype.drawLineStringGeometry = + function(lineStringGeometry, data) { + var state = this.state_; + goog.asserts.assert(!goog.isNull(state)); + var strokeStyle = state.strokeStyle; + var lineWidth = state.lineWidth; + if (!goog.isDef(strokeStyle) || !goog.isDef(lineWidth)) { + return; + } + ol.extent.extend(this.extent_, lineStringGeometry.getExtent()); + this.setStrokeStyle_(); + this.beginGeometry(lineStringGeometry); + this.hitDetectionInstructions.push( + [ol.render.canvas.Instruction.SET_STROKE_STYLE, + state.strokeStyle, state.lineWidth, state.lineCap, state.lineJoin, + state.miterLimit, state.lineDash], + [ol.render.canvas.Instruction.BEGIN_PATH]); + var flatCoordinates = lineStringGeometry.getFlatCoordinates(); + var stride = lineStringGeometry.getStride(); + this.drawFlatCoordinates_( + flatCoordinates, 0, flatCoordinates.length, stride); + this.hitDetectionInstructions.push([ol.render.canvas.Instruction.STROKE]); + this.endGeometry(lineStringGeometry, data); +}; + + +/** + * @inheritDoc + */ +ol.render.canvas.LineStringReplay.prototype.drawMultiLineStringGeometry = + function(multiLineStringGeometry, data) { + var state = this.state_; + goog.asserts.assert(!goog.isNull(state)); + var strokeStyle = state.strokeStyle; + var lineWidth = state.lineWidth; + if (!goog.isDef(strokeStyle) || !goog.isDef(lineWidth)) { + return; + } + ol.extent.extend(this.extent_, multiLineStringGeometry.getExtent()); + this.setStrokeStyle_(); + this.beginGeometry(multiLineStringGeometry); + this.hitDetectionInstructions.push( + [ol.render.canvas.Instruction.SET_STROKE_STYLE, + state.strokeStyle, state.lineWidth, state.lineCap, state.lineJoin, + state.miterLimit, state.lineDash], + [ol.render.canvas.Instruction.BEGIN_PATH]); + var ends = multiLineStringGeometry.getEnds(); + var flatCoordinates = multiLineStringGeometry.getFlatCoordinates(); + var stride = multiLineStringGeometry.getStride(); + var offset = 0; + var i, ii; + for (i = 0, ii = ends.length; i < ii; ++i) { + offset = this.drawFlatCoordinates_( + flatCoordinates, offset, ends[i], stride); + } + this.hitDetectionInstructions.push([ol.render.canvas.Instruction.STROKE]); + this.endGeometry(multiLineStringGeometry, data); +}; + + +/** + * @inheritDoc + */ +ol.render.canvas.LineStringReplay.prototype.finish = function() { + var state = this.state_; + goog.asserts.assert(!goog.isNull(state)); + if (state.lastStroke != this.coordinates.length) { + this.instructions.push([ol.render.canvas.Instruction.STROKE]); + } + this.reverseHitDetectionInstructions_(); + this.state_ = null; +}; + + +/** + * @inheritDoc + */ +ol.render.canvas.LineStringReplay.prototype.setFillStrokeStyle = + function(fillStyle, strokeStyle) { + goog.asserts.assert(!goog.isNull(this.state_)); + goog.asserts.assert(goog.isNull(fillStyle)); + goog.asserts.assert(!goog.isNull(strokeStyle)); + var strokeStyleColor = strokeStyle.getColor(); + this.state_.strokeStyle = ol.color.asString(!goog.isNull(strokeStyleColor) ? + strokeStyleColor : ol.render.canvas.defaultStrokeStyle); + var strokeStyleLineCap = strokeStyle.getLineCap(); + this.state_.lineCap = goog.isDef(strokeStyleLineCap) ? + strokeStyleLineCap : ol.render.canvas.defaultLineCap; + var strokeStyleLineDash = strokeStyle.getLineDash(); + this.state_.lineDash = !goog.isNull(strokeStyleLineDash) ? + strokeStyleLineDash : ol.render.canvas.defaultLineDash; + var strokeStyleLineJoin = strokeStyle.getLineJoin(); + this.state_.lineJoin = goog.isDef(strokeStyleLineJoin) ? + strokeStyleLineJoin : ol.render.canvas.defaultLineJoin; + var strokeStyleWidth = strokeStyle.getWidth(); + this.state_.lineWidth = goog.isDef(strokeStyleWidth) ? + strokeStyleWidth : ol.render.canvas.defaultLineWidth; + var strokeStyleMiterLimit = strokeStyle.getMiterLimit(); + this.state_.miterLimit = goog.isDef(strokeStyleMiterLimit) ? + strokeStyleMiterLimit : ol.render.canvas.defaultMiterLimit; +}; + + + +/** + * @constructor + * @extends {ol.render.canvas.Replay} + * @param {number} tolerance Tolerance. + * @param {ol.Extent} maxExtent Maximum extent. + * @protected + * @struct + */ +ol.render.canvas.PolygonReplay = function(tolerance, maxExtent) { + + goog.base(this, tolerance, maxExtent); + + /** + * @private + * @type {{currentFillStyle: (string|undefined), + * currentStrokeStyle: (string|undefined), + * currentLineCap: (string|undefined), + * currentLineDash: Array., + * currentLineJoin: (string|undefined), + * currentLineWidth: (number|undefined), + * currentMiterLimit: (number|undefined), + * fillStyle: (string|undefined), + * strokeStyle: (string|undefined), + * lineCap: (string|undefined), + * lineDash: Array., + * lineJoin: (string|undefined), + * lineWidth: (number|undefined), + * miterLimit: (number|undefined)}|null} + */ + this.state_ = { + currentFillStyle: undefined, + currentStrokeStyle: undefined, + currentLineCap: undefined, + currentLineDash: null, + currentLineJoin: undefined, + currentLineWidth: undefined, + currentMiterLimit: undefined, + fillStyle: undefined, + strokeStyle: undefined, + lineCap: undefined, + lineDash: null, + lineJoin: undefined, + lineWidth: undefined, + miterLimit: undefined + }; + +}; +goog.inherits(ol.render.canvas.PolygonReplay, ol.render.canvas.Replay); + + +/** + * @param {Array.} flatCoordinates Flat coordinates. + * @param {number} offset Offset. + * @param {Array.} ends Ends. + * @param {number} stride Stride. + * @private + * @return {number} End. + */ +ol.render.canvas.PolygonReplay.prototype.drawFlatCoordinatess_ = + function(flatCoordinates, offset, ends, stride) { + var state = this.state_; + var beginPathInstruction = [ol.render.canvas.Instruction.BEGIN_PATH]; + this.instructions.push(beginPathInstruction); + this.hitDetectionInstructions.push(beginPathInstruction); + var i, ii; + for (i = 0, ii = ends.length; i < ii; ++i) { + var end = ends[i]; + var myBegin = this.coordinates.length; + var myEnd = this.appendFlatCoordinates( + flatCoordinates, offset, end, stride, true); + var moveToLineToInstruction = + [ol.render.canvas.Instruction.MOVE_TO_LINE_TO, myBegin, myEnd]; + var closePathInstruction = [ol.render.canvas.Instruction.CLOSE_PATH]; + this.instructions.push(moveToLineToInstruction, closePathInstruction); + this.hitDetectionInstructions.push(moveToLineToInstruction, + closePathInstruction); + offset = end; + } + // FIXME is it quicker to fill and stroke each polygon individually, + // FIXME or all polygons together? + var fillInstruction = [ol.render.canvas.Instruction.FILL]; + this.hitDetectionInstructions.push(fillInstruction); + if (goog.isDef(state.fillStyle)) { + this.instructions.push(fillInstruction); + } + if (goog.isDef(state.strokeStyle)) { + goog.asserts.assert(goog.isDef(state.lineWidth)); + var strokeInstruction = [ol.render.canvas.Instruction.STROKE]; + this.instructions.push(strokeInstruction); + this.hitDetectionInstructions.push(strokeInstruction); + } + return offset; +}; + + +/** + * @inheritDoc + */ +ol.render.canvas.PolygonReplay.prototype.drawCircleGeometry = + function(circleGeometry, data) { + var state = this.state_; + goog.asserts.assert(!goog.isNull(state)); + var fillStyle = state.fillStyle; + var strokeStyle = state.strokeStyle; + if (!goog.isDef(fillStyle) && !goog.isDef(strokeStyle)) { + return; + } + if (goog.isDef(strokeStyle)) { + goog.asserts.assert(goog.isDef(state.lineWidth)); + } + ol.extent.extend(this.extent_, circleGeometry.getExtent()); + this.setFillStrokeStyles_(); + this.beginGeometry(circleGeometry); + // always fill the circle for hit detection + this.hitDetectionInstructions.push( + [ol.render.canvas.Instruction.SET_FILL_STYLE, + ol.color.asString(ol.render.canvas.defaultFillStyle)]); + if (goog.isDef(state.strokeStyle)) { + this.hitDetectionInstructions.push( + [ol.render.canvas.Instruction.SET_STROKE_STYLE, + state.strokeStyle, state.lineWidth, state.lineCap, state.lineJoin, + state.miterLimit, state.lineDash]); + } + var flatCoordinates = circleGeometry.getFlatCoordinates(); + var stride = circleGeometry.getStride(); + this.appendFlatCoordinates( + flatCoordinates, 0, flatCoordinates.length, stride, false); + var beginPathInstruction = [ol.render.canvas.Instruction.BEGIN_PATH]; + var circleInstruction = [ol.render.canvas.Instruction.CIRCLE]; + this.instructions.push(beginPathInstruction, circleInstruction); + this.hitDetectionInstructions.push(beginPathInstruction, circleInstruction); + this.endGeometry(circleGeometry, data); + var fillInstruction = [ol.render.canvas.Instruction.FILL]; + this.hitDetectionInstructions.push(fillInstruction); + if (goog.isDef(state.fillStyle)) { + this.instructions.push(fillInstruction); + } + if (goog.isDef(state.strokeStyle)) { + goog.asserts.assert(goog.isDef(state.lineWidth)); + var strokeInstruction = [ol.render.canvas.Instruction.STROKE]; + this.instructions.push(strokeInstruction); + this.hitDetectionInstructions.push(strokeInstruction); + } +}; + + +/** + * @inheritDoc + */ +ol.render.canvas.PolygonReplay.prototype.drawPolygonGeometry = + function(polygonGeometry, data) { + var state = this.state_; + goog.asserts.assert(!goog.isNull(state)); + var fillStyle = state.fillStyle; + var strokeStyle = state.strokeStyle; + if (!goog.isDef(fillStyle) && !goog.isDef(strokeStyle)) { + return; + } + if (goog.isDef(strokeStyle)) { + goog.asserts.assert(goog.isDef(state.lineWidth)); + } + ol.extent.extend(this.extent_, polygonGeometry.getExtent()); + this.setFillStrokeStyles_(); + this.beginGeometry(polygonGeometry); + // always fill the polygon for hit detection + this.hitDetectionInstructions.push( + [ol.render.canvas.Instruction.SET_FILL_STYLE, + ol.color.asString(ol.render.canvas.defaultFillStyle)]); + if (goog.isDef(state.strokeStyle)) { + this.hitDetectionInstructions.push( + [ol.render.canvas.Instruction.SET_STROKE_STYLE, + state.strokeStyle, state.lineWidth, state.lineCap, state.lineJoin, + state.miterLimit, state.lineDash]); + } + var ends = polygonGeometry.getEnds(); + var flatCoordinates = polygonGeometry.getOrientedFlatCoordinates(); + var stride = polygonGeometry.getStride(); + this.drawFlatCoordinatess_(flatCoordinates, 0, ends, stride); + this.endGeometry(polygonGeometry, data); +}; + + +/** + * @inheritDoc + */ +ol.render.canvas.PolygonReplay.prototype.drawMultiPolygonGeometry = + function(multiPolygonGeometry, data) { + var state = this.state_; + goog.asserts.assert(!goog.isNull(state)); + var fillStyle = state.fillStyle; + var strokeStyle = state.strokeStyle; + if (!goog.isDef(fillStyle) && !goog.isDef(strokeStyle)) { + return; + } + if (goog.isDef(strokeStyle)) { + goog.asserts.assert(goog.isDef(state.lineWidth)); + } + ol.extent.extend(this.extent_, multiPolygonGeometry.getExtent()); + this.setFillStrokeStyles_(); + this.beginGeometry(multiPolygonGeometry); + // always fill the multi-polygon for hit detection + this.hitDetectionInstructions.push( + [ol.render.canvas.Instruction.SET_FILL_STYLE, + ol.color.asString(ol.render.canvas.defaultFillStyle)]); + if (goog.isDef(state.strokeStyle)) { + this.hitDetectionInstructions.push( + [ol.render.canvas.Instruction.SET_STROKE_STYLE, + state.strokeStyle, state.lineWidth, state.lineCap, state.lineJoin, + state.miterLimit, state.lineDash]); + } + var endss = multiPolygonGeometry.getEndss(); + var flatCoordinates = multiPolygonGeometry.getOrientedFlatCoordinates(); + var stride = multiPolygonGeometry.getStride(); + var offset = 0; + var i, ii; + for (i = 0, ii = endss.length; i < ii; ++i) { + offset = this.drawFlatCoordinatess_( + flatCoordinates, offset, endss[i], stride); + } + this.endGeometry(multiPolygonGeometry, data); +}; + + +/** + * @inheritDoc + */ +ol.render.canvas.PolygonReplay.prototype.finish = function() { + goog.asserts.assert(!goog.isNull(this.state_)); + this.reverseHitDetectionInstructions_(); + this.state_ = null; + // We want to preserve topology when drawing polygons. Polygons are + // simplified using quantization and point elimination. However, we might + // have received a mix of quantized and non-quantized geometries, so ensure + // that all are quantized by quantizing all coordinates in the batch. + var tolerance = this.tolerance; + if (tolerance !== 0) { + var coordinates = this.coordinates; + var i, ii; + for (i = 0, ii = coordinates.length; i < ii; ++i) { + coordinates[i] = ol.geom.simplify.snap(coordinates[i], tolerance); + } + } +}; + + +/** + * @inheritDoc + */ +ol.render.canvas.PolygonReplay.prototype.setFillStrokeStyle = + function(fillStyle, strokeStyle) { + goog.asserts.assert(!goog.isNull(this.state_)); + goog.asserts.assert(!goog.isNull(fillStyle) || !goog.isNull(strokeStyle)); + var state = this.state_; + if (!goog.isNull(fillStyle)) { + var fillStyleColor = fillStyle.getColor(); + state.fillStyle = ol.color.asString(!goog.isNull(fillStyleColor) ? + fillStyleColor : ol.render.canvas.defaultFillStyle); + } else { + state.fillStyle = undefined; + } + if (!goog.isNull(strokeStyle)) { + var strokeStyleColor = strokeStyle.getColor(); + state.strokeStyle = ol.color.asString(!goog.isNull(strokeStyleColor) ? + strokeStyleColor : ol.render.canvas.defaultStrokeStyle); + var strokeStyleLineCap = strokeStyle.getLineCap(); + state.lineCap = goog.isDef(strokeStyleLineCap) ? + strokeStyleLineCap : ol.render.canvas.defaultLineCap; + var strokeStyleLineDash = strokeStyle.getLineDash(); + state.lineDash = !goog.isNull(strokeStyleLineDash) ? + strokeStyleLineDash.slice() : ol.render.canvas.defaultLineDash; + var strokeStyleLineJoin = strokeStyle.getLineJoin(); + state.lineJoin = goog.isDef(strokeStyleLineJoin) ? + strokeStyleLineJoin : ol.render.canvas.defaultLineJoin; + var strokeStyleWidth = strokeStyle.getWidth(); + state.lineWidth = goog.isDef(strokeStyleWidth) ? + strokeStyleWidth : ol.render.canvas.defaultLineWidth; + var strokeStyleMiterLimit = strokeStyle.getMiterLimit(); + state.miterLimit = goog.isDef(strokeStyleMiterLimit) ? + strokeStyleMiterLimit : ol.render.canvas.defaultMiterLimit; + } else { + state.strokeStyle = undefined; + state.lineCap = undefined; + state.lineDash = null; + state.lineJoin = undefined; + state.lineWidth = undefined; + state.miterLimit = undefined; + } +}; + + +/** + * @private + */ +ol.render.canvas.PolygonReplay.prototype.setFillStrokeStyles_ = function() { + var state = this.state_; + var fillStyle = state.fillStyle; + var strokeStyle = state.strokeStyle; + var lineCap = state.lineCap; + var lineDash = state.lineDash; + var lineJoin = state.lineJoin; + var lineWidth = state.lineWidth; + var miterLimit = state.miterLimit; + if (goog.isDef(fillStyle) && state.currentFillStyle != fillStyle) { + this.instructions.push( + [ol.render.canvas.Instruction.SET_FILL_STYLE, fillStyle]); + state.currentFillStyle = state.fillStyle; + } + if (goog.isDef(strokeStyle)) { + goog.asserts.assert(goog.isDef(lineCap)); + goog.asserts.assert(!goog.isNull(lineDash)); + goog.asserts.assert(goog.isDef(lineJoin)); + goog.asserts.assert(goog.isDef(lineWidth)); + goog.asserts.assert(goog.isDef(miterLimit)); + if (state.currentStrokeStyle != strokeStyle || + state.currentLineCap != lineCap || + state.currentLineDash != lineDash || + state.currentLineJoin != lineJoin || + state.currentLineWidth != lineWidth || + state.currentMiterLimit != miterLimit) { + this.instructions.push( + [ol.render.canvas.Instruction.SET_STROKE_STYLE, + strokeStyle, lineWidth, lineCap, lineJoin, miterLimit, lineDash]); + state.currentStrokeStyle = strokeStyle; + state.currentLineCap = lineCap; + state.currentLineDash = lineDash; + state.currentLineJoin = lineJoin; + state.currentLineWidth = lineWidth; + state.currentMiterLimit = miterLimit; + } + } +}; + + + +/** + * @constructor + * @extends {ol.render.canvas.Replay} + * @param {number} tolerance Tolerance. + * @param {ol.Extent} maxExtent Maximum extent. + * @protected + * @struct + */ +ol.render.canvas.TextReplay = function(tolerance, maxExtent) { + + goog.base(this, tolerance, maxExtent); + + /** + * @private + * @type {?ol.render.canvas.FillState} + */ + this.replayFillState_ = null; + + /** + * @private + * @type {?ol.render.canvas.StrokeState} + */ + this.replayStrokeState_ = null; + + /** + * @private + * @type {?ol.render.canvas.TextState} + */ + this.replayTextState_ = null; + + /** + * @private + * @type {string} + */ + this.text_ = ''; + + /** + * @private + * @type {number} + */ + this.textRotation_ = 0; + + /** + * @private + * @type {number} + */ + this.textScale_ = 0; + + /** + * @private + * @type {?ol.render.canvas.FillState} + */ + this.textFillState_ = null; + + /** + * @private + * @type {?ol.render.canvas.StrokeState} + */ + this.textStrokeState_ = null; + + /** + * @private + * @type {?ol.render.canvas.TextState} + */ + this.textState_ = null; + +}; +goog.inherits(ol.render.canvas.TextReplay, ol.render.canvas.Replay); + + +/** + * @inheritDoc + */ +ol.render.canvas.TextReplay.prototype.drawText = + function(flatCoordinates, offset, end, stride, geometry, data) { + if (this.text_ === '' || + goog.isNull(this.textState_) || + (goog.isNull(this.textFillState_) && + goog.isNull(this.textStrokeState_))) { + return; + } + ol.extent.extendFlatCoordinates( + this.extent_, flatCoordinates, offset, end, stride); + if (!goog.isNull(this.textFillState_)) { + this.setReplayFillState_(this.textFillState_); + } + if (!goog.isNull(this.textStrokeState_)) { + this.setReplayStrokeState_(this.textStrokeState_); + } + this.setReplayTextState_(this.textState_); + this.beginGeometry(geometry); + var myBegin = this.coordinates.length; + var myEnd = + this.appendFlatCoordinates(flatCoordinates, offset, end, stride, false); + var fill = !goog.isNull(this.textFillState_); + var stroke = !goog.isNull(this.textStrokeState_); + var drawTextInstruction = [ + ol.render.canvas.Instruction.DRAW_TEXT, myBegin, myEnd, this.text_, + this.textRotation_, this.textScale_, fill, stroke]; + this.instructions.push(drawTextInstruction); + this.hitDetectionInstructions.push(drawTextInstruction); + this.endGeometry(geometry, data); +}; + + +/** + * @param {ol.render.canvas.FillState} fillState Fill state. + * @private + */ +ol.render.canvas.TextReplay.prototype.setReplayFillState_ = + function(fillState) { + var replayFillState = this.replayFillState_; + if (!goog.isNull(replayFillState) && + replayFillState.fillStyle == fillState.fillStyle) { + return; + } + var setFillStyleInstruction = + [ol.render.canvas.Instruction.SET_FILL_STYLE, fillState.fillStyle]; + this.instructions.push(setFillStyleInstruction); + this.hitDetectionInstructions.push(setFillStyleInstruction); + if (goog.isNull(replayFillState)) { + this.replayFillState_ = { + fillStyle: fillState.fillStyle + }; + } else { + replayFillState.fillStyle = fillState.fillStyle; + } +}; + + +/** + * @param {ol.render.canvas.StrokeState} strokeState Stroke state. + * @private + */ +ol.render.canvas.TextReplay.prototype.setReplayStrokeState_ = + function(strokeState) { + var replayStrokeState = this.replayStrokeState_; + if (!goog.isNull(replayStrokeState) && + replayStrokeState.lineCap == strokeState.lineCap && + replayStrokeState.lineDash == strokeState.lineDash && + replayStrokeState.lineJoin == strokeState.lineJoin && + replayStrokeState.lineWidth == strokeState.lineWidth && + replayStrokeState.miterLimit == strokeState.miterLimit && + replayStrokeState.strokeStyle == strokeState.strokeStyle) { + return; + } + var setStrokeStyleInstruction = [ + ol.render.canvas.Instruction.SET_STROKE_STYLE, strokeState.strokeStyle, + strokeState.lineWidth, strokeState.lineCap, strokeState.lineJoin, + strokeState.miterLimit, strokeState.lineDash + ]; + this.instructions.push(setStrokeStyleInstruction); + this.hitDetectionInstructions.push(setStrokeStyleInstruction); + if (goog.isNull(replayStrokeState)) { + this.replayStrokeState_ = { + lineCap: strokeState.lineCap, + lineDash: strokeState.lineDash, + lineJoin: strokeState.lineJoin, + lineWidth: strokeState.lineWidth, + miterLimit: strokeState.miterLimit, + strokeStyle: strokeState.strokeStyle + }; + } else { + replayStrokeState.lineCap = strokeState.lineCap; + replayStrokeState.lineDash = strokeState.lineDash; + replayStrokeState.lineJoin = strokeState.lineJoin; + replayStrokeState.lineWidth = strokeState.lineWidth; + replayStrokeState.miterLimit = strokeState.miterLimit; + replayStrokeState.strokeStyle = strokeState.strokeStyle; + } +}; + + +/** + * @param {ol.render.canvas.TextState} textState Text state. + * @private + */ +ol.render.canvas.TextReplay.prototype.setReplayTextState_ = + function(textState) { + var replayTextState = this.replayTextState_; + if (!goog.isNull(replayTextState) && + replayTextState.font == textState.font && + replayTextState.textAlign == textState.textAlign && + replayTextState.textBaseline == textState.textBaseline) { + return; + } + var setTextStyleInstruction = [ol.render.canvas.Instruction.SET_TEXT_STYLE, + textState.font, textState.textAlign, textState.textBaseline]; + this.instructions.push(setTextStyleInstruction); + this.hitDetectionInstructions.push(setTextStyleInstruction); + if (goog.isNull(replayTextState)) { + this.replayTextState_ = { + font: textState.font, + textAlign: textState.textAlign, + textBaseline: textState.textBaseline + }; + } else { + replayTextState.font = textState.font; + replayTextState.textAlign = textState.textAlign; + replayTextState.textBaseline = textState.textBaseline; + } +}; + + +/** + * @inheritDoc + */ +ol.render.canvas.TextReplay.prototype.setTextStyle = function(textStyle) { + if (goog.isNull(textStyle)) { + this.text_ = ''; + } else { + var textFillStyle = textStyle.getFill(); + if (goog.isNull(textFillStyle)) { + this.textFillState_ = null; + } else { + var textFillStyleColor = textFillStyle.getColor(); + var fillStyle = ol.color.asString(!goog.isNull(textFillStyleColor) ? + textFillStyleColor : ol.render.canvas.defaultFillStyle); + if (goog.isNull(this.textFillState_)) { + this.textFillState_ = { + fillStyle: fillStyle + }; + } else { + var textFillState = this.textFillState_; + textFillState.fillStyle = fillStyle; + } + } + var textStrokeStyle = textStyle.getStroke(); + if (goog.isNull(textStrokeStyle)) { + this.textStrokeState_ = null; + } else { + var textStrokeStyleColor = textStrokeStyle.getColor(); + var textStrokeStyleLineCap = textStrokeStyle.getLineCap(); + var textStrokeStyleLineDash = textStrokeStyle.getLineDash(); + var textStrokeStyleLineJoin = textStrokeStyle.getLineJoin(); + var textStrokeStyleWidth = textStrokeStyle.getWidth(); + var textStrokeStyleMiterLimit = textStrokeStyle.getMiterLimit(); + var lineCap = goog.isDef(textStrokeStyleLineCap) ? + textStrokeStyleLineCap : ol.render.canvas.defaultLineCap; + var lineDash = goog.isDefAndNotNull(textStrokeStyleLineDash) ? + textStrokeStyleLineDash.slice() : ol.render.canvas.defaultLineDash; + var lineJoin = goog.isDef(textStrokeStyleLineJoin) ? + textStrokeStyleLineJoin : ol.render.canvas.defaultLineJoin; + var lineWidth = goog.isDef(textStrokeStyleWidth) ? + textStrokeStyleWidth : ol.render.canvas.defaultLineWidth; + var miterLimit = goog.isDef(textStrokeStyleMiterLimit) ? + textStrokeStyleMiterLimit : ol.render.canvas.defaultMiterLimit; + var strokeStyle = ol.color.asString(!goog.isNull(textStrokeStyleColor) ? + textStrokeStyleColor : ol.render.canvas.defaultStrokeStyle); + if (goog.isNull(this.textStrokeState_)) { + this.textStrokeState_ = { + lineCap: lineCap, + lineDash: lineDash, + lineJoin: lineJoin, + lineWidth: lineWidth, + miterLimit: miterLimit, + strokeStyle: strokeStyle + }; + } else { + var textStrokeState = this.textStrokeState_; + textStrokeState.lineCap = lineCap; + textStrokeState.lineDash = lineDash; + textStrokeState.lineJoin = lineJoin; + textStrokeState.lineWidth = lineWidth; + textStrokeState.miterLimit = miterLimit; + textStrokeState.strokeStyle = strokeStyle; + } + } + var textFont = textStyle.getFont(); + var textRotation = textStyle.getRotation(); + var textScale = textStyle.getScale(); + var textText = textStyle.getText(); + var textTextAlign = textStyle.getTextAlign(); + var textTextBaseline = textStyle.getTextBaseline(); + var font = goog.isDef(textFont) ? + textFont : ol.render.canvas.defaultFont; + var textAlign = goog.isDef(textTextAlign) ? + textTextAlign : ol.render.canvas.defaultTextAlign; + var textBaseline = goog.isDef(textTextBaseline) ? + textTextBaseline : ol.render.canvas.defaultTextBaseline; + if (goog.isNull(this.textState_)) { + this.textState_ = { + font: font, + textAlign: textAlign, + textBaseline: textBaseline + }; + } else { + var textState = this.textState_; + textState.font = font; + textState.textAlign = textAlign; + textState.textBaseline = textBaseline; + } + this.text_ = goog.isDef(textText) ? textText : ''; + this.textRotation_ = goog.isDef(textRotation) ? textRotation : 0; + this.textScale_ = goog.isDef(textScale) ? textScale : 1; + } +}; + + + +/** + * @constructor + * @implements {ol.render.IReplayGroup} + * @param {number} tolerance Tolerance. + * @param {ol.Extent} maxExtent Max extent. + * @struct + */ +ol.render.canvas.ReplayGroup = function(tolerance, maxExtent) { + + /** + * @private + * @type {number} + */ + this.tolerance_ = tolerance; + + /** + * @private + * @type {ol.Extent} + */ + this.maxExtent_ = maxExtent; + + /** + * @private + * @type {Object.>} + */ + this.replaysByZIndex_ = {}; + + /** + * @type {HTMLCanvasElement} + */ + var hitDetectionCanvas = /** @type {HTMLCanvasElement} */ + (goog.dom.createElement(goog.dom.TagName.CANVAS)); + hitDetectionCanvas.width = 1; + hitDetectionCanvas.height = 1; + + /** + * @private + * @type {CanvasRenderingContext2D} + */ + this.hitDetectionContext_ = /** @type {CanvasRenderingContext2D} */ + (hitDetectionCanvas.getContext('2d')); + + /** + * @private + * @type {!goog.vec.Mat4.Number} + */ + this.hitDetectionTransform_ = goog.vec.Mat4.createNumber(); + +}; + + +/** + * @param {CanvasRenderingContext2D} context Context. + * @param {ol.Extent} extent Extent. + * @param {number} pixelRatio Pixel ratio. + * @param {goog.vec.Mat4.Number} transform Transform. + * @param {number} viewRotation View rotation. + * @param {function(ol.geom.Geometry): boolean} renderGeometryFunction Render + * geometry function. + * @return {T|undefined} Callback result. + * @template T + */ +ol.render.canvas.ReplayGroup.prototype.replay = function(context, extent, + pixelRatio, transform, viewRotation, renderGeometryFunction) { + /** @type {Array.} */ + var zs = goog.array.map(goog.object.getKeys(this.replaysByZIndex_), Number); + goog.array.sort(zs); + return this.replay_(zs, context, extent, pixelRatio, transform, + viewRotation, renderGeometryFunction); +}; + + +/** + * @private + * @param {Array.} zs Z-indices array. + * @param {CanvasRenderingContext2D} context Context. + * @param {ol.Extent} extent Extent. + * @param {goog.vec.Mat4.Number} transform Transform. + * @param {number} viewRotation View rotation. + * @param {function(ol.geom.Geometry): boolean} renderGeometryFunction Render + * geometry function. + * @param {function(ol.geom.Geometry, Object): T} geometryCallback Geometry + * callback. + * @return {T|undefined} Callback result. + * @template T + */ +ol.render.canvas.ReplayGroup.prototype.replayHitDetection_ = function( + zs, context, extent, transform, viewRotation, renderGeometryFunction, + geometryCallback) { + var i, ii, replays, replayType, replay, result; + for (i = 0, ii = zs.length; i < ii; ++i) { + replays = this.replaysByZIndex_[zs[i].toString()]; + for (replayType in replays) { + replay = replays[replayType]; + if (ol.extent.intersects(extent, replay.getExtent())) { + result = replay.replayHitDetection(context, transform, viewRotation, + renderGeometryFunction, geometryCallback); + if (result) { + return result; + } + } + } + } + return undefined; +}; + + +/** + * @private + * @param {Array.} zs Z-indices array. + * @param {CanvasRenderingContext2D} context Context. + * @param {ol.Extent} extent Extent. + * @param {number} pixelRatio Pixel ratio. + * @param {goog.vec.Mat4.Number} transform Transform. + * @param {number} viewRotation View rotation. + * @param {function(ol.geom.Geometry): boolean} renderGeometryFunction Render + * geometry function. + * @return {T|undefined} Callback result. + * @template T + */ +ol.render.canvas.ReplayGroup.prototype.replay_ = function( + zs, context, extent, pixelRatio, transform, viewRotation, + renderGeometryFunction) { + + var maxExtent = this.maxExtent_; + var minX = maxExtent[0]; + var minY = maxExtent[1]; + var maxX = maxExtent[2]; + var maxY = maxExtent[3]; + var flatClipCoords = ol.geom.flat.transform2D( + [minX, minY, minX, maxY, maxX, maxY, maxX, minY], 2, transform); + context.save(); + context.beginPath(); + context.moveTo(flatClipCoords[0], flatClipCoords[1]); + context.lineTo(flatClipCoords[2], flatClipCoords[3]); + context.lineTo(flatClipCoords[4], flatClipCoords[5]); + context.lineTo(flatClipCoords[6], flatClipCoords[7]); + context.closePath(); + context.clip(); + + var i, ii, j, jj, replays, replayType, replay, result; + for (i = 0, ii = zs.length; i < ii; ++i) { + replays = this.replaysByZIndex_[zs[i].toString()]; + for (j = 0, jj = ol.render.REPLAY_ORDER.length; j < jj; ++j) { + replay = replays[ol.render.REPLAY_ORDER[j]]; + if (goog.isDef(replay) && + ol.extent.intersects(extent, replay.getExtent())) { + result = replay.replay(context, pixelRatio, transform, viewRotation, + renderGeometryFunction); + if (result) { + return result; + } + } + } + } + + context.restore(); + return undefined; +}; + + +/** + * @param {ol.Extent} extent Extent. + * @param {number} resolution Resolution. + * @param {number} rotation Rotation. + * @param {ol.Coordinate} coordinate Coordinate. + * @param {function(ol.geom.Geometry): boolean} renderGeometryFunction Render + * geometry function. + * @param {function(ol.geom.Geometry, Object): T} callback Geometry callback. + * @return {T|undefined} Callback result. + * @template T + */ +ol.render.canvas.ReplayGroup.prototype.forEachGeometryAtPixel = function( + extent, resolution, rotation, coordinate, + renderGeometryFunction, callback) { + + var transform = this.hitDetectionTransform_; + ol.vec.Mat4.makeTransform2D(transform, 0.5, 0.5, + 1 / resolution, -1 / resolution, -rotation, + -coordinate[0], -coordinate[1]); + + /** @type {Array.} */ + var zs = goog.array.map(goog.object.getKeys(this.replaysByZIndex_), Number); + goog.array.sort(zs, function(a, b) { return b - a; }); + + var context = this.hitDetectionContext_; + context.clearRect(0, 0, 1, 1); + + return this.replayHitDetection_(zs, context, extent, transform, + rotation, renderGeometryFunction, + /** + * @param {ol.geom.Geometry} geometry Geometry. + * @param {Object} data Opaque data object. + * @return {?} Callback result. + */ + function(geometry, data) { + var imageData = context.getImageData(0, 0, 1, 1).data; + if (imageData[3] > 0) { + var result = callback(geometry, data); + if (result) { + return result; + } + context.clearRect(0, 0, 1, 1); + } + }); +}; + + +/** + * @inheritDoc + */ +ol.render.canvas.ReplayGroup.prototype.finish = function() { + var zKey; + for (zKey in this.replaysByZIndex_) { + var replays = this.replaysByZIndex_[zKey]; + var replayKey; + for (replayKey in replays) { + replays[replayKey].finish(); + } + } +}; + + +/** + * @inheritDoc + */ +ol.render.canvas.ReplayGroup.prototype.getReplay = + function(zIndex, replayType) { + var zIndexKey = goog.isDef(zIndex) ? zIndex.toString() : '0'; + var replays = this.replaysByZIndex_[zIndexKey]; + if (!goog.isDef(replays)) { + replays = {}; + this.replaysByZIndex_[zIndexKey] = replays; + } + var replay = replays[replayType]; + if (!goog.isDef(replay)) { + var Constructor = ol.render.canvas.BATCH_CONSTRUCTORS_[replayType]; + goog.asserts.assert(goog.isDef(Constructor)); + replay = new Constructor(this.tolerance_, this.maxExtent_); + replays[replayType] = replay; + } + return replay; +}; + + +/** + * @inheritDoc + */ +ol.render.canvas.ReplayGroup.prototype.isEmpty = function() { + return goog.object.isEmpty(this.replaysByZIndex_); +}; + + +/** + * @const + * @private + * @type {Object.} + */ +ol.render.canvas.BATCH_CONSTRUCTORS_ = { + 'Image': ol.render.canvas.ImageReplay, + 'LineString': ol.render.canvas.LineStringReplay, + 'Polygon': ol.render.canvas.PolygonReplay, + 'Text': ol.render.canvas.TextReplay +}; diff --git a/float-no-zero/ol/ol/render/ireplay.js b/float-no-zero/ol/ol/render/ireplay.js new file mode 100644 index 0000000000..3f4d7c122a --- /dev/null +++ b/float-no-zero/ol/ol/render/ireplay.js @@ -0,0 +1,58 @@ +goog.provide('ol.render.IReplayGroup'); + +goog.require('goog.functions'); +goog.require('ol.render.IVectorContext'); + + +/** + * @enum {string} + */ +ol.render.ReplayType = { + IMAGE: 'Image', + LINE_STRING: 'LineString', + POLYGON: 'Polygon', + TEXT: 'Text' +}; + + +/** + * @const + * @type {Array.} + */ +ol.render.REPLAY_ORDER = [ + ol.render.ReplayType.POLYGON, + ol.render.ReplayType.LINE_STRING, + ol.render.ReplayType.IMAGE, + ol.render.ReplayType.TEXT +]; + + + +/** + * @interface + */ +ol.render.IReplayGroup = function() { +}; + + +/** + * FIXME empty description for jsdoc + */ +ol.render.IReplayGroup.prototype.finish = function() { +}; + + +/** + * @param {number|undefined} zIndex Z index. + * @param {ol.render.ReplayType} replayType Replay type. + * @return {ol.render.IVectorContext} Replay. + */ +ol.render.IReplayGroup.prototype.getReplay = function(zIndex, replayType) { +}; + + +/** + * @return {boolean} Is empty. + */ +ol.render.IReplayGroup.prototype.isEmpty = function() { +}; diff --git a/float-no-zero/ol/ol/render/ivectorcontext.js b/float-no-zero/ol/ol/render/ivectorcontext.js new file mode 100644 index 0000000000..4a39a9974c --- /dev/null +++ b/float-no-zero/ol/ol/render/ivectorcontext.js @@ -0,0 +1,152 @@ +// FIXME remove trailing "Geometry" in method names + +goog.provide('ol.render.IVectorContext'); + + + +/** + * @interface + * @todo stability experimental + */ +ol.render.IVectorContext = function() { +}; + + +/** + * @param {number} zIndex Z index. + * @param {function(ol.render.canvas.Immediate)} callback Callback. + * @todo stability experimental + */ +ol.render.IVectorContext.prototype.drawAsync = function(zIndex, callback) { +}; + + +/** + * @param {ol.geom.Circle} circleGeometry Circle geometry. + * @param {Object} data Opaque data object, + * @todo stability experimental + */ +ol.render.IVectorContext.prototype.drawCircleGeometry = + function(circleGeometry, data) { +}; + + +/** + * @param {ol.Feature} feature Feature. + * @param {ol.style.Style} style Style. + * @todo stability experimental + */ +ol.render.IVectorContext.prototype.drawFeature = function(feature, style) { +}; + + +/** + * @param {ol.geom.GeometryCollection} geometryCollectionGeometry Geometry + * collection. + * @param {Object} data Opaque data object. + * @todo stability experimental + */ +ol.render.IVectorContext.prototype.drawGeometryCollectionGeometry = + function(geometryCollectionGeometry, data) { +}; + + +/** + * @param {ol.geom.Point} pointGeometry Point geometry. + * @param {Object} data Opaque data object. + * @todo stability experimental + */ +ol.render.IVectorContext.prototype.drawPointGeometry = + function(pointGeometry, data) { +}; + + +/** + * @param {ol.geom.LineString} lineStringGeometry Line string geometry. + * @param {Object} data Opaque data object. + * @todo stability experimental + */ +ol.render.IVectorContext.prototype.drawLineStringGeometry = + function(lineStringGeometry, data) { +}; + + +/** + * @param {ol.geom.MultiLineString} multiLineStringGeometry + * MultiLineString geometry. + * @param {Object} data Opaque data object. + * @todo stability experimental + */ +ol.render.IVectorContext.prototype.drawMultiLineStringGeometry = + function(multiLineStringGeometry, data) { +}; + + +/** + * @param {ol.geom.MultiPoint} multiPointGeometry MultiPoint geometry. + * @param {Object} data Opaque data object. + * @todo stability experimental + */ +ol.render.IVectorContext.prototype.drawMultiPointGeometry = + function(multiPointGeometry, data) { +}; + + +/** + * @param {ol.geom.MultiPolygon} multiPolygonGeometry MultiPolygon geometry. + * @param {Object} data Opaque data object. + * @todo stability experimental + */ +ol.render.IVectorContext.prototype.drawMultiPolygonGeometry = + function(multiPolygonGeometry, data) { +}; + + +/** + * @param {ol.geom.Polygon} polygonGeometry Polygon geometry. + * @param {Object} data Opaque data object. + * @todo stability experimental + */ +ol.render.IVectorContext.prototype.drawPolygonGeometry = + function(polygonGeometry, data) { +}; + + +/** + * @param {Array.} flatCoordinates Flat coordinates. + * @param {number} offset Offset. + * @param {number} end End. + * @param {number} stride Stride. + * @param {ol.geom.Geometry} geometry Geometry. + * @param {Object} data Opaque data object. + * @todo stability experimental + */ +ol.render.IVectorContext.prototype.drawText = + function(flatCoordinates, offset, end, stride, geometry, data) { +}; + + +/** + * @param {ol.style.Fill} fillStyle Fill style. + * @param {ol.style.Stroke} strokeStyle Stroke style. + * @todo stability experimental + */ +ol.render.IVectorContext.prototype.setFillStrokeStyle = + function(fillStyle, strokeStyle) { +}; + + +/** + * @param {ol.style.Image} imageStyle Image style. + * @todo stability experimental + */ +ol.render.IVectorContext.prototype.setImageStyle = function(imageStyle) { +}; + + +/** + * @param {ol.style.Text} textStyle Text style. + * @todo stability experimental + */ +ol.render.IVectorContext.prototype.setTextStyle = function(textStyle) { +}; diff --git a/float-no-zero/ol/ol/render/renderevent.js b/float-no-zero/ol/ol/render/renderevent.js new file mode 100644 index 0000000000..ec708db511 --- /dev/null +++ b/float-no-zero/ol/ol/render/renderevent.js @@ -0,0 +1,57 @@ +goog.provide('ol.render.Event'); +goog.provide('ol.render.EventType'); + +goog.require('goog.events.Event'); +goog.require('ol.render.IVectorContext'); + + +/** + * @enum {string} + */ +ol.render.EventType = { + POSTCOMPOSE: 'postcompose', + PRECOMPOSE: 'precompose', + RENDER: 'render' +}; + + + +/** + * @constructor + * @extends {goog.events.Event} + * @implements {oli.render.Event} + * @param {ol.render.EventType} type Type. + * @param {Object=} opt_target Target. + * @param {ol.render.IVectorContext=} opt_vectorContext Vector context. + * @param {ol.FrameState=} opt_frameState Frame state. + * @param {?CanvasRenderingContext2D=} opt_context Context. + * @param {?ol.webgl.Context=} opt_glContext WebGL Context. + */ +ol.render.Event = function( + type, opt_target, opt_vectorContext, opt_frameState, opt_context, + opt_glContext) { + + goog.base(this, type, opt_target); + + /** + * @type {ol.render.IVectorContext|undefined} + */ + this.vectorContext = opt_vectorContext; + + /** + * @type {ol.FrameState|undefined} + */ + this.frameState = opt_frameState; + + /** + * @type {CanvasRenderingContext2D|null|undefined} + */ + this.context = opt_context; + + /** + * @type {ol.webgl.Context|null|undefined} + */ + this.glContext = opt_glContext; + +}; +goog.inherits(ol.render.Event, goog.events.Event); diff --git a/float-no-zero/ol/ol/render/vector.js b/float-no-zero/ol/ol/render/vector.js new file mode 100644 index 0000000000..7010dbe714 --- /dev/null +++ b/float-no-zero/ol/ol/render/vector.js @@ -0,0 +1,317 @@ +goog.provide('ol.renderer.vector'); + +goog.require('goog.asserts'); +goog.require('ol.geom.Circle'); +goog.require('ol.geom.GeometryCollection'); +goog.require('ol.geom.LineString'); +goog.require('ol.geom.MultiLineString'); +goog.require('ol.geom.MultiPoint'); +goog.require('ol.geom.MultiPolygon'); +goog.require('ol.geom.Point'); +goog.require('ol.geom.Polygon'); +goog.require('ol.render.IReplayGroup'); +goog.require('ol.style.ImageState'); +goog.require('ol.style.Style'); + + +/** + * @param {ol.render.IReplayGroup} replayGroup Replay group. + * @param {ol.geom.Geometry} geometry Geometry. + * @param {ol.style.Style} style Style. + * @param {Object} data Opaque data object. + * @private + */ +ol.renderer.vector.renderCircleGeometry_ = + function(replayGroup, geometry, style, data) { + goog.asserts.assertInstanceof(geometry, ol.geom.Circle); + var fillStyle = style.getFill(); + var strokeStyle = style.getStroke(); + if (!goog.isNull(fillStyle) || !goog.isNull(strokeStyle)) { + var polygonReplay = replayGroup.getReplay( + style.getZIndex(), ol.render.ReplayType.POLYGON); + polygonReplay.setFillStrokeStyle(fillStyle, strokeStyle); + polygonReplay.drawCircleGeometry(geometry, data); + } + var textStyle = style.getText(); + if (!goog.isNull(textStyle)) { + var textReplay = replayGroup.getReplay( + style.getZIndex(), ol.render.ReplayType.TEXT); + textReplay.setTextStyle(textStyle); + textReplay.drawText(geometry.getCenter(), 0, 2, 2, geometry, data); + } +}; + + +/** + * @param {ol.render.IReplayGroup} replayGroup Replay group. + * @param {ol.Feature} feature Feature. + * @param {ol.style.Style} style Style. + * @param {number} squaredTolerance Squared tolerance. + * @param {Object} data Opaque data object. + * @param {function(this: T, goog.events.Event)} listener Listener function. + * @param {T} thisArg Value to use as `this` when executing `listener`. + * @return {boolean} `true` if style is loading. + * @template T + */ +ol.renderer.vector.renderFeature = function( + replayGroup, feature, style, squaredTolerance, data, listener, thisArg) { + var loading = false; + var imageStyle, imageState; + imageStyle = style.getImage(); + if (goog.isNull(imageStyle)) { + ol.renderer.vector.renderFeature_( + replayGroup, feature, style, squaredTolerance, data); + } else { + imageState = imageStyle.getImageState(); + if (imageState == ol.style.ImageState.LOADED || + imageState == ol.style.ImageState.ERROR) { + imageStyle.unlistenImageChange(listener, thisArg); + if (imageState == ol.style.ImageState.LOADED) { + ol.renderer.vector.renderFeature_( + replayGroup, feature, style, squaredTolerance, data); + } + } else { + if (imageState == ol.style.ImageState.IDLE) { + imageStyle.load(); + } + imageState = imageStyle.getImageState(); + goog.asserts.assert(imageState == ol.style.ImageState.LOADING); + imageStyle.listenImageChange(listener, thisArg); + loading = true; + } + } + return loading; +}; + + +/** + * @param {ol.render.IReplayGroup} replayGroup Replay group. + * @param {ol.Feature} feature Feature. + * @param {ol.style.Style} style Style. + * @param {number} squaredTolerance Squared tolerance. + * @param {Object} data Opaque data object. + * @private + */ +ol.renderer.vector.renderFeature_ = function( + replayGroup, feature, style, squaredTolerance, data) { + var geometry = feature.getGeometry(); + if (goog.isNull(geometry)) { + return; + } + var simplifiedGeometry = geometry.getSimplifiedGeometry(squaredTolerance); + var geometryRenderer = + ol.renderer.vector.GEOMETRY_RENDERERS_[simplifiedGeometry.getType()]; + goog.asserts.assert(goog.isDef(geometryRenderer)); + geometryRenderer(replayGroup, simplifiedGeometry, style, data); +}; + + +/** + * @param {ol.render.IReplayGroup} replayGroup Replay group. + * @param {ol.geom.Geometry} geometry Geometry. + * @param {ol.style.Style} style Style. + * @param {Object} data Opaque data object. + * @private + */ +ol.renderer.vector.renderGeometryCollectionGeometry_ = + function(replayGroup, geometry, style, data) { + goog.asserts.assertInstanceof(geometry, ol.geom.GeometryCollection); + var geometries = geometry.getGeometriesArray(); + var i, ii; + for (i = 0, ii = geometries.length; i < ii; ++i) { + var geometryRenderer = + ol.renderer.vector.GEOMETRY_RENDERERS_[geometries[i].getType()]; + goog.asserts.assert(goog.isDef(geometryRenderer)); + geometryRenderer(replayGroup, geometries[i], style, data); + } +}; + + +/** + * @param {ol.render.IReplayGroup} replayGroup Replay group. + * @param {ol.geom.Geometry} geometry Geometry. + * @param {ol.style.Style} style Style. + * @param {Object} data Opaque data object. + * @private + */ +ol.renderer.vector.renderLineStringGeometry_ = + function(replayGroup, geometry, style, data) { + goog.asserts.assertInstanceof(geometry, ol.geom.LineString); + var strokeStyle = style.getStroke(); + if (!goog.isNull(strokeStyle)) { + var lineStringReplay = replayGroup.getReplay( + style.getZIndex(), ol.render.ReplayType.LINE_STRING); + lineStringReplay.setFillStrokeStyle(null, strokeStyle); + lineStringReplay.drawLineStringGeometry(geometry, data); + } + var textStyle = style.getText(); + if (!goog.isNull(textStyle)) { + var textReplay = replayGroup.getReplay( + style.getZIndex(), ol.render.ReplayType.TEXT); + textReplay.setTextStyle(textStyle); + textReplay.drawText(geometry.getFlatMidpoint(), 0, 2, 2, geometry, data); + } +}; + + +/** + * @param {ol.render.IReplayGroup} replayGroup Replay group. + * @param {ol.geom.Geometry} geometry Geometry. + * @param {ol.style.Style} style Style. + * @param {Object} data Opaque data object. + * @private + */ +ol.renderer.vector.renderMultiLineStringGeometry_ = + function(replayGroup, geometry, style, data) { + goog.asserts.assertInstanceof(geometry, ol.geom.MultiLineString); + var strokeStyle = style.getStroke(); + if (!goog.isNull(strokeStyle)) { + var lineStringReplay = replayGroup.getReplay( + style.getZIndex(), ol.render.ReplayType.LINE_STRING); + lineStringReplay.setFillStrokeStyle(null, strokeStyle); + lineStringReplay.drawMultiLineStringGeometry(geometry, data); + } + var textStyle = style.getText(); + if (!goog.isNull(textStyle)) { + var textReplay = replayGroup.getReplay( + style.getZIndex(), ol.render.ReplayType.TEXT); + textReplay.setTextStyle(textStyle); + var flatMidpointCoordinates = geometry.getFlatMidpoints(); + textReplay.drawText(flatMidpointCoordinates, 0, + flatMidpointCoordinates.length, 2, geometry, data); + } +}; + + +/** + * @param {ol.render.IReplayGroup} replayGroup Replay group. + * @param {ol.geom.Geometry} geometry Geometry. + * @param {ol.style.Style} style Style. + * @param {Object} data Opaque data object. + * @private + */ +ol.renderer.vector.renderMultiPolygonGeometry_ = + function(replayGroup, geometry, style, data) { + goog.asserts.assertInstanceof(geometry, ol.geom.MultiPolygon); + var fillStyle = style.getFill(); + var strokeStyle = style.getStroke(); + if (!goog.isNull(strokeStyle) || !goog.isNull(fillStyle)) { + var polygonReplay = replayGroup.getReplay( + style.getZIndex(), ol.render.ReplayType.POLYGON); + polygonReplay.setFillStrokeStyle(fillStyle, strokeStyle); + polygonReplay.drawMultiPolygonGeometry(geometry, data); + } + var textStyle = style.getText(); + if (!goog.isNull(textStyle)) { + var textReplay = replayGroup.getReplay( + style.getZIndex(), ol.render.ReplayType.TEXT); + textReplay.setTextStyle(textStyle); + var flatInteriorPointCoordinates = geometry.getFlatInteriorPoints(); + textReplay.drawText(flatInteriorPointCoordinates, 0, + flatInteriorPointCoordinates.length, 2, geometry, data); + } +}; + + +/** + * @param {ol.render.IReplayGroup} replayGroup Replay group. + * @param {ol.geom.Geometry} geometry Geometry. + * @param {ol.style.Style} style Style. + * @param {Object} data Opaque data object. + * @private + */ +ol.renderer.vector.renderPointGeometry_ = + function(replayGroup, geometry, style, data) { + goog.asserts.assertInstanceof(geometry, ol.geom.Point); + var imageStyle = style.getImage(); + if (!goog.isNull(imageStyle)) { + var imageReplay = replayGroup.getReplay( + style.getZIndex(), ol.render.ReplayType.IMAGE); + imageReplay.setImageStyle(imageStyle); + imageReplay.drawPointGeometry(geometry, data); + } + var textStyle = style.getText(); + if (!goog.isNull(textStyle)) { + var textReplay = replayGroup.getReplay( + style.getZIndex(), ol.render.ReplayType.TEXT); + textReplay.setTextStyle(textStyle); + textReplay.drawText(geometry.getCoordinates(), 0, 2, 2, geometry, data); + } +}; + + +/** + * @param {ol.render.IReplayGroup} replayGroup Replay group. + * @param {ol.geom.Geometry} geometry Geometry. + * @param {ol.style.Style} style Style. + * @param {Object} data Opaque data object. + * @private + */ +ol.renderer.vector.renderMultiPointGeometry_ = + function(replayGroup, geometry, style, data) { + goog.asserts.assertInstanceof(geometry, ol.geom.MultiPoint); + var imageStyle = style.getImage(); + if (!goog.isNull(imageStyle)) { + var imageReplay = replayGroup.getReplay( + style.getZIndex(), ol.render.ReplayType.IMAGE); + imageReplay.setImageStyle(imageStyle); + imageReplay.drawMultiPointGeometry(geometry, data); + } + var textStyle = style.getText(); + if (!goog.isNull(textStyle)) { + var textReplay = replayGroup.getReplay( + style.getZIndex(), ol.render.ReplayType.TEXT); + textReplay.setTextStyle(textStyle); + var flatCoordinates = geometry.getFlatCoordinates(); + textReplay.drawText(flatCoordinates, 0, flatCoordinates.length, + geometry.getStride(), geometry, data); + } +}; + + +/** + * @param {ol.render.IReplayGroup} replayGroup Replay group. + * @param {ol.geom.Geometry} geometry Geometry. + * @param {ol.style.Style} style Style. + * @param {Object} data Opaque data object. + * @private + */ +ol.renderer.vector.renderPolygonGeometry_ = + function(replayGroup, geometry, style, data) { + goog.asserts.assertInstanceof(geometry, ol.geom.Polygon); + var fillStyle = style.getFill(); + var strokeStyle = style.getStroke(); + if (!goog.isNull(fillStyle) || !goog.isNull(strokeStyle)) { + var polygonReplay = replayGroup.getReplay( + style.getZIndex(), ol.render.ReplayType.POLYGON); + polygonReplay.setFillStrokeStyle(fillStyle, strokeStyle); + polygonReplay.drawPolygonGeometry(geometry, data); + } + var textStyle = style.getText(); + if (!goog.isNull(textStyle)) { + var textReplay = replayGroup.getReplay( + style.getZIndex(), ol.render.ReplayType.TEXT); + textReplay.setTextStyle(textStyle); + textReplay.drawText( + geometry.getFlatInteriorPoint(), 0, 2, 2, geometry, data); + } +}; + + +/** + * @const + * @private + * @type {Object.} + */ +ol.renderer.vector.GEOMETRY_RENDERERS_ = { + 'Point': ol.renderer.vector.renderPointGeometry_, + 'LineString': ol.renderer.vector.renderLineStringGeometry_, + 'Polygon': ol.renderer.vector.renderPolygonGeometry_, + 'MultiPoint': ol.renderer.vector.renderMultiPointGeometry_, + 'MultiLineString': ol.renderer.vector.renderMultiLineStringGeometry_, + 'MultiPolygon': ol.renderer.vector.renderMultiPolygonGeometry_, + 'GeometryCollection': ol.renderer.vector.renderGeometryCollectionGeometry_, + 'Circle': ol.renderer.vector.renderCircleGeometry_ +}; diff --git a/float-no-zero/ol/ol/render/webgl/webglimmediate.js b/float-no-zero/ol/ol/render/webgl/webglimmediate.js new file mode 100644 index 0000000000..375b0c96cf --- /dev/null +++ b/float-no-zero/ol/ol/render/webgl/webglimmediate.js @@ -0,0 +1,121 @@ +goog.provide('ol.render.webgl.Immediate'); + + + +/** + * @constructor + * @implements {ol.render.IVectorContext} + * @param {ol.webgl.Context} context Context. + * @param {number} pixelRatio Pixel ratio. + * @struct + */ +ol.render.webgl.Immediate = function(context, pixelRatio) { +}; + + +/** + * @inheritDoc + */ +ol.render.webgl.Immediate.prototype.drawAsync = function(zIndex, callback) { +}; + + +/** + * @inheritDoc + */ +ol.render.webgl.Immediate.prototype.drawCircleGeometry = + function(circleGeometry, data) { +}; + + +/** + * @inheritDoc + */ +ol.render.webgl.Immediate.prototype.drawFeature = function(feature, style) { +}; + + +/** + * @inheritDoc + */ +ol.render.webgl.Immediate.prototype.drawGeometryCollectionGeometry = + function(geometryCollectionGeometry, data) { +}; + + +/** + * @inheritDoc + */ +ol.render.webgl.Immediate.prototype.drawPointGeometry = + function(pointGeometry, data) { +}; + + +/** + * @inheritDoc + */ +ol.render.webgl.Immediate.prototype.drawLineStringGeometry = + function(lineStringGeometry, data) { +}; + + +/** + * @inheritDoc + */ +ol.render.webgl.Immediate.prototype.drawMultiLineStringGeometry = + function(multiLineStringGeometry, data) { +}; + + +/** + * @inheritDoc + */ +ol.render.webgl.Immediate.prototype.drawMultiPointGeometry = + function(multiPointGeometry, data) { +}; + + +/** + * @inheritDoc + */ +ol.render.webgl.Immediate.prototype.drawMultiPolygonGeometry = + function(multiPolygonGeometry, data) { +}; + + +/** + * @inheritDoc + */ +ol.render.webgl.Immediate.prototype.drawPolygonGeometry = + function(polygonGeometry, data) { +}; + + +/** + * @inheritDoc + */ +ol.render.webgl.Immediate.prototype.drawText = + function(flatCoordinates, offset, end, stride, geometry, data) { +}; + + +/** + * @inheritDoc + */ +ol.render.webgl.Immediate.prototype.setFillStrokeStyle = + function(fillStyle, strokeStyle) { +}; + + +/** + * @inheritDoc + */ +ol.render.webgl.Immediate.prototype.setImageStyle = function(imageStyle) { +}; + + +/** + * @inheritDoc + */ +ol.render.webgl.Immediate.prototype.setTextStyle = function(textStyle) { +}; diff --git a/float-no-zero/ol/ol/renderer/canvas/canvasimagelayerrenderer.js b/float-no-zero/ol/ol/renderer/canvas/canvasimagelayerrenderer.js new file mode 100644 index 0000000000..a7cff40d4c --- /dev/null +++ b/float-no-zero/ol/ol/renderer/canvas/canvasimagelayerrenderer.js @@ -0,0 +1,136 @@ +goog.provide('ol.renderer.canvas.ImageLayer'); + +goog.require('goog.asserts'); +goog.require('goog.events'); +goog.require('goog.events.EventType'); +goog.require('goog.vec.Mat4'); +goog.require('ol.ImageBase'); +goog.require('ol.ImageState'); +goog.require('ol.ViewHint'); +goog.require('ol.layer.Image'); +goog.require('ol.renderer.Map'); +goog.require('ol.renderer.canvas.Layer'); +goog.require('ol.source.Image'); +goog.require('ol.vec.Mat4'); + + + +/** + * @constructor + * @extends {ol.renderer.canvas.Layer} + * @param {ol.renderer.Map} mapRenderer Map renderer. + * @param {ol.layer.Image} imageLayer Single image layer. + */ +ol.renderer.canvas.ImageLayer = function(mapRenderer, imageLayer) { + + goog.base(this, mapRenderer, imageLayer); + + /** + * @private + * @type {?ol.ImageBase} + */ + this.image_ = null; + + /** + * @private + * @type {!goog.vec.Mat4.Number} + */ + this.imageTransform_ = goog.vec.Mat4.createNumber(); + +}; +goog.inherits(ol.renderer.canvas.ImageLayer, ol.renderer.canvas.Layer); + + +/** + * @inheritDoc + */ +ol.renderer.canvas.ImageLayer.prototype.forEachFeatureAtPixel = + function(coordinate, frameState, callback, thisArg) { + var layer = this.getLayer(); + var source = layer.getSource(); + goog.asserts.assertInstanceof(source, ol.source.Image); + var extent = frameState.extent; + var resolution = frameState.view2DState.resolution; + var rotation = frameState.view2DState.rotation; + return source.forEachFeatureAtPixel(extent, resolution, rotation, coordinate, + /** + * @param {ol.Feature} feature Feature. + * @return {?} Callback result. + */ + function(feature) { + return callback.call(thisArg, feature, layer); + }); +}; + + +/** + * @inheritDoc + */ +ol.renderer.canvas.ImageLayer.prototype.getImage = function() { + return goog.isNull(this.image_) ? + null : this.image_.getImageElement(); +}; + + +/** + * @inheritDoc + */ +ol.renderer.canvas.ImageLayer.prototype.getImageTransform = function() { + return this.imageTransform_; +}; + + +/** + * @inheritDoc + */ +ol.renderer.canvas.ImageLayer.prototype.prepareFrame = + function(frameState, layerState) { + + var pixelRatio = frameState.pixelRatio; + var view2DState = frameState.view2DState; + var viewCenter = view2DState.center; + var viewResolution = view2DState.resolution; + var viewRotation = view2DState.rotation; + + var image; + var imageLayer = this.getLayer(); + goog.asserts.assertInstanceof(imageLayer, ol.layer.Image); + var imageSource = imageLayer.getSource(); + goog.asserts.assertInstanceof(imageSource, ol.source.Image); + + var hints = frameState.viewHints; + + if (!hints[ol.ViewHint.ANIMATING] && !hints[ol.ViewHint.INTERACTING]) { + image = imageSource.getImage( + frameState.extent, viewResolution, pixelRatio, view2DState.projection); + if (!goog.isNull(image)) { + var imageState = image.getState(); + if (imageState == ol.ImageState.IDLE) { + goog.events.listenOnce(image, goog.events.EventType.CHANGE, + this.handleImageChange, false, this); + image.load(); + } else if (imageState == ol.ImageState.LOADED) { + this.image_ = image; + } + } + } + + if (!goog.isNull(this.image_)) { + image = this.image_; + var imageExtent = image.getExtent(); + var imageResolution = image.getResolution(); + var imagePixelRatio = image.getPixelRatio(); + var scale = pixelRatio * imageResolution / + (viewResolution * imagePixelRatio); + ol.vec.Mat4.makeTransform2D(this.imageTransform_, + pixelRatio * frameState.size[0] / 2, + pixelRatio * frameState.size[1] / 2, + scale, scale, + viewRotation, + imagePixelRatio * (imageExtent[0] - viewCenter[0]) / imageResolution, + imagePixelRatio * (viewCenter[1] - imageExtent[3]) / imageResolution); + this.updateAttributions(frameState.attributions, image.getAttributions()); + this.updateLogos(frameState, imageSource); + } + +}; diff --git a/float-no-zero/ol/ol/renderer/canvas/canvaslayerrenderer.js b/float-no-zero/ol/ol/renderer/canvas/canvaslayerrenderer.js new file mode 100644 index 0000000000..27f4b7d56f --- /dev/null +++ b/float-no-zero/ol/ol/renderer/canvas/canvaslayerrenderer.js @@ -0,0 +1,165 @@ +goog.provide('ol.renderer.canvas.Layer'); + +goog.require('goog.vec.Mat4'); +goog.require('ol.layer.Layer'); +goog.require('ol.render.Event'); +goog.require('ol.render.EventType'); +goog.require('ol.render.canvas.Immediate'); +goog.require('ol.renderer.Layer'); +goog.require('ol.vec.Mat4'); + + + +/** + * @constructor + * @extends {ol.renderer.Layer} + * @param {ol.renderer.Map} mapRenderer Map renderer. + * @param {ol.layer.Layer} layer Layer. + */ +ol.renderer.canvas.Layer = function(mapRenderer, layer) { + + goog.base(this, mapRenderer, layer); + + /** + * @private + * @type {!goog.vec.Mat4.Number} + */ + this.transform_ = goog.vec.Mat4.createNumber(); + +}; +goog.inherits(ol.renderer.canvas.Layer, ol.renderer.Layer); + + +/** + * @param {ol.FrameState} frameState Frame state. + * @param {ol.layer.LayerState} layerState Layer state. + * @param {CanvasRenderingContext2D} context Context. + */ +ol.renderer.canvas.Layer.prototype.composeFrame = + function(frameState, layerState, context) { + + this.dispatchPreComposeEvent(context, frameState); + + var image = this.getImage(); + if (!goog.isNull(image)) { + var imageTransform = this.getImageTransform(); + context.globalAlpha = layerState.opacity; + + // for performance reasons, context.setTransform is only used + // when the view is rotated. see http://jsperf.com/canvas-transform + if (frameState.view2DState.rotation === 0) { + var dx = goog.vec.Mat4.getElement(imageTransform, 0, 3); + var dy = goog.vec.Mat4.getElement(imageTransform, 1, 3); + var dw = image.width * goog.vec.Mat4.getElement(imageTransform, 0, 0); + var dh = image.height * goog.vec.Mat4.getElement(imageTransform, 1, 1); + context.drawImage(image, 0, 0, +image.width, +image.height, + Math.round(dx), Math.round(dy), Math.round(dw), Math.round(dh)); + } else { + context.setTransform( + goog.vec.Mat4.getElement(imageTransform, 0, 0), + goog.vec.Mat4.getElement(imageTransform, 1, 0), + goog.vec.Mat4.getElement(imageTransform, 0, 1), + goog.vec.Mat4.getElement(imageTransform, 1, 1), + goog.vec.Mat4.getElement(imageTransform, 0, 3), + goog.vec.Mat4.getElement(imageTransform, 1, 3)); + context.drawImage(image, 0, 0); + context.setTransform(1, 0, 0, 1, 0, 0); + } + } + + this.dispatchPostComposeEvent(context, frameState); + +}; + + +/** + * @param {ol.render.EventType} type Event type. + * @param {CanvasRenderingContext2D} context Context. + * @param {ol.FrameState} frameState Frame state. + * @param {goog.vec.Mat4.Number=} opt_transform Transform. + * @private + */ +ol.renderer.canvas.Layer.prototype.dispatchComposeEvent_ = + function(type, context, frameState, opt_transform) { + var layer = this.getLayer(); + if (layer.hasListener(type)) { + var transform = goog.isDef(opt_transform) ? + opt_transform : this.getTransform(frameState); + var render = new ol.render.canvas.Immediate( + context, frameState.pixelRatio, frameState.extent, transform, + frameState.view2DState.rotation); + var composeEvent = new ol.render.Event(type, layer, render, frameState, + context, null); + layer.dispatchEvent(composeEvent); + render.flush(); + } +}; + + +/** + * @param {CanvasRenderingContext2D} context Context. + * @param {ol.FrameState} frameState Frame state. + * @param {goog.vec.Mat4.Number=} opt_transform Transform. + * @protected + */ +ol.renderer.canvas.Layer.prototype.dispatchPostComposeEvent = + function(context, frameState, opt_transform) { + this.dispatchComposeEvent_(ol.render.EventType.POSTCOMPOSE, context, + frameState, opt_transform); +}; + + +/** + * @param {CanvasRenderingContext2D} context Context. + * @param {ol.FrameState} frameState Frame state. + * @param {goog.vec.Mat4.Number=} opt_transform Transform. + * @protected + */ +ol.renderer.canvas.Layer.prototype.dispatchPreComposeEvent = + function(context, frameState, opt_transform) { + this.dispatchComposeEvent_(ol.render.EventType.PRECOMPOSE, context, + frameState, opt_transform); +}; + + +/** + * @param {CanvasRenderingContext2D} context Context. + * @param {ol.FrameState} frameState Frame state. + * @param {goog.vec.Mat4.Number=} opt_transform Transform. + * @protected + */ +ol.renderer.canvas.Layer.prototype.dispatchRenderEvent = + function(context, frameState, opt_transform) { + this.dispatchComposeEvent_(ol.render.EventType.RENDER, context, + frameState, opt_transform); +}; + + +/** + * @return {HTMLCanvasElement|HTMLVideoElement|Image} Canvas. + */ +ol.renderer.canvas.Layer.prototype.getImage = goog.abstractMethod; + + +/** + * @return {!goog.vec.Mat4.Number} Image transform. + */ +ol.renderer.canvas.Layer.prototype.getImageTransform = goog.abstractMethod; + + +/** + * @param {ol.FrameState} frameState Frame state. + * @protected + * @return {!goog.vec.Mat4.Number} Transform. + */ +ol.renderer.canvas.Layer.prototype.getTransform = function(frameState) { + var view2DState = frameState.view2DState; + var pixelRatio = frameState.pixelRatio; + return ol.vec.Mat4.makeTransform2D(this.transform_, + pixelRatio * frameState.size[0] / 2, + pixelRatio * frameState.size[1] / 2, + pixelRatio / view2DState.resolution, + -pixelRatio / view2DState.resolution, + -view2DState.rotation, + -view2DState.center[0], -view2DState.center[1]); +}; diff --git a/float-no-zero/ol/ol/renderer/canvas/canvasmaprenderer.js b/float-no-zero/ol/ol/renderer/canvas/canvasmaprenderer.js new file mode 100644 index 0000000000..793b692658 --- /dev/null +++ b/float-no-zero/ol/ol/renderer/canvas/canvasmaprenderer.js @@ -0,0 +1,183 @@ +// FIXME offset panning + +goog.provide('ol.renderer.canvas.Map'); + +goog.require('goog.asserts'); +goog.require('goog.dom'); +goog.require('goog.dom.TagName'); +goog.require('goog.style'); +goog.require('goog.vec.Mat4'); +goog.require('ol.css'); +goog.require('ol.layer.Image'); +goog.require('ol.layer.Tile'); +goog.require('ol.layer.Vector'); +goog.require('ol.render.Event'); +goog.require('ol.render.EventType'); +goog.require('ol.render.canvas.Immediate'); +goog.require('ol.renderer.Map'); +goog.require('ol.renderer.canvas.ImageLayer'); +goog.require('ol.renderer.canvas.Layer'); +goog.require('ol.renderer.canvas.TileLayer'); +goog.require('ol.renderer.canvas.VectorLayer'); +goog.require('ol.source.State'); +goog.require('ol.vec.Mat4'); + + + +/** + * @constructor + * @extends {ol.renderer.Map} + * @param {Element} container Container. + * @param {ol.Map} map Map. + */ +ol.renderer.canvas.Map = function(container, map) { + + goog.base(this, container, map); + + /** + * @private + * @type {HTMLCanvasElement} + */ + this.canvas_ = /** @type {HTMLCanvasElement} */ + (goog.dom.createElement(goog.dom.TagName.CANVAS)); + this.canvas_.style.width = '100%'; + this.canvas_.style.height = '100%'; + this.canvas_.className = ol.css.CLASS_UNSELECTABLE; + goog.dom.insertChildAt(container, this.canvas_, 0); + + /** + * @private + * @type {boolean} + */ + this.renderedVisible_ = true; + + /** + * @private + * @type {CanvasRenderingContext2D} + */ + this.context_ = /** @type {CanvasRenderingContext2D} */ + (this.canvas_.getContext('2d')); + + /** + * @private + * @type {!goog.vec.Mat4.Number} + */ + this.transform_ = goog.vec.Mat4.createNumber(); + +}; +goog.inherits(ol.renderer.canvas.Map, ol.renderer.Map); + + +/** + * @inheritDoc + */ +ol.renderer.canvas.Map.prototype.createLayerRenderer = function(layer) { + if (ol.ENABLE_IMAGE && layer instanceof ol.layer.Image) { + return new ol.renderer.canvas.ImageLayer(this, layer); + } else if (ol.ENABLE_TILE && layer instanceof ol.layer.Tile) { + return new ol.renderer.canvas.TileLayer(this, layer); + } else if (ol.ENABLE_VECTOR && layer instanceof ol.layer.Vector) { + return new ol.renderer.canvas.VectorLayer(this, layer); + } else { + goog.asserts.fail(); + return null; + } +}; + + +/** + * @param {ol.render.EventType} type Event type. + * @param {ol.FrameState} frameState Frame state. + * @private + */ +ol.renderer.canvas.Map.prototype.dispatchComposeEvent_ = + function(type, frameState) { + var map = this.getMap(); + var context = this.context_; + if (map.hasListener(type)) { + var view2DState = frameState.view2DState; + var pixelRatio = frameState.pixelRatio; + ol.vec.Mat4.makeTransform2D(this.transform_, + this.canvas_.width / 2, + this.canvas_.height / 2, + pixelRatio / view2DState.resolution, + -pixelRatio / view2DState.resolution, + -view2DState.rotation, + -view2DState.center[0], -view2DState.center[1]); + var render = new ol.render.canvas.Immediate(context, pixelRatio, + frameState.extent, this.transform_, view2DState.rotation); + var composeEvent = new ol.render.Event(type, map, render, frameState, + context, null); + map.dispatchEvent(composeEvent); + render.flush(); + } +}; + + +/** + * @param {ol.layer.Layer} layer Layer. + * @return {ol.renderer.canvas.Layer} Canvas layer renderer. + */ +ol.renderer.canvas.Map.prototype.getCanvasLayerRenderer = function(layer) { + var layerRenderer = this.getLayerRenderer(layer); + goog.asserts.assertInstanceof(layerRenderer, ol.renderer.canvas.Layer); + return /** @type {ol.renderer.canvas.Layer} */ (layerRenderer); +}; + + +/** + * @inheritDoc + */ +ol.renderer.canvas.Map.prototype.renderFrame = function(frameState) { + + if (goog.isNull(frameState)) { + if (this.renderedVisible_) { + goog.style.setElementShown(this.canvas_, false); + this.renderedVisible_ = false; + } + return; + } + + var context = this.context_; + var width = frameState.size[0] * frameState.pixelRatio; + var height = frameState.size[1] * frameState.pixelRatio; + if (this.canvas_.width != width || this.canvas_.height != height) { + this.canvas_.width = width; + this.canvas_.height = height; + } else { + context.clearRect(0, 0, this.canvas_.width, this.canvas_.height); + } + + this.calculateMatrices2D(frameState); + + this.dispatchComposeEvent_(ol.render.EventType.PRECOMPOSE, frameState); + + var layerStates = frameState.layerStates; + var layersArray = frameState.layersArray; + var viewResolution = frameState.view2DState.resolution; + var i, ii, layer, layerRenderer, layerState; + for (i = 0, ii = layersArray.length; i < ii; ++i) { + layer = layersArray[i]; + layerRenderer = this.getLayerRenderer(layer); + goog.asserts.assertInstanceof(layerRenderer, ol.renderer.canvas.Layer); + layerState = layerStates[goog.getUid(layer)]; + if (!layerState.visible || + layerState.sourceState != ol.source.State.READY || + viewResolution >= layerState.maxResolution || + viewResolution < layerState.minResolution) { + continue; + } + layerRenderer.prepareFrame(frameState, layerState); + layerRenderer.composeFrame(frameState, layerState, context); + } + + this.dispatchComposeEvent_(ol.render.EventType.POSTCOMPOSE, frameState); + + if (!this.renderedVisible_) { + goog.style.setElementShown(this.canvas_, true); + this.renderedVisible_ = true; + } + + this.scheduleRemoveUnusedLayerRenderers(frameState); + this.scheduleExpireIconCache(frameState); +}; diff --git a/float-no-zero/ol/ol/renderer/canvas/canvastilelayerrenderer.js b/float-no-zero/ol/ol/renderer/canvas/canvastilelayerrenderer.js new file mode 100644 index 0000000000..3f09c089be --- /dev/null +++ b/float-no-zero/ol/ol/renderer/canvas/canvastilelayerrenderer.js @@ -0,0 +1,401 @@ +// FIXME find correct globalCompositeOperation +// FIXME optimize :-) + +goog.provide('ol.renderer.canvas.TileLayer'); + +goog.require('goog.array'); +goog.require('goog.asserts'); +goog.require('goog.dom'); +goog.require('goog.dom.TagName'); +goog.require('goog.object'); +goog.require('goog.vec.Mat4'); +goog.require('ol.Size'); +goog.require('ol.Tile'); +goog.require('ol.TileCoord'); +goog.require('ol.TileRange'); +goog.require('ol.TileState'); +goog.require('ol.extent'); +goog.require('ol.layer.Tile'); +goog.require('ol.renderer.Map'); +goog.require('ol.renderer.canvas.Layer'); +goog.require('ol.source.Tile'); +goog.require('ol.vec.Mat4'); + + + +/** + * @constructor + * @extends {ol.renderer.canvas.Layer} + * @param {ol.renderer.Map} mapRenderer Map renderer. + * @param {ol.layer.Tile} tileLayer Tile layer. + */ +ol.renderer.canvas.TileLayer = function(mapRenderer, tileLayer) { + + goog.base(this, mapRenderer, tileLayer); + + /** + * @private + * @type {HTMLCanvasElement} + */ + this.canvas_ = null; + + /** + * @private + * @type {ol.Size} + */ + this.canvasSize_ = null; + + /** + * @private + * @type {CanvasRenderingContext2D} + */ + this.context_ = null; + + /** + * @private + * @type {!goog.vec.Mat4.Number} + */ + this.imageTransform_ = goog.vec.Mat4.createNumber(); + + /** + * @private + * @type {number} + */ + this.renderedCanvasZ_ = NaN; + + /** + * @private + * @type {ol.TileRange} + */ + this.renderedCanvasTileRange_ = null; + + /** + * @private + * @type {Array.} + */ + this.renderedTiles_ = null; + +}; +goog.inherits(ol.renderer.canvas.TileLayer, ol.renderer.canvas.Layer); + + +/** + * @inheritDoc + */ +ol.renderer.canvas.TileLayer.prototype.getImage = function() { + return this.canvas_; +}; + + +/** + * @inheritDoc + */ +ol.renderer.canvas.TileLayer.prototype.getImageTransform = function() { + return this.imageTransform_; +}; + + +/** + * @inheritDoc + */ +ol.renderer.canvas.TileLayer.prototype.prepareFrame = + function(frameState, layerState) { + + // + // Warning! You're entering a dangerous zone! + // + // The canvas tile layer renderering is highly optimized, hence + // the complexity of this function. For best performance we try + // to minimize the number of pixels to update on the canvas. This + // includes: + // + // - Only drawing pixels that will be visible. + // - Not re-drawing pixels/tiles that are already correct. + // - Minimizing calls to clearRect. + // - Never shrink the canvas. Just make it bigger when necessary. + // Re-sizing the canvas also clears it, which further means + // re-creating it (expensive). + // + // The various steps performed by this functions: + // + // - Create a canvas element if none has been created yet. + // + // - Make the canvas bigger if it's too small. Note that we never shrink + // the canvas, we just make it bigger when necessary, when rotating for + // example. Note also that the canvas always contains a whole number + // of tiles. + // + // - Invalidate the canvas tile range (renderedCanvasTileRange_ = null) + // if (1) the canvas has been enlarged, or (2) the zoom level changes, + // or (3) the canvas tile range doesn't contain the required tile + // range. This canvas tile range invalidation thing is related to + // an optimization where we attempt to redraw as few pixels as + // possible on each prepareFrame call. + // + // - If the canvas tile range has been invalidated we reset + // renderedCanvasTileRange_ and reset the renderedTiles_ array. + // The renderedTiles_ array is the structure used to determine + // the canvas pixels that need not be redrawn from one prepareFrame + // call to another. It records while tile has been rendered at + // which position in the canvas. + // + // - We then determine the tiles to draw on the canvas. Tiles for + // the target resolution may not be loaded yet. In that case we + // use low-resolution/interim tiles if loaded already. And, if + // for a non-yet-loaded tile we haven't found a corresponding + // low-resolution tile we indicate that the pixels for that + // tile must be cleared on the canvas. Note: determining the + // interim tiles is based on tile extents instead of tile + // coords, this is to be able to handler irregular tile grids. + // + // - We're now ready to render. We start by calling clearRect + // for the tiles that aren't loaded yet and are not fully covered + // by a low-resolution tile (if they're loaded, we'll draw them; + // if they're fully covered by a low-resolution tile then there's + // no need to clear). We then render the tiles "back to front", + // i.e. starting with the low-resolution tiles. + // + // - After rendering some bookkeeping is performed (updateUsedTiles, + // etc.). manageTilePyramid is what enqueue tiles in the tile + // queue for loading. + // + // - The last step involves updating the image transform matrix, + // which will be used by the map renderer for the final + // composition and positioning. + // + + var pixelRatio = frameState.pixelRatio; + var view2DState = frameState.view2DState; + var projection = view2DState.projection; + + var tileLayer = this.getLayer(); + goog.asserts.assertInstanceof(tileLayer, ol.layer.Tile); + var tileSource = tileLayer.getSource(); + goog.asserts.assertInstanceof(tileSource, ol.source.Tile); + var tileGrid = tileSource.getTileGridForProjection(projection); + var tileGutter = tileSource.getGutter(); + var z = tileGrid.getZForResolution(view2DState.resolution); + var tilePixelSize = + tileSource.getTilePixelSize(z, frameState.pixelRatio, projection); + var tilePixelRatio = tilePixelSize / tileGrid.getTileSize(z); + var tileResolution = tileGrid.getResolution(z); + var tilePixelResolution = tileResolution / tilePixelRatio; + var center = view2DState.center; + var extent; + if (tileResolution == view2DState.resolution) { + center = this.snapCenterToPixel(center, tileResolution, frameState.size); + extent = ol.extent.getForView2DAndSize( + center, tileResolution, view2DState.rotation, frameState.size); + } else { + extent = frameState.extent; + } + var tileRange = tileGrid.getTileRangeForExtentAndResolution( + extent, tileResolution); + + var canvasWidth = tilePixelSize * tileRange.getWidth(); + var canvasHeight = tilePixelSize * tileRange.getHeight(); + + var canvas, context; + if (goog.isNull(this.canvas_)) { + goog.asserts.assert(goog.isNull(this.canvasSize_)); + goog.asserts.assert(goog.isNull(this.context_)); + goog.asserts.assert(goog.isNull(this.renderedCanvasTileRange_)); + canvas = /** @type {HTMLCanvasElement} */ + (goog.dom.createElement(goog.dom.TagName.CANVAS)); + canvas.width = canvasWidth; + canvas.height = canvasHeight; + context = /** @type {CanvasRenderingContext2D} */ (canvas.getContext('2d')); + this.canvas_ = canvas; + this.canvasSize_ = [canvasWidth, canvasHeight]; + this.context_ = context; + } else { + goog.asserts.assert(!goog.isNull(this.canvasSize_)); + goog.asserts.assert(!goog.isNull(this.context_)); + canvas = this.canvas_; + context = this.context_; + if (this.canvasSize_[0] < canvasWidth || + this.canvasSize_[1] < canvasHeight) { + // Canvas is too small, make it bigger + canvas.width = canvasWidth; + canvas.height = canvasHeight; + this.canvasSize_ = [canvasWidth, canvasHeight]; + this.renderedCanvasTileRange_ = null; + } else { + canvasWidth = this.canvasSize_[0]; + canvasHeight = this.canvasSize_[1]; + if (z != this.renderedCanvasZ_ || + !this.renderedCanvasTileRange_.containsTileRange(tileRange)) { + this.renderedCanvasTileRange_ = null; + } + } + } + + var canvasTileRange, canvasTileRangeWidth, minX, minY; + if (goog.isNull(this.renderedCanvasTileRange_)) { + canvasTileRangeWidth = canvasWidth / tilePixelSize; + var canvasTileRangeHeight = canvasHeight / tilePixelSize; + minX = tileRange.minX - + Math.floor((canvasTileRangeWidth - tileRange.getWidth()) / 2); + minY = tileRange.minY - + Math.floor((canvasTileRangeHeight - tileRange.getHeight()) / 2); + this.renderedCanvasZ_ = z; + this.renderedCanvasTileRange_ = new ol.TileRange( + minX, minX + canvasTileRangeWidth - 1, + minY, minY + canvasTileRangeHeight - 1); + this.renderedTiles_ = + new Array(canvasTileRangeWidth * canvasTileRangeHeight); + canvasTileRange = this.renderedCanvasTileRange_; + } else { + canvasTileRange = this.renderedCanvasTileRange_; + canvasTileRangeWidth = canvasTileRange.getWidth(); + } + + goog.asserts.assert(canvasTileRange.containsTileRange(tileRange)); + + /** + * @type {Object.>} + */ + var tilesToDrawByZ = {}; + tilesToDrawByZ[z] = {}; + /** @type {Array.} */ + var tilesToClear = []; + + var getTileIfLoaded = this.createGetTileIfLoadedFunction(function(tile) { + return !goog.isNull(tile) && tile.getState() == ol.TileState.LOADED; + }, tileSource, pixelRatio, projection); + var findLoadedTiles = goog.bind(tileSource.findLoadedTiles, tileSource, + tilesToDrawByZ, getTileIfLoaded); + + var useInterimTilesOnError = tileLayer.getUseInterimTilesOnError(); + if (!goog.isDef(useInterimTilesOnError)) { + useInterimTilesOnError = true; + } + + var tmpExtent = ol.extent.createEmpty(); + var tmpTileRange = new ol.TileRange(0, 0, 0, 0); + var childTileRange, fullyLoaded, tile, tileState, x, y; + for (x = tileRange.minX; x <= tileRange.maxX; ++x) { + for (y = tileRange.minY; y <= tileRange.maxY; ++y) { + + tile = tileSource.getTile(z, x, y, pixelRatio, projection); + tileState = tile.getState(); + if (tileState == ol.TileState.LOADED || + tileState == ol.TileState.EMPTY || + (tileState == ol.TileState.ERROR && !useInterimTilesOnError)) { + tilesToDrawByZ[z][tile.tileCoord.toString()] = tile; + continue; + } + + fullyLoaded = tileGrid.forEachTileCoordParentTileRange( + tile.tileCoord, findLoadedTiles, null, tmpTileRange, tmpExtent); + if (!fullyLoaded) { + // FIXME we do not need to clear the tile if it is fully covered by its + // children + tilesToClear.push(tile); + childTileRange = tileGrid.getTileCoordChildTileRange( + tile.tileCoord, tmpTileRange, tmpExtent); + if (!goog.isNull(childTileRange)) { + findLoadedTiles(z + 1, childTileRange); + } + } + + } + } + + var i, ii; + for (i = 0, ii = tilesToClear.length; i < ii; ++i) { + tile = tilesToClear[i]; + x = tilePixelSize * (tile.tileCoord.x - canvasTileRange.minX); + y = tilePixelSize * (canvasTileRange.maxY - tile.tileCoord.y); + context.clearRect(x, y, tilePixelSize, tilePixelSize); + } + + /** @type {Array.} */ + var zs = goog.array.map(goog.object.getKeys(tilesToDrawByZ), Number); + goog.array.sort(zs); + var opaque = tileSource.getOpaque(); + var origin = ol.extent.getTopLeft(tileGrid.getTileCoordExtent( + new ol.TileCoord(z, canvasTileRange.minX, canvasTileRange.maxY), + tmpExtent)); + var currentZ, index, scale, tileCoordKey, tileExtent, tilesToDraw; + var ix, iy, interimTileExtent, interimTileRange, maxX, maxY; + var height, width; + for (i = 0, ii = zs.length; i < ii; ++i) { + currentZ = zs[i]; + tilePixelSize = + tileSource.getTilePixelSize(currentZ, pixelRatio, projection); + tilesToDraw = tilesToDrawByZ[currentZ]; + if (currentZ == z) { + for (tileCoordKey in tilesToDraw) { + tile = tilesToDraw[tileCoordKey]; + index = + (tile.tileCoord.y - canvasTileRange.minY) * canvasTileRangeWidth + + (tile.tileCoord.x - canvasTileRange.minX); + if (this.renderedTiles_[index] != tile) { + x = tilePixelSize * (tile.tileCoord.x - canvasTileRange.minX); + y = tilePixelSize * (canvasTileRange.maxY - tile.tileCoord.y); + tileState = tile.getState(); + if (tileState == ol.TileState.EMPTY || + (tileState == ol.TileState.ERROR && !useInterimTilesOnError) || + !opaque) { + context.clearRect(x, y, tilePixelSize, tilePixelSize); + } + if (tileState == ol.TileState.LOADED) { + context.drawImage(tile.getImage(), + tileGutter, tileGutter, tilePixelSize, tilePixelSize, + x, y, tilePixelSize, tilePixelSize); + } + this.renderedTiles_[index] = tile; + } + } + } else { + scale = tileGrid.getResolution(currentZ) / tileResolution; + for (tileCoordKey in tilesToDraw) { + tile = tilesToDraw[tileCoordKey]; + tileExtent = tileGrid.getTileCoordExtent(tile.tileCoord, tmpExtent); + x = (tileExtent[0] - origin[0]) / tilePixelResolution; + y = (origin[1] - tileExtent[3]) / tilePixelResolution; + width = scale * tilePixelSize; + height = scale * tilePixelSize; + tileState = tile.getState(); + if (tileState == ol.TileState.EMPTY || !opaque) { + context.clearRect(x, y, width, height); + } + if (tileState == ol.TileState.LOADED) { + context.drawImage(tile.getImage(), + tileGutter, tileGutter, tilePixelSize, tilePixelSize, + x, y, width, height); + } + interimTileRange = + tileGrid.getTileRangeForExtentAndZ(tileExtent, z, tmpTileRange); + minX = Math.max(interimTileRange.minX, canvasTileRange.minX); + maxX = Math.min(interimTileRange.maxX, canvasTileRange.maxX); + minY = Math.max(interimTileRange.minY, canvasTileRange.minY); + maxY = Math.min(interimTileRange.maxY, canvasTileRange.maxY); + for (ix = minX; ix <= maxX; ++ix) { + for (iy = minY; iy <= maxY; ++iy) { + index = (iy - canvasTileRange.minY) * canvasTileRangeWidth + + (ix - canvasTileRange.minX); + this.renderedTiles_[index] = undefined; + } + } + } + } + } + + this.updateUsedTiles(frameState.usedTiles, tileSource, z, tileRange); + this.manageTilePyramid(frameState, tileSource, tileGrid, pixelRatio, + projection, extent, z, tileLayer.getPreload()); + this.scheduleExpireCache(frameState, tileSource); + this.updateLogos(frameState, tileSource); + + ol.vec.Mat4.makeTransform2D(this.imageTransform_, + pixelRatio * frameState.size[0] / 2, + pixelRatio * frameState.size[1] / 2, + pixelRatio * tilePixelResolution / view2DState.resolution, + pixelRatio * tilePixelResolution / view2DState.resolution, + view2DState.rotation, + (origin[0] - center[0]) / tilePixelResolution, + (center[1] - origin[1]) / tilePixelResolution); + +}; diff --git a/float-no-zero/ol/ol/renderer/canvas/canvasvectorlayerrenderer.js b/float-no-zero/ol/ol/renderer/canvas/canvasvectorlayerrenderer.js new file mode 100644 index 0000000000..cf6715b075 --- /dev/null +++ b/float-no-zero/ol/ol/renderer/canvas/canvasvectorlayerrenderer.js @@ -0,0 +1,290 @@ +goog.provide('ol.renderer.canvas.VectorLayer'); + +goog.require('goog.asserts'); +goog.require('goog.dom'); +goog.require('goog.dom.TagName'); +goog.require('goog.events'); +goog.require('goog.functions'); +goog.require('ol.ViewHint'); +goog.require('ol.extent'); +goog.require('ol.feature'); +goog.require('ol.layer.Vector'); +goog.require('ol.render.EventType'); +goog.require('ol.render.canvas.ReplayGroup'); +goog.require('ol.renderer.canvas.Layer'); +goog.require('ol.renderer.vector'); +goog.require('ol.source.Vector'); + + + +/** + * @constructor + * @extends {ol.renderer.canvas.Layer} + * @param {ol.renderer.Map} mapRenderer Map renderer. + * @param {ol.layer.Vector} vectorLayer Vector layer. + */ +ol.renderer.canvas.VectorLayer = function(mapRenderer, vectorLayer) { + + goog.base(this, mapRenderer, vectorLayer); + + /** + * @private + * @type {boolean} + */ + this.dirty_ = false; + + /** + * @private + * @type {number} + */ + this.renderedRevision_ = -1; + + /** + * @private + * @type {number} + */ + this.renderedResolution_ = NaN; + + /** + * @private + * @type {ol.Extent} + */ + this.renderedExtent_ = ol.extent.createEmpty(); + + /** + * @private + * @type {ol.render.canvas.ReplayGroup} + */ + this.replayGroup_ = null; + + /** + * @type {HTMLCanvasElement} + */ + var canvas = /** @type {HTMLCanvasElement} */ + (goog.dom.createElement(goog.dom.TagName.CANVAS)); + + /** + * @private + * @type {CanvasRenderingContext2D} + */ + this.context_ = /** @type {CanvasRenderingContext2D} */ + (canvas.getContext('2d')); + +}; +goog.inherits(ol.renderer.canvas.VectorLayer, ol.renderer.canvas.Layer); + + +/** + * @inheritDoc + */ +ol.renderer.canvas.VectorLayer.prototype.composeFrame = + function(frameState, layerState, context) { + + var transform = this.getTransform(frameState); + + this.dispatchPreComposeEvent(context, frameState, transform); + + var replayGroup = this.replayGroup_; + if (!goog.isNull(replayGroup) && !replayGroup.isEmpty()) { + var layer = this.getLayer(); + var replayContext; + if (layer.hasListener(ol.render.EventType.RENDER)) { + // resize and clear + this.context_.canvas.width = context.canvas.width; + this.context_.canvas.height = context.canvas.height; + replayContext = this.context_; + } else { + replayContext = context; + } + var renderGeometryFunction = this.getRenderGeometryFunction_(); + goog.asserts.assert(goog.isFunction(renderGeometryFunction)); + replayContext.globalAlpha = layerState.opacity; + replayGroup.replay( + replayContext, frameState.extent, frameState.pixelRatio, transform, + frameState.view2DState.rotation, renderGeometryFunction); + + if (replayContext != context) { + this.dispatchRenderEvent(replayContext, frameState, transform); + context.drawImage(replayContext.canvas, 0, 0); + } + } + + this.dispatchPostComposeEvent(context, frameState, transform); + +}; + + +/** + * @inheritDoc + */ +ol.renderer.canvas.VectorLayer.prototype.forEachFeatureAtPixel = + function(coordinate, frameState, callback, thisArg) { + if (goog.isNull(this.replayGroup_)) { + return undefined; + } else { + var extent = frameState.extent; + var resolution = frameState.view2DState.resolution; + var rotation = frameState.view2DState.rotation; + var layer = this.getLayer(); + var renderGeometryFunction = this.getRenderGeometryFunction_(); + goog.asserts.assert(goog.isFunction(renderGeometryFunction)); + return this.replayGroup_.forEachGeometryAtPixel(extent, resolution, + rotation, coordinate, renderGeometryFunction, + /** + * @param {ol.geom.Geometry} geometry Geometry. + * @param {Object} data Data. + * @return {?} Callback result. + */ + function(geometry, data) { + var feature = /** @type {ol.Feature} */ (data); + goog.asserts.assert(goog.isDef(feature)); + return callback.call(thisArg, feature, layer); + }); + } +}; + + +/** + * @private + * @return {function(ol.geom.Geometry): boolean} Render geometry function. + */ +ol.renderer.canvas.VectorLayer.prototype.getRenderGeometryFunction_ = + function() { + var vectorLayer = this.getLayer(); + goog.asserts.assertInstanceof(vectorLayer, ol.layer.Vector); + var renderGeometryFunctions = vectorLayer.getRenderGeometryFunctions(); + if (!goog.isDef(renderGeometryFunctions)) { + return goog.functions.TRUE; + } + var renderGeometryFunctionsArray = renderGeometryFunctions.getArray(); + switch (renderGeometryFunctionsArray.length) { + case 0: + return goog.functions.TRUE; + case 1: + return renderGeometryFunctionsArray[0]; + default: + return ( + /** + * @param {ol.geom.Geometry} geometry Geometry. + * @return {boolean} Render geometry. + */ + function(geometry) { + var i, ii; + for (i = 0, ii = renderGeometryFunctionsArray.length; i < ii; ++i) { + if (!renderGeometryFunctionsArray[i](geometry)) { + return false; + } + } + return true; + }); + } +}; + + +/** + * Handle changes in image style state. + * @param {goog.events.Event} event Image style change event. + * @private + */ +ol.renderer.canvas.VectorLayer.prototype.handleImageChange_ = + function(event) { + this.renderIfReadyAndVisible(); +}; + + +/** + * @inheritDoc + */ +ol.renderer.canvas.VectorLayer.prototype.prepareFrame = + function(frameState, layerState) { + + var vectorLayer = this.getLayer(); + goog.asserts.assertInstanceof(vectorLayer, ol.layer.Vector); + var vectorSource = vectorLayer.getSource(); + goog.asserts.assertInstanceof(vectorSource, ol.source.Vector); + + this.updateAttributions( + frameState.attributions, vectorSource.getAttributions()); + this.updateLogos(frameState, vectorSource); + + if (!this.dirty_ && (frameState.viewHints[ol.ViewHint.ANIMATING] || + frameState.viewHints[ol.ViewHint.INTERACTING])) { + return; + } + + var frameStateExtent = frameState.extent; + var frameStateResolution = frameState.view2DState.resolution; + var pixelRatio = frameState.pixelRatio; + var vectorLayerRevision = vectorLayer.getRevision(); + + if (!this.dirty_ && + this.renderedResolution_ == frameStateResolution && + this.renderedRevision_ == vectorLayerRevision && + ol.extent.containsExtent(this.renderedExtent_, frameStateExtent)) { + return; + } + + var extent = this.renderedExtent_; + var xBuffer = ol.extent.getWidth(frameStateExtent) / 4; + var yBuffer = ol.extent.getHeight(frameStateExtent) / 4; + extent[0] = frameStateExtent[0] - xBuffer; + extent[1] = frameStateExtent[1] - yBuffer; + extent[2] = frameStateExtent[2] + xBuffer; + extent[3] = frameStateExtent[3] + yBuffer; + + // FIXME dispose of old replayGroup in post render + goog.dispose(this.replayGroup_); + this.replayGroup_ = null; + + this.dirty_ = false; + + var styleFunction = vectorLayer.getStyleFunction(); + if (!goog.isDef(styleFunction)) { + styleFunction = ol.feature.defaultStyleFunction; + } + var tolerance = frameStateResolution / (2 * pixelRatio); + var replayGroup = new ol.render.canvas.ReplayGroup(tolerance, extent); + vectorSource.forEachFeatureInExtent(extent, + /** + * @param {ol.Feature} feature Feature. + */ + function(feature) { + var dirty = + this.renderFeature(feature, frameStateResolution, pixelRatio, + styleFunction, replayGroup); + this.dirty_ = this.dirty_ || dirty; + }, this); + replayGroup.finish(); + + this.renderedResolution_ = frameStateResolution; + this.renderedRevision_ = vectorLayerRevision; + this.replayGroup_ = replayGroup; + +}; + + +/** + * @param {ol.Feature} feature Feature. + * @param {number} resolution Resolution. + * @param {number} pixelRatio Pixel ratio. + * @param {ol.feature.StyleFunction} styleFunction Style function. + * @param {ol.render.canvas.ReplayGroup} replayGroup Replay group. + * @return {boolean} `true` if an image is loading. + */ +ol.renderer.canvas.VectorLayer.prototype.renderFeature = + function(feature, resolution, pixelRatio, styleFunction, replayGroup) { + var styles = styleFunction(feature, resolution); + if (!goog.isDefAndNotNull(styles)) { + return false; + } + // simplify to a tolerance of half a device pixel + var squaredTolerance = + resolution * resolution / (4 * pixelRatio * pixelRatio); + var i, ii, loading = false; + for (i = 0, ii = styles.length; i < ii; ++i) { + loading = ol.renderer.vector.renderFeature( + replayGroup, feature, styles[i], squaredTolerance, feature, + this.handleImageChange_, this) || loading; + } + return loading; +}; diff --git a/float-no-zero/ol/ol/renderer/dom/domimagelayerrenderer.js b/float-no-zero/ol/ol/renderer/dom/domimagelayerrenderer.js new file mode 100644 index 0000000000..5dd4bab463 --- /dev/null +++ b/float-no-zero/ol/ol/renderer/dom/domimagelayerrenderer.js @@ -0,0 +1,143 @@ +goog.provide('ol.renderer.dom.ImageLayer'); + +goog.require('goog.asserts'); +goog.require('goog.dom'); +goog.require('goog.dom.TagName'); +goog.require('goog.events'); +goog.require('goog.events.EventType'); +goog.require('goog.vec.Mat4'); +goog.require('ol.ImageBase'); +goog.require('ol.ImageState'); +goog.require('ol.ViewHint'); +goog.require('ol.dom'); +goog.require('ol.layer.Image'); +goog.require('ol.renderer.dom.Layer'); +goog.require('ol.source.Image'); +goog.require('ol.vec.Mat4'); + + + +/** + * @constructor + * @extends {ol.renderer.dom.Layer} + * @param {ol.renderer.Map} mapRenderer Map renderer. + * @param {ol.layer.Image} imageLayer Image layer. + */ +ol.renderer.dom.ImageLayer = function(mapRenderer, imageLayer) { + var target = goog.dom.createElement(goog.dom.TagName.DIV); + target.style.position = 'absolute'; + + goog.base(this, mapRenderer, imageLayer, target); + + /** + * The last rendered image. + * @private + * @type {?ol.ImageBase} + */ + this.image_ = null; + + /** + * @private + * @type {goog.vec.Mat4.Number} + */ + this.transform_ = goog.vec.Mat4.createNumberIdentity(); + +}; +goog.inherits(ol.renderer.dom.ImageLayer, ol.renderer.dom.Layer); + + +/** + * @inheritDoc + */ +ol.renderer.dom.ImageLayer.prototype.forEachFeatureAtPixel = + function(coordinate, frameState, callback, thisArg) { + var layer = this.getLayer(); + var source = layer.getSource(); + goog.asserts.assertInstanceof(source, ol.source.Image); + var extent = frameState.extent; + var resolution = frameState.view2DState.resolution; + var rotation = frameState.view2DState.rotation; + return source.forEachFeatureAtPixel(extent, resolution, rotation, coordinate, + /** + * @param {ol.Feature} feature Feature. + * @return {?} Callback result. + */ + function(feature) { + return callback.call(thisArg, feature, layer); + }); +}; + + +/** + * @inheritDoc + */ +ol.renderer.dom.ImageLayer.prototype.prepareFrame = + function(frameState, layerState) { + + var view2DState = frameState.view2DState; + var viewCenter = view2DState.center; + var viewResolution = view2DState.resolution; + var viewRotation = view2DState.rotation; + + var image = this.image_; + var imageLayer = this.getLayer(); + goog.asserts.assertInstanceof(imageLayer, ol.layer.Image); + var imageSource = imageLayer.getSource(); + goog.asserts.assertInstanceof(imageSource, ol.source.Image); + + var hints = frameState.viewHints; + + if (!hints[ol.ViewHint.ANIMATING] && !hints[ol.ViewHint.INTERACTING]) { + var image_ = imageSource.getImage(frameState.extent, viewResolution, + frameState.pixelRatio, view2DState.projection); + if (!goog.isNull(image_)) { + var imageState = image_.getState(); + if (imageState == ol.ImageState.IDLE) { + goog.events.listenOnce(image_, goog.events.EventType.CHANGE, + this.handleImageChange, false, this); + image_.load(); + } else if (imageState == ol.ImageState.LOADED) { + image = image_; + } + } + } + + if (!goog.isNull(image)) { + var imageExtent = image.getExtent(); + var imageResolution = image.getResolution(); + var transform = goog.vec.Mat4.createNumber(); + ol.vec.Mat4.makeTransform2D(transform, + frameState.size[0] / 2, frameState.size[1] / 2, + imageResolution / viewResolution, imageResolution / viewResolution, + viewRotation, + (imageExtent[0] - viewCenter[0]) / imageResolution, + (viewCenter[1] - imageExtent[3]) / imageResolution); + if (image != this.image_) { + var imageElement = image.getImageElement(this); + // Bootstrap sets the style max-width: 100% for all images, which breaks + // prevents the image from being displayed in FireFox. Workaround by + // overriding the max-width style. + imageElement.style.maxWidth = 'none'; + imageElement.style.position = 'absolute'; + goog.dom.removeChildren(this.target); + goog.dom.appendChild(this.target, imageElement); + this.image_ = image; + } + this.setTransform_(transform); + this.updateAttributions(frameState.attributions, image.getAttributions()); + this.updateLogos(frameState, imageSource); + } + +}; + + +/** + * @param {goog.vec.Mat4.Number} transform Transform. + * @private + */ +ol.renderer.dom.ImageLayer.prototype.setTransform_ = function(transform) { + if (!ol.vec.Mat4.equals2D(transform, this.transform_)) { + ol.dom.transformElement2D(this.target, transform, 6); + goog.vec.Mat4.setFromArray(this.transform_, transform); + } +}; diff --git a/float-no-zero/ol/ol/renderer/dom/domlayerrenderer.js b/float-no-zero/ol/ol/renderer/dom/domlayerrenderer.js new file mode 100644 index 0000000000..e42c6f3fc1 --- /dev/null +++ b/float-no-zero/ol/ol/renderer/dom/domlayerrenderer.js @@ -0,0 +1,35 @@ +goog.provide('ol.renderer.dom.Layer'); + +goog.require('goog.dom'); +goog.require('ol.layer.Layer'); +goog.require('ol.renderer.Layer'); + + + +/** + * @constructor + * @extends {ol.renderer.Layer} + * @param {ol.renderer.Map} mapRenderer Map renderer. + * @param {ol.layer.Layer} layer Layer. + * @param {!Element} target Target. + */ +ol.renderer.dom.Layer = function(mapRenderer, layer, target) { + + goog.base(this, mapRenderer, layer); + + /** + * @type {!Element} + * @protected + */ + this.target = target; + +}; +goog.inherits(ol.renderer.dom.Layer, ol.renderer.Layer); + + +/** + * @return {!Element} Target. + */ +ol.renderer.dom.Layer.prototype.getTarget = function() { + return this.target; +}; diff --git a/float-no-zero/ol/ol/renderer/dom/dommaprenderer.js b/float-no-zero/ol/ol/renderer/dom/dommaprenderer.js new file mode 100644 index 0000000000..0eaa8410bb --- /dev/null +++ b/float-no-zero/ol/ol/renderer/dom/dommaprenderer.js @@ -0,0 +1,153 @@ +goog.provide('ol.renderer.dom.Map'); + +goog.require('goog.asserts'); +goog.require('goog.dom'); +goog.require('goog.dom.TagName'); +goog.require('goog.functions'); +goog.require('goog.style'); +goog.require('ol.css'); +goog.require('ol.layer.Image'); +goog.require('ol.layer.Tile'); +goog.require('ol.renderer.Map'); +goog.require('ol.renderer.dom.ImageLayer'); +goog.require('ol.renderer.dom.Layer'); +goog.require('ol.renderer.dom.TileLayer'); +goog.require('ol.source.State'); + + + +/** + * @constructor + * @extends {ol.renderer.Map} + * @param {Element} container Container. + * @param {ol.Map} map Map. + */ +ol.renderer.dom.Map = function(container, map) { + + goog.base(this, container, map); + + /** + * @type {!Element} + * @private + */ + this.layersPane_ = goog.dom.createElement(goog.dom.TagName.DIV); + this.layersPane_.className = ol.css.CLASS_UNSELECTABLE; + var style = this.layersPane_.style; + style.position = 'absolute'; + style.width = '100%'; + style.height = '100%'; + + // in IE < 9, we need to return false from ondragstart to cancel the default + // behavior of dragging images, which is interfering with the custom handler + // in the Drag interaction subclasses + if (ol.LEGACY_IE_SUPPORT && ol.IS_LEGACY_IE) { + this.layersPane_.ondragstart = goog.functions.FALSE; + this.layersPane_.onselectstart = goog.functions.FALSE; + } + + goog.dom.insertChildAt(container, this.layersPane_, 0); + + /** + * @private + * @type {boolean} + */ + this.renderedVisible_ = true; + +}; +goog.inherits(ol.renderer.dom.Map, ol.renderer.Map); + + +/** + * @inheritDoc + */ +ol.renderer.dom.Map.prototype.createLayerRenderer = function(layer) { + var layerRenderer; + if (ol.ENABLE_IMAGE && layer instanceof ol.layer.Image) { + layerRenderer = new ol.renderer.dom.ImageLayer(this, layer); + } else if (ol.ENABLE_TILE && layer instanceof ol.layer.Tile) { + layerRenderer = new ol.renderer.dom.TileLayer(this, layer); + } else { + goog.asserts.fail(); + return null; + } + return layerRenderer; +}; + + +/** + * @inheritDoc + */ +ol.renderer.dom.Map.prototype.renderFrame = function(frameState) { + + if (goog.isNull(frameState)) { + if (this.renderedVisible_) { + goog.style.setElementShown(this.layersPane_, false); + this.renderedVisible_ = false; + } + return; + } + + /** + * @this {ol.renderer.dom.Map} + * @param {Element} elem + * @param {number} i + */ + var addChild; + + // appendChild is actually more performant than insertBefore + // in IE 7 and 8. http://jsperf.com/reattaching-dom-nodes + if (ol.LEGACY_IE_SUPPORT && ol.IS_LEGACY_IE) { + addChild = + /** + * @this {ol.renderer.dom.Map} + * @param {Element} elem + */ ( + function(elem) { + goog.dom.appendChild(this.layersPane_, elem); + }); + } else { + addChild = + /** + * @this {ol.renderer.dom.Map} + * @param {Element} elem + * @param {number} i + */ ( + function(elem, i) { + goog.dom.insertChildAt(this.layersPane_, elem, i); + }); + } + + var layerStates = frameState.layerStates; + var layersArray = frameState.layersArray; + var i, ii, layer, layerRenderer, layerState; + for (i = 0, ii = layersArray.length; i < ii; ++i) { + layer = layersArray[i]; + layerRenderer = /** @type {ol.renderer.dom.Layer} */ ( + this.getLayerRenderer(layer)); + goog.asserts.assertInstanceof(layerRenderer, ol.renderer.dom.Layer); + addChild.call(this, layerRenderer.getTarget(), i); + layerState = frameState.layerStates[goog.getUid(layer)]; + if (layerState.sourceState == ol.source.State.READY) { + layerRenderer.prepareFrame(frameState, layerState); + } + } + + var layerKey; + for (layerKey in this.getLayerRenderers()) { + if (!(layerKey in layerStates)) { + layerRenderer = this.getLayerRendererByKey(layerKey); + goog.asserts.assertInstanceof(layerRenderer, ol.renderer.dom.Layer); + goog.dom.removeNode(layerRenderer.getTarget()); + } + } + + if (!this.renderedVisible_) { + goog.style.setElementShown(this.layersPane_, true); + this.renderedVisible_ = true; + } + + this.calculateMatrices2D(frameState); + this.scheduleRemoveUnusedLayerRenderers(frameState); + this.scheduleExpireIconCache(frameState); + +}; diff --git a/float-no-zero/ol/ol/renderer/dom/domtilelayerrenderer.js b/float-no-zero/ol/ol/renderer/dom/domtilelayerrenderer.js new file mode 100644 index 0000000000..439fa0e145 --- /dev/null +++ b/float-no-zero/ol/ol/renderer/dom/domtilelayerrenderer.js @@ -0,0 +1,463 @@ +// FIXME probably need to reset TileLayerZ if offsets get too large +// FIXME when zooming out, preserve higher Z divs to avoid white flash + +goog.provide('ol.renderer.dom.TileLayer'); + +goog.require('goog.array'); +goog.require('goog.asserts'); +goog.require('goog.dom'); +goog.require('goog.dom.TagName'); +goog.require('goog.object'); +goog.require('goog.style'); +goog.require('goog.vec.Mat4'); +goog.require('ol.Coordinate'); +goog.require('ol.Tile'); +goog.require('ol.TileCoord'); +goog.require('ol.TileRange'); +goog.require('ol.TileState'); +goog.require('ol.ViewHint'); +goog.require('ol.dom'); +goog.require('ol.dom.BrowserFeature'); +goog.require('ol.extent'); +goog.require('ol.layer.Tile'); +goog.require('ol.renderer.dom.Layer'); +goog.require('ol.source.Tile'); +goog.require('ol.tilegrid.TileGrid'); +goog.require('ol.vec.Mat4'); + + + +/** + * @constructor + * @extends {ol.renderer.dom.Layer} + * @param {ol.renderer.Map} mapRenderer Map renderer. + * @param {ol.layer.Tile} tileLayer Tile layer. + */ +ol.renderer.dom.TileLayer = function(mapRenderer, tileLayer) { + + var target = goog.dom.createElement(goog.dom.TagName.DIV); + target.style.position = 'absolute'; + + // Needed for IE7-8 to render a transformed element correctly + if (ol.dom.BrowserFeature.USE_MS_MATRIX_TRANSFORM) { + target.style.width = '100%'; + target.style.height = '100%'; + } + + goog.base(this, mapRenderer, tileLayer, target); + + /** + * @private + * @type {boolean} + */ + this.renderedVisible_ = true; + + /** + * @private + * @type {number} + */ + this.renderedOpacity_ = 1; + + /** + * @private + * @type {number} + */ + this.renderedRevision_ = 0; + + /** + * @private + * @type {Object.} + */ + this.tileLayerZs_ = {}; + +}; +goog.inherits(ol.renderer.dom.TileLayer, ol.renderer.dom.Layer); + + +/** + * @inheritDoc + */ +ol.renderer.dom.TileLayer.prototype.prepareFrame = + function(frameState, layerState) { + + if (!layerState.visible) { + if (this.renderedVisible_) { + goog.style.setElementShown(this.target, false); + this.renderedVisible_ = false; + } + return; + } + + var pixelRatio = frameState.pixelRatio; + var view2DState = frameState.view2DState; + var projection = view2DState.projection; + + var tileLayer = this.getLayer(); + goog.asserts.assertInstanceof(tileLayer, ol.layer.Tile); + var tileSource = tileLayer.getSource(); + goog.asserts.assertInstanceof(tileSource, ol.source.Tile); + var tileGrid = tileSource.getTileGridForProjection(projection); + var tileGutter = tileSource.getGutter(); + var z = tileGrid.getZForResolution(view2DState.resolution); + var tileResolution = tileGrid.getResolution(z); + var center = view2DState.center; + var extent; + if (tileResolution == view2DState.resolution) { + center = this.snapCenterToPixel(center, tileResolution, frameState.size); + extent = ol.extent.getForView2DAndSize( + center, tileResolution, view2DState.rotation, frameState.size); + } else { + extent = frameState.extent; + } + var tileRange = tileGrid.getTileRangeForExtentAndResolution( + extent, tileResolution); + + /** @type {Object.>} */ + var tilesToDrawByZ = {}; + tilesToDrawByZ[z] = {}; + + var getTileIfLoaded = this.createGetTileIfLoadedFunction(function(tile) { + return !goog.isNull(tile) && tile.getState() == ol.TileState.LOADED; + }, tileSource, pixelRatio, projection); + var findLoadedTiles = goog.bind(tileSource.findLoadedTiles, tileSource, + tilesToDrawByZ, getTileIfLoaded); + + var useInterimTilesOnError = tileLayer.getUseInterimTilesOnError(); + if (!goog.isDef(useInterimTilesOnError)) { + useInterimTilesOnError = true; + } + + var tmpExtent = ol.extent.createEmpty(); + var tmpTileRange = new ol.TileRange(0, 0, 0, 0); + var childTileRange, fullyLoaded, tile, tileState, x, y; + for (x = tileRange.minX; x <= tileRange.maxX; ++x) { + for (y = tileRange.minY; y <= tileRange.maxY; ++y) { + + tile = tileSource.getTile(z, x, y, pixelRatio, projection); + tileState = tile.getState(); + if (tileState == ol.TileState.LOADED) { + tilesToDrawByZ[z][tile.tileCoord.toString()] = tile; + continue; + } else if (tileState == ol.TileState.EMPTY || + (tileState == ol.TileState.ERROR && + !useInterimTilesOnError)) { + continue; + } + + fullyLoaded = tileGrid.forEachTileCoordParentTileRange( + tile.tileCoord, findLoadedTiles, null, tmpTileRange, tmpExtent); + if (!fullyLoaded) { + childTileRange = tileGrid.getTileCoordChildTileRange( + tile.tileCoord, tmpTileRange, tmpExtent); + if (!goog.isNull(childTileRange)) { + findLoadedTiles(z + 1, childTileRange); + } + } + + } + + } + + // If the tile source revision changes, we destroy the existing DOM structure + // so that a new one will be created. It would be more efficient to modify + // the existing structure. + var tileLayerZ, tileLayerZKey; + if (this.renderedRevision_ != tileSource.getRevision()) { + for (tileLayerZKey in this.tileLayerZs_) { + tileLayerZ = this.tileLayerZs_[+tileLayerZKey]; + goog.dom.removeNode(tileLayerZ.target); + } + this.tileLayerZs_ = {}; + this.renderedRevision_ = tileSource.getRevision(); + } + + /** @type {Array.} */ + var zs = goog.array.map(goog.object.getKeys(tilesToDrawByZ), Number); + goog.array.sort(zs); + + /** @type {Object.} */ + var newTileLayerZKeys = {}; + + var iz, iziz, tileCoordKey, tileCoordOrigin, tilesToDraw; + for (iz = 0, iziz = zs.length; iz < iziz; ++iz) { + tileLayerZKey = zs[iz]; + if (tileLayerZKey in this.tileLayerZs_) { + tileLayerZ = this.tileLayerZs_[tileLayerZKey]; + } else { + tileCoordOrigin = + tileGrid.getTileCoordForCoordAndZ(center, tileLayerZKey); + tileLayerZ = new ol.renderer.dom.TileLayerZ_(tileGrid, tileCoordOrigin); + newTileLayerZKeys[tileLayerZKey] = true; + this.tileLayerZs_[tileLayerZKey] = tileLayerZ; + } + tilesToDraw = tilesToDrawByZ[tileLayerZKey]; + for (tileCoordKey in tilesToDraw) { + tileLayerZ.addTile(tilesToDraw[tileCoordKey], tileGutter); + } + tileLayerZ.finalizeAddTiles(); + } + + /** @type {Array.} */ + var tileLayerZKeys = + goog.array.map(goog.object.getKeys(this.tileLayerZs_), Number); + goog.array.sort(tileLayerZKeys); + + var i, ii, j, origin, resolution; + var transform = goog.vec.Mat4.createNumber(); + for (i = 0, ii = tileLayerZKeys.length; i < ii; ++i) { + tileLayerZKey = tileLayerZKeys[i]; + tileLayerZ = this.tileLayerZs_[tileLayerZKey]; + if (!(tileLayerZKey in tilesToDrawByZ)) { + goog.dom.removeNode(tileLayerZ.target); + delete this.tileLayerZs_[tileLayerZKey]; + continue; + } + resolution = tileLayerZ.getResolution(); + origin = tileLayerZ.getOrigin(); + ol.vec.Mat4.makeTransform2D(transform, + frameState.size[0] / 2, frameState.size[1] / 2, + resolution / view2DState.resolution, + resolution / view2DState.resolution, + view2DState.rotation, + (origin[0] - center[0]) / resolution, + (center[1] - origin[1]) / resolution); + tileLayerZ.setTransform(transform); + if (tileLayerZKey in newTileLayerZKeys) { + for (j = tileLayerZKey - 1; j >= 0; --j) { + if (j in this.tileLayerZs_) { + goog.dom.insertSiblingAfter( + tileLayerZ.target, this.tileLayerZs_[j].target); + break; + } + } + if (j < 0) { + goog.dom.insertChildAt(this.target, tileLayerZ.target, 0); + } + } else { + if (!frameState.viewHints[ol.ViewHint.ANIMATING] && + !frameState.viewHints[ol.ViewHint.INTERACTING]) { + tileLayerZ.removeTilesOutsideExtent(extent, tmpTileRange); + } + } + } + + if (layerState.opacity != this.renderedOpacity_) { + ol.dom.setOpacity(this.target, layerState.opacity); + this.renderedOpacity_ = layerState.opacity; + } + + if (layerState.visible && !this.renderedVisible_) { + goog.style.setElementShown(this.target, true); + this.renderedVisible_ = true; + } + + this.updateUsedTiles(frameState.usedTiles, tileSource, z, tileRange); + this.manageTilePyramid(frameState, tileSource, tileGrid, pixelRatio, + projection, extent, z, tileLayer.getPreload()); + this.scheduleExpireCache(frameState, tileSource); + this.updateLogos(frameState, tileSource); + +}; + + + +/** + * @constructor + * @private + * @param {ol.tilegrid.TileGrid} tileGrid Tile grid. + * @param {ol.TileCoord} tileCoordOrigin Tile coord origin. + */ +ol.renderer.dom.TileLayerZ_ = function(tileGrid, tileCoordOrigin) { + + /** + * @type {!Element} + */ + this.target = goog.dom.createElement(goog.dom.TagName.DIV); + this.target.style.position = 'absolute'; + this.target.style.width = '100%'; + this.target.style.height = '100%'; + + if (ol.LEGACY_IE_SUPPORT && ol.IS_LEGACY_IE) { + /** + * Needed due to issues with IE7-8 clipping of transformed elements + * Solution is to translate separately from the scaled/rotated elements + * @private + * @type {!Element} + */ + this.translateTarget_ = goog.dom.createElement(goog.dom.TagName.DIV); + this.translateTarget_.style.position = 'absolute'; + this.translateTarget_.style.width = '100%'; + this.translateTarget_.style.height = '100%'; + + goog.dom.appendChild(this.target, this.translateTarget_); + } + + /** + * @private + * @type {ol.tilegrid.TileGrid} + */ + this.tileGrid_ = tileGrid; + + /** + * @private + * @type {ol.TileCoord} + */ + this.tileCoordOrigin_ = tileCoordOrigin; + + /** + * @private + * @type {ol.Coordinate} + */ + this.origin_ = + ol.extent.getTopLeft(tileGrid.getTileCoordExtent(tileCoordOrigin)); + + /** + * @private + * @type {number} + */ + this.resolution_ = tileGrid.getResolution(tileCoordOrigin.z); + + /** + * @private + * @type {Object.} + */ + this.tiles_ = {}; + + /** + * @private + * @type {DocumentFragment} + */ + this.documentFragment_ = null; + + /** + * @private + * @type {goog.vec.Mat4.Number} + */ + this.transform_ = goog.vec.Mat4.createNumberIdentity(); + +}; + + +/** + * @param {ol.Tile} tile Tile. + * @param {number} tileGutter Tile gutter. + */ +ol.renderer.dom.TileLayerZ_.prototype.addTile = function(tile, tileGutter) { + var tileCoord = tile.tileCoord; + goog.asserts.assert(tileCoord.z == this.tileCoordOrigin_.z); + var tileCoordKey = tileCoord.toString(); + if (tileCoordKey in this.tiles_) { + return; + } + var tileSize = this.tileGrid_.getTileSize(tileCoord.z); + var image = tile.getImage(this); + var imageStyle = image.style; + // Bootstrap sets the style max-width: 100% for all images, which + // prevents the tile from being displayed in FireFox. Workaround + // by overriding the max-width style. + imageStyle.maxWidth = 'none'; + var tileElement; + var tileElementStyle; + if (tileGutter > 0) { + tileElement = goog.dom.createElement(goog.dom.TagName.DIV); + tileElementStyle = tileElement.style; + tileElementStyle.overflow = 'hidden'; + tileElementStyle.width = tileSize + 'px'; + tileElementStyle.height = tileSize + 'px'; + imageStyle.position = 'absolute'; + imageStyle.left = -tileGutter + 'px'; + imageStyle.top = -tileGutter + 'px'; + imageStyle.width = (tileSize + 2 * tileGutter) + 'px'; + imageStyle.height = (tileSize + 2 * tileGutter) + 'px'; + goog.dom.appendChild(tileElement, image); + } else { + imageStyle.width = tileSize + 'px'; + imageStyle.height = tileSize + 'px'; + tileElement = image; + tileElementStyle = imageStyle; + } + tileElementStyle.position = 'absolute'; + tileElementStyle.left = + ((tileCoord.x - this.tileCoordOrigin_.x) * tileSize) + 'px'; + tileElementStyle.top = + ((this.tileCoordOrigin_.y - tileCoord.y) * tileSize) + 'px'; + if (goog.isNull(this.documentFragment_)) { + this.documentFragment_ = document.createDocumentFragment(); + } + goog.dom.appendChild(this.documentFragment_, tileElement); + this.tiles_[tileCoordKey] = tile; +}; + + +/** + * FIXME empty description for jsdoc + */ +ol.renderer.dom.TileLayerZ_.prototype.finalizeAddTiles = function() { + if (!goog.isNull(this.documentFragment_)) { + if (ol.LEGACY_IE_SUPPORT && ol.IS_LEGACY_IE) { + goog.dom.appendChild(this.translateTarget_, this.documentFragment_); + } else { + goog.dom.appendChild(this.target, this.documentFragment_); + } + this.documentFragment_ = null; + } +}; + + +/** + * @return {ol.Coordinate} Origin. + */ +ol.renderer.dom.TileLayerZ_.prototype.getOrigin = function() { + return this.origin_; +}; + + +/** + * @return {number} Resolution. + */ +ol.renderer.dom.TileLayerZ_.prototype.getResolution = function() { + return this.resolution_; +}; + + +/** + * @param {ol.Extent} extent Extent. + * @param {ol.TileRange=} opt_tileRange Temporary ol.TileRange object. + */ +ol.renderer.dom.TileLayerZ_.prototype.removeTilesOutsideExtent = + function(extent, opt_tileRange) { + var tileRange = this.tileGrid_.getTileRangeForExtentAndZ( + extent, this.tileCoordOrigin_.z, opt_tileRange); + /** @type {Array.} */ + var tilesToRemove = []; + var tile, tileCoordKey; + for (tileCoordKey in this.tiles_) { + tile = this.tiles_[tileCoordKey]; + if (!tileRange.contains(tile.tileCoord)) { + tilesToRemove.push(tile); + } + } + var i, ii; + for (i = 0, ii = tilesToRemove.length; i < ii; ++i) { + tile = tilesToRemove[i]; + tileCoordKey = tile.tileCoord.toString(); + goog.dom.removeNode(tile.getImage(this)); + delete this.tiles_[tileCoordKey]; + } +}; + + +/** + * @param {goog.vec.Mat4.Number} transform Transform. + */ +ol.renderer.dom.TileLayerZ_.prototype.setTransform = function(transform) { + if (!ol.vec.Mat4.equals2D(transform, this.transform_)) { + if (ol.LEGACY_IE_SUPPORT && ol.IS_LEGACY_IE) { + ol.dom.transformElement2D(this.target, transform, 6, + this.translateTarget_); + } else { + ol.dom.transformElement2D(this.target, transform, 6); + } + goog.vec.Mat4.setFromArray(this.transform_, transform); + } +}; diff --git a/float-no-zero/ol/ol/renderer/layerrenderer.js b/float-no-zero/ol/ol/renderer/layerrenderer.js new file mode 100644 index 0000000000..cdfcb001d2 --- /dev/null +++ b/float-no-zero/ol/ol/renderer/layerrenderer.js @@ -0,0 +1,296 @@ +goog.provide('ol.renderer.Layer'); + +goog.require('goog.Disposable'); +goog.require('ol.FrameState'); +goog.require('ol.Image'); +goog.require('ol.ImageState'); +goog.require('ol.Tile'); +goog.require('ol.TileRange'); +goog.require('ol.TileState'); +goog.require('ol.layer.Layer'); +goog.require('ol.layer.LayerState'); +goog.require('ol.source.Source'); +goog.require('ol.source.State'); +goog.require('ol.source.Tile'); + + + +/** + * @constructor + * @extends {goog.Disposable} + * @param {ol.renderer.Map} mapRenderer Map renderer. + * @param {ol.layer.Layer} layer Layer. + * @suppress {checkStructDictInheritance} + * @struct + */ +ol.renderer.Layer = function(mapRenderer, layer) { + + goog.base(this); + + /** + * @private + * @type {ol.renderer.Map} + */ + this.mapRenderer_ = mapRenderer; + + /** + * @private + * @type {ol.layer.Layer} + */ + this.layer_ = layer; + + +}; +goog.inherits(ol.renderer.Layer, goog.Disposable); + + +/** + * @param {ol.Coordinate} coordinate Coordinate. + * @param {ol.FrameState} frameState Frame state. + * @param {function(this: S, ol.Feature, ol.layer.Layer): T} callback Feature + * callback. + * @param {S} thisArg Value to use as `this` when executing `callback`. + * @return {T|undefined} Callback result. + * @template S,T + */ +ol.renderer.Layer.prototype.forEachFeatureAtPixel = goog.nullFunction; + + +/** + * @protected + * @return {ol.layer.Layer} Layer. + */ +ol.renderer.Layer.prototype.getLayer = function() { + return this.layer_; +}; + + +/** + * @protected + * @return {ol.Map} Map. + */ +ol.renderer.Layer.prototype.getMap = function() { + return this.mapRenderer_.getMap(); +}; + + +/** + * @protected + * @return {ol.renderer.Map} Map renderer. + */ +ol.renderer.Layer.prototype.getMapRenderer = function() { + return this.mapRenderer_; +}; + + +/** + * Handle changes in image state. + * @param {goog.events.Event} event Image change event. + * @protected + */ +ol.renderer.Layer.prototype.handleImageChange = function(event) { + var image = /** @type {ol.Image} */ (event.target); + if (image.getState() === ol.ImageState.LOADED) { + this.renderIfReadyAndVisible(); + } +}; + + +/** + * @param {ol.FrameState} frameState Frame state. + * @param {ol.layer.LayerState} layerState Layer state. + */ +ol.renderer.Layer.prototype.prepareFrame = goog.abstractMethod; + + +/** + * @protected + */ +ol.renderer.Layer.prototype.renderIfReadyAndVisible = function() { + var layer = this.getLayer(); + if (layer.getVisible() && layer.getSourceState() == ol.source.State.READY) { + this.getMap().render(); + } +}; + + +/** + * @param {ol.FrameState} frameState Frame state. + * @param {ol.source.Tile} tileSource Tile source. + * @protected + */ +ol.renderer.Layer.prototype.scheduleExpireCache = + function(frameState, tileSource) { + if (tileSource.canExpireCache()) { + frameState.postRenderFunctions.push( + goog.partial( + /** + * @param {ol.source.Tile} tileSource Tile source. + * @param {ol.Map} map Map. + * @param {ol.FrameState} frameState Frame state. + */ + function(tileSource, map, frameState) { + var tileSourceKey = goog.getUid(tileSource).toString(); + tileSource.expireCache(frameState.usedTiles[tileSourceKey]); + }, tileSource)); + } +}; + + +/** + * @param {Object.} attributionsSet Attributions + * set (target). + * @param {Array.} attributions Attributions (source). + * @protected + */ +ol.renderer.Layer.prototype.updateAttributions = + function(attributionsSet, attributions) { + if (goog.isDefAndNotNull(attributions)) { + var attribution, i, ii; + for (i = 0, ii = attributions.length; i < ii; ++i) { + attribution = attributions[i]; + attributionsSet[goog.getUid(attribution).toString()] = attribution; + } + } +}; + + +/** + * @param {ol.FrameState} frameState Frame state. + * @param {ol.source.Source} source Source. + * @protected + */ +ol.renderer.Layer.prototype.updateLogos = function(frameState, source) { + var logo = source.getLogo(); + if (goog.isDef(logo)) { + frameState.logos[logo] = ''; + } +}; + + +/** + * @param {Object.>} usedTiles Used tiles. + * @param {ol.source.Tile} tileSource Tile source. + * @param {number} z Z. + * @param {ol.TileRange} tileRange Tile range. + * @protected + */ +ol.renderer.Layer.prototype.updateUsedTiles = + function(usedTiles, tileSource, z, tileRange) { + // FIXME should we use tilesToDrawByZ instead? + var tileSourceKey = goog.getUid(tileSource).toString(); + var zKey = z.toString(); + if (tileSourceKey in usedTiles) { + if (zKey in usedTiles[tileSourceKey]) { + usedTiles[tileSourceKey][zKey].extend(tileRange); + } else { + usedTiles[tileSourceKey][zKey] = tileRange; + } + } else { + usedTiles[tileSourceKey] = {}; + usedTiles[tileSourceKey][zKey] = tileRange; + } +}; + + +/** + * @param {function(ol.Tile): boolean} isLoadedFunction Function to + * determine if the tile is loaded. + * @param {ol.source.Tile} tileSource Tile source. + * @param {number} pixelRatio Pixel ratio. + * @param {ol.proj.Projection} projection Projection. + * @protected + * @return {function(number, number, number): ol.Tile} Returns a tile if it is + * loaded. + */ +ol.renderer.Layer.prototype.createGetTileIfLoadedFunction = + function(isLoadedFunction, tileSource, pixelRatio, projection) { + return ( + /** + * @param {number} z Z. + * @param {number} x X. + * @param {number} y Y. + * @return {ol.Tile} Tile. + */ + function(z, x, y) { + var tile = tileSource.getTile(z, x, y, pixelRatio, projection); + return isLoadedFunction(tile) ? tile : null; + }); +}; + + +/** + * @param {ol.Coordinate} center Center. + * @param {number} resolution Resolution. + * @param {ol.Size} size Size. + * @protected + * @return {ol.Coordinate} Snapped center. + */ +ol.renderer.Layer.prototype.snapCenterToPixel = + function(center, resolution, size) { + return [ + resolution * (Math.round(center[0] / resolution) + (size[0] % 2) / 2), + resolution * (Math.round(center[1] / resolution) + (size[1] % 2) / 2) + ]; +}; + + +/** + * Manage tile pyramid. + * This function performs a number of functions related to the tiles at the + * current zoom and lower zoom levels: + * - registers idle tiles in frameState.wantedTiles so that they are not + * discarded by the tile queue + * - enqueues missing tiles + * @param {ol.FrameState} frameState Frame state. + * @param {ol.source.Tile} tileSource Tile source. + * @param {ol.tilegrid.TileGrid} tileGrid Tile grid. + * @param {number} pixelRatio Pixel ratio. + * @param {ol.proj.Projection} projection Projection. + * @param {ol.Extent} extent Extent. + * @param {number} currentZ Current Z. + * @param {number|undefined} preload Load low resolution tiles up to 'preload' + * levels. + * @param {function(this: T, ol.Tile)=} opt_tileCallback Tile callback. + * @param {T=} opt_this Object to use as `this` in `opt_tileCallback`. + * @protected + * @template T + */ +ol.renderer.Layer.prototype.manageTilePyramid = function( + frameState, tileSource, tileGrid, pixelRatio, projection, extent, + currentZ, preload, opt_tileCallback, opt_this) { + var tileSourceKey = goog.getUid(tileSource).toString(); + if (!(tileSourceKey in frameState.wantedTiles)) { + frameState.wantedTiles[tileSourceKey] = {}; + } + var wantedTiles = frameState.wantedTiles[tileSourceKey]; + var tileQueue = frameState.tileQueue; + var minZoom = tileGrid.getMinZoom(); + var tile, tileRange, tileResolution, x, y, z; + if (!goog.isDef(preload)) { + preload = 0; + } + for (z = currentZ; z >= minZoom; --z) { + tileRange = tileGrid.getTileRangeForExtentAndZ(extent, z); + tileResolution = tileGrid.getResolution(z); + for (x = tileRange.minX; x <= tileRange.maxX; ++x) { + for (y = tileRange.minY; y <= tileRange.maxY; ++y) { + if (currentZ - z <= preload) { + tile = tileSource.getTile(z, x, y, pixelRatio, projection); + if (tile.getState() == ol.TileState.IDLE) { + wantedTiles[tile.tileCoord.toString()] = true; + if (!tileQueue.isKeyQueued(tile.getKey())) { + tileQueue.enqueue([tile, tileSourceKey, + tileGrid.getTileCoordCenter(tile.tileCoord), tileResolution]); + } + } + if (goog.isDef(opt_tileCallback)) { + opt_tileCallback.call(opt_this, tile); + } + } else { + tileSource.useTile(z, x, y); + } + } + } + } +}; diff --git a/float-no-zero/ol/ol/renderer/maprenderer.js b/float-no-zero/ol/ol/renderer/maprenderer.js new file mode 100644 index 0000000000..519ac52a65 --- /dev/null +++ b/float-no-zero/ol/ol/renderer/maprenderer.js @@ -0,0 +1,229 @@ +goog.provide('ol.renderer.Map'); + +goog.require('goog.Disposable'); +goog.require('goog.asserts'); +goog.require('goog.dispose'); +goog.require('goog.object'); +goog.require('goog.vec.Mat4'); +goog.require('ol.FrameState'); +goog.require('ol.layer.Layer'); +goog.require('ol.renderer.Layer'); +goog.require('ol.style.IconImageCache'); +goog.require('ol.vec.Mat4'); + + + +/** + * @constructor + * @extends {goog.Disposable} + * @param {Element} container Container. + * @param {ol.Map} map Map. + * @suppress {checkStructDictInheritance} + * @struct + */ +ol.renderer.Map = function(container, map) { + + goog.base(this); + + /** + * @private + * @type {ol.Map} + */ + this.map_ = map; + + /** + * @private + * @type {Object.} + */ + this.layerRenderers_ = {}; + +}; +goog.inherits(ol.renderer.Map, goog.Disposable); + + +/** + * @param {ol.FrameState} frameState FrameState. + * @protected + */ +ol.renderer.Map.prototype.calculateMatrices2D = function(frameState) { + var view2DState = frameState.view2DState; + var coordinateToPixelMatrix = frameState.coordinateToPixelMatrix; + goog.asserts.assert(!goog.isNull(coordinateToPixelMatrix)); + ol.vec.Mat4.makeTransform2D(coordinateToPixelMatrix, + frameState.size[0] / 2, frameState.size[1] / 2, + 1 / view2DState.resolution, -1 / view2DState.resolution, + -view2DState.rotation, + -view2DState.center[0], -view2DState.center[1]); + var inverted = goog.vec.Mat4.invert( + coordinateToPixelMatrix, frameState.pixelToCoordinateMatrix); + goog.asserts.assert(inverted); +}; + + +/** + * @param {ol.layer.Layer} layer Layer. + * @protected + * @return {ol.renderer.Layer} layerRenderer Layer renderer. + */ +ol.renderer.Map.prototype.createLayerRenderer = function(layer) { + return new ol.renderer.Layer(this, layer); +}; + + +/** + * @inheritDoc + */ +ol.renderer.Map.prototype.disposeInternal = function() { + goog.object.forEach(this.layerRenderers_, function(layerRenderer) { + goog.dispose(layerRenderer); + }); + goog.base(this, 'disposeInternal'); +}; + + +/** + * @param {ol.Coordinate} coordinate Coordinate. + * @param {ol.FrameState} frameState FrameState. + * @param {function(this: S, ol.Feature, ol.layer.Layer): T} callback Feature + * callback. + * @param {S} thisArg Value to use as `this` when executing `callback`. + * @param {function(this: U, ol.layer.Layer): boolean} layerFilter Layer filter + * function, only layers which are visible and for which this function + * returns `true` will be tested for features. By default, all visible + * layers will be tested. + * @param {U} thisArg2 Value to use as `this` when executing `layerFilter`. + * @return {T|undefined} Callback result. + * @template S,T,U + */ +ol.renderer.Map.prototype.forEachFeatureAtPixel = + function(coordinate, frameState, callback, thisArg, + layerFilter, thisArg2) { + var layersArray = this.map_.getLayerGroup().getLayersArray(); + var i; + for (i = layersArray.length - 1; i >= 0; --i) { + var layer = layersArray[i]; + if (layer.getVisible() && layerFilter.call(thisArg2, layer)) { + var layerRenderer = this.getLayerRenderer(layer); + var result = layerRenderer.forEachFeatureAtPixel( + coordinate, frameState, callback, thisArg); + if (result) { + return result; + } + } + } + return undefined; +}; + + +/** + * @param {ol.layer.Layer} layer Layer. + * @protected + * @return {ol.renderer.Layer} Layer renderer. + */ +ol.renderer.Map.prototype.getLayerRenderer = function(layer) { + var layerKey = goog.getUid(layer).toString(); + if (layerKey in this.layerRenderers_) { + return this.layerRenderers_[layerKey]; + } else { + var layerRenderer = this.createLayerRenderer(layer); + this.layerRenderers_[layerKey] = layerRenderer; + return layerRenderer; + } +}; + + +/** + * @param {string} layerKey Layer key. + * @protected + * @return {ol.renderer.Layer} Layer renderer. + */ +ol.renderer.Map.prototype.getLayerRendererByKey = function(layerKey) { + goog.asserts.assert(layerKey in this.layerRenderers_); + return this.layerRenderers_[layerKey]; +}; + + +/** + * @protected + * @return {Object.} Layer renderers. + */ +ol.renderer.Map.prototype.getLayerRenderers = function() { + return this.layerRenderers_; +}; + + +/** + * @return {ol.Map} Map. + */ +ol.renderer.Map.prototype.getMap = function() { + return this.map_; +}; + + +/** + * @param {string} layerKey Layer key. + * @return {ol.renderer.Layer} Layer renderer. + * @private + */ +ol.renderer.Map.prototype.removeLayerRendererByKey_ = function(layerKey) { + goog.asserts.assert(layerKey in this.layerRenderers_); + var layerRenderer = this.layerRenderers_[layerKey]; + delete this.layerRenderers_[layerKey]; + return layerRenderer; +}; + + +/** + * Render. + * @param {?ol.FrameState} frameState Frame state. + */ +ol.renderer.Map.prototype.renderFrame = goog.nullFunction; + + +/** + * @param {ol.Map} map Map. + * @param {ol.FrameState} frameState Frame state. + * @private + */ +ol.renderer.Map.prototype.removeUnusedLayerRenderers_ = + function(map, frameState) { + var layerKey; + for (layerKey in this.layerRenderers_) { + if (goog.isNull(frameState) || !(layerKey in frameState.layerStates)) { + goog.dispose(this.removeLayerRendererByKey_(layerKey)); + } + } +}; + + +/** + * @param {ol.FrameState} frameState Frame state. + * @protected + */ +ol.renderer.Map.prototype.scheduleExpireIconCache = function(frameState) { + frameState.postRenderFunctions.push( + /** + * @param {ol.Map} map Map. + * @param {ol.FrameState} frameState Frame state. + */ + function(map, frameState) { + ol.style.IconImageCache.getInstance().expire(); + }); +}; + + +/** + * @param {!ol.FrameState} frameState Frame state. + * @protected + */ +ol.renderer.Map.prototype.scheduleRemoveUnusedLayerRenderers = + function(frameState) { + var layerKey; + for (layerKey in this.layerRenderers_) { + if (!(layerKey in frameState.layerStates)) { + frameState.postRenderFunctions.push( + goog.bind(this.removeUnusedLayerRenderers_, this)); + return; + } + } +}; diff --git a/float-no-zero/ol/ol/renderer/webgl/webglimagelayerrenderer.js b/float-no-zero/ol/ol/renderer/webgl/webglimagelayerrenderer.js new file mode 100644 index 0000000000..e2ea1e0503 --- /dev/null +++ b/float-no-zero/ol/ol/renderer/webgl/webglimagelayerrenderer.js @@ -0,0 +1,202 @@ +goog.provide('ol.renderer.webgl.ImageLayer'); + +goog.require('goog.asserts'); +goog.require('goog.events'); +goog.require('goog.events.EventType'); +goog.require('goog.vec.Mat4'); +goog.require('goog.webgl'); +goog.require('ol.Coordinate'); +goog.require('ol.Extent'); +goog.require('ol.ImageBase'); +goog.require('ol.ImageState'); +goog.require('ol.ViewHint'); +goog.require('ol.layer.Image'); +goog.require('ol.renderer.webgl.Layer'); +goog.require('ol.source.Image'); + + + +/** + * @constructor + * @extends {ol.renderer.webgl.Layer} + * @param {ol.renderer.Map} mapRenderer Map renderer. + * @param {ol.layer.Image} imageLayer Tile layer. + */ +ol.renderer.webgl.ImageLayer = function(mapRenderer, imageLayer) { + + goog.base(this, mapRenderer, imageLayer); + + /** + * The last rendered image. + * @private + * @type {?ol.ImageBase} + */ + this.image_ = null; + +}; +goog.inherits(ol.renderer.webgl.ImageLayer, ol.renderer.webgl.Layer); + + +/** + * @param {ol.ImageBase} image Image. + * @private + * @return {WebGLTexture} Texture. + */ +ol.renderer.webgl.ImageLayer.prototype.createTexture_ = function(image) { + + // We meet the conditions to work with non-power of two textures. + // http://www.khronos.org/webgl/wiki/WebGL_and_OpenGL_Differences#Non-Power_of_Two_Texture_Support + // http://learningwebgl.com/blog/?p=2101 + + var imageElement = image.getImageElement(); + var gl = this.getWebGLMapRenderer().getGL(); + + var texture = gl.createTexture(); + + gl.bindTexture(goog.webgl.TEXTURE_2D, texture); + gl.texImage2D(goog.webgl.TEXTURE_2D, 0, goog.webgl.RGBA, + goog.webgl.RGBA, goog.webgl.UNSIGNED_BYTE, imageElement); + + gl.texParameteri( + goog.webgl.TEXTURE_2D, goog.webgl.TEXTURE_WRAP_S, + goog.webgl.CLAMP_TO_EDGE); + gl.texParameteri( + goog.webgl.TEXTURE_2D, goog.webgl.TEXTURE_WRAP_T, + goog.webgl.CLAMP_TO_EDGE); + gl.texParameteri( + goog.webgl.TEXTURE_2D, goog.webgl.TEXTURE_MIN_FILTER, goog.webgl.LINEAR); + gl.texParameteri( + goog.webgl.TEXTURE_2D, goog.webgl.TEXTURE_MAG_FILTER, goog.webgl.LINEAR); + + return texture; +}; + + +/** + * @inheritDoc + */ +ol.renderer.webgl.ImageLayer.prototype.forEachFeatureAtPixel = + function(coordinate, frameState, callback, thisArg) { + var layer = this.getLayer(); + var source = layer.getSource(); + goog.asserts.assertInstanceof(source, ol.source.Image); + var extent = frameState.extent; + var resolution = frameState.view2DState.resolution; + var rotation = frameState.view2DState.rotation; + return source.forEachFeatureAtPixel(extent, resolution, rotation, coordinate, + /** + * @param {ol.Feature} feature Feature. + * @return {?} Callback result. + */ + function(feature) { + return callback.call(thisArg, feature, layer); + }); +}; + + +/** + * @inheritDoc + */ +ol.renderer.webgl.ImageLayer.prototype.prepareFrame = + function(frameState, layerState) { + + var gl = this.getWebGLMapRenderer().getGL(); + + var view2DState = frameState.view2DState; + var viewCenter = view2DState.center; + var viewResolution = view2DState.resolution; + var viewRotation = view2DState.rotation; + + var image = this.image_; + var texture = this.texture; + var imageLayer = this.getLayer(); + goog.asserts.assertInstanceof(imageLayer, ol.layer.Image); + var imageSource = imageLayer.getSource(); + goog.asserts.assertInstanceof(imageSource, ol.source.Image); + + var hints = frameState.viewHints; + + if (!hints[ol.ViewHint.ANIMATING] && !hints[ol.ViewHint.INTERACTING]) { + var image_ = imageSource.getImage(frameState.extent, viewResolution, + frameState.pixelRatio, view2DState.projection); + if (!goog.isNull(image_)) { + var imageState = image_.getState(); + if (imageState == ol.ImageState.IDLE) { + goog.events.listenOnce(image_, goog.events.EventType.CHANGE, + this.handleImageChange, false, this); + image_.load(); + } else if (imageState == ol.ImageState.LOADED) { + image = image_; + texture = this.createTexture_(image_); + if (!goog.isNull(this.texture)) { + frameState.postRenderFunctions.push( + goog.partial( + /** + * @param {WebGLRenderingContext} gl GL. + * @param {WebGLTexture} texture Texture. + */ + function(gl, texture) { + if (!gl.isContextLost()) { + gl.deleteTexture(texture); + } + }, gl, this.texture)); + } + } + } + } + + if (!goog.isNull(image)) { + goog.asserts.assert(!goog.isNull(texture)); + + var canvas = this.getWebGLMapRenderer().getContext().getCanvas(); + + this.updateProjectionMatrix_(canvas.width, canvas.height, + viewCenter, viewResolution, viewRotation, image.getExtent()); + + // Translate and scale to flip the Y coord. + var texCoordMatrix = this.texCoordMatrix; + goog.vec.Mat4.makeIdentity(texCoordMatrix); + goog.vec.Mat4.scale(texCoordMatrix, 1, -1, 1); + goog.vec.Mat4.translate(texCoordMatrix, 0, -1, 0); + + this.image_ = image; + this.texture = texture; + + this.updateAttributions(frameState.attributions, image.getAttributions()); + this.updateLogos(frameState, imageSource); + } +}; + + +/** + * @param {number} canvasWidth Canvas width. + * @param {number} canvasHeight Canvas height. + * @param {ol.Coordinate} viewCenter View center. + * @param {number} viewResolution View resolution. + * @param {number} viewRotation View rotation. + * @param {ol.Extent} imageExtent Image extent. + * @private + */ +ol.renderer.webgl.ImageLayer.prototype.updateProjectionMatrix_ = + function(canvasWidth, canvasHeight, viewCenter, + viewResolution, viewRotation, imageExtent) { + + var canvasExtentWidth = canvasWidth * viewResolution; + var canvasExtentHeight = canvasHeight * viewResolution; + + var projectionMatrix = this.projectionMatrix; + goog.vec.Mat4.makeIdentity(projectionMatrix); + goog.vec.Mat4.scale(projectionMatrix, + 2 / canvasExtentWidth, 2 / canvasExtentHeight, 1); + goog.vec.Mat4.rotateZ(projectionMatrix, -viewRotation); + goog.vec.Mat4.translate(projectionMatrix, + imageExtent[0] - viewCenter[0], + imageExtent[1] - viewCenter[1], + 0); + goog.vec.Mat4.scale(projectionMatrix, + (imageExtent[2] - imageExtent[0]) / 2, + (imageExtent[3] - imageExtent[1]) / 2, + 1); + goog.vec.Mat4.translate(projectionMatrix, 1, 1, 0); + +}; diff --git a/float-no-zero/ol/ol/renderer/webgl/webgllayerrenderer.js b/float-no-zero/ol/ol/renderer/webgl/webgllayerrenderer.js new file mode 100644 index 0000000000..34d2cf8a7d --- /dev/null +++ b/float-no-zero/ol/ol/renderer/webgl/webgllayerrenderer.js @@ -0,0 +1,289 @@ +goog.provide('ol.renderer.webgl.Layer'); + +goog.require('goog.vec.Mat4'); +goog.require('goog.webgl'); +goog.require('ol.FrameState'); +goog.require('ol.color.Matrix'); +goog.require('ol.layer.Layer'); +goog.require('ol.render.Event'); +goog.require('ol.render.EventType'); +goog.require('ol.render.webgl.Immediate'); +goog.require('ol.renderer.Layer'); +goog.require('ol.renderer.webgl.map.shader.Color'); +goog.require('ol.renderer.webgl.map.shader.Default'); +goog.require('ol.structs.Buffer'); + + + +/** + * @constructor + * @extends {ol.renderer.Layer} + * @param {ol.renderer.Map} mapRenderer Map renderer. + * @param {ol.layer.Layer} layer Layer. + */ +ol.renderer.webgl.Layer = function(mapRenderer, layer) { + + goog.base(this, mapRenderer, layer); + + /** + * @private + * @type {ol.structs.Buffer} + */ + this.arrayBuffer_ = new ol.structs.Buffer([ + -1, -1, 0, 0, + 1, -1, 1, 0, + -1, 1, 0, 1, + 1, 1, 1, 1 + ]); + + /** + * @protected + * @type {WebGLTexture} + */ + this.texture = null; + + /** + * @protected + * @type {WebGLFramebuffer} + */ + this.framebuffer = null; + + /** + * @protected + * @type {number|undefined} + */ + this.framebufferDimension = undefined; + + /** + * @protected + * @type {!goog.vec.Mat4.Number} + */ + this.texCoordMatrix = goog.vec.Mat4.createNumber(); + + /** + * @protected + * @type {!goog.vec.Mat4.Number} + */ + this.projectionMatrix = goog.vec.Mat4.createNumberIdentity(); + + /** + * @private + * @type {ol.color.Matrix} + */ + this.colorMatrix_ = new ol.color.Matrix(); + + /** + * @private + * @type {ol.renderer.webgl.map.shader.Color.Locations} + */ + this.colorLocations_ = null; + + /** + * @private + * @type {ol.renderer.webgl.map.shader.Default.Locations} + */ + this.defaultLocations_ = null; + +}; +goog.inherits(ol.renderer.webgl.Layer, ol.renderer.Layer); + + +/** + * @param {ol.FrameState} frameState Frame state. + * @param {number} framebufferDimension Framebuffer dimension. + * @protected + */ +ol.renderer.webgl.Layer.prototype.bindFramebuffer = + function(frameState, framebufferDimension) { + + var mapRenderer = this.getWebGLMapRenderer(); + var gl = mapRenderer.getGL(); + + if (!goog.isDef(this.framebufferDimension) || + this.framebufferDimension != framebufferDimension) { + + frameState.postRenderFunctions.push( + goog.partial( + /** + * @param {WebGLRenderingContext} gl GL. + * @param {WebGLFramebuffer} framebuffer Framebuffer. + * @param {WebGLTexture} texture Texture. + */ + function(gl, framebuffer, texture) { + if (!gl.isContextLost()) { + gl.deleteFramebuffer(framebuffer); + gl.deleteTexture(texture); + } + }, gl, this.framebuffer, this.texture)); + + var texture = gl.createTexture(); + gl.bindTexture(goog.webgl.TEXTURE_2D, texture); + gl.texImage2D(goog.webgl.TEXTURE_2D, 0, goog.webgl.RGBA, + framebufferDimension, framebufferDimension, 0, goog.webgl.RGBA, + goog.webgl.UNSIGNED_BYTE, null); + gl.texParameteri(goog.webgl.TEXTURE_2D, goog.webgl.TEXTURE_MAG_FILTER, + goog.webgl.LINEAR); + gl.texParameteri(goog.webgl.TEXTURE_2D, goog.webgl.TEXTURE_MIN_FILTER, + goog.webgl.LINEAR); + + var framebuffer = gl.createFramebuffer(); + gl.bindFramebuffer(goog.webgl.FRAMEBUFFER, framebuffer); + gl.framebufferTexture2D(goog.webgl.FRAMEBUFFER, + goog.webgl.COLOR_ATTACHMENT0, goog.webgl.TEXTURE_2D, texture, 0); + + this.texture = texture; + this.framebuffer = framebuffer; + this.framebufferDimension = framebufferDimension; + + } else { + gl.bindFramebuffer(goog.webgl.FRAMEBUFFER, this.framebuffer); + } + +}; + + +/** + * @param {ol.FrameState} frameState Frame state. + * @param {ol.layer.LayerState} layerState Layer state. + * @param {ol.webgl.Context} context Context. + */ +ol.renderer.webgl.Layer.prototype.composeFrame = + function(frameState, layerState, context) { + + this.dispatchComposeEvent_( + ol.render.EventType.PRECOMPOSE, context, frameState); + + context.bindBuffer(goog.webgl.ARRAY_BUFFER, this.arrayBuffer_); + + var gl = context.getGL(); + + var useColor = + layerState.brightness || + layerState.contrast != 1 || + layerState.hue || + layerState.saturation != 1; + + var fragmentShader, vertexShader; + if (useColor) { + fragmentShader = ol.renderer.webgl.map.shader.ColorFragment.getInstance(); + vertexShader = ol.renderer.webgl.map.shader.ColorVertex.getInstance(); + } else { + fragmentShader = + ol.renderer.webgl.map.shader.DefaultFragment.getInstance(); + vertexShader = ol.renderer.webgl.map.shader.DefaultVertex.getInstance(); + } + + var program = context.getProgram(fragmentShader, vertexShader); + + // FIXME colorLocations_ and defaultLocations_ should be shared somehow + var locations; + if (useColor) { + if (goog.isNull(this.colorLocations_)) { + locations = + new ol.renderer.webgl.map.shader.Color.Locations(gl, program); + this.colorLocations_ = locations; + } else { + locations = this.colorLocations_; + } + } else { + if (goog.isNull(this.defaultLocations_)) { + locations = + new ol.renderer.webgl.map.shader.Default.Locations(gl, program); + this.defaultLocations_ = locations; + } else { + locations = this.defaultLocations_; + } + } + + if (context.useProgram(program)) { + gl.enableVertexAttribArray(locations.a_position); + gl.vertexAttribPointer( + locations.a_position, 2, goog.webgl.FLOAT, false, 16, 0); + gl.enableVertexAttribArray(locations.a_texCoord); + gl.vertexAttribPointer( + locations.a_texCoord, 2, goog.webgl.FLOAT, false, 16, 8); + gl.uniform1i(locations.u_texture, 0); + } + + gl.uniformMatrix4fv( + locations.u_texCoordMatrix, false, this.getTexCoordMatrix()); + gl.uniformMatrix4fv(locations.u_projectionMatrix, false, + this.getProjectionMatrix()); + if (useColor) { + gl.uniformMatrix4fv(locations.u_colorMatrix, false, + this.colorMatrix_.getMatrix( + layerState.brightness, + layerState.contrast, + layerState.hue, + layerState.saturation + )); + } + gl.uniform1f(locations.u_opacity, layerState.opacity); + gl.bindTexture(goog.webgl.TEXTURE_2D, this.getTexture()); + gl.drawArrays(goog.webgl.TRIANGLE_STRIP, 0, 4); + + this.dispatchComposeEvent_( + ol.render.EventType.POSTCOMPOSE, context, frameState); + +}; + + +/** + * @param {ol.render.EventType} type Event type. + * @param {ol.webgl.Context} context WebGL context. + * @param {ol.FrameState} frameState Frame state. + * @private + */ +ol.renderer.webgl.Layer.prototype.dispatchComposeEvent_ = + function(type, context, frameState) { + var layer = this.getLayer(); + if (layer.hasListener(type)) { + var render = new ol.render.webgl.Immediate(context, frameState.pixelRatio); + var composeEvent = new ol.render.Event( + type, layer, render, frameState, null, context); + layer.dispatchEvent(composeEvent); + } +}; + + +/** + * @protected + * @return {ol.renderer.webgl.Map} MapRenderer. + */ +ol.renderer.webgl.Layer.prototype.getWebGLMapRenderer = function() { + return /** @type {ol.renderer.webgl.Map} */ (this.getMapRenderer()); +}; + + +/** + * @return {!goog.vec.Mat4.Number} Matrix. + */ +ol.renderer.webgl.Layer.prototype.getTexCoordMatrix = function() { + return this.texCoordMatrix; +}; + + +/** + * @return {WebGLTexture} Texture. + */ +ol.renderer.webgl.Layer.prototype.getTexture = function() { + return this.texture; +}; + + +/** + * @return {!goog.vec.Mat4.Number} Matrix. + */ +ol.renderer.webgl.Layer.prototype.getProjectionMatrix = function() { + return this.projectionMatrix; +}; + + +/** + * Handle webglcontextlost. + */ +ol.renderer.webgl.Layer.prototype.handleWebGLContextLost = function() { + this.texture = null; + this.framebuffer = null; + this.framebufferDimension = undefined; +}; diff --git a/float-no-zero/ol/ol/renderer/webgl/webglmapcolor.glsl b/float-no-zero/ol/ol/renderer/webgl/webglmapcolor.glsl new file mode 100644 index 0000000000..4ed15cd954 --- /dev/null +++ b/float-no-zero/ol/ol/renderer/webgl/webglmapcolor.glsl @@ -0,0 +1,32 @@ +//! NAMESPACE=ol.renderer.webgl.map.shader.Color +//! CLASS=ol.renderer.webgl.map.shader.Color + + +//! COMMON +varying vec2 v_texCoord; + + +//! VERTEX +attribute vec2 a_position; +attribute vec2 a_texCoord; + +uniform mat4 u_texCoordMatrix; +uniform mat4 u_projectionMatrix; + +void main(void) { + gl_Position = u_projectionMatrix * vec4(a_position, 0., 1.); + v_texCoord = (u_texCoordMatrix * vec4(a_texCoord, 0., 1.)).st; +} + + +//! FRAGMENT +// @see https://svn.webkit.org/repository/webkit/trunk/Source/WebCore/platform/graphics/filters/skia/SkiaImageFilterBuilder.cpp +uniform mat4 u_colorMatrix; +uniform float u_opacity; +uniform sampler2D u_texture; + +void main(void) { + vec4 texColor = texture2D(u_texture, v_texCoord); + gl_FragColor.rgb = (u_colorMatrix * vec4(texColor.rgb, 1.)).rgb; + gl_FragColor.a = texColor.a * u_opacity; +} diff --git a/float-no-zero/ol/ol/renderer/webgl/webglmapcolorshader.js b/float-no-zero/ol/ol/renderer/webgl/webglmapcolorshader.js new file mode 100644 index 0000000000..eeff8162d2 --- /dev/null +++ b/float-no-zero/ol/ol/renderer/webgl/webglmapcolorshader.js @@ -0,0 +1,129 @@ +// This file is automatically generated, do not edit +goog.provide('ol.renderer.webgl.map.shader.Color'); + +goog.require('ol.webgl.shader'); + + + +/** + * @constructor + * @extends {ol.webgl.shader.Fragment} + * @struct + */ +ol.renderer.webgl.map.shader.ColorFragment = function() { + goog.base(this, ol.renderer.webgl.map.shader.ColorFragment.SOURCE); +}; +goog.inherits(ol.renderer.webgl.map.shader.ColorFragment, ol.webgl.shader.Fragment); +goog.addSingletonGetter(ol.renderer.webgl.map.shader.ColorFragment); + + +/** + * @const + * @type {string} + */ +ol.renderer.webgl.map.shader.ColorFragment.DEBUG_SOURCE = 'precision mediump float;\nvarying vec2 v_texCoord;\n\n\n// @see https://svn.webkit.org/repository/webkit/trunk/Source/WebCore/platform/graphics/filters/skia/SkiaImageFilterBuilder.cpp\nuniform mat4 u_colorMatrix;\nuniform float u_opacity;\nuniform sampler2D u_texture;\n\nvoid main(void) {\n vec4 texColor = texture2D(u_texture, v_texCoord);\n gl_FragColor.rgb = (u_colorMatrix * vec4(texColor.rgb, 1.)).rgb;\n gl_FragColor.a = texColor.a * u_opacity;\n}\n'; + + +/** + * @const + * @type {string} + */ +ol.renderer.webgl.map.shader.ColorFragment.OPTIMIZED_SOURCE = 'precision mediump float;varying vec2 a;uniform mat4 f;uniform float g;uniform sampler2D h;void main(void){vec4 texColor=texture2D(h,a);gl_FragColor.rgb=(f*vec4(texColor.rgb,1.)).rgb;gl_FragColor.a=texColor.a*g;}'; + + +/** + * @const + * @type {string} + */ +ol.renderer.webgl.map.shader.ColorFragment.SOURCE = goog.DEBUG ? + ol.renderer.webgl.map.shader.ColorFragment.DEBUG_SOURCE : + ol.renderer.webgl.map.shader.ColorFragment.OPTIMIZED_SOURCE; + + + +/** + * @constructor + * @extends {ol.webgl.shader.Vertex} + * @struct + */ +ol.renderer.webgl.map.shader.ColorVertex = function() { + goog.base(this, ol.renderer.webgl.map.shader.ColorVertex.SOURCE); +}; +goog.inherits(ol.renderer.webgl.map.shader.ColorVertex, ol.webgl.shader.Vertex); +goog.addSingletonGetter(ol.renderer.webgl.map.shader.ColorVertex); + + +/** + * @const + * @type {string} + */ +ol.renderer.webgl.map.shader.ColorVertex.DEBUG_SOURCE = 'varying vec2 v_texCoord;\n\n\nattribute vec2 a_position;\nattribute vec2 a_texCoord;\n\nuniform mat4 u_texCoordMatrix;\nuniform mat4 u_projectionMatrix;\n\nvoid main(void) {\n gl_Position = u_projectionMatrix * vec4(a_position, 0., 1.);\n v_texCoord = (u_texCoordMatrix * vec4(a_texCoord, 0., 1.)).st;\n}\n\n\n'; + + +/** + * @const + * @type {string} + */ +ol.renderer.webgl.map.shader.ColorVertex.OPTIMIZED_SOURCE = 'varying vec2 a;attribute vec2 b;attribute vec2 c;uniform mat4 d;uniform mat4 e;void main(void){gl_Position=e*vec4(b,0.,1.);a=(d*vec4(c,0.,1.)).st;}'; + + +/** + * @const + * @type {string} + */ +ol.renderer.webgl.map.shader.ColorVertex.SOURCE = goog.DEBUG ? + ol.renderer.webgl.map.shader.ColorVertex.DEBUG_SOURCE : + ol.renderer.webgl.map.shader.ColorVertex.OPTIMIZED_SOURCE; + + + +/** + * @constructor + * @param {WebGLRenderingContext} gl GL. + * @param {WebGLProgram} program Program. + * @struct + */ +ol.renderer.webgl.map.shader.Color.Locations = function(gl, program) { + + /** + * @type {WebGLUniformLocation} + */ + this.u_colorMatrix = gl.getUniformLocation( + program, goog.DEBUG ? 'u_colorMatrix' : 'f'); + + /** + * @type {WebGLUniformLocation} + */ + this.u_opacity = gl.getUniformLocation( + program, goog.DEBUG ? 'u_opacity' : 'g'); + + /** + * @type {WebGLUniformLocation} + */ + this.u_projectionMatrix = gl.getUniformLocation( + program, goog.DEBUG ? 'u_projectionMatrix' : 'e'); + + /** + * @type {WebGLUniformLocation} + */ + this.u_texCoordMatrix = gl.getUniformLocation( + program, goog.DEBUG ? 'u_texCoordMatrix' : 'd'); + + /** + * @type {WebGLUniformLocation} + */ + this.u_texture = gl.getUniformLocation( + program, goog.DEBUG ? 'u_texture' : 'h'); + + /** + * @type {number} + */ + this.a_position = gl.getAttribLocation( + program, goog.DEBUG ? 'a_position' : 'b'); + + /** + * @type {number} + */ + this.a_texCoord = gl.getAttribLocation( + program, goog.DEBUG ? 'a_texCoord' : 'c'); +}; diff --git a/float-no-zero/ol/ol/renderer/webgl/webglmapdefault.glsl b/float-no-zero/ol/ol/renderer/webgl/webglmapdefault.glsl new file mode 100644 index 0000000000..b07838dc3b --- /dev/null +++ b/float-no-zero/ol/ol/renderer/webgl/webglmapdefault.glsl @@ -0,0 +1,30 @@ +//! NAMESPACE=ol.renderer.webgl.map.shader.Default +//! CLASS=ol.renderer.webgl.map.shader.Default + + +//! COMMON +varying vec2 v_texCoord; + + +//! VERTEX +attribute vec2 a_position; +attribute vec2 a_texCoord; + +uniform mat4 u_texCoordMatrix; +uniform mat4 u_projectionMatrix; + +void main(void) { + gl_Position = u_projectionMatrix * vec4(a_position, 0., 1.); + v_texCoord = (u_texCoordMatrix * vec4(a_texCoord, 0., 1.)).st; +} + + +//! FRAGMENT +uniform float u_opacity; +uniform sampler2D u_texture; + +void main(void) { + vec4 texColor = texture2D(u_texture, v_texCoord); + gl_FragColor.rgb = texColor.rgb; + gl_FragColor.a = texColor.a * u_opacity; +} diff --git a/float-no-zero/ol/ol/renderer/webgl/webglmapdefaultshader.js b/float-no-zero/ol/ol/renderer/webgl/webglmapdefaultshader.js new file mode 100644 index 0000000000..47aff44a22 --- /dev/null +++ b/float-no-zero/ol/ol/renderer/webgl/webglmapdefaultshader.js @@ -0,0 +1,123 @@ +// This file is automatically generated, do not edit +goog.provide('ol.renderer.webgl.map.shader.Default'); + +goog.require('ol.webgl.shader'); + + + +/** + * @constructor + * @extends {ol.webgl.shader.Fragment} + * @struct + */ +ol.renderer.webgl.map.shader.DefaultFragment = function() { + goog.base(this, ol.renderer.webgl.map.shader.DefaultFragment.SOURCE); +}; +goog.inherits(ol.renderer.webgl.map.shader.DefaultFragment, ol.webgl.shader.Fragment); +goog.addSingletonGetter(ol.renderer.webgl.map.shader.DefaultFragment); + + +/** + * @const + * @type {string} + */ +ol.renderer.webgl.map.shader.DefaultFragment.DEBUG_SOURCE = 'precision mediump float;\nvarying vec2 v_texCoord;\n\n\nuniform float u_opacity;\nuniform sampler2D u_texture;\n\nvoid main(void) {\n vec4 texColor = texture2D(u_texture, v_texCoord);\n gl_FragColor.rgb = texColor.rgb;\n gl_FragColor.a = texColor.a * u_opacity;\n}\n'; + + +/** + * @const + * @type {string} + */ +ol.renderer.webgl.map.shader.DefaultFragment.OPTIMIZED_SOURCE = 'precision mediump float;varying vec2 a;uniform float f;uniform sampler2D g;void main(void){vec4 texColor=texture2D(g,a);gl_FragColor.rgb=texColor.rgb;gl_FragColor.a=texColor.a*f;}'; + + +/** + * @const + * @type {string} + */ +ol.renderer.webgl.map.shader.DefaultFragment.SOURCE = goog.DEBUG ? + ol.renderer.webgl.map.shader.DefaultFragment.DEBUG_SOURCE : + ol.renderer.webgl.map.shader.DefaultFragment.OPTIMIZED_SOURCE; + + + +/** + * @constructor + * @extends {ol.webgl.shader.Vertex} + * @struct + */ +ol.renderer.webgl.map.shader.DefaultVertex = function() { + goog.base(this, ol.renderer.webgl.map.shader.DefaultVertex.SOURCE); +}; +goog.inherits(ol.renderer.webgl.map.shader.DefaultVertex, ol.webgl.shader.Vertex); +goog.addSingletonGetter(ol.renderer.webgl.map.shader.DefaultVertex); + + +/** + * @const + * @type {string} + */ +ol.renderer.webgl.map.shader.DefaultVertex.DEBUG_SOURCE = 'varying vec2 v_texCoord;\n\n\nattribute vec2 a_position;\nattribute vec2 a_texCoord;\n\nuniform mat4 u_texCoordMatrix;\nuniform mat4 u_projectionMatrix;\n\nvoid main(void) {\n gl_Position = u_projectionMatrix * vec4(a_position, 0., 1.);\n v_texCoord = (u_texCoordMatrix * vec4(a_texCoord, 0., 1.)).st;\n}\n\n\n'; + + +/** + * @const + * @type {string} + */ +ol.renderer.webgl.map.shader.DefaultVertex.OPTIMIZED_SOURCE = 'varying vec2 a;attribute vec2 b;attribute vec2 c;uniform mat4 d;uniform mat4 e;void main(void){gl_Position=e*vec4(b,0.,1.);a=(d*vec4(c,0.,1.)).st;}'; + + +/** + * @const + * @type {string} + */ +ol.renderer.webgl.map.shader.DefaultVertex.SOURCE = goog.DEBUG ? + ol.renderer.webgl.map.shader.DefaultVertex.DEBUG_SOURCE : + ol.renderer.webgl.map.shader.DefaultVertex.OPTIMIZED_SOURCE; + + + +/** + * @constructor + * @param {WebGLRenderingContext} gl GL. + * @param {WebGLProgram} program Program. + * @struct + */ +ol.renderer.webgl.map.shader.Default.Locations = function(gl, program) { + + /** + * @type {WebGLUniformLocation} + */ + this.u_opacity = gl.getUniformLocation( + program, goog.DEBUG ? 'u_opacity' : 'f'); + + /** + * @type {WebGLUniformLocation} + */ + this.u_projectionMatrix = gl.getUniformLocation( + program, goog.DEBUG ? 'u_projectionMatrix' : 'e'); + + /** + * @type {WebGLUniformLocation} + */ + this.u_texCoordMatrix = gl.getUniformLocation( + program, goog.DEBUG ? 'u_texCoordMatrix' : 'd'); + + /** + * @type {WebGLUniformLocation} + */ + this.u_texture = gl.getUniformLocation( + program, goog.DEBUG ? 'u_texture' : 'g'); + + /** + * @type {number} + */ + this.a_position = gl.getAttribLocation( + program, goog.DEBUG ? 'a_position' : 'b'); + + /** + * @type {number} + */ + this.a_texCoord = gl.getAttribLocation( + program, goog.DEBUG ? 'a_texCoord' : 'c'); +}; diff --git a/float-no-zero/ol/ol/renderer/webgl/webglmaprenderer.js b/float-no-zero/ol/ol/renderer/webgl/webglmaprenderer.js new file mode 100644 index 0000000000..9eba422d21 --- /dev/null +++ b/float-no-zero/ol/ol/renderer/webgl/webglmaprenderer.js @@ -0,0 +1,522 @@ +// FIXME check against gl.getParameter(webgl.MAX_TEXTURE_SIZE) + +goog.provide('ol.renderer.webgl.Map'); + +goog.require('goog.array'); +goog.require('goog.asserts'); +goog.require('goog.dom'); +goog.require('goog.dom.TagName'); +goog.require('goog.events'); +goog.require('goog.events.Event'); +goog.require('goog.log'); +goog.require('goog.log.Logger'); +goog.require('goog.object'); +goog.require('goog.style'); +goog.require('goog.webgl'); +goog.require('ol.FrameState'); +goog.require('ol.Tile'); +goog.require('ol.css'); +goog.require('ol.layer.Image'); +goog.require('ol.layer.Tile'); +goog.require('ol.render.Event'); +goog.require('ol.render.EventType'); +goog.require('ol.render.webgl.Immediate'); +goog.require('ol.renderer.Map'); +goog.require('ol.renderer.webgl.ImageLayer'); +goog.require('ol.renderer.webgl.Layer'); +goog.require('ol.renderer.webgl.TileLayer'); +goog.require('ol.source.State'); +goog.require('ol.structs.LRUCache'); +goog.require('ol.structs.PriorityQueue'); +goog.require('ol.webgl'); +goog.require('ol.webgl.Context'); +goog.require('ol.webgl.WebGLContextEventType'); + + +/** + * @define {number} Texture cache high water mark. + */ +ol.WEBGL_TEXTURE_CACHE_HIGH_WATER_MARK = 1024; + + +/** + * @typedef {{magFilter: number, minFilter: number, texture: WebGLTexture}} + */ +ol.renderer.webgl.TextureCacheEntry; + + + +/** + * @constructor + * @extends {ol.renderer.Map} + * @param {Element} container Container. + * @param {ol.Map} map Map. + */ +ol.renderer.webgl.Map = function(container, map) { + + goog.base(this, container, map); + + /** + * @private + * @type {HTMLCanvasElement} + */ + this.canvas_ = /** @type {HTMLCanvasElement} */ + (goog.dom.createElement(goog.dom.TagName.CANVAS)); + this.canvas_.style.width = '100%'; + this.canvas_.style.height = '100%'; + this.canvas_.className = ol.css.CLASS_UNSELECTABLE; + goog.dom.insertChildAt(container, this.canvas_, 0); + + /** + * @private + * @type {HTMLCanvasElement} + */ + this.clipTileCanvas_ = /** @type {HTMLCanvasElement} */ + (goog.dom.createElement(goog.dom.TagName.CANVAS)); + + /** + * @private + * @type {number} + */ + this.clipTileCanvasSize_ = 0; + + /** + * @private + * @type {CanvasRenderingContext2D} + */ + this.clipTileContext_ = /** @type {CanvasRenderingContext2D} */ + (this.clipTileCanvas_.getContext('2d')); + + /** + * @private + * @type {boolean} + */ + this.renderedVisible_ = true; + + /** + * @private + * @type {WebGLRenderingContext} + */ + this.gl_ = ol.webgl.getContext(this.canvas_, { + antialias: true, + depth: false, + failIfMajorPerformanceCaveat: true, + preserveDrawingBuffer: false, + stencil: true + }); + goog.asserts.assert(!goog.isNull(this.gl_)); + + /** + * @private + * @type {ol.webgl.Context} + */ + this.context_ = new ol.webgl.Context(this.canvas_, this.gl_); + + goog.events.listen(this.canvas_, ol.webgl.WebGLContextEventType.LOST, + this.handleWebGLContextLost, false, this); + goog.events.listen(this.canvas_, ol.webgl.WebGLContextEventType.RESTORED, + this.handleWebGLContextRestored, false, this); + + /** + * @private + * @type {ol.structs.LRUCache} + */ + this.textureCache_ = new ol.structs.LRUCache(); + + /** + * @private + * @type {ol.Coordinate} + */ + this.focus_ = null; + + /** + * @private + * @type {ol.structs.PriorityQueue.} + */ + this.tileTextureQueue_ = new ol.structs.PriorityQueue( + /** + * @param {Array.<*>} element Element. + * @return {number} Priority. + */ + goog.bind( + /** + * @param {Array.<*>} element Element. + * @return {number} Priority. + * @this {ol.renderer.webgl.Map} + */ + function(element) { + var tileCenter = /** @type {ol.Coordinate} */ (element[1]); + var tileResolution = /** @type {number} */ (element[2]); + var deltaX = tileCenter[0] - this.focus_[0]; + var deltaY = tileCenter[1] - this.focus_[1]; + return 65536 * Math.log(tileResolution) + + Math.sqrt(deltaX * deltaX + deltaY * deltaY) / tileResolution; + }, this), + /** + * @param {Array} element Element. + * @return {string} Key. + */ + function(element) { + return /** @type {ol.Tile} */ (element[0]).getKey(); + }); + + /** + * @private + * @type {ol.PostRenderFunction} + */ + this.loadNextTileTexture_ = goog.bind( + function(map, frameState) { + if (!this.tileTextureQueue_.isEmpty()) { + this.tileTextureQueue_.reprioritize(); + var element = this.tileTextureQueue_.dequeue(); + var tile = /** @type {ol.Tile} */ (element[0]); + var tileSize = /** @type {number} */ (element[3]); + var tileGutter = /** @type {number} */ (element[4]); + this.bindTileTexture( + tile, tileSize, tileGutter, goog.webgl.LINEAR, goog.webgl.LINEAR); + } + }, this); + + /** + * @private + * @type {number} + */ + this.textureCacheFrameMarkerCount_ = 0; + + this.initializeGL_(); + +}; +goog.inherits(ol.renderer.webgl.Map, ol.renderer.Map); + + +/** + * @param {ol.Tile} tile Tile. + * @param {number} tileSize Tile size. + * @param {number} tileGutter Tile gutter. + * @param {number} magFilter Mag filter. + * @param {number} minFilter Min filter. + */ +ol.renderer.webgl.Map.prototype.bindTileTexture = + function(tile, tileSize, tileGutter, magFilter, minFilter) { + var gl = this.getGL(); + var tileKey = tile.getKey(); + if (this.textureCache_.containsKey(tileKey)) { + var textureCacheEntry = /** @type {ol.renderer.webgl.TextureCacheEntry} */ + (this.textureCache_.get(tileKey)); + gl.bindTexture(goog.webgl.TEXTURE_2D, textureCacheEntry.texture); + if (textureCacheEntry.magFilter != magFilter) { + gl.texParameteri( + goog.webgl.TEXTURE_2D, goog.webgl.TEXTURE_MAG_FILTER, magFilter); + textureCacheEntry.magFilter = magFilter; + } + if (textureCacheEntry.minFilter != minFilter) { + gl.texParameteri( + goog.webgl.TEXTURE_2D, goog.webgl.TEXTURE_MAG_FILTER, minFilter); + textureCacheEntry.minFilter = minFilter; + } + } else { + var texture = gl.createTexture(); + gl.bindTexture(goog.webgl.TEXTURE_2D, texture); + if (tileGutter > 0) { + var clipTileCanvas = this.clipTileCanvas_; + var clipTileContext = this.clipTileContext_; + if (this.clipTileCanvasSize_ != tileSize) { + clipTileCanvas.width = tileSize; + clipTileCanvas.height = tileSize; + this.clipTileCanvasSize_ = tileSize; + } else { + clipTileContext.clearRect(0, 0, tileSize, tileSize); + } + clipTileContext.drawImage(tile.getImage(), tileGutter, tileGutter, + tileSize, tileSize, 0, 0, tileSize, tileSize); + gl.texImage2D(goog.webgl.TEXTURE_2D, 0, + goog.webgl.RGBA, goog.webgl.RGBA, + goog.webgl.UNSIGNED_BYTE, clipTileCanvas); + } else { + gl.texImage2D(goog.webgl.TEXTURE_2D, 0, + goog.webgl.RGBA, goog.webgl.RGBA, + goog.webgl.UNSIGNED_BYTE, tile.getImage()); + } + gl.texParameteri( + goog.webgl.TEXTURE_2D, goog.webgl.TEXTURE_MAG_FILTER, magFilter); + gl.texParameteri( + goog.webgl.TEXTURE_2D, goog.webgl.TEXTURE_MIN_FILTER, minFilter); + gl.texParameteri(goog.webgl.TEXTURE_2D, goog.webgl.TEXTURE_WRAP_S, + goog.webgl.CLAMP_TO_EDGE); + gl.texParameteri(goog.webgl.TEXTURE_2D, goog.webgl.TEXTURE_WRAP_T, + goog.webgl.CLAMP_TO_EDGE); + this.textureCache_.set(tileKey, { + texture: texture, + magFilter: magFilter, + minFilter: minFilter + }); + } +}; + + +/** + * @inheritDoc + */ +ol.renderer.webgl.Map.prototype.createLayerRenderer = function(layer) { + if (ol.ENABLE_IMAGE && layer instanceof ol.layer.Image) { + return new ol.renderer.webgl.ImageLayer(this, layer); + } else if (ol.ENABLE_TILE && layer instanceof ol.layer.Tile) { + return new ol.renderer.webgl.TileLayer(this, layer); + } else { + goog.asserts.fail(); + return null; + } +}; + + +/** + * @param {ol.render.EventType} type Event type. + * @param {ol.FrameState} frameState Frame state. + * @private + */ +ol.renderer.webgl.Map.prototype.dispatchComposeEvent_ = + function(type, frameState) { + var map = this.getMap(); + if (map.hasListener(type)) { + var context = this.getContext(); + var render = new ol.render.webgl.Immediate(context, frameState.pixelRatio); + var composeEvent = new ol.render.Event( + type, map, render, frameState, null, context); + map.dispatchEvent(composeEvent); + } +}; + + +/** + * @inheritDoc + */ +ol.renderer.webgl.Map.prototype.disposeInternal = function() { + var gl = this.getGL(); + if (!gl.isContextLost()) { + this.textureCache_.forEach( + /** + * @param {ol.renderer.webgl.TextureCacheEntry} textureCacheEntry + * Texture cache entry. + */ + function(textureCacheEntry) { + if (!goog.isNull(textureCacheEntry)) { + gl.deleteTexture(textureCacheEntry.texture); + } + }); + } + goog.dispose(this.context_); + goog.base(this, 'disposeInternal'); +}; + + +/** + * @param {ol.Map} map Map. + * @param {ol.FrameState} frameState Frame state. + * @private + */ +ol.renderer.webgl.Map.prototype.expireCache_ = function(map, frameState) { + var gl = this.getGL(); + var textureCacheEntry; + while (this.textureCache_.getCount() - this.textureCacheFrameMarkerCount_ > + ol.WEBGL_TEXTURE_CACHE_HIGH_WATER_MARK) { + textureCacheEntry = /** @type {?ol.renderer.webgl.TextureCacheEntry} */ + (this.textureCache_.peekLast()); + if (goog.isNull(textureCacheEntry)) { + if (+this.textureCache_.peekLastKey() == frameState.index) { + break; + } else { + --this.textureCacheFrameMarkerCount_; + } + } else { + gl.deleteTexture(textureCacheEntry.texture); + } + this.textureCache_.pop(); + } +}; + + +/** + * @return {ol.webgl.Context} + */ +ol.renderer.webgl.Map.prototype.getContext = function() { + return this.context_; +}; + + +/** + * @return {WebGLRenderingContext} GL. + */ +ol.renderer.webgl.Map.prototype.getGL = function() { + return this.gl_; +}; + + +/** + * @return {ol.structs.PriorityQueue.} Tile texture queue. + */ +ol.renderer.webgl.Map.prototype.getTileTextureQueue = function() { + return this.tileTextureQueue_; +}; + + +/** + * @param {goog.events.Event} event Event. + * @protected + */ +ol.renderer.webgl.Map.prototype.handleWebGLContextLost = function(event) { + event.preventDefault(); + this.textureCache_.clear(); + this.textureCacheFrameMarkerCount_ = 0; + goog.object.forEach(this.getLayerRenderers(), + /** + * @param {ol.renderer.Layer} layerRenderer Layer renderer. + * @param {string} key Key. + * @param {Object.} object Object. + */ + function(layerRenderer, key, object) { + goog.asserts.assertInstanceof(layerRenderer, ol.renderer.webgl.Layer); + var webGLLayerRenderer = /** @type {ol.renderer.webgl.Layer} */ + (layerRenderer); + webGLLayerRenderer.handleWebGLContextLost(); + }); +}; + + +/** + * @protected + */ +ol.renderer.webgl.Map.prototype.handleWebGLContextRestored = function() { + this.initializeGL_(); + this.getMap().render(); +}; + + +/** + * @private + */ +ol.renderer.webgl.Map.prototype.initializeGL_ = function() { + var gl = this.gl_; + gl.activeTexture(goog.webgl.TEXTURE0); + gl.blendFuncSeparate( + goog.webgl.SRC_ALPHA, goog.webgl.ONE_MINUS_SRC_ALPHA, + goog.webgl.ONE, goog.webgl.ONE_MINUS_SRC_ALPHA); + gl.disable(goog.webgl.CULL_FACE); + gl.disable(goog.webgl.DEPTH_TEST); + gl.disable(goog.webgl.SCISSOR_TEST); + gl.disable(goog.webgl.STENCIL_TEST); +}; + + +/** + * @param {ol.Tile} tile Tile. + * @return {boolean} Is tile texture loaded. + */ +ol.renderer.webgl.Map.prototype.isTileTextureLoaded = function(tile) { + return this.textureCache_.containsKey(tile.getKey()); +}; + + +/** + * @private + * @type {goog.log.Logger} + */ +ol.renderer.webgl.Map.prototype.logger_ = + goog.log.getLogger('ol.renderer.webgl.Map'); + + +/** + * @inheritDoc + */ +ol.renderer.webgl.Map.prototype.renderFrame = function(frameState) { + + var context = this.getContext(); + var gl = this.getGL(); + + if (gl.isContextLost()) { + return false; + } + + if (goog.isNull(frameState)) { + if (this.renderedVisible_) { + goog.style.setElementShown(this.canvas_, false); + this.renderedVisible_ = false; + } + return false; + } + + this.focus_ = frameState.focus; + + this.textureCache_.set((-frameState.index).toString(), null); + ++this.textureCacheFrameMarkerCount_; + + /** @type {Array.} */ + var layersToDraw = []; + var layersArray = frameState.layersArray; + var viewResolution = frameState.view2DState.resolution; + var i, ii, layer, layerRenderer, layerState; + for (i = 0, ii = layersArray.length; i < ii; ++i) { + layer = layersArray[i]; + layerState = frameState.layerStates[goog.getUid(layer)]; + if (layerState.visible && + layerState.sourceState == ol.source.State.READY && + viewResolution < layerState.maxResolution && + viewResolution >= layerState.minResolution) { + layersToDraw.push(layer); + } + } + + for (i = 0, ii = layersToDraw.length; i < ii; ++i) { + layer = layersToDraw[i]; + layerRenderer = this.getLayerRenderer(layer); + goog.asserts.assertInstanceof(layerRenderer, ol.renderer.webgl.Layer); + layerState = frameState.layerStates[goog.getUid(layer)]; + layerRenderer.prepareFrame(frameState, layerState); + } + + var width = frameState.size[0] * frameState.pixelRatio; + var height = frameState.size[1] * frameState.pixelRatio; + if (this.canvas_.width != width || this.canvas_.height != height) { + this.canvas_.width = width; + this.canvas_.height = height; + } + + gl.bindFramebuffer(goog.webgl.FRAMEBUFFER, null); + + gl.clearColor(0, 0, 0, 0); + gl.clear(goog.webgl.COLOR_BUFFER_BIT); + gl.enable(goog.webgl.BLEND); + gl.viewport(0, 0, this.canvas_.width, this.canvas_.height); + + this.dispatchComposeEvent_(ol.render.EventType.PRECOMPOSE, frameState); + + for (i = 0, ii = layersToDraw.length; i < ii; ++i) { + layer = layersToDraw[i]; + layerState = frameState.layerStates[goog.getUid(layer)]; + layerRenderer = this.getLayerRenderer(layer); + goog.asserts.assertInstanceof(layerRenderer, ol.renderer.webgl.Layer); + layerRenderer.composeFrame(frameState, layerState, context); + } + + if (!this.renderedVisible_) { + goog.style.setElementShown(this.canvas_, true); + this.renderedVisible_ = true; + } + + this.calculateMatrices2D(frameState); + + if (this.textureCache_.getCount() - this.textureCacheFrameMarkerCount_ > + ol.WEBGL_TEXTURE_CACHE_HIGH_WATER_MARK) { + frameState.postRenderFunctions.push(goog.bind(this.expireCache_, this)); + } + + if (!this.tileTextureQueue_.isEmpty()) { + frameState.postRenderFunctions.push(this.loadNextTileTexture_); + frameState.animate = true; + } + + this.dispatchComposeEvent_(ol.render.EventType.POSTCOMPOSE, frameState); + + this.scheduleRemoveUnusedLayerRenderers(frameState); + this.scheduleExpireIconCache(frameState); + +}; diff --git a/float-no-zero/ol/ol/renderer/webgl/webgltilelayer.glsl b/float-no-zero/ol/ol/renderer/webgl/webgltilelayer.glsl new file mode 100644 index 0000000000..5262f97c26 --- /dev/null +++ b/float-no-zero/ol/ol/renderer/webgl/webgltilelayer.glsl @@ -0,0 +1,25 @@ +//! NAMESPACE=ol.renderer.webgl.tilelayer.shader +//! CLASS=ol.renderer.webgl.tilelayer.shader. + + +//! COMMON +varying vec2 v_texCoord; + + +//! VERTEX +attribute vec2 a_position; +attribute vec2 a_texCoord; +uniform vec4 u_tileOffset; + +void main(void) { + gl_Position = vec4(a_position * u_tileOffset.xy + u_tileOffset.zw, 0., 1.); + v_texCoord = a_texCoord; +} + + +//! FRAGMENT +uniform sampler2D u_texture; + +void main(void) { + gl_FragColor = texture2D(u_texture, v_texCoord); +} diff --git a/float-no-zero/ol/ol/renderer/webgl/webgltilelayerrenderer.js b/float-no-zero/ol/ol/renderer/webgl/webgltilelayerrenderer.js new file mode 100644 index 0000000000..de21054637 --- /dev/null +++ b/float-no-zero/ol/ol/renderer/webgl/webgltilelayerrenderer.js @@ -0,0 +1,327 @@ +// FIXME large resolutions lead to too large framebuffers :-( +// FIXME animated shaders! check in redraw + +goog.provide('ol.renderer.webgl.TileLayer'); + +goog.require('goog.array'); +goog.require('goog.asserts'); +goog.require('goog.object'); +goog.require('goog.vec.Mat4'); +goog.require('goog.vec.Vec4'); +goog.require('goog.webgl'); +goog.require('ol.Tile'); +goog.require('ol.TileRange'); +goog.require('ol.TileState'); +goog.require('ol.extent'); +goog.require('ol.layer.Tile'); +goog.require('ol.math'); +goog.require('ol.renderer.webgl.Layer'); +goog.require('ol.renderer.webgl.tilelayer.shader'); +goog.require('ol.source.Tile'); +goog.require('ol.structs.Buffer'); + + + +/** + * @constructor + * @extends {ol.renderer.webgl.Layer} + * @param {ol.renderer.Map} mapRenderer Map renderer. + * @param {ol.layer.Tile} tileLayer Tile layer. + */ +ol.renderer.webgl.TileLayer = function(mapRenderer, tileLayer) { + + goog.base(this, mapRenderer, tileLayer); + + /** + * @private + * @type {ol.webgl.shader.Fragment} + */ + this.fragmentShader_ = + ol.renderer.webgl.tilelayer.shader.Fragment.getInstance(); + + /** + * @private + * @type {ol.webgl.shader.Vertex} + */ + this.vertexShader_ = ol.renderer.webgl.tilelayer.shader.Vertex.getInstance(); + + /** + * @private + * @type {ol.renderer.webgl.tilelayer.shader.Locations} + */ + this.locations_ = null; + + /** + * @private + * @type {ol.structs.Buffer} + */ + this.renderArrayBuffer_ = new ol.structs.Buffer([ + 0, 0, 0, 1, + 1, 0, 1, 1, + 0, 1, 0, 0, + 1, 1, 1, 0 + ]); + + /** + * @private + * @type {ol.TileRange} + */ + this.renderedTileRange_ = null; + + /** + * @private + * @type {ol.Extent} + */ + this.renderedFramebufferExtent_ = null; + + /** + * @private + * @type {number} + */ + this.renderedRevision_ = -1; + +}; +goog.inherits(ol.renderer.webgl.TileLayer, ol.renderer.webgl.Layer); + + +/** + * @inheritDoc + */ +ol.renderer.webgl.TileLayer.prototype.disposeInternal = function() { + var mapRenderer = this.getWebGLMapRenderer(); + var context = mapRenderer.getContext(); + context.deleteBuffer(this.renderArrayBuffer_); + goog.base(this, 'disposeInternal'); +}; + + +/** + * @inheritDoc + */ +ol.renderer.webgl.TileLayer.prototype.handleWebGLContextLost = function() { + goog.base(this, 'handleWebGLContextLost'); + this.locations_ = null; +}; + + +/** + * @inheritDoc + */ +ol.renderer.webgl.TileLayer.prototype.prepareFrame = + function(frameState, layerState) { + + var mapRenderer = this.getWebGLMapRenderer(); + var context = mapRenderer.getContext(); + var gl = mapRenderer.getGL(); + + var view2DState = frameState.view2DState; + var projection = view2DState.projection; + + var tileLayer = this.getLayer(); + goog.asserts.assertInstanceof(tileLayer, ol.layer.Tile); + var tileSource = tileLayer.getSource(); + goog.asserts.assertInstanceof(tileSource, ol.source.Tile); + var tileGrid = tileSource.getTileGridForProjection(projection); + var z = tileGrid.getZForResolution(view2DState.resolution); + var tileResolution = tileGrid.getResolution(z); + + var tilePixelSize = + tileSource.getTilePixelSize(z, frameState.pixelRatio, projection); + var pixelRatio = tilePixelSize / tileGrid.getTileSize(z); + var tilePixelResolution = tileResolution / pixelRatio; + var tileGutter = tileSource.getGutter(); + + var center = view2DState.center; + var extent; + if (tileResolution == view2DState.resolution) { + center = this.snapCenterToPixel(center, tileResolution, frameState.size); + extent = ol.extent.getForView2DAndSize( + center, tileResolution, view2DState.rotation, frameState.size); + } else { + extent = frameState.extent; + } + var tileRange = tileGrid.getTileRangeForExtentAndResolution( + extent, tileResolution); + + var framebufferExtent; + if (!goog.isNull(this.renderedTileRange_) && + this.renderedTileRange_.equals(tileRange) && + this.renderedRevision_ == tileSource.getRevision()) { + framebufferExtent = this.renderedFramebufferExtent_; + } else { + + var tileRangeSize = tileRange.getSize(); + + var maxDimension = Math.max( + tileRangeSize[0] * tilePixelSize, tileRangeSize[1] * tilePixelSize); + var framebufferDimension = ol.math.roundUpToPowerOfTwo(maxDimension); + var framebufferExtentDimension = tilePixelResolution * framebufferDimension; + var origin = tileGrid.getOrigin(z); + var minX = origin[0] + tileRange.minX * tilePixelSize * tilePixelResolution; + var minY = origin[1] + tileRange.minY * tilePixelSize * tilePixelResolution; + framebufferExtent = [ + minX, minY, + minX + framebufferExtentDimension, minY + framebufferExtentDimension + ]; + + this.bindFramebuffer(frameState, framebufferDimension); + gl.viewport(0, 0, framebufferDimension, framebufferDimension); + + gl.clearColor(0, 0, 0, 0); + gl.clear(goog.webgl.COLOR_BUFFER_BIT); + gl.disable(goog.webgl.BLEND); + + var program = context.getProgram(this.fragmentShader_, this.vertexShader_); + context.useProgram(program); + if (goog.isNull(this.locations_)) { + this.locations_ = + new ol.renderer.webgl.tilelayer.shader.Locations(gl, program); + } + + context.bindBuffer(goog.webgl.ARRAY_BUFFER, this.renderArrayBuffer_); + gl.enableVertexAttribArray(this.locations_.a_position); + gl.vertexAttribPointer( + this.locations_.a_position, 2, goog.webgl.FLOAT, false, 16, 0); + gl.enableVertexAttribArray(this.locations_.a_texCoord); + gl.vertexAttribPointer( + this.locations_.a_texCoord, 2, goog.webgl.FLOAT, false, 16, 8); + gl.uniform1i(this.locations_.u_texture, 0); + + /** + * @type {Object.>} + */ + var tilesToDrawByZ = {}; + tilesToDrawByZ[z] = {}; + + var getTileIfLoaded = this.createGetTileIfLoadedFunction(function(tile) { + return !goog.isNull(tile) && tile.getState() == ol.TileState.LOADED && + mapRenderer.isTileTextureLoaded(tile); + }, tileSource, pixelRatio, projection); + var findLoadedTiles = goog.bind(tileSource.findLoadedTiles, tileSource, + tilesToDrawByZ, getTileIfLoaded); + + var useInterimTilesOnError = tileLayer.getUseInterimTilesOnError(); + if (!goog.isDef(useInterimTilesOnError)) { + useInterimTilesOnError = true; + } + + var allTilesLoaded = true; + var tmpExtent = ol.extent.createEmpty(); + var tmpTileRange = new ol.TileRange(0, 0, 0, 0); + var childTileRange, fullyLoaded, tile, tileState, x, y; + for (x = tileRange.minX; x <= tileRange.maxX; ++x) { + for (y = tileRange.minY; y <= tileRange.maxY; ++y) { + + tile = tileSource.getTile(z, x, y, pixelRatio, projection); + tileState = tile.getState(); + if (tileState == ol.TileState.LOADED) { + if (mapRenderer.isTileTextureLoaded(tile)) { + tilesToDrawByZ[z][tile.tileCoord.toString()] = tile; + continue; + } + } else if (tileState == ol.TileState.EMPTY || + (tileState == ol.TileState.ERROR && + !useInterimTilesOnError)) { + continue; + } + + allTilesLoaded = false; + fullyLoaded = tileGrid.forEachTileCoordParentTileRange( + tile.tileCoord, findLoadedTiles, null, tmpTileRange, tmpExtent); + if (!fullyLoaded) { + childTileRange = tileGrid.getTileCoordChildTileRange( + tile.tileCoord, tmpTileRange, tmpExtent); + if (!goog.isNull(childTileRange)) { + findLoadedTiles(z + 1, childTileRange); + } + } + + } + + } + + /** @type {Array.} */ + var zs = goog.array.map(goog.object.getKeys(tilesToDrawByZ), Number); + goog.array.sort(zs); + var u_tileOffset = goog.vec.Vec4.createFloat32(); + var i, ii, sx, sy, tileExtent, tileKey, tilesToDraw, tx, ty; + for (i = 0, ii = zs.length; i < ii; ++i) { + tilesToDraw = tilesToDrawByZ[zs[i]]; + for (tileKey in tilesToDraw) { + tile = tilesToDraw[tileKey]; + tileExtent = tileGrid.getTileCoordExtent(tile.tileCoord, tmpExtent); + sx = 2 * (tileExtent[2] - tileExtent[0]) / + framebufferExtentDimension; + sy = 2 * (tileExtent[3] - tileExtent[1]) / + framebufferExtentDimension; + tx = 2 * (tileExtent[0] - framebufferExtent[0]) / + framebufferExtentDimension - 1; + ty = 2 * (tileExtent[1] - framebufferExtent[1]) / + framebufferExtentDimension - 1; + goog.vec.Vec4.setFromValues(u_tileOffset, sx, sy, tx, ty); + gl.uniform4fv(this.locations_.u_tileOffset, u_tileOffset); + mapRenderer.bindTileTexture(tile, tilePixelSize, + tileGutter * pixelRatio, goog.webgl.LINEAR, goog.webgl.LINEAR); + gl.drawArrays(goog.webgl.TRIANGLE_STRIP, 0, 4); + } + } + + if (allTilesLoaded) { + this.renderedTileRange_ = tileRange; + this.renderedFramebufferExtent_ = framebufferExtent; + this.renderedRevision_ = tileSource.getRevision(); + } else { + this.renderedTileRange_ = null; + this.renderedFramebufferExtent_ = null; + this.renderedRevision_ = -1; + frameState.animate = true; + } + + } + + this.updateUsedTiles(frameState.usedTiles, tileSource, z, tileRange); + var tileTextureQueue = mapRenderer.getTileTextureQueue(); + this.manageTilePyramid( + frameState, tileSource, tileGrid, pixelRatio, projection, extent, z, + tileLayer.getPreload(), + /** + * @param {ol.Tile} tile Tile. + */ + function(tile) { + if (tile.getState() == ol.TileState.LOADED && + !mapRenderer.isTileTextureLoaded(tile) && + !tileTextureQueue.isKeyQueued(tile.getKey())) { + tileTextureQueue.enqueue([ + tile, + tileGrid.getTileCoordCenter(tile.tileCoord), + tileGrid.getResolution(tile.tileCoord.z), + tilePixelSize, tileGutter * pixelRatio + ]); + } + }, this); + this.scheduleExpireCache(frameState, tileSource); + this.updateLogos(frameState, tileSource); + + var texCoordMatrix = this.texCoordMatrix; + goog.vec.Mat4.makeIdentity(texCoordMatrix); + goog.vec.Mat4.translate(texCoordMatrix, + (center[0] - framebufferExtent[0]) / + (framebufferExtent[2] - framebufferExtent[0]), + (center[1] - framebufferExtent[1]) / + (framebufferExtent[3] - framebufferExtent[1]), + 0); + if (view2DState.rotation !== 0) { + goog.vec.Mat4.rotateZ(texCoordMatrix, view2DState.rotation); + } + goog.vec.Mat4.scale(texCoordMatrix, + frameState.size[0] * view2DState.resolution / + (framebufferExtent[2] - framebufferExtent[0]), + frameState.size[1] * view2DState.resolution / + (framebufferExtent[3] - framebufferExtent[1]), + 1); + goog.vec.Mat4.translate(texCoordMatrix, + -0.5, + -0.5, + 0); + +}; diff --git a/float-no-zero/ol/ol/renderer/webgl/webgltilelayershader.js b/float-no-zero/ol/ol/renderer/webgl/webgltilelayershader.js new file mode 100644 index 0000000000..6cbb58103b --- /dev/null +++ b/float-no-zero/ol/ol/renderer/webgl/webgltilelayershader.js @@ -0,0 +1,111 @@ +// This file is automatically generated, do not edit +goog.provide('ol.renderer.webgl.tilelayer.shader'); + +goog.require('ol.webgl.shader'); + + + +/** + * @constructor + * @extends {ol.webgl.shader.Fragment} + * @struct + */ +ol.renderer.webgl.tilelayer.shader.Fragment = function() { + goog.base(this, ol.renderer.webgl.tilelayer.shader.Fragment.SOURCE); +}; +goog.inherits(ol.renderer.webgl.tilelayer.shader.Fragment, ol.webgl.shader.Fragment); +goog.addSingletonGetter(ol.renderer.webgl.tilelayer.shader.Fragment); + + +/** + * @const + * @type {string} + */ +ol.renderer.webgl.tilelayer.shader.Fragment.DEBUG_SOURCE = 'precision mediump float;\nvarying vec2 v_texCoord;\n\n\nuniform sampler2D u_texture;\n\nvoid main(void) {\n gl_FragColor = texture2D(u_texture, v_texCoord);\n}\n'; + + +/** + * @const + * @type {string} + */ +ol.renderer.webgl.tilelayer.shader.Fragment.OPTIMIZED_SOURCE = 'precision mediump float;varying vec2 a;uniform sampler2D e;void main(void){gl_FragColor=texture2D(e,a);}'; + + +/** + * @const + * @type {string} + */ +ol.renderer.webgl.tilelayer.shader.Fragment.SOURCE = goog.DEBUG ? + ol.renderer.webgl.tilelayer.shader.Fragment.DEBUG_SOURCE : + ol.renderer.webgl.tilelayer.shader.Fragment.OPTIMIZED_SOURCE; + + + +/** + * @constructor + * @extends {ol.webgl.shader.Vertex} + * @struct + */ +ol.renderer.webgl.tilelayer.shader.Vertex = function() { + goog.base(this, ol.renderer.webgl.tilelayer.shader.Vertex.SOURCE); +}; +goog.inherits(ol.renderer.webgl.tilelayer.shader.Vertex, ol.webgl.shader.Vertex); +goog.addSingletonGetter(ol.renderer.webgl.tilelayer.shader.Vertex); + + +/** + * @const + * @type {string} + */ +ol.renderer.webgl.tilelayer.shader.Vertex.DEBUG_SOURCE = 'varying vec2 v_texCoord;\n\n\nattribute vec2 a_position;\nattribute vec2 a_texCoord;\nuniform vec4 u_tileOffset;\n\nvoid main(void) {\n gl_Position = vec4(a_position * u_tileOffset.xy + u_tileOffset.zw, 0., 1.);\n v_texCoord = a_texCoord;\n}\n\n\n'; + + +/** + * @const + * @type {string} + */ +ol.renderer.webgl.tilelayer.shader.Vertex.OPTIMIZED_SOURCE = 'varying vec2 a;attribute vec2 b;attribute vec2 c;uniform vec4 d;void main(void){gl_Position=vec4(b*d.xy+d.zw,0.,1.);a=c;}'; + + +/** + * @const + * @type {string} + */ +ol.renderer.webgl.tilelayer.shader.Vertex.SOURCE = goog.DEBUG ? + ol.renderer.webgl.tilelayer.shader.Vertex.DEBUG_SOURCE : + ol.renderer.webgl.tilelayer.shader.Vertex.OPTIMIZED_SOURCE; + + + +/** + * @constructor + * @param {WebGLRenderingContext} gl GL. + * @param {WebGLProgram} program Program. + * @struct + */ +ol.renderer.webgl.tilelayer.shader.Locations = function(gl, program) { + + /** + * @type {WebGLUniformLocation} + */ + this.u_texture = gl.getUniformLocation( + program, goog.DEBUG ? 'u_texture' : 'e'); + + /** + * @type {WebGLUniformLocation} + */ + this.u_tileOffset = gl.getUniformLocation( + program, goog.DEBUG ? 'u_tileOffset' : 'd'); + + /** + * @type {number} + */ + this.a_position = gl.getAttribLocation( + program, goog.DEBUG ? 'a_position' : 'b'); + + /** + * @type {number} + */ + this.a_texCoord = gl.getAttribLocation( + program, goog.DEBUG ? 'a_texCoord' : 'c'); +}; diff --git a/float-no-zero/ol/ol/resolutionconstraint.js b/float-no-zero/ol/ol/resolutionconstraint.js new file mode 100644 index 0000000000..a90162d6b5 --- /dev/null +++ b/float-no-zero/ol/ol/resolutionconstraint.js @@ -0,0 +1,76 @@ +goog.provide('ol.ResolutionConstraint'); +goog.provide('ol.ResolutionConstraintType'); + +goog.require('goog.math'); +goog.require('ol.array'); + + +/** + * @typedef {function((number|undefined), number, number): (number|undefined)} + */ +ol.ResolutionConstraintType; + + +/** + * @param {Array.} resolutions Resolutions. + * @return {ol.ResolutionConstraintType} Zoom function. + */ +ol.ResolutionConstraint.createSnapToResolutions = + function(resolutions) { + return ( + /** + * @param {number|undefined} resolution Resolution. + * @param {number} delta Delta. + * @param {number} direction Direction. + * @return {number|undefined} Resolution. + */ + function(resolution, delta, direction) { + if (goog.isDef(resolution)) { + var z = + ol.array.linearFindNearest(resolutions, resolution, direction); + z = goog.math.clamp(z + delta, 0, resolutions.length - 1); + return resolutions[z]; + } else { + return undefined; + } + }); +}; + + +/** + * @param {number} power Power. + * @param {number} maxResolution Maximum resolution. + * @param {number=} opt_maxLevel Maximum level. + * @return {ol.ResolutionConstraintType} Zoom function. + */ +ol.ResolutionConstraint.createSnapToPower = + function(power, maxResolution, opt_maxLevel) { + return ( + /** + * @param {number|undefined} resolution Resolution. + * @param {number} delta Delta. + * @param {number} direction Direction. + * @return {number|undefined} Resolution. + */ + function(resolution, delta, direction) { + if (goog.isDef(resolution)) { + var offset; + if (direction > 0) { + offset = 0; + } else if (direction < 0) { + offset = 1; + } else { + offset = 0.5; + } + var oldLevel = Math.floor( + Math.log(maxResolution / resolution) / Math.log(power) + offset); + var newLevel = Math.max(oldLevel + delta, 0); + if (goog.isDef(opt_maxLevel)) { + newLevel = Math.min(newLevel, opt_maxLevel); + } + return maxResolution / Math.pow(power, newLevel); + } else { + return undefined; + } + }); +}; diff --git a/float-no-zero/ol/ol/rotationconstraint.js b/float-no-zero/ol/ol/rotationconstraint.js new file mode 100644 index 0000000000..fc73600f4e --- /dev/null +++ b/float-no-zero/ol/ol/rotationconstraint.js @@ -0,0 +1,87 @@ +goog.provide('ol.RotationConstraint'); +goog.provide('ol.RotationConstraintType'); + +goog.require('goog.math'); + + +/** + * @typedef {function((number|undefined), number): (number|undefined)} + */ +ol.RotationConstraintType; + + +/** + * @param {number|undefined} rotation Rotation. + * @param {number} delta Delta. + * @return {number|undefined} Rotation. + */ +ol.RotationConstraint.disable = function(rotation, delta) { + if (goog.isDef(rotation)) { + return 0; + } else { + return undefined; + } +}; + + +/** + * @param {number|undefined} rotation Rotation. + * @param {number} delta Delta. + * @return {number|undefined} Rotation. + */ +ol.RotationConstraint.none = function(rotation, delta) { + if (goog.isDef(rotation)) { + return rotation + delta; + } else { + return undefined; + } +}; + + +/** + * @param {number} n N. + * @return {ol.RotationConstraintType} Rotation constraint. + */ +ol.RotationConstraint.createSnapToN = function(n) { + var theta = 2 * Math.PI / n; + return ( + /** + * @param {number|undefined} rotation Rotation. + * @param {number} delta Delta. + * @return {number|undefined} Rotation. + */ + function(rotation, delta) { + if (goog.isDef(rotation)) { + rotation = Math.floor((rotation + delta) / theta + 0.5) * theta; + return rotation; + } else { + return undefined; + } + }); +}; + + +/** + * @param {number=} opt_tolerance Tolerance. + * @return {ol.RotationConstraintType} Rotation constraint. + */ +ol.RotationConstraint.createSnapToZero = function(opt_tolerance) { + var tolerance = opt_tolerance || goog.math.toRadians(5); + return ( + /** + * @param {number|undefined} rotation Rotation. + * @param {number} delta Delta. + * @return {number|undefined} Rotation. + */ + function(rotation, delta) { + if (goog.isDef(rotation)) { + if (Math.abs(rotation + delta) <= tolerance) { + return 0; + } else { + return rotation + delta; + } + } else { + return undefined; + } + }); +}; diff --git a/float-no-zero/ol/ol/size.js b/float-no-zero/ol/ol/size.js new file mode 100644 index 0000000000..f4305b8046 --- /dev/null +++ b/float-no-zero/ol/ol/size.js @@ -0,0 +1,21 @@ +goog.provide('ol.Size'); +goog.provide('ol.size'); + + +/** + * An array of numbers representing a size: `[width, height]`. + * @typedef {Array.} ol.Size + * @todo stability experimental + */ +ol.Size; + + +/** + * Compares sizes for equality. + * @param {ol.Size} a Size. + * @param {ol.Size} b Size. + * @return {boolean} Equals. + */ +ol.size.equals = function(a, b) { + return a[0] == b[0] && a[1] == b[1]; +}; diff --git a/float-no-zero/ol/ol/source.jsdoc b/float-no-zero/ol/ol/source.jsdoc new file mode 100644 index 0000000000..7c86502e0e --- /dev/null +++ b/float-no-zero/ol/ol/source.jsdoc @@ -0,0 +1,3 @@ +/** + * @namespace ol.source + */ diff --git a/float-no-zero/ol/ol/source/bingmapssource.exports b/float-no-zero/ol/ol/source/bingmapssource.exports new file mode 100644 index 0000000000..5f7481f7c9 --- /dev/null +++ b/float-no-zero/ol/ol/source/bingmapssource.exports @@ -0,0 +1,2 @@ +@exportSymbol ol.source.BingMaps +@exportProperty ol.source.BingMaps.TOS_ATTRIBUTION diff --git a/float-no-zero/ol/ol/source/bingmapssource.js b/float-no-zero/ol/ol/source/bingmapssource.js new file mode 100644 index 0000000000..c060ee88e1 --- /dev/null +++ b/float-no-zero/ol/ol/source/bingmapssource.js @@ -0,0 +1,159 @@ +goog.provide('ol.source.BingMaps'); + +goog.require('goog.Uri'); +goog.require('goog.array'); +goog.require('goog.asserts'); +goog.require('goog.net.Jsonp'); +goog.require('ol.Attribution'); +goog.require('ol.TileRange'); +goog.require('ol.TileUrlFunction'); +goog.require('ol.extent'); +goog.require('ol.proj'); +goog.require('ol.source.State'); +goog.require('ol.source.TileImage'); +goog.require('ol.tilegrid.XYZ'); + + + +/** + * @constructor + * @extends {ol.source.TileImage} + * @param {olx.source.BingMapsOptions} options Bing Maps options. + * @todo stability experimental + */ +ol.source.BingMaps = function(options) { + + goog.base(this, { + crossOrigin: 'anonymous', + opaque: true, + projection: ol.proj.get('EPSG:3857'), + state: ol.source.State.LOADING, + tileLoadFunction: options.tileLoadFunction + }); + + /** + * @private + * @type {string} + */ + this.culture_ = goog.isDef(options.culture) ? options.culture : 'en-us'; + + var uri = new goog.Uri( + '//dev.virtualearth.net/REST/v1/Imagery/Metadata/' + options.imagerySet); + var jsonp = new goog.net.Jsonp(uri, 'jsonp'); + jsonp.send({ + 'include': 'ImageryProviders', + 'key': options.key + }, goog.bind(this.handleImageryMetadataResponse, this)); + +}; +goog.inherits(ol.source.BingMaps, ol.source.TileImage); + + +/** + * @const + * @type {ol.Attribution} + */ +ol.source.BingMaps.TOS_ATTRIBUTION = new ol.Attribution({ + html: '' + + 'Terms of Use' +}); + + +/** + * @param {BingMapsImageryMetadataResponse} response Response. + */ +ol.source.BingMaps.prototype.handleImageryMetadataResponse = + function(response) { + + if (response.statusCode != 200 || + response.statusDescription != 'OK' || + response.authenticationResultCode != 'ValidCredentials' || + response.resourceSets.length != 1 || + response.resourceSets[0].resources.length != 1) { + this.setState(ol.source.State.ERROR); + return; + } + + var brandLogoUri = response.brandLogoUri; + //var copyright = response.copyright; // FIXME do we need to display this? + var resource = response.resourceSets[0].resources[0]; + + goog.asserts.assert(resource.imageWidth == resource.imageHeight); + var tileGrid = new ol.tilegrid.XYZ({ + minZoom: resource.zoomMin, + maxZoom: resource.zoomMax, + tileSize: resource.imageWidth + }); + this.tileGrid = tileGrid; + + var culture = this.culture_; + this.tileUrlFunction = ol.TileUrlFunction.withTileCoordTransform( + tileGrid.createTileCoordTransform(), + ol.TileUrlFunction.createFromTileUrlFunctions( + goog.array.map( + resource.imageUrlSubdomains, + function(subdomain) { + var imageUrl = resource.imageUrl + .replace('{subdomain}', subdomain) + .replace('{culture}', culture); + return ( + /** + * @this {ol.source.BingMaps} + * @param {ol.TileCoord} tileCoord Tile coordinate. + * @param {number} pixelRatio Pixel ratio. + * @param {ol.proj.Projection} projection Projection. + * @return {string|undefined} Tile URL. + */ + function(tileCoord, pixelRatio, projection) { + goog.asserts.assert(ol.proj.equivalent( + projection, this.getProjection())); + if (goog.isNull(tileCoord)) { + return undefined; + } else { + return imageUrl.replace( + '{quadkey}', tileCoord.quadKey()); + } + }); + }))); + + if (resource.imageryProviders) { + var transform = ol.proj.getTransformFromProjections( + ol.proj.get('EPSG:4326'), this.getProjection()); + + var attributions = goog.array.map( + resource.imageryProviders, + function(imageryProvider) { + var html = imageryProvider.attribution; + /** @type {Object.>} */ + var tileRanges = {}; + goog.array.forEach( + imageryProvider.coverageAreas, + function(coverageArea) { + var minZ = coverageArea.zoomMin; + var maxZ = coverageArea.zoomMax; + var bbox = coverageArea.bbox; + var epsg4326Extent = [bbox[1], bbox[0], bbox[3], bbox[2]]; + var extent = ol.extent.transform(epsg4326Extent, transform); + var tileRange, z, zKey; + for (z = minZ; z <= maxZ; ++z) { + zKey = z.toString(); + tileRange = tileGrid.getTileRangeForExtentAndZ(extent, z); + if (zKey in tileRanges) { + tileRanges[zKey].push(tileRange); + } else { + tileRanges[zKey] = [tileRange]; + } + } + }); + return new ol.Attribution({html: html, tileRanges: tileRanges}); + }); + attributions.push(ol.source.BingMaps.TOS_ATTRIBUTION); + this.setAttributions(attributions); + } + + this.setLogo(brandLogoUri); + + this.setState(ol.source.State.READY); + +}; diff --git a/float-no-zero/ol/ol/source/debugtilesource.exports b/float-no-zero/ol/ol/source/debugtilesource.exports new file mode 100644 index 0000000000..35fcf0c02e --- /dev/null +++ b/float-no-zero/ol/ol/source/debugtilesource.exports @@ -0,0 +1 @@ +@exportSymbol ol.source.TileDebug diff --git a/float-no-zero/ol/ol/source/debugtilesource.js b/float-no-zero/ol/ol/source/debugtilesource.js new file mode 100644 index 0000000000..3bc6f69fd3 --- /dev/null +++ b/float-no-zero/ol/ol/source/debugtilesource.js @@ -0,0 +1,137 @@ +goog.provide('ol.source.TileDebug'); + +goog.require('goog.dom'); +goog.require('goog.dom.TagName'); +goog.require('ol.Tile'); +goog.require('ol.TileCache'); +goog.require('ol.TileCoord'); +goog.require('ol.TileState'); +goog.require('ol.source.Tile'); +goog.require('ol.tilegrid.TileGrid'); + + + +/** + * @constructor + * @extends {ol.Tile} + * @param {ol.TileCoord} tileCoord Tile coordinate. + * @param {ol.tilegrid.TileGrid} tileGrid Tile grid. + * @private + */ +ol.DebugTile_ = function(tileCoord, tileGrid) { + + goog.base(this, tileCoord, ol.TileState.LOADED); + + /** + * @private + * @type {ol.TileCoord} + */ + this.tileCoord_ = tileCoord; + + /** + * @private + * @type {number} + */ + this.tileSize_ = tileGrid.getTileSize(tileCoord.z); + + /** + * @private + * @type {Object.} + */ + this.canvasByContext_ = {}; + +}; +goog.inherits(ol.DebugTile_, ol.Tile); + + +/** + * @inheritDoc + */ +ol.DebugTile_.prototype.getImage = function(opt_context) { + var key = goog.isDef(opt_context) ? goog.getUid(opt_context) : -1; + if (key in this.canvasByContext_) { + return this.canvasByContext_[key]; + } else { + + var tileSize = this.tileSize_; + + var canvas = /** @type {HTMLCanvasElement} */ + (goog.dom.createElement(goog.dom.TagName.CANVAS)); + canvas.width = tileSize; + canvas.height = tileSize; + + var context = /** @type {CanvasRenderingContext2D} */ + (canvas.getContext('2d')); + + context.strokeStyle = 'black'; + context.strokeRect(0.5, 0.5, tileSize + 0.5, tileSize + 0.5); + + context.fillStyle = 'black'; + context.textAlign = 'center'; + context.textBaseline = 'middle'; + context.font = '24px sans-serif'; + context.fillText( + this.tileCoord_.toString(), tileSize / 2, tileSize / 2); + + this.canvasByContext_[key] = canvas; + return canvas; + + } +}; + + + +/** + * @constructor + * @extends {ol.source.Tile} + * @param {olx.source.TileDebugOptions} options Debug tile options. + * @todo stability experimental + */ +ol.source.TileDebug = function(options) { + + goog.base(this, { + extent: options.extent, + opaque: false, + projection: options.projection, + tileGrid: options.tileGrid + }); + + /** + * @private + * @type {ol.TileCache} + */ + this.tileCache_ = new ol.TileCache(); + +}; +goog.inherits(ol.source.TileDebug, ol.source.Tile); + + +/** + * @inheritDoc + */ +ol.source.TileDebug.prototype.canExpireCache = function() { + return this.tileCache_.canExpireCache(); +}; + + +/** + * @inheritDoc + */ +ol.source.TileDebug.prototype.expireCache = function(usedTiles) { + this.tileCache_.expireCache(usedTiles); +}; + + +/** + * @inheritDoc + */ +ol.source.TileDebug.prototype.getTile = function(z, x, y) { + var tileCoordKey = this.getKeyZXY(z, x, y); + if (this.tileCache_.containsKey(tileCoordKey)) { + return /** @type {!ol.DebugTile_} */ (this.tileCache_.get(tileCoordKey)); + } else { + var tile = new ol.DebugTile_(new ol.TileCoord(z, x, y), this.tileGrid); + this.tileCache_.set(tileCoordKey, tile); + return tile; + } +}; diff --git a/float-no-zero/ol/ol/source/geojsonsource.exports b/float-no-zero/ol/ol/source/geojsonsource.exports new file mode 100644 index 0000000000..52f49004f2 --- /dev/null +++ b/float-no-zero/ol/ol/source/geojsonsource.exports @@ -0,0 +1 @@ +@exportSymbol ol.source.GeoJSON diff --git a/float-no-zero/ol/ol/source/geojsonsource.js b/float-no-zero/ol/ol/source/geojsonsource.js new file mode 100644 index 0000000000..67aa42b4ca --- /dev/null +++ b/float-no-zero/ol/ol/source/geojsonsource.js @@ -0,0 +1,33 @@ +goog.provide('ol.source.GeoJSON'); + +goog.require('ol.format.GeoJSON'); +goog.require('ol.source.VectorFile'); + + + +/** + * @constructor + * @extends {ol.source.VectorFile} + * @param {olx.source.GeoJSONOptions=} opt_options Options. + * @todo stability experimental + */ +ol.source.GeoJSON = function(opt_options) { + + var options = goog.isDef(opt_options) ? opt_options : {}; + + goog.base(this, { + attributions: options.attributions, + extent: options.extent, + format: new ol.format.GeoJSON({ + defaultProjection: options.defaultProjection + }), + logo: options.logo, + object: options.object, + projection: options.projection, + text: options.text, + url: options.url, + urls: options.urls + }); + +}; +goog.inherits(ol.source.GeoJSON, ol.source.VectorFile); diff --git a/float-no-zero/ol/ol/source/gpxsource.exports b/float-no-zero/ol/ol/source/gpxsource.exports new file mode 100644 index 0000000000..0dfabb47be --- /dev/null +++ b/float-no-zero/ol/ol/source/gpxsource.exports @@ -0,0 +1 @@ +@exportSymbol ol.source.GPX diff --git a/float-no-zero/ol/ol/source/gpxsource.js b/float-no-zero/ol/ol/source/gpxsource.js new file mode 100644 index 0000000000..5edd1e1a6f --- /dev/null +++ b/float-no-zero/ol/ol/source/gpxsource.js @@ -0,0 +1,32 @@ +goog.provide('ol.source.GPX'); + +goog.require('ol.format.GPX'); +goog.require('ol.source.VectorFile'); + + + +/** + * @constructor + * @extends {ol.source.VectorFile} + * @param {olx.source.GPXOptions=} opt_options Options. + * @todo stability experimental + */ +ol.source.GPX = function(opt_options) { + + var options = goog.isDef(opt_options) ? opt_options : {}; + + goog.base(this, { + attributions: options.attributions, + doc: options.doc, + extent: options.extent, + format: new ol.format.GPX(), + logo: options.logo, + node: options.node, + projection: options.projection, + text: options.text, + url: options.url, + urls: options.urls + }); + +}; +goog.inherits(ol.source.GPX, ol.source.VectorFile); diff --git a/float-no-zero/ol/ol/source/igcsource.exports b/float-no-zero/ol/ol/source/igcsource.exports new file mode 100644 index 0000000000..6d4292225e --- /dev/null +++ b/float-no-zero/ol/ol/source/igcsource.exports @@ -0,0 +1 @@ +@exportSymbol ol.source.IGC diff --git a/float-no-zero/ol/ol/source/igcsource.js b/float-no-zero/ol/ol/source/igcsource.js new file mode 100644 index 0000000000..3548e139e7 --- /dev/null +++ b/float-no-zero/ol/ol/source/igcsource.js @@ -0,0 +1,29 @@ +goog.provide('ol.source.IGC'); + +goog.require('ol.format.IGC'); +goog.require('ol.source.VectorFile'); + + + +/** + * @constructor + * @extends {ol.source.VectorFile} + * @param {olx.source.IGCOptions=} opt_options Options. + * @todo stability experimental + */ +ol.source.IGC = function(opt_options) { + + var options = goog.isDef(opt_options) ? opt_options : {}; + + goog.base(this, { + format: new ol.format.IGC({ + altitudeMode: options.altitudeMode + }), + projection: options.projection, + text: options.text, + url: options.url, + urls: options.urls + }); + +}; +goog.inherits(ol.source.IGC, ol.source.VectorFile); diff --git a/float-no-zero/ol/ol/source/imagecanvassource.exports b/float-no-zero/ol/ol/source/imagecanvassource.exports new file mode 100644 index 0000000000..280f37c7f2 --- /dev/null +++ b/float-no-zero/ol/ol/source/imagecanvassource.exports @@ -0,0 +1 @@ +@exportSymbol ol.source.ImageCanvas diff --git a/float-no-zero/ol/ol/source/imagecanvassource.js b/float-no-zero/ol/ol/source/imagecanvassource.js new file mode 100644 index 0000000000..33d5a9a0fe --- /dev/null +++ b/float-no-zero/ol/ol/source/imagecanvassource.js @@ -0,0 +1,88 @@ +goog.provide('ol.source.ImageCanvas'); + +goog.require('ol.CanvasFunctionType'); +goog.require('ol.ImageCanvas'); +goog.require('ol.extent'); +goog.require('ol.source.Image'); + + + +/** + * @constructor + * @extends {ol.source.Image} + * @param {olx.source.ImageCanvasOptions} options + * @todo stability experimental + */ +ol.source.ImageCanvas = function(options) { + + goog.base(this, { + attributions: options.attributions, + extent: options.extent, + logo: options.logo, + projection: options.projection, + resolutions: options.resolutions, + state: options.state + }); + + /** + * @private + * @type {ol.CanvasFunctionType} + */ + this.canvasFunction_ = options.canvasFunction; + + /** + * @private + * @type {ol.ImageCanvas} + */ + this.canvas_ = null; + + /** + * @private + * @type {number} + */ + this.renderedRevision_ = 0; + + /** + * @private + * @type {number} + */ + this.ratio_ = goog.isDef(options.ratio) ? + options.ratio : 1.5; + +}; +goog.inherits(ol.source.ImageCanvas, ol.source.Image); + + +/** + * @inheritDoc + */ +ol.source.ImageCanvas.prototype.getImage = + function(extent, resolution, pixelRatio, projection) { + resolution = this.findNearestResolution(resolution); + + var canvas = this.canvas_; + if (!goog.isNull(canvas) && + this.renderedRevision_ == this.getRevision() && + canvas.getResolution() == resolution && + canvas.getPixelRatio() == pixelRatio && + ol.extent.containsExtent(canvas.getExtent(), extent)) { + return canvas; + } + + extent = extent.slice(); + ol.extent.scaleFromCenter(extent, this.ratio_); + var width = (extent[2] - extent[0]) / resolution; + var height = (extent[3] - extent[1]) / resolution; + var size = [width * pixelRatio, height * pixelRatio]; + + var canvasElement = this.canvasFunction_( + extent, resolution, pixelRatio, size, projection); + if (!goog.isNull(canvasElement)) { + canvas = new ol.ImageCanvas(extent, resolution, pixelRatio, + this.getAttributions(), canvasElement); + } + this.canvas_ = canvas; + this.renderedRevision_ = this.getRevision(); + + return canvas; +}; diff --git a/float-no-zero/ol/ol/source/imagesource.js b/float-no-zero/ol/ol/source/imagesource.js new file mode 100644 index 0000000000..4e8ea558d3 --- /dev/null +++ b/float-no-zero/ol/ol/source/imagesource.js @@ -0,0 +1,86 @@ +goog.provide('ol.source.Image'); + +goog.require('goog.array'); +goog.require('goog.asserts'); +goog.require('ol.Attribution'); +goog.require('ol.Extent'); +goog.require('ol.Image'); +goog.require('ol.array'); +goog.require('ol.source.Source'); + + +/** + * @typedef {{attributions: (Array.|undefined), + * extent: (null|ol.Extent|undefined), + * logo: (string|undefined), + * projection: ol.proj.ProjectionLike, + * resolutions: (Array.|undefined), + * state: (ol.source.State|string|undefined)}} + */ +ol.source.ImageOptions; + + + +/** + * @constructor + * @extends {ol.source.Source} + * @param {ol.source.ImageOptions} options Single image source options. + * @todo stability experimental + */ +ol.source.Image = function(options) { + + goog.base(this, { + attributions: options.attributions, + extent: options.extent, + logo: options.logo, + projection: options.projection, + state: options.state + }); + + /** + * @private + * @type {Array.} + */ + this.resolutions_ = goog.isDef(options.resolutions) ? + options.resolutions : null; + goog.asserts.assert(goog.isNull(this.resolutions_) || + goog.array.isSorted(this.resolutions_, + function(a, b) { + return b - a; + }, true)); + +}; +goog.inherits(ol.source.Image, ol.source.Source); + + +/** + * @return {Array.} Resolutions. + */ +ol.source.Image.prototype.getResolutions = function() { + return this.resolutions_; +}; + + +/** + * @protected + * @param {number} resolution Resolution. + * @return {number} Resolution. + */ +ol.source.Image.prototype.findNearestResolution = + function(resolution) { + if (!goog.isNull(this.resolutions_)) { + var idx = ol.array.linearFindNearest(this.resolutions_, resolution, 0); + resolution = this.resolutions_[idx]; + } + return resolution; +}; + + +/** + * @param {ol.Extent} extent Extent. + * @param {number} resolution Resolution. + * @param {number} pixelRatio Pixel ratio. + * @param {ol.proj.Projection} projection Projection. + * @return {ol.ImageBase} Single image. + */ +ol.source.Image.prototype.getImage = goog.abstractMethod; diff --git a/float-no-zero/ol/ol/source/imagestaticsource.exports b/float-no-zero/ol/ol/source/imagestaticsource.exports new file mode 100644 index 0000000000..b07c04a34a --- /dev/null +++ b/float-no-zero/ol/ol/source/imagestaticsource.exports @@ -0,0 +1 @@ +@exportSymbol ol.source.ImageStatic diff --git a/float-no-zero/ol/ol/source/imagestaticsource.js b/float-no-zero/ol/ol/source/imagestaticsource.js new file mode 100644 index 0000000000..52d9052570 --- /dev/null +++ b/float-no-zero/ol/ol/source/imagestaticsource.js @@ -0,0 +1,56 @@ +goog.provide('ol.source.ImageStatic'); + +goog.require('ol.Image'); +goog.require('ol.extent'); +goog.require('ol.proj'); +goog.require('ol.source.Image'); + + + +/** + * @constructor + * @extends {ol.source.Image} + * @param {olx.source.ImageStaticOptions} options Options. + * @todo stability experimental + */ +ol.source.ImageStatic = function(options) { + + var attributions = goog.isDef(options.attributions) ? + options.attributions : null; + var crossOrigin = goog.isDef(options.crossOrigin) ? + options.crossOrigin : null; + var imageExtent = options.imageExtent; + var imageSize = options.imageSize; + var imageResolution = (imageExtent[3] - imageExtent[1]) / imageSize[1]; + var imageUrl = options.url; + var projection = ol.proj.get(options.projection); + + goog.base(this, { + attributions: attributions, + extent: options.extent, + logo: options.logo, + projection: projection, + resolutions: [imageResolution] + }); + + /** + * @private + * @type {ol.Image} + */ + this.image_ = new ol.Image(imageExtent, imageResolution, 1, attributions, + imageUrl, crossOrigin); + +}; +goog.inherits(ol.source.ImageStatic, ol.source.Image); + + +/** + * @inheritDoc + */ +ol.source.ImageStatic.prototype.getImage = + function(extent, resolution, pixelRatio, projection) { + if (ol.extent.intersects(extent, this.image_.getExtent())) { + return this.image_; + } + return null; +}; diff --git a/float-no-zero/ol/ol/source/imagevectorsource.exports b/float-no-zero/ol/ol/source/imagevectorsource.exports new file mode 100644 index 0000000000..17ff190f77 --- /dev/null +++ b/float-no-zero/ol/ol/source/imagevectorsource.exports @@ -0,0 +1 @@ +@exportSymbol ol.source.ImageVector diff --git a/float-no-zero/ol/ol/source/imagevectorsource.js b/float-no-zero/ol/ol/source/imagevectorsource.js new file mode 100644 index 0000000000..16861f4bfc --- /dev/null +++ b/float-no-zero/ol/ol/source/imagevectorsource.js @@ -0,0 +1,237 @@ +goog.provide('ol.source.ImageVector'); + +goog.require('goog.asserts'); +goog.require('goog.dom'); +goog.require('goog.dom.TagName'); +goog.require('goog.events'); +goog.require('goog.events.EventType'); +goog.require('goog.vec.Mat4'); +goog.require('ol.extent'); +goog.require('ol.feature'); +goog.require('ol.render.canvas.ReplayGroup'); +goog.require('ol.renderer.vector'); +goog.require('ol.source.ImageCanvas'); +goog.require('ol.source.Vector'); +goog.require('ol.vec.Mat4'); + + + +/** + * An image source whose images are canvas elements into which vector features + * read from a vector source (`ol.source.Vector`) are drawn. An + * `ol.source.ImageVector` object is to be used as the `source` of an image + * layer (`ol.layer.Image`). Image layers are rotated, scaled, and translated, + * as opposed to being re-rendered, during animations and interactions. So, like + * any other image layer, an image layer configured with an + * `ol.source.ImageVector` will exhibit this behaviour. This is in contrast to a + * vector layer, where vector features are re-drawn during animations and + * interactions. + * + * @constructor + * @extends {ol.source.ImageCanvas} + * @param {olx.source.ImageVectorOptions} options Options. + * @todo stability experimental + */ +ol.source.ImageVector = function(options) { + + /** + * @private + * @type {ol.source.Vector} + */ + this.source_ = options.source; + + /** + * @private + * @type {!ol.feature.StyleFunction} + */ + this.styleFunction_ = goog.isDef(options.style) ? + ol.feature.createStyleFunction(options.style) : + ol.feature.defaultStyleFunction; + + /** + * @private + * @type {!goog.vec.Mat4.Number} + */ + this.transform_ = goog.vec.Mat4.createNumber(); + + /** + * @private + * @type {HTMLCanvasElement} + */ + this.canvasElement_ = /** @type {HTMLCanvasElement} */ + (goog.dom.createElement(goog.dom.TagName.CANVAS)); + + /** + * @private + * @type {CanvasRenderingContext2D} + */ + this.canvasContext_ = /** @type {CanvasRenderingContext2D} */ + (this.canvasElement_.getContext('2d')); + + /** + * @private + * @type {ol.Size} + */ + this.canvasSize_ = [0, 0]; + + /** + * @private + * @type {ol.render.canvas.ReplayGroup} + */ + this.replayGroup_ = null; + + goog.base(this, { + attributions: options.attributions, + canvasFunction: goog.bind(this.canvasFunctionInternal_, this), + extent: options.extent, + logo: options.logo, + projection: options.projection, + ratio: options.ratio, + resolutions: options.resolutions, + state: this.source_.getState() + }); + + goog.events.listen(this.source_, goog.events.EventType.CHANGE, + this.handleSourceChange_, undefined, this); + +}; +goog.inherits(ol.source.ImageVector, ol.source.ImageCanvas); + + +/** + * @param {ol.Extent} extent Extent. + * @param {number} resolution Resolution. + * @param {number} pixelRatio Pixel ratio. + * @param {ol.Size} size Size. + * @param {ol.proj.Projection} projection Projection; + * @return {HTMLCanvasElement} Canvas element. + * @private + */ +ol.source.ImageVector.prototype.canvasFunctionInternal_ = + function(extent, resolution, pixelRatio, size, projection) { + + var tolerance = resolution / (2 * pixelRatio); + var replayGroup = new ol.render.canvas.ReplayGroup(tolerance, extent); + + var loading = false; + this.source_.forEachFeatureInExtent(extent, + /** + * @param {ol.Feature} feature Feature. + */ + function(feature) { + loading = loading || + this.renderFeature_(feature, resolution, pixelRatio, replayGroup); + }, this); + replayGroup.finish(); + + if (loading) { + return null; + } + + if (this.canvasSize_[0] != size[0] || this.canvasSize_[1] != size[1]) { + this.canvasElement_.width = size[0]; + this.canvasElement_.height = size[1]; + this.canvasSize_[0] = size[0]; + this.canvasSize_[1] = size[1]; + } else { + this.canvasContext_.clearRect(0, 0, size[0], size[1]); + } + + var transform = this.getTransform_(ol.extent.getCenter(extent), + resolution, pixelRatio, size); + replayGroup.replay(this.canvasContext_, extent, pixelRatio, transform, 0, + goog.functions.TRUE); + + this.replayGroup_ = replayGroup; + + return this.canvasElement_; +}; + + +/** + * @inheritDoc + */ +ol.source.ImageVector.prototype.forEachFeatureAtPixel = + function(extent, resolution, rotation, coordinate, callback) { + if (goog.isNull(this.replayGroup_)) { + return undefined; + } else { + return this.replayGroup_.forEachGeometryAtPixel( + extent, resolution, 0, coordinate, goog.functions.TRUE, + /** + * @param {ol.geom.Geometry} geometry Geometry. + * @param {Object} data Data. + * @return {?} Callback result. + */ + function(geometry, data) { + var feature = /** @type {ol.Feature} */ (data); + return callback(feature); + }); + } +}; + + +/** + * @param {ol.Coordinate} center Center. + * @param {number} resolution Resolution. + * @param {number} pixelRatio Pixel ratio. + * @param {ol.Size} size Size. + * @return {!goog.vec.Mat4.Number} Transform. + * @private + */ +ol.source.ImageVector.prototype.getTransform_ = + function(center, resolution, pixelRatio, size) { + return ol.vec.Mat4.makeTransform2D(this.transform_, + size[0] / 2, size[1] / 2, + pixelRatio / resolution, -pixelRatio / resolution, + 0, + -center[0], -center[1]); +}; + + +/** + * Handle changes in image style state. + * @param {goog.events.Event} event Image style change event. + * @private + */ +ol.source.ImageVector.prototype.handleImageChange_ = + function(event) { + this.dispatchChangeEvent(); +}; + + +/** + * @private + */ +ol.source.ImageVector.prototype.handleSourceChange_ = function() { + // setState will trigger a CHANGE event, so we always rely + // change events by calling setState. + this.setState(this.source_.getState()); +}; + + +/** + * @param {ol.Feature} feature Feature. + * @param {number} resolution Resolution. + * @param {number} pixelRatio Pixel ratio. + * @param {ol.render.canvas.ReplayGroup} replayGroup Replay group. + * @return {boolean} `true` if an image is loading. + * @private + */ +ol.source.ImageVector.prototype.renderFeature_ = + function(feature, resolution, pixelRatio, replayGroup) { + var styles = this.styleFunction_(feature, resolution); + if (!goog.isDefAndNotNull(styles)) { + return false; + } + // simplify to a tolerance of half a device pixel + var squaredTolerance = + resolution * resolution / (4 * pixelRatio * pixelRatio); + var i, ii, loading = false; + for (i = 0, ii = styles.length; i < ii; ++i) { + loading = ol.renderer.vector.renderFeature( + replayGroup, feature, styles[i], squaredTolerance, feature, + this.handleImageChange_, this) || loading; + } + return loading; +}; diff --git a/float-no-zero/ol/ol/source/imagewmssource.exports b/float-no-zero/ol/ol/source/imagewmssource.exports new file mode 100644 index 0000000000..eb78668cdf --- /dev/null +++ b/float-no-zero/ol/ol/source/imagewmssource.exports @@ -0,0 +1,5 @@ +@exportSymbol ol.source.ImageWMS +@exportProperty ol.source.ImageWMS.prototype.getGetFeatureInfoUrl +@exportProperty ol.source.ImageWMS.prototype.getParams +@exportProperty ol.source.ImageWMS.prototype.setUrl +@exportProperty ol.source.ImageWMS.prototype.updateParams diff --git a/float-no-zero/ol/ol/source/imagewmssource.js b/float-no-zero/ol/ol/source/imagewmssource.js new file mode 100644 index 0000000000..fbff7861d6 --- /dev/null +++ b/float-no-zero/ol/ol/source/imagewmssource.js @@ -0,0 +1,344 @@ +// FIXME cannot be shared between maps with different projections + +goog.provide('ol.source.ImageWMS'); + +goog.require('goog.asserts'); +goog.require('goog.object'); +goog.require('goog.string'); +goog.require('goog.uri.utils'); +goog.require('ol.Image'); +goog.require('ol.extent'); +goog.require('ol.proj'); +goog.require('ol.source.Image'); +goog.require('ol.source.wms'); +goog.require('ol.source.wms.ServerType'); + + + +/** + * @constructor + * @extends {ol.source.Image} + * @param {olx.source.ImageWMSOptions=} opt_options Options. + * @todo stability experimental + */ +ol.source.ImageWMS = function(opt_options) { + + var options = goog.isDef(opt_options) ? opt_options : {}; + + goog.base(this, { + attributions: options.attributions, + extent: options.extent, + logo: options.logo, + projection: options.projection, + resolutions: options.resolutions + }); + + /** + * @private + * @type {?string} + */ + this.crossOrigin_ = + goog.isDef(options.crossOrigin) ? options.crossOrigin : null; + + /** + * @private + * @type {string|undefined} + */ + this.url_ = options.url; + + /** + * @private + * @type {Object} + */ + this.params_ = options.params; + + /** + * @private + * @type {boolean} + */ + this.v13_ = true; + this.updateV13_(); + + /** + * @private + * @type {ol.source.wms.ServerType|undefined} + */ + this.serverType_ = + /** @type {ol.source.wms.ServerType|undefined} */ (options.serverType); + + /** + * @private + * @type {boolean} + */ + this.hidpi_ = goog.isDef(options.hidpi) ? options.hidpi : true; + + /** + * @private + * @type {ol.Image} + */ + this.image_ = null; + + /** + * @private + * @type {ol.Size} + */ + this.imageSize_ = [0, 0]; + + /** + * @private + * @type {ol.proj.Projection} + */ + this.renderedProjection_ = null; + + /** + * @private + * @type {number} + */ + this.renderedResolution_ = NaN; + + /** + * @private + * @type {number} + */ + this.renderedRevision_ = 0; + + /** + * @private + * @type {number} + */ + this.ratio_ = goog.isDef(options.ratio) ? options.ratio : 1.5; + +}; +goog.inherits(ol.source.ImageWMS, ol.source.Image); + + +/** + * Return the GetFeatureInfo URL for the passed coordinate, resolution, and + * projection. Return `undefined` if the GetFeatureInfo URL cannot be + * constructed. + * @param {ol.Coordinate} coordinate Coordinate. + * @param {number} resolution Resolution. + * @param {ol.proj.Projection} projection Projection. + * @param {!Object} params GetFeatureInfo params. `INFO_FORMAT` at least should + * be provided. If `QUERY_LAYERS` is not provided then the layers specified + * in the `LAYERS` parameter will be used. `VERSION` should not be + * specified here. + * @return {string|undefined} GetFeatureInfo URL. + */ +ol.source.ImageWMS.prototype.getGetFeatureInfoUrl = + function(coordinate, resolution, projection, params) { + + goog.asserts.assert(!('VERSION' in params)); + + if (!goog.isDef(this.url_) || goog.isNull(this.image_)) { + return undefined; + } + + goog.asserts.assert(this.imageSize_[0] !== 0 && + this.imageSize_[1] !== 0); + goog.asserts.assert(!isNaN(this.renderedResolution_)); + goog.asserts.assert(!goog.isNull(this.renderedProjection_)); + + if (resolution != this.renderedResolution_ || + !ol.proj.equivalent(projection, this.renderedProjection_)) { + return undefined; + } + + var extent = this.image_.getExtent(); + var pixelRatio = this.image_.getPixelRatio(); + + var baseParams = { + 'SERVICE': 'WMS', + 'VERSION': ol.source.wms.DEFAULT_VERSION, + 'REQUEST': 'GetFeatureInfo', + 'FORMAT': 'image/png', + 'TRANSPARENT': true, + 'QUERY_LAYERS': goog.object.get(this.params_, 'LAYERS') + }; + goog.object.extend(baseParams, this.params_, params); + + var imageResolution = resolution / pixelRatio; + + var x = Math.floor((coordinate[0] - extent[0]) / imageResolution); + var y = Math.floor((extent[3] - coordinate[1]) / imageResolution); + goog.object.set(baseParams, this.v13_ ? 'I' : 'X', x); + goog.object.set(baseParams, this.v13_ ? 'J' : 'Y', y); + + return this.getRequestUrl_(extent, this.imageSize_, pixelRatio, projection, + baseParams); +}; + + +/** + * Get the user-provided params, i.e. those passed to the constructor through + * the "params" option, and possibly updated using the updateParams method. + * @return {Object} Params. + */ +ol.source.ImageWMS.prototype.getParams = function() { + return this.params_; +}; + + +/** + * @inheritDoc + */ +ol.source.ImageWMS.prototype.getImage = + function(extent, resolution, pixelRatio, projection) { + + if (!goog.isDef(this.url_)) { + return null; + } + + resolution = this.findNearestResolution(resolution); + + if (pixelRatio != 1 && (!this.hidpi_ || !goog.isDef(this.serverType_))) { + pixelRatio = 1; + } + + var image = this.image_; + if (!goog.isNull(image) && + this.renderedRevision_ == this.getRevision() && + image.getResolution() == resolution && + image.getPixelRatio() == pixelRatio && + ol.extent.containsExtent(image.getExtent(), extent)) { + return image; + } + + var params = { + 'SERVICE': 'WMS', + 'VERSION': ol.source.wms.DEFAULT_VERSION, + 'REQUEST': 'GetMap', + 'FORMAT': 'image/png', + 'TRANSPARENT': true + }; + goog.object.extend(params, this.params_); + + extent = extent.slice(); + var centerX = (extent[0] + extent[2]) / 2; + var centerY = (extent[1] + extent[3]) / 2; + if (this.ratio_ != 1) { + var halfWidth = this.ratio_ * (extent[2] - extent[0]) / 2; + var halfHeight = this.ratio_ * (extent[3] - extent[1]) / 2; + extent[0] = centerX - halfWidth; + extent[1] = centerY - halfHeight; + extent[2] = centerX + halfWidth; + extent[3] = centerY + halfHeight; + } + + var imageResolution = resolution / pixelRatio; + + // Compute an integer width and height. + var width = Math.ceil((extent[2] - extent[0]) / imageResolution); + var height = Math.ceil((extent[3] - extent[1]) / imageResolution); + + // Modify the extent to match the integer width and height. + extent[0] = centerX - imageResolution * width / 2; + extent[2] = centerX + imageResolution * width / 2; + extent[1] = centerY - imageResolution * height / 2; + extent[3] = centerY + imageResolution * height / 2; + + this.imageSize_[0] = width; + this.imageSize_[1] = height; + + var url = this.getRequestUrl_(extent, this.imageSize_, pixelRatio, + projection, params); + + this.image_ = new ol.Image(extent, resolution, pixelRatio, + this.getAttributions(), url, this.crossOrigin_); + + this.renderedProjection_ = projection; + this.renderedResolution_ = resolution; + this.renderedRevision_ = this.getRevision(); + + return this.image_; + +}; + + +/** + * @param {ol.Extent} extent Extent. + * @param {ol.Size} size Size. + * @param {number} pixelRatio Pixel ratio. + * @param {ol.proj.Projection} projection Projection. + * @param {Object} params Params. + * @return {string} Request URL. + * @private + */ +ol.source.ImageWMS.prototype.getRequestUrl_ = + function(extent, size, pixelRatio, projection, params) { + + goog.asserts.assert(goog.isDef(this.url_)); + + params[this.v13_ ? 'CRS' : 'SRS'] = projection.getCode(); + + if (!('STYLES' in this.params_)) { + goog.object.set(params, 'STYLES', new String('')); + } + + if (pixelRatio != 1) { + switch (this.serverType_) { + case ol.source.wms.ServerType.GEOSERVER: + var dpi = (90 * pixelRatio + 0.5) | 0; + goog.object.set(params, 'FORMAT_OPTIONS', 'dpi:' + dpi); + break; + case ol.source.wms.ServerType.MAPSERVER: + goog.object.set(params, 'MAP_RESOLUTION', 90 * pixelRatio); + break; + case ol.source.wms.ServerType.CARMENTA_SERVER: + case ol.source.wms.ServerType.QGIS: + goog.object.set(params, 'DPI', 90 * pixelRatio); + break; + default: + goog.asserts.fail(); + break; + } + } + + goog.object.set(params, 'WIDTH', size[0]); + goog.object.set(params, 'HEIGHT', size[1]); + + var axisOrientation = projection.getAxisOrientation(); + var bbox; + if (this.v13_ && axisOrientation.substr(0, 2) == 'ne') { + bbox = [extent[1], extent[0], extent[3], extent[2]]; + } else { + bbox = extent; + } + goog.object.set(params, 'BBOX', bbox.join(',')); + + return goog.uri.utils.appendParamsFromMap(this.url_, params); +}; + + +/** + * @param {string|undefined} url URL. + */ +ol.source.ImageWMS.prototype.setUrl = function(url) { + if (url != this.url_) { + this.url_ = url; + this.image_ = null; + this.dispatchChangeEvent(); + } +}; + + +/** + * Update the user-provided params. + * @param {Object} params Params. + */ +ol.source.ImageWMS.prototype.updateParams = function(params) { + goog.object.extend(this.params_, params); + this.updateV13_(); + this.image_ = null; + this.dispatchChangeEvent(); +}; + + +/** + * @private + */ +ol.source.ImageWMS.prototype.updateV13_ = function() { + var version = + goog.object.get(this.params_, 'VERSION', ol.source.wms.DEFAULT_VERSION); + this.v13_ = goog.string.compareVersions(version, '1.3') >= 0; +}; diff --git a/float-no-zero/ol/ol/source/kmlsource.exports b/float-no-zero/ol/ol/source/kmlsource.exports new file mode 100644 index 0000000000..45c5580867 --- /dev/null +++ b/float-no-zero/ol/ol/source/kmlsource.exports @@ -0,0 +1 @@ +@exportSymbol ol.source.KML diff --git a/float-no-zero/ol/ol/source/kmlsource.js b/float-no-zero/ol/ol/source/kmlsource.js new file mode 100644 index 0000000000..501b84b15c --- /dev/null +++ b/float-no-zero/ol/ol/source/kmlsource.js @@ -0,0 +1,34 @@ +goog.provide('ol.source.KML'); + +goog.require('ol.format.KML'); +goog.require('ol.source.VectorFile'); + + + +/** + * @constructor + * @extends {ol.source.VectorFile} + * @param {olx.source.KMLOptions=} opt_options Options. + * @todo stability experimental + */ +ol.source.KML = function(opt_options) { + + var options = goog.isDef(opt_options) ? opt_options : {}; + + goog.base(this, { + attributions: options.attributions, + doc: options.doc, + extent: options.extent, + format: new ol.format.KML({ + defaultStyle: options.defaultStyle + }), + logo: options.logo, + node: options.node, + projection: options.projection, + text: options.text, + url: options.url, + urls: options.urls + }); + +}; +goog.inherits(ol.source.KML, ol.source.VectorFile); diff --git a/float-no-zero/ol/ol/source/mapguidesource.exports b/float-no-zero/ol/ol/source/mapguidesource.exports new file mode 100644 index 0000000000..c386f721e0 --- /dev/null +++ b/float-no-zero/ol/ol/source/mapguidesource.exports @@ -0,0 +1 @@ +@exportSymbol ol.source.MapGuide diff --git a/float-no-zero/ol/ol/source/mapguidesource.js b/float-no-zero/ol/ol/source/mapguidesource.js new file mode 100644 index 0000000000..449e0adaa0 --- /dev/null +++ b/float-no-zero/ol/ol/source/mapguidesource.js @@ -0,0 +1,176 @@ +goog.provide('ol.source.MapGuide'); + +goog.require('goog.object'); +goog.require('goog.uri.utils'); +goog.require('ol.Image'); +goog.require('ol.ImageUrlFunction'); +goog.require('ol.extent'); +goog.require('ol.source.Image'); + + + +/** + * @constructor + * @extends {ol.source.Image} + * @param {olx.source.MapGuideOptions} options Options. + */ +ol.source.MapGuide = function(options) { + + goog.base(this, { + extent: options.extent, + projection: options.projection, + resolutions: options.resolutions + }); + + /** + * @private + * @type {?string} + */ + this.crossOrigin_ = + goog.isDef(options.crossOrigin) ? options.crossOrigin : null; + + /** + * @private + * @type {number} + */ + this.displayDpi_ = goog.isDef(options.displayDpi) ? + options.displayDpi : 96; + + var imageUrlFunction; + if (goog.isDef(options.url)) { + var params = goog.isDef(options.params) ? options.params : {}; + imageUrlFunction = ol.ImageUrlFunction.createFromParamsFunction( + options.url, params, goog.bind(this.getUrl, this)); + } else { + imageUrlFunction = ol.ImageUrlFunction.nullImageUrlFunction; + } + + /** + * @private + * @type {ol.ImageUrlFunctionType} + */ + this.imageUrlFunction_ = imageUrlFunction; + + /** + * @private + * @type {boolean} + */ + this.hidpi_ = goog.isDef(options.hidpi) ? options.hidpi : true; + + /** + * @private + * @type {number} + */ + this.metersPerUnit_ = goog.isDef(options.metersPerUnit) ? + options.metersPerUnit : 1; + + /** + * @private + * @type {number} + */ + this.ratio_ = goog.isDef(options.ratio) ? options.ratio : 1; + + /** + * @private + * @type {boolean} + */ + this.useOverlay_ = goog.isDef(options.useOverlay) ? + options.useOverlay : false; + + /** + * @private + * @type {ol.Image} + */ + this.image_ = null; + +}; +goog.inherits(ol.source.MapGuide, ol.source.Image); + + +/** + * @inheritDoc + */ +ol.source.MapGuide.prototype.getImage = + function(extent, resolution, pixelRatio, projection) { + resolution = this.findNearestResolution(resolution); + pixelRatio = this.hidpi_ ? pixelRatio : 1; + + var image = this.image_; + if (!goog.isNull(image) && + image.getResolution() == resolution && + image.getPixelRatio() == pixelRatio && + ol.extent.containsExtent(image.getExtent(), extent)) { + return image; + } + + if (this.ratio_ != 1) { + extent = extent.slice(); + ol.extent.scaleFromCenter(extent, this.ratio_); + } + var width = (extent[2] - extent[0]) / resolution; + var height = (extent[3] - extent[1]) / resolution; + var size = [width * pixelRatio, height * pixelRatio]; + + var imageUrl = this.imageUrlFunction_(extent, size, projection); + if (goog.isDef(imageUrl)) { + image = new ol.Image(extent, resolution, pixelRatio, + this.getAttributions(), imageUrl, this.crossOrigin_); + } else { + image = null; + } + this.image_ = image; + + return image; +}; + + +/** + * @param {ol.Extent} extent The map extents. + * @param {ol.Size} size the viewport size. + * @param {number} metersPerUnit The meters-per-unit value. + * @param {number} dpi The display resolution. + * @return {number} The computed map scale. + */ +ol.source.MapGuide.getScale = function(extent, size, metersPerUnit, dpi) { + var mcsW = ol.extent.getWidth(extent); + var mcsH = ol.extent.getHeight(extent); + var devW = size[0]; + var devH = size[1]; + var mpp = 0.0254 / dpi; + if (devH * mcsW > devW * mcsH) { + return mcsW * metersPerUnit / (devW * mpp); // width limited + } else { + return mcsH * metersPerUnit / (devH * mpp); // height limited + } +}; + + +/** + * @param {string} baseUrl The mapagent url. + * @param {Object.} params Request parameters. + * @param {ol.Extent} extent Extent. + * @param {ol.Size} size Size. + * @param {ol.proj.Projection} projection Projection. + * @return {string} The mapagent map image request URL. + */ +ol.source.MapGuide.prototype.getUrl = + function(baseUrl, params, extent, size, projection) { + var scale = ol.source.MapGuide.getScale(extent, size, + this.metersPerUnit_, this.displayDpi_); + var center = ol.extent.getCenter(extent); + var baseParams = { + 'OPERATION': this.useOverlay_ ? 'GETDYNAMICMAPOVERLAYIMAGE' : 'GETMAPIMAGE', + 'VERSION': '2.0.0', + 'LOCALE': 'en', + 'CLIENTAGENT': 'ol.source.MapGuide source', + 'CLIP': '1', + 'SETDISPLAYDPI': this.displayDpi_, + 'SETDISPLAYWIDTH': Math.round(size[0]), + 'SETDISPLAYHEIGHT': Math.round(size[1]), + 'SETVIEWSCALE': scale, + 'SETVIEWCENTERX': center[0], + 'SETVIEWCENTERY': center[1] + }; + goog.object.extend(baseParams, params); + return goog.uri.utils.appendParamsFromMap(baseUrl, baseParams); +}; diff --git a/float-no-zero/ol/ol/source/mapquestsource.exports b/float-no-zero/ol/ol/source/mapquestsource.exports new file mode 100644 index 0000000000..cef1c0dcaf --- /dev/null +++ b/float-no-zero/ol/ol/source/mapquestsource.exports @@ -0,0 +1 @@ +@exportSymbol ol.source.MapQuest diff --git a/float-no-zero/ol/ol/source/mapquestsource.js b/float-no-zero/ol/ol/source/mapquestsource.js new file mode 100644 index 0000000000..f0fcfc8259 --- /dev/null +++ b/float-no-zero/ol/ol/source/mapquestsource.js @@ -0,0 +1,78 @@ +goog.provide('ol.source.MapQuest'); + +goog.require('goog.asserts'); +goog.require('ol.Attribution'); +goog.require('ol.source.OSM'); +goog.require('ol.source.XYZ'); + + + +/** + * @constructor + * @extends {ol.source.XYZ} + * @param {olx.source.MapQuestOptions=} opt_options MapQuest options. + * @todo stability experimental + */ +ol.source.MapQuest = function(opt_options) { + + var options = goog.isDef(opt_options) ? opt_options : {}; + goog.asserts.assert(options.layer in ol.source.MapQuestConfig); + + var layerConfig = ol.source.MapQuestConfig[options.layer]; + + var url = '//otile{1-4}.mqcdn.com/tiles/1.0.0/' + + options.layer + '/{z}/{x}/{y}.jpg'; + + goog.base(this, { + attributions: layerConfig.attributions, + crossOrigin: 'anonymous', + logo: '//developer.mapquest.com/content/osm/mq_logo.png', + maxZoom: layerConfig.maxZoom, + opaque: true, + tileLoadFunction: options.tileLoadFunction, + url: url + }); + +}; +goog.inherits(ol.source.MapQuest, ol.source.XYZ); + + +/** + * @const + * @type {ol.Attribution} + */ +ol.source.MapQuest.TILE_ATTRIBUTION = new ol.Attribution({ + html: 'Tiles Courtesy of ' + + 'MapQuest' +}); + + +/** + * @type {Object.)}>} + */ +ol.source.MapQuestConfig = { + 'osm': { + maxZoom: 28, + attributions: [ + ol.source.MapQuest.TILE_ATTRIBUTION, + ol.source.OSM.DATA_ATTRIBUTION + ] + }, + 'sat': { + maxZoom: 18, + attributions: [ + ol.source.MapQuest.TILE_ATTRIBUTION, + new ol.Attribution({ + html: 'Portions Courtesy NASA/JPL-Caltech and ' + + 'U.S. Depart. of Agriculture, Farm Service Agency' + }) + ] + }, + 'hyb': { + maxZoom: 18, + attributions: [ + ol.source.MapQuest.TILE_ATTRIBUTION, + ol.source.OSM.DATA_ATTRIBUTION + ] + } +}; diff --git a/float-no-zero/ol/ol/source/osmsource.exports b/float-no-zero/ol/ol/source/osmsource.exports new file mode 100644 index 0000000000..989472d69e --- /dev/null +++ b/float-no-zero/ol/ol/source/osmsource.exports @@ -0,0 +1,3 @@ +@exportSymbol ol.source.OSM +@exportProperty ol.source.OSM.DATA_ATTRIBUTION +@exportProperty ol.source.OSM.TILE_ATTRIBUTION diff --git a/float-no-zero/ol/ol/source/osmsource.js b/float-no-zero/ol/ol/source/osmsource.js new file mode 100644 index 0000000000..4fe96661d3 --- /dev/null +++ b/float-no-zero/ol/ol/source/osmsource.js @@ -0,0 +1,75 @@ +goog.provide('ol.source.OSM'); + +goog.require('ol.Attribution'); +goog.require('ol.source.XYZ'); + + + +/** + * @constructor + * @extends {ol.source.XYZ} + * @param {olx.source.OSMOptions=} opt_options Open Street Map options. + * @todo stability experimental + */ +ol.source.OSM = function(opt_options) { + + var options = goog.isDef(opt_options) ? opt_options : {}; + + var attributions; + if (goog.isDef(options.attributions)) { + attributions = options.attributions; + } else { + attributions = ol.source.OSM.ATTRIBUTIONS; + } + + var crossOrigin = goog.isDef(options.crossOrigin) ? + options.crossOrigin : 'anonymous'; + + var url = goog.isDef(options.url) ? + options.url : '//{a-c}.tile.openstreetmap.org/{z}/{x}/{y}.png'; + + goog.base(this, { + attributions: attributions, + crossOrigin: crossOrigin, + opaque: true, + maxZoom: options.maxZoom, + tileLoadFunction: options.tileLoadFunction, + url: url + }); + +}; +goog.inherits(ol.source.OSM, ol.source.XYZ); + + +/** + * @const + * @type {ol.Attribution} + */ +ol.source.OSM.DATA_ATTRIBUTION = new ol.Attribution({ + html: 'Data © ' + + 'OpenStreetMap ' + + 'contributors, ' + + 'ODbL' +}); + + +/** + * @const + * @type {ol.Attribution} + */ +ol.source.OSM.TILE_ATTRIBUTION = new ol.Attribution({ + html: 'Tiles © ' + + 'OpenStreetMap ' + + 'contributors, ' + + 'CC BY-SA' +}); + + +/** + * @const + * @type {Array.} + */ +ol.source.OSM.ATTRIBUTIONS = [ + ol.source.OSM.TILE_ATTRIBUTION, + ol.source.OSM.DATA_ATTRIBUTION +]; diff --git a/float-no-zero/ol/ol/source/osmxmlsource.exports b/float-no-zero/ol/ol/source/osmxmlsource.exports new file mode 100644 index 0000000000..880127d254 --- /dev/null +++ b/float-no-zero/ol/ol/source/osmxmlsource.exports @@ -0,0 +1 @@ +@exportSymbol ol.source.OSMXML diff --git a/float-no-zero/ol/ol/source/osmxmlsource.js b/float-no-zero/ol/ol/source/osmxmlsource.js new file mode 100644 index 0000000000..48353beda5 --- /dev/null +++ b/float-no-zero/ol/ol/source/osmxmlsource.js @@ -0,0 +1,31 @@ +goog.provide('ol.source.OSMXML'); + +goog.require('ol.format.OSMXML'); +goog.require('ol.source.VectorFile'); + + + +/** + * @constructor + * @extends {ol.source.VectorFile} + * @param {olx.source.OSMXMLOptions=} opt_options Options. + */ +ol.source.OSMXML = function(opt_options) { + + var options = goog.isDef(opt_options) ? opt_options : {}; + + goog.base(this, { + attributions: options.attributions, + doc: options.doc, + extent: options.extent, + format: new ol.format.OSMXML(), + logo: options.logo, + node: options.node, + projection: options.projection, + reprojectTo: options.reprojectTo, + text: options.text, + url: options.url + }); + +}; +goog.inherits(ol.source.OSMXML, ol.source.VectorFile); diff --git a/float-no-zero/ol/ol/source/source.exports b/float-no-zero/ol/ol/source/source.exports new file mode 100644 index 0000000000..1d3863d0f3 --- /dev/null +++ b/float-no-zero/ol/ol/source/source.exports @@ -0,0 +1,2 @@ +@exportProperty ol.source.Source.prototype.getExtent +@exportProperty ol.source.Source.prototype.getState diff --git a/float-no-zero/ol/ol/source/source.js b/float-no-zero/ol/ol/source/source.js new file mode 100644 index 0000000000..c9039bbbf7 --- /dev/null +++ b/float-no-zero/ol/ol/source/source.js @@ -0,0 +1,179 @@ +goog.provide('ol.source.Source'); +goog.provide('ol.source.State'); + +goog.require('goog.events.EventType'); +goog.require('ol.Attribution'); +goog.require('ol.Extent'); +goog.require('ol.Observable'); +goog.require('ol.proj'); + + +/** + * @enum {number} + */ +ol.source.State = { + LOADING: 0, + READY: 1, + ERROR: 2 +}; + + +/** + * @typedef {{attributions: (Array.|undefined), + * extent: (ol.Extent|undefined), + * logo: (string|undefined), + * projection: ol.proj.ProjectionLike, + * state: (ol.source.State|string|undefined)}} + * @todo stability experimental + */ +ol.source.SourceOptions; + + + +/** + * @constructor + * @extends {ol.Observable} + * @param {ol.source.SourceOptions} options Source options. + * @todo stability experimental + */ +ol.source.Source = function(options) { + + goog.base(this); + + /** + * @private + * @type {ol.proj.Projection} + */ + this.projection_ = ol.proj.get(options.projection); + + /** + * @private + * @type {ol.Extent} + */ + this.extent_ = goog.isDef(options.extent) ? + options.extent : goog.isDef(options.projection) ? + this.projection_.getExtent() : null; + + /** + * @private + * @type {Array.} + */ + this.attributions_ = goog.isDef(options.attributions) ? + options.attributions : null; + + /** + * @private + * @type {string|undefined} + */ + this.logo_ = options.logo; + + /** + * @private + * @type {ol.source.State} + */ + this.state_ = goog.isDef(options.state) ? + /** @type {ol.source.State} */ (options.state) : ol.source.State.READY; + +}; +goog.inherits(ol.source.Source, ol.Observable); + + +/** + * @param {ol.Extent} extent Extent. + * @param {number} resolution Resolution. + * @param {number} rotation Rotation. + * @param {ol.Coordinate} coordinate Coordinate. + * @param {function(ol.Feature): T} callback Feature callback. + * @return {T|undefined} Callback result. + * @template T + */ +ol.source.Source.prototype.forEachFeatureAtPixel = + goog.nullFunction; + + +/** + * @return {Array.} Attributions. + */ +ol.source.Source.prototype.getAttributions = function() { + return this.attributions_; +}; + + +/** + * @return {ol.Extent} Extent. + */ +ol.source.Source.prototype.getExtent = function() { + return this.extent_; +}; + + +/** + * @return {string|undefined} Logo. + */ +ol.source.Source.prototype.getLogo = function() { + return this.logo_; +}; + + +/** + * @return {ol.proj.Projection} Projection. + */ +ol.source.Source.prototype.getProjection = function() { + return this.projection_; +}; + + +/** + * @return {Array.|undefined} Resolutions. + */ +ol.source.Source.prototype.getResolutions = goog.abstractMethod; + + +/** + * @return {ol.source.State} State. + */ +ol.source.Source.prototype.getState = function() { + return this.state_; +}; + + +/** + * @param {Array.} attributions Attributions. + */ +ol.source.Source.prototype.setAttributions = function(attributions) { + this.attributions_ = attributions; +}; + + +/** + * @param {ol.Extent} extent Extent. + */ +ol.source.Source.prototype.setExtent = function(extent) { + this.extent_ = extent; +}; + + +/** + * @param {string|undefined} logo Logo. + */ +ol.source.Source.prototype.setLogo = function(logo) { + this.logo_ = logo; +}; + + +/** + * @param {ol.source.State} state State. + * @protected + */ +ol.source.Source.prototype.setState = function(state) { + this.state_ = state; + this.dispatchChangeEvent(); +}; + + +/** + * @param {ol.proj.Projection} projection Projetion. + */ +ol.source.Source.prototype.setProjection = function(projection) { + this.projection_ = projection; +}; diff --git a/float-no-zero/ol/ol/source/stamensource.exports b/float-no-zero/ol/ol/source/stamensource.exports new file mode 100644 index 0000000000..697330485e --- /dev/null +++ b/float-no-zero/ol/ol/source/stamensource.exports @@ -0,0 +1 @@ +@exportSymbol ol.source.Stamen diff --git a/float-no-zero/ol/ol/source/stamensource.js b/float-no-zero/ol/ol/source/stamensource.js new file mode 100644 index 0000000000..3e8fa7177f --- /dev/null +++ b/float-no-zero/ol/ol/source/stamensource.js @@ -0,0 +1,126 @@ +goog.provide('ol.source.Stamen'); + +goog.require('goog.asserts'); +goog.require('ol.Attribution'); +goog.require('ol.source.OSM'); +goog.require('ol.source.XYZ'); + + +/** + * @type {Object.} + */ +ol.source.StamenLayerConfig = { + 'terrain': { + extension: 'jpg', + opaque: true + }, + 'terrain-background': { + extension: 'jpg', + opaque: true + }, + 'terrain-labels': { + extension: 'png', + opaque: false + }, + 'terrain-lines': { + extension: 'png', + opaque: false + }, + 'toner-background': { + extension: 'png', + opaque: true + }, + 'toner': { + extension: 'png', + opaque: true + }, + 'toner-hybrid': { + extension: 'png', + opaque: false + }, + 'toner-labels': { + extension: 'png', + opaque: false + }, + 'toner-lines': { + extension: 'png', + opaque: false + }, + 'toner-lite': { + extension: 'png', + opaque: true + }, + 'watercolor': { + extension: 'jpg', + opaque: true + } +}; + + +/** + * @type {Object.} + */ +ol.source.StamenProviderConfig = { + 'terrain': { + minZoom: 4, + maxZoom: 18 + }, + 'toner': { + minZoom: 0, + maxZoom: 20 + }, + 'watercolor': { + minZoom: 3, + maxZoom: 16 + } +}; + + + +/** + * @constructor + * @extends {ol.source.XYZ} + * @param {olx.source.StamenOptions} options Stamen options. + * @todo stability experimental + */ +ol.source.Stamen = function(options) { + + var i = options.layer.indexOf('-'); + var provider = i == -1 ? options.layer : options.layer.slice(0, i); + goog.asserts.assert(provider in ol.source.StamenProviderConfig); + var providerConfig = ol.source.StamenProviderConfig[provider]; + + goog.asserts.assert(options.layer in ol.source.StamenLayerConfig); + var layerConfig = ol.source.StamenLayerConfig[options.layer]; + + var url = goog.isDef(options.url) ? options.url : + '//{a-d}.tile.stamen.com/' + options.layer + '/{z}/{x}/{y}.' + + layerConfig.extension; + + goog.base(this, { + attributions: ol.source.Stamen.ATTRIBUTIONS, + crossOrigin: 'anonymous', + maxZoom: providerConfig.maxZoom, + // FIXME uncomment the following when tilegrid supports minZoom + //minZoom: providerConfig.minZoom, + opaque: layerConfig.opaque, + tileLoadFunction: options.tileLoadFunction, + url: url + }); + +}; +goog.inherits(ol.source.Stamen, ol.source.XYZ); + + +/** + * @const + * @type {Array.} + */ +ol.source.Stamen.ATTRIBUTIONS = [ + new ol.Attribution({ + html: 'Map tiles by Stamen Design, ' + + 'under CC BY' + + ' 3.0.' + }), + ol.source.OSM.DATA_ATTRIBUTION +]; diff --git a/float-no-zero/ol/ol/source/tileimagesource.js b/float-no-zero/ol/ol/source/tileimagesource.js new file mode 100644 index 0000000000..fe255e2cee --- /dev/null +++ b/float-no-zero/ol/ol/source/tileimagesource.js @@ -0,0 +1,164 @@ +goog.provide('ol.source.TileImage'); + +goog.require('goog.asserts'); +goog.require('ol.Attribution'); +goog.require('ol.Extent'); +goog.require('ol.ImageTile'); +goog.require('ol.Tile'); +goog.require('ol.TileCache'); +goog.require('ol.TileCoord'); +goog.require('ol.TileLoadFunctionType'); +goog.require('ol.TileState'); +goog.require('ol.TileUrlFunction'); +goog.require('ol.TileUrlFunctionType'); +goog.require('ol.source.Tile'); +goog.require('ol.tilegrid.TileGrid'); + + +/** + * @typedef {{attributions: (Array.|undefined), + * crossOrigin: (null|string|undefined), + * extent: (ol.Extent|undefined), + * logo: (string|undefined), + * opaque: (boolean|undefined), + * projection: ol.proj.ProjectionLike, + * tileClass: (function(new: ol.ImageTile, ol.TileCoord, + * ol.TileState, string, ?string, + * ol.TileLoadFunctionType)|undefined), + * tileGrid: (ol.tilegrid.TileGrid|undefined), + * tileLoadFunction: (ol.TileLoadFunctionType|undefined), + * tileUrlFunction: (ol.TileUrlFunctionType|undefined)}} + * @todo stability experimental + */ +ol.source.TileImageOptions; + + + +/** + * @constructor + * @extends {ol.source.Tile} + * @param {ol.source.TileImageOptions} options Image tile options. + * @todo stability experimental + */ +ol.source.TileImage = function(options) { + + goog.base(this, { + attributions: options.attributions, + extent: options.extent, + logo: options.logo, + opaque: options.opaque, + projection: options.projection, + tileGrid: options.tileGrid + }); + + /** + * @protected + * @type {ol.TileUrlFunctionType} + */ + this.tileUrlFunction = goog.isDef(options.tileUrlFunction) ? + options.tileUrlFunction : + ol.TileUrlFunction.nullTileUrlFunction; + + /** + * @protected + * @type {?string} + */ + this.crossOrigin = + goog.isDef(options.crossOrigin) ? options.crossOrigin : null; + + /** + * @protected + * @type {ol.TileCache} + */ + this.tileCache = new ol.TileCache(); + + /** + * @protected + * @type {ol.TileLoadFunctionType} + */ + this.tileLoadFunction = goog.isDef(options.tileLoadFunction) ? + options.tileLoadFunction : ol.source.TileImage.defaultTileLoadFunction; + + /** + * @protected + * @type {function(new: ol.ImageTile, ol.TileCoord, ol.TileState, string, + * ?string, ol.TileLoadFunctionType)} + */ + this.tileClass = goog.isDef(options.tileClass) ? + options.tileClass : ol.ImageTile; + +}; +goog.inherits(ol.source.TileImage, ol.source.Tile); + + +/** + * @param {ol.ImageTile} imageTile Image tile. + * @param {string} src Source. + */ +ol.source.TileImage.defaultTileLoadFunction = function(imageTile, src) { + imageTile.getImage().src = src; +}; + + +/** + * @inheritDoc + */ +ol.source.TileImage.prototype.canExpireCache = function() { + return this.tileCache.canExpireCache(); +}; + + +/** + * @inheritDoc + */ +ol.source.TileImage.prototype.expireCache = function(usedTiles) { + this.tileCache.expireCache(usedTiles); +}; + + +/** + * @inheritDoc + */ +ol.source.TileImage.prototype.getTile = + function(z, x, y, pixelRatio, projection) { + var tileCoordKey = this.getKeyZXY(z, x, y); + if (this.tileCache.containsKey(tileCoordKey)) { + return /** @type {!ol.Tile} */ (this.tileCache.get(tileCoordKey)); + } else { + goog.asserts.assert(projection); + var tileCoord = new ol.TileCoord(z, x, y); + var tileUrl = this.tileUrlFunction(tileCoord, pixelRatio, projection); + var tile = new this.tileClass( + tileCoord, + goog.isDef(tileUrl) ? ol.TileState.IDLE : ol.TileState.EMPTY, + goog.isDef(tileUrl) ? tileUrl : '', + this.crossOrigin, + this.tileLoadFunction); + this.tileCache.set(tileCoordKey, tile); + return tile; + } +}; + + +/** + * @param {ol.TileUrlFunctionType} tileUrlFunction Tile URL function. + */ +ol.source.TileImage.prototype.setTileUrlFunction = function(tileUrlFunction) { + // FIXME It should be possible to be more intelligent and avoid clearing the + // FIXME cache. The tile URL function would need to be incorporated into the + // FIXME cache key somehow. + this.tileCache.clear(); + this.tileUrlFunction = tileUrlFunction; + this.dispatchChangeEvent(); +}; + + +/** + * @inheritDoc + */ +ol.source.TileImage.prototype.useTile = function(z, x, y) { + var tileCoordKey = this.getKeyZXY(z, x, y); + if (this.tileCache.containsKey(tileCoordKey)) { + this.tileCache.get(tileCoordKey); + } +}; diff --git a/float-no-zero/ol/ol/source/tilejsonsource.exports b/float-no-zero/ol/ol/source/tilejsonsource.exports new file mode 100644 index 0000000000..56b3f56285 --- /dev/null +++ b/float-no-zero/ol/ol/source/tilejsonsource.exports @@ -0,0 +1 @@ +@exportSymbol ol.source.TileJSON diff --git a/float-no-zero/ol/ol/source/tilejsonsource.js b/float-no-zero/ol/ol/source/tilejsonsource.js new file mode 100644 index 0000000000..2f3768d1d3 --- /dev/null +++ b/float-no-zero/ol/ol/source/tilejsonsource.js @@ -0,0 +1,120 @@ +// FIXME add some error checking +// FIXME check order of async callbacks + +/** + * @see http://mapbox.com/developers/api/ + */ + +goog.provide('ol.source.TileJSON'); +goog.provide('ol.tilejson'); + +goog.require('goog.asserts'); +goog.require('goog.net.jsloader'); +goog.require('ol.Attribution'); +goog.require('ol.TileRange'); +goog.require('ol.TileUrlFunction'); +goog.require('ol.extent'); +goog.require('ol.proj'); +goog.require('ol.source.State'); +goog.require('ol.source.TileImage'); +goog.require('ol.tilegrid.XYZ'); + + +/** + * @private + * @type {Array.} + */ +ol.tilejson.grids_ = []; + + +/** + * @param {TileJSON} tileJSON Tile JSON. + */ +var grid = function(tileJSON) { + ol.tilejson.grids_.push(tileJSON); +}; +goog.exportSymbol('grid', grid); + + + +/** + * @constructor + * @extends {ol.source.TileImage} + * @param {olx.source.TileJSONOptions} options TileJSON options. + * @todo stability experimental + */ +ol.source.TileJSON = function(options) { + + goog.base(this, { + crossOrigin: options.crossOrigin, + projection: ol.proj.get('EPSG:3857'), + state: ol.source.State.LOADING, + tileLoadFunction: options.tileLoadFunction + }); + + /** + * @private + * @type {!goog.async.Deferred} + */ + this.deferred_ = goog.net.jsloader.load(options.url, {cleanupWhenDone: true}); + this.deferred_.addCallback(this.handleTileJSONResponse, this); + +}; +goog.inherits(ol.source.TileJSON, ol.source.TileImage); + + +/** + * @protected + */ +ol.source.TileJSON.prototype.handleTileJSONResponse = function() { + var tileJSON = ol.tilejson.grids_.pop(); + + var epsg4326Projection = ol.proj.get('EPSG:4326'); + + var extent; + if (goog.isDef(tileJSON.bounds)) { + var transform = ol.proj.getTransformFromProjections( + epsg4326Projection, this.getProjection()); + extent = ol.extent.transform(tileJSON.bounds, transform); + this.setExtent(extent); + } + + if (goog.isDef(tileJSON.scheme)) { + goog.asserts.assert(tileJSON.scheme == 'xyz'); + } + var minZoom = tileJSON.minzoom || 0; + var maxZoom = tileJSON.maxzoom || 22; + var tileGrid = new ol.tilegrid.XYZ({ + maxZoom: maxZoom, + minZoom: minZoom + }); + this.tileGrid = tileGrid; + + this.tileUrlFunction = ol.TileUrlFunction.withTileCoordTransform( + tileGrid.createTileCoordTransform({ + extent: extent + }), + ol.TileUrlFunction.createFromTemplates(tileJSON.tiles)); + + if (goog.isDef(tileJSON.attribution)) { + var attributionExtent = goog.isDef(extent) ? + extent : epsg4326Projection.getExtent(); + /** @type {Object.>} */ + var tileRanges = {}; + var z, zKey; + for (z = minZoom; z <= maxZoom; ++z) { + zKey = z.toString(); + tileRanges[zKey] = + [tileGrid.getTileRangeForExtentAndZ(attributionExtent, z)]; + } + this.setAttributions([ + new ol.Attribution({ + html: tileJSON.attribution, + tileRanges: tileRanges + }) + ]); + } + + this.setState(ol.source.State.READY); + +}; diff --git a/float-no-zero/ol/ol/source/tilesource.exports b/float-no-zero/ol/ol/source/tilesource.exports new file mode 100644 index 0000000000..fe7587ebea --- /dev/null +++ b/float-no-zero/ol/ol/source/tilesource.exports @@ -0,0 +1,2 @@ +@exportSymbol ol.source.Tile +@exportProperty ol.source.Tile.prototype.getTileGrid diff --git a/float-no-zero/ol/ol/source/tilesource.js b/float-no-zero/ol/ol/source/tilesource.js new file mode 100644 index 0000000000..732ab63d2f --- /dev/null +++ b/float-no-zero/ol/ol/source/tilesource.js @@ -0,0 +1,194 @@ +goog.provide('ol.source.Tile'); +goog.provide('ol.source.TileOptions'); + +goog.require('goog.functions'); +goog.require('ol.Attribution'); +goog.require('ol.Extent'); +goog.require('ol.Tile'); +goog.require('ol.TileCoord'); +goog.require('ol.TileRange'); +goog.require('ol.source.Source'); +goog.require('ol.tilegrid.TileGrid'); + + +/** + * @typedef {{attributions: (Array.|undefined), + * extent: (ol.Extent|undefined), + * logo: (string|undefined), + * opaque: (boolean|undefined), + * projection: ol.proj.ProjectionLike, + * tileGrid: (ol.tilegrid.TileGrid|undefined)}} + * @todo stability experimental + */ +ol.source.TileOptions; + + + +/** + * @constructor + * @extends {ol.source.Source} + * @param {ol.source.TileOptions} options Tile source options. + * @todo stability experimental + */ +ol.source.Tile = function(options) { + + goog.base(this, { + attributions: options.attributions, + extent: options.extent, + logo: options.logo, + projection: options.projection + }); + + /** + * @private + * @type {boolean} + */ + this.opaque_ = goog.isDef(options.opaque) ? options.opaque : false; + + /** + * @protected + * @type {ol.tilegrid.TileGrid} + */ + this.tileGrid = goog.isDef(options.tileGrid) ? options.tileGrid : null; + +}; +goog.inherits(ol.source.Tile, ol.source.Source); + + +/** + * @return {boolean} Can expire cache. + */ +ol.source.Tile.prototype.canExpireCache = goog.functions.FALSE; + + +/** + * @param {Object.} usedTiles Used tiles. + */ +ol.source.Tile.prototype.expireCache = goog.abstractMethod; + + +/** + * Look for loaded tiles over a given tile range and zoom level. Adds + * properties to the provided lookup representing key/tile pairs for already + * loaded tiles. + * + * @param {Object.>} loadedTilesByZ A lookup of + * loaded tiles by zoom level. + * @param {function(number, number, number): ol.Tile} getTileIfLoaded A function + * that returns the tile only if it is fully loaded. + * @param {number} z Zoom level. + * @param {ol.TileRange} tileRange Tile range. + * @return {boolean} The tile range is fully covered with loaded tiles. + */ +ol.source.Tile.prototype.findLoadedTiles = function(loadedTilesByZ, + getTileIfLoaded, z, tileRange) { + // FIXME this could be more efficient about filling partial holes + var fullyCovered = true; + var tile, tileCoordKey, x, y; + for (x = tileRange.minX; x <= tileRange.maxX; ++x) { + for (y = tileRange.minY; y <= tileRange.maxY; ++y) { + tileCoordKey = this.getKeyZXY(z, x, y); + if (loadedTilesByZ[z] && loadedTilesByZ[z][tileCoordKey]) { + continue; + } + tile = getTileIfLoaded(z, x, y); + if (!goog.isNull(tile)) { + if (!loadedTilesByZ[z]) { + loadedTilesByZ[z] = {}; + } + loadedTilesByZ[z][tileCoordKey] = tile; + } else { + fullyCovered = false; + } + } + } + return fullyCovered; +}; + + +/** + * @return {number} Gutter. + */ +ol.source.Tile.prototype.getGutter = function() { + return 0; +}; + + +/** + * @param {number} z Z. + * @param {number} x X. + * @param {number} y Y. + * @return {string} Key. + * @protected + */ +ol.source.Tile.prototype.getKeyZXY = ol.TileCoord.getKeyZXY; + + +/** + * @return {boolean} Opaque. + */ +ol.source.Tile.prototype.getOpaque = function() { + return this.opaque_; +}; + + +/** + * @inheritDoc + */ +ol.source.Tile.prototype.getResolutions = function() { + return this.tileGrid.getResolutions(); +}; + + +/** + * @param {number} z Tile coordinate z. + * @param {number} x Tile coordinate x. + * @param {number} y Tile coordinate y. + * @param {number} pixelRatio Pixel ratio. + * @param {ol.proj.Projection=} opt_projection Projection. + * @return {!ol.Tile} Tile. + */ +ol.source.Tile.prototype.getTile = goog.abstractMethod; + + +/** + * @return {ol.tilegrid.TileGrid} Tile grid. + */ +ol.source.Tile.prototype.getTileGrid = function() { + return this.tileGrid; +}; + + +/** + * @param {ol.proj.Projection} projection Projection. + * @return {ol.tilegrid.TileGrid} Tile grid. + */ +ol.source.Tile.prototype.getTileGridForProjection = function(projection) { + if (goog.isNull(this.tileGrid)) { + return ol.tilegrid.getForProjection(projection); + } else { + return this.tileGrid; + } +}; + + +/** + * @param {number} z Z. + * @param {number} pixelRatio Pixel ratio. + * @param {ol.proj.Projection} projection Projection. + * @return {number} Tile size. + */ +ol.source.Tile.prototype.getTilePixelSize = + function(z, pixelRatio, projection) { + var tileGrid = this.getTileGridForProjection(projection); + return tileGrid.getTileSize(z); +}; + + +/** + * Marks a tile coord as being used, without triggering a load. + * @param {number} z Tile coordinate z. + * @param {number} x Tile coordinate x. + * @param {number} y Tile coordinate y. + */ +ol.source.Tile.prototype.useTile = goog.nullFunction; diff --git a/float-no-zero/ol/ol/source/tilewmssource.exports b/float-no-zero/ol/ol/source/tilewmssource.exports new file mode 100644 index 0000000000..9da9856159 --- /dev/null +++ b/float-no-zero/ol/ol/source/tilewmssource.exports @@ -0,0 +1,4 @@ +@exportSymbol ol.source.TileWMS +@exportProperty ol.source.TileWMS.prototype.getGetFeatureInfoUrl +@exportProperty ol.source.TileWMS.prototype.getParams +@exportProperty ol.source.TileWMS.prototype.updateParams diff --git a/float-no-zero/ol/ol/source/tilewmssource.js b/float-no-zero/ol/ol/source/tilewmssource.js new file mode 100644 index 0000000000..9a3a927f93 --- /dev/null +++ b/float-no-zero/ol/ol/source/tilewmssource.js @@ -0,0 +1,397 @@ +// FIXME add minZoom support +// FIXME add date line wrap (tile coord transform) +// FIXME cannot be shared between maps with different projections + +goog.provide('ol.source.TileWMS'); + +goog.require('goog.array'); +goog.require('goog.asserts'); +goog.require('goog.math'); +goog.require('goog.object'); +goog.require('goog.string'); +goog.require('goog.uri.utils'); +goog.require('ol.TileCoord'); +goog.require('ol.TileUrlFunction'); +goog.require('ol.extent'); +goog.require('ol.source.TileImage'); +goog.require('ol.source.wms'); +goog.require('ol.source.wms.ServerType'); + + + +/** + * @constructor + * @extends {ol.source.TileImage} + * @param {olx.source.TileWMSOptions=} opt_options Tile WMS options. + * @todo stability experimental + */ +ol.source.TileWMS = function(opt_options) { + + var options = goog.isDef(opt_options) ? opt_options : {}; + + var params = goog.isDef(options.params) ? options.params : {}; + + var transparent = goog.object.get(params, 'TRANSPARENT', true); + + goog.base(this, { + attributions: options.attributions, + crossOrigin: options.crossOrigin, + extent: options.extent, + logo: options.logo, + opaque: !transparent, + projection: options.projection, + tileGrid: options.tileGrid, + tileLoadFunction: options.tileLoadFunction, + tileUrlFunction: goog.bind(this.tileUrlFunction_, this) + }); + + var urls = options.urls; + if (!goog.isDef(urls) && goog.isDef(options.url)) { + urls = ol.TileUrlFunction.expandUrl(options.url); + } + + /** + * @private + * @type {Array.|undefined} + */ + this.urls_ = urls; + + /** + * @private + * @type {number} + */ + this.gutter_ = goog.isDef(options.gutter) ? options.gutter : 0; + + /** + * @private + * @type {Object} + */ + this.params_ = params; + + /** + * @private + * @type {number} + */ + this.pixelRatio_ = NaN; + + /** + * @private + * @type {boolean} + */ + this.v13_ = true; + + /** + * @private + * @type {ol.source.wms.ServerType|undefined} + */ + this.serverType_ = + /** @type {ol.source.wms.ServerType|undefined} */ (options.serverType); + + /** + * @private + * @type {boolean} + */ + this.hidpi_ = goog.isDef(options.hidpi) ? options.hidpi : true; + + /** + * @private + * @type {string} + */ + this.coordKeyPrefix_ = ''; + this.resetCoordKeyPrefix_(); + + /** + * @private + * @type {ol.Extent} + */ + this.tmpExtent_ = ol.extent.createEmpty(); + + this.updateV13_(); + +}; +goog.inherits(ol.source.TileWMS, ol.source.TileImage); + + +/** + * Return the GetFeatureInfo URL for the passed coordinate, resolution, and + * projection. Return `undefined` if the GetFeatureInfo URL cannot be + * constructed. + * @param {ol.Coordinate} coordinate Coordinate. + * @param {number} resolution Resolution. + * @param {ol.proj.Projection} projection Projection. + * @param {!Object} params GetFeatureInfo params. `INFO_FORMAT` at least should + * be provided. If `QUERY_LAYERS` is not provided then the layers specified + * in the `LAYERS` parameter will be used. `VERSION` should not be + * specified here. + * @return {string|undefined} GetFeatureInfo URL. + */ +ol.source.TileWMS.prototype.getGetFeatureInfoUrl = + function(coordinate, resolution, projection, params) { + + goog.asserts.assert(!('VERSION' in params)); + + var pixelRatio = this.pixelRatio_; + if (isNaN(this.pixelRatio_)) { + return undefined; + } + + var tileGrid = this.getTileGrid(); + if (goog.isNull(tileGrid)) { + tileGrid = this.getTileGridForProjection(projection); + } + + var tileCoord = tileGrid.getTileCoordForCoordAndResolution( + coordinate, resolution); + + if (tileGrid.getResolutions().length <= tileCoord.z) { + return undefined; + } + + var tileResolution = tileGrid.getResolution(tileCoord.z); + var tileExtent = tileGrid.getTileCoordExtent( + tileCoord, this.tmpExtent_); + var tileSize = tileGrid.getTileSize(tileCoord.z); + + var gutter = this.gutter_; + if (gutter !== 0) { + tileSize += 2 * gutter; + tileExtent = ol.extent.buffer(tileExtent, + tileResolution * gutter, tileExtent); + } + if (pixelRatio != 1) { + tileSize = (tileSize * pixelRatio + 0.5) | 0; + } + + var baseParams = { + 'SERVICE': 'WMS', + 'VERSION': ol.source.wms.DEFAULT_VERSION, + 'REQUEST': 'GetFeatureInfo', + 'FORMAT': 'image/png', + 'TRANSPARENT': true, + 'QUERY_LAYERS': goog.object.get(this.params_, 'LAYERS') + }; + goog.object.extend(baseParams, this.params_, params); + + var x = Math.floor((coordinate[0] - tileExtent[0]) / + (tileResolution / pixelRatio)); + var y = Math.floor((tileExtent[3] - coordinate[1]) / + (tileResolution / pixelRatio)); + + goog.object.set(baseParams, this.v13_ ? 'I' : 'X', x); + goog.object.set(baseParams, this.v13_ ? 'J' : 'Y', y); + + return this.getRequestUrl_(tileCoord, tileSize, tileExtent, + pixelRatio, projection, baseParams); +}; + + +/** + * @inheritDoc + */ +ol.source.TileWMS.prototype.getGutter = function() { + return this.gutter_; +}; + + +/** + * @inheritDoc + */ +ol.source.TileWMS.prototype.getKeyZXY = function(z, x, y) { + return this.coordKeyPrefix_ + goog.base(this, 'getKeyZXY', z, x, y); +}; + + +/** + * Get the user-provided params, i.e. those passed to the constructor through + * the "params" option, and possibly updated using the updateParams method. + * @return {Object} Params. + * @todo stability experimental + */ +ol.source.TileWMS.prototype.getParams = function() { + return this.params_; +}; + + +/** + * @param {ol.TileCoord} tileCoord Tile coordinate. + * @param {number} tileSize Tile size. + * @param {ol.Extent} tileExtent Tile extent. + * @param {number} pixelRatio Pixel ratio. + * @param {ol.proj.Projection} projection Projection. + * @param {Object} params Params. + * @return {string|undefined} Request URL. + * @private + */ +ol.source.TileWMS.prototype.getRequestUrl_ = + function(tileCoord, tileSize, tileExtent, + pixelRatio, projection, params) { + + var urls = this.urls_; + if (!goog.isDef(urls) || goog.array.isEmpty(urls)) { + return undefined; + } + + goog.object.set(params, 'WIDTH', tileSize); + goog.object.set(params, 'HEIGHT', tileSize); + + params[this.v13_ ? 'CRS' : 'SRS'] = projection.getCode(); + + if (!('STYLES' in this.params_)) { + goog.object.set(params, 'STYLES', new String('')); + } + + if (pixelRatio != 1) { + switch (this.serverType_) { + case ol.source.wms.ServerType.GEOSERVER: + var dpi = (90 * pixelRatio + 0.5) | 0; + goog.object.set(params, 'FORMAT_OPTIONS', 'dpi:' + dpi); + break; + case ol.source.wms.ServerType.MAPSERVER: + goog.object.set(params, 'MAP_RESOLUTION', 90 * pixelRatio); + break; + case ol.source.wms.ServerType.CARMENTA_SERVER: + case ol.source.wms.ServerType.QGIS: + goog.object.set(params, 'DPI', 90 * pixelRatio); + break; + default: + goog.asserts.fail(); + break; + } + } + + var axisOrientation = projection.getAxisOrientation(); + var bbox = tileExtent; + if (this.v13_ && axisOrientation.substr(0, 2) == 'ne') { + var tmp; + tmp = tileExtent[0]; + bbox[0] = tileExtent[1]; + bbox[1] = tmp; + tmp = tileExtent[2]; + bbox[2] = tileExtent[3]; + bbox[3] = tmp; + } + goog.object.set(params, 'BBOX', bbox.join(',')); + + var url; + if (urls.length == 1) { + url = urls[0]; + } else { + var index = goog.math.modulo(tileCoord.hash(), this.urls_.length); + url = urls[index]; + } + return goog.uri.utils.appendParamsFromMap(url, params); +}; + + +/** + * @param {number} z Z. + * @param {number} pixelRatio Pixel ratio. + * @param {ol.proj.Projection} projection Projection. + * @return {number} Size. + */ +ol.source.TileWMS.prototype.getTilePixelSize = + function(z, pixelRatio, projection) { + var tileSize = goog.base(this, 'getTilePixelSize', z, pixelRatio, projection); + if (pixelRatio == 1 || !this.hidpi_ || !goog.isDef(this.serverType_)) { + return tileSize; + } else { + return (tileSize * pixelRatio + 0.5) | 0; + } +}; + + +/** + * @private + */ +ol.source.TileWMS.prototype.resetCoordKeyPrefix_ = function() { + var i = 0; + var res = []; + for (var key in this.params_) { + res[i++] = key + '-' + this.params_[key]; + } + this.coordKeyPrefix_ = res.join('/'); +}; + + +/** + * @param {ol.TileCoord} tileCoord Tile coordinate. + * @param {number} pixelRatio Pixel ratio. + * @param {ol.proj.Projection} projection Projection. + * @return {string|undefined} Tile URL. + * @private + */ +ol.source.TileWMS.prototype.tileUrlFunction_ = + function(tileCoord, pixelRatio, projection) { + + var tileGrid = this.getTileGrid(); + if (goog.isNull(tileGrid)) { + tileGrid = this.getTileGridForProjection(projection); + } + + if (tileGrid.getResolutions().length <= tileCoord.z) { + return undefined; + } + + if (pixelRatio != 1 && (!this.hidpi_ || !goog.isDef(this.serverType_))) { + pixelRatio = 1; + } + + var tileResolution = tileGrid.getResolution(tileCoord.z); + var tileExtent = tileGrid.getTileCoordExtent( + tileCoord, this.tmpExtent_); + var tileSize = tileGrid.getTileSize(tileCoord.z); + + var gutter = this.gutter_; + if (gutter !== 0) { + tileSize += 2 * gutter; + tileExtent = ol.extent.buffer(tileExtent, + tileResolution * gutter, tileExtent); + } + + var extent = this.getExtent(); + if (!goog.isNull(extent) && (!ol.extent.intersects(tileExtent, extent) || + ol.extent.touches(tileExtent, extent))) { + return undefined; + } + + if (pixelRatio != 1) { + tileSize = (tileSize * pixelRatio + 0.5) | 0; + } + + var baseParams = { + 'SERVICE': 'WMS', + 'VERSION': ol.source.wms.DEFAULT_VERSION, + 'REQUEST': 'GetMap', + 'FORMAT': 'image/png', + 'TRANSPARENT': true + }; + goog.object.extend(baseParams, this.params_); + + this.pixelRatio_ = pixelRatio; + + return this.getRequestUrl_(tileCoord, tileSize, tileExtent, + pixelRatio, projection, baseParams); +}; + + +/** + * Update the user-provided params. + * @param {Object} params Params. + * @todo stability experimental + */ +ol.source.TileWMS.prototype.updateParams = function(params) { + goog.object.extend(this.params_, params); + this.resetCoordKeyPrefix_(); + this.updateV13_(); + this.dispatchChangeEvent(); +}; + + +/** + * @private + */ +ol.source.TileWMS.prototype.updateV13_ = function() { + var version = + goog.object.get(this.params_, 'VERSION', ol.source.wms.DEFAULT_VERSION); + this.v13_ = goog.string.compareVersions(version, '1.3') >= 0; +}; diff --git a/float-no-zero/ol/ol/source/topojsonsource.exports b/float-no-zero/ol/ol/source/topojsonsource.exports new file mode 100644 index 0000000000..d56afa819e --- /dev/null +++ b/float-no-zero/ol/ol/source/topojsonsource.exports @@ -0,0 +1 @@ +@exportSymbol ol.source.TopoJSON diff --git a/float-no-zero/ol/ol/source/topojsonsource.js b/float-no-zero/ol/ol/source/topojsonsource.js new file mode 100644 index 0000000000..29aff2dadb --- /dev/null +++ b/float-no-zero/ol/ol/source/topojsonsource.js @@ -0,0 +1,32 @@ +goog.provide('ol.source.TopoJSON'); + +goog.require('ol.format.TopoJSON'); +goog.require('ol.source.VectorFile'); + + + +/** + * @constructor + * @extends {ol.source.VectorFile} + * @param {olx.source.TopoJSONOptions=} opt_options Options. + * @todo stability experimental + */ +ol.source.TopoJSON = function(opt_options) { + + var options = goog.isDef(opt_options) ? opt_options : {}; + + goog.base(this, { + attributions: options.attributions, + extent: options.extent, + format: new ol.format.TopoJSON({ + defaultProjection: options.defaultProjection + }), + logo: options.logo, + object: options.object, + projection: options.projection, + text: options.text, + url: options.url + }); + +}; +goog.inherits(ol.source.TopoJSON, ol.source.VectorFile); diff --git a/float-no-zero/ol/ol/source/vectorfilesource.exports b/float-no-zero/ol/ol/source/vectorfilesource.exports new file mode 100644 index 0000000000..acd6140571 --- /dev/null +++ b/float-no-zero/ol/ol/source/vectorfilesource.exports @@ -0,0 +1 @@ +@exportSymbol ol.source.VectorFile diff --git a/float-no-zero/ol/ol/source/vectorfilesource.js b/float-no-zero/ol/ol/source/vectorfilesource.js new file mode 100644 index 0000000000..d003037170 --- /dev/null +++ b/float-no-zero/ol/ol/source/vectorfilesource.js @@ -0,0 +1,167 @@ +// FIXME consider delaying feature reading so projection can be provided by +// consumer (e.g. the view) + +goog.provide('ol.source.VectorFile'); + +goog.require('goog.asserts'); +goog.require('goog.dispose'); +goog.require('goog.events'); +goog.require('goog.net.EventType'); +goog.require('goog.net.XhrIo'); +goog.require('goog.net.XhrIo.ResponseType'); +goog.require('goog.userAgent'); +goog.require('ol.BrowserFeature'); +goog.require('ol.format.FormatType'); +goog.require('ol.proj'); +goog.require('ol.source.State'); +goog.require('ol.source.Vector'); +goog.require('ol.xml'); + + + +/** + * @constructor + * @extends {ol.source.Vector} + * @param {olx.source.VectorFileOptions=} opt_options Options. + * @todo stability experimental + */ +ol.source.VectorFile = function(opt_options) { + + var options = goog.isDef(opt_options) ? opt_options : {}; + + goog.base(this, { + attributions: options.attributions, + extent: options.extent, + logo: options.logo, + projection: options.projection + }); + + /** + * @type {ol.format.Feature} + * @protected + */ + this.format = options.format; + + if (goog.isDef(options.doc)) { + this.readFeatures_(options.doc); + } + + if (goog.isDef(options.node)) { + this.readFeatures_(options.node); + } + + if (goog.isDef(options.object)) { + this.readFeatures_(options.object); + } + + if (goog.isDef(options.text)) { + this.readFeatures_(options.text); + } + + if (goog.isDef(options.arrayBuffer)) { + this.readFeatures_(options.arrayBuffer); + } + + if (goog.isDef(options.url) || goog.isDef(options.urls)) { + this.setState(ol.source.State.LOADING); + + var type = this.format.getType(); + var responseType; + if (type == ol.format.FormatType.BINARY && + ol.BrowserFeature.HAS_ARRAY_BUFFER) { + responseType = goog.net.XhrIo.ResponseType.ARRAY_BUFFER; + } else { + responseType = goog.net.XhrIo.ResponseType.TEXT; + } + var xhrIo; + if (goog.isDef(options.url)) { + xhrIo = new goog.net.XhrIo(); + xhrIo.setResponseType(responseType); + goog.events.listen(xhrIo, goog.net.EventType.COMPLETE, + goog.bind(this.handleXhrIo_, this)); + xhrIo.send(options.url); + } + if (goog.isDef(options.urls)) { + var urls = options.urls; + var i, ii; + for (i = 0, ii = urls.length; i < ii; ++i) { + xhrIo = new goog.net.XhrIo(); + xhrIo.setResponseType(responseType); + goog.events.listen(xhrIo, goog.net.EventType.COMPLETE, + goog.bind(this.handleXhrIo_, this)); + xhrIo.send(urls[i]); + } + } + } + +}; +goog.inherits(ol.source.VectorFile, ol.source.Vector); + + +/** + * @param {Event} event Event. + * @private + */ +ol.source.VectorFile.prototype.handleXhrIo_ = function(event) { + var xhrIo = event.target; + goog.asserts.assertInstanceof(xhrIo, goog.net.XhrIo); + if (xhrIo.isSuccess()) { + var type = this.format.getType(); + /** @type {ArrayBuffer|Document|Node|Object|string|undefined} */ + var source; + if (type == ol.format.FormatType.BINARY && + ol.BrowserFeature.HAS_ARRAY_BUFFER) { + source = xhrIo.getResponse(); + goog.asserts.assertInstanceof(source, ArrayBuffer); + } else if (type == ol.format.FormatType.JSON) { + source = xhrIo.getResponseJson(); + } else if (type == ol.format.FormatType.TEXT) { + source = xhrIo.getResponseText(); + } else if (type == ol.format.FormatType.XML) { + if (!goog.userAgent.IE) { + source = xhrIo.getResponseXml(); + } + if (!goog.isDefAndNotNull(source)) { + source = ol.xml.load(xhrIo.getResponseText()); + } + } else { + goog.asserts.fail(); + } + goog.dispose(xhrIo); + if (goog.isDefAndNotNull(source)) { + this.readFeatures_(source); + } else { + this.setState(ol.source.State.ERROR); + goog.asserts.fail(); + } + } else { + this.setState(ol.source.State.ERROR); + } +}; + + +/** + * @param {ArrayBuffer|Document|Node|Object|string} source Source. + * @private + */ +ol.source.VectorFile.prototype.readFeatures_ = function(source) { + var format = this.format; + var features = format.readFeatures(source); + var featureProjection = format.readProjection(source); + var projection = this.getProjection(); + if (!goog.isNull(projection)) { + if (!ol.proj.equivalent(featureProjection, projection)) { + var transform = ol.proj.getTransform(featureProjection, projection); + var i, ii; + for (i = 0, ii = features.length; i < ii; ++i) { + var feature = features[i]; + var geometry = feature.getGeometry(); + if (!goog.isNull(geometry)) { + geometry.transform(transform); + } + } + } + } + this.addFeaturesInternal(features); + this.setState(ol.source.State.READY); +}; diff --git a/float-no-zero/ol/ol/source/vectorsource.exports b/float-no-zero/ol/ol/source/vectorsource.exports new file mode 100644 index 0000000000..467542675a --- /dev/null +++ b/float-no-zero/ol/ol/source/vectorsource.exports @@ -0,0 +1,10 @@ +@exportSymbol ol.source.Vector +@exportProperty ol.source.Vector.prototype.addFeature +@exportProperty ol.source.Vector.prototype.addFeatures +@exportProperty ol.source.Vector.prototype.forEachFeature +@exportProperty ol.source.Vector.prototype.forEachFeatureInExtent +@exportProperty ol.source.Vector.prototype.getFeatures +@exportProperty ol.source.Vector.prototype.getFeaturesAtCoordinate +@exportProperty ol.source.Vector.prototype.getClosestFeatureToCoordinate +@exportProperty ol.source.Vector.prototype.getExtent +@exportProperty ol.source.Vector.prototype.removeFeature diff --git a/float-no-zero/ol/ol/source/vectorsource.js b/float-no-zero/ol/ol/source/vectorsource.js new file mode 100644 index 0000000000..6d25fe1660 --- /dev/null +++ b/float-no-zero/ol/ol/source/vectorsource.js @@ -0,0 +1,372 @@ +// FIXME bulk feature upload - suppress events +// FIXME put features in an ol.Collection +// FIXME make change-detection more refined (notably, geometry hint) + +goog.provide('ol.source.Vector'); +goog.provide('ol.source.VectorEvent'); +goog.provide('ol.source.VectorEventType'); + +goog.require('goog.array'); +goog.require('goog.asserts'); +goog.require('goog.events'); +goog.require('goog.events.Event'); +goog.require('goog.events.EventType'); +goog.require('goog.object'); +goog.require('ol.source.Source'); +goog.require('ol.structs.RBush'); + + +/** + * @enum {string} + */ +ol.source.VectorEventType = { + ADDFEATURE: 'addfeature', + REMOVEFEATURE: 'removefeature' +}; + + + +/** + * @constructor + * @extends {ol.source.Source} + * @param {olx.source.VectorOptions=} opt_options Vector source options. + * @todo stability experimental + */ +ol.source.Vector = function(opt_options) { + + var options = goog.isDef(opt_options) ? opt_options : {}; + + goog.base(this, { + attributions: options.attributions, + extent: options.extent, + logo: options.logo, + projection: options.projection, + state: options.state + }); + + /** + * @private + * @type {ol.structs.RBush.} + */ + this.rBush_ = new ol.structs.RBush(); + + /** + * @private + * @type {Object.} + */ + this.nullGeometryFeatures_ = {}; + + /** + * @private + * @type {Object.} + */ + this.featureChangeKeys_ = {}; + + if (goog.isDef(options.features)) { + this.addFeaturesInternal(options.features); + } + +}; +goog.inherits(ol.source.Vector, ol.source.Source); + + +/** + * @param {ol.Feature} feature Feature. + * @todo stability experimental + */ +ol.source.Vector.prototype.addFeature = function(feature) { + this.addFeatureInternal(feature); + this.dispatchChangeEvent(); +}; + + +/** + * Add a feature without firing a `change` event. + * @param {ol.Feature} feature Feature. + * @protected + */ +ol.source.Vector.prototype.addFeatureInternal = function(feature) { + var featureKey = goog.getUid(feature).toString(); + goog.asserts.assert(!(featureKey in this.featureChangeKeys_)); + this.featureChangeKeys_[featureKey] = goog.events.listen(feature, + goog.events.EventType.CHANGE, this.handleFeatureChange_, false, this); + var geometry = feature.getGeometry(); + if (goog.isNull(geometry)) { + this.nullGeometryFeatures_[goog.getUid(feature).toString()] = feature; + } else { + var extent = geometry.getExtent(); + this.rBush_.insert(extent, feature); + } + this.dispatchEvent( + new ol.source.VectorEvent(ol.source.VectorEventType.ADDFEATURE, feature)); +}; + + +/** + * @param {Array.} features Features. + * @todo stability experimental + */ +ol.source.Vector.prototype.addFeatures = function(features) { + this.addFeaturesInternal(features); + this.dispatchChangeEvent(); +}; + + +/** + * Add features without firing a `change` event. + * @param {Array.} features Features. + * @protected + */ +ol.source.Vector.prototype.addFeaturesInternal = function(features) { + // FIXME use R-Bush bulk load when available + var i, ii; + for (i = 0, ii = features.length; i < ii; ++i) { + this.addFeatureInternal(features[i]); + } +}; + + +/** + * @todo stability experimental + */ +ol.source.Vector.prototype.clear = function() { + this.rBush_.forEach(this.removeFeatureInternal, this); + this.rBush_.clear(); + goog.object.forEach( + this.nullGeometryFeatures_, this.removeFeatureInternal, this); + goog.object.clear(this.nullGeometryFeatures_); + goog.asserts.assert(goog.object.isEmpty(this.featureChangeKeys_)); + this.dispatchChangeEvent(); +}; + + +/** + * @param {function(this: T, ol.Feature): S} f Callback. + * @param {T=} opt_this The object to use as `this` in `f`. + * @return {S|undefined} + * @template T,S + * @todo stability experimental + */ +ol.source.Vector.prototype.forEachFeature = function(f, opt_this) { + return this.rBush_.forEach(f, opt_this); +}; + + +/** + * @param {ol.Coordinate} coordinate Coordinate. + * @param {function(this: T, ol.Feature): S} f Callback. + * @param {T=} opt_this The object to use as `this` in `f`. + * @return {S|undefined} + * @template T,S + * @todo stability experimental + */ +ol.source.Vector.prototype.forEachFeatureAtCoordinate = + function(coordinate, f, opt_this) { + var extent = [coordinate[0], coordinate[1], coordinate[0], coordinate[1]]; + return this.forEachFeatureInExtent(extent, function(feature) { + var geometry = feature.getGeometry(); + goog.asserts.assert(!goog.isNull(geometry)); + if (geometry.containsCoordinate(coordinate)) { + return f.call(opt_this, feature); + } else { + return undefined; + } + }); +}; + + +/** + * @param {ol.Extent} extent Extent. + * @param {function(this: T, ol.Feature): S} f Callback. + * @param {T=} opt_this The object to use as `this` in `f`. + * @return {S|undefined} + * @template T,S + * @todo stability experimental + */ +ol.source.Vector.prototype.forEachFeatureInExtent = + function(extent, f, opt_this) { + return this.rBush_.forEachInExtent(extent, f, opt_this); +}; + + +/** + * @return {Array.} Features. + * @todo stability experimental + */ +ol.source.Vector.prototype.getFeatures = function() { + var features = this.rBush_.getAll(); + if (!goog.object.isEmpty(this.nullGeometryFeatures_)) { + goog.array.extend( + features, goog.object.getValues(this.nullGeometryFeatures_)); + } + return features; +}; + + +/** + * @param {ol.Coordinate} coordinate Coordinate. + * @return {Array.} Features. + * @todo stability experimental + */ +ol.source.Vector.prototype.getFeaturesAtCoordinate = function(coordinate) { + var features = []; + this.forEachFeatureAtCoordinate(coordinate, function(feature) { + features.push(feature); + }); + return features; +}; + + +/** + * @param {ol.Extent} extent Extent. + * @return {Array.} Features. + * @todo stability experimental + */ +ol.source.Vector.prototype.getFeaturesInExtent = function(extent) { + return this.rBush_.getInExtent(extent); +}; + + +/** + * @param {ol.Coordinate} coordinate Coordinate. + * @return {ol.Feature} Closest feature. + * @todo stability experimental + */ +ol.source.Vector.prototype.getClosestFeatureToCoordinate = + function(coordinate) { + // Find the closest feature using branch and bound. We start searching an + // infinite extent, and find the distance from the first feature found. This + // becomes the closest feature. We then compute a smaller extent which any + // closer feature must intersect. We continue searching with this smaller + // extent, trying to find a closer feature. Every time we find a closer + // feature, we update the extent being searched so that any even closer + // feature must intersect it. We continue until we run out of features. + var x = coordinate[0]; + var y = coordinate[1]; + var closestFeature = null; + var closestPoint = [NaN, NaN]; + var minSquaredDistance = Infinity; + var extent = [-Infinity, -Infinity, Infinity, Infinity]; + this.rBush_.forEachInExtent(extent, + /** + * @param {ol.Feature} feature Feature. + */ + function(feature) { + var geometry = feature.getGeometry(); + goog.asserts.assert(!goog.isNull(geometry)); + var previousMinSquaredDistance = minSquaredDistance; + minSquaredDistance = geometry.closestPointXY( + x, y, closestPoint, minSquaredDistance); + if (minSquaredDistance < previousMinSquaredDistance) { + closestFeature = feature; + // This is sneaky. Reduce the extent that it is currently being + // searched while the R-Tree traversal using this same extent object + // is still in progress. This is safe because the new extent is + // strictly contained by the old extent. + var minDistance = Math.sqrt(minSquaredDistance); + extent[0] = x - minDistance; + extent[1] = y - minDistance; + extent[2] = x + minDistance; + extent[3] = y + minDistance; + } + }); + return closestFeature; +}; + + +/** + * @return {ol.Extent} Extent. + * @todo stability experimental + */ +ol.source.Vector.prototype.getExtent = function() { + return this.rBush_.getExtent(); +}; + + +/** + * @param {goog.events.Event} event Event. + * @private + */ +ol.source.Vector.prototype.handleFeatureChange_ = function(event) { + var feature = /** @type {ol.Feature} */ (event.target); + var featureKey = goog.getUid(feature).toString(); + var geometry = feature.getGeometry(); + if (goog.isNull(geometry)) { + if (!(featureKey in this.nullGeometryFeatures_)) { + this.rBush_.remove(feature); + this.nullGeometryFeatures_[featureKey] = feature; + } + } else { + var extent = geometry.getExtent(); + if (featureKey in this.nullGeometryFeatures_) { + delete this.nullGeometryFeatures_[featureKey]; + this.rBush_.insert(extent, feature); + } else { + this.rBush_.update(extent, feature); + } + } + this.dispatchChangeEvent(); +}; + + +/** + * @return {boolean} Is empty. + * @todo stability experimental + */ +ol.source.Vector.prototype.isEmpty = function() { + return this.rBush_.isEmpty() && + goog.object.isEmpty(this.nullGeometryFeatures_); +}; + + +/** + * @param {ol.Feature} feature Feature. + * @todo stability experimental + */ +ol.source.Vector.prototype.removeFeature = function(feature) { + var featureKey = goog.getUid(feature).toString(); + if (featureKey in this.nullGeometryFeatures_) { + delete this.nullGeometryFeatures_[featureKey]; + } else { + this.rBush_.remove(feature); + } + this.removeFeatureInternal(feature); + this.dispatchChangeEvent(); +}; + + +/** + * Remove feature without firing a `change` event. + * @param {ol.Feature} feature Feature. + * @protected + */ +ol.source.Vector.prototype.removeFeatureInternal = function(feature) { + var featureKey = goog.getUid(feature).toString(); + goog.asserts.assert(featureKey in this.featureChangeKeys_); + goog.events.unlistenByKey(this.featureChangeKeys_[featureKey]); + delete this.featureChangeKeys_[featureKey]; + this.dispatchEvent(new ol.source.VectorEvent( + ol.source.VectorEventType.REMOVEFEATURE, feature)); +}; + + + +/** + * @constructor + * @extends {goog.events.Event} + * @implements {oli.source.VectorEvent} + * @param {string} type Type. + * @param {ol.Feature=} opt_feature Feature. + * @todo stability experimental + */ +ol.source.VectorEvent = function(type, opt_feature) { + + goog.base(this, type); + + /** + * @type {ol.Feature|undefined} + */ + this.feature = opt_feature; + +}; +goog.inherits(ol.source.VectorEvent, goog.events.Event); diff --git a/float-no-zero/ol/ol/source/wmssource.js b/float-no-zero/ol/ol/source/wmssource.js new file mode 100644 index 0000000000..1c19281272 --- /dev/null +++ b/float-no-zero/ol/ol/source/wmssource.js @@ -0,0 +1,19 @@ +goog.provide('ol.source.wms'); +goog.provide('ol.source.wms.ServerType'); + + +/** + * @define {string} WMS default version. + */ +ol.source.wms.DEFAULT_VERSION = '1.3.0'; + + +/** + * @enum {string} + */ +ol.source.wms.ServerType = { + CARMENTA_SERVER: 'carmentaserver', + GEOSERVER: 'geoserver', + MAPSERVER: 'mapserver', + QGIS: 'qgis' +}; diff --git a/float-no-zero/ol/ol/source/wmtssource.exports b/float-no-zero/ol/ol/source/wmtssource.exports new file mode 100644 index 0000000000..a81ed65df0 --- /dev/null +++ b/float-no-zero/ol/ol/source/wmtssource.exports @@ -0,0 +1,4 @@ +@exportSymbol ol.source.WMTS +@exportProperty ol.source.WMTS.prototype.getDimensions +@exportProperty ol.source.WMTS.prototype.updateDimensions +@exportSymbol ol.source.WMTS.optionsFromCapabilities diff --git a/float-no-zero/ol/ol/source/wmtssource.js b/float-no-zero/ol/ol/source/wmtssource.js new file mode 100644 index 0000000000..bd0d7c514b --- /dev/null +++ b/float-no-zero/ol/ol/source/wmtssource.js @@ -0,0 +1,331 @@ +goog.provide('ol.source.WMTS'); +goog.provide('ol.source.WMTSRequestEncoding'); + +goog.require('goog.array'); +goog.require('goog.asserts'); +goog.require('goog.math'); +goog.require('goog.object'); +goog.require('goog.uri.utils'); +goog.require('ol.TileCoord'); +goog.require('ol.TileUrlFunction'); +goog.require('ol.TileUrlFunctionType'); +goog.require('ol.extent'); +goog.require('ol.proj'); +goog.require('ol.source.TileImage'); +goog.require('ol.tilegrid.WMTS'); + + +/** + * @enum {string} + */ +ol.source.WMTSRequestEncoding = { + KVP: 'KVP', // see spec §8 + REST: 'REST' // see spec §10 +}; + + + +/** + * @constructor + * @extends {ol.source.TileImage} + * @param {olx.source.WMTSOptions} options WMTS options. + * @todo stability experimental + */ +ol.source.WMTS = function(options) { + + // TODO: add support for TileMatrixLimits + + var version = goog.isDef(options.version) ? options.version : '1.0.0'; + var format = goog.isDef(options.format) ? options.format : 'image/jpeg'; + + /** + * @private + * @type {Object} + */ + this.dimensions_ = options.dimensions || {}; + + /** + * @private + * @type {string} + */ + this.coordKeyPrefix_ = ''; + this.resetCoordKeyPrefix_(); + + // FIXME: should we guess this requestEncoding from options.url(s) + // structure? that would mean KVP only if a template is not provided. + var requestEncoding = goog.isDef(options.requestEncoding) ? + options.requestEncoding : ol.source.WMTSRequestEncoding.KVP; + + // FIXME: should we create a default tileGrid? + // we could issue a getCapabilities xhr to retrieve missing configuration + var tileGrid = options.tileGrid; + + var context = { + 'Layer': options.layer, + 'style': options.style, + 'Style': options.style, + 'TileMatrixSet': options.matrixSet + }; + + if (requestEncoding == ol.source.WMTSRequestEncoding.KVP) { + goog.object.extend(context, { + 'Service': 'WMTS', + 'Request': 'GetTile', + 'Version': version, + 'Format': format + }); + } + + /** + * @param {string} template Template. + * @return {ol.TileUrlFunctionType} Tile URL function. + */ + function createFromWMTSTemplate(template) { + + // TODO: we may want to create our own appendParams function so that params + // order conforms to wmts spec guidance, and so that we can avoid to escape + // special template params + + template = (requestEncoding == ol.source.WMTSRequestEncoding.KVP) ? + goog.uri.utils.appendParamsFromMap(template, context) : + template.replace(/\{(\w+?)\}/g, function(m, p) { + return (p in context) ? context[p] : m; + }); + + return ( + /** + * @this {ol.source.WMTS} + * @param {ol.TileCoord} tileCoord Tile coordinate. + * @param {number} pixelRatio Pixel ratio. + * @param {ol.proj.Projection} projection Projection. + * @return {string|undefined} Tile URL. + */ + function(tileCoord, pixelRatio, projection) { + if (goog.isNull(tileCoord)) { + return undefined; + } else { + var localContext = { + 'TileMatrix': tileGrid.getMatrixId(tileCoord.z), + 'TileCol': tileCoord.x, + 'TileRow': tileCoord.y + }; + goog.object.extend(localContext, this.dimensions_); + var url = template; + if (requestEncoding == ol.source.WMTSRequestEncoding.KVP) { + url = goog.uri.utils.appendParamsFromMap(url, localContext); + } else { + url = url.replace(/\{(\w+?)\}/g, function(m, p) { + return localContext[p]; + }); + } + return url; + } + }); + } + + var tileUrlFunction = ol.TileUrlFunction.nullTileUrlFunction; + var urls = options.urls; + if (!goog.isDef(urls) && goog.isDef(options.url)) { + urls = ol.TileUrlFunction.expandUrl(options.url); + } + if (goog.isDef(urls)) { + tileUrlFunction = ol.TileUrlFunction.createFromTileUrlFunctions( + goog.array.map(urls, createFromWMTSTemplate)); + } + + var tmpExtent = ol.extent.createEmpty(); + var tmpTileCoord = new ol.TileCoord(0, 0, 0); + tileUrlFunction = ol.TileUrlFunction.withTileCoordTransform( + /** + * @param {ol.TileCoord} tileCoord Tile coordinate. + * @param {ol.proj.Projection} projection Projection. + * @param {ol.TileCoord=} opt_tileCoord Tile coordinate. + * @return {ol.TileCoord} Tile coordinate. + */ + function(tileCoord, projection, opt_tileCoord) { + var tileGrid = this.getTileGrid(); + goog.asserts.assert(!goog.isNull(tileGrid)); + if (tileGrid.getResolutions().length <= tileCoord.z) { + return null; + } + var x = tileCoord.x; + var y = -tileCoord.y - 1; + var tileExtent = tileGrid.getTileCoordExtent(tileCoord); + var projectionExtent = projection.getExtent(); + var extent = goog.isDef(options.extent) ? + options.extent : projectionExtent; + + if (!goog.isNull(extent) && projection.isGlobal() && + extent[0] === projectionExtent[0] && + extent[2] === projectionExtent[2]) { + var numCols = Math.ceil( + (extent[2] - extent[0]) / + (tileExtent[2] - tileExtent[0])); + x = goog.math.modulo(x, numCols); + tmpTileCoord.z = tileCoord.z; + tmpTileCoord.x = x; + tmpTileCoord.y = tileCoord.y; + tileExtent = tileGrid.getTileCoordExtent(tmpTileCoord, tmpExtent); + } + if (!ol.extent.intersects(tileExtent, extent) || + ol.extent.touches(tileExtent, extent)) { + return null; + } + return new ol.TileCoord(tileCoord.z, x, y); + }, + tileUrlFunction); + + goog.base(this, { + attributions: options.attributions, + crossOrigin: options.crossOrigin, + extent: options.extent, + logo: options.logo, + projection: options.projection, + tileGrid: tileGrid, + tileLoadFunction: options.tileLoadFunction, + tileUrlFunction: tileUrlFunction + }); + +}; +goog.inherits(ol.source.WMTS, ol.source.TileImage); + + +/** + * Get the dimensions, i.e. those passed to the constructor through the + * "dimensions" option, and possibly updated using the updateDimensions + * method. + * @return {Object} Dimensions. + * @todo stability experimental + */ +ol.source.WMTS.prototype.getDimensions = function() { + return this.dimensions_; +}; + + +/** + * @inheritDoc + */ +ol.source.WMTS.prototype.getKeyZXY = function(z, x, y) { + return this.coordKeyPrefix_ + goog.base(this, 'getKeyZXY', z, x, y); +}; + + +/** + * @private + */ +ol.source.WMTS.prototype.resetCoordKeyPrefix_ = function() { + var i = 0; + var res = []; + for (var key in this.dimensions_) { + res[i++] = key + '-' + this.dimensions_[key]; + } + this.coordKeyPrefix_ = res.join('/'); +}; + + +/** + * Update the dimensions. + * @param {Object} dimensions Dimensions. + * @todo stability experimental + */ +ol.source.WMTS.prototype.updateDimensions = function(dimensions) { + goog.object.extend(this.dimensions_, dimensions); + this.resetCoordKeyPrefix_(); + this.dispatchChangeEvent(); +}; + + +/** + * @param {Object} wmtsCap An object representing the capabilities document. + * @param {string} layer The layer identifier. + * @return {olx.source.WMTSOptions} WMTS source options object. + * @todo stability experimental + */ +ol.source.WMTS.optionsFromCapabilities = function(wmtsCap, layer) { + + // TODO: add support for TileMatrixLimits + + var layers = wmtsCap['contents']['layers']; + var l = goog.array.find(layers, function(elt, index, array) { + return elt['identifier'] == layer; + }); + goog.asserts.assert(!goog.isNull(l)); + goog.asserts.assert(l['tileMatrixSetLinks'].length > 0); + var matrixSet = /** @type {string} */ + (l['tileMatrixSetLinks'][0]['tileMatrixSet']); + var format = /** @type {string} */ (l['formats'][0]); + var idx = goog.array.findIndex(l['styles'], function(elt, index, array) { + return elt['isDefault']; + }); + if (idx < 0) { + idx = 0; + } + var style = /** @type {string} */ (l['styles'][idx]['identifier']); + + var dimensions = {}; + goog.array.forEach(l['dimensions'], function(elt, index, array) { + var key = elt['identifier']; + var value = elt['default']; + if (goog.isDef(value)) { + goog.asserts.assert(goog.array.indexOf(elt['values'], value) >= 0); + } else { + value = elt['values'][0]; + } + goog.asserts.assert(goog.isDef(value)); + dimensions[key] = value; + }); + + var matrixSets = wmtsCap['contents']['tileMatrixSets']; + goog.asserts.assert(matrixSet in matrixSets); + var matrixSetObj = matrixSets[matrixSet]; + + var tileGrid = ol.tilegrid.WMTS.createFromCapabilitiesMatrixSet( + matrixSetObj); + + var projection = ol.proj.get(matrixSetObj['supportedCRS']); + + var gets = wmtsCap['operationsMetadata']['GetTile']['dcp']['http']['get']; + var encodings = goog.object.getKeys( + gets[0]['constraints']['GetEncoding']['allowedValues']); + goog.asserts.assert(encodings.length > 0); + + var urls; + var requestEncoding; + switch (encodings[0]) { + case 'REST': + case 'RESTful': + // The OGC documentation is not clear if we should use REST or RESTful, + // ArcGis use RESTful, and OpenLayers use REST. + requestEncoding = ol.source.WMTSRequestEncoding.REST; + goog.asserts.assert(l['resourceUrls'].hasOwnProperty('tile')); + goog.asserts.assert(l['resourceUrls']['tile'].hasOwnProperty(format)); + urls = /** @type {Array.} */ + (l['resourceUrls']['tile'][format]); + break; + case 'KVP': + requestEncoding = ol.source.WMTSRequestEncoding.KVP; + urls = []; + goog.array.forEach(gets, function(elt, index, array) { + if (elt['constraints']['GetEncoding']['allowedValues'].hasOwnProperty( + ol.source.WMTSRequestEncoding.KVP)) { + urls.push(/** @type {string} */ (elt['url'])); + } + }); + goog.asserts.assert(urls.length > 0); + break; + default: + goog.asserts.fail(); + } + + return { + urls: urls, + layer: layer, + matrixSet: matrixSet, + format: format, + projection: projection, + requestEncoding: requestEncoding, + tileGrid: tileGrid, + style: style, + dimensions: dimensions + }; +}; diff --git a/float-no-zero/ol/ol/source/xyzsource.exports b/float-no-zero/ol/ol/source/xyzsource.exports new file mode 100644 index 0000000000..3968a05264 --- /dev/null +++ b/float-no-zero/ol/ol/source/xyzsource.exports @@ -0,0 +1,2 @@ +@exportSymbol ol.source.XYZ +@exportProperty ol.source.XYZ.prototype.setUrl diff --git a/float-no-zero/ol/ol/source/xyzsource.js b/float-no-zero/ol/ol/source/xyzsource.js new file mode 100644 index 0000000000..b41ff92de5 --- /dev/null +++ b/float-no-zero/ol/ol/source/xyzsource.js @@ -0,0 +1,84 @@ +goog.provide('ol.source.XYZ'); + +goog.require('ol.Attribution'); +goog.require('ol.TileUrlFunction'); +goog.require('ol.TileUrlFunctionType'); +goog.require('ol.proj'); +goog.require('ol.source.TileImage'); +goog.require('ol.tilegrid.XYZ'); + + + +/** + * @constructor + * @extends {ol.source.TileImage} + * @param {olx.source.XYZOptions} options XYZ options. + * @todo stability experimental + */ +ol.source.XYZ = function(options) { + + var projection = options.projection || ol.proj.get('EPSG:3857'); + + var maxZoom = goog.isDef(options.maxZoom) ? options.maxZoom : 18; + + var tileGrid = new ol.tilegrid.XYZ({ + maxZoom: maxZoom + }); + + goog.base(this, { + attributions: options.attributions, + crossOrigin: options.crossOrigin, + extent: options.extent, + logo: options.logo, + projection: projection, + tileGrid: tileGrid, + tileLoadFunction: options.tileLoadFunction, + tileUrlFunction: ol.TileUrlFunction.nullTileUrlFunction + }); + + /** + * @private + * @type {ol.TileCoordTransformType} + */ + this.tileCoordTransform_ = tileGrid.createTileCoordTransform({ + extent: options.extent + }); + + if (goog.isDef(options.tileUrlFunction)) { + this.setTileUrlFunction(options.tileUrlFunction); + } else if (goog.isDef(options.urls)) { + this.setUrls(options.urls); + } else if (goog.isDef(options.url)) { + this.setUrl(options.url); + } + +}; +goog.inherits(ol.source.XYZ, ol.source.TileImage); + + +/** + * @param {ol.TileUrlFunctionType} tileUrlFunction Tile URL function. + */ +ol.source.XYZ.prototype.setTileUrlFunction = function(tileUrlFunction) { + goog.base(this, 'setTileUrlFunction', + ol.TileUrlFunction.withTileCoordTransform( + this.tileCoordTransform_, tileUrlFunction)); +}; + + +/** + * @param {string} url URL. + * @todo stability experimental + */ +ol.source.XYZ.prototype.setUrl = function(url) { + this.setTileUrlFunction(ol.TileUrlFunction.createFromTemplates( + ol.TileUrlFunction.expandUrl(url))); +}; + + +/** + * @param {Array.} urls URLs. + */ +ol.source.XYZ.prototype.setUrls = function(urls) { + this.setTileUrlFunction(ol.TileUrlFunction.createFromTemplates(urls)); +}; diff --git a/float-no-zero/ol/ol/source/zoomifysource.exports b/float-no-zero/ol/ol/source/zoomifysource.exports new file mode 100644 index 0000000000..38f7c1657b --- /dev/null +++ b/float-no-zero/ol/ol/source/zoomifysource.exports @@ -0,0 +1 @@ +@exportSymbol ol.source.Zoomify diff --git a/float-no-zero/ol/ol/source/zoomifysource.js b/float-no-zero/ol/ol/source/zoomifysource.js new file mode 100644 index 0000000000..45cc6febdf --- /dev/null +++ b/float-no-zero/ol/ol/source/zoomifysource.js @@ -0,0 +1,184 @@ +goog.provide('ol.source.Zoomify'); + +goog.require('goog.array'); +goog.require('goog.asserts'); +goog.require('goog.dom'); +goog.require('goog.dom.TagName'); +goog.require('ol.ImageTile'); +goog.require('ol.TileCoord'); +goog.require('ol.TileState'); +goog.require('ol.TileUrlFunction'); +goog.require('ol.proj'); +goog.require('ol.source.TileImage'); +goog.require('ol.tilegrid.Zoomify'); + + +/** + * @enum {string} + */ +ol.source.ZoomifyTierSizeCalculation = { + DEFAULT: 'default', + TRUNCATED: 'truncated' +}; + + + +/** + * @constructor + * @extends {ol.source.TileImage} + * @param {olx.source.ZoomifyOptions=} opt_options Options. + * @todo stability experimental + */ +ol.source.Zoomify = function(opt_options) { + + var options = goog.isDef(opt_options) ? opt_options : {}; + + var size = options.size; + var tierSizeCalculation = goog.isDef(options.tierSizeCalculation) ? + options.tierSizeCalculation : + ol.source.ZoomifyTierSizeCalculation.DEFAULT; + + var imageWidth = size[0]; + var imageHeight = size[1]; + var tierSizeInTiles = []; + var tileSize = ol.DEFAULT_TILE_SIZE; + + switch (tierSizeCalculation) { + case ol.source.ZoomifyTierSizeCalculation.DEFAULT: + while (imageWidth > tileSize || imageHeight > tileSize) { + tierSizeInTiles.push([ + Math.ceil(imageWidth / tileSize), + Math.ceil(imageHeight / tileSize) + ]); + tileSize += tileSize; + } + break; + case ol.source.ZoomifyTierSizeCalculation.TRUNCATED: + var width = imageWidth; + var height = imageHeight; + while (width > tileSize || height > tileSize) { + tierSizeInTiles.push([ + Math.ceil(width / tileSize), + Math.ceil(height / tileSize) + ]); + width >>= 1; + height >>= 1; + } + break; + default: + goog.asserts.fail(); + break; + } + + tierSizeInTiles.push([1, 1]); + tierSizeInTiles.reverse(); + + var resolutions = [1]; + var tileCountUpToTier = [0]; + var i, ii; + for (i = 1, ii = tierSizeInTiles.length; i < ii; i++) { + resolutions.push(1 << i); + tileCountUpToTier.push( + tierSizeInTiles[i - 1][0] * tierSizeInTiles[i - 1][1] + + tileCountUpToTier[i - 1] + ); + } + resolutions.reverse(); + + var tileGrid = new ol.tilegrid.Zoomify({ + resolutions: resolutions + }); + + var url = options.url; + var tileUrlFunction = ol.TileUrlFunction.withTileCoordTransform( + tileGrid.createTileCoordTransform({extent: [0, 0, size[0], size[1]]}), + /** + * @this {ol.source.TileImage} + * @param {ol.TileCoord} tileCoord Tile Coordinate. + * @param {number} pixelRatio Pixel ratio. + * @param {ol.proj.Projection} projection Projection. + * @return {string|undefined} Tile URL. + */ + function(tileCoord, pixelRatio, projection) { + if (goog.isNull(tileCoord)) { + return undefined; + } else { + var tileIndex = tileCoord.x + + tileCoord.y * tierSizeInTiles[tileCoord.z][0] + + tileCountUpToTier[tileCoord.z]; + var tileGroup = (tileIndex / ol.DEFAULT_TILE_SIZE) | 0; + return url + 'TileGroup' + tileGroup + '/' + + tileCoord.z + '-' + tileCoord.x + '-' + tileCoord.y + '.jpg'; + } + }); + + goog.base(this, { + attributions: options.attributions, + crossOrigin: options.crossOrigin, + logo: options.logo, + tileClass: ol.source.ZoomifyTile_, + tileGrid: tileGrid, + tileUrlFunction: tileUrlFunction + }); + +}; +goog.inherits(ol.source.Zoomify, ol.source.TileImage); + + + +/** + * @constructor + * @extends {ol.ImageTile} + * @param {ol.TileCoord} tileCoord Tile coordinate. + * @param {ol.TileState} state State. + * @param {string} src Image source URI. + * @param {?string} crossOrigin Cross origin. + * @param {ol.TileLoadFunctionType} tileLoadFunction Tile load function. + * @private + */ +ol.source.ZoomifyTile_ = function( + tileCoord, state, src, crossOrigin, tileLoadFunction) { + + goog.base(this, tileCoord, state, src, crossOrigin, tileLoadFunction); + + /** + * @private + * @type {Object.} + */ + this.zoomifyImageByContext_ = {}; + +}; +goog.inherits(ol.source.ZoomifyTile_, ol.ImageTile); + + +/** + * @inheritDoc + */ +ol.source.ZoomifyTile_.prototype.getImage = function(opt_context) { + var key = goog.isDef(opt_context) ? goog.getUid(opt_context).toString() : ''; + if (key in this.zoomifyImageByContext_) { + return this.zoomifyImageByContext_[key]; + } else { + var image = goog.base(this, 'getImage', opt_context); + if (this.state == ol.TileState.LOADED) { + if (image.width == ol.DEFAULT_TILE_SIZE && + image.height == ol.DEFAULT_TILE_SIZE) { + this.zoomifyImageByContext_[key] = image; + return image; + } else { + var canvas = /** @type {HTMLCanvasElement} */ + (goog.dom.createElement(goog.dom.TagName.CANVAS)); + canvas.width = ol.DEFAULT_TILE_SIZE; + canvas.height = ol.DEFAULT_TILE_SIZE; + var context = /** @type {CanvasRenderingContext2D} */ + (canvas.getContext('2d')); + context.drawImage(image, 0, 0); + this.zoomifyImageByContext_[key] = canvas; + return canvas; + } + } else { + return image; + } + } +}; diff --git a/float-no-zero/ol/ol/sphere/normal.js b/float-no-zero/ol/ol/sphere/normal.js new file mode 100644 index 0000000000..70e6f8e165 --- /dev/null +++ b/float-no-zero/ol/ol/sphere/normal.js @@ -0,0 +1,11 @@ +goog.provide('ol.sphere.NORMAL'); + +goog.require('ol.Sphere'); + + +/** + * The normal sphere. + * @const + * @type {ol.Sphere} + */ +ol.sphere.NORMAL = new ol.Sphere(6370997); diff --git a/float-no-zero/ol/ol/sphere/sphere.js b/float-no-zero/ol/ol/sphere/sphere.js new file mode 100644 index 0000000000..825d843263 --- /dev/null +++ b/float-no-zero/ol/ol/sphere/sphere.js @@ -0,0 +1,187 @@ +/** + * @license + * Latitude/longitude spherical geodesy formulae taken from + * http://www.movable-type.co.uk/scripts/latlong.html + * Licenced under CC-BY-3.0. + */ + +// FIXME add intersection of two paths given start points and bearings +// FIXME add rhumb lines + +goog.provide('ol.Sphere'); + +goog.require('goog.math'); + + + +/** + * @constructor + * @param {number} radius Radius. + */ +ol.Sphere = function(radius) { + + /** + * @type {number} + */ + this.radius = radius; + +}; + + +/** + * Returns the distance from c1 to c2 using the spherical law of cosines. + * + * @param {ol.Coordinate} c1 Coordinate 1. + * @param {ol.Coordinate} c2 Coordinate 2. + * @return {number} Spherical law of cosines distance. + */ +ol.Sphere.prototype.cosineDistance = function(c1, c2) { + var lat1 = goog.math.toRadians(c1[1]); + var lat2 = goog.math.toRadians(c2[1]); + var deltaLon = goog.math.toRadians(c2[0] - c1[0]); + return this.radius * Math.acos( + Math.sin(lat1) * Math.sin(lat2) + + Math.cos(lat1) * Math.cos(lat2) * Math.cos(deltaLon)); +}; + + +/** + * Returns the distance of c3 from the great circle path defined by c1 and c2. + * + * @param {ol.Coordinate} c1 Coordinate 1. + * @param {ol.Coordinate} c2 Coordinate 2. + * @param {ol.Coordinate} c3 Coordinate 3. + * @return {number} Cross-track distance. + */ +ol.Sphere.prototype.crossTrackDistance = function(c1, c2, c3) { + var d13 = this.cosineDistance(c1, c2); + var theta12 = goog.math.toRadians(this.initialBearing(c1, c2)); + var theta13 = goog.math.toRadians(this.initialBearing(c1, c3)); + return this.radius * + Math.asin(Math.sin(d13 / this.radius) * Math.sin(theta13 - theta12)); +}; + + +/** + * Returns the distance from c1 to c2 using Pythagoras's theorem on an + * equirectangular projection. + * + * @param {ol.Coordinate} c1 Coordinate 1. + * @param {ol.Coordinate} c2 Coordinate 2. + * @return {number} Equirectangular distance. + */ +ol.Sphere.prototype.equirectangularDistance = function(c1, c2) { + var lat1 = goog.math.toRadians(c1[1]); + var lat2 = goog.math.toRadians(c2[1]); + var deltaLon = goog.math.toRadians(c2[0] - c1[0]); + var x = deltaLon * Math.cos((lat1 + lat2) / 2); + var y = lat2 - lat1; + return this.radius * Math.sqrt(x * x + y * y); +}; + + +/** + * Returns the final bearing from c1 to c2. + * + * @param {ol.Coordinate} c1 Coordinate 1. + * @param {ol.Coordinate} c2 Coordinate 2. + * @return {number} Initial bearing. + */ +ol.Sphere.prototype.finalBearing = function(c1, c2) { + return (this.initialBearing(c2, c1) + 180) % 360; +}; + + +/** + * Returns the distance from c1 to c2 using the haversine formula. + * + * @param {ol.Coordinate} c1 Coordinate 1. + * @param {ol.Coordinate} c2 Coordinate 2. + * @return {number} Haversine distance. + */ +ol.Sphere.prototype.haversineDistance = function(c1, c2) { + var lat1 = goog.math.toRadians(c1[1]); + var lat2 = goog.math.toRadians(c2[1]); + var deltaLatBy2 = (lat2 - lat1) / 2; + var deltaLonBy2 = goog.math.toRadians(c2[0] - c1[0]) / 2; + var a = Math.sin(deltaLatBy2) * Math.sin(deltaLatBy2) + + Math.sin(deltaLonBy2) * Math.sin(deltaLonBy2) * + Math.cos(lat1) * Math.cos(lat2); + return 2 * this.radius * Math.atan2(Math.sqrt(a), Math.sqrt(1 - a)); +}; + + +/** + * Returns the initial bearing from c1 to c2. + * + * @param {ol.Coordinate} c1 Coordinate 1. + * @param {ol.Coordinate} c2 Coordinate 2. + * @return {number} Initial bearing. + */ +ol.Sphere.prototype.initialBearing = function(c1, c2) { + var lat1 = goog.math.toRadians(c1[1]); + var lat2 = goog.math.toRadians(c2[1]); + var deltaLon = goog.math.toRadians(c2[0] - c1[0]); + var y = Math.sin(deltaLon) * Math.cos(lat2); + var x = Math.cos(lat1) * Math.sin(lat2) - + Math.sin(lat1) * Math.cos(lat2) * Math.cos(deltaLon); + return goog.math.toDegrees(Math.atan2(y, x)); +}; + + +/** + * Returns the maximum latitude of the great circle defined by bearing and + * latitude. + * + * @param {number} bearing Bearing. + * @param {number} latitude Latitude. + * @return {number} Maximum latitude. + */ +ol.Sphere.prototype.maximumLatitude = function(bearing, latitude) { + return Math.cos(Math.abs(Math.sin(goog.math.toRadians(bearing)) * + Math.cos(goog.math.toRadians(latitude)))); +}; + + +/** + * Returns the midpoint between c1 and c2. + * + * @param {ol.Coordinate} c1 Coordinate 1. + * @param {ol.Coordinate} c2 Coordinate 2. + * @return {ol.Coordinate} Midpoint. + */ +ol.Sphere.prototype.midpoint = function(c1, c2) { + var lat1 = goog.math.toRadians(c1[1]); + var lat2 = goog.math.toRadians(c2[1]); + var lon1 = goog.math.toRadians(c1[0]); + var deltaLon = goog.math.toRadians(c2[0] - c1[0]); + var Bx = Math.cos(lat2) * Math.cos(deltaLon); + var By = Math.cos(lat2) * Math.sin(deltaLon); + var cosLat1PlusBx = Math.cos(lat1) + Bx; + var lat = Math.atan2(Math.sin(lat1) + Math.sin(lat2), + Math.sqrt(cosLat1PlusBx * cosLat1PlusBx + By * By)); + var lon = lon1 + Math.atan2(By, cosLat1PlusBx); + return [goog.math.toDegrees(lon), goog.math.toDegrees(lat)]; +}; + + +/** + * Returns the coordinate at the given distance and bearing from c. + * + * @param {ol.Coordinate} c1 Coordinate. + * @param {number} distance Distance. + * @param {number} bearing Bearing. + * @return {ol.Coordinate} Coordinate. + */ +ol.Sphere.prototype.offset = function(c1, distance, bearing) { + var lat1 = goog.math.toRadians(c1[1]); + var lon1 = goog.math.toRadians(c1[0]); + var dByR = distance / this.radius; + var lat = Math.asin( + Math.sin(lat1) * Math.cos(dByR) + + Math.cos(lat1) * Math.sin(dByR) * Math.cos(bearing)); + var lon = lon1 + Math.atan2( + Math.sin(bearing) * Math.sin(dByR) * Math.cos(lat1), + Math.cos(dByR) - Math.sin(lat1) * Math.sin(lat)); + return [goog.math.toDegrees(lon), goog.math.toDegrees(lat)]; +}; diff --git a/float-no-zero/ol/ol/sphere/wgs84sphere.js b/float-no-zero/ol/ol/sphere/wgs84sphere.js new file mode 100644 index 0000000000..19624fd6b2 --- /dev/null +++ b/float-no-zero/ol/ol/sphere/wgs84sphere.js @@ -0,0 +1,11 @@ +goog.provide('ol.sphere.WGS84'); + +goog.require('ol.Sphere'); + + +/** + * A sphere with radius equal to the semi-major axis of the WGS84 ellipsoid. + * @const + * @type {ol.Sphere} + */ +ol.sphere.WGS84 = new ol.Sphere(6378137); diff --git a/float-no-zero/ol/ol/structs/buffer.js b/float-no-zero/ol/ol/structs/buffer.js new file mode 100644 index 0000000000..cace303348 --- /dev/null +++ b/float-no-zero/ol/ol/structs/buffer.js @@ -0,0 +1,263 @@ +goog.provide('ol.structs.Buffer'); + +goog.require('goog.array'); +goog.require('goog.asserts'); +goog.require('goog.webgl'); +goog.require('ol.structs.IntegerSet'); + + +/** + * @enum {number} + */ +ol.structs.BufferUsage = { + STATIC_DRAW: goog.webgl.STATIC_DRAW, + STREAM_DRAW: goog.webgl.STREAM_DRAW, + DYNAMIC_DRAW: goog.webgl.DYNAMIC_DRAW +}; + + +/** + * @define {boolean} Replace unused entries with NaNs. + */ +ol.BUFFER_REPLACE_UNUSED_ENTRIES_WITH_NANS = goog.DEBUG; + + + +/** + * @constructor + * @param {Array.=} opt_arr Array. + * @param {number=} opt_used Used. + * @param {number=} opt_usage Usage. + * @struct + * @todo stability experimental + */ +ol.structs.Buffer = function(opt_arr, opt_used, opt_usage) { + + /** + * @private + * @type {Array.} + */ + this.arr_ = goog.isDef(opt_arr) ? opt_arr : []; + + /** + * @private + * @type {Array.} + */ + this.dirtySets_ = []; + + /** + * @private + * @type {ol.structs.IntegerSet} + */ + this.freeSet_ = new ol.structs.IntegerSet(); + + var used = goog.isDef(opt_used) ? opt_used : this.arr_.length; + if (used < this.arr_.length) { + this.freeSet_.addRange(used, this.arr_.length); + } + if (ol.BUFFER_REPLACE_UNUSED_ENTRIES_WITH_NANS) { + var arr = this.arr_; + var n = arr.length; + var i; + for (i = used; i < n; ++i) { + arr[i] = NaN; + } + } + + /** + * @private + * @type {?Float32Array} + */ + this.split32_ = null; + + /** + * @private + * @type {ol.structs.IntegerSet} + */ + this.split32DirtySet_ = null; + + /** + * @private + * @type {number} + */ + this.usage_ = goog.isDef(opt_usage) ? + opt_usage : ol.structs.BufferUsage.STATIC_DRAW; + +}; + + +/** + * @param {number} size Size. + * @return {number} Offset. + */ +ol.structs.Buffer.prototype.allocate = function(size) { + goog.asserts.assert(size > 0); + var offset = this.freeSet_.findRange(size); + goog.asserts.assert(offset != -1); // FIXME + this.freeSet_.removeRange(offset, offset + size); + return offset; +}; + + +/** + * @param {Array.} values Values. + * @return {number} Offset. + */ +ol.structs.Buffer.prototype.add = function(values) { + var size = values.length; + var offset = this.allocate(size); + var i; + for (i = 0; i < size; ++i) { + this.arr_[offset + i] = values[i]; + } + this.markDirty(size, offset); + return offset; +}; + + +/** + * @param {ol.structs.IntegerSet} dirtySet Dirty set. + */ +ol.structs.Buffer.prototype.addDirtySet = function(dirtySet) { + goog.asserts.assert(!goog.array.contains(this.dirtySets_, dirtySet)); + this.dirtySets_.push(dirtySet); +}; + + +/** + * @param {function(this: T, number, number)} f Callback. + * @param {T=} opt_this The object to use as `this` in `f`. + * @template T + */ +ol.structs.Buffer.prototype.forEachRange = function(f, opt_this) { + if (this.arr_.length !== 0) { + this.freeSet_.forEachRangeInverted(0, this.arr_.length, f, opt_this); + } +}; + + +/** + * @return {Array.} Array. + */ +ol.structs.Buffer.prototype.getArray = function() { + return this.arr_; +}; + + +/** + * @return {number} Count. + */ +ol.structs.Buffer.prototype.getCount = function() { + return this.arr_.length - this.freeSet_.getSize(); +}; + + +/** + * @return {ol.structs.IntegerSet} Free set. + */ +ol.structs.Buffer.prototype.getFreeSet = function() { + return this.freeSet_; +}; + + +/** + * Returns a Float32Array twice the length of the buffer containing each value + * split into two 32-bit floating point values that, when added together, + * approximate the original value. Even indicies contain the high bits, odd + * indicies contain the low bits. + * @see http://blogs.agi.com/insight3d/index.php/2008/09/03/precisions-precisions/ + * @return {Float32Array} Split. + */ +ol.structs.Buffer.prototype.getSplit32 = function() { + var arr = this.arr_; + var n = arr.length; + if (goog.isNull(this.split32DirtySet_)) { + this.split32DirtySet_ = new ol.structs.IntegerSet([0, n]); + this.addDirtySet(this.split32DirtySet_); + } + if (goog.isNull(this.split32_)) { + this.split32_ = new Float32Array(2 * n); + } + var split32 = this.split32_; + this.split32DirtySet_.forEachRange(function(start, stop) { + var doubleHigh, i, j, value; + for (i = start, j = 2 * start; i < stop; ++i, j += 2) { + value = arr[i]; + if (value < 0) { + doubleHigh = 65536 * Math.floor(-value / 65536); + split32[j] = -doubleHigh; + split32[j + 1] = value + doubleHigh; + } else { + doubleHigh = 65536 * Math.floor(value / 65536); + split32[j] = doubleHigh; + split32[j + 1] = value - doubleHigh; + } + } + }); + this.split32DirtySet_.clear(); + return this.split32_; +}; + + +/** + * @return {number} Usage. + */ +ol.structs.Buffer.prototype.getUsage = function() { + return this.usage_; +}; + + +/** + * @param {number} size Size. + * @param {number} offset Offset. + */ +ol.structs.Buffer.prototype.markDirty = function(size, offset) { + var i, ii; + for (i = 0, ii = this.dirtySets_.length; i < ii; ++i) { + this.dirtySets_[i].addRange(offset, offset + size); + } +}; + + +/** + * @param {number} size Size. + * @param {number} offset Offset. + */ +ol.structs.Buffer.prototype.remove = function(size, offset) { + var i, ii; + this.freeSet_.addRange(offset, offset + size); + for (i = 0, ii = this.dirtySets_.length; i < ii; ++i) { + this.dirtySets_[i].removeRange(offset, offset + size); + } + if (ol.BUFFER_REPLACE_UNUSED_ENTRIES_WITH_NANS) { + var arr = this.arr_; + for (i = 0; i < size; ++i) { + arr[offset + i] = NaN; + } + } +}; + + +/** + * @param {ol.structs.IntegerSet} dirtySet Dirty set. + */ +ol.structs.Buffer.prototype.removeDirtySet = function(dirtySet) { + var removed = goog.array.remove(this.dirtySets_, dirtySet); + goog.asserts.assert(removed); +}; + + +/** + * @param {Array.} values Values. + * @param {number} offset Offset. + */ +ol.structs.Buffer.prototype.set = function(values, offset) { + var arr = this.arr_; + var n = values.length; + goog.asserts.assert(0 <= offset && offset + n <= arr.length); + var i; + for (i = 0; i < n; ++i) { + arr[offset + i] = values[i]; + } + this.markDirty(n, offset); +}; diff --git a/float-no-zero/ol/ol/structs/integerset.js b/float-no-zero/ol/ol/structs/integerset.js new file mode 100644 index 0000000000..de716c6842 --- /dev/null +++ b/float-no-zero/ol/ol/structs/integerset.js @@ -0,0 +1,330 @@ +goog.provide('ol.structs.IntegerSet'); + +goog.require('goog.asserts'); + + + +/** + * A set of integers represented as a set of integer ranges. + * This implementation is designed for the case when the number of distinct + * integer ranges is small. + * @constructor + * @struct + * @param {Array.=} opt_arr Array. + */ +ol.structs.IntegerSet = function(opt_arr) { + + /** + * @private + * @type {Array.} + */ + this.arr_ = goog.isDef(opt_arr) ? opt_arr : []; + + if (goog.DEBUG) { + this.assertValid(); + } + +}; + + +/** + * @param {number} addStart Start. + * @param {number} addStop Stop. + */ +ol.structs.IntegerSet.prototype.addRange = function(addStart, addStop) { + goog.asserts.assert(addStart <= addStop); + if (addStart == addStop) { + return; + } + var arr = this.arr_; + var n = arr.length; + var i; + for (i = 0; i < n; i += 2) { + if (addStart <= arr[i]) { + // FIXME check if splice is really needed + arr.splice(i, 0, addStart, addStop); + this.compactRanges_(); + return; + } + } + arr.push(addStart, addStop); + this.compactRanges_(); +}; + + +/** + * FIXME empty description for jsdoc + */ +ol.structs.IntegerSet.prototype.assertValid = function() { + var arr = this.arr_; + var n = arr.length; + goog.asserts.assert(n % 2 === 0); + var i; + for (i = 1; i < n; ++i) { + goog.asserts.assert(arr[i] > arr[i - 1]); + } +}; + + +/** + * FIXME empty description for jsdoc + */ +ol.structs.IntegerSet.prototype.clear = function() { + this.arr_.length = 0; +}; + + +/** + * @private + */ +ol.structs.IntegerSet.prototype.compactRanges_ = function() { + var arr = this.arr_; + var n = arr.length; + var rangeIndex = 0; + var i; + for (i = 0; i < n; i += 2) { + if (arr[i] == arr[i + 1]) { + // pass + } else if (rangeIndex > 0 && + arr[rangeIndex - 2] <= arr[i] && + arr[i] <= arr[rangeIndex - 1]) { + arr[rangeIndex - 1] = Math.max(arr[rangeIndex - 1], arr[i + 1]); + } else { + arr[rangeIndex++] = arr[i]; + arr[rangeIndex++] = arr[i + 1]; + } + } + arr.length = rangeIndex; +}; + + +/** + * Finds the start of smallest range that is at least of length minSize, or -1 + * if no such range exists. + * @param {number} minSize Minimum size. + * @return {number} Index. + */ +ol.structs.IntegerSet.prototype.findRange = function(minSize) { + goog.asserts.assert(minSize > 0); + var arr = this.arr_; + var n = arr.length; + var bestIndex = -1; + var bestSize, i, size; + for (i = 0; i < n; i += 2) { + size = arr[i + 1] - arr[i]; + if (size == minSize) { + return arr[i]; + } else if (size > minSize && (bestIndex == -1 || size < bestSize)) { + bestIndex = arr[i]; + bestSize = size; + } + } + return bestIndex; +}; + + +/** + * Calls f with each integer range. + * @param {function(this: T, number, number)} f Callback. + * @param {T=} opt_this The object to use as `this` in `f`. + * @template T + */ +ol.structs.IntegerSet.prototype.forEachRange = function(f, opt_this) { + var arr = this.arr_; + var n = arr.length; + var i; + for (i = 0; i < n; i += 2) { + f.call(opt_this, arr[i], arr[i + 1]); + } +}; + + +/** + * Calls f with each integer range not in [start, stop) - 'this'. + * @param {number} start Start. + * @param {number} stop Stop. + * @param {function(this: T, number, number)} f Callback. + * @param {T=} opt_this The object to use as `this` in `f`. + * @template T + */ +ol.structs.IntegerSet.prototype.forEachRangeInverted = + function(start, stop, f, opt_this) { + goog.asserts.assert(start < stop); + var arr = this.arr_; + var n = arr.length; + if (n === 0) { + f.call(opt_this, start, stop); + } else { + if (start < arr[0]) { + f.call(opt_this, start, arr[0]); + } + var i; + for (i = 1; i < n - 1; i += 2) { + f.call(opt_this, arr[i], arr[i + 1]); + } + if (arr[n - 1] < stop) { + f.call(opt_this, arr[n - 1], stop); + } + } +}; + + +/** + * @return {Array.} Array. + */ +ol.structs.IntegerSet.prototype.getArray = function() { + return this.arr_; +}; + + +/** + * Returns the first element in the set, or -1 if the set is empty. + * @return {number} Start. + */ +ol.structs.IntegerSet.prototype.getFirst = function() { + return this.arr_.length === 0 ? -1 : this.arr_[0]; +}; + + +/** + * Returns the first integer after the last element in the set, or -1 if the + * set is empty. + * @return {number} Last. + */ +ol.structs.IntegerSet.prototype.getLast = function() { + var n = this.arr_.length; + return n === 0 ? -1 : this.arr_[n - 1]; +}; + + +/** + * Returns the number of integers in the set. + * @return {number} Size. + */ +ol.structs.IntegerSet.prototype.getSize = function() { + var arr = this.arr_; + var n = arr.length; + var size = 0; + var i; + for (i = 0; i < n; i += 2) { + size += arr[i + 1] - arr[i]; + } + return size; +}; + + +/** + * @param {number} start Start. + * @param {number} stop Stop. + * @return {boolean} Intersects range. + */ +ol.structs.IntegerSet.prototype.intersectsRange = function(start, stop) { + goog.asserts.assert(start <= stop); + if (start == stop) { + return false; + } else { + var arr = this.arr_; + var n = arr.length; + var i = 0; + for (i = 0; i < n; i += 2) { + if (arr[i] <= start && start < arr[i + 1] || + arr[i] < stop && stop - 1 < arr[i + 1] || + start < arr[i] && arr[i + 1] <= stop) { + return true; + } + } + return false; + } +}; + + +/** + * @return {boolean} Is empty. + */ +ol.structs.IntegerSet.prototype.isEmpty = function() { + return this.arr_.length === 0; +}; + + +/** + * @return {Array.} Array. + */ +ol.structs.IntegerSet.prototype.pack = function() { + return this.arr_; +}; + + +/** + * @param {number} removeStart Start. + * @param {number} removeStop Stop. + */ +ol.structs.IntegerSet.prototype.removeRange = + function(removeStart, removeStop) { + // FIXME this could be more efficient + goog.asserts.assert(removeStart <= removeStop); + var arr = this.arr_; + var n = arr.length; + var i; + for (i = 0; i < n; i += 2) { + if (removeStop < arr[i] || arr[i + 1] < removeStart) { + continue; + } else if (arr[i] > removeStop) { + break; + } + if (removeStart < arr[i]) { + if (removeStop == arr[i]) { + break; + } else if (removeStop < arr[i + 1]) { + arr[i] = Math.max(arr[i], removeStop); + break; + } else { + arr.splice(i, 2); + i -= 2; + n -= 2; + } + } else if (removeStart == arr[i]) { + if (removeStop < arr[i + 1]) { + arr[i] = removeStop; + break; + } else if (removeStop == arr[i + 1]) { + arr.splice(i, 2); + break; + } else { + arr.splice(i, 2); + i -= 2; + n -= 2; + } + } else { + if (removeStop < arr[i + 1]) { + arr.splice(i, 2, arr[i], removeStart, removeStop, arr[i + 1]); + break; + } else if (removeStop == arr[i + 1]) { + arr[i + 1] = removeStart; + break; + } else { + arr[i + 1] = removeStart; + } + } + } + this.compactRanges_(); +}; + + +if (goog.DEBUG) { + + /** + * @return {string} String. + */ + ol.structs.IntegerSet.prototype.toString = function() { + var arr = this.arr_; + var n = arr.length; + var result = new Array(n / 2); + var resultIndex = 0; + var i; + for (i = 0; i < n; i += 2) { + result[resultIndex++] = arr[i] + '-' + arr[i + 1]; + } + return result.join(', '); + }; + +} diff --git a/float-no-zero/ol/ol/structs/lrucache.js b/float-no-zero/ol/ol/structs/lrucache.js new file mode 100644 index 0000000000..e5fecc8d2e --- /dev/null +++ b/float-no-zero/ol/ol/structs/lrucache.js @@ -0,0 +1,248 @@ +goog.provide('ol.structs.LRUCache'); + +goog.require('goog.asserts'); +goog.require('goog.object'); + + + +/** + * Implements a Least-Recently-Used cache where the keys do not conflict with + * Object's properties (e.g. 'hasOwnProperty' is not allowed as a key). Expiring + * items from the cache is the responsibility of the user. + * @constructor + * @struct + * @template T + */ +ol.structs.LRUCache = function() { + + /** + * @private + * @type {number} + */ + this.count_ = 0; + + /** + * @private + * @type {Object.} + */ + this.entries_ = {}; + + /** + * @private + * @type {?ol.structs.LRUCacheEntry} + */ + this.oldest_ = null; + + /** + * @private + * @type {?ol.structs.LRUCacheEntry} + */ + this.newest_ = null; + +}; + + +/** + * FIXME empty description for jsdoc + */ +ol.structs.LRUCache.prototype.assertValid = function() { + if (this.count_ === 0) { + goog.asserts.assert(goog.object.isEmpty(this.entries_)); + goog.asserts.assert(goog.isNull(this.oldest_)); + goog.asserts.assert(goog.isNull(this.newest_)); + } else { + goog.asserts.assert(goog.object.getCount(this.entries_) == this.count_); + goog.asserts.assert(!goog.isNull(this.oldest_)); + goog.asserts.assert(goog.isNull(this.oldest_.older)); + goog.asserts.assert(!goog.isNull(this.newest_)); + goog.asserts.assert(goog.isNull(this.newest_.newer)); + var i, entry; + var older = null; + i = 0; + for (entry = this.oldest_; !goog.isNull(entry); entry = entry.newer) { + goog.asserts.assert(entry.older === older); + older = entry; + ++i; + } + goog.asserts.assert(i == this.count_); + var newer = null; + i = 0; + for (entry = this.newest_; !goog.isNull(entry); entry = entry.older) { + goog.asserts.assert(entry.newer === newer); + newer = entry; + ++i; + } + goog.asserts.assert(i == this.count_); + } +}; + + +/** + * FIXME empty description for jsdoc + */ +ol.structs.LRUCache.prototype.clear = function() { + this.count_ = 0; + this.entries_ = {}; + this.oldest_ = null; + this.newest_ = null; +}; + + +/** + * @param {string} key Key. + * @return {boolean} Contains key. + */ +ol.structs.LRUCache.prototype.containsKey = function(key) { + return this.entries_.hasOwnProperty(key); +}; + + +/** + * @param {function(this: S, T, string, ol.structs.LRUCache): ?} f The function + * to call for every entry from the oldest to the newer. This function takes + * 3 arguments (the entry value, the entry key and the LRUCache object). + * The return value is ignored. + * @param {S=} opt_this The object to use as `this` in `f`. + * @template S + */ +ol.structs.LRUCache.prototype.forEach = function(f, opt_this) { + var entry = this.oldest_; + while (!goog.isNull(entry)) { + f.call(opt_this, entry.value_, entry.key_, this); + entry = entry.newer; + } +}; + + +/** + * @param {string} key Key. + * @return {T} Value. + */ +ol.structs.LRUCache.prototype.get = function(key) { + var entry = this.entries_[key]; + goog.asserts.assert(goog.isDef(entry)); + if (entry === this.newest_) { + return entry.value_; + } else if (entry === this.oldest_) { + this.oldest_ = this.oldest_.newer; + this.oldest_.older = null; + } else { + entry.newer.older = entry.older; + entry.older.newer = entry.newer; + } + entry.newer = null; + entry.older = this.newest_; + this.newest_.newer = entry; + this.newest_ = entry; + return entry.value_; +}; + + +/** + * @return {number} Count. + */ +ol.structs.LRUCache.prototype.getCount = function() { + return this.count_; +}; + + +/** + * @return {Array.} Keys. + */ +ol.structs.LRUCache.prototype.getKeys = function() { + var keys = new Array(this.count_); + var i = 0; + var entry; + for (entry = this.newest_; !goog.isNull(entry); entry = entry.older) { + keys[i++] = entry.key_; + } + goog.asserts.assert(i == this.count_); + return keys; +}; + + +/** + * @return {Array} Values. + */ +ol.structs.LRUCache.prototype.getValues = function() { + var values = new Array(this.count_); + var i = 0; + var entry; + for (entry = this.newest_; !goog.isNull(entry); entry = entry.older) { + values[i++] = entry.value_; + } + goog.asserts.assert(i == this.count_); + return values; +}; + + +/** + * @return {T} Last value. + */ +ol.structs.LRUCache.prototype.peekLast = function() { + goog.asserts.assert(!goog.isNull(this.oldest_)); + return this.oldest_.value_; +}; + + +/** + * @return {string} Last key. + */ +ol.structs.LRUCache.prototype.peekLastKey = function() { + goog.asserts.assert(!goog.isNull(this.oldest_)); + return this.oldest_.key_; +}; + + +/** + * @return {T} value Value. + */ +ol.structs.LRUCache.prototype.pop = function() { + goog.asserts.assert(!goog.isNull(this.oldest_)); + goog.asserts.assert(!goog.isNull(this.newest_)); + var entry = this.oldest_; + goog.asserts.assert(entry.key_ in this.entries_); + delete this.entries_[entry.key_]; + if (!goog.isNull(entry.newer)) { + entry.newer.older = null; + } + this.oldest_ = entry.newer; + if (goog.isNull(this.oldest_)) { + this.newest_ = null; + } + --this.count_; + return entry.value_; +}; + + +/** + * @param {string} key Key. + * @param {T} value Value. + */ +ol.structs.LRUCache.prototype.set = function(key, value) { + goog.asserts.assert(!(key in {})); + goog.asserts.assert(!(key in this.entries_)); + var entry = { + key_: key, + newer: null, + older: this.newest_, + value_: value + }; + if (goog.isNull(this.newest_)) { + this.oldest_ = entry; + } else { + this.newest_.newer = entry; + } + this.newest_ = entry; + this.entries_[key] = entry; + ++this.count_; +}; + + +/** + * @typedef {{key_: string, + * newer: ol.structs.LRUCacheEntry, + * older: ol.structs.LRUCacheEntry, + * value_: *}} + */ +ol.structs.LRUCacheEntry; diff --git a/float-no-zero/ol/ol/structs/priorityqueue.js b/float-no-zero/ol/ol/structs/priorityqueue.js new file mode 100644 index 0000000000..714c59dd64 --- /dev/null +++ b/float-no-zero/ol/ol/structs/priorityqueue.js @@ -0,0 +1,291 @@ +goog.provide('ol.structs.PriorityQueue'); + +goog.require('goog.asserts'); +goog.require('goog.object'); + + + +/** + * Priority queue. + * + * The implementation is inspired from the Closure Library's Heap class and + * Python's heapq module. + * + * @see http://closure-library.googlecode.com/svn/docs/closure_goog_structs_heap.js.source.html + * @see http://hg.python.org/cpython/file/2.7/Lib/heapq.py + * + * @constructor + * @param {function(T): number} priorityFunction Priority function. + * @param {function(T): string} keyFunction Key function. + * @struct + * @template T + */ +ol.structs.PriorityQueue = function(priorityFunction, keyFunction) { + + /** + * @type {function(T): number} + * @private + */ + this.priorityFunction_ = priorityFunction; + + /** + * @type {function(T): string} + * @private + */ + this.keyFunction_ = keyFunction; + + /** + * @type {Array.} + * @private + */ + this.elements_ = []; + + /** + * @type {Array.} + * @private + */ + this.priorities_ = []; + + /** + * @type {Object.} + * @private + */ + this.queuedElements_ = {}; + +}; + + +/** + * @const + * @type {number} + */ +ol.structs.PriorityQueue.DROP = Infinity; + + +/** + * FIXME empty desciption for jsdoc + */ +ol.structs.PriorityQueue.prototype.assertValid = function() { + var elements = this.elements_; + var priorities = this.priorities_; + var n = elements.length; + goog.asserts.assert(priorities.length == n); + var i, priority; + for (i = 0; i < (n >> 1) - 1; ++i) { + priority = priorities[i]; + goog.asserts.assert(priority <= priorities[this.getLeftChildIndex_(i)]); + goog.asserts.assert(priority <= priorities[this.getRightChildIndex_(i)]); + } +}; + + +/** + * FIXME empty description for jsdoc + */ +ol.structs.PriorityQueue.prototype.clear = function() { + this.elements_.length = 0; + this.priorities_.length = 0; + goog.object.clear(this.queuedElements_); +}; + + +/** + * Remove and return the highest-priority element. O(log N). + * @return {T} Element. + */ +ol.structs.PriorityQueue.prototype.dequeue = function() { + var elements = this.elements_; + goog.asserts.assert(elements.length > 0); + var priorities = this.priorities_; + var element = elements[0]; + if (elements.length == 1) { + elements.length = 0; + priorities.length = 0; + } else { + elements[0] = elements.pop(); + priorities[0] = priorities.pop(); + this.siftUp_(0); + } + var elementKey = this.keyFunction_(element); + goog.asserts.assert(elementKey in this.queuedElements_); + delete this.queuedElements_[elementKey]; + return element; +}; + + +/** + * Enqueue an element. O(log N). + * @param {T} element Element. + */ +ol.structs.PriorityQueue.prototype.enqueue = function(element) { + goog.asserts.assert(!(this.keyFunction_(element) in this.queuedElements_)); + var priority = this.priorityFunction_(element); + if (priority != ol.structs.PriorityQueue.DROP) { + this.elements_.push(element); + this.priorities_.push(priority); + this.queuedElements_[this.keyFunction_(element)] = true; + this.siftDown_(0, this.elements_.length - 1); + } +}; + + +/** + * @return {number} Count. + */ +ol.structs.PriorityQueue.prototype.getCount = function() { + return this.elements_.length; +}; + + +/** + * Gets the index of the left child of the node at the given index. + * @param {number} index The index of the node to get the left child for. + * @return {number} The index of the left child. + * @private + */ +ol.structs.PriorityQueue.prototype.getLeftChildIndex_ = function(index) { + return index * 2 + 1; +}; + + +/** + * Gets the index of the right child of the node at the given index. + * @param {number} index The index of the node to get the right child for. + * @return {number} The index of the right child. + * @private + */ +ol.structs.PriorityQueue.prototype.getRightChildIndex_ = function(index) { + return index * 2 + 2; +}; + + +/** + * Gets the index of the parent of the node at the given index. + * @param {number} index The index of the node to get the parent for. + * @return {number} The index of the parent. + * @private + */ +ol.structs.PriorityQueue.prototype.getParentIndex_ = function(index) { + return (index - 1) >> 1; +}; + + +/** + * Make this a heap. O(N). + * @private + */ +ol.structs.PriorityQueue.prototype.heapify_ = function() { + var i; + for (i = (this.elements_.length >> 1) - 1; i >= 0; i--) { + this.siftUp_(i); + } +}; + + +/** + * @return {boolean} Is empty. + */ +ol.structs.PriorityQueue.prototype.isEmpty = function() { + return this.elements_.length === 0; +}; + + +/** + * @param {string} key Key. + * @return {boolean} Is key queued. + */ +ol.structs.PriorityQueue.prototype.isKeyQueued = function(key) { + return key in this.queuedElements_; +}; + + +/** + * @param {T} element Element. + * @return {boolean} Is queued. + */ +ol.structs.PriorityQueue.prototype.isQueued = function(element) { + return this.isKeyQueued(this.keyFunction_(element)); +}; + + +/** + * @param {number} index The index of the node to move down. + * @private + */ +ol.structs.PriorityQueue.prototype.siftUp_ = function(index) { + var elements = this.elements_; + var priorities = this.priorities_; + var count = elements.length; + var element = elements[index]; + var priority = priorities[index]; + var startIndex = index; + + while (index < (count >> 1)) { + var lIndex = this.getLeftChildIndex_(index); + var rIndex = this.getRightChildIndex_(index); + + var smallerChildIndex = rIndex < count && + priorities[rIndex] < priorities[lIndex] ? + rIndex : lIndex; + + elements[index] = elements[smallerChildIndex]; + priorities[index] = priorities[smallerChildIndex]; + index = smallerChildIndex; + } + + elements[index] = element; + priorities[index] = priority; + this.siftDown_(startIndex, index); +}; + + +/** + * @param {number} startIndex The index of the root. + * @param {number} index The index of the node to move up. + * @private + */ +ol.structs.PriorityQueue.prototype.siftDown_ = function(startIndex, index) { + var elements = this.elements_; + var priorities = this.priorities_; + var element = elements[index]; + var priority = priorities[index]; + + while (index > startIndex) { + var parentIndex = this.getParentIndex_(index); + if (priorities[parentIndex] > priority) { + elements[index] = elements[parentIndex]; + priorities[index] = priorities[parentIndex]; + index = parentIndex; + } else { + break; + } + } + elements[index] = element; + priorities[index] = priority; +}; + + +/** + * FIXME empty description for jsdoc + */ +ol.structs.PriorityQueue.prototype.reprioritize = function() { + var priorityFunction = this.priorityFunction_; + var elements = this.elements_; + var priorities = this.priorities_; + var index = 0; + var n = elements.length; + var element, i, priority; + for (i = 0; i < n; ++i) { + element = elements[i]; + priority = priorityFunction(element); + if (priority == ol.structs.PriorityQueue.DROP) { + delete this.queuedElements_[this.keyFunction_(element)]; + } else { + priorities[index] = priority; + elements[index++] = element; + } + } + elements.length = index; + priorities.length = index; + this.heapify_(); +}; diff --git a/float-no-zero/ol/ol/structs/rbush.js b/float-no-zero/ol/ol/structs/rbush.js new file mode 100644 index 0000000000..4012576c4b --- /dev/null +++ b/float-no-zero/ol/ol/structs/rbush.js @@ -0,0 +1,723 @@ +// Based on rbush https://github.com/mourner/rbush +// Copyright (c) 2013 Vladimir Agafonkin +// +// 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. + +// FIXME bulk inserts +// FIXME is level argument needed to insert_? + +goog.provide('ol.structs.RBush'); + +goog.require('goog.array'); +goog.require('goog.asserts'); +goog.require('goog.object'); +goog.require('ol.extent'); + + + +/** + * @constructor + * @param {ol.Extent} extent Extent. + * @param {number} height Height. + * @param {Array.>} children Children. + * @param {?T} value Value. + * @struct + * @template T + */ +ol.structs.RBushNode = function(extent, height, children, value) { + + if (height === 0) { + goog.asserts.assert(goog.isNull(children)); + goog.asserts.assert(!goog.isNull(value)); + } else { + goog.asserts.assert(!goog.isNull(children)); + goog.asserts.assert(goog.isNull(value)); + } + + /** + * @type {ol.Extent} + */ + this.extent = extent; + + /** + * @type {number} + */ + this.height = height; + + /** + * @type {Array.>} + */ + this.children = children; + + /** + * @type {?T} + */ + this.value = value; + +}; + + +/** + * @param {ol.structs.RBushNode.} node1 Node 1. + * @param {ol.structs.RBushNode.} node2 Node 2. + * @return {number} Compare minimum X. + * @template T + */ +ol.structs.RBushNode.compareMinX = function(node1, node2) { + return node1.extent[0] - node2.extent[0]; +}; + + +/** + * @param {ol.structs.RBushNode.} node1 Node 1. + * @param {ol.structs.RBushNode.} node2 Node 2. + * @return {number} Compare minimum Y. + * @template T + */ +ol.structs.RBushNode.compareMinY = function(node1, node2) { + return node1.extent[1] - node2.extent[1]; +}; + + +/** + * @param {number} maxEntries Max entries. + */ +ol.structs.RBushNode.prototype.assertValid = function(maxEntries) { + if (this.height === 0) { + goog.asserts.assert(goog.isNull(this.children)); + goog.asserts.assert(!goog.isNull(this.value)); + } else { + goog.asserts.assert(!goog.isNull(this.children)); + goog.asserts.assert(goog.isNull(this.value)); + goog.asserts.assert(this.children.length <= maxEntries); + var i, ii; + for (i = 0, ii = this.children.length; i < ii; ++i) { + var child = this.children[i]; + goog.asserts.assert(ol.extent.containsExtent(this.extent, child.extent)); + child.assertValid(maxEntries); + } + } +}; + + +/** + * @param {number} start Start. + * @param {number} stop Stop. + * @param {ol.Extent=} opt_extent Extent. + * @return {ol.Extent} Extent. + */ +ol.structs.RBushNode.prototype.getChildrenExtent = + function(start, stop, opt_extent) { + goog.asserts.assert(!this.isLeaf()); + var children = this.children; + var extent = ol.extent.createOrUpdateEmpty(opt_extent); + var i; + for (i = start; i < stop; ++i) { + ol.extent.extend(extent, children[i].extent); + } + return extent; +}; + + +/** + * @param {ol.Extent} extent Extent. + * @param {T} value Value. + * @param {Array.>} path Path. + * @return {boolean} Removed. + */ +ol.structs.RBushNode.prototype.remove = function(extent, value, path) { + var children = this.children; + var ii = children.length; + var child, i; + if (this.height == 1) { + for (i = 0; i < ii; ++i) { + child = children[i]; + if (child.value === value) { + goog.array.removeAt(children, i); + return true; + } + } + } else { + goog.asserts.assert(this.height > 1); + for (i = 0; i < ii; ++i) { + child = children[i]; + if (ol.extent.containsExtent(child.extent, extent)) { + path.push(child); + if (child.remove(extent, value, path)) { + return true; + } + path.pop(); + } + } + } + return false; +}; + + +/** + * FIXME empty description for jsdoc + */ +ol.structs.RBushNode.prototype.updateExtent = function() { + goog.asserts.assert(!this.isLeaf()); + var extent = ol.extent.createOrUpdateEmpty(this.extent); + var children = this.children; + var i, ii; + for (i = 0, ii = children.length; i < ii; ++i) { + ol.extent.extend(extent, children[i].extent); + } +}; + + +/** + * @return {boolean} Is leaf. + */ +ol.structs.RBushNode.prototype.isLeaf = function() { + return goog.isNull(this.children); +}; + + + +/** + * @constructor + * @param {number=} opt_maxEntries Max entries. + * @see https://github.com/mourner/rbush + * @struct + * @template T + */ +ol.structs.RBush = function(opt_maxEntries) { + + /** + * @private + * @type {number} + */ + this.maxEntries_ = + Math.max(4, goog.isDef(opt_maxEntries) ? opt_maxEntries : 9); + + /** + * @private + * @type {number} + */ + this.minEntries_ = Math.max(2, Math.ceil(0.4 * this.maxEntries_)); + + /** + * @private + * @type {ol.structs.RBushNode.} + */ + this.root_ = new ol.structs.RBushNode(ol.extent.createEmpty(), 1, [], null); + + /** + * @private + * @type {Object.} + */ + this.valueExtent_ = {}; + + if (goog.DEBUG) { + /** + * @private + * @type {number} + */ + this.readers_ = 0; + } + +}; + + +/** + * @param {ol.structs.RBushNode.} node Node. + * @param {function(ol.structs.RBushNode., ol.structs.RBushNode.): number} + * compare Compare. + * @private + * @return {number} All distance margin. + */ +ol.structs.RBush.prototype.allDistMargin_ = function(node, compare) { + var children = node.children; + var m = this.minEntries_; + var M = children.length; + var i; + goog.array.sort(children, compare); + var leftExtent = node.getChildrenExtent(0, m); + var rightExtent = node.getChildrenExtent(M - m, M); + var margin = + ol.extent.getMargin(leftExtent) + ol.extent.getMargin(rightExtent); + for (i = m; i < M - m; ++i) { + ol.extent.extend(leftExtent, children[i].extent); + margin += ol.extent.getMargin(leftExtent); + } + for (i = M - m - 1; i >= m; --i) { + ol.extent.extend(rightExtent, children[i].extent); + margin += ol.extent.getMargin(rightExtent); + } + return margin; +}; + + +/** + * FIXME empty description for jsdoc + */ +ol.structs.RBush.prototype.assertValid = function() { + this.root_.assertValid(this.maxEntries_); +}; + + +/** + * @param {ol.structs.RBushNode.} node Node. + * @private + */ +ol.structs.RBush.prototype.chooseSplitAxis_ = function(node) { + var xMargin = this.allDistMargin_(node, ol.structs.RBushNode.compareMinX); + var yMargin = this.allDistMargin_(node, ol.structs.RBushNode.compareMinY); + if (xMargin < yMargin) { + goog.array.sort(node.children, ol.structs.RBushNode.compareMinX); + } +}; + + +/** + * @param {ol.structs.RBushNode.} node Node. + * @private + * @return {number} Split index. + */ +ol.structs.RBush.prototype.chooseSplitIndex_ = function(node) { + var children = node.children; + var m = this.minEntries_; + var M = children.length; + var minOverlap = Infinity; + var minArea = Infinity; + var extent1 = ol.extent.createEmpty(); + var extent2 = ol.extent.createEmpty(); + var index = 0; + var i; + for (i = m; i <= M - m; ++i) { + extent1 = node.getChildrenExtent(0, i, extent1); + extent2 = node.getChildrenExtent(i, M, extent2); + var overlap = ol.extent.getIntersectionArea(extent1, extent2); + var area = ol.extent.getArea(extent1) + ol.extent.getArea(extent2); + if (overlap < minOverlap) { + minOverlap = overlap; + minArea = Math.min(area, minArea); + index = i; + } else if (overlap == minOverlap && area < minArea) { + minArea = area; + index = i; + } + } + return index; +}; + + +/** + * @param {ol.Extent} extent Extent. + * @param {ol.structs.RBushNode.} node Node. + * @param {number} level Level. + * @param {Array.>} path Path. + * @private + * @return {ol.structs.RBushNode.} Node. + */ +ol.structs.RBush.prototype.chooseSubtree_ = + function(extent, node, level, path) { + while (!node.isLeaf() && path.length - 1 != level) { + var minArea = Infinity; + var minEnlargement = Infinity; + var children = node.children; + var bestChild = null; + var i, ii; + for (i = 0, ii = children.length; i < ii; ++i) { + var child = children[i]; + var area = ol.extent.getArea(child.extent); + var enlargement = ol.extent.getEnlargedArea(child.extent, extent) - area; + if (enlargement < minEnlargement) { + minEnlargement = enlargement; + minArea = Math.min(area, minArea); + bestChild = child; + } else if (enlargement == minEnlargement && area < minArea) { + minArea = area; + bestChild = child; + } + } + goog.asserts.assert(!goog.isNull(bestChild)); + node = bestChild; + path.push(node); + } + return node; +}; + + +/** + * FIXME empty description for jsdoc + */ +ol.structs.RBush.prototype.clear = function() { + var node = this.root_; + node.extent = ol.extent.createOrUpdateEmpty(this.root_.extent); + node.height = 1; + node.children.length = 0; + node.value = null; + goog.object.clear(this.valueExtent_); +}; + + +/** + * @param {Array.>} path Path. + * @private + */ +ol.structs.RBush.prototype.condense_ = function(path) { + var i; + for (i = path.length - 1; i >= 0; --i) { + var node = path[i]; + if (node.children.length === 0) { + if (i > 0) { + goog.array.remove(path[i - 1].children, node); + } else { + this.clear(); + } + } else { + node.updateExtent(); + } + } +}; + + +/** + * Calls a callback function with each node in the tree. Inside the callback, + * no tree modifications (insert, update, remove) can be made. + * @param {function(this: S, T): *} callback Callback. + * @param {S=} opt_this The object to use as `this` in `callback`. + * @return {*} Callback return value. + * @template S + */ +ol.structs.RBush.prototype.forEach = function(callback, opt_this) { + if (goog.DEBUG) { + ++this.readers_; + try { + return this.forEach_(this.root_, callback, opt_this); + } finally { + --this.readers_; + } + } else { + return this.forEach_(this.root_, callback, opt_this); + } +}; + + +/** + * @param {ol.structs.RBushNode.} node Node. + * @param {function(this: S, T): *} callback Callback. + * @param {S=} opt_this The object to use as `this` in `callback`. + * @private + * @return {*} Callback return value. + * @template S + */ +ol.structs.RBush.prototype.forEach_ = function(node, callback, opt_this) { + goog.asserts.assert(!node.isLeaf()); + /** @type {Array.>} */ + var toVisit = [node]; + var children, i, ii, result; + while (toVisit.length > 0) { + node = toVisit.pop(); + children = node.children; + if (node.height == 1) { + for (i = 0, ii = children.length; i < ii; ++i) { + result = callback.call(opt_this, children[i].value); + if (result) { + return result; + } + } + } else { + toVisit.push.apply(toVisit, children); + } + } +}; + + +/** + * Calls a callback function with each node in the provided extent. Inside the + * callback, no tree modifications (insert, update, remove) can be made. + * @param {ol.Extent} extent Extent. + * @param {function(this: S, T): *} callback Callback. + * @param {S=} opt_this The object to use as `this` in `callback`. + * @return {*} Callback return value. + * @template S + */ +ol.structs.RBush.prototype.forEachInExtent = + function(extent, callback, opt_this) { + if (goog.DEBUG) { + ++this.readers_; + try { + return this.forEachInExtent_(extent, callback, opt_this); + } finally { + --this.readers_; + } + } else { + return this.forEachInExtent_(extent, callback, opt_this); + } +}; + + +/** + * @param {ol.Extent} extent Extent. + * @param {function(this: S, T): *} callback Callback. + * @param {S=} opt_this The object to use as `this` in `callback`. + * @private + * @return {*} Callback return value. + * @template S + */ +ol.structs.RBush.prototype.forEachInExtent_ = + function(extent, callback, opt_this) { + /** @type {Array.>} */ + var toVisit = [this.root_]; + var result; + while (toVisit.length > 0) { + var node = toVisit.pop(); + if (ol.extent.intersects(extent, node.extent)) { + if (node.isLeaf()) { + result = callback.call(opt_this, node.value); + if (result) { + return result; + } + } else if (ol.extent.containsExtent(extent, node.extent)) { + result = this.forEach_(node, callback, opt_this); + if (result) { + return result; + } + } else { + toVisit.push.apply(toVisit, node.children); + } + } + } + return undefined; +}; + + +/** + * @param {function(this: S, ol.structs.RBushNode.): *} callback Callback. + * @param {S=} opt_this The object to use as `this` in `callback`. + * @return {*} Callback return value. + * @template S + */ +ol.structs.RBush.prototype.forEachNode = function(callback, opt_this) { + /** @type {Array.>} */ + var toVisit = [this.root_]; + while (toVisit.length > 0) { + var node = toVisit.pop(); + var result = callback.call(opt_this, node); + if (result) { + return result; + } + if (!node.isLeaf()) { + toVisit.push.apply(toVisit, node.children); + } + } + return undefined; +}; + + +/** + * @return {Array.} All. + */ +ol.structs.RBush.prototype.getAll = function() { + var values = []; + this.forEach( + /** + * @param {T} value Value. + */ + function(value) { + values.push(value); + }); + return values; +}; + + +/** + * @param {ol.Extent} extent Extent. + * @return {Array.} All in extent. + */ +ol.structs.RBush.prototype.getInExtent = function(extent) { + var values = []; + this.forEachInExtent(extent, + /** + * @param {T} value Value. + */ + function(value) { + values.push(value); + }); + return values; +}; + + +/** + * @param {ol.Extent=} opt_extent Extent. + * @return {ol.Extent} Extent. + */ +ol.structs.RBush.prototype.getExtent = function(opt_extent) { + return ol.extent.returnOrUpdate(this.root_.extent, opt_extent); +}; + + +/** + * @param {T} value Value. + * @private + * @return {string} Key. + */ +ol.structs.RBush.prototype.getKey_ = function(value) { + goog.asserts.assert(goog.isObject(value)); + return goog.getUid(value).toString(); +}; + + +/** + * @param {ol.Extent} extent Extent. + * @param {T} value Value. + */ +ol.structs.RBush.prototype.insert = function(extent, value) { + if (goog.DEBUG && this.readers_) { + throw new Error('cannot insert value while reading'); + } + var key = this.getKey_(value); + goog.asserts.assert(!this.valueExtent_.hasOwnProperty(key)); + this.insert_(extent, value, this.root_.height - 1); + this.valueExtent_[key] = ol.extent.clone(extent); +}; + + +/** + * @param {ol.Extent} extent Extent. + * @param {T} value Value. + * @param {number} level Level. + * @private + * @return {ol.structs.RBushNode.} Node. + */ +ol.structs.RBush.prototype.insert_ = function(extent, value, level) { + /** @type {Array.>} */ + var path = [this.root_]; + var node = this.chooseSubtree_(extent, this.root_, level, path); + node.children.push(new ol.structs.RBushNode(extent, 0, null, value)); + ol.extent.extend(node.extent, extent); + var i; + for (i = path.length - 1; i >= 0; --i) { + if (path[i].children.length > this.maxEntries_) { + this.split_(path, i); + } else { + break; + } + } + for (; i >= 0; --i) { + ol.extent.extend(path[i].extent, extent); + } + return node; +}; + + +/** + * @return {boolean} Is empty. + */ +ol.structs.RBush.prototype.isEmpty = function() { + return this.root_.children.length === 0; +}; + + +/** + * @param {T} value Value. + * @return {boolean} Removed. + */ +ol.structs.RBush.prototype.remove = function(value) { + if (goog.DEBUG && this.readers_) { + throw new Error('cannot remove value while reading'); + } + var key = this.getKey_(value); + goog.asserts.assert(this.valueExtent_.hasOwnProperty(key)); + var extent = this.valueExtent_[key]; + delete this.valueExtent_[key]; + return this.remove_(extent, value); +}; + + +/** + * @param {ol.Extent} extent Extent. + * @param {T} value Value. + * @private + * @return {boolean} Removed. + */ +ol.structs.RBush.prototype.remove_ = function(extent, value) { + var root = this.root_; + var path = [root]; + var removed = root.remove(extent, value, path); + if (removed) { + this.condense_(path); + } else { + goog.asserts.assert(path.length == 1); + goog.asserts.assert(path[0] === root); + } + return removed; +}; + + +/** + * @param {Array.>} path Path. + * @param {number} level Level. + * @private + */ +ol.structs.RBush.prototype.split_ = function(path, level) { + var node = path[level]; + this.chooseSplitAxis_(node); + var splitIndex = this.chooseSplitIndex_(node); + // FIXME too few arguments to splice here + var newChildren = node.children.splice(splitIndex); + var newNode = new ol.structs.RBushNode( + ol.extent.createEmpty(), node.height, newChildren, null); + node.updateExtent(); + newNode.updateExtent(); + if (level) { + path[level - 1].children.push(newNode); + } else { + this.splitRoot_(node, newNode); + } +}; + + +/** + * @param {ol.structs.RBushNode.} node1 Node 1. + * @param {ol.structs.RBushNode.} node2 Node 2. + * @private + */ +ol.structs.RBush.prototype.splitRoot_ = function(node1, node2) { + goog.asserts.assert(node1 === this.root_); + var height = node1.height + 1; + var extent = ol.extent.extend(node1.extent.slice(), node2.extent); + var children = [node1, node2]; + this.root_ = new ol.structs.RBushNode(extent, height, children, null); +}; + + +/** + * @param {ol.Extent} extent Extent. + * @param {T} value Value. + */ +ol.structs.RBush.prototype.update = function(extent, value) { + if (goog.DEBUG && this.readers_) { + throw new Error('cannot update value while reading'); + } + var key = this.getKey_(value); + var currentExtent = this.valueExtent_[key]; + goog.asserts.assert(goog.isDef(currentExtent)); + if (!ol.extent.equals(currentExtent, extent)) { + var removed = this.remove_(currentExtent, value); + goog.asserts.assert(removed); + this.insert_(extent, value, this.root_.height - 1); + this.valueExtent_[key] = ol.extent.clone(extent, currentExtent); + } +}; diff --git a/float-no-zero/ol/ol/style/circlestyle.exports b/float-no-zero/ol/ol/style/circlestyle.exports new file mode 100644 index 0000000000..fd4ebd1f1b --- /dev/null +++ b/float-no-zero/ol/ol/style/circlestyle.exports @@ -0,0 +1,7 @@ +@exportSymbol ol.style.Circle +@exportProperty ol.style.Circle.prototype.getAnchor +@exportProperty ol.style.Circle.prototype.getFill +@exportProperty ol.style.Circle.prototype.getImage +@exportProperty ol.style.Circle.prototype.getRadius +@exportProperty ol.style.Circle.prototype.getSize +@exportProperty ol.style.Circle.prototype.getStroke diff --git a/float-no-zero/ol/ol/style/circlestyle.js b/float-no-zero/ol/ol/style/circlestyle.js new file mode 100644 index 0000000000..91647681db --- /dev/null +++ b/float-no-zero/ol/ol/style/circlestyle.js @@ -0,0 +1,230 @@ +// FIXME decide default value for snapToPixel + +goog.provide('ol.style.Circle'); + +goog.require('goog.dom'); +goog.require('goog.dom.TagName'); +goog.require('ol.color'); +goog.require('ol.render.canvas'); +goog.require('ol.style.Fill'); +goog.require('ol.style.Image'); +goog.require('ol.style.ImageState'); +goog.require('ol.style.Stroke'); + + + +/** + * @constructor + * @param {olx.style.CircleOptions=} opt_options Options. + * @extends {ol.style.Image} + * @todo stability experimental + */ +ol.style.Circle = function(opt_options) { + + var options = goog.isDef(opt_options) ? opt_options : {}; + + /** + * @private + * @type {HTMLCanvasElement} + */ + this.canvas_ = /** @type {HTMLCanvasElement} */ + (goog.dom.createElement(goog.dom.TagName.CANVAS)); + + /** + * @private + * @type {HTMLCanvasElement} + */ + this.hitDetectionCanvas_ = null; + + /** + * @private + * @type {ol.style.Fill} + */ + this.fill_ = goog.isDef(options.fill) ? options.fill : null; + + /** + * @private + * @type {number} + */ + this.radius_ = options.radius; + + /** + * @private + * @type {ol.style.Stroke} + */ + this.stroke_ = goog.isDef(options.stroke) ? options.stroke : null; + + var size = this.render_(); + + /** + * @private + * @type {Array.} + */ + this.anchor_ = [size / 2, size / 2]; + + /** + * @private + * @type {ol.Size} + */ + this.size_ = [size, size]; + + goog.base(this, { + opacity: 1, + rotateWithView: false, + rotation: 0, + scale: 1, + snapToPixel: undefined + }); + +}; +goog.inherits(ol.style.Circle, ol.style.Image); + + +/** + * @inheritDoc + */ +ol.style.Circle.prototype.getAnchor = function() { + return this.anchor_; +}; + + +/** + * @return {ol.style.Fill} Fill style. + */ +ol.style.Circle.prototype.getFill = function() { + return this.fill_; +}; + + +/** + * @inheritDoc + */ +ol.style.Circle.prototype.getHitDetectionImage = function(pixelRatio) { + return this.hitDetectionCanvas_; +}; + + +/** + * @inheritDoc + */ +ol.style.Circle.prototype.getImage = function(pixelRatio) { + return this.canvas_; +}; + + +/** + * @inheritDoc + */ +ol.style.Circle.prototype.getImageState = function() { + return ol.style.ImageState.LOADED; +}; + + +/** + * @return {number} Radius. + */ +ol.style.Circle.prototype.getRadius = function() { + return this.radius_; +}; + + +/** + * @inheritDoc + */ +ol.style.Circle.prototype.getSize = function() { + return this.size_; +}; + + +/** + * @return {ol.style.Stroke} Stroke style. + */ +ol.style.Circle.prototype.getStroke = function() { + return this.stroke_; +}; + + +/** + * @inheritDoc + */ +ol.style.Circle.prototype.listenImageChange = goog.nullFunction; + + +/** + * @inheritDoc + */ +ol.style.Circle.prototype.load = goog.nullFunction; + + +/** + * @inheritDoc + */ +ol.style.Circle.prototype.unlistenImageChange = goog.nullFunction; + + +/** + * @private + * @return {number} Size. + */ +ol.style.Circle.prototype.render_ = function() { + var canvas = this.canvas_; + var strokeStyle, strokeWidth; + + if (goog.isNull(this.stroke_)) { + strokeWidth = 0; + } else { + strokeStyle = ol.color.asString(this.stroke_.getColor()); + strokeWidth = this.stroke_.getWidth(); + if (!goog.isDef(strokeWidth)) { + strokeWidth = ol.render.canvas.defaultLineWidth; + } + } + + var size = 2 * (this.radius_ + strokeWidth) + 1; + + // draw the circle on the canvas + + canvas.height = size; + canvas.width = size; + + var context = /** @type {CanvasRenderingContext2D} */ + (canvas.getContext('2d')); + context.arc(size / 2, size / 2, this.radius_, 0, 2 * Math.PI, true); + + if (!goog.isNull(this.fill_)) { + context.fillStyle = ol.color.asString(this.fill_.getColor()); + context.fill(); + } + if (!goog.isNull(this.stroke_)) { + context.strokeStyle = strokeStyle; + context.lineWidth = strokeWidth; + context.stroke(); + } + + // deal with the hit detection canvas + + if (!goog.isNull(this.fill_)) { + this.hitDetectionCanvas_ = canvas; + } else { + this.hitDetectionCanvas_ = /** @type {HTMLCanvasElement} */ + (goog.dom.createElement(goog.dom.TagName.CANVAS)); + canvas = this.hitDetectionCanvas_; + + canvas.height = size; + canvas.width = size; + + context = /** @type {CanvasRenderingContext2D} */ + (canvas.getContext('2d')); + context.arc(size / 2, size / 2, this.radius_, 0, 2 * Math.PI, true); + + context.fillStyle = ol.render.canvas.defaultFillStyle; + context.fill(); + if (!goog.isNull(this.stroke_)) { + context.strokeStyle = strokeStyle; + context.lineWidth = strokeWidth; + context.stroke(); + } + } + + return size; +}; diff --git a/float-no-zero/ol/ol/style/fillstyle.exports b/float-no-zero/ol/ol/style/fillstyle.exports new file mode 100644 index 0000000000..81bb520fc8 --- /dev/null +++ b/float-no-zero/ol/ol/style/fillstyle.exports @@ -0,0 +1,2 @@ +@exportSymbol ol.style.Fill +@exportProperty ol.style.Fill.prototype.getColor diff --git a/float-no-zero/ol/ol/style/fillstyle.js b/float-no-zero/ol/ol/style/fillstyle.js new file mode 100644 index 0000000000..25f59b0be0 --- /dev/null +++ b/float-no-zero/ol/ol/style/fillstyle.js @@ -0,0 +1,28 @@ +goog.provide('ol.style.Fill'); + +goog.require('ol.color'); + + + +/** + * @constructor + * @param {olx.style.FillOptions=} opt_options Options. + */ +ol.style.Fill = function(opt_options) { + + var options = goog.isDef(opt_options) ? opt_options : {}; + + /** + * @private + * @type {ol.Color|string} + */ + this.color_ = goog.isDef(options.color) ? options.color : null; +}; + + +/** + * @return {ol.Color|string} Color. + */ +ol.style.Fill.prototype.getColor = function() { + return this.color_; +}; diff --git a/float-no-zero/ol/ol/style/iconstyle.exports b/float-no-zero/ol/ol/style/iconstyle.exports new file mode 100644 index 0000000000..5b7d6c6d77 --- /dev/null +++ b/float-no-zero/ol/ol/style/iconstyle.exports @@ -0,0 +1,5 @@ +@exportSymbol ol.style.Icon +@exportProperty ol.style.Icon.prototype.getAnchor +@exportProperty ol.style.Icon.prototype.getImage +@exportProperty ol.style.Icon.prototype.getSize +@exportProperty ol.style.Icon.prototype.getSrc diff --git a/float-no-zero/ol/ol/style/iconstyle.js b/float-no-zero/ol/ol/style/iconstyle.js new file mode 100644 index 0000000000..3fa3033849 --- /dev/null +++ b/float-no-zero/ol/ol/style/iconstyle.js @@ -0,0 +1,539 @@ +// FIXME decide default value for snapToPixel + +goog.provide('ol.style.Icon'); +goog.provide('ol.style.IconAnchorOrigin'); +goog.provide('ol.style.IconAnchorUnits'); +goog.provide('ol.style.IconImageCache'); + +goog.require('goog.array'); +goog.require('goog.asserts'); +goog.require('goog.dom'); +goog.require('goog.dom.TagName'); +goog.require('goog.events'); +goog.require('goog.events.EventTarget'); +goog.require('goog.events.EventType'); +goog.require('ol.style.Image'); +goog.require('ol.style.ImageState'); + + +/** + * @enum {string} + */ +ol.style.IconAnchorOrigin = { + BOTTOM_LEFT: 'bottom-left', + BOTTOM_RIGHT: 'bottom-right', + TOP_LEFT: 'top-left', + TOP_RIGHT: 'top-right' +}; + + +/** + * @enum {string} + */ +ol.style.IconAnchorUnits = { + FRACTION: 'fraction', + PIXELS: 'pixels' +}; + + + +/** + * @constructor + * @param {olx.style.IconOptions=} opt_options Options. + * @extends {ol.style.Image} + */ +ol.style.Icon = function(opt_options) { + + var options = goog.isDef(opt_options) ? opt_options : {}; + + /** + * @private + * @type {Array.} + */ + this.anchor_ = goog.isDef(options.anchor) ? options.anchor : [0.5, 0.5]; + + /** + * @private + * @type {ol.style.IconAnchorOrigin} + */ + this.anchorOrigin_ = goog.isDef(options.anchorOrigin) ? + options.anchorOrigin : ol.style.IconAnchorOrigin.TOP_LEFT; + + /** + * @private + * @type {ol.style.IconAnchorUnits} + */ + this.anchorXUnits_ = goog.isDef(options.anchorXUnits) ? + options.anchorXUnits : ol.style.IconAnchorUnits.FRACTION; + + /** + * @private + * @type {ol.style.IconAnchorUnits} + */ + this.anchorYUnits_ = goog.isDef(options.anchorYUnits) ? + options.anchorYUnits : ol.style.IconAnchorUnits.FRACTION; + + /** + * @type {?string} + */ + var crossOrigin = + goog.isDef(options.crossOrigin) ? options.crossOrigin : null; + + /** + * @private + * @type {ol.style.IconImage_} + */ + this.iconImage_ = ol.style.IconImage_.get(options.src, crossOrigin); + + /** + * @private + * @type {ol.Size} + */ + this.size_ = goog.isDef(options.size) ? options.size : null; + + /** + * @type {number} + */ + var opacity = goog.isDef(options.opacity) ? options.opacity : 1; + + /** + * @type {boolean} + */ + var rotateWithView = goog.isDef(options.rotateWithView) ? + options.rotateWithView : false; + + /** + * @type {number} + */ + var rotation = goog.isDef(options.rotation) ? options.rotation : 0; + + /** + * @type {number} + */ + var scale = goog.isDef(options.scale) ? options.scale : 1; + + goog.base(this, { + opacity: opacity, + rotation: rotation, + scale: scale, + snapToPixel: undefined, + rotateWithView: rotateWithView + }); + +}; +goog.inherits(ol.style.Icon, ol.style.Image); + + +/** + * @inheritDoc + */ +ol.style.Icon.prototype.getAnchor = function() { + var anchor = this.anchor_; + var size = this.getSize(); + if (this.anchorXUnits_ == ol.style.IconAnchorUnits.FRACTION || + this.anchorYUnits_ == ol.style.IconAnchorUnits.FRACTION) { + if (goog.isNull(size)) { + return null; + } + anchor = this.anchor_.slice(); + if (this.anchorXUnits_ == ol.style.IconAnchorUnits.FRACTION) { + anchor[0] *= size[0]; + } + if (this.anchorYUnits_ == ol.style.IconAnchorUnits.FRACTION) { + anchor[1] *= size[1]; + } + } + + if (this.anchorOrigin_ != ol.style.IconAnchorOrigin.TOP_LEFT) { + if (goog.isNull(size)) { + return null; + } + if (anchor === this.anchor_) { + anchor = this.anchor_.slice(); + } + if (this.anchorOrigin_ == ol.style.IconAnchorOrigin.TOP_RIGHT || + this.anchorOrigin_ == ol.style.IconAnchorOrigin.BOTTOM_RIGHT) { + anchor[0] = -anchor[0] + size[0]; + } + if (this.anchorOrigin_ == ol.style.IconAnchorOrigin.BOTTOM_LEFT || + this.anchorOrigin_ == ol.style.IconAnchorOrigin.BOTTOM_RIGHT) { + anchor[1] += size[1]; + } + } + return anchor; +}; + + +/** + * @inheritDoc + */ +ol.style.Icon.prototype.getImage = function(pixelRatio) { + return this.iconImage_.getImage(pixelRatio); +}; + + +/** + * @inheritDoc + */ +ol.style.Icon.prototype.getImageState = function() { + return this.iconImage_.getImageState(); +}; + + +/** + * @inheritDoc + */ +ol.style.Icon.prototype.getHitDetectionImage = function(pixelRatio) { + return this.iconImage_.getHitDetectionImage(pixelRatio); +}; + + +/** + * @return {string|undefined} Image src. + */ +ol.style.Icon.prototype.getSrc = function() { + return this.iconImage_.getSrc(); +}; + + +/** + * @inheritDoc + */ +ol.style.Icon.prototype.getSize = function() { + return goog.isNull(this.size_) ? this.iconImage_.getSize() : this.size_; +}; + + +/** + * @inheritDoc + */ +ol.style.Icon.prototype.listenImageChange = function(listener, thisArg) { + return goog.events.listen(this.iconImage_, goog.events.EventType.CHANGE, + listener, false, thisArg); +}; + + +/** + * Load not yet loaded URI. + */ +ol.style.Icon.prototype.load = function() { + this.iconImage_.load(); +}; + + +/** + * @inheritDoc + */ +ol.style.Icon.prototype.unlistenImageChange = function(listener, thisArg) { + goog.events.unlisten(this.iconImage_, goog.events.EventType.CHANGE, + listener, false, thisArg); +}; + + + +/** + * @constructor + * @param {string} src Src. + * @param {?string} crossOrigin Cross origin. + * @extends {goog.events.EventTarget} + * @private + */ +ol.style.IconImage_ = function(src, crossOrigin) { + + goog.base(this); + + /** + * @private + * @type {Image|HTMLCanvasElement} + */ + this.hitDetectionImage_ = null; + + /** + * @private + * @type {Image} + */ + this.image_ = new Image(); + + if (!goog.isNull(crossOrigin)) { + this.image_.crossOrigin = crossOrigin; + } + + /** + * @private + * @type {Array.} + */ + this.imageListenerKeys_ = null; + + /** + * @private + * @type {ol.style.ImageState} + */ + this.imageState_ = ol.style.ImageState.IDLE; + + /** + * @private + * @type {ol.Size} + */ + this.size_ = null; + + /** + * @private + * @type {string} + */ + this.src_ = src; + + /** + * @private + * @type {boolean} + */ + this.tainting_ = false; + +}; +goog.inherits(ol.style.IconImage_, goog.events.EventTarget); + + +/** + * @param {string} src Src. + * @param {?string} crossOrigin Cross origin. + * @return {ol.style.IconImage_} Icon image. + */ +ol.style.IconImage_.get = function(src, crossOrigin) { + var iconImageCache = ol.style.IconImageCache.getInstance(); + var iconImage = iconImageCache.get(src, crossOrigin); + if (goog.isNull(iconImage)) { + iconImage = new ol.style.IconImage_(src, crossOrigin); + iconImageCache.set(src, crossOrigin, iconImage); + } + return iconImage; +}; + + +/** + * @private + */ +ol.style.IconImage_.prototype.determineTainting_ = function() { + var canvas = /** @type {HTMLCanvasElement} */ + (goog.dom.createElement(goog.dom.TagName.CANVAS)); + canvas.width = 1; + canvas.height = 1; + var context = /** @type {CanvasRenderingContext2D} */ + (canvas.getContext('2d')); + context.drawImage(this.image_, 0, 0); + try { + context.getImageData(0, 0, 1, 1); + } catch (e) { + this.tainting_ = true; + } +}; + + +/** + * @private + */ +ol.style.IconImage_.prototype.dispatchChangeEvent_ = function() { + this.dispatchEvent(goog.events.EventType.CHANGE); +}; + + +/** + * @private + */ +ol.style.IconImage_.prototype.handleImageError_ = function() { + this.imageState_ = ol.style.ImageState.ERROR; + this.unlistenImage_(); + this.dispatchChangeEvent_(); +}; + + +/** + * @private + */ +ol.style.IconImage_.prototype.handleImageLoad_ = function() { + this.imageState_ = ol.style.ImageState.LOADED; + this.size_ = [this.image_.width, this.image_.height]; + this.unlistenImage_(); + this.determineTainting_(); + this.dispatchChangeEvent_(); +}; + + +/** + * @param {number} pixelRatio Pixel ratio. + * @return {Image} Image element. + */ +ol.style.IconImage_.prototype.getImage = function(pixelRatio) { + return this.image_; +}; + + +/** + * @return {ol.style.ImageState} Image state. + */ +ol.style.IconImage_.prototype.getImageState = function() { + return this.imageState_; +}; + + +/** + * @param {number} pixelRatio Pixel ratio. + * @return {Image|HTMLCanvasElement} Image element. + */ +ol.style.IconImage_.prototype.getHitDetectionImage = function(pixelRatio) { + if (goog.isNull(this.hitDetectionImage_)) { + if (this.tainting_) { + var canvas = /** @type {HTMLCanvasElement} */ + (goog.dom.createElement(goog.dom.TagName.CANVAS)); + var width = this.size_[0]; + var height = this.size_[1]; + canvas.width = width; + canvas.height = height; + var context = /** @type {CanvasRenderingContext2D} */ + (canvas.getContext('2d')); + context.fillRect(0, 0, width, height); + this.hitDetectionImage_ = canvas; + } else { + this.hitDetectionImage_ = this.image_; + } + } + return this.hitDetectionImage_; +}; + + +/** + * @return {ol.Size} Image size. + */ +ol.style.IconImage_.prototype.getSize = function() { + return this.size_; +}; + + +/** + * @return {string|undefined} Image src. + */ +ol.style.IconImage_.prototype.getSrc = function() { + return this.src_; +}; + + +/** + * Load not yet loaded URI. + */ +ol.style.IconImage_.prototype.load = function() { + if (this.imageState_ == ol.style.ImageState.IDLE) { + goog.asserts.assert(goog.isDef(this.src_)); + goog.asserts.assert(goog.isNull(this.imageListenerKeys_)); + this.imageState_ = ol.style.ImageState.LOADING; + this.imageListenerKeys_ = [ + goog.events.listenOnce(this.image_, goog.events.EventType.ERROR, + this.handleImageError_, false, this), + goog.events.listenOnce(this.image_, goog.events.EventType.LOAD, + this.handleImageLoad_, false, this) + ]; + try { + this.image_.src = this.src_; + } catch (e) { + this.handleImageError_(); + } + } +}; + + +/** + * Discards event handlers which listen for load completion or errors. + * + * @private + */ +ol.style.IconImage_.prototype.unlistenImage_ = function() { + goog.asserts.assert(!goog.isNull(this.imageListenerKeys_)); + goog.array.forEach(this.imageListenerKeys_, goog.events.unlistenByKey); + this.imageListenerKeys_ = null; +}; + + + +/** + * @constructor + */ +ol.style.IconImageCache = function() { + + /** + * @type {Object.} + * @private + */ + this.cache_ = {}; + + /** + * @type {number} + * @private + */ + this.cacheSize_ = 0; + + /** + * @const + * @type {number} + * @private + */ + this.maxCacheSize_ = 32; +}; +goog.addSingletonGetter(ol.style.IconImageCache); + + +/** + * @param {string} src Src. + * @param {?string} crossOrigin Cross origin. + * @return {string} Cache key. + */ +ol.style.IconImageCache.getKey = function(src, crossOrigin) { + goog.asserts.assert(goog.isDef(crossOrigin)); + return crossOrigin + ':' + src; +}; + + +/** + * FIXME empty description for jsdoc + */ +ol.style.IconImageCache.prototype.clear = function() { + this.cache_ = {}; + this.cacheSize_ = 0; +}; + + +/** + * FIXME empty description for jsdoc + */ +ol.style.IconImageCache.prototype.expire = function() { + if (this.cacheSize_ > this.maxCacheSize_) { + var i = 0; + var key, iconImage; + for (key in this.cache_) { + iconImage = this.cache_[key]; + if ((i++ & 3) === 0 && !goog.events.hasListener(iconImage)) { + delete this.cache_[key]; + --this.cacheSize_; + } + } + } +}; + + +/** + * @param {string} src Src. + * @param {?string} crossOrigin Cross origin. + * @return {ol.style.IconImage_} Icon image. + */ +ol.style.IconImageCache.prototype.get = function(src, crossOrigin) { + var key = ol.style.IconImageCache.getKey(src, crossOrigin); + return key in this.cache_ ? this.cache_[key] : null; +}; + + +/** + * @param {string} src Src. + * @param {?string} crossOrigin Cross origin. + * @param {ol.style.IconImage_} iconImage Icon image. + */ +ol.style.IconImageCache.prototype.set = function(src, crossOrigin, iconImage) { + var key = ol.style.IconImageCache.getKey(src, crossOrigin); + this.cache_[key] = iconImage; + ++this.cacheSize_; +}; diff --git a/float-no-zero/ol/ol/style/imagestyle.exports b/float-no-zero/ol/ol/style/imagestyle.exports new file mode 100644 index 0000000000..67498d3ed8 --- /dev/null +++ b/float-no-zero/ol/ol/style/imagestyle.exports @@ -0,0 +1,3 @@ +@exportSymbol ol.style.Image +@exportProperty ol.style.Image.prototype.getRotation +@exportProperty ol.style.Image.prototype.getScale diff --git a/float-no-zero/ol/ol/style/imagestyle.js b/float-no-zero/ol/ol/style/imagestyle.js new file mode 100644 index 0000000000..9b0411a22f --- /dev/null +++ b/float-no-zero/ol/ol/style/imagestyle.js @@ -0,0 +1,160 @@ +goog.provide('ol.style.Image'); +goog.provide('ol.style.ImageState'); + +goog.require('goog.array'); + + +/** + * @enum {number} + */ +ol.style.ImageState = { + IDLE: 0, + LOADING: 1, + LOADED: 2, + ERROR: 3 +}; + + +/** + * @typedef {{opacity: number, + * rotateWithView: boolean, + * rotation: number, + * scale: number, + * snapToPixel: (boolean|undefined)}} + */ +ol.style.ImageOptions; + + + +/** + * @constructor + * @param {ol.style.ImageOptions} options Options. + */ +ol.style.Image = function(options) { + + /** + * @private + * @type {number} + */ + this.opacity_ = options.opacity; + + /** + * @private + * @type {boolean} + */ + this.rotateWithView_ = options.rotateWithView; + + /** + * @private + * @type {number} + */ + this.rotation_ = options.rotation; + + /** + * @private + * @type {number} + */ + this.scale_ = options.scale; + + /** + * @private + * @type {boolean|undefined} + */ + this.snapToPixel_ = options.snapToPixel; + +}; + + +/** + * @return {number} Opacity. + */ +ol.style.Image.prototype.getOpacity = function() { + return this.opacity_; +}; + + +/** + * @return {boolean} Rotate with map. + */ +ol.style.Image.prototype.getRotateWithView = function() { + return this.rotateWithView_; +}; + + +/** + * @return {number} Rotation. + */ +ol.style.Image.prototype.getRotation = function() { + return this.rotation_; +}; + + +/** + * @return {number} Scale. + */ +ol.style.Image.prototype.getScale = function() { + return this.scale_; +}; + + +/** + * @return {boolean|undefined} Snap to pixel? + */ +ol.style.Image.prototype.getSnapToPixel = function() { + return this.snapToPixel_; +}; + + +/** + * @return {Array.} Anchor. + */ +ol.style.Image.prototype.getAnchor = goog.abstractMethod; + + +/** + * @param {number} pixelRatio Pixel ratio. + * @return {HTMLCanvasElement|HTMLVideoElement|Image} Image element. + */ +ol.style.Image.prototype.getImage = goog.abstractMethod; + + +/** + * @return {ol.style.ImageState} Image state. + */ +ol.style.Image.prototype.getImageState = goog.abstractMethod; + + +/** + * @param {number} pixelRatio Pixel ratio. + * @return {HTMLCanvasElement|HTMLVideoElement|Image} Image element. + */ +ol.style.Image.prototype.getHitDetectionImage = goog.abstractMethod; + + +/** + * @return {ol.Size} Size. + */ +ol.style.Image.prototype.getSize = goog.abstractMethod; + + +/** + * @param {function(this: T, goog.events.Event)} listener Listener function. + * @param {T} thisArg Value to use as `this` when executing `listener`. + * @return {goog.events.Key|undefined} Listener key. + * @template T + */ +ol.style.Image.prototype.listenImageChange = goog.abstractMethod; + + +/** + * Load not yet loaded URI. + */ +ol.style.Image.prototype.load = goog.abstractMethod; + + +/** + * @param {function(this: T, goog.events.Event)} listener Listener function. + * @param {T} thisArg Value to use as `this` when executing `listener`. + * @template T + */ +ol.style.Image.prototype.unlistenImageChange = goog.abstractMethod; diff --git a/float-no-zero/ol/ol/style/strokestyle.exports b/float-no-zero/ol/ol/style/strokestyle.exports new file mode 100644 index 0000000000..3e2060e9d8 --- /dev/null +++ b/float-no-zero/ol/ol/style/strokestyle.exports @@ -0,0 +1,7 @@ +@exportSymbol ol.style.Stroke +@exportProperty ol.style.Stroke.prototype.getColor +@exportProperty ol.style.Stroke.prototype.getLineCap +@exportProperty ol.style.Stroke.prototype.getLineDash +@exportProperty ol.style.Stroke.prototype.getLineJoin +@exportProperty ol.style.Stroke.prototype.getMiterLimit +@exportProperty ol.style.Stroke.prototype.getWidth diff --git a/float-no-zero/ol/ol/style/strokestyle.js b/float-no-zero/ol/ol/style/strokestyle.js new file mode 100644 index 0000000000..08bbeab522 --- /dev/null +++ b/float-no-zero/ol/ol/style/strokestyle.js @@ -0,0 +1,98 @@ +goog.provide('ol.style.Stroke'); + +goog.require('ol.color'); + + + +/** + * @constructor + * @param {olx.style.StrokeOptions=} opt_options Options. + */ +ol.style.Stroke = function(opt_options) { + + var options = goog.isDef(opt_options) ? opt_options : {}; + + /** + * @private + * @type {ol.Color|string} + */ + this.color_ = goog.isDef(options.color) ? options.color : null; + + /** + * @private + * @type {string|undefined} + */ + this.lineCap_ = options.lineCap; + + /** + * @private + * @type {Array.} + */ + this.lineDash_ = goog.isDef(options.lineDash) ? options.lineDash : null; + + /** + * @private + * @type {string|undefined} + */ + this.lineJoin_ = options.lineJoin; + + /** + * @private + * @type {number|undefined} + */ + this.miterLimit_ = options.miterLimit; + + /** + * @private + * @type {number|undefined} + */ + this.width_ = options.width; +}; + + +/** + * @return {ol.Color|string} Color. + */ +ol.style.Stroke.prototype.getColor = function() { + return this.color_; +}; + + +/** + * @return {string|undefined} Line cap. + */ +ol.style.Stroke.prototype.getLineCap = function() { + return this.lineCap_; +}; + + +/** + * @return {Array.} Line dash. + */ +ol.style.Stroke.prototype.getLineDash = function() { + return this.lineDash_; +}; + + +/** + * @return {string|undefined} Line join. + */ +ol.style.Stroke.prototype.getLineJoin = function() { + return this.lineJoin_; +}; + + +/** + * @return {number|undefined} Miter limit. + */ +ol.style.Stroke.prototype.getMiterLimit = function() { + return this.miterLimit_; +}; + + +/** + * @return {number|undefined} Width. + */ +ol.style.Stroke.prototype.getWidth = function() { + return this.width_; +}; diff --git a/float-no-zero/ol/ol/style/style.exports b/float-no-zero/ol/ol/style/style.exports new file mode 100644 index 0000000000..94767397d0 --- /dev/null +++ b/float-no-zero/ol/ol/style/style.exports @@ -0,0 +1,6 @@ +@exportSymbol ol.style.Style +@exportProperty ol.style.Style.prototype.getFill +@exportProperty ol.style.Style.prototype.getImage +@exportProperty ol.style.Style.prototype.getStroke +@exportProperty ol.style.Style.prototype.getText +@exportProperty ol.style.Style.prototype.getZIndex diff --git a/float-no-zero/ol/ol/style/style.js b/float-no-zero/ol/ol/style/style.js new file mode 100644 index 0000000000..2016ee3f54 --- /dev/null +++ b/float-no-zero/ol/ol/style/style.js @@ -0,0 +1,87 @@ +goog.provide('ol.style.Style'); + +goog.require('ol.style.Fill'); +goog.require('ol.style.Image'); + + + +/** + * @constructor + * @param {olx.style.StyleOptions=} opt_options Style options. + * @todo stability experimental + */ +ol.style.Style = function(opt_options) { + + var options = goog.isDef(opt_options) ? opt_options : {}; + + /** + * @private + * @type {ol.style.Fill} + */ + this.fill_ = goog.isDef(options.fill) ? options.fill : null; + + /** + * @private + * @type {ol.style.Image} + */ + this.image_ = goog.isDef(options.image) ? options.image : null; + + /** + * @private + * @type {ol.style.Stroke} + */ + this.stroke_ = goog.isDef(options.stroke) ? options.stroke : null; + + /** + * @private + * @type {ol.style.Text} + */ + this.text_ = goog.isDef(options.text) ? options.text : null; + + /** + * @private + * @type {number|undefined} + */ + this.zIndex_ = options.zIndex; + +}; + + +/** + * @return {ol.style.Fill} Fill style. + */ +ol.style.Style.prototype.getFill = function() { + return this.fill_; +}; + + +/** + * @return {ol.style.Image} Image style. + */ +ol.style.Style.prototype.getImage = function() { + return this.image_; +}; + + +/** + * @return {ol.style.Stroke} Stroke style. + */ +ol.style.Style.prototype.getStroke = function() { + return this.stroke_; +}; + + +/** + * @return {ol.style.Text} Text style. + */ +ol.style.Style.prototype.getText = function() { + return this.text_; +}; + + +/** + * @return {number|undefined} ZIndex. + */ +ol.style.Style.prototype.getZIndex = function() { + return this.zIndex_; +}; diff --git a/float-no-zero/ol/ol/style/textstyle.exports b/float-no-zero/ol/ol/style/textstyle.exports new file mode 100644 index 0000000000..2dc53b5f5d --- /dev/null +++ b/float-no-zero/ol/ol/style/textstyle.exports @@ -0,0 +1,9 @@ +@exportSymbol ol.style.Text +@exportProperty ol.style.Text.prototype.getFill +@exportProperty ol.style.Text.prototype.getFont +@exportProperty ol.style.Text.prototype.getRotation +@exportProperty ol.style.Text.prototype.getScale +@exportProperty ol.style.Text.prototype.getStroke +@exportProperty ol.style.Text.prototype.getText +@exportProperty ol.style.Text.prototype.getTextAlign +@exportProperty ol.style.Text.prototype.getTextBaseline diff --git a/float-no-zero/ol/ol/style/textstyle.js b/float-no-zero/ol/ol/style/textstyle.js new file mode 100644 index 0000000000..d6b2cecbd1 --- /dev/null +++ b/float-no-zero/ol/ol/style/textstyle.js @@ -0,0 +1,124 @@ +goog.provide('ol.style.Text'); + + + +/** + * @constructor + * @param {olx.style.TextOptions=} opt_options Options. + */ +ol.style.Text = function(opt_options) { + + var options = goog.isDef(opt_options) ? opt_options : {}; + + /** + * @private + * @type {string|undefined} + */ + this.font_ = options.font; + + /** + * @private + * @type {number|undefined} + */ + this.rotation_ = options.rotation; + + /** + * @private + * @type {number|undefined} + */ + this.scale_ = options.scale; + + /** + * @private + * @type {string|undefined} + */ + this.text_ = options.text; + + /** + * @private + * @type {string|undefined} + */ + this.textAlign_ = options.textAlign; + + /** + * @private + * @type {string|undefined} + */ + this.textBaseline_ = options.textBaseline; + + /** + * @private + * @type {ol.style.Fill} + */ + this.fill_ = goog.isDef(options.fill) ? options.fill : null; + + /** + * @private + * @type {ol.style.Stroke} + */ + this.stroke_ = goog.isDef(options.stroke) ? options.stroke : null; +}; + + +/** + * @return {string|undefined} Font. + */ +ol.style.Text.prototype.getFont = function() { + return this.font_; +}; + + +/** + * @return {ol.style.Fill} Fill style. + */ +ol.style.Text.prototype.getFill = function() { + return this.fill_; +}; + + +/** + * @return {number|undefined} Rotation. + */ +ol.style.Text.prototype.getRotation = function() { + return this.rotation_; +}; + + +/** + * @return {number|undefined} Scale. + */ +ol.style.Text.prototype.getScale = function() { + return this.scale_; +}; + + +/** + * @return {ol.style.Stroke} Stroke style. + */ +ol.style.Text.prototype.getStroke = function() { + return this.stroke_; +}; + + +/** + * @return {string|undefined} Text. + */ +ol.style.Text.prototype.getText = function() { + return this.text_; +}; + + +/** + * @return {string|undefined} Text align. + */ +ol.style.Text.prototype.getTextAlign = function() { + return this.textAlign_; +}; + + +/** + * @return {string|undefined} Text baseline. + */ +ol.style.Text.prototype.getTextBaseline = function() { + return this.textBaseline_; +}; diff --git a/float-no-zero/ol/ol/tile.exports b/float-no-zero/ol/ol/tile.exports new file mode 100644 index 0000000000..33b1b0fdc8 --- /dev/null +++ b/float-no-zero/ol/ol/tile.exports @@ -0,0 +1 @@ +@exportProperty ol.Tile.prototype.getTileCoord diff --git a/float-no-zero/ol/ol/tile.js b/float-no-zero/ol/ol/tile.js new file mode 100644 index 0000000000..610150083e --- /dev/null +++ b/float-no-zero/ol/ol/tile.js @@ -0,0 +1,93 @@ +// FIXME should inQueue be private? + +goog.provide('ol.Tile'); +goog.provide('ol.TileState'); + +goog.require('goog.events'); +goog.require('goog.events.EventTarget'); +goog.require('goog.events.EventType'); +goog.require('ol.TileCoord'); + + +/** + * @enum {number} + */ +ol.TileState = { + IDLE: 0, + LOADING: 1, + LOADED: 2, + ERROR: 3, + EMPTY: 4 +}; + + + +/** + * @constructor + * @extends {goog.events.EventTarget} + * @param {ol.TileCoord} tileCoord Tile coordinate. + * @param {ol.TileState} state State. + */ +ol.Tile = function(tileCoord, state) { + + goog.base(this); + + /** + * @type {ol.TileCoord} + */ + this.tileCoord = tileCoord; + + /** + * @protected + * @type {ol.TileState} + */ + this.state = state; + +}; +goog.inherits(ol.Tile, goog.events.EventTarget); + + +/** + * @protected + */ +ol.Tile.prototype.dispatchChangeEvent = function() { + this.dispatchEvent(goog.events.EventType.CHANGE); +}; + + +/** + * @param {Object=} opt_context Object. + * @return {HTMLCanvasElement|HTMLImageElement|HTMLVideoElement} Image. + */ +ol.Tile.prototype.getImage = goog.abstractMethod; + + +/** + * @return {string} Key. + */ +ol.Tile.prototype.getKey = function() { + return goog.getUid(this).toString(); +}; + + +/** + * @return {ol.TileCoord} + * @todo stability experimental + */ +ol.Tile.prototype.getTileCoord = function() { + return this.tileCoord; +}; + + +/** + * @return {ol.TileState} State. + */ +ol.Tile.prototype.getState = function() { + return this.state; +}; + + +/** + * FIXME empty description for jsdoc + */ +ol.Tile.prototype.load = goog.abstractMethod; diff --git a/float-no-zero/ol/ol/tilecache.js b/float-no-zero/ol/ol/tilecache.js new file mode 100644 index 0000000000..643ed75ce9 --- /dev/null +++ b/float-no-zero/ol/ol/tilecache.js @@ -0,0 +1,78 @@ +goog.provide('ol.TileCache'); + +goog.require('goog.asserts'); +goog.require('ol.Tile'); +goog.require('ol.TileCoord'); +goog.require('ol.TileRange'); +goog.require('ol.structs.LRUCache'); + + +/** + * @define {number} Default high water mark. + */ +ol.DEFAULT_TILE_CACHE_HIGH_WATER_MARK = 2048; + + + +/** + * @constructor + * @extends {ol.structs.LRUCache.} + * @param {number=} opt_highWaterMark High water mark. + * @struct + */ +ol.TileCache = function(opt_highWaterMark) { + + goog.base(this); + + /** + * @private + * @type {number} + */ + this.highWaterMark_ = goog.isDef(opt_highWaterMark) ? + opt_highWaterMark : ol.DEFAULT_TILE_CACHE_HIGH_WATER_MARK; + +}; +goog.inherits(ol.TileCache, ol.structs.LRUCache); + + +/** + * @return {boolean} Can expire cache. + */ +ol.TileCache.prototype.canExpireCache = function() { + return this.getCount() > this.highWaterMark_; +}; + + +/** + * @param {Object.} usedTiles Used tiles. + */ +ol.TileCache.prototype.expireCache = function(usedTiles) { + var tile, zKey; + while (this.canExpireCache()) { + tile = /** @type {ol.Tile} */ (this.peekLast()); + zKey = tile.tileCoord.z.toString(); + if (zKey in usedTiles && usedTiles[zKey].contains(tile.tileCoord)) { + break; + } else { + this.pop(); + } + } +}; + + +/** + * Remove a tile range from the cache, e.g. to invalidate tiles. + * @param {ol.TileRange} tileRange The tile range to prune. + */ +ol.TileCache.prototype.pruneTileRange = function(tileRange) { + var i = this.getCount(), + key; + while (i--) { + key = this.peekLastKey(); + if (tileRange.contains(ol.TileCoord.createFromString(key))) { + this.pop(); + } else { + this.get(key); + } + } +}; diff --git a/float-no-zero/ol/ol/tilecoord.exports b/float-no-zero/ol/ol/tilecoord.exports new file mode 100644 index 0000000000..1719d37b9b --- /dev/null +++ b/float-no-zero/ol/ol/tilecoord.exports @@ -0,0 +1 @@ +@exportProperty ol.TileCoord.prototype.getZXY diff --git a/float-no-zero/ol/ol/tilecoord.js b/float-no-zero/ol/ol/tilecoord.js new file mode 100644 index 0000000000..013cc5af2c --- /dev/null +++ b/float-no-zero/ol/ol/tilecoord.js @@ -0,0 +1,170 @@ +goog.provide('ol.TileCoord'); + +goog.require('goog.array'); +goog.require('goog.asserts'); + + +/** + * @enum {number} + */ +ol.QuadKeyCharCode = { + ZERO: '0'.charCodeAt(0), + ONE: '1'.charCodeAt(0), + TWO: '2'.charCodeAt(0), + THREE: '3'.charCodeAt(0) +}; + + + +/** + * @constructor + * @param {number} z Zoom level. + * @param {number} x X. + * @param {number} y Y. + * @struct + */ +ol.TileCoord = function(z, x, y) { + + /** + * Zoom level. + * @type {number} + */ + this.z = z; + + /** + * @type {number} + */ + this.x = x; + + /** + * @type {number} + */ + this.y = y; + +}; + + +/** + * @param {string} quadKey Quad key. + * @return {ol.TileCoord} Tile coordinate. + */ +ol.TileCoord.createFromQuadKey = function(quadKey) { + var z = quadKey.length, x = 0, y = 0; + var mask = 1 << (z - 1); + var i; + for (i = 0; i < z; ++i) { + switch (quadKey.charCodeAt(i)) { + case ol.QuadKeyCharCode.ONE: + x += mask; + break; + case ol.QuadKeyCharCode.TWO: + y += mask; + break; + case ol.QuadKeyCharCode.THREE: + x += mask; + y += mask; + break; + } + mask >>= 1; + } + return new ol.TileCoord(z, x, y); +}; + + +/** + * @param {string} str String that follows pattern “z/x/y” where x, y and z are + * numbers. + * @return {ol.TileCoord} Tile coord. + */ +ol.TileCoord.createFromString = function(str) { + var v = str.split('/'); + v = goog.array.map(v, function(e, i, a) { + return parseInt(e, 10); + }); + return new ol.TileCoord(v[0], v[1], v[2]); +}; + + +/** + * @param {number} z Z. + * @param {number} x X. + * @param {number} y Y. + * @param {ol.TileCoord|undefined} tileCoord Tile coordinate. + * @return {ol.TileCoord} Tile coordinate. + */ +ol.TileCoord.createOrUpdate = function(z, x, y, tileCoord) { + if (goog.isDef(tileCoord)) { + tileCoord.z = z; + tileCoord.x = x; + tileCoord.y = y; + return tileCoord; + } else { + return new ol.TileCoord(z, x, y); + } +}; + + +/** + * @param {number} z Z. + * @param {number} x X. + * @param {number} y Y. + * @return {string} Key. + */ +ol.TileCoord.getKeyZXY = function(z, x, y) { + return z + '/' + x + '/' + y; +}; + + +/** + * @param {Array.=} opt_result Optional array to reuse. + * @return {Array.} Array of z, x, y. + */ +ol.TileCoord.prototype.getZXY = function(opt_result) { + if (goog.isDef(opt_result)) { + goog.asserts.assert(opt_result.length == 3); + opt_result[0] = this.z; + opt_result[1] = this.x; + opt_result[2] = this.y; + return opt_result; + } else { + return [this.z, this.x, this.y]; + } +}; + + +/** + * @return {number} Hash. + */ +ol.TileCoord.prototype.hash = function() { + return (this.x << this.z) + this.y; +}; + + +/** + * @return {string} Quad key. + */ +ol.TileCoord.prototype.quadKey = function() { + var digits = new Array(this.z); + var mask = 1 << (this.z - 1); + var i, charCode; + for (i = 0; i < this.z; ++i) { + charCode = ol.QuadKeyCharCode.ZERO; + if (this.x & mask) { + charCode += 1; + } + if (this.y & mask) { + charCode += 2; + } + digits[i] = String.fromCharCode(charCode); + mask >>= 1; + } + return digits.join(''); +}; + + +/** + * @return {string} String. + */ +ol.TileCoord.prototype.toString = function() { + return ol.TileCoord.getKeyZXY(this.z, this.x, this.y); +}; diff --git a/float-no-zero/ol/ol/tilegrid.jsdoc b/float-no-zero/ol/ol/tilegrid.jsdoc new file mode 100644 index 0000000000..5f6ed64aaa --- /dev/null +++ b/float-no-zero/ol/ol/tilegrid.jsdoc @@ -0,0 +1,3 @@ +/** + * @namespace ol.tilegrid + */ diff --git a/float-no-zero/ol/ol/tilegrid/tilegrid.exports b/float-no-zero/ol/ol/tilegrid/tilegrid.exports new file mode 100644 index 0000000000..5e1039d79f --- /dev/null +++ b/float-no-zero/ol/ol/tilegrid/tilegrid.exports @@ -0,0 +1,5 @@ +@exportSymbol ol.tilegrid.TileGrid +@exportProperty ol.tilegrid.TileGrid.prototype.getMinZoom +@exportProperty ol.tilegrid.TileGrid.prototype.getOrigin +@exportProperty ol.tilegrid.TileGrid.prototype.getResolutions +@exportProperty ol.tilegrid.TileGrid.prototype.getTileSize diff --git a/float-no-zero/ol/ol/tilegrid/tilegrid.js b/float-no-zero/ol/ol/tilegrid/tilegrid.js new file mode 100644 index 0000000000..ac547c42b3 --- /dev/null +++ b/float-no-zero/ol/ol/tilegrid/tilegrid.js @@ -0,0 +1,439 @@ +goog.provide('ol.tilegrid.TileGrid'); + +goog.require('goog.array'); +goog.require('goog.asserts'); +goog.require('ol.Coordinate'); +goog.require('ol.TileCoord'); +goog.require('ol.TileRange'); +goog.require('ol.array'); +goog.require('ol.extent'); +goog.require('ol.proj.METERS_PER_UNIT'); +goog.require('ol.proj.Projection'); +goog.require('ol.proj.Units'); + + +/** + * @define {number} Default tile size. + */ +ol.DEFAULT_TILE_SIZE = 256; + + +/** + * @define {number} Default maximum zoom for default tile grids. + */ +ol.DEFAULT_MAX_ZOOM = 42; + + + +/** + * @constructor + * @param {olx.tilegrid.TileGridOptions} options Tile grid options. + * @struct + * @todo stability experimental + */ +ol.tilegrid.TileGrid = function(options) { + + /** + * @protected + * @type {number} + */ + this.minZoom = goog.isDef(options.minZoom) ? options.minZoom : 0; + + /** + * @private + * @type {!Array.} + */ + this.resolutions_ = options.resolutions; + goog.asserts.assert(goog.array.isSorted(this.resolutions_, function(a, b) { + return b - a; + }, true)); + + /** + * @protected + * @type {number} + */ + this.maxZoom = this.resolutions_.length - 1; + + /** + * @private + * @type {ol.Coordinate} + */ + this.origin_ = goog.isDef(options.origin) ? options.origin : null; + + /** + * @private + * @type {Array.} + */ + this.origins_ = null; + if (goog.isDef(options.origins)) { + this.origins_ = options.origins; + goog.asserts.assert(this.origins_.length == this.maxZoom + 1); + } + goog.asserts.assert( + (goog.isNull(this.origin_) && !goog.isNull(this.origins_)) || + (!goog.isNull(this.origin_) && goog.isNull(this.origins_))); + + /** + * @private + * @type {Array.} + */ + this.tileSizes_ = null; + if (goog.isDef(options.tileSizes)) { + this.tileSizes_ = options.tileSizes; + goog.asserts.assert(this.tileSizes_.length == this.maxZoom + 1); + } + + /** + * @private + * @type {number|undefined} + */ + this.tileSize_ = goog.isDef(options.tileSize) ? + options.tileSize : + goog.isNull(this.tileSizes_) ? ol.DEFAULT_TILE_SIZE : undefined; + goog.asserts.assert( + (!goog.isDef(this.tileSize_) && !goog.isNull(this.tileSizes_)) || + (goog.isDef(this.tileSize_) && goog.isNull(this.tileSizes_))); + +}; + + +/** + * @private + * @type {ol.TileCoord} + */ +ol.tilegrid.TileGrid.tmpTileCoord_ = new ol.TileCoord(0, 0, 0); + + +/** + * @param {{extent: (ol.Extent|undefined), + * wrapX: (boolean|undefined)}=} opt_options Options. + * @return {function(ol.TileCoord, ol.proj.Projection, ol.TileCoord=): + * ol.TileCoord} Tile coordinate transform. + */ +ol.tilegrid.TileGrid.prototype.createTileCoordTransform = goog.abstractMethod; + + +/** + * @param {ol.TileCoord} tileCoord Tile coordinate. + * @param {function(this: T, number, ol.TileRange): boolean} callback Callback. + * @param {T=} opt_this The object to use as `this` in `callback`. + * @param {ol.TileRange=} opt_tileRange Temporary ol.TileRange object. + * @param {ol.Extent=} opt_extent Temporary ol.Extent object. + * @return {boolean} Callback succeeded. + * @template T + */ +ol.tilegrid.TileGrid.prototype.forEachTileCoordParentTileRange = + function(tileCoord, callback, opt_this, opt_tileRange, opt_extent) { + var tileCoordExtent = this.getTileCoordExtent(tileCoord, opt_extent); + var z = tileCoord.z - 1; + while (z >= this.minZoom) { + if (callback.call(opt_this, z, + this.getTileRangeForExtentAndZ(tileCoordExtent, z, opt_tileRange))) { + return true; + } + --z; + } + return false; +}; + + +/** + * @return {number} Max zoom. + * @todo stability experimental + */ +ol.tilegrid.TileGrid.prototype.getMaxZoom = function() { + return this.maxZoom; +}; + + +/** + * @return {number} Min zoom. + * @todo stability experimental + */ +ol.tilegrid.TileGrid.prototype.getMinZoom = function() { + return this.minZoom; +}; + + +/** + * @param {number} z Z. + * @return {ol.Coordinate} Origin. + * @todo stability experimental + */ +ol.tilegrid.TileGrid.prototype.getOrigin = function(z) { + if (!goog.isNull(this.origin_)) { + return this.origin_; + } else { + goog.asserts.assert(!goog.isNull(this.origins_)); + goog.asserts.assert(this.minZoom <= z && z <= this.maxZoom); + return this.origins_[z]; + } +}; + + +/** + * @param {number} z Z. + * @return {number} Resolution. + */ +ol.tilegrid.TileGrid.prototype.getResolution = function(z) { + goog.asserts.assert(this.minZoom <= z && z <= this.maxZoom); + return this.resolutions_[z]; +}; + + +/** + * @return {Array.} Resolutions. + * @todo stability experimental + */ +ol.tilegrid.TileGrid.prototype.getResolutions = function() { + return this.resolutions_; +}; + + +/** + * @param {ol.TileCoord} tileCoord Tile coordinate. + * @param {ol.TileRange=} opt_tileRange Temporary ol.TileRange object. + * @param {ol.Extent=} opt_extent Temporary ol.Extent object. + * @return {ol.TileRange} Tile range. + */ +ol.tilegrid.TileGrid.prototype.getTileCoordChildTileRange = + function(tileCoord, opt_tileRange, opt_extent) { + if (tileCoord.z < this.maxZoom) { + var tileCoordExtent = this.getTileCoordExtent(tileCoord, opt_extent); + return this.getTileRangeForExtentAndZ( + tileCoordExtent, tileCoord.z + 1, opt_tileRange); + } else { + return null; + } +}; + + +/** + * @param {number} z Z. + * @param {ol.TileRange} tileRange Tile range. + * @param {ol.Extent=} opt_extent Temporary ol.Extent object. + * @return {ol.Extent} Extent. + */ +ol.tilegrid.TileGrid.prototype.getTileRangeExtent = + function(z, tileRange, opt_extent) { + var origin = this.getOrigin(z); + var resolution = this.getResolution(z); + var tileSize = this.getTileSize(z); + var minX = origin[0] + tileRange.minX * tileSize * resolution; + var maxX = origin[0] + (tileRange.maxX + 1) * tileSize * resolution; + var minY = origin[1] + tileRange.minY * tileSize * resolution; + var maxY = origin[1] + (tileRange.maxY + 1) * tileSize * resolution; + return ol.extent.createOrUpdate(minX, minY, maxX, maxY, opt_extent); +}; + + +/** + * @param {ol.Extent} extent Extent. + * @param {number} resolution Resolution. + * @param {ol.TileRange=} opt_tileRange Temporary tile range object. + * @return {ol.TileRange} Tile range. + */ +ol.tilegrid.TileGrid.prototype.getTileRangeForExtentAndResolution = + function(extent, resolution, opt_tileRange) { + var tileCoord = ol.tilegrid.TileGrid.tmpTileCoord_; + this.getTileCoordForXYAndResolution_( + extent[0], extent[1], resolution, false, tileCoord); + var minX = tileCoord.x; + var minY = tileCoord.y; + this.getTileCoordForXYAndResolution_( + extent[2], extent[3], resolution, true, tileCoord); + return ol.TileRange.createOrUpdate( + minX, tileCoord.x, minY, tileCoord.y, opt_tileRange); +}; + + +/** + * @param {ol.Extent} extent Extent. + * @param {number} z Z. + * @param {ol.TileRange=} opt_tileRange Temporary tile range object. + * @return {ol.TileRange} Tile range. + */ +ol.tilegrid.TileGrid.prototype.getTileRangeForExtentAndZ = + function(extent, z, opt_tileRange) { + var resolution = this.getResolution(z); + return this.getTileRangeForExtentAndResolution( + extent, resolution, opt_tileRange); +}; + + +/** + * @param {ol.TileCoord} tileCoord Tile coordinate. + * @return {ol.Coordinate} Tile center. + */ +ol.tilegrid.TileGrid.prototype.getTileCoordCenter = function(tileCoord) { + var origin = this.getOrigin(tileCoord.z); + var resolution = this.getResolution(tileCoord.z); + var tileSize = this.getTileSize(tileCoord.z); + return [ + origin[0] + (tileCoord.x + 0.5) * tileSize * resolution, + origin[1] + (tileCoord.y + 0.5) * tileSize * resolution + ]; +}; + + +/** + * @param {ol.TileCoord} tileCoord Tile coordinate. + * @param {ol.Extent=} opt_extent Temporary extent object. + * @return {ol.Extent} Extent. + */ +ol.tilegrid.TileGrid.prototype.getTileCoordExtent = + function(tileCoord, opt_extent) { + var origin = this.getOrigin(tileCoord.z); + var resolution = this.getResolution(tileCoord.z); + var tileSize = this.getTileSize(tileCoord.z); + var minX = origin[0] + tileCoord.x * tileSize * resolution; + var minY = origin[1] + tileCoord.y * tileSize * resolution; + var maxX = minX + tileSize * resolution; + var maxY = minY + tileSize * resolution; + return ol.extent.createOrUpdate(minX, minY, maxX, maxY, opt_extent); +}; + + +/** + * Get the tile coordinate for the given map coordinate and resolution. This + * method considers that coordinates that intersect tile boundaries should be + * assigned the higher tile coordinate. + * + * @param {ol.Coordinate} coordinate Coordinate. + * @param {number} resolution Resolution. + * @param {ol.TileCoord=} opt_tileCoord Destination ol.TileCoord object. + * @return {ol.TileCoord} Tile coordinate. + */ +ol.tilegrid.TileGrid.prototype.getTileCoordForCoordAndResolution = function( + coordinate, resolution, opt_tileCoord) { + return this.getTileCoordForXYAndResolution_( + coordinate[0], coordinate[1], resolution, false, opt_tileCoord); +}; + + +/** + * @param {number} x X. + * @param {number} y Y. + * @param {number} resolution Resolution. + * @param {boolean} reverseIntersectionPolicy Instead of letting edge + * intersections go to the higher tile coordinate, let edge intersections + * go to the lower tile coordinate. + * @param {ol.TileCoord=} opt_tileCoord Temporary ol.TileCoord object. + * @return {ol.TileCoord} Tile coordinate. + * @private + */ +ol.tilegrid.TileGrid.prototype.getTileCoordForXYAndResolution_ = function( + x, y, resolution, reverseIntersectionPolicy, opt_tileCoord) { + var z = this.getZForResolution(resolution); + var scale = resolution / this.getResolution(z); + var origin = this.getOrigin(z); + var tileSize = this.getTileSize(z); + + var tileCoordX = scale * (x - origin[0]) / (resolution * tileSize); + var tileCoordY = scale * (y - origin[1]) / (resolution * tileSize); + + if (reverseIntersectionPolicy) { + tileCoordX = Math.ceil(tileCoordX) - 1; + tileCoordY = Math.ceil(tileCoordY) - 1; + } else { + tileCoordX = Math.floor(tileCoordX); + tileCoordY = Math.floor(tileCoordY); + } + + return ol.TileCoord.createOrUpdate(z, tileCoordX, tileCoordY, opt_tileCoord); +}; + + +/** + * @param {ol.Coordinate} coordinate Coordinate. + * @param {number} z Z. + * @param {ol.TileCoord=} opt_tileCoord Destination ol.TileCoord object. + * @return {ol.TileCoord} Tile coordinate. + */ +ol.tilegrid.TileGrid.prototype.getTileCoordForCoordAndZ = + function(coordinate, z, opt_tileCoord) { + var resolution = this.getResolution(z); + return this.getTileCoordForXYAndResolution_( + coordinate[0], coordinate[1], resolution, false, opt_tileCoord); +}; + + +/** + * @param {ol.TileCoord} tileCoord Tile coordinate. + * @return {number} Tile resolution. + */ +ol.tilegrid.TileGrid.prototype.getTileCoordResolution = function(tileCoord) { + goog.asserts.assert( + this.minZoom <= tileCoord.z && tileCoord.z <= this.maxZoom); + return this.resolutions_[tileCoord.z]; +}; + + +/** + * @param {number} z Z. + * @return {number} Tile size. + * @todo stability experimental + */ +ol.tilegrid.TileGrid.prototype.getTileSize = function(z) { + if (goog.isDef(this.tileSize_)) { + return this.tileSize_; + } else { + goog.asserts.assert(!goog.isNull(this.tileSizes_)); + goog.asserts.assert(this.minZoom <= z && z <= this.maxZoom); + return this.tileSizes_[z]; + } +}; + + +/** + * @param {number} resolution Resolution. + * @return {number} Z. + */ +ol.tilegrid.TileGrid.prototype.getZForResolution = function(resolution) { + return ol.array.linearFindNearest(this.resolutions_, resolution, 0); +}; + + +/** + * @param {ol.proj.Projection} projection Projection. + * @return {ol.tilegrid.TileGrid} Default tile grid for the passed projection. + */ +ol.tilegrid.getForProjection = function(projection) { + var tileGrid = projection.getDefaultTileGrid(); + if (goog.isNull(tileGrid)) { + tileGrid = ol.tilegrid.createForProjection(projection); + projection.setDefaultTileGrid(tileGrid); + } + return tileGrid; +}; + + +/** + * @param {ol.proj.Projection} projection Projection. + * @param {number=} opt_maxZoom Maximum zoom level. + * @param {number=} opt_tileSize Tile size. + * @return {ol.tilegrid.TileGrid} TileGrid instance. + */ +ol.tilegrid.createForProjection = + function(projection, opt_maxZoom, opt_tileSize) { + var projectionExtent = projection.getExtent(); + var size = goog.isNull(projectionExtent) ? + 360 * ol.proj.METERS_PER_UNIT[ol.proj.Units.DEGREES] / + projection.getMetersPerUnit() : + Math.max(projectionExtent[2] - projectionExtent[0], + projectionExtent[3] - projectionExtent[1]); + var maxZoom = goog.isDef(opt_maxZoom) ? + opt_maxZoom : ol.DEFAULT_MAX_ZOOM; + var tileSize = goog.isDef(opt_tileSize) ? opt_tileSize : ol.DEFAULT_TILE_SIZE; + var resolutions = new Array(maxZoom + 1); + var maxResolution = size / tileSize; + for (var z = 0, zz = resolutions.length; z < zz; ++z) { + resolutions[z] = maxResolution / Math.pow(2, z); + } + return new ol.tilegrid.TileGrid({ + origin: goog.isNull(projectionExtent) ? [0, 0] : + ol.extent.getBottomLeft(projectionExtent), + resolutions: resolutions, + tileSize: tileSize + }); +}; diff --git a/float-no-zero/ol/ol/tilegrid/wmtstilegrid.exports b/float-no-zero/ol/ol/tilegrid/wmtstilegrid.exports new file mode 100644 index 0000000000..654b18d9c8 --- /dev/null +++ b/float-no-zero/ol/ol/tilegrid/wmtstilegrid.exports @@ -0,0 +1,2 @@ +@exportSymbol ol.tilegrid.WMTS +@exportProperty ol.tilegrid.WMTS.prototype.getMatrixIds diff --git a/float-no-zero/ol/ol/tilegrid/wmtstilegrid.js b/float-no-zero/ol/ol/tilegrid/wmtstilegrid.js new file mode 100644 index 0000000000..5c4ad79de6 --- /dev/null +++ b/float-no-zero/ol/ol/tilegrid/wmtstilegrid.js @@ -0,0 +1,110 @@ +goog.provide('ol.tilegrid.WMTS'); + +goog.require('goog.array'); +goog.require('goog.asserts'); +goog.require('ol.proj'); +goog.require('ol.tilegrid.TileGrid'); + + + +/** + * @constructor + * @extends {ol.tilegrid.TileGrid} + * @param {olx.tilegrid.WMTSOptions} options WMTS options. + * @struct + * @todo stability experimental + */ +ol.tilegrid.WMTS = function(options) { + + goog.asserts.assert( + options.resolutions.length == options.matrixIds.length); + + /** + * @private + * @type {!Array.} + */ + this.matrixIds_ = options.matrixIds; + // FIXME: should the matrixIds become optionnal? + + goog.base(this, { + origin: options.origin, + origins: options.origins, + resolutions: options.resolutions, + tileSize: options.tileSize, + tileSizes: options.tileSizes + }); + +}; +goog.inherits(ol.tilegrid.WMTS, ol.tilegrid.TileGrid); + + +/** + * @param {number} z Z. + * @return {string} MatrixId.. + */ +ol.tilegrid.WMTS.prototype.getMatrixId = function(z) { + goog.asserts.assert(0 <= z && z < this.matrixIds_.length); + return this.matrixIds_[z]; +}; + + +/** + * @return {Array.} MatrixIds. + * @todo stability experimental + */ +ol.tilegrid.WMTS.prototype.getMatrixIds = function() { + return this.matrixIds_; +}; + + +/** + * @param {Object} matrixSet An object representing a matrixSet in the + * capabilities document. + * @return {ol.tilegrid.WMTS} WMTS tileGrid instance. + */ +ol.tilegrid.WMTS.createFromCapabilitiesMatrixSet = + function(matrixSet) { + + /** @type {!Array.} */ + var resolutions = []; + /** @type {!Array.} */ + var matrixIds = []; + /** @type {!Array.} */ + var origins = []; + /** @type {!Array.} */ + var tileSizes = []; + + var supportedCRSPropName = 'supportedCRS'; + var matrixIdsPropName = 'matrixIds'; + var identifierPropName = 'identifier'; + var scaleDenominatorPropName = 'scaleDenominator'; + var topLeftCornerPropName = 'topLeftCorner'; + var tileWidthPropName = 'tileWidth'; + var tileHeightPropName = 'tileHeight'; + + var projection = ol.proj.get(matrixSet[supportedCRSPropName]); + var metersPerUnit = projection.getMetersPerUnit(); + + goog.array.sort(matrixSet[matrixIdsPropName], function(a, b) { + return b[scaleDenominatorPropName] - a[scaleDenominatorPropName]; + }); + + goog.array.forEach(matrixSet[matrixIdsPropName], + function(elt, index, array) { + matrixIds.push(elt[identifierPropName]); + origins.push(elt[topLeftCornerPropName]); + resolutions.push(elt[scaleDenominatorPropName] * 0.28E-3 / + metersPerUnit); + var tileWidth = elt[tileWidthPropName]; + var tileHeight = elt[tileHeightPropName]; + goog.asserts.assert(tileWidth == tileHeight); + tileSizes.push(tileWidth); + }); + + return new ol.tilegrid.WMTS({ + origins: origins, + resolutions: resolutions, + matrixIds: matrixIds, + tileSizes: tileSizes + }); +}; diff --git a/float-no-zero/ol/ol/tilegrid/xyztilegrid.exports b/float-no-zero/ol/ol/tilegrid/xyztilegrid.exports new file mode 100644 index 0000000000..f05509aca9 --- /dev/null +++ b/float-no-zero/ol/ol/tilegrid/xyztilegrid.exports @@ -0,0 +1 @@ +@exportSymbol ol.tilegrid.XYZ diff --git a/float-no-zero/ol/ol/tilegrid/xyztilegrid.js b/float-no-zero/ol/ol/tilegrid/xyztilegrid.js new file mode 100644 index 0000000000..d3bdd82d6b --- /dev/null +++ b/float-no-zero/ol/ol/tilegrid/xyztilegrid.js @@ -0,0 +1,129 @@ +goog.provide('ol.tilegrid.XYZ'); + +goog.require('goog.math'); +goog.require('ol.TileCoord'); +goog.require('ol.TileRange'); +goog.require('ol.proj'); +goog.require('ol.proj.EPSG3857'); +goog.require('ol.tilegrid.TileGrid'); + + + +/** + * @constructor + * @extends {ol.tilegrid.TileGrid} + * @param {olx.tilegrid.XYZOptions} options XYZ options. + * @struct + * @todo stability experimental + */ +ol.tilegrid.XYZ = function(options) { + + var resolutions = new Array(options.maxZoom + 1); + var z; + var size = 2 * ol.proj.EPSG3857.HALF_SIZE / ol.DEFAULT_TILE_SIZE; + for (z = 0; z <= options.maxZoom; ++z) { + resolutions[z] = size / Math.pow(2, z); + } + + goog.base(this, { + minZoom: options.minZoom, + origin: [-ol.proj.EPSG3857.HALF_SIZE, ol.proj.EPSG3857.HALF_SIZE], + resolutions: resolutions, + tileSize: ol.DEFAULT_TILE_SIZE + }); + +}; +goog.inherits(ol.tilegrid.XYZ, ol.tilegrid.TileGrid); + + +/** + * @inheritDoc + */ +ol.tilegrid.XYZ.prototype.createTileCoordTransform = function(opt_options) { + var options = goog.isDef(opt_options) ? opt_options : {}; + var minZ = this.minZoom; + var maxZ = this.maxZoom; + var wrapX = goog.isDef(options.wrapX) ? options.wrapX : true; + var tmpTileCoord = new ol.TileCoord(0, 0, 0); + /** @type {Array.} */ + var tileRangeByZ = null; + if (goog.isDef(options.extent)) { + tileRangeByZ = new Array(maxZ + 1); + var z; + for (z = 0; z <= maxZ; ++z) { + if (z < minZ) { + tileRangeByZ[z] = null; + } else { + tileRangeByZ[z] = this.getTileRangeForExtentAndZ(options.extent, z); + } + } + } + return ( + /** + * @param {ol.TileCoord} tileCoord Tile coordinate. + * @param {ol.proj.Projection} projection Projection. + * @param {ol.TileCoord=} opt_tileCoord Destination tile coordinate. + * @return {ol.TileCoord} Tile coordinate. + */ + function(tileCoord, projection, opt_tileCoord) { + var z = tileCoord.z; + if (z < minZ || maxZ < z) { + return null; + } + var n = Math.pow(2, z); + var x = tileCoord.x; + if (wrapX) { + x = goog.math.modulo(x, n); + } else if (x < 0 || n <= x) { + return null; + } + var y = tileCoord.y; + if (y < -n || -1 < y) { + return null; + } + if (!goog.isNull(tileRangeByZ)) { + tmpTileCoord.z = z; + tmpTileCoord.x = x; + tmpTileCoord.y = y; + if (!tileRangeByZ[z].contains(tmpTileCoord)) { + return null; + } + } + return ol.TileCoord.createOrUpdate(z, x, -y - 1, opt_tileCoord); + }); +}; + + +/** + * @inheritDoc + */ +ol.tilegrid.XYZ.prototype.getTileCoordChildTileRange = + function(tileCoord, opt_tileRange) { + if (tileCoord.z < this.maxZoom) { + return ol.TileRange.createOrUpdate( + 2 * tileCoord.x, 2 * (tileCoord.x + 1), + 2 * tileCoord.y, 2 * (tileCoord.y + 1), + opt_tileRange); + } else { + return null; + } +}; + + +/** + * @inheritDoc + */ +ol.tilegrid.XYZ.prototype.forEachTileCoordParentTileRange = + function(tileCoord, callback, opt_this, opt_tileRange) { + var tileRange = ol.TileRange.createOrUpdate( + 0, tileCoord.x, 0, tileCoord.y, opt_tileRange); + var z; + for (z = tileCoord.z - 1; z >= this.minZoom; --z) { + tileRange.minX = tileRange.maxX >>= 1; + tileRange.minY = tileRange.maxY >>= 1; + if (callback.call(opt_this, z, tileRange)) { + return true; + } + } + return false; +}; diff --git a/float-no-zero/ol/ol/tilegrid/zoomifytilegrid.exports b/float-no-zero/ol/ol/tilegrid/zoomifytilegrid.exports new file mode 100644 index 0000000000..afbfc424a2 --- /dev/null +++ b/float-no-zero/ol/ol/tilegrid/zoomifytilegrid.exports @@ -0,0 +1 @@ +@exportSymbol ol.tilegrid.Zoomify diff --git a/float-no-zero/ol/ol/tilegrid/zoomifytilegrid.js b/float-no-zero/ol/ol/tilegrid/zoomifytilegrid.js new file mode 100644 index 0000000000..6bf221c8fd --- /dev/null +++ b/float-no-zero/ol/ol/tilegrid/zoomifytilegrid.js @@ -0,0 +1,79 @@ +goog.provide('ol.tilegrid.Zoomify'); + +goog.require('goog.math'); +goog.require('ol.TileCoord'); +goog.require('ol.proj'); +goog.require('ol.tilegrid.TileGrid'); + + + +/** + * @constructor + * @extends {ol.tilegrid.TileGrid} + * @param {olx.tilegrid.ZoomifyOptions=} opt_options Options. + * @todo stability experimental + */ +ol.tilegrid.Zoomify = function(opt_options) { + var options = goog.isDef(opt_options) ? opt_options : options; + goog.base(this, { + origin: [0, 0], + resolutions: options.resolutions + }); + +}; +goog.inherits(ol.tilegrid.Zoomify, ol.tilegrid.TileGrid); + + +/** + * @inheritDoc + */ +ol.tilegrid.Zoomify.prototype.createTileCoordTransform = function(opt_options) { + var options = goog.isDef(opt_options) ? opt_options : {}; + var minZ = this.minZoom; + var maxZ = this.maxZoom; + var tmpTileCoord = new ol.TileCoord(0, 0, 0); + /** @type {Array.} */ + var tileRangeByZ = null; + if (goog.isDef(options.extent)) { + tileRangeByZ = new Array(maxZ + 1); + var z; + for (z = 0; z <= maxZ; ++z) { + if (z < minZ) { + tileRangeByZ[z] = null; + } else { + tileRangeByZ[z] = this.getTileRangeForExtentAndZ(options.extent, z); + } + } + } + return ( + /** + * @param {ol.TileCoord} tileCoord Tile coordinate. + * @param {ol.proj.Projection} projection Projection. + * @param {ol.TileCoord=} opt_tileCoord Destination tile coordinate. + * @return {ol.TileCoord} Tile coordinate. + */ + function(tileCoord, projection, opt_tileCoord) { + var z = tileCoord.z; + if (z < minZ || maxZ < z) { + return null; + } + var n = Math.pow(2, z); + var x = tileCoord.x; + if (x < 0 || n <= x) { + return null; + } + var y = tileCoord.y; + if (y < -n || -1 < y) { + return null; + } + if (!goog.isNull(tileRangeByZ)) { + tmpTileCoord.z = z; + tmpTileCoord.x = x; + tmpTileCoord.y = -y - 1; + if (!tileRangeByZ[z].contains(tmpTileCoord)) { + return null; + } + } + return ol.TileCoord.createOrUpdate(z, x, -y - 1, opt_tileCoord); + }); +}; diff --git a/float-no-zero/ol/ol/tileloadfunction.js b/float-no-zero/ol/ol/tileloadfunction.js new file mode 100644 index 0000000000..9524830044 --- /dev/null +++ b/float-no-zero/ol/ol/tileloadfunction.js @@ -0,0 +1,11 @@ +goog.provide('ol.TileLoadFunctionType'); + + +/** + * A function that takes an {@link ol.ImageTile} for the image tile and a + * `{string}` for the src as arguments. + * + * @typedef {function(ol.ImageTile, string)} + * @todo stability experimental + */ +ol.TileLoadFunctionType; diff --git a/float-no-zero/ol/ol/tilequeue.js b/float-no-zero/ol/ol/tilequeue.js new file mode 100644 index 0000000000..e0426a5cb4 --- /dev/null +++ b/float-no-zero/ol/ol/tilequeue.js @@ -0,0 +1,94 @@ +goog.provide('ol.TilePriorityFunction'); +goog.provide('ol.TileQueue'); + +goog.require('goog.events'); +goog.require('goog.events.EventType'); +goog.require('ol.Coordinate'); +goog.require('ol.Tile'); +goog.require('ol.structs.PriorityQueue'); + + +/** + * @typedef {function(ol.Tile, string, ol.Coordinate, number): number} + */ +ol.TilePriorityFunction; + + + +/** + * @constructor + * @extends {ol.structs.PriorityQueue.} + * @param {ol.TilePriorityFunction} tilePriorityFunction + * Tile priority function. + * @param {function(): ?} tileChangeCallback + * Function called on each tile change event. + * @struct + */ +ol.TileQueue = function(tilePriorityFunction, tileChangeCallback) { + + goog.base( + this, + /** + * @param {Array} element Element. + * @return {number} Priority. + */ + function(element) { + return tilePriorityFunction.apply(null, element); + }, + /** + * @param {Array} element Element. + * @return {string} Key. + */ + function(element) { + return /** @type {ol.Tile} */ (element[0]).getKey(); + }); + + /** + * @private + * @type {function(): ?} + */ + this.tileChangeCallback_ = tileChangeCallback; + + /** + * @private + * @type {number} + */ + this.tilesLoading_ = 0; + +}; +goog.inherits(ol.TileQueue, ol.structs.PriorityQueue); + + +/** + * @return {number} Number of tiles loading. + */ +ol.TileQueue.prototype.getTilesLoading = function() { + return this.tilesLoading_; +}; + + +/** + * @protected + */ +ol.TileQueue.prototype.handleTileChange = function() { + --this.tilesLoading_; + this.tileChangeCallback_(); +}; + + +/** + * @param {number} maxTotalLoading Maximum number tiles to load simultaneously. + * @param {number} maxNewLoads Maximum number of new tiles to load. + */ +ol.TileQueue.prototype.loadMoreTiles = function(maxTotalLoading, maxNewLoads) { + var newLoads = Math.min( + maxTotalLoading - this.getTilesLoading(), maxNewLoads, this.getCount()); + var i, tile; + for (i = 0; i < newLoads; ++i) { + tile = /** @type {ol.Tile} */ (this.dequeue()[0]); + goog.events.listenOnce(tile, goog.events.EventType.CHANGE, + this.handleTileChange, false, this); + tile.load(); + } + this.tilesLoading_ += newLoads; +}; diff --git a/float-no-zero/ol/ol/tilerange.js b/float-no-zero/ol/ol/tilerange.js new file mode 100644 index 0000000000..f2ef5d3245 --- /dev/null +++ b/float-no-zero/ol/ol/tilerange.js @@ -0,0 +1,169 @@ +goog.provide('ol.TileRange'); + +goog.require('goog.asserts'); +goog.require('ol.Size'); +goog.require('ol.TileCoord'); + + + +/** + * A representation of a contiguous block of tiles. A tile range is specified + * by its min/max tile coordinates and is inclusive of coordinates. + * + * @constructor + * @param {number} minX Minimum X. + * @param {number} maxX Maximum X. + * @param {number} minY Minimum Y. + * @param {number} maxY Maximum Y. + * @struct + */ +ol.TileRange = function(minX, maxX, minY, maxY) { + + /** + * @type {number} + */ + this.minX = minX; + + /** + * @type {number} + */ + this.maxX = maxX; + + /** + * @type {number} + */ + this.minY = minY; + + /** + * @type {number} + */ + this.maxY = maxY; + +}; + + +/** + * @param {...ol.TileCoord} var_args Tile coordinates. + * @return {!ol.TileRange} Bounding tile box. + */ +ol.TileRange.boundingTileRange = function(var_args) { + var tileCoord0 = /** @type {ol.TileCoord} */ (arguments[0]); + var tileRange = new ol.TileRange(tileCoord0.x, tileCoord0.x, + tileCoord0.y, tileCoord0.y); + var i, ii, tileCoord; + for (i = 1, ii = arguments.length; i < ii; ++i) { + tileCoord = /** @type {ol.TileCoord} */ (arguments[i]); + goog.asserts.assert(tileCoord.z == tileCoord0.z); + tileRange.minX = Math.min(tileRange.minX, tileCoord.x); + tileRange.maxX = Math.max(tileRange.maxX, tileCoord.x); + tileRange.minY = Math.min(tileRange.minY, tileCoord.y); + tileRange.maxY = Math.max(tileRange.maxY, tileCoord.y); + } + return tileRange; +}; + + +/** + * @param {number} minX Minimum X. + * @param {number} maxX Maximum X. + * @param {number} minY Minimum Y. + * @param {number} maxY Maximum Y. + * @param {ol.TileRange|undefined} tileRange TileRange. + * @return {ol.TileRange} Tile range. + */ +ol.TileRange.createOrUpdate = function(minX, maxX, minY, maxY, tileRange) { + if (goog.isDef(tileRange)) { + tileRange.minX = minX; + tileRange.maxX = maxX; + tileRange.minY = minY; + tileRange.maxY = maxY; + return tileRange; + } else { + return new ol.TileRange(minX, maxX, minY, maxY); + } +}; + + +/** + * @param {ol.TileCoord} tileCoord Tile coordinate. + * @return {boolean} Contains tile coordinate. + */ +ol.TileRange.prototype.contains = function(tileCoord) { + return this.minX <= tileCoord.x && tileCoord.x <= this.maxX && + this.minY <= tileCoord.y && tileCoord.y <= this.maxY; +}; + + +/** + * @param {ol.TileRange} tileRange Tile range. + * @return {boolean} Contains. + */ +ol.TileRange.prototype.containsTileRange = function(tileRange) { + return this.minX <= tileRange.minX && tileRange.maxX <= this.maxX && + this.minY <= tileRange.minY && tileRange.maxY <= this.maxY; +}; + + +/** + * @param {ol.TileRange} tileRange Tile range. + * @return {boolean} Equals. + */ +ol.TileRange.prototype.equals = function(tileRange) { + return this.minX == tileRange.minX && this.minY == tileRange.minY && + this.maxX == tileRange.maxX && this.maxY == tileRange.maxY; +}; + + +/** + * @param {ol.TileRange} tileRange Tile range. + */ +ol.TileRange.prototype.extend = function(tileRange) { + if (tileRange.minX < this.minX) { + this.minX = tileRange.minX; + } + if (tileRange.maxX > this.maxX) { + this.maxX = tileRange.maxX; + } + if (tileRange.minY < this.minY) { + this.minY = tileRange.minY; + } + if (tileRange.maxY > this.maxY) { + this.maxY = tileRange.maxY; + } +}; + + +/** + * @return {number} Height. + */ +ol.TileRange.prototype.getHeight = function() { + return this.maxY - this.minY + 1; +}; + + +/** + * @return {ol.Size} Size. + */ +ol.TileRange.prototype.getSize = function() { + return [this.getWidth(), this.getHeight()]; +}; + + +/** + * @return {number} Width. + */ +ol.TileRange.prototype.getWidth = function() { + return this.maxX - this.minX + 1; +}; + + +/** + * @param {ol.TileRange} tileRange Tile range. + * @return {boolean} Intersects. + */ +ol.TileRange.prototype.intersects = function(tileRange) { + return this.minX <= tileRange.maxX && + this.maxX >= tileRange.minX && + this.minY <= tileRange.maxY && + this.maxY >= tileRange.minY; +}; diff --git a/float-no-zero/ol/ol/tileurlfunction.js b/float-no-zero/ol/ol/tileurlfunction.js new file mode 100644 index 0000000000..0626f0ec80 --- /dev/null +++ b/float-no-zero/ol/ol/tileurlfunction.js @@ -0,0 +1,155 @@ +goog.provide('ol.TileUrlFunction'); +goog.provide('ol.TileUrlFunctionType'); + +goog.require('goog.array'); +goog.require('goog.math'); +goog.require('ol.TileCoord'); + + +/** + * A function that takes an {@link ol.TileCoord} for the tile coordinate, + * a `{number}` representing the pixel ratio and an {@link ol.proj.Projection} + * for the projection as arguments and returns a `{string}` or + * undefined representing the tile URL. The this keyword inside the function + * references the {@link ol.source.TileImage}. + * + * @typedef {function(this: ol.source.TileImage, ol.TileCoord, + * number, ol.proj.Projection): (string|undefined)} + * @todo stability experimental + */ +ol.TileUrlFunctionType; + + +/** + * @typedef {function(ol.TileCoord, ol.proj.Projection, ol.TileCoord=): + * ol.TileCoord} + */ +ol.TileCoordTransformType; + + +/** + * @param {string} template Template. + * @return {ol.TileUrlFunctionType} Tile URL function. + */ +ol.TileUrlFunction.createFromTemplate = function(template) { + return ( + /** + * @this {ol.source.TileImage} + * @param {ol.TileCoord} tileCoord Tile Coordinate. + * @param {number} pixelRatio Pixel ratio. + * @param {ol.proj.Projection} projection Projection. + * @return {string|undefined} Tile URL. + */ + function(tileCoord, pixelRatio, projection) { + if (goog.isNull(tileCoord)) { + return undefined; + } else { + return template.replace('{z}', tileCoord.z.toString()) + .replace('{x}', tileCoord.x.toString()) + .replace('{y}', tileCoord.y.toString()); + } + }); +}; + + +/** + * @param {Array.} templates Templates. + * @return {ol.TileUrlFunctionType} Tile URL function. + */ +ol.TileUrlFunction.createFromTemplates = function(templates) { + return ol.TileUrlFunction.createFromTileUrlFunctions( + goog.array.map(templates, ol.TileUrlFunction.createFromTemplate)); +}; + + +/** + * @param {Array.} tileUrlFunctions Tile URL Functions. + * @return {ol.TileUrlFunctionType} Tile URL function. + */ +ol.TileUrlFunction.createFromTileUrlFunctions = function(tileUrlFunctions) { + if (tileUrlFunctions.length === 1) { + return tileUrlFunctions[0]; + } + return ( + /** + * @this {ol.source.TileImage} + * @param {ol.TileCoord} tileCoord Tile Coordinate. + * @param {number} pixelRatio Pixel ratio. + * @param {ol.proj.Projection} projection Projection. + * @return {string|undefined} Tile URL. + */ + function(tileCoord, pixelRatio, projection) { + if (goog.isNull(tileCoord)) { + return undefined; + } else { + var index = + goog.math.modulo(tileCoord.hash(), tileUrlFunctions.length); + return tileUrlFunctions[index].call( + this, tileCoord, pixelRatio, projection); + } + }); +}; + + +/** + * @this {ol.source.TileImage} + * @param {ol.TileCoord} tileCoord Tile coordinate. + * @param {number} pixelRatio Pixel ratio. + * @param {ol.proj.Projection} projection Projection. + * @return {string|undefined} Tile URL. + */ +ol.TileUrlFunction.nullTileUrlFunction = + function(tileCoord, pixelRatio, projection) { + return undefined; +}; + + +/** + * @param {ol.TileCoordTransformType} transformFn Transform function. + * @param {ol.TileUrlFunctionType} tileUrlFunction Tile URL function. + * @return {ol.TileUrlFunctionType} Tile URL function. + */ +ol.TileUrlFunction.withTileCoordTransform = + function(transformFn, tileUrlFunction) { + var tmpTileCoord = new ol.TileCoord(0, 0, 0); + return ( + /** + * @this {ol.source.TileImage} + * @param {ol.TileCoord} tileCoord Tile Coordinate. + * @param {number} pixelRatio Pixel ratio. + * @param {ol.proj.Projection} projection Projection. + * @return {string|undefined} Tile URL. + */ + function(tileCoord, pixelRatio, projection) { + if (goog.isNull(tileCoord)) { + return undefined; + } else { + return tileUrlFunction.call( + this, + transformFn.call(this, tileCoord, projection, tmpTileCoord), + pixelRatio, + projection); + } + }); +}; + + +/** + * @param {string} url URL. + * @return {Array.} Array of urls. + */ +ol.TileUrlFunction.expandUrl = function(url) { + var urls = []; + var match = /\{(\d)-(\d)\}/.exec(url) || /\{([a-z])-([a-z])\}/.exec(url); + if (match) { + var startCharCode = match[1].charCodeAt(0); + var stopCharCode = match[2].charCodeAt(0); + var charCode; + for (charCode = startCharCode; charCode <= stopCharCode; ++charCode) { + urls.push(url.replace(match[0], String.fromCharCode(charCode))); + } + } else { + urls.push(url); + } + return urls; +}; diff --git a/float-no-zero/ol/ol/transformfunction.js b/float-no-zero/ol/ol/transformfunction.js new file mode 100644 index 0000000000..3bf13896ec --- /dev/null +++ b/float-no-zero/ol/ol/transformfunction.js @@ -0,0 +1,13 @@ +goog.provide('ol.TransformFunction'); + + +/** + * A transform function accepts an array of input coordinate values, an optional + * output array, and an optional dimension (default should be 2). The function + * transforms the input coordinate values, populates the output array, and + * returns the output array. + * + * @typedef {function(Array., Array.=, number=): Array.} + * @todo stability experimental + */ +ol.TransformFunction; diff --git a/float-no-zero/ol/ol/vec/mat4.js b/float-no-zero/ol/ol/vec/mat4.js new file mode 100644 index 0000000000..54e7df7e71 --- /dev/null +++ b/float-no-zero/ol/ol/vec/mat4.js @@ -0,0 +1,82 @@ +goog.provide('ol.vec.Mat4'); + +goog.require('goog.vec.Mat4'); + + +/** + * @param {!goog.vec.Mat4.Number} mat Matrix. + * @param {number} translateX1 Translate X1. + * @param {number} translateY1 Translate Y1. + * @param {number} scaleX Scale X. + * @param {number} scaleY Scale Y. + * @param {number} rotation Rotation. + * @param {number} translateX2 Translate X2. + * @param {number} translateY2 Translate Y2. + * @return {!goog.vec.Mat4.Number} Matrix. + */ +ol.vec.Mat4.makeTransform2D = function(mat, translateX1, translateY1, + scaleX, scaleY, rotation, translateX2, translateY2) { + goog.vec.Mat4.makeIdentity(mat); + if (translateX1 !== 0 || translateY1 !== 0) { + goog.vec.Mat4.translate(mat, translateX1, translateY1, 0); + } + if (scaleX != 1 || scaleY != 1) { + goog.vec.Mat4.scale(mat, scaleX, scaleY, 1); + } + if (rotation !== 0) { + goog.vec.Mat4.rotateZ(mat, rotation); + } + if (translateX2 !== 0 || translateY2 !== 0) { + goog.vec.Mat4.translate(mat, translateX2, translateY2, 0); + } + return mat; +}; + + +/** + * Returns true if mat1 and mat2 represent the same 2D transformation. + * @param {goog.vec.Mat4.Number} mat1 Matrix 1. + * @param {goog.vec.Mat4.Number} mat2 Matrix 2. + * @return {boolean} Equal 2D. + */ +ol.vec.Mat4.equals2D = function(mat1, mat2) { + return ( + goog.vec.Mat4.getElement(mat1, 0, 0) == + goog.vec.Mat4.getElement(mat2, 0, 0) && + goog.vec.Mat4.getElement(mat1, 1, 0) == + goog.vec.Mat4.getElement(mat2, 1, 0) && + goog.vec.Mat4.getElement(mat1, 0, 1) == + goog.vec.Mat4.getElement(mat2, 0, 1) && + goog.vec.Mat4.getElement(mat1, 1, 1) == + goog.vec.Mat4.getElement(mat2, 1, 1) && + goog.vec.Mat4.getElement(mat1, 0, 3) == + goog.vec.Mat4.getElement(mat2, 0, 3) && + goog.vec.Mat4.getElement(mat1, 1, 3) == + goog.vec.Mat4.getElement(mat2, 1, 3)); +}; + + +/** + * Transforms the given vector with the given matrix storing the resulting, + * transformed vector into resultVec. The input vector is multiplied against the + * upper 2x4 matrix omitting the projective component. + * + * @param {goog.vec.Mat4.Number} mat The matrix supplying the transformation. + * @param {Array.} vec The 3 element vector to transform. + * @param {Array.} resultVec The 3 element vector to receive the results + * (may be vec). + * @return {Array.} return resultVec so that operations can be + * chained together. + */ +ol.vec.Mat4.multVec2 = function(mat, vec, resultVec) { + var m00 = goog.vec.Mat4.getElement(mat, 0, 0); + var m10 = goog.vec.Mat4.getElement(mat, 1, 0); + var m01 = goog.vec.Mat4.getElement(mat, 0, 1); + var m11 = goog.vec.Mat4.getElement(mat, 1, 1); + var m03 = goog.vec.Mat4.getElement(mat, 0, 3); + var m13 = goog.vec.Mat4.getElement(mat, 1, 3); + var x = vec[0], y = vec[1]; + resultVec[0] = m00 * x + m01 * y + m03; + resultVec[1] = m10 * x + m11 * y + m13; + return resultVec; +}; diff --git a/float-no-zero/ol/ol/view.js b/float-no-zero/ol/ol/view.js new file mode 100644 index 0000000000..ffee86ba59 --- /dev/null +++ b/float-no-zero/ol/ol/view.js @@ -0,0 +1,87 @@ +goog.provide('ol.View'); +goog.provide('ol.ViewHint'); + +goog.require('goog.array'); +goog.require('goog.asserts'); +goog.require('ol.IView'); +goog.require('ol.Object'); + + +/** + * @enum {number} + */ +ol.ViewHint = { + ANIMATING: 0, + INTERACTING: 1 +}; + + + +/** + * @constructor + * @implements {ol.IView} + * @extends {ol.Object} + */ +ol.View = function() { + + goog.base(this); + + /** + * @private + * @type {Array.} + */ + this.hints_ = [0, 0]; + +}; +goog.inherits(ol.View, ol.Object); + + +/** + * @return {Array.} Hint. + */ +ol.View.prototype.getHints = function() { + return goog.array.clone(this.hints_); +}; + + +/** + * @inheritDoc + */ +ol.View.prototype.getView2D = function() { + // FIXME for some reason, we can't use goog.abstractMethod here + goog.asserts.fail(); + return null; +}; + + +/** + * @inheritDoc + */ +ol.View.prototype.getView3D = function() { + // FIXME for some reason, we can't use goog.abstractMethod here + goog.asserts.fail(); + return null; +}; + + +/** + * @inheritDoc + */ +ol.View.prototype.isDef = function() { + // FIXME for some reason, we can't use goog.abstractMethod here + goog.asserts.fail(); + return false; +}; + + +/** + * @param {ol.ViewHint} hint Hint. + * @param {number} delta Delta. + * @return {number} New value. + */ +ol.View.prototype.setHint = function(hint, delta) { + goog.asserts.assert(0 <= hint && hint < this.hints_.length); + this.hints_[hint] += delta; + goog.asserts.assert(this.hints_[hint] >= 0); + return this.hints_[hint]; +}; diff --git a/float-no-zero/ol/ol/view2d.exports b/float-no-zero/ol/ol/view2d.exports new file mode 100644 index 0000000000..85318dd373 --- /dev/null +++ b/float-no-zero/ol/ol/view2d.exports @@ -0,0 +1,8 @@ +@exportSymbol ol.View2D +@exportProperty ol.View2D.prototype.calculateExtent +@exportProperty ol.View2D.prototype.constrainResolution +@exportProperty ol.View2D.prototype.constrainRotation +@exportProperty ol.View2D.prototype.fitExtent +@exportProperty ol.View2D.prototype.getView2D +@exportProperty ol.View2D.prototype.getZoom +@exportProperty ol.View2D.prototype.setZoom diff --git a/float-no-zero/ol/ol/view2d.js b/float-no-zero/ol/ol/view2d.js new file mode 100644 index 0000000000..c11764adaa --- /dev/null +++ b/float-no-zero/ol/ol/view2d.js @@ -0,0 +1,594 @@ +// FIXME getView3D has not return type + +goog.provide('ol.View2D'); +goog.provide('ol.View2DProperty'); + +goog.require('goog.asserts'); +goog.require('ol.CenterConstraint'); +goog.require('ol.Constraints'); +goog.require('ol.IView2D'); +goog.require('ol.IView3D'); +goog.require('ol.ResolutionConstraint'); +goog.require('ol.RotationConstraint'); +goog.require('ol.RotationConstraintType'); +goog.require('ol.Size'); +goog.require('ol.View'); +goog.require('ol.coordinate'); +goog.require('ol.extent'); +goog.require('ol.proj'); +goog.require('ol.proj.METERS_PER_UNIT'); +goog.require('ol.proj.Projection'); +goog.require('ol.proj.Units'); + + +/** + * @enum {string} + * @todo stability experimental + */ +ol.View2DProperty = { + CENTER: 'center', + PROJECTION: 'projection', + RESOLUTION: 'resolution', + ROTATION: 'rotation' +}; + + + +/** + * @class + * An ol.View2D object represents a simple 2D view of the map. + * + * This is the object to act upon to change the center, resolution, + * and rotation of the map. + * + * ### The view states + * + * An `ol.View2D` is determined by three states: `center`, `resolution`, + * and `rotation`. To each state corresponds a getter and a setter. E.g. + * `getCenter` and `setCenter` for the `center` state. + * + * An `ol.View2D` has a `projection`. The projection determines the + * coordinate system of the center, and its units determine the units of the + * resolution (projection units per pixel). The default projection is + * Spherical Mercator (EPSG:3857). + * + * ### The constraints + * + * `setCenter`, `setResolution` and `setRotation` can be used to change the + * states of the view. Any value can be passed to the setters. And the value + * that is passed to a setter will effectively be the value set in the view, + * and returned by the corresponding getter. + * + * But an `ol.View2D` object also has a *resolution constraint* and a + * *rotation constraint*. There's currently no *center constraint*, but + * this may change in the future. + * + * As said above no constraints are applied when the setters are used to set + * new states for the view. Applying constraints is done explicitly through + * the use of the `constrain*` functions (`constrainResolution` and + * `constrainRotation`). + * + * The main users of the constraints are the interactions and the + * controls. For example, double-clicking on the map changes the view to + * the "next" resolution. And releasing the fingers after pinch-zooming + * snaps to the closest resolution (with an animation). + * + * So the *resolution constraint* snaps to specific resolutions. It is + * determined by the following options: `resolutions`, `maxResolution`, + * `maxZoom`, and `zoomFactor`. If `resolutions` is set, the other three + * options are ignored. See {@link ol.View2DOptions} for more information. + * + * The *rotation constaint* is currently not configurable. It snaps the + * rotation value to zero when approaching the horizontal. + * + * @constructor + * @implements {ol.IView2D} + * @implements {ol.IView3D} + * @extends {ol.View} + * @param {olx.View2DOptions=} opt_options View2D options. + * @todo stability experimental + * @todo observable center {ol.Coordinate} the center of the view + * @todo observable projection {ol.proj.Projection} the projection of the view + * @todo observable resolution {number} the resolution of the view + * @todo observable rotation {number} the rotation of the view + */ +ol.View2D = function(opt_options) { + goog.base(this); + var options = opt_options || {}; + + /** + * @type {Object.} + */ + var values = {}; + values[ol.View2DProperty.CENTER] = goog.isDef(options.center) ? + options.center : null; + values[ol.View2DProperty.PROJECTION] = ol.proj.createProjection( + options.projection, 'EPSG:3857'); + + var resolutionConstraintInfo = ol.View2D.createResolutionConstraint_( + options); + + /** + * @private + * @type {number} + */ + this.maxResolution_ = resolutionConstraintInfo.maxResolution; + + /** + * @private + * @type {number} + */ + this.minResolution_ = resolutionConstraintInfo.minResolution; + + var centerConstraint = ol.View2D.createCenterConstraint_(options); + var resolutionConstraint = resolutionConstraintInfo.constraint; + var rotationConstraint = ol.View2D.createRotationConstraint_(options); + + /** + * @private + * @type {ol.Constraints} + */ + this.constraints_ = new ol.Constraints( + centerConstraint, resolutionConstraint, rotationConstraint); + + if (goog.isDef(options.resolution)) { + values[ol.View2DProperty.RESOLUTION] = options.resolution; + } else if (goog.isDef(options.zoom)) { + values[ol.View2DProperty.RESOLUTION] = this.constrainResolution( + this.maxResolution_, options.zoom); + } + values[ol.View2DProperty.ROTATION] = + goog.isDef(options.rotation) ? options.rotation : 0; + this.setValues(values); +}; +goog.inherits(ol.View2D, ol.View); + + +/** + * @param {number} rotation Target rotation. + * @param {ol.Coordinate} anchor Rotation anchor. + * @return {ol.Coordinate|undefined} Center for rotation and anchor. + */ +ol.View2D.prototype.calculateCenterRotate = function(rotation, anchor) { + var center; + var currentCenter = this.getCenter(); + if (goog.isDef(currentCenter)) { + center = [currentCenter[0] - anchor[0], currentCenter[1] - anchor[1]]; + ol.coordinate.rotate(center, rotation - this.getRotation()); + ol.coordinate.add(center, anchor); + } + return center; +}; + + +/** + * @param {number} resolution Target resolution. + * @param {ol.Coordinate} anchor Zoom anchor. + * @return {ol.Coordinate|undefined} Center for resolution and anchor. + */ +ol.View2D.prototype.calculateCenterZoom = function(resolution, anchor) { + var center; + var currentCenter = this.getCenter(); + var currentResolution = this.getResolution(); + if (goog.isDef(currentCenter) && goog.isDef(currentResolution)) { + var x = anchor[0] - + resolution * (anchor[0] - currentCenter[0]) / currentResolution; + var y = anchor[1] - + resolution * (anchor[1] - currentCenter[1]) / currentResolution; + center = [x, y]; + } + return center; +}; + + +/** + * @param {ol.Coordinate|undefined} center Center. + * @return {ol.Coordinate|undefined} Constrained center. + */ +ol.View2D.prototype.constrainCenter = function(center) { + return this.constraints_.center(center); +}; + + +/** + * Get the constrained the resolution of this view. + * @param {number|undefined} resolution Resolution. + * @param {number=} opt_delta Delta. Default is `0`. + * @param {number=} opt_direction Direction. Default is `0`. + * @return {number|undefined} Constrained resolution. + * @todo stability experimental + */ +ol.View2D.prototype.constrainResolution = function( + resolution, opt_delta, opt_direction) { + var delta = opt_delta || 0; + var direction = opt_direction || 0; + return this.constraints_.resolution(resolution, delta, direction); +}; + + +/** + * Get the constrained rotation of this view. + * @param {number|undefined} rotation Rotation. + * @param {number=} opt_delta Delta. Default is `0`. + * @return {number|undefined} Constrained rotation. + * @todo stability experimental + */ +ol.View2D.prototype.constrainRotation = function(rotation, opt_delta) { + var delta = opt_delta || 0; + return this.constraints_.rotation(rotation, delta); +}; + + +/** + * @inheritDoc + */ +ol.View2D.prototype.getCenter = function() { + return /** @type {ol.Coordinate|undefined} */ ( + this.get(ol.View2DProperty.CENTER)); +}; +goog.exportProperty( + ol.View2D.prototype, + 'getCenter', + ol.View2D.prototype.getCenter); + + +/** + * Calculate the extent for the given size in pixels, based on the current + * resolution and the current center. + * @param {ol.Size} size Box pixel size. + * @return {ol.Extent} Extent. + * @todo stability experimental + */ +ol.View2D.prototype.calculateExtent = function(size) { + goog.asserts.assert(this.isDef()); + var center = this.getCenter(); + var resolution = this.getResolution(); + var minX = center[0] - resolution * size[0] / 2; + var maxX = center[0] + resolution * size[0] / 2; + var minY = center[1] - resolution * size[1] / 2; + var maxY = center[1] + resolution * size[1] / 2; + return [minX, minY, maxX, maxY]; +}; + + +/** + * @inheritDoc + */ +ol.View2D.prototype.getProjection = function() { + return /** @type {ol.proj.Projection|undefined} */ ( + this.get(ol.View2DProperty.PROJECTION)); +}; +goog.exportProperty( + ol.View2D.prototype, + 'getProjection', + ol.View2D.prototype.getProjection); + + +/** + * @inheritDoc + */ +ol.View2D.prototype.getResolution = function() { + return /** @type {number|undefined} */ ( + this.get(ol.View2DProperty.RESOLUTION)); +}; +goog.exportProperty( + ol.View2D.prototype, + 'getResolution', + ol.View2D.prototype.getResolution); + + +/** + * @param {ol.Extent} extent Extent. + * @param {ol.Size} size Box pixel size. + * @return {number} Resolution. + */ +ol.View2D.prototype.getResolutionForExtent = function(extent, size) { + var xResolution = (extent[2] - extent[0]) / size[0]; + var yResolution = (extent[3] - extent[1]) / size[1]; + return Math.max(xResolution, yResolution); +}; + + +/** + * Return a function that returns a value between 0 and 1 for a + * resolution. Exponential scaling is assumed. + * @param {number=} opt_power Power. + * @return {function(number): number} Resolution for value function. + */ +ol.View2D.prototype.getResolutionForValueFunction = function(opt_power) { + var power = opt_power || 2; + var maxResolution = this.maxResolution_; + var minResolution = this.minResolution_; + var max = Math.log(maxResolution / minResolution) / Math.log(power); + return ( + /** + * @param {number} value Value. + * @return {number} Resolution. + */ + function(value) { + var resolution = maxResolution / Math.pow(power, value * max); + goog.asserts.assert(resolution >= minResolution && + resolution <= maxResolution); + return resolution; + }); +}; + + +/** + * @inheritDoc + */ +ol.View2D.prototype.getRotation = function() { + return /** @type {number|undefined} */ (this.get(ol.View2DProperty.ROTATION)); +}; +goog.exportProperty( + ol.View2D.prototype, + 'getRotation', + ol.View2D.prototype.getRotation); + + +/** + * Return a function that returns a resolution for a value between + * 0 and 1. Exponential scaling is assumed. + * @param {number=} opt_power Power. + * @return {function(number): number} Value for resolution function. + */ +ol.View2D.prototype.getValueForResolutionFunction = function(opt_power) { + var power = opt_power || 2; + var maxResolution = this.maxResolution_; + var minResolution = this.minResolution_; + var max = Math.log(maxResolution / minResolution) / Math.log(power); + return ( + /** + * @param {number} resolution Resolution. + * @return {number} Value. + */ + function(resolution) { + var value = + (Math.log(maxResolution / resolution) / Math.log(power)) / max; + goog.asserts.assert(value >= 0 && value <= 1); + return value; + }); +}; + + +/** + * @inheritDoc + */ +ol.View2D.prototype.getView2D = function() { + return this; +}; + + +/** + * @inheritDoc + */ +ol.View2D.prototype.getView2DState = function() { + goog.asserts.assert(this.isDef()); + var center = /** @type {ol.Coordinate} */ (this.getCenter()); + var projection = this.getProjection(); + var resolution = /** @type {number} */ (this.getResolution()); + var rotation = this.getRotation(); + return { + center: center.slice(), + projection: goog.isDef(projection) ? projection : null, + resolution: resolution, + rotation: goog.isDef(rotation) ? rotation : 0 + }; +}; + + +/** + * FIXME return type + */ +ol.View2D.prototype.getView3D = function() { +}; + + +/** + * Get the current zoom level. Return undefined if the current + * resolution is undefined or not a "constrained resolution". + * @return {number|undefined} Zoom. + * @todo stability experimental + */ +ol.View2D.prototype.getZoom = function() { + var zoom; + var resolution = this.getResolution(); + + if (goog.isDef(resolution)) { + var res, z = 0; + do { + res = this.constrainResolution(this.maxResolution_, z); + if (res == resolution) { + zoom = z; + break; + } + ++z; + } while (res > this.minResolution_); + } + + return zoom; +}; + + +/** + * Fit the given extent based on the given map size. + * @param {ol.Extent} extent Extent. + * @param {ol.Size} size Box pixel size. + * @todo stability experimental + */ +ol.View2D.prototype.fitExtent = function(extent, size) { + if (!ol.extent.isEmpty(extent)) { + this.setCenter(ol.extent.getCenter(extent)); + var resolution = this.getResolutionForExtent(extent, size); + var constrainedResolution = this.constrainResolution(resolution, 0, 0); + if (constrainedResolution < resolution) { + constrainedResolution = + this.constrainResolution(constrainedResolution, -1, 0); + } + this.setResolution(constrainedResolution); + } +}; + + +/** + * @return {boolean} Is defined. + */ +ol.View2D.prototype.isDef = function() { + return goog.isDefAndNotNull(this.getCenter()) && + goog.isDef(this.getResolution()); +}; + + +/** + * Set the center of the current view. + * @param {ol.Coordinate|undefined} center Center. + * @todo stability experimental + */ +ol.View2D.prototype.setCenter = function(center) { + this.set(ol.View2DProperty.CENTER, center); +}; +goog.exportProperty( + ol.View2D.prototype, + 'setCenter', + ol.View2D.prototype.setCenter); + + +/** + * Set the projection of this view. + * Warning! This code is not yet implemented. Function should not be used. + * @param {ol.proj.Projection|undefined} projection Projection. + * @todo stability experimental + */ +ol.View2D.prototype.setProjection = function(projection) { + this.set(ol.View2DProperty.PROJECTION, projection); +}; +goog.exportProperty( + ol.View2D.prototype, + 'setProjection', + ol.View2D.prototype.setProjection); + + +/** + * Set the resolution for this view. + * @param {number|undefined} resolution Resolution. + * @todo stability experimental + */ +ol.View2D.prototype.setResolution = function(resolution) { + this.set(ol.View2DProperty.RESOLUTION, resolution); +}; +goog.exportProperty( + ol.View2D.prototype, + 'setResolution', + ol.View2D.prototype.setResolution); + + +/** + * Set the rotation for this view. + * @param {number|undefined} rotation Rotation. + * @todo stability experimental + */ +ol.View2D.prototype.setRotation = function(rotation) { + this.set(ol.View2DProperty.ROTATION, rotation); +}; +goog.exportProperty( + ol.View2D.prototype, + 'setRotation', + ol.View2D.prototype.setRotation); + + +/** + * Zoom to a specific zoom level. + * @param {number} zoom Zoom level. + * @todo stability experimental + */ +ol.View2D.prototype.setZoom = function(zoom) { + var resolution = this.constrainResolution(this.maxResolution_, zoom, 0); + this.setResolution(resolution); +}; + + +/** + * @param {olx.View2DOptions} options View2D options. + * @private + * @return {ol.CenterConstraintType} + */ +ol.View2D.createCenterConstraint_ = function(options) { + if (goog.isDef(options.extent)) { + return ol.CenterConstraint.createExtent(options.extent); + } else { + return ol.CenterConstraint.none; + } +}; + + +/** + * @private + * @param {olx.View2DOptions} options View2D options. + * @return {{constraint: ol.ResolutionConstraintType, maxResolution: number, + * minResolution: number}} + */ +ol.View2D.createResolutionConstraint_ = function(options) { + var resolutionConstraint; + var maxResolution; + var minResolution; + if (goog.isDef(options.resolutions)) { + var resolutions = options.resolutions; + maxResolution = resolutions[0]; + minResolution = resolutions[resolutions.length - 1]; + resolutionConstraint = ol.ResolutionConstraint.createSnapToResolutions( + resolutions); + } else { + maxResolution = options.maxResolution; + if (!goog.isDef(maxResolution)) { + var projection = options.projection; + var projectionExtent = ol.proj.createProjection(projection, 'EPSG:3857') + .getExtent(); + var size = goog.isNull(projectionExtent) ? + // use an extent that can fit the whole world if need be + 360 * ol.proj.METERS_PER_UNIT[ol.proj.Units.DEGREES] / + ol.proj.METERS_PER_UNIT[projection.getUnits()] : + Math.max(projectionExtent[2] - projectionExtent[0], + projectionExtent[3] - projectionExtent[1]); + maxResolution = size / ol.DEFAULT_TILE_SIZE; + } + var maxZoom = options.maxZoom; + if (!goog.isDef(maxZoom)) { + maxZoom = 28; + } + var zoomFactor = options.zoomFactor; + if (!goog.isDef(zoomFactor)) { + zoomFactor = 2; + } + minResolution = maxResolution / Math.pow(zoomFactor, maxZoom); + resolutionConstraint = ol.ResolutionConstraint.createSnapToPower( + zoomFactor, maxResolution, maxZoom); + } + return {constraint: resolutionConstraint, maxResolution: maxResolution, + minResolution: minResolution}; +}; + + +/** + * @private + * @param {olx.View2DOptions} options View2D options. + * @return {ol.RotationConstraintType} Rotation constraint. + */ +ol.View2D.createRotationConstraint_ = function(options) { + var enableRotation = goog.isDef(options.enableRotation) ? + options.enableRotation : true; + if (enableRotation) { + var constrainRotation = options.constrainRotation; + if (!goog.isDef(constrainRotation) || constrainRotation === true) { + return ol.RotationConstraint.createSnapToZero(); + } else if (constrainRotation === false) { + return ol.RotationConstraint.none; + } else if (goog.isNumber(constrainRotation)) { + return ol.RotationConstraint.createSnapToN(constrainRotation); + } else { + goog.asserts.fail(); + return ol.RotationConstraint.none; + } + } else { + return ol.RotationConstraint.disable; + } +}; diff --git a/float-no-zero/ol/ol/webgl/context.exports b/float-no-zero/ol/ol/webgl/context.exports new file mode 100644 index 0000000000..60a3eea651 --- /dev/null +++ b/float-no-zero/ol/ol/webgl/context.exports @@ -0,0 +1,3 @@ +@exportSymbol ol.webgl.Context +@exportProperty ol.webgl.Context.prototype.getGL +@exportProperty ol.webgl.Context.prototype.useProgram diff --git a/float-no-zero/ol/ol/webgl/context.js b/float-no-zero/ol/ol/webgl/context.js new file mode 100644 index 0000000000..bca86a5dc2 --- /dev/null +++ b/float-no-zero/ol/ol/webgl/context.js @@ -0,0 +1,266 @@ +goog.provide('ol.webgl.Context'); + +goog.require('goog.asserts'); +goog.require('goog.events'); +goog.require('goog.log'); +goog.require('goog.object'); +goog.require('ol.structs.Buffer'); +goog.require('ol.structs.IntegerSet'); +goog.require('ol.webgl.WebGLContextEventType'); + + +/** + * @typedef {{buf: ol.structs.Buffer, + * buffer: WebGLBuffer, + * dirtySet: ol.structs.IntegerSet}} + */ +ol.webgl.BufferCacheEntry; + + + +/** + * @constructor + * @extends {goog.events.EventTarget} + * @param {HTMLCanvasElement} canvas Canvas. + * @param {WebGLRenderingContext} gl GL. + */ +ol.webgl.Context = function(canvas, gl) { + + /** + * @private + * @type {HTMLCanvasElement} + */ + this.canvas_ = canvas; + + /** + * @private + * @type {WebGLRenderingContext} + */ + this.gl_ = gl; + + /** + * @private + * @type {Object.} + */ + this.bufferCache_ = {}; + + /** + * @private + * @type {Object.} + */ + this.shaderCache_ = {}; + + /** + * @private + * @type {Object.} + */ + this.programCache_ = {}; + + /** + * @private + * @type {WebGLProgram} + */ + this.currentProgram_ = null; + + goog.events.listen(this.canvas_, ol.webgl.WebGLContextEventType.LOST, + this.handleWebGLContextLost, false, this); + goog.events.listen(this.canvas_, ol.webgl.WebGLContextEventType.RESTORED, + this.handleWebGLContextRestored, false, this); + +}; + + +/** + * @param {number} target Target. + * @param {ol.structs.Buffer} buf Buffer. + */ +ol.webgl.Context.prototype.bindBuffer = function(target, buf) { + var gl = this.getGL(); + var arr = buf.getArray(); + var bufferKey = goog.getUid(buf); + if (bufferKey in this.bufferCache_) { + var bufferCacheEntry = this.bufferCache_[bufferKey]; + gl.bindBuffer(target, bufferCacheEntry.buffer); + bufferCacheEntry.dirtySet.forEachRange(function(start, stop) { + // FIXME check if slice is really efficient here + var slice = arr.slice(start, stop); + gl.bufferSubData( + target, + start, + target == goog.webgl.ARRAY_BUFFER ? + new Float32Array(slice) : + new Uint16Array(slice)); + }); + bufferCacheEntry.dirtySet.clear(); + } else { + var buffer = gl.createBuffer(); + gl.bindBuffer(target, buffer); + gl.bufferData( + target, + target == goog.webgl.ARRAY_BUFFER ? + new Float32Array(arr) : new Uint16Array(arr), + buf.getUsage()); + var dirtySet = new ol.structs.IntegerSet(); + buf.addDirtySet(dirtySet); + this.bufferCache_[bufferKey] = { + buf: buf, + buffer: buffer, + dirtySet: dirtySet + }; + } +}; + + +/** + * @param {ol.structs.Buffer} buf Buffer. + */ +ol.webgl.Context.prototype.deleteBuffer = function(buf) { + var gl = this.getGL(); + var bufferKey = goog.getUid(buf); + goog.asserts.assert(bufferKey in this.bufferCache_); + var bufferCacheEntry = this.bufferCache_[bufferKey]; + bufferCacheEntry.buf.removeDirtySet(bufferCacheEntry.dirtySet); + if (!gl.isContextLost()) { + gl.deleteBuffer(bufferCacheEntry.buffer); + } + delete this.bufferCache_[bufferKey]; +}; + + +/** + * @inheritDoc + */ +ol.webgl.Context.prototype.disposeInternal = function() { + goog.object.forEach(this.bufferCache_, function(bufferCacheEntry) { + bufferCacheEntry.buf.removeDirtySet(bufferCacheEntry.dirtySet); + }); + var gl = this.getGL(); + if (!gl.isContextLost()) { + goog.object.forEach(this.bufferCache_, function(bufferCacheEntry) { + gl.deleteBuffer(bufferCacheEntry.buffer); + }); + goog.object.forEach(this.programCache_, function(program) { + gl.deleteProgram(program); + }); + goog.object.forEach(this.shaderCache_, function(shader) { + gl.deleteShader(shader); + }); + } +}; + + +/** + * @return {HTMLCanvasElement} Canvas. + */ +ol.webgl.Context.prototype.getCanvas = function() { + return this.canvas_; +}; + + +/** + * @return {WebGLRenderingContext} GL. + */ +ol.webgl.Context.prototype.getGL = function() { + return this.gl_; +}; + + +/** + * @param {ol.webgl.Shader} shaderObject Shader object. + * @return {WebGLShader} Shader. + */ +ol.webgl.Context.prototype.getShader = function(shaderObject) { + var shaderKey = goog.getUid(shaderObject); + if (shaderKey in this.shaderCache_) { + return this.shaderCache_[shaderKey]; + } else { + var gl = this.getGL(); + var shader = gl.createShader(shaderObject.getType()); + gl.shaderSource(shader, shaderObject.getSource()); + gl.compileShader(shader); + if (goog.DEBUG) { + if (!gl.getShaderParameter(shader, goog.webgl.COMPILE_STATUS) && + !gl.isContextLost()) { + goog.log.error(this.logger_, gl.getShaderInfoLog(shader)); + } + } + goog.asserts.assert( + gl.getShaderParameter(shader, goog.webgl.COMPILE_STATUS) || + gl.isContextLost()); + this.shaderCache_[shaderKey] = shader; + return shader; + } +}; + + +/** + * @param {ol.webgl.shader.Fragment} fragmentShaderObject Fragment shader. + * @param {ol.webgl.shader.Vertex} vertexShaderObject Vertex shader. + * @return {WebGLProgram} Program. + */ +ol.webgl.Context.prototype.getProgram = function( + fragmentShaderObject, vertexShaderObject) { + var programKey = + goog.getUid(fragmentShaderObject) + '/' + goog.getUid(vertexShaderObject); + if (programKey in this.programCache_) { + return this.programCache_[programKey]; + } else { + var gl = this.getGL(); + var program = gl.createProgram(); + gl.attachShader(program, this.getShader(fragmentShaderObject)); + gl.attachShader(program, this.getShader(vertexShaderObject)); + gl.linkProgram(program); + if (goog.DEBUG) { + if (!gl.getProgramParameter(program, goog.webgl.LINK_STATUS) && + !gl.isContextLost()) { + goog.log.error(this.logger_, gl.getProgramInfoLog(program)); + } + } + goog.asserts.assert( + gl.getProgramParameter(program, goog.webgl.LINK_STATUS) || + gl.isContextLost()); + this.programCache_[programKey] = program; + return program; + } +}; + + +/** + * FIXME empy description for jsdoc + */ +ol.webgl.Context.prototype.handleWebGLContextLost = function() { + goog.object.clear(this.bufferCache_); + goog.object.clear(this.shaderCache_); + goog.object.clear(this.programCache_); + this.currentProgram_ = null; +}; + + +/** + * FIXME empy description for jsdoc + */ +ol.webgl.Context.prototype.handleWebGLContextRestored = function() { +}; + + +/** + * @param {WebGLProgram} program Program. + * @return {boolean} Changed. + */ +ol.webgl.Context.prototype.useProgram = function(program) { + if (program == this.currentProgram_) { + return false; + } else { + var gl = this.getGL(); + gl.useProgram(program); + this.currentProgram_ = program; + return true; + } +}; + + +/** + * @private + * @type {goog.log.Logger} + */ +ol.webgl.Context.prototype.logger_ = goog.log.getLogger('ol.webgl.Context'); diff --git a/float-no-zero/ol/ol/webgl/shader.js b/float-no-zero/ol/ol/webgl/shader.js new file mode 100644 index 0000000000..f9a2271724 --- /dev/null +++ b/float-no-zero/ol/ol/webgl/shader.js @@ -0,0 +1,84 @@ +goog.provide('ol.webgl.shader'); + +goog.require('goog.functions'); +goog.require('goog.webgl'); +goog.require('ol.webgl'); + + + +/** + * @constructor + * @param {string} source Source. + * @struct + */ +ol.webgl.Shader = function(source) { + + /** + * @private + * @type {string} + */ + this.source_ = source; + +}; + + +/** + * @return {number} Type. + */ +ol.webgl.Shader.prototype.getType = goog.abstractMethod; + + +/** + * @return {string} Source. + */ +ol.webgl.Shader.prototype.getSource = function() { + return this.source_; +}; + + +/** + * @return {boolean} Is animated? + */ +ol.webgl.Shader.prototype.isAnimated = goog.functions.FALSE; + + + +/** + * @constructor + * @extends {ol.webgl.Shader} + * @param {string} source Source. + * @struct + */ +ol.webgl.shader.Fragment = function(source) { + goog.base(this, source); +}; +goog.inherits(ol.webgl.shader.Fragment, ol.webgl.Shader); + + +/** + * @inheritDoc + */ +ol.webgl.shader.Fragment.prototype.getType = function() { + return goog.webgl.FRAGMENT_SHADER; +}; + + + +/** + * @constructor + * @extends {ol.webgl.Shader} + * @param {string} source Source. + * @struct + */ +ol.webgl.shader.Vertex = function(source) { + goog.base(this, source); +}; +goog.inherits(ol.webgl.shader.Vertex, ol.webgl.Shader); + + +/** + * @inheritDoc + */ +ol.webgl.shader.Vertex.prototype.getType = function() { + return goog.webgl.VERTEX_SHADER; +}; diff --git a/float-no-zero/ol/ol/webgl/shader.mustache b/float-no-zero/ol/ol/webgl/shader.mustache new file mode 100644 index 0000000000..ed62dc9718 --- /dev/null +++ b/float-no-zero/ol/ol/webgl/shader.mustache @@ -0,0 +1,103 @@ +// This file is automatically generated, do not edit +goog.provide('{{namespace}}'); + +goog.require('ol.webgl.shader'); + + + +/** + * @constructor + * @extends {ol.webgl.shader.Fragment} + * @struct + */ +{{className}}Fragment = function() { + goog.base(this, {{className}}Fragment.SOURCE); +}; +goog.inherits({{className}}Fragment, ol.webgl.shader.Fragment); +goog.addSingletonGetter({{className}}Fragment); + + +/** + * @const + * @type {string} + */ +{{className}}Fragment.DEBUG_SOURCE = 'precision mediump float;\n{{{getOriginalFragmentSource}}}'; + + +/** + * @const + * @type {string} + */ +{{className}}Fragment.OPTIMIZED_SOURCE = 'precision mediump float;{{{getFragmentSource}}}'; + + +/** + * @const + * @type {string} + */ +{{className}}Fragment.SOURCE = goog.DEBUG ? + {{className}}Fragment.DEBUG_SOURCE : + {{className}}Fragment.OPTIMIZED_SOURCE; + + + +/** + * @constructor + * @extends {ol.webgl.shader.Vertex} + * @struct + */ +{{className}}Vertex = function() { + goog.base(this, {{className}}Vertex.SOURCE); +}; +goog.inherits({{className}}Vertex, ol.webgl.shader.Vertex); +goog.addSingletonGetter({{className}}Vertex); + + +/** + * @const + * @type {string} + */ +{{className}}Vertex.DEBUG_SOURCE = '{{{getOriginalVertexSource}}}'; + + +/** + * @const + * @type {string} + */ +{{className}}Vertex.OPTIMIZED_SOURCE = '{{{getVertexSource}}}'; + + +/** + * @const + * @type {string} + */ +{{className}}Vertex.SOURCE = goog.DEBUG ? + {{className}}Vertex.DEBUG_SOURCE : + {{className}}Vertex.OPTIMIZED_SOURCE; + + + +/** + * @constructor + * @param {WebGLRenderingContext} gl GL. + * @param {WebGLProgram} program Program. + * @struct + */ +{{namespace}}.Locations = function(gl, program) { +{{#getUniforms}} + + /** + * @type {WebGLUniformLocation} + */ + this.{{originalName}} = gl.getUniformLocation( + program, goog.DEBUG ? '{{originalName}}' : '{{shortName}}'); +{{/getUniforms}} +{{#getAttributes}} + + /** + * @type {number} + */ + this.{{originalName}} = gl.getAttribLocation( + program, goog.DEBUG ? '{{originalName}}' : '{{shortName}}'); +{{/getAttributes}} +}; diff --git a/float-no-zero/ol/ol/webgl/webgl.js b/float-no-zero/ol/ol/webgl/webgl.js new file mode 100644 index 0000000000..6b39a1edc7 --- /dev/null +++ b/float-no-zero/ol/ol/webgl/webgl.js @@ -0,0 +1,44 @@ +goog.provide('ol.webgl'); +goog.provide('ol.webgl.WebGLContextEventType'); + + +/** + * @const + * @private + * @type {Array.} + */ +ol.webgl.CONTEXT_IDS_ = [ + 'experimental-webgl', + 'webgl', + 'webkit-3d', + 'moz-webgl' +]; + + +/** + * @enum {string} + */ +ol.webgl.WebGLContextEventType = { + LOST: 'webglcontextlost', + RESTORED: 'webglcontextrestored' +}; + + +/** + * @param {HTMLCanvasElement} canvas Canvas. + * @param {Object=} opt_attributes Attributes. + * @return {WebGLRenderingContext} WebGL rendering context. + */ +ol.webgl.getContext = function(canvas, opt_attributes) { + var context, i, ii = ol.webgl.CONTEXT_IDS_.length; + for (i = 0; i < ii; ++i) { + try { + context = canvas.getContext(ol.webgl.CONTEXT_IDS_[i], opt_attributes); + if (!goog.isNull(context)) { + return /** @type {!WebGLRenderingContext} */ (context); + } + } catch (e) { + } + } + return null; +}; diff --git a/float-no-zero/ol/ol/xml.js b/float-no-zero/ol/ol/xml.js new file mode 100644 index 0000000000..89d0042ed3 --- /dev/null +++ b/float-no-zero/ol/ol/xml.js @@ -0,0 +1,710 @@ +// FIXME Remove ol.xml.makeParsersNS, and use ol.xml.makeStructureNS instead. + +goog.provide('ol.xml'); + +goog.require('goog.array'); +goog.require('goog.asserts'); +goog.require('goog.dom.NodeType'); +goog.require('goog.dom.xml'); +goog.require('goog.object'); +goog.require('goog.userAgent'); + + +/** + * When using {@link ol.xml.makeChildAppender} or + * {@link ol.xml.makeSimpleNodeFactory}, the top `objectStack` item needs to + * have this structure. + * @typedef {{node:Node}} + */ +ol.xml.NodeStackItem; + + +/** + * @typedef {function(Node, Array.<*>)} + */ +ol.xml.Parser; + + +/** + * @typedef {function(Node, *, Array.<*>)} + */ +ol.xml.Serializer; + + +/** + * This document should be used when creating nodes for XML serializations. This + * document is also used by {@link ol.xml.createElementNS} and + * {@link ol.xml.setAttributeNS} + * @const + * @type {Document} + */ +ol.xml.DOCUMENT = goog.dom.xml.createDocument(); + + +/** + * @param {string} namespaceURI Namespace URI. + * @param {string} qualifiedName Qualified name. + * @return {Node} Node. + * @private + */ +ol.xml.createElementNS_ = function(namespaceURI, qualifiedName) { + return ol.xml.DOCUMENT.createElementNS(namespaceURI, qualifiedName); +}; + + +/** + * @param {string} namespaceURI Namespace URI. + * @param {string} qualifiedName Qualified name. + * @return {Node} Node. + * @private + */ +ol.xml.createElementNSActiveX_ = function(namespaceURI, qualifiedName) { + if (goog.isNull(namespaceURI)) { + namespaceURI = ''; + } + return ol.xml.DOCUMENT.createNode(1, qualifiedName, namespaceURI); +}; + + +/** + * @param {string} namespaceURI Namespace URI. + * @param {string} qualifiedName Qualified name. + * @return {Node} Node. + */ +ol.xml.createElementNS = + (document.implementation && document.implementation.createDocument) ? + ol.xml.createElementNS_ : ol.xml.createElementNSActiveX_; + + +/** + * @param {Node} node Node. + * @param {boolean} normalizeWhitespace Normalize whitespace. + * @return {string} All text content. + */ +ol.xml.getAllTextContent = function(node, normalizeWhitespace) { + return ol.xml.getAllTextContent_(node, normalizeWhitespace, []).join(''); +}; + + +/** + * @param {Node} node Node. + * @param {boolean} normalizeWhitespace Normalize whitespace. + * @param {Array.} accumulator Accumulator. + * @private + * @return {Array.} Accumulator. + */ +ol.xml.getAllTextContent_ = function(node, normalizeWhitespace, accumulator) { + if (node.nodeType == goog.dom.NodeType.CDATA_SECTION || + node.nodeType == goog.dom.NodeType.TEXT) { + if (normalizeWhitespace) { + // FIXME understand why goog.dom.getTextContent_ uses String here + accumulator.push(String(node.nodeValue).replace(/(\r\n|\r|\n)/g, '')); + } else { + accumulator.push(node.nodeValue); + } + } else { + var n; + for (n = node.firstChild; !goog.isNull(n); n = n.nextSibling) { + ol.xml.getAllTextContent_(n, normalizeWhitespace, accumulator); + } + } + return accumulator; +}; + + +/** + * @param {Node} node Node. + * @private + * @return {string} Local name. + */ +ol.xml.getLocalName_ = function(node) { + return node.localName; +}; + + +/** + * @param {Node} node Node. + * @private + * @return {string} Local name. + */ +ol.xml.getLocalNameIE_ = function(node) { + var localName = node.localName; + if (goog.isDef(localName)) { + return localName; + } + var baseName = node.baseName; + goog.asserts.assert(goog.isDefAndNotNull(baseName)); + return baseName; +}; + + +/** + * @param {Node} node Node. + * @return {string} Local name. + */ +ol.xml.getLocalName = goog.userAgent.IE ? + ol.xml.getLocalNameIE_ : ol.xml.getLocalName_; + + +/** + * @param {?} value Value. + * @private + * @return {boolean} Is document. + */ +ol.xml.isDocument_ = function(value) { + return value instanceof Document; +}; + + +/** + * @param {?} value Value. + * @private + * @return {boolean} Is document. + */ +ol.xml.isDocumentIE_ = function(value) { + return goog.isObject(value) && value.nodeType == goog.dom.NodeType.DOCUMENT; +}; + + +/** + * @param {?} value Value. + * @return {boolean} Is document. + */ +ol.xml.isDocument = goog.userAgent.IE ? + ol.xml.isDocumentIE_ : ol.xml.isDocument_; + + +/** + * @param {?} value Value. + * @private + * @return {boolean} Is node. + */ +ol.xml.isNode_ = function(value) { + return value instanceof Node; +}; + + +/** + * @param {?} value Value. + * @private + * @return {boolean} Is node. + */ +ol.xml.isNodeIE_ = function(value) { + return goog.isObject(value) && goog.isDef(value.nodeType); +}; + + +/** + * @param {?} value Value. + * @return {boolean} Is node. + */ +ol.xml.isNode = goog.userAgent.IE ? ol.xml.isNodeIE_ : ol.xml.isNode_; + + +/** + * @param {Node} node Node. + * @param {?string} namespaceURI Namespace URI. + * @param {string} name Attribute name. + * @return {string} Value + * @private + */ +ol.xml.getAttributeNS_ = function(node, namespaceURI, name) { + return node.getAttributeNS(namespaceURI, name) || ''; +}; + + +/** + * @param {Node} node Node. + * @param {?string} namespaceURI Namespace URI. + * @param {string} name Attribute name. + * @return {string} Value + * @private + */ +ol.xml.getAttributeNSActiveX_ = function(node, namespaceURI, name) { + var attributeValue = ''; + var attributeNode = ol.xml.getAttributeNodeNS(node, namespaceURI, name); + if (goog.isDef(attributeNode)) { + attributeValue = attributeNode.nodeValue; + } + return attributeValue; +}; + + +/** + * @param {Node} node Node. + * @param {?string} namespaceURI Namespace URI. + * @param {string} name Attribute name. + * @return {string} Value + */ +ol.xml.getAttributeNS = + (document.implementation && document.implementation.createDocument) ? + ol.xml.getAttributeNS_ : ol.xml.getAttributeNSActiveX_; + + +/** + * @param {Node} node Node. + * @param {?string} namespaceURI Namespace URI. + * @param {string} name Attribute name. + * @return {?Node} Attribute node or null if none found. + * @private + */ +ol.xml.getAttributeNodeNS_ = function(node, namespaceURI, name) { + return node.getAttributeNodeNS(namespaceURI, name); +}; + + +/** + * @param {Node} node Node. + * @param {?string} namespaceURI Namespace URI. + * @param {string} name Attribute name. + * @return {?Node} Attribute node or null if none found. + * @private + */ +ol.xml.getAttributeNodeNSActiveX_ = function(node, namespaceURI, name) { + var attributeNode = null; + var attributes = node.attributes; + var potentialNode, fullName; + for (var i = 0, len = attributes.length; i < len; ++i) { + potentialNode = attributes[i]; + if (potentialNode.namespaceURI == namespaceURI) { + fullName = (potentialNode.prefix) ? + (potentialNode.prefix + ':' + name) : name; + if (fullName == potentialNode.nodeName) { + attributeNode = potentialNode; + break; + } + } + } + return attributeNode; +}; + + +/** + * @param {Node} node Node. + * @param {?string} namespaceURI Namespace URI. + * @param {string} name Attribute name. + * @return {?Node} Attribute node or null if none found. + */ +ol.xml.getAttributeNodeNS = + (document.implementation && document.implementation.createDocument) ? + ol.xml.getAttributeNodeNS_ : ol.xml.getAttributeNodeNSActiveX_; + + +/** + * @param {Node} node Node. + * @param {?string} namespaceURI Namespace URI. + * @param {string} name Attribute name. + * @param {string|number} value Value. + * @private + */ +ol.xml.setAttributeNS_ = function(node, namespaceURI, name, value) { + node.setAttributeNS(namespaceURI, name, value); +}; + + +/** + * @param {Node} node Node. + * @param {?string} namespaceURI Namespace URI. + * @param {string} name Attribute name. + * @param {string|number} value Value. + * @private + */ +ol.xml.setAttributeNSActiveX_ = function(node, namespaceURI, name, value) { + if (!goog.isNull(namespaceURI)) { + var attribute = node.ownerDocument.createNode(2, name, namespaceURI); + attribute.nodeValue = value; + node.setAttributeNode(attribute); + } else { + node.setAttribute(name, value); + } +}; + + +/** + * @param {Node} node Node. + * @param {?string} namespaceURI Namespace URI. + * @param {string} name Attribute name. + * @param {string|number} value Value. + */ +ol.xml.setAttributeNS = + (document.implementation && document.implementation.createDocument) ? + ol.xml.setAttributeNS_ : ol.xml.setAttributeNSActiveX_; + + +/** + * @param {string} xml XML. + * @return {Document} Document. + */ +ol.xml.load = function(xml) { + return new DOMParser().parseFromString(xml, 'application/xml'); +}; + + +/** + * @param {function(this: T, Node, Array.<*>): (Array.<*>|undefined)} + * valueReader Value reader. + * @param {T=} opt_this The object to use as `this` in `valueReader`. + * @return {ol.xml.Parser} Parser. + * @template T + */ +ol.xml.makeArrayExtender = function(valueReader, opt_this) { + return ( + /** + * @param {Node} node Node. + * @param {Array.<*>} objectStack Object stack. + */ + function(node, objectStack) { + var value = valueReader.call(opt_this, node, objectStack); + if (goog.isDef(value)) { + goog.asserts.assert(goog.isArray(value)); + var array = /** @type {Array.<*>} */ + (objectStack[objectStack.length - 1]); + goog.asserts.assert(goog.isArray(array)); + goog.array.extend(array, value); + } + }); +}; + + +/** + * @param {function(this: T, Node, Array.<*>): *} valueReader Value reader. + * @param {T=} opt_this The object to use as `this` in `valueReader`. + * @return {ol.xml.Parser} Parser. + * @template T + */ +ol.xml.makeArrayPusher = function(valueReader, opt_this) { + return ( + /** + * @param {Node} node Node. + * @param {Array.<*>} objectStack Object stack. + */ + function(node, objectStack) { + var value = valueReader.call(opt_this, node, objectStack); + if (goog.isDef(value)) { + var array = objectStack[objectStack.length - 1]; + goog.asserts.assert(goog.isArray(array)); + array.push(value); + } + }); +}; + + +/** + * @param {function(this: T, Node, Array.<*>): *} valueReader Value reader. + * @param {T=} opt_this The object to use as `this` in `valueReader`. + * @return {ol.xml.Parser} Parser. + * @template T + */ +ol.xml.makeReplacer = function(valueReader, opt_this) { + return ( + /** + * @param {Node} node Node. + * @param {Array.<*>} objectStack Object stack. + */ + function(node, objectStack) { + var value = valueReader.call(opt_this, node, objectStack); + if (goog.isDef(value)) { + objectStack[objectStack.length - 1] = value; + } + }); +}; + + +/** + * @param {function(this: T, Node, Array.<*>): *} valueReader Value reader. + * @param {string=} opt_property Property. + * @param {T=} opt_this The object to use as `this` in `valueReader`. + * @return {ol.xml.Parser} Parser. + * @template T + */ +ol.xml.makeObjectPropertySetter = + function(valueReader, opt_property, opt_this) { + goog.asserts.assert(goog.isDef(valueReader)); + return ( + /** + * @param {Node} node Node. + * @param {Array.<*>} objectStack Object stack. + */ + function(node, objectStack) { + var value = valueReader.call(opt_this, node, objectStack); + if (goog.isDef(value)) { + var object = /** @type {Object} */ + (objectStack[objectStack.length - 1]); + var property = goog.isDef(opt_property) ? + opt_property : node.localName; + goog.asserts.assert(goog.isObject(object)); + goog.object.set(object, property, value); + } + }); +}; + + +/** + * @param {Array.} namespaceURIs Namespace URIs. + * @param {Object.} parsers Parsers. + * @param {Object.>=} opt_parsersNS + * ParsersNS. + * @return {Object.>} Parsers NS. + */ +ol.xml.makeParsersNS = function(namespaceURIs, parsers, opt_parsersNS) { + return /** @type {Object.>} */ ( + ol.xml.makeStructureNS(namespaceURIs, parsers, opt_parsersNS)); +}; + + +/** + * Creates a serializer that appends nodes written by its `nodeWriter` to its + * designated parent. The parent is the `node` of the + * {@link ol.xml.NodeStackItem} at the top of the `objectStack`. + * @param {function(this: T, Node, V, Array.<*>)} + * nodeWriter Node writer. + * @param {T=} opt_this The object to use as `this` in `nodeWriter`. + * @return {ol.xml.Serializer} Serializer. + * @template T, V + */ +ol.xml.makeChildAppender = function(nodeWriter, opt_this) { + return function(node, value, objectStack) { + nodeWriter.call(opt_this, node, value, objectStack); + var parent = objectStack[objectStack.length - 1]; + goog.asserts.assert(goog.isObject(parent)); + var parentNode = parent.node; + goog.asserts.assert(ol.xml.isNode(parentNode) || + ol.xml.isDocument(parentNode)); + parentNode.appendChild(node); + }; +}; + + +/** + * Creates a serializer that calls the provided `nodeWriter` from + * {@link ol.xml.serialize}. This can be used by the parent writer to have the + * 'nodeWriter' called with an array of values when the `nodeWriter` was + * designed to serialize a single item. An example would be a LineString + * geometry writer, which could be reused for writing MultiLineString + * geometries. + * @param {function(this: T, Node, V, Array.<*>)} + * nodeWriter Node writer. + * @param {T=} opt_this The object to use as `this` in `nodeWriter`. + * @return {ol.xml.Serializer} Serializer. + * @template T, V + */ +ol.xml.makeArraySerializer = function(nodeWriter, opt_this) { + var serializersNS, nodeFactory; + return function(node, value, objectStack) { + if (!goog.isDef(serializersNS)) { + serializersNS = {}; + var serializers = {}; + goog.object.set(serializers, node.localName, nodeWriter); + goog.object.set(serializersNS, node.namespaceURI, serializers); + nodeFactory = ol.xml.makeSimpleNodeFactory(node.localName); + } + ol.xml.serialize(serializersNS, nodeFactory, value, objectStack); + }; +}; + + +/** + * Creates a node factory which can use the `opt_keys` passed to + * {@link ol.xml.serialize} or {@link ol.xml.pushSerializeAndPop} as node names, + * or a fixed node name. The namespace of the created nodes can either be fixed, + * or the parent namespace will be used. + * @param {string=} opt_nodeName Fixed node name which will be used for all + * created nodes. If not provided, the 3rd argument to the resulting node + * factory needs to be provided and will be the nodeName. + * @param {string=} opt_namespaceURI Fixed namespace URI which will be used for + * all created nodes. If not provided, the namespace of the parent node will + * be used. + * @return {function(*, Array.<*>, string=): (Node|undefined)} Node factory. + */ +ol.xml.makeSimpleNodeFactory = function(opt_nodeName, opt_namespaceURI) { + var fixedNodeName = opt_nodeName; + return ( + /** + * @param {*} value Value. + * @param {Array.<*>} objectStack Object stack. + * @param {string=} opt_nodeName Node name. + * @return {Node} Node. + */ + function(value, objectStack, opt_nodeName) { + var context = objectStack[objectStack.length - 1]; + var node = context.node; + goog.asserts.assert(ol.xml.isNode(node) || ol.xml.isDocument(node)); + var nodeName = fixedNodeName; + if (!goog.isDef(nodeName)) { + nodeName = opt_nodeName; + } + var namespaceURI = opt_namespaceURI; + if (!goog.isDef(opt_namespaceURI)) { + namespaceURI = node.namespaceURI; + } + goog.asserts.assert(goog.isDef(nodeName)); + return ol.xml.createElementNS(namespaceURI, nodeName); + } + ); +}; + + +/** + * A node factory that creates a node using the parent's `namespaceURI` and the + * `nodeName` passed by {@link ol.xml.serialize} or + * {@link ol.xml.pushSerializeAndPop} to the node factory. + * @const + * @type {function(*, Array.<*>, string=): (Node|undefined)} + */ +ol.xml.OBJECT_PROPERTY_NODE_FACTORY = ol.xml.makeSimpleNodeFactory(); + + +/** + * Creates an array of `values` to be used with {@link ol.xml.serialize} or + * {@link ol.xml.pushSerializeAndPop}, where `orderedKeys` has to be provided as + * `opt_key` argument. + * @param {Object.} object Key-value pairs for the sequence. Keys can + * be a subset of the `orderedKeys`. + * @param {Array.} orderedKeys Keys in the order of the sequence. + * @return {Array.} Values in the order of the sequence. The resulting array + * has the same length as the `orderedKeys` array. Values that are not + * present in `object` will be `undefined` in the resulting array. + * @template V + */ +ol.xml.makeSequence = function(object, orderedKeys) { + var length = orderedKeys.length; + var sequence = new Array(length); + for (var i = 0; i < length; ++i) { + sequence[i] = object[orderedKeys[i]]; + } + return sequence; +}; + + +/** + * Creates a namespaced structure, using the same values for each namespace. + * This can be used as a starting point for versioned parsers, when only a few + * values are version specific. + * @param {Array.} namespaceURIs Namespace URIs. + * @param {T} structure Structure. + * @param {Object.=} opt_structureNS Namespaced structure to add to. + * @return {Object.} Namespaced structure. + * @template T + */ +ol.xml.makeStructureNS = function(namespaceURIs, structure, opt_structureNS) { + /** + * @type {Object.} + */ + var structureNS = goog.isDef(opt_structureNS) ? opt_structureNS : {}; + var i, ii; + for (i = 0, ii = namespaceURIs.length; i < ii; ++i) { + structureNS[namespaceURIs[i]] = structure; + } + return structureNS; +}; + + +/** + * @param {Object.>} parsersNS + * Parsers by namespace. + * @param {Node} node Node. + * @param {Array.<*>} objectStack Object stack. + * @param {*=} opt_this The object to use as `this`. + */ +ol.xml.parse = function(parsersNS, node, objectStack, opt_this) { + var n; + for (n = node.firstElementChild; !goog.isNull(n); n = n.nextElementSibling) { + var parsers = parsersNS[n.namespaceURI]; + if (goog.isDef(parsers)) { + var parser = parsers[n.localName]; + if (goog.isDef(parser)) { + parser.call(opt_this, n, objectStack); + } + } + } +}; + + +/** + * @param {T} object Object. + * @param {Object.>} parsersNS + * Parsers by namespace. + * @param {Node} node Node. + * @param {Array.<*>} objectStack Object stack. + * @param {*=} opt_this The object to use as `this`. + * @return {T|undefined} Object. + * @template T + */ +ol.xml.pushParseAndPop = function( + object, parsersNS, node, objectStack, opt_this) { + objectStack.push(object); + ol.xml.parse(parsersNS, node, objectStack, opt_this); + return objectStack.pop(); +}; + + +/** + * Walks through an array of `values` and calls a serializer for each value. + * @param {Object.>} serializersNS + * Namespaced serializers. + * @param {function(this: T, *, Array.<*>, (string|undefined)): (Node|undefined)} nodeFactory + * Node factory. The `nodeFactory` creates the node whose namespace and name + * will be used to choose a node writer from `serializersNS`. This + * separation allows us to decide what kind of node to create, depending on + * the value we want to serialize. An example for this would be different + * geometry writers based on the geometry type. + * @param {Array.<*>} values Values to serialize. An example would be an array + * of {@link ol.Feature} instances. + * @param {Array.<*>} objectStack Node stack. + * @param {Array.=} opt_keys Keys of the `values`. Will be passed to the + * `nodeFactory`. This is used for serializing object literals where the + * node name relates to the property key. The array length of `opt_keys` has + * to match the length of `values`. For serializing a sequence, `opt_keys` + * determines the order of the sequence. + * @param {T=} opt_this The object to use as `this` for the node factory and + * serializers. + * @template T + */ +ol.xml.serialize = function( + serializersNS, nodeFactory, values, objectStack, opt_keys, opt_this) { + var length = (goog.isDef(opt_keys) ? opt_keys : values).length; + var value, node; + for (var i = 0; i < length; ++i) { + value = values[i]; + if (goog.isDef(value)) { + node = nodeFactory.call(opt_this, value, objectStack, + goog.isDef(opt_keys) ? opt_keys[i] : undefined); + if (goog.isDef(node)) { + serializersNS[node.namespaceURI][node.localName] + .call(opt_this, node, value, objectStack); + } + } + } +}; + + +/** + * @param {O} object Object. + * @param {Object.>} serializersNS + * Namespaced serializers. + * @param {function(this: T, *, Array.<*>, (string|undefined)): (Node|undefined)} nodeFactory + * Node factory. The `nodeFactory` creates the node whose namespace and name + * will be used to choose a node writer from `serializersNS`. This + * separation allows us to decide what kind of node to create, depending on + * the value we want to serialize. An example for this would be different + * geometry writers based on the geometry type. + * @param {Array.<*>} values Values to serialize. An example would be an array + * of {@link ol.Feature} instances. + * @param {Array.<*>} objectStack Node stack. + * @param {Array.=} opt_keys Keys of the `values`. Will be passed to the + * `nodeFactory`. This is used for serializing object literals where the + * node name relates to the property key. The array length of `opt_keys` has + * to match the length of `values`. For serializing a sequence, `opt_keys` + * determines the order of the sequence. + * @param {T=} opt_this The object to use as `this` for the node factory and + * serializers. + * @return {O|undefined} Object. + * @template O, T + */ +ol.xml.pushSerializeAndPop = function(object, + serializersNS, nodeFactory, values, objectStack, opt_keys, opt_this) { + objectStack.push(object); + ol.xml.serialize( + serializersNS, nodeFactory, values, objectStack, opt_keys, opt_this); + return objectStack.pop(); +}; diff --git a/float-no-zero/resources/bootstrap/css/bootstrap-responsive.css b/float-no-zero/resources/bootstrap/css/bootstrap-responsive.css new file mode 100644 index 0000000000..fcd72f7a77 --- /dev/null +++ b/float-no-zero/resources/bootstrap/css/bootstrap-responsive.css @@ -0,0 +1,1109 @@ +/*! + * Bootstrap Responsive v2.3.1 + * + * Copyright 2012 Twitter, Inc + * Licensed under the Apache License v2.0 + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Designed and built with all the love in the world @twitter by @mdo and @fat. + */ + +.clearfix { + *zoom: 1; +} + +.clearfix:before, +.clearfix:after { + display: table; + line-height: 0; + content: ""; +} + +.clearfix:after { + clear: both; +} + +.hide-text { + font: 0/0 a; + color: transparent; + text-shadow: none; + background-color: transparent; + border: 0; +} + +.input-block-level { + display: block; + width: 100%; + min-height: 30px; + -webkit-box-sizing: border-box; + -moz-box-sizing: border-box; + box-sizing: border-box; +} + +@-ms-viewport { + width: device-width; +} + +.hidden { + display: none; + visibility: hidden; +} + +.visible-phone { + display: none !important; +} + +.visible-tablet { + display: none !important; +} + +.hidden-desktop { + display: none !important; +} + +.visible-desktop { + display: inherit !important; +} + +@media (min-width: 768px) and (max-width: 979px) { + .hidden-desktop { + display: inherit !important; + } + .visible-desktop { + display: none !important ; + } + .visible-tablet { + display: inherit !important; + } + .hidden-tablet { + display: none !important; + } +} + +@media (max-width: 767px) { + .hidden-desktop { + display: inherit !important; + } + .visible-desktop { + display: none !important; + } + .visible-phone { + display: inherit !important; + } + .hidden-phone { + display: none !important; + } +} + +.visible-print { + display: none !important; +} + +@media print { + .visible-print { + display: inherit !important; + } + .hidden-print { + display: none !important; + } +} + +@media (min-width: 1200px) { + .row { + margin-left: -30px; + *zoom: 1; + } + .row:before, + .row:after { + display: table; + line-height: 0; + content: ""; + } + .row:after { + clear: both; + } + [class*="span"] { + float: left; + min-height: 1px; + margin-left: 30px; + } + .container, + .navbar-static-top .container, + .navbar-fixed-top .container, + .navbar-fixed-bottom .container { + width: 1170px; + } + .span12 { + width: 1170px; + } + .span11 { + width: 1070px; + } + .span10 { + width: 970px; + } + .span9 { + width: 870px; + } + .span8 { + width: 770px; + } + .span7 { + width: 670px; + } + .span6 { + width: 570px; + } + .span5 { + width: 470px; + } + .span4 { + width: 370px; + } + .span3 { + width: 270px; + } + .span2 { + width: 170px; + } + .span1 { + width: 70px; + } + .offset12 { + margin-left: 1230px; + } + .offset11 { + margin-left: 1130px; + } + .offset10 { + margin-left: 1030px; + } + .offset9 { + margin-left: 930px; + } + .offset8 { + margin-left: 830px; + } + .offset7 { + margin-left: 730px; + } + .offset6 { + margin-left: 630px; + } + .offset5 { + margin-left: 530px; + } + .offset4 { + margin-left: 430px; + } + .offset3 { + margin-left: 330px; + } + .offset2 { + margin-left: 230px; + } + .offset1 { + margin-left: 130px; + } + .row-fluid { + width: 100%; + *zoom: 1; + } + .row-fluid:before, + .row-fluid:after { + display: table; + line-height: 0; + content: ""; + } + .row-fluid:after { + clear: both; + } + .row-fluid [class*="span"] { + display: block; + float: left; + width: 100%; + min-height: 30px; + margin-left: 2.564102564102564%; + *margin-left: 2.5109110747408616%; + -webkit-box-sizing: border-box; + -moz-box-sizing: border-box; + box-sizing: border-box; + } + .row-fluid [class*="span"]:first-child { + margin-left: 0; + } + .row-fluid .controls-row [class*="span"] + [class*="span"] { + margin-left: 2.564102564102564%; + } + .row-fluid .span12 { + width: 100%; + *width: 99.94680851063829%; + } + .row-fluid .span11 { + width: 91.45299145299145%; + *width: 91.39979996362975%; + } + .row-fluid .span10 { + width: 82.90598290598291%; + *width: 82.8527914166212%; + } + .row-fluid .span9 { + width: 74.35897435897436%; + *width: 74.30578286961266%; + } + .row-fluid .span8 { + width: 65.81196581196582%; + *width: 65.75877432260411%; + } + .row-fluid .span7 { + width: 57.26495726495726%; + *width: 57.21176577559556%; + } + .row-fluid .span6 { + width: 48.717948717948715%; + *width: 48.664757228587014%; + } + .row-fluid .span5 { + width: 40.17094017094017%; + *width: 40.11774868157847%; + } + .row-fluid .span4 { + width: 31.623931623931625%; + *width: 31.570740134569924%; + } + .row-fluid .span3 { + width: 23.076923076923077%; + *width: 23.023731587561375%; + } + .row-fluid .span2 { + width: 14.52991452991453%; + *width: 14.476723040552828%; + } + .row-fluid .span1 { + width: 5.982905982905983%; + *width: 5.929714493544281%; + } + .row-fluid .offset12 { + margin-left: 105.12820512820512%; + *margin-left: 105.02182214948171%; + } + .row-fluid .offset12:first-child { + margin-left: 102.56410256410257%; + *margin-left: 102.45771958537915%; + } + .row-fluid .offset11 { + margin-left: 96.58119658119658%; + *margin-left: 96.47481360247316%; + } + .row-fluid .offset11:first-child { + margin-left: 94.01709401709402%; + *margin-left: 93.91071103837061%; + } + .row-fluid .offset10 { + margin-left: 88.03418803418803%; + *margin-left: 87.92780505546462%; + } + .row-fluid .offset10:first-child { + margin-left: 85.47008547008548%; + *margin-left: 85.36370249136206%; + } + .row-fluid .offset9 { + margin-left: 79.48717948717949%; + *margin-left: 79.38079650845607%; + } + .row-fluid .offset9:first-child { + margin-left: 76.92307692307693%; + *margin-left: 76.81669394435352%; + } + .row-fluid .offset8 { + margin-left: 70.94017094017094%; + *margin-left: 70.83378796144753%; + } + .row-fluid .offset8:first-child { + margin-left: 68.37606837606839%; + *margin-left: 68.26968539734497%; + } + .row-fluid .offset7 { + margin-left: 62.393162393162385%; + *margin-left: 62.28677941443899%; + } + .row-fluid .offset7:first-child { + margin-left: 59.82905982905982%; + *margin-left: 59.72267685033642%; + } + .row-fluid .offset6 { + margin-left: 53.84615384615384%; + *margin-left: 53.739770867430444%; + } + .row-fluid .offset6:first-child { + margin-left: 51.28205128205128%; + *margin-left: 51.175668303327875%; + } + .row-fluid .offset5 { + margin-left: 45.299145299145295%; + *margin-left: 45.1927623204219%; + } + .row-fluid .offset5:first-child { + margin-left: 42.73504273504273%; + *margin-left: 42.62865975631933%; + } + .row-fluid .offset4 { + margin-left: 36.75213675213675%; + *margin-left: 36.645753773413354%; + } + .row-fluid .offset4:first-child { + margin-left: 34.18803418803419%; + *margin-left: 34.081651209310785%; + } + .row-fluid .offset3 { + margin-left: 28.205128205128204%; + *margin-left: 28.0987452264048%; + } + .row-fluid .offset3:first-child { + margin-left: 25.641025641025642%; + *margin-left: 25.53464266230224%; + } + .row-fluid .offset2 { + margin-left: 19.65811965811966%; + *margin-left: 19.551736679396257%; + } + .row-fluid .offset2:first-child { + margin-left: 17.094017094017094%; + *margin-left: 16.98763411529369%; + } + .row-fluid .offset1 { + margin-left: 11.11111111111111%; + *margin-left: 11.004728132387708%; + } + .row-fluid .offset1:first-child { + margin-left: 8.547008547008547%; + *margin-left: 8.440625568285142%; + } + input, + textarea, + .uneditable-input { + margin-left: 0; + } + .controls-row [class*="span"] + [class*="span"] { + margin-left: 30px; + } + input.span12, + textarea.span12, + .uneditable-input.span12 { + width: 1156px; + } + input.span11, + textarea.span11, + .uneditable-input.span11 { + width: 1056px; + } + input.span10, + textarea.span10, + .uneditable-input.span10 { + width: 956px; + } + input.span9, + textarea.span9, + .uneditable-input.span9 { + width: 856px; + } + input.span8, + textarea.span8, + .uneditable-input.span8 { + width: 756px; + } + input.span7, + textarea.span7, + .uneditable-input.span7 { + width: 656px; + } + input.span6, + textarea.span6, + .uneditable-input.span6 { + width: 556px; + } + input.span5, + textarea.span5, + .uneditable-input.span5 { + width: 456px; + } + input.span4, + textarea.span4, + .uneditable-input.span4 { + width: 356px; + } + input.span3, + textarea.span3, + .uneditable-input.span3 { + width: 256px; + } + input.span2, + textarea.span2, + .uneditable-input.span2 { + width: 156px; + } + input.span1, + textarea.span1, + .uneditable-input.span1 { + width: 56px; + } + .thumbnails { + margin-left: -30px; + } + .thumbnails > li { + margin-left: 30px; + } + .row-fluid .thumbnails { + margin-left: 0; + } +} + +@media (min-width: 768px) and (max-width: 979px) { + .row { + margin-left: -20px; + *zoom: 1; + } + .row:before, + .row:after { + display: table; + line-height: 0; + content: ""; + } + .row:after { + clear: both; + } + [class*="span"] { + float: left; + min-height: 1px; + margin-left: 20px; + } + .container, + .navbar-static-top .container, + .navbar-fixed-top .container, + .navbar-fixed-bottom .container { + width: 724px; + } + .span12 { + width: 724px; + } + .span11 { + width: 662px; + } + .span10 { + width: 600px; + } + .span9 { + width: 538px; + } + .span8 { + width: 476px; + } + .span7 { + width: 414px; + } + .span6 { + width: 352px; + } + .span5 { + width: 290px; + } + .span4 { + width: 228px; + } + .span3 { + width: 166px; + } + .span2 { + width: 104px; + } + .span1 { + width: 42px; + } + .offset12 { + margin-left: 764px; + } + .offset11 { + margin-left: 702px; + } + .offset10 { + margin-left: 640px; + } + .offset9 { + margin-left: 578px; + } + .offset8 { + margin-left: 516px; + } + .offset7 { + margin-left: 454px; + } + .offset6 { + margin-left: 392px; + } + .offset5 { + margin-left: 330px; + } + .offset4 { + margin-left: 268px; + } + .offset3 { + margin-left: 206px; + } + .offset2 { + margin-left: 144px; + } + .offset1 { + margin-left: 82px; + } + .row-fluid { + width: 100%; + *zoom: 1; + } + .row-fluid:before, + .row-fluid:after { + display: table; + line-height: 0; + content: ""; + } + .row-fluid:after { + clear: both; + } + .row-fluid [class*="span"] { + display: block; + float: left; + width: 100%; + min-height: 30px; + margin-left: 2.7624309392265194%; + *margin-left: 2.709239449864817%; + -webkit-box-sizing: border-box; + -moz-box-sizing: border-box; + box-sizing: border-box; + } + .row-fluid [class*="span"]:first-child { + margin-left: 0; + } + .row-fluid .controls-row [class*="span"] + [class*="span"] { + margin-left: 2.7624309392265194%; + } + .row-fluid .span12 { + width: 100%; + *width: 99.94680851063829%; + } + .row-fluid .span11 { + width: 91.43646408839778%; + *width: 91.38327259903608%; + } + .row-fluid .span10 { + width: 82.87292817679558%; + *width: 82.81973668743387%; + } + .row-fluid .span9 { + width: 74.30939226519337%; + *width: 74.25620077583166%; + } + .row-fluid .span8 { + width: 65.74585635359117%; + *width: 65.69266486422946%; + } + .row-fluid .span7 { + width: 57.18232044198895%; + *width: 57.12912895262725%; + } + .row-fluid .span6 { + width: 48.61878453038674%; + *width: 48.56559304102504%; + } + .row-fluid .span5 { + width: 40.05524861878453%; + *width: 40.00205712942283%; + } + .row-fluid .span4 { + width: 31.491712707182323%; + *width: 31.43852121782062%; + } + .row-fluid .span3 { + width: 22.92817679558011%; + *width: 22.87498530621841%; + } + .row-fluid .span2 { + width: 14.3646408839779%; + *width: 14.311449394616199%; + } + .row-fluid .span1 { + width: 5.801104972375691%; + *width: 5.747913483013988%; + } + .row-fluid .offset12 { + margin-left: 105.52486187845304%; + *margin-left: 105.41847889972962%; + } + .row-fluid .offset12:first-child { + margin-left: 102.76243093922652%; + *margin-left: 102.6560479605031%; + } + .row-fluid .offset11 { + margin-left: 96.96132596685082%; + *margin-left: 96.8549429881274%; + } + .row-fluid .offset11:first-child { + margin-left: 94.1988950276243%; + *margin-left: 94.09251204890089%; + } + .row-fluid .offset10 { + margin-left: 88.39779005524862%; + *margin-left: 88.2914070765252%; + } + .row-fluid .offset10:first-child { + margin-left: 85.6353591160221%; + *margin-left: 85.52897613729868%; + } + .row-fluid .offset9 { + margin-left: 79.8342541436464%; + *margin-left: 79.72787116492299%; + } + .row-fluid .offset9:first-child { + margin-left: 77.07182320441989%; + *margin-left: 76.96544022569647%; + } + .row-fluid .offset8 { + margin-left: 71.2707182320442%; + *margin-left: 71.16433525332079%; + } + .row-fluid .offset8:first-child { + margin-left: 68.50828729281768%; + *margin-left: 68.40190431409427%; + } + .row-fluid .offset7 { + margin-left: 62.70718232044199%; + *margin-left: 62.600799341718584%; + } + .row-fluid .offset7:first-child { + margin-left: 59.94475138121547%; + *margin-left: 59.838368402492065%; + } + .row-fluid .offset6 { + margin-left: 54.14364640883978%; + *margin-left: 54.037263430116376%; + } + .row-fluid .offset6:first-child { + margin-left: 51.38121546961326%; + *margin-left: 51.27483249088986%; + } + .row-fluid .offset5 { + margin-left: 45.58011049723757%; + *margin-left: 45.47372751851417%; + } + .row-fluid .offset5:first-child { + margin-left: 42.81767955801105%; + *margin-left: 42.71129657928765%; + } + .row-fluid .offset4 { + margin-left: 37.01657458563536%; + *margin-left: 36.91019160691196%; + } + .row-fluid .offset4:first-child { + margin-left: 34.25414364640884%; + *margin-left: 34.14776066768544%; + } + .row-fluid .offset3 { + margin-left: 28.45303867403315%; + *margin-left: 28.346655695309746%; + } + .row-fluid .offset3:first-child { + margin-left: 25.69060773480663%; + *margin-left: 25.584224756083227%; + } + .row-fluid .offset2 { + margin-left: 19.88950276243094%; + *margin-left: 19.783119783707537%; + } + .row-fluid .offset2:first-child { + margin-left: 17.12707182320442%; + *margin-left: 17.02068884448102%; + } + .row-fluid .offset1 { + margin-left: 11.32596685082873%; + *margin-left: 11.219583872105325%; + } + .row-fluid .offset1:first-child { + margin-left: 8.56353591160221%; + *margin-left: 8.457152932878806%; + } + input, + textarea, + .uneditable-input { + margin-left: 0; + } + .controls-row [class*="span"] + [class*="span"] { + margin-left: 20px; + } + input.span12, + textarea.span12, + .uneditable-input.span12 { + width: 710px; + } + input.span11, + textarea.span11, + .uneditable-input.span11 { + width: 648px; + } + input.span10, + textarea.span10, + .uneditable-input.span10 { + width: 586px; + } + input.span9, + textarea.span9, + .uneditable-input.span9 { + width: 524px; + } + input.span8, + textarea.span8, + .uneditable-input.span8 { + width: 462px; + } + input.span7, + textarea.span7, + .uneditable-input.span7 { + width: 400px; + } + input.span6, + textarea.span6, + .uneditable-input.span6 { + width: 338px; + } + input.span5, + textarea.span5, + .uneditable-input.span5 { + width: 276px; + } + input.span4, + textarea.span4, + .uneditable-input.span4 { + width: 214px; + } + input.span3, + textarea.span3, + .uneditable-input.span3 { + width: 152px; + } + input.span2, + textarea.span2, + .uneditable-input.span2 { + width: 90px; + } + input.span1, + textarea.span1, + .uneditable-input.span1 { + width: 28px; + } +} + +@media (max-width: 767px) { + body { + padding-right: 20px; + padding-left: 20px; + } + .navbar-fixed-top, + .navbar-fixed-bottom, + .navbar-static-top { + margin-right: -20px; + margin-left: -20px; + } + .container-fluid { + padding: 0; + } + .dl-horizontal dt { + float: none; + width: auto; + clear: none; + text-align: left; + } + .dl-horizontal dd { + margin-left: 0; + } + .container { + width: auto; + } + .row-fluid { + width: 100%; + } + .row, + .thumbnails { + margin-left: 0; + } + .thumbnails > li { + float: none; + margin-left: 0; + } + [class*="span"], + .uneditable-input[class*="span"], + .row-fluid [class*="span"] { + display: block; + float: none; + width: 100%; + margin-left: 0; + -webkit-box-sizing: border-box; + -moz-box-sizing: border-box; + box-sizing: border-box; + } + .span12, + .row-fluid .span12 { + width: 100%; + -webkit-box-sizing: border-box; + -moz-box-sizing: border-box; + box-sizing: border-box; + } + .row-fluid [class*="offset"]:first-child { + margin-left: 0; + } + .input-large, + .input-xlarge, + .input-xxlarge, + input[class*="span"], + select[class*="span"], + textarea[class*="span"], + .uneditable-input { + display: block; + width: 100%; + min-height: 30px; + -webkit-box-sizing: border-box; + -moz-box-sizing: border-box; + box-sizing: border-box; + } + .input-prepend input, + .input-append input, + .input-prepend input[class*="span"], + .input-append input[class*="span"] { + display: inline-block; + width: auto; + } + .controls-row [class*="span"] + [class*="span"] { + margin-left: 0; + } + .modal { + position: fixed; + top: 20px; + right: 20px; + left: 20px; + width: auto; + margin: 0; + } + .modal.fade { + top: -100px; + } + .modal.fade.in { + top: 20px; + } +} + +@media (max-width: 480px) { + .nav-collapse { + -webkit-transform: translate3d(0, 0, 0); + } + .page-header h1 small { + display: block; + line-height: 20px; + } + input[type="checkbox"], + input[type="radio"] { + border: 1px solid #ccc; + } + .form-horizontal .control-label { + float: none; + width: auto; + padding-top: 0; + text-align: left; + } + .form-horizontal .controls { + margin-left: 0; + } + .form-horizontal .control-list { + padding-top: 0; + } + .form-horizontal .form-actions { + padding-right: 10px; + padding-left: 10px; + } + .media .pull-left, + .media .pull-right { + display: block; + float: none; + margin-bottom: 10px; + } + .media-object { + margin-right: 0; + margin-left: 0; + } + .modal { + top: 10px; + right: 10px; + left: 10px; + } + .modal-header .close { + padding: 10px; + margin: -10px; + } + .carousel-caption { + position: static; + } +} + +@media (max-width: 979px) { + body { + padding-top: 0; + } + .navbar-fixed-top, + .navbar-fixed-bottom { + position: static; + } + .navbar-fixed-top { + margin-bottom: 20px; + } + .navbar-fixed-bottom { + margin-top: 20px; + } + .navbar-fixed-top .navbar-inner, + .navbar-fixed-bottom .navbar-inner { + padding: 5px; + } + .navbar .container { + width: auto; + padding: 0; + } + .navbar .brand { + padding-right: 10px; + padding-left: 10px; + margin: 0 0 0 -5px; + } + .nav-collapse { + clear: both; + } + .nav-collapse .nav { + float: none; + margin: 0 0 10px; + } + .nav-collapse .nav > li { + float: none; + } + .nav-collapse .nav > li > a { + margin-bottom: 2px; + } + .nav-collapse .nav > .divider-vertical { + display: none; + } + .nav-collapse .nav .nav-header { + color: #777777; + text-shadow: none; + } + .nav-collapse .nav > li > a, + .nav-collapse .dropdown-menu a { + padding: 9px 15px; + font-weight: bold; + color: #777777; + -webkit-border-radius: 3px; + -moz-border-radius: 3px; + border-radius: 3px; + } + .nav-collapse .btn { + padding: 4px 10px 4px; + font-weight: normal; + -webkit-border-radius: 4px; + -moz-border-radius: 4px; + border-radius: 4px; + } + .nav-collapse .dropdown-menu li + li a { + margin-bottom: 2px; + } + .nav-collapse .nav > li > a:hover, + .nav-collapse .nav > li > a:focus, + .nav-collapse .dropdown-menu a:hover, + .nav-collapse .dropdown-menu a:focus { + background-color: #f2f2f2; + } + .navbar-inverse .nav-collapse .nav > li > a, + .navbar-inverse .nav-collapse .dropdown-menu a { + color: #999999; + } + .navbar-inverse .nav-collapse .nav > li > a:hover, + .navbar-inverse .nav-collapse .nav > li > a:focus, + .navbar-inverse .nav-collapse .dropdown-menu a:hover, + .navbar-inverse .nav-collapse .dropdown-menu a:focus { + background-color: #111111; + } + .nav-collapse.in .btn-group { + padding: 0; + margin-top: 5px; + } + .nav-collapse .dropdown-menu { + position: static; + top: auto; + left: auto; + display: none; + float: none; + max-width: none; + padding: 0; + margin: 0 15px; + background-color: transparent; + border: none; + -webkit-border-radius: 0; + -moz-border-radius: 0; + border-radius: 0; + -webkit-box-shadow: none; + -moz-box-shadow: none; + box-shadow: none; + } + .nav-collapse .open > .dropdown-menu { + display: block; + } + .nav-collapse .dropdown-menu:before, + .nav-collapse .dropdown-menu:after { + display: none; + } + .nav-collapse .dropdown-menu .divider { + display: none; + } + .nav-collapse .nav > li > .dropdown-menu:before, + .nav-collapse .nav > li > .dropdown-menu:after { + display: none; + } + .nav-collapse .navbar-form, + .nav-collapse .navbar-search { + float: none; + padding: 10px 15px; + margin: 10px 0; + border-top: 1px solid #f2f2f2; + border-bottom: 1px solid #f2f2f2; + -webkit-box-shadow: inset 0 1px 0 rgba(255, 255, 255, 0.1), 0 1px 0 rgba(255, 255, 255, 0.1); + -moz-box-shadow: inset 0 1px 0 rgba(255, 255, 255, 0.1), 0 1px 0 rgba(255, 255, 255, 0.1); + box-shadow: inset 0 1px 0 rgba(255, 255, 255, 0.1), 0 1px 0 rgba(255, 255, 255, 0.1); + } + .navbar-inverse .nav-collapse .navbar-form, + .navbar-inverse .nav-collapse .navbar-search { + border-top-color: #111111; + border-bottom-color: #111111; + } + .navbar .nav-collapse .nav.pull-right { + float: none; + margin-left: 0; + } + .nav-collapse, + .nav-collapse.collapse { + height: 0; + overflow: hidden; + } + .navbar .btn-navbar { + display: block; + } + .navbar-static .navbar-inner { + padding-right: 10px; + padding-left: 10px; + } +} + +@media (min-width: 980px) { + .nav-collapse.collapse { + height: auto !important; + overflow: visible !important; + } +} diff --git a/float-no-zero/resources/bootstrap/css/bootstrap-responsive.min.css b/float-no-zero/resources/bootstrap/css/bootstrap-responsive.min.css new file mode 100644 index 0000000000..d1b7f4b0b8 --- /dev/null +++ b/float-no-zero/resources/bootstrap/css/bootstrap-responsive.min.css @@ -0,0 +1,9 @@ +/*! + * Bootstrap Responsive v2.3.1 + * + * Copyright 2012 Twitter, Inc + * Licensed under the Apache License v2.0 + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Designed and built with all the love in the world @twitter by @mdo and @fat. + */.clearfix{*zoom:1}.clearfix:before,.clearfix:after{display:table;line-height:0;content:""}.clearfix:after{clear:both}.hide-text{font:0/0 a;color:transparent;text-shadow:none;background-color:transparent;border:0}.input-block-level{display:block;width:100%;min-height:30px;-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box}@-ms-viewport{width:device-width}.hidden{display:none;visibility:hidden}.visible-phone{display:none!important}.visible-tablet{display:none!important}.hidden-desktop{display:none!important}.visible-desktop{display:inherit!important}@media(min-width:768px) and (max-width:979px){.hidden-desktop{display:inherit!important}.visible-desktop{display:none!important}.visible-tablet{display:inherit!important}.hidden-tablet{display:none!important}}@media(max-width:767px){.hidden-desktop{display:inherit!important}.visible-desktop{display:none!important}.visible-phone{display:inherit!important}.hidden-phone{display:none!important}}.visible-print{display:none!important}@media print{.visible-print{display:inherit!important}.hidden-print{display:none!important}}@media(min-width:1200px){.row{margin-left:-30px;*zoom:1}.row:before,.row:after{display:table;line-height:0;content:""}.row:after{clear:both}[class*="span"]{float:left;min-height:1px;margin-left:30px}.container,.navbar-static-top .container,.navbar-fixed-top .container,.navbar-fixed-bottom .container{width:1170px}.span12{width:1170px}.span11{width:1070px}.span10{width:970px}.span9{width:870px}.span8{width:770px}.span7{width:670px}.span6{width:570px}.span5{width:470px}.span4{width:370px}.span3{width:270px}.span2{width:170px}.span1{width:70px}.offset12{margin-left:1230px}.offset11{margin-left:1130px}.offset10{margin-left:1030px}.offset9{margin-left:930px}.offset8{margin-left:830px}.offset7{margin-left:730px}.offset6{margin-left:630px}.offset5{margin-left:530px}.offset4{margin-left:430px}.offset3{margin-left:330px}.offset2{margin-left:230px}.offset1{margin-left:130px}.row-fluid{width:100%;*zoom:1}.row-fluid:before,.row-fluid:after{display:table;line-height:0;content:""}.row-fluid:after{clear:both}.row-fluid [class*="span"]{display:block;float:left;width:100%;min-height:30px;margin-left:2.564102564102564%;*margin-left:2.5109110747408616%;-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box}.row-fluid [class*="span"]:first-child{margin-left:0}.row-fluid .controls-row [class*="span"]+[class*="span"]{margin-left:2.564102564102564%}.row-fluid .span12{width:100%;*width:99.94680851063829%}.row-fluid .span11{width:91.45299145299145%;*width:91.39979996362975%}.row-fluid .span10{width:82.90598290598291%;*width:82.8527914166212%}.row-fluid .span9{width:74.35897435897436%;*width:74.30578286961266%}.row-fluid .span8{width:65.81196581196582%;*width:65.75877432260411%}.row-fluid .span7{width:57.26495726495726%;*width:57.21176577559556%}.row-fluid .span6{width:48.717948717948715%;*width:48.664757228587014%}.row-fluid .span5{width:40.17094017094017%;*width:40.11774868157847%}.row-fluid .span4{width:31.623931623931625%;*width:31.570740134569924%}.row-fluid .span3{width:23.076923076923077%;*width:23.023731587561375%}.row-fluid .span2{width:14.52991452991453%;*width:14.476723040552828%}.row-fluid .span1{width:5.982905982905983%;*width:5.929714493544281%}.row-fluid .offset12{margin-left:105.12820512820512%;*margin-left:105.02182214948171%}.row-fluid .offset12:first-child{margin-left:102.56410256410257%;*margin-left:102.45771958537915%}.row-fluid .offset11{margin-left:96.58119658119658%;*margin-left:96.47481360247316%}.row-fluid .offset11:first-child{margin-left:94.01709401709402%;*margin-left:93.91071103837061%}.row-fluid .offset10{margin-left:88.03418803418803%;*margin-left:87.92780505546462%}.row-fluid .offset10:first-child{margin-left:85.47008547008548%;*margin-left:85.36370249136206%}.row-fluid .offset9{margin-left:79.48717948717949%;*margin-left:79.38079650845607%}.row-fluid .offset9:first-child{margin-left:76.92307692307693%;*margin-left:76.81669394435352%}.row-fluid .offset8{margin-left:70.94017094017094%;*margin-left:70.83378796144753%}.row-fluid .offset8:first-child{margin-left:68.37606837606839%;*margin-left:68.26968539734497%}.row-fluid .offset7{margin-left:62.393162393162385%;*margin-left:62.28677941443899%}.row-fluid .offset7:first-child{margin-left:59.82905982905982%;*margin-left:59.72267685033642%}.row-fluid .offset6{margin-left:53.84615384615384%;*margin-left:53.739770867430444%}.row-fluid .offset6:first-child{margin-left:51.28205128205128%;*margin-left:51.175668303327875%}.row-fluid .offset5{margin-left:45.299145299145295%;*margin-left:45.1927623204219%}.row-fluid .offset5:first-child{margin-left:42.73504273504273%;*margin-left:42.62865975631933%}.row-fluid .offset4{margin-left:36.75213675213675%;*margin-left:36.645753773413354%}.row-fluid .offset4:first-child{margin-left:34.18803418803419%;*margin-left:34.081651209310785%}.row-fluid .offset3{margin-left:28.205128205128204%;*margin-left:28.0987452264048%}.row-fluid .offset3:first-child{margin-left:25.641025641025642%;*margin-left:25.53464266230224%}.row-fluid .offset2{margin-left:19.65811965811966%;*margin-left:19.551736679396257%}.row-fluid .offset2:first-child{margin-left:17.094017094017094%;*margin-left:16.98763411529369%}.row-fluid .offset1{margin-left:11.11111111111111%;*margin-left:11.004728132387708%}.row-fluid .offset1:first-child{margin-left:8.547008547008547%;*margin-left:8.440625568285142%}input,textarea,.uneditable-input{margin-left:0}.controls-row [class*="span"]+[class*="span"]{margin-left:30px}input.span12,textarea.span12,.uneditable-input.span12{width:1156px}input.span11,textarea.span11,.uneditable-input.span11{width:1056px}input.span10,textarea.span10,.uneditable-input.span10{width:956px}input.span9,textarea.span9,.uneditable-input.span9{width:856px}input.span8,textarea.span8,.uneditable-input.span8{width:756px}input.span7,textarea.span7,.uneditable-input.span7{width:656px}input.span6,textarea.span6,.uneditable-input.span6{width:556px}input.span5,textarea.span5,.uneditable-input.span5{width:456px}input.span4,textarea.span4,.uneditable-input.span4{width:356px}input.span3,textarea.span3,.uneditable-input.span3{width:256px}input.span2,textarea.span2,.uneditable-input.span2{width:156px}input.span1,textarea.span1,.uneditable-input.span1{width:56px}.thumbnails{margin-left:-30px}.thumbnails>li{margin-left:30px}.row-fluid .thumbnails{margin-left:0}}@media(min-width:768px) and (max-width:979px){.row{margin-left:-20px;*zoom:1}.row:before,.row:after{display:table;line-height:0;content:""}.row:after{clear:both}[class*="span"]{float:left;min-height:1px;margin-left:20px}.container,.navbar-static-top .container,.navbar-fixed-top .container,.navbar-fixed-bottom .container{width:724px}.span12{width:724px}.span11{width:662px}.span10{width:600px}.span9{width:538px}.span8{width:476px}.span7{width:414px}.span6{width:352px}.span5{width:290px}.span4{width:228px}.span3{width:166px}.span2{width:104px}.span1{width:42px}.offset12{margin-left:764px}.offset11{margin-left:702px}.offset10{margin-left:640px}.offset9{margin-left:578px}.offset8{margin-left:516px}.offset7{margin-left:454px}.offset6{margin-left:392px}.offset5{margin-left:330px}.offset4{margin-left:268px}.offset3{margin-left:206px}.offset2{margin-left:144px}.offset1{margin-left:82px}.row-fluid{width:100%;*zoom:1}.row-fluid:before,.row-fluid:after{display:table;line-height:0;content:""}.row-fluid:after{clear:both}.row-fluid [class*="span"]{display:block;float:left;width:100%;min-height:30px;margin-left:2.7624309392265194%;*margin-left:2.709239449864817%;-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box}.row-fluid [class*="span"]:first-child{margin-left:0}.row-fluid .controls-row [class*="span"]+[class*="span"]{margin-left:2.7624309392265194%}.row-fluid .span12{width:100%;*width:99.94680851063829%}.row-fluid .span11{width:91.43646408839778%;*width:91.38327259903608%}.row-fluid .span10{width:82.87292817679558%;*width:82.81973668743387%}.row-fluid .span9{width:74.30939226519337%;*width:74.25620077583166%}.row-fluid .span8{width:65.74585635359117%;*width:65.69266486422946%}.row-fluid .span7{width:57.18232044198895%;*width:57.12912895262725%}.row-fluid .span6{width:48.61878453038674%;*width:48.56559304102504%}.row-fluid .span5{width:40.05524861878453%;*width:40.00205712942283%}.row-fluid .span4{width:31.491712707182323%;*width:31.43852121782062%}.row-fluid .span3{width:22.92817679558011%;*width:22.87498530621841%}.row-fluid .span2{width:14.3646408839779%;*width:14.311449394616199%}.row-fluid .span1{width:5.801104972375691%;*width:5.747913483013988%}.row-fluid .offset12{margin-left:105.52486187845304%;*margin-left:105.41847889972962%}.row-fluid .offset12:first-child{margin-left:102.76243093922652%;*margin-left:102.6560479605031%}.row-fluid .offset11{margin-left:96.96132596685082%;*margin-left:96.8549429881274%}.row-fluid .offset11:first-child{margin-left:94.1988950276243%;*margin-left:94.09251204890089%}.row-fluid .offset10{margin-left:88.39779005524862%;*margin-left:88.2914070765252%}.row-fluid .offset10:first-child{margin-left:85.6353591160221%;*margin-left:85.52897613729868%}.row-fluid .offset9{margin-left:79.8342541436464%;*margin-left:79.72787116492299%}.row-fluid .offset9:first-child{margin-left:77.07182320441989%;*margin-left:76.96544022569647%}.row-fluid .offset8{margin-left:71.2707182320442%;*margin-left:71.16433525332079%}.row-fluid .offset8:first-child{margin-left:68.50828729281768%;*margin-left:68.40190431409427%}.row-fluid .offset7{margin-left:62.70718232044199%;*margin-left:62.600799341718584%}.row-fluid .offset7:first-child{margin-left:59.94475138121547%;*margin-left:59.838368402492065%}.row-fluid .offset6{margin-left:54.14364640883978%;*margin-left:54.037263430116376%}.row-fluid .offset6:first-child{margin-left:51.38121546961326%;*margin-left:51.27483249088986%}.row-fluid .offset5{margin-left:45.58011049723757%;*margin-left:45.47372751851417%}.row-fluid .offset5:first-child{margin-left:42.81767955801105%;*margin-left:42.71129657928765%}.row-fluid .offset4{margin-left:37.01657458563536%;*margin-left:36.91019160691196%}.row-fluid .offset4:first-child{margin-left:34.25414364640884%;*margin-left:34.14776066768544%}.row-fluid .offset3{margin-left:28.45303867403315%;*margin-left:28.346655695309746%}.row-fluid .offset3:first-child{margin-left:25.69060773480663%;*margin-left:25.584224756083227%}.row-fluid .offset2{margin-left:19.88950276243094%;*margin-left:19.783119783707537%}.row-fluid .offset2:first-child{margin-left:17.12707182320442%;*margin-left:17.02068884448102%}.row-fluid .offset1{margin-left:11.32596685082873%;*margin-left:11.219583872105325%}.row-fluid .offset1:first-child{margin-left:8.56353591160221%;*margin-left:8.457152932878806%}input,textarea,.uneditable-input{margin-left:0}.controls-row [class*="span"]+[class*="span"]{margin-left:20px}input.span12,textarea.span12,.uneditable-input.span12{width:710px}input.span11,textarea.span11,.uneditable-input.span11{width:648px}input.span10,textarea.span10,.uneditable-input.span10{width:586px}input.span9,textarea.span9,.uneditable-input.span9{width:524px}input.span8,textarea.span8,.uneditable-input.span8{width:462px}input.span7,textarea.span7,.uneditable-input.span7{width:400px}input.span6,textarea.span6,.uneditable-input.span6{width:338px}input.span5,textarea.span5,.uneditable-input.span5{width:276px}input.span4,textarea.span4,.uneditable-input.span4{width:214px}input.span3,textarea.span3,.uneditable-input.span3{width:152px}input.span2,textarea.span2,.uneditable-input.span2{width:90px}input.span1,textarea.span1,.uneditable-input.span1{width:28px}}@media(max-width:767px){body{padding-right:20px;padding-left:20px}.navbar-fixed-top,.navbar-fixed-bottom,.navbar-static-top{margin-right:-20px;margin-left:-20px}.container-fluid{padding:0}.dl-horizontal dt{float:none;width:auto;clear:none;text-align:left}.dl-horizontal dd{margin-left:0}.container{width:auto}.row-fluid{width:100%}.row,.thumbnails{margin-left:0}.thumbnails>li{float:none;margin-left:0}[class*="span"],.uneditable-input[class*="span"],.row-fluid [class*="span"]{display:block;float:none;width:100%;margin-left:0;-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box}.span12,.row-fluid .span12{width:100%;-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box}.row-fluid [class*="offset"]:first-child{margin-left:0}.input-large,.input-xlarge,.input-xxlarge,input[class*="span"],select[class*="span"],textarea[class*="span"],.uneditable-input{display:block;width:100%;min-height:30px;-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box}.input-prepend input,.input-append input,.input-prepend input[class*="span"],.input-append input[class*="span"]{display:inline-block;width:auto}.controls-row [class*="span"]+[class*="span"]{margin-left:0}.modal{position:fixed;top:20px;right:20px;left:20px;width:auto;margin:0}.modal.fade{top:-100px}.modal.fade.in{top:20px}}@media(max-width:480px){.nav-collapse{-webkit-transform:translate3d(0,0,0)}.page-header h1 small{display:block;line-height:20px}input[type="checkbox"],input[type="radio"]{border:1px solid #ccc}.form-horizontal .control-label{float:none;width:auto;padding-top:0;text-align:left}.form-horizontal .controls{margin-left:0}.form-horizontal .control-list{padding-top:0}.form-horizontal .form-actions{padding-right:10px;padding-left:10px}.media .pull-left,.media .pull-right{display:block;float:none;margin-bottom:10px}.media-object{margin-right:0;margin-left:0}.modal{top:10px;right:10px;left:10px}.modal-header .close{padding:10px;margin:-10px}.carousel-caption{position:static}}@media(max-width:979px){body{padding-top:0}.navbar-fixed-top,.navbar-fixed-bottom{position:static}.navbar-fixed-top{margin-bottom:20px}.navbar-fixed-bottom{margin-top:20px}.navbar-fixed-top .navbar-inner,.navbar-fixed-bottom .navbar-inner{padding:5px}.navbar .container{width:auto;padding:0}.navbar .brand{padding-right:10px;padding-left:10px;margin:0 0 0 -5px}.nav-collapse{clear:both}.nav-collapse .nav{float:none;margin:0 0 10px}.nav-collapse .nav>li{float:none}.nav-collapse .nav>li>a{margin-bottom:2px}.nav-collapse .nav>.divider-vertical{display:none}.nav-collapse .nav .nav-header{color:#777;text-shadow:none}.nav-collapse .nav>li>a,.nav-collapse .dropdown-menu a{padding:9px 15px;font-weight:bold;color:#777;-webkit-border-radius:3px;-moz-border-radius:3px;border-radius:3px}.nav-collapse .btn{padding:4px 10px 4px;font-weight:normal;-webkit-border-radius:4px;-moz-border-radius:4px;border-radius:4px}.nav-collapse .dropdown-menu li+li a{margin-bottom:2px}.nav-collapse .nav>li>a:hover,.nav-collapse .nav>li>a:focus,.nav-collapse .dropdown-menu a:hover,.nav-collapse .dropdown-menu a:focus{background-color:#f2f2f2}.navbar-inverse .nav-collapse .nav>li>a,.navbar-inverse .nav-collapse .dropdown-menu a{color:#999}.navbar-inverse .nav-collapse .nav>li>a:hover,.navbar-inverse .nav-collapse .nav>li>a:focus,.navbar-inverse .nav-collapse .dropdown-menu a:hover,.navbar-inverse .nav-collapse .dropdown-menu a:focus{background-color:#111}.nav-collapse.in .btn-group{padding:0;margin-top:5px}.nav-collapse .dropdown-menu{position:static;top:auto;left:auto;display:none;float:none;max-width:none;padding:0;margin:0 15px;background-color:transparent;border:0;-webkit-border-radius:0;-moz-border-radius:0;border-radius:0;-webkit-box-shadow:none;-moz-box-shadow:none;box-shadow:none}.nav-collapse .open>.dropdown-menu{display:block}.nav-collapse .dropdown-menu:before,.nav-collapse .dropdown-menu:after{display:none}.nav-collapse .dropdown-menu .divider{display:none}.nav-collapse .nav>li>.dropdown-menu:before,.nav-collapse .nav>li>.dropdown-menu:after{display:none}.nav-collapse .navbar-form,.nav-collapse .navbar-search{float:none;padding:10px 15px;margin:10px 0;border-top:1px solid #f2f2f2;border-bottom:1px solid #f2f2f2;-webkit-box-shadow:inset 0 1px 0 rgba(255,255,255,0.1),0 1px 0 rgba(255,255,255,0.1);-moz-box-shadow:inset 0 1px 0 rgba(255,255,255,0.1),0 1px 0 rgba(255,255,255,0.1);box-shadow:inset 0 1px 0 rgba(255,255,255,0.1),0 1px 0 rgba(255,255,255,0.1)}.navbar-inverse .nav-collapse .navbar-form,.navbar-inverse .nav-collapse .navbar-search{border-top-color:#111;border-bottom-color:#111}.navbar .nav-collapse .nav.pull-right{float:none;margin-left:0}.nav-collapse,.nav-collapse.collapse{height:0;overflow:hidden}.navbar .btn-navbar{display:block}.navbar-static .navbar-inner{padding-right:10px;padding-left:10px}}@media(min-width:980px){.nav-collapse.collapse{height:auto!important;overflow:visible!important}} diff --git a/float-no-zero/resources/bootstrap/css/bootstrap.css b/float-no-zero/resources/bootstrap/css/bootstrap.css new file mode 100644 index 0000000000..2f56af33f3 --- /dev/null +++ b/float-no-zero/resources/bootstrap/css/bootstrap.css @@ -0,0 +1,6158 @@ +/*! + * Bootstrap v2.3.1 + * + * Copyright 2012 Twitter, Inc + * Licensed under the Apache License v2.0 + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Designed and built with all the love in the world @twitter by @mdo and @fat. + */ + +.clearfix { + *zoom: 1; +} + +.clearfix:before, +.clearfix:after { + display: table; + line-height: 0; + content: ""; +} + +.clearfix:after { + clear: both; +} + +.hide-text { + font: 0/0 a; + color: transparent; + text-shadow: none; + background-color: transparent; + border: 0; +} + +.input-block-level { + display: block; + width: 100%; + min-height: 30px; + -webkit-box-sizing: border-box; + -moz-box-sizing: border-box; + box-sizing: border-box; +} + +article, +aside, +details, +figcaption, +figure, +footer, +header, +hgroup, +nav, +section { + display: block; +} + +audio, +canvas, +video { + display: inline-block; + *display: inline; + *zoom: 1; +} + +audio:not([controls]) { + display: none; +} + +html { + font-size: 100%; + -webkit-text-size-adjust: 100%; + -ms-text-size-adjust: 100%; +} + +a:focus { + outline: thin dotted #333; + outline: 5px auto -webkit-focus-ring-color; + outline-offset: -2px; +} + +a:hover, +a:active { + outline: 0; +} + +sub, +sup { + position: relative; + font-size: 75%; + line-height: 0; + vertical-align: baseline; +} + +sup { + top: -0.5em; +} + +sub { + bottom: -0.25em; +} + +img { + width: auto\9; + height: auto; + max-width: 100%; + vertical-align: middle; + border: 0; + -ms-interpolation-mode: bicubic; +} + +#map_canvas img, +.google-maps img { + max-width: none; +} + +button, +input, +select, +textarea { + margin: 0; + font-size: 100%; + vertical-align: middle; +} + +button, +input { + *overflow: visible; + line-height: normal; +} + +button::-moz-focus-inner, +input::-moz-focus-inner { + padding: 0; + border: 0; +} + +button, +html input[type="button"], +input[type="reset"], +input[type="submit"] { + cursor: pointer; + -webkit-appearance: button; +} + +label, +select, +button, +input[type="button"], +input[type="reset"], +input[type="submit"], +input[type="radio"], +input[type="checkbox"] { + cursor: pointer; +} + +input[type="search"] { + -webkit-box-sizing: content-box; + -moz-box-sizing: content-box; + box-sizing: content-box; + -webkit-appearance: textfield; +} + +input[type="search"]::-webkit-search-decoration, +input[type="search"]::-webkit-search-cancel-button { + -webkit-appearance: none; +} + +textarea { + overflow: auto; + vertical-align: top; +} + +@media print { + * { + color: #000 !important; + text-shadow: none !important; + background: transparent !important; + box-shadow: none !important; + } + a, + a:visited { + text-decoration: underline; + } + a[href]:after { + content: " (" attr(href) ")"; + } + abbr[title]:after { + content: " (" attr(title) ")"; + } + .ir a:after, + a[href^="javascript:"]:after, + a[href^="#"]:after { + content: ""; + } + pre, + blockquote { + border: 1px solid #999; + page-break-inside: avoid; + } + thead { + display: table-header-group; + } + tr, + img { + page-break-inside: avoid; + } + img { + max-width: 100% !important; + } + @page { + margin: 0.5cm; + } + p, + h2, + h3 { + orphans: 3; + widows: 3; + } + h2, + h3 { + page-break-after: avoid; + } +} + +body { + margin: 0; + font-family: "Helvetica Neue", Helvetica, Arial, sans-serif; + font-size: 14px; + line-height: 20px; + color: #333333; + background-color: #ffffff; +} + +a { + color: #0088cc; + text-decoration: none; +} + +a:hover, +a:focus { + color: #005580; + text-decoration: underline; +} + +.img-rounded { + -webkit-border-radius: 6px; + -moz-border-radius: 6px; + border-radius: 6px; +} + +.img-polaroid { + padding: 4px; + background-color: #fff; + border: 1px solid #ccc; + border: 1px solid rgba(0, 0, 0, 0.2); + -webkit-box-shadow: 0 1px 3px rgba(0, 0, 0, 0.1); + -moz-box-shadow: 0 1px 3px rgba(0, 0, 0, 0.1); + box-shadow: 0 1px 3px rgba(0, 0, 0, 0.1); +} + +.img-circle { + -webkit-border-radius: 500px; + -moz-border-radius: 500px; + border-radius: 500px; +} + +.row { + margin-left: -20px; + *zoom: 1; +} + +.row:before, +.row:after { + display: table; + line-height: 0; + content: ""; +} + +.row:after { + clear: both; +} + +[class*="span"] { + float: left; + min-height: 1px; + margin-left: 20px; +} + +.container, +.navbar-static-top .container, +.navbar-fixed-top .container, +.navbar-fixed-bottom .container { + width: 940px; +} + +.span12 { + width: 940px; +} + +.span11 { + width: 860px; +} + +.span10 { + width: 780px; +} + +.span9 { + width: 700px; +} + +.span8 { + width: 620px; +} + +.span7 { + width: 540px; +} + +.span6 { + width: 460px; +} + +.span5 { + width: 380px; +} + +.span4 { + width: 300px; +} + +.span3 { + width: 220px; +} + +.span2 { + width: 140px; +} + +.span1 { + width: 60px; +} + +.offset12 { + margin-left: 980px; +} + +.offset11 { + margin-left: 900px; +} + +.offset10 { + margin-left: 820px; +} + +.offset9 { + margin-left: 740px; +} + +.offset8 { + margin-left: 660px; +} + +.offset7 { + margin-left: 580px; +} + +.offset6 { + margin-left: 500px; +} + +.offset5 { + margin-left: 420px; +} + +.offset4 { + margin-left: 340px; +} + +.offset3 { + margin-left: 260px; +} + +.offset2 { + margin-left: 180px; +} + +.offset1 { + margin-left: 100px; +} + +.row-fluid { + width: 100%; + *zoom: 1; +} + +.row-fluid:before, +.row-fluid:after { + display: table; + line-height: 0; + content: ""; +} + +.row-fluid:after { + clear: both; +} + +.row-fluid [class*="span"] { + display: block; + float: left; + width: 100%; + min-height: 30px; + margin-left: 2.127659574468085%; + *margin-left: 2.074468085106383%; + -webkit-box-sizing: border-box; + -moz-box-sizing: border-box; + box-sizing: border-box; +} + +.row-fluid [class*="span"]:first-child { + margin-left: 0; +} + +.row-fluid .controls-row [class*="span"] + [class*="span"] { + margin-left: 2.127659574468085%; +} + +.row-fluid .span12 { + width: 100%; + *width: 99.94680851063829%; +} + +.row-fluid .span11 { + width: 91.48936170212765%; + *width: 91.43617021276594%; +} + +.row-fluid .span10 { + width: 82.97872340425532%; + *width: 82.92553191489361%; +} + +.row-fluid .span9 { + width: 74.46808510638297%; + *width: 74.41489361702126%; +} + +.row-fluid .span8 { + width: 65.95744680851064%; + *width: 65.90425531914893%; +} + +.row-fluid .span7 { + width: 57.44680851063829%; + *width: 57.39361702127659%; +} + +.row-fluid .span6 { + width: 48.93617021276595%; + *width: 48.88297872340425%; +} + +.row-fluid .span5 { + width: 40.42553191489362%; + *width: 40.37234042553192%; +} + +.row-fluid .span4 { + width: 31.914893617021278%; + *width: 31.861702127659576%; +} + +.row-fluid .span3 { + width: 23.404255319148934%; + *width: 23.351063829787233%; +} + +.row-fluid .span2 { + width: 14.893617021276595%; + *width: 14.840425531914894%; +} + +.row-fluid .span1 { + width: 6.382978723404255%; + *width: 6.329787234042553%; +} + +.row-fluid .offset12 { + margin-left: 104.25531914893617%; + *margin-left: 104.14893617021275%; +} + +.row-fluid .offset12:first-child { + margin-left: 102.12765957446808%; + *margin-left: 102.02127659574467%; +} + +.row-fluid .offset11 { + margin-left: 95.74468085106382%; + *margin-left: 95.6382978723404%; +} + +.row-fluid .offset11:first-child { + margin-left: 93.61702127659574%; + *margin-left: 93.51063829787232%; +} + +.row-fluid .offset10 { + margin-left: 87.23404255319149%; + *margin-left: 87.12765957446807%; +} + +.row-fluid .offset10:first-child { + margin-left: 85.1063829787234%; + *margin-left: 84.99999999999999%; +} + +.row-fluid .offset9 { + margin-left: 78.72340425531914%; + *margin-left: 78.61702127659572%; +} + +.row-fluid .offset9:first-child { + margin-left: 76.59574468085106%; + *margin-left: 76.48936170212764%; +} + +.row-fluid .offset8 { + margin-left: 70.2127659574468%; + *margin-left: 70.10638297872339%; +} + +.row-fluid .offset8:first-child { + margin-left: 68.08510638297872%; + *margin-left: 67.9787234042553%; +} + +.row-fluid .offset7 { + margin-left: 61.70212765957446%; + *margin-left: 61.59574468085106%; +} + +.row-fluid .offset7:first-child { + margin-left: 59.574468085106375%; + *margin-left: 59.46808510638297%; +} + +.row-fluid .offset6 { + margin-left: 53.191489361702125%; + *margin-left: 53.085106382978715%; +} + +.row-fluid .offset6:first-child { + margin-left: 51.063829787234035%; + *margin-left: 50.95744680851063%; +} + +.row-fluid .offset5 { + margin-left: 44.68085106382979%; + *margin-left: 44.57446808510638%; +} + +.row-fluid .offset5:first-child { + margin-left: 42.5531914893617%; + *margin-left: 42.4468085106383%; +} + +.row-fluid .offset4 { + margin-left: 36.170212765957444%; + *margin-left: 36.06382978723405%; +} + +.row-fluid .offset4:first-child { + margin-left: 34.04255319148936%; + *margin-left: 33.93617021276596%; +} + +.row-fluid .offset3 { + margin-left: 27.659574468085104%; + *margin-left: 27.5531914893617%; +} + +.row-fluid .offset3:first-child { + margin-left: 25.53191489361702%; + *margin-left: 25.425531914893618%; +} + +.row-fluid .offset2 { + margin-left: 19.148936170212764%; + *margin-left: 19.04255319148936%; +} + +.row-fluid .offset2:first-child { + margin-left: 17.02127659574468%; + *margin-left: 16.914893617021278%; +} + +.row-fluid .offset1 { + margin-left: 10.638297872340425%; + *margin-left: 10.53191489361702%; +} + +.row-fluid .offset1:first-child { + margin-left: 8.51063829787234%; + *margin-left: 8.404255319148938%; +} + +[class*="span"].hide, +.row-fluid [class*="span"].hide { + display: none; +} + +[class*="span"].pull-right, +.row-fluid [class*="span"].pull-right { + float: right; +} + +.container { + margin-right: auto; + margin-left: auto; + *zoom: 1; +} + +.container:before, +.container:after { + display: table; + line-height: 0; + content: ""; +} + +.container:after { + clear: both; +} + +.container-fluid { + padding-right: 20px; + padding-left: 20px; + *zoom: 1; +} + +.container-fluid:before, +.container-fluid:after { + display: table; + line-height: 0; + content: ""; +} + +.container-fluid:after { + clear: both; +} + +p { + margin: 0 0 10px; +} + +.lead { + margin-bottom: 20px; + font-size: 21px; + font-weight: 200; + line-height: 30px; +} + +small { + font-size: 85%; +} + +strong { + font-weight: bold; +} + +em { + font-style: italic; +} + +cite { + font-style: normal; +} + +.muted { + color: #999999; +} + +a.muted:hover, +a.muted:focus { + color: #808080; +} + +.text-warning { + color: #c09853; +} + +a.text-warning:hover, +a.text-warning:focus { + color: #a47e3c; +} + +.text-error { + color: #b94a48; +} + +a.text-error:hover, +a.text-error:focus { + color: #953b39; +} + +.text-info { + color: #3a87ad; +} + +a.text-info:hover, +a.text-info:focus { + color: #2d6987; +} + +.text-success { + color: #468847; +} + +a.text-success:hover, +a.text-success:focus { + color: #356635; +} + +.text-left { + text-align: left; +} + +.text-right { + text-align: right; +} + +.text-center { + text-align: center; +} + +h1, +h2, +h3, +h4, +h5, +h6 { + margin: 10px 0; + font-family: inherit; + font-weight: bold; + line-height: 20px; + color: inherit; + text-rendering: optimizelegibility; +} + +h1 small, +h2 small, +h3 small, +h4 small, +h5 small, +h6 small { + font-weight: normal; + line-height: 1; + color: #999999; +} + +h1, +h2, +h3 { + line-height: 40px; +} + +h1 { + font-size: 38.5px; +} + +h2 { + font-size: 31.5px; +} + +h3 { + font-size: 24.5px; +} + +h4 { + font-size: 17.5px; +} + +h5 { + font-size: 14px; +} + +h6 { + font-size: 11.9px; +} + +h1 small { + font-size: 24.5px; +} + +h2 small { + font-size: 17.5px; +} + +h3 small { + font-size: 14px; +} + +h4 small { + font-size: 14px; +} + +.page-header { + padding-bottom: 9px; + margin: 20px 0 30px; + border-bottom: 1px solid #eeeeee; +} + +ul, +ol { + padding: 0; + margin: 0 0 10px 25px; +} + +ul ul, +ul ol, +ol ol, +ol ul { + margin-bottom: 0; +} + +li { + line-height: 20px; +} + +ul.unstyled, +ol.unstyled { + margin-left: 0; + list-style: none; +} + +ul.inline, +ol.inline { + margin-left: 0; + list-style: none; +} + +ul.inline > li, +ol.inline > li { + display: inline-block; + *display: inline; + padding-right: 5px; + padding-left: 5px; + *zoom: 1; +} + +dl { + margin-bottom: 20px; +} + +dt, +dd { + line-height: 20px; +} + +dt { + font-weight: bold; +} + +dd { + margin-left: 10px; +} + +.dl-horizontal { + *zoom: 1; +} + +.dl-horizontal:before, +.dl-horizontal:after { + display: table; + line-height: 0; + content: ""; +} + +.dl-horizontal:after { + clear: both; +} + +.dl-horizontal dt { + float: left; + width: 160px; + overflow: hidden; + clear: left; + text-align: right; + text-overflow: ellipsis; + white-space: nowrap; +} + +.dl-horizontal dd { + margin-left: 180px; +} + +hr { + margin: 20px 0; + border: 0; + border-top: 1px solid #eeeeee; + border-bottom: 1px solid #ffffff; +} + +abbr[title], +abbr[data-original-title] { + cursor: help; + border-bottom: 1px dotted #999999; +} + +abbr.initialism { + font-size: 90%; + text-transform: uppercase; +} + +blockquote { + padding: 0 0 0 15px; + margin: 0 0 20px; + border-left: 5px solid #eeeeee; +} + +blockquote p { + margin-bottom: 0; + font-size: 17.5px; + font-weight: 300; + line-height: 1.25; +} + +blockquote small { + display: block; + line-height: 20px; + color: #999999; +} + +blockquote small:before { + content: '\2014 \00A0'; +} + +blockquote.pull-right { + float: right; + padding-right: 15px; + padding-left: 0; + border-right: 5px solid #eeeeee; + border-left: 0; +} + +blockquote.pull-right p, +blockquote.pull-right small { + text-align: right; +} + +blockquote.pull-right small:before { + content: ''; +} + +blockquote.pull-right small:after { + content: '\00A0 \2014'; +} + +q:before, +q:after, +blockquote:before, +blockquote:after { + content: ""; +} + +address { + display: block; + margin-bottom: 20px; + font-style: normal; + line-height: 20px; +} + +code, +pre { + padding: 0 3px 2px; + font-family: Monaco, Menlo, Consolas, "Courier New", monospace; + font-size: 12px; + color: #333333; + -webkit-border-radius: 3px; + -moz-border-radius: 3px; + border-radius: 3px; +} + +code { + padding: 2px 4px; + color: #d14; + white-space: nowrap; + background-color: #f7f7f9; + border: 1px solid #e1e1e8; +} + +pre { + display: block; + padding: 9.5px; + margin: 0 0 10px; + font-size: 13px; + line-height: 20px; + word-break: break-all; + word-wrap: break-word; + white-space: pre; + white-space: pre-wrap; + background-color: #f5f5f5; + border: 1px solid #ccc; + border: 1px solid rgba(0, 0, 0, 0.15); + -webkit-border-radius: 4px; + -moz-border-radius: 4px; + border-radius: 4px; +} + +pre.prettyprint { + margin-bottom: 20px; +} + +pre code { + padding: 0; + color: inherit; + white-space: pre; + white-space: pre-wrap; + background-color: transparent; + border: 0; +} + +.pre-scrollable { + max-height: 340px; + overflow-y: scroll; +} + +form { + margin: 0 0 20px; +} + +fieldset { + padding: 0; + margin: 0; + border: 0; +} + +legend { + display: block; + width: 100%; + padding: 0; + margin-bottom: 20px; + font-size: 21px; + line-height: 40px; + color: #333333; + border: 0; + border-bottom: 1px solid #e5e5e5; +} + +legend small { + font-size: 15px; + color: #999999; +} + +label, +input, +button, +select, +textarea { + font-size: 14px; + font-weight: normal; + line-height: 20px; +} + +input, +button, +select, +textarea { + font-family: "Helvetica Neue", Helvetica, Arial, sans-serif; +} + +label { + display: block; + margin-bottom: 5px; +} + +select, +textarea, +input[type="text"], +input[type="password"], +input[type="datetime"], +input[type="datetime-local"], +input[type="date"], +input[type="month"], +input[type="time"], +input[type="week"], +input[type="number"], +input[type="email"], +input[type="url"], +input[type="search"], +input[type="tel"], +input[type="color"], +.uneditable-input { + display: inline-block; + height: 20px; + padding: 4px 6px; + margin-bottom: 10px; + font-size: 14px; + line-height: 20px; + color: #555555; + vertical-align: middle; + -webkit-border-radius: 4px; + -moz-border-radius: 4px; + border-radius: 4px; +} + +input, +textarea, +.uneditable-input { + width: 206px; +} + +textarea { + height: auto; +} + +textarea, +input[type="text"], +input[type="password"], +input[type="datetime"], +input[type="datetime-local"], +input[type="date"], +input[type="month"], +input[type="time"], +input[type="week"], +input[type="number"], +input[type="email"], +input[type="url"], +input[type="search"], +input[type="tel"], +input[type="color"], +.uneditable-input { + background-color: #ffffff; + border: 1px solid #cccccc; + -webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075); + -moz-box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075); + box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075); + -webkit-transition: border linear 0.2s, box-shadow linear 0.2s; + -moz-transition: border linear 0.2s, box-shadow linear 0.2s; + -o-transition: border linear 0.2s, box-shadow linear 0.2s; + transition: border linear 0.2s, box-shadow linear 0.2s; +} + +textarea:focus, +input[type="text"]:focus, +input[type="password"]:focus, +input[type="datetime"]:focus, +input[type="datetime-local"]:focus, +input[type="date"]:focus, +input[type="month"]:focus, +input[type="time"]:focus, +input[type="week"]:focus, +input[type="number"]:focus, +input[type="email"]:focus, +input[type="url"]:focus, +input[type="search"]:focus, +input[type="tel"]:focus, +input[type="color"]:focus, +.uneditable-input:focus { + border-color: rgba(82, 168, 236, 0.8); + outline: 0; + outline: thin dotted \9; + /* IE6-9 */ + + -webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075), 0 0 8px rgba(82, 168, 236, 0.6); + -moz-box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075), 0 0 8px rgba(82, 168, 236, 0.6); + box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075), 0 0 8px rgba(82, 168, 236, 0.6); +} + +input[type="radio"], +input[type="checkbox"] { + margin: 4px 0 0; + margin-top: 1px \9; + *margin-top: 0; + line-height: normal; +} + +input[type="file"], +input[type="image"], +input[type="submit"], +input[type="reset"], +input[type="button"], +input[type="radio"], +input[type="checkbox"] { + width: auto; +} + +select, +input[type="file"] { + height: 30px; + /* In IE7, the height of the select element cannot be changed by height, only font-size */ + + *margin-top: 4px; + /* For IE7, add top margin to align select with labels */ + + line-height: 30px; +} + +select { + width: 220px; + background-color: #ffffff; + border: 1px solid #cccccc; +} + +select[multiple], +select[size] { + height: auto; +} + +select:focus, +input[type="file"]:focus, +input[type="radio"]:focus, +input[type="checkbox"]:focus { + outline: thin dotted #333; + outline: 5px auto -webkit-focus-ring-color; + outline-offset: -2px; +} + +.uneditable-input, +.uneditable-textarea { + color: #999999; + cursor: not-allowed; + background-color: #fcfcfc; + border-color: #cccccc; + -webkit-box-shadow: inset 0 1px 2px rgba(0, 0, 0, 0.025); + -moz-box-shadow: inset 0 1px 2px rgba(0, 0, 0, 0.025); + box-shadow: inset 0 1px 2px rgba(0, 0, 0, 0.025); +} + +.uneditable-input { + overflow: hidden; + white-space: nowrap; +} + +.uneditable-textarea { + width: auto; + height: auto; +} + +input:-moz-placeholder, +textarea:-moz-placeholder { + color: #999999; +} + +input:-ms-input-placeholder, +textarea:-ms-input-placeholder { + color: #999999; +} + +input::-webkit-input-placeholder, +textarea::-webkit-input-placeholder { + color: #999999; +} + +.radio, +.checkbox { + min-height: 20px; + padding-left: 20px; +} + +.radio input[type="radio"], +.checkbox input[type="checkbox"] { + float: left; + margin-left: -20px; +} + +.controls > .radio:first-child, +.controls > .checkbox:first-child { + padding-top: 5px; +} + +.radio.inline, +.checkbox.inline { + display: inline-block; + padding-top: 5px; + margin-bottom: 0; + vertical-align: middle; +} + +.radio.inline + .radio.inline, +.checkbox.inline + .checkbox.inline { + margin-left: 10px; +} + +.input-mini { + width: 60px; +} + +.input-small { + width: 90px; +} + +.input-medium { + width: 150px; +} + +.input-large { + width: 210px; +} + +.input-xlarge { + width: 270px; +} + +.input-xxlarge { + width: 530px; +} + +input[class*="span"], +select[class*="span"], +textarea[class*="span"], +.uneditable-input[class*="span"], +.row-fluid input[class*="span"], +.row-fluid select[class*="span"], +.row-fluid textarea[class*="span"], +.row-fluid .uneditable-input[class*="span"] { + float: none; + margin-left: 0; +} + +.input-append input[class*="span"], +.input-append .uneditable-input[class*="span"], +.input-prepend input[class*="span"], +.input-prepend .uneditable-input[class*="span"], +.row-fluid input[class*="span"], +.row-fluid select[class*="span"], +.row-fluid textarea[class*="span"], +.row-fluid .uneditable-input[class*="span"], +.row-fluid .input-prepend [class*="span"], +.row-fluid .input-append [class*="span"] { + display: inline-block; +} + +input, +textarea, +.uneditable-input { + margin-left: 0; +} + +.controls-row [class*="span"] + [class*="span"] { + margin-left: 20px; +} + +input.span12, +textarea.span12, +.uneditable-input.span12 { + width: 926px; +} + +input.span11, +textarea.span11, +.uneditable-input.span11 { + width: 846px; +} + +input.span10, +textarea.span10, +.uneditable-input.span10 { + width: 766px; +} + +input.span9, +textarea.span9, +.uneditable-input.span9 { + width: 686px; +} + +input.span8, +textarea.span8, +.uneditable-input.span8 { + width: 606px; +} + +input.span7, +textarea.span7, +.uneditable-input.span7 { + width: 526px; +} + +input.span6, +textarea.span6, +.uneditable-input.span6 { + width: 446px; +} + +input.span5, +textarea.span5, +.uneditable-input.span5 { + width: 366px; +} + +input.span4, +textarea.span4, +.uneditable-input.span4 { + width: 286px; +} + +input.span3, +textarea.span3, +.uneditable-input.span3 { + width: 206px; +} + +input.span2, +textarea.span2, +.uneditable-input.span2 { + width: 126px; +} + +input.span1, +textarea.span1, +.uneditable-input.span1 { + width: 46px; +} + +.controls-row { + *zoom: 1; +} + +.controls-row:before, +.controls-row:after { + display: table; + line-height: 0; + content: ""; +} + +.controls-row:after { + clear: both; +} + +.controls-row [class*="span"], +.row-fluid .controls-row [class*="span"] { + float: left; +} + +.controls-row .checkbox[class*="span"], +.controls-row .radio[class*="span"] { + padding-top: 5px; +} + +input[disabled], +select[disabled], +textarea[disabled], +input[readonly], +select[readonly], +textarea[readonly] { + cursor: not-allowed; + background-color: #eeeeee; +} + +input[type="radio"][disabled], +input[type="checkbox"][disabled], +input[type="radio"][readonly], +input[type="checkbox"][readonly] { + background-color: transparent; +} + +.control-group.warning .control-label, +.control-group.warning .help-block, +.control-group.warning .help-inline { + color: #c09853; +} + +.control-group.warning .checkbox, +.control-group.warning .radio, +.control-group.warning input, +.control-group.warning select, +.control-group.warning textarea { + color: #c09853; +} + +.control-group.warning input, +.control-group.warning select, +.control-group.warning textarea { + border-color: #c09853; + -webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075); + -moz-box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075); + box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075); +} + +.control-group.warning input:focus, +.control-group.warning select:focus, +.control-group.warning textarea:focus { + border-color: #a47e3c; + -webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075), 0 0 6px #dbc59e; + -moz-box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075), 0 0 6px #dbc59e; + box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075), 0 0 6px #dbc59e; +} + +.control-group.warning .input-prepend .add-on, +.control-group.warning .input-append .add-on { + color: #c09853; + background-color: #fcf8e3; + border-color: #c09853; +} + +.control-group.error .control-label, +.control-group.error .help-block, +.control-group.error .help-inline { + color: #b94a48; +} + +.control-group.error .checkbox, +.control-group.error .radio, +.control-group.error input, +.control-group.error select, +.control-group.error textarea { + color: #b94a48; +} + +.control-group.error input, +.control-group.error select, +.control-group.error textarea { + border-color: #b94a48; + -webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075); + -moz-box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075); + box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075); +} + +.control-group.error input:focus, +.control-group.error select:focus, +.control-group.error textarea:focus { + border-color: #953b39; + -webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075), 0 0 6px #d59392; + -moz-box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075), 0 0 6px #d59392; + box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075), 0 0 6px #d59392; +} + +.control-group.error .input-prepend .add-on, +.control-group.error .input-append .add-on { + color: #b94a48; + background-color: #f2dede; + border-color: #b94a48; +} + +.control-group.success .control-label, +.control-group.success .help-block, +.control-group.success .help-inline { + color: #468847; +} + +.control-group.success .checkbox, +.control-group.success .radio, +.control-group.success input, +.control-group.success select, +.control-group.success textarea { + color: #468847; +} + +.control-group.success input, +.control-group.success select, +.control-group.success textarea { + border-color: #468847; + -webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075); + -moz-box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075); + box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075); +} + +.control-group.success input:focus, +.control-group.success select:focus, +.control-group.success textarea:focus { + border-color: #356635; + -webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075), 0 0 6px #7aba7b; + -moz-box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075), 0 0 6px #7aba7b; + box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075), 0 0 6px #7aba7b; +} + +.control-group.success .input-prepend .add-on, +.control-group.success .input-append .add-on { + color: #468847; + background-color: #dff0d8; + border-color: #468847; +} + +.control-group.info .control-label, +.control-group.info .help-block, +.control-group.info .help-inline { + color: #3a87ad; +} + +.control-group.info .checkbox, +.control-group.info .radio, +.control-group.info input, +.control-group.info select, +.control-group.info textarea { + color: #3a87ad; +} + +.control-group.info input, +.control-group.info select, +.control-group.info textarea { + border-color: #3a87ad; + -webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075); + -moz-box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075); + box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075); +} + +.control-group.info input:focus, +.control-group.info select:focus, +.control-group.info textarea:focus { + border-color: #2d6987; + -webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075), 0 0 6px #7ab5d3; + -moz-box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075), 0 0 6px #7ab5d3; + box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075), 0 0 6px #7ab5d3; +} + +.control-group.info .input-prepend .add-on, +.control-group.info .input-append .add-on { + color: #3a87ad; + background-color: #d9edf7; + border-color: #3a87ad; +} + +input:focus:invalid, +textarea:focus:invalid, +select:focus:invalid { + color: #b94a48; + border-color: #ee5f5b; +} + +input:focus:invalid:focus, +textarea:focus:invalid:focus, +select:focus:invalid:focus { + border-color: #e9322d; + -webkit-box-shadow: 0 0 6px #f8b9b7; + -moz-box-shadow: 0 0 6px #f8b9b7; + box-shadow: 0 0 6px #f8b9b7; +} + +.form-actions { + padding: 19px 20px 20px; + margin-top: 20px; + margin-bottom: 20px; + background-color: #f5f5f5; + border-top: 1px solid #e5e5e5; + *zoom: 1; +} + +.form-actions:before, +.form-actions:after { + display: table; + line-height: 0; + content: ""; +} + +.form-actions:after { + clear: both; +} + +.help-block, +.help-inline { + color: #595959; +} + +.help-block { + display: block; + margin-bottom: 10px; +} + +.help-inline { + display: inline-block; + *display: inline; + padding-left: 5px; + vertical-align: middle; + *zoom: 1; +} + +.input-append, +.input-prepend { + display: inline-block; + margin-bottom: 10px; + font-size: 0; + white-space: nowrap; + vertical-align: middle; +} + +.input-append input, +.input-prepend input, +.input-append select, +.input-prepend select, +.input-append .uneditable-input, +.input-prepend .uneditable-input, +.input-append .dropdown-menu, +.input-prepend .dropdown-menu, +.input-append .popover, +.input-prepend .popover { + font-size: 14px; +} + +.input-append input, +.input-prepend input, +.input-append select, +.input-prepend select, +.input-append .uneditable-input, +.input-prepend .uneditable-input { + position: relative; + margin-bottom: 0; + *margin-left: 0; + vertical-align: top; + -webkit-border-radius: 0 4px 4px 0; + -moz-border-radius: 0 4px 4px 0; + border-radius: 0 4px 4px 0; +} + +.input-append input:focus, +.input-prepend input:focus, +.input-append select:focus, +.input-prepend select:focus, +.input-append .uneditable-input:focus, +.input-prepend .uneditable-input:focus { + z-index: 2; +} + +.input-append .add-on, +.input-prepend .add-on { + display: inline-block; + width: auto; + height: 20px; + min-width: 16px; + padding: 4px 5px; + font-size: 14px; + font-weight: normal; + line-height: 20px; + text-align: center; + text-shadow: 0 1px 0 #ffffff; + background-color: #eeeeee; + border: 1px solid #ccc; +} + +.input-append .add-on, +.input-prepend .add-on, +.input-append .btn, +.input-prepend .btn, +.input-append .btn-group > .dropdown-toggle, +.input-prepend .btn-group > .dropdown-toggle { + vertical-align: top; + -webkit-border-radius: 0; + -moz-border-radius: 0; + border-radius: 0; +} + +.input-append .active, +.input-prepend .active { + background-color: #a9dba9; + border-color: #46a546; +} + +.input-prepend .add-on, +.input-prepend .btn { + margin-right: -1px; +} + +.input-prepend .add-on:first-child, +.input-prepend .btn:first-child { + -webkit-border-radius: 4px 0 0 4px; + -moz-border-radius: 4px 0 0 4px; + border-radius: 4px 0 0 4px; +} + +.input-append input, +.input-append select, +.input-append .uneditable-input { + -webkit-border-radius: 4px 0 0 4px; + -moz-border-radius: 4px 0 0 4px; + border-radius: 4px 0 0 4px; +} + +.input-append input + .btn-group .btn:last-child, +.input-append select + .btn-group .btn:last-child, +.input-append .uneditable-input + .btn-group .btn:last-child { + -webkit-border-radius: 0 4px 4px 0; + -moz-border-radius: 0 4px 4px 0; + border-radius: 0 4px 4px 0; +} + +.input-append .add-on, +.input-append .btn, +.input-append .btn-group { + margin-left: -1px; +} + +.input-append .add-on:last-child, +.input-append .btn:last-child, +.input-append .btn-group:last-child > .dropdown-toggle { + -webkit-border-radius: 0 4px 4px 0; + -moz-border-radius: 0 4px 4px 0; + border-radius: 0 4px 4px 0; +} + +.input-prepend.input-append input, +.input-prepend.input-append select, +.input-prepend.input-append .uneditable-input { + -webkit-border-radius: 0; + -moz-border-radius: 0; + border-radius: 0; +} + +.input-prepend.input-append input + .btn-group .btn, +.input-prepend.input-append select + .btn-group .btn, +.input-prepend.input-append .uneditable-input + .btn-group .btn { + -webkit-border-radius: 0 4px 4px 0; + -moz-border-radius: 0 4px 4px 0; + border-radius: 0 4px 4px 0; +} + +.input-prepend.input-append .add-on:first-child, +.input-prepend.input-append .btn:first-child { + margin-right: -1px; + -webkit-border-radius: 4px 0 0 4px; + -moz-border-radius: 4px 0 0 4px; + border-radius: 4px 0 0 4px; +} + +.input-prepend.input-append .add-on:last-child, +.input-prepend.input-append .btn:last-child { + margin-left: -1px; + -webkit-border-radius: 0 4px 4px 0; + -moz-border-radius: 0 4px 4px 0; + border-radius: 0 4px 4px 0; +} + +.input-prepend.input-append .btn-group:first-child { + margin-left: 0; +} + +input.search-query { + padding-right: 14px; + padding-right: 4px \9; + padding-left: 14px; + padding-left: 4px \9; + /* IE7-8 doesn't have border-radius, so don't indent the padding */ + + margin-bottom: 0; + -webkit-border-radius: 15px; + -moz-border-radius: 15px; + border-radius: 15px; +} + +/* Allow for input prepend/append in search forms */ + +.form-search .input-append .search-query, +.form-search .input-prepend .search-query { + -webkit-border-radius: 0; + -moz-border-radius: 0; + border-radius: 0; +} + +.form-search .input-append .search-query { + -webkit-border-radius: 14px 0 0 14px; + -moz-border-radius: 14px 0 0 14px; + border-radius: 14px 0 0 14px; +} + +.form-search .input-append .btn { + -webkit-border-radius: 0 14px 14px 0; + -moz-border-radius: 0 14px 14px 0; + border-radius: 0 14px 14px 0; +} + +.form-search .input-prepend .search-query { + -webkit-border-radius: 0 14px 14px 0; + -moz-border-radius: 0 14px 14px 0; + border-radius: 0 14px 14px 0; +} + +.form-search .input-prepend .btn { + -webkit-border-radius: 14px 0 0 14px; + -moz-border-radius: 14px 0 0 14px; + border-radius: 14px 0 0 14px; +} + +.form-search input, +.form-inline input, +.form-horizontal input, +.form-search textarea, +.form-inline textarea, +.form-horizontal textarea, +.form-search select, +.form-inline select, +.form-horizontal select, +.form-search .help-inline, +.form-inline .help-inline, +.form-horizontal .help-inline, +.form-search .uneditable-input, +.form-inline .uneditable-input, +.form-horizontal .uneditable-input, +.form-search .input-prepend, +.form-inline .input-prepend, +.form-horizontal .input-prepend, +.form-search .input-append, +.form-inline .input-append, +.form-horizontal .input-append { + display: inline-block; + *display: inline; + margin-bottom: 0; + vertical-align: middle; + *zoom: 1; +} + +.form-search .hide, +.form-inline .hide, +.form-horizontal .hide { + display: none; +} + +.form-search label, +.form-inline label, +.form-search .btn-group, +.form-inline .btn-group { + display: inline-block; +} + +.form-search .input-append, +.form-inline .input-append, +.form-search .input-prepend, +.form-inline .input-prepend { + margin-bottom: 0; +} + +.form-search .radio, +.form-search .checkbox, +.form-inline .radio, +.form-inline .checkbox { + padding-left: 0; + margin-bottom: 0; + vertical-align: middle; +} + +.form-search .radio input[type="radio"], +.form-search .checkbox input[type="checkbox"], +.form-inline .radio input[type="radio"], +.form-inline .checkbox input[type="checkbox"] { + float: left; + margin-right: 3px; + margin-left: 0; +} + +.control-group { + margin-bottom: 10px; +} + +legend + .control-group { + margin-top: 20px; + -webkit-margin-top-collapse: separate; +} + +.form-horizontal .control-group { + margin-bottom: 20px; + *zoom: 1; +} + +.form-horizontal .control-group:before, +.form-horizontal .control-group:after { + display: table; + line-height: 0; + content: ""; +} + +.form-horizontal .control-group:after { + clear: both; +} + +.form-horizontal .control-label { + float: left; + width: 160px; + padding-top: 5px; + text-align: right; +} + +.form-horizontal .controls { + *display: inline-block; + *padding-left: 20px; + margin-left: 180px; + *margin-left: 0; +} + +.form-horizontal .controls:first-child { + *padding-left: 180px; +} + +.form-horizontal .help-block { + margin-bottom: 0; +} + +.form-horizontal input + .help-block, +.form-horizontal select + .help-block, +.form-horizontal textarea + .help-block, +.form-horizontal .uneditable-input + .help-block, +.form-horizontal .input-prepend + .help-block, +.form-horizontal .input-append + .help-block { + margin-top: 10px; +} + +.form-horizontal .form-actions { + padding-left: 180px; +} + +table { + max-width: 100%; + background-color: transparent; + border-collapse: collapse; + border-spacing: 0; +} + +.table { + width: 100%; + margin-bottom: 20px; +} + +.table th, +.table td { + padding: 8px; + line-height: 20px; + text-align: left; + vertical-align: top; + border-top: 1px solid #dddddd; +} + +.table th { + font-weight: bold; +} + +.table thead th { + vertical-align: bottom; +} + +.table caption + thead tr:first-child th, +.table caption + thead tr:first-child td, +.table colgroup + thead tr:first-child th, +.table colgroup + thead tr:first-child td, +.table thead:first-child tr:first-child th, +.table thead:first-child tr:first-child td { + border-top: 0; +} + +.table tbody + tbody { + border-top: 2px solid #dddddd; +} + +.table .table { + background-color: #ffffff; +} + +.table-condensed th, +.table-condensed td { + padding: 4px 5px; +} + +.table-bordered { + border: 1px solid #dddddd; + border-collapse: separate; + *border-collapse: collapse; + border-left: 0; + -webkit-border-radius: 4px; + -moz-border-radius: 4px; + border-radius: 4px; +} + +.table-bordered th, +.table-bordered td { + border-left: 1px solid #dddddd; +} + +.table-bordered caption + thead tr:first-child th, +.table-bordered caption + tbody tr:first-child th, +.table-bordered caption + tbody tr:first-child td, +.table-bordered colgroup + thead tr:first-child th, +.table-bordered colgroup + tbody tr:first-child th, +.table-bordered colgroup + tbody tr:first-child td, +.table-bordered thead:first-child tr:first-child th, +.table-bordered tbody:first-child tr:first-child th, +.table-bordered tbody:first-child tr:first-child td { + border-top: 0; +} + +.table-bordered thead:first-child tr:first-child > th:first-child, +.table-bordered tbody:first-child tr:first-child > td:first-child, +.table-bordered tbody:first-child tr:first-child > th:first-child { + -webkit-border-top-left-radius: 4px; + border-top-left-radius: 4px; + -moz-border-radius-topleft: 4px; +} + +.table-bordered thead:first-child tr:first-child > th:last-child, +.table-bordered tbody:first-child tr:first-child > td:last-child, +.table-bordered tbody:first-child tr:first-child > th:last-child { + -webkit-border-top-right-radius: 4px; + border-top-right-radius: 4px; + -moz-border-radius-topright: 4px; +} + +.table-bordered thead:last-child tr:last-child > th:first-child, +.table-bordered tbody:last-child tr:last-child > td:first-child, +.table-bordered tbody:last-child tr:last-child > th:first-child, +.table-bordered tfoot:last-child tr:last-child > td:first-child, +.table-bordered tfoot:last-child tr:last-child > th:first-child { + -webkit-border-bottom-left-radius: 4px; + border-bottom-left-radius: 4px; + -moz-border-radius-bottomleft: 4px; +} + +.table-bordered thead:last-child tr:last-child > th:last-child, +.table-bordered tbody:last-child tr:last-child > td:last-child, +.table-bordered tbody:last-child tr:last-child > th:last-child, +.table-bordered tfoot:last-child tr:last-child > td:last-child, +.table-bordered tfoot:last-child tr:last-child > th:last-child { + -webkit-border-bottom-right-radius: 4px; + border-bottom-right-radius: 4px; + -moz-border-radius-bottomright: 4px; +} + +.table-bordered tfoot + tbody:last-child tr:last-child td:first-child { + -webkit-border-bottom-left-radius: 0; + border-bottom-left-radius: 0; + -moz-border-radius-bottomleft: 0; +} + +.table-bordered tfoot + tbody:last-child tr:last-child td:last-child { + -webkit-border-bottom-right-radius: 0; + border-bottom-right-radius: 0; + -moz-border-radius-bottomright: 0; +} + +.table-bordered caption + thead tr:first-child th:first-child, +.table-bordered caption + tbody tr:first-child td:first-child, +.table-bordered colgroup + thead tr:first-child th:first-child, +.table-bordered colgroup + tbody tr:first-child td:first-child { + -webkit-border-top-left-radius: 4px; + border-top-left-radius: 4px; + -moz-border-radius-topleft: 4px; +} + +.table-bordered caption + thead tr:first-child th:last-child, +.table-bordered caption + tbody tr:first-child td:last-child, +.table-bordered colgroup + thead tr:first-child th:last-child, +.table-bordered colgroup + tbody tr:first-child td:last-child { + -webkit-border-top-right-radius: 4px; + border-top-right-radius: 4px; + -moz-border-radius-topright: 4px; +} + +.table-striped tbody > tr:nth-child(odd) > td, +.table-striped tbody > tr:nth-child(odd) > th { + background-color: #f9f9f9; +} + +.table-hover tbody tr:hover > td, +.table-hover tbody tr:hover > th { + background-color: #f5f5f5; +} + +table td[class*="span"], +table th[class*="span"], +.row-fluid table td[class*="span"], +.row-fluid table th[class*="span"] { + display: table-cell; + float: none; + margin-left: 0; +} + +.table td.span1, +.table th.span1 { + float: none; + width: 44px; + margin-left: 0; +} + +.table td.span2, +.table th.span2 { + float: none; + width: 124px; + margin-left: 0; +} + +.table td.span3, +.table th.span3 { + float: none; + width: 204px; + margin-left: 0; +} + +.table td.span4, +.table th.span4 { + float: none; + width: 284px; + margin-left: 0; +} + +.table td.span5, +.table th.span5 { + float: none; + width: 364px; + margin-left: 0; +} + +.table td.span6, +.table th.span6 { + float: none; + width: 444px; + margin-left: 0; +} + +.table td.span7, +.table th.span7 { + float: none; + width: 524px; + margin-left: 0; +} + +.table td.span8, +.table th.span8 { + float: none; + width: 604px; + margin-left: 0; +} + +.table td.span9, +.table th.span9 { + float: none; + width: 684px; + margin-left: 0; +} + +.table td.span10, +.table th.span10 { + float: none; + width: 764px; + margin-left: 0; +} + +.table td.span11, +.table th.span11 { + float: none; + width: 844px; + margin-left: 0; +} + +.table td.span12, +.table th.span12 { + float: none; + width: 924px; + margin-left: 0; +} + +.table tbody tr.success > td { + background-color: #dff0d8; +} + +.table tbody tr.error > td { + background-color: #f2dede; +} + +.table tbody tr.warning > td { + background-color: #fcf8e3; +} + +.table tbody tr.info > td { + background-color: #d9edf7; +} + +.table-hover tbody tr.success:hover > td { + background-color: #d0e9c6; +} + +.table-hover tbody tr.error:hover > td { + background-color: #ebcccc; +} + +.table-hover tbody tr.warning:hover > td { + background-color: #faf2cc; +} + +.table-hover tbody tr.info:hover > td { + background-color: #c4e3f3; +} + +[class^="icon-"], +[class*=" icon-"] { + display: inline-block; + width: 14px; + height: 14px; + margin-top: 1px; + *margin-right: .3em; + line-height: 14px; + vertical-align: text-top; + background-image: url("../img/glyphicons-halflings.png"); + background-position: 14px 14px; + background-repeat: no-repeat; +} + +/* White icons with optional class, or on hover/focus/active states of certain elements */ + +.icon-white, +.nav-pills > .active > a > [class^="icon-"], +.nav-pills > .active > a > [class*=" icon-"], +.nav-list > .active > a > [class^="icon-"], +.nav-list > .active > a > [class*=" icon-"], +.navbar-inverse .nav > .active > a > [class^="icon-"], +.navbar-inverse .nav > .active > a > [class*=" icon-"], +.dropdown-menu > li > a:hover > [class^="icon-"], +.dropdown-menu > li > a:focus > [class^="icon-"], +.dropdown-menu > li > a:hover > [class*=" icon-"], +.dropdown-menu > li > a:focus > [class*=" icon-"], +.dropdown-menu > .active > a > [class^="icon-"], +.dropdown-menu > .active > a > [class*=" icon-"], +.dropdown-submenu:hover > a > [class^="icon-"], +.dropdown-submenu:focus > a > [class^="icon-"], +.dropdown-submenu:hover > a > [class*=" icon-"], +.dropdown-submenu:focus > a > [class*=" icon-"] { + background-image: url("../img/glyphicons-halflings-white.png"); +} + +.icon-glass { + background-position: 0 0; +} + +.icon-music { + background-position: -24px 0; +} + +.icon-search { + background-position: -48px 0; +} + +.icon-envelope { + background-position: -72px 0; +} + +.icon-heart { + background-position: -96px 0; +} + +.icon-star { + background-position: -120px 0; +} + +.icon-star-empty { + background-position: -144px 0; +} + +.icon-user { + background-position: -168px 0; +} + +.icon-film { + background-position: -192px 0; +} + +.icon-th-large { + background-position: -216px 0; +} + +.icon-th { + background-position: -240px 0; +} + +.icon-th-list { + background-position: -264px 0; +} + +.icon-ok { + background-position: -288px 0; +} + +.icon-remove { + background-position: -312px 0; +} + +.icon-zoom-in { + background-position: -336px 0; +} + +.icon-zoom-out { + background-position: -360px 0; +} + +.icon-off { + background-position: -384px 0; +} + +.icon-signal { + background-position: -408px 0; +} + +.icon-cog { + background-position: -432px 0; +} + +.icon-trash { + background-position: -456px 0; +} + +.icon-home { + background-position: 0 -24px; +} + +.icon-file { + background-position: -24px -24px; +} + +.icon-time { + background-position: -48px -24px; +} + +.icon-road { + background-position: -72px -24px; +} + +.icon-download-alt { + background-position: -96px -24px; +} + +.icon-download { + background-position: -120px -24px; +} + +.icon-upload { + background-position: -144px -24px; +} + +.icon-inbox { + background-position: -168px -24px; +} + +.icon-play-circle { + background-position: -192px -24px; +} + +.icon-repeat { + background-position: -216px -24px; +} + +.icon-refresh { + background-position: -240px -24px; +} + +.icon-list-alt { + background-position: -264px -24px; +} + +.icon-lock { + background-position: -287px -24px; +} + +.icon-flag { + background-position: -312px -24px; +} + +.icon-headphones { + background-position: -336px -24px; +} + +.icon-volume-off { + background-position: -360px -24px; +} + +.icon-volume-down { + background-position: -384px -24px; +} + +.icon-volume-up { + background-position: -408px -24px; +} + +.icon-qrcode { + background-position: -432px -24px; +} + +.icon-barcode { + background-position: -456px -24px; +} + +.icon-tag { + background-position: 0 -48px; +} + +.icon-tags { + background-position: -25px -48px; +} + +.icon-book { + background-position: -48px -48px; +} + +.icon-bookmark { + background-position: -72px -48px; +} + +.icon-print { + background-position: -96px -48px; +} + +.icon-camera { + background-position: -120px -48px; +} + +.icon-font { + background-position: -144px -48px; +} + +.icon-bold { + background-position: -167px -48px; +} + +.icon-italic { + background-position: -192px -48px; +} + +.icon-text-height { + background-position: -216px -48px; +} + +.icon-text-width { + background-position: -240px -48px; +} + +.icon-align-left { + background-position: -264px -48px; +} + +.icon-align-center { + background-position: -288px -48px; +} + +.icon-align-right { + background-position: -312px -48px; +} + +.icon-align-justify { + background-position: -336px -48px; +} + +.icon-list { + background-position: -360px -48px; +} + +.icon-indent-left { + background-position: -384px -48px; +} + +.icon-indent-right { + background-position: -408px -48px; +} + +.icon-facetime-video { + background-position: -432px -48px; +} + +.icon-picture { + background-position: -456px -48px; +} + +.icon-pencil { + background-position: 0 -72px; +} + +.icon-map-marker { + background-position: -24px -72px; +} + +.icon-adjust { + background-position: -48px -72px; +} + +.icon-tint { + background-position: -72px -72px; +} + +.icon-edit { + background-position: -96px -72px; +} + +.icon-share { + background-position: -120px -72px; +} + +.icon-check { + background-position: -144px -72px; +} + +.icon-move { + background-position: -168px -72px; +} + +.icon-step-backward { + background-position: -192px -72px; +} + +.icon-fast-backward { + background-position: -216px -72px; +} + +.icon-backward { + background-position: -240px -72px; +} + +.icon-play { + background-position: -264px -72px; +} + +.icon-pause { + background-position: -288px -72px; +} + +.icon-stop { + background-position: -312px -72px; +} + +.icon-forward { + background-position: -336px -72px; +} + +.icon-fast-forward { + background-position: -360px -72px; +} + +.icon-step-forward { + background-position: -384px -72px; +} + +.icon-eject { + background-position: -408px -72px; +} + +.icon-chevron-left { + background-position: -432px -72px; +} + +.icon-chevron-right { + background-position: -456px -72px; +} + +.icon-plus-sign { + background-position: 0 -96px; +} + +.icon-minus-sign { + background-position: -24px -96px; +} + +.icon-remove-sign { + background-position: -48px -96px; +} + +.icon-ok-sign { + background-position: -72px -96px; +} + +.icon-question-sign { + background-position: -96px -96px; +} + +.icon-info-sign { + background-position: -120px -96px; +} + +.icon-screenshot { + background-position: -144px -96px; +} + +.icon-remove-circle { + background-position: -168px -96px; +} + +.icon-ok-circle { + background-position: -192px -96px; +} + +.icon-ban-circle { + background-position: -216px -96px; +} + +.icon-arrow-left { + background-position: -240px -96px; +} + +.icon-arrow-right { + background-position: -264px -96px; +} + +.icon-arrow-up { + background-position: -289px -96px; +} + +.icon-arrow-down { + background-position: -312px -96px; +} + +.icon-share-alt { + background-position: -336px -96px; +} + +.icon-resize-full { + background-position: -360px -96px; +} + +.icon-resize-small { + background-position: -384px -96px; +} + +.icon-plus { + background-position: -408px -96px; +} + +.icon-minus { + background-position: -433px -96px; +} + +.icon-asterisk { + background-position: -456px -96px; +} + +.icon-exclamation-sign { + background-position: 0 -120px; +} + +.icon-gift { + background-position: -24px -120px; +} + +.icon-leaf { + background-position: -48px -120px; +} + +.icon-fire { + background-position: -72px -120px; +} + +.icon-eye-open { + background-position: -96px -120px; +} + +.icon-eye-close { + background-position: -120px -120px; +} + +.icon-warning-sign { + background-position: -144px -120px; +} + +.icon-plane { + background-position: -168px -120px; +} + +.icon-calendar { + background-position: -192px -120px; +} + +.icon-random { + width: 16px; + background-position: -216px -120px; +} + +.icon-comment { + background-position: -240px -120px; +} + +.icon-magnet { + background-position: -264px -120px; +} + +.icon-chevron-up { + background-position: -288px -120px; +} + +.icon-chevron-down { + background-position: -313px -119px; +} + +.icon-retweet { + background-position: -336px -120px; +} + +.icon-shopping-cart { + background-position: -360px -120px; +} + +.icon-folder-close { + width: 16px; + background-position: -384px -120px; +} + +.icon-folder-open { + width: 16px; + background-position: -408px -120px; +} + +.icon-resize-vertical { + background-position: -432px -119px; +} + +.icon-resize-horizontal { + background-position: -456px -118px; +} + +.icon-hdd { + background-position: 0 -144px; +} + +.icon-bullhorn { + background-position: -24px -144px; +} + +.icon-bell { + background-position: -48px -144px; +} + +.icon-certificate { + background-position: -72px -144px; +} + +.icon-thumbs-up { + background-position: -96px -144px; +} + +.icon-thumbs-down { + background-position: -120px -144px; +} + +.icon-hand-right { + background-position: -144px -144px; +} + +.icon-hand-left { + background-position: -168px -144px; +} + +.icon-hand-up { + background-position: -192px -144px; +} + +.icon-hand-down { + background-position: -216px -144px; +} + +.icon-circle-arrow-right { + background-position: -240px -144px; +} + +.icon-circle-arrow-left { + background-position: -264px -144px; +} + +.icon-circle-arrow-up { + background-position: -288px -144px; +} + +.icon-circle-arrow-down { + background-position: -312px -144px; +} + +.icon-globe { + background-position: -336px -144px; +} + +.icon-wrench { + background-position: -360px -144px; +} + +.icon-tasks { + background-position: -384px -144px; +} + +.icon-filter { + background-position: -408px -144px; +} + +.icon-briefcase { + background-position: -432px -144px; +} + +.icon-fullscreen { + background-position: -456px -144px; +} + +.dropup, +.dropdown { + position: relative; +} + +.dropdown-toggle { + *margin-bottom: -3px; +} + +.dropdown-toggle:active, +.open .dropdown-toggle { + outline: 0; +} + +.caret { + display: inline-block; + width: 0; + height: 0; + vertical-align: top; + border-top: 4px solid #000000; + border-right: 4px solid transparent; + border-left: 4px solid transparent; + content: ""; +} + +.dropdown .caret { + margin-top: 8px; + margin-left: 2px; +} + +.dropdown-menu { + position: absolute; + top: 100%; + left: 0; + z-index: 1000; + display: none; + float: left; + min-width: 160px; + padding: 5px 0; + margin: 2px 0 0; + list-style: none; + background-color: #ffffff; + border: 1px solid #ccc; + border: 1px solid rgba(0, 0, 0, 0.2); + *border-right-width: 2px; + *border-bottom-width: 2px; + -webkit-border-radius: 6px; + -moz-border-radius: 6px; + border-radius: 6px; + -webkit-box-shadow: 0 5px 10px rgba(0, 0, 0, 0.2); + -moz-box-shadow: 0 5px 10px rgba(0, 0, 0, 0.2); + box-shadow: 0 5px 10px rgba(0, 0, 0, 0.2); + -webkit-background-clip: padding-box; + -moz-background-clip: padding; + background-clip: padding-box; +} + +.dropdown-menu.pull-right { + right: 0; + left: auto; +} + +.dropdown-menu .divider { + *width: 100%; + height: 1px; + margin: 9px 1px; + *margin: -5px 0 5px; + overflow: hidden; + background-color: #e5e5e5; + border-bottom: 1px solid #ffffff; +} + +.dropdown-menu > li > a { + display: block; + padding: 3px 20px; + clear: both; + font-weight: normal; + line-height: 20px; + color: #333333; + white-space: nowrap; +} + +.dropdown-menu > li > a:hover, +.dropdown-menu > li > a:focus, +.dropdown-submenu:hover > a, +.dropdown-submenu:focus > a { + color: #ffffff; + text-decoration: none; + background-color: #0081c2; + background-image: -moz-linear-gradient(top, #0088cc, #0077b3); + background-image: -webkit-gradient(linear, 0 0, 0 100%, from(#0088cc), to(#0077b3)); + background-image: -webkit-linear-gradient(top, #0088cc, #0077b3); + background-image: -o-linear-gradient(top, #0088cc, #0077b3); + background-image: linear-gradient(to bottom, #0088cc, #0077b3); + background-repeat: repeat-x; + filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff0088cc', endColorstr='#ff0077b3', GradientType=0); +} + +.dropdown-menu > .active > a, +.dropdown-menu > .active > a:hover, +.dropdown-menu > .active > a:focus { + color: #ffffff; + text-decoration: none; + background-color: #0081c2; + background-image: -moz-linear-gradient(top, #0088cc, #0077b3); + background-image: -webkit-gradient(linear, 0 0, 0 100%, from(#0088cc), to(#0077b3)); + background-image: -webkit-linear-gradient(top, #0088cc, #0077b3); + background-image: -o-linear-gradient(top, #0088cc, #0077b3); + background-image: linear-gradient(to bottom, #0088cc, #0077b3); + background-repeat: repeat-x; + outline: 0; + filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff0088cc', endColorstr='#ff0077b3', GradientType=0); +} + +.dropdown-menu > .disabled > a, +.dropdown-menu > .disabled > a:hover, +.dropdown-menu > .disabled > a:focus { + color: #999999; +} + +.dropdown-menu > .disabled > a:hover, +.dropdown-menu > .disabled > a:focus { + text-decoration: none; + cursor: default; + background-color: transparent; + background-image: none; + filter: progid:DXImageTransform.Microsoft.gradient(enabled=false); +} + +.open { + *z-index: 1000; +} + +.open > .dropdown-menu { + display: block; +} + +.pull-right > .dropdown-menu { + right: 0; + left: auto; +} + +.dropup .caret, +.navbar-fixed-bottom .dropdown .caret { + border-top: 0; + border-bottom: 4px solid #000000; + content: ""; +} + +.dropup .dropdown-menu, +.navbar-fixed-bottom .dropdown .dropdown-menu { + top: auto; + bottom: 100%; + margin-bottom: 1px; +} + +.dropdown-submenu { + position: relative; +} + +.dropdown-submenu > .dropdown-menu { + top: 0; + left: 100%; + margin-top: -6px; + margin-left: -1px; + -webkit-border-radius: 0 6px 6px 6px; + -moz-border-radius: 0 6px 6px 6px; + border-radius: 0 6px 6px 6px; +} + +.dropdown-submenu:hover > .dropdown-menu { + display: block; +} + +.dropup .dropdown-submenu > .dropdown-menu { + top: auto; + bottom: 0; + margin-top: 0; + margin-bottom: -2px; + -webkit-border-radius: 5px 5px 5px 0; + -moz-border-radius: 5px 5px 5px 0; + border-radius: 5px 5px 5px 0; +} + +.dropdown-submenu > a:after { + display: block; + float: right; + width: 0; + height: 0; + margin-top: 5px; + margin-right: -10px; + border-color: transparent; + border-left-color: #cccccc; + border-style: solid; + border-width: 5px 0 5px 5px; + content: " "; +} + +.dropdown-submenu:hover > a:after { + border-left-color: #ffffff; +} + +.dropdown-submenu.pull-left { + float: none; +} + +.dropdown-submenu.pull-left > .dropdown-menu { + left: -100%; + margin-left: 10px; + -webkit-border-radius: 6px 0 6px 6px; + -moz-border-radius: 6px 0 6px 6px; + border-radius: 6px 0 6px 6px; +} + +.dropdown .dropdown-menu .nav-header { + padding-right: 20px; + padding-left: 20px; +} + +.typeahead { + z-index: 1051; + margin-top: 2px; + -webkit-border-radius: 4px; + -moz-border-radius: 4px; + border-radius: 4px; +} + +.well { + min-height: 20px; + padding: 19px; + margin-bottom: 20px; + background-color: #f5f5f5; + border: 1px solid #e3e3e3; + -webkit-border-radius: 4px; + -moz-border-radius: 4px; + border-radius: 4px; + -webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.05); + -moz-box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.05); + box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.05); +} + +.well blockquote { + border-color: #ddd; + border-color: rgba(0, 0, 0, 0.15); +} + +.well-large { + padding: 24px; + -webkit-border-radius: 6px; + -moz-border-radius: 6px; + border-radius: 6px; +} + +.well-small { + padding: 9px; + -webkit-border-radius: 3px; + -moz-border-radius: 3px; + border-radius: 3px; +} + +.fade { + opacity: 0; + -webkit-transition: opacity 0.15s linear; + -moz-transition: opacity 0.15s linear; + -o-transition: opacity 0.15s linear; + transition: opacity 0.15s linear; +} + +.fade.in { + opacity: 1; +} + +.collapse { + position: relative; + height: 0; + overflow: hidden; + -webkit-transition: height 0.35s ease; + -moz-transition: height 0.35s ease; + -o-transition: height 0.35s ease; + transition: height 0.35s ease; +} + +.collapse.in { + height: auto; +} + +.close { + float: right; + font-size: 20px; + font-weight: bold; + line-height: 20px; + color: #000000; + text-shadow: 0 1px 0 #ffffff; + opacity: 0.2; + filter: alpha(opacity=20); +} + +.close:hover, +.close:focus { + color: #000000; + text-decoration: none; + cursor: pointer; + opacity: 0.4; + filter: alpha(opacity=40); +} + +button.close { + padding: 0; + cursor: pointer; + background: transparent; + border: 0; + -webkit-appearance: none; +} + +.btn { + display: inline-block; + *display: inline; + padding: 4px 12px; + margin-bottom: 0; + *margin-left: .3em; + font-size: 14px; + line-height: 20px; + color: #333333; + text-align: center; + text-shadow: 0 1px 1px rgba(255, 255, 255, 0.75); + vertical-align: middle; + cursor: pointer; + background-color: #f5f5f5; + *background-color: #e6e6e6; + background-image: -moz-linear-gradient(top, #ffffff, #e6e6e6); + background-image: -webkit-gradient(linear, 0 0, 0 100%, from(#ffffff), to(#e6e6e6)); + background-image: -webkit-linear-gradient(top, #ffffff, #e6e6e6); + background-image: -o-linear-gradient(top, #ffffff, #e6e6e6); + background-image: linear-gradient(to bottom, #ffffff, #e6e6e6); + background-repeat: repeat-x; + border: 1px solid #cccccc; + *border: 0; + border-color: #e6e6e6 #e6e6e6 #bfbfbf; + border-color: rgba(0, 0, 0, 0.1) rgba(0, 0, 0, 0.1) rgba(0, 0, 0, 0.25); + border-bottom-color: #b3b3b3; + -webkit-border-radius: 4px; + -moz-border-radius: 4px; + border-radius: 4px; + filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffffffff', endColorstr='#ffe6e6e6', GradientType=0); + filter: progid:DXImageTransform.Microsoft.gradient(enabled=false); + *zoom: 1; + -webkit-box-shadow: inset 0 1px 0 rgba(255, 255, 255, 0.2), 0 1px 2px rgba(0, 0, 0, 0.05); + -moz-box-shadow: inset 0 1px 0 rgba(255, 255, 255, 0.2), 0 1px 2px rgba(0, 0, 0, 0.05); + box-shadow: inset 0 1px 0 rgba(255, 255, 255, 0.2), 0 1px 2px rgba(0, 0, 0, 0.05); +} + +.btn:hover, +.btn:focus, +.btn:active, +.btn.active, +.btn.disabled, +.btn[disabled] { + color: #333333; + background-color: #e6e6e6; + *background-color: #d9d9d9; +} + +.btn:active, +.btn.active { + background-color: #cccccc \9; +} + +.btn:first-child { + *margin-left: 0; +} + +.btn:hover, +.btn:focus { + color: #333333; + text-decoration: none; + background-position: 0 -15px; + -webkit-transition: background-position 0.1s linear; + -moz-transition: background-position 0.1s linear; + -o-transition: background-position 0.1s linear; + transition: background-position 0.1s linear; +} + +.btn:focus { + outline: thin dotted #333; + outline: 5px auto -webkit-focus-ring-color; + outline-offset: -2px; +} + +.btn.active, +.btn:active { + background-image: none; + outline: 0; + -webkit-box-shadow: inset 0 2px 4px rgba(0, 0, 0, 0.15), 0 1px 2px rgba(0, 0, 0, 0.05); + -moz-box-shadow: inset 0 2px 4px rgba(0, 0, 0, 0.15), 0 1px 2px rgba(0, 0, 0, 0.05); + box-shadow: inset 0 2px 4px rgba(0, 0, 0, 0.15), 0 1px 2px rgba(0, 0, 0, 0.05); +} + +.btn.disabled, +.btn[disabled] { + cursor: default; + background-image: none; + opacity: 0.65; + filter: alpha(opacity=65); + -webkit-box-shadow: none; + -moz-box-shadow: none; + box-shadow: none; +} + +.btn-large { + padding: 11px 19px; + font-size: 17.5px; + -webkit-border-radius: 6px; + -moz-border-radius: 6px; + border-radius: 6px; +} + +.btn-large [class^="icon-"], +.btn-large [class*=" icon-"] { + margin-top: 4px; +} + +.btn-small { + padding: 2px 10px; + font-size: 11.9px; + -webkit-border-radius: 3px; + -moz-border-radius: 3px; + border-radius: 3px; +} + +.btn-small [class^="icon-"], +.btn-small [class*=" icon-"] { + margin-top: 0; +} + +.btn-mini [class^="icon-"], +.btn-mini [class*=" icon-"] { + margin-top: -1px; +} + +.btn-mini { + padding: 0 6px; + font-size: 10.5px; + -webkit-border-radius: 3px; + -moz-border-radius: 3px; + border-radius: 3px; +} + +.btn-block { + display: block; + width: 100%; + padding-right: 0; + padding-left: 0; + -webkit-box-sizing: border-box; + -moz-box-sizing: border-box; + box-sizing: border-box; +} + +.btn-block + .btn-block { + margin-top: 5px; +} + +input[type="submit"].btn-block, +input[type="reset"].btn-block, +input[type="button"].btn-block { + width: 100%; +} + +.btn-primary.active, +.btn-warning.active, +.btn-danger.active, +.btn-success.active, +.btn-info.active, +.btn-inverse.active { + color: rgba(255, 255, 255, 0.75); +} + +.btn-primary { + color: #ffffff; + text-shadow: 0 -1px 0 rgba(0, 0, 0, 0.25); + background-color: #006dcc; + *background-color: #0044cc; + background-image: -moz-linear-gradient(top, #0088cc, #0044cc); + background-image: -webkit-gradient(linear, 0 0, 0 100%, from(#0088cc), to(#0044cc)); + background-image: -webkit-linear-gradient(top, #0088cc, #0044cc); + background-image: -o-linear-gradient(top, #0088cc, #0044cc); + background-image: linear-gradient(to bottom, #0088cc, #0044cc); + background-repeat: repeat-x; + border-color: #0044cc #0044cc #002a80; + border-color: rgba(0, 0, 0, 0.1) rgba(0, 0, 0, 0.1) rgba(0, 0, 0, 0.25); + filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff0088cc', endColorstr='#ff0044cc', GradientType=0); + filter: progid:DXImageTransform.Microsoft.gradient(enabled=false); +} + +.btn-primary:hover, +.btn-primary:focus, +.btn-primary:active, +.btn-primary.active, +.btn-primary.disabled, +.btn-primary[disabled] { + color: #ffffff; + background-color: #0044cc; + *background-color: #003bb3; +} + +.btn-primary:active, +.btn-primary.active { + background-color: #003399 \9; +} + +.btn-warning { + color: #ffffff; + text-shadow: 0 -1px 0 rgba(0, 0, 0, 0.25); + background-color: #faa732; + *background-color: #f89406; + background-image: -moz-linear-gradient(top, #fbb450, #f89406); + background-image: -webkit-gradient(linear, 0 0, 0 100%, from(#fbb450), to(#f89406)); + background-image: -webkit-linear-gradient(top, #fbb450, #f89406); + background-image: -o-linear-gradient(top, #fbb450, #f89406); + background-image: linear-gradient(to bottom, #fbb450, #f89406); + background-repeat: repeat-x; + border-color: #f89406 #f89406 #ad6704; + border-color: rgba(0, 0, 0, 0.1) rgba(0, 0, 0, 0.1) rgba(0, 0, 0, 0.25); + filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#fffbb450', endColorstr='#fff89406', GradientType=0); + filter: progid:DXImageTransform.Microsoft.gradient(enabled=false); +} + +.btn-warning:hover, +.btn-warning:focus, +.btn-warning:active, +.btn-warning.active, +.btn-warning.disabled, +.btn-warning[disabled] { + color: #ffffff; + background-color: #f89406; + *background-color: #df8505; +} + +.btn-warning:active, +.btn-warning.active { + background-color: #c67605 \9; +} + +.btn-danger { + color: #ffffff; + text-shadow: 0 -1px 0 rgba(0, 0, 0, 0.25); + background-color: #da4f49; + *background-color: #bd362f; + background-image: -moz-linear-gradient(top, #ee5f5b, #bd362f); + background-image: -webkit-gradient(linear, 0 0, 0 100%, from(#ee5f5b), to(#bd362f)); + background-image: -webkit-linear-gradient(top, #ee5f5b, #bd362f); + background-image: -o-linear-gradient(top, #ee5f5b, #bd362f); + background-image: linear-gradient(to bottom, #ee5f5b, #bd362f); + background-repeat: repeat-x; + border-color: #bd362f #bd362f #802420; + border-color: rgba(0, 0, 0, 0.1) rgba(0, 0, 0, 0.1) rgba(0, 0, 0, 0.25); + filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffee5f5b', endColorstr='#ffbd362f', GradientType=0); + filter: progid:DXImageTransform.Microsoft.gradient(enabled=false); +} + +.btn-danger:hover, +.btn-danger:focus, +.btn-danger:active, +.btn-danger.active, +.btn-danger.disabled, +.btn-danger[disabled] { + color: #ffffff; + background-color: #bd362f; + *background-color: #a9302a; +} + +.btn-danger:active, +.btn-danger.active { + background-color: #942a25 \9; +} + +.btn-success { + color: #ffffff; + text-shadow: 0 -1px 0 rgba(0, 0, 0, 0.25); + background-color: #5bb75b; + *background-color: #51a351; + background-image: -moz-linear-gradient(top, #62c462, #51a351); + background-image: -webkit-gradient(linear, 0 0, 0 100%, from(#62c462), to(#51a351)); + background-image: -webkit-linear-gradient(top, #62c462, #51a351); + background-image: -o-linear-gradient(top, #62c462, #51a351); + background-image: linear-gradient(to bottom, #62c462, #51a351); + background-repeat: repeat-x; + border-color: #51a351 #51a351 #387038; + border-color: rgba(0, 0, 0, 0.1) rgba(0, 0, 0, 0.1) rgba(0, 0, 0, 0.25); + filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff62c462', endColorstr='#ff51a351', GradientType=0); + filter: progid:DXImageTransform.Microsoft.gradient(enabled=false); +} + +.btn-success:hover, +.btn-success:focus, +.btn-success:active, +.btn-success.active, +.btn-success.disabled, +.btn-success[disabled] { + color: #ffffff; + background-color: #51a351; + *background-color: #499249; +} + +.btn-success:active, +.btn-success.active { + background-color: #408140 \9; +} + +.btn-info { + color: #ffffff; + text-shadow: 0 -1px 0 rgba(0, 0, 0, 0.25); + background-color: #49afcd; + *background-color: #2f96b4; + background-image: -moz-linear-gradient(top, #5bc0de, #2f96b4); + background-image: -webkit-gradient(linear, 0 0, 0 100%, from(#5bc0de), to(#2f96b4)); + background-image: -webkit-linear-gradient(top, #5bc0de, #2f96b4); + background-image: -o-linear-gradient(top, #5bc0de, #2f96b4); + background-image: linear-gradient(to bottom, #5bc0de, #2f96b4); + background-repeat: repeat-x; + border-color: #2f96b4 #2f96b4 #1f6377; + border-color: rgba(0, 0, 0, 0.1) rgba(0, 0, 0, 0.1) rgba(0, 0, 0, 0.25); + filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff5bc0de', endColorstr='#ff2f96b4', GradientType=0); + filter: progid:DXImageTransform.Microsoft.gradient(enabled=false); +} + +.btn-info:hover, +.btn-info:focus, +.btn-info:active, +.btn-info.active, +.btn-info.disabled, +.btn-info[disabled] { + color: #ffffff; + background-color: #2f96b4; + *background-color: #2a85a0; +} + +.btn-info:active, +.btn-info.active { + background-color: #24748c \9; +} + +.btn-inverse { + color: #ffffff; + text-shadow: 0 -1px 0 rgba(0, 0, 0, 0.25); + background-color: #363636; + *background-color: #222222; + background-image: -moz-linear-gradient(top, #444444, #222222); + background-image: -webkit-gradient(linear, 0 0, 0 100%, from(#444444), to(#222222)); + background-image: -webkit-linear-gradient(top, #444444, #222222); + background-image: -o-linear-gradient(top, #444444, #222222); + background-image: linear-gradient(to bottom, #444444, #222222); + background-repeat: repeat-x; + border-color: #222222 #222222 #000000; + border-color: rgba(0, 0, 0, 0.1) rgba(0, 0, 0, 0.1) rgba(0, 0, 0, 0.25); + filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff444444', endColorstr='#ff222222', GradientType=0); + filter: progid:DXImageTransform.Microsoft.gradient(enabled=false); +} + +.btn-inverse:hover, +.btn-inverse:focus, +.btn-inverse:active, +.btn-inverse.active, +.btn-inverse.disabled, +.btn-inverse[disabled] { + color: #ffffff; + background-color: #222222; + *background-color: #151515; +} + +.btn-inverse:active, +.btn-inverse.active { + background-color: #080808 \9; +} + +button.btn, +input[type="submit"].btn { + *padding-top: 3px; + *padding-bottom: 3px; +} + +button.btn::-moz-focus-inner, +input[type="submit"].btn::-moz-focus-inner { + padding: 0; + border: 0; +} + +button.btn.btn-large, +input[type="submit"].btn.btn-large { + *padding-top: 7px; + *padding-bottom: 7px; +} + +button.btn.btn-small, +input[type="submit"].btn.btn-small { + *padding-top: 3px; + *padding-bottom: 3px; +} + +button.btn.btn-mini, +input[type="submit"].btn.btn-mini { + *padding-top: 1px; + *padding-bottom: 1px; +} + +.btn-link, +.btn-link:active, +.btn-link[disabled] { + background-color: transparent; + background-image: none; + -webkit-box-shadow: none; + -moz-box-shadow: none; + box-shadow: none; +} + +.btn-link { + color: #0088cc; + cursor: pointer; + border-color: transparent; + -webkit-border-radius: 0; + -moz-border-radius: 0; + border-radius: 0; +} + +.btn-link:hover, +.btn-link:focus { + color: #005580; + text-decoration: underline; + background-color: transparent; +} + +.btn-link[disabled]:hover, +.btn-link[disabled]:focus { + color: #333333; + text-decoration: none; +} + +.btn-group { + position: relative; + display: inline-block; + *display: inline; + *margin-left: .3em; + font-size: 0; + white-space: nowrap; + vertical-align: middle; + *zoom: 1; +} + +.btn-group:first-child { + *margin-left: 0; +} + +.btn-group + .btn-group { + margin-left: 5px; +} + +.btn-toolbar { + margin-top: 10px; + margin-bottom: 10px; + font-size: 0; +} + +.btn-toolbar > .btn + .btn, +.btn-toolbar > .btn-group + .btn, +.btn-toolbar > .btn + .btn-group { + margin-left: 5px; +} + +.btn-group > .btn { + position: relative; + -webkit-border-radius: 0; + -moz-border-radius: 0; + border-radius: 0; +} + +.btn-group > .btn + .btn { + margin-left: -1px; +} + +.btn-group > .btn, +.btn-group > .dropdown-menu, +.btn-group > .popover { + font-size: 14px; +} + +.btn-group > .btn-mini { + font-size: 10.5px; +} + +.btn-group > .btn-small { + font-size: 11.9px; +} + +.btn-group > .btn-large { + font-size: 17.5px; +} + +.btn-group > .btn:first-child { + margin-left: 0; + -webkit-border-bottom-left-radius: 4px; + border-bottom-left-radius: 4px; + -webkit-border-top-left-radius: 4px; + border-top-left-radius: 4px; + -moz-border-radius-bottomleft: 4px; + -moz-border-radius-topleft: 4px; +} + +.btn-group > .btn:last-child, +.btn-group > .dropdown-toggle { + -webkit-border-top-right-radius: 4px; + border-top-right-radius: 4px; + -webkit-border-bottom-right-radius: 4px; + border-bottom-right-radius: 4px; + -moz-border-radius-topright: 4px; + -moz-border-radius-bottomright: 4px; +} + +.btn-group > .btn.large:first-child { + margin-left: 0; + -webkit-border-bottom-left-radius: 6px; + border-bottom-left-radius: 6px; + -webkit-border-top-left-radius: 6px; + border-top-left-radius: 6px; + -moz-border-radius-bottomleft: 6px; + -moz-border-radius-topleft: 6px; +} + +.btn-group > .btn.large:last-child, +.btn-group > .large.dropdown-toggle { + -webkit-border-top-right-radius: 6px; + border-top-right-radius: 6px; + -webkit-border-bottom-right-radius: 6px; + border-bottom-right-radius: 6px; + -moz-border-radius-topright: 6px; + -moz-border-radius-bottomright: 6px; +} + +.btn-group > .btn:hover, +.btn-group > .btn:focus, +.btn-group > .btn:active, +.btn-group > .btn.active { + z-index: 2; +} + +.btn-group .dropdown-toggle:active, +.btn-group.open .dropdown-toggle { + outline: 0; +} + +.btn-group > .btn + .dropdown-toggle { + *padding-top: 5px; + padding-right: 8px; + *padding-bottom: 5px; + padding-left: 8px; + -webkit-box-shadow: inset 1px 0 0 rgba(255, 255, 255, 0.125), inset 0 1px 0 rgba(255, 255, 255, 0.2), 0 1px 2px rgba(0, 0, 0, 0.05); + -moz-box-shadow: inset 1px 0 0 rgba(255, 255, 255, 0.125), inset 0 1px 0 rgba(255, 255, 255, 0.2), 0 1px 2px rgba(0, 0, 0, 0.05); + box-shadow: inset 1px 0 0 rgba(255, 255, 255, 0.125), inset 0 1px 0 rgba(255, 255, 255, 0.2), 0 1px 2px rgba(0, 0, 0, 0.05); +} + +.btn-group > .btn-mini + .dropdown-toggle { + *padding-top: 2px; + padding-right: 5px; + *padding-bottom: 2px; + padding-left: 5px; +} + +.btn-group > .btn-small + .dropdown-toggle { + *padding-top: 5px; + *padding-bottom: 4px; +} + +.btn-group > .btn-large + .dropdown-toggle { + *padding-top: 7px; + padding-right: 12px; + *padding-bottom: 7px; + padding-left: 12px; +} + +.btn-group.open .dropdown-toggle { + background-image: none; + -webkit-box-shadow: inset 0 2px 4px rgba(0, 0, 0, 0.15), 0 1px 2px rgba(0, 0, 0, 0.05); + -moz-box-shadow: inset 0 2px 4px rgba(0, 0, 0, 0.15), 0 1px 2px rgba(0, 0, 0, 0.05); + box-shadow: inset 0 2px 4px rgba(0, 0, 0, 0.15), 0 1px 2px rgba(0, 0, 0, 0.05); +} + +.btn-group.open .btn.dropdown-toggle { + background-color: #e6e6e6; +} + +.btn-group.open .btn-primary.dropdown-toggle { + background-color: #0044cc; +} + +.btn-group.open .btn-warning.dropdown-toggle { + background-color: #f89406; +} + +.btn-group.open .btn-danger.dropdown-toggle { + background-color: #bd362f; +} + +.btn-group.open .btn-success.dropdown-toggle { + background-color: #51a351; +} + +.btn-group.open .btn-info.dropdown-toggle { + background-color: #2f96b4; +} + +.btn-group.open .btn-inverse.dropdown-toggle { + background-color: #222222; +} + +.btn .caret { + margin-top: 8px; + margin-left: 0; +} + +.btn-large .caret { + margin-top: 6px; +} + +.btn-large .caret { + border-top-width: 5px; + border-right-width: 5px; + border-left-width: 5px; +} + +.btn-mini .caret, +.btn-small .caret { + margin-top: 8px; +} + +.dropup .btn-large .caret { + border-bottom-width: 5px; +} + +.btn-primary .caret, +.btn-warning .caret, +.btn-danger .caret, +.btn-info .caret, +.btn-success .caret, +.btn-inverse .caret { + border-top-color: #ffffff; + border-bottom-color: #ffffff; +} + +.btn-group-vertical { + display: inline-block; + *display: inline; + /* IE7 inline-block hack */ + + *zoom: 1; +} + +.btn-group-vertical > .btn { + display: block; + float: none; + max-width: 100%; + -webkit-border-radius: 0; + -moz-border-radius: 0; + border-radius: 0; +} + +.btn-group-vertical > .btn + .btn { + margin-top: -1px; + margin-left: 0; +} + +.btn-group-vertical > .btn:first-child { + -webkit-border-radius: 4px 4px 0 0; + -moz-border-radius: 4px 4px 0 0; + border-radius: 4px 4px 0 0; +} + +.btn-group-vertical > .btn:last-child { + -webkit-border-radius: 0 0 4px 4px; + -moz-border-radius: 0 0 4px 4px; + border-radius: 0 0 4px 4px; +} + +.btn-group-vertical > .btn-large:first-child { + -webkit-border-radius: 6px 6px 0 0; + -moz-border-radius: 6px 6px 0 0; + border-radius: 6px 6px 0 0; +} + +.btn-group-vertical > .btn-large:last-child { + -webkit-border-radius: 0 0 6px 6px; + -moz-border-radius: 0 0 6px 6px; + border-radius: 0 0 6px 6px; +} + +.alert { + padding: 8px 35px 8px 14px; + margin-bottom: 20px; + text-shadow: 0 1px 0 rgba(255, 255, 255, 0.5); + background-color: #fcf8e3; + border: 1px solid #fbeed5; + -webkit-border-radius: 4px; + -moz-border-radius: 4px; + border-radius: 4px; +} + +.alert, +.alert h4 { + color: #c09853; +} + +.alert h4 { + margin: 0; +} + +.alert .close { + position: relative; + top: -2px; + right: -21px; + line-height: 20px; +} + +.alert-success { + color: #468847; + background-color: #dff0d8; + border-color: #d6e9c6; +} + +.alert-success h4 { + color: #468847; +} + +.alert-danger, +.alert-error { + color: #b94a48; + background-color: #f2dede; + border-color: #eed3d7; +} + +.alert-danger h4, +.alert-error h4 { + color: #b94a48; +} + +.alert-info { + color: #3a87ad; + background-color: #d9edf7; + border-color: #bce8f1; +} + +.alert-info h4 { + color: #3a87ad; +} + +.alert-block { + padding-top: 14px; + padding-bottom: 14px; +} + +.alert-block > p, +.alert-block > ul { + margin-bottom: 0; +} + +.alert-block p + p { + margin-top: 5px; +} + +.nav { + margin-bottom: 20px; + margin-left: 0; + list-style: none; +} + +.nav > li > a { + display: block; +} + +.nav > li > a:hover, +.nav > li > a:focus { + text-decoration: none; + background-color: #eeeeee; +} + +.nav > li > a > img { + max-width: none; +} + +.nav > .pull-right { + float: right; +} + +.nav-header { + display: block; + padding: 3px 15px; + font-size: 11px; + font-weight: bold; + line-height: 20px; + color: #999999; + text-shadow: 0 1px 0 rgba(255, 255, 255, 0.5); + text-transform: uppercase; +} + +.nav li + .nav-header { + margin-top: 9px; +} + +.nav-list { + padding-right: 15px; + padding-left: 15px; + margin-bottom: 0; +} + +.nav-list > li > a, +.nav-list .nav-header { + margin-right: -15px; + margin-left: -15px; + text-shadow: 0 1px 0 rgba(255, 255, 255, 0.5); +} + +.nav-list > li > a { + padding: 3px 15px; +} + +.nav-list > .active > a, +.nav-list > .active > a:hover, +.nav-list > .active > a:focus { + color: #ffffff; + text-shadow: 0 -1px 0 rgba(0, 0, 0, 0.2); + background-color: #0088cc; +} + +.nav-list [class^="icon-"], +.nav-list [class*=" icon-"] { + margin-right: 2px; +} + +.nav-list .divider { + *width: 100%; + height: 1px; + margin: 9px 1px; + *margin: -5px 0 5px; + overflow: hidden; + background-color: #e5e5e5; + border-bottom: 1px solid #ffffff; +} + +.nav-tabs, +.nav-pills { + *zoom: 1; +} + +.nav-tabs:before, +.nav-pills:before, +.nav-tabs:after, +.nav-pills:after { + display: table; + line-height: 0; + content: ""; +} + +.nav-tabs:after, +.nav-pills:after { + clear: both; +} + +.nav-tabs > li, +.nav-pills > li { + float: left; +} + +.nav-tabs > li > a, +.nav-pills > li > a { + padding-right: 12px; + padding-left: 12px; + margin-right: 2px; + line-height: 14px; +} + +.nav-tabs { + border-bottom: 1px solid #ddd; +} + +.nav-tabs > li { + margin-bottom: -1px; +} + +.nav-tabs > li > a { + padding-top: 8px; + padding-bottom: 8px; + line-height: 20px; + border: 1px solid transparent; + -webkit-border-radius: 4px 4px 0 0; + -moz-border-radius: 4px 4px 0 0; + border-radius: 4px 4px 0 0; +} + +.nav-tabs > li > a:hover, +.nav-tabs > li > a:focus { + border-color: #eeeeee #eeeeee #dddddd; +} + +.nav-tabs > .active > a, +.nav-tabs > .active > a:hover, +.nav-tabs > .active > a:focus { + color: #555555; + cursor: default; + background-color: #ffffff; + border: 1px solid #ddd; + border-bottom-color: transparent; +} + +.nav-pills > li > a { + padding-top: 8px; + padding-bottom: 8px; + margin-top: 2px; + margin-bottom: 2px; + -webkit-border-radius: 5px; + -moz-border-radius: 5px; + border-radius: 5px; +} + +.nav-pills > .active > a, +.nav-pills > .active > a:hover, +.nav-pills > .active > a:focus { + color: #ffffff; + background-color: #0088cc; +} + +.nav-stacked > li { + float: none; +} + +.nav-stacked > li > a { + margin-right: 0; +} + +.nav-tabs.nav-stacked { + border-bottom: 0; +} + +.nav-tabs.nav-stacked > li > a { + border: 1px solid #ddd; + -webkit-border-radius: 0; + -moz-border-radius: 0; + border-radius: 0; +} + +.nav-tabs.nav-stacked > li:first-child > a { + -webkit-border-top-right-radius: 4px; + border-top-right-radius: 4px; + -webkit-border-top-left-radius: 4px; + border-top-left-radius: 4px; + -moz-border-radius-topright: 4px; + -moz-border-radius-topleft: 4px; +} + +.nav-tabs.nav-stacked > li:last-child > a { + -webkit-border-bottom-right-radius: 4px; + border-bottom-right-radius: 4px; + -webkit-border-bottom-left-radius: 4px; + border-bottom-left-radius: 4px; + -moz-border-radius-bottomright: 4px; + -moz-border-radius-bottomleft: 4px; +} + +.nav-tabs.nav-stacked > li > a:hover, +.nav-tabs.nav-stacked > li > a:focus { + z-index: 2; + border-color: #ddd; +} + +.nav-pills.nav-stacked > li > a { + margin-bottom: 3px; +} + +.nav-pills.nav-stacked > li:last-child > a { + margin-bottom: 1px; +} + +.nav-tabs .dropdown-menu { + -webkit-border-radius: 0 0 6px 6px; + -moz-border-radius: 0 0 6px 6px; + border-radius: 0 0 6px 6px; +} + +.nav-pills .dropdown-menu { + -webkit-border-radius: 6px; + -moz-border-radius: 6px; + border-radius: 6px; +} + +.nav .dropdown-toggle .caret { + margin-top: 6px; + border-top-color: #0088cc; + border-bottom-color: #0088cc; +} + +.nav .dropdown-toggle:hover .caret, +.nav .dropdown-toggle:focus .caret { + border-top-color: #005580; + border-bottom-color: #005580; +} + +/* move down carets for tabs */ + +.nav-tabs .dropdown-toggle .caret { + margin-top: 8px; +} + +.nav .active .dropdown-toggle .caret { + border-top-color: #fff; + border-bottom-color: #fff; +} + +.nav-tabs .active .dropdown-toggle .caret { + border-top-color: #555555; + border-bottom-color: #555555; +} + +.nav > .dropdown.active > a:hover, +.nav > .dropdown.active > a:focus { + cursor: pointer; +} + +.nav-tabs .open .dropdown-toggle, +.nav-pills .open .dropdown-toggle, +.nav > li.dropdown.open.active > a:hover, +.nav > li.dropdown.open.active > a:focus { + color: #ffffff; + background-color: #999999; + border-color: #999999; +} + +.nav li.dropdown.open .caret, +.nav li.dropdown.open.active .caret, +.nav li.dropdown.open a:hover .caret, +.nav li.dropdown.open a:focus .caret { + border-top-color: #ffffff; + border-bottom-color: #ffffff; + opacity: 1; + filter: alpha(opacity=100); +} + +.tabs-stacked .open > a:hover, +.tabs-stacked .open > a:focus { + border-color: #999999; +} + +.tabbable { + *zoom: 1; +} + +.tabbable:before, +.tabbable:after { + display: table; + line-height: 0; + content: ""; +} + +.tabbable:after { + clear: both; +} + +.tab-content { + overflow: auto; +} + +.tabs-below > .nav-tabs, +.tabs-right > .nav-tabs, +.tabs-left > .nav-tabs { + border-bottom: 0; +} + +.tab-content > .tab-pane, +.pill-content > .pill-pane { + display: none; +} + +.tab-content > .active, +.pill-content > .active { + display: block; +} + +.tabs-below > .nav-tabs { + border-top: 1px solid #ddd; +} + +.tabs-below > .nav-tabs > li { + margin-top: -1px; + margin-bottom: 0; +} + +.tabs-below > .nav-tabs > li > a { + -webkit-border-radius: 0 0 4px 4px; + -moz-border-radius: 0 0 4px 4px; + border-radius: 0 0 4px 4px; +} + +.tabs-below > .nav-tabs > li > a:hover, +.tabs-below > .nav-tabs > li > a:focus { + border-top-color: #ddd; + border-bottom-color: transparent; +} + +.tabs-below > .nav-tabs > .active > a, +.tabs-below > .nav-tabs > .active > a:hover, +.tabs-below > .nav-tabs > .active > a:focus { + border-color: transparent #ddd #ddd #ddd; +} + +.tabs-left > .nav-tabs > li, +.tabs-right > .nav-tabs > li { + float: none; +} + +.tabs-left > .nav-tabs > li > a, +.tabs-right > .nav-tabs > li > a { + min-width: 74px; + margin-right: 0; + margin-bottom: 3px; +} + +.tabs-left > .nav-tabs { + float: left; + margin-right: 19px; + border-right: 1px solid #ddd; +} + +.tabs-left > .nav-tabs > li > a { + margin-right: -1px; + -webkit-border-radius: 4px 0 0 4px; + -moz-border-radius: 4px 0 0 4px; + border-radius: 4px 0 0 4px; +} + +.tabs-left > .nav-tabs > li > a:hover, +.tabs-left > .nav-tabs > li > a:focus { + border-color: #eeeeee #dddddd #eeeeee #eeeeee; +} + +.tabs-left > .nav-tabs .active > a, +.tabs-left > .nav-tabs .active > a:hover, +.tabs-left > .nav-tabs .active > a:focus { + border-color: #ddd transparent #ddd #ddd; + *border-right-color: #ffffff; +} + +.tabs-right > .nav-tabs { + float: right; + margin-left: 19px; + border-left: 1px solid #ddd; +} + +.tabs-right > .nav-tabs > li > a { + margin-left: -1px; + -webkit-border-radius: 0 4px 4px 0; + -moz-border-radius: 0 4px 4px 0; + border-radius: 0 4px 4px 0; +} + +.tabs-right > .nav-tabs > li > a:hover, +.tabs-right > .nav-tabs > li > a:focus { + border-color: #eeeeee #eeeeee #eeeeee #dddddd; +} + +.tabs-right > .nav-tabs .active > a, +.tabs-right > .nav-tabs .active > a:hover, +.tabs-right > .nav-tabs .active > a:focus { + border-color: #ddd #ddd #ddd transparent; + *border-left-color: #ffffff; +} + +.nav > .disabled > a { + color: #999999; +} + +.nav > .disabled > a:hover, +.nav > .disabled > a:focus { + text-decoration: none; + cursor: default; + background-color: transparent; +} + +.navbar { + *position: relative; + *z-index: 2; + margin-bottom: 20px; + overflow: visible; +} + +.navbar-inner { + min-height: 40px; + padding-right: 20px; + padding-left: 20px; + background-color: #fafafa; + background-image: -moz-linear-gradient(top, #ffffff, #f2f2f2); + background-image: -webkit-gradient(linear, 0 0, 0 100%, from(#ffffff), to(#f2f2f2)); + background-image: -webkit-linear-gradient(top, #ffffff, #f2f2f2); + background-image: -o-linear-gradient(top, #ffffff, #f2f2f2); + background-image: linear-gradient(to bottom, #ffffff, #f2f2f2); + background-repeat: repeat-x; + border: 1px solid #d4d4d4; + -webkit-border-radius: 4px; + -moz-border-radius: 4px; + border-radius: 4px; + filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffffffff', endColorstr='#fff2f2f2', GradientType=0); + *zoom: 1; + -webkit-box-shadow: 0 1px 4px rgba(0, 0, 0, 0.065); + -moz-box-shadow: 0 1px 4px rgba(0, 0, 0, 0.065); + box-shadow: 0 1px 4px rgba(0, 0, 0, 0.065); +} + +.navbar-inner:before, +.navbar-inner:after { + display: table; + line-height: 0; + content: ""; +} + +.navbar-inner:after { + clear: both; +} + +.navbar .container { + width: auto; +} + +.nav-collapse.collapse { + height: auto; + overflow: visible; +} + +.navbar .brand { + display: block; + float: left; + padding: 10px 20px 10px; + margin-left: -20px; + font-size: 20px; + font-weight: 200; + color: #777777; + text-shadow: 0 1px 0 #ffffff; +} + +.navbar .brand:hover, +.navbar .brand:focus { + text-decoration: none; +} + +.navbar-text { + margin-bottom: 0; + line-height: 40px; + color: #777777; +} + +.navbar-link { + color: #777777; +} + +.navbar-link:hover, +.navbar-link:focus { + color: #333333; +} + +.navbar .divider-vertical { + height: 40px; + margin: 0 9px; + border-right: 1px solid #ffffff; + border-left: 1px solid #f2f2f2; +} + +.navbar .btn, +.navbar .btn-group { + margin-top: 5px; +} + +.navbar .btn-group .btn, +.navbar .input-prepend .btn, +.navbar .input-append .btn, +.navbar .input-prepend .btn-group, +.navbar .input-append .btn-group { + margin-top: 0; +} + +.navbar-form { + margin-bottom: 0; + *zoom: 1; +} + +.navbar-form:before, +.navbar-form:after { + display: table; + line-height: 0; + content: ""; +} + +.navbar-form:after { + clear: both; +} + +.navbar-form input, +.navbar-form select, +.navbar-form .radio, +.navbar-form .checkbox { + margin-top: 5px; +} + +.navbar-form input, +.navbar-form select, +.navbar-form .btn { + display: inline-block; + margin-bottom: 0; +} + +.navbar-form input[type="image"], +.navbar-form input[type="checkbox"], +.navbar-form input[type="radio"] { + margin-top: 3px; +} + +.navbar-form .input-append, +.navbar-form .input-prepend { + margin-top: 5px; + white-space: nowrap; +} + +.navbar-form .input-append input, +.navbar-form .input-prepend input { + margin-top: 0; +} + +.navbar-search { + position: relative; + float: left; + margin-top: 5px; + margin-bottom: 0; +} + +.navbar-search .search-query { + padding: 4px 14px; + margin-bottom: 0; + font-family: "Helvetica Neue", Helvetica, Arial, sans-serif; + font-size: 13px; + font-weight: normal; + line-height: 1; + -webkit-border-radius: 15px; + -moz-border-radius: 15px; + border-radius: 15px; +} + +.navbar-static-top { + position: static; + margin-bottom: 0; +} + +.navbar-static-top .navbar-inner { + -webkit-border-radius: 0; + -moz-border-radius: 0; + border-radius: 0; +} + +.navbar-fixed-top, +.navbar-fixed-bottom { + position: fixed; + right: 0; + left: 0; + z-index: 1030; + margin-bottom: 0; +} + +.navbar-fixed-top .navbar-inner, +.navbar-static-top .navbar-inner { + border-width: 0 0 1px; +} + +.navbar-fixed-bottom .navbar-inner { + border-width: 1px 0 0; +} + +.navbar-fixed-top .navbar-inner, +.navbar-fixed-bottom .navbar-inner { + padding-right: 0; + padding-left: 0; + -webkit-border-radius: 0; + -moz-border-radius: 0; + border-radius: 0; +} + +.navbar-static-top .container, +.navbar-fixed-top .container, +.navbar-fixed-bottom .container { + width: 940px; +} + +.navbar-fixed-top { + top: 0; +} + +.navbar-fixed-top .navbar-inner, +.navbar-static-top .navbar-inner { + -webkit-box-shadow: 0 1px 10px rgba(0, 0, 0, 0.1); + -moz-box-shadow: 0 1px 10px rgba(0, 0, 0, 0.1); + box-shadow: 0 1px 10px rgba(0, 0, 0, 0.1); +} + +.navbar-fixed-bottom { + bottom: 0; +} + +.navbar-fixed-bottom .navbar-inner { + -webkit-box-shadow: 0 -1px 10px rgba(0, 0, 0, 0.1); + -moz-box-shadow: 0 -1px 10px rgba(0, 0, 0, 0.1); + box-shadow: 0 -1px 10px rgba(0, 0, 0, 0.1); +} + +.navbar .nav { + position: relative; + left: 0; + display: block; + float: left; + margin: 0 10px 0 0; +} + +.navbar .nav.pull-right { + float: right; + margin-right: 0; +} + +.navbar .nav > li { + float: left; +} + +.navbar .nav > li > a { + float: none; + padding: 10px 15px 10px; + color: #777777; + text-decoration: none; + text-shadow: 0 1px 0 #ffffff; +} + +.navbar .nav .dropdown-toggle .caret { + margin-top: 8px; +} + +.navbar .nav > li > a:focus, +.navbar .nav > li > a:hover { + color: #333333; + text-decoration: none; + background-color: transparent; +} + +.navbar .nav > .active > a, +.navbar .nav > .active > a:hover, +.navbar .nav > .active > a:focus { + color: #555555; + text-decoration: none; + background-color: #e5e5e5; + -webkit-box-shadow: inset 0 3px 8px rgba(0, 0, 0, 0.125); + -moz-box-shadow: inset 0 3px 8px rgba(0, 0, 0, 0.125); + box-shadow: inset 0 3px 8px rgba(0, 0, 0, 0.125); +} + +.navbar .btn-navbar { + display: none; + float: right; + padding: 7px 10px; + margin-right: 5px; + margin-left: 5px; + color: #ffffff; + text-shadow: 0 -1px 0 rgba(0, 0, 0, 0.25); + background-color: #ededed; + *background-color: #e5e5e5; + background-image: -moz-linear-gradient(top, #f2f2f2, #e5e5e5); + background-image: -webkit-gradient(linear, 0 0, 0 100%, from(#f2f2f2), to(#e5e5e5)); + background-image: -webkit-linear-gradient(top, #f2f2f2, #e5e5e5); + background-image: -o-linear-gradient(top, #f2f2f2, #e5e5e5); + background-image: linear-gradient(to bottom, #f2f2f2, #e5e5e5); + background-repeat: repeat-x; + border-color: #e5e5e5 #e5e5e5 #bfbfbf; + border-color: rgba(0, 0, 0, 0.1) rgba(0, 0, 0, 0.1) rgba(0, 0, 0, 0.25); + filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#fff2f2f2', endColorstr='#ffe5e5e5', GradientType=0); + filter: progid:DXImageTransform.Microsoft.gradient(enabled=false); + -webkit-box-shadow: inset 0 1px 0 rgba(255, 255, 255, 0.1), 0 1px 0 rgba(255, 255, 255, 0.075); + -moz-box-shadow: inset 0 1px 0 rgba(255, 255, 255, 0.1), 0 1px 0 rgba(255, 255, 255, 0.075); + box-shadow: inset 0 1px 0 rgba(255, 255, 255, 0.1), 0 1px 0 rgba(255, 255, 255, 0.075); +} + +.navbar .btn-navbar:hover, +.navbar .btn-navbar:focus, +.navbar .btn-navbar:active, +.navbar .btn-navbar.active, +.navbar .btn-navbar.disabled, +.navbar .btn-navbar[disabled] { + color: #ffffff; + background-color: #e5e5e5; + *background-color: #d9d9d9; +} + +.navbar .btn-navbar:active, +.navbar .btn-navbar.active { + background-color: #cccccc \9; +} + +.navbar .btn-navbar .icon-bar { + display: block; + width: 18px; + height: 2px; + background-color: #f5f5f5; + -webkit-border-radius: 1px; + -moz-border-radius: 1px; + border-radius: 1px; + -webkit-box-shadow: 0 1px 0 rgba(0, 0, 0, 0.25); + -moz-box-shadow: 0 1px 0 rgba(0, 0, 0, 0.25); + box-shadow: 0 1px 0 rgba(0, 0, 0, 0.25); +} + +.btn-navbar .icon-bar + .icon-bar { + margin-top: 3px; +} + +.navbar .nav > li > .dropdown-menu:before { + position: absolute; + top: -7px; + left: 9px; + display: inline-block; + border-right: 7px solid transparent; + border-bottom: 7px solid #ccc; + border-left: 7px solid transparent; + border-bottom-color: rgba(0, 0, 0, 0.2); + content: ''; +} + +.navbar .nav > li > .dropdown-menu:after { + position: absolute; + top: -6px; + left: 10px; + display: inline-block; + border-right: 6px solid transparent; + border-bottom: 6px solid #ffffff; + border-left: 6px solid transparent; + content: ''; +} + +.navbar-fixed-bottom .nav > li > .dropdown-menu:before { + top: auto; + bottom: -7px; + border-top: 7px solid #ccc; + border-bottom: 0; + border-top-color: rgba(0, 0, 0, 0.2); +} + +.navbar-fixed-bottom .nav > li > .dropdown-menu:after { + top: auto; + bottom: -6px; + border-top: 6px solid #ffffff; + border-bottom: 0; +} + +.navbar .nav li.dropdown > a:hover .caret, +.navbar .nav li.dropdown > a:focus .caret { + border-top-color: #333333; + border-bottom-color: #333333; +} + +.navbar .nav li.dropdown.open > .dropdown-toggle, +.navbar .nav li.dropdown.active > .dropdown-toggle, +.navbar .nav li.dropdown.open.active > .dropdown-toggle { + color: #555555; + background-color: #e5e5e5; +} + +.navbar .nav li.dropdown > .dropdown-toggle .caret { + border-top-color: #777777; + border-bottom-color: #777777; +} + +.navbar .nav li.dropdown.open > .dropdown-toggle .caret, +.navbar .nav li.dropdown.active > .dropdown-toggle .caret, +.navbar .nav li.dropdown.open.active > .dropdown-toggle .caret { + border-top-color: #555555; + border-bottom-color: #555555; +} + +.navbar .pull-right > li > .dropdown-menu, +.navbar .nav > li > .dropdown-menu.pull-right { + right: 0; + left: auto; +} + +.navbar .pull-right > li > .dropdown-menu:before, +.navbar .nav > li > .dropdown-menu.pull-right:before { + right: 12px; + left: auto; +} + +.navbar .pull-right > li > .dropdown-menu:after, +.navbar .nav > li > .dropdown-menu.pull-right:after { + right: 13px; + left: auto; +} + +.navbar .pull-right > li > .dropdown-menu .dropdown-menu, +.navbar .nav > li > .dropdown-menu.pull-right .dropdown-menu { + right: 100%; + left: auto; + margin-right: -1px; + margin-left: 0; + -webkit-border-radius: 6px 0 6px 6px; + -moz-border-radius: 6px 0 6px 6px; + border-radius: 6px 0 6px 6px; +} + +.navbar-inverse .navbar-inner { + background-color: #1b1b1b; + background-image: -moz-linear-gradient(top, #222222, #111111); + background-image: -webkit-gradient(linear, 0 0, 0 100%, from(#222222), to(#111111)); + background-image: -webkit-linear-gradient(top, #222222, #111111); + background-image: -o-linear-gradient(top, #222222, #111111); + background-image: linear-gradient(to bottom, #222222, #111111); + background-repeat: repeat-x; + border-color: #252525; + filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff222222', endColorstr='#ff111111', GradientType=0); +} + +.navbar-inverse .brand, +.navbar-inverse .nav > li > a { + color: #999999; + text-shadow: 0 -1px 0 rgba(0, 0, 0, 0.25); +} + +.navbar-inverse .brand:hover, +.navbar-inverse .nav > li > a:hover, +.navbar-inverse .brand:focus, +.navbar-inverse .nav > li > a:focus { + color: #ffffff; +} + +.navbar-inverse .brand { + color: #999999; +} + +.navbar-inverse .navbar-text { + color: #999999; +} + +.navbar-inverse .nav > li > a:focus, +.navbar-inverse .nav > li > a:hover { + color: #ffffff; + background-color: transparent; +} + +.navbar-inverse .nav .active > a, +.navbar-inverse .nav .active > a:hover, +.navbar-inverse .nav .active > a:focus { + color: #ffffff; + background-color: #111111; +} + +.navbar-inverse .navbar-link { + color: #999999; +} + +.navbar-inverse .navbar-link:hover, +.navbar-inverse .navbar-link:focus { + color: #ffffff; +} + +.navbar-inverse .divider-vertical { + border-right-color: #222222; + border-left-color: #111111; +} + +.navbar-inverse .nav li.dropdown.open > .dropdown-toggle, +.navbar-inverse .nav li.dropdown.active > .dropdown-toggle, +.navbar-inverse .nav li.dropdown.open.active > .dropdown-toggle { + color: #ffffff; + background-color: #111111; +} + +.navbar-inverse .nav li.dropdown > a:hover .caret, +.navbar-inverse .nav li.dropdown > a:focus .caret { + border-top-color: #ffffff; + border-bottom-color: #ffffff; +} + +.navbar-inverse .nav li.dropdown > .dropdown-toggle .caret { + border-top-color: #999999; + border-bottom-color: #999999; +} + +.navbar-inverse .nav li.dropdown.open > .dropdown-toggle .caret, +.navbar-inverse .nav li.dropdown.active > .dropdown-toggle .caret, +.navbar-inverse .nav li.dropdown.open.active > .dropdown-toggle .caret { + border-top-color: #ffffff; + border-bottom-color: #ffffff; +} + +.navbar-inverse .navbar-search .search-query { + color: #ffffff; + background-color: #515151; + border-color: #111111; + -webkit-box-shadow: inset 0 1px 2px rgba(0, 0, 0, 0.1), 0 1px 0 rgba(255, 255, 255, 0.15); + -moz-box-shadow: inset 0 1px 2px rgba(0, 0, 0, 0.1), 0 1px 0 rgba(255, 255, 255, 0.15); + box-shadow: inset 0 1px 2px rgba(0, 0, 0, 0.1), 0 1px 0 rgba(255, 255, 255, 0.15); + -webkit-transition: none; + -moz-transition: none; + -o-transition: none; + transition: none; +} + +.navbar-inverse .navbar-search .search-query:-moz-placeholder { + color: #cccccc; +} + +.navbar-inverse .navbar-search .search-query:-ms-input-placeholder { + color: #cccccc; +} + +.navbar-inverse .navbar-search .search-query::-webkit-input-placeholder { + color: #cccccc; +} + +.navbar-inverse .navbar-search .search-query:focus, +.navbar-inverse .navbar-search .search-query.focused { + padding: 5px 15px; + color: #333333; + text-shadow: 0 1px 0 #ffffff; + background-color: #ffffff; + border: 0; + outline: 0; + -webkit-box-shadow: 0 0 3px rgba(0, 0, 0, 0.15); + -moz-box-shadow: 0 0 3px rgba(0, 0, 0, 0.15); + box-shadow: 0 0 3px rgba(0, 0, 0, 0.15); +} + +.navbar-inverse .btn-navbar { + color: #ffffff; + text-shadow: 0 -1px 0 rgba(0, 0, 0, 0.25); + background-color: #0e0e0e; + *background-color: #040404; + background-image: -moz-linear-gradient(top, #151515, #040404); + background-image: -webkit-gradient(linear, 0 0, 0 100%, from(#151515), to(#040404)); + background-image: -webkit-linear-gradient(top, #151515, #040404); + background-image: -o-linear-gradient(top, #151515, #040404); + background-image: linear-gradient(to bottom, #151515, #040404); + background-repeat: repeat-x; + border-color: #040404 #040404 #000000; + border-color: rgba(0, 0, 0, 0.1) rgba(0, 0, 0, 0.1) rgba(0, 0, 0, 0.25); + filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff151515', endColorstr='#ff040404', GradientType=0); + filter: progid:DXImageTransform.Microsoft.gradient(enabled=false); +} + +.navbar-inverse .btn-navbar:hover, +.navbar-inverse .btn-navbar:focus, +.navbar-inverse .btn-navbar:active, +.navbar-inverse .btn-navbar.active, +.navbar-inverse .btn-navbar.disabled, +.navbar-inverse .btn-navbar[disabled] { + color: #ffffff; + background-color: #040404; + *background-color: #000000; +} + +.navbar-inverse .btn-navbar:active, +.navbar-inverse .btn-navbar.active { + background-color: #000000 \9; +} + +.breadcrumb { + padding: 8px 15px; + margin: 0 0 20px; + list-style: none; + background-color: #f5f5f5; + -webkit-border-radius: 4px; + -moz-border-radius: 4px; + border-radius: 4px; +} + +.breadcrumb > li { + display: inline-block; + *display: inline; + text-shadow: 0 1px 0 #ffffff; + *zoom: 1; +} + +.breadcrumb > li > .divider { + padding: 0 5px; + color: #ccc; +} + +.breadcrumb > .active { + color: #999999; +} + +.pagination { + margin: 20px 0; +} + +.pagination ul { + display: inline-block; + *display: inline; + margin-bottom: 0; + margin-left: 0; + -webkit-border-radius: 4px; + -moz-border-radius: 4px; + border-radius: 4px; + *zoom: 1; + -webkit-box-shadow: 0 1px 2px rgba(0, 0, 0, 0.05); + -moz-box-shadow: 0 1px 2px rgba(0, 0, 0, 0.05); + box-shadow: 0 1px 2px rgba(0, 0, 0, 0.05); +} + +.pagination ul > li { + display: inline; +} + +.pagination ul > li > a, +.pagination ul > li > span { + float: left; + padding: 4px 12px; + line-height: 20px; + text-decoration: none; + background-color: #ffffff; + border: 1px solid #dddddd; + border-left-width: 0; +} + +.pagination ul > li > a:hover, +.pagination ul > li > a:focus, +.pagination ul > .active > a, +.pagination ul > .active > span { + background-color: #f5f5f5; +} + +.pagination ul > .active > a, +.pagination ul > .active > span { + color: #999999; + cursor: default; +} + +.pagination ul > .disabled > span, +.pagination ul > .disabled > a, +.pagination ul > .disabled > a:hover, +.pagination ul > .disabled > a:focus { + color: #999999; + cursor: default; + background-color: transparent; +} + +.pagination ul > li:first-child > a, +.pagination ul > li:first-child > span { + border-left-width: 1px; + -webkit-border-bottom-left-radius: 4px; + border-bottom-left-radius: 4px; + -webkit-border-top-left-radius: 4px; + border-top-left-radius: 4px; + -moz-border-radius-bottomleft: 4px; + -moz-border-radius-topleft: 4px; +} + +.pagination ul > li:last-child > a, +.pagination ul > li:last-child > span { + -webkit-border-top-right-radius: 4px; + border-top-right-radius: 4px; + -webkit-border-bottom-right-radius: 4px; + border-bottom-right-radius: 4px; + -moz-border-radius-topright: 4px; + -moz-border-radius-bottomright: 4px; +} + +.pagination-centered { + text-align: center; +} + +.pagination-right { + text-align: right; +} + +.pagination-large ul > li > a, +.pagination-large ul > li > span { + padding: 11px 19px; + font-size: 17.5px; +} + +.pagination-large ul > li:first-child > a, +.pagination-large ul > li:first-child > span { + -webkit-border-bottom-left-radius: 6px; + border-bottom-left-radius: 6px; + -webkit-border-top-left-radius: 6px; + border-top-left-radius: 6px; + -moz-border-radius-bottomleft: 6px; + -moz-border-radius-topleft: 6px; +} + +.pagination-large ul > li:last-child > a, +.pagination-large ul > li:last-child > span { + -webkit-border-top-right-radius: 6px; + border-top-right-radius: 6px; + -webkit-border-bottom-right-radius: 6px; + border-bottom-right-radius: 6px; + -moz-border-radius-topright: 6px; + -moz-border-radius-bottomright: 6px; +} + +.pagination-mini ul > li:first-child > a, +.pagination-small ul > li:first-child > a, +.pagination-mini ul > li:first-child > span, +.pagination-small ul > li:first-child > span { + -webkit-border-bottom-left-radius: 3px; + border-bottom-left-radius: 3px; + -webkit-border-top-left-radius: 3px; + border-top-left-radius: 3px; + -moz-border-radius-bottomleft: 3px; + -moz-border-radius-topleft: 3px; +} + +.pagination-mini ul > li:last-child > a, +.pagination-small ul > li:last-child > a, +.pagination-mini ul > li:last-child > span, +.pagination-small ul > li:last-child > span { + -webkit-border-top-right-radius: 3px; + border-top-right-radius: 3px; + -webkit-border-bottom-right-radius: 3px; + border-bottom-right-radius: 3px; + -moz-border-radius-topright: 3px; + -moz-border-radius-bottomright: 3px; +} + +.pagination-small ul > li > a, +.pagination-small ul > li > span { + padding: 2px 10px; + font-size: 11.9px; +} + +.pagination-mini ul > li > a, +.pagination-mini ul > li > span { + padding: 0 6px; + font-size: 10.5px; +} + +.pager { + margin: 20px 0; + text-align: center; + list-style: none; + *zoom: 1; +} + +.pager:before, +.pager:after { + display: table; + line-height: 0; + content: ""; +} + +.pager:after { + clear: both; +} + +.pager li { + display: inline; +} + +.pager li > a, +.pager li > span { + display: inline-block; + padding: 5px 14px; + background-color: #fff; + border: 1px solid #ddd; + -webkit-border-radius: 15px; + -moz-border-radius: 15px; + border-radius: 15px; +} + +.pager li > a:hover, +.pager li > a:focus { + text-decoration: none; + background-color: #f5f5f5; +} + +.pager .next > a, +.pager .next > span { + float: right; +} + +.pager .previous > a, +.pager .previous > span { + float: left; +} + +.pager .disabled > a, +.pager .disabled > a:hover, +.pager .disabled > a:focus, +.pager .disabled > span { + color: #999999; + cursor: default; + background-color: #fff; +} + +.modal-backdrop { + position: fixed; + top: 0; + right: 0; + bottom: 0; + left: 0; + z-index: 1040; + background-color: #000000; +} + +.modal-backdrop.fade { + opacity: 0; +} + +.modal-backdrop, +.modal-backdrop.fade.in { + opacity: 0.8; + filter: alpha(opacity=80); +} + +.modal { + position: fixed; + top: 10%; + left: 50%; + z-index: 1050; + width: 560px; + margin-left: -280px; + background-color: #ffffff; + border: 1px solid #999; + border: 1px solid rgba(0, 0, 0, 0.3); + *border: 1px solid #999; + -webkit-border-radius: 6px; + -moz-border-radius: 6px; + border-radius: 6px; + outline: none; + -webkit-box-shadow: 0 3px 7px rgba(0, 0, 0, 0.3); + -moz-box-shadow: 0 3px 7px rgba(0, 0, 0, 0.3); + box-shadow: 0 3px 7px rgba(0, 0, 0, 0.3); + -webkit-background-clip: padding-box; + -moz-background-clip: padding-box; + background-clip: padding-box; +} + +.modal.fade { + top: -25%; + -webkit-transition: opacity 0.3s linear, top 0.3s ease-out; + -moz-transition: opacity 0.3s linear, top 0.3s ease-out; + -o-transition: opacity 0.3s linear, top 0.3s ease-out; + transition: opacity 0.3s linear, top 0.3s ease-out; +} + +.modal.fade.in { + top: 10%; +} + +.modal-header { + padding: 9px 15px; + border-bottom: 1px solid #eee; +} + +.modal-header .close { + margin-top: 2px; +} + +.modal-header h3 { + margin: 0; + line-height: 30px; +} + +.modal-body { + position: relative; + max-height: 400px; + padding: 15px; + overflow-y: auto; +} + +.modal-form { + margin-bottom: 0; +} + +.modal-footer { + padding: 14px 15px 15px; + margin-bottom: 0; + text-align: right; + background-color: #f5f5f5; + border-top: 1px solid #ddd; + -webkit-border-radius: 0 0 6px 6px; + -moz-border-radius: 0 0 6px 6px; + border-radius: 0 0 6px 6px; + *zoom: 1; + -webkit-box-shadow: inset 0 1px 0 #ffffff; + -moz-box-shadow: inset 0 1px 0 #ffffff; + box-shadow: inset 0 1px 0 #ffffff; +} + +.modal-footer:before, +.modal-footer:after { + display: table; + line-height: 0; + content: ""; +} + +.modal-footer:after { + clear: both; +} + +.modal-footer .btn + .btn { + margin-bottom: 0; + margin-left: 5px; +} + +.modal-footer .btn-group .btn + .btn { + margin-left: -1px; +} + +.modal-footer .btn-block + .btn-block { + margin-left: 0; +} + +.tooltip { + position: absolute; + z-index: 1030; + display: block; + font-size: 11px; + line-height: 1.4; + opacity: 0; + filter: alpha(opacity=0); + visibility: visible; +} + +.tooltip.in { + opacity: 0.8; + filter: alpha(opacity=80); +} + +.tooltip.top { + padding: 5px 0; + margin-top: -3px; +} + +.tooltip.right { + padding: 0 5px; + margin-left: 3px; +} + +.tooltip.bottom { + padding: 5px 0; + margin-top: 3px; +} + +.tooltip.left { + padding: 0 5px; + margin-left: -3px; +} + +.tooltip-inner { + max-width: 200px; + padding: 8px; + color: #ffffff; + text-align: center; + text-decoration: none; + background-color: #000000; + -webkit-border-radius: 4px; + -moz-border-radius: 4px; + border-radius: 4px; +} + +.tooltip-arrow { + position: absolute; + width: 0; + height: 0; + border-color: transparent; + border-style: solid; +} + +.tooltip.top .tooltip-arrow { + bottom: 0; + left: 50%; + margin-left: -5px; + border-top-color: #000000; + border-width: 5px 5px 0; +} + +.tooltip.right .tooltip-arrow { + top: 50%; + left: 0; + margin-top: -5px; + border-right-color: #000000; + border-width: 5px 5px 5px 0; +} + +.tooltip.left .tooltip-arrow { + top: 50%; + right: 0; + margin-top: -5px; + border-left-color: #000000; + border-width: 5px 0 5px 5px; +} + +.tooltip.bottom .tooltip-arrow { + top: 0; + left: 50%; + margin-left: -5px; + border-bottom-color: #000000; + border-width: 0 5px 5px; +} + +.popover { + position: absolute; + top: 0; + left: 0; + z-index: 1010; + display: none; + max-width: 276px; + padding: 1px; + text-align: left; + white-space: normal; + background-color: #ffffff; + border: 1px solid #ccc; + border: 1px solid rgba(0, 0, 0, 0.2); + -webkit-border-radius: 6px; + -moz-border-radius: 6px; + border-radius: 6px; + -webkit-box-shadow: 0 5px 10px rgba(0, 0, 0, 0.2); + -moz-box-shadow: 0 5px 10px rgba(0, 0, 0, 0.2); + box-shadow: 0 5px 10px rgba(0, 0, 0, 0.2); + -webkit-background-clip: padding-box; + -moz-background-clip: padding; + background-clip: padding-box; +} + +.popover.top { + margin-top: -10px; +} + +.popover.right { + margin-left: 10px; +} + +.popover.bottom { + margin-top: 10px; +} + +.popover.left { + margin-left: -10px; +} + +.popover-title { + padding: 8px 14px; + margin: 0; + font-size: 14px; + font-weight: normal; + line-height: 18px; + background-color: #f7f7f7; + border-bottom: 1px solid #ebebeb; + -webkit-border-radius: 5px 5px 0 0; + -moz-border-radius: 5px 5px 0 0; + border-radius: 5px 5px 0 0; +} + +.popover-title:empty { + display: none; +} + +.popover-content { + padding: 9px 14px; +} + +.popover .arrow, +.popover .arrow:after { + position: absolute; + display: block; + width: 0; + height: 0; + border-color: transparent; + border-style: solid; +} + +.popover .arrow { + border-width: 11px; +} + +.popover .arrow:after { + border-width: 10px; + content: ""; +} + +.popover.top .arrow { + bottom: -11px; + left: 50%; + margin-left: -11px; + border-top-color: #999; + border-top-color: rgba(0, 0, 0, 0.25); + border-bottom-width: 0; +} + +.popover.top .arrow:after { + bottom: 1px; + margin-left: -10px; + border-top-color: #ffffff; + border-bottom-width: 0; +} + +.popover.right .arrow { + top: 50%; + left: -11px; + margin-top: -11px; + border-right-color: #999; + border-right-color: rgba(0, 0, 0, 0.25); + border-left-width: 0; +} + +.popover.right .arrow:after { + bottom: -10px; + left: 1px; + border-right-color: #ffffff; + border-left-width: 0; +} + +.popover.bottom .arrow { + top: -11px; + left: 50%; + margin-left: -11px; + border-bottom-color: #999; + border-bottom-color: rgba(0, 0, 0, 0.25); + border-top-width: 0; +} + +.popover.bottom .arrow:after { + top: 1px; + margin-left: -10px; + border-bottom-color: #ffffff; + border-top-width: 0; +} + +.popover.left .arrow { + top: 50%; + right: -11px; + margin-top: -11px; + border-left-color: #999; + border-left-color: rgba(0, 0, 0, 0.25); + border-right-width: 0; +} + +.popover.left .arrow:after { + right: 1px; + bottom: -10px; + border-left-color: #ffffff; + border-right-width: 0; +} + +.thumbnails { + margin-left: -20px; + list-style: none; + *zoom: 1; +} + +.thumbnails:before, +.thumbnails:after { + display: table; + line-height: 0; + content: ""; +} + +.thumbnails:after { + clear: both; +} + +.row-fluid .thumbnails { + margin-left: 0; +} + +.thumbnails > li { + float: left; + margin-bottom: 20px; + margin-left: 20px; +} + +.thumbnail { + display: block; + padding: 4px; + line-height: 20px; + border: 1px solid #ddd; + -webkit-border-radius: 4px; + -moz-border-radius: 4px; + border-radius: 4px; + -webkit-box-shadow: 0 1px 3px rgba(0, 0, 0, 0.055); + -moz-box-shadow: 0 1px 3px rgba(0, 0, 0, 0.055); + box-shadow: 0 1px 3px rgba(0, 0, 0, 0.055); + -webkit-transition: all 0.2s ease-in-out; + -moz-transition: all 0.2s ease-in-out; + -o-transition: all 0.2s ease-in-out; + transition: all 0.2s ease-in-out; +} + +a.thumbnail:hover, +a.thumbnail:focus { + border-color: #0088cc; + -webkit-box-shadow: 0 1px 4px rgba(0, 105, 214, 0.25); + -moz-box-shadow: 0 1px 4px rgba(0, 105, 214, 0.25); + box-shadow: 0 1px 4px rgba(0, 105, 214, 0.25); +} + +.thumbnail > img { + display: block; + max-width: 100%; + margin-right: auto; + margin-left: auto; +} + +.thumbnail .caption { + padding: 9px; + color: #555555; +} + +.media, +.media-body { + overflow: hidden; + *overflow: visible; + zoom: 1; +} + +.media, +.media .media { + margin-top: 15px; +} + +.media:first-child { + margin-top: 0; +} + +.media-object { + display: block; +} + +.media-heading { + margin: 0 0 5px; +} + +.media > .pull-left { + margin-right: 10px; +} + +.media > .pull-right { + margin-left: 10px; +} + +.media-list { + margin-left: 0; + list-style: none; +} + +.label, +.badge { + display: inline-block; + padding: 2px 4px; + font-size: 11.844px; + font-weight: bold; + line-height: 14px; + color: #ffffff; + text-shadow: 0 -1px 0 rgba(0, 0, 0, 0.25); + white-space: nowrap; + vertical-align: baseline; + background-color: #999999; +} + +.label { + -webkit-border-radius: 3px; + -moz-border-radius: 3px; + border-radius: 3px; +} + +.badge { + padding-right: 9px; + padding-left: 9px; + -webkit-border-radius: 9px; + -moz-border-radius: 9px; + border-radius: 9px; +} + +.label:empty, +.badge:empty { + display: none; +} + +a.label:hover, +a.label:focus, +a.badge:hover, +a.badge:focus { + color: #ffffff; + text-decoration: none; + cursor: pointer; +} + +.label-important, +.badge-important { + background-color: #b94a48; +} + +.label-important[href], +.badge-important[href] { + background-color: #953b39; +} + +.label-warning, +.badge-warning { + background-color: #f89406; +} + +.label-warning[href], +.badge-warning[href] { + background-color: #c67605; +} + +.label-success, +.badge-success { + background-color: #468847; +} + +.label-success[href], +.badge-success[href] { + background-color: #356635; +} + +.label-info, +.badge-info { + background-color: #3a87ad; +} + +.label-info[href], +.badge-info[href] { + background-color: #2d6987; +} + +.label-inverse, +.badge-inverse { + background-color: #333333; +} + +.label-inverse[href], +.badge-inverse[href] { + background-color: #1a1a1a; +} + +.btn .label, +.btn .badge { + position: relative; + top: -1px; +} + +.btn-mini .label, +.btn-mini .badge { + top: 0; +} + +@-webkit-keyframes progress-bar-stripes { + from { + background-position: 40px 0; + } + to { + background-position: 0 0; + } +} + +@-moz-keyframes progress-bar-stripes { + from { + background-position: 40px 0; + } + to { + background-position: 0 0; + } +} + +@-ms-keyframes progress-bar-stripes { + from { + background-position: 40px 0; + } + to { + background-position: 0 0; + } +} + +@-o-keyframes progress-bar-stripes { + from { + background-position: 0 0; + } + to { + background-position: 40px 0; + } +} + +@keyframes progress-bar-stripes { + from { + background-position: 40px 0; + } + to { + background-position: 0 0; + } +} + +.progress { + height: 20px; + margin-bottom: 20px; + overflow: hidden; + background-color: #f7f7f7; + background-image: -moz-linear-gradient(top, #f5f5f5, #f9f9f9); + background-image: -webkit-gradient(linear, 0 0, 0 100%, from(#f5f5f5), to(#f9f9f9)); + background-image: -webkit-linear-gradient(top, #f5f5f5, #f9f9f9); + background-image: -o-linear-gradient(top, #f5f5f5, #f9f9f9); + background-image: linear-gradient(to bottom, #f5f5f5, #f9f9f9); + background-repeat: repeat-x; + -webkit-border-radius: 4px; + -moz-border-radius: 4px; + border-radius: 4px; + filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#fff5f5f5', endColorstr='#fff9f9f9', GradientType=0); + -webkit-box-shadow: inset 0 1px 2px rgba(0, 0, 0, 0.1); + -moz-box-shadow: inset 0 1px 2px rgba(0, 0, 0, 0.1); + box-shadow: inset 0 1px 2px rgba(0, 0, 0, 0.1); +} + +.progress .bar { + float: left; + width: 0; + height: 100%; + font-size: 12px; + color: #ffffff; + text-align: center; + text-shadow: 0 -1px 0 rgba(0, 0, 0, 0.25); + background-color: #0e90d2; + background-image: -moz-linear-gradient(top, #149bdf, #0480be); + background-image: -webkit-gradient(linear, 0 0, 0 100%, from(#149bdf), to(#0480be)); + background-image: -webkit-linear-gradient(top, #149bdf, #0480be); + background-image: -o-linear-gradient(top, #149bdf, #0480be); + background-image: linear-gradient(to bottom, #149bdf, #0480be); + background-repeat: repeat-x; + filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff149bdf', endColorstr='#ff0480be', GradientType=0); + -webkit-box-shadow: inset 0 -1px 0 rgba(0, 0, 0, 0.15); + -moz-box-shadow: inset 0 -1px 0 rgba(0, 0, 0, 0.15); + box-shadow: inset 0 -1px 0 rgba(0, 0, 0, 0.15); + -webkit-box-sizing: border-box; + -moz-box-sizing: border-box; + box-sizing: border-box; + -webkit-transition: width 0.6s ease; + -moz-transition: width 0.6s ease; + -o-transition: width 0.6s ease; + transition: width 0.6s ease; +} + +.progress .bar + .bar { + -webkit-box-shadow: inset 1px 0 0 rgba(0, 0, 0, 0.15), inset 0 -1px 0 rgba(0, 0, 0, 0.15); + -moz-box-shadow: inset 1px 0 0 rgba(0, 0, 0, 0.15), inset 0 -1px 0 rgba(0, 0, 0, 0.15); + box-shadow: inset 1px 0 0 rgba(0, 0, 0, 0.15), inset 0 -1px 0 rgba(0, 0, 0, 0.15); +} + +.progress-striped .bar { + background-color: #149bdf; + background-image: -webkit-gradient(linear, 0 100%, 100% 0, color-stop(0.25, rgba(255, 255, 255, 0.15)), color-stop(0.25, transparent), color-stop(0.5, transparent), color-stop(0.5, rgba(255, 255, 255, 0.15)), color-stop(0.75, rgba(255, 255, 255, 0.15)), color-stop(0.75, transparent), to(transparent)); + background-image: -webkit-linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent); + background-image: -moz-linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent); + background-image: -o-linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent); + background-image: linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent); + -webkit-background-size: 40px 40px; + -moz-background-size: 40px 40px; + -o-background-size: 40px 40px; + background-size: 40px 40px; +} + +.progress.active .bar { + -webkit-animation: progress-bar-stripes 2s linear infinite; + -moz-animation: progress-bar-stripes 2s linear infinite; + -ms-animation: progress-bar-stripes 2s linear infinite; + -o-animation: progress-bar-stripes 2s linear infinite; + animation: progress-bar-stripes 2s linear infinite; +} + +.progress-danger .bar, +.progress .bar-danger { + background-color: #dd514c; + background-image: -moz-linear-gradient(top, #ee5f5b, #c43c35); + background-image: -webkit-gradient(linear, 0 0, 0 100%, from(#ee5f5b), to(#c43c35)); + background-image: -webkit-linear-gradient(top, #ee5f5b, #c43c35); + background-image: -o-linear-gradient(top, #ee5f5b, #c43c35); + background-image: linear-gradient(to bottom, #ee5f5b, #c43c35); + background-repeat: repeat-x; + filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffee5f5b', endColorstr='#ffc43c35', GradientType=0); +} + +.progress-danger.progress-striped .bar, +.progress-striped .bar-danger { + background-color: #ee5f5b; + background-image: -webkit-gradient(linear, 0 100%, 100% 0, color-stop(0.25, rgba(255, 255, 255, 0.15)), color-stop(0.25, transparent), color-stop(0.5, transparent), color-stop(0.5, rgba(255, 255, 255, 0.15)), color-stop(0.75, rgba(255, 255, 255, 0.15)), color-stop(0.75, transparent), to(transparent)); + background-image: -webkit-linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent); + background-image: -moz-linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent); + background-image: -o-linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent); + background-image: linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent); +} + +.progress-success .bar, +.progress .bar-success { + background-color: #5eb95e; + background-image: -moz-linear-gradient(top, #62c462, #57a957); + background-image: -webkit-gradient(linear, 0 0, 0 100%, from(#62c462), to(#57a957)); + background-image: -webkit-linear-gradient(top, #62c462, #57a957); + background-image: -o-linear-gradient(top, #62c462, #57a957); + background-image: linear-gradient(to bottom, #62c462, #57a957); + background-repeat: repeat-x; + filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff62c462', endColorstr='#ff57a957', GradientType=0); +} + +.progress-success.progress-striped .bar, +.progress-striped .bar-success { + background-color: #62c462; + background-image: -webkit-gradient(linear, 0 100%, 100% 0, color-stop(0.25, rgba(255, 255, 255, 0.15)), color-stop(0.25, transparent), color-stop(0.5, transparent), color-stop(0.5, rgba(255, 255, 255, 0.15)), color-stop(0.75, rgba(255, 255, 255, 0.15)), color-stop(0.75, transparent), to(transparent)); + background-image: -webkit-linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent); + background-image: -moz-linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent); + background-image: -o-linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent); + background-image: linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent); +} + +.progress-info .bar, +.progress .bar-info { + background-color: #4bb1cf; + background-image: -moz-linear-gradient(top, #5bc0de, #339bb9); + background-image: -webkit-gradient(linear, 0 0, 0 100%, from(#5bc0de), to(#339bb9)); + background-image: -webkit-linear-gradient(top, #5bc0de, #339bb9); + background-image: -o-linear-gradient(top, #5bc0de, #339bb9); + background-image: linear-gradient(to bottom, #5bc0de, #339bb9); + background-repeat: repeat-x; + filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff5bc0de', endColorstr='#ff339bb9', GradientType=0); +} + +.progress-info.progress-striped .bar, +.progress-striped .bar-info { + background-color: #5bc0de; + background-image: -webkit-gradient(linear, 0 100%, 100% 0, color-stop(0.25, rgba(255, 255, 255, 0.15)), color-stop(0.25, transparent), color-stop(0.5, transparent), color-stop(0.5, rgba(255, 255, 255, 0.15)), color-stop(0.75, rgba(255, 255, 255, 0.15)), color-stop(0.75, transparent), to(transparent)); + background-image: -webkit-linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent); + background-image: -moz-linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent); + background-image: -o-linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent); + background-image: linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent); +} + +.progress-warning .bar, +.progress .bar-warning { + background-color: #faa732; + background-image: -moz-linear-gradient(top, #fbb450, #f89406); + background-image: -webkit-gradient(linear, 0 0, 0 100%, from(#fbb450), to(#f89406)); + background-image: -webkit-linear-gradient(top, #fbb450, #f89406); + background-image: -o-linear-gradient(top, #fbb450, #f89406); + background-image: linear-gradient(to bottom, #fbb450, #f89406); + background-repeat: repeat-x; + filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#fffbb450', endColorstr='#fff89406', GradientType=0); +} + +.progress-warning.progress-striped .bar, +.progress-striped .bar-warning { + background-color: #fbb450; + background-image: -webkit-gradient(linear, 0 100%, 100% 0, color-stop(0.25, rgba(255, 255, 255, 0.15)), color-stop(0.25, transparent), color-stop(0.5, transparent), color-stop(0.5, rgba(255, 255, 255, 0.15)), color-stop(0.75, rgba(255, 255, 255, 0.15)), color-stop(0.75, transparent), to(transparent)); + background-image: -webkit-linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent); + background-image: -moz-linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent); + background-image: -o-linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent); + background-image: linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent); +} + +.accordion { + margin-bottom: 20px; +} + +.accordion-group { + margin-bottom: 2px; + border: 1px solid #e5e5e5; + -webkit-border-radius: 4px; + -moz-border-radius: 4px; + border-radius: 4px; +} + +.accordion-heading { + border-bottom: 0; +} + +.accordion-heading .accordion-toggle { + display: block; + padding: 8px 15px; +} + +.accordion-toggle { + cursor: pointer; +} + +.accordion-inner { + padding: 9px 15px; + border-top: 1px solid #e5e5e5; +} + +.carousel { + position: relative; + margin-bottom: 20px; + line-height: 1; +} + +.carousel-inner { + position: relative; + width: 100%; + overflow: hidden; +} + +.carousel-inner > .item { + position: relative; + display: none; + -webkit-transition: 0.6s ease-in-out left; + -moz-transition: 0.6s ease-in-out left; + -o-transition: 0.6s ease-in-out left; + transition: 0.6s ease-in-out left; +} + +.carousel-inner > .item > img, +.carousel-inner > .item > a > img { + display: block; + line-height: 1; +} + +.carousel-inner > .active, +.carousel-inner > .next, +.carousel-inner > .prev { + display: block; +} + +.carousel-inner > .active { + left: 0; +} + +.carousel-inner > .next, +.carousel-inner > .prev { + position: absolute; + top: 0; + width: 100%; +} + +.carousel-inner > .next { + left: 100%; +} + +.carousel-inner > .prev { + left: -100%; +} + +.carousel-inner > .next.left, +.carousel-inner > .prev.right { + left: 0; +} + +.carousel-inner > .active.left { + left: -100%; +} + +.carousel-inner > .active.right { + left: 100%; +} + +.carousel-control { + position: absolute; + top: 40%; + left: 15px; + width: 40px; + height: 40px; + margin-top: -20px; + font-size: 60px; + font-weight: 100; + line-height: 30px; + color: #ffffff; + text-align: center; + background: #222222; + border: 3px solid #ffffff; + -webkit-border-radius: 23px; + -moz-border-radius: 23px; + border-radius: 23px; + opacity: 0.5; + filter: alpha(opacity=50); +} + +.carousel-control.right { + right: 15px; + left: auto; +} + +.carousel-control:hover, +.carousel-control:focus { + color: #ffffff; + text-decoration: none; + opacity: 0.9; + filter: alpha(opacity=90); +} + +.carousel-indicators { + position: absolute; + top: 15px; + right: 15px; + z-index: 5; + margin: 0; + list-style: none; +} + +.carousel-indicators li { + display: block; + float: left; + width: 10px; + height: 10px; + margin-left: 5px; + text-indent: -999px; + background-color: #ccc; + background-color: rgba(255, 255, 255, 0.25); + border-radius: 5px; +} + +.carousel-indicators .active { + background-color: #fff; +} + +.carousel-caption { + position: absolute; + right: 0; + bottom: 0; + left: 0; + padding: 15px; + background: #333333; + background: rgba(0, 0, 0, 0.75); +} + +.carousel-caption h4, +.carousel-caption p { + line-height: 20px; + color: #ffffff; +} + +.carousel-caption h4 { + margin: 0 0 5px; +} + +.carousel-caption p { + margin-bottom: 0; +} + +.hero-unit { + padding: 60px; + margin-bottom: 30px; + font-size: 18px; + font-weight: 200; + line-height: 30px; + color: inherit; + background-color: #eeeeee; + -webkit-border-radius: 6px; + -moz-border-radius: 6px; + border-radius: 6px; +} + +.hero-unit h1 { + margin-bottom: 0; + font-size: 60px; + line-height: 1; + letter-spacing: -1px; + color: inherit; +} + +.hero-unit li { + line-height: 30px; +} + +.pull-right { + float: right; +} + +.pull-left { + float: left; +} + +.hide { + display: none; +} + +.show { + display: block; +} + +.invisible { + visibility: hidden; +} + +.affix { + position: fixed; +} diff --git a/float-no-zero/resources/bootstrap/css/bootstrap.min.css b/float-no-zero/resources/bootstrap/css/bootstrap.min.css new file mode 100644 index 0000000000..c10c7f417f --- /dev/null +++ b/float-no-zero/resources/bootstrap/css/bootstrap.min.css @@ -0,0 +1,9 @@ +/*! + * Bootstrap v2.3.1 + * + * Copyright 2012 Twitter, Inc + * Licensed under the Apache License v2.0 + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Designed and built with all the love in the world @twitter by @mdo and @fat. + */.clearfix{*zoom:1}.clearfix:before,.clearfix:after{display:table;line-height:0;content:""}.clearfix:after{clear:both}.hide-text{font:0/0 a;color:transparent;text-shadow:none;background-color:transparent;border:0}.input-block-level{display:block;width:100%;min-height:30px;-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box}article,aside,details,figcaption,figure,footer,header,hgroup,nav,section{display:block}audio,canvas,video{display:inline-block;*display:inline;*zoom:1}audio:not([controls]){display:none}html{font-size:100%;-webkit-text-size-adjust:100%;-ms-text-size-adjust:100%}a:focus{outline:thin dotted #333;outline:5px auto -webkit-focus-ring-color;outline-offset:-2px}a:hover,a:active{outline:0}sub,sup{position:relative;font-size:75%;line-height:0;vertical-align:baseline}sup{top:-0.5em}sub{bottom:-0.25em}img{width:auto\9;height:auto;max-width:100%;vertical-align:middle;border:0;-ms-interpolation-mode:bicubic}#map_canvas img,.google-maps img{max-width:none}button,input,select,textarea{margin:0;font-size:100%;vertical-align:middle}button,input{*overflow:visible;line-height:normal}button::-moz-focus-inner,input::-moz-focus-inner{padding:0;border:0}button,html input[type="button"],input[type="reset"],input[type="submit"]{cursor:pointer;-webkit-appearance:button}label,select,button,input[type="button"],input[type="reset"],input[type="submit"],input[type="radio"],input[type="checkbox"]{cursor:pointer}input[type="search"]{-webkit-box-sizing:content-box;-moz-box-sizing:content-box;box-sizing:content-box;-webkit-appearance:textfield}input[type="search"]::-webkit-search-decoration,input[type="search"]::-webkit-search-cancel-button{-webkit-appearance:none}textarea{overflow:auto;vertical-align:top}@media print{*{color:#000!important;text-shadow:none!important;background:transparent!important;box-shadow:none!important}a,a:visited{text-decoration:underline}a[href]:after{content:" (" attr(href) ")"}abbr[title]:after{content:" (" attr(title) ")"}.ir a:after,a[href^="javascript:"]:after,a[href^="#"]:after{content:""}pre,blockquote{border:1px solid #999;page-break-inside:avoid}thead{display:table-header-group}tr,img{page-break-inside:avoid}img{max-width:100%!important}@page{margin:.5cm}p,h2,h3{orphans:3;widows:3}h2,h3{page-break-after:avoid}}body{margin:0;font-family:"Helvetica Neue",Helvetica,Arial,sans-serif;font-size:14px;line-height:20px;color:#333;background-color:#fff}a{color:#08c;text-decoration:none}a:hover,a:focus{color:#005580;text-decoration:underline}.img-rounded{-webkit-border-radius:6px;-moz-border-radius:6px;border-radius:6px}.img-polaroid{padding:4px;background-color:#fff;border:1px solid #ccc;border:1px solid rgba(0,0,0,0.2);-webkit-box-shadow:0 1px 3px rgba(0,0,0,0.1);-moz-box-shadow:0 1px 3px rgba(0,0,0,0.1);box-shadow:0 1px 3px rgba(0,0,0,0.1)}.img-circle{-webkit-border-radius:500px;-moz-border-radius:500px;border-radius:500px}.row{margin-left:-20px;*zoom:1}.row:before,.row:after{display:table;line-height:0;content:""}.row:after{clear:both}[class*="span"]{float:left;min-height:1px;margin-left:20px}.container,.navbar-static-top .container,.navbar-fixed-top .container,.navbar-fixed-bottom .container{width:940px}.span12{width:940px}.span11{width:860px}.span10{width:780px}.span9{width:700px}.span8{width:620px}.span7{width:540px}.span6{width:460px}.span5{width:380px}.span4{width:300px}.span3{width:220px}.span2{width:140px}.span1{width:60px}.offset12{margin-left:980px}.offset11{margin-left:900px}.offset10{margin-left:820px}.offset9{margin-left:740px}.offset8{margin-left:660px}.offset7{margin-left:580px}.offset6{margin-left:500px}.offset5{margin-left:420px}.offset4{margin-left:340px}.offset3{margin-left:260px}.offset2{margin-left:180px}.offset1{margin-left:100px}.row-fluid{width:100%;*zoom:1}.row-fluid:before,.row-fluid:after{display:table;line-height:0;content:""}.row-fluid:after{clear:both}.row-fluid [class*="span"]{display:block;float:left;width:100%;min-height:30px;margin-left:2.127659574468085%;*margin-left:2.074468085106383%;-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box}.row-fluid [class*="span"]:first-child{margin-left:0}.row-fluid .controls-row [class*="span"]+[class*="span"]{margin-left:2.127659574468085%}.row-fluid .span12{width:100%;*width:99.94680851063829%}.row-fluid .span11{width:91.48936170212765%;*width:91.43617021276594%}.row-fluid .span10{width:82.97872340425532%;*width:82.92553191489361%}.row-fluid .span9{width:74.46808510638297%;*width:74.41489361702126%}.row-fluid .span8{width:65.95744680851064%;*width:65.90425531914893%}.row-fluid .span7{width:57.44680851063829%;*width:57.39361702127659%}.row-fluid .span6{width:48.93617021276595%;*width:48.88297872340425%}.row-fluid .span5{width:40.42553191489362%;*width:40.37234042553192%}.row-fluid .span4{width:31.914893617021278%;*width:31.861702127659576%}.row-fluid .span3{width:23.404255319148934%;*width:23.351063829787233%}.row-fluid .span2{width:14.893617021276595%;*width:14.840425531914894%}.row-fluid .span1{width:6.382978723404255%;*width:6.329787234042553%}.row-fluid .offset12{margin-left:104.25531914893617%;*margin-left:104.14893617021275%}.row-fluid .offset12:first-child{margin-left:102.12765957446808%;*margin-left:102.02127659574467%}.row-fluid .offset11{margin-left:95.74468085106382%;*margin-left:95.6382978723404%}.row-fluid .offset11:first-child{margin-left:93.61702127659574%;*margin-left:93.51063829787232%}.row-fluid .offset10{margin-left:87.23404255319149%;*margin-left:87.12765957446807%}.row-fluid .offset10:first-child{margin-left:85.1063829787234%;*margin-left:84.99999999999999%}.row-fluid .offset9{margin-left:78.72340425531914%;*margin-left:78.61702127659572%}.row-fluid .offset9:first-child{margin-left:76.59574468085106%;*margin-left:76.48936170212764%}.row-fluid .offset8{margin-left:70.2127659574468%;*margin-left:70.10638297872339%}.row-fluid .offset8:first-child{margin-left:68.08510638297872%;*margin-left:67.9787234042553%}.row-fluid .offset7{margin-left:61.70212765957446%;*margin-left:61.59574468085106%}.row-fluid .offset7:first-child{margin-left:59.574468085106375%;*margin-left:59.46808510638297%}.row-fluid .offset6{margin-left:53.191489361702125%;*margin-left:53.085106382978715%}.row-fluid .offset6:first-child{margin-left:51.063829787234035%;*margin-left:50.95744680851063%}.row-fluid .offset5{margin-left:44.68085106382979%;*margin-left:44.57446808510638%}.row-fluid .offset5:first-child{margin-left:42.5531914893617%;*margin-left:42.4468085106383%}.row-fluid .offset4{margin-left:36.170212765957444%;*margin-left:36.06382978723405%}.row-fluid .offset4:first-child{margin-left:34.04255319148936%;*margin-left:33.93617021276596%}.row-fluid .offset3{margin-left:27.659574468085104%;*margin-left:27.5531914893617%}.row-fluid .offset3:first-child{margin-left:25.53191489361702%;*margin-left:25.425531914893618%}.row-fluid .offset2{margin-left:19.148936170212764%;*margin-left:19.04255319148936%}.row-fluid .offset2:first-child{margin-left:17.02127659574468%;*margin-left:16.914893617021278%}.row-fluid .offset1{margin-left:10.638297872340425%;*margin-left:10.53191489361702%}.row-fluid .offset1:first-child{margin-left:8.51063829787234%;*margin-left:8.404255319148938%}[class*="span"].hide,.row-fluid [class*="span"].hide{display:none}[class*="span"].pull-right,.row-fluid [class*="span"].pull-right{float:right}.container{margin-right:auto;margin-left:auto;*zoom:1}.container:before,.container:after{display:table;line-height:0;content:""}.container:after{clear:both}.container-fluid{padding-right:20px;padding-left:20px;*zoom:1}.container-fluid:before,.container-fluid:after{display:table;line-height:0;content:""}.container-fluid:after{clear:both}p{margin:0 0 10px}.lead{margin-bottom:20px;font-size:21px;font-weight:200;line-height:30px}small{font-size:85%}strong{font-weight:bold}em{font-style:italic}cite{font-style:normal}.muted{color:#999}a.muted:hover,a.muted:focus{color:#808080}.text-warning{color:#c09853}a.text-warning:hover,a.text-warning:focus{color:#a47e3c}.text-error{color:#b94a48}a.text-error:hover,a.text-error:focus{color:#953b39}.text-info{color:#3a87ad}a.text-info:hover,a.text-info:focus{color:#2d6987}.text-success{color:#468847}a.text-success:hover,a.text-success:focus{color:#356635}.text-left{text-align:left}.text-right{text-align:right}.text-center{text-align:center}h1,h2,h3,h4,h5,h6{margin:10px 0;font-family:inherit;font-weight:bold;line-height:20px;color:inherit;text-rendering:optimizelegibility}h1 small,h2 small,h3 small,h4 small,h5 small,h6 small{font-weight:normal;line-height:1;color:#999}h1,h2,h3{line-height:40px}h1{font-size:38.5px}h2{font-size:31.5px}h3{font-size:24.5px}h4{font-size:17.5px}h5{font-size:14px}h6{font-size:11.9px}h1 small{font-size:24.5px}h2 small{font-size:17.5px}h3 small{font-size:14px}h4 small{font-size:14px}.page-header{padding-bottom:9px;margin:20px 0 30px;border-bottom:1px solid #eee}ul,ol{padding:0;margin:0 0 10px 25px}ul ul,ul ol,ol ol,ol ul{margin-bottom:0}li{line-height:20px}ul.unstyled,ol.unstyled{margin-left:0;list-style:none}ul.inline,ol.inline{margin-left:0;list-style:none}ul.inline>li,ol.inline>li{display:inline-block;*display:inline;padding-right:5px;padding-left:5px;*zoom:1}dl{margin-bottom:20px}dt,dd{line-height:20px}dt{font-weight:bold}dd{margin-left:10px}.dl-horizontal{*zoom:1}.dl-horizontal:before,.dl-horizontal:after{display:table;line-height:0;content:""}.dl-horizontal:after{clear:both}.dl-horizontal dt{float:left;width:160px;overflow:hidden;clear:left;text-align:right;text-overflow:ellipsis;white-space:nowrap}.dl-horizontal dd{margin-left:180px}hr{margin:20px 0;border:0;border-top:1px solid #eee;border-bottom:1px solid #fff}abbr[title],abbr[data-original-title]{cursor:help;border-bottom:1px dotted #999}abbr.initialism{font-size:90%;text-transform:uppercase}blockquote{padding:0 0 0 15px;margin:0 0 20px;border-left:5px solid #eee}blockquote p{margin-bottom:0;font-size:17.5px;font-weight:300;line-height:1.25}blockquote small{display:block;line-height:20px;color:#999}blockquote small:before{content:'\2014 \00A0'}blockquote.pull-right{float:right;padding-right:15px;padding-left:0;border-right:5px solid #eee;border-left:0}blockquote.pull-right p,blockquote.pull-right small{text-align:right}blockquote.pull-right small:before{content:''}blockquote.pull-right small:after{content:'\00A0 \2014'}q:before,q:after,blockquote:before,blockquote:after{content:""}address{display:block;margin-bottom:20px;font-style:normal;line-height:20px}code,pre{padding:0 3px 2px;font-family:Monaco,Menlo,Consolas,"Courier New",monospace;font-size:12px;color:#333;-webkit-border-radius:3px;-moz-border-radius:3px;border-radius:3px}code{padding:2px 4px;color:#d14;white-space:nowrap;background-color:#f7f7f9;border:1px solid #e1e1e8}pre{display:block;padding:9.5px;margin:0 0 10px;font-size:13px;line-height:20px;word-break:break-all;word-wrap:break-word;white-space:pre;white-space:pre-wrap;background-color:#f5f5f5;border:1px solid #ccc;border:1px solid rgba(0,0,0,0.15);-webkit-border-radius:4px;-moz-border-radius:4px;border-radius:4px}pre.prettyprint{margin-bottom:20px}pre code{padding:0;color:inherit;white-space:pre;white-space:pre-wrap;background-color:transparent;border:0}.pre-scrollable{max-height:340px;overflow-y:scroll}form{margin:0 0 20px}fieldset{padding:0;margin:0;border:0}legend{display:block;width:100%;padding:0;margin-bottom:20px;font-size:21px;line-height:40px;color:#333;border:0;border-bottom:1px solid #e5e5e5}legend small{font-size:15px;color:#999}label,input,button,select,textarea{font-size:14px;font-weight:normal;line-height:20px}input,button,select,textarea{font-family:"Helvetica Neue",Helvetica,Arial,sans-serif}label{display:block;margin-bottom:5px}select,textarea,input[type="text"],input[type="password"],input[type="datetime"],input[type="datetime-local"],input[type="date"],input[type="month"],input[type="time"],input[type="week"],input[type="number"],input[type="email"],input[type="url"],input[type="search"],input[type="tel"],input[type="color"],.uneditable-input{display:inline-block;height:20px;padding:4px 6px;margin-bottom:10px;font-size:14px;line-height:20px;color:#555;vertical-align:middle;-webkit-border-radius:4px;-moz-border-radius:4px;border-radius:4px}input,textarea,.uneditable-input{width:206px}textarea{height:auto}textarea,input[type="text"],input[type="password"],input[type="datetime"],input[type="datetime-local"],input[type="date"],input[type="month"],input[type="time"],input[type="week"],input[type="number"],input[type="email"],input[type="url"],input[type="search"],input[type="tel"],input[type="color"],.uneditable-input{background-color:#fff;border:1px solid #ccc;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,0.075);-moz-box-shadow:inset 0 1px 1px rgba(0,0,0,0.075);box-shadow:inset 0 1px 1px rgba(0,0,0,0.075);-webkit-transition:border linear .2s,box-shadow linear .2s;-moz-transition:border linear .2s,box-shadow linear .2s;-o-transition:border linear .2s,box-shadow linear .2s;transition:border linear .2s,box-shadow linear .2s}textarea:focus,input[type="text"]:focus,input[type="password"]:focus,input[type="datetime"]:focus,input[type="datetime-local"]:focus,input[type="date"]:focus,input[type="month"]:focus,input[type="time"]:focus,input[type="week"]:focus,input[type="number"]:focus,input[type="email"]:focus,input[type="url"]:focus,input[type="search"]:focus,input[type="tel"]:focus,input[type="color"]:focus,.uneditable-input:focus{border-color:rgba(82,168,236,0.8);outline:0;outline:thin dotted \9;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,0.075),0 0 8px rgba(82,168,236,0.6);-moz-box-shadow:inset 0 1px 1px rgba(0,0,0,0.075),0 0 8px rgba(82,168,236,0.6);box-shadow:inset 0 1px 1px rgba(0,0,0,0.075),0 0 8px rgba(82,168,236,0.6)}input[type="radio"],input[type="checkbox"]{margin:4px 0 0;margin-top:1px \9;*margin-top:0;line-height:normal}input[type="file"],input[type="image"],input[type="submit"],input[type="reset"],input[type="button"],input[type="radio"],input[type="checkbox"]{width:auto}select,input[type="file"]{height:30px;*margin-top:4px;line-height:30px}select{width:220px;background-color:#fff;border:1px solid #ccc}select[multiple],select[size]{height:auto}select:focus,input[type="file"]:focus,input[type="radio"]:focus,input[type="checkbox"]:focus{outline:thin dotted #333;outline:5px auto -webkit-focus-ring-color;outline-offset:-2px}.uneditable-input,.uneditable-textarea{color:#999;cursor:not-allowed;background-color:#fcfcfc;border-color:#ccc;-webkit-box-shadow:inset 0 1px 2px rgba(0,0,0,0.025);-moz-box-shadow:inset 0 1px 2px rgba(0,0,0,0.025);box-shadow:inset 0 1px 2px rgba(0,0,0,0.025)}.uneditable-input{overflow:hidden;white-space:nowrap}.uneditable-textarea{width:auto;height:auto}input:-moz-placeholder,textarea:-moz-placeholder{color:#999}input:-ms-input-placeholder,textarea:-ms-input-placeholder{color:#999}input::-webkit-input-placeholder,textarea::-webkit-input-placeholder{color:#999}.radio,.checkbox{min-height:20px;padding-left:20px}.radio input[type="radio"],.checkbox input[type="checkbox"]{float:left;margin-left:-20px}.controls>.radio:first-child,.controls>.checkbox:first-child{padding-top:5px}.radio.inline,.checkbox.inline{display:inline-block;padding-top:5px;margin-bottom:0;vertical-align:middle}.radio.inline+.radio.inline,.checkbox.inline+.checkbox.inline{margin-left:10px}.input-mini{width:60px}.input-small{width:90px}.input-medium{width:150px}.input-large{width:210px}.input-xlarge{width:270px}.input-xxlarge{width:530px}input[class*="span"],select[class*="span"],textarea[class*="span"],.uneditable-input[class*="span"],.row-fluid input[class*="span"],.row-fluid select[class*="span"],.row-fluid textarea[class*="span"],.row-fluid .uneditable-input[class*="span"]{float:none;margin-left:0}.input-append input[class*="span"],.input-append .uneditable-input[class*="span"],.input-prepend input[class*="span"],.input-prepend .uneditable-input[class*="span"],.row-fluid input[class*="span"],.row-fluid select[class*="span"],.row-fluid textarea[class*="span"],.row-fluid .uneditable-input[class*="span"],.row-fluid .input-prepend [class*="span"],.row-fluid .input-append [class*="span"]{display:inline-block}input,textarea,.uneditable-input{margin-left:0}.controls-row [class*="span"]+[class*="span"]{margin-left:20px}input.span12,textarea.span12,.uneditable-input.span12{width:926px}input.span11,textarea.span11,.uneditable-input.span11{width:846px}input.span10,textarea.span10,.uneditable-input.span10{width:766px}input.span9,textarea.span9,.uneditable-input.span9{width:686px}input.span8,textarea.span8,.uneditable-input.span8{width:606px}input.span7,textarea.span7,.uneditable-input.span7{width:526px}input.span6,textarea.span6,.uneditable-input.span6{width:446px}input.span5,textarea.span5,.uneditable-input.span5{width:366px}input.span4,textarea.span4,.uneditable-input.span4{width:286px}input.span3,textarea.span3,.uneditable-input.span3{width:206px}input.span2,textarea.span2,.uneditable-input.span2{width:126px}input.span1,textarea.span1,.uneditable-input.span1{width:46px}.controls-row{*zoom:1}.controls-row:before,.controls-row:after{display:table;line-height:0;content:""}.controls-row:after{clear:both}.controls-row [class*="span"],.row-fluid .controls-row [class*="span"]{float:left}.controls-row .checkbox[class*="span"],.controls-row .radio[class*="span"]{padding-top:5px}input[disabled],select[disabled],textarea[disabled],input[readonly],select[readonly],textarea[readonly]{cursor:not-allowed;background-color:#eee}input[type="radio"][disabled],input[type="checkbox"][disabled],input[type="radio"][readonly],input[type="checkbox"][readonly]{background-color:transparent}.control-group.warning .control-label,.control-group.warning .help-block,.control-group.warning .help-inline{color:#c09853}.control-group.warning .checkbox,.control-group.warning .radio,.control-group.warning input,.control-group.warning select,.control-group.warning textarea{color:#c09853}.control-group.warning input,.control-group.warning select,.control-group.warning textarea{border-color:#c09853;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,0.075);-moz-box-shadow:inset 0 1px 1px rgba(0,0,0,0.075);box-shadow:inset 0 1px 1px rgba(0,0,0,0.075)}.control-group.warning input:focus,.control-group.warning select:focus,.control-group.warning textarea:focus{border-color:#a47e3c;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,0.075),0 0 6px #dbc59e;-moz-box-shadow:inset 0 1px 1px rgba(0,0,0,0.075),0 0 6px #dbc59e;box-shadow:inset 0 1px 1px rgba(0,0,0,0.075),0 0 6px #dbc59e}.control-group.warning .input-prepend .add-on,.control-group.warning .input-append .add-on{color:#c09853;background-color:#fcf8e3;border-color:#c09853}.control-group.error .control-label,.control-group.error .help-block,.control-group.error .help-inline{color:#b94a48}.control-group.error .checkbox,.control-group.error .radio,.control-group.error input,.control-group.error select,.control-group.error textarea{color:#b94a48}.control-group.error input,.control-group.error select,.control-group.error textarea{border-color:#b94a48;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,0.075);-moz-box-shadow:inset 0 1px 1px rgba(0,0,0,0.075);box-shadow:inset 0 1px 1px rgba(0,0,0,0.075)}.control-group.error input:focus,.control-group.error select:focus,.control-group.error textarea:focus{border-color:#953b39;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,0.075),0 0 6px #d59392;-moz-box-shadow:inset 0 1px 1px rgba(0,0,0,0.075),0 0 6px #d59392;box-shadow:inset 0 1px 1px rgba(0,0,0,0.075),0 0 6px #d59392}.control-group.error .input-prepend .add-on,.control-group.error .input-append .add-on{color:#b94a48;background-color:#f2dede;border-color:#b94a48}.control-group.success .control-label,.control-group.success .help-block,.control-group.success .help-inline{color:#468847}.control-group.success .checkbox,.control-group.success .radio,.control-group.success input,.control-group.success select,.control-group.success textarea{color:#468847}.control-group.success input,.control-group.success select,.control-group.success textarea{border-color:#468847;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,0.075);-moz-box-shadow:inset 0 1px 1px rgba(0,0,0,0.075);box-shadow:inset 0 1px 1px rgba(0,0,0,0.075)}.control-group.success input:focus,.control-group.success select:focus,.control-group.success textarea:focus{border-color:#356635;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,0.075),0 0 6px #7aba7b;-moz-box-shadow:inset 0 1px 1px rgba(0,0,0,0.075),0 0 6px #7aba7b;box-shadow:inset 0 1px 1px rgba(0,0,0,0.075),0 0 6px #7aba7b}.control-group.success .input-prepend .add-on,.control-group.success .input-append .add-on{color:#468847;background-color:#dff0d8;border-color:#468847}.control-group.info .control-label,.control-group.info .help-block,.control-group.info .help-inline{color:#3a87ad}.control-group.info .checkbox,.control-group.info .radio,.control-group.info input,.control-group.info select,.control-group.info textarea{color:#3a87ad}.control-group.info input,.control-group.info select,.control-group.info textarea{border-color:#3a87ad;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,0.075);-moz-box-shadow:inset 0 1px 1px rgba(0,0,0,0.075);box-shadow:inset 0 1px 1px rgba(0,0,0,0.075)}.control-group.info input:focus,.control-group.info select:focus,.control-group.info textarea:focus{border-color:#2d6987;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,0.075),0 0 6px #7ab5d3;-moz-box-shadow:inset 0 1px 1px rgba(0,0,0,0.075),0 0 6px #7ab5d3;box-shadow:inset 0 1px 1px rgba(0,0,0,0.075),0 0 6px #7ab5d3}.control-group.info .input-prepend .add-on,.control-group.info .input-append .add-on{color:#3a87ad;background-color:#d9edf7;border-color:#3a87ad}input:focus:invalid,textarea:focus:invalid,select:focus:invalid{color:#b94a48;border-color:#ee5f5b}input:focus:invalid:focus,textarea:focus:invalid:focus,select:focus:invalid:focus{border-color:#e9322d;-webkit-box-shadow:0 0 6px #f8b9b7;-moz-box-shadow:0 0 6px #f8b9b7;box-shadow:0 0 6px #f8b9b7}.form-actions{padding:19px 20px 20px;margin-top:20px;margin-bottom:20px;background-color:#f5f5f5;border-top:1px solid #e5e5e5;*zoom:1}.form-actions:before,.form-actions:after{display:table;line-height:0;content:""}.form-actions:after{clear:both}.help-block,.help-inline{color:#595959}.help-block{display:block;margin-bottom:10px}.help-inline{display:inline-block;*display:inline;padding-left:5px;vertical-align:middle;*zoom:1}.input-append,.input-prepend{display:inline-block;margin-bottom:10px;font-size:0;white-space:nowrap;vertical-align:middle}.input-append input,.input-prepend input,.input-append select,.input-prepend select,.input-append .uneditable-input,.input-prepend .uneditable-input,.input-append .dropdown-menu,.input-prepend .dropdown-menu,.input-append .popover,.input-prepend .popover{font-size:14px}.input-append input,.input-prepend input,.input-append select,.input-prepend select,.input-append .uneditable-input,.input-prepend .uneditable-input{position:relative;margin-bottom:0;*margin-left:0;vertical-align:top;-webkit-border-radius:0 4px 4px 0;-moz-border-radius:0 4px 4px 0;border-radius:0 4px 4px 0}.input-append input:focus,.input-prepend input:focus,.input-append select:focus,.input-prepend select:focus,.input-append .uneditable-input:focus,.input-prepend .uneditable-input:focus{z-index:2}.input-append .add-on,.input-prepend .add-on{display:inline-block;width:auto;height:20px;min-width:16px;padding:4px 5px;font-size:14px;font-weight:normal;line-height:20px;text-align:center;text-shadow:0 1px 0 #fff;background-color:#eee;border:1px solid #ccc}.input-append .add-on,.input-prepend .add-on,.input-append .btn,.input-prepend .btn,.input-append .btn-group>.dropdown-toggle,.input-prepend .btn-group>.dropdown-toggle{vertical-align:top;-webkit-border-radius:0;-moz-border-radius:0;border-radius:0}.input-append .active,.input-prepend .active{background-color:#a9dba9;border-color:#46a546}.input-prepend .add-on,.input-prepend .btn{margin-right:-1px}.input-prepend .add-on:first-child,.input-prepend .btn:first-child{-webkit-border-radius:4px 0 0 4px;-moz-border-radius:4px 0 0 4px;border-radius:4px 0 0 4px}.input-append input,.input-append select,.input-append .uneditable-input{-webkit-border-radius:4px 0 0 4px;-moz-border-radius:4px 0 0 4px;border-radius:4px 0 0 4px}.input-append input+.btn-group .btn:last-child,.input-append select+.btn-group .btn:last-child,.input-append .uneditable-input+.btn-group .btn:last-child{-webkit-border-radius:0 4px 4px 0;-moz-border-radius:0 4px 4px 0;border-radius:0 4px 4px 0}.input-append .add-on,.input-append .btn,.input-append .btn-group{margin-left:-1px}.input-append .add-on:last-child,.input-append .btn:last-child,.input-append .btn-group:last-child>.dropdown-toggle{-webkit-border-radius:0 4px 4px 0;-moz-border-radius:0 4px 4px 0;border-radius:0 4px 4px 0}.input-prepend.input-append input,.input-prepend.input-append select,.input-prepend.input-append .uneditable-input{-webkit-border-radius:0;-moz-border-radius:0;border-radius:0}.input-prepend.input-append input+.btn-group .btn,.input-prepend.input-append select+.btn-group .btn,.input-prepend.input-append .uneditable-input+.btn-group .btn{-webkit-border-radius:0 4px 4px 0;-moz-border-radius:0 4px 4px 0;border-radius:0 4px 4px 0}.input-prepend.input-append .add-on:first-child,.input-prepend.input-append .btn:first-child{margin-right:-1px;-webkit-border-radius:4px 0 0 4px;-moz-border-radius:4px 0 0 4px;border-radius:4px 0 0 4px}.input-prepend.input-append .add-on:last-child,.input-prepend.input-append .btn:last-child{margin-left:-1px;-webkit-border-radius:0 4px 4px 0;-moz-border-radius:0 4px 4px 0;border-radius:0 4px 4px 0}.input-prepend.input-append .btn-group:first-child{margin-left:0}input.search-query{padding-right:14px;padding-right:4px \9;padding-left:14px;padding-left:4px \9;margin-bottom:0;-webkit-border-radius:15px;-moz-border-radius:15px;border-radius:15px}.form-search .input-append .search-query,.form-search .input-prepend .search-query{-webkit-border-radius:0;-moz-border-radius:0;border-radius:0}.form-search .input-append .search-query{-webkit-border-radius:14px 0 0 14px;-moz-border-radius:14px 0 0 14px;border-radius:14px 0 0 14px}.form-search .input-append .btn{-webkit-border-radius:0 14px 14px 0;-moz-border-radius:0 14px 14px 0;border-radius:0 14px 14px 0}.form-search .input-prepend .search-query{-webkit-border-radius:0 14px 14px 0;-moz-border-radius:0 14px 14px 0;border-radius:0 14px 14px 0}.form-search .input-prepend .btn{-webkit-border-radius:14px 0 0 14px;-moz-border-radius:14px 0 0 14px;border-radius:14px 0 0 14px}.form-search input,.form-inline input,.form-horizontal input,.form-search textarea,.form-inline textarea,.form-horizontal textarea,.form-search select,.form-inline select,.form-horizontal select,.form-search .help-inline,.form-inline .help-inline,.form-horizontal .help-inline,.form-search .uneditable-input,.form-inline .uneditable-input,.form-horizontal .uneditable-input,.form-search .input-prepend,.form-inline .input-prepend,.form-horizontal .input-prepend,.form-search .input-append,.form-inline .input-append,.form-horizontal .input-append{display:inline-block;*display:inline;margin-bottom:0;vertical-align:middle;*zoom:1}.form-search .hide,.form-inline .hide,.form-horizontal .hide{display:none}.form-search label,.form-inline label,.form-search .btn-group,.form-inline .btn-group{display:inline-block}.form-search .input-append,.form-inline .input-append,.form-search .input-prepend,.form-inline .input-prepend{margin-bottom:0}.form-search .radio,.form-search .checkbox,.form-inline .radio,.form-inline .checkbox{padding-left:0;margin-bottom:0;vertical-align:middle}.form-search .radio input[type="radio"],.form-search .checkbox input[type="checkbox"],.form-inline .radio input[type="radio"],.form-inline .checkbox input[type="checkbox"]{float:left;margin-right:3px;margin-left:0}.control-group{margin-bottom:10px}legend+.control-group{margin-top:20px;-webkit-margin-top-collapse:separate}.form-horizontal .control-group{margin-bottom:20px;*zoom:1}.form-horizontal .control-group:before,.form-horizontal .control-group:after{display:table;line-height:0;content:""}.form-horizontal .control-group:after{clear:both}.form-horizontal .control-label{float:left;width:160px;padding-top:5px;text-align:right}.form-horizontal .controls{*display:inline-block;*padding-left:20px;margin-left:180px;*margin-left:0}.form-horizontal .controls:first-child{*padding-left:180px}.form-horizontal .help-block{margin-bottom:0}.form-horizontal input+.help-block,.form-horizontal select+.help-block,.form-horizontal textarea+.help-block,.form-horizontal .uneditable-input+.help-block,.form-horizontal .input-prepend+.help-block,.form-horizontal .input-append+.help-block{margin-top:10px}.form-horizontal .form-actions{padding-left:180px}table{max-width:100%;background-color:transparent;border-collapse:collapse;border-spacing:0}.table{width:100%;margin-bottom:20px}.table th,.table td{padding:8px;line-height:20px;text-align:left;vertical-align:top;border-top:1px solid #ddd}.table th{font-weight:bold}.table thead th{vertical-align:bottom}.table caption+thead tr:first-child th,.table caption+thead tr:first-child td,.table colgroup+thead tr:first-child th,.table colgroup+thead tr:first-child td,.table thead:first-child tr:first-child th,.table thead:first-child tr:first-child td{border-top:0}.table tbody+tbody{border-top:2px solid #ddd}.table .table{background-color:#fff}.table-condensed th,.table-condensed td{padding:4px 5px}.table-bordered{border:1px solid #ddd;border-collapse:separate;*border-collapse:collapse;border-left:0;-webkit-border-radius:4px;-moz-border-radius:4px;border-radius:4px}.table-bordered th,.table-bordered td{border-left:1px solid #ddd}.table-bordered caption+thead tr:first-child th,.table-bordered caption+tbody tr:first-child th,.table-bordered caption+tbody tr:first-child td,.table-bordered colgroup+thead tr:first-child th,.table-bordered colgroup+tbody tr:first-child th,.table-bordered colgroup+tbody tr:first-child td,.table-bordered thead:first-child tr:first-child th,.table-bordered tbody:first-child tr:first-child th,.table-bordered tbody:first-child tr:first-child td{border-top:0}.table-bordered thead:first-child tr:first-child>th:first-child,.table-bordered tbody:first-child tr:first-child>td:first-child,.table-bordered tbody:first-child tr:first-child>th:first-child{-webkit-border-top-left-radius:4px;border-top-left-radius:4px;-moz-border-radius-topleft:4px}.table-bordered thead:first-child tr:first-child>th:last-child,.table-bordered tbody:first-child tr:first-child>td:last-child,.table-bordered tbody:first-child tr:first-child>th:last-child{-webkit-border-top-right-radius:4px;border-top-right-radius:4px;-moz-border-radius-topright:4px}.table-bordered thead:last-child tr:last-child>th:first-child,.table-bordered tbody:last-child tr:last-child>td:first-child,.table-bordered tbody:last-child tr:last-child>th:first-child,.table-bordered tfoot:last-child tr:last-child>td:first-child,.table-bordered tfoot:last-child tr:last-child>th:first-child{-webkit-border-bottom-left-radius:4px;border-bottom-left-radius:4px;-moz-border-radius-bottomleft:4px}.table-bordered thead:last-child tr:last-child>th:last-child,.table-bordered tbody:last-child tr:last-child>td:last-child,.table-bordered tbody:last-child tr:last-child>th:last-child,.table-bordered tfoot:last-child tr:last-child>td:last-child,.table-bordered tfoot:last-child tr:last-child>th:last-child{-webkit-border-bottom-right-radius:4px;border-bottom-right-radius:4px;-moz-border-radius-bottomright:4px}.table-bordered tfoot+tbody:last-child tr:last-child td:first-child{-webkit-border-bottom-left-radius:0;border-bottom-left-radius:0;-moz-border-radius-bottomleft:0}.table-bordered tfoot+tbody:last-child tr:last-child td:last-child{-webkit-border-bottom-right-radius:0;border-bottom-right-radius:0;-moz-border-radius-bottomright:0}.table-bordered caption+thead tr:first-child th:first-child,.table-bordered caption+tbody tr:first-child td:first-child,.table-bordered colgroup+thead tr:first-child th:first-child,.table-bordered colgroup+tbody tr:first-child td:first-child{-webkit-border-top-left-radius:4px;border-top-left-radius:4px;-moz-border-radius-topleft:4px}.table-bordered caption+thead tr:first-child th:last-child,.table-bordered caption+tbody tr:first-child td:last-child,.table-bordered colgroup+thead tr:first-child th:last-child,.table-bordered colgroup+tbody tr:first-child td:last-child{-webkit-border-top-right-radius:4px;border-top-right-radius:4px;-moz-border-radius-topright:4px}.table-striped tbody>tr:nth-child(odd)>td,.table-striped tbody>tr:nth-child(odd)>th{background-color:#f9f9f9}.table-hover tbody tr:hover>td,.table-hover tbody tr:hover>th{background-color:#f5f5f5}table td[class*="span"],table th[class*="span"],.row-fluid table td[class*="span"],.row-fluid table th[class*="span"]{display:table-cell;float:none;margin-left:0}.table td.span1,.table th.span1{float:none;width:44px;margin-left:0}.table td.span2,.table th.span2{float:none;width:124px;margin-left:0}.table td.span3,.table th.span3{float:none;width:204px;margin-left:0}.table td.span4,.table th.span4{float:none;width:284px;margin-left:0}.table td.span5,.table th.span5{float:none;width:364px;margin-left:0}.table td.span6,.table th.span6{float:none;width:444px;margin-left:0}.table td.span7,.table th.span7{float:none;width:524px;margin-left:0}.table td.span8,.table th.span8{float:none;width:604px;margin-left:0}.table td.span9,.table th.span9{float:none;width:684px;margin-left:0}.table td.span10,.table th.span10{float:none;width:764px;margin-left:0}.table td.span11,.table th.span11{float:none;width:844px;margin-left:0}.table td.span12,.table th.span12{float:none;width:924px;margin-left:0}.table tbody tr.success>td{background-color:#dff0d8}.table tbody tr.error>td{background-color:#f2dede}.table tbody tr.warning>td{background-color:#fcf8e3}.table tbody tr.info>td{background-color:#d9edf7}.table-hover tbody tr.success:hover>td{background-color:#d0e9c6}.table-hover tbody tr.error:hover>td{background-color:#ebcccc}.table-hover tbody tr.warning:hover>td{background-color:#faf2cc}.table-hover tbody tr.info:hover>td{background-color:#c4e3f3}[class^="icon-"],[class*=" icon-"]{display:inline-block;width:14px;height:14px;margin-top:1px;*margin-right:.3em;line-height:14px;vertical-align:text-top;background-image:url("../img/glyphicons-halflings.png");background-position:14px 14px;background-repeat:no-repeat}.icon-white,.nav-pills>.active>a>[class^="icon-"],.nav-pills>.active>a>[class*=" icon-"],.nav-list>.active>a>[class^="icon-"],.nav-list>.active>a>[class*=" icon-"],.navbar-inverse .nav>.active>a>[class^="icon-"],.navbar-inverse .nav>.active>a>[class*=" icon-"],.dropdown-menu>li>a:hover>[class^="icon-"],.dropdown-menu>li>a:focus>[class^="icon-"],.dropdown-menu>li>a:hover>[class*=" icon-"],.dropdown-menu>li>a:focus>[class*=" icon-"],.dropdown-menu>.active>a>[class^="icon-"],.dropdown-menu>.active>a>[class*=" icon-"],.dropdown-submenu:hover>a>[class^="icon-"],.dropdown-submenu:focus>a>[class^="icon-"],.dropdown-submenu:hover>a>[class*=" icon-"],.dropdown-submenu:focus>a>[class*=" icon-"]{background-image:url("../img/glyphicons-halflings-white.png")}.icon-glass{background-position:0 0}.icon-music{background-position:-24px 0}.icon-search{background-position:-48px 0}.icon-envelope{background-position:-72px 0}.icon-heart{background-position:-96px 0}.icon-star{background-position:-120px 0}.icon-star-empty{background-position:-144px 0}.icon-user{background-position:-168px 0}.icon-film{background-position:-192px 0}.icon-th-large{background-position:-216px 0}.icon-th{background-position:-240px 0}.icon-th-list{background-position:-264px 0}.icon-ok{background-position:-288px 0}.icon-remove{background-position:-312px 0}.icon-zoom-in{background-position:-336px 0}.icon-zoom-out{background-position:-360px 0}.icon-off{background-position:-384px 0}.icon-signal{background-position:-408px 0}.icon-cog{background-position:-432px 0}.icon-trash{background-position:-456px 0}.icon-home{background-position:0 -24px}.icon-file{background-position:-24px -24px}.icon-time{background-position:-48px -24px}.icon-road{background-position:-72px -24px}.icon-download-alt{background-position:-96px -24px}.icon-download{background-position:-120px -24px}.icon-upload{background-position:-144px -24px}.icon-inbox{background-position:-168px -24px}.icon-play-circle{background-position:-192px -24px}.icon-repeat{background-position:-216px -24px}.icon-refresh{background-position:-240px -24px}.icon-list-alt{background-position:-264px -24px}.icon-lock{background-position:-287px -24px}.icon-flag{background-position:-312px -24px}.icon-headphones{background-position:-336px -24px}.icon-volume-off{background-position:-360px -24px}.icon-volume-down{background-position:-384px -24px}.icon-volume-up{background-position:-408px -24px}.icon-qrcode{background-position:-432px -24px}.icon-barcode{background-position:-456px -24px}.icon-tag{background-position:0 -48px}.icon-tags{background-position:-25px -48px}.icon-book{background-position:-48px -48px}.icon-bookmark{background-position:-72px -48px}.icon-print{background-position:-96px -48px}.icon-camera{background-position:-120px -48px}.icon-font{background-position:-144px -48px}.icon-bold{background-position:-167px -48px}.icon-italic{background-position:-192px -48px}.icon-text-height{background-position:-216px -48px}.icon-text-width{background-position:-240px -48px}.icon-align-left{background-position:-264px -48px}.icon-align-center{background-position:-288px -48px}.icon-align-right{background-position:-312px -48px}.icon-align-justify{background-position:-336px -48px}.icon-list{background-position:-360px -48px}.icon-indent-left{background-position:-384px -48px}.icon-indent-right{background-position:-408px -48px}.icon-facetime-video{background-position:-432px -48px}.icon-picture{background-position:-456px -48px}.icon-pencil{background-position:0 -72px}.icon-map-marker{background-position:-24px -72px}.icon-adjust{background-position:-48px -72px}.icon-tint{background-position:-72px -72px}.icon-edit{background-position:-96px -72px}.icon-share{background-position:-120px -72px}.icon-check{background-position:-144px -72px}.icon-move{background-position:-168px -72px}.icon-step-backward{background-position:-192px -72px}.icon-fast-backward{background-position:-216px -72px}.icon-backward{background-position:-240px -72px}.icon-play{background-position:-264px -72px}.icon-pause{background-position:-288px -72px}.icon-stop{background-position:-312px -72px}.icon-forward{background-position:-336px -72px}.icon-fast-forward{background-position:-360px -72px}.icon-step-forward{background-position:-384px -72px}.icon-eject{background-position:-408px -72px}.icon-chevron-left{background-position:-432px -72px}.icon-chevron-right{background-position:-456px -72px}.icon-plus-sign{background-position:0 -96px}.icon-minus-sign{background-position:-24px -96px}.icon-remove-sign{background-position:-48px -96px}.icon-ok-sign{background-position:-72px -96px}.icon-question-sign{background-position:-96px -96px}.icon-info-sign{background-position:-120px -96px}.icon-screenshot{background-position:-144px -96px}.icon-remove-circle{background-position:-168px -96px}.icon-ok-circle{background-position:-192px -96px}.icon-ban-circle{background-position:-216px -96px}.icon-arrow-left{background-position:-240px -96px}.icon-arrow-right{background-position:-264px -96px}.icon-arrow-up{background-position:-289px -96px}.icon-arrow-down{background-position:-312px -96px}.icon-share-alt{background-position:-336px -96px}.icon-resize-full{background-position:-360px -96px}.icon-resize-small{background-position:-384px -96px}.icon-plus{background-position:-408px -96px}.icon-minus{background-position:-433px -96px}.icon-asterisk{background-position:-456px -96px}.icon-exclamation-sign{background-position:0 -120px}.icon-gift{background-position:-24px -120px}.icon-leaf{background-position:-48px -120px}.icon-fire{background-position:-72px -120px}.icon-eye-open{background-position:-96px -120px}.icon-eye-close{background-position:-120px -120px}.icon-warning-sign{background-position:-144px -120px}.icon-plane{background-position:-168px -120px}.icon-calendar{background-position:-192px -120px}.icon-random{width:16px;background-position:-216px -120px}.icon-comment{background-position:-240px -120px}.icon-magnet{background-position:-264px -120px}.icon-chevron-up{background-position:-288px -120px}.icon-chevron-down{background-position:-313px -119px}.icon-retweet{background-position:-336px -120px}.icon-shopping-cart{background-position:-360px -120px}.icon-folder-close{width:16px;background-position:-384px -120px}.icon-folder-open{width:16px;background-position:-408px -120px}.icon-resize-vertical{background-position:-432px -119px}.icon-resize-horizontal{background-position:-456px -118px}.icon-hdd{background-position:0 -144px}.icon-bullhorn{background-position:-24px -144px}.icon-bell{background-position:-48px -144px}.icon-certificate{background-position:-72px -144px}.icon-thumbs-up{background-position:-96px -144px}.icon-thumbs-down{background-position:-120px -144px}.icon-hand-right{background-position:-144px -144px}.icon-hand-left{background-position:-168px -144px}.icon-hand-up{background-position:-192px -144px}.icon-hand-down{background-position:-216px -144px}.icon-circle-arrow-right{background-position:-240px -144px}.icon-circle-arrow-left{background-position:-264px -144px}.icon-circle-arrow-up{background-position:-288px -144px}.icon-circle-arrow-down{background-position:-312px -144px}.icon-globe{background-position:-336px -144px}.icon-wrench{background-position:-360px -144px}.icon-tasks{background-position:-384px -144px}.icon-filter{background-position:-408px -144px}.icon-briefcase{background-position:-432px -144px}.icon-fullscreen{background-position:-456px -144px}.dropup,.dropdown{position:relative}.dropdown-toggle{*margin-bottom:-3px}.dropdown-toggle:active,.open .dropdown-toggle{outline:0}.caret{display:inline-block;width:0;height:0;vertical-align:top;border-top:4px solid #000;border-right:4px solid transparent;border-left:4px solid transparent;content:""}.dropdown .caret{margin-top:8px;margin-left:2px}.dropdown-menu{position:absolute;top:100%;left:0;z-index:1000;display:none;float:left;min-width:160px;padding:5px 0;margin:2px 0 0;list-style:none;background-color:#fff;border:1px solid #ccc;border:1px solid rgba(0,0,0,0.2);*border-right-width:2px;*border-bottom-width:2px;-webkit-border-radius:6px;-moz-border-radius:6px;border-radius:6px;-webkit-box-shadow:0 5px 10px rgba(0,0,0,0.2);-moz-box-shadow:0 5px 10px rgba(0,0,0,0.2);box-shadow:0 5px 10px rgba(0,0,0,0.2);-webkit-background-clip:padding-box;-moz-background-clip:padding;background-clip:padding-box}.dropdown-menu.pull-right{right:0;left:auto}.dropdown-menu .divider{*width:100%;height:1px;margin:9px 1px;*margin:-5px 0 5px;overflow:hidden;background-color:#e5e5e5;border-bottom:1px solid #fff}.dropdown-menu>li>a{display:block;padding:3px 20px;clear:both;font-weight:normal;line-height:20px;color:#333;white-space:nowrap}.dropdown-menu>li>a:hover,.dropdown-menu>li>a:focus,.dropdown-submenu:hover>a,.dropdown-submenu:focus>a{color:#fff;text-decoration:none;background-color:#0081c2;background-image:-moz-linear-gradient(top,#08c,#0077b3);background-image:-webkit-gradient(linear,0 0,0 100%,from(#08c),to(#0077b3));background-image:-webkit-linear-gradient(top,#08c,#0077b3);background-image:-o-linear-gradient(top,#08c,#0077b3);background-image:linear-gradient(to bottom,#08c,#0077b3);background-repeat:repeat-x;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff0088cc',endColorstr='#ff0077b3',GradientType=0)}.dropdown-menu>.active>a,.dropdown-menu>.active>a:hover,.dropdown-menu>.active>a:focus{color:#fff;text-decoration:none;background-color:#0081c2;background-image:-moz-linear-gradient(top,#08c,#0077b3);background-image:-webkit-gradient(linear,0 0,0 100%,from(#08c),to(#0077b3));background-image:-webkit-linear-gradient(top,#08c,#0077b3);background-image:-o-linear-gradient(top,#08c,#0077b3);background-image:linear-gradient(to bottom,#08c,#0077b3);background-repeat:repeat-x;outline:0;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff0088cc',endColorstr='#ff0077b3',GradientType=0)}.dropdown-menu>.disabled>a,.dropdown-menu>.disabled>a:hover,.dropdown-menu>.disabled>a:focus{color:#999}.dropdown-menu>.disabled>a:hover,.dropdown-menu>.disabled>a:focus{text-decoration:none;cursor:default;background-color:transparent;background-image:none;filter:progid:DXImageTransform.Microsoft.gradient(enabled=false)}.open{*z-index:1000}.open>.dropdown-menu{display:block}.pull-right>.dropdown-menu{right:0;left:auto}.dropup .caret,.navbar-fixed-bottom .dropdown .caret{border-top:0;border-bottom:4px solid #000;content:""}.dropup .dropdown-menu,.navbar-fixed-bottom .dropdown .dropdown-menu{top:auto;bottom:100%;margin-bottom:1px}.dropdown-submenu{position:relative}.dropdown-submenu>.dropdown-menu{top:0;left:100%;margin-top:-6px;margin-left:-1px;-webkit-border-radius:0 6px 6px 6px;-moz-border-radius:0 6px 6px 6px;border-radius:0 6px 6px 6px}.dropdown-submenu:hover>.dropdown-menu{display:block}.dropup .dropdown-submenu>.dropdown-menu{top:auto;bottom:0;margin-top:0;margin-bottom:-2px;-webkit-border-radius:5px 5px 5px 0;-moz-border-radius:5px 5px 5px 0;border-radius:5px 5px 5px 0}.dropdown-submenu>a:after{display:block;float:right;width:0;height:0;margin-top:5px;margin-right:-10px;border-color:transparent;border-left-color:#ccc;border-style:solid;border-width:5px 0 5px 5px;content:" "}.dropdown-submenu:hover>a:after{border-left-color:#fff}.dropdown-submenu.pull-left{float:none}.dropdown-submenu.pull-left>.dropdown-menu{left:-100%;margin-left:10px;-webkit-border-radius:6px 0 6px 6px;-moz-border-radius:6px 0 6px 6px;border-radius:6px 0 6px 6px}.dropdown .dropdown-menu .nav-header{padding-right:20px;padding-left:20px}.typeahead{z-index:1051;margin-top:2px;-webkit-border-radius:4px;-moz-border-radius:4px;border-radius:4px}.well{min-height:20px;padding:19px;margin-bottom:20px;background-color:#f5f5f5;border:1px solid #e3e3e3;-webkit-border-radius:4px;-moz-border-radius:4px;border-radius:4px;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,0.05);-moz-box-shadow:inset 0 1px 1px rgba(0,0,0,0.05);box-shadow:inset 0 1px 1px rgba(0,0,0,0.05)}.well blockquote{border-color:#ddd;border-color:rgba(0,0,0,0.15)}.well-large{padding:24px;-webkit-border-radius:6px;-moz-border-radius:6px;border-radius:6px}.well-small{padding:9px;-webkit-border-radius:3px;-moz-border-radius:3px;border-radius:3px}.fade{opacity:0;-webkit-transition:opacity .15s linear;-moz-transition:opacity .15s linear;-o-transition:opacity .15s linear;transition:opacity .15s linear}.fade.in{opacity:1}.collapse{position:relative;height:0;overflow:hidden;-webkit-transition:height .35s ease;-moz-transition:height .35s ease;-o-transition:height .35s ease;transition:height .35s ease}.collapse.in{height:auto}.close{float:right;font-size:20px;font-weight:bold;line-height:20px;color:#000;text-shadow:0 1px 0 #fff;opacity:.2;filter:alpha(opacity=20)}.close:hover,.close:focus{color:#000;text-decoration:none;cursor:pointer;opacity:.4;filter:alpha(opacity=40)}button.close{padding:0;cursor:pointer;background:transparent;border:0;-webkit-appearance:none}.btn{display:inline-block;*display:inline;padding:4px 12px;margin-bottom:0;*margin-left:.3em;font-size:14px;line-height:20px;color:#333;text-align:center;text-shadow:0 1px 1px rgba(255,255,255,0.75);vertical-align:middle;cursor:pointer;background-color:#f5f5f5;*background-color:#e6e6e6;background-image:-moz-linear-gradient(top,#fff,#e6e6e6);background-image:-webkit-gradient(linear,0 0,0 100%,from(#fff),to(#e6e6e6));background-image:-webkit-linear-gradient(top,#fff,#e6e6e6);background-image:-o-linear-gradient(top,#fff,#e6e6e6);background-image:linear-gradient(to bottom,#fff,#e6e6e6);background-repeat:repeat-x;border:1px solid #ccc;*border:0;border-color:#e6e6e6 #e6e6e6 #bfbfbf;border-color:rgba(0,0,0,0.1) rgba(0,0,0,0.1) rgba(0,0,0,0.25);border-bottom-color:#b3b3b3;-webkit-border-radius:4px;-moz-border-radius:4px;border-radius:4px;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffffffff',endColorstr='#ffe6e6e6',GradientType=0);filter:progid:DXImageTransform.Microsoft.gradient(enabled=false);*zoom:1;-webkit-box-shadow:inset 0 1px 0 rgba(255,255,255,0.2),0 1px 2px rgba(0,0,0,0.05);-moz-box-shadow:inset 0 1px 0 rgba(255,255,255,0.2),0 1px 2px rgba(0,0,0,0.05);box-shadow:inset 0 1px 0 rgba(255,255,255,0.2),0 1px 2px rgba(0,0,0,0.05)}.btn:hover,.btn:focus,.btn:active,.btn.active,.btn.disabled,.btn[disabled]{color:#333;background-color:#e6e6e6;*background-color:#d9d9d9}.btn:active,.btn.active{background-color:#ccc \9}.btn:first-child{*margin-left:0}.btn:hover,.btn:focus{color:#333;text-decoration:none;background-position:0 -15px;-webkit-transition:background-position .1s linear;-moz-transition:background-position .1s linear;-o-transition:background-position .1s linear;transition:background-position .1s linear}.btn:focus{outline:thin dotted #333;outline:5px auto -webkit-focus-ring-color;outline-offset:-2px}.btn.active,.btn:active{background-image:none;outline:0;-webkit-box-shadow:inset 0 2px 4px rgba(0,0,0,0.15),0 1px 2px rgba(0,0,0,0.05);-moz-box-shadow:inset 0 2px 4px rgba(0,0,0,0.15),0 1px 2px rgba(0,0,0,0.05);box-shadow:inset 0 2px 4px rgba(0,0,0,0.15),0 1px 2px rgba(0,0,0,0.05)}.btn.disabled,.btn[disabled]{cursor:default;background-image:none;opacity:.65;filter:alpha(opacity=65);-webkit-box-shadow:none;-moz-box-shadow:none;box-shadow:none}.btn-large{padding:11px 19px;font-size:17.5px;-webkit-border-radius:6px;-moz-border-radius:6px;border-radius:6px}.btn-large [class^="icon-"],.btn-large [class*=" icon-"]{margin-top:4px}.btn-small{padding:2px 10px;font-size:11.9px;-webkit-border-radius:3px;-moz-border-radius:3px;border-radius:3px}.btn-small [class^="icon-"],.btn-small [class*=" icon-"]{margin-top:0}.btn-mini [class^="icon-"],.btn-mini [class*=" icon-"]{margin-top:-1px}.btn-mini{padding:0 6px;font-size:10.5px;-webkit-border-radius:3px;-moz-border-radius:3px;border-radius:3px}.btn-block{display:block;width:100%;padding-right:0;padding-left:0;-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box}.btn-block+.btn-block{margin-top:5px}input[type="submit"].btn-block,input[type="reset"].btn-block,input[type="button"].btn-block{width:100%}.btn-primary.active,.btn-warning.active,.btn-danger.active,.btn-success.active,.btn-info.active,.btn-inverse.active{color:rgba(255,255,255,0.75)}.btn-primary{color:#fff;text-shadow:0 -1px 0 rgba(0,0,0,0.25);background-color:#006dcc;*background-color:#04c;background-image:-moz-linear-gradient(top,#08c,#04c);background-image:-webkit-gradient(linear,0 0,0 100%,from(#08c),to(#04c));background-image:-webkit-linear-gradient(top,#08c,#04c);background-image:-o-linear-gradient(top,#08c,#04c);background-image:linear-gradient(to bottom,#08c,#04c);background-repeat:repeat-x;border-color:#04c #04c #002a80;border-color:rgba(0,0,0,0.1) rgba(0,0,0,0.1) rgba(0,0,0,0.25);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff0088cc',endColorstr='#ff0044cc',GradientType=0);filter:progid:DXImageTransform.Microsoft.gradient(enabled=false)}.btn-primary:hover,.btn-primary:focus,.btn-primary:active,.btn-primary.active,.btn-primary.disabled,.btn-primary[disabled]{color:#fff;background-color:#04c;*background-color:#003bb3}.btn-primary:active,.btn-primary.active{background-color:#039 \9}.btn-warning{color:#fff;text-shadow:0 -1px 0 rgba(0,0,0,0.25);background-color:#faa732;*background-color:#f89406;background-image:-moz-linear-gradient(top,#fbb450,#f89406);background-image:-webkit-gradient(linear,0 0,0 100%,from(#fbb450),to(#f89406));background-image:-webkit-linear-gradient(top,#fbb450,#f89406);background-image:-o-linear-gradient(top,#fbb450,#f89406);background-image:linear-gradient(to bottom,#fbb450,#f89406);background-repeat:repeat-x;border-color:#f89406 #f89406 #ad6704;border-color:rgba(0,0,0,0.1) rgba(0,0,0,0.1) rgba(0,0,0,0.25);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#fffbb450',endColorstr='#fff89406',GradientType=0);filter:progid:DXImageTransform.Microsoft.gradient(enabled=false)}.btn-warning:hover,.btn-warning:focus,.btn-warning:active,.btn-warning.active,.btn-warning.disabled,.btn-warning[disabled]{color:#fff;background-color:#f89406;*background-color:#df8505}.btn-warning:active,.btn-warning.active{background-color:#c67605 \9}.btn-danger{color:#fff;text-shadow:0 -1px 0 rgba(0,0,0,0.25);background-color:#da4f49;*background-color:#bd362f;background-image:-moz-linear-gradient(top,#ee5f5b,#bd362f);background-image:-webkit-gradient(linear,0 0,0 100%,from(#ee5f5b),to(#bd362f));background-image:-webkit-linear-gradient(top,#ee5f5b,#bd362f);background-image:-o-linear-gradient(top,#ee5f5b,#bd362f);background-image:linear-gradient(to bottom,#ee5f5b,#bd362f);background-repeat:repeat-x;border-color:#bd362f #bd362f #802420;border-color:rgba(0,0,0,0.1) rgba(0,0,0,0.1) rgba(0,0,0,0.25);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffee5f5b',endColorstr='#ffbd362f',GradientType=0);filter:progid:DXImageTransform.Microsoft.gradient(enabled=false)}.btn-danger:hover,.btn-danger:focus,.btn-danger:active,.btn-danger.active,.btn-danger.disabled,.btn-danger[disabled]{color:#fff;background-color:#bd362f;*background-color:#a9302a}.btn-danger:active,.btn-danger.active{background-color:#942a25 \9}.btn-success{color:#fff;text-shadow:0 -1px 0 rgba(0,0,0,0.25);background-color:#5bb75b;*background-color:#51a351;background-image:-moz-linear-gradient(top,#62c462,#51a351);background-image:-webkit-gradient(linear,0 0,0 100%,from(#62c462),to(#51a351));background-image:-webkit-linear-gradient(top,#62c462,#51a351);background-image:-o-linear-gradient(top,#62c462,#51a351);background-image:linear-gradient(to bottom,#62c462,#51a351);background-repeat:repeat-x;border-color:#51a351 #51a351 #387038;border-color:rgba(0,0,0,0.1) rgba(0,0,0,0.1) rgba(0,0,0,0.25);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff62c462',endColorstr='#ff51a351',GradientType=0);filter:progid:DXImageTransform.Microsoft.gradient(enabled=false)}.btn-success:hover,.btn-success:focus,.btn-success:active,.btn-success.active,.btn-success.disabled,.btn-success[disabled]{color:#fff;background-color:#51a351;*background-color:#499249}.btn-success:active,.btn-success.active{background-color:#408140 \9}.btn-info{color:#fff;text-shadow:0 -1px 0 rgba(0,0,0,0.25);background-color:#49afcd;*background-color:#2f96b4;background-image:-moz-linear-gradient(top,#5bc0de,#2f96b4);background-image:-webkit-gradient(linear,0 0,0 100%,from(#5bc0de),to(#2f96b4));background-image:-webkit-linear-gradient(top,#5bc0de,#2f96b4);background-image:-o-linear-gradient(top,#5bc0de,#2f96b4);background-image:linear-gradient(to bottom,#5bc0de,#2f96b4);background-repeat:repeat-x;border-color:#2f96b4 #2f96b4 #1f6377;border-color:rgba(0,0,0,0.1) rgba(0,0,0,0.1) rgba(0,0,0,0.25);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff5bc0de',endColorstr='#ff2f96b4',GradientType=0);filter:progid:DXImageTransform.Microsoft.gradient(enabled=false)}.btn-info:hover,.btn-info:focus,.btn-info:active,.btn-info.active,.btn-info.disabled,.btn-info[disabled]{color:#fff;background-color:#2f96b4;*background-color:#2a85a0}.btn-info:active,.btn-info.active{background-color:#24748c \9}.btn-inverse{color:#fff;text-shadow:0 -1px 0 rgba(0,0,0,0.25);background-color:#363636;*background-color:#222;background-image:-moz-linear-gradient(top,#444,#222);background-image:-webkit-gradient(linear,0 0,0 100%,from(#444),to(#222));background-image:-webkit-linear-gradient(top,#444,#222);background-image:-o-linear-gradient(top,#444,#222);background-image:linear-gradient(to bottom,#444,#222);background-repeat:repeat-x;border-color:#222 #222 #000;border-color:rgba(0,0,0,0.1) rgba(0,0,0,0.1) rgba(0,0,0,0.25);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff444444',endColorstr='#ff222222',GradientType=0);filter:progid:DXImageTransform.Microsoft.gradient(enabled=false)}.btn-inverse:hover,.btn-inverse:focus,.btn-inverse:active,.btn-inverse.active,.btn-inverse.disabled,.btn-inverse[disabled]{color:#fff;background-color:#222;*background-color:#151515}.btn-inverse:active,.btn-inverse.active{background-color:#080808 \9}button.btn,input[type="submit"].btn{*padding-top:3px;*padding-bottom:3px}button.btn::-moz-focus-inner,input[type="submit"].btn::-moz-focus-inner{padding:0;border:0}button.btn.btn-large,input[type="submit"].btn.btn-large{*padding-top:7px;*padding-bottom:7px}button.btn.btn-small,input[type="submit"].btn.btn-small{*padding-top:3px;*padding-bottom:3px}button.btn.btn-mini,input[type="submit"].btn.btn-mini{*padding-top:1px;*padding-bottom:1px}.btn-link,.btn-link:active,.btn-link[disabled]{background-color:transparent;background-image:none;-webkit-box-shadow:none;-moz-box-shadow:none;box-shadow:none}.btn-link{color:#08c;cursor:pointer;border-color:transparent;-webkit-border-radius:0;-moz-border-radius:0;border-radius:0}.btn-link:hover,.btn-link:focus{color:#005580;text-decoration:underline;background-color:transparent}.btn-link[disabled]:hover,.btn-link[disabled]:focus{color:#333;text-decoration:none}.btn-group{position:relative;display:inline-block;*display:inline;*margin-left:.3em;font-size:0;white-space:nowrap;vertical-align:middle;*zoom:1}.btn-group:first-child{*margin-left:0}.btn-group+.btn-group{margin-left:5px}.btn-toolbar{margin-top:10px;margin-bottom:10px;font-size:0}.btn-toolbar>.btn+.btn,.btn-toolbar>.btn-group+.btn,.btn-toolbar>.btn+.btn-group{margin-left:5px}.btn-group>.btn{position:relative;-webkit-border-radius:0;-moz-border-radius:0;border-radius:0}.btn-group>.btn+.btn{margin-left:-1px}.btn-group>.btn,.btn-group>.dropdown-menu,.btn-group>.popover{font-size:14px}.btn-group>.btn-mini{font-size:10.5px}.btn-group>.btn-small{font-size:11.9px}.btn-group>.btn-large{font-size:17.5px}.btn-group>.btn:first-child{margin-left:0;-webkit-border-bottom-left-radius:4px;border-bottom-left-radius:4px;-webkit-border-top-left-radius:4px;border-top-left-radius:4px;-moz-border-radius-bottomleft:4px;-moz-border-radius-topleft:4px}.btn-group>.btn:last-child,.btn-group>.dropdown-toggle{-webkit-border-top-right-radius:4px;border-top-right-radius:4px;-webkit-border-bottom-right-radius:4px;border-bottom-right-radius:4px;-moz-border-radius-topright:4px;-moz-border-radius-bottomright:4px}.btn-group>.btn.large:first-child{margin-left:0;-webkit-border-bottom-left-radius:6px;border-bottom-left-radius:6px;-webkit-border-top-left-radius:6px;border-top-left-radius:6px;-moz-border-radius-bottomleft:6px;-moz-border-radius-topleft:6px}.btn-group>.btn.large:last-child,.btn-group>.large.dropdown-toggle{-webkit-border-top-right-radius:6px;border-top-right-radius:6px;-webkit-border-bottom-right-radius:6px;border-bottom-right-radius:6px;-moz-border-radius-topright:6px;-moz-border-radius-bottomright:6px}.btn-group>.btn:hover,.btn-group>.btn:focus,.btn-group>.btn:active,.btn-group>.btn.active{z-index:2}.btn-group .dropdown-toggle:active,.btn-group.open .dropdown-toggle{outline:0}.btn-group>.btn+.dropdown-toggle{*padding-top:5px;padding-right:8px;*padding-bottom:5px;padding-left:8px;-webkit-box-shadow:inset 1px 0 0 rgba(255,255,255,0.125),inset 0 1px 0 rgba(255,255,255,0.2),0 1px 2px rgba(0,0,0,0.05);-moz-box-shadow:inset 1px 0 0 rgba(255,255,255,0.125),inset 0 1px 0 rgba(255,255,255,0.2),0 1px 2px rgba(0,0,0,0.05);box-shadow:inset 1px 0 0 rgba(255,255,255,0.125),inset 0 1px 0 rgba(255,255,255,0.2),0 1px 2px rgba(0,0,0,0.05)}.btn-group>.btn-mini+.dropdown-toggle{*padding-top:2px;padding-right:5px;*padding-bottom:2px;padding-left:5px}.btn-group>.btn-small+.dropdown-toggle{*padding-top:5px;*padding-bottom:4px}.btn-group>.btn-large+.dropdown-toggle{*padding-top:7px;padding-right:12px;*padding-bottom:7px;padding-left:12px}.btn-group.open .dropdown-toggle{background-image:none;-webkit-box-shadow:inset 0 2px 4px rgba(0,0,0,0.15),0 1px 2px rgba(0,0,0,0.05);-moz-box-shadow:inset 0 2px 4px rgba(0,0,0,0.15),0 1px 2px rgba(0,0,0,0.05);box-shadow:inset 0 2px 4px rgba(0,0,0,0.15),0 1px 2px rgba(0,0,0,0.05)}.btn-group.open .btn.dropdown-toggle{background-color:#e6e6e6}.btn-group.open .btn-primary.dropdown-toggle{background-color:#04c}.btn-group.open .btn-warning.dropdown-toggle{background-color:#f89406}.btn-group.open .btn-danger.dropdown-toggle{background-color:#bd362f}.btn-group.open .btn-success.dropdown-toggle{background-color:#51a351}.btn-group.open .btn-info.dropdown-toggle{background-color:#2f96b4}.btn-group.open .btn-inverse.dropdown-toggle{background-color:#222}.btn .caret{margin-top:8px;margin-left:0}.btn-large .caret{margin-top:6px}.btn-large .caret{border-top-width:5px;border-right-width:5px;border-left-width:5px}.btn-mini .caret,.btn-small .caret{margin-top:8px}.dropup .btn-large .caret{border-bottom-width:5px}.btn-primary .caret,.btn-warning .caret,.btn-danger .caret,.btn-info .caret,.btn-success .caret,.btn-inverse .caret{border-top-color:#fff;border-bottom-color:#fff}.btn-group-vertical{display:inline-block;*display:inline;*zoom:1}.btn-group-vertical>.btn{display:block;float:none;max-width:100%;-webkit-border-radius:0;-moz-border-radius:0;border-radius:0}.btn-group-vertical>.btn+.btn{margin-top:-1px;margin-left:0}.btn-group-vertical>.btn:first-child{-webkit-border-radius:4px 4px 0 0;-moz-border-radius:4px 4px 0 0;border-radius:4px 4px 0 0}.btn-group-vertical>.btn:last-child{-webkit-border-radius:0 0 4px 4px;-moz-border-radius:0 0 4px 4px;border-radius:0 0 4px 4px}.btn-group-vertical>.btn-large:first-child{-webkit-border-radius:6px 6px 0 0;-moz-border-radius:6px 6px 0 0;border-radius:6px 6px 0 0}.btn-group-vertical>.btn-large:last-child{-webkit-border-radius:0 0 6px 6px;-moz-border-radius:0 0 6px 6px;border-radius:0 0 6px 6px}.alert{padding:8px 35px 8px 14px;margin-bottom:20px;text-shadow:0 1px 0 rgba(255,255,255,0.5);background-color:#fcf8e3;border:1px solid #fbeed5;-webkit-border-radius:4px;-moz-border-radius:4px;border-radius:4px}.alert,.alert h4{color:#c09853}.alert h4{margin:0}.alert .close{position:relative;top:-2px;right:-21px;line-height:20px}.alert-success{color:#468847;background-color:#dff0d8;border-color:#d6e9c6}.alert-success h4{color:#468847}.alert-danger,.alert-error{color:#b94a48;background-color:#f2dede;border-color:#eed3d7}.alert-danger h4,.alert-error h4{color:#b94a48}.alert-info{color:#3a87ad;background-color:#d9edf7;border-color:#bce8f1}.alert-info h4{color:#3a87ad}.alert-block{padding-top:14px;padding-bottom:14px}.alert-block>p,.alert-block>ul{margin-bottom:0}.alert-block p+p{margin-top:5px}.nav{margin-bottom:20px;margin-left:0;list-style:none}.nav>li>a{display:block}.nav>li>a:hover,.nav>li>a:focus{text-decoration:none;background-color:#eee}.nav>li>a>img{max-width:none}.nav>.pull-right{float:right}.nav-header{display:block;padding:3px 15px;font-size:11px;font-weight:bold;line-height:20px;color:#999;text-shadow:0 1px 0 rgba(255,255,255,0.5);text-transform:uppercase}.nav li+.nav-header{margin-top:9px}.nav-list{padding-right:15px;padding-left:15px;margin-bottom:0}.nav-list>li>a,.nav-list .nav-header{margin-right:-15px;margin-left:-15px;text-shadow:0 1px 0 rgba(255,255,255,0.5)}.nav-list>li>a{padding:3px 15px}.nav-list>.active>a,.nav-list>.active>a:hover,.nav-list>.active>a:focus{color:#fff;text-shadow:0 -1px 0 rgba(0,0,0,0.2);background-color:#08c}.nav-list [class^="icon-"],.nav-list [class*=" icon-"]{margin-right:2px}.nav-list .divider{*width:100%;height:1px;margin:9px 1px;*margin:-5px 0 5px;overflow:hidden;background-color:#e5e5e5;border-bottom:1px solid #fff}.nav-tabs,.nav-pills{*zoom:1}.nav-tabs:before,.nav-pills:before,.nav-tabs:after,.nav-pills:after{display:table;line-height:0;content:""}.nav-tabs:after,.nav-pills:after{clear:both}.nav-tabs>li,.nav-pills>li{float:left}.nav-tabs>li>a,.nav-pills>li>a{padding-right:12px;padding-left:12px;margin-right:2px;line-height:14px}.nav-tabs{border-bottom:1px solid #ddd}.nav-tabs>li{margin-bottom:-1px}.nav-tabs>li>a{padding-top:8px;padding-bottom:8px;line-height:20px;border:1px solid transparent;-webkit-border-radius:4px 4px 0 0;-moz-border-radius:4px 4px 0 0;border-radius:4px 4px 0 0}.nav-tabs>li>a:hover,.nav-tabs>li>a:focus{border-color:#eee #eee #ddd}.nav-tabs>.active>a,.nav-tabs>.active>a:hover,.nav-tabs>.active>a:focus{color:#555;cursor:default;background-color:#fff;border:1px solid #ddd;border-bottom-color:transparent}.nav-pills>li>a{padding-top:8px;padding-bottom:8px;margin-top:2px;margin-bottom:2px;-webkit-border-radius:5px;-moz-border-radius:5px;border-radius:5px}.nav-pills>.active>a,.nav-pills>.active>a:hover,.nav-pills>.active>a:focus{color:#fff;background-color:#08c}.nav-stacked>li{float:none}.nav-stacked>li>a{margin-right:0}.nav-tabs.nav-stacked{border-bottom:0}.nav-tabs.nav-stacked>li>a{border:1px solid #ddd;-webkit-border-radius:0;-moz-border-radius:0;border-radius:0}.nav-tabs.nav-stacked>li:first-child>a{-webkit-border-top-right-radius:4px;border-top-right-radius:4px;-webkit-border-top-left-radius:4px;border-top-left-radius:4px;-moz-border-radius-topright:4px;-moz-border-radius-topleft:4px}.nav-tabs.nav-stacked>li:last-child>a{-webkit-border-bottom-right-radius:4px;border-bottom-right-radius:4px;-webkit-border-bottom-left-radius:4px;border-bottom-left-radius:4px;-moz-border-radius-bottomright:4px;-moz-border-radius-bottomleft:4px}.nav-tabs.nav-stacked>li>a:hover,.nav-tabs.nav-stacked>li>a:focus{z-index:2;border-color:#ddd}.nav-pills.nav-stacked>li>a{margin-bottom:3px}.nav-pills.nav-stacked>li:last-child>a{margin-bottom:1px}.nav-tabs .dropdown-menu{-webkit-border-radius:0 0 6px 6px;-moz-border-radius:0 0 6px 6px;border-radius:0 0 6px 6px}.nav-pills .dropdown-menu{-webkit-border-radius:6px;-moz-border-radius:6px;border-radius:6px}.nav .dropdown-toggle .caret{margin-top:6px;border-top-color:#08c;border-bottom-color:#08c}.nav .dropdown-toggle:hover .caret,.nav .dropdown-toggle:focus .caret{border-top-color:#005580;border-bottom-color:#005580}.nav-tabs .dropdown-toggle .caret{margin-top:8px}.nav .active .dropdown-toggle .caret{border-top-color:#fff;border-bottom-color:#fff}.nav-tabs .active .dropdown-toggle .caret{border-top-color:#555;border-bottom-color:#555}.nav>.dropdown.active>a:hover,.nav>.dropdown.active>a:focus{cursor:pointer}.nav-tabs .open .dropdown-toggle,.nav-pills .open .dropdown-toggle,.nav>li.dropdown.open.active>a:hover,.nav>li.dropdown.open.active>a:focus{color:#fff;background-color:#999;border-color:#999}.nav li.dropdown.open .caret,.nav li.dropdown.open.active .caret,.nav li.dropdown.open a:hover .caret,.nav li.dropdown.open a:focus .caret{border-top-color:#fff;border-bottom-color:#fff;opacity:1;filter:alpha(opacity=100)}.tabs-stacked .open>a:hover,.tabs-stacked .open>a:focus{border-color:#999}.tabbable{*zoom:1}.tabbable:before,.tabbable:after{display:table;line-height:0;content:""}.tabbable:after{clear:both}.tab-content{overflow:auto}.tabs-below>.nav-tabs,.tabs-right>.nav-tabs,.tabs-left>.nav-tabs{border-bottom:0}.tab-content>.tab-pane,.pill-content>.pill-pane{display:none}.tab-content>.active,.pill-content>.active{display:block}.tabs-below>.nav-tabs{border-top:1px solid #ddd}.tabs-below>.nav-tabs>li{margin-top:-1px;margin-bottom:0}.tabs-below>.nav-tabs>li>a{-webkit-border-radius:0 0 4px 4px;-moz-border-radius:0 0 4px 4px;border-radius:0 0 4px 4px}.tabs-below>.nav-tabs>li>a:hover,.tabs-below>.nav-tabs>li>a:focus{border-top-color:#ddd;border-bottom-color:transparent}.tabs-below>.nav-tabs>.active>a,.tabs-below>.nav-tabs>.active>a:hover,.tabs-below>.nav-tabs>.active>a:focus{border-color:transparent #ddd #ddd #ddd}.tabs-left>.nav-tabs>li,.tabs-right>.nav-tabs>li{float:none}.tabs-left>.nav-tabs>li>a,.tabs-right>.nav-tabs>li>a{min-width:74px;margin-right:0;margin-bottom:3px}.tabs-left>.nav-tabs{float:left;margin-right:19px;border-right:1px solid #ddd}.tabs-left>.nav-tabs>li>a{margin-right:-1px;-webkit-border-radius:4px 0 0 4px;-moz-border-radius:4px 0 0 4px;border-radius:4px 0 0 4px}.tabs-left>.nav-tabs>li>a:hover,.tabs-left>.nav-tabs>li>a:focus{border-color:#eee #ddd #eee #eee}.tabs-left>.nav-tabs .active>a,.tabs-left>.nav-tabs .active>a:hover,.tabs-left>.nav-tabs .active>a:focus{border-color:#ddd transparent #ddd #ddd;*border-right-color:#fff}.tabs-right>.nav-tabs{float:right;margin-left:19px;border-left:1px solid #ddd}.tabs-right>.nav-tabs>li>a{margin-left:-1px;-webkit-border-radius:0 4px 4px 0;-moz-border-radius:0 4px 4px 0;border-radius:0 4px 4px 0}.tabs-right>.nav-tabs>li>a:hover,.tabs-right>.nav-tabs>li>a:focus{border-color:#eee #eee #eee #ddd}.tabs-right>.nav-tabs .active>a,.tabs-right>.nav-tabs .active>a:hover,.tabs-right>.nav-tabs .active>a:focus{border-color:#ddd #ddd #ddd transparent;*border-left-color:#fff}.nav>.disabled>a{color:#999}.nav>.disabled>a:hover,.nav>.disabled>a:focus{text-decoration:none;cursor:default;background-color:transparent}.navbar{*position:relative;*z-index:2;margin-bottom:20px;overflow:visible}.navbar-inner{min-height:40px;padding-right:20px;padding-left:20px;background-color:#fafafa;background-image:-moz-linear-gradient(top,#fff,#f2f2f2);background-image:-webkit-gradient(linear,0 0,0 100%,from(#fff),to(#f2f2f2));background-image:-webkit-linear-gradient(top,#fff,#f2f2f2);background-image:-o-linear-gradient(top,#fff,#f2f2f2);background-image:linear-gradient(to bottom,#fff,#f2f2f2);background-repeat:repeat-x;border:1px solid #d4d4d4;-webkit-border-radius:4px;-moz-border-radius:4px;border-radius:4px;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffffffff',endColorstr='#fff2f2f2',GradientType=0);*zoom:1;-webkit-box-shadow:0 1px 4px rgba(0,0,0,0.065);-moz-box-shadow:0 1px 4px rgba(0,0,0,0.065);box-shadow:0 1px 4px rgba(0,0,0,0.065)}.navbar-inner:before,.navbar-inner:after{display:table;line-height:0;content:""}.navbar-inner:after{clear:both}.navbar .container{width:auto}.nav-collapse.collapse{height:auto;overflow:visible}.navbar .brand{display:block;float:left;padding:10px 20px 10px;margin-left:-20px;font-size:20px;font-weight:200;color:#777;text-shadow:0 1px 0 #fff}.navbar .brand:hover,.navbar .brand:focus{text-decoration:none}.navbar-text{margin-bottom:0;line-height:40px;color:#777}.navbar-link{color:#777}.navbar-link:hover,.navbar-link:focus{color:#333}.navbar .divider-vertical{height:40px;margin:0 9px;border-right:1px solid #fff;border-left:1px solid #f2f2f2}.navbar .btn,.navbar .btn-group{margin-top:5px}.navbar .btn-group .btn,.navbar .input-prepend .btn,.navbar .input-append .btn,.navbar .input-prepend .btn-group,.navbar .input-append .btn-group{margin-top:0}.navbar-form{margin-bottom:0;*zoom:1}.navbar-form:before,.navbar-form:after{display:table;line-height:0;content:""}.navbar-form:after{clear:both}.navbar-form input,.navbar-form select,.navbar-form .radio,.navbar-form .checkbox{margin-top:5px}.navbar-form input,.navbar-form select,.navbar-form .btn{display:inline-block;margin-bottom:0}.navbar-form input[type="image"],.navbar-form input[type="checkbox"],.navbar-form input[type="radio"]{margin-top:3px}.navbar-form .input-append,.navbar-form .input-prepend{margin-top:5px;white-space:nowrap}.navbar-form .input-append input,.navbar-form .input-prepend input{margin-top:0}.navbar-search{position:relative;float:left;margin-top:5px;margin-bottom:0}.navbar-search .search-query{padding:4px 14px;margin-bottom:0;font-family:"Helvetica Neue",Helvetica,Arial,sans-serif;font-size:13px;font-weight:normal;line-height:1;-webkit-border-radius:15px;-moz-border-radius:15px;border-radius:15px}.navbar-static-top{position:static;margin-bottom:0}.navbar-static-top .navbar-inner{-webkit-border-radius:0;-moz-border-radius:0;border-radius:0}.navbar-fixed-top,.navbar-fixed-bottom{position:fixed;right:0;left:0;z-index:1030;margin-bottom:0}.navbar-fixed-top .navbar-inner,.navbar-static-top .navbar-inner{border-width:0 0 1px}.navbar-fixed-bottom .navbar-inner{border-width:1px 0 0}.navbar-fixed-top .navbar-inner,.navbar-fixed-bottom .navbar-inner{padding-right:0;padding-left:0;-webkit-border-radius:0;-moz-border-radius:0;border-radius:0}.navbar-static-top .container,.navbar-fixed-top .container,.navbar-fixed-bottom .container{width:940px}.navbar-fixed-top{top:0}.navbar-fixed-top .navbar-inner,.navbar-static-top .navbar-inner{-webkit-box-shadow:0 1px 10px rgba(0,0,0,0.1);-moz-box-shadow:0 1px 10px rgba(0,0,0,0.1);box-shadow:0 1px 10px rgba(0,0,0,0.1)}.navbar-fixed-bottom{bottom:0}.navbar-fixed-bottom .navbar-inner{-webkit-box-shadow:0 -1px 10px rgba(0,0,0,0.1);-moz-box-shadow:0 -1px 10px rgba(0,0,0,0.1);box-shadow:0 -1px 10px rgba(0,0,0,0.1)}.navbar .nav{position:relative;left:0;display:block;float:left;margin:0 10px 0 0}.navbar .nav.pull-right{float:right;margin-right:0}.navbar .nav>li{float:left}.navbar .nav>li>a{float:none;padding:10px 15px 10px;color:#777;text-decoration:none;text-shadow:0 1px 0 #fff}.navbar .nav .dropdown-toggle .caret{margin-top:8px}.navbar .nav>li>a:focus,.navbar .nav>li>a:hover{color:#333;text-decoration:none;background-color:transparent}.navbar .nav>.active>a,.navbar .nav>.active>a:hover,.navbar .nav>.active>a:focus{color:#555;text-decoration:none;background-color:#e5e5e5;-webkit-box-shadow:inset 0 3px 8px rgba(0,0,0,0.125);-moz-box-shadow:inset 0 3px 8px rgba(0,0,0,0.125);box-shadow:inset 0 3px 8px rgba(0,0,0,0.125)}.navbar .btn-navbar{display:none;float:right;padding:7px 10px;margin-right:5px;margin-left:5px;color:#fff;text-shadow:0 -1px 0 rgba(0,0,0,0.25);background-color:#ededed;*background-color:#e5e5e5;background-image:-moz-linear-gradient(top,#f2f2f2,#e5e5e5);background-image:-webkit-gradient(linear,0 0,0 100%,from(#f2f2f2),to(#e5e5e5));background-image:-webkit-linear-gradient(top,#f2f2f2,#e5e5e5);background-image:-o-linear-gradient(top,#f2f2f2,#e5e5e5);background-image:linear-gradient(to bottom,#f2f2f2,#e5e5e5);background-repeat:repeat-x;border-color:#e5e5e5 #e5e5e5 #bfbfbf;border-color:rgba(0,0,0,0.1) rgba(0,0,0,0.1) rgba(0,0,0,0.25);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#fff2f2f2',endColorstr='#ffe5e5e5',GradientType=0);filter:progid:DXImageTransform.Microsoft.gradient(enabled=false);-webkit-box-shadow:inset 0 1px 0 rgba(255,255,255,0.1),0 1px 0 rgba(255,255,255,0.075);-moz-box-shadow:inset 0 1px 0 rgba(255,255,255,0.1),0 1px 0 rgba(255,255,255,0.075);box-shadow:inset 0 1px 0 rgba(255,255,255,0.1),0 1px 0 rgba(255,255,255,0.075)}.navbar .btn-navbar:hover,.navbar .btn-navbar:focus,.navbar .btn-navbar:active,.navbar .btn-navbar.active,.navbar .btn-navbar.disabled,.navbar .btn-navbar[disabled]{color:#fff;background-color:#e5e5e5;*background-color:#d9d9d9}.navbar .btn-navbar:active,.navbar .btn-navbar.active{background-color:#ccc \9}.navbar .btn-navbar .icon-bar{display:block;width:18px;height:2px;background-color:#f5f5f5;-webkit-border-radius:1px;-moz-border-radius:1px;border-radius:1px;-webkit-box-shadow:0 1px 0 rgba(0,0,0,0.25);-moz-box-shadow:0 1px 0 rgba(0,0,0,0.25);box-shadow:0 1px 0 rgba(0,0,0,0.25)}.btn-navbar .icon-bar+.icon-bar{margin-top:3px}.navbar .nav>li>.dropdown-menu:before{position:absolute;top:-7px;left:9px;display:inline-block;border-right:7px solid transparent;border-bottom:7px solid #ccc;border-left:7px solid transparent;border-bottom-color:rgba(0,0,0,0.2);content:''}.navbar .nav>li>.dropdown-menu:after{position:absolute;top:-6px;left:10px;display:inline-block;border-right:6px solid transparent;border-bottom:6px solid #fff;border-left:6px solid transparent;content:''}.navbar-fixed-bottom .nav>li>.dropdown-menu:before{top:auto;bottom:-7px;border-top:7px solid #ccc;border-bottom:0;border-top-color:rgba(0,0,0,0.2)}.navbar-fixed-bottom .nav>li>.dropdown-menu:after{top:auto;bottom:-6px;border-top:6px solid #fff;border-bottom:0}.navbar .nav li.dropdown>a:hover .caret,.navbar .nav li.dropdown>a:focus .caret{border-top-color:#333;border-bottom-color:#333}.navbar .nav li.dropdown.open>.dropdown-toggle,.navbar .nav li.dropdown.active>.dropdown-toggle,.navbar .nav li.dropdown.open.active>.dropdown-toggle{color:#555;background-color:#e5e5e5}.navbar .nav li.dropdown>.dropdown-toggle .caret{border-top-color:#777;border-bottom-color:#777}.navbar .nav li.dropdown.open>.dropdown-toggle .caret,.navbar .nav li.dropdown.active>.dropdown-toggle .caret,.navbar .nav li.dropdown.open.active>.dropdown-toggle .caret{border-top-color:#555;border-bottom-color:#555}.navbar .pull-right>li>.dropdown-menu,.navbar .nav>li>.dropdown-menu.pull-right{right:0;left:auto}.navbar .pull-right>li>.dropdown-menu:before,.navbar .nav>li>.dropdown-menu.pull-right:before{right:12px;left:auto}.navbar .pull-right>li>.dropdown-menu:after,.navbar .nav>li>.dropdown-menu.pull-right:after{right:13px;left:auto}.navbar .pull-right>li>.dropdown-menu .dropdown-menu,.navbar .nav>li>.dropdown-menu.pull-right .dropdown-menu{right:100%;left:auto;margin-right:-1px;margin-left:0;-webkit-border-radius:6px 0 6px 6px;-moz-border-radius:6px 0 6px 6px;border-radius:6px 0 6px 6px}.navbar-inverse .navbar-inner{background-color:#1b1b1b;background-image:-moz-linear-gradient(top,#222,#111);background-image:-webkit-gradient(linear,0 0,0 100%,from(#222),to(#111));background-image:-webkit-linear-gradient(top,#222,#111);background-image:-o-linear-gradient(top,#222,#111);background-image:linear-gradient(to bottom,#222,#111);background-repeat:repeat-x;border-color:#252525;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff222222',endColorstr='#ff111111',GradientType=0)}.navbar-inverse .brand,.navbar-inverse .nav>li>a{color:#999;text-shadow:0 -1px 0 rgba(0,0,0,0.25)}.navbar-inverse .brand:hover,.navbar-inverse .nav>li>a:hover,.navbar-inverse .brand:focus,.navbar-inverse .nav>li>a:focus{color:#fff}.navbar-inverse .brand{color:#999}.navbar-inverse .navbar-text{color:#999}.navbar-inverse .nav>li>a:focus,.navbar-inverse .nav>li>a:hover{color:#fff;background-color:transparent}.navbar-inverse .nav .active>a,.navbar-inverse .nav .active>a:hover,.navbar-inverse .nav .active>a:focus{color:#fff;background-color:#111}.navbar-inverse .navbar-link{color:#999}.navbar-inverse .navbar-link:hover,.navbar-inverse .navbar-link:focus{color:#fff}.navbar-inverse .divider-vertical{border-right-color:#222;border-left-color:#111}.navbar-inverse .nav li.dropdown.open>.dropdown-toggle,.navbar-inverse .nav li.dropdown.active>.dropdown-toggle,.navbar-inverse .nav li.dropdown.open.active>.dropdown-toggle{color:#fff;background-color:#111}.navbar-inverse .nav li.dropdown>a:hover .caret,.navbar-inverse .nav li.dropdown>a:focus .caret{border-top-color:#fff;border-bottom-color:#fff}.navbar-inverse .nav li.dropdown>.dropdown-toggle .caret{border-top-color:#999;border-bottom-color:#999}.navbar-inverse .nav li.dropdown.open>.dropdown-toggle .caret,.navbar-inverse .nav li.dropdown.active>.dropdown-toggle .caret,.navbar-inverse .nav li.dropdown.open.active>.dropdown-toggle .caret{border-top-color:#fff;border-bottom-color:#fff}.navbar-inverse .navbar-search .search-query{color:#fff;background-color:#515151;border-color:#111;-webkit-box-shadow:inset 0 1px 2px rgba(0,0,0,0.1),0 1px 0 rgba(255,255,255,0.15);-moz-box-shadow:inset 0 1px 2px rgba(0,0,0,0.1),0 1px 0 rgba(255,255,255,0.15);box-shadow:inset 0 1px 2px rgba(0,0,0,0.1),0 1px 0 rgba(255,255,255,0.15);-webkit-transition:none;-moz-transition:none;-o-transition:none;transition:none}.navbar-inverse .navbar-search .search-query:-moz-placeholder{color:#ccc}.navbar-inverse .navbar-search .search-query:-ms-input-placeholder{color:#ccc}.navbar-inverse .navbar-search .search-query::-webkit-input-placeholder{color:#ccc}.navbar-inverse .navbar-search .search-query:focus,.navbar-inverse .navbar-search .search-query.focused{padding:5px 15px;color:#333;text-shadow:0 1px 0 #fff;background-color:#fff;border:0;outline:0;-webkit-box-shadow:0 0 3px rgba(0,0,0,0.15);-moz-box-shadow:0 0 3px rgba(0,0,0,0.15);box-shadow:0 0 3px rgba(0,0,0,0.15)}.navbar-inverse .btn-navbar{color:#fff;text-shadow:0 -1px 0 rgba(0,0,0,0.25);background-color:#0e0e0e;*background-color:#040404;background-image:-moz-linear-gradient(top,#151515,#040404);background-image:-webkit-gradient(linear,0 0,0 100%,from(#151515),to(#040404));background-image:-webkit-linear-gradient(top,#151515,#040404);background-image:-o-linear-gradient(top,#151515,#040404);background-image:linear-gradient(to bottom,#151515,#040404);background-repeat:repeat-x;border-color:#040404 #040404 #000;border-color:rgba(0,0,0,0.1) rgba(0,0,0,0.1) rgba(0,0,0,0.25);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff151515',endColorstr='#ff040404',GradientType=0);filter:progid:DXImageTransform.Microsoft.gradient(enabled=false)}.navbar-inverse .btn-navbar:hover,.navbar-inverse .btn-navbar:focus,.navbar-inverse .btn-navbar:active,.navbar-inverse .btn-navbar.active,.navbar-inverse .btn-navbar.disabled,.navbar-inverse .btn-navbar[disabled]{color:#fff;background-color:#040404;*background-color:#000}.navbar-inverse .btn-navbar:active,.navbar-inverse .btn-navbar.active{background-color:#000 \9}.breadcrumb{padding:8px 15px;margin:0 0 20px;list-style:none;background-color:#f5f5f5;-webkit-border-radius:4px;-moz-border-radius:4px;border-radius:4px}.breadcrumb>li{display:inline-block;*display:inline;text-shadow:0 1px 0 #fff;*zoom:1}.breadcrumb>li>.divider{padding:0 5px;color:#ccc}.breadcrumb>.active{color:#999}.pagination{margin:20px 0}.pagination ul{display:inline-block;*display:inline;margin-bottom:0;margin-left:0;-webkit-border-radius:4px;-moz-border-radius:4px;border-radius:4px;*zoom:1;-webkit-box-shadow:0 1px 2px rgba(0,0,0,0.05);-moz-box-shadow:0 1px 2px rgba(0,0,0,0.05);box-shadow:0 1px 2px rgba(0,0,0,0.05)}.pagination ul>li{display:inline}.pagination ul>li>a,.pagination ul>li>span{float:left;padding:4px 12px;line-height:20px;text-decoration:none;background-color:#fff;border:1px solid #ddd;border-left-width:0}.pagination ul>li>a:hover,.pagination ul>li>a:focus,.pagination ul>.active>a,.pagination ul>.active>span{background-color:#f5f5f5}.pagination ul>.active>a,.pagination ul>.active>span{color:#999;cursor:default}.pagination ul>.disabled>span,.pagination ul>.disabled>a,.pagination ul>.disabled>a:hover,.pagination ul>.disabled>a:focus{color:#999;cursor:default;background-color:transparent}.pagination ul>li:first-child>a,.pagination ul>li:first-child>span{border-left-width:1px;-webkit-border-bottom-left-radius:4px;border-bottom-left-radius:4px;-webkit-border-top-left-radius:4px;border-top-left-radius:4px;-moz-border-radius-bottomleft:4px;-moz-border-radius-topleft:4px}.pagination ul>li:last-child>a,.pagination ul>li:last-child>span{-webkit-border-top-right-radius:4px;border-top-right-radius:4px;-webkit-border-bottom-right-radius:4px;border-bottom-right-radius:4px;-moz-border-radius-topright:4px;-moz-border-radius-bottomright:4px}.pagination-centered{text-align:center}.pagination-right{text-align:right}.pagination-large ul>li>a,.pagination-large ul>li>span{padding:11px 19px;font-size:17.5px}.pagination-large ul>li:first-child>a,.pagination-large ul>li:first-child>span{-webkit-border-bottom-left-radius:6px;border-bottom-left-radius:6px;-webkit-border-top-left-radius:6px;border-top-left-radius:6px;-moz-border-radius-bottomleft:6px;-moz-border-radius-topleft:6px}.pagination-large ul>li:last-child>a,.pagination-large ul>li:last-child>span{-webkit-border-top-right-radius:6px;border-top-right-radius:6px;-webkit-border-bottom-right-radius:6px;border-bottom-right-radius:6px;-moz-border-radius-topright:6px;-moz-border-radius-bottomright:6px}.pagination-mini ul>li:first-child>a,.pagination-small ul>li:first-child>a,.pagination-mini ul>li:first-child>span,.pagination-small ul>li:first-child>span{-webkit-border-bottom-left-radius:3px;border-bottom-left-radius:3px;-webkit-border-top-left-radius:3px;border-top-left-radius:3px;-moz-border-radius-bottomleft:3px;-moz-border-radius-topleft:3px}.pagination-mini ul>li:last-child>a,.pagination-small ul>li:last-child>a,.pagination-mini ul>li:last-child>span,.pagination-small ul>li:last-child>span{-webkit-border-top-right-radius:3px;border-top-right-radius:3px;-webkit-border-bottom-right-radius:3px;border-bottom-right-radius:3px;-moz-border-radius-topright:3px;-moz-border-radius-bottomright:3px}.pagination-small ul>li>a,.pagination-small ul>li>span{padding:2px 10px;font-size:11.9px}.pagination-mini ul>li>a,.pagination-mini ul>li>span{padding:0 6px;font-size:10.5px}.pager{margin:20px 0;text-align:center;list-style:none;*zoom:1}.pager:before,.pager:after{display:table;line-height:0;content:""}.pager:after{clear:both}.pager li{display:inline}.pager li>a,.pager li>span{display:inline-block;padding:5px 14px;background-color:#fff;border:1px solid #ddd;-webkit-border-radius:15px;-moz-border-radius:15px;border-radius:15px}.pager li>a:hover,.pager li>a:focus{text-decoration:none;background-color:#f5f5f5}.pager .next>a,.pager .next>span{float:right}.pager .previous>a,.pager .previous>span{float:left}.pager .disabled>a,.pager .disabled>a:hover,.pager .disabled>a:focus,.pager .disabled>span{color:#999;cursor:default;background-color:#fff}.modal-backdrop{position:fixed;top:0;right:0;bottom:0;left:0;z-index:1040;background-color:#000}.modal-backdrop.fade{opacity:0}.modal-backdrop,.modal-backdrop.fade.in{opacity:.8;filter:alpha(opacity=80)}.modal{position:fixed;top:10%;left:50%;z-index:1050;width:560px;margin-left:-280px;background-color:#fff;border:1px solid #999;border:1px solid rgba(0,0,0,0.3);*border:1px solid #999;-webkit-border-radius:6px;-moz-border-radius:6px;border-radius:6px;outline:0;-webkit-box-shadow:0 3px 7px rgba(0,0,0,0.3);-moz-box-shadow:0 3px 7px rgba(0,0,0,0.3);box-shadow:0 3px 7px rgba(0,0,0,0.3);-webkit-background-clip:padding-box;-moz-background-clip:padding-box;background-clip:padding-box}.modal.fade{top:-25%;-webkit-transition:opacity .3s linear,top .3s ease-out;-moz-transition:opacity .3s linear,top .3s ease-out;-o-transition:opacity .3s linear,top .3s ease-out;transition:opacity .3s linear,top .3s ease-out}.modal.fade.in{top:10%}.modal-header{padding:9px 15px;border-bottom:1px solid #eee}.modal-header .close{margin-top:2px}.modal-header h3{margin:0;line-height:30px}.modal-body{position:relative;max-height:400px;padding:15px;overflow-y:auto}.modal-form{margin-bottom:0}.modal-footer{padding:14px 15px 15px;margin-bottom:0;text-align:right;background-color:#f5f5f5;border-top:1px solid #ddd;-webkit-border-radius:0 0 6px 6px;-moz-border-radius:0 0 6px 6px;border-radius:0 0 6px 6px;*zoom:1;-webkit-box-shadow:inset 0 1px 0 #fff;-moz-box-shadow:inset 0 1px 0 #fff;box-shadow:inset 0 1px 0 #fff}.modal-footer:before,.modal-footer:after{display:table;line-height:0;content:""}.modal-footer:after{clear:both}.modal-footer .btn+.btn{margin-bottom:0;margin-left:5px}.modal-footer .btn-group .btn+.btn{margin-left:-1px}.modal-footer .btn-block+.btn-block{margin-left:0}.tooltip{position:absolute;z-index:1030;display:block;font-size:11px;line-height:1.4;opacity:0;filter:alpha(opacity=0);visibility:visible}.tooltip.in{opacity:.8;filter:alpha(opacity=80)}.tooltip.top{padding:5px 0;margin-top:-3px}.tooltip.right{padding:0 5px;margin-left:3px}.tooltip.bottom{padding:5px 0;margin-top:3px}.tooltip.left{padding:0 5px;margin-left:-3px}.tooltip-inner{max-width:200px;padding:8px;color:#fff;text-align:center;text-decoration:none;background-color:#000;-webkit-border-radius:4px;-moz-border-radius:4px;border-radius:4px}.tooltip-arrow{position:absolute;width:0;height:0;border-color:transparent;border-style:solid}.tooltip.top .tooltip-arrow{bottom:0;left:50%;margin-left:-5px;border-top-color:#000;border-width:5px 5px 0}.tooltip.right .tooltip-arrow{top:50%;left:0;margin-top:-5px;border-right-color:#000;border-width:5px 5px 5px 0}.tooltip.left .tooltip-arrow{top:50%;right:0;margin-top:-5px;border-left-color:#000;border-width:5px 0 5px 5px}.tooltip.bottom .tooltip-arrow{top:0;left:50%;margin-left:-5px;border-bottom-color:#000;border-width:0 5px 5px}.popover{position:absolute;top:0;left:0;z-index:1010;display:none;max-width:276px;padding:1px;text-align:left;white-space:normal;background-color:#fff;border:1px solid #ccc;border:1px solid rgba(0,0,0,0.2);-webkit-border-radius:6px;-moz-border-radius:6px;border-radius:6px;-webkit-box-shadow:0 5px 10px rgba(0,0,0,0.2);-moz-box-shadow:0 5px 10px rgba(0,0,0,0.2);box-shadow:0 5px 10px rgba(0,0,0,0.2);-webkit-background-clip:padding-box;-moz-background-clip:padding;background-clip:padding-box}.popover.top{margin-top:-10px}.popover.right{margin-left:10px}.popover.bottom{margin-top:10px}.popover.left{margin-left:-10px}.popover-title{padding:8px 14px;margin:0;font-size:14px;font-weight:normal;line-height:18px;background-color:#f7f7f7;border-bottom:1px solid #ebebeb;-webkit-border-radius:5px 5px 0 0;-moz-border-radius:5px 5px 0 0;border-radius:5px 5px 0 0}.popover-title:empty{display:none}.popover-content{padding:9px 14px}.popover .arrow,.popover .arrow:after{position:absolute;display:block;width:0;height:0;border-color:transparent;border-style:solid}.popover .arrow{border-width:11px}.popover .arrow:after{border-width:10px;content:""}.popover.top .arrow{bottom:-11px;left:50%;margin-left:-11px;border-top-color:#999;border-top-color:rgba(0,0,0,0.25);border-bottom-width:0}.popover.top .arrow:after{bottom:1px;margin-left:-10px;border-top-color:#fff;border-bottom-width:0}.popover.right .arrow{top:50%;left:-11px;margin-top:-11px;border-right-color:#999;border-right-color:rgba(0,0,0,0.25);border-left-width:0}.popover.right .arrow:after{bottom:-10px;left:1px;border-right-color:#fff;border-left-width:0}.popover.bottom .arrow{top:-11px;left:50%;margin-left:-11px;border-bottom-color:#999;border-bottom-color:rgba(0,0,0,0.25);border-top-width:0}.popover.bottom .arrow:after{top:1px;margin-left:-10px;border-bottom-color:#fff;border-top-width:0}.popover.left .arrow{top:50%;right:-11px;margin-top:-11px;border-left-color:#999;border-left-color:rgba(0,0,0,0.25);border-right-width:0}.popover.left .arrow:after{right:1px;bottom:-10px;border-left-color:#fff;border-right-width:0}.thumbnails{margin-left:-20px;list-style:none;*zoom:1}.thumbnails:before,.thumbnails:after{display:table;line-height:0;content:""}.thumbnails:after{clear:both}.row-fluid .thumbnails{margin-left:0}.thumbnails>li{float:left;margin-bottom:20px;margin-left:20px}.thumbnail{display:block;padding:4px;line-height:20px;border:1px solid #ddd;-webkit-border-radius:4px;-moz-border-radius:4px;border-radius:4px;-webkit-box-shadow:0 1px 3px rgba(0,0,0,0.055);-moz-box-shadow:0 1px 3px rgba(0,0,0,0.055);box-shadow:0 1px 3px rgba(0,0,0,0.055);-webkit-transition:all .2s ease-in-out;-moz-transition:all .2s ease-in-out;-o-transition:all .2s ease-in-out;transition:all .2s ease-in-out}a.thumbnail:hover,a.thumbnail:focus{border-color:#08c;-webkit-box-shadow:0 1px 4px rgba(0,105,214,0.25);-moz-box-shadow:0 1px 4px rgba(0,105,214,0.25);box-shadow:0 1px 4px rgba(0,105,214,0.25)}.thumbnail>img{display:block;max-width:100%;margin-right:auto;margin-left:auto}.thumbnail .caption{padding:9px;color:#555}.media,.media-body{overflow:hidden;*overflow:visible;zoom:1}.media,.media .media{margin-top:15px}.media:first-child{margin-top:0}.media-object{display:block}.media-heading{margin:0 0 5px}.media>.pull-left{margin-right:10px}.media>.pull-right{margin-left:10px}.media-list{margin-left:0;list-style:none}.label,.badge{display:inline-block;padding:2px 4px;font-size:11.844px;font-weight:bold;line-height:14px;color:#fff;text-shadow:0 -1px 0 rgba(0,0,0,0.25);white-space:nowrap;vertical-align:baseline;background-color:#999}.label{-webkit-border-radius:3px;-moz-border-radius:3px;border-radius:3px}.badge{padding-right:9px;padding-left:9px;-webkit-border-radius:9px;-moz-border-radius:9px;border-radius:9px}.label:empty,.badge:empty{display:none}a.label:hover,a.label:focus,a.badge:hover,a.badge:focus{color:#fff;text-decoration:none;cursor:pointer}.label-important,.badge-important{background-color:#b94a48}.label-important[href],.badge-important[href]{background-color:#953b39}.label-warning,.badge-warning{background-color:#f89406}.label-warning[href],.badge-warning[href]{background-color:#c67605}.label-success,.badge-success{background-color:#468847}.label-success[href],.badge-success[href]{background-color:#356635}.label-info,.badge-info{background-color:#3a87ad}.label-info[href],.badge-info[href]{background-color:#2d6987}.label-inverse,.badge-inverse{background-color:#333}.label-inverse[href],.badge-inverse[href]{background-color:#1a1a1a}.btn .label,.btn .badge{position:relative;top:-1px}.btn-mini .label,.btn-mini .badge{top:0}@-webkit-keyframes progress-bar-stripes{from{background-position:40px 0}to{background-position:0 0}}@-moz-keyframes progress-bar-stripes{from{background-position:40px 0}to{background-position:0 0}}@-ms-keyframes progress-bar-stripes{from{background-position:40px 0}to{background-position:0 0}}@-o-keyframes progress-bar-stripes{from{background-position:0 0}to{background-position:40px 0}}@keyframes progress-bar-stripes{from{background-position:40px 0}to{background-position:0 0}}.progress{height:20px;margin-bottom:20px;overflow:hidden;background-color:#f7f7f7;background-image:-moz-linear-gradient(top,#f5f5f5,#f9f9f9);background-image:-webkit-gradient(linear,0 0,0 100%,from(#f5f5f5),to(#f9f9f9));background-image:-webkit-linear-gradient(top,#f5f5f5,#f9f9f9);background-image:-o-linear-gradient(top,#f5f5f5,#f9f9f9);background-image:linear-gradient(to bottom,#f5f5f5,#f9f9f9);background-repeat:repeat-x;-webkit-border-radius:4px;-moz-border-radius:4px;border-radius:4px;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#fff5f5f5',endColorstr='#fff9f9f9',GradientType=0);-webkit-box-shadow:inset 0 1px 2px rgba(0,0,0,0.1);-moz-box-shadow:inset 0 1px 2px rgba(0,0,0,0.1);box-shadow:inset 0 1px 2px rgba(0,0,0,0.1)}.progress .bar{float:left;width:0;height:100%;font-size:12px;color:#fff;text-align:center;text-shadow:0 -1px 0 rgba(0,0,0,0.25);background-color:#0e90d2;background-image:-moz-linear-gradient(top,#149bdf,#0480be);background-image:-webkit-gradient(linear,0 0,0 100%,from(#149bdf),to(#0480be));background-image:-webkit-linear-gradient(top,#149bdf,#0480be);background-image:-o-linear-gradient(top,#149bdf,#0480be);background-image:linear-gradient(to bottom,#149bdf,#0480be);background-repeat:repeat-x;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff149bdf',endColorstr='#ff0480be',GradientType=0);-webkit-box-shadow:inset 0 -1px 0 rgba(0,0,0,0.15);-moz-box-shadow:inset 0 -1px 0 rgba(0,0,0,0.15);box-shadow:inset 0 -1px 0 rgba(0,0,0,0.15);-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box;-webkit-transition:width .6s ease;-moz-transition:width .6s ease;-o-transition:width .6s ease;transition:width .6s ease}.progress .bar+.bar{-webkit-box-shadow:inset 1px 0 0 rgba(0,0,0,0.15),inset 0 -1px 0 rgba(0,0,0,0.15);-moz-box-shadow:inset 1px 0 0 rgba(0,0,0,0.15),inset 0 -1px 0 rgba(0,0,0,0.15);box-shadow:inset 1px 0 0 rgba(0,0,0,0.15),inset 0 -1px 0 rgba(0,0,0,0.15)}.progress-striped .bar{background-color:#149bdf;background-image:-webkit-gradient(linear,0 100%,100% 0,color-stop(0.25,rgba(255,255,255,0.15)),color-stop(0.25,transparent),color-stop(0.5,transparent),color-stop(0.5,rgba(255,255,255,0.15)),color-stop(0.75,rgba(255,255,255,0.15)),color-stop(0.75,transparent),to(transparent));background-image:-webkit-linear-gradient(45deg,rgba(255,255,255,0.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,0.15) 50%,rgba(255,255,255,0.15) 75%,transparent 75%,transparent);background-image:-moz-linear-gradient(45deg,rgba(255,255,255,0.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,0.15) 50%,rgba(255,255,255,0.15) 75%,transparent 75%,transparent);background-image:-o-linear-gradient(45deg,rgba(255,255,255,0.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,0.15) 50%,rgba(255,255,255,0.15) 75%,transparent 75%,transparent);background-image:linear-gradient(45deg,rgba(255,255,255,0.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,0.15) 50%,rgba(255,255,255,0.15) 75%,transparent 75%,transparent);-webkit-background-size:40px 40px;-moz-background-size:40px 40px;-o-background-size:40px 40px;background-size:40px 40px}.progress.active .bar{-webkit-animation:progress-bar-stripes 2s linear infinite;-moz-animation:progress-bar-stripes 2s linear infinite;-ms-animation:progress-bar-stripes 2s linear infinite;-o-animation:progress-bar-stripes 2s linear infinite;animation:progress-bar-stripes 2s linear infinite}.progress-danger .bar,.progress .bar-danger{background-color:#dd514c;background-image:-moz-linear-gradient(top,#ee5f5b,#c43c35);background-image:-webkit-gradient(linear,0 0,0 100%,from(#ee5f5b),to(#c43c35));background-image:-webkit-linear-gradient(top,#ee5f5b,#c43c35);background-image:-o-linear-gradient(top,#ee5f5b,#c43c35);background-image:linear-gradient(to bottom,#ee5f5b,#c43c35);background-repeat:repeat-x;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffee5f5b',endColorstr='#ffc43c35',GradientType=0)}.progress-danger.progress-striped .bar,.progress-striped .bar-danger{background-color:#ee5f5b;background-image:-webkit-gradient(linear,0 100%,100% 0,color-stop(0.25,rgba(255,255,255,0.15)),color-stop(0.25,transparent),color-stop(0.5,transparent),color-stop(0.5,rgba(255,255,255,0.15)),color-stop(0.75,rgba(255,255,255,0.15)),color-stop(0.75,transparent),to(transparent));background-image:-webkit-linear-gradient(45deg,rgba(255,255,255,0.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,0.15) 50%,rgba(255,255,255,0.15) 75%,transparent 75%,transparent);background-image:-moz-linear-gradient(45deg,rgba(255,255,255,0.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,0.15) 50%,rgba(255,255,255,0.15) 75%,transparent 75%,transparent);background-image:-o-linear-gradient(45deg,rgba(255,255,255,0.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,0.15) 50%,rgba(255,255,255,0.15) 75%,transparent 75%,transparent);background-image:linear-gradient(45deg,rgba(255,255,255,0.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,0.15) 50%,rgba(255,255,255,0.15) 75%,transparent 75%,transparent)}.progress-success .bar,.progress .bar-success{background-color:#5eb95e;background-image:-moz-linear-gradient(top,#62c462,#57a957);background-image:-webkit-gradient(linear,0 0,0 100%,from(#62c462),to(#57a957));background-image:-webkit-linear-gradient(top,#62c462,#57a957);background-image:-o-linear-gradient(top,#62c462,#57a957);background-image:linear-gradient(to bottom,#62c462,#57a957);background-repeat:repeat-x;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff62c462',endColorstr='#ff57a957',GradientType=0)}.progress-success.progress-striped .bar,.progress-striped .bar-success{background-color:#62c462;background-image:-webkit-gradient(linear,0 100%,100% 0,color-stop(0.25,rgba(255,255,255,0.15)),color-stop(0.25,transparent),color-stop(0.5,transparent),color-stop(0.5,rgba(255,255,255,0.15)),color-stop(0.75,rgba(255,255,255,0.15)),color-stop(0.75,transparent),to(transparent));background-image:-webkit-linear-gradient(45deg,rgba(255,255,255,0.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,0.15) 50%,rgba(255,255,255,0.15) 75%,transparent 75%,transparent);background-image:-moz-linear-gradient(45deg,rgba(255,255,255,0.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,0.15) 50%,rgba(255,255,255,0.15) 75%,transparent 75%,transparent);background-image:-o-linear-gradient(45deg,rgba(255,255,255,0.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,0.15) 50%,rgba(255,255,255,0.15) 75%,transparent 75%,transparent);background-image:linear-gradient(45deg,rgba(255,255,255,0.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,0.15) 50%,rgba(255,255,255,0.15) 75%,transparent 75%,transparent)}.progress-info .bar,.progress .bar-info{background-color:#4bb1cf;background-image:-moz-linear-gradient(top,#5bc0de,#339bb9);background-image:-webkit-gradient(linear,0 0,0 100%,from(#5bc0de),to(#339bb9));background-image:-webkit-linear-gradient(top,#5bc0de,#339bb9);background-image:-o-linear-gradient(top,#5bc0de,#339bb9);background-image:linear-gradient(to bottom,#5bc0de,#339bb9);background-repeat:repeat-x;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff5bc0de',endColorstr='#ff339bb9',GradientType=0)}.progress-info.progress-striped .bar,.progress-striped .bar-info{background-color:#5bc0de;background-image:-webkit-gradient(linear,0 100%,100% 0,color-stop(0.25,rgba(255,255,255,0.15)),color-stop(0.25,transparent),color-stop(0.5,transparent),color-stop(0.5,rgba(255,255,255,0.15)),color-stop(0.75,rgba(255,255,255,0.15)),color-stop(0.75,transparent),to(transparent));background-image:-webkit-linear-gradient(45deg,rgba(255,255,255,0.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,0.15) 50%,rgba(255,255,255,0.15) 75%,transparent 75%,transparent);background-image:-moz-linear-gradient(45deg,rgba(255,255,255,0.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,0.15) 50%,rgba(255,255,255,0.15) 75%,transparent 75%,transparent);background-image:-o-linear-gradient(45deg,rgba(255,255,255,0.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,0.15) 50%,rgba(255,255,255,0.15) 75%,transparent 75%,transparent);background-image:linear-gradient(45deg,rgba(255,255,255,0.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,0.15) 50%,rgba(255,255,255,0.15) 75%,transparent 75%,transparent)}.progress-warning .bar,.progress .bar-warning{background-color:#faa732;background-image:-moz-linear-gradient(top,#fbb450,#f89406);background-image:-webkit-gradient(linear,0 0,0 100%,from(#fbb450),to(#f89406));background-image:-webkit-linear-gradient(top,#fbb450,#f89406);background-image:-o-linear-gradient(top,#fbb450,#f89406);background-image:linear-gradient(to bottom,#fbb450,#f89406);background-repeat:repeat-x;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#fffbb450',endColorstr='#fff89406',GradientType=0)}.progress-warning.progress-striped .bar,.progress-striped .bar-warning{background-color:#fbb450;background-image:-webkit-gradient(linear,0 100%,100% 0,color-stop(0.25,rgba(255,255,255,0.15)),color-stop(0.25,transparent),color-stop(0.5,transparent),color-stop(0.5,rgba(255,255,255,0.15)),color-stop(0.75,rgba(255,255,255,0.15)),color-stop(0.75,transparent),to(transparent));background-image:-webkit-linear-gradient(45deg,rgba(255,255,255,0.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,0.15) 50%,rgba(255,255,255,0.15) 75%,transparent 75%,transparent);background-image:-moz-linear-gradient(45deg,rgba(255,255,255,0.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,0.15) 50%,rgba(255,255,255,0.15) 75%,transparent 75%,transparent);background-image:-o-linear-gradient(45deg,rgba(255,255,255,0.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,0.15) 50%,rgba(255,255,255,0.15) 75%,transparent 75%,transparent);background-image:linear-gradient(45deg,rgba(255,255,255,0.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,0.15) 50%,rgba(255,255,255,0.15) 75%,transparent 75%,transparent)}.accordion{margin-bottom:20px}.accordion-group{margin-bottom:2px;border:1px solid #e5e5e5;-webkit-border-radius:4px;-moz-border-radius:4px;border-radius:4px}.accordion-heading{border-bottom:0}.accordion-heading .accordion-toggle{display:block;padding:8px 15px}.accordion-toggle{cursor:pointer}.accordion-inner{padding:9px 15px;border-top:1px solid #e5e5e5}.carousel{position:relative;margin-bottom:20px;line-height:1}.carousel-inner{position:relative;width:100%;overflow:hidden}.carousel-inner>.item{position:relative;display:none;-webkit-transition:.6s ease-in-out left;-moz-transition:.6s ease-in-out left;-o-transition:.6s ease-in-out left;transition:.6s ease-in-out left}.carousel-inner>.item>img,.carousel-inner>.item>a>img{display:block;line-height:1}.carousel-inner>.active,.carousel-inner>.next,.carousel-inner>.prev{display:block}.carousel-inner>.active{left:0}.carousel-inner>.next,.carousel-inner>.prev{position:absolute;top:0;width:100%}.carousel-inner>.next{left:100%}.carousel-inner>.prev{left:-100%}.carousel-inner>.next.left,.carousel-inner>.prev.right{left:0}.carousel-inner>.active.left{left:-100%}.carousel-inner>.active.right{left:100%}.carousel-control{position:absolute;top:40%;left:15px;width:40px;height:40px;margin-top:-20px;font-size:60px;font-weight:100;line-height:30px;color:#fff;text-align:center;background:#222;border:3px solid #fff;-webkit-border-radius:23px;-moz-border-radius:23px;border-radius:23px;opacity:.5;filter:alpha(opacity=50)}.carousel-control.right{right:15px;left:auto}.carousel-control:hover,.carousel-control:focus{color:#fff;text-decoration:none;opacity:.9;filter:alpha(opacity=90)}.carousel-indicators{position:absolute;top:15px;right:15px;z-index:5;margin:0;list-style:none}.carousel-indicators li{display:block;float:left;width:10px;height:10px;margin-left:5px;text-indent:-999px;background-color:#ccc;background-color:rgba(255,255,255,0.25);border-radius:5px}.carousel-indicators .active{background-color:#fff}.carousel-caption{position:absolute;right:0;bottom:0;left:0;padding:15px;background:#333;background:rgba(0,0,0,0.75)}.carousel-caption h4,.carousel-caption p{line-height:20px;color:#fff}.carousel-caption h4{margin:0 0 5px}.carousel-caption p{margin-bottom:0}.hero-unit{padding:60px;margin-bottom:30px;font-size:18px;font-weight:200;line-height:30px;color:inherit;background-color:#eee;-webkit-border-radius:6px;-moz-border-radius:6px;border-radius:6px}.hero-unit h1{margin-bottom:0;font-size:60px;line-height:1;letter-spacing:-1px;color:inherit}.hero-unit li{line-height:30px}.pull-right{float:right}.pull-left{float:left}.hide{display:none}.show{display:block}.invisible{visibility:hidden}.affix{position:fixed} diff --git a/float-no-zero/resources/bootstrap/img/glyphicons-halflings-white.png b/float-no-zero/resources/bootstrap/img/glyphicons-halflings-white.png new file mode 100644 index 0000000000..3bf6484a29 Binary files /dev/null and b/float-no-zero/resources/bootstrap/img/glyphicons-halflings-white.png differ diff --git a/float-no-zero/resources/bootstrap/img/glyphicons-halflings.png b/float-no-zero/resources/bootstrap/img/glyphicons-halflings.png new file mode 100644 index 0000000000..a996999320 Binary files /dev/null and b/float-no-zero/resources/bootstrap/img/glyphicons-halflings.png differ diff --git a/float-no-zero/resources/bootstrap/js/bootstrap.js b/float-no-zero/resources/bootstrap/js/bootstrap.js new file mode 100644 index 0000000000..c298ee42e3 --- /dev/null +++ b/float-no-zero/resources/bootstrap/js/bootstrap.js @@ -0,0 +1,2276 @@ +/* =================================================== + * bootstrap-transition.js v2.3.1 + * http://twitter.github.com/bootstrap/javascript.html#transitions + * =================================================== + * Copyright 2012 Twitter, Inc. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * ========================================================== */ + + +!function ($) { + + "use strict"; // jshint ;_; + + + /* CSS TRANSITION SUPPORT (http://www.modernizr.com/) + * ======================================================= */ + + $(function () { + + $.support.transition = (function () { + + var transitionEnd = (function () { + + var el = document.createElement('bootstrap') + , transEndEventNames = { + 'WebkitTransition' : 'webkitTransitionEnd' + , 'MozTransition' : 'transitionend' + , 'OTransition' : 'oTransitionEnd otransitionend' + , 'transition' : 'transitionend' + } + , name + + for (name in transEndEventNames){ + if (el.style[name] !== undefined) { + return transEndEventNames[name] + } + } + + }()) + + return transitionEnd && { + end: transitionEnd + } + + })() + + }) + +}(window.jQuery);/* ========================================================== + * bootstrap-alert.js v2.3.1 + * http://twitter.github.com/bootstrap/javascript.html#alerts + * ========================================================== + * Copyright 2012 Twitter, Inc. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * ========================================================== */ + + +!function ($) { + + "use strict"; // jshint ;_; + + + /* ALERT CLASS DEFINITION + * ====================== */ + + var dismiss = '[data-dismiss="alert"]' + , Alert = function (el) { + $(el).on('click', dismiss, this.close) + } + + Alert.prototype.close = function (e) { + var $this = $(this) + , selector = $this.attr('data-target') + , $parent + + if (!selector) { + selector = $this.attr('href') + selector = selector && selector.replace(/.*(?=#[^\s]*$)/, '') //strip for ie7 + } + + $parent = $(selector) + + e && e.preventDefault() + + $parent.length || ($parent = $this.hasClass('alert') ? $this : $this.parent()) + + $parent.trigger(e = $.Event('close')) + + if (e.isDefaultPrevented()) return + + $parent.removeClass('in') + + function removeElement() { + $parent + .trigger('closed') + .remove() + } + + $.support.transition && $parent.hasClass('fade') ? + $parent.on($.support.transition.end, removeElement) : + removeElement() + } + + + /* ALERT PLUGIN DEFINITION + * ======================= */ + + var old = $.fn.alert + + $.fn.alert = function (option) { + return this.each(function () { + var $this = $(this) + , data = $this.data('alert') + if (!data) $this.data('alert', (data = new Alert(this))) + if (typeof option == 'string') data[option].call($this) + }) + } + + $.fn.alert.Constructor = Alert + + + /* ALERT NO CONFLICT + * ================= */ + + $.fn.alert.noConflict = function () { + $.fn.alert = old + return this + } + + + /* ALERT DATA-API + * ============== */ + + $(document).on('click.alert.data-api', dismiss, Alert.prototype.close) + +}(window.jQuery);/* ============================================================ + * bootstrap-button.js v2.3.1 + * http://twitter.github.com/bootstrap/javascript.html#buttons + * ============================================================ + * Copyright 2012 Twitter, Inc. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * ============================================================ */ + + +!function ($) { + + "use strict"; // jshint ;_; + + + /* BUTTON PUBLIC CLASS DEFINITION + * ============================== */ + + var Button = function (element, options) { + this.$element = $(element) + this.options = $.extend({}, $.fn.button.defaults, options) + } + + Button.prototype.setState = function (state) { + var d = 'disabled' + , $el = this.$element + , data = $el.data() + , val = $el.is('input') ? 'val' : 'html' + + state = state + 'Text' + data.resetText || $el.data('resetText', $el[val]()) + + $el[val](data[state] || this.options[state]) + + // push to event loop to allow forms to submit + setTimeout(function () { + state == 'loadingText' ? + $el.addClass(d).attr(d, d) : + $el.removeClass(d).removeAttr(d) + }, 0) + } + + Button.prototype.toggle = function () { + var $parent = this.$element.closest('[data-toggle="buttons-radio"]') + + $parent && $parent + .find('.active') + .removeClass('active') + + this.$element.toggleClass('active') + } + + + /* BUTTON PLUGIN DEFINITION + * ======================== */ + + var old = $.fn.button + + $.fn.button = function (option) { + return this.each(function () { + var $this = $(this) + , data = $this.data('button') + , options = typeof option == 'object' && option + if (!data) $this.data('button', (data = new Button(this, options))) + if (option == 'toggle') data.toggle() + else if (option) data.setState(option) + }) + } + + $.fn.button.defaults = { + loadingText: 'loading...' + } + + $.fn.button.Constructor = Button + + + /* BUTTON NO CONFLICT + * ================== */ + + $.fn.button.noConflict = function () { + $.fn.button = old + return this + } + + + /* BUTTON DATA-API + * =============== */ + + $(document).on('click.button.data-api', '[data-toggle^=button]', function (e) { + var $btn = $(e.target) + if (!$btn.hasClass('btn')) $btn = $btn.closest('.btn') + $btn.button('toggle') + }) + +}(window.jQuery);/* ========================================================== + * bootstrap-carousel.js v2.3.1 + * http://twitter.github.com/bootstrap/javascript.html#carousel + * ========================================================== + * Copyright 2012 Twitter, Inc. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * ========================================================== */ + + +!function ($) { + + "use strict"; // jshint ;_; + + + /* CAROUSEL CLASS DEFINITION + * ========================= */ + + var Carousel = function (element, options) { + this.$element = $(element) + this.$indicators = this.$element.find('.carousel-indicators') + this.options = options + this.options.pause == 'hover' && this.$element + .on('mouseenter', $.proxy(this.pause, this)) + .on('mouseleave', $.proxy(this.cycle, this)) + } + + Carousel.prototype = { + + cycle: function (e) { + if (!e) this.paused = false + if (this.interval) clearInterval(this.interval); + this.options.interval + && !this.paused + && (this.interval = setInterval($.proxy(this.next, this), this.options.interval)) + return this + } + + , getActiveIndex: function () { + this.$active = this.$element.find('.item.active') + this.$items = this.$active.parent().children() + return this.$items.index(this.$active) + } + + , to: function (pos) { + var activeIndex = this.getActiveIndex() + , that = this + + if (pos > (this.$items.length - 1) || pos < 0) return + + if (this.sliding) { + return this.$element.one('slid', function () { + that.to(pos) + }) + } + + if (activeIndex == pos) { + return this.pause().cycle() + } + + return this.slide(pos > activeIndex ? 'next' : 'prev', $(this.$items[pos])) + } + + , pause: function (e) { + if (!e) this.paused = true + if (this.$element.find('.next, .prev').length && $.support.transition.end) { + this.$element.trigger($.support.transition.end) + this.cycle(true) + } + clearInterval(this.interval) + this.interval = null + return this + } + + , next: function () { + if (this.sliding) return + return this.slide('next') + } + + , prev: function () { + if (this.sliding) return + return this.slide('prev') + } + + , slide: function (type, next) { + var $active = this.$element.find('.item.active') + , $next = next || $active[type]() + , isCycling = this.interval + , direction = type == 'next' ? 'left' : 'right' + , fallback = type == 'next' ? 'first' : 'last' + , that = this + , e + + this.sliding = true + + isCycling && this.pause() + + $next = $next.length ? $next : this.$element.find('.item')[fallback]() + + e = $.Event('slide', { + relatedTarget: $next[0] + , direction: direction + }) + + if ($next.hasClass('active')) return + + if (this.$indicators.length) { + this.$indicators.find('.active').removeClass('active') + this.$element.one('slid', function () { + var $nextIndicator = $(that.$indicators.children()[that.getActiveIndex()]) + $nextIndicator && $nextIndicator.addClass('active') + }) + } + + if ($.support.transition && this.$element.hasClass('slide')) { + this.$element.trigger(e) + if (e.isDefaultPrevented()) return + $next.addClass(type) + $next[0].offsetWidth // force reflow + $active.addClass(direction) + $next.addClass(direction) + this.$element.one($.support.transition.end, function () { + $next.removeClass([type, direction].join(' ')).addClass('active') + $active.removeClass(['active', direction].join(' ')) + that.sliding = false + setTimeout(function () { that.$element.trigger('slid') }, 0) + }) + } else { + this.$element.trigger(e) + if (e.isDefaultPrevented()) return + $active.removeClass('active') + $next.addClass('active') + this.sliding = false + this.$element.trigger('slid') + } + + isCycling && this.cycle() + + return this + } + + } + + + /* CAROUSEL PLUGIN DEFINITION + * ========================== */ + + var old = $.fn.carousel + + $.fn.carousel = function (option) { + return this.each(function () { + var $this = $(this) + , data = $this.data('carousel') + , options = $.extend({}, $.fn.carousel.defaults, typeof option == 'object' && option) + , action = typeof option == 'string' ? option : options.slide + if (!data) $this.data('carousel', (data = new Carousel(this, options))) + if (typeof option == 'number') data.to(option) + else if (action) data[action]() + else if (options.interval) data.pause().cycle() + }) + } + + $.fn.carousel.defaults = { + interval: 5000 + , pause: 'hover' + } + + $.fn.carousel.Constructor = Carousel + + + /* CAROUSEL NO CONFLICT + * ==================== */ + + $.fn.carousel.noConflict = function () { + $.fn.carousel = old + return this + } + + /* CAROUSEL DATA-API + * ================= */ + + $(document).on('click.carousel.data-api', '[data-slide], [data-slide-to]', function (e) { + var $this = $(this), href + , $target = $($this.attr('data-target') || (href = $this.attr('href')) && href.replace(/.*(?=#[^\s]+$)/, '')) //strip for ie7 + , options = $.extend({}, $target.data(), $this.data()) + , slideIndex + + $target.carousel(options) + + if (slideIndex = $this.attr('data-slide-to')) { + $target.data('carousel').pause().to(slideIndex).cycle() + } + + e.preventDefault() + }) + +}(window.jQuery);/* ============================================================= + * bootstrap-collapse.js v2.3.1 + * http://twitter.github.com/bootstrap/javascript.html#collapse + * ============================================================= + * Copyright 2012 Twitter, Inc. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * ============================================================ */ + + +!function ($) { + + "use strict"; // jshint ;_; + + + /* COLLAPSE PUBLIC CLASS DEFINITION + * ================================ */ + + var Collapse = function (element, options) { + this.$element = $(element) + this.options = $.extend({}, $.fn.collapse.defaults, options) + + if (this.options.parent) { + this.$parent = $(this.options.parent) + } + + this.options.toggle && this.toggle() + } + + Collapse.prototype = { + + constructor: Collapse + + , dimension: function () { + var hasWidth = this.$element.hasClass('width') + return hasWidth ? 'width' : 'height' + } + + , show: function () { + var dimension + , scroll + , actives + , hasData + + if (this.transitioning || this.$element.hasClass('in')) return + + dimension = this.dimension() + scroll = $.camelCase(['scroll', dimension].join('-')) + actives = this.$parent && this.$parent.find('> .accordion-group > .in') + + if (actives && actives.length) { + hasData = actives.data('collapse') + if (hasData && hasData.transitioning) return + actives.collapse('hide') + hasData || actives.data('collapse', null) + } + + this.$element[dimension](0) + this.transition('addClass', $.Event('show'), 'shown') + $.support.transition && this.$element[dimension](this.$element[0][scroll]) + } + + , hide: function () { + var dimension + if (this.transitioning || !this.$element.hasClass('in')) return + dimension = this.dimension() + this.reset(this.$element[dimension]()) + this.transition('removeClass', $.Event('hide'), 'hidden') + this.$element[dimension](0) + } + + , reset: function (size) { + var dimension = this.dimension() + + this.$element + .removeClass('collapse') + [dimension](size || 'auto') + [0].offsetWidth + + this.$element[size !== null ? 'addClass' : 'removeClass']('collapse') + + return this + } + + , transition: function (method, startEvent, completeEvent) { + var that = this + , complete = function () { + if (startEvent.type == 'show') that.reset() + that.transitioning = 0 + that.$element.trigger(completeEvent) + } + + this.$element.trigger(startEvent) + + if (startEvent.isDefaultPrevented()) return + + this.transitioning = 1 + + this.$element[method]('in') + + $.support.transition && this.$element.hasClass('collapse') ? + this.$element.one($.support.transition.end, complete) : + complete() + } + + , toggle: function () { + this[this.$element.hasClass('in') ? 'hide' : 'show']() + } + + } + + + /* COLLAPSE PLUGIN DEFINITION + * ========================== */ + + var old = $.fn.collapse + + $.fn.collapse = function (option) { + return this.each(function () { + var $this = $(this) + , data = $this.data('collapse') + , options = $.extend({}, $.fn.collapse.defaults, $this.data(), typeof option == 'object' && option) + if (!data) $this.data('collapse', (data = new Collapse(this, options))) + if (typeof option == 'string') data[option]() + }) + } + + $.fn.collapse.defaults = { + toggle: true + } + + $.fn.collapse.Constructor = Collapse + + + /* COLLAPSE NO CONFLICT + * ==================== */ + + $.fn.collapse.noConflict = function () { + $.fn.collapse = old + return this + } + + + /* COLLAPSE DATA-API + * ================= */ + + $(document).on('click.collapse.data-api', '[data-toggle=collapse]', function (e) { + var $this = $(this), href + , target = $this.attr('data-target') + || e.preventDefault() + || (href = $this.attr('href')) && href.replace(/.*(?=#[^\s]+$)/, '') //strip for ie7 + , option = $(target).data('collapse') ? 'toggle' : $this.data() + $this[$(target).hasClass('in') ? 'addClass' : 'removeClass']('collapsed') + $(target).collapse(option) + }) + +}(window.jQuery);/* ============================================================ + * bootstrap-dropdown.js v2.3.1 + * http://twitter.github.com/bootstrap/javascript.html#dropdowns + * ============================================================ + * Copyright 2012 Twitter, Inc. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * ============================================================ */ + + +!function ($) { + + "use strict"; // jshint ;_; + + + /* DROPDOWN CLASS DEFINITION + * ========================= */ + + var toggle = '[data-toggle=dropdown]' + , Dropdown = function (element) { + var $el = $(element).on('click.dropdown.data-api', this.toggle) + $('html').on('click.dropdown.data-api', function () { + $el.parent().removeClass('open') + }) + } + + Dropdown.prototype = { + + constructor: Dropdown + + , toggle: function (e) { + var $this = $(this) + , $parent + , isActive + + if ($this.is('.disabled, :disabled')) return + + $parent = getParent($this) + + isActive = $parent.hasClass('open') + + clearMenus() + + if (!isActive) { + $parent.toggleClass('open') + } + + $this.focus() + + return false + } + + , keydown: function (e) { + var $this + , $items + , $active + , $parent + , isActive + , index + + if (!/(38|40|27)/.test(e.keyCode)) return + + $this = $(this) + + e.preventDefault() + e.stopPropagation() + + if ($this.is('.disabled, :disabled')) return + + $parent = getParent($this) + + isActive = $parent.hasClass('open') + + if (!isActive || (isActive && e.keyCode == 27)) { + if (e.which == 27) $parent.find(toggle).focus() + return $this.click() + } + + $items = $('[role=menu] li:not(.divider):visible a', $parent) + + if (!$items.length) return + + index = $items.index($items.filter(':focus')) + + if (e.keyCode == 38 && index > 0) index-- // up + if (e.keyCode == 40 && index < $items.length - 1) index++ // down + if (!~index) index = 0 + + $items + .eq(index) + .focus() + } + + } + + function clearMenus() { + $(toggle).each(function () { + getParent($(this)).removeClass('open') + }) + } + + function getParent($this) { + var selector = $this.attr('data-target') + , $parent + + if (!selector) { + selector = $this.attr('href') + selector = selector && /#/.test(selector) && selector.replace(/.*(?=#[^\s]*$)/, '') //strip for ie7 + } + + $parent = selector && $(selector) + + if (!$parent || !$parent.length) $parent = $this.parent() + + return $parent + } + + + /* DROPDOWN PLUGIN DEFINITION + * ========================== */ + + var old = $.fn.dropdown + + $.fn.dropdown = function (option) { + return this.each(function () { + var $this = $(this) + , data = $this.data('dropdown') + if (!data) $this.data('dropdown', (data = new Dropdown(this))) + if (typeof option == 'string') data[option].call($this) + }) + } + + $.fn.dropdown.Constructor = Dropdown + + + /* DROPDOWN NO CONFLICT + * ==================== */ + + $.fn.dropdown.noConflict = function () { + $.fn.dropdown = old + return this + } + + + /* APPLY TO STANDARD DROPDOWN ELEMENTS + * =================================== */ + + $(document) + .on('click.dropdown.data-api', clearMenus) + .on('click.dropdown.data-api', '.dropdown form', function (e) { e.stopPropagation() }) + .on('click.dropdown-menu', function (e) { e.stopPropagation() }) + .on('click.dropdown.data-api' , toggle, Dropdown.prototype.toggle) + .on('keydown.dropdown.data-api', toggle + ', [role=menu]' , Dropdown.prototype.keydown) + +}(window.jQuery); +/* ========================================================= + * bootstrap-modal.js v2.3.1 + * http://twitter.github.com/bootstrap/javascript.html#modals + * ========================================================= + * Copyright 2012 Twitter, Inc. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * ========================================================= */ + + +!function ($) { + + "use strict"; // jshint ;_; + + + /* MODAL CLASS DEFINITION + * ====================== */ + + var Modal = function (element, options) { + this.options = options + this.$element = $(element) + .delegate('[data-dismiss="modal"]', 'click.dismiss.modal', $.proxy(this.hide, this)) + this.options.remote && this.$element.find('.modal-body').load(this.options.remote) + } + + Modal.prototype = { + + constructor: Modal + + , toggle: function () { + return this[!this.isShown ? 'show' : 'hide']() + } + + , show: function () { + var that = this + , e = $.Event('show') + + this.$element.trigger(e) + + if (this.isShown || e.isDefaultPrevented()) return + + this.isShown = true + + this.escape() + + this.backdrop(function () { + var transition = $.support.transition && that.$element.hasClass('fade') + + if (!that.$element.parent().length) { + that.$element.appendTo(document.body) //don't move modals dom position + } + + that.$element.show() + + if (transition) { + that.$element[0].offsetWidth // force reflow + } + + that.$element + .addClass('in') + .attr('aria-hidden', false) + + that.enforceFocus() + + transition ? + that.$element.one($.support.transition.end, function () { that.$element.focus().trigger('shown') }) : + that.$element.focus().trigger('shown') + + }) + } + + , hide: function (e) { + e && e.preventDefault() + + var that = this + + e = $.Event('hide') + + this.$element.trigger(e) + + if (!this.isShown || e.isDefaultPrevented()) return + + this.isShown = false + + this.escape() + + $(document).off('focusin.modal') + + this.$element + .removeClass('in') + .attr('aria-hidden', true) + + $.support.transition && this.$element.hasClass('fade') ? + this.hideWithTransition() : + this.hideModal() + } + + , enforceFocus: function () { + var that = this + $(document).on('focusin.modal', function (e) { + if (that.$element[0] !== e.target && !that.$element.has(e.target).length) { + that.$element.focus() + } + }) + } + + , escape: function () { + var that = this + if (this.isShown && this.options.keyboard) { + this.$element.on('keyup.dismiss.modal', function ( e ) { + e.which == 27 && that.hide() + }) + } else if (!this.isShown) { + this.$element.off('keyup.dismiss.modal') + } + } + + , hideWithTransition: function () { + var that = this + , timeout = setTimeout(function () { + that.$element.off($.support.transition.end) + that.hideModal() + }, 500) + + this.$element.one($.support.transition.end, function () { + clearTimeout(timeout) + that.hideModal() + }) + } + + , hideModal: function () { + var that = this + this.$element.hide() + this.backdrop(function () { + that.removeBackdrop() + that.$element.trigger('hidden') + }) + } + + , removeBackdrop: function () { + this.$backdrop && this.$backdrop.remove() + this.$backdrop = null + } + + , backdrop: function (callback) { + var that = this + , animate = this.$element.hasClass('fade') ? 'fade' : '' + + if (this.isShown && this.options.backdrop) { + var doAnimate = $.support.transition && animate + + this.$backdrop = $('